From f8a70886f04a22fa4a33ff3c2781523dd9d0e861 Mon Sep 17 00:00:00 2001 From: Astound Date: Sun, 22 Jun 2025 20:39:04 -0500 Subject: [PATCH] initial import --- 3proxy/3proxy.initd | 13 + 3proxy/3proxy.install | 24 + 3proxy/3proxy.run | 2 + 3proxy/PKGBUILD | 75 + 3proxy/remove-systemd.patch | 27 + 6tunnel/PKGBUILD | 26 + 7kaa/7kaa.desktop | 9 + 7kaa/7kaa.png | Bin 0 -> 569 bytes 7kaa/7kaa.sh | 3 + 7kaa/PKGBUILD | 70 + 7kaa/remove-nonfree-services.patch | 243 + a2ps/PKGBUILD | 53 + a52dec/PKGBUILD | 60 + a52dec/a52dec-0.7.4-build.patch | 27 + a52dec/sndio.patch | 281 + a52dec/stderr.patch | 17 + aalib/PKGBUILD | 55 + aalib/aclocal-fixes.patch | 11 + abiword/PKGBUILD | 88 + abiword/aiksaurus-plugin.m4 | 46 + abiword/boost-asio.patch | 164 + abiword/command-plugin.m4 | 47 + abiword/liberation-fonts.patch | 1694 ++ abiword/python-override.patch | 31 + abook/PKGBUILD | 56 + abook/fix-build.patch | 6 + abook/gcc5.patch | 24 + acpica/PKGBUILD | 45 + aiksaurus/PKGBUILD | 24 + allegro/PKGBUILD | 57 + allegro/fix-build.patch | 10 + ...001-correct-paths-for-configurations.patch | 23 + ...bled-extended-namehints-in-alsa.conf.patch | 16 + alsa-lib/PKGBUILD | 59 + alsa-lib/alsa.conf.profile | 1 + alsa-lib/alsa.sh.profile | 42 + alsa-lib/asound.conf | 17 + alsa-topology-conf/PKGBUILD | 22 + alsa-ucm-conf/PKGBUILD | 22 + alsa-utils/PKGBUILD | 84 + alsa-utils/alsasound.confd | 15 + alsa-utils/alsasound.finish | 3 + alsa-utils/alsasound.initd | 87 + alsa-utils/alsasound.run | 3 + alttab/PKGBUILD | 44 + android-file-transfer/PKGBUILD | 29 + antimicrox/PKGBUILD | 52 + antiword/PKGBUILD | 51 + aqbanking/PKGBUILD | 33 + arandr/PKGBUILD | 19 + arc-icon-theme/PKGBUILD | 32 + aria2/PKGBUILD | 38 + armagetronad/PKGBUILD | 51 + asc/PKGBUILD | 67 + asciidoc/PKGBUILD | 56 + asciidoctor/PKGBUILD | 30 + asciiquarium/PKGBUILD | 20 + aspell-i18n-dict-af/PKGBUILD | 55 + aspell-i18n-dict-am/PKGBUILD | 55 + aspell-i18n-dict-ar/PKGBUILD | 54 + aspell-i18n-dict-ast/PKGBUILD | 54 + aspell-i18n-dict-az/PKGBUILD | 54 + aspell-i18n-dict-be/PKGBUILD | 54 + aspell-i18n-dict-bg/PKGBUILD | 54 + aspell-i18n-dict-bn/PKGBUILD | 54 + aspell-i18n-dict-br/PKGBUILD | 51 + aspell-i18n-dict-ca/PKGBUILD | 54 + aspell-i18n-dict-cs/PKGBUILD | 54 + aspell-i18n-dict-csb/PKGBUILD | 54 + aspell-i18n-dict-cy/PKGBUILD | 51 + aspell-i18n-dict-da/PKGBUILD | 54 + aspell-i18n-dict-de-alt/PKGBUILD | 54 + aspell-i18n-dict-de/PKGBUILD | 56 + aspell-i18n-dict-el/PKGBUILD | 54 + aspell-i18n-dict-en/PKGBUILD | 60 + aspell-i18n-dict-eo/PKGBUILD | 54 + aspell-i18n-dict-es/PKGBUILD | 54 + aspell-i18n-dict-et/PKGBUILD | 54 + aspell-i18n-dict-fa/PKGBUILD | 54 + aspell-i18n-dict-fi/PKGBUILD | 54 + aspell-i18n-dict-fo/PKGBUILD | 54 + aspell-i18n-dict-fr/PKGBUILD | 51 + aspell-i18n-dict-fy/PKGBUILD | 54 + aspell-i18n-dict-ga/PKGBUILD | 54 + aspell-i18n-dict-gd/PKGBUILD | 54 + aspell-i18n-dict-gl/PKGBUILD | 54 + aspell-i18n-dict-grc/PKGBUILD | 54 + aspell-i18n-dict-gu/PKGBUILD | 54 + aspell-i18n-dict-gv/PKGBUILD | 54 + aspell-i18n-dict-he/PKGBUILD | 54 + aspell-i18n-dict-hi/PKGBUILD | 54 + aspell-i18n-dict-hil/PKGBUILD | 54 + aspell-i18n-dict-hr/PKGBUILD | 54 + aspell-i18n-dict-hsb/PKGBUILD | 54 + aspell-i18n-dict-hu/PKGBUILD | 54 + aspell-i18n-dict-hus/PKGBUILD | 54 + aspell-i18n-dict-hy/PKGBUILD | 54 + aspell-i18n-dict-ia/PKGBUILD | 54 + aspell-i18n-dict-id/PKGBUILD | 54 + aspell-i18n-dict-is/PKGBUILD | 55 + aspell-i18n-dict-it/PKGBUILD | 54 + aspell-i18n-dict-kn/PKGBUILD | 59 + aspell-i18n-dict-ku/PKGBUILD | 54 + aspell-i18n-dict-ky/PKGBUILD | 54 + aspell-i18n-dict-la/PKGBUILD | 54 + aspell-i18n-dict-lt/PKGBUILD | 54 + aspell-i18n-dict-lv/PKGBUILD | 54 + aspell-i18n-dict-mg/PKGBUILD | 54 + aspell-i18n-dict-mi/PKGBUILD | 54 + aspell-i18n-dict-mk/PKGBUILD | 54 + aspell-i18n-dict-ml/PKGBUILD | 54 + aspell-i18n-dict-mn/PKGBUILD | 54 + aspell-i18n-dict-mr/PKGBUILD | 54 + aspell-i18n-dict-ms/PKGBUILD | 54 + aspell-i18n-dict-mt/PKGBUILD | 54 + aspell-i18n-dict-nb/PKGBUILD | 54 + aspell-i18n-dict-nds/PKGBUILD | 59 + aspell-i18n-dict-nl/PKGBUILD | 71 + aspell-i18n-dict-nn/PKGBUILD | 54 + aspell-i18n-dict-ny/PKGBUILD | 54 + aspell-i18n-dict-or/PKGBUILD | 54 + aspell-i18n-dict-pa/PKGBUILD | 54 + aspell-i18n-dict-pl/PKGBUILD | 56 + aspell-i18n-dict-pt-br/PKGBUILD | 54 + aspell-i18n-dict-pt-pt/PKGBUILD | 54 + aspell-i18n-dict-pt/PKGBUILD | 53 + aspell-i18n-dict-qu/PKGBUILD | 54 + aspell-i18n-dict-ro/PKGBUILD | 54 + aspell-i18n-dict-ru/PKGBUILD | 54 + aspell-i18n-dict-rw/PKGBUILD | 54 + aspell-i18n-dict-sc/PKGBUILD | 54 + aspell-i18n-dict-sk/PKGBUILD | 54 + aspell-i18n-dict-sl/PKGBUILD | 54 + aspell-i18n-dict-sr/PKGBUILD | 54 + aspell-i18n-dict-sv/PKGBUILD | 54 + aspell-i18n-dict-sw/PKGBUILD | 54 + aspell-i18n-dict-ta/PKGBUILD | 54 + aspell-i18n-dict-te/PKGBUILD | 53 + aspell-i18n-dict-tet/PKGBUILD | 54 + aspell-i18n-dict-tk/PKGBUILD | 54 + aspell-i18n-dict-tl/PKGBUILD | 54 + aspell-i18n-dict-tn/PKGBUILD | 54 + aspell-i18n-dict-tr/PKGBUILD | 54 + aspell-i18n-dict-uk/PKGBUILD | 54 + aspell-i18n-dict-uz/PKGBUILD | 54 + aspell-i18n-dict-vi/PKGBUILD | 54 + aspell-i18n-dict-wa/PKGBUILD | 54 + aspell-i18n-dict-yi/PKGBUILD | 54 + aspell-i18n-dict-zu/PKGBUILD | 54 + aspell/PKGBUILD | 55 + assimp/PKGBUILD | 56 + atk/PKGBUILD | 27 + atkmm/PKGBUILD | 26 + aucatctl/PKGBUILD | 27 + audacious-legacy/PKGBUILD | 51 + audacious-plugins-legacy/PKGBUILD | 33 + audacity-legacy/PKGBUILD | 78 + audacity-legacy/disable-update-check.patch | 23 + audiofile/PKGBUILD | 45 + autoconf-archive/PKGBUILD | 47 + autoconf-legacy/PKGBUILD | 52 + autogen/PKGBUILD | 57 + autojump/PKGBUILD | 65 + autojump/autojump.install | 9 + automake-1.11/PKGBUILD | 40 + automake-1.11/automake.install | 22 + automake-1.11/perl2.6.patch | 12 + automake-1.14/PKGBUILD | 36 + automake-1.15/PKGBUILD | 62 + awesome-terminal-fonts/PKGBUILD | 26 + awesome/PKGBUILD | 62 + awesome/fix-build.patch | 21 + babl/PKGBUILD | 68 + badwolf/PKGBUILD | 25 + bam/PKGBUILD | 42 + bash-completion/PKGBUILD | 51 + bc/PKGBUILD | 48 + bchunk/PKGBUILD | 44 + bemenu/PKGBUILD | 54 + bemenu/remove-wayland.patch | 84 + bigloo/PKGBUILD | 68 + bigloo/lgpl-2.0.txt | 481 + bin2iso/LICENSE | 14 + bin2iso/PKGBUILD | 25 + bind/127.0.0.zone | 10 + bind/PKGBUILD | 113 + bind/bind.install | 40 + bind/empty.zone | 8 + bind/localhost.ip6.zone | 10 + bind/localhost.zone | 11 + bind/named.conf | 72 + bind/named.initd | 27 + bind/named.run | 4 + blackbox-themes/PKGBUILD | 28 + blackbox/PKGBUILD | 74 + blackbox/menu.patch | 46 + blasphemer/PKGBUILD | 37 + blasphemer/blasphemer | 83 + blasphemer/blasphemer.desktop | 9 + blasphemer/blasphemer.png | Bin 0 -> 13559 bytes blobby-volley/PKGBUILD | 68 + blobby-volley/blobby-volley.desktop | 11 + blobby-volley/blobby-volley.png | Bin 0 -> 8032 bytes blockrage/PKGBUILD | 43 + blockrage/blockrage.desktop | 9 + blockrage/blockrage.png | Bin 0 -> 783 bytes blockrage/fix-build.patch | 90 + bmake/PKGBUILD | 56 + bmkdep/PKGBUILD | 31 + bmpanel/PKGBUILD | 23 + bogofilter/PKGBUILD | 65 + boost/PKGBUILD | 127 + box2d/PKGBUILD | 34 + braa/PKGBUILD | 43 + breezy/PKGBUILD | 62 + brltty/PKGBUILD | 83 + brltty/brltty.initd | 12 + brltty/brltty.install | 17 + brltty/brltty.run | 3 + brltty/fix-build.patch | 22 + bsdmainutils/PKGBUILD | 30 + bspwm/PKGBUILD | 47 + bspwm/libre.patch | 10 + bzflag/PKGBUILD | 34 + bzr/PKGBUILD | 45 + bzr/bzr-lazy-regex.patch | 20 + c-ares/PKGBUILD | 33 + cabextract/PKGBUILD | 47 + cadaver/PKGBUILD | 31 + cadaver/disable-sslv2.patch | 16 + cairo-perl/PKGBUILD | 26 + ...-Remove-the-right-glyph-from-pixman-.patch | 27 + cairo/PKGBUILD | 75 + cairomm/PKGBUILD | 24 + calcurse/PKGBUILD | 37 + camlp5/PKGBUILD | 35 + cantarell-fonts/PKGBUILD | 25 + capnproto/PKGBUILD | 51 + capstone/PKGBUILD | 53 + catcodec/PKGBUILD | 41 + catdoc/PKGBUILD | 47 + cbatticon/PKGBUILD | 49 + cbatticon/cbatticon.desktop | 9 + ccache-legacy/PKGBUILD | 43 + ccextractor-legacy/PKGBUILD | 24 + ccze/PKGBUILD | 63 + cdparanoia/PKGBUILD | 50 + cdparanoia/gcc.patch | 582 + cdrdao/PKGBUILD | 47 + celestia-legacy/PKGBUILD | 41 + celestia-legacy/fix-desktop.patch | 23 + celt/PKGBUILD | 32 + celt/sndio.patch | 92 + certbot-nginx/PKGBUILD | 28 + certbot/PKGBUILD | 48 + cgit/PKGBUILD | 88 + cgit/cgit.install | 5 + check/PKGBUILD | 50 + chmlib/PKGBUILD | 26 + chocolate-doom/PKGBUILD | 56 + chocolate-doom/chocolate-doom.install | 9 + chocolate-doom/chocolate-heretic | 13 + chromium-bsu/PKGBUILD | 36 + chromium-bsu/use_fabs_for_floats.patch | 26 + chrony/PKGBUILD | 82 + chrony/chrony.install | 22 + chrony/chronyd.confd | 20 + chrony/chronyd.initd | 32 + chrony/chronyd.run | 3 + chroot-nspawn/PKGBUILD | 26 + chrpath/PKGBUILD | 26 + cifs-utils/PKGBUILD | 63 + clang/PKGBUILD | 126 + clang/enable-SSP-and-PIE-by-default.patch | 336 + claws-mail-gtk2/PKGBUILD | 70 + claws-mail-gtk2/bash_completion | 30 + claws-mail-gtk2/rework-defs.patch | 13 + claws-mail-gtk2/uintptr_t.patch | 12 + claws-mail/PKGBUILD | 80 + claws-mail/bash_completion | 30 + claws-mail/rework-defs.patch | 13 + clazy/PKGBUILD | 36 + clazy/fix-build.patch | 11 + clifm/PKGBUILD | 25 + clisp/PKGBUILD | 47 + clutter-gtk/PKGBUILD | 41 + clutter/PKGBUILD | 57 + cmake/PKGBUILD | 58 + cmake/byacc.patch | 57 + cmark/PKGBUILD | 50 + cmatrix/PKGBUILD | 72 + cmatrix/cmatrix-tty | 39 + cmocka/PKGBUILD | 43 + cmus/PKGBUILD | 64 + codeblocks/PKGBUILD | 42 + codeblocks/fix-crash.patch | 11 + codecrypt/PKGBUILD | 32 + codecrypt/fix-build.patch | 11 + cogl/PKGBUILD | 34 + compface/LICENSE | 94 + compface/PKGBUILD | 34 + compface/compface-1.5.2-build.patch | 82 + compiler-rt/PKGBUILD | 42 + confuse/PKGBUILD | 53 + cpio/PKGBUILD | 37 + cppcheck/PKGBUILD | 67 + cppunit/PKGBUILD | 31 + cpulimit/PKGBUILD | 23 + crispy-doom/PKGBUILD | 56 + crispy-doom/crispy-doom.install | 15 + cronie/PKGBUILD | 77 + cronie/cronie.conf | 1 + cronie/cronie.confd | 9 + cronie/cronie.initd | 13 + cronie/cronie.run | 3 + cronie/cronie_log.run | 2 + cronie/deny | 1 + crypto++/PKGBUILD | 37 + crypto++/libcryptopp.pc | 14 + cscope/PKGBUILD | 52 + csfml/PKGBUILD | 53 + csh/PKGBUILD | 54 + csh/csh.install | 13 + csh/fix-build.patch | 268 + ctpl/PKGBUILD | 48 + cuetools/PKGBUILD | 36 + cups-filters/PKGBUILD | 75 + cups-filters/cups-browsed.initd | 22 + cups-filters/cups-browsed.run | 2 + cups-pdf/PKGBUILD | 65 + cups-pdf/cups-pdf.install | 16 + cups/PKGBUILD | 195 + cups/cups-1.6.2-statedir.patch | 12 + cups/cups-no-export-ssllibs.patch | 12 + cups/cups.install | 6 + cups/cups.logrotate | 5 + cups/cupsd.initd | 20 + cups/cupsd.run | 2 + cups/guid.patch | 42 + ...server-executables-in-usrlibexeccups.patch | 24 + curlftpfs/PKGBUILD | 44 + cvs/PKGBUILD | 89 + cvs/cvs-1.11.19-abortabort.patch | 70 + cvs/cvs-1.11.19-comp.patch | 11 + cvs/cvs-1.11.19-extzlib.patch | 44 + cvs/cvs-1.11.19-logmsg.patch | 20 + cvs/cvs-1.11.19-netbsd-tag.patch | 28 + cvs/cvs-1.11.19-tagname.patch | 11 + cvs/cvs-1.11.19-tmp.patch | 19 + cvs/cvs-1.11.21-diff-kk.patch | 11 + cvs/cvs-1.11.21-diff.patch | 21 + cvs/cvs-1.11.21-sort.patch | 12 + ...ss-compilation-with-Wformat-security.patch | 73 + cvs/cvs-1.11.23-cve-2010-3846.patch | 167 + cvs/cvs-1.11.23-cvspass.patch | 113 + ....23-doc-Add-mandatory-argument-to-sp.patch | 30 + cvs/cvs-1.11.23-getline64.patch | 34 + ...ke_make_check_sanity_testing_verbose.patch | 30 + ...ove_undefined_date_from_cvs_1_header.patch | 25 + cvs/cvs-1.11.23-sanity.patch | 39 + cwm/PKGBUILD | 54 + cwm/change-default-binaries.patch | 13 + cwm/cwm.desktop | 7 + ...authd.conf-location-in-documentation.patch | 41 + ...0006-Enable-autoconf-maintainer-mode.patch | 22 + ...-libraries-when-ld-as-needed-is-used.patch | 37 + ...n-t-use-la-files-for-opening-plugins.patch | 153 + ...er-checking-gss_inquire_sec_context_.patch | 26 + ...2-Fix-keytab-option-for-MIT-Kerberos.patch | 66 + ...ont_use_la_files_for_opening_plugins.patch | 134 + ...l-include-postgresql-to-include-path.patch | 23 + cyrus-sasl/PKGBUILD | 177 + cyrus-sasl/cyrus-sasl-2.1.22-as-needed.patch | 11 + cyrus-sasl/cyrus-sasl-2.1.22-qa.patch | 22 + cyrus-sasl/cyrus-sasl-2.1.26-size_t.patch | 11 + cyrus-sasl/cyrus-sasl-gssapi.patch | 16 + cyrus-sasl/cyrus-sasl-sql.patch | 39 + cyrus-sasl/fix-pkgconfig.patch | 27 + cyrus-sasl/gdbm-errno.patch | 29 + cyrus-sasl/saslauthd.confd | 1 + cyrus-sasl/saslauthd.initd | 20 + daemontools/LICENSE | 21 + daemontools/PKGBUILD | 52 + daemontools/daemontools-0.76.errno.patch | 13 + .../daemontools-0.76.service-path-fix.patch | 26 + daemontools/svscan.confd | 7 + daemontools/svscan.initd | 31 + daemontools/svscan.run | 3 + darkhttpd/PKGBUILD | 42 + darkhttpd/darkhttpd.confd | 12 + darkhttpd/darkhttpd.initd | 32 + darkhttpd/darkhttpd.install | 28 + darkhttpd/darkhttpd.run | 4 + darkplaces/PKGBUILD | 50 + darkplaces/darkplaces.desktop | 11 + darkplaces/darkplaces.install | 10 + dave-gnukem/PKGBUILD | 53 + dave-gnukem/dave-gnukem | 2 + dave-gnukem/dave-gnukem.desktop | 8 + dave-gnukem/dave-gnukem.png | Bin 0 -> 8444 bytes dave-gnukem/libre.patch | 58 + dcron/COPYING | 340 + dcron/PKGBUILD | 71 + dcron/dcron.conf | 1 + dcron/dcron.confd | 4 + dcron/dcron.initd | 12 + dcron/dcron.run | 3 + dcron/ldflags.patch | 38 + dcron/pick-up-update.patch | 26 + dcron/pidfile.patch | 29 + dd_rescue/PKGBUILD | 35 + ddrescue/PKGBUILD | 40 + deadbeef/PKGBUILD | 57 + deadbeef/libre.patch | 11 + dejagnu/PKGBUILD | 31 + desktop-file-utils/PKGBUILD | 39 + .../update-desktop-database.hook | 11 + detox/PKGBUILD | 35 + deutex/PKGBUILD | 41 + deutex/update-copyright-year.patch | 13 + dev86/PKGBUILD | 31 + dev86/mandir.patch | 34 + devil/PKGBUILD | 42 + devil/soversion.patch | 47 + dhcp/0002-iproute2.patch | 13 + dhcp/PKGBUILD | 125 + dhcp/dhclient.initd | 13 + dhcp/dhclient.run | 2 + dhcp/dhclient6.initd | 13 + dhcp/dhclient6.run | 2 + dhcp/dhcp.install | 32 + dhcp/dhcpd.initd | 13 + dhcp/dhcpd.run | 2 + dhcp/dhcpd6.initd | 13 + dhcp/dhcpd6.run | 2 + dhcpcd-ui/PKGBUILD | 121 + dhcpcd-ui/dhcpcd-gtk.desktop | 10 + dhcpcd-ui/fix-icons.patch | 22 + dhcpcd-ui/fix-messages.patch | 22 + dia/PKGBUILD | 46 + dia/dia-0.9.3-cve-2019-19451.patch | 26 + diffstat/PKGBUILD | 26 + dillo/PKGBUILD | 65 + dillo/dillo.desktop | 10 + dillo/dillo.png | Bin 0 -> 28887 bytes dillo/libre.patch | 21 + discount/PKGBUILD | 49 + django/PKGBUILD | 67 + djview/PKGBUILD | 51 + djview/djvulibre-djview4.appdata.xml | 37 + djvulibre/PKGBUILD | 48 + ...y-installed-modules-available-immedi.patch | 31 + dkms/PKGBUILD | 64 + dkms/dkms.install | 13 + dkms/hook.install | 14 + dkms/hook.remove | 16 + dkms/hook.sh | 194 + dmenu/PKGBUILD | 33 + dmg2img/PKGBUILD | 42 + dmidecode/PKGBUILD | 49 + dnscrypt-proxy/PKGBUILD | 138 + dnscrypt-proxy/config-privacy.patch | 250 + dnscrypt-proxy/dnscrypt-proxy.confd | 3 + dnscrypt-proxy/dnscrypt-proxy.initd | 25 + dnscrypt-proxy/dnscrypt-proxy.install | 34 + dnscrypt-proxy/dnscrypt-proxy.run | 2 + dnscrypt-proxy/fix-textflag.h.patch | 172 + .../remove-go-systemd-support.patch | 97 + ...ing-upstream-servers-to-an-interface.patch | 69 + dnsmasq/PKGBUILD | 69 + dnsmasq/dnsmasq.initd | 23 + dnsmasq/dnsmasq.install | 19 + dnsmasq/dnsmasq.run | 3 + dnsmasq/remove-dbus.patch | 119 + docbook-to-man/PKGBUILD | 47 + docbook-xml/LICENSE | 24 + docbook-xml/PKGBUILD | 111 + docbook-xml/docbook-xml.install | 42 + docbook-xsl/PKGBUILD | 63 + docbook-xsl/docbook-xsl.install | 37 + docbook2x/PKGBUILD | 54 + docx2txt/PKGBUILD | 41 + dos2unix/PKGBUILD | 26 + dosbox/PKGBUILD | 57 + dotconf/PKGBUILD | 46 + dovecot/PKGBUILD | 115 + dovecot/dovecot.initd | 62 + dovecot/dovecot.install | 41 + dovecot/dovecot.ld.so.conf | 1 + dovecot/dovecot.run | 3 + doxygen/PKGBUILD | 41 + dreamchess/PKGBUILD | 29 + dsniff/PKGBUILD | 48 + dtach/PKGBUILD | 44 + dtc/PKGBUILD | 28 + dvd+rw-tools/PKGBUILD | 47 + dvdauthor/PKGBUILD | 57 + dvdauthor/support-graphicsmagick.patch | 68 + dvdbackup/PKGBUILD | 46 + dvdisaster/PKGBUILD | 63 + dvdstyler/PKGBUILD | 36 + dvdstyler/config.patch | 42 + dvdstyler/dvdstyler.appdata.xml | 55 + dwarves/PKGBUILD | 62 + dwarves/python.patch | 13 + dzen2/PKGBUILD | 58 + easy-rsa/0001-fix-paths.patch | 29 + easy-rsa/PKGBUILD | 47 + easytag/PKGBUILD | 52 + easytag/remove-appstreamglib.patch | 43 + edk2/50-edk2-ovmf-i386-secure.json | 34 + edk2/50-edk2-ovmf-x86_64-secure.json | 35 + edk2/60-edk2-ovmf-i386.json | 33 + edk2/60-edk2-ovmf-x86_64.json | 34 + edk2/PKGBUILD | 216 + edk2/edk2-ovmf.install | 6 + edk2/edk2-shell.install | 1 + efitools/PKGBUILD | 54 + efitools/libressl.patch | 11 + egoboo/PKGBUILD | 64 + egoboo/egoboo.desktop | 7 + egoboo/egoboo.png | Bin 0 -> 956 bytes egoboo/keyboard_directions.patch | 13 + eigen/PKGBUILD | 40 + elinks/PKGBUILD | 68 + elinks/fix-build.patch | 10 + enca/PKGBUILD | 38 + enca/enca-bad-file-descriptor.patch | 35 + encfs/PKGBUILD | 31 + enchant/PKGBUILD | 50 + enet/PKGBUILD | 46 + enscript/PKGBUILD | 48 + entr/PKGBUILD | 45 + epdfview/PKGBUILD | 51 + epdfview/epdfview-0.1.8-glib2-headers.patch | 12 + epdfview/epdfview-0.1.8-modern-cups.patch | 73 + epdfview/epdfview-0.1.8-pictures.patch | 13 + ...-0.1.8-swap-the-blue-and-red-channel.patch | 59 + espeak/PKGBUILD | 54 + etl/PKGBUILD | 24 + eureka/PKGBUILD | 34 + eureka/fhs-compliant.patch | 58 + evtest/PKGBUILD | 26 + exfatprogs/PKGBUILD | 32 + exiv2/PKGBUILD | 54 + expac/PKGBUILD | 34 + expect/PKGBUILD | 57 + expect/public-domain.txt | 3 + extra-cmake-modules/ECM-no-init.py.patch | 10 + extra-cmake-modules/PKGBUILD | 42 + extra-cmake-modules/ecm-sphinx4.patch | 64 + .../force-relative-paths.patch | 18 + extremetuxracer/PKGBUILD | 29 + f2fs-tools/PKGBUILD | 40 + faad2/PKGBUILD | 34 + fail2ban/PKGBUILD | 113 + fail2ban/fail2ban-0.11.2_CVE-2021-32749.patch | 155 + fail2ban/fail2ban.confd | 8 + fail2ban/fail2ban.initd | 42 + fail2ban/fail2ban.logrotate | 11 + fail2ban/fail2ban.run | 2 + fail2ban/jail.conf.patch | 13 + fail2ban/paths-hyperbola.conf | 11 + fail2ban/ssh.jaild | 13 + fail2ban/sshd-ddos.filterd | 26 + fail2ban/sshd.filterd | 29 + fbpager/PKGBUILD | 31 + fbpanel/PKGBUILD | 63 + fbpanel/fbpanel.install | 6 + fbpanel/fix-config.patch | 43 + fbpanel/hyperbola-logo.png | Bin 0 -> 2372 bytes fbpanel/remove-volume-plugin.patch | 10 + fbxkb/PKGBUILD | 32 + fbxkb/fbxkb.patch | 39 + fceux/PKGBUILD | 55 + fcgi/CVE-2025-23016.patch | 36 + fcgi/PKGBUILD | 33 + fcgiwrap/PKGBUILD | 67 + fcgiwrap/fcgiwrap.confd | 6 + fcgiwrap/fcgiwrap.initd | 44 + fcgiwrap/fcgiwrap.run | 2 + fdupes/LICENSE | 22 + fdupes/PKGBUILD | 35 + feh/PKGBUILD | 25 + festival/PKGBUILD | 168 + festival/festival-2.4-compat.patch | 369 + festival/festival-config.patch | 81 + festival/festival-shared-build.patch | 13 + festival/festival-sndio.patch | 57 + festival/festival-without-java.patch | 104 + festival/speech_tools-config.patch | 113 + festival/speech_tools-gcc47.patch | 51 + festival/speech_tools-shared-build.patch | 63 + festival/speech_tools-sndio.patch | 527 + festival/speech_tools-without-java.patch | 478 + fetchmail/PKGBUILD | 56 + fetchmail/fetchmail.confd | 9 + fetchmail/fetchmail.initd | 43 + fetchmail/fetchmail.install | 43 + ffcall/PKGBUILD | 25 + ...01-ffbuild-libversion.sh-add-shebang.patch | 24 + ...util-clean-up-unused-FF_SYMVER-macro.patch | 55 + ffmpeg/PKGBUILD | 112 + ffmpegthumbnailer/PKGBUILD | 59 + .../ffmpegthumbnailer.thumbnailer | 4 + fftw/PKGBUILD | 77 + fig2dev/LICENSE | 23 + fig2dev/PKGBUILD | 52 + filezilla/PKGBUILD | 66 + flac/PKGBUILD | 67 + flare-engine/PKGBUILD | 29 + flare-game/PKGBUILD | 28 + flashrom/PKGBUILD | 35 + flightgear/PKGBUILD | 80 + fltk/PKGBUILD | 43 + fluidsynth/PKGBUILD | 76 + fluidsynth/fluidsynth.conf | 5 + fluidsynth/fluidsynth.confd | 5 + fluidsynth/fluidsynth.initd | 15 + fluidsynth/fluidsynth.install | 8 + fluidsynth/fluidsynth.run | 3 + fluxbox-extra/PKGBUILD | 35 + fluxbox-extra/fluxbox-extra.install | 7 + fluxbox/PKGBUILD | 60 + fluxbox/fluxbox.desktop | 6 + fluxbox/libre.patch | 725 + fmt/PKGBUILD | 32 + font-manager/PKGBUILD | 32 + fontconfig/PKGBUILD | 62 + fontconfig/fontconfig.hook | 11 + fontconfig/fontconfig.install | 35 + fontforge/PKGBUILD | 54 + fonttosfnt/PKGBUILD | 27 + foomatic-db-engine/PKGBUILD | 62 + foomatic-db/PKGBUILD | 73 + foremost/PKGBUILD | 50 + foremost/fix-build.patch | 15 + fossil/PKGBUILD | 32 + fox/ControlPanel.desktop | 10 + fox/PKGBUILD | 83 + fox/PathFinder.desktop | 10 + fox/adie.desktop | 10 + fox/calculator.desktop | 10 + fping/PKGBUILD | 31 + fping/fping.install | 7 + freealut/PKGBUILD | 47 + freeciv/PKGBUILD | 41 + freedoom/PKGBUILD | 45 + freedoom/add-launcher.patch | 11 + freedoom/fix-errors.patch | 69 + freedroidrpg/PKGBUILD | 43 + freedroidrpg/fix-build.patch | 11 + freeglut/PKGBUILD | 33 + freeimage/PKGBUILD | 68 + freeimage/fix-build.patch | 345 + freenginx/PKGBUILD | 133 + freenginx/freenginx.confd | 32 + freenginx/freenginx.initd | 92 + freenginx/freenginx.run | 2 + freenginx/logrotate | 10 + freeorion/PKGBUILD | 43 + freeorion/fix-directories.patch | 15 + freepats/PKGBUILD | 23 + freerdp/PKGBUILD | 82 + freerdp/manpage_formatting.patch | 12 + ...0001-Enable-table-validation-modules.patch | 45 + ...2-Enable-infinality-subpixel-hinting.patch | 27 + .../0003-Enable-long-PCF-family-names.patch | 25 + ...phantom-points-for-variation-fonts-5.patch | 60 + .../0005-freetype-2.5.2-more-demos.patch | 17 + freetype2/PKGBUILD | 104 + freetype2/freetype2.install | 8 + freetype2/freetype2.sh | 12 + fribidi/PKGBUILD | 48 + frozen-bubble/PKGBUILD | 61 + fsarchiver/PKGBUILD | 26 + fsearch/PKGBUILD | 23 + fteqcc/PKGBUILD | 42 + ftgl/PKGBUILD | 55 + ftjam/PKGBUILD | 27 + ftjam/license.txt | 7 + ftmenu/PKGBUILD | 25 + fuse2/PKGBUILD | 70 + fuse3/PKGBUILD | 67 + fuse3/fuse.initd | 35 + fvwm3/PKGBUILD | 52 + fzy/PKGBUILD | 23 + galculator/PKGBUILD | 70 + gc/PKGBUILD | 34 + gc/license.txt | 30 + gcompris-data/PKGBUILD | 83 + gcompris-data/fix-path.patch | 11 + gcompris-qt/PKGBUILD | 44 + gcompris-qt/fix-build.patch | 13 + gcompris-qt/gcompris-qt.sh | 12 + gcr/PKGBUILD | 39 + gcr/gcr-viewer.sh | 2 + gd/PKGBUILD | 54 + gdb/PKGBUILD | 78 + gdk-pixbuf-xlib/PKGBUILD | 29 + gdk-pixbuf2/PKGBUILD | 53 + gdk-pixbuf2/gdk-pixbuf-query-loaders.hook | 11 + gdk-pixbuf2/gdk-pixbuf2.install | 3 + gdl/PKGBUILD | 35 + geany-plugins/PKGBUILD | 55 + geany/PKGBUILD | 53 + geeqie/PKGBUILD | 52 + gegl/PKGBUILD | 48 + gengetopt/PKGBUILD | 50 + geoip-database/PKGBUILD | 104 + geoip/PKGBUILD | 38 + gerbera-legacy/PKGBUILD | 73 + gerbera-legacy/gerbera.confd | 27 + gerbera-legacy/gerbera.initd | 34 + gerbera-legacy/gerbera.install | 24 + gerbera-legacy/gerbera.run | 4 + gerbera-legacy/libre.patch | 11 + getmail6/PKGBUILD | 43 + gexiv2/PKGBUILD | 30 + gftp/PKGBUILD | 35 + gftp/libre.patch | 116 + ghex/PKGBUILD | 23 + ghostscript/PKGBUILD | 118 + giflib/PKGBUILD | 56 + ...1.9-fix-missing-quantize-API-symbols.patch | 32 + giflib/giflib-5.1.9-make-flags.patch | 43 + gimp-legacy/CVE-2025-2761.patch | 33 + gimp-legacy/PKGBUILD | 115 + gimp-legacy/linux_kernel.gpl | 19 + gimp-legacy/remove-plugins.patch | 62 + gimp-legacy/remove-update-check.patch | 202 + girara/PKGBUILD | 27 + git-legacy/PKGBUILD | 93 + git-legacy/git-daemon.conf | 1 + git-legacy/git-daemon.confd | 19 + git-legacy/git-daemon.initd | 12 + git-legacy/git-daemon.run | 8 + git-legacy/git-daemon_log.run | 10 + git-legacy/git-legacy.install | 12 + gkrellm/PKGBUILD | 64 + gkrellm/add-libressl-support.patch | 11 + gkrellm/gkrellmd.confd | 8 + gkrellm/gkrellmd.initd | 15 + gkrellm/gkrellmd.run | 3 + glade/PKGBUILD | 36 + glade/fix-build.patch | 10 + glew/PKGBUILD | 46 + glfw/PKGBUILD | 49 + glib-networking/PKGBUILD | 39 + glib-networking/remove-systemd-support.patch | 29 + glib-perl/PKGBUILD | 29 + glibmm/PKGBUILD | 42 + glm/PKGBUILD | 42 + glm/glm.pc.in | 7 + glm/glmConfig.cmake.in | 20 + glm/glmConfigVersion.cmake.in | 31 + glm/glmTargets.cmake | 107 + glslang/PKGBUILD | 68 + gltron/PKGBUILD | 57 + glu/LICENSE | 27 + glu/PKGBUILD | 33 + gmime3/PKGBUILD | 36 + gmrun/PKGBUILD | 38 + gmrun/libre.patch | 31 + gmtp/PKGBUILD | 49 + gnome-common/PKGBUILD | 24 + gnome-icon-theme-symbolic/PKGBUILD | 26 + gnome-icon-theme/PKGBUILD | 39 + .../do-not-manually-set-localedir.patch | 25 + .../remove-gtk-update-icon-cache.patch | 56 + gnome-themes-extra/PKGBUILD | 34 + gnu-efi/PKGBUILD | 60 + gnu-efi/gnu-efi-3.0.9-ldflags.patch | 12 + gnu-netcat/PKGBUILD | 26 + gnucash/PKGBUILD | 86 + gnumeric-legacy/PKGBUILD | 59 + gnuplot/PKGBUILD | 58 + gnuplot/lua53_compat.patch | 13 + gnustep-base/PKGBUILD | 51 + gnustep-make/PKGBUILD | 55 + gobby/PKGBUILD | 27 + gobject-introspection/PKGBUILD | 76 + gocr/PKGBUILD | 47 + godot/PKGBUILD | 166 + goffice/PKGBUILD | 57 + gopchop/PKGBUILD | 46 + goxel/PKGBUILD | 41 + gpa/PKGBUILD | 46 + gpart/PKGBUILD | 43 + gparted/PKGBUILD | 46 + gperf/PKGBUILD | 46 + gphoto2/PKGBUILD | 49 + gphotofs/PKGBUILD | 44 + gpicview/PKGBUILD | 57 + gptfdisk/PKGBUILD | 59 + gptfdisk/partitions.patch | 186 + gr-lida/PKGBUILD | 31 + grafx2/PKGBUILD | 46 + grafx2/fix-appstream.patch | 37 + graphene/PKGBUILD | 31 + graphicsmagick-imagemagick-compat/LICENSE | 342 + graphicsmagick-imagemagick-compat/PKGBUILD | 70 + graphicsmagick/PKGBUILD | 75 + graphite/PKGBUILD | 68 + graphviz/PKGBUILD | 80 + graphviz/ghostscript918.patch | 18 + graphviz/graphviz.install | 12 + grfcodec/PKGBUILD | 47 + grip/PKGBUILD | 43 + grip/remove-cddb.patch | 168 + grml-zsh-config/PKGBUILD | 31 + grsync/PKGBUILD | 41 + grsync/grsync.appdata.xml | 19 + grsync/use-themed-icon.patch | 76 + gsasl/PKGBUILD | 30 + gsettings-desktop-schemas/PKGBUILD | 41 + gsfonts/PKGBUILD | 28 + gsimplecal/PKGBUILD | 26 + gsl/PKGBUILD | 53 + gst-editing-services/PKGBUILD | 31 + gst-libav/PKGBUILD | 38 + gst-plugins-bad/PKGBUILD | 143 + gst-plugins-bad/libressl.patch | 11 + gst-plugins-bad/remove-enforced-deps.patch | 11 + gst-plugins-base/PKGBUILD | 59 + gst-plugins-base/sndio.patch | 1134 + gst-plugins-good/PKGBUILD | 63 + gst-plugins-ugly/PKGBUILD | 29 + gst-python/PKGBUILD | 25 + gstreamer/PKGBUILD | 54 + gstreamer/byacc.patch | 85 + gstreamer/gstreamer.install | 7 + gstreamermm/PKGBUILD | 49 + gtk-vnc/PKGBUILD | 27 + gtk/PKGBUILD | 96 + gtk/gtk-query-immodules-3.0.hook | 11 + gtk/gtk-update-icon-cache.hook | 13 + gtk/gtk-update-icon-cache.script | 10 + gtk/gtk.install | 3 + gtk/optionalize-at-spi2-atk-dependency.patch | 130 + gtk/settings.ini | 5 + gtk2-engine-murrine/PKGBUILD | 54 + gtk2-engines/PKGBUILD | 29 + gtk2/CVE-2024-6655.patch | 18 + gtk2/PKGBUILD | 81 + gtk2/gtk-query-immodules-2.0.hook | 11 + gtk2/gtk2.install | 3 + gtk2/gtkrc | 5 + gtk2/remove-gtk-doc-support.patch | 201 + gtk2/xid-collision-debug.patch | 15 + gtk2mm/PKGBUILD | 33 + gtkam/PKGBUILD | 30 + gtkglext/PKGBUILD | 50 + gtklp/PKGBUILD | 31 + gtkmathview/PKGBUILD | 52 + gtkmm/PKGBUILD | 49 + gtksourceview2/PKGBUILD | 25 + gtksourceview3/PKGBUILD | 35 + gtksourceviewmm/PKGBUILD | 28 + gtkspell2/PKGBUILD | 40 + gtkspell2/remove-gtkdoc.patch | 78 + gtkspell3/PKGBUILD | 49 + gtkspellmm/PKGBUILD | 27 + gts/PKGBUILD | 44 + gtypist/PKGBUILD | 49 + gtypist/fix-ncurses.patch | 90 + guile/PKGBUILD | 53 + gumbo-parser/PKGBUILD | 49 + gunicorn/PKGBUILD | 45 + gutenprint/PKGBUILD | 91 + gutenprint/gutenprint.install | 9 + gv/PKGBUILD | 37 + gv/gv.desktop | 11 + gwenhywfar/PKGBUILD | 50 + gxkb/PKGBUILD | 45 + gyp/PKGBUILD | 35 + gyp/gyp-fix-cmake.patch | 33 + gyp/gyp-python38.patch | 63 + handbrake-legacy/PKGBUILD | 100 + handbrake-legacy/fix-build-contrib.patch | 36 + .../fix-close-button-in-about-dialog.patch | 28 + handbrake-legacy/remove-dav1d-support.patch | 71 + handbrake-legacy/remove-libvpx-support.patch | 98 + handbrake-legacy/remove-nonfree-presets.patch | 11048 +++++++++ haproxy/CVE-2025-32464.patch | 53 + haproxy/PKGBUILD | 67 + haproxy/haproxy.cfg | 87 + haproxy/haproxy.initd | 54 + haproxy/haproxy.install | 23 + haproxy/haproxy.run | 4 + ...LAGS-and-LDFLAGS-when-building-admin.patch | 39 + harfbuzz/PKGBUILD | 57 + haveged/PKGBUILD | 49 + haveged/haveged.confd | 7 + haveged/haveged.initd | 15 + haveged/haveged.run | 3 + help2man/PKGBUILD | 31 + herbe/PKGBUILD | 35 + herbe/notify-send | 81 + herbstluftwm/PKGBUILD | 53 + hex-a-hop/PKGBUILD | 65 + hex-a-hop/hex-a-hop.desktop | 9 + hex-a-hop/hex-a-hop.png | Bin 0 -> 4125 bytes hex-a-hop/libre.patch | 159 + hexchat-legacy/PKGBUILD | 64 + hexchat-legacy/remove-defaults.patch | 413 + hexedit/PKGBUILD | 48 + hicolor-icon-theme/PKGBUILD | 23 + hplip-drivers/PKGBUILD | 143 + ...-ppd.h-in-various-places-as-CUPS-2.2.patch | 50 + hplip-drivers/disable_upgrade.patch | 14 + hplip-drivers/remove-systemd-support.patch | 30 + hsetroot/PKGBUILD | 45 + hspell/PKGBUILD | 73 + html2text-cpp/PKGBUILD | 48 + htop/PKGBUILD | 59 + http-parser/PKGBUILD | 46 + httrack/PKGBUILD | 26 + hunspell-dicts/PKGBUILD | 732 + hunspell/PKGBUILD | 58 + hwloc/PKGBUILD | 57 + hyperbola-install-scripts/PKGBUILD | 23 + hyperfetch/PKGBUILD | 24 + hyperiso/PKGBUILD | 25 + hyperiso/legalcode.txt | 121 + hyphen/PKGBUILD | 83 + i2pd/PKGBUILD | 72 + i2pd/i2pd.confd | 12 + i2pd/i2pd.initd | 50 + i2pd/i2pd.install | 26 + i2pd/i2pd.run | 5 + i3-wm/PKGBUILD | 57 + i3blocks/PKGBUILD | 60 + i3blocks/brightness.bash | 65 + i3blocks/fix-scripts.patch | 654 + i3blocks/wireguard.bash | 14 + i3status/PKGBUILD | 46 + i3status/add-sndio-backend.patch | 229 + i3status/build-without-pulse.patch | 408 + .../0001-Restore-risky-system-libraries.patch | 743 + ...ove-uxp-application-specfic-override.patch | 44 + ...0003-Hardcode-AppName-in-nsAppRunner.patch | 57 + .../0004-Disable-SSLKEYLOGFILE-in-NSS.patch | 39 + icedove-uxp/0005-Fix-PGO-Build.patch | 44 + icedove-uxp/0006-init-configure-patch.patch | 26 + .../0007-Update-libcubeb-to-a1200c34.patch | 20298 ++++++++++++++++ ...08-Don-t-use-toolkit-search-provider.patch | 24 + .../0009-icedove-uxp-install-dir.patch | 13 + ...0-remove-malfunctional-searchplugins.patch | 394 + icedove-uxp/LICENSE | 5473 +++++ icedove-uxp/PKGBUILD | 180 + icedove-uxp/icedove-uxp.desktop | 173 + icedove-uxp/icedove-uxp.install | 29 + icedove-uxp/mozconfig | 42 + icedove-uxp/vendor.js | 26 + .../0001-Restore-risky-system-libraries.patch | 743 + ...sel-uxp-application-specfic-override.patch | 44 + ...-enable-proxy-bypass-protection-flag.patch | 142 + ...0004-Hardcode-AppName-in-nsAppRunner.patch | 57 + .../0005-Disable-SSLKEYLOGFILE-in-NSS.patch | 39 + iceweasel-uxp/0006-Fix-PGO-Build.patch | 44 + iceweasel-uxp/0007-init-configure-patch.patch | 26 + .../0008-Update-libcubeb-to-a1200c34.patch | 20298 ++++++++++++++++ iceweasel-uxp/0009-Tauthon.patch | 1146 + ...0-remove-malfunctional-searchplugins.patch | 822 + .../0011-iceweasel-uxp-install-dir.patch | 13 + iceweasel-uxp/LICENSE | 5473 +++++ iceweasel-uxp/PKGBUILD | 188 + iceweasel-uxp/iceweasel-uxp.desktop | 310 + iceweasel-uxp/iceweasel-uxp.install | 29 + iceweasel-uxp/mozconfig | 61 + iceweasel-uxp/vendor.js | 277 + icewm/PKGBUILD | 46 + icewm/libre.patch | 555 + icon-naming-utils/PKGBUILD | 37 + icon-naming-utils/remove-legacy-calc.patch | 15 + icoutils/PKGBUILD | 48 + id3/PKGBUILD | 45 + id3lib/PKGBUILD | 63 + id3v2/PKGBUILD | 45 + idesk/PKGBUILD | 43 + idesk/imlib2-config.patch | 38 + iftop/PKGBUILD | 46 + ii/PKGBUILD | 22 + ijs/PKGBUILD | 56 + imlib2/PKGBUILD | 51 + imv/PKGBUILD | 47 + indent/PKGBUILD | 25 + iniparser/PKGBUILD | 30 + inkscape-legacy/PKGBUILD | 74 + .../deny-clipboards-extension.patch | 23 + inkscape-legacy/no-const.patch | 136 + innoextract/PKGBUILD | 51 + intltool/PKGBUILD | 61 + intltool/intltool-0.51.0-perl-5.26.patch | 51 + ...l-merge-Create-cache-file-atomically.patch | 38 + intltool/intltool_distcheck-fix.patch | 30 + iperf/PKGBUILD | 50 + iperf3/PKGBUILD | 28 + ipxe/PKGBUILD | 146 + ipxe/chain-default-3928.ipxe | 6 + ipxe/chain-default.ipxe | 6 + ipxe/grub | 49 + ipxe/ipxe-0002-banner.patch | 30 + ipxe/ipxe-0003-efi-iso.patch | 121 + ipxe/ipxe.install | 41 + irqbalance/PKGBUILD | 71 + irqbalance/irqbalance.conf | 17 + irqbalance/irqbalance.confd | 19 + irqbalance/irqbalance.initd | 27 + irqbalance/irqbalance.run | 4 + irrlamb/PKGBUILD | 36 + irrlicht/PKGBUILD | 77 + irssi-xmpp/PKGBUILD | 47 + irssi/PKGBUILD | 56 + iso-codes/PKGBUILD | 29 + iso2mkv/PKGBUILD | 22 + isomaster/PKGBUILD | 50 + ispell/PKGBUILD | 72 + ispell/license.txt | 35 + isync/PKGBUILD | 25 + itstool/PKGBUILD | 59 + ...stool-2.0.5-fix-crash-wrong-encoding.patch | 68 + jack1/40-audio-privileges.rules | 2 + jack1/PKGBUILD | 187 + jack1/jack1.conf | 1 + jack1/jackd.confd | 7 + jack1/jackd.initd | 20 + jack1/jackd.sh | 3 + ...stem_has_rtprio_limits_conf-function.patch | 71 + jack2/40-audio-privileges.rules | 2 + jack2/PKGBUILD | 152 + jack2/jackd.confd | 7 + jack2/jackd.initd | 20 + jack2/jackd.sh | 3 + jansson/PKGBUILD | 29 + jasper/PKGBUILD | 74 + ...1.900.1-fix-filename-buffer-overflow.patch | 37 + jbig2dec/PKGBUILD | 50 + jbigkit/PKGBUILD | 62 + jemalloc/PKGBUILD | 30 + jgmenu/PKGBUILD | 26 + jhead/PKGBUILD | 51 + jhead/fix-build.patch | 15 + jmtpfs/PKGBUILD | 28 + joe/PKGBUILD | 58 + jq/ChangeLog | 20 + jq/PKGBUILD | 28 + json-glib/PKGBUILD | 47 + jsoncpp/PKGBUILD | 30 + judy/PKGBUILD | 24 + jumpnbump/PKGBUILD | 58 + jwm/PKGBUILD | 43 + jwm/jwm.desktop | 12 + karchive/PKGBUILD | 29 + kcaldav/PKGBUILD | 43 + kcgi/PKGBUILD | 40 + kcompletion/PKGBUILD | 49 + kconfig/PKGBUILD | 53 + kcoreaddons/PKGBUILD | 51 + kcrash/PKGBUILD | 30 + kdoctools/PKGBUILD | 29 + keepassx/PKGBUILD | 53 + keepassx/latest-commit.patch | 12061 +++++++++ kguiaddons/PKGBUILD | 31 + khotkeys/PKGBUILD | 43 + khtml/PKGBUILD | 42 + khtml/remove-java-support.patch | 28 + ki18n/PKGBUILD | 30 + kickshaw/PKGBUILD | 31 + kickshaw/fix-build.patch | 293 + kitemmodels/PKGBUILD | 30 + kitemviews/PKGBUILD | 30 + kobodeluxe/PKGBUILD | 69 + kobodeluxe/kobodeluxe.install | 16 + krita-legacy/PKGBUILD | 44 + kseexpr/PKGBUILD | 28 + kwidgetsaddons/PKGBUILD | 30 + kwindowsystem/PKGBUILD | 29 + kyotocabinet/PKGBUILD | 51 + l-smash/PKGBUILD | 34 + l3afpad/PKGBUILD | 35 + l3afpad/l3afpad.appdata.xml | 24 + lablgtk2/PKGBUILD | 40 + ladspa/PKGBUILD | 55 + ladspa/fix-memleak-in-plugin-scanning.patch | 11 + lame/PKGBUILD | 54 + laminar/Chart.min.js | 10 + laminar/PKGBUILD | 83 + laminar/ansi_up.js | 327 + laminar/fix-build.patch | 35 + laminar/icon.png | Bin 0 -> 1357 bytes laminar/laminard.confd | 64 + laminar/laminard.initd | 29 + laminar/vue-router.min.js | 6 + laminar/vue.min.js | 6 + lapack/PKGBUILD | 112 + lapack/lapacke-missing-symbols.patch | 138 + lasem/CVE-2013-7447.patch | 28 + lasem/PKGBUILD | 40 + lbreakout2/PKGBUILD | 70 + lbreakout2/lbreakout2.desktop | 10 + lbreakout2/lbreakout2.png | Bin 0 -> 1930 bytes lbreakouthd/PKGBUILD | 45 + lcms2/PKGBUILD | 53 + ldb/PKGBUILD | 52 + ldoc/PKGBUILD | 28 + ledger/PKGBUILD | 57 + legalcode.txt | 121 + lemonbar/PKGBUILD | 23 + lensfun/PKGBUILD | 57 + leptonica/PKGBUILD | 46 + lesstif/PKGBUILD | 55 + lftp/PKGBUILD | 50 + lgeneral/PKGBUILD | 49 + lgeneral/lgeneral.install | 8 + lgeneral/lgeneral.png | Bin 0 -> 1253 bytes lhasa/PKGBUILD | 27 + ...Check-memory-allocations-for-success.patch | 193 + libao/0002-ao_example-free-buffer.patch | 25 + libao/PKGBUILD | 54 + libao/libao.conf | 4 + .../patch-src_plugins_sndio_ao_sndio_c.patch | 59 + libart/PKGBUILD | 42 + libass/PKGBUILD | 33 + libb2/PKGBUILD | 49 + libbpf/PKGBUILD | 32 + libbpf/consolidate-lib-dirs.patch | 19 + libbs2b/PKGBUILD | 51 + libbsd/PKGBUILD | 38 + libbulletml/Makefile | 59 + libbulletml/PKGBUILD | 48 + libburn/PKGBUILD | 58 + libcaca/PKGBUILD | 55 + libcdio-paranoia/PKGBUILD | 24 + libcdio/PKGBUILD | 56 + libcerf/PKGBUILD | 44 + libconfig/PKGBUILD | 53 + libcroco/PKGBUILD | 29 + libcss/PKGBUILD | 38 + libcue/PKGBUILD | 46 + libcurl3-gnutls/03_keep_symbols_compat.patch | 17 + libcurl3-gnutls/CVE-2023-38545.patch | 140 + libcurl3-gnutls/PKGBUILD | 65 + libdatrie/PKGBUILD | 25 + libdbi-drivers/PKGBUILD | 52 + libdbi/PKGBUILD | 45 + libdca/PKGBUILD | 58 + libdca/sndio.patch | 237 + libde265/PKGBUILD | 49 + libdmx/PKGBUILD | 34 + libdom/PKGBUILD | 39 + libdrm-debug/COPYING | 48 + libdrm-debug/PKGBUILD | 68 + libdrm/COPYING | 48 + libdrm/PKGBUILD | 60 + libdvbpsi/PKGBUILD | 45 + libdvdcss/PKGBUILD | 25 + libdvdnav/PKGBUILD | 26 + libdvdread/PKGBUILD | 47 + libebml/PKGBUILD | 31 + libebur128/PKGBUILD | 25 + libepoxy/PKGBUILD | 23 + liberation-circuit/PKGBUILD | 41 + liberation-circuit/libcirc | 8 + liberation-circuit/libcirc.desktop | 9 + liberation-circuit/libcirc.png | Bin 0 -> 1143 bytes liberation-circuit/liberation-circuit.install | 22 + libesmtp/PKGBUILD | 43 + libetpan/PKGBUILD | 56 + libev/PKGBUILD | 30 + libevdev/PKGBUILD | 51 + libexif-gtk/PKGBUILD | 26 + libexif/PKGBUILD | 44 + libfilezilla/PKGBUILD | 30 + libfontenc/PKGBUILD | 36 + libftdi/PKGBUILD | 44 + libftdi/fix_includes_path.patch | 41 + libgig/PKGBUILD | 52 + libgit2/PKGBUILD | 52 + libglade/PKGBUILD | 50 + libglade/glade.install | 25 + libgnomecanvas/PKGBUILD | 51 + libgphoto2/PKGBUILD | 60 + libgsf/PKGBUILD | 55 + libhubbub/PKGBUILD | 33 + libical/PKGBUILD | 37 + libice/PKGBUILD | 36 + libid3tag/CVE-2008-2109.patch | 11 + libid3tag/PKGBUILD | 62 + libid3tag/id3tag.pc | 10 + libid3tag/libid3tag-gperf.patch | 26 + libident/PKGBUILD | 33 + libident/libident.pc | 10 + libidn/PKGBUILD | 54 + libieee1284/PKGBUILD | 64 + libieee1284/libieee1284-python3.patch | 266 + .../libieee1284-upstream_python_fix1.patch | 104 + .../libieee1284-upstream_python_fix2.patch | 63 + libimagequant/PKGBUILD | 29 + libinfinity/PKGBUILD | 36 + libinih/PKGBUILD | 46 + libinstpatch/PKGBUILD | 35 + libiptcdata/PKGBUILD | 25 + libircclient/PKGBUILD | 66 + libiscsi/PKGBUILD | 56 + libisoburn/PKGBUILD | 68 + libisofs/PKGBUILD | 51 + libjpeg-turbo/COPYING.BSD3 | 25 + libjpeg-turbo/COPYING.IJG | 53 + libjpeg-turbo/COPYING.ZLIB | 19 + libjpeg-turbo/PKGBUILD | 74 + libkate/0001-Fix-automake-warnings.patch | 84 + libkate/PKGBUILD | 50 + libkeybinder3/PKGBUILD | 52 + liblo/PKGBUILD | 55 + liblockfile/PKGBUILD | 25 + liblouis/PKGBUILD | 49 + liblrdf/PKGBUILD | 49 + libmad/PKGBUILD | 51 + libmad/libmad.patch | 117 + libmatroska/PKGBUILD | 32 + libmcrypt/PKGBUILD | 25 + libmd/PKGBUILD | 25 + libmicrodns/PKGBUILD | 27 + libmikmod/PKGBUILD | 57 + libmikmod/cmake-man.patch | 11 + libmilter/PKGBUILD | 68 + libmms/PKGBUILD | 43 + libmng/PKGBUILD | 53 + libmodplug/PKGBUILD | 24 + libmp3splt/PKGBUILD | 34 + ...-initialise-the-ogg-and-vorbis-state.patch | 65 + libmp4v2/PKGBUILD | 27 + libmpack/PKGBUILD | 22 + libmpdclient/PKGBUILD | 35 + libmpeg2/PKGBUILD | 40 + libmpeg2/libmpeg2-0.5.1-gcc4.6.patch | 128 + libmtp/PKGBUILD | 49 + libmypaint/PKGBUILD | 36 + libnatpmp/PKGBUILD | 46 + libnet/PKGBUILD | 28 + libnetfilter_acct/PKGBUILD | 27 + libnetfilter_log/PKGBUILD | 44 + libnetfilter_queue/PKGBUILD | 26 + libnewt/PKGBUILD | 50 + libnfs/PKGBUILD | 50 + libnids/PKGBUILD | 52 + libnsbmp/PKGBUILD | 29 + libnsgif/PKGBUILD | 21 + libnsutils/PKGBUILD | 24 + libofx/PKGBUILD | 36 + libogg/PKGBUILD | 40 + libolm/PKGBUILD | 60 + libopenmpt/PKGBUILD | 35 + libopusenc/PKGBUILD | 29 + libotr/PKGBUILD | 54 + libots/PKGBUILD | 56 + libots/remove-gtk-doc.patch | 47 + libpaper/PKGBUILD | 50 + libparserutils/PKGBUILD | 25 + libpciaccess/PKGBUILD | 34 + libpeas/PKGBUILD | 30 + libpgm/PKGBUILD | 52 + libplacebo/PKGBUILD | 32 + libpng/PKGBUILD | 67 + libpng12/PKGBUILD | 41 + libproxy/PKGBUILD | 60 + libquicktime/PKGBUILD | 79 + libquicktime/libquicktime-1.2.4-faad2.patch | 86 + libraqm/PKGBUILD | 34 + libraw/PKGBUILD | 36 + libreoffice-l10n/LICENSE | 293 + libreoffice-l10n/PKGBUILD | 593 + libreoffice-legacy/PKGBUILD | 400 + .../help-libreoffice-languages.js | 1 + libreoffice-legacy/libreoffice.csh | 4 + libreoffice-legacy/libreoffice.sh | 4 + .../template-soffice.desktop.in | 7 + librep/PKGBUILD | 50 + libreplaygain/LICENSE | 502 + libreplaygain/PKGBUILD | 57 + libretools/PKGBUILD | 129 + libretools/doas.patch | 853 + libretools/gettext-tiny.patch | 54 + libretools/hyperbola.patch | 1118 + libretools/libretools.install | 20 + libretools/remove-systemd_stdin_hack.patch | 30 + librsvg-legacy/PKGBUILD | 55 + librsync/PKGBUILD | 48 + libsamplerate/PKGBUILD | 40 + libsass/PKGBUILD | 32 + libsbsms/PKGBUILD | 44 + libsidplay/PKGBUILD | 50 + libsidplay/g++-6_build.patch | 28 + libsidplay/libsidplay-1.36.59-gcc43.patch | 40 + libsidplayfp/PKGBUILD | 23 + libsigc++/PKGBUILD | 47 + libsigsev/PKGBUILD | 27 + libslirp/PKGBUILD | 23 + libsm/PKGBUILD | 34 + libsndfile/PKGBUILD | 74 + libsndfile/sndio.patch | 51 + libsodium/PKGBUILD | 42 + libsoup/CVE-2024-52531-1.patch | 39 + libsoup/PKGBUILD | 47 + libsoxr/PKGBUILD | 67 + libspectre/PKGBUILD | 24 + libspf2/PKGBUILD | 48 + libspiro/PKGBUILD | 37 + libsquish/PKGBUILD | 53 + libsquish/libsquish-pkgconfig.pc | 13 + libssh/PKGBUILD | 54 + libstrophe/PKGBUILD | 34 + libtar/PKGBUILD | 53 + libtermkey/PKGBUILD | 23 + libthai/PKGBUILD | 26 + libtheora/PKGBUILD | 49 + libtheora/libtheora-1.1.1-libpng16.patch | 17 + libtiff/PKGBUILD | 52 + libtiger/PKGBUILD | 26 + libtorrent/PKGBUILD | 32 + libunibreak/PKGBUILD | 25 + libuninameslist/PKGBUILD | 29 + libunwind/PKGBUILD | 53 + libupnp/PKGBUILD | 35 + libusb-compat/PKGBUILD | 24 + libutempter/PKGBUILD | 50 + libutf8proc/PKGBUILD | 51 + libuv/PKGBUILD | 37 + libvisual/PKGBUILD | 50 + ...libvisual-0.4.0-inlinedefineconflict.patch | 61 + libvncserver/PKGBUILD | 43 + libvoikko/PKGBUILD | 34 + libvorbis/PKGBUILD | 54 + libvterm/PKGBUILD | 23 + libwapcaplet/PKGBUILD | 33 + libwnck3/PKGBUILD | 24 + libx11/PKGBUILD | 39 + libxau/PKGBUILD | 34 + libxaw/PKGBUILD | 35 + libxaw3d/PKGBUILD | 34 + libxcb/PKGBUILD | 46 + .../libxcb-1.14-no-missing-man-subdir.patch | 24 + libxcomposite/PKGBUILD | 34 + libxcursor/PKGBUILD | 40 + libxcursor/index.theme | 2 + libxdamage/PKGBUILD | 34 + libxdg-basedir/PKGBUILD | 25 + libxdmcp/PKGBUILD | 34 + libxext/PKGBUILD | 34 + libxfixes/PKGBUILD | 34 + libxfont2/PKGBUILD | 37 + libxft/PKGBUILD | 39 + libxft/add-libbsd-support.patch | 48 + libxi/PKGBUILD | 34 + libxinerama/PKGBUILD | 34 + libxkbcommon/PKGBUILD | 57 + libxkbfile/PKGBUILD | 34 + libxkbui/COPYING | 25 + libxkbui/PKGBUILD | 36 + libxklavier/PKGBUILD | 54 + libxklavier/remove-gtk-doc.patch | 30 + libxml++/PKGBUILD | 34 + libxml2/CVE-2025-32414.patch | 58 + libxml2/CVE-2025-32415.patch | 20 + libxml2/PKGBUILD | 77 + ...libxml2-2.9.8-python3-unicode-errors.patch | 34 + libxmlrpc/PKGBUILD | 51 + libxmp/PKGBUILD | 45 + libxmu/PKGBUILD | 34 + libxp/PKGBUILD | 36 + libxp/add-proto-files.patch | 1408 ++ libxpm/PKGBUILD | 34 + libxpresent/PKGBUILD | 39 + libxrandr/PKGBUILD | 34 + libxrender/PKGBUILD | 34 + libxres/PKGBUILD | 34 + libxshmfence/PKGBUILD | 42 + .../remove-forced-openbsd-futex-support.patch | 27 + libxslt/PKGBUILD | 64 + libxss/PKGBUILD | 35 + libxt/PKGBUILD | 34 + libxtrans/PKGBUILD | 38 + libxtst/PKGBUILD | 34 + libxv/PKGBUILD | 34 + libxvmc/PKGBUILD | 34 + libxxf86dga/PKGBUILD | 34 + libxxf86vm/PKGBUILD | 34 + libyaml/PKGBUILD | 23 + libytnef/PKGBUILD | 50 + libzip/PKGBUILD | 49 + lighttpd/PKGBUILD | 69 + lighttpd/lighttpd.conf | 23 + lighttpd/lighttpd.confd | 8 + lighttpd/lighttpd.initd | 79 + lighttpd/lighttpd.logrotate.d | 14 + lighttpd/lighttpd.run | 2 + lilv/PKGBUILD | 73 + link-grammar/PKGBUILD | 56 + lirc/PKGBUILD | 99 + lirc/irexec.conf | 9 + lirc/irexec.confd | 9 + lirc/irexec.initd | 27 + lirc/irexec.run | 3 + lirc/lirc.logrotate | 5 + lirc/lircd.conf | 22 + lirc/lircd.confd | 22 + lirc/lircd.initd | 51 + lirc/lircd.run | 3 + lirc/lircmd.initd | 19 + lirc/lircmd.run | 2 + lite/PKGBUILD | 34 + lite/lite-path-fix.patch | 73 + llvm/PKGBUILD | 96 + llvm/llvm-config.h | 9 + llvm/stack-clash-fixes.patch | 870 + lmarbles/PKGBUILD | 55 + lmdb/PKGBUILD | 48 + lmdb/lmdb.pc | 10 + lmms/PKGBUILD | 74 + ...tries_containing_nonlibre_demo_files.patch | 62 + lockdev/PKGBUILD | 36 + lockdev/build.patch | 30 + lockdev/gcc-4.7.patch | 18 + lockdev/lockdev.install | 9 + lockfile-progs/PKGBUILD | 27 + loudmouth/PKGBUILD | 50 + lpsolve/PKGBUILD | 48 + lpsolve/flags.patch | 45 + lrzip/PKGBUILD | 32 + lsdvd/PKGBUILD | 24 + lsof/PKGBUILD | 54 + lsof/license.txt | 27 + ltris/PKGBUILD | 51 + ltris/ltris.desktop | 7 + ltris/ltris.install | 4 + ltris2/PKGBUILD | 32 + ltris2/ltris2.install | 4 + lua-dbi/PKGBUILD | 56 + lua-dbi/remove-mariadb.patch | 19 + lua-expat/PKGBUILD | 72 + lua-filesystem/LICENSE | 22 + lua-filesystem/PKGBUILD | 42 + lua-lgi/PKGBUILD | 53 + lua-lpeg/LICENSE | 7 + lua-lpeg/PKGBUILD | 63 + lua-mpack/PKGBUILD | 54 + lua-penlight/PKGBUILD | 32 + lua-sec/PKGBUILD | 82 + lua-socket/PKGBUILD | 74 + lua-socket/fix-library.patch | 133 + lua/LICENSE | 30 + lua/PKGBUILD | 60 + lua/liblua.so.patch | 60 + lua/lua.pc | 20 + lua51/PKGBUILD | 62 + lua51/lua-arch.patch | 66 + lua52/LICENSE | 30 + lua52/PKGBUILD | 61 + lua52/liblua.so.patch | 57 + lua52/lua.pc | 20 + luajit-openresty/PKGBUILD | 28 + luajit/PKGBUILD | 51 + luakit/PKGBUILD | 48 + luakit/libre.patch | 76 + lugaru/PKGBUILD | 61 + lugaru/lugaru.desktop | 11 + lugaru/lugaru.png | Bin 0 -> 27946 bytes lumina/PKGBUILD | 289 + lumina/boot-splash.patch | 19830 +++++++++++++++ lumina/distributor-logo-dark.svg | 7 + lumina/distributor-logo-light.svg | 7 + lumina/libre.patch | 268 + lumina/remove-xscreensaver-support.patch | 220 + lv2/PKGBUILD | 68 + lxappearance-obconf-gtk2/PKGBUILD | 32 + lxappearance-obconf/PKGBUILD | 40 + lxappearance/PKGBUILD | 47 + lxdm-theme-hyperbola/PKGBUILD | 27 + .../lxdm-theme-hyperbola.install | 20 + lxdm/PKGBUILD | 106 + lxdm/git-fixes.patch | 93 + lxdm/lxdm.initd | 19 + lxdm/lxdm.run | 2 + lxdm/set-path.patch | 13 + lxmusic/PKGBUILD | 47 + lxrandr/PKGBUILD | 51 + lxtask/PKGBUILD | 69 + lxtask/lxtask.desktop | 207 + lxtask/lxtask.png | Bin 0 -> 9055 bytes lxterminal-gtk2/PKGBUILD | 30 + lxterminal/PKGBUILD | 29 + lynx/PKGBUILD | 65 + lzop/PKGBUILD | 26 + macchanger/PKGBUILD | 47 + mailcap/PKGBUILD | 33 + mailgraph/PKGBUILD | 59 + mailgraph/mailgraph.confd | 18 + mailgraph/mailgraph.initd | 35 + mailgraph/mailgraph.install | 18 + mailutils/PKGBUILD | 64 + mailutils/fix-build-mb-len-max.patch | 14 + maim/PKGBUILD | 34 + maim/fix-build-without-libwebp.patch | 171 + mallard-ducktype/PKGBUILD | 24 + markmywords/PKGBUILD | 38 + markmywords/appdata.patch | 37 + markmywords/discount.patch | 53 + materia-gtk-theme/PKGBUILD | 28 + mc/PKGBUILD | 78 + mcabber/PKGBUILD | 54 + mcpp/PKGBUILD | 47 + md4c/PKGBUILD | 47 + meandmyshadow/PKGBUILD | 34 + mednafen/PKGBUILD | 52 + mednaffe/PKGBUILD | 24 + megaglest/PKGBUILD | 75 + megaglest/remove-xvfb-run.patch | 18 + meld/PKGBUILD | 49 + mercurial/PKGBUILD | 59 + mercurial/mercurial.profile | 1 + mesa-demos/LICENSE | 82 + mesa-demos/PKGBUILD | 49 + mesa-demos/libre.patch | 172 + mesa/LICENSE | 83 + mesa/PKGBUILD | 178 + mesa/drirc | 20 + meson/PKGBUILD | 56 + meson/hyperbola-meson | 10 + metalog/PKGBUILD | 46 + metalog/metalog.confd | 18 + metalog/metalog.initd | 41 + metalog/metalog.run | 3 + metis/PKGBUILD | 45 + mg/PKGBUILD | 30 + mgba/PKGBUILD | 91 + mgba/mgba.desktop | 12 + mhash/PKGBUILD | 43 + micropolis/PKGBUILD | 57 + micropolis/fhs-compliant.patch | 14 + micropolis/fix-hostname.patch | 11 + minimodem/PKGBUILD | 27 + minisign/PKGBUILD | 32 + miniupnpc/PKGBUILD | 61 + mirage/PKGBUILD | 34 + mirage/exif.c | 206 + mirage/exif.patch | 289 + mjpegtools/PKGBUILD | 52 + mk-configure/PKGBUILD | 28 + mkclean/PKGBUILD | 31 + mkisolinux/LICENSE | 339 + mkisolinux/PKGBUILD | 28 + mkisolinux/boot.msg | 15 + mkisolinux/mkisolinux | 116 + mkisolinux/mkisolinux.conf | 39 + mkisolinux/options.msg | 6 + mkpxelinux/LICENSE | 339 + mkpxelinux/PKGBUILD | 27 + mkpxelinux/boot.msg | 15 + mkpxelinux/mkpxelinux | 91 + mkpxelinux/mkpxelinux.conf | 37 + mkpxelinux/options.msg | 6 + mksyslinux/LICENSE | 339 + mksyslinux/PKGBUILD | 26 + mksyslinux/boot.msg | 15 + mksyslinux/mksyslinux | 145 + mksyslinux/mksyslinux.conf | 34 + mksyslinux/options.msg | 6 + mktorrent/PKGBUILD | 23 + mkvalidator/PKGBUILD | 30 + mkvtoolnix/PKGBUILD | 51 + mlmmj/PKGBUILD | 36 + mm-common/PKGBUILD | 29 + mmv/PKGBUILD | 57 + moc/PKGBUILD | 72 + mocicon/LICENSE | 23 + mocicon/PKGBUILD | 25 + monit/PKGBUILD | 77 + monit/fix-invalid-use-of-vfork.patch | 15 + monit/fix-monitrc.patch | 88 + monit/fix-webinterface.patch | 37 + monit/monit.initd | 35 + monit/monit.run | 5 + monit/monitrc.patch | 9 + moreutils/PKGBUILD | 29 + mp3gain/PKGBUILD | 49 + mp3info/PKGBUILD | 53 + mp3info/gmp3info.desktop | 9 + mp3info/gmp3info.png | Bin 0 -> 14095 bytes mp3splt-gtk/PKGBUILD | 30 + mp3splt/PKGBUILD | 27 + mp3wrap/PKGBUILD | 43 + mpd/PKGBUILD | 118 + mpd/mpd.conf | 25 + mpd/mpd.initd | 17 + mpd/mpd.install | 31 + mpd/mpd.run | 3 + mpdecimal/PKGBUILD | 25 + mpg123/PKGBUILD | 56 + mplayer/PKGBUILD | 119 + .../fix-libmpcodecs-ad_spdif_ffmpeg44.patch | 19 + mplayer/mplayer.desktop | 22 + mplayer/revert-icl-fixes.patch | 66 + mpop/PKGBUILD | 28 + mpop/mpop.install | 8 + mpv-legacy/PKGBUILD | 84 + mpv-legacy/remove-ytdl.patch | 1038 + mscgen/PKGBUILD | 43 + msgpack-c/PKGBUILD | 49 + msmtp/PKGBUILD | 75 + mtdev/PKGBUILD | 32 + mtools/PKGBUILD | 40 + mupdf/PKGBUILD | 130 + muse/PKGBUILD | 61 + musepack/PKGBUILD | 65 + mustach/PKGBUILD | 23 + mustpl/PKGBUILD | 24 + mutt/PKGBUILD | 77 + mxml/PKGBUILD | 44 + mygui/PKGBUILD | 48 + mygui/mygui.install | 3 + mypaint-brushes/PKGBUILD | 32 + mypaint-brushes1/PKGBUILD | 34 + mypaint/PKGBUILD | 27 + mypy/PKGBUILD | 44 + naev/PKGBUILD | 55 + nasm/PKGBUILD | 44 + nbd/PKGBUILD | 59 + nbd/config | 21 + nbd/nbd-client.confd | 10 + nbd/nbd-client.initd | 31 + nbd/nbd-server.confd | 6 + nbd/nbd-server.initd | 21 + nbd/nbd.install | 15 + ncdu/PKGBUILD | 28 + ncmpc-legacy/PKGBUILD | 27 + ncmpcpp/PKGBUILD | 50 + ncompress/PKGBUILD | 49 + nedit/PKGBUILD | 49 + neomutt/PKGBUILD | 73 + neon/PKGBUILD | 52 + nestopia/PKGBUILD | 30 + net-snmp/PKGBUILD | 79 + net-snmp/snmpd.confd | 19 + net-snmp/snmpd.initd | 34 + net-snmp/snmptrapd.confd | 15 + net-snmp/snmptrapd.initd | 13 + nethogs/PKGBUILD | 55 + netpbm/PKGBUILD | 151 + netpbm/netpbm-CAN-2005-2471.patch | 16 + netpbm/netpbm-libre-security-code.patch | 1386 ++ netpbm/netpbm-security-scripts.patch | 369 + netsurf-buildsystem/PKGBUILD | 25 + netsurf/PKGBUILD | 56 + netsurf/libre.patch | 145 + netsurf/netsurf.sh | 4 + neverball/PKGBUILD | 77 + nexuiz-classic/PKGBUILD | 72 + nexuiz-classic/nexuiz | 47 + nexuiz-classic/nexuiz-server | 47 + nghttp2/PKGBUILD | 67 + nghttp2/nghttpx.initd | 13 + nghttp2/nghttpx.run | 2 + ngircd/PKGBUILD | 84 + ngircd/ngircd.initd | 30 + ngircd/ngircd.run | 2 + nift/PKGBUILD | 32 + nift/libre.patch | 11 + ninja/PKGBUILD | 31 + nitrogen/PKGBUILD | 27 + nload/PKGBUILD | 48 + nlohmann-json/PKGBUILD | 31 + nmap-legacy/PKGBUILD | 74 + nml/PKGBUILD | 42 + nnn/PKGBUILD | 45 + normalize/PKGBUILD | 53 + notion/PKGBUILD | 55 + notmuch/PKGBUILD | 90 + notmuch/notmuch.install | 8 + nq/PKGBUILD | 24 + nsgenbind/PKGBUILD | 26 + nsxiv/PKGBUILD | 50 + ntfs-3g/CVE-2023-52890.patch | 34 + ntfs-3g/PKGBUILD | 69 + ntp/PKGBUILD | 90 + ntp/libressl-2.8.patch | 40 + ntp/ntp-client.confd | 21 + ntp/ntp-client.initd | 32 + ntp/ntp.conf | 23 + ntp/ntp.install | 28 + ntp/ntpd.confd | 6 + ntp/ntpd.initd | 22 + ntp/sntp.confd | 4 + ntp/sntp.initd | 27 + numactl/PKGBUILD | 37 + numlockx/PKGBUILD | 48 + numptyphysics/PKGBUILD | 50 + numptyphysics/fhs-compliant.patch | 22 + numptyphysics/numptyphysics | 2 + nuovext-icon-theme/PKGBUILD | 37 + nuovext-icon-theme/nuovext-icon-theme.install | 11 + nyx/PKGBUILD | 51 + oath-toolkit/PKGBUILD | 40 + obconf/02-update-russian-translate.patch | 286 + obconf/PKGBUILD | 58 + ...dd-missing-keywords-and-translations.patch | 34 + obconf/stop-using-libglade.patch | 6908 ++++++ obconf/switch-to-gtk3.patch | 349 + obmenu-generator/PKGBUILD | 21 + obmenu-generator/obmenu-generator.install | 7 + obmenu/PKGBUILD | 37 + obmenu/fix-build.patch | 9 + obmenu2/PKGBUILD | 32 + obmenu2/obmenu2.desktop | 12 + obmenu2/obmenu2.png | Bin 0 -> 7021 bytes ocaml/PKGBUILD | 73 + ocrad/PKGBUILD | 24 + ode/PKGBUILD | 35 + ogmtools/PKGBUILD | 47 + oksh/PKGBUILD | 32 + oksh/oksh.install | 13 + onak/PKGBUILD | 63 + onak/fix-postgresql-build.patch | 13 + onak/onak-keyd.conf | 9 + onak/onak-keyd.confd | 8 + onak/onak-keyd.initd | 39 + onak/onak-keyd.run | 11 + onak/onak.install | 19 + onak/onak.logrotate.d | 10 + oniguruma/PKGBUILD | 51 + onioncat/PKGBUILD | 42 + onioncat/ocat.confd | 11 + onioncat/ocat.initd | 25 + onioncat/onioncat.install | 19 + oolite/PKGBUILD | 46 + oolite/oolite | 9 + openal/PKGBUILD | 63 + openal/alsoft_gnu+linux.conf | 11 + openal/alsoft_hyperbolabsd.conf | 10 + openal/openal.install | 8 + openarena/PKGBUILD | 84 + openarena/openarena-runner.sh | 14 + openarena/openarena-server.desktop | 8 + openarena/openarena-server.png | Bin 0 -> 2302 bytes openarena/openarena.desktop | 7 + openarena/openarena.png | Bin 0 -> 2255 bytes openblas/PKGBUILD | 41 + openbox/PKGBUILD | 74 + openbox/libre.patch | 362 + openbsd-netcat/PKGBUILD | 49 + openbsd-telnet/PKGBUILD | 25 + opendbx/PKGBUILD | 48 + opendkim/PKGBUILD | 83 + opendkim/opendkim.conf | 20 + opendkim/opendkim.confd | 18 + opendkim/opendkim.initd | 73 + opendkim/opendkim.install | 26 + opendkim/opendkim.run | 3 + openjade/PKGBUILD | 62 + openjade/openjade.install | 23 + openjpeg2/PKGBUILD | 62 + openmotif/PKGBUILD | 48 + openmpi/PKGBUILD | 86 + openntpd/PKGBUILD | 89 + openntpd/ntp-user.patch | 13 + openntpd/ntpd.conf | 5 + openntpd/ntpd.conf.libre | 6 + openntpd/ntpd.confd | 7 + openntpd/ntpd.initd | 18 + openntpd/ntpd.run | 3 + openntpd/openntpd.install | 15 + openrsync/PKGBUILD | 39 + openscenegraph/PKGBUILD | 48 + openslp/PKGBUILD | 56 + .../openslp-2.0.0-null-pointer-deref.patch | 12 + openslp/openslp-2.0.0-openssl-1.1-fix.patch | 25 + openslp/slpd.initd | 88 + openslp/slpd.run | 2 + opensmtpd-filter-rspamd/PKGBUILD | 38 + opensmtpd-filter-senderscore/PKGBUILD | 37 + opensmtpd/PKGBUILD | 65 + opensmtpd/opensmtpd.install | 49 + opensmtpd/smtpd.initd | 11 + opensmtpd/smtpd.run | 2 + opensp/PKGBUILD | 49 + openttd-legacy/PKGBUILD | 57 + openttd-legacy/remove-online-content.patch | 175 + openttd-opengfx/PKGBUILD | 32 + openttd-openmsx/PKGBUILD | 50 + openttd-opensfx/PKGBUILD | 48 + openvi/PKGBUILD | 25 + opmsg/PKGBUILD | 36 + optipng/PKGBUILD | 50 + opus-tools/PKGBUILD | 25 + opus/PKGBUILD | 30 + opusfile/PKGBUILD | 24 + orc/PKGBUILD | 29 + os-prober/PKGBUILD | 43 + ossp/PKGBUILD | 65 + ossp/osspd.confd | 6 + ossp/osspd.initd | 40 + ossp/osspd.modulesd | 2 + ossp/remove-pulseaudio-support.patch | 96 + p7zip/PKGBUILD | 101 + p7zip/libre.patch | 934 + p7zip/libre_doc.patch | 22 + p7zip/p7zip.install | 6 + pango/PKGBUILD | 43 + pangomm/PKGBUILD | 24 + pangox-compat/PKGBUILD | 40 + pangox-compat/disable-shaper.patch | 15 + par2cmdline/PKGBUILD | 27 + parallel/PKGBUILD | 24 + parcellite/PKGBUILD | 43 + parcellite/fix-crash.patch | 11 + ...-unused-des-and-add-missing-keywords.patch | 17 + parted/PKGBUILD | 51 + partimage/PKGBUILD | 76 + partimage/partimage-0.6.9-zlib-1.2.6.patch | 35 + partimage/partimage.install | 28 + partimage/partimaged-gencrt | 18 + partimage/partimaged.confd | 9 + partimage/partimaged.initd | 23 + partimage/use-SSLv3-by-default.patch | 80 + pass-otp/PKGBUILD | 19 + password-store/PKGBUILD | 47 + patchutils/PKGBUILD | 47 + pax/PKGBUILD | 40 + pbzip2/PKGBUILD | 48 + pcc/PKGBUILD | 53 + pcmemtest/60_pcmemtest | 32 + pcmemtest/PKGBUILD | 47 + pcmemtest/pcmemtest-install | 89 + pcsxr-pgxp/PKGBUILD | 41 + pcsxr-pgxp/fix-pango.patch | 24 + pdfmixtool/PKGBUILD | 28 + peek/PKGBUILD | 31 + pekka-kana-2/PKGBUILD | 29 + perl-algorithm-diff/LICENSE | 43 + perl-algorithm-diff/PKGBUILD | 28 + perl-alien-sdl/PKGBUILD | 61 + perl-anyevent-i3/PKGBUILD | 29 + perl-anyevent/PKGBUILD | 49 + perl-archive-cpio/LICENSE | 51 + perl-archive-cpio/PKGBUILD | 29 + perl-archive-extract/LICENSE | 28 + perl-archive-extract/PKGBUILD | 31 + perl-archive-zip/LICENSE | 103 + perl-archive-zip/PKGBUILD | 46 + perl-berkeleydb/PKGBUILD | 51 + perl-bit-vector/PKGBUILD | 44 + perl-bytes-random-secure/LICENSE | 28 + perl-bytes-random-secure/PKGBUILD | 30 + perl-cairo-gobject/PKGBUILD | 56 + perl-canary-stability/PKGBUILD | 27 + perl-capture-tiny/PKGBUILD | 35 + perl-carp-clan/PKGBUILD | 26 + perl-cgi/LICENSE | 230 + perl-cgi/PKGBUILD | 30 + perl-class-data-inheritable/LICENSE | 32 + perl-class-data-inheritable/PKGBUILD | 29 + perl-class-inspector/PKGBUILD | 32 + perl-clone/LICENSE | 39 + perl-clone/PKGBUILD | 29 + perl-common-sense/PKGBUILD | 25 + perl-compress-bzip2/PKGBUILD | 26 + perl-crypt-libressl-bignum/PKGBUILD | 47 + perl-crypt-libressl-guess/PKGBUILD | 28 + perl-crypt-libressl-random/PKGBUILD | 29 + perl-crypt-libressl-rsa/PKGBUILD | 29 + perl-crypt-passwdmd5/PKGBUILD | 27 + perl-crypt-random-seed/PKGBUILD | 28 + perl-crypt-random-tesha2/PKGBUILD | 28 + perl-curses/PKGBUILD | 45 + perl-data-dump/COPYING | 251 + perl-data-dump/PKGBUILD | 34 + perl-data-optlist/PKGBUILD | 33 + perl-date-calc/PKGBUILD | 46 + perl-datetime-locale/PKGBUILD | 28 + perl-dbi/PKGBUILD | 50 + perl-devel-checklib/COPYING | 251 + perl-devel-checklib/PKGBUILD | 33 + perl-devel-stacktrace/PKGBUILD | 32 + perl-devel-symdump/COPYING | 251 + perl-devel-symdump/PKGBUILD | 29 + perl-digest-hmac/PKGBUILD | 26 + perl-digest-nilsimsa/PKGBUILD | 25 + perl-digest-sha1/LICENSE | 33 + perl-digest-sha1/PKGBUILD | 27 + perl-encode-locale/COPYING | 251 + perl-encode-locale/PKGBUILD | 32 + perl-error/PKGBUILD | 31 + perl-eval-closure/PKGBUILD | 33 + perl-event-execflow/LICENSE | 251 + perl-event-execflow/PKGBUILD | 34 + perl-exception-class/PKGBUILD | 31 + perl-exporter-tiny/PKGBUILD | 35 + perl-extutils-config/PKGBUILD | 34 + perl-extutils-depends/PKGBUILD | 29 + perl-extutils-helpers/PKGBUILD | 43 + perl-extutils-installpaths/PKGBUILD | 43 + perl-extutils-pkgconfig/PKGBUILD | 29 + perl-file-basedir/LICENSE | 31 + perl-file-basedir/PKGBUILD | 28 + perl-file-desktopentry/PKGBUILD | 44 + perl-file-listing/COPYING | 251 + perl-file-listing/PKGBUILD | 32 + perl-file-mimetype/PKGBUILD | 44 + perl-file-sharedir-install/PKGBUILD | 24 + perl-file-sharedir/PKGBUILD | 27 + perl-file-slurp-tiny/PKGBUILD | 26 + perl-file-slurp/LICENSE | 15 + perl-file-slurp/PKGBUILD | 49 + perl-file-tail/PKGBUILD | 48 + perl-file-which/PKGBUILD | 26 + perl-font-ttf/PKGBUILD | 32 + perl-glib-object-introspection/PKGBUILD | 40 + perl-gtk/PKGBUILD | 40 + perl-guard/LICENSE | 91 + perl-guard/PKGBUILD | 34 + perl-html-parser/COPYING | 251 + perl-html-parser/PKGBUILD | 55 + perl-html-tagset/COPYING | 251 + perl-html-tagset/PKGBUILD | 58 + perl-http-cookies/PKGBUILD | 30 + perl-http-daemon/PKGBUILD | 34 + perl-http-date/PKGBUILD | 30 + perl-http-message/PKGBUILD | 35 + perl-http-negotiate/COPYING | 251 + perl-http-negotiate/PKGBUILD | 32 + perl-image-exiftool/LICENSE | 251 + perl-image-exiftool/PKGBUILD | 32 + perl-inc-latest/PKGBUILD | 25 + perl-io-dirent/LICENSE | 16 + perl-io-dirent/PKGBUILD | 26 + perl-io-html/PKGBUILD | 32 + perl-io-multiplex/LICENSE | 34 + perl-io-multiplex/PKGBUILD | 27 + perl-io-socket-inet6/COPYING | 251 + perl-io-socket-inet6/PKGBUILD | 51 + perl-io-socket-ssl/COPYING | 251 + perl-io-socket-ssl/PKGBUILD | 33 + perl-io-string/COPYING | 251 + perl-io-string/PKGBUILD | 29 + perl-io-stringy/PKGBUILD | 48 + perl-io-tty/PKGBUILD | 46 + perl-ipc-run/PKGBUILD | 47 + perl-ipc-run3/PKGBUILD | 30 + perl-ipc-system-simple/PKGBUILD | 25 + perl-json-xs/PKGBUILD | 31 + perl-json/COPYING | 251 + perl-json/PKGBUILD | 31 + perl-lchown/PKGBUILD | 36 + perl-libwww/PKGBUILD | 35 + perl-linux-desktopfiles/PKGBUILD | 37 + perl-list-allutils/PKGBUILD | 29 + perl-list-moreutils-xs/PKGBUILD | 25 + perl-list-moreutils/PKGBUILD | 25 + perl-list-someutils/PKGBUILD | 29 + perl-list-utilsby/PKGBUILD | 42 + perl-locale-gettext/COPYING | 251 + perl-locale-gettext/PKGBUILD | 41 + perl-locale-maketext-lexicon/PKGBUILD | 27 + perl-lockfile-simple/PKGBUILD | 46 + perl-log-agent/LICENSE | 226 + perl-log-agent/PKGBUILD | 29 + perl-lwp-mediatypes/COPYING | 251 + perl-lwp-mediatypes/PKGBUILD | 32 + perl-lwp-protocol-https/PKGBUILD | 56 + perl-lwp-protocol-https/certs.patch | 43 + perl-mail-authenticationresults/PKGBUILD | 28 + perl-mail-message/LICENSE | 28 + perl-mail-message/PKGBUILD | 36 + perl-mail-spf-query/PKGBUILD | 27 + perl-mail-spf/PKGBUILD | 27 + perl-mailtools/COPYING | 251 + perl-mailtools/PKGBUILD | 51 + perl-math-random-isaac/PKGBUILD | 31 + perl-mime-charset/PKGBUILD | 39 + perl-mime-types/LICENSE | 35 + perl-mime-types/PKGBUILD | 27 + perl-module-build-tiny/PKGBUILD | 51 + perl-module-build/COPYING | 251 + perl-module-build/PKGBUILD | 28 + perl-module-implementation/PKGBUILD | 30 + perl-module-runtime/LICENSE | 33 + perl-module-runtime/PKGBUILD | 29 + perl-net-cidr-lite/PKGBUILD | 46 + perl-net-dns-resolver-programmable/PKGBUILD | 27 + perl-net-dns/LICENSE | 34 + perl-net-dns/PKGBUILD | 30 + perl-net-http/PKGBUILD | 45 + perl-net-ip/LICENSE | 56 + perl-net-ip/PKGBUILD | 47 + perl-net-libidn2/PKGBUILD | 27 + perl-net-server/PKGBUILD | 44 + perl-net-ssleay/PKGBUILD | 53 + perl-netaddr-ip/PKGBUILD | 44 + perl-par-dist/PKGBUILD | 32 + perl-params-util/PKGBUILD | 28 + perl-params-validate/PKGBUILD | 28 + perl-parse-yapp/LICENSE | 35 + perl-parse-yapp/PKGBUILD | 47 + perl-path-class/PKGBUILD | 36 + perl-perl4-corelibs/LICENSE | 29 + perl-perl4-corelibs/PKGBUILD | 36 + perl-pod-coverage/COPYING | 251 + perl-pod-coverage/PKGBUILD | 29 + perl-role-tiny/PKGBUILD | 33 + perl-sdl/PKGBUILD | 53 + perl-sgmls/PKGBUILD | 67 + perl-socket6/LICENSE.BSD3 | 32 + perl-socket6/LICENSE.ISC | 14 + perl-socket6/PKGBUILD | 55 + perl-sort-versions/PKGBUILD | 34 + perl-sub-exporter/PKGBUILD | 34 + perl-sub-install/PKGBUILD | 26 + perl-sub-override/LICENSE | 32 + perl-sub-override/PKGBUILD | 29 + perl-sub-uplevel/PKGBUILD | 27 + perl-sys-hostname-long/PKGBUILD | 46 + perl-term-animation/LICENSE | 379 + perl-term-animation/PKGBUILD | 28 + perl-term-readkey/COPYING | 251 + perl-term-readkey/PKGBUILD | 35 + perl-term-readline-gnu/COPYING | 251 + perl-term-readline-gnu/PKGBUILD | 61 + perl-test-deep/COPYING | 251 + perl-test-deep/PKGBUILD | 29 + perl-test-differences/LICENSE | 34 + perl-test-differences/PKGBUILD | 29 + perl-test-exception/LICENSE | 32 + perl-test-exception/PKGBUILD | 29 + perl-test-fatal/PKGBUILD | 30 + perl-test-most/LICENSE | 30 + perl-test-most/PKGBUILD | 33 + perl-test-needs/PKGBUILD | 30 + perl-test-nowarnings/PKGBUILD | 27 + perl-test-pod-coverage/COPYING | 201 + perl-test-pod-coverage/PKGBUILD | 29 + perl-test-pod/COPYING | 251 + perl-test-pod/PKGBUILD | 32 + perl-test-requiresinternet/PKGBUILD | 41 + perl-test-warn/LICENSE | 34 + perl-test-warn/PKGBUILD | 30 + perl-text-charwidth/COPYING.GPLv1 | 251 + perl-text-charwidth/PKGBUILD | 32 + perl-text-charwidth/artistic-1.0.txt | 110 + perl-text-csv/LICENSE | 41 + perl-text-csv/PKGBUILD | 31 + perl-text-diff/PKGBUILD | 47 + perl-text-patch/PKGBUILD | 25 + perl-tie-simple/PKGBUILD | 26 + perl-time-duration/PKGBUILD | 28 + perl-time-modules/LICENSE | 251 + perl-time-modules/PKGBUILD | 26 + perl-timedate/COPYING | 251 + perl-timedate/PKGBUILD | 53 + perl-tk/PKGBUILD | 47 + perl-tree-dag-node/PKGBUILD | 27 + perl-try-tiny/PKGBUILD | 30 + perl-types-serialiser/PKGBUILD | 31 + perl-unicode-linebreak/PKGBUILD | 68 + perl-uri/PKGBUILD | 33 + perl-user-identity/LICENSE | 33 + perl-user-identity/PKGBUILD | 27 + perl-www-robotrules/COPYING | 251 + perl-www-robotrules/PKGBUILD | 32 + perl-x11-protocol/PKGBUILD | 30 + perl-xml-libxml/PKGBUILD | 48 + perl-xml-libxml/perl-xml-libxml.install | 23 + perl-xml-namespacesupport/PKGBUILD | 31 + perl-xml-parser/COPYING | 251 + perl-xml-parser/PKGBUILD | 32 + perl-xml-sax-base/LICENSE | 35 + perl-xml-sax-base/PKGBUILD | 31 + perl-xml-sax-expat/LICENSE | 33 + perl-xml-sax-expat/PKGBUILD | 30 + perl-xml-sax-expat/perl-xml-sax-expat.install | 17 + perl-xml-sax/PKGBUILD | 30 + perl-xml-sax/perl-xml-sax.install | 11 + perl-xml-simple/PKGBUILD | 26 + perl-yaml-libyaml/PKGBUILD | 33 + perl-yaml-syck/PKGBUILD | 44 + pflogsumm/PKGBUILD | 41 + pgbouncer/PKGBUILD | 51 + pgbouncer/patch-lib_usual_tls_tls_c.patch | 14 + pgbouncer/pgbouncer.confd | 12 + pgbouncer/pgbouncer.ini | 52 + pgbouncer/pgbouncer.initd | 88 + pgbouncer/pgbouncer.install | 34 + pgbouncer/pgbouncer.logrotate | 8 + phonon-gstreamer/PKGBUILD | 61 + phonon-qt-gstreamer/PKGBUILD | 36 + phonon-qt/PKGBUILD | 34 + phonon/PKGBUILD | 88 + phonon/qt-5.4.2.patch | 23 + physfs/PKGBUILD | 33 + picom/PKGBUILD | 57 + pidgin-otr/PKGBUILD | 28 + pidgin/PKGBUILD | 100 + pidgin/privacy.patch | 50 + pigeonhole/PKGBUILD | 54 + pigz/PKGBUILD | 37 + pinentry-bemenu/PKGBUILD | 27 + pinentry-extra/PKGBUILD | 107 + pingus/PKGBUILD | 50 + pingus/pingus.desktop | 9 + pioneer/PKGBUILD | 56 + pioneer/fix-build.patch | 20 + pitivi/PKGBUILD | 33 + pitivi/remove-warning-soft-deps.patch | 84 + pixman/PKGBUILD | 39 + pixz/PKGBUILD | 29 + pkgfile/PKGBUILD | 33 + pkgfile/pkgfile.cron.daily | 24 + pkgfile/pkgfile.install | 18 + plib/PKGBUILD | 38 + plotutils/PKGBUILD | 49 + pmount-safe-removal/PKGBUILD | 40 + pmount-safe-removal/fix-package.patch | 1320 + pmount/PKGBUILD | 61 + pmount/pmount-bash-completion | 96 + pmount/pmount_exfat.patch | 13 + ...ix-a-careless-segfault-in-debug-mode.patch | 25 + pnmixer/PKGBUILD | 63 + pnmixer/fix-build.patch | 10 + podofo/PKGBUILD | 38 + poly2tri-c/PKGBUILD | 44 + poppler-data/PKGBUILD | 21 + poppler/PKGBUILD | 107 + portaudio/PKGBUILD | 68 + portaudio/sndio.patch | 883 + portmidi/PKGBUILD | 58 + portmidi/remove-java-support.patch | 87 + portmidi/sndio.patch | 419 + portsmf/PKGBUILD | 54 + postfix-policyd-spf-perl/PKGBUILD | 22 + postfix/PKGBUILD | 137 + postfix/aliases.patch | 20 + postfix/libressl.patch | 233 + postfix/postfix.initd | 85 + postfix/postfix.install | 44 + postfix/postfix.run | 3 + postgresql-old-upgrade/PKGBUILD | 78 + postgresql/PKGBUILD | 218 + postgresql/postgresql-check-db-dir | 49 + postgresql/postgresql-perl-rpath.patch | 13 + postgresql/postgresql-run-socket.patch | 12 + postgresql/postgresql.conf | 17 + postgresql/postgresql.confd | 58 + postgresql/postgresql.initd | 143 + postgresql/postgresql.install | 28 + postgresql/postgresql.logrotate | 4 + postgresql/postgresql.run | 30 + postgresql/postgresql_log.run | 2 + postgrey/PKGBUILD | 68 + postgrey/postgrey.confd | 55 + postgrey/postgrey.initd | 100 + postgrey/postgrey.install | 23 + postgrey/postgrey.run | 2 + potrace/PKGBUILD | 30 + povray/PKGBUILD | 63 + pqiv/PKGBUILD | 29 + pragha/PKGBUILD | 52 + prboom-plus/PKGBUILD | 43 + prboom/PKGBUILD | 41 + prboom/fix-libpng.patch | 21 + premake/PKGBUILD | 26 + privoxy/PKGBUILD | 86 + privoxy/privoxy.initd | 34 + privoxy/privoxy.install | 33 + privoxy/privoxy.logrotate.d | 9 + privoxy/privoxy.run | 2 + profanity/PKGBUILD | 91 + proftpd/PKGBUILD | 84 + proftpd/proftpd.initd | 35 + proftpd/proftpd.install | 24 + proftpd/proftpd.logrotate | 9 + proftpd/proftpd.run | 3 + proj/PKGBUILD | 39 + prosody/PKGBUILD | 93 + prosody/prosody.initd | 47 + prosody/prosody.install | 48 + prosody/prosody.logrotated | 9 + prosody/prosody.run | 7 + proxychains/PKGBUILD | 48 + pstoedit/PKGBUILD | 30 + pstotext/PKGBUILD | 49 + pstotext/copyright | 160 + psutils/PKGBUILD | 29 + ptlib/MPL-1.0.txt | 360 + ptlib/PKGBUILD | 72 + ptlib/patch-src_ptclib_pssl_cxx.patch | 26 + ptlib/ptlib-2.10.11-bison_fixes-2.patch | 2951 +++ ptlib/sndio.patch | 926 + publicsuffix/PKGBUILD | 45 + pugixml/PKGBUILD | 44 + putty/PKGBUILD | 39 + putty/putty.desktop | 10 + putty/putty.png | Bin 0 -> 759 bytes putty/putty.xpm | 110 + pwgen/PKGBUILD | 46 + pyqt-builder/PKGBUILD | 27 + python-acme/PKGBUILD | 43 + python-appdirs/PKGBUILD | 42 + python-asn1crypto/PKGBUILD | 42 + python-attrs/PKGBUILD | 43 + python-babel/PKGBUILD | 67 + python-bcrypt/PKGBUILD | 62 + python-beaker/PKGBUILD | 49 + python-beautifulsoup4/PKGBUILD | 46 + python-bencode/PKGBUILD | 43 + python-black/PKGBUILD | 55 + python-bleach/PKGBUILD | 42 + python-bottle/PKGBUILD | 43 + python-captcha/PKGBUILD | 18 + python-certifi/PKGBUILD | 25 + python-cffi/PKGBUILD | 43 + python-chardet/000-support-pytest-4.patch | 24 + python-chardet/PKGBUILD | 51 + python-click/PKGBUILD | 26 + python-commonmark/PKGBUILD | 30 + python-configargparse/PKGBUILD | 25 + python-configobj/PKGBUILD | 42 + python-cppy/PKGBUILD | 42 + python-cryptography/PKGBUILD | 45 + python-cycler/PKGBUILD | 42 + python-cython/PKGBUILD | 80 + .../cython-hash-int-conversion.patch | 106 + python-dateutil/PKGBUILD | 45 + python-defusedxml/PKGBUILD | 43 + python-distro/PKGBUILD | 27 + python-distutils-extra/PKGBUILD | 21 + python-dnspython/PKGBUILD | 27 + python-docopt/PKGBUILD | 25 + python-docutils/PKGBUILD | 97 + python-docutils/tauthon-docutils.install | 9 + python-dulwich/PKGBUILD | 25 + python-eventlet/PKGBUILD | 53 + python-fastecdsa/PKGBUILD | 30 + python-fastimport/PKGBUILD | 24 + python-fonttools/PKGBUILD | 29 + python-future/PKGBUILD | 68 + python-gevent/PKGBUILD | 65 + python-greenlet/PKGBUILD | 24 + python-html5lib/PKGBUILD | 25 + python-httplib2/PKGBUILD | 45 + python-idna/PKGBUILD | 52 + python-imagesize/PKGBUILD | 39 + python-ipy/PKGBUILD | 44 + python-isodate/PKGBUILD | 30 + python-jinja/PKGBUILD | 62 + python-josepy/PKGBUILD | 42 + python-jsmin/PKGBUILD | 42 + python-kiwisolver/PKGBUILD | 24 + python-lxml/PKGBUILD | 63 + python-m2crypto/PKGBUILD | 47 + python-m2crypto/libressl.patch | 140 + python-mako/PKGBUILD | 60 + python-markdown/PKGBUILD | 31 + python-markdown/disable_directory_urls.patch | 11 + python-markupsafe/PKGBUILD | 44 + python-matplotlib/PKGBUILD | 61 + python-mock/PKGBUILD | 62 + python-monotonic/PKGBUILD | 20 + python-mutagen/PKGBUILD | 52 + python-mypy_extensions/PKGBUILD | 24 + python-ndg-httpsclient/PKGBUILD | 44 + python-nose/PKGBUILD | 61 + python-numpy/PKGBUILD | 56 + python-packaging/PKGBUILD | 46 + python-paramiko/PKGBUILD | 23 + python-parsedatetime/PKGBUILD | 24 + python-passlib/PKGBUILD | 26 + python-pathspec/PKGBUILD | 25 + python-patiencediff/PKGBUILD | 26 + python-pbr/PKGBUILD | 66 + python-pgpdump/PKGBUILD | 34 + python-pillow/PKGBUILD | 51 + python-ply/PKGBUILD | 51 + python-psutil/PKGBUILD | 61 + python-psycopg2/PKGBUILD | 40 + python-pyasn1/PKGBUILD | 51 + python-pycairo/PKGBUILD | 46 + python-pychm/PKGBUILD | 24 + python-pycparser/PKGBUILD | 65 + python-pycryptodome/PKGBUILD | 69 + python-pygments/PKGBUILD | 70 + python-pygobject/PKGBUILD | 33 + python-pyinotify/PKGBUILD | 23 + python-pylibacl/PKGBUILD | 46 + python-pynacl/PKGBUILD | 29 + python-pyopenssl/PKGBUILD | 63 + python-pyparsing/PKGBUILD | 51 + .../fix-build-without-setuptools.patch | 18 + python-pypubsub/PKGBUILD | 28 + python-pyqt-sip/PKGBUILD | 37 + python-pyqt/PKGBUILD | 69 + python-pyrfc3339/PKGBUILD | 39 + python-pysmi/PKGBUILD | 54 + python-pysnmp/PKGBUILD | 53 + python-pysocks/PKGBUILD | 42 + python-pysqlite3/PKGBUILD | 25 + python-pytz/PKGBUILD | 33 + python-pyxattr/PKGBUILD | 25 + python-pyxdg/PKGBUILD | 32 + python-rdflib/PKGBUILD | 43 + python-recommonmark/PKGBUILD | 61 + .../recommonmark-disable-math-on-builds.patch | 59 + .../recommonmark-sphinx-2.patch | 49 + python-regex/PKGBUILD | 27 + python-reportlab/PKGBUILD | 43 + python-requests-toolbelt/PKGBUILD | 54 + python-requests/PKGBUILD | 76 + python-requests/certs.patch | 14 + python-requests/requests-pytest-5.patch | 33 + python-scrypt/PKGBUILD | 26 + python-setuptools-scm/PKGBUILD | 33 + python-setuptools/PKGBUILD | 86 + python-six/PKGBUILD | 38 + python-snowballstemmer/PKGBUILD | 46 + python-soupsieve/PKGBUILD | 24 + python-sphinx-alabaster-theme/PKGBUILD | 26 + python-sphinx-argparse/PKGBUILD | 56 + python-sphinx/PKGBUILD | 33 + python-sphinx_rtd_theme/PKGBUILD | 47 + python-sphinxcontrib-applehelp/PKGBUILD | 24 + python-sphinxcontrib-devhelp/PKGBUILD | 34 + python-sphinxcontrib-htmlhelp/PKGBUILD | 34 + .../000-fix-mypy-violations-1.patch | 20 + .../001-fix-mypy-violations-2.patch | 41 + python-sphinxcontrib-jsmath/PKGBUILD | 44 + python-sphinxcontrib-qthelp/PKGBUILD | 34 + python-sphinxcontrib-serializinghtml/PKGBUILD | 34 + python-stem/PKGBUILD | 56 + python-timeago/PKGBUILD | 25 + python-toml/PKGBUILD | 45 + ...ython-toml-0.10.1-install_type_hints.patch | 11 + python-typed-ast/PKGBUILD | 24 + python-typing_extensions/PKGBUILD | 29 + python-urllib3/PKGBUILD | 49 + python-vobject/PKGBUILD | 48 + python-webencodings/PKGBUILD | 19 + python-wheel/PKGBUILD | 59 + python-wxpython/PKGBUILD | 35 + python-xattr/PKGBUILD | 24 + python-yaml/PKGBUILD | 25 + python-zope-component/PKGBUILD | 57 + python-zope-event/PKGBUILD | 44 + python-zope-interface/PKGBUILD | 42 + python/PKGBUILD | 122 + pyzor/PKGBUILD | 24 + qbe/PKGBUILD | 28 + qbs/PKGBUILD | 44 + qemu-legacy/65-kvm.rules | 2 + qemu-legacy/PKGBUILD | 248 + qemu-legacy/qemu-ga.conf | 1 + qemu-legacy/qemu-ga.initd | 13 + qemu-legacy/qemu-ga.run | 3 + qemu-legacy/qemu.install | 21 + qemu-legacy/sndio.patch | 781 + qhull/PKGBUILD | 48 + qiv/PKGBUILD | 51 + qlipper/PKGBUILD | 28 + qml-box2d/PKGBUILD | 30 + qownnotes/PKGBUILD | 45 + qpdf/PKGBUILD | 42 + qrencode/PKGBUILD | 44 + qscintilla/PKGBUILD | 53 + qt-base/CVE-2024-39936.patch | 109 + qt-base/PKGBUILD | 152 + qt-base/kdebug-428095.patch | 45 + qt-base/qt-base-cflags.patch | 46 + qt-base/qtnetwork-5.15.0-libressl.patch | 590 + qt-declarative/PKGBUILD | 63 + qt-doc/PKGBUILD | 75 + qt-graphicaleffects/PKGBUILD | 35 + qt-imageformats/PKGBUILD | 37 + qt-multimedia/PKGBUILD | 61 + qt-quick3d/PKGBUILD | 46 + qt-quick3d/qtquick3d-assimp.patch | 13 + qt-quickcontrols/PKGBUILD | 57 + qt-quickcontrols2/PKGBUILD | 40 + qt-script/PKGBUILD | 57 + qt-sensors/PKGBUILD | 59 + qt-serialport/PKGBUILD | 39 + qt-styleplugins/PKGBUILD | 48 + .../fix-build-against-Qt-5.15.patch | 44 + qt-styleplugins/fix-gtk2-background.patch | 25 + qt-styleplugins/install.sh | 20 + qt-styleplugins/qt-styleplugins.hook | 9 + qt-svg/PKGBUILD | 58 + qt-tools/PKGBUILD | 70 + qt-tools/assistant.desktop | 8 + qt-tools/designer.desktop | 10 + qt-tools/linguist.desktop | 9 + qt-translations/PKGBUILD | 40 + qt-webchannel/PKGBUILD | 58 + ...te-the-header-directly-to-fix-build-.patch | 49 + qt-webkit/PKGBUILD | 65 + qt-websockets/PKGBUILD | 41 + qt-x11extras/PKGBUILD | 41 + qt-xmlpatterns/PKGBUILD | 58 + qt4/PKGBUILD | 217 + qt4/assistant-qt4.desktop | 9 + qt4/designer-qt4.desktop | 11 + qt4/improve-cups-support.patch | 84 + qt4/l-qclipboard_delay.patch | 12 + qt4/l-qclipboard_fix_recursive.patch | 94 + qt4/libressl-2.8.patch | 31 + qt4/linguist-qt4.desktop | 10 + qt4/moc-boost-workaround.patch | 12 + qt4/moc-syslib-workaround.patch | 11 + qt4/qt4-gcc6.patch | 36 + qt4/qt4-glibc-2.25.patch | 30 + qt4/qt4-icu59.patch | 11 + qt4/qtconfig-qt4.desktop | 9 + qtcreator/PKGBUILD | 52 + qtct/PKGBUILD | 31 + qtemu/PKGBUILD | 42 + qtemu/libre.patch | 143 + qtpass/PKGBUILD | 51 + quazip/PKGBUILD | 26 + quesoglc/PKGBUILD | 49 + quota-tools/LICENSE | 26 + quota-tools/PKGBUILD | 52 + quota-tools/quota.confd | 20 + quota-tools/quota.initd | 37 + quota-tools/rpc-rquotad.initd | 25 + radare2/PKGBUILD | 41 + radicale/PKGBUILD | 76 + radicale/radicale.initd | 19 + radicale/radicale.install | 25 + radicale/radicale.run | 5 + radisnoir-font/PKGBUILD | 21 + ragel/PKGBUILD | 30 + rapidjson/PKGBUILD | 59 + raptor/PKGBUILD | 35 + ratpoison/PKGBUILD | 66 + ratpoison/ratpoison.desktop | 8 + rawtherapee/PKGBUILD | 30 + razor/PKGBUILD | 38 + razor/razor-2.85-cosmetic-pv-fix.patch | 22 + razor/razor-2.85-makefile-quoting-fix.patch | 15 + rcs/PKGBUILD | 25 + rdiff-backup/PKGBUILD | 33 + rdiff-backup/fix-scm-version.patch | 11 + re2c/PKGBUILD | 49 + recode/PKGBUILD | 30 + recoll/PKGBUILD | 50 + recoll/remove-dbus.patch | 12 + redo-python/PKGBUILD | 22 + redshift/PKGBUILD | 53 + refind/PKGBUILD | 106 + remind/PKGBUILD | 29 + remmina-legacy/PKGBUILD | 62 + rep-gtk/PKGBUILD | 31 + retry/PKGBUILD | 29 + rhash/PKGBUILD | 62 + ri-li/PKGBUILD | 43 + ri-li/iostream.patch | 202 + ri-li/ri-li.desktop | 13 + rlwrap/PKGBUILD | 29 + rofi-pass/PKGBUILD | 19 + rofi/PKGBUILD | 51 + roundup/PKGBUILD | 24 + routersploit/PKGBUILD | 31 + routersploit/routersploit-py38.patch | 24 + rox/PKGBUILD | 72 + rox/rox.desktop | 8 + rox/rox.sh | 2 + rox/rox.svg | 493 + rp-pppoe/PKGBUILD | 72 + rp-pppoe/kmode.patch | 19 + rp-pppoe/libre.patch | 88 + rp-pppoe/rp-pppoe-3.12-linux-headers.patch | 28 + rp-pppoe/rp-pppoe.initd | 28 + rp-pppoe/rp-pppoe.install | 12 + rpcsvc-proto/PKGBUILD | 30 + rrdtool/PKGBUILD | 63 + rsnapshot/AC_INIT-version.patch | 8 + rsnapshot/PKGBUILD | 60 + rsnapshot/rsnapshot | 4 + rspamd/PKGBUILD | 143 + rspamd/rspamd.confd | 32 + rspamd/rspamd.initd | 49 + rspamd/rspamd.install | 25 + rspamd/rspamd.run | 2 + rsync/PKGBUILD | 68 + rsync/rsyncd.conf | 10 + rsync/rsyncd.confd | 5 + rsync/rsyncd.initd | 11 + rsync/rsyncd.run | 3 + rtorrent/PKGBUILD | 34 + ruby-hpricot/PKGBUILD | 50 + ruby-kramdown/PKGBUILD | 54 + ruby-mini_portile2/PKGBUILD | 34 + ruby-mustache/PKGBUILD | 47 + ruby-nokogiri/PKGBUILD | 50 + ruby-rdiscount/PKGBUILD | 48 + ruby-rexml/PKGBUILD | 27 + ruby-ronn-ng/PKGBUILD | 53 + ruby/CVE-2021-41816.patch | 24 + ruby/CVE-2021-41817-1.patch | 917 + ruby/CVE-2021-41817-2.patch | 91 + ruby/CVE-2021-41817-3.patch | 88 + ruby/PKGBUILD | 100 + ruby/gemrc | 5 + ruby/patch-ext_openssl_extconf_rb.patch | 13 + .../patch-ext_openssl_openssl_missing_h.patch | 31 + ruby/remove-nonfree-ruby-references.patch | 78 + ruby/ruby.install | 22 + runit-init-scripts/PKGBUILD | 50 + runit-init-scripts/runit-init-scripts.install | 12 + runit/30-sysctl.hook | 12 + runit/PKGBUILD | 105 + runit/default-directory-for-services.patch | 71 + runit/runit-hook | 44 + runit/runit-install.hook | 11 + runit/runit-remove.hook | 10 + sakura/PKGBUILD | 49 + samba/PKGBUILD | 231 + samba/nmbd.run | 10 + samba/samba.conf.d | 18 + samba/samba.install | 30 + samba/samba.logrotate | 9 + samba/smb.confd | 38 + samba/smb.initd | 56 + samba/smbd.run | 10 + samurai/PKGBUILD | 22 + sane/PKGBUILD | 98 + sane/fix-build.patch | 15 + sane/saned.confd | 2 + sane/saned.initd | 12 + sane/saned.run | 4 + sassc/PKGBUILD | 47 + sawfish-themes/PKGBUILD | 40 + sawfish/PKGBUILD | 61 + sawfish/commands.patch | 38 + sbsigntool/PKGBUILD | 57 + sbsigntool/libressl.patch | 161 + sc/LICENSE | 18 + sc/PKGBUILD | 53 + scdoc/PKGBUILD | 26 + scons/PKGBUILD | 28 + scour/PKGBUILD | 24 + screen/PKGBUILD | 90 + scribus/PKGBUILD | 57 + scron/PKGBUILD | 43 + scron/fhs-compliant.patch | 633 + scron/scron.install | 9 + scron/scrond.initd | 11 + scron/scrond.run | 3 + scrot/PKGBUILD | 34 + sdhcp/PKGBUILD | 24 + sdl/PKGBUILD | 148 + sdl/SDL-1.2.10-GrabNotViewable.patch | 22 + ...te_image_size_when_loading_BMP_files.patch | 23 + ...x-a-buffer-overread-in-IMA_ADPCM_nib.patch | 59 + ...x-a-buffer-overwrite-in-IMA_ADPCM_de.patch | 64 + ...E-2019-7576-Fix-buffer-overreads-in-.patch | 83 + ...x-a-buffer-overread-in-IMA_ADPCM_dec.patch | 71 + ...x-a-buffer-overwrite-in-MS_ADPCM_dec.patch | 84 + ...x-a-buffer-overread-in-MS_ADPCM_deco.patch | 75 + ...x-a-buffer-overread-in-MS_ADPCM_nibb.patch | 57 + ...x-a-buffer-overread-in-InitIMA_ADPCM.patch | 67 + ...ject-BMP-images-with-pixel-colors-ou.patch | 67 + ...x-in-integer-overflow-in-SDL_Calcula.patch | 209 + ...E-2019-7636-Refuse-loading-BMP-image.patch | 56 + ...2.15-Reject-2-3-5-6-7-bpp-BMP-images.patch | 42 + ..._EnableUNICODE_drops_keyboard_events.patch | 73 + sdl/SDL-1.2.15-const_XData32.patch | 16 + ...L-1.2.15-ignore_insane_joystick_axis.patch | 20 + sdl/SDL-1.2.15-no-default-backing-store.patch | 24 + ...ass-SetGammaRamp-when-changing-gamma.patch | 44 + sdl/X11_KeyToUnicode.patch | 52 + sdl/libre.patch | 130 + sdl/libsdl-1.2.15-resizing.patch | 63 + sdl/sdl-1.2.14-disable-mmx.patch | 13 + sdl/sdl-1.2.14-fix-mouse-clicking.patch | 23 + sdl/sndio.patch | 400 + sdl2/PKGBUILD | 51 + sdl2_gfx/PKGBUILD | 25 + sdl2_image/PKGBUILD | 30 + sdl2_mixer/PKGBUILD | 51 + sdl2_net/PKGBUILD | 27 + sdl2_ttf/PKGBUILD | 34 + sdl_envvars/PKGBUILD | 22 + sdl_envvars/legalcode.txt | 121 + sdl_envvars/sdl.conf.profile | 5 + sdl_envvars/sdl.sh.profile | 43 + sdl_gfx/PKGBUILD | 44 + sdl_image/PKGBUILD | 44 + sdl_mixer/PKGBUILD | 61 + sdl_mixer/double-free-crash.patch | 32 + sdl_mixer/fluidsynth-volume.patch | 23 + sdl_mixer/mikmod1.patch | 67 + sdl_mixer/mikmod2.patch | 35 + sdl_net/PKGBUILD | 44 + sdl_pango/PKGBUILD | 43 + sdl_sound/PKGBUILD | 49 + sdl_ttf/PKGBUILD | 47 + seabios/PKGBUILD | 78 + seabios/config.coreboot | 2 + seabios/config.csm | 2 + seabios/config.seabios-128k | 14 + seabios/config.seabios-256k | 3 + seabios/config.vga.bochs-display | 3 + seabios/config.vga.cirrus | 3 + seabios/config.vga.isavga | 3 + seabios/config.vga.qxl | 6 + seabios/config.vga.ramfb | 3 + seabios/config.vga.stdvga | 3 + seabios/config.vga.virtio | 6 + seabios/reproducible-version.patch | 15 + searchmonkey/PKGBUILD | 43 + serd/PKGBUILD | 71 + setconf/PKGBUILD | 26 + sfml/PKGBUILD | 54 + sfsexp/PKGBUILD | 29 + sgml-common/PKGBUILD | 33 + sgml-common/sgml-common-0.6.3-manpage-1.patch | 14 + sgml-common/sgml-common.install | 48 + sh-roundup/PKGBUILD | 34 + sh-roundup/makefile-fix.patch | 11 + shared-mime-info/PKGBUILD | 42 + shared-mime-info/shared-mime-info.install | 7 + shared-mime-info/update-mime-database.hook | 11 + sharutils/PKGBUILD | 50 + shiboken/PKGBUILD | 117 + shiboken2/PKGBUILD | 71 + shntool/PKGBUILD | 65 + shntool/libre.patch | 128 + shtool/PKGBUILD | 43 + shush/PKGBUILD | 44 + signify/PKGBUILD | 60 + simgear/PKGBUILD | 56 + simple-mtpfs/PKGBUILD | 26 + simpleburn/PKGBUILD | 28 + simpleini/PKGBUILD | 44 + sip/PKGBUILD | 30 + sjasmplus/PKGBUILD | 24 + skippy-xd/PKGBUILD | 24 + sl/PKGBUILD | 25 + slang/PKGBUILD | 47 + slim-theme-hyperbola/PKGBUILD | 28 + .../slim-theme-hyperbola.install | 12 + slim/PKGBUILD | 89 + slim/slim-1.3.6-add-sessiondir.patch | 28 + slim/slim-1.3.6-fix-libslim-libraries.patch | 20 + ...im-1.3.6-remove-systemd-service-file.patch | 22 + slim/slim.initd | 19 + slim/slim.logrotate | 9 + slim/slim.run | 2 + slock/PKGBUILD | 32 + slock/backspace.patch | 11 + slop/PKGBUILD | 35 + slop/bugfix-add-missed-header.patch | 22 + slrn/PKGBUILD | 55 + smartmontools/PKGBUILD | 74 + smartmontools/smartd.confd | 4 + smartmontools/smartd.initd | 28 + smpeg/PKGBUILD | 46 + smplayer-legacy/PKGBUILD | 73 + smplayer-legacy/libre.patch | 855 + smplayer-legacy/remove-update-check.patch | 64 + smplayer-skins/PKGBUILD | 28 + smplayer-themes/PKGBUILD | 30 + smu/PKGBUILD | 25 + snappy/PKGBUILD | 64 + snappy/snappy.pc | 10 + snarf/PKGBUILD | 34 + sndio/PKGBUILD | 90 + sndio/sndio.conf.profile | 1 + sndio/sndio.install | 63 + sndio/sndio.sh.profile | 12 + sndio/sndiod.conf | 2 + sndio/sndiod.confd | 7 + sndio/sndiod.initd | 20 + sndio/sndiod.run | 3 + sndio/sndiod_log.run | 2 + snownews/PKGBUILD | 25 + socat/PKGBUILD | 26 + sord/PKGBUILD | 71 + soundbraid/LICENSE | 339 + soundbraid/PKGBUILD | 21 + soundconverter/PKGBUILD | 25 + soundfont-fluid/PKGBUILD | 18 + soundtouch/PKGBUILD | 34 + spacefm/PKGBUILD | 83 + spacefm/sysmacros.patch | 11 + spandsp/PKGBUILD | 50 + spawn-fcgi/PKGBUILD | 45 + spdlog/PKGBUILD | 37 + speech-dispatcher/PKGBUILD | 101 + speedcrunch/PKGBUILD | 46 + speex/PKGBUILD | 38 + speex/sndio.patch | 82 + speexdsp/PKGBUILD | 29 + spice-gtk/PKGBUILD | 43 + spice-protocol/PKGBUILD | 25 + spice/PKGBUILD | 43 + spirv-headers/PKGBUILD | 24 + spirv-tools/PKGBUILD | 39 + sqlitebrowser/PKGBUILD | 53 + sqlitebrowser/libre.patch | 1377 ++ squashfs-tools/PKGBUILD | 34 + squid/PKGBUILD | 116 + squid/squid.confd | 12 + squid/squid.initd | 118 + squid/squid.install | 22 + squid/squid.logrotate | 11 + squid/squid.run | 4 + sratom/PKGBUILD | 71 + sscg/PKGBUILD | 34 + sshfs/PKGBUILD | 36 + st/PKGBUILD | 66 + st/terminfo.patch | 10 + stalonetray/PKGBUILD | 46 + startup-notification/PKGBUILD | 34 + steghide/PKGBUILD | 53 + stegseek/PKGBUILD | 33 + stegseek/fix-build-i686.patch | 11 + stella/PKGBUILD | 48 + stk/PKGBUILD | 48 + strace/PKGBUILD | 49 + strip-nondeterminism/PKGBUILD | 39 + subtitleeditor/PKGBUILD | 53 + subtitleripper/PKGBUILD | 37 + suil/PKGBUILD | 62 + suitesparse/PKGBUILD | 66 + suitesparse/suitesparse-no-demo.patch | 11 + supertux-legacy/PKGBUILD | 52 + supertuxkart/PKGBUILD | 98 + supertuxkart/libre.patch | 1170 + surf/PKGBUILD | 35 + surf/config.h | 192 + surfraw/PKGBUILD | 54 + surfraw/surfraw.install | 8 + svkbd/PKGBUILD | 30 + swaks/PKGBUILD | 41 + swig/PKGBUILD | 49 + swig/remove-csharp-and-java-support.patch | 948 + sx/PKGBUILD | 19 + sx/sx.install | 9 + sxhkd/PKGBUILD | 25 + sylpheed/PKGBUILD | 57 + syntax-highlighting/PKGBUILD | 29 + sysklogd/PKGBUILD | 60 + sysklogd/sysklogd.conf | 1 + sysklogd/sysklogd.confd | 3 + sysklogd/sysklogd.initd | 20 + sysklogd/sysklogd.logrotate | 8 + sysklogd/sysklogd.run | 4 + tabbed/PKGBUILD | 30 + tabble/PKGBUILD | 25 + taglib/PKGBUILD | 49 + tagtool/PKGBUILD | 25 + tagutil/PKGBUILD | 29 + talloc/LICENSE | 507 + talloc/PKGBUILD | 35 + ...t-allow-leading-zero-for-number-type.patch | 66 + task/0012-Backport-parser-issues-fixes.patch | 130 + task/PKGBUILD | 81 + tauthon-enum34/PKGBUILD | 24 + tauthon-funcsigs/PKGBUILD | 37 + tauthon-greenlet/PKGBUILD | 24 + tauthon-ipaddress/PKGBUILD | 18 + tauthon-markdown/PKGBUILD | 24 + tauthon-numpy/PKGBUILD | 59 + tauthon-pycairo/PKGBUILD | 44 + tauthon-pygobject2/PKGBUILD | 35 + tauthon-pygtk/PKGBUILD | 52 + tauthon-pygtk/drop-pangofont.patch | 41 + .../fix-leaks-of-pango-objects.patch | 59 + tauthon-pygtk/python27.patch | 50 + tauthon-setuptools-scm/PKGBUILD | 25 + tauthon-soupsieve/PKGBUILD | 25 + tauthon-toml/PKGBUILD | 36 + ...uthon-toml-0.10.1-install_type_hints.patch | 11 + tauthon-typing/PKGBUILD | 24 + tauthon-wxpython3/PKGBUILD | 61 + tauthon-wxpython3/fix-editra-removal.patch | 156 + tauthon-wxpython3/fix-plot.patch | 131 + tauthon/PKGBUILD | 106 + tbb/PKGBUILD | 52 + tbsm/PKGBUILD | 18 + tcc/PKGBUILD | 52 + tcl/PKGBUILD | 78 + tcllib/PKGBUILD | 60 + tcllib/libre.patch | 58 + tcp-wrappers/PKGBUILD | 75 + tcp-wrappers/hosts.allow | 5 + tcp-wrappers/hosts.deny | 8 + .../tcp-wrappers-redhat-bug11881.patch | 36 + tcpdump/PKGBUILD | 46 + tdb/LICENSE | 529 + tdb/PKGBUILD | 50 + tecnoballz/PKGBUILD | 51 + ted/PKGBUILD | 103 + teeworlds/PKGBUILD | 67 + teeworlds/teeworlds.desktop | 10 + terminus-font/PKGBUILD | 55 + tesseract-data/PKGBUILD | 42 + tesseract/PKGBUILD | 62 + tesseract/tesseract.install | 8 + testdisk/PKGBUILD | 48 + tevent/LICENSE | 519 + tevent/PKGBUILD | 52 + texi2html/PKGBUILD | 26 + tftp-hpa/PKGBUILD | 57 + tftp-hpa/fix-common.patch | 24 + .../tftp-hpa-0.49-fortify-strcpy-crash.patch | 26 + tftp-hpa/tftpd.confd | 15 + tftp-hpa/tftpd.initd | 21 + tftp-hpa/tftpd.run | 3 + the_silver_searcher/PKGBUILD | 27 + tidy/PKGBUILD | 53 + tig/PKGBUILD | 31 + tilda/PKGBUILD | 30 + tilda/tilda.changelog | 82 + timew/PKGBUILD | 54 + timew/timew.install | 7 + timidity++/PKGBUILD | 94 + timidity++/timidity-jack.patch | 11 + timidity++/timidity-sndio.patch | 255 + timidity++/timidity-tk86.patch | 39 + timidity++/timidity.cfg | 29 + timidity++/timidity.confd | 31 + timidity++/timidity.initd | 22 + timidity++/timidity.install | 27 + tinc/PKGBUILD | 70 + tinc/tincd.confd | 20 + tinc/tincd.initd | 78 + tinc/tincd.run | 2 + tint2/PKGBUILD | 33 + tint2/libre.patch | 479 + tint3-cpp/PKGBUILD | 35 + tinycdb/PKGBUILD | 31 + tinydns/PKGBUILD | 39 + tinydns/tinydns.initd | 11 + tinydns/tinydns.run | 2 + tinyproxy/PKGBUILD | 62 + tinyproxy/tinyproxy.initd | 40 + tinyproxy/tinyproxy.run | 4 + tinyxml/PKGBUILD | 73 + tinyxml/entity.patch | 64 + tinyxml/tinyxml-2.5.3-stl.patch | 12 + tinyxml/tinyxml.pc | 11 + tinyxml2/PKGBUILD | 50 + tk/PKGBUILD | 64 + tkdiff/PKGBUILD | 24 + tkdiff/tkdiff.desktop | 10 + tkdiff/tkdiff.png | Bin 0 -> 8583 bytes tkdvd/PKGBUILD | 38 + tkdvd/tkdvd.desktop | 10 + tkdvd/tkdvd.sh | 4 + tkimg/PKGBUILD | 36 + tklib/PKGBUILD | 43 + tkpacman/PKGBUILD | 26 + tkpacman/correct-license-path.patch | 11 + tkrev/PKGBUILD | 35 + tkrev/tkrev.desktop | 11 + tkrev/tkrev.xpm | 46 + tmux/PKGBUILD | 49 + tofrodos/PKGBUILD | 25 + tokyocabinet/PKGBUILD | 46 + tolua++/PKGBUILD | 35 + tomatoes/PKGBUILD | 68 + tomatoes/makefile-compile-flags.patch | 31 + tomatoes/tomatoes.desktop | 12 + toppler/PKGBUILD | 42 + toppler/toppler.desktop | 8 + tor-hardened-preferences/PKGBUILD | 29 + .../tor-hardened-preferences.install | 86 + tor-hardened-preferences/tor-hardened.initd | 108 + tor-hardened-preferences/tor-hardened.run | 2 + tor-hardened-preferences/tor-hardened.sh | 23 + tor-hardened-preferences/torchroot.sh | 38 + tor-hardened-preferences/torrc | 49 + tor/0001.patch | 13 + tor/PKGBUILD | 69 + tor/tor.conf | 11 + tor/tor.confd | 3 + tor/tor.initd | 36 + tor/tor.install | 25 + tor/tor.run | 6 + tor/torrc | 194 + torcs/PKGBUILD | 72 + torsocks/PKGBUILD | 59 + totem-pl-parser/PKGBUILD | 42 + toxcore/PKGBUILD | 58 + toxcore/tox-bootstrapd.conf | 2 + toxcore/tox-bootstrapd.confd | 2 + toxcore/tox-bootstrapd.initd | 30 + toxcore/tox-bootstrapd.run | 4 + toxcore/toxcore.install | 28 + toxic/PKGBUILD | 42 + toxic/libre.patch | 31 + toxic/toxic.png | Bin 0 -> 2595 bytes trackballs/PKGBUILD | 42 + trackballs/find_guile.patch | 95 + trackballs/trackballs.desktop | 9 + transcode/PKGBUILD | 105 + transcode/transcode-ffmpeg3.patch | 1241 + transcode/transcode-ffmpeg4.patch | 494 + transcode/transcode-sndio.patch | 448 + transcode/transcode-swresample.patch | 20 + transmission/PKGBUILD | 90 + transmission/fix-icons.patch | 11 + transmission/transmission-cli.install | 26 + transmission/transmission-daemon.confd | 15 + transmission/transmission-daemon.initd | 49 + transmission/transmission-daemon.run | 2 + transset-df/LICENSE | 23 + transset-df/PKGBUILD | 25 + tre/PKGBUILD | 57 + tree/PKGBUILD | 45 + treesheets/PKGBUILD | 51 + treesheets/treesheets.desktop | 13 + trigger-rally/PKGBUILD | 32 + trigger-rally/trigger-rally.desktop | 10 + trigger-rally/trigger-rally.install | 3 + trigger-rally/trigger-rally.png | Bin 0 -> 6137 bytes trisquel-gtk-theme/LICENSE | 674 + trisquel-gtk-theme/PKGBUILD | 22 + trisquel-icewm-theme/PKGBUILD | 20 + tslib/PKGBUILD | 26 + ttaenc/PKGBUILD | 25 + ttf-dejavu/PKGBUILD | 31 + ttf-liberation/PKGBUILD | 28 + twolame/PKGBUILD | 45 + txt2man/PKGBUILD | 38 + txt2tags/PKGBUILD | 42 + uchardet/PKGBUILD | 29 + ucl/PKGBUILD | 44 + udns/PKGBUILD | 41 + udpcast/PKGBUILD | 43 + ufoai/PKGBUILD | 86 + ufoai/fix-build.patch | 23 + uget/PKGBUILD | 49 + uget/uget-gtk.appdata.xml | 36 + ulogd/PKGBUILD | 52 + ulogd/ulogd.conf | 20 + ulogd/ulogd.initd | 41 + ulogd/ulogd.install | 26 + ulogd/ulogd.logrotate | 10 + ulogd/ulogd.run | 2 + ultimatestunts/PKGBUILD | 55 + ...testunts-metaserver-cpp-add-includes.patch | 13 + ultimatestunts/ultimatestunts.desktop | 9 + ultimatestunts/ultimatestunts.png | Bin 0 -> 4018 bytes unar/PKGBUILD | 50 + unar/native_obj_exceptions.patch | 12 + unbound/CVE-2024-43167.patch | 42 + unbound/PKGBUILD | 73 + unbound/hook | 10 + unbound/unbound.conf | 5 + unbound/unbound.confd | 4 + unbound/unbound.initd | 53 + unbound/unbound.install | 11 + unbound/unbound.run | 2 + unibilium/PKGBUILD | 23 + unicon/PKGBUILD | 25 + unifont/PKGBUILD | 107 + unison/PKGBUILD | 56 + unison/unison-large.patch | 49 + unison/unison.desktop | 11 + unittest-cpp/PKGBUILD | 35 + unixodbc/PKGBUILD | 53 + unrealircd/PKGBUILD | 72 + unrealircd/unrealircd.initd | 16 + unrealircd/unrealircd.install | 28 + unrealircd/unrealircd.run | 3 + unrtf/PKGBUILD | 28 + unshield/PKGBUILD | 28 + unzip/PKGBUILD | 98 + unzip/crc32.patch | 45 + unzip/csiz-underflow.patch | 32 + unzip/cve20149636.patch | 25 + unzip/empty-input.patch | 26 + unzip/getZip64Data.patch | 133 + unzip/nextbyte-overflow.patch | 33 + unzip/overflow-fsize.patch | 34 + unzip/test_compr_eb.patch | 23 + upx/PKGBUILD | 48 + usb_modeswitch/PKGBUILD | 58 + usbredir/PKGBUILD | 26 + utf8cpp/PKGBUILD | 26 + uthash/PKGBUILD | 46 + uudeview/PKGBUILD | 64 + uuid/PKGBUILD | 32 + uuid/ossp.patch | 207 + uwsgi/PKGBUILD | 166 + uwsgi/emperor.ini | 4 + uwsgi/hyperbola.ini | 5 + uwsgi/uwsgi.confd | 68 + uwsgi/uwsgi.initd | 145 + uwsgi/uwsgi.logrotate | 9 + uwsgi/uwsgi_fix_build.patch | 28 + uwsgi/uwsgi_ruby20_compatibility.patch | 42 + uwsgi/uwsgi_trick_chroot.patch | 16 + v4l-utils/PKGBUILD | 57 + vala/PKGBUILD | 36 + valgrind/PKGBUILD | 74 + vamp-plugin-sdk/PKGBUILD | 53 + vamps/PKGBUILD | 27 + vc/PKGBUILD | 46 + vcdimager/PKGBUILD | 46 + vde2/PKGBUILD | 81 + vde2/dhcpd.conf.sample | 12 + vde2/vde-config.sample | 35 + vde2/vde-connection.sample | 6 + vde2/vde2.install | 19 + ...yptcab-compile-against-openssl-1.1.0.patch | 94 + vde2/vde_switch.confd | 15 + vde2/vde_switch.initd | 44 + vegastrike-engine/PKGBUILD | 40 + vegastrike/PKGBUILD | 41 + vegastrike/vs | 28 + vegastrike/vsettings | 17 + vid.stab/PKGBUILD | 39 + viewnior/PKGBUILD | 37 + vim/PKGBUILD | 193 + vim/fix-build.patch | 137 + vim/hyperbola.vim | 26 + vim/vimdoc.hook | 11 + vim/vimrc | 18 + virglrenderer/PKGBUILD | 30 + vis/PKGBUILD | 28 + vlc-legacy/PKGBUILD | 235 + vlc-legacy/remove-internet-playlist.patch | 423 + vlc-legacy/remove-services.patch | 184 + vlc-legacy/update-vlc-plugin-cache.hook | 11 + vlc-legacy/vlc.desktop | 230 + vnstat/PKGBUILD | 68 + vnstat/vnstat.install | 34 + vnstat/vnstatd.confd | 7 + vnstat/vnstatd.initd | 38 + vnstat/vnstatd.run | 2 + volumeicon/PKGBUILD | 48 + volumeicon/volumeicon.desktop | 9 + volumeicon/volumeicon.install | 7 + vorbis-tools/PKGBUILD | 50 + vorbisgain/PKGBUILD | 50 + vsftpd/PKGBUILD | 69 + vsftpd/vsftpd-checkconfig.sh | 29 + vsftpd/vsftpd.initd | 50 + vsftpd/vsftpd.run | 2 + vte-legacy/PKGBUILD | 49 + vte-legacy/bracketed_paste_mode_fix.patch | 83 + vte-legacy/make_alt_work.patch | 50 + vte-legacy/scroll_region.patch | 67 + vte/PKGBUILD | 74 + vulscan/PKGBUILD | 20 + vym/PKGBUILD | 63 + waf/PKGBUILD | 58 + warmux/PKGBUILD | 76 + warmux/libre.patch | 151 + warzone2100-legacy/PKGBUILD | 52 + warzone2100-legacy/fix-build.patch | 87 + wavegain/PKGBUILD | 25 + wavpack/PKGBUILD | 24 + wbar/PKGBUILD | 57 + webkitgtk/PKGBUILD | 88 + webkitgtk/remove-libwebp-support.patch | 81 + weechat/PKGBUILD | 55 + weechat/fix-languages-cmake.patch | 35 + wget/CVE-2024-38428.patch | 75 + wget/PKGBUILD | 62 + whois/PKGBUILD | 36 + whois/gettext-tiny.patch | 12 + wildmidi/PKGBUILD | 48 + wireguard-tools/PKGBUILD | 67 + wireguard-tools/wg-quick.confd | 7 + wireguard-tools/wg-quick.initd | 24 + wireguard-tools/wg-quick.run | 9 + wireshark/PKGBUILD | 103 + wireshark/wireshark.install | 24 + wizznic/PKGBUILD | 55 + wizznic/wizznic.png | Bin 0 -> 4860 bytes wmctrl/PKGBUILD | 44 + worker/PKGBUILD | 47 + wpa_supplicant_gui/PKGBUILD | 36 + wpa_supplicant_gui/wpa_supplicant_gui.install | 3 + wv/PKGBUILD | 51 + wvdial/PKGBUILD | 43 + wvstreams/PKGBUILD | 79 + wvstreams/gcc-6.patch | 42 + wvstreams/libressl.patch | 46 + wvstreams/openssl-buildfix.patch | 14 + wvstreams/wvstreams-4.6.1-gcc47.patch | 50 + wvstreams/wvstreams-4.6.1-glibc212.patch | 24 + wxgtk/PKGBUILD | 86 + wxsvg/PKGBUILD | 34 + wyrmsun-legacy/PKGBUILD | 69 + x11-ssh-askpass/PKGBUILD | 51 + x11-ssh-askpass/x11-ssh-askpass.install | 5 + x11vnc/PKGBUILD | 57 + x11vnc/patch-src_sslhelper.patch | 85 + x264/PKGBUILD | 51 + xa/PKGBUILD | 27 + xapian-core/PKGBUILD | 36 + xarchiver/PKGBUILD | 89 + xarchiver/libre.patch | 81 + xarchiver/xarchiver.appdata.xml | 19 + xautolock/PKGBUILD | 46 + xbanish/PKGBUILD | 44 + xbattmon/PKGBUILD | 24 + xbindkeys/PKGBUILD | 48 + xcb-proto/PKGBUILD | 37 + xcb-util-cursor/PKGBUILD | 34 + xcb-util-image/PKGBUILD | 39 + xcb-util-keysyms/COPYING | 267 + xcb-util-keysyms/PKGBUILD | 41 + xcb-util-renderutil/PKGBUILD | 39 + xcb-util-wm/PKGBUILD | 39 + xcb-util-xrm/PKGBUILD | 26 + xcb-util/PKGBUILD | 39 + xcftools/PKGBUILD | 38 + xcftools/fix-build.patch | 11 + xcftools/security.patch | 61 + xcftools/xcftools.patch | 27 + xclip/PKGBUILD | 26 + xcursor-premium/PKGBUILD | 20 + xdg-user-dirs-gtk/PKGBUILD | 26 + xdg-user-dirs/PKGBUILD | 30 + xdg-user-dirs/xdg-user-dirs | 4 + xdg-utils/PKGBUILD | 56 + xdg-utils/libre.patch | 58 + xdialog/PKGBUILD | 36 + xdialog/xdialog-2.3.1-gtk2.patch | 58 + xdo/PKGBUILD | 26 + xdotool/PKGBUILD | 50 + xen/PKGBUILD | 177 + xen/efi-xen.cfg | 7 + xen/xen-watchdog.initd | 15 + xen/xen.conf | 20 + xen/xen.install | 27 + xen/xen.run | 5 + xen/xencommons.initd | 88 + xen/xenconsoled.run | 4 + xen/xendomains.initd | 23 + xen/xendriverdomain.initd | 37 + xen/xenstored.run | 7 + xenocara-appres/PKGBUILD | 39 + xenocara-bdftopcf/PKGBUILD | 43 + ...sd-unveil-and-openbsd-pledge-support.patch | 51 + xenocara-docs/COPYING | 422 + xenocara-docs/PKGBUILD | 42 + xenocara-editres/PKGBUILD | 39 + xenocara-font-alias/PKGBUILD | 41 + .../fontrootdir-workaround.patch | 88 + xenocara-font-bitstream/PKGBUILD | 59 + xenocara-font-encodings/PKGBUILD | 46 + xenocara-font-util/PKGBUILD | 42 + xenocara-fonts-cyrillic-meta/PKGBUILD | 130 + xenocara-fonts-cyrillic-meta/legalcode.txt | 121 + xenocara-fonts-misc-meta/PKGBUILD | 234 + xenocara-fonts-misc-meta/legalcode.txt | 121 + xenocara-fonts-type1-meta/PKGBUILD | 76 + xenocara-fonts-type1-meta/legalcode.txt | 121 + xenocara-iceauth/PKGBUILD | 40 + xenocara-input-acecad-debug/PKGBUILD | 45 + xenocara-input-acecad/PKGBUILD | 39 + xenocara-input-elographics-debug/PKGBUILD | 48 + .../git-fixes.patch | 107 + xenocara-input-elographics/PKGBUILD | 42 + xenocara-input-elographics/git-fixes.patch | 107 + xenocara-input-joystick-debug/PKGBUILD | 46 + xenocara-input-joystick/PKGBUILD | 40 + xenocara-input-keyboard-debug/PKGBUILD | 46 + xenocara-input-keyboard/PKGBUILD | 40 + xenocara-input-mouse-debug/PKGBUILD | 46 + xenocara-input-mouse/PKGBUILD | 40 + xenocara-input-synaptics-debug/PKGBUILD | 47 + .../xenocara-input-synaptics.install | 10 + xenocara-input-synaptics/PKGBUILD | 41 + .../xenocara-input-synaptics.install | 10 + xenocara-input-vmmouse-debug/PKGBUILD | 48 + xenocara-input-vmmouse/PKGBUILD | 42 + xenocara-input-void-debug/PKGBUILD | 46 + xenocara-input-void/PKGBUILD | 40 + xenocara-luit/PKGBUILD | 43 + xenocara-luit/git-fixes.patch | 216 + xenocara-mkfontscale/PKGBUILD | 47 + .../xenocara-mkfontscale.hook | 13 + .../xenocara-mkfontscale.script | 9 + xenocara-oclock/PKGBUILD | 39 + xenocara-proto/PKGBUILD | 54 + xenocara-server-debug/PKGBUILD | 200 + ...orced-bison-yyparse-function-support.patch | 52 + .../remove-forced-mno-sse-support.patch | 31 + ...nbsd-getdtablecount-function-support.patch | 16 + ...ove-forced-openbsd-mmap-flag-support.patch | 22 + xenocara-server-debug/xenocara-server.install | 35 + .../xserver-autobind-hotplug.patch | 293 + xenocara-server-debug/xvfb-run | 200 + xenocara-server/PKGBUILD | 230 + ...orced-bison-yyparse-function-support.patch | 52 + .../remove-forced-mno-sse-support.patch | 31 + ...nbsd-getdtablecount-function-support.patch | 16 + ...ove-forced-openbsd-mmap-flag-support.patch | 22 + xenocara-server/xenocara-server.install | 35 + .../xserver-autobind-hotplug.patch | 293 + xenocara-server/xvfb-run | 200 + xenocara-sessreg/PKGBUILD | 40 + xenocara-setxkbmap/PKGBUILD | 40 + xenocara-smproxy/PKGBUILD | 40 + xenocara-twm/PKGBUILD | 44 + xenocara-twm/add-libbsd-support.patch | 13 + xenocara-util-macros/PKGBUILD | 37 + xenocara-video-ati-debug/PKGBUILD | 59 + .../xenocara-video-ati-debug.install | 33 + xenocara-video-ati/PKGBUILD | 55 + xenocara-video-ati/xenocara-video-ati.install | 33 + xenocara-video-cirrus-debug/PKGBUILD | 57 + xenocara-video-cirrus/PKGBUILD | 53 + xenocara-video-dummy-debug/COPYING | 20 + xenocara-video-dummy-debug/PKGBUILD | 55 + xenocara-video-dummy/COPYING | 20 + xenocara-video-dummy/PKGBUILD | 51 + ...compilation-with-Video-ABI-23-change.patch | 99 + .../0002-Fix-build-on-i686.patch | 47 + xenocara-video-intel-debug/PKGBUILD | 77 + .../include-missing-sys-sysmacros-h.patch | 39 + .../xenocara-video-intel-debug.install | 21 + ...compilation-with-Video-ABI-23-change.patch | 99 + .../0002-Fix-build-on-i686.patch | 47 + xenocara-video-intel/PKGBUILD | 73 + .../include-missing-sys-sysmacros-h.patch | 39 + .../xenocara-video-intel.install | 21 + xenocara-video-openchrome-debug/PKGBUILD | 60 + xenocara-video-openchrome/PKGBUILD | 57 + xenocara-video-vesa-debug/PKGBUILD | 56 + .../revert-kernelcheck.patch | 31 + xenocara-video-vesa/PKGBUILD | 52 + xenocara-video-vesa/revert-kernelcheck.patch | 31 + ...k-WakeupHandler-signature-for-ABI-23.patch | 32 + .../0002-vmware-Fix-build-warnings.patch | 212 + ...Fix-a-number-of-compilation-warnings.patch | 263 + ...uild-compatibility-with-xserver-1.20.patch | 31 + ...-number-of-cliprects-in-a-drm-dirtyf.patch | 91 + xenocara-video-vmware-debug/PKGBUILD | 71 + xenocara-video-vmware-debug/gcc8.patch | 154 + ...k-WakeupHandler-signature-for-ABI-23.patch | 32 + .../0002-vmware-Fix-build-warnings.patch | 212 + ...Fix-a-number-of-compilation-warnings.patch | 263 + ...uild-compatibility-with-xserver-1.20.patch | 31 + ...-number-of-cliprects-in-a-drm-dirtyf.patch | 91 + xenocara-video-vmware/PKGBUILD | 68 + xenocara-video-vmware/gcc8.patch | 154 + xenocara-x11perf/PKGBUILD | 40 + xenocara-xauth/PKGBUILD | 40 + xenocara-xbacklight/PKGBUILD | 40 + xenocara-xbiff/PKGBUILD | 39 + xenocara-xbitmaps/PKGBUILD | 38 + xenocara-xcalc/PKGBUILD | 41 + xenocara-xclipboard/PKGBUILD | 39 + xenocara-xclock/PKGBUILD | 39 + xenocara-xcmsdb/PKGBUILD | 40 + xenocara-xcompmgr/PKGBUILD | 39 + xenocara-xconsole/PKGBUILD | 39 + xenocara-xdpyinfo/PKGBUILD | 40 + xenocara-xdriinfo/PKGBUILD | 40 + xenocara-xedit/PKGBUILD | 39 + xenocara-xev/PKGBUILD | 40 + xenocara-xeyes/PKGBUILD | 39 + xenocara-xfd/PKGBUILD | 39 + xenocara-xfontsel/PKGBUILD | 39 + xenocara-xgamma/PKGBUILD | 40 + xenocara-xhost/PKGBUILD | 43 + .../fix-missing-netdb-include-file.patch | 12 + xenocara-xinit/PKGBUILD | 58 + xenocara-xinit/fix-hostname.patch | 13 + ...-startx-to-xauth-treat-ipv6-properly.patch | 16 + .../move-serverauthfile-into-tmp.patch | 13 + xenocara-xinit/xserverrc | 2 + xenocara-xinput/PKGBUILD | 40 + xenocara-xkbcomp/PKGBUILD | 40 + xenocara-xkbevd/PKGBUILD | 40 + xenocara-xkbutils/PKGBUILD | 40 + xenocara-xkill/PKGBUILD | 40 + xenocara-xload/PKGBUILD | 39 + xenocara-xlogo/PKGBUILD | 39 + xenocara-xlsatoms/PKGBUILD | 40 + xenocara-xlsclients/PKGBUILD | 40 + xenocara-xlsfonts/PKGBUILD | 40 + xenocara-xmag/PKGBUILD | 39 + xenocara-xmessage/PKGBUILD | 39 + xenocara-xmodmap/PKGBUILD | 40 + xenocara-xpr/PKGBUILD | 40 + xenocara-xprop/PKGBUILD | 40 + xenocara-xrandr/PKGBUILD | 41 + xenocara-xrdb/PKGBUILD | 42 + xenocara-xrefresh/PKGBUILD | 40 + xenocara-xset/PKGBUILD | 40 + xenocara-xsetroot/PKGBUILD | 40 + xenocara-xsm/LICENSE | 27 + xenocara-xsm/PKGBUILD | 43 + xenocara-xvidtune/PKGBUILD | 39 + xenocara-xvinfo/PKGBUILD | 40 + xenocara-xwd/PKGBUILD | 40 + xenocara-xwininfo/PKGBUILD | 40 + xenocara-xwud/PKGBUILD | 40 + xfe/PKGBUILD | 53 + xfe/libre.patch | 17 + xfe/opus-support-in-xferc.patch | 12 + xfig/PKGBUILD | 48 + xidle/LICENSE | 53 + xidle/Makefile | 11 + xidle/PKGBUILD | 26 + xine-lib/PKGBUILD | 72 + xine-ui/PKGBUILD | 49 + xkeyboard-config/PKGBUILD | 56 + xkeyboard-config/revert-fullscreen.patch | 24 + xkeycaps/PKGBUILD | 47 + xkeycaps/license.txt | 54 + xmlsec/PKGBUILD | 51 + xmlto/PKGBUILD | 52 + xmms2/PKGBUILD | 97 + xmms2/fix-build.patch | 22 + xmms2/xmms2.install | 25 + xmoto/PKGBUILD | 68 + xmoto/installation-directories.patch | 33 + xorg-imake/LICENSE | 131 + xorg-imake/PKGBUILD | 60 + xorg-imake/gnu+linux-config.patch | 31 + xorg-input-evdev-debug/PKGBUILD | 46 + xorg-input-evdev/PKGBUILD | 40 + xorg-input-wacom-debug/PKGBUILD | 47 + xorg-input-wacom/PKGBUILD | 41 + xorg-video-fbdev-debug/PKGBUILD | 53 + xorg-video-fbdev-debug/gcc8.patch | 11 + xorg-video-fbdev/PKGBUILD | 49 + xorg-video-fbdev/gcc8.patch | 11 + xorg-video-nouveau-debug/COPYING | 39 + xorg-video-nouveau-debug/PKGBUILD | 70 + xorg-video-nouveau/COPYING | 39 + xorg-video-nouveau/PKGBUILD | 66 + xorg-video-sisusb-debug/PKGBUILD | 50 + xorg-video-sisusb/PKGBUILD | 46 + xorg-xcursor-themes/PKGBUILD | 37 + xorg-xcursorgen/PKGBUILD | 34 + xorg-xdm/PKGBUILD | 100 + xorg-xdm/Xresources | 51 + xorg-xdm/Xsession-loginshell.patch | 17 + xorg-xdm/Xsession-xsm.patch | 23 + xorg-xdm/Xsetup_0 | 3 + xorg-xdm/git-fixes.patch | 673 + xorg-xdm/hyperbola.xpm | 317 + xorg-xdm/startDM.sh | 30 + ...xdm-1.0.5-sessreg-utmp-fix-bug177890.patch | 10 + xorg-xdm/xdm-setup.initd | 13 + xorg-xdm/xdm.confd | 10 + xorg-xdm/xdm.initd | 196 + xorg-xdm/xorg-xdm.install | 3 + xorg-xrestop/PKGBUILD | 49 + xosd/PKGBUILD | 46 + xournal/PKGBUILD | 44 + xournalpp/PKGBUILD | 25 + xpad/PKGBUILD | 34 + xpad/fix-build.patch | 11 + xplc/PKGBUILD | 54 + xsane/PKGBUILD | 77 + xsane/xsane.install | 17 + xsel/PKGBUILD | 46 + xsettings-client/PKGBUILD | 24 + xterm/PKGBUILD | 83 + xtrlock/PKGBUILD | 27 + xvidcore/PKGBUILD | 30 + xvkbd/PKGBUILD | 63 + xvkbd/xvkbd.desktop | 8 + xvkbd/xvkbd.png | Bin 0 -> 1568 bytes xwallpaper/PKGBUILD | 32 + xxhash/PKGBUILD | 47 + yad/PKGBUILD | 41 + yajl/PKGBUILD | 47 + yaml-cpp/PKGBUILD | 36 + yara/PKGBUILD | 34 + yash/PKGBUILD | 51 + yash/remove-mofiles.patch | 83 + yash/yash.install | 11 + yasm/PKGBUILD | 45 + yelp-tools/PKGBUILD | 46 + yelp-xsl/PKGBUILD | 26 + yelp/CVE-2025-3155.patch | 101 + yelp/PKGBUILD | 62 + ympd/PKGBUILD | 52 + ympd/fix-compile.patch | 27 + ympd/ympd.conf | 2 + ympd/ympd.confd | 1 + ympd/ympd.initd | 22 + ympd/ympd.install | 25 + ympd/ympd.run | 3 + zathura-cb/PKGBUILD | 28 + zathura-djvu/PKGBUILD | 25 + .../0001-Remove-mupdf-linking-detection.patch | 76 + zathura-pdf-mupdf/0002-Fix-build.patch | 12 + zathura-pdf-mupdf/PKGBUILD | 36 + zathura-pdf-poppler/PKGBUILD | 25 + zathura-ps/PKGBUILD | 25 + zathura/PKGBUILD | 44 + zathura/remove-appstreamglib.patch | 17 + zaz/PKGBUILD | 55 + zbar/PKGBUILD | 53 + zim/PKGBUILD | 27 + zimg/PKGBUILD | 35 + zip/PKGBUILD | 54 + zip/zipnote.patch | 13 + zita-alsa-pcmi/PKGBUILD | 69 + zita-resampler/PKGBUILD | 67 + zmap/PKGBUILD | 53 + znc-clientbuffer/LICENSE | 14 + znc-clientbuffer/PKGBUILD | 28 + zsh/PKGBUILD | 144 + zsh/zprofile | 1 + zsh/zsh-kshcompat.install | 19 + zsh/zsh-shcompat.install | 19 + zsh/zsh.install | 19 + zuki-themes/PKGBUILD | 33 + zukitre-fluxbox-theme/LICENSE | 14 + zukitre-fluxbox-theme/PKGBUILD | 22 + zvbi/PKGBUILD | 52 + zxing-cpp/PKGBUILD | 26 + zzz/PKGBUILD | 23 + 3428 files changed, 302546 insertions(+) create mode 100644 3proxy/3proxy.initd create mode 100644 3proxy/3proxy.install create mode 100644 3proxy/3proxy.run create mode 100644 3proxy/PKGBUILD create mode 100644 3proxy/remove-systemd.patch create mode 100644 6tunnel/PKGBUILD create mode 100644 7kaa/7kaa.desktop create mode 100644 7kaa/7kaa.png create mode 100644 7kaa/7kaa.sh create mode 100644 7kaa/PKGBUILD create mode 100644 7kaa/remove-nonfree-services.patch create mode 100644 a2ps/PKGBUILD create mode 100644 a52dec/PKGBUILD create mode 100644 a52dec/a52dec-0.7.4-build.patch create mode 100644 a52dec/sndio.patch create mode 100644 a52dec/stderr.patch create mode 100644 aalib/PKGBUILD create mode 100644 aalib/aclocal-fixes.patch create mode 100644 abiword/PKGBUILD create mode 100644 abiword/aiksaurus-plugin.m4 create mode 100644 abiword/boost-asio.patch create mode 100644 abiword/command-plugin.m4 create mode 100644 abiword/liberation-fonts.patch create mode 100644 abiword/python-override.patch create mode 100644 abook/PKGBUILD create mode 100644 abook/fix-build.patch create mode 100644 abook/gcc5.patch create mode 100644 acpica/PKGBUILD create mode 100644 aiksaurus/PKGBUILD create mode 100644 allegro/PKGBUILD create mode 100644 allegro/fix-build.patch create mode 100644 alsa-lib/0001-correct-paths-for-configurations.patch create mode 100644 alsa-lib/0002-Enabled-extended-namehints-in-alsa.conf.patch create mode 100644 alsa-lib/PKGBUILD create mode 100644 alsa-lib/alsa.conf.profile create mode 100755 alsa-lib/alsa.sh.profile create mode 100644 alsa-lib/asound.conf create mode 100644 alsa-topology-conf/PKGBUILD create mode 100644 alsa-ucm-conf/PKGBUILD create mode 100644 alsa-utils/PKGBUILD create mode 100644 alsa-utils/alsasound.confd create mode 100644 alsa-utils/alsasound.finish create mode 100644 alsa-utils/alsasound.initd create mode 100644 alsa-utils/alsasound.run create mode 100644 alttab/PKGBUILD create mode 100644 android-file-transfer/PKGBUILD create mode 100644 antimicrox/PKGBUILD create mode 100644 antiword/PKGBUILD create mode 100644 aqbanking/PKGBUILD create mode 100644 arandr/PKGBUILD create mode 100644 arc-icon-theme/PKGBUILD create mode 100644 aria2/PKGBUILD create mode 100644 armagetronad/PKGBUILD create mode 100644 asc/PKGBUILD create mode 100644 asciidoc/PKGBUILD create mode 100644 asciidoctor/PKGBUILD create mode 100644 asciiquarium/PKGBUILD create mode 100644 aspell-i18n-dict-af/PKGBUILD create mode 100644 aspell-i18n-dict-am/PKGBUILD create mode 100644 aspell-i18n-dict-ar/PKGBUILD create mode 100644 aspell-i18n-dict-ast/PKGBUILD create mode 100644 aspell-i18n-dict-az/PKGBUILD create mode 100644 aspell-i18n-dict-be/PKGBUILD create mode 100644 aspell-i18n-dict-bg/PKGBUILD create mode 100644 aspell-i18n-dict-bn/PKGBUILD create mode 100644 aspell-i18n-dict-br/PKGBUILD create mode 100644 aspell-i18n-dict-ca/PKGBUILD create mode 100644 aspell-i18n-dict-cs/PKGBUILD create mode 100644 aspell-i18n-dict-csb/PKGBUILD create mode 100644 aspell-i18n-dict-cy/PKGBUILD create mode 100644 aspell-i18n-dict-da/PKGBUILD create mode 100644 aspell-i18n-dict-de-alt/PKGBUILD create mode 100644 aspell-i18n-dict-de/PKGBUILD create mode 100644 aspell-i18n-dict-el/PKGBUILD create mode 100644 aspell-i18n-dict-en/PKGBUILD create mode 100644 aspell-i18n-dict-eo/PKGBUILD create mode 100644 aspell-i18n-dict-es/PKGBUILD create mode 100644 aspell-i18n-dict-et/PKGBUILD create mode 100644 aspell-i18n-dict-fa/PKGBUILD create mode 100644 aspell-i18n-dict-fi/PKGBUILD create mode 100644 aspell-i18n-dict-fo/PKGBUILD create mode 100644 aspell-i18n-dict-fr/PKGBUILD create mode 100644 aspell-i18n-dict-fy/PKGBUILD create mode 100644 aspell-i18n-dict-ga/PKGBUILD create mode 100644 aspell-i18n-dict-gd/PKGBUILD create mode 100644 aspell-i18n-dict-gl/PKGBUILD create mode 100644 aspell-i18n-dict-grc/PKGBUILD create mode 100644 aspell-i18n-dict-gu/PKGBUILD create mode 100644 aspell-i18n-dict-gv/PKGBUILD create mode 100644 aspell-i18n-dict-he/PKGBUILD create mode 100644 aspell-i18n-dict-hi/PKGBUILD create mode 100644 aspell-i18n-dict-hil/PKGBUILD create mode 100644 aspell-i18n-dict-hr/PKGBUILD create mode 100644 aspell-i18n-dict-hsb/PKGBUILD create mode 100644 aspell-i18n-dict-hu/PKGBUILD create mode 100644 aspell-i18n-dict-hus/PKGBUILD create mode 100644 aspell-i18n-dict-hy/PKGBUILD create mode 100644 aspell-i18n-dict-ia/PKGBUILD create mode 100644 aspell-i18n-dict-id/PKGBUILD create mode 100644 aspell-i18n-dict-is/PKGBUILD create mode 100644 aspell-i18n-dict-it/PKGBUILD create mode 100644 aspell-i18n-dict-kn/PKGBUILD create mode 100644 aspell-i18n-dict-ku/PKGBUILD create mode 100644 aspell-i18n-dict-ky/PKGBUILD create mode 100644 aspell-i18n-dict-la/PKGBUILD create mode 100644 aspell-i18n-dict-lt/PKGBUILD create mode 100644 aspell-i18n-dict-lv/PKGBUILD create mode 100644 aspell-i18n-dict-mg/PKGBUILD create mode 100644 aspell-i18n-dict-mi/PKGBUILD create mode 100644 aspell-i18n-dict-mk/PKGBUILD create mode 100644 aspell-i18n-dict-ml/PKGBUILD create mode 100644 aspell-i18n-dict-mn/PKGBUILD create mode 100644 aspell-i18n-dict-mr/PKGBUILD create mode 100644 aspell-i18n-dict-ms/PKGBUILD create mode 100644 aspell-i18n-dict-mt/PKGBUILD create mode 100644 aspell-i18n-dict-nb/PKGBUILD create mode 100644 aspell-i18n-dict-nds/PKGBUILD create mode 100644 aspell-i18n-dict-nl/PKGBUILD create mode 100644 aspell-i18n-dict-nn/PKGBUILD create mode 100644 aspell-i18n-dict-ny/PKGBUILD create mode 100644 aspell-i18n-dict-or/PKGBUILD create mode 100644 aspell-i18n-dict-pa/PKGBUILD create mode 100644 aspell-i18n-dict-pl/PKGBUILD create mode 100644 aspell-i18n-dict-pt-br/PKGBUILD create mode 100644 aspell-i18n-dict-pt-pt/PKGBUILD create mode 100644 aspell-i18n-dict-pt/PKGBUILD create mode 100644 aspell-i18n-dict-qu/PKGBUILD create mode 100644 aspell-i18n-dict-ro/PKGBUILD create mode 100644 aspell-i18n-dict-ru/PKGBUILD create mode 100644 aspell-i18n-dict-rw/PKGBUILD create mode 100644 aspell-i18n-dict-sc/PKGBUILD create mode 100644 aspell-i18n-dict-sk/PKGBUILD create mode 100644 aspell-i18n-dict-sl/PKGBUILD create mode 100644 aspell-i18n-dict-sr/PKGBUILD create mode 100644 aspell-i18n-dict-sv/PKGBUILD create mode 100644 aspell-i18n-dict-sw/PKGBUILD create mode 100644 aspell-i18n-dict-ta/PKGBUILD create mode 100644 aspell-i18n-dict-te/PKGBUILD create mode 100644 aspell-i18n-dict-tet/PKGBUILD create mode 100644 aspell-i18n-dict-tk/PKGBUILD create mode 100644 aspell-i18n-dict-tl/PKGBUILD create mode 100644 aspell-i18n-dict-tn/PKGBUILD create mode 100644 aspell-i18n-dict-tr/PKGBUILD create mode 100644 aspell-i18n-dict-uk/PKGBUILD create mode 100644 aspell-i18n-dict-uz/PKGBUILD create mode 100644 aspell-i18n-dict-vi/PKGBUILD create mode 100644 aspell-i18n-dict-wa/PKGBUILD create mode 100644 aspell-i18n-dict-yi/PKGBUILD create mode 100644 aspell-i18n-dict-zu/PKGBUILD create mode 100644 aspell/PKGBUILD create mode 100644 assimp/PKGBUILD create mode 100644 atk/PKGBUILD create mode 100644 atkmm/PKGBUILD create mode 100644 aucatctl/PKGBUILD create mode 100644 audacious-legacy/PKGBUILD create mode 100644 audacious-plugins-legacy/PKGBUILD create mode 100644 audacity-legacy/PKGBUILD create mode 100644 audacity-legacy/disable-update-check.patch create mode 100644 audiofile/PKGBUILD create mode 100644 autoconf-archive/PKGBUILD create mode 100644 autoconf-legacy/PKGBUILD create mode 100644 autogen/PKGBUILD create mode 100644 autojump/PKGBUILD create mode 100644 autojump/autojump.install create mode 100644 automake-1.11/PKGBUILD create mode 100644 automake-1.11/automake.install create mode 100644 automake-1.11/perl2.6.patch create mode 100644 automake-1.14/PKGBUILD create mode 100644 automake-1.15/PKGBUILD create mode 100644 awesome-terminal-fonts/PKGBUILD create mode 100644 awesome/PKGBUILD create mode 100644 awesome/fix-build.patch create mode 100644 babl/PKGBUILD create mode 100644 badwolf/PKGBUILD create mode 100644 bam/PKGBUILD create mode 100644 bash-completion/PKGBUILD create mode 100644 bc/PKGBUILD create mode 100644 bchunk/PKGBUILD create mode 100644 bemenu/PKGBUILD create mode 100644 bemenu/remove-wayland.patch create mode 100644 bigloo/PKGBUILD create mode 100644 bigloo/lgpl-2.0.txt create mode 100644 bin2iso/LICENSE create mode 100644 bin2iso/PKGBUILD create mode 100644 bind/127.0.0.zone create mode 100644 bind/PKGBUILD create mode 100644 bind/bind.install create mode 100644 bind/empty.zone create mode 100644 bind/localhost.ip6.zone create mode 100644 bind/localhost.zone create mode 100644 bind/named.conf create mode 100644 bind/named.initd create mode 100644 bind/named.run create mode 100644 blackbox-themes/PKGBUILD create mode 100644 blackbox/PKGBUILD create mode 100644 blackbox/menu.patch create mode 100644 blasphemer/PKGBUILD create mode 100644 blasphemer/blasphemer create mode 100644 blasphemer/blasphemer.desktop create mode 100644 blasphemer/blasphemer.png create mode 100644 blobby-volley/PKGBUILD create mode 100644 blobby-volley/blobby-volley.desktop create mode 100644 blobby-volley/blobby-volley.png create mode 100644 blockrage/PKGBUILD create mode 100644 blockrage/blockrage.desktop create mode 100644 blockrage/blockrage.png create mode 100644 blockrage/fix-build.patch create mode 100644 bmake/PKGBUILD create mode 100644 bmkdep/PKGBUILD create mode 100644 bmpanel/PKGBUILD create mode 100644 bogofilter/PKGBUILD create mode 100644 boost/PKGBUILD create mode 100644 box2d/PKGBUILD create mode 100644 braa/PKGBUILD create mode 100644 breezy/PKGBUILD create mode 100644 brltty/PKGBUILD create mode 100644 brltty/brltty.initd create mode 100644 brltty/brltty.install create mode 100644 brltty/brltty.run create mode 100644 brltty/fix-build.patch create mode 100644 bsdmainutils/PKGBUILD create mode 100644 bspwm/PKGBUILD create mode 100644 bspwm/libre.patch create mode 100644 bzflag/PKGBUILD create mode 100644 bzr/PKGBUILD create mode 100644 bzr/bzr-lazy-regex.patch create mode 100644 c-ares/PKGBUILD create mode 100644 cabextract/PKGBUILD create mode 100644 cadaver/PKGBUILD create mode 100644 cadaver/disable-sslv2.patch create mode 100644 cairo-perl/PKGBUILD create mode 100644 cairo/0001-image-compositor-Remove-the-right-glyph-from-pixman-.patch create mode 100644 cairo/PKGBUILD create mode 100644 cairomm/PKGBUILD create mode 100644 calcurse/PKGBUILD create mode 100644 camlp5/PKGBUILD create mode 100644 cantarell-fonts/PKGBUILD create mode 100644 capnproto/PKGBUILD create mode 100644 capstone/PKGBUILD create mode 100644 catcodec/PKGBUILD create mode 100644 catdoc/PKGBUILD create mode 100644 cbatticon/PKGBUILD create mode 100644 cbatticon/cbatticon.desktop create mode 100644 ccache-legacy/PKGBUILD create mode 100644 ccextractor-legacy/PKGBUILD create mode 100644 ccze/PKGBUILD create mode 100644 cdparanoia/PKGBUILD create mode 100644 cdparanoia/gcc.patch create mode 100644 cdrdao/PKGBUILD create mode 100644 celestia-legacy/PKGBUILD create mode 100644 celestia-legacy/fix-desktop.patch create mode 100644 celt/PKGBUILD create mode 100644 celt/sndio.patch create mode 100644 certbot-nginx/PKGBUILD create mode 100644 certbot/PKGBUILD create mode 100644 cgit/PKGBUILD create mode 100644 cgit/cgit.install create mode 100644 check/PKGBUILD create mode 100644 chmlib/PKGBUILD create mode 100644 chocolate-doom/PKGBUILD create mode 100644 chocolate-doom/chocolate-doom.install create mode 100755 chocolate-doom/chocolate-heretic create mode 100644 chromium-bsu/PKGBUILD create mode 100644 chromium-bsu/use_fabs_for_floats.patch create mode 100644 chrony/PKGBUILD create mode 100644 chrony/chrony.install create mode 100644 chrony/chronyd.confd create mode 100644 chrony/chronyd.initd create mode 100644 chrony/chronyd.run create mode 100644 chroot-nspawn/PKGBUILD create mode 100644 chrpath/PKGBUILD create mode 100644 cifs-utils/PKGBUILD create mode 100644 clang/PKGBUILD create mode 100644 clang/enable-SSP-and-PIE-by-default.patch create mode 100644 claws-mail-gtk2/PKGBUILD create mode 100644 claws-mail-gtk2/bash_completion create mode 100644 claws-mail-gtk2/rework-defs.patch create mode 100644 claws-mail-gtk2/uintptr_t.patch create mode 100644 claws-mail/PKGBUILD create mode 100644 claws-mail/bash_completion create mode 100644 claws-mail/rework-defs.patch create mode 100644 clazy/PKGBUILD create mode 100644 clazy/fix-build.patch create mode 100644 clifm/PKGBUILD create mode 100644 clisp/PKGBUILD create mode 100644 clutter-gtk/PKGBUILD create mode 100644 clutter/PKGBUILD create mode 100644 cmake/PKGBUILD create mode 100644 cmake/byacc.patch create mode 100644 cmark/PKGBUILD create mode 100644 cmatrix/PKGBUILD create mode 100644 cmatrix/cmatrix-tty create mode 100644 cmocka/PKGBUILD create mode 100644 cmus/PKGBUILD create mode 100644 codeblocks/PKGBUILD create mode 100644 codeblocks/fix-crash.patch create mode 100644 codecrypt/PKGBUILD create mode 100644 codecrypt/fix-build.patch create mode 100644 cogl/PKGBUILD create mode 100644 compface/LICENSE create mode 100644 compface/PKGBUILD create mode 100644 compface/compface-1.5.2-build.patch create mode 100644 compiler-rt/PKGBUILD create mode 100644 confuse/PKGBUILD create mode 100644 cpio/PKGBUILD create mode 100644 cppcheck/PKGBUILD create mode 100644 cppunit/PKGBUILD create mode 100644 cpulimit/PKGBUILD create mode 100644 crispy-doom/PKGBUILD create mode 100644 crispy-doom/crispy-doom.install create mode 100644 cronie/PKGBUILD create mode 100644 cronie/cronie.conf create mode 100644 cronie/cronie.confd create mode 100644 cronie/cronie.initd create mode 100644 cronie/cronie.run create mode 100644 cronie/cronie_log.run create mode 100644 cronie/deny create mode 100644 crypto++/PKGBUILD create mode 100644 crypto++/libcryptopp.pc create mode 100644 cscope/PKGBUILD create mode 100644 csfml/PKGBUILD create mode 100644 csh/PKGBUILD create mode 100644 csh/csh.install create mode 100644 csh/fix-build.patch create mode 100644 ctpl/PKGBUILD create mode 100644 cuetools/PKGBUILD create mode 100644 cups-filters/PKGBUILD create mode 100644 cups-filters/cups-browsed.initd create mode 100644 cups-filters/cups-browsed.run create mode 100644 cups-pdf/PKGBUILD create mode 100644 cups-pdf/cups-pdf.install create mode 100644 cups/PKGBUILD create mode 100644 cups/cups-1.6.2-statedir.patch create mode 100644 cups/cups-no-export-ssllibs.patch create mode 100644 cups/cups.install create mode 100644 cups/cups.logrotate create mode 100644 cups/cupsd.initd create mode 100644 cups/cupsd.run create mode 100644 cups/guid.patch create mode 100644 cups/install-server-executables-in-usrlibexeccups.patch create mode 100644 curlftpfs/PKGBUILD create mode 100644 cvs/PKGBUILD create mode 100644 cvs/cvs-1.11.19-abortabort.patch create mode 100644 cvs/cvs-1.11.19-comp.patch create mode 100644 cvs/cvs-1.11.19-extzlib.patch create mode 100644 cvs/cvs-1.11.19-logmsg.patch create mode 100644 cvs/cvs-1.11.19-netbsd-tag.patch create mode 100644 cvs/cvs-1.11.19-tagname.patch create mode 100644 cvs/cvs-1.11.19-tmp.patch create mode 100644 cvs/cvs-1.11.21-diff-kk.patch create mode 100644 cvs/cvs-1.11.21-diff.patch create mode 100644 cvs/cvs-1.11.21-sort.patch create mode 100644 cvs/cvs-1.11.23-Pass-compilation-with-Wformat-security.patch create mode 100644 cvs/cvs-1.11.23-cve-2010-3846.patch create mode 100644 cvs/cvs-1.11.23-cvspass.patch create mode 100644 cvs/cvs-1.11.23-doc-Add-mandatory-argument-to-sp.patch create mode 100644 cvs/cvs-1.11.23-getline64.patch create mode 100644 cvs/cvs-1.11.23-make_make_check_sanity_testing_verbose.patch create mode 100644 cvs/cvs-1.11.23-remove_undefined_date_from_cvs_1_header.patch create mode 100644 cvs/cvs-1.11.23-sanity.patch create mode 100644 cwm/PKGBUILD create mode 100644 cwm/change-default-binaries.patch create mode 100644 cwm/cwm.desktop create mode 100644 cyrus-sasl/0003-Update-saslauthd.conf-location-in-documentation.patch create mode 100644 cyrus-sasl/0006-Enable-autoconf-maintainer-mode.patch create mode 100644 cyrus-sasl/0010-Update-required-libraries-when-ld-as-needed-is-used.patch create mode 100644 cyrus-sasl/0013-Don-t-use-la-files-for-opening-plugins.patch create mode 100644 cyrus-sasl/0020-Restore-LIBS-after-checking-gss_inquire_sec_context_.patch create mode 100644 cyrus-sasl/0022-Fix-keytab-option-for-MIT-Kerberos.patch create mode 100644 cyrus-sasl/0030-dont_use_la_files_for_opening_plugins.patch create mode 100644 cyrus-sasl/0032-Add-with_pgsql-include-postgresql-to-include-path.patch create mode 100644 cyrus-sasl/PKGBUILD create mode 100644 cyrus-sasl/cyrus-sasl-2.1.22-as-needed.patch create mode 100644 cyrus-sasl/cyrus-sasl-2.1.22-qa.patch create mode 100644 cyrus-sasl/cyrus-sasl-2.1.26-size_t.patch create mode 100644 cyrus-sasl/cyrus-sasl-gssapi.patch create mode 100644 cyrus-sasl/cyrus-sasl-sql.patch create mode 100644 cyrus-sasl/fix-pkgconfig.patch create mode 100644 cyrus-sasl/gdbm-errno.patch create mode 100644 cyrus-sasl/saslauthd.confd create mode 100644 cyrus-sasl/saslauthd.initd create mode 100644 daemontools/LICENSE create mode 100644 daemontools/PKGBUILD create mode 100644 daemontools/daemontools-0.76.errno.patch create mode 100644 daemontools/daemontools-0.76.service-path-fix.patch create mode 100644 daemontools/svscan.confd create mode 100644 daemontools/svscan.initd create mode 100644 daemontools/svscan.run create mode 100644 darkhttpd/PKGBUILD create mode 100644 darkhttpd/darkhttpd.confd create mode 100644 darkhttpd/darkhttpd.initd create mode 100644 darkhttpd/darkhttpd.install create mode 100644 darkhttpd/darkhttpd.run create mode 100644 darkplaces/PKGBUILD create mode 100644 darkplaces/darkplaces.desktop create mode 100644 darkplaces/darkplaces.install create mode 100644 dave-gnukem/PKGBUILD create mode 100644 dave-gnukem/dave-gnukem create mode 100644 dave-gnukem/dave-gnukem.desktop create mode 100644 dave-gnukem/dave-gnukem.png create mode 100644 dave-gnukem/libre.patch create mode 100644 dcron/COPYING create mode 100644 dcron/PKGBUILD create mode 100644 dcron/dcron.conf create mode 100644 dcron/dcron.confd create mode 100644 dcron/dcron.initd create mode 100644 dcron/dcron.run create mode 100644 dcron/ldflags.patch create mode 100644 dcron/pick-up-update.patch create mode 100644 dcron/pidfile.patch create mode 100644 dd_rescue/PKGBUILD create mode 100644 ddrescue/PKGBUILD create mode 100644 deadbeef/PKGBUILD create mode 100644 deadbeef/libre.patch create mode 100644 dejagnu/PKGBUILD create mode 100644 desktop-file-utils/PKGBUILD create mode 100644 desktop-file-utils/update-desktop-database.hook create mode 100644 detox/PKGBUILD create mode 100644 deutex/PKGBUILD create mode 100644 deutex/update-copyright-year.patch create mode 100644 dev86/PKGBUILD create mode 100644 dev86/mandir.patch create mode 100644 devil/PKGBUILD create mode 100644 devil/soversion.patch create mode 100644 dhcp/0002-iproute2.patch create mode 100644 dhcp/PKGBUILD create mode 100644 dhcp/dhclient.initd create mode 100644 dhcp/dhclient.run create mode 100644 dhcp/dhclient6.initd create mode 100644 dhcp/dhclient6.run create mode 100644 dhcp/dhcp.install create mode 100644 dhcp/dhcpd.initd create mode 100644 dhcp/dhcpd.run create mode 100644 dhcp/dhcpd6.initd create mode 100644 dhcp/dhcpd6.run create mode 100644 dhcpcd-ui/PKGBUILD create mode 100644 dhcpcd-ui/dhcpcd-gtk.desktop create mode 100644 dhcpcd-ui/fix-icons.patch create mode 100644 dhcpcd-ui/fix-messages.patch create mode 100644 dia/PKGBUILD create mode 100644 dia/dia-0.9.3-cve-2019-19451.patch create mode 100644 diffstat/PKGBUILD create mode 100644 dillo/PKGBUILD create mode 100644 dillo/dillo.desktop create mode 100644 dillo/dillo.png create mode 100644 dillo/libre.patch create mode 100644 discount/PKGBUILD create mode 100644 django/PKGBUILD create mode 100644 djview/PKGBUILD create mode 100644 djview/djvulibre-djview4.appdata.xml create mode 100644 djvulibre/PKGBUILD create mode 100644 dkms/0001-Revert-Make-newly-installed-modules-available-immedi.patch create mode 100644 dkms/PKGBUILD create mode 100644 dkms/dkms.install create mode 100644 dkms/hook.install create mode 100644 dkms/hook.remove create mode 100644 dkms/hook.sh create mode 100644 dmenu/PKGBUILD create mode 100644 dmg2img/PKGBUILD create mode 100644 dmidecode/PKGBUILD create mode 100644 dnscrypt-proxy/PKGBUILD create mode 100644 dnscrypt-proxy/config-privacy.patch create mode 100644 dnscrypt-proxy/dnscrypt-proxy.confd create mode 100644 dnscrypt-proxy/dnscrypt-proxy.initd create mode 100644 dnscrypt-proxy/dnscrypt-proxy.install create mode 100644 dnscrypt-proxy/dnscrypt-proxy.run create mode 100644 dnscrypt-proxy/fix-textflag.h.patch create mode 100644 dnscrypt-proxy/remove-go-systemd-support.patch create mode 100644 dnsmasq/0001-Handle-binding-upstream-servers-to-an-interface.patch create mode 100644 dnsmasq/PKGBUILD create mode 100644 dnsmasq/dnsmasq.initd create mode 100644 dnsmasq/dnsmasq.install create mode 100644 dnsmasq/dnsmasq.run create mode 100644 dnsmasq/remove-dbus.patch create mode 100644 docbook-to-man/PKGBUILD create mode 100644 docbook-xml/LICENSE create mode 100644 docbook-xml/PKGBUILD create mode 100644 docbook-xml/docbook-xml.install create mode 100644 docbook-xsl/PKGBUILD create mode 100644 docbook-xsl/docbook-xsl.install create mode 100644 docbook2x/PKGBUILD create mode 100644 docx2txt/PKGBUILD create mode 100644 dos2unix/PKGBUILD create mode 100644 dosbox/PKGBUILD create mode 100644 dotconf/PKGBUILD create mode 100644 dovecot/PKGBUILD create mode 100644 dovecot/dovecot.initd create mode 100644 dovecot/dovecot.install create mode 100644 dovecot/dovecot.ld.so.conf create mode 100644 dovecot/dovecot.run create mode 100644 doxygen/PKGBUILD create mode 100644 dreamchess/PKGBUILD create mode 100644 dsniff/PKGBUILD create mode 100644 dtach/PKGBUILD create mode 100644 dtc/PKGBUILD create mode 100644 dvd+rw-tools/PKGBUILD create mode 100644 dvdauthor/PKGBUILD create mode 100644 dvdauthor/support-graphicsmagick.patch create mode 100644 dvdbackup/PKGBUILD create mode 100644 dvdisaster/PKGBUILD create mode 100644 dvdstyler/PKGBUILD create mode 100644 dvdstyler/config.patch create mode 100644 dvdstyler/dvdstyler.appdata.xml create mode 100644 dwarves/PKGBUILD create mode 100644 dwarves/python.patch create mode 100644 dzen2/PKGBUILD create mode 100644 easy-rsa/0001-fix-paths.patch create mode 100644 easy-rsa/PKGBUILD create mode 100644 easytag/PKGBUILD create mode 100644 easytag/remove-appstreamglib.patch create mode 100644 edk2/50-edk2-ovmf-i386-secure.json create mode 100644 edk2/50-edk2-ovmf-x86_64-secure.json create mode 100644 edk2/60-edk2-ovmf-i386.json create mode 100644 edk2/60-edk2-ovmf-x86_64.json create mode 100644 edk2/PKGBUILD create mode 100644 edk2/edk2-ovmf.install create mode 100644 edk2/edk2-shell.install create mode 100644 efitools/PKGBUILD create mode 100644 efitools/libressl.patch create mode 100644 egoboo/PKGBUILD create mode 100644 egoboo/egoboo.desktop create mode 100644 egoboo/egoboo.png create mode 100644 egoboo/keyboard_directions.patch create mode 100644 eigen/PKGBUILD create mode 100644 elinks/PKGBUILD create mode 100644 elinks/fix-build.patch create mode 100644 enca/PKGBUILD create mode 100644 enca/enca-bad-file-descriptor.patch create mode 100644 encfs/PKGBUILD create mode 100644 enchant/PKGBUILD create mode 100644 enet/PKGBUILD create mode 100644 enscript/PKGBUILD create mode 100644 entr/PKGBUILD create mode 100644 epdfview/PKGBUILD create mode 100644 epdfview/epdfview-0.1.8-glib2-headers.patch create mode 100644 epdfview/epdfview-0.1.8-modern-cups.patch create mode 100644 epdfview/epdfview-0.1.8-pictures.patch create mode 100644 epdfview/epdfview-0.1.8-swap-the-blue-and-red-channel.patch create mode 100644 espeak/PKGBUILD create mode 100644 etl/PKGBUILD create mode 100644 eureka/PKGBUILD create mode 100644 eureka/fhs-compliant.patch create mode 100644 evtest/PKGBUILD create mode 100644 exfatprogs/PKGBUILD create mode 100644 exiv2/PKGBUILD create mode 100644 expac/PKGBUILD create mode 100644 expect/PKGBUILD create mode 100644 expect/public-domain.txt create mode 100644 extra-cmake-modules/ECM-no-init.py.patch create mode 100644 extra-cmake-modules/PKGBUILD create mode 100644 extra-cmake-modules/ecm-sphinx4.patch create mode 100644 extra-cmake-modules/force-relative-paths.patch create mode 100644 extremetuxracer/PKGBUILD create mode 100644 f2fs-tools/PKGBUILD create mode 100644 faad2/PKGBUILD create mode 100644 fail2ban/PKGBUILD create mode 100644 fail2ban/fail2ban-0.11.2_CVE-2021-32749.patch create mode 100644 fail2ban/fail2ban.confd create mode 100644 fail2ban/fail2ban.initd create mode 100644 fail2ban/fail2ban.logrotate create mode 100644 fail2ban/fail2ban.run create mode 100644 fail2ban/jail.conf.patch create mode 100644 fail2ban/paths-hyperbola.conf create mode 100644 fail2ban/ssh.jaild create mode 100644 fail2ban/sshd-ddos.filterd create mode 100644 fail2ban/sshd.filterd create mode 100644 fbpager/PKGBUILD create mode 100644 fbpanel/PKGBUILD create mode 100644 fbpanel/fbpanel.install create mode 100644 fbpanel/fix-config.patch create mode 100644 fbpanel/hyperbola-logo.png create mode 100644 fbpanel/remove-volume-plugin.patch create mode 100644 fbxkb/PKGBUILD create mode 100644 fbxkb/fbxkb.patch create mode 100644 fceux/PKGBUILD create mode 100644 fcgi/CVE-2025-23016.patch create mode 100644 fcgi/PKGBUILD create mode 100644 fcgiwrap/PKGBUILD create mode 100644 fcgiwrap/fcgiwrap.confd create mode 100644 fcgiwrap/fcgiwrap.initd create mode 100644 fcgiwrap/fcgiwrap.run create mode 100644 fdupes/LICENSE create mode 100644 fdupes/PKGBUILD create mode 100644 feh/PKGBUILD create mode 100644 festival/PKGBUILD create mode 100644 festival/festival-2.4-compat.patch create mode 100644 festival/festival-config.patch create mode 100644 festival/festival-shared-build.patch create mode 100644 festival/festival-sndio.patch create mode 100644 festival/festival-without-java.patch create mode 100644 festival/speech_tools-config.patch create mode 100644 festival/speech_tools-gcc47.patch create mode 100644 festival/speech_tools-shared-build.patch create mode 100644 festival/speech_tools-sndio.patch create mode 100644 festival/speech_tools-without-java.patch create mode 100644 fetchmail/PKGBUILD create mode 100644 fetchmail/fetchmail.confd create mode 100644 fetchmail/fetchmail.initd create mode 100644 fetchmail/fetchmail.install create mode 100644 ffcall/PKGBUILD create mode 100644 ffmpeg/0001-ffbuild-libversion.sh-add-shebang.patch create mode 100644 ffmpeg/0001-libavutil-clean-up-unused-FF_SYMVER-macro.patch create mode 100644 ffmpeg/PKGBUILD create mode 100644 ffmpegthumbnailer/PKGBUILD create mode 100644 ffmpegthumbnailer/ffmpegthumbnailer.thumbnailer create mode 100644 fftw/PKGBUILD create mode 100644 fig2dev/LICENSE create mode 100644 fig2dev/PKGBUILD create mode 100644 filezilla/PKGBUILD create mode 100644 flac/PKGBUILD create mode 100644 flare-engine/PKGBUILD create mode 100644 flare-game/PKGBUILD create mode 100644 flashrom/PKGBUILD create mode 100644 flightgear/PKGBUILD create mode 100644 fltk/PKGBUILD create mode 100644 fluidsynth/PKGBUILD create mode 100644 fluidsynth/fluidsynth.conf create mode 100644 fluidsynth/fluidsynth.confd create mode 100644 fluidsynth/fluidsynth.initd create mode 100644 fluidsynth/fluidsynth.install create mode 100644 fluidsynth/fluidsynth.run create mode 100644 fluxbox-extra/PKGBUILD create mode 100644 fluxbox-extra/fluxbox-extra.install create mode 100644 fluxbox/PKGBUILD create mode 100644 fluxbox/fluxbox.desktop create mode 100644 fluxbox/libre.patch create mode 100644 fmt/PKGBUILD create mode 100644 font-manager/PKGBUILD create mode 100644 fontconfig/PKGBUILD create mode 100644 fontconfig/fontconfig.hook create mode 100644 fontconfig/fontconfig.install create mode 100644 fontforge/PKGBUILD create mode 100644 fonttosfnt/PKGBUILD create mode 100644 foomatic-db-engine/PKGBUILD create mode 100644 foomatic-db/PKGBUILD create mode 100644 foremost/PKGBUILD create mode 100644 foremost/fix-build.patch create mode 100644 fossil/PKGBUILD create mode 100644 fox/ControlPanel.desktop create mode 100644 fox/PKGBUILD create mode 100644 fox/PathFinder.desktop create mode 100644 fox/adie.desktop create mode 100644 fox/calculator.desktop create mode 100644 fping/PKGBUILD create mode 100644 fping/fping.install create mode 100644 freealut/PKGBUILD create mode 100644 freeciv/PKGBUILD create mode 100644 freedoom/PKGBUILD create mode 100644 freedoom/add-launcher.patch create mode 100644 freedoom/fix-errors.patch create mode 100644 freedroidrpg/PKGBUILD create mode 100644 freedroidrpg/fix-build.patch create mode 100644 freeglut/PKGBUILD create mode 100644 freeimage/PKGBUILD create mode 100644 freeimage/fix-build.patch create mode 100644 freenginx/PKGBUILD create mode 100644 freenginx/freenginx.confd create mode 100644 freenginx/freenginx.initd create mode 100644 freenginx/freenginx.run create mode 100644 freenginx/logrotate create mode 100644 freeorion/PKGBUILD create mode 100644 freeorion/fix-directories.patch create mode 100644 freepats/PKGBUILD create mode 100644 freerdp/PKGBUILD create mode 100644 freerdp/manpage_formatting.patch create mode 100644 freetype2/0001-Enable-table-validation-modules.patch create mode 100644 freetype2/0002-Enable-infinality-subpixel-hinting.patch create mode 100644 freetype2/0003-Enable-long-PCF-family-names.patch create mode 100644 freetype2/0004-Properly-handle-phantom-points-for-variation-fonts-5.patch create mode 100644 freetype2/0005-freetype-2.5.2-more-demos.patch create mode 100644 freetype2/PKGBUILD create mode 100644 freetype2/freetype2.install create mode 100644 freetype2/freetype2.sh create mode 100644 fribidi/PKGBUILD create mode 100644 frozen-bubble/PKGBUILD create mode 100644 fsarchiver/PKGBUILD create mode 100644 fsearch/PKGBUILD create mode 100644 fteqcc/PKGBUILD create mode 100644 ftgl/PKGBUILD create mode 100644 ftjam/PKGBUILD create mode 100644 ftjam/license.txt create mode 100644 ftmenu/PKGBUILD create mode 100644 fuse2/PKGBUILD create mode 100644 fuse3/PKGBUILD create mode 100644 fuse3/fuse.initd create mode 100644 fvwm3/PKGBUILD create mode 100644 fzy/PKGBUILD create mode 100644 galculator/PKGBUILD create mode 100644 gc/PKGBUILD create mode 100644 gc/license.txt create mode 100644 gcompris-data/PKGBUILD create mode 100644 gcompris-data/fix-path.patch create mode 100644 gcompris-qt/PKGBUILD create mode 100644 gcompris-qt/fix-build.patch create mode 100644 gcompris-qt/gcompris-qt.sh create mode 100644 gcr/PKGBUILD create mode 100644 gcr/gcr-viewer.sh create mode 100644 gd/PKGBUILD create mode 100644 gdb/PKGBUILD create mode 100644 gdk-pixbuf-xlib/PKGBUILD create mode 100644 gdk-pixbuf2/PKGBUILD create mode 100644 gdk-pixbuf2/gdk-pixbuf-query-loaders.hook create mode 100644 gdk-pixbuf2/gdk-pixbuf2.install create mode 100644 gdl/PKGBUILD create mode 100644 geany-plugins/PKGBUILD create mode 100644 geany/PKGBUILD create mode 100644 geeqie/PKGBUILD create mode 100644 gegl/PKGBUILD create mode 100644 gengetopt/PKGBUILD create mode 100644 geoip-database/PKGBUILD create mode 100644 geoip/PKGBUILD create mode 100644 gerbera-legacy/PKGBUILD create mode 100644 gerbera-legacy/gerbera.confd create mode 100644 gerbera-legacy/gerbera.initd create mode 100644 gerbera-legacy/gerbera.install create mode 100644 gerbera-legacy/gerbera.run create mode 100644 gerbera-legacy/libre.patch create mode 100644 getmail6/PKGBUILD create mode 100644 gexiv2/PKGBUILD create mode 100644 gftp/PKGBUILD create mode 100644 gftp/libre.patch create mode 100644 ghex/PKGBUILD create mode 100644 ghostscript/PKGBUILD create mode 100644 giflib/PKGBUILD create mode 100644 giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch create mode 100644 giflib/giflib-5.1.9-make-flags.patch create mode 100644 gimp-legacy/CVE-2025-2761.patch create mode 100644 gimp-legacy/PKGBUILD create mode 100644 gimp-legacy/linux_kernel.gpl create mode 100644 gimp-legacy/remove-plugins.patch create mode 100644 gimp-legacy/remove-update-check.patch create mode 100644 girara/PKGBUILD create mode 100644 git-legacy/PKGBUILD create mode 100644 git-legacy/git-daemon.conf create mode 100644 git-legacy/git-daemon.confd create mode 100644 git-legacy/git-daemon.initd create mode 100644 git-legacy/git-daemon.run create mode 100644 git-legacy/git-daemon_log.run create mode 100644 git-legacy/git-legacy.install create mode 100644 gkrellm/PKGBUILD create mode 100644 gkrellm/add-libressl-support.patch create mode 100644 gkrellm/gkrellmd.confd create mode 100644 gkrellm/gkrellmd.initd create mode 100644 gkrellm/gkrellmd.run create mode 100644 glade/PKGBUILD create mode 100644 glade/fix-build.patch create mode 100644 glew/PKGBUILD create mode 100644 glfw/PKGBUILD create mode 100644 glib-networking/PKGBUILD create mode 100644 glib-networking/remove-systemd-support.patch create mode 100644 glib-perl/PKGBUILD create mode 100644 glibmm/PKGBUILD create mode 100644 glm/PKGBUILD create mode 100644 glm/glm.pc.in create mode 100644 glm/glmConfig.cmake.in create mode 100644 glm/glmConfigVersion.cmake.in create mode 100644 glm/glmTargets.cmake create mode 100644 glslang/PKGBUILD create mode 100644 gltron/PKGBUILD create mode 100644 glu/LICENSE create mode 100644 glu/PKGBUILD create mode 100644 gmime3/PKGBUILD create mode 100644 gmrun/PKGBUILD create mode 100644 gmrun/libre.patch create mode 100644 gmtp/PKGBUILD create mode 100644 gnome-common/PKGBUILD create mode 100644 gnome-icon-theme-symbolic/PKGBUILD create mode 100644 gnome-icon-theme/PKGBUILD create mode 100644 gnome-icon-theme/do-not-manually-set-localedir.patch create mode 100644 gnome-icon-theme/remove-gtk-update-icon-cache.patch create mode 100644 gnome-themes-extra/PKGBUILD create mode 100644 gnu-efi/PKGBUILD create mode 100644 gnu-efi/gnu-efi-3.0.9-ldflags.patch create mode 100644 gnu-netcat/PKGBUILD create mode 100644 gnucash/PKGBUILD create mode 100644 gnumeric-legacy/PKGBUILD create mode 100644 gnuplot/PKGBUILD create mode 100644 gnuplot/lua53_compat.patch create mode 100644 gnustep-base/PKGBUILD create mode 100644 gnustep-make/PKGBUILD create mode 100644 gobby/PKGBUILD create mode 100644 gobject-introspection/PKGBUILD create mode 100644 gocr/PKGBUILD create mode 100644 godot/PKGBUILD create mode 100644 goffice/PKGBUILD create mode 100644 gopchop/PKGBUILD create mode 100644 goxel/PKGBUILD create mode 100644 gpa/PKGBUILD create mode 100644 gpart/PKGBUILD create mode 100644 gparted/PKGBUILD create mode 100644 gperf/PKGBUILD create mode 100644 gphoto2/PKGBUILD create mode 100644 gphotofs/PKGBUILD create mode 100644 gpicview/PKGBUILD create mode 100644 gptfdisk/PKGBUILD create mode 100644 gptfdisk/partitions.patch create mode 100644 gr-lida/PKGBUILD create mode 100644 grafx2/PKGBUILD create mode 100644 grafx2/fix-appstream.patch create mode 100644 graphene/PKGBUILD create mode 100644 graphicsmagick-imagemagick-compat/LICENSE create mode 100644 graphicsmagick-imagemagick-compat/PKGBUILD create mode 100644 graphicsmagick/PKGBUILD create mode 100644 graphite/PKGBUILD create mode 100644 graphviz/PKGBUILD create mode 100644 graphviz/ghostscript918.patch create mode 100644 graphviz/graphviz.install create mode 100644 grfcodec/PKGBUILD create mode 100644 grip/PKGBUILD create mode 100644 grip/remove-cddb.patch create mode 100644 grml-zsh-config/PKGBUILD create mode 100644 grsync/PKGBUILD create mode 100644 grsync/grsync.appdata.xml create mode 100644 grsync/use-themed-icon.patch create mode 100644 gsasl/PKGBUILD create mode 100644 gsettings-desktop-schemas/PKGBUILD create mode 100644 gsfonts/PKGBUILD create mode 100644 gsimplecal/PKGBUILD create mode 100644 gsl/PKGBUILD create mode 100644 gst-editing-services/PKGBUILD create mode 100644 gst-libav/PKGBUILD create mode 100644 gst-plugins-bad/PKGBUILD create mode 100644 gst-plugins-bad/libressl.patch create mode 100644 gst-plugins-bad/remove-enforced-deps.patch create mode 100644 gst-plugins-base/PKGBUILD create mode 100644 gst-plugins-base/sndio.patch create mode 100644 gst-plugins-good/PKGBUILD create mode 100644 gst-plugins-ugly/PKGBUILD create mode 100644 gst-python/PKGBUILD create mode 100644 gstreamer/PKGBUILD create mode 100644 gstreamer/byacc.patch create mode 100644 gstreamer/gstreamer.install create mode 100644 gstreamermm/PKGBUILD create mode 100644 gtk-vnc/PKGBUILD create mode 100644 gtk/PKGBUILD create mode 100644 gtk/gtk-query-immodules-3.0.hook create mode 100644 gtk/gtk-update-icon-cache.hook create mode 100644 gtk/gtk-update-icon-cache.script create mode 100644 gtk/gtk.install create mode 100644 gtk/optionalize-at-spi2-atk-dependency.patch create mode 100644 gtk/settings.ini create mode 100644 gtk2-engine-murrine/PKGBUILD create mode 100644 gtk2-engines/PKGBUILD create mode 100644 gtk2/CVE-2024-6655.patch create mode 100644 gtk2/PKGBUILD create mode 100644 gtk2/gtk-query-immodules-2.0.hook create mode 100644 gtk2/gtk2.install create mode 100644 gtk2/gtkrc create mode 100644 gtk2/remove-gtk-doc-support.patch create mode 100644 gtk2/xid-collision-debug.patch create mode 100644 gtk2mm/PKGBUILD create mode 100644 gtkam/PKGBUILD create mode 100644 gtkglext/PKGBUILD create mode 100644 gtklp/PKGBUILD create mode 100644 gtkmathview/PKGBUILD create mode 100644 gtkmm/PKGBUILD create mode 100644 gtksourceview2/PKGBUILD create mode 100644 gtksourceview3/PKGBUILD create mode 100644 gtksourceviewmm/PKGBUILD create mode 100644 gtkspell2/PKGBUILD create mode 100644 gtkspell2/remove-gtkdoc.patch create mode 100644 gtkspell3/PKGBUILD create mode 100644 gtkspellmm/PKGBUILD create mode 100644 gts/PKGBUILD create mode 100644 gtypist/PKGBUILD create mode 100644 gtypist/fix-ncurses.patch create mode 100644 guile/PKGBUILD create mode 100644 gumbo-parser/PKGBUILD create mode 100644 gunicorn/PKGBUILD create mode 100644 gutenprint/PKGBUILD create mode 100644 gutenprint/gutenprint.install create mode 100644 gv/PKGBUILD create mode 100644 gv/gv.desktop create mode 100644 gwenhywfar/PKGBUILD create mode 100644 gxkb/PKGBUILD create mode 100644 gyp/PKGBUILD create mode 100644 gyp/gyp-fix-cmake.patch create mode 100644 gyp/gyp-python38.patch create mode 100644 handbrake-legacy/PKGBUILD create mode 100644 handbrake-legacy/fix-build-contrib.patch create mode 100644 handbrake-legacy/fix-close-button-in-about-dialog.patch create mode 100644 handbrake-legacy/remove-dav1d-support.patch create mode 100644 handbrake-legacy/remove-libvpx-support.patch create mode 100644 handbrake-legacy/remove-nonfree-presets.patch create mode 100644 haproxy/CVE-2025-32464.patch create mode 100644 haproxy/PKGBUILD create mode 100644 haproxy/haproxy.cfg create mode 100644 haproxy/haproxy.initd create mode 100644 haproxy/haproxy.install create mode 100644 haproxy/haproxy.run create mode 100644 haproxy/use-CFLAGS-and-LDFLAGS-when-building-admin.patch create mode 100644 harfbuzz/PKGBUILD create mode 100644 haveged/PKGBUILD create mode 100644 haveged/haveged.confd create mode 100644 haveged/haveged.initd create mode 100644 haveged/haveged.run create mode 100644 help2man/PKGBUILD create mode 100644 herbe/PKGBUILD create mode 100644 herbe/notify-send create mode 100644 herbstluftwm/PKGBUILD create mode 100644 hex-a-hop/PKGBUILD create mode 100644 hex-a-hop/hex-a-hop.desktop create mode 100644 hex-a-hop/hex-a-hop.png create mode 100644 hex-a-hop/libre.patch create mode 100644 hexchat-legacy/PKGBUILD create mode 100644 hexchat-legacy/remove-defaults.patch create mode 100644 hexedit/PKGBUILD create mode 100644 hicolor-icon-theme/PKGBUILD create mode 100644 hplip-drivers/PKGBUILD create mode 100644 hplip-drivers/add-include-cups-ppd.h-in-various-places-as-CUPS-2.2.patch create mode 100644 hplip-drivers/disable_upgrade.patch create mode 100644 hplip-drivers/remove-systemd-support.patch create mode 100644 hsetroot/PKGBUILD create mode 100644 hspell/PKGBUILD create mode 100644 html2text-cpp/PKGBUILD create mode 100644 htop/PKGBUILD create mode 100644 http-parser/PKGBUILD create mode 100644 httrack/PKGBUILD create mode 100644 hunspell-dicts/PKGBUILD create mode 100644 hunspell/PKGBUILD create mode 100644 hwloc/PKGBUILD create mode 100644 hyperbola-install-scripts/PKGBUILD create mode 100644 hyperfetch/PKGBUILD create mode 100644 hyperiso/PKGBUILD create mode 100644 hyperiso/legalcode.txt create mode 100644 hyphen/PKGBUILD create mode 100644 i2pd/PKGBUILD create mode 100644 i2pd/i2pd.confd create mode 100644 i2pd/i2pd.initd create mode 100644 i2pd/i2pd.install create mode 100644 i2pd/i2pd.run create mode 100644 i3-wm/PKGBUILD create mode 100644 i3blocks/PKGBUILD create mode 100644 i3blocks/brightness.bash create mode 100644 i3blocks/fix-scripts.patch create mode 100644 i3blocks/wireguard.bash create mode 100644 i3status/PKGBUILD create mode 100644 i3status/add-sndio-backend.patch create mode 100644 i3status/build-without-pulse.patch create mode 100644 icedove-uxp/0001-Restore-risky-system-libraries.patch create mode 100644 icedove-uxp/0002-Add-icedove-uxp-application-specfic-override.patch create mode 100644 icedove-uxp/0003-Hardcode-AppName-in-nsAppRunner.patch create mode 100644 icedove-uxp/0004-Disable-SSLKEYLOGFILE-in-NSS.patch create mode 100644 icedove-uxp/0005-Fix-PGO-Build.patch create mode 100644 icedove-uxp/0006-init-configure-patch.patch create mode 100644 icedove-uxp/0007-Update-libcubeb-to-a1200c34.patch create mode 100644 icedove-uxp/0008-Don-t-use-toolkit-search-provider.patch create mode 100644 icedove-uxp/0009-icedove-uxp-install-dir.patch create mode 100644 icedove-uxp/0010-remove-malfunctional-searchplugins.patch create mode 100644 icedove-uxp/LICENSE create mode 100644 icedove-uxp/PKGBUILD create mode 100644 icedove-uxp/icedove-uxp.desktop create mode 100644 icedove-uxp/icedove-uxp.install create mode 100644 icedove-uxp/mozconfig create mode 100644 icedove-uxp/vendor.js create mode 100644 iceweasel-uxp/0001-Restore-risky-system-libraries.patch create mode 100644 iceweasel-uxp/0002-Add-iceweasel-uxp-application-specfic-override.patch create mode 100644 iceweasel-uxp/0003-Uplift-enable-proxy-bypass-protection-flag.patch create mode 100644 iceweasel-uxp/0004-Hardcode-AppName-in-nsAppRunner.patch create mode 100644 iceweasel-uxp/0005-Disable-SSLKEYLOGFILE-in-NSS.patch create mode 100644 iceweasel-uxp/0006-Fix-PGO-Build.patch create mode 100644 iceweasel-uxp/0007-init-configure-patch.patch create mode 100644 iceweasel-uxp/0008-Update-libcubeb-to-a1200c34.patch create mode 100644 iceweasel-uxp/0009-Tauthon.patch create mode 100644 iceweasel-uxp/0010-remove-malfunctional-searchplugins.patch create mode 100644 iceweasel-uxp/0011-iceweasel-uxp-install-dir.patch create mode 100644 iceweasel-uxp/LICENSE create mode 100644 iceweasel-uxp/PKGBUILD create mode 100644 iceweasel-uxp/iceweasel-uxp.desktop create mode 100644 iceweasel-uxp/iceweasel-uxp.install create mode 100644 iceweasel-uxp/mozconfig create mode 100644 iceweasel-uxp/vendor.js create mode 100644 icewm/PKGBUILD create mode 100644 icewm/libre.patch create mode 100644 icon-naming-utils/PKGBUILD create mode 100644 icon-naming-utils/remove-legacy-calc.patch create mode 100644 icoutils/PKGBUILD create mode 100644 id3/PKGBUILD create mode 100644 id3lib/PKGBUILD create mode 100644 id3v2/PKGBUILD create mode 100644 idesk/PKGBUILD create mode 100644 idesk/imlib2-config.patch create mode 100644 iftop/PKGBUILD create mode 100644 ii/PKGBUILD create mode 100644 ijs/PKGBUILD create mode 100644 imlib2/PKGBUILD create mode 100644 imv/PKGBUILD create mode 100644 indent/PKGBUILD create mode 100644 iniparser/PKGBUILD create mode 100644 inkscape-legacy/PKGBUILD create mode 100644 inkscape-legacy/deny-clipboards-extension.patch create mode 100644 inkscape-legacy/no-const.patch create mode 100644 innoextract/PKGBUILD create mode 100644 intltool/PKGBUILD create mode 100644 intltool/intltool-0.51.0-perl-5.26.patch create mode 100644 intltool/intltool-merge-Create-cache-file-atomically.patch create mode 100644 intltool/intltool_distcheck-fix.patch create mode 100644 iperf/PKGBUILD create mode 100644 iperf3/PKGBUILD create mode 100644 ipxe/PKGBUILD create mode 100644 ipxe/chain-default-3928.ipxe create mode 100644 ipxe/chain-default.ipxe create mode 100644 ipxe/grub create mode 100644 ipxe/ipxe-0002-banner.patch create mode 100644 ipxe/ipxe-0003-efi-iso.patch create mode 100644 ipxe/ipxe.install create mode 100644 irqbalance/PKGBUILD create mode 100644 irqbalance/irqbalance.conf create mode 100644 irqbalance/irqbalance.confd create mode 100644 irqbalance/irqbalance.initd create mode 100644 irqbalance/irqbalance.run create mode 100644 irrlamb/PKGBUILD create mode 100644 irrlicht/PKGBUILD create mode 100644 irssi-xmpp/PKGBUILD create mode 100644 irssi/PKGBUILD create mode 100644 iso-codes/PKGBUILD create mode 100644 iso2mkv/PKGBUILD create mode 100644 isomaster/PKGBUILD create mode 100644 ispell/PKGBUILD create mode 100644 ispell/license.txt create mode 100644 isync/PKGBUILD create mode 100644 itstool/PKGBUILD create mode 100644 itstool/itstool-2.0.5-fix-crash-wrong-encoding.patch create mode 100644 jack1/40-audio-privileges.rules create mode 100644 jack1/PKGBUILD create mode 100644 jack1/jack1.conf create mode 100644 jack1/jackd.confd create mode 100644 jack1/jackd.initd create mode 100644 jack1/jackd.sh create mode 100644 jack1/remove-system_has_rtprio_limits_conf-function.patch create mode 100644 jack2/40-audio-privileges.rules create mode 100644 jack2/PKGBUILD create mode 100644 jack2/jackd.confd create mode 100644 jack2/jackd.initd create mode 100644 jack2/jackd.sh create mode 100644 jansson/PKGBUILD create mode 100644 jasper/PKGBUILD create mode 100644 jasper/jasper-1.900.1-fix-filename-buffer-overflow.patch create mode 100644 jbig2dec/PKGBUILD create mode 100644 jbigkit/PKGBUILD create mode 100644 jemalloc/PKGBUILD create mode 100644 jgmenu/PKGBUILD create mode 100644 jhead/PKGBUILD create mode 100644 jhead/fix-build.patch create mode 100644 jmtpfs/PKGBUILD create mode 100644 joe/PKGBUILD create mode 100644 jq/ChangeLog create mode 100644 jq/PKGBUILD create mode 100644 json-glib/PKGBUILD create mode 100644 jsoncpp/PKGBUILD create mode 100644 judy/PKGBUILD create mode 100644 jumpnbump/PKGBUILD create mode 100644 jwm/PKGBUILD create mode 100644 jwm/jwm.desktop create mode 100644 karchive/PKGBUILD create mode 100644 kcaldav/PKGBUILD create mode 100644 kcgi/PKGBUILD create mode 100644 kcompletion/PKGBUILD create mode 100644 kconfig/PKGBUILD create mode 100644 kcoreaddons/PKGBUILD create mode 100644 kcrash/PKGBUILD create mode 100644 kdoctools/PKGBUILD create mode 100644 keepassx/PKGBUILD create mode 100644 keepassx/latest-commit.patch create mode 100644 kguiaddons/PKGBUILD create mode 100644 khotkeys/PKGBUILD create mode 100644 khtml/PKGBUILD create mode 100644 khtml/remove-java-support.patch create mode 100644 ki18n/PKGBUILD create mode 100644 kickshaw/PKGBUILD create mode 100644 kickshaw/fix-build.patch create mode 100644 kitemmodels/PKGBUILD create mode 100644 kitemviews/PKGBUILD create mode 100644 kobodeluxe/PKGBUILD create mode 100644 kobodeluxe/kobodeluxe.install create mode 100644 krita-legacy/PKGBUILD create mode 100644 kseexpr/PKGBUILD create mode 100644 kwidgetsaddons/PKGBUILD create mode 100644 kwindowsystem/PKGBUILD create mode 100644 kyotocabinet/PKGBUILD create mode 100644 l-smash/PKGBUILD create mode 100644 l3afpad/PKGBUILD create mode 100644 l3afpad/l3afpad.appdata.xml create mode 100644 lablgtk2/PKGBUILD create mode 100644 ladspa/PKGBUILD create mode 100644 ladspa/fix-memleak-in-plugin-scanning.patch create mode 100644 lame/PKGBUILD create mode 100644 laminar/Chart.min.js create mode 100644 laminar/PKGBUILD create mode 100644 laminar/ansi_up.js create mode 100644 laminar/fix-build.patch create mode 100644 laminar/icon.png create mode 100644 laminar/laminard.confd create mode 100644 laminar/laminard.initd create mode 100644 laminar/vue-router.min.js create mode 100644 laminar/vue.min.js create mode 100644 lapack/PKGBUILD create mode 100644 lapack/lapacke-missing-symbols.patch create mode 100644 lasem/CVE-2013-7447.patch create mode 100644 lasem/PKGBUILD create mode 100644 lbreakout2/PKGBUILD create mode 100644 lbreakout2/lbreakout2.desktop create mode 100644 lbreakout2/lbreakout2.png create mode 100644 lbreakouthd/PKGBUILD create mode 100644 lcms2/PKGBUILD create mode 100644 ldb/PKGBUILD create mode 100644 ldoc/PKGBUILD create mode 100644 ledger/PKGBUILD create mode 100644 legalcode.txt create mode 100644 lemonbar/PKGBUILD create mode 100644 lensfun/PKGBUILD create mode 100644 leptonica/PKGBUILD create mode 100644 lesstif/PKGBUILD create mode 100644 lftp/PKGBUILD create mode 100644 lgeneral/PKGBUILD create mode 100644 lgeneral/lgeneral.install create mode 100644 lgeneral/lgeneral.png create mode 100644 lhasa/PKGBUILD create mode 100644 libao/0001-Check-memory-allocations-for-success.patch create mode 100644 libao/0002-ao_example-free-buffer.patch create mode 100644 libao/PKGBUILD create mode 100644 libao/libao.conf create mode 100644 libao/patch-src_plugins_sndio_ao_sndio_c.patch create mode 100644 libart/PKGBUILD create mode 100644 libass/PKGBUILD create mode 100644 libb2/PKGBUILD create mode 100644 libbpf/PKGBUILD create mode 100644 libbpf/consolidate-lib-dirs.patch create mode 100644 libbs2b/PKGBUILD create mode 100644 libbsd/PKGBUILD create mode 100644 libbulletml/Makefile create mode 100644 libbulletml/PKGBUILD create mode 100644 libburn/PKGBUILD create mode 100644 libcaca/PKGBUILD create mode 100644 libcdio-paranoia/PKGBUILD create mode 100644 libcdio/PKGBUILD create mode 100644 libcerf/PKGBUILD create mode 100644 libconfig/PKGBUILD create mode 100644 libcroco/PKGBUILD create mode 100644 libcss/PKGBUILD create mode 100644 libcue/PKGBUILD create mode 100644 libcurl3-gnutls/03_keep_symbols_compat.patch create mode 100644 libcurl3-gnutls/CVE-2023-38545.patch create mode 100644 libcurl3-gnutls/PKGBUILD create mode 100644 libdatrie/PKGBUILD create mode 100644 libdbi-drivers/PKGBUILD create mode 100644 libdbi/PKGBUILD create mode 100644 libdca/PKGBUILD create mode 100644 libdca/sndio.patch create mode 100644 libde265/PKGBUILD create mode 100644 libdmx/PKGBUILD create mode 100644 libdom/PKGBUILD create mode 100644 libdrm-debug/COPYING create mode 100644 libdrm-debug/PKGBUILD create mode 100644 libdrm/COPYING create mode 100644 libdrm/PKGBUILD create mode 100644 libdvbpsi/PKGBUILD create mode 100644 libdvdcss/PKGBUILD create mode 100644 libdvdnav/PKGBUILD create mode 100644 libdvdread/PKGBUILD create mode 100644 libebml/PKGBUILD create mode 100644 libebur128/PKGBUILD create mode 100644 libepoxy/PKGBUILD create mode 100644 liberation-circuit/PKGBUILD create mode 100644 liberation-circuit/libcirc create mode 100644 liberation-circuit/libcirc.desktop create mode 100644 liberation-circuit/libcirc.png create mode 100644 liberation-circuit/liberation-circuit.install create mode 100644 libesmtp/PKGBUILD create mode 100644 libetpan/PKGBUILD create mode 100644 libev/PKGBUILD create mode 100644 libevdev/PKGBUILD create mode 100644 libexif-gtk/PKGBUILD create mode 100644 libexif/PKGBUILD create mode 100644 libfilezilla/PKGBUILD create mode 100644 libfontenc/PKGBUILD create mode 100644 libftdi/PKGBUILD create mode 100644 libftdi/fix_includes_path.patch create mode 100644 libgig/PKGBUILD create mode 100644 libgit2/PKGBUILD create mode 100644 libglade/PKGBUILD create mode 100644 libglade/glade.install create mode 100644 libgnomecanvas/PKGBUILD create mode 100644 libgphoto2/PKGBUILD create mode 100644 libgsf/PKGBUILD create mode 100644 libhubbub/PKGBUILD create mode 100644 libical/PKGBUILD create mode 100644 libice/PKGBUILD create mode 100644 libid3tag/CVE-2008-2109.patch create mode 100644 libid3tag/PKGBUILD create mode 100644 libid3tag/id3tag.pc create mode 100644 libid3tag/libid3tag-gperf.patch create mode 100644 libident/PKGBUILD create mode 100644 libident/libident.pc create mode 100644 libidn/PKGBUILD create mode 100644 libieee1284/PKGBUILD create mode 100644 libieee1284/libieee1284-python3.patch create mode 100644 libieee1284/libieee1284-upstream_python_fix1.patch create mode 100644 libieee1284/libieee1284-upstream_python_fix2.patch create mode 100644 libimagequant/PKGBUILD create mode 100644 libinfinity/PKGBUILD create mode 100644 libinih/PKGBUILD create mode 100644 libinstpatch/PKGBUILD create mode 100644 libiptcdata/PKGBUILD create mode 100644 libircclient/PKGBUILD create mode 100644 libiscsi/PKGBUILD create mode 100644 libisoburn/PKGBUILD create mode 100644 libisofs/PKGBUILD create mode 100644 libjpeg-turbo/COPYING.BSD3 create mode 100644 libjpeg-turbo/COPYING.IJG create mode 100644 libjpeg-turbo/COPYING.ZLIB create mode 100644 libjpeg-turbo/PKGBUILD create mode 100644 libkate/0001-Fix-automake-warnings.patch create mode 100644 libkate/PKGBUILD create mode 100644 libkeybinder3/PKGBUILD create mode 100644 liblo/PKGBUILD create mode 100644 liblockfile/PKGBUILD create mode 100644 liblouis/PKGBUILD create mode 100644 liblrdf/PKGBUILD create mode 100644 libmad/PKGBUILD create mode 100644 libmad/libmad.patch create mode 100644 libmatroska/PKGBUILD create mode 100644 libmcrypt/PKGBUILD create mode 100644 libmd/PKGBUILD create mode 100644 libmicrodns/PKGBUILD create mode 100644 libmikmod/PKGBUILD create mode 100644 libmikmod/cmake-man.patch create mode 100644 libmilter/PKGBUILD create mode 100644 libmms/PKGBUILD create mode 100644 libmng/PKGBUILD create mode 100644 libmodplug/PKGBUILD create mode 100644 libmp3splt/PKGBUILD create mode 100644 libmp3splt/properly-zero-initialise-the-ogg-and-vorbis-state.patch create mode 100644 libmp4v2/PKGBUILD create mode 100644 libmpack/PKGBUILD create mode 100644 libmpdclient/PKGBUILD create mode 100644 libmpeg2/PKGBUILD create mode 100644 libmpeg2/libmpeg2-0.5.1-gcc4.6.patch create mode 100644 libmtp/PKGBUILD create mode 100644 libmypaint/PKGBUILD create mode 100644 libnatpmp/PKGBUILD create mode 100644 libnet/PKGBUILD create mode 100644 libnetfilter_acct/PKGBUILD create mode 100644 libnetfilter_log/PKGBUILD create mode 100644 libnetfilter_queue/PKGBUILD create mode 100644 libnewt/PKGBUILD create mode 100644 libnfs/PKGBUILD create mode 100644 libnids/PKGBUILD create mode 100644 libnsbmp/PKGBUILD create mode 100644 libnsgif/PKGBUILD create mode 100644 libnsutils/PKGBUILD create mode 100644 libofx/PKGBUILD create mode 100644 libogg/PKGBUILD create mode 100644 libolm/PKGBUILD create mode 100644 libopenmpt/PKGBUILD create mode 100644 libopusenc/PKGBUILD create mode 100644 libotr/PKGBUILD create mode 100644 libots/PKGBUILD create mode 100644 libots/remove-gtk-doc.patch create mode 100644 libpaper/PKGBUILD create mode 100644 libparserutils/PKGBUILD create mode 100644 libpciaccess/PKGBUILD create mode 100644 libpeas/PKGBUILD create mode 100644 libpgm/PKGBUILD create mode 100644 libplacebo/PKGBUILD create mode 100644 libpng/PKGBUILD create mode 100644 libpng12/PKGBUILD create mode 100644 libproxy/PKGBUILD create mode 100644 libquicktime/PKGBUILD create mode 100644 libquicktime/libquicktime-1.2.4-faad2.patch create mode 100644 libraqm/PKGBUILD create mode 100644 libraw/PKGBUILD create mode 100644 libreoffice-l10n/LICENSE create mode 100644 libreoffice-l10n/PKGBUILD create mode 100644 libreoffice-legacy/PKGBUILD create mode 100644 libreoffice-legacy/help-libreoffice-languages.js create mode 100644 libreoffice-legacy/libreoffice.csh create mode 100644 libreoffice-legacy/libreoffice.sh create mode 100644 libreoffice-legacy/template-soffice.desktop.in create mode 100644 librep/PKGBUILD create mode 100644 libreplaygain/LICENSE create mode 100644 libreplaygain/PKGBUILD create mode 100644 libretools/PKGBUILD create mode 100644 libretools/doas.patch create mode 100644 libretools/gettext-tiny.patch create mode 100644 libretools/hyperbola.patch create mode 100644 libretools/libretools.install create mode 100644 libretools/remove-systemd_stdin_hack.patch create mode 100644 librsvg-legacy/PKGBUILD create mode 100644 librsync/PKGBUILD create mode 100644 libsamplerate/PKGBUILD create mode 100644 libsass/PKGBUILD create mode 100644 libsbsms/PKGBUILD create mode 100644 libsidplay/PKGBUILD create mode 100644 libsidplay/g++-6_build.patch create mode 100644 libsidplay/libsidplay-1.36.59-gcc43.patch create mode 100644 libsidplayfp/PKGBUILD create mode 100644 libsigc++/PKGBUILD create mode 100644 libsigsev/PKGBUILD create mode 100644 libslirp/PKGBUILD create mode 100644 libsm/PKGBUILD create mode 100644 libsndfile/PKGBUILD create mode 100644 libsndfile/sndio.patch create mode 100644 libsodium/PKGBUILD create mode 100644 libsoup/CVE-2024-52531-1.patch create mode 100644 libsoup/PKGBUILD create mode 100644 libsoxr/PKGBUILD create mode 100644 libspectre/PKGBUILD create mode 100644 libspf2/PKGBUILD create mode 100644 libspiro/PKGBUILD create mode 100644 libsquish/PKGBUILD create mode 100644 libsquish/libsquish-pkgconfig.pc create mode 100644 libssh/PKGBUILD create mode 100644 libstrophe/PKGBUILD create mode 100644 libtar/PKGBUILD create mode 100644 libtermkey/PKGBUILD create mode 100644 libthai/PKGBUILD create mode 100644 libtheora/PKGBUILD create mode 100644 libtheora/libtheora-1.1.1-libpng16.patch create mode 100644 libtiff/PKGBUILD create mode 100644 libtiger/PKGBUILD create mode 100644 libtorrent/PKGBUILD create mode 100644 libunibreak/PKGBUILD create mode 100644 libuninameslist/PKGBUILD create mode 100644 libunwind/PKGBUILD create mode 100644 libupnp/PKGBUILD create mode 100644 libusb-compat/PKGBUILD create mode 100644 libutempter/PKGBUILD create mode 100644 libutf8proc/PKGBUILD create mode 100644 libuv/PKGBUILD create mode 100644 libvisual/PKGBUILD create mode 100644 libvisual/libvisual-0.4.0-inlinedefineconflict.patch create mode 100644 libvncserver/PKGBUILD create mode 100644 libvoikko/PKGBUILD create mode 100644 libvorbis/PKGBUILD create mode 100644 libvterm/PKGBUILD create mode 100644 libwapcaplet/PKGBUILD create mode 100644 libwnck3/PKGBUILD create mode 100644 libx11/PKGBUILD create mode 100644 libxau/PKGBUILD create mode 100644 libxaw/PKGBUILD create mode 100644 libxaw3d/PKGBUILD create mode 100644 libxcb/PKGBUILD create mode 100644 libxcb/libxcb-1.14-no-missing-man-subdir.patch create mode 100644 libxcomposite/PKGBUILD create mode 100644 libxcursor/PKGBUILD create mode 100644 libxcursor/index.theme create mode 100644 libxdamage/PKGBUILD create mode 100644 libxdg-basedir/PKGBUILD create mode 100644 libxdmcp/PKGBUILD create mode 100644 libxext/PKGBUILD create mode 100644 libxfixes/PKGBUILD create mode 100644 libxfont2/PKGBUILD create mode 100644 libxft/PKGBUILD create mode 100644 libxft/add-libbsd-support.patch create mode 100644 libxi/PKGBUILD create mode 100644 libxinerama/PKGBUILD create mode 100644 libxkbcommon/PKGBUILD create mode 100644 libxkbfile/PKGBUILD create mode 100644 libxkbui/COPYING create mode 100644 libxkbui/PKGBUILD create mode 100644 libxklavier/PKGBUILD create mode 100644 libxklavier/remove-gtk-doc.patch create mode 100644 libxml++/PKGBUILD create mode 100644 libxml2/CVE-2025-32414.patch create mode 100644 libxml2/CVE-2025-32415.patch create mode 100644 libxml2/PKGBUILD create mode 100644 libxml2/libxml2-2.9.8-python3-unicode-errors.patch create mode 100644 libxmlrpc/PKGBUILD create mode 100644 libxmp/PKGBUILD create mode 100644 libxmu/PKGBUILD create mode 100644 libxp/PKGBUILD create mode 100644 libxp/add-proto-files.patch create mode 100644 libxpm/PKGBUILD create mode 100644 libxpresent/PKGBUILD create mode 100644 libxrandr/PKGBUILD create mode 100644 libxrender/PKGBUILD create mode 100644 libxres/PKGBUILD create mode 100644 libxshmfence/PKGBUILD create mode 100644 libxshmfence/remove-forced-openbsd-futex-support.patch create mode 100644 libxslt/PKGBUILD create mode 100644 libxss/PKGBUILD create mode 100644 libxt/PKGBUILD create mode 100644 libxtrans/PKGBUILD create mode 100644 libxtst/PKGBUILD create mode 100644 libxv/PKGBUILD create mode 100644 libxvmc/PKGBUILD create mode 100644 libxxf86dga/PKGBUILD create mode 100644 libxxf86vm/PKGBUILD create mode 100644 libyaml/PKGBUILD create mode 100644 libytnef/PKGBUILD create mode 100644 libzip/PKGBUILD create mode 100644 lighttpd/PKGBUILD create mode 100644 lighttpd/lighttpd.conf create mode 100644 lighttpd/lighttpd.confd create mode 100644 lighttpd/lighttpd.initd create mode 100644 lighttpd/lighttpd.logrotate.d create mode 100644 lighttpd/lighttpd.run create mode 100644 lilv/PKGBUILD create mode 100644 link-grammar/PKGBUILD create mode 100644 lirc/PKGBUILD create mode 100644 lirc/irexec.conf create mode 100644 lirc/irexec.confd create mode 100644 lirc/irexec.initd create mode 100644 lirc/irexec.run create mode 100644 lirc/lirc.logrotate create mode 100644 lirc/lircd.conf create mode 100644 lirc/lircd.confd create mode 100644 lirc/lircd.initd create mode 100644 lirc/lircd.run create mode 100644 lirc/lircmd.initd create mode 100644 lirc/lircmd.run create mode 100644 lite/PKGBUILD create mode 100644 lite/lite-path-fix.patch create mode 100644 llvm/PKGBUILD create mode 100644 llvm/llvm-config.h create mode 100644 llvm/stack-clash-fixes.patch create mode 100644 lmarbles/PKGBUILD create mode 100644 lmdb/PKGBUILD create mode 100644 lmdb/lmdb.pc create mode 100644 lmms/PKGBUILD create mode 100644 lmms/remove_leftover_entries_containing_nonlibre_demo_files.patch create mode 100644 lockdev/PKGBUILD create mode 100644 lockdev/build.patch create mode 100644 lockdev/gcc-4.7.patch create mode 100644 lockdev/lockdev.install create mode 100644 lockfile-progs/PKGBUILD create mode 100644 loudmouth/PKGBUILD create mode 100644 lpsolve/PKGBUILD create mode 100644 lpsolve/flags.patch create mode 100644 lrzip/PKGBUILD create mode 100644 lsdvd/PKGBUILD create mode 100644 lsof/PKGBUILD create mode 100644 lsof/license.txt create mode 100644 ltris/PKGBUILD create mode 100644 ltris/ltris.desktop create mode 100644 ltris/ltris.install create mode 100644 ltris2/PKGBUILD create mode 100644 ltris2/ltris2.install create mode 100644 lua-dbi/PKGBUILD create mode 100644 lua-dbi/remove-mariadb.patch create mode 100644 lua-expat/PKGBUILD create mode 100644 lua-filesystem/LICENSE create mode 100644 lua-filesystem/PKGBUILD create mode 100644 lua-lgi/PKGBUILD create mode 100644 lua-lpeg/LICENSE create mode 100644 lua-lpeg/PKGBUILD create mode 100644 lua-mpack/PKGBUILD create mode 100644 lua-penlight/PKGBUILD create mode 100644 lua-sec/PKGBUILD create mode 100644 lua-socket/PKGBUILD create mode 100644 lua-socket/fix-library.patch create mode 100644 lua/LICENSE create mode 100644 lua/PKGBUILD create mode 100644 lua/liblua.so.patch create mode 100644 lua/lua.pc create mode 100644 lua51/PKGBUILD create mode 100644 lua51/lua-arch.patch create mode 100644 lua52/LICENSE create mode 100644 lua52/PKGBUILD create mode 100644 lua52/liblua.so.patch create mode 100644 lua52/lua.pc create mode 100644 luajit-openresty/PKGBUILD create mode 100644 luajit/PKGBUILD create mode 100644 luakit/PKGBUILD create mode 100644 luakit/libre.patch create mode 100644 lugaru/PKGBUILD create mode 100644 lugaru/lugaru.desktop create mode 100644 lugaru/lugaru.png create mode 100644 lumina/PKGBUILD create mode 100644 lumina/boot-splash.patch create mode 100644 lumina/distributor-logo-dark.svg create mode 100644 lumina/distributor-logo-light.svg create mode 100644 lumina/libre.patch create mode 100644 lumina/remove-xscreensaver-support.patch create mode 100644 lv2/PKGBUILD create mode 100644 lxappearance-obconf-gtk2/PKGBUILD create mode 100644 lxappearance-obconf/PKGBUILD create mode 100644 lxappearance/PKGBUILD create mode 100644 lxdm-theme-hyperbola/PKGBUILD create mode 100644 lxdm-theme-hyperbola/lxdm-theme-hyperbola.install create mode 100644 lxdm/PKGBUILD create mode 100644 lxdm/git-fixes.patch create mode 100644 lxdm/lxdm.initd create mode 100644 lxdm/lxdm.run create mode 100644 lxdm/set-path.patch create mode 100644 lxmusic/PKGBUILD create mode 100644 lxrandr/PKGBUILD create mode 100644 lxtask/PKGBUILD create mode 100644 lxtask/lxtask.desktop create mode 100644 lxtask/lxtask.png create mode 100644 lxterminal-gtk2/PKGBUILD create mode 100644 lxterminal/PKGBUILD create mode 100644 lynx/PKGBUILD create mode 100644 lzop/PKGBUILD create mode 100644 macchanger/PKGBUILD create mode 100644 mailcap/PKGBUILD create mode 100644 mailgraph/PKGBUILD create mode 100644 mailgraph/mailgraph.confd create mode 100644 mailgraph/mailgraph.initd create mode 100644 mailgraph/mailgraph.install create mode 100644 mailutils/PKGBUILD create mode 100644 mailutils/fix-build-mb-len-max.patch create mode 100644 maim/PKGBUILD create mode 100644 maim/fix-build-without-libwebp.patch create mode 100644 mallard-ducktype/PKGBUILD create mode 100644 markmywords/PKGBUILD create mode 100644 markmywords/appdata.patch create mode 100644 markmywords/discount.patch create mode 100644 materia-gtk-theme/PKGBUILD create mode 100644 mc/PKGBUILD create mode 100644 mcabber/PKGBUILD create mode 100644 mcpp/PKGBUILD create mode 100644 md4c/PKGBUILD create mode 100644 meandmyshadow/PKGBUILD create mode 100644 mednafen/PKGBUILD create mode 100644 mednaffe/PKGBUILD create mode 100644 megaglest/PKGBUILD create mode 100644 megaglest/remove-xvfb-run.patch create mode 100644 meld/PKGBUILD create mode 100644 mercurial/PKGBUILD create mode 100644 mercurial/mercurial.profile create mode 100644 mesa-demos/LICENSE create mode 100644 mesa-demos/PKGBUILD create mode 100644 mesa-demos/libre.patch create mode 100644 mesa/LICENSE create mode 100644 mesa/PKGBUILD create mode 100644 mesa/drirc create mode 100644 meson/PKGBUILD create mode 100644 meson/hyperbola-meson create mode 100644 metalog/PKGBUILD create mode 100644 metalog/metalog.confd create mode 100644 metalog/metalog.initd create mode 100644 metalog/metalog.run create mode 100644 metis/PKGBUILD create mode 100644 mg/PKGBUILD create mode 100644 mgba/PKGBUILD create mode 100644 mgba/mgba.desktop create mode 100644 mhash/PKGBUILD create mode 100644 micropolis/PKGBUILD create mode 100644 micropolis/fhs-compliant.patch create mode 100644 micropolis/fix-hostname.patch create mode 100644 minimodem/PKGBUILD create mode 100644 minisign/PKGBUILD create mode 100644 miniupnpc/PKGBUILD create mode 100644 mirage/PKGBUILD create mode 100644 mirage/exif.c create mode 100644 mirage/exif.patch create mode 100644 mjpegtools/PKGBUILD create mode 100644 mk-configure/PKGBUILD create mode 100644 mkclean/PKGBUILD create mode 100644 mkisolinux/LICENSE create mode 100644 mkisolinux/PKGBUILD create mode 100644 mkisolinux/boot.msg create mode 100755 mkisolinux/mkisolinux create mode 100644 mkisolinux/mkisolinux.conf create mode 100644 mkisolinux/options.msg create mode 100644 mkpxelinux/LICENSE create mode 100644 mkpxelinux/PKGBUILD create mode 100644 mkpxelinux/boot.msg create mode 100755 mkpxelinux/mkpxelinux create mode 100644 mkpxelinux/mkpxelinux.conf create mode 100644 mkpxelinux/options.msg create mode 100644 mksyslinux/LICENSE create mode 100644 mksyslinux/PKGBUILD create mode 100644 mksyslinux/boot.msg create mode 100755 mksyslinux/mksyslinux create mode 100644 mksyslinux/mksyslinux.conf create mode 100644 mksyslinux/options.msg create mode 100644 mktorrent/PKGBUILD create mode 100644 mkvalidator/PKGBUILD create mode 100644 mkvtoolnix/PKGBUILD create mode 100644 mlmmj/PKGBUILD create mode 100644 mm-common/PKGBUILD create mode 100644 mmv/PKGBUILD create mode 100644 moc/PKGBUILD create mode 100644 mocicon/LICENSE create mode 100644 mocicon/PKGBUILD create mode 100644 monit/PKGBUILD create mode 100644 monit/fix-invalid-use-of-vfork.patch create mode 100644 monit/fix-monitrc.patch create mode 100644 monit/fix-webinterface.patch create mode 100644 monit/monit.initd create mode 100644 monit/monit.run create mode 100644 monit/monitrc.patch create mode 100644 moreutils/PKGBUILD create mode 100644 mp3gain/PKGBUILD create mode 100644 mp3info/PKGBUILD create mode 100644 mp3info/gmp3info.desktop create mode 100644 mp3info/gmp3info.png create mode 100644 mp3splt-gtk/PKGBUILD create mode 100644 mp3splt/PKGBUILD create mode 100644 mp3wrap/PKGBUILD create mode 100644 mpd/PKGBUILD create mode 100644 mpd/mpd.conf create mode 100644 mpd/mpd.initd create mode 100644 mpd/mpd.install create mode 100644 mpd/mpd.run create mode 100644 mpdecimal/PKGBUILD create mode 100644 mpg123/PKGBUILD create mode 100644 mplayer/PKGBUILD create mode 100644 mplayer/fix-libmpcodecs-ad_spdif_ffmpeg44.patch create mode 100644 mplayer/mplayer.desktop create mode 100644 mplayer/revert-icl-fixes.patch create mode 100644 mpop/PKGBUILD create mode 100644 mpop/mpop.install create mode 100644 mpv-legacy/PKGBUILD create mode 100644 mpv-legacy/remove-ytdl.patch create mode 100644 mscgen/PKGBUILD create mode 100644 msgpack-c/PKGBUILD create mode 100644 msmtp/PKGBUILD create mode 100644 mtdev/PKGBUILD create mode 100644 mtools/PKGBUILD create mode 100644 mupdf/PKGBUILD create mode 100644 muse/PKGBUILD create mode 100644 musepack/PKGBUILD create mode 100644 mustach/PKGBUILD create mode 100644 mustpl/PKGBUILD create mode 100644 mutt/PKGBUILD create mode 100644 mxml/PKGBUILD create mode 100644 mygui/PKGBUILD create mode 100644 mygui/mygui.install create mode 100644 mypaint-brushes/PKGBUILD create mode 100644 mypaint-brushes1/PKGBUILD create mode 100644 mypaint/PKGBUILD create mode 100644 mypy/PKGBUILD create mode 100644 naev/PKGBUILD create mode 100644 nasm/PKGBUILD create mode 100644 nbd/PKGBUILD create mode 100644 nbd/config create mode 100644 nbd/nbd-client.confd create mode 100644 nbd/nbd-client.initd create mode 100644 nbd/nbd-server.confd create mode 100644 nbd/nbd-server.initd create mode 100644 nbd/nbd.install create mode 100644 ncdu/PKGBUILD create mode 100644 ncmpc-legacy/PKGBUILD create mode 100644 ncmpcpp/PKGBUILD create mode 100644 ncompress/PKGBUILD create mode 100644 nedit/PKGBUILD create mode 100644 neomutt/PKGBUILD create mode 100644 neon/PKGBUILD create mode 100644 nestopia/PKGBUILD create mode 100644 net-snmp/PKGBUILD create mode 100644 net-snmp/snmpd.confd create mode 100644 net-snmp/snmpd.initd create mode 100644 net-snmp/snmptrapd.confd create mode 100644 net-snmp/snmptrapd.initd create mode 100644 nethogs/PKGBUILD create mode 100644 netpbm/PKGBUILD create mode 100644 netpbm/netpbm-CAN-2005-2471.patch create mode 100644 netpbm/netpbm-libre-security-code.patch create mode 100644 netpbm/netpbm-security-scripts.patch create mode 100644 netsurf-buildsystem/PKGBUILD create mode 100644 netsurf/PKGBUILD create mode 100644 netsurf/libre.patch create mode 100644 netsurf/netsurf.sh create mode 100644 neverball/PKGBUILD create mode 100644 nexuiz-classic/PKGBUILD create mode 100755 nexuiz-classic/nexuiz create mode 100755 nexuiz-classic/nexuiz-server create mode 100644 nghttp2/PKGBUILD create mode 100644 nghttp2/nghttpx.initd create mode 100644 nghttp2/nghttpx.run create mode 100644 ngircd/PKGBUILD create mode 100644 ngircd/ngircd.initd create mode 100644 ngircd/ngircd.run create mode 100644 nift/PKGBUILD create mode 100644 nift/libre.patch create mode 100644 ninja/PKGBUILD create mode 100644 nitrogen/PKGBUILD create mode 100644 nload/PKGBUILD create mode 100644 nlohmann-json/PKGBUILD create mode 100644 nmap-legacy/PKGBUILD create mode 100644 nml/PKGBUILD create mode 100644 nnn/PKGBUILD create mode 100644 normalize/PKGBUILD create mode 100644 notion/PKGBUILD create mode 100644 notmuch/PKGBUILD create mode 100644 notmuch/notmuch.install create mode 100644 nq/PKGBUILD create mode 100644 nsgenbind/PKGBUILD create mode 100644 nsxiv/PKGBUILD create mode 100644 ntfs-3g/CVE-2023-52890.patch create mode 100644 ntfs-3g/PKGBUILD create mode 100644 ntp/PKGBUILD create mode 100644 ntp/libressl-2.8.patch create mode 100644 ntp/ntp-client.confd create mode 100644 ntp/ntp-client.initd create mode 100644 ntp/ntp.conf create mode 100644 ntp/ntp.install create mode 100644 ntp/ntpd.confd create mode 100644 ntp/ntpd.initd create mode 100644 ntp/sntp.confd create mode 100644 ntp/sntp.initd create mode 100644 numactl/PKGBUILD create mode 100644 numlockx/PKGBUILD create mode 100644 numptyphysics/PKGBUILD create mode 100644 numptyphysics/fhs-compliant.patch create mode 100644 numptyphysics/numptyphysics create mode 100644 nuovext-icon-theme/PKGBUILD create mode 100644 nuovext-icon-theme/nuovext-icon-theme.install create mode 100644 nyx/PKGBUILD create mode 100644 oath-toolkit/PKGBUILD create mode 100644 obconf/02-update-russian-translate.patch create mode 100644 obconf/PKGBUILD create mode 100644 obconf/add-missing-keywords-and-translations.patch create mode 100644 obconf/stop-using-libglade.patch create mode 100644 obconf/switch-to-gtk3.patch create mode 100644 obmenu-generator/PKGBUILD create mode 100644 obmenu-generator/obmenu-generator.install create mode 100644 obmenu/PKGBUILD create mode 100644 obmenu/fix-build.patch create mode 100644 obmenu2/PKGBUILD create mode 100644 obmenu2/obmenu2.desktop create mode 100644 obmenu2/obmenu2.png create mode 100644 ocaml/PKGBUILD create mode 100644 ocrad/PKGBUILD create mode 100644 ode/PKGBUILD create mode 100644 ogmtools/PKGBUILD create mode 100644 oksh/PKGBUILD create mode 100644 oksh/oksh.install create mode 100644 onak/PKGBUILD create mode 100644 onak/fix-postgresql-build.patch create mode 100644 onak/onak-keyd.conf create mode 100644 onak/onak-keyd.confd create mode 100644 onak/onak-keyd.initd create mode 100644 onak/onak-keyd.run create mode 100644 onak/onak.install create mode 100644 onak/onak.logrotate.d create mode 100644 oniguruma/PKGBUILD create mode 100644 onioncat/PKGBUILD create mode 100644 onioncat/ocat.confd create mode 100644 onioncat/ocat.initd create mode 100644 onioncat/onioncat.install create mode 100644 oolite/PKGBUILD create mode 100644 oolite/oolite create mode 100644 openal/PKGBUILD create mode 100644 openal/alsoft_gnu+linux.conf create mode 100644 openal/alsoft_hyperbolabsd.conf create mode 100644 openal/openal.install create mode 100644 openarena/PKGBUILD create mode 100644 openarena/openarena-runner.sh create mode 100644 openarena/openarena-server.desktop create mode 100644 openarena/openarena-server.png create mode 100644 openarena/openarena.desktop create mode 100644 openarena/openarena.png create mode 100644 openblas/PKGBUILD create mode 100644 openbox/PKGBUILD create mode 100644 openbox/libre.patch create mode 100644 openbsd-netcat/PKGBUILD create mode 100644 openbsd-telnet/PKGBUILD create mode 100644 opendbx/PKGBUILD create mode 100644 opendkim/PKGBUILD create mode 100644 opendkim/opendkim.conf create mode 100644 opendkim/opendkim.confd create mode 100644 opendkim/opendkim.initd create mode 100644 opendkim/opendkim.install create mode 100644 opendkim/opendkim.run create mode 100644 openjade/PKGBUILD create mode 100644 openjade/openjade.install create mode 100644 openjpeg2/PKGBUILD create mode 100644 openmotif/PKGBUILD create mode 100644 openmpi/PKGBUILD create mode 100644 openntpd/PKGBUILD create mode 100644 openntpd/ntp-user.patch create mode 100644 openntpd/ntpd.conf create mode 100644 openntpd/ntpd.conf.libre create mode 100644 openntpd/ntpd.confd create mode 100644 openntpd/ntpd.initd create mode 100644 openntpd/ntpd.run create mode 100644 openntpd/openntpd.install create mode 100644 openrsync/PKGBUILD create mode 100644 openscenegraph/PKGBUILD create mode 100644 openslp/PKGBUILD create mode 100644 openslp/openslp-2.0.0-null-pointer-deref.patch create mode 100644 openslp/openslp-2.0.0-openssl-1.1-fix.patch create mode 100644 openslp/slpd.initd create mode 100644 openslp/slpd.run create mode 100644 opensmtpd-filter-rspamd/PKGBUILD create mode 100644 opensmtpd-filter-senderscore/PKGBUILD create mode 100644 opensmtpd/PKGBUILD create mode 100644 opensmtpd/opensmtpd.install create mode 100644 opensmtpd/smtpd.initd create mode 100644 opensmtpd/smtpd.run create mode 100644 opensp/PKGBUILD create mode 100644 openttd-legacy/PKGBUILD create mode 100644 openttd-legacy/remove-online-content.patch create mode 100644 openttd-opengfx/PKGBUILD create mode 100644 openttd-openmsx/PKGBUILD create mode 100644 openttd-opensfx/PKGBUILD create mode 100644 openvi/PKGBUILD create mode 100644 opmsg/PKGBUILD create mode 100644 optipng/PKGBUILD create mode 100644 opus-tools/PKGBUILD create mode 100644 opus/PKGBUILD create mode 100644 opusfile/PKGBUILD create mode 100644 orc/PKGBUILD create mode 100644 os-prober/PKGBUILD create mode 100644 ossp/PKGBUILD create mode 100644 ossp/osspd.confd create mode 100644 ossp/osspd.initd create mode 100644 ossp/osspd.modulesd create mode 100644 ossp/remove-pulseaudio-support.patch create mode 100644 p7zip/PKGBUILD create mode 100644 p7zip/libre.patch create mode 100644 p7zip/libre_doc.patch create mode 100644 p7zip/p7zip.install create mode 100644 pango/PKGBUILD create mode 100644 pangomm/PKGBUILD create mode 100644 pangox-compat/PKGBUILD create mode 100644 pangox-compat/disable-shaper.patch create mode 100644 par2cmdline/PKGBUILD create mode 100644 parallel/PKGBUILD create mode 100644 parcellite/PKGBUILD create mode 100644 parcellite/fix-crash.patch create mode 100644 parcellite/remove-unused-des-and-add-missing-keywords.patch create mode 100644 parted/PKGBUILD create mode 100644 partimage/PKGBUILD create mode 100644 partimage/partimage-0.6.9-zlib-1.2.6.patch create mode 100644 partimage/partimage.install create mode 100644 partimage/partimaged-gencrt create mode 100644 partimage/partimaged.confd create mode 100644 partimage/partimaged.initd create mode 100644 partimage/use-SSLv3-by-default.patch create mode 100644 pass-otp/PKGBUILD create mode 100644 password-store/PKGBUILD create mode 100644 patchutils/PKGBUILD create mode 100644 pax/PKGBUILD create mode 100644 pbzip2/PKGBUILD create mode 100644 pcc/PKGBUILD create mode 100644 pcmemtest/60_pcmemtest create mode 100644 pcmemtest/PKGBUILD create mode 100644 pcmemtest/pcmemtest-install create mode 100644 pcsxr-pgxp/PKGBUILD create mode 100644 pcsxr-pgxp/fix-pango.patch create mode 100644 pdfmixtool/PKGBUILD create mode 100644 peek/PKGBUILD create mode 100644 pekka-kana-2/PKGBUILD create mode 100644 perl-algorithm-diff/LICENSE create mode 100644 perl-algorithm-diff/PKGBUILD create mode 100644 perl-alien-sdl/PKGBUILD create mode 100644 perl-anyevent-i3/PKGBUILD create mode 100644 perl-anyevent/PKGBUILD create mode 100644 perl-archive-cpio/LICENSE create mode 100644 perl-archive-cpio/PKGBUILD create mode 100644 perl-archive-extract/LICENSE create mode 100644 perl-archive-extract/PKGBUILD create mode 100644 perl-archive-zip/LICENSE create mode 100644 perl-archive-zip/PKGBUILD create mode 100644 perl-berkeleydb/PKGBUILD create mode 100644 perl-bit-vector/PKGBUILD create mode 100644 perl-bytes-random-secure/LICENSE create mode 100644 perl-bytes-random-secure/PKGBUILD create mode 100644 perl-cairo-gobject/PKGBUILD create mode 100644 perl-canary-stability/PKGBUILD create mode 100644 perl-capture-tiny/PKGBUILD create mode 100644 perl-carp-clan/PKGBUILD create mode 100644 perl-cgi/LICENSE create mode 100644 perl-cgi/PKGBUILD create mode 100644 perl-class-data-inheritable/LICENSE create mode 100644 perl-class-data-inheritable/PKGBUILD create mode 100644 perl-class-inspector/PKGBUILD create mode 100644 perl-clone/LICENSE create mode 100644 perl-clone/PKGBUILD create mode 100644 perl-common-sense/PKGBUILD create mode 100644 perl-compress-bzip2/PKGBUILD create mode 100644 perl-crypt-libressl-bignum/PKGBUILD create mode 100644 perl-crypt-libressl-guess/PKGBUILD create mode 100644 perl-crypt-libressl-random/PKGBUILD create mode 100644 perl-crypt-libressl-rsa/PKGBUILD create mode 100644 perl-crypt-passwdmd5/PKGBUILD create mode 100644 perl-crypt-random-seed/PKGBUILD create mode 100644 perl-crypt-random-tesha2/PKGBUILD create mode 100644 perl-curses/PKGBUILD create mode 100644 perl-data-dump/COPYING create mode 100644 perl-data-dump/PKGBUILD create mode 100644 perl-data-optlist/PKGBUILD create mode 100644 perl-date-calc/PKGBUILD create mode 100644 perl-datetime-locale/PKGBUILD create mode 100644 perl-dbi/PKGBUILD create mode 100644 perl-devel-checklib/COPYING create mode 100644 perl-devel-checklib/PKGBUILD create mode 100644 perl-devel-stacktrace/PKGBUILD create mode 100644 perl-devel-symdump/COPYING create mode 100644 perl-devel-symdump/PKGBUILD create mode 100644 perl-digest-hmac/PKGBUILD create mode 100644 perl-digest-nilsimsa/PKGBUILD create mode 100644 perl-digest-sha1/LICENSE create mode 100644 perl-digest-sha1/PKGBUILD create mode 100644 perl-encode-locale/COPYING create mode 100644 perl-encode-locale/PKGBUILD create mode 100644 perl-error/PKGBUILD create mode 100644 perl-eval-closure/PKGBUILD create mode 100644 perl-event-execflow/LICENSE create mode 100644 perl-event-execflow/PKGBUILD create mode 100644 perl-exception-class/PKGBUILD create mode 100644 perl-exporter-tiny/PKGBUILD create mode 100644 perl-extutils-config/PKGBUILD create mode 100644 perl-extutils-depends/PKGBUILD create mode 100644 perl-extutils-helpers/PKGBUILD create mode 100644 perl-extutils-installpaths/PKGBUILD create mode 100644 perl-extutils-pkgconfig/PKGBUILD create mode 100644 perl-file-basedir/LICENSE create mode 100644 perl-file-basedir/PKGBUILD create mode 100644 perl-file-desktopentry/PKGBUILD create mode 100644 perl-file-listing/COPYING create mode 100644 perl-file-listing/PKGBUILD create mode 100644 perl-file-mimetype/PKGBUILD create mode 100644 perl-file-sharedir-install/PKGBUILD create mode 100644 perl-file-sharedir/PKGBUILD create mode 100644 perl-file-slurp-tiny/PKGBUILD create mode 100644 perl-file-slurp/LICENSE create mode 100644 perl-file-slurp/PKGBUILD create mode 100644 perl-file-tail/PKGBUILD create mode 100644 perl-file-which/PKGBUILD create mode 100644 perl-font-ttf/PKGBUILD create mode 100644 perl-glib-object-introspection/PKGBUILD create mode 100644 perl-gtk/PKGBUILD create mode 100644 perl-guard/LICENSE create mode 100644 perl-guard/PKGBUILD create mode 100644 perl-html-parser/COPYING create mode 100644 perl-html-parser/PKGBUILD create mode 100644 perl-html-tagset/COPYING create mode 100644 perl-html-tagset/PKGBUILD create mode 100644 perl-http-cookies/PKGBUILD create mode 100644 perl-http-daemon/PKGBUILD create mode 100644 perl-http-date/PKGBUILD create mode 100644 perl-http-message/PKGBUILD create mode 100644 perl-http-negotiate/COPYING create mode 100644 perl-http-negotiate/PKGBUILD create mode 100644 perl-image-exiftool/LICENSE create mode 100644 perl-image-exiftool/PKGBUILD create mode 100644 perl-inc-latest/PKGBUILD create mode 100644 perl-io-dirent/LICENSE create mode 100644 perl-io-dirent/PKGBUILD create mode 100644 perl-io-html/PKGBUILD create mode 100644 perl-io-multiplex/LICENSE create mode 100644 perl-io-multiplex/PKGBUILD create mode 100644 perl-io-socket-inet6/COPYING create mode 100644 perl-io-socket-inet6/PKGBUILD create mode 100644 perl-io-socket-ssl/COPYING create mode 100644 perl-io-socket-ssl/PKGBUILD create mode 100644 perl-io-string/COPYING create mode 100644 perl-io-string/PKGBUILD create mode 100644 perl-io-stringy/PKGBUILD create mode 100644 perl-io-tty/PKGBUILD create mode 100644 perl-ipc-run/PKGBUILD create mode 100644 perl-ipc-run3/PKGBUILD create mode 100644 perl-ipc-system-simple/PKGBUILD create mode 100644 perl-json-xs/PKGBUILD create mode 100644 perl-json/COPYING create mode 100644 perl-json/PKGBUILD create mode 100644 perl-lchown/PKGBUILD create mode 100644 perl-libwww/PKGBUILD create mode 100644 perl-linux-desktopfiles/PKGBUILD create mode 100644 perl-list-allutils/PKGBUILD create mode 100644 perl-list-moreutils-xs/PKGBUILD create mode 100644 perl-list-moreutils/PKGBUILD create mode 100644 perl-list-someutils/PKGBUILD create mode 100644 perl-list-utilsby/PKGBUILD create mode 100644 perl-locale-gettext/COPYING create mode 100644 perl-locale-gettext/PKGBUILD create mode 100644 perl-locale-maketext-lexicon/PKGBUILD create mode 100644 perl-lockfile-simple/PKGBUILD create mode 100644 perl-log-agent/LICENSE create mode 100644 perl-log-agent/PKGBUILD create mode 100644 perl-lwp-mediatypes/COPYING create mode 100644 perl-lwp-mediatypes/PKGBUILD create mode 100644 perl-lwp-protocol-https/PKGBUILD create mode 100644 perl-lwp-protocol-https/certs.patch create mode 100644 perl-mail-authenticationresults/PKGBUILD create mode 100644 perl-mail-message/LICENSE create mode 100644 perl-mail-message/PKGBUILD create mode 100644 perl-mail-spf-query/PKGBUILD create mode 100644 perl-mail-spf/PKGBUILD create mode 100644 perl-mailtools/COPYING create mode 100644 perl-mailtools/PKGBUILD create mode 100644 perl-math-random-isaac/PKGBUILD create mode 100644 perl-mime-charset/PKGBUILD create mode 100644 perl-mime-types/LICENSE create mode 100644 perl-mime-types/PKGBUILD create mode 100644 perl-module-build-tiny/PKGBUILD create mode 100644 perl-module-build/COPYING create mode 100644 perl-module-build/PKGBUILD create mode 100644 perl-module-implementation/PKGBUILD create mode 100644 perl-module-runtime/LICENSE create mode 100644 perl-module-runtime/PKGBUILD create mode 100644 perl-net-cidr-lite/PKGBUILD create mode 100644 perl-net-dns-resolver-programmable/PKGBUILD create mode 100644 perl-net-dns/LICENSE create mode 100644 perl-net-dns/PKGBUILD create mode 100644 perl-net-http/PKGBUILD create mode 100644 perl-net-ip/LICENSE create mode 100644 perl-net-ip/PKGBUILD create mode 100644 perl-net-libidn2/PKGBUILD create mode 100644 perl-net-server/PKGBUILD create mode 100644 perl-net-ssleay/PKGBUILD create mode 100644 perl-netaddr-ip/PKGBUILD create mode 100644 perl-par-dist/PKGBUILD create mode 100644 perl-params-util/PKGBUILD create mode 100644 perl-params-validate/PKGBUILD create mode 100644 perl-parse-yapp/LICENSE create mode 100644 perl-parse-yapp/PKGBUILD create mode 100644 perl-path-class/PKGBUILD create mode 100644 perl-perl4-corelibs/LICENSE create mode 100644 perl-perl4-corelibs/PKGBUILD create mode 100644 perl-pod-coverage/COPYING create mode 100644 perl-pod-coverage/PKGBUILD create mode 100644 perl-role-tiny/PKGBUILD create mode 100644 perl-sdl/PKGBUILD create mode 100644 perl-sgmls/PKGBUILD create mode 100644 perl-socket6/LICENSE.BSD3 create mode 100644 perl-socket6/LICENSE.ISC create mode 100644 perl-socket6/PKGBUILD create mode 100644 perl-sort-versions/PKGBUILD create mode 100644 perl-sub-exporter/PKGBUILD create mode 100644 perl-sub-install/PKGBUILD create mode 100644 perl-sub-override/LICENSE create mode 100644 perl-sub-override/PKGBUILD create mode 100644 perl-sub-uplevel/PKGBUILD create mode 100644 perl-sys-hostname-long/PKGBUILD create mode 100644 perl-term-animation/LICENSE create mode 100644 perl-term-animation/PKGBUILD create mode 100644 perl-term-readkey/COPYING create mode 100644 perl-term-readkey/PKGBUILD create mode 100644 perl-term-readline-gnu/COPYING create mode 100644 perl-term-readline-gnu/PKGBUILD create mode 100644 perl-test-deep/COPYING create mode 100644 perl-test-deep/PKGBUILD create mode 100644 perl-test-differences/LICENSE create mode 100644 perl-test-differences/PKGBUILD create mode 100644 perl-test-exception/LICENSE create mode 100644 perl-test-exception/PKGBUILD create mode 100644 perl-test-fatal/PKGBUILD create mode 100644 perl-test-most/LICENSE create mode 100644 perl-test-most/PKGBUILD create mode 100644 perl-test-needs/PKGBUILD create mode 100644 perl-test-nowarnings/PKGBUILD create mode 100644 perl-test-pod-coverage/COPYING create mode 100644 perl-test-pod-coverage/PKGBUILD create mode 100644 perl-test-pod/COPYING create mode 100644 perl-test-pod/PKGBUILD create mode 100644 perl-test-requiresinternet/PKGBUILD create mode 100644 perl-test-warn/LICENSE create mode 100644 perl-test-warn/PKGBUILD create mode 100644 perl-text-charwidth/COPYING.GPLv1 create mode 100644 perl-text-charwidth/PKGBUILD create mode 100644 perl-text-charwidth/artistic-1.0.txt create mode 100644 perl-text-csv/LICENSE create mode 100644 perl-text-csv/PKGBUILD create mode 100644 perl-text-diff/PKGBUILD create mode 100644 perl-text-patch/PKGBUILD create mode 100644 perl-tie-simple/PKGBUILD create mode 100644 perl-time-duration/PKGBUILD create mode 100644 perl-time-modules/LICENSE create mode 100644 perl-time-modules/PKGBUILD create mode 100644 perl-timedate/COPYING create mode 100644 perl-timedate/PKGBUILD create mode 100644 perl-tk/PKGBUILD create mode 100644 perl-tree-dag-node/PKGBUILD create mode 100644 perl-try-tiny/PKGBUILD create mode 100644 perl-types-serialiser/PKGBUILD create mode 100644 perl-unicode-linebreak/PKGBUILD create mode 100644 perl-uri/PKGBUILD create mode 100644 perl-user-identity/LICENSE create mode 100644 perl-user-identity/PKGBUILD create mode 100644 perl-www-robotrules/COPYING create mode 100644 perl-www-robotrules/PKGBUILD create mode 100644 perl-x11-protocol/PKGBUILD create mode 100644 perl-xml-libxml/PKGBUILD create mode 100644 perl-xml-libxml/perl-xml-libxml.install create mode 100644 perl-xml-namespacesupport/PKGBUILD create mode 100644 perl-xml-parser/COPYING create mode 100644 perl-xml-parser/PKGBUILD create mode 100644 perl-xml-sax-base/LICENSE create mode 100644 perl-xml-sax-base/PKGBUILD create mode 100644 perl-xml-sax-expat/LICENSE create mode 100644 perl-xml-sax-expat/PKGBUILD create mode 100644 perl-xml-sax-expat/perl-xml-sax-expat.install create mode 100644 perl-xml-sax/PKGBUILD create mode 100644 perl-xml-sax/perl-xml-sax.install create mode 100644 perl-xml-simple/PKGBUILD create mode 100644 perl-yaml-libyaml/PKGBUILD create mode 100644 perl-yaml-syck/PKGBUILD create mode 100644 pflogsumm/PKGBUILD create mode 100644 pgbouncer/PKGBUILD create mode 100644 pgbouncer/patch-lib_usual_tls_tls_c.patch create mode 100644 pgbouncer/pgbouncer.confd create mode 100644 pgbouncer/pgbouncer.ini create mode 100644 pgbouncer/pgbouncer.initd create mode 100644 pgbouncer/pgbouncer.install create mode 100644 pgbouncer/pgbouncer.logrotate create mode 100644 phonon-gstreamer/PKGBUILD create mode 100644 phonon-qt-gstreamer/PKGBUILD create mode 100644 phonon-qt/PKGBUILD create mode 100644 phonon/PKGBUILD create mode 100644 phonon/qt-5.4.2.patch create mode 100644 physfs/PKGBUILD create mode 100644 picom/PKGBUILD create mode 100644 pidgin-otr/PKGBUILD create mode 100644 pidgin/PKGBUILD create mode 100644 pidgin/privacy.patch create mode 100644 pigeonhole/PKGBUILD create mode 100644 pigz/PKGBUILD create mode 100644 pinentry-bemenu/PKGBUILD create mode 100644 pinentry-extra/PKGBUILD create mode 100644 pingus/PKGBUILD create mode 100644 pingus/pingus.desktop create mode 100644 pioneer/PKGBUILD create mode 100644 pioneer/fix-build.patch create mode 100644 pitivi/PKGBUILD create mode 100644 pitivi/remove-warning-soft-deps.patch create mode 100644 pixman/PKGBUILD create mode 100644 pixz/PKGBUILD create mode 100644 pkgfile/PKGBUILD create mode 100644 pkgfile/pkgfile.cron.daily create mode 100644 pkgfile/pkgfile.install create mode 100644 plib/PKGBUILD create mode 100644 plotutils/PKGBUILD create mode 100644 pmount-safe-removal/PKGBUILD create mode 100644 pmount-safe-removal/fix-package.patch create mode 100644 pmount/PKGBUILD create mode 100644 pmount/pmount-bash-completion create mode 100644 pmount/pmount_exfat.patch create mode 100644 pmount/pmount_fix-a-careless-segfault-in-debug-mode.patch create mode 100644 pnmixer/PKGBUILD create mode 100644 pnmixer/fix-build.patch create mode 100644 podofo/PKGBUILD create mode 100644 poly2tri-c/PKGBUILD create mode 100644 poppler-data/PKGBUILD create mode 100644 poppler/PKGBUILD create mode 100644 portaudio/PKGBUILD create mode 100644 portaudio/sndio.patch create mode 100644 portmidi/PKGBUILD create mode 100644 portmidi/remove-java-support.patch create mode 100644 portmidi/sndio.patch create mode 100644 portsmf/PKGBUILD create mode 100644 postfix-policyd-spf-perl/PKGBUILD create mode 100644 postfix/PKGBUILD create mode 100644 postfix/aliases.patch create mode 100644 postfix/libressl.patch create mode 100644 postfix/postfix.initd create mode 100644 postfix/postfix.install create mode 100644 postfix/postfix.run create mode 100644 postgresql-old-upgrade/PKGBUILD create mode 100644 postgresql/PKGBUILD create mode 100644 postgresql/postgresql-check-db-dir create mode 100644 postgresql/postgresql-perl-rpath.patch create mode 100644 postgresql/postgresql-run-socket.patch create mode 100644 postgresql/postgresql.conf create mode 100644 postgresql/postgresql.confd create mode 100644 postgresql/postgresql.initd create mode 100644 postgresql/postgresql.install create mode 100644 postgresql/postgresql.logrotate create mode 100644 postgresql/postgresql.run create mode 100644 postgresql/postgresql_log.run create mode 100644 postgrey/PKGBUILD create mode 100644 postgrey/postgrey.confd create mode 100644 postgrey/postgrey.initd create mode 100644 postgrey/postgrey.install create mode 100644 postgrey/postgrey.run create mode 100644 potrace/PKGBUILD create mode 100644 povray/PKGBUILD create mode 100644 pqiv/PKGBUILD create mode 100644 pragha/PKGBUILD create mode 100644 prboom-plus/PKGBUILD create mode 100644 prboom/PKGBUILD create mode 100644 prboom/fix-libpng.patch create mode 100644 premake/PKGBUILD create mode 100644 privoxy/PKGBUILD create mode 100644 privoxy/privoxy.initd create mode 100644 privoxy/privoxy.install create mode 100644 privoxy/privoxy.logrotate.d create mode 100644 privoxy/privoxy.run create mode 100644 profanity/PKGBUILD create mode 100644 proftpd/PKGBUILD create mode 100644 proftpd/proftpd.initd create mode 100644 proftpd/proftpd.install create mode 100644 proftpd/proftpd.logrotate create mode 100644 proftpd/proftpd.run create mode 100644 proj/PKGBUILD create mode 100644 prosody/PKGBUILD create mode 100644 prosody/prosody.initd create mode 100644 prosody/prosody.install create mode 100644 prosody/prosody.logrotated create mode 100644 prosody/prosody.run create mode 100644 proxychains/PKGBUILD create mode 100644 pstoedit/PKGBUILD create mode 100644 pstotext/PKGBUILD create mode 100644 pstotext/copyright create mode 100644 psutils/PKGBUILD create mode 100644 ptlib/MPL-1.0.txt create mode 100644 ptlib/PKGBUILD create mode 100644 ptlib/patch-src_ptclib_pssl_cxx.patch create mode 100644 ptlib/ptlib-2.10.11-bison_fixes-2.patch create mode 100644 ptlib/sndio.patch create mode 100644 publicsuffix/PKGBUILD create mode 100644 pugixml/PKGBUILD create mode 100644 putty/PKGBUILD create mode 100644 putty/putty.desktop create mode 100644 putty/putty.png create mode 100644 putty/putty.xpm create mode 100644 pwgen/PKGBUILD create mode 100644 pyqt-builder/PKGBUILD create mode 100644 python-acme/PKGBUILD create mode 100644 python-appdirs/PKGBUILD create mode 100644 python-asn1crypto/PKGBUILD create mode 100644 python-attrs/PKGBUILD create mode 100644 python-babel/PKGBUILD create mode 100644 python-bcrypt/PKGBUILD create mode 100644 python-beaker/PKGBUILD create mode 100644 python-beautifulsoup4/PKGBUILD create mode 100644 python-bencode/PKGBUILD create mode 100644 python-black/PKGBUILD create mode 100644 python-bleach/PKGBUILD create mode 100644 python-bottle/PKGBUILD create mode 100644 python-captcha/PKGBUILD create mode 100644 python-certifi/PKGBUILD create mode 100644 python-cffi/PKGBUILD create mode 100644 python-chardet/000-support-pytest-4.patch create mode 100644 python-chardet/PKGBUILD create mode 100644 python-click/PKGBUILD create mode 100644 python-commonmark/PKGBUILD create mode 100644 python-configargparse/PKGBUILD create mode 100644 python-configobj/PKGBUILD create mode 100644 python-cppy/PKGBUILD create mode 100644 python-cryptography/PKGBUILD create mode 100644 python-cycler/PKGBUILD create mode 100644 python-cython/PKGBUILD create mode 100644 python-cython/cython-hash-int-conversion.patch create mode 100644 python-dateutil/PKGBUILD create mode 100644 python-defusedxml/PKGBUILD create mode 100644 python-distro/PKGBUILD create mode 100644 python-distutils-extra/PKGBUILD create mode 100644 python-dnspython/PKGBUILD create mode 100644 python-docopt/PKGBUILD create mode 100644 python-docutils/PKGBUILD create mode 100644 python-docutils/tauthon-docutils.install create mode 100644 python-dulwich/PKGBUILD create mode 100644 python-eventlet/PKGBUILD create mode 100644 python-fastecdsa/PKGBUILD create mode 100644 python-fastimport/PKGBUILD create mode 100644 python-fonttools/PKGBUILD create mode 100644 python-future/PKGBUILD create mode 100644 python-gevent/PKGBUILD create mode 100644 python-greenlet/PKGBUILD create mode 100644 python-html5lib/PKGBUILD create mode 100644 python-httplib2/PKGBUILD create mode 100644 python-idna/PKGBUILD create mode 100644 python-imagesize/PKGBUILD create mode 100644 python-ipy/PKGBUILD create mode 100644 python-isodate/PKGBUILD create mode 100644 python-jinja/PKGBUILD create mode 100644 python-josepy/PKGBUILD create mode 100644 python-jsmin/PKGBUILD create mode 100644 python-kiwisolver/PKGBUILD create mode 100644 python-lxml/PKGBUILD create mode 100644 python-m2crypto/PKGBUILD create mode 100644 python-m2crypto/libressl.patch create mode 100644 python-mako/PKGBUILD create mode 100644 python-markdown/PKGBUILD create mode 100644 python-markdown/disable_directory_urls.patch create mode 100644 python-markupsafe/PKGBUILD create mode 100644 python-matplotlib/PKGBUILD create mode 100644 python-mock/PKGBUILD create mode 100644 python-monotonic/PKGBUILD create mode 100644 python-mutagen/PKGBUILD create mode 100644 python-mypy_extensions/PKGBUILD create mode 100644 python-ndg-httpsclient/PKGBUILD create mode 100644 python-nose/PKGBUILD create mode 100644 python-numpy/PKGBUILD create mode 100644 python-packaging/PKGBUILD create mode 100644 python-paramiko/PKGBUILD create mode 100644 python-parsedatetime/PKGBUILD create mode 100644 python-passlib/PKGBUILD create mode 100644 python-pathspec/PKGBUILD create mode 100644 python-patiencediff/PKGBUILD create mode 100644 python-pbr/PKGBUILD create mode 100644 python-pgpdump/PKGBUILD create mode 100644 python-pillow/PKGBUILD create mode 100644 python-ply/PKGBUILD create mode 100644 python-psutil/PKGBUILD create mode 100644 python-psycopg2/PKGBUILD create mode 100644 python-pyasn1/PKGBUILD create mode 100644 python-pycairo/PKGBUILD create mode 100644 python-pychm/PKGBUILD create mode 100644 python-pycparser/PKGBUILD create mode 100644 python-pycryptodome/PKGBUILD create mode 100644 python-pygments/PKGBUILD create mode 100644 python-pygobject/PKGBUILD create mode 100644 python-pyinotify/PKGBUILD create mode 100644 python-pylibacl/PKGBUILD create mode 100644 python-pynacl/PKGBUILD create mode 100644 python-pyopenssl/PKGBUILD create mode 100644 python-pyparsing/PKGBUILD create mode 100644 python-pyparsing/fix-build-without-setuptools.patch create mode 100644 python-pypubsub/PKGBUILD create mode 100644 python-pyqt-sip/PKGBUILD create mode 100644 python-pyqt/PKGBUILD create mode 100644 python-pyrfc3339/PKGBUILD create mode 100644 python-pysmi/PKGBUILD create mode 100644 python-pysnmp/PKGBUILD create mode 100644 python-pysocks/PKGBUILD create mode 100644 python-pysqlite3/PKGBUILD create mode 100644 python-pytz/PKGBUILD create mode 100644 python-pyxattr/PKGBUILD create mode 100644 python-pyxdg/PKGBUILD create mode 100644 python-rdflib/PKGBUILD create mode 100644 python-recommonmark/PKGBUILD create mode 100644 python-recommonmark/recommonmark-disable-math-on-builds.patch create mode 100644 python-recommonmark/recommonmark-sphinx-2.patch create mode 100644 python-regex/PKGBUILD create mode 100644 python-reportlab/PKGBUILD create mode 100644 python-requests-toolbelt/PKGBUILD create mode 100644 python-requests/PKGBUILD create mode 100644 python-requests/certs.patch create mode 100644 python-requests/requests-pytest-5.patch create mode 100644 python-scrypt/PKGBUILD create mode 100644 python-setuptools-scm/PKGBUILD create mode 100644 python-setuptools/PKGBUILD create mode 100644 python-six/PKGBUILD create mode 100644 python-snowballstemmer/PKGBUILD create mode 100644 python-soupsieve/PKGBUILD create mode 100644 python-sphinx-alabaster-theme/PKGBUILD create mode 100644 python-sphinx-argparse/PKGBUILD create mode 100644 python-sphinx/PKGBUILD create mode 100644 python-sphinx_rtd_theme/PKGBUILD create mode 100644 python-sphinxcontrib-applehelp/PKGBUILD create mode 100644 python-sphinxcontrib-devhelp/PKGBUILD create mode 100644 python-sphinxcontrib-htmlhelp/PKGBUILD create mode 100644 python-sphinxcontrib-jsmath/000-fix-mypy-violations-1.patch create mode 100644 python-sphinxcontrib-jsmath/001-fix-mypy-violations-2.patch create mode 100644 python-sphinxcontrib-jsmath/PKGBUILD create mode 100644 python-sphinxcontrib-qthelp/PKGBUILD create mode 100644 python-sphinxcontrib-serializinghtml/PKGBUILD create mode 100644 python-stem/PKGBUILD create mode 100644 python-timeago/PKGBUILD create mode 100644 python-toml/PKGBUILD create mode 100644 python-toml/python-toml-0.10.1-install_type_hints.patch create mode 100644 python-typed-ast/PKGBUILD create mode 100644 python-typing_extensions/PKGBUILD create mode 100644 python-urllib3/PKGBUILD create mode 100644 python-vobject/PKGBUILD create mode 100644 python-webencodings/PKGBUILD create mode 100644 python-wheel/PKGBUILD create mode 100644 python-wxpython/PKGBUILD create mode 100644 python-xattr/PKGBUILD create mode 100644 python-yaml/PKGBUILD create mode 100644 python-zope-component/PKGBUILD create mode 100644 python-zope-event/PKGBUILD create mode 100644 python-zope-interface/PKGBUILD create mode 100644 python/PKGBUILD create mode 100644 pyzor/PKGBUILD create mode 100644 qbe/PKGBUILD create mode 100644 qbs/PKGBUILD create mode 100644 qemu-legacy/65-kvm.rules create mode 100644 qemu-legacy/PKGBUILD create mode 100644 qemu-legacy/qemu-ga.conf create mode 100644 qemu-legacy/qemu-ga.initd create mode 100644 qemu-legacy/qemu-ga.run create mode 100644 qemu-legacy/qemu.install create mode 100644 qemu-legacy/sndio.patch create mode 100644 qhull/PKGBUILD create mode 100644 qiv/PKGBUILD create mode 100644 qlipper/PKGBUILD create mode 100644 qml-box2d/PKGBUILD create mode 100644 qownnotes/PKGBUILD create mode 100644 qpdf/PKGBUILD create mode 100644 qrencode/PKGBUILD create mode 100644 qscintilla/PKGBUILD create mode 100644 qt-base/CVE-2024-39936.patch create mode 100644 qt-base/PKGBUILD create mode 100644 qt-base/kdebug-428095.patch create mode 100644 qt-base/qt-base-cflags.patch create mode 100644 qt-base/qtnetwork-5.15.0-libressl.patch create mode 100644 qt-declarative/PKGBUILD create mode 100644 qt-doc/PKGBUILD create mode 100644 qt-graphicaleffects/PKGBUILD create mode 100644 qt-imageformats/PKGBUILD create mode 100644 qt-multimedia/PKGBUILD create mode 100644 qt-quick3d/PKGBUILD create mode 100644 qt-quick3d/qtquick3d-assimp.patch create mode 100644 qt-quickcontrols/PKGBUILD create mode 100644 qt-quickcontrols2/PKGBUILD create mode 100644 qt-script/PKGBUILD create mode 100644 qt-sensors/PKGBUILD create mode 100644 qt-serialport/PKGBUILD create mode 100644 qt-styleplugins/PKGBUILD create mode 100644 qt-styleplugins/fix-build-against-Qt-5.15.patch create mode 100644 qt-styleplugins/fix-gtk2-background.patch create mode 100644 qt-styleplugins/install.sh create mode 100644 qt-styleplugins/qt-styleplugins.hook create mode 100644 qt-svg/PKGBUILD create mode 100644 qt-tools/PKGBUILD create mode 100644 qt-tools/assistant.desktop create mode 100644 qt-tools/designer.desktop create mode 100644 qt-tools/linguist.desktop create mode 100644 qt-translations/PKGBUILD create mode 100644 qt-webchannel/PKGBUILD create mode 100644 qt-webkit/0001-Let-Bison-generate-the-header-directly-to-fix-build-.patch create mode 100644 qt-webkit/PKGBUILD create mode 100644 qt-websockets/PKGBUILD create mode 100644 qt-x11extras/PKGBUILD create mode 100644 qt-xmlpatterns/PKGBUILD create mode 100644 qt4/PKGBUILD create mode 100644 qt4/assistant-qt4.desktop create mode 100644 qt4/designer-qt4.desktop create mode 100644 qt4/improve-cups-support.patch create mode 100644 qt4/l-qclipboard_delay.patch create mode 100644 qt4/l-qclipboard_fix_recursive.patch create mode 100644 qt4/libressl-2.8.patch create mode 100644 qt4/linguist-qt4.desktop create mode 100644 qt4/moc-boost-workaround.patch create mode 100644 qt4/moc-syslib-workaround.patch create mode 100644 qt4/qt4-gcc6.patch create mode 100644 qt4/qt4-glibc-2.25.patch create mode 100644 qt4/qt4-icu59.patch create mode 100644 qt4/qtconfig-qt4.desktop create mode 100644 qtcreator/PKGBUILD create mode 100644 qtct/PKGBUILD create mode 100644 qtemu/PKGBUILD create mode 100644 qtemu/libre.patch create mode 100644 qtpass/PKGBUILD create mode 100644 quazip/PKGBUILD create mode 100644 quesoglc/PKGBUILD create mode 100644 quota-tools/LICENSE create mode 100644 quota-tools/PKGBUILD create mode 100644 quota-tools/quota.confd create mode 100644 quota-tools/quota.initd create mode 100644 quota-tools/rpc-rquotad.initd create mode 100644 radare2/PKGBUILD create mode 100644 radicale/PKGBUILD create mode 100644 radicale/radicale.initd create mode 100644 radicale/radicale.install create mode 100644 radicale/radicale.run create mode 100644 radisnoir-font/PKGBUILD create mode 100644 ragel/PKGBUILD create mode 100644 rapidjson/PKGBUILD create mode 100644 raptor/PKGBUILD create mode 100644 ratpoison/PKGBUILD create mode 100644 ratpoison/ratpoison.desktop create mode 100644 rawtherapee/PKGBUILD create mode 100644 razor/PKGBUILD create mode 100644 razor/razor-2.85-cosmetic-pv-fix.patch create mode 100644 razor/razor-2.85-makefile-quoting-fix.patch create mode 100644 rcs/PKGBUILD create mode 100644 rdiff-backup/PKGBUILD create mode 100644 rdiff-backup/fix-scm-version.patch create mode 100644 re2c/PKGBUILD create mode 100644 recode/PKGBUILD create mode 100644 recoll/PKGBUILD create mode 100644 recoll/remove-dbus.patch create mode 100644 redo-python/PKGBUILD create mode 100644 redshift/PKGBUILD create mode 100644 refind/PKGBUILD create mode 100644 remind/PKGBUILD create mode 100644 remmina-legacy/PKGBUILD create mode 100644 rep-gtk/PKGBUILD create mode 100644 retry/PKGBUILD create mode 100644 rhash/PKGBUILD create mode 100644 ri-li/PKGBUILD create mode 100644 ri-li/iostream.patch create mode 100644 ri-li/ri-li.desktop create mode 100644 rlwrap/PKGBUILD create mode 100644 rofi-pass/PKGBUILD create mode 100644 rofi/PKGBUILD create mode 100644 roundup/PKGBUILD create mode 100644 routersploit/PKGBUILD create mode 100644 routersploit/routersploit-py38.patch create mode 100644 rox/PKGBUILD create mode 100644 rox/rox.desktop create mode 100644 rox/rox.sh create mode 100644 rox/rox.svg create mode 100644 rp-pppoe/PKGBUILD create mode 100644 rp-pppoe/kmode.patch create mode 100644 rp-pppoe/libre.patch create mode 100644 rp-pppoe/rp-pppoe-3.12-linux-headers.patch create mode 100644 rp-pppoe/rp-pppoe.initd create mode 100644 rp-pppoe/rp-pppoe.install create mode 100644 rpcsvc-proto/PKGBUILD create mode 100644 rrdtool/PKGBUILD create mode 100644 rsnapshot/AC_INIT-version.patch create mode 100644 rsnapshot/PKGBUILD create mode 100644 rsnapshot/rsnapshot create mode 100644 rspamd/PKGBUILD create mode 100644 rspamd/rspamd.confd create mode 100644 rspamd/rspamd.initd create mode 100644 rspamd/rspamd.install create mode 100644 rspamd/rspamd.run create mode 100644 rsync/PKGBUILD create mode 100644 rsync/rsyncd.conf create mode 100644 rsync/rsyncd.confd create mode 100644 rsync/rsyncd.initd create mode 100644 rsync/rsyncd.run create mode 100644 rtorrent/PKGBUILD create mode 100644 ruby-hpricot/PKGBUILD create mode 100644 ruby-kramdown/PKGBUILD create mode 100644 ruby-mini_portile2/PKGBUILD create mode 100644 ruby-mustache/PKGBUILD create mode 100644 ruby-nokogiri/PKGBUILD create mode 100644 ruby-rdiscount/PKGBUILD create mode 100644 ruby-rexml/PKGBUILD create mode 100644 ruby-ronn-ng/PKGBUILD create mode 100644 ruby/CVE-2021-41816.patch create mode 100644 ruby/CVE-2021-41817-1.patch create mode 100644 ruby/CVE-2021-41817-2.patch create mode 100644 ruby/CVE-2021-41817-3.patch create mode 100644 ruby/PKGBUILD create mode 100644 ruby/gemrc create mode 100644 ruby/patch-ext_openssl_extconf_rb.patch create mode 100644 ruby/patch-ext_openssl_openssl_missing_h.patch create mode 100644 ruby/remove-nonfree-ruby-references.patch create mode 100644 ruby/ruby.install create mode 100644 runit-init-scripts/PKGBUILD create mode 100644 runit-init-scripts/runit-init-scripts.install create mode 100644 runit/30-sysctl.hook create mode 100644 runit/PKGBUILD create mode 100644 runit/default-directory-for-services.patch create mode 100644 runit/runit-hook create mode 100644 runit/runit-install.hook create mode 100644 runit/runit-remove.hook create mode 100644 sakura/PKGBUILD create mode 100644 samba/PKGBUILD create mode 100644 samba/nmbd.run create mode 100644 samba/samba.conf.d create mode 100644 samba/samba.install create mode 100644 samba/samba.logrotate create mode 100644 samba/smb.confd create mode 100644 samba/smb.initd create mode 100644 samba/smbd.run create mode 100644 samurai/PKGBUILD create mode 100644 sane/PKGBUILD create mode 100644 sane/fix-build.patch create mode 100644 sane/saned.confd create mode 100644 sane/saned.initd create mode 100644 sane/saned.run create mode 100644 sassc/PKGBUILD create mode 100644 sawfish-themes/PKGBUILD create mode 100644 sawfish/PKGBUILD create mode 100644 sawfish/commands.patch create mode 100644 sbsigntool/PKGBUILD create mode 100644 sbsigntool/libressl.patch create mode 100644 sc/LICENSE create mode 100644 sc/PKGBUILD create mode 100644 scdoc/PKGBUILD create mode 100644 scons/PKGBUILD create mode 100644 scour/PKGBUILD create mode 100644 screen/PKGBUILD create mode 100644 scribus/PKGBUILD create mode 100644 scron/PKGBUILD create mode 100644 scron/fhs-compliant.patch create mode 100644 scron/scron.install create mode 100644 scron/scrond.initd create mode 100644 scron/scrond.run create mode 100644 scrot/PKGBUILD create mode 100644 sdhcp/PKGBUILD create mode 100644 sdl/PKGBUILD create mode 100644 sdl/SDL-1.2.10-GrabNotViewable.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-13616-validate_image_size_when_loading_BMP_files.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overread-in-IMA_ADPCM_nib.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overwrite-in-IMA_ADPCM_de.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7573-CVE-2019-7576-Fix-buffer-overreads-in-.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7574-Fix-a-buffer-overread-in-IMA_ADPCM_dec.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7575-Fix-a-buffer-overwrite-in-MS_ADPCM_dec.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_deco.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_nibb.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7578-Fix-a-buffer-overread-in-InitIMA_ADPCM.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7635-Reject-BMP-images-with-pixel-colors-ou.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7637-Fix-in-integer-overflow-in-SDL_Calcula.patch create mode 100644 sdl/SDL-1.2.15-CVE-2019-7638-CVE-2019-7636-Refuse-loading-BMP-image.patch create mode 100644 sdl/SDL-1.2.15-Reject-2-3-5-6-7-bpp-BMP-images.patch create mode 100644 sdl/SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch create mode 100644 sdl/SDL-1.2.15-const_XData32.patch create mode 100644 sdl/SDL-1.2.15-ignore_insane_joystick_axis.patch create mode 100644 sdl/SDL-1.2.15-no-default-backing-store.patch create mode 100644 sdl/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch create mode 100644 sdl/X11_KeyToUnicode.patch create mode 100644 sdl/libre.patch create mode 100644 sdl/libsdl-1.2.15-resizing.patch create mode 100644 sdl/sdl-1.2.14-disable-mmx.patch create mode 100644 sdl/sdl-1.2.14-fix-mouse-clicking.patch create mode 100644 sdl/sndio.patch create mode 100644 sdl2/PKGBUILD create mode 100644 sdl2_gfx/PKGBUILD create mode 100644 sdl2_image/PKGBUILD create mode 100644 sdl2_mixer/PKGBUILD create mode 100644 sdl2_net/PKGBUILD create mode 100644 sdl2_ttf/PKGBUILD create mode 100644 sdl_envvars/PKGBUILD create mode 100644 sdl_envvars/legalcode.txt create mode 100644 sdl_envvars/sdl.conf.profile create mode 100644 sdl_envvars/sdl.sh.profile create mode 100644 sdl_gfx/PKGBUILD create mode 100644 sdl_image/PKGBUILD create mode 100644 sdl_mixer/PKGBUILD create mode 100644 sdl_mixer/double-free-crash.patch create mode 100644 sdl_mixer/fluidsynth-volume.patch create mode 100644 sdl_mixer/mikmod1.patch create mode 100644 sdl_mixer/mikmod2.patch create mode 100644 sdl_net/PKGBUILD create mode 100644 sdl_pango/PKGBUILD create mode 100644 sdl_sound/PKGBUILD create mode 100644 sdl_ttf/PKGBUILD create mode 100644 seabios/PKGBUILD create mode 100644 seabios/config.coreboot create mode 100644 seabios/config.csm create mode 100644 seabios/config.seabios-128k create mode 100644 seabios/config.seabios-256k create mode 100644 seabios/config.vga.bochs-display create mode 100644 seabios/config.vga.cirrus create mode 100644 seabios/config.vga.isavga create mode 100644 seabios/config.vga.qxl create mode 100644 seabios/config.vga.ramfb create mode 100644 seabios/config.vga.stdvga create mode 100644 seabios/config.vga.virtio create mode 100644 seabios/reproducible-version.patch create mode 100644 searchmonkey/PKGBUILD create mode 100644 serd/PKGBUILD create mode 100644 setconf/PKGBUILD create mode 100644 sfml/PKGBUILD create mode 100644 sfsexp/PKGBUILD create mode 100644 sgml-common/PKGBUILD create mode 100644 sgml-common/sgml-common-0.6.3-manpage-1.patch create mode 100644 sgml-common/sgml-common.install create mode 100644 sh-roundup/PKGBUILD create mode 100644 sh-roundup/makefile-fix.patch create mode 100644 shared-mime-info/PKGBUILD create mode 100644 shared-mime-info/shared-mime-info.install create mode 100644 shared-mime-info/update-mime-database.hook create mode 100644 sharutils/PKGBUILD create mode 100644 shiboken/PKGBUILD create mode 100644 shiboken2/PKGBUILD create mode 100644 shntool/PKGBUILD create mode 100644 shntool/libre.patch create mode 100644 shtool/PKGBUILD create mode 100644 shush/PKGBUILD create mode 100644 signify/PKGBUILD create mode 100644 simgear/PKGBUILD create mode 100644 simple-mtpfs/PKGBUILD create mode 100644 simpleburn/PKGBUILD create mode 100644 simpleini/PKGBUILD create mode 100644 sip/PKGBUILD create mode 100644 sjasmplus/PKGBUILD create mode 100644 skippy-xd/PKGBUILD create mode 100644 sl/PKGBUILD create mode 100644 slang/PKGBUILD create mode 100644 slim-theme-hyperbola/PKGBUILD create mode 100644 slim-theme-hyperbola/slim-theme-hyperbola.install create mode 100644 slim/PKGBUILD create mode 100644 slim/slim-1.3.6-add-sessiondir.patch create mode 100644 slim/slim-1.3.6-fix-libslim-libraries.patch create mode 100644 slim/slim-1.3.6-remove-systemd-service-file.patch create mode 100644 slim/slim.initd create mode 100644 slim/slim.logrotate create mode 100644 slim/slim.run create mode 100644 slock/PKGBUILD create mode 100644 slock/backspace.patch create mode 100644 slop/PKGBUILD create mode 100644 slop/bugfix-add-missed-header.patch create mode 100644 slrn/PKGBUILD create mode 100644 smartmontools/PKGBUILD create mode 100644 smartmontools/smartd.confd create mode 100644 smartmontools/smartd.initd create mode 100644 smpeg/PKGBUILD create mode 100644 smplayer-legacy/PKGBUILD create mode 100644 smplayer-legacy/libre.patch create mode 100644 smplayer-legacy/remove-update-check.patch create mode 100644 smplayer-skins/PKGBUILD create mode 100644 smplayer-themes/PKGBUILD create mode 100644 smu/PKGBUILD create mode 100644 snappy/PKGBUILD create mode 100644 snappy/snappy.pc create mode 100644 snarf/PKGBUILD create mode 100644 sndio/PKGBUILD create mode 100644 sndio/sndio.conf.profile create mode 100644 sndio/sndio.install create mode 100644 sndio/sndio.sh.profile create mode 100644 sndio/sndiod.conf create mode 100644 sndio/sndiod.confd create mode 100644 sndio/sndiod.initd create mode 100644 sndio/sndiod.run create mode 100644 sndio/sndiod_log.run create mode 100644 snownews/PKGBUILD create mode 100644 socat/PKGBUILD create mode 100644 sord/PKGBUILD create mode 100644 soundbraid/LICENSE create mode 100644 soundbraid/PKGBUILD create mode 100644 soundconverter/PKGBUILD create mode 100644 soundfont-fluid/PKGBUILD create mode 100644 soundtouch/PKGBUILD create mode 100644 spacefm/PKGBUILD create mode 100644 spacefm/sysmacros.patch create mode 100644 spandsp/PKGBUILD create mode 100644 spawn-fcgi/PKGBUILD create mode 100644 spdlog/PKGBUILD create mode 100644 speech-dispatcher/PKGBUILD create mode 100644 speedcrunch/PKGBUILD create mode 100644 speex/PKGBUILD create mode 100644 speex/sndio.patch create mode 100644 speexdsp/PKGBUILD create mode 100644 spice-gtk/PKGBUILD create mode 100644 spice-protocol/PKGBUILD create mode 100644 spice/PKGBUILD create mode 100644 spirv-headers/PKGBUILD create mode 100644 spirv-tools/PKGBUILD create mode 100644 sqlitebrowser/PKGBUILD create mode 100644 sqlitebrowser/libre.patch create mode 100644 squashfs-tools/PKGBUILD create mode 100644 squid/PKGBUILD create mode 100644 squid/squid.confd create mode 100644 squid/squid.initd create mode 100644 squid/squid.install create mode 100644 squid/squid.logrotate create mode 100644 squid/squid.run create mode 100644 sratom/PKGBUILD create mode 100644 sscg/PKGBUILD create mode 100644 sshfs/PKGBUILD create mode 100644 st/PKGBUILD create mode 100644 st/terminfo.patch create mode 100644 stalonetray/PKGBUILD create mode 100644 startup-notification/PKGBUILD create mode 100644 steghide/PKGBUILD create mode 100644 stegseek/PKGBUILD create mode 100644 stegseek/fix-build-i686.patch create mode 100644 stella/PKGBUILD create mode 100644 stk/PKGBUILD create mode 100644 strace/PKGBUILD create mode 100644 strip-nondeterminism/PKGBUILD create mode 100644 subtitleeditor/PKGBUILD create mode 100644 subtitleripper/PKGBUILD create mode 100644 suil/PKGBUILD create mode 100644 suitesparse/PKGBUILD create mode 100644 suitesparse/suitesparse-no-demo.patch create mode 100644 supertux-legacy/PKGBUILD create mode 100644 supertuxkart/PKGBUILD create mode 100644 supertuxkart/libre.patch create mode 100644 surf/PKGBUILD create mode 100644 surf/config.h create mode 100644 surfraw/PKGBUILD create mode 100644 surfraw/surfraw.install create mode 100644 svkbd/PKGBUILD create mode 100644 swaks/PKGBUILD create mode 100644 swig/PKGBUILD create mode 100644 swig/remove-csharp-and-java-support.patch create mode 100644 sx/PKGBUILD create mode 100644 sx/sx.install create mode 100644 sxhkd/PKGBUILD create mode 100644 sylpheed/PKGBUILD create mode 100644 syntax-highlighting/PKGBUILD create mode 100644 sysklogd/PKGBUILD create mode 100644 sysklogd/sysklogd.conf create mode 100644 sysklogd/sysklogd.confd create mode 100644 sysklogd/sysklogd.initd create mode 100644 sysklogd/sysklogd.logrotate create mode 100644 sysklogd/sysklogd.run create mode 100644 tabbed/PKGBUILD create mode 100644 tabble/PKGBUILD create mode 100644 taglib/PKGBUILD create mode 100644 tagtool/PKGBUILD create mode 100644 tagutil/PKGBUILD create mode 100644 talloc/LICENSE create mode 100644 talloc/PKGBUILD create mode 100644 task/0011-Lexer-Do-not-allow-leading-zero-for-number-type.patch create mode 100644 task/0012-Backport-parser-issues-fixes.patch create mode 100644 task/PKGBUILD create mode 100644 tauthon-enum34/PKGBUILD create mode 100644 tauthon-funcsigs/PKGBUILD create mode 100644 tauthon-greenlet/PKGBUILD create mode 100644 tauthon-ipaddress/PKGBUILD create mode 100644 tauthon-markdown/PKGBUILD create mode 100644 tauthon-numpy/PKGBUILD create mode 100644 tauthon-pycairo/PKGBUILD create mode 100644 tauthon-pygobject2/PKGBUILD create mode 100644 tauthon-pygtk/PKGBUILD create mode 100644 tauthon-pygtk/drop-pangofont.patch create mode 100644 tauthon-pygtk/fix-leaks-of-pango-objects.patch create mode 100644 tauthon-pygtk/python27.patch create mode 100644 tauthon-setuptools-scm/PKGBUILD create mode 100644 tauthon-soupsieve/PKGBUILD create mode 100644 tauthon-toml/PKGBUILD create mode 100644 tauthon-toml/tauthon-toml-0.10.1-install_type_hints.patch create mode 100644 tauthon-typing/PKGBUILD create mode 100644 tauthon-wxpython3/PKGBUILD create mode 100644 tauthon-wxpython3/fix-editra-removal.patch create mode 100644 tauthon-wxpython3/fix-plot.patch create mode 100644 tauthon/PKGBUILD create mode 100644 tbb/PKGBUILD create mode 100644 tbsm/PKGBUILD create mode 100644 tcc/PKGBUILD create mode 100644 tcl/PKGBUILD create mode 100644 tcllib/PKGBUILD create mode 100644 tcllib/libre.patch create mode 100644 tcp-wrappers/PKGBUILD create mode 100644 tcp-wrappers/hosts.allow create mode 100644 tcp-wrappers/hosts.deny create mode 100644 tcp-wrappers/tcp-wrappers-redhat-bug11881.patch create mode 100644 tcpdump/PKGBUILD create mode 100644 tdb/LICENSE create mode 100644 tdb/PKGBUILD create mode 100644 tecnoballz/PKGBUILD create mode 100644 ted/PKGBUILD create mode 100644 teeworlds/PKGBUILD create mode 100644 teeworlds/teeworlds.desktop create mode 100644 terminus-font/PKGBUILD create mode 100644 tesseract-data/PKGBUILD create mode 100644 tesseract/PKGBUILD create mode 100644 tesseract/tesseract.install create mode 100644 testdisk/PKGBUILD create mode 100644 tevent/LICENSE create mode 100644 tevent/PKGBUILD create mode 100644 texi2html/PKGBUILD create mode 100644 tftp-hpa/PKGBUILD create mode 100644 tftp-hpa/fix-common.patch create mode 100644 tftp-hpa/tftp-hpa-0.49-fortify-strcpy-crash.patch create mode 100644 tftp-hpa/tftpd.confd create mode 100644 tftp-hpa/tftpd.initd create mode 100644 tftp-hpa/tftpd.run create mode 100644 the_silver_searcher/PKGBUILD create mode 100644 tidy/PKGBUILD create mode 100644 tig/PKGBUILD create mode 100644 tilda/PKGBUILD create mode 100644 tilda/tilda.changelog create mode 100644 timew/PKGBUILD create mode 100644 timew/timew.install create mode 100644 timidity++/PKGBUILD create mode 100644 timidity++/timidity-jack.patch create mode 100644 timidity++/timidity-sndio.patch create mode 100644 timidity++/timidity-tk86.patch create mode 100644 timidity++/timidity.cfg create mode 100644 timidity++/timidity.confd create mode 100644 timidity++/timidity.initd create mode 100644 timidity++/timidity.install create mode 100644 tinc/PKGBUILD create mode 100644 tinc/tincd.confd create mode 100644 tinc/tincd.initd create mode 100644 tinc/tincd.run create mode 100644 tint2/PKGBUILD create mode 100644 tint2/libre.patch create mode 100644 tint3-cpp/PKGBUILD create mode 100644 tinycdb/PKGBUILD create mode 100644 tinydns/PKGBUILD create mode 100644 tinydns/tinydns.initd create mode 100644 tinydns/tinydns.run create mode 100644 tinyproxy/PKGBUILD create mode 100644 tinyproxy/tinyproxy.initd create mode 100644 tinyproxy/tinyproxy.run create mode 100644 tinyxml/PKGBUILD create mode 100644 tinyxml/entity.patch create mode 100644 tinyxml/tinyxml-2.5.3-stl.patch create mode 100644 tinyxml/tinyxml.pc create mode 100644 tinyxml2/PKGBUILD create mode 100644 tk/PKGBUILD create mode 100644 tkdiff/PKGBUILD create mode 100644 tkdiff/tkdiff.desktop create mode 100644 tkdiff/tkdiff.png create mode 100644 tkdvd/PKGBUILD create mode 100644 tkdvd/tkdvd.desktop create mode 100644 tkdvd/tkdvd.sh create mode 100644 tkimg/PKGBUILD create mode 100644 tklib/PKGBUILD create mode 100644 tkpacman/PKGBUILD create mode 100644 tkpacman/correct-license-path.patch create mode 100644 tkrev/PKGBUILD create mode 100644 tkrev/tkrev.desktop create mode 100644 tkrev/tkrev.xpm create mode 100644 tmux/PKGBUILD create mode 100644 tofrodos/PKGBUILD create mode 100644 tokyocabinet/PKGBUILD create mode 100644 tolua++/PKGBUILD create mode 100644 tomatoes/PKGBUILD create mode 100644 tomatoes/makefile-compile-flags.patch create mode 100644 tomatoes/tomatoes.desktop create mode 100644 toppler/PKGBUILD create mode 100644 toppler/toppler.desktop create mode 100644 tor-hardened-preferences/PKGBUILD create mode 100644 tor-hardened-preferences/tor-hardened-preferences.install create mode 100644 tor-hardened-preferences/tor-hardened.initd create mode 100644 tor-hardened-preferences/tor-hardened.run create mode 100644 tor-hardened-preferences/tor-hardened.sh create mode 100644 tor-hardened-preferences/torchroot.sh create mode 100644 tor-hardened-preferences/torrc create mode 100644 tor/0001.patch create mode 100644 tor/PKGBUILD create mode 100644 tor/tor.conf create mode 100644 tor/tor.confd create mode 100644 tor/tor.initd create mode 100644 tor/tor.install create mode 100644 tor/tor.run create mode 100644 tor/torrc create mode 100644 torcs/PKGBUILD create mode 100644 torsocks/PKGBUILD create mode 100644 totem-pl-parser/PKGBUILD create mode 100644 toxcore/PKGBUILD create mode 100644 toxcore/tox-bootstrapd.conf create mode 100644 toxcore/tox-bootstrapd.confd create mode 100644 toxcore/tox-bootstrapd.initd create mode 100755 toxcore/tox-bootstrapd.run create mode 100644 toxcore/toxcore.install create mode 100644 toxic/PKGBUILD create mode 100644 toxic/libre.patch create mode 100644 toxic/toxic.png create mode 100644 trackballs/PKGBUILD create mode 100644 trackballs/find_guile.patch create mode 100644 trackballs/trackballs.desktop create mode 100644 transcode/PKGBUILD create mode 100644 transcode/transcode-ffmpeg3.patch create mode 100644 transcode/transcode-ffmpeg4.patch create mode 100644 transcode/transcode-sndio.patch create mode 100644 transcode/transcode-swresample.patch create mode 100644 transmission/PKGBUILD create mode 100644 transmission/fix-icons.patch create mode 100644 transmission/transmission-cli.install create mode 100644 transmission/transmission-daemon.confd create mode 100644 transmission/transmission-daemon.initd create mode 100644 transmission/transmission-daemon.run create mode 100644 transset-df/LICENSE create mode 100644 transset-df/PKGBUILD create mode 100644 tre/PKGBUILD create mode 100644 tree/PKGBUILD create mode 100644 treesheets/PKGBUILD create mode 100644 treesheets/treesheets.desktop create mode 100644 trigger-rally/PKGBUILD create mode 100644 trigger-rally/trigger-rally.desktop create mode 100644 trigger-rally/trigger-rally.install create mode 100644 trigger-rally/trigger-rally.png create mode 100644 trisquel-gtk-theme/LICENSE create mode 100644 trisquel-gtk-theme/PKGBUILD create mode 100644 trisquel-icewm-theme/PKGBUILD create mode 100644 tslib/PKGBUILD create mode 100644 ttaenc/PKGBUILD create mode 100644 ttf-dejavu/PKGBUILD create mode 100644 ttf-liberation/PKGBUILD create mode 100644 twolame/PKGBUILD create mode 100644 txt2man/PKGBUILD create mode 100644 txt2tags/PKGBUILD create mode 100644 uchardet/PKGBUILD create mode 100644 ucl/PKGBUILD create mode 100644 udns/PKGBUILD create mode 100644 udpcast/PKGBUILD create mode 100644 ufoai/PKGBUILD create mode 100644 ufoai/fix-build.patch create mode 100644 uget/PKGBUILD create mode 100644 uget/uget-gtk.appdata.xml create mode 100644 ulogd/PKGBUILD create mode 100644 ulogd/ulogd.conf create mode 100644 ulogd/ulogd.initd create mode 100644 ulogd/ulogd.install create mode 100644 ulogd/ulogd.logrotate create mode 100644 ulogd/ulogd.run create mode 100644 ultimatestunts/PKGBUILD create mode 100644 ultimatestunts/ultimatestunts-metaserver-cpp-add-includes.patch create mode 100644 ultimatestunts/ultimatestunts.desktop create mode 100644 ultimatestunts/ultimatestunts.png create mode 100644 unar/PKGBUILD create mode 100644 unar/native_obj_exceptions.patch create mode 100644 unbound/CVE-2024-43167.patch create mode 100644 unbound/PKGBUILD create mode 100644 unbound/hook create mode 100644 unbound/unbound.conf create mode 100644 unbound/unbound.confd create mode 100644 unbound/unbound.initd create mode 100644 unbound/unbound.install create mode 100644 unbound/unbound.run create mode 100644 unibilium/PKGBUILD create mode 100644 unicon/PKGBUILD create mode 100644 unifont/PKGBUILD create mode 100644 unison/PKGBUILD create mode 100644 unison/unison-large.patch create mode 100644 unison/unison.desktop create mode 100644 unittest-cpp/PKGBUILD create mode 100644 unixodbc/PKGBUILD create mode 100644 unrealircd/PKGBUILD create mode 100644 unrealircd/unrealircd.initd create mode 100644 unrealircd/unrealircd.install create mode 100644 unrealircd/unrealircd.run create mode 100644 unrtf/PKGBUILD create mode 100644 unshield/PKGBUILD create mode 100644 unzip/PKGBUILD create mode 100644 unzip/crc32.patch create mode 100644 unzip/csiz-underflow.patch create mode 100644 unzip/cve20149636.patch create mode 100644 unzip/empty-input.patch create mode 100644 unzip/getZip64Data.patch create mode 100644 unzip/nextbyte-overflow.patch create mode 100644 unzip/overflow-fsize.patch create mode 100644 unzip/test_compr_eb.patch create mode 100644 upx/PKGBUILD create mode 100644 usb_modeswitch/PKGBUILD create mode 100644 usbredir/PKGBUILD create mode 100644 utf8cpp/PKGBUILD create mode 100644 uthash/PKGBUILD create mode 100644 uudeview/PKGBUILD create mode 100644 uuid/PKGBUILD create mode 100644 uuid/ossp.patch create mode 100644 uwsgi/PKGBUILD create mode 100644 uwsgi/emperor.ini create mode 100644 uwsgi/hyperbola.ini create mode 100644 uwsgi/uwsgi.confd create mode 100644 uwsgi/uwsgi.initd create mode 100644 uwsgi/uwsgi.logrotate create mode 100644 uwsgi/uwsgi_fix_build.patch create mode 100644 uwsgi/uwsgi_ruby20_compatibility.patch create mode 100644 uwsgi/uwsgi_trick_chroot.patch create mode 100644 v4l-utils/PKGBUILD create mode 100644 vala/PKGBUILD create mode 100644 valgrind/PKGBUILD create mode 100644 vamp-plugin-sdk/PKGBUILD create mode 100644 vamps/PKGBUILD create mode 100644 vc/PKGBUILD create mode 100644 vcdimager/PKGBUILD create mode 100644 vde2/PKGBUILD create mode 100644 vde2/dhcpd.conf.sample create mode 100644 vde2/vde-config.sample create mode 100644 vde2/vde-connection.sample create mode 100644 vde2/vde2.install create mode 100644 vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch create mode 100644 vde2/vde_switch.confd create mode 100644 vde2/vde_switch.initd create mode 100644 vegastrike-engine/PKGBUILD create mode 100644 vegastrike/PKGBUILD create mode 100755 vegastrike/vs create mode 100755 vegastrike/vsettings create mode 100644 vid.stab/PKGBUILD create mode 100644 viewnior/PKGBUILD create mode 100644 vim/PKGBUILD create mode 100644 vim/fix-build.patch create mode 100644 vim/hyperbola.vim create mode 100644 vim/vimdoc.hook create mode 100644 vim/vimrc create mode 100644 virglrenderer/PKGBUILD create mode 100644 vis/PKGBUILD create mode 100644 vlc-legacy/PKGBUILD create mode 100644 vlc-legacy/remove-internet-playlist.patch create mode 100644 vlc-legacy/remove-services.patch create mode 100644 vlc-legacy/update-vlc-plugin-cache.hook create mode 100644 vlc-legacy/vlc.desktop create mode 100644 vnstat/PKGBUILD create mode 100644 vnstat/vnstat.install create mode 100644 vnstat/vnstatd.confd create mode 100644 vnstat/vnstatd.initd create mode 100644 vnstat/vnstatd.run create mode 100644 volumeicon/PKGBUILD create mode 100644 volumeicon/volumeicon.desktop create mode 100644 volumeicon/volumeicon.install create mode 100644 vorbis-tools/PKGBUILD create mode 100644 vorbisgain/PKGBUILD create mode 100644 vsftpd/PKGBUILD create mode 100644 vsftpd/vsftpd-checkconfig.sh create mode 100644 vsftpd/vsftpd.initd create mode 100644 vsftpd/vsftpd.run create mode 100644 vte-legacy/PKGBUILD create mode 100644 vte-legacy/bracketed_paste_mode_fix.patch create mode 100644 vte-legacy/make_alt_work.patch create mode 100644 vte-legacy/scroll_region.patch create mode 100644 vte/PKGBUILD create mode 100644 vulscan/PKGBUILD create mode 100644 vym/PKGBUILD create mode 100644 waf/PKGBUILD create mode 100644 warmux/PKGBUILD create mode 100644 warmux/libre.patch create mode 100644 warzone2100-legacy/PKGBUILD create mode 100644 warzone2100-legacy/fix-build.patch create mode 100644 wavegain/PKGBUILD create mode 100644 wavpack/PKGBUILD create mode 100644 wbar/PKGBUILD create mode 100644 webkitgtk/PKGBUILD create mode 100644 webkitgtk/remove-libwebp-support.patch create mode 100644 weechat/PKGBUILD create mode 100644 weechat/fix-languages-cmake.patch create mode 100644 wget/CVE-2024-38428.patch create mode 100644 wget/PKGBUILD create mode 100644 whois/PKGBUILD create mode 100644 whois/gettext-tiny.patch create mode 100644 wildmidi/PKGBUILD create mode 100644 wireguard-tools/PKGBUILD create mode 100644 wireguard-tools/wg-quick.confd create mode 100644 wireguard-tools/wg-quick.initd create mode 100644 wireguard-tools/wg-quick.run create mode 100644 wireshark/PKGBUILD create mode 100644 wireshark/wireshark.install create mode 100644 wizznic/PKGBUILD create mode 100644 wizznic/wizznic.png create mode 100644 wmctrl/PKGBUILD create mode 100644 worker/PKGBUILD create mode 100644 wpa_supplicant_gui/PKGBUILD create mode 100644 wpa_supplicant_gui/wpa_supplicant_gui.install create mode 100644 wv/PKGBUILD create mode 100644 wvdial/PKGBUILD create mode 100644 wvstreams/PKGBUILD create mode 100644 wvstreams/gcc-6.patch create mode 100644 wvstreams/libressl.patch create mode 100644 wvstreams/openssl-buildfix.patch create mode 100644 wvstreams/wvstreams-4.6.1-gcc47.patch create mode 100644 wvstreams/wvstreams-4.6.1-glibc212.patch create mode 100644 wxgtk/PKGBUILD create mode 100644 wxsvg/PKGBUILD create mode 100644 wyrmsun-legacy/PKGBUILD create mode 100644 x11-ssh-askpass/PKGBUILD create mode 100644 x11-ssh-askpass/x11-ssh-askpass.install create mode 100644 x11vnc/PKGBUILD create mode 100644 x11vnc/patch-src_sslhelper.patch create mode 100644 x264/PKGBUILD create mode 100644 xa/PKGBUILD create mode 100644 xapian-core/PKGBUILD create mode 100644 xarchiver/PKGBUILD create mode 100644 xarchiver/libre.patch create mode 100644 xarchiver/xarchiver.appdata.xml create mode 100644 xautolock/PKGBUILD create mode 100644 xbanish/PKGBUILD create mode 100644 xbattmon/PKGBUILD create mode 100644 xbindkeys/PKGBUILD create mode 100644 xcb-proto/PKGBUILD create mode 100644 xcb-util-cursor/PKGBUILD create mode 100644 xcb-util-image/PKGBUILD create mode 100644 xcb-util-keysyms/COPYING create mode 100644 xcb-util-keysyms/PKGBUILD create mode 100644 xcb-util-renderutil/PKGBUILD create mode 100644 xcb-util-wm/PKGBUILD create mode 100644 xcb-util-xrm/PKGBUILD create mode 100644 xcb-util/PKGBUILD create mode 100644 xcftools/PKGBUILD create mode 100644 xcftools/fix-build.patch create mode 100644 xcftools/security.patch create mode 100644 xcftools/xcftools.patch create mode 100644 xclip/PKGBUILD create mode 100644 xcursor-premium/PKGBUILD create mode 100644 xdg-user-dirs-gtk/PKGBUILD create mode 100644 xdg-user-dirs/PKGBUILD create mode 100644 xdg-user-dirs/xdg-user-dirs create mode 100644 xdg-utils/PKGBUILD create mode 100644 xdg-utils/libre.patch create mode 100644 xdialog/PKGBUILD create mode 100644 xdialog/xdialog-2.3.1-gtk2.patch create mode 100644 xdo/PKGBUILD create mode 100644 xdotool/PKGBUILD create mode 100644 xen/PKGBUILD create mode 100644 xen/efi-xen.cfg create mode 100644 xen/xen-watchdog.initd create mode 100644 xen/xen.conf create mode 100644 xen/xen.install create mode 100644 xen/xen.run create mode 100644 xen/xencommons.initd create mode 100644 xen/xenconsoled.run create mode 100644 xen/xendomains.initd create mode 100644 xen/xendriverdomain.initd create mode 100644 xen/xenstored.run create mode 100644 xenocara-appres/PKGBUILD create mode 100644 xenocara-bdftopcf/PKGBUILD create mode 100644 xenocara-bdftopcf/remove-forced-openbsd-unveil-and-openbsd-pledge-support.patch create mode 100644 xenocara-docs/COPYING create mode 100644 xenocara-docs/PKGBUILD create mode 100644 xenocara-editres/PKGBUILD create mode 100644 xenocara-font-alias/PKGBUILD create mode 100644 xenocara-font-alias/fontrootdir-workaround.patch create mode 100644 xenocara-font-bitstream/PKGBUILD create mode 100644 xenocara-font-encodings/PKGBUILD create mode 100644 xenocara-font-util/PKGBUILD create mode 100644 xenocara-fonts-cyrillic-meta/PKGBUILD create mode 100644 xenocara-fonts-cyrillic-meta/legalcode.txt create mode 100644 xenocara-fonts-misc-meta/PKGBUILD create mode 100644 xenocara-fonts-misc-meta/legalcode.txt create mode 100644 xenocara-fonts-type1-meta/PKGBUILD create mode 100644 xenocara-fonts-type1-meta/legalcode.txt create mode 100644 xenocara-iceauth/PKGBUILD create mode 100644 xenocara-input-acecad-debug/PKGBUILD create mode 100644 xenocara-input-acecad/PKGBUILD create mode 100644 xenocara-input-elographics-debug/PKGBUILD create mode 100644 xenocara-input-elographics-debug/git-fixes.patch create mode 100644 xenocara-input-elographics/PKGBUILD create mode 100644 xenocara-input-elographics/git-fixes.patch create mode 100644 xenocara-input-joystick-debug/PKGBUILD create mode 100644 xenocara-input-joystick/PKGBUILD create mode 100644 xenocara-input-keyboard-debug/PKGBUILD create mode 100644 xenocara-input-keyboard/PKGBUILD create mode 100644 xenocara-input-mouse-debug/PKGBUILD create mode 100644 xenocara-input-mouse/PKGBUILD create mode 100644 xenocara-input-synaptics-debug/PKGBUILD create mode 100644 xenocara-input-synaptics-debug/xenocara-input-synaptics.install create mode 100644 xenocara-input-synaptics/PKGBUILD create mode 100644 xenocara-input-synaptics/xenocara-input-synaptics.install create mode 100644 xenocara-input-vmmouse-debug/PKGBUILD create mode 100644 xenocara-input-vmmouse/PKGBUILD create mode 100644 xenocara-input-void-debug/PKGBUILD create mode 100644 xenocara-input-void/PKGBUILD create mode 100644 xenocara-luit/PKGBUILD create mode 100644 xenocara-luit/git-fixes.patch create mode 100644 xenocara-mkfontscale/PKGBUILD create mode 100644 xenocara-mkfontscale/xenocara-mkfontscale.hook create mode 100644 xenocara-mkfontscale/xenocara-mkfontscale.script create mode 100644 xenocara-oclock/PKGBUILD create mode 100644 xenocara-proto/PKGBUILD create mode 100644 xenocara-server-debug/PKGBUILD create mode 100644 xenocara-server-debug/remove-forced-bison-yyparse-function-support.patch create mode 100644 xenocara-server-debug/remove-forced-mno-sse-support.patch create mode 100644 xenocara-server-debug/remove-forced-openbsd-getdtablecount-function-support.patch create mode 100644 xenocara-server-debug/remove-forced-openbsd-mmap-flag-support.patch create mode 100644 xenocara-server-debug/xenocara-server.install create mode 100644 xenocara-server-debug/xserver-autobind-hotplug.patch create mode 100644 xenocara-server-debug/xvfb-run create mode 100644 xenocara-server/PKGBUILD create mode 100644 xenocara-server/remove-forced-bison-yyparse-function-support.patch create mode 100644 xenocara-server/remove-forced-mno-sse-support.patch create mode 100644 xenocara-server/remove-forced-openbsd-getdtablecount-function-support.patch create mode 100644 xenocara-server/remove-forced-openbsd-mmap-flag-support.patch create mode 100644 xenocara-server/xenocara-server.install create mode 100644 xenocara-server/xserver-autobind-hotplug.patch create mode 100644 xenocara-server/xvfb-run create mode 100644 xenocara-sessreg/PKGBUILD create mode 100644 xenocara-setxkbmap/PKGBUILD create mode 100644 xenocara-smproxy/PKGBUILD create mode 100644 xenocara-twm/PKGBUILD create mode 100644 xenocara-twm/add-libbsd-support.patch create mode 100644 xenocara-util-macros/PKGBUILD create mode 100644 xenocara-video-ati-debug/PKGBUILD create mode 100644 xenocara-video-ati-debug/xenocara-video-ati-debug.install create mode 100644 xenocara-video-ati/PKGBUILD create mode 100644 xenocara-video-ati/xenocara-video-ati.install create mode 100644 xenocara-video-cirrus-debug/PKGBUILD create mode 100644 xenocara-video-cirrus/PKGBUILD create mode 100644 xenocara-video-dummy-debug/COPYING create mode 100644 xenocara-video-dummy-debug/PKGBUILD create mode 100644 xenocara-video-dummy/COPYING create mode 100644 xenocara-video-dummy/PKGBUILD create mode 100644 xenocara-video-intel-debug/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch create mode 100644 xenocara-video-intel-debug/0002-Fix-build-on-i686.patch create mode 100644 xenocara-video-intel-debug/PKGBUILD create mode 100644 xenocara-video-intel-debug/include-missing-sys-sysmacros-h.patch create mode 100644 xenocara-video-intel-debug/xenocara-video-intel-debug.install create mode 100644 xenocara-video-intel/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch create mode 100644 xenocara-video-intel/0002-Fix-build-on-i686.patch create mode 100644 xenocara-video-intel/PKGBUILD create mode 100644 xenocara-video-intel/include-missing-sys-sysmacros-h.patch create mode 100644 xenocara-video-intel/xenocara-video-intel.install create mode 100644 xenocara-video-openchrome-debug/PKGBUILD create mode 100644 xenocara-video-openchrome/PKGBUILD create mode 100644 xenocara-video-vesa-debug/PKGBUILD create mode 100644 xenocara-video-vesa-debug/revert-kernelcheck.patch create mode 100644 xenocara-video-vesa/PKGBUILD create mode 100644 xenocara-video-vesa/revert-kernelcheck.patch create mode 100644 xenocara-video-vmware-debug/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch create mode 100644 xenocara-video-vmware-debug/0002-vmware-Fix-build-warnings.patch create mode 100644 xenocara-video-vmware-debug/0003-Fix-a-number-of-compilation-warnings.patch create mode 100644 xenocara-video-vmware-debug/0004-saa-Build-compatibility-with-xserver-1.20.patch create mode 100644 xenocara-video-vmware-debug/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch create mode 100644 xenocara-video-vmware-debug/PKGBUILD create mode 100644 xenocara-video-vmware-debug/gcc8.patch create mode 100644 xenocara-video-vmware/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch create mode 100644 xenocara-video-vmware/0002-vmware-Fix-build-warnings.patch create mode 100644 xenocara-video-vmware/0003-Fix-a-number-of-compilation-warnings.patch create mode 100644 xenocara-video-vmware/0004-saa-Build-compatibility-with-xserver-1.20.patch create mode 100644 xenocara-video-vmware/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch create mode 100644 xenocara-video-vmware/PKGBUILD create mode 100644 xenocara-video-vmware/gcc8.patch create mode 100644 xenocara-x11perf/PKGBUILD create mode 100644 xenocara-xauth/PKGBUILD create mode 100644 xenocara-xbacklight/PKGBUILD create mode 100644 xenocara-xbiff/PKGBUILD create mode 100644 xenocara-xbitmaps/PKGBUILD create mode 100644 xenocara-xcalc/PKGBUILD create mode 100644 xenocara-xclipboard/PKGBUILD create mode 100644 xenocara-xclock/PKGBUILD create mode 100644 xenocara-xcmsdb/PKGBUILD create mode 100644 xenocara-xcompmgr/PKGBUILD create mode 100644 xenocara-xconsole/PKGBUILD create mode 100644 xenocara-xdpyinfo/PKGBUILD create mode 100644 xenocara-xdriinfo/PKGBUILD create mode 100644 xenocara-xedit/PKGBUILD create mode 100644 xenocara-xev/PKGBUILD create mode 100644 xenocara-xeyes/PKGBUILD create mode 100644 xenocara-xfd/PKGBUILD create mode 100644 xenocara-xfontsel/PKGBUILD create mode 100644 xenocara-xgamma/PKGBUILD create mode 100644 xenocara-xhost/PKGBUILD create mode 100644 xenocara-xhost/fix-missing-netdb-include-file.patch create mode 100644 xenocara-xinit/PKGBUILD create mode 100644 xenocara-xinit/fix-hostname.patch create mode 100644 xenocara-xinit/fix-startx-to-xauth-treat-ipv6-properly.patch create mode 100644 xenocara-xinit/move-serverauthfile-into-tmp.patch create mode 100644 xenocara-xinit/xserverrc create mode 100644 xenocara-xinput/PKGBUILD create mode 100644 xenocara-xkbcomp/PKGBUILD create mode 100644 xenocara-xkbevd/PKGBUILD create mode 100644 xenocara-xkbutils/PKGBUILD create mode 100644 xenocara-xkill/PKGBUILD create mode 100644 xenocara-xload/PKGBUILD create mode 100644 xenocara-xlogo/PKGBUILD create mode 100644 xenocara-xlsatoms/PKGBUILD create mode 100644 xenocara-xlsclients/PKGBUILD create mode 100644 xenocara-xlsfonts/PKGBUILD create mode 100644 xenocara-xmag/PKGBUILD create mode 100644 xenocara-xmessage/PKGBUILD create mode 100644 xenocara-xmodmap/PKGBUILD create mode 100644 xenocara-xpr/PKGBUILD create mode 100644 xenocara-xprop/PKGBUILD create mode 100644 xenocara-xrandr/PKGBUILD create mode 100644 xenocara-xrdb/PKGBUILD create mode 100644 xenocara-xrefresh/PKGBUILD create mode 100644 xenocara-xset/PKGBUILD create mode 100644 xenocara-xsetroot/PKGBUILD create mode 100644 xenocara-xsm/LICENSE create mode 100644 xenocara-xsm/PKGBUILD create mode 100644 xenocara-xvidtune/PKGBUILD create mode 100644 xenocara-xvinfo/PKGBUILD create mode 100644 xenocara-xwd/PKGBUILD create mode 100644 xenocara-xwininfo/PKGBUILD create mode 100644 xenocara-xwud/PKGBUILD create mode 100644 xfe/PKGBUILD create mode 100644 xfe/libre.patch create mode 100644 xfe/opus-support-in-xferc.patch create mode 100644 xfig/PKGBUILD create mode 100644 xidle/LICENSE create mode 100644 xidle/Makefile create mode 100644 xidle/PKGBUILD create mode 100644 xine-lib/PKGBUILD create mode 100644 xine-ui/PKGBUILD create mode 100644 xkeyboard-config/PKGBUILD create mode 100644 xkeyboard-config/revert-fullscreen.patch create mode 100644 xkeycaps/PKGBUILD create mode 100644 xkeycaps/license.txt create mode 100644 xmlsec/PKGBUILD create mode 100644 xmlto/PKGBUILD create mode 100644 xmms2/PKGBUILD create mode 100644 xmms2/fix-build.patch create mode 100644 xmms2/xmms2.install create mode 100644 xmoto/PKGBUILD create mode 100644 xmoto/installation-directories.patch create mode 100644 xorg-imake/LICENSE create mode 100644 xorg-imake/PKGBUILD create mode 100644 xorg-imake/gnu+linux-config.patch create mode 100644 xorg-input-evdev-debug/PKGBUILD create mode 100644 xorg-input-evdev/PKGBUILD create mode 100644 xorg-input-wacom-debug/PKGBUILD create mode 100644 xorg-input-wacom/PKGBUILD create mode 100644 xorg-video-fbdev-debug/PKGBUILD create mode 100644 xorg-video-fbdev-debug/gcc8.patch create mode 100644 xorg-video-fbdev/PKGBUILD create mode 100644 xorg-video-fbdev/gcc8.patch create mode 100644 xorg-video-nouveau-debug/COPYING create mode 100644 xorg-video-nouveau-debug/PKGBUILD create mode 100644 xorg-video-nouveau/COPYING create mode 100644 xorg-video-nouveau/PKGBUILD create mode 100644 xorg-video-sisusb-debug/PKGBUILD create mode 100644 xorg-video-sisusb/PKGBUILD create mode 100644 xorg-xcursor-themes/PKGBUILD create mode 100644 xorg-xcursorgen/PKGBUILD create mode 100644 xorg-xdm/PKGBUILD create mode 100644 xorg-xdm/Xresources create mode 100644 xorg-xdm/Xsession-loginshell.patch create mode 100644 xorg-xdm/Xsession-xsm.patch create mode 100644 xorg-xdm/Xsetup_0 create mode 100644 xorg-xdm/git-fixes.patch create mode 100644 xorg-xdm/hyperbola.xpm create mode 100644 xorg-xdm/startDM.sh create mode 100644 xorg-xdm/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch create mode 100644 xorg-xdm/xdm-setup.initd create mode 100644 xorg-xdm/xdm.confd create mode 100644 xorg-xdm/xdm.initd create mode 100644 xorg-xdm/xorg-xdm.install create mode 100644 xorg-xrestop/PKGBUILD create mode 100644 xosd/PKGBUILD create mode 100644 xournal/PKGBUILD create mode 100644 xournalpp/PKGBUILD create mode 100644 xpad/PKGBUILD create mode 100644 xpad/fix-build.patch create mode 100644 xplc/PKGBUILD create mode 100644 xsane/PKGBUILD create mode 100644 xsane/xsane.install create mode 100644 xsel/PKGBUILD create mode 100644 xsettings-client/PKGBUILD create mode 100644 xterm/PKGBUILD create mode 100644 xtrlock/PKGBUILD create mode 100644 xvidcore/PKGBUILD create mode 100644 xvkbd/PKGBUILD create mode 100644 xvkbd/xvkbd.desktop create mode 100644 xvkbd/xvkbd.png create mode 100644 xwallpaper/PKGBUILD create mode 100644 xxhash/PKGBUILD create mode 100644 yad/PKGBUILD create mode 100644 yajl/PKGBUILD create mode 100644 yaml-cpp/PKGBUILD create mode 100644 yara/PKGBUILD create mode 100644 yash/PKGBUILD create mode 100644 yash/remove-mofiles.patch create mode 100644 yash/yash.install create mode 100644 yasm/PKGBUILD create mode 100644 yelp-tools/PKGBUILD create mode 100644 yelp-xsl/PKGBUILD create mode 100644 yelp/CVE-2025-3155.patch create mode 100644 yelp/PKGBUILD create mode 100644 ympd/PKGBUILD create mode 100644 ympd/fix-compile.patch create mode 100644 ympd/ympd.conf create mode 100644 ympd/ympd.confd create mode 100644 ympd/ympd.initd create mode 100644 ympd/ympd.install create mode 100644 ympd/ympd.run create mode 100644 zathura-cb/PKGBUILD create mode 100644 zathura-djvu/PKGBUILD create mode 100644 zathura-pdf-mupdf/0001-Remove-mupdf-linking-detection.patch create mode 100644 zathura-pdf-mupdf/0002-Fix-build.patch create mode 100644 zathura-pdf-mupdf/PKGBUILD create mode 100644 zathura-pdf-poppler/PKGBUILD create mode 100644 zathura-ps/PKGBUILD create mode 100644 zathura/PKGBUILD create mode 100644 zathura/remove-appstreamglib.patch create mode 100644 zaz/PKGBUILD create mode 100644 zbar/PKGBUILD create mode 100644 zim/PKGBUILD create mode 100644 zimg/PKGBUILD create mode 100644 zip/PKGBUILD create mode 100644 zip/zipnote.patch create mode 100644 zita-alsa-pcmi/PKGBUILD create mode 100644 zita-resampler/PKGBUILD create mode 100644 zmap/PKGBUILD create mode 100644 znc-clientbuffer/LICENSE create mode 100644 znc-clientbuffer/PKGBUILD create mode 100644 zsh/PKGBUILD create mode 100644 zsh/zprofile create mode 100644 zsh/zsh-kshcompat.install create mode 100644 zsh/zsh-shcompat.install create mode 100644 zsh/zsh.install create mode 100644 zuki-themes/PKGBUILD create mode 100644 zukitre-fluxbox-theme/LICENSE create mode 100644 zukitre-fluxbox-theme/PKGBUILD create mode 100644 zvbi/PKGBUILD create mode 100644 zxing-cpp/PKGBUILD create mode 100644 zzz/PKGBUILD diff --git a/3proxy/3proxy.initd b/3proxy/3proxy.initd new file mode 100644 index 0000000..69785af --- /dev/null +++ b/3proxy/3proxy.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run + +supervisor="supervise-daemon" +command="/usr/bin/3proxy" +pidfile="/run/$SVCNAME/$SVCNAME.pid" +CONFFILE=/etc/$SVCNAME/$SVCNAME.cfg +command_args="$CONFFILE" +command_user="$(id -u threeproxy):$(id -g threeproxy)" +required_files="$CONFFILE" + +depend() { + need net +} diff --git a/3proxy/3proxy.install b/3proxy/3proxy.install new file mode 100644 index 0000000..ad17de9 --- /dev/null +++ b/3proxy/3proxy.install @@ -0,0 +1,24 @@ +post_install() { + if ! getent group threeproxy &>/dev/null; then + groupadd -r threeproxy >& /dev/null + fi + if ! getent passwd threeproxy &>/dev/null; then + useradd -r -d /var/log/3proxy -g threeproxy -s /bin/false threeproxy + fi + + chown threeproxy:threeproxy /run/3proxy + chown threeproxy:threeproxy /var/log/3proxy +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + if getent passwd threeproxy &>/dev/null; then + userdel threeproxy >/dev/null + fi + if getent group threeproxy &>/dev/null; then + groupdel threeproxy >/dev/null + fi +} diff --git a/3proxy/3proxy.run b/3proxy/3proxy.run new file mode 100644 index 0000000..bbdcd1a --- /dev/null +++ b/3proxy/3proxy.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec 3proxy /etc/3proxy/3proxy.cfg diff --git a/3proxy/PKGBUILD b/3proxy/PKGBUILD new file mode 100644 index 0000000..7000c16 --- /dev/null +++ b/3proxy/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Jesus E. + +pkgname=3proxy +pkgver=0.9.5 +pkgrel=1 +pkgdesc="A tiny, crossplatform, free and libre proxy server" +arch=('i686' 'x86_64') +url='https://www.3proxy.ru/' +license=('Modified-BSD') +install=$pkgname.install +depends=('glibc') +makedepends=('gcc' 'make') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/z3APA3A/3proxy/archive/${pkgver}.tar.gz" + "remove-systemd.patch" + "${pkgname}.initd" + "${pkgname}.run") +sha512sums=('b668db6438da19ee2479228af744b9b3b9ff2c7e6d97aaf3b20737b165ab2baf656ac9ea92b6f1e169c428784c7d9e3e7eeb7c3effb1c0b77e5038319b6d2bcd' + '3f238de59dcdc305f681118b81d1bfefc72ff1e265f3459b02922244a011ef3fea140d019866be2514785d6069c30e8a031654e6bf41413276a4de93e70ab51b' + '58ddb5b0a1cfcac299a951c5dbfd09c6265572c9bfd2f5445970a2534b88bc0b19eb131c6195b79b3a018218da850312a3cb56bb5a3c733a66248d23423396a7' + 'c44d983f6a80582b912c068b2c300fdd3e4147f4a686a4c9b3dd8126d6fa7aeeaddd813ff83ba59a9aad21128f5a45d4ed190c8df2a87b9d487c378dcfaded14') + +prepare() { + cd $pkgname-$pkgver + + # arguments should be found in makepkg.conf, so let's remove them + # install should not really perform anything but calling another targets + sed --follow-symlinks -i.bak -e 's| -O2||g;s|CFLAGS = -g|CFLAGS =|;s|CC = gcc|CC ?= gcc|;s|LN = gcc|LN ?= gcc|' Makefile.Linux + + # additional fixes + patch -Np1 -i ${srcdir}/remove-systemd.patch +} + +build() { + cd $pkgname-$pkgver + + make \ + prefix="/usr" \ + DESTDIR="$pkgdir" \ + ETCDIR="/etc/$pkgname" \ + INITDIR="/etc/init.d" \ + -f Makefile.Linux +} + +package() { + cd $pkgname-$pkgver + + make prefix="/usr" install \ + DESTDIR="${pkgdir}" \ + ETCDIR="${pkgdir}/etc/$pkgname" \ + INITDIR="${pkgdir}/etc/init.d" \ + RUNBASE="${pkgdir}/var/run" \ + LOGBASE="${pkgdir}/var/log" -f Makefile.Linux + + # correct the internal structures of files and folders being FHS-compliant + # otherwise the makefile is leaving a complete mess when installed + install -d "${pkgdir}"/usr/libexec/$pkgname + mv "${pkgdir}"/usr/local/3proxy/libexec/*.so "${pkgdir}"/usr/libexec/$pkgname + rm -rf "${pkgdir}/usr/local" + ( cd "${pkgdir}"/usr/bin && mv proxy 3proxy-proxy ) || return 1 + rm -f \ + "${pkgdir}/etc/$pkgname/$pkgname.cfg" \ + "${pkgdir}/etc/$pkgname/conf" \ + "${pkgdir}/etc/init.d/$pkgname" \ + "${pkgdir}/var/log/$pkgname" + mkdir -p "${pkgdir}/var/log/$pkgname" + + # add initial configuration-files and license + install -Dm644 copying -t "${pkgdir}/usr/share/licenses/$pkgname" + install -Dm644 cfg/3proxy.cfg.sample "${pkgdir}/etc/$pkgname/3proxy.cfg.sample" + install -Dm644 cfg/counters.sample "${pkgdir}/etc/$pkgname/counters.sample" + + # install services + install -Dm755 "${srcdir}"/$pkgname.initd "${pkgdir}"/etc/init.d/$pkgname + install -Dm755 "${srcdir}/$pkgname.run" "${pkgdir}/etc/sv/$pkgname/run" +} diff --git a/3proxy/remove-systemd.patch b/3proxy/remove-systemd.patch new file mode 100644 index 0000000..2e16574 --- /dev/null +++ b/3proxy/remove-systemd.patch @@ -0,0 +1,27 @@ +--- a/Makefile.Linux 2022-03-15 12:44:07.000000000 +0100 ++++ b/Makefile.Linux 2022-03-15 12:46:50.910900628 +0100 +@@ -68,7 +68,6 @@ + INSTALL_CFG_OBJS2 = counters bandlimiters + + INSTALL_INITD_SCRIPT = scripts/init.d/3proxy.sh +-INSTALL_SYSTEMD_SCRIPT = scripts/3proxy.service + + CHROOTDIR = $(DESTDIR)$(chroot_prefix)/3proxy + CHROOTREL = ../..$(chroot_prefix)/3proxy +@@ -83,7 +82,6 @@ + LOGBASE = $(DESTDIR)/var/log + LOGDIR = $(LOGBASE)/3proxy + INSTALL_CFG_DEST = $(ETCDIR)/conf +-SYSTEMDDIR = $(DESTDIR)/usr/lib/systemd/system/ + + install-bin: + $(INSTALL_BIN) -d $(BINDIR) +@@ -124,8 +122,6 @@ + install-init: + $(INSTALL_BIN) -d $(INITDDIR) + $(INSTALL_BIN) $(INSTALL_INITD_SCRIPT) $(INITDDIR)/3proxy +- $(INSTALL_BIN) -d $(SYSTEMDDIR) +- $(INSTALL_DATA) $(INSTALL_SYSTEMD_SCRIPT) $(SYSTEMDDIR) + + install-run: + $(INSTALL_BIN) -d $(RUNDIR) diff --git a/6tunnel/PKGBUILD b/6tunnel/PKGBUILD new file mode 100644 index 0000000..767d17f --- /dev/null +++ b/6tunnel/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=6tunnel +pkgver=0.13 +pkgrel=2 +pkgdesc="Tunnels IPv6 connections for IPv4-only applications" +url='https://github.com/wojtekka/6tunnel' +license=('GPL-2') +arch=('i686' 'x86_64') +source=("https://github.com/wojtekka/6tunnel/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('e495b561e2fe4483417cf44291d729377fe02123f21b7d58b9aed294c676392d860de7474b6bcb4e3e4ffdcd87752ee1af070dfbab028b5de5adb778b0241f72') + +build() { + cd "$srcdir"/$pkgname-$pkgver + autoconf + ./configure \ + --prefix=/usr + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + install -Dm755 6tunnel -t "${pkgdir}"/usr/bin + install -Dm644 6tunnel.1 -t "${pkgdir}"/usr/share/man/man1 + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/7kaa/7kaa.desktop b/7kaa/7kaa.desktop new file mode 100644 index 0000000..9fbfe9a --- /dev/null +++ b/7kaa/7kaa.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Seven Kingdoms: Ancient Adversaries +Comment=Real-time strategy computer game +Exec=/usr/games/7kaa +Icon=7kaa.png +Terminal=false +Type=Application +Categories=Application;Game;StrategyGame; diff --git a/7kaa/7kaa.png b/7kaa/7kaa.png new file mode 100644 index 0000000000000000000000000000000000000000..71969fabdbbdd06350cdfcf528a32b30e9f8c023 GIT binary patch literal 569 zcmV-90>=G`P)}GG9QsV%Wt>(s|6TAlk z96aU9-dEY{+4l`2!s>k+O(=1m$z&E{Jn|vhF1pdQ#+XgD`Y^{^>~b;2>YW^QLmJ~v6|8t+-_!qI*Lxm^hjX>T zb&ngN^oR7R?b1+(4tEvwE{`Ysdaeu=u*VWUcjo27z>EYs*z4D@Y75e7$iu00000NkvXX Hu0mjf&I<{Q literal 0 HcmV?d00001 diff --git a/7kaa/7kaa.sh b/7kaa/7kaa.sh new file mode 100644 index 0000000..ebef236 --- /dev/null +++ b/7kaa/7kaa.sh @@ -0,0 +1,3 @@ +#!/bin/sh +cd /usr/share/games/7kaa +./7kaa "$@" diff --git a/7kaa/PKGBUILD b/7kaa/PKGBUILD new file mode 100644 index 0000000..3fb8a90 --- /dev/null +++ b/7kaa/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgname=7kaa +pkgver=2.15.6 +pkgrel=2 +pkgdesc="Seven Kingdoms: Ancient Adversaries is a real-time strategy (RTS) computer game" +url='http://7kfans.com/' +arch=('i686' 'x86_64') +license=('GPL-2' 'CC-BY-4.0' 'CC-BY-3.0' 'CC-BY-SA-4.0') +depends=('openal' 'desktop-file-utils' 'enet' 'gcc-libs' 'sdl2') +groups=('games') +source=("https://sourceforge.net/projects/skfans/files/${pkgname}-${pkgver}.tar.gz" + "https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-music.tar.lz"{,.sig} + "${pkgname}.sh" + "${pkgname}.desktop" + "${pkgname}.png" + "remove-nonfree-services.patch") +sha512sums=('8387680b39a203a50bcf466424a4401416d9f60aa00078e4e78a44b89e7afc722a62e81a1f3b5cdb20e323983e4a6506919340261fb6b2829e3ca275e648a64f' + 'd651ef19d66aec739d4aad504d27f804a44177f958675e4f35f9515d9b27ec7ede40ae5ef0da72518a17c376b0bf78f514c8e5eb05a774eda856fd80bc65bf02' + 'SKIP' + 'db0310f69fa44f9e9caba73c1f0825c36902052a36e14945ecf7a112283702e21f6d38480fe1b9fa0355390fa50d6e5d8d7958a6130c1c86dae3357d91fb56ad' + '2381d886b5e425ce0a0d11c044c2af582db40fef6ea5fd4b9b811d15bd3544044ded1ce59842d10ed6b85132dcbcc08b8a454799ca86ae04f6999bfe3bd41b99' + '7c72537ce58b73880756e45cf9056ce455282a1b34fb0a916994ff1fa8cfbe6e081d8a3f2ef2f772ac16945f15bed6ac04528ae44661c8a1b38b940b08f23c1b' + '01ef0d5473280ef4a244fc3da5fda26c30318abcf59a49bc37d335688c43d1fc70e259997de18ce41b539c91e4eb346b58e14f4b7db2a2cb7f6b2387dc71cae2') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np1 -i ${srcdir}/remove-nonfree-services.patch +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure + make +} + +package() { + # install data files + install -dm755 "${pkgdir}/usr/share/games/${pkgname}/" + cd "${srcdir}/$pkgname-$pkgver/data/" + cp -r {ENCYC,ENCYC2,IMAGE,RESOURCE,SCENARI2,SCENARIO,SOUND,SPRITE,TUTORIAL} "${pkgdir}/usr/share/games/${pkgname}/" + + # install music + cd "${srcdir}/$pkgname-music/" + cp -r MUSIC "${pkgdir}/usr/share/games/${pkgname}/" + + # fix permissions + cd "${pkgdir}/usr/share/games/${pkgname}/" + find . -type d -exec chmod 755 {} \; + find . -type f -exec chmod 755 {} \; + + # copy readme + install -D -m644 "${srcdir}/$pkgname-$pkgver/README" "${pkgdir}/usr/share/doc/${pkgname}/README" + + # main file + install -dm755 "${pkgdir}/usr/share/games/${pkgname}/" + install -D -m755 "${srcdir}/${pkgname}-${pkgver}/src/${pkgname}" "${pkgdir}/usr/share/games/${pkgname}/${pkgname}" + + # bash script + install -D -m755 "$srcdir/${pkgname}.sh" "${pkgdir}/usr/games/${pkgname}" + + # desktop entry + install -D -m644 "$srcdir/${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop" + install -D -m644 "${srcdir}/${pkgname}.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png" + + # licenses + install -Dm644 "${srcdir}/$pkgname-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm644 "${srcdir}/${pkgname}-music/COPYING-Music.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/7kaa/remove-nonfree-services.patch b/7kaa/remove-nonfree-services.patch new file mode 100644 index 0000000..84ce21c --- /dev/null +++ b/7kaa/remove-nonfree-services.patch @@ -0,0 +1,243 @@ +--- a/src/OGAMEMP.cpp 2022-04-29 03:09:22.000000000 +0200 ++++ b/src/OGAMEMP.cpp 2022-04-29 15:17:16.264545936 +0200 +@@ -585,22 +585,6 @@ + return; + } + +- if (service_mode == 3 || service_mode == 4) +- { +- mp_obj.set_service_provider("www.7kfans.com"); +- } +- +- if (service_mode == 4) +- { +- if (!mp_get_leader_board()) +- box.msg(_("Unable to retrieve leaderboard")); +-#ifdef HAVE_LIBCURL +- ws.deinit(); +-#endif +- mp_obj.deinit(); +- return; +- } +- + // create game or join game + switch( mp_select_mode(NULL, service_mode) ) + { +@@ -844,22 +828,6 @@ + return; + } + +- if (service_mode == 3 || service_mode == 4) +- { +- mp_obj.set_service_provider("www.7kfans.com"); +- } +- +- if (service_mode == 4) +- { +- if (!mp_get_leader_board()) +- box.msg(_("Unable to retrieve leaderboard")); +-#ifdef HAVE_LIBCURL +- ws.deinit(); +-#endif +- mp_obj.deinit(); +- return; +- } +- + // count required player + int gamePlayerCount = 0; + for(nationRecno = 1; nationRecno <= nation_array.size(); ++nationRecno) +@@ -1039,19 +1007,17 @@ + // --------- End of static function load_mp_game ----------// + + +-enum { SERVICE_BUTTON_NUM = 3 }; ++enum { SERVICE_BUTTON_NUM = 2 }; + const char *service_short_desc[SERVICE_BUTTON_NUM] = + { + N_("Local Area Network"), + // TRANSLATORS: This is a button label for entering a web or IP Address for connecting to an online game + N_("Enter Address"), +- "7kfans.com", + }; + const char *service_long_desc[SERVICE_BUTTON_NUM] = + { + N_("Host or join a game using the local area network"), + N_("Join a game by entering an address"), +- N_("Host or join a game over the internet"), + }; + //-------- Begin of function Game::mp_select_service --------// + // +@@ -1062,8 +1028,8 @@ + // + int Game::mp_select_service() + { +- static short buttonX[SERVICE_BUTTON_NUM] = { 171, 171, 171 }; +- static short buttonY[SERVICE_BUTTON_NUM] = { 57, 125, 193 }; ++ static short buttonX[SERVICE_BUTTON_NUM] = { 171, 171 }; ++ static short buttonY[SERVICE_BUTTON_NUM] = { 57, 125 }; + #define SERVICE_BUTTON_WIDTH 459 + #define SERVICE_BUTTON_HEIGHT 67 + enum { DESC_MARGIN = 10, DESC_TOP_MARGIN = 6 }; +@@ -1195,19 +1161,12 @@ + } + //--------- End of function Game::mp_select_service ---------// + +- +-const char *login_dialog_txt[] = +-{ +- N_("Enter your 7kfans.com/forums account credentials to continue.\nTIP: If you have just previously logged in using the same username, you can leave your password blank, and the previous session is used."), +- N_("Username:"), +- N_("Password:") +-}; + //-------- Begin of function Game::mp_select_mode --------// + // return 0 = cancel, 1 = create, 2 = join + int Game::mp_select_mode(char *defSaveFileName, int service_mode) + { +- static short buttonX[SERVICE_BUTTON_NUM] = { 171, 171, 171 }; +- static short buttonY[SERVICE_BUTTON_NUM] = { 57, 125, 193 }; ++ static short buttonX[SERVICE_BUTTON_NUM] = { 171, 171 }; ++ static short buttonY[SERVICE_BUTTON_NUM] = { 57, 125 }; + #define SERVICE_BUTTON_WIDTH 459 + #define SERVICE_BUTTON_HEIGHT 67 + enum { DESC_MARGIN = 10, DESC_TOP_MARGIN = 6 }; +@@ -1431,28 +1390,6 @@ + strncpy(username, config.player_name, MP_FRIENDLY_NAME_LEN); + username[MP_FRIENDLY_NAME_LEN] = 0; + password[0] = 0; +- +- if( input_name_pass(login_dialog_txt, username, MP_FRIENDLY_NAME_LEN+1, password, MP_FRIENDLY_NAME_LEN+1) ) +- { +- int rc2; +- if( strlen(password) ) +- rc2 = ws.login(username, password); +- else +- rc2 = ws.refresh(username); +- if( rc2 ) +- { +- mp_obj.create_my_player(username); // reset name +- } +- else +- { +- box.msg(_("Unable to connect to 7kfans.com")); +- rc = 0; +- } +- } +- else +- { +- rc = 0; +- } + #endif + } + +@@ -1735,12 +1672,6 @@ + } + + +-#ifdef HAVE_LIBCURL +-const char *login_failed_msg = N_("Unable to connect to the 7kfans.com service. Verify your account information and try again."); +-#else +-const char *login_failed_msg = N_("Unable to connect to the 7kfans service.\n(No libcurl)"); +-#endif +- + + //-------- Begin of function Game::mp_select_session --------// + int Game::mp_select_session() +@@ -1934,7 +1865,6 @@ + statusMsg = _("Trying to connect to the service provider"); + break; + case MP_POLL_LOGIN_FAILED: +- box.msg(_(login_failed_msg)); + goto exit_poll; + } + if( statusMsg ) +@@ -1942,15 +1872,6 @@ + vga_front.d3_panel_up(60, 65, VGA_WIDTH-60, 100, 2); + font_san.put(70, 75, statusMsg, 0, VGA_WIDTH-70); + } +-#if 0 +- if (mp_obj.is_update_available() > 0) +- { +- String update_message; +- update_message = _("There is a new version of Seven Kingdoms: Ancient Adversaries at www.7kfans.com"); +- vga_front.d3_panel_up(60, 65, VGA_WIDTH-60, 100, 2); +- font_san.put(70, 75, update_message, 0, VGA_WIDTH-70); +- } +-#endif + } + + if( refreshFlag & SSOPTION_SCROLL_BAR ) +@@ -2131,7 +2052,6 @@ + + if (pollStatus == MP_POLL_LOGIN_FAILED) + { +- box.msg(_(login_failed_msg)); + return 0; + } + else if (pollStatus == MP_POLL_NO_SESSION) +@@ -2997,7 +2917,6 @@ + pollStatus = mp_obj.poll_players(); + if (pollStatus == MP_POLL_LOGIN_FAILED) + { +- box.msg(_(login_failed_msg)); + break; + } + recvPtr = mp_obj.receive(&from, &recvLen, &sysMsgCount); +@@ -4903,7 +4822,6 @@ + pollStatus = mp_obj.poll_players(); + if (pollStatus == MP_POLL_LOGIN_FAILED) + { +- box.msg(_(login_failed_msg)); + break; + } + recvPtr = mp_obj.receive(&from, &recvLen, &sysMsgCount); +@@ -5638,11 +5556,6 @@ + retFlag = 1; + } + +- if( pollStatus == MP_POLL_LOGIN_FAILED ) +- { +- box.msg(_(login_failed_msg)); +- } +- + return retFlag; + } + #ifdef Y_SHIFT +--- a/src/curl/WebService.cpp 2022-04-29 03:09:22.000000000 +0200 ++++ b/src/curl/WebService.cpp 2022-04-29 15:12:54.294790812 +0200 +@@ -82,36 +82,11 @@ + int WebService::refresh(char *user) + { + CURLcode res; +- +- curl_easy_setopt(curl, CURLOPT_POST, 0); +- curl_easy_setopt(curl, CURLOPT_URL, "https://7kfans.com/forums/index.php"); +- buffer = ""; +- +- res = curl_easy_perform(curl); + return res == CURLE_OK; + } + + int WebService::login(char *user, char *pass) + { + CURLcode res; +- +- /* the fields given by the user must be url encoded */ +- std::string login = "login=Login&username="; +- char *encoded; +- +- encoded = curl_easy_escape(curl, user, 0); +- login += encoded; +- curl_free(encoded); +- login += "&password="; +- encoded = curl_easy_escape(curl, pass, 0); +- login += encoded; +- curl_free(encoded); +- +- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, login.c_str()); +- curl_easy_setopt(curl, CURLOPT_POST, 1); +- curl_easy_setopt(curl, CURLOPT_URL, "https://7kfans.com/forums/ucp.php?mode=login"); +- buffer = ""; +- +- res = curl_easy_perform(curl); + return res == CURLE_OK; + } diff --git a/a2ps/PKGBUILD b/a2ps/PKGBUILD new file mode 100644 index 0000000..e200aa3 --- /dev/null +++ b/a2ps/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=a2ps +pkgver=4.14 +_debver=$pkgver +_debrel=8 +pkgrel=2 +pkgdesc="An Any to PostScript filter" +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/a2ps/' +license=('GPL-3') +depends=('psutils' 'graphicsmagick-imagemagick-compat' 'perl') +makedepends=('gperf' 'help2man' 'quilt') +backup=('etc/a2ps/a2ps.cfg' + 'etc/a2ps/a2ps-site.cfg') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/a/a2ps/a2ps_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/a/a2ps/a2ps_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('fd6ac8ab47d789114c283e8ca508f7f56feabd1a189f4ac772cad9e6be7e3791e210892cfffd04ad1d39efe4b15386b2e61bf4cd56b70ed581c0554f36bfe06f' + 'a8107182cdc834a6601f72765af89abaa387eaca2f9e89c0f766404625a27361777221705c12724de6e6943a779d12dbf13f515890d19d84f3df309ee207584b') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + + LIBS+="-lm" ./configure \ + --prefix=/usr \ + --sysconfdir=/etc/a2ps \ + --includedir=/usr/include \ + --enable-shared \ + --enable-nls + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/a52dec/PKGBUILD b/a52dec/PKGBUILD new file mode 100644 index 0000000..6562a24 --- /dev/null +++ b/a52dec/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=a52dec +pkgver=0.7.4 +_debver=$pkgver +_debrel=20 +pkgrel=11 +pkgdesc="A free software library for decoding ATSC A/52 streams" +url="http://liba52.sourceforge.net/" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc' 'libsndio') +makedepends=('quilt') +source=("http://liba52.sourceforge.net/files/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/a/a52dec/a52dec_$_debver-$_debrel.debian.tar.xz" + 'a52dec-0.7.4-build.patch' + 'stderr.patch' + 'sndio.patch') +sha512sums=('4b26fe9492f218b775fb190b76ecf06edaeb656adfe6dcbd24d0a0f86871c3ba917edb88a398eb12dccedaa1605b6f0a0be06b09f9fddd9a46e457b7dd244848' + '55db8db3a3d907dec27f1f0166df9c51c64fbfae6d5e3d2dd4dad64489bb689e77b82fe24af6fdcd2625b8277c5fbdcc10f71b6bb2c96ccf5ec3606c6356ad59' + 'eee40a2871c00fc704fa49d3192a41ceadc4cf7e80d7d7cf368aa2a3e7ebb786f39ef835bdffca5685bf054316a9bacf87556b9a0c90868dbf29e7269873806e' + '670e4d4efead9aada56cb47f50d56baa345760d66a99d72bd06d03111c92b4e77c60eabe84308b2807b912ee35e008d835ee2d7602a213d9c68eba1bc7bc9152' + '721757f85c06bbd7fc46051ef4403377af43e55ed8457df01bc0acdfd99a2ee27f4fb7f9fac924912d1828f706a4b5473f7bb542f2730e69891b191b001dac9c') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/02-soname.diff || true + + quilt push -av + else + patch -Np1 -i ../a52dec-0.7.4-build.patch + patch -Np1 -i ../stderr.patch + fi + patch -Np1 -i ../sndio.patch + sed -i 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.in + mv configure.in configure.ac + ./bootstrap +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --enable-shared + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -m644 liba52/a52_internal.h "${pkgdir}/usr/include/a52dec/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/a52dec/a52dec-0.7.4-build.patch b/a52dec/a52dec-0.7.4-build.patch new file mode 100644 index 0000000..f3a29f3 --- /dev/null +++ b/a52dec/a52dec-0.7.4-build.patch @@ -0,0 +1,27 @@ +diff -Naur a52dec-0.7.4.orig/liba52/Makefile.am a52dec-0.7.4/liba52/Makefile.am +--- a52dec-0.7.4.orig/liba52/Makefile.am 2002-01-27 20:36:48.000000000 -0800 ++++ a52dec-0.7.4/liba52/Makefile.am 2004-11-05 01:10:21.317401872 -0800 +@@ -1,4 +1,3 @@ +-CFLAGS = @CFLAGS@ @LIBA52_CFLAGS@ + + lib_LTLIBRARIES = liba52.la + +diff -Naur a52dec-0.7.4.orig/liba52/configure.incl a52dec-0.7.4/liba52/configure.incl +--- a52dec-0.7.4.orig/liba52/configure.incl 2002-01-27 20:36:48.000000000 -0800 ++++ a52dec-0.7.4/liba52/configure.incl 2004-11-05 01:11:38.172672216 -0800 +@@ -2,7 +2,6 @@ + AC_SUBST([LIBA52_LIBS]) + + dnl avoid -fPIC when possible +-LIBA52_CFLAGS="$LIBA52_CFLAGS -prefer-non-pic" + + AC_ARG_ENABLE([double], + [ --enable-double use double-precision samples]) +diff -Naur a52dec-0.7.4.orig/src/Makefile.am a52dec-0.7.4/src/Makefile.am +--- a52dec-0.7.4.orig/src/Makefile.am 2002-06-22 18:51:57.000000000 -0700 ++++ a52dec-0.7.4/src/Makefile.am 2004-11-05 01:10:21.320401375 -0800 +@@ -1,4 +1,3 @@ +-CFLAGS = @A52DEC_CFLAGS@ + + bin_PROGRAMS = a52dec extract_a52 + a52dec_SOURCES = a52dec.c getopt.c gettimeofday.c diff --git a/a52dec/sndio.patch b/a52dec/sndio.patch new file mode 100644 index 0000000..804f515 --- /dev/null +++ b/a52dec/sndio.patch @@ -0,0 +1,281 @@ +diff --git a/include/config.h.in b/include/config.h.in +index 0f67e74..fa21203 100644 +--- a/include/config.h.in ++++ b/include/config.h.in +@@ -69,6 +69,9 @@ + /* libao win support */ + #undef LIBAO_WIN + ++/* libao sndio support */ ++#undef LIBAO_SNDIO ++ + /* Name of package */ + #undef PACKAGE + +diff --git a/libao/Makefile.am b/libao/Makefile.am +index 9b1f1cc..3b97b9f 100644 +--- a/libao/Makefile.am ++++ b/libao/Makefile.am +@@ -2,6 +2,6 @@ noinst_LIBRARIES = libao.a + libao_a_SOURCES = audio_out.c float2s16.c audio_out_null.c audio_out_float.c \ + audio_out_oss.c audio_out_solaris.c audio_out_al.c \ + audio_out_win.c audio_out_wav.c audio_out_aif.c \ +- audio_out_peak.c ++ audio_out_peak.c audio_out_sndio.c + + EXTRA_DIST = configure.incl audio_out_internal.h +diff --git a/libao/Makefile.in b/libao/Makefile.in +index b80e62a..846021e 100644 +--- a/libao/Makefile.in ++++ b/libao/Makefile.in +@@ -77,7 +77,7 @@ STRIP = @STRIP@ + VERSION = @VERSION@ + + noinst_LIBRARIES = libao.a +-libao_a_SOURCES = audio_out.c float2s16.c audio_out_null.c audio_out_float.c audio_out_oss.c audio_out_solaris.c audio_out_al.c audio_out_win.c audio_out_wav.c audio_out_aif.c audio_out_peak.c ++libao_a_SOURCES = audio_out.c float2s16.c audio_out_null.c audio_out_float.c audio_out_oss.c audio_out_solaris.c audio_out_al.c audio_out_win.c audio_out_wav.c audio_out_aif.c audio_out_peak.c audio_out_sndio.c + + + EXTRA_DIST = configure.incl audio_out_internal.h +@@ -96,7 +96,7 @@ libao_a_OBJECTS = audio_out.$(OBJEXT) float2s16.$(OBJEXT) \ + audio_out_null.$(OBJEXT) audio_out_float.$(OBJEXT) \ + audio_out_oss.$(OBJEXT) audio_out_solaris.$(OBJEXT) \ + audio_out_al.$(OBJEXT) audio_out_win.$(OBJEXT) audio_out_wav.$(OBJEXT) \ +-audio_out_aif.$(OBJEXT) audio_out_peak.$(OBJEXT) ++audio_out_aif.$(OBJEXT) audio_out_peak.$(OBJEXT) audio_out_sndio.$(OBJEXT) + AR = ar + CFLAGS = @CFLAGS@ + COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +@@ -243,6 +243,8 @@ audio_out_solaris.o: audio_out_solaris.c ../include/config.h + audio_out_wav.o: audio_out_wav.c ../include/config.h ../include/a52.h \ + ../include/audio_out.h audio_out_internal.h + audio_out_win.o: audio_out_win.c ../include/config.h ++audio_out_sndio.o: audio_out_sndio.c ../include/config.h ../include/a52.h \ ++ ../include/audio_out.h audio_out_internal.h + float2s16.o: float2s16.c ../include/config.h ../include/a52.h \ + ../include/audio_out.h + +diff --git a/libao/audio_out.c b/libao/audio_out.c +index bf8aca8..130029e 100644 +--- a/libao/audio_out.c ++++ b/libao/audio_out.c +@@ -33,6 +33,10 @@ extern ao_open_t ao_oss_open; + extern ao_open_t ao_ossdolby_open; + extern ao_open_t ao_oss4_open; + extern ao_open_t ao_oss6_open; ++extern ao_open_t ao_sndio_open; ++extern ao_open_t ao_sndiodolby_open; ++extern ao_open_t ao_sndio4_open; ++extern ao_open_t ao_sndio6_open; + extern ao_open_t ao_solaris_open; + extern ao_open_t ao_solarisdolby_open; + extern ao_open_t ao_al_open; +@@ -59,6 +63,12 @@ static ao_driver_t audio_out_drivers[] = { + {"oss4", ao_oss4_open}, + {"oss6", ao_oss6_open}, + #endif ++#ifdef LIBAO_SNDIO ++ {"sndio", ao_sndio_open}, ++ {"sndiodolby", ao_sndiodolby_open}, ++ {"sndio4", ao_sndio4_open}, ++ {"sndio6", ao_sndio6_open}, ++#endif + #ifdef LIBAO_SOLARIS + {"solaris", ao_solaris_open}, + {"solarisdolby", ao_solarisdolby_open}, +diff --git b/libao/audio_out_sndio.c b/libao/audio_out_sndio.c +new file mode 100644 +index 0000000..27c55cb +--- /dev/null ++++ b/libao/audio_out_sndio.c +@@ -0,0 +1,170 @@ ++/* ++ * audio_out_sndio.c ++ * Copyright (C) 2000-2003 Michel Lespinasse ++ * Copyright (C) 1999-2000 Aaron Holtzman ++ * ++ * This file is part of a52dec, a free ATSC A-52 stream decoder. ++ * See http://liba52.sourceforge.net/ for updates. ++ * ++ * a52dec is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * a52dec is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ */ ++ ++#include "config.h" ++ ++#ifdef LIBAO_SNDIO ++ ++#include ++#include ++#include ++#include ++ ++#include "a52.h" ++#include "audio_out.h" ++#include "audio_out_internal.h" ++ ++typedef struct sndio_instance_s { ++ ao_instance_t ao; ++ struct sio_hdl *hdl; ++ int sample_rate; ++ int set_params; ++ int flags; ++} sndio_instance_t; ++ ++static int sndio_setup (ao_instance_t * _instance, int sample_rate, int * flags, ++ sample_t * level, sample_t * bias) ++{ ++ sndio_instance_t * instance = (sndio_instance_t *) _instance; ++ ++ if ((instance->set_params == 0) && (instance->sample_rate != sample_rate)) ++ return 1; ++ instance->sample_rate = sample_rate; ++ ++ *flags = instance->flags; ++ *level = 1; ++ *bias = 384; ++ ++ return 0; ++} ++ ++static int sndio_play (ao_instance_t * _instance, int flags, sample_t * _samples) ++{ ++ sndio_instance_t * instance = (sndio_instance_t *) _instance; ++ int16_t int16_samples[256*6]; ++ int chans = -1; ++ ++#ifdef LIBA52_DOUBLE ++ float samples[256 * 6]; ++ int i; ++ ++ for (i = 0; i < 256 * 6; i++) ++ samples[i] = _samples[i]; ++#else ++ float * samples = _samples; ++#endif ++ ++ chans = channels_multi (flags); ++ flags &= A52_CHANNEL_MASK | A52_LFE; ++ ++ if (instance->set_params) { ++ struct sio_par par; ++ ++ sio_initpar(&par); ++ par.bits = 16; ++ par.sig = 1; ++ par.le = SIO_LE_NATIVE; ++ par.pchan = chans; ++ par.rate = instance->sample_rate; ++ if (!sio_setpar(instance->hdl, &par) || !sio_setpar(instance->hdl, &par)) { ++ fprintf (stderr, "Can not set audio parameters\n"); ++ return 1; ++ } ++ if (par.bits != 16 || par.sig != 1 || par.le != SIO_LE_NATIVE || ++ par.pchan != chans || par.rate != instance->sample_rate) { ++ fprintf (stderr, "Unsupported audio parameters\n"); ++ return 1; ++ } ++ instance->flags = flags; ++ instance->set_params = 0; ++ sio_start(instance->hdl); ++ } else if ((flags == A52_DOLBY) && (instance->flags == A52_STEREO)) { ++ fprintf (stderr, "Switching from stereo to dolby surround\n"); ++ instance->flags = A52_DOLBY; ++ } else if ((flags == A52_STEREO) && (instance->flags == A52_DOLBY)) { ++ fprintf (stderr, "Switching from dolby surround to stereo\n"); ++ instance->flags = A52_STEREO; ++ } else if (flags != instance->flags) ++ return 1; ++ ++ float2s16_multi (samples, int16_samples, flags); ++ sio_write (instance->hdl, int16_samples, 256 * sizeof (int16_t) * chans); ++ ++ return 0; ++} ++ ++static void sndio_close (ao_instance_t * _instance) ++{ ++ sndio_instance_t * instance = (sndio_instance_t *) _instance; ++ ++ sio_close (instance->hdl); ++} ++ ++static ao_instance_t * sndio_open (int flags) ++{ ++ sndio_instance_t * instance; ++ int format; ++ ++ instance = (sndio_instance_t *) malloc (sizeof (sndio_instance_t)); ++ if (instance == NULL) ++ return NULL; ++ ++ instance->ao.setup = sndio_setup; ++ instance->ao.play = sndio_play; ++ instance->ao.close = sndio_close; ++ ++ instance->sample_rate = 0; ++ instance->set_params = 1; ++ instance->flags = flags; ++ ++ instance->hdl = sio_open (SIO_DEVANY, SIO_PLAY, 0); ++ if (instance->hdl == NULL) { ++ fprintf (stderr, "Can not open " SIO_DEVANY " device\n"); ++ free (instance); ++ return NULL; ++ } ++ ++ return (ao_instance_t *) instance; ++} ++ ++ao_instance_t * ao_sndio_open (void) ++{ ++ return sndio_open (A52_STEREO); ++} ++ ++ao_instance_t * ao_sndiodolby_open (void) ++{ ++ return sndio_open (A52_DOLBY); ++} ++ ++ao_instance_t * ao_sndio4_open (void) ++{ ++ return sndio_open (A52_2F2R); ++} ++ ++ao_instance_t * ao_sndio6_open (void) ++{ ++ return sndio_open (A52_3F2R | A52_LFE); ++} ++ ++#endif +diff --git a/libao/configure.incl b/libao/configure.incl +index 6c6ad6b..294713e 100644 +--- a/libao/configure.incl ++++ b/libao/configure.incl +@@ -12,6 +12,15 @@ if test x"$enable_oss" != x"no"; then + esac + fi + ++dnl check for sndio ++AC_ARG_ENABLE([sndio], ++ [ --disable-sndio make a version not using sndio]) ++if test x"$enable_sndio" != x"no"; then ++ AC_DEFINE([LIBAO_SNDIO],,[libao SNDIO support]) ++ AC_CHECK_LIB([sndio],[sio_initpar], ++ [LIBAO_LIBS="$LIBAO_LIBS -lsndio"]) ++fi ++ + dnl check for solaris + AC_ARG_ENABLE([solaris-audio], + [ --disable-solaris-audio make a version not using solaris audio]) diff --git a/a52dec/stderr.patch b/a52dec/stderr.patch new file mode 100644 index 0000000..3459d64 --- /dev/null +++ b/a52dec/stderr.patch @@ -0,0 +1,17 @@ +diff -aur a52dec-0.7.4.orig/liba52/imdct.c a52dec-0.7.4/liba52/imdct.c +--- a52dec-0.7.4.orig/liba52/imdct.c 2016-06-10 02:39:52.984345055 -0700 ++++ a52dec-0.7.4/liba52/imdct.c 2016-06-10 02:41:08.304633486 -0700 +@@ -419,13 +419,11 @@ + + #ifdef LIBA52_DJBFFT + if (mm_accel & MM_ACCEL_DJBFFT) { +- fprintf (stderr, "Using djbfft for IMDCT transform\n"); + ifft128 = (void (*) (complex_t *)) fftc4_un128; + ifft64 = (void (*) (complex_t *)) fftc4_un64; + } else + #endif + { +- fprintf (stderr, "No accelerated IMDCT transform found\n"); + ifft128 = ifft128_c; + ifft64 = ifft64_c; + } diff --git a/aalib/PKGBUILD b/aalib/PKGBUILD new file mode 100644 index 0000000..8d2ab2a --- /dev/null +++ b/aalib/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=aalib +pkgver=1.4rc5 +_pkgver=1.4.0 +_debver=1.4p5 +_debrel=48 +pkgrel=14 +pkgdesc="A portable ASCII art graphic library" +arch=('i686' 'x86_64') +url='https://aa-project.sourceforge.net/aalib/' +license=('LGPL-2') +depends=('gpm' 'libx11') +makedepends=('libxt' 'quilt') +source=("https://downloads.sourceforge.net/sourceforge/aa-project/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/a/aalib/aalib_${_debver}-${_debrel}.debian.tar.xz" + "aclocal-fixes.patch") +sha512sums=('3e4506eccce3b81ccbbb79a4a1b90abd39e2259e6043fde90f70b9ca279bd4c37758a047167267b97c4ec92f64fb17c7c8f548114f0d0c6e78ddb9463b5f1299' + '56d5ea459c0b82e44d3124b41d1251c3f314a33132cebec654998e42437aa5ed02074a9ba99aa1aefde4958d1900e10af0bdb5e378ba15b26116ee8165ae9f8c' + 'aa98b2226c2dd15c13561b28b5558ed459e9065c2339222df7c3002ea17a9b81711e6ff4f59d66ad817d96461dd8b5411c87b049306c875f295fdb8d0c9425c7') + +prepare() { + cd ${pkgname}-${_pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0008-Symbol-versioning.patch || true + + quilt push -av + else + patch -p0 -i "${srcdir}/aclocal-fixes.patch" + fi + autoreconf -vfi +} + +build() { + cd ${pkgname}-${_pkgver} + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info + make +} + +package() { + cd ${pkgname}-${_pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/aalib/aclocal-fixes.patch b/aalib/aclocal-fixes.patch new file mode 100644 index 0000000..3f1919a --- /dev/null +++ b/aalib/aclocal-fixes.patch @@ -0,0 +1,11 @@ +--- aalib.m4.orig 2006-03-05 13:58:21.000000000 +0000 ++++ aalib.m4 2006-03-05 13:58:32.000000000 +0000 +@@ -9,7 +9,7 @@ + dnl AM_PATH_AALIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) + dnl Test for AALIB, and define AALIB_CFLAGS and AALIB_LIBS + dnl +-AC_DEFUN(AM_PATH_AALIB, ++AC_DEFUN([AM_PATH_AALIB], + [dnl + dnl Get the cflags and libraries from the aalib-config script + dnl diff --git a/abiword/PKGBUILD b/abiword/PKGBUILD new file mode 100644 index 0000000..9a147f1 --- /dev/null +++ b/abiword/PKGBUILD @@ -0,0 +1,88 @@ +# Maintainer: Jesus E. + +pkgname=abiword +pkgver=3.0.6 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Efficient, featureful, free and libre word processor with collaboration" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('fribidi' 'wv' 'goffice' 'librsvg-legacy' 'enchant' 'desktop-file-utils' 'libical' + 'gtk-update-icon-cache' 'loudmouth' 'link-grammar' 'gtkmathview' 'aiksaurus' 'libxslt' 'libgsf' 'libots') +makedepends=('pkgconfig' 'boost' 'gobject-introspection' 'python-pygobject' 'autoconf-archive' 'quilt') +options=('!makeflags') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/a/abiword/abiword_${pkgver}~dfsg.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/a/abiword/abiword_${_debver}~dfsg-${_debrel}.debian.tar.xz" + "aiksaurus-plugin.m4" + "command-plugin.m4" + "python-override.patch" + "boost-asio.patch" + "liberation-fonts.patch") +sha512sums=('eb7769073ed50b420354bfb16bfa49a381b8d5737139917fe0466502d6b2713140dab4b6a846ce875da3e04b2ed9045f271986f71877607048bfd4de8ec374b3' + '171fb6ae9034e622e2138fbb5cd7b4919aa6d224da220735419ad5ecc1bad373e7bc024f37ccf0dcf19fe46718896d269628f253a1bbe70fda37670e5b33ee3f' + '6e28e62c837e62857d8b81a659440ca8f72f958e61c1d0cd59818f171fc7a175ded2423f07d742bdd4a6913c5571dfcec0e8d62b5a0ea8ec905cda55bf2601c3' + '0c9df93e3ee7253493d6b4d08711a7dbcc37a5fcfd40780a83d81d7d29f39fa32b28eaf16c0025edf34cef1538e594548b8b2b64ba9b0c2165a60ebb9e29dc4d' + '0d766ab53257cc9a0638bf137d1834e584ffe2f305115da4e91a6aaffa86fcd14c34b42667987250cf80f118679b5d6bc7ea92b08ea7be85007ef3498444ea1e' + 'ab6e19f66433549644d1c1aae9beb93de038240a0089d38235de78dc8932ade27a2f73383448d07a8683e4c5ef85b954584b16cfbba405e61c698a991f348579' + 'c89d0059a215a996e6df81284201012072fdbdc472c11e52bbc5208e35148a6d3f99b46a7e0e0a403c67c5b99540ec88a274f9e1dc82e2f87d6c1e417dc2a01c') + +prepare() { + mv "AbiWord-release-$pkgver" "$pkgname-$pkgver" + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/enchant2.patch + + quilt push -av + fi + + # fix python override code to work with Python 3.x + patch -Np1 -i ${srcdir}/python-override.patch + + # replace nonfree fonts support to liberation fonts + patch -Np1 -i ${srcdir}/liberation-fonts.patch + + # install missing m4 file + install -m644 ${srcdir}/aiksaurus-plugin.m4 plugins/aiksaurus/plugin.m4 + install -m644 ${srcdir}/command-plugin.m4 plugins/command/plugin.m4 + + # generate m4 file for configure + find plugins -name plugin.m4 | xargs cat > plugin-configure.m4 + + ./autogen-common.sh + libtoolize --force + autoreconf -fi +} + + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr \ + --enable-shared \ + --disable-static \ + --enable-clipart \ + --enable-templates \ + --enable-plugins="aiksaurus bmp collab docbook \ + epub freetranslation garble gdict gimp goffice grammar \ + hrtext iscii kword loadbindings mathview mht \ + opendocument openwriter openxml opml ots paint \ + passepartout pdf presentation s5 urldict wml xslfo" \ + --enable-introspection + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/abiword/aiksaurus-plugin.m4 b/abiword/aiksaurus-plugin.m4 new file mode 100644 index 0000000..d83959c --- /dev/null +++ b/abiword/aiksaurus-plugin.m4 @@ -0,0 +1,46 @@ + +aiksaurus_pkgs="aiksaurus-1.0" +aiksaurus_gtk_pkgs="aiksaurusgtk3-1.0" +aiksaurus_deps="no" + +if test "$enable_aiksaurus" != ""; then + +PKG_CHECK_EXISTS([ $aiksaurus_pkgs ], +[ + aiksaurus_deps="yes" +], [ + test "$enable_aiksaurus" = "auto" && AC_MSG_WARN([aiksaurus plugin: dependencies not satisfied - $aiksaurus_pkgs]) +]) + +fi + +if test "$enable_aiksaurus" = "yes" || \ + test "$aiksaurus_deps" = "yes"; then + +use_builtin_aiksaurus_gtk="no" +if test "$TOOLKIT" = "gtk"; then +PKG_CHECK_EXISTS([ $aiksaurus_gtk_pkgs ], +[ + aiksaurus_pkgs="$aiksaurus_pkgs $aiksaurus_gtk_pkgs" +], [use_builtin_aiksaurus_gtk="yes"]) +fi + +if test "$enable_aiksaurus_builtin" = "yes"; then +AC_MSG_ERROR([aiksaurus plugin: static linking not supported]) +fi + +PKG_CHECK_MODULES(AIKSAURUS,[ $aiksaurus_pkgs ]) + + +test "$enable_aiksaurus" = "auto" && PLUGINS="$PLUGINS aiksaurus" + +AIKSAURUS_CFLAGS="$AIKSAURUS_CFLAGS "'${PLUGIN_CFLAGS}' +AIKSAURUS_LIBS="$AIKSAURUS_LIBS "'${PLUGIN_LIBS}' + +fi + +AM_CONDITIONAL([WITH_BUILTIN_AIKSAURUS_GTK],[ test "x$use_builtin_aiksaurus_gtk" = "xyes" ]) + +AC_SUBST([AIKSAURUS_CFLAGS]) +AC_SUBST([AIKSAURUS_LIBS]) + diff --git a/abiword/boost-asio.patch b/abiword/boost-asio.patch new file mode 100644 index 0000000..5156983 --- /dev/null +++ b/abiword/boost-asio.patch @@ -0,0 +1,164 @@ +From de5dc5fd94a5fe321791d44e88d209a4972264ba Mon Sep 17 00:00:00 2001 +From: Hubert Figuiere +Date: Sun, 5 Feb 2017 02:52:37 +0000 +Subject: [PATCH] Bug 13839 - Detect boost::asio + +Patch by Adam Majer + +git-svn-id: svn+ssh://svn.abisource.com/svnroot/abiword/trunk@35397 bcba8976-2d24-0410-9c9c-aab3bd5fdfd6 +--- + .../collab/backends/service/xp/AsyncWorker.h | 7 ++++++- + .../backends/service/xp/RealmConnection.h | 6 +++++- + .../collab/backends/service/xp/RealmProtocol.h | 6 +++++- + .../collab/backends/service/xp/tls_tunnel.h | 6 +++++- + .../collab/backends/tcp/xp/IOServerHandler.h | 6 +++++- + plugins/collab/plugin.m4 | 18 +++++++++++------- + 6 files changed, 37 insertions(+), 12 deletions(-) + +diff --git a/plugins/collab/backends/service/xp/AsyncWorker.h b/plugins/collab/backends/service/xp/AsyncWorker.h +index ab0437c29f..2e527f9254 100644 +--- a/plugins/collab/backends/service/xp/AsyncWorker.h ++++ b/plugins/collab/backends/service/xp/AsyncWorker.h +@@ -19,7 +19,12 @@ + #ifndef __ASYNC_WORKER__ + #define __ASYNC_WORKER__ + +-#include ++#if defined(HAVE_BOOST_ASIO_HPP) ++# include ++#else ++# include ++#endif ++ + #include + #include + #include +diff --git a/plugins/collab/backends/service/xp/RealmConnection.h b/plugins/collab/backends/service/xp/RealmConnection.h +index 7dc715548c..214b12316b 100644 +--- a/plugins/collab/backends/service/xp/RealmConnection.h ++++ b/plugins/collab/backends/service/xp/RealmConnection.h +@@ -21,7 +21,11 @@ + + #include + #include +-#include ++#if defined(HAVE_BOOST_ASIO_HPP) ++# include ++#else ++# include ++#endif + #include + #include + #include "ut_types.h" +diff --git a/plugins/collab/backends/service/xp/RealmProtocol.h b/plugins/collab/backends/service/xp/RealmProtocol.h +index 772ad891dd..03fa536dea 100644 +--- a/plugins/collab/backends/service/xp/RealmProtocol.h ++++ b/plugins/collab/backends/service/xp/RealmProtocol.h +@@ -9,7 +9,11 @@ + #include + #endif + #include +-#include ++#if defined(HAVE_BOOST_ASIO_HPP) ++# include ++#else ++# include ++#endif + + namespace realm { + +diff --git a/plugins/collab/backends/service/xp/tls_tunnel.h b/plugins/collab/backends/service/xp/tls_tunnel.h +index ea07151c70..a78f7815c3 100644 +--- a/plugins/collab/backends/service/xp/tls_tunnel.h ++++ b/plugins/collab/backends/service/xp/tls_tunnel.h +@@ -33,7 +33,11 @@ + #include + #include + #include +-#include ++#if defined(HAVE_BOOST_ASIO_HPP) ++# include ++#else ++# include ++#endif + #include + #include + #ifdef _MSC_VER +diff --git a/plugins/collab/backends/tcp/xp/IOServerHandler.h b/plugins/collab/backends/tcp/xp/IOServerHandler.h +index 7a561f4a1c..8a2b931319 100644 +--- a/plugins/collab/backends/tcp/xp/IOServerHandler.h ++++ b/plugins/collab/backends/tcp/xp/IOServerHandler.h +@@ -23,7 +23,11 @@ + + #include + #include +-#include ++#if defined(HAVE_BOOST_ASIO_HPP) ++# include ++#else ++# include ++#endif + + #include + #include "Session.h" +diff --git a/plugins/collab/plugin.m4 b/plugins/collab/plugin.m4 +index 98028b99ff..7cfe3a1388 100644 +--- a/plugins/collab/plugin.m4 ++++ b/plugins/collab/plugin.m4 +@@ -70,20 +70,22 @@ AC_ARG_ENABLE([collab-backend-tcp], + enable_collab_backend_tcp=$enableval + if test "$enable_collab_backend_tcp" != "no"; then + AC_LANG_PUSH(C++) +- AC_CHECK_HEADERS([asio.hpp], [], ++ AC_CHECK_HEADERS([asio.hpp], [], ++ [AC_CHECK_HEADERS([boost/asio.hpp], [AC_DEFINE([HAVE_BOOST_ASIO_HPP])], + [ + AC_MSG_ERROR([collab plugin: asio is required for the collab plugin TCP backend, see http://think-async.com/]) +- ]) ++ ])]) + AC_LANG_POP + collab_deps="yes" + fi + ], [ + AC_LANG_PUSH(C++) +- AC_CHECK_HEADERS([asio.hpp], ++ AC_CHECK_HEADERS([asio.hpp], ++ [AC_CHECK_HEADERS([boost/asio.hpp], [AC_DEFINE([HAVE_BOOST_ASIO_HPP])], + [ + enable_collab_backend_tcp="yes" + collab_deps="yes" +- ]) ++ ])]) + AC_LANG_POP + ]) + AC_MSG_CHECKING([for collab tcp backend]) +@@ -112,10 +114,11 @@ AC_ARG_ENABLE([collab-backend-service], + enable_collab_backend_service=$enableval + if test "$enable_collab_backend_service" != "no"; then + AC_LANG_PUSH(C++) +- AC_CHECK_HEADERS([asio.hpp], [], ++ AC_CHECK_HEADERS([asio.hpp], [], ++ [AC_CHECK_HEADERS([boost/asio.hpp], [AC_DEFINE([HAVE_BOOST_ASIO_HPP])], + [ + AC_MSG_ERROR([collab plugin: asio is required for the the abicollab.net backend, see http://think-async.com/]) +- ]) ++ ])]) + AC_LANG_POP + PKG_CHECK_EXISTS([ $collab_service_req ], [], [ + AC_MSG_ERROR([collab plugin: missing dependencies]) +@@ -125,13 +128,14 @@ AC_ARG_ENABLE([collab-backend-service], + ], [ + AC_LANG_PUSH(C++) + AC_CHECK_HEADERS([asio.hpp], ++ [AC_CHECK_HEADERS([boost/asio.hpp], [AC_DEFINE([HAVE_BOOST_ASIO_HPP])], + [ + PKG_CHECK_EXISTS([ $collab_service_req ], [ + enable_collab_backend_service="yes" + collab_deps="yes" + ], [ + enable_collab_backend_service="no" +- ]) ++ ])]) + ], [ + enable_collab_backend_service="no" + ]) diff --git a/abiword/command-plugin.m4 b/abiword/command-plugin.m4 new file mode 100644 index 0000000..6dcf068 --- /dev/null +++ b/abiword/command-plugin.m4 @@ -0,0 +1,47 @@ +command_deps="no" + +if test "$enable_command" != ""; then + if test "$TOOLKIT" != "gtk"; then + command_deps="no" + AC_MSG_WARN([command plugin: only supported on UNIX/gtk platforms]) + else + # stolen from the original plugin.m4 in abiword-plugins + AC_CHECK_HEADER(readline/readline.h,[ + AC_CHECK_HEADER(readline/history.h,[ + AC_CHECK_LIB(readline,readline,[ + command_deps="yes" + ],[ AC_CHECK_LIB(readline,rl_initialize,[ + command_deps="yes" + + ],,) + ],) + ]) + ]) + fi +fi + +if test "$enable_command" = "yes" || \ + test "$command_deps" = "yes"; then + +if test "$enable_command_builtin" = "yes"; then +AC_MSG_ERROR([command plugin: static linking not supported]) +fi + +AC_MSG_CHECKING([command plugin: for readline and friends]) +if test "$command_deps" != "yes"; then + AC_MSG_ERROR([no]) +else + AC_MSG_RESULT([yes]) + COMMAND_LIBS="-lreadline -lhistory $COMMAND_LIBS" +fi + +test "$enable_command" = "auto" && PLUGINS="$PLUGINS command" + +COMMAND_CFLAGS="$COMMAND_CFLAGS "'${PLUGIN_CFLAGS}' +COMMAND_LIBS="$COMMAND_LIBS "'${PLUGIN_LIBS}' + +fi + +AC_SUBST([COMMAND_CFLAGS]) +AC_SUBST([COMMAND_LIBS]) + diff --git a/abiword/liberation-fonts.patch b/abiword/liberation-fonts.patch new file mode 100644 index 0000000..1660c3e --- /dev/null +++ b/abiword/liberation-fonts.patch @@ -0,0 +1,1694 @@ +diff --git a/plugins/latex/xp/ie_exp_LaTeX.cpp b/plugins/latex/xp/ie_exp_LaTeX.cpp +index f3d56c6..d5a77ef 100644 +--- a/plugins/latex/xp/ie_exp_LaTeX.cpp ++++ b/plugins/latex/xp/ie_exp_LaTeX.cpp +@@ -1046,7 +1046,7 @@ void s_LaTeX_Listener::_openSpan(PT_AttrPropIndex api) + m_pie->write("\\texttt{"); + m_NumCloseBrackets++; + } +- if (!strcmp("Arial", szValue) || ++ if (!strcmp("Liberation Sans", szValue) || + !strcmp("Helvetic", szValue) || + !strcmp("Luxi Sans",szValue)) { + m_pie->write("\\textsf{"); +diff --git a/plugins/opendocument/imp/xp/ODi_FontFaceDecls.cpp b/plugins/opendocument/imp/xp/ODi_FontFaceDecls.cpp +index ed167dc..e0831c9 100644 +--- a/plugins/opendocument/imp/xp/ODi_FontFaceDecls.cpp ++++ b/plugins/opendocument/imp/xp/ODi_FontFaceDecls.cpp +@@ -59,7 +59,7 @@ void ODi_FontFaceDecls::startElement (const gchar* pName, + fontFamily = pFontFamily; + + if (pFontFamily && (pFontFamily[0] == '\'') && (pFontFamily[strlen(pFontFamily)-1] == '\'')) { +- // e.g.: Turns a "'Times New Roman'" into a "Times New Roman". ++ // e.g.: Turns a "'Liberation Serif'" into a "Liberation Serif". + // OpenOffice.org sometimes adds those extra "'" surrounding the + // font family name if it's composed by more than one word. + m_fontFamilies[pStyleName] = +diff --git a/plugins/openwriter/xp/ie_exp_OpenWriter.cpp b/plugins/openwriter/xp/ie_exp_OpenWriter.cpp +index 1fab89a..a399c59 100644 +--- a/plugins/openwriter/xp/ie_exp_OpenWriter.cpp ++++ b/plugins/openwriter/xp/ie_exp_OpenWriter.cpp +@@ -900,12 +900,12 @@ bool OO_StylesWriter::writeStyles(PD_Document * pDoc, GsfOutfile * oo, OO_Styles + { + "\n", + "\n", +- "\n", ++ "\n", + "\n", + "\n", + "\n", + "\n", +- "\n", ++ "\n", + "\n" + }; + +diff --git a/plugins/openxml/common/xp/OXML_FontManager.cpp b/plugins/openxml/common/xp/OXML_FontManager.cpp +index 41b719d..2c53c1a 100644 +--- a/plugins/openxml/common/xp/OXML_FontManager.cpp ++++ b/plugins/openxml/common/xp/OXML_FontManager.cpp +@@ -34,7 +34,7 @@ + #include + + OXML_FontManager::OXML_FontManager() : +- m_defaultFont("Times New Roman") ++ m_defaultFont("Liberation Serif") + { + m_major_rts.clear(); + m_minor_rts.clear(); +diff --git a/plugins/openxml/common/xp/OXML_List.cpp b/plugins/openxml/common/xp/OXML_List.cpp +index 5bcb47a..88dba7e 100644 +--- a/plugins/openxml/common/xp/OXML_List.cpp ++++ b/plugins/openxml/common/xp/OXML_List.cpp +@@ -258,7 +258,7 @@ UT_Error OXML_List::serialize(IE_Exp_OpenXML* exporter) + txt = txt.replace(index+1, 1, 1, '1'+i); + } + +- std::string fontFamily("Times New Roman"); ++ std::string fontFamily("Liberation Serif"); + const gchar* listType = "bullet"; + switch(type) + { +diff --git a/plugins/passepartout/xp/ie_exp_Passepartout.cpp b/plugins/passepartout/xp/ie_exp_Passepartout.cpp +index e18e7f1..eec9367 100644 +--- a/plugins/passepartout/xp/ie_exp_Passepartout.cpp ++++ b/plugins/passepartout/xp/ie_exp_Passepartout.cpp +@@ -318,7 +318,7 @@ void Passepartout_Listener::_openBlock(PT_AttrPropIndex api) + } + else + { +- TempStr = UT_UTF8String_sprintf(" font-family=\"%s\"", "Times New Roman" ); ++ TempStr = UT_UTF8String_sprintf(" font-family=\"%s\"", "Liberation Serif" ); + m_pie->write(TempStr.utf8_str()); + } + +@@ -426,7 +426,7 @@ void Passepartout_Listener::_openFont(PT_AttrPropIndex api) + } + else + { +- TempStr = UT_UTF8String_sprintf(" font-family=\"%s\"", "Times New Roman" ); ++ TempStr = UT_UTF8String_sprintf(" font-family=\"%s\"", "Liberation Serif" ); + m_pie->write(TempStr.utf8_str()); + } + +diff --git a/plugins/t602/xp/ie_imp_T602.cpp b/plugins/t602/xp/ie_imp_T602.cpp +index a57a9e2..f7f2301 100644 +--- a/plugins/t602/xp/ie_imp_T602.cpp ++++ b/plugins/t602/xp/ie_imp_T602.cpp +@@ -620,7 +620,7 @@ switch (c) + case 0x01: + m_sfont ^=1; + if (m_sfont & 1) +- { m_size=static_cast(0.8*m_basesize); m_family="Arial"; ++ { m_size=static_cast(0.8*m_basesize); m_family="Liberation Sans"; + /* FIXME? -> .profile?*/ } + else + { m_size=m_basesize; m_family=m_basefamily; } +diff --git a/src/af/gr/gtk/gr_UnixCairoGraphics.cpp b/src/af/gr/gtk/gr_UnixCairoGraphics.cpp +index 4c8d23c..6bcfd6d 100644 +--- a/src/af/gr/gtk/gr_UnixCairoGraphics.cpp ++++ b/src/af/gr/gtk/gr_UnixCairoGraphics.cpp +@@ -234,7 +234,7 @@ GR_Font * GR_UnixCairoGraphics::getGUIFont(void) + const char *guiFontName = pango_font_description_get_family(tempStyle->font_desc); + #endif + if (!guiFontName) +- guiFontName = "'Times New Roman'"; ++ guiFontName = "'Liberation Serif'"; + + UT_UTF8String s = XAP_EncodingManager::get_instance()->getLanguageISOName(); + +diff --git a/src/af/gr/xp/gr_CairoGraphics.cpp b/src/af/gr/xp/gr_CairoGraphics.cpp +index 224b883..38ef911 100644 +--- a/src/af/gr/xp/gr_CairoGraphics.cpp ++++ b/src/af/gr/xp/gr_CairoGraphics.cpp +@@ -776,8 +776,8 @@ bool GR_CairoGraphics::shape(GR_ShapingInfo & si, GR_RenderInfo *& ri) + + /* + * Pango does a royally bad job of the font substitution in +- * pango_itemize(): it will happily return 'Times New Roman' as +- * font when we have requested 'Arial', even though the latter is ++ * pango_itemize(): it will happily return 'Liberation Serif' as ++ * font when we have requested 'Liberation Sans', even though the latter is + * present and has the necessary coverage. Consequently we have to + * do the font substitution manually even on the first shapping. + * +@@ -3054,7 +3054,7 @@ GR_Font * GR_CairoGraphics::getDefaultFont(GR_Font::FontFamilyEnum f, + + case GR_Font::FF_Technical: + case GR_Font::FF_BiDi: +- pszFontFamily = "Arial"; ++ pszFontFamily = "Liberation Sans"; + break; + + default: +diff --git a/src/af/util/xp/ut_misc.cpp b/src/af/util/xp/ut_misc.cpp +index 52246c3..bcd5a6d 100644 +--- a/src/af/util/xp/ut_misc.cpp ++++ b/src/af/util/xp/ut_misc.cpp +@@ -570,7 +570,7 @@ const gchar ** UT_setPropsToValue(const gchar ** props, const gchar * value) + } + + /*! +- splits the xml property string (font-size:24pt;font-face:Arial') into names and values ++ splits the xml property string (font-size:24pt;font-face:Liberation Sans') into names and values + and stores them in an array + + the caller has to delete[] the array; the process is destructive to props +diff --git a/src/af/xap/cocoa/xap_CocoaToolPalette.nib/keyedobjects.nib b/src/af/xap/cocoa/xap_CocoaToolPalette.nib/keyedobjects.nib +index f21c815..e284cc9 100644 +--- a/src/af/xap/cocoa/xap_CocoaToolPalette.nib/keyedobjects.nib ++++ b/src/af/xap/cocoa/xap_CocoaToolPalette.nib/keyedobjects.nib +@@ -10910,7 +10910,7 @@ + 624 + + +- Times New Roman ++ Liberation Serif + _popUpItemAction: + + $class +diff --git a/src/af/xap/gtk/xap_UnixDlg_FileOpenSaveAs.cpp b/src/af/xap/gtk/xap_UnixDlg_FileOpenSaveAs.cpp +index bf94333..f77b40b 100644 +--- a/src/af/xap/gtk/xap_UnixDlg_FileOpenSaveAs.cpp ++++ b/src/af/xap/gtk/xap_UnixDlg_FileOpenSaveAs.cpp +@@ -904,7 +904,7 @@ gint XAP_UnixDialog_FileOpenSaveAs::previewPicture (void) + + const gchar * file_name = gtk_file_chooser_get_uri (m_FC); + +- GR_Font * fnt = pGr->findFont("Times New Roman", ++ GR_Font * fnt = pGr->findFont("Liberation Serif", + "normal", "", "normal", + "", "12pt", + pSS->getLanguageName()); +diff --git a/src/af/xap/win/xap_Win32Dlg_About.cpp b/src/af/xap/win/xap_Win32Dlg_About.cpp +index 2cc4aa6..3aec3f0 100644 +--- a/src/af/xap/win/xap_Win32Dlg_About.cpp ++++ b/src/af/xap/win/xap_Win32Dlg_About.cpp +@@ -289,7 +289,7 @@ void XAP_Win32Dialog_About::runModal(XAP_Frame * pFrame) + lf.lfWeight = 0; + HFONT hfontSmall = CreateFontIndirectW(&lf); + +- wcscpy(lf.lfFaceName, L"Arial"); ++ wcscpy(lf.lfFaceName, L"Liberation Sans"); + lf.lfHeight = 36; + lf.lfWeight = FW_BOLD; + HFONT hfontHeading = CreateFontIndirectW(&lf); +diff --git a/src/af/xap/xp/xap_Dlg_FontChooser.cpp b/src/af/xap/xp/xap_Dlg_FontChooser.cpp +index 56ad605..8a89eb5 100644 +--- a/src/af/xap/xp/xap_Dlg_FontChooser.cpp ++++ b/src/af/xap/xp/xap_Dlg_FontChooser.cpp +@@ -570,7 +570,7 @@ void XAP_Preview_FontPreview::draw(const UT_Rect *clip) + std::string sWeight = getVal("font-weight"); + + if(sFamily.empty()) +- sFamily = "Times New Roman"; ++ sFamily = "Liberation Serif"; + + if(sStyle.empty()) + sStyle = "normal"; +diff --git a/src/af/xap/xp/xap_Dlg_Zoom.cpp b/src/af/xap/xp/xap_Dlg_Zoom.cpp +index 25f1a38..c025206 100644 +--- a/src/af/xap/xp/xap_Dlg_Zoom.cpp ++++ b/src/af/xap/xp/xap_Dlg_Zoom.cpp +@@ -124,7 +124,7 @@ void XAP_Dialog_Zoom::_createPreviewFromGC(GR_Graphics * gc, + UT_ASSERT(m_zoomPreview); + + m_zoomPreview->setWindowSize(width, height); +- m_zoomPreview->setString("10-pt Times New Roman"); ++ m_zoomPreview->setString("10-pt Liberation Serif"); + m_zoomPreview->setFont(XAP_Preview_Zoom::font_NORMAL); + m_zoomPreview->setZoomPercent(m_zoomPercent); + +diff --git a/src/af/xap/xp/xap_Preview_Zoom.cpp b/src/af/xap/xp/xap_Preview_Zoom.cpp +index 3ac69e1..0fdae0e 100644 +--- a/src/af/xap/xp/xap_Preview_Zoom.cpp ++++ b/src/af/xap/xp/xap_Preview_Zoom.cpp +@@ -63,7 +63,7 @@ void XAP_Preview_Zoom::setFont(XAP_Preview_Zoom::tFont f) + { + case XAP_Preview_Zoom::font_NORMAL: + sprintf (fontString, "%dpt", (10 * m_zoomPercent / 100)); +- found = m_gc->findFont("Times New Roman", ++ found = m_gc->findFont("Liberation Serif", + "normal", "", "normal", + "", fontString, + NULL); +diff --git a/src/text/fmt/xp/fl_BlockLayout.cpp b/src/text/fmt/xp/fl_BlockLayout.cpp +index f56e1f5..f0d8dd5 100644 +--- a/src/text/fmt/xp/fl_BlockLayout.cpp ++++ b/src/text/fmt/xp/fl_BlockLayout.cpp +@@ -10260,7 +10260,7 @@ void fl_BlockLayout::StartList( const gchar * style, pf_Frag_Strux* prevSDH) + szDec="."; + if(!szFont) + { +- szFont = "Times New Roman"; ++ szFont = "Liberation Serif"; + UT_ASSERT(UT_SHOULD_NOT_HAPPEN); + } + } +diff --git a/src/text/fmt/xp/fp_Line.cpp b/src/text/fmt/xp/fp_Line.cpp +index 8be126c..ede4ddd 100644 +--- a/src/text/fmt/xp/fp_Line.cpp ++++ b/src/text/fmt/xp/fp_Line.cpp +@@ -1856,7 +1856,7 @@ void fp_Line::_doClearScreenFromRunToEnd(UT_sint32 runIndex) + pRun = m_vecRuns.getNthItem(_getRunLogIndx(runIndex)); + + // Handle case where character extends behind the left side +- // like italic Times New Roman f. Clear a litle bit before if ++ // like italic Liberation Serif f. Clear a litle bit before if + // there is clear screen there + UT_sint32 j = runIndex - 1; + +diff --git a/src/text/fmt/xp/fp_TextRun.cpp b/src/text/fmt/xp/fp_TextRun.cpp +index 0e93665..ddb46cb 100644 +--- a/src/text/fmt/xp/fp_TextRun.cpp ++++ b/src/text/fmt/xp/fp_TextRun.cpp +@@ -1442,7 +1442,7 @@ void fp_TextRun::_clearScreen(bool /* bFullLineHeightRect */) + + // + // Handle case where character extend behind the left side +- // like italic Times New Roman f ++ // like italic Liberation Serif f + // + fp_Line * thisLine = getLine(); + fp_Run * pPrev = getPrevRun(); +diff --git a/src/text/fmt/xp/fv_View.cpp b/src/text/fmt/xp/fv_View.cpp +index 38cf5cf..360f99d 100644 +--- a/src/text/fmt/xp/fv_View.cpp ++++ b/src/text/fmt/xp/fv_View.cpp +@@ -586,9 +586,9 @@ FV_View::FV_View(XAP_App * pApp, void* pParentData, FL_DocLayout* pLayout) + s += pCountry; + } + +- // do a fuzzy match for Times New Roman ++ // do a fuzzy match for Liberation Serif + const char * pszFamily = +- GR_Graphics::findNearestFont ("Times New Roman", ++ GR_Graphics::findNearestFont ("Liberation Serif", + "normal", "normal", + "normal", "normal", + "12pt", s.utf8_str()); +diff --git a/src/text/ptbl/xp/pp_Property.cpp b/src/text/ptbl/xp/pp_Property.cpp +index 2c9a27b..c191b38 100644 +--- a/src/text/ptbl/xp/pp_Property.cpp ++++ b/src/text/ptbl/xp/pp_Property.cpp +@@ -104,7 +104,7 @@ static PP_Property _props[] = + + { "field-color", "dcdcdc", true, NULL, PP_LEVEL_FIELD}, + { "field-font", "NULL", true, NULL, PP_LEVEL_FIELD}, +- { "font-family", "Times New Roman", true, NULL, PP_LEVEL_CHAR}, ++ { "font-family", "Liberation Serif", true, NULL, PP_LEVEL_CHAR}, + { "font-size", "12pt", true, NULL, PP_LEVEL_CHAR}, // MS word defaults to 10pt, but it just seems too small + { "font-stretch", "normal", true, NULL, PP_LEVEL_CHAR}, + { "font-style", "normal", true, NULL, PP_LEVEL_CHAR}, +diff --git a/src/text/ptbl/xp/pp_Revision.cpp b/src/text/ptbl/xp/pp_Revision.cpp +index 47a9976..ebfc7f5 100644 +--- a/src/text/ptbl/xp/pp_Revision.cpp ++++ b/src/text/ptbl/xp/pp_Revision.cpp +@@ -436,7 +436,7 @@ void PP_RevisionAttr::_init(const gchar *r) + return; + + // the string we are parsing looks like +- // "+1,-2,!3{font-family: Times New Roman}" ++ // "+1,-2,!3{font-family: Liberation Serif}" + + // first duplicate the string so we can play with it ... + char * s = (char*) g_strdup(r); +diff --git a/src/text/ptbl/xp/pp_Revision.h b/src/text/ptbl/xp/pp_Revision.h +index f093ef0..9f77e84 100644 +--- a/src/text/ptbl/xp/pp_Revision.h ++++ b/src/text/ptbl/xp/pp_Revision.h +@@ -116,7 +116,7 @@ class ABI_EXPORT PP_Revision: public PP_AttrProp + where n is a numerical id of the revision and props is regular + property string, for instance + +- font-family:Times New Roman ++ font-family:Liberation Serif + + revoval of property/attribute is indicated by setting to -/-, e.g., + +diff --git a/src/text/ptbl/xp/pt_PT_Styles.cpp b/src/text/ptbl/xp/pt_PT_Styles.cpp +index 3829f0d..c9f370c 100644 +--- a/src/text/ptbl/xp/pt_PT_Styles.cpp ++++ b/src/text/ptbl/xp/pt_PT_Styles.cpp +@@ -176,7 +176,7 @@ bool pt_PieceTable::_loadBuiltinStyles(void) + s += pCountry; + } + +- const char* pszFamily = XAP_App::findNearestFont("Times New Roman", ++ const char* pszFamily = XAP_App::findNearestFont("Liberation Serif", + "normal", "", + "normal", "", "12pt", + s.utf8_str()); +@@ -188,7 +188,7 @@ bool pt_PieceTable::_loadBuiltinStyles(void) + "text-indent:0in; text-position:normal; line-height:1.0; " + "color:000000; bgcolor:transparent; widows:2", pszFamily); + +- pszFamily = XAP_App::findNearestFont("Arial", "normal", "", ++ pszFamily = XAP_App::findNearestFont("Liberation Sans", "normal", "", + "normal", "", "12pt", s.utf8_str()); + + // used to set the dom-dir of the style here, but we do not want to do that. The +@@ -263,7 +263,7 @@ bool pt_PieceTable::_loadBuiltinStyles(void) + UT_String_sprintf(stTmp, list_fmt, "Arrowhead List","0", LIST_DEFAULT_INDENT, LIST_DEFAULT_INDENT_LABEL, "transparent", "%L", pszFamily, "NULL"); + _s("Arrowhead List",false, "P", "", "Current Settings", stTmp.c_str()); + +- // pszFamily is the nearest font to Arial found in the system ++ // pszFamily is the nearest font to Liberation Sans found in the system + UT_String_sprintf(stTmp, "tabstops:0.3in/L0; list-style:Numbered List; " + "start-value:1; margin-left:0.0in; text-indent:0.0in; " + "field-color:transparent; list-delim:%%L.; field-font:%s; " +@@ -274,7 +274,7 @@ bool pt_PieceTable::_loadBuiltinStyles(void) + _s("Numbered Heading 2",true,"P","Heading 2","Normal", stTmp.c_str()); + _s("Numbered Heading 3",true,"P","Heading 3","Normal", stTmp.c_str()); + +- // pszFamily is the nearest font to Arial found in the system ++ // pszFamily is the nearest font to Liberation Sans found in the system + + UT_String_sprintf(stTmp, list_fmt, "Numbered List", "1",LIST_DEFAULT_INDENT, LIST_DEFAULT_INDENT_LABEL, "transparent", "%L.", "NULL", "."); + +diff --git a/src/wp/ap/xp/ap_Dialog_Lists.cpp b/src/wp/ap/xp/ap_Dialog_Lists.cpp +index 5aa32cb..dfeb4c1 100644 +--- a/src/wp/ap/xp/ap_Dialog_Lists.cpp ++++ b/src/wp/ap/xp/ap_Dialog_Lists.cpp +@@ -1109,7 +1109,7 @@ void AP_Lists_preview::setData(const gchar * pszFont,float fAlign,float fIndent) + // + if(!pszFont || strcmp(pszFont,"NULL")== 0) + { +- m_pFont = m_gc->findFont("Times New Roman", ++ m_pFont = m_gc->findFont("Liberation Serif", + "normal", "", "normal", + "", "16pt", NULL); + } +diff --git a/src/wp/ap/xp/ap_Dialog_PageNumbers.cpp b/src/wp/ap/xp/ap_Dialog_PageNumbers.cpp +index ecfdfcb..db3a518 100644 +--- a/src/wp/ap/xp/ap_Dialog_PageNumbers.cpp ++++ b/src/wp/ap/xp/ap_Dialog_PageNumbers.cpp +@@ -88,7 +88,7 @@ AP_Preview_PageNumbers::AP_Preview_PageNumbers (GR_Graphics * gc) + char fontString [10]; + sprintf(fontString, "%dpt", 8); + +- GR_Font * found = m_gc->findFont("Times New Roman", "normal", ++ GR_Font * found = m_gc->findFont("Liberation Serif", "normal", + "", "normal", "", fontString, + NULL); + +diff --git a/src/wp/ap/xp/ap_Preview_Annotation.cpp b/src/wp/ap/xp/ap_Preview_Annotation.cpp +index 5068315..91571e3 100644 +--- a/src/wp/ap/xp/ap_Preview_Annotation.cpp ++++ b/src/wp/ap/xp/ap_Preview_Annotation.cpp +@@ -95,7 +95,7 @@ void AP_Preview_Annotation::setSizeFromAnnotation(void) + pG = pView->getGraphics(); + + UT_return_if_fail(pG); +- GR_Font * pFont = pG->findFont("Times New Roman", "normal", ++ GR_Font * pFont = pG->findFont("Liberation Serif", "normal", + "normal", "normal", + "normal", "12pt", + NULL); +@@ -124,7 +124,7 @@ void AP_Preview_Annotation::draw(const UT_Rect *clip) + UT_RGBColor FGcolor(0,0,0); + UT_RGBColor BGcolor(m_clrBackground); + +- m_pFont = m_gc->findFont("Times New Roman", "normal", ++ m_pFont = m_gc->findFont("Liberation Serif", "normal", + "normal", "normal", + "normal", "12pt", + NULL); +diff --git a/src/wp/ap/xp/ap_Preview_Paragraph.cpp b/src/wp/ap/xp/ap_Preview_Paragraph.cpp +index fc4dc38..fba04f1 100644 +--- a/src/wp/ap/xp/ap_Preview_Paragraph.cpp ++++ b/src/wp/ap/xp/ap_Preview_Paragraph.cpp +@@ -540,7 +540,7 @@ void AP_Preview_Paragraph::draw(const UT_Rect *clip) + bool AP_Preview_Paragraph::_loadDrawFont(const char *name) + { + // we draw at 7 points in this preview +- GR_Font * font = m_gc->findFont(name ? name : "Times New Roman", ++ GR_Font * font = m_gc->findFont(name ? name : "Liberation Serif", + "normal", "", "normal", + "", "7pt", + NULL); // might need to get the real lang +diff --git a/src/wp/impexp/xp/ie_imp_MsWord_97.cpp b/src/wp/impexp/xp/ie_imp_MsWord_97.cpp +index 4673f80..d194004 100644 +--- a/src/wp/impexp/xp/ie_imp_MsWord_97.cpp ++++ b/src/wp/impexp/xp/ie_imp_MsWord_97.cpp +@@ -628,10 +628,10 @@ s_fieldFontForListStyle (MSWordListIdType id) + return "NULL"; + + case WLNF_UPPER_LETTER: // upper letter +- return "Times New Roman"; ++ return "Liberation Serif"; + + case WLNF_LOWER_LETTER: // lower letter +- return "Times New Roman"; ++ return "Liberation Serif"; + + case WLNF_BULLETS: // bullet list + UT_DEBUGMSG(("Fieldfont set to symbol \n")); +@@ -639,11 +639,11 @@ s_fieldFontForListStyle (MSWordListIdType id) + + case WLNF_EUROPEAN_ARABIC: + case WLNF_ORDINAL: // ordinal +- return "Times New Roman"; ++ return "Liberation Serif"; + + default: +- UT_DEBUGMSG(("unknown list type %d field-font set to Times New Roman \n",id)); +- return "Times New Roman"; ++ UT_DEBUGMSG(("unknown list type %d field-font set to Liberation Serif \n",id)); ++ return "Liberation Serif"; + } + } + +@@ -5250,7 +5250,7 @@ void IE_Imp_MsWord_97::_generateCharProps(UT_String &s, const CHP * achp, wvPars + if(fname) + s += fname; + else +- s += "Times New Roman"; ++ s += "Liberation Serif"; + FREEP(fname); + } + +diff --git a/src/wp/impexp/xp/ie_imp_RTF.cpp b/src/wp/impexp/xp/ie_imp_RTF.cpp +index 97a6f29..3177c9c 100644 +--- a/src/wp/impexp/xp/ie_imp_RTF.cpp ++++ b/src/wp/impexp/xp/ie_imp_RTF.cpp +@@ -6313,11 +6313,11 @@ bool IE_Imp_RTF::buildCharacterProps(std::string & propBuffer) + // {\f83\fnil\fcharset0\fprq0{\*\panose 00000000000000000000} ;} + // note the empty slot after the panose entry + // later it gets referenced: {\b\f83\fs24\cf1\cgrid0 Malte Cornils +- // this turns those into "Times New Roman" for now, as a hack to keep from crashing ++ // this turns those into "Liberation Serif" for now, as a hack to keep from crashing + if ( pFont->m_pFontName != NULL ) + propBuffer += pFont->m_pFontName; + else +- propBuffer += "Times New Roman"; ++ propBuffer += "Liberation Serif"; + } + if (m_currentRTFState.m_charProps.m_hasColour) + { +@@ -9034,7 +9034,7 @@ bool IE_Imp_RTF::ReadFontTable() + { + // NB: Ignores whitespace until we've seen non-whitespace data. + // This means we pick up the spaces in font names like +- // "Times New Roman", but it also means that any font names ++ // "Liberation Serif", but it also means that any font names + // that genuinely start with spaces will have them discarded. + // This is hopefully not a problem. + tokenType = NextToken(keyword, ¶meter,& paramUsed, +@@ -9102,11 +9102,11 @@ bool IE_Imp_RTF::ReadFontTable() + // It's possible that the font name will be empty. This might happend + // because the font table didn't specify a name, or because the \ansicpgN + // command was invalid, in which case the mbtowc convertion might fail. +- // In these cases, substitute "Times New Roman". ++ // In these cases, substitute "Liberation Serif". + if (!sFontNamesAndPanose[SFontTableState::MainFontName].length()) + { +- UT_DEBUGMSG(("RTF: Font Index %d: Substituting \"Times New Roman\" for missing font name.\n", fontIndex)); +- sFontNamesAndPanose[SFontTableState::MainFontName] = "Times New Roman"; ++ UT_DEBUGMSG(("RTF: Font Index %d: Substituting \"Liberation Serif\" for missing font name.\n", fontIndex)); ++ sFontNamesAndPanose[SFontTableState::MainFontName] = "Liberation Serif"; + } + // Validate and post-process the Panose string. + if (!PostProcessAndValidatePanose(sFontNamesAndPanose[SFontTableState::Panose])) +diff --git a/user/wp/readme.abw b/user/wp/readme.abw +index 7bf2cdc..48e3bb6 100644 +--- a/user/wp/readme.abw ++++ b/user/wp/readme.abw +@@ -16,9 +16,9 @@ + + + +- +- +- ++ ++ ++ + + +
+diff --git a/user/wp/templates/Business-Letter.awt b/user/wp/templates/Business-Letter.awt +index 524558a..9448277 100644 +--- a/user/wp/templates/Business-Letter.awt ++++ b/user/wp/templates/Business-Letter.awt +@@ -19,14 +19,14 @@ + + + +- +- +- ++ ++ ++ + +- +- +- +- ++ ++ ++ ++ + + +
+diff --git a/user/wp/templates/Business-Report.awt b/user/wp/templates/Business-Report.awt +index c2e85c9..f2f5b16 100644 +--- a/user/wp/templates/Business-Report.awt ++++ b/user/wp/templates/Business-Report.awt +@@ -21,7 +21,7 @@ +

+

+

Title

+-

Subtitle

++

Subtitle

+

+

Release 1.0

+

+@@ -99,11 +99,11 @@ +
+

+

+-

Heading 1

++

Heading 1

+

text

+-

Heading 2

++

Heading 2

+

text

+-

Heading 3

++

Heading 3

+

+
+
+diff --git a/user/wp/templates/Employee-Directory.awt b/user/wp/templates/Employee-Directory.awt +index c4f7ebc..b0faa54 100644 +--- a/user/wp/templates/Employee-Directory.awt ++++ b/user/wp/templates/Employee-Directory.awt +@@ -10,9 +10,9 @@ + + +
+-

Company Name

+-

Directory of Employees

+-

++

Company Name

++

Directory of Employees

++

+

+

+

+@@ -36,59 +36,59 @@ +

Normal Style (123) 555-1212

+

+

+-

Department Name

+-

The big boss upstairs (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

+-

+-

Department Name

+-

The big boss upstairs (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

+-

+-

Department Name

+-

The big boss upstairs (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

+-

+-

Department Name

+-

The big boss upstairs (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

Last Name, First Name (123) 555-1212

+-

+-

+-

General Numbers

+-

Front Desk (123) 555-1212

+-

Security (123) 555-1212

+-

Building Management (123) 555-1212

+-

Other General Numbers (123) 555-1212

++

Department Name

++

The big boss upstairs (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

++

++

Department Name

++

The big boss upstairs (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

++

++

Department Name

++

The big boss upstairs (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

++

++

Department Name

++

The big boss upstairs (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

Last Name, First Name (123) 555-1212

++

++

++

General Numbers

++

Front Desk (123) 555-1212

++

Security (123) 555-1212

++

Building Management (123) 555-1212

++

Other General Numbers (123) 555-1212

+
+ + +diff --git a/user/wp/templates/Fax-Coversheet.awt b/user/wp/templates/Fax-Coversheet.awt +index acc7ba8..cc5779c 100644 +--- a/user/wp/templates/Fax-Coversheet.awt ++++ b/user/wp/templates/Fax-Coversheet.awt +@@ -10,26 +10,26 @@ + + +
+-

Company Name

+-

Company Address Line 1

+-

Company Address Line 2

+-

Company Address Line 3

+-

+-

FAX

+-

TO: From:

+-

Fax: Pages:

+-

Phone: Date:

++

Company Name

++

Company Address Line 1

++

Company Address Line 2

++

Company Address Line 3

++

++

FAX

++

TO: From:

++

Fax: Pages:

++

Phone: Date:

+

+

Re: CC:

+

+

+-

 Urgent  For Review  Please Comment  Please Reply  Please Recycle

+-

++

 Urgent  For Review  Please Comment  Please Reply  Please Recycle

++

+

+

+-

Comments

++

Comments

+

+-

This text should the replaced with your comments about the fax and any additional comment to the receiver.

++

This text should the replaced with your comments about the fax and any additional comment to the receiver.

+
+ + +diff --git a/user/wp/templates/Friendly-Letter.awt b/user/wp/templates/Friendly-Letter.awt +index 5a25db1..2e687fc 100644 +--- a/user/wp/templates/Friendly-Letter.awt ++++ b/user/wp/templates/Friendly-Letter.awt +@@ -16,12 +16,12 @@ + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + +
+diff --git a/user/wp/templates/Memo.awt b/user/wp/templates/Memo.awt +index 79b5538..560a4cd 100644 +--- a/user/wp/templates/Memo.awt ++++ b/user/wp/templates/Memo.awt +@@ -14,10 +14,10 @@ + Fri Mar 12 21:07:56 2004 + + +- +- +- +- ++ ++ ++ ++ + + + +@@ -59,10 +59,10 @@ +

The box that this text is in uses AbiWord's table support to draw the border. You can either allow the border to fit to the size of the text as it is now, or press <ENTER> repeatedly at the end of your memo to expand the border to fill the rest of the page.

+

Don't forget to change the header and footer before printing! If you wish to save this memo for later and ensure that the date above is saved as today's (not automatically updating), select it and type the desired date text over it.

+

The styles used in this document for correct conversion, import, export, and HTML are:

+-

Heading 1 for Company Name

+-

Heading 2 for Slogan

+-

Heading 3 for "Date:", "To:", etc.

+-

Normal for body text

++

Heading 1 for Company Name

++

Heading 2 for Slogan

++

Heading 3 for "Date:", "To:", etc.

++

Normal for body text

+ + +

+diff --git a/user/wp/templates/Press-Release.awt b/user/wp/templates/Press-Release.awt +index 708bce7..4d8bac1 100644 +--- a/user/wp/templates/Press-Release.awt ++++ b/user/wp/templates/Press-Release.awt +@@ -16,19 +16,19 @@ + + + +- +- +- +- ++ ++ ++ ++ + + + +- ++ + + + + +- ++ + + + +@@ -36,19 +36,19 @@ + + + +- +- +- ++ ++ ++ + + + + +- +- +- ++ ++ ++ + + +- ++ + + + +@@ -77,7 +77,7 @@ +

+ + +-

FOR IMMEDIATE RELEASE

++

FOR IMMEDIATE RELEASE

+
+ +

+diff --git a/user/wp/templates/Resume.awt b/user/wp/templates/Resume.awt +index 1e61cdd..8eda0b7 100644 +--- a/user/wp/templates/Resume.awt ++++ b/user/wp/templates/Resume.awt +@@ -14,11 +14,11 @@ + Fri Mar 12 22:08:25 2004 + + +- +- +- +- +- ++ ++ ++ ++ ++ + + +
+diff --git a/user/wp/templates/normal.awt b/user/wp/templates/normal.awt +index 4c83f82..e7fcb00 100644 +--- a/user/wp/templates/normal.awt ++++ b/user/wp/templates/normal.awt +@@ -9,7 +9,7 @@ + + + +- ++ + + + +diff --git a/user/wp/templates/normal.awt-am_ET b/user/wp/templates/normal.awt-am_ET +index cb1a8d4..c7b7707 100644 +--- a/user/wp/templates/normal.awt-am_ET ++++ b/user/wp/templates/normal.awt-am_ET +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ar b/user/wp/templates/normal.awt-ar +index 9aa7a5c..0cd8882 100644 +--- a/user/wp/templates/normal.awt-ar ++++ b/user/wp/templates/normal.awt-ar +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ar_EG b/user/wp/templates/normal.awt-ar_EG +index 5fcf2d1..b920dcc 100644 +--- a/user/wp/templates/normal.awt-ar_EG ++++ b/user/wp/templates/normal.awt-ar_EG +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ar_SA b/user/wp/templates/normal.awt-ar_SA +index 09c1bbb..12ad0d6 100644 +--- a/user/wp/templates/normal.awt-ar_SA ++++ b/user/wp/templates/normal.awt-ar_SA +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-bg_BG b/user/wp/templates/normal.awt-bg_BG +index df6f2bf..d789046 100644 +--- a/user/wp/templates/normal.awt-bg_BG ++++ b/user/wp/templates/normal.awt-bg_BG +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ca_ES b/user/wp/templates/normal.awt-ca_ES +index 0a337a2..69fecfd 100644 +--- a/user/wp/templates/normal.awt-ca_ES ++++ b/user/wp/templates/normal.awt-ca_ES +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-cs_CZ b/user/wp/templates/normal.awt-cs_CZ +index 3e5e87e..d2cb937 100644 +--- a/user/wp/templates/normal.awt-cs_CZ ++++ b/user/wp/templates/normal.awt-cs_CZ +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-da_DK b/user/wp/templates/normal.awt-da_DK +index 6ce3d83..f8706cb 100644 +--- a/user/wp/templates/normal.awt-da_DK ++++ b/user/wp/templates/normal.awt-da_DK +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-de b/user/wp/templates/normal.awt-de +index 8faa619..c0c18f7 100644 +--- a/user/wp/templates/normal.awt-de ++++ b/user/wp/templates/normal.awt-de +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-de_AT b/user/wp/templates/normal.awt-de_AT +index 9abfde1..d0ec20e 100644 +--- a/user/wp/templates/normal.awt-de_AT ++++ b/user/wp/templates/normal.awt-de_AT +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-de_CH b/user/wp/templates/normal.awt-de_CH +index 0aa531a..24b0f8d 100644 +--- a/user/wp/templates/normal.awt-de_CH ++++ b/user/wp/templates/normal.awt-de_CH +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-de_DE b/user/wp/templates/normal.awt-de_DE +index 0190408..6372e78 100644 +--- a/user/wp/templates/normal.awt-de_DE ++++ b/user/wp/templates/normal.awt-de_DE +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-div_MV b/user/wp/templates/normal.awt-div_MV +index 9a8c50e..88270ce 100644 +--- a/user/wp/templates/normal.awt-div_MV ++++ b/user/wp/templates/normal.awt-div_MV +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-el_GR b/user/wp/templates/normal.awt-el_GR +index e1c8de5..1db03a4 100644 +--- a/user/wp/templates/normal.awt-el_GR ++++ b/user/wp/templates/normal.awt-el_GR +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-en_AU b/user/wp/templates/normal.awt-en_AU +index c7fa4c9..0e29beb 100644 +--- a/user/wp/templates/normal.awt-en_AU ++++ b/user/wp/templates/normal.awt-en_AU +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-en_CA b/user/wp/templates/normal.awt-en_CA +index 3729a04..cff6807 100644 +--- a/user/wp/templates/normal.awt-en_CA ++++ b/user/wp/templates/normal.awt-en_CA +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-en_GB b/user/wp/templates/normal.awt-en_GB +index 14b8bcf..55364cd 100644 +--- a/user/wp/templates/normal.awt-en_GB ++++ b/user/wp/templates/normal.awt-en_GB +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-en_IE b/user/wp/templates/normal.awt-en_IE +index 95e3fc7..7b0c3a5 100644 +--- a/user/wp/templates/normal.awt-en_IE ++++ b/user/wp/templates/normal.awt-en_IE +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-en_NZ b/user/wp/templates/normal.awt-en_NZ +index 70016d2..0871e93 100644 +--- a/user/wp/templates/normal.awt-en_NZ ++++ b/user/wp/templates/normal.awt-en_NZ +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-en_ZA b/user/wp/templates/normal.awt-en_ZA +index ebe7ee3..c4f7795 100644 +--- a/user/wp/templates/normal.awt-en_ZA ++++ b/user/wp/templates/normal.awt-en_ZA +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-es b/user/wp/templates/normal.awt-es +index 12c611c..a2067e0 100644 +--- a/user/wp/templates/normal.awt-es ++++ b/user/wp/templates/normal.awt-es +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-es_AR b/user/wp/templates/normal.awt-es_AR +index 87130b5..fc8ac38 100644 +--- a/user/wp/templates/normal.awt-es_AR ++++ b/user/wp/templates/normal.awt-es_AR +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-es_ES b/user/wp/templates/normal.awt-es_ES +index 87130b5..fc8ac38 100644 +--- a/user/wp/templates/normal.awt-es_ES ++++ b/user/wp/templates/normal.awt-es_ES +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-es_IR b/user/wp/templates/normal.awt-es_IR +index 4d3e321..33c7144 100644 +--- a/user/wp/templates/normal.awt-es_IR ++++ b/user/wp/templates/normal.awt-es_IR +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-es_MX b/user/wp/templates/normal.awt-es_MX +index 52c3411..2522a82 100644 +--- a/user/wp/templates/normal.awt-es_MX ++++ b/user/wp/templates/normal.awt-es_MX +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-fa_IR b/user/wp/templates/normal.awt-fa_IR +index db24783..a0f0bde 100644 +--- a/user/wp/templates/normal.awt-fa_IR ++++ b/user/wp/templates/normal.awt-fa_IR +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-fi_FI b/user/wp/templates/normal.awt-fi_FI +index 1471a71..b65fa66 100644 +--- a/user/wp/templates/normal.awt-fi_FI ++++ b/user/wp/templates/normal.awt-fi_FI +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-fr b/user/wp/templates/normal.awt-fr +index 4e94583..67ae7c2 100644 +--- a/user/wp/templates/normal.awt-fr ++++ b/user/wp/templates/normal.awt-fr +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-fr_BE b/user/wp/templates/normal.awt-fr_BE +index 8b310c4..d4b7723 100644 +--- a/user/wp/templates/normal.awt-fr_BE ++++ b/user/wp/templates/normal.awt-fr_BE +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-fr_CA b/user/wp/templates/normal.awt-fr_CA +index e673aac..c3bb3fd 100644 +--- a/user/wp/templates/normal.awt-fr_CA ++++ b/user/wp/templates/normal.awt-fr_CA +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-fr_CH b/user/wp/templates/normal.awt-fr_CH +index 1888a71..eb4b5de 100644 +--- a/user/wp/templates/normal.awt-fr_CH ++++ b/user/wp/templates/normal.awt-fr_CH +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-fr_FR b/user/wp/templates/normal.awt-fr_FR +index f877981..0f523f6 100644 +--- a/user/wp/templates/normal.awt-fr_FR ++++ b/user/wp/templates/normal.awt-fr_FR +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-gl_ES b/user/wp/templates/normal.awt-gl_ES +index 7f4876b..006645e 100644 +--- a/user/wp/templates/normal.awt-gl_ES ++++ b/user/wp/templates/normal.awt-gl_ES +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-he b/user/wp/templates/normal.awt-he +index a3da00f..f1a238f 100644 +--- a/user/wp/templates/normal.awt-he ++++ b/user/wp/templates/normal.awt-he +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-he_IL b/user/wp/templates/normal.awt-he_IL +index 98d81eb..e78e16b 100644 +--- a/user/wp/templates/normal.awt-he_IL ++++ b/user/wp/templates/normal.awt-he_IL +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-hu_HU b/user/wp/templates/normal.awt-hu_HU +index d79154f..0dd6026 100644 +--- a/user/wp/templates/normal.awt-hu_HU ++++ b/user/wp/templates/normal.awt-hu_HU +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-it_IT b/user/wp/templates/normal.awt-it_IT +index a72f1d4..1121843 100644 +--- a/user/wp/templates/normal.awt-it_IT ++++ b/user/wp/templates/normal.awt-it_IT +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ja_JP b/user/wp/templates/normal.awt-ja_JP +index 4f379e1..351fdd6 100644 +--- a/user/wp/templates/normal.awt-ja_JP ++++ b/user/wp/templates/normal.awt-ja_JP +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-lt_LT b/user/wp/templates/normal.awt-lt_LT +index e9d6ec1..b66be4a 100644 +--- a/user/wp/templates/normal.awt-lt_LT ++++ b/user/wp/templates/normal.awt-lt_LT +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-nb_NO b/user/wp/templates/normal.awt-nb_NO +index 1b6398f..5cdf741 100644 +--- a/user/wp/templates/normal.awt-nb_NO ++++ b/user/wp/templates/normal.awt-nb_NO +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-nl_NL b/user/wp/templates/normal.awt-nl_NL +index 0f8b299..4be5de2 100644 +--- a/user/wp/templates/normal.awt-nl_NL ++++ b/user/wp/templates/normal.awt-nl_NL +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-nn_NO b/user/wp/templates/normal.awt-nn_NO +index 981d577..1a36ad3 100644 +--- a/user/wp/templates/normal.awt-nn_NO ++++ b/user/wp/templates/normal.awt-nn_NO +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-pl_PL b/user/wp/templates/normal.awt-pl_PL +index 0405d45..7f32223 100644 +--- a/user/wp/templates/normal.awt-pl_PL ++++ b/user/wp/templates/normal.awt-pl_PL +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ps b/user/wp/templates/normal.awt-ps +index 971e62f..e5e674f 100644 +--- a/user/wp/templates/normal.awt-ps ++++ b/user/wp/templates/normal.awt-ps +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-pt_BR b/user/wp/templates/normal.awt-pt_BR +index bdf4c09..4d85f5c 100644 +--- a/user/wp/templates/normal.awt-pt_BR ++++ b/user/wp/templates/normal.awt-pt_BR +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-pt_PT b/user/wp/templates/normal.awt-pt_PT +index 7a44c3e..e1b766e 100644 +--- a/user/wp/templates/normal.awt-pt_PT ++++ b/user/wp/templates/normal.awt-pt_PT +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ru b/user/wp/templates/normal.awt-ru +index c34fd94..6e29dfd 100644 +--- a/user/wp/templates/normal.awt-ru ++++ b/user/wp/templates/normal.awt-ru +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ru_RU b/user/wp/templates/normal.awt-ru_RU +index b07198e..4f435ea 100644 +--- a/user/wp/templates/normal.awt-ru_RU ++++ b/user/wp/templates/normal.awt-ru_RU +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-sk_SK b/user/wp/templates/normal.awt-sk_SK +index d03a1a5..bb04b0e 100644 +--- a/user/wp/templates/normal.awt-sk_SK ++++ b/user/wp/templates/normal.awt-sk_SK +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-sl b/user/wp/templates/normal.awt-sl +index 2dfcf1a..e874715 100644 +--- a/user/wp/templates/normal.awt-sl ++++ b/user/wp/templates/normal.awt-sl +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-sv b/user/wp/templates/normal.awt-sv +index d0f5163..82aa982 100644 +--- a/user/wp/templates/normal.awt-sv ++++ b/user/wp/templates/normal.awt-sv +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-sv_SE b/user/wp/templates/normal.awt-sv_SE +index 932da12..55d9e8c 100644 +--- a/user/wp/templates/normal.awt-sv_SE ++++ b/user/wp/templates/normal.awt-sv_SE +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-syr b/user/wp/templates/normal.awt-syr +index 72b77ad..3bd9503 100644 +--- a/user/wp/templates/normal.awt-syr ++++ b/user/wp/templates/normal.awt-syr +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-tr b/user/wp/templates/normal.awt-tr +index 489bc0a..2497b35 100644 +--- a/user/wp/templates/normal.awt-tr ++++ b/user/wp/templates/normal.awt-tr +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-tr_TR b/user/wp/templates/normal.awt-tr_TR +index bf775c8..bfd3982 100644 +--- a/user/wp/templates/normal.awt-tr_TR ++++ b/user/wp/templates/normal.awt-tr_TR +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-uk_UA b/user/wp/templates/normal.awt-uk_UA +index 6c759ad..76cbd8c 100644 +--- a/user/wp/templates/normal.awt-uk_UA ++++ b/user/wp/templates/normal.awt-uk_UA +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-ur_PK b/user/wp/templates/normal.awt-ur_PK +index 00cc1c7..8fcaf67 100644 +--- a/user/wp/templates/normal.awt-ur_PK ++++ b/user/wp/templates/normal.awt-ur_PK +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-yi b/user/wp/templates/normal.awt-yi +index e25ac13..02ffba4 100644 +--- a/user/wp/templates/normal.awt-yi ++++ b/user/wp/templates/normal.awt-yi +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-zh_CN b/user/wp/templates/normal.awt-zh_CN +index d103911..3a949bc 100644 +--- a/user/wp/templates/normal.awt-zh_CN ++++ b/user/wp/templates/normal.awt-zh_CN +@@ -9,7 +9,7 @@ + + + +- ++ + + +
+diff --git a/user/wp/templates/normal.awt-zh_TW b/user/wp/templates/normal.awt-zh_TW +index 3570d5e..8a2cdd7 100644 +--- a/user/wp/templates/normal.awt-zh_TW ++++ b/user/wp/templates/normal.awt-zh_TW +@@ -9,7 +9,7 @@ + + + +- ++ + + +
diff --git a/abiword/python-override.patch b/abiword/python-override.patch new file mode 100644 index 0000000..4cb58ad --- /dev/null +++ b/abiword/python-override.patch @@ -0,0 +1,31 @@ +From 51787d61993cb3981c18e4cf174fc229734fba1e Mon Sep 17 00:00:00 2001 +From: Jean Brefort +Date: Sun, 6 Dec 2015 11:04:10 +0000 +Subject: [PATCH] Update python override code. Fixes #13745 and #13746, thanks + to David Gutteridge. + +git-svn-id: svn+ssh://svn.abisource.com/svnroot/abiword/trunk@35171 bcba8976-2d24-0410-9c9c-aab3bd5fdfd6 +--- + src/gi-overrides/Abi.py | 2 ++ + src/gi-overrides/Makefile.am | 2 +- + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/gi-overrides/Abi.py b/src/gi-overrides/Abi.py +index 666fd61..e3b61b9 100644 +--- a/src/gi-overrides/Abi.py ++++ b/src/gi-overrides/Abi.py +@@ -1,4 +1,6 @@ + import sys ++import gi ++gi.require_version('Gtk', '3.0') + from gi.repository import Gtk + from ..overrides import override + from ..importer import modules +diff --git a/src/gi-overrides/Makefile.am b/src/gi-overrides/Makefile.am +index 7fe3913..60f306d 100644 +--- a/src/gi-overrides/Makefile.am ++++ b/src/gi-overrides/Makefile.am +@@ -1,2 +1,2 @@ +-overridesdir = `python -c "import gi; print gi._overridesdir"` ++overridesdir = `python -c "import gi; print(gi._overridesdir)"` + overrides_PYTHON = Abi.py diff --git a/abook/PKGBUILD b/abook/PKGBUILD new file mode 100644 index 0000000..1538a41 --- /dev/null +++ b/abook/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=abook +pkgver=0.6.1 +_debver=$pkgver +_debrel=3 +pkgrel=3 +pkgdesc="Text-based addressbook designed for usage with Mutt" +url='http://abook.sourceforge.net/' +arch=('i686' 'x86_64') +license=('GPL-2') +makedepends=('quilt') +depends=('readline') +source=("https://abook.sourceforge.io/devel/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/a/abook/abook_${_debver}-${_debrel}.debian.tar.xz" + "gcc5.patch" + "fix-build.patch") +sha512sums=('993895ef2fd6d98d50db610699f8f0a28112778065ac56484373eb814afd8ab7371201fc21506c090514f4b29570ec229dc62c606ab068301152567e2c47fe66' + '2063ff5381ba11520b8431f82c5503a6fadb78dbfe6c682f3fc0e396457ec2f126c4af4f725c4f28c8d602212499c09f6623eefa078df5f9927bf7ee932a1805' + '21ab6475512ea9baae1a6509749628d6b610e96e77c64139d09697d272d66556875058e91c9b948c4ebaf65795a97d8532bae25e5d7e71cc4a20af49897cd867' + 'a6647f3b20fae768edce9c9aa19a4063ce4a499d3fb94b399d840063547e9f44bf5577780e683a14c3f9e6d917cfd9e9e279916682270e4c72f79242dd6037d5') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + aclocal && automake --add-missing && autoconf + sed 's/0.18/0.19/g' -i po/Makefile.in.in + patch -p1 -i $srcdir/gcc5.patch + patch -p1 -i $srcdir/fix-build.patch +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix=/usr --mandir=/usr/share/man + make + cd po && make update-po +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/abook/fix-build.patch b/abook/fix-build.patch new file mode 100644 index 0000000..1476b47 --- /dev/null +++ b/abook/fix-build.patch @@ -0,0 +1,6 @@ +--- a/po/LINGUAS 2015-10-04 04:37:39.000000000 +0200 ++++ b/po/LINGUAS 2021-07-23 16:24:45.457260963 +0200 +@@ -1,2 +1,2 @@ + # Set of available languages +-de fr it ja sv ++de fr it sv diff --git a/abook/gcc5.patch b/abook/gcc5.patch new file mode 100644 index 0000000..e742218 --- /dev/null +++ b/abook/gcc5.patch @@ -0,0 +1,24 @@ +diff -up abook-git-6e550af8a907a680dc845c22a7d6c36d89e900c1/database.c.gcc5 abook-git-6e550af8a907a680dc845c22a7d6c36d89e900c1/database.c +--- abook-git-6e550af8a907a680dc845c22a7d6c36d89e900c1/database.c.gcc5 2014-11-28 16:29:52.000000000 +0100 ++++ abook-git-6e550af8a907a680dc845c22a7d6c36d89e900c1/database.c 2015-02-11 16:02:15.837789303 +0100 +@@ -859,7 +859,7 @@ item_merge(list_item dest, list_item src + */ + + /* quick lookup by "standard" field number */ +-inline int ++extern inline int + field_id(int i) + { + assert((i >= 0) && (i < ITEM_FIELDS)); +diff -up abook-git-6e550af8a907a680dc845c22a7d6c36d89e900c1/database.h.gcc5 abook-git-6e550af8a907a680dc845c22a7d6c36d89e900c1/database.h +--- abook-git-6e550af8a907a680dc845c22a7d6c36d89e900c1/database.h.gcc5 2014-11-28 16:29:52.000000000 +0100 ++++ abook-git-6e550af8a907a680dc845c22a7d6c36d89e900c1/database.h 2015-02-11 16:02:23.465818915 +0100 +@@ -61,7 +61,7 @@ struct db_enumerator { + /* + * Field operations + */ +-inline int field_id(int i); ++extern inline int field_id(int i); + abook_field *find_standard_field(char *key, int do_declare); + abook_field *real_find_field(char *key, abook_field_list *list, int *nb); + #define find_field(key, list) real_find_field(key, list, NULL) diff --git a/acpica/PKGBUILD b/acpica/PKGBUILD new file mode 100644 index 0000000..d505a73 --- /dev/null +++ b/acpica/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=acpica +pkgver=20200925 +_debver=$pkgver +_debrel=8 +pkgrel=3 +pkgdesc="ACPI tools, including Intel ACPI Source Language compiler" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc') +makedepends=('flex' 'bison' 'quilt') +provides=('iasl') +conflicts=('iasl') +replaces=('iasl') +options=(!makeflags) +source=("${pkgname}-unix-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/a/acpica-unix/acpica-unix_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/a/acpica-unix/acpica-unix_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('a2adf9ea7a895e23c4dedc6268550b57476ebb4ec859f8fa3febfb4b3e01b267126ae72a669d7b63f2e384f2ae9ed0e6c84594e0ddc03063d33ffd02b109971e' + '6efb3b814a1bcef9e9b0502af08cd0649f67fec1f3fdb1f99fb9c18a10c0f70298f2464ca1e6914b9731d16779982a3e6bf2d8fddf521722c7a0f4879f46c3b9') + +prepare() { + cd acpica-unix-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd acpica-unix-${pkgver} + make +} + +package() { + cd acpica-unix-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/aiksaurus/PKGBUILD b/aiksaurus/PKGBUILD new file mode 100644 index 0000000..5816277 --- /dev/null +++ b/aiksaurus/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=aiksaurus +pkgver=1.2.1 +pkgrel=2 +pkgdesc='A cross-platform, free thesaurus' +url='http://aiksaurus.sourceforge.net/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('gtk2') +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('48591850f28f1a8f4b4986df14090ef7bd57cbfbad739cb0013db021f6f5bcb3c592b38e36774735499e27b9e99330504f8d9c6022158e25469cbc81d13f7463') + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --with-gtk + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/allegro/PKGBUILD b/allegro/PKGBUILD new file mode 100644 index 0000000..1979d73 --- /dev/null +++ b/allegro/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=allegro +pkgver=5.2.8.0 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Portable library mainly aimed at video game and multimedia programming" +arch=('i686' 'x86_64') +url='https://liballeg.org/' +license=('GPL-2' 'Modified-BSD' 'zlib') +depends=('gtk' 'jack' 'glu' 'libtheora' 'libvorbis' 'libxcursor' + 'libxpm' 'opusfile' 'flac' 'enet' 'openal' 'physfs') +makedepends=('cmake' 'xenocara-proto' 'quilt' 'alsa-lib') +source=("https://github.com/liballeg/allegro5/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/a/allegro5/allegro5_${_debver}+dfsg-${_debrel}.debian.tar.xz" + "fix-build.patch") +sha512sums=('e7dcfe92646a571929d47c268f0f3844afd67a0396ea0d532908e33e39661c9c5dc7929cc01d622804c068c3aa0e4c394972d128072617457fcabe5ef6a8e5f3' + '98bcd732d1e03bb0b693655c8256579270e56da9e299a4c9c243b0955010bfe5863d8d10f65cd1c03a246c0d42f4b13074bbb12e34be2ca5c98991830e342441' + '46d3e267289792b1d8f71c2a369d8d832f2195621e19b1793cb5ff6c4ccf38970ff1043a8f9eb6d62e46184f50d63f0d4238320cb855fa0fd37d0a7816c4d372') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/use-debians-dejavu-font.patch || true + + quilt push -av + fi + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DWANT_DOCS_HTML=OFF \ + -DWANT_AUDIO=ON \ + -DWANT_FONT=ON \ + -DWANT_IMAGE=ON \ + -DWANT_DEMO=OFF \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "$srcdir"/$pkgname-$pkgver/LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/allegro/fix-build.patch b/allegro/fix-build.patch new file mode 100644 index 0000000..9ca0bb1 --- /dev/null +++ b/allegro/fix-build.patch @@ -0,0 +1,10 @@ +--- a/addons/acodec/modaudio.c 2022-06-06 01:46:27.000000000 +0200 ++++ b/addons/acodec/modaudio.c 2024-01-27 03:48:06.994840576 +0100 +@@ -21,6 +21,7 @@ + + // We use the deprecated duh_render in DUMB 2. + #define DUMB_DECLARE_DEPRECATED ++#define DUMB_OFF_T_CUSTOM int64_t + #include + #include + diff --git a/alsa-lib/0001-correct-paths-for-configurations.patch b/alsa-lib/0001-correct-paths-for-configurations.patch new file mode 100644 index 0000000..5a2e9af --- /dev/null +++ b/alsa-lib/0001-correct-paths-for-configurations.patch @@ -0,0 +1,23 @@ +diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf +index e65bf2ca..94f2bdae 100644 +--- a/src/conf/alsa.conf ++++ b/src/conf/alsa.conf +@@ -8,10 +8,16 @@ + { + func load + files [ ++ { ++ @func concat ++ strings [ ++ { @func datadir } ++ "/alsa.conf.d/" ++ ] ++ } + "/var/lib/alsa/conf.d" +- "/usr/etc/alsa/conf.d" + "/etc/alsa/conf.d" +- "/etc/asound.conf|||/usr/etc/asound.conf" ++ "/etc/asound.conf" + "~/.asoundrc" + { + @func concat diff --git a/alsa-lib/0002-Enabled-extended-namehints-in-alsa.conf.patch b/alsa-lib/0002-Enabled-extended-namehints-in-alsa.conf.patch new file mode 100644 index 0000000..065810d --- /dev/null +++ b/alsa-lib/0002-Enabled-extended-namehints-in-alsa.conf.patch @@ -0,0 +1,16 @@ +--- a/src/conf/alsa.conf 2024-04-10 10:43:57.000000000 +0200 ++++ b/src/conf/alsa.conf 2024-04-10 11:05:36.399981580 +0200 +@@ -102,11 +102,11 @@ + # + + # show all name hints also for definitions without hint {} section +-defaults.namehint.showall off ++defaults.namehint.showall on + # show just basic name hints + defaults.namehint.basic on + # show extended name hints +-defaults.namehint.extended off ++defaults.namehint.extended on + # + defaults.ctl.card 0 + defaults.pcm.card 0 diff --git a/alsa-lib/PKGBUILD b/alsa-lib/PKGBUILD new file mode 100644 index 0000000..db19848 --- /dev/null +++ b/alsa-lib/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=alsa-lib +pkgver=1.2.6.1 +pkgrel=2 +pkgdesc="An alternative implementation of kernel sound support" +arch=('i686' 'x86_64') +url='https://alsa-project.org/' +depends=('glibc' 'alsa-topology-conf' 'alsa-ucm-conf') +license=('LGPL-2.1') +backup=('etc/alsa.conf' + 'etc/asound.conf') +source=("https://www.alsa-project.org/files/pub/lib/$pkgname-$pkgver.tar.bz2"{,.sig} + "alsa.sh.profile" + "alsa.conf.profile" + "asound.conf" + "0001-correct-paths-for-configurations.patch" + "0002-Enabled-extended-namehints-in-alsa.conf.patch") +sha512sums=('70e539cf092b5d43e00e4134d8a3e184f0dc34312823e4b58a574320cbf06cb7369bc3251ecb1858033756a7a8c35d36faa8da48d49f6efe0cec905784adbd45' + 'SKIP' + '13e7d3ec57c0b4048d6ca63284cc15ee26b77a30dbceb62fc7b870f1be36e435774a8a459cca06d5fbe4dfe5efb1b3ab016484b6d7e084d26f96232e4a8219b4' + 'a519cb8797d889d78fef2fef4fa04699dd9e8821d714ec60b64324a0cba8073083d1aaa42154c42a2b22a82346cbd4991c91fa5c12dc719c22b42412aa8e4a8a' + 'b0e8067ed1d8f09548056bfa54df065a4937bd75cc5140f973c1225a41cc6e508975f5d1fb467e30883aacd1b1487fb46acc92f6ee0099efcae9cd5fa5bb3799' + 'b5a07622a0312f1cc277330d4e78178273b3991ce405faffe8010828baf8ec207f4070399ea7b687dcca438f7d4e24509065ec2c15e8b0085d21bed8941f4144' + 'b21775dbc8e54b1c5015020a559c793c07627e04edc771521ff6661602726df488583f8d892acfb945185ab4b20c540f9c17230df1d4a742cd1a8eb430b98d08') +validpgpkeys=('F04DF50737AC1A884C4B3D718380596DA6E59C91') # ALSA Release Team (Package Signing Key v1) + +prepare() { + cd "$pkgname-$pkgver" + patch -Np1 -i ${srcdir}/0001-correct-paths-for-configurations.patch + patch -Np1 -i ${srcdir}/0002-Enabled-extended-namehints-in-alsa.conf.patch + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --disable-python \ + --disable-static \ + --disable-resmgr \ + --enable-rawmidi \ + --enable-seq \ + --enable-aload \ + --without-debug + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" install -C doc + install -vDm 644 {MEMORY-LEAK,TODO,NOTES,ChangeLog,doc/asoundrc.txt} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm755 "$srcdir/alsa.sh.profile" "$pkgdir/etc/profile.d/alsa.conf" + install -Dm644 "$srcdir/alsa.conf.profile" "$pkgdir/etc/alsa.conf" + install -Dm644 "$srcdir/asound.conf" -t "$pkgdir/etc" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/alsa-lib/alsa.conf.profile b/alsa-lib/alsa.conf.profile new file mode 100644 index 0000000..f49592c --- /dev/null +++ b/alsa-lib/alsa.conf.profile @@ -0,0 +1 @@ +ALSA_PCM_CARD=0 diff --git a/alsa-lib/alsa.sh.profile b/alsa-lib/alsa.sh.profile new file mode 100755 index 0000000..8580a61 --- /dev/null +++ b/alsa-lib/alsa.sh.profile @@ -0,0 +1,42 @@ +#!/bin/sh + +if [ -n "$XDG_CONFIG_HOME" ] && [ -r "$XDG_CONFIG_HOME/alsa.conf" ]; then + . "$XDG_CONFIG_HOME/alsa.conf" +elif [ -n "$HOME" ] && [ -r "$HOME/.config/alsa.conf" ]; then + . "$HOME/.config/alsa.conf" +elif [ -r /etc/alsa.conf ]; then + . /etc/alsa.conf +fi + +[ -n "$ALSA_CARD" ] && export ALSA_CARD +[ -n "$ALSA_CENTER_LFE_CARD" ] && export ALSA_CENTER_LFE_CARD +[ -n "$ALSA_CENTER_LFE_DEVICE" ] && export ALSA_CENTER_LFE_DEVICE +[ -n "$ALSA_CTL_CARD" ] && export ALSA_CTL_CARD +[ -n "$ALSA_FRONT_CARD" ] && export ALSA_FRONT_CARD +[ -n "$ALSA_FRONT_DEVICE" ] && export ALSA_FRONT_DEVICE +[ -n "$ALSA_HWDEP_CARD" ] && export ALSA_HWDEP_CARD +[ -n "$ALSA_HWDEP_DEVICE" ] && export ALSA_HWDEP_DEVICE +[ -n "$ALSA_IEC958_CARD" ] && export ALSA_IEC958_CARD +[ -n "$ALSA_IEC958_DEVICE" ] && export ALSA_IEC958_DEVICE +[ -n "$ALSA_MODEM_CARD" ] && export ALSA_MODEM_CARD +[ -n "$ALSA_MODEM_DEVICE" ] && export ALSA_MODEM_DEVICE +[ -n "$ALSA_PCM_CARD" ] && export ALSA_PCM_CARD +[ -n "$ALSA_PCM_DEVICE" ] && export ALSA_PCM_DEVICE +[ -n "$ALSA_RAWMIDI_CARD" ] && export ALSA_RAWMIDI_CARD +[ -n "$ALSA_RAWMIDI_DEVICE" ] && export ALSA_RAWMIDI_DEVICE +[ -n "$ALSA_REAR_CARD" ] && export ALSA_REAR_CARD +[ -n "$ALSA_REAR_DEVICE" ] && export ALSA_REAR_DEVICE +[ -n "$ALSA_SIDE_CARD" ] && export ALSA_SIDE_CARD +[ -n "$ALSA_SIDE_DEVICE" ] && export ALSA_SIDE_DEVICE +[ -n "$ALSA_SURROUND21_CARD" ] && export ALSA_SURROUND21_CARD +[ -n "$ALSA_SURROUND21_DEVICE" ] && export ALSA_SURROUND21_DEVICE +[ -n "$ALSA_SURROUND40_CARD" ] && export ALSA_SURROUND40_CARD +[ -n "$ALSA_SURROUND40_DEVICE" ] && export ALSA_SURROUND40_DEVICE +[ -n "$ALSA_SURROUND41_CARD" ] && export ALSA_SURROUND41_CARD +[ -n "$ALSA_SURROUND41_DEVICE" ] && export ALSA_SURROUND41_DEVICE +[ -n "$ALSA_SURROUND50_CARD" ] && export ALSA_SURROUND50_CARD +[ -n "$ALSA_SURROUND50_DEVICE" ] && export ALSA_SURROUND50_DEVICE +[ -n "$ALSA_SURROUND51_CARD" ] && export ALSA_SURROUND51_CARD +[ -n "$ALSA_SURROUND51_DEVICE" ] && export ALSA_SURROUND51_DEVICE +[ -n "$ALSA_SURROUND71_CARD" ] && export ALSA_SURROUND71_CARD +[ -n "$ALSA_SURROUND71_DEVICE" ] && export ALSA_SURROUND71_DEVICE diff --git a/alsa-lib/asound.conf b/alsa-lib/asound.conf new file mode 100644 index 0000000..b056819 --- /dev/null +++ b/alsa-lib/asound.conf @@ -0,0 +1,17 @@ +# +# ALSA +# + +# ALSA settings by default +defaults.ctl.card 0 +defaults.pcm.card 0 +defaults.pcm.device 0 +defaults.pcm.subdevice -1 +defaults.rawmidi.card 0 +defaults.rawmidi.device 0 +defaults.rawmidi.subdevice -1 +defaults.hwdep.card 0 +defaults.hwdep.device 0 +defaults.timer.card 0 +defaults.timer.device 0 +defaults.timer.subdevice 0 diff --git a/alsa-topology-conf/PKGBUILD b/alsa-topology-conf/PKGBUILD new file mode 100644 index 0000000..20ac2e1 --- /dev/null +++ b/alsa-topology-conf/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=alsa-topology-conf +pkgver=1.2.5.1 +pkgrel=1 +pkgdesc="ALSA topology configuration files" +url="https://alsa-project.org/" +arch=('any') +license=('Modified-BSD') +source=("https://www.alsa-project.org/files/pub/lib/$pkgname-$pkgver.tar.bz2"{,.sig}) +sha512sums=('b34176b213e1afcb61fee19b569d6422a7692b62cf08b0ef651f2fbb1eefe49f25ca6386d0bfcec7152d4b5ed3daa84edb900181d40169e777751ae033125374' + 'SKIP') +validpgpkeys=('F04DF50737AC1A884C4B3D718380596DA6E59C91') # ALSA Release Team (Package Signing Key v1) + +package() { + cd "${pkgname}-${pkgver}" + for dir in topology/*; do + install -vDm 644 "${dir}"/*.conf -t "$pkgdir/usr/share/alsa/topology/$(basename $dir)" + done + install -vDm 644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + install -vDm 644 README.md -t "$pkgdir/usr/share/doc/$pkgname" +} diff --git a/alsa-ucm-conf/PKGBUILD b/alsa-ucm-conf/PKGBUILD new file mode 100644 index 0000000..42ec416 --- /dev/null +++ b/alsa-ucm-conf/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=alsa-ucm-conf +pkgver=1.2.5.1 +pkgrel=1 +pkgdesc="ALSA Use Case Manager configuration (and topologies)" +url="https://alsa-project.org/" +arch=('any') +license=('Modified-BSD') +source=("https://www.alsa-project.org/files/pub/lib/$pkgname-$pkgver.tar.bz2"{,.sig}) +sha512sums=('774d6da1a0ee6fb1fcd764c1d4b3eb5812a35508cf27db71f6c82784f125eca207992da9081d25783fecb31e548d8b34124d4b3b3d506e33215b76ea48f71012' + 'SKIP') +validpgpkeys=('F04DF50737AC1A884C4B3D718380596DA6E59C91') # ALSA Release Team (Package Signing Key v1) + +package() { + cd "${pkgname}-${pkgver}" + find ucm2 -type f -iname "*.conf" -exec install -vDm 644 {} "${pkgdir}/usr/share/alsa/"{} \; + find ucm2 -type l -iname "*.conf" -exec cp -dv {} "${pkgdir}/usr/share/alsa/"{} \; + install -vDm 644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + install -vDm 644 README.md -t "$pkgdir/usr/share/doc/$pkgname" + install -vDm 644 ucm2/README.md -t "$pkgdir/usr/share/doc/$pkgname/ucm2" +} diff --git a/alsa-utils/PKGBUILD b/alsa-utils/PKGBUILD new file mode 100644 index 0000000..0363a29 --- /dev/null +++ b/alsa-utils/PKGBUILD @@ -0,0 +1,84 @@ +# Maintainer: Jesus E. + +pkgname=alsa-utils +pkgver=1.2.4 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Utilities for configuring and using ALSA" +arch=('i686' 'x86_64') +url="https://www.alsa-project.org" +license=('GPL-2') +depends=('glibc' 'pciutils' 'psmisc') +makedepends=('alsa-lib' 'docbook-xsl' 'fftw' 'libsamplerate' 'ncurses' 'xmlto' 'quilt') +optdepends=('fftw: for alsabat') +backup=('etc/conf.d/alsasound') +source=(https://www.alsa-project.org/files/pub/utils/$pkgname-$pkgver.tar.bz2 + https://deb.debian.org/debian/pool/main/a/alsa-utils/alsa-utils_$_debver-$_debrel.debian.tar.xz + alsasound.confd + alsasound.initd + alsasound.finish + alsasound.run) +sha512sums=('13080abda55269513b3751044dac292d695e273073a62d74ed4a32c68f448a2b015fe16604650821a6398b6ef6a7b6008cb9f0b7fb7f4ee1fa2b4eb2dcf29770' + 'ebe550a904069495e0673b5f1bf0506b9d8a7b270def187f42b92d5f4f3e065022e35af38a7c47422dca9c56b319966878771904e7c9ad15fc55443c280e1133' + '90c1e974276945f7632dc370a005b58d669b93edbf27116098d4831e69c11c26d9b21e7eacfaf12c50019f8c88dc1f370101e2d905fdde40887fe36bac00d83e' + '960e6eff97174004abeb8d36d68c01a9f67e589174743928bb63dc37390f9868551e5b7e11c8386db67889c3d518f5ff4564b258dfee5e3317c164bc52aac04e' + '55fa39e5d138e103c23e7c55a3ad68a4c910f622aa58bedbb757c183d090000c719871bc126f8c8025dcebdcb97c4fc5edaa03a9719ecbc8970397f0f6743c8f' + '30a1eb39628efc561375bd0fc6f9e3e24d6d1d8d723ef50acf85f51e619e609081fffa7535adf77d8976ca5926a7156d4c87ec0345569cb8393878334190b66d') + +prepare() { + cd ${srcdir}/${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/Don-t-run-both-systemd-services-in-paralell.patch || true + rm -v debian/patches/systemd_Documentation_key.patch || true + + quilt push -av + fi +} + +build() { + cd ${srcdir}/${pkgname}-${pkgver} + ./configure --prefix=/usr --disable-alsaconf \ + --with-udev-rules-dir=/lib/udev/rules.d + make + # fix udev rules generation + cd alsactl + make 90-alsa-restore.rules +} + +package() { + cd ${srcdir}/${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + + # install license + install -D -m644 COPYING \ + ${pkgdir}/usr/share/licenses/${pkgname}/COPYING + + # install alsa udev rule file + install -D -m644 alsactl/90-alsa-restore.rules \ + ${pkgdir}/lib/udev/rules.d/90-alsa-restore.rules + + # dir where to save ALSA state + install -d ${pkgdir}/var/lib/alsa + + # install OpenRC files + install -D -m644 ${srcdir}/alsasound.confd \ + ${pkgdir}/etc/conf.d/alsasound + install -D -m755 ${srcdir}/alsasound.initd \ + ${pkgdir}/etc/init.d/alsasound + + # install runit files + install -D -m644 ${srcdir}/alsasound.finish \ + ${pkgdir}/etc/sv/alsasound/finish + install -D -m755 ${srcdir}/alsasound.run \ + ${pkgdir}/etc/sv/alsasound/run +} diff --git a/alsa-utils/alsasound.confd b/alsa-utils/alsasound.confd new file mode 100644 index 0000000..d47edb1 --- /dev/null +++ b/alsa-utils/alsasound.confd @@ -0,0 +1,15 @@ +# RESTORE_ON_START: +# Do you want to restore your mixer settings? If not, your cards will be +# muted. +# no - Do not restore state +# yes - Restore state + +RESTORE_ON_START="yes" + +# SAVE_ON_STOP: +# Do you want to save changes made to your mixer volumes when alsasound +# stops? +# no - Do not save state +# yes - Save state + +SAVE_ON_STOP="yes" diff --git a/alsa-utils/alsasound.finish b/alsa-utils/alsasound.finish new file mode 100644 index 0000000..1439258 --- /dev/null +++ b/alsa-utils/alsasound.finish @@ -0,0 +1,3 @@ +#!/bin/sh +set -e +exec alsactl store diff --git a/alsa-utils/alsasound.initd b/alsa-utils/alsasound.initd new file mode 100644 index 0000000..c413c8a --- /dev/null +++ b/alsa-utils/alsasound.initd @@ -0,0 +1,87 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +alsastatedir=/var/lib/alsa +alsascrdir=/etc/alsa.d +alsahomedir=/var/run/alsasound + +extra_commands="save restore" + +depend() { + need localmount + after bootmisc modules isapnp coldplug hotplug +} + +restore() { + ebegin "Restoring Mixer Levels" + + checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1 + + if [ ! -r "${alsastatedir}/asound.state" ] ; then + ewarn "No mixer config in ${alsastatedir}/asound.state, you have to unmute your card!" + eend 0 + return 0 + fi + + local cards="$(sed -n -e 's/ *\([[:digit:]]*\) .*/\1/p' /proc/asound/cards)" + local CARDNUM + for cardnum in ${cards}; do + [ -e /dev/snd/controlC${cardnum} ] || sleep 2 + [ -e /dev/snd/controlC${cardnum} ] || sleep 2 + [ -e /dev/snd/controlC${cardnum} ] || sleep 2 + [ -e /dev/snd/controlC${cardnum} ] || sleep 2 + alsactl -E HOME="${alsahomedir}" -I -f "${alsastatedir}/asound.state" restore ${cardnum} \ + || ewarn "Errors while restoring defaults, ignoring" + done + + for ossfile in "${alsastatedir}"/oss/card*_pcm* ; do + [ -e "${ossfile}" ] || continue + # We use cat because I'm not sure if cp works properly on /proc + local procfile=${ossfile##${alsastatedir}/oss} + procfile="$(echo "${procfile}" | sed -e 's,_,/,g')" + if [ -e /proc/asound/"${procfile}"/oss ] ; then + cat "${ossfile}" > /proc/asound/"${procfile}"/oss + fi + done + + eend 0 +} + +save() { + ebegin "Storing ALSA Mixer Levels" + + checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1 + + mkdir -p "${alsastatedir}" + if ! alsactl -E HOME="${alsahomedir}" -f "${alsastatedir}/asound.state" store; then + eerror "Error saving levels." + eend 1 + return 1 + fi + + for ossfile in /proc/asound/card*/pcm*/oss; do + [ -e "${ossfile}" ] || continue + local device=${ossfile##/proc/asound/} ; device=${device%%/oss} + device="$(echo "${device}" | sed -e 's,/,_,g')" + mkdir -p "${alsastatedir}/oss/" + cp "${ossfile}" "${alsastatedir}/oss/${device}" + done + + eend 0 +} + +start() { + if [ "${RESTORE_ON_START}" = "yes" ]; then + restore + fi + + return 0 +} + +stop() { + if [ "${SAVE_ON_STOP}" = "yes" ]; then + save + fi + return 0 +} diff --git a/alsa-utils/alsasound.run b/alsa-utils/alsasound.run new file mode 100644 index 0000000..af3fa22 --- /dev/null +++ b/alsa-utils/alsasound.run @@ -0,0 +1,3 @@ +#!/bin/sh +set -e +exec alsactl -n 19 -c daemon diff --git a/alttab/PKGBUILD b/alttab/PKGBUILD new file mode 100644 index 0000000..3e4fd6b --- /dev/null +++ b/alttab/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=alttab +pkgver=1.7.1 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Task switcher for minimalistic WMs or standalone X session" +url='https://github.com/sagb/alttab' +license=('GPL-3') +arch=('i686' 'x86_64') +depends=('libx11' 'libxmu' 'libxft' 'libxrandr' 'libpng' 'uthash' 'libxpm') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/a/alttab/alttab_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/a/alttab/alttab_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('d9f6c1d00be21e975521ebc39e800f00522f0d898512a7e3a406ae859890c553a1ae312a0947701085831aa5e62b5b9db859ae84af4b3e8f3370462634a5ab97' + '3a9e847b19ae49d3413b91187eb475c088a476dc62bc49d971abba31b50495022bed3af98bf846ec579a7a13d198e1aaccfa4a07885ed05a601fc522b99a3a64') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/android-file-transfer/PKGBUILD b/android-file-transfer/PKGBUILD new file mode 100644 index 0000000..7b14443 --- /dev/null +++ b/android-file-transfer/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=android-file-transfer +pkgver=4.3 +pkgrel=1 +pkgdesc="Android MTP client with minimalistic UI" +arch=('i686' 'x86_64') +url='https://whoozle.github.io/android-file-transfer-linux' +license=('LGPL-2.1') +depends=('qt-base' 'fuse2' 'libxkbcommon-x11' 'hicolor-icon-theme' 'file' 'taglib') +makedepends=('cmake' 'qt-tools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/whoozle/android-file-transfer-linux/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('f5e51ad1532be44916df51dda5f6f7423a5b0d8ebd733a0a3f0424f684b9f84fc5996fb5effd45009eb1c60d873f79e8ecc47a9dc09ff429b4a458807a79ca8c') + +build() { + cmake \ + -S ${pkgname}-linux-${pkgver} \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_PYTHON=ON \ + -DBUILD_FUSE=ON \ + -DBUILD_TAGLIB=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir/" -C build install + install -Dm644 "${srcdir}/${pkgname}-linux-${pkgver}/LICENSE" -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/antimicrox/PKGBUILD b/antimicrox/PKGBUILD new file mode 100644 index 0000000..0c42719 --- /dev/null +++ b/antimicrox/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=antimicrox +pkgver=3.1.4 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Graphical program used to map keyboard buttons and mouse controls to a gamepad" +arch=('i686' 'x86_64') +url='https://github.com/AntiMicroX/antimicroX' +license=('GPL-3') +depends=('desktop-file-utils' 'hicolor-icon-theme' 'libxtst' 'qt-x11extras' 'sdl2') +makedepends=('cmake' 'extra-cmake-modules' 'gettext-tiny' 'itstool' 'qt-tools' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/AntiMicroX/${pkgname/x/X}/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/a/antimicro/antimicro_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('48a00fb20a17830483989a017784bd9a3b061a8d2caed2c942168b98fb762fac850560d93b84ef19e8e02c14b0241e5be375bdb17f2f75a5df06f24426d10505' + '18b194abcb3ad914e7aa92c7a9f10845054c182c2c44c1f12af0867006f9b644f6315412cac424d5066d50e88a19cffc626828dd40c4618196f2075652e9d97b') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -S ${pkgname}-${pkgver} \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DAPPDATA=ON \ + -DWITH_UINPUT=ON \ + -DWITH_X11=ON \ + -DWITH_XTEST=ON + make -C build +} + +package() { + make DESTDIR="${pkgdir}" -C build install + + cd "${srcdir}/${pkgname}-${pkgver}" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/antiword/PKGBUILD b/antiword/PKGBUILD new file mode 100644 index 0000000..4b6fafd --- /dev/null +++ b/antiword/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=antiword +pkgver=0.37 +_debver=$pkgver +_debrel=16 +pkgrel=3 +pkgdesc="A free and libre reader for documents" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('bash') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/a/antiword/antiword_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/a/antiword/antiword_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('f440e07ed7353ac147499e2ffe823c5ee7a03862c3bdb56182231644f8de7d728dbc430f46684a98cec17e09e831056bda336dac6be3f3ccb26ed5c60ee0d1da' + '1242606ad49736e3909d6d24043ae4c93d089f21d0c7e69545bf1cb5ed3219d6a15b9887c709f2e4cbb546401f57bec514f1d680b885f0718b2d9efb6d3051dc') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + sed -i "s|GLOBAL_INSTALL_DIR =.*|GLOBAL_INSTALL_DIR = /usr/bin|g" Makefile.Linux + mv Makefile.Linux Makefile + make OPT="$CFLAGS -DNDEBUG" LDFLAGS="$LDFLAGS" +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir" global_install + + # remove KDE-interface + rm "$pkgdir/usr/bin/kantiword" + + install -Dm644 Docs/antiword.1 -t "$pkgdir/usr/share/man/man1" + install -Dm644 Docs/COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/aqbanking/PKGBUILD b/aqbanking/PKGBUILD new file mode 100644 index 0000000..550ee00 --- /dev/null +++ b/aqbanking/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=aqbanking +pkgver=6.5.3 +pkgrel=1 +pkgdesc="A library for online banking and financial applications" +arch=('i686' 'x86_64') +url='https://www.aquamaniac.de/rdm/projects/aqbanking' +license=('GPL-2') +depends=('gwenhywfar') +makedepends=('intltool' 'gettext-tiny') +options=('!makeflags') +source=("https://www.aquamaniac.de/rdm/attachments/download/467/${pkgname}-${pkgver}.tar.gz") +sha512sums=('bca4449981f9660dc7de8506a2088981b52dcf4ded765fd337263962b464b7903319878e8efbce6cbef043b65be8edb828fee873f19e8c6b2fed0cf7906d58b2') + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + export PKG_CONFIG=/usr/bin/pkg-config + # removed unfree service paypal + ./configure \ + --prefix=/usr \ + --enable-gwenhywfar \ + --with-backends="aqhbci aqofxconnect aqnone" + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/arandr/PKGBUILD b/arandr/PKGBUILD new file mode 100644 index 0000000..c7b699f --- /dev/null +++ b/arandr/PKGBUILD @@ -0,0 +1,19 @@ +# Maintainer: Jesus E. + +pkgname=arandr +pkgver=0.1.11 +pkgrel=1 +pkgdesc="Provide a simple visual front end for XRandR" +arch=('any') +url='https://christian.amsuess.com/tools/arandr/' +license=('GPL-3') +depends=('gtk' 'python-pycairo' 'python-pygobject' 'xenocara-xrandr') +makedepends=('python-docutils' 'gettext-tiny') +source=("https://christian.amsuess.com/tools/$pkgname/files/${pkgname}-$pkgver.tar.gz") +sha512sums=('5f3ccabbffac0ea9e05b9d8c229f4f3b05f06ef285fb05a1ce2d7f88fd1723fd680636f5b97764b0aeb3cedac16863c4ccb154d65bf6fe987a1b3cc8a0026584') + +package() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py install --prefix=/usr --root="$pkgdir" + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/arc-icon-theme/PKGBUILD b/arc-icon-theme/PKGBUILD new file mode 100644 index 0000000..183262f --- /dev/null +++ b/arc-icon-theme/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=arc-icon-theme +pkgver=20161122 +pkgrel=4 +pkgdesc="Standard icons for GTK+" +arch=('any') +url='https://github.com/horst3180/arc-icon-theme/' +license=('GPL-3') +depends=('gnome-icon-theme') +options=('!emptydirs' '!strip') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/horst3180/${pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('5d0f1417358eb81994868949acefe146537d8f3cc2fd7f529f9e6ba9c264845e50962f94427bac1262a76d3ca98d05795819d7c4a6ecd3139b0b57a6e9fdfad1') + +prepare() { + # add fallback themes + cd ${pkgname}-${pkgver} + sed -i "s/Inherits=.*/Inherits=gnome,hicolor/" Arc/index.theme +} + +build() { + cd ${pkgname}-${pkgver} + ./autogen.sh \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/aria2/PKGBUILD b/aria2/PKGBUILD new file mode 100644 index 0000000..d605ece --- /dev/null +++ b/aria2/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=aria2 +pkgver=1.37.0 +pkgrel=1 +pkgdesc="Download utility that supports HTTP(S), FTP, BitTorrent, and Metalink" +arch=('i686' 'x86_64') +url='https://aria2.github.io/' +license=('GPL-2') +depends=('gnutls' 'libxml2' 'sqlite' 'c-ares' 'ca-certificates' 'libssh2') +checkdepends=('cppunit') +source=("https://github.com/tatsuhiro-t/aria2/releases/download/release-${pkgver}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('df3b8b4de8fa8d78f203ea00c059e43585e18a229009f202e42e6a9e59db67d09df0dbba8a016e99ed73c82f59e4f8b26f86c2288afdbb96a6807cbe2c56e6b3') + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-libaria2 \ + --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # add bash completion + install -d "$pkgdir"/usr/share/bash-completion/completions + install -m644 "$pkgdir"/usr/share/doc/aria2/bash_completion/aria2c \ + "$pkgdir"/usr/share/bash-completion/completions + rm -rf "$pkgdir"/usr/share/doc/aria2/bash_completion + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/armagetronad/PKGBUILD b/armagetronad/PKGBUILD new file mode 100644 index 0000000..d54fd24 --- /dev/null +++ b/armagetronad/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=armagetronad +pkgver=0.2.9.2.3 +pkgrel=2 +pkgdesc="A free and libre lightcycle game in 3D" +arch=('i686' 'x86_64') +url='https://armagetronad.net/' +license=('GPL-2') +depends=('sdl_image' 'libxml2' 'sdl_mixer' 'ftgl' 'hicolor-icon-theme') +makedepends=('python') +optdepends=('python: language updater') +groups=('games') +source=("https://downloads.sourceforge.net/sourceforge/armagetronad/armagetronad-$pkgver.tbz") +sha512sums=('813911a75fa1b3a90d99d62c0c38e9b325166623280c0d6a8217f8ca905b4a4617401db12bda898d82aa086a1bd673b31741b95b60b0f1247e6a5677a48c98eb') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + 2to3 -w language/update.py + + sed -i 's|FTGL.h|ftgl.h|g' configure + sed -i 's|png_check_sig|png_sig_cmp|g' configure + sed -i -r '/desktop-id/ s/()//g' desktop/armagetronad.appdata.xml.in +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --enable-automakedefaults \ + --disable-uninstall + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # correct package-structure and remove files not needed + mv "$pkgdir/usr/bin" "$pkgdir/usr/games" + rm -rf "$pkgdir/usr/share/icons" + rm -rf "$pkgdir/usr/share/games/$pkgname/desktop" + rm -rf "$pkgdir/usr/share/applications" + + # desktop-shortcut, icon and license + install -Dm644 "desktop/$pkgname.desktop" -t "$pkgdir/usr/share/applications" + install -Dm644 "desktop/icons/32x32/$pkgname.png" "$pkgdir/usr/share/pixmaps/org.armagetronad.armagetronad.png" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/asc/PKGBUILD b/asc/PKGBUILD new file mode 100644 index 0000000..4639e2e --- /dev/null +++ b/asc/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=asc +pkgver=2.6.1.0 +_debver=$pkgver +_debrel=9 +_pkgmusicver=1.3 +pkgrel=3 +pkgdesc="Advanced Strategic Command is a free and libre turn-based strategy game" +url='http://www.asc-hq.org/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('boost-libs' 'bzip2' 'expat' 'gcc-libs' 'freetype2' 'physfs' 'lua51' + 'libpng' 'sdl' 'sdl_image' 'sdl_mixer' 'sdl_sound' 'wxgtk2' 'libsigc++') +makedepends=('boost' 'quilt' 'zip') +groups=('games') +source=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/a/asc/asc_${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/a/asc/asc_${_debver}-${_debrel}.debian.tar.xz" + "${pkgname}-music-${_pkgmusicver}.tar.gz::https://deb.debian.org/debian/pool/main/a/asc-music/asc-music_${_pkgmusicver}.orig.tar.gz") +sha512sums=('9bf6c8ef44e4f8df32335d6fda3d755e74065cfa36cfab913c7f5990cea0d7f7215642e290a0aa0eaa98417a0f19a971d17fd4b464dbece9f60880bd32daee2e' + '794bb68bf43122707476f6de0bd4b441e0476d0d46e8d81b5ba0878d0ed8b4dc9ec9af38cea1a3830e8aaae7fb1bcdd90b61a3f3055a609f936fb413353a8359' + '918dc746c5739cb5c7406cc54d0a3fa20cdf2ba2d0a6f54442b85ce598c76e4696f76fb2b08cfc70aa080ae90ab1cd28981408addd32f522566dcf3d2034c6fc') +noextract=("${pkgname}-music-${_pkgmusicver}.tar.gz") + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/pkg-config-freetype.patch || true + rm -v debian/patches/FTBFS-GCC10.patch || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + + export CFLAGS="-I/usr/include/freetype2" + export CXXFLAGS="${CFLAGS}" + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --with-data-dir=/usr/share/games/$pkgname + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -d "${pkgdir}/usr/share/games/$pkgname/music" + tar -xzf "${srcdir}/${pkgname}-music-${_pkgmusicver}.tar.gz" --strip 1 \ + -C "${pkgdir}/usr/share/games/$pkgname/music" + + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname + install -Dm644 debian/$pkgname.desktop -t "$pkgdir"/usr/share/applications + install -Dm644 debian/icons/$pkgname.png -t "$pkgdir"/usr/share/pixmaps +} diff --git a/asciidoc/PKGBUILD b/asciidoc/PKGBUILD new file mode 100644 index 0000000..d3e6c8a --- /dev/null +++ b/asciidoc/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=asciidoc +pkgver=9.0.0rc2 +_debver=9.0.0~rc2 +_debrel=1 +pkgrel=3 +pkgdesc="Text document format for short documents, articles, books and UNIX man pages" +arch=('any') +url='https://asciidoc-py.github.io/' +license=('GPL-2') +depends=('python' 'libxslt' 'docbook-xsl') +makedepends=('quilt') +optdepends=('lynx: text generation') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/a/asciidoc/asciidoc_${_debver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/a/asciidoc/asciidoc_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('143f81628151a925c443094a855ef0ede30d41dcabe100948aa6b5a81afb9f7b14fc0bfb98757d55abf9bfffc6f6ae4ab4d3608c6e60bb9e96c6cdbb33150d14' + '148525c17f49e1ae5a843314160b506e6681b2f1cabfd39827fb6a8489230a6a320a5536d5b1095829e962cc1a7936967db322e303b45b350274a1b749e45e43') + +prepare() { + cd ${pkgname}-py3-${pkgver} + + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -i 's|python3|python|g' $(grep -rIl 'python3') + + autoconf +} + +build() { + cd ${pkgname}-py3-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd ${pkgname}-py3-${pkgver} + + make install DESTDIR=${pkgdir} + make docs DESTDIR=${pkgdir} + + install -Dm644 asciidocapi.py -t "${pkgdir}/usr/lib/python3.8/site-packages" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/asciidoctor/PKGBUILD b/asciidoctor/PKGBUILD new file mode 100644 index 0000000..802f3de --- /dev/null +++ b/asciidoctor/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=asciidoctor +pkgver=2.0.12 +pkgrel=1 +pkgdesc='An implementation of AsciiDoc in Ruby' +arch=('any') +url='https://asciidoctor.org' +license=('Expat') +depends=('ruby') +options=(!emptydirs) +source=("https://rubygems.org/downloads/${pkgname}-${pkgver}.gem") +noextract=("$pkgname-$pkgver.gem") +sha512sums=('a927d052e4a2934524d8222700e83fbc746fa2b4880a810e39a579c1dff02054c83284a1c9e0af176709c0ab129677fcfcaa14c038ec124fb394852f38294db5') + +package() { + local _gemdir="$(ruby -e 'puts Gem.default_dir')" + + gem install --ignore-dependencies --no-user-install --verbose \ + -i "$pkgdir/$_gemdir" -n "$pkgdir/usr/bin" \ + "$pkgname-$pkgver.gem" + + install -Dm644 "$pkgdir/$_gemdir/gems/$pkgname-$pkgver/LICENSE" \ + "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + install -Dm644 "$pkgdir/$_gemdir/gems/$pkgname-$pkgver/man/asciidoctor.1" \ + "$pkgdir/usr/share/man/man1/asciidoctor.1" + + rm "$pkgdir/$_gemdir/cache/$pkgname-$pkgver.gem" + rm -rf "$pkgdir/$_gemdir/gems/$pkgname-$pkgver/man" +} diff --git a/asciiquarium/PKGBUILD b/asciiquarium/PKGBUILD new file mode 100644 index 0000000..20a32d0 --- /dev/null +++ b/asciiquarium/PKGBUILD @@ -0,0 +1,20 @@ +# Maintainer: Jesus E. + +pkgname=asciiquarium +pkgver=1.1 +pkgrel=2 +pkgdesc="An aquarium / sea animation in ASCII art" +arch=('any') +license=('GPL-2') +depends=('perl' 'perl-term-animation') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('109da0aaba272465aa2cf5ce010e9ca1ece3be5be996dfe12709b3c10e44572492196b1852e8c103ed89d2c6efd0b05e454a718267cbcc4924806d30a072d926' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +package() { + cd ${pkgname}_${pkgver} + install -Dm755 ${pkgname} "${pkgdir}/usr/bin/${pkgname}" + install -Dm644 README "${pkgdir}/usr/share/doc/${pkgname}/README" + install -Dm644 gpl.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/aspell-i18n-dict-af/PKGBUILD b/aspell-i18n-dict-af/PKGBUILD new file mode 100644 index 0000000..4ba1410 --- /dev/null +++ b/aspell-i18n-dict-af/PKGBUILD @@ -0,0 +1,55 @@ +#!/bin/ksh +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='af' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Afrikaans dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('8ca7b892745bebe5dfda1319141c5efc53fbad1444066d585cc2d6479c51c85c31307a6977a0647b0c4add4a5b7baa9adb370996e25db4e1c98f1c10991fd649' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-am/PKGBUILD b/aspell-i18n-dict-am/PKGBUILD new file mode 100644 index 0000000..b4f2009 --- /dev/null +++ b/aspell-i18n-dict-am/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='am' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.03.1' +_srcver='0.03-1' +pkgrel='2' +pkgdesc='Amharic dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=(# Public-Domain (Ge'ez Frontier Foundation) + 'custom:Public-Domain-GFF') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('a9b323266a8d3f72a5684a2d24465d99539069bf330d4c417f6b56f7fb5b5c3479cd18265c4bafa901c86c411eaec3de7798c08c54c565418b5ecccd2a91a6f0' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '22A48912622D7BF4C6D15E5B19EA26E56FAB4DD4') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ar/PKGBUILD b/aspell-i18n-dict-ar/PKGBUILD new file mode 100644 index 0000000..279a63c --- /dev/null +++ b/aspell-i18n-dict-ar/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ar' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.2.0' +_srcver='1.2-0' +pkgrel='2' +pkgdesc='Arabic dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('7f645dab6e27da404d599f40da2baf469293105cbaf440bf9abf9268423b36e0faa11d1afcf5c32a8e1d93eadad356af6486a960c7bca97777948c844108f4bc' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ast/PKGBUILD b/aspell-i18n-dict-ast/PKGBUILD new file mode 100644 index 0000000..c5542b6 --- /dev/null +++ b/aspell-i18n-dict-ast/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ast' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01' +_srcver="${pkgver}" +pkgrel='2' +pkgdesc='Asturian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('700a45c230218e57549cf4b2caaa9e86c4b8da68a3ed937fa391814816c1e0d16265d77658e209af66550e647f418663eb76952efed973e6b1f88570b90d77bc' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-az/PKGBUILD b/aspell-i18n-dict-az/PKGBUILD new file mode 100644 index 0000000..c0c1ae0 --- /dev/null +++ b/aspell-i18n-dict-az/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='az' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.02.0' +_srcver='0.02-0' +pkgrel='2' +pkgdesc='Azerbaijani dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('69a0858addf72259898fc4fd3a22a572b97227915a08a632ea1d8645c2636c702ce09f66961afbfbb3473b9404a4fe73c9b02c2e694a641385e4bbd2c61c9b26' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-be/PKGBUILD b/aspell-i18n-dict-be/PKGBUILD new file mode 100644 index 0000000..f0cf41c --- /dev/null +++ b/aspell-i18n-dict-be/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='be' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01' +_srcver="${pkgver}" +pkgrel='2' +pkgdesc='Belarusian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('320334c9944c44c9a61d24798ecd7603c4dc9fee99035d48d19759ecf2c1ac8ae21a0afde050d6527566e2404c1df4f75e313cec598b7faa93506142ea3c1022' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-bg/PKGBUILD b/aspell-i18n-dict-bg/PKGBUILD new file mode 100644 index 0000000..a0d8fe9 --- /dev/null +++ b/aspell-i18n-dict-bg/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='bg' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='4.1.0' +_srcver='4.1-0' +pkgrel='2' +pkgdesc='Bulgarian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('73ba292e9e78be21a9bd32d802a3f87b5b8200b64fcdc6e8bb47c834eb9dfd855a3397e8deb83e7879dc0dab7b118ae117832032fb9a450976c929bf12926881' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright' 'doc/COPYING.BULGARIAN'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-bn/PKGBUILD b/aspell-i18n-dict-bn/PKGBUILD new file mode 100644 index 0000000..243b061 --- /dev/null +++ b/aspell-i18n-dict-bn/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='bn' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.1.1' +_srcver='0.01.1-1' +pkgrel='2' +pkgdesc='Bengali dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('d8fe29b100284aa6b2e909811b9eb09bd5decea4c056f2ed6a24de9d5adb48714827a2e892fdf38274d1e1a44b2a93415fccf90b4c4d85512f3052c7f7939d22' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-br/PKGBUILD b/aspell-i18n-dict-br/PKGBUILD new file mode 100644 index 0000000..876e136 --- /dev/null +++ b/aspell-i18n-dict-br/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='br' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.2' +_srcver='0.50-2' +pkgrel='2' +pkgdesc='Breton dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2") +sha512sums=('02f2ce7a350adb87a0f32dd4748f067230a0f3faf195f8c7237bc0520cc0a7aa6475f96de933ae650611f8b9a41deaaeb57c2228ed95950a41e5defccba9e67c') +validpgpkeys=() # The signature file is not found. +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ca/PKGBUILD b/aspell-i18n-dict-ca/PKGBUILD new file mode 100644 index 0000000..eec3c73 --- /dev/null +++ b/aspell-i18n-dict-ca/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ca' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='2.1.5.1' +_srcver='2.1.5-1' +pkgrel='2' +pkgdesc='Catalan dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('9f3baef829948a4979c03dcc380caf3fa249912fa94d375a41df4d34d62ffdbf781a777eb437d101bdf99873e9d515a4d27ebef08f71ff435f07e845194c9f0a' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-cs/PKGBUILD b/aspell-i18n-dict-cs/PKGBUILD new file mode 100644 index 0000000..e8c30fa --- /dev/null +++ b/aspell-i18n-dict-cs/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='cs' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='20040614.1' +_srcver='20040614-1' +pkgrel='2' +pkgdesc='Czech dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('b4d3e46907a00c7de4d19766dc29f089ec119b736de1340ff5f56be9d0a1c8c90fa2b156173f312c13c589750ec7551e79bd7aa092d31fa6d5f05ed0b4b12c9a' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-csb/PKGBUILD b/aspell-i18n-dict-csb/PKGBUILD new file mode 100644 index 0000000..4189b31 --- /dev/null +++ b/aspell-i18n-dict-csb/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='csb' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.02.0' +_srcver='0.02-0' +pkgrel='2' +pkgdesc='Kashubian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('6ed05de10f1647ee98db588df0275721d25e1eea375f73ebf03cb02841f8eb9c0f7aa56f944e0f9b72884ccf99036445b5cddebfea00d77a8c714ed8a50d8eb1' + 'SKIP') +validpgpkeys=(# Piotr Formella + 'C733D78468088725774370319C5763F5BA5F67B2') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-cy/PKGBUILD b/aspell-i18n-dict-cy/PKGBUILD new file mode 100644 index 0000000..49ba909 --- /dev/null +++ b/aspell-i18n-dict-cy/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='cy' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.3' +_srcver='0.50-3' +pkgrel='2' +pkgdesc='Welsh dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2") +sha512sums=('feb68ea9749788a45725a5bc706ea2c24e73bada4fbce907bbe3b884d16875458516dd53fe7f5d62179cafe40117416f7068c1e6e0292353447c2ed7a494ad6b') +validpgpkeys=() # The signature file is not found. +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-da/PKGBUILD b/aspell-i18n-dict-da/PKGBUILD new file mode 100644 index 0000000..eeb2e5d --- /dev/null +++ b/aspell-i18n-dict-da/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='da' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.6.36.11.0' +_srcver='1.6.36-11-0' +pkgrel='2' +pkgdesc='Danish dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('6f793a491012b06eb45f8b52e230ae4de890b9a139f079a9d2264af62029b241b89b1690885641678607ac3c42b4ebfe626b14ec373cf5228b12b9eb615b8244' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-de-alt/PKGBUILD b/aspell-i18n-dict-de-alt/PKGBUILD new file mode 100644 index 0000000..20ecc53 --- /dev/null +++ b/aspell-i18n-dict-de-alt/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='de-alt' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='2.1.1' +_srcver='2.1-1' +pkgrel='2' +pkgdesc='German (old spelling) dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('823324bc299e9adbbe5308681a5f74ee2a76a32816e8abc9d19c3da0c4eae756eaf1a3c76e2d75449b51010854ab869379073b1fe377e505662187d6c38230b4' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-de/PKGBUILD b/aspell-i18n-dict-de/PKGBUILD new file mode 100644 index 0000000..cd529ac --- /dev/null +++ b/aspell-i18n-dict-de/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='de' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='20161207.7.0' +_srcver='20161207-7-0' +pkgrel='2' +pkgdesc='German dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +# The de_DE.aff.in is Original-BSD, +# but I did not find this file in the source code +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('ec29fa49d4e0303d6ceb78da3884ac54ddf34205895f30a95bce0db66f74472b423980200acf01efb1fa40380d6ea6351a58656400af35772266f8a54b1bbec8' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-el/PKGBUILD b/aspell-i18n-dict-el/PKGBUILD new file mode 100644 index 0000000..9a66abc --- /dev/null +++ b/aspell-i18n-dict-el/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='el' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.08.0' +_srcver='0.08-0' +pkgrel='2' +pkgdesc='Greek dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('ea4ca962afc552e5525bbb84c7a8f980a2cc07265de748c68fb322c1dbfc52b0ba07b4a561966bb89e850ec60b11a3f21befa6ca8b66501e9ad8b5314ddd1f47' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-en/PKGBUILD b/aspell-i18n-dict-en/PKGBUILD new file mode 100644 index 0000000..eba6b18 --- /dev/null +++ b/aspell-i18n-dict-en/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='en' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='2020.12.07.0' +_srcver='2020.12.07-0' +pkgrel='2' +pkgdesc='English dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +# It contains custom licenses, similar a "Expat" and "Modified-BSD". +# The custom BSD license is not "Original-BSD" license, +# this has 4 clauses, but it does not have the +# “obnoxious BSD advertising clause”. +# The "Copyright" license file is written this line: +# (clause 4 removed with permission from Geoff Kuenning) +license=('custom:Aspell-English-Dictionary') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('9ed4e64891242e5e5e7d6ac82a0d1fda3bdc5116bd9d926e787b8f381080b357915f0c9b39cae04c1da0f2ec6e47ffe30a584f7f3bf7d455a46e8518a7858547' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-eo/PKGBUILD b/aspell-i18n-dict-eo/PKGBUILD new file mode 100644 index 0000000..a14304b --- /dev/null +++ b/aspell-i18n-dict-eo/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='eo' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='2.1.20000225.a.2' +_srcver='2.1.20000225a-2' +pkgrel='2' +pkgdesc='Esperanto dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('172ff88745e36abccf47ed8526868e3c2fd1f41c6da15893e723ef70bb29fc0e4b4e614f1eae8b3db8206f971f9a9cd9ec627fce2dae611804a276118367dfda' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-es/PKGBUILD b/aspell-i18n-dict-es/PKGBUILD new file mode 100644 index 0000000..93172b8 --- /dev/null +++ b/aspell-i18n-dict-es/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='es' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.11.2' +_srcver='1.11-2' +pkgrel='2' +pkgdesc='Castilian/Spanish dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('5d0159f24d6bff43db682a4beb25e82dd362c205acf7c9e0d728808c0e54a8a566befe26316f384099c72e6c429713f8ad7d2dc66a8f04a15e1d5a9cfe2290d8' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-et/PKGBUILD b/aspell-i18n-dict-et/PKGBUILD new file mode 100644 index 0000000..3095415 --- /dev/null +++ b/aspell-i18n-dict-et/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='et' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.1.21.1' +_srcver='0.1.21-1' +pkgrel='2' +pkgdesc='Estonian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('b3ed1249dbbb3caf12047407d85a3397f5e9561a59d71e33d6f29f18b9a83baa3f3c8d5a02a22cf0861212ff7b3ea1d33e38a943352e70be3703e0c42ff739ae' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-fa/PKGBUILD b/aspell-i18n-dict-fa/PKGBUILD new file mode 100644 index 0000000..732e0ae --- /dev/null +++ b/aspell-i18n-dict-fa/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='fa' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.11.0' +_srcver='0.11-0' +pkgrel='2' +pkgdesc='Persian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('1ed97d3bf8397fe9b3c9215ca3ca6630a06ae5fa1c47b2bbdf9821fbe069b9c097d1e145a6303202cec85047f9cd50bef2bde3adbca0caeb05625932c5f3bfe4' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-fi/PKGBUILD b/aspell-i18n-dict-fi/PKGBUILD new file mode 100644 index 0000000..60fbb34 --- /dev/null +++ b/aspell-i18n-dict-fi/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='fi' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.7.0' +_srcver='0.7-0' +pkgrel='2' +pkgdesc='Finnish dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('d1f27bc8e36033cba6ddaa978f2facfe8d134ab70124ec80d5397dba2b533b512755312feaf2afa838f68e4449479953a8b951264fbbfc28cdfd9457f67f67f7' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-fo/PKGBUILD b/aspell-i18n-dict-fo/PKGBUILD new file mode 100644 index 0000000..4533377 --- /dev/null +++ b/aspell-i18n-dict-fo/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='fo' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.2.16.1' +_srcver='0.2.16-1' +pkgrel='2' +pkgdesc='Faroese dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('7e99f105cff0e682e2761ba1f91646a3ce657858be819cc598775303d6c08f2c5bd524f72bc0c0b52383aeaf591af56e910e19796732be627d8ab11ad6149126' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-fr/PKGBUILD b/aspell-i18n-dict-fr/PKGBUILD new file mode 100644 index 0000000..3d528c1 --- /dev/null +++ b/aspell-i18n-dict-fr/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='fr' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.3' +_srcver='0.50-3' +pkgrel='2' +pkgdesc='French dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2") +sha512sums=('bb5d1faada9283521096a19a8f5abada2a19cc02717f6dde57846ef46a4df253113b10a2bb72d2b0e32e4a3ab24b541a5acd9f4595b908d2f6cd2fc448d8bc3b') +validpgpkeys=() # The signature file is not found. +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-fy/PKGBUILD b/aspell-i18n-dict-fy/PKGBUILD new file mode 100644 index 0000000..c91b6c8 --- /dev/null +++ b/aspell-i18n-dict-fy/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='fy' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.12.0' +_srcver='0.12-0' +pkgrel='2' +pkgdesc='Frisian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('f63b5436c78a5c0ebec3be1d3c24dced09a264c68e8ad39716e0e9e6bd984aca627bdc875f88b521f87b7f4d147edfce3fc0f4dc4b22fc8ef8d1aa5090fb9bda' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ga/PKGBUILD b/aspell-i18n-dict-ga/PKGBUILD new file mode 100644 index 0000000..0843f8f --- /dev/null +++ b/aspell-i18n-dict-ga/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ga' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='4.5.0' +_srcver='4.5-0' +pkgrel='2' +pkgdesc='Irish dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('e68003e08d75e172e6223c7011795f40a386776559c2f05e049de196f0d5dcbe570a5ec704e6543b519eba5c847054d30b19e462c7ee228eddac4d72ccd82db0' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-gd/PKGBUILD b/aspell-i18n-dict-gd/PKGBUILD new file mode 100644 index 0000000..6dbed19 --- /dev/null +++ b/aspell-i18n-dict-gd/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='gd' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.1.1.1' +_srcver='0.1.1-1' +pkgrel='2' +pkgdesc='Scottish Gaelic dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('d388bf3476f440c7773a69a0758b8e9cdddf01b64579f6d92fde38e7363c5c3b321a76c7a4e4587b0810159a35eec8d33d1cd2de49068d73f9e0e4dfa60fbc5c' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-gl/PKGBUILD b/aspell-i18n-dict-gl/PKGBUILD new file mode 100644 index 0000000..7152d66 --- /dev/null +++ b/aspell-i18n-dict-gl/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='gl' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.5.a.2' +_srcver='0.5a-2' +pkgrel='2' +pkgdesc='Galician dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('9c8aae22d23e1cce9c5c94844c35ec3eaa5b76e5049712b714993e7c628a0b8ee250de2ad1b646a6ecffe32ebc0e4f0009a4db041b6f8bde5d021cf71c5cd714' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-grc/PKGBUILD b/aspell-i18n-dict-grc/PKGBUILD new file mode 100644 index 0000000..4be3e40 --- /dev/null +++ b/aspell-i18n-dict-grc/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='grc' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.02.0' +_srcver='0.02-0' +pkgrel='2' +pkgdesc='Ancient Greek dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-3') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('17999e20621efc67ab42d83b0e149d19b18bcfd20966da35d217a3e5682c0728287bec4bce28af34f4e343943a1dac49f85077693ca30bd1ff7cbaaeda453ddd' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-gu/PKGBUILD b/aspell-i18n-dict-gu/PKGBUILD new file mode 100644 index 0000000..c72ed27 --- /dev/null +++ b/aspell-i18n-dict-gu/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='gu' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.03.0' +_srcver='0.03-0' +pkgrel='2' +pkgdesc='Gujarati dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('0cc252bd1112b8f06cb4ea9000b00d036dc405d8fbb9c380beff949ea138903b5807afa8f1419f4d8f57329a7bb1a4b7f4bd733170e5f09ac7786ac39beb87c6' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-gv/PKGBUILD b/aspell-i18n-dict-gv/PKGBUILD new file mode 100644 index 0000000..82470ea --- /dev/null +++ b/aspell-i18n-dict-gv/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='gv' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Manx Gaelic dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('6ec0893bb853c9600b49958802572edfed2127b749b2e4ee5ce051863526fefbae367cf2686ccae2f3c27fa168a8c3a8611eae3561853553594fb097fd78e37d' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-he/PKGBUILD b/aspell-i18n-dict-he/PKGBUILD new file mode 100644 index 0000000..c93d5cf --- /dev/null +++ b/aspell-i18n-dict-he/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='he' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.0.0' +_srcver='1.0-0' +pkgrel='2' +pkgdesc='Hebrew dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('4db335c1566432ac8e18bace1f1ab892e47765b9dfb342f981b52637ee6768f592b7d9793c229e7f67f7f4770e6ef4abb9b2dd66da0feef9cc42bfd316adad88' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-hi/PKGBUILD b/aspell-i18n-dict-hi/PKGBUILD new file mode 100644 index 0000000..2cfdc5c --- /dev/null +++ b/aspell-i18n-dict-hi/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='hi' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.02.0' +_srcver='0.02-0' +pkgrel='2' +pkgdesc='Hindi dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('298743e1e5988e26081d89ee6cdea3b2f3185ad81b3449b5fa3f644a2beaf488320f9468fbeeb7e6c7bcb3ae4b7116bd02f64c4e6f4c60f80c1a7c3b84946a93' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-hil/PKGBUILD b/aspell-i18n-dict-hil/PKGBUILD new file mode 100644 index 0000000..a21656b --- /dev/null +++ b/aspell-i18n-dict-hil/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='hil' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.11.0' +_srcver='0.11-0' +pkgrel='2' +pkgdesc='Hiligaynon dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('274c353f48da1a769a454cff0fa54d0e5cfd84a2da7ed979693335aa8e45c5c562b0f92cc5bdeb77a5ff54d0f79f747e792ff4e3f8a0427bbd131879659af432' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-hr/PKGBUILD b/aspell-i18n-dict-hr/PKGBUILD new file mode 100644 index 0000000..bb2e495 --- /dev/null +++ b/aspell-i18n-dict-hr/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='hr' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.51.0' +_srcver='0.51-0' +pkgrel='2' +pkgdesc='Croatian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('d6d891f3e55252fdbc5e0534c623cc42311c25cd1219351ce8a8160c3c3c49a6f219706e02f2c1c27174ef77c64e17f8cc25844befb17a43802b0a09ab42b1ad' + 'SKIP') +validpgpkeys=(# Denis Lackovic + '6DBCD62A42564F2F6D2B3EA5E628E9881811E418') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-hsb/PKGBUILD b/aspell-i18n-dict-hsb/PKGBUILD new file mode 100644 index 0000000..d9fa2e5 --- /dev/null +++ b/aspell-i18n-dict-hsb/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='hsb' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.02.0' +_srcver='0.02-0' +pkgrel='2' +pkgdesc='Upper Sorbian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('b8e49bf6d85e149365378a33b56ab61767c34ddfd4545eedeedad012b2b396dff54bb3dcba56fb4d3c0a92a0c3e13fddf0548591568295709d91f18c45ca1274' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-hu/PKGBUILD b/aspell-i18n-dict-hu/PKGBUILD new file mode 100644 index 0000000..04a151b --- /dev/null +++ b/aspell-i18n-dict-hu/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='hu' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.99.4.2.0' +_srcver='0.99.4.2-0' +pkgrel='2' +pkgdesc='Hungarian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('95922401f2a8aeac61b117c464b4b83b8101fbe1e0ee758b3284a67c188348db55d900c2898eaa8639ee2db99c3b27e85f9677fc6a4d54caae57dd72101cb320' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-hus/PKGBUILD b/aspell-i18n-dict-hus/PKGBUILD new file mode 100644 index 0000000..4da4a67 --- /dev/null +++ b/aspell-i18n-dict-hus/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='hus' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.03.1' +_srcver='0.03-1' +pkgrel='2' +pkgdesc='Huastec dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-3') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('2d1f8458f04bda64068ddd3c5017ed129c2b7549e2474acdcc39f76283dae1a0fe557ab67526fa31ce300f615bd5d2ded4aa0414f3a5b6ee8e59389c8ac20c70' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-hy/PKGBUILD b/aspell-i18n-dict-hy/PKGBUILD new file mode 100644 index 0000000..6d45e00 --- /dev/null +++ b/aspell-i18n-dict-hy/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='hy' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.10.0.0' +_srcver='0.10.0-0' +pkgrel='2' +pkgdesc='Armenian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('b2157c1d04e4d4726851fe4cda91fcc3cf0dba8d5cfaaea74deed77d9c5f94473e13784526f884ba483789a098dd3efee936c456606913a731a165ec3eb145a3' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ia/PKGBUILD b/aspell-i18n-dict-ia/PKGBUILD new file mode 100644 index 0000000..7e3d1d3 --- /dev/null +++ b/aspell-i18n-dict-ia/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ia' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.1' +_srcver='0.50-1' +pkgrel='2' +pkgdesc='Interlingua dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('5cdd7b91393043d7b537166c1df100aa76e911cf1c389b34b916839e907abc3cdbdc368f2876a5ecfbd625414b67858950e9d79af184560b9ddd667030dc608d' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-id/PKGBUILD b/aspell-i18n-dict-id/PKGBUILD new file mode 100644 index 0000000..6d1635d --- /dev/null +++ b/aspell-i18n-dict-id/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='id' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.2.0' +_srcver='1.2-0' +pkgrel='2' +pkgdesc='Indonesian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('bc33c5d6c68027304b0dc299454f8dd221e0138b079bcc423e287fda5e9204b0d6dc14a5a0617b4d018259e011c979453ee13b9050be5516d2379e86ac9cb86a' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-is/PKGBUILD b/aspell-i18n-dict-is/PKGBUILD new file mode 100644 index 0000000..2439566 --- /dev/null +++ b/aspell-i18n-dict-is/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='is' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.51.1.0' +_srcver='0.51.1-0' +pkgrel='2' +pkgdesc='Icelandic dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2") +# "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('b96aeb407c1de700a20ca18bbd9e1bc1a4c086379ef7fbd0467178d11b9ed70e547a81a4659619e7385f89926638cb2a5e807cc701b444a7bf0d246905795bf2') +# 'SKIP') +# validpgpkeys=('7E0E55DDA244035D') +# This key is ignored, because PGP-2 is deprecated in GnuPG v2. +validpgpkeys=() +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-it/PKGBUILD b/aspell-i18n-dict-it/PKGBUILD new file mode 100644 index 0000000..368b681 --- /dev/null +++ b/aspell-i18n-dict-it/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='it' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='2.2.20050523.0' +_srcver='2.2_20050523-0' +pkgrel='2' +pkgdesc='Italian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('2a2ccdbb8bb52e8e08525a40f985c1a2987c00d5e9fd39f57b8dc8689f3503f63751efe9ae4bec45fc5efea64666cd64abbda3e437ad0819f15b5a96987cda5a' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright' 'doc/license.txt'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-kn/PKGBUILD b/aspell-i18n-dict-kn/PKGBUILD new file mode 100644 index 0000000..b77aafc --- /dev/null +++ b/aspell-i18n-dict-kn/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='kn' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.1' +_srcver='0.01-1' +pkgrel='2' +pkgdesc='Kannada dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-3') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('892f93c0ed33f4aedb240d8c673d7888318760ccb2ca0cfb8377a2770f757c5410583a7c18314f3fb7cd58704a531e8931bc8be44d9de80b1421d2238e4229c3' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + # The "Copyright" file was not added, + # due "README" and "info" files says that + # this package is licensed under "GPL-3". + # And "Copyright" file says that + # this package is licensed under "GPL-2". + for i in 'COPYING'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ku/PKGBUILD b/aspell-i18n-dict-ku/PKGBUILD new file mode 100644 index 0000000..16c4c2a --- /dev/null +++ b/aspell-i18n-dict-ku/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ku' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.20.1' +_srcver='0.20-1' +pkgrel='2' +pkgdesc='Kurdi dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('b1aadc13e4cc494bb7b8bdb1ef96215abb72dfe2ec398d4c383984a2540323117d18a940c675ed0266cbbdf14958525975083a9fe35e93b7885c8f0216362d84' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ky/PKGBUILD b/aspell-i18n-dict-ky/PKGBUILD new file mode 100644 index 0000000..90fdbd3 --- /dev/null +++ b/aspell-i18n-dict-ky/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ky' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.0' +_srcver='0.01-0' +pkgrel='2' +pkgdesc='Kirghiz dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('94389905505ffc0c469dd5f4ea31e2e76fed695e8cb7b903e248a57a8677e45311e525a07c43da0be87bfdc7825b1af4ae8dd1993d35948dd1ace4b1af9fa307' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-la/PKGBUILD b/aspell-i18n-dict-la/PKGBUILD new file mode 100644 index 0000000..dd7424c --- /dev/null +++ b/aspell-i18n-dict-la/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='la' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='20020503.0' +_srcver='20020503-0' +pkgrel='2' +pkgdesc='Latin dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('b167541050546edfdb6148f06952eb07f67c8a5115d40ea777d566b722d4476147e986de06ebc8ffdfdadf1f201e3c1b5f000527ca489da96e2b3f764e487e5f' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-lt/PKGBUILD b/aspell-i18n-dict-lt/PKGBUILD new file mode 100644 index 0000000..177827a --- /dev/null +++ b/aspell-i18n-dict-lt/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='lt' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.2.1.0' +_srcver='1.2.1-0' +pkgrel='2' +pkgdesc='Lithuanian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('Modified-BSD') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('d0dcea087a926f7defbab0180d9c04c93a53da8843fe374f7f59284362453ee6b198568066053ad591df4c194d7c3b0ac59331611698b78e2ded558aa5e7775b' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-lv/PKGBUILD b/aspell-i18n-dict-lv/PKGBUILD new file mode 100644 index 0000000..0a69cd8 --- /dev/null +++ b/aspell-i18n-dict-lv/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='lv' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.5.5.1' +_srcver='0.5.5-1' +pkgrel='2' +pkgdesc='Latvian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('94a9c6da3fd29f17fbe5d02cd4764bf24379abef526725bb34c0726f7ff385fcb876df24b741bc66518295c3bb75c800aa6010130454c6dc1d6372d12d2eb98e' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-mg/PKGBUILD b/aspell-i18n-dict-mg/PKGBUILD new file mode 100644 index 0000000..e6a9273 --- /dev/null +++ b/aspell-i18n-dict-mg/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='mg' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.03.0' +_srcver='0.03-0' +pkgrel='2' +pkgdesc='Malagasy dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('a9c0861b925b40bf9bba5e1d02f3e225a516f929a2e72c6760ec5bedbc513e18e8bda0205e83e17c09b6a37256877e54576c8085e6000f67783147d4cd9ec6df' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-mi/PKGBUILD b/aspell-i18n-dict-mi/PKGBUILD new file mode 100644 index 0000000..e808b3b --- /dev/null +++ b/aspell-i18n-dict-mi/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='mi' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Maori dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('cba0a646612f6cd24d1e1d91326dcf1c7a6ec01c04ad0661a95fcd745b4d1a3bb50aef84c382d3a6c9108d4e9589ee7661f4988930c7198950396eeb029062a0' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-mk/PKGBUILD b/aspell-i18n-dict-mk/PKGBUILD new file mode 100644 index 0000000..123061e --- /dev/null +++ b/aspell-i18n-dict-mk/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='mk' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Macedonian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('6bcd57338ce76b7daf22a4be28a2f583c6c1d73ff2d8d5db2e3d5122d89c41617d44a40019dfe647c8e1e07509bee20be6ba136e872710bd77871adbac29e947' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ml/PKGBUILD b/aspell-i18n-dict-ml/PKGBUILD new file mode 100644 index 0000000..ded0d40 --- /dev/null +++ b/aspell-i18n-dict-ml/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ml' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.03.1' +_srcver='0.03-1' +pkgrel='2' +pkgdesc='Malayalam dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-3') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('78c3bc296a70a3b205427bcffe29b69ae6f673ffd22fd8a1ef5550ae271ed1f7704fff15c4948dcee2d7722c5d4b279766ef74d0661969b13bbca4d3a53971da' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-mn/PKGBUILD b/aspell-i18n-dict-mn/PKGBUILD new file mode 100644 index 0000000..3dfdd24 --- /dev/null +++ b/aspell-i18n-dict-mn/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='mn' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.06.2' +_srcver='0.06-2' +pkgrel='2' +pkgdesc='Mongolian (Cyrillic) dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('c0cf603169eaf8b4b858fd7573374d1ec47b9794e2514cb241b8fc3b053bce715dad6a15bd73eeef443f0d6a4308ffb384acae825d33315ee983a69ceacf9201' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-mr/PKGBUILD b/aspell-i18n-dict-mr/PKGBUILD new file mode 100644 index 0000000..32604a9 --- /dev/null +++ b/aspell-i18n-dict-mr/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='mr' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.10.0' +_srcver='0.10-0' +pkgrel='2' +pkgdesc='Marathi dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('4137a9d6f3dc67db81479a2df628c33c3989214a629f48fc9bb6421e4ce723bdf559eb2f0981c2172315ec140ccd160a10b9556a6618f2fd3383dec184352732' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ms/PKGBUILD b/aspell-i18n-dict-ms/PKGBUILD new file mode 100644 index 0000000..a1ab0ae --- /dev/null +++ b/aspell-i18n-dict-ms/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ms' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Malay dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('FDL-1.2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('270a6ad18d9b317588e781eab84b59c83450383d703fab815856b3afa58a19ffa0eec3c7cbc418993302703d586cb92678878aea51fff753733f7583d8c2b0e9' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-mt/PKGBUILD b/aspell-i18n-dict-mt/PKGBUILD new file mode 100644 index 0000000..cecb611 --- /dev/null +++ b/aspell-i18n-dict-mt/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='mt' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Maltese dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('aadcc59b0dbbfdf4d715bfe6735bfa2a91e6fae382634a25c0cdf8367710050b2daeac1db18df3a71184720ff9339a852983c8a266f8c97e0ffba1e8be50eaa1' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-nb/PKGBUILD b/aspell-i18n-dict-nb/PKGBUILD new file mode 100644 index 0000000..ddc219b --- /dev/null +++ b/aspell-i18n-dict-nb/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='nb' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.1.0' +_srcver='0.50.1-0' +pkgrel='2' +pkgdesc='Norwegian Bokmal dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('e30dcf7e757ab1ceb5de349927f9cfa4d9de4015bd9cc9449739fd2f17f6f033f698e71da0270b4e1ebd76be2195c42422630266ad9cadd2173184706d651c13' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-nds/PKGBUILD b/aspell-i18n-dict-nds/PKGBUILD new file mode 100644 index 0000000..c799454 --- /dev/null +++ b/aspell-i18n-dict-nds/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='nds' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.0' +_srcver='0.01-0' +pkgrel='2' +pkgdesc='Low Saxon dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('88ef6f6773e8699a5200ff8ae3ef9935fee21958fa35868bc10d37c22b55ea721ad9c59ab4843fdc6fedbf5a9ed10c7ea144548713742b8094b99c3c46a552a5' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '22A48912622D7BF4C6D15E5B19EA26E56FAB4DD4') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + # The "Copyright" file was not added, + # due "README" and "info" files says that + # this package is licensed under "LGPL-2.1". + # And "Copyright" file says that + # this package is licensed under "GPL-2". + for i in 'COPYING'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-nl/PKGBUILD b/aspell-i18n-dict-nl/PKGBUILD new file mode 100644 index 0000000..0d68c79 --- /dev/null +++ b/aspell-i18n-dict-nl/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='nl' +_srclang='dutch' +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='2.20.19.2' +_srcver="2.20.19-2" +pkgrel='2' +pkgdesc='Dutch dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://packages.debian.org/source/bullseye/dutch' +license=('Modified-BSD') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +makedepends=('gzip') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("http://deb.debian.org/debian/pool/main/${_srclang::1}/${_srclang}") +source=("${_source[0]}/${_srclang}_${_srcver::7}.orig.tar.gz" + "${_source[0]}/${_srclang}_${_srcver}.diff.gz") +sha512sums=('a8d4ddd77a3ce44ae5b1abef8f7ffe6df2ddc3e0e21f0958c1f36496552db5ca63a303a83d294586bbb7cbc73e6a9bce8808ea5110c18b8b17d98e396aff980e' + '106edc571737bab8727121c4aa428f508460679ceacce90b9e2c19d02551445453b96a8f5473bf828f5e897954dc309ace068b567ab806421775c54c4fefe22e') +validpgpkeys=() # The signature file is not found. +unset _pkglang _srcsv _source + +prepare() { + cd "${srcdir}/${_srclang}-${_srcver::7}" + patch -p '1' -i "${srcdir}/${_srclang}_${_srcver}.diff" +} + +package() { + cd "${srcdir}/${_srclang}-${_srcver::7}" + + for i in 'dutch.alias' 'dutch.multi' 'flemish.multi' 'nederlands.multi' \ + 'nl_affix.dat' 'nl.dat' 'nl.multi' 'vlaams.multi'; do + install -Dm '644' "${_pkgname}/${i}" -t "${pkgdir}/usr/lib/${_pkgname}-0.60" + done + unset i + + touch "${pkgdir}/usr/lib/${_pkgname}-0.60/nl.rws" + + grep -av "[0-9 \.'\+]" 'wordlist/wordlist.txt' > "${_pkgname}/nl.wl" + prezip "${_pkgname}/nl.wl" + gzip -9nf "${_pkgname}/nl.cwl" + # word-list-compress 'd' < "${_pkgname}/nl.cwl" | \ + # aspell --lang='nl' 'create' 'master' "${_pkgname}/nl.rws" + + for i in 'nl.contents' 'nl.cwl.gz'; do + install -Dm '644' "${_pkgname}/${i}" -t "${pkgdir}/usr/share/${_pkgname}" + done + unset i + + for i in 'debian/copyright' 'wordlist/LICENSE.txt'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _pkgname _srclang _srcname _srcver +} diff --git a/aspell-i18n-dict-nn/PKGBUILD b/aspell-i18n-dict-nn/PKGBUILD new file mode 100644 index 0000000..5f1b2bc --- /dev/null +++ b/aspell-i18n-dict-nn/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='nn' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.1.1' +_srcver='0.50.1-1' +pkgrel='2' +pkgdesc='Norwegian Nynorsk dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('a4db6fe937a62758f51d713e246f70ea6e0b2726c8ddb23af084925394a2d8168442fccbd74378f4773db121f0d506d848c01573138e974efc79f295f3ebe551' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ny/PKGBUILD b/aspell-i18n-dict-ny/PKGBUILD new file mode 100644 index 0000000..fc87e9c --- /dev/null +++ b/aspell-i18n-dict-ny/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ny' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.0' +_srcver='0.01-0' +pkgrel='2' +pkgdesc='Chichewa dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('52f4526d605a2f0577217af1dc8e44da20484fe7f725ceee1f8fdf9ba0fc1457910d55567ea9287465cbf37955af9a11b2caba084cece59aec29755cb147cb05' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-or/PKGBUILD b/aspell-i18n-dict-or/PKGBUILD new file mode 100644 index 0000000..e39fb1e --- /dev/null +++ b/aspell-i18n-dict-or/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='or' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.03.1' +_srcver='0.03-1' +pkgrel='2' +pkgdesc='Oriya dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('4f5c13e37054266a782cc9d9aa6a03de77ca383907ce05f23ab5812581b815276f4d79a2f8626226f30a59f8ab9ecf0f0186835f7f30881e4a358f99a75b708a' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-pa/PKGBUILD b/aspell-i18n-dict-pa/PKGBUILD new file mode 100644 index 0000000..e00ac07 --- /dev/null +++ b/aspell-i18n-dict-pa/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='pa' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.1' +_srcver='0.01-1' +pkgrel='2' +pkgdesc='Punjabi dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('6a0d2d7f1b1a935b6ac4b373963e525083d16c26953cce5d7a29d391aaed36f5430d27ea69efe59f081230822830dc4d4143bc155049bb5384580ffd66b5ee61' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-pl/PKGBUILD b/aspell-i18n-dict-pl/PKGBUILD new file mode 100644 index 0000000..fe3588a --- /dev/null +++ b/aspell-i18n-dict-pl/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='pl' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +# The "0.50-2" and "6.0_20061121-0" package versions are undistributable, +# see: "_PKGBUILD" for "6.0_20061121-0" (the "0.50-2" does not contain license) +pkgver='0.51.0' +_srcver='0.51-0' +pkgrel='2' +pkgdesc='Polish dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('CC-BY-SA-1.0') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('494b93abb50dc40bb04c225b7294075132b1569bc013e9f1591b2c77c3ab085d7e1b149a9e6cc3f0672c020f637b0cf28c6e7de50429dba0a04b5f659262c292' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright' 'doc/'*; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-pt-br/PKGBUILD b/aspell-i18n-dict-pt-br/PKGBUILD new file mode 100644 index 0000000..98d9793 --- /dev/null +++ b/aspell-i18n-dict-pt-br/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='pt-br' +_srclang='pt_BR' +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='20131030.12.0' +_srcver='20131030-12-0' +pkgrel='2' +pkgdesc='Brazilian Portuguese dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('9cb54552d34239202e74ac1e2b7da112dfbecbe0df2da011828178db0b93f74dde9922d33ad18a7b37084e6d37cc7fd16419e30cc63aa46664b0b86fb0e6ee99' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-pt-pt/PKGBUILD b/aspell-i18n-dict-pt-pt/PKGBUILD new file mode 100644 index 0000000..8aaf1ee --- /dev/null +++ b/aspell-i18n-dict-pt-pt/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='pt-pt' +_srclang='pt_PT' +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='20190329.1.0' +_srcver='20190329-1-0' +pkgrel='2' +pkgdesc='European Portuguese dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('7c7edb79cd46bf4566814dbdef09f9b6d202f183abe5c25fda454e69c57d617948806657ed1da83039b508c1ccdb8a020d694b7119edfce63bae7defeafa1123' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-pt/PKGBUILD b/aspell-i18n-dict-pt/PKGBUILD new file mode 100644 index 0000000..c70e8a2 --- /dev/null +++ b/aspell-i18n-dict-pt/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='pt' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.2' +_srcver='0.50-2' +pkgrel='2' +pkgdesc='Portuguese dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${pkgbase}-${_pkglang}-br" "${pkgbase}-${_pkglang}-pt" + "${_pkgname}-${_pkglang}") +conflicts=("${pkgbase}-${_pkglang}-br" "${pkgbase}-${_pkglang}-pt" + "${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2") +sha512sums=('21f115eae4507ca6e8c726476ba40910886e2ed17161cddbe493b2fe1c55a30703f033f8062eb0b9543d85541aa15e9ecab508cb3bb7403881315ecdb0bc55cd') +validpgpkeys=() # The signature file is not found. +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-qu/PKGBUILD b/aspell-i18n-dict-qu/PKGBUILD new file mode 100644 index 0000000..845df13 --- /dev/null +++ b/aspell-i18n-dict-qu/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='qu' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.02.0' +_srcver='0.02-0' +pkgrel='2' +pkgdesc='Quechua dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('aac1caea88e9bd896ec5a9a2e7fa4a569626fa5e6f6bf1188614db10ca2b34196b589c496027b3bc562ef9435245e215b428a49e91a8d0eb215801ae8c9bb512' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ro/PKGBUILD b/aspell-i18n-dict-ro/PKGBUILD new file mode 100644 index 0000000..e4bcd2e --- /dev/null +++ b/aspell-i18n-dict-ro/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ro' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='3.3.2' +_srcver='3.3-2' +pkgrel='2' +pkgdesc='Romanian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('0027334b6201e24b038d78d5b01b8495a661dc41df44b099b6c27156d11f33c26db1dd7bc9dbf45263695820b20da3891da58a30584f5e285579dec199b5acd3' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ru/PKGBUILD b/aspell-i18n-dict-ru/PKGBUILD new file mode 100644 index 0000000..e6af5c6 --- /dev/null +++ b/aspell-i18n-dict-ru/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ru' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.99.f.7.1' +_srcver='0.99f7-1' +pkgrel='2' +pkgdesc='Russian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('custom:RUS-ISPELL') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('789fe15f5502b54008a41f2afb5635dcb7bb0a36e61b300ee48b2429c339793f5c4808d6063f13f1f8455ce251912433890e7d01ca59d8b0924ecd2987ceb430' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-rw/PKGBUILD b/aspell-i18n-dict-rw/PKGBUILD new file mode 100644 index 0000000..7b4aff3 --- /dev/null +++ b/aspell-i18n-dict-rw/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='rw' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Kinyarwanda dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('a987fe90b091c5f8d4c28713ad50ca917d2a8fd120df55bd413e3112913cb7e9e8fdc740994aa881bbfdd9ac38fa5ebe728c9e62e25a0e7cc8eac13c2380c56a' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-sc/PKGBUILD b/aspell-i18n-dict-sc/PKGBUILD new file mode 100644 index 0000000..77cb849 --- /dev/null +++ b/aspell-i18n-dict-sc/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='sc' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.0' +_srcver="${pkgver}" +pkgrel='2' +pkgdesc='Sardinian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('3cad49510894645b9bc97bbae877641e64af0440a2abcb6f96197da95390d4dd59d1374008c0ade9dc17772a32c367b9b03e6be65e7f190268365f25069d2a23' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-sk/PKGBUILD b/aspell-i18n-dict-sk/PKGBUILD new file mode 100644 index 0000000..bba73f9 --- /dev/null +++ b/aspell-i18n-dict-sk/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='sk' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='2.01.2' +_srcver='2.01-2' +pkgrel='2' +pkgdesc='Slovak dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('020de459d4ff9c6e0c88428d43c9feea346bf8fadb9fa1233e9e54471ee23f970524a9a47cc6a45d04d6857387c9d9d1ecc1af2062325298354ee6c2d9c314b4' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright' 'doc/AUTHORS' 'doc/LGPL' 'doc/MPL' 'doc/GPL'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-sl/PKGBUILD b/aspell-i18n-dict-sl/PKGBUILD new file mode 100644 index 0000000..f199783 --- /dev/null +++ b/aspell-i18n-dict-sl/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='sl' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Slovenian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('17b74bd3c6d7fbda0b4f6d14ee529f47f39c349642593312c160eb4e7eb6eb40f704e9c34e6fb33ef9e829b861e92a224196f55326fa4d02197d12912fd4b44f' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-sr/PKGBUILD b/aspell-i18n-dict-sr/PKGBUILD new file mode 100644 index 0000000..f5ec878 --- /dev/null +++ b/aspell-i18n-dict-sr/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='sr' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.02' +_srcver="${pkgver}" +pkgrel='2' +pkgdesc='Serbian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('3334d98779c9eff74ca85e5168e51375e38f831ff3f2b9164d0773cf220bd9ca0076d282086bed6258c643cfae70124d985931982db6c885b8d53fc35fb0c395' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-sv/PKGBUILD b/aspell-i18n-dict-sv/PKGBUILD new file mode 100644 index 0000000..cba187a --- /dev/null +++ b/aspell-i18n-dict-sv/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='sv' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.51.0' +_srcver='0.51-0' +pkgrel='2' +pkgdesc='Swedish dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('f995f3ae1a1380a5dbb171786c2cf3d46670c4bc012792a1d241ff0f3de61046766583e3704c57618eb0690aa0e915b64130114420358a3f46b5b59a37d45e5c' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-sw/PKGBUILD b/aspell-i18n-dict-sw/PKGBUILD new file mode 100644 index 0000000..aa47a00 --- /dev/null +++ b/aspell-i18n-dict-sw/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='sw' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Swahili dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('5d89a68c292b45a188f611a14bc355c955810f79c32c7784b2e3ba5a4307b48d572e5a7ca882a344b7635eabe6aa6c2f5d789e9506f3a3f4e69c93fd3675e423' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-ta/PKGBUILD b/aspell-i18n-dict-ta/PKGBUILD new file mode 100644 index 0000000..f77c4c6 --- /dev/null +++ b/aspell-i18n-dict-ta/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='ta' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='20040424.1' +_srcver='20040424-1' +pkgrel='2' +pkgdesc='Tamil dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('8809948f25bf197207c3cbd865bf4c7e73cee552fd1518533d48fcabdc79c95765df253d9ef6c7f904748f24898f04acdeb64800ce9856ced8ccab086ddb664e' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-te/PKGBUILD b/aspell-i18n-dict-te/PKGBUILD new file mode 100644 index 0000000..c74d439 --- /dev/null +++ b/aspell-i18n-dict-te/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. +# Based on aspell-en + +_pkgname='aspell' +_pkglang='te' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.2' +_srcver='0.01-2' +pkgrel='2' +pkgdesc='Telugu dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('09566d44de03e3e990f575d8e665bad9079f7bafec2474a6aa4a430a1ff71641dd4989d24bc5ecf3b19ca8c4f61b9365ea792b16f271c89bffaab159e8ed0129' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-tet/PKGBUILD b/aspell-i18n-dict-tet/PKGBUILD new file mode 100644 index 0000000..220e292 --- /dev/null +++ b/aspell-i18n-dict-tet/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='tet' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.1.1' +_srcver="${pkgver}" +pkgrel='2' +pkgdesc='Tetum dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('6dc691b40cedd054a677197219f97ae5afc21bcf4820bf452d23963ae04a716bf7e38d1cff0eb050e13fd24fd2e8f3b0d24f9b19e7de3868faeca8aa16881802' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-tk/PKGBUILD b/aspell-i18n-dict-tk/PKGBUILD new file mode 100644 index 0000000..53f9d6d --- /dev/null +++ b/aspell-i18n-dict-tk/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='tk' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.0' +_srcver='0.01-0' +pkgrel='2' +pkgdesc='Turkmen dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('0a4a0c3be9b9322187677d47f56c091f6c3ae2662b8d6831e9fa2e18720277f76c79e9e0c65ee37474459a19dc5a99519af8492645b241cdc076775afc4a700f' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-tl/PKGBUILD b/aspell-i18n-dict-tl/PKGBUILD new file mode 100644 index 0000000..633ee4a --- /dev/null +++ b/aspell-i18n-dict-tl/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='tl' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.02.1' +_srcver='0.02-1' +pkgrel='2' +pkgdesc='Tagalog dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('2bff0f0191104312b8674ef65ee77a8e80225bc9bb6afe651aeb94a03db8781e8545b5b09f0143f557092c868f0873c17c55055b8cdd66f18a648ba2c805a6f0' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-tn/PKGBUILD b/aspell-i18n-dict-tn/PKGBUILD new file mode 100644 index 0000000..a8fff5c --- /dev/null +++ b/aspell-i18n-dict-tn/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='tn' +_srclang="${_pkglang}" +_srcsv='5' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.0.1.0' +_srcver='1.0.1-0' +pkgrel='2' +pkgdesc='Setswana dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('ff3258c3eec392f45b34ba7754bbd6af7ffa0ac812fc1743985fec301755be81387a3e567b36ff145a7a3f9b906e991efde8b4fafc33be14f07a581f4af111dc' + 'SKIP') +validpgpkeys=(# Kevin Patrick Scannell + 'CBF5BA7EFDCB01D7C6AD6272E40807F046398FEA') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-tr/PKGBUILD b/aspell-i18n-dict-tr/PKGBUILD new file mode 100644 index 0000000..1ac2198 --- /dev/null +++ b/aspell-i18n-dict-tr/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='tr' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Turkish dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('0054eef2089a916695b7501676d9cedb1d14defdea76deb01656a6a644b4e646db46470040227814f750e0d69dcc72b1023967eb7924b42ddcefd3d604709059' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-uk/PKGBUILD b/aspell-i18n-dict-uk/PKGBUILD new file mode 100644 index 0000000..7951c01 --- /dev/null +++ b/aspell-i18n-dict-uk/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='uk' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='1.4.0.0' +_srcver='1.4.0-0' +pkgrel='2' +pkgdesc='Ukrainian dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('2e66465d17695dd3147241f13d611571f8a80a15886c69728d2f34019fb4834e56e4c0834d9e898927522b54d75f78a32dd3435b2c16eb86cf9cfa11070f0799' + 'SKIP') +validpgpkeys=(# Aspell Dictionary Upload + '78DEC3DB0AEA763951322BBF71C636695B147849') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-uz/PKGBUILD b/aspell-i18n-dict-uz/PKGBUILD new file mode 100644 index 0000000..b7d0317 --- /dev/null +++ b/aspell-i18n-dict-uz/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='uz' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.6.0' +_srcver='0.6-0' +pkgrel='2' +pkgdesc='Uzbek dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('0542a83c149ad761d8bb964be556bfb2387404fce21e0e38d3c0fa8efef2d1587db0fa80140cf7de72da7f08bbb807ff931a95bb63c2a84771a197f5841e545b' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-vi/PKGBUILD b/aspell-i18n-dict-vi/PKGBUILD new file mode 100644 index 0000000..5ee7343 --- /dev/null +++ b/aspell-i18n-dict-vi/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='vi' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.1.1' +_srcver='0.01.1-1' +pkgrel='2' +pkgdesc='Vietnamese dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('d6b0a85ea3edf3193327f6df1b9c24947663fe711f060f10122e2c60aea2717d70277fd516fa685d9886c725baeebfc72d3f33e240ee8d182be669da716bb5c5' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-wa/PKGBUILD b/aspell-i18n-dict-wa/PKGBUILD new file mode 100644 index 0000000..166877a --- /dev/null +++ b/aspell-i18n-dict-wa/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='wa' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Walloon dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('67e8fbb80a2622b921e28a37b978fc998713f7e281beccc921afd8e289ac76094f589e905da2e9386c585fcfae53179ca1e9b24a39c8a021cb3f2685461e3a8c' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-yi/PKGBUILD b/aspell-i18n-dict-yi/PKGBUILD new file mode 100644 index 0000000..5984409 --- /dev/null +++ b/aspell-i18n-dict-yi/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='yi' +_srclang="${_pkglang}" +_srcsv='6' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.01.1.1' +_srcver='0.01.1-1' +pkgrel='2' +pkgdesc='Yiddish dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('GPL-2') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('a8d96ba192e61193469596ce1bf6e808bbb03e3fa3a75e545bdee4b6cfa607b681d0a9631465d004ce6e0e25453af732391e76b134138acc7c28991a3664f346' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell-i18n-dict-zu/PKGBUILD b/aspell-i18n-dict-zu/PKGBUILD new file mode 100644 index 0000000..008d3ff --- /dev/null +++ b/aspell-i18n-dict-zu/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on aspell-en + +_pkgname='aspell' +_pkglang='zu' +_srclang="${_pkglang}" +_srcsv='' +pkgname="${_pkgname}-i18n-dict-${_pkglang}" +# Example: _srcname='aspell6-en' +_srcname="${_pkgname}${_srcsv}-${_srclang}" +pkgver='0.50.0' +_srcver='0.50-0' +pkgrel='2' +pkgdesc='Zulu dictionary for Aspell' +arch=('i686' 'x86_64') +url='https://ftp.gnu.org/gnu/aspell/dict/0index.html' +license=('LGPL-2.1') +groups=("${_pkgname}-i18n-dict" "${_pkgname}-dict" + "g${_pkgname}-i18n-dict" "g${_pkgname}-dict" + "gnu${_pkgname}-i18n-dict" "gnu${_pkgname}-dict" + "gnu-${_pkgname}-i18n-dict" "gnu-${_pkgname}-dict") +depends=('aspell') +provides=("${_pkgname}-dict-${_pkglang}" + "g${pkgname}" "g${_pkgname}-dict-${_pkglang}" + "gnu${pkgname}" "gnu${_pkgname}-dict-${_pkglang}" + "gnu-${pkgname}" "gnu-${_pkgname}-dict-${_pkglang}" + "${_pkgname}-${_pkglang}") +conflicts=("${_pkgname}-${_pkglang}") +replaces=("${_pkgname}-${_pkglang}") +_source=("https://ftp.gnu.org/gnu/${_pkgname}/dict/${_srclang}/") +source=("${_source[0]}/${_srcname}-${_srcver}.tar.bz2" + "${_source[0]}/${_srcname}-${_srcver}.tar.bz2.sig") +sha512sums=('c79679a41e8aa1b80532c9eea0cf49c3a4bcdaa00f3d0d9e9f6eb7f4037992e40eaad0af711e5d5c29935afe6d0a2fb1c7b49dfdb2add07526a64cb2efac6ea9' + 'SKIP') +validpgpkeys=(# Kevin Atkinson + '31A768B0808E4BA619B48F81B6D9D0CC38B327D7') +unset _pkgname _pkglang _srclang _srcsv _source + +build() { + cd "${srcdir}/${_srcname}-${_srcver}" + ./configure + make 'V=1' +} + +package() { + cd "${srcdir}/${_srcname}-${_srcver}" + make "DESTDIR=${pkgdir}" 'install' + + for i in 'COPYING' 'Copyright'; do + install -Dm '644' "${i}" -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i _srcname _srcver +} diff --git a/aspell/PKGBUILD b/aspell/PKGBUILD new file mode 100644 index 0000000..b7e0ec7 --- /dev/null +++ b/aspell/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=aspell +pkgver=0.60.8 +_debver=$pkgver +_debrel=4 +_pkgmajorver=0.60 +pkgrel=5 +pkgdesc="A spell checker designed to eventually replace Ispell" +arch=(i686 x86_64) +url='http://aspell.net/' +license=('LGPL-2.1') +depends=('gcc-libs' 'ncurses') +makedepends=('quilt') +provides=('gnu-aspell' 'gnuaspell' 'gaspell') +optdepends=('perl: to import old dictionaries') +source=("$pkgname-$pkgver.tar.gz::https://github.com/GNUAspell/aspell/archive/rel-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/a/aspell/aspell_$_debver-$_debrel.debian.tar.xz") +sha512sums=('b7ca2ed063f003581020d2043b1686915997261695bb0aef6e530431ea55781861ba19e16ce1fb74eb892203c9433c8652d105d380c0a6a24590f13fb1a401be' + '0e8145294df53c684c6b350c9b6963045dd2e9a02059c24a2f02073336a8e043e116d5b2376579cbc770bdb6517de1b1252a9fb3548e3e2e21df1cebf3338c0b') + +prepare() { + cd $pkgname-rel-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/07_filter.diff || true + rm -v debian/patches/09_debian-dictdir.diff || true + + quilt push -av + fi +} + +build() { + cd $pkgname-rel-$pkgver + PERL_USE_UNSAFE_INC=1 ./autogen + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd $pkgname-rel-$pkgver + make DESTDIR="$pkgdir" install + ln -s $pkgname-$_pkgmajorver "$pkgdir"/usr/lib/$pkgname + + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/assimp/PKGBUILD b/assimp/PKGBUILD new file mode 100644 index 0000000..394d760 --- /dev/null +++ b/assimp/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=assimp +pkgver=5.0.1 +_debver=5.0.1~ds0 +_debrel=2 +pkgrel=1 +pkgdesc='Library to import various well-known 3D model formats in an uniform manner' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('zlib' 'gcc-libs') +makedepends=('cmake' 'ninja' 'quilt') +url='https://assimp.org/' +source=("$pkgname-$pkgver.tar.gz::https://github.com/assimp/assimp/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/a/assimp/assimp_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('51b704ffea778638b9e228578650f62691c56ee1a90337f8bbbee37e807455466d818234be24852334e5806260e5690932c9bd8e00f055c5c26782e0636538f0' + '331d7b41d53a76adcc2cdda28b3c546b25f2f69e002b3ef46a50da1544377f307fbc4fe670e3f79fdaa09bcfdf0745e9b43b600b33b471a3b7387964f8894591') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/use-system-stb_image.patch || true + rm -v debian/patches/use-system-utf8cpp.patch || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + + cmake . \ + -Bbuild \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DASSIMP_BUILD_SAMPLES=OFF + ninja -C build +} + +package() { + cd ${pkgname}-${pkgver} + + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} + sed -i "s|includedir=.*|includedir=/usr/include/assimp|" "${pkgdir}"/usr/lib/pkgconfig/assimp.pc +} diff --git a/atk/PKGBUILD b/atk/PKGBUILD new file mode 100644 index 0000000..2af52f2 --- /dev/null +++ b/atk/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=atk +pkgver=2.36.0 +pkgrel=1 +pkgdesc="Interface definitions of accessibility infrastructure" +url="https://gitlab.gnome.org/GNOME/atk" +arch=(i686 x86_64) +license=(LGPL-2) +depends=(glib2) +makedepends=(gobject-introspection meson) +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz) +sha512sums=('d0f18204eaf96511e8448e3dfbc4b6953a7cf8b816151fb7caf5592cf578572b1cdb16836fe2157b11e3ad018ef171f1ca1bfdf255bb31bb455716d7519fd634') + +build() { + hyperbola-meson $pkgname-$pkgver build -D docs=false + ninja -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/atkmm/PKGBUILD b/atkmm/PKGBUILD new file mode 100644 index 0000000..25b470a --- /dev/null +++ b/atkmm/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=atkmm +pkgver=2.28.2 +pkgrel=4 +pkgdesc="C++ bindings for ATK" +url='https://www.gtkmm.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1' 'GPL-2') +depends=('atk' 'glibmm' 'libsigc++') +makedepends=('meson' 'mm-common' 'glibmm-docs') +options=(!emptydirs) +source=("https://ftp.gnome.org/pub/GNOME/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz") +sha512sums=('df20b89b603a6ae419db24b21acbd6a9d0e91c07e374b4b774f6a67581ce1581affb0d079a264f0d7f2e6d8b63210639dd7aa15e7e94fb5904d161e9a2aac286') + +build() { + hyperbola-meson $pkgname-$pkgver build -D maintainer-mode=true + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + + # licenses + install -Dm644 "$srcdir/$pkgname-$pkgver/"COPYING{,.tools} -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/aucatctl/PKGBUILD b/aucatctl/PKGBUILD new file mode 100644 index 0000000..c4dc012 --- /dev/null +++ b/aucatctl/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=aucatctl +pkgver=0.1 +pkgrel=2 +pkgdesc='Control aucat and/or sndiod volume through MIDI' +arch=(i686 x86_64) +url='https://sndio.org/' +license=(ISC) +depends=(libsndio) +source=("https://sndio.org/aucatctl-$pkgver.tar.gz") +sha512sums=('35ca3a3aec94fb0ed439925ac52d190ad0eebd4cfb124d5ad329d1d94c021c38b75bd4d4859c74756c861c0a82c5d22777ed0dccc950bc37c3156d6ca28a33df') + +build() { + cd aucatctl-$pkgver + + make LDADD="-lbsd -lsndio" +} + +package() { + cd aucatctl-$pkgver + + make DESTDIR="$pkgdir" PREFIX="/usr" MAN1_DIR="/usr/share/man/man1" install + + install -d "$pkgdir/usr/share/licenses/$pkgname" + sed -n '/Copyright/,/PERFORMANCE/p' aucatctl.c > "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/audacious-legacy/PKGBUILD b/audacious-legacy/PKGBUILD new file mode 100644 index 0000000..e4b9d3e --- /dev/null +++ b/audacious-legacy/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +_realpkgname=audacious +pkgname=$_realpkgname-legacy +pkgver=4.2 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Lightweight, advanced audio player focused on audio quality (legacy version)" +arch=('i686' 'x86_64') +url='https://audacious-media-player.org/' +license=('Simplified-BSD') +depends=('gtk2' 'qt-base' 'glib2' 'libsm' 'hicolor-icon-theme' 'desktop-file-utils') +makedepends=('quilt') +optdepends=('unzip: zipped skins support' + 'audacious-plugins-legacy: additional plugins') +source=("https://distfiles.audacious-media-player.org/$_realpkgname-$pkgver.tar.bz2" + "https://deb.debian.org/debian/pool/main/a/audacious/audacious_$_debver-$_debrel.debian.tar.xz") +sha512sums=('814bd865e87cf9bc39df07c9f9898eca1dd94d8b8299b2709f77046669ce12e9c31067d55084371f6797724e79872f7571b575cc766093ee2124b38b0409a853' + '2e8ed42d95dc4aa052826b2053e39c6be0ef913448fb1f9672ead88bb74c83ec6cce25c8d85d76db2b4da5d7a13e57602a0bcaaf04e0c80abe327a46f363b566') + +prepare() { + cd "$srcdir/$_realpkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$_realpkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --enable-dbus=no \ + --enable-gtk=yes \ + --enable-qt=yes \ + --with-buildstamp='Hyperbola' + make +} + +package() { + cd "$srcdir/$_realpkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/audacious-plugins-legacy/PKGBUILD b/audacious-plugins-legacy/PKGBUILD new file mode 100644 index 0000000..4a18c6e --- /dev/null +++ b/audacious-plugins-legacy/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +_realpkgname=audacious-plugins +pkgname=$_realpkgname-legacy +pkgver=4.2 +pkgrel=1 +pkgdesc="Plugins for Audacious (legacy version)" +arch=('i686' 'x86_64') +url='https://audacious-media-player.org/' +license=('Simplified-BSD') +depends=('alsa-lib' 'curl' 'faad2' 'ffmpeg' 'flac' 'fluidsynth' + 'jack' 'lame' 'libcdio-paranoia' 'libcue' 'libmms' 'libmodplug' + 'libmtp' 'libsamplerate' 'libvorbis' 'mpg123' 'neon' 'wavpack' 'libbs2b') +makedepends=("audacious-legacy>=$pkgver" 'glib2' 'python' 'gettext-tiny') +source=(https://distfiles.audacious-media-player.org/$_realpkgname-$pkgver.tar.bz2) +sha512sums=('632f1ac90c3a079bb92120e4bc6ef6b13f3f809f150809a64569fae49c908dafeb30e16a34d18bb081e099fe2a252a7ed8b76da129ffa0d51b16216f0b6d1282') + +build() { + cd "$srcdir/$_realpkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --enable-amidiplug \ + --enable-gtk \ + --enable-lirc=no \ + --enable-mpris2=no + make +} + +package() { + cd "$srcdir/$_realpkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/audacity-legacy/PKGBUILD b/audacity-legacy/PKGBUILD new file mode 100644 index 0000000..709c21a --- /dev/null +++ b/audacity-legacy/PKGBUILD @@ -0,0 +1,78 @@ +# Maintainer: Jesus E. + +pkgname=audacity-legacy +_realpkgname=audacity +pkgver=2.4.2 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="A free and libre program that lets you manipulate digital audio waveforms (legacy version)" +arch=('i686' 'x86_64') +license=('GPL-2' 'CC-BY-3.0') +provides=('audacity') +conflicts=('audacity') +depends=('expat' 'gcc-libs' 'gdk-pixbuf2' 'glibc' 'libmad' + 'libsoxr' 'portsmf' 'soundtouch' 'vamp-plugin-sdk' + 'twolame' 'wxgtk3') +makedepends=('alsa-lib' 'cmake' 'ffmpeg' 'flac' 'glib2' 'gtk' 'jack' 'lame' + 'libid3tag' 'libogg' 'libsndfile' 'libvorbis' 'lilv' 'lv2' 'portsmf' 'suil' + 'twolame' 'vamp-plugin-sdk' 'git-legacy' 'nasm' 'quilt') +optdepends=('ffmpeg: additional import/export capabilities') +source=("${_realpkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/a/audacity/audacity_${pkgver}~dfsg0.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/a/audacity/audacity_${_debver}~dfsg0-${_debrel}.debian.tar.xz" + "disable-update-check.patch") +sha512sums=('9f981ac844b86677454c4cbbb1ce1c837ebb56c306eba313c0d9b1add9325d1bd7cd0149a0f5f0f45926d6223d71d7f12f822570c8171a5324f6f05bde147e54' + '055e49ff2a4058ab5bb3e4d042e7d24af37ff780b6f8d801fa61ad34b47ee9459756b5184ee917fd8744903c26f2ad9b3dd68316f5c2ac1885197b87f53499a6' + '58a9067ff3bf4800fa9174f55d9a8faf2071b8df49c8d90b6f190f7b5bf5455d969c081b0ae7795845f277af324283e7affbaec96934c1014809a09c74ee8791') + +prepare() { + mv -v "${_realpkgname}-Audacity-${pkgver}" "${_realpkgname}-${pkgver}" + cd "${_realpkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # remove update-check from menus + patch -Np1 -i ${srcdir}/disable-update-check.patch +} + +build() { + export WX_CONFIG=wx-config-gtk3 + cmake \ + -S ${_realpkgname}-${pkgver} \ + -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -Daudacity_use_sndfile=system \ + -Daudacity_use_ffmpeg=loaded \ + -Daudacity_use_expat=system \ + -Daudacity_use_lame=local \ + -Daudacity_use_portaudio=local \ + -Daudacity_use_midi=local \ + -Daudacity_use_flac=system \ + -Daudacity_use_id3tag=system \ + -Daudacity_use_sbsms=off \ + -Daudacity_use_soundtouch=system \ + -Daudacity_use_twolame=system \ + -Daudacity_use_vorbis=system \ + -Daudacity_use_lv2=local \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="${pkgdir}" -C build install + + install -Dm644 ${srcdir}/build/bin/Release/plug-ins/*.ny -t "${pkgdir}/usr/share/${_realpkgname}/plug-ins" + install -Dm644 ${srcdir}/build/bin/Release/nyquist/*.lsp -t "${pkgdir}/usr/share/${_realpkgname}/nyquist" + + install -Dm644 "${srcdir}/${_realpkgname}-${pkgver}/LICENSE.txt" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/audacity-legacy/disable-update-check.patch b/audacity-legacy/disable-update-check.patch new file mode 100644 index 0000000..4b83a7b --- /dev/null +++ b/audacity-legacy/disable-update-check.patch @@ -0,0 +1,23 @@ +--- a/src/menus/HelpMenus.cpp 2020-06-19 17:16:47.000000000 +0200 ++++ b/src/menus/HelpMenus.cpp 2024-02-26 23:02:07.360107582 +0100 +@@ -432,7 +432,6 @@ + + void OnCheckForUpdates(const CommandContext &WXUNUSED(context)) + { +- ::OpenInDefaultBrowser( VerCheckUrl()); + } + + void OnAbout(const CommandContext &context) +@@ -557,9 +556,9 @@ + + // DA: Does not fully support update checking. + #ifndef EXPERIMENTAL_DA +- Command( wxT("Updates"), XXO("&Check for Updates..."), +- FN(OnCheckForUpdates), +- AlwaysEnabledFlag ), ++ // Command( wxT("Updates"), XXO("&Check for Updates..."), ++ // FN(OnCheckForUpdates), ++ // AlwaysEnabledFlag ), + #endif + Command( wxT("About"), XXO("&About Audacity..."), FN(OnAbout), + AlwaysEnabledFlag ) diff --git a/audiofile/PKGBUILD b/audiofile/PKGBUILD new file mode 100644 index 0000000..b6439e5 --- /dev/null +++ b/audiofile/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=audiofile +pkgver=0.3.6 +_debver=0.3.6 +_debrel=5 +pkgrel=1 +pkgdesc="Silicon Graphics Audio File Library" +arch=('i686' 'x86_64') +url="https://audiofile.68k.org/" +license=('LGPL-2.1') +depends=('gcc-libs' 'alsa-lib' 'flac') +makedepends=('quilt' 'asciidoc') +source=("https://audiofile.68k.org/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/a/audiofile/audiofile_$_debver-$_debrel.debian.tar.xz") +sha512sums=('f9a1182d93e405c21eba79c5cc40962347bff13f1b3b732d9a396e3d1675297515188bd6eb43033aaa00e9bde74ff4628c1614462456529cabba464f03c1d5fa' + 'de7abf10f8c61dc31b52f61abc0fbb0f95699a2122c4652e43d0c9ad13793e2cdcfd883d85d6d1f911648ceb73f4423b759a8d079e22a717e28b27cc45d1d817') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -vDm 644 {AUTHORS,ChangeLog,NEWS,NOTES,README,TODO} -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/autoconf-archive/PKGBUILD b/autoconf-archive/PKGBUILD new file mode 100644 index 0000000..b57be95 --- /dev/null +++ b/autoconf-archive/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=autoconf-archive +pkgver=2022.09.03 +_debver=20220903 +_debrel=3 +pkgrel=1 +epoch=1 +pkgdesc="A collection of free, libre and re-usable Autoconf macros" +arch=('any') +url='https://www.gnu.org/software/autoconf-archive/' +license=('GPL-3') +depends=('autoconf') +makedepends=('quilt') +optdepends=('automake: macros for use with it') +source=("https://ftpmirror.gnu.org/${pkgname}/${pkgname}-${pkgver}.tar.xz"{,.sig} + "https://deb.debian.org/debian/pool/main/a/autoconf-archive/autoconf-archive_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('157b5b6a979d5ec5bfab6ddf34422da620fec1e95f4c901821abbb7361544af77747b4a449029b84750d75679d6130a591e98da8772de2c121ecdea163f0340b' + 'SKIP' + '4069d2d8f008e0df29c313224764b4fa4d6c4c893c6b031f0356607c9a7d6d61e4f312b2f823ef014d96254cc57a2f1a1b629a43157e7c6dc714d8f87fce4c84') +validpgpkeys=('1A4F63A13A4649B632F65EE141BC28FE99089D72') # Peter Simons + +prepare() { + cd "${srcdir}"/${pkgname}-${pkgver} + if [[ ${pkgver//./} = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}"/${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/autoconf-legacy/PKGBUILD b/autoconf-legacy/PKGBUILD new file mode 100644 index 0000000..797eee8 --- /dev/null +++ b/autoconf-legacy/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +_pkgname=autoconf +pkgname=autoconf-legacy +pkgver=2.13 +_debver=2.13 +_debrel=69 +pkgrel=2 +pkgdesc="A GNU tool for automatically configuring source code (Legacy 2.1x version)" +arch=(any) +url="https://www.gnu.org/software/autoconf/autoconf.html" +license=('GPL-2') +depends=('perl') +makedepends=('quilt') +replaces=('autoconf2.13') +conflicts=('autoconf2.13') +provides=('autoconf2.13') +source=(https://ftp.gnu.org/gnu/autoconf/autoconf-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/a/autoconf2.13/autoconf2.13_$_debver-$_debrel.debian.tar.xz) +sha512sums=('602584f4c77b7a554aaa068eda5409b68eb0b3229e9c224bffb91c83c4314d25de15bd560a323626ff78f6df339c79e1ef8938c54b78ecadf4dc75c5241290ad' + '1144fdad8df7bcc8854e65362d836ab8e1d07ed01b4ba6af10d295b8b5ba66e55f1f4bafe903be5c965548e1001f0d7f69e5dab00d67897caf2fe482b460c550') + +prepare() { + cd "${srcdir}/autoconf-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/other-debian.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/autoconf-${pkgver}" + ./configure --prefix=/usr --infodir=/usr/share/info --program-suffix=-${pkgver} + make +} + +package() { + cd "${srcdir}/autoconf-${pkgver}" + make prefix="${pkgdir}/usr" infodir="${pkgdir}/usr/share/info" install + mv "${pkgdir}"/usr/share/info/autoconf{,-${pkgver}}.info + mv "${pkgdir}"/usr/share/info/standards{,-${pkgver}}.info + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/autogen/PKGBUILD b/autogen/PKGBUILD new file mode 100644 index 0000000..5d0044c --- /dev/null +++ b/autogen/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=autogen +pkgver=5.18.16 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="A tool designed to simplify the creation and maintenance of programs that contain large amounts of repetitious text" +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/autogen/' +license=('GPL-3') +depends=('guile' 'libxml2' 'perl') +makedepends=('chrpath' 'quilt') +source=("https://ftp.gnu.org/gnu/${pkgname}/rel${pkgver}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/a/autogen/autogen_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5f12c982dbe27873f5649a96049bf019ff183c90cc0c8a9196556b0ca02e72940cd422f6d6601f68cc7d8763b1124f2765c3b1a6335fc92ba07f84b03d2a53a1' + 'e0157e03501f041d0984062f5db385a4c6aa9789b214eccd6631e0b6131ece9f26976909bbcd18cc0c71d7b63b2b5ea31e75e7cc0b9bc06a5753f6536657a2e1') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --disable-dependency-tracking + + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + # remove unrequired RPATH from binaries + for i in ${pkgdir}/usr/bin/*; do + if chrpath --list "$i"; then + chrpath --delete "$i"; + fi + done + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/autojump/PKGBUILD b/autojump/PKGBUILD new file mode 100644 index 0000000..b33cda1 --- /dev/null +++ b/autojump/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=autojump +pkgver=22.5.1 +_debver=$pkgver +_debrel=1.1 +pkgrel=1 +pkgdesc="A faster way to navigate your filesystem from the command line" +arch=('any') +url='https://github.com/wting/autojump' +license=('GPL-3') +depends=('python>=3.3') +makedepends=('quilt') +install=$pkgname.install +source=("$pkgname-$pkgver.tar.gz::https://github.com/wting/$pkgname/archive/release-v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/a/autojump/autojump_22.5.1-1.1.debian.tar.xz") +sha512sums=('ed1bb28b62d14a481d5c8ee8ebbfc286d21ca54c961904f81ac123c784e17810217dfe1689bdd4b50fd7a9d72509c0cb13583a9817074f6afe26dc3144f64243' + '257c029653cf2143c7b537b84a17f49e507b659329d9a1352b145e89679814575f833de809a0f6f1c4f60f6921b3990a00acafe67768a1c74c3924d185eea74a') + +prepare() { + cd $pkgname-release-v$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd $pkgname-release-v$pkgver + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" + + # https://wiki.archlinux.org/index.php/Python_package_guidelines#Using_site-packages + local _site_packages=$(python -c "import site; print(site.getsitepackages()[0])") + + SHELL=/bin/bash ./install.py --destdir "${pkgdir}" \ + --prefix 'usr/' \ + --zshshare 'usr/share/zsh/site-functions' + + cd "${pkgdir}/usr/share/$pkgname" + for i in $pkgname.* + do ln -s "/usr/share/$pkgname/$i" "${pkgdir}/etc/profile.d/$i" + done + + install -d "${pkgdir}/$_site_packages" + mv ${pkgdir}/usr/bin/*.py "${pkgdir}/$_site_packages" + python -m compileall -d /usr/lib "${pkgdir}/usr/lib" + python -O -m compileall -d /usr/lib "${pkgdir}/usr/lib" + + install -d "${pkgdir}"/usr/share/fish/functions + mv "${pkgdir}"/etc/profile.d/$pkgname.fish "${pkgdir}"/usr/share/fish/functions + + # https://github.com/joelthelion/autojump/pull/339 + sed -i "s:/usr/local/:/usr/:g" "${pkgdir}/etc/profile.d/$pkgname.sh" + sed -i "s:/build/autojump/pkg/autojump/:/:g" "${pkgdir}/etc/profile.d/$pkgname.sh" + + sed -i '27,31d' "${pkgdir}/etc/profile.d/$pkgname.sh" +} diff --git a/autojump/autojump.install b/autojump/autojump.install new file mode 100644 index 0000000..e5bf016 --- /dev/null +++ b/autojump/autojump.install @@ -0,0 +1,9 @@ +post_install() { + cat <>> Bash users will need to add the following to ~/.bashrc: + [[ -s /etc/profile.d/autojump.sh ]] && source /etc/profile.d/autojump.sh + + Fish users will need to add the following to ~/.config/fish/config.fish: + [ -f /usr/share/autojump/autojump.fish ]; and source /usr/share/autojump/autojump.fish +END +} diff --git a/automake-1.11/PKGBUILD b/automake-1.11/PKGBUILD new file mode 100644 index 0000000..eccaece --- /dev/null +++ b/automake-1.11/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=automake-1.11 +_realname=automake +pkgver=1.11.6 +pkgrel=1 +pkgdesc="A GNU tool for automatically creating Makefiles" +arch=('any') +license=('GPL-2') +url='http://www.gnu.org/software/automake' +depends=('perl' 'bash') +makedepends=('autoconf') +provides=("automake=$pkgver") +install=automake.install +source=(ftp://ftp.gnu.org/gnu/${_realname}/${_realname}-${pkgver}.tar.xz + perl2.6.patch) +sha512sums=('6e4cdf69f07734954f770fd4a7211a8c9dc69fe25a7746bd3c1e01d3139c94cab2900399e87371548833e99687e0d2b59c5e746ab2fdfbc7d47f2c1d439137ba' + 'b64bdfe60aa16289b90e9da8544229fcd61af1bd35fb2aa3447bd666b562c2799345b2b1a2ecc2430bf6a540f26d5c506272eacaf4cb8fd17a0eab04c34af1aa') + +prepare() { + cd ${srcdir}/${_realname}-${pkgver} + patch -p1 < ../perl2.6.patch +} + +build() { + cd ${srcdir}/${_realname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${srcdir}/${_realname}-${pkgver} + make DESTDIR=${pkgdir} install + + rm -rf "$pkgdir/usr/"{bin/{aclocal,automake},share/{doc,aclocal}} + rm "$pkgdir/usr/share/man/man1/"{aclocal,automake}.1 + find $pkgdir/usr/share/info -type f -exec rename automake automake-1.11 '{}' ';' + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/automake-1.11/automake.install b/automake-1.11/automake.install new file mode 100644 index 0000000..6ec822c --- /dev/null +++ b/automake-1.11/automake.install @@ -0,0 +1,22 @@ +infodir=/usr/share/info +filelist=(automake-1.11.info automake-1.11.info-1 automake-1.11.info-2) + +post_install() { + [ -x usr/bin/install-info ] || return 0 + for file in ${filelist[@]}; do + install-info $infodir/$file.gz $infodir/dir 2> /dev/null + done +} + +post_upgrade() { + post_install $1 +} + +pre_remove() { + [ -x usr/bin/install-info ] || return 0 + for file in ${filelist[@]}; do + install-info --delete $infodir/$file.gz $infodir/dir 2> /dev/null + done +} + +# vim:set ts=2 sw=2 et: diff --git a/automake-1.11/perl2.6.patch b/automake-1.11/perl2.6.patch new file mode 100644 index 0000000..5d15393 --- /dev/null +++ b/automake-1.11/perl2.6.patch @@ -0,0 +1,12 @@ +diff -ru automake-1.11.6/automake.in automake-1.11.6-new/automake.in +--- automake-1.11.6/automake.in 2012-07-09 08:39:57.000000000 -0700 ++++ automake-1.11.6-new/automake.in 2017-06-06 11:20:30.047651821 -0700 +@@ -4156,7 +4156,7 @@ + sub substitute_ac_subst_variables ($) + { + my ($text) = @_; +- $text =~ s/\${([^ \t=:+{}]+)}/&substitute_ac_subst_variables_worker ($1)/ge; ++ $text =~ s/\$[{]([^ \t=:+{}]+)}/substitute_ac_subst_variables_worker ($1)/ge; + return $text; + } + diff --git a/automake-1.14/PKGBUILD b/automake-1.14/PKGBUILD new file mode 100644 index 0000000..7f6e3b6 --- /dev/null +++ b/automake-1.14/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +_pkgname=automake +pkgname=automake-1.14 +pkgver=1.14.1 +pkgrel=1 +pkgdesc="A GNU tool for automatically creating Makefiles" +arch=('any') +license=('GPL-2') +url="https://www.gnu.org/software/automake" +depends=('perl' 'bash') +makedepends=('autoconf') +provides=("automake=1.14") +source=("https://ftp.gnu.org/gnu/${_pkgname}/${_pkgname}-${pkgver}.tar.xz"{,.sig}) +sha512sums=('5de971159dfca2ec74c3c9a2f1368331efc437b146d675740c8735fcb0d32a30d0560fd29df64c3279efdf9278152c82a9ff09040b3e64d84743aaf25b26ce69' + 'SKIP') +validpgpkeys=('A0460631BECA5C1CCD1C8362FC818E17429F96EA') # Stefano Lattarini + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + ./configure --build=$CHOST --prefix=/usr + make +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" + + rm -f "${pkgdir}"/usr/bin/{automake,aclocal} + rm -rf "${pkgdir}"/usr/share/aclocal + rm -fv "${pkgdir}"/usr/share/man/man1/{automake,aclocal}.1* + + rm -rf "${pkgdir}"/usr/share/info + rm -rf "${pkgdir}"/usr/share/doc +} diff --git a/automake-1.15/PKGBUILD b/automake-1.15/PKGBUILD new file mode 100644 index 0000000..4ba30f2 --- /dev/null +++ b/automake-1.15/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +_pkgname=automake +pkgname=automake-1.15 +pkgver=1.15.1 +_debver=1.15.1 +_debrel=5 +pkgrel=1 +pkgdesc="A GNU tool for automatically creating Makefiles" +arch=('any') +license=('GPL-2') +url="https://www.gnu.org/software/automake" +depends=('perl' 'bash') +makedepends=('autoconf' 'quilt') +provides=("automake=1.15") +source=("https://ftp.gnu.org/gnu/${_pkgname}/${_pkgname}-${pkgver}.tar.xz"{,.sig} + "https://deb.debian.org/debian/pool/main/a/automake-1.15/automake-1.15_$_debver-$_debrel.debian.tar.xz") +sha512sums=('02f661b2676f1d44334ce1c7188f9913a6874bf46ba487708ad8090ad57905f14aead80fefed815e21effacfbb925e23b944ea7dd32563dca39c1a4174eda688' + 'SKIP' + 'c8591dba2b51aaa4895786ea566af2dba43d7ff72ff9d8697b63df5db221cd49fc06f5f12277558b9e838e8a63ccf382d3bf1b227e22b2e9b1959885cfdb8006') +validpgpkeys=('E1622F96D2BB4E58018EEF9860F906016E407573' # Stefano Lattarini + 'F2A38D7EEB2B66405761070D0ADEE10094604D37' # Mathieu Lirzin + '155D3FC500C834486D1EEA677FD9FCCB000BEEEE') # Jim Meyering + +prepare() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0001-texi-rename.patch || true + rm -v debian/patches/0004-Use-system-help2man-if-it-is-available.patch || true + rm -v debian/patches/0005-Disable-t-check12.sh-and-t-check12-w.sh.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + ./configure --build=$CHOST --prefix=/usr + make +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" + + rm -f "${pkgdir}"/usr/bin/{automake,aclocal} + rm -rf "${pkgdir}"/usr/share/aclocal + rm -fv "${pkgdir}"/usr/share/man/man1/{automake,aclocal}.1* + + rm -rf "${pkgdir}"/usr/share/info + rm -rf "${pkgdir}"/usr/share/doc +} diff --git a/awesome-terminal-fonts/PKGBUILD b/awesome-terminal-fonts/PKGBUILD new file mode 100644 index 0000000..2614642 --- /dev/null +++ b/awesome-terminal-fonts/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=awesome-terminal-fonts +pkgver=1.1.0 +pkgrel=2 +pkgdesc="Free and libre fonts / icons for powerlines" +arch=('any') +url='https://github.com/gabrielelana/awesome-terminal-fonts' +license=('Expat') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/gabrielelana/awesome-terminal-fonts/archive/v${pkgver}.tar.gz") +sha512sums=('9c4d611d081a0deb8bb2a1779278e12be1ff3a570b05db94a4dfb91d4816f2aa6f6db305dfc19f75a645e661d6c3da5254a97d2225fe951db6dc2453940bdfa3') + +package() { + install -d "${pkgdir}/usr/share/fonts/${pkgname}" + install -d "${pkgdir}/usr/share/fontconfig/conf.avail" + + cd "${srcdir}/${pkgname}-${pkgver}/build" + install -m644 * "${pkgdir}/usr/share/fonts/${pkgname}/" + install -m644 "${srcdir}/${pkgname}-${pkgver}/config/10-symbols.conf" "${pkgdir}/usr/share/fontconfig/conf.avail" + + mkdir -p "${pkgdir}/usr/share/fontconfig/conf.default" + ln -s "../conf.avail/10-symbols.conf" "${pkgdir}/usr/share/fontconfig/conf.default/10-symbols.conf" + + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/README.md" -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/awesome/PKGBUILD b/awesome/PKGBUILD new file mode 100644 index 0000000..f824901 --- /dev/null +++ b/awesome/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=awesome +pkgver=4.3 +_debver=$pkgver +_debrel=7 +pkgrel=2 +pkgdesc="Highly configurable framework window manager" +url='https://awesomewm.org/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('cairo' 'gdk-pixbuf2' 'imlib2' 'libxdg-basedir' 'lua' 'lua-lgi' 'pango' + 'startup-notification' 'xcb-util-cursor' 'xcb-util-keysyms' 'xcb-util-wm' + 'xenocara-xmessage' 'libxkbcommon-x11' 'libxkbcommon' 'xcb-util-xrm') +makedepends=('asciidoc' 'cmake' 'docbook-xsl' 'doxygen' 'graphicsmagick-imagemagick-compat' + 'quilt' 'ldoc' 'xmlto' 'ttf-font') +backup=('etc/xdg/awesome/rc.lua') +source=("https://github.com/awesomeWM/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/a/awesome/awesome_${_debver}-${_debrel}.debian.tar.xz" + "fix-build.patch") +sha512sums=('c5ef1e8dc593e7783b895d22143154aea8f211beeda24672a7ee4ed5112b4f4284043f848a151f3d3c4f569e91308670367a4353f705b20511b36495b22fa3f5' + '480ae43c550c78d1f6d3118b5e21cde04b44c2ce55d248e5cb679f241d621d5ad4dab070581c1c86bab2705462a7267dca58d82fbfcd41b770b9f069675478a1' + '1f0f3c775c12e05b9dcb0108b28ffc88b9263ba46f5dedda1e5db61add40313decb7babca3cda1daf27ada8d88a3295c4fce679fabe3a777ccc148ed2725e11c') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/debian-customization.patch || true + rm -v debian/patches/freedesktop-menu.patch || true + + quilt push -av + fi + + # additional fixes + patch -Np1 -i "$srcdir/fix-build.patch" +} + +build() { + cmake \ + -S ${pkgname}-${pkgver} \ + -B build \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DSYSCONFDIR=/etc \ + -DLUA_LIBRARY=/usr/lib/liblua5.3.so \ + -DLUA_INCLUDE_DIR=/usr/include + make -C build +} + +package() { + make -C build DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/$pkgname.desktop" -t "${pkgdir}/usr/share/xsessions" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/awesome/fix-build.patch b/awesome/fix-build.patch new file mode 100644 index 0000000..537af91 --- /dev/null +++ b/awesome/fix-build.patch @@ -0,0 +1,21 @@ +--- a/CMakeLists.txt 2021-08-02 12:55:35.000000000 +0200 ++++ b/CMakeLists.txt 2021-08-02 13:00:56.663682687 +0200 +@@ -342,18 +342,6 @@ + endif() + endmacro() + +-foreach(icon ${ALL_ICONS}) +- # Make unfocused icons translucent +- a_icon_convert("_focus" "_normal" ${icon} +- -colorspace rgb -gamma 0.6 -channel A -evaluate Multiply 0.4) +-endforeach() +- +-foreach(icon ${ALL_ICONS}) +- # Make inactive icons grayscale +- a_icon_convert("_active" "_inactive" ${icon} +- -colorspace Gray) +-endforeach() +- + add_custom_target(generated_icons ALL DEPENDS ${ALL_ICONS}) + # }}} + diff --git a/babl/PKGBUILD b/babl/PKGBUILD new file mode 100644 index 0000000..eedc897 --- /dev/null +++ b/babl/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=babl +pkgver=0.1.82 +_debver=0.1.82 +_debrel=1 +pkgrel=1 +pkgdesc='Dynamic, any to any, pixel format conversion library' +arch=(i686 x86_64) +url='http://www.gegl.org/babl/' +license=(LGPL-3) +depends=(lcms2) +optdepends=('gobject-introspection: gir bindings' + 'vala: vala bindings') +makedepends=(gobject-introspection meson quilt vala) +options=(!makeflags) +source=(https://download.gimp.org/pub/babl/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/b/babl/babl_$_debver-$_debrel.debian.tar.xz) +sha512sums=('f6eabc53a8b9a2f6002ec75ec9175aa854e54a6d1c14e8723506d44f7fc3230dbfb19b4595d73d5922c705a97a000230aa6ed33f4dc0de0d9399dc939fe61c8c' + 'c260ae079fb20d77e5228c950ea887cb7179e1f7abc83040cc10d8e4828190f622a3737a7cfc4d2a22557d02be0751a12105ba3f98b996ed962a12381268747a') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + if [ $CARCH = i686 ]; then + export AVX2=false + export F16C=false + export MMX=true + export SSE=true + export SSE2=true + export SSE4_1=false + elif [ $CARCH = x86_64 ]; then + export AVX2=true + export F16C=true + export MMX=true + export SSE=true + export SSE2=true + export SSE4_1=true + fi + + hyperbola-meson $pkgname-$pkgver build \ + -D enable-avx2=$AVX2 \ + -D enable-f16c=$F16C \ + -D enable-mmx=$MMX \ + -D enable-sse=$SSE \ + -D enable-sse2=$SSE2 \ + -D enable-sse4_1=$SSE4_1 + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/badwolf/PKGBUILD b/badwolf/PKGBUILD new file mode 100644 index 0000000..026e651 --- /dev/null +++ b/badwolf/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=badwolf +pkgver=1.3.0 +pkgrel=1 +pkgdesc="A minimalist and privacy-oriented WebKitGTK+ browser." +url='https://hacktivis.me/projects/badwolf' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('webkitgtk') +makedepends=('samurai' 'ed' 'gettext-tiny') +source=("https://hacktivis.me/releases/${pkgname}-${pkgver}.tar.gz") +sha512sums=('f83884f9a1c4d12d641f68697d7fab7885803975ead6cb78e88b0b8d2f7b6f9da116f72e39f02c47e8dca89e4ced9b932524338a6211c7d4509c12206c10cdeb') + +build() { + cd "$pkgname-$pkgver" + PREFIX=/usr ./configure + samu +} + +package() { + cd "$pkgname-$pkgver" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + DESTDIR="${pkgdir}/" samu install +} diff --git a/bam/PKGBUILD b/bam/PKGBUILD new file mode 100644 index 0000000..18cfba2 --- /dev/null +++ b/bam/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=bam +pkgver=0.5.1 +_debver=0.5.1 +_debrel=2 +pkgrel=1 +pkgdesc='A fast and flexible build system using Lua' +arch=('i686' 'x86_64') +url='http://github.com/matricks/bam' +license=('zlib') +depends=('lua') +makedepends=('quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/matricks/bam/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/b/bam/bam_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e6f1b3daad6073c58b0e3cbf836bb0a6b66f0c36532d6e6eca9949239ab8b584cc88f892cce6f74974e370a8a688f33a95dde86dd65cc1790e49e5f8aeab0fef' + '593a6c8c1702f2e239928c525f4ec2df6b969c8bf5ebde187c904037526ba76be26b2b68cdd7962e819d10c7112cd7ed1e92e7a02e0f07fd60f1b6f0e56ec983') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + sh make_unix.sh +} + +package() { + cd ${pkgname}-${pkgver} + install -Dm755 bam "${pkgdir}"/usr/bin/bam + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/bash-completion/PKGBUILD b/bash-completion/PKGBUILD new file mode 100644 index 0000000..79dfe70 --- /dev/null +++ b/bash-completion/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=bash-completion +pkgver=2.11 +_debver=2.11 +_debrel=2 +pkgrel=1 +pkgdesc='Programmable completion for the bash shell' +arch=(any) +url='https://github.com/scop/bash-completion' +license=(GPL-2) +depends=(bash) +makedepends=(quilt) +options=(!emptydirs !makeflags) +source=($url/releases/download/$pkgver/$pkgname-$pkgver.tar.xz + https://deb.debian.org/debian/pool/main/b/bash-completion/bash-completion_$_debver-$_debrel.debian.tar.xz) +sha512sums=('41585f730b5114d397831ba36d10d05643c6a6179e746ddc49aa1cbef61ea5525fd2f09b2e474adee14e647f99df8d5983ee48e29a59d8a30e1daf7fb1837e06' + 'da9f14358efedf516bd040a5ba69b6bdb597185cc671e2a84080fcc64f2389de0b88211aa06d6704a2ea45636de2897b5a262625b669083566b3b63bf0d203d3') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING + + # bash-completion is sourced in /etc/bash.bashrc so that non-bash shell don't source it + rm "$pkgdir/etc/profile.d/bash_completion.sh" + + # remove Slackware's makepkg completion + rm "$pkgdir/usr/share/bash-completion/completions/makepkg" +} diff --git a/bc/PKGBUILD b/bc/PKGBUILD new file mode 100644 index 0000000..249e127 --- /dev/null +++ b/bc/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=bc +pkgver=1.07.1 +_debver=1.07.1 +_debrel=2 +pkgrel=2 +pkgdesc="An arbitrary precision calculator language" +arch=('i686' 'x86_64') +url="https://www.gnu.org/software/bc/" +license=('LGPL-3') +depends=('readline') +makedepends=('automake-1.14' 'ed' 'quilt') +replaces=('bc-readline') +conflicts=('bc-readline') +source=(https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/b/bc/bc_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('02126d0db6b6ed06d56cfc292d6f5475ff1e574779d7e69c7809bbb1e13f946f57ea07da2a7666baa092507a951a822044b0970075f75eefe65a5c1999b75d34' + 'SKIP' + '7e4774f072c4bbb7d4d78ab733bd47cb21f274b3e5c2ab0a65a3882e0bdbe39775310ef76cf953433b9e7d6a05455cbd427e0aa91d48a7d44e5e4d043140c93d') +validpgpkeys=('00E426232F384BF6D32D8B1881C24FF12FB7B14B') # Phil Nelson + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr --mandir=/usr/share/man \ + --infodir=/usr/share/info --with-readline + make -j1 +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.LIB -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/bchunk/PKGBUILD b/bchunk/PKGBUILD new file mode 100644 index 0000000..7d2a1c6 --- /dev/null +++ b/bchunk/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=bchunk +pkgver=1.2.2 +_debver=1.2.2 +_debrel=2 +pkgrel=1 +pkgdesc="A Tool to Convert *.raw *.bin files to an ISO file" +url="http://he.fi/bchunk/" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=(https://deb.debian.org/debian/pool/main/b/bchunk/bchunk_${pkgver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/b/bchunk/bchunk_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('94fcc1dea3a38a907b3f209c20f3de54028cc34bf8964d1dccf94faf3ca3851270cc8e052c29a3f04c60e525c029ebfb1c3c04fa85525e20273ac8d72cb317c8' + '5b38f4c6926842292efc20250bf75103b39d4bfee8b3a6cad67d7eca0cf59dc6bc846d3b28eaa6ad8bbc260a92adc7749406c575944b2638248eeafd445a7872') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + install -dm755 "$pkgdir"/usr/{bin,share/man/man1} + make PREFIX="$pkgdir/usr" MAN_DIR="$pkgdir/usr/share/man" install + chown root:root "$pkgdir/usr/share/man/man1/bchunk.1" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/bemenu/PKGBUILD b/bemenu/PKGBUILD new file mode 100644 index 0000000..8362cb1 --- /dev/null +++ b/bemenu/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgbase=bemenu +pkgname=('bemenu' 'bemenu-ncurses' 'bemenu-x11') +pkgver=0.6.14 +pkgrel=1 +pkgdesc="Dynamic menu library and client program inspired by dmenu" +url='https://github.com/Cloudef/bemenu' +arch=('i686' 'x86_64') +license=('GPL-3' 'LGPL-3') +makedepends=('ncurses' 'scdoc' 'libxinerama' 'libxkbcommon' 'pango') +source=("https://github.com/Cloudef/bemenu/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "remove-wayland.patch") +sha512sums=('dbcc2f931b9128c1595f11d9ad6d75a03b5b982c43733837db337cbdeb62aab34e962a0a23ba759913bd3d37f5ba369578b7efa309add388a9c3c35b090d7f33' + '91f36267e51ba27d1e61672797990ef893c1a928b298f790c8fc53bed7a31a647d148ffb4cc97d9c8bcfa6e67dfb511a74a3afd70a7095f767b4ecef9bee402e') + +prepare() { + cd "$pkgbase-$pkgver" + patch -Np1 -i $srcdir/remove-wayland.patch +} + +build() { + cd "$pkgbase-$pkgver" + make PREFIX=/usr +} + +package_bemenu() { + depends=(bemenu-renderer) + provides=(libbemenu) + + cd "$pkgbase-$pkgver" + make DESTDIR="$pkgdir" PREFIX=/usr install-base install-docs + install -Dm644 LICENSE-{CLIENT,LIB} -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_bemenu-ncurses() { + pkgdesc='ncurses renderer for bemenu' + provides=(bemenu-renderer) + depends=(libbemenu ncurses) + + cd "$pkgbase-$pkgver" + make DESTDIR="$pkgdir" PREFIX=/usr install-curses + install -Dm644 LICENSE-{CLIENT,LIB} -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_bemenu-x11() { + pkgdesc='X11 renderer for bemenu' + provides=(bemenu-renderer) + depends=(libbemenu libxinerama pango) + + cd "$pkgbase-$pkgver" + make DESTDIR="$pkgdir" PREFIX=/usr install-x11 + install -Dm644 LICENSE-{CLIENT,LIB} -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/bemenu/remove-wayland.patch b/bemenu/remove-wayland.patch new file mode 100644 index 0000000..66cd883 --- /dev/null +++ b/bemenu/remove-wayland.patch @@ -0,0 +1,84 @@ +--- a/GNUmakefile 2022-12-16 01:15:13.000000000 +0100 ++++ b/GNUmakefile 2023-11-24 22:12:14.440211883 +0100 +@@ -24,12 +24,11 @@ + pkgconfigs = bemenu.pc + bins = bemenu bemenu-run + mans = bemenu.1 +-renderers = bemenu-renderer-x11.so bemenu-renderer-curses.so bemenu-renderer-wayland.so ++renderers = bemenu-renderer-x11.so bemenu-renderer-curses.so + all: $(bins) $(renderers) $(mans) + clients: $(bins) + curses: bemenu-renderer-curses.so + x11: bemenu-renderer-x11.so +-wayland: bemenu-renderer-wayland.so + + # support non git builds + .git/index: +@@ -75,33 +74,9 @@ + bemenu-renderer-x11.so: private override CPPFLAGS += $(shell $(PKG_CONFIG) --cflags-only-I x11 xinerama cairo pango pangocairo) + bemenu-renderer-x11.so: lib/renderers/cairo_renderer.h lib/renderers/x11/x11.c lib/renderers/x11/x11.h lib/renderers/x11/window.c lib/renderers/x11/xkb_unicode.c lib/renderers/x11/xkb_unicode.h util.a + +-lib/renderers/wayland/xdg-shell.c: +- wayland-scanner private-code < "$$($(PKG_CONFIG) --variable=pkgdatadir wayland-protocols)/stable/xdg-shell/xdg-shell.xml" > $@ +- +-lib/renderers/wayland/wlr-layer-shell-unstable-v1.h: lib/renderers/wayland/wlr-layer-shell-unstable-v1.xml +- wayland-scanner client-header < $^ > $@ +- +-lib/renderers/wayland/wlr-layer-shell-unstable-v1.c: lib/renderers/wayland/wlr-layer-shell-unstable-v1.xml +- wayland-scanner private-code < $^ > $@ +- +-lib/renderers/wayland/xdg-output-unstable-v1.h: lib/renderers/wayland/xdg-output-unstable-v1.xml +- wayland-scanner client-header < $^ > $@ +- +-lib/renderers/wayland/xdg-output-unstable-v1.c: lib/renderers/wayland/xdg-output-unstable-v1.xml +- wayland-scanner private-code < $^ > $@ +- + xdg-shell.a: private override LDFLAGS += -fPIC +-xdg-shell.a: private override CPPFLAGS += $(shell $(PKG_CONFIG) --cflags-only-I wayland-client) +-xdg-shell.a: lib/renderers/wayland/xdg-shell.c + wlr-layer-shell.a: private override LDFLAGS += -fPIC +-wlr-layer-shell.a: private override CPPFLAGS += $(shell $(PKG_CONFIG) --cflags-only-I wayland-client) +-wlr-layer-shell.a: lib/renderers/wayland/wlr-layer-shell-unstable-v1.c lib/renderers/wayland/wlr-layer-shell-unstable-v1.h + xdg-output.a: private override LDFLAGS += -fPIC +-xdg-output.a: private override CPPFLAGS += $(shell $(PKG_CONFIG) --cflags-only-I wayland-client) +-xdg-output.a: lib/renderers/wayland/xdg-output-unstable-v1.c lib/renderers/wayland/xdg-output-unstable-v1.h +-bemenu-renderer-wayland.so: private override LDLIBS += $(shell $(PKG_CONFIG) --libs wayland-client cairo pango pangocairo xkbcommon) +-bemenu-renderer-wayland.so: private override CPPFLAGS += $(shell $(PKG_CONFIG) --cflags-only-I wayland-client cairo pango pangocairo xkbcommon) +-bemenu-renderer-wayland.so: lib/renderers/cairo_renderer.h lib/renderers/wayland/wayland.c lib/renderers/wayland/wayland.h lib/renderers/wayland/registry.c lib/renderers/wayland/window.c xdg-shell.a wlr-layer-shell.a xdg-output.a util.a + + common.a: client/common/common.c client/common/common.h + bemenu: common.a client/bemenu.c +@@ -131,16 +106,12 @@ + -hash scdoc && mkdir -p "$(DESTDIR)$(PREFIX)$(mandir)" + -hash scdoc && cp $< "$(DESTDIR)$(PREFIX)$(mandir)" + +-install-renderers: install-curses install-wayland install-x11 ++install-renderers: install-curses install-x11 + + install-curses: + mkdir -p "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" + -cp bemenu-renderer-curses.so "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" + +-install-wayland: +- mkdir -p "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" +- -cp bemenu-renderer-wayland.so "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" +- + install-x11: + mkdir -p "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" + -cp bemenu-renderer-x11.so "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" +@@ -168,7 +139,6 @@ + clean: + $(RM) -r *.dSYM # OSX generates .dSYM dirs with -g ... + $(RM) $(pkgconfigs) $(libs) $(bins) $(renderers) $(mans) *.a *.so.* +- $(RM) lib/renderers/wayland/wlr-*.h lib/renderers/wayland/wlr-*.c lib/renderers/wayland/xdg-shell.c + $(RM) -r html + + uninstall: +@@ -181,5 +151,5 @@ + + .DELETE_ON_ERROR: + .PHONY: all clean uninstall install install-base install-pkgconfig install-include install-libs install-lib-symlinks \ +- install-man install-bins install-docs install-renderers install-curses install-wayland install-x11 \ +- doxygen sign check-symbols clients curses x11 wayland ++ install-man install-bins install-docs install-renderers install-curses install-x11 \ ++ doxygen sign check-symbols clients curses x11 diff --git a/bigloo/PKGBUILD b/bigloo/PKGBUILD new file mode 100644 index 0000000..a78193f --- /dev/null +++ b/bigloo/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=bigloo +_pkgver=4.3a +pkgver=${_pkgver/-/_} +pkgrel=1.hyperbola2 +pkgdesc="Fast scheme compiler, without avahi and java-environment support and with libressl support" +arch=('i686' 'x86_64') +url="https://www-sop.inria.fr/mimosa/fp/Bigloo/" +license=('GPL-2' 'LGPL-2') +depends=('gmp' 'libressl' 'libunistring') +makedepends=('emacs' 'zip' 'sqlite' 'alsa-lib' 'flac' 'chrpath') +optdepends=('emacs' 'zip' 'sqlite' 'alsa-lib' 'flac') +options=('!makeflags') +source=(ftp://ftp-sop.inria.fr/indes/fp/Bigloo/${pkgname}${_pkgver}.tar.gz + lgpl-2.0.txt) +sha512sums=('fe2acc232d6cf84fef5ce36aae35baac584b4166d11cf887c60ad1da6c5f8face5ef02f0780e994b48d984fecd7d110637c1e56a219d2e73a214a7dc7c94a600' + '81ebc009d68bf54a25c6b8fe36d8a4176570258c346a492aa743c567e3e38e3a01be4d8c47eb34eeacf9b5e1e04743bd08483c0935a3de7cd2a69a402ba6fcbc') + +elisp_dir=/usr/share/emacs/site-lisp/bigloo + +build() { + cd "${srcdir}/${pkgname}${_pkgver}" + ./configure --prefix=/usr \ + --enable-ssl \ + --enable-sqlite \ + --lispdir=${elisp_dir} \ + --disable-avahi \ + --enable-flac \ + --disable-gstreamer \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --docdir=/usr/share/doc/bigloo \ + --jvm=no + make build compile-bee +} + +check() { + cd "${srcdir}/${pkgname}${_pkgver}" + make test +} + +package() { + cd "${srcdir}/${pkgname}${_pkgver}" + + make DESTDIR="${pkgdir}" install install-bee + make -C manuals DESTDIR="${pkgdir}" install-bee + + chmod 644 "${pkgdir}"${elisp_dir}/etc/bass-snap.au \ + "${pkgdir}"${elisp_dir}/images/* + + rm ${pkgdir}/usr/bin/{bglafile,bigloo}.sh + + # Remove references to the build root + sed -e "s|^BOOTDIR=.*|BOOTDIR=/usr|g" \ + -e "s|^BOOTBINDIR=.*|BOOTBINDIR=/usr/bin|g" \ + -e "s|^BOOTLIBDIR=.*|BOOTLIBDIR=/usr/lib/bigloo/${pkgver}|g" \ + -e "s|^BGLBUILDBINDIR=.*|BGLBUILDBINDIR=/usr/bin|g" \ + -e "s|^BGLBUILDLIBDIR=.*|BGLBUILDLIBDIR=/usr/lib/bigloo/${pkgver}|g" \ + -e "s|^\(BIGLOO=.*\)\.sh|\1|" \ + -e "s|^\(BGL.*=.*\)\.sh|\1|" \ + -i ${pkgdir}/usr/lib/bigloo/${pkgver}/Makefile.config + + # Install license files + install -d -m755 ${pkgdir}/usr/share/licenses/${pkgname} + install -Dm644 COPYING LICENSE ${pkgdir}/usr/share/licenses/${pkgname} + install -Dm644 ${srcdir}/lgpl-2.0.txt ${pkgdir}/usr/share/licenses/${pkgname}/COPYING.LIB +} diff --git a/bigloo/lgpl-2.0.txt b/bigloo/lgpl-2.0.txt new file mode 100644 index 0000000..12735e6 --- /dev/null +++ b/bigloo/lgpl-2.0.txt @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/bin2iso/LICENSE b/bin2iso/LICENSE new file mode 100644 index 0000000..5a8e332 --- /dev/null +++ b/bin2iso/LICENSE @@ -0,0 +1,14 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + diff --git a/bin2iso/PKGBUILD b/bin2iso/PKGBUILD new file mode 100644 index 0000000..13db354 --- /dev/null +++ b/bin2iso/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=bin2iso +pkgver=1.9d +pkgrel=1 +pkgdesc="Converts RAW format (.bin/.cue) files to ISO/WAV format" +arch=('i686' 'x86_64') +url='https://gitlab.com/bunnylin/bin2iso' +license=('WTFPL-2.0') +depends=('glibc') +source=("https://gitlab.com/bunnylin/bin2iso/-/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "LICENSE") +sha512sums=('5d90afe0b02c993351587da5de73a0f51ad7c32622ece1977b3767f62de783789fa1804a2146cad7a9ba2519ea620a8cca17b70ba8cb92fec41973a2e5f6d15f' + 'fb6575315a22516e29ad414c8e0c9074e0e18a5361ce746524d938e0bf329f7b742b66dc43cfba138f69534d747507e2983b34149d7c66bd4ae2e1b435e37034') + +build() { + cd "$pkgname-$pkgver" + make +} + +package() { + cd "$pkgname-$pkgver" + install -Dm755 "$pkgname" "$pkgdir/usr/bin/$pkgname" + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/bind/127.0.0.zone b/bind/127.0.0.zone new file mode 100644 index 0000000..3c5c964 --- /dev/null +++ b/bind/127.0.0.zone @@ -0,0 +1,10 @@ +@ 1D IN SOA localhost. root.localhost. ( + 42 ; serial (yyyymmdd##) + 3H ; refresh + 15M ; retry + 1W ; expiry + 1D ) ; minimum ttl + + 1D IN NS localhost. + +1.0.0.127.in-addr.arpa. 1D IN PTR localhost. diff --git a/bind/PKGBUILD b/bind/PKGBUILD new file mode 100644 index 0000000..1d74634 --- /dev/null +++ b/bind/PKGBUILD @@ -0,0 +1,113 @@ +# Maintainer: Jesus E. + +pkgbase=bind +pkgname=(bind bind-tools) +_pkgver=9.16.48 +pkgver=${_pkgver//-/.} +pkgrel=1 +url='https://www.isc.org/software/bind/' +license=('ISC') +arch=('i686' 'x86_64') +options=('!emptydirs') +makedepends=('libcap' 'libxml2' 'zlib' 'krb5' 'e2fsprogs' 'libressl' 'readline' + 'libidn2' 'libnsl' 'lmdb' 'geoip' 'dnssec-anchors' 'python' 'libuv' + 'json-c' 'python-ply') +source=("https://ftp.isc.org/isc/bind9/${_pkgver}/bind-${_pkgver}.tar.xz" + "named.conf" + "localhost.zone" + "localhost.ip6.zone" + "127.0.0.zone" + "empty.zone" + "named.initd" + "named.run") +sha512sums=('83829a5045e2a29dd2b491d3ab72b545f5664023fcd4aa205a44dbb7bcc5c737b4466c0d73f124b8d88fd33c56776871a07dde1ba0530d43eec8e7304a08d353' + '693c4aa40efc603f190be5b6cbf16ebb9512928073bab6a27825cae21f92506ba5299661bf0702538ee57abefbc66cf41b2f45029c906f54bc35ba930e1bf54d' + '83eb5576a6f0fa1d469ef205e64a56ad296fdf91855b3c89391ae2edfb15bfae1c2fd05f60403cd6f53dd9daddd08ad36d8b2e83af86d6f2dc8efe6d3743828a' + '6c02c9d9d81183bae826feba69d5bde9549aa4fb825cc804519b429d302e5cdd0c56e527e7bbb09c8a068eb8831468520cff2fec66c946b4c8e9f8e9a0fe9af7' + '8a8824bea352e91329c9621fe60d5475f2a95cda522f72860f22929a73224d912cf51cd179307489bac6178ffad469b4ad7a3737fec2d44bd54ebfea9c479c11' + 'bb609274e5bdedc9c680acb46c9f16a40cfaf9921fd613d71964047b7232c82aba116d3974010f4ef4b435086dc9f26a65789d65c8e7fd74b2375dfa05188370' + '846322856c5e283664d34efeb76a35cb16c88d268bbb988e2eab12ee93ee52a9d32ffd8a2931cbb1b4cd49e6e041fb168299ca358cb460812243239784670dfd' + '599fb107b0dba83fe2c5470af3258ed8f9ee80abc0bfdda1e903c72932ac1077034d7e7e48ecb36bd85a5129168f3e76b87ff6f83b77c2e5960167ee60dbb4d5') + +prepare() { + # no more using source array, lack of versioning. + curl -o root.hint https://www.internic.net/zones/named.root + [[ -s root.hint ]] +} + +build() { + cd bind-$_pkgver + # support to chase DNSSEC signature chains + CFLAGS+=' -DDIG_SIGCHASE' + CFLAGS+=' -fcommon' + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --enable-fixed-rrset \ + --enable-full-report \ + --enable-dnsrps \ + --enable-geoip \ + --with-python=/usr/bin/python \ + --with-openssl \ + --with-libidn2 \ + --with-json-c \ + --with-libxml2 \ + --with-lmdb \ + --with-libtool + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package_bind() { + pkgdesc='The ISC DNS Server' + provides=('dns-server') + depends=('glibc' 'libxml2' 'libcap' 'libnsl' 'libidn2' 'lmdb' 'libuv' + 'libressl' 'geoip' 'json-c' 'bind-tools') + optdepends=('logger: message logging support') + backup=('etc/named.conf' + 'var/named/127.0.0.zone' + 'var/named/localhost.zone' + 'var/named/localhost.ip6.zone' + 'var/named/empty.zone') + install=bind.install + + cd "bind-$_pkgver" + install -Dm644 COPYRIGHT "$pkgdir/usr/share/licenses/$pkgname/COPYRIGHT" + for _d in bin/{check,confgen,named,rndc}; do + (cd "$_d" && make DESTDIR="$pkgdir" install) + done + + cd "$srcdir" + install -D -m640 -o 0 -g 40 named.conf "$pkgdir/etc/named.conf" + + install -d -m770 -o 0 -g 40 "$pkgdir/var/named" + install -m640 -o 0 -g 40 root.hint "$pkgdir/var/named" + install -m640 -o 0 -g 40 localhost.zone "$pkgdir/var/named" + install -m640 -o 0 -g 40 localhost.ip6.zone "$pkgdir/var/named" + install -m640 -o 0 -g 40 127.0.0.zone "$pkgdir/var/named" + install -m640 -o 0 -g 40 empty.zone "$pkgdir/var/named" + + install -Dm755 "$srcdir/named.initd" "$pkgdir/etc/init.d/named" + install -Dm755 "$srcdir/named.run" "$pkgdir/etc/sv/named/run" +} + +package_bind-tools() { + pkgdesc='The ISC DNS tools' + depends=('glibc' 'libcap' 'libxml2' 'libnsl' 'libuv' 'libidn2' 'lmdb' + 'zlib' 'krb5' 'e2fsprogs' 'libressl' 'readline' 'geoip' + 'dnssec-anchors' 'json-c') + optdepends=('python: for python scripts') + conflicts=('dnsutils') + replaces=('dnsutils' 'host') + provides=("dnsutils=$pkgver") + + cd "bind-$_pkgver" + install -Dm644 COPYRIGHT "$pkgdir/usr/share/licenses/$pkgname/COPYRIGHT" + make DESTDIR="$pkgdir" SUBDIRS="" install + (cd lib && make DESTDIR="$pkgdir" install) + for _d in bin/{dig,dnssec,delv,nsupdate,python,tools}; do + (cd "$_d" && make DESTDIR="$pkgdir" install) + done +} diff --git a/bind/bind.install b/bind/bind.install new file mode 100644 index 0000000..d00bb3c --- /dev/null +++ b/bind/bind.install @@ -0,0 +1,40 @@ +post_install() { + if ! getent group named &>/dev/null; then + groupadd -g 40 named >/dev/null + fi + if ! getent passwd named &>/dev/null; then + useradd -u 40 -c "BIND DNS Server" -g named -G adm -d /var/named -s /bin/nologin named >/dev/null + fi + passwd -l named >/dev/null + + touch var/log/named.log + chown named:named var/log/named.log + + # create an rndc.key if it doesn't already exist + if [[ ! -s etc/rndc.key ]]; then + usr/sbin/rndc-confgen -r /dev/urandom -b 256 | head -n 5 >>etc/rndc.key + chown root:named etc/rndc.key + chmod 640 etc/rndc.key + fi + + if ! groups named | grep adm &>/dev/null; then + gpasswd -a named adm >/dev/null + fi + named_shell=$(getent passwd named | cut -d: -f7) + if [ "$named_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin named &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd named &>/dev/null; then + userdel named >/dev/null + fi + if getent group clamav &>/dev/null; then + groupdel named >/dev/null + fi +} diff --git a/bind/empty.zone b/bind/empty.zone new file mode 100644 index 0000000..7501c74 --- /dev/null +++ b/bind/empty.zone @@ -0,0 +1,8 @@ +@ 1D IN SOA localhost. root.localhost. ( + 42 ; serial (yyyymmdd##) + 3H ; refresh + 15M ; retry + 1W ; expiry + 1D ) ; minimum ttl + + 1D IN NS localhost. diff --git a/bind/localhost.ip6.zone b/bind/localhost.ip6.zone new file mode 100644 index 0000000..c021a28 --- /dev/null +++ b/bind/localhost.ip6.zone @@ -0,0 +1,10 @@ +@ 1D IN SOA localhost. root.localhost. ( + 42 ; serial (yyyymmdd##) + 3H ; refresh + 15M ; retry + 1W ; expiry + 1D ) ; minimum ttl + + 1D IN NS localhost. + +1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. 1D IN PTR localhost. diff --git a/bind/localhost.zone b/bind/localhost.zone new file mode 100644 index 0000000..e87274d --- /dev/null +++ b/bind/localhost.zone @@ -0,0 +1,11 @@ +@ 1D IN SOA localhost. root.localhost. ( + 42 ; serial (yyyymmdd##) + 3H ; refresh + 15M ; retry + 1W ; expiry + 1D ) ; minimum ttl + + 1D IN NS localhost. + +localhost. 1D IN A 127.0.0.1 +localhost. 1D IN AAAA ::1 diff --git a/bind/named.conf b/bind/named.conf new file mode 100644 index 0000000..827445d --- /dev/null +++ b/bind/named.conf @@ -0,0 +1,72 @@ +// vim:set ts=4 sw=4 et: + +options { + directory "/var/named"; + pid-file "/run/named/named.pid"; + + // Uncomment these to enable IPv6 connections support + // IPv4 will still work: + // listen-on-v6 { any; }; + // Add this for no IPv4: + // listen-on { none; }; + + allow-recursion { 127.0.0.1; }; + allow-transfer { none; }; + allow-update { none; }; + + version none; + hostname none; + server-id none; +}; + +zone "localhost" IN { + type master; + file "localhost.zone"; +}; + +zone "0.0.127.in-addr.arpa" IN { + type master; + file "127.0.0.zone"; +}; + +zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" { + type master; + file "localhost.ip6.zone"; +}; + +zone "255.in-addr.arpa" IN { + type master; + file "empty.zone"; +}; + +zone "0.in-addr.arpa" IN { + type master; + file "empty.zone"; +}; + +zone "." IN { + type hint; + file "root.hint"; +}; + +//zone "example.org" IN { +// type slave; +// file "example.zone"; +// masters { +// 192.168.1.100; +// }; +// allow-query { any; }; +// allow-transfer { any; }; +//}; + +//logging { +// channel xfer-log { +// file "/var/log/named.log"; +// print-category yes; +// print-severity yes; +// severity info; +// }; +// category xfer-in { xfer-log; }; +// category xfer-out { xfer-log; }; +// category notify { xfer-log; }; +//}; diff --git a/bind/named.initd b/bind/named.initd new file mode 100644 index 0000000..9998de8 --- /dev/null +++ b/bind/named.initd @@ -0,0 +1,27 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="BIND service" + +command="/usr/sbin/named" +command_args="-f -u named" +command_background="yes" +pidfile="/run/named/named.pid" +extra_started_commands="reload" + +depend() { + need net + use logger + provide dns +} + +start_pre() { + checkpath --directory --owner named:named --mode 0750 /var/run/named +} + +reload() { + ebegin "Reloading named.conf and zone files" + start-stop-daemon --signal HUP exec "${command}" --pidfile "${pidfile}" + eend $? +} diff --git a/bind/named.run b/bind/named.run new file mode 100644 index 0000000..9b51012 --- /dev/null +++ b/bind/named.run @@ -0,0 +1,4 @@ +#!/bin/sh +mkdir -p /var/run/named || exit 1 +chown named:named /var/run/named || exit 1 +exec named -u named -f -c /etc/named/named.conf diff --git a/blackbox-themes/PKGBUILD b/blackbox-themes/PKGBUILD new file mode 100644 index 0000000..483fcb3 --- /dev/null +++ b/blackbox-themes/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=blackbox-themes +pkgver=0.6 +pkgrel=2 +pkgdesc="Themes for the Blackbox Windowmanager" +arch=('any') +license=('GPL-1') +depends=('blackbox') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/b/blackbox-themes/blackbox-themes_${pkgver}.tar.xz") +sha512sums=('66f774e17658e0d1f07b6f072f7e5bcfacac655dbecf8947757df77aeea2aa1adb76e2169095f3c9c749ad41a6c2d674a01dd415a2050f8b4941019964f9f5c2') + +package() { + install -d "$pkgdir/usr/share/blackbox/backgrounds" + install -d "$pkgdir/usr/share/blackbox/styles" + cp -R "$srcdir/$pkgname-$pkgver/BlackGold/styles/BlackGold" "$pkgdir/usr/share/blackbox/styles/" + cp -R "$srcdir/$pkgname-$pkgver/BlueVision/styles/BlueVision" "$pkgdir/usr/share/blackbox/styles/" + cp -R "$srcdir/$pkgname-$pkgver/Daurple/styles/Daurple" "$pkgdir/usr/share/blackbox/styles/" + cp -R "$srcdir/$pkgname-$pkgver/Igloo/styles/Igloo" "$pkgdir/usr/share/blackbox/styles/" + cp -R "$srcdir/$pkgname-$pkgver/Igloo/backgrounds/"* "$pkgdir/usr/share/blackbox/backgrounds/" + cp -R "$srcdir/$pkgname-$pkgver/Reaction/styles/Reaction" "$pkgdir/usr/share/blackbox/styles/" + cp -R "$srcdir/$pkgname-$pkgver/Reaction/backgrounds/"* "$pkgdir/usr/share/blackbox/backgrounds/" + cp -R "$srcdir/$pkgname-$pkgver/RootBox/styles/RootBox" "$pkgdir/usr/share/blackbox/styles/" + cp -R "$srcdir/$pkgname-$pkgver/RootBox/backgrounds/"* "$pkgdir/usr/share/blackbox/backgrounds/" + cp -R "$srcdir/$pkgname-$pkgver/WhiteBox/styles/WhiteBox" "$pkgdir/usr/share/blackbox/styles/" + cp -R "$srcdir/$pkgname-$pkgver/WhiteBox/backgrounds/"* "$pkgdir/usr/share/blackbox/backgrounds/" + install -Dm644 "$srcdir/$pkgname-$pkgver/debian/copyright" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/blackbox/PKGBUILD b/blackbox/PKGBUILD new file mode 100644 index 0000000..48aa999 --- /dev/null +++ b/blackbox/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgbase=blackbox +pkgname=('blackbox' 'libbt') +pkgver=0.70.1 +_debver=$pkgver +_debrel=39 +pkgrel=5 +license=('Expat' 'GPL-2') +url='https://blackboxwm.sourceforge.net/' +arch=('i686' 'x86_64') +makedepends=('quilt' 'gcc-libs' 'libxft' 'libxext' 'libx11' 'libxt') +options=('staticlibs') +source=("https://downloads.sourceforge.net/blackboxwm/${pkgbase}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/b/blackbox/blackbox_${_debver}-${_debrel}.debian.tar.xz" + "menu.patch") +sha512sums=('99d1cd344b37c012828d2892bb6dfab2385aba6f1e3d981f7d976affe553856acadd6e17809fc01d5f6e7c1b8a423acab05c3c44405a716d3141e87a71e38798' + '7c0535bfdc437051cc5811a9ff8aaf65e546a24756b532220fa47456184716e9a84fefab451ad3e7ccb30d48913844f58af2560ee6c802219f6f1d55add8974a' + 'e109026c8aed4899d78d6c5b839f0f026e72e28881cf1194b24fe47a25a161754bb92fc318c9fe83d098a21bd20a3dfbcc39464995ee13cbda2f254545d1cc42') + +prepare() { + cd "$srcdir"/$pkgbase-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/menu.patch + autoreconf -fi +} + +build() { + cd "$srcdir"/$pkgbase-$pkgver + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --enable-shared + make +} + +package_blackbox() { + pkgdesc="A window manager for X11" + depends=('libbt') + + cd "$srcdir"/$pkgbase-$pkgver + make DESTDIR="$pkgdir" install + + # cleanup, we provide a separate package for this + rm -rf "$pkgdir"/usr/{include,lib} + + install -D -m644 debian/$pkgname.desktop -t "$pkgdir"/usr/share/xsessions + install -D -m644 debian/pixmaps/*.xpm -t "$pkgdir"/usr/share/pixmaps/ + install -D -m644 debian/pixmaps/blackbox_48x48.xpm "$pkgdir"/usr/share/pixmaps/$pkgname.xpm + install -D -m644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_libbt() { + pkgdesc="Shared library for Blackbox" + depends=('gcc-libs' 'libxft' 'libxext' 'libx11' 'libxt') + + cd "$srcdir"/$pkgbase-$pkgver + make DESTDIR="$pkgdir" install + + # cleanup, using therefore the window-manager package + rm -rf "$pkgdir"/usr/{bin,share} + + install -D -m644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/blackbox/menu.patch b/blackbox/menu.patch new file mode 100644 index 0000000..0e7a03e --- /dev/null +++ b/blackbox/menu.patch @@ -0,0 +1,46 @@ +--- a/data/menu.in 2005-04-08 15:59:20.000000000 +0200 ++++ b/data/menu.in 2025-02-10 23:48:27.229497721 +0100 +@@ -55,24 +55,14 @@ + + [begin] (Blackbox) + [exec] (xterm) {xterm -ls} +- [exec] (rxvt) {rxvt} +- +- [exec] (StarOffice) {soffice} +- [exec] (XEmacs) {xemacs} +- [exec] (Acroread) {acroread} + + [submenu] (Graphics) +- [exec] (The GIMP) {gimp} +- [exec] (Image Magick) {display} ++ [exec] (GIMP) {gimp} + [end] + +- [submenu] (Mozilla) +- [exec] (Mozilla Navigator) {mozilla} +- [submenu] (More...) +- [exec] (Mozilla Mail) {mozilla -mail} +- [exec] (Mozilla News) {mozilla -news} +- [exec] (Mozilla Composer) {mozilla -edit} +- [end] ++ [submenu] (Internet) ++ [exec] (Iceweasel-UXP) {iceweasel-uxp} ++ [exec] (Icedove-UXP) {icedove-uxp} + [end] + + [submenu] (X Utilities) +@@ -91,14 +81,6 @@ + + [reconfig] (Reconfigure) + [restart] (Restart) +- [submenu] (Others) {Other Window Managers} +- [restart] (Start FVWM) {fvwm} +- [restart] (Start WindowMaker) {wmaker} +- [restart] (Start Afterstep) {afterstep} +- [restart] (Start Enlightenment) {enlightenment} +- [restart] (Start TWM) {twm} +- [restart] (Start KWM) {kwm} +- [end] + + [exit] (Exit) + [end] diff --git a/blasphemer/PKGBUILD b/blasphemer/PKGBUILD new file mode 100644 index 0000000..a8c50b9 --- /dev/null +++ b/blasphemer/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=blasphemer +pkgver=0.1.8 +pkgrel=4 +pkgdesc="A free and libre dark-fantasy game" +arch=('any') +url='https://github.com/Blasphemer/blasphemer' +license=('Modified-BSD') +depends=('chocolate-doom') +optdepends=('crispy-doom: For enhanced vanilla gameplay-options') +makedepends=('deutex') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Blasphemer/blasphemer/archive/refs/tags/v${pkgver}.tar.gz" + "${pkgname}" + "${pkgname}.desktop" + "${pkgname}.png") +sha512sums=('48ba1cab6b8a3d1401c455ff75c6af1c12b2e1f4c98bb9ee8637fc4d5ed0dd15465b5446396f8a39ca5602fb8e2121a4ba863c9c616f3cdad025b312bf2a0da8' + '0c6a80f080510c061da397984c647e24f6999b3da509bd8cf2ab58bb2defec7f033f93363158a465530d67e827faf9deeca46c76644b8974048a959609239529' + 'e0b4dc0a7c4b3f035d0c681ddd4b7e87a502c9d9342933d919001bf875faedc45e1e8971e773bfc0f6285f993ccc92b0efb47a2cf6dc1f34b8b3b4acb8c92395' + 'f082bbf362c1840339f85140ac8bea6c196eff2417ab58729cfbfc623e9cd62e7cc224186412ada0bf2165bb93dd0938258ebc7f4849b3a316db3cac87da7278') + +build() { + cd "$pkgbase-$pkgver" + make +} + +package() { + cd "$pkgbase-$pkgver" + make prefix=/usr DESTDIR="$pkgdir" install + + install -Dm755 $srcdir/$pkgname -t "$pkgdir/usr/games" + install -Dm644 $srcdir/$pkgname.desktop -t "$pkgdir/usr/share/applications" + install -Dm644 $srcdir/$pkgname.png -t "$pkgdir/usr/share/pixmaps" + install -Dm644 COPYING.md -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm644 {README.md,story.txt} -t "$pkgdir/usr/share/doc/$pkgname" +} diff --git a/blasphemer/blasphemer b/blasphemer/blasphemer new file mode 100644 index 0000000..3afa706 --- /dev/null +++ b/blasphemer/blasphemer @@ -0,0 +1,83 @@ +#!/bin/bash - + +# These ports should be ordered by ease-of-use, of which menu +# simplicity and support for high-resolution take high priority. + +# "doom" is Debian’s generic name for their alternatives system. + +PORTS="crispy-doom chocolate-doom prboom-plus" + +# Just a single argument starting the command is allowed, -p, in order +# to explicitly set a port on the command line. -- is also supported +# so that -p can be instead sent directly to the port’s argument list. + +if [ $# -gt 0 ]; then + if [ "$1" = "-p" ]; then + DOOMPORT="$2" + shift; shift + elif [ "$1" = "--" ]; then + shift + fi +fi + +IWAD=blasphem.wad + +if [ -z "$DOOMWADPATH" ]; then + # Support installations of Freedoom to the home directory using + # the XDG spec. Makes this complicated, but let’s do it right. + if [ -z "$XDG_DATA_HOME" ]; then + if [ -z "$HOME" ]; then + HOME=/ + fi + XDG_PATH="$HOME"/.local/share/games/doom + else + XDG_PATH="$XDG_DATA_HOME"/games/doom + fi + + PATHS=( + "$XDG_PATH" + /usr/local/share/games/doom + /usr/local/share/doom + /usr/share/games/doom + /usr/share/doom + ) + export DOOMWADPATH="$(echo "${PATHS[@]}" | tr ' ' :)" +fi + +if [ -z "$DOOMPORT" ] && [ -h "$HOME"/.doomport ]; then + if [ -f "$(readlink -f "$HOME"/.doomport)" ] \ + && [ -x "$(readlink -f "$HOME"/.doomport)" ]; then + DOOMPORT="$(readlink -f "$HOME"/.doomport)" + fi +fi + +if [ "$DOOMPORT" ]; then + exec "$DOOMPORT" -iwad "$IWAD" "$@" +fi + +dirpath=$(eval echo "\${PATH}" 2>/dev/null | tr : ' ') + +for port in $PORTS; do + for dir in $dirpath; do + for file in "$dir"/"$port"; do + if [ -f "$file" ] && [ -x "$file" ]; then + exec "$file" -iwad "$IWAD" "$@" + fi + done + done +done + +# If we’ve reached this far, no engine was successfully executed. +# print message to stderr and exit with a status of 1. + +cat <&2 +$(basename "$0") could not locate nor launch a Doom engine. Most +likely, you simply need to install one, check your distribution +package repositories for names such as "odamex" or "chocolate-doom" or +seek out one and install it manually. + +If you believe you already have one, you may just need to modify your +PATH environment variable to include it, or set up the $HOME/.doomport +symbolic link to point directly to the engine of your choice. +EOF +exit 1 diff --git a/blasphemer/blasphemer.desktop b/blasphemer/blasphemer.desktop new file mode 100644 index 0000000..121fcdf --- /dev/null +++ b/blasphemer/blasphemer.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Blasphemer +Comment=Travel through dark lands and fight with magic weapons +GenericName=First Person Shooter Game +Type=Application +Icon=blasphemer +Keywords=first;person;shooter;doom; +Categories=Game;ActionGame; +Exec=blasphemer diff --git a/blasphemer/blasphemer.png b/blasphemer/blasphemer.png new file mode 100644 index 0000000000000000000000000000000000000000..273de85fe48a2c6eb3cc7b750b8fa5c6642fbb0a GIT binary patch literal 13559 zcmeIYbyQqU);`*eyL-^a-K}wVcL+fnZ?tij5G(`_9yC}&f`#A~oZ#*R2nmGXZnu-n zyz|bz-&%LgZ~eairdD@#)vjI7-utP2YMs+{Vzo7uurVkw0002Cin6>e{5R~^7Yz|! zpROlg0RU9}0s6);T`ON&cTYDvM;8b!%-2DEqlF) zB>fzEpK#%Ocy)Joe|t&%@GyMybB7z`#u)PY0Co4`n&#lyE8)vqvR1ax)`{zT>-+2Y z{EiE^jun=W5Qfjn?=CJB?*fa7q&m>n9wm&~TrK9@9pQhyx?PsaF9~kXyC2%0bA0G| zcvRJhxmiM{g)w;ItA52FUUKkla$RBPpi@Cz#NbJP+Um_&AV100tGB5SJ#Ur|bgr)0 zZU=8Vke_y~-Xsc#n2%ha>_`PmrLC<#td6%a-uDbR-ceq?yclDu?vNOLaS-V1b&)?d z_588P6;crt~4(h&~Ca zexGTb$V?$+^O(2o!nAgNQ*{-;?9Ds(V*Iu|3SP4);Um{u(U*sP`)(hJDG(1j(|O(N z4$(tz4}$K#KmTbk^lW`;tik$;jzX6Jk?7rL10;rJ8h`y&gon%PyBA-wV=VoLm;E|7 zc6LbWqTF0rUrb`czI1nwX}v{WT6^?fKEXUwU0J?!E=je#%PfHeVQ)TWY+dnrQEVz+ zlhqvm_K>;jLqL^ZH2_<3}3nRa^A<}>V3O^lmZ!C7CRf(i9=j(0r8d4APqchApI%x+$H>&^z6EJunTO1O*_r#Hkt!FXf3Wsrx& z{JhpxE1lfD?hzir_TiTJysCVOYd54ULvU;nnh#z?@bZ#s;vQ}vg;bpGjgg;3Ie+#> zkQ@%)_|{U|5O)M9ToXN}GL528qSX}=h)+?JsL7!6M2Ga7o`Fc2Kg`8<+?;5+>Jy-k zlk!`S%YL<`7O0~P9QmmS8l2i?#-0ov1!wq{X|TlDH#I_P{cu{QmZ*KrT_M4#DuH97 zS8JaT55(e*3O-}G)=F5>@=Z4cX6#FvoC>-bgxwAKaPs;M8_l6=QQNl`LJ1D>UO%!+1^DumHS91N5bxLmd!Lz47y4$b<{4TpY0QWwiE@`BXLeu%$* zG`y(dt2mrS*ufmKMIhYDfk57*>3Bb)g4THEx71w4#8+x&=bgs4wGNvI$Rxs{u`tC* zag^;>eaGkeguzXWIb#yV%LIDxm{YqnL5q>Y+9PAF$Doq`qD^aG7@u9wX9XIBMT^md zV4G~c7D%qMFTMh~`of|wHPD?x+jH#$(9D5)G`{bo&OsJzy`Mz z6oEc=aox&!Gt|k0`E_&M+ZoN}##DpnQF1<~&{=N5EYyl^W*V_)DGAV0`tl2m-STP?V5+s)t2nl};M&D4f$b0WVw_!isS33)J5l7IaA3mO=^P~Ima72_ zD!_Clp{*^BL7d_BZ^F}vFRhb2b!1BGL%0mY4z|tAuZS9Y-l`Ez28!b+w+^e4nZ!X8rCR%##Fk>VjE%1G8zOXq7h_9fyGw7w*o6&TAAR@E{1Ho< z`}j_md%3kmh0I1Z@enhuXt zwbm}5>g2E0|Ku%p*-%ZtjD9SJV2OlHLpVU|o?W~9sU2uoBLy7#^drn9V*7PUcF8Of z^H3`n13Hou3M>Wdh@ywYTXod!r`MM#nFB^Kna~JYz*B`}msF6Gdj2+8v$qjd@5`j& zB_p}f$C)%+@oy|x(iCZ`-aiL5pOlBGFpPa%xJj_pp@8GuXI z%0Ob`#N)Jx-)wQ~tEZS)d;X@EvjE#@AsXDhDHvq$!}fu^DUo~q_zPwOIh zVxtk;=xyw*LQhWvQr|-o^$x+9rv&l~inXCEMBl^YI1zbNb<{V&q$K)+E;*r$AJq)K z+N{BVff5B%hOzQ=%?v|#TmvO0z%vEiOoN{|TIv;OnH9`^VP}Z!y?%k4Yn8iz5yYd4 zstA;K7rALU28ze!B@@}R6VNn*6eWk4=p;K%VxatWeE@)+g+`aTNWGM?bZCJwS7r-* zFPV~&^$Ek(uoCe8%{Y(`WjX{DlVWqs!%%zgs*5guG{jb8)V05ZXzI$CNJmxFG=BA% z{ls1A@X|EaS|`2J(%<4b;&V@ju2l)RT)lMCEHKK9jHBDVfK(RA7M&)x|CDLWqz?g> z{02X~Yx|AfW2~OkR*@H(p^EvB&UWjmdlL2Wizx5_o@kl{QM7f^%kh%HZ9GTy9TpB^ zFN9&gm#__+>3!HCiX`w7N@}WDNdMi3vMKEOG8=x4nrmb-+91X}C^yU!Gl^Fre1Cu} zSYiKipc}M+-;Rc0a1#{W756cBMoZ5cUzd}GjVU16l>F0itYF0}EpK6Mfq_R(XpAN> zMA(XAPXuGgP0)2h#C!y+j*W)3Z-?qIoe}`)G5ybvF1wl)H9UNuGhX%0gpCYLAw;r1 z6hQmH2sxeFP9l~o1AGAg4SCF%AI2lG0eM>Igkr73p-yxz&*TBhVjVNjyAaihpR1&6 zVsXXY%u*Q%l$Ti(2!$N>^6xH04M`yZP zGu^2b9kuq>km(@L=sYhD16u|)Mn}RYK32PB2YNj!tEbzC0F4Ze@83@b=MkxOxiX0v zXFO54Ff+(x*zpTm{G9AMIP6p;oREZzAbGw+bvnd;>|5?Sz#lz+wQl0EJO0`zFD;9{ zp%}BR0l8j&N)b`T^)q}H31a7*>k=#gCA78fHWWLT$=7vaRcL+Ek#-PP6#1reRgjV` z#o0Kr1!g&Gh2*?~?k z9S5x>D0*TVyPZCaW?rL;3!O(-eJ;Mn z;iE8&d(mXI#2y}Q1Gt%xbc)0$8VTHxl-~c|>G95w5ZBj>o~N*p4d7D(bkotE8JH8Dn;~43yw6@%274L>gNX8?g1-j#R;OMrTrM_cq|vK4|ikTfQlCqQTY5o>z*kqx8R@%#3l za>1E0r)oHIC?c-4IriA-4XC|4?DWX`>v{2ha&KbQ`YC;FNt+4thUKW}-VfM18Dm5r zD|*C}Omp&fmOI>e+PoeAN^~B^?O`{(!KRG5N7jw>Ds7+D^gZeePi^Rt=ak|$Kz&)l zMD_$lo2r8{qaQDvUja(<6<}?U!Om0AT$$D-y-3sbSf?*6I7dMKgGSFMMenRmdJsJx z@(+~m&kB;^=S<`SgB4O%g@@zAVS`*>7K8<^ihA{A@J%@I!h^c2vXPWw(U&|jP&F+v zk_qI)XE>b~(syVsXJ2$AM<#4kw38Q`WDtuyZ7IYZ@hM|HjAQqcUwz}*&2oTxmkdB< z2xUuW%a-#WOx=ru7_5N=W=Y+?y&NGchOHo27M1#3Y3ufvBWM^9z-81{jiJ= z&NO%?S8nHmdAN|pV)9PH?H0y&g{`j-?d+a&_Kx{)`y+;a=_z1X1%`HdS5wcs8^sv( zl!j-a>q~QWVl|^aZ5RKD9R@%m53ndvMyMz_DY`~*!^cBHD^Q}Ya`W4k!H>tgsLuk2 zM3N)Ms}L{f(65T?bvTBFmIyhP5GMchFa)+BiHJW$_?y)4Uz07cCiONiF_w0BfZ z%+j_#UDW|o!IjUg4zGlNI#k&&8BJ#_=GtL|Q3DC-c8rr3sRW_#qVlb0lnU>PaT+Q* z*(&XUj#eqs>`*C+2GrYP9CW$iG&DYgcvdfdO7_9HE3#Id+KP0`p&+7;N5(RrszD`| zqRN|BL%qRzN9X-+xVnj{DnfWPi;07)Nyn{Fe9^1jg(3H`?)e0D1<^B&da0G_MK!q< zKQ^#2mG+Rd#U*1hE1pqDJIWx{*COh`Ve}lV+ZA4_cla+0ij~T{R@rG7maa|-%#>!i zstpP&HL%xsL+~mYs?wg|HV6WUS`urNo-lEyc{n#cd^}Q&2#x|u0*|W7uHF6pM|l(m z`nGWWVP_~KgD;t(4M$9KK3aZsMkB)^3y9jA_;_bY9b?uxNe0(FRfl+P?25KK-W%nl zVQ;``HRVitY|B{H{6no3n~AIRKiBIia?Yx7Ou2*TJQ#fE=BnquJ#3OJNbS`eEr;>y zVx0)kc*_VE;{_jk7s96bq*6Snfi-yQI`Pj=GN&}W7Y}{&JwvuJA9ZIbiFpovB)E}l@xt&E9}*jVEPE-dJlrB#6}AJk*r(|nYW54twB5>H?3R70I7E~@pUl1 z6$fq^HEyCjXU^;3sH$^`WTIhzyAGiSEfl+D+QHfZ*I1miIfb;H?KDk(9TiU^A}KB_ z+f15Z9~@G8Y!-={>teyrR3y)x1bdXo4AyEcgo^h^DA0z|*vLimOtMyfew_ zPY3`k+G7}zXg8968{4hcrsLY*<6bf{i^Xexu;OI^Ow}1->M^~+z^3DTgP_Que0e)a zi>8(K(iN!(6*8FIyGr+>`ka{<1GD$Je!sC1q*b0MTt2Z!56Ns7XCNaPC`>7dzhy1Y zdnufw-h9N8k01ph{6INW5M55?iu}y!vs>4!z3uQId5h+Bm>kj556r_%sV1@?6$}J! z8KkC^4$4aPv$Vo!A@4PaiSlY`dMVEoD+^SlZ(??%jJllke-yL2$1fyz?;Z~6GfXAq#!2!unyH58%W=zquQF&VCtXr#15w~(@L&NK4hm`Vym=n|JF1HW z2m58ZB3zje{Be1z%|$-1;snHNOGR5E3{EK9&A#g~+5jo+-u<3_U3*9RZs~mdY+b8F z`qpVtyeqJhTb1G@ZCp)e={)gjdoV{_JcUehl+2@MB&t+LX?4nv88c0YW~SSN>@-U8$`Q5; zuS=)>$Xy@IgwU*_kY6$23@Undd{}zS0z*A>mcs&vegipwa&pom^^rsCw$fd7xL9lu zRy^x1#C|`A>h@@5tnz9%+aVjXz}61Ku_th`9Al9v{fRK&%N;}K;Uv|t>Jq5|LHcgw zb>)bYpYGCX6{i8XwIoR_)5vl9GWQgIpNtO_Uql;jW8#`%##qud5Svs<-vHm{FhRWj$gYj_AxNH{(Fu=x@&2(^^?y{74!lvr;o&>-dN< zwhCkM8?MKogC^r+wJ`_2hj$aXx*>z)=Tx}YvDrzgLW(*zRJ7q*(|C_J6rf(I?`Cf_ zcAG5fsmC~2@6Q$qXs7b$q91Zvg%+En-kG)u#flfS>kBFsTn>93|nTTlw< zlTKk3&S*8Wz(1zhu$f~@V=7HTXVsR?&oTYFE6^0*zlW`>o#PksBSEkbZy?`|w$Nzk zt^Z>w75zO-boe?GvRFWxMc@U|AtNZhjS+j zM0?A`lbNQWwC!VjFGYt$ut~X;M^qwtxe8%+UxL$$BA-1_bk9GKA+Q4-`|4cQFtE*1 zP8*4eapJt`17DKqSY?ltGG42?L$*ang*!TV_UiF=o7 z`FOw`V$KXUl7X2n^K%x_1V_{x-o~dRhHi3GJ#WZj#Jzo@x?3}rp3=lrxZAAmPGr7_ zFE6J5As3)wi9#WGitnx7RN+x7d2@qQiBUXnLt6M+<8{ytZ3&Gi`It0T3Sk>skGFm& zz4Np>=Myx;ac%(R23<)E!P)bhIse?ynU}B!OaV(##dFFA=8k&~4f)KY&2ug-R}$lP2ZGNZ{<*Aexp4XKI{D5_(taw@&^{9E@5=+6zIU|^Cr3A;X;NU z&Twk)Y3%jNBTcNax5}x9-|6F50+NN)!Ok1n?q2nieR^jy+wIBK1Xs1n!&*=QwY@$; z?O8CIaM@ym;O=8-)%mG{=U_wdOUe=scl8DFW}dYZ5@0u!m;plGj8$DoAYpXgAtOVCxI{ z>t|d{6w=r{eu1iZVK?uN;|Hy3^OH>R&8?D?oYvk3KS(fb-bc^Py?&&{-7}7}!7P~4 zM`nP5FPY#JG%Bi2ZUR@(nxk#wx+a1g9S8s$MoL5!vbp>i38~`Gt?O0Xs2w4`b?C zla>-M?JUYO;_-zghOE~dVh7sYV5%9i&c3C5drNI1EQll{7lYPtQ-PSFPLR8myc;-= zfXhZ%YQNgtMtxX}8zS-ju-v7i+0o#J(Sk-0^QST!nS=sf4=cS0l}_`)K)0%Ak&L}( zJ*O`WAy+gwy;@W9-c51oPU*9IDzy^WkQRenDcoBIDlHhXvuh-CzFR7!{X`KvU|6Tc z;hkvIg%dcU03#x4n&+f@ar_+N*4yx@?KIbP!@Uo9O><^~NqLN!%bNyfNz&;rw&hSh z3s8Y7+HfO~rQ-bvM9y<8dOdU8klaO!H(V^u`0bjJYm{IeqP*Zy< z!Ki#U{O`@~yo33YgGo+aS);`m#VycW<2UO9${D9&n$NM!XFE{ovb|Qnb<3Dx>SB#E zm87?imc9?J>8*bw@g^aMDH?pAkG?lCD3NAd^e?Xt9^JCbeE0NOcPDkFJP$GQVt8JJ z5JiS28^#L9deG)lY=vM&McH!;J>g_0cY|jNwi8PlcTJNkqdPGyp3j#Nuim>U_vy<` z(=lwV&pSB*a;v=0?tyX_)(h390rt*wIE^G1Bj)p%Zv(9kY>(FHzRWp2-rd!Emt^EP zWl!Agtu6l*B#0BCiCd7t_T`1B6T33A$L&k*<7>5@+lRVW;!8%Uj-;}v0T!!zzOvCJ zh(5aZDUD`%pFPuGg;?f4sH=#outIl=w|nlX*9`Mpy%xbOdCjyx@>W9d&Qn2gIPz5c zy@vIOcmPgw05uqYj6DYcfKMIe-qZ%1iilhpMYqS~s5hG$9HKsT< zwJ1LAvZG`iG#j}Y(%N$IF%T7P1~m2NgNO7KlpjAnuHv+k%uj(i;+u?=BE*i|D}_jD z_{bZV#^L}ZUUk+arPP>RL$*#BYoBGc`03H7shkg8{;xzn9oMP`X^PuTBFEA+Rr}rc ziSE>P^2^!r@oG_mNW3)O2=ET)P#h6?7|+0lNOh^JavMdQd-Ndn( z@tZ+dh~ef1h90>GHvJWOfP4FORkuqu1Iw?er>b(8G{Cl{&R%ahz4NePD$Di3B#nji zTY;x8Bz{uGZmNjEjnZ@3b7sLbWw_EQ&2ei0)MuT_iM4ZPtu4h(jiF=HH#b0=8_znvdPXhEC z7YuLz5_5xSf2+WpB|yd++O%?Ro)B6AE&(ncP6a|E&h8yAnfx8Lp+F z0hV{O@&090MP35*%U`gqn~kF__;*vtT1dcJM2L@51j5hHDIhFh%PA@%B*MurU@K}R zDr9GCWheMIC>2*Pn3byy<=?Uzof+Tzr3=wzUB(!V#_DiQ@>hvWIZHyW0Pr z@@rYZ@L=G?TK&pXIPz~fJQlE=C&UWo=Be-I<{|<5kHn|kNEvBUH_%) zKVslNQvPpt{g?zVOEx&TL8}000r7t*)=|`=RK6 zu8;wMzdlHRYs0nSa(LO<&n-!o`Q7~gul_*6UxfbC7;4h|`y9CNsk;%Yn$WVi(0_^S=?{+aTZ zC-Ckcoz~XYwzjtR_V$jBj?T``uCA``?(UwRo==}X_4fAm_4W1l_YVvV3=R$s4Gj$s z508wDeE$4-baZrVY;1gdd}3l^a&mHNYHE6VdS+&3c6N4dZf<^leqmu@adB~JX=!ko10r(Tie^)U%!6c+1dH_?c4Y7-*F(lv$ON_^NWj%%gf8FtE=nl>zkXK+uPea_`C7< z_YV&b(yrm_a3X*(T}?fJ^w)X#TlfH=wVIMVAO@LA8Qwv6S2pni05A!EeSv`NTr#*2 z6{e!0fch033x^cttw*E0SjdpcaPs{`(Q4C1z~b1xCjp;OHsVco|2)lRMTMBum-( z*^+S^KoVLED{B9{kD17E;UOeE1LU2hM&>Bvqq3c=FOgd==!iB(P2LNYBaR>MSUsSW zB$uOG_SGP-pG^;Sd+oKQI0iY|xbFhA10TVFUrrhj)&c2bvdf6>S5mo-3M6(0VQN`S zxR!^`%yClZ<4Ck`2sgQ6Xx4za!FZh&NOXwe?<6aMVHO|1cc=kaYH1C!zjB1`?;TG~ zVld8j5UdAbVI5=i7T3bUQ1h~%@?Ku!1f?UIwX3~jcBy( z>aW*XNFqbTw>0_kg+$hdBq%P20PwM{2{2Yh3&8pAy(VY#=;5*E(c=%0A-+qDP7@L? zSR`KOL=P}Tmdw)q9jQIAAMib|j$FvKt))!+;i#q(@Rd@!`UdTNvrc|QM`Dk++a=@1 zWnM~JM3SN`gwXm!EoX;96=J3wfKzXBN2ue>R%pYMi}E3m5-=}_CW#E36Vsc30(cw* zjF62}sh+1|OFKHFNIFWe#d~OSsMQXoy2l>PA;ieizdiDx&~@xKv3H0m>BlXY4JD#5 z0O(;TnMZaXn(B`{&5UyFPGi_8cS#dHWJL=hMmv{z=IeYbHV-QUP`NZ87HYqFKFWKy z*3TV6h(;Fm6cF$!bS0D;@KFBB60jXSXbUDq zBSTuV!N^5$u&1lOZ~eBTH{2ki2i3QT@2+>^a?|$Cd_lXuR0&{01UME@gsnP#E7~#^ zxv$^dhgs{gOh&XiJT+^NOH6yJOIzNw-8a2_%m#4CT_Pi(CVVw3SE2p2O?IMLPdjsF zbe~Aoj}(oIWxQUxq-{QXYp6;6vUL zz=t}H7~wMFs9n^=QhcQb?q*E>VVNhXJMsfT-nT?c4}+t^=F;x5}@Ep)YwcmuA9-BZq5R9T=AGksO?&}Rdf|=ape$)4 zMd(y0|KDV0#j`sb+djoZu~EkUJV&7_^HSklpG zZt1Q!8~bfi7mqH#Xg)@9Lj>G!@MDGUGdG4dB_LBinAY&YH$i}kf~I`6tYyUi0|zw) AUjP6A literal 0 HcmV?d00001 diff --git a/blobby-volley/PKGBUILD b/blobby-volley/PKGBUILD new file mode 100644 index 0000000..8212530 --- /dev/null +++ b/blobby-volley/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=blobby-volley +_realpkgname=blobby2 +pkgver=1.0 +_debver=$pkgver +_debrel=3.1 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc="A free and libre beach ball game with blobs of goo" +url='https://sourceforge.net/projects/blobby/' +license=('GPL-2') +depends=('sdl2' 'physfs' 'mesa-libgl') +makedepends=('cmake' 'boost' 'mesa' 'zip' 'quilt') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://downloads.sourceforge.net/blobby/${_realpkgname}-linux-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/b/blobby/blobby_${_debver}-${_debrel}.debian.tar.xz" + "$pkgname.desktop" + "$pkgname.png") +sha512sums=('b9e36de4a44e482c9d0742b95034c2979d7a51512ac5e3fd8f4933655132028dfc9642c3580e5523b5b95d38acc169932d24808cee236710731c2571321337fa' + '31a11f59bbcdc58caa07cd5d29fb97813b8c838929e5337974791baaefe24e6c408975a34856e09a302be55ce32be16d58a210bece788006d5bfca9f261482c6' + '715b4337dc868cf51ca69c01476e1fa3a3dd631397fca91dc55f4d45e241b35dd0850f4be3e12a0afd7c2a94b6adfa623c633d4ce79ca6098f8e7ee6e69b3917' + '8b7b85d8e02f8174054a724752d5d40c609820be1e5e06c4868dc0e383d4cf4befe73ab0e910e9838b70be3f7e106ee71ef1e04f0560fdde7bff6ca473fa81ec') + +prepare() { + cd "$srcdir"/blobby-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/04_use_system_tinyxml.patch || true + rm -v debian/patches/02_use_system_lua.patch || true + + quilt push -av + fi + + sed -i "s|DESTINATION bin|DESTINATION games|g" src/CMakeLists.txt + sed -i "s|/share/blobby|/share/games/blobby|g" src/main.cpp +} + +build() { + cd "$srcdir"/blobby-$pkgver + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr + make +} + +package() { + cd "$srcdir"/blobby-$pkgver + + make DESTDIR="$pkgdir" install + + # correcting wrong folder-locations + install -dm755 "${pkgdir}/usr/share/games" + mv "${pkgdir}/usr/share/blobby" "${pkgdir}/usr/share/games" + + # install .desktop file, icon and license + install -dm755 "$pkgdir"/usr/share/{applications,pixmaps} + install -m644 "$srcdir"/$pkgname.desktop "$pkgdir"/usr/share/applications + install -m644 "$srcdir"/$pkgname.png "$pkgdir"/usr/share/pixmaps + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/blobby-volley/blobby-volley.desktop b/blobby-volley/blobby-volley.desktop new file mode 100644 index 0000000..dfc2768 --- /dev/null +++ b/blobby-volley/blobby-volley.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Blobby Volley 2 +Exec=blobby +Icon=blobby2 +Terminal=false +Type=Application +Categories=Game;ArcadeGame; +StartupNotify=false +Comment=Volley game with network support +GenericName=Volley Game diff --git a/blobby-volley/blobby-volley.png b/blobby-volley/blobby-volley.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b937312a040207ef03153abbf740cf08bb44e6 GIT binary patch literal 8032 zcmV-mAD`ffP)CL`C1{$&-0z=FU0a@2{6v@HafAQrQ&> z5dh9Pj4>EvNYj)wO;Jh#FmBv9@wa-Xzv_ctef3q>G-3qxwY4-fG!S?JNU+vot*sJZ zjKK+kFD0Jm5d=Z@azbE?p{AzhulAnr_#a-jY?+%gXAVIS;G83lW0E962tgQzc%BD< zF{b(%&-1GPq?AZ0an50_#W|O0i*sNtg+k#SeP{oj`a|uzcDYe4EqI=X5ZOB#=kPoa zZ7s$qoO47`G)&4B&=q2Uy@StBu~>A*7#bTJ-w`7IVgma6`(0gK9a73S{Y(PV_X&L; zFa!zxLY{~-eo>{arW?^jMwPmiDnNY&HmjsygrO z80Sz*p^^lEFbu02;D)I7P^nkIR=%$IiwZf`S`w9@lp;|ET`DtJ8szAskN%VK{K+41 z&N;0$aU54XG+`L-Qwso;F_cRsj4^~^NDu^go>wJcsJc7j5W)?M5=tqIa~P9_$u!lV zHL)?cM3GvJiet*IO1*NdfUI~hUlxcmNZR?lLTK%YHDim zeZOkc&N9wutdIsy z2!wNJtr;j5QE?1Xa@0{ry)A5S%L!U*hdCJ`1W1WrkzmC}b5%xHB$P?h8G{gc=9l|} zVzEfMT&7$u?@@E5NRlL1d4qG=XPt3KBoYw9A*EkUs?a)nhI7av!dbFp$=h;_f0O{N zwR3q4cPazujKa&Mt#hZOwZ<8fNezv1rb>X;y6WVVQKUKWIEgbymV?$>SN(!7{Y=`S zj~94&UiLgs2&~m8qj1Vp1cWlGs(}^FS@PU-f0Tr`Bp{AsXRXB|GY_0g)j6*!b(iPz zN-31u1KQ@QTlra z(Kd5vdvY7R3K4)Y899|>$w*6bqGMxF#-NPK$T147Eh6_TI@P2)#ahcRfBDOOk}!<6 zxm@Qq)5p!??25SBttZ82E>HgY z5L6lJ>jZ@wC>90rV8+*VUo-4~kY(}H9*;cW)79hA(+kCZ0k*^kPRq2$6N0s``~37L z5!*I<1U_`_l5APy^ZA<+UVEjMUp&-6-+)i4BqK;?p7|5- zeF+9!ZWKjM(W0K>nWq?+##^mB0Ue4z@jHZHmvcv;+`U_#@)%U zPPv**n|w;8kl+5Mz{Yhx|MFlL8|t6rzLP)3?k-vF2~-^%V3YxC(b{G}wZ_`vc}K)hIH%@ys$W6^=m$}4%ECd;R{St zCzGVm+3Wbx_iI_bEMoSNMHY>?oT>4Nc+#?IqsO{c9$VK-Hg5?S7=->_!$8qePO|s5 zc|_4^ic)#hNz*ELorgv3iK>4}bb=NZJl=GwY&7$%+kf8COgq4E`sWi~oc+&)U%Qvb ze^Src*C!NDyOcLRxsWwWd`%`W`Pm6M+)cL=FPWx&QYIHZ?xV=1Xp8MbM380s4h;HdQ-VZo4E zNXsx`a*=;Jb8D6g50#=Xs{~~ALKb0)gM*Zn!WltNZzD=u`g>!(bYl^?Pz*Bx4@($0 z`r8Fv(-tzRcp7hXI?ldoH}&uS5n*`-y*nJ*Icy3CA64eX!hdu0?pt_#W5|aui#hyb zWp=(Hx#N-s(z4*h(_&tVzQ%E#ck*HYr=aj zDD(W!n&{mvdH-j-dG_H3R{Xv|)TlZ9ef_-fvnDoe3^?qF4qC@$DK82LfV5ILWqt#j z;IzS7!HSh*Sl8A}SI0=oMq;(WXCsz1&a$7V5^&9z58{!ZIZi&O$mZZ#V!z1P>tCXe z5~~YsoYH$g?OP<4EaN)!`Vzm#@$;|La^Y=#yfOc3UUJQBJ7fjt{LlUT_>&DB{4a}m zQS{JJcn$wQzC(}b;-5eM-~8{Xvl#t}pRm@1*g4NL;>e%V8+Nha)bF$Eu3EO8a3#lv z-(d5S8qU6E7i}kB#G&SgY)A5uaJsr2(C0jWCcf^*O*(?!PM;&b{4fRGLgBva+4a!LbUgB2jyvdd zo@@OW6Z;pib$Q5?8Je1p-NfAFLi*d9>G{ViIjnR!i!NNijQ97^)EH3cY+?H;S2G}Y z64)YR9{mdS6GJ>L7*QTc=kZ^qE80MyHQ~Mg4l}nhM(oe5cMY(s@EosPa|Q<<-%H;| zub`>#U|#;_iHs>|<{sWfR48GLMJtW63ep6NAju=aK#%09CnvMyg$Xni60ZKx{d{P| zkC-1W;>eb#IDUEyKYe{BHO6F4Fh;X=lh6E9i>$7>AM@ln{P31W7CqX;%TG1)KWB_( zTzn$OpO;b-I!^vXk@j!}OTRgdnHN1yQ!QQJO~gFm~N?Liwe2Tow% zYd6p`OR>53LHeFNn2{g9pY~`y2k$(S_AmS=6Hn};T(g3$kJPiO`5Wxtc{Qz5VrnnH zj-Fr#^07}axHDklxR|DqG1fwY%4-WlV#z8^WhfU7kN;*eFTFgD>63QzAE(^T^ued; zNg8-5xd3GZ4cteNbfXbSxXxX0{>Ak7OXi&a9Ibuxc>L} zH__h#ZH*5zt>;8K?mCb8S1#t&iPtb^#f{WYjOh)xvgz>#TCVvbo10!_O2;WY^~2Fj z8%{6k1(tCc=yINFZ{1qU@|VU@c7n@}yqEgkZLF_dz_ky(hY?}QA<;chF7s5^2XMs# z5k9`8m98$yg4@^gLa>c#4U#WBunpI=lkGLXVIbH@5FbhRt)F7WYY~@xtAowf^31}B z*$WZ|L=VS)WPpKVZ^9anw!4l&UUenb3AQ#o$e}wgp#9b>xMNW>(+})tRm(y&iuRWK zn6>_sY`Xabo?bSRBR{mAT`fxpT?3;#&LAl?(5h;A>cP=W7+qrafn7M4qLjnxye6@h z)ELMcD4Vv{(%E0bImfM`G2O(*#=qyL2ahBWDd!w=2Muu#ZQ@-#@yY=-wd`hN7a0Lq zM^CVsslD$(k6FxizmIy?%+$ftY5Vn9{_nmfx_1O<;V?~({d&&hsn;Vmel6srBi~K$ zabINQ;Cx=c_>jZ&ZL>S&wrg=8yhH}b1&}ByGi;2<{Z(@sA;?Rl-L{j7r(r6;SN)&{{HLOadCzpvQ!9 zF?Eq)-Od7oMM?9hgrw+GE_-;=k(PZLr}lIF&3Ccmt_8fYd<;k3b3MMPY;J2pB_6dC9iv)H(4hFu zW0UCGRL_&=UBTdh$KPGBmhRT)iEjA;rJ~2wIh~A}+Fb=*?HOWlTBEf>>#XD4-aZBq zCHNM`j_u%@_uR##?w1*qHQcu5bL`kSohhR?GIRc~v7$tGufrcZx5V^$8;QJ#zz>kV zK*+4&7zD$U=M&D@QO&mj%CV)`D=`M7uPD?hv>|VKgXcRu&*6mN(35s@@QEE*D{#u< zhYn*L?K>kDJu{BJzL2Jt685xjP`}|gmi}@qQ=4O^9ng-p89=2J2Cyhx>PStN`liOQ zY0WrRtewg3!3JjT-^L|Je3wb_TH4JB?q2&TR<1sfkz+S8`@km%y)NR|r->52ZzP5U zBf%36Yk<7pA%-+QAa8$Zi^ZbyoI5Be!n_ILguo93!pq83DZy$er;;T0Z~__|%UEGh zD$CwZ_~3drY%Q?ijV2EJ_#5<(YJ)F-jwJRNzyD4~Om0UhOF8iv=nJq`Uq`ZZJO>}chLqhI2z(cfca&o17OGq|hmVpgp=2q!=!0ksWXl%2!ZnjlH=g-%J8 zhcgD_9FZ4bWo7a*1ifWX_)#jW(Ou?|J@PS_7l6pRJ;Dhruxx1)YgUe?Zy+Ekd4%;T z=U=!2XB=??&pkDcf!+|Xm}7rMbK84(?&*n47%{-~12^JOY}?$(%2y`Q(OnBFOMSI= zBu-EkuzOb>LK-gozylm>AHpSqRpANT`r=t^+BOrR90<#fol|(`x1Z$L6aEVa=$Zh( zBvVA{Bdo>?0?N76J>g}YS>uMy@++QL2$2m!$wypy%dFDk(neG43wZ8#6X@s(Iq2P; zEPZq=VpBb9S2Z$udJju}H<{O#wGuU!IAOsimR@=(QB4eSz@(X5sUO!#nh2J@IEnSE zCo<`nt!!C7ijM6gnRviq(gZl$%n3(pR+*&N3+eMfOf>sIEC+RA`- z1jh3FHAm9dHyV*z5e;fF8zoNzZ}iVWv#UDs%6!RQTS2Hfj57ZV#_*ef3c9x_9mu` z>S5}kYcQtFy0z2j*g6`oA*S(j*KqinD|zDT!}*`dtet_Kn7cA>_?kA1SNe)rm}sGVcOcI>EvTgeUMlAEY7h zqG97~*fZQ5db~iR5|5-mM3qLd--6w&eqcPSmbc=q8A-jbIp&t{G0@PCf7^|u#fbX4 zgpzf%_xeO5%WT>-lHTrmj{T44>8VPT+AHXx zlCM0Vu3(5FLvbKrM9=%!)%+7e{{{y8B5LYW7Tms=_VF(e-hUpbX1j zoWqW-qiNqZg0wba@X&A4*!Fk4Yvv}*Kl}jQ*G&D|ezwTjbk`ri;yj#wrYS;Xz{4;k^nLtX?T3ONy5cev zxV08%GIGXE??DJhxak;F<8oZ2@jSVOqsfqAWZRVOZX?>joWxQH$HkP&rB1@ZIgNKM@KOJq^+orUrR4gbHMYApRkG1 zXWx#|&@fnL{C+EFy7Y@!|F?{Y1{oz%tQf>vi|_k9_Sh3b0)#fM+O+3+cwva}L}g&R z&r<=tH{g}Db&W)$to+3cjPa2&K#1(wRybUhNI`v52{rq9 zYL|bMv>Z^J^?ky%@1|r0cJ^yTJxw&OJOj1x-`M&3G|Kz^FU8e=$A~Mg!~5V0L?Riy z^J1(jFrl%X<|)gGA`dT$s@-4-aKQx^h%~q9)EHEy;7}mq;Vo$6Og7LQIy1Bur4+GF zs$;2ADWOzKFs6hQ*<{!&Heo$Y^3zY#*V#;Qpq9bjx~k-T=T$Xlptrz?{d#bXCDuML zhq~5w)U-DGANl|z=J#NQqyM6B<0*~!$bT{6y|0l@-%jD!M<~zgAnA!HK5`1BEeFyP z6{(-K6j|`_eIFlKxNxDU5&&6&p-@<|Np6xP!vGGm_aRFRNj~c@7K;oFl!)VO>ocp+ z4B%1UGC+X9xsbZe^LS&?RLUx#JQ%Y4)oH}BB;P1NYfTz^tXegN(yZsPJ0{b&WfC(k zSxwSgVEapxQ1zCiP@?vVn;AUn#}x1W9Qu?yvC>j{YA)VSuA-3ol)iTkQr9wJlv9htI^unsTw86}Qb} z+pVJgN)6avj~jI*f_8T|~U(So*ge#K`(yMoxWo z80ev=O2DTt{##O!MPogLXOS`>^uXnHL1xSOmT2x%q;nW6FiAk?cRxXK zXEU>>bTH|_%}fs0vu))>N}Y{pE6^_M)B90OZNmV@X`B|6VnbX^QL$w}1q9_5lnEFt zwy?c>JiSZj;7mYmT{q!^J26Y%O>yfS#?|)GGVN7_*mpc1M!;p4T`cbS_8rbx2}*&1 za$W#ciXI^ZekAd{U{6IT1WroGcXcXze!^M|&?FW8g@j$tPhi@perCoa=P z77F9`E&VqU0AR`nDIMCDC~EMnKn9X9sKfIFQU2{wxaxejH2Lko-@UN2x3Sb-B7WAcci6l%z(S#`BeJA_pzo4tc{0iiS) zAG8Li6xR1~BE`3oK-IA3OCKc?hRKbcv`k+*?9s;TJqqk|neZDoeZy%#v&+bjkY0c{ zq)BSM%toadu0%!wa?ko2Wa+V%4pM^^77TlUD@$t9Dyc#!tP)^SRAuc=N^IF-Oew#A zU=V>o29}73f!)&>*n9|q_3))88o7n~smrqG0%*-W_uR8rtZ%tZ`PCc0?f_)q2m*=k zM>%*8&swwQ#o&^RRI4)SmvbTjgf9@n$2pC!6iWD2 zb<-}J1gCLItQ1ZuM81LU^X9et3UFf#_uhN&K5_ohb<(fic%xI+A|js}84$=|ud61` zIYe#-$||hLq)VP!TV<<2Akz+=WT28n6G(>)vi!kGnb|&o+4Gq!^E8xo8K)H0!p8He z{(*dQl$jLVci+Cjzbyg)uK)724j>XyRw_q6-XHV>i~-M6DCJ?5BFPse0X#!y0z*z} zKx$2rl&U#{@O^wgLih@&B}ytpDyrZsV==8YNn*$rk}K!U?(C0&f7=8ATzl;ooDdO( zFhm9c)>=XvQt}ggWvh|8lV zQcO@PMr)1l`vgIODDw8{@cv=~06ufsWiAM6kU?gvAt~1GX_UqoOq^njpf>Ud3t_d< zBDEuNZjYyjDp_foEl!h{t63vfRi*xiC$sS~#bP!#3xa^Cu8w>1GWV}W0KjGEUf@K1 zT`pM<3gDTrn$o&N=b8~v7g$8zeG$TvNC)wrzoldu8w<*1jn;j6rWaBOf?*Qh+o_b} z03rzZ@ehCaC*%3EE=_&w2j3M!1PI>}NJ(V>;JIE_1UaXOjUi3*+o2|fI7^$;)M8Z` zkqS(1?`djt+qS5^%o+ahcwW}vu-5)r;Ncy(IC<4o|LQ7@4=~yOuGD#m%R*m`2+&@L zl$paa2Bg#I9Hep*r^>`iVUi?EzoY0aFJo04;SYZBgTDyFJ9Z26ic3G^0Lo4hNJVS~ zS|^w!!HXj5t-$2Y5HCUL0!})FO%ZvTnx=d1{e)pi6h&`Ja4KQ&F9lvX@A%c(&s=ty zOSHyM3`KN)QOd`wbu{V-6~4vovfQ&yy;1fmJ)w*{|+Iu^Hvuo-AS6y|LD-;S8`};wI5r)V!6rDu6fcioK igW;B2Zuy(N*Z%|LxQK4JzVy-n0000 + +pkgname=blockrage +pkgver=0.2.3 +pkgrel=1 +pkgdesc="Free and libre falling block puzzle game" +arch=('i686' 'x86_64') +url='https://blockrage.sourceforge.net/' +license=('GPL-2') +depends=('sdl') +groups=('games') +source=("https://sourceforge.net/projects/${pkgname}/files/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "fix-build.patch" + "${pkgname}.desktop" + "${pkgname}.png") +sha512sums=('20ad63cb75f6f3afe482b54c5dc0487615ed9ac9a43fa3819b1da43f343c8dde6c3eb817b46b586bbfdca6ad9c9e9cb3c220f5ab536397e407250daf9fd61aa2' + '91e0536bca368baedbeb80f392f1fe82d3e99ae2ede22155dc43166d9717955ac24b8ddffaabb234ef779b84e6c7a37441197adee97f5210e1239458328e8c46' + '0c54eb12a177d70db7990ed3df640a13036fea3027f44ba190e5b667946f6821c577187157b3c0ecc57393cb5e10565e8e612906f968abb4dbb321678ffb5db5' + 'a8b5b423f9a7760c83e4ca9833a66bdc76d9d5d555c16eb3681890c0adf1bd693fc652aa5feb59033803349ffaf821170ee297e8d2ef7d9c7178e3067a86ccd4') + +prepare() { + cd "$pkgname-$pkgver" + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games \ + --mandir=/usr/share/man \ + --sysconfdir=/etc + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/$pkgname.desktop" -t "${pkgdir}/usr/share/applications" + install -Dm644 "${srcdir}/$pkgname.png" -t "${pkgdir}/usr/share/pixmaps" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/blockrage/blockrage.desktop b/blockrage/blockrage.desktop new file mode 100644 index 0000000..b0ee752 --- /dev/null +++ b/blockrage/blockrage.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Blockrage +Comment=A falling block puzzle game +Exec=blockrage +Icon=blockrage +Terminal=false +Categories=Game;BlocksGame; diff --git a/blockrage/blockrage.png b/blockrage/blockrage.png new file mode 100644 index 0000000000000000000000000000000000000000..6185c8cf1c09889d55a47aafdb6f25cb38240e38 GIT binary patch literal 783 zcmV+q1MvKbP)EX>4Tx04R}tkv&MmKpe$i(@I4u4(%Y~kfAzR@C$L&DionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb#YR3krMxx6k5c1aNLh~_a1le0HIN3niU!aG~G5c zsic_8uZZDSgb+p)V+hL3GG-+y4d3x~j{slq5;;BvB z;Ji;9V`W(-J|`YA>4LKlt6PRh$_2k|If<>&0Zf@Y85^D>RcLO)B)ckT1PbIMMP!)P{ zuQP|$1l|A}LK5@PK?_^xE*HO>J-#`JMF$pkkt5K;R=E{{kK~Nz zhgdB3K}cerffrlZzO#k>u2@U(szMTT#PnmWjUW6*Wn3f;)#^tA_yY|yX(!UF6e<7! N002ovPDHLkV1j#GSCaq$ literal 0 HcmV?d00001 diff --git a/blockrage/fix-build.patch b/blockrage/fix-build.patch new file mode 100644 index 0000000..f5d2ee7 --- /dev/null +++ b/blockrage/fix-build.patch @@ -0,0 +1,90 @@ +--- a/src/main.c 2005-10-24 21:47:16.000000000 +0200 ++++ b/src/main.c 2023-04-07 21:34:17.000000000 +0200 +@@ -102,7 +102,7 @@ + + int immedstart; + int quit; +-static int statx[6],staty[6]; ++static int statsx[6],statsy[6]; + int diffx,diffy; /* coordinates of the difficulty level display box */ + int ts_x0,ts_x1; /* x-coordinates of the top-ten names(ts_x0) & scores(ts_x1) */ + int no_of_sets; +@@ -191,14 +191,14 @@ + + static void game_drawscore(player_t *p, int bgvcpy) { + if(bgvcpy) { +- v_drawscrarea(bmp_game[players-1].data,statx[1],staty[1], ++ v_drawscrarea(bmp_game[players-1].data,statsx[1],statsy[1], + strpixlen("0000000",FONT_HIGHLIGHTED),font[FONT_HIGHLIGHTED].ch); + } + t_align=T_LEFT; +- v_printf(statx[1],staty[1],FONT_HIGHLIGHTED,"%07d",p->score); ++ v_printf(statsx[1],statsy[1],FONT_HIGHLIGHTED,"%07d",p->score); + + if(bgvcpy) { +- virt_cpyarea(statx[1],staty[1], ++ virt_cpyarea(statsx[1],statsy[1], + strpixlen("00000000",FONT_HIGHLIGHTED),font[FONT_HIGHLIGHTED].ch); + } + } +@@ -206,28 +206,28 @@ + static void game_drawlevelnum(int bgvcpy) { + + if(bgvcpy) { +- v_drawscrarea(bmp_game[players-1].data,statx[3],staty[3], ++ v_drawscrarea(bmp_game[players-1].data,statsx[3],statsy[3], + strpixlen("00",FONT_HIGHLIGHTED),font[FONT_HIGHLIGHTED].ch); + } + t_align=T_LEFT; +- v_printf(statx[3],staty[3],FONT_HIGHLIGHTED,"%02d",level); ++ v_printf(statsx[3],statsy[3],FONT_HIGHLIGHTED,"%02d",level); + + if(bgvcpy) { +- virt_cpyarea(statx[3],staty[3], ++ virt_cpyarea(statsx[3],statsy[3], + strpixlen("00",FONT_HIGHLIGHTED),font[FONT_HIGHLIGHTED].ch); + } + } + + static void game_drawblocksleft(int bgvcpy) { + if(bgvcpy) { +- v_drawscrarea(bmp_game[players-1].data,statx[5],staty[5], ++ v_drawscrarea(bmp_game[players-1].data,statsx[5],statsy[5], + strpixlen("00",FONT_HIGHLIGHTED),font[FONT_HIGHLIGHTED].ch); + } + t_align=T_LEFT; +- v_printf(statx[5],staty[5],FONT_HIGHLIGHTED,"%02d",blocksleft); ++ v_printf(statsx[5],statsy[5],FONT_HIGHLIGHTED,"%02d",blocksleft); + + if(bgvcpy) { +- virt_cpyarea(statx[5],staty[5], ++ virt_cpyarea(statsx[5],statsy[5], + strpixlen("00",FONT_HIGHLIGHTED),font[FONT_HIGHLIGHTED].ch); + } + } +@@ -371,9 +371,9 @@ + void game_statistics_draw(void) { + if(players==1) { + t_align=T_LEFT; +- v_print(statx[0],staty[0],FONT_NORMAL,"Score:"); +- v_print(statx[2],staty[2],FONT_NORMAL,"Level:"); +- v_print(statx[4],staty[4],FONT_NORMAL,"Blocks:"); ++ v_print(statsx[0],statsy[0],FONT_NORMAL,"Score:"); ++ v_print(statsx[2],statsy[2],FONT_NORMAL,"Level:"); ++ v_print(statsx[4],statsy[4],FONT_NORMAL,"Blocks:"); + game_drawlevelnum(0); + game_drawblocksleft(0); + game_drawscore(&(player[0]),0); +@@ -1530,9 +1530,9 @@ + fscanf(f,"%d %d %d %d %d %d",&nx_x0[0],&nx_y0[0], + &nx_x0[1],&nx_y0[1],&nx_x0[2],&nx_y0[2]); + +- fscanf(f,"%d %d %d %d",&statx[0],&staty[0],&statx[1],&staty[1]); +- fscanf(f,"%d %d %d %d",&statx[2],&staty[2],&statx[3],&staty[3]); +- fscanf(f,"%d %d %d %d",&statx[4],&staty[4],&statx[5],&staty[5]); ++ fscanf(f,"%d %d %d %d",&statsx[0],&statsy[0],&statsx[1],&statsy[1]); ++ fscanf(f,"%d %d %d %d",&statsx[2],&statsy[2],&statsx[3],&statsy[3]); ++ fscanf(f,"%d %d %d %d",&statsx[4],&statsy[4],&statsx[5],&statsy[5]); + + fscanf(f,"%d %d",&diffx,&diffy); + fscanf(f,"%d %d",&ts_x0,&ts_x1); diff --git a/bmake/PKGBUILD b/bmake/PKGBUILD new file mode 100644 index 0000000..3e39f11 --- /dev/null +++ b/bmake/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=bmake +pkgver=20200710 +_debver=$pkgver +_debrel=14 +pkgrel=1 +pkgdesc="Portable version of the NetBSD make build tool" +arch=('i686' 'x86_64') +url='http://www.crufty.net/help/sjg/bmake.html' +license=('Modified-BSD' 'Original-BSD') +depends=('python') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/b/bmake/bmake_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/b/bmake/bmake_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('1e7138c8c90f20af0cb493ae15af9b5199d5890ec8278909744cbfbf0fee0780c0483170561f879bae2c09286280bf9df049428d5524581ea633a0f806f31e4b' + '7ee1064d6570069cae5a2b5a88c1458654caa6397a5b1ece8ef8246e9e929ed0754d167db1a49ff9248d29eec13e0371136613a663bb14eb27c2a17325586e83') + +prepare() { + cd $pkgname + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/140_multiarch.diff || true + + quilt push -av + fi +} + +build() { + cd $pkgname + ./boot-strap --prefix=/usr op=build +} + +# op=build also runs unit tests; thus no check() +package() { + cd $pkgname + + # Fix directory permissions on install + install -d "$pkgdir/usr/bin" "$pkgdir/usr/share/licenses/$pkgname" + + ./boot-strap --install-destdir="$pkgdir" --prefix=/usr op=install + + rm -rf "$pkgdir/usr/share/man/cat1" + rm -rf "$pkgdir/usr/share/mk/java.mk" + + install -Dm 644 bmake.1 "$pkgdir/usr/share/man/man1/bmake.1" + head -n70 main.c >"$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/bmkdep/PKGBUILD b/bmkdep/PKGBUILD new file mode 100644 index 0000000..bf7e289 --- /dev/null +++ b/bmkdep/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=bmkdep +pkgver=20140112 +pkgrel=1 +pkgdesc="NetBSD mkdep: construct Makefile dependency list" +arch=('i686' 'x86_64') +makedepends=('bmake') +url='https://github.com/trociny/bmkdep' +license=('Simplified-BSD') +source=("$pkgname-$pkgver.tar.gz::https://github.com/trociny/$pkgname/archive/$pkgver.tar.gz") +sha512sums=('920dc07c7e648b8737a87a43ef9b44db7a2091b0914976fff6961d10602ac266cc48da96eeb78b89e8268441eaacfe83d5235ca599e511ead1e71367ad0ea4b7') + +prepare() { + cd $pkgname-$pkgver + sed -i 's/MANDIR=/MANDIR?=/' Makefile +} + +build() { + cd $pkgname-$pkgver + PREFIX=/usr bmake +} + +package() { + cd $pkgname-$pkgver + install -dm 755 "$pkgdir"/usr/bin + install -dm 755 "$pkgdir"/usr/share/man/cat1 + PREFIX="$pkgdir/usr" MANDIR="$pkgdir"/usr/share/man bmake install + install -dm 755 "$pkgdir"/usr/share/licenses/$pkgname + head -n30 mkdep.c >"$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/bmpanel/PKGBUILD b/bmpanel/PKGBUILD new file mode 100644 index 0000000..448829c --- /dev/null +++ b/bmpanel/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=bmpanel +pkgver=0.9.27 +pkgrel=2 +pkgdesc="A modern, NETWM compliant, bitmap theme-based x11 panel." +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('imlib2' 'fontconfig' 'libxrender' 'libxcomposite' 'ttf-dejavu') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/nsf/bmpanel/archive/${pkgver}.tar.gz") +sha512sums=('2b19833360ea21b39d6c7c4b1d2dd6b7ede7acd308d4642c6ed630d6de4626678e4ba64a6bf7f22037fd855246f10076fb1b6d8375f66e3a420b04dd20099a08') + +build() { + cd $srcdir/$pkgname-$pkgver + ./configure \ + --prefix=/usr + make +} +package() { + cd $srcdir/$pkgname-$pkgver + DESTDIR=$pkgdir make install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/bogofilter/PKGBUILD b/bogofilter/PKGBUILD new file mode 100644 index 0000000..7ac9bb7 --- /dev/null +++ b/bogofilter/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=bogofilter +_pkgname=$pkgname-libre +pkgver=1.2.5 +_debver=1.2.5 +_debrel=1 +pkgrel=1 +pkgdesc="A fast Bayesian spam filtering tool" +arch=('i686' 'x86_64') +license=('GPL-3') +url="https://bogofilter.sourceforge.io/" +depends=('db' 'perl' 'gsl') +makedepends=('valgrind' 'xmlto' 'quilt') +backup=("etc/$pkgname/$pkgname.cf") +mksource=(https://downloads.sourceforge.net/project/${pkgname}/${pkgname}-stable/${pkgname}-${pkgver}.tar.xz) +source=(https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}-${pkgver}.tar.bz2{,.sig} + https://deb.debian.org/debian/pool/main/b/bogofilter/bogofilter_${_debver}-${_debrel}.debian.tar.xz) +mksha512sums=('3a7280485cfe5802dd3e9721c153f88ccf28bff7a6a24590e985e860d1f1e0ddea7bde8a8e5ad1ff643e94c9fd7b26b2a5ed5a9fb991cee3fd5b0ce67ce9abfe') +sha512sums=('a13d3d2dffb52acb65fbc153b17c665b1e5ef2968c11076046a291c48e52e91311fa341c50571a741b8c1c369a720f721dd02c598d60bbff7682ed33e6d490ee' + 'SKIP' + 'e8be35c001e12820e3463636641072cea02ccc3a786c5c5e42e45490e1913d098f2d32dac1895777c1561a85a8dfaa1f7a7ed08dee9310ee28f1baa69a765e62') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +mksource() { + cd ${pkgname}-${pkgver} + # remove nonfree files + rm -v doc/$pkgname-SA-{2005-0{1,2},2010-01} +} + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --sysconfdir=/etc/$pkgname \ + --localstatedir=/var \ + --enable-transactions \ + --with-database=db + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + mv "${pkgdir}/etc/$pkgname/$pkgname.cf.example" "${pkgdir}/etc/$pkgname/$pkgname.cf" + + install -dm755 "${pkgdir}/usr/share/${pkgname}/contrib" + install -m644 contrib/* "${pkgdir}/usr/share/${pkgname}/contrib/" + + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/gpl-3.0.txt" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/boost/PKGBUILD b/boost/PKGBUILD new file mode 100644 index 0000000..c42efb2 --- /dev/null +++ b/boost/PKGBUILD @@ -0,0 +1,127 @@ +# Maintainer: Jesus E. + +pkgbase=boost +pkgname=('boost-libs' 'boost') +pkgver=1.71.0 +_debver=$pkgver +_debrel=7 +_boostver=${pkgver//./_} +pkgrel=4 +pkgdesc="Free and libre peer-reviewed portable C++ source libraries" +url='https://www.boost.org/' +arch=('i686' 'x86_64') +license=('Boost-1.0') +makedepends=('icu' 'python' 'python-numpy' 'bzip2' 'zlib' 'openmpi' 'findutils' 'quilt') +source=("https://repo.hyperbola.info:50000/sources/${pkgbase}/boost_${_boostver}.tar.bz2"{,.sig} + "https://repo.hyperbola.info:50000/sources/${pkgbase}/boost1.71_${_debver}-${_debrel}.debian.tar.xz"{,.sig}) +sha512sums=('b7937d50c4512cf13cadd0ca829de36cf2cbc6fb788f45b1d4565ad0753e2b206c545125a5862016c2f16016f2e4a6b687928963b466fff17c3e0a4437142c20' + 'SKIP' + 'e08c46914bfc9945c4a351d6fcae9621d07886246c31f8b4930bc3b9ce4074749f56779e8671e06e9e22c8eab273e2226cf4a5cbbcb2413eab0c69c9a2d0e4e5' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +prepare() { + cd ${pkgbase}_${_boostver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/36a81359f0af5607872d20d4fdc94e9bccdd0911.patch || true + rm -v debian/patches/92e1131fb00c5fd16911ea98777b872dbd0181b1.patch || true + rm -v debian/patches/b90917eaedf5ef977dea8ab0f11a92e3e09a4cbb.patch || true + rm -v debian/patches/e0ba57928d681c9f8e0b28eef2a17973950b9e8b.patch || true + rm -v debian/patches/boostorg-program_options-pull-59.patch || true + rm -v debian/patches/context-s390x.patch || true + rm -v debian/patches/fix_linux_detection.patch || true + rm -v debian/patches/fix-riscv64-non-pic.patch || true + rm -v debian/patches/hppa-long-double-config.patch || true + rm -v debian/patches/make-docs-use-offline-resources-only.patch || true + rm -v debian/patches/ppc64el-fp_traits-ibm-long-double.patch || true + rm -v debian/patches/s390x-arch.patch || true + + quilt push -av + fi +} + +build() { + export _stagedir="${srcdir}/stagedir" + local JOBS="$(sed -e 's/.*\(-j *[0-9]\+\).*/\1/' <<< ${MAKEFLAGS})" + + cd ${pkgbase}_${_boostver} + + ./bootstrap.sh --with-toolset=gcc --with-icu + + install -Dm755 tools/build/src/engine/b2 "${_stagedir}"/bin/b2 + + # Support for OpenMPI + echo "using mpi ;" >> project-config.jam + + # boostbook is needed by quickbook + install -dm755 "${_stagedir}"/share/boostbook + cp -a tools/boostbook/{xsl,dtd} "${_stagedir}"/share/boostbook/ + + # default "minimal" install: "release link=shared,static + # runtime-link=shared threading=single,multi" + # --layout=tagged will add the "-mt" suffix for multithreaded libraries + # and installs includes in /usr/include/boost. + # --layout=system no longer adds the -mt suffix for multi-threaded libs. + # install to ${_stagedir} in preparation for split packaging + "${_stagedir}"/bin/b2 \ + variant=release \ + debug-symbols=off \ + threading=multi \ + runtime-link=shared \ + link=shared,static \ + toolset=gcc \ + cflags="${CPPFLAGS} ${CFLAGS} -fPIC -O3" \ + cxxflags="${CPPFLAGS} ${CXXFLAGS} -std=c++14 -fPIC -O3" \ + linkflags="${LDFLAGS}" \ + --layout=system \ + ${JOBS} \ + \ + --prefix="${_stagedir}" \ + install +} + +package_boost() { + pkgdesc+=' - development headers' + depends=("boost-libs=${pkgver}") + optdepends=('python: for python bindings') + options=('staticlibs') + + install -dm755 "${pkgdir}"/usr + cp -a "${_stagedir}"/{bin,include,share} "${pkgdir}"/usr + + install -d "${pkgdir}"/usr/lib + cp -a "${_stagedir}"/lib/*.a "${pkgdir}"/usr/lib/ + cp -a "${_stagedir}"/lib/cmake "${pkgdir}"/usr/lib/ + + install -Dm644 "${srcdir}/"${pkgbase}_${_boostver}/LICENSE_1_0.txt \ + "${pkgdir}"/usr/share/licenses/boost/LICENSE_1_0.txt + + ln -s /usr/bin/b2 "$pkgdir"/usr/bin/bjam +} + +package_boost-libs() { + pkgdesc+=' - runtime libraries' + depends=('bzip2' 'zlib' 'icu') + optdepends=('openmpi: for mpi support') + + install -dm755 "${pkgdir}"/usr + cp -a "${_stagedir}"/lib "${pkgdir}"/usr + rm "${pkgdir}"/usr/lib/*.a + rm -r "${pkgdir}"/usr/lib/cmake + + # https://github.com/boostorg/python/issues/203#issuecomment-391477685 + for _lib in python numpy; do + ln -srL "${pkgdir}"/usr/lib/libboost_${_lib}3{8,}.so + done + + install -Dm644 "${srcdir}/"${pkgbase}_${_boostver}/LICENSE_1_0.txt \ + "${pkgdir}"/usr/share/licenses/boost-libs/LICENSE_1_0.txt +} diff --git a/box2d/PKGBUILD b/box2d/PKGBUILD new file mode 100644 index 0000000..39ac036 --- /dev/null +++ b/box2d/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=box2d +pkgver=2.4.1 +pkgrel=1 +pkgdesc='2D rigid body simulation library for games' +url='http://www.box2d.org/' +license=('Expat') +arch=('i686' 'x86_64') +depends=('gcc-libs') +makedepends=('cmake' 'doxygen' 'ninja') +source=("$pkgname-$pkgver.tar.gz::https://github.com/erincatto/box2d/archive/v${pkgver}.tar.gz") +sha512sums=('d900f925b77906777719c91488bdc5e2df1ad1f4a8ca39a574229f5e57070e3a843bdd7530e817112605fde6d82145c872d8afdfc65b84531a73199098c81162') + +build() { + cd $pkgname-$pkgver + + cmake . \ + -Bbuild \ + -GNinja \ + -DBOX2D_BUILD_DOCS=ON \ + -DBOX2D_BUILD_TESTBED=OFF \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=/usr + ninja -C build +} + +package() { + cd $pkgname-$pkgver + + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + diff --git a/braa/PKGBUILD b/braa/PKGBUILD new file mode 100644 index 0000000..ae36b2c --- /dev/null +++ b/braa/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=braa +pkgver=0.82 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="Mass SNMP scanner" +url='http://s-tech.elsat.net.pl/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('glibc') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/b/braa/braa_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/b/braa/braa_$_debver-$_debrel.debian.tar.xz") +sha512sums=('8c88d288287a12c19c8d49606c8d2b70531b7f2be1aa3c4ccc6b01739aead751c03c56dc3f1a346b3dd20730a8bd0d30e33167a5f7c676f629348195762e23d4' + '656622de403cea7962272aa1620246ee7f2442cd38e65eb0f78b7b04a85d2fceb28a82436a000b473b623ee131720ce4678a2c78f063ac418b8aa6e8e638fab7') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + install -Dm755 $pkgname "${pkgdir}/usr/bin/$pkgname" + install -Dm644 debian/$pkgname.1 "${pkgdir}/usr/share/man/man1/$pkgname.1" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/breezy/PKGBUILD b/breezy/PKGBUILD new file mode 100644 index 0000000..5908688 --- /dev/null +++ b/breezy/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=breezy +pkgver=3.1.0 +_debver=$pkgver +_debrel=8 +pkgrel=1 +pkgdesc="A decentralized revision control system with support for Bazaar and Git file formats" +arch=('i686' 'x86_64') +url='https://www.breezy-vcs.org/' +license=('GPL-2') +depends=('python-configobj' 'python-patiencediff' 'python-six') +makedepends=('python-cython' 'python-dulwich' 'python-fastimport' + 'python-gpgme' 'python-paramiko' 'python-setuptools' + 'quilt') +optdepends=('python-dulwich: Git support' + 'python-fastimport: Fastimport support' + 'python-gpgme: PGP support' + 'python-paramiko: access branches over SFTP') +provides=('bzr') +conflicts=('bzr') +replaces=('bzr') +source=("https://deb.debian.org/debian/pool/main/b/breezy/breezy_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/b/breezy/breezy_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('40ea1ae364940ac8ff83d3f5da2437cc62fbda0ca98b3ae90a38dfad87555c3993b852ce186323454d7ab002ba4fbb3270e70953504e449c445efe147847204d' + 'd744a6ecb1580ee747771213edb42b5d3ab696e8423701895be306288181545211b13bab5ac6bf66f602efd1ed69068faa830b6f49a50776dbcfbdf9186ff616') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + python setup.py build +} + +package() { + cd $pkgname-$pkgver + + export PYTHONHASHSEED=0 + python setup.py install --root="${pkgdir}" --install-data=usr/share --optimize=1 --skip-build + ln -s brz "${pkgdir}"/usr/bin/bzr # backwards compatibility + + # fix broken structure + mv "${pkgdir}/usr/share/share/locale" "${pkgdir}/usr/share" + rm -rf "${pkgdir}/usr/share/share" + + # install license + install -Dm644 COPYING.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/brltty/PKGBUILD b/brltty/PKGBUILD new file mode 100644 index 0000000..e443e4f --- /dev/null +++ b/brltty/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: Jesus E. + +pkgname=brltty +pkgver=6.3 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Braille display driver" +arch=('i686' 'x86_64') +url='https://brltty.app' +license=('LGPL-2.1') +depends=('gcc-libs' 'glibc' 'liblouis' 'libspeechd' 'pcre2' 'tcl') +makedepends=('alsa-lib' 'atk' 'python-cython' 'espeak' 'expat' 'glib2' 'gpm' 'icu' 'libxaw' + 'ncurses' 'speech-dispatcher' 'quilt') +optdepends=('atk: ATK bridge for X11/GNOME accessibility' + 'espeak: espeak driver' + 'libxaw: X11 support' + 'libxt: X11 support' + 'libx11: for xbrlapi' + 'libxfixes: for xbrlapi' + 'libxtst: for xbrlapi' + 'python: Python support' + 'speech-dispatcher: speech-dispatcher driver') +backup=(etc/brltty.conf) +options=('!emptydirs') +install=brltty.install +source=("https://brltty.app/archive/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/b/brltty/brltty_${_debver}+dfsg-${_debrel}+deb11u1.debian.tar.xz" + "fix-build.patch" + "$pkgname.initd" + "$pkgname.run") +sha512sums=('687fbb30703d4c9fd7b55d27fabecf26c58f7c032c82bcdee1405259da74f85516e268fc49d1bdb2f704b92532cf5c466712cc09b1a4ba5304d4e021af74b7b8' + '5350de6070b7bb2e343a8e328cdad6557fb47178145bde1c2085833a8bd48acc7bf4e366bc91c480a37976abc4df09cb725ab0d682d7bd7987e086c6d73ac6f4' + 'd8d3e8f6851fefc90a5855cd36fe78675c09f6c92af98cf7f0ef68d90f3d1d470a0db83b25125d2197da18873768b4c95826fcece602c813d93ff97524e129a9' + '2be94c464898a9156d67e300c19008343bd34376ccbcd268c49ecbd05149b4bbbf03102a2fd6c972156432e9b9b45491c012dd343c0e27b8d0bee71ee9e12828' + '58a4eab3513593705541cfb1e8a8a20ac31028a0e94f9f3f4665721c15e5e4020864668082cee51c79710d9224d02f416bc228eb0d8cca9e9b0b0555eb4c7cce') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/fix-build.patch + ./autogen +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/share/man \ + --with-scripts-directory=/usr/lib/brltty \ + --with-tables-directory=/usr/share/brltty \ + --with-writable-directory=/run/brltty \ + --enable-gpm \ + --disable-stripping \ + --disable-polkit \ + --disable-java-bindings \ + --disable-ocaml-bindings + make +} + +package() { + cd "${pkgname}-${pkgver}" + make INSTALL_ROOT="${pkgdir}" install + make INSTALL_ROOT="${pkgdir}" install-udev + + install -vDm 644 "Documents/${pkgname}.conf" -t "${pkgdir}/etc/" + + install -Dm755 ${srcdir}/$pkgname.initd "${pkgdir}/etc/init.d/$pkgname" + install -Dm755 ${srcdir}/$pkgname.run "${pkgdir}/etc/sv/$pkgname/run" + + install -Dm644 LICENSE-LGPL -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/brltty/brltty.initd b/brltty/brltty.initd new file mode 100644 index 0000000..66e6108 --- /dev/null +++ b/brltty/brltty.initd @@ -0,0 +1,12 @@ +#!/sbin/openrc-run +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command=/usr/bin/brltty +pidfile=/var/run/brltty.pid +command_args="-P $pidfile -q" + +depend() { + before * + after clock +} diff --git a/brltty/brltty.install b/brltty/brltty.install new file mode 100644 index 0000000..e03c48b --- /dev/null +++ b/brltty/brltty.install @@ -0,0 +1,17 @@ +post_install () { + getent group brlapi &>/dev/null || groupadd -r brlapi + if [ ! -e /etc/brlapi.key ]; then + mcookie >/etc/brlapi.key + chmod 0640 /etc/brlapi.key + chgrp brlapi /etc/brlapi.key + echo "Please add your user to the brlapi group." + fi +} + +post_upgrade () { + post_install +} + +post_remove() { + [ -e /etc/brlapi.key ] && rm -v /etc/brlapi.key +} diff --git a/brltty/brltty.run b/brltty/brltty.run new file mode 100644 index 0000000..ef50183 --- /dev/null +++ b/brltty/brltty.run @@ -0,0 +1,3 @@ +#!/bin/sh +mkdir -p /var/run/brltty || exit 1 +exec brltty -n diff --git a/brltty/fix-build.patch b/brltty/fix-build.patch new file mode 100644 index 0000000..fcbebf1 --- /dev/null +++ b/brltty/fix-build.patch @@ -0,0 +1,22 @@ +--- a/configure.ac 2021-01-28 13:12:55.000000000 +0100 ++++ b/configure.ac 2022-02-15 22:27:50.154631324 +0100 +@@ -1130,7 +1130,7 @@ + BRLTTY_PKGCONFIG_VARIABLE([SYSTEMD_SYSUSERS_DIR], [systemd], [sysusersdir], [/usr/lib/sysusers.d]) + BRLTTY_PKGCONFIG_VARIABLE([SYSTEMD_TMPFILES_DIR], [systemd], [tmpfilesdir], [/usr/lib/tmpfiles.d]) + BRLTTY_PKGCONFIG_VARIABLE([SYSTEMD_UNIT_DIR], [systemd], [systemdsystemunitdir], [/usr/lib/systemd/system]) +-BRLTTY_PKGCONFIG_VARIABLE([UDEV_DIR], [udev], [udevdir], [/usr/lib/udev]) ++BRLTTY_PKGCONFIG_VARIABLE([UDEV_DIR], [udev], [udevdir], [/lib/udev]) + + BRLTTY_ARG_PACKAGE([system], [base system], [], [dnl + *android*) +--- a/Messages/Makefile.in 2022-02-15 21:40:29.000000000 +0100 ++++ b/Messages/Makefile.in 2022-02-15 21:51:12.752962003 +0100 +@@ -54,7 +54,7 @@ + + objects: $(OBJECT_FILES) + %.$(OBJECT_EXTENSION): FORCE +- $(MSGFMT) --output-file $@ -- $(SRC_DIR)/$(@F:.$(OBJECT_EXTENSION)=.$(SOURCE_EXTENSION)) ++ $(MSGFMT) $(SRC_DIR)/$(@F:.$(OBJECT_EXTENSION)=.$(SOURCE_EXTENSION)) -o $@ + directory="$(LOCALE_SUBDIRECTORY)/$(@:.$(OBJECT_EXTENSION)=)/$(MESSAGES_SUBDIRECTORY)"; \ + $(INSTALL_DIRECTORY) $${directory}; \ + cd $${directory}; \ diff --git a/bsdmainutils/PKGBUILD b/bsdmainutils/PKGBUILD new file mode 100644 index 0000000..fd9e242 --- /dev/null +++ b/bsdmainutils/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=bsdmainutils +pkgver=12.1.2 +pkgrel=2 +pkgdesc="BSD-style programs" +arch=('i686' 'x86_64') +url="https://launchpad.net/ubuntu/+source/bsdmainutils" +license=('Modified-BSD') +depends=('bash' 'libbsd' 'ncurses') +makedepends=('quilt') +source=("https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/${pkgname}/${pkgver}/bsdmainutils_${pkgver}.tar.xz") +sha512sums=('ceaecaf1a7906340596a4166868e4931d60d9acebdf8a7a9027ca42b80646537849151d21e5e34f1e30ab26b5d1a9af9cd44142bddb913b001f7ff299ef2e031') + +build() { + cd "${srcdir}/${pkgname}" + + QUILT_PATCHES='debian/patches' quilt push -a + + for i in col colcrt colrm column hexdump look ul ncal calendar ; do rm -rf "usr.bin/$i" ; done + make +} + +package() { + cd "${srcdir}/${pkgname}" + make DESTDIR="${pkgdir}" install + + # install license + install -Dm644 "${srcdir}/${pkgname}/debian/copyright" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/bspwm/PKGBUILD b/bspwm/PKGBUILD new file mode 100644 index 0000000..4b47243 --- /dev/null +++ b/bspwm/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=bspwm +pkgver=0.9.10 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Tiling window manager based on binary space partitioning" +arch=('i686' 'x86_64') +url='https://github.com/baskerville/bspwm' +license=('Simplified-BSD') +depends=('xcb-util' 'xcb-util-wm' 'xcb-util-keysyms') +makedepends=('quilt') +optdepends=('sxhkd: to define keyboard and pointer bindings' + 'xdo: for the example panel') +source=("https://github.com/baskerville/${pkgname}/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/b/bspwm/bspwm_${_debver}-${_debrel}.debian.tar.xz" + "libre.patch") +sha512sums=('9ccb98c4e80635a781b3f889d8c3ae621c0926a79e9607268924b78bd11137caf70ee9a1edf5bc137d362d2acbe2984645f58ba31c586e6b017797758a66f9cf' + '58e1f697102738427f6a391c2de703eedadd7a03b92e7c6da524f76ca7aec612e6f47c489ce8d4b230c582f51f0bde72c3a19b42a8e631a1e45120ef2230116a' + '39e37a0764e90c5f1d06bf37efa7203c9570ee9172e8445ccd043979f8303cca80663eb42e2c29a0c989694fc37acfacaae9fb2362db15875f0a6f1be0e34d8d') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/libre.patch +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make PREFIX=/usr +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/bspwm/libre.patch b/bspwm/libre.patch new file mode 100644 index 0000000..0d92932 --- /dev/null +++ b/bspwm/libre.patch @@ -0,0 +1,10 @@ +--- a/examples/bspwmrc 2020-08-02 09:51:32.000000000 +0200 ++++ b/examples/bspwmrc 2023-12-17 20:14:24.995377757 +0100 +@@ -12,7 +12,5 @@ + bspc config gapless_monocle true + + bspc rule -a Gimp desktop='^8' state=floating follow=on +-bspc rule -a Chromium desktop='^2' + bspc rule -a mplayer2 state=floating +-bspc rule -a Kupfer.py focus=on + bspc rule -a Screenkey manage=off diff --git a/bzflag/PKGBUILD b/bzflag/PKGBUILD new file mode 100644 index 0000000..e6be5e8 --- /dev/null +++ b/bzflag/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=bzflag +pkgver=2.4.26 +pkgrel=1 +pkgdesc="Multiplayer 3D tank battle game" +url='https://bzflag.org/' +license=('LGPL-2.1') +arch=('i686' 'x86_64') +depends=('curl' 'glew' 'sdl2' 'c-ares') +makedepends=('intltool' 'gettext-tiny') +groups=('games') +source=("https://download.bzflag.org/${pkgname}/source/${pkgver}/${pkgname}-${pkgver}.tar.bz2") +sha512sums=('1ca039d840440098ea788009ad94fccec20710f621967843b5f95dc4ee054cb1d5d9b94326687008cf7a11020889225ffe9001aac1c7c4339f6761961f422a78') + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datarootdir=/usr/share/games + make + cd misc + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 misc/bzflag.desktop "${pkgdir}"/usr/share/applications/bzflag.desktop + install -Dm644 data/bzflag-48x48.png "${pkgdir}"/usr/share/pixmaps/bzflag-48x48.png + mv "${pkgdir}"/usr/share/games/man "${pkgdir}"/usr/share/man + install -Dm644 COPYING.LGPL -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/bzr/PKGBUILD b/bzr/PKGBUILD new file mode 100644 index 0000000..804a39d --- /dev/null +++ b/bzr/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=bzr +pkgver=2.7.0 +pkgrel=2 +pkgdesc="A decentralized revision control system (bazaar)" +arch=('i686' 'x86_64') +url='https://bazaar.canonical.com/' +license=('GPL-2') +depends=('tauthon') +makedepends=('intltool' 'gettext-tiny') +provides=('bazaar' 'gnu-bazaar' 'breezy' 'brz') +conflicts=('breezy' 'brz') +source=("https://launchpad.net/bzr/${pkgver%.*}/${pkgver}/+download/bzr-${pkgver}.tar.gz"{,.sig} + "bzr-lazy-regex.patch") +sha512sums=('c39ad3715d865788da74d8de8b469e1dc93d18b6cbcbc569464cdeb9bb2173bf8d7f4f8ee8f7599fbcbbe322817a4c72e785d544e622753699c425c32597d9aa' + 'SKIP' + '7d873a4e6de19ea8af03c6f8f2371364f76c62ebf787a0c9955beead359ea6591831d387c15867fd6638fee0d306966fdc5c5b2c1a3f0910f03280e6df9802af') +validpgpkeys=('84736900600FF95EF23513F52975A150DEF6218F') # Vincent Ladeuil + +prepare() { + cd bzr-${pkgver} + + sed 's|man/man1|share/man/man1|' -i setup.py + sed 's|/usr/bin/env python|/usr/bin/env tauthon|' -i bzrlib/{plugins/bash_completion/bashcomp.py,tests/ssl_certs/create_ssls.py,patiencediff.py,_patiencediff_py.py} + + patch -Np0 -i ${srcdir}/bzr-lazy-regex.patch +} + +build() { + cd bzr-${pkgver} + + tauthon setup.py build +} + +package() { + cd bzr-${pkgver} + + tauthon setup.py install --prefix='/usr' --root="${pkgdir}" --optimize='1' + + install -dm 755 "${pkgdir}"/usr/share/bash-completion/completions + install -m 644 contrib/bash/bzr "${pkgdir}"/usr/share/bash-completion/completions/ + + install -Dm644 COPYING.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/bzr/bzr-lazy-regex.patch b/bzr/bzr-lazy-regex.patch new file mode 100644 index 0000000..8c547e7 --- /dev/null +++ b/bzr/bzr-lazy-regex.patch @@ -0,0 +1,20 @@ +diff -u bzrlib/lazy_regex.py bzrlib/lazy_regex.py +--- bzrlib/lazy_regex.py 2017-01-15 20:36:48 +0000 ++++ bzrlib/lazy_regex.py 2017-01-30 09:08:25 +0000 +@@ -1,4 +1,4 @@ +-# Copyright (C) 2006 Canonical Ltd ++# Copyright (C) 2006, 2008-2011, 2017 Canonical Ltd + # + # This program is free software; you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -133,0 +134,10 @@ ++ ++ ++# Some libraries calls re.finditer which fails it if receives a LazyRegex. ++if getattr(re, 'finditer', False): ++ def finditer_public(pattern, string, flags=0): ++ if isinstance(pattern, LazyRegex): ++ return pattern.finditer(string) ++ else: ++ return _real_re_compile(pattern, flags).finditer(string) ++ re.finditer = finditer_public diff --git a/c-ares/PKGBUILD b/c-ares/PKGBUILD new file mode 100644 index 0000000..3b36495 --- /dev/null +++ b/c-ares/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=c-ares +pkgver=1.17.1 +pkgrel=1 +pkgdesc='A C library for asynchronous DNS requests' +arch=('i686' 'x86_64') +url="https://c-ares.haxx.se/" +license=('Expat') +depends=('glibc') +makedepends=('cmake') +source=("https://github.com/${pkgname}/${pkgname}/releases/download/${pkgname//-}-${pkgver//./_}/${pkgname}-${pkgver}.tar.gz"{,.asc}) +sha512sums=('b11887bcc9274d368088e1a8b6aca62414f20675cf0bc58e948f54fa04c327c39dd23cefe7509eec6397db14b550a3f6b77f5c18b3d735b3eef48ce2da1dcd00' + 'SKIP') +validpgpkeys=('27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2') # Daniel Stenberg + +build() { + cd "$pkgname-$pkgver" + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE='None' \ + -Wno-dev \ + -B build \ + -S . + make VERBOSE=1 -C build +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="${pkgdir}" install -C build + install -vDm 644 "LICENSE.md" -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 {AUTHORS,CHANGES,{CONTRIBUTING,README}.md,RELEASE-NOTES} \ + -t "${pkgdir}/usr/share/doc/${pkgname}/" +} diff --git a/cabextract/PKGBUILD b/cabextract/PKGBUILD new file mode 100644 index 0000000..cfee613 --- /dev/null +++ b/cabextract/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=cabextract +pkgver=1.9 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="Cabinet file unpacker" +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('glibc') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/cabextract/cabextract_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cabextract/cabextract_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('d144c1df9ed8e8c339bcadb3d1be2eb2576bb066e3f75a3480df0d5e81407a633554e4674b3bb43716c0cf33a0f2327e6f798cd6d7825bceefa0ad839fcc3f64' + '4c6bdf201381926b7b30dd6df6118a29db9510dea21e0c0b3b492bb9dd39ff0724d74088ea627abc936af13d527c64908bc0fd6e86a401b724ab12ecaa7f0fe9') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cadaver/PKGBUILD b/cadaver/PKGBUILD new file mode 100644 index 0000000..ea5baa0 --- /dev/null +++ b/cadaver/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=cadaver +pkgver=0.23.3 +pkgrel=1 +pkgdesc='Command-line WebDAV client' +arch=('i686' 'x86_64') +url='https://packages.debian.org/bullseye/cadaver' +license=('GPL-2') +depends=('neon') +source=(http://http.debian.net/debian/pool/main/c/cadaver/cadaver_$pkgver.orig.tar.gz + disable-sslv2.patch) +sha512sums=('48fe0a266be0ca7239f325377e5e2a8dc57a5d60466c7160e36c060ad24c09a50727695b9fa931844b1e66e173ebbb838f390d6c60fd07b614bd3b636cd4dd41' + 'db2380a8f2d3dfd8c1d7c89d0136d54fc1a61eea2042c2146e9dbe2d23f1d7cc428770498f676b4c8ea6adebc1f2d195059b761db392414857fa0e47681611a4') + +prepare() { + cd "$srcdir"/cadaver-$pkgver + patch -Np1 -i ../disable-sslv2.patch +} + +build() { + cd "$srcdir"/cadaver-$pkgver + ./configure --prefix=/usr --with-ssl + make +} + +package() { + cd "$srcdir"/cadaver-$pkgver + make prefix="$pkgdir"/usr install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cadaver/disable-sslv2.patch b/cadaver/disable-sslv2.patch new file mode 100644 index 0000000..c7a34ed --- /dev/null +++ b/cadaver/disable-sslv2.patch @@ -0,0 +1,16 @@ +diff -u -r cadaver-0.23.3/lib/neon/ne_openssl.c cadaver-0.23.3-nossl2/lib/neon/ne_openssl.c +--- cadaver-0.23.3/lib/neon/ne_openssl.c 2009-09-13 13:26:52.000000000 +0200 ++++ cadaver-0.23.3-nossl2/lib/neon/ne_openssl.c 2016-03-03 13:13:14.207713538 +0100 +@@ -564,11 +564,8 @@ + /* enable workarounds for buggy SSL server implementations */ + SSL_CTX_set_options(ctx->ctx, SSL_OP_ALL); + SSL_CTX_set_verify(ctx->ctx, SSL_VERIFY_PEER, verify_callback); +- } else if (mode == NE_SSL_CTX_SERVER) { +- ctx->ctx = SSL_CTX_new(SSLv23_server_method()); +- SSL_CTX_set_session_cache_mode(ctx->ctx, SSL_SESS_CACHE_CLIENT); + } else { +- ctx->ctx = SSL_CTX_new(SSLv2_server_method()); ++ ctx->ctx = SSL_CTX_new(SSLv23_server_method()); + SSL_CTX_set_session_cache_mode(ctx->ctx, SSL_SESS_CACHE_CLIENT); + } + return ctx; diff --git a/cairo-perl/PKGBUILD b/cairo-perl/PKGBUILD new file mode 100644 index 0000000..2874126 --- /dev/null +++ b/cairo-perl/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=cairo-perl +pkgver=1.107 +pkgrel=2 +pkgdesc="Perl wrappers for cairo" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url='https://gtk2-perl.sourceforge.net/' +depends=('cairo' 'perl') +makedepends=('perl-extutils-depends' 'perl-extutils-pkgconfig') +options=('!emptydirs') +source=(https://downloads.sourceforge.net/sourceforge/gtk2-perl/Cairo-${pkgver}.tar.gz) +sha512sums=('613ba59ee3bd1adc2f33be60b395148f23d1de793fde888fd417f0b0cb6631a35429ee696172e9292b7d3fecab93de8ca958c96f803b9f5a16747a6d1fc7e9cb') + +build() { + cd Cairo-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Cairo-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/cairo/0001-image-compositor-Remove-the-right-glyph-from-pixman-.patch b/cairo/0001-image-compositor-Remove-the-right-glyph-from-pixman-.patch new file mode 100644 index 0000000..9d8f2d7 --- /dev/null +++ b/cairo/0001-image-compositor-Remove-the-right-glyph-from-pixman-.patch @@ -0,0 +1,27 @@ +From d0dccb92c520556aaa02bd1fdf8f2922cef00292 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Sat, 5 Oct 2019 14:07:28 +0200 +Subject: [PATCH] image compositor: Remove the right glyph from pixman's cache + +We need to use the index including the phase. Otherwise we leave glyphs +in the cache that cause problems later as indices are reused. +--- + src/cairo-image-compositor.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cairo-image-compositor.c b/src/cairo-image-compositor.c +index 6fccb79f1..79ad69f68 100644 +--- a/src/cairo-image-compositor.c ++++ b/src/cairo-image-compositor.c +@@ -841,7 +841,7 @@ _cairo_image_scaled_glyph_fini (cairo_scaled_font_t *scaled_font, + if (global_glyph_cache) { + pixman_glyph_cache_remove ( + global_glyph_cache, scaled_font, +- (void *)_cairo_scaled_glyph_index (scaled_glyph)); ++ (void *)scaled_glyph->hash_entry.hash); + } + + CAIRO_MUTEX_UNLOCK (_cairo_glyph_cache_mutex); +-- +2.23.0 + diff --git a/cairo/PKGBUILD b/cairo/PKGBUILD new file mode 100644 index 0000000..fa65e17 --- /dev/null +++ b/cairo/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Jesus E. + +pkgname=cairo +pkgver=1.16.0 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="2D graphics library with support for multiple output devices" +url='https://cairographics.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('libpng' 'libxrender' 'libxext' 'fontconfig' 'pixman' 'glib2' 'lzo') +makedepends=('librsvg-legacy' 'poppler-glib' 'libspectre' 'quilt') +source=(https://www.cairographics.org/releases/$pkgname-$pkgver.tar.xz + https://deb.debian.org/debian/pool/main/c/cairo/cairo_$_debver-$_debrel.debian.tar.xz + 0001-image-compositor-Remove-the-right-glyph-from-pixman-.patch) +sha512sums=('9eb27c4cf01c0b8b56f2e15e651f6d4e52c99d0005875546405b64f1132aed12fbf84727273f493d84056a13105e065009d89e94a8bfaf2be2649e232b82377f' + '1f33867329228ac23bddb812d197688eacadc3d8ae8a8f8304ae9c0690187d4418cfe85905a8117e0e02570ea3dcc5a7d0d451dfded3b16231368e13f92f67d2' + '18071c1fb117fa51f7a77886efb66deec4aa5e7fec2a5fecec5ac1447ee04ca773f96aa8f65a0a7ecfd9405835dabb1b54b51fc5eb5d24d0f24d266c21e74236') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/01_build_perf_utils.patch || true + rm -v debian/patches/02_am-maintainer-mode.patch || true + rm -v debian/patches/03_export-symbols.patch || true + rm -v debian/patches/06_hurd-map-noreserve.patch || true + + quilt push -av + fi + + patch -Np1 -i $srcdir/0001-image-compositor-Remove-the-right-glyph-from-pixman-.patch + + # fix typo + sed -i 's/have_png/use_png/g' configure.ac + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --disable-gl \ + --enable-tee \ + --enable-svg \ + --enable-ps \ + --enable-pdf \ + --enable-gobject \ + --disable-gtk-doc + sed -i 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + for i in COPYING{,-LGPL-2.1}; do + install -Dm644 $i $pkgdir/usr/share/licenses/$pkgname/$i + done +} diff --git a/cairomm/PKGBUILD b/cairomm/PKGBUILD new file mode 100644 index 0000000..dddf545 --- /dev/null +++ b/cairomm/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=cairomm +pkgver=1.14.3 +pkgrel=4 +pkgdesc="C++ bindings for Cairo" +url='https://www.cairographics.org/cairomm/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('cairo' 'libsigc++') +makedepends=('meson' 'mm-common') +options=(!emptydirs) +source=("https://www.cairographics.org/releases/$pkgname-$pkgver.tar.xz") +sha512sums=('8dc8a0de733904742c54d4935b596d4103f2e498c6735894bc6a5a81eb4962c6ea944bad94102b18b25850f78e948d38f117c566b197bc76da23a4e88b62ee4e') + +build() { + hyperbola-meson $pkgname-$pkgver build -D maintainer-mode=true + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/calcurse/PKGBUILD b/calcurse/PKGBUILD new file mode 100644 index 0000000..664b091 --- /dev/null +++ b/calcurse/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=calcurse +pkgver=4.7.1 +pkgrel=1 +pkgdesc="A text-based, free and libre personal organizer" +arch=('i686' 'x86_64') +url='https://calcurse.org/' +license=('Simplified-BSD') +depends=('ncurses') +optdepends=('python: for CalDAV support' + 'python-httplib2: for CalDAV support' + 'python-pyparsing: for CalDAV support') +source=("https://calcurse.org/files/${pkgname}-${pkgver}.tar.gz"{,.asc}) +sha512sums=('8b5574d2909128c745b2d6367b517c5fb04a1c451e666dc9ee0652b3793b519576af5700d4fd073de0ccd5e5dced6b69c45dbfaf98b35a99784093208512b68e' + 'SKIP') +validpgpkeys=('2E36D8620221482FC45CB7F2A91764759326B440') # Lukas Fleischer + +build() { + cd "$pkgname-$pkgver" + + ./configure \ + --enable-docs \ + --without-asciidoc \ + --prefix=/usr \ + --mandir=/usr/share/man + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/camlp5/PKGBUILD b/camlp5/PKGBUILD new file mode 100644 index 0000000..9855b5a --- /dev/null +++ b/camlp5/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=camlp5 +pkgver=8.0 +_relname=rel8.00.01 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc='A preprocessor-pretty-printer of OCaml.' +url='https://camlp5.github.io/' +license=('Modified-BSD') +depends=('ocaml') +makedepends=('ocaml-compiler-libs') +source=("camlp5-${_relname}.tar.gz::https://github.com/camlp5/camlp5/archive/$_relname.tar.gz") +sha512sums=('f40e57845ac4a14cf260ddd9df616d12df09f67efaf6735e915598aee981721e8203bf9203fb83d08e34e43021c08003de64dbf3bdcd4d12fd079542fb7649aa') +options=('staticlibs') + +build() { + cd "${srcdir}/camlp5-${_relname}" + + ./configure \ + -prefix '/usr' \ + -mandir '/usr/share/man' \ + -strict + + make world.opt +} + +package() { + cd "${srcdir}/camlp5-${_relname}" + + make DESTDIR="${pkgdir}" install + + install -D -m644 etc/META "${pkgdir}/usr/lib/ocaml/$pkgname" + install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cantarell-fonts/PKGBUILD b/cantarell-fonts/PKGBUILD new file mode 100644 index 0000000..ccfdc68 --- /dev/null +++ b/cantarell-fonts/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=cantarell-fonts +pkgver=0.111 +pkgrel=1 +epoch=1 +pkgdesc="Humanist sans serif font" +url="https://gitlab.gnome.org/GNOME/cantarell-fonts" +arch=(any) +license=(OFL-1.1) +makedepends=(meson gettext-tiny) +source=("https://download.gnome.org/sources/$pkgname/$pkgver/$pkgname-$pkgver.tar.xz") +sha512sums=('638298a6381a3ede862d1b100fcfea943bebb5e1c0dc4f1597ab2f841e933b484436b139090a669c770c02483a24f2b92bbd12bce71d7a40eb4c325573e3df9e') + +build() { + hyperbola-meson $pkgname-$pkgver build -D useprebuilt=true + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 $pkgname-$pkgver/COPYING +} + +# vim:set ts=2 sw=2 et: diff --git a/capnproto/PKGBUILD b/capnproto/PKGBUILD new file mode 100644 index 0000000..a19d437 --- /dev/null +++ b/capnproto/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=capnproto +pkgver=0.7.0 +_debver=$pkgver +_debrel=7 +pkgrel=1 +pkgdesc="Cap'n Proto serialization/RPC system" +arch=('i686' 'x86_64') +url='https://capnproto.org/' +license=('Expat') +depends=('gcc-libs' 'glibc' 'zlib') +makedepends=('cmake' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/capnproto/capnproto_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/c/capnproto/capnproto_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('9f8fb5753155798fcf9377a87f984a54d9fc5157c41aa11cd94108a773ca22d6e6952657e2d8079c9806f7de06f316c94957329fa52dbab6207aaa3b52348f04' + 'a9b09b80cb02816d50de1ea5cd0d5a6999a12747fa92052b858400eda625318615c3e7c30bd9d502f9c0c858133a18f9109a1bfd3f3e5fdd8ac6aadeb5856e87') + +prepare() { + mv ${pkgname}-c++-${pkgver} ${pkgname}-${pkgver} + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/01_couldnt.patch || true + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -B build \ + -S . + make VERBOSE=1 -C build +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install -C build + install -vDm 644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 README.txt -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/capstone/PKGBUILD b/capstone/PKGBUILD new file mode 100644 index 0000000..676ed00 --- /dev/null +++ b/capstone/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgbase=capstone +pkgname=('capstone' 'python-capstone') +pkgver=5.0.1 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Lightweight multi-platform, multi-architecture disassembly framework" +url='https://www.capstone-engine.org/index.html' +arch=('i686' 'x86_64') +license=('Modified-BSD') +makedepends=('glibc' 'python' 'python-setuptools' 'quilt') +options=('staticlibs') +source=("https://github.com/aquynh/capstone/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/capstone/capstone_${_debver}-${_debrel}~exp1.debian.tar.xz") +sha512sums=('350aba77ce2d96b5c25764913591ba80e4497177ae0a8b2c820c6755ee8310848fbfc54e7ccac27fafc2dbc6778118ad92c53d1b5cb601d4fa146dec7d7e11e5' + 'da7af494882d5da4388fbc9153b514419528c8130f7f31f61f8214d711fd37a7d128be8b7a7fa131d9671fcd53d8977b214e8c4a398a527787addec2064430ca') + +prepare() { + cd ${pkgbase}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgbase}-${pkgver} + CFLAGS+=" ${CPPFLAGS} -ffat-lto-objects" + make V=1 +} + +package_capstone() { + depends=('glibc') + cd ${pkgbase}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 docs/README -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 LICENSE.TXT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_python-capstone() { + depends=('capstone' 'python') + cd ${pkgbase}-${pkgver}/bindings/python + python setup.py install -O1 --root="${pkgdir}" --prefix=/usr + install -Dm 644 ../../LICENSE.TXT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/catcodec/PKGBUILD b/catcodec/PKGBUILD new file mode 100644 index 0000000..1f57b69 --- /dev/null +++ b/catcodec/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=catcodec +pkgver=1.0.5 +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="A tool for decoding/encoding .cat files for OpenTTD" +arch=('i686' 'x86_64') +url='https://github.com/OpenTTD/catcodec' +license=('GPL-2') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/catcodec/catcodec_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/c/catcodec/catcodec_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('8f8479b90e674515400573228bf0c8cb2ac38e40f861a1747e05f508d97a727b834e9b7505550ef71242f85c444e2db6dd4dad2b9b8577966dd458735f7059ba' + 'ed4e7c0bf58c4f2ef6bdb9374b196f720340924a1cfcf6fd5023479d3fa5ff298f19caff4f71b5dd3608dc7d6ae308875e463f18616feb1f5ada990d87375b9f') + +prepare() { + cd ${srcdir}/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${srcdir}/$pkgname-$pkgver + make prefix=/usr +} + +package() { + cd ${srcdir}/$pkgname-$pkgver + make prefix=/usr DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/catdoc/PKGBUILD b/catdoc/PKGBUILD new file mode 100644 index 0000000..85b7c89 --- /dev/null +++ b/catdoc/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=catdoc +pkgver=0.95 +_debver=0.95 +_debrel=5 +pkgrel=2 +pkgdesc="Extractor for Office- and RTF-files to text" +arch=('i686' 'x86_64') +url='https://www.wagner.pp.ru/~vitus/software/catdoc/' +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +optdepends=('tk: for using wordview') +options=('!makeflags') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/catdoc/catdoc_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/c/catdoc/catdoc_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('7567344662f402fae483e0ef99ffe0f6860a8d80fd3c79651b59be7298907781c3d8b09eddbf6840387ea9f866da0eba301227bfc0726ec4739000f4493e375a' + 'e267ef878b134bce22192829d996d1fe733c400a0a4bd43a548772ca8e48f9f18474b37321c0f8c5b5a89d253600f5f6cf5b6d610db4c9ec5073356cba53a23c') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr --with-wish=/usr/bin/wish + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make installroot="$pkgdir" mandir=/usr/share/man/man1 install + install -d "$pkgdir/usr/share/man/man1" + install -m644 doc/*.1 "$pkgdir/usr/share/man/man1" + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/cbatticon/PKGBUILD b/cbatticon/PKGBUILD new file mode 100644 index 0000000..fe25eb3 --- /dev/null +++ b/cbatticon/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgbase=cbatticon +pkgname=('cbatticon' 'cbatticon-gtk2') +pkgver=1.6.9 +pkgrel=2 +pkgdesc="Lightweight battery icon for the system tray" +arch=('i686' 'x86_64') +url='https://github.com/valr/cbatticon' +license=('GPL-2') +makedepends=('gtk' 'gtk2' 'gettext-tiny') +source=("${pkgbase}-${pkgver}.tar.gz::https://github.com/valr/cbatticon/archive/${pkgver}.tar.gz" + "$pkgbase.desktop") +sha512sums=('bbaef2b24eddc52e3ad63033e063620960aa791f6bcb06cd1b981ca2a4f38450ee2c2177426b171ece2b5fff0db8f360bd9ca9ef1a3351ec9ad1f5ea34f925f4' + '17f819f297629b792076b6803903b858f8989e8908be237a4fd6000a1d6573e8c52fa51330c56729da97375d3a199733dfe1899297611ae40e6a090d2a0136c2') + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + make WITH_NOTIFY=0 WITH_GTK3=0 + + cd "$srcdir" + # GTK+ 3 version + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + make WITH_NOTIFY=0 WITH_GTK3=1 +} + +package_cbatticon-gtk2() { + depends=('gtk2') + conflicts=('cbatticon') + + cd "gtk2" + make PREFIX="$pkgdir/usr" install + install -Dm644 "${srcdir}/$pkgbase.desktop" -t "${pkgdir}/usr/share/applications/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_cbatticon() { + pkgdesc+=' (GTK+ 3 version)' + depends=('gtk') + conflicts=('cbatticon-gtk2') + + cd "gtk3" + make PREFIX="$pkgdir/usr" install + install -Dm644 "${srcdir}/$pkgbase.desktop" -t "${pkgdir}/usr/share/applications/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cbatticon/cbatticon.desktop b/cbatticon/cbatticon.desktop new file mode 100644 index 0000000..131af7a --- /dev/null +++ b/cbatticon/cbatticon.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Battery Icon +Comment=Lightweight battery icon for the system tray +Exec=cbatticon +Icon=battery-full +Type=Application +Terminal=false +StartupNotify=false +Categories=GTK;Utility;System;Monitor;TrayIcon; diff --git a/ccache-legacy/PKGBUILD b/ccache-legacy/PKGBUILD new file mode 100644 index 0000000..dc2c743 --- /dev/null +++ b/ccache-legacy/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=ccache-legacy +_realpkgname=ccache +pkgver=3.7.12 +pkgrel=1 +pkgdesc="Compiler cache that speeds up recompilation by caching previous compilations (legacy version)" +url='https://ccache.dev/' +arch=('i686' 'x86_64') +license=('GPL-3' 'Modified-BSD' 'zlib' 'Python') +provides=('ccache') +conflicts=('ccache') +depends=('glibc' 'zlib') +source=("https://github.com/${_realpkgname}/${_realpkgname}/releases/download/v${pkgver}/${_realpkgname}-${pkgver}.tar.xz") +sha512sums=('0eb47869f86d36b3e5fad0d5073973f0444f3efe23fd14469a9e05154ea219228443098b1c5e4a8a0c5c78b4bfa7623735b50ebd6b8b4d0626766061850d6a62') + +build() { + cd ${_realpkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd ${_realpkgname}-${pkgver} + + install -Dm 755 ccache -t "${pkgdir}/usr/bin" + install -Dm 644 doc/ccache.1 -t "${pkgdir}/usr/share/man/man1" + install -Dm 644 doc/{AUTHORS,MANUAL,NEWS}.adoc README.md -t "${pkgdir}/usr/share/doc/${_realpkgname}" + + install -d "${pkgdir}/usr/lib/ccache/bin" + local _prog + for _prog in gcc g++ c++; do + ln -s /usr/bin/ccache "${pkgdir}/usr/lib/ccache/bin/$_prog" + ln -s /usr/bin/ccache "${pkgdir}/usr/lib/ccache/bin/${CHOST}-$_prog" + done + for _prog in cc clang clang++; do + ln -s /usr/bin/ccache "${pkgdir}/usr/lib/ccache/bin/$_prog" + done + + install -Dm644 LICENSE.adoc GPL-3.0.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ccextractor-legacy/PKGBUILD b/ccextractor-legacy/PKGBUILD new file mode 100644 index 0000000..1e4da40 --- /dev/null +++ b/ccextractor-legacy/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +_realpkgname=ccextractor +pkgname=$_realpkgname-legacy +pkgver=0.93 +pkgrel=1 +pkgdesc="A fast captions extractor for MPEG files (legacy version)" +arch=('i686' 'x86_64') +url='https://www.ccextractor.org' +license=('GPL-2') +depends=('gcc-libs' 'tesseract' 'leptonica' 'ffmpeg') +source=("${_realpkgname}-${pkgver}.tar.gz::https://github.com/CCExtractor/ccextractor/archive/v$pkgver.tar.gz") +sha512sums=('1c6cf58b4231a5db0f58f6dc3bd46a88cbc4e69ba3b15629a4dfbc819c82d55d16ab2f8297d52ed042a055ec53918f5bbce857ddab024e99084c7163e7d2bddc') + +build() { + cd "$srcdir/$_realpkgname-$pkgver/linux" + ./build_hardsubx +} + +package() { + cd "$srcdir/$_realpkgname-$pkgver/linux" + install -Dm755 $_realpkgname -t "$pkgdir/usr/bin/" + install -Dm755 $srcdir/$_realpkgname-$pkgver/LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/ccze/PKGBUILD b/ccze/PKGBUILD new file mode 100644 index 0000000..8ba36f4 --- /dev/null +++ b/ccze/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=ccze +pkgver=0.2.1 +_debver=$pkgver +_debrel=5 +pkgrel=3 +pkgdesc="Robust and modular log colorizer with many plugins" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('ncurses' 'pcre') +makedepends=('quilt') +backup=('etc/cczerc') +source=(https://deb.debian.org/debian/pool/main/${pkgname::1}/${pkgname}/${pkgname}_${_debver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/${pkgname::1}/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('1704da8d4c97a3403a57d7841db8a6e4ba6116e401f91d9ecf1b1371cc18b40641e5665c9414740d6a523874be6b6527f5c0d4f3a3796c7b96ed83192146b2b7' + '160690fa241467ea35bdb77ac1843f8235f6897246b573550d30cfefa0cda30eda9705c5e0b954fd5e30895111b40807e8be97426dc0b89d90549972e1020ae7') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/dpkg-module.patch || true + + quilt push -av + fi + + # killing a bug + sed -e 's/-Wswitch -Wmulticharacter/-Wswitch/' -i src/Makefile.in + sed -e '/#undef error_t/d' -i system.h.in + + autoreconf -vfi +} + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + + install -Dm755 -t "${pkgdir}"/usr/bin src/ccze-dump + + "${pkgdir}"/usr/bin/ccze-dump > "${srcdir}"/cczerc + install -Dm644 -t "${pkgdir}"/etc "${srcdir}"/cczerc + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/cdparanoia/PKGBUILD b/cdparanoia/PKGBUILD new file mode 100644 index 0000000..39ec5ca --- /dev/null +++ b/cdparanoia/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=cdparanoia +pkgver=10.2 +_debver=10.2+debian +_debrel=13 +pkgrel=6 +pkgdesc="Compact Disc Digital Audio extraction tool" +arch=('i686' 'x86_64') +url="https://www.xiph.org/paranoia/" +license=('GPL-2' 'LGPL-2.1') +depends=('glibc') +makedepends=('quilt') +options=('!makeflags' '!staticlibs') +source=(https://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-$pkgver.src.tgz + https://deb.debian.org/debian/pool/main/c/cdparanoia/cdparanoia_3.$_debver-$_debrel.debian.tar.xz + gcc.patch) +sha512sums=('4ab0a0f5ef44d56c1af72d1fc1035566a1a89c4eeddb9e8baea675fe51c06138d913342afc8bed167d9fa55672fa25a2763ce21f7e24c1232e4739aff20733a7' + 'ab7d520ef229335581d5a3111b8912c209df5850ddbc81cfddb2130d7a73c8de14a16782cd1f680d73ec28ddb1059dc37d0a4a44ae42c87198beceea9bca9e60' + '4d86fccc0967dd8d568b97a5b5b92dbe830a7227bee3167371ffc8e7d7f0b99aa0ad4116539c3414f2cc4a600c9bc3fcf06b5d8e4d2fe531dd9d6781736bd1a8') + +prepare() { + cd "${srcdir}/${pkgname}-III-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches debian + + quilt push -av + else + patch -p0 -i ${srcdir}/gcc.patch + fi +} + +build() { + cd "${srcdir}/${pkgname}-III-${pkgver}" + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd "${srcdir}/${pkgname}-III-${pkgver}" + make prefix="${pkgdir}/usr" MANDIR="${pkgdir}/usr/share/man" install + for i in COPYING-{,L}GPL; do + install -Dm644 ${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/cdparanoia/gcc.patch b/cdparanoia/gcc.patch new file mode 100644 index 0000000..b157353 --- /dev/null +++ b/cdparanoia/gcc.patch @@ -0,0 +1,582 @@ +Index: interface/test_interface.c +=================================================================== +--- interface/test_interface.c (Revision 15337) ++++ interface/test_interface.c (Revision 15340) +@@ -66,9 +66,9 @@ + if(!fd)fd=fdopen(d->cdda_fd,"r"); + + if(beginprivate->last_milliseconds=20; ++ d->private_data->last_milliseconds=20; + else +- d->private->last_milliseconds=sectors; ++ d->private_data->last_milliseconds=sectors; + + #ifdef CDDA_TEST_UNDERRUN + sectors-=1; +Index: interface/cdda_interface.h +=================================================================== +--- interface/cdda_interface.h (Revision 15337) ++++ interface/cdda_interface.h (Revision 15340) +@@ -84,7 +84,7 @@ + int is_atapi; + int is_mmc; + +- cdda_private_data_t *private; ++ cdda_private_data_t *private_data; + void *reserved; + unsigned char inqbytes[4]; + +Index: interface/interface.c +=================================================================== +--- interface/interface.c (Revision 15337) ++++ interface/interface.c (Revision 15340) +@@ -39,9 +39,9 @@ + if(d->drive_model)free(d->drive_model); + if(d->cdda_fd!=-1)close(d->cdda_fd); + if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd); +- if(d->private){ +- if(d->private->sg_hd)free(d->private->sg_hd); +- free(d->private); ++ if(d->private_data){ ++ if(d->private_data->sg_hd)free(d->private_data->sg_hd); ++ free(d->private_data); + } + + free(d); +@@ -127,7 +127,7 @@ + } + } + } +- if(ms)*ms=d->private->last_milliseconds; ++ if(ms)*ms=d->private_data->last_milliseconds; + return(sectors); + } + +Index: interface/scsi_interface.c +=================================================================== +--- interface/scsi_interface.c (Revision 15337) ++++ interface/scsi_interface.c (Revision 15340) +@@ -15,13 +15,13 @@ + static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){ + struct timespec tv1; + struct timespec tv2; +- int ret1=clock_gettime(d->private->clock,&tv1); ++ int ret1=clock_gettime(d->private_data->clock,&tv1); + int ret2=ioctl(fd, command,arg); +- int ret3=clock_gettime(d->private->clock,&tv2); ++ int ret3=clock_gettime(d->private_data->clock,&tv2); + if(ret1<0 || ret3<0){ +- d->private->last_milliseconds=-1; ++ d->private_data->last_milliseconds=-1; + }else{ +- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; ++ d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; + } + return ret2; + } +@@ -96,7 +96,7 @@ + static void clear_garbage(cdrom_drive *d){ + fd_set fdset; + struct timeval tv; +- struct sg_header *sg_hd=d->private->sg_hd; ++ struct sg_header *sg_hd=d->private_data->sg_hd; + int flag=0; + + /* clear out any possibly preexisting garbage */ +@@ -185,7 +185,7 @@ + struct timespec tv2; + int tret1,tret2; + int status = 0; +- struct sg_header *sg_hd=d->private->sg_hd; ++ struct sg_header *sg_hd=d->private_data->sg_hd; + long writebytes=SG_OFF+cmd_len+in_size; + + /* generic scsi device services */ +@@ -195,7 +195,7 @@ + + memset(sg_hd,0,sizeof(sg_hd)); + memset(sense_buffer,0,SG_MAX_SENSE); +- memcpy(d->private->sg_buffer,cmd,cmd_len+in_size); ++ memcpy(d->private_data->sg_buffer,cmd,cmd_len+in_size); + sg_hd->twelve_byte = cmd_len == 12; + sg_hd->result = 0; + sg_hd->reply_len = SG_OFF + out_size; +@@ -209,7 +209,7 @@ + tell if the command failed. Scared yet? */ + + if(bytecheck && out_size>in_size){ +- memset(d->private->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); ++ memset(d->private_data->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); + /* the size does not remove cmd_len due to the way the kernel + driver copies buffers */ + writebytes+=(out_size-in_size); +@@ -243,7 +243,7 @@ + } + + sigprocmask (SIG_BLOCK, &(d->sigset), NULL ); +- tret1=clock_gettime(d->private->clock,&tv1); ++ tret1=clock_gettime(d->private_data->clock,&tv1); + errno=0; + status = write(d->cdda_fd, sg_hd, writebytes ); + +@@ -289,7 +289,7 @@ + } + } + +- tret2=clock_gettime(d->private->clock,&tv2); ++ tret2=clock_gettime(d->private_data->clock,&tv2); + errno=0; + status = read(d->cdda_fd, sg_hd, SG_OFF + out_size); + sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL ); +@@ -313,7 +313,7 @@ + if(bytecheck && in_size+cmd_lenprivate->sg_buffer[i]!=bytefill){ ++ if(d->private_data->sg_buffer[i]!=bytefill){ + flag=1; + break; + } +@@ -326,9 +326,9 @@ + + errno=0; + if(tret1<0 || tret2<0){ +- d->private->last_milliseconds=-1; ++ d->private_data->last_milliseconds=-1; + }else{ +- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000; ++ d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000; + } + return(0); + } +@@ -347,7 +347,7 @@ + + memset(&hdr,0,sizeof(hdr)); + memset(sense,0,sizeof(sense)); +- memcpy(d->private->sg_buffer,cmd+cmd_len,in_size); ++ memcpy(d->private_data->sg_buffer,cmd+cmd_len,in_size); + + hdr.cmdp = cmd; + hdr.cmd_len = cmd_len; +@@ -355,7 +355,7 @@ + hdr.mx_sb_len = SG_MAX_SENSE; + hdr.timeout = 50000; + hdr.interface_id = 'S'; +- hdr.dxferp = d->private->sg_buffer; ++ hdr.dxferp = d->private_data->sg_buffer; + hdr.flags = SG_FLAG_DIRECT_IO; /* direct IO if we can get it */ + + /* scary buffer fill hack */ +@@ -400,7 +400,7 @@ + if(bytecheck && in_sizeprivate->sg_buffer[i]!=bytefill){ ++ if(d->private_data->sg_buffer[i]!=bytefill){ + flag=1; + break; + } +@@ -412,7 +412,7 @@ + } + + /* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */ +- /* d->private->last_milliseconds = hdr.duration; */ ++ /* d->private_data->last_milliseconds = hdr.duration; */ + + errno = 0; + return 0; +@@ -445,9 +445,9 @@ + + handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense); + +- key = d->private->sg_buffer[2] & 0xf; +- ASC = d->private->sg_buffer[12]; +- ASCQ = d->private->sg_buffer[13]; ++ key = d->private_data->sg_buffer[2] & 0xf; ++ ASC = d->private_data->sg_buffer[12]; ++ ASCQ = d->private_data->sg_buffer[13]; + + if(key == 2 && ASC == 4 && ASCQ == 1) return 0; + return 1; +@@ -492,7 +492,7 @@ + if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1); + + { +- unsigned char *b=d->private->sg_buffer; ++ unsigned char *b=d->private_data->sg_buffer; + if(b[0])return(1); /* Handles only up to 256 bytes */ + if(b[6])return(1); /* Handles only up to 256 bytes */ + +@@ -604,8 +604,8 @@ + static unsigned int get_orig_sectorsize(cdrom_drive *d){ + if(mode_sense(d,12,0x01))return(-1); + +- d->orgdens = d->private->sg_buffer[4]; +- return(d->orgsize = ((int)(d->private->sg_buffer[10])<<8)+d->private->sg_buffer[11]); ++ d->orgdens = d->private_data->sg_buffer[4]; ++ return(d->orgsize = ((int)(d->private_data->sg_buffer[10])<<8)+d->private_data->sg_buffer[11]); + } + + /* switch CDROM scsi drives to given sector size */ +@@ -664,8 +664,8 @@ + return(-4); + } + +- first=d->private->sg_buffer[2]; +- last=d->private->sg_buffer[3]; ++ first=d->private_data->sg_buffer[2]; ++ last=d->private_data->sg_buffer[3]; + tracks=last-first+1; + + if (last > MAXTRK || first > MAXTRK || last<0 || first<0) { +@@ -683,7 +683,7 @@ + return(-5); + } + { +- scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4); ++ scsi_TOC *toc=(scsi_TOC *)(d->private_data->sg_buffer+4); + + d->disc_toc[i-first].bFlags=toc->bFlags; + d->disc_toc[i-first].bTrack=i; +@@ -704,7 +704,7 @@ + return(-2); + } + { +- scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4); ++ scsi_TOC *toc=(scsi_TOC *)(d->private_data->sg_buffer+4); + + d->disc_toc[i-first].bFlags=toc->bFlags; + d->disc_toc[i-first].bTrack=0xAA; +@@ -738,7 +738,7 @@ + } + + /* copy to our structure and convert start sector */ +- tracks = d->private->sg_buffer[1]; ++ tracks = d->private_data->sg_buffer[1]; + if (tracks > MAXTRK) { + cderror(d,"003: CDROM reporting illegal number of tracks\n"); + return(-3); +@@ -754,33 +754,33 @@ + return(-5); + } + +- d->disc_toc[i].bFlags = d->private->sg_buffer[10]; ++ d->disc_toc[i].bFlags = d->private_data->sg_buffer[10]; + d->disc_toc[i].bTrack = i + 1; + + d->disc_toc[i].dwStartSector= d->adjust_ssize * +- (((signed char)(d->private->sg_buffer[2])<<24) | +- (d->private->sg_buffer[3]<<16)| +- (d->private->sg_buffer[4]<<8)| +- (d->private->sg_buffer[5])); ++ (((signed char)(d->private_data->sg_buffer[2])<<24) | ++ (d->private_data->sg_buffer[3]<<16)| ++ (d->private_data->sg_buffer[4]<<8)| ++ (d->private_data->sg_buffer[5])); + } + + d->disc_toc[i].bFlags = 0; + d->disc_toc[i].bTrack = i + 1; +- memcpy (&foo, d->private->sg_buffer+2, 4); +- memcpy (&bar, d->private->sg_buffer+6, 4); ++ memcpy (&foo, d->private_data->sg_buffer+2, 4); ++ memcpy (&bar, d->private_data->sg_buffer+6, 4); + d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) + + be32_to_cpu(bar)); + + d->disc_toc[i].dwStartSector= d->adjust_ssize * +- ((((signed char)(d->private->sg_buffer[2])<<24) | +- (d->private->sg_buffer[3]<<16)| +- (d->private->sg_buffer[4]<<8)| +- (d->private->sg_buffer[5]))+ ++ ((((signed char)(d->private_data->sg_buffer[2])<<24) | ++ (d->private_data->sg_buffer[3]<<16)| ++ (d->private_data->sg_buffer[4]<<8)| ++ (d->private_data->sg_buffer[5]))+ + +- ((((signed char)(d->private->sg_buffer[6])<<24) | +- (d->private->sg_buffer[7]<<16)| +- (d->private->sg_buffer[8]<<8)| +- (d->private->sg_buffer[9])))); ++ ((((signed char)(d->private_data->sg_buffer[6])<<24) | ++ (d->private_data->sg_buffer[7]<<16)| ++ (d->private_data->sg_buffer[8]<<8)| ++ (d->private_data->sg_buffer[9])))); + + + d->cd_extra = FixupTOC(d,tracks+1); +@@ -817,7 +817,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -836,7 +836,7 @@ + cmd[9] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -854,7 +854,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -872,7 +872,7 @@ + cmd[9] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -890,7 +890,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -908,7 +908,7 @@ + cmd[9] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -922,7 +922,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -936,7 +936,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -950,7 +950,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -964,7 +964,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -978,7 +978,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -992,7 +992,7 @@ + cmd[8] = sectors; + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -1026,7 +1026,7 @@ + + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -1039,7 +1039,7 @@ + + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -1052,7 +1052,7 @@ + + if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) + return(ret); +- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); ++ if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); + return(0); + } + +@@ -1275,7 +1275,7 @@ + static int count_2352_bytes(cdrom_drive *d){ + long i; + for(i=2351;i>=0;i--) +- if(d->private->sg_buffer[i]!=(unsigned char)'\177') ++ if(d->private_data->sg_buffer[i]!=(unsigned char)'\177') + return(((i+3)>>2)<<2); + + return(0); +@@ -1284,7 +1284,7 @@ + static int verify_nonzero(cdrom_drive *d){ + long i,flag=0; + for(i=0;i<2352;i++) +- if(d->private->sg_buffer[i]!=0){ ++ if(d->private_data->sg_buffer[i]!=0){ + flag=1; + break; + } +@@ -1621,7 +1621,7 @@ + d->is_mmc=0; + if(mode_sense(d,22,0x2A)==0){ + +- b=d->private->sg_buffer; ++ b=d->private_data->sg_buffer; + b+=b[3]+4; + + if((b[0]&0x3F)==0x2A){ +@@ -1669,7 +1669,7 @@ + cderror(d,"008: Unable to identify CDROM model\n"); + return(NULL); + } +- return (d->private->sg_buffer); ++ return (d->private_data->sg_buffer); + } + + int scsi_init_drive(cdrom_drive *d){ +@@ -1725,8 +1725,8 @@ + check_cache(d); + + d->error_retry=1; +- d->private->sg_hd=realloc(d->private->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128); +- d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF; ++ d->private_data->sg_hd=realloc(d->private_data->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128); ++ d->private_data->sg_buffer=((unsigned char *)d->private_data->sg_hd)+SG_OFF; + d->report_all=1; + return(0); + } +Index: interface/cooked_interface.c +=================================================================== +--- interface/cooked_interface.c (Revision 15337) ++++ interface/cooked_interface.c (Revision 15340) +@@ -13,13 +13,13 @@ + static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){ + struct timespec tv1; + struct timespec tv2; +- int ret1=clock_gettime(d->private->clock,&tv1); ++ int ret1=clock_gettime(d->private_data->clock,&tv1); + int ret2=ioctl(fd, command,arg); +- int ret3=clock_gettime(d->private->clock,&tv2); ++ int ret3=clock_gettime(d->private_data->clock,&tv2); + if(ret1<0 || ret3<0){ +- d->private->last_milliseconds=-1; ++ d->private_data->last_milliseconds=-1; + }else{ +- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; ++ d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; + } + return ret2; + } +Index: interface/scan_devices.c +=================================================================== +--- interface/scan_devices.c (Revision 15337) ++++ interface/scan_devices.c (Revision 15340) +@@ -264,11 +264,11 @@ + d->interface=COOKED_IOCTL; + d->bigendianp=-1; /* We don't know yet... */ + d->nsectors=-1; +- d->private=calloc(1,sizeof(*d->private)); ++ d->private_data=calloc(1,sizeof(*d->private_data)); + { + /* goddamnit */ + struct timespec tv; +- d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC); ++ d->private_data->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC); + } + idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",description); + return(d); +@@ -674,15 +674,15 @@ + d->bigendianp=-1; /* We don't know yet... */ + d->nsectors=-1; + d->messagedest = messagedest; +- d->private=calloc(1,sizeof(*d->private)); ++ d->private_data=calloc(1,sizeof(*d->private_data)); + { + /* goddamnit */ + struct timespec tv; +- d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC); ++ d->private_data->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC); + } + if(use_sgio){ + d->interface=SGIO_SCSI; +- d->private->sg_buffer=(unsigned char *)(d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE)); ++ d->private_data->sg_buffer=(unsigned char *)(d->private_data->sg_hd=malloc(MAX_BIG_BUFF_SIZE)); + g_fd=d->cdda_fd=dup(d->ioctl_fd); + }else{ + version=verify_SG_version(d,messagedest,messages); +@@ -696,8 +696,8 @@ + } + + /* malloc our big buffer for scsi commands */ +- d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE); +- d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF; ++ d->private_data->sg_hd=malloc(MAX_BIG_BUFF_SIZE); ++ d->private_data->sg_buffer=((unsigned char *)d->private_data->sg_hd)+SG_OFF; + } + + { +@@ -772,9 +772,9 @@ + if(i_fd!=-1)close(i_fd); + if(g_fd!=-1)close(g_fd); + if(d){ +- if(d->private){ +- if(d->private->sg_hd)free(d->private->sg_hd); +- free(d->private); ++ if(d->private_data){ ++ if(d->private_data->sg_hd)free(d->private_data->sg_hd); ++ free(d->private_data); + } + free(d); + } +@@ -821,7 +821,7 @@ + d->interface=TEST_INTERFACE; + d->bigendianp=-1; /* We don't know yet... */ + d->nsectors=-1; +- d->private=calloc(1,sizeof(*d->private)); ++ d->private_data=calloc(1,sizeof(*d->private_data)); + d->drive_model=copystring("File based test interface"); + idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",d->drive_model); + diff --git a/cdrdao/PKGBUILD b/cdrdao/PKGBUILD new file mode 100644 index 0000000..6e50bb9 --- /dev/null +++ b/cdrdao/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=cdrdao +pkgver=1.2.4 +_debver=1.2.4 +_debrel=2 +pkgrel=1 +arch=('i686' 'x86_64') +license=('GPL-2') +url='http://cdrdao.sourceforge.net/' +pkgdesc='Records audio/data CD-Rs in disk-at-once (DAO) mode' +depends=('gcc-libs' 'lame' 'libmad' 'libvorbis' 'libao') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/c/cdrdao/cdrdao_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('41f20275ca44ec9003d0e3ed280cc98012353005cda6f544ebfa44f3f79f991845c0ef17af74db9456f1bacc342a7fd48c9e942d757927a4a9ff91808f7bbb09' + '7e56ac10f8c2a715abc5832ce4a1de61d80d66a118d4b6378e1cb923cf30b1730ed9421b5f3c4cb57b12e1c98df1e15009bdf49e3cc6af9e0371b8c7ea603667') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --sysconfdir=/etc \ + --without-xdao --with-lame \ + --with-ogg-support --with-mp3-support + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/celestia-legacy/PKGBUILD b/celestia-legacy/PKGBUILD new file mode 100644 index 0000000..b3fad01 --- /dev/null +++ b/celestia-legacy/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +_realpkgname=celestia +pkgname=$_realpkgname-legacy +pkgver=1.6.2.2 +pkgrel=1 +pkgdesc="Real-time space simulation (legacy version)" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://celestiaproject.space/' +depends=('libtheora' 'lua' 'gtkglext' 'freeglut' 'libxmu' 'libjpeg-turbo') +makedepends=('gettext-tiny') +options=('!makeflags') +source=("https://github.com/CelestiaProject/Celestia/archive/$pkgver/$_realpkgname-$pkgver.tar.gz" + "fix-desktop.patch") +sha512sums=('a67cc296a3f176bbe74e9c0bf8d83f6a78cc045edb23fbb870ff42dfd0b53a87af83b57ec35d378338f5dc321ead0d719a350a36036cdc3a2817f9c4b0d89ad2' + '13574528ba33f9bb94ed4b505bd5a921ffff92637663dc737f614a0bdce6f6ad1f9d685cf43d20b304b37244d4868909bcad13c82588d071fffd4bc0ff6e5e00') + +prepare() { + cd Celestia-${pkgver} + # fix executable name in desktop file + patch -p1 < ${srcdir}/fix-desktop.patch + autoreconf -vi +} + +build() { + cd Celestia-${pkgver} + ./configure --prefix=/usr \ + --with-lua=/usr \ + --datadir=/usr/share \ + --with-gtk \ + --disable-rpath \ + --with-lua + make +} + +package() { + cd Celestia-${pkgver} + make DESTDIR="${pkgdir}" MKDIR_P='mkdir -p' install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/celestia-legacy/fix-desktop.patch b/celestia-legacy/fix-desktop.patch new file mode 100644 index 0000000..952ccd8 --- /dev/null +++ b/celestia-legacy/fix-desktop.patch @@ -0,0 +1,23 @@ +From 6a4a05730858ecd94db504144b540d7e6f752dc0 Mon Sep 17 00:00:00 2001 +From: Hleb Valoshka <375gnu@gmail.com> +Date: Tue, 30 Mar 2021 14:14:56 +0300 +Subject: [PATCH] [gtk] Fix executable name in celestia.desktop + +Fixes: #898 +--- + src/celestia/gtk/data/celestia.desktop | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/celestia/gtk/data/celestia.desktop b/src/celestia/gtk/data/celestia.desktop +index 196ccda692..e2fe44ba08 100644 +--- a/src/celestia/gtk/data/celestia.desktop ++++ b/src/celestia/gtk/data/celestia.desktop +@@ -2,7 +2,7 @@ + Encoding=UTF-8 + Version=1.0 + Type=Application +-Exec=celestia-gtk ++Exec=celestia + Icon=celestia + X-GNOME-DocPath= + Terminal=false diff --git a/celt/PKGBUILD b/celt/PKGBUILD new file mode 100644 index 0000000..a1ffb58 --- /dev/null +++ b/celt/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=celt +pkgver=0.11.3 +pkgrel=3 +pkgdesc="Low-latency audio communication codec" +arch=(i686 x86_64) +url="http://www.celt-codec.org/" +license=(Simplified-BSD) +depends=(libogg libsndio) +source=(https://downloads.us.xiph.org/releases/$pkgname/$pkgname-$pkgver.tar.gz + sndio.patch) +sha512sums=('1f7b8c9b0fcb3a31ba81c220f89fb15173f6e7a25f8fa9d6669790cf29cccb5f75fb37a9f41c76bec5e8d8b9de47d65949831d5a843dcffb2f0747801a8c9bde' + '306d8e71308cdb2080d24150aaa1df1820ec33de7108c42c7bad9394eb7b327cb910fa9d5091b8d82922ef3e4dcf1e38b2449a3cfe5d7887ee646a0dee941f36') + +prepare() { + cd $pkgname-$pkgver + patch -p1 -i ../sndio.patch +} + +build() { + export CPPFLAGS+=" -DUSE_SNDIO" + cd $pkgname-$pkgver + ./configure --prefix=/usr --enable-custom-modes --disable-static + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/celt/sndio.patch b/celt/sndio.patch new file mode 100644 index 0000000..6f48428 --- /dev/null +++ b/celt/sndio.patch @@ -0,0 +1,92 @@ +diff --git a/tools/Makefile.in b/tools/Makefile.in +index befe111..678f053 100644 +--- a/tools/Makefile.in ++++ b/tools/Makefile.in +@@ -236,7 +236,8 @@ noinst_HEADERS = wav_io.h + celtenc_SOURCES = celtenc.c wav_io.c skeleton.c + celtenc_LDADD = $(top_builddir)/libcelt/libcelt@LIBCELT_SUFFIX@.la $(OGG_LIBS) + celtdec_SOURCES = celtdec.c wav_io.c +-celtdec_LDADD = $(top_builddir)/libcelt/libcelt@LIBCELT_SUFFIX@.la $(OGG_LIBS) ++celtdec_LDADD = $(top_builddir)/libcelt/libcelt@LIBCELT_SUFFIX@.la $(OGG_LIBS) \ ++ -lsndio + all: all-am + + .SUFFIXES: +diff --git a/tools/celtdec.c b/tools/celtdec.c +index 5edbd48..28d6fb8 100644 +--- a/tools/celtdec.c ++++ b/tools/celtdec.c +@@ -66,6 +66,9 @@ + #include + #include + ++#elif defined USE_SNDIO ++#include ++ + #elif defined HAVE_SYS_AUDIOIO_H + #include + #include +@@ -88,6 +91,10 @@ + ((buf[base+1]<<8)&0xff00)| \ + (buf[base]&0xff)) + ++#ifdef USE_SNDIO ++struct sio_hdl *hdl; ++#endif ++ + static void print_comments(char *comments, int length) + { + char *c=comments; +@@ -183,6 +190,32 @@ FILE *out_file_open(char *outFile, int rate, int *channels) + exit(1); + } + fout = fdopen(audio_fd, "w"); ++#elif defined USE_SNDIO ++ struct sio_par par; ++ ++ hdl = sio_open(NULL, SIO_PLAY, 0); ++ if (!hdl) ++ { ++ fprintf(stderr, "Cannot open sndio device\n"); ++ exit(1); ++ } ++ ++ sio_initpar(&par); ++ par.sig = 1; ++ par.bits = 16; ++ par.rate = rate; ++ par.pchan = *channels; ++ ++ if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par) || ++ par.sig != 1 || par.bits != 16 || par.rate != rate) { ++ fprintf(stderr, "could not set sndio parameters\n"); ++ exit(1); ++ } ++ *channels = par.pchan; ++ if (!sio_start(hdl)) { ++ fprintf(stderr, "could not start sndio\n"); ++ exit(1); ++ } + #elif defined HAVE_SYS_AUDIOIO_H + audio_info_t info; + int audio_fd; +@@ -612,6 +645,10 @@ int main(int argc, char **argv) + if (strlen(outFile)==0) + WIN_Play_Samples (out+frame_offset*channels, sizeof(short) * new_frame_size*channels); + else ++#elif defined USE_SNDIO ++ if (strlen(outFile)==0) ++ sio_write (hdl, out+frame_offset*channels, sizeof(short) * new_frame_size*channels); ++ else + #endif + fwrite(out+frame_offset*channels, sizeof(short), new_frame_size*channels, fout); + +@@ -669,5 +706,8 @@ int main(int argc, char **argv) + if (fout != NULL) + fclose(fout); + ++ if (print_bitrate) ++ fprintf (stderr, "\n"); ++ + return 0; + } diff --git a/certbot-nginx/PKGBUILD b/certbot-nginx/PKGBUILD new file mode 100644 index 0000000..a95a9cf --- /dev/null +++ b/certbot-nginx/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=certbot-nginx +pkgver=2.11.0 +pkgrel=1 +pkgdesc="Nginx plugin for Certbot" +arch=('any') +license=('Apache-2.0') +url='https://pypi.python.org/pypi/certbot-nginx' +depends=('certbot' 'python-acme' 'python-mock' 'python-pyopenssl' 'python-pyparsing' + 'python-setuptools' 'python-zope-interface') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/certbot/certbot/releases/download/v${pkgver}/certbot_nginx-${pkgver}.tar.gz") +sha512sums=('974613df76a6d242496a11f10175b6ef9607e5aded5e730103895a41138af055cd6f5643407e2e5ce19659278e6b1e80c6d90ce33feec069a6f6f255260f8cee') + +prepare() { + mv "certbot_nginx-$pkgver" "$pkgname-$pkgver" +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py build +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py install --root="$pkgdir" + install -Dm644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/certbot/PKGBUILD b/certbot/PKGBUILD new file mode 100644 index 0000000..c6dfacf --- /dev/null +++ b/certbot/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=certbot +pkgver=2.11.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="ACME client" +arch=('any') +license=('Apache-2.0') +url='https://certbot.eff.org' +depends=('ca-certificates' 'python-acme' 'python-configargparse' 'python-configobj' + 'python-cryptography' 'python-distro' 'python-parsedatetime' + 'python-pyrfc3339' 'python-pytz' 'python-setuptools' 'python-zope-component' + 'python-zope-interface') +makedepends=('quilt') +optdepends=('certbot-nginx: Nginx plugin for Let’s Encrypt client') +source=("https://pypi.io/packages/source/c/$pkgname/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-certbot/python-certbot_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ddc4d92d5b9df8917cf073a0478d85e4dc739160b7f3f6f667df0a119fef8423f0d36e93fcd7972d6e961e44e11eabcf4889c499f9d10388cd6e89eee019bc34' + '69fa5885ef6fc8f14cc3d36dcfb6e88af7ebe04a01b4a9b08fbcb18cd715f36175e488016f65e43b4d026a579c884bf043b7af8ada4b07ef77377c10c47c93a9') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py build +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py install --root="$pkgdir" + install -d "$pkgdir"/{etc,var/lib,var/log}/letsencrypt + chmod 700 "$pkgdir"/var/log/letsencrypt + install -Dm644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/cgit/PKGBUILD b/cgit/PKGBUILD new file mode 100644 index 0000000..db1aa44 --- /dev/null +++ b/cgit/PKGBUILD @@ -0,0 +1,88 @@ +# Maintainer: Jesus E. + +pkgname=cgit +pkgver=1.2.3 +_debver=$pkgver +_debrel=1 +_gitver=2.25.1 +pkgrel=3 +pkgdesc="A web interface for git written in plain C" +arch=('i686' 'x86_64') +url='https://git.zx2c4.com/cgit/' +license=('GPL-2' 'LGPL-2.1' 'Expat' 'Simplified-BSD' 'ISC' 'Apache-2.0' 'Public-Domain' 'Boost-1.0') +depends=('libressl' 'lua') +makedepends=('zlib' 'curl' 'asciidoc' 'quilt') +optdepends=('groff-headless: about page using man page syntax' + 'python-pygments: syntax highlighting support' + 'python-docutils: about page formatted with reStructuredText' + 'python-markdown: about page formatted with markdown' + 'gzip: gzip compressed snapshots' + 'bzip2: bzip2 compressed snapshots' + 'lzip: lzip compressed snapshots' + 'xz: xz compressed snapshots' + 'mime-types: serve file with correct content-type header') +install=$pkgname.install +source=("https://git.zx2c4.com/cgit/snapshot/cgit-${pkgver}.tar.xz" + "https://www.kernel.org/pub/software/scm/git/git-${_gitver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cgit/cgit_${_debver}+git${_gitver}-${_debrel}.debian.tar.xz") +sha512sums=('58f9bb644b07be49dc51f3ef30a3d0e53699cede3c06b1d6920f3874fe846c83dd2589632aa84357b70ea2d60272448409aa1b892f405d14dd6745f5559b4504' + '1c955f25da190c78750542a2fc81710aed3cd1fa4933b8734c81b00c07bfbf5b1379b555001340d55cdb2b996dd79b116bbfcfc0106940f06676f017907a599c' + '730a860c23c10135e51cc21f71ef8b5b8755b0f5b203e2cadd000f4c285f276cb7a33cdf0dd23c868b0b99fe02a2ee0edd8c1f45097d82d9c573be0cf627eac9') + +_makeopts="NO_ICONV=YesPlease + NO_GETTEXT=YesPlease + NO_TCLTK=YesPlease + NO_SVN_TESTS=YesPlease + NO_REGEX=NeedsStartEnd + LUA_PKGCONFIG=lua5.3 + prefix=/usr" + +prepare() { + cd "$pkgname-$pkgver" + # check that upstream git ver corresponds with our + local _ver=$(awk -F'[ \t]*=[ \t]*' '/^GIT_VER/ { print $2 }' Makefile) + if [ "$_ver" != "$_gitver" ]; then + error "Please set _gitver in APKBUILD to $_ver" + return 1 + fi + + rm -rf git + mv ../git-$_gitver git + if [[ ${pkgver%.*} = ${_debver%.*+*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/add-hardening.patch || true + rm -v debian/patches/debianize-makefile.patch || true + rm -v debian/patches/use-debian-binary-name-rst2html.patch || true + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + make $_makeopts all doc-man +} + +package() { + cd "$pkgname-$pkgver" + + make $_makeopts CGIT_SCRIPT_PATH=/usr/share/webapps/cgit \ + DESTDIR="$pkgdir" install install-man + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + + install -vd "$pkgdir/var/cache/$pkgname" + mkdir -p "$pkgdir/usr/lib/cgit" + mv "$pkgdir/usr/share/webapps/cgit/cgit.cgi" "$pkgdir/usr/lib/cgit" + ln -sf ../../../lib/cgit/cgit.cgi "$pkgdir/usr/share/webapps/cgit/cgit.cgi" + + # remove not needed data for remote services + rm "$pkgdir/usr/lib/cgit/filters/"{email-gravatar.lua,email-libravatar.lua,gentoo-ldap-authentication.lua,email-gravatar.py} +} diff --git a/cgit/cgit.install b/cgit/cgit.install new file mode 100644 index 0000000..e4a407f --- /dev/null +++ b/cgit/cgit.install @@ -0,0 +1,5 @@ +post_install() { + chown -v http:http /var/cache/cgit + echo "==> cgit looks at /etc/cgitrc for configuration. There is" + echo "==> an example configuration file in the cgitrc(5) man page." +} diff --git a/check/PKGBUILD b/check/PKGBUILD new file mode 100644 index 0000000..2786163 --- /dev/null +++ b/check/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=check +pkgver=0.15.2 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="An unit testing framework for C" +url='https://libcheck.github.io/check/' +arch=('i686' 'x86_64') +license=('LGPL-2.1' 'FDL-1.2') +depends=('gawk') +makedepends=('texi2html' 'quilt') +source=("https://github.com/libcheck/check/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/check/check_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('77fb34348bc1b1517801865afee5064121a245c10685e6bb6b8f743552646a0643cfdf9fd3dfbf9b2297d9430dfdd49616cf7daf41298d2dbd699f10d654a025' + 'cd1bdddd6d82829de4ea0a3c2617bbbf19b3c31792f95645662c9182a4b29a4a94fd082137c5ac2118164167cfbd2685c85890b4e0d6a2be8ceedb820e628a51') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/01pkgconfig.patch || true + rm -v debian/patches/02awk.patch || true + + quilt push -av + fi + autoreconf -fvi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-static + make all doc/check_html +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING.LESSER debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/chmlib/PKGBUILD b/chmlib/PKGBUILD new file mode 100644 index 0000000..71447b5 --- /dev/null +++ b/chmlib/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=chmlib +pkgver=0.40a +_realpkgver=0.40 +pkgrel=1 +pkgdesc="Free software library for dealing with ITSS/CHM format files" +arch=('i686' 'x86_64') +url='https://github.com/jedwing/CHMLib' +license=('LGPL-2.1') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/chmlib/chmlib_${pkgver}.orig.tar.gz") +sha512sums=('90e7a2c3af2fa1a9a973aa0de3b2a380337e0ce0054f74d9b0bb81819fe562e4f8467692d595d7f68ea6e2de4f8d74f331e7b9ac6783f63847bd0c0f7abacccd') + +build() { + cd "${srcdir}"/${pkgname}-${_realpkgver} + ./configure \ + --prefix=/usr \ + --enable-examples=yes + make +} + +package() { + cd "${srcdir}"/${pkgname}-${_realpkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/chocolate-doom/PKGBUILD b/chocolate-doom/PKGBUILD new file mode 100644 index 0000000..71885a8 --- /dev/null +++ b/chocolate-doom/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=chocolate-doom +pkgdesc="Historically-accurate 3D game-engine" +pkgver=3.1.0 +pkgrel=2 +arch=('i686' 'x86_64') +url='https://www.chocolate-doom.org/' +license=('GPL-2') +install=$pkgname.install +depends=('libpng' 'libsamplerate' 'sdl2_mixer' 'sdl2_net') +makedepends=('python') +optdepends=('freedm: Free and libre deathmatch game' + 'freedoom: Free and libre action-games' + 'blasphemer: Free and libre dark-fantasy game') +groups=('games') +source=("https://github.com/${pkgname}/${pkgname}/archive/refs/tags/${pkgname}-${pkgver}.tar.gz" + "chocolate-heretic") +sha512sums=('17f65c6f4a48dd1b0aa71bdf495d1036602739f1955d64f7de46157fce912ab4e4344a0f7ad073980f50d67e34f9f5e84402e7f2142cd6364453b71c8d5c2592' + '7ae8de11f633774f57fe3c433dcdbc38483d27fcdfc208191b069dbc6966cf07ea65d8c42711a24ba14d961eb3bed234597afe9d5491a2af181b0613d14e7564') + +prepare() { + mv "${pkgname}-${pkgname}-${pkgver}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + ./autogen.sh +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --bindir=/usr/games + make +} + +package() { + cd "${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + mv "${pkgdir}"/usr/games/chocolate-heretic "${pkgdir}"/usr/games/heretic + install -Dm755 "${srcdir}"/chocolate-heretic -t "${pkgdir}"/usr/games + install -dm 755 "${pkgdir}"/usr/share/games/doom + + # removing content for accessing non-free data + rm "${pkgdir}"/usr/games/{chocolate-hexen*,chocolate-strife*} + rm "${pkgdir}"/usr/share/applications/{org.chocolate_doom.Hexen*,org.chocolate_doom.Strife*} + rm "${pkgdir}"/usr/share/bash-completion/completions/{chocolate-hexen*,chocolate-strife*} + rm -rf "${pkgdir}"/usr/share/doc/{chocolate-hexen*,chocolate-strife*} + rm "${pkgdir}"/usr/share/man/man5/{chocolate-hexen*,chocolate-strife*} + rm "${pkgdir}"/usr/share/man/man5/{hexen*,strife*} + rm "${pkgdir}"/usr/share/man/man6/{chocolate-hexen*,chocolate-strife*} + rm "${pkgdir}"/usr/share/metainfo/{org.chocolate_doom.Hexen,org.chocolate_doom.Strife}.metainfo.xml + + # license + install -Dm644 COPYING.md -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/chocolate-doom/chocolate-doom.install b/chocolate-doom/chocolate-doom.install new file mode 100644 index 0000000..c2a3153 --- /dev/null +++ b/chocolate-doom/chocolate-doom.install @@ -0,0 +1,9 @@ +post_install() { +cat <&2 + exit 1 +} + +IWAD="/usr/share/games/doom/blasphem.wad" +if ! [ -f "$IWAD" ]; then + die "Please install blasphemer first!" +else + heretic -iwad $IWAD +fi diff --git a/chromium-bsu/PKGBUILD b/chromium-bsu/PKGBUILD new file mode 100644 index 0000000..b470a17 --- /dev/null +++ b/chromium-bsu/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=chromium-bsu +pkgver=0.9.16.1 +pkgrel=2 +pkgdesc="A fast paced top scrolling shooter" +arch=('i686' 'x86_64') +url="http://chromium-bsu.sourceforge.net/" +license=('Clarified-Artistic-1.0' 'Expat') +depends=('freeglut' 'glu' 'sdl_image' 'openal' 'freealut' 'ftgl' 'fontconfig') +makedepends=('intltool' 'gettext-tiny') +groups=('games') +source=(https://downloads.sourceforge.net/project/chromium-bsu/Chromium%20B.S.U.%20source%20code/chromium-bsu-$pkgver.tar.gz + use_fabs_for_floats.patch) +sha512sums=('1d202c0704e16b31d93c552ae6cfc17caf1182a9ec80730a981cd99c8ca8cb64d4e6e838691aa86e17ea23b7c2c0b1e7b1f4dab91bbc6129f9bf86801f2b27c8' + '78b0de083c1c11e56aa0e864900c0c2c163f9828505402e63d5eba6092cb2ce2449747c7d5dbd40b96e801f872795a57dc5f247818f4e3d142a3f3af0d4d188d') + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + patch -Np1 -i "$srcdir"/use_fabs_for_floats.patch +} + +build(){ + cd "$srcdir"/$pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games + make LDFLAGS=${LDFLAGS} +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/chromium-bsu/use_fabs_for_floats.patch b/chromium-bsu/use_fabs_for_floats.patch new file mode 100644 index 0000000..daf455d --- /dev/null +++ b/chromium-bsu/use_fabs_for_floats.patch @@ -0,0 +1,26 @@ +diff -aur chromium-bsu-0.9.16/src/MainSDL_Event.cpp chromium-bsu-0.9.16.new/src/MainSDL_Event.cpp +--- chromium-bsu-0.9.16/src/MainSDL_Event.cpp 2016-06-30 17:26:58.000000000 +0200 ++++ chromium-bsu-0.9.16.new/src/MainSDL_Event.cpp 2016-08-14 21:37:55.746045707 +0200 +@@ -515,14 +515,14 @@ + #define KP8 SDLK_KP8 + #define KP9 SDLK_KP9 + #endif +- if( keystate[LEFT] || keystate[KP4] ) key_speed_x -= 2.0 + abs(key_speed_x)*0.4; +- if( keystate[RIGHT] || keystate[KP6] ) key_speed_x += 2.0 + abs(key_speed_x)*0.4; +- if( keystate[UP] || keystate[KP8] ) key_speed_y -= 2.0 + abs(key_speed_y)*0.4; +- if( keystate[DOWN] || keystate[KP2] ) key_speed_y += 2.0 + abs(key_speed_y)*0.4; +- if( keystate[KP7] ){ key_speed_x -= 2.0 + abs(key_speed_x)*0.4; key_speed_y -= 2.0 + abs(key_speed_y)*0.4; } +- if( keystate[KP9] ){ key_speed_x += 2.0 + abs(key_speed_x)*0.4; key_speed_y -= 2.0 + abs(key_speed_y)*0.4; } +- if( keystate[KP3] ){ key_speed_x += 2.0 + abs(key_speed_x)*0.4; key_speed_y += 2.0 + abs(key_speed_y)*0.4; } +- if( keystate[KP1] ){ key_speed_x -= 2.0 + abs(key_speed_x)*0.4; key_speed_y += 2.0 + abs(key_speed_y)*0.4; } ++ if( keystate[LEFT] || keystate[KP4] ) key_speed_x -= 2.0 + fabs(key_speed_x)*0.4; ++ if( keystate[RIGHT] || keystate[KP6] ) key_speed_x += 2.0 + fabs(key_speed_x)*0.4; ++ if( keystate[UP] || keystate[KP8] ) key_speed_y -= 2.0 + fabs(key_speed_y)*0.4; ++ if( keystate[DOWN] || keystate[KP2] ) key_speed_y += 2.0 + fabs(key_speed_y)*0.4; ++ if( keystate[KP7] ){ key_speed_x -= 2.0 + fabs(key_speed_x)*0.4; key_speed_y -= 2.0 + fabs(key_speed_y)*0.4; } ++ if( keystate[KP9] ){ key_speed_x += 2.0 + fabs(key_speed_x)*0.4; key_speed_y -= 2.0 + fabs(key_speed_y)*0.4; } ++ if( keystate[KP3] ){ key_speed_x += 2.0 + fabs(key_speed_x)*0.4; key_speed_y += 2.0 + fabs(key_speed_y)*0.4; } ++ if( keystate[KP1] ){ key_speed_x -= 2.0 + fabs(key_speed_x)*0.4; key_speed_y += 2.0 + fabs(key_speed_y)*0.4; } + //float s = (1.0-game->speedAdj)+(game->speedAdj*0.7); + float s = 0.7; + key_speed_x *= s; diff --git a/chrony/PKGBUILD b/chrony/PKGBUILD new file mode 100644 index 0000000..82d02c3 --- /dev/null +++ b/chrony/PKGBUILD @@ -0,0 +1,82 @@ +# Maintainer: Jesus E. + +pkgname=chrony +pkgver=4.0 +_debver=$pkgver +_debrel=8 +pkgrel=3 +pkgdesc="Lightweight NTP client and server" +url='https://chrony.tuxfamily.org/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libcap' 'libedit' 'libseccomp' 'nettle' 'gnutls') +makedepends=('asciidoctor' 'quilt') +options=('!emptydirs') +backup=('etc/chrony.conf') +source=(https://download.tuxfamily.org/chrony/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/${pkgname::1}/${pkgname}/${pkgname}_${_debver}-${_debrel}+deb11u2.debian.tar.xz + chronyd.confd + chronyd.initd + chronyd.run) +install=${pkgname}.install +sha512sums=('a1c11a386c43f495910f7f2e9b5fbb1652c3631471d182b9b8203dfef98611d11535ad547a879856551263aed0ae2e30e4135b8ed89553684706166bc1c725c9' + '717cbd7a6fffc1bed6105008275c2de292b2998c78eb311d4eda4ac5f3e3c3b99012b4e3c7f38faa3177d231f5bc8894ac51c0514cc05173233a66506aa3bcd9' + '5b83208aeb9a3ff2f21ac786a25f83b7804540b1930397396f5b15a2aba11f36a9bc4de06a88b58280cbc44f5c272bb41b6803463f4ea1c6724d7a9404c88d7f' + 'b75b69e1469f0087a8146154da0a0a3e81a179c186f8bec92aed223b627b4d400b7f0c6b7d02018d0889c6f7bc921df95d1e22ef2577ec670229f003789296cc' + '5844456d316b6b4c6a7154f0f5d3f519d8d492beb673d330f76407e35a726fd4ed09223d846951def6d810626cbcfc1aca8a6e6818ac36aa62a289a8c7265e59') + +prepare() { + cd ${pkgname}-${pkgver} + + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --enable-scfilter \ + --enable-ntp-signd \ + --with-user=chrony \ + --with-sendmail=/usr/bin/sendmail \ + --with-hwclockfile=/etc/adjtime \ + --with-pidfile=/run/chrony/chronyd.pid \ + --chronyrundir=/run/chrony + make V=1 +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install install-docs + + install -Dm 755 ${srcdir}/chronyd.initd "${pkgdir}/etc/init.d/chronyd" + install -Dm 644 ${srcdir}/chronyd.confd "${pkgdir}/etc/conf.d/chronyd" + install -Dm 755 ${srcdir}/chronyd.run "${pkgdir}/etc/sv/chronyd/run" + if [ $(uname -o) = GNU/Linux ]; then + sed -i 's|ARGS=""|ARGS="-m -u chrony"|' "${pkgdir}/etc/conf.d/chronyd" + fi + + install -Dm 644 examples/chrony.logrotate "${pkgdir}/etc/logrotate.d/chrony" + install -Dm 644 README NEWS FAQ -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 examples/* -t "${pkgdir}/usr/share/doc/${pkgname}/examples" + + install -Dm 644 examples/chrony.conf.example3 "${pkgdir}/etc/chrony.conf" + sed -i \ + -e '/^! pool /s/^! //' \ + -e '/^! leapsectz right\/UTC/s/^! //' \ + -e '/^! makestep 1.0 3/s/^! //' \ + -e '/^! rtcsync/s/^! //' \ + "${pkgdir}/etc/chrony.conf" + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/chrony/chrony.install b/chrony/chrony.install new file mode 100644 index 0000000..5a73848 --- /dev/null +++ b/chrony/chrony.install @@ -0,0 +1,22 @@ +post_install() { + getent group chrony 2> /dev/null || groupadd -g 183 chrony > /dev/null + getent passwd chrony 2> /dev/null \ + || useradd -u 183 -g chrony -d /var/lib/chrony \ + -c 'Network Time Protocol' -s /bin/false chrony > /dev/null +} + +post_upgrade() { + if [ $(vercmp $2 1.29.1-2) -le 0 ]; then + getent group chrony 2> /dev/null || groupadd -r -g 183 chrony > /dev/null + getent passwd chrony 2> /dev/null \ + || useradd -r -u 183 -g chrony -d /var/lib/chrony \ + -c 'Network Time Protocol' -s /bin/false chrony > /dev/null + chown -R 183:183 /var/lib/chrony + fi +} + +post_remove() { + getent passwd chrony 2> /dev/null && userdel chrony > /dev/null + getent group chrony 2> /dev/null && groupdel chrony > /dev/null + true +} diff --git a/chrony/chronyd.confd b/chrony/chronyd.confd new file mode 100644 index 0000000..5cdb7eb --- /dev/null +++ b/chrony/chronyd.confd @@ -0,0 +1,20 @@ +# /etc/conf.d/chronyd + +CFGFILE="/etc/chrony.conf" + +# chronyd takes some time to perform a second fork, by enabling this +# option chronyd is deamonized through start-stop-daemon(1) thereby +# significantly reducing the startup time. +FAST_STARTUP=yes + +# Configuration dependant options : +# -s - Set system time from RTC if rtcfile directive present +# -r - Reload sample histories if dumponexit directive present +# +# The combination of "-s -r" allows chronyd to perform long term averaging of +# the gain or loss rate across system reboots and shutdowns. + +ARGS="" + +# vrf e.g 'vrf-mgmt' +#vrf="" diff --git a/chrony/chronyd.initd b/chrony/chronyd.initd new file mode 100644 index 0000000..c7fb048 --- /dev/null +++ b/chrony/chronyd.initd @@ -0,0 +1,32 @@ +#!/sbin/openrc-run + +command="/usr/sbin/chronyd" +description="chronyd - the lightweight network time protocol daemon" +pidfile="/run/chronyd.pid" +required_files="$CFGFILE" +command_args="-f $CFGFILE $ARGS" + +depend() { + need net + after firewall + provide ntp-client ntp-server + use dns +} + +start() { + if [ -c /dev/rtc ]; then + grep -q '^rtcfile' "${CFGFILE}" && command_args="$command_args -s" + fi + grep -q '^dumponexit$' "${CFGFILE}" && command_args="$command_args -r" + if yesno "$FAST_STARTUP"; then + # this option makes it stay in foreground and let openrc do the tracking, + # so we have to set pidfile to a dir that exists earlier. + # the reason this is not the default is because there is no 'readiness', + # self-backgrounding chrony waits for time to sync before continuing, + # and this form does not. + command_args="$command_args -n" + command_background=true + pidfile=/run/chronyd.pid + fi + default_start +} diff --git a/chrony/chronyd.run b/chrony/chronyd.run new file mode 100644 index 0000000..75ee610 --- /dev/null +++ b/chrony/chronyd.run @@ -0,0 +1,3 @@ +#!/bin/sh +install -d -m750 -o chrony -g chrony /var/run/chrony +exec chronyd -n -u chrony diff --git a/chroot-nspawn/PKGBUILD b/chroot-nspawn/PKGBUILD new file mode 100644 index 0000000..92db8d3 --- /dev/null +++ b/chroot-nspawn/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +_pkgname=systemd-nspawn +pkgname=chroot-nspawn +pkgver=0.2.4 +pkgrel=2 +pkgdesc="A $_pkgname wrapper for chroot" +arch=(any) +url="https://git.hyperbola.info:50100/software/$pkgname.git" +license=(GPL-3) +conflicts=(systemd) +source=("https://repo.hyperbola.info:50000/sources/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig}) +sha512sums=('155ee3418056e883d28f2e2dfd4165a78d147fc94b31ea287cf032e1b3ff6a5212fb4ddeeacfb69dc4e69f9c25c321693429f5814e65005ae4b6fd50d3c5f08a' + 'SKIP') +validpgpkeys=('684D54A189305A9CC95446D36B888913DDB59515') # Márcio Silva + +package() { + cd $pkgname-$pkgver + install -d -m755 $pkgdir/usr/bin + + install -m755 $pkgname $pkgdir/usr/bin/$pkgname + ln -s $pkgname $pkgdir/usr/bin/$_pkgname + + install -d -m755 "$pkgdir"/usr/share/licenses/$pkgname + install -m644 COPYING "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/chrpath/PKGBUILD b/chrpath/PKGBUILD new file mode 100644 index 0000000..632f620 --- /dev/null +++ b/chrpath/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=chrpath +pkgver=0.16 +pkgrel=3 +pkgdesc="Change or delete the rpath or runpath in ELF files" +arch=('i686' 'x86_64') +url='https://directory.fsf.org/project/chrpath/' +license=('GPL-2') +depends=('glibc') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/chrpath/chrpath_$pkgver.orig.tar.gz") +sha512sums=('aa04d490f78bff20a56fe20539cec10218c0772a668909eda8324ca825f51e8ef92001e95d9c316e79a145a043c9c327ec94d1a82e104ab408ca1021832745aa') + +build() { + cd "${srcdir}"/$pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + make DESTDIR="${pkgdir}" docdir=/usr/share/doc/chrpath install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/cifs-utils/PKGBUILD b/cifs-utils/PKGBUILD new file mode 100644 index 0000000..467a39a --- /dev/null +++ b/cifs-utils/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=cifs-utils +pkgver=7.0 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="CIFS filesystem user-space tools" +arch=('i686' 'x86_64') +url='https://wiki.samba.org/index.php/LinuxCIFS_utils' +license=('GPL-3') +depends=('libcap-ng' 'keyutils' 'krb5' 'talloc' 'libwbclient') +makedepends=('python-docutils' 'quilt') +source=("https://download.samba.org/pub/linux-cifs/$pkgname/$pkgname-$pkgver.tar.bz2"{,.asc} + "https://deb.debian.org/debian/pool/main/c/cifs-utils/cifs-utils_$_debver-$_debrel.debian.tar.xz") +sha512sums=('4c57741af0c4567a78f352c73caca998881666a5ed36536275cfa775efd66ff1a44ebe539a8ed96c409c5b08a1378266964ce667a27e9fc7f2d43999c63dd0eb' + 'SKIP' + '29a052e740c166ba2563cc59395461f36086fd17b604d2cfda7e76782774861cacc49387f35da7e0471b6e9a290f7581faeb302536cbd8c1f7a3ca5530e3b442') +validpgpkeys=('C699981A31F338706C817650DF5BA9D30642D5A0') #cifs-utils Distribution Verification Key + +prepare() { + # fix install to honor DESTDIR + sed -e 's|cd \$(ROOTSBINDIR)|cd $(DESTDIR)$(ROOTSBINDIR)|g' -i $pkgname-$pkgver/Makefile.am + + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --disable-systemd + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir" ROOTSBINDIR="/usr/sbin" install + mkdir -p "$pkgdir"/etc/request-key.d + install -m 644 contrib/request-key.d/cifs.idmap.conf "$pkgdir"/etc/request-key.d + install -m 644 contrib/request-key.d/cifs.spnego.conf "$pkgdir"/etc/request-key.d + + # set mount.cifs uid, to enable none root mounting from fstab + chmod +s "$pkgdir"/usr/sbin/mount.cifs + + mkdir -p "$pkgdir"/etc/cifs-utils + ln -s /usr/lib/cifs-utils/idmapwb.so "${pkgdir}"/etc/cifs-utils/idmap-plugin + + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/clang/PKGBUILD b/clang/PKGBUILD new file mode 100644 index 0000000..4f92787 --- /dev/null +++ b/clang/PKGBUILD @@ -0,0 +1,126 @@ +# Maintainer: Jesus E. + +pkgname=clang +pkgver=11.0.0 +pkgrel=3 +pkgdesc="C language family frontend for LLVM" +arch=('i686' 'x86_64') +url="https://clang.llvm.org/" +license=('custom:Apache-2.0+LLVM-Exceptions') +depends=('llvm-libs' 'gcc' 'compiler-rt') +makedepends=('llvm' 'cmake' 'ninja' 'python-sphinx' 'tauthon') +optdepends=('python: for scan-view and git-clang-format' + 'llvm: referenced by some clang headers') +provides=("clang-analyzer=$pkgver" "clang-tools-extra=$pkgver") +conflicts=('clang-analyzer' 'clang-tools-extra') +replaces=('clang-analyzer' 'clang-tools-extra') +_source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($_source_base/$pkgname-$pkgver.src.tar.xz + $_source_base/clang-tools-extra-$pkgver.src.tar.xz + $_source_base/llvm-$pkgver.src.tar.xz + enable-SSP-and-PIE-by-default.patch) +sha512sums=('5874d99d05aa6ac0a7f5131a8522440ca1fc332a63cbfbf92f844ecb03e7f698a1839106fe6d1c8efaa839d03a4547cda5ab40f445d9923b99907d8cf1988276' + '48d3ae04556f2c3102462053e40e228ddfffb7d19f20552faa18acea763d8d568cf65232cbb4ae03505dcb8b626eb3516b5c5004f5ca1c556129510872e28fc1' + 'b3e92091ac48772edc0c30801218ce646ef374e1968baab91df9005f58e11c3ce149b2c4c655c7001f8554fd337caa02c08783bc736153bf58f35fe008e624a4' + '6329b0b4544abbd3e6cafa703e6538d84fe758afc0b733a883c5fca262d1d7bc9ba71be5928705953da1fcef5c0a8b97cf28c198cc51bf89f1a911e0bf7cd1fa') + +# Utilizing LLVM_DISTRIBUTION_COMPONENTS to avoid +# installing static libraries; inspired by Gentoo +_get_distribution_components() { + local target + ninja -t targets | grep -Po 'install-\K.*(?=-stripped:)' | while read -r target; do + case $target in + clang-libraries|distribution) + continue + ;; + clang-tidy-headers) + continue + ;; + clang|clangd|clang-*) + ;; + clang*|findAllSymbols) + continue + ;; + esac + echo $target + done +} + +prepare() { + cd "$srcdir/$pkgname-$pkgver.src" + mkdir build + mv "$srcdir/clang-tools-extra-$pkgver.src" tools/extra + patch -Np2 -i ../enable-SSP-and-PIE-by-default.patch +} + +build() { + cd "$srcdir/$pkgname-$pkgver.src/build" + + local cmake_args=( + -G Ninja + -DCMAKE_BUILD_TYPE=Release + -DCMAKE_INSTALL_PREFIX=/usr + -DPYTHON_EXECUTABLE=/usr/bin/python + -DLLVM_LINK_LLVM_DYLIB=ON + -DCLANG_LINK_CLANG_DYLIB=ON + -DLLVM_ENABLE_RTTI=ON + -DLLVM_BUILD_TESTS=ON + -DLLVM_INCLUDE_DOCS=ON + -DLLVM_BUILD_DOCS=ON + -DLLVM_ENABLE_SPHINX=ON + -DSPHINX_WARNINGS_AS_ERRORS=OFF + -DLLVM_EXTERNAL_LIT=/usr/bin/lit + -DLLVM_MAIN_SRC_DIR="$srcdir/llvm-$pkgver.src" + ) + + cmake .. "${cmake_args[@]}" + local distribution_components=$(_get_distribution_components | paste -sd\;) + test -n "$distribution_components" + cmake_args+=(-DLLVM_DISTRIBUTION_COMPONENTS="$distribution_components") + + cmake .. "${cmake_args[@]}" + ninja +} + +_tauthon_optimize() { + tauthon -m compileall "$@" + tauthon -O -m compileall "$@" +} + +_python_optimize() { + python -m compileall "$@" + python -O -m compileall "$@" + python -OO -m compileall "$@" +} + +package() { + cd "$srcdir/$pkgname-$pkgver.src/build" + + DESTDIR="$pkgdir" ninja install-distribution + install -Dm644 ../LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + # Remove documentation sources + rm -r "$pkgdir"/usr/share/doc/clang{,-tools}/html/{_sources,.buildinfo} + + # Install Tauthon bindings + install -d "$pkgdir/usr/lib/tauthon2.8/site-packages" + cp -a ../bindings/python/clang "$pkgdir/usr/lib/tauthon2.8/site-packages/" + _tauthon_optimize "$pkgdir/usr/lib/tauthon2.8" + + # Install Python bindings + install -d "$pkgdir/usr/lib/python3.8/site-packages" + cp -a ../bindings/python/clang "$pkgdir/usr/lib/python3.8/site-packages/" + _python_optimize "$pkgdir/usr/lib/python3.8" + + # Fix shebang in Tauthon script + sed -i '\|/usr/bin/env| s|python$|tauthon|' \ + "$pkgdir"/usr/share/$pkgname/run-find-all-symbols.py + + # Compile Tauthon scripts + _tauthon_optimize "$pkgdir/usr/share/clang" + + # Compile Python scripts + _python_optimize "$pkgdir/usr/share" -x 'clang-include-fixer|run-find-all-symbols' +} + +# vim:set ts=2 sw=2 et: diff --git a/clang/enable-SSP-and-PIE-by-default.patch b/clang/enable-SSP-and-PIE-by-default.patch new file mode 100644 index 0000000..de3817a --- /dev/null +++ b/clang/enable-SSP-and-PIE-by-default.patch @@ -0,0 +1,336 @@ +From bb7bdc61f8a80db9aa16370d9c9fd0ae7be825cc Mon Sep 17 00:00:00 2001 +From: Evangelos Foutras +Date: Mon, 12 Oct 2020 16:40:41 +0300 +Subject: [PATCH] Enable SSP and PIE by default + +This is a minimal set of changes needed to make clang use SSP and PIE by +default on Arch Linux. Tests that were easy to adjust have been changed +accordingly; only test/Driver/linux-ld.c has been marked as "expected +failure" due to the number of changes it would require (mostly replacing +crtbegin.o with crtbeginS.o). + +Doing so is needed in order to align clang with the new default GCC +behavior in Arch which generates PIE executables by default and also +defaults to -fstack-protector-strong. It is not meant to be a long term +solution, but a simple temporary fix. + +Hopefully these changes will be obsoleted by the introduction upstream +of a compile-time option (https://bugs.llvm.org/show_bug.cgi?id=13410) +--- + clang/lib/Driver/ToolChains/Linux.cpp | 14 ++++++++++++-- + clang/lib/Driver/ToolChains/Linux.h | 1 + + clang/test/Driver/cross-linux.c | 16 ++++++++-------- + clang/test/Driver/env.c | 2 +- + clang/test/Driver/fsanitize.c | 14 +++++++------- + clang/test/Driver/gcc-toolchain.cpp | 2 +- + clang/test/Driver/hexagon-toolchain-elf.c | 2 +- + clang/test/Driver/linux-as.c | 4 ++-- + clang/test/Driver/linux-ld.c | 2 ++ + clang/test/Driver/ppc-abi.c | 16 +++++++++------- + clang/test/Driver/riscv32-toolchain.c | 4 ++-- + clang/test/Driver/riscv64-toolchain.c | 4 ++-- + clang/test/Driver/stack-protector.c | 4 ++-- + 13 files changed, 50 insertions(+), 35 deletions(-) + +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index 180350476c3..119f32ceec6 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -819,8 +819,18 @@ void Linux::AddIAMCUIncludeArgs(const ArgList &DriverArgs, + } + + bool Linux::isPIEDefault() const { +- return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || +- getTriple().isMusl() || getSanitizerArgs().requiresPIE(); ++ const bool IsMips = getTriple().isMIPS(); ++ const bool IsAndroid = getTriple().isAndroid(); ++ ++ if (IsMips || IsAndroid) ++ return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || ++ getTriple().isMusl() || getSanitizerArgs().requiresPIE(); ++ ++ return true; ++} ++ ++unsigned Linux::GetDefaultStackProtectorLevel(bool KernelOrKext) const { ++ return 2; + } + + bool Linux::isNoExecStackDefault() const { +diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h +index 6b16b0e6499..d0024110aef 100644 +--- a/clang/lib/Driver/ToolChains/Linux.h ++++ b/clang/lib/Driver/ToolChains/Linux.h +@@ -39,6 +39,7 @@ public: + bool isPIEDefault() const override; + bool isNoExecStackDefault() const override; + bool IsMathErrnoDefault() const override; ++ unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override; + SanitizerMask getSupportedSanitizers() const override; + void addProfileRTLibs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const override; +diff --git a/clang/test/Driver/cross-linux.c b/clang/test/Driver/cross-linux.c +index 6c2dab26069..c28c5653e34 100644 +--- a/clang/test/Driver/cross-linux.c ++++ b/clang/test/Driver/cross-linux.c +@@ -42,8 +42,8 @@ + // CHECK-MULTI32-I386: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0/../../../../i386-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI32-I386: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI32-I386: "-m" "elf_i386" +-// CHECK-MULTI32-I386: "crti.o" "[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0]]{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI32-I386: "-L[[gcc_install]]" ++// CHECK-MULTI32-I386: "crti.o" "crtbeginS.o" ++// CHECK-MULTI32-I386: "-L[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0]]" + // CHECK-MULTI32-I386: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib/../lib32" + // CHECK-MULTI32-I386: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib" + // CHECK-MULTI32-I386: "-L[[sysroot]]/lib" +@@ -60,8 +60,8 @@ + // CHECK-MULTI32-X86-64: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0/../../../../i386-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI32-X86-64: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI32-X86-64: "-m" "elf_x86_64" +-// CHECK-MULTI32-X86-64: "crti.o" "[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0]]/64{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI32-X86-64: "-L[[gcc_install]]/64" ++// CHECK-MULTI32-X86-64: "crti.o" "crtbeginS.o" ++// CHECK-MULTI32-X86-64: "-L[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/4.6.0]]/64" + // CHECK-MULTI32-X86-64: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib/../lib64" + // CHECK-MULTI32-X86-64: "-L[[gcc_install]]" + // CHECK-MULTI32-X86-64: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib" +@@ -79,8 +79,8 @@ + // CHECK-MULTI64-I386: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI64-I386: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI64-I386: "-m" "elf_i386" +-// CHECK-MULTI64-I386: "crti.o" "[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0]]/32{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI64-I386: "-L[[gcc_install]]/32" ++// CHECK-MULTI64-I386: "crti.o" "crtbeginS.o" ++// CHECK-MULTI64-I386: "-L[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0]]/32" + // CHECK-MULTI64-I386: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib/../lib32" + // CHECK-MULTI64-I386: "-L[[gcc_install]]" + // CHECK-MULTI64-I386: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib" +@@ -98,8 +98,8 @@ + // CHECK-MULTI64-X86-64: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI64-X86-64: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI64-X86-64: "-m" "elf_x86_64" +-// CHECK-MULTI64-X86-64: "crti.o" "[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0]]{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI64-X86-64: "-L[[gcc_install]]" ++// CHECK-MULTI64-X86-64: "crti.o" "crtbeginS.o" ++// CHECK-MULTI64-X86-64: "-L[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/4.6.0]]" + // CHECK-MULTI64-X86-64: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib/../lib64" + // CHECK-MULTI64-X86-64: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib" + // CHECK-MULTI64-X86-64: "-L[[sysroot]]/lib" +diff --git a/clang/test/Driver/env.c b/clang/test/Driver/env.c +index 0371bc91c4a..ea89f525121 100644 +--- a/clang/test/Driver/env.c ++++ b/clang/test/Driver/env.c +@@ -20,7 +20,7 @@ + // + // CHECK-LD-32-NOT: warning: + // CHECK-LD-32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" +-// CHECK-LD-32: "{{.*}}/usr/lib/gcc/i386-unknown-linux/4.6.0{{/|\\\\}}crtbegin.o" ++// CHECK-LD-32: "crtbeginS.o" + // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0" + // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0/../../../../i386-unknown-linux/lib" + // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/4.6.0/../../.." +diff --git a/clang/test/Driver/fsanitize.c b/clang/test/Driver/fsanitize.c +index 7340bfb35e4..681bb90b50e 100644 +--- a/clang/test/Driver/fsanitize.c ++++ b/clang/test/Driver/fsanitize.c +@@ -329,15 +329,15 @@ + // RUN: %clang -target x86_64-linux-gnu -fsanitize=vptr -fno-sanitize=vptr -fsanitize=undefined,address %s -### 2>&1 + // OK + +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target x86_64-unknown-freebsd -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target aarch64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target arm-linux-androideabi -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIC-NO-PIE + // RUN: %clang -target arm-linux-androideabi24 -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target aarch64-linux-android -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE +-// RUN: %clang -target i386-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE ++// RUN: %clang -target i386-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + + // CHECK-NO-PIE-NOT: "-pie" + // CHECK-NO-PIE: "-mrelocation-model" "static" +@@ -662,12 +662,12 @@ + // RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NOSP + // NOSP-NOT: "-fsanitize=safe-stack" + +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target x86_64-linux-gnu -fsanitize=address,safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP-ASAN + // RUN: %clang -target x86_64-linux-gnu -fstack-protector -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SP +-// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP +-// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP ++// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP ++// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target i386-contiki-unknown -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP + // NO-SP-NOT: stack-protector + // NO-SP: "-fsanitize=safe-stack" +diff --git a/clang/test/Driver/gcc-toolchain.cpp b/clang/test/Driver/gcc-toolchain.cpp +index 6c872f4255c..f5006d1dd9a 100644 +--- a/clang/test/Driver/gcc-toolchain.cpp ++++ b/clang/test/Driver/gcc-toolchain.cpp +@@ -26,6 +26,6 @@ + // the same precise formatting of the path as the '-internal-system' flags + // above, so we just blanket wildcard match the 'crtbegin.o'. + // CHECK: "{{[^"]*}}ld{{(.exe)?}}" +-// CHECK: "{{[^"]*}}/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5{{/|\\\\}}crtbegin.o" ++// CHECK: "crtbeginS.o" + // CHECK: "-L[[TOOLCHAIN]]/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5" + // CHECK: "-L[[TOOLCHAIN]]/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5/../../../.." +diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c +index cc11f9fcba9..1fe8b5db587 100644 +--- a/clang/test/Driver/hexagon-toolchain-elf.c ++++ b/clang/test/Driver/hexagon-toolchain-elf.c +@@ -487,7 +487,7 @@ + // RUN: %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK042 %s + // CHECK042: "-cc1" +-// CHECK042: "-mrelocation-model" "static" ++// CHECK042: "-mrelocation-model" "pic" + // CHECK042: "-mllvm" "-hexagon-small-data-threshold=8" + // CHECK042-NEXT: llvm-mc + // CHECK042: "-gpsize=8" +diff --git a/clang/test/Driver/linux-as.c b/clang/test/Driver/linux-as.c +index 0959bd7ba0a..4056a672b6f 100644 +--- a/clang/test/Driver/linux-as.c ++++ b/clang/test/Driver/linux-as.c +@@ -164,7 +164,7 @@ + // CHECK-PPC-NO-MCPU-NOT: as{{.*}} "-mcpu=invalid-cpu" + // + // RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \ +-// RUN: -no-integrated-as -c %s 2>&1 \ ++// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK-SPARCV9 %s + // CHECK-SPARCV9: as + // CHECK-SPARCV9: -64 +@@ -173,7 +173,7 @@ + // CHECK-SPARCV9: -o + // + // RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \ +-// RUN: -no-integrated-as -fpic -c %s 2>&1 \ ++// RUN: -no-integrated-as -c %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK-SPARCV9PIC %s + // CHECK-SPARCV9PIC: as + // CHECK-SPARCV9PIC: -64 +diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c +index ec539522c25..caf96020a15 100644 +--- a/clang/test/Driver/linux-ld.c ++++ b/clang/test/Driver/linux-ld.c +@@ -1,3 +1,5 @@ ++// XFAIL: linux ++ + // General tests that ld invocations on Linux targets sane. Note that we use + // sysroot to make these tests independent of the host system. + // +diff --git a/clang/test/Driver/ppc-abi.c b/clang/test/Driver/ppc-abi.c +index aef8d8576ad..ec595f4cd96 100644 +--- a/clang/test/Driver/ppc-abi.c ++++ b/clang/test/Driver/ppc-abi.c +@@ -1,9 +1,9 @@ + // Check passing PowerPC ABI options to the backend. + + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: | FileCheck -check-prefix=CHECK-ELFv1 %s ++// RUN: | FileCheck -check-prefix=CHECK-ELFv1-PIE %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=elfv1 | FileCheck -check-prefix=CHECK-ELFv1 %s ++// RUN: -mabi=elfv1 | FileCheck -check-prefix=CHECK-ELFv1-PIE %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ + // RUN: -mabi=elfv1-qpx | FileCheck -check-prefix=CHECK-ELFv1-QPX %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +@@ -11,9 +11,9 @@ + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ + // RUN: -mcpu=a2 -mqpx | FileCheck -check-prefix=CHECK-ELFv1-QPX %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mcpu=a2q -mno-qpx | FileCheck -check-prefix=CHECK-ELFv1 %s ++// RUN: -mcpu=a2q -mno-qpx | FileCheck -check-prefix=CHECK-ELFv1-PIE %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2-BE %s ++// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2-BE-PIE %s + + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK-ELFv2 %s +@@ -33,11 +33,13 @@ + + // CHECK-ELFv1: "-mrelocation-model" "static" + // CHECK-ELFv1: "-target-abi" "elfv1" +-// CHECK-ELFv1-LE: "-mrelocation-model" "static" ++// CHECK-ELFv1-PIE: "-mrelocation-model" "pic" "-pic-level" "2" ++// CHECK-ELFv1-PIE: "-target-abi" "elfv1" ++// CHECK-ELFv1-LE: "-mrelocation-model" "pic" "-pic-level" "2" + // CHECK-ELFv1-LE: "-target-abi" "elfv1" +-// CHECK-ELFv1-QPX: "-mrelocation-model" "static" ++// CHECK-ELFv1-QPX: "-mrelocation-model" "pic" "-pic-level" "2" + // CHECK-ELFv1-QPX: "-target-abi" "elfv1-qpx" +-// CHECK-ELFv2: "-mrelocation-model" "static" ++// CHECK-ELFv2: "-mrelocation-model" "pic" "-pic-level" "2" + // CHECK-ELFv2: "-target-abi" "elfv2" + // CHECK-ELFv2-BE: "-mrelocation-model" "static" + // CHECK-ELFv2-BE: "-target-abi" "elfv2" +diff --git a/clang/test/Driver/riscv32-toolchain.c b/clang/test/Driver/riscv32-toolchain.c +index b83c9aafcbf..15b6f6496b2 100644 +--- a/clang/test/Driver/riscv32-toolchain.c ++++ b/clang/test/Driver/riscv32-toolchain.c +@@ -81,7 +81,7 @@ + // C-RV32-LINUX-MULTI-ILP32: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV32-LINUX-MULTI-ILP32: "-m" "elf32lriscv" + // C-RV32-LINUX-MULTI-ILP32: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32.so.1" +-// C-RV32-LINUX-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32{{/|\\\\}}crtbegin.o" ++// C-RV32-LINUX-MULTI-ILP32: "crtbeginS.o" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32" +@@ -96,7 +96,7 @@ + // C-RV32-LINUX-MULTI-ILP32D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV32-LINUX-MULTI-ILP32D: "-m" "elf32lriscv" + // C-RV32-LINUX-MULTI-ILP32D: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32d.so.1" +-// C-RV32-LINUX-MULTI-ILP32D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d{{/|\\\\}}crtbegin.o" ++// C-RV32-LINUX-MULTI-ILP32D: "crtbeginS.o" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32d" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32d" +diff --git a/clang/test/Driver/riscv64-toolchain.c b/clang/test/Driver/riscv64-toolchain.c +index 5df069eb9fd..2617551ec35 100644 +--- a/clang/test/Driver/riscv64-toolchain.c ++++ b/clang/test/Driver/riscv64-toolchain.c +@@ -81,7 +81,7 @@ + // C-RV64-LINUX-MULTI-LP64: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV64-LINUX-MULTI-LP64: "-m" "elf64lriscv" + // C-RV64-LINUX-MULTI-LP64: "-dynamic-linker" "/lib/ld-linux-riscv64-lp64.so.1" +-// C-RV64-LINUX-MULTI-LP64: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64{{/|\\\\}}crtbegin.o" ++// C-RV64-LINUX-MULTI-LP64: "crtbeginS.o" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib64/lp64" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib64/lp64" +@@ -96,7 +96,7 @@ + // C-RV64-LINUX-MULTI-LP64D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV64-LINUX-MULTI-LP64D: "-m" "elf64lriscv" + // C-RV64-LINUX-MULTI-LP64D: "-dynamic-linker" "/lib/ld-linux-riscv64-lp64d.so.1" +-// C-RV64-LINUX-MULTI-LP64D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64d{{/|\\\\}}crtbegin.o" ++// C-RV64-LINUX-MULTI-LP64D: "crtbeginS.o" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64d" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib64/lp64d" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib64/lp64d" +diff --git a/clang/test/Driver/stack-protector.c b/clang/test/Driver/stack-protector.c +index a3e40b50eed..dfffe0d6cf8 100644 +--- a/clang/test/Driver/stack-protector.c ++++ b/clang/test/Driver/stack-protector.c +@@ -3,11 +3,11 @@ + // NOSSP-NOT: "-stack-protector-buffer-size" + + // RUN: %clang -target i386-unknown-linux -fstack-protector -### %s 2>&1 | FileCheck %s -check-prefix=SSP +-// SSP: "-stack-protector" "1" ++// SSP: "-stack-protector" "2" + // SSP-NOT: "-stack-protector-buffer-size" + + // RUN: %clang -target i386-unknown-linux -fstack-protector --param ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-BUF +-// SSP-BUF: "-stack-protector" "1" ++// SSP-BUF: "-stack-protector" "2" + // SSP-BUF: "-stack-protector-buffer-size" "16" + + // RUN: %clang -target i386-pc-openbsd -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD diff --git a/claws-mail-gtk2/PKGBUILD b/claws-mail-gtk2/PKGBUILD new file mode 100644 index 0000000..67b662c --- /dev/null +++ b/claws-mail-gtk2/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgname=claws-mail-gtk2 +realpkgname=claws-mail +pkgver=3.19.1 +pkgrel=2 +pkgdesc="A GTK+2 based e-mail client" +arch=('i686' 'x86_64') +license=('GPL-3') +conflicts=('claws-mail') +provides=('claws-mail') +url='https://www.claws-mail.org' +depends=('gtk2' 'gnutls' 'startup-notification' 'enchant' 'gpgme' + 'libetpan' 'compface' 'libsm') +makedepends=('poppler-glib' 'libytnef' 'libical' + 'bogofilter' 'valgrind' 'dillo' 'python' 'gumbo-parser' 'intltool' 'gettext-tiny') +optdepends=('perl: needed for perl plugin' + 'bogofilter: adds support for spamfiltering' + 'libxml2: for rssyl plugins' + 'curl: for vcalendar, rssyl and spamreport plugins' + 'libarchive: for archive plugin and various other plugins' + 'libytnef: for tnef_parse plugin' + 'poppler-glib: for pdf viewer plugin' + 'ghostscript: for pdf viewer plugin' + 'libical: for vcalendar plugin' + 'dillo: for html viewer plugin' + 'gumbo-parser: for litehtml plugin') +source=("https://www.claws-mail.org/releases/${realpkgname}-${pkgver}.tar.gz" + "bash_completion" + "rework-defs.patch" + "uintptr_t.patch") +sha512sums=('f32eecb68162163eda707457dd98fecdc7c0a4b040521e2e789507e74fdcd35f0de3b6c6ced45cfc7d98278327ab9dfc5ebd3a43de856702ad0efb2cbaab3a35' + '4779669133d077aaa52fc171d693b7ba93208cbc6fee5234550aa3f66ec12e5a5d200aab420ab9ceff65a9509cab3f643280b7b64a35d085d1e64a202d9f7c28' + '327d4c8f065405108391f7baf9af0c57db8294dc2da3df58cab2031a748414da3a959a51aad78797a61fde541dda30a99be6669f5ba57317b854ff0bc5e66188' + 'bfa5911070d60fb979fce6776aa416b2a6bc0fec7a174b40698f3b8ced57fb2cc6235ba4209ffe1fe8a513e297f67aa804dd01f7d1414df7619c9c8622fabe17') + +prepare() { + cd "${realpkgname}"-${pkgver} + patch -Np1 -i ${srcdir}/rework-defs.patch + patch -Np0 < ${srcdir}/uintptr_t.patch +} + +build() { + cd "${realpkgname}"-${pkgver} + ./configure --prefix=/usr --disable-static \ + --enable-enchant \ + --enable-gnutls \ + --enable-ldap \ + --enable-crash-dialog \ + --enable-pgpmime-plugin \ + --enable-bogofilter-plugin \ + --disable-dbus \ + --disable-networkmanager \ + --disable-gdata-plugin \ + --disable-notification-plugin \ + --disable-spamassassin-plugin \ + --disable-fancy-plugin + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${realpkgname}"-${pkgver} + make DESTDIR="${pkgdir}" install + + install -Dm 644 "$srcdir"/bash_completion "${pkgdir}"/usr/share/bash-completion/completions/claws-mail + + # license + install -Dm644 "${srcdir}/${realpkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/claws-mail-gtk2/bash_completion b/claws-mail-gtk2/bash_completion new file mode 100644 index 0000000..dcbcc89 --- /dev/null +++ b/claws-mail-gtk2/bash_completion @@ -0,0 +1,30 @@ +# claws-mail(1) completion +_claws-mail() +{ + local cur prev words cword + _init_completion || return + + case $prev in + --help|-h|--version|-v|--version-full|-V) + return + ;; + --alternate-config-dir) + COMPREPLY=( $( find . -maxdepth 2 -name clawsrc | sed 's,/clawsrc,,' ) ) + return + ;; + --select|--status|--status-full) + _filedir -d + return + ;; + --compose-from-file|--attach) + _filedir + return + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) ) + return + fi +} && +complete -F _claws-mail claws-mail diff --git a/claws-mail-gtk2/rework-defs.patch b/claws-mail-gtk2/rework-defs.patch new file mode 100644 index 0000000..3335394 --- /dev/null +++ b/claws-mail-gtk2/rework-defs.patch @@ -0,0 +1,13 @@ +--- a/src/common/defs.h 2020-10-19 12:37:56.000000000 +0200 ++++ b/src/common/defs.h 2021-09-22 01:14:47.507010589 +0200 +@@ -120,8 +120,8 @@ + /* #define DEFAULT_INC_PATH "/usr/bin/imget" */ + /* #define DEFAULT_INC_PROGRAM "imget" */ + #define DEFAULT_SENDMAIL_CMD "/usr/sbin/sendmail -t -i" +-#define DEFAULT_BROWSER_CMD "firefox '%s'" +-#define DEFAULT_EDITOR_CMD "gedit '%s'" ++#define DEFAULT_BROWSER_CMD "iceweasel-uxp '%s'" ++#define DEFAULT_EDITOR_CMD "l3afpad '%s'" + #define DEFAULT_MIME_CMD "metamail -d -b -x -c %s '%s'" + #define DEFAULT_IMAGE_VIEWER_CMD "display '%s'" + #define DEFAULT_AUDIO_PLAYER_CMD "play '%s'" diff --git a/claws-mail-gtk2/uintptr_t.patch b/claws-mail-gtk2/uintptr_t.patch new file mode 100644 index 0000000..d2f03c4 --- /dev/null +++ b/claws-mail-gtk2/uintptr_t.patch @@ -0,0 +1,12 @@ +diff -up ./src/plugins/litehtml_viewer/litehtml/os_types.h.orig ./src/plugins/litehtml_viewer/litehtml/os_types.h +--- ./src/plugins/litehtml_viewer/litehtml/os_types.h.orig 2023-08-09 16:55:51.309999999 -0600 ++++ ./src/plugins/litehtml_viewer/litehtml/os_types.h 2023-08-09 16:56:35.029999999 -0600 +@@ -1,6 +1,8 @@ + #ifndef LH_OS_TYPES_H + #define LH_OS_TYPES_H + ++#include ++ + namespace litehtml + { + #if defined( WIN32 ) || defined( _WIN32 ) || defined( WINCE ) diff --git a/claws-mail/PKGBUILD b/claws-mail/PKGBUILD new file mode 100644 index 0000000..e3bf063 --- /dev/null +++ b/claws-mail/PKGBUILD @@ -0,0 +1,80 @@ +# Maintainer: Jesus E. + +pkgname=claws-mail +pkgver=4.1.1 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="A GTK based e-mail client" +arch=('i686' 'x86_64') +license=('GPL-3') +conflicts=('claws-mail') +provides=('claws-mail') +url='https://www.claws-mail.org' +depends=('gtk' 'gnutls' 'startup-notification' 'enchant' 'gpgme' + 'libetpan' 'compface' 'libsm') +makedepends=('poppler-glib' 'libytnef' 'libical' + 'bogofilter' 'valgrind' 'dillo' 'python' 'gumbo-parser' 'quilt') +optdepends=('perl: needed for perl plugin' + 'bogofilter: adds support for spamfiltering' + 'libxml2: for rssyl plugins' + 'curl: for vcalendar, rssyl and spamreport plugins' + 'libarchive: for archive plugin and various other plugins' + 'libytnef: for tnef_parse plugin' + 'poppler-glib: for pdf viewer plugin' + 'ghostscript: for pdf viewer plugin' + 'libical: for vcalendar plugin' + 'dillo: for html viewer plugin' + 'gumbo-parser: for litehtml plugin') +source=("https://www.claws-mail.org/releases/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/claws-mail/claws-mail_${_debver}-${_debrel}.debian.tar.xz" + "bash_completion" + "rework-defs.patch") +sha512sums=('6364415c12170766fbe0b56317308576054f44296d287b568095cf5df53b9da4804633e73c769e5e79d74d70ec2750dce60d9d7cea7c2d4f6dccd6f402de6aa3' + 'e8132f91d116e311e184bfeac2c5b459cfc6b7bfe965952650942d6a2277ed3a5568ce3831930b54615607816ddcb262127ee8863e8a80e1078aad755187a07c' + '4779669133d077aaa52fc171d693b7ba93208cbc6fee5234550aa3f66ec12e5a5d200aab420ab9ceff65a9509cab3f643280b7b64a35d085d1e64a202d9f7c28' + '327d4c8f065405108391f7baf9af0c57db8294dc2da3df58cab2031a748414da3a959a51aad78797a61fde541dda30a99be6669f5ba57317b854ff0bc5e66188') + +prepare() { + cd "${pkgname}"-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/rework-defs.patch +} + +build() { + cd "${pkgname}"-${pkgver} + ./configure --prefix=/usr --disable-static \ + --enable-enchant \ + --enable-gnutls \ + --enable-ldap \ + --enable-crash-dialog \ + --enable-pgpmime-plugin \ + --enable-bogofilter-plugin \ + --disable-dbus \ + --disable-networkmanager \ + --disable-gdata-plugin \ + --disable-spamassassin-plugin \ + --disable-notification-plugin \ + --disable-fancy-plugin + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${pkgname}"-${pkgver} + make DESTDIR="${pkgdir}" install + + install -Dm 644 "$srcdir"/bash_completion "${pkgdir}"/usr/share/bash-completion/completions/claws-mail + + # license + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/claws-mail/bash_completion b/claws-mail/bash_completion new file mode 100644 index 0000000..dcbcc89 --- /dev/null +++ b/claws-mail/bash_completion @@ -0,0 +1,30 @@ +# claws-mail(1) completion +_claws-mail() +{ + local cur prev words cword + _init_completion || return + + case $prev in + --help|-h|--version|-v|--version-full|-V) + return + ;; + --alternate-config-dir) + COMPREPLY=( $( find . -maxdepth 2 -name clawsrc | sed 's,/clawsrc,,' ) ) + return + ;; + --select|--status|--status-full) + _filedir -d + return + ;; + --compose-from-file|--attach) + _filedir + return + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) ) + return + fi +} && +complete -F _claws-mail claws-mail diff --git a/claws-mail/rework-defs.patch b/claws-mail/rework-defs.patch new file mode 100644 index 0000000..3335394 --- /dev/null +++ b/claws-mail/rework-defs.patch @@ -0,0 +1,13 @@ +--- a/src/common/defs.h 2020-10-19 12:37:56.000000000 +0200 ++++ b/src/common/defs.h 2021-09-22 01:14:47.507010589 +0200 +@@ -120,8 +120,8 @@ + /* #define DEFAULT_INC_PATH "/usr/bin/imget" */ + /* #define DEFAULT_INC_PROGRAM "imget" */ + #define DEFAULT_SENDMAIL_CMD "/usr/sbin/sendmail -t -i" +-#define DEFAULT_BROWSER_CMD "firefox '%s'" +-#define DEFAULT_EDITOR_CMD "gedit '%s'" ++#define DEFAULT_BROWSER_CMD "iceweasel-uxp '%s'" ++#define DEFAULT_EDITOR_CMD "l3afpad '%s'" + #define DEFAULT_MIME_CMD "metamail -d -b -x -c %s '%s'" + #define DEFAULT_IMAGE_VIEWER_CMD "display '%s'" + #define DEFAULT_AUDIO_PLAYER_CMD "play '%s'" diff --git a/clazy/PKGBUILD b/clazy/PKGBUILD new file mode 100644 index 0000000..b7f4b9b --- /dev/null +++ b/clazy/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=clazy +pkgver=1.9 +pkgrel=2 +pkgdesc="Qt oriented code checker based on clang framework" +url="https://www.kdab.com/" +license=('LGPL-2') +depends=('clang') +makedepends=('cmake' 'llvm') +arch=('i686' 'x86_64') +source=(https://download.kde.org/stable/$pkgname/$pkgver/src/$pkgname-$pkgver.tar.xz + fix-build.patch) +sha512sums=('2e8bec44a027366263de23c50d14192e310fd38fa2b369afb21413da9cb78da9882b2153daf1784c4c9076cc62e2867b5211c75ff9a1eabcb583e405f20f5912' + '319b1ca829b81aa0e3a98ce24bcf8bd442d341509fb5b2b8bd5a2135da3387fa61aa96d2e243dfeef91518446a4325c87f3dec9134311ef7c29d30b4d88e9ef8') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cmake -B build $pkgname-$pkgver \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_C_COMPILER=gcc \ + -DCMAKE_CXX_COMPILER=g++ \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DCMAKE_INSTALL_PREFIX=/usr + make --trace -C build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING-LGPL2.txt" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/clazy/fix-build.patch b/clazy/fix-build.patch new file mode 100644 index 0000000..0113d1e --- /dev/null +++ b/clazy/fix-build.patch @@ -0,0 +1,11 @@ +--- a/CMakeLists.txt 2021-01-10 18:43:52.000000000 +0100 ++++ b/CMakeLists.txt 2022-01-13 00:22:34.000000000 +0100 +@@ -253,7 +253,7 @@ + # On MSVC clang-standalone crashes with a meaningless backtrace if linked to ClazyPlugin.dll + target_link_libraries(clazy-standalone clangFrontend) + else() +- target_link_libraries(clazy-standalone ClazyPlugin) ++ target_link_libraries(clazy-standalone ClazyPlugin stdc++fs) + endif() + + link_to_llvm(clazy-standalone TRUE) diff --git a/clifm/PKGBUILD b/clifm/PKGBUILD new file mode 100644 index 0000000..18c2e27 --- /dev/null +++ b/clifm/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=clifm +pkgver=1.22 +pkgrel=1 +pkgdesc="Free and libre commandline file manager" +arch=('i686' 'x86_64') +url='https://github.com/leo-arch/clifm' +license=('GPL-2') +depends=('libcap' 'readline' 'acl' 'file') +makedepends=('make' 'gzip') +optdepends=('p7zip: ISO 9660 support') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/leo-arch/clifm/archive/v${pkgver}.tar.gz") +sha512sums=('17f3c23c5e1cc5ce9a34c6163482d4f1c02ee0558a6475cf0dfc1069445e15b23c391f371ade387d8bdb0be267dc10e5bb122f7309ca4a8198d9221fa67081b5') + +build() { + cd "$srcdir/${pkgname}-${pkgver}" + make PREFIX=/usr +} + +package() { + cd "$srcdir/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" MANDIR=/usr/share/man PREFIX=/usr install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/${pkgname}" +} diff --git a/clisp/PKGBUILD b/clisp/PKGBUILD new file mode 100644 index 0000000..bae57d4 --- /dev/null +++ b/clisp/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=clisp +pkgver=2.49.92 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc='ANSI Common Lisp interpreter, compiler and debugger' +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://clisp.sourceforge.io/' +depends=('readline' 'libsigsegv' 'ffcall' 'libxcrypt' 'libunistring') +makedepends=('quilt') +options=('!makeflags' '!emptydirs') +source=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/c/clisp/clisp_2.49.20180218+really${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/c/clisp/clisp_2.49.20180218+really${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('07e4c920e9fbbe469ed40c3fa74f739344602c6ff3370b9e0ede1c0ad66fa2b723f093bfd589362340caf7fa48d64cf66d11a8caa39ed6bcd90e42a92f97d1a6' + 'd943b45704ad0a6654b59f149eac19fadbcd759e7d085c9a434ac3aeccc069a84aa41e0592d8f492b6c7243550d80cc8b95666174cb80168d6809095eae8d43e') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --with-readline --with-ffcall src + + cd src + ./makemake --prefix=/usr --with-readline --with-ffcall --with-dynamic-ffi > Makefile + make +} + +package() { + cd $pkgname-$pkgver/src + make DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYRIGHT" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/clutter-gtk/PKGBUILD b/clutter-gtk/PKGBUILD new file mode 100644 index 0000000..2741f11 --- /dev/null +++ b/clutter-gtk/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=clutter-gtk +pkgver=1.8.4 +_debver=1.8.4 +_debrel=4 +pkgrel=1 +pkgdesc='Clutter integration with GTK+' +arch=('i686' 'x86_64') +url='https://gitlab.gnome.org/GNOME/clutter-gtk' +license=('LGPL-2.1') +depends=('clutter') +makedepends=('gobject-introspection' 'meson' 'ninja' 'quilt') +source=("https://deb.debian.org/debian/pool/main/c/clutter-gtk/clutter-gtk_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/c/clutter-gtk/clutter-gtk_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('810f879a56cd71f1e9c4678ef704a997ee652d052cfea56b3ed9478f7a813a35dd2fdcded028ce17411ae02da52fa31e0fb8d1f4130c7b9f6d25eeb774b51ada' + 'f78f67b85690450616c22dba268c1eee082d1cc7c9fc3677f8ac00f70a2126eba33708f6d66c848b47a6bd98c630fd04828fd0a98e9544355a8f080649b46005') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgname-$pkgver build -Denable_docs=false + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/clutter/PKGBUILD b/clutter/PKGBUILD new file mode 100644 index 0000000..ba9cc77 --- /dev/null +++ b/clutter/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=clutter +pkgver=1.26.4 +_debver=1.26.4+dfsg +_debrel=2 +pkgrel=1 +pkgdesc="A toolkit for creating fast, portable, compelling dynamic UIs" +url="https://blogs.gnome.org/clutter/" +arch=(i686 x86_64) +license=(LGPL-2.1) +depends=(gtk cogl) +makedepends=(gobject-introspection quilt) +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz + https://deb.debian.org/debian/pool/main/c/clutter-1.0/clutter-1.0_$_debver-$_debrel.debian.tar.xz) +sha512sums=('6d43ac09df7671fa2bda74d1231166e8331f3ef1dbe0d167225033b3ddae7377d1062db81b73fc498c2e9f0db467bf4febb7306a6f40c9ef0266dac2a397f43a' + '9f17bbb73e7b66a5dc23cf603950dbd94cf2ba116e216f360f59dc6121453a9dfb3bd90cacb49e6da755c1d408f5a149bd87e07fff554c1b13108e08481308b6') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr \ + --enable-introspection \ + --enable-egl-backend \ + --enable-gdk-backend \ + --disable-wayland-backend \ + --enable-x11-backend \ + --enable-evdev-input \ + --disable-wayland-compositor \ + --disable-gtk-doc + + # https://bugzilla.gnome.org/show_bug.cgi?id=655517 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} + +# vim:set sw=2 et: diff --git a/cmake/PKGBUILD b/cmake/PKGBUILD new file mode 100644 index 0000000..5820d06 --- /dev/null +++ b/cmake/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=cmake +pkgver=3.25.1 +_debver=$pkgver +_debrel=1 +pkgrel=5 +pkgdesc="A cross-platform free software make system" +arch=('i686' 'x86_64') +url='https://www.cmake.org/' +license=('Modified-BSD') +depends=('curl' 'libarchive' 'shared-mime-info' 'jsoncpp' 'libuv' 'rhash') +makedepends=('python-sphinx' 'quilt') +source=("https://www.cmake.org/files/v${pkgver%.*}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cmake/cmake_${_debver}-${_debrel}~bpo11+1.debian.tar.xz" + "byacc.patch") +sha512sums=('ec4203cac569e3c340bf6535d193d9ccff9c4e4d59a7a7ae5b9156172f647d9f9212bdc37b3c12cbd676b1351b9a64364c563aaa968a2f41e0f402410ed78d57' + 'e15a12081df435739b57087769f98bf5876280c20b6dfd929e456b69218672ea1060d3a2f07e3308052a85cab33fb46b8300ea7500b3bf865a9b7a8cc73c27aa' + 'd137a8261dac9bd0cf123427a61581f5b31982a31a30e488c6852e3781cc9e3672c32accfc1a7310bcc3e8c9d43f0e7edb259b4e130b416d4a5d00d23e133f1a') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -p1 -i "$srcdir"/byacc.patch +} + +build() { + cd ${pkgname}-${pkgver} + ./bootstrap --prefix=/usr \ + --mandir=/share/man \ + --docdir=/share/doc/cmake \ + --datadir=/share/cmake \ + --sphinx-man \ + --sphinx-html \ + --system-libs \ + --parallel=$(/usr/bin/getconf _NPROCESSORS_ONLN) + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + + rm -r "$pkgdir"/usr/share/doc/cmake/html/_sources + rm -rf "$pkgdir"/usr/share/emacs + install -Dm644 Copyright.txt -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/cmake/byacc.patch b/cmake/byacc.patch new file mode 100644 index 0000000..c05e830 --- /dev/null +++ b/cmake/byacc.patch @@ -0,0 +1,57 @@ +--- a/Modules/FindBISON.cmake 2022-11-30 14:57:03.000000000 +0100 ++++ b/Modules/FindBISON.cmake 2022-12-16 19:47:44.417533396 +0100 +@@ -5,15 +5,15 @@ + FindBISON + --------- + +-Find ``bison`` executable and provide a macro to generate custom build rules. ++Find ``bison/byacc`` executable and provide a macro to generate custom build rules. + + The module defines the following variables: + + ``BISON_EXECUTABLE`` +- path to the ``bison`` program ++ path to the ``bison/byacc`` program + + ``BISON_VERSION`` +- version of ``bison`` ++ version of ``bison/byacc`` + + ``BISON_FOUND`` + "True" if the program was found +@@ -77,7 +77,7 @@ + The header file generated by bison + + ``BISON__OUTPUTS`` +- All files generated by bison including the source, the header and the report ++ All files generated by bison/byacc including the source, the header and the report + + ``BISON__COMPILE_FLAGS`` + Options used in the ``bison`` command line +@@ -92,7 +92,7 @@ + add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS}) + #]=======================================================================] + +-find_program(BISON_EXECUTABLE NAMES bison win-bison win_bison DOC "path to the bison executable") ++find_program(BISON_EXECUTABLE NAMES bison win_bison byacc yacc DOC "path to the bison/byacc executable") + mark_as_advanced(BISON_EXECUTABLE) + + if(BISON_EXECUTABLE) +@@ -101,7 +101,7 @@ + set(_Bison_SAVED_LC_ALL "$ENV{LC_ALL}") + set(ENV{LC_ALL} C) + +- execute_process(COMMAND ${BISON_EXECUTABLE} --version ++ execute_process(COMMAND ${BISON_EXECUTABLE} -V + OUTPUT_VARIABLE BISON_version_output + ERROR_VARIABLE BISON_version_error + RESULT_VARIABLE BISON_version_result +@@ -110,7 +110,7 @@ + set(ENV{LC_ALL} ${_Bison_SAVED_LC_ALL}) + + if(NOT ${BISON_version_result} EQUAL 0) +- message(SEND_ERROR "Command \"${BISON_EXECUTABLE} --version\" failed with output:\n${BISON_version_error}") ++ message(SEND_ERROR "Command \"${BISON_EXECUTABLE} -V\" failed with output:\n${BISON_version_error}") + else() + # Bison++ + if("${BISON_version_output}" MATCHES "^bison\\+\\+ Version ([^,]+)") diff --git a/cmark/PKGBUILD b/cmark/PKGBUILD new file mode 100644 index 0000000..6e4b520 --- /dev/null +++ b/cmark/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=cmark +pkgver=0.29.0 +_debver=0.29.0 +_debrel=4 +pkgrel=1 +pkgdesc='CommonMark parsing and rendering library and program in C' +arch=('i686' 'x86_64') +url='https://github.com/jgm/cmark' +license=('Simplified-BSD') +depends=('glibc') +makedepends=('cmake' 'python' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/jgm/cmark/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cmark/cmark_$_debver-$_debrel.debian.tar.xz") +sha512sums=('06eb110cfd90c9e980c022b7588e28864d15a4da5d07d61ad4b27c6de47367492b9e58e9434e62b07517aa6dc484f17af13916808be3188f38c37d20cbf33112' + '3447e3dabcc85ab5a343ac352b0b8d39a313525964a325fbc04d9d28f02485b7283a060614af42df5c97f8077bb1132559a500ca9f8afcfd1ccc25caa6ec0c6c') + +prepare() { + mkdir -p build + + cd ${srcdir}/${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib ../cmark-$pkgver + make +} + +check() { + cd build + make test +} + +package() { + cd build + make install DESTDIR="$pkgdir" + install -Dm644 "$srcdir"/cmark-$pkgver/COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/cmatrix/PKGBUILD b/cmatrix/PKGBUILD new file mode 100644 index 0000000..c5f3c45 --- /dev/null +++ b/cmatrix/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=cmatrix +pkgver=2.0 +_debver=2.0 +_debrel=3 +pkgrel=1 +pkgdesc="A curses-based scrolling 'Matrix'-like screen" +arch=('i686' 'x86_64') +url='https://www.asty.org/cmatrix/' +license=('GPL-3') +depends=('ncurses') +makedepends=('cmake' 'quilt') +optdepends=('kbd: cmatrix-tty custom font' + 'xterm: cmatrix-tty custom font') +source=("cmatrix-$pkgver.tgz::https://github.com/abishekvashok/cmatrix/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cmatrix/cmatrix_${_debver}-${_debrel}.debian.tar.xz" + "cmatrix-tty") +sha512sums=('1aeecd8e8abb6f87fc54f88a8c25478f69d42d450af782e73c0fca7f051669a415c0505ca61c904f960b46bbddf98cfb3dd1f9b18917b0b39e95d8c899889530' + 'a9366f88ec9db692bf6ab6dca5f78d46b463f7656e5402a5b997715750d0d3c852148420e9fb8394e71deba4787ff3125c1cc1c9d84f7e5ec4267d4777852733' + 'f51de7e7b849e4c99ed2b1cd66173a469f3fa957435dee96a9f234baf0ce09ed75ca095716c10e4625aa8e76e88d10aa4e62d02691a3bdedc4f3bcd378e09f8b') + +prepare() { + mkdir build + + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + cmake ../$pkgname-$pkgver \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + #-D CONSOLE_FONTS_DIRS=/usr/share/kbd/consolefonts \ + #-D X_FONTS_DIRS=/usr/share/fonts/misc \ + #-D UNIX=true + make +} + +package() { + # only the binary has a target to install + make -C build DESTDIR="$pkgdir" install + + cd $pkgname-$pkgver + + # install X font + install -D -m644 mtx.pcf "$pkgdir"/usr/share/fonts/misc/mtx.pcf + + # install console font + install -D -m644 matrix.fnt "$pkgdir"/usr/share/kbd/consolefonts/matrix.fnt + install -D -m644 matrix.psf.gz "$pkgdir"/usr/share/kbd/consolefonts/matrix.psf.gz + + # todo: fix the pretty wrapper + #install -Dm755 "$srcdir/cmatrix-tty" "$pkgdir/usr/bin/cmatrix-tty" + + for i in AUTHORS NEWS COPYING README ChangeLog INSTALL; do + install -Dm644 $i "$pkgdir/usr/share/doc/$pkgname/$i" + done + + install -Dm644 cmatrix.1 "$pkgdir/usr/share/man/man1/cmatrix.1" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cmatrix/cmatrix-tty b/cmatrix/cmatrix-tty new file mode 100644 index 0000000..da6359b --- /dev/null +++ b/cmatrix/cmatrix-tty @@ -0,0 +1,39 @@ +#!/bin/sh + +# a basic script for maximum pretty + +# X-based modes +if [[ -n "$DISPLAY" && -x /usr/bin/aterm ]]; then + exec aterm -fn mtx -e cmatrix -abox + exit +fi +if [[ -n "$DISPLAY" && -x /usr/bin/xterm ]]; then + exec xterm -fn mtx -en iso1252 -e cmatrix -abx + exit +fi + +# safe mode +if [[ "$TERM" != "linux" ]]; then + exec cmatrix -abo + exit +fi + +# custom font mode +setfont matrix +cmatrix -abol + +# and put the font back, if possible +default_font="" +if [[ -f /etc/vconsole.conf ]]; then + while IFS='=' read -r k v; do + if [ "${k# *}" = FONT ]; then + default_font="$v" + fi + done < /etc/vconsole.conf +fi +if [[ -n "$default_font" ]]; then + setfont "$default_font" +else + echo "No font in vconsole.conf, could not restore." +fi + diff --git a/cmocka/PKGBUILD b/cmocka/PKGBUILD new file mode 100644 index 0000000..5166a55 --- /dev/null +++ b/cmocka/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=cmocka +pkgver=1.1.5 +pkgrel=1 +pkgdesc='Elegant unit testing framework for C with support for mock objects' +url='https://cmocka.org/' +arch=('i686' 'x86_64') +license=('Apache-2.0') +depends=('glibc') +makedepends=('cmake') +source=(https://cmocka.org/files/1.1/cmocka-${pkgver}.tar.xz{,.asc}) +sha512sums=('cad7f04757183d004f6eaad39036fc0e24c5e0e987f80e85bc43bc66dba22389cb02b08e25531cc28a541d0a24a86b29be134a2d6fc339128e87d66952f502bd' + 'SKIP') +validpgpkeys=('8DFF53E18F2ABC8D8F3C92237EE0FC4DCC014E3D') # Andreas Schneider + +prepare() { + cd ${pkgname}-${pkgver} + mkdir build +} + +build() { + cd ${pkgname}-${pkgver}/build + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=Release \ + -DUNIT_TESTING=ON + make +} + +check() { + cd ${pkgname}-${pkgver}/build + make test +} + +package() { + cd ${pkgname}-${pkgver}/build + make install DESTDIR="${pkgdir}" + install -Dm644 ../COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} + +# vim: ts=2 sw=2 et: diff --git a/cmus/PKGBUILD b/cmus/PKGBUILD new file mode 100644 index 0000000..dfab1de --- /dev/null +++ b/cmus/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=cmus +pkgver=2.10.0 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Feature-rich ncurses-based music player" +arch=('i686' 'x86_64') +url='https://cmus.github.io/' +license=('GPL-2') +depends=('ncurses') +makedepends=('faad2' 'ffmpeg' 'flac' 'jack' 'libao' 'libcdio-paranoia' 'libmad' + 'libmodplug' 'libmp4v2' 'libmpcdec' 'alsa-lib' 'libsamplerate' 'libsndio' + 'libvorbis' 'opusfile' 'wavpack' 'quilt') +optdepends=('alsa-lib: for ALSA output plugin support' + 'libao: for AO output plugin support' + 'libsndio: for sndio output plugin support' + 'faad2: for AAC input plugin support' + 'ffmpeg: for ffmpeg input plugin support' + 'flac: for flac input plugin support' + 'jack: for jack plugin support' + 'libmad: for mp3 input plugin support' + 'libmodplug: for modplug input plugin support' + 'libmp4v2: for mp4 input plugin support' + 'libmpcdec: for musepack input plugin support' + 'libsamplerate: for sampe rate converter support' + 'libvorbis: for vorbis input plugin support' + 'libcdio-paranoia: for cdio support' + 'opusfile: for opus input plugin support' + 'wavpack: for wavpack input plugin support') +source=("$pkgname-$pkgver.tar.gz::https://github.com/cmus/cmus/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cmus/cmus_$_debver-$_debrel.debian.tar.xz") +sha512sums=('c055dc974a88f32c7f19fb2e4260ede37fbddc3f23707a98e7f669032c1b4fd9a1032eb5c808cf5ee635617d3abf176e78d1e8596cbe669bbad95cd5c50dde7c' + '49325ba2e1384cc612c0caa63766889471396911970f128e674d5d97d635a6d0e4a37247ee5e44415ac153fbd33fcafb26f9462fe960a329e16dd6ca01989d30') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + rm "$pkgdir"/usr/share/cmus/{spotify,amazon}.theme + install -Dm644 contrib/_cmus "$pkgdir"/usr/share/zsh/site-functions/_cmus + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/codeblocks/PKGBUILD b/codeblocks/PKGBUILD new file mode 100644 index 0000000..948f806 --- /dev/null +++ b/codeblocks/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=codeblocks +pkgver=17.12 +pkgrel=2 +pkgdesc="Cross-platform C/C++ IDE" +arch=('i686' 'x86_64') +url='http://codeblocks.org/' +license=('GPL-3') +depends=('boost-libs' 'wxgtk3' 'hunspell') +makedepends=('boost' 'graphicsmagick-imagemagick-compat' 'zip') +source=("https://downloads.sourceforge.net/codeblocks/${pkgname}_$pkgver.tar.xz" + "fix-crash.patch") +sha512sums=('f90e756ca6f532656eeed34c6259c6a96ae85d172fc11e39f696ded9189cab7171d0cead18524fbab50dd782f21adbc7d52e2ea90535a3ed0aef5946b8a476e1' + '6417d54129e57c27d04982be808573c9e6cc30afa41a78549c7d99bbf36803ed06ca3169613f860ed91155adc1d3be2700207dd3bdaf8cdaeb0ed7da37bba161') + +prepare() { + cd $pkgname-$pkgver + convert src/mime/codeblocks.png +set date:create +set date:modify -background none -extent 64x64 src/mime/codeblocks.png + sed -i 's|$(datadir)/pixmaps|$(datadir)/icons/hicolor/64x64/apps|' src/mime/Makefile.{am,in} + sed -i 's|$(datarootdir)/appdata|$(datarootdir)/metainfo|' Makefile.{am,in} src/plugins/contrib/appdata/Makefile.{am,in} + + # wx3-gtk3: Fix crash when doing Control-A, Control-V + # https://sourceforge.net/p/codeblocks/code/11320/ + patch -Np2 -i $srcdir/fix-crash.patch +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --with-contrib-plugins=all,-FileManager,-NassiShneiderman \ + --with-wx-config=/usr/bin/wx-config-gtk3 + sed -i 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/codeblocks/fix-crash.patch b/codeblocks/fix-crash.patch new file mode 100644 index 0000000..1509ed0 --- /dev/null +++ b/codeblocks/fix-crash.patch @@ -0,0 +1,11 @@ +--- a/trunk/src/src/main.cpp ++++ b/trunk/src/src/main.cpp +@@ -4321,7 +4321,7 @@ + } + + if (Manager::Get()->GetEditorManager() && event.GetEditor() == Manager::Get()->GetEditorManager()->GetActiveEditor()) +- DoUpdateStatusBar(); ++ CallAfter(&MainFrame::DoUpdateStatusBar); + + event.Skip(); + } diff --git a/codecrypt/PKGBUILD b/codecrypt/PKGBUILD new file mode 100644 index 0000000..d98c585 --- /dev/null +++ b/codecrypt/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=codecrypt +pkgver=1.8 +pkgrel=1 +pkgdesc="The post-quantum cryptography tool" +arch=('i686' 'x86_64') +url='http://e-x-a.org/codecrypt/' +license=('GPL-3' 'LGPL-3') +depends=('gmp' "fftw>=3.0" 'crypto++') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/exaexa/codecrypt/archive/v${pkgver}.tar.gz" + "fix-build.patch") +sha512sums=('e6b30fd06b9ac271c04da9e1052c9ffbc2827337a25902bb41c30f81e040d28678f9565d2fc647dc45352b72576a823151cc841c58e080b0df987f1cc7f5b463' + '74d39d0b4ae5be651664c7c09551c3bbd2acc319a19c73109edc44a75f03f7151a727dc0db5f235ccc0590bbd2f6eab05b42de3fd4beb08828f3d0ca7465e538') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np1 -i ${srcdir}/fix-build.patch + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure LIBS=-lpthread --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING{,.LESSER} -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/codecrypt/fix-build.patch b/codecrypt/fix-build.patch new file mode 100644 index 0000000..0273398 --- /dev/null +++ b/codecrypt/fix-build.patch @@ -0,0 +1,11 @@ +--- a/configure.ac 2017-10-31 21:42:06.000000000 +0100 ++++ b/configure.ac 2022-03-15 02:06:45.646440624 +0100 +@@ -37,7 +37,7 @@ + + PKG_PROG_PKG_CONFIG([0.25]) + +- PKG_CHECK_MODULES([CRYPTOPP],[libcrypto++]) ++ PKG_CHECK_MODULES([CRYPTOPP],[libcryptopp]) + + #crypto++ headers are either in include/crypto++ or include/cryptopp, + #the information is otherwise unavailable from standard configuration diff --git a/cogl/PKGBUILD b/cogl/PKGBUILD new file mode 100644 index 0000000..c98bca3 --- /dev/null +++ b/cogl/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=cogl +pkgver=1.22.8 +pkgrel=1 +pkgdesc="An object oriented GL/GLES Abstraction/Utility Layer" +url="https://blogs.gnome.org/clutter/" +arch=(i686 x86_64) +license=(Expat SGI-Free-B-2.0 Modified-BSD) +depends=(mesa-libgl libdrm libxext libxdamage libxcomposite gdk-pixbuf2 pango + libxrandr) +makedepends=(gobject-introspection) +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz) +sha512sums=('702d5b1b22dc34bffaa82c9c57021caf036ee3a13fa7ca24a90cca1ebc0f8b7a86070cc1fe5125757132b02774fa874bb55675c96d1ccbc233fac0e6132da65f') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr \ + --enable-gles2 \ + --enable-kms-egl-platform + + # https://bugzilla.gnome.org/show_bug.cgi?id=655517 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} + +# vim:set ts=2 sw=2 et: diff --git a/compface/LICENSE b/compface/LICENSE new file mode 100644 index 0000000..1b7e3ab --- /dev/null +++ b/compface/LICENSE @@ -0,0 +1,94 @@ +Extracted from Debian GNU/Linux's package: + +[...] + +Compface - 48x48x1 image compression and decompression +Copyright (c) James Ashton 1990. +Written 89/11/11 + +Feel free to distribute this source at will so long as the above +message and this message are included in full. + +This copyright message dosn't specify whether modified version is allowed, +but the following mail from the author does allow them: + +> From: James Ashton +> Subject: Re: Bug#72019: compface not DFSG +> Date: Wed, 20 Sep 2000 09:48:34 +1100 (EST) +> +> >On Tue, Sep 19, 2000 at 08:58:43AM -0400, Raul Miller wrote: +> >> Package: compface +> >> Version: 1989.11.11-17.1 +> >> Severity: important +> >> +> >> compface's copyright doesn't grant permission to +> >> distribute modified versions +> > +> >The compface copyright says: +> > +> >Feel free to distribute this source at will so long as the above +> >message and this message are included in full. +> > +> > +> >Which could be interpretated as it is allowed to distribute modified +> >versions of it. James Ashton is the original author, would you care to +> >clairify the matter, mr Ashton? +> +> I don't mind modified versions being distributed. Please included the +> original copyright notices as specified and also prominently note, if +> it is a modified version, the nature and author(s) of the +> modifications. +> -- +> James Ashton VK1XJA System Administrator +> http://wwwsyseng.anu.edu.au/~jaa Department of Systems Engineering +> Voice +61 2 6279 8675 Research School of Information Sciences and Engineering +> FAX +61 2 6279 8688 Australian National University +> Email James.Ashton@anu.edu.au Canberra ACT 0200 Australia +> + +Another peoblem with the copyright of this source code is that the +copyright message in the source files and in the readme file is conflicting. +The following mail from the author should clear that up: + +> From: James Ashton +> Subject: Re: libcompface license (again) +> Date: Thu, 22 Feb 2001 09:32:23 +1100 (EST) +> +> >Hi, +> >I'm maintaining the debian pkg of your compface lib, and I've talket to you +> >before about it's license. And now ouer legal people have found another +> >problem. The sourcefiles contains a diffrent copyright notice than the +> >redmefile. They say: +> > + +/* + * Compface - 48x48x1 image compression and decompression + * + * Copyright (c) James Ashton - Sydney University - June 1990. + * + * Written 11th November 1989. + * + * Permission is given to distribute these sources, as long as the + * copyright messages are not removed, and no monies are exchanged. + * + * No responsibility is taken for any errors on inaccuracies inherent + * either to the comments or the code of this program, but if reported + * to me, then an attempt will be made to fix them. + */ + +> > +> >The problem is the last part "no monies are exchanged". As you probably=20 +> >know we do allow third party companies to produce debian CDs and sell them. +> >So this statement would inmply that we can't have your libcompface in +> debian +> >at all. +> +> I'm happy to remove the phrase no monies are exchanged' from the +> source and allow distribution as per the README file. Do you need more +> from me than just this email? +> -- +> James Ashton VK1XJA System Administrator +> http://wwwsyseng.anu.edu.au/~jaa Department of Systems Engineering +> Voice +61 2 6125 8675 Research School of Information Sciences and Engineering +> FAX +61 2 6125 8660 Australian National University +> Email James.Ashton@anu.edu.au Canberra ACT 0200 Australia diff --git a/compface/PKGBUILD b/compface/PKGBUILD new file mode 100644 index 0000000..b00adcb --- /dev/null +++ b/compface/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=compface +pkgver=1.5.2 +pkgrel=1 +pkgdesc='Utils & libs to convert from/to X-Face format.' +arch=('i686' 'x86_64') +url='http://ftp.xemacs.org/pub/xemacs/aux/' +license=('Expat') +depends=('glibc') +source=(https://ftp.osuosl.org/pub/blfs/conglomeration/compface/$pkgname-$pkgver.tar.gz + compface-1.5.2-build.patch + LICENSE) +sha512sums=('0da9ee4c5fb2b5c712466d9fa6170e5687b23c038e6304baa42d7ede6d9bd50a1b84da416eb853a420c01a6b9eccd5e7d92a4ebc26295714b85254c05c9e3360' + '099728c1820bec05c78358f41ee088e39f3433eefdcd31ef9c84d9fde466b7d7d1fc6c9ad8fee78813ec4787a2c54cf48617fde12738f73939e15e7790351ae5' + 'b2c1c2026067238a4fb8592ffce34a4e735ff86f3fe9b3e556390087ee22c022a0503a0f0fbe608c16d3d4f8e8425941709dc5f23d5cd846ed836883e64a3b99') + +prepare() { + cd $pkgname-$pkgver + patch -Np0 -i ${srcdir}/compface-1.5.2-build.patch +} + +build() { + cd $pkgname-$pkgver + CFLAGS="$CFLAGS -fPIC" + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" STRIP=/bin/true install + install -D -m644 $srcdir/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/compface/compface-1.5.2-build.patch b/compface/compface-1.5.2-build.patch new file mode 100644 index 0000000..b86cdb8 --- /dev/null +++ b/compface/compface-1.5.2-build.patch @@ -0,0 +1,82 @@ +o Build shared library, link tools against it +o Make it possible to prevent stripping +o Add DESTDIR support + +--- Makefile.in~ 2005-10-04 15:59:49.000000000 +0300 ++++ Makefile.in 2006-08-02 22:23:07.000000000 +0300 +@@ -15,6 +15,7 @@ + INSTALL_PROGRAM = @INSTALL_PROGRAM@ + INSTALL_DATA = @INSTALL_DATA@ + SHELL = /bin/sh ++STRIP = strip + + NAME = compface + UNNAME = uncompface +@@ -25,6 +26,7 @@ + UNEXECUTABLE = $(BINDIR)/$(UNNAMEEXE) + LIBNAME = lib$(NAME).a + LIBRARY = $(LIBDIR)/$(LIBNAME) ++SHLIBNAME = lib$(NAME).so + MAN1DIR = $(MANDIR)/man1 + MAN3DIR = $(MANDIR)/man3 + OBJECTS = arith.o file.o compress.o gen.o uncompface.o +@@ -45,11 +47,11 @@ + + all: $(NAMEEXE) $(UNNAMEEXE) + +-$(NAMEEXE) : cmain.o compface.o $(LIBNAME) +- $(CC) $(LDFLAGS) -o $@ cmain.o compface.o $(LIBNAME) ++$(NAMEEXE) : cmain.o compface.o $(SHLIBNAME) ++ $(CC) $(LDFLAGS) -o $@ cmain.o compface.o -L. -l$(NAME) + +-$(UNNAMEEXE) : uncmain.o $(LIBNAME) +- $(CC) $(LDFLAGS) -o $@ uncmain.o $(LIBNAME) ++$(UNNAMEEXE) : uncmain.o $(SHLIBNAME) ++ $(CC) $(LDFLAGS) -o $@ uncmain.o -L. -l$(NAME) + + $(LIBNAME) : $(OBJECTS) + ar rc $(LIBNAME) $(OBJECTS) +@@ -73,25 +75,28 @@ + tar chzf `cat .fname`.tar.gz `cat .fname` + $(RM) -rf `cat .fname` .fname + +-install: $(NAMEEXE) $(UNNAMEEXE) $(LIBNAME) +- $(INSTALL_PROGRAM) -d $(BINDIR) $(LIBDIR) $(MAN1DIR) $(MAN3DIR) $(INCLUDEDIR) +- $(INSTALL_PROGRAM) $(srcdir)/$(NAMEEXE) $(EXECUTABLE) +- -chmod 0755 $(EXECUTABLE) +- -strip $(EXECUTABLE) +- $(INSTALL_PROGRAM) $(srcdir)/$(UNNAMEEXE) $(UNEXECUTABLE) +- -chmod 0755 $(UNEXECUTABLE) +- -strip $(UNEXECUTABLE) +- $(INSTALL_DATA) $(srcdir)/$(NAME).1 $(MAN1DIR)/$(NAME).1 +- cd $(MAN1DIR) && $(RM) ./$(UNNAME).1 && $(LN_S) $(NAME).1 $(UNNAME).1 +- $(INSTALL_DATA) $(srcdir)/$(NAME).3 $(MAN3DIR)/$(NAME).3 +- cd $(MAN3DIR) && $(RM) ./$(UNNAME).3 && $(LN_S) $(NAME).3 $(UNNAME).3 +- for hdr in $(INSTALLHEADERS); do $(INSTALL_DATA) $(srcdir)/$${hdr} $(INCLUDEDIR)/$${hdr}; done +- $(INSTALL_DATA) $(srcdir)/$(LIBNAME) $(LIBRARY) ++install: $(NAMEEXE) $(UNNAMEEXE) $(SHLIBNAME) ++ $(INSTALL_PROGRAM) -d $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(MAN1DIR) $(DESTDIR)$(MAN3DIR) $(DESTDIR)$(INCLUDEDIR) ++ $(INSTALL_PROGRAM) $(srcdir)/$(NAMEEXE) $(DESTDIR)$(EXECUTABLE) ++ -$(STRIP) $(DESTDIR)$(EXECUTABLE) ++ $(INSTALL_PROGRAM) $(srcdir)/$(UNNAMEEXE) $(DESTDIR)$(UNEXECUTABLE) ++ -$(STRIP) $(DESTDIR)$(UNEXECUTABLE) ++ $(INSTALL_DATA) $(srcdir)/$(NAME).1 $(DESTDIR)$(MAN1DIR)/$(NAME).1 ++ cd $(DESTDIR)$(MAN1DIR) && $(RM) ./$(UNNAME).1 && $(LN_S) $(NAME).1 $(UNNAME).1 ++ $(INSTALL_DATA) $(srcdir)/$(NAME).3 $(DESTDIR)$(MAN3DIR)/$(NAME).3 ++ cd $(DESTDIR)$(MAN3DIR) && $(RM) ./$(UNNAME).3 && $(LN_S) $(NAME).3 $(UNNAME).3 ++ for hdr in $(INSTALLHEADERS); do $(INSTALL_DATA) $(srcdir)/$${hdr} $(DESTDIR)$(INCLUDEDIR)/$${hdr}; done ++ $(INSTALL_PROGRAM) $(srcdir)/$(SHLIBNAME) $(DESTDIR)$(LIBDIR)/$(SHLIBNAME).1.0.0 ++ $(LN_S) $(SHLIBNAME).1.0.0 $(DESTDIR)$(LIBDIR)/$(SHLIBNAME).1 ++ $(LN_S) $(SHLIBNAME).1 $(DESTDIR)$(LIBDIR)/$(SHLIBNAME) + + shar : + shar.script $(OTHERS) $(HDRS) $(SOURCES) > $(NAME).sh + compress $(NAME).sh + ++$(SHLIBNAME): $(OBJECTS) ++ $(CC) -shared -Wl,-soname,$(SHLIBNAME).1 $(LDFLAGS) -o $(SHLIBNAME) $(OBJECTS) ++ + .c.o: + $(CC) -c $(CPPFLAGS) $(DEFS) $(CFLAGS) $< + + diff --git a/compiler-rt/PKGBUILD b/compiler-rt/PKGBUILD new file mode 100644 index 0000000..8faa106 --- /dev/null +++ b/compiler-rt/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=compiler-rt +pkgver=11.0.0 +pkgrel=2 +pkgdesc="Compiler runtime libraries for clang" +arch=('i686' 'x86_64') +url="https://compiler-rt.llvm.org/" +license=('custom:Apache-2.0+LLVM-Exceptions') +depends=('gcc-libs') +makedepends=('llvm' 'cmake' 'ninja' 'python') +options=('staticlibs') +_source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($_source_base/$pkgname-$pkgver.src.tar.xz) +sha512sums=('e2085753528670d300d49c4b2dd2991f78c36f356c40ba9da8918f141e6dd5dca8d91686466252829af936206e8c1219a69da2448691922a9e6624f6523ab0c7') + +prepare() { + cd "$srcdir/$pkgname-$pkgver.src" + mkdir build +} + +build() { + cd "$srcdir/$pkgname-$pkgver.src/build" + + cmake .. -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr + ninja +} + +package() { + cd "$srcdir/$pkgname-$pkgver.src/build" + + DESTDIR="$pkgdir" ninja install + install -Dm644 ../LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE.TXT" + + mkdir -p "$pkgdir"/usr/lib/clang/$pkgver/{lib,share} + mv "$pkgdir"/usr/lib/{linux,clang/$pkgver/lib/} + mv "$pkgdir"/usr/{share/*.txt,lib/clang/$pkgver/share/} +} + +# vim:set ts=2 sw=2 et: diff --git a/confuse/PKGBUILD b/confuse/PKGBUILD new file mode 100644 index 0000000..90d9f98 --- /dev/null +++ b/confuse/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=confuse +pkgver=3.3 +_debver=3.3 +_debrel=2 +pkgrel=1 +pkgdesc='C-library for parsing configuration files' +arch=('i686' 'x86_64') +url='https://github.com/libconfuse/libconfuse' +license=('ISC') +depends=('glibc') +makedepends=('quilt') +source=(https://github.com/libconfuse/libconfuse/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libc/libconfuse/libconfuse_$_debver-$_debrel.debian.tar.xz) +options=('!emptydirs') +sha512sums=('07f994ca670778ea3dd667b96e1109a90f1f886184b124a9249b60c724d35e423600ed33b46d46ef9299b8b531784e8023af6fad4c88b72791c86c0b1b7c370e' + 'b1bce2a1c6230e2583bfca23f927ae64b7118df6e9c8d7bddd000fb78bca30dc64ff480e2af4b8c6bd9d19df299a28cb314b11ebf1b8d4f35e4c5f3c87831765') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/de.po.patch || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --enable-shared + make +} + +check() { + cd ${pkgname}-${pkgver} + make check +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -D -m 644 -t "${pkgdir}/usr/share/licenses/${pkgname}/" LICENSE +} diff --git a/cpio/PKGBUILD b/cpio/PKGBUILD new file mode 100644 index 0000000..1ae6cab --- /dev/null +++ b/cpio/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=cpio +pkgver=2.13 +pkgrel=1 +pkgdesc="A tool to copy files into or out of a cpio or tar archive" +arch=('i686' 'x86_64') +license=('GPL-3') +url="https://www.gnu.org/software/cpio" +depends=('glibc') +source=(https://ftp.gnu.org/gnu/cpio/cpio-${pkgver}.tar.gz{,.sig}) +sha512sums=('1e1ca6b3e3e64f206f9d828a152d6b4f8f6974de7a953ff96e02698b1c3c2c777c2111450e6a71c0693e29ca8bc01c3dda9f5e829b8e3221f647414df49dff6a' + 'SKIP') +validpgpkeys=('325F650C4C2B6AD58807327A3602B07F55D0C732') # Sergey Poznyakoff + +build() { + cd ${pkgname}-${pkgver} + CFLAGS+=' -fcommon' # https://wiki.gentoo.org/wiki/Gcc_10_porting_notes/fno_common + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +check() { + cd ${pkgname}-${pkgver} + make check +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + rm -f "${pkgdir}/usr/bin/mt" "${pkgdir}/pkg/usr/share/man/man1/mt.1" + rm -rf "${pkgdir}/usr/libexec" + rm -f "${pkgdir}/usr/share/man/man8/rmt.8" + # remove infodir + rm "$pkgdir/usr/share/info/dir" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cppcheck/PKGBUILD b/cppcheck/PKGBUILD new file mode 100644 index 0000000..4c251fb --- /dev/null +++ b/cppcheck/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=cppcheck +pkgver=2.3 +_debver=2.3 +_debrel=1 +pkgrel=1 +pkgdesc="A tool for static C/C++ code analysis" +arch=('i686' 'x86_64') +url="http://cppcheck.sourceforge.net/" +license=('GPL-3') +depends=('python-pygments' 'tinyxml2') +makedepends=('docbook-xsl' 'qt-tools' 'qt-base' 'python' 'cmake' 'clang' 'quilt') +optdepends=('qt-base: run cppcheck-gui' + 'python-pygments: cppcheck-htmlreport' + 'clang: for cppcheck-gui integration') +source=($pkgname-$pkgver.tar.gz::https://github.com/danmar/cppcheck/archive/${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/c/cppcheck/cppcheck_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('1da7985e1b0636a4cd2c85c07fcb0ca938445ae1d0a7543d059a1851125cb263053d4fe41f38a469d5a3c5c9eb0092b527b1d07ac6aa71e3b83ab1482a2a1007' + 'cf70bd6d408edef8d32bf20799885d61bbfc11d3c775cd7d1398f005abcbba84e68a8c0d8e1b4bdd099ab3ddf00f4debdc83285ab603d251db88023d15d96134') + +prepare() { + cd "${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + mkdir build +} + +build() { + cd "${pkgname}-${pkgver}" + export CXXFLAGS+=" -DNDEBUG" + + # Manuals + xsversion=$(pacman -Qi docbook-xsl | grep ^Version | sed -e 's/.*: //' -e 's/-[0-9]$//') + make DB2MAN=/usr/share/xml/docbook/xsl-stylesheets-${xsversion}-nons/manpages/docbook.xsl man + + cd build + cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release \ + -DUSE_MATCHCOMPILER=yes -DHAVE_RULES=yes \ + -DBUILD_GUI=yes -DBUILD_SHARED_LIBS:BOOL=OFF \ + -DBUILD_TESTS=no -DFILESDIR=/usr/share/cppcheck \ + -DUSE_BUNDLED_TINYXML2=OFF \ + .. + + make +} + +package() { + cd "${pkgname}-${pkgver}/build" + make DESTDIR="${pkgdir}" install + + cd .. + install -D -p -m 644 cppcheck.1 "${pkgdir}"/usr/share/man/man1/cppcheck.1 + install -D -p -m 755 htmlreport/cppcheck-htmlreport "${pkgdir}"/usr/bin/cppcheck-htmlreport + + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/cppunit/PKGBUILD b/cppunit/PKGBUILD new file mode 100644 index 0000000..a76ec34 --- /dev/null +++ b/cppunit/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=cppunit +pkgver=1.15.1 +pkgrel=1 +pkgdesc='A C++ unit testing framework' +arch=('i686' 'x86_64') +url='https://www.freedesktop.org/wiki/Software/cppunit' +license=('LGPL-2.1') +depends=('sh' 'gcc-libs') +makedepends=('doxygen') +options=('!emptydirs') +source=(https://deb.debian.org/debian/pool/main/c/cppunit/cppunit_${pkgver}.orig.tar.gz) +sha512sums=('0feb47faec451357bb4c4e287efa17bb60fd3ad966d5350e9f25b414aaab79e94921024b0c0497672f8d3eeb22a599213d2d71d9e1d28b243b3e37f3a9a43691') + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd ${pkgname}-${pkgver} + make check +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cpulimit/PKGBUILD b/cpulimit/PKGBUILD new file mode 100644 index 0000000..a98702b --- /dev/null +++ b/cpulimit/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=cpulimit +pkgver=2.7 +pkgrel=1 +pkgdesc="Free software tool for limiting the CPU usage of a process" +arch=('i686' 'x86_64') +url='http://limitcpu.sourceforge.net/' +license=('GPL-2') +depends=('glibc') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/cpulimit/cpulimit_${pkgver}.orig.tar.gz") +sha512sums=('8f6d8ddc78f6cb2c349a733e093aed74dd855356b896e2a67d1a1c370ac0b9dc7537920646fa51494e1a10fa76869786efc711ba4b36165a10f32017fdea2a53') + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" PREFIX="$pkgdir/usr" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/crispy-doom/PKGBUILD b/crispy-doom/PKGBUILD new file mode 100644 index 0000000..b53175e --- /dev/null +++ b/crispy-doom/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=crispy-doom +pkgdesc="Vanilla-compatible enhanced 3D game-engine" +pkgver=7.0 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://github.com/fabiangreffrath/crispy-doom' +license=('GPL-2') +depends=('hicolor-icon-theme' 'libpng' 'libsamplerate' 'sdl2_mixer' 'sdl2_net') +makedepends=('python') +optdepends=('freedm: Free and libre deathmatch game' + 'freedoom: Free and libre action-games' + 'blasphemer: Free and libre dark-fantasy game') +groups=('games') +install=$pkgname.install +source=("https://github.com/fabiangreffrath/crispy-doom/archive/refs/tags/${pkgname}-${pkgver}.tar.gz") +sha512sums=('d2e182f8a81b164d09ff0ed2bb7f507349f9edf55b3d1a62b54a0cc76dd3b407722704dd3e58d5736018807c8c39147401972e05f0d6ebb8606d016e2b68b37f') + +prepare() { + mv "$pkgname-$pkgname-$pkgver" "$pkgname-$pkgver" + cd $pkgname-$pkgver + ./autogen.sh \ + --prefix=/usr \ + --bindir=/usr/games +} + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # remove data creating problems with other packages + rm -rf "$pkgdir"/usr/share/man/man5/default.cfg.5 \ + "$pkgdir"/usr/share/man/man5/heretic.cfg.5 \ + "$pkgdir"/usr/share/man/man5/hexen.cfg.5 \ + "$pkgdir"/usr/share/man/man6/chocolate-{server,setup}.6 + + # remove non-free data + rm "${pkgdir}"/usr/games/crispy-{strife,strife-setup,hexen,hexen-setup} + rm "${pkgdir}"/usr/share/applications/io.github.fabiangreffrath.{Hexen,Strife}.desktop + rm -rf "${pkgdir}"/usr/share/applications/screensavers + rm "${pkgdir}"/usr/share/bash-completion/completions/crispy-{hexen,strife} + rm -rf "${pkgdir}"/usr/share/doc/crispy-{hexen,strife} + rm "${pkgdir}"/usr/share/icons/hicolor/128x128/apps/crispy-{hexen,strife}.png + rm "${pkgdir}"/usr/share/man/man5/crispy-{hexen,strife}.cfg.5 + rm "${pkgdir}"/usr/share/man/man6/crispy-{hexen,hexen-setup,strife,strife-setup}.6 + rm "${pkgdir}"/usr/share/metainfo/io.github.fabiangreffrath.{Hexen,Strife}.metainfo.xml + + # install license + install -Dm644 COPYING.md -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/crispy-doom/crispy-doom.install b/crispy-doom/crispy-doom.install new file mode 100644 index 0000000..088574e --- /dev/null +++ b/crispy-doom/crispy-doom.install @@ -0,0 +1,15 @@ +post_install() { +cat < + +pkgname=cronie +pkgver=1.7.2 +pkgrel=1 +pkgdesc="Daemon that runs specified programs at scheduled times and related tools" +url='https://github.com/cronie-crond/cronie/' +license=('ISC') +arch=('i686' 'x86_64') +backup=('etc/cron.deny' + 'etc/cron.d/0hourly' + 'etc/anacrontab' + 'etc/conf.d/cronie' + 'etc/sv/cronie/conf') +conflicts=('cron') +provides=('cron') +depends=('sh' 'run-parts') +optdepends=('smtp-server: send job output via email' + 'smtp-forwarder: forward job output to email server' + 'logger: message logging support') +source=("https://github.com/cronie-crond/cronie/releases/download/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz" + 'deny' + 'cronie.confd' + 'cronie.initd' + 'cronie.conf' + 'cronie.run' + 'cronie_log.run') +sha512sums=('5b55c677a5b812dbfa70f6ee25e41907e99cc63a4883974c6bb8115ad65155d66665704808c338d2f7be6b0a57028c319f2d1115c69bb5f3efdda1efafd144de' + 'd05e3485cf39e94a4b1d185761a41a4e5476a0db228fd68b328381acde6a2ff3a7fe2c63938d7cd4ca03e13af035a40840ff15bc5aa0c37fee3bb99084bd835d' + '1392b0bf396a2b06224f15fc0bcb088eade2e65ef463c7d63da5d1b0944c3e3648bc9139c1e698d0c55baabf62502a8e6fce1af2f39ffff30e0eba558022ccdd' + '4fa75e91c131123659652eab45c9d2cda31b1ae26dcd6a0cbf40ff9b9cac077eb2eecf57ffeb1d8694748079858ee6451fd99d2c4f00d19b5a6f4b9b2b006272' + '00b4f6774fd6f864344bc087ff0fafdd485293527db2a4bef0ca2ba37639383f56977c794687c345b705462c2ad442062205938ec9e5e79647aeba2f9f530537' + '2b204299d74ebf5561d6cb5fd3dde5c0a597fa023863af26b152a0bebfbd6f0feda9612c688c91b84457f5eafdc9cef14063cd3a591d2d3a3cfed8fc8944ced3' + '04ebc7e915c692cf185be820d41c226ec43cf1dc82aee04367cb88cdbdc3f0fb61cce2050d9478ada743781686ca8ca2b3e88bebe2ff1dbe146d9a7919fd8306') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + sed -i 's|/usr/bin/vi|/bin/vi|' configure.ac + autoreconf -vfi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --enable-anacron \ + --without-inotify \ + --without-pam + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + chmod u+s "${pkgdir}"/usr/bin/crontab + install -d "${pkgdir}"/var/spool/{ana,}cron + install -d "${pkgdir}"/etc/cron.{d,hourly,daily,weekly,monthly} + + install -Dm644 "${srcdir}"/deny "${pkgdir}"/etc/cron.deny + + install -Dm644 contrib/anacrontab "${pkgdir}"/etc/anacrontab + install -Dm644 contrib/0hourly "${pkgdir}"/etc/cron.d/0hourly + install -Dm755 contrib/0anacron "${pkgdir}"/etc/cron.hourly/0anacron + + install -Dm644 "${srcdir}"/cronie.confd "${pkgdir}"/etc/conf.d/cronie + install -Dm755 "${srcdir}"/cronie.initd "${pkgdir}"/etc/init.d/cronie + + install -Dm644 "${srcdir}"/cronie.conf "${pkgdir}"/etc/sv/cronie/conf + install -Dm755 "${srcdir}"/cronie.run "${pkgdir}"/etc/sv/cronie/run + install -Dm755 "${srcdir}"/cronie_log.run "${pkgdir}"/etc/sv/cronie/log/run + + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/cronie/cronie.conf b/cronie/cronie.conf new file mode 100644 index 0000000..a9605c5 --- /dev/null +++ b/cronie/cronie.conf @@ -0,0 +1 @@ +OPTS="" diff --git a/cronie/cronie.confd b/cronie/cronie.confd new file mode 100644 index 0000000..f23d053 --- /dev/null +++ b/cronie/cronie.confd @@ -0,0 +1,9 @@ +# Settings for the CRON daemon. +# CRONDARGS= : any extra command-line startup arguments for crond +CRONDARGS= +rc_cgroup_memory="memory.limit_in_bytes 512M" +rc_cgroup_blkio="blkio.weight 100" + +# if you want to kill all running cron jobs when stopping or restarting the cron daemon +# then uncomment the follow line +# rc_cgroup_cleanup="yes" diff --git a/cronie/cronie.initd b/cronie/cronie.initd new file mode 100644 index 0000000..4c76bca --- /dev/null +++ b/cronie/cronie.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/usr/sbin/crond" +command_args="${CRONDARGS}" +pidfile="/var/run/crond.pid" + +depend() { + use clock logger + need localmount + provide cron +} diff --git a/cronie/cronie.run b/cronie/cronie.run new file mode 100644 index 0000000..da9cf07 --- /dev/null +++ b/cronie/cronie.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r conf ] && . ./conf +exec crond -n $OPTS 2>&1 diff --git a/cronie/cronie_log.run b/cronie/cronie_log.run new file mode 100644 index 0000000..6ff79ce --- /dev/null +++ b/cronie/cronie_log.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec vlogger -p cron.notice diff --git a/cronie/deny b/cronie/deny new file mode 100644 index 0000000..06e685c --- /dev/null +++ b/cronie/deny @@ -0,0 +1 @@ +# without this file, only users listed in /etc/cron.allow can use crontab diff --git a/crypto++/PKGBUILD b/crypto++/PKGBUILD new file mode 100644 index 0000000..06e1d70 --- /dev/null +++ b/crypto++/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=crypto++ +pkgver=8.4.0 +pkgrel=1 +pkgdesc="A free C++ class library of cryptographic schemes" +arch=('i686' 'x86_64') +url='https://www.cryptopp.com/' +license=('Boost-1.0' 'Modified-BSD' 'Public-Domain') +depends=('gcc-libs') +makedepends=('unzip') +source=("https://deb.debian.org/debian/pool/main/libc/libcrypto++/libcrypto++_${pkgver}.orig.tar.gz" + "libcryptopp.pc") +sha512sums=('6cbceb5e662d258f2db018e75e0f196092a8ba75350711b83d6b44b328718b348b6c071d9d0268062fb85cf9220c6a1caf30d408892f5a6f0f8bacfa887ca788' + '19707ade89b451962b09663726f6fcc6cc1deda4fb8a4396bcee0e5beb00239d52b97d540e2500278a0ff2deb853c8e18b0c02a142ba7cf9237cb1405eb32910') + +prepare() { + mv "cryptopp-CRYPTOPP_8_4_0" $pkgname-$pkgver +} + +build() { + export CXXFLAGS="$CXXFLAGS -DNDEBUG -fPIC" + make -C $pkgname-$pkgver dynamic cryptest.exe libcryptopp.pc +} + +package() { + make DESTDIR="${pkgdir}" PREFIX="/usr" -C $pkgname-$pkgver install + install -Dm644 $pkgname-$pkgver/License.txt -t "${pkgdir}"/usr/share/licenses/$pkgname/ + + # Remove cryptest.exe and test files, bloats the package + # because cryptest.exe is linked statically. + rm -rf "${pkgdir}"/usr/{bin,share/cryptopp} + + # Correcting pkg-config + rm "${pkgdir}"/usr/lib/pkgconfig/libcryptopp.pc + cp "${srcdir}/libcryptopp.pc" "${pkgdir}"/usr/lib/pkgconfig/ +} diff --git a/crypto++/libcryptopp.pc b/crypto++/libcryptopp.pc new file mode 100644 index 0000000..e63d97b --- /dev/null +++ b/crypto++/libcryptopp.pc @@ -0,0 +1,14 @@ +# Crypto++ package configuration file + +prefix=/usr +libdir=${prefix}/lib +includedir=${prefix}/include +datadir=${prefix}/share + +Name: Crypto++ +Description: Crypto++ cryptographic library +Version: 8.4 +URL: https://cryptopp.com/ + +Cflags: -I${includedir} +Libs: -L${libdir} -lcryptopp diff --git a/cscope/PKGBUILD b/cscope/PKGBUILD new file mode 100644 index 0000000..e4517da --- /dev/null +++ b/cscope/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=cscope +pkgver=15.9 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A developers tool for browsing program code" +arch=('i686' 'x86_64') +url='https://cscope.sourceforge.net/' +license=('Modified-BSD') +depends=('ncurses' 'sh') +makedepends=('quilt') +options=('!emptydirs') +source=("https://sourceforge.net/projects/cscope/files/cscope/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cscope/cscope_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('f3b95da5eb5c036cd39215785990c7cce7ce7b8eda4b18e60792e70d01ffb63809ce32ace310a9aefd88e6761c1609039ccfab0e8e49f81730bc1630babbcb80' + 'de4a6620b2aeb0e513a0da622ab232c6aca1e9cd96405371c5b9eb462a2087e4a5c5c8e941068fde039cab6cf98bda3efee7efdc7e8efe0c34172e50c7d1a90a') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + sed -i 's|/usr/local/lib/cs|/usr/lib/cs|' contrib/ocs + + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname + + cd contrib/xcscope + install -Dm644 xcscope.el "${pkgdir}"/usr/share/emacs/site-lisp/xcscope.el + install -m755 cscope-indexer "${pkgdir}"/usr/bin +} diff --git a/csfml/PKGBUILD b/csfml/PKGBUILD new file mode 100644 index 0000000..236c538 --- /dev/null +++ b/csfml/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=csfml +pkgver=2.5 +_debver=2.5 +_debrel=1.1 +pkgrel=1 +pkgdesc='C bindings for sfml' +arch=('i686' 'x86_64') +url='http://www.sfml-dev.org/' +license=('zlib') +depends=('sfml') +makedepends=('cmake' 'doxygen' 'ninja' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/SFML/CSFML/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libc/libcsfml/libcsfml_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('186ed87d8b925cfd51cc4aa0ba440407d18adc875da760576b5fafdf3e8c7e01ca0f594d9950495eb3e607c65bff12341a81df24af81043dce89d25d7cc24626' + '806def1d069feae93d2613f9e4f13ed5e45925657ed0867b5f91fb323be829d3460daf02a047488c542cd9708031b6d5ecd6e1fb2bec8ca39bd858abfe8bf9f6') + +prepare() { + cd CSFML-* + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd CSFML-* + + cmake . \ + -Bbuild \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCSFML_BUILD_DOC=true + ninja -C build + ninja -C build doc +} + +package() { + cd CSFML-* + + DESTDIR="$pkgdir/" ninja -C build install + + install -Dm644 license.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + diff --git a/csh/PKGBUILD b/csh/PKGBUILD new file mode 100644 index 0000000..5b5e780 --- /dev/null +++ b/csh/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=csh +pkgver=20110502 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="Shell with C-like syntax" +arch=('i686' 'x86_64') +url='https://www.openbsd.org/cgi-bin/cvsweb/src/bin/csh/' +license=('Modified-BSD') +install=$pkgname.install +depends=('libbsd') +makedepends=('quilt' 'bmake') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/csh/csh_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/c/csh/csh_${_debver}-${_debrel}.debian.tar.xz" + "fix-build.patch") +sha512sums=('17935f8857a5e286c04c8ff08a788224fcb9ab7b29439ad4f0fdeaafe8bd6331ab8ef2a2a2b1b70613580f2d7fce03c97ffe0364ec01a5cca9ade9cc4ae55b73' + '67a953fafee227494444e458853843e8a195287dc97b5f22eae78e3dea33800f0342fe5985ad685a93dc435d9592a8c05ec890afbecedca9294dfc21d9fb4eb3' + '88db21017b3255ad6a606ac04f4b6e9115358a68e905b0baed503d813c0bca288e76425ec4e5332ef842520736b4ae4e74da3cb5edc6543bc6a26a6cad98abc3') + +prepare() { + mv "${pkgname}-${pkgver}.orig" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cd "${pkgname}-${pkgver}" + bmake +} + +package() { + cd "${pkgname}-${pkgver}" + bmake DESTDIR="$pkgdir" install + mv "$pkgdir/usr/bin" "$pkgdir/bin" + + # manpage + rm -rf "$pkgdir/usr/share/man" + install -Dm 644 -p csh.1 -t "$pkgdir/usr/share/man/man1" + + # license + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/csh/csh.install b/csh/csh.install new file mode 100644 index 0000000..9ed1231 --- /dev/null +++ b/csh/csh.install @@ -0,0 +1,13 @@ +post_install() { + echo "Adding '/bin/csh' to '/etc/shells'..." + grep -qe '^/bin/csh$' etc/shells || echo '/bin/csh' >> etc/shells +} + +post_upgrade() { + post_install +} + +pre_remove() { + echo "Removing '/bin/csh' from '/etc/shells'..." + sed -i '\|^/bin/csh$|d' etc/shells +} diff --git a/csh/fix-build.patch b/csh/fix-build.patch new file mode 100644 index 0000000..572b0fc --- /dev/null +++ b/csh/fix-build.patch @@ -0,0 +1,268 @@ +--- a/Makefile 2023-04-28 18:07:38.000000000 +0200 ++++ b/Makefile 2023-04-28 18:15:56.074838575 +0200 +@@ -16,30 +16,9 @@ + sem.c set.c str.c time.c + LDADD+= -lbsd + +-CLEANFILES+=error.h const.h +- + .if (${MACHINE_ARCH} == "vax") + alloc.o: + ${CC} ${CFLAGS} ${CPPFLAGS} -O0 -c $< + .endif + +-const.h: error.h +- +-error.h: error.c +- @rm -f $@ +- @echo '/* Do not edit this file, make creates it. */' > $@ +- @echo '#ifndef _h_sh_err' >> $@ +- @echo '#define _h_sh_err' >> $@ +- egrep 'ERR_' ${.CURDIR}/$*.c | egrep '^#define' >> $@ +- @echo '#endif /* _h_sh_err */' >> $@ +- +-const.h: const.c +- @rm -f $@ +- @echo '/* Do not edit this file, make creates it. */' > $@ +- ${CC} -E ${CFLAGS} ${.CURDIR}/$*.c | egrep 'Char STR' | \ +- sed -e 's/Char \([a-zA-Z0-9_]*\)\(.*\)/extern Char \1[];/' | \ +- sort >> $@ +- +-.depend alloc.o: const.h error.h +- + .include +--- /dev/null 2023-04-27 02:51:39.496534973 +0200 ++++ a/error.h 2023-04-28 18:07:39.065506242 +0200 +@@ -0,0 +1,119 @@ ++/* Do not edit this file, make creates it. */ ++#ifndef _h_sh_err ++#define _h_sh_err ++#define ERR_FLAGS 0xf0000000 ++#define ERR_NAME 0x10000000 ++#define ERR_SILENT 0x20000000 ++#define ERR_OLD 0x40000000 ++#define ERR_SYNTAX 0 ++#define ERR_NOTALLOWED 1 ++#define ERR_WTOOLONG 2 ++#define ERR_LTOOLONG 3 ++#define ERR_DOLZERO 4 ++#define ERR_DOLQUEST 5 ++#define ERR_INCBR 6 ++#define ERR_EXPORD 7 ++#define ERR_BADMOD 8 ++#define ERR_SUBSCRIPT 9 ++#define ERR_BADNUM 10 ++#define ERR_NOMORE 11 ++#define ERR_FILENAME 12 ++#define ERR_GLOB 13 ++#define ERR_COMMAND 14 ++#define ERR_TOOFEW 15 ++#define ERR_TOOMANY 16 ++#define ERR_DANGER 17 ++#define ERR_EMPTYIF 18 ++#define ERR_IMPRTHEN 19 ++#define ERR_NOPAREN 20 ++#define ERR_NOTFOUND 21 ++#define ERR_MASK 22 ++#define ERR_LIMIT 23 ++#define ERR_TOOLARGE 24 ++#define ERR_SCALEF 25 ++#define ERR_UNDVAR 26 ++#define ERR_DEEP 27 ++#define ERR_BADSIG 28 ++#define ERR_UNKSIG 29 ++#define ERR_VARBEGIN 30 ++#define ERR_VARTOOLONG 31 ++#define ERR_VARALNUM 32 ++#define ERR_JOBCONTROL 33 ++#define ERR_EXPRESSION 34 ++#define ERR_NOHOMEDIR 35 ++#define ERR_CANTCHANGE 36 ++#define ERR_NULLCOM 37 ++#define ERR_ASSIGN 38 ++#define ERR_UNKNOWNOP 39 ++#define ERR_AMBIG 40 ++#define ERR_EXISTS 41 ++#define ERR_INTR 42 ++#define ERR_RANGE 43 ++#define ERR_OVERFLOW 44 ++#define ERR_VARMOD 45 ++#define ERR_NOSUCHJOB 46 ++#define ERR_TERMINAL 47 ++#define ERR_NOTWHILE 48 ++#define ERR_NOPROC 49 ++#define ERR_NOMATCH 50 ++#define ERR_MISSING 51 ++#define ERR_UNMATCHED 52 ++#define ERR_NOMEM 53 ++#define ERR_PIPE 54 ++#define ERR_SYSTEM 55 ++#define ERR_STRING 56 ++#define ERR_JOBS 57 ++#define ERR_JOBARGS 58 ++#define ERR_JOBCUR 59 ++#define ERR_JOBPREV 60 ++#define ERR_JOBPAT 61 ++#define ERR_NESTING 62 ++#define ERR_JOBCTRLSUB 63 ++#define ERR_BADPLPS 64 ++#define ERR_STOPPED 65 ++#define ERR_NODIR 66 ++#define ERR_EMPTY 67 ++#define ERR_BADDIR 68 ++#define ERR_DIRUS 69 ++#define ERR_HFLAG 70 ++#define ERR_NOTLOGIN 71 ++#define ERR_DIV0 72 ++#define ERR_MOD0 73 ++#define ERR_BADSCALE 74 ++#define ERR_SUSPLOG 75 ++#define ERR_UNKUSER 76 ++#define ERR_NOHOME 77 ++#define ERR_HISTUS 78 ++#define ERR_SPDOLLT 79 ++#define ERR_NEWLINE 80 ++#define ERR_SPSTAR 81 ++#define ERR_DIGIT 82 ++#define ERR_VARILL 83 ++#define ERR_NLINDEX 84 ++#define ERR_EXPOVFL 85 ++#define ERR_VARSYN 86 ++#define ERR_BADBANG 87 ++#define ERR_NOSUBST 88 ++#define ERR_BADSUBST 89 ++#define ERR_LHS 90 ++#define ERR_RHSLONG 91 ++#define ERR_BADBANGMOD 92 ++#define ERR_MODFAIL 93 ++#define ERR_SUBOVFL 94 ++#define ERR_BADBANGARG 95 ++#define ERR_NOSEARCH 96 ++#define ERR_NOEVENT 97 ++#define ERR_TOOMANYRP 98 ++#define ERR_TOOMANYLP 99 ++#define ERR_BADPLP 100 ++#define ERR_MISRED 101 ++#define ERR_OUTRED 102 ++#define ERR_REDPAR 103 ++#define ERR_INRED 104 ++#define ERR_ALIASLOOP 105 ++#define ERR_HISTLOOP 106 ++#define ERR_ARCH 107 ++#define ERR_FILEINQ 108 ++#define ERR_SELOVFL 109 ++#define ERR_INVALID 110 ++#endif /* _h_sh_err */ +--- /dev/null 2023-04-27 02:51:39.496534973 +0200 ++++ a/const.h 2023-04-28 18:07:39.125507368 +0200 +@@ -0,0 +1,110 @@ ++/* Do not edit this file, make creates it. */ ++extern Char STR0[]; ++extern Char STR1[]; ++extern Char STRHOME[]; ++extern Char STRLANG[]; ++extern Char STRLC_CTYPE[]; ++extern Char STRLOGNAME[]; ++extern Char STRLbrace[]; ++extern Char STRLparen[]; ++extern Char STRLparensp[]; ++extern Char STRNULL[]; ++extern Char STRPATH[]; ++extern Char STRPWD[]; ++extern Char STRQNULL[]; ++extern Char STRRbrace[]; ++extern Char STRRparen[]; ++extern Char STRTERM[]; ++extern Char STRUSER[]; ++extern Char STRalias[]; ++extern Char STRand2[]; ++extern Char STRand[]; ++extern Char STRaout[]; ++extern Char STRargv[]; ++extern Char STRbang[]; ++extern Char STRcaret[]; ++extern Char STRcdpath[]; ++extern Char STRcent2[]; ++extern Char STRcenthash[]; ++extern Char STRcentminus[]; ++extern Char STRcentplus[]; ++extern Char STRchase_symlinks[]; ++extern Char STRchild[]; ++extern Char STRcolon[]; ++extern Char STRcwd[]; ++extern Char STRdefault[]; ++extern Char STRdot[]; ++extern Char STRdotdotsl[]; ++extern Char STRdotsl[]; ++extern Char STRecho[]; ++extern Char STRequal[]; ++extern Char STRfakecom1[]; ++extern Char STRfakecom[]; ++extern Char STRfignore[]; ++extern Char STRfilec[]; ++extern Char STRhistchars[]; ++extern Char STRhistfile[]; ++extern Char STRhistory[]; ++extern Char STRhome[]; ++extern Char STRignore_symlinks[]; ++extern Char STRignoreeof[]; ++extern Char STRjobs[]; ++extern Char STRlistjobs[]; ++extern Char STRlogout[]; ++extern Char STRlong[]; ++extern Char STRmail[]; ++extern Char STRmh[]; ++extern Char STRminus[]; ++extern Char STRml[]; ++extern Char STRmn[]; ++extern Char STRmquestion[]; ++extern Char STRnice[]; ++extern Char STRnoambiguous[]; ++extern Char STRnobeep[]; ++extern Char STRnoclobber[]; ++extern Char STRnoglob[]; ++extern Char STRnohup[]; ++extern Char STRnonomatch[]; ++extern Char STRnormal[]; ++extern Char STRnotify[]; ++extern Char STRor2[]; ++extern Char STRor[]; ++extern Char STRpath[]; ++extern Char STRprintexitvalue[]; ++extern Char STRprompt2[]; ++extern Char STRprompt[]; ++extern Char STRpushdsilent[]; ++extern Char STRret[]; ++extern Char STRsavehist[]; ++extern Char STRsemisp[]; ++extern Char STRshell[]; ++extern Char STRslash[]; ++extern Char STRsldotcshrc[]; ++extern Char STRsldotlogin[]; ++extern Char STRsldthist[]; ++extern Char STRsldtlogout[]; ++extern Char STRsource[]; ++extern Char STRsp3dots[]; ++extern Char STRspLarrow2sp[]; ++extern Char STRspLarrowsp[]; ++extern Char STRspRarrow2[]; ++extern Char STRspRarrow[]; ++extern Char STRspRparen[]; ++extern Char STRspace[]; ++extern Char STRspand2sp[]; ++extern Char STRspor2sp[]; ++extern Char STRsporsp[]; ++extern Char STRstar[]; ++extern Char STRstatus[]; ++extern Char STRsymcent[]; ++extern Char STRsymhash[]; ++extern Char STRterm[]; ++extern Char STRthen[]; ++extern Char STRtilde[]; ++extern Char STRtildothist[]; ++extern Char STRtime[]; ++extern Char STRtmpsh[]; ++extern Char STRunalias[]; ++extern Char STRuser[]; ++extern Char STRverbose[]; ++extern Char STRwordchars[]; diff --git a/ctpl/PKGBUILD b/ctpl/PKGBUILD new file mode 100644 index 0000000..0091b77 --- /dev/null +++ b/ctpl/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=ctpl +pkgver=0.3.4 +_debver=$pkgver +_debrel=1.1 +pkgrel=2 +pkgdesc="Template engine library written in C" +arch=('i686' 'x86_64') +url='https://ctpl.tuxfamily.org/' +license=('GPL-3') +depends=('glib2') +makedepends=('intltool' 'automake-1.14' 'quilt') +source=("https://download.tuxfamily.org/ctpl/releases/$pkgname-$pkgver.tar.gz" + "http://deb.debian.org/debian/pool/main/c/ctpl/ctpl_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('5e4c7c4df2589008b6bcc0b5e83e953feef71d3553b8c8040cfd4f07ca7ddb33c6a9f17ba2366103a8353e3fdfd9fa200139277ae49a1768a7b7dfcb2e998b38' + 'c0a3119b3bb5d438ab2e3d5f40414a143d333929ea1c527b8ab52caf4ba99e749db233da3490e22cb1a0be678f117e1199ebaa7cdc46ac7b176674d6deceb69f') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +package() { + make -C "$pkgname-$pkgver" DESTDIR="$pkgdir" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cuetools/PKGBUILD b/cuetools/PKGBUILD new file mode 100644 index 0000000..9bde359 --- /dev/null +++ b/cuetools/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=cuetools +pkgver=1.4.1 +pkgrel=1 +pkgdesc="Cue and toc file parsers and utilities" +arch=('i686' 'x86_64') +url='https://github.com/svend/cuetools' +license=('GPL-2') +depends=('glibc') +optdepends=('id3v2: mp3 support in cuetag') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/svend/cuetools/archive/${pkgver}.tar.gz") +sha512sums=('dc81e6ec756f9d040dd913e8f340be136d68619caa24bdec21364f94b4fc0ffcbcf21325c7fd53c9230d6d70a2856b45a32c5ca7f41ec76fa47298bf226d959e') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + aclocal + autoheader + automake --force-missing --add-missing + autoconf +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/cups-filters/PKGBUILD b/cups-filters/PKGBUILD new file mode 100644 index 0000000..7fc5f09 --- /dev/null +++ b/cups-filters/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Jesus E. + +pkgname=cups-filters +pkgver=1.28.17 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="OpenPrinting CUPS Filters" +arch=('i686' 'x86_64') +url='https://wiki.linuxfoundation.org/openprinting/cups-filters' +license=('GPL-2') +depends=('lcms2' 'poppler' 'qpdf' 'graphicsmagick' 'liblouis' 'ijs' 'libcups' 'libexif') +makedepends=('ghostscript' 'ttf-dejavu' 'python' 'mupdf-tools' 'quilt') +optdepends=('ghostscript: for non-PostScript printers to print with CUPS to convert PostScript to raster images' + 'foomatic-db: drivers use Ghostscript to convert PostScript to a printable form directly' + 'foomatic-db-engine: drivers use Ghostscript to convert PostScript to a printable form directly' + 'antiword: needed to convert documents (requires also docx2txt)') +backup=(etc/cups/cups-browsed.conf) +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/cups-filters/cups-filters_${pkgver}.orig.tar.gz" + "https://security.debian.org/debian-security/pool/updates/main/c/cups-filters/cups-filters_${_debver}-${_debrel}+deb12u1.debian.tar.xz" + "cups-browsed.initd" + "cups-browsed.run") +provides=('foomatic-filters') +replaces=('foomatic-filters') +conflicts=('foomatic-filters') +sha512sums=('dd22a8e29330ecbef64772c311c1d7c48a48a9037687da8059d73d26c54740065d4416ccb6776203762d1e0625af143d4c156cf352fb9962d1ae89aa27e87d27' + '3df9b3f6ef86ffc44a7e8cb178a3c42df393bfa4b244744564c624116f02360540c44bb25c878feb957b1a5fe349cf7b3e4d5b0ad5ea3c2bf17806d584ff05ea' + 'd2d47ded65886e69d1b8bb910401898d5d1ef442bb119c2f2d2f798d20a3064d3e8a68d4a14544d94dd67b7af6f62a4725d50b680cd1d3ecfcb20ea5d6b2d026' + '3c6c959d06870a4665add767797ccf4a78ebab8a139686655ee22eb82b3762ed19f2b55b7646bc837be85f681682b941725fda21b82dff66fc64fa17a8206da0') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-rcdir=no \ + --disable-avahi \ + --with-browseremoteprotocols=DNSSD,CUPS \ + --enable-auto-setup-driverless \ + --with-test-font-path=/usr/share/fonts/TTF/DejaVuSans.ttf \ + --disable-dbus + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir/" install + + # OpenRC + install -Dm755 $srcdir/cups-browsed.initd $pkgdir/etc/init.d/cups-browsed + + # runit + install -Dm755 $srcdir/cups-browsed.run $pkgdir/etc/sv/cups-browsed/run + + # use lp group from cups + chgrp -R lp ${pkgdir}/etc/cups + + # license + install -Dm644 "${srcdir}"/${pkgname}-${pkgver}/COPYING "${pkgdir}"/usr/share/licenses/${pkgname}/COPYING +} diff --git a/cups-filters/cups-browsed.initd b/cups-filters/cups-browsed.initd new file mode 100644 index 0000000..67933f5 --- /dev/null +++ b/cups-filters/cups-browsed.initd @@ -0,0 +1,22 @@ +#!/sbin/openrc-run +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License, v2 or later + +PIDFILE=/var/run/cups-browsed.pid + +depend() { + need cupsd +} + +start() { + ebegin "Starting cups-browsed" + start-stop-daemon --start --make-pidfile --pidfile "${PIDFILE}" \ + --background --quiet --exec /usr/sbin/cups-browsed + eend $? +} + +stop() { + ebegin "Stopping cups-browsed" + start-stop-daemon --stop --pidfile "${PIDFILE}" --quiet --exec /usr/sbin/cupsd + eend $? +} diff --git a/cups-filters/cups-browsed.run b/cups-filters/cups-browsed.run new file mode 100644 index 0000000..1a16f73 --- /dev/null +++ b/cups-filters/cups-browsed.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec cups-browsed diff --git a/cups-pdf/PKGBUILD b/cups-pdf/PKGBUILD new file mode 100644 index 0000000..cf0c87a --- /dev/null +++ b/cups-pdf/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=cups-pdf +pkgver=3.0.1 +_debver=3.0.1 +_debrel=13 +pkgrel=1 +pkgdesc="PDF printer for cups" +arch=(i686 x86_64) +depends=('cups' 'ghostscript') +makedepends=('quilt') +install=cups-pdf.install +url="https://www.cups-pdf.de/welcome.shtml" +license=('GPL-2') +backup=(etc/cups/cups-pdf.conf) +source=(https://www.cups-pdf.de/src/cups-pdf_$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/c/cups-pdf/cups-pdf_$_debver-$_debrel.debian.tar.xz) +sha512sums=('a06580f3056dddbb883c8db0c71b37b883482ae1ac8aa9bcfd85e679c4dcb44278006b7110d2988173d0eeb05b0f19fb39081fad49bf26839235e97fbe27a818' + '58166b1367445e0bc615f8fae15b04fb5139796159819b47bde8c517f180713ca94e3e424221d460c4e741fa8aeafddbfa6bdd008a432039c77a585350be3cad') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + # Doesn't apply and seems unimportant + #rm -v debian/patches/01_debian_changes_to_cups-pdf_conf.patch || true + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver"/src + [ -z "$CC" ] && CC=gcc + $CC $CFLAGS $LDFLAGS -s cups-pdf.c -o cups-pdf -lcups +} + +package() { + cd "$pkgname-$pkgver"/src + install -D -m700 cups-pdf "$pkgdir"/usr/lib/cups/backend/cups-pdf + + # Install Postscript Color printer + cd ../extra + install -D -m644 CUPS-PDF_noopt.ppd "$pkgdir"/usr/share/cups/model/CUPS-PDF_noopt.ppd + install -D -m644 CUPS-PDF_opt.ppd "$pkgdir"/usr/share/cups/model/CUPS-PDF_opt.ppd + + # Install config file + install -D -m644 cups-pdf.conf "$pkgdir"/etc/cups/cups-pdf.conf + + # Install docs + install -D -m 644 ../README "$pkgdir"/usr/share/doc/$pkgname/README + + # use cups group from cups pkg FS#57311/FS#56818/FS#57313 + # chgrp -R cups "${pkgdir}"/etc/cups #not working to be checked later + sed -i "s:### Default\: lp:### Default\: cups:" "${pkgdir}"/etc/cups/cups-pdf.conf + sed -i "s:#Grp lp:Grp cups:" "${pkgdir}"/etc/cups/cups-pdf.conf + + # Install license file + install -D -m644 ../COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING +} diff --git a/cups-pdf/cups-pdf.install b/cups-pdf/cups-pdf.install new file mode 100644 index 0000000..7df03c8 --- /dev/null +++ b/cups-pdf/cups-pdf.install @@ -0,0 +1,16 @@ +post_install() { + cat << "EOF" +------------------------------------------------- +To use cups-pdf, restart cups and visit the cups +web interface at http://localhost:631/ + +You can now add a "Virtual Printer (PDF Printer)" +and use the Postscript/Generic postscript color +printer driver. + +Note that cups-pdf has a configuration +file in /etc/cups. The default location for +pdf output is /var/spool/cups-pdf/$username. +------------------------------------------------- +EOF +} diff --git a/cups/PKGBUILD b/cups/PKGBUILD new file mode 100644 index 0000000..8c442bb --- /dev/null +++ b/cups/PKGBUILD @@ -0,0 +1,195 @@ +# Maintainer: Jesus E. + +pkgbase=cups +pkgname=('libcups' 'cups') +pkgver=2.3.3 +_debver=$pkgver +_debrel=3 +pkgrel=6 +arch=('i686' 'x86_64') +license=('custom:Apache-2.0+CUPS-Exceptions') +url='https://www.cups.org/' +makedepends=('libtiff' 'libpng' 'acl' 'xdg-utils' 'krb5' 'gnutls' + 'cups-filters' 'bc' 'gzip' 'autoconf' 'libusb' + 'hicolor-icon-theme' 'libxcrypt' 'libpaper' 'quilt') +source=("${pkgbase}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/c/cups/cups_${pkgver}op2.orig.tar.gz" + "https://security.debian.org/pool/updates/main/c/cups/cups_${_debver}op2-${_debrel}+deb11u9.debian.tar.xz" + "cups.logrotate" + # improve build and linking + "cups-no-export-ssllibs.patch" + "cups-1.6.2-statedir.patch" + "guid.patch" + "cupsd.initd" + "cupsd.run" + "install-server-executables-in-usrlibexeccups.patch") +sha512sums=('db27dd6fb616bd7ad895b2bdf4ea7b010501358a50dc8f2e7e29558d1cfc088a572b1b35ac512654d3ed410c84df87dc34ca636533a4499117253915d4763117' + 'c3091522c0a1ce31636771a1bf80ee8a24d6637832e6ce235d02c1d40d8c115744cd92c2a4165ed0f7265200cb5a8ceebda0e9ab1eb684c5e9c896bad40675e5' + '6a3bec9b9d7625b1c364446afa8e5794934e56cbe8385f53759247702777d257cc229634ce8a8e5d1abe93494c19ac513f559d5c1b115897d1adb44ce0cd66c0' + '7a8cd9ac33b0dd4627c72df4275db8ccd7cf8e201bce3833719b42f532f526bb347b842e3ea1ef0d61855b5c6e1088b5d20b68942f2c2c0acf504d8d9728efd3' + '486295ae3a3404241034aeb8667667b663966c560f37b5b005eaef189b114f1829dfc427464856f68c263a82d201b9cb4ae3f4b0f3b3dc25b22f90d68cbea705' + '1d079c9f0372bd2435ccdc5b1e6ca6edaee8bdd2f7cc116a0787fa50e4d116b2a33f63fd89621e455b3058bfea315bf15b7440142f01f3c18fea3bc334cd8953' + 'e635cd76ea5797a33951b62acb8747174abbe9bb309573864a4620df6a097619718122029e2fa8f0f99fbd4f09b0696324d971436653df72736d4e9984e75425' + 'bd2f7f8c8961bd7dab70ca03e169ac68f8c092644aaa3f703d4f4ee2fadc88888b72c202d363bdddfba2c4f153334fd03936d9951105ea95ce0513e831c22eb8' + 'bb79002f365539d380f5865aaa4e109168fb4a00dffce7dbdd8b17125625b0c182d9f9aa44febac5e6b53ccddfaddc0beba85c91068affa510cb54b1dafc594c') + +prepare() { + mv "${pkgbase}-${pkgver}op2" "${pkgbase}-${pkgver}" + cd ${pkgbase}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0004-Apple-AirPrint-support.patch || true + rm -v debian/patches/0006-Debian-Set-LogFileGroup-to-adm.patch || true + rm -v debian/patches/0010-Debian-Use-dpkg-architecture-in-cups-config-to-make-.patch || true + rm -v debian/patches/0015-Debian-po4a-infrastructure-and-translations-for-manp.patch || true + + quilt push -av + fi + + # improve build and linking + # Do not export SSL libs in cups-config + patch -Np1 -i ${srcdir}/cups-no-export-ssllibs.patch + # move /var/run -> /run for pid file + patch -Np1 -i ${srcdir}/cups-1.6.2-statedir.patch + + # bug fixes + # FS#56818 - https://github.com/apple/cups/issues/5236 + patch -Np1 -i "${srcdir}"/guid.patch + + # set MaxLogSize to 0 to prevent using cups internal log rotation + sed -i -e '5i\ ' conf/cupsd.conf.in + sed -i -e '6i# Disable cups internal logging - use logrotate instead' conf/cupsd.conf.in + sed -i -e '7iMaxLogSize 0' conf/cupsd.conf.in + + # install server executables in /usr/libexec/cups to make it FHS compliant + patch -Np1 -i "${srcdir}"/install-server-executables-in-usrlibexeccups.patch + + # additional path corrections needed for prefix + # https://bugs.gentoo.org/show_bug.cgi?id=597728 + sed -e "s:ICONDIR.*:ICONDIR = /usr/share/icons:" \ + -e "s:INITDIR.*:INITDIR = /etc:" \ + -e "s:MENUDIR.*:MENUDIR = /usr/share/applications:" \ + -i Makedefs.in + + # Rebuild configure script for not zipping man-pages. + aclocal -I config-scripts + autoconf -I config-scripts +} + +build() { + cd ${pkgbase}-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libdir=/usr/lib \ + --with-logdir=/var/log/cups \ + --with-docdir=/usr/share/cups/doc \ + --with-cups-user=daemon \ + --with-cups-group=lp \ + --disable-pam \ + --enable-raw-printing \ + --disable-dbus \ + --enable-ssl=yes \ + --enable-threads \ + --disable-avahi \ + --disable-dnssd \ + --enable-libpaper \ + --with-optim="$CFLAGS" #--help + make +} + +check() { + cd ${pkgbase}-${pkgver} + #make -k check || /bin/true +} + +package_libcups() { + pkgdesc="The CUPS Printing System - client libraries and headers" + depends=('gnutls' 'libtiff>=4.0.0' 'libpng>=1.5.7' 'krb5' 'libusb' 'libxcrypt') + + cd ${pkgbase}-${pkgver} + make BUILDROOT=${pkgdir} install-headers install-libs + # put this into the libs pkg to make other software find the libs(no pkg-config file included) + mkdir -p ${pkgdir}/usr/bin + install -m755 ${srcdir}/${pkgbase}-${pkgver}/cups-config ${pkgdir}/usr/bin/cups-config + # install licenses + for i in LICENSE NOTICE; do + install -Dm644 $i $pkgdir/usr/share/licenses/$pkgname/$i + done +} + +package_cups() { + pkgdesc="The CUPS Printing System - daemon package" + install=cups.install + backup=(etc/cups/cupsd.conf + etc/cups/snmp.conf + etc/cups/printers.conf + etc/cups/classes.conf + etc/cups/cups-files.conf + etc/cups/subscriptions.conf + etc/logrotate.d/cups) + depends=('acl' "libcups>=${pkgver}" 'cups-filters' 'bc' + 'libpaper' 'hicolor-icon-theme') + optdepends=('xdg-utils: xdg .desktop file support' + 'logrotate: for logfile rotation support') + + cd ${pkgbase}-${pkgver} + make BUILDROOT=${pkgdir} install-data install-exec + + # this one we ship in the libcups pkg + rm -f ${pkgdir}/usr/bin/cups-config + + # kill the sysv stuff + rm -rf ${pkgdir}/etc/rc*.d + rm -rf ${pkgdir}/etc/init.d + install -D -m644 ../cups.logrotate ${pkgdir}/etc/logrotate.d/cups + + # fix perms on /var/spool and /etc + chmod 755 ${pkgdir}/var/spool + chmod 755 ${pkgdir}/etc + + # install ssl directory where to store the certs, solves some samba issues + install -dm700 -g lp ${pkgdir}/etc/cups/ssl + # remove directory from package, it will be recreated at each server start + rm -rf ${pkgdir}/run + + # install some more configuration files that will get filled by cupsd + touch ${pkgdir}/etc/cups/printers.conf + touch ${pkgdir}/etc/cups/classes.conf + touch ${pkgdir}/etc/cups/subscriptions.conf + chgrp -R lp ${pkgdir}/etc/cups + + # fix .desktop file + sed -i 's|^Exec=htmlview http://localhost:631/|Exec=xdg-open http://localhost:631/|g' ${pkgdir}/usr/share/applications/cups.desktop + + # compress some driver files, adopted from Fedora + find ${pkgdir}/usr/share/cups/model -name "*.ppd" | xargs gzip -n9f + + # remove client.conf man page + rm -f ${pkgdir}/usr/share/man/man5/client.conf.5 + + # comment out all conversion rules which use any of the removed filters that are now part of cups-filters + perl -p -i -e 's:^(.*\s+bannertops\s*)$:#\1:' $pkgdir/usr/share/cups/mime/mime.convs + + # comment out unnecessary PageLogFormat entry + sed -i -e 's:PageLogFormat:#PageLogFormat:' $pkgdir/etc/cups/cupsd.conf* + + # OpenRC + install -Dm755 ${srcdir}/cupsd.initd ${pkgdir}/etc/init.d/cupsd + + # runit + install -Dm755 ${srcdir}/cupsd.run ${pkgdir}/etc/sv/cupsd/run + + # install licenses + for i in LICENSE NOTICE; do + install -Dm644 $i $pkgdir/usr/share/licenses/$pkgname/$i + done +} diff --git a/cups/cups-1.6.2-statedir.patch b/cups/cups-1.6.2-statedir.patch new file mode 100644 index 0000000..c44ebed --- /dev/null +++ b/cups/cups-1.6.2-statedir.patch @@ -0,0 +1,12 @@ +diff -ruN cups-1.6.2.orig/config-scripts/cups-directories.m4 cups-1.6.2/config-scripts/cups-directories.m4 +--- cups-1.6.2.orig/config-scripts/cups-directories.m4 2012-10-01 03:55:23.000000000 +0200 ++++ cups-1.6.2/config-scripts/cups-directories.m4 2013-04-02 00:11:41.000000000 +0200 +@@ -420,7 +420,7 @@ + ;; + *) + # All others +- CUPS_STATEDIR="$localstatedir/run/cups" ++ CUPS_STATEDIR="/run/cups" + ;; + esac]) + AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$CUPS_STATEDIR") diff --git a/cups/cups-no-export-ssllibs.patch b/cups/cups-no-export-ssllibs.patch new file mode 100644 index 0000000..e227bd1 --- /dev/null +++ b/cups/cups-no-export-ssllibs.patch @@ -0,0 +1,12 @@ +diff -up cups-1.5b1/config-scripts/cups-ssl.m4.no-export-ssllibs cups-1.5b1/config-scripts/cups-ssl.m4 +--- cups-1.6.2/config-scripts/cups-ssl.m4.no-export-ssllibs 2011-05-11 02:52:08.000000000 +0200 ++++ cups-1.6.2/config-scripts/cups-ssl.m4 2011-05-23 17:47:27.000000000 +0200 +@@ -180,7 +180,7 @@ + AC_SUBST(SSLFLAGS) + AC_SUBST(SSLLIBS) + +-EXPORT_SSLLIBS="$SSLLIBS" ++EXPORT_SSLLIBS="" + AC_SUBST(EXPORT_SSLLIBS) + + dnl diff --git a/cups/cups.install b/cups/cups.install new file mode 100644 index 0000000..23732bb --- /dev/null +++ b/cups/cups.install @@ -0,0 +1,6 @@ +post_install() { + echo ">> If you use an HTTPS connection to CUPS, the first time you access" + echo ">> the interface it may take a very long time before the site comes up." + echo ">> This is because the first request triggers the generation of the CUPS" + echo ">> SSL certificates which can be a very time-consuming job." +} diff --git a/cups/cups.logrotate b/cups/cups.logrotate new file mode 100644 index 0000000..19e1210 --- /dev/null +++ b/cups/cups.logrotate @@ -0,0 +1,5 @@ +/var/log/cups/*_log { + missingok + notifempty + sharedscripts +} diff --git a/cups/cupsd.initd b/cups/cupsd.initd new file mode 100644 index 0000000..cd848d0 --- /dev/null +++ b/cups/cupsd.initd @@ -0,0 +1,20 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License, v2 or later + +description="The Common Unix Printing System service" +command="/usr/sbin/cupsd" + +depend() { + use net + before nfs + after logger +} + +start_pre() { + checkpath -q -d -m 0775 -o root:lp /var/cache/cups + checkpath -q -d -m 0775 -o root:lp /var/cache/cups/rss + checkpath -q -d -m 0755 -o root:lp /run/cups + checkpath -q -d -m 0511 -o daemon:sys /run/cups/certs +} diff --git a/cups/cupsd.run b/cups/cupsd.run new file mode 100644 index 0000000..568bee1 --- /dev/null +++ b/cups/cupsd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec cupsd -f diff --git a/cups/guid.patch b/cups/guid.patch new file mode 100644 index 0000000..ce28e02 --- /dev/null +++ b/cups/guid.patch @@ -0,0 +1,42 @@ +diff --git a/scheduler/cups-exec.c b/scheduler/cups-exec.c +index aab43a797..46c549075 100644 +--- a/scheduler/cups-exec.c ++++ b/scheduler/cups-exec.c +@@ -133,8 +133,13 @@ main(int argc, /* I - Number of command-line args */ + if (setgid(gid)) + exit(errno + 100); + +- if (setgroups(1, &gid)) ++#include ++ struct passwd * pwd = getpwuid(uid); ++ if(initgroups(pwd->pw_name,pwd->pw_gid)) ++ { ++ fprintf(stderr, "DEBUG: initgroups failed\n"); + exit(errno + 100); ++ } + + if (uid && setuid(uid)) + exit(errno + 100); +diff --git a/scheduler/util.c b/scheduler/util.c +index 19ebf069b..4638562bd 100644 +--- a/scheduler/util.c ++++ b/scheduler/util.c +@@ -300,7 +300,16 @@ cupsdPipeCommand(int *pid, /* O - Process ID or 0 on error */ + */ + + if (!getuid() && user) +- setuid(user); /* Run as restricted user */ ++ { ++#include ++ struct passwd * pwd = getpwuid(user); ++ if(initgroups(pwd->pw_name,pwd->pw_gid)) ++ { ++ fprintf(stderr, "DEBUG: initgroups failed\n"); ++ exit(errno + 100); ++ } ++ setuid(user); /* Run as restricted user */ ++ } + + if ((fd = open("/dev/null", O_RDONLY)) > 0) + { + diff --git a/cups/install-server-executables-in-usrlibexeccups.patch b/cups/install-server-executables-in-usrlibexeccups.patch new file mode 100644 index 0000000..e5bd4a2 --- /dev/null +++ b/cups/install-server-executables-in-usrlibexeccups.patch @@ -0,0 +1,24 @@ +--- a/config-scripts/cups-directories.m4 2023-01-30 00:09:55.000000000 +0100 ++++ b/config-scripts/cups-directories.m4 2023-01-30 00:12:36.304132805 +0100 +@@ -264,8 +264,8 @@ + case "$host_os_name" in + *-gnu) + # GNUs +- INSTALL_SYSV="install-sysv" +- CUPS_SERVERBIN="$exec_prefix/lib/cups" ++ INSTALL_SYSV="" ++ CUPS_SERVERBIN="$exec_prefix/libexec/cups" + ;; + *bsd* | darwin*) + # *BSD and Darwin (macOS) +@@ -274,8 +274,8 @@ + ;; + *) + # All others +- INSTALL_SYSV="install-sysv" +- CUPS_SERVERBIN="$exec_prefix/lib/cups" ++ INSTALL_SYSV="" ++ CUPS_SERVERBIN="$exec_prefix/libexec/cups" + ;; + esac + diff --git a/curlftpfs/PKGBUILD b/curlftpfs/PKGBUILD new file mode 100644 index 0000000..a27bbaa --- /dev/null +++ b/curlftpfs/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=curlftpfs +pkgver=0.9.2 +_debver=0.9.2 +_debrel=9 +pkgrel=1 +pkgdesc='A filesystem for acessing FTP hosts based on FUSE and libcurl.' +url='http://curlftpfs.sourceforge.net/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('curl' 'fuse2' 'glib2') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/sourceforge/curlftpfs/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/c/curlftpfs/curlftpfs_$_debver-$_debrel.debian.tar.xz) +sha512sums=('df07c418d175f766c89525017fc56e79726061eee0c3a6607ded0e1bf24f64f1475ba0e546157b65892194e3c4414c120822bf8fb175437e68366f82de216067' + '651939796a518e13cbc04e2ba276b57a58970f8d53bbba8b363b7d5bacb55734a21f78490484b2abec5eb707f4deb603938e6d0a5263a0d536a41c475c2684af') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/cvs/PKGBUILD b/cvs/PKGBUILD new file mode 100644 index 0000000..72a5dd6 --- /dev/null +++ b/cvs/PKGBUILD @@ -0,0 +1,89 @@ +# Maintainer: Jesus E. + +pkgname=cvs +pkgver=1.11.23 +pkgrel=3 +pkgdesc="Concurrent Versions System - a source control system" +arch=('i686' 'x86_64') +url="http://cvs.nongnu.org/" +license=('GPL-1') +depends=('krb5' 'zlib') +makedepends=('vim') +optdepends=('openssh: for using cvs over ssh' + 'net-tools: for using cvs over rsh') +source=(https://ftp.gnu.org/non-gnu/cvs/source/stable/${pkgver}/${pkgname}-${pkgver}.tar.bz2 + cvs-1.11.19-abortabort.patch + cvs-1.11.19-comp.patch + cvs-1.11.19-extzlib.patch + cvs-1.11.19-logmsg.patch + cvs-1.11.19-netbsd-tag.patch + cvs-1.11.19-tagname.patch + cvs-1.11.19-tmp.patch + cvs-1.11.21-diff-kk.patch + cvs-1.11.21-diff.patch + cvs-1.11.21-sort.patch + cvs-1.11.23-cve-2010-3846.patch + cvs-1.11.23-cvspass.patch + cvs-1.11.23-doc-Add-mandatory-argument-to-sp.patch + cvs-1.11.23-getline64.patch + cvs-1.11.23-make_make_check_sanity_testing_verbose.patch + cvs-1.11.23-Pass-compilation-with-Wformat-security.patch + cvs-1.11.23-remove_undefined_date_from_cvs_1_header.patch + cvs-1.11.23-sanity.patch) +sha512sums=('d84360b51b966f19ac3f1728265ff25e46d3a3ce6d9e7e30b154f0975bb10ce4f82f5ca3f308d2ff169c2b5dd97b0243e910d2e8ad59a5857aef7a70b9026b19' + 'c604cee7933f51583d578b410f9fb3a44d5a99d43b587ec753928f199a827424fa9c1fb07e57b114f7f09722bcca1645112a8ce72e06524f8543ca5638006395' + '776b148f95b8ee988bb18d83e43494e6f9ef679b02691bf2e7c20989ceb797666b0ffcd3c8afad9f70a76154d8ddd5ae1ae7ff0a98dc46ecaba1cbc120eb05ca' + 'c704eb37a0f21ce408f4466190486b0e71415ddb7b79b4690698792d19780cc366d98346827e762144a2e137d8e1b9b5f4a9e8acb9219aae35652b6c9e9c6a64' + '4d7efe7091d28e1cf7886d5353d13a17610555d45729e829b90e0793d3dec9ad1fd0f77b0a39f7e9c89366477bfbb2373438e48002e0b2af0be4a787d72bb3ee' + 'c06d43476ef2b3c636a45ee389cba0f4c94434cc4c473f594b2702d85fd7e4cc35c1d862bb79ca9304a806100fb7533f2ca856618667fb6e7d282a1c99748e03' + '3ca7c0f91c432dd25a93bcfeba83bea20971401df99f8df8a3d4a9b127b9e46ec8ac561847706990e430f16493ae4b85f5fee29c8741afe35ed145db168e3707' + 'ee2d31ce721c0dbc45d178a330045381d3efb95236e0196a5dc734d50e853422425d9166fa3fef16a1dbd98881fe2af7a5d0a15ef4df22205fdf948766c74488' + '70a185ff369e90d84ede2862dc2405ed2d35d0a04fdb31bf725b9f0e0fe3ba4e8a32be5aa0e979b82b90b50a7efc759056baf3ddb38980704b27314049278c09' + '17907b44a0cd907bd8b2bee7c8a71610dcc655705f0e075d82d15d175510f001dc25ea70260b29b1eeeabffaa71d3ee6fc34e1e6d67d01728f648aa0bf41e00a' + '2efa8ed5807b88473e8d01ca97c635eaf7784737e0f890c441eca7a2fe4d11eed8dda8c2a00df923f44232a4a673e3e8cdeff056c25072e360a2ce8e12dfbd95' + 'eed761af81c9bcd3edd898559e9be25c6612bdef19984cc6380a08039525179fa34d9ade6c55c1b4f23e495156b34cafeab3e63cfd120c0e68a42aa7992e5e85' + '8238193b9ac5ff2db92e4608e146be7d562af3c0e95151635356f149e33a5cd1ca293084e1b275086efa50908fce18450ff4fff32e035806f0d971cb408787e2' + 'de895cbfbb015a05b0833c15b4110affb2acc486867cfe09afc3c52c11a289a91bf5223ff5465e5e58a93fb598fa5cf63c6d9e85b113d7123adf19cfe774a4cb' + 'cc263c029260a6d3816f917592ad1c494e112074c85cf300104b6af4ef4a971ef697ae40324ab0001e1738cb47568778399765768f6a42407e8d130dd8a30ab8' + '8886c62f354ba206f68659996aa367ffbdb81dcdae7e24db4b27e74028d08f78d1df757416497c953e07c6c22dadab1d13b41dd7ba9ee3f7e8c352bd17c83e89' + '68cf971df4eb7083df5d7dc9b92a38d4f763ca7c0a99609fdf2047664497fb94ed336879d68d71d90843741c73d5c0d796c17242b7a82eec3540843560783306' + '52d0c80e543891eb51e3889a02c5c296200085362fa19a1fbf306e98b0a5c2f7c2325621c8a3ea20bdf73189cde64232e4d22ab2fd5cf836edc61bc680a47dac' + '44b4c91655a74b6c7192b1e9b135e1fb9f6b54092e46bec36bc7a38c97d070046b3666101def93cd309029da5b0e81385b6b40b3a60b06cfaa0bb2392752cee2') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + unset EDITOR VISUAL + + patch -Np1 < ../cvs-1.11.19-extzlib.patch + patch -Np1 < ../cvs-1.11.23-getline64.patch + patch -Np1 < ../cvs-1.11.23-cve-2010-3846.patch + patch -Np1 < ../cvs-1.11.19-abortabort.patch + patch -Np1 < ../cvs-1.11.19-comp.patch + patch -Np1 < ../cvs-1.11.19-netbsd-tag.patch + patch -Np1 < ../cvs-1.11.19-tagname.patch + patch -Np1 < ../cvs-1.11.19-tmp.patch + patch -Np1 < ../cvs-1.11.21-diff-kk.patch + patch -Np1 < ../cvs-1.11.21-diff.patch + patch -Np1 < ../cvs-1.11.21-sort.patch + patch -Np1 < ../cvs-1.11.23-cvspass.patch + patch -Np1 < ../cvs-1.11.19-logmsg.patch + patch -Np1 < ../cvs-1.11.23-doc-Add-mandatory-argument-to-sp.patch + patch -Np1 < ../cvs-1.11.23-make_make_check_sanity_testing_verbose.patch + patch -Np1 < ../cvs-1.11.23-Pass-compilation-with-Wformat-security.patch + patch -Np1 < ../cvs-1.11.23-remove_undefined_date_from_cvs_1_header.patch + patch -Np1 < ../cvs-1.11.23-sanity.patch + + sed -i -e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' configure.in + find . -name Makefile.am | xargs sed -i -e 's/^INCLUDES/AM_CPPFLAGS/' + AUTOMAKE='automake --add-missing' autoreconf + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + rm "${pkgdir}"/usr/share/info/dir + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/cvs/cvs-1.11.19-abortabort.patch b/cvs/cvs-1.11.19-abortabort.patch new file mode 100644 index 0000000..22121e1 --- /dev/null +++ b/cvs/cvs-1.11.19-abortabort.patch @@ -0,0 +1,70 @@ +--- cvs-1.11.19/src/server.c.old3 2004-09-24 21:59:08.000000000 +0200 ++++ cvs-1.11.19/src/server.c 2005-02-28 13:09:22.000000000 +0100 +@@ -4900,6 +4900,15 @@ + int status; + int save_noexec; + ++#ifndef DONT_USE_SIGNALS ++#ifdef SIGABRT ++ /* Need to deregister the SIGABRT handler so that if an assertion ++ fails and calls abort while we're cleaning up, we won't ++ infinitely recurse in the cleanup function. */ ++ SIG_deregister(SIGABRT, server_cleanup); ++#endif ++#endif /* !DONT_USE_SIGNALS */ ++ + if (buf_to_net != NULL) + { + /* Since we're done, go ahead and put BUF_TO_NET back into blocking +--- cvs-1.11.19/src/main.c.old3 2005-02-03 15:50:51.000000000 +0100 ++++ cvs-1.11.19/src/main.c 2005-02-28 13:02:52.000000000 +0100 +@@ -341,6 +341,13 @@ + const char *name; + char temp[10]; + ++#ifdef SIGABRT ++ /* Need to deregister the SIGABRT handler so that if an assertion ++ fails and calls abort while we're cleaning up, we won't ++ infinitely recurse in the cleanup function. */ ++ SIG_deregister(SIGABRT, main_cleanup); ++#endif ++ + switch (sig) + { + #ifdef SIGABRT +--- cvs-1.11.19/src/rcs.c.old3 2005-01-31 23:15:08.000000000 +0100 ++++ cvs-1.11.19/src/rcs.c 2005-02-28 13:06:06.000000000 +0100 +@@ -8314,6 +8314,15 @@ + called from a signal handler, so we don't know whether the + files got created. */ + ++#ifndef DONT_USE_SIGNALS ++#ifdef SIGABRT ++ /* Need to deregister the SIGABRT handler so that if an assertion ++ fails and calls abort while we're cleaning up, we won't ++ infinitely recurse in the cleanup function. */ ++ SIG_deregister(SIGABRT, rcs_cleanup); ++#endif ++#endif /* !DONT_USE_SIGNALS */ ++ + /* FIXME: Do not perform buffered I/O from an interrupt handler like + this (via error). However, I'm leaving the error-calling code there + in the hope that on the rare occasion the error call is actually made +--- cvs-1.11.19/src/patch.c.old3 2005-01-31 23:15:02.000000000 +0100 ++++ cvs-1.11.19/src/patch.c 2005-02-28 13:04:16.000000000 +0100 +@@ -796,6 +796,15 @@ + called from a signal handler, without SIG_begincrsect, so + we don't know whether the files got created. */ + ++#ifndef DONT_USE_SIGNALS ++#ifdef SIGABRT ++ /* Need to deregister the SIGABRT handler so that if an assertion ++ fails and calls abort while we're cleaning up, we won't ++ infinitely recurse in the cleanup function. */ ++ SIG_deregister(SIGABRT, patch_cleanup); ++#endif ++#endif /* !DONT_USE_SIGNALS */ ++ + if (tmpfile1 != NULL) + { + if (unlink_file (tmpfile1) < 0 diff --git a/cvs/cvs-1.11.19-comp.patch b/cvs/cvs-1.11.19-comp.patch new file mode 100644 index 0000000..fb8951f --- /dev/null +++ b/cvs/cvs-1.11.19-comp.patch @@ -0,0 +1,11 @@ +--- cvs-1.11.19/src/rcs.c.old 2005-03-17 11:21:18.000000000 +0100 ++++ cvs-1.11.19/src/rcs.c 2005-03-17 11:21:56.000000000 +0100 +@@ -138,7 +138,7 @@ + string comparisons. This macro speeds things up a bit by skipping + the function call when the first characters are different. It + evaluates its arguments multiple times. */ +-#define STREQ(a, b) (*(char *)(a) == *(char *)(b) && strcmp ((a), (b)) == 0) ++#define STREQ(a, b) ((a) != NULL && (b) != NULL && *(char *)(a) == *(char *)(b) && strcmp ((a), (b)) == 0) + + /* + * We don't want to use isspace() from the C library because: diff --git a/cvs/cvs-1.11.19-extzlib.patch b/cvs/cvs-1.11.19-extzlib.patch new file mode 100644 index 0000000..9a8506d --- /dev/null +++ b/cvs/cvs-1.11.19-extzlib.patch @@ -0,0 +1,44 @@ +--- cvs-1.11.19/configure.in.old.old4 2005-02-01 00:10:49.000000000 +0100 ++++ cvs-1.11.19/configure.in 2005-02-28 13:27:10.000000000 +0100 +@@ -1040,8 +1040,8 @@ + tools/Makefile \ + vms/Makefile \ + windows-NT/Makefile \ +- windows-NT/SCC/Makefile \ +- zlib/Makefile]) ++ windows-NT/SCC/Makefile ++ ]) + + dnl and we're done + AC_OUTPUT +--- cvs-1.11.19/Makefile.am.old.old4 2004-11-11 23:30:36.000000000 +0100 ++++ cvs-1.11.19/Makefile.am 2005-02-28 13:25:32.000000000 +0100 +@@ -17,7 +17,7 @@ + ## Subdirectories to run make in for the primary targets. + # Unix source subdirs, where we'll want to run lint and etags: + # This is a legacy variable from b4 Automake +-USOURCE_SUBDIRS = lib zlib diff src ++USOURCE_SUBDIRS = lib diff src + # All other subdirs: + SUBDIRS = $(USOURCE_SUBDIRS) man doc contrib tools \ + windows-NT os2 emx vms +--- cvs-1.11.19/src/Makefile.am.old.old4 2005-01-31 23:07:35.000000000 +0100 ++++ cvs-1.11.19/src/Makefile.am 2005-02-28 13:24:26.000000000 +0100 +@@ -24,7 +24,7 @@ + # try and remove naming ocnflicts and fix Automake to allow particular includes + # to be attached only to particular object files. Short term fix is either or. + ##INCLUDES = -I. -I.. -I$(srcdir) -I$(top_srcdir)/lib +-INCLUDES = -I$(top_srcdir)/lib -I$(top_srcdir)/diff -I$(top_srcdir)/zlib $(includeopt) ++INCLUDES = -I$(top_srcdir)/lib -I$(top_srcdir)/diff $(includeopt) + + bin_PROGRAMS = cvs + bin_SCRIPTS = cvsbug +@@ -105,7 +105,7 @@ + cvs_LDADD = \ + ../diff/libdiff.a \ + ../lib/libcvs.a \ +- ../zlib/libz.a ++ -lz + + # extra clean targets + # wish this could be distclean-hdr-local but it's not part of automake diff --git a/cvs/cvs-1.11.19-logmsg.patch b/cvs/cvs-1.11.19-logmsg.patch new file mode 100644 index 0000000..ffb01c6 --- /dev/null +++ b/cvs/cvs-1.11.19-logmsg.patch @@ -0,0 +1,20 @@ +--- cvs-1.11.19/src/logmsg.c.old 2005-03-09 10:45:50.000000000 +0100 ++++ cvs-1.11.19/src/logmsg.c 2005-03-09 10:46:36.000000000 +0100 +@@ -230,6 +230,8 @@ + if ((*messagep)[0] == '\0' || + (*messagep)[strlen (*messagep) - 1] != '\n') + (void) fprintf (fp, "\n"); ++ } else { ++ (void) fprintf (fp, "\n"); + } + + if (repository != NULL) +@@ -271,7 +273,7 @@ + } + + (void) fprintf (fp, +- "\n%s----------------------------------------------------------------------\n", ++ "%s----------------------------------------------------------------------\n", + CVSEDITPREFIX); + (void) fprintf (fp, + "%sEnter Log. Lines beginning with `%.*s' are removed automatically\n%s\n", diff --git a/cvs/cvs-1.11.19-netbsd-tag.patch b/cvs/cvs-1.11.19-netbsd-tag.patch new file mode 100644 index 0000000..b2a5cb0 --- /dev/null +++ b/cvs/cvs-1.11.19-netbsd-tag.patch @@ -0,0 +1,28 @@ +--- cvs-1.11.19/src/logmsg.c.old2 2005-02-28 11:49:35.000000000 +0100 ++++ cvs-1.11.19/src/logmsg.c 2005-02-28 12:58:16.000000000 +0100 +@@ -690,6 +690,15 @@ + strlen (str_list) + strlen (p->key) + 5); + (void) strcat (str_list, p->key); + break; ++ case 't': ++ str_list = ++ xrealloc (str_list, ++ (strlen (str_list) ++ + (li->tag ? strlen (li->tag) : 0) ++ + 10) ++ ); ++ (void) strcat (str_list, (li->tag ? li->tag : "")); ++ break; + case 'V': + str_list = + xrealloc (str_list, +--- cvs-1.11.19/src/mkmodules.c.old2 2005-01-31 23:14:17.000000000 +0100 ++++ cvs-1.11.19/src/mkmodules.c 2005-02-28 12:59:03.000000000 +0100 +@@ -74,6 +74,7 @@ + "# s = file name\n", + "# V = old version number (pre-checkin)\n", + "# v = new version number (post-checkin)\n", ++ "# t = tag or branch name\n", + "#\n", + "# For example:\n", + "#DEFAULT (echo \"\"; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog\n", diff --git a/cvs/cvs-1.11.19-tagname.patch b/cvs/cvs-1.11.19-tagname.patch new file mode 100644 index 0000000..0e7d0a7 --- /dev/null +++ b/cvs/cvs-1.11.19-tagname.patch @@ -0,0 +1,11 @@ +--- cvs-1.11.19/src/rcs.c.old 2005-03-14 13:09:39.000000000 +0100 ++++ cvs-1.11.19/src/rcs.c 2005-03-14 13:08:24.000000000 +0100 +@@ -3382,7 +3382,7 @@ + RCS_check_tag (tag) + const char *tag; + { +- char *invalid = "$,.:;@"; /* invalid RCS tag characters */ ++ char *invalid = "$,.:;@/"; /* invalid RCS tag characters */ + const char *cp; + + /* diff --git a/cvs/cvs-1.11.19-tmp.patch b/cvs/cvs-1.11.19-tmp.patch new file mode 100644 index 0000000..7849b1f --- /dev/null +++ b/cvs/cvs-1.11.19-tmp.patch @@ -0,0 +1,19 @@ +--- cvs-1.11.19/src/cvsbug.in.old 2004-02-03 15:37:52.000000000 +0100 ++++ cvs-1.11.19/src/cvsbug.in 2005-08-22 16:35:06.000000000 +0200 +@@ -109,14 +109,14 @@ + /usr/bin/ypcat passwd 2>/dev/null | cat - /etc/passwd | grep "^$LOGNAME:" | + cut -f5 -d':' | sed -e 's/,.*//' > $TEMP + ORIGINATOR="`cat $TEMP`" +- rm -f $TEMP ++ > $TEMP + fi + fi + + if [ "$ORIGINATOR" = "" ]; then + grep "^$LOGNAME:" /etc/passwd | cut -f5 -d':' | sed -e 's/,.*//' > $TEMP + ORIGINATOR="`cat $TEMP`" +- rm -f $TEMP ++ > $TEMP + fi + + if [ -n "$ORGANIZATION" ]; then diff --git a/cvs/cvs-1.11.21-diff-kk.patch b/cvs/cvs-1.11.21-diff-kk.patch new file mode 100644 index 0000000..853b7a4 --- /dev/null +++ b/cvs/cvs-1.11.21-diff-kk.patch @@ -0,0 +1,11 @@ +--- cvs-1.11.21/src/diff.c.old 2005-12-19 11:01:59.000000000 +0100 ++++ cvs-1.11.21/src/diff.c 2005-12-21 15:45:40.000000000 +0100 +@@ -438,7 +438,7 @@ + + /* Send the current files unless diffing two revs from the archive */ + if (diff_rev2 == NULL && diff_date2 == NULL) +- send_files (argc, argv, local, 0, 0); ++ send_files (argc, argv, local, 0, options[0] == '\0' ? 0 : SEND_FORCE); + else + send_files (argc, argv, local, 0, SEND_NO_CONTENTS); + diff --git a/cvs/cvs-1.11.21-diff.patch b/cvs/cvs-1.11.21-diff.patch new file mode 100644 index 0000000..f2a306b --- /dev/null +++ b/cvs/cvs-1.11.21-diff.patch @@ -0,0 +1,21 @@ +--- cvs-1.11.21/src/diff.c.old 2005-05-27 19:17:03.000000000 +0200 ++++ cvs-1.11.21/src/diff.c 2005-12-15 15:22:05.000000000 +0100 +@@ -955,14 +955,16 @@ + /* The first revision does not exist. If EMPTY_FILES is + true, treat this as an added file. Otherwise, warn + about the missing tag. */ +- if( use_rev2 == NULL || RCS_isdead( vers->srcfile, use_rev2 ) ) ++ if( use_rev2 == NULL || RCS_isdead( vers->srcfile, use_rev2 ) ) { + /* At least in the case where DIFF_REV1 and DIFF_REV2 + * are both numeric (and non-existant (NULL), as opposed to + * dead?), we should be returning some kind of error (see + * basicb-8a0 in testsuite). The symbolic case may be more + * complicated. + */ +- return DIFF_SAME; ++ error (0, 0, "no revision in file %s or missing file %s", finfo->fullname, finfo->fullname); ++ return DIFF_ERROR; ++ } + if( empty_files ) + return DIFF_ADDED; + if( use_rev1 != NULL ) diff --git a/cvs/cvs-1.11.21-sort.patch b/cvs/cvs-1.11.21-sort.patch new file mode 100644 index 0000000..66e06e1 --- /dev/null +++ b/cvs/cvs-1.11.21-sort.patch @@ -0,0 +1,12 @@ +--- cvs-1.11.21/contrib/rcs2log.sh.old 2005-08-02 22:46:43.000000000 +0200 ++++ cvs-1.11.21/contrib/rcs2log.sh 2006-05-09 11:49:10.000000000 +0200 +@@ -68,6 +68,9 @@ + For more information about these matters, see the files named COPYING. + Author: Paul Eggert ' + ++# set old environment for sort (bug #190009) ++export _POSIX2_VERSION=199209 ++ + # functions + @MKTEMP_SH_FUNCTION@ + diff --git a/cvs/cvs-1.11.23-Pass-compilation-with-Wformat-security.patch b/cvs/cvs-1.11.23-Pass-compilation-with-Wformat-security.patch new file mode 100644 index 0000000..4922715 --- /dev/null +++ b/cvs/cvs-1.11.23-Pass-compilation-with-Wformat-security.patch @@ -0,0 +1,73 @@ +From 52093add7b3f38156e632fa81fcf1c0b6ad4d549 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 3 Dec 2013 15:11:14 +0100 +Subject: [PATCH] Pass compilation with -Wformat-security +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Petr Písař +--- + diff/diff3.c | 2 +- + src/main.c | 2 +- + src/subr.c | 12 ++++-------- + 3 files changed, 6 insertions(+), 10 deletions(-) + +diff --git a/diff/diff3.c b/diff/diff3.c +index 006039f..e9418ce 100644 +--- a/diff/diff3.c ++++ b/diff/diff3.c +@@ -1505,7 +1505,7 @@ output_diff3 (diff, mapping, rev_mapping) + line = 0; + do + { +- printf_output (line_prefix); ++ printf_output ("%s", line_prefix); + cp = D_RELNUM (ptr, realfile, line); + length = D_RELLEN (ptr, realfile, line); + write_output (cp, length); +diff --git a/src/main.c b/src/main.c +index 24a6e6f..e7f0439 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -1154,6 +1154,6 @@ usage (cpp) + { + (void) fprintf (stderr, *cpp++, program_name, cvs_cmd_name); + for (; *cpp; cpp++) +- (void) fprintf (stderr, *cpp); ++ (void) fprintf (stderr, "%s", *cpp); + error_exit (); + } +diff --git a/src/subr.c b/src/subr.c +index 0725503..94907ce 100644 +--- a/src/subr.c ++++ b/src/subr.c +@@ -46,10 +46,8 @@ xmalloc (bytes) + cp = malloc (bytes); + if (cp == NULL) + { +- char buf[80]; +- sprintf (buf, "out of memory; can not allocate %lu bytes", +- (unsigned long) bytes); +- error (1, 0, buf); ++ error (1, 0, "out of memory; can not allocate %lu bytes", ++ (unsigned long) bytes); + } + return (cp); + } +@@ -73,10 +71,8 @@ xrealloc (ptr, bytes) + + if (cp == NULL) + { +- char buf[80]; +- sprintf (buf, "out of memory; can not reallocate %lu bytes", +- (unsigned long) bytes); +- error (1, 0, buf); ++ error (1, 0, "out of memory; can not reallocate %lu bytes", ++ (unsigned long) bytes); + } + return (cp); + } +-- +1.8.3.1 + diff --git a/cvs/cvs-1.11.23-cve-2010-3846.patch b/cvs/cvs-1.11.23-cve-2010-3846.patch new file mode 100644 index 0000000..e1560ce --- /dev/null +++ b/cvs/cvs-1.11.23-cve-2010-3846.patch @@ -0,0 +1,167 @@ +From b122edcb68ff05bb6eb22f6e50423e7f1050841b Mon Sep 17 00:00:00 2001 +From: Larry Jones +Date: Thu, 21 Oct 2010 10:08:16 +0200 +Subject: [PATCH] Fix for CVE-2010-3846 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Mallformed RCS revision (delete after the end of input file, or overlayed +deleted regions) screws output file image size computation. This leads to +write attempt after the allocated memory opening hiden memory corruption +driven by CVS server. + +Signed-off-by: Petr Písař +--- + src/rcs.c | 52 +++++++++++++++++++++++++++++----------------------- + 1 files changed, 29 insertions(+), 23 deletions(-) + +diff --git a/src/rcs.c b/src/rcs.c +index 7d0d078..2f88f85 100644 +--- a/src/rcs.c ++++ b/src/rcs.c +@@ -7128,7 +7128,7 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + struct deltafrag *dfhead; + struct deltafrag **dftail; + struct deltafrag *df; +- unsigned long numlines, lastmodline, offset; ++ unsigned long numlines, offset; + struct linevector lines; + int err; + +@@ -7202,12 +7202,12 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + + /* New temp data structure to hold new org before + copy back into original structure. */ +- lines.nlines = lines.lines_alloced = numlines; ++ lines.lines_alloced = numlines; + lines.vector = xmalloc (numlines * sizeof *lines.vector); + + /* We changed the list order to first to last -- so the + list never gets larger than the size numlines. */ +- lastmodline = 0; ++ lines.nlines = 0; + + /* offset created when adding/removing lines + between new and original structure */ +@@ -7216,25 +7216,24 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + for (df = dfhead; df != NULL; ) + { + unsigned int ln; +- unsigned long deltaend; ++ unsigned long newpos = df->pos - offset; + +- if (df->pos > orig_lines->nlines) ++ if (newpos < lines.nlines || newpos > numlines) + err = 1; + + /* On error, just free the rest of the list. */ + if (!err) + { +- /* Here we need to get to the line where the next insert will ++ /* Here we need to get to the line where the next change will + begin, which is DF->pos in ORIG_LINES. We will fill up to + DF->pos - OFFSET in LINES with original items. */ +- for (deltaend = df->pos - offset; +- lastmodline < deltaend; +- lastmodline++) ++ while (lines.nlines < newpos) + { + /* we need to copy from the orig structure into new one */ +- lines.vector[lastmodline] = +- orig_lines->vector[lastmodline + offset]; +- lines.vector[lastmodline]->refcount++; ++ lines.vector[lines.nlines] = ++ orig_lines->vector[lines.nlines + offset]; ++ lines.vector[lines.nlines]->refcount++; ++ lines.nlines++; + } + + switch (df->type) +@@ -7246,7 +7245,12 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + struct line *q; + int nextline_newline; + size_t nextline_len; +- ++ ++ if (newpos + df->nlines > numlines) ++ { ++ err = 1; ++ break; ++ } + textend = df->new_lines + df->len; + nextline_newline = 0; + nextline_text = df->new_lines; +@@ -7271,8 +7275,7 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + q->has_newline = nextline_newline; + q->refcount = 1; + memcpy (q->text, nextline_text, nextline_len); +- lines.vector[lastmodline++] = q; +- offset--; ++ lines.vector[lines.nlines++] = q; + + nextline_text = (char *)p + 1; + nextline_newline = 0; +@@ -7286,11 +7289,11 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + q->has_newline = nextline_newline; + q->refcount = 1; + memcpy (q->text, nextline_text, nextline_len); +- lines.vector[lastmodline++] = q; ++ lines.vector[lines.nlines++] = q; + + /* For each line we add the offset between the #'s + decreases. */ +- offset--; ++ offset -= df->nlines; + break; + } + +@@ -7301,7 +7304,9 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + if (df->pos + df->nlines > orig_lines->nlines) + err = 1; + else if (delvers) ++ { + for (ln = df->pos; ln < df->pos + df->nlines; ++ln) ++ { + if (orig_lines->vector[ln]->refcount > 1) + /* Annotate needs this but, since the original + * vector is disposed of before returning from +@@ -7309,6 +7314,8 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + * there are multiple references. + */ + orig_lines->vector[ln]->vers = delvers; ++ } ++ } + break; + } + } +@@ -7328,21 +7335,20 @@ apply_rcs_changes (orig_lines, diffbuf, difflen, name, addvers, delvers) + else + { + /* add the rest of the remaining lines to the data vector */ +- for (; lastmodline < numlines; lastmodline++) ++ while (lines.nlines < numlines) + { + /* we need to copy from the orig structure into new one */ +- lines.vector[lastmodline] = orig_lines->vector[lastmodline ++ lines.vector[lines.nlines] = orig_lines->vector[lines.nlines + + offset]; +- lines.vector[lastmodline]->refcount++; ++ lines.vector[lines.nlines]->refcount++; ++ lines.nlines++; + } + + /* Move the lines vector to the original structure for output, + * first deleting the old. + */ + linevector_free (orig_lines); +- orig_lines->vector = lines.vector; +- orig_lines->lines_alloced = numlines; +- orig_lines->nlines = lines.nlines; ++ *orig_lines = lines; + } + + return !err; +-- +1.7.2.3 + diff --git a/cvs/cvs-1.11.23-cvspass.patch b/cvs/cvs-1.11.23-cvspass.patch new file mode 100644 index 0000000..7d4fd61 --- /dev/null +++ b/cvs/cvs-1.11.23-cvspass.patch @@ -0,0 +1,113 @@ +From e4a25dba948af9211ffea6b27293fe15c4b3ba07 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Wed, 4 Dec 2013 08:37:24 +0100 +Subject: [PATCH] Create ~/.cvspass at login if it does not exists +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + + +Signed-off-by: Petr Písař +--- + src/login.c | 9 +++++++++ + src/logmsg.c | 2 +- + src/sanity.sh | 7 ++++++- + 3 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/src/login.c b/src/login.c +index 50b292b..75dc53a 100644 +--- a/src/login.c ++++ b/src/login.c +@@ -315,6 +315,15 @@ internal error: can only call password_entry_operation with pserver method"); + fp = CVS_FOPEN (passfile, "r"); + if (fp == NULL) + { ++ fp = CVS_FOPEN (passfile, "w"); ++ if (fp != NULL) ++ { ++ fclose (fp); ++ fp = CVS_FOPEN (passfile, "r"); ++ } ++ } ++ if (fp == NULL) ++ { + error (0, errno, "warning: failed to open %s for reading", passfile); + goto process; + } +diff --git a/src/logmsg.c b/src/logmsg.c +index 741231b..0d4d6a2 100644 +--- a/src/logmsg.c ++++ b/src/logmsg.c +@@ -269,7 +269,7 @@ do_editor (dir, messagep, repository, changes) + } + + (void) fprintf (fp, +- "%s----------------------------------------------------------------------\n", ++ "\n%s----------------------------------------------------------------------\n", + CVSEDITPREFIX); + (void) fprintf (fp, + "%sEnter Log. Lines beginning with `%.*s' are removed automatically\n%s\n", +diff --git a/src/sanity.sh b/src/sanity.sh +index dbcae19..f119840 100755 +--- a/src/sanity.sh ++++ b/src/sanity.sh +@@ -4195,7 +4195,6 @@ ${PROG} commit: Rebuilding administrative file database" + "$PROG logout: WARNING: Ignoring method options found in CVSROOT: \`proxy=localhost;proxyport=8080'\. + $PROG logout: Use CVS version 1\.12\.7 or later to handle method options\. + Logging out of :pserver:$username@localhost:2401/dev/null +-$PROG logout: warning: failed to open $HOME/\.cvspass for reading: No such file or directory + $PROG logout: Entry not found\." + fi + +@@ -15552,6 +15551,7 @@ description: + revision 1\.1 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; + branches: 1\.1\.2; ++x + xCVS: ---------------------------------------------------------------------- + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically + xCVS: +@@ -15563,6 +15563,7 @@ xCVS: ---------------------------------------------------------------------- + ---------------------------- + revision 1\.1\.2\.1 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; lines: ${PLUS}1 -0 ++x + xCVS: ---------------------------------------------------------------------- + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically + xCVS: +@@ -15590,6 +15591,7 @@ description: + revision 1\.1 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; + branches: 1\.1\.2; ++x + xCVS: ---------------------------------------------------------------------- + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically + xCVS: +@@ -15601,6 +15603,7 @@ xCVS: ---------------------------------------------------------------------- + ---------------------------- + revision 1\.1\.2\.1 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; lines: ${PLUS}1 -0 ++x + xCVS: ---------------------------------------------------------------------- + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically + xCVS: +@@ -15622,6 +15625,7 @@ description: + revision 1\.1 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; + branches: 1\.1\.2; ++x + xCVS: ---------------------------------------------------------------------- + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically + xCVS: +@@ -15633,6 +15637,7 @@ xCVS: ---------------------------------------------------------------------- + ---------------------------- + revision 1\.1\.2\.1 + date: [0-9/]* [0-9:]*; author: ${username}; state: Exp; lines: ${PLUS}1 -0 ++x + xCVS: ---------------------------------------------------------------------- + xCVS: Enter Log. Lines beginning with .CVS:. are removed automatically + xCVS: +-- +1.8.3.1 + diff --git a/cvs/cvs-1.11.23-doc-Add-mandatory-argument-to-sp.patch b/cvs/cvs-1.11.23-doc-Add-mandatory-argument-to-sp.patch new file mode 100644 index 0000000..f11d2e9 --- /dev/null +++ b/cvs/cvs-1.11.23-doc-Add-mandatory-argument-to-sp.patch @@ -0,0 +1,30 @@ +From f40baecd3d09b1018185bcefde35464a79dbd68d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Wed, 5 Jun 2013 08:38:11 +0200 +Subject: [PATCH] doc: Add mandatory argument to @sp + +Texinfo-5.1 fails if @sp macro is not followed by a number. The +numeric argument is mandatory according to Texinfo documentation. +--- + doc/cvs.texinfo | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/doc/cvs.texinfo b/doc/cvs.texinfo +index ad3a414..14bc79a 100644 +--- a/doc/cvs.texinfo ++++ b/doc/cvs.texinfo +@@ -111,9 +111,9 @@ approved by the Free Software Foundation. + @sp 4 + @comment The title is printed in a large font. + @center @titlefont{Version Management} +-@sp ++@sp 1 + @center @titlefont{with} +-@sp ++@sp 1 + @center @titlefont{CVS} + @sp 2 + @center for @sc{cvs} @value{VERSION} +-- +1.8.1.4 + diff --git a/cvs/cvs-1.11.23-getline64.patch b/cvs/cvs-1.11.23-getline64.patch new file mode 100644 index 0000000..99942e0 --- /dev/null +++ b/cvs/cvs-1.11.23-getline64.patch @@ -0,0 +1,34 @@ +--- cvs-1.11.23/lib/getline.c 2005-04-04 22:46:05.000000000 +0200 ++++ cvs-1.11.23/lib/getline.c.old 2008-06-03 19:06:25.000000000 +0200 +@@ -154,7 +154,7 @@ + return ret; + } + +-int ++ssize_t + getline (lineptr, n, stream) + char **lineptr; + size_t *n; +@@ -163,7 +163,7 @@ + return getstr (lineptr, n, stream, '\n', 0, GETLINE_NO_LIMIT); + } + +-int ++ssize_t + getline_safe (lineptr, n, stream, limit) + char **lineptr; + size_t *n; +--- cvs-1.11.23/lib/getline.h 2005-04-04 22:46:05.000000000 +0200 ++++ cvs-1.11.23/lib/getline.h.old 2008-06-03 19:06:27.000000000 +0200 +@@ -11,9 +11,9 @@ + + #define GETLINE_NO_LIMIT -1 + +-int ++ssize_t + getline __PROTO ((char **_lineptr, size_t *_n, FILE *_stream)); +-int ++ssize_t + getline_safe __PROTO ((char **_lineptr, size_t *_n, FILE *_stream, + int limit)); + int diff --git a/cvs/cvs-1.11.23-make_make_check_sanity_testing_verbose.patch b/cvs/cvs-1.11.23-make_make_check_sanity_testing_verbose.patch new file mode 100644 index 0000000..56fd7de --- /dev/null +++ b/cvs/cvs-1.11.23-make_make_check_sanity_testing_verbose.patch @@ -0,0 +1,30 @@ +From f923e7c9dd4c71a1f6318d4d9fb0bdd4476ab6c5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 25 Oct 2010 17:14:47 +0200 +Subject: [PATCH] Make `make check' sanity testing verbose + +--- + src/Makefile.am | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/Makefile.am b/src/Makefile.am +index 63e6b18..1adc157 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -125,11 +125,11 @@ check-local: localcheck remotecheck + + .PHONY: localcheck + localcheck: +- $(SHELL) $(srcdir)/sanity.sh `pwd`/cvs$(EXEEXT) ++ $(SHELL) $(srcdir)/sanity.sh -v `pwd`/cvs$(EXEEXT) + + .PHONY: remotecheck + remotecheck: all +- $(SHELL) $(srcdir)/sanity.sh -r `pwd`/cvs$(EXEEXT) ++ $(SHELL) $(srcdir)/sanity.sh -v -r `pwd`/cvs$(EXEEXT) + + ## MAINTAINER Targets + +-- +1.7.2.3 + diff --git a/cvs/cvs-1.11.23-remove_undefined_date_from_cvs_1_header.patch b/cvs/cvs-1.11.23-remove_undefined_date_from_cvs_1_header.patch new file mode 100644 index 0000000..4adea96 --- /dev/null +++ b/cvs/cvs-1.11.23-remove_undefined_date_from_cvs_1_header.patch @@ -0,0 +1,25 @@ +From 51ac6e634d6a53f4f2c78eafae599079c628e28e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 25 Oct 2010 16:21:54 +0200 +Subject: [PATCH] Remove undefinded date from cvs(1) header + +--- + doc/cvs.1 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/doc/cvs.1 b/doc/cvs.1 +index b696d9a..07b7923 100644 +--- a/doc/cvs.1 ++++ b/doc/cvs.1 +@@ -23,7 +23,7 @@ + .ds Rv \\$3 + .ds Dt \\$4 + .. +-.TH CVS 1 "\*(Dt" ++.TH CVS 1 + .\" Full space in nroff; half space in troff + .de SP + .if n .sp +-- +1.7.2.3 + diff --git a/cvs/cvs-1.11.23-sanity.patch b/cvs/cvs-1.11.23-sanity.patch new file mode 100644 index 0000000..8980575 --- /dev/null +++ b/cvs/cvs-1.11.23-sanity.patch @@ -0,0 +1,39 @@ +diff -up cvs-1.11.23/src/sanity.sh.old cvs-1.11.23/src/sanity.sh +--- cvs-1.11.23/src/sanity.sh.old 2008-05-07 03:16:00.000000000 +0200 ++++ cvs-1.11.23/src/sanity.sh 2010-04-08 14:35:40.574373789 +0200 +@@ -2752,7 +2752,7 @@ ${PROG} \[admin aborted\]: attempt to de + dotest_fail basicb-21 "${testcvs} -q admin -H" \ + "admin: illegal option -- H + ${PROG} \[admin aborted\]: specify ${PROG} -H admin for usage information" \ +-"admin: invalid option -- H ++"admin: invalid option -- 'H' + ${PROG} \[admin aborted\]: specify ${PROG} -H admin for usage information" + cd .. + rmdir 1 +@@ -22192,7 +22198,7 @@ done" + "-r--r--r-- .*" + else + dotest modes-5 "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ +-"-r--r--r-- .*" ++"-r--r--r--.*" + fi + + # Test for whether we can set the execute bit. +@@ -22213,7 +22219,7 @@ done" + "-r--r--r-- .*" + else + dotest modes-7 "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ +-"-r--r--r-- .*" ++"-r--r--r--.*" + fi + + # OK, now manually change the modes and see what happens. +@@ -22236,7 +22242,7 @@ done" + "-r--r----- .*" + else + dotest modes-7b "ls -l ${CVSROOT_DIRNAME}/first-dir/aa,v" \ +-"-r--r----- .*" ++"-r--r-----.*" + fi + + CVSUMASK=007 diff --git a/cwm/PKGBUILD b/cwm/PKGBUILD new file mode 100644 index 0000000..14dd71b --- /dev/null +++ b/cwm/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=cwm +pkgver=7.1 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="OpenBSD fork of calmwm, a clean and lightweight window manager" +arch=('i686' 'x86_64') +url='https://github.com/leahneukirchen/cwm' +license=('ISC' 'Modified-BSD') +depends=('libxft' 'libxrandr') +optdepends=('slock: for the default screen locker' + 'st: for the default terminal emulator') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/leahneukirchen/cwm/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cwm/cwm_${_debver}-${_debrel}.debian.tar.xz" + "cwm.desktop" + "change-default-binaries.patch") +sha512sums=('aa14bc7a43a522f4b83d3f9a3b8a8344c339b52aac4733f410e388df56a2dc4e86ee1ae9f05b53ff3139808f87f38a4b2da57bf0525482613d46651e8f08c718' + 'ffa0070cc58668c3025a6c2fc69aa6af79b89a885bb86922a0bb58421dfb3295fa9c3687fe34d12f0e8cb2f2857aaae45be9fad173ef9840b44ab8d5cc253413' + '9ac67d2954e75fd282e2e73db187a8a33d68fa858fec1b07ed19a57de864c90b0fc976b41583e662d3af3771f3bed428441283037b7403a086805cf9a3c0a097' + '59870a1fbaa5cb41faa730642bbbdac4f0bc17023a64420550e335567e743dbcd18fb6489df508d9e3b7625db0cbe9c4165951a79e81caad4991724c504d4a36') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/change-default-binaries || true + + quilt push -av + fi + patch -p1 -i "${srcdir}/change-default-binaries.patch" +} + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" PREFIX=/usr install + install -Dm644 ${srcdir}/cwm.desktop -t $pkgdir/usr/share/xsessions + install -Dm644 debian/copyright -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/cwm/change-default-binaries.patch b/cwm/change-default-binaries.patch new file mode 100644 index 0000000..baa96d9 --- /dev/null +++ b/cwm/change-default-binaries.patch @@ -0,0 +1,13 @@ +--- a/conf.c ++++ b/conf.c +@@ -303,8 +303,8 @@ + for (i = 0; i < nitems(color_binds); i++) + c->color[i] = xstrdup(color_binds[i]); + +- conf_cmd_add(c, "lock", "xlock"); +- conf_cmd_add(c, "term", "xterm"); ++ conf_cmd_add(c, "lock", "slock"); ++ conf_cmd_add(c, "term", "st"); + conf_wm_add(c, "cwm", "cwm"); + + c->font = xstrdup("sans-serif:pixelsize=14:bold"); diff --git a/cwm/cwm.desktop b/cwm/cwm.desktop new file mode 100644 index 0000000..1288dbf --- /dev/null +++ b/cwm/cwm.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=cwm +Comment=A clean and simple window manager for X inspired by evilwm +Exec=/usr/bin/cwm +TryExec=/usr/bin/cwm +Type=XSession diff --git a/cyrus-sasl/0003-Update-saslauthd.conf-location-in-documentation.patch b/cyrus-sasl/0003-Update-saslauthd.conf-location-in-documentation.patch new file mode 100644 index 0000000..1c567f3 --- /dev/null +++ b/cyrus-sasl/0003-Update-saslauthd.conf-location-in-documentation.patch @@ -0,0 +1,41 @@ +From: Debian Cyrus SASL Team + +Date: Thu, 24 Mar 2016 11:35:03 +0100 +Subject: Update saslauthd.conf location in documentation + +date format (cosmetic). +--- + saslauthd/saslauthd.mdoc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/saslauthd/saslauthd.mdoc b/saslauthd/saslauthd.mdoc +index 0c2209e..17c9284 100644 +--- a/saslauthd/saslauthd.mdoc ++++ b/saslauthd/saslauthd.mdoc +@@ -10,7 +10,7 @@ + .\" manpage in saslauthd.8 whenever you change this source + .\" version. Only the pre-formatted manpage is installed. + .\" +-.Dd 12 12 2005 ++.Dd December 12 2005 + .Dt SASLAUTHD 8 + .Os "CMU-SASL" + .Sh NAME +@@ -245,7 +245,7 @@ instead. + .Em (All platforms that support OpenLDAP 2.0 or higher) + .Pp + Authenticate against an ldap server. The ldap configuration parameters are +-read from /usr/local/etc/saslauthd.conf. The location of this file can be ++read from /etc/saslauthd.conf. The location of this file can be + changed with the -O parameter. See the LDAP_SASLAUTHD file included with the + distribution for the list of available parameters. + .It Li sia +@@ -278,7 +278,7 @@ was never intended to be used in this manner, anyway.) + .Bl -tag -width "/var/run/saslauthd/mux" + .It Pa /var/run/saslauthd/mux + The default communications socket. +-.It Pa /usr/local/etc/saslauthd.conf ++.It Pa /etc/saslauthd.conf + The default configuration file for ldap support. + .El + .Sh SEE ALSO diff --git a/cyrus-sasl/0006-Enable-autoconf-maintainer-mode.patch b/cyrus-sasl/0006-Enable-autoconf-maintainer-mode.patch new file mode 100644 index 0000000..4f2f65c --- /dev/null +++ b/cyrus-sasl/0006-Enable-autoconf-maintainer-mode.patch @@ -0,0 +1,22 @@ +From: Debian Cyrus SASL Team + +Date: Thu, 24 Mar 2016 11:35:03 +0100 +Subject: Enable autoconf maintainer mode + +--- + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 388f5d0..b3db52c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -69,6 +69,8 @@ AC_CANONICAL_TARGET + + AM_INIT_AUTOMAKE([1.11 tar-ustar dist-bzip2 foreign -Wno-portability subdir-objects]) + ++AM_MAINTAINER_MODE ++ + DIRS="" + + AC_ARG_ENABLE(cmulocal, diff --git a/cyrus-sasl/0010-Update-required-libraries-when-ld-as-needed-is-used.patch b/cyrus-sasl/0010-Update-required-libraries-when-ld-as-needed-is-used.patch new file mode 100644 index 0000000..d1457ee --- /dev/null +++ b/cyrus-sasl/0010-Update-required-libraries-when-ld-as-needed-is-used.patch @@ -0,0 +1,37 @@ +From: Debian Cyrus SASL Team + +Date: Thu, 24 Mar 2016 11:35:04 +0100 +Subject: Update required libraries when ld --as-needed is used + +it. +--- + saslauthd/Makefile.am | 2 +- + sasldb/Makefile.am | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/saslauthd/Makefile.am b/saslauthd/Makefile.am +index 864b29b..4cf3a3d 100644 +--- a/saslauthd/Makefile.am ++++ b/saslauthd/Makefile.am +@@ -25,7 +25,7 @@ EXTRA_saslauthd_sources = getaddrinfo.c getnameinfo.c + saslauthd_DEPENDENCIES = saslauthd-main.o $(LTLIBOBJS_FULL) + saslauthd_LDADD = @SASL_KRB_LIB@ \ + @GSSAPIBASE_LIBS@ @LIB_CRYPT@ @LIB_SIA@ \ +- @LIB_SOCKET@ @SASL_DB_LIB@ @LIB_PAM@ @LDAP_LIBS@ $(LTLIBOBJS_FULL) $(CRYPTO_COMPAT_OBJS) $(LIBSASLDB_OBJS) ++ @LIB_SOCKET@ ../sasldb/libsasldb.la @LIB_PAM@ @LDAP_LIBS@ $(LTLIBOBJS_FULL) $(CRYPTO_COMPAT_OBJS) $(LIBSASLDB_OBJS) + + testsaslauthd_SOURCES = testsaslauthd.c utils.c + testsaslauthd_LDADD = @LIB_SOCKET@ +diff --git a/sasldb/Makefile.am b/sasldb/Makefile.am +index 497ee25..a27645f 100644 +--- a/sasldb/Makefile.am ++++ b/sasldb/Makefile.am +@@ -54,6 +54,6 @@ noinst_LTLIBRARIES = libsasldb.la + + libsasldb_la_SOURCES = allockey.c sasldb.h + EXTRA_libsasldb_la_SOURCES = $(extra_common_sources) +-libsasldb_la_DEPENDENCIES = $(SASL_DB_BACKEND) +-libsasldb_la_LIBADD = $(SASL_DB_BACKEND) ++libsasldb_la_DEPENDENCIES = $(SASL_DB_BACKEND) $(SASL_DB_LIB) ++libsasldb_la_LIBADD = $(SASL_DB_BACKEND) $(SASL_DB_LIB) + libsasldb_la_LDFLAGS = -no-undefined diff --git a/cyrus-sasl/0013-Don-t-use-la-files-for-opening-plugins.patch b/cyrus-sasl/0013-Don-t-use-la-files-for-opening-plugins.patch new file mode 100644 index 0000000..d024139 --- /dev/null +++ b/cyrus-sasl/0013-Don-t-use-la-files-for-opening-plugins.patch @@ -0,0 +1,153 @@ +From: Debian Cyrus SASL Team + +Date: Thu, 24 Mar 2016 11:35:04 +0100 +Subject: Don't use la files for opening plugins + +--- + lib/dlopen.c | 121 ++++------------------------------------------------------- + 1 file changed, 7 insertions(+), 114 deletions(-) + +diff --git a/lib/dlopen.c b/lib/dlopen.c +index 8284cd8..ef90b11 100644 +--- a/lib/dlopen.c ++++ b/lib/dlopen.c +@@ -246,113 +246,6 @@ static int _sasl_plugin_load(char *plugin, void *library, + return result; + } + +-/* this returns the file to actually open. +- * out should be a buffer of size PATH_MAX +- * and may be the same as in. */ +- +-/* We'll use a static buffer for speed unless someone complains */ +-#define MAX_LINE 2048 +- +-static int _parse_la(const char *prefix, const char *in, char *out) +-{ +- FILE *file; +- size_t length; +- char line[MAX_LINE]; +- char *ntmp = NULL; +- +- if(!in || !out || !prefix || out == in) return SASL_BADPARAM; +- +- /* Set this so we can detect failure */ +- *out = '\0'; +- +- length = strlen(in); +- +- if (strcmp(in + (length - strlen(LA_SUFFIX)), LA_SUFFIX)) { +- if(!strcmp(in + (length - strlen(SO_SUFFIX)),SO_SUFFIX)) { +- /* check for a .la file */ +- if (strlen(prefix) + strlen(in) + strlen(LA_SUFFIX) + 1 >= MAX_LINE) +- return SASL_BADPARAM; +- strcpy(line, prefix); +- strcat(line, in); +- length = strlen(line); +- *(line + (length - strlen(SO_SUFFIX))) = '\0'; +- strcat(line, LA_SUFFIX); +- file = fopen(line, "r"); +- if(file) { +- /* We'll get it on the .la open */ +- fclose(file); +- return SASL_FAIL; +- } +- } +- if (strlen(prefix) + strlen(in) + 1 >= PATH_MAX) +- return SASL_BADPARAM; +- strcpy(out, prefix); +- strcat(out, in); +- return SASL_OK; +- } +- +- if (strlen(prefix) + strlen(in) + 1 >= MAX_LINE) +- return SASL_BADPARAM; +- strcpy(line, prefix); +- strcat(line, in); +- +- file = fopen(line, "r"); +- if(!file) { +- _sasl_log(NULL, SASL_LOG_WARN, +- "unable to open LA file: %s", line); +- return SASL_FAIL; +- } +- +- while(!feof(file)) { +- if(!fgets(line, MAX_LINE, file)) break; +- if(line[strlen(line) - 1] != '\n') { +- _sasl_log(NULL, SASL_LOG_WARN, +- "LA file has too long of a line: %s", in); +- fclose(file); +- return SASL_BUFOVER; +- } +- if(line[0] == '\n' || line[0] == '#') continue; +- if(!strncmp(line, "dlname=", sizeof("dlname=") - 1)) { +- /* We found the line with the name in it */ +- char *end; +- char *start; +- size_t len; +- end = strrchr(line, '\''); +- if(!end) continue; +- start = &line[sizeof("dlname=")-1]; +- len = strlen(start); +- if(len > 3 && start[0] == '\'') { +- ntmp=&start[1]; +- *end='\0'; +- /* Do we have dlname="" ? */ +- if(ntmp == end) { +- _sasl_log(NULL, SASL_LOG_DEBUG, +- "dlname is empty in .la file: %s", in); +- fclose(file); +- return SASL_FAIL; +- } +- strcpy(out, prefix); +- strcat(out, ntmp); +- } +- break; +- } +- } +- if(ferror(file) || feof(file)) { +- _sasl_log(NULL, SASL_LOG_WARN, +- "Error reading .la: %s\n", in); +- fclose(file); +- return SASL_FAIL; +- } +- fclose(file); +- +- if(!(*out)) { +- _sasl_log(NULL, SASL_LOG_WARN, +- "Could not find a dlname line in .la file: %s", in); +- return SASL_FAIL; +- } +- +- return SASL_OK; +-} + #endif /* DO_DLOPEN */ + + /* loads a plugin library */ +@@ -506,18 +399,18 @@ int _sasl_load_plugins(const add_plugin_list_t *entrypoints, + if (length + pos>=PATH_MAX) continue; /* too big */ + + if (strcmp(dir->d_name + (length - strlen(SO_SUFFIX)), +- SO_SUFFIX) +- && strcmp(dir->d_name + (length - strlen(LA_SUFFIX)), +- LA_SUFFIX)) ++ SO_SUFFIX)) + continue; + ++ /* We only use .so files for loading plugins */ ++ + memcpy(name,dir->d_name,length); + name[length]='\0'; + +- result = _parse_la(prefix, name, tmp); +- if(result != SASL_OK) +- continue; +- ++ /* Create full name with path */ ++ strncpy(tmp, prefix, PATH_MAX); ++ strncat(tmp, name, PATH_MAX); ++ + /* skip "lib" and cut off suffix -- + this only need be approximate */ + strcpy(plugname, name + 3); diff --git a/cyrus-sasl/0020-Restore-LIBS-after-checking-gss_inquire_sec_context_.patch b/cyrus-sasl/0020-Restore-LIBS-after-checking-gss_inquire_sec_context_.patch new file mode 100644 index 0000000..fd82dd7 --- /dev/null +++ b/cyrus-sasl/0020-Restore-LIBS-after-checking-gss_inquire_sec_context_.patch @@ -0,0 +1,26 @@ +From 31b68a9438c24fc9e3e52f626462bf514de31757 Mon Sep 17 00:00:00 2001 +From: Ryan Tandy +Date: Mon, 24 Dec 2018 15:07:02 -0800 +Subject: [PATCH] Restore LIBS after checking gss_inquire_sec_context_by_oid + +Fixes: 4b0306dcd76031460246b2dabcb7db766d6b04d8 +--- + m4/sasl2.m4 | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/m4/sasl2.m4 b/m4/sasl2.m4 +index 56e0504a..17f5d081 100644 +--- a/m4/sasl2.m4 ++++ b/m4/sasl2.m4 +@@ -311,9 +311,10 @@ if test "$gssapi" != no; then + [AC_DEFINE(HAVE_GSS_C_SEC_CONTEXT_SASL_SSF,, + [Define if your GSSAPI implementation defines GSS_C_SEC_CONTEXT_SASL_SSF])]) + fi ++ LIBS="$cmu_save_LIBS" ++ + cmu_save_LIBS="$LIBS" + LIBS="$LIBS $GSSAPIBASE_LIBS" +- + AC_MSG_CHECKING([for SPNEGO support in GSSAPI libraries]) + AC_TRY_RUN([ + #ifdef HAVE_GSSAPI_H diff --git a/cyrus-sasl/0022-Fix-keytab-option-for-MIT-Kerberos.patch b/cyrus-sasl/0022-Fix-keytab-option-for-MIT-Kerberos.patch new file mode 100644 index 0000000..316ecd1 --- /dev/null +++ b/cyrus-sasl/0022-Fix-keytab-option-for-MIT-Kerberos.patch @@ -0,0 +1,66 @@ +From: Debian Cyrus SASL Team + +Date: Thu, 24 Mar 2016 11:35:05 +0100 +Subject: Fix keytab option for MIT Kerberos + +--- + m4/sasl2.m4 | 1 + + plugins/gssapi.c | 11 ++++++++--- + 2 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/m4/sasl2.m4 b/m4/sasl2.m4 +index 56e0504..a90f7b4 100644 +--- a/m4/sasl2.m4 ++++ b/m4/sasl2.m4 +@@ -282,6 +282,7 @@ if test "$gssapi" != no; then + ]) + fi + fi ++ AC_CHECK_FUNCS(krb5_gss_register_acceptor_identity) + AC_CHECK_FUNCS(gss_decapsulate_token) + AC_CHECK_FUNCS(gss_encapsulate_token) + AC_CHECK_FUNCS(gss_oid_equal) +diff --git a/plugins/gssapi.c b/plugins/gssapi.c +index ff663da..7c69ac2 100644 +--- a/plugins/gssapi.c ++++ b/plugins/gssapi.c +@@ -1545,7 +1545,7 @@ static sasl_server_plug_t gssapi_server_plugins[] = + }; + + int gssapiv2_server_plug_init( +-#ifndef HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY ++#if !defined(HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY) && !defined(HAVE_KRB5_GSS_REGISTER_ACCEPTOR_IDENTITY) + const sasl_utils_t *utils __attribute__((unused)), + #else + const sasl_utils_t *utils, +@@ -1555,7 +1555,7 @@ int gssapiv2_server_plug_init( + sasl_server_plug_t **pluglist, + int *plugcount) + { +-#ifdef HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY ++#if defined(HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY) || defined(HAVE_KRB5_GSS_REGISTER_ACCEPTOR_IDENTITY) + const char *keytab = NULL; + char keytab_path[1024]; + unsigned int rl; +@@ -1565,7 +1565,7 @@ int gssapiv2_server_plug_init( + return SASL_BADVERS; + } + +-#ifdef HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY ++#if defined(HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY) || defined(HAVE_KRB5_GSS_REGISTER_ACCEPTOR_IDENTITY) + /* unfortunately, we don't check for readability of keytab if it's + the standard one, since we don't know where it is */ + +@@ -1587,7 +1587,12 @@ int gssapiv2_server_plug_init( + + strncpy(keytab_path, keytab, 1024); + ++#ifdef HAVE_GSSKRB5_REGISTER_ACCEPTOR_IDENTITY + gsskrb5_register_acceptor_identity(keytab_path); ++#endif ++#ifdef HAVE_KRB5_GSS_REGISTER_ACCEPTOR_IDENTITY ++ krb5_gss_register_acceptor_identity(keytab_path); ++#endif + } + #endif + diff --git a/cyrus-sasl/0030-dont_use_la_files_for_opening_plugins.patch b/cyrus-sasl/0030-dont_use_la_files_for_opening_plugins.patch new file mode 100644 index 0000000..14a3224 --- /dev/null +++ b/cyrus-sasl/0030-dont_use_la_files_for_opening_plugins.patch @@ -0,0 +1,134 @@ +--- a/lib/dlopen.c ++++ b/lib/dlopen.c +@@ -247,105 +247,6 @@ static int _sasl_plugin_load(char *plugi + return result; + } + +-/* this returns the file to actually open. +- * out should be a buffer of size PATH_MAX +- * and may be the same as in. */ +- +-/* We'll use a static buffer for speed unless someone complains */ +-#define MAX_LINE 2048 +- +-static int _parse_la(const char *prefix, const char *in, char *out) +-{ +- FILE *file; +- size_t length; +- char line[MAX_LINE]; +- char *ntmp = NULL; +- +- if(!in || !out || !prefix || out == in) return SASL_BADPARAM; +- +- /* Set this so we can detect failure */ +- *out = '\0'; +- +- length = strlen(in); +- +- if (strcmp(in + (length - strlen(LA_SUFFIX)), LA_SUFFIX)) { +- if(!strcmp(in + (length - strlen(SO_SUFFIX)),SO_SUFFIX)) { +- /* check for a .la file */ +- strcpy(line, prefix); +- strcat(line, in); +- length = strlen(line); +- *(line + (length - strlen(SO_SUFFIX))) = '\0'; +- strcat(line, LA_SUFFIX); +- file = fopen(line, "r"); +- if(file) { +- /* We'll get it on the .la open */ +- fclose(file); +- return SASL_FAIL; +- } +- } +- strcpy(out, prefix); +- strcat(out, in); +- return SASL_OK; +- } +- +- strcpy(line, prefix); +- strcat(line, in); +- +- file = fopen(line, "r"); +- if(!file) { +- _sasl_log(NULL, SASL_LOG_WARN, +- "unable to open LA file: %s", line); +- return SASL_FAIL; +- } +- +- while(!feof(file)) { +- if(!fgets(line, MAX_LINE, file)) break; +- if(line[strlen(line) - 1] != '\n') { +- _sasl_log(NULL, SASL_LOG_WARN, +- "LA file has too long of a line: %s", in); +- return SASL_BUFOVER; +- } +- if(line[0] == '\n' || line[0] == '#') continue; +- if(!strncmp(line, "dlname=", sizeof("dlname=") - 1)) { +- /* We found the line with the name in it */ +- char *end; +- char *start; +- size_t len; +- end = strrchr(line, '\''); +- if(!end) continue; +- start = &line[sizeof("dlname=")-1]; +- len = strlen(start); +- if(len > 3 && start[0] == '\'') { +- ntmp=&start[1]; +- *end='\0'; +- /* Do we have dlname="" ? */ +- if(ntmp == end) { +- _sasl_log(NULL, SASL_LOG_DEBUG, +- "dlname is empty in .la file: %s", in); +- return SASL_FAIL; +- } +- strcpy(out, prefix); +- strcat(out, ntmp); +- } +- break; +- } +- } +- if(ferror(file) || feof(file)) { +- _sasl_log(NULL, SASL_LOG_WARN, +- "Error reading .la: %s\n", in); +- fclose(file); +- return SASL_FAIL; +- } +- fclose(file); +- +- if(!(*out)) { +- _sasl_log(NULL, SASL_LOG_WARN, +- "Could not find a dlname line in .la file: %s", in); +- return SASL_FAIL; +- } +- +- return SASL_OK; +-} + #endif /* DO_DLOPEN */ + + /* loads a plugin library */ +@@ -499,18 +400,18 @@ int _sasl_load_plugins(const add_plugin_ + if (length + pos>=PATH_MAX) continue; /* too big */ + + if (strcmp(dir->d_name + (length - strlen(SO_SUFFIX)), +- SO_SUFFIX) +- && strcmp(dir->d_name + (length - strlen(LA_SUFFIX)), +- LA_SUFFIX)) ++ SO_SUFFIX)) + continue; + ++ /* We only use .so files for loading plugins */ ++ + memcpy(name,dir->d_name,length); + name[length]='\0'; + +- result = _parse_la(prefix, name, tmp); +- if(result != SASL_OK) +- continue; +- ++ /* Create full name with path */ ++ strncpy(tmp, prefix, PATH_MAX); ++ strncat(tmp, name, PATH_MAX); ++ + /* skip "lib" and cut off suffix -- + this only need be approximate */ + strcpy(plugname, name + 3); diff --git a/cyrus-sasl/0032-Add-with_pgsql-include-postgresql-to-include-path.patch b/cyrus-sasl/0032-Add-with_pgsql-include-postgresql-to-include-path.patch new file mode 100644 index 0000000..304d5ca --- /dev/null +++ b/cyrus-sasl/0032-Add-with_pgsql-include-postgresql-to-include-path.patch @@ -0,0 +1,23 @@ +From: =?utf-8?b?T25kxZllaiBTdXLDvQ==?= +Date: Tue, 25 Oct 2016 12:33:27 +0200 +Subject: Add ${with_pgsql}include/postgresql/ to include path + +--- + configure.ac | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index fe7f0eb..1882f31 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -894,7 +894,9 @@ case "$with_pgsql" in + LIB_PGSQL_DIR=$LIB_PGSQL + LIB_PGSQL="$LIB_PGSQL -lpq" + +- if test -d ${with_pgsql}/include/pgsql; then ++ if test -d ${with_pgsql}/include/postgresql/; then ++ CPPFLAGS="${CPPFLAGS} -I${with_pgsql}/include/postgresql" ++ elif test -d ${with_pgsql}/include/pgsql; then + CPPFLAGS="${CPPFLAGS} -I${with_pgsql}/include/pgsql" + elif test -d ${with_pgsql}/pgsql/include; then + CPPFLAGS="${CPPFLAGS} -I${with_pgsql}/pgsql/include" diff --git a/cyrus-sasl/PKGBUILD b/cyrus-sasl/PKGBUILD new file mode 100644 index 0000000..feb699a --- /dev/null +++ b/cyrus-sasl/PKGBUILD @@ -0,0 +1,177 @@ +# Maintainer: Jesus E. + +pkgbase=('cyrus-sasl') +pkgname=('cyrus-sasl' 'cyrus-sasl-gssapi' 'cyrus-sasl-ldap' 'cyrus-sasl-sql') +pkgver=2.1.27 +_debver=$pkgver +_debrel=2.1 +pkgrel=3 +pkgdesc="Cyrus Simple Authentication Service Layer (SASL) library" +arch=('i686' 'x86_64') +url="https://www.cyrusimap.org/sasl/" +license=('Original-BSD') +options=('!makeflags') +makedepends=('postgresql-libs' 'libldap' 'krb5' 'libressl' 'sqlite' 'quilt') +source=(https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-$pkgver/cyrus-sasl-$pkgver.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/c/cyrus-sasl2/cyrus-sasl2_$_debver+dfsg-$_debrel+deb11u1.debian.tar.xz + 0003-Update-saslauthd.conf-location-in-documentation.patch + 0006-Enable-autoconf-maintainer-mode.patch + 0010-Update-required-libraries-when-ld-as-needed-is-used.patch + 0013-Don-t-use-la-files-for-opening-plugins.patch + 0020-Restore-LIBS-after-checking-gss_inquire_sec_context_.patch + 0022-Fix-keytab-option-for-MIT-Kerberos.patch + 0032-Add-with_pgsql-include-postgresql-to-include-path.patch + gdbm-errno.patch + saslauthd.confd + saslauthd.initd) +sha512sums=('d11549a99b3b06af79fc62d5478dba3305d7e7cc0824f4b91f0d2638daafbe940623eab235f85af9be38dcf5d42fc131db531c177040a85187aee5096b8df63b' + 'SKIP' + '73d70392eb16107d3e84f083dcfeb79abf33413734244748cb7eef24089ed9ad0da60e778b096bdcd134878f28bfd9cd3801f6e707ed03d6b9338407bdbe6972' + 'ccd8a9e06578a4811d24c883e45d4dc51a35c2875851ab372113d612d9e52470faa08748e8c27b5bdfe8aee47caf91c40b04211ddff43087f7e0b43c5819f783' + '852791cadfb1bdde948814185f307bbada781f8562319c90fea7d5248d545432e6103cb113dfc89525c8a74cc30f1b8686e52a8b658efad9738609473a1dbc74' + 'e44c7bc90b9140f3cc442c2155ac89c13b9bd5422c2d8ac1fddf83b64c312ba621322b32639c4f517aa05c78d6a1cd94dc257892e706844f6be095a3863127d7' + 'dc056e74d895e81494a39ba05ec97623f9bbd7b61f44ff0bae8cb847c8e5882d47d384d0da429ab0de2c2bd4530b6ead2e595d6dd17960bfc1aa3d2ded0a823d' + 'cf747487df71c66d22e78ec3ca658f2f2752b224851d23070374119378e4a738996eb8256583437f92f34e63488c5a205a8a37deeb8d98bdbe0a679cbb00d8fb' + '1364657633a4aa2944415477108d38acc94f37ad92470205fb36b7307e4924b02d0029bab4bae4439a2d13cb57d9209974dbf7b55f4cde2448571ccec8d62f9b' + '48f61c050e8b372b994bc2d56d04a29a07922d2f149ad890f6895e6ec0ed0e7cd2069e63a6445cfe87be23ae95b9ff259b3d70f64a449ceb420587ef21e2f57b' + 'd7dfdf520d16a79f265708d1c6938bd24bd26b9a0ff9b7fcbfc95c494af7f44220080bd3f79d0486bb6fc30b4a9a269adb7836bc593eacca99a1ef549ce58a9e' + 'fe7102c67b9cf8438cabb1d4dc69d0a173b6ec3134c8ea5c60551d9fd1daaa20664b8ea197f8e118e224cb0686b2e83c51d31d785106d15d0758b95ef89c90e2' + '1d5942a94ffbc15774443d60a88d4c89c7c3c6ea68b041d304f0110f6ec3aa2a812f59021cddc78de6f51a25bb00955e4e56d769e766a9d856f13774dd37ce83') +validpgpkeys=('829F339F8C296FE80F409D93E3D7C118C7B9F46A') # Partha Susarla + +prepare() { + cd cyrus-sasl-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-Make-the-libsasl2-symbols-versioned.patch || true + rm -v debian/patches/0002-Use-etc-sasldb2-instead-of-.-sasldb-in-the-testsuite.patch || true + rm -v debian/patches/0004-Include-dbconverter-2-in-sbin_PROGRAMS-and-set-defau.patch || true + rm -v debian/patches/0017-Just-completely-remove-libobj-from-autotools-files.patch || true + rm -v debian/patches/0018-Temporary-multiarch-fixes.patch || true + rm -v debian/patches/0019-Add-reference-to-LDAP_SASLAUTHD-file-to-the-saslauth.patch || true + rm -v debian/patches/0025-Revert-upstream-soname-bump.patch || true + rm -v debian/patches/0033-cross.patch || true + + quilt push -av + else + patch -Np1 -i $srcdir/0003-Update-saslauthd.conf-location-in-documentation.patch + patch -Np1 -i $srcdir/0006-Enable-autoconf-maintainer-mode.patch + patch -Np1 -i $srcdir/0010-Update-required-libraries-when-ld-as-needed-is-used.patch + patch -Np1 -i $srcdir/0013-Don-t-use-la-files-for-opening-plugins.patch + patch -Np1 -i $srcdir/0020-Restore-LIBS-after-checking-gss_inquire_sec_context_.patch + patch -Np1 -i $srcdir/0022-Fix-keytab-option-for-MIT-Kerberos.patch + patch -Np1 -i $srcdir/0032-Add-with_pgsql-include-postgresql-to-include-path.patch + fi + + patch -Np1 -i $srcdir/gdbm-errno.patch + + cp -a saslauthd/saslauthd.mdoc saslauthd/saslauthd.8 + rm -f config/config.guess config/config.sub + rm -f config/ltconfig config/ltmain.sh config/libtool.m4 + rm -fr autom4te.cache + + libtoolize -c + aclocal -I config + automake -a -c + autoheader + autoconf +} + +build() { + export CFLAGS="$CFLAGS -fPIC" + cd cyrus-sasl-$pkgver + + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --disable-static \ + --enable-shared \ + --enable-alwaystrue \ + --enable-checkapop \ + --enable-cram \ + --enable-digest \ + --disable-otp \ + --disable-srp \ + --disable-srp-setpass \ + --disable-krb4 \ + --enable-gssapi \ + --enable-auth-sasldb \ + --enable-plain \ + --enable-anon \ + --enable-login \ + --enable-ntlm \ + --disable-passdss \ + --enable-sql \ + --without-mysql \ + --with-pgsql=/usr/lib \ + --with-sqlite3=/usr/lib \ + --enable-ldapdb \ + --disable-macos-framework \ + --without-pam \ + --with-saslauthd=/var/run/saslauthd \ + --with-ldap \ + --with-dblib=gdbm \ + --with-configdir=/etc/sasl2:/etc/sasl:/usr/lib/sasl2 \ + --sysconfdir=/etc \ + --with-devrandom=/dev/urandom + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package_cyrus-sasl() { + depends=("libsasl=${pkgver}" 'krb5') + pkgdesc="Cyrus saslauthd SASL authentication daemon" + backup=('etc/conf.d/saslauthd') + + cd cyrus-sasl-$pkgver/saslauthd + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/saslauthd.confd" "${pkgdir}/etc/conf.d/saslauthd" + install -Dm755 "${srcdir}/saslauthd.initd" "${pkgdir}/etc/init.d/saslauthd" + + install -Dm644 ../COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} + +package_cyrus-sasl-gssapi() { + pkgdesc="GSSAPI authentication mechanism for Cyrus SASL" + depends=("libsasl=${pkgver}" 'krb5') + replaces=('cyrus-sasl-plugins') + + cd cyrus-sasl-$pkgver/plugins + install -m755 -d "${pkgdir}/usr/lib/sasl2" + cp -a .libs/libgssapiv2.so* "${pkgdir}/usr/lib/sasl2/" + cp -a .libs/libgs2.so* "${pkgdir}/usr/lib/sasl2/" + + install -Dm644 ../COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} + +package_cyrus-sasl-ldap() { + pkgdesc="ldapdb auxprop module for Cyrus SASL" + depends=("libsasl=${pkgver}" 'libldap') + replaces=('cyrus-sasl-plugins') + + cd cyrus-sasl-$pkgver/plugins + install -m755 -d "${pkgdir}/usr/lib/sasl2" + cp -a .libs/libldapdb.so* "${pkgdir}/usr/lib/sasl2/" + + install -Dm644 ../COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} + +package_cyrus-sasl-sql() { + pkgdesc="SQL auxprop module for Cyrus SASL" + depends=("libsasl=${pkgver}" 'postgresql-libs' 'sqlite') + replaces=('cyrus-sasl-plugins') + + cd cyrus-sasl-$pkgver/plugins + install -m755 -d "${pkgdir}/usr/lib/sasl2" + cp -a .libs/libsql.so* "${pkgdir}/usr/lib/sasl2/" + + install -Dm644 ../COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/cyrus-sasl/cyrus-sasl-2.1.22-as-needed.patch b/cyrus-sasl/cyrus-sasl-2.1.22-as-needed.patch new file mode 100644 index 0000000..1294cb5 --- /dev/null +++ b/cyrus-sasl/cyrus-sasl-2.1.22-as-needed.patch @@ -0,0 +1,11 @@ +--- saslauthd/configure.in.orig 2006-05-23 15:53:17.000000000 -0700 ++++ saslauthd/configure.in 2006-05-23 15:53:33.000000000 -0700 +@@ -77,7 +77,7 @@ + AC_DEFINE(AUTH_SASLDB,[],[Include SASLdb Support]) + SASL_DB_PATH_CHECK() + SASL_DB_CHECK() +- SASL_DB_LIB="$SASL_DB_LIB ../sasldb/.libs/libsasldb.al" ++ SASL_DB_LIB="../sasldb/.libs/libsasldb.a $SASL_DB_LIB" + fi + + AC_ARG_ENABLE(httpform, [ --enable-httpform enable HTTP form authentication [[no]] ], diff --git a/cyrus-sasl/cyrus-sasl-2.1.22-qa.patch b/cyrus-sasl/cyrus-sasl-2.1.22-qa.patch new file mode 100644 index 0000000..4f7b04f --- /dev/null +++ b/cyrus-sasl/cyrus-sasl-2.1.22-qa.patch @@ -0,0 +1,22 @@ +fix missing prototype warnings + +--- cyrus-sasl-2.1.22/lib/auxprop.c ++++ cyrus-sasl-2.1.22/lib/auxprop.c +@@ -43,6 +43,7 @@ + */ + + #include ++#include + #include + #include + #include +--- cyrus-sasl-2.1.22/pwcheck/pwcheck_getspnam.c ++++ cyrus-sasl-2.1.22/pwcheck/pwcheck_getspnam.c +@@ -24,6 +24,7 @@ OF OR IN CONNECTION WITH THE USE OR PERF + ******************************************************************/ + + #include ++#include + + extern char *crypt(); + diff --git a/cyrus-sasl/cyrus-sasl-2.1.26-size_t.patch b/cyrus-sasl/cyrus-sasl-2.1.26-size_t.patch new file mode 100644 index 0000000..3a4820f --- /dev/null +++ b/cyrus-sasl/cyrus-sasl-2.1.26-size_t.patch @@ -0,0 +1,11 @@ +--- cyrus-sasl-2.1.26/include/sasl.h 2012-10-12 09:05:48.000000000 -0500 ++++ cyrus-sasl-2.1.26/include/sasl.h 2013-01-31 13:21:04.007739327 -0600 +@@ -223,6 +223,8 @@ extern "C" { + * they must be called before all other SASL functions: + */ + ++#include ++ + /* memory allocation functions which may optionally be replaced: + */ + typedef void *sasl_malloc_t(size_t); diff --git a/cyrus-sasl/cyrus-sasl-gssapi.patch b/cyrus-sasl/cyrus-sasl-gssapi.patch new file mode 100644 index 0000000..cfbcd8b --- /dev/null +++ b/cyrus-sasl/cyrus-sasl-gssapi.patch @@ -0,0 +1,16 @@ +diff -aur cyrus-sasl-2.1.26.orig/plugins/gssapi.c cyrus-sasl-2.1.26/plugins/gssapi.c +--- cyrus-sasl-2.1.26.orig/plugins/gssapi.c 2016-06-10 13:55:25.985676293 -0700 ++++ cyrus-sasl-2.1.26/plugins/gssapi.c 2016-06-10 13:58:00.687337430 -0700 +@@ -1583,10 +1583,10 @@ + } + + /* Setup req_flags properly */ +- req_flags = GSS_C_INTEG_FLAG; ++ req_flags = GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG; + if (params->props.max_ssf > params->external_ssf) { + /* We are requesting a security layer */ +- req_flags |= GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG; ++ req_flags |= GSS_C_INTEG_FLAG; + /* Any SSF bigger than 1 is confidentiality. */ + /* Let's check if the client of the API requires confidentiality, + and it wasn't already provided by an external layer */ diff --git a/cyrus-sasl/cyrus-sasl-sql.patch b/cyrus-sasl/cyrus-sasl-sql.patch new file mode 100644 index 0000000..2dcdad8 --- /dev/null +++ b/cyrus-sasl/cyrus-sasl-sql.patch @@ -0,0 +1,39 @@ +--- configure.in 2012-10-12 16:05:48.000000000 +0200 ++++ configure.in 2013-05-11 18:48:59.021848013 +0200 +@@ -861,9 +860,9 @@ + notfound) AC_WARN([SQLite Library not found]); true;; + *) + if test -d ${with_sqlite}/lib; then +- LIB_SQLITE="-L${with_sqlite}/lib -R${with_sqlite}/lib" ++ LIB_SQLITE="-L${with_sqlite}/lib" + else +- LIB_SQLITE="-L${with_sqlite} -R${with_sqlite}" ++ LIB_SQLITE="-L${with_sqlite}" + fi + + LIB_SQLITE_DIR=$LIB_SQLITE +@@ -913,9 +912,9 @@ + notfound) AC_WARN([SQLite3 Library not found]); true;; + *) + if test -d ${with_sqlite3}/lib; then +- LIB_SQLITE3="-L${with_sqlite3}/lib -R${with_sqlite3}/lib" ++ LIB_SQLITE3="-L${with_sqlite3}/lib" + else +- LIB_SQLITE3="-L${with_sqlite3} -R${with_sqlite3}" ++ LIB_SQLITE3="-L${with_sqlite3}" + fi + + LIB_SQLITE3_DIR=$LIB_SQLITE3 +--- configure.in ++++ configure.in +@@ -674,7 +674,9 @@ + LIB_PGSQL_DIR=$LIB_PGSQL + LIB_PGSQL="$LIB_PGSQL -lpq" + +- if test -d ${with_pgsql}/include/pgsql; then ++ if test -d ${with_pgsql}/include/postgresql/pgsql; then ++ CPPFLAGS="${CPPFLAGS} -I${with_pgsql}/include/postgresql/pgsql" ++ elif test -d ${with_pgsql}/include/pgsql; then + CPPFLAGS="${CPPFLAGS} -I${with_pgsql}/include/pgsql" + elif test -d ${with_pgsql}/pgsql/include; then + CPPFLAGS="${CPPFLAGS} -I${with_pgsql}/pgsql/include" diff --git a/cyrus-sasl/fix-pkgconfig.patch b/cyrus-sasl/fix-pkgconfig.patch new file mode 100644 index 0000000..3b1c38e --- /dev/null +++ b/cyrus-sasl/fix-pkgconfig.patch @@ -0,0 +1,27 @@ +From 3f42b7d7f3ef52056c79b31529d1a5be695c74c1 Mon Sep 17 00:00:00 2001 +From: Ignacio Casal Quinteiro +Date: Fri, 20 Nov 2015 11:16:31 +0100 +Subject: [PATCH] Fix up pkgconfig pc file + +--- + libsasl2.pc.in | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/libsasl2.pc.in b/libsasl2.pc.in +index 40bea37..ddad76d 100644 +--- a/libsasl2.pc.in ++++ b/libsasl2.pc.in +@@ -1,8 +1,12 @@ +-libdir = @libdir@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ + + Name: Cyrus SASL + Description: Cyrus SASL implementation + URL: http://www.cyrussasl.org/ + Version: @VERSION@ ++Cflags: -I${includedir} + Libs: -L${libdir} -lsasl2 + Libs.private: @LIB_DOOR@ @SASL_DL_LIB@ @LIBS@ diff --git a/cyrus-sasl/gdbm-errno.patch b/cyrus-sasl/gdbm-errno.patch new file mode 100644 index 0000000..dd9147d --- /dev/null +++ b/cyrus-sasl/gdbm-errno.patch @@ -0,0 +1,29 @@ +From af48f6fec9a7b6374d4153c5db894d4a1f349645 Mon Sep 17 00:00:00 2001 +From: Jonas Jelten +Date: Sat, 2 Feb 2019 20:53:37 +0100 +Subject: [PATCH] db_gdbm: fix gdbm_errno overlay from gdbm_close + +`gdbm_close` also sets gdbm_errno since version 1.17. +This leads to a problem in `libsasl` as the `gdbm_close` incovation overlays +the `gdbm_errno` value which is then later used for the error handling. +--- + sasldb/db_gdbm.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/sasldb/db_gdbm.c b/sasldb/db_gdbm.c +index ee56a6bf..c908808e 100644 +--- a/sasldb/db_gdbm.c ++++ b/sasldb/db_gdbm.c +@@ -107,9 +107,11 @@ int _sasldb_getdata(const sasl_utils_t *utils, + gkey.dptr = key; + gkey.dsize = key_len; + gvalue = gdbm_fetch(db, gkey); ++ int fetch_errno = gdbm_errno; ++ + gdbm_close(db); + if (! gvalue.dptr) { +- if (gdbm_errno == GDBM_ITEM_NOT_FOUND) { ++ if (fetch_errno == GDBM_ITEM_NOT_FOUND) { + utils->seterror(conn, SASL_NOLOG, + "user: %s@%s property: %s not found in %s", + authid, realm, propName, path); diff --git a/cyrus-sasl/saslauthd.confd b/cyrus-sasl/saslauthd.confd new file mode 100644 index 0000000..a27733d --- /dev/null +++ b/cyrus-sasl/saslauthd.confd @@ -0,0 +1 @@ +SASLAUTHD_OPTS="" diff --git a/cyrus-sasl/saslauthd.initd b/cyrus-sasl/saslauthd.initd new file mode 100644 index 0000000..0abeaf6 --- /dev/null +++ b/cyrus-sasl/saslauthd.initd @@ -0,0 +1,20 @@ +#!/sbin/openrc-run +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + need net +} + +start() { + ebegin "Starting saslauthd" + start-stop-daemon --start --quiet --exec /usr/sbin/saslauthd \ + -- ${SASLAUTHD_OPTS} + eend $? +} + +stop() { + ebegin "Stopping saslauthd" + start-stop-daemon --stop --quiet --pidfile /run/saslauthd/saslauthd.pid + eend $? +} diff --git a/daemontools/LICENSE b/daemontools/LICENSE new file mode 100644 index 0000000..cfe2fda --- /dev/null +++ b/daemontools/LICENSE @@ -0,0 +1,21 @@ +This package was debianized by Gerrit Pape on +Wed, 18 Jul 2001 12:02:57 +0200. + +It was downloaded from + http://cr.yp.to/daemontools/daemontools-0.76.tar.gz + +Upstream Author: D. J. Bernstein + +The man-pages in debian/daemontools-man/ were downloaded from + http://smarden.org/pape/djb/manpages/daemontools-0.76-man-20020131.tar.gz + +Copyright: + +D. J. Bernstein placed the daemontools package into the public domain. +From http://cr.yp.to/distributors.html + What are the distribution terms for daemontools? + 2007.12.28: I hereby place the daemontools package (in particular, + daemontools-0.76.tar.gz, with MD5 checksum 1871af2453d6e464034968a0fbcb2bfc) + into the public domain. The package is no longer copyrighted. + +The Debian diff is in the public domain. diff --git a/daemontools/PKGBUILD b/daemontools/PKGBUILD new file mode 100644 index 0000000..8fc98bf --- /dev/null +++ b/daemontools/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=daemontools +pkgver=0.76 +pkgrel=2 +pkgdesc="A collection of tools for managing services" +arch=('i686' 'x86_64') +url='http://cr.yp.to/daemontools.html' +license=('Public-Domain') +source=("https://cr.yp.to/daemontools/${pkgname}-${pkgver}.tar.gz" + "http://smarden.org/pape/djb/manpages/$pkgname-$pkgver-man.tar.gz" + "daemontools-0.76.errno.patch" + "daemontools-0.76.service-path-fix.patch" + "svscan.initd" + "svscan.confd" + "svscan.run" + "LICENSE") +sha512sums=('e4a7938352b745a03ccc41acdddba1e6782f0ca245e5cae060de62ab6c5a23c841a994c30140298d274405a7f26d53ba7e84e5810a3d185b2c01e4c0feffe6c7' + '1767fafb2d92902f903637f08363031971bda007d1b7b53059551c740976d1c643229ccc44171796c1dcb43cbd875a17178edc634e140671817e0ef0ba3ad80b' + '02a2d45f221b70e6d0d13127e8bacae0f37e96876d551d445d582c664f604555765e62c9906d0f1faa1e4eb7f5c2ed61ebeeda75c216de99bab7ee14932068eb' + 'd3af2a13316be8740cd3593f4980fa1b7de345357d0b87dd963bed919e59c0f4f68732632f4b266877646b5cd14f023ea9968eecbdd0b578ef9bb9c417204e76' + '0a43467f5354f2f651af4a196d8553eedf53472341e57579551cac12ecf2552074078d508843baa1a8ce90ff5b61fceb06f62fafee4eb11c64e4d01167826f60' + '5a5d363744d56da338605037dd610b25543e906cbac26486ff99ecea712cdabd15a8a8f476ccdebb14051672c3a15e43e30fc7a69182841511a5662df56a9dc8' + '363c628677afc3a70d6ab20b379626744bd8f440bc0d064909b54e74aa93083fe2a5f851585468e42d9efbc5a1f78efb82e9dfd1685c63ec64db4a97701f3c72' + '0f2cd6120ff16af8266f99db48264a2646d9c95727fbf0c7401fc45b39467944ce0ed91106edb9443389b67d5cb9b659b86948a7a59b7e740031098c25d864d5') + +prepare() { + cd admin/$pkgname-$pkgver + patch -p1 < $srcdir/daemontools-0.76.errno.patch + patch -p1 < $srcdir/daemontools-0.76.service-path-fix.patch +} + +build() { + cd admin/$pkgname-$pkgver + package/compile +} + +package() { + cd admin/$pkgname-$pkgver + install -d $pkgdir/usr/sbin + cp -a command/* $pkgdir/usr/sbin + install -d $pkgdir/usr/share/man/man8 + cp -a $srcdir/daemontools-man/*.8 $pkgdir/usr/share/man/man8 + + # install services + install -Dm755 "${srcdir}/svscan.initd" "${pkgdir}/etc/init.d/svscan" + install -Dm644 "${srcdir}/svscan.confd" "${pkgdir}/etc/conf.d/svscan" + install -Dm755 "${srcdir}/svscan.run" "${pkgdir}/etc/sv/svscan/run" + + # install license + install -Dm644 "${srcdir}/LICENSE" -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/daemontools/daemontools-0.76.errno.patch b/daemontools/daemontools-0.76.errno.patch new file mode 100644 index 0000000..94b37b6 --- /dev/null +++ b/daemontools/daemontools-0.76.errno.patch @@ -0,0 +1,13 @@ +diff -ur daemontools-0.76.old/src/error.h daemontools-0.76/src/error.h +--- daemontools-0.76.old/src/error.h 2001-07-12 11:49:49.000000000 -0500 ++++ daemontools-0.76/src/error.h 2003-01-09 21:52:01.000000000 -0600 +@@ -3,7 +3,7 @@ + #ifndef ERROR_H + #define ERROR_H + +-extern int errno; ++#include + + extern int error_intr; + extern int error_nomem; + diff --git a/daemontools/daemontools-0.76.service-path-fix.patch b/daemontools/daemontools-0.76.service-path-fix.patch new file mode 100644 index 0000000..f0d57db --- /dev/null +++ b/daemontools/daemontools-0.76.service-path-fix.patch @@ -0,0 +1,26 @@ +--- a/src/Makefile 2021-07-17 16:17:19.349995829 +0200 ++++ b/src/Makefile 2021-07-17 16:18:50.569995682 +0200 +@@ -82,10 +82,9 @@ + chkshsgr.o: chkshsgr.c compile + ./compile chkshsgr.c + +-choose: choose.sh home warn-auto.sh ++choose: choose.sh warn-auto.sh + rm -f choose + cat warn-auto.sh choose.sh \ +- | sed s}HOME}"`head -1 home`"}g \ + > choose + chmod 555 choose + +@@ -387,10 +386,9 @@ + pathexec.h str.h strerr.h svscan.c wait.h + ./compile svscan.c + +-svscanboot: home svscanboot.sh warn-auto.sh ++svscanboot: svscanboot.sh warn-auto.sh + rm -f svscanboot + cat warn-auto.sh svscanboot.sh \ +- | sed s}HOME}"`head -1 home`"}g \ + > svscanboot + chmod 555 svscanboot + diff --git a/daemontools/svscan.confd b/daemontools/svscan.confd new file mode 100644 index 0000000..4460be0 --- /dev/null +++ b/daemontools/svscan.confd @@ -0,0 +1,7 @@ +# /etc/conf.d/svscan: config file for /etc/init.d/svscan + +# pidfile +PIDFILE="/var/run/svscan.pid" + +# service-folder +SERVICEFOLDER="/etc/service" diff --git a/daemontools/svscan.initd b/daemontools/svscan.initd new file mode 100644 index 0000000..3201c7b --- /dev/null +++ b/daemontools/svscan.initd @@ -0,0 +1,31 @@ +#!/sbin/openrc-run +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + use net + after firewall +} + +start() { + ebegin "Starting service scan" + setsid start-stop-daemon --start --exec /usr/sbin/svscan \ + --background --make-pidfile \ + --pidfile $PIDFILE -- $SERVICEFOLDER + eend $? +} + +stop() { + ebegin "Stopping service scan" + start-stop-daemon --stop --exec /usr/sbin/svscan \ + --pidfile $PIDFILE + eend $? + + ebegin "Stopping service scan services" + svc -dx $SERVICEFOLDER/* 2>/dev/null + eend $? + + ebegin "Stopping service scan logging" + svc -dx $SERVICEFOLDER/*/log 2>/dev/null + eend $? +} diff --git a/daemontools/svscan.run b/daemontools/svscan.run new file mode 100644 index 0000000..b2e3337 --- /dev/null +++ b/daemontools/svscan.run @@ -0,0 +1,3 @@ +#!/bin/sh +/usr/sbin/svscan +exec pause 2>&1 diff --git a/darkhttpd/PKGBUILD b/darkhttpd/PKGBUILD new file mode 100644 index 0000000..24a1d68 --- /dev/null +++ b/darkhttpd/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=darkhttpd +pkgver=1.16 +pkgrel=1 +pkgdesc="A small and secure static webserver" +arch=('i686' 'x86_64') +url='https://unix4lyfe.org/darkhttpd/' +license=('Expat') +backup=('etc/conf.d/mimetypes') +install='darkhttpd.install' +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/emikulic/darkhttpd/archive/v${pkgver}.tar.gz" + "darkhttpd.initd" + "darkhttpd.confd" + "darkhttpd.run") +sha512sums=('05abf8144d5a14ff455e2878eed4fddaca54d3fa6576b6a01d6547bcca94a0222d02742b80532519aba5202dd7df2d816e1dd057816506005894b42f570a4fe3' + '1ceea6362aea2aacfb6714d815b45edafba6681e34d47f79fc0d30ebca450745a6ff22f61eb7cdb6adabacbc0a7573e702ffdca387fd32657059c83a0e0a8cd5' + '79ecdbc751e8b5497a1afee294cf0addb4261f041a58a382e7fb51dd698dd99625a369173542c905e1e4eac7c68dfa1d8d778f4777ebe74d5031817a6ec437ad' + '29a8afde7ffdc7131b5e83fc60f98613febb475a086960552ca7fb386adca15eb6cfb8fcc84fc374299d918b0fc5648f58e9d5fa840f79f58a836f4cf61987dd') + +build() { + cd "$srcdir/$pkgname-$pkgver" + + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + # install darkhttpd + install -Dm755 "$srcdir/$pkgname-$pkgver/darkhttpd" "$pkgdir/usr/bin/darkhttpd" + + # install service files + install -Dm0644 "${srcdir}/$pkgname.confd" "${pkgdir}/etc/conf.d/$pkgname" + install -Dm0755 "${srcdir}/$pkgname.initd" "${pkgdir}/etc/init.d/$pkgname" + install -Dm0755 "${srcdir}/$pkgname.run" "${pkgdir}/etc/sv/$pkgname/run" + touch "$pkgdir"/etc/conf.d/mimetypes + + # install license + install -d "$pkgdir/usr/share/licenses/$pkgname" + sed -n '1,/^$/p' darkhttpd.c > "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/darkhttpd/darkhttpd.confd b/darkhttpd/darkhttpd.confd new file mode 100644 index 0000000..1c947b5 --- /dev/null +++ b/darkhttpd/darkhttpd.confd @@ -0,0 +1,12 @@ +# darkhttpd web server config +# +# document_root="/var/www/localhost/htdocs" +logdir="/var/log/$SVCNAME" +# addr=127.0.0.1 +# port=8080 +run_as_user=darkhttpd +run_as_group=www-data +run_in_chroot=yes + +# extra arguments +# darkhttpd_args="" diff --git a/darkhttpd/darkhttpd.initd b/darkhttpd/darkhttpd.initd new file mode 100644 index 0000000..3e5bdd8 --- /dev/null +++ b/darkhttpd/darkhttpd.initd @@ -0,0 +1,32 @@ +#! /sbin/openrc-run + +supervisor=supervise-daemon + +name="darkhttpd web server" +description="Simple, single-threaded, static content webserver" + +pidfile="/run/darkhttpd.pid" +command="/usr/bin/darkhttpd" +command_args="${document_root:-/var/www/localhost/htdocs} ${darkhttpd_args}" + +optional_arg() { + if [ -n "$2" ]; then + command_args="$command_args $1 $2" + fi +} + +start_pre() { + if [ -n "$logdir" ]; then + checkpath --directory --owner darkhttpd "${logdir}" + command_args="$command_args --log ${logdir}/access.log" + fi + optional_arg --addr "$addr" + optional_arg --port "$port" + optional_arg --uid "$run_as_user" + optional_arg --gid "$run_as_group" + optional_arg --mimetypes "$mimetypes" + if yesno "${run_in_chroot:-no}"; then + command_args="${command_args} --chroot" + fi +} + diff --git a/darkhttpd/darkhttpd.install b/darkhttpd/darkhttpd.install new file mode 100644 index 0000000..6a08947 --- /dev/null +++ b/darkhttpd/darkhttpd.install @@ -0,0 +1,28 @@ +post_install() { + # create group and user + getent group www-data &>/dev/null || groupadd -g 82 www-data >/dev/null + if ! getent group darkhttpd &>/dev/null; then + groupadd -r darkhttpd >/dev/null + fi + if ! getent passwd darkhttpd &>/dev/null; then + useradd -r -c "darkhttpd user" -d /var/www/localhost/htdocs -g darkhttpd -s /bin/nologin darkhttpd >/dev/null + usermod -aG www-data darkhttpd + fi + + # create initial directory + mkdir -p /var/www/localhost/htdocs +} + +post_upgrade() { + post_install +} + +post_remove() { + # delete group and user + if getent passwd darkhttpd &>/dev/null; then + userdel darkhttpd >/dev/null + fi + if getent group darkhttpd &>/dev/null; then + groupdel darkhttpd >/dev/null + fi +} diff --git a/darkhttpd/darkhttpd.run b/darkhttpd/darkhttpd.run new file mode 100644 index 0000000..b6a75a2 --- /dev/null +++ b/darkhttpd/darkhttpd.run @@ -0,0 +1,4 @@ +#!/bin/sh +[ -r conf ] && . ./conf +: ${WWWDIR:=/var/www/localhost/htdocs} +exec darkhttpd "${WWWDIR}" --chroot --uid darkhttpd --gid darkhttpd $OPTS 2>&1 diff --git a/darkplaces/PKGBUILD b/darkplaces/PKGBUILD new file mode 100644 index 0000000..d91349c --- /dev/null +++ b/darkplaces/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=darkplaces +pkgver=20170829beta1 +pkgrel=2 +pkgdesc="An advanced, free and libre 3D game engine" +arch=('i686' 'x86_64') +url='https://icculus.org/twilight/darkplaces/' +license=('GPL-2') +install=$pkgname.install +depends=('alsa-lib' 'hicolor-icon-theme' 'libjpeg-turbo' 'libxpm' 'libxxf86vm' 'sdl2' 'mesa-libgl') +groups=('games') +source=("https://icculus.org/twilight/darkplaces/files/darkplacesengine${pkgver}.zip" + "$pkgname.desktop") +sha512sums=('49ec750199240eb7ba4eae6ede3a3ee85bafef07607b827111fb7846f7283c44a480637a45fd85a33f441ab2f99c44dc105348ea5da04d0397650f1a347cf3e9' + '327a54479d5823c3e58931326038f1ee3388d1f6df1a0e4e91904092ae1bb9ae439c5d306ef8cee8238c81416a78cf881d2aca7c8cf64ccb0735ecd6825817e9') +noextract=(darkplacesengine$pkgver.zip) + +prepare() { + cd "$srcdir" + bsdtar -xf darkplacesengine$pkgver.zip darkplacesenginesource$pkgver.zip + bsdtar -xf darkplacesenginesource$pkgver.zip + cd "darkplaces" + + # fix a couple options in the Makefile. + sed -i '1i DP_LINK_TO_LIBJPEG=1' makefile + sed -i '/(STRIP)/d' makefile.inc +} + +build() { + cd "$srcdir/darkplaces" + + # make sure package is not compiled with -j > 1. + MAKEFLAGS="${MAKEFLAGS} -j1" + make OPTIM_RELEASE="${CFLAGS}" DP_FS_BASEDIR=/usr/share/games/quake release +} + +package() { + cd $srcdir/darkplaces + install -d $pkgdir/usr/games + install -m755 darkplaces-{dedicated,glx,sdl} $pkgdir/usr/games + + for i in 16 24 32 48 64 72; do + install -Dm644 darkplaces${i}x${i}.png $pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/darkplaces.png + done + install -Dm644 $srcdir/$pkgname.desktop -t $pkgdir/usr/share/applications + + # prepare empty data-directory + install -d $pkgdir/usr/share/games/quake +} diff --git a/darkplaces/darkplaces.desktop b/darkplaces/darkplaces.desktop new file mode 100644 index 0000000..5e3a4e8 --- /dev/null +++ b/darkplaces/darkplaces.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Exec=darkplaces-sdl +Icon=darkplaces +Type=Application +Categories=Game;ActionGame; +Name=Darkplaces +GenericName=3D Engine +Comment=Play 3D-games with the Darkplaces engine +StartupNotify=true +Terminal=false diff --git a/darkplaces/darkplaces.install b/darkplaces/darkplaces.install new file mode 100644 index 0000000..b2a6713 --- /dev/null +++ b/darkplaces/darkplaces.install @@ -0,0 +1,10 @@ +post_install() { + cat < + +pkgname=dave-gnukem +pkgver=1.0.3 +pkgrel=1 +pkgdesc="Free and libre 2D scrolling platform shooter" +arch=('i686' 'x86_64') +url='https://github.com/davidjoffe/dave_gnukem' +license=('GPL-2' 'Expat') +depends=('hicolor-icon-theme' 'sdl2_mixer') +makedepends=('graphicsmagick') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/davidjoffe/dave_gnukem/archive/${pkgver}.tar.gz" + "${pkgname}-data-${pkgver}.tar.gz::https://github.com/davidjoffe/gnukem_data/archive/${pkgver}.tar.gz" + "${pkgname}" + "${pkgname}.desktop" + "${pkgname}.png" + "libre.patch") +sha512sums=('b1b4ce3212ff3e6e4b0a9bf33c04bfe0df9e096e9faa8cd06cb50ac226e79cb0042b7150c0568172e531f3d90c3fb758365edaa8e25de141a8ba837264a7eadf' + 'fd628974f09de9e6f0e0416dfd48704766e2351a9e1e086cc0fe7fd3ad908d289ccccc5b67f8f8851a9e4a58f8caab1424e506341d928ba564679d3305061bf5' + '2bcddd90cee07a4870188e1929d317a882e4d676fbb25f01663bd3d5e433aefde0b7bf8819e383a7d17cafd2aba5727ca59655ecd5b4f69f6a222a05b870f395' + 'b633d69ffa5e6c3bf58f07f203bfe9c2aac173a451674eddce0cab87cf3c73fb2d9a6ca7b80ed26db00fdf59a8b1a2eb698a3671de110fd66d16c95a80112ff8' + '96e47115aa57f36094ecba554b090247a60fb86c466a94c796bf402c4df48c2fe3bb7da9a63ce8b40b6ff134e19425ccb6bb6f5304092f706e33b0c7e9b432f3' + '26cc3f6790dd2e2593d7b2043502163b2390e7ee655698ae9699e4313feb9bc8ec134e7cd8ef8f404a27562891bc02cc9611028066126a99675347e3c7c7193c') + +prepare() { + # remove -DDEBUG flag in makefile + sed -i 's/-DDEBUG//' "${pkgname/-/_}-${pkgver}/Makefile" + + cd "${pkgname/-/_}-${pkgver}" + patch -Np1 -i "${srcdir}/libre.patch" +} + +build() { + make -C "${pkgname/-/_}-${pkgver}" +} + +package() { + install -Dvm755 "${pkgname}" -t "${pkgdir}/usr/games" + install -Dvm644 "${pkgname}.desktop" -t "${pkgdir}/usr/share/applications" + for i in 16 32 64 128; do + gm convert "${pkgname}.png" -resize "${i}x${i}" "icon${i}.png" + install -Dvm644 "icon${i}.png" "${pkgdir}/usr/share/icons/hicolor/${i}x${i}/apps/${pkgname}.png" + done + + install -dv "${pkgdir}/usr/share/games/${pkgname}/data" + cp -rfv "${pkgname#*-}_data-${pkgver}/"* "${pkgdir}/usr/share/games/${pkgname}/data" + + cd "${pkgname/-/_}-${pkgver}" + install -Dm755 "${pkgname/-/}" "${pkgdir}/usr/share/games/${pkgname}/${pkgname}" + install -Dm644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 COPYING MIT-LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/dave-gnukem/dave-gnukem b/dave-gnukem/dave-gnukem new file mode 100644 index 0000000..0b4385e --- /dev/null +++ b/dave-gnukem/dave-gnukem @@ -0,0 +1,2 @@ +#!/bin/sh +cd '/usr/share/games/dave-gnukem' && exec .'/dave-gnukem' "$@" diff --git a/dave-gnukem/dave-gnukem.desktop b/dave-gnukem/dave-gnukem.desktop new file mode 100644 index 0000000..d39801e --- /dev/null +++ b/dave-gnukem/dave-gnukem.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Dave Gnukem +Comment=Free and libre 2D scrolling platform shooter +Icon=dave-gnukem +Type=Application +Exec=dave-gnukem +Categories=Game; +Encoding=UTF-8 diff --git a/dave-gnukem/dave-gnukem.png b/dave-gnukem/dave-gnukem.png new file mode 100644 index 0000000000000000000000000000000000000000..d523dddb8fe3ca83ff293d6a3e0ec4bd745621a7 GIT binary patch literal 8444 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00D1uPE-NUqIa4A03c{dL_t(|+U=cdj3n1}-+$-cs(#J% z%B!znc40c?jNX` zuCA(E)%X7Eo^#JV=Uljr+qjL}xQ*MmjoY}5+qjK47i82AuvMHnUE8&?pLnS;>YsPZ z5sdl)ZW70VPXZHwZnG=_egpW1wIWNb&9KnQa?Er)UEhdG6I3= zHn|lD?dBZ(xgU(l}mR7>QebnK#^c8_WTav875J0jWRRUY3QkvcLgRY7r zs%s`e%*FZV9>1gZ)Gwr@YXBbup5Mi~8X0zz0Cxa?X`SOo3ZDgd`|$IHSdQUj7EofK z6%Q#@l^~d;B1hOX1SH5*e-)>%yp^sP!EOlqI$D@sokArHu^B z!F{ZXzg980!~iRsdJxqZRWBnPhI^}Ld8qy^2HKAl9(wSd+;QR_)H$3gzw@W(c;Vt@ zOdkQxU%ExDatpDO1egLI$aX{w#+1o=&(Ka%3TM#Nj3;7_0mt(5O;9*rNGRco4W^k0 z*chrYPQ9hrsUeUhCe5XR1W@2mZIRdY$@l;U1hU-#T`Z0L#Ej*^a8tIM+S|zKWw{ zl}@xsw^@b2PNWSX1kxl(WxfCv8)A*=>f(j}+V@|2jwxYSrCJTr=SVnwV3GqzPNR5R z@4`ZprNw4$IqbMnN)W|u&4RS&v6BS&D)8R)bKHp+e=dp_Kb0L^ZN6Hx zhE%(sioZz7okKBLfd>zisD)koT*;aq0(26We>MUof>W6HW4wluF07BVBRIKlkMTD}IoB$3m>hjWz2&MG6Q)MD-F2kw zy7w+0pqbRL;x+%+EvJg(J|6E4!Hy81-$tI=1qNtPgN14~?$$zQt}0#*rzi9%aQ*v` zH=ggtyS9W(zW1N&6pZS?M$bio=8xwD;mo5C^qlv^(=YB&GmH+qsRUjE{+zD$=1#mT z7XVHZoQu*?L4t0e;pY=Reh(vFfGd6+U!R;p5L6x2>SQjN>~i zBQZ8GpfFX@9)05I%p|QS&J;zv+-$$&#!ABoVu23u9DaUa&tq5g+_VP>=}rbEz~jI_ z&(4{s-bp!}O$p#Q#2-@OJYcW}-gdaeWNEP3#|VU}PN1qxPaoo;x4$Ph-1s4Aw*v~p zkW#5T#EhbZIPMyX0;AYMe`SrN1cP=Q>*v1m-PWtu7o72oxP-TPoWI=ztdEFZx2;}N zoTlbiKe4-|g8R=F5sV3X8olTIB*8`97uEuHonIbW>m5w|471?<5i(3LP`vF;>oifTY&)&U_m}F+qjNBM)M1h^kTw0~(z; zf6+s0sg=6~NSq^a!>`bD0fX(Ox8@7KwPp^fo3+eiVt|dY` zMLe|Vgj^9-mzF(%O#4CW@5d;;g1<)Y7pNvMoe!z^B3c76mdeCI#8^6UBRU0ufE+`o?Zx>q6L) zYnK@FW^e<@F)ooo3GiF^DBT21`C3%_NArm}rV6D}iD?z=CWs(FoFpuJtsPazl~-P% z^z}c=70GfC5C((oInFuS^VfQ&uJ<#>g#Zp8qYow|o;p=~qrLh8;1~*37xI9bu9m+6 zqQnv91OWH)^E5A>%df6i%1llj?ya&#|1?~f!byBT2%=?T=4Ir?F!}SS_5mXgZwUmyPhuZEX5F|7VZgOF< z)20#U&PzIXW#!u|i|xzegBhE^F99zvJaKi@)wAOmI}wl~1U>}310WG)t`zmO-^JBt z{@D^x2_}Zl-AKt`DrV>_Zw^>Ym`xrb?KyofuG5(bg3;l}jf33tYwb*M9?;PLtoxxy7&!q7DB*Py1uCqu1BlQ4;&*z(#Kh0z zOHay>!nIp98W_K2gBj9 z5*UK1z&rB+$!bjdTmzi9_1k(t>3AhCTw{l86rz$sgM`E61yt^vpnO-FG}39c`O@mI zCrj}Po*LJHp93zAy3%$6<3a!fJOccc{F}az9Xnx>l9%HW8iLtU&s&pe*vQ|m*x_a|-0D4m(g4C#MBK!{reAy1 zzR$g#{jlsroY}^Ye`15{pV&s(>tUP-ur5?nMJ;Q1mrfFG)|b4$tTluxkYIa*;{cd0 zl+?zD&S$9LgG(|r@I%cElj%9x6E4#qRI`KF8w7BQTZ+*v`)5#8_Jm|9Vk<1r$dSZ_ zG!;%UVK=};$_Cj&s@Xm~4E$$&BU*eayq_;T;NJoMHC|u^_#x(J3)lZk;3N1s2!~Hm z_l@1E+Py&lQW;)oca2=C1gbx_m0rMy5qI~Urry9iG7DS-9-a`0BgqnO42jwuRZ_L&%KAU0h)+(hl1I4TQ%SgI$wq#bH=#?3scPGdz6PT`XL`&dkM&MgR3g zz^$goi#U7s?2fd>D0_gzcy=p>K&*6=^(&M*7D+XCBZe7U#iZffVuip4egq)UmWUfk z%Ln}fCNkK@<{2P~K?=#GO^go&2Q(3a!m|Lu#~<9dc0*G`>Ef;c`|Sz7X` z?Ez=)#C_lX_9-<+FTLe0@x9MHb2w~w16AWvY4*zf_um<|+riS&qdI-{>XeP+e6F%R zF>(Cr{rBG)wA+EN87{Gdq3NR}z%K#+fK;mvW=pe@hI82jPCXw`TlMK4Co3g>V){Yq z)v~w!8^c7kgoqF1e66|2|5*AyiSv2In#-1ji>1v!Ngr4GXB%tLbg?@+XcO~$&bT$B z78^yZ9y(N-SzazlnhkAbV&Z*j%%1{;?Y1Td4^G^9@nYVKU6`5qnV{482p}d&Nb2?J z$@%&0c4q$2q0iV(=TqtF4dCwsPwiAAjFJEcD9S(alQx+twxouV^WA${4b!H?wDknA z#xNmW0xU_1vNObK?$KDyx~AVX*g$`rWo3QmnlrY~JuV>7r}JHdF20u;(kAx!*_ z4V-XzqDDOka45BMNXc5PHEDhyy=RvDyoEZIaRWjN~Pi(Py`!>`RtMaVY$rI)Kuz>3Y9R-10)nE zx7);xMpmAwEG)dOe(hSKeux6%IuW9AU8bc|txb!X0!@$#S zvJ=O&qXYpuiIP}Q)7^^5-qOv6eOYS>f*?&i?Ul}9>1T{F-5$dj)Y_gnc%Qz;WGAob z=0$|STHn>Dy+l#i80U)9q5>3`Hk)LdUR`5Dfc)nbpzEIMhk*U&f9bneinjb=IzS&W zBqdyNzxZE^_sGbZH6UI2-;?3A|Jv+x;o3C{U|-b?s1Lig*0zT6BEZc;fkg9s(n;Xx z98O1RszgDHcy(#$<)&0Yg07CRw6w&^%1U~{4M{f-FbcAFaA#%wnlT)%N67Xd-L-J=6Es#V%S-b@M2=68wXdHkC{53Fvd z>h=c#93*X*cm177C4MYTB`Z*VJ)-@>0s}{es+5o3MKC>^Yvkw8pJ!!dWsT;qfJHeX z9c*DXDbqJq1iR9pk|v`NV7b}k;)M%dz5~Y>7C4%oFTiV8uJHQVv$+y@bZ(9rx&*m$ z^e8J`C9x&Wef+6spZ(5k+}y997k7cTrtWp3_|ubw{5ZeULkpop6hcs-Fo+S{E=mVHdtxiCkT$-L`Q zpo2n;`bL!>e(V7`Xlvx#m!7jfTh zcN+bQw_Ru7vdfD4o*;lzXtXZ{U9# zJG7H7RuOF}$JA!<=lE4p72mku>O1~NcsZZoRhS>{X5H=y0%)2C5K^Vj8s7i*`-;)L zJxHAEX=H0mo;D81i8Sc8lD7cv1(PW44WV#K*7t`&QU{4UBh@uD>2G_UvlNpmB zo{ffXyXE@59>#_Mg16gi`d>saLcVrjzma5XE`L3-|LNpXb|n3)8<&|qqmguV)3n@d zqAGJy>%&+Z+s1|fR}aN3rRrKJG2eOp0@JUTeCpRQ;L&@IQw@XM5VPED51ricI)K*? zj0mq>o#T}&^Lg8Jl7uKu$O!QK)C!j#m3)G!RWI0y1TIdtG0vd^H52irXJ2B{`ndzA zN-K(UJ3uE+UIBg`KUZ(rWf{I*j0FJ{n4d|Il7Gu>0^fV_Dz%1J-0GDw51l+hwd9xh zcB(Ww(Wc5aBD{Wmk#9YBzB{Xz|M53})ya!G$SYBZ3vb4)}I+_Ic}}40h`h-w#M;{$=1PNNQ#@ z>brewh9<8QV{HJ$dm+2{Sj#71dtu(Uu_4B%2PnW9xNssONc>w?(S)zQ@CsGk`f@!2 zyjpE?{t?ZmT>H_S0Bsb~2A0jxUMDuX&vT{Cw?1>VaHtR z8?fcz(Zc6$N|H0brS(rSSK&gUdOl)AOSv(kCJsjJzkD~19))I$zp|IDlAS7qHS;6UkgR7fkIli zcs|0d3~kdy9iIfgp4N{8&X2l+b_?S|0Hv6dUzyNYo9mw4pUcH%2L_yOw8wKuW5u=H zu#tlT=MY{Pb*0=2jGO@day3mK(`WMQYuIdF_NG$8`SMiy-N|~&GJ~FNKVswr=!bOH zX7&&afvuA3iQ>?tv1!du#J}}vVFbwpfjdA(tT<`mbk{PmjWx!O0JZ1e+Ow}fU~8N> z`~gBc2|z2j%sD9a5`vy2^Qu{#DTT1IC{KDV%n^oK|pgjA>NU zh7?2$)^zhXd&iGqD!wB~CVIXp1yfYZ$1>L*aY_6BcC>IwL@a)M@e(~rXZ8>F009Km zgjVM&ak2~uQM^p$;%S`v6tQ7YXL{l^x#`Y?SUV)4w?eIaCtB*7mJc0xHwS0lm74yY zef`S+`b;}o$P5K5z=zqFOGfPp0;EtyH4WKSMG}jscis~TFi9zQ&NGA8$=aHbRF!FfHNo*N+b z16-4vmL16zyr(eA9^mcx#K>zxD@E)?U?=KQ=+YI3X1q`+mkyxn^CK83(TSJHn$DUE z#tin>QH3~Zrst=rWlagmbHi>kmT-?@lmz$$@Y4+RpA#mlCxgIFkTsIJnAoLxdc<&` z{8|mveQ48<$2^1AoVJ2E7kQfmK0t`_u zR#cOkjO-HU-3amxBy((jX&*qD)lppcK^8Ndyg> z?JGaoiss%XBb@abK4ZN-o6;#LyiBfuxKoyl5>`eZrJw&C1$ znk}ymC?Qv)x6*M{G6Dp)n}OHo?`@?e2`(u({2|22D$9*?>Aq4f9imq58+jB+(*fdS zHNSp#>S4lQ3IOLim2($=|5JraF9YwPOMnyjC0`B>`Q3j2e3LPiF5_YR?z86ZPEFm6 zSkcXXIhKvP8H`W~ET&>jKd2T+AZWUfsH}7SdS>7Lvvu9`dVR-5e1;Hjb8w*Dxq^-> z#}CZBkUp|*5=N<3&8I)*muu47yU@HbM5_E1BXGKFqq6w5ZAlvSUZ{{ajo=T3H913 zKUaWYh$asOU;EjL%wKnEsFuT{2dAsmVQGk?*uCY-+-fHJ3_eB7S4UOv{TLYmVyATC z?m(bEQO2fm0M04x_H(p5ak>J?1g-c4PW@UNiEFXix=F4jxUFaImeqJ@oc*Rd(Wz|t=XM1*Ve zjkjN!Tm4Mo>(6nU0Bez@U4twQo8SY5h8bsjx_%LFuaEnuZ2i!!IE2{P*xP-ZyEcY= z9%6vF&k{y%65Gn{yVDpc0sJUy$iYITdb5qBIlczU{Ea4SWY8CxOkdZl$S>@ZZpC|d zvyf$B1ba~v9GwVA9POxUay242)6KVk$B}wo)lp(eu6&of4QRQ9%c=#^Ex#D#D3FlTGT7UYuXepF2tPyZ9Btv-|>Ml{xBG65weHesyu2 z{5X&kASmVG*hrevJx&Q=jc|0jiZ#BXS6k8atCtr4ZlUaN9w}UYk$cX2U`mIOg7T^zKGFK{q1Y5Bn4uwi3+Hr|wHfmyI8F9L3Wpb%1OE&9vLr zZjOKfm942^zJEoQ?LyXA@46vmo4HZfH!)9ORZKY*GUlP>qa?t80DhY^MNFq1Ki+A_ z?*cyztds)6KvOv^%&oNZv39!?Z^iPqF7BOrdChk-lM$t$>sB5+CFu-qM^$BEp;_F2 z7C-IX#uNG~V{9WDB>{erZaAkx?EXb|z=@C~E^lxZzb;Rf@VQf%MA|OuVc&X!0;Qmg z4Z6lfw@$a?5=XNgq1{EM7Et})BC;oP1&)LOMOk>}p%a)vDPsDBtK??efw<|xxAqU- zw<=;JOER5bWe^E~XdGpJKgPulp!l>bSvnR`Wl~kGPaiLSd6;bZRX+{5l3o|2*KP-^ z>6W=9O{x-XOa(#xEYWh`vy5$*-;Z%2K!Uf`XTI5!OH0lF0`g!s`0vZydLHjmzDPHZ z&vpX*AIDGADq!2~_}6I1@7d(Fucps3hwsH!xA`o$6yrhwpOz)tQJsj_OA!Mt;Cpxi z>;x{P8>%WUaZ6jcHhY%&TUui~gpm_qh>c(~v3PdS_1n4snTJl0Mg(tdL6RMMmQi3l eoI-D7WcdG36Wfs}j7uE=0000BA literal 0 HcmV?d00001 diff --git a/dave-gnukem/libre.patch b/dave-gnukem/libre.patch new file mode 100644 index 0000000..b853b80 --- /dev/null +++ b/dave-gnukem/libre.patch @@ -0,0 +1,58 @@ +--- a/src/instructions.cpp 2022-11-29 00:09:38.000000000 +0100 ++++ b/src/instructions.cpp 2024-10-30 00:03:07.097237282 +0100 +@@ -20,7 +20,7 @@ + #include"djinput.h"//GetKeyString() + + const std::string sPLOT("STORY: The year is $CURRENTYEAR+8. An evil genius, Dr Proetton, has been hired by the CIA to infect the world's computers with a virus called SystemD, crippling them. Only you can stop him. You must find the floppy disk with the Devuan Antivirus on it, and install it on the main computer, which is hidden in Vault7.\n*Any resemblance to actual persons or entities is purely coincidental.\nTL;DR Shoot anything that moves."); +-const std::string sABOUT("Dave Gnukem is an open source retro-style 2D scrolling platform shooter similar to, and inspired by, Duke Nukem 1 (a famous 1991 game). It has no affiliation with the original game; this is a \"spare-time\" project created by David Joffe, with contributions by others. It includes a level editor and cross-platform support.\n\nThe original DN1 had 16-color 320x200 graphics. The aim here is similar but different gameplay & 'look and feel' - kind of a parody.\n\nSOURCE: github.com/davidjoffe/dave_gnukem\n\n### ABOUT DUKE NUKEM 1 ###\nDuke Nukem 1 was a famous original 16-color 320x200 'classic' game released by Apogee Software in 1991 that launched the Duke Nukem series. The original Duke Nukem 1 was created by Todd Replogle (co-creator of the Duke Nukem series), John Carmack (of id Software), Scott Miller (founder of 3D Realms), Allen H. Blum III, George Broussard, and Jim Norwood."); ++const std::string sABOUT("Dave Gnukem is a free and libre retro-style 2D scrolling platform shooter similar to, and inspired by, Duke Nukem 1 (a famous 1991 game). It has no affiliation with the original game; this is a \"spare-time\" project created by David Joffe, with contributions by others. It includes a level editor and cross-platform support.\n\nThe original DN1 had 16-color 320x200 graphics. The aim here is similar but different gameplay & 'look and feel' - kind of a parody.\n\nSOURCE: github.com/davidjoffe/dave_gnukem\n\n### ABOUT DUKE NUKEM 1 ###\nDuke Nukem 1 was a famous original 16-color 320x200 'classic' game released by Apogee Software in 1991 that launched the Duke Nukem series. The original Duke Nukem 1 was created by Todd Replogle (co-creator of the Duke Nukem series), John Carmack (of id Software), Scott Miller (founder of 3D Realms), Allen H. Blum III, George Broussard, and Jim Norwood."); + + std::string GetKeyStringS(int nSDLKeyCode) + { +--- a/README.md 2019-08-29 23:55:06.000000000 +0200 ++++ b/README.md 2022-09-09 02:44:06.237327573 +0200 +@@ -1,5 +1,5 @@ + # Dave Gnukem +-Dave Gnukem is a retro-style 2D scrolling platform shooter similar to, and inspired by, Duke Nukem 1 (~1991). The source code is cross-platform and open source. It runs on Windows, Linux, Mac OS X and more. (The original Duke Nukem 1 had 16-color EGA 320x200 graphics; the aim here is 'similar but different' gameplay and 'look and feel'. It is kind of a parody of the original. Please note it is not a 'clone', and not a 're-make'.) ++Dave Gnukem is a retro-style 2D scrolling platform shooter similar to, and inspired by, Duke Nukem 1 (~1991). The source code is cross-platform, free and libre. It runs on Windows, Linux, Mac OS X and more. (The original Duke Nukem 1 had 16-color EGA 320x200 graphics; the aim here is 'similar but different' gameplay and 'look and feel'. It is kind of a parody of the original. Please note it is not a 'clone', and not a 're-make'.) + + **News Apr 2018: Version 1.0 released.** Apr 2019 OpenBSD port. + +@@ -15,8 +15,6 @@ + + **Project page**: http://djoffe.com/gnukem/ + +-**Mini Demo Video**: https://youtu.be/Hi7WYnOA_fo +- + + ![Dave Gnukem Screenshot](http://scorpioncity.com/dave_gnukem/gallery/Dave%20Gnukem%200.90%20%2813%20Jan%202018%29.png "Dave Gnukem Screenshot") + +@@ -32,19 +30,6 @@ + + Duke Nukem 1 was a famous original 16-color 320x200 'classic' game released by Apogee Software in 1991 that launched the Duke Nukem series: https://goo.gl/yP4PbS The original Duke Nukem 1 was created by Todd Replogle (co-creator of the Duke Nukem series), John Carmack (of id Software), Scott Miller (founder of 3D Realms), Allen H. Blum III, George Broussard, and Jim Norwood. + +-### Development LiveStreaming Channels +- +-Development live-stream channel(s): +- +-* https://www.liveedu.tv/david_joffe/ +- * https://www.liveedu.tv/david_joffe/l98yv-dave-gnukem-side-scrolling-shooter/ (full development video archive here) +- * https://www.livecoding.tv/david_joffe/videos/wae18-dave-gnukem-c-game-side-scrolling-shooter and +- * https://www.livecoding.tv/david_joffe/videos/K9XBz-dave-gnukem-c-game-side-scrolling-shooter-3 etc. +-* https://www.twitch.tv/david_joffe/ +-* https://www.youtube.com/user/davidjoffe2 (partial archive) +-* https://www.pscp.tv/DavidJoffe +-* https://mixer.com/gnukem111 +- + ### Notes + + Note the aim of Dave Gnukem is not to be a 'clone', nor to try match DN1 gameplay precisely - the goal is to be 'similar but different', sort of a parody though not terribly funny. It's not the purpose or intention of this project to produce a 'clone', nor is it the intention to try load actual original level or sprite data into this 'engine'. The included levels have been created from scratch by users. The included sprites (apart from a few small exceptions mentioned at the bottom of this README) have been drawn by hand from scratch. The game is sort of a hat tip to the original. - David Joffe +@@ -380,7 +365,7 @@ + + # Notes + +-The name is a pun on 'Duke Nukem' and 'Gnu' as a sort of 'hat-tip'/reference to the open source license/model. ++The name is a pun on 'Duke Nukem' and 'Gnu' as a sort of 'hat-tip'/reference to the free software license/model. + + The game took forever to complete to mimic the Duke Nukem Forever model of taking forever to be released. + diff --git a/dcron/COPYING b/dcron/COPYING new file mode 100644 index 0000000..1f963da --- /dev/null +++ b/dcron/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + diff --git a/dcron/PKGBUILD b/dcron/PKGBUILD new file mode 100644 index 0000000..6ef5d19 --- /dev/null +++ b/dcron/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Jesus E. + +pkgname=dcron +pkgver=4.5 +pkgrel=1 +pkgdesc="Dillon's lightweight cron daemon" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://github.com/dubiousjim/dcron' +depends=('bash') +provides=('cron') +conflicts=('cron') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/dubiousjim/dcron/archive/v${pkgver}.tar.gz" + "pidfile.patch" + "ldflags.patch" + "pick-up-update.patch" + "${pkgname}.initd" + "${pkgname}.confd" + "${pkgname}.run" + "${pkgname}.conf" + "COPYING") +sha512sums=('72b72c624f72861a6fc10f030ca2b764c5f3be9a0d8341663c5a0acc2fda7fef70770d200975805f184d2fb668ee4811693989a54b12dc5ef501877f6c4aca0e' + '04fdd3059d6b1df8132944e2eefa932e640db8b4a5ac85dd1ca833adf1d0013ad33f40021624e12a4203b08003d6c79f0a5da4e29b057004fb849f388c7178f2' + '8a07ccfae80468a555e8f5ea60f88dd444a3aacb6baa6f747a6a02bcdce78baaa8aaf799ae9d2684a518bfff537dc0cdcf0b53bb6fc0017fa52228f1f0a16e49' + 'd199d868984e282a6244db86e65342f0bffb8fa45be812d239933a131a658f67c99ea360767168fc6753da5b279e320090a942697691dfda64c5cd5e178e7b6d' + '0513fc6795988c68f2d552c7754383c6db1f51507686c25cf5205a8491679626118a4bab22c8d5e58017f58cc01ab21af8931fdef806a80f3d27cba2f53831cd' + 'c7a1d633b9085d3e82f5e5760520ac36564efc9bf31b3674158eb8ab5ab433d384b46efcdd66ee4adf8b51ebc04a41c864014c18b9248d0c91470e500e60f838' + 'c3f179f6fb58ca6008eda7bb7a56b6b507d2d204fc78f43d275eea8055ed201f3084ff9014bf4c93f6072cf87b8db490d49f52386d1a256a0b518f41cab70fab' + '13b7a59e7ac44995b6e02123a9c3e47dccde85fa004d86861f4af2b5b5e08b0f34429c6721fb98733f0c514c41a6f7933fc733e58f36c15ee2571a0a73ec626c' + '548011936eb84e7c09c5a96234c51f1cb6962e0dd20af3d15478d05a735e7f9137333da5a5d0a27adaf6f51e7d7460a70806fb47977d6f522b5408073ae95793') + +prepare() { + cd "$srcdir/${pkgname}-${pkgver}" + patch -Np1 -i ${srcdir}/pidfile.patch + patch -Np1 -i ${srcdir}/ldflags.patch + patch -Np1 -i ${srcdir}/pick-up-update.patch +} + +build() { + cd "$srcdir/${pkgname}-${pkgver}" + + # by default, any member of group "wheel" can edit their own crontab + make \ + PREFIX=/usr \ + CRONTAB_GROUP=wheel \ + CRONTABS=/var/spool/cron \ + CRONSTAMPS=/var/spool/cronstamps +} + +package() { + cd "$srcdir/${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + + # install standard configuration, files and scripts + install -d -m755 "$pkgdir"/etc/cron.{hourly,daily,weekly,monthly} + + install -D -m755 extra/run-cron "$pkgdir"/usr/bin/run-cron + install -D -m0600 extra/root.crontab "$pkgdir"/var/spool/cron/root + install -D -m644 extra/crontab.vim "$pkgdir"/usr/share/vim/vimfiles/ftplugin/crontab.vim + sed -i -e 's=/var/spool/cron/cronstamps=/var/spool/cronstamps=' extra/prune-cronstamps + install -D -m755 extra/prune-cronstamps "$pkgdir"/etc/cron.d/prune-cronstamps + + # services + install -D -m755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname + install -D -m644 "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname + install -D -m755 "$srcdir"/$pkgname.run "$pkgdir"/etc/sv/$pkgname/run + install -D -m644 "$srcdir"/$pkgname.conf "$pkgdir"/etc/sv/$pkgname/conf + + # license + install -D -m644 "$srcdir"/COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/dcron/dcron.conf b/dcron/dcron.conf new file mode 100644 index 0000000..3ff771e --- /dev/null +++ b/dcron/dcron.conf @@ -0,0 +1 @@ +DCRON_OPTS="-S -l info" diff --git a/dcron/dcron.confd b/dcron/dcron.confd new file mode 100644 index 0000000..2e4db17 --- /dev/null +++ b/dcron/dcron.confd @@ -0,0 +1,4 @@ +# +# Parameters to be passed to crond +# +DCRON_OPTS="-S -l info" diff --git a/dcron/dcron.initd b/dcron/dcron.initd new file mode 100644 index 0000000..65b631b --- /dev/null +++ b/dcron/dcron.initd @@ -0,0 +1,12 @@ +#!/sbin/openrc-run + +name="$SVCNAME" +command="/usr/sbin/crond" +command_args="$DCRON_OPTS" +pidfile="/var/run/$SVCNAME.pid" +description="Dillon's lightweight cron daemon" + +depend() { + use logger clock hostname + provide cron +} diff --git a/dcron/dcron.run b/dcron/dcron.run new file mode 100644 index 0000000..67f5b86 --- /dev/null +++ b/dcron/dcron.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r conf ] && . ./conf +exec crond -n $DCRON_OPTS 2>&1 diff --git a/dcron/ldflags.patch b/dcron/ldflags.patch new file mode 100644 index 0000000..7fa2d8d --- /dev/null +++ b/dcron/ldflags.patch @@ -0,0 +1,38 @@ +From 8a292168e584c50808b80df3577a7d89fa32db26 Mon Sep 17 00:00:00 2001 +From: Mike Frysinger +Date: Mon, 16 May 2011 16:24:20 -0400 +Subject: [PATCH] drop LDFLAGS set, and restore CFLAGS linking + +Signed-off-by: Mike Frysinger +--- + Makefile | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index 1938e05..8309ad6 100644 +--- a/Makefile ++++ b/Makefile +@@ -32,7 +32,6 @@ TABSRCS = crontab.c chuser.c + TABOBJS = crontab.o chuser.o + PROTOS = protos.h + LIBS = +-LDFLAGS = + DEFS = -DVERSION='"$(VERSION)"' \ + -DSCRONTABS='"$(SCRONTABS)"' -DCRONTABS='"$(CRONTABS)"' \ + -DCRONSTAMPS='"$(CRONSTAMPS)"' -DLOG_IDENT='"$(LOG_IDENT)"' \ +@@ -54,10 +53,10 @@ protos.h: $(SRCS) $(TABSRCS) + fgrep -h Prototype $(SRCS) $(TABSRCS) > protos.h + + crond: $(OBJS) +- $(CC) $(LDFLAGS) $^ $(LIBS) -o crond ++ $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LIBS) -o crond + + crontab: $(TABOBJS) +- $(CC) $(LDFLAGS) $^ -o crontab ++ $(CC) $(CFLAGS) $(LDFLAGS) $^ -o crontab + + %.o: %.c defs.h $(PROTOS) + $(CC) $(CFLAGS) $(CPPFLAGS) -c $(DEFS) $< -o $@ +-- +1.7.5.rc3 + diff --git a/dcron/pick-up-update.patch b/dcron/pick-up-update.patch new file mode 100644 index 0000000..ee69ae3 --- /dev/null +++ b/dcron/pick-up-update.patch @@ -0,0 +1,26 @@ +From abf8c4bf53a84ef3de530519a3bbb6b599595f2c Mon Sep 17 00:00:00 2001 +From: robdewit +Date: Tue, 31 Mar 2015 14:24:15 +0200 +Subject: [PATCH] Update main.c + +Removed bug where cron.update is not picked up while jobs are still running. +--- +Fix backported from upstream master - https://github.com/dubiousjim/dcron/commit/abf8c4bf53a84ef3de530519a3bbb6b599595f2c +--- + main.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff -upr dcron-4.5.orig/main.c dcron-4.5/main.c +--- dcron-4.5.orig/main.c 2020-03-27 15:46:16.344036288 +0700 ++++ dcron-4.5/main.c 2020-03-27 15:43:29.164619553 +0700 +@@ -343,7 +343,8 @@ main(int ac, char **av) + SynchronizeDir(SCDir, "root", 0); + ReadTimestamps(NULL); + } +- } else { ++ } ++ if (rescan < 60) { + CheckUpdates(CDir, NULL, t1, t2); + CheckUpdates(SCDir, "root", t1, t2); + } +Only in dcron-4.5: main.c.orig diff --git a/dcron/pidfile.patch b/dcron/pidfile.patch new file mode 100644 index 0000000..28a0e27 --- /dev/null +++ b/dcron/pidfile.patch @@ -0,0 +1,29 @@ +diff -upr dcron-4.5.orig/Makefile dcron-4.5/Makefile +--- dcron-4.5.orig/Makefile 2016-03-20 00:03:45.043674778 +0100 ++++ dcron-4.5/Makefile 2016-03-20 00:04:01.640164147 +0100 +@@ -39,7 +39,7 @@ DEFS = -DVERSION='"$(VERSION)"' \ + -DTIMESTAMP_FMT='"$(TIMESTAMP_FMT)"' + + # save variables needed for `make install` in config +-all: $(PROTOS) crond crontab ; ++all: crond crontab ; + rm -f config + echo "PREFIX = $(PREFIX)" >> config + echo "SBINDIR = $(SBINDIR)" >> config +Only in dcron-4.5: Makefile.orig +diff -upr dcron-4.5.orig/main.c dcron-4.5/main.c +--- dcron-4.5.orig/main.c 2016-03-20 00:03:45.043674778 +0100 ++++ dcron-4.5/main.c 2016-03-20 00:04:14.933355472 +0100 +@@ -226,6 +226,11 @@ main(int ac, char **av) + exit(1); + } else if (pid > 0) { + /* parent */ ++ FILE *fp; ++ if ((fp = fopen("/var/run/dcron.pid", "w")) != NULL) { ++ fprintf(fp, "%d\n", pid); ++ fclose(fp); ++ } + exit(0); + } + /* child continues */ +Only in dcron-4.5: main.c.orig diff --git a/dd_rescue/PKGBUILD b/dd_rescue/PKGBUILD new file mode 100644 index 0000000..39e936b --- /dev/null +++ b/dd_rescue/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=dd_rescue +pkgver=1.99.11 +pkgrel=1 +pkgdesc="A dd version that is very useful for data-recovery" +url='http://www.garloff.de/kurt/linux/ddrescue/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('libressl') +optdepends=('lzo: for libddr_lzo') +source=("http://www.garloff.de/kurt/linux/ddrescue/$pkgname-${pkgver}.tar.bz2"{,.asc}) +sha512sums=('e1d32711421ebbafd80fd210718667ff8c2d22b5349945105b3e4c29d54d381385b1fd188b2d8aa1b7a0aaf2cc9d8f7374373cff3992726a3d17549ca50f3904' + 'SKIP') +validpgpkeys=('6669F7340D31E95EC5565490DE4F1B3A2BFFC5BF') # Kurt Garloff + +prepare() { + cd $pkgname-$pkgver + autoreconf -fi + + # don't install to /usr/lib64 + sed -i '/LIB = lib64/d' Makefile +} + +build() { + cd $pkgname-$pkgver + ./configure + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" INSTALLDIR="$pkgdir/usr/bin" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ddrescue/PKGBUILD b/ddrescue/PKGBUILD new file mode 100644 index 0000000..d0fb6b4 --- /dev/null +++ b/ddrescue/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname='ddrescue' +pkgver='1.26' +pkgrel='2' +pkgdesc='GNU data recovery tool' +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/ddrescue/ddrescue.html' +license=('GPL-2') +depends=('gcc-libs') +optdepends=('man-db: manual pages support' + 'texinfo: software information support') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.lz" + "https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.lz.sig") +sha512sums=('bbe414563d459a1ad1c4e55848214d195e01f8bc455104eddbeff7046623f5bc21d961457d27ace2605d13dff68c7948182706b8afe6755e5c363e8cad86a1cc' + 'SKIP') +validpgpkeys=('1D41C14B272A2219A739FA4F8FE99503132D7742') # Antonio Diaz Diaz + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + # fake configure script reinvents autotools and requires custom parameters to + # set CPPFLAGS, CXXFLAGS and LDFLAGS + ./configure --prefix='/usr' \ + CPPFLAGS="${CPPFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS}" + make V='1' +} + +package() { + make DESTDIR="${pkgdir}" 'install' 'install-man' -C \ + "${srcdir}/${pkgname}-${pkgver}" + + for i in 'AUTHORS' 'ChangeLog' 'NEWS' 'README'; do + install -Dm '644' "${srcdir}/${pkgname}-${pkgver}/${i}" -t \ + "${pkgdir}/usr/share/doc/${pkgname}" + done + unset i + + install -Dm '644' "${srcdir}/${pkgname}-${pkgver}/COPYING" -t \ + "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/deadbeef/PKGBUILD b/deadbeef/PKGBUILD new file mode 100644 index 0000000..9638944 --- /dev/null +++ b/deadbeef/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=deadbeef +pkgver=1.8.7 +pkgrel=2 +pkgdesc="Modular, free and libre GTK+ audio player" +arch=('i686' 'x86_64') +url='https://deadbeef.sourceforge.io/' +license=('GPL-2' 'LGPL-2.1') +depends=('gtk' 'gtk2' 'alsa-lib' 'jansson') +makedepends=('libvorbis' 'libmad' 'flac' 'curl' 'imlib2' 'wavpack' 'libsndfile' 'libcdio' + 'libx11' 'faad2' 'zlib' 'intltool' 'pkgconfig' 'libzip' + 'libsamplerate' 'yasm' 'ffmpeg' 'clang' 'gettext-tiny') +optdepends=('cdparanoia: for cd audio plugin' + 'curl: for artwork plugins' + 'faad2: for AAC plugin' + 'ffmpeg: for ffmpeg plugin' + 'flac: for flac plugin' + 'imlib2: for artwork plugin' + 'libcdio: for cd audio plugin' + 'libice: optional dependency for gtkui session client support' + 'libmad: for mp3 plugin (mpeg1,2 layers1,2,3)' + 'libogg: for ogg vorbis plugin' + 'libsamplerate: for dsp_libsrc plugin (resampler)' + 'libsidplay: for SID player plugin' + 'libsm: optional dependency for gtkui session client support' + 'libsndfile: for sndfile plugin' + 'libvorbis: for ogg vorbis plugin' + 'libx11: for global hotkeys plugin' + 'libzip: for vfs_zip plugin' + 'mpg123: for MP1/MP2/MP3 playback' + 'opusfile: for opus plugin' + 'wavpack: for wavpack plugin' + 'zlib: for Audio Overload plugin (psf, psf2, etc), GME (for vgz)') +source=("https://sourceforge.net/projects/deadbeef/files/travis/linux/1.8.7/deadbeef-${pkgver}.tar.bz2" + "libre.patch") +sha512sums=('49a9610f8aa8d9853cd4f9a38d103f9a902993a5ae1990937a3ac5a14a4f8533f4233002893875aedf45f737d1a95c7cea189c61d6387bd8be7f3535d60c96eb' + '715b3358c357544c0d792f74f4f6d0ae8ebc0101059cf923cce6539f04ecc19d85f2277d6a2c2f12c6b7365eb571ea17dd3ca19cfbe7e50d53c2d657cdb1e66d') + +build () { + cd "${srcdir}/${pkgname}-${pkgver}" + + export CC=clang CXX=clang++ + ./configure \ + --prefix=/usr + + # removing non-free and not needed parts + patch -Np1 -i $srcdir/libre.patch + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.{GPLv2,LGPLv2.1} -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/deadbeef/libre.patch b/deadbeef/libre.patch new file mode 100644 index 0000000..33bce79 --- /dev/null +++ b/deadbeef/libre.patch @@ -0,0 +1,11 @@ +--- a/Makefile 2021-07-07 01:58:41.000000000 +0200 ++++ b/Makefile 2021-07-07 01:58:59.352722223 +0200 +@@ -450,7 +450,7 @@ + PKG_CONFIG = /usr/bin/pkg-config + PKG_CONFIG_LIBDIR = + PKG_CONFIG_PATH = +-PLUGINS_DIRS = plugins/liboggedit plugins/libparser plugins/lastfm plugins/mp3 plugins/vorbis plugins/opus plugins/flac plugins/wavpack plugins/sndfile plugins/vfs_curl plugins/cdda plugins/gtkui plugins/alsa plugins/ffmpeg plugins/hotkeys plugins/oss plugins/artwork-legacy plugins/adplug plugins/ffap plugins/sid plugins/nullout plugins/supereq plugins/vtx plugins/gme plugins/pulse plugins/notify plugins/musepack plugins/wildmidi plugins/tta plugins/dca plugins/aac plugins/mms plugins/shellexec plugins/shellexecui plugins/dsp_libsrc plugins/m3u plugins/vfs_zip plugins/converter plugins/dumb plugins/shn plugins/psf plugins/mono2stereo plugins/alac plugins/wma plugins/pltbrowser plugins/coreaudio plugins/sc68 plugins/rg_scanner plugins/soundtouch ++PLUGINS_DIRS = plugins/liboggedit plugins/libparser plugins/mp3 plugins/vorbis plugins/opus plugins/flac plugins/wavpack plugins/sndfile plugins/vfs_curl plugins/cdda plugins/gtkui plugins/alsa plugins/ffmpeg plugins/hotkeys plugins/artwork-legacy plugins/adplug plugins/ffap plugins/sid plugins/nullout plugins/supereq plugins/vtx plugins/gme plugins/musepack plugins/wildmidi plugins/tta plugins/dca plugins/aac plugins/mms plugins/shellexec plugins/shellexecui plugins/dsp_libsrc plugins/m3u plugins/vfs_zip plugins/dumb plugins/shn plugins/psf plugins/mono2stereo plugins/alac plugins/wma plugins/sc68 plugins/rg_scanner + PNG_DEPS_CFLAGS = + PNG_DEPS_LIBS = + POSUB = po diff --git a/dejagnu/PKGBUILD b/dejagnu/PKGBUILD new file mode 100644 index 0000000..e26e297 --- /dev/null +++ b/dejagnu/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=dejagnu +pkgver=1.6.2 +pkgrel=1 +pkgdesc='Framework for testing other programs' +arch=(any) +url='https://www.gnu.org/software/dejagnu/' +license=(GPL-3) +depends=(sh expect) +source=(https://ftp.gnu.org/gnu/dejagnu/${pkgname}-${pkgver}.tar.gz{,.sig}) +sha512sums=('ae527ce245871d49b84773d0d14b1ea6b2316c88097eeb84091a3aa885ff007eeaa1cd9c5b002d94a956d218451079b5e170561ffa43a291d9d82283aa834042' + 'SKIP') +validpgpkeys=('152F3EADD335FF629611128567DADC3E3F743649') # Ben Elliston + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +check() { + cd $pkgname-$pkgver + make check || true +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/desktop-file-utils/PKGBUILD b/desktop-file-utils/PKGBUILD new file mode 100644 index 0000000..ffb93d5 --- /dev/null +++ b/desktop-file-utils/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=desktop-file-utils +pkgver=0.26 +pkgrel=1 +pkgdesc="Command line utilities for working with desktop entries" +arch=(i686 x86_64) +url="https://www.freedesktop.org/wiki/Software/desktop-file-utils" +license=(GPL-2) +depends=(glib2) +source=(https://www.freedesktop.org/software/desktop-file-utils/releases/desktop-file-utils-${pkgver}.tar.xz{,.asc} + update-desktop-database.hook) +sha512sums=('5b4e435f0b635d8f898ac7f5759f74a08ffbe2a56d41fee0e84ff57e73b98d08b57b4416f20b99f696dad8bcb1c20792b39acf836b0814220c0b386ea5f6b831' + 'SKIP' + 'a12917f81c13aacd0dd28c4c7db29e85db1fba8b9ef7d80c3b96de4926742f180fcafde353552e35fdfea1dba9fb6ac020305447ed86e0bf51a62efc53812b01') +validpgpkeys=('C01EDE5BB0D91E26D003662EC76BB9FEEAD12EA7') #Hans Petter Jansson + +prepare() { + cd $pkgname-$pkgver + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +check() { + cd $pkgname-$pkgver + make check +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 ../*.hook + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/desktop-file-utils/update-desktop-database.hook b/desktop-file-utils/update-desktop-database.hook new file mode 100644 index 0000000..a18caeb --- /dev/null +++ b/desktop-file-utils/update-desktop-database.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/applications/*.desktop + +[Action] +Description = Updating the desktop file MIME type cache... +When = PostTransaction +Exec = /usr/bin/update-desktop-database --quiet diff --git a/detox/PKGBUILD b/detox/PKGBUILD new file mode 100644 index 0000000..5c8354c --- /dev/null +++ b/detox/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=detox +pkgver=1.4.5 +pkgrel=1 +pkgdesc="An utility designed to clean up filenames by replacing characters with standard equivalents" +arch=('i686' 'x86_64') +url="https://github.com/dharple/detox" +license=('Modified-BSD') +makedepends=('flex') +backup=('etc/detox/detoxrc') +source=($pkgname-$pkgver.tar.gz::https://github.com/dharple/$pkgname/archive/v$pkgver.tar.gz) +sha512sums=('f91ae893cf50a3f9d731a26218625f572c783406056c0accbd8253d6dc5de9013ffbe1497120af7be4b7054d65ebbe96b73df64a5d1cc3aaec40e6542e5c6208') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + autoreconf --install +} + +build() { + cd "${srcdir}"/$pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc/detox + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + + # license + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/deutex/PKGBUILD b/deutex/PKGBUILD new file mode 100644 index 0000000..268f874 --- /dev/null +++ b/deutex/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=deutex +pkgver=5.2.2 +pkgrel=1 +pkgdesc='Composer and decomposer for WAD files' +arch=('i686' 'x86_64') +url='https://github.com/Doom-Utils/deutex' +license=('GPL-2') +depends=('libpng') +makedepends=('asciidoc') +source=(https://github.com/Doom-Utils/deutex/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.zst + update-copyright-year.patch) +sha512sums=('5f3c3d3ecad3a7949270a10c3c7e3a8be938389d4846dcac171526a9fd0485e056889323d303f61630e8735e5735edc91df7ad4efaba3d0b2b66a9d719017ebc' + 'b8a636af9e9628f27298c189491f891ad7ffb8dd8c14b68fb0953e0fb1edc96539a2d489d15c696b8f5b5bf953980e4dab68e9272c56bdf3e414bcbc0fcba16f') + +prepare() { + cd "$pkgname-$pkgver" + + for patch in ../*.patch; do + if [ ! -f "$patch" ]; then + break; + else + patch -p1 -i "$patch" + fi + done +} + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/deutex/update-copyright-year.patch b/deutex/update-copyright-year.patch new file mode 100644 index 0000000..1687874 --- /dev/null +++ b/deutex/update-copyright-year.patch @@ -0,0 +1,13 @@ +diff --git a/man/deutex.txt.in b/man/deutex.txt.in +index 5620654..21150da 100644 +--- a/man/deutex.txt.in ++++ b/man/deutex.txt.in +@@ -421,7 +421,7 @@ variable is overridden by *-main*, *-doom* and friends. + COPYRIGHT + --------- + @PACKAGE_NAME@ is copyright © 1994-1995 Olivier Montanuy, copyright © +-1999-2005 André Majorel, copyright © 2006-2019 contributors to ++1999-2005 André Majorel, copyright © 2006-2021 contributors to + @PACKAGE_NAME@. + + Most of this program is under the GNU General Public License version diff --git a/dev86/PKGBUILD b/dev86/PKGBUILD new file mode 100644 index 0000000..8f3f1b3 --- /dev/null +++ b/dev86/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=dev86 +pkgver=0.16.21 +pkgrel=2 +pkgdesc='Simple C compiler to generate 8086 code' +arch=('i686' 'x86_64') +url='https://github.com/lkundrak/dev86' +license=('GPL-2') +options=('!strip' '!makeflags' 'staticlibs') +source=("https://github.com/lkundrak/$pkgname/archive/refs/tags/v$pkgver.tar.gz" + 'mandir.patch') +sha512sums=('e51d94cecc298f860c1dcbc225d5c77a18769eb7a51f888853ca3bdb3cc6596c07d67cd9b403f7d52155716eb1708396461dc596cd02728d762d0ed5e87d054f' + 'bb74e0c9c44eeaa302f0a380131c98cda6ea893555479509567a5fdfe7dd00266102e9f7edbc1e392dedd53f41b4c6e7712a6a13d55247aaf8361a510452c9fc') + +prepare() { + cd $pkgname-$pkgver + patch -p1 -i $srcdir/mandir.patch +} + +build() { + cd $pkgname-$pkgver + make PREFIX=/usr DIST=$pkgdir +} + +package() { + cd $pkgname-$pkgver + mkdir -p $pkgdir/usr/share/man/man1 + make install-all DIST=$pkgdir + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/dev86/mandir.patch b/dev86/mandir.patch new file mode 100644 index 0000000..980bc31 --- /dev/null +++ b/dev86/mandir.patch @@ -0,0 +1,34 @@ +diff -wbBur dev86-0.16.19.org/dis88/Makefile dev86-0.16.19/dis88/Makefile +--- dev86-0.16.19.org/dis88/Makefile 1998-07-31 17:01:40.000000000 +0400 ++++ dev86-0.16.19/dis88/Makefile 2012-10-24 14:46:02.684587469 +0400 +@@ -38,7 +38,7 @@ + + install: dis88 + install -m 755 -s dis88 $(DIST)$(PREFIX)/bin/dis86 +- install -m 644 dis88.1 $(DIST)$(PREFIX)/man/man1/dis86.1 ++ install -m 644 dis88.1 $(DIST)$(PREFIX)/share/man/man1/dis86.1 + + $(OBJ): dis.h a.out.h + +diff -wbBur dev86-0.16.19.org/Makefile dev86-0.16.19/Makefile +--- dev86-0.16.19.org/Makefile 2012-08-14 00:10:08.000000000 +0400 ++++ dev86-0.16.19/Makefile 2012-10-24 14:45:50.917920191 +0400 +@@ -17,7 +17,7 @@ + LIBDIR= $(PREFIX)/lib/bcc + INCLDIR= $(PREFIX)/lib/bcc + ASLDDIR= $(BINDIR) +-MANDIR= $(PREFIX)/man ++MANDIR= $(PREFIX)/share/man + CFLAGS= -O + IFDEFNAME= ifdef + +diff -wbBur dev86-0.16.19.org/man/Makefile dev86-0.16.19/man/Makefile +--- dev86-0.16.19.org/man/Makefile 1998-07-31 17:03:30.000000000 +0400 ++++ dev86-0.16.19/man/Makefile 2012-10-24 14:45:55.494587123 +0400 +@@ -1,5 +1,5 @@ + +-MANDIR=/usr/man ++MANDIR=/usr/share/man + MAN1PG=as86.1 bcc.1 elks.1 elksemu.1 ld86.1 + MAN1DIR=$(MANDIR)/man1 + diff --git a/devil/PKGBUILD b/devil/PKGBUILD new file mode 100644 index 0000000..4926709 --- /dev/null +++ b/devil/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=devil +pkgver=1.8.0 +pkgrel=2 +pkgdesc="Library for reading several different image formats" +arch=('i686' 'x86_64') +url="http://openil.sourceforge.net/" +depends=('libpng' 'jasper' 'lcms2' 'libjpeg-turbo') +makedepends=('cmake') +options=('!docs' '!emptydirs') +license=('LGPL-2.1') +source=(https://downloads.sourceforge.net/openil/DevIL-$pkgver.tar.gz + soversion.patch) +sha512sums=('103fa51f4094af0fe988bf9520e1b9178900f980b72226e64ede60b6b0938a646c670a37372214edb557e492947cd5af5012a3ac906734a5ea83e072f81db583' + '0ecc93f0236d113c39d8e2acc19eead719a3ba474bf504ba3806830cbfb9c3d2dbe375a9a41bc866fa5e1e738f8bbeff9734b52f90a29b796a4e09baae3846e8') + +prepare() { + cd "${srcdir}/DevIL" + + # Add solib version number to CMakeLists.txt + # https://github.com/DentonW/DevIL/pull/50 + patch -Np1 -i "${srcdir}/soversion.patch" +} + +build() { + cd "${srcdir}/DevIL/DevIL" + + rm -rf build && mkdir build + cd build + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib + make +} + +package() { + cd "${srcdir}/DevIL/DevIL/build" + + make DESTDIR="$pkgdir" install + install -Dm644 ../COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/devil/soversion.patch b/devil/soversion.patch new file mode 100644 index 0000000..e80a305 --- /dev/null +++ b/devil/soversion.patch @@ -0,0 +1,47 @@ +From 1763633e5f7a8b86c293bd9a2f030961e77b0067 Mon Sep 17 00:00:00 2001 +From: Juergen Buchmueller +Date: Mon, 2 Jan 2017 16:48:55 +0100 +Subject: [PATCH] Add solib version number to CMakeLists.txt + +--- + DevIL/src-IL/CMakeLists.txt | 1 + + DevIL/src-ILU/CMakeLists.txt | 1 + + DevIL/src-ILUT/CMakeLists.txt | 1 + + 3 files changed, 3 insertions(+) + +diff --git a/DevIL/src-IL/CMakeLists.txt b/DevIL/src-IL/CMakeLists.txt +index 02e4f033..095f43e7 100644 +--- a/DevIL/src-IL/CMakeLists.txt ++++ b/DevIL/src-IL/CMakeLists.txt +@@ -58,6 +58,7 @@ source_group("Text Files" FILES ${DevIL_TXT} ) + + if(BUILD_SHARED_LIBS) + add_library(IL SHARED ${DevIL_SRCS} ${DevIL_INC} ${DevIL_RSRC} ${DevIL_TXT}) ++ set_target_properties(IL PROPERTIES SOVERSION 1) + else(BUILD_SHARED_LIBS) + add_library(IL ${DevIL_SRCS} ${DevIL_INC} ${DevIL_RSRC} ${DevIL_TXT}) + endif(BUILD_SHARED_LIBS) +diff --git a/DevIL/src-ILU/CMakeLists.txt b/DevIL/src-ILU/CMakeLists.txt +index 17a3afe7..44b9531b 100644 +--- a/DevIL/src-ILU/CMakeLists.txt ++++ b/DevIL/src-ILU/CMakeLists.txt +@@ -44,6 +44,7 @@ source_group("Resource Files" FILES ${ILU_RSRC} ) + + # Remove SHARED to create a static library + add_library(ILU SHARED ${ILU_SRCS} ${ILU_INC} ${ILU_RSRC}) ++set_target_properties(ILU PROPERTIES SOVERSION 1) + + + ## ILU requires IL +diff --git a/DevIL/src-ILUT/CMakeLists.txt b/DevIL/src-ILUT/CMakeLists.txt +index 21470cbc..296f9955 100644 +--- a/DevIL/src-ILUT/CMakeLists.txt ++++ b/DevIL/src-ILUT/CMakeLists.txt +@@ -44,6 +44,7 @@ source_group("Resource Files" FILES ${ILUT_RSRC} ) + + # Remove SHARED to create a static library + add_library(ILUT SHARED ${ILUT_SRCS} ${ILUT_INC} ${ILUT_RSRC}) ++set_target_properties(ILUT PROPERTIES SOVERSION 1) + + ## add link sub library info + target_link_libraries(ILUT diff --git a/dhcp/0002-iproute2.patch b/dhcp/0002-iproute2.patch new file mode 100644 index 0000000..7d728e9 --- /dev/null +++ b/dhcp/0002-iproute2.patch @@ -0,0 +1,13 @@ +diff --git a/client/scripts/linux b/client/scripts/linux +index 5fb16121..c4cef632 100755 +--- a/client/scripts/linux ++++ b/client/scripts/linux +@@ -362,7 +362,7 @@ case "$reason" in + interface_up_wait_time=5 + for i in $(seq 0 ${interface_up_wait_time}) + do +- ifconfig ${interface} | grep RUNNING >/dev/null 2>&1 ++ ${ip} link show dev ${interface} | grep -q LOWER_UP 2>&1 + if [ $? -eq 0 ]; then + break; + fi diff --git a/dhcp/PKGBUILD b/dhcp/PKGBUILD new file mode 100644 index 0000000..bbce773 --- /dev/null +++ b/dhcp/PKGBUILD @@ -0,0 +1,125 @@ +# Maintainer: Jesus E. + +pkgbase=dhcp +pkgname=('dhcp' 'dhclient') + +# Separate patch levels with a period to maintain proper versioning. +pkgver=4.4.1 +_debver=$pkgver +_debrel=2.3 +pkgrel=2 +arch=('i686' 'x86_64') +license=('ISC' 'MPL-2.0') +url='https://www.isc.org/dhcp/' +makedepends=('bash' 'iproute2' 'openldap' 'quilt') +source=("ftp://ftp.isc.org/isc/${pkgbase}/${pkgver}/${pkgbase}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/i/isc-dhcp/isc-dhcp_${_debver}-${_debrel}.debian.tar.xz" + "0002-iproute2.patch" + "dhcpd.run" + "dhcpd6.run" + "dhclient.run" + "dhclient6.run" + "dhcpd.initd" + "dhcpd6.initd" + "dhclient.initd" + "dhclient6.initd") +sha512sums=('684ae349f224918c9f8cec7bd6c55cd0b83ad2b5827375b2876ca088eb05b7ff1364e50f6dc24f2485c610d9be94d4ba3020f60a0fa0ef63962349d191b887e7' + '4a613564196815bf9df8b95b3524e3dc90a8479bff799b56f681e39b5c8272c564d4758f46f1ba199fe059f92196b4b4e6fa540d593c28beb4166b356b7a4d27' + '5103474b3b25d69bbb1433884ffd0bc57da427df73b1c49385e4b2e37b264826fa6b19861fbd2f80a869edabd5189f2a4c2a02f4ff4438fa5c55152fec697fcf' + '6c4c69955bfc3942cc3091e71da80dd982401548e06d6a83f364f2f3e654538861509765cfdd205a8e0a087841d0f76e40d776b738b70f378d749bb65e681833' + 'c877eccebc44edd435c4238b04a378142d42ebd3cbafc7bb8802cfb7522fdb7eff631460a6c6649eb68dca69dfe17773e08ef17b5a0dffd1f8e6c6a8b7fadf89' + 'e48b5a5162587392ebe4ef2abcc8b9c8fb78f0c59a6ebcc6f5bbb11542cb1b15f5180e8ff82b0b0b3a12190581a652710f4b521f67526685ec5e7349694cce7c' + 'a842a2b871cbe955d4a07f93ab31611af8393be6dd9f84a4acc4d87b2ec3f958b8e1deb8382e179321289c83181430b18a873cbe2f6f8a95386a85fe83d56be7' + '5371e883207797aedc91b5fcab79c41ee0b13096a20359c8086fbeefd5cfa164267b65442f694b7416263b3ac51794208ec026ddba4064b94cad1a8400e63323' + '9ca80a230ef675b0b48ba242687c2474ac54f7468d39b036cfbc7bea03a799a93436602e5c48f58ff6a72b3039076ce4e22954d1c0471ba2c219bd2827f24c3c' + '988d5d7855b8cc9782ec8b4e56fbc210df35cf6fdbe5099a8191fc96bc483b952a8b4030b256217a3927923ac3b437e7d3b570d1152266c17c1446b61cc2aca8' + '37b47a81f90e9befe429fd2df31ed60e78aa2ed8820f94bfd0c23ac67b7580a1be573293387fe99f698c30453969e158f1057da3131c4cc1e28ff8ca17d1771e') + +prepare() { + cd "${srcdir}/${pkgbase}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + # No ifconfig, use ip from iproute2 + patch -Np1 -i ../0002-iproute2.patch +} + +build() { + cd "${srcdir}/${pkgbase}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-binary-leases \ + --enable-paranoia \ + --with-ldap \ + --with-ldapcrypto \ + --with-srv-lease-file=/var/lib/dhcp/dhcpd.leases \ + --with-srv6-lease-file=/var/lib/dhcp/dhcpd6.leases \ + --with-cli-lease-file=/var/lib/dhclient/dhclient.leases \ + --with-cli6-lease-file=/var/lib/dhclient/dhclient6.leases + + make -j1 +} + +package_dhcp(){ + pkgdesc="A DHCP server, client, and relay agent" + depends=('glibc' 'libldap') + optdepends=('logger: message logging support') + backup=('etc/dhcpd.conf' 'etc/dhcpd6.conf') + install=dhcp.install + + cd "${srcdir}/${pkgbase}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -Dm755 "$srcdir/dhcpd.initd" "$pkgdir/etc/init.d/dhcpd" + install -Dm755 "$srcdir/dhcpd6.initd" "$pkgdir/etc/init.d/dhcpd6" + install -Dm755 "$srcdir/dhcpd.run" "$pkgdir/etc/sv/dhcpd/run" + install -Dm755 "$srcdir/dhcpd6.run" "$pkgdir/etc/sv/dhcpd6/run" + + # move and install config files in place + mv "${pkgdir}/etc/dhcpd.conf.example" "${pkgdir}/etc/dhcpd.conf" + install -D -m644 doc/examples/dhcpd-dhcpv6.conf "${pkgdir}/etc/dhcpd6.conf" + + # Remove dhclient + make -C client DESTDIR="${pkgdir}" uninstall + + # Install license + install -m644 -D LICENSE "${pkgdir}/usr/share/licenses/dhcp/LICENSE" +} + +package_dhclient(){ + pkgdesc="A standalone DHCP client from the dhcp package" + depends=('glibc' 'bash' 'iproute2') + provides=('dhcp-client') + backup=('etc/dhclient.conf' 'etc/dhclient6.conf') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make -C client DESTDIR="${pkgdir}" install + + install -m755 -d "${pkgdir}/usr/share/dhclient" + + install -Dm755 "$srcdir/dhclient.initd" "$pkgdir/etc/init.d/dhclient" + install -Dm755 "$srcdir/dhclient6.initd" "$pkgdir/etc/init.d/dhclient6" + install -Dm755 "$srcdir/dhclient.run" "$pkgdir/etc/sv/dhclient/run" + install -Dm755 "$srcdir/dhclient6.run" "$pkgdir/etc/sv/dhclient6/run" + + install -m755 -d "${pkgdir}/usr/share/dhclient" + mv "${pkgdir}/etc/dhclient.conf.example" "${pkgdir}/usr/share/dhclient/" + + install -d "${pkgdir}/var/lib/dhclient" + + # Install dhclient script + install -m755 client/scripts/linux "${pkgdir}/usr/sbin/dhclient-script" + + # Install license + install -m644 -D LICENSE "${pkgdir}/usr/share/licenses/dhclient/LICENSE" +} diff --git a/dhcp/dhclient.initd b/dhcp/dhclient.initd new file mode 100644 index 0000000..c49335a --- /dev/null +++ b/dhcp/dhclient.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="IPv4 DHCP client service" + +command="/usr/sbin/dhclient" +command_args="-4 -q -cf /etc/dhclient.conf -pf /var/run/dhclient.pid" + +depend() { + need net + use logger dns ldap slapd +} diff --git a/dhcp/dhclient.run b/dhcp/dhclient.run new file mode 100644 index 0000000..218d040 --- /dev/null +++ b/dhcp/dhclient.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/dhclient -4 -q -cf /etc/dhclient.conf -pf /var/run/dhclient.pid diff --git a/dhcp/dhclient6.initd b/dhcp/dhclient6.initd new file mode 100644 index 0000000..51ff317 --- /dev/null +++ b/dhcp/dhclient6.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="IPv6 DHCP client service" + +command="/usr/sbin/dhclient" +command_args="-6 -q -cf /etc/dhclient6.conf -pf /var/run/dhclient6.pid" + +depend() { + need net + use logger dns ldap slapd +} diff --git a/dhcp/dhclient6.run b/dhcp/dhclient6.run new file mode 100644 index 0000000..ea19d97 --- /dev/null +++ b/dhcp/dhclient6.run @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/sbin/dhclient -6 -q -cf /etc/dhclient6.conf -pf /var/run/dhclient6.pid diff --git a/dhcp/dhcp.install b/dhcp/dhcp.install new file mode 100644 index 0000000..2ab66cf --- /dev/null +++ b/dhcp/dhcp.install @@ -0,0 +1,32 @@ +post_install() { + if ! getent passwd dhcp &>/dev/null; then + useradd -r -G adm -d /dev/null -s /bin/nologin dhcp >/dev/null + fi + + [[ -f var/lib/dhcp/dhcpd.leases ]] || : >var/lib/dhcp/dhcpd.leases + [[ -f var/lib/dhcp/dhcpd6.leases ]] || : >var/lib/dhcp/dhcpd6.leases + + if ! groups dhcp | grep adm &>/dev/null; then + gpasswd -a dhcp adm >/dev/null + fi + dhcp_shell=$(getent passwd dhcp | cut -d: -f7) + if [ "$dhcp_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin dhcp &>/dev/null + fi +} + +post_upgrade() { + if (( $(vercmp $2 4.2.4.2) < 0 )); then + echo ">>> Lease directory moved from /var/state/dhcp" + echo " to /var/lib/dhcp. Move your old lease files" + echo " if you want to keep using them." + fi + + post_install +} + +post_remove() { + if getent passwd dhcp &>/dev/null; then + userdel dhcp >/dev/null + fi +} diff --git a/dhcp/dhcpd.initd b/dhcp/dhcpd.initd new file mode 100644 index 0000000..e3b4fa7 --- /dev/null +++ b/dhcp/dhcpd.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="IPv4 DHCP server service" + +command="/usr/sbin/dhcpd" +command_args="-4 -q -user dhcp -cf /etc/dhcpd.conf -pf /var/run/dhcpd.pid" + +depend() { + need net + use logger dns ldap slapd +} diff --git a/dhcp/dhcpd.run b/dhcp/dhcpd.run new file mode 100644 index 0000000..c8ab4ad --- /dev/null +++ b/dhcp/dhcpd.run @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/sbin/dhcpd -4 -q -user dhcp -cf /etc/dhcpd.conf -pf /var/run/dhcpd.pid diff --git a/dhcp/dhcpd6.initd b/dhcp/dhcpd6.initd new file mode 100644 index 0000000..3d93979 --- /dev/null +++ b/dhcp/dhcpd6.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="IPv6 DHCP server service" + +command="/usr/sbin/dhcpd" +command_args="-6 -q -user dhcp -cf /etc/dhcpd6.conf -pf /var/run/dhcpd6.pid" + +depend() { + need net + use logger dns ldap slapd +} diff --git a/dhcp/dhcpd6.run b/dhcp/dhcpd6.run new file mode 100644 index 0000000..383b6a4 --- /dev/null +++ b/dhcp/dhcpd6.run @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/sbin/dhcpd -6 -q -user dhcp -cf /etc/dhcpd6.conf -pf /var/run/dhcpd6.pid diff --git a/dhcpcd-ui/PKGBUILD b/dhcpcd-ui/PKGBUILD new file mode 100644 index 0000000..bc554a6 --- /dev/null +++ b/dhcpcd-ui/PKGBUILD @@ -0,0 +1,121 @@ +# Maintainer: Jesus E. + +pkgname=dhcpcd-ui +pkgver=0.7.8 +pkgrel=4 +pkgdesc="dhcpcd Monitor in GTK+" +url='https://roy.marples.name/projects/dhcpcd-ui' +arch=('i686' 'x86_64') +license=('Simplified-BSD') +depends=('gtk2' 'dhcpcd' 'hicolor-icon-theme') +makedepends=('graphicsmagick') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.xz"{,.sig} + "fix-icons.patch" + "fix-messages.patch" + "dhcpcd-gtk.desktop") +sha512sums=('5f0d2c32c32fc141feca0ab43a531d9b4f45e071a8a1e3ee1923d6394a3e5d6322e6f7e607b91154af4cfee93d649164c7ed3b805731dfc242c3ac367ec156c4' + 'SKIP' + 'a612c65d6620f319f0e901dde7345a2a73a622b979d70a80c234fcab83b1d216786a5f6a22b5efbc11df71e3525a650e15c12abf36f3badb455ad0aa67246888' + 'c1c4ec6df1438fd9b9cdb99a7183269f3d188706b94fa1d798678f653f417e661aaf9c69d41c936b6e4b6e8ddb4d8ed18da2f010b044ecc3a651edf71107f997' + 'aa7dc78af5374356b0f0a465c17ce2679a9bd24b93558ca915872d3a7dac65434d5151f6a7f729495c9ce4223998b3a6a84391610103b2b0610d1062f76f0bf2') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + # additional fixes + patch -Np1 -i ../fix-icons.patch + patch -Np1 -i ../fix-messages.patch + + # fixing icons, 16x16 + cd $srcdir/$pkgname-$pkgver/icons/16x16/actions + for file in ./*.png; do + gm convert "$file" -resize 16x16 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/16x16/devices + for file in ./*.png; do + gm convert "$file" -resize 16x16 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/16x16/status + for file in ./*.png; do + gm convert "$file" -resize 16x16 "$file" + done + + # fixing icons, 22x22 + cd $srcdir/$pkgname-$pkgver/icons/22x22/actions + for file in ./*.png; do + gm convert "$file" -resize 22x22 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/22x22/devices + for file in ./*.png; do + gm convert "$file" -resize 22x22 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/22x22/status + for file in ./*.png; do + gm convert "$file" -resize 22x22 "$file" + done + + # fixing icons, 24x24 + cd $srcdir/$pkgname-$pkgver/icons/24x24/actions + for file in ./*.png; do + gm convert "$file" -resize 24x24 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/24x24/devices + for file in ./*.png; do + gm convert "$file" -resize 24x24 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/24x24/status + for file in ./*.png; do + gm convert "$file" -resize 24x24 "$file" + done + + # fixing icons, 32x32 + cd $srcdir/$pkgname-$pkgver/icons/32x32/actions + for file in ./*.png; do + gm convert "$file" -resize 32x32 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/32x32/devices + for file in ./*.png; do + gm convert "$file" -resize 32x32 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/32x32/status + for file in ./*.png; do + gm convert "$file" -resize 32x32 "$file" + done + + # fixing icons, 48x48 + cd $srcdir/$pkgname-$pkgver/icons/48x48/actions + for file in ./*.png; do + gm convert "$file" -resize 48x48 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/48x48/devices + for file in ./*.png; do + gm convert "$file" -resize 48x48 "$file" + done + cd $srcdir/$pkgname-$pkgver/icons/48x48/status + for file in ./*.png; do + gm convert "$file" -resize 48x48 "$file" + done +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --without-qt \ + --disable-notification \ + --with-icons + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + + # additional files and license + install -Dm644 "$srcdir/dhcpcd-gtk.desktop" -t "$pkgdir/usr/share/applications/" + install -d "$pkgdir/usr/share/licenses/$pkgname" + sed -n '1,/^$/p' src/dhcpcd-gtk/main.c \ + >"$pkgdir/usr/share/licenses/$pkgname/license.txt" +} diff --git a/dhcpcd-ui/dhcpcd-gtk.desktop b/dhcpcd-ui/dhcpcd-gtk.desktop new file mode 100644 index 0000000..fb1a09c --- /dev/null +++ b/dhcpcd-ui/dhcpcd-gtk.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Network Monitor +Name[de]=Netzwerkmonitor +Comment=dhcpcd Monitor in GTK+ +Exec=dhcpcd-gtk +Icon=network-receive +Type=Application +Terminal=false +StartupNotify=false +Categories=GTK;Utility;System;Network;Monitor;TrayIcon; diff --git a/dhcpcd-ui/fix-icons.patch b/dhcpcd-ui/fix-icons.patch new file mode 100644 index 0000000..8ed7f0d --- /dev/null +++ b/dhcpcd-ui/fix-icons.patch @@ -0,0 +1,22 @@ +--- a/configure 2020-12-28 17:12:14.000000000 +0100 ++++ b/configure 2021-06-28 23:32:48.403099409 +0200 +@@ -73,7 +73,7 @@ + : ${STATEDIR:=/var} + : ${MANDIR:=${PREFIX:-/usr}/share/man} + +-: ${ICONDIR:=$PREFIX/share/dhcpcd/icons} ++: ${ICONDIR:=$PREFIX/share/icons} + + eval SYSCONFDIR="$SYSCONFDIR" + eval LIBDIR="$LIBDIR" +--- a/mk/icon.mk 2020-12-28 17:12:14.000000000 +0100 ++++ b/mk/icon.mk 2021-06-28 23:47:15.804449685 +0200 +@@ -1,7 +1,7 @@ + include ${MKDIR}/sys.mk + + SIZEDIR?= ${SIZE}x${SIZE} +-ICONDIR?= ${PREFIX}/share/dhcpcd/icons ++ICONDIR?= ${PREFIX}/share/icons + IDIR= ${ICONDIR}/hicolor/${SIZEDIR}/${CATEGORY} + + CAIROSVG?= cairosvg diff --git a/dhcpcd-ui/fix-messages.patch b/dhcpcd-ui/fix-messages.patch new file mode 100644 index 0000000..c291ed1 --- /dev/null +++ b/dhcpcd-ui/fix-messages.patch @@ -0,0 +1,22 @@ +--- a/src/dhcpcd-gtk/wpa.c 2020-12-28 17:12:14.000000000 +0100 ++++ b/src/dhcpcd-gtk/wpa.c 2022-03-28 21:58:59.983305912 +0200 +@@ -94,7 +94,7 @@ + errt = _("Failed to start association."); + break; + case DHCPCD_WPA_ERR_WRITE: +- errt =_("Failed to save wpa_supplicant configuration.\n\nYou should add update_config=1 to /etc/wpa_supplicant.conf."); ++ errt =_("Failed to save wpa_supplicant configuration.\n\nYou should add update_config=1 to /etc/wpa_supplicant/wpa_supplicant.conf."); + break; + default: + errt = strerror(errno); +--- a/src/dhcpcd-qt/dhcpcd-wi.cpp 2020-12-28 17:12:14.000000000 +0100 ++++ b/src/dhcpcd-qt/dhcpcd-wi.cpp 2022-03-28 21:59:50.615649517 +0200 +@@ -344,7 +344,7 @@ + errt = tr("Failed to start association."); + break; + case DHCPCD_WPA_ERR_WRITE: +- errt = tr("Failed to save wpa_supplicant configuration.\n\nYou should add update_config=1 to /etc/wpa_supplicant.conf."); ++ errt = tr("Failed to save wpa_supplicant configuration.\n\nYou should add update_config=1 to /etc/wpa_supplicant/wpa_supplicant.conf."); + break; + default: + errt = strerror(errno); diff --git a/dia/PKGBUILD b/dia/PKGBUILD new file mode 100644 index 0000000..775d737 --- /dev/null +++ b/dia/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=dia +pkgver=0.97.3 +pkgrel=1 +pkgdesc="A free and libre GTK+ based diagram creation program" +arch=('i686' 'x86_64') +license=('GPL-2') +url='http://live.gnome.org/Dia' +depends=('libxslt' 'gtk2') +makedepends=('intltool' 'docbook-xsl' 'gettext-tiny') +options=('docs' '!emptydirs') +source=("https://ftp.gnome.org/pub/gnome/sources/${pkgname}/0.97/${pkgname}-${pkgver}.tar.xz" + "dia-0.9.3-cve-2019-19451.patch") +sha512sums=('34298980be930b87cb4a636344e4cb2a7e43eedc00b0969a5e446cee9b74b616fdc8c798efcb9a5832b98741f2e20632a44037b2bcb436f59591d531ef441efa' + '13812395b220789b404c68f688aeb7ec82336d84751a93c5a9a73b32d02ba4b89b64420ce264e3e1b7efd4ecedadfbc2f78997b12cf2320dfa56ebfb20fa5edc') + +prepare() { + cd "${pkgname}-${pkgver}" + sed -i 's#freetype-config --cflags#pkg-config --cflags freetype2#' configure + sed -i 's#freetype-config --libs#pkg-config --libs freetype2#' configure + patch -Np1 -i "${srcdir}/dia-0.9.3-cve-2019-19451.patch" +} + +build() { + cd "${pkgname}-${pkgver}" + + ./configure --prefix=/usr \ + --with-cairo \ + --disable-python \ + --disable-gnome \ + --with-hardbooks + sed -i 's#SUBDIRS = lib objects plug-ins shapes app bindings samples po sheets data doc tests installer#SUBDIRS = lib objects plug-ins shapes app bindings samples po sheets data tests installer#' Makefile + make + cd doc + make html +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + cd doc + make DESTDIR="${pkgdir}" install-html + ln -sf ../doc/$pkgname/html "${pkgdir}/usr/share/$pkgname/help" +} diff --git a/dia/dia-0.9.3-cve-2019-19451.patch b/dia/dia-0.9.3-cve-2019-19451.patch new file mode 100644 index 0000000..2988e70 --- /dev/null +++ b/dia/dia-0.9.3-cve-2019-19451.patch @@ -0,0 +1,26 @@ +From baa2df853f9fb770eedcf3d94c7f5becebc90bb9 Mon Sep 17 00:00:00 2001 +From: Nils Steinger +Date: Thu, 7 Nov 2019 15:12:18 +0100 +Subject: [PATCH] Fix endless loop on filenames with invalid encoding + +See also: + - https://bugzilla.redhat.com/show_bug.cgi?id=1778767 + - https://gitlab.gnome.org/GNOME/dia/-/issues/428 +--- + app/app_procs.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/app/app_procs.c b/app/app_procs.c +index 434a092f6..53f8b8c38 100644 +--- a/app/app_procs.c ++++ b/app/app_procs.c +@@ -675,6 +675,7 @@ app_init (int argc, char **argv) + + if (!filename) { + g_print (_("Filename conversion failed: %s\n"), filenames[i]); ++ ++i; + continue; + } + +-- +GitLab diff --git a/diffstat/PKGBUILD b/diffstat/PKGBUILD new file mode 100644 index 0000000..2f5ffd4 --- /dev/null +++ b/diffstat/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=diffstat +pkgver=1.64 +pkgrel=2 +pkgdesc="Display a histogram of diff changes" +arch=('i686' 'x86_64') +url='https://invisible-island.net/diffstat' +depends=('glibc') +license=('Python-CWI') +source=("https://invisible-mirror.net/archives/$pkgname/$pkgname-$pkgver.tgz") +sha512sums=('d647477beb49b0999c5de41d084da827528571c4848f40c69c2d64d060fc89848d15d03d59b1a31d79f02180f81d92cdf6e19d0172482bc569cf2a87476f12cf') + +build () { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/dillo/PKGBUILD b/dillo/PKGBUILD new file mode 100644 index 0000000..22e96fd --- /dev/null +++ b/dillo/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=dillo +pkgver=3.0.5 +_debver=$pkgver +_debrel=7 +pkgrel=3 +pkgdesc="A small, fast, free and libre graphical web browser" +arch=('i686' 'x86_64') +url='https://dillo-browser.github.io/' +license=('GPL-3') +depends=('fltk' 'libjpeg-turbo' 'libpng' 'libressl' 'perl' 'zlib') +makedepends=('quilt') +backup=(etc/dillo/{dillorc,domainrc,dpidrc,keysrc}) +source=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/d/${pkgname}/${pkgname}_${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/d/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz" + "libre.patch" + "$pkgname.desktop" + "$pkgname.png") +sha512sums=('d0e86f57e50da762debf592b6deb94de5ee58f84e0cae1159890262540a463aea8143d2b99c634021c1f273f91c2fe0918f30d72c3eaf91fdb541e741469b155' + '394ea20c345cce7492bf16270805af21d4a0a3f9e626aa2550f576dea0043ea41c2c51d361ef2d0aea8b36131250030130a750b5279fa08f95086ff03a5e06fc' + '758dc86543ae1ac0d1102e23c4a37846ffa1e663ff64198e458a28535665ab93c81c3e4a3d5faec7840f62aeae46d797711aae7b6d3e19fb8ece43178af60d9e' + 'a8632b1bb06d46781cc8dbbe3521a9da53a540eb841f523b36313b72ebe4ad24386d1ddd348bcb46556d3b569228e418258fc1493ebf1c0f89905d2df6cea816' + 'd10f20ac3402be8a2c25da63d305eb66d553e47403128706aa50ccc122b2d519b13936b8f15990cd2bad0ca36e1b6c5e576e6b794f0ad36c2bd8ee93d9780b1e') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # additional fixes as package should not contain non-free parts + patch -Np1 -i ${srcdir}/libre.patch + + autoreconf -vfi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + CFLAGS+=' -fcommon' + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-cookies \ + --enable-ssl + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop" + install -Dm644 "$srcdir/$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png" + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/dillo/dillo.desktop b/dillo/dillo.desktop new file mode 100644 index 0000000..84d4e04 --- /dev/null +++ b/dillo/dillo.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Dillo +GenericName=Web Browser +Comment=Very small and fast GUI web browser +Exec=dillo %U +Icon=dillo +Terminal=false +Type=Application +Categories=Network;WebBrowser; +MimeType=text/html;application/xhtml+xml; diff --git a/dillo/dillo.png b/dillo/dillo.png new file mode 100644 index 0000000000000000000000000000000000000000..82f6cad824636bf45cf47f143f10d929eb79fed9 GIT binary patch literal 28887 zcmV)vK$X9VP)^_zz7Eb0W_KbMmPWnpwR>{ z!T~@4jV6E*4gdmZGy#lo01!Z<31EZ+fB+gz03#d#1kh*#7~udQfJPI*2nPTG#4=nx z#>mJh0HkDrSP6*LfLIkuivTf5jt_|0p~`;(@n<0Z0K~6>_$d(I2I5;ld=H54|NsC0 zw*NnV@_zXAUW)bmXNKQDzA^~>c*`L0>j?wLkJk+EA3p?{e-Wtk zED#?A;*-DxadS9?8$bXt4%O*kV1zINDLEka1mX}W1yyGeB|V0J;wlU;`IH!b3CS~j z{PY8u$AM{_lbL~y1%z1`zW-xj`1|)i12ZEV!(VnL1}V;849`CPXOI@+V%QL@&cM&k z&hYr-7Y1&2Him^KA2Uop4lDqEe`R3!^_hYD-D?KHw>KI7JiN&8;`XJZKzsK9@m5g6 z0EXkgp%{(;0W{7zAPidALf4yioj~%2(TcxP*h|P z=Vm47hHroVGAuj)lp$-|1BTx}fu#!@Fu{EP&A{;J8iUg3YYgA79%Oj_;NAqF(gnb9 zy*L!Y6(E2HeF6YRJTR6S^2Fq1sVPN3lW8marW)SD$1V%gugE%m^ zvoNtTFmW(4{Qu9$V6F6*K~&&B!^3xs3?F}UGDvd%0Tvp68Q9sF8F+zxA0sJdhS%>I z82V4MGsNofF<43SF?{{`hk*}RWk~S?&0%E3>K;&dJ^%cjVcm_l4813wFueTwmw_25 z_61l{Fg$zA!1LiEgYex$3=c1!n+a4teXu74fB+h_2>=-JpjLX3yoyS_jGYC8u#Ogk zv^FQh2QFag`&5MC^?eBjDM4OfP6y_4R$ycS>v%QEpA0H8Um3oA=VUnhh@U}I^bf=5 z-+vjN|Kehh=K9C*1(;bCg@6fzlYv2og^A(Xb7qF^Pgohg{s30rjG!tUi2pG%=!$VM z6q<-JNb=$?6@LHw&+z)o4~Fb5w;67K`o-`RX!xH`e;B@e1%~Ixw+w7=4>Bk`KEQD6 z?8P2vLbx{=!xloOAAXxO)`<@xG}W#<1zQOsWpGj>+|v zPQ|u4G0W8RN0f3omU7AOg6{(}!7_AIZ1eV$C6Qk5G(u7pvDLOhf(-q^DV9pPZ7ulp z^2}nz<=Gm|lp(3Xv3v#}gOHnAfr~>$w_5zSuOCL-KYue{ zMH0FUZ6T0*zG5_9a`$NAYf?LF@!R{N?)C9rp4bFIPc(ns7tMD9Fkdz+3B*wp|54*u z`H|zGEzy1Iy}m%pE}(8$Xq0Ry z(tsfBo1B?vM7-}Rd=Ldf_3#5YhLiZxXL+36*-@$A6E&NO#y_lz{bGJ?v6p5fh;-;&sjy@^)6+8^g z3^Oo1zlZ-kGbc5G;MapNe7(7A@EnzCG#xIhhKgI{s#GAabnlxG;lzljkrDpW`Ik-j zSgMR~&d?HyfltaYx&mNkRr)1-Y~>c$N@Mna02$B2+4}qm&gaBs6dB&ef#xlxY(h0Z z<2=14r>CQr_>8Apdi{{$Li-%0{KZP9ThprLxGkrTnV>(7dFXzV(itSCn%(CI@jr~! zkCq8PzcKH_IhD+c>x+n&P8-{MVlo)qi^1cm80-Wf#_UxZ2%;$b?d-ZTiORB@1rZ`x zir5H(AOs&k$O~9m`5ZopjlG?%pjH+tsT9-rg9K6-G|6tvW<5JTM7pWwhx46#@0qy) zAo1HPapPj6)#fosIoMCJekj*8NgH*Jw=-5FUuiGF_l$Ef5^rKWI@2G5K;>3GD>Qt? zz9lrF26&I(Dw+#|Vph4)Fcv;j$yFBwMQ(WMFR>nvwP!%5S5xa)P^HOu{<3UFBlemT z5}o&*mz+IWK1Kq-xw-lWn7Mwxn^;b^BGziYd&|xHfYZA^%ZuKBm=FY|gs%X=-J{SN zUI#+Q~0*yv&I zdR)6Sf~#Tv$*0~5X>J;3CY%w@E7+Bj&uO!C$T+ng^LZ;3(Vcrl>k!G zeOPn~9>b3W9PvfKVsGPjrG*D}yekqGq3VPTi$c>0X&4G)LT_bmNEkPqW0UvAeIlIr zvds@?CaW+z1sF`1Xy`O*jFzfxF+vzYqIg48Z*Umnr%Om3+*Me^9p!u$ii11f`1tuR zq2KM|&&$CaO}=IAR7qLx^JELFji7 z_Y4cyKx<-Ggij^9mZpLUlf`|jKbZRU`2{cg`h{-Qh<%QJo>;kIK4?U%GRjl;1aDVp z4h|k)x=7!BI!sNcu#uMxkgB=RIpQ`dFliGo&wFM@c-XpF?*fFp9{OH|r_x4Oi4W9g zm?4!OC|)BBciCr!Xp|5Uss|H-|j^Q6(ZmRDwRk%95ix>nfaz&$6F8xtYF z8)N9KmaL6o6C{7h<0JrYR<43D5JX>M4r2~1qev>1fMBrnC#-C(>;->BKTomIN+FSP2jjTe6NFXz+t;>s)y;FK>MD?+8|iM zO{vTxgZOJHc|UVoBMb~vj!i|C_|o$qZw4c})QcN6g8aJE~;%JTGBHD3A+a@vj3Ba4x68Cvc)6+3O>!RnQL`sF!^fmi{TlduM3Z3n&$Dkl*#fD#@Wo5APK`p5yNdf+r=_ zW!KmBJ^H(&pm5j|P;9@FD@iAqcrxQ&DuFd(Ca@yWR2f4hu#x~bS8%+!mhnE@Ova~} z$48v4gC^NN8(6&D3pTqdl}4VPX*`tV>^qc7;`Pumv{5h^oh;`1UA*|d=BEsdm63DY z3P3Z$;dDiihS+wN7){p#g2%t?;3EKUR*r)(31=)QCrEn90in=I0|Yw^c$@INgKQj!^#d|X^NUx zg_Ofn3)NE~3_0r@^D4w|^-6uor4qKJP}2XRb1Vgz4-<+IV0&Wa?(4Yaft*5~pdhT} zOXlI2MHrAL#2^t3)N&yqFh^V}{@3KnSd21^+bPo2ko+U;u0FzwaKT#*CxS~06!T9V zsN&1FJ_}!KXg8D!s~A29)A)@|ZgD1TntmV2V~MU^2^b!JJrO?w&}#NL4Ff?Gej8hk zf8vM~KtTcsB&5*NM50E518}8Wg*zY`lr~jTasUuC!Es1f+bnNpQ&A$NSh?G^_RW0n zjkMv8#Sf!6o?nb^FcG7Ry!L#_M9u0;!Nh41Y}Fb+dx4 z3Uu=Wlq`WS3a)r{@~DI5z)lq53uo2eWoRok3>p<63j*)hrpDRf27}%jA7x6R3}){s zmYWdQr%QIC6)yPxbUqMf92Lb9zJ);CKj&Hfl&~VVhx-L4Z!J8(xWBu>!}#-&cQ}**gsb=Gdat%$ zd5rS(UyXhRpv`Pn8is->e3~Ykp=B8lR-HG7Jty@=pG4Vls1$TXb3X0IyRiQ27 zPg3nqa_{xbG@xt2WRV{TTxRZ^`R3%m72xLL@(OoP1&&XR2Bd3R=o}pq!1k3;w_fRb z$6&v29nOqr(pbfOA5y2cVyAy)h~p-?pr*-?FDiZybUA})`5-`-QsdX_5E}-(*HYU6 z^`NS~-Z}xq5D{C;NjuZ=a-4FS_zcM$8N@frx#1$7u}%?=cR{Hw9t|Z7u7!yWYB|Jr zJWn>5E)Fn$ts;^>@AZEoxx?!CC|R$RYxRl=Ue)PkG{oxp0r~0!DX%EK7*|+i%Ng9; z9M?ZFeC!*8rYPdCqn{+ir2_Ypi4@v^o8a~@3Hla*7OQD#AO@nZ?XpVSb#-Y4wIEWl zcqmeP@ZkR`^ndtI{23lRd(o3p@T9^bQaxC@+k7>BNuc1h;2|V45JKk7yu3;DkJUdq z>kr2F6M}a!AOKaI?C+t|N<2OL_K0(pG%su*#ug(#JXTO5!q4wF>PgC^2|`M!Iay(w zfv$ORr8wkLdf^yzZ%S?OK3901x}IF4ms#IN1|r~7;J|Z0u^HK!vfnW_YslqulsQft^W?L zgsUQaxK;4^aEIvj23OrK(qDPGe|MU;~5B-XQSg<#dLIP2` z+PKDDb>7Pd6bc3wa@^f{Z{EzX;f28O$G!Vk9}m&=*V>AmZVR{Fh=(|-64x%4)Xqz~ z2kkTLELQsxUsQDC4lnhvhb?8oOE41>a7Q6$Y2PdNDi0dfLx!GbAH?*9ba)MVIx*_~+RBr*c)B)1ThQ+qFN2HYe8TU8+ zZsT(mVe**bc>pYETISgmorxw8N(JIp>dJH{%?D)H%l9|DPy|0E32dI@Fq^>@Ma2LF z)fj^hE&=$jFP9Xu`u+C^I150l73&}fL&1kFA{c^^L1!ob!T7=Y56;fULBqggqA^i4 zNifK6-JE zx4zk|^+Jh}t_3w~*uB{#gN~p`favgTriv%%p=BIxNFziN36t~ha-tc zt$f9fYc2>wuKEm#%02yWfq>`)F{?)(4xHRHVAy)axtTr9mrWK(lhRrJm;f&USht$h zgn=+PCaLjfQ7hFREMB~p9z5C?^bx%IF72hgi#H2}77Bs|{}MG>o!KoOJxBu~w++dB zlkc0EP4v&~uhwsy<1b38;@v$&&k7}9yJ4K~?%XkH;lRr@u_I(phAm=y$k6Yk=+z5Y z1bZy`;-6x}-b=Py?a*P5Jw~pdOYe(eg6b&WpI1e%vT<%4n=_blqnOVYrWn37vDzzY z&Rswi{MpMpo1OK(5<=l0Rtz3Tuh?+#+kQ-3vZ-SGnY>{)|HhQ3M*e5`zgR96fxaTz zbd-1%@Ov$0CjnSBf1QM(D2#u-X}Ne)fesA=Za5GbNMvAgHQ^a}3*UejVsp`$I61L7 zz-CBXNHF0~f!kDC&v!A5F4!k%dhhvuzteO6I{_Zrw>`YQCkX4I%jSBu0;9|Bz!{0W z1jPvf!dPk3v@KAIx4605L;I09f`?XMgr_-dX5Au2=BL7OiSD56q>s1%Li#ZZ-M4U; zEnz}z2;*yh0M3P2WncDyr>Vm8++dz4JWdUUcT4mdS`J*=M|wq`JKyKnIhB_(k{Y&1 zh4%_^sIm4o*oag3Iz_*^z^ukS1fUu1FxyA4+vDHLLq^oF?lU(KQr=PiRQ`)Q#-26^ zTU}JHJ1z-n8jbq_xYoFujPdz8!esmcYT)G`ADYGUaVG!y{0P9R+2bY*1X1|eY(Tic z3Pd2PJa+40WIn{Q@U-7xzH z5831D>&Kuyer9W?(I>?Z*z$>^wQI~40JDLL<$K%2Y}+)JlM~+WGo;-fA}U9%YgEON zFju2}%M5IB765@kh&F&(@;RmjT<>(3N9ov-Nh zlEJMcz=i%@b28{68yZQ3Qed0WHpxBGBn@ktc?MPNpCzOBGWS8gVE`<`pIqJV8`OV! zE&{M-?I;LCL2%TEpgd6sf<{5GQ4kA3Jb;Dw@laNF-oaK7M6j_CL_{!ti1C-;?3&h2 zLPAI&VRvU|cHa9Z0}LDO4yKDEGDTPS!SgJB%A~%5O3{__RP_Ie$CR|ZJL3qheg3)S7=K>;GWMU*-LyyVI7f40(u z7Y~NN0Pv2_?H>T}5rB0o$4wvzg0)-=3u_q(fh@3z$t}J@>VNPi{@`>UfIvck?rlFtWmD51N?B&|%2QcP(OxsL zNI-?8_w*!Zx3fPj>t zMl^g*J}RHWf6&sVfCfQ>Y!FyZI5;!AXHn5Xand$E%ifvY*+=6I>~D3t-Jj*}7H0fK zn8!LI?Ij7FbyJltxzAOloYdvMF>(_kU_3mNr4EA&nIE@#pQY0+no$!+GA>IG81*A0 z6n}-yVd)Ur4h}=Z3PE!1KMWl%`+~y8++CCo6-U0PR+Z z52l#;GC?nl@I4`T>Xy&fl(_=gy=)XQs?0vGSZt&XEER&S@;Q9Nr`rAV11P7$Q;vRf zSyS7C#Jf{;OUdKpF0}*I9oK@O|2w1Dtuf_0V`Cl-qGtd|y_vu2zq_x?AGn`yn4X37lMhbtvN4*n!qP455nIK8NF$ktL-`>zXPWaV;Mi1 z6vjR+#u=>!cj-6WVfHk9#Thp|faDxcJ=z5>U2Z&b##x0D+E7Y=8d{tnl|kCiHjv?d zAs*8K~Uf*?J9cU~G(%7y=?u++BP#i=CCy&_Gz`_ujl2|Ih62 zD5ZAsc#4oLMAbtc0{;V1-ZV26&~?k$=dtSN)-|LIDl3Z;=gOlc44xGk#St7@KSlO! z;Ec+Y$kZOV#0VtpO27cYqw(7|yV?0N zb>Ovdk$~Ok*Nust9w5`O7MeN;0u@FA5!@zvFEAwhy9ON0VHZCPNf*Ue{O7b!qb}Yt zYuIqpG$N<|biD;2-P&~!hGF1Afby<*iGjz$3@baok6>eD0)~PF1&Y+BQ1B&TU}mtC zR!yZiv3+*V|5C#GgW(wK=Ttp2a)FT7aHxauOMDL7npcKNPFI2rfw8HqJi8q9UeQ ztm`q<@E~NQfn`Sd%GKc>sm4jfhX+r-2_)6KYK7od!Y1$#YqEthwjH`s?zgIE&#+Br z?U;t0cfixIk#csOuH(>QAomXzuat+}*8|jisAe05W*7Q$#Ee{rG<6B>uMl8vMTXM} zMsqeyWAV=hegq)hT6PeGf#6~T@;Cqy5)%{tz<<#H{{+t-j0wI736Fv^OEuml>4}yD zJDuIxPX7hKal3=$nuf|KR3_61tEs`2ztC^$23Phr~=Yv>w z&g=htcT6i8T|bePgPoyRS~;UAJYq$6xz!og#V!>;N5E)`HA5CuFqhJd61;%oLgz~l z?>e}HK84Y%pyUD1uJ;y`H0luvDhdpIKm!Sy>qYi>uHm2yY6f2rfDtWS^jfX3JMZ&K-nbCLN8kk)9cH;*iy;|wE{@c9$oozk?83k*}~B+^a>b$<(b z`UDd6Y@+~Tq$yy84ba}og5T^;zXv$AhgD#L){A3~8>8=+wUhYUW{rvH1!H~%zYGl^ z`EynA_=3Us3FGOAp73?{1Dih_R{$b%{h;H`ea_eKY%}`)|XylSt>@XRnE5ADP6{k)OxA#sO$} zzPl6VYASNArfkQy4IoAMV%1unpP%K0{h!EfX z=CXAsE!0A3q)R z>Yq;QDIJPMjb@a~;Zt5H9<^4?jR6qp-%b)_LS&5NgN)yX^0oP%&Z<_qeVe7nUOT7E?!Y|0oUH@IVn02Y!MQU*Knw^PlCMZUB418JlO_#FsZi4L@P+WOFm`5c4T|WX zSjm!4SM1L1?CZ|ob^1--vUP@}ZKX?%L+KSR8TV8g+7Y?lTCTAzd#a^83sWrpJ}``E zHL=@o$<^d%DuI?p@9_y~dx&n@kFh{mHRAkVPIted;RC(Pitc-P)Jq@=@^b9xBLit< zML;Rj5D<&%7|X^#G(vEsA(voUY%wVUe(9I@ha5S<@)bH5&qkPMoj9Q^x83xbL(mvF zC2=tw)VCw38WLwT-~|@%>MJAeqFhx7y`BHMM__@f4aFFz3n-h061Z7rXXb8C{Q>^_2a2M|?|I%T=bo!s@fTu^*ekcS6?jJd z3)op9;SVUk4t!+~OjZmIPSZTt=EZTJ?w6eAu1|s6BmOjnqmcaWfZsdf`%?xyWm?DX zAclP~>IGMk6-fJB+TT(-rls^(Fq4)bh}qy#QdyW&xCokeTrd!1Ikze>NOBEm9Zl$T z?yvwgOQUqtWG(RJ3ScXlUV@%zVPKU32TL@RmW)Gy2RkUcWDtms^RbZ6%06vWY>L5X zr0lSzsk9sYRsEw-u)B%N3H5L$(Q?98H7m#Dh2D}jn?=niIKLLbO8`o)AO}Gh2$m8n zUOafv@B#h*2mFW^L-3*@YJ{YvK%Lpvcp)*8z=aFx&hE}^hw48{|Mza&-NG2vbzK@o zO~T5#1c9WF{XfJ&v-FV&`hJwzcM#vc5@|TNNr=${9N~p>Tvcn;+(7I+bpB{%uRzJD z)CmB{${Tx!dT?UcG~$;w0fGj5{NU%(<#7No$1WyOTXrcW9N{1F<*$(h6 z=X$G-$b7nWih_(kQ!5=!;!8Yue4I(a<~t$0c@~ubtDmO16=CMFGkF9-oczYtAcLSJ z9d(F*4^a_JX{S&lL418udjbs#U=9Eu1IVx`foCKg+8E7i*9%slEC}|)Owssxy#=7; z+Eow+g5YwAM$l5R)F}Rd|6khs1r|1bS z%Xu6xBuUOHYt|~tc(z-sdxu-9ev(I>wIqVlqCkfP%8-E?XtUDP$?@c5H3@+rkzDXI zTOBK<%eAG)Aba9 zlB?%I5Qw40<0B$yj1J1;=I-Xt_Yb(4IOq@1I1tn*=s|2>IbDp2+YN*guI;_|+MfSs z`qyu1nt77+-f%-?TMBi+Lu%=OdLo`+TEasrwSxZ93RY`_h>lM{SNAz`R{NNi^9yZ{ z56X(1qNGbh295dYK%McFxiY6?b_~lu_V7HTIAoYQmGzZ@Td5a9kZSn^=O8G8wPoA3 z&(8*QX4`|V44p7*upZF;y^OFkkwM80#Tl6gFpl%PJ!}_E%lASwv7+lun>u8DE2!FU z*rwhOAX(5KWz-o?5De&nY{egtlkJEGh&J zn^Bq?MAK)lzzTjbf|mf4Ts=#~KoEWIhsG!_cM?4kP7#C?6kA*Ww1q!FTfr0}#7b;L zTyl50#KR=cj4NoNV3BT%ot>GTH+l2c{1f@B5C8{F7+Yp(q^8!Y?car(Wj=r(W{`gX zylt~0U4UYZAJ;&(-9UQXj;>+FDqS*WGnrw-0YyH--gAYMxS{~ibOY2_U(S(48D4qx zt=00z@6Gf@oazaOc*^JnW&B&2zDK#!Ntv}nJ zVk=(4t&tV|s=)itNh3(T{|W#dj;{*>V|Kb>KzVh6d68rBkYjdx4Hrc?PSYQU_vpQR zc07T}CeXtX?CCk|APrc6aLCg=4!IosLI837=diwGns{f7x@E@G3hmr99aJPGAQS4- zIgPUHzxnLXj^IN8POheT zMMYX`1%n@LmD<&rm-Hxzdk@QI-oAZrXJ(84r~!oTMt{(^0?7p0=7cF&8}+4>#+~bY z21uclrFsT|-p!HR$r&r`nKfSuVKIaH=Bc{?e{+E9JW#)muv>n{61#vgL5WIb*+38# zL$ln!e5(Cp^*(&Jt6eu{3LM60+)SbM7+T8qXTA|HW@1lHZjVTcgu6{6v{Ig8JSHlE zLv`&9J1eiK-&f3KEQz?J=-x!Mn)3h_%Ut6}`ws2eIl5ODI9^{xLco)~EgYO4W#$d0 za5vc;YKsYu7X)bbdT4Yy42C9ZXP0;gV@xN9nB70Yhy~zwP5`-I2p|bSQt1hUIWxET zPBOBQ1+B;bLJ*eiCeGzP`9FZK@go2ySF@5p7)4L>=cG_0ViF_x0IdX9JwR{JCW4;9 z=kP5=aBT>^K!}3NGB;5$V6-R(8HpJk_1yclEQq!r!@xJ++J*150bFLpG34SAGg8%NZ zOuEmt$_fUKCB!9@{i-KW;YYQ#$ubBm#POeoSMLR&QH5eo@~A}2YSbIk1CwFqI!wdK9r*_pf9P5zzz9s$la z+nRx85UIVTIZJM@qzrW5em0LVRYRO?#s0)VMy>bT3zHXFsAC><0!XTuY8m-zn_!sL ztc52iJ~ORiFC2WMZZC9Ww>;weT2>4Yk$Z8EFSOSo*potOmH)uVz*pk z!v$ZjR;p|y-?@KL2B*$P$l5eGdvh-Kby?zy?;vc5AveR_c#PZG49|-NP8)uo2w{Hl z00;s^y-X1`YMp9;*m!fwS3U6U1%d!waGvD3K~??91AYWx_kW zAVa2>4w2>g?Ht$r1upwU38BDxg|lWC(Ft>W?x9t#m>0?F34?AZYn5m2@#xl&kU~5` z{KKj>Q>sG=`-_!nU$tAuw9p2D_U;|~jXeJhh;lkbmL%|r3?qKvrYI`Y=$^&T z>^uCcD@k^PM->RY?2jCKk@lPi`x7&u_C9%}yrP|wikfRezpDoHm-8HzMPo(z!muW_gvI%iwDNj__u zroYhk&ry6E)dSycs}>vb7X_?bX*i%FC3I2~si$>Oxl)+>LQsTa^gpaBt35d}=5;PH7-Jq4~Bp!4aF{rAvubZD&tDpEiVLC{vPdv7^` z5%7(Hi-(cn>LWgen@aB)MCDi*J^>>EWDh3?7XvG>`zQE^oq_BB4~BQ2n1Mz2Uj|Mt zXjW%}w%(Z`c7Z6+5ETm(bOw(R($E8~BV>WjD2Bw%`xlJj3w!`91I;mL3CS<3BzC>H&aGl4RoKflMzmKo=zbh8$A^ zj%rvpg^i6F7C&%cV8Fz1;R4R~06+jru2=!}^YL3FW#L;VQBNpSar{0l$A z57AM&hzKr<2rddbv|8IUFIREZF5OB-Gb@_ovCDdt(Pnj10t}57wYWTax3)=PdwZ zSBQf!5Cr#1DTNe4NC=h$$p$RAcgjAd;^aAh)Sj2+wAfknke_C)bXGFc3uF8bXo{A`t~a3mZYOv$D4JOrF7u zcnLx5EUmOq@BsPP1QT&)b`%S-FejMo&hO2>H~*1Bjmbi5dwE{CO&%24yy~T5Eq_=m z_l+;L6z&^O!BCO^c(rRIc#P`%Zi>kDtd^||Vxj2sD0-U@9|a+VepsR(Tg0p{qzor2 zpnE}Q5o4OPvB|0HznXWrc&{uVc+L~MlDI*o!yql)!iFSbzMYR_8jy1Z=-LXW)e__F z&Rsrr@mIY7mcPya4t7b$O=hLl3)DDi3_Be=l`*>HmW z`GB5E!@qquC4g`PXrq>(7&*&^dwer0c?XvoWAZlwu+~5sT7(9E&H|nS26MS6MKk%45185lc=WhlV9uWouabT;R3p5hV z3?AtD1!_@)athEMQU0F{o*J(i9MvB)II6s0FcJX=6vMk;tPICr^8w9eVfgWjiQ!P+ zWCrm)2N@cG#s2U6_Zj{|BOiueL37~-(BzPlJA;_HJ;T=z?-_o7ddKkd(+7s1pT98t z0hR)woCqrV!6SU&;Y1ej5H=$luvlaREdXT)V+K|Z1{PTjhD)HaeJm3{$P++Upxr-k zV}_XtI^hM$(0~6!SEK&=28xppkef4bE`HA%3SHE%Cv|2k4>SoKCM)$JDAodna*89w9z&(^<)O{PQTDzj>2 zsnDTpD^ZT?F^^jxd?g6SpoYdplCe>>u6RM^4s+uI{A;A$8I{5NIQs+BqYoQ1o$@kk zmlxzoJ}!>URSURT1^xtJ?CMez27>UnN{yRr4CKKI$%_~80KJ4q>ScVFp1?Z@eJ?>l zD7I)o+mN4rv%9HKDEJiiWdoU+Z@$Uwe0xtfuycd&zbz427s11*Cx&){R}3imuaO97 zeKVwWx@ispZXGZy4k6-DjgxAr>&6O6G+v^ie~mOpV_SAybrc=fQsnFkLP!`pCXe&Vl4x!N+0ekD}vJ3IZH#fCfQd5!`hu=tls; zt{tagAPSB@>tJkz-~_24l7&b~!AZCRH{l9gA_Wa?DlU)%AQ2-3GJ+zBthLR|vq6Lu zv|Cu~ecpNV-psE5M}X;69i`u*lnir^!EjHHW+5M)ZwYs`g6XXuHx?WRMpoLvDAxsp zZBjCE82%V+yZ%6dG50=o4oycXWZY3{5@Yt1;GWd|`qblc(%a7u_i~n+40N={#Yu_h z&tufC!BN8Jb2nzJTK8EpR)qSuRmL%8eVh1Xpgmwcr=|D{lP)KcKsA#D&X(J3&M=(3L@qXcObi z*}A984!59maSc>dHt!2(dLAY*9bu+#tV&s9qN#k>)@?=K+`S@ zg*&GV^z)kv=rjRwzO_YwIu`O})ZO<4<oXha_PirPwZmZ-Na6iu4Z^A@UU3) zcSv_A`1Qd6U)?TZ{`!tHi)EC;LTZE?JXrfoT+{PMhD*!gw6smb_J^m z13`3R2+>5X#2jh`6$*YsZ~YQK$6xUh5B@+;xfJ>joV2mJ+zYg%2_CuG7!w>lZV2nk67=kPAP6QGPmDSCc+_h2LREY2M ztdzQv>fAp%SYu!WVdL@)B9xw~?8)S;@6t!^(|Zxp>#(BPNKwC|Xv-)F510-D(fxVC zbC>mw0(_?9sY#!Ij{IvN$JK`+{jL@?k0PKJ*n5`U#Ni7Ae`D_-Ka<{Xgz?v9X$ie6 z{Y7?e&h?8VM6FAa~jkEcTiYMg$&>Yo3D%F>fOBglO&<< zG&K{zviU~8j*r!FgGy=&j!~XGNw*V=?>(-CjELfutM3f~X8{RK|D6DA zBb?Jurisu(Ot*IbwpgsIy1eKV&WiHj@B(G$zNdMA97#(U{A5Y6U=yF^(GVd&YM_{u zrzVN^CaQWqDSLDpM;0uBWS!&)9)jt%#&qv-R%wgZ7I3=k_DKojC`X~|T`3$tYG<GxWZ0C z!Z~&cPJlvj0wfZP!{9&+!3+smST_2#kN*TQH?gdJU%!5BU;jJ6Y(}(Ny%0cPjf$dH zFLQ1ahSBg5a+oar!>6IJ;gB9e^l7k_sG(LtyRJ>peDueYhch*wuISBchFPAidfk0UE z{Ko+*U(H*COZ5j@5dm#5lFzIp%~NMqeE~=$&>giYh&y7q4plh$LiQ?wf0ne38wgpp zwUo7W$XST=YTyK- zO4Oza9;yzCr`x`)kIg_1je1f(9eA2_})FdvW63ix`YzdKn7Sdq>pseAyRq1>%=4#c{T z^zzx%>5>ULIZM63C`I)YS-WO8%uU?Is<_5|7LTR=SZ>)T`eH9 zD6o~VRFbYnUc*fTlPYOTi@S5j@|{Z7wTd1og`)fS;{Vdr8HoSW8(alo4$ zSrNn-R0w((OOGH3wmFrho#0UfLA0_^ENn%QuwY!{n~$A^#WovA2)py<&F}rs0r=2` zm&IDl&+~nGzuQD`ExtXxRhldCoIRFwWPghnZ<~?j27jlokYom#!j>d8YMZ&^!!}ZA z)~{(k-3uUfPnp?kNWP$*M3MjsG3)%|ISA9mJDU51mca5s3L@z$n&h6gixo{_d7MxR zKdk>-=3VnI=L35AQsr84!CBNfYbA68>Fjq~^ypwU0r}009QIJ|mUQm++2!2d}qtxmayZ~!C70>&n^#Q|3h zbn5kX=KC3$l~bnaUvA(d0A<&*nlKPW?>IQrT8Iy%F2oya9t@u+``tHqPe+py zl@4WKW)PcW%P-N)QgIWdjg%4lSZTxfybs+prmBS%ya|rF4K9Lq(pqck7{6u^Z4~xp z{@;Y#$JaceROPLNUI|{kog5B`l|C-9^>QT{qjNx7|?-<2kq$^1pqGbfZisr`4b z_sM)N70bwC_?86wRZGgE{ns?N)4IxveFGH9=07}sNm;;ynJqRo`6Ez&X$}AP+yo%( zYIYI^g7CN6f~D39BBqH(4;;O5;vsl6UcoaD;S1P!Fd@Vv;Q(U1d9j8r>&&;s5-uE? zY@GY#WFkWL1uKzS%;sGCB)P}iO@@${V??IS^a;n=g{vTwE}+vPntS}?NJ1TM_0W3qr!1mCCU{>11l6#D9ob8;l}$Mi zcPh0NY=Dh6O;d4WL=Wr_)O7-H5p5lcLblxa;D3IL6yPzh;MrImjRI6BwgbP-Rsbcu z?vQ{a_y2tS^LY!v*wyn83`Nmfo{vU!U?BJhA|{jcpZK@JA|@LXi-n|NQTpMW>piKY zgS~0m+;i_a_v^j?0q~hI%avnN{n}I}lfxM~YZI~W0R$WF335lDJw4vzLvQD54%M^C zG!5h^xEAzHqE#^s<%!W$(W7eSvo+W9{LDI}u2A&7aiIu`VpQ;cG=owH=}2rhZo85> zmsp{+8?%|zr&BBYv#$rn2){?|zc;0oKb30@j1WMu`AGTt9dLZ$%PnZb(O^&j;RWN2 zk$#P!5mWZ1h%7g}Vw-$)1`(fAdJN5}gP0QcQa*S|g6S76Ae z=Vy4IvHzwAQ(WQwF+xkYSOWm5MrI0it~QmkS}7>r0x)*%CB6+&3TZe~ZxsZJT^2@#DH zK6tczUWoXw2Pq+dXlwR!Hj7b+X!iqTf+~$oA}!08nM=zB^|)1hIMjJPUzaZoob_7D zzc6CBY}_l(TjaI05L$x^H{}wYAh;5~J-$S2<$)sH zl(q;Z)#Hw${eilj4iu~)MW8qK)cBtu0i0?r9|wo0V*Wo+MUF{~@G80%5Abih0d%NO zVDTy3ekO()1b6a%Ls4W%sp&rj{|N;j0#J7KIs`*e_>`)&iCTC8gLIPU+_&>uCJT$r zAQ85XL{x&RUg!I+QX5^H^xocc&+m7B{xbr@(9o*EV%D#FNEA&Eo6Us(P%wF(Iv3Np zkr$6ru?A+XIXO$g5eb7NKs+4jS;{hu5fD}`U5h4`7G@UU3*b)Iyz@M&GVSJTik~W!H{^Fc3t?X#7Nk z2x1CTNg8ipt3WCFFG8uKc-Qg|_rQT|5DOk$WLJwovJT7J>Mou-=^f2QA1TLpmBk?tWAuxk}Ks4YI$=>j6%h2+;V+6WOFKvA{^&sT9IExeC<>!WK7rVdv5RbpIS!CrB)qrN6~S?@qGAv1FmDovOQL*3?|V!BU@!;hcMbnF z5RLEQ|L64-fU#@IK@bL_Q$>jq6LI0fRrMks#`AdsPvG8|xNxN;vSDMQ259S>sRiN+ z61F6?@4cDMul)hQ0R_ktKTMA^#)pU56~+0niI{W+U=!e0&~Uy@I7< z;{pGMFEPPyXU8*b0h&l_;?TPL1K<#4~X48s5{QTzAM)e{5`I51E@$VzYpomb4`Z_r z|3;I-Q5QAf4-n`8hfopeK=?7V3!0QE9MmA3=sO(t7=@*Stz}x>IH+x14~_$O&9f*sU%wEFsnd!9Q32!)qGTbx9aXvGmJobHZe+!iJ6UQ@)`WJT;Z z#&Y#zA!7Ca@w@~e>th(s#}j{ch+^f8e4Z8xe}H#o zDDpt%<9a{b9aKt0YZyedTe!&#J@ek4>*q*8c^UWd8nT6KjG?~BeE~w%^g{G%mzf7U z5rY6IhV&uuAA<4+0E(i!2wJy(lZ8qi3NWC5T6C9a-y<;yk6+U>SkD%{=MmEli7uin zRq0hLN3;WG9-fE+GE(FFbEdYdjhdp394=j+e}9)JpO@;AB&@uhY7D`s^e@UaSgp#kf_N! zm41bU9qxtmke{z*wA|%h)A@QMTOMc)XJi1_JHX)l%33O$hAKX9!N#9)x;bS>c(gg0 z)0~mNC4bx#ZB{!me!Ts^fxoZ&F99e!n;ZmTAPNs^A_UQd7&qz#I0nb^0Pek-i3Sr~ zs2CH%M&eJTD$bj>>K3*vXleUqIy3#++yp=c($ohRva6h6f9v|^gjsYO-dX4cO3GROh4jG__{?qD$we262G|L+ z^A{k-|I(Zr zfhWGy{)7}fPrS{F<;Gi394~pm72Er#gnoTr%RlUY7`~|iAq>w)0M4!*2SFf+4lKdA zg%)@p55Ot(7#@ep!pmr9VP#{KPly5Wlf`+n6N#nLkZcG9mf4+o^XAR}V$lE_yc&h$ zJq=5dkvfJnT^Cul5&?Al;v9l#0br=N(n~mOjB@D3eWzg3 zt6hJ3uWJ6l>BRPue-PTFjQKWnGxk+cyn-Hr7=OsZbSJB*U*O!AFAyqCTkdF7{w?y1 z9t5Xt;AvR6V#?<$Pws(zmzsT+%dMllg-Y3zDrf|7xHduxnV;9}_B4m}Cke;zg*KQN zq87YESC&!&7GvM%AHee7f39N6%Q2byNOal~Ef*X9&Zx+J3HW2}VEtaL`sd><0B6^Z zgCGzE9}v_CF~L}vNMXSN^cr5n&O3P_6C0zgi5d$kI)VtSGrNmHD*#4T$yKc}fH{-6{;!{!d%n~Zh?{xpVmW~#JSQBvOiJT65S*0n! zRromt*dTBatnAidV<+c-y<&&>g5_7&unGDgadXQ|yWcpv86;<$K7}n%zZwDI1KaQ( zIR?L>b=~;SP1mP9UyP=cd2u+3A1jJ> z9kJQ0fx?AE(G$p2kBUVoDBqt&Pyhn3Bf;W>^W#Mn>$K4jTnMqN$O@9E8j?-2i3l)m z5_g7H-d;ma>etI63f1;bgWT5vp4>6VbjT zS!3{-_e%<%5&x?}u&rtQ3jE%WhX8zCK?=e!5L{`owjzR15JbH97t$B_06*myy!#2k zqxT-X2%bE6Xp6SBi94GFRH}VIOR~#$W_Ggqn*beDP=6d`!AKO-8Yam~rQ9J}Gb=7h zwmQpJZB_EZ8PtR@gfetO+ZLTJC))x=JFy6f@if!LNEIA_$Vha74gP@FKLTz*5^#VR zHTMEk0BpW*Tr{WzjVH4TgjArSOlNYAzsPejdGu}I^;Z&jaZF1_>AUhSX3&V=SIey@ zjrBO7-d7y_S}GaraPUC3HVNc(u)PbRIbY~;IMQampb7JT4fnC5pKl4^^Y;L)}1;q0bfU|4IK@bR{ z1Hk}BNF>Gs7z-03iD&WvmR`cfQ+N{#DjOR^EW}77G*+m)IB(V%3L9-;vzt(`^L_LC zUj?M8^&tpYpa3^yNPsf7z>|HwBstv5auK=ix+)3^99Y&E`{=Xo)RN%>zy$81mNaKm zJuDAdYfP7BPKJI(rHyOC#nAt}-_%;-2n}#n&oSxK?5C4s)=Dslcgk@upi4BMth!R4 ziD2lMS_Z2PA7dScG~=@kyK&%RaKEoDnKll>fuu2=O>99KG4lXKAbScyu)C?j5mfXYz>^4_K6zAK=AywX;04sdpeS6?@A?gmuL*DyB z9!uls8ge6!Wqf9TV0r$Lkht8?g5>{;oU{1FxYn3rpqwA(7@4o~Ul+Vw1m+M?h!bx*Yvuo6y(3bNH6 z=+tKzjW(P|XLG6ei&njCzPMJsLcT%Z{qy_20*JYxp#iUgMo{FUgPl8>z!A>L$;j~X zB_xY||IWzp<_$=k3Ft`3ZpfdYMeu)_8RX<1e7<$-ySS*R`MbyW88~@)fXNxQVUhuI z;^seS-NFpHcL&nZhg`t`xpfgb_77TH_z%(`17FVb7n1Wp>kj_|s|8^5AH3k?Kd@5* z9`^kMoqz&{BdA^Q@!}Z<51@KJPEH1PP|F{*9SjMB0+kDxtKI{P<)dG|F))h=0jnK0 zhJV0T`Cm{8#sE3v7j!7bUubLp-`}5*;cuXuzU?^3Aa?Wu!&VzR@am)gXU{TxfUf-q z%?mKX?1ZsFSU`Z`6R=cT1#HN^y9P|S5`Shf*xPRcpTGsm{r{ksCxc4X@82PdKfeK6 z#h~f{v`{Q3nsJOVTb4;mc= z6;YtB;V;ktKQQz`C4!mR+Ly9PdC0EK|KP~{4_(X! zxnSxycwq$Oa0+Pg&+->KfW!{kHUx|`c1WWSbnXy4&`V!|`q@EjW<)s$T3W;*#Bf_u zj^Xh0M-05c2v!I0VMD6|K&OxZ6L*`Q9>e}~=NPWuxXZxL!^ObN#Q`3@1Ra6*2YekK zB=P?L_X`|1zc1fq_x;gs7LYX6R>Xj z$q1hZ`1@I>XCIPK50rWWM+&f)^8wf(%)W7hVg0*T4D3pZ3~Wkr3``P09o*c&^a`wwAG~Dv z_4EnD@AEeqoCHJ|N{x&doIqm}XU;He2lnfi0K1&qfX3AWOM+A`E(UJojUdSOf!ZqS z>I~ml@8zeE9{~*0>2C;r{!V2Z*(dfV~K3adC!oz|6Dv|NlUS$jE)*uD6iT zUvR`58vX;*@83fVc6a|zr~wE900Bf^Bk=Cs|KLOb8WIK{pYf0ZJR}UtrJzHKe*cEv zm;~xS{f2hbq4T#I8tY!&xba_9PA=i~qnixul1kvKU>VrBAtzu!XZ9FbA>#m`@d3!? z4A4d*c+2@;@Jt-I`v*QT19BlVI01kT@nwN5++>8F4E7&#hdX$8JtMy?!$nbfhHbAO zGOz;cZBt;QjtxCRKx|;ES`cXFa$rfY4;VpfKmot|2*bVih@0A-m6RBaff17u7R8_l z8qEae_>WhvFzf)9AS-}X&R!*Ha23S<=mogcU}R*(o&Z2q&%JvLM#{h`8BzuC|2)}+o>iREVn84$^zkabn#(w{^0@>`qga9f9K$qkJ`+|&I zK+FrQtDN~68B;&Ldd0vkt;q0)nU{fyn-_YT7%O!24OAMiK}P==Aft%?A-hVUTgez8 zr2%|f8FV8FGaGoZ2JC1!`0*^@TbF zAg5#vcp-1Q2C&0S_Pk2cJv#;|C-7 zzIR9pW(4;H{=@HFV*vMAnV9~=r|v*)0!Bs%W@UW>ELzumef8?CfP{qShesC~SVWZ= zxPjdj(3SE3*g!jDI3bHh8K8$ggKytr0yhZ3)5pvZYYdeOu%HMs045qS2HY3(f+GGZFk(&sBYrP5fnLyZ9eHIo*c*BB?je*qM4*~!I7`u8E zgkd0jNvc*wi!Rp5MZqWVb=-YK2Nwt5!9{RT5e1=2vDL)yuCa)NSU5_uwB+aRyUX2| zzcE0O+lP~1vRCx`!#hs8b76l!68lg(4TF8AaBb7dsP$r?;Nv0g=ov|EYfF8 zL;8%VL$!@7NiyZ&P@ZPg7*6QPwe_`7kbMrnUoKlT1r>_$4jNUOg|c|WV+8ls*V@Mu z$|OwBTml!)-C-`$3%T=_qU1~?D##oAm>kvy5oi8CUvzTd)V{pzYVPAs}ZRCMM%MEA`CGPN?kD?3z*h9^?FN8 zdWQBLl8IYwOb&PODT{&6VK_Dr$5!e!KEuJl0KaxWKQ94TyP6(?fgm~+O}`Xd5y7=_ za(DOV{4P!o{RJYzO%KvWB}An)Z+4Nm(sR>fx4UoO&b)c^kM7~02Rr~*9l#Qf1O#79 zT+c)ZUuD5sOe)^z)m?}qtj=9`Q##Iq2Qq8-JM;6FLDlL~IGNIe!Ndk36uDukQBd*; zmWV*A*D+ujTSxc;8^jkhFwHC8Ej?wiG$nmZ9*AB{McAVxPbs+;6!BsSjOypxI0EL5 zmG4myDT))XnUiE%P{j`u?;u4l0llFTWcS3RI14pSzn0;{$NOXYmIt zVUbD35Wjba5Wx{2@>E7zk)biHsmXTqpoam_h)B^!-zi@QDJ1w*8qGcnQGSwd5cO1JTk* z8-a*d(2X18F*qV8GscZec7|QSqRH4dGx*sVNl4oe8p3<&XZmL5KLX%t8p{L-LH4BM zm?pd&33@Dpk9;lyzGo|s0PfO9JDma?Kl`q`7g^9oAH%RseIH8i_aWfypfc5F$EjAK zE@GE(pRr|7{17DX4_R4s6Vt z#00S)X_@n!59?rDNFeII>&$e#LKt!~MR88|g-wM-kxK!4QlRffqQOQjZ+wy}q!7R{ z?9X+GK=BUrfB?L%A1ny%dy#~H5}<8~egO9=0B6^(gD?yO18o|HAO-~8kPsshTmSzb z7!g8DOc^S%B&AibeJ+m)iJ`K)v{ig|9G}zt4*(w4rkQ>LAjX0|q>zeW-xn0R7zCB{ zeZ%lhBLF;|rR;f99nvZotX=>{j9Yrge(wF@9s+k)7_;0MSFeQ;WB^D{S_Tj%oIDQr zNkvwo1%;${t{|=I8Pfuv!v{tW1eKBcRgz?GNEC(1$#$zGD-ySu8B1ZGPdbSNnp+!8 zdnLo4X(sROk-YOn<8XP^@pA?Mz~zsIe~1pUyHh<0?K>Kr@5>Uk=Bn!CS-kdV$uzL{ zTm?j9$R_~E_}Xgr)3{FoNV{?!gkc!!Mn$C@L&b)~#=$9g{U{2vCu548h0coRqzMJo#e>PHq3x$LGf{_cd{0`G_x0$=;<{CrjA zl5qlV5ZtTsD=~y9I*>`mPvcL9}6RcUr{dz2g+$ABUvKJMz;KYF?%o&4{0F_cIEW_?3SRyHzwi^pg9nicr3Pv-NpWX45l@2l68fNl z?#?8;n@oRVfUhiIt&yUTb4Ji#RmuXW34jSg7>QtxB>jgXq8m{`{?X?04DR6^%%Q_V zx>gEPXe2RVM%Zzm8~!N!Vmc?2mDIO28*jx9v88gRzlnz2XvkvyU-X7eR3Ra)BSca# zQLAte7V)yd6&eleWlxK7LtS&FTiw$A@}%x;AR6!0hdal8Z|?b>w^1cIQ+ z9ZHU9)WVA2;Qv3x+QNtx2?B9uXIE*B1=)n+LNasvVjuq!KsnZ~lQT#&AOfsOkj=vv z39=C(*$%nGim8T4+>%_dYZ{3ZEEtE0GBF&d!DVt z0(T?;*d2bR`*+2{GuR@6Kvy)^x*{m2pdL(bSAl`qMS!2|FpWni!^pgY2=YneiStk# z7Nl=p-cF^hN=*3fP_9;Q2i=b0aAJe?_?N)<{hH=B255Mi?F`zmMwkEoRn~qu=#few zz+(YEZ-l9JTJU%Dod^)Canz}$JX0TXZarS8_fC(^kO(B1-HHtTsXp*o8$0RD6bU-4hSqX7ip6W}AUv1doj z0Ka_&?h=5rYfAwThGDR>-T#8#LYX2uP198URq#tuMzVB|F8xISFzlrQPon5F9Zmu? z9OD7RE1t$7P_5BsPTm5wS}22g{aEfWaz{~w01>DTTZ93|SvMRS8aS3*W>#;O?9!ZA z1h7vUoK}ql1Y`6bbMDPSHUrqW=TL;@ey6(vV7^X5t_dXn9o00;h{dlnAGEVl{T5OCxB5ts*OZfKS^O1R(uuWdNJ>*E${w_W8R7;Oq)g00vABz z7(`evxbh`lm-2n3wfV4Bn z0T2XYpcsQ8{DA*|(gcVZy9;>oAQuT9JJ5o<{sQ0wg89~QDSEKxARsQ{bIo}leSx6+ zF=_=6AhHN{5ZFO$Izc4x^`18UpOLVaEhr`v|1IO7*A65dO_GwU@b;b{aux7c@f`6WK>7J#)Y zNC6OrVJHRt|7+(CL((Mcya_rGHt--MU7NOZp9%1S1e~LV3<|+SV6(`smZ&0wdkK62 zBFfF!0iY-VA`}ENh9twGhq910hI3lKcK}Pv0)PG9vABUs&M*PhW#vr)UrQoHT&mD9 zU}NAmrd4MKY9q*A+ZFQnI`xi0Plp^nWb*{Rto~QV1^JA)MfK_G}Cg$MutPd!CY zF^4@-)?+Ao zK#ype+Rh~fU=RkPMOwP@{#O;D&<-zSvMsc3lq`K?691nG;H40@M+ktI z7%Tvb0`RnZ$1BKN@Fy8uG57PKkD zt*5!*`-N_vXh#5J#9i}%?b@IPz1nQA&{cj0?{W(uswV(EiGTr1@yh@nKti5RKu!=a zfLvvOF0lOln;D!CKy3y{Vt^F!u!I1@knsg(FdLHdnXuXq3t&dZfAB6La#szK5dJ`m z`#;b|8f4cKEb?I(7MU;_)XE1fmxJ+<<cEA&)bWemNUo!0D^&_ zgY^F|R@rP<8xCAF5f7MAwBm~Z4sn z0X(3OB>+-9XO3E!(Fz7=eA9;JOod!QD|X-s-EYsi{R6BifM}Wkh)f6!XpzDQPYlQa zHth^c43KUmBS!ZU(s+b)9bpYfSfdhKqC+GASiSuZ-k^iE&XJ3GP~?IpVz3q8=#h*b z(a7NR>3_to;r~y=NCF5Tx+DM+5(2J7!2q6h#FiLf4NB|@0=3RZrxB5kO#eq|rNg>p zup%D0KaMMMu}zsHhHHrq@c(p(9Do3#YXYD`qClO7Motj0Y6Cq%Ah#!A5s&Ez)S?@` qKF3yH + +pkgname=discount +pkgver=2.2.6 +_debver=2.2.6 +_debrel=1 +pkgrel=1 +pkgdesc='A Markdown implementation written in C' +arch=('i686' 'x86_64') +url="https://www.pell.portland.or.us/~orc/Code/discount/" +license=('Modified-BSD') +depends=('glibc') +makedepends=('quilt') +conflicts=('markdown') +provides=('markdown') +replaces=('markdown') +source=($pkgname-$pkgver.tar.gz::"https://github.com/Orc/discount/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/d/discount/discount_$_debver-$_debrel.debian.tar.xz") +sha512sums=('4c5956dea78aacd3a105ddac13f1671d811a5b2b04990cdf8485c36190c8872c4b1b9432a7236f669c34b07564ecd0096632dced54d67de9eaf4f23641417ecc' + '5d16cb14e339c95a24bca3f977075cda0380afe35fed50701a6c1958e6f3848145d31277969b9ca166c4045baf3230973437602fde7879bb0e29af3c560d35fb') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure.sh --prefix=/usr --enable-all-features --with-fenced-code --shared + make -j1 +} + +package() { + cd $pkgname-$pkgver + # fix ldconfig call + sed -e 's|/sbin/ldconfig|/sbin/ldconfig -n|' -i librarian.sh + + make DESTDIR="$pkgdir" install.everything + install -Dm644 COPYRIGHT -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/django/PKGBUILD b/django/PKGBUILD new file mode 100644 index 0000000..5122322 --- /dev/null +++ b/django/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgbase=django +pkgname=('python-django' 'tauthon-django') +pkgver=1.7.11 +pkgrel=1 +arch=('any') +license=('Modified-BSD') +url='http://www.djangoproject.com/' +makedepends=('tauthon' 'tauthon-setuptools' 'python' 'python-setuptools') +source=("https://www.djangoproject.com/m/releases/${pkgver:0:3}/Django-$pkgver.tar.gz") +sha512sums=('2e3415295ee6b590e366b09adb261baccb750519b9bcef1bb09bd52a2db705c8082bfc13440c621a5f41dd4f9bd626792eba4a572e78de3b7caf93c951c406ee') + +prepare() { + cd "$srcdir/Django-$pkgver" + + cp -a "$srcdir/Django-$pkgver" "$srcdir/Django-$pkgver-python2" + + find "$srcdir/Django-$pkgver-python2" -name '*.py' | \ + xargs sed -i "s|#!/usr/bin/env python$|#!/usr/bin/env tauthon|" +} + +build() { + cd "$srcdir/Django-$pkgver" + python setup.py build + + cd "$srcdir/Django-$pkgver-python2" + tauthon setup.py build +} + +package_python-django() { + pkgdesc="A high-level Python Web framework that encourages rapid development and clean design" + depends=('python' 'python-setuptools') + optdepends=('python-psycopg2: for PostgreSQL backend') + cd "$srcdir/Django-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 + + ln -s django-admin.py "$pkgdir"/usr/bin/django-admin3.py + ln -s django-admin "$pkgdir"/usr/bin/django-admin3 + install -Dm644 extras/django_bash_completion \ + "$pkgdir"/usr/share/bash-completion/completions/django-admin.py + ln -s django-admin.py \ + "$pkgdir"/usr/share/bash-completion/completions/django-admin + ln -s django-admin.py \ + "$pkgdir"/usr/share/bash-completion/completions/manage.py + + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} + +package_tauthon-django() { + pkgdesc="A high-level Tauthon Web framework that encourages rapid development and clean design" + depends=('tauthon' 'tauthon-setuptools') + optdepends=('tauthon-psycopg2: for PostgreSQL backend') + cd "$srcdir/Django-$pkgver-python2" + tauthon setup.py install --root="$pkgdir" --optimize=1 + + mv "$pkgdir"/usr/bin/django-admin.py "$pkgdir"/usr/bin/django-admin2.py + mv "$pkgdir"/usr/bin/django-admin "$pkgdir"/usr/bin/django-admin2 + # TODO: this probably won't work due to the `complete` command within not + # knowing about modified our exectuable names + install -Dm644 extras/django_bash_completion \ + "$pkgdir"/usr/share/bash-completion/completions/django-admin2.py + ln -s django-admin2.py \ + "$pkgdir"/usr/share/bash-completion/completions/django-admin2 + + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/djview/PKGBUILD b/djview/PKGBUILD new file mode 100644 index 0000000..e2d9035 --- /dev/null +++ b/djview/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=djview +pkgver=4.12 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Viewer for DjVu documents" +arch=('i686' 'x86_64') +url='https://djvu.sourceforge.net/' +license=('GPL-2' 'Expat') +depends=('qt-base' 'djvulibre') +makedepends=('qt-tools' 'quilt') +source=("https://downloads.sourceforge.net/djvu/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/d/djview4/djview4_${_debver}-${_debrel}.debian.tar.xz" + "djvulibre-djview4.appdata.xml") +sha512sums=('0314c409b5474bb5bbe81aa2dc44b24507dac6f7cfde8d275a9d3bb1c2046b6ce2173543618ab7cbb702dbe94d7b2d85d3e19df09fafea73bb8662ee2ba89a01' + '27ffef6cbe8a9f1cba6737e2b5238a1c848599c044a4a057c555c56899410c056bbe7f270df34182ee3c898f7e1b1891a4fff8bce0327ffb0fd7f548719770eb' + 'b4f24258008e4181f6588f2f5e3770f789d0154ddfd6a0d2f3585928ba019f7ec8b7f9e42b08c194eaec39bf93d67419adddb21c50f8913a8bab891097b9f6e6') + +prepare() { + cd ${pkgname}4-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd ${pkgname}4-$pkgver + ./configure \ + --prefix=/usr \ + --disable-nsdejavu + make +} + +package() { + cd ${pkgname}4-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 ../djvulibre-djview4.appdata.xml "$pkgdir/usr/share/metainfo/djvulibre-djview4.appdata.xml" + ln -s djview "$pkgdir/usr/bin/djview4" + install -Dm644 COPYING COPYRIGHT -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/djview/djvulibre-djview4.appdata.xml b/djview/djvulibre-djview4.appdata.xml new file mode 100644 index 0000000..b3494e8 --- /dev/null +++ b/djview/djvulibre-djview4.appdata.xml @@ -0,0 +1,37 @@ + + + net.sourceforge.djvu.DjView4 + djvulibre-djview4.desktop + DjView4 + Viewer for DjVu documents + CC0-1.0 + GPL-2.0 + Léon Bottou + +

DjView4 is a portable DjVu viewer

+

Highlights:

+
    +
  • Entirely based on the public djvulibre api.
  • +
  • Entirely written in portable Qt4/Qt5.
  • +
  • Works natively under Unix/X11, MS Windows, and MacOS X.
  • +
  • Continuous scrolling of pages
  • +
  • Side-by-side display of pages
  • +
  • Ability to specify a url to the djview command
  • +
  • All plugin and cgi options available from the command line
  • +
  • All silly annotations implemented
  • +
  • Display thumbnails as a grid
  • +
  • Display outlines
  • +
  • Page names supported (see djvused command set-page-title)
  • +
  • Metadata dialog (see djvused command set-meta)
  • +
  • Implemented as reusable Qt widgets
  • +
+
+ + + https://a.fsdn.com/con/app/proj/djvu/screenshots/djview.jpg + + + https://sourceforge.net/p/djvu/bugs/ + http://djvu.sourceforge.net/djview4.html + leon@bottou.org +
diff --git a/djvulibre/PKGBUILD b/djvulibre/PKGBUILD new file mode 100644 index 0000000..22a640e --- /dev/null +++ b/djvulibre/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=djvulibre +pkgver=3.5.28 +_debver=3.5.28 +_debrel=2 +pkgrel=1 +pkgdesc='Suite to create, manipulate and view DjVu (déjà vu) documents' +url='http://djvu.sourceforge.net/' +arch=('i686' 'x86_64') +license=('GPL-2') +makedepends=('librsvg-legacy' 'quilt') +depends=('libtiff' 'hicolor-icon-theme') +source=(https://downloads.sourceforge.net/project/djvu/DjVuLibre/$pkgver/djvulibre-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/d/djvulibre/djvulibre_$_debver-$_debrel.debian.tar.xz) +sha512sums=('db3b8a5b56d700e911be32057f721a2a597e6f52e6fade203ad75ad76ab2d8facff2e474fd18beea703ccd5fa6425352e619a8fda40e69add1724dbee26050c6' + 'cfe00fea2dd46ba9f19afd62821a3823b725deda33afc039fd2d51d7d9eeaac2c4277419404101d11f725d735c918e969954d8e3155d70811c567fd6c55db38b') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches ./debian/ + rm -rf "$srcdir"/debian + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --disable-desktopfiles + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + for sz in 22 32 48 64; do + install -Dm644 desktopfiles/prebuilt-hi${sz}-djvu.png "${pkgdir}/usr/share/icons/hicolor/${sz}x${sz}/mimetypes/image-vnd.djvu.mime.png" + done + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + diff --git a/dkms/0001-Revert-Make-newly-installed-modules-available-immedi.patch b/dkms/0001-Revert-Make-newly-installed-modules-available-immedi.patch new file mode 100644 index 0000000..582fd5e --- /dev/null +++ b/dkms/0001-Revert-Make-newly-installed-modules-available-immedi.patch @@ -0,0 +1,31 @@ +From ca38ccd38c69a096dafa51c426ee3548980d5e2a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=A9bastien=20Luttringer?= +Date: Sat, 8 Jul 2017 15:50:55 +0200 +Subject: [PATCH] Revert "Make newly installed modules available immediately" +To: dkms-devel@dell.com + +This reverts commit f5bfb12fef1fc06e56355cdba500eaa98d4e6aa8. +--- + dkms | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/dkms b/dkms +index a6cedc8..3ff71d5 100644 +--- a/dkms ++++ b/dkms +@@ -1522,12 +1522,6 @@ install_module() + exit 6 + } + +- # Make the newly installed modules available immediately +- find /sys/devices -name modalias -print0 | xargs -0 cat | xargs modprobe -a -b -q +- if [ -f /lib/systemd/system/systemd-modules-load.service ]; then +- systemctl restart systemd-modules-load.service +- fi +- + # Do remake_initrd things (save old initrd) + [[ $remake_initrd ]] && ! make_initrd "$kernelver" "$arch" && { + do_uninstall "$kernelver" "$arch" +-- +Sébastien "Seblu" Luttringer + diff --git a/dkms/PKGBUILD b/dkms/PKGBUILD new file mode 100644 index 0000000..5a910cf --- /dev/null +++ b/dkms/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=dkms +pkgver=2.8.4 +_debver=2.8.4 +_debrel=3 +pkgrel=3 +pkgdesc='Dynamic Kernel Modules System' +arch=('any') +url='https://github.com/dell/dkms' +license=('GPL-2') +depends=('bash' 'kmod' 'gcc' 'make' 'patch') +makedepends=('quilt') +optdepends=('linux-libre-lts-headers: build modules against the Hyperbola kernel') +backup=('etc/dkms/framework.conf') +install=$pkgname.install +source=("https://github.com/dell/dkms/archive/refs/tags/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/d/dkms/dkms_$_debver-$_debrel.debian.tar.xz" + 'hook.install' + 'hook.remove' + 'hook.sh' + '0001-Revert-Make-newly-installed-modules-available-immedi.patch') +sha512sums=('1b8b987b239db8cf00f367ee4f5faf13dc41b450f09fb046dc719e51d6a762d6b700bf41156d8011c3ea7e139064119d6717b60c1bf7fa0a75ea1fc63887baa5' + '54abdc6e00836e6589bfba29cbfb332fdd815b6d90aaa12566259c92b46152525346b3e8a9c02d06e84b56782046408639aba01254813bd4ff970de45d2c7add' + 'c3378f9f08353404e548ae58b6faae11ceb61f54f39197963b32aad581b7162ac805a892e1424dcb16e3efd6755b23690d86188369baaa10e37ebe2bca80788e' + '8beb2293dbd2302e8ac64667b4e08982967562ee4282b16e91329fcb53f6cfd97a4986d8886c4303c24eb22557c488fb0859087eccf7eadce97200e8a7e5087e' + '1848e18a19ad8e28a30a9ddbfdaee3dc4b3f13ef9b3398bf2eaf57d20e5ce5395a85957676840ed344afea2dca9a3f7ca909bcf833971476391b18fa7d7efd24' + '312da3a4a5d761381afb2e58a1c0f2766cd069d9de2319e637ef02ef86d9c8cf2b0961155a8000ad0a5ab218b440c8d83aedf56a6b7a29985fc7b33611bf379e') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches/* debian/patches + + quilt push -av + else + patch -p1 -i ../0001-Revert-Make-newly-installed-modules-available-immedi.patch + fi +} + +package() { + # alpm hook + install -D -m 644 hook.install "$pkgdir/usr/share/libalpm/hooks/70-dkms-install.hook" + install -D -m 644 hook.remove "$pkgdir/usr/share/libalpm/hooks/70-dkms-remove.hook" + install -D -m 755 hook.sh "$pkgdir/usr/lib/dkms/alpm-hook" + # upstream installer + cd $pkgname-$pkgver + # we don't need kconf files, so we install them outside $pkgdir + make \ + DESTDIR="$pkgdir" \ + BASHDIR="$pkgdir/usr/share/bash-completion/completions" \ + KCONF="$srcdir"/kconf \ + install + + install -D -m 644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +# vim:set ts=2 sw=2 et: diff --git a/dkms/dkms.install b/dkms/dkms.install new file mode 100644 index 0000000..1762f30 --- /dev/null +++ b/dkms/dkms.install @@ -0,0 +1,13 @@ +#!/bin/bash + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + if (( "$(vercmp $2 '2.2.0.3+git151023-2')" < 0 )); then + echo '===> dkms systemd startup service has been removed' + echo '===> modules building is now handled by alpm hooks at install time' + echo '===> startup modules loading must be done via modules-load.d' + fi +} + +# vim:set ts=2 sw=2 ft=sh et: diff --git a/dkms/hook.install b/dkms/hook.install new file mode 100644 index 0000000..cbdcd1c --- /dev/null +++ b/dkms/hook.install @@ -0,0 +1,14 @@ +[Trigger] +Operation = Install +Operation = Upgrade +Type = File +Target = usr/src/*/dkms.conf +Target = lib/modules/*/build/include/ +Target = lib/modules/*/modules.alias + +[Action] +Description = Install DKMS modules +Depends = dkms +When = PostTransaction +Exec = /usr/lib/dkms/alpm-hook install +NeedsTargets diff --git a/dkms/hook.remove b/dkms/hook.remove new file mode 100644 index 0000000..6c15009 --- /dev/null +++ b/dkms/hook.remove @@ -0,0 +1,16 @@ +[Trigger] +Operation = Upgrade +Operation = Remove +Type = File +Target = usr/src/*/dkms.conf +Target = lib/modules/*/build/include/ +Target = lib/modules/*/modules.alias + +[Action] +Description = Remove DKMS modules +Depends = dkms +When = PreTransaction +# SIGPIPE workaround. See FS#49816 +#Exec = /usr/lib/dkms/alpm-hook remove +Exec = /usr/bin/perl -e "$SIG{PIPE}='DEFAULT'; exec('/usr/lib/dkms/alpm-hook', 'remove');" +NeedsTargets diff --git a/dkms/hook.sh b/dkms/hook.sh new file mode 100644 index 0000000..55c0e2f --- /dev/null +++ b/dkms/hook.sh @@ -0,0 +1,194 @@ +#!/bin/sh + +# +# Copyright © 2018 Sébastien Luttringer +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# display what to run and run it quietly +run() { + echo "==> $*" + "$@" > /dev/null +} + +# check whether the dependencies of a module are installed +# $1: module name/module version +# $2: kernel version +check_dependency() { ( + source "$source_tree/${1/\//-}/dkms.conf" + for dep in "${BUILD_DEPENDS[@]}"; do + if ! [[ "$(dkms status -m "$dep" -k "$2")" =~ :[[:space:]]installed$ ]]; then + exit 1 + fi + done + exit 0 +) } + +# check whether the modules should be built with this kernel version +# $1: module name/module version +# $2: kernel version +check_buildexclusive() { + local BUILD_EXCLUSIVE_KERNEL=$(source "$source_tree/${1/\//-}/dkms.conf"; printf '%s\n' "$BUILD_EXCLUSIVE_KERNEL") + [[ "$2" =~ $BUILD_EXCLUSIVE_KERNEL ]] +} + +# handle actions on module addition/upgrade/removal +# $1: module name +# $2: module version +parse_module() { + pushd "$install_tree" >/dev/null + local path + for path in */build/; do + local kver="${path%%/*}" + dkms_register "$1" "$2" "$kver" + done + popd >/dev/null +} + +# handle actions on kernel addition/upgrade/removal +# $1: kernel version +parse_kernel() { + local path + for path in "$source_tree"/*-*/dkms.conf; do + if [[ -f "$path" && "$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then + dkms_register "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "$1" + fi + done +} + +# register a dkms module to install/remove +# this function suppress echo call for a module +# $1: module name, $2: module version, $3: kernel version +dkms_register() { + DKMS_MODULES["$1/$2/$3"]='' +} + +# install registered modules +dkms_install() { + local nvk mod kver + local -i retry=1 + + while (( $retry > 0 )); do + retry=0 + for nvk in "${!DKMS_MODULES[@]}"; do + mod=${nvk%/*} + kver=${nvk##*/} + # do not build excluded modules + if ! check_buildexclusive "$mod" "$kver"; then + unset DKMS_MODULES[$nvk] + continue + # skip modules with missing kernel headers + elif [[ ! -d "$install_tree/$kver/build/include" ]]; then + DKMS_MODULES[$nvk]="Missing kernel headers" + continue + # skip modules with missing kernel package + elif [[ ! -d "$install_tree/$kver/kernel" ]]; then + DKMS_MODULES[$nvk]="Missing kernel modules tree" + continue + # postpone modules with missing dependencies + elif ! check_dependency "$mod" "$kver"; then + DKMS_MODULES[$nvk]="Missing dependency" + continue + fi + # give it a try dkms + run dkms install "$mod" -k "$kver" + unset DKMS_MODULES[$nvk] + # maybe this module was a dep of another, so we retry + retry=1 + done + done +} + +# remove registered modules when built/installed +dkms_remove() { + local nvk mod kver + for nvk in "${!DKMS_MODULES[@]}"; do + mod=${nvk%/*} + kver=${nvk##*/} + state=$(dkms status -m "$mod" -k "$kver") + if [[ "$state" =~ :[[:space:]](built|installed)$ ]]; then + run dkms remove "$mod" -k "$kver" + fi + unset DKMS_MODULES[$nvk] + done +} + +# show information about failed modules +show_errors() { + local nvk mod kver + for nvk in "${!DKMS_MODULES[@]}"; do + mod=${nvk%/*} + kver=${nvk##*/} + echo "==> Unable to $DKMS_ACTION module $mod for kernel $kver: ${DKMS_MODULES[$nvk]}." + done +} + +# emulated program entry point +main() { + [[ -n "$DKMS_ALPM_HOOK_DEBUG" ]] && set -x + + # prevent each dkms call from failing with authorization errors + if (( EUID )); then + echo 'You must be root to use this hook' >&2 + exit 1 + fi + + # register DKMS action + case "$1" in + install|remove) + declare -r DKMS_ACTION="$1" + ;; + *) + echo "usage: ${0##*/} install|remove" >&2 + exit 1 + ;; + esac + + # dkms path from framework config + # note: the alpm hooks which trigger this script use static path + source_tree='/usr/src' + install_tree='/lib/modules' + source /etc/dkms/framework.conf + + # check source_tree and install_tree exists + local path + for path in "$source_tree" "$install_tree"; do + if [[ ! -d "$path" ]]; then + echo "==> Missing mandatory directory: $path. Exiting!" + return 1 + fi + done + + # storage for DKMS modules to install/remove + # we use associate arrays to prevent duplicate + declare -A DKMS_MODULES + + # parse stdin paths to guess what do do + while read -r path; do + if [[ "/$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then + parse_module "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" + elif [[ "/$path" =~ ^$install_tree/([^/]+)/ ]]; then + parse_kernel "${BASH_REMATCH[1]}" + fi + done + + dkms_$DKMS_ACTION + + show_errors + + return 0 +} + +main "$@" diff --git a/dmenu/PKGBUILD b/dmenu/PKGBUILD new file mode 100644 index 0000000..902ee9f --- /dev/null +++ b/dmenu/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=dmenu +pkgver=5.3 +pkgrel=1 +pkgdesc="Generic menu for X" +url='https://tools.suckless.org/dmenu/' +arch=('i686' 'x86_64') +license=('Expat') +depends=('sh' 'glibc' 'coreutils' 'libx11' 'libxinerama' 'libxft' 'freetype2' 'fontconfig') +source=("https://dl.suckless.org/tools/${pkgname}-${pkgver}.tar.gz") +sha512sums=('60f758134063ad7f304fbb0785c66dddc21461e5e5014f8735cf6d5c95dc22a177f069d48101e633ddffe5bbefc1118a2bf8b31daaf7b6438fdf6fe1bcb5d61c') + +prepare() { + cd ${pkgname}-${pkgver} + echo "CPPFLAGS+=${CPPFLAGS}" >> config.mk + echo "CFLAGS+=${CFLAGS}" >> config.mk + echo "LDFLAGS+=${LDFLAGS}" >> config.mk +} + +build() { + cd ${pkgname}-${pkgver} + make \ + X11INC=/usr/include/X11 \ + X11LIB=/usr/lib/X11 \ + FREETYPEINC=/usr/include/freetype2 +} + +package() { + cd ${pkgname}-${pkgver} + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/dmg2img/PKGBUILD b/dmg2img/PKGBUILD new file mode 100644 index 0000000..eaa1dff --- /dev/null +++ b/dmg2img/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=dmg2img +pkgver=1.6.7 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A free and libre CLI tool to uncompress DMG-files to the HFS+ IMG format" +arch=('i686' 'x86_64') +url='https://vu1tur.eu.org/tools/' +license=('GPL-2') +depends=('libressl' 'bzip2') +makedepends=('quilt') +source=("https://vu1tur.eu.org/tools/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/d/dmg2img/dmg2img_$_debver-$_debrel.debian.tar.xz") +sha512sums=('4c42841c5cdbf868b6038648a6c83e78d4b7f2010f7065d7b3f4c2c04d13af9489716c1dfa867aff5f3c3b3eef96dc3fc0610eff13fec139265f37f468e339e6' + '2df07abf79a3702789e8eeb7e76487cbc71ebdfed91b86cf7fa8e78c934b909bbd6847738922b58d132be490f388f1bf7939cb56e57056083f11b5a703df02ff') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make PREFIX="/usr" +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make PREFIX="/usr" DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/dmidecode/PKGBUILD b/dmidecode/PKGBUILD new file mode 100644 index 0000000..9df2c5a --- /dev/null +++ b/dmidecode/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=dmidecode +pkgver=3.3 +_debver=3.3 +_debrel=3 +pkgrel=1 +pkgdesc="Desktop Management Interface table related utilities" +arch=('i686' 'x86_64') +url="https://www.nongnu.org/dmidecode" +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=("https://download.savannah.nongnu.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.xz"{,.sig} + "https://deb.debian.org/debian/pool/main/d/dmidecode/dmidecode_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('dc77f40a7898011cea1b747d4677be2fbe8f52ec6ac460a5656de2f3389eca83bc416d6494acbe759971b5afce37b78f21ab55c34d62b1105b800e31566d1d22' + 'SKIP' + '1dd387f26fc99780b0c95d773eaf6da48873b80327871f2e8a11ecba3c95a013e53a469e91a20a3b53f118cfc5a5b60c14d2b2ea8ad84581d206c709e281366d') +validpgpkeys=('90DFD6523C57373D81F63D19865688D038F02FC8') # Jean Delvare + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-hurd.patch || true + + quilt push -av + fi +} + + +build() { + cd ${pkgname}-${pkgver} + make prefix=/usr CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" +} + +package() { + cd ${pkgname}-${pkgver} + make prefix=/usr DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/dnscrypt-proxy/PKGBUILD b/dnscrypt-proxy/PKGBUILD new file mode 100644 index 0000000..dd1b0f4 --- /dev/null +++ b/dnscrypt-proxy/PKGBUILD @@ -0,0 +1,138 @@ +# Maintainer: Jesus E. + + +_xsecretboxver=1.0.2 +_crypto_commit=eec23a3978adcfd26c29f4153eaa3e3d9b2cc53a +_servicever=1.0.0 + +pkgname=dnscrypt-proxy +pkgver=2.0.44 +pkgrel=3 +pkgdesc="A flexible DNS proxy, with support for modern encrypted DNS protocols such as DNSCrypt v2 and DNS-over-HTTP" +arch=('i686' 'x86_64') +url="https://dnscrypt.info" +license=('ISC') +depends=('glibc') +optdepends=('python-urllib3: for generate-domains-blacklist') +makedepends=('gcc-go') +install="${pkgname}.install" +backup=("etc/${pkgname}/${pkgname}.toml" + "etc/${pkgname}/blacklist.txt" + "etc/${pkgname}/cloaking-rules.txt" + "etc/${pkgname}/forwarding-rules.txt" + "etc/${pkgname}/ip-blacklist.txt" + "etc/${pkgname}/whitelist.txt") +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/dnscrypt/${pkgname}/archive/${pkgver}.tar.gz" + "xsecretbox-${_xsecretboxver}.tar.gz::https://github.com/jedisct1/xsecretbox/archive/refs/tags/${_xsecretboxver}.tar.gz" + "crypto-${_crypto_commit}.tar.gz::https://github.com/golang/crypto/archive/${_crypto_commit}.tar.gz" + "service-${_servicever}.tar.gz::https://github.com/kardianos/service/archive/refs/tags/v${_servicever}.tar.gz" + 'dnscrypt-proxy.confd' + 'dnscrypt-proxy.initd' + 'config-privacy.patch' + 'remove-go-systemd-support.patch' + 'fix-textflag.h.patch' + 'dnscrypt-proxy.run') +sha512sums=('009e2b669c1d6f6cd6b41f5e04d08735587f420dacdea8d422a3c12a62614c1ce1963deebca3af1f956070abd9ff5df9182cb27e31fa0fac8a95478739445801' + '90a3f0fc6719e91bcc8aaa2edb484659584a76b83292f91740bb01459e9327b1814f60e8bd415e07ece4efa2b9e03eda6b9052598e6628f00ff9c8ab82e5fd8a' + '225d2a1c05854c57ee1aac5a9faeb38c79b7878343c7e500c2d23e83a5d2b30f0871ca77fe0b2fcee795045e18e56fb4f2e851a1d81f9d5941a73f45f9afa20e' + '4884ab4c69d140d12e2c49ab21dba74647fb8ee8b11a7294b8ec1806768a2fc2976012e8f00bb5be235b009883cb72ec89ea036e18226827a3985ca18a8d91da' + '486ccc01e988cc082d1e0f943361ee96c71a8cf2f4b93e4f74e3885701c34b1fcba0ae522fce28d1102ec5818d39f0e6d092229d4793c402cbcde1ee06e30cf2' + 'b29918d9909bf8d409c108ca70830a7bfd1f7b03c5d0fa5340a779a8ae552b2a09faf16252371b015f7e50c8bc8535614fbed68503bc53b07b79ce100d506b1a' + 'e395df8ee71ebcc1eeccb653c0410bf0f4ce9d3c8c25681f727ba68f210b7ead7efd216635a0b925268ae667cc744b348eea6835927fa74bc377ab0e8f7a9d28' + 'b67cfca61d38eb6458a5c4bcea42ec4abe25cc5c5fde8bfee8fc34c5d8585a1553184e84f20bfef0812593a3a0497f7b2eca338b079d2a59ba08ed741aefe13d' + '4aa24244196a0c67216a10c1696910978a5dbeb1d4218dd8c4fe7d84e5ccd32dda109267ee2129cda3749be41110667f19f1b6626ffac67355f08e61f2a2e52f' + '5fc2e1433193a3c7aef80275716fac626dcad491caebd3b8f950f7e361c39d0caf099317610208b95fc636e6965d91c74be2599b20aac98d59ed6cbe9f9879ce') + +export GOOS=linux +case "$CARCH" in + x86_64) export GOARCH=amd64 ;; + i686) export GOARCH=386 GO386=387 ;; +esac + +# create a fake go path directory and pushd into it +# $1 real directory +# $2 gopath directory +_fake_gopath_pushd() { + install -d -m755 "/build/go/src/${2%/*}" + rm -rf "/build/go/src/$2" || true + ln -rsT "$1" "/build/go/src/$2" + pushd "/build/go/src/$2" >/dev/null +} + +_fake_gopath_popd() { + popd >/dev/null +} + +prepare() { + cd "$pkgname-$pkgver" + # remove support for unsafe and dangerous for privacy protocols + patch -Np1 -i $srcdir/config-privacy.patch + # fix textflag.h in i686 + patch -Np1 -i $srcdir/fix-textflag.h.patch + + # remove systemD + rm -v dnscrypt-proxy/systemd_linux.go || true + rm -v dnscrypt-proxy/service_linux.go || true + patch -Np1 -i $srcdir/remove-go-systemd-support.patch + + # use crypto eec23a3978adcfd26c29f4153eaa3e3d9b2cc53a + rm -rf vendor/golang.org/x/crypto || true + mv -T $srcdir/crypto-${_crypto_commit} vendor/golang.org/x/crypto + + # use xsecretbox 1.0.2 + rm -rv vendor/github.com/jedisct1/xsecretbox || true + mv -T $srcdir/xsecretbox-${_xsecretboxver} vendor/github.com/jedisct1/xsecretbox + + # use service 1.0.0 + rm -rf vendor/github.com/kardianos/service || true + mv -T $srcdir/service-${_servicever} vendor/github.com/kardianos/service + + # copy go packages from vendor + msg2 "Building golang.org" + _fake_gopath_pushd "$srcdir/$pkgname-$pkgver/vendor/golang.org" golang.org + _fake_gopath_popd + + msg2 "Building github.com" + _fake_gopath_pushd "$srcdir/$pkgname-$pkgver/vendor/github.com" github.com + _fake_gopath_popd + + msg2 "Building gopkg.in" + _fake_gopath_pushd "$srcdir/$pkgname-$pkgver/vendor/gopkg.in" gopkg.in + _fake_gopath_popd +} + +build() { + cd $pkgname-$pkgver/$pkgname + export CGO_CPPFLAGS="${CPPFLAGS}" + export CGO_CFLAGS="${CFLAGS}" + export CGO_CXXFLAGS="${CXXFLAGS}" + export CGO_LDFLAGS="${LDFLAGS}" + export GOFLAGS="-buildmode=pie -trimpath -ldflags=-linkmode=external -mod=readonly -modcacherw" + + go build +} + +package() { + local _config + cd $pkgname-$pkgver + # executable + install -vDm 755 "${pkgname}/${pkgname}" "${pkgdir}/usr/sbin/${pkgname}" + # config files + install -vDm 644 "${pkgname}/example-${pkgname}.toml" "${pkgdir}/etc/${pkgname}/${pkgname}.toml" + for _config in {{blacklist,ip-blacklist},{cloaking,forwarding}-rules,whitelist}.txt; do + install -vDm 644 "${pkgname}/example-${_config}" "${pkgdir}/etc/${pkgname}/${_config}" + done + # utils + install -vDm 644 utils/generate-domains-blacklists/*.{conf,txt} \ + -t "${pkgdir}/usr/share/${pkgname}/utils/generate-domains-blacklists" + install -vDm 755 utils/generate-domains-blacklists/generate-domains-blacklist.py \ + "${pkgdir}/usr/bin/generate-domains-blacklist" + # OpenRC and runit + install -Dm644 "$srcdir"/dnscrypt-proxy.confd "$pkgdir"/etc/conf.d/dnscrypt-proxy + install -Dm755 "$srcdir"/dnscrypt-proxy.initd "$pkgdir"/etc/init.d/dnscrypt-proxy + install -Dm755 "$srcdir/${pkgname}.run" "${pkgdir}/etc/sv/${pkgname}/run" + # license + install -vDm 644 LICENSE "$pkgdir/usr/share/licenses/${pkgname}/LICENSE" + # docs + install -vDm 644 {ChangeLog,README.md} -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/dnscrypt-proxy/config-privacy.patch b/dnscrypt-proxy/config-privacy.patch new file mode 100644 index 0000000..b9779eb --- /dev/null +++ b/dnscrypt-proxy/config-privacy.patch @@ -0,0 +1,250 @@ +diff --git a/dnscrypt-proxy/example-blacklist.txt b/dnscrypt-proxy/example-blacklist.txt +index a63e1e89..94031b83 100644 +--- a/dnscrypt-proxy/example-blacklist.txt ++++ b/dnscrypt-proxy/example-blacklist.txt +@@ -34,5 +34,5 @@ eth0.me + + ## Time-based rules + +-# *.youtube.* @time-to-sleep +-# facebook.com @work ++# invidious.namazso.eu @time-to-sleep ++# *.hyperbola.info @work +diff --git a/dnscrypt-proxy/example-cloaking-rules.txt b/dnscrypt-proxy/example-cloaking-rules.txt +index 7f98c2e3..8f85eeb4 100644 +--- a/dnscrypt-proxy/example-cloaking-rules.txt ++++ b/dnscrypt-proxy/example-cloaking-rules.txt +@@ -2,27 +2,9 @@ + # Cloaking rules # + ################################ + +-# The following example rules force "safe" (without adult content) search +-# results from Google, Bing and YouTube. +-# + # This has to be enabled with the `cloaking_rules` parameter in the main + # configuration file + +- +-www.google.* forcesafesearch.google.com +- +-www.bing.com strict.bing.com +- +-yandex.ru familysearch.yandex.ru # inline comments are allowed after a pound sign +- +-=duckduckgo.com safe.duckduckgo.com +- +-www.youtube.com restrictmoderate.youtube.com +-m.youtube.com restrictmoderate.youtube.com +-youtubei.googleapis.com restrictmoderate.youtube.com +-youtube.googleapis.com restrictmoderate.youtube.com +-www.youtube-nocookie.com restrictmoderate.youtube.com +- + # Multiple IP entries for the same name are supported. + # In the following example, the same name maps both to IPv4 and IPv6 addresses: + +diff --git a/dnscrypt-proxy/example-dnscrypt-proxy.toml b/dnscrypt-proxy/example-dnscrypt-proxy.toml +index ec40441c..cadadc97 100644 +--- a/dnscrypt-proxy/example-dnscrypt-proxy.toml ++++ b/dnscrypt-proxy/example-dnscrypt-proxy.toml +@@ -29,7 +29,7 @@ + ## + ## Remove the leading # first to enable this; lines starting with # are ignored. + +-# server_names = ['scaleway-fr', 'google', 'yandex', 'cloudflare'] ++# server_names = ['cs-ch', 'd0wn-is-ns2', 'ibksturm', 'securedns'] + + + ## List of local addresses and ports to listen to. Can be IPv4 and/or IPv6. +@@ -146,7 +146,7 @@ keepalive = 30 + ## This file is different from other log files, and will not be + ## automatically rotated by the application. + +-# log_file = 'dnscrypt-proxy.log' ++# log_file = '/var/log/dnscrypt-proxy/dnscrypt-proxy.log' + + + ## When using a log file, only keep logs from the most recent launch. +@@ -156,7 +156,7 @@ keepalive = 30 + + ## Use the system logger (syslog on Unix, Event Log on Windows) + +-# use_syslog = true ++use_syslog = true + + + ## Delay, in minutes, after which certificates are reloaded +@@ -189,7 +189,7 @@ cert_refresh_delay = 240 + ## This may also help on Intel CPUs running 32-bit operating systems. + ## + ## Keep tls_cipher_suite empty if you have issues fetching sources or +-## connecting to some DoH servers. Google and Cloudflare are fine with it. ++## connecting to some DoH servers. + + # tls_cipher_suite = [52392, 49199] + +@@ -206,11 +206,10 @@ cert_refresh_delay = 240 + ## Resolvers supporting DNSSEC are recommended. + ## + ## People in China may need to use 114.114.114.114:53 here. +-## Other popular options include 8.8.8.8 and 1.1.1.1. + ## + ## If more than one resolver is specified, they will be tried in sequence. + +-fallback_resolvers = ['9.9.9.9:53', '8.8.8.8:53'] ++fallback_resolvers = ['84.200.69.80:53', '212.129.46.32:53', '66.70.228.164:53', '172.104.136.243:53', '112.109.84.76:53'] + + + ## Always use the fallback resolver before the system DNS settings. +@@ -236,7 +235,7 @@ netprobe_timeout = 60 + ## On other operating systems, the connection will be initialized + ## but nothing will be sent at all. + +-netprobe_address = '9.9.9.9:53' ++# netprobe_address = '84.200.69.80:53' + + + ## Offline mode - Do not use any remote encrypted servers. +@@ -310,7 +309,7 @@ reject_ttl = 600 + + ## See the `example-forwarding-rules.txt` file for an example + +-# forwarding_rules = 'forwarding-rules.txt' ++# forwarding_rules = '/etc/dnscrypt-proxy/forwarding-rules.txt' + + + +@@ -324,7 +323,7 @@ reject_ttl = 600 + ## + ## See the `example-cloaking-rules.txt` file for an example + +-# cloaking_rules = 'cloaking-rules.txt' ++# cloaking_rules = '/etc/dnscrypt-proxy/cloaking-rules.txt' + + ## TTL used when serving entries in cloaking-rules.txt + +@@ -408,7 +407,7 @@ cache_neg_max_ttl = 600 + ## Path to the query log file (absolute, or relative to the same directory as the config file) + ## On non-Windows systems, can be /dev/stdout to log to the standard output (also set log_files_max_size to 0) + +- # file = 'query.log' ++ # file = '/var/log/dnscrypt-proxy/query.log' + + + ## Query log format (currently supported: tsv and ltsv) +@@ -434,7 +433,7 @@ cache_neg_max_ttl = 600 + + ## Path to the query log file (absolute, or relative to the same directory as the config file) + +- # file = 'nx.log' ++ # file = '/var/log/dnscrypt-proxy/nx.log' + + + ## Query log format (currently supported: tsv and ltsv) +@@ -469,7 +468,7 @@ cache_neg_max_ttl = 600 + + ## Optional path to a file logging blocked queries + +- # log_file = 'blocked.log' ++ # log_file = '/var/log/dnscrypt-proxy/blocked.log' + + + ## Optional log format: tsv or ltsv (default: tsv) +@@ -497,7 +496,7 @@ cache_neg_max_ttl = 600 + + ## Optional path to a file logging blocked queries + +- # log_file = 'ip-blocked.log' ++ # log_file = '/var/log/dnscrypt-proxy/ip-blocked.log' + + + ## Optional log format: tsv or ltsv (default: tsv) +@@ -525,7 +524,7 @@ cache_neg_max_ttl = 600 + + ## Optional path to a file logging whitelisted queries + +- # log_file = 'whitelisted.log' ++ # log_file = '/var/log/dnscrypt-proxy/whitelisted.log' + + + ## Optional log format: tsv or ltsv (default: tsv) +@@ -543,8 +542,8 @@ cache_neg_max_ttl = 600 + ## to apply the pattern 'schedule_name' only when it matches a time range of that schedule. + ## + ## For example, the following rule in a blacklist file: +-## *.youtube.* @time-to-sleep +-## would block access to YouTube during the times defined by the 'time-to-sleep' schedule. ++## invidious.namazso.eu @time-to-sleep ++## would block access to Invidious instance only during the times defined by the 'time-to-sleep' schedule. + ## + ## {after='21:00', before= '7:00'} matches 0:00-7:00 and 21:00-0:00 + ## {after= '9:00', before='18:00'} matches 9:00-18:00 +@@ -590,40 +589,15 @@ cache_neg_max_ttl = 600 + + [sources] + +- ## An example of a remote source from https://github.com/DNSCrypt/dnscrypt-resolvers ++ ## This list is maintained by Jesús E. < heckyel [at] hyperbola [dot] info > + +- [sources.'public-resolvers'] +- urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/public-resolvers.md', 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md'] +- cache_file = 'public-resolvers.md' +- minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' +- prefix = '' +- +- ## Anonymized DNS relays +- +- [sources.'relays'] +- urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/relays.md', 'https://download.dnscrypt.info/resolvers-list/v2/relays.md'] +- cache_file = 'relays.md' +- minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' ++ [sources.'extra-resolvers'] ++ urls = ['https://git.sr.ht/~heckyel/resolvers-list/blob/master/extra-resolvers.md'] ++ cache_file = '/var/cache/dnscrypt-proxy/extra-resolvers.md' ++ minisign_key = 'RWQIrgNLO4JgxhKU+K5L+z8Y0YTDZv68NZQ5hOAoBT1/admHrfLt9Eyl' + refresh_delay = 72 + prefix = '' + +- ## Quad9 over DNSCrypt - https://quad9.net/ +- +- # [sources.quad9-resolvers] +- # urls = ['https://www.quad9.net/quad9-resolvers.md'] +- # minisign_key = 'RWQBphd2+f6eiAqBsvDZEBXBGHQBJfeG6G+wJPPKxCZMoEQYpmoysKUN' +- # cache_file = 'quad9-resolvers.md' +- # prefix = 'quad9-' +- +- ## Another example source, with resolvers censoring some websites not appropriate for children +- ## This is a subset of the `public-resolvers` list, so enabling both is useless +- +- # [sources.'parental-control'] +- # urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v2/parental-control.md', 'https://download.dnscrypt.info/resolvers-list/v2/parental-control.md'] +- # cache_file = 'parental-control.md' +- # minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' +- +- + + ######################################### + # Servers with known bugs # +diff --git a/dnscrypt-proxy/example-forwarding-rules.txt b/dnscrypt-proxy/example-forwarding-rules.txt +index 97a4859e..bf274292 100644 +--- a/dnscrypt-proxy/example-forwarding-rules.txt ++++ b/dnscrypt-proxy/example-forwarding-rules.txt +@@ -20,5 +20,5 @@ + # internal 192.168.1.1 + # localdomain 192.168.1.1 + +-## Forward queries for example.com and *.example.com to 9.9.9.9 and 8.8.8.8 +-# example.com 9.9.9.9,8.8.8.8 ++## Forward queries for example.com and *.example.com to 127.0.0.1 and 0.0.0.0 ++# example.com 127.0.0.1,0.0.0.0 +diff --git a/dnscrypt-proxy/example-whitelist.txt b/dnscrypt-proxy/example-whitelist.txt +index 66190784..ca3dc0ca 100644 +--- a/dnscrypt-proxy/example-whitelist.txt ++++ b/dnscrypt-proxy/example-whitelist.txt +@@ -21,5 +21,5 @@ tracker.debian.org + + ## Time-based rules + +-# *.youtube.* @time-to-play +-# facebook.com @play ++# invidious.namazso.eu @time-to-play ++# *.hyperbola.info @play diff --git a/dnscrypt-proxy/dnscrypt-proxy.confd b/dnscrypt-proxy/dnscrypt-proxy.confd new file mode 100644 index 0000000..7d34f09 --- /dev/null +++ b/dnscrypt-proxy/dnscrypt-proxy.confd @@ -0,0 +1,3 @@ +#DNSCRYPT_PROXY_OPTS="-config /etc/dnscrypt-proxy/dnscrypt-proxy.toml" +#DNSCRYPT_PROXY_USER="dnscrypt" +#DNSCRYPT_PROXY_GROUP="dnscrypt" diff --git a/dnscrypt-proxy/dnscrypt-proxy.initd b/dnscrypt-proxy/dnscrypt-proxy.initd new file mode 100644 index 0000000..d1684e2 --- /dev/null +++ b/dnscrypt-proxy/dnscrypt-proxy.initd @@ -0,0 +1,25 @@ +#!/sbin/openrc-run +# Copyright 1999-2018 Gentoo Foundation +# Copyright 2017-2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +command="/usr/sbin/dnscrypt-proxy" +command_args="${DNSCRYPT_PROXY_OPTS:--config /etc/dnscrypt-proxy/dnscrypt-proxy.toml}" +command_background="yes" +command_user="${DNSCRYPT_PROXY_USER:-dnscrypt}:${DNSCRYPT_PROXY_GROUP:-dnscrypt}" +pidfile="/run/dnscrypt-proxy.pid" + +depend() { + use net logger + provide dns +} + +start_pre() { + # Allow binding to 127.0.0.1:53 as non-root user + if [ $(uname -s) = "Linux" ]; then + /sbin/setcap 'cap_net_bind_service=+ep' /usr/sbin/dnscrypt-proxy + fi + + checkpath -q -d -m 0755 -o "${command_user}" /var/cache/dnscrypt-proxy + checkpath -q -d -m 0755 -o "${command_user}" /var/log/dnscrypt-proxy +} diff --git a/dnscrypt-proxy/dnscrypt-proxy.install b/dnscrypt-proxy/dnscrypt-proxy.install new file mode 100644 index 0000000..6194139 --- /dev/null +++ b/dnscrypt-proxy/dnscrypt-proxy.install @@ -0,0 +1,34 @@ +post_install() { + if ! getent group dnscrypt &>/dev/null; then + groupadd -r dnscrypt >/dev/null + fi + if ! getent passwd dnscrypt &>/dev/null; then + useradd -r -g dnscrypt -G adm -d /dev/null -s /bin/nologin dnscrypt >/dev/null + fi + if ! groups dnscrypt | grep adm &>/dev/null; then + gpasswd -a dnscrypt adm >/dev/null + fi + dnscrypt_shell=$(getent passwd dnscrypt | cut -d: -f7) + if [ "$dnscrypt_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin dnscrypt &>/dev/null + fi + echo '>>> DNSCrypt, add next line inside of /etc/dhcpcd.conf' + echo '>>> static domain_name_servers=127.0.0.1::1' +} + +post_upgrade() { + post_install + if (( $(vercmp $2 2.0.0-1) < 0 )); then + echo '>>> The configuration file(s) and setup of DNSCrypt has changed considerably since version 1.x.' + echo '>>> Please refer to https://dnscrypt.info/doc for help!' + fi +} + +post_remove() { + if getent passwd dnscrypt &>/dev/null; then + userdel dnscrypt >/dev/null + fi + if getent group dnscrypt &>/dev/null; then + groupdel dnscrypt >/dev/null + fi +} diff --git a/dnscrypt-proxy/dnscrypt-proxy.run b/dnscrypt-proxy/dnscrypt-proxy.run new file mode 100644 index 0000000..dc57365 --- /dev/null +++ b/dnscrypt-proxy/dnscrypt-proxy.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml 2>&1 diff --git a/dnscrypt-proxy/fix-textflag.h.patch b/dnscrypt-proxy/fix-textflag.h.patch new file mode 100644 index 0000000..d6da990 --- /dev/null +++ b/dnscrypt-proxy/fix-textflag.h.patch @@ -0,0 +1,172 @@ +diff --git a/vendor/golang.org/x/net/internal/socket/rawconn.go b/vendor/golang.org/x/net/internal/socket/rawconn.go +index b07b8900..0c6bbc68 100644 +--- a/vendor/golang.org/x/net/internal/socket/rawconn.go ++++ b/vendor/golang.org/x/net/internal/socket/rawconn.go +@@ -7,7 +7,6 @@ + import ( + "errors" + "net" +- "os" + "syscall" + ) + +@@ -42,23 +41,22 @@ func NewConn(c net.Conn) (*Conn, error) { + + func (o *Option) get(c *Conn, b []byte) (int, error) { + var operr error +- var n int + fn := func(s uintptr) { +- n, operr = getsockopt(s, o.Level, o.Name, b) ++ return + } + if err := c.c.Control(fn); err != nil { + return 0, err + } +- return n, os.NewSyscallError("getsockopt", operr) ++ return 0, operr + } + + func (o *Option) set(c *Conn, b []byte) error { + var operr error + fn := func(s uintptr) { +- operr = setsockopt(s, o.Level, o.Name, b) ++ return + } + if err := c.c.Control(fn); err != nil { + return err + } +- return os.NewSyscallError("setsockopt", operr) ++ return operr + } +diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go +index d01fc4c7..c7ec17f3 100644 +--- a/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go ++++ b/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go +@@ -27,7 +27,6 @@ func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + var operr error + var n int + fn := func(s uintptr) bool { +- n, operr = recvmmsg(s, hs, flags) + if operr == syscall.EAGAIN { + return false + } +@@ -60,7 +59,6 @@ func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + var operr error + var n int + fn := func(s uintptr) bool { +- n, operr = sendmmsg(s, hs, flags) + if operr == syscall.EAGAIN { + return false + } +diff --git a/vendor/golang.org/x/net/internal/socket/rawconn_msg.go b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go +index d5ae3f8e..3b64621c 100644 +--- a/vendor/golang.org/x/net/internal/socket/rawconn_msg.go ++++ b/vendor/golang.org/x/net/internal/socket/rawconn_msg.go +@@ -23,7 +23,6 @@ func (c *Conn) recvMsg(m *Message, flags int) error { + var operr error + var n int + fn := func(s uintptr) bool { +- n, operr = recvmsg(s, &h, flags) + if operr == syscall.EAGAIN { + return false + } +@@ -60,7 +59,6 @@ func (c *Conn) sendMsg(m *Message, flags int) error { + var operr error + var n int + fn := func(s uintptr) bool { +- n, operr = sendmsg(s, &h, flags) + if operr == syscall.EAGAIN { + return false + } +diff --git a/vendor/golang.org/x/net/internal/socket/sys.go b/vendor/golang.org/x/net/internal/socket/sys.go +index ee492ba8..7e8cf2b7 100644 +--- a/vendor/golang.org/x/net/internal/socket/sys.go ++++ b/vendor/golang.org/x/net/internal/socket/sys.go +@@ -25,7 +25,7 @@ func init() { + } else { + NativeEndian = binary.BigEndian + } +- kernelAlign = probeProtocolStack() ++ return + } + + func roundup(l int) int { +diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_386.go b/vendor/golang.org/x/net/internal/socket/sys_linux_386.go +index 235b2cc0..36de2c38 100644 +--- a/vendor/golang.org/x/net/internal/socket/sys_linux_386.go ++++ b/vendor/golang.org/x/net/internal/socket/sys_linux_386.go +@@ -4,52 +4,7 @@ + + package socket + +-import ( +- "syscall" +- "unsafe" +-) +- +-func probeProtocolStack() int { return 4 } +- + const ( +- sysSETSOCKOPT = 0xe +- sysGETSOCKOPT = 0xf +- sysSENDMSG = 0x10 +- sysRECVMSG = 0x11 +- sysRECVMMSG = 0x13 +- sysSENDMMSG = 0x14 ++ sysRECVMMSG = 0x13 ++ sysSENDMMSG = 0x10 + ) +- +-func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) +-func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) +- +-func getsockopt(s uintptr, level, name int, b []byte) (int, error) { +- l := uint32(len(b)) +- _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0) +- return int(l), errnoErr(errno) +-} +- +-func setsockopt(s uintptr, level, name int, b []byte) error { +- _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) +- return errnoErr(errno) +-} +- +-func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { +- n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) +- return int(n), errnoErr(errno) +-} +- +-func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { +- n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) +- return int(n), errnoErr(errno) +-} +- +-func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { +- n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) +- return int(n), errnoErr(errno) +-} +- +-func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { +- n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) +- return int(n), errnoErr(errno) +-} +diff --git a/vendor/golang.org/x/net/internal/socket/sys_linux_386.s b/vendor/golang.org/x/net/internal/socket/sys_linux_386.s +index 93e7d75e..5b68771a 100644 +--- a/vendor/golang.org/x/net/internal/socket/sys_linux_386.s ++++ b/vendor/golang.org/x/net/internal/socket/sys_linux_386.s +@@ -2,10 +2,10 @@ + // Use of this source code is governed by a BSD-style + // license that can be found in the LICENSE file. + +-#include "textflag.h" ++//#include "textflag.h" + +-TEXT ·socketcall(SB),NOSPLIT,$0-36 +- JMP syscall·socketcall(SB) ++//TEXT ·socketcall(SB),NOSPLIT,$0-36 ++// JMP syscall·socketcall(SB) + +-TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 +- JMP syscall·rawsocketcall(SB) ++//TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 ++// JMP syscall·rawsocketcall(SB) diff --git a/dnscrypt-proxy/remove-go-systemd-support.patch b/dnscrypt-proxy/remove-go-systemd-support.patch new file mode 100644 index 0000000..7e89d23 --- /dev/null +++ b/dnscrypt-proxy/remove-go-systemd-support.patch @@ -0,0 +1,97 @@ +diff --git a/dnscrypt-proxy/config.go b/dnscrypt-proxy/config.go +index 2a195719..731a2155 100644 +--- a/dnscrypt-proxy/config.go ++++ b/dnscrypt-proxy/config.go +@@ -572,9 +572,6 @@ func ConfigLoad(proxy *Proxy, flags *ConfigFlags) error { + for _, listenAddrStr := range proxy.localDoHListenAddresses { + proxy.addLocalDoHListener(listenAddrStr) + } +- if err := proxy.addSystemDListeners(); err != nil { +- dlog.Fatal(err) +- } + } + _ = pidfile.Write() + // if 'userName' is set and we are the parent process drop privilege and exit +diff --git a/dnscrypt-proxy/main.go b/dnscrypt-proxy/main.go +index 6f21d083..28fc3cdc 100644 +--- a/dnscrypt-proxy/main.go ++++ b/dnscrypt-proxy/main.go +@@ -82,7 +82,6 @@ func main() { + } + + app.proxy = NewProxy() +- _ = ServiceManagerStartNotify() + if len(*svcFlag) != 0 { + if svc == nil { + dlog.Fatal("Built-in service installation is not supported on this platform") +diff --git a/dnscrypt-proxy/privilege_linux.go b/dnscrypt-proxy/privilege_linux.go +index 5e73037e..8a525bd4 100644 +--- a/dnscrypt-proxy/privilege_linux.go ++++ b/dnscrypt-proxy/privilege_linux.go +@@ -47,10 +47,6 @@ func (proxy *Proxy) dropPrivilege(userStr string, fds []*os.File) { + dlog.Fatal(err) + } + +- if err := ServiceManagerReadyNotify(); err != nil { +- dlog.Fatal(err) +- } +- + args = append(args, "-child") + + dlog.Notice("Dropping privileges") +diff --git a/dnscrypt-proxy/proxy.go b/dnscrypt-proxy/proxy.go +index 24b406f0..07d038ec 100644 +--- a/dnscrypt-proxy/proxy.go ++++ b/dnscrypt-proxy/proxy.go +@@ -228,11 +228,6 @@ func (proxy *Proxy) StartProxy() { + } + if liveServers > 0 { + dlog.Noticef("dnscrypt-proxy is ready - live servers: %d", liveServers) +- if !proxy.child { +- if err := ServiceManagerReadyNotify(); err != nil { +- dlog.Fatal(err) +- } +- } + } else if err != nil { + dlog.Error(err) + dlog.Notice("dnscrypt-proxy is waiting for at least one server to be reachable") +diff --git a/go.mod b/go.mod +index 4ed0460b..2f3c27b5 100644 +--- a/go.mod ++++ b/go.mod +@@ -5,7 +5,6 @@ go 1.14 + require ( + github.com/BurntSushi/toml v0.3.1 + github.com/VividCortex/ewma v1.1.1 +- github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf + github.com/dchest/safefile v0.0.0-20151022103144-855e8d98f185 + github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect + github.com/facebookgo/pidfile v0.0.0-20150612191647-f242e2999868 +diff --git a/go.sum b/go.sum +index 0356d8d0..e93150b0 100644 +--- a/go.sum ++++ b/go.sum +@@ -6,8 +6,6 @@ github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmH + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= + github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 h1:52m0LGchQBBVqJRyYYufQuIbVqRawmubW3OFGqK1ekw= + github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635/go.mod h1:lmLxL+FV291OopO93Bwf9fQLQeLyt33VJRUg5VJ30us= +-github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU= +-github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= + github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= + github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= + github.com/dchest/safefile v0.0.0-20151022103144-855e8d98f185 h1:3T8ZyTDp5QxTx3NU48JVb2u+75xc040fofcBaN+6jPA= +diff --git a/vendor/modules.txt b/vendor/modules.txt +index c6e8c437..77a18629 100644 +--- a/vendor/modules.txt ++++ b/vendor/modules.txt +@@ -8,10 +8,6 @@ github.com/VividCortex/ewma + github.com/aead/chacha20/chacha + # github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 + github.com/aead/poly1305 +-# github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf +-## explicit +-github.com/coreos/go-systemd/activation +-github.com/coreos/go-systemd/daemon + # github.com/davecgh/go-spew v1.1.1 + github.com/davecgh/go-spew/spew + # github.com/dchest/safefile v0.0.0-20151022103144-855e8d98f185 diff --git a/dnsmasq/0001-Handle-binding-upstream-servers-to-an-interface.patch b/dnsmasq/0001-Handle-binding-upstream-servers-to-an-interface.patch new file mode 100644 index 0000000..76bdbfc --- /dev/null +++ b/dnsmasq/0001-Handle-binding-upstream-servers-to-an-interface.patch @@ -0,0 +1,69 @@ +diff --git a/src/dnsmasq.h b/src/dnsmasq.h +index 1e21005b..c6067f7e 100644 +--- a/src/dnsmasq.h ++++ b/src/dnsmasq.h +@@ -544,7 +544,7 @@ struct serverfd { + int fd; + union mysockaddr source_addr; + char interface[IF_NAMESIZE+1]; +- unsigned int ifindex, used, preallocated; ++ unsigned int ifindex, used; + struct serverfd *next; + }; + +diff --git a/src/network.c b/src/network.c +index 3600250b..a2bdf1e3 100644 +--- a/src/network.c ++++ b/src/network.c +@@ -1409,11 +1409,15 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname, unsi + return NULL; + } + ++ if (intname && strlen(intname) != 0) ++ ifindex = if_nametoindex(intname); /* index == 0 when not binding to an interface */ ++ + /* may have a suitable one already */ + for (sfd = daemon->sfds; sfd; sfd = sfd->next ) + if (ifindex == sfd->ifindex && + sockaddr_isequal(&sfd->source_addr, addr) && +- strcmp(intname, sfd->interface) == 0) ++ strcmp(intname, sfd->interface) == 0 && ++ ifindex == sfd->ifindex) + return sfd; + + /* need to make a new one. */ +@@ -1441,7 +1445,6 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname, unsi + sfd->source_addr = *addr; + sfd->next = daemon->sfds; + sfd->ifindex = ifindex; +- sfd->preallocated = 0; + daemon->sfds = sfd; + + return sfd; +@@ -1465,7 +1468,7 @@ void pre_allocate_sfds(void) + addr.in.sin_len = sizeof(struct sockaddr_in); + #endif + if ((sfd = allocate_sfd(&addr, "", 0))) +- sfd->preallocated = 1; ++ sfd->used = 1; + + memset(&addr, 0, sizeof(addr)); + addr.in6.sin6_family = AF_INET6; +@@ -1475,7 +1478,7 @@ void pre_allocate_sfds(void) + addr.in6.sin6_len = sizeof(struct sockaddr_in6); + #endif + if ((sfd = allocate_sfd(&addr, "", 0))) +- sfd->preallocated = 1; ++ sfd->used = 1; + } + + for (srv = daemon->servers; srv; srv = srv->next) +@@ -1630,7 +1633,7 @@ void check_servers(void) + + /* don't garbage collect pre-allocated sfds. */ + for (sfd = daemon->sfds; sfd; sfd = sfd->next) +- sfd->used = sfd->preallocated; ++ sfd->used = 0; + + for (count = 0, serv = daemon->servers; serv; serv = serv->next) + { diff --git a/dnsmasq/PKGBUILD b/dnsmasq/PKGBUILD new file mode 100644 index 0000000..f195314 --- /dev/null +++ b/dnsmasq/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgname=dnsmasq +pkgver=2.85 +pkgrel=1 +pkgdesc="Lightweight, easy to configure DNS forwarder and DHCP server" +url="http://www.thekelleys.org.uk/dnsmasq/doc.html" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc' 'gmp' 'libidn' 'libnetfilter_conntrack' 'nettle') +makedepends=('gettext-tiny') +optdepends=('logger: message logging support') +backup=('etc/dnsmasq.conf') +install=$pkgname.install +source=("https://www.thekelleys.org.uk/$pkgname/$pkgname-$pkgver.tar.xz"{,.asc} + '0001-Handle-binding-upstream-servers-to-an-interface.patch' + 'remove-dbus.patch' + 'dnsmasq.initd' + 'dnsmasq.run') +sha512sums=('8beefe76b46f7d561f40d0900ba68b260a199cb62ab5b653746e3a1104c04fb8899b9e7a160a1be4fe8782bfb1607b556e9ffb9c25c4e99653e4bc74fcc03b09' + 'SKIP' + 'e00f1f7ac6c9ccab3bcc5c605cf7c772f673824f07993315e0aa17179d2e4ae234aad6780fddaa026a924610ba921fc5dc2d1c03e4e7cd28bc5461ba5d989e1e' + '3c49837d918bc33a4660148a23fc4a23e00ee01a0870bed89e54e537ce0601c31e694ef46acf16cb9e9444a62294455f40c33cda4c801b79c730ecbfb3105b2b' + '8cf3092fcc095c307009d12a150883386bd1b0dcdc9cac0c5d1a24df80405bdba89497c88a1e2ac1e1259d3684bc6a6089f477a4f735fb8d0f4edcc29d6e9a06' + '05586daa918401c036fbf27f79c8883fc19de35f5feb2a9373eba90ed5302f615439cd117be55f0e4db638cd879ce453ef664503970952bf07ed1a8468fcb918') +validpgpkeys=('D6EACBD6EE46B834248D111215CDDA6AE19135A2') # Simon Kelley + +_build_copts="-DHAVE_DNSSEC -DHAVE_IDN -DHAVE_CONNTRACK" + +prepare() { + cd "$pkgname-$pkgver" + + # Handle binding upstream servers to an interface + patch -Np1 -i "$srcdir/0001-Handle-binding-upstream-servers-to-an-interface.patch" + patch -Np1 -i "$srcdir/remove-dbus.patch" +} + +build() { + cd "$pkgname-$pkgver" + + make \ + CFLAGS="$CPPFLAGS $CFLAGS" \ + LDFLAGS="$LDFLAGS" \ + PREFIX=/usr \ + COPTS="$_build_copts" \ + all-i18n +} + +package() { + cd "$pkgname-$pkgver" + + # need to pass COPTS here to avoid rebuilding the binary. + make \ + COPTS="$_build_copts" \ + PREFIX=/usr DESTDIR="$pkgdir" \ + install install-i18n + + install -Dm644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING + + install -Dm644 "dnsmasq.conf.example" "$pkgdir/etc/dnsmasq.conf" + install -Dm755 "$srcdir/dnsmasq.initd" "$pkgdir/etc/init.d/dnsmasq" + install -Dm755 "$srcdir/dnsmasq.run" "$pkgdir/etc/sv/dnsmasq/run" + + # DNSSEC setup + sed -i 's,%%PREFIX%%,/usr,' "$pkgdir"/etc/dnsmasq.conf + install -Dm644 "trust-anchors.conf" "$pkgdir"/usr/share/dnsmasq/trust-anchors.conf +} + +# vim: ts=2 sw=2 et ft=sh diff --git a/dnsmasq/dnsmasq.initd b/dnsmasq/dnsmasq.initd new file mode 100644 index 0000000..ed487b9 --- /dev/null +++ b/dnsmasq/dnsmasq.initd @@ -0,0 +1,23 @@ +#!/sbin/openrc-run +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 or later + +extra_started_commands="reload" + +pidfile="/var/run/dnsmasq.pid" +command="/usr/sbin/dnsmasq" +command_args="-x ${pidfile} ${DNSMASQ_OPTS}" +retry="TERM/3/TERM/5" + +depend() { + provide dns + need localmount net + after bootmisc + use logger +} + +reload() { + ebegin "Reloading ${SVCNAME}" + kill -HUP $(cat "${pidfile}") + eend $? +} diff --git a/dnsmasq/dnsmasq.install b/dnsmasq/dnsmasq.install new file mode 100644 index 0000000..bf904bc --- /dev/null +++ b/dnsmasq/dnsmasq.install @@ -0,0 +1,19 @@ +post_install() { + if ! getent passwd dnsmasq &>/dev/null; then + useradd -r -d / -c 'dnsmasq daemon' -s /bin/nologin dnsmasq >/dev/null + fi + dnsmasq_shell=$(getent passwd dnsmasq | cut -d: -f7) + if [ "$dnsmasq_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin dnsmasq &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd dnsmasq &>/dev/null; then + userdel dnsmasq >/dev/null + fi +} diff --git a/dnsmasq/dnsmasq.run b/dnsmasq/dnsmasq.run new file mode 100644 index 0000000..856fd3e --- /dev/null +++ b/dnsmasq/dnsmasq.run @@ -0,0 +1,3 @@ +#!/bin/sh +mkdir -p /var/lib/misc +exec dnsmasq -k -u dnsmasq -g dnsmasq 2>&1 diff --git a/dnsmasq/remove-dbus.patch b/dnsmasq/remove-dbus.patch new file mode 100644 index 0000000..06a10d0 --- /dev/null +++ b/dnsmasq/remove-dbus.patch @@ -0,0 +1,119 @@ +diff --git a/Makefile b/Makefile +index e4c3f5c9..044caa33 100644 +--- a/Makefile ++++ b/Makefile +@@ -9,11 +9,11 @@ + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. +-# ++# + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + +-# NOTE: Building the i18n targets requires GNU-make ++# NOTE: Building the i18n targets requires GNU-make + + + # Variables you may well want to override. +@@ -23,12 +23,12 @@ BINDIR = $(PREFIX)/sbin + MANDIR = $(PREFIX)/share/man + LOCALEDIR = $(PREFIX)/share/locale + BUILDDIR = $(SRC) +-DESTDIR = ++DESTDIR = + CFLAGS = -Wall -W -O2 +-LDFLAGS = +-COPTS = +-RPM_OPT_FLAGS = +-LIBS = ++LDFLAGS = ++COPTS = ++RPM_OPT_FLAGS = ++LIBS = + + ################################################################# + +@@ -51,17 +51,17 @@ top!=pwd + # GNU make way. + top?=$(CURDIR) + +-dbus_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DBUS $(PKG_CONFIG) --cflags dbus-1` +-dbus_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DBUS $(PKG_CONFIG) --libs dbus-1` ++dbus_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DBUS $(PKG_CONFIG) --cflags dbus-1` ++dbus_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DBUS $(PKG_CONFIG) --libs dbus-1` + ubus_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_UBUS "" --copy '-lubox -lubus'` +-idn_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_IDN $(PKG_CONFIG) --cflags libidn` +-idn_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_IDN $(PKG_CONFIG) --libs libidn` ++idn_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_IDN $(PKG_CONFIG) --cflags libidn` ++idn_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_IDN $(PKG_CONFIG) --libs libidn` + idn2_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LIBIDN2 $(PKG_CONFIG) --cflags libidn2` + idn2_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LIBIDN2 $(PKG_CONFIG) --libs libidn2` + ct_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_CONNTRACK $(PKG_CONFIG) --cflags libnetfilter_conntrack` + ct_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_CONNTRACK $(PKG_CONFIG) --libs libnetfilter_conntrack` +-lua_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --cflags lua5.2` +-lua_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --libs lua5.2` ++lua_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --cflags lua5.2` ++lua_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --libs lua5.2` + nettle_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --cflags 'nettle hogweed' \ + HAVE_CRYPTOHASH $(PKG_CONFIG) --cflags nettle \ + HAVE_NETTLEHASH $(PKG_CONFIG) --cflags nettle` +@@ -90,12 +90,12 @@ hdrs = dnsmasq.h config.h dhcp-protocol.h dhcp6-protocol.h \ + all : $(BUILDDIR) + @cd $(BUILDDIR) && $(MAKE) \ + top="$(top)" \ +- build_cflags="$(version) $(dbus_cflags) $(idn2_cflags) $(idn_cflags) $(ct_cflags) $(lua_cflags) $(nettle_cflags)" \ +- build_libs="$(dbus_libs) $(idn2_libs) $(idn_libs) $(ct_libs) $(lua_libs) $(sunos_libs) $(nettle_libs) $(gmp_libs) $(ubus_libs)" \ +- -f $(top)/Makefile dnsmasq ++ build_cflags="$(version) $(idn2_cflags) $(idn_cflags) $(ct_cflags) $(lua_cflags) $(nettle_cflags)" \ ++ build_libs="$(idn2_libs) $(idn_libs) $(ct_libs) $(lua_libs) $(sunos_libs) $(nettle_libs) $(gmp_libs) $(ubus_libs)" \ ++ -f $(top)/Makefile dnsmasq + + mostly_clean : +- rm -f $(BUILDDIR)/*.mo $(BUILDDIR)/*.pot ++ rm -f $(BUILDDIR)/*.mo $(BUILDDIR)/*.pot + rm -f $(BUILDDIR)/.copts_* $(BUILDDIR)/*.o $(BUILDDIR)/dnsmasq.a $(BUILDDIR)/dnsmasq + + clean : mostly_clean +@@ -108,7 +108,7 @@ install : all install-common + install-common : + $(INSTALL) -d $(DESTDIR)$(BINDIR) + $(INSTALL) -d $(DESTDIR)$(MANDIR)/man8 +- $(INSTALL) -m 644 $(MAN)/dnsmasq.8 $(DESTDIR)$(MANDIR)/man8 ++ $(INSTALL) -m 644 $(MAN)/dnsmasq.8 $(DESTDIR)$(MANDIR)/man8 + $(INSTALL) -m 755 $(BUILDDIR)/dnsmasq $(DESTDIR)$(BINDIR) + + all-i18n : $(BUILDDIR) +@@ -126,16 +126,16 @@ install-i18n : all-i18n install-common + cd $(BUILDDIR); $(top)/bld/install-mo $(DESTDIR)$(LOCALEDIR) $(INSTALL) + cd $(MAN); ../bld/install-man $(DESTDIR)$(MANDIR) $(INSTALL) + +-merge : ++merge : + @cd $(BUILDDIR) && $(MAKE) top="$(top)" -f $(top)/Makefile dnsmasq.pot + for f in `cd $(PO); echo *.po`; do \ + echo -n msgmerge $(PO)/$$f && $(MSGMERGE) --no-wrap -U $(PO)/$$f $(BUILDDIR)/dnsmasq.pot; \ + done + + # Canonicalise .po file. +-%.po : ++%.po : + @cd $(BUILDDIR) && $(MAKE) -f $(top)/Makefile dnsmasq.pot +- mv $(PO)/$*.po $(PO)/$*.po.orig && $(MSGMERGE) --no-wrap $(PO)/$*.po.orig $(BUILDDIR)/dnsmasq.pot >$(PO)/$*.po; ++ mv $(PO)/$*.po $(PO)/$*.po.orig && $(MSGMERGE) --no-wrap $(PO)/$*.po.orig $(BUILDDIR)/dnsmasq.pot >$(PO)/$*.po; + + $(BUILDDIR): + mkdir -p $(BUILDDIR) +@@ -163,10 +163,10 @@ $(objs:.o=.c) $(hdrs): + $(objs): $(copts_conf) $(hdrs) + + .c.o: +- $(CC) $(CFLAGS) $(COPTS) $(i18n) $(build_cflags) $(RPM_OPT_FLAGS) -c $< ++ $(CC) $(CFLAGS) $(COPTS) $(i18n) $(build_cflags) $(RPM_OPT_FLAGS) -c $< + + dnsmasq : $(objs) +- $(CC) $(LDFLAGS) -o $@ $(objs) $(build_libs) $(LIBS) ++ $(CC) $(LDFLAGS) -o $@ $(objs) $(build_libs) $(LIBS) + + dnsmasq.pot : $(objs:.o=.c) $(hdrs) + $(XGETTEXT) -d dnsmasq --foreign-user --omit-header --keyword=_ -o $@ -i $(objs:.o=.c) diff --git a/docbook-to-man/PKGBUILD b/docbook-to-man/PKGBUILD new file mode 100644 index 0000000..e1cf4b3 --- /dev/null +++ b/docbook-to-man/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=docbook-to-man +pkgver=2.0.0 +_debver=$pkgver +_debrel=45 +pkgrel=1 +pkgdesc="Batch converter from DocBook SGML to nroff/troff man macros." +arch=('i686' 'x86_64') +url='http://www.oasis-open.org/docbook/tools/dtm/' +license=('Expat' 'GPL-2') +depends=('opensp') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/d/docbook-to-man/docbook-to-man_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/d/docbook-to-man/docbook-to-man_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('1aa28a4c2622b0b22eaf68773cd4b839f7ab09b5d44118726f1b815b026a15b7eb2e04ad02c7465296e2fba5472648a608d4cba7c9f9500acd7d8b19763a3a6a' + 'e0fb52e00b3da80258c68ff17b7002c0734d9b29da75e805ac66f9af38abf1a585a5a9960cc2acf621e27650d687de4c2952ea97bf80f7502d2023e40631ddc1') + +prepare() { + mv "$pkgname-$pkgver.orig" "$pkgname-$pkgver" + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0009-remove-sp-dependency.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + make ROOT="$pkgdir/usr/" +} + +package() { + cd $pkgname-$pkgver + install -d "$pkgdir"/usr/{bin,share,share/sgml/transpec} + make ROOT="$pkgdir/usr/" install + install -Dm644 debian/copyright -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/docbook-xml/LICENSE b/docbook-xml/LICENSE new file mode 100644 index 0000000..e3482f0 --- /dev/null +++ b/docbook-xml/LICENSE @@ -0,0 +1,24 @@ + Copyright 1992-2006 HaL Computer Systems, Inc., + O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software + Corporation, Norman Walsh, Sun Microsystems, Inc., and the + Organization for the Advancement of Structured Information + Standards (OASIS). + + See also http://docbook.org/specs/ + + Permission to use, copy, modify and distribute the DocBook XML DTD + and its accompanying documentation for any purpose and without fee + is hereby granted in perpetuity, provided that the above copyright + notice and this paragraph appear in all copies. The copyright + holders make no representation about the suitability of the DTD for + any purpose. It is provided "as is" without expressed or implied + warranty. + + If you modify the DocBook DTD in any way, except for declaring and + referencing additional sets of general entities and declaring + additional notations, label your DTD as a variant of DocBook. See + the maintenance documentation for more information. + + Please direct all questions, bug reports, or suggestions for + changes to the docbook@lists.oasis-open.org mailing list. For more + information, see http://www.oasis-open.org/docbook/. diff --git a/docbook-xml/PKGBUILD b/docbook-xml/PKGBUILD new file mode 100644 index 0000000..9d2022b --- /dev/null +++ b/docbook-xml/PKGBUILD @@ -0,0 +1,111 @@ +# Maintainer: Jesus E. + +_vers=(4.{2..5}) + +pkgname=docbook-xml +pkgver=${_vers[-1]} +pkgrel=3 +pkgdesc="A widely used XML scheme for writing documentation and help" +url='https://www.oasis-open.org/docbook/' +arch=('any') +license=('HPND') +depends=('libxml2') +install=docbook-xml.install +source=("https://docbook.org/xml/4.1.2/docbkx412.zip" + "LICENSE") +noextract=("docbkx412.zip") + +for _ver in ${_vers[@]}; do + source+=("https://docbook.org/xml/$_ver/docbook-xml-$_ver.zip") + noextract+=("docbook-xml-$_ver.zip") +done + +sha512sums=('f700591a671694ca0ac51f5b5b7e825df5c0b3604b20baa6afd3aaafa7ce99470ca1c261781b105b42bfa5485c23217cf3db821b3fcf2ebdae9df07bb8ae4063' + 'd852ab8e1442af4a91ffc32b9bb37377d98171dbc379cfd9787a2e06fc5c9b8ed04c5cd156ff5b7799973250011389456a3a3584ed4ae99362420c15235fcbb5' + '0c836346130d1e8f4e26e00959f6b4fd2c3c11269ba5cbf11cdc904724e189606f431c99cd5ab188877daa0eb44c58d0bc30556df3b51df480396818d61c4e0a' + 'f5090fb74884bae3d4fac8a3c5060bffff5d6a74272de183c181a7642e4b91f4ed32ad028537d198010782c3d98575ce679672f76a9749ed124432195886a7cb' + '7df5af4df24e4618b09814e4e20c147c722962531f03a40c28cd60f1db16b4c330420adf96adb7d66ed6eda84046ee91b467fd6f6fbfac2201537e2080735d76' + '1ee282fe86c9282610ee72c0e1d1acfc03f1afb9dc67166f438f2703109046479edb6329313ecb2949db27993077e077d111501c10b8769ebb20719eb6213d27') + +package() { + local ver xml + + mkdir -p "$pkgdir/etc/xml" + xmlcatalog --noout --create "$pkgdir/etc/xml/docbook-xml" + + mkdir docbook-xml-4.1.2 + bsdtar -C docbook-xml-4.1.2 -xf docbkx412.zip + for ver in ${_vers[@]}; do + mkdir docbook-xml-$ver + bsdtar -C docbook-xml-$ver -xf docbook-xml-$ver.zip + done + + for ver in 4.1.2 ${_vers[@]}; do + pushd docbook-xml-$ver + mkdir -p "$pkgdir/usr/share/xml/docbook/xml-dtd-$ver" + cp -dr docbook.cat *.dtd ent/ *.mod \ + "$pkgdir/usr/share/xml/docbook/xml-dtd-$ver" + popd + + xml= + case $ver in + 4.1.2) xml=' XML' ;;& + *) + xmlcatalog --noout --add "public" \ + "-//OASIS//DTD DocBook XML V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/docbookx.dtd" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//DTD DocBook$xml CALS Table Model V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/calstblx.dtd" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//DTD XML Exchange Table Model 19990315//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/soextblx.dtd" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ELEMENTS DocBook$xml Information Pool V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbpoolx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ELEMENTS DocBook$xml Document Hierarchy V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbhierx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ENTITIES DocBook$xml Additional General Entities V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbgenent.mod" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ENTITIES DocBook$xml Notations V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbnotnx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ENTITIES DocBook$xml Character Entities V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbcentx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + ;;& + 4.[45]) + xmlcatalog --noout --add "public" \ + "-//OASIS//ELEMENTS DocBook XML HTML Tables V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/htmltblx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + ;;& + *) + xmlcatalog --noout --add "rewriteSystem" \ + "http://www.oasis-open.org/docbook/xml/$ver" \ + "/usr/share/xml/docbook/xml-dtd-$ver" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "rewriteURI" \ + "http://www.oasis-open.org/docbook/xml/$ver" \ + "/usr/share/xml/docbook/xml-dtd-$ver" \ + "$pkgdir/etc/xml/docbook-xml" + ;;& + esac + done + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 LICENSE + + # fix permissions + find "$pkgdir" -type f -exec chmod -c a-x {} + + chmod -Rc u=rwX,go=rX "$pkgdir" +} diff --git a/docbook-xml/docbook-xml.install b/docbook-xml/docbook-xml.install new file mode 100644 index 0000000..97a6243 --- /dev/null +++ b/docbook-xml/docbook-xml.install @@ -0,0 +1,42 @@ +post_install() { + if [ -e etc/xml/catalog.preserve ]; then + mv etc/xml/catalog.preserve etc/xml/catalog + elif [ ! -e etc/xml/catalog ]; then + xmlcatalog --noout --create etc/xml/catalog + fi + xmlcatalog --noout --add "delegatePublic" \ + "-//OASIS//ENTITIES DocBook XML" \ + "file:///etc/xml/docbook-xml" \ + etc/xml/catalog + xmlcatalog --noout --add "delegatePublic" \ + "-//OASIS//DTD DocBook XML" \ + "file:///etc/xml/docbook-xml" \ + etc/xml/catalog + xmlcatalog --noout --add "delegateSystem" \ + "http://www.oasis-open.org/docbook/" \ + "file:///etc/xml/docbook-xml" \ + etc/xml/catalog + xmlcatalog --noout --add "delegateURI" \ + "http://www.oasis-open.org/docbook/" \ + "file:///etc/xml/docbook-xml" \ + etc/xml/catalog +} + +# arg 1: the new package version +# arg 2: the old package version +pre_upgrade() { + if [ $(vercmp $2 4.5) -lt 0 ]; then + xmlcatalog --del "file:///etc/xml/docbook" etc/xml/catalog > etc/xml/catalog.preserve + fi +} + +post_upgrade() { + if [ $(vercmp $2 4.5) -ge 0 ]; then + post_remove + fi + post_install +} + +post_remove() { + xmlcatalog --noout --del file:///etc/xml/docbook-xml etc/xml/catalog +} diff --git a/docbook-xsl/PKGBUILD b/docbook-xsl/PKGBUILD new file mode 100644 index 0000000..9154800 --- /dev/null +++ b/docbook-xsl/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=docbook-xsl +pkgver=1.79.2 +_debver=$pkgver +_debrel=1 +pkgrel=4 +pkgdesc="XML stylesheets for Docbook-xml transformations" +url='https://docbook.org/' +arch=('any') +license=('Expat') +depends=('libxml2' 'libxslt' 'docbook-xml') +makedepends=('quilt') +install=$pkgname.install +source=(https://github.com/docbook/xslt10-stylesheets/releases/download/release%2F$pkgver/docbook-xsl{,-nons}-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/d/docbook-xsl/docbook-xsl_${_debver}+dfsg-${_debrel}.debian.tar.xz) +sha512sums=('cd375e7a2339bcd9d24936b370c4371b351cab7c8a79044e785d0300dab75bed5a5c9b9076d4fba32d39b22535edfc6f449a7b1086139ad8bf54eab844b9434e' + '8764c4176abd9662f9005e7d76b1cfcceb18882404c11256a8c19bf3b44cbe4e5ff9c73b1902c4d6611708cc9ae483fe21e6185a19a3b9aeb2abcb9c19e73862' + 'ff4514570b1a5cb034ec9d0b333d74eb674861407d3be9df3dfd075597b3eadec7c8123e090c3c0b1a784da9d53b47a6102ffc8e7d8ab44779296c7184a4f2d0') + +prepare() { + mv $pkgname{-$pkgver,} + mv $pkgname-nons{-$pkgver,} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + # Doesn't apply and seems unimportant + rm -v debian/patches/0005-catalog.xml-Compatibility-with-1.79.1-or-earlier.patch || true + rm -v debian/patches/681116_multiarch_manpage_template.patch || true + + quilt push -av + fi + + cd $pkgname-nons + patch -Np2 -i ${srcdir}/debian/patches/765567_non-recursive_string_subst.patch +} + +package() { + local pkgroot ns dir + for ns in -nons ''; do + pkgroot="$pkgdir/usr/share/xml/docbook/xsl-stylesheets-$pkgver$ns" + dir=$pkgname$ns + + install -Dt "$pkgroot" -m644 $dir/VERSION{,.xsl} + + ( + shopt -s nullglob # ignore missing files + for fn in assembly common eclipse epub epub3 fo highlighting html \ + htmlhelp javahelp lib manpages params profiling roundtrip template \ + website xhtml xhtml-1_1 xhtml5 + do + install -Dt "$pkgroot/$fn" -m644 $dir/$fn/*.{xml,xsl,dtd,ent} + done + ) + done + + install -d "$pkgdir/etc/xml" + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 $dir/COPYING +} diff --git a/docbook-xsl/docbook-xsl.install b/docbook-xsl/docbook-xsl.install new file mode 100644 index 0000000..05f92eb --- /dev/null +++ b/docbook-xsl/docbook-xsl.install @@ -0,0 +1,37 @@ +_xmlcatalog() { + xmlcatalog --noout "$@" etc/xml/catalog +} + +post_install() { + [[ -f etc/xml/catalog ]] || _xmlcatalog --create + + local ver x new=${1%-*} + + for ver in $new current; do + for x in rewriteSystem rewriteURI; do + _xmlcatalog --add $x http://cdn.docbook.org/release/xsl/$ver \ + /usr/share/xml/docbook/xsl-stylesheets-$new + + _xmlcatalog --add $x http://docbook.sourceforge.net/release/xsl-ns/$ver \ + /usr/share/xml/docbook/xsl-stylesheets-$new + + _xmlcatalog --add $x http://docbook.sourceforge.net/release/xsl/$ver \ + /usr/share/xml/docbook/xsl-stylesheets-$new-nons + done + done +} + +post_upgrade() { + post_remove $2 + post_install $1 +} + +post_remove() { + local old=${1%-*} + _xmlcatalog --del /usr/share/xml/docbook/xsl-stylesheets-$old + if (( $(vercmp $1 1.79.2-1) >= 0 )); then + _xmlcatalog --del /usr/share/xml/docbook/xsl-stylesheets-$old-nons + fi +} + +# vim:set ft=sh sw=2 et: diff --git a/docbook2x/PKGBUILD b/docbook2x/PKGBUILD new file mode 100644 index 0000000..c85e171 --- /dev/null +++ b/docbook2x/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=docbook2x +pkgver=0.8.8 +_debver=0.8.8 +_debrel=17 +pkgrel=1 +pkgdesc="A software package that converts DocBook documents into the traditional Unix man page format and the GNU Texinfo format." +arch=('i686' 'x86_64') +url='http://docbook2x.sourceforge.net' +license=('Expat') +depends=('glibc' 'perl-sgmls' 'perl-xml-parser' 'perl-xml-sax' 'libxslt' + 'openjade' 'perl-xml-sax-expat') +makedepends=('texinfo' 'quilt') +source=(https://downloads.sourceforge.net/$pkgname/docbook2X-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/d/docbook2x/docbook2x_$_debver-$_debrel.debian.tar.xz) +sha512sums=('cc336017ad734fc62d96d289105e8ea154c418a03a37f3e21b0b3520063f8b466b4aae5a5aec2e0b83f6324c6c79b5557247a93338d0a9882a94a44112f6b65c' + '85ee99f753cb6494830726b88f9379b2a50fccc034204ed06c4ac6295cdf3e8654e39286347033f207714e060f4d27d6f705a01611270896b7da22563cc082aa') + +prepare() { + cd "$srcdir"/docbook2X-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -e 's/AM_CONFIG_HEADER(/AC_CONFIG_HEADERS(/' -i configure.ac + autoreconf -vfi +} + +build() { + cd docbook2X-$pkgver + # to avoid file conflicts with docbook2* from docbook-utils + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --program-transform-name 's,docbook2,db2x_docbook2,' + make +} + +package() { + cd docbook2X-$pkgver + make DESTDIR="$pkgdir" install + install -D -m0644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname + sed -i 's|http://docbook2x.sf.net/latest|/usr/share/docbook2X|g' \ + "$pkgdir"/usr/bin/db2x_xsltproc +} diff --git a/docx2txt/PKGBUILD b/docx2txt/PKGBUILD new file mode 100644 index 0000000..f46376b --- /dev/null +++ b/docx2txt/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=docx2txt +pkgver=1.4 +_debver=1.4 +_debrel=5 +pkgrel=1 +pkgdesc="Recovers text from DOCX files, with good formatting." +arch=('any') +url='http://docx2txt.sourceforge.net' +license=('GPL-3') +depends=('perl' 'unzip') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tgz + https://deb.debian.org/debian/pool/main/d/docx2txt/docx2txt_$_debver-$_debrel.debian.tar.xz) +sha512sums=('5e59cd4065f409c20e17b29d3935a2637147392e86a325b28b78748d3b3867ce91f14f3349621b3c95b2ce6a8e38e33cf0816d1f9dccbebfdde9ba29fbd7f5b3' + 'fad758f67726b5b4c87041fc9839d9681f2c298d186b4bdbd44632f6b46f915b02f1cd5588090b7341e8904d84c81c26e5c1a50dc05c5c7b0003978183e10743') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + install -Dm644 docx2txt.config "$pkgdir/etc/docx2txt.config" + install -Dm755 docx2txt.pl "$pkgdir/usr/bin/docx2txt" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + diff --git a/dos2unix/PKGBUILD b/dos2unix/PKGBUILD new file mode 100644 index 0000000..8251550 --- /dev/null +++ b/dos2unix/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=dos2unix +pkgver=7.4.1 +pkgrel=1 +pkgdesc='Text file format converter' +arch=('i686' 'x86_64') +url='https://waterlan.home.xs4all.nl/dos2unix.html' +license=('Simplified-BSD') +depends=('glibc') +makedepends=('perl' 'gettext-tiny') +conflicts=('hd2u') +source=(https://waterlan.home.xs4all.nl/${pkgname}/${pkgname}-${pkgver}.tar.gz) +sha512sums=('81e7cff82d95b298fb218b073f54d17fa851a7507fbd54b3cd9af7c1efa6a7bd3cf59f7a84ffbaf395403bf458650763e1755944451b24f708878a9c62316dc4') + +build() { + cd $pkgname-$pkgver + make LDFLAGS_USER=${LDFLAGS} +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/dosbox/PKGBUILD b/dosbox/PKGBUILD new file mode 100644 index 0000000..6808f1d --- /dev/null +++ b/dosbox/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=dosbox +pkgver=0.74.3 +_realpkgver=0.74-3 +_debver=0.74-3 +_debrel=3 +pkgrel=3 +pkgdesc="Emulator with builtin DOS for running DOS Games" +arch=('i686' 'x86_64') +url='https://dosbox.sourceforge.net/' +license=('GPL-2' 'Modified-BSD') +depends=('sdl_net' 'zlib' 'sdl_sound' 'libpng' 'alsa-lib' 'gcc-libs' 'glu') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/$pkgname/$pkgname-$_realpkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/d/dosbox/dosbox_$_debver-$_debrel.debian.tar.xz") +sha512sums=('3770f1578e71730168fba01809585f2a05cf8c4d420524687ba28791d242faad294401bb9cd268bba725798e1db853551f274dc00a4024331f5dcef9f87f8f5f' + '7817c042a85c09a903bebcfb7be5ef76c1ad197e9032340484722091e0d298509cd6c4edd8cd6df8bd5dde24d7e39df4e2a58809ddbb82b6f9f67a29f29fe5c0') + +prepare() { + cd "${srcdir}/$pkgname-$_realpkgver" + if [[ ${_realpkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${srcdir}/$pkgname-$_realpkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc/dosbox + make +} + +package() { + cd "${srcdir}/$pkgname-$_realpkgver" + make DESTDIR="${pkgdir}" install + + # install docs, make does not install them + install -Dm644 README "${pkgdir}"/usr/share/doc/$pkgname/README + install -Dm644 docs/README.video "${pkgdir}"/usr/share/doc/$pkgname/README.video + + # install icon and desktop-file + install -Dm644 "debian/icons/hicolor/48x48/apps/$pkgname.png" -t "${pkgdir}/usr/share/pixmaps" + install -Dm644 "debian/$pkgname.desktop" -t "${pkgdir}/usr/share/applications" + + # license + install -Dm644 COPYING debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/dotconf/PKGBUILD b/dotconf/PKGBUILD new file mode 100644 index 0000000..e2a4df6 --- /dev/null +++ b/dotconf/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=dotconf +pkgver=1.3 +_debver=$pkgver +_debrel=0.3 +pkgrel=1 +pkgdesc="A C library for parsing configuration files" +arch=('i686' 'x86_64') +url='https://github.com/williamh/dotconf' +license=('LGPL-2.1') +depends=('glibc') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/d/dotconf/dotconf_$pkgver.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/d/dotconf/dotconf_$_debver-$_debrel.debian.tar.xz") +sha512sums=('6a8fa52ea498def8387568c4033fd31b6f27a89b0dc3ce7641d389e7db8dea5c0c402fdbdd9fc7a63abd6b052e5c82f6e21357f980afd5ed89cd8752a09fe8ac' + '47854ca9dbfab2756f843443f16b8685cd5605e8ae6d03834457e63853d466ba0e11428f772d07421916a2669baa8347f34a21ae60de55048aabf0e3005588e2') + +prepare() { + mv "williamh-${pkgname}-4cd7b3a" "$pkgname-$pkgver" + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + autoreconf -i + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/dovecot/PKGBUILD b/dovecot/PKGBUILD new file mode 100644 index 0000000..c3a6d33 --- /dev/null +++ b/dovecot/PKGBUILD @@ -0,0 +1,115 @@ +# Maintainer: Jesus E. + +# --->>> remember to rebuild/bump pigeonhole in one step <<<--- + +pkgname=dovecot +pkgver=2.3.13 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="A free and libre IMAP and POP3 server written with security primarily in mind" +url='https://dovecot.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1' 'Expat') +depends=('krb5' 'libressl' 'sqlite' 'libsodium' 'postgresql-libs' 'bzip2' 'lz4' 'expat' 'curl') +makedepends=('libcap' 'libldap' 'libsodium' 'lua' 'quilt') +optdepends=('libldap: ldap plugin' + 'xz: imap zlib plugin' + 'lua: LUA auth and push support') +provides=('imap-server' 'pop3-server') +options=('!emptydirs') +install=dovecot.install +source=("https://dovecot.org/releases/2.3/${pkgname}-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/d/dovecot/dovecot_${_debver}+dfsg1-${_debrel}+deb11u1.debian.tar.xz" + "dovecot.ld.so.conf" + "dovecot.initd" + "dovecot.run") +sha512sums=('758a169fba8925637ed18fa7522a6f06c9fe01a1707b1ca0d0a4d8757c578a8e117c91733e8314403839f9a484bbcac71ce3532c82379eb583b480756d556a95' + 'SKIP' + 'd9db746b355e135aa44405f8c500dba387af32660b4e1ecd16e15753e224c10815b94b3e92be24bca5551273ce6e5a9339cb3782e92ecaeafef81e6f4c64b2e8' + 'c3c34db6179f43f13b198670e7d162af06cf69fe163be50202d1246dc1025ef182ac169597bef10c003bc545439651fd031e41acf91b76654e21c09228654d6e' + '488a1213514f066fdc7b97e69a1a8336eb4c83054d138d94a63bc733a2163d0b316a6485bf1dde6c4caae92c7dc8d9bd58a4c723b6c0e81d4b130ebd91875baa' + '5bf3eb1d92bcee2fb6679180871e9b7da9d22f809a59009c0acd95c85e64d13fb03f8b88a516d38c4414a919e41af616ef9b986c4285300107c45ff16755780d') +validpgpkeys=('E643F0BDFDCD04D9FFCB6279C948525140558AC9' # Timo Sirainen + '2BE74AAB3EE754DFB9C80D3318A348AEED409DA1') # Dovecot Community Edition + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/skip-rfc-subdir.patch || true + rm -v debian/patches/Correct-misspellings.patch || true + rm -v debian/patches/dovecot_name.patch || true + rm -v debian/patches/exampledir.patch || true + rm -v debian/patches/mboxlocking.patch || true + rm -v debian/patches/split-protocols.patch || true + rm -v debian/patches/ssl-cert-location.patch || true + rm -v debian/patches/systemd-service-fixes.patch || true + rm -v debian/patches/systemd-sd-notify-support.patch || true + + quilt push -av + fi + + # fix path in helper script + sed -i 's:OPENSSLCONFIG=${OPENSSLCONFIG-dovecot-openssl.cnf}:OPENSSLCONFIG=${OPENSSLCONFIG- /etc/ssl/dovecot-openssl.cnf}:' doc/mkcert.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix=/usr --sysconfdir=/etc \ + --sbindir=/usr/sbin \ + --localstatedir=/var \ + --libexecdir=/usr/libexec \ + --disable-static \ + --without-systemdsystemunitdir \ + --without-pam \ + --without-lucene \ + --without-mysql \ + --with-rundir=/run/dovecot \ + --with-moduledir=/usr/lib/dovecot/modules \ + --with-nss \ + --with-pgsql \ + --with-sqlite \ + --with-ssl=openssl \ + --with-ssldir=/etc/ssl \ + --with-gssapi \ + --with-ldap=plugin \ + --with-lua=plugin \ + --with-zlib \ + --with-bzlib \ + --with-lzma \ + --with-lz4 \ + --with-libcap \ + --with-solr \ + --with-sodium \ + --with-docs + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + + install -d -m755 "${pkgdir}/etc/dovecot/conf.d" + rm -f "${pkgdir}/etc/dovecot/README" + + install -Dm644 COPYING* -t "$pkgdir"/usr/share/licenses/$pkgname + install -Dm755 "$srcdir"/dovecot.initd "$pkgdir"/etc/init.d/dovecot + install -Dm755 "$srcdir/dovecot.run" "$pkgdir/etc/sv/dovecot/run" + + # install mkcert helper script + install -m 755 doc/mkcert.sh "${pkgdir}/usr/lib/dovecot/mkcert.sh" + + # add dovecot libdir + install -Dm644 "${srcdir}/dovecot.ld.so.conf" "${pkgdir}/etc/ld.so.conf.d/dovecot.conf" +} diff --git a/dovecot/dovecot.initd b/dovecot/dovecot.initd new file mode 100644 index 0000000..4d6d102 --- /dev/null +++ b/dovecot/dovecot.initd @@ -0,0 +1,62 @@ +#!/sbin/openrc-run +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License, v2 or later + +extra_commands="checkconfig" +extra_started_commands="reload" + +depend() { + need localmount + before postfix + after bootmisc ldap mysql ntp-client ntpd postgresql saslauthd slapd + use logger net +} + +checkconfig() { + DOVECOT_INSTANCE=${SVCNAME##*.} + if [ -n "${DOVECOT_INSTANCE}" -a "${SVCNAME}" != "dovecot" ]; then + DOVECOT_CONF=/etc/dovecot/dovecot.${DOVECOT_INSTANCE}.conf + else + DOVECOT_CONF=/etc/dovecot/dovecot.conf + fi + if [ ! -e ${DOVECOT_CONF} ]; then + eerror "You will need an ${DOVECOT_CONF} first" + return 1 + fi + if [ -x /usr/sbin/dovecot ]; then + DOVECOT_BASEDIR=$(/usr/sbin/dovecot -c ${DOVECOT_CONF} config -h base_dir) + if [ $? -ne 0 ]; then + eerror "Error parsing ${DOVECOT_CONF}" + return 1 + fi + else + eerror "dovecot not executable" + return 1 + fi + DOVECOT_BASEDIR=${DOVECOT_BASEDIR:-/run/dovecot} + DOVECOT_PIDFILE=${DOVECOT_BASEDIR}/master.pid +} + +start() { + checkconfig || return 1 + ebegin "Starting ${SVCNAME}" + start-stop-daemon --start --exec /usr/sbin/dovecot \ + --pidfile "${DOVECOT_PIDFILE}" -- -c "${DOVECOT_CONF}" + eend $? +} + +stop() { + checkconfig || return 1 + ebegin "Stopping ${SVCNAME}" + start-stop-daemon --stop --exec /usr/sbin/dovecot \ + --pidfile "${DOVECOT_PIDFILE}" + eend $? +} + +reload() { + checkconfig || return 1 + ebegin "Reloading ${SVCNAME} configs and restarting auth/login processes" + start-stop-daemon --signal HUP --exec /usr/sbin/dovecot \ + --pidfile "${DOVECOT_PIDFILE}" + eend $? +} diff --git a/dovecot/dovecot.install b/dovecot/dovecot.install new file mode 100644 index 0000000..94894be --- /dev/null +++ b/dovecot/dovecot.install @@ -0,0 +1,41 @@ +post_install() { + if ! getent group dovenull &> /dev/null; then + groupadd -g 74 dovenull > /dev/null + fi + if ! getent group dovecot &> /dev/null; then + groupadd -g 76 dovecot > /dev/null + fi + if ! getent passwd dovenull &> /dev/null; then + useradd -s /bin/nologin -c "Dovecot user for completely untrustworthy processes" -d /var/empty -u 74 -g dovenull -G adm -r dovenull > /dev/null + fi + if ! getent passwd dovecot &> /dev/null; then + useradd -s /bin/nologin -c "Dovecot user" -d /var/empty -u 76 -g dovecot -G adm -r dovecot > /dev/null + fi + if ! groups dovenull | grep adm &>/dev/null; then + gpasswd -a dovenull adm >/dev/null + fi + dovenull_shell=$(getent passwd dovenull | cut -d: -f7) + if [ "$dovenull_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin dovenull &>/dev/null + fi + if ! groups dovecot | grep adm &>/dev/null; then + gpasswd -a dovecot adm >/dev/null + fi + dovecot_shell=$(getent passwd dovecot | cut -d: -f7) + if [ "$dovecot_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin dovecot &>/dev/null + fi +} + +post_remove() { + if getent passwd dovecot &> /dev/null; then + userdel dovecot >/dev/null + fi + if getent group dovecot &> /dev/null; then + groupdel dovecot >/dev/null + fi + if getent group dovenull &> /dev/null; then + groupdel dovenull >/dev/null + fi + rm -rf /var/run/dovecot/ &> /dev/null || /bin/true +} diff --git a/dovecot/dovecot.ld.so.conf b/dovecot/dovecot.ld.so.conf new file mode 100644 index 0000000..061a50c --- /dev/null +++ b/dovecot/dovecot.ld.so.conf @@ -0,0 +1 @@ +/usr/lib/dovecot diff --git a/dovecot/dovecot.run b/dovecot/dovecot.run new file mode 100644 index 0000000..13380dd --- /dev/null +++ b/dovecot/dovecot.run @@ -0,0 +1,3 @@ +#!/bin/sh +install -d -m 0755 -o root -g root /var/run/dovecot +exec /usr/sbin/dovecot -F diff --git a/doxygen/PKGBUILD b/doxygen/PKGBUILD new file mode 100644 index 0000000..924dfa2 --- /dev/null +++ b/doxygen/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=doxygen +pkgver=1.8.20 +pkgrel=1 +pkgdesc='Documentation system for C, C++ and other languages' +url='https://www.doxygen.nl/index.html' +arch=('i686' 'x86_64') +license=('GPL-2') +makedepends=('cmake' 'gcc-libs' 'flex' 'tauthon') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/doxygen/doxygen/archive/Release_${pkgver//./_}.tar.gz) +sha512sums=('25509cec8904b10431cf3d29f6e6bbdad49fbf3a763606b30c92c111f294ac0311aa13d53007d71ff1f55fcae6903e2ce8f80d1a6b4832fa43f6a9166184e005') + +prepare() { + cd ${pkgname}-Release_${pkgver//./_} + # Install the man pages in the right place + sed -i 's:DESTINATION man/man1:DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1":g' \ + doc/CMakeLists.txt +} + +build() { + cd ${pkgname}-Release_${pkgver//./_} + + cmake -B build \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DDOC_INSTALL_DIR:PATH=share/doc/doxygen \ + -DPYTHON_EXECUTABLE:FILE=/usr/bin/tauthon + make -C build +} + +package() { + pkgdesc='Documentation system for C, C++ and other languages' + depends=('gcc-libs') + + cd ${pkgname}-Release_${pkgver//./_} + make -C build DESTDIR="${pkgdir}" install + + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} + +# vim: ts=2 sw=2 et: diff --git a/dreamchess/PKGBUILD b/dreamchess/PKGBUILD new file mode 100644 index 0000000..e86f18a --- /dev/null +++ b/dreamchess/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=dreamchess +pkgver=0.3.0 +pkgrel=1 +pkgdesc="DreamChess - OpenGL Chess Game" +arch=('i686' 'x86_64') +url="https://github.com/dreamchess/dreamchess" +license=('GPL-3') +groups=('games') +depends=('pugixml' 'sdl2_mixer' 'sdl2_image' 'glew' 'hicolor-icon-theme') +makedepends=('flex' 'bison' 'cmake') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/dreamchess/dreamchess/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('8f6178f0e71e2dd3d08c4f215940d885b885985c6e780efa773ce99e8ad0bc1ecaee7c8f6303d4acc1e342d1da9be64ef51b3c606d21dc6071ee0b78849529db') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_BINDIR=games \ + -DCMAKE_INSTALL_DATADIR=share/games + make -C build +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make -C build DESTDIR="${pkgdir}" install + install -Dm644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/dsniff/PKGBUILD b/dsniff/PKGBUILD new file mode 100644 index 0000000..6f67c00 --- /dev/null +++ b/dsniff/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=dsniff +pkgver=2.4b1 +_debver=$pkgver +_debrel=30 +pkgrel=2 +pkgdesc="Free and libre collection of tools for network auditing and penetration testing" +url='https://www.monkey.org/~dugsong/dsniff/' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('glibc' 'libpcap' 'libressl' 'libxmu' 'glib2' 'libnet' 'libnids' 'libtirpc') +makedepends=('rpcsvc-proto' 'quilt') +options=('!makeflags') +source=("https://www.monkey.org/~dugsong/${pkgname}/beta/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/d/dsniff/dsniff_${_debver}+debian-${_debrel}.debian.tar.xz") +sha512sums=('62dafab293de6dc3e9b01561b3627d63ca334467c01c3550a6318d8bcbe99d5a301ec16967af34065a14e8bca1c4b6a41da766cbd51ebd8338615b950c4f642f' + '45ffe34fcd30cd1461a354891b9d5567038cc176dbfa79c67020075cd40ae09b7092954925019e583d0d69cae76a558049b489745454a8034ce3e9e832c58f64') + +prepare() { + cd "${pkgname}-2.4" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -fiv +} + +build() { + cd ${pkgname}-2.4 + ./configure \ + --with-libtirpc \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-2.4 + make install_prefix="${pkgdir}" install + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm 644 CHANGES README -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/dtach/PKGBUILD b/dtach/PKGBUILD new file mode 100644 index 0000000..5f98347 --- /dev/null +++ b/dtach/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=dtach +pkgver=0.9 +_debver=0.9 +_debrel=5 +pkgrel=1 +pkgdesc="Emulates the detach feature of screen" +arch=('i686' 'x86_64') +url="http://dtach.sourceforge.net/" +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/sourceforge/dtach/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/d/dtach/dtach_$_debver-$_debrel.debian.tar.xz) +sha512sums=('28c13dc8c96c16b9c6153a3a11fdeb4a4bc72e84e1f2575043b047cd8e600a47232f29544ffd87d82e2575623ec2e999a26e23e9eac25ec81c7722bdf98cfb18' + '27590f09f241f7715c0523aeefe2c912e7cdc6579002391205c01bd586d35519a6ee041b42533be2a69c90e8d8e7cd48f2a4f57984f270b14133eb741d54751e') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + install -Dm755 dtach -t "$pkgdir"/usr/bin + install -Dm644 dtach.1 -t "$pkgdir"/usr/share/man/man1 + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/dtc/PKGBUILD b/dtc/PKGBUILD new file mode 100644 index 0000000..9b6f984 --- /dev/null +++ b/dtc/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=dtc +pkgver=1.6.0 +pkgrel=1 +pkgdesc='Device Tree Compiler' +url='https://www.devicetree.org/' +arch=(i686 x86_64) +license=(GPL-2) +makedepends=(swig python) +source=(https://www.kernel.org/pub/software/utils/dtc/dtc-$pkgver.tar.xz) +sha512sums=('15433b24f1d6b7ed1f8066d050bd1bcbf988731aa38147564e3dd04b5f69af8d69e03befdc621a768526c620425a9bdd24aad4f9ff135930d6a1eeb0625f7de3') + +prepare() { + cd dtc-$pkgver + sed -i 's/-Werror//' Makefile +} + +build() { + cd dtc-$pkgver + make +} + +package() { + cd dtc-$pkgver + DESTDIR="$pkgdir" make SETUP_PREFIX="$pkgdir/usr" PREFIX="$pkgdir/usr" install + install -Dm644 GPL -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/dvd+rw-tools/PKGBUILD b/dvd+rw-tools/PKGBUILD new file mode 100644 index 0000000..51e8c11 --- /dev/null +++ b/dvd+rw-tools/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=dvd+rw-tools +pkgver=7.1 +_debver=7.1 +_debrel=14 +pkgrel=1 +pkgdesc='dvd burning tools' +arch=('i686' 'x86_64') +license=('GPL-2') +url='http://fy.chalmers.se/~appro/linux/DVD+RW' +depends=('libisoburn' 'gcc-libs') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/d/dvd+rw-tools/${pkgname}_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/d/dvd+rw-tools/dvd+rw-tools_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('938f9ec5597158af275c7bf63002696ba362f6f22a219108c6a1df28792f0485046a7af5ce57e41695aaaa0d69543bd66cbbeb4415df5c0e0a902a3f1d278a31' + '9029ad2a36d5a55c1c06e27bef7ba53952e548ef3117996f0d8bf6e4c6fbcbecb5d9b0a6d1528db8563b132ae0370ed2fa00317ab5d1b1031aec328e083c2057') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + make +} + +package() { + cd ${pkgname}-${pkgver} + install -m755 -d "${pkgdir}/usr/bin" + install -m755 -d "${pkgdir}/usr/share/man/man1" + + install -m755 growisofs dvd+rw-booktype dvd+rw-format dvd+rw-mediainfo dvd-ram-control "${pkgdir}/usr/bin/" + install -m644 growisofs.1 "${pkgdir}"/usr/share/man/man1/growisofs.1 + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/dvdauthor/PKGBUILD b/dvdauthor/PKGBUILD new file mode 100644 index 0000000..653823f --- /dev/null +++ b/dvdauthor/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=dvdauthor +pkgver=0.7.2 +_debver=0.7.2 +_debrel=1 +pkgrel=1 +pkgdesc='DVD authoring tools' +arch=('i686' 'x86_64') +url='http://dvdauthor.sourceforge.net/' +license=('GPL-2') +depends=('libdvdread' 'graphicsmagick' 'libxml2') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/d/dvdauthor/dvdauthor_$_debver-$_debrel.debian.tar.xz" + "support-graphicsmagick.patch") +sha512sums=('202b8bba38939d122dc864921a57e89906ca99ddabf44e3b07419cc42cc052567cd892b41f1171c9c195c9a770758e9319a942ea64d14ee8fa847588c7761125' + 'ef4296cc9786360620ebcb17633702143444aa797a04960ec9a766e421e6a9e362b4372538213fb927c18b74a73202bf043650338e0344c7a772703eab2288ca' + 'd554b563d1da551560fc49aaa9d8f005770bb493ed94b5795e4a37d142e7ff474757a99d4baaf9eb39d41bbbfd2d37a3e19cd8d19e5b6dd654f939732d162f01') + +prepare() { + cd $pkgname + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-add-config-rpath.patch || true + + quilt push -av + fi + + # support for graphicsmagick + patch -Np1 -i ../support-graphicsmagick.patch + + # don't search for obsolete freetype-config + sed -e 's|freetype-config|pkg-config freetype2|' -i configure.ac + + autoreconf -vi +} + +build() { + cd $pkgname + ./configure --prefix=/usr --with-graphicsmagick + make +} + +package() { + cd $pkgname + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/dvdauthor/support-graphicsmagick.patch b/dvdauthor/support-graphicsmagick.patch new file mode 100644 index 0000000..30c1214 --- /dev/null +++ b/dvdauthor/support-graphicsmagick.patch @@ -0,0 +1,68 @@ +--- a/configure.ac 2021-06-29 20:19:42.000000000 +0200 ++++ b/configure.ac 2021-06-29 20:20:39.166050021 +0200 +@@ -45,35 +45,31 @@ + config_static='--static' + fi + +-usemagick=0 +- +-AC_CHECK_PROGS(MAGICKCONFIG, [MagickCore-config]) +-if test -n "$MAGICKCONFIG"; then +- ac_save_CPPFLAGS="$CPPFLAGS" +- ac_save_LIBS="$LIBS" +- MAGICK_CPPFLAGS="`$MAGICKCONFIG --cppflags`" +- MAGICK_LIBS="`$MAGICKCONFIG --ldflags` `$MAGICKCONFIG --libs`" +- CPPFLAGS="$CPPFLAGS $MAGICK_CPPFLAGS" +- LIBS="$MAGICK_LIBS $LIBS" +- AC_CHECK_FUNC(ExportImagePixels, usemagick=1, AC_MSG_NOTICE([ImageMagick does not support the function +- ExportImagePixels. Please upgrade to ImageMagick 5.5.7 or newer])) +- CPPFLAGS="$ac_save_CPPFLAGS" +- LIBS="$ac_save_LIBS" +- if test "$usemagick" = 1; then +- AC_DEFINE(HAVE_MAGICK, 1, [Whether the ImageMagick libraries are available]) +- fi ++use_imagemagick=0 ++use_graphicsmagick=0 ++AC_ARG_WITH([imagemagick], AS_HELP_STRING([--with-imagemagick], [Use ImageMagick to augment image import formats]), [if test "$withval" != "no"; then use_imagemagick=1; fi]) ++AC_ARG_WITH([graphicsmagick], AS_HELP_STRING([--with-graphicsmagick], [Use GraphicsMagick to augment image import formats]), [if test "$withval" != "no"; then use_graphicsmagick=1; fi]) ++if test "$use_imagemagick" = 1 && test "$use_graphicsmagick" = 1; then ++ AC_MSG_ERROR([cannot specify both --with-imagemagick and --with-graphicsmagick], 1) + fi + +-if test "$usemagick" != 1; then +- PKG_CHECK_MODULES([MAGICK], [GraphicsMagick], usemagick=1; [AC_DEFINE(HAVE_GMAGICK, 1, [whether the GraphicsMagick libraries are available])], [:]) ++if test "$use_imagemagick" = 1; then ++ PKG_CHECK_MODULES([IMAGEMAGICK], [ImageMagick >= 5.5.7], [AC_DEFINE(HAVE_MAGICK, 1, [Whether the ImageMagick libraries are available])], [AC_MSG_ERROR([ImageMagick not available])]) ++ MAGICK_CFLAGS="$IMAGEMAGICK_CFLAGS" ++ MAGICK_LIBS="$IMAGEMAGICK_LIBS" + fi +- +-if test "$usemagick" != 1; then +- MAGICK_CPPFLAGS="$LIBPNG_CFLAGS" ++if test "$use_graphicsmagick" = 1; then ++ PKG_CHECK_MODULES([GRAPHICSMAGICK], [GraphicsMagick], [AC_DEFINE(HAVE_GMAGICK, 1, [whether the GraphicsMagick libraries are available])], [AC_MSG_ERROR([GraphicsMagick not available])]) ++ MAGICK_CFLAGS="$GRAPHICSMAGICK_CFLAGS" ++ MAGICK_LIBS="$GRAPHICSMAGICK_LIBS" ++fi ++if test "$use_imagemagick" != 1 && test "$use_graphicsmagick" != 1; then ++ MAGICK_CFLAGS="$LIBPNG_CFLAGS" + MAGICK_LIBS="$LIBPNG_LIBS" + fi + + AC_SUBST(MAGICK_CPPFLAGS) ++AC_SUBST(MAGICK_CFLAGS) + AC_SUBST(MAGICK_LIBS) + + PKG_CHECK_MODULES([FONTCONFIG], [fontconfig], [AC_DEFINE(HAVE_FONTCONFIG, 1, [whether Fontconfig is available])], [:]) +--- a/src/Makefile.am 2021-06-29 20:22:21.840887505 +0200 ++++ b/src/Makefile.am 2021-06-29 20:26:36.942906536 +0200 +@@ -8,7 +8,7 @@ + nodist_bin_SCRIPTS = dvddirdel + + AM_CPPFLAGS = -DSYSCONFDIR="\"$(sysconfdir)\"" \ +- @XML_CPPFLAGS@ @MAGICK_CPPFLAGS@ @FREETYPE_CFLAGS@ @FRIBIDI_CFLAGS@ @FONTCONFIG_CFLAGS@ ++ @XML_CPPFLAGS@ @MAGICK_CFLAGS@ @FREETYPE_CFLAGS@ @FRIBIDI_CFLAGS@ @FONTCONFIG_CFLAGS@ + AM_CFLAGS = -Wall + + dvdauthor_SOURCES = dvdauthor.c common.h dvdauthor.h da-internal.h \ + diff --git a/dvdbackup/PKGBUILD b/dvdbackup/PKGBUILD new file mode 100644 index 0000000..cffa037 --- /dev/null +++ b/dvdbackup/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=dvdbackup +pkgver=0.4.2 +_debver=$pkgver +_debrel=4.1 +pkgrel=2 +pkgdesc="Tool to rip video DVDs from the command line" +arch=('i686' 'x86_64') +url='https://dvdbackup.sourceforge.net' +license=('GPL-3') +depends=('libdvdread' 'libdvdcss') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/$pkgname/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/d/dvdbackup/dvdbackup_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('df9abb2ca0b8a7cd7855ddff94dae249b06b2ec0ee42f3e9c53aa46aebd9885bdf26dacecbd4a20ff5f642ea10c0c64b811d25c23802c8a2b1489281900fbe0d' + 'd505b24d34d5ff42934f46870aad362ee7faf6987a0ddde51e9e629d5910d8fbd41ec2d859c886ee57fbd1898d6dbb09a4cc58c94f508d63c8193c04ac3675e1') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/dvdisaster/PKGBUILD b/dvdisaster/PKGBUILD new file mode 100644 index 0000000..23f08e3 --- /dev/null +++ b/dvdisaster/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=dvdisaster +pkgver=0.79.5 +_debver=$pkgver +_debrel=10 +pkgrel=1 +pkgdesc="Provides a margin of safety against data loss on newly created ISO, CD, DVD, and BDR media caused by aging or scratches" +arch=('i686' 'x86_64') +url='https://dvdisaster.jcea.es' +license=('GPL-3') +depends=('gtk2') +makedepends=('quilt') +options=('!makeflags') +source=("https://deb.debian.org/debian/pool/main/d/dvdisaster/dvdisaster_${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/d/dvdisaster/dvdisaster_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('8630d4389983307afc3faa5b4256f531ded370f84ec35d4a363853dc7d79e5e15ee0b81bf64f4b88f57fe6176537df8195f83acf23e770d991c700b7408dd1f5' + 'e5fcf51c92628be8084a6ba8c72bb846036400c8e549c7c916963cd2477caf9c434f229953931cde22d16295032c39f8d0251fa8d3192876896f2840fd854ec1') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # Modify provided .desktop shortcut to point to dvdisaster.png rather than dvdisaster48.png + sed -i 's/dvdisaster48/dvdisaster/' contrib/dvdisaster.desktop +} + +build() { + export CFLAGS="$CFLAGS -fcommon" + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --docdir=/usr/share/doc \ + --localedir=/usr/share/locale \ + --with-nls=yes + make +} + +package() { + cd ${pkgname}-${pkgver} + make BUILDROOT="${pkgdir}" install + + # Remove unnecessary uninstaller script + rm -f "${pkgdir}/usr/bin/dvdisaster-uninstall.sh" + install -D -m 644 contrib/dvdisaster.desktop "${pkgdir}/usr/share/applications/dvdisaster.desktop" + + # Rename all .png icons to strip their resolution from their names, and place them in the proper standard directories + for i in 16 24 32 48 64 ; do + install -D -m 644 contrib/dvdisaster${i}.png "${pkgdir}/usr/share/icons/hicolor/${i}x${i}/apps/dvdisaster.png" + done + + # Install license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/dvdstyler/PKGBUILD b/dvdstyler/PKGBUILD new file mode 100644 index 0000000..2a7e407 --- /dev/null +++ b/dvdstyler/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=dvdstyler +pkgver=3.1.2 +pkgrel=1 +pkgdesc="Free and libre authoring application for the creation of professional-looking DVDs" +arch=('i686' 'x86_64') +url='https://www.dvdstyler.de/' +license=('GPL-2') +depends=('libisoburn' 'dvdauthor' 'dvd+rw-tools' 'wxsvg' 'ffmpeg') +makedepends=('docbook-xsl' 'xmlto' 'zip' 'gettext-tiny' 'intltool') +source=("https://downloads.sourceforge.net/$pkgname/DVDStyler-$pkgver.tar.bz2" + "config.patch" + "$pkgname.appdata.xml") +sha512sums=('b4d1639e6a1083901d451362042fc7dfa49d4f9891d1f1204e1dc6ec2ad6ebfe8beb5e428e22cb698cfe6b757c9425ee646d8865cff63c0f60d44e0518cb1970' + 'c1632e14cdb1f4eef7fe7a8e495cbab029bfef813d6695bab810df2b437d0615180451cb8b66730394d3a1f6bc20cddfeebb4cdece45d0fadb5fa0c80f008ddf' + '6ac128f3816bba4d2c0ba84c93a08bc15c5866c64a57f35a83485f593596c2fd8b5e9d49793f7042fa7c2a076f98e4c7c6c66eb691a21900b82a02c17d739442') + +prepare() { + cd DVDStyler-$pkgver + patch -RNp1 -i ../config.patch + sed -i 's|/pixmaps|/icons/hicolor/48x48/apps|' data/Makefile.{am,in} +} + +build() { + cd DVDStyler-$pkgver + ./configure --prefix=/usr --with-wx-config=/usr/bin/wx-config-gtk3 + make +} + +package() { + cd DVDStyler-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 "$srcdir/$pkgname.appdata.xml" "$pkgdir/usr/share/metainfo/$pkgname.appdata.xml" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/dvdstyler/config.patch b/dvdstyler/config.patch new file mode 100644 index 0000000..23ea61c --- /dev/null +++ b/dvdstyler/config.patch @@ -0,0 +1,42 @@ +From 30937f6e427153e85862afed41e69b470d52dc67 Mon Sep 17 00:00:00 2001 +From: ntalex +Date: Fri, 2 Aug 2019 22:49:37 +0200 +Subject: changed to use configation file .dvdstyler/dvdstyler under unix + + +diff --git a/src/Config.cpp b/src/Config.cpp +index a1ccbf5..6ea06fc 100644 +--- a/src/Config.cpp ++++ b/src/Config.cpp +@@ -10,9 +10,8 @@ + + #include "Config.h" + #include +-#ifdef __WXMSW__ + #include +-#endif ++#include + + Config s_config; + +@@ -27,8 +26,19 @@ void Config::Init() { + } else + wxConfig::Set(new wxFileConfig(wxT(""), wxT(""), fileName)); + } +-#endif ++#elif defined(__WXMAC__) + cfg = wxConfig::Get(); ++#else ++ // check if .dvdstyler exist and move it ++ wxString dataDir = wxStandardPaths::Get().GetUserLocalDataDir(); ++ if (wxFileExists(dataDir)) { ++ wxRenameFile(dataDir, dataDir + ".tmp"); ++ wxMkdir(dataDir); ++ wxRenameFile(dataDir + ".tmp", dataDir + wxFILE_SEP_PATH + "dvdstyler"); ++ } ++ cfg = new wxFileConfig("", "", dataDir + wxFILE_SEP_PATH + "dvdstyler"); ++ wxConfig::Set(cfg); ++#endif + } + + bool Config::IsMainWinMaximized() { diff --git a/dvdstyler/dvdstyler.appdata.xml b/dvdstyler/dvdstyler.appdata.xml new file mode 100644 index 0000000..9470060 --- /dev/null +++ b/dvdstyler/dvdstyler.appdata.xml @@ -0,0 +1,55 @@ + + + dvdstyler.desktop + CC0-1.0 + GPL-2.0 + Cross-platform DVD authoring application + +

+ DVDStyler is a cross-platform free DVD authoring application for the + creation of professional-looking DVDs. It allows not only burning of + video files on DVD that can be played practically on any standalone DVD + player, but also creation of individually designed DVD menus. It is + Open Source Software and is completely free. +

+

+ Features + Tip: DVDStyler is PC software, not self-hosted web software, so a web hosting plan is not required. +

+
    +
  • Create and burn DVD video with interactive menus
  • +
  • Design your own DVD menu or select one from the list of ready to use menu templates
  • +
  • Create photo slideshow
  • +
  • Add multiple subtitle and audio tracks
  • +
  • Support of AVI, MOV, MP4, MPEG, OGG, WMV and other file formats
  • +
  • Support of MPEG-2, MPEG-4, DivX, Xvid, MP2, MP3, AC-3 and other audio and video formats
  • +
  • Support of multi-core processor
  • +
  • Use MPEG and VOB files without reencoding, see FAQ
  • +
  • Put files with different audio/video format on one DVD (support of titleset)
  • +
  • User-friendly interface with support of drag & drop
  • +
  • Flexible menu creation on the basis of scalable vector graphic
  • +
  • Import of image file for background
  • +
  • Place buttons, text, images and other graphic objects anywhere on the menu screen
  • +
  • Change the font/color and other parameters of buttons and graphic objects
  • +
  • Scale any button or graphic object
  • +
  • Copy any menu object or whole menu
  • +
  • Customize navigation using DVD scripting
  • +
+
+ http://www.dvdstyler.de/ + + + http://www.dvdstyler.org/images/screenshots/ffm.jpg + + + http://www.dvdstyler.org/images/screenshots/blue.jpg + + + http://www.dvdstyler.org/images/screenshots/filebrowser.jpg + + + http://www.dvdstyler.org/images/screenshots/travel.jpg + + + alex AT thuering.biz +
diff --git a/dwarves/PKGBUILD b/dwarves/PKGBUILD new file mode 100644 index 0000000..fa4bf6c --- /dev/null +++ b/dwarves/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +# Based on pahole package + +pkgname=dwarves +pkgver=1.20 +_debver=1.20 +_debrel=1 +pkgrel=1 +pkgdesc="Set of advanced DWARF utilities" +url="https://git.kernel.org/pub/scm/devel/pahole/pahole.git" +arch=(i686 x86_64) +license=(GPL-2) +depends=(libbpf libelf python) +makedepends=(cmake ninja quilt) +source=(https://deb.debian.org/debian/pool/main/d/dwarves-dfsg/dwarves-dfsg_1.20.orig.tar.xz + https://deb.debian.org/debian/pool/main/d/dwarves-dfsg/dwarves-dfsg_$_debver-$_debrel.debian.tar.xz + python.patch) +sha512sums=('306bb74c498527a5a9bdae4d304e90511336cab627d9acad5237d93cbb48efe11dbca4418c540fa03e3ecdd168ce224cabe9fd2f6fbb50520d0dd17741c80817' + '7495bee9e58add6fb7e44152d21e7432e696dab5c619fb4b008fdf674d2b90667af7ad0e321fbb4d51450aac85f8cac38ad441f53a19673921d5f3a5eeda24f8' + '80d067c6505424473084526bae8a60a7f1475ec49b29515a5fbcc14a19f6ca5653d2e833aca0306e9fa2c20a63eba6914885f54313d3e58a26cd2bb04ee1b662') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # https://bugs.archlinux.org/task/70013 + patch -p1 -i ../python.patch +} + +build() { + CFLAGS+=" $CPPFLAGS" + cmake -S $pkgname-$pkgver -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_MODULE_PATH=/usr/lib/cmake \ + -DLIBBPF_EMBEDDED=OFF \ + -D__LIB=lib + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + export PYTHONHASHSEED=0 + python -m compileall -d / "$pkgdir" + python -O -m compileall -d / "$pkgdir" + + install -Dm644 $pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/dwarves/python.patch b/dwarves/python.patch new file mode 100644 index 0000000..700bc79 --- /dev/null +++ b/dwarves/python.patch @@ -0,0 +1,13 @@ +diff --git i/CMakeLists.txt w/CMakeLists.txt +index 7f72c7a..f8c42b1 100644 +--- i/CMakeLists.txt ++++ w/CMakeLists.txt +@@ -161,6 +161,7 @@ install(FILES dwarves.h dwarves_emit.h dwarves_reorganize.h + install(FILES man-pages/pahole.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1/) + install(PROGRAMS ostra/ostra-cg DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) + install(PROGRAMS btfdiff fullcircle DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +-install(FILES ostra/python/ostra.py DESTINATION ${CMAKE_INSTALL_PREFIX}/share/dwarves/runtime/python) ++find_package(Python) ++install(FILES ostra/python/ostra.py DESTINATION ${Python_SITELIB}) + install(FILES lib/Makefile lib/ctracer_relay.c lib/ctracer_relay.h lib/linux.blacklist.cu + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/dwarves/runtime) diff --git a/dzen2/PKGBUILD b/dzen2/PKGBUILD new file mode 100644 index 0000000..0ded018 --- /dev/null +++ b/dzen2/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=dzen2 +_pkgname=dzen +pkgver=0.9.5~svn271 +_debver=0.9.5~svn271 +_debrel=4 +pkgrel=1 +pkgdesc="General purpose messaging, notification and menuing program for X11" +url='https://github.com/robm/dzen' +arch=('i686' 'x86_64') +license=('Expat') +depends=('libx11' 'libxpm' 'libxinerama' 'libxft') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/d/dzen2/dzen2_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/d/dzen2/dzen2_${_debver}-${_debrel}.debian.tar.gz") +sha512sums=('303b19c2a20eb1d4bd7f38a23aea56e51e150a8bd394c0d340416ec6a784940cf5333f7517ed79100984f6c04f5aa82773368825336d941e4694f558ca821be7' + 'be8b22170a3d86bf0211dd250355ea2b4ff84691d9040f2688718b56052fabaf6bbfb9c00b1355ab623bb84077aadf8ffa264f97ea4bbaa5400fc8e4be31245f') + +prepare() { + cd ${_pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -i 's|DZEN_XMP|DZEN_XPM|g' main.c + + CFLAGS="${CFLAGS} -Wall -Os \${INCS} -DVERSION=\\\"\${VERSION}\\\" -DDZEN_XINERAMA -DDZEN_XPM -DDZEN_XFT `pkg-config --cflags xft`" + LIBS=" -L/usr/lib -lc -lXft -lXpm -lXinerama -lX11" + + echo "CFLAGS=${CFLAGS}" >> config.mk + echo "LIBS=${LIBS}" >> config.mk + echo "LDFLAGS=${LDFLAGS} ${LIBS}" >> config.mk +} + +build() { + cd ${_pkgname}-${pkgver} + + make X11INC=/usr/include X11LIB=/usr/lib + make -C gadgets X11INC=/usr/include X11LIB=/usr/lib +} + +package() { + cd ${_pkgname}-${pkgver} + + make PREFIX=/usr MANPREFIX=/usr/man DESTDIR="${pkgdir}" install + make -C gadgets PREFIX=/usr MANPREFIX=/usr/man DESTDIR="${pkgdir}" install + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm 644 README* -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/easy-rsa/0001-fix-paths.patch b/easy-rsa/0001-fix-paths.patch new file mode 100644 index 0000000..63ef539 --- /dev/null +++ b/easy-rsa/0001-fix-paths.patch @@ -0,0 +1,29 @@ +From 49facdddb343cefb0cb85bcc7eb52fa01db1f377 Mon Sep 17 00:00:00 2001 +From: Christian Hesse +Date: Thu, 28 Sep 2017 11:08:39 +0200 +Subject: [PATCH 1/1] fix paths + +We have the easyrsa executable in /usr/bin/ - so use use current working +directory, not executable path. + +Signed-off-by: Christian Hesse +--- + easyrsa | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/easyrsa b/easyrsa +index 11d2357..c665ab7 100755 +--- a/easyrsa ++++ b/easyrsa +@@ -1660,9 +1660,9 @@ Note: using Easy-RSA configuration from: $vars" + fi + + # Set defaults, preferring existing env-vars if present +- set_var EASYRSA "$prog_dir" ++ set_var EASYRSA "$PWD" + set_var EASYRSA_OPENSSL openssl +- set_var EASYRSA_PKI "$PWD/pki" ++ set_var EASYRSA_PKI "$EASYRSA/pki" + set_var EASYRSA_DN cn_only + set_var EASYRSA_REQ_COUNTRY "US" + set_var EASYRSA_REQ_PROVINCE "California" diff --git a/easy-rsa/PKGBUILD b/easy-rsa/PKGBUILD new file mode 100644 index 0000000..a7ae19d --- /dev/null +++ b/easy-rsa/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=easy-rsa +pkgver=3.0.8 +pkgrel=1 +pkgdesc='Simple shell based CA utility' +arch=('any') +url='https://github.com/OpenVPN/easy-rsa' +depends=('libressl' 'sh' 'grep') +license=('GPL-2') +backup=('etc/easy-rsa/openssl-easyrsa.cnf' + 'etc/easy-rsa/vars') +validpgpkeys=( + '65FF3F24AA08E882CB444C94D731D97A606FD463' # Josh Cepek + '6F4056821152F03B6B24F2FCF8489F839D7367F3') # Eric Crist +source=("https://github.com/OpenVPN/easy-rsa/releases/download/v${pkgver}/EasyRSA-${pkgver}.tgz"{,.sig} + '0001-fix-paths.patch') +sha512sums=('fd2cde4725cffd60c6af1b6aeaff0dbf15f31f0f322c9df75c22838e2297ba9dc3bba610d956464c8227bd74b3e63840e2a3da41fbc5ee1c79c1e7f5350adc94' + 'SKIP' + 'd428b400fb2ab1b207bd999d30039b4e849120d88f21adf9ec4a63898778594eb4214fb12a5522a2d00acb22dfc5d10d0f79f48766aaf59c8274308cc5dbddda') + +prepare() { + cd EasyRSA-${pkgver}/ + + # fix output of help command, we have it in PATH + sed -i 's|./easyrsa|easyrsa|' easyrsa + + # fix paths + patch -Np1 < "${srcdir}"/0001-fix-paths.patch +} + +package() { + cd EasyRSA-${pkgver}/ + + install -D -m0755 easyrsa "${pkgdir}"/usr/bin/easyrsa + + install -D -m0644 openssl-easyrsa.cnf "${pkgdir}"/etc/easy-rsa/openssl-easyrsa.cnf + install -D -m0644 vars.example "${pkgdir}"/etc/easy-rsa/vars + install -d -m0755 "${pkgdir}"/etc/easy-rsa/x509-types/ + install -m0644 x509-types/* "${pkgdir}"/etc/easy-rsa/x509-types/ + + install -d -m0755 ${pkgdir}/usr/share/doc/easy-rsa/ + install -m0644 doc/* ChangeLog ${pkgdir}/usr/share/doc/easy-rsa/ + + install -D -m0644 COPYING.md "${pkgdir}"/usr/share/licenses/easy-rsa/COPYING +} + diff --git a/easytag/PKGBUILD b/easytag/PKGBUILD new file mode 100644 index 0000000..21e6c7e --- /dev/null +++ b/easytag/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=easytag +pkgver=2.4.3 +_debver=$pkgver +_debrel=9 +pkgrel=4 +pkgdesc="Simple application for viewing and editing tags in audio files" +arch=('i686' 'x86_64') +url='https://wiki.gnome.org/Apps/EasyTAG' +license=('GPL-2') +depends=('cairo' 'gcc-libs' 'gdk-pixbuf2' 'glibc' 'id3lib' 'taglib' 'wavpack' 'zlib' 'opus' 'opusfile' 'libvorbis' 'speex') +makedepends=('atk' 'flac' 'glib2' 'gtk' 'harfbuzz' 'intltool' 'itstool' 'libid3tag' 'pango' 'python' 'yelp-tools' 'quilt') +source=("https://gitlab.gnome.org/GNOME/${pkgname}/-/archive/${pkgname}-${pkgver}/${pkgname}-${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/e/easytag/easytag_${_debver}-${_debrel}.debian.tar.xz" + "remove-appstreamglib.patch") +sha512sums=('a14ce7432592e8430039f8960a9de70f49adf0a60bc4232e8d894b9cab09d72b8205dd1660a51718b655130a4cee69841106461df7d0b05b4b36b611398789e3' + '3a6fe343279d0101963299a6f9e231f8b0f02784df650066a20e1968c95f7102fd731f6c70df7bc1a40327648a1ff2cd027df879c66170ea12eb05e2f72551ef' + 'a3ca13c93cd020b7174fc9becb8eecf8863b978b3a0585c0b06012355bc3bb5c12991a0779c7632397ec015d1e1e1b6c1f4941a6e31523c25c5d778323db9562') + +prepare() { + mv -v "${pkgname}-${pkgname}-${pkgver}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/remove-appstreamglib.patch + + ./autogen.sh +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas" \ + --prefix=/usr \ + --disable-nautilus-actions + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/easytag/remove-appstreamglib.patch b/easytag/remove-appstreamglib.patch new file mode 100644 index 0000000..c2bfb57 --- /dev/null +++ b/easytag/remove-appstreamglib.patch @@ -0,0 +1,43 @@ +--- a/configure.ac 2025-03-30 16:01:57.000000000 +0200 ++++ b/configure.ac 2025-03-30 16:06:43.651778191 +0200 +@@ -33,10 +33,6 @@ + AS_IF([test "x$USE_NLS" != "xno"], + [AC_DEFINE([ENABLE_NLS], [1], [Native Language support is enabled])]) + +-dnl AppData +-m4_ifdef([APPDATA_XML], [APPDATA_XML], +- [AC_MSG_ERROR([appdata-tools is required for appdata-xml.m4])]) +- + dnl ------------------------------- + dnl Checks for programs. + dnl ------------------------------- +--- a/Makefile.am 2016-12-05 20:30:47.000000000 +0100 ++++ b/Makefile.am 2025-03-30 16:07:27.932808637 +0200 +@@ -279,11 +279,6 @@ + $(AM_V_at)$(MKDIR_P) $(@D) + $(AM_V_at)touch $@ + +-@APPDATA_XML_RULES@ +-@INTLTOOL_XML_RULE@ +-appdata_in_files = data/easytag.appdata.xml.in $(nautilus_appdata_in_file) +-appdata_XML = $(appdata_in_files:.xml.in=.xml) +- + @INTLTOOL_DESKTOP_RULE@ + desktopdir = $(datadir)/applications + desktop_in_files = data/easytag.desktop.in +@@ -369,7 +364,6 @@ + test -n "$(DESTDIR)" || $(UPDATE_ICON_CACHE) "$(iconthemedir)" + + dist_noinst_DATA = \ +- $(appdata_in_files) \ + $(desktop_in_files) \ + $(gsettings_SCHEMAS) \ + $(easytag_headers) \ +@@ -578,7 +572,6 @@ + endif + + CLEANFILES = \ +- $(appdata_XML) \ + $(check_SCRIPTS) \ + $(desktop_DATA) \ + $(easytag_rc) \ diff --git a/edk2/50-edk2-ovmf-i386-secure.json b/edk2/50-edk2-ovmf-i386-secure.json new file mode 100644 index 0000000..bc18b3a --- /dev/null +++ b/edk2/50-edk2-ovmf-i386-secure.json @@ -0,0 +1,34 @@ +{ + "description": "UEFI firmware for i386, with Secure Boot and SMM", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "executable": { + "filename": "/usr/share/edk2-ovmf/ia32/OVMF_CODE.secboot.fd", + "format": "raw" + }, + "nvram-template": { + "filename": "/usr/share/edk2-ovmf/ia32/OVMF_VARS.fd", + "format": "raw" + } + }, + "targets": [ + { + "architecture": "i386", + "machines": [ + "pc-q35-*" + ] + } + ], + "features": [ + "acpi-s3", + "requires-smm", + "secure-boot", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/edk2/50-edk2-ovmf-x86_64-secure.json b/edk2/50-edk2-ovmf-x86_64-secure.json new file mode 100644 index 0000000..6ca6cac --- /dev/null +++ b/edk2/50-edk2-ovmf-x86_64-secure.json @@ -0,0 +1,35 @@ +{ + "description": "UEFI firmware for x86_64, with Secure Boot and SMM", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "executable": { + "filename": "/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd", + "format": "raw" + }, + "nvram-template": { + "filename": "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd", + "format": "raw" + } + }, + "targets": [ + { + "architecture": "x86_64", + "machines": [ + "pc-q35-*" + ] + } + ], + "features": [ + "acpi-s3", + "amd-sev", + "requires-smm", + "secure-boot", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/edk2/60-edk2-ovmf-i386.json b/edk2/60-edk2-ovmf-i386.json new file mode 100644 index 0000000..7920ce9 --- /dev/null +++ b/edk2/60-edk2-ovmf-i386.json @@ -0,0 +1,33 @@ +{ + "description": "UEFI firmware for i386", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "executable": { + "filename": "/usr/share/edk2-ovmf/ia32/OVMF_CODE.fd", + "format": "raw" + }, + "nvram-template": { + "filename": "/usr/share/edk2-ovmf/ia32/OVMF_VARS.fd", + "format": "raw" + } + }, + "targets": [ + { + "architecture": "i386", + "machines": [ + "pc-i440fx-*", + "pc-q35-*" + ] + } + ], + "features": [ + "acpi-s3", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/edk2/60-edk2-ovmf-x86_64.json b/edk2/60-edk2-ovmf-x86_64.json new file mode 100644 index 0000000..2352559 --- /dev/null +++ b/edk2/60-edk2-ovmf-x86_64.json @@ -0,0 +1,34 @@ +{ + "description": "UEFI firmware for x86_64", + "interface-types": [ + "uefi" + ], + "mapping": { + "device": "flash", + "executable": { + "filename": "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd", + "format": "raw" + }, + "nvram-template": { + "filename": "/usr/share/edk2-ovmf/x64/OVMF_VARS.fd", + "format": "raw" + } + }, + "targets": [ + { + "architecture": "x86_64", + "machines": [ + "pc-i440fx-*", + "pc-q35-*" + ] + } + ], + "features": [ + "acpi-s3", + "amd-sev", + "verbose-dynamic" + ], + "tags": [ + + ] +} diff --git a/edk2/PKGBUILD b/edk2/PKGBUILD new file mode 100644 index 0000000..62b57e5 --- /dev/null +++ b/edk2/PKGBUILD @@ -0,0 +1,216 @@ +# Maintainer: Jesus E. + +_brotli_ver=1.0.7 +_openssl_ver=1.1.1h +pkgbase=edk2 +pkgname=('edk2-shell' 'edk2-ovmf') +pkgver=202011 +_debver=2020.11 +_debrel=2 +pkgrel=1 +pkgdesc="Modern, feature-rich firmware development environment for the UEFI specifications" +arch=('i686' 'x86_64') +url="https://github.com/tianocore/edk2" +license=('Simplified-BSD') +makedepends=('acpica' 'iasl' 'libutil-linux' 'nasm' 'python' 'quilt') +options=(!makeflags) +source=("$pkgbase-$pkgver.tar.gz::https://github.com/tianocore/${pkgbase}/archive/${pkgbase}-stable${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/e/edk2/edk2_$_debver-$_debrel.debian.tar.xz" + "https://www.openssl.org/source/openssl-${_openssl_ver}.tar.gz"{,.asc} + "brotli-${_brotli_ver}.tar.gz::https://github.com/google/brotli/archive/v${_brotli_ver}.tar.gz" + "50-edk2-ovmf-i386-secure.json" + "50-edk2-ovmf-x86_64-secure.json" + "60-edk2-ovmf-i386.json" + "60-edk2-ovmf-x86_64.json") +sha512sums=('53e9d2dcc2d4a885e6c48b87195e361ea1263de5501c62b22ad37a4ec350b4e171ea580fbb151874ec474a6b202fa7114d440ef9d2673bc9aff7a295c89ea2a0' + 'f4ecf9137aadb1170d4c62cd67f37fc7c080bc3b18808711ecd1b96fb3010211d9f31f93964c26d3859d6d85d86f58387cbd06170d6310a3ed79bc4c72d4c26e' + 'da50fd99325841ed7a4367d9251c771ce505a443a73b327d8a46b2c6a7d2ea99e43551a164efc86f8743b22c2bdb0020bf24a9cbd445e9d68868b2dc1d34033a' + 'SKIP' + 'a82362aa36d2f2094bca0b2808d9de0d57291fb3a4c29d7c0ca0a37e73087ec5ac4df299c8c363e61106fccf2fe7f58b5cf76eb97729e2696058ef43b1d3930a' + '55e4187b11b27737f61e528c02ff43b9381c0cb09140e803531616766f9cb9401115d88d946b56171784cc028f9571279640eb39b6a9fa8e02ec0c8d1b036a3e' + 'a1236585b30d720540de2e9527d8c90ff2d428e800b3da545b23461dc698dc91fe441b62bb8cbca76e08f4ec1eb485619e9ab26157deb06e7fb33e7f5f9dd8b6' + 'c81e072aabfb01d29cf5194111524e2c4c8684979de6b6793db10299c95bb94f7b1d0a98b057df0664d7a894a2b40e9b4c3576112fae400a95eaf5fe5fc9369b' + '2030dc1d49d56fce8af56c5777fd40f04041e39ff806dd8c021e161227bdd646982024db6758230b8332dc68f16bc6918e1d54ad3c022e21e148d6b65ea778b3') +validpgpkeys=('8657ABB260F056B1E5190839D9C4D26D0E604491') # Matt Caswell +if [ $CARCH = x86_64 ]; then +_arch_list=('IA32' 'X64') +elif [ $CARCH = i686 ]; then +_arch_list=('IA32') +fi + +_build_type='RELEASE' +_build_plugin='GCC5' + +prepare() { + mv -v "$pkgbase-$pkgbase-stable$pkgver" "$pkgbase-$pkgver" + cd "$pkgbase-$pkgver" + + if [[ $pkgver = ${_debver/./} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/brotlicompress-disable.diff || true + rm -v debian/patches/ovmf-vars-generator-Pass-OEM-Strings-to-the-guest.patch || true + rm -v debian/patches/ovmf-vars-generator-ignore-qemu-warnings.patch || true + rm -v debian/patches/ovmf-vars-generator-no-defaults.patch || true + + quilt push -av + fi + + # symlinking openssl into place + rm -rfv CryptoPkg/Library/OpensslLib/openssl + ln -sfv "${srcdir}/openssl-$_openssl_ver" CryptoPkg/Library/OpensslLib/openssl + + # symlinking brotli into place + rm -rfv BaseTools/Source/C/BrotliCompress/brotli MdeModulePkg/Library/BrotliCustomDecompressLib/brotli + ln -sfv "${srcdir}/brotli-${_brotli_ver}" BaseTools/Source/C/BrotliCompress/brotli + ln -sfv "${srcdir}/brotli-${_brotli_ver}" MdeModulePkg/Library/BrotliCustomDecompressLib/brotli + + # -Werror, not even once + sed -e 's/ -Werror//g' \ + -i BaseTools/Conf/*.template BaseTools/Source/C/Makefiles/*.makefile +} + +build() { + cd "$pkgbase-$pkgver" + local _arch + make -C BaseTools + . edksetup.sh + for _arch in ${_arch_list[@]}; do + # shell + echo "Building shell (${_arch})." + BaseTools/BinWrappers/PosixLike/build -p ShellPkg/ShellPkg.dsc \ + -a "${_arch}" \ + -b "${_build_type}" \ + -n "$(nproc)" \ + -t "${_build_plugin}" + # ovmf + if [[ "${_arch}" == 'IA32' ]]; then + echo "Building ovmf (${_arch}) with secure boot" + OvmfPkg/build.sh -p OvmfPkg/OvmfPkgIa32.dsc \ + -a "${_arch}" \ + -b "${_build_type}" \ + -n "$(nproc)" \ + -t "${_build_plugin}" \ + -D LOAD_X64_ON_IA32_ENABLE \ + -D NETWORK_IP6_ENABLE \ + -D TPM_ENABLE \ + -D HTTP_BOOT_ENABLE \ + -D TLS_ENABLE \ + -D FD_SIZE_2MB \ + -D SECURE_BOOT_ENABLE \ + -D SMM_REQUIRE \ + -D EXCLUDE_SHELL_FROM_FD + mv -v Build/Ovmf{Ia32,IA32-secure} + echo "Building ovmf (${_arch}) without secure boot" + OvmfPkg/build.sh -p OvmfPkg/OvmfPkgIa32.dsc \ + -a "${_arch}" \ + -b "${_build_type}" \ + -n "$(nproc)" \ + -t "${_build_plugin}" \ + -D LOAD_X64_ON_IA32_ENABLE \ + -D NETWORK_IP6_ENABLE \ + -D TPM_ENABLE \ + -D HTTP_BOOT_ENABLE \ + -D TLS_ENABLE \ + -D FD_SIZE_2MB + mv -v Build/Ovmf{Ia32,IA32} + fi + if [[ "${_arch}" == 'X64' ]]; then + echo "Building ovmf (${_arch}) with secure boot" + OvmfPkg/build.sh -p "OvmfPkg/OvmfPkg${_arch}.dsc" \ + -a "${_arch}" \ + -b "${_build_type}" \ + -n "$(nproc)" \ + -t "${_build_plugin}" \ + -D NETWORK_IP6_ENABLE \ + -D TPM_ENABLE \ + -D FD_SIZE_2MB \ + -D TLS_ENABLE \ + -D HTTP_BOOT_ENABLE \ + -D SECURE_BOOT_ENABLE \ + -D SMM_REQUIRE \ + -D EXCLUDE_SHELL_FROM_FD + mv -v Build/OvmfX64{,-secure} + echo "Building ovmf (${_arch}) without secure boot" + OvmfPkg/build.sh -p "OvmfPkg/OvmfPkg${_arch}.dsc" \ + -a "${_arch}" \ + -b "${_build_type}" \ + -n "$(nproc)" \ + -t "${_build_plugin}" \ + -D NETWORK_IP6_ENABLE \ + -D TPM_ENABLE \ + -D FD_SIZE_2MB \ + -D TLS_ENABLE \ + -D HTTP_BOOT_ENABLE + fi + done +} + +package_edk2-shell() { + pkgdesc="EDK2 UEFI Shell" + provides=('uefi-shell') + + cd "$pkgbase-$pkgver" + local _arch + # minimal UEFI shell, as defined in ShellPkg/Application/Shell/ShellPkg.inf + local _min='7C04A583-9E3E-4f1c-AD65-E05268D0B4D1' + # full UEFI shell, as defined in ShellPkg/ShellPkg.dsc + local _full='EA4BB293-2D7F-4456-A681-1F22F42CD0BC' + for _arch in ${_arch_list[@]}; do + install -vDm 644 "Build/Shell/${_build_type}_${_build_plugin}/${_arch}/Shell_${_min}.efi" \ + "${pkgdir}/usr/share/${pkgname}/${_arch,,}/Shell.efi" + install -vDm 644 "Build/Shell/${_build_type}_${_build_plugin}/${_arch}/Shell_${_full}.efi" \ + "${pkgdir}/usr/share/${pkgname}/${_arch,,}/Shell_Full.efi" + done + # license + install -vDm 644 License.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" + # docs + install -vDm 644 {ReadMe.rst,Maintainers.txt} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" +} + +package_edk2-ovmf() { + pkgdesc="Firmware for Virtual Machines" + provides=('ovmf') + conflicts=('ovmf') + replaces=('ovmf') + license+=('Expat') + install="${pkgname}.install" + + cd "$pkgbase-$pkgver" + local _arch + # installing the various firmwares + for _arch in ${_arch_list[@]}; do + # installing OVMF.fd for xen: https://bugs.archlinux.org/task/58635 + install -vDm 644 "Build/Ovmf${_arch}/${_build_type}_${_build_plugin}/FV/OVMF.fd" \ + -t "${pkgdir}/usr/share/${pkgname}/${_arch,,}" + install -vDm 644 "Build/Ovmf${_arch}/${_build_type}_${_build_plugin}/FV/OVMF_CODE.fd" \ + -t "${pkgdir}/usr/share/${pkgname}/${_arch,,}" + install -vDm 644 "Build/Ovmf${_arch}/${_build_type}_${_build_plugin}/FV/OVMF_VARS.fd" \ + -t "${pkgdir}/usr/share/${pkgname}/${_arch,,}" + install -vDm 644 "Build/Ovmf${_arch}-secure/${_build_type}_${_build_plugin}/FV/OVMF_CODE.fd" \ + "${pkgdir}/usr/share/${pkgname}/${_arch,,}/OVMF_CODE.secboot.fd" + done + # installing qemu descriptors in accordance with qemu: + # https://git.qemu.org/?p=qemu.git;a=tree;f=pc-bios/descriptors + # https://bugs.archlinux.org/task/64206 + install -vDm 644 ../*"${pkgname}"*.json -t "${pkgdir}/usr/share/qemu/firmware" + # adding symlink for previous ovmf location + # https://bugs.archlinux.org/task/66528 + ln -svf "/usr/share/${pkgname}" "${pkgdir}/usr/share/ovmf" + # adding a symlink for applications with questionable heuristics (such as lxd) + ln -svf "/usr/share/${pkgname}" "${pkgdir}/usr/share/OVMF" + # licenses + install -vDm 644 License.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 OvmfPkg/License.txt \ + "${pkgdir}/usr/share/licenses/${pkgname}/OvmfPkg.License.txt" + # docs + install -vDm 644 {OvmfPkg/README,ReadMe.rst,Maintainers.txt} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/edk2/edk2-ovmf.install b/edk2/edk2-ovmf.install new file mode 100644 index 0000000..37c8001 --- /dev/null +++ b/edk2/edk2-ovmf.install @@ -0,0 +1,6 @@ +post_install() { + # note for users of ovmf + if [ "$(vercmp "$1" '202002-9')" -le 0 ]; then + echo -e "The firmware location has changed to /usr/share/edk2-ovmf/. Symlinks are provided for backwards compatibility.\nNOTE: To update the paths run 'virsh edit' on virtual machines that use OVMF." + fi +} diff --git a/edk2/edk2-shell.install b/edk2/edk2-shell.install new file mode 100644 index 0000000..82552f1 --- /dev/null +++ b/edk2/edk2-shell.install @@ -0,0 +1 @@ +# empty install file to satisfy makepkg diff --git a/efitools/PKGBUILD b/efitools/PKGBUILD new file mode 100644 index 0000000..ce15a75 --- /dev/null +++ b/efitools/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=efitools +pkgver=1.9.2 +_debver=1.9.2 +_debrel=1 +pkgrel=1 +pkgdesc="Tools for manipulating UEFI secure boot platforms" +url='http://git.kernel.org/cgit/linux/kernel/git/jejb/efitools.git' +arch=('i686' 'x86_64') +replaces=('prebootloader') +license=('custom:GPL-2+OpenSSL-Linking-Exception' 'LGPL-2.1') +options=('!strip' '!makeflags') +depends=('libressl') +makedepends=('gnu-efi-libs' 'help2man' 'sbsigntools' 'perl-file-slurp' 'quilt') +source=("https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/snapshot/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/e/efitools/efitools_${_debver}-${_debrel}.debian.tar.xz" + "libressl.patch") +sha512sums=('77e0ad7e865814ed388ff6daabe0f4b49ba51672bf2cbb98b7905e209cbd28f9ede2f73213ce45af8a978c1e67dba24ec88a1188661317cc22317b47e575cde8' + '91b935de3e045fd0ade635a3095077599647d5dd3300e03099a53560ac3524d6acd06c09791784ba2d72fced082c4b8d652aba2de87aad92e14b5508cc60c315' + '27a5331f00fc3d8f18187120940b6e46c6267c0478663378a28c5beb80a761422162e002836a4f0db096a6386cbb2e2c5e328e9355638aab82b9556c992b9e0f') + +prepare() { + cd "${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + patch -p1 -i "${srcdir}/libressl.patch" +} + +build() { + cd "${pkgname}-${pkgver}" + # fix PreLoader.efi building on x86_64 + export ARCH="${CARCH}" + make +} + +package() { + # http://www.rodsbooks.com/efi-bootloaders/secureboot.html#prebootloader + # http://blog.hansenpartnership.com/uefi-secure-boot/ + # http://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/efitools/libressl.patch b/efitools/libressl.patch new file mode 100644 index 0000000..876baae --- /dev/null +++ b/efitools/libressl.patch @@ -0,0 +1,11 @@ +--- a/cert-to-efi-hash-list.c 2018-04-21 20:59:24.814748503 +0200 ++++ b/cert-to-efi-hash-list.c 2018-04-21 20:59:51.868581307 +0200 +@@ -135,7 +135,7 @@ + X509 *cert = PEM_read_bio_X509(cert_bio, NULL, NULL, NULL); + unsigned char *cert_buf = NULL; + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + int cert_len = i2d_X509_CINF(cert->cert_info, &cert_buf); + #else + int cert_len = i2d_re_X509_tbs(cert, &cert_buf); diff --git a/egoboo/PKGBUILD b/egoboo/PKGBUILD new file mode 100644 index 0000000..c87ad8a --- /dev/null +++ b/egoboo/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=egoboo +pkgver=2.8.1 +pkgrel=3 +arch=('i686' 'x86_64') +license=('GPL-2') +pkgdesc='An action RPG/dungeon crawling adventure with OpenGL 3D graphics.' +url='http://egoboo.sourceforge.net/' +depends=('sdl_image' 'sdl_mixer' 'sdl_ttf' 'physfs' 'enet' 'mesa' 'glu' 'glew') +groups=('games') +source=("http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz" + "keyboard_directions.patch" + "$pkgname.png" + "$pkgname.desktop") +sha512sums=('5793a63ba90f461ae99bcb81bf4ddf287b203bc2d401e1f697f1f4f93e1d681954e09b23938eb1a36e7dd535e2d12b8882efd77572cc63392cad5f9462ac3054' + '75a6be15f2fad61f98ae420acfdc5d371282c2b37feadd686e18f2f31041754d1d985c4f95f33d194a83d7c564d6c13e1205bfed29d161a1c3ba4b7f75e37780' + '5f89be790066c5e7047c87729cc67f49e33f8eedee39f705331d2a4a3b0857bb2bcaa0220dfd98fa4cdaadb10518212fb415b3e12fc7031679749080fcbdf9b5' + '7bb3a33eecbe7bb955213c7f51a5aa6225cf8efe92dbe92ea22ba4a439c11c29f3a7c1de144f2a769529ecde37d5972cb43f361f1022db99a8b6baf364275f11') + +build() { + cd "$srcdir/egoboo-$pkgver" + + # Patch default depth to 24 and sound + sed -i -e 's/\[COLOR_DEPTH\] : "32"/\[COLOR_DEPTH\] : "24"/g' \ + -e 's/\[Z_DEPTH\] : "32"/\[Z_DEPTH\] : "24"/g' \ + -e 's/\[OUTPUT_BUFFER_SIZE\] : "2548/\[OUTPUT_BUFFER_SIZE\] : "2048/g' \ + setup.txt + + cd "$srcdir/egoboo-$pkgver/src" + + # fix data paths + sed -i -e 's#egoboo-2.x#egoboo#g' \ + -e 's#etc#share/games#g' \ + game/platform/file_linux.c + + # fix linking + sed -i -e 's#-lenet#-lenet -lm#g' game/Makefile + + # fix keyboard bug + patch -Np1 -i $srcdir/keyboard_directions.patch + + make all +} + +package() { + cd "$srcdir/egoboo-$pkgver" + + install -Dm755 src/game/egoboo-2.x $pkgdir/usr/games/egoboo + install -d $pkgdir/usr/share/doc + cp -rf doc/ $pkgdir/usr/share/doc/$pkgname/ + + # Copy data and fix permissions + install -d ${pkgdir}/usr/share/games/egoboo + cp -rf controls.txt setup.txt basicdat/ modules/ ${pkgdir}/usr/share/games/egoboo/ + find ${pkgdir}/usr/share/games/egoboo -type f -exec chmod 644 {} + + + # Install icon and desktop files + install -Dm 644 $srcdir/$pkgname.png $pkgdir/usr/share/pixmaps/$pkgname.png + install -Dm 644 $srcdir/$pkgname.desktop $pkgdir/usr/share/applications/$pkgname.desktop + + # License + install -Dm644 license.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/egoboo/egoboo.desktop b/egoboo/egoboo.desktop new file mode 100644 index 0000000..b885a79 --- /dev/null +++ b/egoboo/egoboo.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=Egoboo +Exec=/usr/games/egoboo +Icon=egoboo +Type=Application +Comment=A 3D OpenGL dungeon-crawl +Categories=Game;AdventureGame;RolePlaying; diff --git a/egoboo/egoboo.png b/egoboo/egoboo.png new file mode 100644 index 0000000000000000000000000000000000000000..984be247da3bcc354dc330c870ca667b4f0929ad GIT binary patch literal 956 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI zAngIhZYQ(tK!Rljj_E*J0gT&!&6&%f` z+>X_;9**wYO;yQp%6_oFPF4j5z{^_5z%{T8? z^Ciydu@P^Nnp}MD*|p&B3O94enYt@o|$)l%L?eqSCweCRCa=h~U|;3UKC zDvj+obN1LOz1p_$PSNhWe6E2idw;Fem|F4b>9$h;W49C{*RNX#l&?D9xN21mi$(R* z_S?Ip{oVRoYRuh&-We>=cgZQ(e!FsEL}exKpMT%h-BIJ1^N;agEK_;E6=PXf?k|oL zU#HLWero@3+2;m^KfA8j${pr;F{yE{f7`cx(oajHZr)WcxYaLm?%cViNw&tve%M#e zW0ts9cj$WK-c|YnZ%g1{Uc^t0Yt~-AE zw0D5r+~Q^#6le2y{KQWbiugQF4`GrdvZt(<7Dx!yo_caPBc1x{P>QYJ3sb$ z)TTx*%9Qetiaq_KEV-w!a-M(O$xk-lKW%*XW5KQSiUw-xKturn_mode && 1 == local_numlpla ) || + !control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_CAMERA ) ) + { +- joy_pos.x = ( control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_RIGHT ) - control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_LEFT ) ); +- joy_pos.y = ( control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_DOWN ) - control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_UP ) ); ++ joy_pos.x = ( (int)control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_RIGHT ) - (int)control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_LEFT ) ); ++ joy_pos.y = ( (int)control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_DOWN ) - (int)control_is_pressed( INPUT_DEVICE_KEYBOARD, CONTROL_UP ) ); + + if ( CAM_TURN_GOOD == PCamera->turn_mode && + 1 == local_numlpla ) joy_pos.x = 0; diff --git a/eigen/PKGBUILD b/eigen/PKGBUILD new file mode 100644 index 0000000..45a09c6 --- /dev/null +++ b/eigen/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=eigen +pkgver=3.3.9 +pkgrel=1 +pkgdesc="Lightweight C++ template library for vector and matrix math, a.k.a. linear algebra." +arch=('any') +url='https://eigen.tuxfamily.org' +license=('LGPL-2.1') +makedepends=('cmake' 'freeglut' 'gcc-fortran' 'fftw' 'boost') +source=(https://gitlab.com/libeigen/eigen/-/archive/$pkgver/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/e/eigen3/eigen3_3.3.9-2.debian.tar.xz) +sha512sums=('16244cc89f2e1879543232b965cbf653b3ccf10e967c8c437a41e27d8320392bdf584d8c24b8a97406ab7d1481d5154da74e0702ec1334ae6a46de83f4573a46' + 'ac5c45bbcb2603047fa98abdf8da0cb439d6f20de0ba1b9155eddea80a4a1c028d0bea4b257043717768140655ab52be980ae997d51faee983168201195927fc') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # install custom licenses + install -Dm644 $pkgname-$pkgver/COPYING.* -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/elinks/PKGBUILD b/elinks/PKGBUILD new file mode 100644 index 0000000..6a18e25 --- /dev/null +++ b/elinks/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=elinks +pkgver=0.13.2 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="An advanced and well-established feature-rich text mode web browser" +arch=('i686' 'x86_64') +url='http://elinks.or.cz' +license=('GPL-2') +depends=('bzip2' 'expat' 'gpm' 'libressl' 'lua51' 'libidn' 'gc' 'tre' 'zlib') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tgz::https://github.com/rkd77/elinks/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/e/elinks/elinks_${_debver}-${_debrel}.debian.tar.xz" + "fix-build.patch") +sha512sums=('98d3dbd5621b8e43d3cbc98f0710772df38484830fb841d6b68b83508bc963ca8bc3cf2ecca6b1658e2c12ed498c8ef34e6f05f48814d249c2de2f5c80f7f07f' + 'f0c6f5a86e29351dc7681cff0b3c42948a4233f4806af4778333753934eb06099b8179e781ee4f7d6f34c1c2984f80f891d279b9e0420ace2f4bcb0a231711be' + '995fc3b938f5ab291fcadbece295200d3f9e1a9b3305b356f26e44d5595fa00fbe9bba0cce8d98085558467658db18bf09278dcd5d8a1c609f225e943bf2dfba') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + sed -i 's/Terminal=1/Terminal=true/' "contrib/debian/$pkgname.desktop" + [ -x configure ] || sh autogen.sh + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --sysconfdir=/etc \ + --disable-smb \ + --without-x \ + --without-zstd \ + --enable-cgi \ + --enable-leds \ + --enable-256-colors \ + --enable-html-highlight \ + --enable-gopher \ + --with-zlib + + # additional fixes before building + patch -Np1 -i ${srcdir}/fix-build.patch + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + rm -f "$pkgdir/usr/share/locale/locale.alias" + + install -D -m644 "contrib/debian/$pkgname.desktop" \ + "$pkgdir/usr/share/applications/$pkgname.desktop" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/elinks/fix-build.patch b/elinks/fix-build.patch new file mode 100644 index 0000000..4b69964 --- /dev/null +++ b/elinks/fix-build.patch @@ -0,0 +1,10 @@ +--- a/Makefile 2020-05-31 15:15:37.000000000 +0200 ++++ b/Makefile 2021-07-30 13:24:18.750296782 +0200 +@@ -2,7 +2,6 @@ + -include $(top_builddir)/Makefile.config + + SUBDIRS = doc src +-SUBDIRS-$(CONFIG_NLS) += po + CLEAN = features.log + calltest = $1-$1 + diff --git a/enca/PKGBUILD b/enca/PKGBUILD new file mode 100644 index 0000000..0ada790 --- /dev/null +++ b/enca/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=enca +pkgver=1.19 +pkgrel=1 +pkgdesc='Charset analyser and converter' +arch=('i686' 'x86_64') +url='https://cihar.com/software/enca/' +license=('GPL-2') +depends=('recode') +options=('!docs') +source=("https://dl.cihar.com/${pkgname}/${pkgname}-${pkgver}.tar.xz" + "enca-bad-file-descriptor.patch") +sha512sums=('6678639992685180457bbef7b0da6e475071ec6935dfd672188fc242ef80b906e75eff9a206e07989893d0ef4ae5eb500f1d0bbd6b4d58146c94bb143b5fb296' + 'e8b0aab0de2dad40255a539eb12d716b78232e7acd42834b856a763cc6653d49af04922724a844d703040d83581a3802b7f2f43c8c514cc7f133fb543cdbf82e') + +prepare() { + cd $pkgname-$pkgver + patch -p1 -i ../enca-bad-file-descriptor.patch +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr \ + --libexecdir=/usr/lib \ + --mandir=/usr/share/man \ + --with-librecode=/usr \ + --enable-external + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/enca/enca-bad-file-descriptor.patch b/enca/enca-bad-file-descriptor.patch new file mode 100644 index 0000000..2f6ad91 --- /dev/null +++ b/enca/enca-bad-file-descriptor.patch @@ -0,0 +1,35 @@ +--- a/src/convert_recode.c ++++ b/src/convert_recode.c +@@ -101,7 +101,8 @@ convert_recode(File *file, + return ERR_IOFAIL; + file->buffer->pos = 0; + +- if ((tempfile = file_temporary(file->buffer, 1)) == NULL ++ /* We do not unlink tempfile, because we want to reopen it later */ ++ if ((tempfile = file_temporary(file->buffer, 0)) == NULL + || file_seek(file, 0, SEEK_SET) != 0) { + file_free(tempfile); + return ERR_IOFAIL; +@@ -112,9 +113,20 @@ convert_recode(File *file, + task->fail_level = enca_recode_fail_level; + task->abort_level = RECODE_SYSTEM_ERROR; + task->input.name = NULL; +- task->input.file = file->stream; + task->output.name = NULL; +- task->output.file = tempfile->stream; ++ /* recode_perform_task closes given streams, so we need to duplicate them */ ++ task->input.file = fopen(file->name, "rb"); ++ if (task->input.file == NULL) { ++ fprintf(stderr, "failed to reopen `%s'\n", file->name); ++ file_free(tempfile); ++ return ERR_IOFAIL; ++ } ++ task->output.file = fopen(tempfile->name, "wb"); ++ if (task->input.file == NULL) { ++ fprintf(stderr, "failed to reopen `%s'\n", tempfile->name); ++ file_free(tempfile); ++ return ERR_IOFAIL; ++ } + + /* Now run conversion original -> temporary file. */ + success = recode_perform_task(task); diff --git a/encfs/PKGBUILD b/encfs/PKGBUILD new file mode 100644 index 0000000..5eb4fde --- /dev/null +++ b/encfs/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=encfs +pkgver=1.9.5 +pkgrel=1 +pkgdesc="Encrypted filesystem in user-space" +arch=('i686' 'x86_64') +url='https://vgough.github.io/encfs/' +license=('LGPL-3') +depends=('libressl' 'fuse2' 'tinyxml2') +makedepends=('cmake' 'gettext-tiny') +source=("https://github.com/vgough/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz"{,.asc}) +sha512sums=('036e08ca9bc13b44742aebdee49bf7029d0c6b7e59cd6dedc9a09da2af99482859f6a79eddf07e3db296edaf45aafc48fe08488840e765682e9b192dd6ae4c46' + 'SKIP') +validpgpkeys=('FFF3E01444FED7C316A3545A895F5BC123A02740') # Jakob Unterwurzacher + +build() { + cmake \ + -B build \ + -S $pkgname-$pkgver \ + -DUSE_INTERNAL_TINYXML=OFF \ + -DINSTALL_LIBENCFS=ON \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=/usr + cmake --build build +} + +package() { + DESTDIR="${pkgdir}" cmake --install build + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING.LGPL" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/enchant/PKGBUILD b/enchant/PKGBUILD new file mode 100644 index 0000000..6add1cf --- /dev/null +++ b/enchant/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=enchant +pkgver=1.6.0 +_pkgver=1-6-0 +_debver=$pkgver +_debrel=11.1 +pkgrel=3 +pkgdesc="A wrapper library for generic spell checking" +arch=(i686 x86_64) +url='https://abiword.github.io/enchant/' +license=(LGPL-2.1) +depends=('aspell' 'glib2' 'hspell' 'hunspell' 'ispell' 'libvoikko') +makedepends=('quilt') +source=($pkgname-$pkgver.tar.gz::https://github.com/AbiWord/$pkgname/archive/refs/tags/$pkgname-$_pkgver.tar.gz + https://deb.debian.org/debian/pool/main/e/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('3de201553634d52e636ec3e36b13b5a1fba31091ce8e1a06e99b9e02ac478ae70da9e830f4334eedc36ff353ea6cda20d77d6d7899e1feb69cd04b96df915970' + '90b36e5bc51449600e1074c6dc36e725776d291aab98a2c681baae145c6081a8f722ec749f9960577b634917dc8add239258739817d71c548534d908fbd3ccda') + +prepare() { + mv $pkgname-{$pkgname-$_pkgver,$pkgver} + + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -vfi +} + + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING.LIB -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/enet/PKGBUILD b/enet/PKGBUILD new file mode 100644 index 0000000..ef80feb --- /dev/null +++ b/enet/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=enet +pkgver=1.3.17 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A relatively thin, simple and robust network communication layer on top of UDP" +arch=('i686' 'x86_64') +url='http://enet.bespin.org/' +license=('Expat') +depends=('glibc') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/e/enet/enet_${pkgver}+ds.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/e/enet/enet_${_debver}+ds-${_debrel}.debian.tar.xz") +sha512sums=('c2c8d1361ec035bb8c3c88803a331994ac1e0e37db13f5f6c2f2a1ec146edd71f8d2c770ba1fb6d13ecc9c85204cc993cd917e0225989e93214b1ce0954aa0cd' + '1ee02ae658b2ef19a845d49ec92dd5779e52ba8368e897f655f0a5aeb1ffe8ca84870d9af412c5aac79bfabaeb1d78ae767f633fd926a9f021aa005225b82e9b') + +prepare() { + mv "${pkgname}-${pkgver}+ds" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/enscript/PKGBUILD b/enscript/PKGBUILD new file mode 100644 index 0000000..11fab17 --- /dev/null +++ b/enscript/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=enscript +pkgver=1.6.5.90 +_debver=1.6.5.90 +_debrel=3 +pkgrel=1 +pkgdesc='Convert ASCII files to PostScript suitable for printing' +arch=('i686' 'x86_64') +url='https://git.savannah.gnu.org/cgit/enscript.git' +license=('GPL-3') +depends=('glibc' 'perl') +makedepends=('quilt') +backup=('etc/enscript/enscript.cfg') +source=(https://deb.debian.org/debian/pool/main/e/enscript/enscript_${pkgver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/e/enscript/enscript_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('54c51c2ef8d2c9e1eb3398e450ddeb31ddaea9870767d8c0d3bc936b11cd23e1b23301621e835e9694a603757e5aa0a84159cbd6afafd66fce7b3961c88e735f' + '91dfffecc143fc492d32131a9e0deb4b761795a049e15477832eef043402a8f6d40f158f9b140f902923bf2dbc33645e2c49bb0ba2e282edfab740c22265c86d') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/01_libpaper || true + rm -v debian/patches/06_debian || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc/enscript + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/entr/PKGBUILD b/entr/PKGBUILD new file mode 100644 index 0000000..65180d7 --- /dev/null +++ b/entr/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=entr +pkgver=4.7 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Run arbitrary commands when files change" +license=('Simplified-BSD' 'ISC') +arch=('i686' 'x86_64') +url='https://eradman.com/entrproject/' +options=('strip') +depends=('glibc' 'libbsd') +makedepends=('quilt') +source=("https://eradman.com/entrproject/code/${pkgname}-${pkgver}.tar.gz" + "http://deb.debian.org/debian/pool/main/e/entr/entr_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('2db61c9f66d3b8e138f23b8cb422cf56c71583a5116e614269c49fe7c336ac79cb77917b26b060f09142e2028fd96c3f169c11caffaae0e5d6e7c05bbb36d92c' + '8523be6cf7b936ad6d7f68cf0a21a6c07abfe7645dd21ddd4e04ff9012b7e355ba60abc967c86585f7cebfd95319a18cf7706c697d15fccdd76650e19e86a4f1') + +prepare() { + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + cp Makefile.linux Makefile + make PREFIX=/usr +} + +package() { + cd "$pkgname-$pkgver" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/epdfview/PKGBUILD b/epdfview/PKGBUILD new file mode 100644 index 0000000..f74425a --- /dev/null +++ b/epdfview/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=epdfview +pkgver=0.1.8 +pkgrel=11 +pkgdesc='Lightweight PDF document viewer' +url='http://freecode.com/projects/epdfview' +arch=('i686' 'x86_64') +license=('GPL-1') +depends=('poppler-glib' 'desktop-file-utils' 'hicolor-icon-theme' 'gtk2') +makedepends=('pkgconfig') +source=(ftp://ftp.slackware.com/.1/blfs/conglomeration/epdfview/$pkgname-$pkgver.tar.bz2 + epdfview-0.1.8-swap-the-blue-and-red-channel.patch + epdfview-0.1.8-glib2-headers.patch + epdfview-0.1.8-modern-cups.patch + epdfview-0.1.8-pictures.patch) +sha512sums=('e81ca39158ed77040a00b69cdbbea4726a1bbf4885a096aaa3dfc4c64d0cbcadabdc69c559bb14d23c2bf7fc8244799176d2c2d5689ab670c13237edc10e8e40' + '2cebfe5697347762c34a9fa51bc9688c6a534a70a7990c2496ec63a10ac862095170da91eed450c8c68d3b4a6fbc17666f7a10a9cf3f2348dfe5f3b6e4e7ae9c' + '7047e09ad47ad8ce09df0869b7881cffd85900599acbec7d1ffea24e5efcfbc4cffd2084f0af981956b9681419ca81408a40a6aeae6edaa9f2b0637a47741359' + '5774b4b18dae74e16bc52bf51e9e08fdd9292a9a4208d9d8e6baf49e0844535c3794370d407177d4bf3390e6a1d9a5b62118e5d9ca1c346d6d0629dff272fc52' + '741cc74fc58b3871fc24461de3174f3369a47071bca47d6240772fe73d9f8a53de1b6876e07d574074fd610cf21f54499f676297b2588ca9a01d3bf4f7f1c58c') + +prepare() { + cd $pkgname-$pkgver + sed -i 's/icon_epdfview-48/epdfview/' data/epdfview.desktop + + # Use xdg-open as default browser. + sed -r '/DEFAULT_EXTERNAL_BROWSER_COMMAND_LINE/s/firefox[^ ]*/xdg-open/' -i src/Config.cxx + + patch -p1 -i ../epdfview-0.1.8-swap-the-blue-and-red-channel.patch + patch -p1 -i ../epdfview-0.1.8-glib2-headers.patch # FS#30116 + patch -p1 -i ../epdfview-0.1.8-modern-cups.patch # FS#32511 + patch -p1 -i ../epdfview-0.1.8-pictures.patch # FS#44936 +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + for size in 24 32 48; do + install -Dm644 data/icon_$pkgname-$size.png \ + "$pkgdir"/usr/share/icons/hicolor/${size}x${size}/apps/$pkgname.png + done + install -Dm644 -t "$pkgdir"/usr/share/licenses/$pkgname COPYING +} diff --git a/epdfview/epdfview-0.1.8-glib2-headers.patch b/epdfview/epdfview-0.1.8-glib2-headers.patch new file mode 100644 index 0000000..57d66c9 --- /dev/null +++ b/epdfview/epdfview-0.1.8-glib2-headers.patch @@ -0,0 +1,12 @@ +diff --git a/src/gtk/StockIcons.h b/src/gtk/StockIcons.h +index c142a7a..58fcf2e 100644 +--- a/src/gtk/StockIcons.h ++++ b/src/gtk/StockIcons.h +@@ -18,7 +18,7 @@ + #if !defined (__STOCK_ICONS_H__) + #define __STOCK_ICONS_H__ + +-#include ++#include + + G_BEGIN_DECLS \ No newline at end of file diff --git a/epdfview/epdfview-0.1.8-modern-cups.patch b/epdfview/epdfview-0.1.8-modern-cups.patch new file mode 100644 index 0000000..cdf8211 --- /dev/null +++ b/epdfview/epdfview-0.1.8-modern-cups.patch @@ -0,0 +1,73 @@ +diff -Naur epdfview-0.1.8.orig/src/PrintPter.cxx epdfview-0.1.8/src/PrintPter.cxx +--- epdfview-0.1.8.orig/src/PrintPter.cxx 2011-05-28 11:25:01.000000000 +0100 ++++ epdfview-0.1.8/src/PrintPter.cxx 2012-08-22 20:11:46.362436859 +0100 +@@ -22,6 +22,40 @@ + #include + #include "epdfview.h" + ++#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) ++#define HAVE_CUPS_1_6 1 ++#endif ++ ++#ifndef HAVE_CUPS_1_6 ++inline int ippGetInteger (ipp_attribute_t *attr, int element) ++{ ++ return (attr->values[element].integer); ++} ++ ++inline const char * ippGetString (ipp_attribute_t *attr, ++ int element, ++ const char **language /*UNUSED*/) ++{ ++ return (attr->values[element].string.text); ++} ++ ++inline int ippSetOperation (ipp_t *ipp, ipp_op_t op) ++{ ++ if (!ipp) ++ return (0); ++ ipp->request.op.operation_id = op; ++ return (1); ++} ++ ++inline int ippSetRequestId (ipp_t *ipp, int request_id) ++{ ++ if (!ipp) ++ return (0); ++ ipp->request.any.request_id = request_id; ++ return (1); ++} ++#endif ++ + using namespace ePDFView; + + // Structures +@@ -380,8 +414,8 @@ + + ipp_t *request = ippNew (); + +- request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES; +- request->request.op.request_id = 1; ++ ippSetOperation(request, IPP_GET_PRINTER_ATTRIBUTES); ++ ippSetRequestId(request, 1); + + ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, + "attributes-charset", NULL, "utf-8"); +@@ -403,7 +437,7 @@ + ippFindAttribute (answer, "printer-state", IPP_TAG_ZERO); + if ( NULL != state ) + { +- switch (state->values[0].integer) ++ switch (ippGetInteger (state, 0)) + { + case IPP_PRINTER_IDLE: + attributes->state = g_strdup (_("Idle")); +@@ -425,7 +459,7 @@ + ippFindAttribute (answer, "printer-location", IPP_TAG_ZERO); + if ( NULL != location ) + { +- attributes->location = g_strdup (location->values[0].string.text); ++ attributes->location = g_strdup (ippGetString (location, 0, NULL)); + } + + ippDelete (answer); \ No newline at end of file diff --git a/epdfview/epdfview-0.1.8-pictures.patch b/epdfview/epdfview-0.1.8-pictures.patch new file mode 100644 index 0000000..95b5ed7 --- /dev/null +++ b/epdfview/epdfview-0.1.8-pictures.patch @@ -0,0 +1,13 @@ +diff --git a/src/PDFDocument.cxx b/src/PDFDocument.cxx +index df5d75f..782f806 100644 +--- a/src/PDFDocument.cxx ++++ b/src/PDFDocument.cxx +@@ -616,7 +616,7 @@ PDFDocument::renderPage (gint pageNum) + #if defined (HAVE_POPPLER_0_17_0) + cairo_surface_t *surface = cairo_image_surface_create_for_data ( + renderedPage->getData (), +- CAIRO_FORMAT_RGB24, width, height, ++ CAIRO_FORMAT_ARGB32, width, height, + renderedPage->getRowStride ()); + cairo_t *context = cairo_create (surface); + cairo_save(context); \ No newline at end of file diff --git a/epdfview/epdfview-0.1.8-swap-the-blue-and-red-channel.patch b/epdfview/epdfview-0.1.8-swap-the-blue-and-red-channel.patch new file mode 100644 index 0000000..0d9a2c2 --- /dev/null +++ b/epdfview/epdfview-0.1.8-swap-the-blue-and-red-channel.patch @@ -0,0 +1,59 @@ +From d30496f52b85f82947bd07b9bd60f8482843ece8 Mon Sep 17 00:00:00 2001 +From: jordi +Date: Tue, 5 Jul 2011 09:23:38 +0000 +Subject: [PATCH 1/2] When using Poppler 0.17.0, I needed to swap the blue and + red channels, otherwise the colors (other than black + and white) looked wierd. + +git-svn-id: svn://svn.emma-soft.com/epdfview/trunk@367 cb4bfb15-1111-0410-82e2-95233c8f1c7e +--- + src/PDFDocument.cxx | 20 ++++++++++++++++++++ + 1 files changed, 20 insertions(+), 0 deletions(-) + +diff --git a/src/PDFDocument.cxx b/src/PDFDocument.cxx +index df5d75f..63b3513 100644 +--- a/src/PDFDocument.cxx ++++ b/src/PDFDocument.cxx +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include "epdfview.h" + + using namespace ePDFView; +@@ -33,6 +34,24 @@ static PageLayout convertPageLayout (gint pageLayout); + static PageMode convertPageMode (gint pageMode); + static gchar *getAbsoluteFileName (const gchar *fileName); + ++namespace ++{ ++ void ++ convert_bgra_to_rgba (guint8 *data, int width, int height) ++ { ++ using std::swap; ++ ++ for (int y = 0; y < height; y++) ++ { ++ for (int x = 0; x < width; x++) ++ { ++ swap(data[0], data[2]); ++ data += 4; ++ } ++ } ++ } ++} ++ + /// + /// @brief Constructs a new PDFDocument object. + /// +@@ -650,6 +669,7 @@ PDFDocument::renderPage (gint pageNum) + poppler_page_render (page, context); + cairo_destroy(context); + cairo_surface_destroy (surface); ++ convert_bgra_to_rgba(renderedPage->getData (), width, height); + #else // !HAVE_POPPLER_0_17_0 + // Create the pixbuf from the data and render to it. + GdkPixbuf *pixbuf = gdk_pixbuf_new_from_data (renderedPage->getData (), +-- +1.7.7 \ No newline at end of file diff --git a/espeak/PKGBUILD b/espeak/PKGBUILD new file mode 100644 index 0000000..f64144d --- /dev/null +++ b/espeak/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=espeak +pkgver=1.48.15 +_debver=1.48.15 +_debrel=2 +pkgrel=1 +epoch=1 +pkgdesc='Text to Speech engine for English, with support for other languages' +arch=('i686' 'x86_64') +url='http://espeak.sourceforge.net/' +license=('GPL-3') +depends=('portaudio') +makedepends=('quilt') +options=('!emptydirs') +source=("https://deb.debian.org/debian/pool/main/e/espeak/espeak_${pkgver}+dfsg.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/e/espeak/espeak_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('1b51cd9115af322d67ebf5772873d5495ac144d862dddacfb2fe0192f6d74aa580e50d425d18df38c855996a94607c42e6be536e13dc74e89ac82473b9696ec0' + '736c5a36d28cc5717c976d3616c88d57f40136023ef922ecb87ffdebf85714a9c7a30752529f5d5071ec15907edec90ea4c60fccfefaee17acd1fe488598761e') + +prepare() { + mv "$pkgname-$pkgver+dfsg" "$pkgname-$pkgver" + + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian ./ + + # Doesn't apply + rm -v debian/patches/sonic || true + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver/src" + + cp portaudio19.h portaudio.h + make CXXFLAGS="$CXXFLAGS -w -std=c++98" AUDIO=portaudio +} + +package() { + cd "$pkgname-$pkgver/src" + + make DESTDIR="$pkgdir" install + chmod 644 "$pkgdir/usr/lib/libespeak.a" + + install -Dm644 "${srcdir}/$pkgname-$pkgver/License.txt" -t ${pkgdir}/usr/share/licenses/${pkgname}/ +} diff --git a/etl/PKGBUILD b/etl/PKGBUILD new file mode 100644 index 0000000..79999db --- /dev/null +++ b/etl/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=etl +pkgver=1.4.5 +pkgrel=1 +pkgdesc='VoriaETL: C++ STL complementory multiplatform template library' +arch=('any') +url='https://synfig.org' +license=('GPL-3') +makedepends=('glibmm') +source=("https://downloads.sourceforge.net/synfig/ETL-$pkgver.tar.gz") +sha512sums=('3fab8d6c62effddedbe118d572e94a3cd3fd5675c29c2921b265a8a5df0ddf77967caf5d6c0e40ac4bd0f79fbfb522b7948a042619678a1079bebf95eabf3d95') + +build() { + cd "$srcdir"/ETL-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir"/ETL-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/eureka/PKGBUILD b/eureka/PKGBUILD new file mode 100644 index 0000000..c222db3 --- /dev/null +++ b/eureka/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=eureka +pkgver=1.27b +pkgrel=2 +pkgdesc="A free and libre map editor for the classic DOOM games" +arch=('i686' 'x86_64') +url='http://eureka-editor.sourceforge.net/' +license=('GPL-2') +depends=('fltk' 'glu') +groups=('games') +source=("https://download.sourceforge.net/${pkgname}-editor/${pkgname}-${pkgver}-source.tar.gz" + "fhs-compliant.patch") +sha512sums=('4b2ce44a99acbe1b9dd2cf31ee5c3307f5f667422ba18bee8c3f9858e9244ee05c48e96b5afa4cdf65dfd079bca19a5693b6d123b5563549d1f84ca03137eb5e' + '1021a712f80be5a9934aa88bd334d7cf865c2f80ac593ebb7dcb3a1e5484410dc068ac635cb7dc00b8fc0bdba497ce43a14c18205a6b1bdfa87901644db0f66f') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}-source" + patch -p1 -i "${srcdir}/fhs-compliant.patch" +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}-source" + make PREFIX=/usr OPTIMISE="$CXXFLAGS $CPPFLAGS" +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}-source" + make PREFIX="${pkgdir}/usr" install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}-source/misc/${pkgname}.xpm" "${pkgdir}/usr/share/pixmaps/${pkgname}.xpm" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}-source/misc/${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}-source/misc/${pkgname}.6" "${pkgdir}/usr/share/man/man6/${pkgname}.6" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}-source/GPL.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/eureka/fhs-compliant.patch b/eureka/fhs-compliant.patch new file mode 100644 index 0000000..3eea665 --- /dev/null +++ b/eureka/fhs-compliant.patch @@ -0,0 +1,58 @@ +--- a/Makefile 2020-02-05 08:40:29.000000000 +0100 ++++ b/Makefile 2022-07-18 13:58:58.438529428 +0200 +@@ -148,10 +148,11 @@ + # note that DESTDIR is usually left undefined, and is mainly + # useful when making packages for Debian/RedHat/etc... + +-INSTALL_DIR=$(DESTDIR)$(PREFIX)/share/eureka ++INSTALL_DIR=$(DESTDIR)$(PREFIX)/share/games/eureka + + install: all +- install -m 755 $(PROGRAM) $(DESTDIR)$(PREFIX)/bin/ ++ install -d $(PREFIX)/games ++ install -m 755 $(PROGRAM) $(DESTDIR)$(PREFIX)/games/ + install -d $(INSTALL_DIR)/games + install -d $(INSTALL_DIR)/common + install -d $(INSTALL_DIR)/ports +--- a/src/main.cc 2020-02-01 08:51:21.000000000 +0100 ++++ b/src/main.cc 2022-07-18 14:05:28.527907253 +0200 +@@ -325,7 +325,7 @@ + + for (int i = 0 ; prefixes[i] ; i++) + { +- install_dir = StringPrintf("%s/share/eureka", prefixes[i]); ++ install_dir = StringPrintf("%s/share/games/eureka", prefixes[i]); + + const char *filename = StringPrintf("%s/games/doom2.ugh", install_dir); + +--- a/src/main.h 2020-04-17 07:58:51.000000000 +0200 ++++ b/src/main.h 2022-07-18 14:05:55.778562364 +0200 +@@ -129,7 +129,7 @@ + extern bool app_has_focus; + extern bool in_fatal_error; + +-extern const char *install_dir; // install dir (e.g. /usr/share/eureka) ++extern const char *install_dir; // install dir (e.g. /usr/share/games/eureka) + extern const char *home_dir; // home dir (e.g. $HOME/.eureka) + extern const char *cache_dir; // for caches and backups, can be same as home_dir + +--- a/misc/eureka.6 2019-09-30 08:55:30.000000000 +0200 ++++ b/misc/eureka.6 2022-07-18 14:07:15.540479856 +0200 +@@ -77,7 +77,7 @@ + The installation directory where game definition files, default key + bindings, etc are stored. + This defaults to +-.I $PREFIX/share/eureka ++.I $PREFIX/share/games/eureka + (see FILES section below...) + + Specifying "." for the current directory is useful when testing a +@@ -101,7 +101,7 @@ + uses the Preferences dialog. + .SH FILES + .TP +-.I "$PREFIX/share/eureka/ ++.I "$PREFIX/share/games/eureka/ + The installation directory for Eureka. + PREFIX is typically /usr or /usr/local, + depending on how Eureka was installed. diff --git a/evtest/PKGBUILD b/evtest/PKGBUILD new file mode 100644 index 0000000..e676940 --- /dev/null +++ b/evtest/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=evtest +pkgver=1.34 +pkgrel=1 +pkgdesc="Input device event monitor and query tool" +arch=('i686' 'x86_64') +url='https://cgit.freedesktop.org/evtest/' +license=('GPL-2') +depends=('glibc') +makedepends=('asciidoc' 'xmlto') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/e/evtest/evtest_${pkgver}.orig.tar.xz") +sha512sums=('dafa1162da6aaaaa37a29856437611a61d097aca4ced8cbeb4aab9834102305375b1f414306edb11e13567141d1c8abf07198a6debea2a5c674f3c6634a5d8d5') + +build() { + cd "$pkgname-$pkgver" + ./autogen.sh + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/exfatprogs/PKGBUILD b/exfatprogs/PKGBUILD new file mode 100644 index 0000000..cb0df93 --- /dev/null +++ b/exfatprogs/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=exfatprogs +pkgver=1.1.0 +pkgrel=1 +pkgdesc='exFAT filesystem userspace utilities for the Kernel exfat driver' +arch=('i686' 'x86_64') +url='https://github.com/exfatprogs/exfatprogs' +license=('GPL-2') +depends=('glibc') +provides=('exfat-utils') +conflicts=('exfat-utils') +source=("https://github.com/exfatprogs/exfatprogs/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('98a226745dd2f32f52acac089ce4fc64e45cb6d43979ed0d87fdb97912d18cfcb29164e8367e5f2203adaa67b06ed5aa5a25a05552730a8019702e5d69d04407') + +prepare() { + cd ${pkgname}-${pkgver} + ./autogen.sh +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --sbindir=/usr/sbin + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 -t "${pkgdir}"/usr/share/man/man8 */*.8 + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/exiv2/PKGBUILD b/exiv2/PKGBUILD new file mode 100644 index 0000000..296747c --- /dev/null +++ b/exiv2/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=exiv2 +pkgver=0.27.3 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="Exif, Iptc and XMP metadata manipulation library and tools" +url='https://exiv2.org' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('curl' 'expat' 'gcc-libs' 'gettext-tiny' 'libssh' 'zlib') +makedepends=('cmake' 'quilt') +source=("https://github.com/Exiv2/${pkgname}/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/e/${pkgname}/${pkgname}_${_debver}-${_debrel}+deb11u2.debian.tar.xz") +sha512sums=('92775e1c79f06f7b4fb4c214cb2732982cbf01d8bc07d0e8f440facca712a41e579ef2baf72a0471889bb74d3f4975fbc76b47adbe6839decb6770458f76a341' + '85025eb45975ca5764126c5dd8bd1c681f99ec03dc3e033b6dc8b616e9f9159fa80605db8ef376aac192549f619b83bbc21bcd395aa29099ff517ba0168103df') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + cmake \ + -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_SKIP_RPATH=ON \ + -DEXIV2_BUILD_SAMPLES=OFF \ + -DEXIV2_BUILD_UNIT_TESTS=OFF \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_ENABLE_NLS=ON \ + -DEXIV2_ENABLE_VIDEO=ON \ + -DEXIV2_ENABLE_SSH=ON \ + -DEXIV2_ENABLE_WEBREADY=ON + make -C build VERBOSE=1 +} + +package() { + cd ${pkgname}-${pkgver} + make -C build DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/expac/PKGBUILD b/expac/PKGBUILD new file mode 100644 index 0000000..b1aafef --- /dev/null +++ b/expac/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=expac +pkgver=10 +pkgrel=2 +pkgdesc="pacman database extraction utility" +arch=('i686' 'x86_64') +url='https://github.com/falconindy/expac' +license=('Expat') +depends=('pacman') +makedepends=('perl' 'meson') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/falconindy/expac/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('3ff2868a2c734b6e68091ebd8f733709b9846031f1d1c20794385262a1e245ed920342428316b2716a995bd9da81c41c668dc12a7d99c82eece006c7b84f843d') + +prepare() { + cd ${pkgname}-${pkgver} + + sed '/\*\//q' src/expac.c >LICENSE +} + +build() { + cd ${pkgname}-${pkgver} + + meson build + ninja -C build +} + +package() { + cd ${pkgname}-${pkgver} + + DESTDIR=$pkgdir ninja -C build install + + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/expect/PKGBUILD b/expect/PKGBUILD new file mode 100644 index 0000000..a7d3b65 --- /dev/null +++ b/expect/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=expect +pkgver=5.45.4 +_debver=5.45.4 +_debrel=2 +pkgrel=2 +pkgdesc='A tool for automating interactive applications' +arch=(i686 x86_64) +url='http://www.nist.gov/el/msid/expect.cfm' +license=(Public-Domain) +depends=(tcl) +makedepends=(quilt) +source=(https://downloads.sourceforge.net/project/expect/Expect/$pkgver/expect${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/e/expect/expect_$_debver-$_debrel.debian.tar.xz + public-domain.txt) +sha512sums=('a8dc25e8175f67e029e15cbcfca1705165c1c4cb2dd37eaaaebffb61e3ba132d9519cd73ca5add4c3358a2b0b7a91e878279e8d0b72143ff2c287fce07e4659a' + '33b6d60e96ff4faabe663480d9e2a650db049151d7780ab7d322b9303b6c1d06e59384d232cec2ada62a81881e013413795170040a5f62f96980f7e05e145326' + '2d6eae51298801dae8dda6575a67d0403b28f21b5b4d8dae63f39bc9d0109c956f1d2ff5047794fa481e4630b0a448aebc057dc1f4ec80ad07dbfc566c7d0dc3') + +prepare() { + cd expect${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/02-example-cryptdir.patch || true + rm -v debian/patches/05-makefile-soname.patch || true + rm -v debian/patches/06-pkgindex.patch || true + rm -v debian/patches/29-suggest-tk.patch || true + + quilt push -av + fi +} + +build() { + cd expect${pkgver} + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +check() { + cd expect${pkgver} + make test +} + +package() { + cd expect${pkgver} + make DESTDIR="$pkgdir" install + install -Dm644 README "$pkgdir/usr/share/licenses/$pkgname/README" + install -Dm644 ../public-domain.txt "$pkgdir/usr/share/licenses/$pkgname/public-domain.txt" +} diff --git a/expect/public-domain.txt b/expect/public-domain.txt new file mode 100644 index 0000000..05592cf --- /dev/null +++ b/expect/public-domain.txt @@ -0,0 +1,3 @@ +Design and implementation of this program was paid for by U.S. tax +dollars. Therefore it is public domain. However, the author and NIST +would appreciate credit if this program or parts of it are used. diff --git a/extra-cmake-modules/ECM-no-init.py.patch b/extra-cmake-modules/ECM-no-init.py.patch new file mode 100644 index 0000000..9acc733 --- /dev/null +++ b/extra-cmake-modules/ECM-no-init.py.patch @@ -0,0 +1,10 @@ +diff --git a/find-modules/GeneratePythonBindingUmbrellaModule.cmake b/find-modules/GeneratePythonBindingUmbrellaModule.cmake +index de79393..144fab4 100644 +--- a/find-modules/GeneratePythonBindingUmbrellaModule.cmake ++++ b/find-modules/GeneratePythonBindingUmbrellaModule.cmake +@@ -4,4 +4,4 @@ get_filename_component(PYTHON_UMBRELLA_MODULE_DIR ${PYTHON_UMBRELLA_MODULE_FILE} + + file(MAKE_DIRECTORY "${PYTHON_UMBRELLA_MODULE_DIR}") + +-execute_process(COMMAND "${CMAKE_COMMAND}" -E touch "${PYTHON_UMBRELLA_MODULE_FILE}") ++#execute_process(COMMAND "${CMAKE_COMMAND}" -E touch "${PYTHON_UMBRELLA_MODULE_FILE}") diff --git a/extra-cmake-modules/PKGBUILD b/extra-cmake-modules/PKGBUILD new file mode 100644 index 0000000..33879fd --- /dev/null +++ b/extra-cmake-modules/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=extra-cmake-modules +pkgver=5.82.0 +pkgrel=2 +pkgdesc="Extra modules and scripts for CMake" +arch=('i686' 'x86_64') +url='https://community.kde.org/Frameworks' +license=('Modified-BSD' 'Simplified-BSD' 'Expat') +depends=('cmake') +makedepends=('python-sphinx' 'python-requests' 'qt-tools') +groups=('kf5') +source=("https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz" + "ECM-no-init.py.patch" + "ecm-sphinx4.patch" + "force-relative-paths.patch") +sha512sums=('a8c8d1d15718760de42238b121ed1294d12d36f1ef25acdd2542f12a56d5091a5cc0135884b6c97e62123d64fc80e2756dccd32c88b65caaf6e86418bae4217f' + 'e3d7cc9f969e6a88717cf5532b4c7e5a85ba30eddc31dda4167fbb0a9c2bf28ea652f0ca3af0adbcc583820ea5f23af93d71ca14c1edb3fe52da501755d1fee7' + 'df9c83cf8c5d8f541f49dad9ac883dabef5cef713ff1cf7b9ee5ff777b0e95aaa1ca01278a96ea6867ae9eb0f183ec7ba768713d71a329e6f145cf85f333aa2c' + '421a2fd2b6abc9937ba9365c532e3dfb96ffe5e34b450931ebd8d1125b48fe0628711f1283026977d31a88b614cc1cc1fe36a06ba7fd2f06e9abca3dfac6519f') + +prepare() { + patch -d $pkgname-$pkgver -p1 < $srcdir/ECM-no-init.py.patch + patch -d $pkgname-$pkgver -p1 < $srcdir/ecm-sphinx4.patch + patch -d $pkgname-$pkgver -p1 < $srcdir/force-relative-paths.patch +} + +build() { + cmake \ + -B build \ + -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_HTML_DOCS=ON \ + -DBUILD_QTHELP_DOCS=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + cd $pkgname-$pkgver + install -Dm644 LICENSES/* -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/extra-cmake-modules/ecm-sphinx4.patch b/extra-cmake-modules/ecm-sphinx4.patch new file mode 100644 index 0000000..49c58be --- /dev/null +++ b/extra-cmake-modules/ecm-sphinx4.patch @@ -0,0 +1,64 @@ +diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt +index 84cca9e..32687b6 100644 +--- a/docs/CMakeLists.txt ++++ b/docs/CMakeLists.txt +@@ -110,7 +110,8 @@ if(BUILD_MAN_DOCS) + set(name "${CMAKE_MATCH_1}") + set(sec "${CMAKE_MATCH_2}") + install( +- FILES ${CMAKE_CURRENT_BINARY_DIR}/man/${name}.${sec} ++ FILES ${CMAKE_CURRENT_BINARY_DIR}/man/${name}.${sec} ${CMAKE_CURRENT_BINARY_DIR}/man/${sec}/${name}.${sec} ++ OPTIONAL + DESTINATION ${MAN_INSTALL_DIR}/man${sec} + ) + endif() +diff --git a/docs/sphinx/ext/ecm.py b/docs/sphinx/ext/ecm.py +index 8667b36..a09e489 100644 +--- a/docs/sphinx/ext/ecm.py ++++ b/docs/sphinx/ext/ecm.py +@@ -5,6 +5,7 @@ + # + # SPDX-License-Identifier: BSD-3-Clause + ++import html + import os + import re + +@@ -19,8 +20,11 @@ CMakeLexer.tokens["args"].append(('(\\$<)(.+?)(>)', + + # Monkey patch for sphinx generating invalid content for qcollectiongenerator + # https://bitbucket.org/birkenfeld/sphinx/issue/1435/qthelp-builder-should-htmlescape-keywords +-from sphinx.util.pycompat import htmlescape +-from sphinx.builders.qthelp import QtHelpBuilder ++try: ++ from sphinxcontrib.qthelp import QtHelpBuilder ++except ImportError: ++ # sphinx < 4.0 ++ from sphinx.builders.qthelp import QtHelpBuilder + old_build_keywords = QtHelpBuilder.build_keywords + def new_build_keywords(self, title, refs, subitems): + old_items = old_build_keywords(self, title, refs, subitems) +@@ -29,13 +33,12 @@ def new_build_keywords(self, title, refs, subitems): + before, rest = item.split("ref=\"", 1) + ref, after = rest.split("\"") + if ("<" in ref and ">" in ref): +- new_items.append(before + "ref=\"" + htmlescape(ref) + "\"" + after) ++ new_items.append(before + "ref=\"" + html.escape(ref) + "\"" + after) + else: + new_items.append(item) + return new_items + QtHelpBuilder.build_keywords = new_build_keywords + +- + from docutils.parsers.rst import Directive, directives + from docutils.transforms import Transform + try: +@@ -127,7 +130,7 @@ class _ecm_index_entry: + self.desc = desc + + def __call__(self, title, targetid): +- return ('pair', u'%s ; %s' % (self.desc, title), targetid, 'main') ++ return ('pair', u'%s ; %s' % (self.desc, title), targetid, 'main', None) + + _ecm_index_objs = { + 'manual': _ecm_index_entry('manual'), \ No newline at end of file diff --git a/extra-cmake-modules/force-relative-paths.patch b/extra-cmake-modules/force-relative-paths.patch new file mode 100644 index 0000000..955c583 --- /dev/null +++ b/extra-cmake-modules/force-relative-paths.patch @@ -0,0 +1,18 @@ +From: Debian/Kubuntu Qt/KDE Maintainers +Date: Sun, 12 Jun 2016 18:37:12 +0200 +Subject: force_relative_paths + +--- + tests/KDEInstallDirsTest/relative_or_absolute/CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) + +--- a/tests/KDEInstallDirsTest/relative_or_absolute/CMakeLists.txt ++++ b/tests/KDEInstallDirsTest/relative_or_absolute/CMakeLists.txt +@@ -1,6 +1,7 @@ + project(KDEInstallDirs.relative_or_absolute) + cmake_minimum_required(VERSION 3.5) + ++set(KDE_INSTALL_USE_QT_SYS_PATHS FALSE) + set(ECM_KDE_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../kde-modules) + set(ECM_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../modules) + set(CMAKE_MODULE_PATH "${ECM_KDE_MODULE_DIR}") diff --git a/extremetuxracer/PKGBUILD b/extremetuxracer/PKGBUILD new file mode 100644 index 0000000..900c654 --- /dev/null +++ b/extremetuxracer/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=extremetuxracer +pkgver=0.8.4 +pkgrel=2 +pkgdesc="Free and libre downhill racing game" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/extremetuxracer/' +license=('GPL-2') +depends=('sfml' 'glu' 'freetype2') +makedepends=('csfml') +groups=('games') +source=("https://downloads.sourceforge.net/${pkgname}/etr-${pkgver}.tar.xz") +sha512sums=('65d54bfef59cf83eec9ee761ac24c728d3118cf47105920f22057b59425eba65e03967196d4a93039f30b9420e67b10f296ec7deed7e506ad78c7bb5ce5ed0d2') + +build() { + cd "${srcdir}/etr-${pkgver}" + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games + make +} + +package() { + cd "${srcdir}/etr-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/f2fs-tools/PKGBUILD b/f2fs-tools/PKGBUILD new file mode 100644 index 0000000..e81d3c2 --- /dev/null +++ b/f2fs-tools/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname='f2fs-tools' +pkgver='1.14.0' +pkgrel='1' +pkgdesc='Tools for Flash-Friendly File System (F2FS)' +arch=('i686' 'x86_64') +url="https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/${pkgname}.git" +url+='/about/' +depends=('util-linux') +license=('GPL-2') +# Jaegeuk Kim +validpgpkeys=('D3452A79D8C2B4EAC656F4224014A87E824850D2') +source=("${url/\/about\//}/snapshot/${pkgname}-${pkgver}.tar.gz") +sha512sums=('951b74178f99722550e73f331be066f124f6ee6022710f6b47ae47390b978b08f12a7f2a268d82ca69a32bf440cd3ce3adddc8a4c49c32df83da87e7f659f98d') + +prepare() { + autoreconf -fi "${srcdir}/${pkgname}-${pkgver}" +} + +build() { + mkdir "${srcdir}/build" + cd "${srcdir}/build" + "${srcdir}/${pkgname}-${pkgver}/configure" \ + --prefix='/usr' \ + --sbindir='/sbin' + cd "${OLDPWD}" + make -C "${srcdir}/build" +} + +package() { + make -C "${srcdir}/build" DESTDIR="${pkgdir}" 'install' + + # sg_write_buffer is provided in sg3_utils + rm "${pkgdir}/sbin/sg_write_buffer" + + # license + install -Dm '644' "${srcdir}/${pkgname}-${pkgver}/COPYING" -t \ + "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/faad2/PKGBUILD b/faad2/PKGBUILD new file mode 100644 index 0000000..9d1abbe --- /dev/null +++ b/faad2/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=faad2 +pkgver=2.10.0 +pkgrel=1 +pkgdesc="ISO AAC audio decoder" +arch=('i686' 'x86_64') +url="https://github.com/knik0/faad2" +license=('GPL-2') +depends=('glibc') +provides=('faad') +source=($pkgname-$pkgver.tar.gz::https://github.com/knik0/faad2/archive/${pkgver//./_}.tar.gz) +sha512sums=('92c8b5e79f85b7a7caac9e7954959c26d74ef148a658dcb37e2c1b303fc2fcc5a0d12f21e7bd476870498109bdd03916a56c13f578186a69d6eceb103222e771') + +prepare() { + mv -v "${pkgname}-${pkgver//./_}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -vDm 644 {AUTHORS,ChangeLog,NEWS,README*,TODO} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/fail2ban/PKGBUILD b/fail2ban/PKGBUILD new file mode 100644 index 0000000..913f35c --- /dev/null +++ b/fail2ban/PKGBUILD @@ -0,0 +1,113 @@ +# Maintainer: Jesus E. + +pkgname=fail2ban +pkgver=0.11.2 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Bans IPs after too many failed authentication attempts" +url='https://www.fail2ban.org/' +license=('GPL-2') +arch=('any') +depends=('nftables' 'python-pyinotify' 'whois' 'sqlite' 'logrotate') +makedepends=('python-setuptools' 'quilt') +backup=(etc/fail2ban/fail2ban.conf + etc/fail2ban/jail.conf + etc/logrotate.d/fail2ban + etc/conf.d/fail2ban) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/fail2ban/$pkgname/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/f/fail2ban/fail2ban_${_debver}-${_debrel}.debian.tar.xz" + "fail2ban-0.11.2_CVE-2021-32749.patch" + "fail2ban.confd" + "fail2ban.logrotate" + "fail2ban.initd" + "fail2ban.run" + "jail.conf.patch" + "ssh.jaild" + "sshd.filterd" + "sshd-ddos.filterd" + "paths-hyperbola.conf") +sha512sums=('46b27abd947b00ea64106dbac563ef8afef38eec86684024d47d9a0e8c1969ff864ad6df7f4f8de2aa3eb1af6d769fb6796592d9f0e35521d5f95f17b8cade97' + '59229a28ee7bab521a1422b245f0dd970db172c8878346779340b6c574979b5bbd0cfbef1316c22d9546922c28029e3273159189974e4a3a53226b6e50149b91' + '994de8a4fdd4535607cd1b21553266de015b57bdb7f84f931973cb4b3cadd93fb2fda2d402a4ecccf505dffabf146cd9eae2cd0b635c3cb3dfa2d312539d41be' + 'f23df51fe1d2ef89448529e16bca61a2acaa9967490724c2dab559d7d601784057fb77e84343687f36cf57dc035f01b84405d7e48f1706942f7671ab528be858' + 'ee1c229db970239ebc707cd484a650fcf2347c70b411728ee2a4a35a72f4118cfccecf2a221275603320e0332efcc16e4979201933cec1aef1c5d5a082fc4940' + '5c3fad0a89b43853f00689a3ecafeeef889f3057999eafc66aceaaf92e8081ca9a126dadbf7f6724ba769436954f878e3a564479288cf8c4a606f1b1ac5342da' + '1b10bd72966f15512a8db7aec4025b3bd4e1d4065b6da4f3b9bc0f9e1e8fe09b1dbcffb81acc89151e54e8061bd79cc3f22af68e431a623dbec8456bd7c0bbd7' + '84d10adb43e68ea2786621b39ae5faa7425c7bff0bfc747528df54d1bb1f40cd62678afaaa794e5d4a3c2d22cdf3eb73f19f71c19206484f4cdf0294f2b253e0' + '5ed2c3641650bbf35962d7616e93649e82af48778d8eeca96f47cb50ede4cd81173454ca422c032809d79b317718c7b1e3386e6fbbf7e24df87e64a37cb552a5' + '3e8e08d5e349e857b51ce34a9d968f16661b34e1cec06bec0aa9a32723bbe9be5a9890dd479331a9cc860821d33b1bf3b8e995182e319dead5a3d434b1816304' + '36a81b771be0b36fe0dfb5ee4c72c9cb5b504e110618a8eb6f0f241b4e57d92df01dc5cc04b6b68d5bc6a5e6d68de1000092770285d7a328e5937e50b4b226a3' + '911178352bd41e1d2428097758278424c712ece8150de10abf9e0ade52a97ad975634342b3ff422ee4851364d61d7a1546e75a27fe7270bea88dc2b9d8dee99a') + +prepare() { + cd $pkgname-$pkgver + + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/deb_manpages_reportbug || true + rm -v debian/patches/deb_no_iptables_service || true + rm -v debian/patches/python3-test-suite.diff || true + rm -v debian/patches/fix-mail.patch || true + + quilt push -av + fi + + sed -i 's/^before = paths-debian.conf/before = paths-hyperbola.conf/' config/jail.conf + sed -i 's|self.install_dir|"/usr/bin"|' setup.py + patch -Np1 -i "$srcdir/fail2ban-0.11.2_CVE-2021-32749.patch" + + # Use nftables by default + patch -Np1 -i "$srcdir/jail.conf.patch" +} + +build() { + cd $pkgname-$pkgver + ./fail2ban-2to3 + python setup.py build +} + +package() { + cd $pkgname-$pkgver + python setup.py install --prefix /usr --root "$pkgdir" --optimize=1 + + install -Dm0755 "$srcdir"/fail2ban.run \ + "$pkgdir"/etc/sv/fail2ban/run + install -Dm755 $srcdir/fail2ban.initd \ + "$pkgdir"/etc/init.d/fail2ban + install -Dm644 "$srcdir"/fail2ban.confd \ + "$pkgdir"/etc/conf.d/fail2ban + install -Dm644 "$srcdir"/fail2ban.logrotate \ + "$pkgdir"/etc/logrotate.d/fail2ban + install -Dm644 files/bash-completion \ + "$pkgdir"/usr/share/bash-completion/completions/fail2ban + install -Dm644 "$srcdir"/ssh.jaild \ + "$pkgdir"/etc/fail2ban/jail.d/ssh.conf + install -Dm644 "$srcdir"/sshd.filterd \ + "$pkgdir"/etc/fail2ban/filter.d/sshd.conf + install -Dm644 "$srcdir"/sshd-ddos.filterd \ + "$pkgdir"/etc/fail2ban/filter.d/sshd-ddos.conf + + chmod o+r "$pkgdir"/usr/lib/python3*/site-packages/fail2ban*.egg-info/* + + install -Dm644 man/fail2ban.1 "$pkgdir"/usr/share/man/man1/fail2ban.1 + install -Dm644 man/fail2ban-client.1 \ + "$pkgdir"/usr/share/man/man1/fail2ban-client.1 + install -Dm644 man/fail2ban-regex.1 \ + "$pkgdir"/usr/share/man/man1/fail2ban-regex.1 + install -Dm644 man/fail2ban-server.1 \ + "$pkgdir"/usr/share/man/man1/fail2ban-server.1 + install -Dm644 man/jail.conf.5 "$pkgdir"/usr/share/man/man5/jail.conf.5 + + cp "$srcdir"/paths-hyperbola.conf "$pkgdir"/etc/$pkgname + rm "$pkgdir"/etc/$pkgname/paths-{osx,debian,freebsd,arch,fedora,opensuse}.conf + rm -r "$pkgdir/run" + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/fail2ban/fail2ban-0.11.2_CVE-2021-32749.patch b/fail2ban/fail2ban-0.11.2_CVE-2021-32749.patch new file mode 100644 index 0000000..d3c6779 --- /dev/null +++ b/fail2ban/fail2ban-0.11.2_CVE-2021-32749.patch @@ -0,0 +1,155 @@ +From 410a6ce5c80dd981c22752da034f2529b5eee844 Mon Sep 17 00:00:00 2001 +From: sebres +Date: Mon, 21 Jun 2021 17:12:53 +0200 +Subject: [PATCH] fixed possible RCE vulnerability, unset escape variable + (default tilde) stops consider "~" char after new-line as composing escape + sequence + +--- + config/action.d/complain.conf | 2 +- + config/action.d/dshield.conf | 2 +- + config/action.d/mail-buffered.conf | 8 ++++---- + config/action.d/mail-whois-lines.conf | 2 +- + config/action.d/mail-whois.conf | 6 +++--- + config/action.d/mail.conf | 6 +++--- + 6 files changed, 13 insertions(+), 13 deletions(-) + +diff --git a/config/action.d/complain.conf b/config/action.d/complain.conf +index 3a5f882c9f..4d73b05859 100644 +--- a/config/action.d/complain.conf ++++ b/config/action.d/complain.conf +@@ -102,7 +102,7 @@ logpath = /dev/null + # Notes.: Your system mail command. Is passed 2 args: subject and recipient + # Values: CMD + # +-mailcmd = mail -s ++mailcmd = mail -E 'set escape' -s + + # Option: mailargs + # Notes.: Additional arguments to mail command. e.g. for standard Unix mail: +diff --git a/config/action.d/dshield.conf b/config/action.d/dshield.conf +index c128bef348..3d5a7a53a9 100644 +--- a/config/action.d/dshield.conf ++++ b/config/action.d/dshield.conf +@@ -179,7 +179,7 @@ tcpflags = + # Notes.: Your system mail command. Is passed 2 args: subject and recipient + # Values: CMD + # +-mailcmd = mail -s ++mailcmd = mail -E 'set escape' -s + + # Option: mailargs + # Notes.: Additional arguments to mail command. e.g. for standard Unix mail: +diff --git a/config/action.d/mail-buffered.conf b/config/action.d/mail-buffered.conf +index 325f185b2f..79b841049c 100644 +--- a/config/action.d/mail-buffered.conf ++++ b/config/action.d/mail-buffered.conf +@@ -17,7 +17,7 @@ actionstart = printf %%b "Hi,\n + The jail has been started successfully.\n + Output will be buffered until lines are available.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : started on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : started on " + + # Option: actionstop + # Notes.: command executed at the stop of jail (or at the end of Fail2Ban) +@@ -28,13 +28,13 @@ actionstop = if [ -f ]; then + These hosts have been banned by Fail2Ban.\n + `cat ` + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : Summary from " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : Summary from " + rm + fi + printf %%b "Hi,\n + The jail has been stopped.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : stopped on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : stopped on " + + # Option: actioncheck + # Notes.: command executed once before each actionban command +@@ -55,7 +55,7 @@ actionban = printf %%b "`date`: ( failures)\n" >> + These hosts have been banned by Fail2Ban.\n + `cat ` + \nRegards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : Summary" ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : Summary" + rm + fi + +diff --git a/config/action.d/mail-whois-lines.conf b/config/action.d/mail-whois-lines.conf +index 3a3e56b2c7..d2818cb9b9 100644 +--- a/config/action.d/mail-whois-lines.conf ++++ b/config/action.d/mail-whois-lines.conf +@@ -72,7 +72,7 @@ actionunban = + # Notes.: Your system mail command. Is passed 2 args: subject and recipient + # Values: CMD + # +-mailcmd = mail -s ++mailcmd = mail -E 'set escape' -s + + # Default name of the chain + # +diff --git a/config/action.d/mail-whois.conf b/config/action.d/mail-whois.conf +index 7fea34c40d..ab33b616dc 100644 +--- a/config/action.d/mail-whois.conf ++++ b/config/action.d/mail-whois.conf +@@ -20,7 +20,7 @@ norestored = 1 + actionstart = printf %%b "Hi,\n + The jail has been started successfully.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : started on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : started on " + + # Option: actionstop + # Notes.: command executed at the stop of jail (or at the end of Fail2Ban) +@@ -29,7 +29,7 @@ actionstart = printf %%b "Hi,\n + actionstop = printf %%b "Hi,\n + The jail has been stopped.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : stopped on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : stopped on " + + # Option: actioncheck + # Notes.: command executed once before each actionban command +@@ -49,7 +49,7 @@ actionban = printf %%b "Hi,\n + Here is more information about :\n + `%(_whois_command)s`\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : banned from " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : banned from " + + # Option: actionunban + # Notes.: command executed when unbanning an IP. Take care that the +diff --git a/config/action.d/mail.conf b/config/action.d/mail.conf +index 5d8c0e154c..f4838ddcb6 100644 +--- a/config/action.d/mail.conf ++++ b/config/action.d/mail.conf +@@ -16,7 +16,7 @@ norestored = 1 + actionstart = printf %%b "Hi,\n + The jail has been started successfully.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : started on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : started on " + + # Option: actionstop + # Notes.: command executed at the stop of jail (or at the end of Fail2Ban) +@@ -25,7 +25,7 @@ actionstart = printf %%b "Hi,\n + actionstop = printf %%b "Hi,\n + The jail has been stopped.\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : stopped on " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : stopped on " + + # Option: actioncheck + # Notes.: command executed once before each actionban command +@@ -43,7 +43,7 @@ actionban = printf %%b "Hi,\n + The IP has just been banned by Fail2Ban after + attempts against .\n + Regards,\n +- Fail2Ban"|mail -s "[Fail2Ban] : banned from " ++ Fail2Ban"|mail -E 'set escape' -s "[Fail2Ban] : banned from " + + # Option: actionunban + # Notes.: command executed when unbanning an IP. Take care that the diff --git a/fail2ban/fail2ban.confd b/fail2ban/fail2ban.confd new file mode 100644 index 0000000..00d19f8 --- /dev/null +++ b/fail2ban/fail2ban.confd @@ -0,0 +1,8 @@ +# Config file for /etc/init.d/fail2ban +# +# For information on options, see "/usr/bin/fail2ban-client -h". + +FAIL2BAN_OPTIONS="" + +# Force execution of the server even if the socket already exists: +#FAIL2BAN_OPTIONS="-x" diff --git a/fail2ban/fail2ban.initd b/fail2ban/fail2ban.initd new file mode 100644 index 0000000..3400947 --- /dev/null +++ b/fail2ban/fail2ban.initd @@ -0,0 +1,42 @@ +#!/sbin/openrc-run +# Copyright 2016 Fail2Ban +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload showlog" + +FAIL2BAN="/usr/bin/fail2ban-client ${FAIL2BAN_OPTIONS}" + +depend() { + need net + need logger + after nftables +} + +start() { + ebegin "Starting fail2ban" + mkdir -p /var/run/fail2ban || return 1 + # remove stalled sock file after system crash + # bug 347477 + rm -f /var/run/fail2ban/fail2ban.sock || return 1 + start-stop-daemon --start --pidfile /var/run/fail2ban/fail2ban.pid \ + -- ${FAIL2BAN} start + eend $? "Failed to start fail2ban" +} + +stop() { + ebegin "Stopping fail2ban" + start-stop-daemon --stop --pidfile /var/run/fail2ban/fail2ban.pid \ + -- ${FAIL2BAN} stop + eend $? "Failed to stop fail2ban" +} + +reload() { + ebegin "Reloading fail2ban" + ${FAIL2BAN} reload + eend $? "Failed to reload fail2ban" +} + +showlog(){ + less /var/log/fail2ban.log +} diff --git a/fail2ban/fail2ban.logrotate b/fail2ban/fail2ban.logrotate new file mode 100644 index 0000000..351bc40 --- /dev/null +++ b/fail2ban/fail2ban.logrotate @@ -0,0 +1,11 @@ +/var/log/fail2ban.log { + daily + rotate 7 + missingok + compress + postrotate + /usr/bin/fail2ban-client flushlogs 1>/dev/null || true + chown :wheel /var/log/fail2ban.log + chmod 640 /var/log/fail2ban.log + endscript +} diff --git a/fail2ban/fail2ban.run b/fail2ban/fail2ban.run new file mode 100644 index 0000000..8a13c76 --- /dev/null +++ b/fail2ban/fail2ban.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec fail2ban-server -xf diff --git a/fail2ban/jail.conf.patch b/fail2ban/jail.conf.patch new file mode 100644 index 0000000..e883324 --- /dev/null +++ b/fail2ban/jail.conf.patch @@ -0,0 +1,13 @@ +--- fail2ban-0.11.2/config/jail.conf 2021-09-03 15:31:47.314418681 +0200 ++++ fail2ban-0.11.2/config/jail.conf 2021-09-03 15:32:02.510904273 +0200 +@@ -205,8 +205,8 @@ + # iptables-multiport, shorewall, etc) It is used to define + # action_* variables. Can be overridden globally or per + # section within jail.local file +-banaction = iptables-multiport +-banaction_allports = iptables-allports ++banaction = nftables ++banaction_allports = nftables-allports + + # The simplest action to take: ban only + action_ = %(banaction)s[port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"] diff --git a/fail2ban/paths-hyperbola.conf b/fail2ban/paths-hyperbola.conf new file mode 100644 index 0000000..7d82994 --- /dev/null +++ b/fail2ban/paths-hyperbola.conf @@ -0,0 +1,11 @@ +# Hyperbola + +[INCLUDES] + +before = paths-common.conf + +after = paths-overrides.local + +[DEFAULT] + +sshd_log = /var/log/messages diff --git a/fail2ban/ssh.jaild b/fail2ban/ssh.jaild new file mode 100644 index 0000000..c808d2e --- /dev/null +++ b/fail2ban/ssh.jaild @@ -0,0 +1,13 @@ +[sshd] +enabled = true +filter = sshd +port = ssh +logpath = %(sshd_log)s +maxretry = 10 + +[sshd-ddos] +enabled = true +filter = sshd-ddos +port = ssh +logpath = %(sshd_log)s +maxretry = 10 diff --git a/fail2ban/sshd-ddos.filterd b/fail2ban/sshd-ddos.filterd new file mode 100644 index 0000000..9df3823 --- /dev/null +++ b/fail2ban/sshd-ddos.filterd @@ -0,0 +1,26 @@ +# Fail2Ban ssh filter for at attempted exploit +# +# The regex here also relates to a exploit: +# +# http://www.securityfocus.com/bid/17958/exploit +# The example code here shows the pushing of the exploit straight after +# reading the server version. This is where the client version string normally +# pushed. As such the server will read this unparsible information as +# "Did not receive identification string". + +[INCLUDES] + +# Read common prefixes. If any customizations available -- read them from +# common.local +before = common.conf + +[Definition] + +_daemon = sshd + +failregex = Did not receive identification string from \s*$ + +ignoreregex = + +[Init] + diff --git a/fail2ban/sshd.filterd b/fail2ban/sshd.filterd new file mode 100644 index 0000000..304ab07 --- /dev/null +++ b/fail2ban/sshd.filterd @@ -0,0 +1,29 @@ +# Fail2Ban filter for openssh for Alpine +# +# If you want to protect OpenSSH from being bruteforced by password +# authentication then get public key authentication working before disabling +# PasswordAuthentication in sshd_config. +# + +[INCLUDES] + +# Read common prefixes. If any customizations available -- read them from +# common.local +before = common.conf + +[Definition] + +_daemon = sshd + +failregex = Failed [-/\w]+ for .* from port \d* ssh2 + sshd\[.*\]: Invalid user .* from port \d* + sshd\[.*\]: Received disconnect from port \d*:[0-9]+: \[preauth\] + +ignoreregex = + +[Init] + +# "maxlines" is number of log lines to buffer for multi-line regex searches +maxlines = 10 + + diff --git a/fbpager/PKGBUILD b/fbpager/PKGBUILD new file mode 100644 index 0000000..649a8b0 --- /dev/null +++ b/fbpager/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=fbpager +pkgver=0.1.5 +pkgrel=1 +pkgdesc="A virtual desktop pager for Fluxbox" +url='http://www.fluxbox.org/fbpager' +license=('Expat') +arch=('i686' 'x86_64') +depends=('gcc-libs' 'libxrender') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/f/fbpager/fbpager_${pkgver}~git20090221.1.8e0927e6.orig.tar.gz") +sha512sums=('dfaa2296997e75abd1ddc130a68dacfe4d15d19f727a8e1099d8c6d8d79a5ade5c9534eb3a82635ac7e31e0b21b94259a7bf18422051283ab23d9c59c6126dd4') + +prepare() { + mv "${pkgname}-${pkgver}~git20090221.1.8e0927e6" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + ./autogen.sh +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/fbpanel/PKGBUILD b/fbpanel/PKGBUILD new file mode 100644 index 0000000..615b118 --- /dev/null +++ b/fbpanel/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=fbpanel +pkgver=7.0 +_debver=$pkgver +_debrel=4.2 +pkgrel=2 +pkgdesc="Lightweight X11 desktop panel (with Hyperbola-branding)" +arch=('i686' 'x86_64') +license=('Expat' 'GPL-2') +url='https://github.com/aanatoly/fbpanel' +install=$pkgname.install +depends=('gtk2' 'gdk-pixbuf-xlib') +makedepends=('tauthon' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/aanatoly/fbpanel/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/f/fbpanel/fbpanel_$_debver-$_debrel.debian.tar.xz" + "hyperbola-logo.png" + "remove-volume-plugin.patch" + "fix-config.patch") +sha512sums=('9706a96569c41241de4dbd250c9d6a473b53a5e26e880f4c782041b2b91c7570046e1bee3070059fd2d333fb7159490732ef397b86701c72d4c65c0784948874' + 'f9fb881869687d64f68e1b000e6a2499ba426f1251265de62d7fb876200104b96c29dfd98b943f96648532ec9e6215c5b8ed9b7c8e22c02367912d10b13bb939' + '5e5150c325d4ab0bdeead1cf4c77e50a3d860176826d9a0c562c635e5c9dccc98fd8bdffdf99655ddd708a3fa6d5cdcf97330345b2f76321517ff4744631b6f0' + '79cc5f3073a11fb7d5fdb9148d81aea90ae88ea4a0ff97f465a87507841e6657bc53676e0cb01abd631c8e55c4dc26ee3cdc7b31c09c5ab8c53e5e62e57ce8fe' + '53cfb97eabe73f1171d172c87a7e33ea200095e06c65824534d6a0e67e251a97031f25b6f6f283584d314891530b1d35bff429462c307834787eb32b36dbcf3d') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/debian-logo.patch || true + rm -v debian/patches/gcc-10.patch || true + rm -v debian/patches/python2.diff || true + + quilt push -av + fi + sed -i 's|python|tauthon|' configure .config/{repl.py,help,tar.py} + + patch -Np1 -i ${srcdir}/remove-volume-plugin.patch + patch -Np1 -i ${srcdir}/fix-config.patch +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix /usr \ + --mandir /usr/share/man/man1 + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + rm "$pkgdir/"usr/share/$pkgname/images/logo.png + cp "$srcdir/"hyperbola-logo.png "$pkgdir/"usr/share/$pkgname/images/logo.png + install -Dm644 COPYING debian/copyright -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/fbpanel/fbpanel.install b/fbpanel/fbpanel.install new file mode 100644 index 0000000..730ced7 --- /dev/null +++ b/fbpanel/fbpanel.install @@ -0,0 +1,6 @@ +post_install() { +cat <EX>4Tx04R}tkv&MmKpe$iTZU5saWpZjz4C^?e>K7n|a>4rtTK|H-_ z>74h8!>lMN#OK7L23?T&k?XR{Z=4Gb`*~*ANT=qB!^A?Njpa6GMMEW?B#tVoM*04X z%L?Z$&T6^Jn)l={4CST$xGZNNhaOT5#>Q@mk z4LImQcnkQ_{;iND8#6ex0jP+$PnE#;9)-7n10*AwDNuH1;n>wg6D2eX_|Av$7V0Fk zO5_aZ0kD7tA^rbC;1*z=PvK43w=n(zuz*DYeqTG<^NU||6y5?>$#>sB+dVq_8+#+h z@5JsV;B}l2ZTz$!fes?0f9iZVy$Sdj7>j#&RRM4bPz@|Yg=1L(w*5fwT#PRe{iy|R z&EfZ_P=_%)fMfRGO6`?HAJj=*7#u_8Fsv5|bK|vuM`aZ4BrqnZ8EDekVpxAIRIJ}> zkuDgnHfZEGBT>D9)1J1Gv%0n>;C_)S96r@t{6_T{44{f&qIUKGF94T{OU^DwjDiK-{mUtDM=gMh{MsLnMuZza%A zT&h2Xzy#oH!imLq)cMJ^D|M~vH1??dRLa$(b5Z57e}Xn&RHT$G~9`v;oK)=uOM7Hqw@20&gNMs zpMr3>9QYkGk~ynIu3)JKj$lqU?_bCjErC#is;gre*d~j7xls;$VW{{Ps^Fu{1$@#M z_sbAWX>wVU4~7H#Vj#X{?@kIHm`rvx@l9zBNbUZtnTEI0=%%!BB5h`#jG^$UX9PkT z3Q)zEtr)j@Byhx$BH*ogN1H4a8pp+>?-p{dyViZN*=jkdZI<_d1BbEMekX zz~4GfzVh+eSpwAL+4fVYOQQD!|JqB>4!}9667ONH+sjcg42h%=RTU%Zk#_`jK0gnY z@81XaQ@TQ0>-@h*u%Twdll1G^G5*vnwnJcpNT;9eYWUV zg=9l1@Ep#UO=sH{CQNX6=gx^cuy|92-v{NbpYIYGwPO-H}Xo1S=!TWCaG10QSp z+Ux5egx_P&z;!-Pzro|1?t(ar--TepxaxtYG3Qdmc^+&V5LfX_QALk)&ADHIdFj?A z9wvoDzOY7|W{-MAuPjR*19lDrEN+~!5&O*byvbNyYw9VC-3q|a_L`XLA(73aJVpLFNI^ho> z^>EVRl>1=ZY2ZsP;;#a_i_U4e%fV+x-3vS^jqv-4*_LKVbfRq#=}8PK88Z+#>>&PX zVjk2GFsU_;c9_!X&ZsNUQiVSZ+$(x|=CKqXt~a5>1)O=Hu>ra6)Gz%ptWd-ww2ix8 zNOJb@!(x~1&-uD{bZE+?Wj8QNv + +pkgname=fbxkb +pkgver=0.6 +pkgrel=1 +pkgdesc="Keyboard indicator and switcher" +arch=('i686' 'x86_64') +license=('Expat') +url='https://fbxkb.sourceforge.net/' +depends=('gtk2' 'libxmu' 'gdk-pixbuf-xlib') +source=("https://download.sourceforge.net/fbxkb/${pkgname}-${pkgver}.tgz" + "fbxkb.patch") +sha512sums=('b8cf7f98575d81f69286dbf653f15340e44ab0ca2e493049bb4f9c6888567431abde82686f5181effaefbc903a0b34390817fbf50b51227d5ae9461a5a2e37d0' + 'dca09956b9776cbbbd1a7cf1cf5badf1e69751015e6a9134e032556bd8ea83488b6a97612a00d71fc739c9f34650562788e339a45227ae9c8b621c7b0f5b071a') + +prepare() { + cd ${pkgname}-${pkgver} + patch -Np1 -i "${srcdir}/fbxkb.patch" +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr + make LDFLAGS="-Wl,-O1,--sort-common,-z,relro,-z,now" +} + +package() { + cd ${pkgname}-${pkgver} + make PREFIX="${pkgdir}/usr" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/fbxkb/fbxkb.patch b/fbxkb/fbxkb.patch new file mode 100644 index 0000000..3b4395c --- /dev/null +++ b/fbxkb/fbxkb.patch @@ -0,0 +1,39 @@ +diff -rupN fbxkb-0.6/fbxkb.c fbxkb-0.6-new/fbxkb.c +--- fbxkb-0.6/fbxkb.c 2006-12-18 23:47:52.000000000 +0200 ++++ fbxkb-0.6-new/fbxkb.c 2012-01-15 22:27:30.571427088 +0200 +@@ -378,10 +378,11 @@ read_kbd_description() + g_assert((no >= 0) && (no < ngroups)); + if (group2info[no].sym != NULL) { + ERR("xkb group #%d is already defined\n", no); ++ } else { ++ group2info[no].sym = g_strdup(tok); ++ group2info[no].flag = sym2flag(tok); ++ group2info[no].name = XGetAtomName(dpy, kbd_desc_ptr->names->groups[no]); + } +- group2info[no].sym = g_strdup(tok); +- group2info[no].flag = sym2flag(tok); +- group2info[no].name = XGetAtomName(dpy, kbd_desc_ptr->names->groups[no]); + } + XFree(sym_name); + } +diff -rupN fbxkb-0.6/Makefile.common fbxkb-0.6-new/Makefile.common +--- fbxkb-0.6/Makefile.common 2004-10-16 01:18:59.000000000 +0300 ++++ fbxkb-0.6-new/Makefile.common 2012-01-15 23:20:02.081020564 +0200 +@@ -16,7 +16,7 @@ endif + endif + + CC = gcc +-LIBS = $(shell pkg-config --libs gtk+-2.0 gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0) -L/usr/X11R6/lib -lXmu ++LIBS = $(shell pkg-config --libs gtk+-2.0 gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0) -lX11 -L/usr/X11R6/lib -lXmu + INCS = $(shell pkg-config --cflags gtk+-2.0 gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0) + CFLAGS = -O2 # overwriten by command line or env. variable + CFLAGS += -Wall # always nice to have +@@ -24,9 +24,6 @@ ifneq (,$(DEVEL)) + CFLAGS := -g -Wall + endif + +-# -DGTK_DISABLE_DEPRECATED does not work yet +-CFLAGS += -g -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED +- + %.o: %.c + $(CC) $(CFLAGS) $(INCS) -c $< diff --git a/fceux/PKGBUILD b/fceux/PKGBUILD new file mode 100644 index 0000000..0c782bf --- /dev/null +++ b/fceux/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. +# Contriutor (Arch): Eric Belanger + +pkgname=fceux +pkgver=2.6.5 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Fast and ultra-compatible NES/Famicom emulator" +url='https://github.com/TASEmulators/fceux' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('gd' 'lua51' 'minizip' 'qt-base' 'sdl2') +makedepends=('cmake' 'glu' 'mesa-libgl' 'ninja' 'setconf' 'scons' 'python-setuptools' 'quilt' 'ffmpeg') +optdepends=('ffmpeg: for recording') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/f/fceux/fceux_${pkgver}+dfsg1.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/f/fceux/fceux_${_debver}+dfsg1-${_debrel}.debian.tar.xz") +sha512sums=('710ecc734e0f940a04af35d441103928c3722cde27c309a3b6807d174b95fe60cea8f026fedcf8b7f45a01e72836775c695dde6e429684cbe23be9603c3be925' + 'c97b6b3426f9e9bf042876ff6ed1d4bd68b151097ab774934986c61c1ff0c33f553b02fd0f909efb0d094193dcac7ade2d10efc54ac41d45873fa10085efb96c') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/install-fceux-to-usr-games.patch || true + + quilt push -av + fi +} + +build() { + cmake -B build \ + -DCMAKE_C_FLAGS="$CFLAGS -fPIC -w" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -fPIC -w" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -G Ninja \ + -S $pkgname-$pkgver + ninja -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + install -d "$pkgdir/usr/share/doc/$pkgname" + cp -r $pkgname-$pkgver/documentation/* "$pkgdir/usr/share/doc/$pkgname/" + install -Dm644 $pkgname-$pkgver/changelog.txt "$pkgdir/usr/share/doc/$pkgname/" + install -Dm644 $pkgname-$pkgver/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/fcgi/CVE-2025-23016.patch b/fcgi/CVE-2025-23016.patch new file mode 100644 index 0000000..d36ea10 --- /dev/null +++ b/fcgi/CVE-2025-23016.patch @@ -0,0 +1,36 @@ +From b0eabcaf4d4f371514891a52115c746815c2ff15 Mon Sep 17 00:00:00 2001 +From: Pycatchown <39068868+Pycatchown@users.noreply.github.com> +Date: Tue, 8 Apr 2025 17:39:30 +0200 +Subject: [PATCH] Update fcgiapp.c + +Fixing an integer overflow (CVE-2025-23016) +--- + libfcgi/fcgiapp.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/libfcgi/fcgiapp.c b/libfcgi/fcgiapp.c +index 4ffe318..99c3630 100644 +--- a/libfcgi/fcgiapp.c ++++ b/libfcgi/fcgiapp.c +@@ -1175,6 +1175,10 @@ static int ReadParams(Params *paramsPtr, FCGX_Stream *stream) + } + nameLen = ((nameLen & 0x7f) << 24) + (lenBuff[0] << 16) + + (lenBuff[1] << 8) + lenBuff[2]; ++ if (nameLen >= INT_MAX) { ++ SetError(stream, FCGX_PARAMS_ERROR); ++ return -1; ++ } + } + if((valueLen = FCGX_GetChar(stream)) == EOF) { + SetError(stream, FCGX_PARAMS_ERROR); +@@ -1187,6 +1191,10 @@ static int ReadParams(Params *paramsPtr, FCGX_Stream *stream) + } + valueLen = ((valueLen & 0x7f) << 24) + (lenBuff[0] << 16) + + (lenBuff[1] << 8) + lenBuff[2]; ++ if (valueLen >= INT_MAX) { ++ SetError(stream, FCGX_PARAMS_ERROR); ++ return -1; ++ } + } + /* + * nameLen and valueLen are now valid; read the name and value diff --git a/fcgi/PKGBUILD b/fcgi/PKGBUILD new file mode 100644 index 0000000..167829e --- /dev/null +++ b/fcgi/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=fcgi +pkgver=2.4.2 +pkgrel=2 +pkgdesc="FASTCgi (fcgi) is a language independent, high performant extension to CGI" +arch=('i686' 'x86_64') +license=('Expat') +url='https://fastcgi-archives.github.io/' +options=('!makeflags') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/FastCGI-Archives/fcgi2/archive/${pkgver}.tar.gz" + "CVE-2025-23016.patch") +sha512sums=('03aca9899eacfd54c878b30691cc4f8db957a065b46426d764003fd057cbf24b4e12ddd26c9b980d5d8965ca40831e415d330e9830529c0d4153400b5c2c8c02' + 'fa37ab2aefaa65225c9b240620a4de3100c30711c03f55d9a234966d1fc2c4e97e98b9eec80a1c73cc5f664f547bd455779c18145b8cd9ff74cf56754cf40bb5') + +prepare() { + cd "${srcdir}/fcgi2-${pkgver}" + patch -Np1 -i ${srcdir}/CVE-2025-23016.patch + ./autogen.sh +} + +build() { + cd "${srcdir}/fcgi2-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${srcdir}/fcgi2-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm0644 LICENSE.TERMS -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/fcgiwrap/PKGBUILD b/fcgiwrap/PKGBUILD new file mode 100644 index 0000000..872c15d --- /dev/null +++ b/fcgiwrap/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=fcgiwrap +pkgver=1.1.0 +_debver=$pkgver +_debrel=12 +pkgrel=7 +pkgdesc="A simple, free and libre server for running CGI applications over FastCGI" +arch=('i686' 'x86_64') +url='https://github.com/gnosek/fcgiwrap' +license=('Expat') +depends=('fcgi') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/gnosek/fcgiwrap/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/f/fcgiwrap/fcgiwrap_${_debver}-${_debrel}.debian.tar.xz" + "${pkgname}.initd" + "${pkgname}.confd" + "${pkgname}.run") +sha512sums=('b8d35762d1d3c94a67602290b0092f0c38cffbbcd3dbc16597abf8b92172909b04450c238de2e430e841a17dd47fdd48d6a001f77539966980ef1af61e447ddc' + '1fbed12c22fe9fb7b7df46776eae7a90e4691c2663f124888c8c583ef9aaa08d1e028d9f18e3bc942c50c9f9c932b82814c1439ad3af6caef2e7b360da9adfb3' + 'b4a4a15b4285c4200a53d094aeb5026ed0606be0122175fdb44a7ec7f37ae27486d369a26d8ceb7d5d3b667ba69ca6d61d504bf2843c3f0a1aa7fb1f87a7bfb6' + '893e9afa92c20c9d0dab68fffc806a1be1f2e28a7e73bbb497316386a9ee083be4bad68a90f660e489311a9812a512b50fb0edb8b9c49b12f6cd266ba53b01a6' + '80fa8e0f95c4f5b6ea3fb51a9e22046cb7b1401edaa2dcbc18451a6224652083ad301380806086b261e70184e8c77dcdec111ff7ef14f0327dae53d37fc50bd4') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/fix_systemd.patch || true + rm -v debian/patches/libsystemd.patch || true + rm -v debian/patches/systemd_socket_requires.patch || true + rm -v debian/patches/systemd_use_defaults.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + autoreconf --install + ./configure \ + --prefix=/usr \ + --mandir=/share/man \ + --sbindir=/bin + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}" + + # services + install -Dm755 "${srcdir}"/${pkgname}.initd "${pkgdir}"/etc/init.d/${pkgname} + install -Dm644 "${srcdir}"/${pkgname}.confd "${pkgdir}"/etc/conf.d/${pkgname} + install -Dm755 "${srcdir}/${pkgname}.run" "${pkgdir}/etc/sv/${pkgname}/run" +} diff --git a/fcgiwrap/fcgiwrap.confd b/fcgiwrap/fcgiwrap.confd new file mode 100644 index 0000000..72dbdbc --- /dev/null +++ b/fcgiwrap/fcgiwrap.confd @@ -0,0 +1,6 @@ +# set number of preforked children. defaults to number of system CPUs +#nproc=$(nproc) + +# set listen socket. Defaults to unix:/run/fcgiwrap/fcgiwrap.sock +#socket=unix:/run/fcgiwrap/fcgiwrap.sock + diff --git a/fcgiwrap/fcgiwrap.initd b/fcgiwrap/fcgiwrap.initd new file mode 100644 index 0000000..91cf38e --- /dev/null +++ b/fcgiwrap/fcgiwrap.initd @@ -0,0 +1,44 @@ +#!/sbin/openrc-run + +name="fcgiwrap" +description="fcgiwrap cgi daemon" + +command="/usr/bin/fcgiwrap" +command_background="yes" +user="http" +group="http" +: ${socket:=unix:/run/fcgiwrap/fcgiwrap.sock} + +depend() { + need net localmount + after firewall +} + +start_pre() { + command_args="-c ${nproc:-$(nproc)} -s $socket" + case "$socket" in + unix:/*) + local socket_path=${socket#unix:} + checkpath --directory --mode 2775 --owner ${user}:${group} \ + ${socket_path%/*} + ;; + esac +} + +start() { + ebegin "Starting ${name}" + start-stop-daemon --exec ${command} \ + --background \ + -k 0002 \ + -u ${user} -g ${group} \ + --start -- ${command_args} + eend $? +} + +stop_post() { + case "$socket" in + unix:/*) + rm -f "${socket#unix:}" + ;; + esac +} diff --git a/fcgiwrap/fcgiwrap.run b/fcgiwrap/fcgiwrap.run new file mode 100644 index 0000000..35ab12f --- /dev/null +++ b/fcgiwrap/fcgiwrap.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec fcgiwrap -s unix:/run/fcgiwrap.sock 2>&1 diff --git a/fdupes/LICENSE b/fdupes/LICENSE new file mode 100644 index 0000000..8423e29 --- /dev/null +++ b/fdupes/LICENSE @@ -0,0 +1,22 @@ +Legal Information +-------------------------------------------------------------------- +FDUPES Copyright (c) 1999 Adrian Lopez + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fdupes/PKGBUILD b/fdupes/PKGBUILD new file mode 100644 index 0000000..b0e5f32 --- /dev/null +++ b/fdupes/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=fdupes +pkgver=2.2.1 +_debver=$pkgver +_debrel=1 +pkgrel=1 +epoch=1 +pkgdesc="A program for identifying or deleting duplicate files residing within specified directories" +arch=('i686' 'x86_64') +url='https://github.com/adrianlopezroche/fdupes' +license=('Expat') +depends=('glibc' 'ncurses' 'pcre2') +source=("https://github.com/adrianlopezroche/fdupes/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/f/fdupes/fdupes_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('4911d2f776480691e7bd7045c181d49159add5b479188b05f0878a7af365cee0e430093e71ff172c04b876c58efc3be0f24c9d25f0cdebf1c869931175bc8608' + '5e252c0c778883815c5f654e987d6ef196c1473b3fa9077a88b5583cc504192bdbee45545eef7a6c9fac39914d11d4b4d3e3b6048d587e9cb9f91029dc14a9e5') + +prepare() { + cd $pkgname-$pkgver + mv "$srcdir"/debian . +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + make PREFIX=/usr +} + +package(){ + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/feh/PKGBUILD b/feh/PKGBUILD new file mode 100644 index 0000000..1867200 --- /dev/null +++ b/feh/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=feh +pkgver=3.10.3 +pkgrel=1 +pkgdesc="Fast and light imlib2-based image viewer" +url='https://feh.finalrewind.org/' +license=('Expat') +arch=('i686' 'x86_64') +depends=('imlib2' 'curl' 'libxinerama' 'libexif') +makedepends=('libxt') +optdepends=('graphicsmagick: support more file formats') +source=("https://feh.finalrewind.org/${pkgname}-${pkgver}.tar.bz2") +sha512sums=('60f29d463486eca9308037648a1b91b093051878aa2a8671166fd685ac05c217cd46ad2c7df2fde09b5f1d6cd8b3ee2b8f32fbbf6d3b2e4abc4c50b36f237977') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + make PREFIX=/usr help=1 exif=1 stat64=1 inotify=1 +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/festival/PKGBUILD b/festival/PKGBUILD new file mode 100644 index 0000000..9b4f6d4 --- /dev/null +++ b/festival/PKGBUILD @@ -0,0 +1,168 @@ +# Maintainer: Jesus E. + +pkgname=festival +pkgver=2.4 +pkgrel=5 +pkgdesc="A general multi-lingual speech synthesis system (including voices)" +arch=(i686 x86_64) +url='http://www.cstr.ed.ac.uk/projects/festival/' +license=(custom:Festival) +depends=(perl sndio) +options=('!makeflags') +source=(http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/$pkgname-$pkgver-release.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/speech_tools-$pkgver-release.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/festlex_CMU.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/festlex_OALD.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/festlex_POSLEX.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/voices/festvox_cmu_us_awb_cg.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/voices/festvox_cmu_us_rms_cg.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/voices/festvox_cmu_us_slt_cg.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/voices/festvox_kallpc16k.tar.gz + http://www.cstr.ed.ac.uk/downloads/${pkgname}/${pkgver}/voices/festvox_rablpc16k.tar.gz + festival-without-java.patch + festival-config.patch + festival-2.4-compat.patch + festival-shared-build.patch + festival-sndio.patch + speech_tools-without-java.patch + speech_tools-config.patch + speech_tools-shared-build.patch + speech_tools-gcc47.patch + speech_tools-sndio.patch) +sha512sums=('7c8eb6812c587623ea0877d5c792418ace2787f71087929d867adc4714ba13612da6e431dde89ca234330a83bf76519306c1302623e837a6fbfa4c4416b32231' + 'e6931216069fd3ea791ad22f8657fddd73b18296221e12cbbdf9241d2efda7821ea80a549e595151343533039107a00f939b52f7dc1034a6d9cf2f57d7baefa7' + 'c293344020fd3337193303cd5dfb7e2b0a1012770a484d8bccaae921b0c61b75699204bec45fee0db754506d6f1558fd616866cc94e76afcbb85a4dcbcf9542b' + 'dc7ec5db71ef331f4c4460a741392d548e037369d47080dc734e912aa312bd5c11e66cdcb94bdc4746a3f6c16c0e0294ce159f07b46e350b85c0afab07cc2064' + 'd7f96621fd98bcd3c84f0188fc6ac5a006e2cbb535279693be3341d51148344360f68e67962f08c4041df1e3527de9b30705b13fb9859ad91e3c804704eb5348' + 'edb4008606afc72802b265a503d1f6a37fc8f99bd21f6aaa72a06a970f86858da17c0857ce423356f0a432b19ada87778e0a88f6ecb9aeb66ae42a41c06e0494' + 'b0a519a654e349b49b627bb35384dadde8e44c4af43a4df7f8126c1535fe5838d8d2cd13fc9813cad7ec4dd92ae018c6090ca453d0e6a1c470ccf839faf21125' + 'b02da2a5a17e0341cbd0d692021b8cb44cd3bfd3e6a60a06c5a22004ce2ad135efba64df75f4c8479a4cd2da15fd733165bce89972ae206c3e11b543150a69e4' + 'e7155a8df1305fc80a0b7f97e07b74f2d687ce93f89dc74b4ab3653a369629b956491381a1f4613e531570cc688480b151b2e60fd5b8f9755c641648dc72d3bc' + 'a8962a8187e83c4419414e7ef5953a8a1ed1b65a7d5a9dea3722185a4fb660727897e7dca9f6ccddf4fefc85d9d757dcb444a6ac08328b7dc94624ffff24f5a6' + 'ad42dd594d86f71e6abcaae541334a18cfd3cc929301b27176590fb57d1486d106d595c6ea9ac259c089b58b035259ebfc1f80761c01010f7744aeb9cc93c833' + '25b75692e5ab8a18bc4500d573e2bdb3fbd543b5238d5ec7346c5199695a2b543cea8ffe4bd70e64e2f51563fc2daed9b551afd4170c8db08275fa7e70b6c882' + '26f60c777e8062ec23b9e19a4ff48bd3425a7686ebcabb2d1cae0f13351e3b2ccae9d0d4996291b55548a75df6d7750e2f127ff2faf3a8a86a01fb141c0e8b16' + '5271eb4eb92a43b1b44cea01f473ed1012f216bbb86c6213be69fbeb565ecba76859a3c5ec9f5cfa87764dc073fc5c0d80d082721c256ee977c050682ca7c87f' + '4a8cd2a3cac554cf4862a08e0c78f757228262087b4e9033565c68d7a0e278a529b2ae5d7e9e48017f8fd71f1351bc761a6f01728656433c029f51e8b492f730' + '5683178c8e88abae20fef22a78621d0c50ac5265d711b21c233fb9e6a2e28db9a470e56efaa26a0d77380458f45b410024af8586e47a7b128dcef7f5efb7bb1c' + '64bafc35935e83dc31c1377c8fb528c2f72fcfabd1b6cf2cec216584677e04304437eea375d1847f9bc0e1aafa7f769d4bf2e83b8d539995f56b32eccd7c6982' + '16e007d4f8b3cae113933434bad580fe9a1b52473ad77f98236e9a88ec225f91dbe26364899ba620c4b064164abedcff0a190c768835e67ae160f210f1cdaded' + 'c71bedc38425a59f7ebb42eaa39e40ac7755260d93c52d478e8bc11ed9a50b686189077672953a656bce11522d7b7ced3919854499fe41a19053c9e1a619e7b3' + 'b2a43d5979cc544f89f7e2f4bf0bb4825e021e160cfe0bc0c864477618033bc2778f7f256cffba51b49b179b5fc67f86647587c63d4b39092ffc467b54cb2074') + +prepare() { + # Remove Java support + patch -Np0 -i festival-without-java.patch + patch -Np0 -i speech_tools-without-java.patch + + # Fix config files + patch -Np0 -i festival-config.patch + patch -Np0 -i speech_tools-config.patch + + patch -Np0 -i festival-2.4-compat.patch + + # Fix build with new gcc versions and build shared libs - taken from Mageia + patch -Np0 -i festival-shared-build.patch + patch -Np0 -i speech_tools-shared-build.patch + patch -Np0 -i speech_tools-gcc47.patch + + # Add sndio support + patch -Np0 -i festival-sndio.patch + patch -Np0 -i speech_tools-sndio.patch + + # Avoid make failure on making scripts and docs + sed -i "s#examples bin doc#examples#" festival/Makefile +} + +build() { + # Build Speech Tools first + cd speech_tools + ./configure --prefix=/usr --sysconfdir=/etc + make OPTIMISE_CXXFLAGS="${CXXFLAGS} -fno-strict-aliasing -fno-delete-null-pointer-checks -std=gnu++98" OPTIMISE_CCFLAGS="${CFLAGS} -fno-strict-aliasing" + + # Build Festival itself + cd ../festival + ./configure --prefix=/usr --sysconfdir=/etc + make OPTIMISE_CXXFLAGS="${CXXFLAGS} -fno-delete-null-pointer-checks -std=gnu++98" OPTIMISE_CCFLAGS="${CFLAGS}" +} + +package() { + # Install Speech Tools first + cd speech_tools + install -dm755 "$pkgdir"/usr/{bin,lib,include/speech_tools/{,instantiate,ling_class,rxp,sigpr,unix}} + + # binaries + #move binaries over wrappers (FS#7864) + for i in $(grep -l 'EST shared script' bin/*); do + cp -f main/$(basename $i) bin; + done + install -m755 -t "$pkgdir"/usr/bin bin/[a-z]* + rm -f "$pkgdir"/usr/bin/{est_gdb,est_examples,est_program} + + # libraries + install -m755 -t "$pkgdir"/usr/lib lib/lib*.so.* + ln -sf libestbase.so.${pkgver}.1 "$pkgdir"/usr/lib/libestbase.so + ln -sf libestools.so.${pkgver}.1 "$pkgdir"/usr/lib/libestools.so + ln -sf libeststring.so.1.2 "$pkgdir"/usr/lib/libeststring.so + + # headers + for dir in {.,instantiate,ling_class,rxp,sigpr,unix}; do + install -m644 -t "$pkgdir"/usr/include/speech_tools/$dir include/$dir/*.h + done + + # Install Festival itself + cd "$srcdir"/festival + + # binaries + install -m755 src/main/festival "$pkgdir"/usr/bin/ + install -m755 src/main/festival_client "$pkgdir"/usr/bin/ + install -m755 examples/benchmark "$pkgdir"/usr/bin/ + install -m755 examples/dumpfeats "$pkgdir"/usr/bin/ + install -m755 examples/durmeanstd "$pkgdir"/usr/bin/ + install -m755 examples/latest "$pkgdir"/usr/bin/ + install -m755 examples/make_utts "$pkgdir"/usr/bin/ + install -m755 examples/powmeanstd "$pkgdir"/usr/bin/ + install -m755 examples/run-festival-script "$pkgdir"/usr/bin/ + install -m755 examples/saytime "$pkgdir"/usr/bin/ + install -m755 examples/scfg_parse_text "$pkgdir"/usr/bin/ + install -m755 examples/text2pos "$pkgdir"/usr/bin/ + install -m755 examples/text2wave "$pkgdir"/usr/bin + + # libraries + install -m755 src/lib/libFestival.so.* "$pkgdir"/usr/lib/ + ln -sf libFestival.so.2.4.0 "$pkgdir"/usr/lib/libFestival.so + + # headers + install -dm755 "$pkgdir"/usr/include/festival + install -m644 -t "$pkgdir"/usr/include/festival src/include/*.h + + mkdir -p "$pkgdir"/usr/share/festival + cp -aR lib/* "$pkgdir"/usr/share/festival + rm -fv $(find "$pkgdir"/usr/share/festival -name Makefile) + rm -fv $(find "$pkgdir"/usr/bin -name Makefile) + + # create voices directory and include initial data + install -dm755 "$pkgdir"/usr/share/festival/voices + cp -rf lib/voices/us "$pkgdir/usr/share/festival/voices/" + cp -rf lib/voices/english "$pkgdir/usr/share/festival/voices/" + + # licenses + install -D -m644 "$srcdir"/festival/COPYING \ + "$pkgdir"/usr/share/licenses/$pkgname/LICENSE + install -D -m644 "$srcdir"/speech_tools/README \ + "$pkgdir"/usr/share/licenses/$pkgname/LICENSE.other + + # some general cleanups + for i in $(find "$pkgdir"/usr/include/ -type f); do + sed -i -e 's,"EST.*\.h",\,g' -e 's,speech_tools/\",speech_tools/,g' \ + -e 's,"siod.*\.h",\,g' -e 's,speech_tools/\",speech_tools/,g' \ + -e 's,"instantiate/.*\.h",\,g' -e 's,speech_tools/instantiate/\",speech_tools/instantiate/,g' -e 's,"instantiate,instantiate,g' \ + -e 's,"ling_class/.*\.h",\,g' -e 's,speech_tools/ling_class/\",speech_tools/ling_class/,g' -e 's,"ling_class,ling_class,g' \ + -e 's,"rxp/.*\.h",\,g' -e 's,speech_tools/rxp/\",speech_tools/rxp/,g' -e 's,"rxp,rxp,g' \ + -e 's,"sigpr/.*\.h",\,g' -e 's,speech_tools/sigpr/\",speech_tools/sigpr/,g' -e 's,"sigpr,sigpr,g' \ + -e 's,"unix/.*\.h",\,g' -e 's,speech_tools/unix/\",speech_tools/unix/,g' -e 's,\.h\">,.h\>,g' -e 's,"unix,unix,g' \ + -e 's,"festival\.h",\,g' \ + -e 's,"ModuleDescription\.h",\,g' \ + -e 's,"Phone\.h",\,g' $i + done +} diff --git a/festival/festival-2.4-compat.patch b/festival/festival-2.4-compat.patch new file mode 100644 index 0000000..017354a --- /dev/null +++ b/festival/festival-2.4-compat.patch @@ -0,0 +1,369 @@ +diff --git festival.orig/src/modules/clustergen/HTS_vocoder_me.cc festival/src/modules/clustergen/HTS_vocoder_me.cc +index 038bf53..e7dac19 100644 +--- festival.orig/src/modules/clustergen/HTS_vocoder_me.cc ++++ festival/src/modules/clustergen/HTS_vocoder_me.cc +@@ -90,8 +90,9 @@ + + HTS_VOCODER_ME_C_START; + ++#include + #include "./HTS_vocoder_me.h" +-#include "../hts_engine/HTS_vocoder.c" ++#include "../hts_engine/HTS_vocoder.h" + + /* HTS_Vocoder_initialize_me: initialize vocoder (mixed excitation) */ + void HTS_Vocoder_initialize_me(HTS_Vocoder_ME * v_me, +diff --git festival.orig/src/modules/hts_engine/HTS_vocoder.c festival/src/modules/hts_engine/HTS_vocoder.c +index 3693584..e33cd82 100644 +--- festival.orig/src/modules/hts_engine/HTS_vocoder.c ++++ festival/src/modules/hts_engine/HTS_vocoder.c +@@ -57,10 +57,12 @@ HTS_VOCODER_C_START; + + #include /* for sqrt(),log(),exp(),pow(),cos() */ + ++//#include "HTS_vocoder.h" ++ + /* hts_engine libraries */ + #include "HTS_hidden.h" + +-static const double HTS_pade[21] = { ++const double HTS_pade[21] = { + 1.00000000000, + 1.00000000000, + 0.00000000000, +@@ -85,7 +87,7 @@ static const double HTS_pade[21] = { + }; + + /* HTS_movem: move memory */ +-static void HTS_movem(double *a, double *b, const int nitem) ++void HTS_movem(double *a, double *b, const int nitem) + { + long i = (long) nitem; + +@@ -101,7 +103,7 @@ static void HTS_movem(double *a, double *b, const int nitem) + } + + /* HTS_mlsafir: sub functions for MLSA filter */ +-static double HTS_mlsafir(const double x, const double *b, const int m, const double a, const double aa, double *d) ++double HTS_mlsafir(const double x, const double *b, const int m, const double a, const double aa, double *d) + { + double y = 0.0; + int i; +@@ -122,7 +124,7 @@ static double HTS_mlsafir(const double x, const double *b, const int m, const do + } + + /* HTS_mlsadf1: sub functions for MLSA filter */ +-static double HTS_mlsadf1(double x, const double *b, const int m, const double a, const double aa, const int pd, double *d, const double *ppade) ++double HTS_mlsadf1(double x, const double *b, const int m, const double a, const double aa, const int pd, double *d, const double *ppade) + { + double v, out = 0.0, *pt; + int i; +@@ -144,7 +146,7 @@ static double HTS_mlsadf1(double x, const double *b, const int m, const double a + } + + /* HTS_mlsadf2: sub functions for MLSA filter */ +-static double HTS_mlsadf2(double x, const double *b, const int m, const double a, const double aa, const int pd, double *d, const double *ppade) ++double HTS_mlsadf2(double x, const double *b, const int m, const double a, const double aa, const int pd, double *d, const double *ppade) + { + double v, out = 0.0, *pt; + int i; +@@ -166,7 +168,7 @@ static double HTS_mlsadf2(double x, const double *b, const int m, const double a + } + + /* HTS_mlsadf: functions for MLSA filter */ +-static double HTS_mlsadf(double x, const double *b, const int m, const double a, const int pd, double *d) ++double HTS_mlsadf(double x, const double *b, const int m, const double a, const int pd, double *d) + { + const double aa = 1 - a * a; + const double *ppade = &(HTS_pade[pd * (pd + 1) / 2]); +@@ -178,7 +180,7 @@ static double HTS_mlsadf(double x, const double *b, const int m, const double a, + } + + /* HTS_rnd: functions for random noise generation */ +-static double HTS_rnd(unsigned long *next) ++double HTS_rnd(unsigned long *next) + { + double r; + +@@ -189,7 +191,7 @@ static double HTS_rnd(unsigned long *next) + } + + /* HTS_nrandom: functions for gaussian random noise generation */ +-static double HTS_nrandom(HTS_Vocoder * v) ++double HTS_nrandom(HTS_Vocoder * v) + { + if (v->sw == 0) { + v->sw = 1; +@@ -207,7 +209,7 @@ static double HTS_nrandom(HTS_Vocoder * v) + } + + /* HTS_mceq: function for M-sequence random noise generation */ +-static int HTS_mseq(HTS_Vocoder * v) ++int HTS_mseq(HTS_Vocoder * v) + { + int x0, x28; + +@@ -229,7 +231,7 @@ static int HTS_mseq(HTS_Vocoder * v) + } + + /* HTS_mc2b: transform mel-cepstrum to MLSA digital fillter coefficients */ +-static void HTS_mc2b(double *mc, double *b, int m, const double a) ++void HTS_mc2b(double *mc, double *b, int m, const double a) + { + if (mc != b) { + if (a != 0.0) { +@@ -244,7 +246,7 @@ static void HTS_mc2b(double *mc, double *b, int m, const double a) + } + + /* HTS_b2bc: transform MLSA digital filter coefficients to mel-cepstrum */ +-static void HTS_b2mc(const double *b, double *mc, int m, const double a) ++void HTS_b2mc(const double *b, double *mc, int m, const double a) + { + double d, o; + +@@ -257,7 +259,7 @@ static void HTS_b2mc(const double *b, double *mc, int m, const double a) + } + + /* HTS_freqt: frequency transformation */ +-static void HTS_freqt(HTS_Vocoder * v, const double *c1, const int m1, double *c2, const int m2, const double a) ++void HTS_freqt(HTS_Vocoder * v, const double *c1, const int m1, double *c2, const int m2, const double a) + { + int i, j; + const double b = 1 - a * a; +@@ -287,7 +289,7 @@ static void HTS_freqt(HTS_Vocoder * v, const double *c1, const int m1, double *c + } + + /* HTS_c2ir: The minimum phase impulse response is evaluated from the minimum phase cepstrum */ +-static void HTS_c2ir(const double *c, const int nc, double *h, const int leng) ++void HTS_c2ir(const double *c, const int nc, double *h, const int leng) + { + int n, k, upl; + double d; +@@ -303,7 +305,7 @@ static void HTS_c2ir(const double *c, const int nc, double *h, const int leng) + } + + /* HTS_b2en: calculate frame energy */ +-static double HTS_b2en(HTS_Vocoder * v, const double *b, const int m, const double a) ++double HTS_b2en(HTS_Vocoder * v, const double *b, const int m, const double a) + { + int i; + double en = 0.0; +@@ -330,7 +332,7 @@ static double HTS_b2en(HTS_Vocoder * v, const double *b, const int m, const doub + } + + /* HTS_ignorm: inverse gain normalization */ +-static void HTS_ignorm(double *c1, double *c2, int m, const double g) ++void HTS_ignorm(double *c1, double *c2, int m, const double g) + { + double k; + if (g != 0.0) { +@@ -345,7 +347,7 @@ static void HTS_ignorm(double *c1, double *c2, int m, const double g) + } + + /* HTS_gnorm: gain normalization */ +-static void HTS_gnorm(double *c1, double *c2, int m, const double g) ++void HTS_gnorm(double *c1, double *c2, int m, const double g) + { + double k; + if (g != 0.0) { +@@ -360,7 +362,7 @@ static void HTS_gnorm(double *c1, double *c2, int m, const double g) + } + + /* HTS_lsp2lpc: transform LSP to LPC */ +-static void HTS_lsp2lpc(HTS_Vocoder * v, double *lsp, double *a, const int m) ++void HTS_lsp2lpc(HTS_Vocoder * v, double *lsp, double *a, const int m) + { + int i, k, mh1, mh2, flag_odd; + double xx, xf, xff; +@@ -451,7 +453,7 @@ static void HTS_lsp2lpc(HTS_Vocoder * v, double *lsp, double *a, const int m) + } + + /* HTS_gc2gc: generalized cepstral transformation */ +-static void HTS_gc2gc(HTS_Vocoder * v, double *c1, const int m1, const double g1, double *c2, const int m2, const double g2) ++void HTS_gc2gc(HTS_Vocoder * v, double *c1, const int m1, const double g1, double *c2, const int m2, const double g2) + { + int i, min, k, mk; + double ss1, ss2, cc; +@@ -484,7 +486,7 @@ static void HTS_gc2gc(HTS_Vocoder * v, double *c1, const int m1, const double g1 + } + + /* HTS_mgc2mgc: frequency and generalized cepstral transformation */ +-static void HTS_mgc2mgc(HTS_Vocoder * v, double *c1, const int m1, const double a1, const double g1, double *c2, const int m2, const double a2, const double g2) ++void HTS_mgc2mgc(HTS_Vocoder * v, double *c1, const int m1, const double a1, const double g1, double *c2, const int m2, const double a2, const double g2) + { + double a; + +@@ -502,7 +504,7 @@ static void HTS_mgc2mgc(HTS_Vocoder * v, double *c1, const int m1, const double + } + + /* HTS_lsp2mgc: transform LSP to MGC */ +-static void HTS_lsp2mgc(HTS_Vocoder * v, double *lsp, double *mgc, const int m, const double alpha) ++void HTS_lsp2mgc(HTS_Vocoder * v, double *lsp, double *mgc, const int m, const double alpha) + { + int i; + /* lsp2lpc */ +@@ -531,7 +533,7 @@ static void HTS_lsp2mgc(HTS_Vocoder * v, double *lsp, double *mgc, const int m, + } + + /* HTS_mglsadff: sub functions for MGLSA filter */ +-static double HTS_mglsadff(double x, const double *b, const int m, const double a, double *d) ++double HTS_mglsadff(double x, const double *b, const int m, const double a, double *d) + { + int i; + +@@ -550,7 +552,7 @@ static double HTS_mglsadff(double x, const double *b, const int m, const double + } + + /* HTS_mglsadf: sub functions for MGLSA filter */ +-static double HTS_mglsadf(double x, const double *b, const int m, const double a, const int n, double *d) ++double HTS_mglsadf(double x, const double *b, const int m, const double a, const int n, double *d) + { + int i; + +@@ -561,7 +563,7 @@ static double HTS_mglsadf(double x, const double *b, const int m, const double a + } + + /* THS_check_lsp_stability: check LSP stability */ +-static void HTS_check_lsp_stability(double *lsp, size_t m) ++void HTS_check_lsp_stability(double *lsp, size_t m) + { + size_t i, j; + double tmp; +@@ -595,7 +597,7 @@ static void HTS_check_lsp_stability(double *lsp, size_t m) + } + + /* HTS_lsp2en: calculate frame energy */ +-static double HTS_lsp2en(HTS_Vocoder * v, double *lsp, size_t m, double alpha) ++double HTS_lsp2en(HTS_Vocoder * v, double *lsp, size_t m, double alpha) + { + size_t i; + double en = 0.0; +@@ -632,7 +634,7 @@ static double HTS_lsp2en(HTS_Vocoder * v, double *lsp, size_t m, double alpha) + } + + /* HTS_white_noise: return white noise */ +-static double HTS_white_noise(HTS_Vocoder * v) ++double HTS_white_noise(HTS_Vocoder * v) + { + if (v->gauss) + return (double) HTS_nrandom(v); +@@ -641,7 +643,7 @@ static double HTS_white_noise(HTS_Vocoder * v) + } + + /* HTS_ping_pulse: ping pulse using low-pass filter */ +-static void HTS_ping_pulse(HTS_Vocoder * v, const int ping_place, const double p, const int nlpf, const double *lpf) ++void HTS_ping_pulse(HTS_Vocoder * v, const int ping_place, const double p, const int nlpf, const double *lpf) + { + int i, j; + const double power = sqrt(p); +@@ -652,7 +654,7 @@ static void HTS_ping_pulse(HTS_Vocoder * v, const int ping_place, const double p + } + + /* HTS_ping_noise: ping noise using low-pass filter */ +-static void HTS_ping_noise(HTS_Vocoder * v, const int ping_place, const int nlpf, const double *lpf) ++void HTS_ping_noise(HTS_Vocoder * v, const int ping_place, const int nlpf, const double *lpf) + { + int i, j; + const double power = HTS_white_noise(v); +@@ -667,7 +669,7 @@ static void HTS_ping_noise(HTS_Vocoder * v, const int ping_place, const int nlpf + } + + /* HTS_Vocoder_initialize_excitation: initialize excitation */ +-static void HTS_Vocoder_initialize_excitation(HTS_Vocoder * v, size_t nlpf) ++void HTS_Vocoder_initialize_excitation(HTS_Vocoder * v, size_t nlpf) + { + size_t i; + +@@ -684,7 +686,7 @@ static void HTS_Vocoder_initialize_excitation(HTS_Vocoder * v, size_t nlpf) + } + + /* HTS_Vocoder_start_excitation: start excitation of each frame */ +-static void HTS_Vocoder_start_excitation(HTS_Vocoder * v, const double pitch, const int nlpf) ++void HTS_Vocoder_start_excitation(HTS_Vocoder * v, const double pitch, const int nlpf) + { + if (v->p1 != 0.0 && pitch != 0.0) + v->inc = (pitch - v->p1) * IPERIOD / v->fprd; +@@ -699,7 +701,7 @@ static void HTS_Vocoder_start_excitation(HTS_Vocoder * v, const double pitch, co + } + + /* HTS_Vocoder_get_excitation: get excitation of each sample */ +-static double HTS_Vocoder_get_excitation(HTS_Vocoder * v, const int fprd_index, const int iprd_index, const int nlpf, const double *lpf) ++double HTS_Vocoder_get_excitation(HTS_Vocoder * v, const int fprd_index, const int iprd_index, const int nlpf, const double *lpf) + { + double x; + int i, j; +@@ -755,7 +757,7 @@ static double HTS_Vocoder_get_excitation(HTS_Vocoder * v, const int fprd_index, + } + + /* HTS_Vocoder_end_excitation: end excitation of each frame */ +-static void HTS_Vocoder_end_excitation(HTS_Vocoder * v, const int nlpf) ++void HTS_Vocoder_end_excitation(HTS_Vocoder * v, const int nlpf) + { + int i; + +@@ -771,7 +773,7 @@ static void HTS_Vocoder_end_excitation(HTS_Vocoder * v, const int nlpf) + } + + /* HTS_Vocoder_postfilter_mcp: postfilter for MCP */ +-static void HTS_Vocoder_postfilter_mcp(HTS_Vocoder * v, double *mcp, const int m, double alpha, double beta) ++void HTS_Vocoder_postfilter_mcp(HTS_Vocoder * v, double *mcp, const int m, double alpha, double beta) + { + double e1, e2; + int k; +@@ -797,7 +799,7 @@ static void HTS_Vocoder_postfilter_mcp(HTS_Vocoder * v, double *mcp, const int m + } + + /* HTS_Vocoder_postfilter_lsp: postfilter for LSP */ +-static void HTS_Vocoder_postfilter_lsp(HTS_Vocoder * v, double *lsp, size_t m, double alpha, double beta) ++void HTS_Vocoder_postfilter_lsp(HTS_Vocoder * v, double *lsp, size_t m, double alpha, double beta) + { + double e1, e2; + size_t i; +diff --git festival/src/modules/hts_engine/HTS_vocoder.h festival/src/modules/hts_engine/HTS_vocoder.h +new file mode 100644 +index 0000000..f3dd9a6 +--- /dev/null ++++ festival/src/modules/hts_engine/HTS_vocoder.h +@@ -0,0 +1,42 @@ ++#ifndef HTS_VOCODER_H ++#define HTS_VOCODER_H ++ ++/* hts_engine libraries */ ++#include "HTS_hidden.h" ++ ++void HTS_Vocoder_clear(HTS_Vocoder *v); ++void HTS_Vocoder_synthesize(HTS_Vocoder *v,size_t m,double lf0,double *spectrum,size_t nlpf,double *lpf,double alpha,double beta,double volume,double *rawdata,HTS_Audio *audio); ++void HTS_Vocoder_initialize(HTS_Vocoder *v,size_t m,size_t stage,HTS_Boolean use_log_gain,size_t rate,size_t fperiod); ++void HTS_Vocoder_postfilter_lsp(HTS_Vocoder *v,double *lsp,size_t m,double alpha,double beta); ++void HTS_Vocoder_postfilter_mcp(HTS_Vocoder *v,double *mcp,const int m,double alpha,double beta); ++void HTS_Vocoder_end_excitation(HTS_Vocoder *v,const int nlpf); ++double HTS_Vocoder_get_excitation(HTS_Vocoder *v,const int fprd_index,const int iprd_index,const int nlpf,const double *lpf); ++void HTS_Vocoder_start_excitation(HTS_Vocoder *v,const double pitch,const int nlpf); ++void HTS_Vocoder_initialize_excitation(HTS_Vocoder *v,size_t nlpf); ++void HTS_ping_noise(HTS_Vocoder *v,const int ping_place,const int nlpf,const double *lpf); ++void HTS_ping_pulse(HTS_Vocoder *v,const int ping_place,const double p,const int nlpf,const double *lpf); ++double HTS_white_noise(HTS_Vocoder *v); ++double HTS_lsp2en(HTS_Vocoder *v,double *lsp,size_t m,double alpha); ++void HTS_check_lsp_stability(double *lsp,size_t m); ++double HTS_mglsadf(double x,const double *b,const int m,const double a,const int n,double *d); ++double HTS_mglsadff(double x,const double *b,const int m,const double a,double *d); ++void HTS_lsp2mgc(HTS_Vocoder *v,double *lsp,double *mgc,const int m,const double alpha); ++void HTS_mgc2mgc(HTS_Vocoder *v,double *c1,const int m1,const double a1,const double g1,double *c2,const int m2,const double a2,const double g2); ++void HTS_gc2gc(HTS_Vocoder *v,double *c1,const int m1,const double g1,double *c2,const int m2,const double g2); ++void HTS_lsp2lpc(HTS_Vocoder *v,double *lsp,double *a,const int m); ++void HTS_gnorm(double *c1,double *c2,int m,const double g); ++void HTS_ignorm(double *c1,double *c2,int m,const double g); ++double HTS_b2en(HTS_Vocoder *v,const double *b,const int m,const double a); ++void HTS_c2ir(const double *c,const int nc,double *h,const int leng); ++void HTS_freqt(HTS_Vocoder *v,const double *c1,const int m1,double *c2,const int m2,const double a); ++void HTS_b2mc(const double *b,double *mc,int m,const double a); ++void HTS_mc2b(double *mc,double *b,int m,const double a); ++int HTS_mseq(HTS_Vocoder *v); ++double HTS_nrandom(HTS_Vocoder *v); ++double HTS_rnd(unsigned long *next); ++double HTS_mlsadf(double x,const double *b,const int m,const double a,const int pd,double *d); ++double HTS_mlsadf2(double x,const double *b,const int m,const double a,const double aa,const int pd,double *d,const double *ppade); ++double HTS_mlsadf1(double x,const double *b,const int m,const double a,const double aa,const int pd,double *d,const double *ppade); ++double HTS_mlsafir(const double x,const double *b,const int m,const double a,const double aa,double *d); ++void HTS_movem(double *a,double *b,const int nitem); ++#endif diff --git a/festival/festival-config.patch b/festival/festival-config.patch new file mode 100644 index 0000000..fc30e3e --- /dev/null +++ b/festival/festival-config.patch @@ -0,0 +1,81 @@ +diff --git festival.orig/config/config.in festival/config/config.in +index d7a28e5..2c387d3 100644 +--- festival.orig/config/config.in ++++ festival/config/config.in +@@ -20,7 +20,7 @@ EST=$(TOP)/../speech_tools + ## You may need to set this explicitly if automounter or NFS + ## side effects cause problems + +-FESTIVAL_HOME := $(shell (cd $(TOP); pwd)) ++FESTIVAL_HOME := /usr + + ########################################################################### + ## Feature selection. +diff --git festival.orig/config/project.mak festival/config/project.mak +index 3f36fd6..1160732 100644 +--- festival.orig/config/project.mak ++++ festival/config/project.mak +@@ -103,6 +103,5 @@ LIBRARY_TEMPLATE_DIRS_estools = $(LIBRARY_TEMPLATE_DIRS:%=$(EST)/%) + DOCXX_DIRS = $(TOP)/src + MODULE_TO_DOCXX = perl $(TOP)/src/modules/utilities/extract_module_doc++.prl + +-FTLIBDIR = $(FESTIVAL_HOME)/lib +- ++FTLIBDIR = /usr/share/festival + +diff --git festival.orig/config/systems/Linux.mak festival/config/systems/Linux.mak +index 7b7cb51..1fbba94 100644 +--- festival.orig/config/systems/Linux.mak ++++ festival/config/systems/Linux.mak +@@ -41,7 +41,7 @@ + include $(EST)/config/systems/default.mak + + TCL_LIBRARY = -ltcl +-OS_LIBS = -ldl ++OS_LIBS = -ldl -lncurses + + ## the native audio module for this type of system + NATIVE_AUDIO_MODULE = LINUX16 +diff --git festival.orig/config/systems/default.mak festival/config/systems/default.mak +index 602ff77..46ef454 100644 +--- festival.orig/config/systems/default.mak ++++ festival/config/systems/default.mak +@@ -40,7 +40,7 @@ + ########################################################################### + ## Installation directories + +-INSTALL_PREFIX=/usr/local ++INSTALL_PREFIX=/usr + + BINDIR=$(INSTALL_PREFIX)/bin + LIBDIR=$(INSTALL_PREFIX)/lib +@@ -63,8 +63,8 @@ NAS_LIB = /usr/X11R6/lib + ########################################################################### + ## Where to find Enlightenment Speech Demon + +-ESD_INCLUDE = /usr/local/include +-ESD_LIB = /usr/local/lib ++ESD_INCLUDE = /usr/include ++ESD_LIB = /usr/lib + + ########################################################################### + ## Where to find X11 +@@ -75,14 +75,14 @@ X11_LIB = /usr/X11R6/lib + ########################################################################### + ## TCL support + +-TCL_INCLUDE = /usr/local/include +-TCL_LIB = /usr/local/lib +-TCL_LIBRARY = -ltcl7.6 ++TCL_INCLUDE = /usr/include ++TCL_LIB = /usr/lib ++TCL_LIBRARY = -ltcl + + ########################################################################### + ## Efence library for malloc debugging + +-EFENCE_LIB = /usr/local/lib ++EFENCE_LIB = /usr/lib + + ########################################################################### + ## Commands. diff --git a/festival/festival-shared-build.patch b/festival/festival-shared-build.patch new file mode 100644 index 0000000..3e90d3a --- /dev/null +++ b/festival/festival-shared-build.patch @@ -0,0 +1,13 @@ +diff --git festival.orig/config/project.mak festival/config/project.mak +index 1160732..4b5f603 100644 +--- festival.orig/config/project.mak ++++ festival/config/project.mak +@@ -80,6 +80,8 @@ PROJECT_LIBRARIES = Festival + PROJECT_LIBRARY_DIR_Festival = $(TOP)/src/lib + PROJECT_DEFAULT_LIBRARY = Festival + ++PROJECT_LIBRARY_VERSION_Festival = $(PROJECT_VERSION).0 ++ + # Libraries used from other projects + + REQUIRED_LIBRARIES = estools estbase eststring diff --git a/festival/festival-sndio.patch b/festival/festival-sndio.patch new file mode 100644 index 0000000..10bd2bc --- /dev/null +++ b/festival/festival-sndio.patch @@ -0,0 +1,57 @@ +diff --git festival.orig/config/modules/Makefile festival/config/modules/Makefile +index b950f75..9595ef8 100644 +--- festival.orig/config/modules/Makefile ++++ festival/config/modules/Makefile +@@ -40,7 +40,7 @@ DIRNAME=config/modules + RULESETS = efence.mak dmalloc.mak \ + psola_tm.mak editline.mak tcl.mak \ + freebsd16_audio.mak irix_audio.mak linux16_audio.mak \ +- sun16_audio.mak win32_audio.mak macosx_audio.mak \ ++ sun16_audio.mak win32_audio.mak macosx_audio.mak sndio_audio.mak \ + mplayer_audio.mak nas_audio.mak esd_audio.mak native_audio.mak \ + siod.mak wagon.mak scfg.mak wfst.mak ols.mak debugging.mak + +diff --git festival/config/modules/sndio_audio.mak festival/config/modules/sndio_audio.mak +new file mode 100644 +index 0000000..1f5d7d2 +--- /dev/null ++++ festival/config/modules/sndio_audio.mak +@@ -0,0 +1,8 @@ ++ ++INCLUDE_SNDIO_AUDIO=1 ++ ++MOD_DESC_SNDIO_AUDIO=(from EST) Audio module for sndio audio support ++ ++AUDIO_DEFINES += -DSUPPORT_SNDIO ++ ++MODULE_LIBS += -lsndio +diff --git festival.orig/config/systems/Linux.mak festival/config/systems/Linux.mak +index 1fbba94..62a3d7b 100644 +--- festival.orig/config/systems/Linux.mak ++++ festival/config/systems/Linux.mak +@@ -44,7 +44,7 @@ TCL_LIBRARY = -ltcl + OS_LIBS = -ldl -lncurses + + ## the native audio module for this type of system +-NATIVE_AUDIO_MODULE = LINUX16 ++NATIVE_AUDIO_MODULE = SNDIO + + ## echo -n doesn't work + ECHO_N = /usr/bin/printf "%s" +diff --git festival.orig/lib/init.scm festival/lib/init.scm +index 90bccb7..fe785e3 100644 +--- festival.orig/lib/init.scm ++++ festival/lib/init.scm +@@ -95,8 +95,10 @@ + (Parameter.def 'Audio_Method 'os2audio)) + ((member 'mplayeraudio *modules*) + (Parameter.def 'Audio_Method 'mplayeraudio)) +- (t ;; can't find direct support so guess that /dev/audio for 8k ulaw exists +- (Parameter.def 'Audio_Method 'sunaudio))) ++ ((member 'sndioaudio *modules*) ++ (Parameter.def 'Audio_Method 'sndioaudio)) ++ (t ;; stupid crappy software. default to only supported "protocol" ++ (Parameter.def 'Audio_Method 'sndioaudio))) + ;;; If you have an external program to play audio add its definition + ;;; in siteinit.scm + diff --git a/festival/festival-without-java.patch b/festival/festival-without-java.patch new file mode 100644 index 0000000..6f3b74c --- /dev/null +++ b/festival/festival-without-java.patch @@ -0,0 +1,104 @@ +diff --git festival.orig/config/modules/linux16_audio.mak festival/config/modules/linux16_audio.mak +index e19ea82..a1eb469 100644 +--- festival.orig/config/modules/linux16_audio.mak ++++ festival/config/modules/linux16_audio.mak +@@ -51,7 +51,3 @@ endif + ifeq ($(LINUXAUDIO),none) + AUDIO_DEFINES += -DSUPPORT_VOXWARE + endif +- +-ifdef INCLUDE_JAVA_CPP +- MODULE_LIBS += -lpthread +-endif +diff --git festival.orig/config/project.mak festival/config/project.mak +index 6456309..3f36fd6 100644 +--- festival.orig/config/project.mak ++++ festival/config/project.mak +@@ -52,9 +52,6 @@ PROJECT_OTHER_CONFIGS = $(EST)/config/config + + MODULE_DIRECTORY = $(TOP)/src/modules + +-DISTRIBUTED_MODULES = \ +- JAVA +- + DEVELOPMENT_MODULES = RJC_SYNTHESIS \ + UNISYN_PHONOLOGY + +@@ -101,12 +98,6 @@ PROJECT_TEMPLATE_DBS = $(TOP) $(EST) + + LIBRARY_TEMPLATE_DIRS_estools = $(LIBRARY_TEMPLATE_DIRS:%=$(EST)/%) + +-JAVA_CLASS_LIBRARY = $(TOP)/src/lib/festival.jar +- +-JAVA_CLASSPATH= $(TOP)/lib/festival.jar:$(EST_HOME)/lib/est_$(EST_JAVA_VERSION).jar:$(SYSTEM_JAVA_CLASSPATH) +- +-PROJECT_JAVA_ROOT=$(TOP)/src/modules/java +- + # Places to look for documentation + + DOCXX_DIRS = $(TOP)/src +diff --git festival.orig/config/systems/Linux.mak festival/config/systems/Linux.mak +index 923c9a7..7b7cb51 100644 +--- festival.orig/config/systems/Linux.mak ++++ festival/config/systems/Linux.mak +@@ -40,11 +40,6 @@ + + include $(EST)/config/systems/default.mak + +-DEFAULT_JAVA_HOME=/usr/lib/jdk-1.1.6 +-JAVA=/usr/bin/java +-JAVAC=/usr/bin/javac +-JAVAH=/usr/bin/javah +- + TCL_LIBRARY = -ltcl + OS_LIBS = -ldl + +diff --git festival.orig/config/systems/default.mak festival/config/systems/default.mak +index 69e8835..602ff77 100644 +--- festival.orig/config/systems/default.mak ++++ festival/config/systems/default.mak +@@ -139,6 +139,3 @@ DOCXX_ARGS = -a -f -B banner.inc -M sane -D 'SYSTEM "$(EST_HOME)/doc/sane.dtd"' + + + COMPILER_VERSION_COMMAND=true +-JAVA_COMPILER_VERSION_COMMAND=true +- +-JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include/genunix +diff --git festival.orig/lib/Makefile festival/lib/Makefile +index bd89321..79176e4 100644 +--- festival.orig/lib/Makefile ++++ festival/lib/Makefile +@@ -56,7 +56,7 @@ GENERAL = init.scm synthesis.scm module_description.scm \ + voices.scm tts.scm festdoc.scm languages.scm token.scm \ + mbrola.scm display.scm postlex.scm tokenpos.scm \ + festtest.scm cslush.scm cart_aux.scm pauses.scm \ +- scfg.scm mettree.scm java.scm clunits.scm clunits_build.scm \ ++ scfg.scm mettree.scm clunits.scm clunits_build.scm \ + siteinit.scm + HTS = hts.scm + OTHERS = Sable.v0_2.dtd sable-latin.ent festival.el scfg_wsj_wp20.gram \ +diff --git festival.orig/src/modules/Makefile festival/src/modules/Makefile +index 555cb75..d493f92 100644 +--- festival.orig/src/modules/Makefile ++++ festival/src/modules/Makefile +@@ -44,7 +44,7 @@ BASE_DIRS = Lexicon base Duration Intonation Text \ + + LIB_BUILD_DIRS = $(BASE_DIRS) + BUILD_DIRS = $(LIB_BUILD_DIRS) +-OPTIONAL = diphone clunits clustergen java rxp UniSyn_phonology MultiSyn hts_engine ++OPTIONAL = diphone clunits clustergen rxp UniSyn_phonology MultiSyn hts_engine + + ALL_DIRS = $(BASE_DIRS) $(OPTIONAL) + +diff --git festival.orig/src/scripts/Makefile festival/src/scripts/Makefile +index 89d3b43..684842a 100644 +--- festival.orig/src/scripts/Makefile ++++ festival/src/scripts/Makefile +@@ -40,7 +40,6 @@ + TOP=../.. + DIRNAME=src/scripts + SCRIPTS= festival_server.sh festival_server_control.sh +-EXTRA_SCRIPTS = jsapi_example.sh festival_client_java.sh + FILES = Makefile shared_setup_sh shared_setup_prl shared_script $(SCRIPTS) $(EXTRA_SCRIPTS) + INSTALL = + ALL = $(SCRIPTS) diff --git a/festival/speech_tools-config.patch b/festival/speech_tools-config.patch new file mode 100644 index 0000000..7efea98 --- /dev/null +++ b/festival/speech_tools-config.patch @@ -0,0 +1,113 @@ +diff --git speech_tools.orig/config/config.in speech_tools/config/config.in +index 1e24249..67fbf9f 100644 +--- speech_tools.orig/config/config.in ++++ speech_tools/config/config.in +@@ -15,7 +15,7 @@ + ## You may need to set this explicitly if automounter or NFS + ## side effects cause problems + +-EST_HOME := $(shell (cd $(EST); pwd)) ++EST_HOME := /usr + + ########################################################################### + ## System type. +@@ -28,14 +28,14 @@ EST_HOME := $(shell (cd $(EST); pwd)) + ## + ## Examples: sparc_SunOS5 intel_Linux2.0 + +-SYSTEM_TYPE=$(MACHINETYPE)_$(OSTYPE)$(OSREV) ++SYSTEM_TYPE=Linux + + ########################################################################### + ## Compiler. + ## The definitions are in compilers/$(COMPILER).mak + ## Examples: gcc suncc egcs gcc28 + +-COMPILER=@COMPILERTYPE@ ++COMPILER=gcc + + ########################################################################### + ## Pre defined configurations (for directory locations, setup peculiarities +@@ -55,7 +55,7 @@ WARN=1 + # VERBOSE=1 + #DEBUG=1 + # PROFILE=gprof +-#SHARED=2 ++SHARED=2 + + ## Directory specific selections which override the above + +@@ -92,7 +92,7 @@ LINUXAUDIO = @LINUXAUDIO@ + ## It may not work under all systems, so may be optionally omitted. + INCLUDE_MODULES += EDITLINE + +-TERMCAPLIB = @TERMCAPLIB@ ++TERMCAPLIB = + # speech recognition + #INCLUDE_MODULES += ASR + +@@ -152,7 +152,7 @@ INCLUDE_MODULES += RXP + CONFIG_WRAPPER_LANGUAGES = PYTHON + + # Language specific includes should be set to correct site paths +-CONFIG_PYTHON_INCLUDES= -I/usr/include/python2.2/ ++CONFIG_PYTHON_INCLUDES= -I/usr/include/python2.7/ + ## + ################################################################### + +diff --git speech_tools.orig/config/systems/Linux.mak speech_tools/config/systems/Linux.mak +index 7b7cb51..1fbba94 100644 +--- speech_tools.orig/config/systems/Linux.mak ++++ speech_tools/config/systems/Linux.mak +@@ -41,7 +41,7 @@ + include $(EST)/config/systems/default.mak + + TCL_LIBRARY = -ltcl +-OS_LIBS = -ldl ++OS_LIBS = -ldl -lncurses + + ## the native audio module for this type of system + NATIVE_AUDIO_MODULE = LINUX16 +diff --git speech_tools.orig/config/systems/default.mak speech_tools/config/systems/default.mak +index 24d6dea..937fb5c 100644 +--- speech_tools.orig/config/systems/default.mak ++++ speech_tools/config/systems/default.mak +@@ -40,7 +40,7 @@ + ########################################################################### + ## Installation directories + +-INSTALL_PREFIX=/usr/local ++INSTALL_PREFIX=/usr + + BINDIR=$(INSTALL_PREFIX)/bin + LIBDIR=$(INSTALL_PREFIX)/lib +@@ -63,8 +63,8 @@ NAS_LIB = /usr/X11R6/lib + ########################################################################### + ## Where to find Enlightenment Speech Demon + +-ESD_INCLUDE = /usr/local/include +-ESD_LIB = /usr/local/lib ++ESD_INCLUDE = /usr/include ++ESD_LIB = /usr/lib + + ########################################################################### + ## Where to find X11 +@@ -75,14 +75,14 @@ X11_LIB = /usr/X11R6/lib + ########################################################################### + ## TCL support + +-TCL_INCLUDE = /usr/local/include +-TCL_LIB = /usr/local/lib +-TCL_LIBRARY = -ltcl7.6 ++TCL_INCLUDE = /usr/include ++TCL_LIB = /usr/lib ++TCL_LIBRARY = -ltcl + + ########################################################################### + ## Efence library for malloc debugging + +-EFENCE_LIB = /usr/local/lib ++EFENCE_LIB = /usr/lib + + ########################################################################### + ## Commands. diff --git a/festival/speech_tools-gcc47.patch b/festival/speech_tools-gcc47.patch new file mode 100644 index 0000000..dd2f337 --- /dev/null +++ b/festival/speech_tools-gcc47.patch @@ -0,0 +1,51 @@ +diff --git speech_tools.orig/base_class/EST_TSimpleMatrix.cc speech_tools/base_class/EST_TSimpleMatrix.cc +index 3a7c47e..7b8ffb1 100644 +--- speech_tools.orig/base_class/EST_TSimpleMatrix.cc ++++ speech_tools/base_class/EST_TSimpleMatrix.cc +@@ -44,6 +44,7 @@ + #include "EST_TVector.h" + #include + #include ++#include + #include "EST_cutils.h" + #include + +@@ -52,7 +53,7 @@ void EST_TSimpleMatrix::copy_data(const EST_TSimpleMatrix &a) + { + + if (!a.p_sub_matrix && !this->p_sub_matrix) +- memcpy((void *)&this->a_no_check(0,0), ++ std::memcpy((void *)&this->a_no_check(0,0), + (const void *)&a.a_no_check(0,0), + this->num_rows()*this->num_columns()*sizeof(T) + ); +diff --git speech_tools.orig/base_class/EST_TSimpleVector.cc speech_tools/base_class/EST_TSimpleVector.cc +index 5539594..38b313c 100644 +--- speech_tools.orig/base_class/EST_TSimpleVector.cc ++++ speech_tools/base_class/EST_TSimpleVector.cc +@@ -43,6 +43,7 @@ + #include "EST_TSimpleVector.h" + #include "EST_matrix_support.h" + #include ++#include + #include "EST_cutils.h" + #include + +@@ -51,7 +52,7 @@ template void EST_TSimpleVector::copy(const EST_TSimpleVector &a) + if (this->p_column_step==1 && a.p_column_step==1) + { + resize(a.n(), FALSE); +- memcpy((void *)(this->p_memory), (const void *)(a.p_memory), this->n() * sizeof(T)); ++ std::memcpy((void *)(this->p_memory), (const void *)(a.p_memory), this->n() * sizeof(T)); + } + else + ((EST_TVector *)this)->copy(a); +@@ -141,7 +142,7 @@ template EST_TSimpleVector &EST_TSimpleVector::operator=(const ES + template void EST_TSimpleVector::zero() + { + if (this->p_column_step==1) +- memset((void *)(this->p_memory), 0, this->n() * sizeof(T)); ++ std::memset((void *)(this->p_memory), 0, this->n() * sizeof(T)); + else + ((EST_TVector *)this)->fill(*this->def_val); + } diff --git a/festival/speech_tools-shared-build.patch b/festival/speech_tools-shared-build.patch new file mode 100644 index 0000000..3135a2a --- /dev/null +++ b/festival/speech_tools-shared-build.patch @@ -0,0 +1,63 @@ +diff --git speech_tools.orig/config/compilers/gcc_defaults.mak speech_tools/config/compilers/gcc_defaults.mak +index 193ce24..194266e 100644 +--- speech_tools.orig/config/compilers/gcc_defaults.mak ++++ speech_tools/config/compilers/gcc_defaults.mak +@@ -81,7 +81,7 @@ SHARED_CXXFLAGS = -fPIC + SHARED_LINKFLAGS = + + ifndef GCC_MAKE_SHARED_LIB +- MAKE_SHARED_LIB = $(CXX) -shared -fno-shared-data -o XXX ++ MAKE_SHARED_LIB = $(CXX) -shared -o XXX -Wl,-soname,YYY + else + MAKE_SHARED_LIB = $(GCC_MAKE_SHARED_LIB) + endif +diff --git speech_tools.orig/config/rules/defaults.mak speech_tools/config/rules/defaults.mak +index 27ec08a..336c88f 100644 +--- speech_tools.orig/config/rules/defaults.mak ++++ speech_tools/config/rules/defaults.mak +@@ -69,15 +69,21 @@ ifdef N + MADE_FROM_ABOVE:=$(N) + endif + ++ifneq ($(SHARED),0) ++ LIBTYPE=so ++else ++ LIBTYPE=a ++endif ++ + ifndef PROJECT_LIBDEPS +- PROJECT_LIBDEPS = $(foreach l,$(PROJECT_LIBRARIES),$(PROJECT_LIBRARY_DIR_$(l))/lib$(l).a) ++ PROJECT_LIBDEPS = $(foreach l,$(PROJECT_LIBRARIES),$(PROJECT_LIBRARY_DIR_$(l))/lib$(l).$(LIBTYPE)) + endif + ifndef PROJECT_LIBS + PROJECT_LIBS = $(foreach l,$(PROJECT_LIBRARIES),-L$(PROJECT_LIBRARY_DIR_$(l)) -l$(l)) + endif + + ifndef REQUIRED_LIBDEPS +- REQUIRED_LIBDEPS = $(foreach l,$(REQUIRED_LIBRARIES),$(REQUIRED_LIBRARY_DIR_$(l))/lib$(l).a) ++ REQUIRED_LIBDEPS = $(foreach l,$(REQUIRED_LIBRARIES),$(REQUIRED_LIBRARY_DIR_$(l))/lib$(l).$(LIBTYPE)) + endif + ifndef REQUIRED_LIBS + REQUIRED_LIBS = $(foreach l,$(REQUIRED_LIBRARIES),-L$(REQUIRED_LIBRARY_DIR_$(l)) -l$(l)) +diff --git speech_tools.orig/config/rules/library.mak speech_tools/config/rules/library.mak +index f93d019..b449f21 100644 +--- speech_tools.orig/config/rules/library.mak ++++ speech_tools/config/rules/library.mak +@@ -103,13 +103,13 @@ endif + ########################################################################### + + lib%.so : lib%.a +- @echo Make Shared Library $* ++ @echo Make Shared Library $(*F) + @if [ ! -d shared_space ] ; then mkdir shared_space ; else $(RM) -f shared_space/*.o ; fi + @(cd shared_space ; $(AR) x ../$< ) +- @echo Link Shared Library $* +- $(subst XXX,$@.$(PROJECT_LIBRARY_VERSION_$*),$(MAKE_SHARED_LIB)) shared_space/*.o $(PROJECT_LIBRARY_USES_$*:%=-L. -l%) $$libs ++ @echo Link Shared Library $(*F) ++ $(subst XXX,$@.$(PROJECT_LIBRARY_VERSION_$(*F)),$(subst YYY,$(@F).$(PROJECT_LIBRARY_VERSION_$(*F)),$(MAKE_SHARED_LIB))) shared_space/*.o $(PROJECT_LIBRARY_USES_$(*F):%=-L. -l%) $$libs + @$(RM) -f shared_space/*.o $@ +- @ln -s $@.$(PROJECT_LIBRARY_VERSION_$*) $@ ++ @ln -s $(@F).$(PROJECT_LIBRARY_VERSION_$(*F)) $@ + + ########################################################################### + ## ## diff --git a/festival/speech_tools-sndio.patch b/festival/speech_tools-sndio.patch new file mode 100644 index 0000000..0bf1b8b --- /dev/null +++ b/festival/speech_tools-sndio.patch @@ -0,0 +1,527 @@ +diff --git speech_tools.orig/audio/Makefile speech_tools/audio/Makefile +index 6103654..1535faf 100644 +--- speech_tools.orig/audio/Makefile ++++ speech_tools/audio/Makefile +@@ -44,7 +44,7 @@ LOCAL_DEFAULT_LIBRARY = estbase + H = audioP.h + CPPSRCS = gen_audio.cc nas.cc esd.cc sun16audio.cc \ + mplayer.cc win32audio.cc irixaudio.cc os2audio.cc \ +- macosxaudio.cc linux_sound.cc ++ macosxaudio.cc linux_sound.cc sndio.cc + + SRCS = $(CPPSRCS) + OBJS = $(SRCS:.cc=.o) +diff --git speech_tools.orig/audio/audioP.h speech_tools/audio/audioP.h +index 6d49690..6c86ab1 100644 +--- speech_tools.orig/audio/audioP.h ++++ speech_tools/audio/audioP.h +@@ -43,6 +43,7 @@ int play_nas_wave(EST_Wave &inwave, EST_Option &al); + int play_esd_wave(EST_Wave &inwave, EST_Option &al); + int play_sun16_wave(EST_Wave &inwave, EST_Option &al); + int play_linux_wave(EST_Wave &inwave, EST_Option &al); ++int play_sndio_wave(EST_Wave &inwave, EST_Option &al); + int play_mplayer_wave(EST_Wave &inwave, EST_Option &al); + int play_win32audio_wave(EST_Wave &inwave, EST_Option &al); + int play_irix_wave(EST_Wave &inwave, EST_Option &al); +@@ -52,5 +53,6 @@ int record_nas_wave(EST_Wave &inwave, EST_Option &al); + int record_esd_wave(EST_Wave &inwave, EST_Option &al); + int record_sun16_wave(EST_Wave &inwave, EST_Option &al); + int record_linux_wave(EST_Wave &inwave, EST_Option &al); ++int record_sndio_wave(EST_Wave &inwave, EST_Option &al); + + #endif /* __AUDIOP_H__ */ +diff --git speech_tools.orig/audio/gen_audio.cc speech_tools/audio/gen_audio.cc +index 985324a..ec286a4 100644 +--- speech_tools.orig/audio/gen_audio.cc ++++ speech_tools/audio/gen_audio.cc +@@ -97,6 +97,8 @@ int play_wave(EST_Wave &inwave, EST_Option &al) + protocol = "win32audio"; + else if (mplayer_supported) + protocol = "mplayeraudio"; ++ else if (sndio_supported) ++ protocol = "sndioaudio"; + else + protocol = "sunaudio"; + } +@@ -121,6 +123,8 @@ int play_wave(EST_Wave &inwave, EST_Option &al) + else if ((upcase(protocol) == "FREEBSD16AUDIO") || + (upcase(protocol) == "LINUX16AUDIO")) + return play_linux_wave(*toplay,al); ++ else if (upcase(protocol) == "SNDIOAUDIO") ++ return play_sndio_wave(*toplay,al); + else if (upcase(protocol) == "IRIXAUDIO") + return play_irix_wave(*toplay,al); + else if (upcase(protocol) == "MACOSXAUDIO") +@@ -263,6 +267,8 @@ EST_String options_supported_audio(void) + audios += " win32audio"; + if (os2audio_supported) + audios += " os2audio"; ++ if (sndio_supported) ++ audios += " sndioaudio"; + + return audios; + } +@@ -301,6 +307,8 @@ int record_wave(EST_Wave &wave, EST_Option &al) + protocol = "win32audio"; + else if (mplayer_supported) + protocol = "mplayeraudio"; ++ else if (sndio_supported) ++ protocol = "sndioaudio"; + else + protocol = "sunaudio"; + } +@@ -314,6 +322,8 @@ int record_wave(EST_Wave &wave, EST_Option &al) + else if ((upcase(protocol) == "FREEBSD16AUDIO") || + (upcase(protocol) == "LINUX16AUDIO")) + return record_linux_wave(wave,al); ++ else if (upcase(protocol) == "SNDIOAUDIO") ++ return record_sndio_wave(wave,al); + else if (upcase(protocol) == "SUNAUDIO") + return record_sunau_wave(wave,al); + else +diff --git speech_tools/audio/sndio.cc speech_tools/audio/sndio.cc +new file mode 100644 +index 0000000..866f43c +--- /dev/null ++++ speech_tools/audio/sndio.cc +@@ -0,0 +1,371 @@ ++/* ++ * Copyright (c) 2010 Jacob Meuser ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++/* Based on voxware.cc which came with the following copyright notice. */ ++ ++/*************************************************************************/ ++/* */ ++/* Centre for Speech Technology Research */ ++/* University of Edinburgh, UK */ ++/* Copyright (c) 1997,1998 */ ++/* All Rights Reserved. */ ++/* */ ++/* Permission is hereby granted, free of charge, to use and distribute */ ++/* this software and its documentation without restriction, including */ ++/* without limitation the rights to use, copy, modify, merge, publish, */ ++/* distribute, sublicense, and/or sell copies of this work, and to */ ++/* permit persons to whom this work is furnished to do so, subject to */ ++/* the following conditions: */ ++/* 1. The code must retain the above copyright notice, this list of */ ++/* conditions and the following disclaimer. */ ++/* 2. Any modifications must be clearly marked as such. */ ++/* 3. Original authors' names are not deleted. */ ++/* 4. The authors' names are not used to endorse or promote products */ ++/* derived from this software without specific prior written */ ++/* permission. */ ++/* */ ++/* THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK */ ++/* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */ ++/* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */ ++/* SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE */ ++/* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */ ++/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */ ++/* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */ ++/* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */ ++/* THIS SOFTWARE. */ ++/* */ ++/*************************************************************************/ ++/* Author : Alan W Black */ ++/* Date : July 1997 */ ++/*-----------------------------------------------------------------------*/ ++ ++#include ++#include ++#include ++#include ++#include ++#include "EST_cutils.h" ++#include "EST_walloc.h" ++#include "EST_Wave.h" ++#include "EST_wave_aux.h" ++#include "EST_Option.h" ++#include "audioP.h" ++#include "EST_io_aux.h" ++#include "EST_error.h" ++ ++#ifdef SUPPORT_SNDIO ++#include ++int sndio_supported = TRUE; ++static char *aud_sys_name = "sndio"; ++static int stereo_only = 0; ++ ++ ++// Code to block signals while sound is playing. ++// Needed inside Java on (at least some) linux systems ++// as scheduling interrupts seem to break the writes. ++ ++#ifdef THREAD_SAFETY ++#include ++#include ++ ++#define THREAD_DECS() \ ++ sigset_t oldmask \ ++ ++#define THREAD_PROTECT() do { \ ++ sigset_t newmask; \ ++ \ ++ sigfillset(&newmask); \ ++ \ ++ pthread_sigmask(SIG_BLOCK, &newmask, &oldmask); \ ++ } while(0) ++ ++#define THREAD_UNPROTECT() do { \ ++ pthread_sigmask(SIG_SETMASK, &oldmask, NULL); \ ++ } while (0) ++ ++#else ++#define THREAD_DECS() //empty ++#define THREAD_PROTECT() //empty ++#define THREAD_UNPROTECT() //empty ++#endif ++ ++ ++#define AUDIOBUFFSIZE 256 ++// #define AUDIOBUFFSIZE 20480 ++ ++int ++play_sndio_wave(EST_Wave &inwave, EST_Option &al) ++{ ++ struct sio_hdl *hdl; ++ struct sio_par par; ++ int sample_rate; ++ short *waveform; ++ short *waveform2 = NULL; ++ int num_samples; ++ int i, r, n; ++ char *audiodevice = NULL; ++ ++ if (al.present("-audiodevice")) ++ audiodevice = al.val("-audiodevice"); ++ ++ if ((hdl = sio_open(audiodevice, SIO_PLAY, 0)) == NULL) { ++ cerr << aud_sys_name << ": error opening device" << endl; ++ return -1; ++ } ++ ++ waveform = inwave.values().memory(); ++ num_samples = inwave.num_samples(); ++ sample_rate = inwave.sample_rate(); ++ ++ sio_initpar(&par); ++ ++ par.rate = sample_rate; ++ par.pchan = 1; ++ par.bits = 16; ++ par.sig = 1; ++ par.le = SIO_LE_NATIVE; ++ ++ if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) { ++ cerr << aud_sys_name << ": error configuring parameters" << endl; ++ return -1; ++ } ++ ++ if ((par.pchan != 1 && par.pchan != 2) || ++ !((par.bits == 16 && par.sig == 1) || ++ (par.bits == 8 && par.sig == 0)) || ++ par.rate != sample_rate) { ++ cerr << aud_sys_name << ": could not set appropriate parameters" << endl; ++ return -1; ++ } ++ ++ if (!sio_start(hdl)) { ++ cerr << aud_sys_name << ": could not start sudio" << endl; ++ return -1; ++ } ++ ++ if (par.pchan == 2) ++ stereo_only = 1; ++ ++ if (stereo_only) { ++ waveform2 = walloc(short, num_samples * 2); ++ for (i = 0; i < num_samples; i++) { ++ waveform2[i * 2] = inwave.a(i); ++ waveform2[(i * 2) + 1] = inwave.a(i); ++ } ++ waveform = waveform2; ++ num_samples *= 2; ++ } ++ ++ THREAD_DECS(); ++ THREAD_PROTECT(); ++ ++ if (par.bits == 8) { ++ // Its actually 8bit unsigned so convert the buffer; ++ unsigned char *uchars = walloc(unsigned char,num_samples); ++ for (i=0; i < num_samples; i++) ++ uchars[i] = waveform[i] / 256 + 128; ++ for (i=0; i < num_samples; i += r) { ++ if (num_samples > i + AUDIOBUFFSIZE) ++ n = AUDIOBUFFSIZE; ++ else ++ n = num_samples - i; ++ r = sio_write(hdl, &uchars[i], n); ++ if (r == 0 && sio_eof(hdl)) { ++ THREAD_UNPROTECT(); ++ cerr << aud_sys_name << ": failed to write to buffer" << ++ sample_rate << endl; ++ sio_close(hdl); ++ return -1; ++ } ++ } ++ wfree(uchars); ++ } else { ++ // 16-bit ++ int nbuf, c; ++ short *buf; ++ ++ nbuf = par.round * par.bps * par.pchan; ++ ++ buf = new short[nbuf]; ++ ++ for (i = 0; i < num_samples; i += r / 2) { ++ if (num_samples > i+nbuf) ++ n = nbuf; ++ else ++ n = num_samples-i; ++ ++ for (c = 0; c < n; c++) ++ buf[c] = waveform[c + i]; ++ ++ for(; c < nbuf; c++) ++ buf[c] = waveform[n - 1]; ++ ++ r = sio_write(hdl, buf, nbuf * 2); ++ if (r == 0 && sio_eof(hdl)) { ++ THREAD_UNPROTECT(); ++ EST_warning("%s: failed to write to buffer (sr=%d)", ++ aud_sys_name, sample_rate ); ++ sio_close(hdl); ++ return -1; ++ } ++ ++ } ++ delete [] buf; ++ } ++ ++ sio_close(hdl); ++ if (waveform2) ++ wfree(waveform2); ++ ++ THREAD_UNPROTECT(); ++ return 1; ++} ++ ++int ++record_sndio_wave(EST_Wave &inwave, EST_Option &al) ++{ ++ struct sio_hdl *hdl; ++ struct sio_par par; ++ int sample_rate = 16000; // egcs needs the initialized for some reason ++ short *waveform; ++ short *waveform2 = NULL; ++ int num_samples; ++ int i,r,n; ++ char *audiodevice = NULL; ++ ++ if (al.present("-audiodevice")) ++ audiodevice = al.val("-audiodevice"); ++ ++ sample_rate = al.ival("-sample_rate"); ++ ++ if ((hdl = sio_open(audiodevice, SIO_REC, 0)) == NULL) { ++ cerr << aud_sys_name << ": error opening device" << endl; ++ return -1; ++ } ++ ++ sio_initpar(&par); ++ ++ par.rate = sample_rate; ++ par.rchan = 1; ++ par.bits = 16; ++ par.sig = 1; ++ par.le = SIO_LE_NATIVE; ++ ++ if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) { ++ cerr << aud_sys_name << ": error configuring parameters" << endl; ++ return -1; ++ } ++ ++ if ((par.rchan != 1 && par.rchan != 2) || ++ !((par.bits == 16 && par.sig == 1) || ++ (par.bits == 8 && par.sig == 0)) || ++ par.rate != sample_rate) { ++ cerr << aud_sys_name << ": could not set appropriate parameters" << endl; ++ return -1; ++ } ++ ++ if (!sio_start(hdl)) { ++ cerr << aud_sys_name << ": could not start sudio" << endl; ++ return -1; ++ } ++ ++ if (par.rchan == 2) ++ stereo_only = 1; ++ ++ inwave.resize((int)(sample_rate * al.fval("-time"))); ++ inwave.set_sample_rate(sample_rate); ++ num_samples = inwave.num_samples(); ++ waveform = inwave.values().memory(); ++ ++ if (par.bits == 16) { ++ // We assume that the device returns audio in native byte order ++ // by default ++ ++ if (stereo_only) { ++ waveform2 = walloc(short, num_samples * 2); ++ num_samples *= 2; ++ } else ++ waveform2 = waveform; ++ ++ for (i = 0; i < num_samples; i+= r) { ++ if (num_samples > i+AUDIOBUFFSIZE) ++ n = AUDIOBUFFSIZE; ++ else ++ n = num_samples-i; ++ r = sio_read(hdl, &waveform2[i], n * 2); ++ r /= 2; ++ if (r == 0 && sio_eof(hdl)) { ++ cerr << aud_sys_name << ": failed to read from audio device" ++ << endl; ++ sio_close(hdl); ++ return -1; ++ } ++ } ++ } else { ++ unsigned char *u8wave = walloc(unsigned char, num_samples); ++ ++ for (i = 0; i < num_samples; i += r) { ++ if (num_samples > i+AUDIOBUFFSIZE) ++ n = AUDIOBUFFSIZE; ++ else ++ n = num_samples - i; ++ r = sio_read(hdl, &u8wave[i], n); ++ if (r == 0 && sio_eof(hdl)) { ++ cerr << aud_sys_name << ": failed to read from audio device" ++ << endl; ++ sio_close(hdl); ++ wfree(u8wave); ++ return -1; ++ } ++ ++ } ++ uchar_to_short(u8wave, waveform, num_samples); ++ wfree(u8wave); ++ } ++ ++ if (stereo_only) { ++ for (i = 0; i < num_samples; i += 2) ++ waveform[i / 2] = waveform2[i]; ++ wfree(waveform2); ++ } ++ ++ sio_close(hdl); ++ return 0; ++} ++ ++#else ++ ++int sndio_supported = FALSE; ++ ++int ++play_sndio_wave(EST_Wave &inwave, EST_Option &al) ++{ ++ (void)inwave; ++ (void)al; ++ cerr << "Audio: sndio not compiled in this version" << endl; ++ return -1; ++} ++ ++int ++record_sndio_wave(EST_Wave &inwave, EST_Option &al) ++{ ++ (void)inwave; ++ (void)al; ++ cerr << "Audio: sndio not compiled in this version" << endl; ++ return -1; ++} ++ ++#endif +diff --git speech_tools.orig/config/modules/Makefile speech_tools/config/modules/Makefile +index c937c64..6bfb6d3 100644 +--- speech_tools.orig/config/modules/Makefile ++++ speech_tools/config/modules/Makefile +@@ -42,7 +42,7 @@ RULESETS = efence.mak dmalloc.mak debugging.mak \ + freebsd16_audio.mak irix_audio.mak linux16_audio.mak \ + sun16_audio.mak win32_audio.mak macosx_audio.mak \ + mplayer_audio.mak nas_audio.mak esd_audio.mak \ +- siod_python.mak ++ siod_python.mak sndio_audio.mak + + FILES = Makefile descriptions $(RULESETS) + +diff --git speech_tools/config/modules/sndio_audio.mak speech_tools/config/modules/sndio_audio.mak +new file mode 100644 +index 0000000..1f5d7d2 +--- /dev/null ++++ speech_tools/config/modules/sndio_audio.mak +@@ -0,0 +1,8 @@ ++ ++INCLUDE_SNDIO_AUDIO=1 ++ ++MOD_DESC_SNDIO_AUDIO=(from EST) Audio module for sndio audio support ++ ++AUDIO_DEFINES += -DSUPPORT_SNDIO ++ ++MODULE_LIBS += -lsndio +diff --git speech_tools.orig/config/systems/Linux.mak speech_tools/config/systems/Linux.mak +index 1fbba94..62a3d7b 100644 +--- speech_tools.orig/config/systems/Linux.mak ++++ speech_tools/config/systems/Linux.mak +@@ -44,7 +44,7 @@ TCL_LIBRARY = -ltcl + OS_LIBS = -ldl -lncurses + + ## the native audio module for this type of system +-NATIVE_AUDIO_MODULE = LINUX16 ++NATIVE_AUDIO_MODULE = SNDIO + + ## echo -n doesn't work + ECHO_N = /usr/bin/printf "%s" +diff --git speech_tools.orig/include/EST_audio.h speech_tools/include/EST_audio.h +index 2b1df88..29891b8 100644 +--- speech_tools.orig/include/EST_audio.h ++++ speech_tools/include/EST_audio.h +@@ -46,6 +46,7 @@ extern int nas_supported; + extern int esd_supported; + extern int sun16_supported; + extern int freebsd16_supported; ++extern int sndio_supported; + extern int linux16_supported; + extern int mplayer_supported; + extern int win32audio_supported; +diff --git speech_tools.orig/lib/siod/init.scm speech_tools/lib/siod/init.scm +index a149f96..37acb24 100644 +--- speech_tools.orig/lib/siod/init.scm ++++ speech_tools/lib/siod/init.scm +@@ -78,8 +78,10 @@ + (Parameter.def 'Audio_Method 'os2audio)) + ((member 'mplayeraudio *modules*) + (Parameter.def 'Audio_Method 'mplayeraudio)) +- (t ;; can't find direct support so guess that /dev/audio for 8k ulaw exists +- (Parameter.def 'Audio_Method 'sunaudio))) ++ ((member 'sndioaudio *modules*) ++ (Parameter.def 'Audio_Method 'sndioaudio)) ++ (t ;; stupid crappy software. default to only supported "protocol" ++ (Parameter.def 'Audio_Method 'sndioaudio))) + + ;;; If you have an external program to play audio add its definition + ;;; in siteinit.scm diff --git a/festival/speech_tools-without-java.patch b/festival/speech_tools-without-java.patch new file mode 100644 index 0000000..06e7adf --- /dev/null +++ b/festival/speech_tools-without-java.patch @@ -0,0 +1,478 @@ +diff --git speech_tools.orig/Makefile speech_tools/Makefile +index f3343f1..ef8b23e 100644 +--- speech_tools.orig/Makefile ++++ speech_tools/Makefile +@@ -47,7 +47,7 @@ LIB_BUILD_DIRS = audio utils base_class ling_class speech_class sigpr \ + BUILD_DIRS = $(LIB_BUILD_DIRS) lib main scripts testsuite bin + TEMPLATE_DIRS=include audio utils base_class base_class/string \ + ling_class speech_class sigpr stats grammar siod +-EXTRA_DIRS=siod java rxp wrappers ++EXTRA_DIRS=siod rxp wrappers + ALL_DIRS = include $(BUILD_DIRS) $(EXTRA_DIRS) config doc + VERSION=$(PROJECT_VERSION) + CONFIG=configure configure.in config.sub config.guess \ +diff --git speech_tools.orig/config/compilers/Makefile speech_tools/config/compilers/Makefile +index 3d3d5bb..53470f2 100644 +--- speech_tools.orig/config/compilers/Makefile ++++ speech_tools/config/compilers/Makefile +@@ -40,10 +40,10 @@ DIRNAME=config/compilers + COMPILERS = gcc.mak gcc27.mak gcc28.mak gcc295.mak \ + egcs.mak gcc27emx.mak intel80.mak \ + suncc.mak suncc40.mak \ +- jolt.mak jdk.mak jdk12.mak none.mak \ +- jikes.mak gcc296.mak gcc30.mak gcc31.mak gcc32.mak ++ none.mak \ ++ gcc296.mak gcc30.mak gcc31.mak gcc32.mak + +-FILES = Makefile $(COMPILERS) gcc_defaults.mak suncc_defaults.mak jdk_defaults.mak jikes_defaults.mak ++FILES = Makefile $(COMPILERS) gcc_defaults.mak suncc_defaults.mak + + include $(TOP)/config/common_make_rules + +diff --git speech_tools.orig/config/config.in speech_tools/config/config.in +index 15d563e..1e24249 100644 +--- speech_tools.orig/config/config.in ++++ speech_tools/config/config.in +@@ -38,12 +38,6 @@ SYSTEM_TYPE=$(MACHINETYPE)_$(OSTYPE)$(OSREV) + COMPILER=@COMPILERTYPE@ + + ########################################################################### +-## Java system to use if you include the Java interface. +-## Examples jdk +- +-JAVA_COMPILER=jdk +- +-########################################################################### + ## Pre defined configurations (for directory locations, setup peculiarities + ## etc.) + ## +@@ -120,23 +114,6 @@ INCLUDE_MODULES += SCFG + INCLUDE_MODULES += WFST + INCLUDE_MODULES += OLS + +-## Java +- +- +-## Define this to include the pure Java code +-# INCLUDE_MODULES += JAVA +-# JAVA_HOME = PUT_SOMETHING_HERE +- +-## Define this to compile the Java interface to the EST classes. You +-## need to compile with the SHARED option above. This is required for +-## fringe. +-# INCLUDE_MODULES += JAVA_CPP +- +-## Define this to have the Java code use the Java Media API to +-## play sounds etc. +-# INCLUDE_MODULES += JAVA_MEDIA +-# JMF_HOME = PUT_SOMETHING_HERE +- + ## Richard Tobin's RXP XML parser. + INCLUDE_MODULES += RXP + +@@ -198,10 +175,6 @@ include $(EST)/config/systems/$(SYSTEM_TYPE).mak + + include $(EST)/config/compilers/$(COMPILER).mak + +-ifneq ($(JAVA_COMPILER),none) +- include $(EST)/config/compilers/$(JAVA_COMPILER).mak +-endif +- + ifneq ($(CONFIGURATION),) + include $(CONFIGURATION:%=$(EST)/config/configs/%.mak) + endif +diff --git speech_tools.orig/config/configs/Makefile speech_tools/config/configs/Makefile +index d9c5f15..885156e 100644 +--- speech_tools.orig/config/configs/Makefile ++++ speech_tools/config/configs/Makefile +@@ -48,10 +48,6 @@ DIRNAME=config/configs + ## + ## ellipsis Setup on cstr linux machine + ## +-## kellogg Setup on cstr machine with different java location +-## +-## v_java Special setup for a with-java compilation at cstr +-## + ## rjc Weird things in rjc's setup. + + +@@ -59,8 +55,6 @@ CONFIGURATIONS = \ + egcs_as_gcc.mak \ + cstr.mak \ + ellipsis.mak \ +- kellogg.mak \ +- v_java.mak \ + rjc.mak \ + cstr_jdk1.2.mak + +diff --git speech_tools.orig/config/modules/linux16_audio.mak speech_tools/config/modules/linux16_audio.mak +index 61d761c..31ec2b0 100644 +--- speech_tools.orig/config/modules/linux16_audio.mak ++++ speech_tools/config/modules/linux16_audio.mak +@@ -56,10 +56,3 @@ endif + ifeq ($(LINUXAUDIO),none) + AUDIO_DEFINES += -DSUPPORT_VOXWARE + endif +- +-ifdef INCLUDE_JAVA_CPP +- AUDIO_DEFINES += -DTHREAD_SAFETY +- MODULE_LIBS += -lpthread +-endif +- +- +diff --git speech_tools.orig/config/project.mak speech_tools/config/project.mak +index 5e9c216..0bdd548 100644 +--- speech_tools.orig/config/project.mak ++++ speech_tools/config/project.mak +@@ -63,7 +63,6 @@ DISTRIBUTED_MODULES = \ + NAS_AUDIO ESD_AUDIO NATIVE_AUDIO MPLAYER_AUDIO \ + EDITLINE \ + SIOD WAGON SCFG WFST OLS \ +- JAVA JAVA_CPP JAVA_MEDIA \ + TCL RXP + + DEVELOPMENT_MODULES = \ +@@ -91,36 +90,22 @@ PROJECT_LIB_DIR = $(TOP)/lib + + PROJECT_LIBRARIES = estools estbase eststring + +-PROJECT_LIBRARIES_JAVA = estjava +- + PROJECT_LIBRARY_DIR = lib + PROJECT_LIBRARY_DIR_estools = $(TOP)/lib + PROJECT_LIBRARY_DIR_estbase = $(TOP)/lib + PROJECT_LIBRARY_DIR_eststring = $(TOP)/lib +-PROJECT_LIBRARY_DIR_estjava = $(TOP)/lib + + PROJECT_LIBRARY_USES_estbase = eststring + +-PROJECT_LIBRARY_USES_estjava = estbase eststring +- + PROJECT_LIBRARY_VERSION_estools = $(PROJECT_VERSION).1 + PROJECT_LIBRARY_VERSION_estbase = $(PROJECT_VERSION).1 + PROJECT_LIBRARY_VERSION_eststring = 1.2 +-PROJECT_LIBRARY_VERSION_estjava = $(PROJECT_VERSION).1 +- +-PROJECT_LIBRARY_NEEDS_SYSLIBS_estjava=1 + + PROJECT_DEFAULT_LIBRARY = estools + + PROJECT_SHARED_LIBRARIES = eststring estbase + PROJECT_ALL_LIBRARIES = eststring estbase estools + +-JAVA_CLASS_LIBRARY = $(LOCAL_JAVA_CLASS_LIBRARY) +- +-JAVA_CLASSPATH=$(LOCAL_JAVA_CLASSPATH):$(SYSTEM_JAVA_CLASSPATH) +- +-PROJECT_JAVA_ROOT=$(LOCAL_JAVA_ROOT) +- + # Libraries used from other projects + + REQUIRED_LIBRARIES = +diff --git speech_tools.orig/config/rules/Makefile speech_tools/config/rules/Makefile +index bbc8dec..a155041 100644 +--- speech_tools.orig/config/rules/Makefile ++++ speech_tools/config/rules/Makefile +@@ -41,7 +41,7 @@ TOP=../.. + + RULESETS = compile_options.mak defaults.mak library.mak make_depend.mak \ + rcs.mak rules.mak targets.mak modules.mak \ +- config_errors.mak visual_c.mak c.mak java.mak \ ++ config_errors.mak visual_c.mak c.mak \ + bin_process.mak install.mak top_level.mak doc.mak \ + common_make_rules.mak test_make_rules.mak cvs.mak \ + build_dir.mak +diff --git speech_tools.orig/config/rules/bin_process.mak speech_tools/config/rules/bin_process.mak +index a1b9807..3ab5730 100644 +--- speech_tools.orig/config/rules/bin_process.mak ++++ speech_tools/config/rules/bin_process.mak +@@ -107,12 +107,7 @@ endif + main="$(MAIN)/$(DIRNAME)" \ + lib="$($(PROJECT_PREFIX)_HOME)/$(PROJECT_LIBRARY_DIR)" \ + est="'$(EST_HOME)'" \ +- classpath="$(SYSTEM_JAVA_CLASSPATH)" \ + perl="$(PERL)" \ +- javahome="$(JAVA_HOME)" \ +- java="$(JAVA)" \ +- javac="$(JAVAC)" \ +- java_version="$(EST_JAVA_VERSION)" \ + ldpath="$(SYSTEM_LD_LIBRARY_PATH)" \ + ldvar="$(LD_LIBRARY_PATH_VARIABLE)" \ + $(PROJECT_SCRIPTS_DIR)/shared_script > "$(subst TOP,$(TOP),$(BIN))/$$b" ;\ +@@ -154,11 +149,6 @@ endif + topdir="$($(PROJECT_PREFIX)_HOME)" \ + est="'$(EST_HOME)'" \ + perl="$(PERL)" \ +- javahome=$(JAVA_HOME) \ +- java_version="$(EST_JAVA_VERSION)" \ +- java=$(JAVA) \ +- javac=$(JAVAC) \ +- classpath=$(SYSTEM_JAVA_CLASSPATH) \ + ldpath="$(SYSTEM_LD_LIBRARY_PATH)" \ + ldvar="$(LD_LIBRARY_PATH_VARIABLE)" \ + "$$script" > "$(subst TOP,$(TOP),$(BIN))/$$b" ;\ +diff --git speech_tools.orig/config/rules/common_make_rules.mak speech_tools/config/rules/common_make_rules.mak +index bd23c02..b69234c 100644 +--- speech_tools.orig/config/rules/common_make_rules.mak ++++ speech_tools/config/rules/common_make_rules.mak +@@ -54,10 +54,6 @@ endif + # export TEMPLATE_DIRS + export CI_ARGS + +-ifdef JAVA_CLASSES +- NEED_JAVA=1 +-endif +- + # Various subsets of directories + + ifndef ALL_DIRS +@@ -66,10 +62,6 @@ ifdef BUILD_DIRS + endif + endif + +-ifdef JAVA_COMMON_DIRS +- JUST_BUILD_DIRS := $(JUST_BUILD_DIRS) $(notdir $(JAVA_COMMON_DIRS)) +-endif +- + ifdef JUST_LIB + SUBDIRECTORIES = ${JUST_BUILD_DIRS} ${LIB_BUILD_DIRS} ${EXTRA_LIB_BUILD_DIRS} + else +@@ -95,10 +87,6 @@ include $(EST)/config/rules/cvs.mak + + include $(EST)/config/rules/c.mak + +-ifdef NEED_JAVA +-include $(EST)/config/rules/java.mak +-endif +- + include $(EST)/config/rules/config_errors.mak + + # keep track of the places we put templates. Used for compiling things +diff --git speech_tools.orig/config/rules/compile_options.mak speech_tools/config/rules/compile_options.mak +index dfe53b9..5ace28f 100644 +--- speech_tools.orig/config/rules/compile_options.mak ++++ speech_tools/config/rules/compile_options.mak +@@ -113,9 +113,6 @@ ifneq ($(DEBUG),0) + ifneq ($(OPTIMISE),4) + CFLAGS += $(DEBUG_CCFLAGS) + CXXFLAGS += $(DEBUG_CXXFLAGS) +- JAVAFLAGS += $(DEBUG_JAVAFLAGS) +- JAVAC := $(DEBUG_JAVAC) +- JAVAH := $(DEBUG_JAVAH) + LINKFLAGS += $(DEBUG_LINKFLAGS) + endif + endif +@@ -132,7 +129,6 @@ endif + ifneq ($(OPTIMISE),0) + CFLAGS += $(OPTIMISE_CCFLAGS) + CXXFLAGS += $(OPTIMISE_CXXFLAGS) +- JAVAFLAGS += $(OPTIMISE_JAVAFLAGS) + LINKFLAGS += $(OPTIMISE_LINKFLAGS) + endif + +@@ -149,12 +145,10 @@ endif + ifneq ($(WARN),0) + CFLAGS += $(WARN_CCFLAGS) + CXXFLAGS += $(WARN_CXXFLAGS) +- JAVAFLAGS += $(WARN_JAVAFLAGS) + LINKFLAGS += $(WARN_LINKFLAGS) + else + CFLAGS += $(NOWARN_CCFLAGS) + CXXFLAGS += $(NOWARN_CXXFLAGS) +- JAVAFLAGS += $(NOWARN_JAVAFLAGS) + LINKFLAGS += $(NOWARN_LINKFLAGS) + endif + +@@ -162,7 +156,6 @@ endif + ifneq ($(VERBOSE),0) + CFLAGS += $(VERBOSE_CCFLAGS) + CXXFLAGS += $(VERBOSE_CXXFLAGS) +- JAVAFLAGS += $(VERBOSE_JAVAFLAGS) + LINKFLAGS += $(VERBOSE_LINKFLAGS) + endif + +diff --git speech_tools.orig/config/rules/config_errors.mak speech_tools/config/rules/config_errors.mak +index 3b7bd7e..6218dc3 100644 +--- speech_tools.orig/config/rules/config_errors.mak ++++ speech_tools/config/rules/config_errors.mak +@@ -39,14 +39,4 @@ + ## ## + ########################################################################### + +-ifdef NEED_JAVA +-ifndef INCLUDE_JAVA +-.config_error:: FORCE +- @echo "+------------------------------------------------------" +- @echo "| This system requires java support in the speech tools" +- @echo "+------------------------------------------------------" +- @exit 1 +-endif +-endif +- + .config_error:: FORCE +diff --git speech_tools.orig/config/rules/defaults.mak speech_tools/config/rules/defaults.mak +index aca1573..27ec08a 100644 +--- speech_tools.orig/config/rules/defaults.mak ++++ speech_tools/config/rules/defaults.mak +@@ -153,12 +153,6 @@ ifndef NON_PROJECT_LIBS + NON_PROJECT_LIBS = $(CONFIG_LIBS) $(LOCAL_LIBS) $(REQUIRED_LIBS) \ + $(SYSTEM_LD_LIBRARY_PATH:%=-L%) \ + $(MODULE_LIBS) $(MODULE_EXTRA_LIBS) $(DEBUG_LIBS) $(OS_LIBS) $(MATH_LIBRARY) $(COMPILERLIBS) +- +-# reduced list for linking with java code. +- +- JAVA_PROJECT_LIBS = $(CONFIG_LIBS) $(LOCAL_LIBS) $(REQUIRED_LIBS) \ +- $(SYSTEM_LD_LIBRARY_PATH:%=-L%) \ +- $(MODULE_LIBS) $(DEBUG_LIBS) $(OS_LIBS) $(MATH_LIBRARY) $(COMPILERLIBS) + endif + + ## Default C Compilation +diff --git speech_tools.orig/config/rules/library.mak speech_tools/config/rules/library.mak +index 0181988..f93d019 100644 +--- speech_tools.orig/config/rules/library.mak ++++ speech_tools/config/rules/library.mak +@@ -107,7 +107,6 @@ lib%.so : lib%.a + @if [ ! -d shared_space ] ; then mkdir shared_space ; else $(RM) -f shared_space/*.o ; fi + @(cd shared_space ; $(AR) x ../$< ) + @echo Link Shared Library $* +- if [ -n "$(PROJECT_LIBRARY_NEEDS_SYSLIBS_$*)" ] ; then libs='$(JAVA_PROJECT_LIBS)' ; fi ;\ + $(subst XXX,$@.$(PROJECT_LIBRARY_VERSION_$*),$(MAKE_SHARED_LIB)) shared_space/*.o $(PROJECT_LIBRARY_USES_$*:%=-L. -l%) $$libs + @$(RM) -f shared_space/*.o $@ + @ln -s $@.$(PROJECT_LIBRARY_VERSION_$*) $@ +diff --git speech_tools.orig/config/rules/make_depend.mak speech_tools/config/rules/make_depend.mak +index 26589ec..4d01b47 100644 +--- speech_tools.orig/config/rules/make_depend.mak ++++ speech_tools/config/rules/make_depend.mak +@@ -39,7 +39,7 @@ + ########################################################################### + + ifndef ALL_DEPEND +- ALL_DEPEND = $(SRCS) $(CPPSRCS) $(CSRCS) $(JAVA_CLASSES:%=%.java) ++ ALL_DEPEND = $(SRCS) $(CPPSRCS) $(CSRCS) + endif + + $(DEPEND): $(ALL_DEPEND) +@@ -68,7 +68,6 @@ ifneq ($(ALL_DEPEND),) + case "$$ext" in \ + c) $(MAKE_DEPEND_C) $(DEPEND_FLAGS) "$$i";;\ + cc) $(MAKE_DEPEND_CXX) $(DEPEND_FLAGS) "$$i";;\ +- java) echo "$$basename.class : $$basename.java";;\ + *) echo "# Can't make depend for extension $$ext";;\ + esac ;\ + }|\ +diff --git speech_tools.orig/config/rules/script_process.awk speech_tools/config/rules/script_process.awk +index d8976f3..67d4eb4 100644 +--- speech_tools.orig/config/rules/script_process.awk ++++ speech_tools/config/rules/script_process.awk +@@ -44,26 +44,6 @@ + sub(/__PERL__/, perl); + } + +-/__CLASSPATH__/ { +- sub(/__CLASSPATH__/, classpath); +-} +- +-/__JAVA__/ { +- sub(/__JAVA__/, java); +-} +- +-/__JAVAC__/ { +- sub(/__JAVAC__/, javac); +-} +- +-/__JAVA_VERSION__/ { +- sub(/__JAVA_VERSION__/, java_version); +-} +- +-/__JAVA_HOME__/ { +- sub(/__JAVA_HOME__/, javahome); +-} +- + /__LDPATH__/ { + sub(/__LDPATH__/, ldpath); + } +diff --git speech_tools.orig/config/rules/targets.mak speech_tools/config/rules/targets.mak +index f052401..dcce8e2 100644 +--- speech_tools.orig/config/rules/targets.mak ++++ speech_tools/config/rules/targets.mak +@@ -66,7 +66,7 @@ ${SUBDIRECTORIES} dummy_dir_name: FORCE + ## Clean up junk + + clean: +- $(RM) -fr $(OBJS) $(JAVA_CLASSES_CLASS) $(ALL_EXECS) $(ALL_EXECS:%=%.mak) $(ALL_LIBS) $(LOCAL_CLEAN) make.depend .buildlib* *~ ++ $(RM) -fr $(OBJS) $(ALL_EXECS) $(ALL_EXECS:%=%.mak) $(ALL_LIBS) $(LOCAL_CLEAN) make.depend .buildlib* *~ + ifdef ALL_DIRS + @ for i in $(ALL_DIRS) ; \ + do \ +diff --git speech_tools.orig/config/rules/top_level.mak speech_tools/config/rules/top_level.mak +index 9aa3f12..a7f1028 100644 +--- speech_tools.orig/config/rules/top_level.mak ++++ speech_tools/config/rules/top_level.mak +@@ -50,13 +50,6 @@ real-info: + fi ;\ + echo 'SYSTEM_TYPE:=:$(SYSTEM_TYPE)' ;\ + echo 'COMPILER:=:$(COMPILER_DESC) '`$(COMPILER_VERSION_COMMAND)` ;\ +- if [ '$(JAVA_COMPILER)' != none ] ;\ +- then \ +- echo 'JAVA_COMPILER:=:$(JAVA_COMPILER_DESC) '`$(JAVA_COMPILER_VERSION_COMMAND)` ;\ +- echo 'JAVA_HOME:=:$(JAVA_HOME)' ;\ +- echo 'JMF_HOME:=:$(JMF_HOME)' ;\ +- echo 'JSAPI_HOME:=:$(JSAPI_HOME)' ;\ +- fi ;\ + echo 'CONFIGURATION:=:$(CONFIGURATION)' ;\ + if [ -n '$(LOCAL_REPOSITORY)' ] ;\ + then \ +@@ -75,10 +68,6 @@ real-info: + echo 'TEMPLATES:=:$(TEMPLATES)' ;\ + echo 'DEFINES:=:$(DEFINES)' ;\ + echo 'LIBS:=:$(LIBS)' ;\ +- if [ '$(JAVA_COMPILER)' != none ] ;\ +- then \ +- echo 'JAVA_CLASSPATH:=:$(JAVA_CLASSPATH)' ;\ +- fi ;\ + echo '' ;\ + echo '---------------------------------------------------------------' ;\ + } | $(KV_COMMAND) FS=':=:' sep=' = ' ind=22 +diff --git speech_tools.orig/config/systems/Linux.mak speech_tools/config/systems/Linux.mak +index 923c9a7..7b7cb51 100644 +--- speech_tools.orig/config/systems/Linux.mak ++++ speech_tools/config/systems/Linux.mak +@@ -40,11 +40,6 @@ + + include $(EST)/config/systems/default.mak + +-DEFAULT_JAVA_HOME=/usr/lib/jdk-1.1.6 +-JAVA=/usr/bin/java +-JAVAC=/usr/bin/javac +-JAVAH=/usr/bin/javah +- + TCL_LIBRARY = -ltcl + OS_LIBS = -ldl + +diff --git speech_tools.orig/config/systems/default.mak speech_tools/config/systems/default.mak +index 50477be..24d6dea 100644 +--- speech_tools.orig/config/systems/default.mak ++++ speech_tools/config/systems/default.mak +@@ -140,6 +140,3 @@ DOCXX_ARGS = -a -f -B banner.inc -M sane -D 'SYSTEM "$(EST_HOME)/doc/sane.dtd"' + + + COMPILER_VERSION_COMMAND=true +-JAVA_COMPILER_VERSION_COMMAND=true +- +-JAVA_SYSTEM_INCLUDES = -I$(JAVA_HOME)/include/genunix +diff --git speech_tools.orig/lib/Makefile speech_tools/lib/Makefile +index 0ff24b0..bfece4f 100644 +--- speech_tools.orig/lib/Makefile ++++ speech_tools/lib/Makefile +@@ -77,11 +77,7 @@ $(SKELETONS:%-in=%) : %: %-in + defines='$(DEFINES)' \ + libs='$(LIBS_ABS)' \ + est='$(EST_HOME)' \ +- classpath='$(SYSTEM_JAVA_CLASSPATH)' \ + perl='$(PERL)' \ +- javahome='$(JAVA_HOME)' \ +- java='$(JAVA)' \ +- javac='$(JAVAC)' \ + ldpath='$(SYSTEM_LD_LIBRARY_PATH)' \ + cccommand='$(CC_COMMAND_ABS)' \ + cxxcommand='$(CXX_COMMAND_ABS)' \ diff --git a/fetchmail/PKGBUILD b/fetchmail/PKGBUILD new file mode 100644 index 0000000..4ef61a8 --- /dev/null +++ b/fetchmail/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=fetchmail +pkgver=6.4.16 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc='A remote-mail retrieval utility' +arch=('i686' 'x86_64') +url='https://www.fetchmail.info' +license=('custom:GPL-2+OpenSSL-Linking-Exception') +depends=('libressl') +makedepends=('quilt') +backup=('etc/conf.d/fetchmail') +options=('!makeflags') +install=fetchmail.install +source=("https://deb.debian.org/debian/pool/main/f/fetchmail/fetchmail_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/f/fetchmail/fetchmail_${_debver}-${_debrel}+deb11u1.debian.tar.xz" + "$pkgname.initd" + "$pkgname.confd") +sha512sums=('5e0d87739d73991c56111222cd84d6e16913b205c4d427feeb9b03d7f330442851f48769e168883ad75afc0a9db9b5267d1ad30e2ca0efe14263befd625dccf0' + '7079cd3782a01490ec8f8aca2ccfb380c4a36c429b044eae847eba89e00e260e139e10e061cadbbff26691813bec31b22fdb26026d1b2cdf9d1f0615ae7ddccd' + '571d7b42414256fab4fbf14ca89c9bc4d3a76ecfe476e8db802ffad7cee39b6969fe834ee9d4b9aae34a538bda089392eab6f841bddd09bff440c0f276b01de7' + '4dacd025d76a22c991c6dabe7c3d5b33b49348e83534d4de300a1b0d55a62dc0195e19065cb0a3a5da72f50700e7b92d4579be795a899f680e2a8be7dd508532') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --with-ssl=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + rm "${pkgdir}/usr/bin/fetchmailconf" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + + install -Dm644 "${srcdir}/$pkgname.confd" "${pkgdir}/etc/conf.d/$pkgname" + install -Dm755 "${srcdir}/$pkgname.initd" "${pkgdir}/etc/init.d/$pkgname" + install -d -o 90 -g nobody "${pkgdir}/var/lib/$pkgname" +} diff --git a/fetchmail/fetchmail.confd b/fetchmail/fetchmail.confd new file mode 100644 index 0000000..67feed2 --- /dev/null +++ b/fetchmail/fetchmail.confd @@ -0,0 +1,9 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# Polling frequency in seconds +# (fetchmail will daemonize and check for new mail at this interval) +polling_period="60" + +# Directory where the pid file is kept +pid_dir="/var/run/fetchmail" diff --git a/fetchmail/fetchmail.initd b/fetchmail/fetchmail.initd new file mode 100644 index 0000000..8d2543d --- /dev/null +++ b/fetchmail/fetchmail.initd @@ -0,0 +1,43 @@ +#!/sbin/openrc-run + +piddir=${pid_dir:-/var/run/fetchmail} +pid_file=${piddir}/${RC_SVCNAME}.pid +rcfile=/etc/${RC_SVCNAME}rc + +depend() { + need net + use mta +} + +checkconfig() { + if [ ! -f ${rcfile} ]; then + eerror "Configuration file ${rcfile} not found" + return 1 + fi + local fetchmail_instance + fetchmail_instance=${RC_SVCNAME##*.} + if [ -n "${fetchmail_instance}" -a "${RC_SVCNAME}" != "fetchmail" ]; then + fidfile=/var/lib/fetchmail/.fetchids.${RC_SVCNAME} + else + fidfile=/var/lib/fetchmail/.fetchids + fi + if [ ! -d ${piddir} ]; then + checkpath -q -d -o fetchmail:fetchmail -m 0755 ${piddir} || return 1 + fi +} + +start() { + checkconfig || return 1 + ebegin "Starting ${RC_SVCNAME}" + start-stop-daemon --start --pidfile ${pid_file} \ + --user fetchmail --exec /usr/bin/fetchmail \ + -- -d ${polling_period} -f ${rcfile} \ + --pidfile ${pid_file} -i ${fidfile} + eend ${?} +} + +stop() { + ebegin "Stopping ${RC_SVCNAME}" + start-stop-daemon --stop --quiet --pidfile ${pid_file} + eend ${?} +} diff --git a/fetchmail/fetchmail.install b/fetchmail/fetchmail.install new file mode 100644 index 0000000..df86d9a --- /dev/null +++ b/fetchmail/fetchmail.install @@ -0,0 +1,43 @@ +post_install() { + # /etc/fetchmail must be owned by fetchmail for service to work. + echo "If you run fetchmail as a service and not a cron job" + echo "then 'chown fetchmail /etc/fetchmailrc'" + + if ! getent group fetchmail &>/dev/null; then + groupadd -r fetchmail >/dev/null + fi + if ! getent passwd fetchmail &>/dev/null; then + useradd -r -u 90 -g fetchmail -d /dev/null -s /bin/nologin -c "Fetchmail" fetchmail >/dev/null + fi + fetchmail_shell=$(getent passwd fetchmail | cut -d: -f7) + if [ "$fetchmail_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin fetchmail &>/dev/null + fi +} + +post_upgrade() { + if ! getent group fetchmail &>/dev/null; then + groupadd -r fetchmail >/dev/null + fi + if ! getent passwd fetchmail &>/dev/null; then + useradd -r -u 90 -g fetchmail -d /dev/null -s /bin/nologin -c "Fetchmail" fetchmail >/dev/null + fi + + if [ "$(vercmp $2 6.3.19-3)" -lt 0 ] ; then + usermod -d '/var/lib/fetchmail' -s /bin/nologin fetchmail + fi + + fetchmail_shell=$(getent passwd fetchmail | cut -d: -f7) + if [ "$fetchmail_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin fetchmail &>/dev/null + fi +} + +pre_remove() { + if getent passwd fetchmail &>/dev/null; then + userdel fetchmail >/dev/null + fi + if getent group fetchmail &>/dev/null; then + groupdel fetchmail >/dev/null + fi +} diff --git a/ffcall/PKGBUILD b/ffcall/PKGBUILD new file mode 100644 index 0000000..25c5e21 --- /dev/null +++ b/ffcall/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=ffcall +pkgver=2.2 +pkgrel=1 +pkgdesc='C library for implementing foreign function calls in embedded interpreters' +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/libffcall/' +license=('GPL-2') +options=('!makeflags' 'staticlibs') +source=("https://ftp.gnu.org/gnu/libffcall/libffcall-${pkgver}.tar.gz") +sha512sums=('b9d3ca4c67ab92915a8183d850153e585dcb58ceb2199a104426a7aae363d37017b1226440acd18a2db0cc207e044f71e932857189964261e8eaa6de5cef1731') + +build() { + cd "lib${pkgname}-${pkgver}" + ./configure --prefix=/usr --mandir=/usr/share/man --with-pic + make +} + +package() { + cd "lib${pkgname}-${pkgver}" + install -d "${pkgdir}"/usr/share/{man,doc/ffcall} + make DESTDIR="${pkgdir}" htmldir=/usr/share/doc/ffcall install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ffmpeg/0001-ffbuild-libversion.sh-add-shebang.patch b/ffmpeg/0001-ffbuild-libversion.sh-add-shebang.patch new file mode 100644 index 0000000..1df1691 --- /dev/null +++ b/ffmpeg/0001-ffbuild-libversion.sh-add-shebang.patch @@ -0,0 +1,24 @@ +From 3eb43e2e9df80baad20722b3698e6995a546853a Mon Sep 17 00:00:00 2001 +From: Carlo Landmeter +Date: Tue, 29 Jun 2021 11:56:32 +0000 +Subject: [PATCH] ffbuild/libversion.sh: add shebang + +when using something like qemu-user where argv[0] is qemu the script +will not be exexuted by the shell. +--- + ffbuild/libversion.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/ffbuild/libversion.sh b/ffbuild/libversion.sh +index 990ce9f640..30046b1d25 100755 +--- a/ffbuild/libversion.sh ++++ b/ffbuild/libversion.sh +@@ -1,3 +1,5 @@ ++#!/bin/sh ++ + toupper(){ + echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ + } +-- +2.32.0 + diff --git a/ffmpeg/0001-libavutil-clean-up-unused-FF_SYMVER-macro.patch b/ffmpeg/0001-libavutil-clean-up-unused-FF_SYMVER-macro.patch new file mode 100644 index 0000000..9cc6fdf --- /dev/null +++ b/ffmpeg/0001-libavutil-clean-up-unused-FF_SYMVER-macro.patch @@ -0,0 +1,55 @@ +From ab11be0becb90542f10d5713659b559842c53af2 Mon Sep 17 00:00:00 2001 +From: Natanael Copa +Date: Tue, 29 Mar 2016 15:15:17 +0200 +Subject: [PATCH] libavutil: clean up unused FF_SYMVER macro + +There is nothing using it since commit d63443b9 (lavc: drop the +av_fast_{re,m}alloc compatibility wrappers). + +Signed-off-by: Natanael Copa +--- + libavutil/internal.h | 28 ---------------------------- + 1 file changed, 28 deletions(-) + +diff --git a/libavutil/internal.h b/libavutil/internal.h +index 61784b5..69d63d5 100644 +--- a/libavutil/internal.h ++++ b/libavutil/internal.h +@@ -187,34 +187,6 @@ + #endif + + /** +- * Define a function with only the non-default version specified. +- * +- * On systems with ELF shared libraries, all symbols exported from +- * FFmpeg libraries are tagged with the name and major version of the +- * library to which they belong. If a function is moved from one +- * library to another, a wrapper must be retained in the original +- * location to preserve binary compatibility. +- * +- * Functions defined with this macro will never be used to resolve +- * symbols by the build-time linker. +- * +- * @param type return type of function +- * @param name name of function +- * @param args argument list of function +- * @param ver version tag to assign function +- */ +-#if HAVE_SYMVER_ASM_LABEL +-# define FF_SYMVER(type, name, args, ver) \ +- type ff_##name args __asm__ (EXTERN_PREFIX #name "@" ver); \ +- type ff_##name args +-#elif HAVE_SYMVER_GNU_ASM +-# define FF_SYMVER(type, name, args, ver) \ +- __asm__ (".symver ff_" #name "," EXTERN_PREFIX #name "@" ver); \ +- type ff_##name args; \ +- type ff_##name args +-#endif +- +-/** + * Return NULL if a threading library has not been enabled. + * Used to disable threading functions in AVCodec definitions + * when not needed. +-- +2.7.4 + diff --git a/ffmpeg/PKGBUILD b/ffmpeg/PKGBUILD new file mode 100644 index 0000000..0d390b2 --- /dev/null +++ b/ffmpeg/PKGBUILD @@ -0,0 +1,112 @@ +# Maintainer: Jesus E. + +pkgname=ffmpeg +pkgver=4.4.5 +pkgrel=5 +pkgdesc="Free and libre software to record, convert and stream audio and video" +arch=('i686' 'x86_64') +url='https://ffmpeg.org/' +license=('GPL-3') +depends=('alsa-lib' 'bzip2' 'fontconfig' 'fribidi' 'gmp' 'gnutls' 'jack' 'lame' 'libass' + 'libdrm' 'freetype2' 'libmodplug' 'librsvg-legacy' 'libsoxr' 'libtheora' 'vid.stab' + 'libvorbis' 'libx11' 'x264' 'libxcb' 'libxext' 'libxml2' 'libxv' 'xvidcore' 'zimg' + 'openjpeg2' 'opus' 'sdl2' 'speex' 'v4l-utils' 'xz' 'zlib') +makedepends=('clang' 'libjack' 'ladspa' 'nasm') +optdepends=('ladspa: LADSPA filters') +source=("https://ffmpeg.org/releases/ffmpeg-${pkgver}.tar.xz"{,.asc} + "0001-libavutil-clean-up-unused-FF_SYMVER-macro.patch" + "0001-ffbuild-libversion.sh-add-shebang.patch") +validpgpkeys=('FCF986EA15E6E293A5644F10B4322F04D67658D8') # FFmpeg release signing key +sha512sums=('70df4e63ef507a7ec76da34438142499139769728fd5130d9cf48d56c110ec82c3d6a7e6d1622da03c70167fa861d901d016bbe52c21d2b284b8a0d9f30811dc' + 'SKIP' + '1047a23eda51b576ac200d5106a1cd318d1d5291643b3a69e025c0a7b6f3dbc9f6eb0e1e6faa231b7e38c8dd4e49a54f7431f87a93664da35825cc2e9e8aedf4' + '38443b570cf32b2ba8ffa9ecc5480425c7da9f93f9773fbb3f9ec5f603b369b6225f4329a1b1f34d0ef30b2c9730f25ff9cff31315ed0a89a600df8e53bd54bf') + +prepare() { + cd ffmpeg-${pkgver} + + patch -Np1 -i "${srcdir}"/0001-libavutil-clean-up-unused-FF_SYMVER-macro.patch + patch -Np1 -i "${srcdir}"/0001-ffbuild-libversion.sh-add-shebang.patch +} + +build() { + cd ffmpeg-${pkgver} + + if [[ $CARCH = i686 ]]; then + EXTRAOPTS="--disable-lto --enable-pic --disable-asm" + else + EXTRAOPTS="--enable-lto --enable-asm" + fi + + ./configure \ + --prefix=/usr \ + --disable-debug \ + --disable-static \ + --disable-stripping \ + --disable-librtmp \ + --disable-amf \ + --disable-avisynth \ + --disable-cuda-llvm \ + --enable-fontconfig \ + --enable-gmp \ + --enable-gnutls \ + --enable-gpl \ + --enable-ladspa \ + --disable-libaom \ + --enable-libass \ + --disable-libbluray \ + --disable-libdav1d \ + --enable-libdrm \ + --enable-libfreetype \ + --enable-libfribidi \ + --disable-libgsm \ + --disable-libiec61883 \ + --enable-libjack \ + --disable-libmfx \ + --enable-libmodplug \ + --enable-libmp3lame \ + --disable-libopencore_amrnb \ + --disable-libopencore_amrwb \ + --enable-libopenjpeg \ + --enable-libopus \ + --disable-libpulse \ + --disable-librav1e \ + --enable-librsvg \ + --enable-libsoxr \ + --enable-libspeex \ + --disable-libsrt \ + --disable-libssh \ + --disable-libsvtav1 \ + --enable-libtheora \ + --enable-libv4l2 \ + --enable-libvidstab \ + --disable-libvmaf \ + --enable-libvorbis \ + --disable-libvpx \ + --disable-libwebp \ + --enable-libx264 \ + --disable-libx265 \ + --enable-libxcb \ + --enable-libxml2 \ + --enable-libxvid \ + --enable-libzimg \ + --disable-nvdec \ + --disable-nvenc \ + --disable-vaapi \ + --disable-vdpau \ + --enable-shared \ + --enable-version3 \ + $EXTRAOPTS \ + + make + make tools/qt-faststart + make doc/ff{mpeg,play}.1 +} + +package() { + cd ffmpeg-${pkgver} + + make DESTDIR="${pkgdir}" install install-man + install -Dm 755 tools/qt-faststart "${pkgdir}"/usr/bin/ + install -Dm 644 COPYING.GPLv3 "${pkgdir}"/usr/share/licenses/${pkgname}/COPYING.GPLv3 +} diff --git a/ffmpegthumbnailer/PKGBUILD b/ffmpegthumbnailer/PKGBUILD new file mode 100644 index 0000000..bd9dabc --- /dev/null +++ b/ffmpegthumbnailer/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=ffmpegthumbnailer +pkgver=2.1.1 +_debver=$pkgver +_debrel=0.2 +pkgrel=3 +pkgdesc="Lightweight video thumbnailer that can be used by file managers and other applications" +url='https://github.com/dirkvdb/ffmpegthumbnailer' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('ffmpeg' 'libjpeg-turbo' 'libpng') +makedepends=('cmake' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/dirkvdb/$pkgname/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/f/ffmpegthumbnailer/ffmpegthumbnailer_${_debver}-${_debrel}.debian.tar.xz" + "ffmpegthumbnailer.thumbnailer") +sha512sums=('9c16663884ae068776992ad62e76be443b4914b34870b0cea256c12b15f56f7c26b1e9a99c1ab91b207d18c7c17bb02fbdccba8ed99e843f02fae7ecdd4ac9bd' + '79ffb9c2d2140eee6d1c1f2818d3d5851f57260781188fc0b763ef4f3bcfc7478b84f9fc4442e0767cefb97ea306946afaad060e00a60be1fc49c82366b3d112' + 'a5087a618fc583923b082bcf412b50cf2ea006e5decf0f65831c34acfb5ce5e0b44deb41ad4ae6d50c2d042776a1c0577120b70bf7b950b563a503d287955305') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + cmake -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DENABLE_GIO=OFF \ + -DENABLE_THUMBNAILER=ON + make -C build +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make -C build DESTDIR="${pkgdir}" install + + # using modified version for more supported formats + rm "${pkgdir}"/usr/share/thumbnailers/ffmpegthumbnailer.thumbnailer + cp "${srcdir}"/ffmpegthumbnailer.thumbnailer "${pkgdir}"/usr/share/thumbnailers + + # license + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ffmpegthumbnailer/ffmpegthumbnailer.thumbnailer b/ffmpegthumbnailer/ffmpegthumbnailer.thumbnailer new file mode 100644 index 0000000..bb12a09 --- /dev/null +++ b/ffmpegthumbnailer/ffmpegthumbnailer.thumbnailer @@ -0,0 +1,4 @@ +[Thumbnailer Entry] +TryExec=ffmpegthumbnailer +Exec=ffmpegthumbnailer -i %i -o %o -s %s -f +MimeType=video/jpeg;video/mp4;video/mpeg;video/quicktime;video/x-ms-asf;video/x-ms-wm;video/x-ms-wmv;video/x-msvideo;video/x-flv;video/x-matroska;video/webm;video/mp2t;video/mp4v-es;video/msvideo;video/ogg;video/vivo;video/vnd.divx;video/vnd.mpegurl;video/vnd.rn-realvideo;video/vnd.vivo;video/webm;video/x-anim;video/x-avi;video/x-flc;video/x-fli;video/x-flic;video/x-m4v;video/x-mpeg;video/x-mpeg2;video/x-nsv;video/x-ogm+ogg;video/x-theora+ogg;image/webp;audio/mpeg;audio/flac;audio/x-vorbis+ogg;audio/mp4;audio/x-opus+ogg; diff --git a/fftw/PKGBUILD b/fftw/PKGBUILD new file mode 100644 index 0000000..42909ac --- /dev/null +++ b/fftw/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Jesus E. + +pkgname=fftw +pkgver=3.3.9 +pkgrel=1 +pkgdesc="A library for computing the discrete Fourier transform (DFT)" +arch=('i686' 'x86_64') +license=('GPL-2') +url="http://www.fftw.org/" +depends=('bash' 'gcc-libs' 'glibc' 'openmpi') +makedepends=('gcc-fortran') +source=("http://www.fftw.org/${pkgname}-${pkgver}.tar.gz") +sha512sums=('52ebc2a33063a41fd478f6ea2acbf3b511867f736591d273dd57f9dfca5d3e0b0c73157921b3a36f1a7cfd741a8a6bde0fd80de578040ae730ea168b5ba466cf') + +prepare() { + cp -av "${pkgname}-${pkgver}" "${pkgname}-${pkgver}-double" + cp -av "${pkgname}-${pkgver}" "${pkgname}-${pkgver}-long-double" + cp -av "${pkgname}-${pkgver}" "${pkgname}-${pkgver}-quad" +} + +build() { + export F77='gfortran' + # use upstream default CFLAGS while keeping our -march/-mtune + CFLAGS+=" -O3 -fomit-frame-pointer -malign-double -fstrict-aliasing -ffast-math" + # default configure call + _default_configure="./configure --prefix=/usr --enable-shared --enable-threads --enable-mpi --enable-openmp" + + # configure single precision + ( + cd "${pkgname}-${pkgver}" + ${_default_configure} --enable-sse --enable-avx --enable-single + # NOTE: fix overlinking + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + ) + + # configure double precision + ( + cd "${pkgname}-${pkgver}-double" + ${_default_configure} --enable-sse2 --enable-avx + # NOTE: fix overlinking + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + ) + + # configure long-double precission + ( + cd "${pkgname}-${pkgver}-long-double" + ${_default_configure} --enable-long-double + # NOTE: fix overlinking + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + ) + + # configure quad precision + ( + cd "${pkgname}-${pkgver}-quad" + ${_default_configure} --disable-mpi --enable-quad-precision + # NOTE: fix overlinking + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + ) + + make -C "${pkgname}-${pkgver}" + make -C "${pkgname}-${pkgver}-double" + make -C "${pkgname}-${pkgver}-long-double" + make -C "${pkgname}-${pkgver}-quad" +} + +package() { + make DESTDIR="${pkgdir}" install -C "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install -C "${pkgname}-${pkgver}-double" + make DESTDIR="${pkgdir}" install -C "${pkgname}-${pkgver}-long-double" + make DESTDIR="${pkgdir}" install -C "${pkgname}-${pkgver}-quad" + + cd "${pkgname}-${pkgver}" + install -vDm 644 {AUTHORS,ChangeLog,NEWS,README,TODO} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/fig2dev/LICENSE b/fig2dev/LICENSE new file mode 100644 index 0000000..b6e43bc --- /dev/null +++ b/fig2dev/LICENSE @@ -0,0 +1,23 @@ +/* + * TransFig: Facility for Translating Fig code + * Copyright (c) 1991 by Micah Beck + * Parts Copyright (c) 1985-1988 by Supoj Sutanthavibul + * + * Any party obtaining a copy of these files is granted, free of charge, a + * full and unrestricted irrevocable, world-wide, paid up, royalty-free, + * nonexclusive right and license to deal in this software and + * documentation files (the "Software"), including without limitation the + * rights to use, copy, modify, merge, publish and/or distribute copies of + * the Software, and to permit persons who receive copies from any such + * party to do so, with the only requirement being that this copyright + * notice remain intact. + * + */ + +THE LAWRENCE BERKELEY NATIONAL LABORATORY DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/fig2dev/PKGBUILD b/fig2dev/PKGBUILD new file mode 100644 index 0000000..829200e --- /dev/null +++ b/fig2dev/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. +# Controbutor (Arch): Baptiste Jonglez + +pkgname=fig2dev +pkgver=3.2.8 +_upstreamver=3.2.8a +_debver=3.2.8 +_debrel=3 +pkgrel=1 +pkgdesc='Format conversion utility that can be used with xfig' +arch=('i686' 'x86_64') +url="http://mcj.sourceforge.net/" +license=('Expat') +depends=('libpng' 'libxpm' 'bc' 'netpbm' 'ghostscript') +makedepends=('quilt') +conflicts=('transfig') +replaces=('transfig') +provides=('transfig') +source=("https://downloads.sourceforge.net/mcj/${pkgname}-${_upstreamver}.tar.xz" + "https://deb.debian.org/debian/pool/main/f/fig2dev/fig2dev_${_debver}-${_debrel}.debian.tar.xz" + "LICENSE") +sha512sums=('b205a820743d38405d1348ccb926650e8279a3adad8b5e3ec262cbbfa570f9ff39ba366138256a6c494e5a6df66ca6ae1e59ac9c4ca37b354da6226c5ae700e8' + '0c62c4dffd4abb04140f9d051a15f1cab72d95424224b9840a2420faae7d78fe5d5ffd7a812e9b89ab8089f905831c1c076b3f44a37a3e0ca7009089e060595e' + 'f9f359f83dd89f4877b4bdb846903398779a71682f3488f9383005f85dc57bde901ac5d7412a414eb26d4cf991ab2e6a376c388160ad0368e27f08a92e724142') + +prepare() { + cd "${pkgname}-${_upstreamver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${_upstreamver}" + ./configure --prefix=/usr --enable-transfig + make FIG2DEV_LIBDIR=/usr/share/fig2dev XFIGLIBDIR=/usr/share/xfig +} + +package() { + cd "${pkgname}-${_upstreamver}" + make DESTDIR="${pkgdir}" XFIGLIBDIR=/usr/share/xfig \ + FIG2DEV_LIBDIR=/usr/share/fig2dev MANPATH=/usr/share/man \ + install + install -Dm644 ../LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/filezilla/PKGBUILD b/filezilla/PKGBUILD new file mode 100644 index 0000000..86de6ef --- /dev/null +++ b/filezilla/PKGBUILD @@ -0,0 +1,66 @@ +# Maintainer: Jesus E. + +pkgname=filezilla +pkgver=3.52.2 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="Fast and reliable FTP, FTPS and SFTP client" +url='https://filezilla-project.org/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('xdg-utils' 'wxgtk3' 'libidn' 'hicolor-icon-theme' 'sqlite' 'gnutls' 'libfilezilla') +makedepends=('quilt') +source=(https://download.filezilla-project.org/client/FileZilla_${pkgver}_src.tar.bz2 + https://deb.debian.org/debian/pool/main/f/filezilla/filezilla_$_debver-$_debrel.debian.tar.xz) +sha512sums=('74abb78eaece5ffed044a88bdbbff7be0470e47868b806925ea5666d741370dff910d55849f6ad91fb57f8c1a33c461dc10c9f093d75e7a96ff0d909f3a8f131' + '6372820728df7e2edc53b84eefa896c6e89797d08b8ecdde3fa3783707f4d781bb5059d337e28573889754307f42b1dce77d73d7b521158c2f1b515d150c5a7d') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # removing problematic locales, incompatible with concurrent gettext-tiny + rm ./locales/he_IL.po + rm ./locales/ro_RO.po + rm ./locales/ru.po + rm ./locales/sk_SK.po + rm ./locales/sl_SI.po + rm ./locales/ta.po + rm ./locales/th_TH.po + rm ./locales/tr.po + rm ./locales/uk_UA.po + rm ./locales/vi_VN.po + rm ./locales/zh_CN.po + rm ./locales/zh_TW.po +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --disable-manualupdatecheck \ + --disable-autoupdatecheck \ + --with-pugixml=builtin \ + --with-dbus=no \ + --with-wx-config=/usr/bin/wx-config-gtk3 + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/flac/PKGBUILD b/flac/PKGBUILD new file mode 100644 index 0000000..0200ee4 --- /dev/null +++ b/flac/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgbase=flac +pkgname=('flac' 'flac-doc') +pkgver=1.3.3 +_debver=1.3.3 +_debrel=2 +pkgrel=1 +pkgdesc='Free Lossless Audio Codec' +url='https://xiph.org/flac/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('gcc-libs' 'libogg') +makedepends=('nasm' 'doxygen' 'quilt') +source=(https://downloads.xiph.org/releases/flac/${pkgbase}-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/f/flac/flac_$_debver-$_debrel.debian.tar.xz) +sha512sums=('d6417e14fab0c41b2df369e5e39ce62a5f588e491af4d465b0162f74e171e5549b2f061867f344bfbf8aaccd246bf5f2acd697e532a2c7901c920c69429b1a28' + '1e0bcbed23a121db60236bafaeeb2aad53d3870d0b8b6120281493976fbbf12a2af37bd419b27c3eae3e5799b6fdd8268a7429bcba535265a72334b023c7e241') + +prepare() { + cd ${pkgbase}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd ${pkgbase}-${pkgver} + ./configure \ + --prefix=/usr \ + --disable-sse + make +} + +check() { + cd ${pkgbase}-${pkgver} + make check +} + +package_flac() { + options=('!docs') + + cd ${pkgbase}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 COPYING.LGPL -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_flac-doc() { + pkgdesc+=' documentation' + depends=('flac') + license=('FDL-1.2') + + cd ${pkgbase}-${pkgver} + make DESTDIR="${pkgdir}" -C doc install + sed -i "s|${srcdir}/${pkgbase}-${pkgver}|/usr|" "${pkgdir}/usr/share/doc/${pkgbase}/FLAC.tag" + install -Dm 644 COPYING.FDL -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim: ts=2 sw=2 et: diff --git a/flare-engine/PKGBUILD b/flare-engine/PKGBUILD new file mode 100644 index 0000000..d25ad30 --- /dev/null +++ b/flare-engine/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=flare-engine +pkgver=1.14 +pkgrel=2 +pkgdesc="Free and libre action roleplaying engine" +url='https://www.flarerpg.org/' +license=('GPL-3') +arch=('i686' 'x86_64') +depends=('sdl2_image' 'sdl2_mixer' 'sdl2_ttf' 'hicolor-icon-theme' 'python') +makedepends=('cmake') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/flareteam/flare-engine/archive/v${pkgver}.tar.gz") +sha512sums=('6033eb40b83763e670e1af2333fd8609f796746c51b7b07b7e5f99694954aad7ae7c80f44590bbca5316714cf0581e7326e6e707669e2341a953a8212a46d8d1') + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBINDIR=games \ + -DDATADIR=share/games/flare + make -C build +} + +package() { + make DESTDIR=$pkgdir -C build install + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/flare-game/PKGBUILD b/flare-game/PKGBUILD new file mode 100644 index 0000000..59ab7ca --- /dev/null +++ b/flare-game/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=flare-game +pkgver=1.14 +pkgrel=2 +pkgdesc="Fantasy action-roleplaying-game using the FLARE engine" +url='https://www.flarerpg.org/' +license=('CC-BY-SA-3.0') +arch=('any') +depends=("flare-engine=${pkgver}") +makedepends=('cmake') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/flareteam/flare-game/archive/v${pkgver}.tar.gz") +sha512sums=('5293c8a58d2f898f9ccbc91b3a724f2fc1afa0d4af566b97baf30b17a3fb6252a1d10a943b9b10a947daadf4b8d4f5da5cfa983906df55f23a830307907c9027') + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DDATADIR=share/games/flare + make -C build +} + +package() { + make DESTDIR=$pkgdir -C build install + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/flashrom/PKGBUILD b/flashrom/PKGBUILD new file mode 100644 index 0000000..e509078 --- /dev/null +++ b/flashrom/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=flashrom +pkgver=1.2 +pkgrel=1 +pkgdesc='Utility for reading, writing, erasing and verifying flash ROM chips' +arch=('i686' 'x86_64') +url="https://www.flashrom.org/" +license=('GPL-2') +depends=('libftdi' 'pciutils' 'libusb-compat') +makedepends=('meson') +optdepends=('dmidecode: for SMBIOS/DMI table decoder support') +source=("https://download.flashrom.org/releases/${pkgname}-v${pkgver}.tar.bz2"{,.asc}) +sha512sums=('8e01395a54d0d1344bc55e7e4975f43bb8e59ebe83fb5f2766d14f76756d718b487254ce9a19ef4093aed04fb9d40fff5fe8f709b18c512f6e6fad894f83d7b8' + 'SKIP') +validpgpkeys=(58A4868B25C7CFD662FB0132A3EB95B8D9780F68) # David Hendricks (packaging key) + +build() { + cd ${pkgname}-v${pkgver} + hyperbola-meson ../build + ninja -v -C ../build + # Workaround for meson not installing manpage + make +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install + # Workaround for meson not installing manpage + cd ${pkgname}-v${pkgver} + make PREFIX=temp/ install + cp -r temp/share "${pkgdir}"/usr/ + + # license + install -Dm644 "${srcdir}/${pkgname}-v${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/flightgear/PKGBUILD b/flightgear/PKGBUILD new file mode 100644 index 0000000..12153c0 --- /dev/null +++ b/flightgear/PKGBUILD @@ -0,0 +1,80 @@ +# Maintainer: Jesus E. + +pkgname=flightgear +pkgver=2020.3.6 +_pkgver=${pkgver%.*} +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="A free software, multi-platform flight simulator" +arch=('i686' 'x86_64') +url='https://www.flightgear.org/' +license=('GPL-2' 'LGPL-2' 'Modified-BSD' 'Public-Domain' 'Expat') +provides=('flightgear' 'flightgear-data') +conflicts=('flightgear' 'flightgear-data') +depends=('libxmu' 'libxi' 'zlib' 'openscenegraph' 'libxrandr' 'glu' 'openal' 'speex' 'sqlite' 'glew' + 'qt-svg' 'qt-quickcontrols' 'udns') +makedepends=('boost' 'cmake' 'mesa' 'sharutils' 'simgear' 'qt-tools' 'quilt') +groups=('games') +options=('makeflags') +source=("https://downloads.sourceforge.net/project/flightgear/release-${_pkgver}/${pkgname}-${pkgver}.tar.bz2" + "https://security.debian.org/debian-security/pool/updates/main/f/flightgear/flightgear_${_debver}+dfsg-${_debrel}+deb11u1.debian.tar.xz" + "https://downloads.sourceforge.net/project/flightgear/release-${_pkgver}/FlightGear-${pkgver}-data.tar.bz2") +sha512sums=('b0bfa6e02cf5c2e64aea85fb7433e583141471e15a7dff69dbc12c227835c6e52dcf5b2947a30847c2b291442878eee6265217311e441abb32c5f95bbf7df990' + '1f328485c3103a6683720775a1bde76e1dc5de72cbff1b45e9c3e9e1013166a813f9a04355b75df8cc4c455252c5f47567832bf51ec61fcc584973083281b6d3' + 'd29ff4feb72be167b57b9baae461c810aef537085084bfb0c0ffbb2d1575ced38a951478fa1fd395c219919528af7e050a6c5199c337592cf607da5a3c682017') +noextract=("FlightGear-${pkgver}-data.tar.bz2") + +prepare() { + mkdir -p FlightGear-${pkgver}-data + tar -xf "FlightGear-${pkgver}-data.tar.bz2" --strip 1 \ + -C "FlightGear-${pkgver}-data" + + cd "$srcdir"/flightgear-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/Add_from_nasal_helper.patch || true + + quilt push -av + fi + sed -i 's|Exec=.*|Exec=fgfs --fg-root=/usr/share/games/flightgear/data|' package/org.flightgear.FlightGear.desktop +} + +build() { + cmake \ + -S flightgear-$pkgver \ + -Bbuild \ + -DCMAKE_BUILD_TYPE="Release" \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DCMAKE_INSTALL_BINDIR:PATH=games \ + -DFG_DATA_DIR:PATH=/usr/share/games/flightgear/data \ + -DENABLE_LARCSIM=ON \ + -DENABLE_UIUC_MODEL=ON \ + -DENABLE_QT=ON \ + -DSP_FDMS=ON \ + -DSYSTEM_SPEEX=ON \ + -DENABLE_SWIFT=OFF \ + -DUSE_DBUS=OFF \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + cd "$srcdir"/flightgear-$pkgver + install -Dm644 debian/copyright -t "$pkgdir"/usr/share/licenses/$pkgname + + cd "$srcdir" + mkdir -p "$pkgdir"/usr/share/games/flightgear + mv ./FlightGear-${pkgver}-data "$pkgdir"/usr/share/games/flightgear/data + chown -R root:games "$pkgdir"/usr/share/games/flightgear/data +} diff --git a/fltk/PKGBUILD b/fltk/PKGBUILD new file mode 100644 index 0000000..db10b47 --- /dev/null +++ b/fltk/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=fltk +pkgver=1.3.8 +pkgrel=2 +pkgdesc="Graphical user interface toolkit for X" +arch=('i686' 'x86_64') +license=('LGPL-2' 'custom:FLTK') +url='https://www.fltk.org/' +depends=('alsa-lib' 'hicolor-icon-theme' 'libjpeg-turbo' 'libpng' 'libx11' 'libxcursor' + 'libxfixes' 'libxft' 'libxinerama' 'libxrender' 'mesa-libgl') +makedepends=('cmake' 'doxygen') +options=('staticlibs') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/${pkgname}/${pkgname}/archive/release-${pkgver}.tar.gz") +sha512sums=('197848d3b80a65cca936daf4f0b74609f0fe8332a4cd11af53385fb2aa45ad698b1e239a48732b118cd3cb189bc531711b72fb2eeeb85be887dc6c5a558fa4b3') + +prepare() { + mv -v ${pkgname}-{release-,}${pkgver} +} + +build() { + cmake \ + -S ${pkgname}-${pkgver} \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DFLTK_LIBDIR=/usr/lib \ + -DCMAKE_BUILD_TYPE='None' \ + -DOPTION_CREATE_LINKS=ON \ + -DOPTION_BUILD_SHARED_LIBS=ON \ + -DOPTION_BUILD_HTML_DOCUMENTATION=ON \ + -DOPTION_INSTALL_HTML_DOCUMENTATION=ON \ + -Wno-dev + + make -C build + make -C build/documentation html +} + +package_fltk() { + make DESTDIR=${pkgdir} install -C build + make DESTDIR=${pkgdir} install -C build/documentation html + install -Dm644 ${srcdir}/${pkgname}-${pkgver}/COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} + rm -frv ${pkgdir}/usr/share/man/man6 +} diff --git a/fluidsynth/PKGBUILD b/fluidsynth/PKGBUILD new file mode 100644 index 0000000..4a24b84 --- /dev/null +++ b/fluidsynth/PKGBUILD @@ -0,0 +1,76 @@ +# Maintainer: Jesus E. + +pkgname=fluidsynth +pkgver=2.1.7 +_debver=$pkgver +_debrel=1.1 +pkgrel=5 +pkgdesc="A real-time software synthesizer based on the SoundFont 2 specifications" +arch=('i686' 'x86_64') +url='https://www.fluidsynth.org/' +license=('LGPL-2.1') +depends=('alsa-lib' 'glibc' 'sdl2' 'jack' 'ladspa' 'libinstpatch' 'libsndfile' 'portaudio') +makedepends=('cmake' 'doxygen' 'glib2' 'readline' 'quilt') +backup=('etc/conf.d/$pkgname') +install=${pkgname}.install +source=("$pkgname-$pkgver.tar.gz::https://github.com/${pkgname}/${pkgname}/archive/v$pkgver.tar.gz" + https://deb.debian.org/debian/pool/main/f/fluidsynth/fluidsynth_$_debver-$_debrel.debian.tar.xz + fluidsynth.initd + fluidsynth.confd + fluidsynth.run + fluidsynth.conf) +sha512sums=('22ab9bb3c5d5e619c0624ced2031b23d9d68cf9ffd6da40087aa0049f486b8c6201ff19605fc73fa642358bec31c18bb43683a8b0d603b198626d9a23721bcd6' + 'c6c9ac2a8c41bf25031b8c2bae0e223955ba697fcacd8670eb7709640bd069e7783e6e28adbc85152a3e1fbc3cd14ba290403154437fb1f9b1cc30a9ecaf0a4f' + '35124b93294e379f1aaf8d66f3159fe5451f12f89c22111d7b6fb85ef839f1411ee29cd0756811d02a05ed9f7fe9422234f12b6626e0fff3cbce395d7cb3665a' + 'c4174b68572dc0a06bc770f6de53d5ed3c765c394d17a95fa8c4eb89cbcfcb9e651a6d3607fd4876ef82c5956c9371516ca0e9570e4314a0ea64aac4c4d90fe6' + '501d4399cac0938d1373fc025fba01e24eb47ab2671886f4701253ca1b221331b0b127e60d1c38cc4757cbd64b9d67f4996dfa09854887907e78eda1dfbca78f' + 'c4174b68572dc0a06bc770f6de53d5ed3c765c394d17a95fa8c4eb89cbcfcb9e651a6d3607fd4876ef82c5956c9371516ca0e9570e4314a0ea64aac4c4d90fe6') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE='None' \ + -BUILD_SHARED_LIBS=ON \ + -Denable-ladspa=ON \ + -Denable-portaudio=ON \ + -Denable-sdl2=ON \ + -Denable-pkgconfig=ON \ + -Denable-pulseaudio=OFF \ + -Denable-dbus=OFF \ + -DLIB_SUFFIX="" \ + -Wno-dev \ + -B build \ + -S . + make -C build VERBOSE=1 +} + +package() { + cd "${pkgname}-${pkgver}" + make -C build DESTDIR="$pkgdir" install + + # services for hyperrc and runit + install -Dm 755 "${srcdir}/${pkgname}.initd" "${pkgdir}/etc/init.d/${pkgname}" + install -Dm 644 "${srcdir}/${pkgname}.confd" "${pkgdir}/etc/conf.d/${pkgname}" + install -Dm 755 "$srcdir/${pkgname}.run" "$pkgdir/etc/sv/${pkgname}/run" + install -Dm 644 "$srcdir/${pkgname}.conf" "$pkgdir/etc/sv/${pkgname}/conf" + + # docs + install -vDm 644 {AUTHORS,ChangeLog,{CONTRIBUTING,README}.md,THANKS,TODO} -t "${pkgdir}/usr/share/doc/${pkgname}" + + # license + install -vDm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/fluidsynth/fluidsynth.conf b/fluidsynth/fluidsynth.conf new file mode 100644 index 0000000..20450d0 --- /dev/null +++ b/fluidsynth/fluidsynth.conf @@ -0,0 +1,5 @@ +# Mandatory parameters (uncomment and edit) +#SOUND_FONT=/usr/share/soundfonts/default.sf2 + +# Additional optional parameters (may be useful, see 'man fluidsynth' for further info) +#OTHER_OPTS='-a alsa -m alsa_seq -r 48000' diff --git a/fluidsynth/fluidsynth.confd b/fluidsynth/fluidsynth.confd new file mode 100644 index 0000000..20450d0 --- /dev/null +++ b/fluidsynth/fluidsynth.confd @@ -0,0 +1,5 @@ +# Mandatory parameters (uncomment and edit) +#SOUND_FONT=/usr/share/soundfonts/default.sf2 + +# Additional optional parameters (may be useful, see 'man fluidsynth' for further info) +#OTHER_OPTS='-a alsa -m alsa_seq -r 48000' diff --git a/fluidsynth/fluidsynth.initd b/fluidsynth/fluidsynth.initd new file mode 100644 index 0000000..60de3ca --- /dev/null +++ b/fluidsynth/fluidsynth.initd @@ -0,0 +1,15 @@ +#!/sbin/openrc-run +# Copyright 2018-2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="FluidSynth service" + +command=/usr/bin/fluidsynth +command_args="-is -a $AUDIO_DRIVER $OTHER_OPTS $SOUND_FONT" +command_background="yes" +pidfile="/run/fluidsynth.pid" + +depend() { + need localmount + use alsasound +} diff --git a/fluidsynth/fluidsynth.install b/fluidsynth/fluidsynth.install new file mode 100644 index 0000000..87dfeab --- /dev/null +++ b/fluidsynth/fluidsynth.install @@ -0,0 +1,8 @@ +post_install() { + echo + echo " > FluidSynth comes with a daemon. Start/enable it with HyperRC or Runit." + echo " > Before that, you need a soundfont and some preconfiguration:" + echo " /etc/conf.d/fluidsynth (HyperRC)" + echo " /etc/sv/fluidsynth/conf (Runit)" + echo +} diff --git a/fluidsynth/fluidsynth.run b/fluidsynth/fluidsynth.run new file mode 100644 index 0000000..32c0e6c --- /dev/null +++ b/fluidsynth/fluidsynth.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r conf ] && . ./conf +exec fluidsynth -is -a $AUDIO_DRIVER $OTHER_OPTS $SOUND_FONT 2>&1 diff --git a/fluxbox-extra/PKGBUILD b/fluxbox-extra/PKGBUILD new file mode 100644 index 0000000..a62bd2b --- /dev/null +++ b/fluxbox-extra/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=fluxbox-extra +pkgver=1.1 +pkgrel=1 +pkgdesc="Extra desktop-settings for Fluxbox" +arch=('any') +url='https://git.hyperbola.info:50100/~team/software/desktops/fluxbox-extra.git/' +license=('GPL-2') +install=$pkgname.install +depends=('fluxbox' 'parcellite' 'dhcpcd-ui' 'xterm' 'tint3-cpp' 'jgmenu' 'slock' + 'xwallpaper' 'cbatticon' 'gxkb' 'gsimplecal' 'zukitre-fluxbox-theme') +source=("https://repo.hyperbola.info:50000/sources/desktops/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('869013da23c801c6eb2edb515a885966dc975eec65f12abdc0bf2058cc5fcadd68a9b5402e5be0165423dd375c00a3ea0b6f86cd431d39ab6ff1bcd3778c63e3' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +package() { + cd "$srcdir/$pkgname" + + mkdir -p "${pkgdir}"/usr/share/$pkgname/{configurations,icons,launchers,scripts,wallpaper} + mkdir -p "${pkgdir}"/usr/share/licenses/$pkgname + + # data + cp -R "configurations/"* "${pkgdir}"/usr/share/$pkgname/configurations + cp "configurations/".xinitrc "${pkgdir}"/usr/share/$pkgname/configurations + cp -R "icons/"* "${pkgdir}"/usr/share/$pkgname/icons + cp -R "launchers/"* "${pkgdir}"/usr/share/$pkgname/launchers + cp -R "scripts/"* "${pkgdir}"/usr/share/$pkgname/scripts + cp -R "wallpaper/"* "${pkgdir}"/usr/share/$pkgname/wallpaper + install -Dm755 setup-desktop-fluxbox.sh -t "${pkgdir}"/usr/share/$pkgname + + # license + mv COPYING "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/fluxbox-extra/fluxbox-extra.install b/fluxbox-extra/fluxbox-extra.install new file mode 100644 index 0000000..7b55eb2 --- /dev/null +++ b/fluxbox-extra/fluxbox-extra.install @@ -0,0 +1,7 @@ +post_install() { + /usr/share/fluxbox-extra/setup-desktop-fluxbox.sh +} + +post_upgrade() { + post_install +} diff --git a/fluxbox/PKGBUILD b/fluxbox/PKGBUILD new file mode 100644 index 0000000..9856136 --- /dev/null +++ b/fluxbox/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=fluxbox +pkgver=1.3.5 +_debver=1.3.5 +_debrel=2 +pkgrel=2 +pkgdesc="A lightweight and highly-configurable window manager" +arch=('i686' 'x86_64') +url="http://www.fluxbox.org" +license=('Expat') +makedepends=('quilt') +depends=('libxft' 'libxpm' 'libxinerama' 'libxrandr' 'imlib2' 'fribidi') +optdepends=('xenocara-xmessage: for using the fbsetbg and fluxbox-generate_menu utilities') +options=('!makeflags') +source=("https://sourceforge.net/projects/${pkgname}/files/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/f/fluxbox/fluxbox_$_debver-$_debrel.debian.tar.xz" + 'libre.patch' + 'fluxbox.desktop') +sha512sums=('9f787cf2f41627e0e371c751919f552859bd431644393311ea0f4bc3231b371d65016a3543e745526012eb0d6775bd2fb0511b28066f1071639c7ace99b8dbc0' + '9c6da46961e1078b57be14ff61427b594cbe2b264e54b0714c8cbadcd517021e96d09fe5fc7e00e1e9ce62d95ca54ac8b7bf5389f9ca25c165c674672a9a017a' + '3bf4fd7e6055eea2ffff9e9e1dbf57160a5992963724ad96afa94d53d870a6b26059ab083b8278da523766886082237e0fcf04f82f6cb2c46fb4844c4e23ebcf' + '89e81253519d52cf82c2667f81887906153ff97a3017e7b9ef04faa8d06c6bf2eb55f66f636597eff597eba6cc82b47ba8db40e45e40863ec87f4f2cbb4019d8') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/debian-conffile-location.diff || true + rm -v debian/patches/fix-xterm-keybinding.patch || true + + quilt push -av + fi + + # Remove nonfree apps and nonsupport apps + patch -Np1 -i "${srcdir}/libre.patch" +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr --enable-imlib2 --enable-nls --enable-xft --enable-xinerama + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -D -m644 "${srcdir}/fluxbox.desktop" "${pkgdir}/usr/share/xsessions/fluxbox.desktop" + install -D -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/fluxbox/fluxbox.desktop b/fluxbox/fluxbox.desktop new file mode 100644 index 0000000..418d29a --- /dev/null +++ b/fluxbox/fluxbox.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=XSession +Exec=/usr/bin/startfluxbox +TryExec=/usr/bin/startfluxbox +Name=fluxbox diff --git a/fluxbox/libre.patch b/fluxbox/libre.patch new file mode 100644 index 0000000..8d184c7 --- /dev/null +++ b/fluxbox/libre.patch @@ -0,0 +1,725 @@ +diff --git a/util/fluxbox-generate_menu.in b/util/fluxbox-generate_menu.in +index bc010628..225d287c 100755 +--- a/util/fluxbox-generate_menu.in ++++ b/util/fluxbox-generate_menu.in +@@ -49,7 +49,7 @@ display_usage() { + cat << EOF + Usage: @pkgprefix@fluxbox-generate_menu@pkgsuffix@ [-kgrBh] [-t terminal] [-w url] [-b browser] + [-m menu-title] [-o /path] [-u /path] [-p /path] [-n /path] [-q /path] +- [-d /path ] [-ds] [-i /path] [-is] [-su] ++ [-d /path ] [-ds] [-i /path] [-is] [-do] + EOF + } + +@@ -59,16 +59,14 @@ display_help() { + + Options: + +- -k Insert a KDE menu +- -g Add a Gnome menu + -B Enable backgrounds menu +- -su Enable sudo commands ++ -do Enable doas commands + -r Don't remove empty menu-entries; for templates + + -d Other path(s) to recursively search for *.desktop files + -ds Wider search for *.desktop files (takes more time) + -i Other path(s) to search for icons +- e.g., "/usr/kde/3.3/share/icons/crystalsvg/16x16/*" ++ e.g., "/usr/share/icons/Adwaita/16x16/*" + -is Wider search for icons (worth the extra time) + -in Skip icon search + +@@ -85,9 +83,6 @@ Options: + Only for packagers: + + -p Prefix; default is @PREFIX@ +- -n Gnome-prefix; /opt, /usr, /usr/X11R6 and /usr/local autodetected +- -q KDE-prefix; idem dito +- + + Files: + ~/.@pkgprefix@fluxbox@pkgsuffix@/usermenu Your own submenu which will be included in the menu +@@ -104,8 +99,6 @@ display_authors() { + + Henrik Kinnunen: Project leader. + Han Boetes: Packaging, debugging and scripts. +- Simon Bowden: Cleanups and compatibility for SUN. +- Jeramy B. Smith: Packaging assistance, Gnome and KDE menu system. + Filippo Pappalardo: Italian locales and -t option. + $WHOAMI: Innocent bystander. + +@@ -524,10 +517,10 @@ cli_find() { + done + } + +-sudo_find() { +- [ "${DOSUDO}" = yes ] || return ++doas_find() { ++ [ "${DOAS}" = yes ] || return + while [ "$1" ]; do +- find_it $1 append "[exec] ($1 (as root)) {${DEFAULT_TERM} -e sudo $1}" ++ find_it $1 append "[exec] ($1 (as root)) {${DEFAULT_TERM} -e doas $1}" + shift + done + } +@@ -586,9 +579,7 @@ FBSETTINGSMENU='Fluxbox menu' + FILEUTILSMENU='File utils' + FLUXBOXCOMMAND='Fluxbox Command' + GAMESMENU='Games' +-GNOMEMENUTEXT='Gnome-menus' + GRAPHICMENU='Graphics' +-KDEMENUTEXT='KDE-menus' + LOCKSCREEN='Lock screen' + MISCMENU='Misc' + MULTIMEDIAMENU='Multimedia' +@@ -636,9 +627,7 @@ case ${LC_ALL} in + FILEUTILSMENU='ćÁĘĚĎ×ŮĹ ŐÔÉĚÉÔŮ' + FLUXBOXCOMMAND='÷ŮĐĎĚÎÉÔŘ ËĎÍÁÎÄŐ' + GAMESMENU='éÇŇŮ' +- GNOMEMENUTEXT='Gnome-ÍĹÎŔ' + GRAPHICMENU='çŇÁĆÉËÁ' +- KDEMENUTEXT='KDE-ÍĹÎŔ' + LOCKSCREEN='úÁÂĚĎËÉŇĎ×ÁÔŘ ÜËŇÁÎ' + MISCMENU='đŇĎŢĹĹ' + MUSICMENU='ú×ŐË' +@@ -677,9 +666,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Souborové utility' + FLUXBOXCOMMAND='Příkaz Fluxboxu' + GAMESMENU='Hry' +- GNOMEMENUTEXT='Gnome-menu' + GRAPHICMENU='Grafika' +- KDEMENUTEXT='KDE-menu' + LOCKSCREEN='Zamknout obrazovku' + MISCMENU='Různé' + MULTIMEDIAMENU='Multimédia' +@@ -720,9 +707,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Datei-Utilities' + FLUXBOXCOMMAND='Fluxbox Befehl' + GAMESMENU='Spiele' +- GNOMEMENUTEXT='Gnome-Menues' + GRAPHICMENU='Grafik' +- KDEMENUTEXT='Kde-Menues' + LOCKSCREEN='Bildschirmsperre' + MISCMENU='Sonstiges' + MUSICMENU='Musik' +@@ -763,9 +748,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Filverktyg' + FLUXBOXCOMMAND='Fluxbox kommando' + GAMESMENU='Spel' +- GNOMEMENUTEXT='Gnome-menyer' + GRAPHICMENU='Grafik' +- KDEMENUTEXT='KDE-menyer' + LOCKSCREEN='Lĺs skärm' + MISCMENU='Blandat' + MULTIMEDIAMENU='Multimedia' +@@ -803,9 +786,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Verkenners' + FLUXBOXCOMMAND='Fluxbox Commando' + GAMESMENU='Spelletjes' +- GNOMEMENUTEXT='Gnome-menu' + GRAPHICMENU='Grafisch' +- KDEMENUTEXT='KDE-menu' + LOCKSCREEN='Scherm op slot' + MISCMENU='Onregelmatig' + MUSICMENU='Muziek' +@@ -843,9 +824,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Tiedostotyökalut' + FLUXBOXCOMMAND='Fluxbox komentorivi' + GAMESMENU='Pelit' +- GNOMEMENUTEXT='Gnomen valikot' + GRAPHICMENU='Grafiikka' +- KDEMENUTEXT='KDE:n valikot' + LOCKSCREEN='Lukitse näyttö' + MISCMENU='Sekalaista' + MUSICMENU='Musiikki' +@@ -886,9 +865,7 @@ case ${LC_ALL} in + FILEUTILSMENU='ĄŐĄˇĄ¤ĄëÁŕşî' + FLUXBOXCOMMAND='FluxboxĄłĄŢĄóĄÉ' + GAMESMENU='Ą˛ˇĽĄŕ' +- GNOMEMENUTEXT='GnomeĄáĄËĄĺˇĽ' + GRAPHICMENU='˛čÁü' +- KDEMENUTEXT='KDEĄáĄËĄĺˇĽ' + LOCKSCREEN='ĄąĄŻĄęˇĽĄóĄíĄĂĄŻ' + MISCMENU='¤¤¤í¤¤¤í' + MUSICMENU='˛»łÚ' +@@ -930,9 +907,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Outils fichiers' + FLUXBOXCOMMAND='Commande Fluxbox' + GAMESMENU='Jeux' +- GNOMEMENUTEXT='Menus Gnome' + GRAPHICMENU='Graphisme' +- KDEMENUTEXT='Menus KDE' + LOCKSCREEN="Verrouiller l'écran" + MISCMENU='Divers' + MULTIMEDIAMENU='Multimédia' +@@ -971,9 +946,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Utilitŕ' + FLUXBOXCOMMAND='Comando Fluxbox' + GAMESMENU='Giochi' +- GNOMEMENUTEXT='Gnome' + GRAPHICMENU='Grafica' +- KDEMENUTEXT='KDE' + LOCKSCREEN='Blocca lo schermo' + MISCMENU='Varie' + MUSICMENU='Musica' +@@ -1014,9 +987,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Utilitare de fisier' + FLUXBOXCOMMAND='Comanda Fluxbox' + GAMESMENU='Jocuri' +- GNOMEMENUTEXT='Meniu Gnome' + GRAPHICMENU='Grafica' +- KDEMENUTEXT='Meniu KDE' + LOCKSCREEN='Incuie ecranul' + MISCMENU='Diverse' + MULTIMEDIAMENU='Multimedia' +@@ -1056,9 +1027,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Utilidades' + FLUXBOXCOMMAND='Comandos de Fluxbox' + GAMESMENU='Juegos' +- GNOMEMENUTEXT='Menús Gnome' + GRAPHICMENU='Gráficos' +- KDEMENUTEXT='Menús KDE' + LOCKSCREEN='Bloquear Pantalla' + MISCMENU='Varios' + MULTIMEDIAMENU='Multimedia' +@@ -1102,9 +1071,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Narzędzia do plików' + FLUXBOXCOMMAND='Polecenia Fluxbox' + GAMESMENU='Gry' +- GNOMEMENUTEXT='Menu Gnome' + GRAPHICMENU='Grafika' +- KDEMENUTEXT='Menu KDE' + LOCKSCREEN='Zablokuj ekran' + MISCMENU='Różne' + MULTIMEDIAMENU='Multimedia' +@@ -1144,9 +1111,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Utilitários de Ficheiros' + FLUXBOXCOMMAND='Comando Fluxbox' + GAMESMENU='Jogos' +- GNOMEMENUTEXT='Menu Gnome' + GRAPHICMENU='Gráficos' +- KDEMENUTEXT='Menu KDE' + LOCKSCREEN='Trancar Ecră' + MISCMENU='Misc.' + MULTIMEDIAMENU='Multimédia' +@@ -1188,9 +1153,7 @@ case ${LC_ALL} in + FILEUTILSMENU='Filverktøy' + FLUXBOXCOMMAND='FluxBox-kommando' + GAMESMENU='Spill' +- GNOMEMENUTEXT='Gnome-menyer' + GRAPHICMENU='Grafikk' +- KDEMENUTEXT='KDE-menyer' + LOCKSCREEN='LĂĄs skjermen' + MISCMENU='Diverse' + MULTIMEDIAMENU='Multimedia' +@@ -1226,7 +1189,7 @@ MENUTITLE="${MENUTITLE:=Fluxbox}" + HOMEPAGE="${HOMEPAGE:=fluxbox.org}" + USERMENU="${USERMENU:=${USERFLUXDIR}/usermenu}" + MENUCONFIG="${MENUCONFIG:=${USERFLUXDIR}/menuconfig}" +-DOSUDO="no" ++DOAS="no" + + # Read the menuconfig file if it exists or else create it. + # But not during install time, use envvar for sun +@@ -1243,11 +1206,11 @@ if [ ! "${INSTALL}" = Yes ]; then + + # Your favourite terminal. Put the command in quotes if you want to use + # options. Put a backslash in before odd chars +-# MY_TERM='Eterm --tint \#123456' +-# MY_TERM='aterm -tint \$(random_color)' ++# MY_TERM='sakura --tint \#123456' ++# MY_TERM='xterm -tint \$(random_color)' + + # Your favourite browser. You can also specify options. +-# MY_BROWSER=mozilla ++# MY_BROWSER=iceweasel-uxp + + # Name of the outputfile + # MENUFILENAME=${USERFLUXDIR}/menu +@@ -1275,8 +1238,6 @@ if [ ! "${INSTALL}" = Yes ]; then + # there should be no need to specify them. + # + # PREFIX=@PREFIX@ +-# GNOME_PREFIX=/opt/gnome +-# KDE_PREFIX=/opt/kde + + + # Separate the list of background dirs with colons ':' +@@ -1290,14 +1251,8 @@ if [ ! "${INSTALL}" = Yes ]; then + # Include all backgrounds in your backgrounds-directory + # BACKGROUNDMENUITEM=yes + +-# Include KDE-menus +-# KDEMENU=yes +- +-# Include Gnome-menus +-# GNOMEMENU=yes +- +-# Enable sudo commands +-# DOSUDO=yes ++# Enable doas commands ++# DOAS=yes + + # Don't cleanup the menu + # REMOVE=no +@@ -1323,8 +1278,6 @@ fi + while [ $# -gt 0 ]; do + case "$1" in + -B) BACKGROUNDMENUITEM=yes; shift;; +- -k) KDEMENU=yes; shift;; +- -g) GNOMEMENU=yes; shift;; + -in) NO_ICON=yes; shift;; + -is) OTHER_ICONPATHS=" + /usr/share/icons +@@ -1338,43 +1291,39 @@ while [ $# -gt 0 ]; do + /usr/local/share/xclass/icons + /usr/local/share/xclass/pixmaps + /usr/X11R6/share/icons/default/16x16 +- /usr/X11R6/share/icons/kde/16x16 + /usr/X11R6/share/icons/hicolor/16x16 + /usr/local/X11R6/share/icons/default/16x16 +- /usr/local/X11R6/share/icons/kde/16x16 + /usr/local/X11R6/share/icons/hicolor/16x16 + " + shift;; + -ds) OTHER_DESKTOP_PATHS=" +- /usr/share/mimelnk ++ /usr/share/mimelnk + /usr/share/applications +- /usr/share/xsessions +- /usr/share/services ++ /usr/share/xsessions ++ /usr/share/services + " + # /usr/share/apps \ + shift;; + -i) USER_ICONPATHS=${2}; +- #needs testing ++ #needs testing + for aPath in $2; do +- testoption di $1 $aPath; ++ testoption di $1 $aPath; + done + shift 2;; + -d) USER_DESKTOP_PATHS=${2}; +- #needs testing ++ #needs testing + for aPath in $2; do +- testoption di $1 $aPath; ++ testoption di $1 $aPath; + done + shift 2;; + -t) MY_TERM=${2}; testoption ex $1 $2; shift 2;; + -b) MY_BROWSER=${2}; testoption ex $1 $2; shift 2;; + -o) MENUFILENAME=${2}; shift 2; CHECKINIT=NO ;; + -p) PREFIX=${2}; testoption di $1 $2; shift 2;; +- -n) GNOME_PREFIX=${2}; testoption di $1 $2; shift 2;; +- -q) KDE_PREFIX=${2}; testoption di $1 $2; shift 2;; + -m) MENUTITLE=${2}; testoption sk $1 $2; shift 2;; + -w) HOMEPAGE=${2}; testoption sk $1 $2; shift 2;; + -u) USERMENU=${2}; testoption fl $1 $2; shift 2;; +- -su) DOSUDO=yes; shift;; ++ -do) DOAS=yes; shift;; + -r) REMOVE=no; shift;; + -h) display_help ; exit 0 ;; + -a) display_authors ; exit 0 ;; +@@ -1424,38 +1373,14 @@ if [ -z "${PREFIX}" -o ! -d "${PREFIX}" ]; then + PREFIX=`hash | grep @pkgprefix@fluxbox@pkgsuffix@ | sed 's,.*\t/,/,' | sed 's,/bin/@pkgprefix@fluxbox@pkgsuffix@@EXEEXT@$,,'` + fi + +- +-# gnome prefix +-for GNOME_PREFIX in "${GNOME_PREFIX}" /usr/local /usr/X11R6 /usr /opt "${PREFIX}"; do +- if [ -n "${GNOME_PREFIX}" -a -d "$GNOME_PREFIX/share/gnome" ]; then +- break; +- fi +-done + # Will remain $PREFIX if all else fails + +-# kde prefix +-for KDE_PREFIX in "${KDE_PREFIX}" /usr/local /usr/X11R6 /usr /opt "${PREFIX}"; do +- if [ -n "${KDE_PREFIX}" -a -d "$KDE_PREFIX/share/applnk" ]; then +- break; +- fi +-done +- + if [ -z "${INSTALL}" ] && [ -z "${NO_ICON}" ]; then + # [ -z "$dnlamVERBOSE" ] && dnlamVERBOSE=": echo" # for debugging + FB_ICONDIR="$USERFLUXDIR/icons" + [ -r "$FB_ICONDIR" ] || mkdir "$FB_ICONDIR" + ICONMAPPING="$USERFLUXDIR/iconmapping" + +- if [ "$GNOMEMENU" ] ; then +- OTHER_DESKTOP_PATHS="\"$HOME/.gnome/apps\" \"${GNOME_PREFIX}/share/gnome/apps\" $OTHER_DESKTOP_PATHS" +- #[ "OTHER_ICONPATHS" ] && OTHER_ICONPATHS= +- fi +- if [ "$KDEMENU" ] ; then +- OTHER_DESKTOP_PATHS="\"$HOME/.kde/share/applnk\" \"${KDE_PREFIX}/share/applnk\" $OTHER_DESKTOP_PATHS" +- [ "OTHER_ICONPATHS" ] && OTHER_ICONPATHS="\"$HOME\"/.kde/share/icons/{,*} $OTHER_ICONPATHS" +- fi +- [ "$GNOMEMENU$KDEMENU" ] && OTHER_DESKTOP_PATHS="\"$ETCAPPLNK\" $OTHER_DESKTOP_PATHS" +- + checkDirs(){ + #echo checkDirs: $* >&2 + local CHECKED_DIRS="" +@@ -1476,7 +1401,7 @@ if [ -z "${INSTALL}" ] && [ -z "${NO_ICON}" ]; then + # $dnlamVERBOSE "Using OTHER_ICONPATHS=$OTHER_ICONPATHS" + # $dnlamVERBOSE "Using OTHER_DESKTOP_PATHS=$OTHER_DESKTOP_PATHS" + # $dnlamVERBOSE "Calling function: createIconMapping" +- ++ + # $dnlamVERBOSE "Creating $ICONMAPPING" >&2 + touch "$ICONMAPPING" + eval createIconMapping $USER_DESKTOP_PATHS $OTHER_DESKTOP_PATHS +@@ -1494,7 +1419,7 @@ if find_it_options $MY_TERM; then + else + [ -n "$MY_TERM" ] && echo "Warning: you chose an invalid term." >&2 + #The precise order is up for debate. +- for term in Eterm urxvt urxvtc aterm mrxvt rxvt wterm konsole gnome-terminal xterm; do ++ for term in rxvt-unicode wterm sakura st xterm; do + if find_it_options $term; then + DEFAULT_TERM=$term + break +@@ -1522,7 +1447,7 @@ if find_it_options $MY_BROWSER; then + else + [ -n "$MY_BROWSER" ] && echo "Warning: you chose an invalid browser." >&2 + #The precise order is up for debate. +- for browser in firefox mozilla-firefox mozilla-firebird MozillaFirebird opera skipstone mozilla seamonkey galeon konqueror dillo netscape w3m amaya links lynx; do ++ for browser in dillo elinks iceweasel-uxp links lynx midori netsurf otter-browser; do + if find_it_options $browser; then + DEFAULT_BROWSER=$browser + break +@@ -1533,7 +1458,7 @@ DEFAULT_BROWSERNAME=`echo $DEFAULT_BROWSER|awk '{print $1}'` + if [ "x$DEFAULT_BROWSERNAME" != "x" ]; then + DEFAULT_BROWSERNAME=`basename $DEFAULT_BROWSERNAME` + else +- DEFAULT_BROWSERNAME="firefox" ++ DEFAULT_BROWSERNAME="iceweasel-uxp" + fi + + if [ -z "$LAUNCHER" ]; then +@@ -1584,236 +1509,159 @@ fi + append "[exec] (${DEFAULT_TERMNAME}) {${DEFAULT_TERM}}" + + case "$DEFAULT_BROWSERNAME" in +- links|w3m|lynx) append "[exec] (${DEFAULT_BROWSERNAME}) {${DEFAULT_TERM} -e ${DEFAULT_BROWSER} ${HOMEPAGE}}" ;; +- firefox|firebird|mozilla|seamonkey|phoenix|galeon|dillo|netscape|amaya) append "[exec] (${DEFAULT_BROWSERNAME}) {${DEFAULT_BROWSER}}" ;; +- konqueror) append "[exec] (konqueror) {kfmclient openProfile webbrowsing}" ;; +- opera) append "[exec] (opera) {env QT_XFT=true opera}" ;; +- MozillaFirebird) append "[exec] (firebird) {MozillaFirebird}" ;; +- MozillaFirefox) append "[exec] (firefox) {MozillaFirefox}" ;; ++ elinks|links|lynx) append "[exec] (${DEFAULT_BROWSERNAME}) {${DEFAULT_TERM} -e ${DEFAULT_BROWSER} ${HOMEPAGE}}" ;; ++ iceweasel-uxp|dillo) append "[exec] (${DEFAULT_BROWSERNAME}) {${DEFAULT_BROWSER}}" ;; + *) append "[exec] ($DEFAULT_BROWSERNAME) {$DEFAULT_BROWSER}" ;; + esac + + find_it "${LAUNCHER}" append "[exec] (${RUNCOMMAND}) {$LAUNCHER_CMD}" + +- + append_submenu "${TERMINALMENU}" +- normal_find xterm urxvt urxvtc gnome-terminal multi-gnome-terminal Eterm \ +- konsole aterm mlterm multi-aterm rxvt mrxvt ++ normal_find rxvt-unicode sakura st xterm + append_menu_end + + + append_submenu "${NETMENU}" + append_submenu "${BROWSERMENU}" +- normal_find firefox mozilla-firefox MozillaFirefox galeon mozilla seamonkey dillo netscape vncviewer ++ normal_find dillo iceweasel-uxp midori netsurf vncviewer + find_it links append "[exec] (links-graphic) {links -driver x ${HOMEPAGE}}" +- find_it opera append "[exec] (opera) {env QT_XFT=true opera}" +- find_it konqueror append "[exec] (konqueror) {kfmclient openProfile webbrowsing}" + find_it links append "[exec] (links) {${DEFAULT_TERM} -e links ${HOMEPAGE}}" +- find_it w3m append "[exec] (w3m) {${DEFAULT_TERM} -e w3m ${HOMEPAGE}}" ++ find_it elinks append "[exec] (elinks) {${DEFAULT_TERM} -e elinks ${HOMEPAGE}}" + find_it lynx append "[exec] (lynx) {${DEFAULT_TERM} -e lynx ${HOMEPAGE}}" + append_menu_end + + append_submenu IM +- normal_find pidgin gaim kopete gnomemeeting sim kadu psi amsn aim ayttm everybuddy gabber ymessenger +- find_it licq append "[exec] (licq) {env QT_XFT=true licq}" +- cli_find centericq micq ++ normal_find pidgin dino ++ cli_find profanity + append_menu_end + + append_submenu Mail +- normal_find sylpheed kmail evolution thunderbird mozilla-thunderbird \ +- sylpheed-claws claws-mail +- cli_find mutt pine ++ normal_find icedove-uxp claws-mail ++ cli_find mutt + append_menu_end + + append_submenu News +- normal_find liferea pears pan +- cli_find slrn tin ++ normal_find liferea + append_menu_end + + append_submenu IRC +- normal_find xchat xchat-2 ksirc vyqchat lostirc logui konversation kvirc skype +- cli_find irssi epic4 weechat ninja +- find_it BitchX append "[exec] (BitchX) {${DEFAULT_TERM} -e BitchX -N}" || \ +- find_it bitchx append "[exec] (BitchX) {${DEFAULT_TERM} -e bitchx -N}" +- find_it ircii append "[exec] (ircii) {${DEFAULT_TERM} -e ircii -s}" ++ normal_find hexchat ++ cli_find weechat + append_menu_end + + append_submenu P2P +- normal_find gtk-gnutella lopster nicotine pyslsk xmule amule \ +- valknut dcgui-qt dc_qt quickdc asami azureus +- cli_find TekNap giFTcurs ++ normal_find amule + append_menu_end + + append_submenu FTP +- normal_find gftp IglooFTP-PRO kbear +- cli_find ncftp pftp ftp lftp yafc ++ normal_find filezilla ++ cli_find lftp + append_menu_end + + append_submenu SMB +- normal_find LinNeighborhood jags SambaSentinel ++ normal_find pyneighborhood smbclient + append_menu_end + + append_submenu "${ANALYZERMENU}" +- normal_find xnmap nmapfe wireshark ettercap +- sudo_find xnmap nmapfe wireshark ettercap ++ normal_find nmap wireshark ettercap ++ doas_find nmap wireshark ettercap + append_menu_end + +- normal_find x3270 wpa_gui ++ normal_find wpa_supplicant_gui + + append_menu_end + + append_submenu "${EDITORMENU}" +- normal_find gvim bluefish nedit gedit xedit kword kwrite kate anjuta \ +- wings xemacs emacs kvim cream evim scite Ted +- cli_find nano vim vi zile jed joe ++ normal_find emacs featherpad gvim geany lumina-textedit ++ cli_find nano nvi vim vi + find_it emacs append "[exec] (emacs-nw) {${DEFAULT_TERM} -e emacs -nw}" +- find_it xemacs append "[exec] (xemacs-nw) {${DEFAULT_TERM} -e xemacs -nw}" + append_menu_end + + append_submenu "${EDUCATIONMENU}" +- normal_find celestia scilab geomview scigraphica oregano xcircuit electric \ +- pymol elem chemtool xdrawchem gperiodic stellarium +- find_it drgeo append "[exec] (Dr. Geo) {drgeo}" +- find_it R append "[exec] (R) {${DEFAULT_TERM} -e R --gui=gnome}" +- cli_find maxima grace yacas octave gnuplot grass coq acl ++ normal_find celestia oregano pymol stellarium xcircuit xdrawchem ++ cli_find acl coq gnuplot grace grass maxima + append_menu_end + + append_submenu "${FILEUTILSMENU}" +- find_it konqueror append "[exec] (konqueror) {kfmclient openProfile filemanagement}" +- normal_find gentoo krusader kcommander linuxcmd rox tuxcmd krename xfe xplore worker endeavour2 evidence +- find_it nautilus append "[exec] (nautilus) {nautilus --no-desktop --browser}" +- cli_find mc ++ normal_find lumina-fm rox spacefm xfe ++ cli_find mc ranger + append_menu_end + + append_submenu "${MULTIMEDIAMENU}" + append_submenu "${GRAPHICMENU}" +- normal_find gimp gimp2 gimp-2.2 inkscape sodipodi xv gqview showimg xpaint kpaint kiconedit \ +- ee xzgv xscreensaver-demo xlock gphoto tuxpaint krita skencil +- find_it xnview append "[exec] (xnview browser) {xnview -browser}" +- find_it blender append "[exec] (blender) {blender -w}" +- find_it gears append "[exec] (Mesa gears) {gears}" +- find_it morph3d append "[exec] (Mesa morph) {morph3d}" +- find_it reflect append "[exec] (Mesa reflect) {reflect}" ++ normal_find gimp gphoto inkscape krita gqview tuxpaint xpaint xlockmore xzgv ++ find_it blender append "[exec] (blender) {blender -w}" + append_menu_end + + append_submenu "${MUSICMENU}" +- normal_find xmms noatun alsaplayer gqmpeg aumix xmixer gnome-alsamixer gmix kmix kscd \ +- grecord kmidi xplaycd soundtracker grip easytag audacity \ +- zinf rhythmbox kaboodle beep-media-player amarok tagtool \ +- audacious bmpx +- cli_find cdcd cplay alsamixer orpheus mp3blaster ++ normal_find audacious audacity deadbeef ++ cli_find cmus + append_menu_end + + + append_submenu "${VIDEOMENU}" +- normal_find xine gxine aviplay gtv gmplayer xmovie xcdroast xgdb \ +- realplay xawtv fxtv ogle goggles vlc ++ normal_find goggles vlc xcdroast xawtv + find_it dvdrip append "[exec] (dvdrip) {nohup dvdrip}" ++ cli_find mpv smplayer + append_menu_end + + append_submenu "${XUTILSMENU}" +- normal_find xfontsel xman xload xbiff editres viewres xclock \ +- xmag wmagnify gkrellm gkrellm2 vmware portagemaster agave +- find_it xrdb append "[exec] (Reload .Xdefaults) {xrdb -load \$HOME/.Xdefaults}" ++ normal_find xenocara-editres xenocara-viewres xenocara-xbiff xenocara-xclock xenocara-xfontsel xenocara-xload xenocara-xmag ++ find_it xenocara-xrdb append "[exec] (Reload .Xdefaults) {xrdb -load \$HOME/.Xdefaults}" + append_menu_end + append_menu_end + + + append_submenu "${OFFICEMENU}" +- normal_find xclock xcalc kcalc grisbi qbankmanager evolution +- find_it gcalc append "[exec] (gcalc) {gcalc}" || \ +- find_it gnome-calculator append "[exec] (gcalc) {gnome-calculator}" +- find_it ical append "[exec] (Calendar) {ical}" ++ normal_find xenocara-xcalc xenocara-xclock ++ find_it gsimplecal append "[exec] (Calendar) {gsimplecal}" + + # older <=1.1.3 apparently have stuff like swriter, not sowriter +- for ext in s so oo xoo; do +- find_it ${ext}ffice2 && ( +- find_it ${ext}ffice2 append "[exec] (Open Office 2) {${ext}ffice2}" +- find_it ${ext}base2 append "[exec] (OO Base 2) {${ext}base2}" +- find_it ${ext}calc2 append "[exec] (OO Calc 2) {${ext}calc2}" +- find_it ${ext}writer2 append "[exec] (OO Writer 2) {${ext}writer2}" +- find_it ${ext}web2 append "[exec] (OO Web 2) {${ext}web2}" +- find_it ${ext}html2 append "[exec] (OO HTML 2) {${ext}html2}" +- find_it ${ext}impress2 append "[exec] (OO Impress 2) {${ext}impress2}" +- find_it ${ext}draw2 append "[exec] (OO Draw 2) {${ext}draw2}" +- find_it ${ext}math2 append "[exec] (OO Math 2) {${ext}math2}" +- find_it ${ext}fromtemplate2 append "[exec] (OO Templates 2) {${ext}fromtemplate2}" +- ) ++ for ext in libreo oo; do + find_it ${ext}ffice && ( +- find_it ${ext}ffice append "[exec] (Open Office) {${ext}ffice}" +- find_it ${ext}base append "[exec] (OO Base) {${ext}base}" +- find_it ${ext}calc append "[exec] (OO Calc) {${ext}calc}" +- find_it ${ext}writer append "[exec] (OO Writer) {${ext}writer}" +- find_it ${ext}web append "[exec] (OO Web) {${ext}web}" +- find_it ${ext}impress append "[exec] (OO Impress) {${ext}impress}" +- find_it ${ext}draw append "[exec] (OO Draw) {${ext}draw}" +- find_it ${ext}math append "[exec] (OO Math) {${ext}math}" +- find_it ${ext}fromtemplate append "[exec] (OO Templates) {${ext}fromtemplate}" +- find_it ${ext}padmin append "[exec] (OO Printer Admin) {${ext}padmin}" +- find_it mrproject append "[exec] (Mr.Project) {mrproject}" ++ find_it ${ext}ffice append "[exec] (LO Office) {${ext}ffice}" ++ find_it ${ext}base append "[exec] (LO Base) {${ext}base}" ++ find_it ${ext}calc append "[exec] (LO Calc) {${ext}calc}" ++ find_it ${ext}writer append "[exec] (LO Writer) {${ext}writer}" ++ find_it ${ext}impress append "[exec] (LO Impress) {${ext}impress}" ++ find_it ${ext}draw append "[exec] (LO Draw) {${ext}draw}" ++ find_it ${ext}math append "[exec] (LO Math) {${ext}math}" + ) + done + +- normal_find abiword kword wordperfect katoob lyx acroread xpdf gv ghostview ++ normal_find abiword libwpd poppler gvim + normal_find dia xfig + normal_find gnumeric + append_menu_end + + append_submenu "${GAMESMENU}" +- normal_find bzflag gnibbles gnobots2 tuxpuck gataxx glines \ +- gnect mahjongg gnomine gnome-stones gnometris gnotravex \ +- gnotski iagno knights eboard xboard scid freecell pysol \ +- gtali tuxracer xpenguins xsnow xeyes smclone \ +- openmortal quake2 quake3 skoosh same-gnome enigma xbill \ +- icebreaker scorched3d sol dosbox black-box freeciv \ +- freeciv-server frozen-bubble liquidwar qt-nethack \ +- nethack-gnome pathological scummvm xqf \ +- wesnoth canfeild ace_canfeild golf merlin chickens \ +- supertux tuxdash neverball cube_client blackjack \ +- doom doom3 quake4 blackshades gltron kpoker concentration \ +- torrent scramble kiki xmoto warsow wormux zsnes +- cli_find gnugo xgame +- +- find_it et append "[exec] (Enemy Territory) {et}" +- find_it ut append "[exec] (Unreal Tournament) {ut}" +- find_it ut2003 append "[exec] (Unreal Tournament 2003) {ut2003}" +- find_it ut2004 append "[exec] (Unreal Tournament 2004) {ut2004}" ++ normal_find 7kaa allegro allegro-legacy angband antimicrox blobby2 \ ++ bombermaaan boswars box2d bullet dolphin-emu dosbox \ ++ dustrac endless-sky extremetuxracer flare-game freedm \ ++ freedoom freedroidrpg freeorion gigamesh gweled hex-a-hop \ ++ libgme libmanette lincity-ng megaglest megaglest-data \ ++ mgba-qt mgba-sdl minetest minetest-server neverball \ ++ openblok opensurge pingus pioneer pioneers plib scratch \ ++ scummvm scummvm-tools signus supertux supertuxkart surgescript \ ++ teeworlds trigger-rally warzone2100 warzone2100-legacy \ ++ wesnoth widelands wyrmsun xmahjongg xmoto + append_menu_end + + append_submenu "${SYSTEMTOOLSMENU}" + append_submenu "${BURNINGMENU}" +- normal_find k3b cdbakeoven graveman xcdroast arson eroaster gcombust \ +- gtoaster kiso kover gtkcdlabel kcdlabel cdw cdlabelgen +- cli_find mp3burn cdrx burncenter ++ normal_find cdw dvd+rw-tools simpleburn + append_menu_end + +- normal_find firestarter gtk-lshw gproftd gpureftpd guitoo porthole gtk-iptables \ +- gtk-cpuspeedy +- find_it fireglcontrol append "[exec] (ATI Config) {fireglcontrol}" +- cli_find top htop iotop ntop powertop ++ normal_find vsftpd ++ cli_find top htop bpytop + append_menu_end + + + +- + # We'll only use this once + ETCAPPLNK=/etc/X11/applnk + PARSING_DESKTOP="true" +-# gnome menu +-if [ "${GNOMEMENU}" ]; then +- append_submenu "${GNOMEMENUTEXT}" +- recurse_dir_menu "${GNOME_PREFIX}/share/gnome/apps" "$HOME/.gnome/apps" ${ETCAPPLNK} +- append_menu_end +- unset ETCAPPLNK +-fi + +-# kde submenu +-if [ -d "${KDE_PREFIX}/share/applnk/" -a "${KDEMENU}" ]; then +- append_submenu "${KDEMENUTEXT}" +- recurse_dir_menu "${KDE_PREFIX}/share/applnk" "$HOME/.kde/share/applnk" ${ETCAPPLNK} +- append_menu_end +- unset ETCAPPLNK +-fi + unset PARSING_DESKTOP + + #User menu +@@ -1887,17 +1735,14 @@ append_submenu "${FBSETTINGSMENU}" + + append_submenu "${WINDOWMANAGERS}" + #hard to properly maintain since there are so many exceptions to the rule. +- for wm in mwm twm wmii beryl compiz metacity icewm ion kde sawfish enlightenment fvwm openbox evilwm waimea xfce pekwm xfce4 fvwm2 blackbox ; do ++ for wm in blackbox enlightenment16 fvwm3 icewm openbox sawfish xenocara-twm; do + find_it start${wm} append "[restart] (${wm}) {start${wm}}" ||\ + find_it ${wm} append "[restart] (${wm}) {${wm}}" + done +- find_it startgnome append "[restart] (gnome) {startgnome}" ||\ +- find_it gnome-session append "[restart] (gnome) {gnome-session}" +- + find_it startwindowmaker append "[restart] (windowmaker) {startwindowmaker}" ||\ + find_it wmaker append "[restart] (windowmaker) {wmaker}" + append_menu_end +- find_it xlock append "[exec] (${LOCKSCREEN}) {xlock}" ||\ ++ find_it xlockmore append "[exec] (${LOCKSCREEN}) {xlock}" ||\ + find_it xscreensaver-command append "[exec] (${LOCKSCREEN}) {xscreensaver-command -lock}" + append "[commanddialog] (${FLUXBOXCOMMAND})" + append "[reconfig] (${RELOADITEM})" +@@ -1922,7 +1767,8 @@ if [ ! "${REMOVE}" ]; then + fi + + # escapes any parentheses in menu label +-# e.g., "[exec] (konqueror (web))" becomes "[exec] (konqueror (web\))" ++# e.g., "[exec] (iceweasel-uxp (web))" becomes "[exec] (iceweasel-uxp (web\))" ++ + sed 's/(\(.*\)(\(.*\)))/(\1 (\2\\))/' $MENUFILENAME > $MENUFILENAME.tmp + mv -f $MENUFILENAME.tmp $MENUFILENAME + diff --git a/fmt/PKGBUILD b/fmt/PKGBUILD new file mode 100644 index 0000000..7cc43b5 --- /dev/null +++ b/fmt/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=fmt +_pkgname=${pkgname}lib +pkgver=9.1.0 +pkgrel=1 +pkgdesc="Free and libre formatting library for C++" +arch=('i686' 'x86_64') +url='https://fmt.dev/' +license=('custom:Expat+Machine-Executable-Object-Exception') +depends=('gcc-libs') +makedepends=('cmake' 'ninja') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/${_pkgname}/${pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('a18442042722dd48e20714ec034a12fcc0576c9af7be5188586970e2edf47529825bdc99af366b1d5891630c8dbf6f63bfa9f012e77ab3d3ed80d1a118e3b2be') + +build() { + cd ${pkgname}-${pkgver} + cmake \ + -B build \ + -DCMAKE_BUILD_TYPE=None \ + -DBUILD_SHARED_LIBS=1 \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -G Ninja + cmake --build build +} + +package() { + cd ${pkgname}-${pkgver} + DESTDIR=${pkgdir} cmake --build build --target install + install -Dvm644 LICENSE.rst -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/font-manager/PKGBUILD b/font-manager/PKGBUILD new file mode 100644 index 0000000..c46dfc6 --- /dev/null +++ b/font-manager/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=font-manager +pkgver=0.8.8 +pkgrel=1 +pkgdesc="A simple, free and libre font management application for GTK+" +url='https://fontmanager.github.io' +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('gtk' 'json-glib' 'libxml2' 'gettext-tiny' 'sqlite') +makedepends=('gobject-introspection' 'intltool' 'meson' + 'ninja' 'vala' 'yelp-tools') +source=("https://github.com/FontManager/font-manager/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('75e85af8bbbac4f4f3e73371eb618e75afdd14ea1dc1eab7855db537356c4a9f89121554db2c7a7e2a2357a545a6c2ad69bebbde4ed588a6f9ec0bfe1cc67ad0') + +build() { + hyperbola-meson "${pkgname}-${pkgver}" build \ + -Dnautilus=false \ + -Dwebkit=false \ + -Dsearch-provider=false \ + -Dreproducible=true + ninja -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + + # remove unneeded and unsupported data + rm -rf "$pkgdir/usr/share/dbus-1/" + + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/fontconfig/PKGBUILD b/fontconfig/PKGBUILD new file mode 100644 index 0000000..3ab0aff --- /dev/null +++ b/fontconfig/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=fontconfig +pkgver=2.13.1 +_debver=$pkgver +_debrel=4.2 +pkgrel=3 +pkgdesc="A library for configuring and customizing font access" +arch=(i686 x86_64) +url='https://www.freedesktop.org/wiki/Software/fontconfig/' +license=(Expat) +depends=(expat freetype2) +makedepends=(gperf python quilt) +install=$pkgname.install +backup=(etc/fonts/fonts.conf) +source=(https://www.freedesktop.org/software/fontconfig/release/$pkgname-$pkgver.tar.bz2 + https://deb.debian.org/debian/pool/main/f/fontconfig/fontconfig_$_debver-$_debrel.debian.tar.xz + fontconfig.hook) +sha512sums=('f97f2a9db294fd72d416a7d76dd7db5934ade2cf76903764b09e7decc33e0e2eed1a1d35c5f1c7fd9ea39e2c7653b9e65365f0c6205e047e95e38ba5000dd100' + '50de46b55b71c5455fb2015c328f5219722ec27b541e6a16839401c840fe03e506cedb74d35a66b8dbf9764726e0d3da6f252dd4f9ff4697705d33f37bf1a2bb' + '5ec6d8c52273a0edd90e588a3c5079f7bcce63ec8f7032b8f716d698c95d7ac604d9dbee706f7ce1148a8821dda7b44ea787a4f8f5b6c858b583884ee6e024f4') + +# a nice page to test font matching: +# http://zipcon.net/~swhite/docs/computers/browsers/fonttest.html +# http://getemoji.com/ + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/skip-dpkg-tmp-files.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-templatedir=/etc/fonts/conf.avail \ + --localstatedir=/var \ + --disable-static \ + --with-default-fonts=/usr/share/fonts \ + --with-add-fonts=/usr/local/share/fonts + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 $srcdir/fontconfig.hook -t "$pkgdir/usr/share/libalpm/hooks" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/fontconfig/fontconfig.hook b/fontconfig/fontconfig.hook new file mode 100644 index 0000000..0f24bc4 --- /dev/null +++ b/fontconfig/fontconfig.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/fonts/* + +[Action] +Description = Updating fontconfig cache... +When = PostTransaction +Exec = /usr/bin/fc-cache -s diff --git a/fontconfig/fontconfig.install b/fontconfig/fontconfig.install new file mode 100644 index 0000000..ef1e33a --- /dev/null +++ b/fontconfig/fontconfig.install @@ -0,0 +1,35 @@ +post_install() { + cat << _EOF + + Fontconfig configuration is done via /etc/fonts/conf.avail and conf.d. + Read /etc/fonts/conf.d/README for more information. + + Configuration via /etc/fonts/local.conf is still possible, + but is no longer recommended for options available in conf.avail. + + Main systemwide configuration should be done by symlinks + (especially for autohinting, sub-pixel and lcdfilter): + + cd /etc/fonts/conf.d + ln -s ../conf.avail/XX-foo.conf + +_EOF + + post_upgrade $1 +} + +post_upgrade() { + echo -n "Rebuilding fontconfig cache..." + # a full forced directory scan is required here + /usr/bin/fc-cache -rs + echo " done." +} + +post_remove() { + cat << _EOF + + Check for dead symlinks and leftover files + in /etc/fonts/conf.d/ + +_EOF +} diff --git a/fontforge/PKGBUILD b/fontforge/PKGBUILD new file mode 100644 index 0000000..5e38270 --- /dev/null +++ b/fontforge/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=fontforge +pkgver=20230101 +_debver=$pkgver +_debrel=1.1 +pkgrel=3 +pkgdesc="Outline and bitmap font editor" +url='https://fontforge.github.io/' +arch=('i686' 'x86_64') +license=('GPL-3' 'GPL-2' 'Simplified-BSD' 'Modified-BSD' 'OFL-1.1' 'Apache-2.0' 'CC0-1.0' 'custom:Bitstream-Vera') +depends=('libtool' 'pango' 'giflib' 'libtiff' 'libxml2' 'libspiro' 'libxi' 'python' + 'potrace' 'libuninameslist' 'gtk') +makedepends=('cmake' 'git-legacy' 'python-sphinx' 'quilt') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/f/fontforge/fontforge_${pkgver}~dfsg.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/f/fontforge/fontforge_${_debver}~dfsg-${_debrel}~deb12u1.debian.tar.xz") +sha512sums=('a6283fc0b6f5f9b436be3fed502e5381e90a1b76e2c1b01b043c64add183a4825005fc7d06b063682ffa635f7b05a9aefb0815b2f979cc48672cade48cf3592d' + 'ea992ccc1b7ca2d7f30fe784bfa0b8cc8dbbe673f80378a089ef3a811770ec52eb00ca0e9de9f168e9b04d2e32b3cc2fc70ef088b1e75fe820f42a5eb6c19d8a') + +prepare() { + cd $pkgname-$pkgver + if [[ $pkgver = ${_debver%~*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + cmake \ + -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_MAINTAINER_TOOLS=TRUE \ + -DENABLE_FONTFORGE_EXTRAS=TRUE \ + -DUNIX=TRUE \ + -DENABLE_X11=ON \ + -DENABLE_WOFF2=OFF + make -C build +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir -C build install + for i in LICENSE COPYING.gplv3 debian/copyright; do + install -Dm644 $i $pkgdir/usr/share/licenses/$pkgname/$i + done +} diff --git a/fonttosfnt/PKGBUILD b/fonttosfnt/PKGBUILD new file mode 100644 index 0000000..20dc7ff --- /dev/null +++ b/fonttosfnt/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=fonttosfnt +pkgver=1.2.2 +pkgrel=1 +pkgdesc="Convert a set of bdf or pcf fonts in a bitmap only sfnt (otb)." +arch=('i686' 'x86_64') +url='https://gitlab.freedesktop.org/xorg/app/fonttosfnt' +license=('Expat') +depends=('libfontenc' 'freetype2') +makedepends=('make' 'autoconf' 'automake' 'xorgproto') +source=("https://xorg.freedesktop.org/archive/individual/app/fonttosfnt-$pkgver.tar.gz"{,.sig}) +sha512sums=('e006fbf73cd1a8ce29743275f5013eae65c4beeda8891d9d954f8d3158e1d2b6fd75b45aecb346df3a548c51a8f87ab9683f701ce3d5c4d16660d7cff18d1326' + 'SKIP') +validpgpkeys=('3C2C43D9447D5938EF4551EBE23B7E70B467F0BF') + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/foomatic-db-engine/PKGBUILD b/foomatic-db-engine/PKGBUILD new file mode 100644 index 0000000..6160cd2 --- /dev/null +++ b/foomatic-db-engine/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=foomatic-db-engine +pkgver=4.0.13 +_debver=$pkgver +_debrel=5 +pkgrel=3 +epoch=1 +pkgdesc="Foomatic - Foomatic's database engine generates PPD files from the data in Foomatic's XML database. It also contains scripts to directly generate print queues and handle jobs." +url='https://wiki.linuxfoundation.org/openprinting/database/foomatic' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('perl' 'libxml2' "cups-filters>=1.0.42" 'bash' 'perl-xml-libxml' 'perl-clone' 'perl-dbi') +makedepends=('cups' 'ghostscript' 'a2ps' 'wget' 'perl-xml-libxml' 'foomatic-db' 'quilt') +optdepends=('foomatic-db: linuxprinting.org xml files database to create ppd driver files') +backup=('etc/foomatic/defaultspooler') +source=(https://www.openprinting.org/download/foomatic/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/f/foomatic-db-engine/foomatic-db-engine_$_debver-$_debrel.debian.tar.xz) +sha512sums=('da6a0dd9c0d7935d59a4bdd5454c1b7dcb81508f17a98ebfb9fd50fb6b5ed593f4b226715030f22c082c5328c7f7e99d775eeadcb444db5c8ad1441a11a179bf' + 'f790709548529d6490e280c8242c3e20582d3099a74def83b4af36cd85a5c113294111ad978be88217e0b090256cf5844858f24825b4eb19b8b8ea274fa05aff') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + export LIB_CUPS="/usr/libexec/cups" + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + eval `perl -V:archname` + make DESTDIR=${pkgdir} \ + INSTALLARCHLIB=/usr/lib/perl5/ \ + INSTALLSITELIB=/usr/lib/perl5/ \ + INSTALLSITEARCH=/usr/lib/perl5/ install + + # preset default spooler + echo cups > ${pkgdir}/etc/foomatic/defaultspooler + # add some docs + install -Dm644 USAGE ${pkgdir}/usr/share/doc/${pkgname}/USAGE + install -Dm644 README ${pkgdir}/usr/share/doc/${pkgname}/README + + # license + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING + + # cleanup + rm -rf ${pkgdir}/usr/lib/perl5/vendor_perl/auto #Foomatic/ +} diff --git a/foomatic-db/PKGBUILD b/foomatic-db/PKGBUILD new file mode 100644 index 0000000..5156b07 --- /dev/null +++ b/foomatic-db/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +pkgbase=foomatic-db +pkgname=('foomatic-db' 'foomatic-db-ppds') +arch=('any') +pkgver=20200820 +_debpkgver=20200825 +pkgrel=2 +epoch=1 +makedepends=('cups' 'perl' 'libxml2' 'enscript' 'perl' 'net-snmp' 'bash') +url='https://openprinting.github.io/projects/02-foomatic/' +options=('!emptydirs') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/f/foomatic-db/foomatic-db_${pkgver}.orig.tar.xz") +sha512sums=('654f792a19e78a3c8b9a88537ca3f433188e22dd62471e784dab646ae7a8bd2b90bac2ec8e4a4c6e2d941ce399a9211adc7ece96d5273e3d2250e500b3f0ee49') + +prepare(){ + cp -a foomatic-db-${_debpkgver} foomatic-db-ppds-${_debpkgver} +} + +build() { + # foomatic-db + pushd foomatic-db-${_debpkgver} + ./make_configure + ./configure --prefix=/usr \ + --disable-gzip-ppds \ + --disable-ppds-to-cups \ + --with-drivers=NOOBSOLETES,NOEMPTYCMDLINE + popd + + # foomatic-db-ppds + pushd foomatic-db-ppds-${_debpkgver} + ./make_configure + ./configure --prefix=/usr + popd +} + +package_foomatic-db() { + pkgdesc="Foomatic - The collected knowledge about printers, drivers, and driver options in XML files, used by foomatic-db-engine to generate PPD files." + license=('GPL-2' 'Expat') + optdepends=('foomatic-db-ppds: PostScript PPD files') + replaces=('foomatic-db-foo2zjs') # AUR pkg no more conflicting and dropped, formerly required by foo2zjs-utils + conflicts=('foomatic-db-foo2zjs') + provides=('foomatic-db-foo2zjs') + + cd "${srcdir}"/foomatic-db-${_debpkgver} + make DESTDIR="${pkgdir}" install + + # add some docs + install -Dm644 USAGE "${pkgdir}"/usr/share/doc/${pkgname}/USAGE + install -Dm644 README "${pkgdir}"/usr/share/doc/${pkgname}/README + install -v -Dm644 "${srcdir}"/foomatic-db-${_debpkgver}/COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} + install -Dm644 "${pkgdir}"/usr/share/foomatic/db/source/PPD/Kyocera/ReadMe.htm "${pkgdir}"/usr/share/doc/${pkgname}/Kyocera/ReadMe.htm + + # remove files from foomatic-db-ppds pkg + rm -rf "${pkgdir}"/usr/share/cups/model/foomatic-db-ppds + rm -rf "${pkgdir}"/usr/share/foomatic/db/source/PPD +} + +package_foomatic-db-ppds() { + pkgdesc="Foomatic - PPDs from printer manufacturers" + license=('GPL-2' 'Expat') + + cd "${srcdir}"/foomatic-db-ppds-${_debpkgver} + make DESTDIR="${pkgdir}" install + + # remove files from foomatic-db pkg + rm -rf "${pkgdir}"/usr/share/foomatic/db/oldprinterids + rm -rf "${pkgdir}"/usr/share/foomatic/db/source/{driver,opt,printer} + rm -rf "${pkgdir}"/usr/share/foomatic/xmlschema + rm -f "${pkgdir}"/usr/share/foomatic/db/source/PPD/Kyocera/ReadMe.htm + + install -v -Dm644 "${srcdir}"/foomatic-db-ppds-${_debpkgver}/COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/foremost/PKGBUILD b/foremost/PKGBUILD new file mode 100644 index 0000000..311f2d8 --- /dev/null +++ b/foremost/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=foremost +pkgver=1.5.7 +_debver=$pkgver +_debrel=9.1 +pkgrel=1 +pkgdesc="A console program to recover files based on their headers, footers, and internal data structures" +arch=('i686' 'x86_64') +url='http://foremost.sourceforge.net/' +license=('GPL-2' 'Public-Domain') +depends=('glibc') +makedepends=('quilt') +backup=(etc/foremost.conf) +source=(https://foremost.sourceforge.net/pkg/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/f/foremost/foremost_$_debver-$_debrel.debian.tar.xz + fix-build.patch) +sha512sums=('8827c29d52496783be26374f3943eb26a154d842f34e50fb489f87b3a5045bf85f1e44d7d8d8b12b2355ba3fe4b06a0db979cc22c0f431593c5976001eb931ab' + 'ca9685334d2444f996332fece0278d80976ecab159b71ae0bd09aba4497d8a7160d295d6ad536675304457ae02e71659e9cad1df5abe2dafa119090efea10207' + '2d60c6d47cfb017370becd07baea725826f321ed31227f063c751526704493c14632d67ffb7d8c9467a250cbe0fb266d7afdb233f5e4b374e24593b58465402a') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cd "${srcdir}"/$pkgname-$pkgver + make BIN="/usr/bin" +} + +package () { + cd "${srcdir}"/$pkgname-$pkgver + + install -d "${pkgdir}"/{etc,usr/bin,usr/share/man/man8,usr/share/licenses/foremost} + make DESTDIR="${pkgdir}" install + + # license + install -Dm644 debian/copyright -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/foremost/fix-build.patch b/foremost/fix-build.patch new file mode 100644 index 0000000..cbe87c9 --- /dev/null +++ b/foremost/fix-build.patch @@ -0,0 +1,15 @@ +--- a/Makefile 2023-03-02 01:46:53.723746269 +0100 ++++ b/Makefile 2023-03-02 01:47:48.805037917 +0100 +@@ -24,9 +24,9 @@ + RAW_FLAGS += -DVERSION=\"$(VERSION)\" + + # Where we get installed +-BIN = /usr/local/bin +-MAN = /usr/share/man/man8 +-CONF= /usr/local/etc ++BIN = $(DESTDIR)/usr/bin ++MAN = $(DESTDIR)/usr/share/man/man8 ++CONF= $(DESTDIR)/etc + # Setup for compiling and cross-compiling for Windows + # The CR_ prefix refers to cross compiling from OSX to Windows + CR_CC = $(CR_BASE)/gcc diff --git a/fossil/PKGBUILD b/fossil/PKGBUILD new file mode 100644 index 0000000..86fb231 --- /dev/null +++ b/fossil/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=fossil +pkgver=2.21 +pkgrel=1 +pkgdesc="Simple, high-reliability, distributed, free software configuration management" +arch=('i686' 'x86_64') +license=('Simplified-BSD') +url='https://www.fossil-scm.org' +depends=('libressl' 'zlib') +makedepends=('tcl') +optdepends=('tcl') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/f/fossil/fossil_${pkgver}.orig.tar.xz") +sha512sums=('4616f857ba0f500ca9ce0ece9aad804186851681dd1454a045e61f1184e7f44155d27dde72f388775d156c0fb2d0004c74357bdd341fa853db34ee9641ce8620') + +build() { + cd fossil-src-$pkgver + ./configure \ + --prefix=/usr \ + --json \ + --with-tcl=/usr \ + --with-tcl-private-stubs=1 + make +} + +package() { + cd fossil-src-$pkgver + install -Dm755 fossil -t "$pkgdir"/usr/bin/ + install -Dm644 tools/fossil-autocomplete.bash "$pkgdir"/usr/share/bash-completion/completions/fossil + install -Dm644 tools/fossil-autocomplete.zsh "$pkgdir"/usr/share/zsh/site-functions/_fossil + install -Dm644 COPYRIGHT-BSD2.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/fox/ControlPanel.desktop b/fox/ControlPanel.desktop new file mode 100644 index 0000000..1b7d5d5 --- /dev/null +++ b/fox/ControlPanel.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=FOX Desktop Setup +Comment=Setup desktop appearance for FOX applications +Exec=ControlPanel +Icon=ControlPanel +Terminal=false +StartupNotify=false +Categories=Settings;DesktopSettings; diff --git a/fox/PKGBUILD b/fox/PKGBUILD new file mode 100644 index 0000000..49f5f5f --- /dev/null +++ b/fox/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: Jesus E. + +pkgname=fox +epoch=1 +pkgver=1.6.57 +_debver=1.6.57 +_debrel=1 +pkgrel=1 +pkgdesc='Free Objects for X: GUI Toolkit for C++' +arch=('i686' 'x86_64') +url='http://www.fox-toolkit.org/' +license=('LGPL-2.1') +depends=('bzip2' 'libxcursor' 'libxft' 'libxrandr' 'libxi' 'libpng' 'libtiff' 'glu') +makedepends=('mesa' 'graphicsmagick' 'quilt' 'automake-1.15') +optdepends=('perl') +source=(http://fox-toolkit.org/ftp/fox-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/f/fox1.6/fox1.6_$_debver-$_debrel.debian.tar.xz + adie.desktop + calculator.desktop + ControlPanel.desktop + PathFinder.desktop) +sha512sums=('e7b91054a9ea674818803415284cb61572935d22466e446cb37ef68344e2684e8acd567f7c8a6912f939dcbcc37455119ad6a01ac30513f460d0b3937b7e6087' + 'eae83d0065bd349427971b5174357af5d32d97fe786819e7978b2a7d03bfe87e5afd6b3dda2329dd38f48eca038606b1d30038a39807d40684df0cd7723d83d2' + 'ffda52709989093a377f265748941bd1da249c6fe4514ed0a969fe0d203b485ae618049279376988589716401132c9e10af82ff770bb81c0d771bfdfeaefdc24' + 'bff9b22e244830271d284b1c3e49936e9f4596eaad97a9ba510b6f82f3ac13210b354e8997cbe487aab6e2e5ed0eec90a9a739aa400f5d7a4953888d14368aaa' + '90a718497698d6938775d48abd1b018dc19e3a450b9702a045c26d61494464a47a940eb8c239afb339bc394f074254223f194fd313320bf91a76291d938180dd' + '57f9ef683b0d5427453cb8268adcfd6c306a6769218ce004c1f1387d48811d625791229eba9aea69f77984148e40b16f10e64b0ebab09f4716b89bb4d4011428') + +prepare() { + cd "$srcdir"/${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/12_build-reproducibly-without-date.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir"/${pkgname}-${pkgver} + gm convert +set date:create +set date:modify adie/big_gif.gif adie.png + gm convert +set date:create +set date:modify calculator/bigcalc.gif calculator.png + gm convert +set date:create +set date:modify pathfinder/file_gif.gif PathFinder.png + + export CPPFLAGS="$CPPFLAGS -I/usr/include/freetype2" + ./configure --prefix=/usr \ + --enable-release \ + --with-xft=yes \ + --with-opengl=yes \ + --with-xim \ + --with-xshm \ + --with-shape \ + --with-xcursor \ + --with-xrender \ + --with-xrandr \ + --with-xfixes \ + --with-xinput + make +} + +package() { + cd "$srcdir"/${pkgname}-${pkgver} + make DESTDIR="$pkgdir" install + + pushd tests + make ControlPanel + install -m755 .libs/ControlPanel "$pkgdir"/usr/bin/ + popd + + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname + + install -dm755 "$pkgdir"/usr/share/{applications,pixmaps} + install -m644 *.png "$pkgdir"/usr/share/pixmaps/ + install -m644 "$srcdir"/*.desktop "$pkgdir"/usr/share/applications/ +} diff --git a/fox/PathFinder.desktop b/fox/PathFinder.desktop new file mode 100644 index 0000000..4c81bd7 --- /dev/null +++ b/fox/PathFinder.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=PathFinder +Comment=File browser +Exec=PathFinder +Icon=PathFinder +Terminal=false +StartupNotify=false +Categories=System;FileTools;FileManager; diff --git a/fox/adie.desktop b/fox/adie.desktop new file mode 100644 index 0000000..e960662 --- /dev/null +++ b/fox/adie.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Adie +Comment=Fast and convenient programming text editor +Exec=adie +Icon=adie +Terminal=false +StartupNotify=false +Categories=Utility;TextEditor; diff --git a/fox/calculator.desktop b/fox/calculator.desktop new file mode 100644 index 0000000..9a4c139 --- /dev/null +++ b/fox/calculator.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=FOX Calculator +Comment=Simple desktop calculator +Exec=calculator +Icon=calculator +Terminal=false +StartupNotify=false +Categories=Utility;Calculator; diff --git a/fping/PKGBUILD b/fping/PKGBUILD new file mode 100644 index 0000000..e67db81 --- /dev/null +++ b/fping/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=fping +pkgver=5.0 +pkgrel=1 +pkgdesc='Utility to ping multiple hosts at once' +url='https://www.fping.org/' +arch=('i686' 'x86_64') +license=('Public-Domain' 'Modified-BSD') +depends=('glibc') +install=${pkgname}.install +source=(https://www.fping.org/dist/${pkgname}-${pkgver}.tar.gz{,.asc}) +sha512sums=('c843f7bb7c4e3289c4dd9eb8ae2ab93a363316c0000aac9187f79580a3d2505df179f2e0ae9e0a791c74bfc9e17c476874f8e122dfa6ad74930498c4e02d0de3' + 'SKIP') +validpgpkeys=('8D1E89B8FBA920A5A609F2615A11A22BC5A1F734') # David Schweikert + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --enable-ipv4 \ + --enable-ipv6 + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/fping/fping.install b/fping/fping.install new file mode 100644 index 0000000..8578b7c --- /dev/null +++ b/fping/fping.install @@ -0,0 +1,7 @@ +post_install() { + setcap cap_net_raw=ep usr/sbin/fping 2>/dev/null || chmod +s usr/sbin/fping +} + +post_upgrade() { + post_install "$1" +} diff --git a/freealut/PKGBUILD b/freealut/PKGBUILD new file mode 100644 index 0000000..910793c --- /dev/null +++ b/freealut/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=freealut +pkgver=1.1.0 +_debver=1.1.0 +_debrel=6 +pkgrel=1 +pkgdesc='OpenAL Utility Toolkit (ALUT)' +url="https://www.openal.org" +arch=('i686' 'x86_64') +license=('LGPL-2') +depends=('openal') +makedepends=('quilt') +source=(https://deb.debian.org/debian/pool/main/f/freealut/freealut_$pkgver.orig.tar.gz + https://deb.debian.org/debian/pool/main/f/freealut/freealut_$_debver-$_debrel.debian.tar.xz) +sha512sums=('270f74972548b4ac6b98c52c51787ed43c20cf79979063d073bbee7bd08ac4f34c2b579fbf15c09c4e606a5ed38dcd0252f5c46fb3cfe43b727b6b53cf747933' + '2eb01903a35e52d55e37b0006f3168f320015292713512242e8717c2095f7524c2ffc406ac2c42693a368cc61fd196c8de239891969c2f19a223541d00b50feb') + +prepare() { + cd $srcdir/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/001_freebsd_pthread.diff || true + rm -v debian/patches/005_am_maintainer_mode.diff || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/freeciv/PKGBUILD b/freeciv/PKGBUILD new file mode 100644 index 0000000..c89b7ef --- /dev/null +++ b/freeciv/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=freeciv +pkgver=3.0.10 +pkgrel=1 +pkgdesc="A free software, multiuser game about civilizations" +arch=('i686' 'x86_64') +url='http://www.freeciv.org/' +license=('GPL-2') +depends=('gtk' 'sdl_mixer' 'lua' 'sqlite' 'curl') +makedepends=('python' 'intltool' 'gettext-tiny') +groups=('games') +backup=('etc/freeciv/database.lua') +source=("https://downloads.sourceforge.net/$pkgname/${pkgname}-${pkgver}.tar.xz") +sha512sums=('4082e94deeda8d9b90f04137d6e7dfd39ff7232225a910f47519a464db553891e42289c1d7738f9ee0d9a16db143669bf8c4c5ce9492a4455ccd99906c956192') + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --bindir=/usr/games \ + --datarootdir=/usr/share/games \ + --docdir=/usr/share/doc/$pkgname \ + --localedir=/usr/share/locale \ + --mandir=/usr/share/man \ + --enable-shared \ + --enable-sys-lua \ + --enable-client=gtk3 \ + --enable-fcmp=gtk3 \ + --enable-fcdb=sqlite3 \ + --enable-aimodules + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + mv "${pkgdir}"/usr/share/games/icons "${pkgdir}"/usr/share + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/freedoom/PKGBUILD b/freedoom/PKGBUILD new file mode 100644 index 0000000..64f48f3 --- /dev/null +++ b/freedoom/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=(freedoom freedm) +pkgbase=${pkgname[0]} +pkgver=0.13.0 +pkgrel=3 +pkgdesc="Free and libre game based on the Doom engine" +arch=('any') +url='https://freedoom.github.io/' +license=('Modified-BSD') +depends=('chocolate-doom') +optdepends=('crispy-doom: For enhanced vanilla gameplay-options' + 'prboom-plus: For enhanced vanilla gameplay-options' + 'prboom: For vanilla gameplay-options') +makedepends=('asciidoc' 'deutex' 'python' 'python-pillow') +groups=('games') +source=($pkgbase-$pkgver.tar.gz::https://github.com/$pkgbase/$pkgbase/archive/refs/tags/v$pkgver.tar.gz + fix-errors.patch + add-launcher.patch) +sha512sums=('70dd124eee028bbf9aad29b17603c2c4c23e5280219d84a9ffa95417b601cfda33ddf44b6aa991e60194120cfd37110c1c888a5f80d4028e9625377c21f8d7a4' + 'ac63d766a92f2f2a577a7671525eca6c04d34412ccb8e2044aa75d7eb3af7b0ec08b0d776702631c0ada6269612cd106b11c509ed5c2b6655ce8010602427830' + '0f50ae7172aa2de17a9a33f5d4e4fc9c72113c64ac5690d718b0fcedb8672f66d5a8d12722f42834e60bb9f99750f0c7928b64b44688294d1cad439d271ff9e7') + +prepare() { + cd "$pkgbase-$pkgver" + patch -Np1 -i ${srcdir}/fix-errors.patch + patch -Np1 -i ${srcdir}/add-launcher.patch +} + +build() { + cd "$pkgbase-$pkgver" + make +} + +package_freedm() { + cd "$pkgbase-$pkgver" + make prefix=/usr bindir=/games DESTDIR="$pkgdir" install-freedm + install -Dm644 COPYING.adoc -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_freedoom() { + cd "$pkgbase-$pkgver" + make prefix=/usr bindir=/games DESTDIR="$pkgdir" install-freedoom + install -Dm644 COPYING.adoc -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/freedoom/add-launcher.patch b/freedoom/add-launcher.patch new file mode 100644 index 0000000..d12b374 --- /dev/null +++ b/freedoom/add-launcher.patch @@ -0,0 +1,11 @@ +--- a/dist/freedoom 2024-01-30 00:21:55.000000000 +0100 ++++ b/dist/freedoom 2024-02-02 17:19:40.402741120 +0100 +@@ -6,7 +6,7 @@ + + # "doom" is Debian’s generic name for their alternatives system. + +-PORTS="doom odamex gzdoom crispy-doom chocolate-doom prboom-plus" ++PORTS="crispy-doom chocolate-doom prboom-plus" + + # Just a single argument starting the command is allowed, -p, in order + # to explicitly set a port on the command line. -- is also supported diff --git a/freedoom/fix-errors.patch b/freedoom/fix-errors.patch new file mode 100644 index 0000000..c0ec755 --- /dev/null +++ b/freedoom/fix-errors.patch @@ -0,0 +1,69 @@ +--- a/Makefile 2024-01-30 00:21:55.000000000 +0100 ++++ b/Makefile 2024-02-02 17:27:27.945732689 +0100 +@@ -13,8 +13,6 @@ + NODE_BUILDER_LEVELS=e?m? dm?? map?? + LEGACY_TRANSPARENCY_INDEX=255 + LEGACY_TRANSPARENCY_REPLACEMENT=133 +-MANUAL_ADOC_FILES=$(wildcard manual/freedoom-manual-??.adoc) +-MANUAL_PDF_FILES=$(subst .adoc,.pdf,$(MANUAL_ADOC_FILES)) + + FREEDOOM1=$(WADS)/freedoom1.wad + FREEDOOM2=$(WADS)/freedoom2.wad +@@ -117,7 +115,7 @@ + + HTMLDOCS=NEWS.html README.html + TEXTDOCS=COPYING.txt CREDITS.txt CREDITS-MUSIC.txt +-DISTDOCS=$(HTMLDOCS) $(TEXTDOCS) $(MANUAL_PDF_FILES) ++DISTDOCS=$(HTMLDOCS) $(TEXTDOCS) + + dist: $(OBJS) $(DISTDOCS) + LC_ALL=C VERSION=$(VERSION) scripts/makepkgs freedm $(FREEDM) $(DISTDOCS) +@@ -251,7 +249,7 @@ + waddir?=/share/games/doom + target=$(DESTDIR)$(prefix) + +-install-freedm: $(FREEDM) $(HTMLDOCS) $(MANUAL_PDF_FILES) \ ++install-freedm: $(FREEDM) $(HTMLDOCS) \ + freedm.6 io.github.freedoom.FreeDM.png + install -Dm 644 dist/io.github.freedoom.FreeDM.desktop \ + -t "$(target)/share/applications" +@@ -264,10 +262,9 @@ + -t "$(target)/share/icons" + install -Dm 644 CREDITS CREDITS-MUSIC NEWS.html README.html -t "$(target)$(docdir)/freedm" + install -Dm 644 COPYING.adoc "$(target)$(docdir)/freedm/COPYING" +- -install -Dm 644 $(MANUAL_PDF_FILES) -t "$(target)$(docdir)/freedm" + + install-freedoom: $(FREEDOOM1) $(FREEDOOM2) $(HTMLDOCS) \ +- $(MANUAL_PDF_FILES) freedoom1.6 freedoom2.6 \ ++ freedoom1.6 freedoom2.6 \ + io.github.freedoom.Phase1.png \ + io.github.freedoom.Phase2.png + install -Dm 644 dist/io.github.freedoom.Phase1.desktop \ +@@ -290,7 +287,6 @@ + install -Dm 644 CREDITS CREDITS-MUSIC NEWS.html README.html \ + -t "$(target)$(docdir)/freedoom" + install -Dm 644 COPYING.adoc "$(target)$(docdir)/freedoom/COPYING" +- -install -Dm 644 $(MANUAL_PDF_FILES) -t "$(target)$(docdir)/freedoom" + + # For the following uninstall targets the manual arguments are intentionally + # not quoted since they are wildcards. +@@ -307,8 +303,7 @@ + "$(target)$(docdir)/freedm/CREDITS-MUSIC" \ + "$(target)$(docdir)/freedm/COPYING" \ + "$(target)$(docdir)/freedm/NEWS.html" \ +- "$(target)$(docdir)/freedm/README.html" \ +- $(target)$(docdir)/freedm/freedoom-manual-??.pdf ++ "$(target)$(docdir)/freedm/README.html" + -rmdir -p "$(target)/share/applications" \ + "$(target)/share/metainfo" "$(target)/share/icons" \ + "$(target)$(bindir)" "$(target)$(mandir)/man6" \ +@@ -332,8 +327,7 @@ + "$(target)$(docdir)/freedoom/CREDITS-MUSIC" \ + "$(target)$(docdir)/freedoom/COPYING" \ + "$(target)$(docdir)/freedoom/NEWS.html" \ +- "$(target)$(docdir)/freedoom/README.html" \ +- $(target)$(docdir)/freedoom/freedoom-manual-??.pdf ++ "$(target)$(docdir)/freedoom/README.html" + -rmdir -p "$(target)/share/applications" \ + "$(target)/share/metainfo" "$(target)/share/icons" \ + "$(target)$(bindir)" "$(target)$(mandir)/man6" \ diff --git a/freedroidrpg/PKGBUILD b/freedroidrpg/PKGBUILD new file mode 100644 index 0000000..0f36061 --- /dev/null +++ b/freedroidrpg/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=freedroidrpg +pkgdesc="Isometric 3D role playing game taking place in the future, on Earth" +pkgver=1.0 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://gitlab.com/freedroid/freedroid-src' +license=('GPL-2') +depends=('sdl_mixer' 'sdl_image' 'sdl_gfx' 'libogg' 'libvorbis' 'mesa-libgl' 'glu' 'glew') +makedepends=('mesa' 'python') +optdepends=('python' 'espeak') +groups=('games') +source=("https://ftp.osuosl.org/pub/freedroid/freedroidRPG-1.0/freedroidRPG-${pkgver}.tar.gz" + "fix-build.patch") +sha512sums=('e3cac480e9db02b2991da674ec6357b1d660996f3fa3eeb75f0908ca653a637eeb44239c1cd7540087f27195e460100d08aa022f6812db72387647218c7bcb29' + '15d7a0478a073d8ecf72fa5592da92fdecbba07599bc602c02468145ad178e91b2f463686cf5ad4b6325520d49f95351bebd959aa044484a23f1d21443f309a8') + +prepare() { + cd $pkgname-${pkgver^^} + patch -Np1 -i ${srcdir}/fix-build.patch + autoreconf -v +} + +build() { + cd $pkgname-${pkgver^^} + export CPPFLAGS="$CPPFLAGS -fcommon -fPIE" + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games + make +} + +package() { + cd $pkgname-${pkgver^^} + make DESTDIR="${pkgdir}" install + + # fixing wrong folder-locations + mv ${pkgdir}/usr/share/games/{applications,icons,metainfo} ${pkgdir}/usr/share + + install -Dvm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/freedroidrpg/fix-build.patch b/freedroidrpg/fix-build.patch new file mode 100644 index 0000000..c32f56d --- /dev/null +++ b/freedroidrpg/fix-build.patch @@ -0,0 +1,11 @@ +--- a/configure.ac 2023-01-22 19:28:22.000000000 +0100 ++++ b/configure.ac 2024-09-23 16:09:02.639663692 +0200 +@@ -105,7 +105,7 @@ + AC_PROG_MAKE_SET + AC_PROG_AWK + AC_PATH_PROG([LUADOX], [lua2dox], []) +-AM_PATH_PYTHON([3.9]) ++AM_PATH_PYTHON([3.8]) + AC_PATH_TARGET_TOOL([WINDRES], [windres], [windres]) + AM_GNU_GETTEXT_VERSION([0.21]) + AM_GNU_GETTEXT([external]) diff --git a/freeglut/PKGBUILD b/freeglut/PKGBUILD new file mode 100644 index 0000000..933ee0a --- /dev/null +++ b/freeglut/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=freeglut +pkgver=3.2.1 +pkgrel=1 +pkgdesc="Provides functionality for small OpenGL programs" +arch=(i686 x86_64) +url="http://freeglut.sourceforge.net/" +license=(Expat) +depends=(libxi libxrandr mesa-libgl) +makedepends=(mesa glu libxxf86vm cmake) +replaces=(glut) +provides=(glut) +conflicts=(glut) +source=(https://downloads.sourceforge.net/freeglut/${pkgname}-${pkgver}.tar.gz) +sha512sums=('aced4bbcd36269ce6f4ee1982e0f9e3fffbf18c94f785d3215ac9f4809b992e166c7ada496ed6174e13d77c0f7ef3ca4c57d8a282e96cbbe6ff086339ade3b08') + +build() { + cmake -H$pkgname-$pkgver -Bbuild \ + -DFREEGLUT_BUILD_STATIC_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=None + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --build build --target install + ln -sr "$pkgdir"/usr/lib/pkgconfig/{glut,freeglut}.pc + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 $pkgname-$pkgver/COPYING +} + +# vim: ts=2 sw=2 et: diff --git a/freeimage/PKGBUILD b/freeimage/PKGBUILD new file mode 100644 index 0000000..0a2e53b --- /dev/null +++ b/freeimage/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=freeimage +pkgver=3.18.0 +_debver=$pkgver +_debrel=6 +pkgrel=3 +pkgdesc="Free software library project for developers who would like to support popular graphics image formats" +arch=('i686' 'x86_64') +license=('GPL-2' 'custom:FIPL') +url='https://freeimage.sourceforge.net/' +depends=('libjpeg-turbo' 'openjpeg2' 'libtiff' 'libraw') +makedepends=('mesa' 'glu' 'quilt') +source=("https://downloads.sourceforge.net/project/freeimage/Source%20Distribution/${pkgver}/FreeImage${pkgver//./}.zip" + "https://deb.debian.org/debian/pool/main/f/freeimage/freeimage_${_debver}+ds2-${_debrel}+deb11u1.debian.tar.xz" + "fix-build.patch") +sha512sums=('9d9cc7e2d57552c3115e277aeb036e0455204d389026b17a3f513da5be1fd595421655488bb1ec2f76faebed66049119ca55e26e2a6d37024b3fb7ef36ad4818' + '22f9088f0a961329c245fab6e641ddd9ecbef8f83a344cdef3faed6df63415484e4ffdccd676464a6e1690f4eab286928c8e58348c90ea0032a86a472c6d2cd4' + 'ae113ded05f94b15168dabc7c8997a26e4136000792144da390a6ef570b367e861163041e772b2705daf1265ef0e34cee7fae743bfce5a54a035ed0817d369d8') + +prepare() { + cd FreeImage + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + rm Source/FreeImage/GetType.cpp + rm -r Source/Lib* Source/ZLib Source/OpenEXR + # can't be built due to private headers + > Source/FreeImage/PluginG3.cpp + > Source/FreeImageToolkit/JPEGTransform.cpp +} + +build() { + cd FreeImage + sh gensrclist.sh + sh genfipsrclist.sh + + # change build-flags for compiling + if [[ $CARCH = "i686" ]]; then + export CXXFLAGS="-Og" + export CFLAGS="-Og" + elif [[ $CARCH = "x86_64" ]]; then + export CXXFLAGS="-fPIC" + export CFLAGS="-fPIC" + fi + + # additional patch before build, removal of non-free parts + patch -Np1 -i "${srcdir}"/fix-build.patch + + make -f Makefile.gnu + make -f Makefile.fip +} + +package() { + cd FreeImage + make -f Makefile.gnu DESTDIR="${pkgdir}" install + make -f Makefile.fip DESTDIR="${pkgdir}" install + + install -Dm644 "${srcdir}"/FreeImage/license-{fi,gplv2}.txt -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/freeimage/fix-build.patch b/freeimage/fix-build.patch new file mode 100644 index 0000000..eac8f1a --- /dev/null +++ b/freeimage/fix-build.patch @@ -0,0 +1,345 @@ +--- a/Makefile.fip 2022-09-13 14:23:00.000000000 +0200 ++++ b/Makefile.fip 2022-09-13 14:28:02.177207076 +0200 +@@ -11,7 +11,7 @@ + # Converts cr/lf to just lf + DOS2UNIX = dos2unix + +-LIBRARIES = -lstdc++ -ljxrglue $(shell pkg-config --libs libjpeg libopenjp2 libpng libraw libtiff-4 libwebpmux OpenEXR zlib) -lm ++LIBRARIES = -lstdc++ $(shell pkg-config --libs libjpeg libopenjp2 libpng libraw zlib) -lm + + MODULES = $(SRCS:.c=.o) + MODULES := $(MODULES:.cpp=.o) +--- a/Makefile.gnu 2022-09-13 14:23:00.000000000 +0200 ++++ b/Makefile.gnu 2022-09-13 14:27:40.215833103 +0200 +@@ -14,7 +14,7 @@ + # See Bug-Debian #845279 + PKG_CONFIG ?= pkg-config + +-LIBRARIES = -lstdc++ -ljxrglue $(shell $(PKG_CONFIG) --libs libjpeg libopenjp2 libpng libraw libtiff-4 libwebpmux OpenEXR zlib) -lm ++LIBRARIES = -lstdc++ $(shell $(PKG_CONFIG) --libs libjpeg libopenjp2 libpng libraw zlib) -lm + + MODULES = $(SRCS:.c=.o) + MODULES := $(MODULES:.cpp=.o) +@@ -24,14 +24,14 @@ + override CFLAGS += -DOPJ_STATIC + # LibRaw + override CFLAGS += -DNO_LCMS +-# LibJXR ++ + override CFLAGS += -DDISABLE_PERF_MEASUREMENT -D__ANSI__ +-override CFLAGS += $(INCLUDE) -I/usr/include/jxrlib $(shell $(PKG_CONFIG) --cflags libjpeg libopenjp2 libpng libraw libtiff-4 libwebpmux OpenEXR zlib) ++override CFLAGS += $(INCLUDE) $(shell $(PKG_CONFIG) --cflags libjpeg libopenjp2 libpng libraw zlib) + CXXFLAGS ?= -O3 -fPIC + override CXXFLAGS += -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy +-# LibJXR ++ + override CXXFLAGS += -D__ANSI__ +-override CXXFLAGS += $(INCLUDE) -I/usr/include/jxrlib $(shell $(PKG_CONFIG) --cflags libjpeg libopenjp2 libpng libraw libtiff-4 libwebpmux OpenEXR zlib) ++override CXXFLAGS += $(INCLUDE) $(shell $(PKG_CONFIG) --cflags libjpeg libopenjp2 libpng libraw zlib) + + TARGET = freeimage + STATICLIB = lib$(TARGET).a +--- a/Makefile.srcs 2024-12-19 19:33:07.554120559 +0100 ++++ b/Makefile.srcs 2024-12-19 19:36:01.988856257 +0100 +@@ -1,5 +1,5 @@ + VER_MAJOR = 3 + VER_MINOR = 18.0 +-SRCS = Source/FreeImage/BitmapAccess.cpp Source/FreeImage/CacheFile.cpp Source/FreeImage/ColorLookup.cpp Source/FreeImage/Conversion.cpp Source/FreeImage/Conversion16_555.cpp Source/FreeImage/Conversion16_565.cpp Source/FreeImage/Conversion24.cpp Source/FreeImage/Conversion32.cpp Source/FreeImage/Conversion4.cpp Source/FreeImage/Conversion8.cpp Source/FreeImage/ConversionFloat.cpp Source/FreeImage/ConversionRGB16.cpp Source/FreeImage/ConversionRGBA16.cpp Source/FreeImage/ConversionRGBAF.cpp Source/FreeImage/ConversionRGBF.cpp Source/FreeImage/ConversionType.cpp Source/FreeImage/ConversionUINT16.cpp Source/FreeImage/FreeImage.cpp Source/FreeImage/FreeImageC.c Source/FreeImage/FreeImageIO.cpp Source/FreeImage/Halftoning.cpp Source/FreeImage/J2KHelper.cpp Source/FreeImage/LFPQuantizer.cpp Source/FreeImage/MNGHelper.cpp Source/FreeImage/MemoryIO.cpp Source/FreeImage/MultiPage.cpp Source/FreeImage/NNQuantizer.cpp Source/FreeImage/PSDParser.cpp Source/FreeImage/PixelAccess.cpp Source/FreeImage/Plugin.cpp Source/FreeImage/PluginBMP.cpp Source/FreeImage/PluginCUT.cpp Source/FreeImage/PluginDDS.cpp Source/FreeImage/PluginEXR.cpp Source/FreeImage/PluginG3.cpp Source/FreeImage/PluginGIF.cpp Source/FreeImage/PluginHDR.cpp Source/FreeImage/PluginICO.cpp Source/FreeImage/PluginIFF.cpp Source/FreeImage/PluginJ2K.cpp Source/FreeImage/PluginJNG.cpp Source/FreeImage/PluginJP2.cpp Source/FreeImage/PluginJPEG.cpp Source/FreeImage/PluginJXR.cpp Source/FreeImage/PluginKOALA.cpp Source/FreeImage/PluginMNG.cpp Source/FreeImage/PluginPCD.cpp Source/FreeImage/PluginPCX.cpp Source/FreeImage/PluginPFM.cpp Source/FreeImage/PluginPICT.cpp Source/FreeImage/PluginPNG.cpp Source/FreeImage/PluginPNM.cpp Source/FreeImage/PluginPSD.cpp Source/FreeImage/PluginRAS.cpp Source/FreeImage/PluginRAW.cpp Source/FreeImage/PluginSGI.cpp Source/FreeImage/PluginTARGA.cpp Source/FreeImage/PluginTIFF.cpp Source/FreeImage/PluginWBMP.cpp Source/FreeImage/PluginWebP.cpp Source/FreeImage/PluginXBM.cpp Source/FreeImage/PluginXPM.cpp Source/FreeImage/TIFFLogLuv.cpp Source/FreeImage/ToneMapping.cpp Source/FreeImage/WuQuantizer.cpp Source/FreeImage/ZLibInterface.cpp Source/FreeImage/tmoColorConvert.cpp Source/FreeImage/tmoDrago03.cpp Source/FreeImage/tmoFattal02.cpp Source/FreeImage/tmoReinhard05.cpp Source/FreeImageToolkit/BSplineRotate.cpp Source/FreeImageToolkit/Background.cpp Source/FreeImageToolkit/Channels.cpp Source/FreeImageToolkit/ClassicRotate.cpp Source/FreeImageToolkit/Colors.cpp Source/FreeImageToolkit/CopyPaste.cpp Source/FreeImageToolkit/Display.cpp Source/FreeImageToolkit/Flip.cpp Source/FreeImageToolkit/MultigridPoissonSolver.cpp Source/FreeImageToolkit/Rescale.cpp Source/FreeImageToolkit/Resize.cpp Source/Metadata/Exif.cpp Source/Metadata/FIRational.cpp Source/Metadata/FreeImageTag.cpp Source/Metadata/IPTC.cpp Source/Metadata/TagConversion.cpp Source/Metadata/TagLib.cpp Source/Metadata/XTIFF.cpp ++SRCS = Source/FreeImage/BitmapAccess.cpp Source/FreeImage/CacheFile.cpp Source/FreeImage/ColorLookup.cpp Source/FreeImage/Conversion.cpp Source/FreeImage/Conversion16_555.cpp Source/FreeImage/Conversion16_565.cpp Source/FreeImage/Conversion24.cpp Source/FreeImage/Conversion32.cpp Source/FreeImage/Conversion4.cpp Source/FreeImage/Conversion8.cpp Source/FreeImage/ConversionFloat.cpp Source/FreeImage/ConversionRGB16.cpp Source/FreeImage/ConversionRGBA16.cpp Source/FreeImage/ConversionRGBAF.cpp Source/FreeImage/ConversionRGBF.cpp Source/FreeImage/ConversionType.cpp Source/FreeImage/ConversionUINT16.cpp Source/FreeImage/FreeImage.cpp Source/FreeImage/FreeImageC.c Source/FreeImage/FreeImageIO.cpp Source/FreeImage/GetType.cpp Source/FreeImage/Halftoning.cpp Source/FreeImage/J2KHelper.cpp Source/FreeImage/LFPQuantizer.cpp Source/FreeImage/MNGHelper.cpp Source/FreeImage/MemoryIO.cpp Source/FreeImage/MultiPage.cpp Source/FreeImage/NNQuantizer.cpp Source/FreeImage/PSDParser.cpp Source/FreeImage/PixelAccess.cpp Source/FreeImage/Plugin.cpp Source/FreeImage/PluginBMP.cpp Source/FreeImage/PluginCUT.cpp Source/FreeImage/PluginDDS.cpp Source/FreeImage/PluginG3.cpp Source/FreeImage/PluginGIF.cpp Source/FreeImage/PluginHDR.cpp Source/FreeImage/PluginICO.cpp Source/FreeImage/PluginIFF.cpp Source/FreeImage/PluginJ2K.cpp Source/FreeImage/PluginJNG.cpp Source/FreeImage/PluginJP2.cpp Source/FreeImage/PluginJPEG.cpp Source/FreeImage/PluginKOALA.cpp Source/FreeImage/PluginMNG.cpp Source/FreeImage/PluginPCD.cpp Source/FreeImage/PluginPCX.cpp Source/FreeImage/PluginPFM.cpp Source/FreeImage/PluginPICT.cpp Source/FreeImage/PluginPNG.cpp Source/FreeImage/PluginPNM.cpp Source/FreeImage/PluginPSD.cpp Source/FreeImage/PluginRAS.cpp Source/FreeImage/PluginRAW.cpp Source/FreeImage/PluginSGI.cpp Source/FreeImage/PluginTARGA.cpp Source/FreeImage/PluginWBMP.cpp Source/FreeImage/PluginXBM.cpp Source/FreeImage/PluginXPM.cpp Source/FreeImage/ToneMapping.cpp Source/FreeImage/WuQuantizer.cpp Source/FreeImage/ZLibInterface.cpp Source/FreeImage/tmoColorConvert.cpp Source/FreeImage/tmoDrago03.cpp Source/FreeImage/tmoFattal02.cpp Source/FreeImage/tmoReinhard05.cpp Source/FreeImageToolkit/BSplineRotate.cpp Source/FreeImageToolkit/Background.cpp Source/FreeImageToolkit/Channels.cpp Source/FreeImageToolkit/ClassicRotate.cpp Source/FreeImageToolkit/Colors.cpp Source/FreeImageToolkit/CopyPaste.cpp Source/FreeImageToolkit/Display.cpp Source/FreeImageToolkit/Flip.cpp Source/FreeImageToolkit/MultigridPoissonSolver.cpp Source/FreeImageToolkit/Rescale.cpp Source/FreeImageToolkit/Resize.cpp Source/Metadata/Exif.cpp Source/Metadata/FIRational.cpp Source/Metadata/FreeImageTag.cpp Source/Metadata/IPTC.cpp Source/Metadata/TagConversion.cpp Source/Metadata/TagLib.cpp + INCLS = Source/CacheFile.h Source/FreeImage.h Source/FreeImage/J2KHelper.h Source/FreeImage/PSDParser.h Source/FreeImageIO.h Source/FreeImageToolkit/Filters.h Source/FreeImageToolkit/Resize.h Source/MapIntrospector.h Source/Metadata/FIRational.h Source/Metadata/FreeImageTag.h Source/Plugin.h Source/Quantizers.h Source/ToneMapping.h Source/Utilities.h +-INCLUDE = -I. -ISource -ISource/Metadata -ISource/FreeImageToolkit -ISource/LibJPEG -ISource/LibPNG -ISource/LibTIFF4 -ISource/ZLib -ISource/LibOpenJPEG -ISource/OpenEXR -ISource/OpenEXR/Half -ISource/OpenEXR/Iex -ISource/OpenEXR/IlmImf -ISource/OpenEXR/IlmThread -ISource/OpenEXR/Imath -ISource/OpenEXR/IexMath -ISource/LibRawLite -ISource/LibRawLite/dcraw -ISource/LibRawLite/internal -ISource/LibRawLite/libraw -ISource/LibRawLite/src -ISource/LibWebP -ISource/LibJXR -ISource/LibJXR/common/include -ISource/LibJXR/image/sys -ISource/LibJXR/jxrgluelib ++INCLUDE = -I. -ISource -ISource/Metadata -ISource/FreeImageToolkit -ISource/LibJPEG -ISource/LibPNG -ISource/ZLib -ISource/LibOpenJPEG -ISource/LibRawLite -ISource/LibRawLite/dcraw -ISource/LibRawLite/internal -ISource/LibRawLite/libraw -ISource/LibRawLite/src +--- a/Source/FreeImage/Plugin.cpp 2017-02-18 16:09:28.000000000 +0100 ++++ b/Source/FreeImage/Plugin.cpp 2024-12-19 19:03:31.000000000 +0100 +@@ -254,27 +254,20 @@ + s_plugins->AddNode(InitPNM, NULL, "PPMRAW", "Portable Pixelmap (RAW)", "ppm", "^P6"); + s_plugins->AddNode(InitRAS); + s_plugins->AddNode(InitTARGA); +- s_plugins->AddNode(InitTIFF); + s_plugins->AddNode(InitWBMP); + s_plugins->AddNode(InitPSD); + s_plugins->AddNode(InitCUT); + s_plugins->AddNode(InitXBM); + s_plugins->AddNode(InitXPM); + s_plugins->AddNode(InitDDS); +- s_plugins->AddNode(InitGIF); +- s_plugins->AddNode(InitHDR); +- s_plugins->AddNode(InitG3); ++ s_plugins->AddNode(InitGIF); ++ s_plugins->AddNode(InitHDR); + s_plugins->AddNode(InitSGI); +- s_plugins->AddNode(InitEXR); + s_plugins->AddNode(InitJ2K); + s_plugins->AddNode(InitJP2); + s_plugins->AddNode(InitPFM); + s_plugins->AddNode(InitPICT); + s_plugins->AddNode(InitRAW); +- s_plugins->AddNode(InitWEBP); +-#if !(defined(_MSC_VER) && (_MSC_VER <= 1310)) +- s_plugins->AddNode(InitJXR); +-#endif // unsupported by MS Visual Studio 2003 !!! + + // external plugin initialization + +--- a/Source/FreeImage.h 2024-12-19 19:05:24.238963346 +0100 ++++ b/Source/FreeImage.h 2024-12-19 19:04:39.000000000 +0100 +@@ -403,7 +403,6 @@ + FIF_PPMRAW = 15, + FIF_RAS = 16, + FIF_TARGA = 17, +- FIF_TIFF = 18, + FIF_WBMP = 19, + FIF_PSD = 20, + FIF_CUT = 21, +@@ -412,16 +411,12 @@ + FIF_DDS = 24, + FIF_GIF = 25, + FIF_HDR = 26, +- FIF_FAXG3 = 27, + FIF_SGI = 28, +- FIF_EXR = 29, + FIF_J2K = 30, + FIF_JP2 = 31, + FIF_PFM = 32, + FIF_PICT = 33, +- FIF_RAW = 34, +- FIF_WEBP = 35, +- FIF_JXR = 36 ++ FIF_RAW = 34 + }; + + /** Image type used in FreeImage. +@@ -678,15 +673,6 @@ + #define BMP_SAVE_RLE 1 + #define CUT_DEFAULT 0 + #define DDS_DEFAULT 0 +-#define EXR_DEFAULT 0 //! save data as half with piz-based wavelet compression +-#define EXR_FLOAT 0x0001 //! save data as float instead of as half (not recommended) +-#define EXR_NONE 0x0002 //! save with no compression +-#define EXR_ZIP 0x0004 //! save with zlib compression, in blocks of 16 scan lines +-#define EXR_PIZ 0x0008 //! save with piz-based wavelet compression +-#define EXR_PXR24 0x0010 //! save with lossy 24-bit float compression +-#define EXR_B44 0x0020 //! save with lossy 44% float compression - goes to 22% when combined with EXR_LC +-#define EXR_LC 0x0040 //! save images with one luminance and two chroma channels, rather than as RGB (lossy compression) +-#define FAXG3_DEFAULT 0 + #define GIF_DEFAULT 0 + #define GIF_LOAD256 1 //! load the image as a 256 color image with ununsed palette entries, if it's 16 or 2 color + #define GIF_PLAYBACK 2 //! 'Play' the GIF to generate each frame (as 32bpp) instead of returning raw frame data when loading +@@ -750,25 +736,9 @@ + #define TARGA_DEFAULT 0 + #define TARGA_LOAD_RGB888 1 //! if set the loader converts RGB555 and ARGB8888 -> RGB888. + #define TARGA_SAVE_RLE 2 //! if set, the writer saves with RLE compression +-#define TIFF_DEFAULT 0 +-#define TIFF_CMYK 0x0001 //! reads/stores tags for separated CMYK (use | to combine with compression flags) +-#define TIFF_PACKBITS 0x0100 //! save using PACKBITS compression +-#define TIFF_DEFLATE 0x0200 //! save using DEFLATE compression (a.k.a. ZLIB compression) +-#define TIFF_ADOBE_DEFLATE 0x0400 //! save using ADOBE DEFLATE compression +-#define TIFF_NONE 0x0800 //! save without any compression +-#define TIFF_CCITTFAX3 0x1000 //! save using CCITT Group 3 fax encoding +-#define TIFF_CCITTFAX4 0x2000 //! save using CCITT Group 4 fax encoding +-#define TIFF_LZW 0x4000 //! save using LZW compression +-#define TIFF_JPEG 0x8000 //! save using JPEG compression +-#define TIFF_LOGLUV 0x10000 //! save using LogLuv compression + #define WBMP_DEFAULT 0 + #define XBM_DEFAULT 0 + #define XPM_DEFAULT 0 +-#define WEBP_DEFAULT 0 //! save with good quality (75:1) +-#define WEBP_LOSSLESS 0x100 //! save in lossless mode +-#define JXR_DEFAULT 0 //! save with quality 80 and no chroma subsampling (4:4:4) +-#define JXR_LOSSLESS 0x0064 //! save lossless +-#define JXR_PROGRESSIVE 0x2000 //! save as a progressive-JXR (use | to combine with other save flags) + + // Background filling options --------------------------------------------------------- + // Constants used in FreeImage_FillBackground and FreeImage_EnlargeCanvas +--- a/Source/Plugin.h 2017-02-18 16:09:28.000000000 +0100 ++++ b/Source/Plugin.h 2024-12-19 19:04:54.000000000 +0100 +@@ -122,23 +122,18 @@ + void DLL_CALLCONV InitPSD(Plugin *plugin, int format_id); + void DLL_CALLCONV InitRAS(Plugin *plugin, int format_id); + void DLL_CALLCONV InitTARGA(Plugin *plugin, int format_id); +-void DLL_CALLCONV InitTIFF(Plugin *plugin, int format_id); + void DLL_CALLCONV InitWBMP(Plugin *plugin, int format_id); + void DLL_CALLCONV InitXBM(Plugin *plugin, int format_id); + void DLL_CALLCONV InitXPM(Plugin *plugin, int format_id); + void DLL_CALLCONV InitDDS(Plugin *plugin, int format_id); + void DLL_CALLCONV InitGIF(Plugin *plugin, int format_id); + void DLL_CALLCONV InitHDR(Plugin *plugin, int format_id); +-void DLL_CALLCONV InitG3(Plugin *plugin, int format_id); + void DLL_CALLCONV InitSGI(Plugin *plugin, int format_id); +-void DLL_CALLCONV InitEXR(Plugin *plugin, int format_id); + void DLL_CALLCONV InitJ2K(Plugin *plugin, int format_id); + void DLL_CALLCONV InitJP2(Plugin *plugin, int format_id); + void DLL_CALLCONV InitPFM(Plugin *plugin, int format_id); + void DLL_CALLCONV InitPICT(Plugin *plugin, int format_id); + void DLL_CALLCONV InitRAW(Plugin *plugin, int format_id); + void DLL_CALLCONV InitJNG(Plugin *plugin, int format_id); +-void DLL_CALLCONV InitWEBP(Plugin *plugin, int format_id); +-void DLL_CALLCONV InitJXR(Plugin *plugin, int format_id); + + #endif //!PLUGIN_H +--- /dev/null 2024-11-01 21:59:53.158793231 +0100 ++++ b/Source/FreeImage/GetType.cpp 2024-12-19 19:30:44.660241140 +0100 +@@ -0,0 +1,163 @@ ++// ========================================================== ++// GetType / Validate ++// ++// Design and implementation by ++// - Floris van den Berg (flvdberg@wxs.nl) ++// - HervĂ© Drolon (drolon@infonie.fr) ++// ++// This file is part of FreeImage 3 ++// ++// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY ++// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES ++// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE ++// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED ++// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT ++// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY ++// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL ++// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER ++// THIS DISCLAIMER. ++// ++// Use at your own risk! ++// ========================================================== ++ ++#ifdef _MSC_VER ++#pragma warning (disable : 4786) // identifier was truncated to 'number' characters ++#endif ++ ++#include "FreeImage.h" ++#include "Utilities.h" ++#include "FreeImageIO.h" ++#include "Plugin.h" ++ ++// ===================================================================== ++// Generic stream file type access ++// ===================================================================== ++ ++FREE_IMAGE_FORMAT DLL_CALLCONV ++FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size) { ++ if (handle != NULL) { ++ int fif_count = FreeImage_GetFIFCount(); ++ ++ for (int i = 0; i < fif_count; ++i) { ++ FREE_IMAGE_FORMAT fif = (FREE_IMAGE_FORMAT)i; ++ if (FreeImage_ValidateFIF(fif, io, handle)) { ++ // many camera raw files use a TIFF signature ... ++ // ... try to revalidate against FIF_RAW (even if it breaks the code genericity) ++ if (FreeImage_ValidateFIF(FIF_RAW, io, handle)) { ++ return FIF_RAW; ++ } ++ return fif; ++ } ++ } ++ } ++ ++ return FIF_UNKNOWN; ++} ++ ++// ===================================================================== ++// File stream file type access ++// ===================================================================== ++ ++FREE_IMAGE_FORMAT DLL_CALLCONV ++FreeImage_GetFileType(const char *filename, int size) { ++ FreeImageIO io; ++ SetDefaultIO(&io); ++ ++ FILE *handle = fopen(filename, "rb"); ++ ++ if (handle != NULL) { ++ FREE_IMAGE_FORMAT format = FreeImage_GetFileTypeFromHandle(&io, (fi_handle)handle, size); ++ ++ fclose(handle); ++ ++ return format; ++ } ++ ++ return FIF_UNKNOWN; ++} ++ ++FREE_IMAGE_FORMAT DLL_CALLCONV ++FreeImage_GetFileTypeU(const wchar_t *filename, int size) { ++#ifdef _WIN32 ++ FreeImageIO io; ++ SetDefaultIO(&io); ++ FILE *handle = _wfopen(filename, L"rb"); ++ ++ if (handle != NULL) { ++ FREE_IMAGE_FORMAT format = FreeImage_GetFileTypeFromHandle(&io, (fi_handle)handle, size); ++ ++ fclose(handle); ++ ++ return format; ++ } ++#endif ++ return FIF_UNKNOWN; ++} ++ ++// ===================================================================== ++// Memory stream file type access ++// ===================================================================== ++ ++FREE_IMAGE_FORMAT DLL_CALLCONV ++FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size) { ++ FreeImageIO io; ++ SetMemoryIO(&io); ++ ++ if (stream != NULL) { ++ return FreeImage_GetFileTypeFromHandle(&io, (fi_handle)stream, size); ++ } ++ ++ return FIF_UNKNOWN; ++} ++ ++// -------------------------------------------------------------------------- ++ ++BOOL DLL_CALLCONV ++FreeImage_ValidateFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle) { ++ return FreeImage_ValidateFIF(fif, io, handle); ++} ++ ++BOOL DLL_CALLCONV ++FreeImage_Validate(FREE_IMAGE_FORMAT fif, const char *filename) { ++ FreeImageIO io; ++ SetDefaultIO(&io); ++ ++ FILE *handle = fopen(filename, "rb"); ++ ++ if (handle != NULL) { ++ BOOL bIsValidFIF = FreeImage_ValidateFromHandle(fif, &io, (fi_handle)handle); ++ fclose(handle); ++ return bIsValidFIF; ++ } ++ ++ return FALSE; ++} ++ ++BOOL DLL_CALLCONV ++FreeImage_ValidateU(FREE_IMAGE_FORMAT fif, const wchar_t *filename) { ++#ifdef _WIN32 ++ FreeImageIO io; ++ SetDefaultIO(&io); ++ FILE *handle = _wfopen(filename, L"rb"); ++ ++ if (handle != NULL) { ++ BOOL bIsValidFIF = FreeImage_ValidateFromHandle(fif, &io, (fi_handle)handle); ++ fclose(handle); ++ return bIsValidFIF; ++ } ++#endif ++ return FALSE; ++} ++ ++BOOL DLL_CALLCONV ++FreeImage_ValidateFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream) { ++ FreeImageIO io; ++ SetMemoryIO(&io); ++ ++ if (stream != NULL) { ++ BOOL bIsValidFIF = FreeImage_ValidateFromHandle(fif, &io, (fi_handle)stream); ++ return bIsValidFIF; ++ } ++ ++ return FALSE; ++} diff --git a/freenginx/PKGBUILD b/freenginx/PKGBUILD new file mode 100644 index 0000000..d13eb81 --- /dev/null +++ b/freenginx/PKGBUILD @@ -0,0 +1,133 @@ +# Maintainer: Jesus E. + +# Based on nginx package + +pkgname=freenginx +pkgver=1.26.0 +pkgrel=1 +pkgdesc="Lightweight, free and libre HTTP server and IMAP/POP3 proxy server" +arch=('i686' 'x86_64') +url='https://freenginx.org' +license=('Simplified-BSD') +depends=('pcre' 'zlib' 'libressl' 'geoip') +makedepends=('quilt') +optdepends=('logger: message logging support') +backup=('etc/freenginx/fastcgi.conf' + 'etc/freenginx/fastcgi_params' + 'etc/freenginx/koi-win' + 'etc/freenginx/koi-utf' + 'etc/freenginx/mime.types' + 'etc/freenginx/freenginx.conf' + 'etc/freenginx/scgi_params' + 'etc/freenginx/uwsgi_params' + 'etc/freenginx/win-utf' + 'etc/logrotate.d/freenginx' + 'etc/conf.d/freenginx') +conflicts=('nginx') +replaces=('nginx') +source=("https://freenginx.org/download/${pkgname}-${pkgver}.tar.gz"{,.asc} + "logrotate" + "freenginx.confd" + "freenginx.initd" + "freenginx.run") +sha512sums=('5804671c8195c00cb52440585dd84d3fb77964624a8154e2f8c523f859c3d2bd0e35872945acbb3b2edd53c6789938e059208cac8463ff87f1be07b17ca99164' + 'SKIP' + 'e058ff261ab5b810faa39526113553fc560b811b01879998d15fbde9ea4827662b007181f15c94daf4174584cece0327b6b4a143a034e1fb7f97484b5b401672' + '26ad9c7577286ae4e095991344c6d1abcab32e3f5e71ed53ae6eb53193e2447d52026ef0182750797c226f49bcc5fdf8c62698e90c4ef0d8eafff92bfdd5ed83' + '9fd98df5970358cf5a14e7511028d2c7e4f0d8cc5357d92280ca0adcdf6ef26875963a5c6c552fd4e6969a3a795b7258ea057c1df7941ced169864145469c859' + '58024c8091f101bb5f4a5cfbfb77259f0f620ec858e680543c8c2d2a114fa9ce33c08bf8c0fbc8c047704e92106cd717f4526d868054784a2f9676f73566aff9') +validpgpkeys=('B0F4253373F8F6F510D42178520A9993A1C052F8') # Maxim Dounin + +_common_flags=( + --with-compat + --with-debug + --with-file-aio + --with-http_addition_module + --with-http_auth_request_module + --with-http_dav_module + --with-http_degradation_module + --with-http_flv_module + --with-http_geoip_module + --with-http_gunzip_module + --with-http_gzip_static_module + --with-http_mp4_module + --with-http_realip_module + --with-http_secure_link_module + --with-http_slice_module + --with-http_ssl_module + --with-http_stub_status_module + --with-http_sub_module + --with-http_v2_module + --with-mail + --with-mail_ssl_module + --with-pcre-jit + --with-stream + --with-stream_geoip_module + --with-stream_realip_module + --with-stream_ssl_module + --with-stream_ssl_preread_module + --with-threads +) + +_stable_flags=( +) + +build() { + cd "${pkgname}-${pkgver}" + + ./configure \ + --prefix=/etc/freenginx \ + --conf-path=/etc/freenginx/freenginx.conf \ + --sbin-path=/usr/sbin/freenginx \ + --pid-path=/run/freenginx.pid \ + --lock-path=/run/lock/freenginx.lock \ + --user=http \ + --group=http \ + --http-log-path=/var/log/freenginx/access.log \ + --error-log-path=stderr \ + --http-client-body-temp-path=/var/lib/freenginx/client-body \ + --http-proxy-temp-path=/var/lib/freenginx/proxy \ + --http-fastcgi-temp-path=/var/lib/freenginx/fastcgi \ + --http-scgi-temp-path=/var/lib/freenginx/scgi \ + --http-uwsgi-temp-path=/var/lib/freenginx/uwsgi \ + ${_common_flags[@]} \ + ${_stable_flags[@]} + + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + sed -e 's|\ + +pkgname=freeorion +pkgver=0.4.10.2 +pkgrel=1 +pkgdesc='A free, turn-based space empire and galactic conquest computer game' +url='https://www.freeorion.org' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('boost-libs' 'python' 'tauthon' 'sdl2' 'libvorbis' + 'glew' 'openal' 'hicolor-icon-theme' 'freetype2') +makedepends=('boost' 'cmake' 'ninja') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/freeorion/freeorion/archive/v${pkgver}.tar.gz" + "fix-directories.patch") +sha512sums=('13832992efe17fe48615ccdf284d1e9f391c35ed518abd15276992128a02894f4b30c8fe3d950e41935efb823cf834dc430330f0bcc6c9e91f13a3dea9812628' + '010c5f9019e4c1675bf54d4f7d6492ec3b139ad948bf1957023d215666b56fad39eb8dd158aef3d06c9b08fa92a1620618d994a2e161dc9563cb59f188494bcc') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + # fixing data-directories being FHS-compliant + patch -Np1 -i "${srcdir}/fix-directories.patch" +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + cmake \ + -Bbuild \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_BINDIR=games \ + -DCMAKE_INSTALL_LIBDIR=lib/games \ + -DCMAKE_INSTALL_DATADIR=share/games + ninja -C build +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 README.md -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/freeorion/fix-directories.patch b/freeorion/fix-directories.patch new file mode 100644 index 0000000..f5e1600 --- /dev/null +++ b/freeorion/fix-directories.patch @@ -0,0 +1,15 @@ +--- a/util/Directories.cpp 2021-08-01 13:40:55.000000000 +0200 ++++ b/util/Directories.cpp 2021-09-03 16:45:51.397237877 +0200 +@@ -290,9 +290,9 @@ + + const fs::path GetRootDataDir() { + if (!g_initialized) InitDirs(""); +- char* dir_name = br_find_data_dir(SHAREPATH); +- fs::path p(dir_name); +- std::free(dir_name); ++ //char* dir_name = br_find_data_dir(SHAREPATH); ++ fs::path p("/usr/share/games"); ++ //std::free(dir_name); + p /= "freeorion"; + // if the path does not exist, we fall back to the working directory + if (!exists(p)) { diff --git a/freepats/PKGBUILD b/freepats/PKGBUILD new file mode 100644 index 0000000..d0a646b --- /dev/null +++ b/freepats/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=freepats +pkgver=20060219 +pkgrel=1 +pkgdesc="Free and libre patch set for MIDI audio synthesis" +arch=('any') +url='http://freepats.zenvoid.org/' +license=('GPL-2') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/f/freepats/freepats_${pkgver}.orig.tar.gz") +sha512sums=('e2c1485fbfff4e111cd544c8e698974860edb70eefd5f774c79f5119fd57ec534bde571f1b2de1aa56e13da0fb956b243416cc5b179e85ee3e38cf852f4c4b4f') + +package() { + cd "${pkgname}-${pkgver}/upstream" + tar -xf $pkgname-$pkgver.tar.bz2 + mkdir -p "$pkgdir/usr/share/midi/freepats" + mkdir -p "$pkgdir/usr/share/doc/freepats/examples" + cp -R freepats/Drum_000 "$pkgdir/usr/share/midi/freepats" + cp -R freepats/Tone_000 "$pkgdir/usr/share/midi/freepats" + + install -Dm644 "freepats/"{crude,freepats}.cfg -t "$pkgdir/usr/share/doc/freepats/examples" + install -Dm644 "freepats/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/freerdp/PKGBUILD b/freerdp/PKGBUILD new file mode 100644 index 0000000..ea68e4e --- /dev/null +++ b/freerdp/PKGBUILD @@ -0,0 +1,82 @@ +# Maintainer: Jesus E. + +_name=FreeRDP +pkgname=freerdp +pkgver=2.3.0 +_debver=$pkgver +_debrel=2 +pkgrel=4 +pkgdesc="Free and libre implementation of the Remote Desktop Protocol (RDP)" +arch=('i686' 'x86_64') +url='https://www.freerdp.com/' +license=('Apache-2.0') +depends=('gstreamer' 'gst-plugins-base-libs' 'libcups' 'ffmpeg' 'icu' 'libjpeg-turbo' 'libusb' + 'libx11' 'libxcursor' 'libxext' 'libxdamage' 'libxfixes' 'libxkbcommon' 'libxi' + 'libxinerama' 'libxkbfile' 'libxrandr' 'libxrender' 'libxtst' 'libressl') +makedepends=('cmake' 'docbook-xsl' 'krb5' 'xmlto' 'xenocara-proto' 'quilt') +if [ $(uname -s) = HyperbolaBSD ]; then + _alsa=OFF + _oss=ON +else + _alsa=ON + _oss=OFF + depends+=(alsa-lib) +fi +source=($pkgname-$pkgver.tar.gz::https://github.com/$pkgname/$pkgname/archive/$pkgver.tar.gz + https://security.debian.org/debian-security/pool/updates/main/f/freerdp2/freerdp2_$_debver+dfsg1-$_debrel+deb11u3.debian.tar.xz + manpage_formatting.patch) +sha512sums=('e1e1fd54c51b3404c188b621b15ddcbef279868e8e10233b64fd281ef0f03b05545e32b21520f9260141e06ee9864fbb6b6489c22ab99642d2f3bb50a9967731' + '59cdc8409c9140ce47b357fde56bba84699e7d60dc5101492250ee3e7bace814cd478ae78631a6099f3d218b28111910ae38ca8a9e1c7dd83dc4f842f97da029' + 'd960e042d1527b5d5721136b6b20fc36f65beafd010581ea5b908668537fe9fe622de6689a29c0274b0d6f1e513615f0d02e56c1d1d1e613d093e145d39af8d7') + +prepare() { + cd "$srcdir/$_name-$pkgver" + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES='debian/patches' + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir/debian" . + + quilt push -av + fi + + # fix man page formatting + patch -p1 -i $srcdir/manpage_formatting.patch +} + +build() { + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=None \ + -DPROXY_PLUGINDIR=/usr/lib/freerdp2/server/proxy/plugins \ + -DWITH_DSP_FFMPEG=ON \ + -DWITH_FFMPEG=ON \ + -DWITH_PULSE=OFF \ + -DWITH_LIBSYSTEMD=OFF \ + -DWITH_WAYLAND=OFF \ + -DWITH_MBEDTLS=OFF \ + -DWITH_ALSA=$_alsa \ + -DWITH_OSS=$_oss \ + -DWITH_CUPS=ON \ + -DWITH_PCSC=OFF \ + -DWITH_GSSAPI=OFF \ + -DWITH_ICU=ON \ + -DWITH_JPEG=ON \ + -DWITH_SERVER=ON \ + -DWITH_SWSCALE=ON \ + -DWITH_CHANNELS=ON \ + -DWITH_CLIENT_CHANNELS=ON \ + -DWITH_SERVER_CHANNELS=ON \ + -DCHANNEL_URBDRC_CLIENT=ON \ + -Wno-dev \ + -B $srcdir/build \ + -S $srcdir/$_name-$pkgver + make -C build +} + +package() { + make DESTDIR="$pkgdir" install -C "$srcdir/build" + install -Dvm644 "$srcdir/$_name-$pkgver/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/freerdp/manpage_formatting.patch b/freerdp/manpage_formatting.patch new file mode 100644 index 0000000..ed252a8 --- /dev/null +++ b/freerdp/manpage_formatting.patch @@ -0,0 +1,12 @@ +diff -ruN a/cmake/FindDocBookXSL.cmake b/cmake/FindDocBookXSL.cmake +--- a/cmake/FindDocBookXSL.cmake 2018-11-20 11:43:51.000000000 +0100 ++++ b/cmake/FindDocBookXSL.cmake 2020-01-30 10:37:44.827482448 +0100 +@@ -30,7 +30,7 @@ + set (STYLESHEET_PATH_LIST) + foreach (STYLESHEET_PREFIX_ITER ${CMAKE_SYSTEM_PREFIX_PATH}) + file(GLOB STYLESHEET_SUFFIX_ITER RELATIVE ${STYLESHEET_PREFIX_ITER} +- ${STYLESHEET_PREFIX_ITER}/share/xml/docbook/xsl-stylesheets-* ++ ${STYLESHEET_PREFIX_ITER}/share/xml/docbook/xsl-stylesheets-*-nons + ) + if (STYLESHEET_SUFFIX_ITER) + list (APPEND STYLESHEET_PATH_LIST ${STYLESHEET_SUFFIX_ITER}) diff --git a/freetype2/0001-Enable-table-validation-modules.patch b/freetype2/0001-Enable-table-validation-modules.patch new file mode 100644 index 0000000..f3ceb15 --- /dev/null +++ b/freetype2/0001-Enable-table-validation-modules.patch @@ -0,0 +1,45 @@ +From 434eca71f2d570fd0ae711fbcbad11eda043e37c Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Tue, 23 Jun 2015 08:40:29 +0200 +Subject: [PATCH 1/4] Enable table validation modules + +--- + modules.cfg | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.cfg b/modules.cfg +index dc6c8d42d..2ab145016 100644 +--- a/modules.cfg ++++ b/modules.cfg +@@ -111,26 +111,26 @@ AUX_MODULES += cache + + # TrueType GX/AAT table validation. Needs `ftgxval.c' below. + # +-# AUX_MODULES += gxvalid ++AUX_MODULES += gxvalid + + # Support for streams compressed with gzip (files with suffix .gz). + # + # See include/freetype/ftgzip.h for the API. + AUX_MODULES += gzip + + # Support for streams compressed with LZW (files with suffix .Z). + # + # See include/freetype/ftlzw.h for the API. + AUX_MODULES += lzw + + # Support for streams compressed with bzip2 (files with suffix .bz2). + # + # See include/freetype/ftbzip2.h for the API. + AUX_MODULES += bzip2 + + # OpenType table validation. Needs `ftotval.c' below. + # +-# AUX_MODULES += otvalid ++AUX_MODULES += otvalid + + # Auxiliary PostScript driver component to share common code. + # +-- +2.25.1 + diff --git a/freetype2/0002-Enable-infinality-subpixel-hinting.patch b/freetype2/0002-Enable-infinality-subpixel-hinting.patch new file mode 100644 index 0000000..74503b6 --- /dev/null +++ b/freetype2/0002-Enable-infinality-subpixel-hinting.patch @@ -0,0 +1,27 @@ +From 782c6bf852905f655b0cfc0e59038248e1b096e0 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Mon, 29 Aug 2016 08:43:10 +0200 +Subject: [PATCH 2/4] Enable infinality subpixel hinting + +--- + include/freetype/config/ftoption.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h +index 12f47a82e..1d4469a99 100644 +--- a/include/freetype/config/ftoption.h ++++ b/include/freetype/config/ftoption.h +@@ -658,8 +658,8 @@ FT_BEGIN_HEADER + * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx + */ + /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */ +-#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 +-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */ ++/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 */ ++#define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) + + + /************************************************************************** +-- +2.25.1 + diff --git a/freetype2/0003-Enable-long-PCF-family-names.patch b/freetype2/0003-Enable-long-PCF-family-names.patch new file mode 100644 index 0000000..f609f0f --- /dev/null +++ b/freetype2/0003-Enable-long-PCF-family-names.patch @@ -0,0 +1,25 @@ +From 889a7d2febe8ef1a710af578913763ee49cba3aa Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Sun, 14 May 2017 18:09:31 +0200 +Subject: [PATCH 3/4] Enable long PCF family names + +--- + include/freetype/config/ftoption.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h +index 1d4469a99..4ff4e7821 100644 +--- a/include/freetype/config/ftoption.h ++++ b/include/freetype/config/ftoption.h +@@ -847,7 +847,7 @@ FT_BEGIN_HEADER + * If this option is activated, it can be controlled with the + * `no-long-family-names` property of the 'pcf' driver module. + */ +-/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ ++#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES + + + /*************************************************************************/ +-- +2.25.1 + diff --git a/freetype2/0004-Properly-handle-phantom-points-for-variation-fonts-5.patch b/freetype2/0004-Properly-handle-phantom-points-for-variation-fonts-5.patch new file mode 100644 index 0000000..3f498d6 --- /dev/null +++ b/freetype2/0004-Properly-handle-phantom-points-for-variation-fonts-5.patch @@ -0,0 +1,60 @@ +From 2d7a2292f80368125c08f3818faf6926bcc9eb5d Mon Sep 17 00:00:00 2001 +From: Ben Wagner +Date: Fri, 12 Jul 2019 10:48:10 +0200 +Subject: [PATCH 4/4] Properly handle phantom points for variation fonts + (#56601). + +* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Scale phantom +points if HVAR and/or VVAR is present. +--- + src/truetype/ttgload.c | 27 +++++++++++++++++++++------ + 1 file changed, 21 insertions(+), 6 deletions(-) + +diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c +index a04684086..093eed839 100644 +--- a/src/truetype/ttgload.c ++++ b/src/truetype/ttgload.c +@@ -1102,19 +1102,34 @@ + } + + #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +- /* if we have a HVAR table, `pp1' and/or `pp2' are already adjusted */ +- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) || +- !IS_HINTED( loader->load_flags ) ) ++ /* if we have a HVAR table, `pp1' and/or `pp2' */ ++ /* are already adjusted but unscaled */ ++ if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) && ++ IS_HINTED( loader->load_flags ) ) ++ { ++ loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale ); ++ loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale ); ++ /* pp1.y and pp2.y are always zero */ ++ } ++ else + #endif + { + loader->pp1 = outline->points[n_points - 4]; + loader->pp2 = outline->points[n_points - 3]; + } + + #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT +- /* if we have a VVAR table, `pp3' and/or `pp4' are already adjusted */ +- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) || +- !IS_HINTED( loader->load_flags ) ) ++ /* if we have a VVAR table, `pp3' and/or `pp4' */ ++ /* are already adjusted but unscaled */ ++ if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) && ++ IS_HINTED( loader->load_flags ) ) ++ { ++ loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale ); ++ loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale ); ++ loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale ); ++ loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale ); ++ } ++ else + #endif + { + loader->pp3 = outline->points[n_points - 2]; +-- +2.25.1 + diff --git a/freetype2/0005-freetype-2.5.2-more-demos.patch b/freetype2/0005-freetype-2.5.2-more-demos.patch new file mode 100644 index 0000000..e737cb7 --- /dev/null +++ b/freetype2/0005-freetype-2.5.2-more-demos.patch @@ -0,0 +1,17 @@ +--- ft2demos-2.5.2/Makefile ++++ ft2demos-2.5.2/Makefile +@@ -296,10 +296,10 @@ else + # The following programs are not compiled automatically; either comment + # out the affected line or use the program name as a Makefile target. + # +- # EXES += ftchkwd +- # EXES += ftmemchk +- # EXES += ftpatchk +- # EXES += fttimer ++ EXES += ftchkwd ++ EXES += ftmemchk ++ EXES += ftpatchk ++ EXES += fttimer + # EXES += testname + + exes: $(EXES:%=$(BIN_DIR_2)/%$E) diff --git a/freetype2/PKGBUILD b/freetype2/PKGBUILD new file mode 100644 index 0000000..7f7aeb8 --- /dev/null +++ b/freetype2/PKGBUILD @@ -0,0 +1,104 @@ +# Maintainer: Jesus E. + +pkgname=freetype2 +pkgver=2.10.2 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="Font rasterization library" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://www.freetype.org/' +install=freetype2.install +backup=('etc/profile.d/freetype2.sh') +depends=('zlib' 'bzip2' 'sh' 'libpng' 'libx11') +makedepends=('quilt') +source=(https://download-mirror.savannah.gnu.org/releases/freetype/freetype-${pkgver}.tar.xz + https://download-mirror.savannah.gnu.org/releases/freetype/freetype-doc-${pkgver}.tar.xz + https://download-mirror.savannah.gnu.org/releases/freetype/ft2demos-${pkgver}.tar.xz + https://repo.hyperbola.info:50000/sources/freetype/freetype_$_debver+dfsg-$_debrel.debian.tar.xz{,.sig} + 0001-Enable-table-validation-modules.patch + 0002-Enable-infinality-subpixel-hinting.patch + 0003-Enable-long-PCF-family-names.patch + 0004-Properly-handle-phantom-points-for-variation-fonts-5.patch + 0005-freetype-2.5.2-more-demos.patch + freetype2.sh) +sha512sums=('cf45089bd8893d7de2cdcb59d91bbb300e13dd0f0a9ef80ed697464ba7aeaf46a5a81b82b59638e6b21691754d8f300f23e1f0d11683604541d77f0f581affaa' + 'c54956a56920e651102b75c0efa07212e1d95f3bec219b8364b61d9a71171b11da492170cc861c36f3305f32ad1dee46d0d5a561ccdc6ca36591ae3f619a1d67' + '912e3c3cbcdfd30fd918897d28240e04eb7248d130fc519e7d1613873a11d275d658ff247c6d517ebecf7a09de0d05f3dc10631411226015e1b147cba9a8a438' + 'a1fe03a92aba34ccd880d9b36471b0224b98970c5e5665dd5a2816e04feb30370ba244c0a70cf64ea5b1b6921d8e762dff398e7d0879a1d4f7b77fa4572a5507' + 'SKIP' + '9f10324ee1e4a58f5047d97d55e6ca5c52e34e0213233a4a78a7f41cb8ebcb41a840214887b3e6c907c37d542da64be91e675fdb84274377741a1b9b2a104025' + '9069ef0e72ac5991231999e0e53dc6e6eedc1e072f70be46beb91f57ab1384d75aaef2f1e377825c87f7cb89b8261a9d13ce80c59845f7dc2138b76be69f0538' + '967b54d7247c78c695400dd7797aae620d7510aaa330334a378385a3d397288a0892ace6d28fd2a8858556088aecf2011fac32c18388d251bcd402889266c84e' + '3cc9bc96a2325067d5e31ecca512d03641764733a2af87aed5c6024864027cb50528cf4332107b47fdb8a67675c276953215fa9dbcea1a040a7897eb47ee64d4' + '85fefc0e7e09cb3b565afd04002ec645e464507fa91c9b2aa953b5d8d30bf222c4e7425bf5bd4800b4b2c5ae98f00c2a61de66da2a50f9a05d0063a3e1c75f9b' + 'da55cf876f28a42374972c7aa3620733a0ab60cdcb7ded57f9353c2dcb6eb9bd11dcc94b9954b71243d2acbb30ef18053b837dc9a31de1a9b443f3a92e6421c1') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + # Rename source dir to allow patching and building the demos + mv freetype-${pkgver} freetype2 + mv ft2demos-${pkgver} freetype2/ft2demos + + cd freetype2 + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Fix docs folder path + sed -i 's|ft2docs/docs|docs|g' debian/patches/* + + quilt push -av + else + patch -Np1 -i ../0001-Enable-table-validation-modules.patch + + # https://bugs.archlinux.org/task/65629 + patch -Np1 -i ../0004-Properly-handle-phantom-points-for-variation-fonts-5.patch + + # Suppress RPATH + sed -i '/X11_LIB:%=-R%/d' graph/x11/rules.mk + fi + patch -Np1 -i ../0002-Enable-infinality-subpixel-hinting.patch + patch -Np1 -i ../0003-Enable-long-PCF-family-names.patch + + mv ft2demos ../freetype2-demos + + cd ../freetype2-demos + # enable more demos + patch -Np1 -i ../0005-freetype-2.5.2-more-demos.patch +} + +build() { + cd $srcdir/freetype2 + ./configure \ + --prefix=/usr \ + --disable-static + make + + cd $srcdir/freetype2-demos + make +} + +package() { + cd $srcdir/freetype2 + make DESTDIR="${pkgdir}" install + install -Dt "${pkgdir}/etc/profile.d" -m644 ../freetype2.sh + + install -d "${pkgdir}/usr/share/doc" + cp -a docs "${pkgdir}/usr/share/doc/freetype2" + + for i in {GPLv2,LICENSE}.TXT; do + install -Dm644 docs/$i "${pkgdir}/usr/share/licenses/${pkgname}/$i" + done + + cd $srcdir/freetype2-demos + install -d "${pkgdir}/usr/bin" + for _i in bin/{f,t}t*; do + libtool --mode=install install $_i "${pkgdir}/usr/bin" + done +} diff --git a/freetype2/freetype2.install b/freetype2/freetype2.install new file mode 100644 index 0000000..8af7f6d --- /dev/null +++ b/freetype2/freetype2.install @@ -0,0 +1,8 @@ +post_upgrade() { + if (( $(vercmp $2 2.7-1) < 0 )); then + cat < + +pkgname=fribidi +pkgver=1.0.8 +_debver=1.0.8 +_debrel=2 +pkgrel=1 +pkgdesc="A Free Implementation of the Unicode Bidirectional Algorithm" +url="https://github.com/fribidi/fribidi/" +arch=(i686 x86_64) +license=(LGPL-2.1) +depends=(glibc) +makedepends=(meson quilt) +source=(https://github.com/fribidi/fribidi/releases/download/v$pkgver/$pkgname-$pkgver.tar.bz2 + https://deb.debian.org/debian/pool/main/f/fribidi/fribidi_$_debver-$_debrel.debian.tar.xz) +sha512sums=('d66b1524b26d227fd6a628f438efb875c023ae3be708acaaad11f1f62d0902de0a5f57124458291ef2b0fcd89356c52ab8ae5559b0b5a93fa435b92f1d098ba2' + '04d10d26c3ccf3a0e2782a780fcbe64f1ab47c85633ffeefb1a9251e29ff20a046509afcb30b32a2ec52a52780d5054aad2ec07517b7b667fb06ab99125f9ea3') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgname-$pkgver build \ + -D docs=false + ninja -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +# vim:set sw=2 et: diff --git a/frozen-bubble/PKGBUILD b/frozen-bubble/PKGBUILD new file mode 100644 index 0000000..661f5a3 --- /dev/null +++ b/frozen-bubble/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=frozen-bubble +pkgver=2.212 +_debver=$pkgver +_debrel=9 +pkgrel=1 +pkgdesc="A free and libre game in which you throw colorful bubbles and build groups to destroy the bubbles" +arch=('i686' 'x86_64') +url='http://www.frozen-bubble.org' +license=('GPL-2') +depends=('perl-sdl' 'perl-ipc-system-simple' 'perl-compress-bzip2' 'perl-file-which') +makedepends=('perl-file-slurp' 'perl-locale-maketext-lexicon' 'perl-module-build') +options=('!emptydirs') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/f/frozen-bubble/frozen-bubble_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/f/frozen-bubble/frozen-bubble_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('577e3e59d75b33b7b0dc0766e099ed42d6c865261b3aac3b9697563d2008de46b2574d9a7c1af24cd2e0e56edd593cf856a4ceff5411ac8d33fa61dc00945a2e' + '9e378532f6d63ed8c0c541c3f50844a7af74347038340b36db5cbb1c45553edd909d283fbf15bfda6dbf77fed57fe390d78257de72409fc48c2ee02a6861226e') + +prepare() { + mv "Games-FrozenBubble-$pkgver" "$pkgname-$pkgver" + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -e 's|-Werror||' -i inc/My/Builder.pm +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + unset CFLAGS + + # install module in vendor directories + perl Build.PL installdirs=vendor + perl Build +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + perl Build install destdir="$pkgdir" + + # correct package-structure + mv "$pkgdir/usr/bin" "$pkgdir/usr/games" + install -d "$pkgdir/usr/share/games" + mv "$pkgdir/usr/lib/perl5/auto/share/dist/Games-FrozenBubble" "$pkgdir/usr/share/games/frozen-bubble" + + # icon, desktop-shortcut and license + install -Dm644 debian/$pkgname.xpm -t "$pkgdir/usr/share/pixmaps" + install -Dm644 debian/$pkgname.desktop -t "$pkgdir/usr/share/applications" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/fsarchiver/PKGBUILD b/fsarchiver/PKGBUILD new file mode 100644 index 0000000..23e394d --- /dev/null +++ b/fsarchiver/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=fsarchiver +pkgver=0.8.6 +pkgrel=2 +pkgdesc="Safe and flexible file-system backup and deployment tool" +arch=('i686' 'x86_64') +url='https://www.fsarchiver.org/' +license=('GPL-2') +depends=('bzip2' 'e2fsprogs' 'lzo' 'xz' 'libgcrypt' 'zlib' 'lz4') +source=(https://github.com/fdupoux/fsarchiver/releases/download/$pkgver/fsarchiver-$pkgver.tar.gz) +sha512sums=('26a2d7a68d162aabb778b14f29c52cf8fbadb8147cf5eae592352a36fbf93cc45c08c241253bd8dfe8cd0b77d0f156afcc8d89e8d24a238fd4427cb479827f14') + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-zstd + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/fsearch/PKGBUILD b/fsearch/PKGBUILD new file mode 100644 index 0000000..4ba8fe7 --- /dev/null +++ b/fsearch/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=fsearch +pkgver=0.2.3 +pkgrel=1 +pkgdesc="A free and libre, fast graphical file search utility." +arch=('i686' 'x86_64') +url='https://cboxdoerfer.github.io/fsearch' +license=('GPL-2') +depends=('gtk' 'icu' 'pcre2') +makedepends=('meson' 'gettext-tiny') +source=("$pkgname-$pkgver.tar.gz::https://github.com/cboxdoerfer/$pkgname/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('1ca2f53340936a0961fa3d74f81dd31bc9365db679ef4650abb32969d0ee3d5d45a06ae11d0d434275a6497614e6eb0527f9332e21df07e7a6899ccb4e5832f2') + +build() { + hyperbola-meson $pkgname-$pkgver build + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 "$srcdir/$pkgname-$pkgver/License" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/fteqcc/PKGBUILD b/fteqcc/PKGBUILD new file mode 100644 index 0000000..3ec4a29 --- /dev/null +++ b/fteqcc/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=fteqcc +pkgver=3343+svn3400 +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="Free and libre FTE QuakeC compiler" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/f/fteqcc/fteqcc_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/f/fteqcc/fteqcc_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('07ba548547f0b80089fb75ead50b1e304569a9930db8b051f8c67b53c472e76a9eceb85b7377d8c4b1f9b11e45473e294884bd08e3b784fdbd0e489c6126a646' + '85aaa4491f0c2d730bc09654e72f087a7f0d8d00267b1f3b38f0817a68c2cf3b385fa6e7aea8c0eac25886ba377080ff846fd8e531210f91861f16965f656b4e') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + make +} + +package() { + cd "${pkgname}-${pkgver}" + install -Dm755 fteqcc.bin "$pkgdir/usr/bin/$pkgname" + install -Dm644 debian/$pkgname.1 -t "$pkgdir/usr/share/man/man1" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ftgl/PKGBUILD b/ftgl/PKGBUILD new file mode 100644 index 0000000..fc78835 --- /dev/null +++ b/ftgl/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=ftgl +pkgver=2.4.0 +_debver=2.4.0 +_debrel=2 +pkgrel=1 +pkgdesc='OpenGL library to use arbitrary fonts' +arch=('i686' 'x86_64') +url='https://github.com/frankheckenbach/ftgl' +license=('Expat') +depends=('freetype2' 'glu') +makedepends=('doxygen' 'mesa' 'graphviz' 'quilt') +source=("https://github.com/frankheckenbach/ftgl/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/f/ftgl/ftgl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('5a0d05dbb32952e5aa81d2537d604192ca19710cd57289ae056acc5e3ae6d403d7f0ffc8cf6c1aada6c3c23a8df4a8d0eabb81433036ade810bca1894fdfde54' + '496fa005ce3febd3fa1efb02487fec60ef3369c06d05ffc0e207d15eda395cbc0a1058e5e797f9c460bbe3d4d8d7be13a0ca4af68955f8296c3df97a1273f703') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi + + printf '%s\n' >>docs/doxygen.cfg.in \ + HAVE_DOT=yes DOT_IMAGE_FORMAT=svg INTERACTIVE_SVG=yes + ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --with-pic --disable-static + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + # FS#23283: install missing headers for OpenCascade + install -Dt "$pkgdir/usr/include/FTGL" -m644 src/FT{Face,Size}.h + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING +} diff --git a/ftjam/PKGBUILD b/ftjam/PKGBUILD new file mode 100644 index 0000000..2b07a52 --- /dev/null +++ b/ftjam/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=ftjam +pkgver=2.5.2 +pkgrel=1 +pkgdesc='FT Jam - an enhanced version of the Jam build tool' +arch=('i686' 'x86_64') +url="http://freetype.org/jam/" +license=('Expat') +depends=('glibc') +provides=('jam') +source=(https://deb.debian.org/debian/pool/main/f/${pkgname}/${pkgname}_${pkgver}.orig.tar.gz + license.txt) +sha512sums=('4fa4808fcd08b31f71ce66b28e864f22d8e067cff1f512f931ff717451daf08381d7f0719efc5a38db5b1e9bbe659b5b6c3c5f293989cfff0b6af3a00b8eafe7' + '1fe7ca50f8252746a1da103c03b8251375f5dfb5da8a9ec9d633f7214a05a3129060c6bf66023c27403a8d7e768a054a40caf1cb91b9784d61caca33776928a3') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/license.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/ftjam/license.txt b/ftjam/license.txt new file mode 100644 index 0000000..089a248 --- /dev/null +++ b/ftjam/license.txt @@ -0,0 +1,7 @@ +Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. + +License is hereby granted to use this software and distribute it +freely, as long as this copyright notice is retained and modifications +are clearly marked. + +ALL WARRANTIES ARE HEREBY DISCLAIMED. diff --git a/ftmenu/PKGBUILD b/ftmenu/PKGBUILD new file mode 100644 index 0000000..dc720b0 --- /dev/null +++ b/ftmenu/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=ftmenu +pkgver=0.4.0 +pkgrel=1 +pkgdesc="Fluxbox menu icon tray" +arch=('i686' 'x86_64') +url='https://ftmenu.sourceforge.net/' +license=('GPL-3') +depends=('fluxbox' 'gtk2') +source=("https://sourceforge.net/projects/${pkgname}/files/${pkgname}/${pkgname}-0.4/${pkgname}-${pkgver}.tar.gz") +sha512sums=('7b83d2b7bb186d2a78f3425f364fc34263332ce881ebbed4805767834610d3fba474b296343de9f2d01aefb10e6638ed356c617ad460746f1a60f0f85d3e6e10') + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/fuse2/PKGBUILD b/fuse2/PKGBUILD new file mode 100644 index 0000000..fc5add2 --- /dev/null +++ b/fuse2/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgname=fuse2 +pkgver=2.9.9 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="A library that makes it possible to implement a filesystem in a userspace program." +arch=('i686' 'x86_64') +url='https://github.com/libfuse/libfuse' +license=('GPL-2' 'LGPL-2.1') +replaces=('fuse') +conflicts=('fuse') +depends=('glibc' 'fuse-common') +makedepends=('pkg-config' 'quilt') +options=(!emptydirs) +source=(https://github.com/libfuse/libfuse/releases/download/fuse-$pkgver/fuse-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/f/fuse/fuse_$_debver-$_debrel.debian.tar.xz) +sha512sums=('3d82fafd04f2924299bb09d2bb144935fa004a43fb9a6568e2e1cc5a60fded2efa1711029a0d7f12b3e6e4501f7217f2ee3545646d89da8dece083cb390f23e2' + '059468f639c65277c23944aff27a2d6fa03b3c16ff420d6c24dd1dc6c9924c1686d332b80672b24188a938b53dc998e84ecb8b841b97f90db0dd86438c3b455d') + +prepare() { + cd fuse-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -vfi +} + +build() { + cd fuse-$pkgver + + UDEV_RULES_PATH=/lib/udev/rules.d ./configure --prefix=/usr --bindir=/bin --sbindir=/sbin --enable-lib --enable-util --disable-example + make +} + +package() { + cd fuse-$pkgver + + make DESTDIR=${pkgdir} install + + for i in COPYING{,.LIB}; do + install -Dm644 $i ${pkgdir}/usr/share/licenses/${pkgname}/$i + done + + # move libraries to /lib for FHS compliance + install -d -m755 ${pkgdir}/lib + mv ${pkgdir}/usr/lib/lib{fuse.so.${pkgver::1}*,ulockmgr.so.1*} ${pkgdir}/lib + ln -sf ../../lib/libfuse.so.${pkgver::1} ${pkgdir}/usr/lib/libfuse.so + ln -sf ../../lib/libulockmgr.so.1 ${pkgdir}/usr/lib/libulockmgr.so + + # Remove init script in wrong path + # Don't add our own for now, as fusectl fs oopses on 2.6.18 + rm -r ${pkgdir}/etc/init.d + + # remove udev rules (included in udev package} + rm -rf ${pkgdir}/etc/udev + + # static device nodes are handled by udev + rm -r ${pkgdir}/dev +} diff --git a/fuse3/PKGBUILD b/fuse3/PKGBUILD new file mode 100644 index 0000000..435ba63 --- /dev/null +++ b/fuse3/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgbase=fuse3 +pkgname=(fuse-common fuse3) +pkgver=3.10.3 +pkgrel=3 +arch=('i686' 'x86_64') +url='https://github.com/libfuse/libfuse' +license=('GPL-2' 'LGPL-2.1') +makedepends=('pkg-config' 'meson' 'eudev') +options=(!emptydirs) +source=(https://github.com/libfuse/libfuse/releases/download/fuse-$pkgver/fuse-$pkgver.tar.xz + fuse.initd) +sha512sums=('7329dd26284a15309eafc2b8b3f29ed431a5ce9c927c5965a51c270718f4915c318b84e4cf4e7f7ee1913831ce943a2e1a378d0bd2a1215eba7b9bc65efb7942' + '7f6a503ef23cfa8b809c544375c2d83ad56525269b48ad1a7dff0ce36f4bf2f2a3fafed9dc70a71ff6281b261db5f01829e16c06f041921a5d8c8d715a04a8c1') + +build() { + cd fuse-$pkgver + + rm -rf build + meson --prefix=/usr --sbindir=sbin -D examples=false . build + cd build + ninja +} + +package_fuse-common() { + pkgdesc="Common files for fuse2/3 packages" + backup=(etc/fuse.conf) + license=('GPL-2') + + cd fuse-$pkgver + install -Dm644 GPL2.txt ${pkgdir}/usr/share/licenses/${pkgname}/GPL2.txt + + install -Dm644 util/fuse.conf ${pkgdir}/etc/fuse.conf + + # OpenRC + install -Dm755 ${srcdir}/fuse.initd ${pkgdir}/etc/init.d/fuse +} + +package_fuse3() { + pkgdesc="A library that makes it possible to implement a filesystem in a userspace program." + depends=('fuse-common' 'glibc') + + cd fuse-$pkgver/build + + DESTDIR="${pkgdir}" ninja install + + rm -r "${pkgdir}"/etc/init.d + rm -r "${pkgdir}"/etc/fuse.conf + + for i in GPL2.txt LGPL2.txt LICENSE; do + install -Dm644 ../$i ${pkgdir}/usr/share/licenses/${pkgname}/$i + done + + # move binaries to / for FHS compliance + for i in bin sbin; do + mv ${pkgdir}/usr/$i ${pkgdir} + done + + # move libraries to /lib for FHS compliance + install -d -m755 ${pkgdir}/lib + mv ${pkgdir}/usr/lib/libfuse3.so.${pkgver::1}* ${pkgdir}/lib + ln -sf ../../lib/libfuse3.so.${pkgver::1} ${pkgdir}/usr/lib/libfuse3.so + + # static device nodes are handled by eudev + rm -r "${pkgdir}"/dev +} diff --git a/fuse3/fuse.initd b/fuse3/fuse.initd new file mode 100644 index 0000000..6774d7b --- /dev/null +++ b/fuse3/fuse.initd @@ -0,0 +1,35 @@ +#!/sbin/openrc-run +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +MOUNTPOINT=/sys/fs/fuse/connections + +depend() { + need localmount +} + +start() { + + ebegin "Starting fuse" + if ! grep -qw fuse /proc/filesystems; then + modprobe fuse >/dev/null 2>&1 || eerror $? "Error loading fuse module" + fi + if grep -qw fusectl /proc/filesystems && \ + ! grep -qw $MOUNTPOINT /proc/mounts; then + mount -t fusectl none $MOUNTPOINT >/dev/null 2>&1 || \ + eerror $? "Error mounting control filesystem" + fi + eend ${?} + +} + +stop() { + + ebegin "Stopping fuse" + if grep -qw $MOUNTPOINT /proc/mounts; then + umount $MOUNTPOINT >/dev/null 2>&1 || \ + eerror $? "Error unmounting control filesystem" + fi + eend ${?} + +} diff --git a/fvwm3/PKGBUILD b/fvwm3/PKGBUILD new file mode 100644 index 0000000..3ab1136 --- /dev/null +++ b/fvwm3/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=fvwm3 +pkgver=1.0.6a +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="A highly customizable virtual desktop window manager with small memory footprint." +arch=('i686' 'x86_64') +url='https://www.fvwm.org' +license=('GPL-2') +provides=('fvwm') +depends=('libevent' 'libx11' 'libxft' 'libxrender' 'libxt' 'python' 'libxrandr' ) +makedepends=('libxslt' 'asciidoctor' 'quilt') +optdepends=('fontconfig' 'freetype2' 'fribidi' 'ncurses' 'libpng' 'readline' + 'librsvg-legacy' 'libsm' 'libxcursor' 'libxext' 'libxi' 'libxpm' + 'sharutils' ) +options=('!emptydirs' '!makeflags') +source=("https://github.com/fvwmorg/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/f/fvwm3/fvwm3_${_debver}+ds-${_debrel}.debian.tar.xz") +sha512sums=('7577e0dde1f7c5c54024207cf48ab5b816c87fc163735e44eb72e66561c67c08f6a06e7fbf5c89fa6180b692ce25e5121845476d0d1dcfb8273b0aa7321d28f9' + '9ca7baff34dea84b5b26e01b332a915e36e8309052a4b7191c52559664dc0025b83df31a7582cbc76d7e2729255ec3a05ec09d4a8cd96f99c503009fe27b03a1') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-mandoc + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" install + install -Dm644 debian/desktop/$pkgname.desktop -t "${pkgdir}/usr/share/xsessions" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/fzy/PKGBUILD b/fzy/PKGBUILD new file mode 100644 index 0000000..258c3ce --- /dev/null +++ b/fzy/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=fzy +pkgver=1.0 +pkgrel=1 +pkgdesc='A better fuzzy finder' +url='https://github.com/jhawthorn/fzy' +arch=('i686' 'x86_64') +license=('Expat') +depends=('glibc') +source=(https://github.com/jhawthorn/${pkgname}/archive/${pkgver}.tar.gz) +sha512sums=('de5ed1af035260f4ae550c53b08c4ff302c978350784cbfd2981d1691f55d9c0f26b9333c74adea939b3f4578dd47e66ee99112e10afc5497c64011827d19dbc') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}/" + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}/" + make PREFIX=/usr DESTDIR="$pkgdir/" install + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/galculator/PKGBUILD b/galculator/PKGBUILD new file mode 100644 index 0000000..88892f5 --- /dev/null +++ b/galculator/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgbase=galculator +pkgname=(galculator galculator-gtk2) +pkgver=2.1.4 +_debver=2.1.4 +_debrel=1.1 +pkgrel=1 +pkgdesc='GTK+ based scientific calculator' +arch=('i686' 'x86_64') +url='http://galculator.sourceforge.net/' +license=('GPL-2') +makedepends=('intltool' 'gtk' 'gtk2' 'quilt') +source=(http://galculator.mnim.org/downloads/${pkgbase}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/g/galculator/galculator_$_debver-$_debrel.debian.tar.xz) +sha512sums=('ca5f373649d9bf26184e94ba6a501610efbb13e92a8723cda78b83aa495519e82e5b4fcd17f00f615eb702ed186598aecc70ae63a8238c32384b7f608cba4cfa' + '01022c321d4cec09a5a440cac83ab0b10ec575920a6c63ce9ec8ec83f1f39294111be367b1f949e4227c561d9b6bc1314432e1ed815d5703d14d58bd83acbdec') + +prepare() { + cd "${srcdir}/${pkgbase}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + CFLAGS+=' -fcommon' # https://wiki.gentoo.org/wiki/Gcc_10_porting_notes/fno_common + # GTK3 version + cd "${srcdir}/${pkgbase}-${pkgver}" + [ -d gtk3 ] || mkdir gtk3 + cd gtk3 + ../configure \ + --prefix=/usr + make + + # GTK2 version + cd "${srcdir}/${pkgbase}-${pkgver}" + [ -d gtk2 ] || mkdir gtk2 + cd gtk2 + ../configure \ + --prefix=/usr \ + --disable-gtk3 + make +} + +package_galculator() { + depends=('gtk') + + cd "${pkgbase}-${pkgver}/gtk3" + make DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_galculator-gtk2() { + pkgdesc+=' (GTK2 version)' + depends=('gtk2') + conflicts=('galculator') + + cd "${pkgbase}-${pkgver}/gtk2" + make DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gc/PKGBUILD b/gc/PKGBUILD new file mode 100644 index 0000000..9f5fffe --- /dev/null +++ b/gc/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=gc +pkgver=8.2.2 +pkgrel=1 +pkgdesc="A garbage collector for C and C++" +arch=('i686' 'x86_64') +url='https://www.hboehm.info/gc/' +license=('custom:GC') +depends=('gcc-libs') +makedepends=('quilt') +source=("https://github.com/ivmai/bdwgc/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "license.txt") +sha512sums=('4a7b26789ce22ab72bfaadf3029362c5fe26737df1e856e43db7d9b24ee8acf625e35d596bb3f698f91d6a5ddfb6c45a952a1dbd18d47359569696a544c9c248' + '73b381858db41cb757be67fa00778cb177fa147c892ae1e83d7d31b489c576ffe6c7339b688c41550c896aef1b8af5bfa3e58d1bb9902cc9640a8b837498a9b2') + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --enable-cplusplus \ + --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + sed 's|GC_MALLOC 1L|gc 3|g' doc/gc.man | install -Dm644 /dev/stdin "${pkgdir}/usr/share/man/man3/gc.3" + + # license downloaded from https://www.hboehm.info/gc/license.txt + install -Dm644 "${srcdir}/license.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/gc/license.txt b/gc/license.txt new file mode 100644 index 0000000..0a7cc7a --- /dev/null +++ b/gc/license.txt @@ -0,0 +1,30 @@ +Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers +Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved. +Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. +Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P. + +The file linux_threads.c is also +Copyright (c) 1998 by Fergus Henderson. All rights reserved. + +The files Makefile.am, and configure.in are +Copyright (c) 2001 by Red Hat Inc. All rights reserved. + +Several files supporting GNU-style builds are copyrighted by the Free +Software Foundation, and carry a different license from that given +below. + +THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + +Permission is hereby granted to use or copy this program +for any purpose, provided the above notices are retained on all copies. +Permission to modify the code and to distribute modified code is granted, +provided the above notices are retained, and a notice that the code was +modified is included with the above copyright notice. + +A few of the files needed to use the GNU-style build procedure come with +slightly different licenses, though they are all similar in spirit. A few +are GPL'ed, but with an exception that should cover all uses in the +collector. (If you are concerned about such things, I recommend you look +at the notice in config.guess or ltmain.sh.) + diff --git a/gcompris-data/PKGBUILD b/gcompris-data/PKGBUILD new file mode 100644 index 0000000..e4c47dc --- /dev/null +++ b/gcompris-data/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: Jesus E. + +pkgbase=gcompris-data +_pkgbase=GCompris-data +_pkgmain=gcompris-qt +pkgname=('gcompris-data-backgroundmusic' 'gcompris-data-voices' 'gcompris-data-words') +pkgver=20211201 +pkgrel=1 +pkgdesc="Datafiles for the free educational software suite GCompris" +arch=('any') +url="https://gcompris.net/" +makedepends=('qt-base') +source=("${pkgbase}-${pkgver}.zip::https://github.com/gcompris/GCompris-data/archive/refs/heads/master.zip" + "fix-path.patch") +sha512sums=('d01ae252cd97f6badddc73a2ec66e88cc101025583a68023ddb6254c98fcf3a38f7500e9f748d44626b9c0b08c5a593fbe1dc79803f7d456704783e08f356160' + '40bed718f3ce631cac1e2207e0d94c27e6c090cd292edd3b244ec2efd5cdcd6aeeb2c8f2882e4faef02c84099c23e2d1dd0033f725ba705106cdaef26a5f789b') + +prepare() { + mv "${srcdir}/${_pkgbase}-master" "${srcdir}/${pkgbase}-${pkgver}" + + cd ${srcdir}/${pkgbase}-${pkgver}/words + sed -i 's/RCC_DEFAULT=$Qt5_DIR\/bin\/rcc/RCC_DEFAULT=\/usr\/bin\/rcc/g' \ + generate_lang_rcc.sh + + cd ${srcdir}/${pkgbase}-${pkgver}/voices + sed -i 's/RCC_DEFAULT=$Qt5_DIR\/bin\/rcc/RCC_DEFAULT=\/usr\/bin\/rcc/g' \ + generate_voices_rcc.sh + + # additional fixes + cd ${srcdir}/${pkgbase}-${pkgver} + patch -Np1 -i ${srcdir}/fix-path.patch +} + +build() { + cd ${pkgbase}-${pkgver} + + # building background music + cd ./background-music + ./generate_backgroundMusic_rcc.sh ogg + + # building words + cd ../words + ./generate_lang_rcc.sh words + + # building voices + cd ../voices + ./generate_voices_rcc.sh ogg +} + +package_gcompris-data-backgroundmusic() { + pkgdesc+=" (background music)" + license=('CC-BY-SA-3.0' 'CC-BY-SA-4.0' 'CC0-1.0') + + cd ${pkgbase}-${pkgver}/background-music + + install -d "${pkgdir}"/usr/share/$_pkgmain/data2/backgroundMusic + cp .rcc/backgroundMusic-ogg.rcc "${pkgdir}"/usr/share/$_pkgmain/data2/backgroundMusic/ + + install -Dm644 backgroundMusic/README -t "${pkgdir}"/usr/share/licenses/$pkgname +} + +package_gcompris-data-voices() { + pkgdesc+=" (voices)" + license=('GPL-3' 'Public-Domain' 'CC-BY-SA-4.0') + + cd ${pkgbase}-${pkgver}/voices + install -d "${pkgdir}"/usr/share/$_pkgmain/data2/voices-ogg + cp .rcc/voices-ogg/voices-*.rcc "${pkgdir}"/usr/share/$_pkgmain/data2/voices-ogg/ + cp .rcc/full-ogg.rcc "${pkgdir}"/usr/share/$_pkgmain/data2/ + + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/$pkgname +} + +package_gcompris-data-words() { + pkgdesc+=" (words)" + license=('GPL-3') + + cd ${pkgbase}-${pkgver}/words + install -d "${pkgdir}"/usr/share/$_pkgmain/data2/words + cp .rcc/words.rcc "${pkgdir}"/usr/share/$_pkgmain/data2/words/ + + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/gcompris-data/fix-path.patch b/gcompris-data/fix-path.patch new file mode 100644 index 0000000..327e9c8 --- /dev/null +++ b/gcompris-data/fix-path.patch @@ -0,0 +1,11 @@ +--- a/voices/generate_voices_rcc.sh 2021-12-01 19:09:15.000000000 +0100 ++++ b/voices/generate_voices_rcc.sh 2021-12-06 11:50:13.991913114 +0100 +@@ -33,7 +33,7 @@ + exit 1 + } + +-WORDS_DIR=../../words/words ++WORDS_DIR=../words/words + [ ! -d "${WORDS_DIR}" ] && { + echo "Words dir ${WORDS_DIR} not found" + exit 1 diff --git a/gcompris-qt/PKGBUILD b/gcompris-qt/PKGBUILD new file mode 100644 index 0000000..72bc082 --- /dev/null +++ b/gcompris-qt/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=gcompris-qt +pkgver=1.1 +pkgrel=2 +pkgdesc="Free and libre educational software suite comprising of numerous activities" +arch=('i686' 'x86_64') +url='https://gcompris.net/' +license=('AGPL-3') +depends=('qt-multimedia' 'qt-svg' 'qt-sensors' + 'qt-quickcontrols' 'qt-graphicaleffects' 'qt-xmlpatterns' + 'qml-box2d' 'hicolor-icon-theme' 'gcompris-data-backgroundmusic' + 'gcompris-data-voices' 'gcompris-data-words') +makedepends=('cmake' 'extra-cmake-modules' 'qt-tools' 'kdoctools') +source=("https://gcompris.net/download/qt/src/$pkgname-$pkgver.tar.xz" + "fix-build.patch" + "gcompris-qt.sh") +sha512sums=('754087dbd8c409136dd82bcc8c308ecb85ec49341e91c99ace727ae6742cb3b9479b2d85fdff99a4d117788d77e253d9d26e3d7fa835193e6644bd7057c26719' + 'dd9125fcc52449e4f8d0efd4bbc5d09b2bea091b3c8970e861fb993ab7d90bae563effd3edb1080b8daa3f8fb89ceb32840f3bcb44d0f6eb7b805b6eb9cce390' + '364fb76e4b5f7304a155e38c5728795cf9ca180fee16bffb58fb26543aed39cab1790def02daad2fcfef77ceec8b4dafc886d87f21283260dc5d44523219e8da') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i "${srcdir}/fix-build.patch" +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DQML_BOX2D_LIBRARY=/usr/lib/qt/qml/Box2D.2.0 \ + -DWITH_DOWNLOAD=OFF + make -C build +} + +package() { + make -C build DESTDIR="${pkgdir}" install + + # rename binary and insert alternative startup-routine + mv "${pkgdir}"/usr/bin/$pkgname "${pkgdir}"/usr/bin/$pkgname.bin + install -Dm755 "${srcdir}"/$pkgname.sh "$pkgdir"/usr/bin/$pkgname + + # license + install -Dm644 "${srcdir}"/$pkgname-$pkgver/COPYING.txt -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/gcompris-qt/fix-build.patch b/gcompris-qt/fix-build.patch new file mode 100644 index 0000000..9e68f49 --- /dev/null +++ b/gcompris-qt/fix-build.patch @@ -0,0 +1,13 @@ +--- a/CMakeLists.txt 2021-03-21 18:56:07.000000000 +0100 ++++ b/CMakeLists.txt 2021-11-30 20:55:48.000000000 +0100 +@@ -219,8 +219,8 @@ + OUTPUT ${QmOutput} + COMMAND cmake -E make_directory ${GCOMPRIS_TRANSLATIONS_DIR} + COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/tmp +- # Remove the obsolete translations and set po in the ts output file +- COMMAND msgattrib --no-obsolete ${CMAKE_CURRENT_SOURCE_DIR}/${PoSource} -o ${OutTsFile} ++ # Copy po to the ts output file ++ COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/${PoSource} ${OutTsFile} + # Convert the po into ts + COMMAND Qt5::lconvert -if po -of ts -i ${OutTsFile} -o ${OutTsFile} + # Convert the ts in qm removing non finished translations diff --git a/gcompris-qt/gcompris-qt.sh b/gcompris-qt/gcompris-qt.sh new file mode 100644 index 0000000..e1bafa3 --- /dev/null +++ b/gcompris-qt/gcompris-qt.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +CURR_USER=$(whoami) +DIR="/home/$CURR_USER/.cache/KDE/gcompris-qt/" + +if [ -d "$DIR" ]; then + exec "/usr/bin/gcompris-qt.bin" +else + mkdir -p $DIR + cp -R /usr/share/gcompris-qt/data2 $DIR + exec "/usr/bin/gcompris-qt.bin" +fi diff --git a/gcr/PKGBUILD b/gcr/PKGBUILD new file mode 100644 index 0000000..36c98c3 --- /dev/null +++ b/gcr/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=gcr +pkgver=3.40.0 +pkgrel=3 +pkgdesc="A library for bits of crypto UI and parsing" +url='https://gitlab.gnome.org/GNOME/gcr' +arch=('i686' 'x86_64') +license=('LGPL-2.1' 'custom:bzip2' 'GPL-2') +depends=('gtk' 'libgcrypt' 'p11-kit') +makedepends=('gobject-introspection' 'vala' 'libxslt' 'meson') +source=("https://gitlab.gnome.org/GNOME/$pkgname/-/archive/$pkgver/$pkgname-$pkgver.tar.gz" + "gcr-viewer.sh") +sha512sums=('260238be8cc4e873ba1dde9f2edbf97f4e63490f6c8341100ea4ec5f196a5d6ea7cb7ea5a22fa1f8ad4ed384280fbd72361ff9643744712f876cb0438b223e1c' + '341a01dea3926ff3c89b4ae583844a54f4e0c3d56d9ac08cbf53349542a5033768e54ee297ddba988da36dd9a4e8780953336bb47fd3d63027eab2100ee61d23') + +build() { + cd $pkgname-$pkgver + hyperbola-meson build -D gtk_doc=false + meson compile -C build +} + +package() { + cd $pkgname-$pkgver + DESTDIR="$pkgdir" meson install -C build + + # gcr wants to lock some memory to prevent swapping out private keys + # https://bugzilla.gnome.org/show_bug.cgi?id=688161 + if [ "$(uname -o)" = 'GNU/Linux' ]; then + install -dm '755' "${pkgdir}/usr/libexec/gcr" + mv "${pkgdir}/usr/bin/gcr-viewer" "${pkgdir}/usr/libexec/gcr" + install -Dm '755' "${srcdir}/gcr-viewer.sh" "${pkgdir}/usr/bin/gcr-viewer" + fi + + # remove dbus-1 directory + rm -r "${pkgdir}/usr/share/dbus-1" + + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gcr/gcr-viewer.sh b/gcr/gcr-viewer.sh new file mode 100644 index 0000000..fd3b6e6 --- /dev/null +++ b/gcr/gcr-viewer.sh @@ -0,0 +1,2 @@ +#!/bin/sh +prlimit --memlock='1024' '/usr/libexec/gcr/gcr-viewer' "${@}" diff --git a/gd/PKGBUILD b/gd/PKGBUILD new file mode 100644 index 0000000..4e6efdf --- /dev/null +++ b/gd/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=gd +pkgver=2.3.0 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="Library for the dynamic creation of images by programmers" +arch=('i686' 'x86_64') +url='https://libgd.github.io/' +license=('custom:GD') +depends=('fontconfig' 'libxpm' 'libtiff' 'libjpeg-turbo') +makedepends=('quilt') +optdepends=('perl: bdftogd script') +source=("https://github.com/libgd/libgd/releases/download/gd-${pkgver}/libgd-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/libg/libgd2/libgd2_$_debver-$_debrel.debian.tar.xz") +sha512sums=('5b201d22560e147a3d5471010b898ad0268c3a2453b870d1267b6ba92e540cf9f75099336c1ab08217e41827ac86fe04525726bf29ad117e5dcbaef9a8d0622a' + '852899c79b4f0bb1862193150dc5bb05de10a536956b8064421dd02b5fdaed298997485bb9c356b0bf9144136cd0b16ca5c302bec6a5ed7e3bc7663f2f7f3efb') + +prepare() { + cd libgd-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0003-tests-make-a-little-change-for-autopkgtest.patch || true + + quilt push -av + fi + + autoreconf -vfi +} + +build() { + cd libgd-${pkgver} + + ./configure \ + --prefix=/usr \ + --disable-rpath + make +} + +package() { + cd libgd-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/gdb/PKGBUILD b/gdb/PKGBUILD new file mode 100644 index 0000000..58edd57 --- /dev/null +++ b/gdb/PKGBUILD @@ -0,0 +1,78 @@ +# Maintainer: Jesus E. + +pkgbase=gdb +pkgname=(gdb gdb-common) +pkgver=10.1 +_debver=$pkgver +_debrel=1.7 +pkgrel=2 +pkgdesc="The GNU Debugger" +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/gdb/' +license=('GPL-3' 'LGPL-3') +makedepends=('glibc' 'gcc-libs' 'texinfo' 'python' 'guile' 'ncurses' 'expat' 'xz' 'mpfr' 'readline' 'quilt') +source=(https://ftp.gnu.org/gnu/gdb/${pkgname}-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/g/gdb/gdb_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('0dc54380435c6853db60f1e388b94836d294dfa9ad7f518385a27db4edd03cb970f8717d5f1e9c9a0d4a33d7fcf91bc2e5d6c9cf9e4b561dcc74e65b806c1537' + '2a589aace275cb45a8d4c5a8680c7bd69b1f88f7920dd6ddefae3f5e8dfa03d27955119f7fc9fb2a0e57b00e5144a36cb70a9a942f2e7f82160bcd487059f8b8') + +prepare() { + cd gdb-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # hack! - libiberty configure tests for header files using "$CPP $CPPFLAGS" + sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure +} + +build() { + cd gdb-$pkgver + + mkdir -p build && cd build + ../configure \ + --prefix=/usr \ + --disable-nls \ + --disable-source-highlight \ + --enable-tui \ + --with-system-readline \ + --with-python=/usr/bin/python \ + --with-guile=guile-2.2 \ + --with-system-gdbinit=/etc/gdb/gdbinit + make +} + +package_gdb-common() { + depends=('python' 'guile') + + cd gdb-$pkgver/build + make -C gdb/data-directory DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/gdb-$pkgver/"{COPYING3,COPYING3.LIB} -t "${pkgdir}"/usr/share/licenses/${pkgname} +} + +package_gdb() { + depends=('glibc' 'ncurses' 'gcc-libs' 'expat' 'xz' 'mpfr' "gdb-common=${pkgver}" + 'readline' 'guile' 'python' 'libelf') + backup=(etc/gdb/gdbinit) + + cd gdb-$pkgver/build + make -C gdb DESTDIR="$pkgdir" install + make -C gdbserver DESTDIR="$pkgdir" install + + # install "custom" system gdbinit + install -dm 755 "$pkgdir/etc/gdb" + touch "$pkgdir/etc/gdb/gdbinit" + + # comes from gdb-common + rm -r "$pkgdir/usr/share/gdb/" + + install -Dm644 "${srcdir}/gdb-$pkgver/"{COPYING3,COPYING3.LIB} -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/gdk-pixbuf-xlib/PKGBUILD b/gdk-pixbuf-xlib/PKGBUILD new file mode 100644 index 0000000..70cd3c3 --- /dev/null +++ b/gdk-pixbuf-xlib/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=gdk-pixbuf-xlib +pkgver=2.40.2 +pkgrel=1 +pkgdesc='Deprecated Xlib integration for GdkPixbuf' +arch=('i686' 'x86_64') +url='https://gitlab.gnome.org/Archive/gdk-pixbuf-xlib' +license=('LGPL-2.1') +depends=('gdk-pixbuf2' 'libx11') +makedepends=('meson' 'quilt') +source=(https://gitlab.gnome.org/Archive/gdk-pixbuf-xlib/-/archive/2.40.2/gdk-pixbuf-xlib-${pkgver}.tar.gz) +sha512sums=('46dd4775b3e9c11884ded97222661fb93cd3f017d3d083ebc2cd628cef5fb51f8dd62d0d3221ac837cffe967ffb2923184bc1f2a20b201acd4e7bbfc7844d28f') + +build() { + hyperbola-meson $pkgname-$pkgver build -D gtk_doc=false + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" meson install -C build + + cd $pkgname-$pkgver + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gdk-pixbuf2/PKGBUILD b/gdk-pixbuf2/PKGBUILD new file mode 100644 index 0000000..e5a4ec3 --- /dev/null +++ b/gdk-pixbuf2/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=gdk-pixbuf2 +pkgver=2.42.2 +_debver=2.42.2+dfsg +_debrel=1 +pkgrel=2 +pkgdesc="An image loading library" +arch=(i686 x86_64) +url="https://wiki.gnome.org/Projects/GdkPixbuf" +license=(LGPL-2.1) +depends=(glib2 libpng libtiff libjpeg-turbo libx11 shared-mime-info) +makedepends=(gobject-introspection meson quilt) +install=gdk-pixbuf2.install +source=(https://download.gnome.org/sources/gdk-pixbuf/${pkgver:0:4}/gdk-pixbuf-$pkgver.tar.xz + https://deb.debian.org/debian/pool/main/g/gdk-pixbuf/gdk-pixbuf_$_debver-$_debrel.debian.tar.xz + gdk-pixbuf-query-loaders.hook) +sha512sums=('f341d032ea410efed7a35f8ca6a7389bf988f663dae16e774d114d6f11611e9e182c835e90d752b71c258c905cc5c4c785ea697feed5e6921a2a676c9deaa5f2' + '4e80f09cd7936a65fd734251d98c54756e6b1fcd13b6836938922a92e95e17486b9d6dfdd63e77b5a488a6681427e53b94495e86b25d4881ba8d156bef44b338' + 'a3d558fb92a0802307427f5c936ca4b86dd966acb96978f247f64cac54b434657cc9b952cece266b992d22655bb658129025718b29beb380a4a0429c34fdd417') + +prepare() { + cd gdk-pixbuf-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/tests-Don-t-check-whether-bmp-and-gif-loaders-are-enabled.patch || true + + quilt push -av + fi +} + +build() { + hyperbola-meson gdk-pixbuf-$pkgver build \ + -D docs=false \ + -D installed_tests=false + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 *.hook + cd gdk-pixbuf-$pkgver + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING +} + +# vim:set ts=2 sw=2 et: diff --git a/gdk-pixbuf2/gdk-pixbuf-query-loaders.hook b/gdk-pixbuf2/gdk-pixbuf-query-loaders.hook new file mode 100644 index 0000000..3f6a3e4 --- /dev/null +++ b/gdk-pixbuf2/gdk-pixbuf-query-loaders.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.so + +[Action] +Description = Probing GDK-Pixbuf loader modules... +When = PostTransaction +Exec = /usr/bin/gdk-pixbuf-query-loaders --update-cache diff --git a/gdk-pixbuf2/gdk-pixbuf2.install b/gdk-pixbuf2/gdk-pixbuf2.install new file mode 100644 index 0000000..83fa07c --- /dev/null +++ b/gdk-pixbuf2/gdk-pixbuf2.install @@ -0,0 +1,3 @@ +pre_remove() { + rm -f /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache +} diff --git a/gdl/PKGBUILD b/gdl/PKGBUILD new file mode 100644 index 0000000..a834944 --- /dev/null +++ b/gdl/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=gdl +pkgver=3.34.0 +pkgrel=2 +pkgdesc='Docking Library' +url='https://gitlab.gnome.org/GNOME/gdl' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('gtk') +makedepends=('intltool' 'gobject-introspection' 'gnome-common' 'gettext-tiny' 'mesa-libgl') +source=("https://deb.debian.org/debian/pool/main/g/gdl/${pkgname}_${pkgver}.orig.tar.xz") +sha512sums=('8c43f330556dae67e4f64e92c3ba5c2e9351d3040d6002bda89f20f9494fc93030abe80072f0cf86280f98e290805154e9ca12aaa7013f0a341d8ea94323d3b0') + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --disable-gtk-doc + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/geany-plugins/PKGBUILD b/geany-plugins/PKGBUILD new file mode 100644 index 0000000..8857ef5 --- /dev/null +++ b/geany-plugins/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=geany-plugins +pkgver=1.38 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Plugins for Geany" +arch=('i686' 'x86_64') +url='https://plugins.geany.org/' +license=('Simplified-BSD' 'GPL-1' 'GPL-2' 'GPL-3' 'Expat' 'custom:PEG-shorted-Expat') +depends=('ctpl' "geany>=$pkgver" 'gpgme' 'libgit2' 'lua51' 'python' 'vte' 'webkitgtk') +makedepends=('cppcheck' 'intltool' 'quilt') +source=("https://plugins.geany.org/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/g/geany-plugins/geany-plugins_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('360905c9b550266ee8cf05396a46465c3f6614709f413f1bc230a1a0f7e3274ae315f2df50ad1eb44550dd32a29d531d9da677b1ecf316dc48a492394de02461' + '7bac0d1ef6bdc8a78c24dc30726d2b5f8c951277579cc5647531c494569d3c344a3cf6854b7007b99ac840fda654952e5e178949798b65209187c945935887d1') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/debian-doc-locations.patch || true + rm -v debian/patches/Drop-bundled-gpgme.m4-to-use-updated-system-gpgme.m4.patch || true + + quilt push -av + fi + + autoreconf -vfi + + # don't redefine bool + sed -i 's/typedef unsigned int bool/#include /g' \ + pretty-printer/src/PrettyPrinter.h +} + +build() { + cd $pkgname-$pkgver + export CFLAGS+=' -w' + export PYTHON=/usr/bin/python + ./configure --prefix=/usr --libexecdir=/usr/lib + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + make -C $pkgname-$pkgver DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/$pkgname-$pkgver/debian/copyright" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/geany/PKGBUILD b/geany/PKGBUILD new file mode 100644 index 0000000..7402618 --- /dev/null +++ b/geany/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=geany +pkgver=1.38 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Fast and lightweight IDE" +arch=('i686' 'x86_64') +url='https://www.geany.org/' +license=('GPL-2') +depends=('gtk') +makedepends=('doxygen' 'intltool' 'python-lxml' 'quilt') +optdepends=('geany-plugins: additional functionality' + 'vte: embedded terminal support') +source=("https://download.geany.org/$pkgname-$pkgver.tar.bz2" + "https://deb.debian.org/debian/pool/main/g/geany/geany_$_debver-$_debrel.debian.tar.xz") +sha512sums=('5aff0643d0d9e667d0fb526e9c8426cb80c89decf92110683086c2a7a18e0d3d55ab514fdd68aa0c4431c98ae0c4685607b49c620525184c89e21b26fca06699' + 'cb3fdb501cb5f1b900ea7262dddedebdb464666dd8ef80c15051579b814d264089c020fc9503399eae05cd918579d57fa6208398199871ef945aae90a0d0c965') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/20_change_gpl_location.patch || true + rm -v debian/patches/20_add_debian_specific_filetypes.patch || true + rm -v debian/patches/20_debian_control_tags.patch || true + rm -v debian/patches/20_use_sensible_browser.patch || true + rm -v debian/patches/20_load_plugins_from_all_paths.patch || true + rm -v debian/patches/20_use_x_terminal_emulator.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --enable-gtk3 --enable-gtkdoc-header --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + make -C $pkgname-$pkgver DESTDIR="$pkgdir" install + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/geeqie/PKGBUILD b/geeqie/PKGBUILD new file mode 100644 index 0000000..fbddc1d --- /dev/null +++ b/geeqie/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=geeqie +pkgver=1.6 +_debver=$pkgver +_debrel=9 +pkgrel=8 +pkgdesc="Lightweight image viewer" +arch=('i686' 'x86_64') +url='http://www.geeqie.org/' +license=('GPL-2' 'FDL-1.2') +depends=('exiv2' 'gtk' 'ffmpegthumbnailer' 'djvulibre' 'poppler-glib') +makedepends=('intltool' 'python' 'librsvg-legacy' 'gawk' 'perl-image-exiftool' + 'doxygen' 'yelp-tools' 'graphviz' 'quilt') +optdepends=('librsvg-legacy: SVG rendering' + 'gawk: to use the geo-decode function' + 'perl-image-exiftool: for the jpeg extraction plugin' + 'gphoto2: command-line tools for various (plugin) operations') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/g/geeqie/geeqie_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/g/geeqie/geeqie_${_debver}-${_debrel}+deb11u1.debian.tar.xz") +sha512sums=('4acd05c6012c80581e9c594c7dc7d12265528aa8d3868afef9def36798945afb851da9376bbe5f205ac3c5e1e2362188cc0e2891b49f3ea4396bbc6974c143ef' + '325c10f13284e8d4260a74b78a3cb7972d361414dba4532dd9b7d983263efb8cb78ed700506c8582379f961ceab3f885c52e1d235fc1d0edaa76396e37c599a6') + +prepare() { + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/ ./ + + quilt push -av + fi + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr + make +} + +package(){ + cd "$pkgname-$pkgver" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gegl/PKGBUILD b/gegl/PKGBUILD new file mode 100644 index 0000000..cae7d92 --- /dev/null +++ b/gegl/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=gegl +pkgver=0.4.30 +pkgrel=4 +pkgdesc="Graph based image processing framework" +arch=('i686' 'x86_64') +url='https://www.gegl.org/' +license=('GPL-3' 'LGPL-3') # gegl-common-gpl3.so (gegl plugin operation) and software/libraries (LGPL-3) +depends=('babl' 'ffmpeg' 'gdk-pixbuf2' 'jasper' 'json-glib' 'libraw' 'librsvg-legacy' 'libspiro' + 'luajit' 'pango' 'poly2tri-c' 'poppler-glib' 'sdl2') +makedepends=('gobject-introspection' 'libnsgif' 'meson' 'python-pygobject' 'vala') # libnsgif required, but build with libnsgif static submodule +optdepends=('gobject-introspection: gir bindings' + 'vala: vala bindings') +source=("https://download.gimp.org/pub/$pkgname/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('73db2d18260ba061fbbc2adb3256ea9d5b822b57f5654cc3aefb59e7afeeb2e4f0fd7e95ac14603c0a549935df04d5744001089efb378511c914c68664dbd378') + +build() { + # required by seamless-clone/libgegl-sc-0.4.so build + export LDFLAGS+=" -lm" + + # docs and graphviz disabled; requires gtkdoc and others dependencies + # umfpack is disabled; webp disabled out of security-reasoning; + # due the suiteparse package contains problematic licenses and dependencies + # workshop disabled (including: lensfun, maxflow and v4l-utils); contains experimental features + # libv4l (v4l1) disabled; linux kernel doesn't contains v4l1 + hyperbola-meson $pkgname-$pkgver build \ + -D docs=false \ + -D graphviz=disabled \ + -D gexiv2=disabled \ + -D mrg=disabled \ + -D lensfun=disabled \ + -D libv4l=disabled \ + -D libv4l2=disabled \ + -D maxflow=disabled \ + -D umfpack=disabled \ + -D webp=disabled \ + -D openexr=disabled \ + -D workshop=false + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + + install -Dm644 $pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 $pkgname-$pkgver/COPYING.LESSER -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gengetopt/PKGBUILD b/gengetopt/PKGBUILD new file mode 100644 index 0000000..610aace --- /dev/null +++ b/gengetopt/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=gengetopt +pkgver=2.23 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A tool to write command line option parsing code for C programs" +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/gengetopt/gengetopt.html' +license=('GPL-3') +options=('!docs' '!makeflags') +depends=('gcc-libs') +makedepends=('quilt') +source=("https://ftp.gnu.org/gnu/gengetopt/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gengetopt/gengetopt_${_debver}+dfsg1-${_debrel}.debian.tar.xz") +sha512sums=('3749191d35acbeff6680f2a4d0516706a0491053f632aaa44ead7c3a42e56f9870bd7c4a85a1886f2052e17d86a2853e2f65d445e0c9920e41f1dc354f003712' + '13f95e7210f4350e832815a55de7a15afe0735b4656d947ffc2caec259222ae43114f9a9e1ab699a253592865f96849264b73af3301159de16a2ffd13945f886') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vi +} + + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + diff --git a/geoip-database/PKGBUILD b/geoip-database/PKGBUILD new file mode 100644 index 0000000..904a77d --- /dev/null +++ b/geoip-database/PKGBUILD @@ -0,0 +1,104 @@ +# Maintainer: Jesus E. + +pkgbase=geoip-database +pkgname=('geoip-database' 'geoip-database-extra') +pkgver=20210714 +pkgrel=0 +arch=('any') +url="https://mailfud.org/geoip-legacy/" +license=('CC-BY-SA-4.0') +makedepends=('util-linux') +checkdepends=('geoip') +_source_base="https://edurepo.conocimientoslibres.ga/sources/other/${pkgbase}/${pkgver}" +source=("GeoIP-${pkgver}.dat.gz::${_source_base}/GeoIP.dat.gz" + "GeoIP-${pkgver}.dat.gz.sig::${_source_base}/GeoIP.dat.gz.sig" + "GeoIPv6-${pkgver}.dat.gz::${_source_base}/GeoIPv6.dat.gz" + "GeoIPv6-${pkgver}.dat.gz.sig::${_source_base}/GeoIPv6.dat.gz.sig" + "GeoIPCity-${pkgver}.dat.gz::${_source_base}/GeoIPCity.dat.gz" + "GeoIPCity-${pkgver}.dat.gz.sig::${_source_base}/GeoIPCity.dat.gz.sig" + "GeoIPCityv6-${pkgver}.dat.gz::${_source_base}/GeoIPCityv6.dat.gz" + "GeoIPCityv6-${pkgver}.dat.gz.sig::${_source_base}/GeoIPCityv6.dat.gz.sig" + "GeoIPASNum-${pkgver}.dat.gz::${_source_base}/GeoIPASNum.dat.gz" + "GeoIPASNum-${pkgver}.dat.gz.sig::${_source_base}/GeoIPASNum.dat.gz.sig" + "GeoIPASNumv6-${pkgver}.dat.gz::${_source_base}/GeoIPASNumv6.dat.gz" + "GeoIPASNumv6-${pkgver}.dat.gz.sig::${_source_base}/GeoIPASNumv6.dat.gz.sig" + 'COPYING::https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt') +sha512sums=('b74f0d570b7d398a31e808b5c5a3f34ad571c72cb6335555a731640976738d5087fd1e3e0eef3d58c47310cc3de48737a8c61ea62c8ad268d62eed707e986b02' + 'SKIP' + '636e74f8bb33d126f7c49f4939fc28e24ed61691d6378bf446c167bf5d9fe54a1b297eca7df0600e7dec34d97f4eaadec06c5df476dd6b56804b2a738f9c69f3' + 'SKIP' + 'c79d9baac060ae4701cebc168b8774ce38156ebd2f814355c6c89f9ac0e64da9d55772b91236562cd45028aa0a4eab14c82fb76d26dcf10b86f40ca2eb1e1b2c' + 'SKIP' + '6b6ae56e8335be23aa1733b13c0fd099fb98bfec7a6afe2301f68d282fbd7ea2432b2938012d092d5121a055e297727db8fca6a361d17a7d8e848beb3cd5f3d7' + 'SKIP' + '3e4fc04cb9734d2f8696fc05fb7575c4f9ec42e97bc772eb610eb409feda0fc0b20ee2b9a221cf5449139c416ef1b15579d9ab4bd5e8623b647d7c453de53dfa' + 'SKIP' + '76e217938c35b2a488195a5314eff9f1e299e52c87a3f5989f6bcb1cb42f372c4b9746b45dc95798e83116d71fc6d4044a4e9f38049428e770a8a017fb2ea4b7' + 'SKIP' + 'a73901952351f0e76fcb56cd345564098cc937fb873c811fa13f3d3fdb2c65d50287c67619487e52e7ae6ccb00b835eae94c19668a25f1dd702f127874489204') +validpgpkeys=('4DF21B6A7C1021B25C360914F6EE7BC59A315766') # JesĂşs E. + +prepare() { + cd "${srcdir}" + rename -v -- "-${pkgver}" '' *.dat +} + +check() { + cd "${srcdir}" + + if [[ $(geoiplookup -f GeoIP.dat 95.217.229.211) != *'FI, Finland' ]]; then + echo >&2 'Unable to resolve IPv4 address to country.' + return 1 + fi + + if [[ $(geoiplookup6 -f GeoIPv6.dat 2a01:4f9:4b:39ea::301) != *'DE, Germany' ]]; then + echo >&2 'Unable to resolve IPv6 address to country.' + return 1 + fi + + if [[ $(geoiplookup -f GeoIPCity.dat 95.217.229.211) != *'FI, 18, N/A, Helsinki'* ]]; then + echo >&2 'Unable to resolve IPv4 address to city.' + return 1 + fi + + if [[ $(geoiplookup6 -f GeoIPCityv6.dat 2a01:4f9:4b:39ea::301) != *'DE, 00, N/A, N/A'* ]]; then + echo >&2 'Unable to resolve IPv6 address to city.' + return 1 + fi + + if [[ $(geoiplookup -f GeoIPASNum.dat 95.217.229.211) != *'AS24940 Hetzner Online GmbH' ]]; then + echo >&2 'Unable to resolve IPv4 address to ASN.' + return 1 + fi + + if [[ $(geoiplookup6 -f GeoIPASNumv6.dat 2a01:4f9:4b:39ea::301) != *'AS24940 Hetzner Online GmbH' ]]; then + echo >&2 'Unable to resolve IPv6 address to ASN.' + return 1 + fi +} + +package_geoip-database() { + pkgdesc="GeoIP legacy country database (based on GeoLite2 data created by MaxMind)" + + cd "${srcdir}" + + install -d "${pkgdir}/usr/share/GeoIP" + for i in GeoIP{,v6}.dat; do + install -m644 "$i" "${pkgdir}/usr/share/GeoIP" + done + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_geoip-database-extra() { + pkgdesc="GeoIP legacy city/ASN databases (based on GeoLite2 data created by MaxMind)" + + cd "${srcdir}" + + install -d "${pkgdir}/usr/share/GeoIP" + for i in GeoIPCity{,v6}.dat GeoIPASNum{,v6}.dat; do + install -m644 "$i" "${pkgdir}/usr/share/GeoIP" + done + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/geoip/PKGBUILD b/geoip/PKGBUILD new file mode 100644 index 0000000..21c38c5 --- /dev/null +++ b/geoip/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=geoip +pkgver=1.6.12 +pkgrel=1 +pkgdesc="Non-DNS IP-to-country resolver C library & utils" +arch=('i686' 'x86_64') +url="https://www.maxmind.com/app/c" +license=('LGPL-2.1') +depends=('zlib' 'geoip-database') +optdepends=('geoip-database-extra: city/ASN databases (not needed for country lookups)') +makedepends=('autoconf' 'libtool') +options=('!emptydirs') +source=("$pkgname-$pkgver.tar.gz::https://github.com/maxmind/${pkgname}-api-c/archive/v${pkgver}.tar.gz") +sha512sums=('d1ed2dae091548f555cde4d26e4b51ae1e8fbb12ef1695fd95963229d9a1bf241e6f09e5d77b151d51edd0cef78ddef490c6a3f3a70ff122bdd9c0ac5500fc7d') + +prepare() { + cd geoip-api-c-$pkgver + ./bootstrap +} + +build() { + cd geoip-api-c-$pkgver + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --sysconfdir=/etc/geoip + make +} + +package() { + cd geoip-api-c-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/gerbera-legacy/PKGBUILD b/gerbera-legacy/PKGBUILD new file mode 100644 index 0000000..e0d5c75 --- /dev/null +++ b/gerbera-legacy/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +_realpkgname=gerbera +pkgname=$_realpkgname-legacy +pkgver=2.0.0 +pkgrel=1 +pkgdesc="Free and libre UPnP Media Server (legacy version)" +arch=('i686' 'x86_64') +url='https://github.com/gerbera/gerbera' +license=('GPL-2') +depends=('taglib' 'curl' 'sqlite' 'file' 'gcc-libs' 'libupnp' 'libexif' 'fmt' 'pugixml' + 'spdlog' 'ffmpeg' 'ffmpegthumbnailer' 'libmatroska' 'libebml' 'exiv2') +makedepends=('cmake') +install=$_realpkgname.install +options=('emptydirs') +source=("$_realpkgname-$pkgver.tar.gz::https://github.com/gerbera/gerbera/archive/v$pkgver.tar.gz" + "libre.patch" + "$_realpkgname.initd" + "$_realpkgname.confd" + "$_realpkgname.run") +sha512sums=('7324c838ceec00add8792ba09a32d705a48515d91a02bce625fb99c1af90ee4794e9738cb9020406a036ee423fbcd09c05734ac1b089ea8a7e87793c1c3960c8' + 'af1edaf920c81b48da8a24898eb21ef2b1a5e27b6c1e12f77a47af48cbd5bc5d869cbf40fa0d3164ef99f2402511897ef27988835ab55f582ca587a252b1e958' + '7e4e4b826946a1159a76fd26b378ad7d804bf4555a9032c2cd2198c1ead154879184dd71e277329063ad717f8b9a225e6bbd7a8628dc6052c2140c272924045e' + '392d7e964b0328778847f871e88ffd475ddac99b6cf8c8ded4825eb2f970e084db692552790a1b30ff96f59eabcd9fff50164d9dedf328badab95a1cec833c02' + '122fb01fc2a2b69e3a928d449e2c1563b8d1545d8e553496e59fc1862b83cc4ace8f7975a2a1631276bfaac6842ea74510b2d460f5d923f13ef6d67b14eac21d') + +prepare() { + cd "${srcdir}/${_realpkgname}-${pkgver}" + patch -Np1 -i ${srcdir}/libre.patch +} + +build() { + cd "${srcdir}/${_realpkgname}-${pkgver}" + cmake \ + -Wno-dev \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DWITH_MAGIC=1 \ + -DWITH_CURL=1 \ + -DWITH_JS=0 \ + -DWITH_AVCODEC=1 \ + -DWITH_FFMPEGTHUMBNAILER=1 \ + -DWITH_EXIF=1 \ + -DWITH_EXIV2=1 \ + -DWITH_MATROSKA=1 \ + -DWITH_MYSQL=0 \ + -DWITH_SYSTEMD=0 \ + -DWITH_LASTFM=0 \ + -DWITH_DEBUG=0 \ + -DWITH_TESTS=0 + make +} + +package() { + cd "${srcdir}/${_realpkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" install + + # create initial configuration + ./gerbera --create-config > config.xml + sed -i 's#.*#/var/lib/gerbera#' config.xml + install -Dm644 config.xml -t "${pkgdir}"/etc/$_realpkgname + + # additional folders + install -dm755 "${pkgdir}"/var/lib/$_realpkgname + install -dm755 "${pkgdir}"/var/log/$_realpkgname + + # services + install -Dm755 "${srcdir}"/$_realpkgname.initd "${pkgdir}"/etc/init.d/$_realpkgname + install -Dm644 "${srcdir}"/$_realpkgname.confd "${pkgdir}"/etc/conf.d/$_realpkgname + install -Dm755 "${srcdir}"/$_realpkgname.run "${pkgdir}"/etc/sv/$_realpkgname/run + + # license + install -Dm644 LICENSE.md -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/gerbera-legacy/gerbera.confd b/gerbera-legacy/gerbera.confd new file mode 100644 index 0000000..a8fbc69 --- /dev/null +++ b/gerbera-legacy/gerbera.confd @@ -0,0 +1,27 @@ +# /etc/conf.d/gerbera + +# Enable debug log output. +#DEBUG=no + +# Interface to bind to, for example eth0, this can be specified instead of the +# IP address. +#BIND_INTERFACE=eth0 + +# Specify the server port that will be used for the web user interface, for +# serving media and for UPnP requests, minimum allowed value is 49152. If this +# option is omitted a default port will be chosen, however, in this case it is +# possible that the port will change upon server restart. +#BIND_PORT=49152 + +# The server will bind to the given IP address, currently we can not bind to +# multiple interfaces so binding to 0.0.0.0 is not be possible. +#BIND_IP=0.0.0.0 + +# The location of the config file +#CONFIG="/etc/gerbera/config.xml" + +# Specify the user/group gerbera should run as +#G_USER="gerbera" +#G_GROUP="gerbera" + +# vim: ft=gentoo-conf-d diff --git a/gerbera-legacy/gerbera.initd b/gerbera-legacy/gerbera.initd new file mode 100644 index 0000000..e2d27c9 --- /dev/null +++ b/gerbera-legacy/gerbera.initd @@ -0,0 +1,34 @@ +#!/sbin/openrc-run + +name="Gerbera" +configfile="${CONFIG:-/etc/gerbera/config.xml}" +start_stop_daemon_args="--user ${G_USER:-gerbera} --group ${G_GROUP:-gerbera}" +pidfile="/run/gerbera/gerbera.pid" +command=/usr/bin/gerbera +command_args="-c $configfile -l /var/log/gerbera/gerbera.log" +command_background=true + +depend() { + need net +} + +start_pre() { + if ! [ -f "${configfile}" ]; then + /usr/bin/gerbera --create-config > "${configfile}" + fi + if yesno "${DEBUG}"; then + command_args="$command_args -D" + fi + if [ ! -z "${BIND_INTERFACE}" ]; then + command_args="$command_args -e ${BIND_INTERFACE}" + fi + if [ ! -z "${BIND_PORT}" ]; then + command_args="$command_args -p ${BIND_PORT}" + fi + if [ ! -z "${BIND_IP}" ]; then + command_args="$command_args -i ${BIND_IP}" + fi + + checkpath --owner ${G_USER:-gerbera}:${G_GROUP:-gerbera} \ + --directory ${pidfile%/*} +} diff --git a/gerbera-legacy/gerbera.install b/gerbera-legacy/gerbera.install new file mode 100644 index 0000000..f31adfd --- /dev/null +++ b/gerbera-legacy/gerbera.install @@ -0,0 +1,24 @@ +post_install() { + if ! getent group gerbera &>/dev/null; then + groupadd -r gerbera >& /dev/null + fi + if ! getent passwd gerbera &>/dev/null; then + useradd -r -d /var/lib/gerbera -g gerbera -s /bin/false gerbera + fi + + chown -R gerbera:gerbera /var/lib/gerbera + chown -R gerbera:gerbera /var/log/gerbera +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + if getent passwd gerbera &>/dev/null; then + userdel gerbera >/dev/null + fi + if getent group gerbera &>/dev/null; then + groupdel gerbera >/dev/null + fi +} diff --git a/gerbera-legacy/gerbera.run b/gerbera-legacy/gerbera.run new file mode 100644 index 0000000..f546ee8 --- /dev/null +++ b/gerbera-legacy/gerbera.run @@ -0,0 +1,4 @@ +#!/bin/sh +configfile="${CONFIG:-/etc/gerbera/config.xml}" +logfile="${LOG:-/var/log/gerbera/gerbera.log}" +exec chpst -u gerbera:gerbera gerbera -c $configfile -l $logfile diff --git a/gerbera-legacy/libre.patch b/gerbera-legacy/libre.patch new file mode 100644 index 0000000..c900fec --- /dev/null +++ b/gerbera-legacy/libre.patch @@ -0,0 +1,11 @@ +--- a/web/index.html 2024-01-07 02:19:28.000000000 +0100 ++++ b/web/index.html 2024-03-27 14:40:05.367931628 +0100 +@@ -65,7 +65,7 @@ +
+
+

Welcome to Gerbera 

+-

Gerbera is an open source UPnP-AV media server.

++

Gerbera is a free and libre UPnP-AV media server.

+
+
+ diff --git a/getmail6/PKGBUILD b/getmail6/PKGBUILD new file mode 100644 index 0000000..d9c6881 --- /dev/null +++ b/getmail6/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=getmail6 +pkgver=6.18.11 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="POP3 mail retriever with reliable Maildir and command delivery" +arch=('any') +url='https://getmail6.org/' +license=('GPL-2') +conflicts=('getmail') +makedepends=('python' 'python-setuptools' 'quilt') +depends=('python-chardet') +source=("$pkgname-$pkgver.tar.gz::https://github.com/$pkgname/$pkgname/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/g/getmail6/getmail6_$_debver-$_debrel.debian.tar.xz") +sha512sums=('67fa7db20ab28b9e744922c96e05eee934c33e02bcfdff1ae621231a7017c427fbffe209c0d28f3004a5d2ad212c9ccaeada09f57a20bd98fbd5c4c9808a18bf' + '344b74cb11697f77feff41389bee78762cb2422a82e76b38cc8730ad9876c9f0b19762c74c4a60d0dd4c81aa58718663936e54c9e1f67cedd59e120ceed5b708') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + python setup.py build +} + +package() { + cd "$pkgname-$pkgver" + PYTHONHASHSEED=0 python setup.py install --skip-build --optimize=1 --root="$pkgdir" + install -Dm644 "./docs/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gexiv2/PKGBUILD b/gexiv2/PKGBUILD new file mode 100644 index 0000000..a8c890e --- /dev/null +++ b/gexiv2/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=gexiv2 +pkgver=0.14.0 +_pkgver=0.14 +pkgrel=1 +pkgdesc='GObject-based wrapper around the Exiv2 library' +url='https://wiki.gnome.org/Projects/gexiv2' +arch=(i686 x86_64) +license=(GPL-2) +depends=(exiv2 glib2) +makedepends=(gobject-introspection meson python-pygobject vala) +optdepends=('gobject-introspection: gir bindings' + 'python-pygobject: python with gobject bindings' + 'vala: vala bindings') +provides=(libgexiv2) +conflicts=(libgexiv2) +replaces=(libgexiv2) +source=(https://download.gnome.org/sources/$pkgname/$_pkgver/$pkgname-$pkgver.tar.xz) +sha512sums=('d745ae2d8ddcf0c8a2a7980eaa489f9b520af54242c5e4ddded9c3ae4a579c824c8cb659bd7e985ffa09f9fe37bdf73d6d9181d456711e0953b73023eb0f9f50') + +build() { + hyperbola-meson $pkgname-$pkgver build + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gftp/PKGBUILD b/gftp/PKGBUILD new file mode 100644 index 0000000..cb044ed --- /dev/null +++ b/gftp/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=gftp +pkgver=2.9.1b +pkgrel=1 +pkgdesc="A multithreaded FTP-client for X Windows" +arch=('i686' 'x86_64') +url='https://github.com/masneyb/gftp' +license=('Expat') +depends=('gtk2' 'libressl' 'readline') +makedepends=('intltool' 'gettext-tiny') +source=("$pkgname-$pkgver.tar.gz::https://github.com/masneyb/gftp/archive/refs/tags/$pkgver.tar.gz" + "libre.patch") +sha512sums=('82db633a169c06ab419ea9cb45feac9f81319af3b619797021da959cc7ae6a5196b8d603e6354539ee4525d834798c1a75e3ae2d26d79148a46e06496bb0e4e2' + '605c925cfe1e39c6b1b681cb3247dd43359fec43ff5aeedbb3ca30e21f8de926aa6e5b9effefe99f75606f173cef28f4dbbdb8cf70be2b41259d5d84b915c118') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + patch -Np1 -i ${srcdir}/libre.patch +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./autogen.sh + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/gftp/libre.patch b/gftp/libre.patch new file mode 100644 index 0000000..6b152aa --- /dev/null +++ b/gftp/libre.patch @@ -0,0 +1,116 @@ +--- a/docs/sample.gftp/bookmarks 2022-02-15 07:31:19.000000000 +0100 ++++ b/docs/sample.gftp/bookmarks 2024-03-26 14:55:10.604901307 +0100 +@@ -5,66 +5,6 @@ + # someone standing over your shoulder while you're editing this file. Prior to + # this, all passwords were stored in plaintext. + +-[BSD Sites/FreeBSD] +-hostname=ftp.freebsd.org +-port=21 +-protocol=FTP +-remote directory=/pub/FreeBSD +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- +-[BSD Sites/NetBSD] +-hostname=ftp.netbsd.org +-port=21 +-protocol=FTP +-remote directory=/pub +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- +-[BSD Sites/OpenBSD] +-hostname=ftp.bit.nl +-port=21 +-protocol=FTP +-remote directory=/OpenBSD +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- +-[Linux Kernel/Kernel - Mirror Service] +-hostname=mirrorservice.org +-port=21 +-protocol=FTP +-remote directory=/sites/ftp.kernel.org/pub/linux/kernel +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- +-[Linux Kernel/Kernel - Host Europe] +-hostname=ftp.hosteurope.de +-port=21 +-protocol=FTP +-remote directory=/mirror/ftp.kernel.org/pub/linux/kernel +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- +-[Linux Kernel/Kernel - Free FR] +-hostname=ftp.free.fr +-port=21 +-protocol=FTP +-remote directory=/mirrors/ftp.kernel.org/linux/kernel/ +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- + [General Sites/Nluug] + hostname=ftp.nluug.nl + port=21 +@@ -93,46 +33,6 @@ + local directory= + username=anonymous + password=@EMAIL@ +-account= +- +-[Red Hat Sites/RH Main] +-hostname=ftp.redhat.com +-port=21 +-protocol=FTP +-remote directory=/pub +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- +-[Slackware Sites/slackware.com] +-hostname=ftp.slackware.com +-port=21 +-protocol=FTP +-remote directory=/pub/slackware/slackware +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- +-[Slackware Sites/Slackware UK] +-hostname=slackware.uk +-port=21 +-protocol=FTP +-remote directory=/ +-local directory= +-username=anonymous +-password=@EMAIL@ +-account= +- +-[Debian Sites/Debian] +-hostname=ftp.debian.org +-port=21 +-protocol=FTP +-remote directory=/debian +-local directory= +-username=anonymous +-password=@EMAIL@ + account= + + [Porteus Linux/mirror vim.org] diff --git a/ghex/PKGBUILD b/ghex/PKGBUILD new file mode 100644 index 0000000..1a1acfc --- /dev/null +++ b/ghex/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=ghex +pkgver=3.18.4 +pkgrel=1 +pkgdesc="A simple, free and libre binary editor" +url='https://wiki.gnome.org/Apps/Ghex' +arch=('i686' 'x86_64') +license=('GPL-2' 'FDL-1.1') +depends=('gtk' 'mesa-libgl') +makedepends=('meson' 'yelp-tools' 'cmake' 'gettext-tiny') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/g/ghex/ghex_${pkgver}.orig.tar.xz") +sha512sums=('6121a5986ee7d7f96bf7f401e155f8aa37f076af455bc68e43d1b5b02b63bc9aed3eba5209511d1b659eb4c9093ab5d9601c14a5e868d979e92a6d0ca0cf9ce2') + +build() { + hyperbola-meson $pkgname-$pkgver build + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 "$srcdir/$pkgname-$pkgver/"COPYING{,-DOCS} -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ghostscript/PKGBUILD b/ghostscript/PKGBUILD new file mode 100644 index 0000000..9c91660 --- /dev/null +++ b/ghostscript/PKGBUILD @@ -0,0 +1,118 @@ +# Maintainer: Jesus E. + +pkgbase=ghostscript +pkgname=(ghostscript ghostxps ghostpcl) +pkgver=9.53.3 +_debver=$pkgver +_debrel=7 +pkgrel=3 +pkgdesc="An interpreter for the PostScript language" +url='https://www.ghostscript.com/' +arch=('i686' 'x86_64') +license=('AGPL-3') +depends=('libxt' 'libcups' 'fontconfig' 'zlib' 'libpng' 'libjpeg-turbo' 'jbig2dec' + 'libtiff' 'lcms2' 'libpaper' 'ijs' 'openjpeg2' 'libidn') +makedepends=('gnutls' 'glu' 'freeglut' 'quilt') +# https://github.com/ArtifexSoftware/ghostpdl-downloads/releases +source=("https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${pkgver//./}/ghostpdl-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/ghostscript/ghostscript_${_debver}~dfsg-${_debrel}+deb11u6.debian.tar.xz") +sha512sums=('1ed66f177377f099a012ee0bfdca10be8b6846e8de8e538119eb7de5c9da2edc341f8d45d8c819206908c1f98de3625acd0f647f13d82c5ec56865085cde280b' + 'e96b0438b9dd0a724ee244ebbc23950294e3ec83e1f8985d4f7193d597c2a043a7a251c1469a8d9d1d07562c57342e4c9e0997d809dc369af1150b972bcd45ee') + +### update jbig2dec first! ### + +prepare() { + cd ghostpdl-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/2* || true + + quilt push -av + fi + + # force it to use system-libs + rm -r cups/libs expat ijs jbig2dec jpeg lcms2mt libpng openjpeg tiff zlib + # using tree freetype because of https://bugs.archlinux.org/task/56849 + # lcms2mt is the new lcms2 fork aimed to replace lcms2 in a thread safe way + + # http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=40dc5b409c6262b18b4bf5386b5482ead4c511e3 + # libs link unwanted to libgpdl that isn't installed + rm -rf gpdl +} + +build() { + cd ghostpdl-${pkgver} + ./configure --prefix=/usr \ + --enable-dynamic \ + --with-ijs \ + --with-jbig2dec \ + --with-x \ + --with-drivers=ALL \ + --with-openprinting \ + --with-fontpath=/usr/share/fonts/gsfonts \ + --enable-fontconfig \ + --enable-freetype \ + --enable-openjpeg \ + --without-luratech \ + --with-libtiff \ + --with-libpaper \ + --disable-compile-inits #--help # needed for linking with system-zlib + + make so-only +} + +package_ghostscript() { + cd ghostpdl-${pkgver} + + make DESTDIR="${pkgdir}" \ + CUPSSERVERROOT="${pkgdir}/etc/cups" \ + CUPSSERVERBIN="${pkgdir}/usr/libexec/cups" \ + soinstall + ln -s gsc "${pkgdir}"/usr/bin/gs + + # remove useless broken doc/ symlink - FS#59507 + rm -f "${pkgdir}"/usr/share/ghostscript/${pkgver}/doc + + # remove unwanted localized manpages + rm -r "${pkgdir}"/usr/share/man/de + + install -Dt "${pkgdir}"/usr/share/licenses/${pkgname} -m644 LICENSE +} + +package_ghostxps() { + pkgdesc="${pkgdesc/PostScript/XPS document}" + depends=("ghostscript=${pkgver}-${pkgrel}") + + cd ghostpdl-${pkgver} + + install -Dt "${pkgdir}"/usr/bin sobin/gxpsc + ln -s gxpsc "${pkgdir}"/usr/bin/gxps + + install -Dt "${pkgdir}"/usr/lib sobin/libgxps.so.${pkgver%.*} + ln -s libgxps.so.${pkgver%.*} "${pkgdir}"/usr/lib/libgxps.so.${pkgver%%.*} + + install -Dt "${pkgdir}"/usr/share/licenses/${pkgname} -m644 LICENSE +} + +package_ghostpcl() { + pkgdesc="${pkgdesc/PostScript/PCL 6}" + depends=("ghostscript=${pkgver}-${pkgrel}") + + cd ghostpdl-${pkgver} + + install -Dt "${pkgdir}"/usr/bin sobin/gpcl6c + ln -sf gpcl6c "${pkgdir}"/usr/bin/gpcl6 + + install -Dt "${pkgdir}"/usr/lib sobin/libgpcl6.so.${pkgver%.*} + ln -s libgpcl6.so.${pkgver%.*} "${pkgdir}"/usr/lib/libgpcl6.so.${pkgver%%.*} + + install -Dt "${pkgdir}"/usr/share/licenses/${pkgname} -m644 LICENSE +} diff --git a/giflib/PKGBUILD b/giflib/PKGBUILD new file mode 100644 index 0000000..d7b173f --- /dev/null +++ b/giflib/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=giflib +pkgver=5.1.9 +_debver=5.1.9 +_debrel=1 +pkgrel=1 +pkgdesc='Library for reading and writing gif images' +url='http://giflib.sourceforge.net/' +arch=('i686' 'x86_64') +license=('Expat') +depends=('glibc') +makedepends=('xmlto' 'docbook-xml' 'docbook-xsl' 'quilt') +source=(https://downloads.sourceforge.net/project/giflib/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/g/giflib/giflib_$_debver-$_debrel.debian.tar.xz + giflib-5.1.9-fix-missing-quantize-API-symbols.patch + giflib-5.1.9-make-flags.patch) +sha512sums=('b6350b39755e3eeba58b5fccf319bbaeee2db6564e13c8ce44d3652cc32d243c391def74b6b1529bc5e0d4573eff94b2ffa5faa90fc564a049122d3e23f1d184' + '9d5f2dceb15b36446a41a21872e68d871c9e97a3b2ee7fbdca8fefe0eff85736a6872ea9fe9227e72851eef4b119e037e04f69360c6d9d7afb389b4cd0007923' + '5de1e8724f5221fa3637b4e6a482f650f7608673e2c9200233290018ec8a0bf1beea049b3979b5f57dbf2b2a5fda409324e636e9af10582fd01c71d92d4de3b3' + 'b9afd436c31b971087485c7b476f796817e6ee4f237ef8a0e61e47f8ac59fbe5e673d7194895fcc9aafbb79f133469d27c2f69041ae0cccd9acb78667c0222dd') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -Np1 < ../giflib-5.1.9-fix-missing-quantize-API-symbols.patch + fi + patch -Np1 < ../giflib-5.1.9-make-flags.patch +} + +build() { + cd ${pkgname}-${pkgver} + make +} + +check() { + cd ${pkgname}-${pkgver} + make check +} + +package() { + cd ${pkgname}-${pkgver} + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim: ts=2 sw=2 et: diff --git a/giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch b/giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch new file mode 100644 index 0000000..5948f45 --- /dev/null +++ b/giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch @@ -0,0 +1,32 @@ +From ff8d9a59e79b79657e64430730c35835a84db619 Mon Sep 17 00:00:00 2001 +From: anthraxx +Date: Tue, 2 Apr 2019 11:46:18 +0200 +Subject: [PATCH] fix missing quantize API symbols + +GifQuantizeBuffer is required by many libs and applications +like mplayer, libgdiplus (mono) and others. +--- + Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index e4ded69..17d0a5c 100644 +--- a/Makefile ++++ b/Makefile +@@ -29,11 +29,11 @@ LIBPOINT=0 + LIBVER=$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT) + + SOURCES = dgif_lib.c egif_lib.c gifalloc.c gif_err.c gif_font.c \ +- gif_hash.c openbsd-reallocarray.c ++ gif_hash.c openbsd-reallocarray.c quantize.c + HEADERS = gif_hash.h gif_lib.h gif_lib_private.h + OBJECTS = $(SOURCES:.c=.o) + +-USOURCES = qprintf.c quantize.c getarg.c ++USOURCES = qprintf.c getarg.c + UHEADERS = getarg.h + UOBJECTS = $(USOURCES:.c=.o) + +-- +2.21.0 + diff --git a/giflib/giflib-5.1.9-make-flags.patch b/giflib/giflib-5.1.9-make-flags.patch new file mode 100644 index 0000000..f50d586 --- /dev/null +++ b/giflib/giflib-5.1.9-make-flags.patch @@ -0,0 +1,43 @@ +From 788a52c399f4731ac1fb27a49db48626f3e140e1 Mon Sep 17 00:00:00 2001 +From: anthraxx +Date: Tue, 2 Apr 2019 14:53:28 +0200 +Subject: [PATCH] respect existence of distro CFLAGS and CPPFLAGS + +- append CFLAGS instead of set to honor default distro CFLAGS +- add CPPFLAGS that are defined by distros +--- + Makefile | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index e4ded69..7fef84a 100644 +--- a/Makefile ++++ b/Makefile +@@ -8,7 +8,7 @@ + # + OFLAGS = -O0 -g + OFLAGS = -O2 +-CFLAGS = -std=gnu99 -fPIC -Wall -Wno-format-truncation $(OFLAGS) ++CFLAGS += -std=gnu99 -fPIC -Wall -Wno-format-truncation $(OFLAGS) + + SHELL = /bin/sh + TAR = tar +@@ -68,13 +68,13 @@ all: libgif.so libgif.a libutil.so libutil.a $(UTILS) + $(UTILS):: libgif.a libutil.a + + libgif.so: $(OBJECTS) $(HEADERS) +- $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS) + + libgif.a: $(OBJECTS) $(HEADERS) + $(AR) rcs libgif.a $(OBJECTS) + + libutil.so: $(UOBJECTS) $(UHEADERS) +- $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS) + + libutil.a: $(UOBJECTS) $(UHEADERS) + $(AR) rcs libutil.a $(UOBJECTS) +-- +2.21.0 + diff --git a/gimp-legacy/CVE-2025-2761.patch b/gimp-legacy/CVE-2025-2761.patch new file mode 100644 index 0000000..76c6a4a --- /dev/null +++ b/gimp-legacy/CVE-2025-2761.patch @@ -0,0 +1,33 @@ +From 0806bc76ca74543d20e1307ccf6aebd26395c56c Mon Sep 17 00:00:00 2001 +From: Alx Sa +Date: Mon, 10 Mar 2025 04:07:44 +0000 +Subject: [PATCH] plug-ins: Fix ZDI-CAN-25100 for FLI plug-in + +Resolves #13073 +This patch adds a check to make sure we're not +writing beyond the bounds of the "pos" array. +This is the same check that we do earlier when +writing pos[xc++], but it was left off of the last +write command. Since "n" will be 0 if we get to the +end of the array, it prevents us from writing beyond +that. +--- + plug-ins/file-fli/fli.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plug-ins/file-fli/fli.c b/plug-ins/file-fli/fli.c +index 85dcc994395..1aba31e8f90 100644 +--- a/plug-ins/file-fli/fli.c ++++ b/plug-ins/file-fli/fli.c +@@ -1529,7 +1529,7 @@ fli_read_lc_2 (FILE *f, + xc += len << 1; + } + } +- if (lpf) ++ if (lpf && xc < n) + pos[xc] = lpn; + yc++; + } +-- +GitLab + diff --git a/gimp-legacy/PKGBUILD b/gimp-legacy/PKGBUILD new file mode 100644 index 0000000..d598139 --- /dev/null +++ b/gimp-legacy/PKGBUILD @@ -0,0 +1,115 @@ +# Maintainer: Jesus E. + +# Based on gimp-package + +_realpkgname=gimp +pkgname=$_realpkgname-legacy +pkgver=2.10.24 +_basever=2.0 +_debver=2.10.22 +_debrel=4 +pkgrel=2 +pkgdesc="GNU Image Manipulation Program (legacy version)" +arch=('i686' 'x86_64') +url='https://www.gimp.org/' +# plug-ins doesn't cover the license software, because contains an exception in GPL-3, read: LICENSE +# script-fu is GPL-3 and contains some code with Modified-BSD +license=('custom:GPL-3+Plugins-Special-Exception' LGPL-3 GPL-2) # software/plug-ins and libraries +backup=(etc/$_realpkgname/$_basever/{controller,$_realpkgname,gtk,menu,session,template,tool,unit}rc) +depends=('aalib' 'ghostscript' 'gtk2' 'libmng' 'libxmu' 'libxpm' 'mypaint-brushes1' 'poppler-data' + 'tauthon-pygtk' 'glib-networking' 'gexiv2') +makedepends=('intltool' 'iso-codes' 'libxslt' 'quilt' 'xdg-utils') +optdepends=('gutenprint: for sophisticated printing only as gimp has built-in cups print support' + 'xdg-utils: for send email support') +source=("https://download.gimp.org/pub/$_realpkgname/v${pkgver%.*}/${_realpkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/g/$_realpkgname/${_realpkgname}_${_debver}-${_debrel}+deb11u2.debian.tar.xz" + "linux_kernel.gpl" + "remove-update-check.patch" + "remove-plugins.patch" + "CVE-2025-2761.patch") +sha512sums=('828350ad5c53b8409463c24693821d78a1940f18c221249ae7b864ad9db5cf01ab41d6ec5bbefd96115f0e91809ecdc61451d71881b56b07920c442f4a514936' + 'feccd981fc3a76da3322e6ccc6958cd92b37d01bec0beedb340e0a7daafbd996452da534b203bc9781fe780e7282a897d06d38ce5ad2135c522b9a313e9a5e57' + '6f33d57f242fa8ce04b65e06a712bd54677306a45b22cb853fbe348089cd4673bd4ed91073074fe067166fe8951c370f8bbbc386783e3ed5170d52e9062666fe' + '173b865f039c1b96b7dea9868acecfe62aeedf6721c7bf0bc8d56327e6f7c2be2efd78a91bb089d67b2e9f55dd78d6691be130de9010bb9c01cef856be5166a5' + 'f653872e6051f6cf870470f6da63eae33a65b853ce50e9ac0af0f5fb732641dcb47a0c05b51b8709861bc43ce54b31162ceb2ca171f56af8199104d24adaa0ea' + '0d14f620179e41936fc8ac004f80851eb52943644d0173a2da124b4e435a98342693f357323b3677ae3c88bff4b118bf4a75ba44990389fb283f63a507fb5d1d') + +prepare() { + # gimp 2.10.22 requires gegl 0.4.26 and it's broken with gegl 0.4.30 + # gimp will update to 2.10.24 to use gegl 0.4.30 + # gegl 0.4.30 is needed by gimp-devel 2.99.6 + cd $srcdir/$_realpkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # removing the button on dialog for update-check + # possible enhancement to include that in the configure-routine + patch -Np1 -i ${srcdir}/remove-update-check.patch + + # fix check gettext-tiny in configure.ac + sed -i '\|XGETTEXT_APPLIED_VERSION| s| -f4| -f5|' configure.ac + + # remove devel-docs: this part of source code requires gtk-doc to build + # or will fail the configuration, due needs macro variables like: + # HAVE_GTK_DOC, GTK_DOC_USE_LIBTOOL, GTK_DOC_BUILD_HTML and GTK_DOC_BUILD_PDF + sed -i '\|devel-docs|d' Makefile.am configure.ac + + # replace python to tauthon in m4macros/pythondev.m4 + sed -i 's|am_display_PYTHON=python|am_display_PYTHON=tauthon|; + s|/include/python|/include/tauthon|' m4macros/pythondev.m4 + + # remove problematic plugins + rm -rf ./plug-ins/file-{dds,faxg3,ico,psd} + patch -Np1 -i ${srcdir}/remove-plugins.patch + + # fix CVE-2025-2761 + patch -Np1 -i ${srcdir}/CVE-2025-2761.patch + + autoreconf -vfi +} + +build() { + cd $_realpkgname-$pkgver + PYTHON=/usr/bin/tauthon ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-relocatable-bundle \ + --disable-check-update \ + --with-${_realpkgname}dir=$_realpkgname \ + --with-bug-report-url=https://issues.hyperbola.info \ + --without-libheif \ + --without-webp \ + --without-gudev \ + --without-webkit \ + --without-wmf \ + --without-openexr \ + --without-appdata-test + make +} + +package() { + cd $_realpkgname-$pkgver + make DESTDIR=$pkgdir install + + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname/$_realpkgname + install -Dm644 lib$_realpkgname/COPYING -t $pkgdir/usr/share/licenses/$pkgname/lib$_realpkgname + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname/$_realpkgname/plug-ins + + sed -i 's|#!/usr/bin/env python2|#!/usr/bin/env tauthon|' $pkgdir/usr/lib/$_realpkgname/$_basever/plug-ins/*/*.py + + install -Dm644 $srcdir/linux_kernel.gpl $pkgdir/usr/share/$_realpkgname/$_basever/palettes + + ln -s $_realpkgname-test-clipboard-$_basever $pkgdir/usr/bin/$_realpkgname-test-clipboard + ln -s ${_realpkgname}tool-$_basever $pkgdir/usr/bin/${_realpkgname}tool + ln -s ${_realpkgname}tool-$_basever.1.gz $pkgdir/usr/share/man/man1/${_realpkgname}tool.1.gz +} diff --git a/gimp-legacy/linux_kernel.gpl b/gimp-legacy/linux_kernel.gpl new file mode 100644 index 0000000..0a73d89 --- /dev/null +++ b/gimp-legacy/linux_kernel.gpl @@ -0,0 +1,19 @@ +GIMP Palette +Name: linux +# + 0 0 0 + 0 0 170 + 0 170 0 + 0 170 170 +170 0 0 +170 0 170 +170 85 0 +170 170 170 + 85 85 85 + 85 85 255 + 85 255 85 + 85 255 255 +255 85 85 +255 85 255 +255 255 85 +255 255 255 diff --git a/gimp-legacy/remove-plugins.patch b/gimp-legacy/remove-plugins.patch new file mode 100644 index 0000000..8d31dd8 --- /dev/null +++ b/gimp-legacy/remove-plugins.patch @@ -0,0 +1,62 @@ +--- a/plug-ins/Makefile.am 2021-03-28 23:52:56.000000000 +0200 ++++ b/plug-ins/Makefile.am 2025-05-06 15:58:13.543605935 +0200 +@@ -29,14 +29,10 @@ + $(pygimp) \ + file-bmp \ + $(file_darktable) \ +- file-dds \ + $(file_exr) \ +- file-faxg3 \ + file-fits \ + file-fli \ +- file-ico \ + file-jpeg \ +- file-psd \ + file-raw \ + file-sgi \ + file-tiff \ +--- a/plug-ins/Makefile.in 2025-05-06 15:55:32.000000000 +0200 ++++ b/plug-ins/Makefile.in 2025-05-06 15:59:08.124093723 +0200 +@@ -164,8 +164,8 @@ + done | $(am__uniquify_input)` + ETAGS = etags + CTAGS = ctags +-DIST_SUBDIRS = script-fu pygimp file-bmp file-dds file-exr file-faxg3 \ +- file-fits file-fli file-ico file-jpeg file-psd file-raw \ ++DIST_SUBDIRS = script-fu pygimp file-bmp file-exr \ ++ file-fits file-fli file-jpeg file-raw \ + file-sgi file-tiff file-webp flame fractal-explorer gfig \ + gimpressionist gradient-flare help help-browser ifs-compose \ + imagemap lighting map-object metadata pagecurl print \ +@@ -613,14 +613,10 @@ + $(pygimp) \ + file-bmp \ + $(file_darktable) \ +- file-dds \ + $(file_exr) \ +- file-faxg3 \ + file-fits \ + file-fli \ +- file-ico \ + file-jpeg \ +- file-psd \ + file-raw \ + file-sgi \ + file-tiff \ +--- a/configure.ac 2025-05-06 15:55:02.000000000 +0200 ++++ b/configure.ac 2025-05-06 16:09:52.369851392 +0200 +@@ -2942,14 +2942,10 @@ + build/windows/installer/lang/Makefile + plug-ins/Makefile + plug-ins/file-bmp/Makefile +-plug-ins/file-dds/Makefile + plug-ins/file-exr/Makefile +-plug-ins/file-faxg3/Makefile + plug-ins/file-fits/Makefile + plug-ins/file-fli/Makefile +-plug-ins/file-ico/Makefile + plug-ins/file-jpeg/Makefile +-plug-ins/file-psd/Makefile + plug-ins/file-raw/Makefile + plug-ins/file-sgi/Makefile + plug-ins/file-tiff/Makefile diff --git a/gimp-legacy/remove-update-check.patch b/gimp-legacy/remove-update-check.patch new file mode 100644 index 0000000..693f714 --- /dev/null +++ b/gimp-legacy/remove-update-check.patch @@ -0,0 +1,202 @@ +--- a/app/dialogs/about-dialog.c 2021-03-28 23:52:55.000000000 +0200 ++++ b/app/dialogs/about-dialog.c 2022-02-25 02:02:24.229474625 +0100 +@@ -286,199 +286,6 @@ + about_dialog_add_update (GimpAboutDialog *dialog, + GimpCoreConfig *config) + { +- GtkWidget *container; +- GList *children; +- GtkWidget *vbox; +- +- GtkWidget *frame; +- GtkWidget *box; +- GtkWidget *box2; +- GtkWidget *label; +- GtkWidget *button; +- GtkWidget *button_image; +- GtkWidget *button_label; +- GDateTime *datetime; +- gchar *date; +- gchar *text; +- +- if (dialog->update_frame) +- { +- gtk_widget_destroy (dialog->update_frame); +- dialog->update_frame = NULL; +- } +- +- /* Get the dialog vbox. */ +- container = gtk_dialog_get_content_area (GTK_DIALOG (dialog->dialog)); +- children = gtk_container_get_children (GTK_CONTAINER (container)); +- g_return_if_fail (GTK_IS_BOX (children->data)); +- vbox = children->data; +- g_list_free (children); +- +- /* The preferred localized date representation without the time. */ +- datetime = g_date_time_new_from_unix_local (config->last_release_timestamp); +- date = g_date_time_format (datetime, "%x"); +- g_date_time_unref (datetime); +- +- /* The update frame. */ +- frame = gtk_frame_new (NULL); +- gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 2); +- +- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); +- gtk_container_add (GTK_CONTAINER (frame), box); +- +- /* Button in the frame. */ +- button = gtk_button_new (); +- gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0); +- gtk_widget_show (button); +- +- box2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); +- gtk_container_add (GTK_CONTAINER (button), box2); +- gtk_widget_show (box2); +- +- button_image = gtk_image_new_from_icon_name (NULL, GTK_ICON_SIZE_DIALOG); +- gtk_box_pack_start (GTK_BOX (box2), button_image, FALSE, FALSE, 0); +- gtk_widget_show (button_image); +- +- button_label = gtk_label_new (NULL); +- gtk_box_pack_start (GTK_BOX (box2), button_label, FALSE, FALSE, 0); +- gtk_container_child_set (GTK_CONTAINER (box2), button_label, "expand", TRUE, NULL); +- gtk_widget_show (button_label); +- +- if (config->last_known_release != NULL) +- { +- /* There is a newer version. */ +- gchar *comment = NULL; +- +- /* We want the frame to stand out. */ +- label = gtk_label_new (NULL); +- text = g_strdup_printf ("%s", +- _("Update available!")); +- gtk_label_set_markup (GTK_LABEL (label), text); +- g_free (text); +- gtk_widget_show (label); +- gtk_frame_set_label_widget (GTK_FRAME (frame), label); +- gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5); +- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_OUT); +- gtk_box_reorder_child (GTK_BOX (vbox), frame, 3); +- +- /* Button is an update link. */ +- gtk_image_set_from_icon_name (GTK_IMAGE (button_image), +- "software-update-available", +- GTK_ICON_SIZE_DIALOG); +- g_signal_connect (button, "clicked", +- (GCallback) about_dialog_download_clicked, +- "https://www.gimp.org/downloads/"); +- +- if (config->last_revision > 0) +- { +- /* This is actually a new revision of current version. */ +- text = g_strdup_printf (_("Download GIMP %s revision %d (released on %s)\n"), +- config->last_known_release, +- config->last_revision, +- date); +- +- /* Finally an optional release comment. */ +- if (config->last_release_comment) +- { +- /* Translators: <> tags are Pango markup. Please keep these +- * markups in your translation. */ +- comment = g_strdup_printf (_("Release comment: %s"), config->last_release_comment); +- } +- } +- else +- { +- text = g_strdup_printf (_("Download GIMP %s (released on %s)\n"), +- config->last_known_release, date); +- } +- gtk_label_set_text (GTK_LABEL (button_label), text); +- g_free (text); +- g_free (date); +- +- if (comment) +- { +- label = gtk_label_new (NULL); +- gtk_label_set_max_width_chars (GTK_LABEL (label), 80); +- gtk_label_set_markup (GTK_LABEL (label), comment); +- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); +- g_free (comment); +- +- gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); +- gtk_widget_show (label); +- } +- } +- else +- { +- /* Button is a "Check for updates" action. */ +- gtk_image_set_from_icon_name (GTK_IMAGE (button_image), +- "view-refresh", +- GTK_ICON_SIZE_MENU); +- gtk_label_set_text (GTK_LABEL (button_label), _("Check for updates")); +- g_signal_connect_swapped (button, "clicked", +- (GCallback) gimp_update_check, config); +- +- } +- +- gtk_box_reorder_child (GTK_BOX (vbox), frame, 4); +- +- /* Last check date box. */ +- box2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); +- gtk_container_add (GTK_CONTAINER (box), box2); +- gtk_widget_show (box2); +- +- /* Show a small "Check for updates" button only if the big one has +- * been replaced by a download button. +- */ +- if (config->last_known_release != NULL) +- { +- button = gtk_button_new (); +- button_image = gtk_image_new_from_icon_name ("view-refresh", GTK_ICON_SIZE_MENU); +- gtk_container_add (GTK_CONTAINER (button), button_image); +- gtk_widget_set_tooltip_text (button, _("Check for updates")); +- gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0); +- g_signal_connect_swapped (button, "clicked", +- (GCallback) gimp_update_check, config); +- gtk_widget_show (button); +- gtk_widget_show (button_image); +- } +- +- if (config->check_update_timestamp > 0) +- { +- gchar *subtext; +- gchar *time; +- +- datetime = g_date_time_new_from_unix_local (config->check_update_timestamp); +- date = g_date_time_format (datetime, "%x"); +- time = g_date_time_format (datetime, "%X"); +- /* Translators: first string is the date in the locale's date +- * representation (e.g., 12/31/99), second is the time in the +- * locale's time representation (e.g., 23:13:48). +- */ +- subtext = g_strdup_printf (_("Last checked on %s at %s"), date, time); +- g_date_time_unref (datetime); +- g_free (date); +- g_free (time); +- +- text = g_strdup_printf ("%s", subtext); +- label = gtk_label_new (NULL); +- gtk_label_set_markup (GTK_LABEL (label), text); +- gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); +- gtk_box_pack_start (GTK_BOX (box2), label, FALSE, FALSE, 0); +- gtk_container_child_set (GTK_CONTAINER (box2), label, "expand", TRUE, NULL); +- gtk_widget_show (label); +- g_free (text); +- g_free (subtext); +- } +- +- gtk_widget_show (box); +- gtk_widget_show (frame); +- +- dialog->update_frame = frame; +- g_object_add_weak_pointer (G_OBJECT (frame), (gpointer) &dialog->update_frame); +- +- /* Reconstruct the dialog when release info changes. */ +- g_signal_connect (config, "notify::last-known-release", +- (GCallback) about_dialog_last_release_changed, +- dialog); + } + + static void diff --git a/girara/PKGBUILD b/girara/PKGBUILD new file mode 100644 index 0000000..0dd0bac --- /dev/null +++ b/girara/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=girara +pkgver=0.4.0 +pkgrel=1 +pkgdesc="User interface library focused on simplicity and minimalism" +url='https://pwmt.org/projects/girara' +arch=('i686' 'x86_64') +license=('zlib') +depends=('gtk' 'glib2' 'json-glib' 'pango') +makedepends=('meson' 'ninja' 'doxygen' 'check') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/pwmt/girara/archive/${pkgver}.tar.gz") +sha512sums=('a0fe58b134cc0fb8e52fceb8297fd90e4bbaa4beb76b92d2671328ebf9f794a3506a1b28dc204d710702c76d234f7f3ac8fb61ecfff85c7ef5b501cc86fabc7d') + +build() { + cd "$pkgname-$pkgver" + hyperbola-meson build + + cd build + ninja +} + +package() { + cd "$pkgname-$pkgver/build" + DESTDIR="$pkgdir/" ninja install + install -D -m664 $srcdir/$pkgname-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/git-legacy/PKGBUILD b/git-legacy/PKGBUILD new file mode 100644 index 0000000..09f36ba --- /dev/null +++ b/git-legacy/PKGBUILD @@ -0,0 +1,93 @@ +# Maintainer: Jesus E. + +_realpkgname=git +pkgname=$_realpkgname-legacy +pkgver=2.28.0 +pkgrel=1 +pkgdesc="Fast distributed version control system (legacy version)" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('curl' 'expat' 'perl' 'perl-error' 'perl-mailtools' 'libressl' 'pcre2' 'grep' 'shadow') +makedepends=('python' 'xmlto' 'asciidoc' 'gettext-tiny') +optdepends=('tk: gitk and git gui' + 'perl-term-readkey: git interactive.singlekey setting' + 'perl-cgi: gitweb (web interface) support' + 'python: git p4') +backup=('etc/conf.d/git-daemon' + 'etc/sv/git-daemon/conf') +install=$pkgname.install +source=("https://www.kernel.org/pub/software/scm/git/git-$pkgver.tar.xz" + "git-daemon.confd" + "git-daemon.initd" + "git-daemon.conf" + "git-daemon.run" + "git-daemon_log.run") +sha512sums=('a6159c0a15e3c5f9603157d4010664a6d74e7d65b9fe97a03b36fac12607248ed57980d96565841e88eae343001c167222232737d3af812608c8db011941df1a' + 'a34720bd28f238a17e8697b3a8073d66f6b435163d8029c0a30d9c166eb07482eecb185c6661a3826b1dc18299d905e0fd4a664ca031bd4bd3507520787fa7d7' + '6fcdefec671ca9b0191e32902663a3400b76cdec82500bdcf65dec1bdecb78a40678c80c7f77b0789a2877284db3400cdf52289c2221f8daa7e3fa7620ec1bfb' + '00b4f6774fd6f864344bc087ff0fafdd485293527db2a4bef0ca2ba37639383f56977c794687c345b705462c2ad442062205938ec9e5e79647aeba2f9f530537' + '1c1b54ffc6cf22d588023e61c421faadd916294803a837396e515753b56093233d1d6d93a564f227dc16bf52482914463eef53dab557abe9c7e4184d2078ced6' + '4c36e11575fb48a4beb29dd2030e0b70a4fd55f98fdd4720353e8cc78e488cb9d7c5d25ffd338e20188ead9ebfb6d6064a44f706dc66c6abe47992fa6e72e888') + +_make_paths=( + prefix='/usr' + perllibdir="$(/usr/bin/perl -MConfig -wle 'print $Config{installvendorlib}')" +) + +_make_options=( + CFLAGS="$CFLAGS" + LDFLAGS="$LDFLAGS" + INSTALL_SYMLINKS=1 + MAN_BOLD_LITERAL=1 + NO_PERL_CPAN_FALLBACKS=1 + USE_LIBPCRE2=1 +) + +build() { + cd "$srcdir/$_realpkgname-$pkgver" + + make \ + "${_make_paths[@]}" \ + "${_make_options[@]}" \ + all man + + make -C contrib/subtree "${_make_paths[@]}" all man + make -C contrib/diff-highlight "${_make_paths[@]}" +} + +package() { + cd "$srcdir/$_realpkgname-$pkgver" + + make \ + "${_make_paths[@]}" \ + "${_make_options[@]}" \ + DESTDIR="$pkgdir" \ + install install-man + + # bash completion + mkdir -p "$pkgdir"/usr/share/bash-completion/completions/ + install -m 0644 ./contrib/completion/git-completion.bash "$pkgdir"/usr/share/bash-completion/completions/git + + # fancy git prompt + mkdir -p "$pkgdir"/usr/share/git/ + install -m 0644 ./contrib/completion/git-prompt.sh "$pkgdir"/usr/share/git/git-prompt.sh + + # subtree installation + make -C contrib/subtree "${_make_paths[@]}" DESTDIR="$pkgdir" install install-man + + # the rest of the contrib stuff + find contrib/ -name '.gitignore' -delete + cp -a ./contrib/* $pkgdir/usr/share/git/ + + # git-daemon via OpenRC + install -D -m 0644 "$srcdir"/git-daemon.confd "$pkgdir"/etc/conf.d/git-daemon + install -D -m 0755 "$srcdir"/git-daemon.initd "$pkgdir"/etc/init.d/git-daemon + + # git-daemon via runit + install -D -m 0644 "$srcdir"/git-daemon.conf "$pkgdir"/etc/sv/git-daemon/conf + install -D -m 0755 "$srcdir"/git-daemon.run "$pkgdir"/etc/sv/git-daemon/run + install -D -m 0755 "$srcdir"/git-daemon_log.run "$pkgdir"/etc/sv/git-daemon/log/run + + # license + install -D -m 0644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/git-legacy/git-daemon.conf b/git-legacy/git-daemon.conf new file mode 100644 index 0000000..a9605c5 --- /dev/null +++ b/git-legacy/git-daemon.conf @@ -0,0 +1 @@ +OPTS="" diff --git a/git-legacy/git-daemon.confd b/git-legacy/git-daemon.confd new file mode 100644 index 0000000..9fb2061 --- /dev/null +++ b/git-legacy/git-daemon.confd @@ -0,0 +1,19 @@ +# conf.d file for git-daemon +# +# Please check man 1 git-daemon for more information about the options +# git-daemon accepts. You MUST edit this to include your repositories you wish +# to serve. +# +# Some of the meaningful options are: +# --syslog --- Enables syslog logging +# --verbose --- Enables verbose logging +# --export-all --- Exports all repositories +# --port=XXXX --- Starts in port XXXX instead of 9418 +# +GITDAEMON_OPTS="--syslog --base-path=/srv/git" + +# To run an anonymous git safely, the following user should be able to only +# read your Git repositories. It should not be able to write to anywhere on +# your system, esp. not the repositories. +GIT_USER="nobody" +GIT_GROUP="nobody" diff --git a/git-legacy/git-daemon.initd b/git-legacy/git-daemon.initd new file mode 100644 index 0000000..da315cb --- /dev/null +++ b/git-legacy/git-daemon.initd @@ -0,0 +1,12 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +pidfile="/var/run/git-daemon.pid" +command="/usr/bin/git" +command_args="daemon ${GITDAEMON_OPTS}" +start_stop_daemon_args="-e HOME= -e XDG_CONFIG_HOME= -b -m -p ${pidfile} -u ${GIT_USER:-nobody}:${GIT_GROUP:-nobody}" + +depend() { + use logger +} diff --git a/git-legacy/git-daemon.run b/git-legacy/git-daemon.run new file mode 100644 index 0000000..fb2ec99 --- /dev/null +++ b/git-legacy/git-daemon.run @@ -0,0 +1,8 @@ +#!/bin/sh +# This file is based on Debian's runit script file +# (C) 2005-2012 Gerrit Pape +# Licensed under GPL-2 +exec 2>&1 +[ -r conf ] && . ./conf +exec chpst -ugit "$(git --exec-path)"/git-daemon $OPTS \ + --base-path=/srv/git diff --git a/git-legacy/git-daemon_log.run b/git-legacy/git-daemon_log.run new file mode 100644 index 0000000..2d9e703 --- /dev/null +++ b/git-legacy/git-daemon_log.run @@ -0,0 +1,10 @@ +#!/bin/sh +# This file is based on Debian's runit script file +# (C) 2005-2012 Gerrit Pape +# Licensed under GPL-2 +set -e + +LOG=/var/log/git-daemon + +test -d "$LOG" || mkdir -p -m2644 "$LOG" && chown git "$LOG" +exec chpst -ugit svlogd -tt "$LOG" diff --git a/git-legacy/git-legacy.install b/git-legacy/git-legacy.install new file mode 100644 index 0000000..7ec66d3 --- /dev/null +++ b/git-legacy/git-legacy.install @@ -0,0 +1,12 @@ +post_install() { + if ! getent group git >/dev/null; then + groupadd --system git + fi + if ! getent passwd git >/dev/null; then + useradd --system -c 'git daemon user' -g git -d / -s /bin/bash git + fi +} + +post_upgrade() { + post_install $1 +} diff --git a/gkrellm/PKGBUILD b/gkrellm/PKGBUILD new file mode 100644 index 0000000..e294952 --- /dev/null +++ b/gkrellm/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=gkrellm +pkgver=2.3.11 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="System monitor package for GTK2+" +arch=('i686' 'x86_64') +url='http://gkrellm.srcbox.net/' +license=('GPL-3') +depends=('gtk2' 'libsm' 'libressl') +makedepends=('quilt') +backup=('etc/gkrellmd.conf') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/g/gkrellm/gkrellm_2.3.11.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gkrellm/gkrellm_${_debver}-${_debrel}.debian.tar.xz" + "add-libressl-support.patch" + "gkrellmd.initd" + "gkrellmd.confd" + "gkrellmd.run") +sha512sums=('f4160edd55d42ec91f47495d6e98703cba69c17ee08eae1a1d2791c800e0014752a98bbdce2621712f2fb52f5f4f8290a70ff3158bc514e7cc2c7cdf9bf3a38f' + '3cbad5999a313372ff3dc7864330ad46b3bf7e8f087f0c09a6e25acf067466ed8a1d0f54109471da99aca853a3ff43b90543697ed5ec2b222c68555652c372c6' + '8727306d0e3ef38bf50519d9e46cc8603eefdd1bc4b15b5beeb44cef69719eb5686278cc314e0e34ef7bd3856bba9eca04b9706c85ad56475c96d2f5facc4a34' + '403431a0bfe8264ccdaf3c7e361e363a18a5e2deda8b2287919030c746c7caf80571b1a2dda407c113a9f878253078e67202017a026d83dec43bc5ca0389cc06' + '257e13405bc5ce7b61b7a18e7456d1ae22d6fc2052e0e65e3b53c352a43aad2bedb4660dfd7cb95709b51f54b8949f6ff114de310be1ce49d70b074b3b8f8ef5' + 'af3e7714050a1c5f9aef978fb9d3b8eb70973d68d5ad8944bd878ddee268a38a2add927bfcc91b22776fc4f23e791930df63ce34854d8f42224c5b3fe0342712') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/add-libressl-support.patch + sed -i 's/m 644/Dm 644/' Makefile +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make LOCALEDIR=/usr/share/locale +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" PREFIX=/usr install + + # initial configuration + install -Dm644 "server/gkrellmd.conf" -t "$pkgdir/etc" + + # services + install -Dm755 "${srcdir}"/gkrellmd.initd "${pkgdir}"/etc/init.d/gkrellmd + install -Dm644 "${srcdir}"/gkrellmd.confd "${pkgdir}"/etc/conf.d/gkrellmd + install -Dm755 "${srcdir}"/gkrellmd.run "${pkgdir}"/etc/sv/gkrellmd/run + + # license + install -Dm644 COPYING COPYRIGHT -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gkrellm/add-libressl-support.patch b/gkrellm/add-libressl-support.patch new file mode 100644 index 0000000..c43a0ed --- /dev/null +++ b/gkrellm/add-libressl-support.patch @@ -0,0 +1,11 @@ +--- a/src/mail.c 2019-07-25 15:49:59.000000000 +0200 ++++ b/src/mail.c 2023-01-25 11:50:14.329437479 +0100 +@@ -4399,7 +4399,7 @@ + ssl_locks[i] = g_new(GMutex, 1); + g_mutex_init(ssl_locks[i]); + } +- CRYPTO_set_locking_callback(ssl_locking_cb); ++ CRYPTO_set_locking_callback(ssl_locks); + #endif + #endif + diff --git a/gkrellm/gkrellmd.confd b/gkrellm/gkrellmd.confd new file mode 100644 index 0000000..6b0d90d --- /dev/null +++ b/gkrellm/gkrellmd.confd @@ -0,0 +1,8 @@ +# Config file for gkrellmd init script + +# If you need to pass extra options to gkrellmd, you may set them here. +# See 'gkrellmd --help' for a list of options. +# +# Note: Many options can be configured in /etc/gkrellmd.conf as well +# +#GKRELLMD_OPTS="" diff --git a/gkrellm/gkrellmd.initd b/gkrellm/gkrellmd.initd new file mode 100644 index 0000000..7ab4cfc --- /dev/null +++ b/gkrellm/gkrellmd.initd @@ -0,0 +1,15 @@ +#!/sbin/openrc-run +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +description="gkrell system monitor daemon" +pidfile="/run/gkrellmd.pid" +command="/usr/bin/gkrellmd" +command_args="${GKRELLMD_OPTS}" +command_background="true" + +depend() { + need net + after lm_sensors + after hddtemp +} diff --git a/gkrellm/gkrellmd.run b/gkrellm/gkrellmd.run new file mode 100644 index 0000000..207fc6e --- /dev/null +++ b/gkrellm/gkrellmd.run @@ -0,0 +1,3 @@ +#!/bin/sh +/usr/bin/gkrellmd +exec pause diff --git a/glade/PKGBUILD b/glade/PKGBUILD new file mode 100644 index 0000000..e78355f --- /dev/null +++ b/glade/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=glade +pkgver=3.38.2 +pkgrel=1 +pkgdesc='User Interface Builder for GTK+ applications' +url='https://glade.gnome.org/' +arch=('i686' 'x86_64') +license=('GPL-2' 'LGPL-2') +depends=('gtk' 'libxml2') +makedepends=('gobject-introspection' 'python-gobject' 'itstool' 'docbook-xsl' + 'webkitgtk' 'meson' 'ninja' 'gettext-tiny') +source=("https://deb.debian.org/debian/pool/main/g/glade/glade_${pkgver}.orig.tar.xz" + "fix-build.patch") +sha512sums=('2df8c8363206905663cd3ac9196da44445425a888b64f1b3b3ac6cd41e14c4a82a5d2c299730ef0606c3970a04dd8f245bb5639218794eb67dcbd26fae17565e' + '37295e12f25c595630066a1fc1a0232988cdfe593c1ca5228b961794a380258ebc17a2e1d71a057678fb842291ef3a50c3d3a2e50c2babd9fbf504deb4f80801') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i ../fix-build.patch +} + +build() { + hyperbola-meson $pkgname-$pkgver build \ + -D gtk_doc=false \ + -D gjs=disabled + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + + # license + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING.GPL" -t "${pkgdir}/usr/share/licenses/$pkgname" + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING.LGPL" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/glade/fix-build.patch b/glade/fix-build.patch new file mode 100644 index 0000000..8d5bfca --- /dev/null +++ b/glade/fix-build.patch @@ -0,0 +1,10 @@ +--- a/help/LINGUAS 2021-07-14 12:33:23.236382923 +0200 ++++ b/help/LINGUAS 2021-07-14 12:33:32.196804904 +0200 +@@ -12,7 +12,6 @@ + eu + fr + gl +-hi + hu + id + it diff --git a/glew/PKGBUILD b/glew/PKGBUILD new file mode 100644 index 0000000..c801bce --- /dev/null +++ b/glew/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=glew +pkgver=2.1.0 +_debver=2.1.0 +_debrel=4 +pkgrel=1 +pkgdesc="The OpenGL Extension Wrangler Library" +arch=('i686' 'x86_64') +url="https://github.com/nigels-com/glew" +license=('Modified-BSD') +depends=('libxmu' 'libxi' 'glu') +makedepends=('quilt') +# https://sourceforge.net/projects/glew/files/glew/ +source=(https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tgz + https://deb.debian.org/debian/pool/main/g/glew/glew_$_debver-$_debrel.debian.tar.xz) +sha512sums=('9a9b4d81482ccaac4b476c34ed537585ae754a82ebb51c3efa16d953c25cc3931be46ed2e49e79c730cd8afc6a1b78c97d52cd714044a339c3bc29734cd4d2ab' + '13e26f2b18d8a13e109549c71d750ca50c275abae78218c62d4612c22c6934f94dd697e348dc66d104f3f3f9645147cb7636beaebc7649f43f7888646934d166') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + make \ + STRIP= \ + LIBDIR=/usr/lib +} + +package() { + cd ${pkgname}-${pkgver} + make install.all DESTDIR="$pkgdir" \ + LIBDIR=/usr/lib + install -D -m644 LICENSE.txt "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.txt" +} diff --git a/glfw/PKGBUILD b/glfw/PKGBUILD new file mode 100644 index 0000000..1f6893b --- /dev/null +++ b/glfw/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgbase=glfw +pkgname=('glfw' 'glfw-doc') +_pkgname=${pkgbase} +pkgver=3.3.2 +pkgrel=2 +arch=('x86_64' 'i686') +url='https://www.glfw.org/' +license=('zlib') +makedepends=('cmake' 'doxygen' 'extra-cmake-modules' 'libxcursor' 'libxi' 'libxinerama' 'libxkbcommon' 'libxrandr') +source=("${_pkgname}-${pkgver}.tar.gz::https://github.com/${_pkgname}/${_pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('f5af749d33b5b900ccf07988ad0bf51bd766a18e4cf2bc2a76020c88e98a2528ff1b965224184fe0d290cfe34b1af1e6f633600660d81194fe354078e2f35c56') + +prepare() { + cd ${_pkgname}-${pkgver} + + # remove the date from the documentation footer. + sed -i 's#Last update on \$date for##' docs/footer.html + # remove the line of "Requires.private" from the package config file. + sed -i '10d' src/${pkgbase}3.pc.in +} + +build() { + cmake \ + -S ${_pkgname}-${pkgver} \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_SHARED_LIBS=ON + make -C build VERBOSE=1 docs +} + +package_glfw() { + pkgdesc="A portable, free and libre framework for graphical application development" + depends=('mesa-libgl' 'libxcursor' 'libxi' 'libxinerama' 'libxrandr') + + make -C build DESTDIR=${pkgdir} VERBOSE=1 install + install -Dvm644 ${srcdir}/${_pkgname}-${pkgver}/LICENSE.md -t ${pkgdir}/usr/share/licenses/${pkgname} +} + +package_glfw-doc() { + pkgdesc="Documentation files for GLFW" + depends=('glfw') + + install -dv ${pkgdir}/usr/share/doc + cp -rv build/docs/html ${pkgdir}/usr/share/doc/${_pkgname} + install -Dvm644 ${srcdir}/${_pkgname}-${pkgver}/LICENSE.md -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/glib-networking/PKGBUILD b/glib-networking/PKGBUILD new file mode 100644 index 0000000..cfe3a71 --- /dev/null +++ b/glib-networking/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=glib-networking +pkgver=2.66.0 +pkgrel=1 +pkgdesc="Network extensions for GLib" +url="https://gitlab.gnome.org/GNOME/glib-networking" +arch=(i686 x86_64) +license=(custom:LGPL-2) +depends=(glib2 libproxy gnutls gsettings-desktop-schemas) +makedepends=(meson) +checkdepends=(ca-certificates) +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz + remove-systemd-support.patch) +sha512sums=('697798864746b40542873257a789290cacee425467e32c0eb096c87e124b37510753a990ef5d350f1db85c24da88e448bca9d8d8b4308123a74feac299176de5' + '449dca3f9b8c6fc117b5df7c4afbca889b5dfec1fd6c247c18eea7472b6cc9db60841c09b68c9e49258b6940edad262e015f47144496b59080b97e2025bbd22c') + +prepare() { + cd $pkgname-$pkgver + patch -p1 -i ../remove-systemd-support.patch +} + +build() { + hyperbola-meson $pkgname-$pkgver build -D openssl=disabled + ninja -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" meson install -C build + for i in COPYING LICENSE_EXCEPTION; do + install -Dm644 $pkgname-$pkgver/$i $pkgdir/usr/share/licenses/$pkgname/$i + done +} + +# vim:set ts=2 sw=2 et: diff --git a/glib-networking/remove-systemd-support.patch b/glib-networking/remove-systemd-support.patch new file mode 100644 index 0000000..c997969 --- /dev/null +++ b/glib-networking/remove-systemd-support.patch @@ -0,0 +1,29 @@ +diff --git a/proxy/libproxy/meson.build b/proxy/libproxy/meson.build +index e459bc1..6c3a608 100644 +--- a/proxy/libproxy/meson.build ++++ b/proxy/libproxy/meson.build +@@ -3,24 +3,6 @@ service_conf.set('libexecdir', libexecdir) + + service = 'org.gtk.GLib.PACRunner.service' + +-configure_file( +- input: service + '.in', +- output: service, +- install: true, +- install_dir: join_paths(datadir, 'dbus-1', 'services'), +- configuration: service_conf +-) +- +-service = 'glib-pacrunner.service' +- +-configure_file( +- input: service + '.in', +- output: service, +- install: true, +- install_dir: join_paths('lib', 'systemd', 'user'), +- configuration: service_conf +-) +- + sources = files( + 'glibproxyresolver.c', + 'libproxy-module.c' diff --git a/glib-perl/PKGBUILD b/glib-perl/PKGBUILD new file mode 100644 index 0000000..5c55747 --- /dev/null +++ b/glib-perl/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=glib-perl +pkgver=1.329.3 +_pkgver=1.3293 +pkgrel=2 +pkgdesc="Perl wrappers for glib 2.x, including GObject" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url='http://gtk2-perl.sourceforge.net/' +options=('!emptydirs') +depends=('glib2') +makedepends=('perl-extutils-depends' 'perl-extutils-pkgconfig') +source=(https://downloads.sourceforge.net/sourceforge/gtk2-perl/Glib-${_pkgver}.tar.gz) +sha512sums=('139033e207ba9b12eb8701ea9e6e363f6d36e68320cb1a8b4d5943722fe80330594e42fd6d8061794d97dbdb06fdcdd48efea480a254a1e8981ea70e933346d4') + +build() { + cd Glib-$_pkgver + PERL_USE_UNSAFE_INC=1 \ + perl Makefile.PL INSTALLDIRS=vendor + PERL_USE_UNSAFE_INC=1 \ + make +} + +package() { + cd Glib-$_pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/glibmm/PKGBUILD b/glibmm/PKGBUILD new file mode 100644 index 0000000..84423d7 --- /dev/null +++ b/glibmm/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=glibmm +pkgver=2.64.2 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="C++ bindings for GLib" +url='https://www.gtkmm.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('glib2' 'libsigc++') +makedepends=('mm-common' 'perl-xml-parser' 'clang' 'meson' 'quilt') +options=(!emptydirs) +source=("https://ftp.gnome.org/pub/GNOME/sources/${pkgname}/${pkgver:0:4}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/glibmm2.4/glibmm2.4_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('0130af9a16981a54630150db6f4b1a95458d72d650c5e4781ee97ce624ec98c600b79ebf234d212e025781453fd11d78b9e8273235ffa143397423418fe970cc' + '7fe57c06f423ac785f24dbff97954e256978e65035be7625bb76aaa5424514b99b6cf7b5406392e3b998b66d8a0b24f1f637412a2da583e4fe95710e0bfa8a40') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgname-$pkgver build -D maintainer-mode=true + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/glm/PKGBUILD b/glm/PKGBUILD new file mode 100644 index 0000000..64d5b61 --- /dev/null +++ b/glm/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=glm +pkgver=0.9.9.8 +pkgrel=1 +pkgdesc='C++ mathematics library for 3D software based on the OpenGL Shading Language (GLSL) specification' +arch=('any') +license=('Expat') +url="http://glm.g-truc.net" +source=("https://github.com/g-truc/glm/releases/download/${pkgver}/glm-${pkgver}.zip" + glm.pc.in + glmConfigVersion.cmake.in + glmConfig.cmake.in + glmTargets.cmake) +sha512sums=('8c6bdaacfac600a22d7e92b86f70bfcfe7bf7f56b05ad93c503520adbdb8432ca20c01e93a5c782cf457fe4512b29defffdc94a1316bc7f3d6747f989fff0286' + '37f3973b9913fb820a355160717cbe881586a00210c76061c436784d240eec0094132d8fb772126f8ab9cd75d3ed2da9ccb5a5c33dbdd007d77e5eca82990d25' + 'e8342b07a44fd3fab9c1262e670dda27ac22758d2bd9a682e1d82b1caba1846c2ae8b53a75a556f8cd75e961a175d6a035abd6cf545b8c05b12d2898567119fa' + '517b080a50f9ba80b5d1e15c27e9c1905912c1db640eb087272be853ad4e451a302e6b4bee4f7e5c936cadfda3a7a75421c4df1bab3759b147fbb770061cfa9a' + 'ebaf7ad8ded0abe56074cb67f8238224458587bb16223e19493819a867f0dc536114f7ddb83285b990a8bdeca246b29dacae90998386be2225397681e7c0e77d') + +package() { + cd $pkgname + + mkdir -p "$pkgdir"/usr/include/ + cp -r glm "$pkgdir"/usr/include/ + + mkdir -p "$pkgdir"/usr/share/doc + cp -r doc "$pkgdir"/usr/share/doc/glm + + # For some stupid reason, glm upstream removed the CMake install target here: + # https://github.com/g-truc/glm/commit/5f352ecce21bb1ab37fa56fac0f383c779b351a3 + # There is no reasoning for it. Discussion here: https://github.com/g-truc/glm/issues/947 + mkdir -p "$pkgdir"/usr/lib/pkgconfig/ + sed "s/@VERSION@/$pkgver/" "$srcdir"/glm.pc.in > "$pkgdir"/usr/lib/pkgconfig/glm.pc + + mkdir -p "$pkgdir"/usr/lib/cmake/glm/ + sed "s/@VERSION@/$pkgver/" "$srcdir"/glmConfigVersion.cmake.in > "$pkgdir"/usr/lib/cmake/glm/glmConfigVersion.cmake + sed "s/@VERSION@/$pkgver/" "$srcdir"/glmConfig.cmake.in > "$pkgdir"/usr/lib/cmake/glm/glmConfig.cmake + install -Dm644 "$srcdir"/glmTargets.cmake "$pkgdir"/usr/lib/cmake/glm/glmTargets.cmake + + install -Dm0644 copying.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/glm/glm.pc.in b/glm/glm.pc.in new file mode 100644 index 0000000..54052e2 --- /dev/null +++ b/glm/glm.pc.in @@ -0,0 +1,7 @@ +prefix=/usr +includedir=${prefix}/include + +Name: GLM +Description: OpenGL Mathematics +Version: @VERSION@ +Cflags: -I${includedir} diff --git a/glm/glmConfig.cmake.in b/glm/glmConfig.cmake.in new file mode 100644 index 0000000..8ab23a1 --- /dev/null +++ b/glm/glmConfig.cmake.in @@ -0,0 +1,20 @@ +set(GLM_VERSION "@VERSION@") + + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +#################################################################################### + +set_and_check(GLM_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/include") + +if (NOT CMAKE_VERSION VERSION_LESS "3.0") + include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake") +endif() diff --git a/glm/glmConfigVersion.cmake.in b/glm/glmConfigVersion.cmake.in new file mode 100644 index 0000000..561a0db --- /dev/null +++ b/glm/glmConfigVersion.cmake.in @@ -0,0 +1,31 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "@VERSION@") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") + math(EXPR installedBits "8 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE FALSE) +endif() diff --git a/glm/glmTargets.cmake b/glm/glmTargets.cmake new file mode 100644 index 0000000..905b677 --- /dev/null +++ b/glm/glmTargets.cmake @@ -0,0 +1,107 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget glm) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +# Use original install prefix when loaded through a +# cross-prefix symbolic link such as /lib -> /usr/lib. +get_filename_component(_realCurr "${_IMPORT_PREFIX}" REALPATH) +get_filename_component(_realOrig "/usr/lib/cmake/glm" REALPATH) +if(_realCurr STREQUAL _realOrig) + set(_IMPORT_PREFIX "/usr/lib/cmake/glm") +endif() +unset(_realOrig) +unset(_realCurr) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target glm +add_library(glm INTERFACE IMPORTED) + +set_target_properties(glm PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +if(CMAKE_VERSION VERSION_LESS 3.0.0) + message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/glmTargets-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/glslang/PKGBUILD b/glslang/PKGBUILD new file mode 100644 index 0000000..5c236a4 --- /dev/null +++ b/glslang/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=glslang +pkgver=8.13.3743 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="OpenGL and OpenGL ES shader front end and validator" +arch=('i686' 'x86_64') +url='https://github.com/KhronosGroup/glslang' +license=('Modified-BSD') +depends=('gcc-libs' 'spirv-tools' 'python') +makedepends=('cmake' 'ninja' 'quilt') +options=('staticlibs') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/glslang/archive/${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/g/glslang/glslang_${_debver}-${_debrel}~bpo10+1.diff.gz) +sha512sums=('19169c4ffa511113978af8e8efc57b290d4aa962a4c2429dbea1af72204787c6ce20ffbbb452dc04bef5416e00510819d84463a2e76295b9a59b409e12af6792' + 'e5a1e452c26aa08f1583192d000af51b8f8212e069ff40fa12b38da22f21cf7fb5f54cdb2a03c0d85af3ad4ef75d38f3ad41ca05d95e08ce8658556cc0f0fa28') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + patch -p1 -i "$srcdir"/glslang_${_debver}-${_debrel}~bpo10+1.diff + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + mkdir -p build-{shared,static} + (cd build-shared + cmake .. \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -Wno-dev + ninja + ) + (cd build-static + cmake .. \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -Wno-dev + ninja + ) +} + +package() { + cd ${pkgname}-${pkgver} + DESTDIR="${pkgdir}" ninja -C build-shared install + DESTDIR="${pkgdir}" ninja -C build-static install + + install -Dm644 LICENSE.txt -t "${pkgdir}"/usr/share/licenses/${pkgname} + + cd "${pkgdir}"/usr/lib + for lib in *.so; do + ln -sf "${lib}" "${lib}.0" + done +} diff --git a/gltron/PKGBUILD b/gltron/PKGBUILD new file mode 100644 index 0000000..a9f2054 --- /dev/null +++ b/gltron/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=gltron +pkgver=0.70 +_debver=$pkgver +_debrel=12.2 +pkgrel=1 +pkgdesc="A free software lightcycle game with a nice 3D perspective" +arch=('i686' 'x86_64') +url='http://www.gltron.org' +license=('GPL-2') +depends=('mesa-libgl' 'gcc-libs' 'smpeg' 'sdl' 'sdl_sound' 'libpng' 'glu') +makedepends=('quilt') +options=('!makeflags') +groups=('games') +source=("https://deb.debian.org/debian/pool/main/g/gltron/gltron_${pkgver}final.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gltron/gltron_${_debver}final-${_debrel}.debian.tar.xz") +sha512sums=('297708a145d995bfd186f1745ffa674ab44238e8c2fb627245de3c1602f578afdd9223fae696107769b3b29da476cd9623ee37183618bfb13a9a9cfa59e41bf2' + '5602a47461c1deefd59d3f12f86fc11422586914b52cd8a155b7a0f6f124136494c0b300ffe779f9208a8268fbfeff9f81e444d78c7723baa999f9d486d68748') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + + +build() { + cd "${srcdir}"/$pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --enable-network \ + --enable-warn=off + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + make DESTDIR="${pkgdir}" install + + install -Dm644 debian/$pkgname.xpm -t "${pkgdir}"/usr/share/pixmaps + install -Dm644 debian/$pkgname.desktop -t "${pkgdir}"/usr/share/applications + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/glu/LICENSE b/glu/LICENSE new file mode 100644 index 0000000..78b6de4 --- /dev/null +++ b/glu/LICENSE @@ -0,0 +1,27 @@ +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice including the dates of first publication and +either this permission notice or a reference to +http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Except as contained in this notice, the name of Silicon Graphics, Inc. +shall not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from +Silicon Graphics, Inc. diff --git a/glu/PKGBUILD b/glu/PKGBUILD new file mode 100644 index 0000000..ff72ad4 --- /dev/null +++ b/glu/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=glu +pkgver=9.0.1 +pkgrel=1 +pkgdesc="Mesa OpenGL Utility library" +arch=('i686' 'x86_64') +url="https://cgit.freedesktop.org/mesa/glu/" +license=('SGI-Free-B-2.0') +depends=('mesa-libgl') +source=(https://mesa.freedesktop.org/archive/$pkgname/$pkgname-$pkgver.tar.xz{,.sig} + LICENSE) +sha512sums=('8a6dae5b4bd63efb96d15f23ccda4ad9c2ffaa964897e5fa63d1e58360d8d4e6732c5efd2109dba04155d5fc457ab1718a65cf9b544ce0d452679ba988d04018' + 'SKIP' + 'c08e783b4ee76880c4fb8bf083934cd3c233ba1499d2923eb5c340ef8572e32b546807bd00f2037b074280f3342ef5739731d64e5ef79a3ab39020d8a4e2487e') +validpgpkeys=('3BB639E56F861FA2E86505690FDD682D974CA72A') # "Matt Turner " + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd "$srcdir/$pkgname-$pkgver" + make -k check +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 "$srcdir/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/gmime3/PKGBUILD b/gmime3/PKGBUILD new file mode 100644 index 0000000..5bea7ba --- /dev/null +++ b/gmime3/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=gmime3 +pkgver=3.2.7 +pkgrel=1 +pkgdesc="A C/C++ MIME creation and parser library with support for S/MIME, PGP, and Unix mbox spools" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url='https://github.com/jstedfast/gmime' +depends=('glib2' 'gpgme' 'zlib' 'libidn2') +makedepends=('gobject-introspection' 'vala') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/g/gmime/gmime_${pkgver}.orig.tar.xz") +sha512sums=('2c8fecd6eb74c9e956c419ce111bef6280916ea3756a534b6b800a273f0fff260717cda7fefd4bd4c6ddb27973112ec6e73fa971fa74bb9aa04cfe587d45f10b') + +build() { + cd gmime-$pkgver + ./configure \ + --prefix=/usr \ + --program-prefix=$pkgname \ + --enable-smime \ + --disable-gtk-doc \ + --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd gmime-$pkgver + make DESTDIR="$pkgdir" install + + # cleanup + rm -rf "$pkgdir/usr/share/gtk-doc" + + # license + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/gmrun/PKGBUILD b/gmrun/PKGBUILD new file mode 100644 index 0000000..e9a3d81 --- /dev/null +++ b/gmrun/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=gmrun +pkgver=1.2w +pkgrel=1 +pkgdesc="A simple program which provides a run program window" +arch=('x86_64' 'i686') +url="https://github.com/wdlkmpx/gmrun/" +license=('ISC') +depends=('gtk2' 'popt') +backup=('etc/gmrunrc') +source=("https://github.com/wdlkmpx/${pkgname}/archive/refs/tags/${pkgver}.tar.gz" + "libre.patch") +sha512sums=('c765e4a0e2c80056ab20600f06eed7038730703a331499b831331311503ecc35628fc1d32380659340bfe12fb295682f106c859b768c37e3b40214185853ee85' + 'e9303740f2ff6d9357faa24c85515dd7ab6610f8300ed80cca2da8b97f92c7781f962d23ffd85b8f14822c8f05a1f0fcdc316bc8f0ede8d7ade350bf2eb7a8d8') + +prepare() { + cd ${pkgname}-${pkgver} + + patch -p1 -i ${srcdir}/libre.patch +} + +build() { + cd ${pkgname}-${pkgver} + + ./autogen.sh + ./configure --prefix=/usr/ \ + --sysconfdir=/etc/ \ + --enable-gtk2 + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR=${pkgdir} install + install -Dm644 LICENSE -t ${pkgdir}/usr/share/licenses/$pkgname +} diff --git a/gmrun/libre.patch b/gmrun/libre.patch new file mode 100644 index 0000000..adf6c88 --- /dev/null +++ b/gmrun/libre.patch @@ -0,0 +1,31 @@ +--- a/data/gmrunrc 2021-05-08 11:59:21.000000000 +0800 ++++ b/data/gmrunrc 2021-06-25 17:06:45.019402209 +0800 +@@ -43,20 +43,21 @@ + #======================================================================= + + # URL handlers +-# If the entered text is "http://www.google.com" then: +-# - %u gets replaced with the whole URL ("http://www.google.com") +-# - %s gets replaced with "//www.google.com". ++# If the entered text is "https://search.disroot.org" then: ++# - %u gets replaced with the whole URL ("https://search.disroot.org") ++# - %s gets replaced with "//search.disroot.org". + # useful for URL's like "man:printf" --> %s becomes printf + URL_http = xdg-open '%u' ++URL_https = xdg-open '%u' + URL_mailto = xdg-email '%u' + URL_file = xdg-open '%s' + URL_man = ${TermExec} man %s + URL_info = ${TermExec} info %s +-URL_search = xdg-open 'http://www.google.com/search?q=%s' ++URL_search = xdg-open 'https://search.disroot.org/search?q=%s' + + # extension handlers + # Customize your own extension handler. + # syntax-> EXT:ext,etc = handler '%s' +-EXT:doc,rtf,txt,cc,cpp,h,java,html,htm,epl,tex,latex,js,css,xml,xsl,am,ps,pdf = xdg-open '%s' +-EXT:mkv,mp4,avi,asf,wmv = xdg-open '%s' +-EXT:mp3,flac,ogg,aac,wav = xdg-open '%s' ++EXT:txt,odt,doc,docx,rtf,pdf,htm,html,js,css,xml,xsl,tex,latex,ps,am,cc,cpp,h,epl = xdg-open '%s' ++EXT:webm,mkv,mp4,avi,asf,wmv = xdg-open '%s' ++EXT:opus,ogg,flac,mp3,aac,wav = xdg-open '%s' diff --git a/gmtp/PKGBUILD b/gmtp/PKGBUILD new file mode 100644 index 0000000..c60cf46 --- /dev/null +++ b/gmtp/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=gmtp +pkgver=1.3.11 +_debver=$pkgver +_debrel=3.1 +pkgrel=1 +pkgdesc="A simple audioplayer client for MTP based devices" +arch=('i686' 'x86_64') +url='https://gmtp.sourceforge.net/' +license=('Modified-BSD') +depends=('flac' 'gtk' 'libmtp' 'libid3tag' 'libvorbis') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://sourceforge.net/projects/gmtp/files/gMTP-${pkgver}/${pkgname}-${pkgver}.tar.gz/download" + "https://deb.debian.org/debian/pool/main/g/gmtp/gmtp_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('af6e56136c227818aab19f9eb0a0ad9f1356b24e8a8aa44d600326d632bfcb0dc2794a7c28809f2de2016a52045c1cc5c2bdae0391a0a970ea04e947f920bc95' + 'd61002d31775285a361e4c7b5a1ef59ef982cc05b36bc8e7e0ae835e41105a04a6244b7c51b0252c273991259832fbd68f2c6f63b15660c409fce076684f05d0') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + rm -rf configure + ./autogen.sh +} + +build() { + cd "${pkgname}-${pkgver}" + export GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas" + ./configure \ + --prefix=/usr \ + --disable-schemas-compile + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/gnome-common/PKGBUILD b/gnome-common/PKGBUILD new file mode 100644 index 0000000..0569b9b --- /dev/null +++ b/gnome-common/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=gnome-common +pkgver=3.18.0 +pkgrel=1 +pkgdesc='Common development macros' +arch=('any') +depends=('sh' 'autoconf-archive' 'intltool' 'yelp-tools') +license=('GPL-2') +url='https://www.gnome.org' +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz) +sha512sums=('b931c9a6668d996560549738bb2d95f86f56fa68ce930c077275bdc8fddbc2d28d215c1190099db1df851417902fca87ec81f1c0e644c5b9630a175e1cde0719') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --with-autoconf-archive + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gnome-icon-theme-symbolic/PKGBUILD b/gnome-icon-theme-symbolic/PKGBUILD new file mode 100644 index 0000000..1ef965e --- /dev/null +++ b/gnome-icon-theme-symbolic/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=gnome-icon-theme-symbolic +pkgver=3.12.0 +pkgrel=2 +pkgdesc="Basic icon theme, symbolic icons" +arch=('any') +url='https://www.gnome.org' +license=('CC-BY-SA-3.0') +depends=('hicolor-icon-theme' 'librsvg-legacy') +makedepends=('intltool' 'gettext-tiny' 'icon-naming-utils') +source=("https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('e2a662d38c5c1328f384d9bdd73ce54f4e1174a1d88763e4a5f772c2479081f11c81937ba2dc159ce250e433762f14de824516fc68209200d95dc47790471eda') + +build() { + cd "$pkgname-$pkgver" + GTK_UPDATE_ICON_CACHE=/bin/true ./configure \ + --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/gnome-icon-theme/PKGBUILD b/gnome-icon-theme/PKGBUILD new file mode 100644 index 0000000..9c70dc5 --- /dev/null +++ b/gnome-icon-theme/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=gnome-icon-theme +pkgver=3.12.0 +pkgrel=2 +pkgdesc="Basic icon theme" +arch=('any') +url='https://www.gnome.org' +license=('CC-BY-SA-3.0') +depends=('hicolor-icon-theme' 'gnome-icon-theme-symbolic') +makedepends=('intltool' 'gettext-tiny' 'icon-naming-utils') +options=('!emptydirs') +source=("https://download.gnome.org/sources/${pkgname}/${pkgver:0:4}/${pkgname}-${pkgver}.tar.xz" + "do-not-manually-set-localedir.patch" + "remove-gtk-update-icon-cache.patch") +sha512sums=('9dab14a5d30b1fa6655fbd44f15357158dc49ef01d27be678eaed35cb4a9f21546dee2a5d7fb50dac5e3595e161b0be7e7bc79daf47b772f0bb37109b0078bea' + '8ba9e6d7738284f00e4cce5a123acb4185a8ab4c61de2b380e31d86809c53f132c236f1b28455788e992f7e12ab1375fe953137d1c2686eb54d5c9e66aa97f36' + '03867e45ad65f367292a4eb1a4d56179b03492f3618f0bd1898566d7139e14628061ba2771cb1a3830485b5299307ec615e9a3fc8ef683dc433b3e68d105db65') + +prepare() { + cd "$pkgname-$pkgver" + patch -Np1 -i "$srcdir/do-not-manually-set-localedir.patch" + patch -Np1 -i "$srcdir/remove-gtk-update-icon-cache.patch" + autoreconf -vi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + rm -f "${pkgdir}/usr/share/icons/gnome/icon-theme.cache" + install -Dm644 COPYING_CCBYSA3 -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/gnome-icon-theme/do-not-manually-set-localedir.patch b/gnome-icon-theme/do-not-manually-set-localedir.patch new file mode 100644 index 0000000..80b72ec --- /dev/null +++ b/gnome-icon-theme/do-not-manually-set-localedir.patch @@ -0,0 +1,25 @@ +From: Boyuan Yang +Date: Fri, 3 Sep 2021 02:17:43 -0400 +Subject: configure.ac: Do not manually set localedir + +Manually setting localedir conflicts with the automatically +generated localedir variable in autoconf 2.70+. + +Bug-Debian: https://bugs.debian.org/978823 +--- + configure.ac | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 754676f..fdd856d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -13,8 +13,6 @@ IT_PROG_INTLTOOL([0.40.0]) + + GETTEXT_PACKAGE="${PACKAGE}" + AC_SUBST(GETTEXT_PACKAGE) +-localedir='$(prefix)/$(DATADIRNAME)/locale' +-AC_SUBST(localedir) + + # Workaround to make aclocal get the right flags + AC_SUBST(ACLOCAL_AMFLAGS, "\${ACLOCAL_FLAGS}") diff --git a/gnome-icon-theme/remove-gtk-update-icon-cache.patch b/gnome-icon-theme/remove-gtk-update-icon-cache.patch new file mode 100644 index 0000000..7d585bd --- /dev/null +++ b/gnome-icon-theme/remove-gtk-update-icon-cache.patch @@ -0,0 +1,56 @@ +--- a/configure.ac 2014-03-25 05:36:29.000000000 +0100 ++++ b/configure.ac 2025-02-01 13:55:32.813876396 +0100 +@@ -58,11 +58,6 @@ + + AC_SUBST(ICONMAP) + +-AC_PATH_PROG(GTK_UPDATE_ICON_CACHE, gtk-update-icon-cache) +-if test -z "$GTK_UPDATE_ICON_CACHE"; then +- AC_MSG_ERROR([Could not find gtk-update-icon-cache]) +-fi +- + AC_CONFIG_FILES([ + Makefile + gnome-icon-theme.pc +--- a/Makefile.in 2014-03-25 05:37:01.000000000 +0100 ++++ b/Makefile.in 2025-02-01 13:54:31.213388203 +0100 +@@ -241,7 +241,6 @@ + EXEEXT = @EXEEXT@ + GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ + GMSGFMT = @GMSGFMT@ +-GTK_UPDATE_ICON_CACHE = @GTK_UPDATE_ICON_CACHE@ + ICONMAP = @ICONMAP@ + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ +@@ -947,9 +946,6 @@ + fi + + install-data-hook: +- if test -z "$(DESTDIR)" ; then \ +- $(GTK_UPDATE_ICON_CACHE) -q $(DESTDIR)$(themedir); \ +- fi + + uninstall-hook: + @rm -f $(DESTDIR)$(themedir)/icon-theme.cache +--- a/Makefile.am 2014-03-06 15:32:35.000000000 +0100 ++++ b/Makefile.am 2025-02-01 13:55:00.823622869 +0100 +@@ -83,9 +83,6 @@ + fi + + install-data-hook: +- if test -z "$(DESTDIR)" ; then \ +- $(GTK_UPDATE_ICON_CACHE) -q $(DESTDIR)$(themedir); \ +- fi + + uninstall-hook: + @rm -f $(DESTDIR)$(themedir)/icon-theme.cache +--- a/src/Makefile.in 2014-03-25 05:37:01.000000000 +0100 ++++ b/src/Makefile.in 2025-02-01 13:56:07.924154649 +0100 +@@ -129,7 +129,6 @@ + EXEEXT = @EXEEXT@ + GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ + GMSGFMT = @GMSGFMT@ +-GTK_UPDATE_ICON_CACHE = @GTK_UPDATE_ICON_CACHE@ + ICONMAP = @ICONMAP@ + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ diff --git a/gnome-themes-extra/PKGBUILD b/gnome-themes-extra/PKGBUILD new file mode 100644 index 0000000..29717c7 --- /dev/null +++ b/gnome-themes-extra/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=gnome-themes-extra +pkgver=3.28 +pkgrel=1 +pkgdesc="Extra Themes for GTK+ based Applications" +url='https://gitlab.gnome.org/GNOME/gnome-themes-extra' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('cantarell-fonts') +makedepends=('intltool' 'gettext-tiny' 'gtk2' 'gtk') +provides=("gnome-themes-standard=$pkgver") +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/g/gnome-themes-extra/gnome-themes-extra_${pkgver}.orig.tar.xz") +sha512sums=('bccc446e86b12476b86a0fe2e3354500c8fb3eef62a85c3823d69aaa259e032e1f94e7993bf633397b669c425ef42635b0cf17b376f0b7cf1869bb1d7160ede0') + +prepare() { + cd "$pkgname-$pkgver" + intltoolize + autoreconf -fvi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gnu-efi/PKGBUILD b/gnu-efi/PKGBUILD new file mode 100644 index 0000000..d00160b --- /dev/null +++ b/gnu-efi/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=gnu-efi +pkgver=3.0.9 +_debver=3.0.9 +_debrel=2 +pkgrel=1 +pkgdesc="Develop EFI applications using the GNU toolchain and the EFI development environment" +arch=('i686' 'x86_64') +url="https://sourceforge.net/projects/gnu-efi/" +license=('Simplified-BSD') +conflicts=('gnu-efi-libs') +provides=('gnu-efi-libs') +replaces=('gnu-efi-libs') +makedepends=('quilt') +source=("https://download.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/g/gnu-efi/gnu-efi_$_debver-$_debrel.debian.tar.xz" + "${pkgname}-3.0.9-ldflags.patch") +sha512sums=('1a775476fcbe354e57c9db258b1c6ad4346b84d1794178ab5d5195b3ffba250066ca4c42a553d5b2866fa1b4e03019d61df0197f269188c73297042990adf316' + 'fbee202d818be85b576222157cb5191f301c2962f77ee904f370fb8841a722ea37f8bf919e1f0c7c8889bd0e00c590028d5a24d49eb2b8293583438bdac29350' + '7fd1c8d09ff870c33ae62887b657a7367f85a07f6709d33471ca13117a08e755853fd1e99db492d1db47444b95ae871078c4a913ed70aa7236e49349046e06b6') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + # -Werror, not even once + sed -e 's/-Werror//g' -i Make.defaults + # insert LDFLAGS into custom linker for apps + patch -Np1 -i "../${pkgname}-3.0.9-ldflags.patch" +} + +build() { + cd "$pkgname-$pkgver" + make + make -C lib + make -C gnuefi + make -C inc + # unset LDFLAGS for custom linker used in apps, as we have patched our + # LDFLAGS in manually in prepare() + LDFLAGS="" + make -C apps +} + +package() { + cd "$pkgname-$pkgver" + make INSTALLROOT="$pkgdir/" PREFIX='/usr' install + install -vDm 644 apps/*.efi -t "${pkgdir}/usr/share/${pkgname}/apps/$CARCH" + install -vDm 644 README.efilib -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 {ChangeLog,README.{gnuefi,git,elilo}} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/gnu-efi/gnu-efi-3.0.9-ldflags.patch b/gnu-efi/gnu-efi-3.0.9-ldflags.patch new file mode 100644 index 0000000..9bb2732 --- /dev/null +++ b/gnu-efi/gnu-efi-3.0.9-ldflags.patch @@ -0,0 +1,12 @@ +diff -ruN a/apps/Makefile b/apps/Makefile +--- a/apps/Makefile 2020-05-11 17:05:20.000000000 +0200 ++++ b/apps/Makefile 2020-05-26 00:32:48.470418674 +0200 +@@ -52,7 +52,7 @@ + LDSCRIPT = $(TOPDIR)/gnuefi/elf_$(ARCH)_fbsd_efi.lds + endif + +-LDFLAGS += -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS) ++LDFLAGS += -O1 --sort-common --as-needed -z relro -z now -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS) + + LOADLIBES += -lefi -lgnuefi + LOADLIBES += $(LIBGCC) diff --git a/gnu-netcat/PKGBUILD b/gnu-netcat/PKGBUILD new file mode 100644 index 0000000..e387cb6 --- /dev/null +++ b/gnu-netcat/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=gnu-netcat +pkgver=0.7.1 +pkgrel=1 +pkgdesc='GNU rewrite of netcat, the network piping application' +depends=('glibc' 'texinfo') +arch=('i686' 'x86_64') +url='http://netcat.sourceforge.net/' +license=('GPL-2') +replaces=('netcat') +provides=('netcat') +source=("https://downloads.sourceforge.net/sourceforge/netcat/netcat-$pkgver.tar.bz2") +sha512sums=('283c02f849c3bb62615a5ccb7796192804dafcecb34f3c6b553cbc12c715654963b81e253762923c6069be9768b93dde576a392b89b167912c323354f1376e83') + +build() { + cd "${srcdir}/netcat-${pkgver}" + ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info + make +} + +package() { + cd "${srcdir}/netcat-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gnucash/PKGBUILD b/gnucash/PKGBUILD new file mode 100644 index 0000000..bf3664a --- /dev/null +++ b/gnucash/PKGBUILD @@ -0,0 +1,86 @@ +# Maintainer: Jesus E. + +pkgname=gnucash +pkgver=5.6 +_debver=$pkgver +_debrel=1 +_gtestver=1.11.0 +pkgrel=2 +pkgdesc="Free and libre financial-accounting application" +arch=('i686' 'x86_64') +license=('custom:GPL-2+OpenSSL-Linking-Exception' 'Public-Domain' 'FDL-1.1') +url='https://gnucash.org/' +depends=('aqbanking' 'gwenhywfar' 'boost-libs' 'guile' 'libdbi' 'webkitgtk' 'libofx' 'yelp') +makedepends=('boost' 'cmake' 'libdbi-drivers' 'postgresql-libs' 'swig' 'quilt') +optdepends=('libdbi-drivers: open and save data into SQL database') +options=(!emptydirs) +source=("https://downloads.sourceforge.net/${pkgname}/gnucash-${pkgver}.tar.bz2" + "https://downloads.sourceforge.net/${pkgname}/gnucash-docs-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gnucash/gnucash_${_debver}-${_debrel}~bpo12+1.debian.tar.xz" + "https://github.com/google/googletest/archive/refs/tags/release-${_gtestver}.tar.gz") +sha512sums=('5ae0994a3f358bbf5ee6aeffc7a7237f6869e72c34cd551e5243e0c966dbbccfe8cdea65b7d31e016657b97175d6e5d94f5797b5adec5f94bc0b627c7a4dd435' + '2d2c2d2e209e8cf2d926aa34bd09da302e4472d835b348780ca18c0da8ddfb3f4296674473c66f0b412b43be11973c05a97a04c8919bce82ba046bcbfa499d19' + '5f995aac99148c41cc1b4932642a298d58789379a828f3415155ef1b19186adf52641565c67508886e374974dd4d2df056ca931b772bc04d4a1c99aa27f06ffe' + '6fcc7827e4c4d95e3ae643dd65e6c4fc0e3d04e1778b84f6e06e390410fe3d18026c131d828d949d2f20dde6327d30ecee24dcd3ef919e21c91e010d149f3a28') + +prepare() { + cd gnucash-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + # We don't directly support gtest and won't do that + # so using a workaround by setting that temporary. + cd googletest-release-$_gtestver + + cmake -B build -DBUILD_GMOCK=ON + make -C build + + cd $srcdir/gnucash-$pkgver + + # Do not treat warnings as errors + sed -e 's|-Werror||g' -i CMakeLists.txt + + export GTEST_ROOT=$srcdir/googletest-release-$_gtestver + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DWITH_PYTHON=ON \ + -DCOMPILE_GSCHEMAS=OFF + make + + cd $srcdir/gnucash-docs-$pkgver + + cmake \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DWITH_PDF=OFF \ + -DWITH_HTML=OFF . + make -C build +} + +package() { + cd $srcdir/gnucash-$pkgver + make DESTDIR="$pkgdir" install + + # Delete the gnucash-valgrind executable because the source files + # are not included with the package and the executable is hardlinked + # to the location that it was built at. + rm -f "$pkgdir/usr/bin/gnucash-valgrind" + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" + + cd $srcdir/gnucash-docs-$pkgver + make DESTDIR="${pkgdir}" -C build install + + install -Dm644 COPYING{,-DOCS} -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gnumeric-legacy/PKGBUILD b/gnumeric-legacy/PKGBUILD new file mode 100644 index 0000000..20e283a --- /dev/null +++ b/gnumeric-legacy/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +_realpkgname=gnumeric +pkgname=$_realpkgname-legacy +pkgver=1.12.55 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="A Spreadsheet Program (legacy version)" +arch=('i686' 'x86_64') +url='https://www.gnome.org/projects/gnumeric/' +license=('GPL-3') +depends=('goffice') +makedepends=('intltool' 'python-pygobject' 'docbook-xml' 'gobject-introspection' 'autoconf-archive' 'yelp-tools' 'quilt') +optdepends=('python-pygobject: for python plugin support' + 'perl: for perl plugin support' + 'yelp: for viewing the help manual') +source=("${_realpkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/g/gnumeric/gnumeric_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gnumeric/gnumeric_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('04127a353d5109e3a31d9a3bd42d6d177366cc6c5d900516b4c8a7a8fcaecc71bd4e2e94876719246841070964b393af97988cafbd6313cea135c1757889e878' + 'be4cb6a6e4d85474a13ef8d1797b8b5b1683cc06a206fbe6669430729aeed4d2d52cc7fee2f91da6fca91af44ff2249f2bff8cacd38bb49bf967be603fe86c37') + +prepare() { + cd $_realpkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + export GTKDOCIZE=echo + autoreconf -vfi +} + +build() { + cd $_realpkgname-$pkgver + ./configure \ + GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas" \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-schemas-compile \ + --enable-introspection \ + --disable-silent-rules \ + --disable-gtk-doc + + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $_realpkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING-gpl3 -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gnuplot/PKGBUILD b/gnuplot/PKGBUILD new file mode 100644 index 0000000..b5ee9af --- /dev/null +++ b/gnuplot/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=gnuplot +pkgver=5.4.1 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Plotting package which outputs to X11, PostScript, PNG, GIF, and others" +arch=('i686' 'x86_64') +url='http://www.gnuplot.info' +license=('GPL-2') +depends=('readline' 'gd' 'wxgtk3' 'cairo' 'libjpeg-turbo' 'lua' 'qt-svg' 'gnutls' 'libcerf') +makedepends=('qt-tools' 'quilt') +source=("https://downloads.sourceforge.net/sourceforge/$pkgname/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gnuplot/gnuplot_${_debver}+dfsg1-${_debrel}+deb11u1.debian.tar.xz" + "lua53_compat.patch") +sha512sums=('2371830636d4c9ee93e9d6566dc2889e96ece3660b63ef4cfb6514e233510e5abaf4f93863bbe9a418f11db8e3b12a15242556aae52bb69591ad7d26e6581121' + 'ead10a5e98b32e0c968449b3baa0e30e4299976248dd36755f702e174132a932dc0f66ed04f8646abf0ce84fdd30965e3dc805138870142c590f716015f56ebf' + '410b82ff7e4759ec77c446dcae33a8b14634d1627d2ce3fc43a5ce25dd071d80e7fee8232366d56bce57b12807cabb53e2a4eed4e9545be2358c510b3c7528e7') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # fix default source location; use the GDFONTPATH variable to modify at runtime + sed -i 's|/usr/X11R6/lib/X11/fonts/truetype|/usr/share/fonts/TTF|' src/variable.c + + sed -i -e 's|/usr/X11R6/lib/X11/fonts/Type1|/usr/share/fonts/Type1|' \ + -e 's|$(X11ROOT)/X11R6/lib/X11/fonts/Type1|$(X11ROOT)/usr/share/fonts/Type1|' \ + src/variable.c + + patch -p1 < "$srcdir"/lua53_compat.patch +} + +build() { + cd ${pkgname}-${pkgver} + MAKEINFO=/usr/bin/makeinfo WX_CONFIG=/usr/bin/wx-config-gtk3 ./configure --prefix=/usr \ + --with-gihdir=/usr/share/gnuplot \ + --with-readline=gnu \ + --with-bitmap-terminals \ + --with-wx-single-threaded + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gnuplot/lua53_compat.patch b/gnuplot/lua53_compat.patch new file mode 100644 index 0000000..9d3be77 --- /dev/null +++ b/gnuplot/lua53_compat.patch @@ -0,0 +1,13 @@ +diff --git a/term/lua.trm b/term/lua.trm +index af63d68..474221f 100644 +--- a/term/lua.trm ++++ b/term/lua.trm +@@ -110,6 +110,8 @@ TERM_PUBLIC void LUA_boxed_text __PROTO((unsigned int, unsigned int, int)); + # define LUA_EXTERNAL_IMAGES 1 + #endif + ++ ++#define LUA_COMPAT_APIINTCASTS + #include + #include + #include diff --git a/gnustep-base/PKGBUILD b/gnustep-base/PKGBUILD new file mode 100644 index 0000000..825b2e7 --- /dev/null +++ b/gnustep-base/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=gnustep-base +pkgver=1.27.0 +_debver=1.27.0 +_debrel=3 +pkgrel=1 +pkgdesc='The GNUstep base package' +arch=('i686' 'x86_64') +url='http://www.gnustep.org/' +license=('GPL-3') +depends=('libxslt' 'gmp' 'gcc-libs' 'libressl' 'libffi' 'gnutls' 'icu') +makedepends=('gcc-objc' 'gnustep-make' 'quilt') +groups=('gnustep-core') +options=('!emptydirs' '!makeflags') +source=(https://github.com/gnustep/libs-base/releases/download/base-${pkgver//./_}/gnustep-base-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/g/gnustep-base/gnustep-base_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('bbdf45379dbb684f6bdb507b645e0f611cefb05caadff1bf620c2e85f104396cf91782bcce05ff2173078603b76b8a0ba2ea3b71bc56a84c220310910dbcb705' + '46822c379af3453d8dc5c59e31122e80b17b4a0d3dd3f40dfdf1294be78e5d5fbbba3163cd9e8f2a36783f89f193b1b8c39941625129fa9c4bae54182b1e9d15') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + source /usr/share/GNUstep/Makefiles/GNUstep.sh + ./configure --prefix=/usr --sysconfdir=/etc/GNUstep \ + --with-ffi-include=/usr/lib/libffi-`pacman -Q libffi | cut -f2 -d\ |cut -f1 -d-`/include/ + # fix file ownership + sed -i 's/tar -xf $(TIMEZONE_ARCHIVE);/tar -xf $(TIMEZONE_ARCHIVE);chown -R root:root * ;/' NSTimeZones/Makefile.postamble + sed -i 's|.*gnutls_transport_set_lowat.*||' Source/GSSocketStream.m + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + chown -R root.root "$pkgdir/" + install -Dm644 COPYINGv3 -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gnustep-make/PKGBUILD b/gnustep-make/PKGBUILD new file mode 100644 index 0000000..7877f99 --- /dev/null +++ b/gnustep-make/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=gnustep-make +pkgver=2.8.0 +_debver=2.8.0 +_debrel=1 +pkgrel=2 +pkgdesc='The GNUstep make package' +arch=('i686' 'x86_64') +url="http://www.gnustep.org/" +license=('GPL-3') +groups=('gnustep-core') +backup=('etc/GNUstep/GNUstep.conf') +makedepends=('quilt') +source=("https://github.com/gnustep/tools-make/archive/make-${pkgver//./_}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gnustep-make/gnustep-make_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e31a018317fc2e8b93271a93a7b61fbcb06f1f5aa75a382a098434eb7b9d88493bac6a5bf80534077a17a58be7709b3d696f0f3470efb0cdf6d7277046444f2d' + '9f27f9bfcc4b6a69c9fdd894165aacc0b3aefe3521395d89a9387c25619bbb8d7324c01cb7340810f603d2a23696dbb4645fae912038f812706eec99d8b65d7b') + +prepare() { + cd "$srcdir"/tools-make-make-${pkgver//./_} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + for i in GNUSTEP_SYSTEM_ADMIN_TOOLS GNUSTEP_NETWORK_ADMIN_TOOLS GNUSTEP_LOCAL_ADMIN_TOOLS; do + sed -i "s|@$i@|/usr/bin|g" GNUstep{,-strict-v2}.conf.in filesystem.{sh,csh,make}.in + done +} + +build() { + cd "$srcdir"/tools-make-make-${pkgver//./_} + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc/GNUstep \ + --enable-native-objc-exceptions + make +} + +package() { + cd "$srcdir"/tools-make-make-${pkgver//./_} + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + diff --git a/gobby/PKGBUILD b/gobby/PKGBUILD new file mode 100644 index 0000000..c57a3a8 --- /dev/null +++ b/gobby/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=gobby +pkgver=0.6.0 +pkgrel=1 +pkgdesc="A collaborative, free and libre text editor" +arch=('i686' 'x86_64') +url='https://gobby.github.io/' +license=('ISC' 'CC0-1.0') +depends=('gtkmm' 'gtksourceview3' 'libinfinity' 'libxml++2.6') +makedepends=('gettext-tiny' 'intltool' 'yelp-tools' 'mesa-libgl') +source=("https://deb.debian.org/debian/pool/main/g/gobby/gobby_${pkgver}.orig.tar.gz") +sha512sums=('963ff10a917d13f6c10fa27e50af881d0028ba7e602876222703d2ac37cdfd8208d10a5200278cda2f26b8e0ab6619df7a742b9c1023399361664ffcd47863a6') + +build() { + cd "${pkgname}-${pkgver}" + [ -x configure ] || ./autogen.sh + export GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/gobject-introspection/PKGBUILD b/gobject-introspection/PKGBUILD new file mode 100644 index 0000000..e7546bd --- /dev/null +++ b/gobject-introspection/PKGBUILD @@ -0,0 +1,76 @@ +# Maintainer: Jesus E. + +pkgbase=gobject-introspection +pkgname=(gobject-introspection gobject-introspection-runtime) +pkgver=1.66.1 +_debver=1.66.1 +_debrel=1 +pkgrel=3 +pkgdesc="Introspection system for GObject-based libraries" +url="https://wiki.gnome.org/Projects/GObjectIntrospection" +arch=(i686 x86_64) +license=(GPL-2 LGPL-2) +depends=(python-mako python-markdown) +makedepends=(cairo python-sphinx meson glib2=2.66.2 quilt) +options=(!emptydirs) +source=(https://download.gnome.org/sources/$pkgbase/${pkgver:0:4}/$pkgbase-$pkgver.tar.xz + https://deb.debian.org/debian/pool/main/g/gobject-introspection/gobject-introspection_$_debver-$_debrel.debian.tar.xz) +sha512sums=('ea1e20cd94ff8af3572f417f35e96648ffc3e94a91d4e4c81adf99bb0f408ac21ecf40990f9dbd5f2e0f4e83360286ca5db88dbc45bd59289596a324acf7df3d' + '88ae16492150eb65d1c14f7a1e2bcc2a5ef3e9ef1487ebc9ffa03cd5d65df58243ddcb35c69cb411e0caf8e7b8a137a8b2d8c5254ab1756486b7492e34b31e85') +validpgpkeys=('923B7025EE03C1C59F42684CF0942E894B2EAFA0') # Philip Withnall + +prepare() { + cd $pkgbase-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/debian/multiarch_compat.patch || true + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgbase-$pkgver build \ + -D gtk_doc=false + meson compile -C build +} + +check() { + meson test -C build +} + +package_gobject-introspection() { + depends+=("gobject-introspection-runtime=$pkgver-$pkgrel") + + DESTDIR="$pkgdir" meson install -C build + + python -m compileall -d /usr/lib/$pkgbase "$pkgdir/usr/lib/$pkgbase" + python -O -m compileall -d /usr/lib/$pkgbase "$pkgdir/usr/lib/$pkgbase" + + for i in COPYING{,.GPL,.LGPL}; do + install -Dm644 $pkgbase-$pkgver/$i $pkgdir/usr/share/licenses/$pkgname/$i + done + +### Split runtime + mkdir -p "$srcdir/runtime/lib" + mv "$pkgdir"/usr/lib/{lib*,girepository-*} "$srcdir/runtime/lib" +} + +package_gobject-introspection-runtime() { + pkgdesc+=" (runtime library)" + depends=(glib2) + + mv "$srcdir/runtime" "$pkgdir/usr" + + for i in COPYING{,.GPL,.LGPL}; do + install -Dm644 $pkgbase-$pkgver/$i $pkgdir/usr/share/licenses/$pkgname/$i + done +} diff --git a/gocr/PKGBUILD b/gocr/PKGBUILD new file mode 100644 index 0000000..2c57be8 --- /dev/null +++ b/gocr/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=gocr +pkgver=0.52 +_debver=0.52 +_debrel=3 +pkgrel=1 +pkgdesc="OCR (Optical Character Recognition) program, which converts scanned images of text back to text files" +arch=('i686' 'x86_64') +url='https://www-e.uni-magdeburg.de/jschulen/ocr/' +license=('GPL-2') +depends=('libjpeg-turbo' 'netpbm') +makedepends=('quilt') +optdepends=('fig2dev: read xfig images' + 'tk: to use the tk frontend') +source=("https://www-e.uni-magdeburg.de/jschulen/ocr/$pkgname-$pkgver.tar.gz"{,.asc} + "https://deb.debian.org/debian/pool/main/g/gocr/gocr_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e2e6e690e7a32e32237c8b64b1a11719680c560592349df43f4b230f3c92bf324f98e473979b0913c42e33e8abbaf27952b6af173ea06eb5535878a9f608ce6d' + 'SKIP' + '02a71278eb3279a2a264dd5f3aeafb11b02784fa04620cd126fbfc3607086d79a0ea51cb7c2fe1d1dec9bbf85451cd2d055ee50cd966049f93d087678aab9462') +validpgpkeys=('3816B803D578F5AD12FDFE065D330C4953BDFBE3') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --bindir=/usr/bin --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/godot/PKGBUILD b/godot/PKGBUILD new file mode 100644 index 0000000..c97f89a --- /dev/null +++ b/godot/PKGBUILD @@ -0,0 +1,166 @@ +# Maintainer: Jesus E. + +# PKGBUILD incomplete, do not build it. +# https://docs.godotengine.org/en/latest/development/compiling/compiling_for_linuxbsd.html + +_pkgname=godot +pkgname=godot-lts +pkgver=3.3.2 +pkgrel=1 +pkgdesc='Advanced cross-platform 2D and 3D game engine' +url="https://${pkgname}engine.org" +license=(Apache-2.0 CC-BY-4.0) # software (Apache-2.0, not Expat) and logotype +arch=(i686 x86_64) +# add libyuv to replace misc/yuv2rgb.h code +depends=(alsa-lib ca-certificates enet freetype2 libgl libtheora libvorbis libvpx libwebp libxcursor libxi libxinerama libxrandr libyuv-git + miniupnpc opusfile pcre2 zstd) +# this package needs system libraries to disable builtin libraries: +# bullet, embree (x86_64 only), libsquish, libwslay, mbedtls, recastnavigation, xatlas +#depends_x86_64=(embree) +# list of builtin libraries are part in the source code: +# * cvtt: Expat https://github.com/elasota/cvtt +# * etc2comp: Apache-2.0 https://github.com/google/etc2comp +# * fonts/noto-fonts: OFL-1.1 https://github.com/googlei18n/noto-fonts +# * fonts/hack-font: Expat and Bitstream-Vera https://github.com/source-foundry/Hack +# * fonts/droid-font: Apache-2.0 https://android.googlesource.com/platform/frameworks/base/+/master/data/fonts/ +# * glad: Expat https://github.com/Dav1dde/glad +# * jpeg-compressor: (Public-Domain or Apache-2.0) and Intel https://github.com/richgel999/jpeg-compressor +# * libsimplewebm: Expat https://github.com/zaps166/libsimplewebm +# * minimp3: CC0 https://github.com/lieff/minimp3 +# * minizip: zlib and Info-Zip-BSD http://www.winimage.com/zLibDll/minizip.html (wrong tls keys in https) +# https://raw.githubusercontent.com/madler/zlib/master/contrib/minizip/MiniZip64_info.txt +# http://infozip.sourceforge.net/license.html (no https support) +# * misc/clipper* Boost-1.0 https://sourceforge.net/projects/polyclipping +# * misc/easing_equations* Modified-BSD http://robertpenner.com/easing/ (no https support) +# https://github.com/jesusgollonet/ofpennereasing +# * misc/fastlz* Expat https://github.com/ariya/FastLZ +# * misc/hq2x* Apache-2.0 https://github.com/brunexgeek/hqx +# * misc/ifaddrs-android* Modified-BSD https://chromium.googlesource.com/external/webrtc/stable/talk/+/master/base/ifaddrs-android.h +# * misc/mikktspace* zlib https://archive.blender.org/wiki/index.php/Dev:Shading/Tangent_Space_Normal_Maps/ +# * misc/open-simplex* Public-Domain https://github.com/smcameron/open-simplex-noise-in-c +# * misc/pcg* Apache-2.0 https://www.pcg-random.org +# * misc/smaz* Modified-BSD https://github.com/antirez/smaz +# * misc/stb_* Public-Domain or Expat https://github.com/nothings/stb +# * misc/triangulator* Expat https://github.com/ivanfratric/polypartition +# * misc/yuv2rgb.h NONFREE-BSD!!! http://wss.co.uk/pinknoise/yuv2rgb/ (no https support) +# code used by misc/yuv2rgb.h (yuv422_2_rgb8888(), yuv420_2_rgb8888() and yuv444_2_rgb8888() functions): +# * modules/theora/video_stream_theora.cpp (patched?) +# * modules/webm/video_stream_webm.cpp (patched?) +# * nanosvg: zlib https://github.com/memononen/nanosvg +# * oidn: Apache-2.0 https://github.com/OpenImageDenoise/oidn +# * pvrtccompressor: Modified-BSD https://bitbucket.org/jthlim/pvrtccompressor (dead link) +# * stb_rect_pack: Public-Domain or Expat https://github.com/nothings/stb +# * tinyexr: Modified-BSD https://github.com/syoyo/tinyexr +# * vhacd: Modified-BSD https://github.com/kmammou/v-hacd +makedepends=(mesa-libgl python-setuptools scons) +source=(https://downloads.tuxfamily.org/${_pkgname}engine/$pkgver/${_pkgname}-$pkgver-stable.tar.xz) +sha512sums=('90806b99065f8916ddda81e21d01d6e9fee0a9a778793ffb8db13accda3bbb5ebee8a98ecf0f0b7a4e3b647cfceba6674d8e234725736cd0fadc74f77e8f64d5') + +prepare() { + cd $_pkgname-$pkgver-stable + + # replace "thirdparty/misc/yuv2rgb.h" to code + # please do not use video codecs (and video files) this software (like: theora, vp8, pv9 and av1; and: ogv and webm) + sed -i 's|["]thirdparty/misc/yuv2rgb[.]h["]||' \ + modules/theora/video_stream_theora.cpp \ + modules/webm/video_stream_webm.cpp + sed -i 's|yuv444_2_rgb8888|//yuv444_2_rgb8888|' \ + modules/webm/video_stream_webm.cpp + sed -i 's|yuv422_2_rgb8888|//yuv422_2_rgb8888|' \ + modules/webm/video_stream_webm.cpp + sed -i 's|yuv420_2_rgb8888|//yuv420_2_rgb8888|' \ + modules/webm/video_stream_webm.cpp + sed -i 's|[/][/]libyuv[:][:]I444ToARGB|libyuv::I444ToARGB|' \ + modules/webm/video_stream_webm.cpp + sed -i 's|[/][/]libyuv[:][:]I422ToARGB|libyuv::I422ToARGB|' \ + modules/webm/video_stream_webm.cpp + sed -i 's|[/][/]libyuv[:][:]I420ToARGB|libyuv::I420ToARGB|' \ + modules/webm/video_stream_webm.cpp + #sed -i 's|[/][/]libyuv[:][:]I411ToARGB|libyuv::I411ToARGB|' \ + # modules/webm/video_stream_webm.cpp + #sed -i 's|[/][/]converted [=] true[;]|converted = true;|' \ + # modules/webm/video_stream_webm.cpp + sed -i 's|yuv444_2_rgb8888[(][(]uint8_t [*][)]dst[,] [(]uint8_t [*][)]yuv[[]0[]][.]data[,] [(]uint8_t [*][)]yuv[[]1[]][.]data[,] [(]uint8_t [*][)]yuv[[]2[]][.]data[,] size[.]x[,] size[.]y[,] yuv[[]0[]][.]stride[,] yuv[[]1[]][.]stride[,] size[.]x [<][<] 2[)]|libyuv::I444ToARGB((uint8_t *)yuv[0].data, yuv[0].stride, (uint8_t *)yuv[2].data, yuv[2].stride, (uint8_t *)yuv[1].data, yuv[1].stride, (uint8_t *)dst, size.x << 2, size.x, size.y)|' \ + modules/theora/video_stream_theora.cpp + sed -i 's|yuv422_2_rgb8888[(][(]uint8_t [*][)]dst[,] [(]uint8_t [*][)]yuv[[]0[]][.]data[,] [(]uint8_t [*][)]yuv[[]1[]][.]data[,] [(]uint8_t [*][)]yuv[[]2[]][.]data[,] size[.]x[,] size[.]y[,] yuv[[]0[]][.]stride[,] yuv[[]1[]][.]stride[,] size[.]x [<][<] 2[)]|libyuv::I422ToARGB((uint8_t *)yuv[0].data, yuv[0].stride, (uint8_t *)yuv[2].data, yuv[2].stride, (uint8_t *)yuv[1].data, yuv[1].stride, (uint8_t *)dst, size.x << 2, size.x, size.y)|' \ + modules/theora/video_stream_theora.cpp + sed -i 's|yuv420_2_rgb8888[(][(]uint8_t [*][)]dst[,] [(]uint8_t [*][)]yuv[[]0[]][.]data[,] [(]uint8_t [*][)]yuv[[]1[]][.]data[,] [(]uint8_t [*][)]yuv[[]2[]][.]data[,] size[.]x[,] size[.]y[,] yuv[[]0[]][.]stride[,] yuv[[]1[]][.]stride[,] size[.]x [<][<] 2[)]|libyuv::I420ToARGB((uint8_t *)yuv[0].data, yuv[0].stride, (uint8_t *)yuv[2].data, yuv[2].stride, (uint8_t *)yuv[1].data, yuv[1].stride, (uint8_t *)dst, size.x << 2, size.x, size.y)|' \ + modules/theora/video_stream_theora.cpp + + # remove nonfree yuv2rgb.h header (nonfree bsd license) + rm -v thirdparty/misc/yuv2rgb.h + + # convert function examples: + # * yuv444_2_rgb8888((uint8_t *)dst, (uint8_t *)yuv[0].data, (uint8_t *)yuv[1].data, (uint8_t *)yuv[2].data, size.x, size.y, yuv[0].stride, yuv[1].stride, size.x << 2); + # * libyuv::I420ToARGB((uint8_t *)yuv[0].data, yuv[0].stride, (uint8_t *)yuv[2].data, yuv[2].stride, (uint8_t *)yuv[1].data, yuv[1].stride, (uint8_t *)dst, size.x << 2, size.x, size.y); + # * yuv420_2_rgb8888(w.ptr(), image.planes[0], image.planes[1], image.planes[2], image.w, image.h, image.linesize[0], image.linesize[1], image.w << 2); + # * libyuv::I420ToARGB(image.planes[0], image.linesize[0], image.planes[2], image.linesize[2], image.planes[1], image.linesize[1], w.ptr(), image.w << 2, image.w, image.h); +} + +_build() { + scons \ + bits=$1 \ + builtin_bullet=yes \ + builtin_certs=no \ + builtin_embree=yes \ + builtin_enet=no \ + builtin_freetype=no \ + builtin_libogg=no \ + builtin_libpng=no \ + builtin_libtheora=no \ + builtin_libvorbis=no \ + builtin_libvpx=no \ + builtin_libwebp=no \ + builtin_mbedtls=yes \ + builtin_miniupnpc=no \ + builtin_opus=no \ + builtin_pcre2=no \ + builtin_pcre2_with_jit=no \ + builtin_recast=yes \ + builtin_squish=yes \ + builtin_wslay=yes \ + builtin_xatlas=yes \ + builtin_zlib=no \ + builtin_zstd=no \ + deprecated=no \ + platform=$2 \ + production=yes \ + pulseaudio=no \ + target=$3 \ + tools=$4 \ + use_lto=$5 +} + +build() { + cd $_pkgname-$pkgver-stable + + export BUILD_NAME=hyperbola_gnu+linux-libre + export SCONSFLAGS='-j1' + + _build default linuxbsd release_debug yes no # godot + #_build 32 linuxbsd release_debug no no # linux_x11_32_debug + #_build 32 linuxbsd release no no # linux_x11_32_release + #_build 64 linuxbsd release_debug no no # linux_x11_64_debug + #_build 64 linuxbsd release no no # linux_x11_64_release + #_build default server release_debug yes no # godot-headless + #_build default server release no no # godot-server +} + +package() { + cd $_pkgname-$pkgver-stable + install -Dm644 misc/dist/linux/org.${_pkgname}engine.Godot.desktop $pkgdir/usr/share/applications/$_pkgname.desktop + install -Dm644 misc/dist/linux/org.${_pkgname}engine.Godot.appdata.xml -t $pkgdir/usr/share/metainfo + install -Dm644 misc/dist/linux/org.${_pkgname}engine.Godot.xml -t $pkgdir/usr/share/metainfo + install -Dm644 icon.svg $pkgdir/usr/share/pixmaps/godot.svg + install -Dm755 bin/$_pkgname.x11.opt.tools.64 $pkgdir/usr/bin/$_pkgname + #install -Dm755 bin/$_pkgname.?.opt.tools.64 $pkgdir/usr/bin/$_pkgname-headless + #install -Dm755 bin/$_pkgname.?.opt.?.64 $pkgdir/usr/bin/$_pkgname-server + #install -Dm755 bin/$_pkgname.x11.opt.?.32 $pkgdir/usr/share/$_pkgname/templates/linux_x11_32_debug + #install -Dm755 bin/$_pkgname.x11.opt.?.32 $pkgdir/usr/share/$_pkgname/templates/linux_x11_32_release + #install -Dm755 bin/$_pkgname.x11.opt.?.64 $pkgdir/usr/share/$_pkgname/templates/linux_x11_64_debug + #install -Dm755 bin/$_pkgname.x11.opt.?.64 $pkgdir/usr/share/$_pkgname/templates/linux_x11_64_release + install -Dm644 LICENSE.txt -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 LOGO_LICENSE.md -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 thirdparty/README.md -t $pkgdir/usr/share/licenses/$pkgname/thirdparty + install -Dm644 misc/dist/linux/$_pkgname.6 -t $pkgdir/usr/share/man/man6 +} diff --git a/goffice/PKGBUILD b/goffice/PKGBUILD new file mode 100644 index 0000000..67356ef --- /dev/null +++ b/goffice/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=goffice +pkgver=0.10.55 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="A GLib/GTK+ set of document-centric objects and charting library" +url='https://git.gnome.org/browse/goffice' +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('librsvg-legacy' 'gtk' 'libgsf' 'libspectre' 'libxslt' 'lasem') +makedepends=('intltool' 'gobject-introspection' 'autoconf-archive' 'quilt' 'automake') +source=("https://download.gnome.org/sources/goffice/0.10/goffice-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/goffice/goffice_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('c49eec867e4147102b54b70847b495cad0e55fcb069c78a8374760121219b9097c1dfb5601b240e92ed68a6fb785ab5e771f7c579dd138e106ee25a1b9ddfe99' + '968a96b8537d9d64ea9145cfae1f1efa546747314691f89ded39be70afe51edaf4dc86439e1620a478bedefb2aef1a75ad4b16839ff3327f547faf61b749120f') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --enable-introspection \ + --disable-gtk-doc + + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + + # removing references towards gtk-doc + rm -rf "${pkgdir}"/usr/share/gtk-doc + + # license + install -Dm644 COPYING-gpl3 -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gopchop/PKGBUILD b/gopchop/PKGBUILD new file mode 100644 index 0000000..0133257 --- /dev/null +++ b/gopchop/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=gopchop +pkgver=1.1.8 +_debver=$pkgver +_debrel=7 +pkgrel=1 +pkgdesc="Cut and merge MPEG2-PS files at GOP boundaries without reencoding." +url='http://outflux.net/unix/software/GOPchop/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libmpeg2' 'libxml2' 'gtk2') +makedepends=('pkgconfig' 'intltool' 'quilt') +source=("https://downloads.sourceforge.net/project/gopchop/GOPchop%20-%20Development/1.1.8/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gopchop/gopchop_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5c2af09415c3bc570fe72423912ce8e604031cf58fd1d3f0ef6c29f99994a919fb9f85a2af8635886d8043485cdddfd2652ae598ae218da41edab0c2043641a5' + 'a956b9bd47b3a11f3330eff31ceede6e5ba6e66e5948d935560dc8e7564b8dbd5f91b63fa8565ece927e375591f56518505cbb2821def85089650ccffb38ccb1') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i 's|.png||g' $pkgname.desktop +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/goxel/PKGBUILD b/goxel/PKGBUILD new file mode 100644 index 0000000..b3ecd69 --- /dev/null +++ b/goxel/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=goxel +pkgver=0.11.0 +pkgrel=1 +pkgdesc="Free and libre 3D program that lets you create voxel volumes" +arch=('i686' 'x86_64') +url='https://goxel.xyz/' +license=('GPL-3') +depends=('glfw' 'gtk') +makedepends=('scons' 'python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/guillaumechereau/${pkgname}/archive/v${pkgver}.tar.gz") +sha512sums=('548b718f56d7a8e2e16ede35252b6cf86de4acaf73bda16d01571c8487ac6a02d4ac21c96597f447c3b34774d84a4be63c1ecc89e5758122cd9942ec4bf7a7fc') + +prepare() { + cd ${pkgname}-${pkgver} + + # hack for the imgui.ini file that is placed directly in the home directory + # bug report: https://github.com/guillaumechereau/goxel/issues/250 + sed -i 's#"imgui.ini"#".goxelrc"#g' ext_src/imgui/imgui.cpp + + # fix application shortcut file + sed -i 's#applications/goxel.desktop#applications/io.github.guillaumechereau.Goxel.desktop#g' Makefile + sed -i 's#\${SNAP}/icon.png#goxel#;s#Name=goxel#Name=Goxel#' snap/gui/${pkgname}.desktop +} + +build() { + cd ${pkgname}-${pkgver} + scons mode=release werror=n +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR=${pkgdir} PREFIX=/usr install + + # dix binary file permission + chmod -v +x ${pkgdir}/usr/bin/${pkgname} + + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/gpa/PKGBUILD b/gpa/PKGBUILD new file mode 100644 index 0000000..c46e178 --- /dev/null +++ b/gpa/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=gpa +pkgver=0.10.0 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="A graphical user interface for the GnuPG" +arch=('i686' 'x86_64') +url='https://www.gnupg.org/related_software/gpa/' +license=('GPL-3' 'LGPL-3') +depends=('gpgme' 'gtk2') +makedepends=('quilt') +source=("https://gnupg.org/ftp/gcrypt/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/g/gpa/gpa_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('87004fb0806e76012bc194f95afe9ef6044aec890b26e845f45c314e1bd8864f056ba5e32f9ef2e15b24b50840235e6e548a5e3006b255b4f1c20e0fd7710a3b' + '3939cfd222ca809ee508aecb7df0a22e18648ac2dcc7f2b6b451e6dc897f67c5dd02f63945792d905b86c24c41bcba2bbb2164189358a71a86b12087b30fdccf') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir/" install + install -Dm644 {AUTHORS,ChangeLog,NEWS,README,THANKS,TODO} -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gpart/PKGBUILD b/gpart/PKGBUILD new file mode 100644 index 0000000..463f27d --- /dev/null +++ b/gpart/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=gpart +pkgver=0.3 +_debver=$pkgver +_debrel=8 +pkgrel=1 +pkgdesc="Partition table rescue/guessing tool" +arch=('i686' 'x86_64') +url='https://github.com/baruch/gpart' +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/baruch/${pkgname}/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gpart/gpart_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5ee8bc551050d26dc71898d3232549d2b96e0806071571b120cbf819282da0ec2246147a0dfc44576e62d68092bb0183c1a9bb71db7ddca12c0922da60aeea35' + '21362050fd35bc6badf1ecf13b0d9b94ee28994192beac47f438928c5b40399d54beca089b43b2a088cf8e82bfca6c9940c78bbd2a32657fc4c539bffdebe699') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make prefix="${pkgdir}"/usr sbindir="${pkgdir}"/usr/bin install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gparted/PKGBUILD b/gparted/PKGBUILD new file mode 100644 index 0000000..b769dbb --- /dev/null +++ b/gparted/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=gparted +pkgver=1.5.0 +pkgrel=2 +pkgdesc="A lightweight frontend to GNU Parted" +arch=('i686' 'x86_64') +url='https://gparted.org/' +license=('GPL-2' 'FDL-1.2' 'FDL-1.3' 'Modified-BSD') +depends=('parted' 'gtkmm') +makedepends=('intltool' 'itstool' 'pkg-config' 'yelp-tools' 'gettext-tiny') +optdepends=('dosfstools: for FAT16 and FAT32 partitions' + 'jfsutils: for jfs partitions' + 'f2fs-tools: for Flash-Friendly File System' + 'btrfs-progs: for btrfs partitions' + 'exfatprogs: for exFAT partitions' + 'ntfs-3g: for ntfs partitions' + 'reiserfsprogs: for reiser partitions' + 'xfsprogs: for xfs partitions' + 'nilfs-utils: for nilfs2 support' + 'gpart: for recovering corrupt partition tables' + 'mtools: utilities to access MS-DOS disks' + 'xenocara-xhost: authorization from X11') +source=("https://downloads.sourceforge.net/project/${pkgname}/${pkgname}/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz" + "copyright::https://metadata.ftp-master.debian.org/changelogs//main/g/gparted/gparted_${pkgver}-1_copyright") +sha512sums=('af32358bc470d30c38cdf688e8f940548c7361808fbc7712dc79ef6d196e3bfbf9c9e0ee499729e78d4b782ed1f52ea1f55c983e9afe8fc3fea765078ffbddad' + 'e7efea820b7523fb46d662905a6a1ccb32cefca6665db7c67640459da61396bb6512f49ca12ec254c948d4eba645a17efbe97ca109b4152bd6ed4106882e1141') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/libexec/gparted \ + --disable-online-resize \ + --enable-libparted-dmraid \ + --enable-xhost-root + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING ${srcdir}/copyright -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gperf/PKGBUILD b/gperf/PKGBUILD new file mode 100644 index 0000000..294bc05 --- /dev/null +++ b/gperf/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=gperf +pkgver=3.1 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="Perfect hash function generator" +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/gperf/' +license=('GPL-3') +depends=('gcc-libs' 'texinfo') +makedepends=('quilt') +options=('!makeflags') +source=("https://ftp.gnu.org/pub/gnu/gperf/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gperf/gperf_$_debver-$_debrel.debian.tar.xz") +sha512sums=('855ebce5ff36753238a44f14c95be7afdc3990b085960345ca2caf1a2db884f7db74d406ce9eec2f4a52abb8a063d4ed000a36b317c9a353ef4e25e2cca9a3f4' + 'a76ce58c1263e321b805f5ea5e0cbc93f20ac28e88439cfec0c23eca865d49ebdcec85291ab5dc987437d2b4a9e8432fa61c9ba308151b6528f809b40ee71c6e') + +prepare() { + cd "${srcdir}"/${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --docdir=/usr/share/gperf/doc/ + make +} + +package() { + cd "${srcdir}"/${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/gphoto2/PKGBUILD b/gphoto2/PKGBUILD new file mode 100644 index 0000000..349d3e8 --- /dev/null +++ b/gphoto2/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=gphoto2 +pkgver=2.5.27 +_debver=2.5.27 +_debrel=1 +pkgrel=1 +pkgdesc='A digital camera download and access program.' +arch=('i686' 'x86_64') +url='http://www.gphoto.org' +license=('GPL-2') +depends=('libgphoto2' 'popt') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/gphoto/${pkgname}-${pkgver}.tar.bz2{,.asc} + https://deb.debian.org/debian/pool/main/g/gphoto2/gphoto2_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('47001025d3647ac809ab7fd2d9319a2966d72b00471f9a9c865dfad7091c7cac2e299ecd41dfc7997a6665cf2612d4317591964f51a9d336f848e8199e3928b7' + 'SKIP' + 'ce98b00ea6e7ba845da3da2aa1306d37ad5efbcfdc951cc1efc79b05cd07789734333cbec5febe7ef2694245a1a214115e8b1d88b728471673afd1e84bba991e') +validpgpkeys=('7C4AFD61D8AAE7570796A5172209D6902F969C95') +validpgpkeys+=('') # "Marcus Meißner (german spelling) " + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/02-do_not_use_PATH_MAX.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gphotofs/PKGBUILD b/gphotofs/PKGBUILD new file mode 100644 index 0000000..dd38e4c --- /dev/null +++ b/gphotofs/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=gphotofs +pkgver=0.5 +_debver=0.5 +_debrel=6 +pkgrel=1 +pkgdesc='FUSE filesystem module to mount your camera as a filesystem on GNU/Linux.' +arch=('i686' 'x86_64') +url='http://www.gphoto.org/proj/gphotofs/' +license=('GPL-2') +depends=('fuse2' 'glib2' 'libgphoto2') +makedepends=('pkgconfig') +source=(http://downloads.sourceforge.net/sourceforge/gphoto/gphotofs-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/g/gphotofs/gphotofs_$_debver-$_debrel.debian.tar.xz) +sha512sums=('6f5bcaf8ca820c0590ec95af55ec9438c864a298660ad15c6d6e8f59201a7f873d29f16cf77d13538111f6cec3f958ea0ac88c6c51836ab2d8c9d6cca156ed3a' + '222c664587e7874446729b1435bb56ace80db7a211ace6366ecc661f2311e720b59f01526fd10b6f4b388795a5c3c5c60937ff2a97a60d11bd60a8b47f67ef07') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gpicview/PKGBUILD b/gpicview/PKGBUILD new file mode 100644 index 0000000..0f87ad1 --- /dev/null +++ b/gpicview/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgbase=gpicview +pkgname=('gpicview-gtk2' 'gpicview') +pkgver=0.3.1 +pkgrel=1 +pkgdesc="Lightweight image viewer" +arch=('i686' 'x86_64') +url='https://www.lxde.org/' +license=('GPL-2') +makedepends=('gtk' 'gtk2' 'gettext-tiny' 'intltool') +source=("${pkgbase}-${pkgver}.tar.gz::https://github.com/lxde/gpicview/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('15f6a3201067e0eb3b71492072f207e7b95e4c672cea358eca0bb71c404e9fd5e1e7d2fd28eda11965374c192a13b496f58fedea03799ea2b7aa80da66fcd812') + +prepare() { + cd $pkgbase-$pkgver + + # apply only one main category + sed -i '/^Categories=/ s/Utility;//' gpicview.desktop.in + + autoreconf -fiv +} + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + ./configure \ + --prefix=/usr + make + + cd "$srcdir" + # GTK+ 3 version + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + ./configure \ + --prefix=/usr \ + --enable-gtk3 + make +} + +package_gpicview-gtk2() { + depends=('gtk2') + conflicts=('gpicview') + cd gtk2 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_gpicview() { + pkgdesc+=' (GTK+ 3 version)' + depends=('gtk') + conflicts=('gpicview-gtk2') + cd gtk3 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/gptfdisk/PKGBUILD b/gptfdisk/PKGBUILD new file mode 100644 index 0000000..66ea353 --- /dev/null +++ b/gptfdisk/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=gptfdisk +_debname=gdisk +pkgver=1.0.9 +_debver=$pkgver +pkgrel=2 +_debrel=2.1 +pkgdesc="A text-mode partitioning tool that works on GUID Partition Table (GPT) disks" +arch=('i686' 'x86_64') +url="https://www.rodsbooks.com/gdisk/" +license=('GPL-2') +depends=('gcc-libs' 'popt' 'util-linux' 'ncurses') +makedepends=('quilt') +provides=('gdisk') +conflicts=('gdisk') +replaces=('gdisk') +source=(https://downloads.sourceforge.net/project/$pkgname/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/g/$_debname/${_debname}_$_debver-$_debrel.debian.tar.xz + partitions.patch) +sha512sums=('c2489ac7e196cb53b9fdb18d0e421571eca43c366de8922c5c7f550aadf192558e7af69b181c30747d6cf607c1670126223465eaa5e231cc589402d94a4e97a2' + '280b1898b0e60059e3e5f7d3c0acc657f5f6b2f1e6b35aea2369f2e5dda612e6b611c72963945704e0a6f231348e73e36ee22662463eae45597215a98b3fe9ed' + 'a5b9cbb53519ae17645a240a304d69467c94a772fb6e1654abeddf3c2032f877037ecb517c84b66f687eb13fa2c248d29186e6f15b1776aa95094eec2f7608f7') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # improve partitions + patch -p1 -i ../partitions.patch + + # https://sourceforge.net/p/gptfdisk/discussion/939590/thread/bc29ca06f8/ + sed -i '/^#include /s:ncursesw/::' gptcurses.cc +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package () { + cd "$srcdir/$pkgname-$pkgver" + + install -d "$pkgdir"/usr/{bin,share/{doc/gdisk,man/man8}} + install -t "$pkgdir/usr/bin" {,c,s}gdisk fixparts + install -m644 -t "$pkgdir/usr/share/man/man8" {{,c,s}gdisk,fixparts}.8 + install -m644 -t "$pkgdir/usr/share/doc/gdisk" README NEWS + install -Dm 644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/gptfdisk/partitions.patch b/gptfdisk/partitions.patch new file mode 100644 index 0000000..8dbfebc --- /dev/null +++ b/gptfdisk/partitions.patch @@ -0,0 +1,186 @@ +diff --git a/parttypes.cc b/parttypes.cc +index b2f5a351..55d4d780 100644 +--- a/parttypes.cc ++++ b/parttypes.cc +@@ -115,6 +115,20 @@ void PartType::AddAllTypes(void) { + AddType(0x4201, "5808C8AA-7E8F-42E0-85D2-E1E90434CFB3", "Windows LDM metadata"); // Logical disk manager + AddType(0x4202, "E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D", "Windows Storage Spaces"); // A newer LDM-type setup + ++ // HyperbolaBSD partition type.... ++ AddType(0x6a00, "45EDEB33-49A3-4114-B65A-51BAFC419BEC", "HyperbolaBSD disklabel"); ++ ++ // DragonFly BSD partition type.... ++ AddType(0x6c00, "BD215AB2-1D16-11DC-8696-01301BB8A9F5", "DragonFly BSD disklabel legacy"); ++ AddType(0x6c01, "9D087404-1CA5-11DC-8817-01301BB8A9F5", "DragonFly BSD disklabel 32bit"); ++ AddType(0x6c02, "3D48CE54-1D16-11DC-8696-01301BB8A9F5", "DragonFly BSD disklabel 64bit"); ++ AddType(0x6c03, "9D58fDBD-1CA5-11DC-8817-01301BB8A9F5", "DragonFly BSD swap"); ++ AddType(0x6c04, "5CBB9AD1-862D-11DC-A94D-01301BB8A9F5", "DragonFly BSD Hammer2"); ++ AddType(0x6c05, "61DC63AC-6E38-11DC-8513-01301BB8A9F5", "DragonFly BSD Hammer"); ++ AddType(0x6c06, "9D94CE7C-1CA5-11DC-8817-01301BB8A9F5", "DragonFly BSD UFS1"); ++ AddType(0x6c07, "DBD5211B-1CA5-11DC-8817-01301BB8A9F5", "DragonFly BSD CCD"); ++ AddType(0x6c08, "9DD4478F-1CA5-11DC-8817-01301BB8A9F5", "DragonFly BSD Vinum"); ++ + // An oddball IBM filesystem.... + AddType(0x7501, "37AFFC90-EF7D-4E96-91C3-2D7AE055B174", "IBM GPFS"); // General Parallel File System (GPFS) + +@@ -135,8 +149,7 @@ void PartType::AddAllTypes(void) { + AddType(0x8200, "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F", "Linux swap"); // Linux swap (or Solaris on MBR) + AddType(0x8300, "0FC63DAF-8483-4772-8E79-3D69D8477DE4", "Linux filesystem"); // Linux native + AddType(0x8301, "8DA63339-0007-60C0-C436-083AC8230908", "Linux reserved"); +- // See https://www.freedesktop.org/software/systemd/man/systemd-gpt-auto-generator.html +- // and https://systemd.io/DISCOVERABLE_PARTITIONS ++ // See https://uapi-group.org/specifications/specs/discoverable_partitions_specification/ + AddType(0x8302, "933AC7E1-2EB4-4F13-B844-0E14E2AEF915", "Linux /home"); // Linux /home (auto-mounted by systemd) + AddType(0x8303, "44479540-F297-41B2-9AF7-D131D5F0458A", "Linux x86 root (/)"); // Linux / on x86 (auto-mounted by systemd) + AddType(0x8304, "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709", "Linux x86-64 root (/)"); // Linux / on x86-64 (auto-mounted by systemd) +@@ -154,7 +167,7 @@ void PartType::AddAllTypes(void) { + AddType(0x8310, "4D21B016-B534-45C2-A9FB-5C16E091FD2D", "Linux /var"); // Linux /var (auto-mounted by systemd) + AddType(0x8311, "7EC6F557-3BC5-4ACA-B293-16EF5DF639D1", "Linux /var/tmp"); // Linux /var/tmp (auto-mounted by systemd) + // https://systemd.io/HOME_DIRECTORY/ +- AddType(0x8312, "773F91EF-66D4-49B5-BD83-D683BF40AD16", "Linux user's home"); // used by systemd-homed ++ AddType(0x8312, "773F91EF-66D4-49B5-BD83-D683BF40AD16", "systemd user's home"); // used by systemd-homed + AddType(0x8313, "75250D76-8CC6-458E-BD66-BD47CC81A812", "Linux x86 /usr "); // Linux /usr on x86 (auto-mounted by systemd) + AddType(0x8314, "8484680C-9521-48C6-9C11-B0720656F69E", "Linux x86-64 /usr"); // Linux /usr on x86-64 (auto-mounted by systemd) + AddType(0x8315, "7D0359A3-02B3-4F0A-865C-654403E70625", "Linux ARM32 /usr"); // Linux /usr on 32-bit ARM (auto-mounted by systemd) +@@ -165,6 +178,100 @@ void PartType::AddAllTypes(void) { + AddType(0x831A, "C215D751-7BCD-4649-BE90-6627490A4C05", "Linux ARM32 /usr verity"); + AddType(0x831B, "6E11A4E7-FBCA-4DED-B9E9-E1A512BB664E", "Linux ARM64 /usr verity"); + AddType(0x831C, "6A491E03-3BE7-4545-8E38-83320E0EA880", "Linux IA-64 /usr verity"); ++ AddType(0x831D, "5996FC05-109C-48DE-808B-23FA0830B676", "Linux x86 root verity signature"); ++ AddType(0x831E, "41092B05-9FC8-4523-994F-2DEF0408B176", "Linux x86-64 root verity signature"); ++ AddType(0x831F, "42B0455F-EB11-491D-98D3-56145BA9D037", "Linux ARM32 root verity signature"); ++ AddType(0x8320, "6DB69DE6-29F4-4758-A7A5-962190F00CE3", "Linux ARM64 root verity signature"); ++ AddType(0x8321, "E98B36EE-32BA-4882-9B12-0CE14655F46A", "Linux IA-64 root verity signature"); ++ AddType(0x8322, "8F461B0D-14EE-4E81-9AA9-049B6FB97ABD", "Linux x86 /usr verity signature"); ++ AddType(0x8323, "77FF5F63-E7B6-4633-ACF4-1565B864C0E6", "Linux x86-64 /usr verity signature"); ++ AddType(0x8324, "C215D751-7BCD-4649-BE90-6627490A4C05", "Linux ARM32 /usr verity signature"); ++ AddType(0x8325, "6E11A4E7-FBCA-4DED-B9E9-E1A512BB664E", "Linux ARM64 /usr verity signature"); ++ AddType(0x8326, "6A491E03-3BE7-4545-8E38-83320E0EA880", "Linux IA-64 /usr verity signature"); ++ AddType(0x8327, "77055800-792C-4f94-B39A-98C91B762BB6", "Linux LoongArch64 root (/)"); // Linux / on 64-bit LoongArch (auto-mounted by systemd) ++ AddType(0x8328, "F3393B22-E9AF-4613-A948-9D3BFBD0C535", "Linux LoongArch64 root verity"); ++ AddType(0x8329, "5AFB67EB-ECC8-4F85-AE8E-AC1E7C50E7D0", "Linux LoongArch64 root verity signature"); ++ AddType(0x832A, "E611C702-575C-4CBE-9A46-434FA0BF7E3F", "Linux LoongArch64 /usr "); // Linux /usr on 64-bit LoongArch (auto-mounted by systemd) ++ AddType(0x832B, "F46B2C26-59AE-48f0-9106-C50ED47F673D", "Linux LoongArch64 /usr verity"); ++ AddType(0x832C, "B024F315-D330-444C-8461-44BBDE524E99", "Linux LoongArch64 /usr verity signature"); ++ AddType(0x832D, "60D5A7FE-8E7D-435C-B714-3DD8162144E1", "Linux RISCV32 root (/)"); // Linux / on 32-bit RISC-V (auto-mounted by systemd) ++ AddType(0x832E, "AE0253BE-1167-4007-AC68-43926C14C5DE", "Linux RISCV32 root verity"); ++ AddType(0x832F, "3A112A75-8729-4380-B4CF-764D79934448", "Linux RISCV32 root verity signature"); ++ AddType(0x8330, "B933FB22-5C3F-4F91-AF90-E2BB0FA50702", "Linux RISCV32 /usr "); // Linux /usr on 32-bit RISC-V (auto-mounted by systemd) ++ AddType(0x8331, "CB1EE4E3-8CD0-4136-A0A4-AA61A32E8730", "Linux RISCV32 /usr verity"); ++ AddType(0x8332, "C3836A13-3137-45BA-B583-B16C50FE5EB4", "Linux RISCV32 /usr verity signature"); ++ AddType(0x8333, "72EC70A6-CF74-40E6-BD49-4BDA08E8F224", "Linux RISCV64 root (/)"); // Linux / on 64-bit RISC-V (auto-mounted by systemd) ++ AddType(0x8334, "B6ED5582-440B-4209-B8DA-5FF7C419EA3D", "Linux RISCV64 root verity"); ++ AddType(0x8335, "EFE0F087-EA8D-4469-821A-4C2A96A8386A", "Linux RISCV64 root verity signature"); ++ AddType(0x8336, "BEAEC34B-8442-439B-A40B-984381ED097D", "Linux RISCV64 /usr "); // Linux /usr on 64-bit RISC-V (auto-mounted by systemd) ++ AddType(0x8337, "8F1056BE-9B05-47C4-81D6-BE53128E5B54", "Linux RISCV64 /usr verity"); ++ AddType(0x8338, "D2F9000A-7A18-453F-B5CD-4D32F77A7B32", "Linux RISCV64 /usr verity signature"); ++ AddType(0x8339, "37C58C8A-D913-4156-A25F-48B1B64E07F0", "Linux MIPSel32 root (/)"); // Linux / on 32-bit MIPS LittleEndian (auto-mounted by systemd) ++ AddType(0x833A, "D7D150D2-2A04-4A33-8F12-16651205FF7B", "Linux MIPSel32 root verity"); ++ AddType(0x833B, "C919CC1F-4456-4EFF-918C-F75E94525CA5", "Linux MIPSel32 root verity signature"); ++ AddType(0x833C, "0F4868E9-9952-4706-979F-3ED3A473E947", "Linux MIPSel32 /usr "); // Linux /usr on 32-bit MIPS LittleEndian (auto-mounted by systemd) ++ AddType(0x833D, "46B98D8D-B55C-4E8F-AAB3-37FCA7F80752", "Linux MIPSel32 /usr verity"); ++ AddType(0x833E, "3E23CA0B-A4BC-4B4E-8087-5AB6A26AA8A9", "Linux MIPSel32 /usr verity signature"); ++ AddType(0x833F, "700BDA43-7A34-4507-B179-EEB93D7A7CA3", "Linux MIPSel64 root (/)"); // Linux / on 64-bit MIPS LittleEndian (auto-mounted by systemd) ++ AddType(0x8340, "16B417F8-3E06-4F57-8DD2-9B5232F41AA6", "Linux MIPSel64 root verity"); ++ AddType(0x8341, "904E58EF-5C65-4A31-9C57-6AF5FC7C5DE7", "Linux MIPSel64 root verity signature"); ++ AddType(0x8342, "C97C1F32-BA06-40B4-9F22-236061B08AA8", "Linux MIPSel64 /usr "); // Linux /usr on 64-bit MIPS LittleEndian (auto-mounted by systemd) ++ AddType(0x8343, "3C3D61FE-B5F3-414D-BB71-8739A694A4EF", "Linux MIPSel64 /usr verity"); ++ AddType(0x8344, "F2C2C7EE-ADCC-4351-B5C6-EE9816B66E16", "Linux MIPSel64 /usr verity signature"); ++ AddType(0x8345, "1DE3F1EF-FA98-47B5-8DCD-4A860A654D78", "Linux POWER32 root (/)"); // Linux / on 32-bit POWER BigEndian (auto-mounted by systemd) ++ AddType(0x8346, "98CFE649-1588-46DC-B2F0-ADD147424925", "Linux POWER32 root verity"); ++ AddType(0x8347, "1B31B5AA-ADD9-463A-B2ED-BD467FC857E7", "Linux POWER32 root verity signature"); ++ AddType(0x8348, "7D14FEC5-CC71-415D-9D6C-06BF0B3C3EAF", "Linux POWER32 /usr "); // Linux /usr on 32-bit POWER BigEndian (auto-mounted by systemd) ++ AddType(0x8349, "DF765D00-270E-49E5-BC75-F47BB2118B09", "Linux POWER32 /usr verity"); ++ AddType(0x834A, "7007891D-D371-4A80-86A4-5CB875B9302E", "Linux POWER32 /usr verity signature"); ++ AddType(0x834B, "912ADE1D-A839-4913-8964-A10EEE08FBD2", "Linux POWER64 root (/)"); // Linux / on 64-bit POWER BigEndian (auto-mounted by systemd) ++ AddType(0x834C, "9225A9A3-3C19-4D89-B4F6-EEFF88F17631", "Linux POWER64 root verity"); ++ AddType(0x834D, "F5E2C20C-45B2-4FFA-BCE9-2A60737E1AAF", "Linux POWER64 root verity signature"); ++ AddType(0x834E, "2C9739E2-F068-46B3-9FD0-01C5A9AFBCCA", "Linux POWER64 /usr "); // Linux /usr on 64-bit POWER BigEndian (auto-mounted by systemd) ++ AddType(0x834F, "BDB528A5-A259-475F-A87D-DA53FA736A07", "Linux POWER64 /usr verity"); ++ AddType(0x8350, "0B888863-D7F8-4D9E-9766-239FCE4D58AF", "Linux POWER64 /usr verity signature"); ++ AddType(0x8351, "C31C45E6-3F39-412E-80FB-4809C4980599", "Linux POWERel64 root (/)"); // Linux / on 64-bit POWER LittleEndian (auto-mounted by systemd) ++ AddType(0x8352, "906BD944-4589-4AAE-A4E4-DD983917446A", "Linux POWERel64 root verity"); ++ AddType(0x8353, "D4A236E7-E873-4C07-BF1D-BF6CF7F1C3C6", "Linux POWERel64 root verity signature"); ++ AddType(0x8354, "15BB03AF-77E7-4D4A-B12B-C0D084F7491C", "Linux POWERel64 /usr "); // Linux /usr on 64-bit POWER LittleEndian (auto-mounted by systemd) ++ AddType(0x8355, "EE2B9983-21E8-4153-86D9-B6901A54D1CE", "Linux POWERel64 /usr verity"); ++ AddType(0x8356, "C8BFBD1E-268E-4521-8BBA-BF314C399557", "Linux POWERel64 /usr verity signature"); ++ AddType(0x8357, "6523F8AE-3EB1-4E2A-A05A-18B695AE656F", "Linux Alpha root (/)"); // Linux / on Alpha (auto-mounted by systemd) ++ AddType(0x8358, "FC56D9E9-E6E5-4C06-BE32-E74407CE09A5", "Linux Alpha root verity"); ++ AddType(0x8359, "D46495B7-A053-414F-80F7-700C99921EF8", "Linux Alpha root verity signature"); ++ AddType(0x835A, "E18CF08C-33EC-4C0D-8246-C6C6FB3DA024", "Linux Alpha /usr "); // Linux /usr on Alpha (auto-mounted by systemd) ++ AddType(0x835B, "8CCE0D25-C0D0-4A44-BD87-46331BF1DF67", "Linux Alpha /usr verity"); ++ AddType(0x835C, "5C6E1C76-076A-457A-A0FE-F3B4CD21CE6E", "Linux Alpha /usr verity signature"); ++ AddType(0x835D, "D27F46ED-2919-4CB8-BD25-9531F3C16534", "Linux ARC root (/)"); // Linux / on ARC (auto-mounted by systemd) ++ AddType(0x835E, "24B2D975-0F97-4521-AFA1-CD531E421B8D", "Linux ARC root verity"); ++ AddType(0x835F, "143A70BA-CBD3-4F06-919F-6C05683A78BC", "Linux ARC root verity signature"); ++ AddType(0x8360, "7978A683-6316-4922-BBEE-38BFF5A2FECC", "Linux ARC /usr "); // Linux /usr on ARC (auto-mounted by systemd) ++ AddType(0x8361, "FCA0598C-D880-4591-8C16-4EDA05C7347C", "Linux ARC /usr verity"); ++ AddType(0x8362, "94F9A9A1-9971-427A-A400-50CB297F0F35", "Linux ARC /usr verity signature"); ++ AddType(0x8363, "1AACDB3B-5444-4138-BD9E-E5C2239B2346", "Linux HPPA root (/)"); // Linux / on HPPA/PARISC (auto-mounted by systemd) ++ AddType(0x8364, "D212A430-FBC5-49F9-A983-A7FEEF2B8D0E", "Linux HPPA root verity"); ++ AddType(0x8365, "15DE6170-65D3-431C-916E-B0DCD8393F25", "Linux HPPA root verity signature"); ++ AddType(0x8366, "DC4A4480-6917-4262-A4EC-DB9384949F25", "Linux HPPA /usr "); // Linux /usr on HPPA/PARISC (auto-mounted by systemd) ++ AddType(0x8367, "5843D618-EC37-48D7-9F12-CEA8E08768B2", "Linux HPPA /usr verity"); ++ AddType(0x8368, "450DD7D1-3224-45EC-9CF2-A43A346D71EE", "Linux HPPA /usr verity signature"); ++ AddType(0x8369, "08A7ACEA-624C-4A20-91E8-6E0FA67D23F9", "Linux s390 root (/)"); // Linux / on s390 (auto-mounted by systemd) ++ AddType(0x836A, "7AC63B47-B25C-463B-8DF8-B4A94E6C90E1", "Linux s390 root verity"); ++ AddType(0x836B, "3482388E-4254-435A-A241-766A065F9960", "Linux s390 root verity signature"); ++ AddType(0x836C, "CD0F869B-D0FB-4CA0-B141-9EA87CC78D66", "Linux s390 /usr "); // Linux /usr on s390 (auto-mounted by systemd) ++ AddType(0x836D, "B663C618-E7BC-4D6D-90AA-11B756BB1797", "Linux s390 /usr verity"); ++ AddType(0x836E, "17440E4F-A8D0-467F-A46E-3912AE6EF2C5", "Linux s390 /usr verity signature"); ++ AddType(0x836F, "5EEAD9A9-FE09-4A1E-A1D7-520D00531306", "Linux s390x root (/)"); // Linux / on s390x (auto-mounted by systemd) ++ AddType(0x8370, "B325BFBE-C7BE-4AB8-8357-139E652D2F6B", "Linux s390x root verity"); ++ AddType(0x8371, "C80187A5-73A3-491A-901A-017C3FA953E9", "Linux s390x root verity signature"); ++ AddType(0x8372, "8A4F5770-50AA-4ED3-874A-99B710DB6FEA", "Linux s390x /usr "); // Linux /usr on s390x (auto-mounted by systemd) ++ AddType(0x8373, "31741CC4-1A2A-4111-A581-E00B447D2D06", "Linux s390x /usr verity"); ++ AddType(0x8374, "3F324816-667B-46AE-86EE-9B0C0C6C11B4", "Linux s390x /usr verity signature"); ++ AddType(0x8375, "C50CDD70-3862-4CC3-90E1-809A8C93EE2C", "Linux TILE-Gx root (/)"); // Linux / on TILE-Gx (auto-mounted by systemd) ++ AddType(0x8376, "966061EC-28E4-4B2E-B4A5-1F0A825A1D84", "Linux TILE-Gx root verity"); ++ AddType(0x8377, "B3671439-97B0-4A53-90F7-2D5A8f3AD47D", "Linux TILE-Gx root verity signature"); ++ AddType(0x8378, "55497029-C7C1-44CC-AA39-815ED1558630", "Linux TILE-Gx /usr "); // Linux /usr on TILE-Gx (auto-mounted by systemd) ++ AddType(0x8379, "2FB4BF56-07FA-42DA-8132-6B139F2026AE", "Linux TILE-Gx /usr verity"); ++ AddType(0x837A, "4EDE75E2-6CCC-4CC8-B9C7-70334B087510", "Linux TILE-Gx /usr verity signature"); + + // Used by Intel Rapid Start technology + AddType(0x8400, "D3BFE2DE-3DAF-11DF-BA40-E3A556D89593", "Intel Rapid Start"); +@@ -264,7 +371,7 @@ void PartType::AddAllTypes(void) { + AddType(0xa506, "74BA7DD9-A689-11E1-BD04-00E081286ACF", "FreeBSD nandfs"); + + // Midnight BSD partition types.... +- AddType(0xa580, "85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7", "Midnight BSD data"); ++ AddType(0xa580, "85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7", "Midnight BSD disklabel"); + AddType(0xa581, "85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7", "Midnight BSD boot"); + AddType(0xa582, "85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7", "Midnight BSD swap"); + AddType(0xa583, "0394Ef8B-237E-11E1-B4B3-E89A8F7FC3A7", "Midnight BSD UFS"); +@@ -288,7 +395,7 @@ void PartType::AddAllTypes(void) { + AddType(0xa906, "49F48DAA-B10E-11DC-B99B-0019D1879648", "NetBSD RAID"); + + // Mac OS partition types (See also 0xa800, above).... +- AddType(0xab00, "426F6F74-0000-11AA-AA11-00306543ECAC", "Recovery HD"); ++ AddType(0xab00, "426F6F74-0000-11AA-AA11-00306543ECAC", "Apple boot (Recovery HD)"); + AddType(0xaf00, "48465300-0000-11AA-AA11-00306543ECAC", "Apple HFS/HFS+"); + AddType(0xaf01, "52414944-0000-11AA-AA11-00306543ECAC", "Apple RAID"); + AddType(0xaf02, "52414944-5F4F-11AA-AA11-00306543ECAC", "Apple RAID offline"); +@@ -307,6 +414,13 @@ void PartType::AddAllTypes(void) { + // and https://source.denx.de/u-boot/u-boot/-/blob/v2021.07/include/part_efi.h#L59-61 + AddType(0xb000, "3DE21764-95BD-54BD-A5C3-4ABE786F38A8", "U-Boot boot loader"); + ++ // HiFive Unleased bootloader partitions ++ AddType(0xb001, "5B193300-FC78-40CD-8002-E86C45580B47", "HiFive Unleashed U-Boot SPL"); ++ AddType(0xb002, "2E54B353-1271-4842-806F-E436D6AF6985", "HiFive Unleashed U-Boot FIT image"); ++ ++ // Marvell ++ AddType(0xb003, "6828311A-BA55-42A4-BCDE-A89BB5EDECAE", "Marvell Armada 3700 Boot partition"); ++ + // QNX Power-Safe (QNX6) + AddType(0xb300, "CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1", "QNX6 Power-Safe"); + +@@ -418,6 +532,8 @@ void PartType::AddAllTypes(void) { + AddType(0xfb00, "AA31E02A-400F-11DB-9590-000C2911D1B8", "VMWare VMFS"); + AddType(0xfb01, "9198EFFC-31C0-11DB-8F78-000C2911D1B8", "VMWare reserved"); + AddType(0xfc00, "9D275380-40AD-11DB-BF97-000C2911D1B8", "VMWare kcore crash protection"); ++ AddType(0xfc01, "381CFCCC-7288-11E0-92EE-000C2911D0B2", "VMWare Virtual SAN"); ++ AddType(0xfc02, "77719A0C-A4A0-11E3-A47E-000C29745A24", "VMWare Virsto"); + + // A straggler Linux partition type.... + AddType(0xfd00, "A19D880F-05FC-4D3B-A006-743F0F84911E", "Linux RAID"); diff --git a/gr-lida/PKGBUILD b/gr-lida/PKGBUILD new file mode 100644 index 0000000..5324704 --- /dev/null +++ b/gr-lida/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=gr-lida +pkgver=0.12.0 +pkgrel=2 +pkgdesc="Frontend for DOSBox" +arch=('i686' 'x86_64') +url='http://www.gr-lida.org/' +license=('GPL-2') +depends=('qt-base' 'qt-script' 'qt-multimedia' 'poppler-qt' 'phonon-qt') +optdepends=('dosbox: enable support for dosbox') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Monthy/gr-lida/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('5a8ba4fc122afc5f3dfb5d02c664d683780abdf9076a0363af5b14e9629919b64afb74ee27c4e58c3b8751c74291a6425316d9a44f6b683563bad2dbad34c7a3') + +build() { + cd ${pkgname}-${pkgver} + qmake gr-lida.pro +} + +package(){ + cd ${pkgname}-${pkgver} + make INSTALL_ROOT=${pkgdir} install + + # correcting paths + mv "${pkgdir}/usr/local/bin" "${pkgdir}/usr/" + mv "${pkgdir}/usr/local/share" "${pkgdir}/usr/" + rm -rf "${pkgdir}/usr/local" + + # installing license + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/doc/COPYING.txt" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/grafx2/PKGBUILD b/grafx2/PKGBUILD new file mode 100644 index 0000000..ce06c99 --- /dev/null +++ b/grafx2/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=grafx2 +pkgver=2.7 +pkgrel=1 +_recoil=5.0.0 +pkgdesc='Pixelart-oriented painting program' +arch=('i686' 'x86_64') +url='http://grafx2.chez.com/' +license=('GPL-2') +depends=('fontconfig' 'hicolor-icon-theme' 'lua' 'sdl2_image' 'sdl2_ttf') +options=(!emptydirs) +source=("https://gitlab.com/GrafX2/grafX2/-/archive/v2.7/grafX2-v${pkgver}.tar.gz" + "https://sourceforge.net/projects/recoil/files/recoil/$_recoil/recoil-$_recoil.tar.gz" + "fix-appstream.patch") +sha512sums=('d2af107b5c3495c1c769446b3669d44c3b776ab6e906595b69a7142443f9f045daa594f7cb5ccbc6cd624e6a8047ede7824986d162ddc59c2432339b9b7efc67' + 'f6c7d782abcfb7ab09c09b64e2561d5ae752cd1657be6f440a5af118cba57842b064fa6eb9ffb3a3cdce4d2c6b9a76e0a1379e37851779ec2420a2acc430a01f' + '14530b489b2c1b06cb193ebe7127994ba19ece286fb2233b9e2c4e396c349d81b25f4fbce7b55863ab71af4178409a95e9bc8b8b0a1db3f2e78a67e8e7ec3023') + +prepare() { + mv grafX2-v${pkgver} $pkgname + sed 's/-liconv//g' -i "$pkgname/src/Makefile" + mkdir -p grafx2/3rdparty/archives + cp -uv recoil-$_recoil.tar.gz grafx2/3rdparty/archives/recoil-$_recoil.tar.gz + + cd $pkgname + + # Fix AppStream metadata + # https://gitlab.com/GrafX2/grafX2/-/merge_requests/288 + patch -Np1 -i ../fix-appstream.patch +} + +build() { + CFLAGS="$CFLAGS -w" make -C $pkgname/src PREFIX=/usr API=sdl2 +} + +package() { + install -d "$pkgdir/usr/share/grafx2/scripts/samples_2.4/picture/"{thomson/lib,others-8bit/lib} + CFLAGS="$CFLAGS -w" make -C $pkgname/src PREFIX=/usr DESTDIR="$pkgdir" API=sdl2 install + mv "$pkgdir/usr/bin/grafx2-sdl2" "$pkgdir/usr/bin/grafx2" + install -Dm644 "$pkgname/doc/README.txt" \ + "$pkgdir/usr/share/doc/$pkgname/README" + + # install license + install -Dm644 "$srcdir/$pkgname/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/grafx2/fix-appstream.patch b/grafx2/fix-appstream.patch new file mode 100644 index 0000000..e1d901e --- /dev/null +++ b/grafx2/fix-appstream.patch @@ -0,0 +1,37 @@ +From 34124bf064dd9ac2515f8a501474e9bb61d7a7d9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= +Date: Wed, 10 Jun 2020 11:39:41 +0000 +Subject: [PATCH] Fix AppStream metadata file + +Fix license entries to meet the specification, and update homepage URL. +--- + misc/unix/grafx2.appdata.xml | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/misc/unix/grafx2.appdata.xml b/misc/unix/grafx2.appdata.xml +index 2f683d87..7a847e80 100644 +--- a/misc/unix/grafx2.appdata.xml ++++ b/misc/unix/grafx2.appdata.xml +@@ -1,8 +1,8 @@ + + + grafx2.desktop +- CC-0 +- GPL-2.0 and CeCILL-2 ++ CC0-1.0 ++ GPL-2.0 and CECILL-2.0 + GrafX2 + A bitmap paint program specialized in 256 color drawing + +@@ -31,7 +31,7 @@ + + + +- http://grafx2.tk ++ http://grafx2.chez.com/ + https://pulkomandy.tk/projects/GrafX2 + + +-- +2.27.0 + diff --git a/graphene/PKGBUILD b/graphene/PKGBUILD new file mode 100644 index 0000000..eee8cd9 --- /dev/null +++ b/graphene/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=graphene +pkgver=1.10.2 +pkgrel=1 +pkgdesc="A thin layer of graphic data types" +url="https://ebassi.github.io/graphene/" +arch=(i686 x86_64) +license=(Expat) +depends=(glib2) +makedepends=(gobject-introspection meson) +source=(https://github.com/ebassi/graphene/releases/download/$pkgver/graphene-$pkgver.tar.xz) +sha512sums=('a8a8ef1e4ccffee2313a18b9b8dda06c7ede6d49fdde8578694500634e3c90278fd30af7d88938d5ecb08c519cc3e09d21fe69d0f21cb766e056ceedbb3eafb0') + +build() { + hyperbola-meson $pkgname-$pkgver build \ + -D gtk_doc=false \ + -D installed_tests=false + ninja -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 $pkgname-$pkgver/LICENSE.txt +} + +# vim:set sw=2 et: diff --git a/graphicsmagick-imagemagick-compat/LICENSE b/graphicsmagick-imagemagick-compat/LICENSE new file mode 100644 index 0000000..f834504 --- /dev/null +++ b/graphicsmagick-imagemagick-compat/LICENSE @@ -0,0 +1,342 @@ +This package was debianized by Sven Wilhelm on +Mon, 7 Jun 2004 02:23:06 +0200. +It was taken over in December of 2013 by Laszlo Boszormenyi (GCS) + . + +It was downloaded from https://sourceforge.net/projects/graphicsmagick/files/ + +Upstream Authors: + + Active GraphicsMagick Contributors + ================================== + Bob Friesenhahn + Glenn Randers-Pehrson + Daniel Kobras + Jaroslav Fojtik + Rolf Schroedter + David N. Welton + Mark Mitchell + Richard Nolde + Clément Follet + John Sergeant + + Former GraphicsMagick Contributors + ================================== + Mike Chiarappa + William Radcliffe + Leonard Rosenthol + Lars Ruben Skyum + + Other Contributors (via ImageMagick) + ==================================== + John Cristy + Kelly Bergougnoux + Christopher R. Hawks + Francis J. Franklin + Rick Mabry + Nathan Brown + Kyle Shorter + Markus Friedl + David Harr + Troy Edwards + Milan Votava + Mike Edmonds + +Copyright: + +* The following copyright and license notices apply to the upstream source + and are taken from file Copyright.txt. + +====================================== +GraphicsMagick Copyrights and Licenses +====================================== + +This file is part of the GraphicsMagick software distributed by the +GraphicsMagick Group. + + [*Please note that the legal community considers 15 or more + total lines of code or text (not necessarily contiguous) to + be significant for the purposes of copyright. Repeated + changes such as renaming a symbol has similar significance + to changing one line of code.*] + +The licenses which components of this software fall under are as follows. + +1) + In November 2002, the GraphicsMagick Group created GraphicsMagick + from ImageMagick Studio's ImageMagick and applied the "MIT" style + license: + + Copyright (C) 2002 - 2010 GraphicsMagick Group + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +2) + In October 1999, ImageMagick Studio assumed the responsibility for + the development of ImageMagick (forking from the distribution by + E. I. du Pont de Nemours and Company) and applied a new license: + + Copyright (C) 2002 ImageMagick Studio, a non-profit organization dedicated + to making software imaging solutions freely available. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files ("ImageMagick"), + to deal in ImageMagick without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of ImageMagick, and to permit persons to whom the + ImageMagick is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of ImageMagick. + + The software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + ImageMagick Studio be liable for any claim, damages or other liability, + whether in an action of contract, tort or otherwise, arising from, out of + or in connection with ImageMagick or the use or other dealings in + ImageMagick. + + Except as contained in this notice, the name of the ImageMagick Studio + shall not be used in advertising or otherwise to promote the sale, use or + other dealings in ImageMagick without prior written authorization from the + ImageMagick Studio. + +3) + From 1991 to October 1999 (through ImageMagick 4.2.9), ImageMagick + was developed and distributed by E. I. du Pont de Nemours and + Company: + + Copyright 1999 E. I. du Pont de Nemours and Company + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files + ("ImageMagick"), to deal in ImageMagick without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of ImageMagick, and to + permit persons to whom the ImageMagick is furnished to do so, subject + to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of ImageMagick. + + The software is provided "as is", without warranty of any kind, express + or implied, including but not limited to the warranties of + merchantability, fitness for a particular purpose and noninfringement. + In no event shall E. I. du Pont de Nemours and Company be liable for + any claim, damages or other liability, whether in an action of + contract, tort or otherwise, arising from, out of or in connection with + ImageMagick or the use or other dealings in ImageMagick. + + Except as contained in this notice, the name of the E. I. du Pont de + Nemours and Company shall not be used in advertising or otherwise to + promote the sale, use or other dealings in ImageMagick without prior + written authorization from the E. I. du Pont de Nemours and Company. + +4) + The GraphicsMagick Base64Decode() and Base64Encode() functions are + based on source code obtained from OpenSSH. This source code is + distributed under the following license: + + Copyright (c) 2000 Markus Friedl. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR \`\`AS IS\'\' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +5) + Many of the pattern images in coders/logo.c are derived from XFig, + which is distributed under the following license: + + | FIG : Facility for Interactive Generation of figures + | Copyright (c) 1985-1988 by Supoj Sutanthavibul + | Parts Copyright (c) 1989-2000 by Brian V. Smith + | Parts Copyright (c) 1991 by Paul King + + Any party obtaining a copy of these files is granted, free of charge, a + full and unrestricted irrevocable, world-wide, paid up, royalty-free, + nonexclusive right and license to deal in this software and + documentation files (the "Software"), including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons who receive + copies from any such party to do so, with the only requirement being + that this copyright notice remain intact. + +6) + The documentation for the composition operators is copied from the + rlecomp manual page, which is authored by Rod Bogart and John W. + Peterson. Rlecomp is part of the Utah Raster Toolkit distributed by the + University of Michigan and the University of Utah. The copyright for + this manual page is as follows: + + Copyright (c) 1986, University of Utah + + This software is copyrighted as noted below. It may be freely copied, + modified, and redistributed, provided that the copyright notice is + preserved on all copies. + + There is no warranty or other guarantee of fitness for this software, + it is provided solely "as is". Bug reports or fixes may be sent + to the author, who may or may not act on them as he desires. + + You may not include this software in a program or other software product + without supplying the source, or without informing the end-user that the + source is available for no extra charge. + + If you modify this software, you should include a notice giving the + name of the person performing the modification, the date of modification, + and the reason for such modification. + +7) + The source code comprising swab.c is originally derived from + libtiff which has the following license: + + | Copyright (c) 1988-1997 Sam Leffler + | Copyright (c) 1991-1997 Silicon Graphics, Inc. + + Permission to use, copy, modify, distribute, and sell this software and + its documentation for any purpose is hereby granted without fee, provided + that (i) the above copyright notices and this permission notice appear in + all copies of the software and related documentation, and (ii) the names of + Sam Leffler and Silicon Graphics may not be used in any advertising or + publicity relating to the software without the specific, prior written + permission of Sam Leffler and Silicon Graphics. + + THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + + IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + OF THIS SOFTWARE. + +8) + The C++ API known as "Magick++", and which resides in the Magick++ + directory, is distributed under the following license: + + Copyright 1999 - 2003 Bob Friesenhahn + + Permission is hereby granted, free of charge, to any person + obtaining a copy of the source files and associated documentation + files ("Magick++"), to deal in Magick++ without restriction, + including without limitation of the rights to use, copy, modify, + merge, publish, distribute, sublicense, and/or sell copies of + Magick++, and to permit persons to whom the Magick++ is furnished + to do so, subject to the following conditions: + + This copyright notice shall be included in all copies or + substantial portions of Magick++. The copyright to Magick++ is + retained by its author and shall not be subsumed or replaced by any + other copyright. + + The software is provided "as is", without warranty of any kind, + express or implied, including but not limited to the warranties of + merchantability, fitness for a particular purpose and + noninfringement. In no event shall Bob Friesenhahn be liable for + any claim, damages or other liability, whether in an action of + contract, tort or otherwise, arising from, out of or in connection + with Magick++ or the use or other dealings in Magick++. + +9) + The GraphicsMagick HaldClutImagePixels() function in magick/hclut.c + is based on source code from the HaldCLUT package by Eskil Steenberg + (https://www.quelsolaar.com/technology/clut.html) which is + distributed under the following license: + + Copyright (c) 2005 Eskil Steenberg. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR \`\`AS IS\'\' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +10) + GraphicsMagick makes use of third-party "delegate" libraries to + support certain optional features. These libraries bear their own + copyrights and licenses, which may be more or less restrictive than the + GraphicsMagick license. For convenience, when GraphicsMagick is + bundled with (or compiled with) "delegate" libraries, a copy of the + licenses for these libraries is provided in a "licenses" directory. + + +* The following copyright and license notice applies to file debian/Magick.pm + that is an addition specific to the Debian package. + + Copyright (c) 2006 Daniel Kobras + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. diff --git a/graphicsmagick-imagemagick-compat/PKGBUILD b/graphicsmagick-imagemagick-compat/PKGBUILD new file mode 100644 index 0000000..1c5324f --- /dev/null +++ b/graphicsmagick-imagemagick-compat/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgname=graphicsmagick-imagemagick-compat +pkgver=1.3.25 +pkgrel=1 +pkgdesc='Image processing tools providing ImageMagick interface' +arch=('any') +url='https://packages.debian.org/sid/graphicsmagick-imagemagick-compat' +license=('Expat') +depends=('graphicsmagick') +source=(LICENSE + animate.1.gz + compare.1.gz + composite.1.gz + conjure.1.gz + convert.1.gz + display.1.gz + identify.1.gz + import.1.gz + mogrify.1.gz + montage.1.gz) +noextract=(${source[@]%%::*}) +sha512sums=('aab76a115782ab27ffd35537c2b0a3ea2bc95ba2762a8e4eae2c34887670f62e7ba9ceacf583581231a2430c632e0eff7bd19532ba52e77167a6ef2123132316' + 'a04f466b8ef2d19e6313499903cf08a540fe208d31ad378a4451212927b242455d77d0d2675ba77b5fc3c9e35f69beb92fd4663a828ebe8c1e2c0315d2dcc78c' + '419eaa9742ac48f61e1b80b64af9902314e2d88994d0d3ab61e1b092320234e4d45e307dceef264b4e3fbf92c83dd1a8acc09a999f9be5150d1affb0674b1417' + '7940f41a45ae8a729e4bef2ec310be25c4a071c4b19b2c581a122be3a3c16344b54fac3067df122522a8a0afb56184590b9e4b4011a25d90519242f3876140ed' + 'ab7efc194ae8120ced58d5cd2728458f5a9609b0582ae6a2ceb358d60b3ffc9d1f76f426ad77a82834c560ceb272d79403011d0ac2de6c7a8c9b615fadbff306' + '3bc545aa61f98f58e93f01f1b897adfc49b45a397e506cb53468fb6b32ada04911eed06dabed8875a53175756599a84877a7f6bcaebe66903fda5bd284432b22' + '6aaba37daf29aeff60bc50b901ae220915f87027d3380a677518bab9fc7c0ed9e0dfa0e0ad7a49c7b59f85721c19f0b6f14115834bf8f02c92409347d0273544' + '676e613a605b7774e3a02740a54d9b781c3953fd19ef352d2fc44292199ad23f41083253db261a8408490591e6614c4488ed83ff1ae0a4f36396e0500ac70b7d' + '1991903661c65fe606d5f794d92139d10d473697cd3f485cfc2d4dd24dc1820c9183070207578df18096bcf9850151f16d3119d3f8f0273625f5b7325e4d6fca' + '59fedf249c919107c451b60786eaca0e1b4514c01659defd1de55118ee692d78068993115b0d663d885fa1023d68ada064da64f48845ff1c8ff5af4203775cbd' + '8055f05e246eedf25ce1b9512a7c8058cdc4390bf70486ecd1f8220b57dd7984a75af81e9519a8f96c68437ad4fb363f5bd597c8b2c5d35ff062a54908421032') + +package() { + cd "${srcdir}" + + GM="$(which gm)" + BIN="${pkgdir}/usr/bin" + install -dm 755 "${BIN}" + # create symlinks to gm + for i in *.1.gz + do + ln -s ${GM} "${BIN}/${i%.1.gz}" + done + + MAN="${pkgdir}/usr/share/man/man1" + install -dm 755 "${MAN}" + # install separate man-pages + for i in *.1.gz + do + install -m 644 ${i} "${MAN}" + done + + # symlink expected IMagick libraries to GMagick equivalents. + mkdir "$pkgdir/usr/lib" + ln -sr GraphicsMagick-1.3.25 "$pkgdir/usr/lib/ImageMagick-6.9.7" + ln -s libGraphicsMagick++.so "$pkgdir/usr/lib/libMagick++-6.Q16HDRI.so" + ln -s libGraphicsMagick++.so "$pkgdir/usr/lib/libMagick++-6.Q16HDRI.so.7" + ln -s libGraphicsMagick++.so "$pkgdir/usr/lib/libMagick++-6.Q16HDRI.so.7.0.0" + ln -s libGraphicsMagick.so "$pkgdir/usr/lib/libMagickCore-6.Q16HDRI.so" + ln -s libGraphicsMagick.so "$pkgdir/usr/lib/libMagickCore-6.Q16HDRI.so.3" + ln -s libGraphicsMagick.so "$pkgdir/usr/lib/libMagickCore-6.Q16HDRI.so.3.0.0" + ln -s libGraphicsMagickWand.so "$pkgdir/usr/lib/libMagickWand-6.Q16HDRI.so" + ln -s libGraphicsMagickWand.so "$pkgdir/usr/lib/libMagickWand-6.Q16HDRI.so.3" + ln -s libGraphicsMagickWand.so "$pkgdir/usr/lib/libMagickWand-6.Q16HDRI.so.3.0.0" + + # install license + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/graphicsmagick/PKGBUILD b/graphicsmagick/PKGBUILD new file mode 100644 index 0000000..a417904 --- /dev/null +++ b/graphicsmagick/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Jesus E. + +pkgname=graphicsmagick +pkgver=1.3.36 +__debver=1.4+really +_debver=1.3.36+hg16481 +_debrel=2 +pkgrel=3 +pkgdesc="Image processing system" +url='http://www.graphicsmagick.org/' +arch=('i686' 'x86_64') +license=('Expat' 'Simplified-BSD') +replaces=('imagemagick') +conflicts=('imagemagick') +provides=('imagemagick') +depends=('freetype2' 'libxext' 'libsm' 'lcms2' 'libltdl' 'bzip2' 'xz' 'libpng' 'libtiff') +makedepends=('perl' 'jasper' 'libxml2' 'quilt') +optdepends=('jasper: jp2 module' + 'libxml2: msl, svg, url modules' + 'ghostscript: pdf, ps modules') +options=('!emptydirs' 'libtool') +source=("https://downloads.sourceforge.net/project/${pkgname}/${pkgname}/${pkgver}/GraphicsMagick-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/graphicsmagick/graphicsmagick_${__debver}${_debver}-${_debrel}+deb11u1.debian.tar.xz") +sha512sums=('27ed5fcbfb0303436bdcb0f11d18257a967d471251b51e633e2c655b0a7e5ed01f61a61f9702cc7d4c02714e005ac18ca9ba0f690c0580e41d07947a03c5cbb4' + '55b008386029129856df9c79fbbf1272785a74562c4104d36604f84a6bcf799d7f68f14280861a6560fcf1cf107bc6f00a69db998fb2f6fb674106d7fb75cf63') + +prepare() { + cd "${srcdir}/GraphicsMagick-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/use_appropriate_memory_deallocator.patch || true + + quilt push -av + fi + sed -e "s:freetype_config='':freetype_config='/usr/bin/pkg-config freetype2':g" -i configure +} + +build() { + cd "${srcdir}/GraphicsMagick-${pkgver}" + ./configure \ + --prefix=/usr \ + --enable-shared \ + --with-modules \ + --with-perl \ + --with-gs-font-dir=/usr/share/fonts/Type1 \ + --with-quantum-depth=16 \ + --with-threads + make +} + +package() { + cd "${srcdir}/GraphicsMagick-${pkgver}" + + make DESTDIR="${pkgdir}" install + + # license + install -Dm644 "Copyright.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" + + # perl bindings + # patching was introduced in order to build perl module without installing package itself and + # not to introduce unnecessary path into LD_RUN_PATH + cd PerlMagick + sed -i -e "s:'LDDLFLAGS' => \"\(.*\)\":'LDDLFLAGS' => \"-L${pkgdir}/usr/lib \1\":" Makefile.PL + perl Makefile.PL INSTALLDIRS=vendor PREFIX=/usr DESTDIR="${pkgdir}" + sed -i -e "s/LDLOADLIBS =/LDLOADLIBS = -lGraphicsMagick/" Makefile + make + make install +} diff --git a/graphite/PKGBUILD b/graphite/PKGBUILD new file mode 100644 index 0000000..622bd67 --- /dev/null +++ b/graphite/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=graphite +pkgver=1.3.14 +_debver=$pkgver +_debrel=1 +pkgrel=2 +epoch=1 +pkgdesc="Reimplementation of the SIL Graphite text processing engine" +arch=('i686' 'x86_64') +url='https://github.com/silnrsi/graphite' +license=('LGPL-2.1') +depends=('gcc-libs') +makedepends=('cmake' 'freetype2' 'python' 'asciidoc' 'quilt') +options=('!emptydirs') +source=("https://github.com/silnrsi/graphite/releases/download/${pkgver}/graphite2-${pkgver}.tgz" + "https://deb.debian.org/debian/pool/main/g/graphite2/graphite2_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('14b5eb2ba8158b8b62ffa7fb142100a0af1de0f0c45b2673801b636714a106b46fcd423b05c722d963c9543fafcf10fec811975308211a54f20a3ba322d7b295' + '4f9fab5bf556fbfe6ad80560d0e8d48bd0c38d5996beb938f8ed7cdad44b230881eb3a32dd9e7352fca2b185005ecdc2d3915727ef4f40047818f2bac1b58342') + +prepare() { + cd graphite2-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/python-libgraphite-SONAME.diff || true + rm -v debian/patches/reproducible-build.diff || true + + quilt push -av + fi +} + +build() { + cmake \ + -G "Unix Makefiles" \ + -S graphite2-${pkgver} \ + -B build \ + -DCMAKE_C_FLAGS:STRING="${CFLAGS}" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE:STRING=Release \ + -DGRAPHITE2_COMPARE_RENDERER=OFF \ + + # fix unwanted -O3 cflag (taken from Debian) + find ./build -type f ! -name "rules" ! -name "changelog" -exec sed -i -e 's/\-O3//g' {} \; + + make -C build + make -C build -j1 docs +} + +package() { + cd "${srcdir}"/build + make DESTDIR="$pkgdir/" install + + # install doc files + mkdir -p "${pkgdir}"/usr/share/doc/graphite2/api + cp -vrf doc/{GTF,manual}.html "${pkgdir}"/usr/share/doc/graphite2 + + # license + for i in COPYING LICENSE; do + install -Dm644 "${srcdir}"/graphite2-${pkgver}/${i} "${pkgdir}"/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/graphviz/PKGBUILD b/graphviz/PKGBUILD new file mode 100644 index 0000000..bead93c --- /dev/null +++ b/graphviz/PKGBUILD @@ -0,0 +1,80 @@ +# Maintainer: Jesus E. + +pkgname=graphviz +pkgver=2.42.2 +_debver=$pkgver +_debrel=5 +pkgrel=3 +pkgdesc="Graph visualization software" +url='https://www.graphviz.org/' +license=('EPL-1.0') +arch=('i686' 'x86_64') +depends=('libtool' 'gd' 'librsvg-legacy' 'libxaw' 'ghostscript' 'pango' 'gts' 'gsfonts' 'libnsl') +makedepends=('swig' 'guile' 'lua' 'ocaml' 'perl' 'python' 'tauthon' 'tk' 'quilt') +optdepends=('guile: guile bindings' + 'lua: lua bindings' + 'ocaml: ocaml bindings' + 'perl: perl bindings' + 'python: python bindings' + 'tauthon: tauthon bindings' + 'tcl: tcl bindings' + 'xterm: vimdot') +install=$pkgname.install +source=("https://gitlab.com/graphviz/graphviz/-/archive/$pkgver/graphviz-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/g/graphviz/graphviz_${_debver}-${_debrel}+deb11u1.debian.tar.xz" + "ghostscript918.patch") +sha512sums=('06233afbf8fc8ec3d53557e2910743f8ab339c73e9546e967106be9f49653d432eb9dd0b9db5b578421f7cfbb7ff03a0855022e57b30a26f94eab8894e101346' + 'ee00f15ed8c9e7a3704bf4f48f0ef4cec65aab4d5b049dbad571058d01c8190a06307e32be873dc9887e5104faf9fcc35ebc37062625deceb4780aa9e72d5ca6' + '314b444da2fed31535d164e47abcaf866f57b8fea3514a6642a8f4539611a93d7f74462049d769004bfd734abee33e5b86ffe3ac49e0b7f50ea177624d68d510') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches/* debian/patches + + # Doesn't apply + rm -v debian/patches/0_bindings_documentation || true + rm -v debian/patches/50_remove_changelog_in || true + rm -v debian/patches/build_with_libann.patch || true + rm -v debian/patches/fix-kfreebsd-chroots || true + rm -v debian/patches/kfreebsd-hang.patch || true + rm -v debian/patches/ruby-config.diff || true + rm -v debian/patches/versioned-plugin-config-file.diff || true + + quilt push -av + fi + patch -p1 -i $srcdir/ghostscript918.patch + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + export PYTHON=tauthon + export LIBPOSTFIX=/ + export CXXFLAGS+=' -fPIC -fpermissive' + + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + # fix symlink to symlink that doesn't get picked up by makepkg's zipman + ln -s gv2gxl.1.gz "${pkgdir}"/usr/share/man/man1/dot2gxl.1.gz + rm "${pkgdir}"/usr/share/man/man1/dot2gxl.1 + + # Deduplicates TCL libraries + cd "${pkgdir}/usr/lib/tcl8.6" + rm -fr graphviz + ln -s ../graphviz/tcl graphviz +} diff --git a/graphviz/ghostscript918.patch b/graphviz/ghostscript918.patch new file mode 100644 index 0000000..189c513 --- /dev/null +++ b/graphviz/ghostscript918.patch @@ -0,0 +1,18 @@ +diff -uprb graphviz-2.38.0.orig/plugin/gs/gvloadimage_gs.c graphviz-2.38.0/plugin/gs/gvloadimage_gs.c +--- graphviz-2.38.0.orig/plugin/gs/gvloadimage_gs.c 2014-04-13 23:40:25.000000000 +0300 ++++ graphviz-2.38.0/plugin/gs/gvloadimage_gs.c 2015-11-11 00:08:32.916123704 +0200 +@@ -72,11 +72,11 @@ static void gs_error(GVJ_t * job, const + + assert (err < 0); + +- if (err >= e_VMerror) ++ if (err >= gs_error_VMerror) + errsrc = "PostScript Level 1"; +- else if (err >= e_unregistered) ++ else if (err >= gs_error_unregistered) + errsrc = "PostScript Level 2"; +- else if (err >= e_invalidid) ++ else if (err >= gs_error_invalidid) + errsrc = "DPS error"; + else + errsrc = "Ghostscript internal error"; diff --git a/graphviz/graphviz.install b/graphviz/graphviz.install new file mode 100644 index 0000000..16ff29d --- /dev/null +++ b/graphviz/graphviz.install @@ -0,0 +1,12 @@ +post_install() { + rm -f usr/lib/graphviz/config{,6} + dot -c +} + +post_upgrade() { + post_install +} + +pre_remove() { + rm -f usr/lib/graphviz/config{,6} +} diff --git a/grfcodec/PKGBUILD b/grfcodec/PKGBUILD new file mode 100644 index 0000000..4948684 --- /dev/null +++ b/grfcodec/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=grfcodec +pkgver=6.0.6 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="A tool to convert a GRF file into graphics files and meta data, and vice versa" +arch=('i686' 'x86_64') +url='https://github.com/OpenTTD/grfcodec' +license=('GPL-2') +depends=('libpng') +makedepends=('boost' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/OpenTTD/grfcodec/archive/refs/tags/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/grfcodec/grfcodec_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('330634508b37a34a27b87efb92d017a7eb40f61bfd5ea35193abc545ec7ced244726e9f0ed0e653997ce866365026c967bccb071d17c36a21f3b28aecfa140b4' + '03fc6d84a22ca80fb9a3ee19308be965e758df26014c4151482e6126f2c2dd83d98419526b496bfdb503504a33f415865efc9d8d7b927f077ee349aefbb43b4b') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i 's@/usr/local@/usr@' Makefile.bundle +} + +_make () { + make CXXFLAGS="${CXXFLAGS} -Wno-narrowing -std=c++11" LDFLAGS="${LDFLAGS}" "$@" +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + _make -j$(nproc) +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + _make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/grip/PKGBUILD b/grip/PKGBUILD new file mode 100644 index 0000000..d9faffb --- /dev/null +++ b/grip/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=grip +pkgver=4.2.4 +pkgrel=1 +pkgdesc="A free and libre CD-player and CD-ripper" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://sourceforge.net/projects/grip/' +depends=('curl' 'id3lib' 'cdparanoia' 'gtk2') +makedepends=('pkgconfig') +optdepends=('yelp: to display the help and notices' + 'lame: for mp3 support' + 'vorbis-tools: for ogg support' + 'flac: for flac support') +source=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "remove-cddb.patch") +sha512sums=('fdc2808b91df617f4d2447114037c31bd5fa0657aa4ea2453e644b155468971c65a364bb0a3c6ed8ff2ba0e44e7117a51bec3081c7defd590f9fbc802a216bf5' + 'fcd30a74d145bb065c193d84bbd8613be1e6d6c8b255105d7458ded0fd4fd260090850b9db9d7abfb05c8e477ff30d6c75074844b5612aedb69339adcb31189d') + +prepare() { + cd ${pkgname}-${pkgver} + patch -Np1 -i ${srcdir}/remove-cddb.patch +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + # remove unneeded data + rm -rf "$pkgdir/usr/share/solid" + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/grip/remove-cddb.patch b/grip/remove-cddb.patch new file mode 100644 index 0000000..4f4a278 --- /dev/null +++ b/grip/remove-cddb.patch @@ -0,0 +1,168 @@ +--- a/src/grip.c 2022-02-10 12:19:23.000000000 +0100 ++++ b/src/grip.c 2025-06-01 01:56:02.514625107 +0200 +@@ -651,7 +651,7 @@ + ginfo->ask_submit=FALSE; + ginfo->is_new_disc=FALSE; + ginfo->first_time=TRUE; +- ginfo->automatic_discdb=TRUE; ++ ginfo->automatic_discdb=FALSE; + ginfo->auto_eject_countdown=0; + ginfo->current_discid=0; + ginfo->volume=255; +@@ -671,20 +671,20 @@ + ginfo->use_proxy=FALSE; + ginfo->use_proxy_env=FALSE; + +- strcpy(ginfo->dbserver.name,"gnudb.gnudb.org"); +- strcpy(ginfo->dbserver.cgi_prog,"~cddb/cddb.cgi"); ++ strcpy(ginfo->dbserver.name,""); ++ strcpy(ginfo->dbserver.cgi_prog,""); + ginfo->dbserver.port=80; + ginfo->dbserver.use_proxy=0; + ginfo->dbserver.proxy=&(ginfo->proxy_server); + + strcpy(ginfo->dbserver2.name,""); +- strcpy(ginfo->dbserver2.cgi_prog,"~cddb/cddb.cgi"); ++ strcpy(ginfo->dbserver2.cgi_prog,""); + ginfo->dbserver2.port=80; + ginfo->dbserver2.use_proxy=0; + ginfo->dbserver2.proxy=&(ginfo->proxy_server); + +- strcpy(ginfo->discdb_submit_email,"submit@gnudb.org"); +- ginfo->db_use_freedb=TRUE; ++ strcpy(ginfo->discdb_submit_email,""); ++ ginfo->db_use_freedb=FALSE; + *ginfo->user_email='\0'; + + strcpy(ginfo->discdb_encoding,"UTF-8"); +--- a/src/gripcfg.c 2022-02-10 12:19:23.000000000 +0100 ++++ b/src/gripcfg.c 2025-05-30 23:10:36.255579834 +0200 +@@ -547,128 +547,6 @@ + + page=gtk_frame_new(NULL); + +- dbvbox=gtk_vbox_new(FALSE,4); +- gtk_container_border_width(GTK_CONTAINER(dbvbox),3); +- +- notebook=gtk_notebook_new(); +- +- page2=gtk_frame_new(NULL); +- +- vbox=gtk_vbox_new(FALSE,2); +- gtk_container_border_width(GTK_CONTAINER(vbox),3); +- +- entry=MakeStrEntry(NULL,ginfo->dbserver.name,_("DB server"),255,TRUE); +- gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- entry=MakeStrEntry(NULL,ginfo->dbserver.cgi_prog,_("CGI path"),255,TRUE); +- gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- gtk_container_add(GTK_CONTAINER(page2),vbox); +- gtk_widget_show(vbox); +- +- label=gtk_label_new(_("Primary Server")); +- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),page2,label); +- gtk_widget_show(page2); +- +- page2=gtk_frame_new(NULL); +- +- vbox=gtk_vbox_new(FALSE,2); +- gtk_container_border_width(GTK_CONTAINER(vbox),3); +- +- entry=MakeStrEntry(NULL,ginfo->dbserver2.name,_("DB server"),255,TRUE); +- gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- entry=MakeStrEntry(NULL,ginfo->dbserver2.cgi_prog,_("CGI path"),255,TRUE); +- gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- gtk_container_add(GTK_CONTAINER(page2),vbox); +- gtk_widget_show(vbox); +- +- label=gtk_label_new(_("Secondary Server")); +- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),page2,label); +- gtk_widget_show(page2); +- +- +- gtk_box_pack_start(GTK_BOX(dbvbox),notebook,FALSE,FALSE,0); +- gtk_widget_show(notebook); +- +- +- entry=MakeStrEntry(NULL,ginfo->discdb_submit_email, +- _("DB Submit email"),255,TRUE); +- gtk_box_pack_start(GTK_BOX(dbvbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- entry=MakeStrEntry(NULL,ginfo->discdb_encoding, +- _("DB Character set encoding"),16,TRUE); +- gtk_box_pack_start(GTK_BOX(dbvbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- check=MakeCheckButton(NULL,&ginfo->db_use_freedb, +- _("Use freedb extensions")); +- gtk_box_pack_start(GTK_BOX(dbvbox),check,FALSE,FALSE,0); +- gtk_widget_show(check); +- +- check=MakeCheckButton(NULL,&ginfo->automatic_discdb, +- _("Perform disc lookups automatically")); +- gtk_box_pack_start(GTK_BOX(dbvbox),check,FALSE,FALSE,0); +- gtk_widget_show(check); +- +- gtk_container_add(GTK_CONTAINER(page),dbvbox); +- gtk_widget_show(dbvbox); +- +- +- label=gtk_label_new(_("DiscDB")); +- gtk_notebook_append_page(GTK_NOTEBOOK(config_notebook),page,label); +- gtk_widget_show(page); +- +- page=gtk_frame_new(NULL); +- +- vbox=gtk_vbox_new(FALSE,2); +- gtk_container_border_width(GTK_CONTAINER(vbox),3); +- +- check=MakeCheckButton(&button,&ginfo->use_proxy,_("Use proxy server")); +- gtk_signal_connect(GTK_OBJECT(button),"clicked", +- GTK_SIGNAL_FUNC(UseProxyChanged),(gpointer)ginfo); +- gtk_box_pack_start(GTK_BOX(vbox),check,FALSE,FALSE,0); +- gtk_widget_show(check); +- +- check=MakeCheckButton(NULL,&ginfo->use_proxy_env, +- _("Get server from 'http_proxy' env. var")); +- gtk_box_pack_start(GTK_BOX(vbox),check,FALSE,FALSE,0); +- gtk_widget_show(check); +- +- entry=MakeStrEntry(NULL,ginfo->proxy_server.name,_("Proxy server"),255,TRUE); +- gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- entry=MakeNumEntry(NULL,&(ginfo->proxy_server.port),_("Proxy port"),5); +- gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- entry=MakeStrEntry(NULL,ginfo->proxy_server.username,_("Proxy username"), +- 80,TRUE); +- gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- entry=MakeStrEntry(&realentry,ginfo->proxy_server.pswd, +- _("Proxy password"),80,TRUE); +- gtk_entry_set_visibility(GTK_ENTRY(realentry),FALSE); +- gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,0); +- gtk_widget_show(entry); +- +- gtk_container_add(GTK_CONTAINER(page),vbox); +- gtk_widget_show(vbox); +- +- label=gtk_label_new(_("Proxy")); +- gtk_notebook_append_page(GTK_NOTEBOOK(config_notebook),page,label); +- gtk_widget_show(page); +- +- page=gtk_frame_new(NULL); +- + vbox=gtk_vbox_new(FALSE,2); + gtk_container_border_width(GTK_CONTAINER(vbox),3); + diff --git a/grml-zsh-config/PKGBUILD b/grml-zsh-config/PKGBUILD new file mode 100644 index 0000000..5f89fde --- /dev/null +++ b/grml-zsh-config/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=grml-zsh-config +pkgver=0.19.7 +pkgrel=1 +pkgdesc="grml's zsh setup" +arch=('any') +url='https://grml.org/zsh/' +license=('GPL-2') +provides=('grmlzshrc') +depends=('zsh' 'coreutils' 'grep' 'sed' 'procps-ng') +makedepends=('python-setuptools' 'txt2tags') +source=("https://deb.grml.org/pool/main/g/grml-etc-core/grml-etc-core_${pkgver}.tar.gz") +sha512sums=('44db9f07409beef745cf2e948ae2e7fc9fa8b45d0f9417f7f73a5e1549b94a129fed47b375d6001b29bdd776b5063684cfb3ed8f666a2f103e28da8339c4c244') + +build() { + cd "${srcdir}/grml-etc-core-${pkgver}/doc" + make +} + +package() { + cd "${srcdir}/grml-etc-core-${pkgver}" + install -D -m644 etc/skel/.zshrc "${pkgdir}/etc/skel/.zshrc" + install -D -m644 etc/zsh/keephack "${pkgdir}/etc/zsh/keephack" + install -D -m644 etc/zsh/zshrc "${pkgdir}/etc/zsh/zshrc" + + install -D -m644 doc/grmlzshrc.5 "${pkgdir}/usr/share/man/man5/grmlzshrc.5" + ln -sf grmlzshrc.5.gz "${pkgdir}/usr/share/man/man5/grml-zsh-config.5.gz" + + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/grsync/PKGBUILD b/grsync/PKGBUILD new file mode 100644 index 0000000..6efb967 --- /dev/null +++ b/grsync/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=grsync +pkgver=1.3.1 +pkgrel=1 +pkgdesc="GTK+ GUI for rsync to synchronize folders, files and make backups" +arch=('i686' 'x86_64') +url='https://www.opbyte.it/grsync/' +license=('GPL-2') +depends=('gtk' 'rsync') +makedepends=('intltool' 'gettext-tiny') +source=(https://www.opbyte.it/release/$pkgname-$pkgver.tar.gz + grsync.appdata.xml + use-themed-icon.patch) +sha512sums=('af3e70108085ad240b8f692f4fd389e7df42448291b721e923fb7e7309e52a673a034583e68684820b47e520386c382efe56820da7b0e7146407bd3d09f2dc72' + '501b9fd5d5a5033adf222116ff739f0b2743b53d988580a5a75581f7620ed5763be1cff1dc7bb885d51653454b84985b6f182c2e41ff3863812a5626068bff35' + '00f349b07756ec85f7dac5ad6a8463ca68485b2d9a697942e944421f4e1c8e0765c3a7ae64d793a049de099b0046ad4525f9db45dfd2a97d892b2739da76a8c5') + +prepare() { + cd $pkgname-$pkgver + + # use themed icon + patch -Np1 -i $srcdir/use-themed-icon.patch + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-unity + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 ../$pkgname.appdata.xml "$pkgdir/usr/share/metainfo/$pkgname.appdata.xml" + install -Dm0644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/grsync/grsync.appdata.xml b/grsync/grsync.appdata.xml new file mode 100644 index 0000000..74f39ee --- /dev/null +++ b/grsync/grsync.appdata.xml @@ -0,0 +1,19 @@ + + + it.opbyte.grsync + grsync.desktop + Grsync + Synchronize files and folders (a GTK GUI for rsync) + CC0-1.0 + GPL-2.0 + +

Grsync is a rsync GUI (Graphical User Interface). Rsync is the well-known and powerful command line directory and file synchronization tool. It can be effectively used to synchronize local directories and it supports remote targets as well (even though it doesn't support browsing the remote folder). Sample uses of grsync include: synchronize a music collection with removable devices, backup personal files to a networked drive, replication of a partition to another one, mirroring of files, etc.

+
+ + + http://www.opbyte.it/grsync/grsync-1.0.0.png + + + https://sourceforge.net/p/grsync/bugs/ + http://www.opbyte.it/grsync/ +
diff --git a/grsync/use-themed-icon.patch b/grsync/use-themed-icon.patch new file mode 100644 index 0000000..7fef068 --- /dev/null +++ b/grsync/use-themed-icon.patch @@ -0,0 +1,76 @@ +diff -Naur grsync-1.2.6.orig/Makefile.am grsync-1.2.6/Makefile.am +--- grsync-1.2.6.orig/Makefile.am 2013-04-30 13:48:54.000000000 +0200 ++++ grsync-1.2.6/Makefile.am 2018-12-30 11:37:36.995541833 +0100 +@@ -61,10 +61,10 @@ + mimepackagesdir = $(mimedir)/packages + dist_mimepackages_DATA = grsync.xml + +-pixmapdir = $(datadir)/pixmaps ++pixmapdir = $(datadir)/icons/hicolor/128x128/apps + pixmap_DATA = pixmaps/grsync.png + +-pixmapbusydir = $(datadir)/pixmaps ++pixmapbusydir = $(datadir)/icons/hicolor/128x128/apps + pixmapbusy_DATA = pixmaps/grsync-busy.png + + mimeicondir = $(datadir)/icons/hicolor/48x48/mimetypes/ +diff -Naur grsync-1.2.6.orig/src/callbacks.c grsync-1.2.6/src/callbacks.c +--- grsync-1.2.6.orig/src/callbacks.c 2015-12-23 16:38:40.000000000 +0100 ++++ grsync-1.2.6/src/callbacks.c 2018-12-30 11:41:43.179172285 +0100 +@@ -57,7 +57,7 @@ + void set_trayicon(gboolean flag) { + if (flag) { + if (trayIcon == NULL) { +- trayIcon = gtk_status_icon_new_from_file(icon); ++ trayIcon = gtk_status_icon_new_from_icon_name(ICON); + g_signal_connect(GTK_STATUS_ICON(trayIcon), "activate", G_CALLBACK(on_trayicon_activate), main_window); + } + } else { +@@ -71,7 +71,7 @@ + + + void set_trayicon_icon(gboolean busy) { +- if (trayIcon != NULL) gtk_status_icon_set_from_file(trayIcon, busy ? icon_busy : icon); ++ if (trayIcon != NULL) gtk_status_icon_set_from_icon_name(trayIcon, busy ? ICON_BUSY : ICON); + } + + gboolean get_checkbox(gchar* name) { +@@ -1341,7 +1341,7 @@ + + gtk_show_about_dialog((GtkWindow*) main_window, "name", PACKAGE, "version", VERSION, "comments", _("Synchronize files and folders (a GTK GUI for rsync)."), + "copyright", _("(C) Piero Orsoni and others. Released under the GPL.\nSee COPYING for details"), +- "website", "http://www.opbyte.it/grsync/", "artists", artists, "authors", authors, NULL); ++ "website", "http://www.opbyte.it/grsync/", "artists", artists, "authors", authors, "logo-icon-name", ICON, NULL); + } + + +diff -Naur grsync-1.2.6.orig/src/callbacks.h grsync-1.2.6/src/callbacks.h +--- grsync-1.2.6.orig/src/callbacks.h 2013-04-30 13:48:54.000000000 +0200 ++++ grsync-1.2.6/src/callbacks.h 2018-12-30 11:41:13.194991363 +0100 +@@ -2,10 +2,8 @@ + #define MAXOPT 100 + #define CONFIG_GROUP "__CONFIG" + +-#define ICON_SOURCE "pixmaps/grsync.png" +-#define ICON_SOURCE_BUSY "pixmaps/grsync-busy.png" +-#define ICON_PACKAGE PACKAGE_DATA_DIR "/" ICON_SOURCE +-#define ICON_PACKAGE_BUSY PACKAGE_DATA_DIR "/" ICON_SOURCE_BUSY ++#define ICON "grsync" ++#define ICON_BUSY "grsync-busy" + + GtkBuilder *builder; + GtkWidget *main_window; +diff -Naur grsync-1.2.6.orig/src/main.c grsync-1.2.6/src/main.c +--- grsync-1.2.6.orig/src/main.c 2013-04-30 13:48:54.000000000 +0200 ++++ grsync-1.2.6/src/main.c 2018-12-30 11:41:45.745911502 +0100 +@@ -68,9 +68,7 @@ + cmdline_import = FALSE; + } + +- icon = g_file_test(ICON_SOURCE, G_FILE_TEST_EXISTS) ? ICON_SOURCE : ICON_PACKAGE; +- icon_busy = g_file_test(ICON_SOURCE_BUSY, G_FILE_TEST_EXISTS) ? ICON_SOURCE_BUSY : ICON_PACKAGE_BUSY; +- gtk_window_set_default_icon_from_file(icon, NULL); ++ gtk_window_set_default_icon_name(ICON); + + builder = gtk_builder_new(); + result = gtk_builder_add_from_file(builder, XMLFILE, &gerror) || gtk_builder_add_from_file(builder, PACKAGE_DATA_DIR "/" PACKAGE "/" XMLFILE, NULL); diff --git a/gsasl/PKGBUILD b/gsasl/PKGBUILD new file mode 100644 index 0000000..d2ca613 --- /dev/null +++ b/gsasl/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=gsasl +pkgver=1.10.0 +pkgrel=1 +pkgdesc="Simple Authentication and Security Layer framework and a few common SASL mechanisms" +arch=('i686' 'x86_64') +url='https://josefsson.org/gsasl/' +license=('GPL-3') +depends=('gnutls' 'libidn' 'krb5' 'libgcrypt') +makedepends=('gettext-tiny' 'intltool') +source=("ftp://ftp.gnu.org/gnu/gsasl/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('8b1dc87e85dbfd0255b3b43c4b7f9c2e896cb03efe4cd4af86393b62fd193665aae4ce59e66db736722e32babfcea6d4f6ddd3c5f069dcc4210f7e9531043e4a' + 'SKIP') +validpgpkeys=('B1D2BD1375BECB784CF4F8C4D73CF638C53C06BE' # Simon Josefsson + '9AA9BDB11BB1B99A21285A330664A76954265E8C') # Simon Josefsson + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --with-gssapi-impl=mit + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/gsettings-desktop-schemas/PKGBUILD b/gsettings-desktop-schemas/PKGBUILD new file mode 100644 index 0000000..e4fae5d --- /dev/null +++ b/gsettings-desktop-schemas/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=gsettings-desktop-schemas +pkgver=3.38.0 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Shared GSettings schemas for the desktop" +arch=(any) +url='https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas' +license=('LGPL-2.1') +depends=('glib2' 'cantarell-fonts') +makedepends=('gobject-introspection' 'meson' 'quilt') +source=("https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gsettings-desktop-schemas/gsettings-desktop-schemas_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5af7da90b8e7eec1c98e9e44653955f2882961dd9b5e2bf00e4eeb9f4f1149ae5171c600d457c6ab9c7482471c1a0e98f92f645a7ee7298e1b843c608f660756' + '849e446c51c721ba5eada6a4ab7512eabdb0d3e3e690119a6f3fc0c0238a09326a36aad84a7d20f94ce81660abe18ae8ab059284cb6339ee6f6636adca650daa') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgname-$pkgver build + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/gsfonts/PKGBUILD b/gsfonts/PKGBUILD new file mode 100644 index 0000000..e0338f9 --- /dev/null +++ b/gsfonts/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=gsfonts +pkgver=20200910 +pkgrel=1 +pkgdesc='(URW)++ Core Font Set [Level 2]' +url='https://github.com/ArtifexSoftware/urw-base35-fonts' +arch=('any') +license=('AGPL-3') +source=(https://github.com/ArtifexSoftware/urw-base35-fonts/archive/20200910.tar.gz) +sha512sums=('71fb27baadf5abc4ff624cdede02038681acd5fffdc728a5b2e7808713b80cb2f2174f90a1862e69d390c4434c49d5167ab095100032fa3ba80b586eb8ae51d1') + +package() { + cd urw-base35-fonts-$pkgver + install -Dt "${pkgdir}/usr/share/fonts/${pkgname}" -m644 fonts/*.otf + install -Dt "${pkgdir}/usr/share/metainfo" -m644 appstream/*.xml + + install -d "${pkgdir}"/etc/fonts/conf.{avail,d} + for _f in fontconfig/*.conf; do + _fn="${pkgdir}/etc/fonts/conf.avail/69-${_f##*/}" + install -m644 ${_f} "${_fn}" + ln -srt "${pkgdir}/etc/fonts/conf.d" "${_fn}" + done + + for i in COPYING LICENSE; do + install -Dt "${pkgdir}/usr/share/licenses/${pkgname}" -m644 COPYING + done +} diff --git a/gsimplecal/PKGBUILD b/gsimplecal/PKGBUILD new file mode 100644 index 0000000..4ac85af --- /dev/null +++ b/gsimplecal/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=gsimplecal +pkgver=2.5.1 +pkgrel=1 +pkgdesc="Simple and lightweight GTK calendar" +arch=('i686' 'x86_64') +url='https://dmedvinsky.github.io/gsimplecal/' +license=('Modified-BSD') +depends=('gtk') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/dmedvinsky/${pkgname}/archive/v${pkgver}.tar.gz") +sha512sums=('0234dcecdc43e870bff68891fd620ea43750515ab687d845e692bf28598697b7274c46dca01af5d4cf1ab64c73d7a65612b5104dc000428d09186ce0740b974b') + +build() { + cd ${pkgname}-${pkgver} + ./autogen.sh + ./configure \ + --prefix=/usr/ + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname}/ +} diff --git a/gsl/PKGBUILD b/gsl/PKGBUILD new file mode 100644 index 0000000..99d3ff5 --- /dev/null +++ b/gsl/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=gsl +pkgver=2.6 +_debver=2.6+dfsg +_debrel=2 +pkgrel=1 +pkgdesc="The GNU Scientific Library (GSL) is a modern numerical library for C and C++ programmers" +url="https://www.gnu.org/software/gsl/gsl.html" +license=('GPL-3') +arch=('i686' 'x86_64') +depends=('glibc') +makedepends=('quilt') +source=("https://ftp.gnu.org/gnu/gsl/$pkgname-$pkgver.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/g/gsl/gsl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('0be8240715f0b86aba2c63d9f12da4dba4719d4e350e9308d279e0dd3b2f0519ea26fd2e38a17f3e8cf43aacbaa2455207a7ca0d6c305f3b8725e8ece2250a74' + 'SKIP' + 'ca494e3ffd4d019303cee91cdb18286f6e4d18e6befc895a9869c6fa761c74051189ca3ef547321df6427c97609ee3ef0ee0311d1463184f312f57f32e268eb1') +validpgpkeys=(DD61B7FC02790F978360F399245FB74BAE05B3E9) # Patrick Alken + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/reset-so-number || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +check() { + cd ${pkgname}-${pkgver} + make check || true +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/gst-editing-services/PKGBUILD b/gst-editing-services/PKGBUILD new file mode 100644 index 0000000..a4d9c9d --- /dev/null +++ b/gst-editing-services/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=gst-editing-services +pkgver=1.18.3 +pkgrel=1 +pkgdesc="Multimedia graph framework - editing services" +arch=('i686' 'x86_64') +license=('LGPL-2') +url='https://gstreamer.freedesktop.org/modules/gst-editing-services.html' +depends=('gst-plugins-base' 'python') +makedepends=('intltool' 'pkgconfig' 'meson' 'ninja' 'cmake' 'gobject-introspection' 'bash-completion') +options=('!libtool') +source=("https://gstreamer.freedesktop.org/src/gst-editing-services/${pkgname}-${pkgver}.tar.xz") +sha512sums=('7d4ee5d755fca0c895ebc7121c3af52538299a4452594cccf4926417253df5c5a6f3eee8bce26a937e0c2380d9220f52b12aefdc6a9a0a55b32fea13a62b3443') + +build() { + local meson_options=( + -D tests=disabled + -D doc=disabled + -D examples=disabled + -D validate=disabled + ) + hyperbola-meson $pkgname-$pkgver build "${meson_options[@]}" + meson compile -C build +} + +package() { + cd build + DESTDIR="${pkgdir}/" meson install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING.LIB" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gst-libav/PKGBUILD b/gst-libav/PKGBUILD new file mode 100644 index 0000000..be89f55 --- /dev/null +++ b/gst-libav/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=gst-libav +pkgver=1.18.4 +pkgrel=1 +pkgdesc="Multimedia graph framework - libav plugin" +url="https://gstreamer.freedesktop.org/" +arch=(i686 x86_64) +license=('LGPL-2' 'LGPL-2.1') +depends=(gst-plugins-base-libs bzip2 ffmpeg) +makedepends=(python meson) +provides=("gst-ffmpeg=$pkgver-$pkgrel") +source=("https://gstreamer.freedesktop.org/src/$pkgname/$pkgname-$pkgver.tar.xz") +sha512sums=('4eb10af6698f724bbc8d5b7b215e7349e6ff3b52e24b3987ee4077db1ae27ae0d6f25309adc50f0fccdf5af4d617634a7339ad1e5466a737c40a25c52c0d023f') + +prepare() { + cd $pkgname-$pkgver +} + +build() { + cd $pkgname-$pkgver + hyperbola-meson build \ + -D doc=disabled \ + -D package-name="GStreamer FFmpeg Plugin (Hyperbola GNU/Linux-libre)" \ + -D package-origin="https://www.hyperbola.info/" + meson compile -C build +} + +check() { + cd $pkgname-$pkgver + meson test -C build --print-errorlogs +} + +package() { + cd $pkgname-$pkgver + DESTDIR="$pkgdir" meson install -C build + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gst-plugins-bad/PKGBUILD b/gst-plugins-bad/PKGBUILD new file mode 100644 index 0000000..7ff2fd7 --- /dev/null +++ b/gst-plugins-bad/PKGBUILD @@ -0,0 +1,143 @@ +# Maintainer: Jesus E. + +pkgbase=gst-plugins-bad +pkgname=('gst-plugins-bad-libs' 'gst-plugins-bad') +pkgver=1.18.4 +_debver=$pkgver +_debrel=3 +pkgrel=12 +pkgdesc="Multimedia graph framework - bad plugins" +url='https://gstreamer.freedesktop.org/' +arch=(i686 x86_64) +license=(LGPL-2.1) +depends=(gst-plugins-base-libs orc libdrm libx11 libusb libxkbcommon-x11) +makedepends=(mjpegtools curl libmms faad2 libdca libdvdnav + libmodplug nettle libkate openjpeg2 libass + libexif libdvdread wildmidi ladspa openal + soundtouch spandsp neon libmpcdec libbs2b + lcms2 glu liblrdf libde265 zbar + librsvg-legacy fluidsynth lilv lv2 gst-plugins-good python + gobject-introspection gtk meson libmicrodns zxing-cpp serd sord sratom quilt) +options=(!emptydirs) +source=("https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-${pkgver}.tar.xz"{,.asc} + "https://security.debian.org/debian-security/pool/updates/main/g/gst-plugins-bad1.0/gst-plugins-bad1.0_${_debver}-${_debrel}+deb11u4.debian.tar.xz" + "libressl.patch" + "remove-enforced-deps.patch") +sha512sums=('02123e054419f5ce6ca2ebe0bdf23572269ea4120bf463b4d672efbe5d9e5d417d4d711cc80094be974c4569f754d8b2ad93f59b827e3b018d450582834cb125' + 'SKIP' + '9b7d7313aea6bde29801b39439bd1d2e82887df48e95c82e59f7dbc721d41f607a1504691c1cc4a7f78b088f59e1504053ab7f05b5c8bdd648cb3e9376d5c286' + 'c52db9fc7e5a72fe638fd9a1a509787f9b1a7a8d493792da5dbf8dc3514572fae2cb75413f73dd4ef30af3a46afcf4edcb718e06b39be0e86a77ddf3d41a50db' + '7f49d275053c8d7b04c0a7516e6f0d6a65a0f3d6b1a4039356dc72e3ed2a7ee3caac014a69b346cc3d70e31ac5c6c1c2e33bb2b6add477904f32c660b95540ce') +validpgpkeys=('D637032E45B8C6585B9456565D2EEE6F6F349D7C') # Tim MĂĽller + +prepare() { + cd $pkgbase-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/02_opencv-data-path.patch || true + + quilt push -av + fi + + patch -p0 -i $srcdir/libressl.patch + patch -p1 -i $srcdir/remove-enforced-deps.patch +} + +build() { + hyperbola-meson $pkgbase-$pkgver build \ + -D package-name="GStreamer Bad Plugins (Hyperbola GNU/Linux-libre)" \ + -D package-origin="https://www.hyperbola.info/" \ + -D directfb=disabled \ + -D doc=disabled \ + -D flite=disabled \ + -D gsm=disabled \ + -D iqa=disabled \ + -D magicleap=disabled \ + -D msdk=disabled \ + -D openh264=disabled \ + -D openmpt=disabled \ + -D openni2=disabled \ + -D opensles=disabled \ + -D tinyalsa=disabled \ + -D voaacenc=disabled \ + -D voamrwbenc=disabled \ + -D wasapi2=disabled \ + -D wasapi=disabled \ + -D gobject-cast-checks=disabled \ + -D wayland=disabled \ + -D bluez=disabled \ + -D fdkaac=disabled \ + -D faac=disabled \ + -D svthevcenc=disabled \ + -D webrtc=disabled \ + -D webrtcdsp=disabled \ + -D sbc=disabled \ + -D wpe=disabled \ + -D webp=disabled \ + -D v4l2codecs=disabled \ + -D uvch264=disabled \ + -D va=disabled \ + -D vulkan=disabled \ + -D aom=disabled \ + -D srt=disabled \ + -D srtp=disabled \ + -D rtmp=disabled \ + -D rtmp2=disabled \ + -D opencv=disabled \ + -D avtp=disabled \ + -D androidmedia=disabled \ + -D applemedia=disabled \ + -D openexr=disabled \ + -D dc1394=disabled \ + -D gme=disabled \ + -D ofa=disabled \ + -D chromaprint=disabled \ + -D teletext=disabled \ + -D x265=disabled + meson compile -C build +} + +package_gst-plugins-bad-libs() { + pkgdesc="${pkgdesc% plugins}" + provides=("gst-transcoder=$pkgver") + conflicts=("gst-transcoder<1.18.0") + replaces=("gst-transcoder<1.18.0") + + DESTDIR="$pkgdir" meson install -C build + + install -Dm644 $pkgbase-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname + + mkdir -p ext/lib/gstreamer-1.0 + for _x in assrender bs2b bz2 closedcaption colormanagement \ + curl de265 dtls dtsdec faad fluidsynthmidi \ + hls kate ladspa lv2 mms modplug mpeg2enc mplex musepack \ + neonhttpsrc openal openjpeg opusparse resindvd rsvg \ + sctp smoothstreaming sndfile soundtouch spandsp \ + ttmlsubs wildmidi zbar zxing microdns; do + _x="lib/gstreamer-1.0/libgst${_x}.so" + mv "$pkgdir/usr/$_x" "ext/$_x" + done +} + +package_gst-plugins-bad() { + depends=("gst-plugins-bad-libs=$pkgver" gst-plugins-good + libass libbs2b bzip2 pango lcms2 curl libxml2 + libde265 libressl libdca faad2 fluidsynth + nettle libkate liblrdf lilv libmms libmodplug mjpegtools + libmpcdec neon openal openjpeg2 opus libdvdnav + libdvdread librsvg-legacy libsndfile soundtouch spandsp + libxcb wildmidi zbar libmicrodns + zxing-cpp serd sord sratom) + + mv ext "$pkgdir/usr" + + install -Dm644 $pkgbase-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gst-plugins-bad/libressl.patch b/gst-plugins-bad/libressl.patch new file mode 100644 index 0000000..b0921ee --- /dev/null +++ b/gst-plugins-bad/libressl.patch @@ -0,0 +1,11 @@ +--- ext/dtls/gstdtlsagent.c 2018-03-23 21:45:15.000000000 +0100 ++++ - 2018-09-09 14:05:57.663350425 +0200 +@@ -176,7 +176,7 @@ + + ERR_clear_error (); + +-#if OPENSSL_VERSION_NUMBER >= 0x1000200fL ++#if OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(LIBRESSL_VERSION_NUMBER) + priv->ssl_context = SSL_CTX_new (DTLS_method ()); + #else + priv->ssl_context = SSL_CTX_new (DTLSv1_method ()); diff --git a/gst-plugins-bad/remove-enforced-deps.patch b/gst-plugins-bad/remove-enforced-deps.patch new file mode 100644 index 0000000..3b78f51 --- /dev/null +++ b/gst-plugins-bad/remove-enforced-deps.patch @@ -0,0 +1,11 @@ +--- a/tests/examples/meson.build 2021-03-15 18:49:19.802836000 +0100 ++++ b/tests/examples/meson.build 2023-10-05 23:43:36.100083759 +0200 +@@ -11,8 +11,6 @@ + subdir('nvcodec') + subdir('opencv', if_found: opencv_dep) + subdir('uvch264') +-subdir('va') +-subdir('waylandsink') + subdir('webrtc') + + executable('playout', diff --git a/gst-plugins-base/PKGBUILD b/gst-plugins-base/PKGBUILD new file mode 100644 index 0000000..7c04538 --- /dev/null +++ b/gst-plugins-base/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgbase=gst-plugins-base +pkgname=(gst-plugins-base-libs gst-plugins-base) +pkgver=1.18.3 +pkgrel=3 +pkgdesc="Multimedia graph framework - base plugins" +url='https://gstreamer.freedesktop.org/' +arch=(i686 x86_64) +license=(LGPL-2) +depends=(gstreamer orc libxv iso-codes mesa) +makedepends=(alsa-lib cdparanoia libvisual libvorbis libtheora pango opus + graphene libpng libjpeg gobject-introspection meson + gtk qt-{base,tools,x11extras} clutter sdl2 glu libsndio + gettext-tiny) +options=(!emptydirs) +source=(https://gstreamer.freedesktop.org/src/$pkgbase/$pkgbase-$pkgver.tar.xz + sndio.patch) +sha512sums=('5b1850c82d6c29e260cadcde6a412a75eac47b14a1778aa969b0a33540eb843f6cef2209c91a1d7230468ec9fbf00b53ca890b8c336378d39ea3cec0512f8e7f' + '7ac11cb09cad7996940dc725e93a00f235dd2d37f2874929db2f0062c3cc60b8be42d3336b546f16ab3e208bf8605df29688e0e20364e88656c02b0f3a0f975e') + +prepare() { + cd $pkgbase-$pkgver + + patch -p0 -i $srcdir/sndio.patch +} + +build() { + hyperbola-meson $pkgbase-$pkgver build \ + -D doc=disabled \ + -D tremor=disabled \ + -D gobject-cast-checks=disabled \ + -D package-name="GStreamer Base Plugins (Hyperbola GNU/Linux-libre)" \ + -D package-origin="https://www.hyperbola.info/" + meson compile -C build +} + +package_gst-plugins-base-libs() { + pkgdesc="${pkgdesc% plugins}" + + DESTDIR="$pkgdir" meson install -C build + + mkdir -p ext/lib/gstreamer-1.0 + for _x in alsa cdparanoia libvisual ogg opengl opus pango theora vorbis; do + _x="lib/gstreamer-1.0/libgst${_x}.so" + mv "$pkgdir/usr/$_x" "ext/$_x" + done + + install -Dm644 $srcdir/$pkgbase-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} + +package_gst-plugins-base() { + depends=("gst-plugins-base-libs=$pkgver" + alsa-lib cdparanoia libvisual libvorbis libtheora pango opus graphene libpng libjpeg libsndio) + + mv ext "$pkgdir/usr" + + install -Dm644 $srcdir/$pkgbase-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/gst-plugins-base/sndio.patch b/gst-plugins-base/sndio.patch new file mode 100644 index 0000000..fe61fb8 --- /dev/null +++ b/gst-plugins-base/sndio.patch @@ -0,0 +1,1134 @@ +Source: OpenBSD ports, adapted to work with meson +Upstream: No +Reason: sndio support + +diff --git ext/meson.build ext/meson.build +index d984b50..5f0becc 100644 +--- ext/meson.build ++++ ext/meson.build +@@ -5,5 +5,6 @@ subdir('libvisual') + subdir('ogg') + subdir('opus') + subdir('pango') ++subdir('sndio') + subdir('theora') + subdir('vorbis') +diff --git ext/sndio/gstsndio.c ext/sndio/gstsndio.c +new file mode 100644 +index 0000000..2321dc2 +--- /dev/null ++++ ext/sndio/gstsndio.c +@@ -0,0 +1,401 @@ ++/* ++ * Copyright (C) 2008 Jacob Meuser ++ * Copyright (C) 2012 Alexandre Ratchov ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#include ++#include "gstsndio.h" ++ ++GST_DEBUG_CATEGORY (gst_sndio_debug); ++#define GST_CAT_DEFAULT gst_sndio_debug ++ ++GType gst_sndiosink_get_type (void); ++GType gst_sndiosrc_get_type (void); ++ ++static gboolean ++plugin_init (GstPlugin * plugin) ++{ ++ GST_DEBUG_CATEGORY_INIT (gst_sndio_debug, "sndio", 0, "sndio plugins"); ++ ++ /* prefer sndiosrc over pulsesrc (GST_RANK_PRIMARY + 10) */ ++ if (!gst_element_register (plugin, "sndiosrc", GST_RANK_PRIMARY + 20, ++ gst_sndiosrc_get_type())) ++ return FALSE; ++ /* prefer sndiosink over pulsesink (GST_RANK_PRIMARY + 10) */ ++ if (!gst_element_register (plugin, "sndiosink", GST_RANK_PRIMARY + 20, ++ gst_sndiosink_get_type())) ++ return FALSE; ++ return TRUE; ++} ++ ++GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, ++ GST_VERSION_MINOR, ++ sndio, ++ "sndio plugin library", ++ plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) ++ ++/* ++ * common code to src and sink ++ */ ++ ++void ++gst_sndio_init (struct gstsndio *sio, GObject *obj) ++{ ++ sio->obj = obj; ++ sio->hdl = NULL; ++ sio->device = g_strdup (SIO_DEVANY); ++} ++ ++void ++gst_sndio_finalize (struct gstsndio *sio) ++{ ++ gst_caps_replace (&sio->cur_caps, NULL); ++ g_free (sio->device); ++} ++ ++GstCaps * ++gst_sndio_getcaps (struct gstsndio *sio, GstCaps * filter) ++{ ++ if (sio->cur_caps == NULL) { ++ /* XXX */ ++ GST_LOG_OBJECT (sio->obj, "getcaps called, returning template caps"); ++ return NULL; ++ } ++ ++ GST_LOG_OBJECT (sio->obj, "returning %" GST_PTR_FORMAT, sio->cur_caps); ++ ++ if (filter) { ++ return gst_caps_intersect_full (filter, ++ sio->cur_caps, GST_CAPS_INTERSECT_FIRST); ++ } else { ++ return gst_caps_ref (sio->cur_caps); ++ } ++} ++ ++static void ++gst_sndio_onvol (void *arg, unsigned int vol) ++{ ++ struct gstsndio *sio = arg; ++ sio->volume = vol; ++ g_object_notify (G_OBJECT (sio->obj), "mute"); ++ g_object_notify (G_OBJECT (sio->obj), "volume"); ++} ++ ++gboolean ++gst_sndio_open (struct gstsndio *sio, gint mode) ++{ ++ GValue list = G_VALUE_INIT, item = G_VALUE_INIT; ++ GstStructure *s; ++ GstCaps *caps; ++ struct sio_enc *enc; ++ struct sio_cap cap; ++ char fmt[16]; ++ int i, chan; ++ ++ GST_DEBUG_OBJECT (sio->obj, "open"); ++ ++ sio->hdl = sio_open (sio->device, mode, 0); ++ if (sio->hdl == NULL) { ++ GST_ELEMENT_ERROR (sio->obj, RESOURCE, OPEN_READ_WRITE, ++ ("Couldn't open sndio device"), (NULL)); ++ return FALSE; ++ } ++ sio->mode = mode; ++ ++ if (!sio_getcap(sio->hdl, &cap)) { ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_WRITE, ++ ("Couldn't get device capabilities"), (NULL)); ++ sio_close(sio->hdl); ++ sio->hdl = NULL; ++ return FALSE; ++ } ++ if (cap.nconf == 0) { ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_WRITE, ++ ("Device has empty capabilities"), (NULL)); ++ sio_close(sio->hdl); ++ sio->hdl = NULL; ++ return FALSE; ++ } ++ sio_onvol (sio->hdl, gst_sndio_onvol, sio); ++ ++ caps = gst_caps_new_empty (); ++ s = gst_structure_new ("audio/x-raw", (char *)NULL, (void *)NULL); ++ ++ /* ++ * scan supported rates ++ */ ++ g_value_init (&list, GST_TYPE_LIST); ++ g_value_init (&item, G_TYPE_INT); ++ for (i = 0; i < SIO_NRATE; i++) { ++ if ((cap.confs[0].rate & (1 << i)) == 0) ++ continue; ++ g_value_set_int(&item, cap.rate[i]); ++ gst_value_list_append_value (&list, &item); ++ } ++ gst_structure_set_value (s, "rate", &list); ++ g_value_unset (&item); ++ g_value_unset (&list); ++ ++ /* ++ * scan supported channels ++ */ ++ g_value_init (&list, GST_TYPE_LIST); ++ g_value_init (&item, G_TYPE_INT); ++ chan = (mode == SIO_PLAY) ? cap.confs[0].pchan : cap.confs[0].rchan; ++ for (i = 0; i < SIO_NCHAN; i++) { ++ if ((chan & (1 << i)) == 0) ++ continue; ++ g_value_set_int(&item, (mode == SIO_PLAY) ? cap.pchan[i] : cap.rchan[i]); ++ gst_value_list_append_value (&list, &item); ++ } ++ gst_structure_set_value (s, "channels", &list); ++ g_value_unset (&item); ++ g_value_unset (&list); ++ ++ /* ++ * scan supported encodings ++ */ ++ g_value_init (&list, GST_TYPE_LIST); ++ g_value_init (&item, G_TYPE_STRING); ++ for (i = 0; i < SIO_NENC; i++) { ++ if ((cap.confs[0].enc & (1 << i)) == 0) ++ continue; ++ enc = cap.enc + i; ++ if (enc->bits % 8 != 0) ++ continue; ++ if (enc->bits < enc->bps * 8 && enc->msb) ++ continue; ++ if (enc->bits == enc->bps * 8) { ++ snprintf(fmt, sizeof(fmt), "%s%u%s", ++ enc->sig ? "S" : "U", ++ enc->bits, ++ enc->bps > 1 ? (enc->le ? "LE" : "BE") : ""); ++ } else { ++ snprintf(fmt, sizeof(fmt), "%s%u_%u%s", ++ enc->sig ? "S" : "U", ++ enc->bits, ++ enc->bps * 8, ++ enc->bps > 1 ? (enc->le ? "LE" : "BE") : ""); ++ } ++ g_value_set_string(&item, fmt); ++ gst_value_list_append_value (&list, &item); ++ } ++ gst_structure_set_value (s, "format", &list); ++ g_value_unset (&item); ++ g_value_unset (&list); ++ ++ /* ++ * add the only supported layout: interleaved ++ */ ++ g_value_init (&item, G_TYPE_STRING); ++ g_value_set_string(&item, "interleaved"); ++ gst_structure_set_value (s, "layout", &item); ++ g_value_unset (&item); ++ ++ gst_caps_append_structure (caps, s); ++ sio->cur_caps = caps; ++ GST_DEBUG ("caps are %s", gst_caps_to_string(caps)); ++ return TRUE; ++} ++ ++gboolean ++gst_sndio_close (struct gstsndio *sio) ++{ ++ GST_DEBUG_OBJECT (sio->obj, "close"); ++ ++ gst_caps_replace (&sio->cur_caps, NULL); ++ sio_close (sio->hdl); ++ sio->hdl = NULL; ++ return TRUE; ++} ++ ++static void ++gst_sndio_cb (void *addr, int delta) ++{ ++ struct gstsndio *sio = addr; ++ ++ delta *= sio->bpf; ++ if (sio->mode == SIO_PLAY) ++ sio->delay -= delta; ++ else ++ sio->delay += delta; ++} ++ ++gboolean ++gst_sndio_prepare (struct gstsndio *sio, GstAudioRingBufferSpec *spec) ++{ ++ struct sio_par par, retpar; ++ unsigned nchannels; ++ ++ GST_DEBUG_OBJECT (sio, "prepare"); ++ ++ if (spec->type != GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW) { ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_READ_WRITE, ++ ("Only raw buffer format supported by sndio"), (NULL)); ++ return FALSE; ++ } ++ if (!GST_AUDIO_INFO_IS_INTEGER(&spec->info)) { ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_READ_WRITE, ++ ("Only integer format supported"), (NULL)); ++ return FALSE; ++ } ++ if (GST_AUDIO_INFO_DEPTH(&spec->info) % 8) { ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_READ_WRITE, ++ ("Only depths multiple of 8 are supported"), (NULL)); ++ return FALSE; ++ } ++ ++ sio_initpar (&par); ++ switch (GST_AUDIO_INFO_FORMAT (&spec->info)) { ++ case GST_AUDIO_FORMAT_S8: ++ case GST_AUDIO_FORMAT_U8: ++ case GST_AUDIO_FORMAT_S16LE: ++ case GST_AUDIO_FORMAT_S16BE: ++ case GST_AUDIO_FORMAT_U16LE: ++ case GST_AUDIO_FORMAT_U16BE: ++ case GST_AUDIO_FORMAT_S32LE: ++ case GST_AUDIO_FORMAT_S32BE: ++ case GST_AUDIO_FORMAT_U32LE: ++ case GST_AUDIO_FORMAT_U32BE: ++ case GST_AUDIO_FORMAT_S24_32LE: ++ case GST_AUDIO_FORMAT_S24_32BE: ++ case GST_AUDIO_FORMAT_U24_32LE: ++ case GST_AUDIO_FORMAT_U24_32BE: ++ case GST_AUDIO_FORMAT_S24LE: ++ case GST_AUDIO_FORMAT_S24BE: ++ case GST_AUDIO_FORMAT_U24LE: ++ case GST_AUDIO_FORMAT_U24BE: ++ break; ++ default: ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_READ_WRITE, ++ ("Unsupported audio format"), ++ ("format = %d", GST_AUDIO_INFO_FORMAT (&spec->info))); ++ return FALSE; ++ } ++ par.sig = GST_AUDIO_INFO_IS_SIGNED(&spec->info); ++ par.bits = GST_AUDIO_INFO_WIDTH(&spec->info); ++ par.bps = GST_AUDIO_INFO_DEPTH(&spec->info) / 8; ++ if (par.bps > 1) ++ par.le = GST_AUDIO_INFO_IS_LITTLE_ENDIAN(&spec->info); ++ if (par.bits < par.bps * 8) ++ par.msb = 0; ++ par.rate = GST_AUDIO_INFO_RATE(&spec->info); ++ if (sio->mode == SIO_PLAY) ++ par.pchan = GST_AUDIO_INFO_CHANNELS(&spec->info); ++ else ++ par.rchan = GST_AUDIO_INFO_CHANNELS(&spec->info); ++ par.round = par.rate / 1000000. * spec->latency_time; ++ par.appbufsz = par.rate / 1000000. * spec->buffer_time; ++ ++ if (!sio_setpar (sio->hdl, &par)) { ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_WRITE, ++ ("Unsupported audio encoding"), (NULL)); ++ return FALSE; ++ } ++ if (!sio_getpar (sio->hdl, &retpar)) { ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_WRITE, ++ ("Couldn't get audio device parameters"), (NULL)); ++ return FALSE; ++ } ++#if 0 ++ GST_DEBUG ("format = %s, " ++ "requested: sig = %d, bits = %d, bps = %d, le = %d, msb = %d, " ++ "rate = %d, pchan = %d, round = %d, appbufsz = %d; " ++ "returned: sig = %d, bits = %d, bps = %d, le = %d, msb = %d, " ++ "rate = %d, pchan = %d, round = %d, appbufsz = %d, bufsz = %d", ++ GST_AUDIO_INFO_NAME(&spec->info), ++ par.sig, par.bits, par.bps, par.le, par.msb, ++ par.rate, par.pchan, par.round, par.appbufsz, ++ retpar.sig, retpar.bits, retpar.bps, retpar.le, retpar.msb, ++ retpar.rate, retpar.pchan, retpar.round, retpar.appbufsz, retpar.bufsz); ++#endif ++ if (par.bits != retpar.bits || ++ par.bps != retpar.bps || ++ par.rate != retpar.rate || ++ (sio->mode == SIO_PLAY && par.pchan != retpar.pchan) || ++ (sio->mode == SIO_REC && par.rchan != retpar.rchan) || ++ (par.bps > 1 && par.le != retpar.le) || ++ (par.bits < par.bps * 8 && par.msb != retpar.msb)) { ++ GST_ELEMENT_ERROR (sio, RESOURCE, OPEN_WRITE, ++ ("Audio device refused requested parameters"), (NULL)); ++ return FALSE; ++ } ++ ++ nchannels = (sio->mode == SIO_PLAY) ? retpar.pchan : retpar.rchan; ++ spec->segsize = retpar.round * retpar.bps * nchannels; ++ spec->segtotal = retpar.bufsz / retpar.round; ++ sio->bpf = retpar.bps * nchannels; ++ sio->delay = 0; ++ sio_onmove (sio->hdl, gst_sndio_cb, sio); ++ ++ if (!sio_start (sio->hdl)) { ++ GST_ELEMENT_ERROR (sio->obj, RESOURCE, OPEN_READ_WRITE, ++ ("Could not start sndio"), (NULL)); ++ return FALSE; ++ } ++ return TRUE; ++} ++ ++gboolean ++gst_sndio_unprepare (struct gstsndio *sio) ++{ ++ if (sio->hdl) ++ sio_stop (sio->hdl); ++ return TRUE; ++} ++ ++void ++gst_sndio_set_property (struct gstsndio *sio, guint prop_id, ++ const GValue * value, GParamSpec * pspec) ++{ ++ switch (prop_id) { ++ case PROP_DEVICE: ++ g_free (sio->device); ++ sio->device = g_value_dup_string (value); ++ break; ++ case PROP_VOLUME: ++ sio_setvol (sio->hdl, g_value_get_double (value) * SIO_MAXVOL); ++ break; ++ case PROP_MUTE: ++ if (g_value_get_boolean (value)) ++ sio_setvol (sio->hdl, 0); ++ break; ++ default: ++ break; ++ } ++} ++ ++void ++gst_sndio_get_property (struct gstsndio *sio, guint prop_id, ++ GValue * value, GParamSpec * pspec) ++{ ++ switch (prop_id) { ++ case PROP_DEVICE: ++ g_value_set_string (value, sio->device); ++ break; ++ case PROP_VOLUME: ++ g_value_set_double (value, (gdouble)sio->volume / SIO_MAXVOL); ++ break; ++ case PROP_MUTE: ++ g_value_set_boolean (value, (sio->volume == 0)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (sio->obj, prop_id, pspec); ++ } ++} +diff --git ext/sndio/gstsndio.h ext/sndio/gstsndio.h +new file mode 100644 +index 0000000..77ec4e6 +--- /dev/null ++++ ext/sndio/gstsndio.h +@@ -0,0 +1,78 @@ ++/* ++ * Copyright (C) 2012 Alexandre Ratchov ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++#ifndef __GST_SNDIO_H__ ++#define __GST_SNDIO_H__ ++ ++#include ++#include ++#include ++#include ++#include ++ ++enum ++{ ++ PROP_0, ++ PROP_DEVICE, ++ PROP_VOLUME, ++ PROP_MUTE ++}; ++ ++#define GST_SNDIO_CAPS_STRING \ ++ "audio/x-raw, " \ ++ "format = (string) { " \ ++ "S8, U8, " \ ++ "S16LE, S16BE, U16LE, U16BE, " \ ++ "S32LE, S32BE, U32LE, U32BE, " \ ++ "S24_32LE, S24_32BE, U24_32LE, " \ ++ "U24_32BE, S24LE, S24BE, U24LE, U24BE " \ ++ "}, " \ ++ "layout = (string) interleaved, " \ ++ "rate = (int) [ 8000, 192000 ], " \ ++ "channels = (int) [1, 16]" ++ ++/* ++ * data common to src and sink ++ */ ++struct gstsndio { ++ struct sio_hdl *hdl; ++ gchar *device; ++ gint mode; ++ gint bpf; /* bytes per frame */ ++ gint delay; /* bytes stored in the audio fifo */ ++ guint volume; /* volume level */ ++ GstCaps *cur_caps; /* saved capabilities of opened device */ ++ GObject *obj; /* for logging */ ++}; ++ ++#define GST_SNDIO_DELAY(s) ((s)->delay / (s)->bpf) ++ ++void gst_sndio_init (struct gstsndio *sio, GObject *obj); ++void gst_sndio_finalize (struct gstsndio *sio); ++GstCaps *gst_sndio_getcaps (struct gstsndio *sio, GstCaps * filter); ++gboolean gst_sndio_open (struct gstsndio *sio, gint mode); ++gboolean gst_sndio_close (struct gstsndio *sio); ++gboolean gst_sndio_prepare (struct gstsndio *sio, GstAudioRingBufferSpec *spec); ++gboolean gst_sndio_unprepare (struct gstsndio *sio); ++void gst_sndio_set_property (struct gstsndio *sio, guint prop_id, ++ const GValue * value, GParamSpec * pspec); ++void gst_sndio_get_property (struct gstsndio *sio, guint prop_id, ++ GValue * value, GParamSpec * pspec); ++ ++int gst_sndio_setpar(gpointer sio, GstAudioRingBufferSpec * spec, ++ int mode, struct sio_hdl *hdl); ++GstCaps *gst_sndio_caps (gpointer sio, int mode, struct sio_hdl *hdl); ++ ++#endif +diff --git ext/sndio/meson.build ext/sndio/meson.build +new file mode 100644 +index 0000000..3f9a9fe +--- /dev/null ++++ ext/sndio/meson.build +@@ -0,0 +1,21 @@ ++sndio_sources = [ ++ 'gstsndio.c', ++ 'sndiosink.c', ++ 'sndiosrc.c', ++] ++ ++cc = meson.get_compiler('c') ++ ++sndio_dep = cc.find_library('sndio', required : get_option('sndio')) ++ ++if sndio_dep.found() ++ gstsndio = library('gstsndio', ++ sndio_sources, ++ c_args : gst_plugins_base_args, ++ include_directories: [configinc, libsinc], ++ dependencies: [gst_base_dep, sndio_dep, audio_dep], ++ install : true, ++ install_dir : plugins_install_dir, ++ ) ++ pkgconfig.generate(gstsndio, install_dir : plugins_pkgconfig_install_dir) ++endif +diff --git ext/sndio/sndiosink.c ext/sndio/sndiosink.c +new file mode 100644 +index 0000000..cc68bd2 +--- /dev/null ++++ ext/sndio/sndiosink.c +@@ -0,0 +1,226 @@ ++/* ++ * Copyright (C) 2008 Jacob Meuser ++ * Copyright (C) 2012 Alexandre Ratchov ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++/** ++ * SECTION:element-sndiosink ++ * @see_also: #GstAutoAudioSink ++ * ++ * ++ * ++ * This element outputs sound to a sound card using sndio. ++ * ++ * ++ * Simple example pipeline that plays an Ogg/Vorbis file via sndio: ++ * ++ * gst-launch -v filesrc location=foo.ogg ! decodebin ! audioconvert ! audioresample ! sndiosink ++ * ++ * ++ * ++ */ ++ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++#include "sndiosink.h" ++ ++GST_DEBUG_CATEGORY_EXTERN (gst_sndio_debug); ++#define GST_CAT_DEFAULT gst_sndio_debug ++ ++#define gst_sndiosink_parent_class parent_class ++ ++static GstStaticPadTemplate sndiosink_factory = ++ GST_STATIC_PAD_TEMPLATE ("sink", ++ GST_PAD_SINK, ++ GST_PAD_ALWAYS, ++ GST_STATIC_CAPS (GST_SNDIO_CAPS_STRING) ++ ); ++ ++G_DEFINE_TYPE_WITH_CODE (GstSndioSink, gst_sndiosink, GST_TYPE_AUDIO_SINK, ++ G_IMPLEMENT_INTERFACE (GST_TYPE_STREAM_VOLUME, NULL)); ++ ++static void gst_sndiosink_finalize (GObject * object); ++static GstCaps *gst_sndiosink_getcaps (GstBaseSink * bsink, ++ GstCaps * filter); ++static gboolean gst_sndiosink_open (GstAudioSink * asink); ++static gboolean gst_sndiosink_close (GstAudioSink * asink); ++static gboolean gst_sndiosink_prepare (GstAudioSink * asink, ++ GstAudioRingBufferSpec * spec); ++static gboolean gst_sndiosink_unprepare (GstAudioSink * asink); ++static gint gst_sndiosink_write (GstAudioSink * asink, gpointer data, ++ guint length); ++static guint gst_sndiosink_delay (GstAudioSink * asink); ++static void gst_sndiosink_reset (GstAudioSink * asink); ++static void gst_sndiosink_set_property (GObject * object, guint prop_id, ++ const GValue * value, GParamSpec * pspec); ++static void gst_sndiosink_get_property (GObject * object, guint prop_id, ++ GValue * value, GParamSpec * pspec); ++ ++static void ++gst_sndiosink_init (GstSndioSink * sink) ++{ ++ gst_sndio_init (&sink->sndio, G_OBJECT(sink)); ++} ++ ++static void ++gst_sndiosink_finalize (GObject * object) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (object); ++ ++ gst_sndio_finalize (&sink->sndio); ++ G_OBJECT_CLASS (parent_class)->finalize (object); ++} ++ ++static GstCaps * ++gst_sndiosink_getcaps (GstBaseSink * bsink, GstCaps * filter) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (bsink); ++ ++ return gst_sndio_getcaps (&sink->sndio, filter); ++} ++ ++static gboolean ++gst_sndiosink_open (GstAudioSink * asink) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (asink); ++ ++ return gst_sndio_open (&sink->sndio, SIO_PLAY); ++} ++ ++static gboolean ++gst_sndiosink_close (GstAudioSink * asink) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (asink); ++ ++ return gst_sndio_close (&sink->sndio); ++} ++ ++static gboolean ++gst_sndiosink_prepare (GstAudioSink * asink, GstAudioRingBufferSpec * spec) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (asink); ++ ++ return gst_sndio_prepare (&sink->sndio, spec); ++} ++ ++static gboolean ++gst_sndiosink_unprepare (GstAudioSink * asink) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (asink); ++ ++ return gst_sndio_unprepare (&sink->sndio); ++} ++ ++static gint ++gst_sndiosink_write (GstAudioSink * asink, gpointer data, guint length) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (asink); ++ guint done; ++ ++ if (length == 0) ++ return 0; ++ done = sio_write (sink->sndio.hdl, data, length); ++ if (done == 0) { ++ GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, ++ ("Failed to write data to sndio"), (NULL)); ++ return 0; ++ } ++ sink->sndio.delay += done; ++ return done; ++} ++ ++static guint ++gst_sndiosink_delay (GstAudioSink * asink) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (asink); ++ ++ return GST_SNDIO_DELAY(&sink->sndio); ++} ++ ++static void ++gst_sndiosink_reset (GstAudioSink * asink) ++{ ++} ++ ++static void ++gst_sndiosink_set_property (GObject * object, guint prop_id, ++ const GValue * value, GParamSpec * pspec) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (object); ++ ++ gst_sndio_set_property (&sink->sndio, prop_id, value, pspec); ++} ++ ++static void ++gst_sndiosink_get_property (GObject * object, guint prop_id, GValue * value, ++ GParamSpec * pspec) ++{ ++ GstSndioSink *sink = GST_SNDIOSINK (object); ++ ++ gst_sndio_get_property (&sink->sndio, prop_id, value, pspec); ++} ++ ++static void ++gst_sndiosink_class_init (GstSndioSinkClass * klass) ++{ ++ GObjectClass *gobject_class; ++ GstElementClass *gstelement_class; ++ GstBaseSinkClass *gstbasesink_class; ++ GstAudioBaseSinkClass *gstbaseaudiosink_class; ++ GstAudioSinkClass *gstaudiosink_class; ++ ++ gobject_class = (GObjectClass *) klass; ++ gstelement_class = (GstElementClass *) klass; ++ gstbasesink_class = (GstBaseSinkClass *) klass; ++ gstbaseaudiosink_class = (GstAudioBaseSinkClass *) klass; ++ gstaudiosink_class = (GstAudioSinkClass *) klass; ++ ++ parent_class = g_type_class_peek_parent (klass); ++ ++ gobject_class->finalize = gst_sndiosink_finalize; ++ gobject_class->get_property = gst_sndiosink_get_property; ++ gobject_class->set_property = gst_sndiosink_set_property; ++ ++ gst_element_class_set_static_metadata (gstelement_class, ++ "Audio sink (sndio)", "Sink/Audio", ++ "Output to a sound card via sndio", ++ "Jacob Meuser "); ++ ++ gst_element_class_add_pad_template (gstelement_class, ++ gst_static_pad_template_get (&sndiosink_factory)); ++ ++ gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_sndiosink_getcaps); ++ gstaudiosink_class->open = GST_DEBUG_FUNCPTR (gst_sndiosink_open); ++ gstaudiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_sndiosink_prepare); ++ gstaudiosink_class->unprepare = GST_DEBUG_FUNCPTR (gst_sndiosink_unprepare); ++ gstaudiosink_class->close = GST_DEBUG_FUNCPTR (gst_sndiosink_close); ++ gstaudiosink_class->write = GST_DEBUG_FUNCPTR (gst_sndiosink_write); ++ gstaudiosink_class->delay = GST_DEBUG_FUNCPTR (gst_sndiosink_delay); ++ gstaudiosink_class->reset = GST_DEBUG_FUNCPTR (gst_sndiosink_reset); ++ ++ g_object_class_install_property (gobject_class, PROP_DEVICE, ++ g_param_spec_string ("device", "Device", ++ "sndio device as defined in sndio(7)", ++ SIO_DEVANY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property (gobject_class, PROP_VOLUME, ++ g_param_spec_double ("volume", "Volume", ++ "Linear volume of this stream, 1.0=100%", 0.0, 1.0, ++ 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property (gobject_class, PROP_MUTE, ++ g_param_spec_boolean ("mute", "Mute", ++ "Mute state of this stream", FALSE, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++} +diff --git ext/sndio/sndiosink.h ext/sndio/sndiosink.h +new file mode 100644 +index 0000000..314e622 +--- /dev/null ++++ ext/sndio/sndiosink.h +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (C) 2008 Jacob Meuser ++ * Copyright (C) 2012 Alexandre Ratchov ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++ ++#ifndef __GST_SNDIOSINK_H__ ++#define __GST_SNDIOSINK_H__ ++ ++#include ++ ++#include ++#include ++#include "gstsndio.h" ++ ++G_BEGIN_DECLS ++ ++#define GST_TYPE_SNDIOSINK \ ++ (gst_sndiosink_get_type()) ++#define GST_SNDIOSINK(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SNDIOSINK,GstSndioSink)) ++#define GST_SNDIOSINK_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SNDIOSINK,GstSndioSinkClass)) ++#define GST_IS_SNDIOSINK(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SNDIOSINK)) ++#define GST_IS_SNDIOSINK_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SNDIOSINK)) ++ ++typedef struct _GstSndioSink GstSndioSink; ++typedef struct _GstSndioSinkClass GstSndioSinkClass; ++ ++struct _GstSndioSink { ++ GstAudioSink sink; ++ struct gstsndio sndio; ++}; ++ ++struct _GstSndioSinkClass { ++ GstAudioSinkClass parent_class; ++}; ++ ++GType gst_sndiosink_get_type (void); ++ ++G_END_DECLS ++ ++#endif /* __GST_SNDIOSINK_H__ */ +diff --git ext/sndio/sndiosrc.c ext/sndio/sndiosrc.c +new file mode 100644 +index 0000000..5b6d787 +--- /dev/null ++++ ext/sndio/sndiosrc.c +@@ -0,0 +1,225 @@ ++/* ++ * Copyright (C) 2008 Jacob Meuser ++ * Copyright (C) 2012 Alexandre Ratchov ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++/** ++ * SECTION:element-sndiosrc ++ * @see_also: #GstAutoAudioSrc ++ * ++ * ++ * ++ * This element retrieves samples from a sound card using sndio. ++ * ++ * ++ * Simple example pipeline that records an Ogg/Vorbis file via sndio: ++ * ++ * gst-launch -v sndiosrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=foo.ogg ++ * ++ * ++ * ++ */ ++ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#include "sndiosrc.h" ++#include "gstsndio.h" ++ ++GST_DEBUG_CATEGORY_EXTERN (gst_sndio_debug); ++#define GST_CAT_DEFAULT gst_sndio_debug ++ ++#define gst_sndiosrc_parent_class parent_class ++G_DEFINE_TYPE_WITH_CODE (GstSndioSrc, gst_sndiosrc, GST_TYPE_AUDIO_SRC, ++ G_IMPLEMENT_INTERFACE (GST_TYPE_STREAM_VOLUME, NULL)); ++ ++static void gst_sndiosrc_finalize (GObject * object); ++static GstCaps *gst_sndiosrc_getcaps (GstBaseSrc * bsrc, GstCaps * filter); ++static gboolean gst_sndiosrc_open (GstAudioSrc * asrc); ++static gboolean gst_sndiosrc_close (GstAudioSrc * asrc); ++static gboolean gst_sndiosrc_prepare (GstAudioSrc * asrc, ++ GstAudioRingBufferSpec * spec); ++static gboolean gst_sndiosrc_unprepare (GstAudioSrc * asrc); ++static guint gst_sndiosrc_read (GstAudioSrc * asrc, gpointer data, ++ guint length); ++static guint gst_sndiosrc_delay (GstAudioSrc * asrc); ++static void gst_sndiosrc_reset (GstAudioSrc * asrc); ++static void gst_sndiosrc_set_property (GObject * object, guint prop_id, ++ const GValue * value, GParamSpec * pspec); ++static void gst_sndiosrc_get_property (GObject * object, ++ guint prop_id, GValue * value, GParamSpec * pspec); ++ ++static GstStaticPadTemplate sndiosrc_factory = ++ GST_STATIC_PAD_TEMPLATE ("src", ++ GST_PAD_SRC, ++ GST_PAD_ALWAYS, ++ GST_STATIC_CAPS (GST_SNDIO_CAPS_STRING) ++ ); ++ ++static void ++gst_sndiosrc_init (GstSndioSrc * src) ++{ ++ gst_sndio_init (&src->sndio, G_OBJECT(src)); ++} ++ ++static void ++gst_sndiosrc_finalize (GObject * object) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (object); ++ ++ gst_sndio_finalize (&src->sndio); ++ G_OBJECT_CLASS (parent_class)->finalize (object); ++} ++ ++static GstCaps * ++gst_sndiosrc_getcaps (GstBaseSrc * bsrc, GstCaps * filter) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (bsrc); ++ ++ return gst_sndio_getcaps (&src->sndio, filter); ++} ++ ++static gboolean ++gst_sndiosrc_open (GstAudioSrc * asrc) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (asrc); ++ ++ return gst_sndio_open (&src->sndio, SIO_REC); ++} ++ ++static gboolean ++gst_sndiosrc_close (GstAudioSrc * asrc) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (asrc); ++ ++ return gst_sndio_close (&src->sndio); ++} ++ ++static gboolean ++gst_sndiosrc_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (asrc); ++ ++ return gst_sndio_prepare (&src->sndio, spec); ++} ++ ++static gboolean ++gst_sndiosrc_unprepare (GstAudioSrc * asrc) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (asrc); ++ ++ return gst_sndio_unprepare (&src->sndio); ++} ++ ++static guint ++gst_sndiosrc_read (GstAudioSrc * asrc, gpointer data, guint length) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (asrc); ++ guint done; ++ ++ if (length == 0) ++ return 0; ++ done = sio_read (src->sndio.hdl, data, length); ++ if (done == 0) { ++ GST_ELEMENT_ERROR (src, RESOURCE, READ, ++ ("Failed to read data from sndio"), (NULL)); ++ return 0; ++ } ++ src->sndio.delay -= done; ++ return done; ++} ++ ++static guint ++gst_sndiosrc_delay (GstAudioSrc * asrc) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (asrc); ++ ++ return GST_SNDIO_DELAY(&src->sndio); ++} ++ ++static void ++gst_sndiosrc_reset (GstAudioSrc * asrc) ++{ ++} ++ ++static void ++gst_sndiosrc_set_property (GObject * object, guint prop_id, ++ const GValue * value, GParamSpec * pspec) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (object); ++ ++ gst_sndio_set_property (&src->sndio, prop_id, value, pspec); ++} ++ ++static void ++gst_sndiosrc_get_property (GObject * object, guint prop_id, GValue * value, ++ GParamSpec * pspec) ++{ ++ GstSndioSrc *src = GST_SNDIOSRC (object); ++ ++ gst_sndio_get_property (&src->sndio, prop_id, value, pspec); ++} ++ ++static void ++gst_sndiosrc_class_init (GstSndioSrcClass * klass) ++{ ++ GObjectClass *gobject_class; ++ GstElementClass *gstelement_class; ++ GstBaseSrcClass *gstbasesrc_class; ++ GstAudioBaseSrcClass *gstbaseaudiosrc_class; ++ GstAudioSrcClass *gstaudiosrc_class; ++ gobject_class = (GObjectClass *) klass; ++ gstelement_class = (GstElementClass *) klass; ++ gstbasesrc_class = (GstBaseSrcClass *) klass; ++ gstbaseaudiosrc_class = (GstAudioBaseSrcClass *) klass; ++ gstaudiosrc_class = (GstAudioSrcClass *) klass; ++ ++ parent_class = g_type_class_peek_parent (klass); ++ ++ gobject_class->finalize = gst_sndiosrc_finalize; ++ gobject_class->get_property = gst_sndiosrc_get_property; ++ gobject_class->set_property = gst_sndiosrc_set_property; ++ ++ gst_element_class_set_static_metadata (gstelement_class, ++ "Audio src (sndio)", "Src/Audio", ++ "Input from a sound card via sndio", ++ "Jacob Meuser "); ++ ++ gst_element_class_add_pad_template (gstelement_class, ++ gst_static_pad_template_get (&sndiosrc_factory)); ++ ++ gstbasesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_sndiosrc_getcaps); ++ gstaudiosrc_class->open = GST_DEBUG_FUNCPTR (gst_sndiosrc_open); ++ gstaudiosrc_class->prepare = GST_DEBUG_FUNCPTR (gst_sndiosrc_prepare); ++ gstaudiosrc_class->unprepare = GST_DEBUG_FUNCPTR (gst_sndiosrc_unprepare); ++ gstaudiosrc_class->close = GST_DEBUG_FUNCPTR (gst_sndiosrc_close); ++ gstaudiosrc_class->read = GST_DEBUG_FUNCPTR (gst_sndiosrc_read); ++ gstaudiosrc_class->delay = GST_DEBUG_FUNCPTR (gst_sndiosrc_delay); ++ gstaudiosrc_class->reset = GST_DEBUG_FUNCPTR (gst_sndiosrc_reset); ++ ++ g_object_class_install_property (gobject_class, PROP_DEVICE, ++ g_param_spec_string ("device", "Device", ++ "sndio device as defined in sndio(7)", ++ SIO_DEVANY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property (gobject_class, PROP_VOLUME, ++ g_param_spec_double ("volume", "Volume", ++ "Linear volume of this stream, 1.0=100%", 0.0, 1.0, ++ 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property (gobject_class, PROP_MUTE, ++ g_param_spec_boolean ("mute", "Mute", ++ "Mute state of this stream", FALSE, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++} +diff --git ext/sndio/sndiosrc.h ext/sndio/sndiosrc.h +new file mode 100644 +index 0000000..83fd29c +--- /dev/null ++++ ext/sndio/sndiosrc.h +@@ -0,0 +1,57 @@ ++/* ++ * Copyright (C) 2008 Jacob Meuser ++ * Copyright (C) 2012 Alexandre Ratchov ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++ ++#ifndef __GST_SNDIOSRC_H__ ++#define __GST_SNDIOSRC_H__ ++ ++#include ++ ++#include ++#include ++#include "gstsndio.h" ++ ++G_BEGIN_DECLS ++ ++#define GST_TYPE_SNDIOSRC \ ++ (gst_sndiosrc_get_type()) ++#define GST_SNDIOSRC(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SNDIOSRC,GstSndioSrc)) ++#define GST_SNDIOSRC_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SNDIOSRC,GstSndioSrcClass)) ++#define GST_IS_SNDIOSRC(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SNDIOSRC)) ++#define GST_IS_SNDIOSRC_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SNDIOSRC)) ++ ++typedef struct _GstSndioSrc GstSndioSrc; ++typedef struct _GstSndioSrcClass GstSndioSrcClass; ++ ++struct _GstSndioSrc { ++ GstAudioSrc src; ++ struct gstsndio sndio; ++}; ++ ++struct _GstSndioSrcClass { ++ GstAudioSrcClass parent_class; ++}; ++ ++GType gst_sndiosrc_get_type (void); ++ ++G_END_DECLS ++ ++#endif /* __GST_SNDIOSRC_H__ */ +diff --git meson_options.txt meson_options.txt +index e7af4dd..827507f 100644 +--- meson_options.txt ++++ meson_options.txt +@@ -58,6 +58,7 @@ option('libvisual', type : 'feature', value : 'auto', description : 'libvisual a + option('ogg', type : 'feature', value : 'auto', description : 'ogg parser, muxer, demuxer plugin') + option('opus', type : 'feature', value : 'auto', description : 'OPUS audio codec plugin') + option('pango', type : 'feature', value : 'auto', description : 'Pango text rendering and overlay plugin') ++option('sndio', type : 'feature', value : 'auto', description : 'sndio support') + option('theora', type : 'feature', value : 'auto', description : 'Theora video parser and codec plugin') + option('tremor', type : 'feature', value : 'auto', description : 'Integer Vorbis decoder plugin for devices without floating point') + option('vorbis', type : 'feature', value : 'auto', description : 'Vorbis audio parser, tagger, and codec plugin') diff --git a/gst-plugins-good/PKGBUILD b/gst-plugins-good/PKGBUILD new file mode 100644 index 0000000..bf69be5 --- /dev/null +++ b/gst-plugins-good/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgbase=gst-plugins-good +pkgname=(gst-plugins-good gst-plugin-gtk gst-plugin-qmlgl) +pkgver=1.18.3 +pkgrel=7 +pkgdesc="Multimedia graph framework - good plugins" +url='https://gstreamer.freedesktop.org/' +arch=(i686 x86_64) +license=(LGPL-2.1) +depends=(gst-plugins-base-libs wavpack aalib taglib gdk-pixbuf2 libcaca libxdamage + v4l-utils cairo speex flac lame mpg123 twolame) +makedepends=(gettext-tiny python meson jack2 gtk qt-{tools,declarative,x11extras} nasm) +options=(!emptydirs) +source=(https://gstreamer.freedesktop.org/src/$pkgbase/$pkgbase-$pkgver.tar.xz) +sha512sums=('33d8b07bd98e9a04ee9f4dccaf4ff9c0a967336f3f368c7c5c63387fdaad829f445cc4d4abd617c3c1d530df9c04a2c7c12cc348afd98793aa7bea1d0ac710f8') + +build() { + hyperbola-meson $pkgbase-$pkgver build \ + -D doc=disabled \ + -D rpicamsrc=disabled \ + -D gobject-cast-checks=disabled \ + -D pulse=disabled \ + -D soup=disabled \ + -D shout2=disabled \ + -D v4l2-gudev=disabled \ + -D vpx=disabled \ + -D dv=disabled \ + -D dv1394=disabled \ + -D package-name="GStreamer Good Plugins (Hyperbola GNU/Linux-libre)" \ + -D package-origin="https://www.hyperbola.info/" + meson compile -C build +} + +package_gst-plugins-good() { + DESTDIR="$pkgdir" meson install -C build + + install -Dm644 "$srcdir/$pkgbase-$pkgver/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + for _x in gtk qmlgl; do + mkdir -p "$_x/lib/gstreamer-1.0" + _f="lib/gstreamer-1.0/libgst${_x}.so" + mv "$pkgdir/usr/$_f" "$_x/$_f" + done +} + +package_gst-plugin-gtk() { + pkgdesc="${pkgdesc%-*}- gtk plugin" + depends=(gst-plugins-base-libs gtk) + + mv gtk "$pkgdir/usr" + + install -Dm644 "$srcdir/$pkgbase-$pkgver/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_gst-plugin-qmlgl() { + pkgdesc="${pkgdesc%-*}- qmlgl plugin" + depends=(gst-plugins-base-libs qt-{declarative,x11extras}) + + mv qmlgl "$pkgdir/usr" + + install -Dm644 "$srcdir/$pkgbase-$pkgver/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/gst-plugins-ugly/PKGBUILD b/gst-plugins-ugly/PKGBUILD new file mode 100644 index 0000000..3d1cd09 --- /dev/null +++ b/gst-plugins-ugly/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=gst-plugins-ugly +pkgver=1.18.3 +pkgrel=3 +pkgdesc="Multimedia graph framework - ugly plugins" +url='https://gstreamer.freedesktop.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('gst-plugins-base-libs' 'libdvdread' 'libmpeg2' 'a52dec' 'libsidplay' 'libcdio' 'x264') +makedepends=('gettext-tiny' 'python' 'meson') +source=("https://gstreamer.freedesktop.org/src/${pkgname}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('f3af4637911329a910276c01e688b4ac06f658194ba8e2a809e8b058fca49508d940f6396a54944d993d307d2843ef45aadf05e84c9d733f288b1f7a9d0787be') + +build() { + hyperbola-meson $pkgname-$pkgver build \ + -D doc=disabled \ + -D gobject-cast-checks=disabled \ + -D amrnb=disabled \ + -D amrwbdec=disabled \ + -D package-name="GStreamer Ugly Plugins (Hyperbola GNU/Linux-libre)" \ + -D package-origin="https://www.hyperbola.info/" + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gst-python/PKGBUILD b/gst-python/PKGBUILD new file mode 100644 index 0000000..e5a58bc --- /dev/null +++ b/gst-python/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=gst-python +pkgver=1.18.3 +pkgrel=1 +pkgdesc='Multimedia graph framework - python bindings' +url='https://gstreamer.freedesktop.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('python-gobject' 'gst-plugins-base-libs') +makedepends=('meson') +source=("https://gstreamer.freedesktop.org/src/${pkgname}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('b24d85cfe6b852957e9d7a80652652b967b6bd024ac8652cc8c0d1fa5d463fb7b0ab5d48d796895c26684fd3c0bd4722a1bcaca96333ee71e572cd4b071c5f9f') + +build() { + hyperbola-meson ${pkgname}-${pkgver} build + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + python -m compileall -d /usr/lib "$pkgdir/usr/lib" + python -O -m compileall -d /usr/lib "$pkgdir/usr/lib" + install -Dm644 "${srcdir}/$pkgname-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gstreamer/PKGBUILD b/gstreamer/PKGBUILD new file mode 100644 index 0000000..287c711 --- /dev/null +++ b/gstreamer/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=gstreamer +pkgver=1.18.3 +_debver=1.18.3 +_debrel=1 +pkgrel=1 +pkgdesc="Multimedia graph framework - core" +url="https://gstreamer.freedesktop.org/" +arch=(i686 x86_64) +license=(LGPL-2) +depends=(libxml2 glib2 libunwind libcap libelf python) +makedepends=(gobject-introspection bash-completion meson gmp gsl gtk quilt) +install=gstreamer.install +source=(https://gstreamer.freedesktop.org/src/$pkgname/$pkgname-$pkgver.tar.xz + https://deb.debian.org/debian/pool/main/g/gstreamer1.0/gstreamer1.0_$_debver-$_debrel.debian.tar.xz + byacc.patch) +sha512sums=('c0258fb1f233facec72b5004d33d36871b11235d369e7f1f1e0597c5880bef89a5337550fa8b285688b5c9f42dac6e7d1f1208076d4b90a09363d2805e0dfba9' + '6d296df98d9e798741196c0880d787cc512777c000da855844fe68e32fa8cae0fabbd0a14d9288823e91edafab7cb5b427caf84ba9c9a27926e21b33c00b57b5' + '3b6dcee15ea2d04d49131b9d9bb9252563513ed60f2b2222a10af2deb17df7b0966165d59532e2a7a1a05d1f01d700380c6463f187ce725f2872c7c39e612ac2') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0001-registrybinary-Update-magic-version-string.patch || true + + quilt push -av + fi + patch -p1 -i ../byacc.patch +} + +build() { + hyperbola-meson $pkgname-$pkgver build \ + -D doc=disabled \ + -D ptp-helper-permissions=none \ + -D dbghelp=disabled \ + -D gobject-cast-checks=disabled \ + -D package-name="GStreamer (Hyperbola GNU/Linux-libre)" \ + -D package-origin="https://www.hyperbola.info/" + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/gstreamer/byacc.patch b/gstreamer/byacc.patch new file mode 100644 index 0000000..450fb7e --- /dev/null +++ b/gstreamer/byacc.patch @@ -0,0 +1,85 @@ +diff --git a/gst/parse/gen_grammar.py.in b/gst/parse/gen_grammar.py.in +index 3a7af00..8d4cc92 100755 +--- a/gst/parse/gen_grammar.py.in ++++ b/gst/parse/gen_grammar.py.in +@@ -6,9 +6,9 @@ cfile = sys.argv[1] + hfile = sys.argv[2] + yfile = sys.argv[3] + +-args = ['-d', '-v', '-ppriv_gst_parse_yy', yfile, '-o', cfile] +-bison = [r'@BISON@'] + shlex.split(r'@BISON_ARGS@') +-subprocess.check_call(bison + args) ++args = ['-d', '-v', '-p', 'priv_gst_parse_yy', '-o', cfile, yfile] ++yacc = [r'@YACC@'] + shlex.split(r'@YACC_ARGS@') ++subprocess.check_call(yacc + args) + + prefix = ''' + #ifdef HAVE_CONFIG_H +diff --git a/gst/parse/grammar.y.in b/gst/parse/grammar.y.in +index 2ef703d..8292df9 100644 +--- a/gst/parse/grammar.y.in ++++ b/gst/parse/grammar.y.in +@@ -830,7 +830,7 @@ static int yyerror (void *scanner, graph_t *graph, const char *s); + %lex-param { void *scanner } + %parse-param { void *scanner } + %parse-param { graph_t *graph } +-@BISON_PURE_PARSER@ ++@YACC_PURE_PARSER@ + + %start graph + %% +diff --git a/gst/parse/meson.build b/gst/parse/meson.build +index 35ed6f2..0391dad 100644 +--- a/gst/parse/meson.build ++++ b/gst/parse/meson.build +@@ -26,41 +26,24 @@ gen_lex = configure_file(input : 'gen_lex.py.in', + output : 'gen_lex.py', + configuration : flex_cdata) + +-# Find bison, configure grammar generator +-bison_parser_cdata = configuration_data() +-bison_cdata = configuration_data() ++# Find yacc, configure grammar generator ++yacc_parser_cdata = configuration_data() ++yacc_cdata = configuration_data() + +-bison_min_version='2.4' +-bison = find_program('bison', 'win_bison') ++yacc = find_program('byacc') + +-bversion_res = run_command([bison, '--version']) +-if bversion_res.returncode() != 0 +- error('Could not get bison version (@0@)'.format(bversion_res.stderr())) +-endif +- +-bversion = bversion_res.stdout().split('\n')[0].split(' ')[-1].strip() +-if bversion.version_compare('<' + bison_min_version) +- error('bison version @0@ >= @1@: NO'.format(bversion, bison_min_version)) +-else +- message('bison version @0@ >= @1@: YES'.format(bversion, bison_min_version)) +-endif +- +-if bversion.version_compare('>' + '2.5') +- bison_parser_cdata.set('BISON_PURE_PARSER', '%define api.pure full') +-else +- bison_parser_cdata.set('BISON_PURE_PARSER', '%pure-parser') +-endif ++yacc_parser_cdata.set('YACC_PURE_PARSER', '%pure-parser') + + gen_grammar_file = configure_file(input : 'grammar.y.in', + output : 'grammar.y', +- configuration : bison_parser_cdata) ++ configuration : yacc_parser_cdata) + +-bison_cdata.set('BISON', bison.path()) +-bison_cdata.set('BISON_ARGS', '') ++yacc_cdata.set('YACC', yacc.path()) ++yacc_cdata.set('YACC_ARGS', '') + + gen_grammar = configure_file(input : 'gen_grammar.py.in', + output : 'gen_grammar.py', +- configuration : bison_cdata) ++ configuration : yacc_cdata) + + # Custom targets + parser = custom_target('parselex', diff --git a/gstreamer/gstreamer.install b/gstreamer/gstreamer.install new file mode 100644 index 0000000..0c022f9 --- /dev/null +++ b/gstreamer/gstreamer.install @@ -0,0 +1,7 @@ +post_install() { + post_upgrade $1 '' +} + +post_upgrade() { + setcap cap_net_bind_service,cap_net_admin+ep usr/libexec/gstreamer-1.0/gst-ptp-helper +} diff --git a/gstreamermm/PKGBUILD b/gstreamermm/PKGBUILD new file mode 100644 index 0000000..2eb0b48 --- /dev/null +++ b/gstreamermm/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=gstreamermm +pkgver=1.10.0 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="C++ interface for GStreamer" +arch=('i686' 'x86_64') +url='https://gstreamer.freedesktop.org/bindings/cplusplus.html' +license=('LGPL-2.1' 'GPL-2') +depends=('glibmm' 'gst-plugins-base') +makedepends=('mm-common' 'cairomm' 'pangomm' 'quilt') +source=("https://ftp.gnome.org/pub/GNOME/sources/gstreamermm/1.10/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gstreamermm-1.0/gstreamermm-1.0_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('34eeb9eec5958c96acf7c7791eef80138e5d55fea6ddf1bf9ace6b1ec7f052da2abf04d87089e4c9ead51c631ef7afceaf9fceb946ec3d105da522187c69e429' + '9aea75b5022fed90d5e20ce3f5bec009486cacd0b129cf4ee5e388ee7e24a90039908e3823bf3e493b3d452847152fc877a88f298d2b099ccf2d6f02ec26da9d') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-maintainer-mode + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + sed -i -e 's/^doc_subdirs/#doc_subdirs/' Makefile + make DESTDIR="$pkgdir" install + make -C docs DESTDIR="$pkgdir" install + install -Dm644 COPYING{,.tools} -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gtk-vnc/PKGBUILD b/gtk-vnc/PKGBUILD new file mode 100644 index 0000000..250e20f --- /dev/null +++ b/gtk-vnc/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=gtk-vnc +pkgver=1.0.0 +_ver=1.0 +pkgrel=1 +pkgdesc='A VNC viewer widget for GTK' +arch=('i686' 'x86_64') +url="https://wiki.gnome.org/Projects/${pkgname}" +license=('LGPL-2.1') +depends=('gtk' 'gnutls' 'libgcrypt' 'libsasl') +makedepends=('gobject-introspection' 'meson' 'vala' 'perl-text-csv') +source=("https://download.gnome.org/sources/${pkgname}/${_ver}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('63a40b9b284c4e46a92d5375ab3660b324ff27bfc572559d3b34d29fe4f7d24e976396b6688b8f3e3109d49dc5527075d128c43bb997507e68ddc0880b0ad148') + +build() { + cd ${pkgname}-${pkgver} + hyperbola-meson build + meson compile -C build +} + +package() { + cd ${pkgname}-${pkgver} + DESTDIR=${pkgdir} meson install -C build + install -Dvm755 build/examples/gvncviewer -t ${pkgdir}/usr/bin + install -Dvm644 COPYING.LIB -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/gtk/PKGBUILD b/gtk/PKGBUILD new file mode 100644 index 0000000..400e7f4 --- /dev/null +++ b/gtk/PKGBUILD @@ -0,0 +1,96 @@ +# Maintainer: Jesus E. + +_pkgbase=gtk+ +pkgbase=gtk +pkgname=(gtk gtk-update-icon-cache) +pkgver=3.24.24 +_debver=$pkgver +_debrel=4 +pkgrel=6 +pkgdesc="GObject-based multi-platform GUI toolkit" +arch=('i686' 'x86_64') +license=('LGPL-2') +url='https://www.gtk.org/' +depends=('atk' 'cairo' 'libxcursor' 'libxinerama' 'libxrandr' 'libxi' 'libepoxy' 'gdk-pixbuf2' + 'libxcomposite' 'libxdamage' 'pango' 'shared-mime-info' 'libxkbcommon' + 'arc-icon-theme' 'xcursor-premium' 'json-glib' 'librsvg-legacy' + 'desktop-file-utils' 'mesa' 'cantarell-fonts' 'libcups' 'fribidi' 'iso-codes') +makedepends=('gobject-introspection' 'sassc' 'meson' 'docbook-xsl' 'quilt') +source=("https://download.gnome.org/sources/$_pkgbase/${pkgver:0:4}/${_pkgbase}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gtk+3.0/gtk+3.0_${_debver}-${_debrel}+deb11u4.debian.tar.xz" + "settings.ini" + "gtk-query-immodules-3.0.hook" + "gtk-update-icon-cache.hook" + "gtk-update-icon-cache.script" + "optionalize-at-spi2-atk-dependency.patch") +sha512sums=('f4e22d7c78d7c641ac7c3beeb3181000b72b025c65074bab6bd51b9a86ec4f6a2e25f06ad7671a908be421c064f4c26e2185febb424f310a2530561aebde8520' + '35c7e94ff0e7951aae09c2f27a5e562428cb41477bfe6334efb135eecd1ed58797c46e65510955a51f4850b438cbd8e9769007a19e806d6bd9206abcf0df8fe2' + '1070d7f42cee3517f356ef57d0b1e1d8ca0af00ac8e86ca35a7109e5d0d8845d2f04e3ec81453e00aa4a4b0e9915d010bf7d9014ec44ef9bebe362c4e497704d' + 'f0ffd95544863f2e10fda81488b4727aa9a8a35a7d39fb96872db6664d03442db2b58af788b5990825c7b3a83681f7220ca481409cca5421dfb39b9a3bbac9ac' + 'abfd73de4faa6f53784182800395aa3c39bb98e15a0eb300fb4142073ff7ce565a0836a2363393b2f132060b5293dbc0c30c380a023f38d5bd39c62cb58389c2' + '5cd50d93bb6bc203438a2a0764bd717409658e124058b18a1da26a21f10ef7564a16f32fc0633a68b45b2e303fa63a5efefeadd6b0bf1d7f474556df8cdb6c58' + '9a1dccd0764fafa2a29edd317301b46eb1771d2e4b02c7b259ce6129944284ba30209dff8dd842b6be0d08f3af322cec49d3b821c3eaa96c15684b41e32a6a6c') + +prepare() { + cd $_pkgbase-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # optionalize at-spi2-atk dependency + # https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194460 + # https://svnweb.freebsd.org/ports?view=revision&revision=538187 + patch -p1 -i $srcdir/optionalize-at-spi2-atk-dependency.patch +} + +build() { + CFLAGS+=" -DG_ENABLE_DEBUG -DG_DISABLE_CAST_CHECKS" + hyperbola-meson $_pkgbase-$pkgver build \ + -D wayland_backend=false \ + -D broadway_backend=true \ + -D colord=no \ + -D gtk_doc=false \ + -D man=true \ + -D tests=false \ + -D atk-bridge=false + ninja -C build +} + +package_gtk() { + depends+=(gtk-update-icon-cache) + replaces=('gtk3') + conflicts=('gtk3') + provides=('gtk3') + install=gtk.install + + DESTDIR="$pkgdir" meson install -C build + + install -Dm644 settings.ini "$pkgdir/usr/share/gtk-3.0/settings.ini" + install -Dm644 gtk-query-immodules-3.0.hook "$pkgdir/usr/share/libalpm/hooks/gtk-query-immodules-3.0.hook" + + # split this out to use with gtk2 too + mv "$pkgdir/usr/bin/gtk-update-icon-cache" "$srcdir" + + install -Dm644 $_pkgbase-$pkgver/COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_gtk-update-icon-cache() { + pkgdesc="GTK+ icon cache updater" + depends=(gdk-pixbuf2 librsvg-legacy hicolor-icon-theme) + + cd $_pkgbase-$pkgver + + install -D ../gtk-update-icon-cache "$pkgdir/usr/bin/gtk-update-icon-cache" + install -Dm644 ../gtk-update-icon-cache.hook "$pkgdir/usr/share/libalpm/hooks/gtk-update-icon-cache.hook" + install -D ../gtk-update-icon-cache.script "$pkgdir/usr/share/libalpm/scripts/gtk-update-icon-cache" + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/gtk/gtk-query-immodules-3.0.hook b/gtk/gtk-query-immodules-3.0.hook new file mode 100644 index 0000000..c7703cf --- /dev/null +++ b/gtk/gtk-query-immodules-3.0.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/gtk-3.0/3.0.0/immodules/*.so + +[Action] +Description = Probing GTK3 input method modules... +When = PostTransaction +Exec = /usr/bin/gtk-query-immodules-3.0 --update-cache diff --git a/gtk/gtk-update-icon-cache.hook b/gtk/gtk-update-icon-cache.hook new file mode 100644 index 0000000..fca3fdc --- /dev/null +++ b/gtk/gtk-update-icon-cache.hook @@ -0,0 +1,13 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/icons/*/ +Target = !usr/share/icons/*/?* + +[Action] +Description = Updating icon theme caches... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/gtk-update-icon-cache +NeedsTargets diff --git a/gtk/gtk-update-icon-cache.script b/gtk/gtk-update-icon-cache.script new file mode 100644 index 0000000..ee0f1d1 --- /dev/null +++ b/gtk/gtk-update-icon-cache.script @@ -0,0 +1,10 @@ +#!/bin/bash + +while read -r f; do + if [[ -e ${f}index.theme ]]; then + gtk-update-icon-cache -q "$f" + elif [[ -d $f ]]; then + rm -f "${f}icon-theme.cache" + rmdir --ignore-fail-on-non-empty "$f" + fi +done diff --git a/gtk/gtk.install b/gtk/gtk.install new file mode 100644 index 0000000..c0c4453 --- /dev/null +++ b/gtk/gtk.install @@ -0,0 +1,3 @@ +pre_remove() { + rm -f /usr/lib/gtk-3.0/3.0.0/immodules.cache +} diff --git a/gtk/optionalize-at-spi2-atk-dependency.patch b/gtk/optionalize-at-spi2-atk-dependency.patch new file mode 100644 index 0000000..790d5de --- /dev/null +++ b/gtk/optionalize-at-spi2-atk-dependency.patch @@ -0,0 +1,130 @@ +diff --git a/config.h.in b/config.h.in +index d78b226..ac46f89 100644 +--- a/config.h.in ++++ b/config.h.in +@@ -10,6 +10,9 @@ + /* Disable deprecation warnings from glib */ + #undef GLIB_DISABLE_DEPRECATION_WARNINGS + ++/* Define to use atk-bridge-2.0 */ ++#undef HAVE_ATK_BRIDGE ++ + /* Define to 1 if you have the `bind_textdomain_codeset' function. */ + #undef HAVE_BIND_TEXTDOMAIN_CODESET + +diff --git a/config.h.meson b/config.h.meson +index 2af5547..fa08c23 100644 +--- a/config.h.meson ++++ b/config.h.meson +@@ -11,6 +11,9 @@ + /* Disable deprecation warnings from glib */ + #mesondefine GLIB_DISABLE_DEPRECATION_WARNINGS + ++/* Define to use atk-bridge-2.0 */ ++#mesondefine HAVE_ATK_BRIDGE ++ + /* Define to 1 if you have the `bind_textdomain_codeset' function. */ + #mesondefine HAVE_BIND_TEXTDOMAIN_CODESET + +diff --git a/configure b/configure +index 34d3410..92289a3 100755 +--- a/configure ++++ b/configure +@@ -1064,6 +1064,7 @@ enable_glibtest + enable_modules + with_included_immodules + with_x ++with_atk_bridge + enable_win32_gles + enable_cups + enable_papi +@@ -1844,6 +1845,7 @@ Optional Packages: + --with-included-immodules=MODULE1,MODULE2,... + build the specified input methods into gtk + --with-x use the X Window System ++ --without-atk-bridge Do not use AT-SPI ATK bridge + --with-html-dir=PATH path to installed docs + --with-xml-catalog=CATALOG + path to xml catalog to use +@@ -27048,8 +27050,20 @@ fi + # Check for Accessibility Toolkit flags + ######################################## + +-if test x$enable_x11_backend = xyes; then ++ ++# Check whether --with-atk-bridge was given. ++if test "${with_atk_bridge+set}" = set; then : ++ withval=$with_atk_bridge; : ++else ++ with_atk_bridge=$enable_x11_backend ++fi ++ ++ ++if test x$with_atk_bridge != xno; then + ATK_PACKAGES="atk atk-bridge-2.0" ++ ++$as_echo "#define HAVE_ATK_BRIDGE 1" >>confdefs.h ++ + else + ATK_PACKAGES="atk" + fi +diff --git a/gtk/a11y/gtkaccessibility.c b/gtk/a11y/gtkaccessibility.c +index 7f0e520..f2ef2eb 100644 +--- a/gtk/a11y/gtkaccessibility.c ++++ b/gtk/a11y/gtkaccessibility.c +@@ -37,7 +37,7 @@ + #include + #include + +-#ifdef GDK_WINDOWING_X11 ++#ifdef HAVE_ATK_BRIDGE + #include + #endif + +@@ -988,7 +988,7 @@ _gtk_accessibility_init (void) + _gtk_accessibility_override_atk_util (); + do_window_event_initialization (); + +-#ifdef GDK_WINDOWING_X11 ++#ifdef HAVE_ATK_BRIDGE + atk_bridge_adaptor_init (NULL, NULL); + #endif + +diff --git a/meson.build b/meson.build +index b2eaa33..ec4bd00 100644 +--- a/meson.build ++++ b/meson.build +@@ -576,7 +576,7 @@ if x11_enabled + xfixes_dep = dependency('xfixes', required: false) + xcomposite_dep = dependency('xcomposite', required: false) + fontconfig_dep = dependency('fontconfig', fallback: ['fontconfig', 'fontconfig_dep']) +- atkbridge_dep = dependency('atk-bridge-2.0', version: at_spi2_atk_req) ++ atkbridge_dep = dependency('atk-bridge-2.0', version: at_spi2_atk_req, required: get_option('atk-bridge')) + + x11_pkgs = ['fontconfig', 'x11', 'xext', 'xi', 'xrandr'] + +@@ -593,7 +593,10 @@ if x11_enabled + x11_pkgs += ['xdamage'] + endif + +- atk_pkgs += ['atk-bridge-2.0'] ++ if atkbridge_dep.found() ++ atk_pkgs += ['atk-bridge-2.0'] ++ cdata.set('HAVE_ATK_BRIDGE', 1) ++ endif + + cdata.set('HAVE_XDAMAGE', xdamage_dep.found() ? 1 : false) + cdata.set('HAVE_XCURSOR', xcursor_dep.found() ? 1 : false) +diff --git a/meson_options.txt b/meson_options.txt +index 4f605b4..a0f5b88 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -11,6 +11,8 @@ option('quartz_backend', type: 'boolean', value: true, + description : 'Enable the macOS gdk backend (only when building on macOS)') + + # Optional dependencies ++option('atk-bridge', type: 'boolean', value: 'true', ++ description : 'Enable AT-SPI ATK bridge support') + option('xinerama', type: 'combo', choices : ['yes', 'no', 'auto'], value : 'auto', + description : 'Enable support for the Xinerama extension') + option('cloudproviders', type: 'boolean', value: false, diff --git a/gtk/settings.ini b/gtk/settings.ini new file mode 100644 index 0000000..7f9bac7 --- /dev/null +++ b/gtk/settings.ini @@ -0,0 +1,5 @@ +[Settings] +gtk-icon-theme-name = Arc +gtk-theme-name = Raleigh +gtk-font-name = Cantarell 11 +gtk-cursor-theme-name = Premium diff --git a/gtk2-engine-murrine/PKGBUILD b/gtk2-engine-murrine/PKGBUILD new file mode 100644 index 0000000..bae5ce2 --- /dev/null +++ b/gtk2-engine-murrine/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=gtk2-engine-murrine +_pkgname=${pkgname: -7} +pkgver=0.98.2 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="GTK2 engine to make your desktop look like a 'murrina', an italian word meaning the art glass works done by Venicians glass blowers" +arch=('i686' 'x86_64') +url='https://www.gnome-look.org/p/1080239/' +license=('LGPL-2.1') +depends=('gtk2') +makedepends=('intltool' 'gettext-tiny' 'quilt') +provides=('gtk-engine-murrine') +conflicts=('gtk-engine-murrine') +source=("https://ftp.gnome.org/pub/GNOME/sources/${_pkgname}/${pkgver::-2}/${_pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gtk2-engines-murrine/gtk2-engines-murrine_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5ed6b499b957c33d301c7ac508937517e8f9753fabb84e0cf977f67b10b09968cee5a10bdeae64a05f64606b5769e7313ededbb3b0c3ae9f78e34f893aa96667' + '021cd306f539e7d8c74556d8f7351c6e15678b0e7a68263017b96fb793564cafa488ee326880910cf6a89199cb2815d2d65f8e1b2a2a9561874e764da9f8b6a7') + +prepare() { + mv {${_pkgname},${pkgname}}-${pkgver} && cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i 's#libmurrine_la_LIBADD =.*\$(pixman_LIBS)#& -lm#' Makefile.am +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --enable-animation \ + --enable-animationrtl + sed -i 's#\\$CC -shared#& -Wl,-O1,--as-needed#' libtool + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR=${pkgdir} install + install -Dm644 COPYING.2.1 -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/gtk2-engines/PKGBUILD b/gtk2-engines/PKGBUILD new file mode 100644 index 0000000..e61e201 --- /dev/null +++ b/gtk2-engines/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +_pkgbase=gtk-engines +pkgname=gtk2-engines +pkgver=2.20.2 +pkgrel=2 +pkgdesc="Theme engines (GTK2 version)" +arch=('i686' 'x86_64') +url='https://live.gnome.org/GnomeArt' +license=('LGPL-2.1') +depends=('gtk2') +makedepends=('pkg-config' 'intltool' 'gettext-tiny' 'gnome-common') +source=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/g/gtk2-engines/${pkgname}_${pkgver}.orig.tar.bz2") +sha512sums=('049ae20d47a28b60fe5b0484e3c11bc6cd62d6167478f1d83df3066d618827ca9204767ab1b7a9ca02f542c3fc7929efc1bb85f65d66aaf5d5b15718b6de19e9') + +build() { + cd ${_pkgbase}-${pkgver} + ./configure \ + --prefix=/usr \ + --enable-animation + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd ${_pkgbase}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/gtk2/CVE-2024-6655.patch b/gtk2/CVE-2024-6655.patch new file mode 100644 index 0000000..ac09c21 --- /dev/null +++ b/gtk2/CVE-2024-6655.patch @@ -0,0 +1,18 @@ +--- a/gtk/gtkmodules.c 2020-12-18 06:29:40.000000000 +0100 ++++ b/gtk/gtkmodules.c 2024-08-14 01:30:28.209803357 +0200 +@@ -229,13 +229,8 @@ + gchar *module_name; + + module_name = _gtk_find_module (name, "modules"); +- if (!module_name) +- { +- /* As last resort, try loading without an absolute path (using system +- * library path) +- */ +- module_name = g_module_build_path (NULL, name); +- } ++ if (module_name == NULL) ++ return NULL; + + module = g_module_open (module_name, G_MODULE_BIND_LOCAL | G_MODULE_BIND_LAZY); + diff --git a/gtk2/PKGBUILD b/gtk2/PKGBUILD new file mode 100644 index 0000000..96a87b2 --- /dev/null +++ b/gtk2/PKGBUILD @@ -0,0 +1,81 @@ +# Maintainer: Jesus E. + +pkgname=gtk2 +pkgver=2.24.33 +_debver=$pkgver +_debrel=2 +pkgrel=4 +pkgdesc="GObject-based multi-platform GUI toolkit (legacy version)" +arch=(i686 x86_64) +url="https://www.gtk.org/" +depends=(atk pango libxcursor libxinerama libxrandr libxi libxcomposite libxdamage + shared-mime-info cairo libcups gtk-update-icon-cache librsvg-legacy + desktop-file-utils arc-icon-theme xcursor-premium) +makedepends=(gobject-introspection quilt) +optdepends=('gnome-themes-extra: Default widget theme' + 'tauthon: gtk-builder-convert') +license=(LGPL-2) +install=gtk2.install +source=("https://download.gnome.org/sources/gtk+/${pkgver:0:4}/gtk+-$pkgver.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gtk+2.0/gtk+2.0_$_debver-$_debrel.debian.tar.xz" + gtkrc + gtk-query-immodules-2.0.hook + xid-collision-debug.patch + remove-gtk-doc-support.patch + CVE-2024-6655.patch) +sha512sums=('71b588797c81f727dfac8dcb1be193f7436f717d30ecf18eae2d3aeb0f445b3be4743400acac16435490db8f564f01032065d3f42d27871317f80c98aef929d5' + '2ddd60764df23d2f53f541835e7b6d11ee4d23ec4e8256ecbd217c19ad2b8e0eeacb2b35f4c56c71df3aba4f98412e90bc79e122dbb9c5d77f51ed017dc0bd23' + '398760cf027a337f04d623c91b870752b9a5b41c6038069e04a84fd30aae610e084fe675c60faba62092b96f8149a7606947f9413347eac7b75c0b54ebfb1e2a' + 'be7a807046f27e5796f6069dfd2c88f9b7508e3b9e209d97c1575e0d809b279aacacd0e1247f1f7643fa47eede2d987bf433cd17cea0524526ad31982ae8d90d' + '89e3223c86731a76b12d39245f1ec4cf8b4860ab1d11d74a10e5deb0db302f20b4bb5d9034da1d8aeb96369dbdeddcdd2f28943270dc501476c694562b960159' + '771355046c218726356d7b8823fba4a0f69620936f40d67f18b44378d4f099deb62c2236806176446cb8784327dc555d86518d8bf3eddc6c203d586b0ca165dd' + 'b8c8c27e5ef5d8f41527196ef122f37a9e398bc122f1c36c97bfcc09b816c8f4ddacc9d69b75e598d24a27fb8daf0934d6ca977bc889ba6829f9bcc0580f4fe6') + +prepare() { + cd gtk+-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + patch -Np1 -i $srcdir/xid-collision-debug.patch + patch -Np1 -i $srcdir/remove-gtk-doc-support.patch + patch -Np1 -i $srcdir/CVE-2024-6655.patch + sed -i '1s/python$/tauthon/' gtk/gtk-builder-convert + autoreconf -fvi +} + +build() { + cd gtk+-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-xinput=yes \ + --enable-man + + # https://bugzilla.gnome.org/show_bug.cgi?id=655517 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + + make +} + +package() { + cd gtk+-$pkgver + make DESTDIR="$pkgdir" install + + install -Dm644 ../gtkrc "$pkgdir/usr/share/gtk-2.0/gtkrc" + install -Dm644 ../gtk-query-immodules-2.0.hook "$pkgdir/usr/share/libalpm/hooks/gtk-query-immodules-2.0.hook" + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + rm "$pkgdir/usr/bin/gtk-update-icon-cache" +} diff --git a/gtk2/gtk-query-immodules-2.0.hook b/gtk2/gtk-query-immodules-2.0.hook new file mode 100644 index 0000000..40a0aa7 --- /dev/null +++ b/gtk2/gtk-query-immodules-2.0.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/gtk-2.0/2.10.0/immodules/*.so + +[Action] +Description = Probing GTK2 input method modules... +When = PostTransaction +Exec = /usr/bin/gtk-query-immodules-2.0 --update-cache diff --git a/gtk2/gtk2.install b/gtk2/gtk2.install new file mode 100644 index 0000000..1fb1715 --- /dev/null +++ b/gtk2/gtk2.install @@ -0,0 +1,3 @@ +pre_remove() { + rm -f /usr/lib/gtk-2.0/2.10.0/immodules.cache +} diff --git a/gtk2/gtkrc b/gtk2/gtkrc new file mode 100644 index 0000000..3f34bc6 --- /dev/null +++ b/gtk2/gtkrc @@ -0,0 +1,5 @@ +gtk-icon-theme-name = "Arc" +gtk-theme-name = "Raleigh" +gtk-font-name = "Cantarell 11" +gtk-cursor-theme-name = "Premium" + diff --git a/gtk2/remove-gtk-doc-support.patch b/gtk2/remove-gtk-doc-support.patch new file mode 100644 index 0000000..63f7c5e --- /dev/null +++ b/gtk2/remove-gtk-doc-support.patch @@ -0,0 +1,201 @@ +diff --git a/Makefile.am b/Makefile.am +index 8e3a2f1..35e94d2 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2,7 +2,7 @@ + include $(top_srcdir)/Makefile.decl + + SRC_SUBDIRS = gdk gtk modules demos tests perf +-SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros build ++SUBDIRS = po po-properties $(SRC_SUBDIRS) m4macros build + + # require automake 1.4 + AUTOMAKE_OPTIONS = 1.7 +@@ -136,7 +136,6 @@ MAINTAINERCLEANFILES = \ + $(srcdir)/mkinstalldirs \ + $(srcdir)/omf.make \ + $(srcdir)/xmldocs.make \ +- $(srcdir)/gtk-doc.make \ + $(srcdir)/ChangeLog \ + `find "$(srcdir)" -type f -name Makefile.in -print` + +diff --git a/Makefile.in b/Makefile.in +index 38b269b..e38194f 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -566,7 +566,7 @@ XVFB_START = \ + && DISPLAY=:$$XID && export DISPLAY + + SRC_SUBDIRS = gdk gtk modules demos tests perf +-SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros build ++SUBDIRS = po po-properties $(SRC_SUBDIRS) m4macros build + + # require automake 1.4 + AUTOMAKE_OPTIONS = 1.7 +@@ -588,7 +588,6 @@ MAINTAINERCLEANFILES = \ + $(srcdir)/mkinstalldirs \ + $(srcdir)/omf.make \ + $(srcdir)/xmldocs.make \ +- $(srcdir)/gtk-doc.make \ + $(srcdir)/ChangeLog \ + `find "$(srcdir)" -type f -name Makefile.in -print` + +diff --git a/aclocal.m4 b/aclocal.m4 +index db4c519..3cc030a 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -723,120 +723,6 @@ sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD + fi]) + + +-# -*- mode: autoconf -*- +-# +-# gtk-doc.m4 - configure macro to check for gtk-doc +-# Copyright (C) 2003 James Henstridge +-# 2007-2017 Stefan Sauer +-# +-# This program is free software: you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation, either version 3 of the License, or +-# (at your option) any later version. +-# +-# This program is distributed in the hope that it will be useful, +-# but WITHOUT ANY WARRANTY; without even the implied warranty of +-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-# GNU General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program. If not, see . +-# +-# As a special exception, the above copyright owner gives unlimited +-# permission to copy, distribute and modify the configure scripts that +-# are the output of Autoconf when processing the Macro. You need not +-# follow the terms of the GNU General Public License when using or +-# distributing such scripts, even though portions of the text of the +-# Macro appear in them. The GNU General Public License (GPL) does govern +-# all other use of the material that constitutes the Autoconf Macro. +- +-# serial 2 +- +-dnl Usage: +-dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) +-AC_DEFUN([GTK_DOC_CHECK], +-[ +- AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +- AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first +- AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first +- +- ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"]) +- AC_MSG_CHECKING([for gtk-doc]) +- PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no]) +- AC_MSG_RESULT($have_gtk_doc) +- +- if test "$have_gtk_doc" = "no"; then +- AC_MSG_WARN([ +- You will not be able to create source packages with 'make dist' +- because $gtk_doc_requires is not found.]) +- fi +- +- dnl check for tools we added during development +- dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that +- dnl may not be writable by the user. Currently, automake requires that the +- dnl test name must end in '.test'. +- dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638 +- AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test]) +- AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check]) +- AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) +- AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) +- +- dnl for overriding the documentation installation directory +- AC_ARG_WITH([html-dir], +- AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, +- [with_html_dir='${datadir}/gtk-doc/html']) +- HTML_DIR="$with_html_dir" +- AC_SUBST([HTML_DIR]) +- +- dnl enable/disable documentation building +- AC_ARG_ENABLE([gtk-doc], +- AS_HELP_STRING([--enable-gtk-doc], +- [use gtk-doc to build documentation [[default=no]]]),, +- [enable_gtk_doc=no]) +- +- AC_MSG_CHECKING([whether to build gtk-doc documentation]) +- AC_MSG_RESULT($enable_gtk_doc) +- +- if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then +- AC_MSG_ERROR([ +- You must have $gtk_doc_requires installed to build documentation for +- $PACKAGE_NAME. Please install gtk-doc or disable building the +- documentation by adding '--disable-gtk-doc' to '[$]0'.]) +- fi +- +- dnl don't check for glib if we build glib +- if test "x$PACKAGE_NAME" != "xglib"; then +- dnl don't fail if someone does not have glib +- PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:]) +- fi +- +- dnl enable/disable output formats +- AC_ARG_ENABLE([gtk-doc-html], +- AS_HELP_STRING([--enable-gtk-doc-html], +- [build documentation in html format [[default=yes]]]),, +- [enable_gtk_doc_html=yes]) +- AC_ARG_ENABLE([gtk-doc-pdf], +- AS_HELP_STRING([--enable-gtk-doc-pdf], +- [build documentation in pdf format [[default=no]]]),, +- [enable_gtk_doc_pdf=no]) +- +- if test -z "$GTKDOC_MKPDF"; then +- enable_gtk_doc_pdf=no +- fi +- +- if test -z "$AM_DEFAULT_VERBOSITY"; then +- AM_DEFAULT_VERBOSITY=1 +- fi +- AC_SUBST([AM_DEFAULT_VERBOSITY]) +- +- AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes]) +- AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) +- AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) +- AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) +- AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) +- AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) +-]) +- + # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- + # + # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +diff --git a/configure.ac b/configure.ac +index 2446551..6c6c59e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1591,12 +1591,6 @@ fi + + GOBJECT_INTROSPECTION_CHECK([0.9.3]) + +-################################################## +-# Checks for gtk-doc and docbook-tools +-################################################## +- +-GTK_DOC_CHECK([1.11]) +- + AC_CHECK_PROG(DB2HTML, db2html, true, false) + AM_CONDITIONAL(HAVE_DOCBOOK, $DB2HTML) + +@@ -1734,16 +1728,6 @@ demos/Makefile + demos/gtk-demo/Makefile + demos/gtk-demo/geninclude.pl + tests/Makefile +-docs/Makefile +-docs/reference/Makefile +-docs/reference/gdk/Makefile +-docs/reference/gdk/version.xml +-docs/reference/gtk/Makefile +-docs/reference/gtk/version.xml +-docs/reference/libgail-util/Makefile +-docs/faq/Makefile +-docs/tools/Makefile +-docs/tutorial/Makefile + build/Makefile + build/win32/Makefile + build/win32/vs9/Makefile diff --git a/gtk2/xid-collision-debug.patch b/gtk2/xid-collision-debug.patch new file mode 100644 index 0000000..d61238c --- /dev/null +++ b/gtk2/xid-collision-debug.patch @@ -0,0 +1,15 @@ +--- gtk+-2.18.3/gdk/x11/gdkxid.c 2009-06-19 04:59:18.000000000 +0200 ++++ gtk+-2.18.3/gdk/x11/gdkxid.c.new 2009-07-22 11:30:12.000000000 +0200 +@@ -56,10 +56,10 @@ + if (!display_x11->xid_ht) + display_x11->xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash, + (GEqualFunc) gdk_xid_equal); +- ++/* + if (g_hash_table_lookup (display_x11->xid_ht, xid)) + g_warning ("XID collision, trouble ahead"); +- ++*/ + g_hash_table_insert (display_x11->xid_ht, xid, data); + } + diff --git a/gtk2mm/PKGBUILD b/gtk2mm/PKGBUILD new file mode 100644 index 0000000..5effaf1 --- /dev/null +++ b/gtk2mm/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=gtk2mm +_realpkgname=gtkmm +pkgver=2.24.5 +pkgrel=2 +pkgdesc="C++ bindings for GTK+ 2" +url='https://www.gtkmm.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('gtk2' 'pangomm' 'atkmm') +source=("https://ftp.gnome.org/pub/GNOME/sources/$_realpkgname/2.24/$_realpkgname-$pkgver.tar.xz") +sha512sums=('c50e52830977c37181439f4b82a30ac8bead0cf9022d2bec8225f8dc33e08414f863bf67056e1938fae8f888c09a5a6d757acc011fa9331a78caa6bb626dd51e') + +build() { + cd $_realpkgname-$pkgver + + # glibmm 2.46 uses C++11 features + CXXFLAGS+=' -std=c++11' + + ./configure \ + --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $_realpkgname-$pkgver + sed -i -e 's/^doc_subdirs/#doc_subdirs/' Makefile + make DESTDIR="$pkgdir" install + make -C docs DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/gtkam/PKGBUILD b/gtkam/PKGBUILD new file mode 100644 index 0000000..951a8a2 --- /dev/null +++ b/gtkam/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=gtkam +pkgver=1.0 +pkgrel=1 +pkgdesc="Digital camera access graphical client" +url='https://gphoto.sourceforge.net/proj/gtkam' +arch=('i686' 'x86_64') +depends=('libgphoto2' 'libexif-gtk' 'gdk-pixbuf2') +makedepends=('gimp' 'intltool') +license=('GPL-2') +source=("https://downloads.sourceforge.net/project/gphoto/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('5fe9b6a8578e5348de87ea6e3767fa200e4b71028159091cb7382cc96d625fb255c59c111e0886ce74b7921eaaf7013de6b238a47bf658584538ef48126278fc') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --without-bonobo \ + --without-gnome \ + --disable-scrollkeeper + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/gtkglext/PKGBUILD b/gtkglext/PKGBUILD new file mode 100644 index 0000000..56cfca3 --- /dev/null +++ b/gtkglext/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=gtkglext +pkgver=1.2.0 +_debver=$pkgver +_debrel=9 +pkgrel=2 +pkgdesc="OpenGL extensions for GTK+ 2.x" +arch=('i686' 'x86_64') +url="http://gtkglext.sourceforge.net/" +license=('LGPL-2.1') +depends=('gtk2' 'glu' 'libxmu' 'pangox-compat') +makedepends=('python' 'quilt') +source=("https://downloads.sourceforge.net/sourceforge/gtkglext/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/g/gtkglext/gtkglext_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('c5452b7594195da3c1428dc3021a041d70bb8079a514b7310fe7b66f638748ad2399adead36047b52b60b033757581e72f0532c0301e033019bf909f7365071d' + 'c29590301faad97af7451b2916d9220ac685798d269866e9da055f8da986bd19077ca6e5dc9d1975caf46510a56708b0adfba9699d47abe0bf99ee4fdcfa8112') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vi +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr \ + --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/share/gtk-doc + install -Dm644 COPYING.LIB -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/gtklp/PKGBUILD b/gtklp/PKGBUILD new file mode 100644 index 0000000..564276a --- /dev/null +++ b/gtklp/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=gtklp +pkgver=1.3.4 +pkgrel=1 +pkgdesc="A graphical, GTK+ based frontend for CUPS" +arch=('i686' 'x86_64') +url='https://gtklp.sirtobi.com/' +license=('GPL-2') +depends=('cups' 'gtk2') +makedepends=('gettext-tiny') +source=("${pkgname}-${pkgver}.src.tar.gz::https://sourceforge.net/projects/gtklp/files/gtklp/${pkgver}/gtklp-${pkgver}.src.tar.gz/download") +sha512sums=('1aff481214b01f9d5dbacf5e23ec19a8424c4d0ae4e6489de06cdb708fc5fbc9bcff9ac8cb70c87983572023397534c0f3be3cbf732c352757efcc0d43f1165e') + +prepare() { + cd "${pkgname}-${pkgver}" + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/gtkmathview/PKGBUILD b/gtkmathview/PKGBUILD new file mode 100644 index 0000000..8c04c2f --- /dev/null +++ b/gtkmathview/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=gtkmathview +pkgver=0.8.0 +_debver=$pkgver +_debrel=15 +pkgrel=2 +pkgdesc="C++ rendering engine for MathML documents" +arch=('i686' 'x86_64') +url='http://helm.cs.unibo.it/mml-widget/' +license=('LGPL-3') +depends=('popt' 'libxml2' 'glib2') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/g/gtkmathview/gtkmathview_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gtkmathview/gtkmathview_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('59e7452905c857b9e251a9bb9ed6a0e3cf61e807769b0933cfa8f669e436c01f2e6d73a34ea7bcd74f3b2ca7cf25eee768bee1b6bd2d6d5fcd89194885fef796' + 'f74aeb8f88465fe02adbf5fc02543ac5085c30d70793c4ae707aaf61d1de9a01918e8129519d86491492494ff8541ef7f687f6a2db1d17cf5e104c82f2e51f6c') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # AM_BINRELOC missing, just ignore + echo 'AC_DEFUN([AM_BINRELOC], [])' > acinclude.m4 + autoreconf -if +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --disable-static \ + --disable-gtk \ + --disable-gmetadom + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}/" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gtkmm/PKGBUILD b/gtkmm/PKGBUILD new file mode 100644 index 0000000..9dc18fb --- /dev/null +++ b/gtkmm/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=gtkmm +pkgver=3.24.2 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="C++ bindings for GTK" +url='https://www.gtkmm.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1' 'GPL-2') +depends=('gtk' 'pangomm' 'atkmm') +makedepends=('mm-common' 'glibmm' 'cairomm' 'pangomm' 'quilt') +source=("https://ftp.gnome.org/pub/GNOME/sources/${pkgname}/${pkgver:0:4}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/${pkgname}3.0/${pkgname}3.0_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('c8f9f03d54006a729fdad7563d3be37aa180f9153c222314c1b8cfddc5ab417d184422a1d44f780574248ea52e679f1e360eac67e03f67d29ecf847c0ab19689' + 'b415145cf7c7e40cbd3ee74b9df89208e300c6f95c91f9e05998beb84b8b509682e144dcd35fe3449f6942e116a3258081b1cb303d01beeb0b5b783d72032f38') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-maintainer-mode + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + sed -i -e 's/^doc_subdirs/#doc_subdirs/' Makefile + make DESTDIR="$pkgdir" install + make -C docs DESTDIR="$pkgdir" install + install -Dm644 COPYING COPYING.tools -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gtksourceview2/PKGBUILD b/gtksourceview2/PKGBUILD new file mode 100644 index 0000000..87e3ae5 --- /dev/null +++ b/gtksourceview2/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=gtksourceview2 +pkgver=2.10.5 +pkgrel=1 +pkgdesc="A text widget that extends the standard GTK+ 2.x" +arch=('i686' 'x86_64') +url="https://download.gnome.org/sources/gtksourceview" +license=('GPL-2') +depends=('gtk2' 'libxml2') +makedepends=('intltool' 'gettext-tiny' 'python') +source=("https://download.gnome.org/sources/gtksourceview/2.10/gtksourceview-$pkgver.tar.gz") +sha512sums=('cd8d233a8c0c5bff825a1eeb60e322928256086ca6ed99b872d9f2ca2c2513b11a75ad794189522526e27853517c9f780d410acb661827b166e92054ddd3908f') + +build() { + cd "gtksourceview-$pkgver/" + ./configure --prefix=/usr + make +} + +package() { + cd "gtksourceview-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/gtksourceview3/PKGBUILD b/gtksourceview3/PKGBUILD new file mode 100644 index 0000000..693a35d --- /dev/null +++ b/gtksourceview3/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=gtksourceview3 +_pkgbasename=gtksourceview +pkgver=3.24.11 +pkgrel=2 +pkgdesc='A text widget adding syntax highlighting and more' +url='https://wiki.gnome.org/Projects/GtkSourceView' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('gtk' 'libxml2') +makedepends=('intltool' 'gobject-introspection' 'vala' 'autoconf-archive' 'yelp-tools' 'mesa-libgl') +source=("https://deb.debian.org/debian/pool/main/g/gtksourceview3/gtksourceview3_${pkgver}.orig.tar.xz") +sha512sums=('3490b34c6432a2e2ef292ad5bf982fdd22d33b1472434549b4ea8ddae0fc8808e128ef947e4d0dcb41e8de5e601b202f52532bbbbfa11d35050acfc42f9936b2') + +build() { + cd $_pkgbasename-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc \ + --localstatedir=/var --disable-static \ + --disable-glade-catalog --disable-gtk-doc --disable-Werror + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $_pkgbasename-$pkgver + + make DESTDIR="$pkgdir" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gtksourceviewmm/PKGBUILD b/gtksourceviewmm/PKGBUILD new file mode 100644 index 0000000..35e0df1 --- /dev/null +++ b/gtksourceviewmm/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=gtksourceviewmm +pkgver=3.18.0 +pkgrel=2 +pkgdesc="C++ bindings for the gtksourceview library" +arch=('i686' 'x86_64') +url='https://gitlab.gnome.org/GNOME/gtksourceviewmm' +license=('LGPL-2.1') +depends=('gtkmm' 'gtksourceview3') +source=("https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz") +sha512sums=('143de4a650f2a6090efeba359e78d1f4982519a9e7a2be838f9888732c57dcc42db8b6ab45bd23ccd261d8f17bc743846a3bb572566f233cee9b4238c017c64c') + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install doc_subdirs= + make -C docs DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + diff --git a/gtkspell2/PKGBUILD b/gtkspell2/PKGBUILD new file mode 100644 index 0000000..48b4113 --- /dev/null +++ b/gtkspell2/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. +# Contributer (Arch): Ben + +pkgname=gtkspell2 +_realpkgname=gtkspell +pkgver=2.0.16 +pkgrel=1 +pkgdesc="Provides word-processor-style highlighting and replacement of misspelled words in a GtkTextView widget" +url='http://gtkspell.sourceforge.net/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('gtk2' 'enchant') +makedepends=('intltool' 'gettext-tiny') +source=("https://downloads.sourceforge.net/sourceforge/gtkspell/${_realpkgname}-${pkgver}.tar.gz" + "remove-gtkdoc.patch") +sha512sums=('7d3afb327c2e15608194e6ee6110107a0ce082e483788d831d636b2e579472304137373c09a966d8e5c0cd2f830bf2e0ee477c9b5fca7da6ee27fd1498915b9d' + 'af7daf44ee0c751ed4fd3fa830bb02f8d8caae4efa079854389f6fc8a1fb8d01091fd7417fc0bc0c62180bf2f592d943949ca2ec18d5deef13cac80f8c2b8406') + +prepare() { + cd "$_realpkgname-$pkgver" + patch -Np1 -i ${srcdir}/remove-gtkdoc.patch + rm gtk-doc.make + rm -rf ./docs + autoreconf -fvi +} + +build() { + cd "$_realpkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $_realpkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/gtkspell2/remove-gtkdoc.patch b/gtkspell2/remove-gtkdoc.patch new file mode 100644 index 0000000..f4b52c2 --- /dev/null +++ b/gtkspell2/remove-gtkdoc.patch @@ -0,0 +1,78 @@ +--- a/configure.ac 2009-10-23 04:52:31.000000000 +0200 ++++ b/configure.ac 2023-05-18 01:37:16.213390282 +0200 +@@ -31,44 +31,6 @@ + # [AC_DEFINE(FIXED_PANGO, 1, [Define to 1 if pango >= 1.8.0.])], + # [AC_MSG_WARN([Enabling word-breaking workarounds since pango < 1.8.0])]) + +-# gtk-doc check: +-# gtk-doc check: +-# from http://cvs.gnome.org/lxr/source/gtk-doc/examples/configure.in +-AC_ARG_WITH(html-dir, AC_HELP_STRING([--with-html-dir=PATH],[path to installed docs])) +- +-if test "x$with_html_dir" = "x" ; then +- HTML_DIR='${datadir}/gtk-doc/html' +-else +- HTML_DIR=$with_html_dir +-fi +- +-AC_SUBST(HTML_DIR) +- +-gtk_doc_min_version=1.0 +-AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version]) +-if pkg-config --atleast-version=$gtk_doc_min_version gtk-doc; then +- AC_MSG_RESULT(yes) +- GTKDOC=true +-else +- AC_MSG_RESULT(no) +- GTKDOC=false +-fi +- +-dnl Let people disable the gtk-doc stuff. +-AC_ARG_ENABLE(gtk-doc, AC_HELP_STRING([--enable-gtk-doc],[Use gtk-doc to build documentation [[default=auto]]]), enable_gtk_doc="$enableval", enable_gtk_doc=auto) +- +-if test x$enable_gtk_doc = xauto ; then +- if test x$GTKDOC = xtrue ; then +- enable_gtk_doc=yes +- else +- enable_gtk_doc=no +- fi +-fi +- +-AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes) +- +-# end gtk-doc check. +- + AC_PROG_CC + AC_PROG_LIBTOOL + +@@ -90,9 +52,7 @@ + + dnl AM_MAINTAINER_MODE + +-AC_CONFIG_FILES(Makefile gtkspell/Makefile examples/Makefile gtkspell-2.0.pc gtkspell.spec docs/Makefile po/Makefile.in) +- +-GTK_DOC_CHECK(1.0) ++AC_CONFIG_FILES(Makefile gtkspell/Makefile examples/Makefile gtkspell-2.0.pc gtkspell.spec po/Makefile.in) + + AC_OUTPUT + +--- a/Makefile.am 2009-10-08 00:24:30.000000000 +0200 ++++ b/Makefile.am 2023-05-18 01:55:22.922555140 +0200 +@@ -1,4 +1,4 @@ +-SUBDIRS=gtkspell examples docs po ++SUBDIRS=gtkspell examples po + + pkgconfigdir=$(libdir)/pkgconfig + pkgconfig_DATA=gtkspell-2.0.pc + +--- a/Makefile.in 2009-10-23 04:57:14.000000000 +0200 ++++ b/Makefile.in 2023-05-18 01:45:26.493361866 +0200 +@@ -224,7 +224,7 @@ + top_build_prefix = @top_build_prefix@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ +-SUBDIRS = gtkspell examples docs po ++SUBDIRS = gtkspell examples po + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = gtkspell-2.0.pc + DISTCLEANFILES = gtkspell-2.0.pc diff --git a/gtkspell3/PKGBUILD b/gtkspell3/PKGBUILD new file mode 100644 index 0000000..948b58d --- /dev/null +++ b/gtkspell3/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=gtkspell3 +pkgver=3.0.9 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Provides word-processor-style highlighting and replacement of misspelled words in a GtkTextView widget" +arch=('i686' 'x86_64') +url='http://gtkspell.sourceforge.net/' +license=('GPL-2') +depends=('gtk' 'enchant') +makedepends=('intltool' 'gobject-introspection' 'vala' 'tauthon' 'mesa-libgl' 'quilt') +source=("https://downloads.sourceforge.net/gtkspell/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/g/gtkspell3/gtkspell3_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('de6cc24ca092067a101996142bf2b3cfb6a5af2170ea4b0185a997e5c88adead7ba53c5a297c3110b3a66dc87d37e429720f972895bb2931f9a033fc006e2eab' + 'c6dad95ff2a2e06ecf9188064913fc6ebb71205511a0ead60c7491db3704dd73c61f5eed7a2537903709140bf1f7a41c4abb7146242ade23fd66ac85dd4953be') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -fi +} + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # remove gtk-doc + rm -rf "$pkgdir/usr/share/gtk-doc" + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/gtkspellmm/PKGBUILD b/gtkspellmm/PKGBUILD new file mode 100644 index 0000000..19f3701 --- /dev/null +++ b/gtkspellmm/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=gtkspellmm +pkgver=3.0.5 +pkgrel=2 +pkgdesc="C++ binding for gtkspell" +arch=('i686' 'x86_64') +url='http://gtkspell.sourceforge.net/' +license=('GPL-2') +depends=('gtkmm' 'gtkspell3') +source=("https://downloads.sourceforge.net/gtkspell/$pkgname-$pkgver.tar.xz") +sha512sums=('23e67e8519dce80a55bafeb9f63b5e4f78fbf2960d13435f89a9718d424f960188d8ade835e0ba74fec8eeca1d5b00350e2bc1a10165969e26656f14d8a9b133') + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install doc_subdirs= + make -C doc DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/gts/PKGBUILD b/gts/PKGBUILD new file mode 100644 index 0000000..1ea96cb --- /dev/null +++ b/gts/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=gts +pkgver=0.7.6+darcs121130 +_snap=gts-snapshot-121130 +_debver=0.7.6+darcs121130 +_debrel=4 +pkgrel=2 +pkgdesc='Provides useful functions to deal with 3D surfaces meshed with interconnected triangles' +url='http://gts.sourceforge.net/' +license=('LGPL-2') +arch=('i686' 'x86_64') +depends=('glib2' 'netpbm') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/g/gts/gts_$pkgver.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gts/gts_$_debver-$_debrel.debian.tar.bz2") +sha512sums=('84c38dc345830eea75755d9d55235b6d76786a84c3b9c3b7e057437bf395a9f2687596bbf037afd601b9f31a485d425a371ca5e60680265f10cb414400db4142' + 'f7e0f52955b8e0a58a38c84d09ae5a737dc492d6792c5bc1356b98e314b0447a12226ab6ee312c7ec6fd28a0433929b0e02288856bcc8a33c3bcfcb7827e58f7') + +prepare() { + cd "${srcdir}/${_snap}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches debian + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${_snap}" + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${_snap}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/gtypist/PKGBUILD b/gtypist/PKGBUILD new file mode 100644 index 0000000..397ae41 --- /dev/null +++ b/gtypist/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=gtypist +pkgver=2.9.5 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Free, libre and simple ncurses touch typing tutor" +arch=('i686' 'x86_64') +url='http://www.gnu.org/software/gtypist/gtypist.html' +license=('GPL-3') +depends=('ncurses' 'perl') +makedepends=('quilt') +source=("https://ftp.gnu.org/gnu/gtypist/${pkgname}-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gtypist/gtypist_${_debver}-${_debrel}.debian.tar.xz" + "fix-ncurses.patch") +sha512sums=('ea8db72e83a41340a4435e2802134a852fb61eb00f10267733455491fc9ce3356f61887146de21ec589a77ea1169ad5b75a0eba1708566b7327f4801bd6dcb52' + 'ae995eb314deffdac7f175ee7c13001be31a1e2f2eb93ad3368c11212755c8eb87bc5c6e9c6d91a4360370173fe5b814a4147cf5b1a13fd1f98ba41e2f128306' + '0c2dcebb2a45dc23ec795bf9bbd4841bbaa69662dc6897a6f73989548e4a626e261780a593b5f938df9b3b1451edcf96daac8b693274675ca27e3d18bf18764e') + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + patch -p1 <"$srcdir"/fix-ncurses.patch + autoreconf +} + +build() { + cd "$srcdir"/$pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + make prefix="$pkgdir"/usr install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gtypist/fix-ncurses.patch b/gtypist/fix-ncurses.patch new file mode 100644 index 0000000..a1c1445 --- /dev/null +++ b/gtypist/fix-ncurses.patch @@ -0,0 +1,90 @@ +diff -wbBur gtypist-2.9.4/configure.ac gtypist-2.9.4.my/configure.ac +--- gtypist-2.9.4/configure.ac 2014-02-02 15:38:40.000000000 +0400 ++++ gtypist-2.9.4.my/configure.ac 2014-02-03 13:08:53.085983684 +0400 +@@ -44,20 +44,20 @@ + AC_FUNC_STRTOD + AC_CHECK_FUNCS([__argz_count __argz_next __argz_stringify dcgettext getcwd getwd mempcpy memset munmap nl_langinfo setlocale stpcpy strcasecmp strchr strcspn strdup strstr strtoul]) + +-# check for libncursesw ++# check for libncurses + +-AC_CHECK_HEADER(ncursesw/ncurses.h, HAVE_NCURSESW_H=1) +-AC_CHECK_LIB(ncursesw, add_wch, HAVE_LIBNCURSESW=1) ++AC_CHECK_HEADER(ncurses.h, HAVE_NCURSESW_H=1) ++AC_CHECK_LIB(ncurses, add_wch, HAVE_LIBNCURSESW=1) + if test -n "$HAVE_NCURSESW_H" -a -n "$HAVE_LIBNCURSESW"; then +- LIBS="-lncursesw $LIBS" ++ LIBS="-lncurses $LIBS" + else +- echo -e "Error: both library and header files for the ncursesw library\n"\ ++ echo -e "Error: both library and header files for the ncurses library\n"\ + "are required to build this package. See INSTALL file for"\ + "further information. On Debian/Ubuntu you need to install libncursesw5-dev." + exit 1; + fi + AC_SEARCH_LIBS(cbreak, tinfo, [], +- [AC_MSG_ERROR([Can't find cbreak() in -lncursesw or -ltinfo])]) ++ [AC_MSG_ERROR([Can't find cbreak() in -lncurses or -ltinfo])]) + + + # iconv +diff -wbBur gtypist-2.9.4/src/cursmenu.c gtypist-2.9.4.my/src/cursmenu.c +--- gtypist-2.9.4/src/cursmenu.c 2013-08-18 18:36:14.000000000 +0400 ++++ gtypist-2.9.4.my/src/cursmenu.c 2014-02-03 13:09:04.669316878 +0400 +@@ -24,7 +24,7 @@ + #ifdef HAVE_PDCURSES + #include + #else +-#include ++#include + #endif + + #include "error.h" +diff -wbBur gtypist-2.9.4/src/error.c gtypist-2.9.4.my/src/error.c +--- gtypist-2.9.4/src/error.c 2013-08-18 18:36:14.000000000 +0400 ++++ gtypist-2.9.4.my/src/error.c 2014-02-03 13:09:04.669316878 +0400 +@@ -25,7 +25,7 @@ + #ifdef HAVE_PDCURSES + #include + #else +-#include ++#include + #endif + + #include +diff -wbBur gtypist-2.9.4/src/gtypist.c gtypist-2.9.4.my/src/gtypist.c +--- gtypist-2.9.4/src/gtypist.c 2013-08-18 18:36:14.000000000 +0400 ++++ gtypist-2.9.4.my/src/gtypist.c 2014-02-03 13:09:04.669316878 +0400 +@@ -31,7 +31,7 @@ + #ifdef HAVE_PDCURSES + #include + #else +-#include ++#include + #endif + + #include +diff -wbBur gtypist-2.9.4/src/script.c gtypist-2.9.4.my/src/script.c +--- gtypist-2.9.4/src/script.c 2013-08-18 18:36:14.000000000 +0400 ++++ gtypist-2.9.4.my/src/script.c 2014-02-03 13:09:04.669316878 +0400 +@@ -24,7 +24,7 @@ + #ifdef HAVE_PDCURSES + #include + #else +-#include ++#include + #endif + + #include "error.h" +diff -wbBur gtypist-2.9.4/src/utf8.c gtypist-2.9.4.my/src/utf8.c +--- gtypist-2.9.4/src/utf8.c 2013-08-18 18:36:14.000000000 +0400 ++++ gtypist-2.9.4.my/src/utf8.c 2014-02-03 13:09:04.669316878 +0400 +@@ -23,7 +23,7 @@ + #ifdef HAVE_PDCURSES + #include + #else +-#include ++#include + #endif + + #include diff --git a/guile/PKGBUILD b/guile/PKGBUILD new file mode 100644 index 0000000..d45a4a8 --- /dev/null +++ b/guile/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=guile +pkgver=2.2.7 +_debver=$pkgver +_debrel=9 +pkgrel=2 +pkgdesc="Portable, embeddable Scheme implementation written in C" +url='https://www.gnu.org/software/guile/' +arch=('i686' 'x86_64') +license=('GPL-3' 'LGPL-3') +depends=('gmp' 'libtool' 'ncurses' 'texinfo' 'libunistring' 'gc' 'libffi') +makedepends=('quilt') +source=("https://ftp.gnu.org/pub/gnu/$pkgname/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/guile-2.2/guile-2.2_${_debver}+1-${_debrel}.debian.tar.xz") +sha512sums=('ad11885ffeb7655ef6c8543e67233992dc37bdcf91ed82188e6a144169c6b7d4e31cf7a6d01509c573d00904cb002719b851f71cdf1359a86de401daf613d773' + '9f28fe3a380205e5a176523b0206278a35ae39d6a9bb3ef7ed8d4cc0463d82ed3b184d2ef0720a45aad08b1dfc42326a35c34b63af094374223c0209e225bf2e') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0007-Mark-test-out-of-memory-as-an-expected-failure-for-n.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-static \ + --disable-error-on-warning + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + rm "$pkgdir"/usr/lib/libguile-2.?.so.*-gdb.scm + for i in COPYING{,.LESSER}; do + install -Dm644 $i $pkgdir/usr/share/licenses/$pkgname/$i + done +} diff --git a/gumbo-parser/PKGBUILD b/gumbo-parser/PKGBUILD new file mode 100644 index 0000000..076a21e --- /dev/null +++ b/gumbo-parser/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=gumbo-parser +pkgver=0.10.1 +_debver=0.10.1+dfsg +_debrel=2.4 +pkgrel=1 +pkgdesc='HTML5 parsing library in pure C99' +arch=('i686' 'x86_64') +url='https://github.com/google/gumbo-parser' +license=('Apache-2.0') +depends=('glibc') +makedepends=('quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/google/gumbo-parser/archive/v0.10.1.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gumbo-parser/gumbo-parser_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('bb1fb55cd07076ab6a9f38dc14db50397dbdca9a04ace4895dfba8b8cbc09038a96e26070c09c75fa929ada2e815affe233c1e2ecd8afe2aba6201647cf277d1' + 'c9c117603bef4862fab9481cd20c5f6ac2da1512341e3ed0bd6b4518b6fe03b9136269f9e349c8d140fd8392b9e9dd2536f2f98746807960e1487562fd79a446') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/00-tests.patch || true + + quilt push -av + fi + + ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gunicorn/PKGBUILD b/gunicorn/PKGBUILD new file mode 100644 index 0000000..6783bbe --- /dev/null +++ b/gunicorn/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=gunicorn +pkgver=20.1.0 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc="WSGI HTTP Server for UNIX" +arch=('any') +url='https://gunicorn.org/' +license=('Expat' 'GPL-3' 'Modified-BSD') +depends=('python-setuptools') +makedepends=('quilt') +optdepends=('python-eventlet: for asynchronous request handling with eventlet' + 'python-gevent: for asynchronous request handling with gevent') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/benoitc/${pkgname}/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/$pkgname/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('4fd905f62adc30e044cf2a56a1a77e14bc633258267d6bfbd4f6a68494f93f377e9fb9ed94fab7f11f9d7813857a680974a88c4b6bf97d4f1b74792a81810111' + 'a2702b84961e7fec4f63de0488b06cdab807f6c8a0ef6de6b74d2c8530a091a4e60f02d0e6d9c6f6845679ab7c16987ccae40b58cd4b2c4ee253df1b57ff5e63') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -e 's/==/>=/' -e 's/,<.*$//' -i requirements_test.txt +} + +build() { + cd $pkgname-$pkgver + python setup.py build +} + +package() { + cd $pkgname-$pkgver + python setup.py install --root="$pkgdir" --prefix=/usr --optimize=1 + install -Dm 644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/gutenprint/PKGBUILD b/gutenprint/PKGBUILD new file mode 100644 index 0000000..548a9fa --- /dev/null +++ b/gutenprint/PKGBUILD @@ -0,0 +1,91 @@ +# Maintainer: Jesus E. + +pkgbase=gutenprint +pkgname=('gutenprint' 'foomatic-db-gutenprint-ppds') +pkgver=5.3.3 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="Top quality printer drivers for POSIX systems" +arch=(i686 x86_64) +license=('GPL-2') +url='https://gimp-print.sourceforge.io/' +makedepends=('gimp' 'gtk2' 'cups' 'ghostscript' 'quilt' + 'dialog' 'doxygen' 'texi2html') +source=("https://downloads.sourceforge.net/gimp-print/$pkgname-$pkgver.tar.xz" + "https://deb.debian.org/debian/pool/main/g/$pkgname/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +options=('!emptydirs') +sha512sums=('d2c47eb4ccc3c46ccb2f1042682edf7443f5c57439ead72f49ecd10537cf967251bacf7ca7da29fb8dceecc7eebd55ed021f2594ff9fb6509bab543fab1dc8d6' + '3cdaea8e27e4b0d83a64f79072ecd1acac111e66f4fb8acd64e9a7805d95c41776eb2dabb1755bbca9272cd42e17403c3cdc535e0899fa337578093e5fc87dba') + +prepare(){ + cd "${pkgbase}"-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${pkgbase}"-${pkgver} + ./configure --prefix=/usr \ + --disable-rpath \ + --enable-samples \ + --disable-static \ + --disable-static-genppd \ + --enable-cups-ppds \ + --enable-simplified-cups-ppds=only \ + --enable-translated-cups-ppds \ + --enable-globalized-cups-ppds #--help + + # globalized ppds -> put all translations into one ppd file + # enable translated cups ppds grows size 9,5MB -> 156MB + # simplified cups ppds (yes, no, only) - only offer basic paper sizes, not all options + # 4,3MB (only), 17MB (both) -> translated 41MB simpl., 165MB, 231MB both + + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package_gutenprint() { + pkgdesc="Top quality printer drivers for POSIX systems" + install=gutenprint.install + depends=('cups' 'cups-filters') + optdepends=('gimp: adds gutenprint plugin to gimp' + 'libusb: required for drivers that depend on gutenprint52usb backend' + 'foomatic-db-gutenprint-ppds: prebuilt ppd files' + 'perl: to run cups-genppdupdate') + replaces=('gimp-print') + options=('!emptydirs') + + cd "${pkgname}"-${pkgver} + make DESTDIR="${pkgdir}" install + + # split out files + mkdir "$srcdir"/tmp_foomatic-db-gutenprint-ppds + + mv "${pkgdir}"/usr/share/cups/model "$srcdir"/tmp_foomatic-db-gutenprint-ppds/ + + # cleanup + rm -rf "${pkgdir}"/usr/share/foomatic + rm -rf "${pkgdir}"/etc + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} + +package_foomatic-db-gutenprint-ppds() { + pkgdesc="simplified prebuilt ppd files" + optdepends=('cups: to use cups printer spooler(recommended)') + + cd "${pkgbase}"-${pkgver} + mkdir -p "${pkgdir}"/usr/share/cups + mv "$srcdir"/tmp_foomatic-db-gutenprint-ppds/* "${pkgdir}"/usr/share/cups/ + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/gutenprint/gutenprint.install b/gutenprint/gutenprint.install new file mode 100644 index 0000000..05e8bec --- /dev/null +++ b/gutenprint/gutenprint.install @@ -0,0 +1,9 @@ +post_install() { + echo ">>please run /usr/sbin/cups-genppdupdate" + echo ">>and restart cups deamon" +} + +post_upgrade() { + post_install +} + diff --git a/gv/PKGBUILD b/gv/PKGBUILD new file mode 100644 index 0000000..5e27b0f --- /dev/null +++ b/gv/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=gv +pkgver=3.7.4 +pkgrel=1 +pkgdesc="A program to view PostScript and PDF documents" +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/gv/' +license=('GPL-3') +depends=('libxaw3d' 'ghostscript') +optdepends=('perl: gv-update-userconfig') +options=('emptydirs') +source=("https://ftp.gnu.org/gnu/gv/${pkgname}-${pkgver}.tar.gz"{,.sig} + "gv.desktop") +sha512sums=('f6dc072b6b72b6c543733501c719aa38c81a2e2fc63fbf1459b8a3a50a1a70eca9fc9def2fbeb51cb7bb81cfc3b20f136732d935740693bf541d7135975df648' + 'SKIP' + 'bf197605d39790c8e96f052655378c7ff193a4ee6350df5fd88a18b62c4805088be3978caccc09992897efe6a657e2f81d8a81752a55f22e82e667ab77f0c020') +validpgpkeys=('5A15E3DBE8D7DE6F2AC69EB5B1AF90204976D4CD') # Markus Steinborn + +prepare() { + cd "${pkgname}-${pkgver}" + sed -i -e "s:-dGraphicsAlphaBits=2:\0 -dAlignToPixels=0:" src/Makefile.{am,in} +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/gv.desktop" -t "${pkgdir}/usr/share/applications" + install -Dm644 src/gv_icon.xbm "${pkgdir}/usr/share/pixmaps/gv.xbm" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gv/gv.desktop b/gv/gv.desktop new file mode 100644 index 0000000..7f5ba4e --- /dev/null +++ b/gv/gv.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=GV +MimeType=application/pdf;application/postscript;image/x-eps;application/illustrator +GenericName=Postscript Viewer +Exec=gv %f +Icon=gv.xbm +Categories=Application;Graphics;Viewer;Office; +Type=Application +Terminal=false +StartupNotify=true diff --git a/gwenhywfar/PKGBUILD b/gwenhywfar/PKGBUILD new file mode 100644 index 0000000..0109db4 --- /dev/null +++ b/gwenhywfar/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=gwenhywfar +pkgver=5.10.1 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="OS abstraction functions for various projects" +arch=('i686' 'x86_64') +url="https://www.aquamaniac.de/" +license=('custom:LGPL-2.1+OpenSSL-Linking-Exception') +depends=('gnutls' 'libgcrypt' 'libressl') +makedepends=('gtk' 'qt-base' 'quilt') +optdepends=('gtk: for the GTK+ UI' + 'qt-base: for the Qt UI') +source=("https://www.aquamaniac.de/rdm/attachments/download/465/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libg/libgwenhywfar/libgwenhywfar_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('11781bec2dd1c4156b609574283179278b8070d604a792aeddf92c8f9b873b3ac09273a8558b9adba567af8d016ea10914d2a149f4b6813798b5800e34e29aa5' + 'd61bef5a6e7d75b760a9ab3da913537628811dc56d12c277a28647558ccc79ba323f9d92c8897ff5d3e9a701aa314fb68580529dd9fdd6be05538ba3bfac87de') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-system-certs \ + --with-guis="gtk3 qt5" + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/gxkb/PKGBUILD b/gxkb/PKGBUILD new file mode 100644 index 0000000..cf1d3ff --- /dev/null +++ b/gxkb/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=gxkb +pkgver=0.9.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="X11 keyboard indicator and switcher" +arch=('i686' 'x86_64') +url='https://zen-tools.github.io/gxkb' +license=('GPL-2') +depends=('libxklavier' 'libwnck3' 'gtk') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/zen-tools/${pkgname}/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/g/gxkb/gxkb_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('42861aac96cbedb0dc2392932d26a40ce5024e63c1b130bf0629d5593ffb57735ddc77fd1814fc2ab1a4e6838142c9d6b34fac038e87d1c4dcc3cf80dada6eca' + '6b1b923a4f871f52feea1cc37ce11424ff98e5452b4a97061147a68269cd88562332aa7169a4a2c201e6a071ac3fbc9b99bc886a008721fbb3a77440f50daafa') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 doc/COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/gyp/PKGBUILD b/gyp/PKGBUILD new file mode 100644 index 0000000..df4e8ce --- /dev/null +++ b/gyp/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=gyp +pkgver=0.1+20200513gitcaa6002 +pkgrel=4 +pkgdesc='"Generate Your Projects" Meta-Build system' +arch=('any') +url='https://gyp.gsrc.io/' +license=('Modified-BSD') +depends=('python-setuptools' 'ninja') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/g/gyp/gyp_${pkgver}.orig.tar.gz" + "gyp-fix-cmake.patch" + "gyp-python38.patch") +sha512sums=('c6aa49a8df998df3b72e49b1154fc764b5affb1dbedd2b581dd554a7bfbd01c454e9c8ca0536253533e788bb63b2b390bac625d4e4352d9fcb67630acfc564f5' + '289eb0f280912f971fed3e76ddf7b6ea784b43eb71c510619a0129d4155c85b915ffdfecb60bc36166684bc6a7a38da8f9d83252b70d3dbb508e57043fb2f5a8' + '60f39b9f8f30599f1894eb143869a1cfa03b2ebfa3e163912543f6c457bc6aa544fa03c897b8db5457aecc453e5c997cf2d615ab7320ab56581564f57d8c130e') + +prepare() { + cd $pkgname-$pkgver + + # Python 3 fixes + patch -Np1 -i ${srcdir}/gyp-fix-cmake.patch + patch -Np1 -i ${srcdir}/gyp-python38.patch +} + +build() { + cd $pkgname-$pkgver + python setup.py build +} + +package() { + cd $pkgname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 LICENSE +} diff --git a/gyp/gyp-fix-cmake.patch b/gyp/gyp-fix-cmake.patch new file mode 100644 index 0000000..be18546 --- /dev/null +++ b/gyp/gyp-fix-cmake.patch @@ -0,0 +1,33 @@ +--- a/pylib/gyp/generator/cmake.py ++++ b/pylib/gyp/generator/cmake.py +@@ -40,9 +40,9 @@ + + try: + # maketrans moved to str in python3. ++ _maketrans = str.maketrans ++except AttributeError: + _maketrans = string.maketrans +-except NameError: +- _maketrans = str.maketrans + + generator_default_variables = { + 'EXECUTABLE_PREFIX': '', +@@ -281,7 +281,7 @@ + dirs = set(dir for dir in (os.path.dirname(o) for o in outputs) if dir) + + if int(action.get('process_outputs_as_sources', False)): +- extra_sources.extend(zip(cmake_outputs, outputs)) ++ extra_sources.extend(list(zip(cmake_outputs, outputs))) + + # add_custom_command + output.write('add_custom_command(OUTPUT ') +@@ -987,7 +987,7 @@ + + # XCode settings + xcode_settings = config.get('xcode_settings', {}) +- for xcode_setting, xcode_value in xcode_settings.viewitems(): ++ for xcode_setting, xcode_value in xcode_settings.items(): + SetTargetProperty(output, cmake_target_name, + "XCODE_ATTRIBUTE_%s" % xcode_setting, xcode_value, + '' if isinstance(xcode_value, str) else ' ') + diff --git a/gyp/gyp-python38.patch b/gyp/gyp-python38.patch new file mode 100644 index 0000000..e1dc703 --- /dev/null +++ b/gyp/gyp-python38.patch @@ -0,0 +1,63 @@ +commit 7b0a3fd85beb67c990da3fb1b690444a27a6ee42 +Author: Tom Hughes +Date: Fri Aug 23 09:33:14 2019 +0100 + + Fix python 3.8 warnings + +diff --git a/pylib/gyp/input.py b/pylib/gyp/input.py +index 42c279cf..013231dc 100644 +--- a/pylib/gyp/input.py ++++ b/pylib/gyp/input.py +@@ -1181,7 +1181,7 @@ def LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key): + if variable_name in variables: + # If the variable is already set, don't set it. + continue +- if the_dict_key is 'variables' and variable_name in the_dict: ++ if the_dict_key == 'variables' and variable_name in the_dict: + # If the variable is set without a % in the_dict, and the_dict is a + # variables dict (making |variables| a varaibles sub-dict of a + # variables dict), use the_dict's definition. +diff --git a/test/lib/TestCmd.py b/test/lib/TestCmd.py +index 1ec50933..457694c8 100644 +--- a/test/lib/TestCmd.py ++++ b/test/lib/TestCmd.py +@@ -283,7 +283,7 @@ if os.name in ('posix', 'nt'): + else: + tempfile.template = 'testcmd.' + +-re_space = re.compile('\s') ++re_space = re.compile(r'\s') + + _Cleanup = [] + +@@ -882,7 +882,7 @@ class TestCmd(object): + #self.diff_function = difflib.unified_diff + self._dirlist = [] + self._preserve = {'pass_test': 0, 'fail_test': 0, 'no_result': 0} +- if 'PRESERVE' in os.environ and os.environ['PRESERVE'] is not '': ++ if 'PRESERVE' in os.environ and os.environ['PRESERVE'] != '': + self._preserve['pass_test'] = os.environ['PRESERVE'] + self._preserve['fail_test'] = os.environ['PRESERVE'] + self._preserve['no_result'] = os.environ['PRESERVE'] +@@ -1103,7 +1103,7 @@ class TestCmd(object): + the temporary working directories to be preserved for all + conditions. + """ +- if conditions is (): ++ if len(conditions) == 0: + conditions = ('pass_test', 'fail_test', 'no_result') + for cond in conditions: + self._preserve[cond] = 1 +diff --git a/test/lib/TestGyp.py b/test/lib/TestGyp.py +index cba2d3cc..43865ee1 100644 +--- a/test/lib/TestGyp.py ++++ b/test/lib/TestGyp.py +@@ -742,7 +742,7 @@ def FindVisualStudioInstallation(): + build_tool = None + if not build_tool: + args1 = ['reg', 'query', +- 'HKLM\Software\Microsoft\VisualStudio\SxS\VS7', ++ r'HKLM\Software\Microsoft\VisualStudio\SxS\VS7', + '/v', '15.0', '/reg:32'] + build_tool = subprocess.check_output(args1).decode( + 'utf-8', 'ignore').strip().split(b'\r\n').pop().split(b' ').pop() diff --git a/handbrake-legacy/PKGBUILD b/handbrake-legacy/PKGBUILD new file mode 100644 index 0000000..58578da --- /dev/null +++ b/handbrake-legacy/PKGBUILD @@ -0,0 +1,100 @@ +# Maintainer: Jesus E. + +pkgname=('handbrake-legacy' 'handbrake-cli-legacy') +pkgver=1.3.1 +_debver=$pkgver +_debrel=2 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://handbrake.fr/' +license=('GPL-2' 'CC0-1.0' 'CC-BY-SA-4.0' 'Modified-BSD') +_commondeps=('libxml2' 'libass' 'libvorbis' 'opus' 'speex' 'libtheora' 'lame' + 'x264' 'jansson' 'numactl' 'libogg' 'libdvdcss' 'bzip2' 'gcc-libs' 'zlib' 'xz') +_guideps=('gst-plugins-base' 'gtk' 'librsvg-legacy' 'gst-plugins-good' 'gst-libav') +makedepends=('intltool' 'gettext-tiny' 'python' 'nasm' 'wget' 'cmake' 'meson' + "${_commondeps[@]}" "${_guideps[@]}") +source=("https://repo.hyperbola.info:50000/sources/handbrake/HandBrake-${pkgver}-source.tar.bz2"{,.sig} + "copyright::https://metadata.ftp-master.debian.org/changelogs//main/h/handbrake/handbrake_${_debver}+ds1-${_debrel}_copyright" + "https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2" + "https://download.videolan.org/pub/videolan/libdvdread/6.0.2/libdvdread-6.0.2.tar.bz2" + "https://download.videolan.org/pub/videolan/libdvdnav/6.0.1/libdvdnav-6.0.1.tar.bz2" + "https://download.videolan.org/pub/videolan/libbluray/1.1.2/libbluray-1.1.2.tar.bz2" + "https://download.videolan.org/pub/videolan/x265/x265_3.2.1.tar.gz" + "fix-close-button-in-about-dialog.patch" + "fix-build-contrib.patch" + "remove-dav1d-support.patch" + "remove-libvpx-support.patch" + "remove-nonfree-presets.patch") +noextract=("ffmpeg-4.2.2.tar.bz2" + "libdvdread-6.0.2.tar.bz2" + "libdvdnav-6.0.1.tar.bz2" + "libbluray-1.1.2.tar.bz2" + "x265_3.2.1.tar.gz") +sha512sums=('b713c70155feff765fb21e201e1c1599c970bf56581584281d883e57046409731cb663c11ee8ea2c141ba75852746be81d6db813f2d481b72429e53c89d584d2' + 'SKIP' + 'a4cf70466c6e48f9987f228d8b4e0be1efed406c4dabcd68389180a1b142098708012c2e4cbfb0fe1effabd65237dc2f28c37601bff81499b417063d552d9a29' + '6920bf2efb6ed665ea84c31ff3b28a0e9dc0ba3e0c8dfe4ceee4d8b8172328334490a28dbac93b0f9839d0c90ea588cb79141d88bdd3bf4bbf43fd22deb6a5e6' + 'e8831a67bbf1a144e9298b59e5462889c8b0197592a3c169523b5d84d9b9c1aaa719ccde2aa98c490e04f2a94c3fa7244b286e8faed674ae8c70400a0ece9c6c' + '83a015821dacea702eb34abb7a940b9a263918a66fe711fe9a817754f25c2aa0afae3543b4d93673d1c93d3e7914e1b776c10ce50465516f4e3a3d419c15ad9f' + '5a82af6c1840a1dcb31d06d90203c68e2c4f0bbadc9212eb0bb2776d42b0ab3793a769ebe07b3051be151e8b15876874d5a0658292f72b7126dd915a1ada3fe7' + '5cb29b9d4475c1f686f6e31e47ccddde3db1639d5dcf9c058513389a9fdeb35a83b14e30e59498a76dec74bb0b410b6d8f5b1b45d18927be9811bb6a40d8d568' + '20382440f9affa266365a9c597f82ba519d4fd26d9c1bc3806e851e17b29cef23dd17886fd5abbaefbf67adf5c2d6a081ce398aba3cb0c49350a7ecb5fd924e3' + '23996451c89f81b697e3774a2455e0ce258afda74711254d74b5ed269951c7e643bd7f0b6cfcd0e74a43647a93b132db08bf9f4cd6beff12bb2262fc666b01a8' + 'cc3caf089a90406290955857f8dd004d47d3264f7330f6e85df7f33ec39afa882c45470daa4632cff62c485ef5d2bf79e8be800c8fbc9636cb938203b1fd2302' + 'a62f76505f2ed74d0785944245bed4628f72adb2ee25a688ac3a52e78569983d289131c2d23a67a920e61afdcac9e12b4d2cf1e1f2ba9bc0748a72aa3508d9a0' + '64209434867d228ed471721ebba21c2f78cb6ae552cce5c932ea7034fbe66e19b7494532c3236cf325976ead5386df168ef89c461edfa13e50f1494a03da9d10') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "$srcdir/HandBrake-$pkgver" + patch -Np1 -i ${srcdir}/fix-close-button-in-about-dialog.patch + patch -Np1 -i ${srcdir}/fix-build-contrib.patch + patch -Np1 -i ${srcdir}/remove-dav1d-support.patch + patch -Np1 -i ${srcdir}/remove-libvpx-support.patch + patch -Np1 -i ${srcdir}/remove-nonfree-presets.patch + + # copy downloaded files, being patched within build-process + mkdir -p "$srcdir/HandBrake-$pkgver/download" + cp "$srcdir/ffmpeg-4.2.2.tar.bz2" "$srcdir/HandBrake-$pkgver/download" + cp "$srcdir/libdvdread-6.0.2.tar.bz2" "$srcdir/HandBrake-$pkgver/download" + cp "$srcdir/libdvdnav-6.0.1.tar.bz2" "$srcdir/HandBrake-$pkgver/download" + cp "$srcdir/libbluray-1.1.2.tar.bz2" "$srcdir/HandBrake-$pkgver/download" + cp "$srcdir/x265_3.2.1.tar.gz" "$srcdir/HandBrake-$pkgver/download" +} + +build() { + cd "$srcdir/HandBrake-$pkgver" + + ./configure \ + --prefix=/usr \ + --disable-vce \ + --disable-qsv \ + --disable-nvenc \ + --disable-update-checks + make -C build +} + +package_handbrake-legacy() { + pkgdesc="Multithreaded, free software video transcoder (GUI, legacy version)" + depends=('desktop-file-utils' 'hicolor-icon-theme' + "${_commondeps[@]}" "${_guideps[@]}") + + cd "$srcdir/HandBrake-$pkgver/build" + + make DESTDIR="$pkgdir" install + rm "$pkgdir/usr/bin/HandBrakeCLI" + + # license + install -Dm644 "$srcdir/copyright" "$srcdir/HandBrake-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_handbrake-cli-legacy() { + pkgdesc="Multithreaded, free software video transcoder (CLI, legacy version)" + depends=("${_commondeps[@]}") + + cd "$srcdir/HandBrake-$pkgver/build" + install -D HandBrakeCLI "$pkgdir/usr/bin/HandBrakeCLI" + + # license + install -Dm644 "$srcdir/copyright" "$srcdir/HandBrake-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/handbrake-legacy/fix-build-contrib.patch b/handbrake-legacy/fix-build-contrib.patch new file mode 100644 index 0000000..47c1b22 --- /dev/null +++ b/handbrake-legacy/fix-build-contrib.patch @@ -0,0 +1,36 @@ +--- a/contrib/x265_8bit/module.defs ++++ b/contrib/x265_8bit/module.defs +@@ -15,6 +15,9 @@ + X265_8.CONFIGURE.static = + X265_8.CONFIGURE.shared = -DENABLE_SHARED=OFF + X265_8.CONFIGURE.extra = -DENABLE_CLI=OFF -DHIGH_BIT_DEPTH=OFF -DEXTRA_LIB="x265_main10.a;x265_main12.a" -DEXTRA_LINK_FLAGS=-L. -DLINKED_10BIT=ON -DLINKED_12BIT=ON ++ifneq (x86_64,$(HOST.arch)) ++ X265_8.CONFIGURE.extra += -DENABLE_ASSEMBLY=FALSE ++endif + + ifneq (1,$(FEATURE.numa)) + X265_8.CONFIGURE.extra += -DENABLE_LIBNUMA=OFF +--- a/contrib/x265_10bit/module.defs ++++ b/contrib/x265_10bit/module.defs +@@ -18,6 +18,9 @@ + X265_10.CONFIGURE.static = + X265_10.CONFIGURE.shared = -DENABLE_SHARED=OFF + X265_10.CONFIGURE.extra = -DENABLE_CLI=OFF -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF ++ifneq (x86_64,$(HOST.arch)) ++ X265_10.CONFIGURE.extra += -DENABLE_ASSEMBLY=FALSE ++endif + + ifneq (1,$(FEATURE.numa)) + X265_10.CONFIGURE.extra += -DENABLE_LIBNUMA=OFF +--- a/contrib/x265_12bit/module.defs ++++ b/contrib/x265_12bit/module.defs +@@ -18,6 +18,9 @@ + X265_12.CONFIGURE.static = + X265_12.CONFIGURE.shared = -DENABLE_SHARED=OFF + X265_12.CONFIGURE.extra = -DENABLE_CLI=OFF -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DMAIN12=ON ++ifneq (x86_64,$(HOST.arch)) ++ X265_12.CONFIGURE.extra += -DENABLE_ASSEMBLY=FALSE ++endif + + ifneq (1,$(FEATURE.numa)) + X265_12.CONFIGURE.extra += -DENABLE_LIBNUMA=OFF diff --git a/handbrake-legacy/fix-close-button-in-about-dialog.patch b/handbrake-legacy/fix-close-button-in-about-dialog.patch new file mode 100644 index 0000000..8e3d775 --- /dev/null +++ b/handbrake-legacy/fix-close-button-in-about-dialog.patch @@ -0,0 +1,28 @@ +From d3eb4a11acec05314e45d4b78e6c0fb7c38a6fcd Mon Sep 17 00:00:00 2001 +From: Evangelos Foutras +Date: Wed, 17 Jun 2020 17:42:45 +0300 +Subject: [PATCH] LinGui: tweak About dialog so Close button works + +Clicking on "Close" emits a "response" signal which was ignored. Make +the button work by calling gtk_dialog_run(), as it's done for similar +dialogs in callbacks.c. + +Fixes https://github.com/HandBrake/HandBrake/issues/2405 +--- + gtk/src/callbacks.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c +index 322cf0af3f..5cab0cb493 100644 +--- a/gtk/src/callbacks.c ++++ b/gtk/src/callbacks.c +@@ -4542,7 +4542,8 @@ about_action_cb(GSimpleAction *action, GVariant *param, signal_user_data_t *ud) + HB_PROJECT_URL_WEBSITE); + gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(widget), + HB_PROJECT_URL_WEBSITE); +- gtk_widget_show (widget); ++ gtk_dialog_run(GTK_DIALOG(widget)); ++ gtk_widget_hide(widget); + } + + #define HB_DOCS "https://handbrake.fr/docs/" diff --git a/handbrake-legacy/remove-dav1d-support.patch b/handbrake-legacy/remove-dav1d-support.patch new file mode 100644 index 0000000..f35281d --- /dev/null +++ b/handbrake-legacy/remove-dav1d-support.patch @@ -0,0 +1,71 @@ +--- a/libhb/module.defs 2024-07-30 20:14:53.000000000 +0200 ++++ b/libhb/module.defs 2024-07-30 21:52:39.540108122 +0200 +@@ -1,7 +1,7 @@ + __deps__ := A52DEC BZIP2 LIBVPX FFMPEG FREETYPE LAME LIBASS LIBDCA \ + LIBDVDREAD LIBDVDNAV LIBICONV LIBSAMPLERATE LIBTHEORA LIBVORBIS LIBOGG \ + LIBXML2 X264 X265 ZLIB LIBBLURAY FDKAAC LIBMFX LIBGNURX JANSSON \ +- HARFBUZZ LIBOPUS LIBSPEEX LIBDAV1D ++ HARFBUZZ LIBOPUS LIBSPEEX + + ifeq (,$(filter $(HOST.system),darwin cygwin mingw)) + __deps__ += FONTCONFIG +@@ -103,7 +103,7 @@ + LIBHB.dll.libs = $(foreach n, \ + ass avformat avfilter avcodec avutil swresample postproc dvdnav dvdread \ + freetype mp3lame swscale vpx theora vorbis vorbisenc ogg \ +- x264 xml2 bluray jansson harfbuzz opus speex dav1d, \ ++ x264 xml2 bluray jansson harfbuzz opus speex, \ + $(CONTRIB.build/)lib/lib$(n).a ) + + ifeq (1,$(FEATURE.fdk_aac)) +--- a/contrib/ffmpeg/module.defs 2020-01-04 17:28:06.000000000 +0100 ++++ b/contrib/ffmpeg/module.defs 2024-07-30 21:55:02.580110745 +0200 +@@ -1,4 +1,4 @@ +-__deps__ := BZIP2 ZLIB FDKAAC LIBDAV1D LIBVPX LAME LIBOPUS LIBSPEEX XZ ++__deps__ := BZIP2 ZLIB FDKAAC LIBVPX LAME LIBOPUS LIBSPEEX XZ + ifeq (1,$(FEATURE.qsv)) + __deps__ += LIBMFX + endif +@@ -55,8 +55,8 @@ + --enable-encoder=libvpx_vp8 \ + --enable-encoder=libvpx_vp9 \ + --disable-decoder=*_crystalhd \ +- --enable-libdav1d \ +- --enable-decoder=libdav1d \ ++ --disable-libdav1d \ ++ --disable-decoder=libdav1d \ + --cc="$(FFMPEG.GCC.gcc)" \ + --extra-ldflags="$(call fn.ARGS,FFMPEG.GCC,*archs *sysroot *minver ?extra) -L$(call fn.ABSOLUTE,$(CONTRIB.build/)lib)" + +--- a/make/include/main.defs 2024-07-30 20:14:53.000000000 +0200 ++++ b/make/include/main.defs 2024-07-30 21:53:16.970108808 +0200 +@@ -39,7 +39,6 @@ + MODULES += contrib/fdk-aac + endif + +-MODULES += contrib/libdav1d + MODULES += contrib/ffmpeg + MODULES += contrib/libdvdread + MODULES += contrib/libdvdnav +--- a/gtk/configure.ac 2020-01-04 17:28:06.000000000 +0100 ++++ b/gtk/configure.ac 2024-07-30 22:18:07.900136156 +0200 +@@ -199,7 +199,7 @@ + + AM_CONDITIONAL([MINGW], [test "x$mingw_flag" = "xyes"]) + +-HB_LIBS="$HB_LIBS -lhandbrake -lavformat -lavfilter -lavcodec -lavutil -ldav1d -lswresample -lpostproc -ldvdnav -ldvdread -lmp3lame -lvorbis -lvorbisenc -logg -lswscale -ltheoraenc -ltheoradec -lvpx -lz -lbz2 -lbluray -lass -lfontconfig -lfreetype -lxml2 -ljansson -lopus -lspeex -llzma" ++HB_LIBS="$HB_LIBS -lhandbrake -lavformat -lavfilter -lavcodec -lavutil -lswresample -lpostproc -ldvdnav -ldvdread -lmp3lame -lvorbis -lvorbisenc -logg -lswscale -ltheoraenc -ltheoradec -lvpx -lz -lbz2 -lbluray -lass -lfontconfig -lfreetype -lxml2 -ljansson -lopus -lspeex -llzma" + HB_CPPFLAGS="$HB_CPPFLAGS $HBINC" + + PKG_CHECK_MODULES([x264], [x264], sys_x264=yes, sys_x264=no) +--- a/test/module.defs 2024-07-30 22:19:42.000000000 +0200 ++++ b/test/module.defs 2024-07-30 22:33:51.790153469 +0200 +@@ -17,7 +17,7 @@ + ass avformat avfilter avcodec avutil swresample postproc mp3lame dvdnav \ + dvdread fribidi \ + swscale vpx theoraenc theoradec vorbis vorbisenc ogg x264 \ +- bluray freetype xml2 bz2 z jansson harfbuzz opus speex lzma dav1d ++ bluray freetype xml2 bz2 z jansson harfbuzz opus speex lzma + + ifeq (,$(filter $(HOST.system),darwin cygwin mingw)) + TEST.GCC.l += fontconfig diff --git a/handbrake-legacy/remove-libvpx-support.patch b/handbrake-legacy/remove-libvpx-support.patch new file mode 100644 index 0000000..9b3dcd0 --- /dev/null +++ b/handbrake-legacy/remove-libvpx-support.patch @@ -0,0 +1,98 @@ +--- a/libhb/module.defs 2024-12-22 00:19:33.000000000 +0100 ++++ b/libhb/module.defs 2024-12-22 00:20:50.031138428 +0100 +@@ -1,4 +1,4 @@ +-__deps__ := A52DEC BZIP2 LIBVPX FFMPEG FREETYPE LAME LIBASS LIBDCA \ ++__deps__ := A52DEC BZIP2 FFMPEG FREETYPE LAME LIBASS LIBDCA \ + LIBDVDREAD LIBDVDNAV LIBICONV LIBSAMPLERATE LIBTHEORA LIBVORBIS LIBOGG \ + LIBXML2 X264 X265 ZLIB LIBBLURAY FDKAAC LIBMFX LIBGNURX JANSSON \ + HARFBUZZ LIBOPUS LIBSPEEX +@@ -102,7 +102,7 @@ + + LIBHB.dll.libs = $(foreach n, \ + ass avformat avfilter avcodec avutil swresample postproc dvdnav dvdread \ +- freetype mp3lame swscale vpx theora vorbis vorbisenc ogg \ ++ freetype mp3lame swscale theora vorbis vorbisenc ogg \ + x264 xml2 bluray jansson harfbuzz opus speex, \ + $(CONTRIB.build/)lib/lib$(n).a ) + +--- a/contrib/ffmpeg/module.defs 2025-02-04 00:32:38.000000000 +0100 ++++ b/contrib/ffmpeg/module.defs 2025-02-04 00:35:13.385822713 +0100 +@@ -1,4 +1,4 @@ +-__deps__ := BZIP2 ZLIB FDKAAC LIBVPX LAME LIBOPUS LIBSPEEX XZ ++__deps__ := BZIP2 ZLIB FDKAAC LAME LIBOPUS LIBSPEEX XZ + ifeq (1,$(FEATURE.qsv)) + __deps__ += LIBMFX + endif +@@ -50,10 +50,10 @@ + --enable-libspeex \ + --disable-encoder=libspeex \ + --enable-decoder=libspeex \ +- --enable-libvpx \ ++ --disable-libvpx \ + --disable-decoder=libvpx_* \ +- --enable-encoder=libvpx_vp8 \ +- --enable-encoder=libvpx_vp9 \ ++ --disable-encoder=libvpx_vp8 \ ++ --disable-encoder=libvpx_vp9 \ + --disable-decoder=*_crystalhd \ + --disable-libdav1d \ + --disable-decoder=libdav1d \ +--- a/make/include/main.defs 2024-12-22 00:19:33.000000000 +0100 ++++ b/make/include/main.defs 2024-12-22 00:21:54.642892563 +0100 +@@ -27,7 +27,6 @@ + MODULES += contrib/lame + MODULES += contrib/x264 + MODULES += contrib/jansson +- MODULES += contrib/libvpx + endif + + ifeq (1,$(FEATURE.flatpak)) +--- a/gtk/configure.ac 2024-12-22 00:19:33.000000000 +0100 ++++ b/gtk/configure.ac 2024-12-22 00:22:30.353862075 +0100 +@@ -199,7 +199,7 @@ + + AM_CONDITIONAL([MINGW], [test "x$mingw_flag" = "xyes"]) + +-HB_LIBS="$HB_LIBS -lhandbrake -lavformat -lavfilter -lavcodec -lavutil -lswresample -lpostproc -ldvdnav -ldvdread -lmp3lame -lvorbis -lvorbisenc -logg -lswscale -ltheoraenc -ltheoradec -lvpx -lz -lbz2 -lbluray -lass -lfontconfig -lfreetype -lxml2 -ljansson -lopus -lspeex -llzma" ++HB_LIBS="$HB_LIBS -lhandbrake -lavformat -lavfilter -lavcodec -lavutil -lswresample -lpostproc -ldvdnav -ldvdread -lmp3lame -lvorbis -lvorbisenc -logg -lswscale -ltheoraenc -ltheoradec -lz -lbz2 -lbluray -lass -lfontconfig -lfreetype -lxml2 -ljansson -lopus -lspeex -llzma" + HB_CPPFLAGS="$HB_CPPFLAGS $HBINC" + + PKG_CHECK_MODULES([x264], [x264], sys_x264=yes, sys_x264=no) +--- a/test/module.defs 2024-12-22 00:19:33.000000000 +0100 ++++ b/test/module.defs 2024-12-22 00:23:04.894799828 +0100 +@@ -16,7 +16,7 @@ + TEST.GCC.l = \ + ass avformat avfilter avcodec avutil swresample postproc mp3lame dvdnav \ + dvdread fribidi \ +- swscale vpx theoraenc theoradec vorbis vorbisenc ogg x264 \ ++ swscale theoraenc theoradec vorbis vorbisenc ogg x264 \ + bluray freetype xml2 bz2 z jansson harfbuzz opus speex lzma + + ifeq (,$(filter $(HOST.system),darwin cygwin mingw)) +--- a/libhb/common.c 2020-01-04 17:28:06.000000000 +0100 ++++ b/libhb/common.c 2025-01-22 22:44:45.069030048 +0100 +@@ -80,7 +80,6 @@ + HB_GID_ACODEC_OPUS, + HB_GID_MUX_MKV, + HB_GID_MUX_MP4, +- HB_GID_MUX_WEBM, + }; + + #define HB_VIDEO_CLOCK 27000000 // 27MHz clock +@@ -266,8 +265,6 @@ + { { "H.265 (VideoToolbox)","vt_h265", "H.265 (libavcodec)", HB_VCODEC_FFMPEG_VT_H265, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_H265, }, + { { "MPEG-4", "mpeg4", "MPEG-4 (libavcodec)", HB_VCODEC_FFMPEG_MPEG4, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG4, }, + { { "MPEG-2", "mpeg2", "MPEG-2 (libavcodec)", HB_VCODEC_FFMPEG_MPEG2, HB_MUX_MASK_MP4|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_MPEG2, }, +- { { "VP8", "VP8", "VP8 (libvpx)", HB_VCODEC_FFMPEG_VP8, HB_MUX_MASK_WEBM|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_VP8, }, +- { { "VP9", "VP9", "VP9 (libvpx)", HB_VCODEC_FFMPEG_VP9, HB_MUX_MASK_WEBM|HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_VP9, }, + { { "Theora", "theora", "Theora (libtheora)", HB_VCODEC_THEORA, HB_MUX_MASK_MKV, }, NULL, 1, HB_GID_VCODEC_THEORA, }, + }; + int hb_video_encoders_count = sizeof(hb_video_encoders) / sizeof(hb_video_encoders[0]); +@@ -452,7 +449,6 @@ + { { "MPEG-4 (mp4v2)", "mp4v2", "MPEG-4 (libmp4v2)", "mp4", HB_MUX_MP4V2, }, NULL, 1, HB_GID_MUX_MP4, }, + { { "Matroska (avformat)", "av_mkv", "Matroska (libavformat)", "mkv", HB_MUX_AV_MKV, }, NULL, 1, HB_GID_MUX_MKV, }, + { { "Matroska (libmkv)", "libmkv", "Matroska (libmkv)", "mkv", HB_MUX_LIBMKV, }, NULL, 1, HB_GID_MUX_MKV, }, +- { { "WebM (avformat)", "av_webm", "WebM (libavformat)", "webm", HB_MUX_AV_WEBM, }, NULL, 1, HB_GID_MUX_WEBM, }, + }; + int hb_containers_count = sizeof(hb_containers) / sizeof(hb_containers[0]); + static int hb_container_is_enabled(int format) diff --git a/handbrake-legacy/remove-nonfree-presets.patch b/handbrake-legacy/remove-nonfree-presets.patch new file mode 100644 index 0000000..1bd0b13 --- /dev/null +++ b/handbrake-legacy/remove-nonfree-presets.patch @@ -0,0 +1,11048 @@ +--- a/libhb/handbrake/preset_builtin.h 2020-01-04 17:28:06.000000000 +0100 ++++ b/libhb/handbrake/preset_builtin.h 2024-12-22 01:33:09.128940541 +0100 +@@ -1819,4501 +1819,6 @@ + " {\n" + " \"ChildrenArray\": [\n" + " {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 128, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"Encode up to 3 minutes of video in large size for Discord Nitro Classic (50 MB or less) or up to 6 minutes of video in large size for Discord Nitro (100 MB or less). H.264 video (up to 1080p30) and AAC stereo audio, in an MP4 container.\", \n" +-" \"PresetName\": \"Discord Nitro Large 3-6 Minutes 1080p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 2100, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"vbv-bufsize=21000:vbv-maxrate=2100:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 96, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"Encode up to 5 minutes of video in medium size for Discord Nitro Classic (50 MB or less) or up to 10 minutes of video in medium size for Discord Nitro (100 MB or less). H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container.\", \n" +-" \"PresetName\": \"Discord Nitro Medium 5-10 Minutes 720p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1250, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"vbv-bufsize=12500:vbv-maxrate=1250:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 96, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 480, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"Encode up to 10 minutes of video in small size for Discord Nitro Classic (50 MB or less) or up to 20 minutes of video in small size for Discord Nitro (100 MB or less). H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container.\", \n" +-" \"PresetName\": \"Discord Nitro Small 10-20 Minutes 480p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 550, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"vbv-bufsize=5500:vbv-maxrate=550:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 64, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"mono\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 360, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 480, \n" +-" \"PresetDescription\": \"Encode up to 2 minutes of video in small size for Discord (8 MB or less). H.264 video (up to 360p30) and AAC mono audio, in an MP4 container.\", \n" +-" \"PresetName\": \"Discord Small 2 Minutes 360p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 450, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"vbv-bufsize=4500:vbv-maxrate=450:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 32, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"mono\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 240, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 320, \n" +-" \"PresetDescription\": \"Encode up to 5 minutes of video in tiny size for Discord (8 MB or less). H.264 video (up to 240p30) and AAC mono audio, in an MP4 container.\", \n" +-" \"PresetName\": \"Discord Tiny 5 Minutes 240p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 165, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"vbv-bufsize=1650:vbv-maxrate=165:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=5,4:psy-rd=2.0:0.3:ref=5:bframes=5\", \n" +-" \"VideoPreset\": \"veryslow\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 25.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 96, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"Encode up to 3 minutes of video in large size for Gmail (25 MB or less). H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container.\", \n" +-" \"PresetName\": \"Gmail Large 3 Minutes 720p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 900, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"vbv-bufsize=9000:vbv-maxrate=900:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 23.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 96, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 480, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"Encode up to 5 minutes of video in medium size for Gmail (25 MB or less). H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container.\", \n" +-" \"PresetName\": \"Gmail Medium 5 Minutes 480p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"vbv-bufsize=5000:vbv-maxrate=500:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 23.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 48, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"mono\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 288, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 384, \n" +-" \"PresetDescription\": \"Encode up to 10 minutes of video in small size for Gmail (25 MB or less). H.264 video (up to 288p30) and AAC mono audio, in an MP4 container.\", \n" +-" \"PresetName\": \"Gmail Small 10 Minutes 288p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 250, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"vbv-bufsize=2500:vbv-maxrate=250:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 23.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 320, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"48\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 2160, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"off\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 3840, \n" +-" \"PresetDescription\": \"High quality H.264 video (up to 2160p60) and high bit rate AAC stereo audio in an MP4 container. Compatible with video hosting services supporting 4K video, such as Vimeo and YouTube.\", \n" +-" \"PresetName\": \"Vimeo YouTube HQ 2160p60 4K\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 18000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"5.2\", \n" +-" \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 320, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"48\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1440, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"off\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 2560, \n" +-" \"PresetDescription\": \"High quality H.264 video (up to 1440p60) and high bit rate AAC stereo audio in an MP4 container. Compatible with video hosting services supporting 2.5K video, such as Vimeo and YouTube.\", \n" +-" \"PresetName\": \"Vimeo YouTube HQ 1440p60 2.5K\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 12000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"5.2\", \n" +-" \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 320, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"48\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"off\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"High quality H.264 video (up to 1080p60) and high bit rate AAC stereo audio in an MP4 container. Compatible with video hosting services supporting 1080p60, such as Vimeo and YouTube.\", \n" +-" \"PresetName\": \"Vimeo YouTube HQ 1080p60\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 9000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.2\", \n" +-" \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 320, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"48\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"off\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"High quality H.264 video (up to 720p60) and high bit rate AAC stereo audio in an MP4 container. Compatible with video hosting services supporting 720p60, such as Vimeo and YouTube.\", \n" +-" \"PresetName\": \"Vimeo YouTube HQ 720p60\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 4500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.2\", \n" +-" \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 19.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 320, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"48\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"off\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"H.264 video (up to 720p30) and high bit rate AAC stereo audio in an MP4 container. Compatible with most video hosting services, such as Vimeo and YouTube.\", \n" +-" \"PresetName\": \"Vimeo YouTube 720p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 2500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.2\", \n" +-" \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }\n" +-" ], \n" +-" \"Folder\": true, \n" +-" \"PresetName\": \"Web\", \n" +-" \"Type\": 0\n" +-" }, \n" +-" {\n" +-" \"ChildrenArray\": [\n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p30) and AAC stereo audio, in an MP4 container. Compatible with Android devices.\", \n" +-" \"PresetName\": \"Android 1080p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container. Compatible with Android devices.\", \n" +-" \"PresetName\": \"Android 720p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 3000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 128, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 576, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"H.264 video (up to 576p25) and AAC stereo audio, in an MP4 container. Compatible with Android devices.\", \n" +-" \"PresetName\": \"Android 576p25\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1800, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"25\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 128, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 480, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container. Compatible with Android devices.\", \n" +-" \"PresetName\": \"Android 480p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 2160, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 3840, \n" +-" \"PresetDescription\": \"H.265 video (up to 2160p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPhone 7, 7 Plus, 8, 8 Plus, X, XR, XS, XS Max; Apple TV 4K.\", \n" +-" \"PresetName\": \"Apple 2160p60 4K HEVC Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 8000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x265\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1\", \n" +-" \"VideoPreset\": \"slow\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 24.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPad 5th and 6th Generation; iPad mini 2, 3, and 4; iPad Air 1st Generation and Air 2; iPad Pro 1st, 2nd, and 3rd Generation; Apple TV 4th Generation and later.\", \n" +-" \"PresetName\": \"Apple 1080p60 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.2\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPhone 5, 5s, SE, 6, 6 Plus, 6s, 6s Plus, and later; iPod touch 6th Generation; iPad 3rd, 4th Generation and later; iPad mini 1st Generation and later; Apple TV 3rd, 4th Generation and later.\", \n" +-" \"PresetName\": \"Apple 1080p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"H.264 video (up to 720p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPhone 4, 4S, and later; iPod touch 4th, 5th Generation and later; iPad 1st Generation, iPad 2, and later; Apple TV 2nd Generation and later.\", \n" +-" \"PresetName\": \"Apple 720p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 3000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 540, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 960, \n" +-" \"PresetDescription\": \"H.264 video (up to 540p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPhone 1st Generation, 3G, 3GS, and later; iPod touch 1st, 2nd, 3rd Generation and later; iPod Classic; Apple TV 1st Generation and later.\", \n" +-" \"PresetName\": \"Apple 540p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 2500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"qpmin=4:cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": true, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 240, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 16, \n" +-" \"PicturePAR\": \"off\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 320, \n" +-" \"PresetDescription\": \"H.264 video (up to 240p30) and AAC stereo audio, in an MP4 container. Compatible with Apple iPod 5th Generation and later.\", \n" +-" \"PresetName\": \"Apple 240p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 350, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"1.3\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"baseline\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": true, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 2160, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 3840, \n" +-" \"PresetDescription\": \"H.265 video (up to 2160p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Google Chromecast Ultra.\", \n" +-" \"PresetName\": \"Chromecast 2160p60 4K HEVC Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 8000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x265\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1\", \n" +-" \"VideoPreset\": \"slow\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 24.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Google Chromecast 3rd Generation.\", \n" +-" \"PresetName\": \"Chromecast 1080p60 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.2\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": true, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Google Chromecast 1st, 2nd Generation and later.\", \n" +-" \"PresetName\": \"Chromecast 1080p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 2160, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 3840, \n" +-" \"PresetDescription\": \"H.265 video (up to 2160p60), AAC stereo audio, and Dolby Digital (AC-3) audio, in an MP4 container. Compatible with Amazon Fire TV 2nd Generation and later; Fire TV Cube, Fire TV Stick 4K.\", \n" +-" \"PresetName\": \"Amazon Fire 2160p60 4K HEVC Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 8000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x265\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1\", \n" +-" \"VideoPreset\": \"slow\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 24.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) audio, in an MP4 container. Compatible with Amazon Fire TV 1st Generation and later; Fire TV Stick 1st Generation and later; Fire HD 10 7th Generation (2017); Fire HDX 4th Generation (2014).\", \n" +-" \"PresetName\": \"Amazon Fire 1080p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container. Compatible with Amazon Fire HD 4th Generation (2014) and later; Kindle Fire HDX 3rd Generation (2013); Kindle Fire HD 2nd Generation (2012) and later.\", \n" +-" \"PresetName\": \"Amazon Fire 720p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 3000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 2160, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 3840, \n" +-" \"PresetDescription\": \"H.264 video (up to 2160p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Playstation 4 Pro.\", \n" +-" \"PresetName\": \"Playstation 2160p60 4K Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 12000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"5.2\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 24.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Playstation 3 and 4.\", \n" +-" \"PresetName\": \"Playstation 1080p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container. Compatible with Playstation Vita TV.\", \n" +-" \"PresetName\": \"Playstation 720p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 3000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 540, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 960, \n" +-" \"PresetDescription\": \"H.264 video (up to 540p30) and AAC stereo audio, in an MP4 container. Compatible with Playstation Vita.\", \n" +-" \"PresetName\": \"Playstation 540p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 2250, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\", \n" +-" \"copy:dts\", \n" +-" \"copy:eac3\", \n" +-" \"copy:mp3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 2160, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 3840, \n" +-" \"PresetDescription\": \"H.265 video (up to 2160p60), AAC stereo audio, and surround audio, in an MKV container. Compatible with Roku 4, Streaming Stick+, Premiere+, and Ultra.\", \n" +-" \"PresetName\": \"Roku 2160p60 4K HEVC Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 8000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x265\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1\", \n" +-" \"VideoPreset\": \"slow\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 24.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Roku 1080p models.\", \n" +-" \"PresetName\": \"Roku 1080p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"H.264 video (up to 720p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Roku 720p models.\", \n" +-" \"PresetName\": \"Roku 720p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 3000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 576, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"H.264 video (up to 576p25) and AAC stereo audio, in an MP4 container. Compatible with Roku standard definition models.\", \n" +-" \"PresetName\": \"Roku 576p25\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1800, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"25\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": true, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 480, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container. Compatible with Roku standard definition models.\", \n" +-" \"PresetName\": \"Roku 480p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"3.1\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Xbox One.\", \n" +-" \"PresetName\": \"Xbox 1080p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"high\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [\n" +-" \"copy:aac\", \n" +-" \"copy:ac3\"\n" +-" ], \n" +-" \"AudioEncoderFallback\": \"aac\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"aac\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }, \n" +-" {\n" +-" \"AudioBitrate\": 640, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"copy:ac3\", \n" +-" \"AudioMixdown\": \"none\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": false, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mp4\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 8, \n" +-" \"PicturePAR\": \"off\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Xbox 360.\", \n" +-" \"PresetName\": \"Xbox Legacy 1080p30 Surround\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"x264\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"4.0\", \n" +-" \"VideoOptionExtra\": \"\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"main\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 2, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }\n" +-" ], \n" +-" \"Folder\": true, \n" +-" \"PresetName\": \"Devices\", \n" +-" \"Type\": 0\n" +-" }, \n" +-" {\n" +-" \"ChildrenArray\": [\n" +-" {\n" + " \"AlignAVStart\": false, \n" + " \"AudioCopyMask\": [\n" + " \"copy:aac\"\n" +@@ -7369,942 +2874,6 @@ + " \"VideoScaler\": \"swscale\", \n" + " \"VideoTune\": \"\", \n" + " \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"opus\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"opus\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 2160, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 3840, \n" +-" \"PresetDescription\": \"VP9 video (up to 2160p60) and Opus stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP9 MKV 2160p60\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 8000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp9\", \n" +-" \"VideoFramerate\": \"60\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=30\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 24.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"opus\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"opus\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"VP9 video (up to 1080p30) and Opus stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP9 MKV 1080p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 4500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp9\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=30\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 22.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"opus\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"opus\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"VP9 video (up to 720p30) and Opus stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP9 MKV 720p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 2500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp9\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=30\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 21.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"opus\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"opus\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 576, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"VP9 video (up to 576p25) and Opus stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP9 MKV 576p25\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp9\", \n" +-" \"VideoFramerate\": \"25\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=30\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"opus\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"opus\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 480, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"VP9 video (up to 480p30) and Opus stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP9 MKV 480p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1250, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp9\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=30\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 20.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"vorbis\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"vorbis\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 1080, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1920, \n" +-" \"PresetDescription\": \"VP8 video (up to 1080p30) and Vorbis stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP8 MKV 1080p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 6000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp8\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=24\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 4.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"vorbis\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"vorbis\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 720, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 1280, \n" +-" \"PresetDescription\": \"VP8 video (up to 720p30) and Vorbis stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP8 MKV 720p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 3000, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp8\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=24\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 4.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"vorbis\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"vorbis\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 576, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"VP8 video (up to 576p25) and Vorbis stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP8 MKV 576p25\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1800, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp8\", \n" +-" \"VideoFramerate\": \"25\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=24\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 4.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" +-" \"VideoTwoPass\": true, \n" +-" \"x264Option\": \"\", \n" +-" \"x264UseAdvancedOptions\": false\n" +-" }, \n" +-" {\n" +-" \"AlignAVStart\": false, \n" +-" \"AudioCopyMask\": [], \n" +-" \"AudioEncoderFallback\": \"vorbis\", \n" +-" \"AudioLanguageList\": [], \n" +-" \"AudioList\": [\n" +-" {\n" +-" \"AudioBitrate\": 160, \n" +-" \"AudioCompressionLevel\": -1.0, \n" +-" \"AudioDitherMethod\": \"auto\", \n" +-" \"AudioEncoder\": \"vorbis\", \n" +-" \"AudioMixdown\": \"stereo\", \n" +-" \"AudioNormalizeMixLevel\": false, \n" +-" \"AudioSamplerate\": \"auto\", \n" +-" \"AudioTrackDRCSlider\": 0.0, \n" +-" \"AudioTrackGainSlider\": 0.0, \n" +-" \"AudioTrackQuality\": -1.0, \n" +-" \"AudioTrackQualityEnable\": false\n" +-" }\n" +-" ], \n" +-" \"AudioSecondaryEncoderMode\": true, \n" +-" \"AudioTrackSelectionBehavior\": \"first\", \n" +-" \"ChapterMarkers\": true, \n" +-" \"ChildrenArray\": [], \n" +-" \"Default\": false, \n" +-" \"FileFormat\": \"mkv\", \n" +-" \"Folder\": false, \n" +-" \"FolderOpen\": false, \n" +-" \"InlineParameterSets\": false, \n" +-" \"Mp4HttpOptimize\": false, \n" +-" \"Mp4iPodCompatible\": false, \n" +-" \"PictureAutoCrop\": true, \n" +-" \"PictureBottomCrop\": 0, \n" +-" \"PictureChromaSmoothCustom\": \"\", \n" +-" \"PictureChromaSmoothPreset\": \"off\", \n" +-" \"PictureChromaSmoothTune\": \"none\", \n" +-" \"PictureCombDetectCustom\": \"\", \n" +-" \"PictureCombDetectPreset\": \"default\", \n" +-" \"PictureDARWidth\": 0, \n" +-" \"PictureDeblockCustom\": \"strength=strong:thresh=20:blocksize=8\", \n" +-" \"PictureDeblockPreset\": \"off\", \n" +-" \"PictureDeblockTune\": \"medium\", \n" +-" \"PictureDeinterlaceCustom\": \"\", \n" +-" \"PictureDeinterlaceFilter\": \"decomb\", \n" +-" \"PictureDeinterlacePreset\": \"default\", \n" +-" \"PictureDenoiseCustom\": \"\", \n" +-" \"PictureDenoiseFilter\": \"off\", \n" +-" \"PictureDenoisePreset\": \"light\", \n" +-" \"PictureDenoiseTune\": \"none\", \n" +-" \"PictureDetelecine\": \"off\", \n" +-" \"PictureDetelecineCustom\": \"\", \n" +-" \"PictureForceHeight\": 0, \n" +-" \"PictureForceWidth\": 0, \n" +-" \"PictureHeight\": 480, \n" +-" \"PictureItuPAR\": false, \n" +-" \"PictureKeepRatio\": true, \n" +-" \"PictureLeftCrop\": 0, \n" +-" \"PictureLooseCrop\": false, \n" +-" \"PictureModulus\": 2, \n" +-" \"PicturePAR\": \"auto\", \n" +-" \"PicturePARHeight\": 720, \n" +-" \"PicturePARWidth\": 853, \n" +-" \"PictureRightCrop\": 0, \n" +-" \"PictureRotate\": \"angle=0:hflip=0\", \n" +-" \"PictureSharpenCustom\": \"\", \n" +-" \"PictureSharpenFilter\": \"off\", \n" +-" \"PictureSharpenPreset\": \"medium\", \n" +-" \"PictureSharpenTune\": \"none\", \n" +-" \"PictureTopCrop\": 0, \n" +-" \"PictureWidth\": 720, \n" +-" \"PresetDescription\": \"VP8 video (up to 480p30) and Vorbis stereo audio, in an MKV container.\", \n" +-" \"PresetName\": \"VP8 MKV 480p30\", \n" +-" \"SubtitleAddCC\": false, \n" +-" \"SubtitleAddForeignAudioSearch\": true, \n" +-" \"SubtitleAddForeignAudioSubtitle\": false, \n" +-" \"SubtitleBurnBDSub\": true, \n" +-" \"SubtitleBurnBehavior\": \"foreign\", \n" +-" \"SubtitleBurnDVDSub\": true, \n" +-" \"SubtitleLanguageList\": [], \n" +-" \"SubtitleTrackSelectionBehavior\": \"none\", \n" +-" \"Type\": 0, \n" +-" \"UsesPictureFilters\": true, \n" +-" \"UsesPictureSettings\": 1, \n" +-" \"VideoAvgBitrate\": 1500, \n" +-" \"VideoColorMatrixCodeOverride\": 0, \n" +-" \"VideoEncoder\": \"vp8\", \n" +-" \"VideoFramerate\": \"30\", \n" +-" \"VideoFramerateMode\": \"pfr\", \n" +-" \"VideoGrayScale\": false, \n" +-" \"VideoLevel\": \"auto\", \n" +-" \"VideoOptionExtra\": \"qmin=0:qmax=24\", \n" +-" \"VideoPreset\": \"medium\", \n" +-" \"VideoProfile\": \"auto\", \n" +-" \"VideoQSVAsyncDepth\": 4, \n" +-" \"VideoQSVDecode\": false, \n" +-" \"VideoQualitySlider\": 4.0, \n" +-" \"VideoQualityType\": 1, \n" +-" \"VideoScaler\": \"swscale\", \n" +-" \"VideoTune\": \"\", \n" +-" \"VideoTurboTwoPass\": false, \n" + " \"VideoTwoPass\": true, \n" + " \"x264Option\": \"\", \n" + " \"x264UseAdvancedOptions\": false\n" +--- a/preset/preset_builtin.json 2020-01-04 17:28:06.000000000 +0100 ++++ b/preset/preset_builtin.json 2024-12-22 01:46:16.810325267 +0100 +@@ -1865,4619 +1865,6 @@ + { + "ChildrenArray": [ + { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 128, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "Encode up to 3 minutes of video in large size for Discord Nitro Classic (50 MB or less) or up to 6 minutes of video in large size for Discord Nitro (100 MB or less). H.264 video (up to 1080p30) and AAC stereo audio, in an MP4 container.", +- "PresetName": "Discord Nitro Large 3-6 Minutes 1080p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 2100, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "vbv-bufsize=21000:vbv-maxrate=2100:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 96, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "Encode up to 5 minutes of video in medium size for Discord Nitro Classic (50 MB or less) or up to 10 minutes of video in medium size for Discord Nitro (100 MB or less). H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container.", +- "PresetName": "Discord Nitro Medium 5-10 Minutes 720p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1250, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "vbv-bufsize=12500:vbv-maxrate=1250:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 96, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 480, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "Encode up to 10 minutes of video in small size for Discord Nitro Classic (50 MB or less) or up to 20 minutes of video in small size for Discord Nitro (100 MB or less). H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container.", +- "PresetName": "Discord Nitro Small 10-20 Minutes 480p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 550, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "vbv-bufsize=5500:vbv-maxrate=550:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 64, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "mono", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 480, +- "PictureHeight": 360, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "Encode up to 2 minutes of video in small size for Discord (8 MB or less). H.264 video (up to 360p30) and AAC mono audio, in an MP4 container.", +- "PresetName": "Discord Small 2 Minutes 360p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 450, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "vbv-bufsize=4500:vbv-maxrate=450:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 32, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "mono", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 320, +- "PictureHeight": 240, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "Encode up to 5 minutes of video in tiny size for Discord (8 MB or less). H.264 video (up to 240p30) and AAC mono audio, in an MP4 container.", +- "PresetName": "Discord Tiny 5 Minutes 240p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 165, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "veryslow", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "vbv-bufsize=1650:vbv-maxrate=165:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=5,4:psy-rd=2.0:0.3:ref=5:bframes=5", +- "VideoQualityType": 2, +- "VideoQualitySlider": 25.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 96, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "Encode up to 3 minutes of video in large size for Gmail (25 MB or less). H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container.", +- "PresetName": "Gmail Large 3 Minutes 720p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 900, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "vbv-bufsize=9000:vbv-maxrate=900:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2", +- "VideoQualityType": 2, +- "VideoQualitySlider": 23.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 96, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 480, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "Encode up to 5 minutes of video in medium size for Gmail (25 MB or less). H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container.", +- "PresetName": "Gmail Medium 5 Minutes 480p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "vbv-bufsize=5000:vbv-maxrate=500:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2", +- "VideoQualityType": 2, +- "VideoQualitySlider": 23.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 48, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "mono", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 384, +- "PictureHeight": 288, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "Encode up to 10 minutes of video in small size for Gmail (25 MB or less). H.264 video (up to 288p30) and AAC mono audio, in an MP4 container.", +- "PresetName": "Gmail Small 10 Minutes 288p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 250, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "vbv-bufsize=2500:vbv-maxrate=250:aq-mode=2:aq-strength=0.8:direct=auto:analyse=all:deblock=3,2", +- "VideoQualityType": 2, +- "VideoQualitySlider": 23.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 320, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "48", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "off", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 3840, +- "PictureHeight": 2160, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "High quality H.264 video (up to 2160p60) and high bit rate AAC stereo audio in an MP4 container. Compatible with video hosting services supporting 4K video, such as Vimeo and YouTube.", +- "PresetName": "Vimeo YouTube HQ 2160p60 4K", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 18000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "5.2", +- "VideoOptionExtra": "keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 320, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "48", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "off", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 2560, +- "PictureHeight": 1440, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "High quality H.264 video (up to 1440p60) and high bit rate AAC stereo audio in an MP4 container. Compatible with video hosting services supporting 2.5K video, such as Vimeo and YouTube.", +- "PresetName": "Vimeo YouTube HQ 1440p60 2.5K", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 12000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "5.2", +- "VideoOptionExtra": "keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 320, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "48", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "off", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "High quality H.264 video (up to 1080p60) and high bit rate AAC stereo audio in an MP4 container. Compatible with video hosting services supporting 1080p60, such as Vimeo and YouTube.", +- "PresetName": "Vimeo YouTube HQ 1080p60", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 9000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.2", +- "VideoOptionExtra": "keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none", +- "VideoQualityType": 2, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 320, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "48", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "off", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "High quality H.264 video (up to 720p60) and high bit rate AAC stereo audio in an MP4 container. Compatible with video hosting services supporting 720p60, such as Vimeo and YouTube.", +- "PresetName": "Vimeo YouTube HQ 720p60", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 4500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.2", +- "VideoOptionExtra": "keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none", +- "VideoQualityType": 2, +- "VideoQualitySlider": 19.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 320, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "48", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "off", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 720p30) and high bit rate AAC stereo audio in an MP4 container. Compatible with most video hosting services, such as Vimeo and YouTube.", +- "PresetName": "Vimeo YouTube 720p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 2500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.2", +- "VideoOptionExtra": "keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- } +- ], +- "Folder": true, +- "PresetName": "Web", +- "Type": 0 +- }, +- { +- "ChildrenArray": [ +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p30) and AAC stereo audio, in an MP4 container. Compatible with Android devices.", +- "PresetName": "Android 1080p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container. Compatible with Android devices.", +- "PresetName": "Android 720p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 3000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 128, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 576, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 576p25) and AAC stereo audio, in an MP4 container. Compatible with Android devices.", +- "PresetName": "Android 576p25", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1800, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "25", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 128, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 480, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container. Compatible with Android devices.", +- "PresetName": "Android 480p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 3840, +- "PictureHeight": 2160, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.265 video (up to 2160p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPhone 7, 7 Plus, 8, 8 Plus, X, XR, XS, XS Max; Apple TV 4K.", +- "PresetName": "Apple 2160p60 4K HEVC Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 8000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x265", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "slow", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "auto", +- "VideoOptionExtra": "strong-intra-smoothing=0:rect=0:aq-mode=1", +- "VideoQualityType": 2, +- "VideoQualitySlider": 24.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPad 5th and 6th Generation; iPad mini 2, 3, and 4; iPad Air 1st Generation and Air 2; iPad Pro 1st, 2nd, and 3rd Generation; Apple TV 4th Generation and later.", +- "PresetName": "Apple 1080p60 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.2", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPhone 5, 5s, SE, 6, 6 Plus, 6s, 6s Plus, and later; iPod touch 6th Generation; iPad 3rd, 4th Generation and later; iPad mini 1st Generation and later; Apple TV 3rd, 4th Generation and later.", +- "PresetName": "Apple 1080p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 720p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPhone 4, 4S, and later; iPod touch 4th, 5th Generation and later; iPad 1st Generation, iPad 2, and later; Apple TV 2nd Generation and later.", +- "PresetName": "Apple 720p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 3000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 960, +- "PictureHeight": 540, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 540p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Apple iPhone 1st Generation, 3G, 3GS, and later; iPod touch 1st, 2nd, 3rd Generation and later; iPod Classic; Apple TV 1st Generation and later.", +- "PresetName": "Apple 540p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 2500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "qpmin=4:cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500", +- "VideoQualityType": 2, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": true, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 16, +- "PicturePAR": "off", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 320, +- "PictureHeight": 240, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 240p30) and AAC stereo audio, in an MP4 container. Compatible with Apple iPod 5th Generation and later.", +- "PresetName": "Apple 240p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 350, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "baseline", +- "VideoLevel": "1.3", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": true, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 3840, +- "PictureHeight": 2160, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.265 video (up to 2160p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Google Chromecast Ultra.", +- "PresetName": "Chromecast 2160p60 4K HEVC Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 8000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x265", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "slow", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "auto", +- "VideoOptionExtra": "strong-intra-smoothing=0:rect=0:aq-mode=1", +- "VideoQualityType": 2, +- "VideoQualitySlider": 24.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Google Chromecast 3rd Generation.", +- "PresetName": "Chromecast 1080p60 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.2", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": true, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Google Chromecast 1st, 2nd Generation and later.", +- "PresetName": "Chromecast 1080p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 3840, +- "PictureHeight": 2160, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.265 video (up to 2160p60), AAC stereo audio, and Dolby Digital (AC-3) audio, in an MP4 container. Compatible with Amazon Fire TV 2nd Generation and later; Fire TV Cube, Fire TV Stick 4K.", +- "PresetName": "Amazon Fire 2160p60 4K HEVC Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 8000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x265", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "slow", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "auto", +- "VideoOptionExtra": "strong-intra-smoothing=0:rect=0:aq-mode=1", +- "VideoQualityType": 2, +- "VideoQualitySlider": 24.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) audio, in an MP4 container. Compatible with Amazon Fire TV 1st Generation and later; Fire TV Stick 1st Generation and later; Fire HD 10 7th Generation (2017); Fire HDX 4th Generation (2014).", +- "PresetName": "Amazon Fire 1080p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container. Compatible with Amazon Fire HD 4th Generation (2014) and later; Kindle Fire HDX 3rd Generation (2013); Kindle Fire HD 2nd Generation (2012) and later.", +- "PresetName": "Amazon Fire 720p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 3000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 3840, +- "PictureHeight": 2160, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 2160p60), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Playstation 4 Pro.", +- "PresetName": "Playstation 2160p60 4K Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 12000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "5.2", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 24.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Playstation 3 and 4.", +- "PresetName": "Playstation 1080p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 720p30) and AAC stereo audio, in an MP4 container. Compatible with Playstation Vita TV.", +- "PresetName": "Playstation 720p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 3000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 960, +- "PictureHeight": 540, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 540p30) and AAC stereo audio, in an MP4 container. Compatible with Playstation Vita.", +- "PresetName": "Playstation 540p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 2250, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3", +- "copy:dts", +- "copy:eac3", +- "copy:mp3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 3840, +- "PictureHeight": 2160, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.265 video (up to 2160p60), AAC stereo audio, and surround audio, in an MKV container. Compatible with Roku 4, Streaming Stick+, Premiere+, and Ultra.", +- "PresetName": "Roku 2160p60 4K HEVC Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 8000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x265", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "slow", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "auto", +- "VideoOptionExtra": "strong-intra-smoothing=0:rect=0:aq-mode=1", +- "VideoQualityType": 2, +- "VideoQualitySlider": 24.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Roku 1080p models.", +- "PresetName": "Roku 1080p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 720p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Roku 720p models.", +- "PresetName": "Roku 720p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 3000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 576, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 576p25) and AAC stereo audio, in an MP4 container. Compatible with Roku standard definition models.", +- "PresetName": "Roku 576p25", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1800, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "25", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": true, +- "AudioCopyMask": [ +- "copy:aac" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 480, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 480p30) and AAC stereo audio, in an MP4 container. Compatible with Roku standard definition models.", +- "PresetName": "Roku 480p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "3.1", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Xbox One.", +- "PresetName": "Xbox 1080p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "high", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- "copy:aac", +- "copy:ac3" +- ], +- "AudioEncoderFallback": "aac", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "aac", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- }, +- { +- "AudioBitrate": 640, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "copy:ac3", +- "AudioMixdown": "none", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": false, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mp4", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 8, +- "PicturePAR": "off", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "H.264 video (up to 1080p30), AAC stereo audio, and Dolby Digital (AC-3) surround audio, in an MP4 container. Compatible with Xbox 360.", +- "PresetName": "Xbox Legacy 1080p30 Surround", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "x264", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "main", +- "VideoLevel": "4.0", +- "VideoOptionExtra": "", +- "VideoQualityType": 2, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- } +- ], +- "Folder": true, +- "PresetName": "Devices", +- "Type": 0 +- }, +- { +- "ChildrenArray": [ +- { + "AlignAVStart": false, + "AudioCopyMask": [ + "copy:aac" +@@ -7563,978 +2950,6 @@ + "VideoQSVDecode": false, + "VideoQSVAsyncDepth": 4, + "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "opus", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "opus", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 3840, +- "PictureHeight": 2160, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP9 video (up to 2160p60) and Opus stereo audio, in an MKV container.", +- "PresetName": "VP9 MKV 2160p60", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 8000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp9", +- "VideoFramerate": "60", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=30", +- "VideoQualityType": 1, +- "VideoQualitySlider": 24.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "opus", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "opus", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP9 video (up to 1080p30) and Opus stereo audio, in an MKV container.", +- "PresetName": "VP9 MKV 1080p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 4500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp9", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=30", +- "VideoQualityType": 1, +- "VideoQualitySlider": 22.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "opus", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "opus", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP9 video (up to 720p30) and Opus stereo audio, in an MKV container.", +- "PresetName": "VP9 MKV 720p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 2500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp9", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=30", +- "VideoQualityType": 1, +- "VideoQualitySlider": 21.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "opus", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "opus", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 576, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP9 video (up to 576p25) and Opus stereo audio, in an MKV container.", +- "PresetName": "VP9 MKV 576p25", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp9", +- "VideoFramerate": "25", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=30", +- "VideoQualityType": 1, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "opus", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "opus", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 480, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP9 video (up to 480p30) and Opus stereo audio, in an MKV container.", +- "PresetName": "VP9 MKV 480p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1250, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp9", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=30", +- "VideoQualityType": 1, +- "VideoQualitySlider": 20.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "vorbis", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "vorbis", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1920, +- "PictureHeight": 1080, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP8 video (up to 1080p30) and Vorbis stereo audio, in an MKV container.", +- "PresetName": "VP8 MKV 1080p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 6000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp8", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=24", +- "VideoQualityType": 1, +- "VideoQualitySlider": 4.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "vorbis", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "vorbis", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 1280, +- "PictureHeight": 720, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP8 video (up to 720p30) and Vorbis stereo audio, in an MKV container.", +- "PresetName": "VP8 MKV 720p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 3000, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp8", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=24", +- "VideoQualityType": 1, +- "VideoQualitySlider": 4.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "vorbis", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "vorbis", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 576, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP8 video (up to 576p25) and Vorbis stereo audio, in an MKV container.", +- "PresetName": "VP8 MKV 576p25", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1800, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp8", +- "VideoFramerate": "25", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=24", +- "VideoQualityType": 1, +- "VideoQualitySlider": 4.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, +- "VideoTurboTwoPass": false, +- "x264Option": "", +- "x264UseAdvancedOptions": false +- }, +- { +- "AlignAVStart": false, +- "AudioCopyMask": [ +- ], +- "AudioEncoderFallback": "vorbis", +- "AudioLanguageList": [ +- ], +- "AudioList": [ +- { +- "AudioBitrate": 160, +- "AudioCompressionLevel": -1.0, +- "AudioDitherMethod": "auto", +- "AudioEncoder": "vorbis", +- "AudioMixdown": "stereo", +- "AudioNormalizeMixLevel": false, +- "AudioSamplerate": "auto", +- "AudioTrackQualityEnable": false, +- "AudioTrackQuality": -1.0, +- "AudioTrackGainSlider": 0.0, +- "AudioTrackDRCSlider": 0.0 +- } +- ], +- "AudioSecondaryEncoderMode": true, +- "AudioTrackSelectionBehavior": "first", +- "ChapterMarkers": true, +- "ChildrenArray": [ +- ], +- "Default": false, +- "FileFormat": "mkv", +- "Folder": false, +- "FolderOpen": false, +- "InlineParameterSets": false, +- "Mp4HttpOptimize": false, +- "Mp4iPodCompatible": false, +- "PictureAutoCrop": true, +- "PictureBottomCrop": 0, +- "PictureLeftCrop": 0, +- "PictureRightCrop": 0, +- "PictureTopCrop": 0, +- "PictureDARWidth": 0, +- "PictureDeblockPreset": "off", +- "PictureDeblockTune": "medium", +- "PictureDeblockCustom": "strength=strong:thresh=20:blocksize=8", +- "PictureCombDetectCustom": "", +- "PictureCombDetectPreset": "default", +- "PictureDeinterlaceCustom": "", +- "PictureDeinterlaceFilter": "decomb", +- "PictureDeinterlacePreset": "default", +- "PictureDenoiseCustom": "", +- "PictureDenoiseFilter": "off", +- "PictureDenoisePreset": "light", +- "PictureDenoiseTune": "none", +- "PictureChromaSmoothCustom": "", +- "PictureChromaSmoothPreset": "off", +- "PictureChromaSmoothTune": "none", +- "PictureSharpenCustom": "", +- "PictureSharpenFilter": "off", +- "PictureSharpenPreset": "medium", +- "PictureSharpenTune": "none", +- "PictureDetelecine": "off", +- "PictureDetelecineCustom": "", +- "PictureItuPAR": false, +- "PictureKeepRatio": true, +- "PictureLooseCrop": false, +- "PictureModulus": 2, +- "PicturePAR": "auto", +- "PicturePARWidth": 853, +- "PicturePARHeight": 720, +- "PictureRotate": "angle=0:hflip=0", +- "PictureWidth": 720, +- "PictureHeight": 480, +- "PictureForceHeight": 0, +- "PictureForceWidth": 0, +- "PresetDescription": "VP8 video (up to 480p30) and Vorbis stereo audio, in an MKV container.", +- "PresetName": "VP8 MKV 480p30", +- "Type": 0, +- "UsesPictureFilters": true, +- "UsesPictureSettings": 1, +- "SubtitleAddCC": false, +- "SubtitleAddForeignAudioSearch": true, +- "SubtitleAddForeignAudioSubtitle": false, +- "SubtitleBurnBehavior": "foreign", +- "SubtitleBurnBDSub": true, +- "SubtitleBurnDVDSub": true, +- "SubtitleLanguageList": [ +- ], +- "SubtitleTrackSelectionBehavior": "none", +- "VideoAvgBitrate": 1500, +- "VideoColorMatrixCodeOverride": 0, +- "VideoEncoder": "vp8", +- "VideoFramerate": "30", +- "VideoFramerateMode": "pfr", +- "VideoGrayScale": false, +- "VideoScaler": "swscale", +- "VideoPreset": "medium", +- "VideoTune": "", +- "VideoProfile": "auto", +- "VideoLevel": "auto", +- "VideoOptionExtra": "qmin=0:qmax=24", +- "VideoQualityType": 1, +- "VideoQualitySlider": 4.0, +- "VideoQSVDecode": false, +- "VideoQSVAsyncDepth": 4, +- "VideoTwoPass": true, + "VideoTurboTwoPass": false, + "x264Option": "", + "x264UseAdvancedOptions": false diff --git a/haproxy/CVE-2025-32464.patch b/haproxy/CVE-2025-32464.patch new file mode 100644 index 0000000..5a49a6f --- /dev/null +++ b/haproxy/CVE-2025-32464.patch @@ -0,0 +1,53 @@ +From 3e3b9eebf871510aee36c3a3336faac2f38c9559 Mon Sep 17 00:00:00 2001 +From: Willy Tarreau +Date: Mon, 7 Apr 2025 15:30:43 +0200 +Subject: [PATCH] BUG/MEDIUM: sample: fix risk of overflow when replacing + multiple regex back-refs + +Aleandro Prudenzano of Doyensec and Edoardo Geraci of Codean Labs +reported a bug in sample_conv_regsub(), which can cause replacements +of multiple back-references to overflow the temporary trash buffer. + +The problem happens when doing "regsub(match,replacement,g)": we're +replacing every occurrence of "match" with "replacement" in the input +sample, which requires a length check. For this, a max is applied, so +that a replacement may not use more than the remaining length in the +buffer. However, the length check is made on the replaced pattern and +not on the temporary buffer used to carry the new string. This results +in the remaining size to be usable for each input match, which can go +beyond the temporary buffer size if more than one occurrence has to be +replaced with something that's larger than the remaining room. + +The fix proposed by Aleandro and Edoardo is the correct one (check on +"trash" not "output"), and is the one implemented in this patch. + +While it is very unlikely that a config will replace multiple short +patterns each with a larger one in a request, this possibility cannot +be entirely ruled out (e.g. mask a known, short IP address using +"XXX.XXX.XXX.XXX"). However when this happens, the replacement pattern +will be static, and not be user-controlled, which is why this patch is +marked as medium. + +The bug was introduced in 2.2 with commit 07e1e3c93e ("MINOR: sample: +regsub now supports backreferences"), so it must be backported to all +versions. + +Special thanks go to Aleandro and Edoardo for reporting this bug with +a simple reproducer and a fix. +--- + src/sample.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sample.c b/src/sample.c +index 1e2ff7d2ee8e..980c27cb6a50 100644 +--- a/src/sample.c ++++ b/src/sample.c +@@ -3168,7 +3168,7 @@ static int sample_conv_regsub(const struct arg *arg_p, struct sample *smp, void + output->data = exp_replace(output->area, output->size, start, arg_p[1].data.str.area, pmatch); + + /* replace the matching part */ +- max = output->size - output->data; ++ max = trash->size - trash->data; + if (max) { + if (max > output->data) + max = output->data; \ No newline at end of file diff --git a/haproxy/PKGBUILD b/haproxy/PKGBUILD new file mode 100644 index 0000000..111397a --- /dev/null +++ b/haproxy/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=haproxy +pkgver=2.4.18 +pkgrel=2 +pkgdesc="Reliable, high performance TCP/HTTP load balancer" +url='https://www.haproxy.org/' +arch=('i686' 'x86_64') +license=('custom:GPL-2+OpenSSL-Linking-Exception') +depends=('libressl' 'pcre' 'zlib' 'libxcrypt' 'lua') +backup=('etc/haproxy/haproxy.cfg') +install=$pkgname.install +source=(https://www.haproxy.org/download/${pkgver%.*}/src/haproxy-$pkgver.tar.gz + use-CFLAGS-and-LDFLAGS-when-building-admin.patch + CVE-2025-32464.patch + $pkgname.cfg + $pkgname.initd + $pkgname.run) +sha512sums=('4362ebf5eef6560adf558a4db596c2a0349dca05ee51e69c60f5e995d364e4f68d3422391fc5286dd8e2e65ce41a459dbbcba01e6f7b5918870b214683922488' + 'e93315ce4b16c73c44703ea64681629c92adacefb3ac4f7c1bef31bd8e513053489f8790e383e53709d19381856b00134cdcf1e207ec78a7f948c3cf4e03fe9a' + '7a9c07d8da8345bc9bca5ede801d5b22dbe264cd94e417ae8dffb06181a50e6ce49bd2a3253cd7cc276d89f98dbb5538fc66e8904a4315bacdc9fe31c677a378' + '26bc8f8ac504fcbaec113ecbb9bb59b9da47dc8834779ebbb2870a8cadf2ee7561b3a811f01e619358a98c6c7768e8fdd90ab447098c05b82e788c8212c4c41f' + '4aa8fc812079baf1d17cf9484a9b44568c3dd94f35243a57a4a7868e7f88146a4e94c80ea8ab86f1b08a524567e269a3ec119b67fc679f6bd0d9f1c70ce4f080' + '7cd604d1eb46778eccec8909e5e77484f4fde2fe1a6aac978c756c7095dc3e4d9c255be7632b8b1f75a0b1da0140bc3a4cbf38c6b2ee1414097cbbd3e58c3c74') + +prepare() { + cd $pkgname-$pkgver + patch -p1 <"$srcdir"/use-CFLAGS-and-LDFLAGS-when-building-admin.patch + patch -p1 <"$srcdir"/CVE-2025-32464.patch +} + +build() { + cd $pkgname-$pkgver + + export CFLAGS="$CFLAGS -fwrapv" + make \ + CFLAGS="$CFLAGS" \ + LDFLAGS="$LDFLAGS" \ + CPU=generic \ + TARGET=linux-glibc \ + USE_GETADDRINFO=1 \ + USE_LUA=1 \ + USE_OPENSSL=1 \ + USE_PCRE=1 \ + USE_PCRE_JIT=1 \ + USE_NS=1 \ + USE_PROMEX=1 \ + USE_ZLIB=1 +} + +package() { + cd $pkgname-$pkgver + make \ + PREFIX="$pkgdir"/usr \ + DOCDIR="$pkgdir"/usr/share/doc/$pkgname \ + install + + install -d "$pkgdir"/usr/share/$pkgname + cp -r examples "$pkgdir"/usr/share/$pkgname + + install -d "$pkgdir"/var/lib/$pkgname + install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname + install -Dm755 "$srcdir"/$pkgname.run "$pkgdir"/etc/sv/$pkgname/run + install -Dm644 "$srcdir"/$pkgname.cfg "$pkgdir"/etc/$pkgname/$pkgname.cfg + + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/haproxy/haproxy.cfg b/haproxy/haproxy.cfg new file mode 100644 index 0000000..cf399e8 --- /dev/null +++ b/haproxy/haproxy.cfg @@ -0,0 +1,87 @@ +#--------------------------------------------------------------------- +# Example configuration for a possible web application. See the +# full configuration options online. +# +# http://haproxy.1wt.eu/download/1.5/doc/configuration.txt +# +#--------------------------------------------------------------------- + +#--------------------------------------------------------------------- +# Global settings +#--------------------------------------------------------------------- +global + # to have these messages end up in /var/log/haproxy.log you will + # need to: + # + # 1) configure syslog to accept network log events. This is done + # by adding the '-r' option to the SYSLOGD_OPTIONS in + # /etc/sysconfig/syslog + # + # 2) configure local2 events to go to the /var/log/haproxy.log + # file. A line like the following can be added to + # /etc/sysconfig/syslog + # + # local2.* /var/log/haproxy.log + # + log 127.0.0.1 local2 + + chroot /var/lib/haproxy + pidfile /var/run/haproxy.pid + maxconn 4000 + user haproxy + group haproxy + daemon + + # turn on stats unix socket + stats socket /var/lib/haproxy/stats + +#--------------------------------------------------------------------- +# common defaults that all the 'listen' and 'backend' sections will +# use if not designated in their block +#--------------------------------------------------------------------- +defaults + mode http + log global + option httplog + option dontlognull + option http-server-close + option forwardfor except 127.0.0.0/8 + option redispatch + retries 3 + timeout http-request 10s + timeout queue 1m + timeout connect 10s + timeout client 1m + timeout server 1m + timeout http-keep-alive 10s + timeout check 10s + maxconn 3000 + +#--------------------------------------------------------------------- +# main frontend which proxys to the backends +#--------------------------------------------------------------------- +frontend main + bind *:5000 + acl url_static path_beg -i /static /images /javascript /stylesheets + acl url_static path_end -i .jpg .gif .png .css .js + + use_backend static if url_static + default_backend app + +#--------------------------------------------------------------------- +# static backend for serving up images, stylesheets and such +#--------------------------------------------------------------------- +backend static + balance roundrobin + server static 127.0.0.1:4331 check + +#--------------------------------------------------------------------- +# round robin balancing between the various backends +#--------------------------------------------------------------------- +backend app + balance roundrobin + server app1 127.0.0.1:5001 check + server app2 127.0.0.1:5002 check + server app3 127.0.0.1:5003 check + server app4 127.0.0.1:5004 check + diff --git a/haproxy/haproxy.initd b/haproxy/haproxy.initd new file mode 100644 index 0000000..c278b16 --- /dev/null +++ b/haproxy/haproxy.initd @@ -0,0 +1,54 @@ +#!/sbin/openrc-run +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-proxy/haproxy/files/haproxy.initd-r1,v 1.2 2011/12/04 10:32:32 swegener Exp $ + +extra_commands="checkconfig" +extra_started_commands="reload" +command=/usr/sbin/haproxy + +CONF=${HAPROXY_CONF:-/etc/haproxy/${SVCNAME}.cfg} +PIDFILE=/var/run/${SVCNAME}.pid + +depend() { + need net + after firewall + use dns logger +} + +checkconfig() { + if [ ! -f "${CONF}" ] && [ ! -d "${CONF}" ]; then + eerror "${CONF} does not exist!" + return 1 + fi + + ebegin "Checking ${CONF}" + $command -q -c -f "${CONF}" + eend $? +} + +start() { + ebegin "Starting ${SVCNAME}" + start-stop-daemon --pidfile "${PIDFILE}" --exec $command \ + --start -- -D -p "${PIDFILE}" -f "${CONF}" + eend $? +} + +stop() { + ebegin "Stopping ${SVCNAME}" + + if [ "${RC_CMD}" = "restart" ]; then + checkconfig || return 1 + fi + + start-stop-daemon --stop --pidfile "${PIDFILE}" + eend $? +} + +reload() { + ebegin "Reloading ${SVCNAME}" + checkconfig || { eerror "Reloading failed, please fix your ${CONF} first"; return 1; } + $command -D -p "${PIDFILE}" -f "${CONF}" -sf $(cat "${PIDFILE}") + eend $? +} + diff --git a/haproxy/haproxy.install b/haproxy/haproxy.install new file mode 100644 index 0000000..ddd85d7 --- /dev/null +++ b/haproxy/haproxy.install @@ -0,0 +1,23 @@ +post_install() { + if ! getent group haproxy &>/dev/null; then + groupadd -r haproxy >& /dev/null + fi + if ! getent passwd haproxy &>/dev/null; then + useradd -r -d /var/lib/haproxy -g haproxy -s /bin/false haproxy + fi + + chown gerbera:gerbera /var/lib/haproxy +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + if getent passwd haproxy &>/dev/null; then + userdel haproxy >/dev/null + fi + if getent group haproxy &>/dev/null; then + groupdel haproxy >/dev/null + fi +} diff --git a/haproxy/haproxy.run b/haproxy/haproxy.run new file mode 100644 index 0000000..4082bc6 --- /dev/null +++ b/haproxy/haproxy.run @@ -0,0 +1,4 @@ +#!/bin/sh + +haproxy -W -f /etc/haproxy/haproxy.cfg +exec pause 2>&1 diff --git a/haproxy/use-CFLAGS-and-LDFLAGS-when-building-admin.patch b/haproxy/use-CFLAGS-and-LDFLAGS-when-building-admin.patch new file mode 100644 index 0000000..1422c6b --- /dev/null +++ b/haproxy/use-CFLAGS-and-LDFLAGS-when-building-admin.patch @@ -0,0 +1,39 @@ +diff --git a/admin/iprange/Makefile b/admin/iprange/Makefile +index 13598d8..eb89fb9 100644 +--- a/admin/iprange/Makefile ++++ b/admin/iprange/Makefile +@@ -7,7 +7,7 @@ OBJS = iprange ip6range + all: $(OBJS) + + %: %.c +- $(CC) $(LDFLAGS) $(OPTIMIZE) -o $@ $^ ++ $(CC) $(OPTIMIZE) $(CFLAGS) $(LDFLAGS) -o $@ $^ + + clean: + rm -f $(OBJS) *.o *.a *~ +diff --git a/dev/poll/Makefile b/dev/poll/Makefile +index fdee514..9be926c 100644 +--- a/dev/poll/Makefile ++++ b/dev/poll/Makefile +@@ -5,7 +5,7 @@ INCLUDE = + OBJS = poll + + poll: poll.c +- $(CC) $(OPTIMIZE) $(DEFINE) $(INCLUDE) -o $@ $^ ++ $(CC) $(OPTIMIZE) $(CFLAGS) $(LDFLAGS) $(DEFINE) $(INCLUDE) -o $@ $^ + + clean: + rm -f $(OBJS) *.[oas] *~ +diff --git a/dev/tcploop/Makefile b/dev/tcploop/Makefile +index 42a6259..e8a6ff7 100644 +--- a/dev/tcploop/Makefile ++++ b/dev/tcploop/Makefile +@@ -5,7 +5,7 @@ INCLUDE = + OBJS = tcploop + + tcploop: tcploop.c +- $(CC) $(OPTIMIZE) $(DEFINE) $(INCLUDE) -o $@ $^ ++ $(CC) $(OPTIMIZE) $(CFLAGS) $(LDFLAGS) $(DEFINE) $(INCLUDE) -o $@ $^ + + clean: + rm -f $(OBJS) *.[oas] *~ diff --git a/harfbuzz/PKGBUILD b/harfbuzz/PKGBUILD new file mode 100644 index 0000000..b7075c1 --- /dev/null +++ b/harfbuzz/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgbase=harfbuzz +pkgname=('harfbuzz' 'harfbuzz-icu') +pkgver=2.6.7 +pkgrel=3 +pkgdesc="OpenType text shaping engine" +url='https://harfbuzz.github.io/' +arch=('i686' 'x86_64') +license=('custom:Old-Style-Expat') +makedepends=('glib2' 'freetype2' 'graphite' 'cairo' 'icu' 'gobject-introspection' 'ragel' 'python') +source=("https://github.com/harfbuzz/harfbuzz/releases/download/${pkgver}/${pkgbase}-${pkgver}.tar.xz") +sha512sums=('6fdd6e0952a73e1949349aa5416ef8fb3fc351b15c95be4fe1f341b111159fe58113b73a334db2697f4e3aaef5a761bd8f1d8964514406cad40f9862768d59de') + +prepare() { + cd $pkgbase-$pkgver + autoreconf +} + +build() { + cd $pkgbase-$pkgver + ./configure \ + --prefix=/usr \ + --with-cairo \ + --with-freetype \ + --with-glib \ + --with-gobject \ + --with-graphite2 \ + --with-icu \ + --disable-gtk-doc + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package_harfbuzz() { + depends=('glib2' 'freetype2' 'graphite') + optdepends=('cairo: hb-view program') + + cd $pkgbase-$pkgver + make DESTDIR="$pkgdir" install + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING + + # split up harfbuzz-icu + mkdir -p ../hb-icu/usr/{include/harfbuzz,lib/pkgconfig}; cd ../hb-icu + mv "$pkgdir"/usr/lib/libharfbuzz-icu* ./usr/lib + mv "$pkgdir"/usr/lib/pkgconfig/harfbuzz-icu.pc ./usr/lib/pkgconfig + mv "$pkgdir"/usr/include/harfbuzz/hb-icu.h ./usr/include/harfbuzz +} + +package_harfbuzz-icu() { + pkgdesc="$pkgdesc (ICU integration)" + depends=("harfbuzz=$pkgver-$pkgrel" 'icu') + + mv hb-icu/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 $pkgbase-$pkgver/COPYING +} diff --git a/haveged/PKGBUILD b/haveged/PKGBUILD new file mode 100644 index 0000000..c2d556f --- /dev/null +++ b/haveged/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=haveged +pkgver=1.9.14 +pkgrel=2 +pkgdesc='Entropy harvesting daemon using CPU timings' +arch=('i686' 'x86_64') +url='https://github.com/jirka-h/haveged' +license=('GPL-3') +depends=('glibc') +source=("$pkgname-$pkgver.tar.gz::https://github.com/jirka-h/$pkgname/archive/v$pkgver.tar.gz" + "haveged.initd" + "haveged.confd" + "haveged.run") +sha512sums=('bdb6d9de667298d32b474bcbdd5f90c12b870b154b86f8817948de787d378b428bf823234f20129666bd1abced2f154643b5999e43975969f6bba87124650924' + 'b5ed26c8a856c6b6f7a35ee9326f3692c577e3abf9714d53b143e4899e6ee3bce7dfa6c6c707166e62d386295637bebcc9b47fc735bcb7deb3201169223bdf5f' + '955dfe69c9f4d892afc4cd5a8e7371d2ffdc4446df5b6174e9e32f5520a44eaf435f50c47271c98ccb19d2e3fcc0a0bf2424d5c110f5436865d3c88acdfa49e2' + '9147a642ebc7141215deb9b3ae11d764234c58cf6a196a22f5ac8d69249b1c4514b97d15254d8560a90fc19d73ba0de36c6a273d50c050684283387cdba0d755') + +prepare() { + cd $pkgname-$pkgver + autoreconf -vif +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-static + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + rm "$pkgdir"/usr/lib/libhavege.la + + # services + install -Dm644 "$srcdir"/haveged.confd "$pkgdir"/etc/conf.d/haveged + install -Dm755 "$srcdir"/haveged.initd "$pkgdir"/etc/init.d/haveged + install -Dm 755 "$srcdir/haveged.run" "$pkgdir/etc/sv/haveged/run" + + # license + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/haveged/haveged.confd b/haveged/haveged.confd new file mode 100644 index 0000000..ee3ec1d --- /dev/null +++ b/haveged/haveged.confd @@ -0,0 +1,7 @@ +# Configuration file for /etc/init.d/haveged + +# Additional arguments to pass to haveged. +#command_args= + +# Uncomment to use process supervisor. +#supervisor="supervise-daemon" diff --git a/haveged/haveged.initd b/haveged/haveged.initd new file mode 100644 index 0000000..21fe313 --- /dev/null +++ b/haveged/haveged.initd @@ -0,0 +1,15 @@ +#!/sbin/openrc-run + +description="Entropy harvesting daemon using CPU timings" + +command="/usr/sbin/haveged" +# $HAVEGED_OPTS is here for backward compatiblity only +command_args="--Foreground ${command_args:-$HAVEGED_OPTS}" +command_background="yes" +pidfile="/run/$RC_SVCNAME.pid" + +depend() { + need localmount + after urandom + provide entropy +} diff --git a/haveged/haveged.run b/haveged/haveged.run new file mode 100644 index 0000000..30abcbd --- /dev/null +++ b/haveged/haveged.run @@ -0,0 +1,3 @@ +#!/bin/sh +exec 1>&2 +exec haveged -w 1024 -v 1 -F diff --git a/help2man/PKGBUILD b/help2man/PKGBUILD new file mode 100644 index 0000000..fa30868 --- /dev/null +++ b/help2man/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=help2man +pkgver=1.48.1 +pkgrel=1 +pkgdesc="Conversion tool to create man files" +arch=('i686' 'x86_64') +url="https://www.gnu.org/software/help2man/" +license=('GPL-3') +depends=('perl-locale-gettext') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.xz"{,.sig}) +sha512sums=('506e7a0e6571facc570df57b875d6d6b911b281b38af1831d3a058a6de658c3656e3a5be970fa3d89c053ab6eafd4853527512b48524ceeff6da60f946f1ecef' + 'SKIP') +validpgpkeys=('87EA44D150D89615E39A3FEEF0DC8E00B28C5995') # Brendan O'Dea + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/herbe/PKGBUILD b/herbe/PKGBUILD new file mode 100644 index 0000000..cfd7013 --- /dev/null +++ b/herbe/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=herbe +pkgver=1.0.0 +pkgrel=1 +epoch=1 +pkgdesc='Daemon-less notifications, minimal and lightweight.' +arch=('i686' 'x86_64') +url='https://github.com/dudik/herbe' +license=('Expat' 'Public-Domain') +depends=('libx11' 'libxft') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/dudik/${pkgname}/archive/${pkgver}.tar.gz" + "notify-send") +sha512sums=('3f49de25fd92194d1354054c207616343d9c21a9d82c6c4e3316ebc5228c0bd90650621438d14cd4730135f328c0438ef054a2b6843f3bd4d15f9cb47a22df12' + 'bc6f21bf1e483a9b73bc13a57505c2b964528b30fe02f45c68b57570e3b838fb04e77d407e5b947fa76954f49098bd4dcf6b951c66ba57938ac93eb0c185771d') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + # handling binaries + install -d -m0755 "${pkgdir}/usr/bin" + mv "${pkgdir}/usr/local/bin/herbe" "${pkgdir}/usr/bin/herbe" + rm -rf "${pkgdir}/usr/local/" + cp "${srcdir}/notify-send" "${pkgdir}/usr/bin/" + chmod +x "${pkgdir}/usr/bin/notify-send" + + # license + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/herbe/notify-send b/herbe/notify-send new file mode 100644 index 0000000..3a3872b --- /dev/null +++ b/herbe/notify-send @@ -0,0 +1,81 @@ +#!/bin/sh +# Shell script to redirect notify-send calls to herbe. The purpose is to ignore +# options passed to notify-send. +# +# Option parser generated by getoptions +# URL: https://github.com/ko1nksm/getoptions +# LICENSE: Creative Commons Zero v1.0 Universal + +usage() { + printf '%s\n' "${0##*/}: notify-send replacement for herbe" "accepts but ignores all notify-send options." +} + +REST='' +parse() { + OPTIND=$(($#+1)) + while [ $# -gt 0 ] && OPTARG=; do + case $1 in + --?*=*) OPTARG=$1; shift + eval 'set -- "${OPTARG%%\=*}" "${OPTARG#*\=}"' ${1+'"$@"'} + ;; + -[utich]?*) OPTARG=$1; shift + eval 'set -- "${OPTARG%"${OPTARG#??}"}" "${OPTARG#??}"' ${1+'"$@"'} + ;; + -[!-]?*) OPTARG=$1; shift + eval 'set -- "${OPTARG%"${OPTARG#??}"}" "-${OPTARG#??}"' ${1+'"$@"'} + OPTARG= ;; + esac + case $1 in + -u | --urgency) + [ $# -le 1 ] && set -- "$1" required && break + OPTARG=$2 + _=$OPTARG + shift ;; + -t | --expire-time) + [ $# -le 1 ] && set -- "$1" required && break + OPTARG=$2 + _=$OPTARG + shift ;; + -i | --icon) + [ $# -le 1 ] && set -- "$1" required && break + OPTARG=$2 + _=$OPTARG + shift ;; + -c | --category) + [ $# -le 1 ] && set -- "$1" required && break + OPTARG=$2 + _=$OPTARG + shift ;; + -h | --hint) + [ $# -le 1 ] && set -- "$1" required && break + OPTARG=$2 + _=$OPTARG + shift ;; + -? | --help) + usage + exit 0 ;; + --) shift + while [ $# -gt 0 ]; do + REST="${REST} \"\${$(($OPTIND-$#))}\"" + shift + done + break ;; + [-]?*) set -- "$1" unknown && break ;; + *) REST="${REST} \"\${$(($OPTIND-$#))}\"" + esac + shift + done + [ $# -eq 0 ] && return 0 + case $2 in + unknown) echo "unrecognized option '$1'" ;; + noarg) echo "option '$1' doesn't allow an argument" ;; + required) echo "option '$1' requires an argument" ;; + pattern) echo "option '$1' does not match the pattern ($3)" ;; + *) echo "option '$1' validation error: $2" + esac >&2 + exit 1 +} + +parse "$@" +eval set -- "$REST" +herbe "$@" & diff --git a/herbstluftwm/PKGBUILD b/herbstluftwm/PKGBUILD new file mode 100644 index 0000000..7293ac3 --- /dev/null +++ b/herbstluftwm/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=herbstluftwm +pkgver=0.9.5 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Manual tiling window manager for X" +arch=('i686' 'x86_64') +url='https://herbstluftwm.org' +license=('Simplified-BSD') +depends=('glib2' 'libxinerama' 'libxrandr' 'libxfixes' 'libxft') +makedepends=('cmake' 'asciidoc' 'quilt') +optdepends=('xenocara-xsetroot: to set wallpaper color in default autostart' + 'xterm: used as the terminal in default autostart' + 'dzen2: used in the default panel.sh' + 'dmenu: used in some example scripts') +source=("https://herbstluftwm.org/tarballs/${pkgname}-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/h/herbstluftwm/herbstluftwm_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('a85fd1ab16b873f512d6965cc4a93524e3ed4a15079d0d4ee54012e217bd41db3b54729c1b30ee361c34b38799f95bc537099056ba7a5f791bf2be6724bc92c3' + 'SKIP' + 'a44006422f8c3ce5b5bd6bb5a8a7c6a13a255ed85c7f2ee4d2ab1027297f22814e3ef7acd2fa4f471297936e6601a667fa69fa45951073f37235418e48fd8c29') +validpgpkeys=('72B6C05CDFF309C6396167D464EF02821CAFF810') # Thorsten WiĂźmann + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DBASHCOMPLETIONDIR=/usr/share/bash-completion/completions \ + -DZSHCOMPLETIONDIR=/usr/share/zsh/functions/Completion/X \ + -DCMAKE_INSTALL_PREFIX="/usr" + make -C build +} + +package() { + make -C build DESTDIR="$pkgdir" install + install -d "$pkgdir"/usr/share/licenses/$pkgname/ + install -Dm644 "$pkgdir"/usr/share/doc/$pkgname/LICENSE "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/hex-a-hop/PKGBUILD b/hex-a-hop/PKGBUILD new file mode 100644 index 0000000..b2756b0 --- /dev/null +++ b/hex-a-hop/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=hex-a-hop +pkgver=1.1.0 +pkgrel=3 +pkgdesc="A free and libre puzzle game based on hexagonal tiles" +arch=('i686' 'x86_64') +url='https://hexahop.sourceforge.net' +license=('GPL-2' 'CC-BY-SA-4.0' 'CC0-1.0') +depends=('sdl' 'sdl_mixer' 'sdl_ttf') +groups=('games') +mksource=("https://downloads.sourceforge.net/project/hexahop/${pkgver}/${pkgname}-${pkgver}.tar.gz") +source=("https://repo.hyperbola.info:50000/sources/${pkgname}-libre/${pkgname}-libre-${pkgver}.tar.gz"{,.sig} + "https://repo.hyperbola.info:50000/sources/${pkgname}-libre/${pkgname}-libre-data.tar.gz"{,.sig} + "hex-a-hop.desktop" + "hex-a-hop.png" + "libre.patch") +mksha512sums=('d8f7c1ab576d499595a09703a699654b88548b7266441af8f8af5287cfdcc998389faba024650214f3cb85f359a238802ecbcecbb699e5aa80ad7c5cf02a6bcd') +sha512sums=('f51c5020178432ae8a641641e88e92ec73e70da8b93a63737ba770782e04d748effff68dfd95e54cb5f726e235a1ce39992fd6b39c8193964e7e7aea10beb280' + 'SKIP' + '5b4c9376987f8bf9780a758e842d1453d1c61bec4c43fe0b66ae465dee5d0d120f376c53e31f9c49cd8ce5eddc50407571818d6eecd9b1f401228d6ae0b6e239' + 'SKIP' + 'b7d84ecbd5c7d735c0defadf27c14f3a352dd368860e62c71db8a8d489dc7dbefb421cc79cccdff8feebf0d86aee85e08e6d3a5b9fb0e23db69ec55a1968db81' + 'd5c60e794f3f114cfb7e77ce147573cb7dc0641f0073e3b40cbb7cfe37482c4dfb975c2d2bef0b3f4716978a3e456d9e6025421598fdffc59400169d6a2c6bb4' + '0f7412c8535c5692854253679fb4ed39f9ff67e2f9b9586392d64fa0ad31d096df8b40f879d94689c4999d1cd27339dd6850dc69ce6b2405d1665bfcbd194a0c') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva +noextract=("$pkgname-libre-data.tar.gz") + +mksource() { + cd "$pkgname-$pkgver" + + # remove nonfree data + cd ./data + find . -type f -name '*nonfree*' -exec rm -v {} + +} + +prepare() { + cd "$pkgname-$pkgver" + + # replacing missing data + tar -xzf "$srcdir/$pkgname-libre-data.tar.gz" -C "data/" + + # removing nonfree data-definitions within code + patch -Np1 -i ${srcdir}/libre.patch +} + +build() { + cd "$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + + install -Dm644 "$srcdir/hex-a-hop.desktop" -t "$pkgdir/usr/share/applications" + install -Dm644 "$srcdir/hex-a-hop.png" -t "$pkgdir/usr/share/icons" +} diff --git a/hex-a-hop/hex-a-hop.desktop b/hex-a-hop/hex-a-hop.desktop new file mode 100644 index 0000000..6476d75 --- /dev/null +++ b/hex-a-hop/hex-a-hop.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Hex-a-Hop +Comment=A puzzle game based on hexagonal tiles +Exec=hex-a-hop +Icon=/usr/share/icons/hex-a-hop.png +Terminal=false +Type=Application +Categories=Game;LogicGame; +StartupNotify=false diff --git a/hex-a-hop/hex-a-hop.png b/hex-a-hop/hex-a-hop.png new file mode 100644 index 0000000000000000000000000000000000000000..03ffd6c2b79309bc98c0a55628e3a6b5c79f9de1 GIT binary patch literal 4125 zcmV+&5aRENP)7R*RtW;A`W&tpDI0Il7pf6+?FKQTK)U5qM= z#Ihk~YkIS;K744`_J43}!~5ITZ zXcLET&rDBfb9pZNSqLwy(Foh#_%m_Y!X&@#z)t(OLzk4_I?!XiIoir^J@}3w%cQir z?XQ_|^LOX^?9T*1u%Yc1_l(Y^T>nto7)yV(m>t_{>J__En3~SNw|_PJ>q9?fT^HsV zjhkZ43oid$0Z;<*pxhd~P4+-AQN6P?J9$jN8d}lLj~%+zdv)LQ=xkQd9)47mL&_f& zKr-3DoG^fJ!&M7bENl)8=SPZ}v8Vpf8pqOId%AclyKAr(KWkx6DA{%69~D3@H*>;~ zFNFhFgc1o9M<;)7nN{a_>neqb6o$(WwML?V>RrY268pJuAxAbB&StV8HnZ)M*48qq z2eP{k=32X()~Jz|*3Sh1O<^JjhDROOHV%E#T0<+;3L}}9+UK>4q7u0H{}lko2~057 z*1||~)SjMw+o%;zsM?yP+S66bgcy>qJfX_|aW~aKm~UuZx`{7LEb$m2P-2u zS~;7i=`q^cEU2NYJkD8T*d@cUG>2t4C~9nRaDHckiv(g$TSJg&+BvZ^`VNM=y0%%R zk|qkFLuRe?Dm*f58I@xTmxtZc(^;F3$}1!#%$a)GJ*i3@4278`i&j5;9SLtbchJH; zdOwEP3fy3wnj;F=(FP_I1j8_Jt2GeQ1S}JzTm=XLYdv98)7SqN_0qB^&>c-oG&HwuC z#TPQzGmdhph>2nj&p0D^qPq&~v~GwC=Ywx)0wYOa*m`Cqt_xyXboXi+Jj3*_f>l*; zp#WG(22Xt7C2%wyW^NYFoadQp$FT#ws;E@w+j1;XP0J1`seII4Q)&N zE|SBK+`unn>=y1=;!l3{> zaA3f(ELh?%W9Tm~2N01IXv-rgH8!kapW&WY^~jc4V+x!gtpxDGoB#x)tzB0+kw5D- zb>xYKeq^yzEMe%mwvh3ANIG)bV*#aytoVijDNDKjnQN{#o z;I$qR@$=W9ClsdwHOeY%;(}oaJ!eQ=^ZqUZ2njsGf`l+9K;}3qIIYSoho~Uc0T36u z<3Mw5q>UOzt7YiK1Jl$Da_yz7Mz{VNqOL5PGXO!7*9J;F4xx-am_@%(g0TK_w8fI} z;GtyMusshZ@u=IdM`J)>Si}U83LXJuI+3>xYVt5IQj<#@ONI6o zAL0abs6osNgy9ha&2vz&ExOK+1>ep5wQ)(V$AjmgRSnW>zJ(H^43*$c18aL0uIv~Yd?$6n01D}Y|GBrJyJ^zWZ;sjK0{h~N;5$Ix(h=Z9@GJwB72y(^ zXsGbr!7x^YlbA7e4AzRsm^uWuu4#_$3~b^dp!peyqpno*917OApnq(VRg_%|j!6*a z1*~kJhnJH|temd?1%L-n7=Y{AzG(l%vfN`zTWh}*P*=e70G5U6`6l0@#bC8WK~ES} z1ULa8CfJ|~S1g=2CjcM163ZYST*N5~>|7pPJPIOkc)t;F;X>hLBqSO8%X#z{GDuZR zuo!}*q=NOc5zC@g4$z>VGOExW-`^cLuxKnK1PL|QfnnF#LbIeGt!p&M3Gv_(4@9&s zP=ZN8ujcGIkvU#e`;?9br7;kOGc!vmfv?&3>o!XRk);7WP@KVdIgiR@3Npi?K?=~C z5EVoUa8j>Q4g1zHJO@?VLe;UTtNDSeyAI7nMc1P7lDBpGj%X|aH^9ZfFw5u6Mp;pq zAMR|YK?s(i6v5Avbr4>?KoNq2l>(;C8fw`LxL^=*S%vP|6ljo_Fl}nsSI*;btwddL zLa$&_D`TQoLe{KN|M!*SA05}P7X-OlnF5vKF(4FR1SQlxXBQGwWdUi3qf)EDD^~!= zucd(Hn-v5uAt>86W=suQwG7X+5NvLN$_q$o6~x05YL0~?S_Pw85w7cEO4p!Q%7AG? zloi;a5DjvL=iz|B@LUvYRT!BpYO;#Zf?n`bQ}Fg=y5IWVXCBGsFzPrE7cWFi2~vyc z=`_4@31uIwD1z7yWGNPz698V2MR9&xlo5mv`wZWWJP!`*Q43J+1A?#`#Iz)#JT-}8 zr3y9{0oT%sX--4l)ZkUBkW*D~L(9+^2UeZ0fzJ*ju83ISICx_`g@MivIFf?t{4Bf! zgTQ;^qvmL)m7IU3k z5aD4@v5N9JD`72J45m`UirFTd*4lt)U;io0z&*Hf!$QQX<6sI?*gbd{7oMHKBZtSa zBcQ_Gvk%xe3{eYTO)7?jshu~1g}y96BAH# z9K-})c7~?FC?Qzi)`&OX8$n;F0Rsc?B4`tQHGVek+H?y7Y83wEFs&ZTge!M){D`W?%x`Z;6!Nj3E>FR)B9$}mD59~TON`0Zl8 zKvSOXS|4O1zcM#?E(A%!TZblb%f_2=QCkmwapUc{{wo_04l&sA=5~yY9ziG=L`k>7 zI`uA*W9#u1RAk(|_RHvLpAVy^zj#!5oJv#gu;HNphB_cs0V9gAr!(MNn_wyo%C?EP zsK6s0K(0UysYabUCj2^Q$3>BJTZhKejx+AKPEM6{Ug!H4uf$19n-5^pO{q zYQX;eJN)AEt50J#N`7~C$Z#B3L4Z4(hn>{c+0d+lYk*%9d8yGp7$GfAAv5gK=Dhc!`#L z!gJu0ao9t{u!e@gH#VRajncH~2X!tGK%rd5;&~moX-x;7y#FrrockwOxAr2$qZK&L zqsSHVXlfonbk>E`82#W~hf>p6)X|K^ZE?SI+iMx++$jUltA$Kxwwi4el}6vkP0t1w z3WAMA;bwEN(;0A)FzllxtpWqle*QnZ4xm^iJKNg3n8}GF+&!>v@i6440dJrx27EzNMJr{NqKhuztR=0p=##u{lH>|445si_Hg zsVN8?k9B9QfFg_ark*)=8ecO^%ofYwITmk@P2l^7#!ztCtff`=etKVM?A!~5sVOu{ z3VH%jG^rs-kqFpW45X&RJ(5DBs368m=#+!FaP1e6Sob9?z4RJvdv63UzP=MPg)-$% zAI*uXBw}J_7Pme767Cq80Ka4j*o-z{Xa&lnB_+z#r-N}ul2qoT04P!Jzcagc>&=pk z4kbW^<$dbwj|Wu+&cPw%GE*p7CT&V2LBvkZM5wz5cl_f&!8MvG#Q zL$zNFmgQ|h^#sj5m}*>I4R1Q7#qWLH*BKA zt2g_1AeBm?T&>W)y0g6^_o_z9|wblIi8=ndQ zHOX^wZ}KVbvTHVIz!K6`uRzh0<$nHk)< zZar?g`Y);Q6re2QvFmSvH#CZ*AfrVJV0_?hj2|Av=GR}s&tCimK2AZ+Ev*Xe=GhEqSfys-;+eCuz1@BSCgJ{NbdTaV0p`vJ>Fh!=79 ziVJY>vhz{M&(c=%xNR#hpj53uH}s>E5C+$O{W^Buf}ZCQ-vl0L$DR}bK?+dqtMRt;uKVUUoKmTH+?SiCK{DA4IhF0@SGN+wFpjap4 + +pkgname=hexchat-legacy +_realpkgname=hexchat +pkgver=2.14.3 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="An easy to use graphical IRC (chat) client (legacy version)" +arch=('i686' 'x86_64') +url='https://hexchat.github.io/' +license=('GPL-2' 'Expat' 'LGPL-2.1') +provides=('hexchat') +conflicts=('hexchat') +depends=('desktop-file-utils' 'gdk-pixbuf2' 'glib2' 'gtk2' + 'libproxy' 'libressl' 'pango' 'pciutils') +makedepends=('intltool' 'iso-codes' 'lua' 'meson' 'perl' 'python-cffi' 'quilt') +optdepends=('enchant: Spell check' + 'iso-codes: Display language names instead of codes' + 'lua: Lua plugin' + 'perl: Perl plugin' + 'python-cffi: Python plugin') +source=("${_realpkgname}-${pkgver}.tar.gz::https://github.com/hexchat/hexchat/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/h/hexchat/hexchat_${_debver}-${_debrel}+deb11u1.debian.tar.xz" + "remove-defaults.patch") +sha512sums=('6ba007a67f47447def091e4615620c84beef8737b5f8015574557f644444ad4a2ac795622aeb831528a5ec1a9b387f0974dc30bbf6aafb53434953a941a97dfe' + 'ea111ea8c64a1c13af025a4b5bc037f350d8e5a2cff828c4f5dd4f99d28cd55808b6d6a5690086b065e2effe982b53b913c0442c84fda074facd1d4981b77895' + '36b0e6927c8e62e7dad79559d76368fc35073376cbf215b76ac1800d8d012e0bcf89bdbd71eecbbabae17d8e14d4cb53ec37e0f9474257a051baf7c156950a3a') + +prepare() { + cd $_realpkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # we do not want some proposals for IRC-servers here + # especially not hardcoded ones + patch -Np1 -i ${srcdir}/remove-defaults.patch +} + +build() { + hyperbola-meson $_realpkgname-$pkgver build \ + -Dwith-lua='lua' \ + -Dwith-text='true' \ + -Dwith-libcanberra='false' \ + -Dwith-libnotify='false' \ + -Dwith-dbus='false' + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install + + cd $_realpkgname-$pkgver + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/hexchat-legacy/remove-defaults.patch b/hexchat-legacy/remove-defaults.patch new file mode 100644 index 0000000..af222e6 --- /dev/null +++ b/hexchat-legacy/remove-defaults.patch @@ -0,0 +1,413 @@ +--- a/src/common/servlist.c 2024-01-08 21:59:00.000000000 +0100 ++++ b/src/common/servlist.c 2024-01-08 22:06:05.648354845 +0100 +@@ -37,336 +37,6 @@ + #include "servlist.h" + + +-struct defaultserver +-{ +- char *network; +- char *host; +- char *channel; +- char *charset; +- int loginmode; /* default authentication type */ +- char *connectcmd; /* default connect command - should only be used for rare login types, paired with LOGIN_CUSTOM */ +- gboolean ssl; +-}; +- +-static const struct defaultserver def[] = +-{ +- {"2600net", 0}, +- /* Invalid hostname in cert */ +- {0, "irc.2600.net"}, +- +- {"2ch", 0, 0, "iso-2022-jp", 0, 0}, +- {0, "irc.2ch.sc"}, +- {0, "irc.nurs.or.jp"}, +- {0, "irc.juggler.jp"}, +- +- {"AccessIRC", 0}, +- /* Self signed */ +- {0, "irc.accessirc.net"}, +- +- {"AfterNET", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.afternet.org"}, +- +- {"Aitvaras", 0}, +-#ifdef USE_OPENSSL +- {0, "irc.data.lt/+6668"}, +- {0, "irc.omnitel.net/+6668"}, +- {0, "irc.ktu.lt/+6668"}, +- {0, "irc.kis.lt/+6668"}, +- {0, "irc.vub.lt/+6668"}, +-#endif +- {0, "irc.data.lt"}, +- {0, "irc.omnitel.net"}, +- {0, "irc.ktu.lt"}, +- {0, "irc.kis.lt"}, +- {0, "irc.vub.lt"}, +- +- {"Anthrochat", 0, 0, 0, 0, 0, TRUE}, +- {0, "irc.anthrochat.net"}, +- +- {"ARCNet", 0}, +- {0, "arcnet-irc.org"}, +- +- {"AustNet", 0}, +- {0, "irc.austnet.org"}, +- +- {"AzzurraNet", 0}, +- {0, "irc.azzurra.org"}, +- +- {"BetaChat", 0, 0, 0, LOGIN_SASL}, +- {0, "irc.betachat.net"}, +- {"BuddyIM", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.buddy.im"}, +- {"Canternet", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.canternet.org"}, +- +- {"Chat4all", 0, 0, 0, 0, 0, TRUE}, +- {0, "irc.chat4all.org"}, +- +- {"ChatJunkies", 0}, +- {0, "irc.chatjunkies.org"}, +- +- {"ChatNet", 0}, +- {0, "irc.chatnet.org"}, +- +- {"ChatSpike", 0, 0, 0, LOGIN_SASL}, +- {0, "irc.chatspike.net"}, +- +- {"ChattingAway", 0}, +- {0, "irc.chattingaway.com"}, +- +- {"Criten", 0}, +- /* Self signed */ +- {0, "irc.criten.net"}, +- +- {"DALnet", 0, 0, 0, LOGIN_NICKSERV}, +- /* Self signed */ +- {0, "us.dal.net"}, +- +- {"DarkMyst", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.darkmyst.org"}, +- +- {"Dark-Tou-Net", 0}, +- {0, "irc.d-t-net.de"}, +- +- {"DeltaAnime", 0}, +- {0, "irc.deltaanime.net"}, +- +- {"EFnet", 0}, +- {0, "irc.choopa.net"}, +- {0, "irc.paraphysics.net"}, +- {0, "efnet.port80.se"}, +- {0, "irc.underworld.no"}, +- {0, "irc.inet.tele.dk"}, +- +- {"ElectroCode", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.electrocode.net"}, +- +- {"EnterTheGame", 0}, +- {0, "irc.enterthegame.com"}, +- +- {"EntropyNet", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.entropynet.net"}, +- +- {"EsperNet", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.esper.net"}, +- +- {"EUIrc", 0}, +- {0, "irc.euirc.net"}, +- +- {"EuropNet", 0}, +- /* Self signed */ +- {0, "irc.europnet.org"}, +- +- {"FDFNet", 0}, +- /* Self signed */ +- {0, "irc.fdfnet.net"}, +- +- {"freenode", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "chat.freenode.net"}, +- /* irc. points to chat. but many users and urls still reference it */ +- {0, "irc.freenode.net"}, +- +- {"GalaxyNet", 0}, +- {0, "irc.galaxynet.org"}, +- +- {"GameSurge", 0}, +- {0, "irc.gamesurge.net"}, +- +- {"GeeksIRC", 0, 0, 0, LOGIN_SASL}, +- /* Self signed */ +- {0, "irc.geeksirc.net"}, +- +- {"GeekShed", 0, 0, 0, 0, 0, TRUE}, +- {0, "irc.geekshed.net"}, +- +- {"German-Elite", 0, 0, "CP1252"}, +- {0, "irc.german-elite.net"}, +- +- {"GIMPNet", 0}, +- /* Invalid hostname in cert */ +- {0, "irc.gimp.org"}, +- {0, "irc.gnome.org"}, +- +- {"GlobalGamers", 0}, +-#ifdef USE_OPENSSL +- {0, "irc.globalgamers.net/+6660"}, +-#endif +- {0, "irc.globalgamers.net"}, +- +-#ifdef USE_OPENSSL +- {"hackint", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.hackint.org"}, +-#endif +- +- {"Hashmark", 0}, +- {0, "irc.hashmark.net"}, +- +- {"IdleMonkeys", 0}, +- {0, "irc.idlemonkeys.net"}, +- +- {"IndirectIRC", 0, 0, 0, LOGIN_SASL}, +- /* Self signed */ +- {0, "irc.indirectirc.com"}, +- +- {"Interlinked", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.interlinked.me"}, +- +- {"IRC4Fun", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.irc4fun.net"}, +- +- {"IRCHighWay", 0, 0, 0, 0, 0, TRUE}, +- {0, "irc.irchighway.net"}, +- +- {"IRCNet", 0}, +- {0, "open.ircnet.net"}, +- +- {"Irctoo.net", 0}, +- {0, "irc.irctoo.net"}, +- +- {"iZ-smart.net", 0, 0, "CP1252"}, +- {0, "irc.iz-smart.net"}, +- +- {"KBFail", 0}, +- /* SSL is self-signed */ +- {0, "irc.kbfail.net"}, +- +- {"Krstarica", 0}, +- {0, "irc.krstarica.com"}, +- +- {"LibraIRC", 0}, +- /* Self signed */ +- {0, "irc.librairc.net"}, +- +- {"Libera.Chat", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.libera.chat"}, +- +-#ifdef USE_OPENSSL +- {"LinkNet", 0}, +- {0, "irc.link-net.org/+7000"}, +-#endif +- +- {"MindForge", 0, 0, 0, LOGIN_SASL}, +- {0, "irc.mindforge.org"}, +- +- {"MIXXnet", 0}, +- {0, "irc.mixxnet.net"}, +- +- {"Moznet", 0, 0, 0, 0, 0, TRUE}, +- {0, "irc.mozilla.org"}, +- +- {"ObsidianIRC", 0}, +- /* Self signed */ +- {0, "irc.obsidianirc.net"}, +- +- {"Oceanius", 0, 0, 0, LOGIN_SASL}, +- /* Self signed */ +- {0, "irc.oceanius.com"}, +- +- {"OFTC", 0, 0, 0, 0, 0, TRUE}, +- {0, "irc.oftc.net"}, +- +- {"OtherNet", 0}, +- {0, "irc.othernet.org"}, +- +- {"OzNet", 0}, +- {0, "irc.oz.org"}, +- +- {"PIRC.PL", 0, 0, 0, 0, 0, TRUE}, +- {0, "irc.pirc.pl"}, +- +- {"PonyChat", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.ponychat.net"}, +- +- {"PTNet.org", 0}, +- /* Note that the network suggests ISO-8859-1 but most users ignore this */ +- {0, "uevora.ptnet.org"}, +- {0, "vianetworks.ptnet.org"}, +- +- {"QuakeNet", 0, 0, 0, LOGIN_CHALLENGEAUTH}, +- {0, "irc.quakenet.org"}, +- +- {"Rizon", 0, 0, 0, 0, 0, TRUE}, +- {0, "irc.rizon.net"}, +- +- {"RusNet", 0, 0, "KOI8-R (Cyrillic)"}, +- /* Self signed */ +- {0, "irc.tomsk.net"}, +- {0, "irc.run.net"}, +- {0, "irc.ru"}, +- {0, "irc.lucky.net"}, +- +- {"SceneNet", 0}, +- {0, "irc.scene.org"}, +- +- {"SeilEn.de", 0, 0, "CP1252"}, +- {0, "irc.seilen.de"}, +- +- {"Serenity-IRC", 0}, +- {0, "irc.serenity-irc.net"}, +- +- {"SlashNET", 0}, +- /* Self signed */ +- {0, "irc.slashnet.org"}, +- +- {"Snoonet", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.snoonet.org"}, +- +- {"Sohbet.Net", 0, 0, "CP1254"}, +- {0, "irc.sohbet.net"}, +- +- {"SolidIRC", 0}, +- /* Self signed */ +- {0, "irc.solidirc.com"}, +- +- {"SorceryNet", 0, 0, 0, LOGIN_SASL}, +- /* Self signed */ +- {0, "irc.sorcery.net"}, +- +- {"SpotChat", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.spotchat.org"}, +- +- {"StarChat", 0}, +- {0, "irc.starchat.net"}, +- +- {"Station51", 0}, +- /* Self signed */ +- {0, "irc.station51.net"}, +- +- {"StormBit", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.stormbit.net"}, +- +- {"SwiftIRC", 0}, +- /* Expired cert */ +- {0, "irc.swiftirc.net"}, +- +- {"synIRC", 0}, +- /* Self signed */ +- {0, "irc.synirc.net"}, +- +- {"Techtronix", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.techtronix.net"}, +- +- {"TURLINet", 0, 0, 0, 0, 0, TRUE}, +- /* Other servers use CP1251 and invalid certs */ +- {0, "irc.servx.ru"}, +- +- {"UnderNet", 0, 0, 0, LOGIN_CUSTOM, "MSG x@channels.undernet.org login %u %p"}, +- {0, "us.undernet.org"}, +- +- {"UniBG", 0, 0, "CP1251", LOGIN_CUSTOM, "MSG NS IDENTIFY %p"}, +- {0, "irc.lirex.com"}, +- {0, "irc.naturella.com"}, +- {0, "irc.techno-link.com"}, +- +- {"Worldnet", 0}, +- {0, "irc.worldnet.net"}, +- +- {"Xertion", 0, 0, 0, LOGIN_SASL, 0, TRUE}, +- {0, "irc.xertion.org"}, +- +- {0,0} +-}; +- + GSList *network_list = 0; + + favchannel * +@@ -931,57 +601,6 @@ + static void + servlist_load_defaults (void) + { +- int i = 0, j = 0; +- ircnet *net = NULL; +- guint def_hash = g_str_hash ("Libera.Chat"); +- +- while (1) +- { +- if (def[i].network) +- { +- net = servlist_net_add (def[i].network, def[i].host, FALSE); +- if (def[i].channel) +- { +- servlist_favchan_add (net, def[i].channel); +- } +- if (def[i].charset) +- { +- net->encoding = g_strdup (def[i].charset); +- } +- else +- { +- net->encoding = g_strdup (IRC_DEFAULT_CHARSET); +- } +- if (def[i].loginmode) +- { +- net->logintype = def[i].loginmode; +- } +- if (def[i].connectcmd) +- { +- servlist_command_add (net, def[i].connectcmd); +- } +- if (def[i].ssl) +- { +- net->flags |= FLAG_USE_SSL; +- } +- +- if (g_str_hash (def[i].network) == def_hash) +- { +- prefs.hex_gui_slist_select = j; +- } +- +- j++; +- } +- else +- { +- servlist_server_add (net, def[i].host); +- if (!def[i+1].host && !def[i+1].network) +- { +- break; +- } +- } +- i++; +- } + } + + static int + +--- a/src/fe-gtk/joind.c 2024-01-08 21:53:25.000000000 +0100 ++++ b/src/fe-gtk/joind.c 2024-01-08 21:53:55.961283136 +0100 +@@ -245,12 +245,6 @@ + G_CALLBACK (joind_radio2_cb), serv); + g_signal_connect (G_OBJECT (okbutton1), "clicked", + G_CALLBACK (joind_ok_cb), serv); +- +- if (serv->network) +- if (g_ascii_strcasecmp(((ircnet*)serv->network)->name, "Libera.Chat") == 0) +- { +- gtk_entry_set_text (GTK_ENTRY (entry1), "#hexchat"); +- } + + gtk_widget_grab_focus (okbutton1); + gtk_widget_show_all (dialog1); diff --git a/hexedit/PKGBUILD b/hexedit/PKGBUILD new file mode 100644 index 0000000..d0d5454 --- /dev/null +++ b/hexedit/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=hexedit +pkgver=1.5 +pkgrel=1 +_debver=1.5 +_debrel=2 +pkgdesc="View and edit files in hexadecimal or in ASCII" +arch=('x86_64' 'i686') +url="http://rigaux.org/hexedit.html" +license=('GPL-2') +depends=('ncurses') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/pixel/${pkgname}/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/h/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('9d8e5c8c0cda0af17ffeaf528e3dacd7fc2878dfc0755cb055dae5c56f05c961353c1d1723b05897314b49a44a6eb96de5d3a599c6b29967425507eea7cc7ca5' + '1fdc61e454804d5184f1954987bdd05bbb57fe06fe67d4378d226e137126172dd33cae6a2b3f264819871bb10360204533e049bff9109cacf0f44104977a63a3') + +prepare() { + cd ${pkgname}-${pkgver}/ + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/ ./ + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver}/ + + ./autogen.sh + ./configure + make +} + +package() { + cd ${pkgname}-${pkgver}/ + + make DESTDIR=${pkgdir} install + # Install licence file. + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname}/ +} diff --git a/hicolor-icon-theme/PKGBUILD b/hicolor-icon-theme/PKGBUILD new file mode 100644 index 0000000..617ec96 --- /dev/null +++ b/hicolor-icon-theme/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=hicolor-icon-theme +pkgver=0.17 +pkgrel=1 +pkgdesc="Freedesktop.org Hicolor icon theme" +arch=('any') +url="https://www.freedesktop.org/wiki/Software/icon-theme/" +license=('GPL-2') +source=("https://icon-theme.freedesktop.org/releases/${pkgname}-${pkgver}.tar.xz") +sha512sums=('eca8655930aa7e234f42630041c0053fde067b970fad1f81c55fcd4c5046c03edfdf2ede72a3e78fba2908e7da53e9463d3c5ae12ab9f5ef261e29a49f9c7a8d') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/hplip-drivers/PKGBUILD b/hplip-drivers/PKGBUILD new file mode 100644 index 0000000..89acbc9 --- /dev/null +++ b/hplip-drivers/PKGBUILD @@ -0,0 +1,143 @@ +# Maintainer: Jesus E. + +pkgname=hplip-drivers +_pkgname=hplip +pkgver=3.21.2 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Free and libre device drivers for HP-printer (DeskJet, OfficeJet, Photosmart, Business Inkjet and some LaserJet)" +arch=('i686' 'x86_64') +url='https://developers.hp.com/hp-linux-imaging-and-printing' +license=('GPL-2' 'GPL-3' 'Expat' 'Modified-BSD') +depends=('ghostscript' 'net-snmp' 'foomatic-db-engine' 'python') +makedepends=('sane' 'cups' 'libusb' 'quilt') +optdepends=('cups: for printing support' + 'sane: for scanner support' + 'xsane: sane scanner frontend' + 'libusb: for advanced usb support') +backup=('etc/hp/hplip.conf' + 'etc/sane.d/dll.d/hpaio') +source=(https://downloads.sourceforge.net/${_pkgname}/${_pkgname}-${pkgver}.tar.gz{,.asc} + https://deb.debian.org/debian/pool/main/h/hplip/hplip_${_debver}+dfsg1-${_debrel}.debian.tar.xz + disable_upgrade.patch + add-include-cups-ppd.h-in-various-places-as-CUPS-2.2.patch + remove-systemd-support.patch) +sha512sums=('73ba37275cfe34a58b81c9656514e15da67c1a69af5471ad132a1538d324efe640879cb7e60c359915607e41b63e653e7ae757661e553235f6e83e378ab46474' + 'SKIP' + '771bfae13f452f637696ef7947e95c21e5cb514cd613fb15d182f0e0fbb02ce60684c75a7cb8245423bbcffe2c7d1a155f4109fe1769b0badb7d006bb9406ff2' + '6abd3b3fbc827b9a618e54b3b96b6fa574fa6477845ed385ebd972c26eeb33139591ddc808d110fbb19ce9e002898590b900cc8dcbc933fd837de781f9ada71f' + '22aeb5b851f78bc6bc62e0bc3da99fecaf42d7604af41e2f3343f8d3666541f7b06b7d1a7d0ddf24f1731ac7b12dfe582375a98e3b94dfa323d6ce954549ca67' + 'abd64e02965190cdfb7f7fd65d1875da4420594b627cd85b7f1da1f69a823b55358146e02d81e50e90000e21ba6e69d25fbb785dd489f1f3f461e50ce16f11e7') +validpgpkeys=('4ABA2F66DBD5A95894910E0673D770CDA59047B9') # HPLIP (HP Linux Imaging and Printing) + +prepare() { + cd $_pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0022-LaserJet-PostScript-4000-PPD-bugfix.patch || true + rm -v debian/patches/0052-IEEE1284-Device-ID-for-HP-LaserJet-4000.patch || true + rm -v debian/patches/0053-Fix-ImageableArea-for-Laserjet-8150-9000.patch || true + + quilt push -av + else + # add missing 'include ' at various places + patch -Np1 -i ${srcdir}/0022-Add-include-cups-ppd.h-in-various-places-as-CUPS-2.2.patch + fi + + # based on https://devel.trisquel.info/trisquel/package-helpers/raw/master/helpers/make-hplip + # keep header license + sed '/\[/,99999d' data/models/models.dat > mktemp + + for model in $(grep '\[' data/models/models.dat | sed 's/\[//; s/\]//'); do + sed -n "/\[$model\]/,/^$/p;" data/models/models.dat > mktemp1 + grep '^download=True' -q mktemp1 && continue + grep '^plugin=1' -q mktemp1 && continue + grep '^support-type=0' -q mktemp1 && continue + cat mktemp1 >> mktemp + done + + sed -i 's/plugin=2/plugin=0/g' mktemp + + cp mktemp data/models/models.dat + + rm -v mktemp{,1} + + # remove systemd support + patch -p1 -i ../remove-systemd-support.patch + + # remove nonfree software recommendation + sed -i 's/\, requires proprietary plugin//' $(grep -rlI '[,] requires proprietary plugin') + + # disable insecure update + patch -Np0 -i ${srcdir}/disable_upgrade.patch + + export AUTOMAKE='automake --foreign' + autoreconf --force --install +} + +build() { + cd $_pkgname-$pkgver + + # disable dbus for build including fax + # avahi is needed for network also disabled + # no gui-support needed furthermore + ./configure --prefix=/usr \ + --with-cupsbackenddir=/usr/libexec/cups/backend \ + --with-cupsfilterdir=/usr/libexec/cups/filter \ + --enable-hpcups-install \ + --enable-new-hpcups \ + --enable-cups-ppd-install \ + --enable-cups-drv-install \ + --enable-foomatic-drv-install \ + --enable-foomatic-ppd-install \ + --enable-pp-build \ + --disable-dbus-build \ + --disable-fax-build \ + --disable-gui-build \ + --disable-qt3 \ + --disable-qt4 \ + --disable-qt5 \ + --disable-foomatic-rip-hplip-install \ + --disable-polkit \ + --disable-network-build \ + --disable-doc-build + make +} + +package() { + cd $_pkgname-$pkgver + make -j1 rulesdir=/lib/udev/rules.d DESTDIR="$pkgdir/" install + + # install license + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname + + # remove config provided by sane and autostart of hp-daemon + rm -rf "$pkgdir"/etc/{sane.d,xdg} + install -dm755 ${pkgdir}/etc/sane.d/dll.d + echo hpaio > ${pkgdir}/etc/sane.d/dll.d/hpaio + + # remove HAL .fdi file because HAL is no longer used + rm -vrf "$pkgdir"/usr/share/hal + + # cleanup + rm -rf "$pkgdir"/usr/share/applications + rm -rf "$pkgdir"/usr/share/hplip/data/localization + rm -rf "$pkgdir"/usr/bin + rm -rf "$pkgdir"/usr/share/hplip/*.py + rm -rf "$pkgdir"/usr/share/hplip/hplip_clean.sh + rm -rf "$pkgdir"/usr/share/hplip/scan + rm -rf "$pkgdir"/usr/share/hplip/prnt + rm -rf "$pkgdir"/usr/share/hplip/pcard + rm -rf "$pkgdir"/usr/share/hplip/installer + rm -rf "$pkgdir"/usr/share/hplip/copier + rm -rf "$pkgdir"/usr/share/hplip/base +} diff --git a/hplip-drivers/add-include-cups-ppd.h-in-various-places-as-CUPS-2.2.patch b/hplip-drivers/add-include-cups-ppd.h-in-various-places-as-CUPS-2.2.patch new file mode 100644 index 0000000..491c307 --- /dev/null +++ b/hplip-drivers/add-include-cups-ppd.h-in-various-places-as-CUPS-2.2.patch @@ -0,0 +1,50 @@ +From b3a7fa4d4a573cfe0073ae50197f679af7e3a0ac Mon Sep 17 00:00:00 2001 +From: Till Kamppeter +Date: Sat, 24 Sep 2016 10:37:20 +0200 +Subject: Add 'include ' in various places as CUPS 2.2 moved some + definitions to ppd.h + +--- + configure.in | 2 +- + prnt/hpcups/HPCupsFilter.h | 2 ++ + prnt/hpijs/hpcupsfax.cpp | 1 + + 3 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/configure.in b/configure.in +index d3a1ddb..eabe14a 100755 +--- a/configure.in ++++ b/configure.in +@@ -554,7 +554,7 @@ fi + + if test "$hpijs_only_build" = "no" && test "$hpcups_only_build" = "no"; then + AC_CHECK_LIB([cups], [cupsDoFileRequest], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find libcups support], 9)]) +- AC_CHECK_HEADERS(cups/cups.h, ,[AC_MSG_ERROR([cannot find cups-devel support], 3)]) ++ AC_CHECK_HEADERS(cups/cups.h cups/ppd.h, ,[AC_MSG_ERROR([cannot find cups-devel support], 3)]) + if test "$libusb01_build" = "yes"; then + AC_CHECK_LIB([usb], [usb_init], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find libusb support], 2)]) + AC_CHECK_HEADERS(usb.h, ,[AC_MSG_ERROR([cannot find libusb-devel support], 11)]) +diff --git a/prnt/hpcups/HPCupsFilter.h b/prnt/hpcups/HPCupsFilter.h +index ff5548e..c517989 100644 +--- a/prnt/hpcups/HPCupsFilter.h ++++ b/prnt/hpcups/HPCupsFilter.h +@@ -38,6 +38,8 @@ + + #include "dbuscomm.h" + ++#include ++ + #define DBITMAPFILEHEADER 14 + #define DBITMAPINFOHEADER 40 + +diff --git a/prnt/hpijs/hpcupsfax.cpp b/prnt/hpijs/hpcupsfax.cpp +index 8514775..994e50f 100644 +--- a/prnt/hpijs/hpcupsfax.cpp ++++ b/prnt/hpijs/hpcupsfax.cpp +@@ -43,6 +43,7 @@ + #include + #include + #include ++#include + #include + #include + #ifdef FALSE diff --git a/hplip-drivers/disable_upgrade.patch b/hplip-drivers/disable_upgrade.patch new file mode 100644 index 0000000..109c4e9 --- /dev/null +++ b/hplip-drivers/disable_upgrade.patch @@ -0,0 +1,14 @@ +--- upgrade.py.orig 2013-10-31 12:46:54.000000000 +0100 ++++ upgrade.py 2013-12-04 14:58:03.000000000 +0100 +@@ -134,6 +134,11 @@ except getopt.GetoptError, e: + if os.getenv("HPLIP_DEBUG"): + log.set_level('debug') + ++ ++log.error("HPLIP upgrade is disabled by Hyperbola for security reasons - if you like to upgrade HPLIP, use the Hyperbola software package manager hyperman.") ++clean_exit(1) ++ ++ + for o, a in opts: + if o in ('-h', '--help'): + usage() diff --git a/hplip-drivers/remove-systemd-support.patch b/hplip-drivers/remove-systemd-support.patch new file mode 100644 index 0000000..c70cfde --- /dev/null +++ b/hplip-drivers/remove-systemd-support.patch @@ -0,0 +1,30 @@ +diff --git a/Makefile.am b/Makefile.am +index 2e7cb27..20b33c4 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -120,10 +120,6 @@ libhpip_la_SOURCES = ip/xconvolve.c ip/xfax.c ip/xgrayout.c ip/xjpg_dct.c ip/xjp + ip/hpip.h ip/ipdefs.h ip/xform.h ip/xjpg_dct.h ip/xjpg_huf.h ip/xjpg_mrk.h + + +-#hpmud rules data dir +-rulessystemdir=/usr/lib/systemd/system +-dist_rulessystem_DATA =data/rules/hplip-printer@.service +- + # hpmud.rules + rulesdir = /etc/udev/rules.d + if UDEV_SYSFS_RULES +diff --git a/Makefile.in b/Makefile.in +index 0745c8b..cbe6581 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -4823,10 +4823,6 @@ cups_drv = prnt/drv/hpcups.drv + @HPLIP_BUILD_TRUE@ ip/hpip.h ip/ipdefs.h ip/xform.h ip/xjpg_dct.h ip/xjpg_huf.h ip/xjpg_mrk.h + + +-#hpmud rules data dir +-@HPLIP_BUILD_TRUE@rulessystemdir = /usr/lib/systemd/system +-@HPLIP_BUILD_TRUE@dist_rulessystem_DATA = data/rules/hplip-printer@.service +- + # hpmud.rules + @HPLIP_BUILD_TRUE@rulesdir = /etc/udev/rules.d + @HPLIP_BUILD_TRUE@@UDEV_SYSFS_RULES_FALSE@dist_rules_DATA = data/rules/56-hpmud.rules diff --git a/hsetroot/PKGBUILD b/hsetroot/PKGBUILD new file mode 100644 index 0000000..efc0758 --- /dev/null +++ b/hsetroot/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=hsetroot +pkgver=1.0.2 +_debver=$pkgver +_debrel=9 +pkgrel=1 +pkgdesc="Tool which allows you to compose wallpapers ('root pixmaps') for X" +url='https://directory.fsf.org/wiki/Hsetroot' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('imlib2') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/h/hsetroot/hsetroot_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/h/hsetroot/hsetroot_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('cac98cc602fd8825dbfce27d289dc4ba47805c99c78de804e95c539e83ffae6984601a535cdb90658536a007a5f17c71e27e4c31af562ade6610f11f0d0d2ca5' + 'd23ced51a973e74e12f4d65bf096013a53ed5269aa89d6ce1776526859c2d4176a110a8314dbd87c0e9a6e92557409f30b3911c12efc909967401609888b368c') + +prepare() { + mv $pkgname-$pkgver.orig $pkgname-$pkgver + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + LDFLAGS+=",--no-as-needed,-lX11" ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/hspell/PKGBUILD b/hspell/PKGBUILD new file mode 100644 index 0000000..d33c497 --- /dev/null +++ b/hspell/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +pkgbase=hspell +pkgname=('hspell' 'hunspell-he-IL') +pkgver=1.4 +_debver=$pkgver +_debrel=3.1 +pkgrel=2 +arch=('i686' 'x86_64') +license=('AGPL-3') +url='http://hspell.ivrix.org.il/' +makedepends=('glibc' 'zlib' 'perl' 'hunspell' 'gawk' 'quilt') +options=('!makeflags') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/h/hspell/hspell_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/h/hspell/hspell_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('d0c9205d9f6a7e9e2577b685418120542235d290ee8d95e2066694c45b4083e3ce1abc38c910714cde0941fa6b211522a8259b0d880a71c5b9c5a6d77a115f1a' + 'ce7fac8a59b0f05d8e1f25f1e77e00ce447aa3a99ef9c0055182fdd9ea69da5e7f054adfa0b96dbbdef0d910dea19a107ceaf8865755a9d1b2fac2f503b17b8a') + +prepare() { + cd ${pkgbase}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgbase}-${pkgver} + export PERLLIB="$PWD" + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --enable-linginfo \ + --enable-fatverb \ + --enable-shared + make + make hunspell +} + +package_hspell() { + pkgdesc="Hebrew spell-checker" + depends=('glibc' 'zlib' 'perl') + + cd ${pkgbase}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname/ +} + +package_hunspell-he-IL() { + pkgdesc="Spell checking support for Hebrew (Israel)" + groups=('hunspell-dictionaries') + + cd ${pkgbase}-${pkgver} + install -dm755 "$pkgdir"/usr/share/hunspell + install -m644 he.dic "$pkgdir"/usr/share/hunspell/he_IL.dic + install -m644 he.aff "$pkgdir"/usr/share/hunspell/he_IL.aff + + # symlinks + install -dm755 "$pkgdir"/usr/share/myspell/dicts + pushd "$pkgdir"/usr/share/myspell/dicts + for file in "$pkgdir"/usr/share/hunspell/*; do + ln -sv /usr/share/hunspell/$(basename $file) . + done + popd + + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/html2text-cpp/PKGBUILD b/html2text-cpp/PKGBUILD new file mode 100644 index 0000000..ed2c712 --- /dev/null +++ b/html2text-cpp/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=html2text-cpp +_pkgbase=html2text +pkgver=1.3.2a +_debver=$pkgver +_debrel=28 +pkgrel=1 +pkgdesc="A C/C++ based HTML to text converter" +arch=('i686' 'x86_64') +url='https://github.com/grobian/html2text' +license=('GPL-2') +depends=('gcc-libs') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/h/html2text/html2text_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/h/html2text/html2text_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('8ec2c17849615b8b78b6f7e9066e5bcfb419b293ffe98323ed0942e891993e205ef37ddfd2839eb12b6bad561989027aea0ba2d57eb7193d424715f93ded90e5' + '044b561c7990582fa5767632b5cf20f1849e14b37d2d0cb8d07e8d91a7ffc0086a8d38e8188736fe5017240b985c5d035284ccdc1f178e803aaf30549c5f1e13') + +prepare() { + cd ${_pkgbase}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${_pkgbase}-${pkgver} + + ./configure \ + --prefix=/usr + make +} + +package() { + cd ${_pkgbase}-${pkgver} + + install -Dm755 $_pkgbase "${pkgdir}/usr/bin/$pkgname" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/htop/PKGBUILD b/htop/PKGBUILD new file mode 100644 index 0000000..862ee05 --- /dev/null +++ b/htop/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=htop +pkgver=3.4.0 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Interactive process viewer" +arch=('i686' 'x86_64') +url='https://htop.dev/' +license=('GPL-2') +depends=('ncurses' 'libnl') +makedepends=('quilt') +optdepends=('lsof: show files opened by a process' + 'strace: attach to a running process') +options=('!emptydirs') +source=("https://github.com/htop-dev/htop/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/h/htop/htop_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('aff7fc1961687b885fe680ec27cd08fdfdcc8b5411156fa7195e7acce10b7cf3c11eca7d6f55741da2d286ade77a0238f609cfeb862151cdaf6815087c73c340' + 'b4b3b60d697b5cd27f234d3395e8295e9475c780196f1820315e9f7565974344a3641b1519c6f63311dbbdd85b489c250498b662dae2b4b12a7601c54437b2aa') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-affinity \ + --enable-capabilities \ + --enable-delayacct \ + --enable-openvz \ + --enable-unicode \ + --enable-vserver + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/http-parser/PKGBUILD b/http-parser/PKGBUILD new file mode 100644 index 0000000..8bc557d --- /dev/null +++ b/http-parser/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=http-parser +pkgver=2.9.4 +_debver=2.9.4 +_debrel=4 +pkgrel=1 +pkgdesc="Parser for HTTP Request/Response written in C" +arch=('i686' 'x86_64') +url="https://github.com/nodejs/http-parser" +license=('Expat') +depends=('glibc') +makedepends=('quilt') +source=($pkgname-$pkgver.tar.gz::"https://github.com/nodejs/http-parser/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/h/http-parser/http-parser_$_debver-$_debrel.debian.tar.xz") +sha512sums=('b45df7b94d1c51079d44687d0a7f901f44faae51df4e84c7e3fe38f130c2d809d0e7c2a146c57b3723e60732aededc246bf44eadb10a95b710963d641f9fe7cd' + 'b53f017d667d893256607926c3bd8243ae3a45b79a8290652cf55fdb41c35e7d2894ea61763e6c83e3cd96882eba95680d2327224465a6221d98e61802052d23') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/debian.improve-installation.patch || true + + quilt push -av + fi + sed -i 's|-Werror||' Makefile +} + +build() { + cd $pkgname-$pkgver + make library +} + +package() { + cd $pkgname-$pkgver + make PREFIX="$pkgdir/usr" install + install -Dm644 LICENSE-MIT -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/httrack/PKGBUILD b/httrack/PKGBUILD new file mode 100644 index 0000000..c5011c7 --- /dev/null +++ b/httrack/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=httrack +pkgver=3.49.4 +pkgrel=1 +pkgdesc="An easy-to-use offline browser utility" +arch=('i686' 'x86_64') +url='https://www.httrack.com/' +license=('GPL-3') +depends=('bash' 'xdg-utils' 'hicolor-icon-theme' 'libressl') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/h/httrack/httrack_${pkgver}.orig.tar.gz") +sha512sums=('3e45388d75b9ac8d384000a8f3e931e3a71a54209af91fdde503b7dc2ec97db4bbc5bfa490fdceb6257c8e936aaf5749a22031f724b92cd04bd71cf729d938cd') + +build() { + cd "${srcdir}"/$pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-static=no + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/hunspell-dicts/PKGBUILD b/hunspell-dicts/PKGBUILD new file mode 100644 index 0000000..4c2ea6a --- /dev/null +++ b/hunspell-dicts/PKGBUILD @@ -0,0 +1,732 @@ +# Maintainer: Jesus E. + +pkgbase=hunspell-dicts +pkgname=('hunspell-af-ZA' 'hunspell-ar' 'hunspell-ca' 'hunspell-cs-CZ' 'hunspell-da-DK' 'hunspell-de-AT' + 'hunspell-de-CH' 'hunspell-de-DE' 'hunspell-en-AU' 'hunspell-en-CA' 'hunspell-en-GB' + 'hunspell-en-US' 'hunspell-en-ZA' 'hunspell-es' 'hunspell-et-EE' 'hunspell-fr' 'hunspell-gl-ES' + 'hunspell-hr-HR' 'hunspell-hu-HU' 'hunspell-id' 'hunspell-is' 'hunspell-it-IT' 'hunspell-lt-LT' + 'hunspell-lv-LV' 'hunspell-nl-NL' 'hunspell-nb-NO' 'hunspell-nn-NO' 'hunspell-pl-PL' 'hunspell-pt-BR' + 'hunspell-pt-PT' 'hunspell-ro' 'hunspell-ru-RU' 'hunspell-sk-SK' 'hunspell-sl-SI' 'hunspell-sq-AL' + 'hunspell-sr' 'hunspell-sv-FI' 'hunspell-sv-SE' 'hunspell-te-IN' 'hunspell-th-TH' 'hunspell-tr-TR' + 'hunspell-uk-UA') +_LOver=7.0.4 +pkgver=7.0.4.2 +pkgrel=1 +arch=('any') +depends=('hunspell') +source=("https://download.documentfoundation.org/libreoffice/src/${_LOver}/libreoffice-dictionaries-${pkgver}.tar.xz") +sha512sums=('bbf527355b3badba07397547bb8049671e36e868313e2314898a8a4c5ae451a2c7bcd5afa0d90ed5c5e0274f839bd064ba1172b56f6e8e59dcbdd6a716921e36') + +package_hunspell-af-ZA() { + pkgdesc="Spell checking support for Afrikaans (South Africa)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/af_ZA/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 af_ZA.aff $pkgdir/usr/share/hunspell + install -m644 af_ZA.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/af_ZA.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/af_ZA.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_af_ZA.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-ar() { + pkgdesc="Spell checking support for Arabic" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/ar/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 ar.aff $pkgdir/usr/share/hunspell + install -m644 ar.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/ar.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/ar.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 COPYING.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-ca() { + pkgdesc="Spell checking support for Catalan" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/ca/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 dictionaries/ca.aff $pkgdir/usr/share/hunspell + install -m644 dictionaries/ca.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/ca.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/ca.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 {LLICENCIES-ca,README_ca}.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-cs-CZ() { + pkgdesc="Spell checking support for Czech (Czech Republic)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/cs_CZ/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 cs_CZ.aff $pkgdir/usr/share/hunspell + install -m644 cs_CZ.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/cs_CZ.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/cs_CZ.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_cs.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-da-DK() { + pkgdesc="Spell checking support for Danish (Denmark)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/da_DK/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 da_DK.aff $pkgdir/usr/share/hunspell + install -m644 da_DK.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/da_DK.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/da_DK.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_da_DK.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-de-AT() { + pkgdesc="Spell checking support for German (Austria)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/de/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 de_AT_frami.aff $pkgdir/usr/share/hunspell/de_AT.aff + install -m644 de_AT_frami.dic $pkgdir/usr/share/hunspell/de_AT.dic + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/de_AT.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/de_AT.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 COPYING_LGPL_v2.1.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-de-CH() { + pkgdesc="Spell checking support for German (Switzerland)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/de/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 de_CH_frami.aff $pkgdir/usr/share/hunspell/de_CH.aff + install -m644 de_CH_frami.dic $pkgdir/usr/share/hunspell/de_CH.dic + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/de_CH.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/de_CH.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 COPYING_LGPL_v2.1.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-de-DE() { + pkgdesc="Spell checking support for German (Germany)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/de/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 de_DE_frami.aff $pkgdir/usr/share/hunspell/de_DE.aff + install -m644 de_DE_frami.dic $pkgdir/usr/share/hunspell/de_DE.dic + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/de_DE.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/de_DE.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 COPYING_LGPL_v2.1.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-en-AU() { + pkgdesc="Spell checking support for English (Australia)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/en/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 en_AU.aff $pkgdir/usr/share/hunspell + install -m644 en_AU.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/en_AU.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/en_AU.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 license.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-en-CA() { + pkgdesc="Spell checking support for English (Canada)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/en/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 en_CA.aff $pkgdir/usr/share/hunspell + install -m644 en_CA.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/en_CA.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/en_CA.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 license.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-en-GB() { + pkgdesc="Spell checking support for English (United Kingdom)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/en/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 en_GB.aff $pkgdir/usr/share/hunspell + install -m644 en_GB.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/en_GB.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/en_GB.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 license.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-en-US() { + pkgdesc="Spell checking support for English (United States)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/en/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 en_US.aff $pkgdir/usr/share/hunspell + install -m644 en_US.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/en_US.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/en_US.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 license.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-en-ZA() { + pkgdesc="Spell checking support for English (South Africa)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/en/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 en_ZA.aff $pkgdir/usr/share/hunspell + install -m644 en_ZA.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/en_ZA.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/en_ZA.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 license.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-es() { + pkgdesc="Spell checking support for Spanish" + license=('LGPL-3') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/es/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 es_ANY.aff $pkgdir/usr/share/hunspell/es.aff + install -m644 es_ANY.dic $pkgdir/usr/share/hunspell/es.dic + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/es.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/es.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_es_ANY.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-et-EE() { + pkgdesc="Spell checking support for Estonian (Estonia)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/et_EE/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 et_EE.aff $pkgdir/usr/share/hunspell + install -m644 et_EE.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/et_EE.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/et_EE.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_et_EE.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-fr() { + pkgdesc="Spell checking support for French" + license=('MPL-2.0') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/fr_FR/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 fr.aff $pkgdir/usr/share/hunspell + install -m644 fr.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/fr.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/fr.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_fr.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-gl-ES() { + pkgdesc="Spell checking support for Galician (Spain)" + license=('GPL-3') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/gl/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 gl_ES.aff $pkgdir/usr/share/hunspell + install -m644 gl_ES.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/gl_ES.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/gl_ES.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 GPLv3.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-hr-HR() { + pkgdesc="Spell checking support for Croatian (Croatia)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/hr_HR/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 hr_HR.aff $pkgdir/usr/share/hunspell + install -m644 hr_HR.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/hr_HR.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/hr_HR.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_hr_HR.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-hu-HU() { + pkgdesc="Spell checking support for Hungarian (Hungary)" + license=('LGPL-3' 'MPL-2.0') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/hu_HU/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 hu_HU.aff $pkgdir/usr/share/hunspell + install -m644 hu_HU.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/hu_HU.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/hu_HU.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_hu_HU.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-id() { + pkgdesc="Spell checking support for Indonesian" + license=('LGPL-3') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/id/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 id_ID.aff $pkgdir/usr/share/hunspell/id.aff + install -m644 id_ID.dic $pkgdir/usr/share/hunspell/id.dic + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/id.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/id.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 LICENSE-dict -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-is() { + pkgdesc="Spell checking support for Icelandic" + license=('CC-BY-SA-3.0' 'CC-BY-4.0') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/is/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 is.aff $pkgdir/usr/share/hunspell + install -m644 is.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/is.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/is.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 license.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-it-IT() { + pkgdesc="Spell checking support for Italian (Italy)" + license=('GPL-3') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/it_IT/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 it_IT.aff $pkgdir/usr/share/hunspell + install -m644 it_IT.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/it_IT.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/it_IT.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_it_IT.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-lt-LT() { + pkgdesc="Spell checking support for Lithuanian (Lithuania)" + license=('Modified-BSD') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/lt_LT/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 lt.aff $pkgdir/usr/share/hunspell/lt_LT.aff + install -m644 lt.dic $pkgdir/usr/share/hunspell/lt_LT.dic + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/lt_LT.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/lt_LT.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-lv-LV() { + pkgdesc="Spell checking support for Latvian (Latvia)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/lv_LV/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 lv_LV.aff $pkgdir/usr/share/hunspell + install -m644 lv_LV.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/lv_LV.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/lv_LV.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_lv_LV.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-nl-NL() { + pkgdesc="Spell checking support for Dutch (Netherlands)" + license=('CC-BY-3.0') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/nl_NL/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 nl_NL.aff $pkgdir/usr/share/hunspell + install -m644 nl_NL.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/nl_NL.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/nl_NL.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_NL.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-nb-NO() { + pkgdesc="Spell checking support for Norwegian (Bokml) (Norway)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/no/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 nb_NO.aff $pkgdir/usr/share/hunspell + install -m644 nb_NO.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/nb_NO.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/nb_NO.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-nn-NO() { + pkgdesc="Spell checking support for Norwegian (Nynorsk) (Norway)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/no/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 nn_NO.aff $pkgdir/usr/share/hunspell + install -m644 nn_NO.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/nn_NO.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/nn_NO.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-pl-PL() { + pkgdesc="Spell checking support for Polish (Poland)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/pl_PL/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 pl_PL.aff $pkgdir/usr/share/hunspell + install -m644 pl_PL.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/pl_PL.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/pl_PL.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_en.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-pt-BR() { + pkgdesc="Spell checking support for Portuguese (Brazil)" + license=('LGPL-3') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/pt_BR/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 pt_BR.aff $pkgdir/usr/share/hunspell + install -m644 pt_BR.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/pt_BR.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/pt_BR.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_en.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-pt-PT() { + pkgdesc="Spell checking support for Portuguese (Portugal)" + license=('GPL-2' 'LGPL-2.1' 'MPL-1.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/pt_PT/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 pt_PT.aff $pkgdir/usr/share/hunspell + install -m644 pt_PT.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/pt_PT.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/pt_PT.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_pt_PT.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-ro() { + pkgdesc="Spell checking support for Romanian" + license=('GPL-2' 'LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/ro/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 ro_RO.aff $pkgdir/usr/share/hunspell + install -m644 ro_RO.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/ro_RO.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/ro_RO.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 COPYING.{GPL,LGPL} -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-ru-RU() { + pkgdesc="Spell checking support for Russian (Russia)" + license=('Original-BSD') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/ru_RU/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 ru_RU.aff $pkgdir/usr/share/hunspell + install -m644 ru_RU.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/ru_RU.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/ru_RU.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_ru_RU.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-sk-SK() { + pkgdesc="Spell checking support for Slovak (Slovakia)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/sk_SK/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 sk_SK.aff $pkgdir/usr/share/hunspell + install -m644 sk_SK.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/sk_SK.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/sk_SK.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-sl-SI() { + pkgdesc="Spell checking support for Slovenian (Slovenia)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/sl_SI/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 sl_SI.aff $pkgdir/usr/share/hunspell + install -m644 sl_SI.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/sl_SI.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/sl_SI.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_sl_SI.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-sq-AL() { + pkgdesc="Spell checking support for Albanian (Albania)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/sq_AL/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 sq_AL.aff $pkgdir/usr/share/hunspell + install -m644 sq_AL.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/sq_AL.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/sq_AL.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-sr() { + pkgdesc="Spell checking support for Serbian" + license=('GPL-3') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/sr/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 sr.aff $pkgdir/usr/share/hunspell + install -m644 sr.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/sr.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/sr.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-sv-FI() { + pkgdesc="Spell checking support for Swedish (Finland)" + license=('LGPL-3') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/sv_SE/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 sv_FI.aff $pkgdir/usr/share/hunspell + install -m644 sv_FI.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/sv_FI.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/sv_FI.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 LICENSE_{en_US.txt,sv_SE.txt} -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-sv-SE() { + pkgdesc="Spell checking support for Swedish (Sweden)" + license=('LGPL-3') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/sv_SE/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 sv_SE.aff $pkgdir/usr/share/hunspell + install -m644 sv_SE.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/sv_SE.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/sv_SE.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 LICENSE_{en_US.txt,sv_SE.txt} -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-te-IN() { + pkgdesc="Spell checking support for Telugu (India)" + license=('GPL-2') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/te_IN/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 te_IN.aff $pkgdir/usr/share/hunspell + install -m644 te_IN.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/te_IN.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/te_IN.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_te_IN.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-th-TH() { + pkgdesc="Spell checking support for Thai (Thailand)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/th_TH/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 th_TH.aff $pkgdir/usr/share/hunspell + install -m644 th_TH.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/th_TH.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/th_TH.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_th_TH.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-tr-TR() { + pkgdesc="Spell checking support for Turkish (Turkey)" + license=('MPL-2.0') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/tr_TR/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 tr_TR.aff $pkgdir/usr/share/hunspell + install -m644 tr_TR.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/tr_TR.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/tr_TR.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_hunspell-uk-UA() { + pkgdesc="Spell checking support for Ukrainian (Ukraine)" + license=('LGPL-2.1') + groups=('hunspell-dictionaries') + + cd "${srcdir}/libreoffice-${pkgver}/dictionaries/uk_UA/" + install -dm755 ${pkgdir}/usr/share/hunspell + install -m644 uk_UA.aff $pkgdir/usr/share/hunspell + install -m644 uk_UA.dic $pkgdir/usr/share/hunspell + + install -dm755 ${pkgdir}/usr/share/myspell/dicts + ln -sv /usr/share/hunspell/uk_UA.aff ${pkgdir}/usr/share/myspell/dicts/ + ln -sv /usr/share/hunspell/uk_UA.dic ${pkgdir}/usr/share/myspell/dicts/ + + install -Dm644 README_uk_UA.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/hunspell/PKGBUILD b/hunspell/PKGBUILD new file mode 100644 index 0000000..aa2a79c --- /dev/null +++ b/hunspell/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=hunspell +pkgver=1.7.0 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="Spell checker and morphological analyzer library and program" +arch=('i686' 'x86_64') +url='https://hunspell.github.io/' +license=('GPL-2' 'LGPL-2.1' 'MPL-1.1') +depends=('gcc-libs' 'readline') +makedepends=('quilt') +optdepends=('perl: for ispellaff2myspell') +source=($pkgname-$pkgver.tar.gz::https://github.com/hunspell/hunspell/archive/v${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/h/hunspell/hunspell_$_debver-$_debrel.debian.tar.xz) +sha512sums=('8149b2e8b703a0610c9ca5160c2dfad3cf3b85b16b3f0f5cfcb7ebb802473b2d499e8e2d0a637a97a37a24d62424e82d3880809210d3f043fa17a4970d47c903' + '305e5062ee19f79fbd16ccb2f699066f5eda70bc036ebadd2fa3fbf58ac9c2f89e71d18e2019a34c415b90a653748a971f41e11e83fc250129e0723e7a3d6fdf') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-static \ + --with-ui \ + --with-readline + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # add generic hunspell.so for development and projects not using pkgconfig flags + pushd "$pkgdir"/usr/lib + ln -s libhunspell-?.?.so libhunspell.so + popd + + for i in COPYING*; do + install -Dm644 $i -t $pkgdir/usr/share/licenses/$pkgname + done +} diff --git a/hwloc/PKGBUILD b/hwloc/PKGBUILD new file mode 100644 index 0000000..b75566e --- /dev/null +++ b/hwloc/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=hwloc +pkgver=2.3.0 +_debver=2.3.0+dfsg +_debrel=2 +pkgrel=1 +pkgdesc='Portable Hardware Locality is a portable abstraction of hierarchical architectures' +url='https://www.open-mpi.org/projects/hwloc/' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('libtool' 'libpciaccess') +makedepends=('libxml2' 'pciutils' 'quilt') +optdepends=('libxml2' 'pciutils') +options=('!docs') +source=(https://www.open-mpi.org/software/hwloc/v${pkgver%.*}/downloads/${pkgname}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/h/hwloc/hwloc_$_debver-$_debrel.debian.tar.xz) +sha512sums=('ecb0950cd08eab7d97f7cbef9db0dc31cb5b4debedaae6f48814625ee5da0153fdc1f863fa84c5d59b76634e877a348fa556f3c8c29fc43bc6ae7211c313906c' + 'a2875838a85920d9598d13c3144aa5309c931b16b9748555b29ca7fe35c9bf7eda4468b5bf7f3883c351bed16140acd95105ffdeb0afc47494056cac583a47a5') + +prepare() { + cd hwloc-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -fiv +} + +build() { + cd hwloc-${pkgver} + ./configure \ + --prefix=/usr \ + --disable-cairo \ + --enable-plugins \ + --sysconfdir=/etc + make +} + +check() { + cd hwloc-${pkgver} + make check +} + +package() { + cd hwloc-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim: ts=2 sw=2 et: diff --git a/hyperbola-install-scripts/PKGBUILD b/hyperbola-install-scripts/PKGBUILD new file mode 100644 index 0000000..bb29b91 --- /dev/null +++ b/hyperbola-install-scripts/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=hyperbola-install-scripts +pkgver=18 +pkgrel=1 +pkgdesc="Scripts to aid in installing the system" +arch=('any') +url='https://git.hyperbola.info:50100/~team/software/hyperbola-install-scripts.git/' +license=('GPL-2') +depends=('bash' 'coreutils' 'pacman' 'util-linux') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('ed966dd7b8c9b215d57a633229468bc38e60415a669a2846c90b7430479246a08e6bde70a10bc1cbaad805895f7a4a1bed00a689d0e0d748f35c7bdd28e78a25' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +build() { + make -C "$pkgname-$pkgver" +} + +package() { + make -C "$pkgname-$pkgver" PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 "$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/hyperfetch/PKGBUILD b/hyperfetch/PKGBUILD new file mode 100644 index 0000000..6e09be1 --- /dev/null +++ b/hyperfetch/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=hyperfetch +pkgver=0.2 +pkgrel=1 +pkgdesc="A program showing essential system-information." +arch=('i686' 'x86_64') +url='https://git.hyperbola.info:50100/~team/software/hyperfetch.git/' +license=('GPL-2') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('8cdb5344e0fb496ab0959b2a496d8a3ce4a73a16383102dd18fb9b79aa5248bead705a2d18084262919b6fdbad2f45999315e301ef43023ca7ae9372701a6f59' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +build() { + cd "$pkgname-$pkgver" + make +} + +package() { + cd "$pkgname-$pkgver" + install -Dm755 hyperfetch -t "$pkgdir/usr/bin" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/hyperiso/PKGBUILD b/hyperiso/PKGBUILD new file mode 100644 index 0000000..9025ed2 --- /dev/null +++ b/hyperiso/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=hyperiso +pkgver=2 +pkgrel=2 +pkgdesc='Tools for creating Hyperbola live and install ISO images' +arch=('any') +url="https://git.hyperbola.info:50100/software/hyperiso.git" +license=('CC0-1.0') +depends=('make' 'squashfs-tools' 'libisoburn' 'dosfstools') +replaces=('archiso') +conflicts=('archiso') +provides=('archiso') +source=("https://repo.hyperbola.info:50000/sources/$pkgname/$pkgname-$pkgver.tar.gz"{,.sig} + 'legalcode.txt') +sha512sums=('4876b6da107c750c88364f8944608f58d5226d41b796aeae5191821ac1efc132b2725b61583978ec1880d26f9e2fc3017a7d5cbdc6cd028eee7f15745450dede' + 'SKIP' + '1eb4436f8d58766cbe99db97e5e8c0db8a706376afd291c337de1ba7a6b066d3791dc85ad034bdd54ea336bed6e6e8e7a037d8b04b2773c9c7517b9d9921d1fa') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 $srcdir/legalcode.txt $pkgdir/usr/share/licenses/$pkgname/legalcode.txt +} diff --git a/hyperiso/legalcode.txt b/hyperiso/legalcode.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/hyperiso/legalcode.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/hyphen/PKGBUILD b/hyphen/PKGBUILD new file mode 100644 index 0000000..d03f0b9 --- /dev/null +++ b/hyphen/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: Jesus E. + +pkgbase=hyphen +pkgname=('hyphen' 'hyphen-en') +pkgver=2.8.8 +_debver=2.8.8 +_debrel=7 +pkgrel=2 +arch=('i686' 'x86_64') +url="http://hunspell.github.io/" +license=('LGPL-2.1') +makedepends=('glibc' 'perl' 'quilt') +source=(https://downloads.sourceforge.net/hunspell/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/h/hyphen/hyphen_$_debver-$_debrel.debian.tar.xz) +sha512sums=('ee514952be56869840b70fb74f60eba14dc4de246733ff8705492367e8cf00c485f8778a9d5a7ba374c988d4ac9fedbe75826dc559e1b62465dbfba21f6ce7de' + 'd442529363fb1702ff990e3db9ea9d8add2614aa7bca5fc7faac7267ecc464fbf559ef8090f029d4ddfc342a072e123ed6db291e0deb4ec7616c794d5dbc27fd') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/01_hyphen_tex_from_TeXLive || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --disable-static + make +} + +package_hyphen() { + pkgdesc="library for high quality hyphenation and justification" + depends=('glibc' 'perl') + + cd $pkgbase-$pkgver + make DESTDIR="$pkgdir/" install-libLTLIBRARIES + make DESTDIR="$pkgdir/" install-binSCRIPTS + make DESTDIR="$pkgdir/" install-includeHEADERS + + # license + for i in COPYING{,.LGPL}; do + install -D -m644 ${i} "${pkgdir}"/usr/share/licenses/${pkgname}/${i} + done +} + +package_hyphen-en() { + pkgdesc="English hyphenation rules" + # arch=('any') + optdepends=('hyphen: offers hyphenation library functions') + + cd $pkgbase-$pkgver + make DESTDIR="$pkgdir/" install-hyphDATA + + pushd ${pkgdir}/usr/share/hyphen/ + en_US_aliases="en_AG en_AU en_BS en_BW en_BZ en_CA en_DK en_GB en_GH en_HK en_IE en_IN en_JM en_NA en_NZ en_PH en_SG en_TT en_ZA en_ZW" + for lang in $en_US_aliases; do + ln -s hyph_en_US.dic hyph_$lang.dic + done + popd + + # the symlinks + install -dm755 ${pkgdir}/usr/share/myspell/dicts + pushd $pkgdir/usr/share/myspell/dicts + for file in $pkgdir/usr/share/hyphen/*; do + ln -sv /usr/share/hyphen/$(basename $file) . + done + popd + + # license + for i in COPYING{,.LGPL}; do + install -D -m644 ${i} "${pkgdir}"/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/i2pd/PKGBUILD b/i2pd/PKGBUILD new file mode 100644 index 0000000..3b2903a --- /dev/null +++ b/i2pd/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=i2pd +pkgver=2.52.0 +pkgrel=1 +pkgdesc="Simplified, free and libre C++ implementation of I2P client" +arch=('i686' 'x86_64') +url='https://i2pd.website/' +license=('Modified-BSD') +depends=('boost-libs' 'miniupnpc' 'libressl' 'zlib') +makedepends=('boost' 'cmake') +provides=('i2p-router') +install='i2pd.install' +backup=("etc/${pkgname}/${pkgname}.conf" + "etc/${pkgname}/tunnels.conf" + "etc/conf.d/${pkgname}") +source=("$pkgname-$pkgver.tar.gz::https://github.com/PurpleI2P/$pkgname/archive/$pkgver.tar.gz" + "$pkgname.confd" + "$pkgname.initd" + "$pkgname.run") +sha512sums=('54272b23dcb62b8b7523038a9c1fc71b87bb9042f22bd12d6ebc62cfa47da07e2df47d88d706f285e9d88f9cace0564546632c10161f83f5c57b9ea17f5bde5f' + '083f4c860d7556bd14f2765b098743c25f996ef16de3982430ff27ac7711051738d48709654441099ea8c755b6d9a6e25b52286f7e8c928d3f39f1207a9517a9' + '99a7e4d94840b68ce093c22141da46d89b54c63c214fbf3c0eada4bc28d128da181fc7968a0571028f8772acc91a7d58a87f9f57bb65b748dd730bd57e6c64e1' + '42ea21e73fdc32cd16e2e29140037450258e2585f3df8f394600d15de991b353e242c874edeeebf5b7473489b923b7fbbeab875e4cfc715e7e90de5dc6aea525') + +build() { + cmake \ + -S $pkgname-$pkgver/build \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_BINDIR=sbin \ + -DCMAKE_BUILD_TYPE=Release \ + -DWITH_UPNP=ON \ + -DWITH_LIBRARY=OFF \ + -DWITH_PCH=OFF + make -C build +} + +package(){ + make DESTDIR="$pkgdir" -C build install + + cd "$srcdir/$pkgname-$pkgver" + install -Dm0644 contrib/$pkgname.conf $pkgdir/etc/$pkgname/$pkgname.conf + install -Dm0644 contrib/tunnels.conf $pkgdir/etc/$pkgname/tunnels.conf + install -Dm0644 contrib/subscriptions.txt $pkgdir/etc/$pkgname/subscriptions.txt + + install -d -m0750 $pkgdir/var/lib/$pkgname + ln -s ../../../etc/$pkgname/$pkgname.conf $pkgdir/var/lib/$pkgname/$pkgname.conf + ln -s ../../../etc/$pkgname/tunnels.conf $pkgdir/var/lib/$pkgname/tunnels.conf + ln -s ../../../etc/$pkgname/subscriptions.txt $pkgdir/var/lib/$pkgname/subscriptions.txt + + pushd contrib + find ./certificates -type d -exec install -d {} $pkgdir/usr/share/${pkgname}/{} \; + find ./certificates -type f -exec install -Dm644 {} $pkgdir/usr/share/${pkgname}/{} \; + ln -s ../../../usr/share/$pkgname/certificates $pkgdir/var/lib/$pkgname/certificates + popd + + # license + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE + + # docs + install -Dm644 README.md $pkgdir/usr/share/doc/$pkgname/README.md + + # openrc and runit + install -Dm0644 "$srcdir/${pkgname}.confd" "${pkgdir}/etc/conf.d/${pkgname}" + install -Dm0755 "$srcdir/${pkgname}.initd" "${pkgdir}/etc/init.d/${pkgname}" + install -Dm0755 "$srcdir/${pkgname}.run" "${pkgdir}/etc/sv/${pkgname}/run" + + # man + install -Dm644 debian/$pkgname.1 $pkgdir/usr/share/man/man1/$pkgname.1 + chmod -R o= $pkgdir/var/lib/$pkgname +} diff --git a/i2pd/i2pd.confd b/i2pd/i2pd.confd new file mode 100644 index 0000000..d2ef16b --- /dev/null +++ b/i2pd/i2pd.confd @@ -0,0 +1,12 @@ +I2PD_USER=i2pd +I2PD_GROUP=i2pd +I2PD_LOG=/var/log/i2pd.log +I2PD_PID=/run/i2pd/i2pd.pid + +# max number of open files (for floodfill) +rc_ulimit="-n 4096" + +# Options to i2pd +I2PD_OPTIONS="--daemon --service --pidfile=${I2PD_PID} \ +--log=file --logfile=${I2PD_LOG} \ +--conf=/etc/i2pd/i2pd.conf --tunconf=/etc/i2pd/tunnels.conf" diff --git a/i2pd/i2pd.initd b/i2pd/i2pd.initd new file mode 100644 index 0000000..ff6d551 --- /dev/null +++ b/i2pd/i2pd.initd @@ -0,0 +1,50 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="C++ daemon for accessing the I2P network" +description_graceful="Graceful shutdown, takes 10 minutes" + +command="/usr/sbin/i2pd" +command_args="${I2PD_OPTIONS}" +user="${I2PD_USER}:${I2PD_GROUP}" +start_stop_daemon_args=" + --user \"${user}\" + --pidfile \"${I2PD_PID}\" + --progress +" +retry="SIGTERM/20/SIGKILL/20" + +I2PD_PID_DIR=$(dirname "${I2PD_PID}") + +extra_started_commands="graceful" + +depend() { + need net + after firewall + use dns logger netmount +} + +start_pre() { + if [ -z "${I2PD_USER}" ] || \ + [ -z "${I2PD_GROUP}" ] || \ + [ -z "${I2PD_PID}" ] || \ + [ -z "${I2PD_LOG}" ] || \ + [ -z "${I2PD_OPTIONS}" ] ; then + eerror "Not all variables I2PD_USER, I2PD_GROUP, I2PD_PID, I2PD_OPTIONS, I2PD_LOG are defined." + eerror "Check your /etc/conf.d/i2pd" + return 1 + fi + checkpath -f -o "${user}" "${I2PD_LOG}" + checkpath -d -m 0750 -o "${user}" "${I2PD_PID_DIR}" +} + +graceful() { + # on SIGINT, i2pd stops accepting tunnels and shuts down in 600 seconds + ebegin "Gracefully stopping i2pd, this takes 10 minutes" + mark_service_stopping + eval start-stop-daemon --stop ${start_stop_daemon_args} \ + --exec "${command}" --retry 'SIGINT/620/SIGTERM/20/SIGKILL/20' + eend $? && mark_service_stopped +} diff --git a/i2pd/i2pd.install b/i2pd/i2pd.install new file mode 100644 index 0000000..018bcca --- /dev/null +++ b/i2pd/i2pd.install @@ -0,0 +1,26 @@ +post_install() { + if ! getent group i2pd &>/dev/null; then + groupadd -r i2pd >/dev/null + fi + if ! getent passwd i2pd &>/dev/null; then + useradd -r -g i2pd -G adm -d /var/lib/i2pd -s /bin/nologin i2pd >/dev/null + fi + if ! groups i2pd | grep adm &>/dev/null; then + gpasswd -a i2pd adm >/dev/null + fi + chown -R i2pd:i2pd /var/lib/i2pd + chmod 700 /var/lib/i2pd +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd i2pd &>/dev/null; then + userdel i2pd >/dev/null + fi + if getent group i2pd &>/dev/null; then + groupdel i2pd >/dev/null + fi +} diff --git a/i2pd/i2pd.run b/i2pd/i2pd.run new file mode 100644 index 0000000..a8776b4 --- /dev/null +++ b/i2pd/i2pd.run @@ -0,0 +1,5 @@ +#!/bin/sh +exec chpst -U i2pd i2pd \ + --conf=/etc/i2pd/i2pd.conf \ + --tunconf=/etc/i2pd/tunnels.conf \ + --service 2>&1 diff --git a/i3-wm/PKGBUILD b/i3-wm/PKGBUILD new file mode 100644 index 0000000..3b21fbc --- /dev/null +++ b/i3-wm/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=i3-wm +_pkgsourcename=i3 +pkgver=4.22 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Improved dynamic tiling window manager" +arch=('i686' 'x86_64') +url='https://i3wm.org/' +license=('Modified-BSD') +replaces=('i3' 'i3bar') +groups=('i3') +backup=('etc/i3/config') +depends=('libev' 'libxkbcommon-x11' 'pango' 'startup-notification' + 'xcb-util-cursor' 'xcb-util-keysyms' 'xcb-util-wm' 'xcb-util-xrm' + 'yajl' 'pcre2') +makedepends=('meson' 'xmlto' 'quilt') +optdepends=('dmenu: for the default program launcher' + 'rofi: for a modern dmenu replacement' + 'slock: for the default screen locker' + 'i3status: for the default status bar generator' + 'perl: for i3-save-tree and i3-dmenu-desktop' + 'perl-anyevent-i3: for i3-save-tree' + 'perl-json-xs: for i3-save-tree') +source=("https://i3wm.org/downloads/${_pkgsourcename}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/i/i3-wm/i3-wm_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('4e4536fb4108e92a1c918b5869232c0f7eb0feca2d3a49ba87250b970df0614cfe256d1e41fbd825a81c43b82898651e5d3fc11ca8101978916754dfa885266a' + '2b9626569478e84c4e33abec9f7c464dfdd253bcd0484a6cb0cdb11cd8e5276f773b3d42ae54dd9ee48a4304da8402e344d6533a1e500f47f2332b2001df9672') + +prepare() { + cd "$srcdir/$_pkgsourcename-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd i3-$pkgver + hyperbola-meson build + ninja -C build +} + +package() { + cd i3-$pkgver + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/i3blocks/PKGBUILD b/i3blocks/PKGBUILD new file mode 100644 index 0000000..64b77a4 --- /dev/null +++ b/i3blocks/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=i3blocks +pkgver=1.4 +_debver=$pkgver +_debrel=4 +pkgrel=4 +pkgdesc="Define blocks for your i3bar status line" +arch=('i686' 'x86_64') +groups=('i3') +url='https://github.com/vivien/i3blocks' +license=('GPL-3') +makedepends=('quilt') +optdepends=('bc: For bandwidth script' + 'openvpn: For openvpn script' + 'wireguard-tools: For wireguard script') +backup=('etc/i3blocks.conf') +source=("https://github.com/vivien/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/i/i3blocks/i3blocks_${_debver}-${_debrel}.debian.tar.xz" + "brightness.bash" + "wireguard.bash" + "fix-scripts.patch") +sha512sums=('c1f5abe90426e9f6284ef74001c9f50d08ce596b7bb8a284232116774375fa50168567785999266c8774fa39a1243c73f699a3e3be4440fbe16f33f0fde5cded' + '1ad34821f8f1223d7e02c9e2b4d86817083eada158a4acbd336291c97bfa081617c10020bf9147be23e6e3b3822dbdc3196e494e05044b4d7d1147f0619ea142' + '80c3913550a4a19db9ec26014ed098f4f8c752c412e2a26ba54f3d4b9cb0fb3201703ba8d1fa7dbb6eb5234cc0f0d417161d6786382d8fa32b6c7301716e48f7' + '86b91ebc07c2d53a697aab46928b3776daf0952d60685e3598f7244562f3d970ab62b58a2b4faf5387537cf71eb710bf3162667c026c867afdfcebc11b13331c' + '1eb4fed654ae4e4bb472459364938e52b3e82bc0b3bd81f3e5a2a2364d2ed322f8548ab3498e1a050eb65b61ed6f1aa6949da750659ae119cc147f6ac2350160') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/cpu_usage.patch || true + rm -v debian/patches/manpage_use_pandoc.patch || true + + quilt push -av + fi + rm -rf scripts/{battery,cpu_usage,temperature} + patch -Np1 -i "$srcdir/fix-scripts.patch" +} + +build() { + cd "${pkgname}-${pkgver}" + make VERSION="${pkgver}" PREFIX=/usr +} + +package() { + cd "${pkgname}-${pkgver}" + make VERSION="${pkgver}" PREFIX=/usr DESTDIR="${pkgdir}" install + install -m755 "${srcdir}/brightness.bash" "${pkgdir}/usr/libexec/i3blocks/brightness" + install -m755 "${srcdir}/wireguard.bash" "${pkgdir}/usr/libexec/i3blocks/wireguard" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/i3blocks/brightness.bash b/i3blocks/brightness.bash new file mode 100644 index 0000000..bb00a68 --- /dev/null +++ b/i3blocks/brightness.bash @@ -0,0 +1,65 @@ +#!/bin/bash +# +# Copyright (c) 2021 JesĂşs E. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# One of the following: xrandr, xbacklight, kernel +METHOD="xbacklight" + +case "${BLOCK_BUTTON}" in + 1) xbacklight -inc 5 ;; # Left click + 3) xbacklight -dec 5 ;; # Right click +esac + +URGENT_VALUE=10 + +case "${METHOD}" in + xrandr) device="${BLOCK_INSTANCE:-primary}" + xrandrOutput=$(xrandr --verbose) + case "${device}" in + primary) device=$(echo "${xrandrOutput}" | grep 'primary' | head -n 1 | awk -F ' ' '{print $1}') ;; + esac + curBrightness=$(echo "${xrandrOutput}" | grep "${device}" -A 5 | grep -i "Brightness" | awk -F ':' '{print $2}') + ;; + kernel) device="${BLOCK_INSTANCE:-intel_backlight}" + maxBrightness=$(cat "/sys/class/backlight/${device}/max_brightness") + curBrightness=$(cat "/sys/class/backlight/${device}/brightness") + ;; + xbacklight) curBrightness=$(xbacklight -get) ;; +esac + +if [[ "${curBrightness}" -le 0 ]]; then + exit +fi + +case "${METHOD}" in + xrandr) percent=$(echo "scale=0;${curBrightness} * 100" | bc -l) ;; + kernel) percent=$(echo "scale=0;${curBrightness} * 100 / ${maxBrightness}" | bc -l) ;; + xbacklight) percent=$(echo "scale=0;${curBrightness}" | bc -l) ;; +esac + +percent=${percent%.*} + +if [[ "${percent}" -le 0 ]]; then + exit +fi + +echo "${percent}%" +echo "${percent}%" +echo "" + +if [[ "${percent}" -le "${URGENT_VALUE}" ]]; then + exit 33 +fi diff --git a/i3blocks/fix-scripts.patch b/i3blocks/fix-scripts.patch new file mode 100644 index 0000000..4681d6d --- /dev/null +++ b/i3blocks/fix-scripts.patch @@ -0,0 +1,654 @@ +--- a/i3blocks.conf ++++ b/i3blocks.conf +@@ -28,6 +28,11 @@ + separator_block_width=15 + markup=none + ++# Brightness indicator ++#[brightness] ++#label=BRI ++#interval=5 ++ + # Volume indicator + # + # The first parameter sets the step (and units to display) +@@ -97,15 +102,6 @@ + #[load_average] + #interval=10 + +-# Battery indicator +-# +-# The battery instance defaults to 0. +-[battery] +-label=BAT +-#label=⚡ +-#instance=1 +-interval=30 +- + # Date Time + # + [time] +@@ -127,14 +123,14 @@ + #[openvpn] + #interval=20 + +-# Temperature ++# WireGuard support + # +-# Support multiple chips, though lm-sensors. +-# The script may be called with -w and -c switches to specify thresholds, +-# see the script for details. +-#[temperature] +-#label=TEMP +-#interval=10 ++# Support VPN, with colors. ++#[wireguard] ++#label=VPN ++#interval=5 ++#instance=wg0 ++#markup=pango + + # Key indicators + # +--- a/scripts/bandwidth ++++ b/scripts/bandwidth +@@ -2,6 +2,7 @@ + # Copyright (C) 2012 Stefan Breunig + # Copyright (C) 2014 kaueraal + # Copyright (C) 2015 Thiago Perrotta ++# Copyright (C) 2020 JesĂşs E. + + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -16,15 +17,42 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + ++# Get custom IN and OUT labels if provided by command line arguments ++while [[ $# -gt 1 ]]; do ++ key="$1" ++ case "$key" in ++ -i|--inlabel) ++ INLABEL="$2" ++ shift;; ++ -o|--outlabel) ++ OUTLABEL="$2" ++ shift;; ++ esac ++ shift ++done ++ ++[[ -z "$INLABEL" ]] && INLABEL="IN " ++[[ -z "$OUTLABEL" ]] && OUTLABEL="OUT " ++ + # Use the provided interface, otherwise the device used for the default route. +-if [[ -n $BLOCK_INSTANCE ]]; then +- INTERFACE=$BLOCK_INSTANCE +-else +- INTERFACE=$(ip route | awk '/^default/ { print $5 ; exit }') ++if [[ -z $INTERFACE ]] && [[ -n $BLOCK_INSTANCE ]]; then ++ INTERFACE=$BLOCK_INSTANCE ++elif [[ -z $INTERFACE ]]; then ++ # Verify tun, vpn connection ++ if [[ $(ip route | awk '/^default/ { print $5 ; exit }') = "tun0" ]]; then ++ INTERFACE=$(ip route | awk -v i=5 -v j=3 'FNR == i {print $j}') ++ else ++ INTERFACE=$(ip route | awk '/^default/ { print $5 ; exit }') ++ fi + fi + ++# Exit if there is no default route ++[[ -z "$INTERFACE" ]] && exit ++ + # Issue #36 compliant. +-if ! [ -e "/sys/class/net/${INTERFACE}/operstate" ] || ! [ "`cat /sys/class/net/${INTERFACE}/operstate`" = "up" ] ++if ! [ -e "/sys/class/net/${INTERFACE}/operstate" ] || \ ++ { ! [ "$TREAT_UNKNOWN_AS_UP" = "1" ] && ++ ! [ "$(cat "/sys/class/net/${INTERFACE}/operstate")" = "up" ]; } + then + echo "$INTERFACE down" + echo "$INTERFACE down" +@@ -33,11 +61,11 @@ then + fi + + # path to store the old results in +-path="/dev/shm/$(basename $0)-${INTERFACE}" ++path="/dev/shm/$(basename "$0")-${INTERFACE}" + + # grabbing data for each adapter. +-read rx < "/sys/class/net/${INTERFACE}/statistics/rx_bytes" +-read tx < "/sys/class/net/${INTERFACE}/statistics/tx_bytes" ++read -r rx < "/sys/class/net/${INTERFACE}/statistics/rx_bytes" ++read -r tx < "/sys/class/net/${INTERFACE}/statistics/tx_bytes" + + # get time + time=$(date +%s) +@@ -45,46 +73,46 @@ time=$(date +%s) + # write current data if file does not exist. Do not exit, this will cause + # problems if this file is sourced instead of executed as another process. + if ! [[ -f "${path}" ]]; then +- echo "${time} ${rx} ${tx}" > "${path}" +- chmod 0666 "${path}" ++ echo "${time} ${rx} ${tx}" > "${path}" ++ chmod 0666 "${path}" + fi + + # read previous state and update data storage +-read old < "${path}" ++read -r old < "${path}" + echo "${time} ${rx} ${tx}" > "${path}" + + # parse old data and calc time passed + old=(${old//;/ }) +-time_diff=$(( $time - ${old[0]} )) ++time_diff=$(( time - old[0] )) + + # sanity check: has a positive amount of time passed + [[ "${time_diff}" -gt 0 ]] || exit + + # calc bytes transferred, and their rate in byte/s +-rx_diff=$(( $rx - ${old[1]} )) +-tx_diff=$(( $tx - ${old[2]} )) +-rx_rate=$(( $rx_diff / $time_diff )) +-tx_rate=$(( $tx_diff / $time_diff )) ++rx_diff=$(( rx - old[1] )) ++tx_diff=$(( tx - old[2] )) ++rx_rate=$(( rx_diff / time_diff )) ++tx_rate=$(( tx_diff / time_diff )) + + # shift by 10 bytes to get KiB/s. If the value is larger than + # 1024^2 = 1048576, then display MiB/s instead + + # incoming +-echo -n "IN " +-rx_kib=$(( $rx_rate >> 10 )) +-if [[ "$rx_rate" -gt 1048576 ]]; then +- printf '%sM' "`echo "scale=1; $rx_kib / 1024" | bc`" ++echo -n "$INLABEL" ++rx_kib=$(( rx_rate >> 10 )) ++if hash bc 2>/dev/null && [[ "$rx_rate" -gt 1048576 ]]; then ++ printf '%sM' "$(echo "scale=1; $rx_kib / 1024" | bc)" + else +- echo -n "${rx_kib}K" ++ echo -n "${rx_kib}K" + fi + + echo -n " " + + # outgoing +-echo -n "OUT " +-tx_kib=$(( $tx_rate >> 10 )) +-if [[ "$tx_rate" -gt 1048576 ]]; then +- printf '%sM' "`echo "scale=1; $tx_kib / 1024" | bc`" ++echo -n "$OUTLABEL" ++tx_kib=$(( tx_rate >> 10 )) ++if hash bc 2>/dev/null && [[ "$tx_rate" -gt 1048576 ]]; then ++ printf '%sM\n' "$(echo "scale=1; $tx_kib / 1024" | bc)" + else +- echo -n "${tx_kib}K" ++ echo -n "${tx_kib}K" + fi +--- a/scripts/disk ++++ b/scripts/disk +@@ -17,7 +17,7 @@ + DIR="${BLOCK_INSTANCE:-$HOME}" + ALERT_LOW="${1:-10}" # color will turn red under this value (default: 10%) + +-df -h -P -l "$DIR" | awk -v alert_low=$ALERT_LOW ' ++df -h -P -l "$DIR" | awk -v alert_low="$ALERT_LOW" ' + /\/.*/ { + # full text + print $4 +--- a/scripts/iface ++++ b/scripts/iface +@@ -1,6 +1,7 @@ + #!/bin/bash + # Copyright (C) 2014 Julien Bonjean + # Copyright (C) 2014 Alexander Keller ++# Copyright (C) 2020 JesĂşs E. + + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -18,11 +19,11 @@ + #------------------------------------------------------------------------ + + # Use the provided interface, otherwise the device used for the default route. +-if [[ -n $BLOCK_INSTANCE ]]; then +- IF=$BLOCK_INSTANCE +-else +- IF=$(ip route | awk '/^default/ { print $5 ; exit }') +-fi ++IF="${IFACE:-$BLOCK_INSTANCE}" ++IF="${IF:-$(ip route | awk '/^default/ { print $5 ; exit }')}" ++ ++# Exit if there is no default route ++[[ -z "$IF" ]] && exit + + #------------------------------------------------------------------------ + +@@ -32,30 +33,33 @@ fi + + #------------------------------------------------------------------------ + +-if [[ "$(cat /sys/class/net/$IF/operstate)" = 'down' ]]; then +- echo down # full text +- echo down # short text +- echo \#FF0000 # color +- exit +-fi ++LABEL="${LABEL:-}" + +-case $1 in +- -4) +- AF=inet ;; +- -6) +- AF=inet6 ;; +- *) +- AF=inet6? ;; +-esac ++for flag in "$1" "$2"; do ++ case "$flag" in ++ -L) ++ if [[ "$IF" = "" ]]; then ++ LABEL="iface " ++ else ++ LABEL="$IF: " ++ fi ;; ++ esac ++done ++ ++if [[ "$IF" = "" ]] || [[ "$(cat "/sys/class/net/$IF/operstate")" = 'down' ]]; ++then ++ echo "${LABEL}down" # text ++ echo \#FF0000 # color ++ exit ++fi + +-# if no interface is found, use the first device with a global scope +-IPADDR=$(ip addr show $IF | perl -n -e "/$AF ([^\/]+).* scope global/ && print \$1 and exit") ++# Check local ip address ++IPADDR=$(ip route get 4.2.2.1 | grep -oE "src [.0-9]+" | awk '{print $NF;exit}') + + case $BLOCK_BUTTON in +- 3) echo -n "$IPADDR" | xclip -q -se c ;; ++ 3) echo -n "$IPADDR" | xclip -q -se c ;; + esac + + #------------------------------------------------------------------------ + +-echo "$IPADDR" # full text +-echo "$IPADDR" # short text ++echo "$LABEL$IPADDR" +--- a/scripts/load_average ++++ b/scripts/load_average +@@ -24,7 +24,7 @@ echo "$load" + echo "$load" + + # color if load is too high +-awk -v cpus=$cpus -v cpuload=$load ' ++awk -v cpus="$cpus" -v cpuload="$load" ' + BEGIN { + if (cpus <= cpuload) { + print "#FF0000"; +--- a/scripts/mediaplayer ++++ b/scripts/mediaplayer +@@ -1,28 +1,29 @@ + #!/usr/bin/perl ++# + # Copyright (C) 2014 Tony Crisci +- ++# Copyright (C) 2015 Thiago Perrotta ++# Copyright (c) 2021 JesĂşs E. ++# + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by + # the Free Software Foundation, either version 3 of the License, or + # (at your option) any later version. +- ++# + # This program is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + # GNU General Public License for more details. +- ++# + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + +-# Requires playerctl binary to be in your path (except cmus) +-# See: https://github.com/acrisci/playerctl +- +-# Set instance=NAME in the i3blocks configuration to specify a music player +-# (playerctl will attempt to connect to org.mpris.MediaPlayer2.[NAME] on your +-# DBus session). ++# Set instance=NAME in the i3blocks configuration to specify a music player. + ++use Time::HiRes qw(usleep); + use Env qw(BLOCK_INSTANCE); + ++use constant DELAY => 50; # Delay in ms to let network-based reflect new data. ++ + my @metadata = (); + my $player_arg = ""; + +@@ -30,16 +31,41 @@ if ($BLOCK_INSTANCE) { + $player_arg = "--player='$BLOCK_INSTANCE'"; + } + +-if ($ENV{'BLOCK_BUTTON'} == 1) { +- system("playerctl $player_arg previous"); +-} elsif ($ENV{'BLOCK_BUTTON'} == 2) { +- system("playerctl $player_arg play-pause"); +-} elsif ($ENV{'BLOCK_BUTTON'} == 3) { +- system("playerctl $player_arg next"); ++sub buttons { ++ my $method = shift; ++ ++ if($method eq 'mpd') { ++ if ($ENV{'BLOCK_BUTTON'} == 1) { ++ system("mpc prev"); ++ } elsif ($ENV{'BLOCK_BUTTON'} == 2) { ++ system("mpc toggle"); ++ } elsif ($ENV{'BLOCK_BUTTON'} == 3) { ++ system("mpc next"); ++ } elsif ($ENV{'BLOCK_BUTTON'} == 4) { ++ system("mpc volume +10"); ++ } elsif ($ENV{'BLOCK_BUTTON'} == 5) { ++ system("mpc volume -10"); ++ } ++ } elsif ($method eq 'cmus') { ++ if ($ENV{'BLOCK_BUTTON'} == 1) { ++ system("cmus-remote --prev"); ++ } elsif ($ENV{'BLOCK_BUTTON'} == 2) { ++ system("cmus-remote --pause"); ++ } elsif ($ENV{'BLOCK_BUTTON'} == 3) { ++ system("cmus-remote --next"); ++ } ++ } elsif ($method eq 'rhythmbox') { ++ if ($ENV{'BLOCK_BUTTON'} == 1) { ++ system("rhythmbox-client --previous"); ++ } elsif ($ENV{'BLOCK_BUTTON'} == 2) { ++ system("rhythmbox-client --play-pause"); ++ } elsif ($ENV{'BLOCK_BUTTON'} == 3) { ++ system("rhythmbox-client --next"); ++ } ++ } + } + +-if ($player_arg eq '' or $player_arg =~ /cmus$/) { +- # try cmus first ++sub cmus { + my @cmus = split /^/, qx(cmus-remote -Q); + if ($? == 0) { + foreach my $line (@cmus) { +@@ -54,23 +80,41 @@ if ($player_arg eq '' or $player_arg =~ /cmus$/) { + } + + if (@metadata) { ++ buttons('cmus'); ++ + # metadata found so we are done + print(join ' - ', @metadata); + exit 0; + } + } ++} + +- # if cmus was given, we are done +- exit 0 unless $player_arg eq ''; ++sub mpd { ++ my $data = qx(mpc current); ++ if (not $data eq '') { ++ buttons("mpd"); ++ print($data); ++ exit 0; ++ } + } + +-my $artist = qx(playerctl $player_arg metadata artist); +-# exit status will be nonzero when playerctl cannot find your player +-exit(0) if $?; +-push(@metadata, $artist) if $artist; ++sub rhythmbox { ++ buttons('rhythmbox'); + +-my $title = qx(playerctl $player_arg metadata title); +-exit(0) if $?; +-push(@metadata, $title) if $title; ++ my $data = qx(rhythmbox-client --print-playing --no-start); ++ print($data); ++} + +-print(join(" - ", @metadata)) if @metadata; ++if ($player_arg eq '' or $player_arg =~ /mpd/) { ++ mpd; ++} ++elsif ($player_arg =~ /cmus/) { ++ cmus; ++} ++elsif ($player_arg =~ /rhythmbox/) { ++ rhythmbox; ++} ++else { ++ print('unknown'); ++} ++print("\n"); +--- a/scripts/memory ++++ b/scripts/memory +@@ -16,7 +16,7 @@ + + TYPE="${BLOCK_INSTANCE:-mem}" + +-awk -v type=$TYPE ' ++awk -v type="$TYPE" ' + /^MemTotal:/ { + mem_total=$2 + } +--- a/scripts/volume ++++ b/scripts/volume +@@ -1,6 +1,7 @@ + #!/bin/bash + # Copyright (C) 2014 Julien Bonjean + # Copyright (C) 2014 Alexander Keller ++# Copyright (C) 2021 JesĂşs E. + + # This program is free software: you can redistribute it and/or modify + # it under the terms of the GNU General Public License as published by +@@ -18,53 +19,57 @@ + #------------------------------------------------------------------------ + + # The second parameter overrides the mixer selection +-# For PulseAudio users, use "pulse" + # For Jack/Jack2 users, use "jackplug" + # For ALSA users, you may use "default" for your primary card + # or you may use hw:# where # is the number of the card desired +-MIXER="default" +-[ -n "$(lsmod | grep pulse)" ] && MIXER="pulse" +-[ -n "$(lsmod | grep jack)" ] && MIXER="jackplug" +-MIXER="${2:-$MIXER}" ++if [[ -z "$MIXER" ]] ; then ++ MIXER="default" ++ lsmod | grep -q jack && MIXER="jackplug" ++ MIXER="${2:-$MIXER}" ++fi + + # The instance option sets the control to report and configure + # This defaults to the first control of your selected mixer + # For a list of the available, use `amixer -D $Your_Mixer scontrols` +-SCONTROL="${BLOCK_INSTANCE:-$(amixer -D $MIXER scontrols | +- sed -n "s/Simple mixer control '\([A-Za-z ]*\)',0/\1/p" | +- head -n1 +- )}" ++if [[ -z "$SCONTROL" ]] ; then ++ SCONTROL="${BLOCK_INSTANCE:-$(amixer -D "$MIXER" scontrols | ++ sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | ++ head -n1 ++ )}" ++fi + + # The first parameter sets the step to change the volume by (and units to display) + # This may be in in % or dB (eg. 5% or 3dB) +-STEP="${1:-5%}" ++if [[ -z "$STEP" ]] ; then ++ STEP="${1:-5%}" ++fi + + #------------------------------------------------------------------------ + + capability() { # Return "Capture" if the device is a capture device +- amixer -D $MIXER get $SCONTROL | +- sed -n "s/ Capabilities:.*cvolume.*/Capture/p" ++ amixer -D "$MIXER" get "$SCONTROL" | sed -n "s/ Capabilities:.*cvolume.*/Capture/p" + } + + volume() { +- amixer -D $MIXER get $SCONTROL $(capability) ++ amixer -D "$MIXER" get "$SCONTROL" "$(capability)" + } + + format() { +- perl_filter='if (/.*\[(\d+%)\] (\[(-?\d+.\d+dB)\] )?\[(on|off)\]/)' +- perl_filter+='{CORE::say $4 eq "off" ? "MUTE" : "' +- # If dB was selected, print that instead +- perl_filter+=$([[ $STEP = *dB ]] && echo '$3' || echo '$1') +- perl_filter+='"; exit}' +- perl -ne "$perl_filter" ++ perl_filter='if (/.*\[(\d+%)\] (\[(-?\d+.\d+dB)\] )?\[(on|off)\]/)' ++ perl_filter+='{CORE::say $4 eq "off" ? "MUTE" : "' ++ # If dB was selected, print that instead ++ perl_filter+=$([[ $STEP = *dB ]] && echo '$3' || echo '$1') ++ perl_filter+='"; exit}' ++ output=$(perl -ne "$perl_filter") ++ echo "$LABEL$output" + } + + #------------------------------------------------------------------------ + + case $BLOCK_BUTTON in +- 3) amixer -q -D $MIXER sset $SCONTROL $(capability) toggle ;; # right click, mute/unmute +- 4) amixer -q -D $MIXER sset $SCONTROL $(capability) ${STEP}+ unmute ;; # scroll up, increase +- 5) amixer -q -D $MIXER sset $SCONTROL $(capability) ${STEP}- unmute ;; # scroll down, decrease ++ 3) "amixer -q -D $MIXER sset $SCONTROL $(capability) toggle" ;; # right click, mute/unmute ++ 4) "amixer -q -D $MIXER sset $SCONTROL $(capability) ${STEP}+ unmute" ;; # scroll up, increase ++ 5) "amixer -q -D $MIXER sset $SCONTROL $(capability) ${STEP}- unmute" ;; # scroll down, decrease + esac + +-volume | format ++volume "$@" | format "$@" +--- a/scripts/wifi ++++ b/scripts/wifi +@@ -23,16 +23,16 @@ INTERFACE="${BLOCK_INSTANCE:-wlan0}" + # As per #36 -- It is transparent: e.g. if the machine has no battery or wireless + # connection (think desktop), the corresponding block should not be displayed. + [[ ! -d /sys/class/net/${INTERFACE}/wireless ]] || +- [[ "$(cat /sys/class/net/$INTERFACE/operstate)" = 'down' ]] && exit ++ [[ "$(cat "/sys/class/net/$INTERFACE/operstate")" = 'down' ]] && exit + + #------------------------------------------------------------------------ + +-QUALITY=$(grep $INTERFACE /proc/net/wireless | awk '{ print int($3 * 100 / 70) }') ++QUALITY=$(grep "$INTERFACE" /proc/net/wireless | awk '{ print int($3 * 100 / 70) }') + + #------------------------------------------------------------------------ + +-echo $QUALITY% # full text +-echo $QUALITY% # short text ++echo "$QUALITY%" # full text ++echo "$QUALITY%" # short text + + # color + if [[ $QUALITY -ge 80 ]]; then +--- a/i3blocks.1 ++++ b/i3blocks.1 +@@ -184,22 +184,6 @@ + If the command line returns 0 or 33, the block is updated\. Otherwise, it is considered a failure and the first line (if any) is still displayed\. Note that stderr is ignored\. A return code of 33 will set the \fBurgent\fR flag to true\. + . + .P +-For example, this script prints the battery percentage and sets the urgent flag if it is below 10%: +-. +-.IP "" 4 +-. +-.nf +- +-BAT=`acpi \-b | grep \-E \-o \'[0\-9][0\-9]?%\'` +- +-echo "BAT: $BAT" +-test ${BAT%?} \-le 10 && exit 33 || exit 0 +-. +-.fi +-. +-.IP "" 0 +-. +-.P + When forking a block command, \fBi3blocks\fR will set the environment with some \fBBLOCK_*\fR variables\. The following variables are always provided, with eventually an empty string as the value\. + . + .TP +@@ -240,7 +224,7 @@ + .IP "" 0 + . + .P +-Note that \fBi3blocks\fR provides a set of optional scripts for convenience, such as network status, battery check, cpu load, volume, etc\. ++Note that \fBi3blocks\fR provides a set of optional scripts for convenience, such as network status, cpu load, volume, etc\. + . + .SH "EXAMPLES" + As an example, here is a close configuration to i3status(1) default settings: +@@ -268,8 +252,6 @@ + [ethernet] + min_width=E: 255\.255\.255\.255 (1000 Mbit/s) + +-[battery] +- + [cpu] + + [datetime] +@@ -308,7 +290,6 @@ + [free] + [wifi] + [ethernet] +-[battery] + [cpu] + [datetime] + . +--- a/i3blocks.1.ronn ++++ b/i3blocks.1.ronn +@@ -139,14 +139,6 @@ + considered a failure and the first line (if any) is still displayed. Note that + stderr is ignored. A return code of 33 will set the `urgent` flag to true. + +-For example, this script prints the battery percentage and sets the urgent flag +-if it is below 10%: +- +- BAT=`acpi -b | grep -E -o '[0-9][0-9]?%'` +- +- echo "BAT: $BAT" +- test ${BAT%?} -le 10 && exit 33 || exit 0 +- + When forking a block command, **i3blocks** will set the environment with some + `BLOCK_*` variables. The following variables are always provided, with + eventually an empty string as the value. +@@ -176,7 +168,7 @@ + align=left + + Note that **i3blocks** provides a set of optional scripts for convenience, such +-as network status, battery check, cpu load, volume, etc. ++as network status, cpu load, volume, etc. + + ## EXAMPLES + +@@ -200,8 +192,6 @@ + [ethernet] + min_width=E: 255.255.255.255 (1000 Mbit/s) + +- [battery] +- + [cpu] + + [datetime] +@@ -224,7 +214,6 @@ + [free] + [wifi] + [ethernet] +- [battery] + [cpu] + [datetime] + diff --git a/i3blocks/wireguard.bash b/i3blocks/wireguard.bash new file mode 100644 index 0000000..a9da311 --- /dev/null +++ b/i3blocks/wireguard.bash @@ -0,0 +1,14 @@ +#!/bin/bash + +INSTANCE="${BLOCK_INSTANCE:-}" + +# Check VPN status +GET_VPN=$(ip route get 4.2.2.1 | grep -E -- "wg0|$INSTANCE" | awk '{ print $3 }') + +# Store status +if [[ $GET_VPN == *"wg0"* || $GET_VPN == "$INSTANCE" ]] +then + echo -e "ON\n" +else + echo -e "OFF\n" +fi diff --git a/i3status/PKGBUILD b/i3status/PKGBUILD new file mode 100644 index 0000000..cf139d7 --- /dev/null +++ b/i3status/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=i3status +pkgver=2.13 +pkgrel=2 +pkgdesc="Generates status bar to use for example with i3bar or dzen2" +arch=('i686' 'x86_64') +url='https://i3wm.org/i3status/' +license=('Modified-BSD') +groups=('i3') +depends=('sndio' 'confuse' 'libnl' 'yajl') +makedepends=('asciidoc' 'xmlto') +backup=('etc/i3status.conf') +options=('docs') +source=("https://i3wm.org/i3status/$pkgname-$pkgver.tar.bz2" + "build-without-pulse.patch" + "add-sndio-backend.patch") +sha512sums=('6dadff19e53499d169ba4f491e1f821014b4f92fc3c93d7947c85cbbbdeaba538d02bd8ab98fe266a8f80756a287fd5803ec77a8cd874d50082b5cad309875c2' + '3efd2ca3ef71a37689d5e6bbf0acb37571fa5dcf20608bad78f03a23386c4ece09519f7defe8d5ffe6d566b7864f82492316de558e5fdf5c9c2e0c3267ca263f' + 'd44093627fabc712b6464c1d045b5592995ab8b64b8227e9ee14bef384dc2226557239cbd7c3c67d39ff3fdfa065f507e75832ec2bc470e8a4aedd5d50b2830c') + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 -i $srcdir/build-without-pulse.patch + patch -Np1 -i $srcdir/add-sndio-backend.patch + autoreconf -vi +} + +build() { + cd $pkgname-$pkgver + mkdir build && cd build + + ../configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-sanitizers \ + --disable-pulseaudio + make CPPFLAGS+="-U_FORTIFY_SOURCE" +} + +package() { + cd $pkgname-$pkgver/build + make DESTDIR="$pkgdir" install + install -Dm644 -t "$pkgdir"/usr/share/licenses/$pkgname ../LICENSE +} diff --git a/i3status/add-sndio-backend.patch b/i3status/add-sndio-backend.patch new file mode 100644 index 0000000..990ffd9 --- /dev/null +++ b/i3status/add-sndio-backend.patch @@ -0,0 +1,229 @@ +--- /dev/null ++++ src/sndio.c +@@ -0,0 +1,201 @@ ++#include ++#include ++#include ++#include ++#include ++#include "i3status.h" ++ ++struct control { ++ struct control *next; ++ char name[32]; ++ unsigned int addr; ++ unsigned int max; ++ unsigned int value; ++ unsigned int muted; ++ unsigned int muteaddr; ++}; ++ ++static int initialized; ++static struct sioctl_hdl *hdl; ++static struct control *controls; ++static struct pollfd *pfds; ++ ++/* ++ * new control registered or control changed ++ */ ++static void ondesc(void *unused, struct sioctl_desc *d, int val) ++{ ++ struct control *i, **pi; ++ ++ if (d == NULL) ++ return; ++ ++ /* ++ * delete existing control with the same address ++ */ ++ for (pi = &controls; (i = *pi) != NULL; pi = &i->next) { ++ if (d->addr == i->addr) { ++ *pi = i->next; ++ free(i); ++ break; ++ } ++ } ++ ++ /* ++ * if we find an output.mute, associate it with its output.level ++ */ ++ if (d->type == SIOCTL_SW && ++ d->group[0] == 0 && ++ strcmp(d->node0.name, "output") == 0 && ++ strcmp(d->func, "mute") == 0) { ++ char name[32]; ++ snprintf(name, sizeof(name), "%s%d", d->node0.name, d->node0.unit); ++ for (pi = &controls; (i = *pi) != NULL; pi = &i->next) { ++ if (strcmp(name, i->name) == 0) { ++ i->muted = val; ++ i->muteaddr = d->addr; ++ break; ++ } ++ } ++ return; ++ } ++ ++ /* ++ * we're interested in top-level output.level controls only ++ */ ++ if (d->type != SIOCTL_NUM || ++ d->group[0] != 0 || ++ strcmp(d->node0.name, "output") != 0 || ++ strcmp(d->func, "level") != 0) ++ return; ++ ++ i = malloc(sizeof(struct control)); ++ if (i == NULL) { ++ fprintf(stderr, "sndio: failed to allocate control\n"); ++ return; ++ } ++ ++ snprintf(i->name, sizeof(i->name), "%s%d", d->node0.name, d->node0.unit); ++ i->addr = d->addr; ++ i->max = d->maxval; ++ i->value = val; ++ i->next = controls; ++ i->muted = 0; ++ i->muteaddr = -1; ++ controls = i; ++} ++ ++/* ++ * control value changed ++ */ ++static void onval(void *unused, unsigned int addr, unsigned int value) ++{ ++ struct control *c; ++ ++ for (c = controls; ; c = c->next) { ++ if (c == NULL) ++ return; ++ if (c->addr == addr) { ++ c->value = value; ++ return; ++ } ++ if (c->muteaddr == addr) { ++ c->muted = value; ++ return; ++ } ++ } ++} ++ ++static void cleanup(void) ++{ ++ struct control *c; ++ ++ if (hdl) { ++ sioctl_close(hdl); ++ hdl = NULL; ++ } ++ if (pfds) { ++ free(pfds); ++ pfds = NULL; ++ } ++ while ((c = controls) != NULL) { ++ controls = c->next; ++ free(c); ++ } ++} ++ ++static int init(void) ++{ ++ /* open device */ ++ hdl = sioctl_open(SIO_DEVANY, SIOCTL_READ, 0); ++ if (hdl == NULL) { ++ fprintf(stderr, "sndio: cannot open device\n"); ++ goto failed; ++ } ++ ++ /* register call-back for control description changes */ ++ if (!sioctl_ondesc(hdl, ondesc, NULL)) { ++ fprintf(stderr, "sndio: cannot get description\n"); ++ goto failed; ++ } ++ ++ /* register call-back for volume changes */ ++ if (!sioctl_onval(hdl, onval, NULL)) { ++ fprintf(stderr, "sndio: cannot get values\n"); ++ goto failed; ++ } ++ ++ /* allocate structures for poll() syscall */ ++ pfds = calloc(sioctl_nfds(hdl), sizeof(struct pollfd)); ++ if (pfds == NULL) { ++ fprintf(stderr, "sndio: cannot allocate pollfd structures\n"); ++ goto failed; ++ } ++ return 1; ++failed: ++ cleanup(); ++ return 0; ++} ++ ++int volume_sndio(int *vol, int *muted) ++{ ++ struct control *c; ++ int n, v; ++ ++ if (!initialized) { ++ initialized = 1; ++ init(); ++ } ++ if (hdl == NULL) ++ return -1; ++ ++ /* check if controls changed */ ++ n = sioctl_pollfd(hdl, pfds, POLLIN); ++ if (n > 0) { ++ n = poll(pfds, n, 0); ++ if (n > 0) { ++ if (sioctl_revents(hdl, pfds) & POLLHUP) { ++ fprintf(stderr, "sndio: disconnected\n"); ++ cleanup(); ++ return -1; ++ } ++ } ++ } ++ ++ /* ++ * get control value: as there may be multiple ++ * channels, return the minimum ++ */ ++ *vol = 100; ++ *muted = 0; ++ for (c = controls; c != NULL; c = c->next) { ++ v = (c->value * 100 + c->max / 2) / c->max; ++ if (v < *vol) { ++ *vol = v; ++ *muted = c->muted; ++ ++ } ++ } ++ ++ return 0; ++} +--- a/configure.ac ++++ b/configure.ac +@@ -91,6 +91,13 @@ case $host_os in + ;; + esac + ++# if sndio is available, define USE_SNDIO ++AC_CHECK_HEADER(sndio.h, ++ [AC_CHECK_LIB([sndio], [sio_open], [ ++ AC_SUBST(SNDIO_LIBS, "-lsndio") ++ AC_DEFINE([USE_SNDIO], [], [Use sndio]) ++ ], [])], []) ++ + dnl TODO: check for libbsd for GNU/kFreeBSD + + # Checks for programs. +--- a/include/i3status.h ++++ b/include/i3status.h +@@ -425,6 +425,7 @@ void print_volume(volume_ctx_t *ctx); + + bool process_runs(const char *path); + int volume_pulseaudio(uint32_t sink_idx, const char *sink_name); ++int volume_sndio(int *vol, int *muted); + bool description_pulseaudio(uint32_t sink_idx, const char *sink_name, char buffer[MAX_SINK_DESCRIPTION_LEN]); + bool pulse_initialize(void); diff --git a/i3status/build-without-pulse.patch b/i3status/build-without-pulse.patch new file mode 100644 index 0000000..eb8030e --- /dev/null +++ b/i3status/build-without-pulse.patch @@ -0,0 +1,408 @@ +--- a/configure.ac 2019-06-30 19:53:24.000000000 +0200 ++++ b/configure.ac 2021-07-19 13:39:39.769190529 +0200 +@@ -80,11 +80,24 @@ + PKG_CHECK_MODULES([CONFUSE], [libconfuse]) + PKG_CHECK_MODULES([YAJL], [yajl]) + ++AC_ARG_ENABLE(pulseaudio, ++ AS_HELP_STRING( ++ [--disable-pulseaudio], ++ [build without pulseaudio support]), ++ [ax_pulse=$enableval], ++ [ax_pulse=yes]) ++AM_CONDITIONAL([PULSE], [test x$ax_pulse = xyes]) ++AS_IF([test x"$ax_pulse" = x"yes"], ++ [PKG_CHECK_MODULES([PULSE], [libpulse])]) ++pulse_def=0 ++AS_IF([test x"$ax_pulse" = x"yes"], ++ [pulse_def=1]) ++AC_DEFINE_UNQUOTED([HAS_PULSEAUDIO], [$pulse_def], [Build with pulseaudio]) ++ + case $host_os in + linux*) + PKG_CHECK_MODULES([NLGENL], [libnl-genl-3.0]) + PKG_CHECK_MODULES([ALSA], [alsa]) +- PKG_CHECK_MODULES([PULSE], [libpulse]) + ;; + netbsd*) + AC_SEARCH_LIBS([prop_string_create], [prop]) +@@ -101,12 +114,20 @@ + AC_PROG_RANLIB + AC_PROG_LN_S + +-AC_PATH_PROG([PATH_ASCIIDOC], [asciidoc], [no]) +-AS_IF([test x"$PATH_ASCIIDOC" = x"no"], +- [AC_MSG_ERROR([asciidoc is required for generating man pages])]) +-AC_PATH_PROG([PATH_XMLTO], [xmlto], [no]) +-AS_IF([test x"$PATH_XMLTO" = x"no"], +- [AC_MSG_ERROR([xmlto is required for generating man pages])]) ++AC_ARG_ENABLE(mans, ++ AS_HELP_STRING( ++ [--disable-mans], ++ [disable building manual pages]), ++ [ax_mans=$enableval], ++ [ax_mans=yes]) ++AS_IF([test x$ax_mans = xyes], [ ++ AC_PATH_PROG([PATH_ASCIIDOC], [asciidoc]) ++]) ++AS_IF([test x$ax_mans = xyes], [ ++ AC_PATH_PROG([PATH_XMLTO], [xmlto]) ++ AC_PATH_PROG([PATH_POD2MAN], [pod2man]) ++]) ++AM_CONDITIONAL([BUILD_MANS], [test x$ax_mans = xyes && test x$PATH_ASCIIDOC != x && test x$PATH_XMLTO != x && test x$PATH_POD2MAN != x]) + + AM_PROG_AR + +@@ -131,15 +152,12 @@ + + AC_OUTPUT + +-in_git_worktree=`git rev-parse --is-inside-work-tree 2>/dev/null` +-if [ "$in_git_worktree" = "true" ]; then +- git_dir=`git rev-parse --git-dir 2>/dev/null` +- srcdir=`dirname "$git_dir"` +- exclude_dir=`pwd | sed "s,^$srcdir,,g"` +- if ! grep -q "^$exclude_dir" "$git_dir/info/exclude"; then +- echo "$exclude_dir" >> "$git_dir/info/exclude" +- fi +-fi ++AS_IF([test -d ${srcdir}/.git], [ ++ srcdir_abs=`readlink -f "$srcdir"` ++ exclude_dir=`pwd | sed "s,^$srcdir_abs/*,,g"` ++ AS_IF([! grep -q "^$exclude_dir" "${srcdir}/.git/info/exclude"], ++ [echo "$exclude_dir" >> "${srcdir}/.git/info/exclude"])]) ++ + + echo \ + "-------------------------------------------------------------------------------- +@@ -151,6 +169,7 @@ + AS_HELP_STRING([enable debug flags:], [${ax_enable_debug}]) + AS_HELP_STRING([code coverage:], [${CODE_COVERAGE_ENABLED}]) + AS_HELP_STRING([enabled sanitizers:], [${ax_enabled_sanitizers}]) ++AS_HELP_STRING([pulseaudio support:], [${ax_pulse}]) + + To compile, run: + +--- a/Makefile.am 2019-02-21 15:35:12.000000000 +0100 ++++ b/Makefile.am 2021-07-19 13:47:05.320995008 +0200 +@@ -5,6 +5,7 @@ + + bin_PROGRAMS = i3status + ++if BUILD_MANS + dist_man1_MANS = \ + $(asciidoc_MANS) + +@@ -17,6 +18,9 @@ + + man/%.xml: man/%.man man/asciidoc.conf man/$(dirstamp) + $(AM_V_GEN) @PATH_ASCIIDOC@ -d manpage -b docbook -f $(top_builddir)/man/asciidoc.conf -o $@ $< ++else ++asciidoc_MANS = ++endif + + AM_CPPFLAGS = \ + -DSYSCONFDIR="\"$(sysconfdir)\"" \ +@@ -50,6 +54,7 @@ + i3status.c \ + src/auto_detect_format.c \ + src/first_network_device.c \ ++ src/format_placeholders.c \ + src/general.c \ + src/output.c \ + src/print_battery_info.c \ +@@ -68,8 +73,11 @@ + src/print_volume.c \ + src/print_wireless_info.c \ + src/print_file_contents.c \ +- src/process_runs.c \ +- src/pulse.c ++ src/process_runs.c ++ ++if PULSE ++i3status_SOURCES += src/pulse.c ++endif + + dist_sysconf_DATA = \ + i3status.conf +--- a/src/print_volume.c 2019-01-23 09:03:56.000000000 +0100 ++++ b/src/print_volume.c 2021-07-19 13:53:19.409302195 +0200 +@@ -21,7 +21,7 @@ + #include + #endif + +-#ifdef __OpenBSD__ ++#if defined(__NetBSD__) || defined(__OpenBSD__) + #include + #include + #include +@@ -31,6 +31,8 @@ + #include "i3status.h" + #include "queue.h" + ++#define STRING_SIZE 10 ++ + #define ALSA_VOLUME(channel) \ + err = snd_mixer_selem_get_##channel##_dB_range(elem, &min, &max) || \ + snd_mixer_selem_get_##channel##_dB(elem, 0, &val); \ +@@ -48,30 +50,20 @@ + fmt = fmt_muted; \ + } + +-static char *apply_volume_format(const char *fmt, char *outwalk, int ivolume, const char *devicename) { +- const char *walk = fmt; ++static char *apply_volume_format(const char *fmt, char *buffer, int ivolume, const char *devicename) { ++ char string_volume[STRING_SIZE]; + +- for (; *walk != '\0'; walk++) { +- if (*walk != '%') { +- *(outwalk++) = *walk; +- +- } else if (BEGINS_WITH(walk + 1, "%")) { +- outwalk += sprintf(outwalk, "%s", pct_mark); +- walk += strlen("%"); +- +- } else if (BEGINS_WITH(walk + 1, "volume")) { +- outwalk += sprintf(outwalk, "%d%s", ivolume, pct_mark); +- walk += strlen("volume"); +- +- } else if (BEGINS_WITH(walk + 1, "devicename")) { +- outwalk += sprintf(outwalk, "%s", devicename); +- walk += strlen("devicename"); ++ snprintf(string_volume, STRING_SIZE, "%d%s", ivolume, pct_mark); + +- } else { +- *(outwalk++) = '%'; +- } +- } +- return outwalk; ++ placeholder_t placeholders[] = { ++ {.name = "%%", .value = pct_mark}, ++ {.name = "%volume", .value = string_volume}, ++ {.name = "%devicename", .value = devicename}}; ++ ++ const size_t num = sizeof(placeholders) / sizeof(placeholder_t); ++ buffer = format_placeholders(fmt, &placeholders[0], num); ++ ++ return buffer; + } + + void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *fmt_muted, const char *device, const char *mixer, int mixer_idx) { +@@ -86,7 +78,7 @@ + free(instance); + } + +-#if !defined(__DragonFly__) && !defined(__OpenBSD__) ++#if HAS_PULSEAUDIO + /* Try PulseAudio first */ + + /* If the device name has the format "pulse[:N]" where N is the +@@ -119,11 +111,11 @@ + /* negative result means error, stick to 0 */ + if (ivolume < 0) + ivolume = 0; +- outwalk = apply_volume_format(muted ? fmt_muted : fmt, +- outwalk, +- ivolume, +- description); +- goto out; ++ buffer = apply_volume_format(muted ? fmt_muted : fmt, ++ buffer, ++ ivolume, ++ description); ++ goto out_with_format; + } else if (!strcasecmp(device, "default") && pulse_initialize()) { + /* no device specified or "default" set */ + char description[MAX_SINK_DESCRIPTION_LEN]; +@@ -136,11 +128,11 @@ + START_COLOR("color_degraded"); + pbval = 0; + } +- outwalk = apply_volume_format(muted ? fmt_muted : fmt, +- outwalk, +- ivolume, +- description); +- goto out; ++ buffer = apply_volume_format(muted ? fmt_muted : fmt, ++ buffer, ++ ivolume, ++ description); ++ goto out_with_format; + } + /* negative result or NULL description means error, fail PulseAudio attempt */ + } +@@ -242,13 +234,14 @@ + ALSA_MUTE_SWITCH(capture) + } + +- outwalk = apply_volume_format(fmt, outwalk, avg, mixer_name); ++ buffer = apply_volume_format(fmt, buffer, avg, mixer_name); + + snd_mixer_close(m); + snd_mixer_selem_id_free(sid); ++ goto out_with_format; + + #endif +-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) ++#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) + char *mixerpath; + char defaultmixer[] = "/dev/mixer"; + int mixfd, vol, devmask = 0; +@@ -261,7 +254,7 @@ + mixerpath = defaultmixer; + + if ((mixfd = open(mixerpath, O_RDWR)) < 0) { +-#if defined(__OpenBSD__) ++#if defined(__NetBSD__) || defined(__OpenBSD__) + warn("audioio: Cannot open mixer"); + #else + warn("OSS: Cannot open mixer"); +@@ -272,7 +265,7 @@ + if (mixer_idx > 0) + free(mixerpath); + +-#if defined(__OpenBSD__) ++#if defined(__NetBSD__) || defined(__OpenBSD__) + int oclass_idx = -1, master_idx = -1, master_mute_idx = -1; + int master_next = AUDIO_MIXER_LAST; + mixer_devinfo_t devinfo, devinfo2; +@@ -327,15 +320,17 @@ + vol = (int)vinfo.un.value.level[AUDIO_MIXER_LEVEL_MONO]; + } + +- vinfo.dev = master_mute_idx; +- vinfo.type = AUDIO_MIXER_ENUM; +- if (ioctl(mixfd, AUDIO_MIXER_READ, &vinfo) == -1) +- goto out; ++ if (master_mute_idx != -1) { ++ vinfo.dev = master_mute_idx; ++ vinfo.type = AUDIO_MIXER_ENUM; ++ if (ioctl(mixfd, AUDIO_MIXER_READ, &vinfo) == -1) ++ goto out; + +- if (master_mute_idx != -1 && vinfo.un.ord) { +- START_COLOR("color_degraded"); +- fmt = fmt_muted; +- pbval = 0; ++ if (vinfo.un.ord) { ++ START_COLOR("color_degraded"); ++ fmt = fmt_muted; ++ pbval = 0; ++ } + } + + #else +@@ -354,13 +349,20 @@ + } + + #endif +- outwalk = apply_volume_format(fmt, outwalk, vol & 0x7f, devicename); ++ buffer = apply_volume_format(fmt, buffer, vol & 0x7f, devicename); + close(mixfd); ++ goto out_with_format; + #endif + + out: +- *outwalk = '\0'; + if (!pbval) + END_COLOR; + OUTPUT_FULL_TEXT(buffer); ++ return; ++ ++out_with_format: ++ if (!pbval) ++ END_COLOR; ++ OUTPUT_FULL_TEXT(buffer); ++ free(buffer); + } +--- /dev/null 2021-07-19 09:18:28.360000528 +0200 ++++ b/src/format_placeholders.c 2021-07-19 13:57:16.830921169 +0200 +@@ -0,0 +1,70 @@ ++/* ++ * vim:ts=4:sw=4:expandtab ++ * ++ * i3 - an improved dynamic tiling window manager ++ * © 2009 Michael Stapelberg and contributors (see also: LICENSE) ++ * ++ */ ++// copied from i3:libi3/format_placeholders.c ++#include ++#include ++#include ++#include ++#include ++ ++#include "i3status.h" ++ ++#ifndef CS_STARTS_WITH ++#define CS_STARTS_WITH(string, needle) (strncmp((string), (needle), strlen((needle))) == 0) ++#endif ++ ++/* ++ * Replaces occurrences of the defined placeholders in the format string. ++ * ++ */ ++char *format_placeholders(const char *format, placeholder_t *placeholders, int num) { ++ if (format == NULL) ++ return NULL; ++ ++ /* We have to first iterate over the string to see how much buffer space ++ * we need to allocate. */ ++ int buffer_len = strlen(format) + 1; ++ for (const char *walk = format; *walk != '\0'; walk++) { ++ for (int i = 0; i < num; i++) { ++ if (!CS_STARTS_WITH(walk, placeholders[i].name)) ++ continue; ++ ++ buffer_len = buffer_len - strlen(placeholders[i].name) + strlen(placeholders[i].value); ++ walk += strlen(placeholders[i].name) - 1; ++ break; ++ } ++ } ++ ++ /* Now we can parse the format string. */ ++ char buffer[buffer_len]; ++ char *outwalk = buffer; ++ for (const char *walk = format; *walk != '\0'; walk++) { ++ if (*walk != '%') { ++ *(outwalk++) = *walk; ++ continue; ++ } ++ ++ bool matched = false; ++ for (int i = 0; i < num; i++) { ++ if (!CS_STARTS_WITH(walk, placeholders[i].name)) { ++ continue; ++ } ++ ++ matched = true; ++ outwalk += sprintf(outwalk, "%s", placeholders[i].value); ++ walk += strlen(placeholders[i].name) - 1; ++ break; ++ } ++ ++ if (!matched) ++ *(outwalk++) = *walk; ++ } ++ ++ *outwalk = '\0'; ++ return sstrdup(buffer); ++} +--- a/include/i3status.h 2019-02-21 15:35:12.000000000 +0100 ++++ b/include/i3status.h 2021-07-19 14:06:39.618462946 +0200 +@@ -198,6 +199,16 @@ + void reset_cursor(void); + void maybe_escape_markup(char *text, char **buffer); + ++// copied from i3:libi3/format_placeholders.c ++/* src/format_placeholders.c */ ++typedef struct { ++ /* The placeholder to be replaced, e.g., "%title". */ ++ const char *name; ++ /* The value this placeholder should be replaced with. */ ++ const char *value; ++} placeholder_t; ++char *format_placeholders(const char *format, placeholder_t *placeholders, int num); ++ + /* src/auto_detect_format.c */ + char *auto_detect_format(); diff --git a/icedove-uxp/0001-Restore-risky-system-libraries.patch b/icedove-uxp/0001-Restore-risky-system-libraries.patch new file mode 100644 index 0000000..8b19daa --- /dev/null +++ b/icedove-uxp/0001-Restore-risky-system-libraries.patch @@ -0,0 +1,743 @@ +From 4a192ea19e118a6b8c982b4a8a14fd4523c287b8 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:07:41 -0400 +Subject: [PATCH 01/12] Restore risky system libraries + +WARNING: Not recommended and entirely unsupported upstream. + +libevent - known incompatibilities causing crashes with certain version/application combinations. +ICU - system ICU will break JS Intl. +sqlite - at the core of our profile manipulation, places, and many functions. If the lib API ever deviates in the slightest it will kill us. +libpng for APNG and misc fixes +libvpx for strict compat +--- + build/autoconf/icu.m4 | 16 +- + build/directive4.py | 3 + + build/moz.configure/old.configure | 5 + + config/Makefile.in | 4 + + config/external/icu/moz.build | 22 +- + config/external/moz.build | 6 +- + config/external/nss/Makefile.in | 2 + + config/moz.build | 3 + + config/system-headers | 32 ++ + db/sqlite3/src/moz.build | 10 +- + ipc/chromium/moz.build | 4 +- + .../src/third_party/libeventcommon.mozbuild | 2 +- + ipc/chromium/src/third_party/moz.build | 3 + + media/webrtc/signaling/test/common.build | 3 + + old-configure.in | 284 ++++++++++++++++++ + storage/SQLiteMutex.h | 2 +- + storage/moz.build | 4 + + toolkit/library/moz.build | 9 + + 18 files changed, 393 insertions(+), 21 deletions(-) + +diff --git a/build/autoconf/icu.m4 b/build/autoconf/icu.m4 +index 090d6c0a2..d76c98c29 100644 +--- a/build/autoconf/icu.m4 ++++ b/build/autoconf/icu.m4 +@@ -9,6 +9,18 @@ AC_DEFUN([MOZ_CONFIG_ICU], [ + + ICU_LIB_NAMES= + ++MOZ_SYSTEM_ICU= ++MOZ_ARG_WITH_BOOL(system-icu, ++[ --with-system-icu ++ Use system ICU (located with pkgconfig)], ++ MOZ_SYSTEM_ICU=1) ++if test -n "$MOZ_SYSTEM_ICU"; then ++ PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 58.1) ++ CFLAGS="$CFLAGS $MOZ_ICU_CFLAGS" ++ CXXFLAGS="$CXXFLAGS $MOZ_ICU_CFLAGS" ++fi ++AC_SUBST(MOZ_SYSTEM_ICU) ++ + dnl We always use ICU. + USE_ICU=1 + +@@ -38,7 +50,7 @@ if test -n "$USE_ICU"; then + dnl We also don't do it on Windows because sometimes the file goes + dnl missing -- possibly due to overzealous antivirus software? -- + dnl which prevents the browser from starting up :( +- if test -z "$JS_STANDALONE"; then ++ if test -z "$JS_STANDALONE" -a -z "$MOZ_SYSTEM_ICU"; then + MOZ_ICU_DATA_ARCHIVE=1 + else + MOZ_ICU_DATA_ARCHIVE= +@@ -51,7 +63,7 @@ AC_SUBST(USE_ICU) + AC_SUBST(ICU_DATA_FILE) + AC_SUBST(MOZ_ICU_DATA_ARCHIVE) + +-if test -n "$USE_ICU"; then ++if test -n "$USE_ICU" -a -z "$MOZ_SYSTEM_ICU"; then + if test -z "$YASM" -a -z "$GNU_AS" -a "$COMPILE_ENVIRONMENT"; then + AC_MSG_ERROR([Building ICU requires either yasm or a GNU assembler. If you do not have either of those available for this platform you must use --without-intl-api]) + fi +diff --git a/build/directive4.py b/build/directive4.py +index 650349d68..38465628b 100644 +--- a/build/directive4.py ++++ b/build/directive4.py +@@ -36,6 +36,9 @@ if ('MOZ_OFFICIAL_BRANDING' in listConfig) or (strBrandingDirectory.endswith("br + 'MOZ_SYSTEM_JPEG', + 'MOZ_SYSTEM_ZLIB', + 'MOZ_SYSTEM_BZ2', ++ 'MOZ_SYSTEM_PNG', ++ 'MOZ_SYSTEM_LIBVPX', ++ 'MOZ_SYSTEM_SQLITE', + 'MOZ_SYSTEM_JEMALLOC' + ] + +diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure +index aba1edf85..9568b4c88 100644 +--- a/build/moz.configure/old.configure ++++ b/build/moz.configure/old.configure +@@ -236,6 +236,7 @@ def old_configure_options(*options): + '--enable-system-cairo', + '--enable-system-extension-dirs', + '--enable-system-pixman', ++ '--enable-system-sqlite', + '--enable-tasktracer', + '--enable-tests', + '--enable-thread-sanitizer', +@@ -289,7 +290,11 @@ def old_configure_options(*options): + '--with-sixgill', + '--with-soft-float', + '--with-system-bz2', ++ '--with-system-icu', + '--with-system-jpeg', ++ '--with-system-libevent', ++ '--with-system-libvpx', ++ '--with-system-png', + '--with-system-zlib', + '--with-thumb', + '--with-thumb-interwork', +diff --git a/config/Makefile.in b/config/Makefile.in +index c9cc3592c..10807cfb9 100644 +--- a/config/Makefile.in ++++ b/config/Makefile.in +@@ -44,7 +44,11 @@ export:: $(export-preqs) + -DMOZ_SYSTEM_HUNSPELL=$(MOZ_SYSTEM_HUNSPELL) \ + -DMOZ_SYSTEM_BZ2=$(MOZ_SYSTEM_BZ2) \ + -DMOZ_SYSTEM_ZLIB=$(MOZ_SYSTEM_ZLIB) \ ++ -DMOZ_SYSTEM_PNG=$(MOZ_SYSTEM_PNG) \ + -DMOZ_SYSTEM_JPEG=$(MOZ_SYSTEM_JPEG) \ ++ -DMOZ_SYSTEM_LIBEVENT=$(MOZ_SYSTEM_LIBEVENT) \ ++ -DMOZ_SYSTEM_LIBVPX=$(MOZ_SYSTEM_LIBVPX) \ ++ -DMOZ_SYSTEM_ICU=$(MOZ_SYSTEM_ICU) \ + $(srcdir)/system-headers $(srcdir)/stl-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers + $(INSTALL) system_wrappers $(DIST) + +diff --git a/config/external/icu/moz.build b/config/external/icu/moz.build +index 488a02159..248652a85 100644 +--- a/config/external/icu/moz.build ++++ b/config/external/icu/moz.build +@@ -6,14 +6,16 @@ + + Library('icu') + +-DIRS += [ +- 'common', +- 'data', +- 'i18n', +-] +- +-if CONFIG['MOZ_ICU_DATA_ARCHIVE']: +- DIRS += ['stubdata'] +- USE_LIBS += ['icustubdata'] ++if CONFIG['MOZ_SYSTEM_ICU']: ++ OS_LIBS += CONFIG['MOZ_ICU_LIBS'] + else: +- USE_LIBS += ['icudata'] ++ DIRS += [ ++ 'common', ++ 'data', ++ 'i18n', ++ ] ++ if CONFIG['MOZ_ICU_DATA_ARCHIVE']: ++ DIRS += ['stubdata'] ++ USE_LIBS += ['icustubdata'] ++ else: ++ USE_LIBS += ['icudata'] +diff --git a/config/external/moz.build b/config/external/moz.build +index 1234016fa..cedef8a31 100644 +--- a/config/external/moz.build ++++ b/config/external/moz.build +@@ -28,12 +28,14 @@ if CONFIG['MOZ_TREMOR']: + if CONFIG['MOZ_WEBM_ENCODER']: + external_dirs += ['media/libmkv'] + +-external_dirs += ['media/libvpx'] ++if not CONFIG['MOZ_SYSTEM_LIBVPX']: ++ external_dirs += ['media/libvpx'] + + if CONFIG['MOZ_AV1']: + external_dirs += ['media/libaom'] + +-external_dirs += ['media/libpng'] ++if not CONFIG['MOZ_SYSTEM_PNG']: ++ external_dirs += ['media/libpng'] + + external_dirs += ['media/libwebp'] + +diff --git a/config/external/nss/Makefile.in b/config/external/nss/Makefile.in +index 7289e57f4..14eed9712 100644 +--- a/config/external/nss/Makefile.in ++++ b/config/external/nss/Makefile.in +@@ -119,9 +119,11 @@ DEFAULT_GMAKE_FLAGS += NSS_ENABLE_TLS_1_3=1 + ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_1) + DEFAULT_GMAKE_FLAGS += OS_DLLFLAGS='-static-libgcc' NSPR31_LIB_PREFIX=lib + endif ++ifndef MOZ_SYSTEM_SQLITE + DEFAULT_GMAKE_FLAGS += SQLITE_LIB_NAME=mozsqlite3 + DEFAULT_GMAKE_FLAGS += SQLITE_LIB_DIR=$(ABS_DIST)/../db/sqlite3/src + DEFAULT_GMAKE_FLAGS += SQLITE_INCLUDE_DIR=$(ABS_DIST)/include ++endif + ifdef NSS_DISABLE_DBM + DEFAULT_GMAKE_FLAGS += NSS_DISABLE_DBM=1 + endif +diff --git a/config/moz.build b/config/moz.build +index c512bd07d..7bcac7992 100644 +--- a/config/moz.build ++++ b/config/moz.build +@@ -29,6 +29,9 @@ if CONFIG['HOST_OS_ARCH'] != 'WINNT': + # while the program here is in C. + HostProgram('nsinstall_real', c_only=True) + ++if CONFIG['MOZ_SYSTEM_ICU']: ++ DEFINES['MOZ_SYSTEM_ICU'] = True ++ + PYTHON_UNIT_TESTS += [ + 'tests/test_mozbuild_reading.py', + 'tests/unit-expandlibs.py', +diff --git a/config/system-headers b/config/system-headers +index 3685d6d1c..b10324f0f 100644 +--- a/config/system-headers ++++ b/config/system-headers +@@ -1253,6 +1253,9 @@ soundtouch/SoundTouchFactory.h + #if MOZ_LIBAV_FFT==1 + libavcodec/avfft.h + #endif ++#if MOZ_SYSTEM_PNG==1 ++png.h ++#endif + #if MOZ_SYSTEM_ZLIB==1 + zlib.h + #endif +@@ -1273,7 +1276,11 @@ bzlib.h + #ifdef MOZ_ENABLE_GIO + gio/gio.h + #endif ++#if MOZ_SYSTEM_LIBEVENT==1 ++event.h ++#else + sys/event.h ++#endif + #ifdef MOZ_ENABLE_LIBPROXY + proxy.h + #endif +@@ -1288,6 +1295,15 @@ QtSparql/qsparqlresult.h + #if MOZ_TREE_PIXMAN!=1 + pixman.h + #endif ++#if MOZ_SYSTEM_LIBVPX==1 ++vpx/svc_context.h ++vpx/vpx_codec.h ++vpx/vpx_decoder.h ++vpx/vpx_encoder.h ++vpx/vp8cx.h ++vpx/vp8dx.h ++vpx_mem/vpx_mem.h ++#endif + gst/gst.h + gst/app/gstappsink.h + gst/app/gstappsrc.h +@@ -1300,6 +1316,22 @@ kvm.h + spawn.h + err.h + xlocale.h ++#ifdef MOZ_SYSTEM_ICU ++unicode/locid.h ++unicode/numsys.h ++unicode/timezone.h ++unicode/ucal.h ++unicode/uchar.h ++unicode/uclean.h ++unicode/ucol.h ++unicode/udat.h ++unicode/udatpg.h ++unicode/uenum.h ++unicode/unorm.h ++unicode/unum.h ++unicode/ustring.h ++unicode/utypes.h ++#endif + libutil.h + unwind.h + fenv.h +diff --git a/db/sqlite3/src/moz.build b/db/sqlite3/src/moz.build +index eba8633b5..d8cec85ff 100644 +--- a/db/sqlite3/src/moz.build ++++ b/db/sqlite3/src/moz.build +@@ -9,9 +9,13 @@ NO_VISIBILITY_FLAGS = True + # We allow warnings for third-party code that can be updated from upstream. + ALLOW_COMPILER_WARNINGS = True + +-GeckoSharedLibrary('sqlite', linkage=None, mozglue='library') +-SHARED_LIBRARY_NAME = 'mozsqlite3' +-SYMBOLS_FILE = 'sqlite.symbols' ++if CONFIG['MOZ_SYSTEM_SQLITE']: ++ Library('sqlite') ++ OS_LIBS += CONFIG['SQLITE_LIBS'] ++else: ++ GeckoSharedLibrary('sqlite', linkage=None, mozglue='library') ++ SHARED_LIBRARY_NAME = 'mozsqlite3' ++ SYMBOLS_FILE = 'sqlite.symbols' + + EXPORTS += ['sqlite3.h'] + SOURCES += ['sqlite3.c'] +diff --git a/ipc/chromium/moz.build b/ipc/chromium/moz.build +index b386134f9..085e65c96 100644 +--- a/ipc/chromium/moz.build ++++ b/ipc/chromium/moz.build +@@ -58,7 +58,7 @@ if os_win: + 'src/chrome/common/process_watcher_win.cc', + 'src/chrome/common/transport_dib_win.cc', + ] +-else: ++elif not CONFIG['MOZ_SYSTEM_LIBEVENT']: + DIRS += ['src/third_party'] + + if os_posix: +@@ -145,7 +145,7 @@ if os_solaris: + 'src/base/time_posix.cc', + ] + +-else: ++elif not CONFIG['MOZ_SYSTEM_LIBEVENT']: + LOCAL_INCLUDES += ['src/third_party/libevent/linux'] + + ost = CONFIG['OS_TEST'] +diff --git a/ipc/chromium/src/third_party/libeventcommon.mozbuild b/ipc/chromium/src/third_party/libeventcommon.mozbuild +index 33482c661..2b45ecb19 100644 +--- a/ipc/chromium/src/third_party/libeventcommon.mozbuild ++++ b/ipc/chromium/src/third_party/libeventcommon.mozbuild +@@ -32,7 +32,7 @@ else: + else: + libevent_include_suffix = 'linux' + +-if os_posix: ++if os_posix and not CONFIG['MOZ_SYSTEM_LIBEVENT']: + DEFINES['HAVE_CONFIG_H'] = True + LOCAL_INCLUDES += sorted([ + 'libevent', +diff --git a/ipc/chromium/src/third_party/moz.build b/ipc/chromium/src/third_party/moz.build +index 20a5043fb..2b99e53b3 100644 +--- a/ipc/chromium/src/third_party/moz.build ++++ b/ipc/chromium/src/third_party/moz.build +@@ -10,6 +10,9 @@ include(libevent_path_prefix + '/libeventcommon.mozbuild') + if os_win: + error('should not reach here on Windows') + ++if CONFIG['MOZ_SYSTEM_LIBEVENT']: ++ error('should not reach here if we are using a native libevent') ++ + UNIFIED_SOURCES += [ + 'libevent/buffer.c', + 'libevent/bufferevent.c', +diff --git a/media/webrtc/signaling/test/common.build b/media/webrtc/signaling/test/common.build +index 2d9a57139..3e5450f5d 100644 +--- a/media/webrtc/signaling/test/common.build ++++ b/media/webrtc/signaling/test/common.build +@@ -105,6 +105,9 @@ if CONFIG['MOZ_ALSA']: + if CONFIG['MOZ_SYSTEM_JPEG']: + OS_LIBS += CONFIG['MOZ_JPEG_LIBS'] + ++if CONFIG['MOZ_SYSTEM_LIBVPX']: ++ OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS'] ++ + if not CONFIG['MOZ_TREE_PIXMAN']: + OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] + +diff --git a/old-configure.in b/old-configure.in +index 2965f60b7..b3ac8c2f1 100644 +--- a/old-configure.in ++++ b/old-configure.in +@@ -2005,6 +2005,44 @@ esac + + MOZ_CONFIG_NSPR() + ++dnl ======================================================== ++dnl system libevent Support ++dnl ======================================================== ++MOZ_ARG_WITH_STRING(system-libevent, ++[ --with-system-libevent[=PFX] ++ Use system libevent [installed at prefix PFX]], ++ LIBEVENT_DIR=$withval) ++ ++_SAVE_CFLAGS=$CFLAGS ++_SAVE_LDFLAGS=$LDFLAGS ++_SAVE_LIBS=$LIBS ++if test "$LIBEVENT_DIR" = yes; then ++ PKG_CHECK_MODULES(MOZ_LIBEVENT, libevent, ++ MOZ_SYSTEM_LIBEVENT=1, ++ LIBEVENT_DIR=/usr) ++fi ++if test -z "$LIBEVENT_DIR" -o "$LIBEVENT_DIR" = no; then ++ MOZ_SYSTEM_LIBEVENT= ++elif test -z "$MOZ_SYSTEM_LIBEVENT"; then ++ CFLAGS="-I${LIBEVENT_DIR}/include $CFLAGS" ++ LDFLAGS="-L${LIBEVENT_DIR}/lib $LDFLAGS" ++ MOZ_CHECK_HEADER(event.h, ++ [if test ! -f "${LIBEVENT_DIR}/include/event.h"; then ++ AC_MSG_ERROR([event.h found, but is not in ${LIBEVENT_DIR}/include]) ++ fi], ++ AC_MSG_ERROR([--with-system-libevent requested but event.h not found])) ++ AC_CHECK_LIB(event, event_init, ++ [MOZ_SYSTEM_LIBEVENT=1 ++ MOZ_LIBEVENT_CFLAGS="-I${LIBEVENT_DIR}/include" ++ MOZ_LIBEVENT_LIBS="-L${LIBEVENT_DIR}/lib -levent"], ++ [MOZ_SYSTEM_LIBEVENT= MOZ_LIBEVENT_CFLAGS= MOZ_LIBEVENT_LIBS=]) ++fi ++CFLAGS=$_SAVE_CFLAGS ++LDFLAGS=$_SAVE_LDFLAGS ++LIBS=$_SAVE_LIBS ++ ++AC_SUBST(MOZ_SYSTEM_LIBEVENT) ++ + # TODO: We need to find a better place to define this include + NSS_CFLAGS="-I${DIST}/include/nss" + AC_SUBST(NSS_CFLAGS) +@@ -2092,6 +2130,51 @@ if test "${BZ2_DIR}" -a -d "${BZ2_DIR}" -a "$MOZ_SYSTEM_BZ2" = 1; then + MOZ_BZ2_LIBS="-L${BZ2_DIR}/lib ${MOZ_BZ2_LIBS}" + fi + ++dnl ======================================================== ++dnl system PNG Support ++dnl ======================================================== ++MOZ_ARG_WITH_STRING(system-png, ++[ --with-system-png[=PFX] ++ Use system libpng [installed at prefix PFX]], ++ PNG_DIR=$withval) ++ ++_SAVE_CFLAGS=$CFLAGS ++_SAVE_LDFLAGS=$LDFLAGS ++_SAVE_LIBS=$LIBS ++if test -n "${PNG_DIR}" -a "${PNG_DIR}" != "yes"; then ++ CFLAGS="-I${PNG_DIR}/include $CFLAGS" ++ LDFLAGS="-L${PNG_DIR}/lib $LDFLAGS" ++fi ++if test -z "$PNG_DIR" -o "$PNG_DIR" = no; then ++ MOZ_SYSTEM_PNG= ++else ++ AC_CHECK_LIB(png, png_get_valid, [MOZ_SYSTEM_PNG=1 MOZ_PNG_LIBS="-lpng"], ++ AC_MSG_ERROR([--with-system-png requested but no working libpng found])) ++ AC_CHECK_LIB(png, png_get_acTL, , ++ AC_MSG_ERROR([--with-system-png won't work because the system's libpng doesn't have APNG support])) ++fi ++if test "$MOZ_SYSTEM_PNG" = 1; then ++ AC_TRY_COMPILE([ #include ++ #include ++ #include ], ++ [ #if PNG_LIBPNG_VER < $MOZPNG ++ #error "Insufficient libpng version ($MOZPNG required)." ++ #endif ++ #ifndef PNG_UINT_31_MAX ++ #error "Insufficient libpng version." ++ #endif ], ++ MOZ_SYSTEM_PNG=1, ++ AC_MSG_ERROR([--with-system-png requested but no working libpng found])) ++fi ++CFLAGS=$_SAVE_CFLAGS ++LDFLAGS=$_SAVE_LDFLAGS ++LIBS=$_SAVE_LIBS ++ ++if test "${PNG_DIR}" -a -d "${PNG_DIR}" -a "$MOZ_SYSTEM_PNG" = 1; then ++ MOZ_PNG_CFLAGS="-I${PNG_DIR}/include" ++ MOZ_PNG_LIBS="-L${PNG_DIR}/lib ${MOZ_PNG_LIBS}" ++fi ++ + fi # SKIP_LIBRARY_CHECKS + + dnl ======================================================== +@@ -2962,6 +3045,13 @@ fi + + AC_SUBST(MOZ_EME) + ++dnl ======================================================== ++dnl system libvpx Support ++dnl ======================================================== ++MOZ_ARG_WITH_BOOL(system-libvpx, ++[ --with-system-libvpx Use system libvpx (located with pkgconfig)], ++ MOZ_SYSTEM_LIBVPX=1) ++ + MOZ_LIBVPX_CFLAGS= + MOZ_LIBVPX_LIBS= + +@@ -2969,6 +3059,35 @@ if test -n "$MOZ_VPX_ERROR_CONCEALMENT" ; then + AC_DEFINE(MOZ_VPX_ERROR_CONCEALMENT) + fi + ++_SAVE_CFLAGS=$CFLAGS ++_SAVE_LIBS=$LIBS ++if test -n "$MOZ_SYSTEM_LIBVPX"; then ++ dnl ============================ ++ dnl === libvpx Version check === ++ dnl ============================ ++ dnl Check to see if we have a system libvpx package. ++ PKG_CHECK_MODULES(MOZ_LIBVPX, vpx >= 1.5.0) ++ ++ CFLAGS="$CFLAGS $MOZ_LIBVPX_CFLAGS" ++ LIBS="$LIBS $MOZ_LIBVPX_LIBS" ++ ++ MOZ_CHECK_HEADER([vpx/vpx_decoder.h], [], ++ [AC_MSG_ERROR([Couldn't find vpx/vpx_decoder.h which is required for build with system libvpx. Use --without-system-libvpx to build with in-tree libvpx.])]) ++ ++ AC_CHECK_LIB(vpx, vpx_codec_dec_init_ver, [], ++ [AC_MSG_ERROR([--with-system-libvpx requested but symbol vpx_codec_dec_init_ver not found])]) ++ ++ MOZ_CHECK_HEADER([vpx_mem/vpx_mem.h], ++ [AC_CHECK_FUNC(vpx_mem_set_functions)]) ++ if test "$ac_cv_header_vpx_mem_vpx_mem_h" = no -o \ ++ "$ac_cv_func_vpx_mem_set_functions" = no; then ++ AC_DEFINE(MOZ_VPX_NO_MEM_REPORTING) ++ fi ++fi ++CFLAGS=$_SAVE_CFLAGS ++LIBS=$_SAVE_LIBS ++ ++AC_SUBST(MOZ_SYSTEM_LIBVPX) + AC_SUBST_LIST(MOZ_LIBVPX_CFLAGS) + AC_SUBST_LIST(MOZ_LIBVPX_LIBS) + +@@ -3723,6 +3842,170 @@ else + fi + fi + ++dnl ======================================================== ++dnl Check for sqlite ++dnl ======================================================== ++ ++MOZ_SYSTEM_SQLITE= ++MOZ_ARG_ENABLE_BOOL(system-sqlite, ++[ --enable-system-sqlite Use system sqlite (located with pkgconfig)], ++MOZ_SYSTEM_SQLITE=1, ++MOZ_SYSTEM_SQLITE= ) ++ ++if test -n "$MOZ_SYSTEM_SQLITE" ++then ++ dnl ============================ ++ dnl === SQLite Version check === ++ dnl ============================ ++ dnl Check to see if the system SQLite package is new enough. ++ PKG_CHECK_MODULES(SQLITE, sqlite3 >= $SQLITE_VERSION) ++ ++ dnl ================================== ++ dnl === SQLITE_SECURE_DELETE check === ++ dnl ================================== ++ dnl Check to see if the system SQLite package is compiled with ++ dnl SQLITE_SECURE_DELETE enabled. ++ AC_MSG_CHECKING(for SQLITE_SECURE_DELETE support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_secure_delete,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_SECURE_DELETE"); ++ }], ++ ac_cv_sqlite_secure_delete=yes, ++ ac_cv_sqlite_secure_delete=no, ++ ac_cv_sqlite_secure_delete=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_secure_delete) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_secure_delete" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_SECURE_DELETE.]) ++ fi ++ ++ dnl =============================== ++ dnl === SQLITE_THREADSAFE check === ++ dnl =============================== ++ dnl Check to see if the system SQLite package is compiled with ++ dnl SQLITE_THREADSAFE enabled. ++ AC_MSG_CHECKING(for SQLITE_THREADSAFE support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_threadsafe,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_THREADSAFE=1"); ++ }], ++ ac_cv_sqlite_threadsafe=yes, ++ ac_cv_sqlite_threadsafe=no, ++ ac_cv_sqlite_threadsafe=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_threadsafe) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_threadsafe" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_THREADSAFE.]) ++ fi ++ ++ dnl ================================ ++ dnl === SQLITE_ENABLE_FTS3 check === ++ dnl ================================ ++ dnl check to see if the system SQLite package is compiled with ++ dnl SQLITE_ENABLE_FTS3 enabled. ++ AC_MSG_CHECKING(for SQLITE_ENABLE_FTS3 support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_enable_fts3,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_ENABLE_FTS3"); ++ }], ++ ac_cv_sqlite_enable_fts3=yes, ++ ac_cv_sqlite_enable_fts3=no, ++ ac_cv_sqlite_enable_fts3=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_enable_fts3) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_enable_fts3" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_FTS3.]) ++ fi ++ ++ dnl ========================================= ++ dnl === SQLITE_ENABLE_UNLOCK_NOTIFY check === ++ dnl ========================================= ++ dnl check to see if the system SQLite package is compiled with ++ dnl SQLITE_ENABLE_UNLOCK_NOTIFY enabled. ++ AC_MSG_CHECKING(for SQLITE_ENABLE_UNLOCK_NOTIFY support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_enable_unlock_notify,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_ENABLE_UNLOCK_NOTIFY"); ++ }], ++ ac_cv_sqlite_enable_unlock_notify=yes, ++ ac_cv_sqlite_enable_unlock_notify=no, ++ ac_cv_sqlite_enable_unlock_notify=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_enable_unlock_notify) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_enable_unlock_notify" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_UNLOCK_NOTIFY.]) ++ fi ++ ++ dnl ========================================= ++ dnl === SQLITE_ENABLE_DBSTAT_VTAB check === ++ dnl ========================================= ++ dnl check to see if the system SQLite package is compiled with ++ dnl SQLITE_ENABLE_DBSTAT_VTAB. ++ AC_MSG_CHECKING(for SQLITE_ENABLE_DBSTAT_VTAB support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_dbstat_vtab,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_ENABLE_DBSTAT_VTAB"); ++ }], ++ ac_cv_sqlite_dbstat_vtab=yes, ++ ac_cv_sqlite_dbstat_vtab=no, ++ ac_cv_sqlite_dbstat_vtab=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_dbstat_vtab) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_dbstat_vtab" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_DBSTAT_VTAB.]) ++ fi ++fi ++ ++if test -n "$MOZ_SYSTEM_SQLITE"; then ++ AC_DEFINE(MOZ_SYSTEM_SQLITE) ++fi ++AC_SUBST(MOZ_SYSTEM_SQLITE) ++ + dnl ======================================================== + dnl = Enable Google safe browsing (anti-phishing) + dnl ======================================================== +@@ -5349,6 +5632,7 @@ MC_BASILISK=$MC_BASILISK + MC_PALEMOON=$MC_PALEMOON + MOZ_EME=$MOZ_EME + MOZ_WEBRTC=$MOZ_WEBRTC ++MOZ_SYSTEM_LIBEVENT=$MOZ_SYSTEM_LIBEVENT + MOZ_SYSTEM_JPEG=$MOZ_SYSTEM_JPEG + MOZ_SYSTEM_ZLIB=$MOZ_SYSTEM_ZLIB + MOZ_SYSTEM_BZ2=$MOZ_SYSTEM_BZ2 +diff --git a/storage/SQLiteMutex.h b/storage/SQLiteMutex.h +index eaa69eab1..a38525fd6 100644 +--- a/storage/SQLiteMutex.h ++++ b/storage/SQLiteMutex.h +@@ -50,7 +50,7 @@ public: + mMutex = aMutex; + } + +-#if !defined(DEBUG) ++#if !defined(DEBUG) || defined(MOZ_SYSTEM_SQLITE) + /** + * Acquires the mutex. + */ +diff --git a/storage/moz.build b/storage/moz.build +index f0e754bdc..606c93001 100644 +--- a/storage/moz.build ++++ b/storage/moz.build +@@ -99,6 +99,10 @@ if CONFIG['MOZ_MEMORY']: + DEFINES['SQLITE_MAX_LIKE_PATTERN_LENGTH'] = 50000 + + # See Sqlite moz.build for reasoning about TEMP_STORE. ++# For system sqlite we cannot use the compile time option, so we use a pragma. ++if CONFIG['MOZ_SYSTEM_SQLITE'] and (CONFIG['OS_TARGET'] == 'Android' ++ or CONFIG['HAVE_64BIT_BUILD']): ++ DEFINES['MOZ_MEMORY_TEMP_STORE_PRAGMA'] = True + + LOCAL_INCLUDES += [ + '/db/sqlite3/src', +diff --git a/toolkit/library/moz.build b/toolkit/library/moz.build +index d9b167547..acfd83aa3 100644 +--- a/toolkit/library/moz.build ++++ b/toolkit/library/moz.build +@@ -195,9 +195,18 @@ if CONFIG['SERVO_TARGET_DIR']: + if CONFIG['MOZ_SYSTEM_JPEG']: + OS_LIBS += CONFIG['MOZ_JPEG_LIBS'] + ++if CONFIG['MOZ_SYSTEM_PNG']: ++ OS_LIBS += CONFIG['MOZ_PNG_LIBS'] ++ + if CONFIG['MOZ_SYSTEM_HUNSPELL']: + OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS'] + ++if CONFIG['MOZ_SYSTEM_LIBEVENT']: ++ OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS'] ++ ++if CONFIG['MOZ_SYSTEM_LIBVPX']: ++ OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS'] ++ + if not CONFIG['MOZ_TREE_PIXMAN']: + OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] + +-- +2.25.2 + diff --git a/icedove-uxp/0002-Add-icedove-uxp-application-specfic-override.patch b/icedove-uxp/0002-Add-icedove-uxp-application-specfic-override.patch new file mode 100644 index 0000000..74c1d59 --- /dev/null +++ b/icedove-uxp/0002-Add-icedove-uxp-application-specfic-override.patch @@ -0,0 +1,44 @@ +From 9de464ed516e1ff2995eb5270d942048e832ae1d Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:15:03 -0400 +Subject: [PATCH 02/12] Add iceweasel-uxp application specfic override + +--- + docshell/base/nsAboutRedirector.cpp | 5 ++--- + toolkit/xre/nsAppRunner.cpp | 4 ++-- + 2 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp +index e1d883532..12a767a78 100644 +--- a/docshell/base/nsAboutRedirector.cpp ++++ b/docshell/base/nsAboutRedirector.cpp +@@ -53,9 +53,8 @@ static RedirEntry kRedirMap[] = { + { "config", "chrome://global/content/config.xul", 0 }, + { "console", "chrome://global/content/console.xul", 0 }, + { +- "credits", "http://www.palemoon.org/Contributors.shtml", +- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | +- nsIAboutModule::MAKE_LINKABLE ++ "credits", "chrome://global/content/aboutCredits.html", ++ nsIAboutModule::MAKE_LINKABLE + }, + #ifdef MOZ_DEVTOOLS + { +diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp +index 55072c474..ad5ba1017 100644 +--- a/toolkit/xre/nsAppRunner.cpp ++++ b/toolkit/xre/nsAppRunner.cpp +@@ -3695,8 +3695,8 @@ XREMain::XRE_mainRun() + // reset the profile. + // For Basilisk and Pale Moon: + // Hard-code MOZ_APP_NAME to firefox because of hard-coded type in migrator. +- aKey = (((MOZ_APP_NAME == "basilisk") +- || (MOZ_APP_NAME == "palemoon")) ++ aKey = (((MOZ_APP_NAME == "iceweasel-uxp") ++ || (MOZ_APP_NAME == "iceweasel-classic")) + ? "firefox" : MOZ_APP_NAME); + + } +-- +2.25.2 + diff --git a/icedove-uxp/0003-Hardcode-AppName-in-nsAppRunner.patch b/icedove-uxp/0003-Hardcode-AppName-in-nsAppRunner.patch new file mode 100644 index 0000000..9f274f4 --- /dev/null +++ b/icedove-uxp/0003-Hardcode-AppName-in-nsAppRunner.patch @@ -0,0 +1,57 @@ +From 9c9f5c4264a10773c5fbc83c7a7c64e9c1316e38 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sat, 20 Jul 2019 22:48:03 -0400 +Subject: [PATCH 1/1] Hardcode AppName in nsAppRunner + +Patches WM_ClassName and Application Name since we are keeping them unchanged for folder compatibility reasons. +Additional branding improvements of Help and Version String changes courtesy HarvettFox96. +--- + toolkit/xre/nsAppRunner.cpp | 14 +++++--------- + 1 file changed, 5 insertions(+), 9 deletions(-) + +diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp +index 5a51fd3e7..9fbc9c20d 100644 +--- a/toolkit/xre/nsAppRunner.cpp ++++ b/toolkit/xre/nsAppRunner.cpp +@@ -1335,11 +1335,11 @@ DumpHelp() + #endif + #ifdef XP_UNIX + printf(" --g-fatal-warnings Make all warnings fatal.\n" +- "\n%s options\n", gAppData->name); ++ "\nIcedove-UXP options\n", gAppData->name); + #endif + + printf(" -h or --help Print this message.\n" +- " -v or --version Print %s version.\n" ++ " -v or --version Print Icedove-UXP version.\n" + " -P Start with .\n" + " --profile Start with profile at .\n" + #ifdef MC_BASILISK +@@ -1408,9 +1408,7 @@ static int MSCRTReportHook( int aReportType, char *aMessage, int *oReturnValue) + static inline void + DumpVersion() + { +- if (gAppData->vendor) +- printf("%s ", gAppData->vendor); +- printf("%s %s", gAppData->name, gAppData->version); ++ printf("Hyperbola Icedove-UXP %s", gAppData->version); + if (gAppData->copyright) + printf(", %s", gAppData->copyright); + printf("\n"); +@@ -3205,11 +3203,9 @@ XREMain::XRE_mainStartup(bool* aExitFlag) + gdk_rgb_set_install(TRUE); + #endif + +- // Set program name to the one defined in application.ini. ++ // Set WM_CLASS name + { +- nsAutoCString program(gAppData->name); +- ToLowerCase(program); +- g_set_prgname(program.get()); ++ g_set_prgname("Icedove-UXP"); + } + + // Initialize GTK here for splash. +-- +2.22.0 + diff --git a/icedove-uxp/0004-Disable-SSLKEYLOGFILE-in-NSS.patch b/icedove-uxp/0004-Disable-SSLKEYLOGFILE-in-NSS.patch new file mode 100644 index 0000000..711f2c5 --- /dev/null +++ b/icedove-uxp/0004-Disable-SSLKEYLOGFILE-in-NSS.patch @@ -0,0 +1,39 @@ +From a408d97064eccc60f75f0ac70e126a0684444b2b Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 12 Jan 2020 17:11:36 -0500 +Subject: [PATCH 05/12] Disable SSLKEYLOGFILE in NSS + +--- + config/external/nss/Makefile.in | 2 +- + security/nss/lib/ssl/ssl.gyp | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/config/external/nss/Makefile.in b/config/external/nss/Makefile.in +index 14eed9712..97d6e4b25 100644 +--- a/config/external/nss/Makefile.in ++++ b/config/external/nss/Makefile.in +@@ -225,7 +225,7 @@ DEFAULT_GMAKE_FLAGS += \ + endif + + DEFAULT_GMAKE_FLAGS += FREEBL_NO_DEPEND=0 $(FREEBL_LOWHASH_FLAG) +-DEFAULT_GMAKE_FLAGS += NSS_ALLOW_SSLKEYLOGFILE=1 ++DEFAULT_GMAKE_FLAGS += NSS_ALLOW_SSLKEYLOGFILE=0 + + ifdef MOZ_NO_WLZDEFS + DEFAULT_GMAKE_FLAGS += ZDEFS_FLAG= +diff --git a/security/nss/lib/ssl/ssl.gyp b/security/nss/lib/ssl/ssl.gyp +index 3e1b5531a..ca75795ea 100644 +--- a/security/nss/lib/ssl/ssl.gyp ++++ b/security/nss/lib/ssl/ssl.gyp +@@ -70,7 +70,7 @@ + 'UNSAFE_FUZZER_MODE', + ], + }], +- [ 'enable_sslkeylogfile==1', { ++ [ 'enable_sslkeylogfile==0', { + 'defines': [ + 'NSS_ALLOW_SSLKEYLOGFILE', + ], +-- +2.25.2 + diff --git a/icedove-uxp/0005-Fix-PGO-Build.patch b/icedove-uxp/0005-Fix-PGO-Build.patch new file mode 100644 index 0000000..d5ff7f1 --- /dev/null +++ b/icedove-uxp/0005-Fix-PGO-Build.patch @@ -0,0 +1,44 @@ +From 96b399b1986434df67b5fc02003df8a16e43122f Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:25:59 -0400 +Subject: [PATCH 06/12] Fix PGO Build + +--- + Makefile.in | 2 ++ + gfx/thebes/gfxFont.cpp | 10 ++++++++++ + 2 files changed, 12 insertions(+) + +diff --git a/Makefile.in b/Makefile.in +index 6c2327388..6e4e49a4e 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -404,3 +404,5 @@ config/export: + endif + + # There used to be build interdependencies here. They are now in config/recurse.mk ++ ++pgo-profile-run: +diff --git a/gfx/thebes/gfxFont.cpp b/gfx/thebes/gfxFont.cpp +index a73252759..ad38e6fb1 100644 +--- a/gfx/thebes/gfxFont.cpp ++++ b/gfx/thebes/gfxFont.cpp +@@ -2546,6 +2546,16 @@ IsBoundarySpace(char16_t aChar, char16_t aNextChar) + #endif + + /* GetShapedWord is in gfxFont-Impl.h */ ++template gfxShapedWord* ++gfxFont::GetShapedWord(DrawTarget *aDrawTarget, ++ const uint8_t *aText, ++ uint32_t aLength, ++ uint32_t aHash, ++ Script aRunScript, ++ bool aVertical, ++ int32_t aAppUnitsPerDevUnit, ++ uint32_t aFlags, ++ gfxTextPerfMetrics *aTextPerf); + + bool + gfxFont::CacheHashEntry::KeyEquals(const KeyTypePointer aKey) const +-- +2.25.2 + diff --git a/icedove-uxp/0006-init-configure-patch.patch b/icedove-uxp/0006-init-configure-patch.patch new file mode 100644 index 0000000..665ab3d --- /dev/null +++ b/icedove-uxp/0006-init-configure-patch.patch @@ -0,0 +1,26 @@ +From 7d02b2509f5280bb7e65a65849e4e5c04c76a28c Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:27:45 -0400 +Subject: [PATCH 07/12] init configure patch + +--- + build/moz.configure/init.configure | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure +index 2e6034e8e..00d9935ba 100644 +--- a/build/moz.configure/init.configure ++++ b/build/moz.configure/init.configure +@@ -656,9 +656,6 @@ def build_project(project, external_source_dir, build_env, help): + + build_app = project[0] + +- if not external_source_dir and build_app not in ('xulrunner', 'js'): +- die('Cannot find project %s', build_app) +- + build_app_abspath = os.path.join(base_dir, build_app) + + if exists(build_app_abspath): +-- +2.25.2 + diff --git a/icedove-uxp/0007-Update-libcubeb-to-a1200c34.patch b/icedove-uxp/0007-Update-libcubeb-to-a1200c34.patch new file mode 100644 index 0000000..e2856ed --- /dev/null +++ b/icedove-uxp/0007-Update-libcubeb-to-a1200c34.patch @@ -0,0 +1,20298 @@ +From 727afcebcfda2f0bbe6473b581678cf0f84f4057 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 10 Nov 2019 09:09:14 -0500 +Subject: [PATCH 1/1] Update libcubeb to a1200c34 + +--- + dom/media/CubebUtils.cpp | 4 +- + dom/media/GraphDriver.cpp | 2 +- + media/libcubeb/AUTHORS | 1 + + media/libcubeb/bug1292803_pulse_assert.patch | 46 - + .../bug1302231_emergency_bailout.patch | 140 - + media/libcubeb/disable-assert.patch | 23 + + media/libcubeb/disable-iaudioclient3.patch | 64 + + media/libcubeb/fix-crashes.patch | 71 - + media/libcubeb/include/cubeb.h | 255 +- + media/libcubeb/osx-linearize-operations.patch | 968 ----- + media/libcubeb/prevent-double-free.patch | 46 - + .../src/android/cubeb-output-latency.h | 76 + + .../src/android/cubeb_media_library.h | 62 + + media/libcubeb/src/android/sles_definitions.h | 39 +- + media/libcubeb/src/cubeb-internal.h | 17 +- + media/libcubeb/src/cubeb-jni-instances.h | 34 + + media/libcubeb/src/cubeb-jni.cpp | 68 + + media/libcubeb/src/cubeb-jni.h | 10 + + media/libcubeb/src/cubeb.c | 233 +- + media/libcubeb/src/cubeb_alsa.c | 560 ++- + media/libcubeb/src/cubeb_array_queue.h | 97 + + media/libcubeb/src/cubeb_assert.h | 17 + + media/libcubeb/src/cubeb_audiotrack.c | 15 +- + media/libcubeb/src/cubeb_audiounit.cpp | 3156 +++++++++++------ + media/libcubeb/src/cubeb_jack.cpp | 160 +- + media/libcubeb/src/cubeb_log.cpp | 144 + + media/libcubeb/src/cubeb_log.h | 18 +- + media/libcubeb/src/cubeb_mixer.cpp | 663 ++++ + media/libcubeb/src/cubeb_mixer.h | 37 + + media/libcubeb/src/cubeb_opensl.c | 1566 ++++++-- + media/libcubeb/src/cubeb_pulse.c | 488 ++- + media/libcubeb/src/cubeb_resampler.cpp | 122 +- + media/libcubeb/src/cubeb_resampler.h | 15 +- + media/libcubeb/src/cubeb_resampler_internal.h | 123 +- + media/libcubeb/src/cubeb_ringbuffer.h | 495 +++ + media/libcubeb/src/cubeb_sndio.c | 414 ++- + media/libcubeb/src/cubeb_strings.c | 155 + + media/libcubeb/src/cubeb_strings.h | 44 + + media/libcubeb/src/cubeb_sun.c | 1006 ++++-- + media/libcubeb/src/cubeb_utils.cpp | 23 + + media/libcubeb/src/cubeb_utils.h | 148 +- + media/libcubeb/src/cubeb_utils_unix.h | 4 +- + media/libcubeb/src/cubeb_utils_win.h | 4 +- + media/libcubeb/src/cubeb_wasapi.cpp | 2276 +++++++----- + media/libcubeb/src/cubeb_winmm.c | 160 +- + media/libcubeb/src/moz.build | 8 +- + media/libcubeb/unresampled-frames.patch | 36 - + media/libcubeb/update.sh | 73 +- + .../uplift-part-of-f07ee6d-esr52.patch | 167 - + media/libcubeb/uplift-patch-7a4c711.patch | 69 - + .../uplift-system-listener-patch.patch | 402 --- + .../libcubeb/uplift-wasapi-part-to-beta.patch | 118 - + 52 files changed, 9351 insertions(+), 5591 deletions(-) + delete mode 100644 media/libcubeb/bug1292803_pulse_assert.patch + delete mode 100644 media/libcubeb/bug1302231_emergency_bailout.patch + create mode 100644 media/libcubeb/disable-assert.patch + create mode 100644 media/libcubeb/disable-iaudioclient3.patch + delete mode 100644 media/libcubeb/fix-crashes.patch + delete mode 100644 media/libcubeb/osx-linearize-operations.patch + delete mode 100644 media/libcubeb/prevent-double-free.patch + create mode 100644 media/libcubeb/src/android/cubeb-output-latency.h + create mode 100644 media/libcubeb/src/android/cubeb_media_library.h + create mode 100644 media/libcubeb/src/cubeb-jni-instances.h + create mode 100644 media/libcubeb/src/cubeb-jni.cpp + create mode 100644 media/libcubeb/src/cubeb-jni.h + create mode 100644 media/libcubeb/src/cubeb_array_queue.h + create mode 100644 media/libcubeb/src/cubeb_assert.h + create mode 100644 media/libcubeb/src/cubeb_log.cpp + create mode 100644 media/libcubeb/src/cubeb_mixer.cpp + create mode 100644 media/libcubeb/src/cubeb_mixer.h + create mode 100644 media/libcubeb/src/cubeb_ringbuffer.h + create mode 100644 media/libcubeb/src/cubeb_strings.c + create mode 100644 media/libcubeb/src/cubeb_strings.h + create mode 100644 media/libcubeb/src/cubeb_utils.cpp + delete mode 100644 media/libcubeb/unresampled-frames.patch + delete mode 100644 media/libcubeb/uplift-part-of-f07ee6d-esr52.patch + delete mode 100644 media/libcubeb/uplift-patch-7a4c711.patch + delete mode 100644 media/libcubeb/uplift-system-listener-patch.patch + delete mode 100644 media/libcubeb/uplift-wasapi-part-to-beta.patch + +diff --git a/dom/media/CubebUtils.cpp b/dom/media/CubebUtils.cpp +index 0f0167d9c..8f1ea0179 100644 +--- a/dom/media/CubebUtils.cpp ++++ b/dom/media/CubebUtils.cpp +@@ -55,6 +55,7 @@ bool sCubebPlaybackLatencyPrefSet; + bool sCubebMSGLatencyPrefSet; + bool sAudioStreamInitEverSucceeded = false; + StaticAutoPtr sBrandName; ++StaticAutoPtr sCubebBackendName; + + const char kBrandBundleURL[] = "chrome://branding/locale/brand.properties"; + +@@ -226,7 +227,7 @@ cubeb* GetCubebContextUnlocked() + sBrandName, "Did not initialize sbrandName, and not on the main thread?"); + } + +- int rv = cubeb_init(&sCubebContext, sBrandName); ++ int rv = cubeb_init(&sCubebContext, sBrandName, sCubebBackendName); + NS_WARNING_ASSERTION(rv == CUBEB_OK, "Could not get a cubeb context."); + sCubebState = (rv == CUBEB_OK) ? CubebState::Initialized : CubebState::Uninitialized; + +@@ -292,6 +293,7 @@ void ShutdownLibrary() + sCubebContext = nullptr; + } + sBrandName = nullptr; ++ sCubebBackendName = nullptr; + // This will ensure we don't try to re-create a context. + sCubebState = CubebState::Shutdown; + } +diff --git a/dom/media/GraphDriver.cpp b/dom/media/GraphDriver.cpp +index 37c692a4b..aa75918f1 100644 +--- a/dom/media/GraphDriver.cpp ++++ b/dom/media/GraphDriver.cpp +@@ -656,7 +656,7 @@ AudioCallbackDriver::Init() + if (latencyPref) { + latency_frames = latencyPref.value(); + } else { +- if (cubeb_get_min_latency(cubebContext, output, &latency_frames) != CUBEB_OK) { ++ if (cubeb_get_min_latency(cubebContext, &output, &latency_frames) != CUBEB_OK) { + NS_WARNING("Could not get minimal latency from cubeb."); + } + } +diff --git a/media/libcubeb/AUTHORS b/media/libcubeb/AUTHORS +index 0fde65baa..f0f959522 100644 +--- a/media/libcubeb/AUTHORS ++++ b/media/libcubeb/AUTHORS +@@ -13,3 +13,4 @@ Landry Breuil + Jacek Caban + Paul Hancock + Ted Mielczarek ++Chun-Min Chang +diff --git a/media/libcubeb/bug1292803_pulse_assert.patch b/media/libcubeb/bug1292803_pulse_assert.patch +deleted file mode 100644 +index 8dee88777..000000000 +--- a/media/libcubeb/bug1292803_pulse_assert.patch ++++ /dev/null +@@ -1,46 +0,0 @@ +-commit 2c7617f5ca20b764c605e19af490889c761e65e2 +-Author: Matthew Gregan +-Date: Thu Nov 10 19:07:07 2016 +1300 +- +- pulse: Bail early from pulse_defer_event_cb when shutting down. +- +- When starting a stream, trigger_user_callback may be called from +- stream_write_callback and immediately enter a drain situation, creating +- a drain timer and setting shutdown to true. If pulse_defer_event_cb +- then runs without checking for shutdown, it can overwrite the current +- timer with a new timer, resulting in a leaked timer and a null pointer +- assertion. +- +-diff --git a/src/cubeb_pulse.c b/src/cubeb_pulse.c +-index 5b61bda..86f2ba3 100644 +---- a/src/cubeb_pulse.c +-+++ b/src/cubeb_pulse.c +-@@ -181,9 +181,9 @@ static void +- stream_drain_callback(pa_mainloop_api * a, pa_time_event * e, struct timeval const * tv, void * u) +- { +- (void)a; +-- (void)e; +- (void)tv; +- cubeb_stream * stm = u; +-+ assert(stm->drain_timer == e); +- stream_state_change_callback(stm, CUBEB_STATE_DRAINED); +- /* there's no pa_rttime_free, so use this instead. */ +- a->time_free(stm->drain_timer); +-@@ -267,6 +267,7 @@ trigger_user_callback(pa_stream * s, void const * input_data, size_t nbytes, cub +- assert(r == 0 || r == -PA_ERR_NODATA); +- /* pa_stream_drain is useless, see PA bug# 866. this is a workaround. */ +- /* arbitrary safety margin: double the current latency. */ +-+ assert(!stm->drain_timer); +- stm->drain_timer = WRAP(pa_context_rttime_new)(stm->context->context, WRAP(pa_rtclock_now)() + 2 * latency, stream_drain_callback, stm); +- stm->shutdown = 1; +- return; +-@@ -851,6 +852,9 @@ pulse_defer_event_cb(pa_mainloop_api * a, void * userdata) +- { +- (void)a; +- cubeb_stream * stm = userdata; +-+ if (stm->shutdown) { +-+ return; +-+ } +- size_t writable_size = WRAP(pa_stream_writable_size)(stm->output_stream); +- trigger_user_callback(stm->output_stream, NULL, writable_size, stm); +- } +diff --git a/media/libcubeb/bug1302231_emergency_bailout.patch b/media/libcubeb/bug1302231_emergency_bailout.patch +deleted file mode 100644 +index 82152c23f..000000000 +--- a/media/libcubeb/bug1302231_emergency_bailout.patch ++++ /dev/null +@@ -1,140 +0,0 @@ +-From 37ce70d4400a2ab6b59ee432b41d4ffcc9d136ff Mon Sep 17 00:00:00 2001 +-From: Paul Adenot +-Date: Thu, 10 Nov 2016 21:45:14 +0100 +-Subject: [PATCH] Bail out safely from the rendering loop if we could not join +- the rendering thread in time (#187) +- +-Bail out safely from the rendering loop if we could not join the rendering thread in time. +---- +- src/cubeb_wasapi.cpp | 41 ++++++++++++++++++++++++++++++++++++----- +- 1 file changed, 36 insertions(+), 5 deletions(-) +- +-diff --git a/src/cubeb_wasapi.cpp b/src/cubeb_wasapi.cpp +-index 9e689b9..519d5ca 100644 +---- a/src/cubeb_wasapi.cpp +-+++ b/src/cubeb_wasapi.cpp +-@@ -22,6 +22,7 @@ +- #include +- #include +- #include +-+#include +- +- #include "cubeb/cubeb.h" +- #include "cubeb-internal.h" +-@@ -220,9 +221,11 @@ struct cubeb_stream +- float volume; +- /* True if the stream is draining. */ +- bool draining; +-+ /* True when we've destroyed the stream. This pointer is leaked on stream +-+ * destruction if we could not join the thread. */ +-+ std::atomic*> emergency_bailout; +- }; +- +-- +- class wasapi_endpoint_notification_client : public IMMNotificationClient +- { +- public: +-@@ -781,6 +784,7 @@ static unsigned int __stdcall +- wasapi_stream_render_loop(LPVOID stream) +- { +- cubeb_stream * stm = static_cast(stream); +-+ std::atomic * emergency_bailout = stm->emergency_bailout; +- +- bool is_playing = true; +- HANDLE wait_array[4] = { +-@@ -820,6 +824,10 @@ wasapi_stream_render_loop(LPVOID stream) +- wait_array, +- FALSE, +- 1000); +-+ if (*emergency_bailout) { +-+ delete emergency_bailout; +-+ return 0; +-+ } +- if (waitResult != WAIT_TIMEOUT) { +- timeout_count = 0; +- } +-@@ -1134,12 +1142,13 @@ int wasapi_init(cubeb ** context, char const * context_name) +- } +- +- namespace { +--void stop_and_join_render_thread(cubeb_stream * stm) +-+bool stop_and_join_render_thread(cubeb_stream * stm) +- { +-+ bool rv = true; +- LOG("Stop and join render thread."); +- if (!stm->thread) { +- LOG("No thread present."); +-- return; +-+ return true; +- } +- +- BOOL ok = SetEvent(stm->shutdown_event); +-@@ -1153,11 +1162,15 @@ void stop_and_join_render_thread(cubeb_stream * stm) +- if (r == WAIT_TIMEOUT) { +- /* Something weird happened, leak the thread and continue the shutdown +- * process. */ +-+ *(stm->emergency_bailout) = true; +- LOG("Destroy WaitForSingleObject on thread timed out," +- " leaking the thread: %d", GetLastError()); +-+ rv = false; +- } +- if (r == WAIT_FAILED) { +-+ *(stm->emergency_bailout) = true; +- LOG("Destroy WaitForSingleObject on thread failed: %d", GetLastError()); +-+ rv = false; +- } +- +- LOG("Closing thread."); +-@@ -1167,6 +1180,8 @@ void stop_and_join_render_thread(cubeb_stream * stm) +- +- CloseHandle(stm->shutdown_event); +- stm->shutdown_event = 0; +-+ +-+ return rv; +- } +- +- void wasapi_destroy(cubeb * context) +-@@ -1775,7 +1790,16 @@ void wasapi_stream_destroy(cubeb_stream * stm) +- { +- XASSERT(stm); +- +-- stop_and_join_render_thread(stm); +-+ // Only free stm->emergency_bailout if we could not join the thread. +-+ // If we could not join the thread, stm->emergency_bailout is true +-+ // and is still alive until the thread wakes up and exits cleanly. +-+ if (stop_and_join_render_thread(stm)) { +-+ delete stm->emergency_bailout.load(); +-+ stm->emergency_bailout = nullptr; +-+ } else { +-+ // If we're leaking, it must be that this is true. +-+ assert(*(stm->emergency_bailout)); +-+ } +- +- unregister_notification_client(stm); +- +-@@ -1844,6 +1868,8 @@ int wasapi_stream_start(cubeb_stream * stm) +- +- auto_lock lock(stm->stream_reset_lock); +- +-+ stm->emergency_bailout = new std::atomic(false); +-+ +- if (stm->output_client) { +- int rv = stream_start_one_side(stm, OUTPUT); +- if (rv != CUBEB_OK) { +-@@ -1903,7 +1929,12 @@ int wasapi_stream_stop(cubeb_stream * stm) +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- } +- +-- stop_and_join_render_thread(stm); +-+ if (stop_and_join_render_thread(stm)) { +-+ if (stm->emergency_bailout.load()) { +-+ delete stm->emergency_bailout.load(); +-+ stm->emergency_bailout = nullptr; +-+ } +-+ } +- +- return CUBEB_OK; +- } +--- +-2.7.4 +- +diff --git a/media/libcubeb/disable-assert.patch b/media/libcubeb/disable-assert.patch +new file mode 100644 +index 000000000..6fae3a766 +--- /dev/null ++++ b/media/libcubeb/disable-assert.patch +@@ -0,0 +1,23 @@ ++diff --git a/media/libcubeb/src/cubeb_resampler.cpp b/media/libcubeb/src/cubeb_resampler.cpp ++--- a/media/libcubeb/src/cubeb_resampler.cpp +++++ b/media/libcubeb/src/cubeb_resampler.cpp ++@@ -50,18 +50,17 @@ passthrough_resampler::passthrough_re ++ ++ template ++ long passthrough_resampler::fill(void * input_buffer, long * input_frames_count, ++ void * output_buffer, long output_frames) ++ { ++ if (input_buffer) { ++ assert(input_frames_count); ++ } ++- assert((input_buffer && output_buffer && ++- *input_frames_count + static_cast(samples_to_frames(internal_input_buffer.length())) >= output_frames) || +++ assert((input_buffer && output_buffer) || ++ (output_buffer && !input_buffer && (!input_frames_count || *input_frames_count == 0)) || ++ (input_buffer && !output_buffer && output_frames == 0)); ++ ++ if (input_buffer) { ++ if (!output_buffer) { ++ output_frames = *input_frames_count; ++ } ++ internal_input_buffer.push(static_cast(input_buffer), +diff --git a/media/libcubeb/disable-iaudioclient3.patch b/media/libcubeb/disable-iaudioclient3.patch +new file mode 100644 +index 000000000..658806b26 +--- /dev/null ++++ b/media/libcubeb/disable-iaudioclient3.patch +@@ -0,0 +1,64 @@ ++diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp ++--- a/media/libcubeb/src/cubeb_wasapi.cpp +++++ b/media/libcubeb/src/cubeb_wasapi.cpp ++@@ -1916,24 +1916,24 @@ int setup_wasapi_stream_one_side(cubeb_s ++ LOG("Could not get default %s endpoint, error: %lx\n", DIRECTION_NAME, hr); ++ } ++ return CUBEB_ERROR; ++ } ++ } ++ ++ /* Get a client. We will get all other interfaces we need from ++ * this pointer. */ ++- hr = device->Activate(__uuidof(IAudioClient3), ++- CLSCTX_INPROC_SERVER, ++- NULL, audio_client.receive_vpp()); ++- if (hr == E_NOINTERFACE) { +++ // hr = device->Activate(__uuidof(IAudioClient3), +++ // CLSCTX_INPROC_SERVER, +++ // NULL, audio_client.receive_vpp()); +++ // if (hr == E_NOINTERFACE) { ++ hr = device->Activate(__uuidof(IAudioClient), ++ CLSCTX_INPROC_SERVER, ++ NULL, audio_client.receive_vpp()); ++- } +++ //} ++ ++ if (FAILED(hr)) { ++ LOG("Could not activate the device to get an audio" ++ " client for %s: error: %lx\n", DIRECTION_NAME, hr); ++ // A particular device can't be activated because it has been ++ // unplugged, try fall back to the default audio device. ++ if (devid && hr == AUDCLNT_E_DEVICE_INVALIDATED) { ++ LOG("Trying again with the default %s audio device.", DIRECTION_NAME); ++@@ -1989,26 +1989,26 @@ int setup_wasapi_stream_one_side(cubeb_s ++ // Check if a loopback device should be requested. Note that event callbacks ++ // do not work with loopback devices, so only request these if not looping. ++ if (is_loopback) { ++ flags |= AUDCLNT_STREAMFLAGS_LOOPBACK; ++ } else { ++ flags |= AUDCLNT_STREAMFLAGS_EVENTCALLBACK; ++ } ++ ++- if (initialize_iaudioclient3(audio_client, stm, mix_format, flags, direction)) { ++- LOG("Initialized with IAudioClient3"); ++- } else { +++ // if (initialize_iaudioclient3(audio_client, stm, mix_format, flags, direction)) { +++ // LOG("Initialized with IAudioClient3"); +++ // } else { ++ hr = audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, ++ flags, ++ frames_to_hns(stm, stm->latency), ++ 0, ++ mix_format.get(), ++ NULL); ++- } +++ // } ++ if (FAILED(hr)) { ++ LOG("Unable to initialize audio client for %s: %lx.", DIRECTION_NAME, hr); ++ return CUBEB_ERROR; ++ } ++ ++ hr = audio_client->GetBufferSize(buffer_frame_count); ++ if (FAILED(hr)) { ++ LOG("Could not get the buffer size from the client" +diff --git a/media/libcubeb/fix-crashes.patch b/media/libcubeb/fix-crashes.patch +deleted file mode 100644 +index b23501fcf..000000000 +--- a/media/libcubeb/fix-crashes.patch ++++ /dev/null +@@ -1,71 +0,0 @@ +-This patch fixes three different crashes, one crash per chunk in this patch, +-in the same order. +-- Bug 1342389 +-- Bug 1345147 +-- Bug 1347453 +- +-diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp +---- a/media/libcubeb/src/cubeb_wasapi.cpp +-+++ b/media/libcubeb/src/cubeb_wasapi.cpp +-@@ -878,16 +878,23 @@ wasapi_stream_render_loop(LPVOID stream) +- +- /* WaitForMultipleObjects timeout can trigger in cases where we don't want to +- treat it as a timeout, such as across a system sleep/wake cycle. Trigger +- the timeout error handling only when the timeout_limit is reached, which is +- reset on each successful loop. */ +- unsigned timeout_count = 0; +- const unsigned timeout_limit = 5; +- while (is_playing) { +-+ // We want to check the emergency bailout variable before a +-+ // and after the WaitForMultipleObject, because the handles WaitForMultipleObjects +-+ // is going to wait on might have been closed already. +-+ if (*emergency_bailout) { +-+ delete emergency_bailout; +-+ return 0; +-+ } +- DWORD waitResult = WaitForMultipleObjects(ARRAY_LENGTH(wait_array), +- wait_array, +- FALSE, +- 1000); +- if (*emergency_bailout) { +- delete emergency_bailout; +- return 0; +- } +-@@ -1199,16 +1206,22 @@ bool stop_and_join_render_thread(cubeb_s +- { +- bool rv = true; +- LOG("Stop and join render thread."); +- if (!stm->thread) { +- LOG("No thread present."); +- return true; +- } +- +-+ // If we've already leaked the thread, just return, +-+ // there is not much we can do. +-+ if (!stm->emergency_bailout.load()) { +-+ return false; +-+ } +-+ +- BOOL ok = SetEvent(stm->shutdown_event); +- if (!ok) { +- LOG("Destroy SetEvent failed: %lx", GetLastError()); +- } +- +- /* Wait five seconds for the rendering thread to return. It's supposed to +- * check its event loop very often, five seconds is rather conservative. */ +- DWORD r = WaitForSingleObject(stm->thread, 5000); +-diff --git a/media/libcubeb/update.sh b/media/libcubeb/update.sh +---- a/media/libcubeb/update.sh +-+++ b/media/libcubeb/update.sh +-@@ -66,8 +66,11 @@ fi +- echo "Applying a patch on top of $version" +- patch -p1 < ./wasapi-drift-fix-passthrough-resampler.patch +- +- echo "Applying a patch on top of $version" +- patch -p1 < ./audiounit-drift-fix.patch +- +- echo "Applying a patch on top of $version" +- patch -p1 < ./uplift-wasapi-fixes-aurora.patch +-+ +-+echo "Applying a patch on top of $version" +-+patch -p3 < ./fix-crashes.patch +diff --git a/media/libcubeb/include/cubeb.h b/media/libcubeb/include/cubeb.h +index 449b39c55..e6cf8dd87 100644 +--- a/media/libcubeb/include/cubeb.h ++++ b/media/libcubeb/include/cubeb.h +@@ -8,6 +8,7 @@ + #define CUBEB_c2f983e9_c96f_e71c_72c3_bbf62992a382 + + #include ++#include + #include "cubeb_export.h" + + #if defined(__cplusplus) +@@ -32,11 +33,11 @@ extern "C" { + cubeb * app_ctx; + cubeb_init(&app_ctx, "Example Application"); + int rv; +- int rate; +- int latency_frames; ++ uint32_t rate; ++ uint32_t latency_frames; + uint64_t ts; + +- rv = cubeb_get_min_latency(app_ctx, output_params, &latency_frames); ++ rv = cubeb_get_min_latency(app_ctx, &output_params, &latency_frames); + if (rv != CUBEB_OK) { + fprintf(stderr, "Could not get minimum latency"); + return rv; +@@ -52,16 +53,20 @@ extern "C" { + output_params.format = CUBEB_SAMPLE_FLOAT32NE; + output_params.rate = rate; + output_params.channels = 2; ++ output_params.layout = CUBEB_LAYOUT_UNDEFINED; ++ output_params.prefs = CUBEB_STREAM_PREF_NONE; + + cubeb_stream_params input_params; +- output_params.format = CUBEB_SAMPLE_FLOAT32NE; +- output_params.rate = rate; +- output_params.channels = 1; ++ input_params.format = CUBEB_SAMPLE_FLOAT32NE; ++ input_params.rate = rate; ++ input_params.channels = 1; ++ input_params.layout = CUBEB_LAYOUT_UNDEFINED; ++ input_params.prefs = CUBEB_STREAM_PREF_NONE; + + cubeb_stream * stm; + rv = cubeb_stream_init(app_ctx, &stm, "Example Stream 1", +- NULL, input_params, +- NULL, output_params, ++ NULL, &input_params, ++ NULL, &output_params, + latency_frames, + data_cb, state_cb, + NULL); +@@ -99,7 +104,7 @@ extern "C" { + + for (i = 0; i < nframes; ++i) { + for (c = 0; c < 2; ++c) { +- buf[i][c] = in[i]; ++ out[i][c] = in[i]; + } + } + return nframes; +@@ -143,31 +148,9 @@ typedef enum { + #endif + } cubeb_sample_format; + +-#if defined(__ANDROID__) +-/** +- * This maps to the underlying stream types on supported platforms, e.g. +- * Android. +- */ +-typedef enum { +- CUBEB_STREAM_TYPE_VOICE_CALL = 0, +- CUBEB_STREAM_TYPE_SYSTEM = 1, +- CUBEB_STREAM_TYPE_RING = 2, +- CUBEB_STREAM_TYPE_MUSIC = 3, +- CUBEB_STREAM_TYPE_ALARM = 4, +- CUBEB_STREAM_TYPE_NOTIFICATION = 5, +- CUBEB_STREAM_TYPE_BLUETOOTH_SCO = 6, +- CUBEB_STREAM_TYPE_SYSTEM_ENFORCED = 7, +- CUBEB_STREAM_TYPE_DTMF = 8, +- CUBEB_STREAM_TYPE_TTS = 9, +- CUBEB_STREAM_TYPE_FM = 10, +- +- CUBEB_STREAM_TYPE_MAX +-} cubeb_stream_type; +-#endif +- + /** An opaque handle used to refer a particular input or output device + * across calls. */ +-typedef void * cubeb_devid; ++typedef void const * cubeb_devid; + + /** Level (verbosity) of logging for a particular cubeb context. */ + typedef enum { +@@ -176,15 +159,93 @@ typedef enum { + CUBEB_LOG_VERBOSE = 2, /**< Verbose logging of callbacks, can have performance implications. */ + } cubeb_log_level; + ++typedef enum { ++ CHANNEL_UNKNOWN = 0, ++ CHANNEL_FRONT_LEFT = 1 << 0, ++ CHANNEL_FRONT_RIGHT = 1 << 1, ++ CHANNEL_FRONT_CENTER = 1 << 2, ++ CHANNEL_LOW_FREQUENCY = 1 << 3, ++ CHANNEL_BACK_LEFT = 1 << 4, ++ CHANNEL_BACK_RIGHT = 1 << 5, ++ CHANNEL_FRONT_LEFT_OF_CENTER = 1 << 6, ++ CHANNEL_FRONT_RIGHT_OF_CENTER = 1 << 7, ++ CHANNEL_BACK_CENTER = 1 << 8, ++ CHANNEL_SIDE_LEFT = 1 << 9, ++ CHANNEL_SIDE_RIGHT = 1 << 10, ++ CHANNEL_TOP_CENTER = 1 << 11, ++ CHANNEL_TOP_FRONT_LEFT = 1 << 12, ++ CHANNEL_TOP_FRONT_CENTER = 1 << 13, ++ CHANNEL_TOP_FRONT_RIGHT = 1 << 14, ++ CHANNEL_TOP_BACK_LEFT = 1 << 15, ++ CHANNEL_TOP_BACK_CENTER = 1 << 16, ++ CHANNEL_TOP_BACK_RIGHT = 1 << 17 ++} cubeb_channel; ++ ++typedef uint32_t cubeb_channel_layout; ++// Some common layout definitions. ++enum { ++ CUBEB_LAYOUT_UNDEFINED = 0, // Indicate the speaker's layout is undefined. ++ CUBEB_LAYOUT_MONO = CHANNEL_FRONT_CENTER, ++ CUBEB_LAYOUT_MONO_LFE = CUBEB_LAYOUT_MONO | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_STEREO = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT, ++ CUBEB_LAYOUT_STEREO_LFE = CUBEB_LAYOUT_STEREO | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F = ++ CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_FRONT_CENTER, ++ CUBEB_LAYOUT_3F_LFE = CUBEB_LAYOUT_3F | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_2F1 = ++ CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_BACK_CENTER, ++ CUBEB_LAYOUT_2F1_LFE = CUBEB_LAYOUT_2F1 | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F1 = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_FRONT_CENTER | CHANNEL_BACK_CENTER, ++ CUBEB_LAYOUT_3F1_LFE = CUBEB_LAYOUT_3F1 | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_2F2 = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_SIDE_LEFT | CHANNEL_SIDE_RIGHT, ++ CUBEB_LAYOUT_2F2_LFE = CUBEB_LAYOUT_2F2 | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_QUAD = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT, ++ CUBEB_LAYOUT_QUAD_LFE = CUBEB_LAYOUT_QUAD | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F2 = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_FRONT_CENTER | CHANNEL_SIDE_LEFT | ++ CHANNEL_SIDE_RIGHT, ++ CUBEB_LAYOUT_3F2_LFE = CUBEB_LAYOUT_3F2 | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F2_BACK = CUBEB_LAYOUT_QUAD | CHANNEL_FRONT_CENTER, ++ CUBEB_LAYOUT_3F2_LFE_BACK = CUBEB_LAYOUT_3F2_BACK | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F3R_LFE = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_FRONT_CENTER | CHANNEL_LOW_FREQUENCY | ++ CHANNEL_BACK_CENTER | CHANNEL_SIDE_LEFT | ++ CHANNEL_SIDE_RIGHT, ++ CUBEB_LAYOUT_3F4_LFE = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_FRONT_CENTER | CHANNEL_LOW_FREQUENCY | ++ CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT | ++ CHANNEL_SIDE_LEFT | CHANNEL_SIDE_RIGHT, ++}; ++ ++/** Miscellaneous stream preferences. */ ++typedef enum { ++ CUBEB_STREAM_PREF_NONE = 0x00, /**< No stream preferences are requested. */ ++ CUBEB_STREAM_PREF_LOOPBACK = 0x01, /**< Request a loopback stream. Should be ++ specified on the input params and an ++ output device to loopback from should ++ be passed in place of an input device. */ ++ CUBEB_STREAM_PREF_DISABLE_DEVICE_SWITCHING = 0x02, /**< Disable switching ++ default device on OS ++ changes. */ ++ CUBEB_STREAM_PREF_VOICE = 0x04 /**< This stream is going to transport voice data. ++ Depending on the backend and platform, this can ++ change the audio input or output devices ++ selected, as well as the quality of the stream, ++ for example to accomodate bluetooth SCO modes on ++ bluetooth devices. */ ++} cubeb_stream_prefs; ++ + /** Stream format initialization parameters. */ + typedef struct { +- cubeb_sample_format format; /**< Requested sample format. One of +- #cubeb_sample_format. */ +- unsigned int rate; /**< Requested sample rate. Valid range is [1000, 192000]. */ +- unsigned int channels; /**< Requested channel count. Valid range is [1, 8]. */ +-#if defined(__ANDROID__) +- cubeb_stream_type stream_type; /**< Used to map Android audio stream types */ +-#endif ++ cubeb_sample_format format; /**< Requested sample format. One of ++ #cubeb_sample_format. */ ++ uint32_t rate; /**< Requested sample rate. Valid range is [1000, 192000]. */ ++ uint32_t channels; /**< Requested channel count. Valid range is [1, 8]. */ ++ cubeb_channel_layout layout; /**< Requested channel layout. This must be consistent with the provided channels. CUBEB_LAYOUT_UNDEFINED if unknown */ ++ cubeb_stream_prefs prefs; /**< Requested preferences. */ + } cubeb_stream_params; + + /** Audio device description */ +@@ -271,15 +332,16 @@ typedef enum { + } cubeb_device_pref; + + /** This structure holds the characteristics +- * of an input or output audio device. It can be obtained using +- * `cubeb_enumerate_devices`, and must be destroyed using +- * `cubeb_device_info_destroy`. */ ++ * of an input or output audio device. It is obtained using ++ * `cubeb_enumerate_devices`, which returns these structures via ++ * `cubeb_device_collection` and must be destroyed via ++ * `cubeb_device_collection_destroy`. */ + typedef struct { + cubeb_devid devid; /**< Device identifier handle. */ +- char * device_id; /**< Device identifier which might be presented in a UI. */ +- char * friendly_name; /**< Friendly device name which might be presented in a UI. */ +- char * group_id; /**< Two devices have the same group identifier if they belong to the same physical device; for example a headset and microphone. */ +- char * vendor_name; /**< Optional vendor name, may be NULL. */ ++ char const * device_id; /**< Device identifier which might be presented in a UI. */ ++ char const * friendly_name; /**< Friendly device name which might be presented in a UI. */ ++ char const * group_id; /**< Two devices have the same group identifier if they belong to the same physical device; for example a headset and microphone. */ ++ char const * vendor_name; /**< Optional vendor name, may be NULL. */ + + cubeb_device_type type; /**< Type of device (Input/Output). */ + cubeb_device_state state; /**< State of device disabled/enabled/unplugged. */ +@@ -287,19 +349,21 @@ typedef struct { + + cubeb_device_fmt format; /**< Sample format supported. */ + cubeb_device_fmt default_format; /**< The default sample format for this device. */ +- unsigned int max_channels; /**< Channels. */ +- unsigned int default_rate; /**< Default/Preferred sample rate. */ +- unsigned int max_rate; /**< Maximum sample rate supported. */ +- unsigned int min_rate; /**< Minimum sample rate supported. */ ++ uint32_t max_channels; /**< Channels. */ ++ uint32_t default_rate; /**< Default/Preferred sample rate. */ ++ uint32_t max_rate; /**< Maximum sample rate supported. */ ++ uint32_t min_rate; /**< Minimum sample rate supported. */ + +- unsigned int latency_lo; /**< Lowest possible latency in frames. */ +- unsigned int latency_hi; /**< Higest possible latency in frames. */ ++ uint32_t latency_lo; /**< Lowest possible latency in frames. */ ++ uint32_t latency_hi; /**< Higest possible latency in frames. */ + } cubeb_device_info; + +-/** Device collection. */ ++/** Device collection. ++ * Returned by `cubeb_enumerate_devices` and destroyed by ++ * `cubeb_device_collection_destroy`. */ + typedef struct { +- uint32_t count; /**< Device count in collection. */ +- cubeb_device_info * device[1]; /**< Array of pointers to device info. */ ++ cubeb_device_info * device; /**< Array of pointers to device info. */ ++ size_t count; /**< Device count in collection. */ + } cubeb_device_collection; + + /** User supplied data callback. +@@ -316,13 +380,17 @@ typedef struct { + @param output_buffer A pointer to a buffer to be filled with audio samples, + or nullptr if this is an input-only stream. + @param nframes The number of frames of the two buffer. +- @retval Number of frames written to the output buffer. If this number is +- less than nframes, then the stream will start to drain. ++ @retval If the stream has output, this is the number of frames written to ++ the output buffer. In this case, if this number is less than ++ nframes then the stream will start to drain. If the stream is ++ input only, then returning nframes indicates data has been read. ++ In this case, a value less than nframes will result in the stream ++ being stopped. + @retval CUBEB_ERROR on error, in which case the data callback will stop + and the stream will enter a shutdown state. */ + typedef long (* cubeb_data_callback)(cubeb_stream * stream, + void * user_ptr, +- const void * input_buffer, ++ void const * input_buffer, + void * output_buffer, + long nframes); + +@@ -342,23 +410,33 @@ typedef void (* cubeb_device_changed_callback)(void * user_ptr); + /** + * User supplied callback called when the underlying device collection changed. + * @param context A pointer to the cubeb context. +- * @param user_ptr The pointer passed to cubeb_stream_init. */ ++ * @param user_ptr The pointer passed to cubeb_register_device_collection_changed. */ + typedef void (* cubeb_device_collection_changed_callback)(cubeb * context, + void * user_ptr); + + /** User supplied callback called when a message needs logging. */ +-typedef void (* cubeb_log_callback)(const char * fmt, ...); ++typedef void (* cubeb_log_callback)(char const * fmt, ...); + + /** Initialize an application context. This will perform any library or + application scoped initialization. ++ ++ Note: On Windows platforms, COM must be initialized in MTA mode on ++ any thread that will call the cubeb API. ++ + @param context A out param where an opaque pointer to the application + context will be returned. + @param context_name A name for the context. Depending on the platform this + can appear in different locations. ++ @param backend_name The name of the cubeb backend user desires to select. ++ Accepted values self-documented in cubeb.c: init_oneshot ++ If NULL, a default ordering is used for backend choice. ++ A valid choice overrides all other possible backends, ++ so long as the backend was included at compile time. + @retval CUBEB_OK in case of success. + @retval CUBEB_ERROR in case of error, for example because the host + has no audio hardware. */ +-CUBEB_EXPORT int cubeb_init(cubeb ** context, char const * context_name); ++CUBEB_EXPORT int cubeb_init(cubeb ** context, char const * context_name, ++ char const * backend_name); + + /** Get a read-only string identifying this context's current backend. + @param context A pointer to the cubeb context. +@@ -376,7 +454,7 @@ CUBEB_EXPORT int cubeb_get_max_channel_count(cubeb * context, uint32_t * max_cha + + /** Get the minimal latency value, in frames, that is guaranteed to work + when creating a stream for the specified sample rate. This is platform, +- hardware and backend dependant. ++ hardware and backend dependent. + @param context A pointer to the cubeb context. + @param params On some backends, the minimum achievable latency depends on + the characteristics of the stream. +@@ -386,11 +464,11 @@ CUBEB_EXPORT int cubeb_get_max_channel_count(cubeb * context, uint32_t * max_cha + @retval CUBEB_ERROR_INVALID_PARAMETER + @retval CUBEB_ERROR_NOT_SUPPORTED */ + CUBEB_EXPORT int cubeb_get_min_latency(cubeb * context, +- cubeb_stream_params params, ++ cubeb_stream_params * params, + uint32_t * latency_frames); + + /** Get the preferred sample rate for this backend: this is hardware and +- platform dependant, and can avoid resampling, and/or trigger fastpaths. ++ platform dependent, and can avoid resampling, and/or trigger fastpaths. + @param context A pointer to the cubeb context. + @param rate The samplerate (in Hz) the current configuration prefers. + @retval CUBEB_OK +@@ -434,7 +512,7 @@ CUBEB_EXPORT int cubeb_stream_init(cubeb * context, + cubeb_stream_params * input_stream_params, + cubeb_devid output_device, + cubeb_stream_params * output_stream_params, +- unsigned int latency_frames, ++ uint32_t latency_frames, + cubeb_data_callback data_callback, + cubeb_state_callback state_callback, + void * user_ptr); +@@ -456,6 +534,14 @@ CUBEB_EXPORT int cubeb_stream_start(cubeb_stream * stream); + @retval CUBEB_ERROR */ + CUBEB_EXPORT int cubeb_stream_stop(cubeb_stream * stream); + ++/** Reset stream to the default device. ++ @param stream ++ @retval CUBEB_OK ++ @retval CUBEB_ERROR_INVALID_PARAMETER ++ @retval CUBEB_ERROR_NOT_SUPPORTED ++ @retval CUBEB_ERROR */ ++CUBEB_EXPORT int cubeb_stream_reset_default_device(cubeb_stream * stream); ++ + /** Get the current stream playback position. + @param stream + @param position Playback position in frames. +@@ -482,20 +568,6 @@ CUBEB_EXPORT int cubeb_stream_get_latency(cubeb_stream * stream, uint32_t * late + @retval CUBEB_ERROR_NOT_SUPPORTED */ + CUBEB_EXPORT int cubeb_stream_set_volume(cubeb_stream * stream, float volume); + +-/** If the stream is stereo, set the left/right panning. If the stream is mono, +- this has no effect. +- @param stream the stream for which to change the panning +- @param panning a number from -1.0 to 1.0. -1.0 means that the stream is +- fully mixed in the left channel, 1.0 means the stream is fully +- mixed in the right channel. 0.0 is equal power in the right and +- left channel (default). +- @retval CUBEB_OK +- @retval CUBEB_ERROR_INVALID_PARAMETER if stream is null or if panning is +- outside the [-1.0, 1.0] range. +- @retval CUBEB_ERROR_NOT_SUPPORTED +- @retval CUBEB_ERROR stream is not mono nor stereo */ +-CUBEB_EXPORT int cubeb_stream_set_panning(cubeb_stream * stream, float panning); +- + /** Get the current output device for this stream. + @param stm the stream for which to query the current output device + @param device a pointer in which the current output device will be stored. +@@ -526,6 +598,11 @@ CUBEB_EXPORT int cubeb_stream_device_destroy(cubeb_stream * stream, + CUBEB_EXPORT int cubeb_stream_register_device_changed_callback(cubeb_stream * stream, + cubeb_device_changed_callback device_changed_callback); + ++/** Return the user data pointer registered with the stream with cubeb_stream_init. ++ @param stream the stream for which to retrieve user data pointer. ++ @retval user data pointer */ ++CUBEB_EXPORT void * cubeb_stream_user_ptr(cubeb_stream * stream); ++ + /** Returns enumerated devices. + @param context + @param devtype device type to include +@@ -535,26 +612,26 @@ CUBEB_EXPORT int cubeb_stream_register_device_changed_callback(cubeb_stream * st + @retval CUBEB_ERROR_NOT_SUPPORTED */ + CUBEB_EXPORT int cubeb_enumerate_devices(cubeb * context, + cubeb_device_type devtype, +- cubeb_device_collection ** collection); ++ cubeb_device_collection * collection); + + /** Destroy a cubeb_device_collection, and its `cubeb_device_info`. ++ @param context + @param collection collection to destroy + @retval CUBEB_OK + @retval CUBEB_ERROR_INVALID_PARAMETER if collection is an invalid pointer */ +-CUBEB_EXPORT int cubeb_device_collection_destroy(cubeb_device_collection * collection); +- +-/** Destroy a cubeb_device_info structure. +- @param info pointer to device info structure +- @retval CUBEB_OK +- @retval CUBEB_ERROR_INVALID_PARAMETER if info is an invalid pointer */ +-CUBEB_EXPORT int cubeb_device_info_destroy(cubeb_device_info * info); ++CUBEB_EXPORT int cubeb_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection); + + /** Registers a callback which is called when the system detects + a new device or a device is removed. + @param context +- @param devtype device type to include ++ @param devtype device type to include. Different callbacks and user pointers ++ can be registered for each devtype. The hybrid devtype ++ `CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT` is also valid ++ and will register the provided callback and user pointer in both sides. + @param callback a function called whenever the system device list changes. +- Passing NULL allow to unregister a function ++ Passing NULL allow to unregister a function. You have to unregister ++ first before you register a new callback. + @param user_ptr pointer to user specified data which will be present in + subsequent callbacks. + @retval CUBEB_ERROR_NOT_SUPPORTED */ +diff --git a/media/libcubeb/osx-linearize-operations.patch b/media/libcubeb/osx-linearize-operations.patch +deleted file mode 100644 +index 9f4f31bca..000000000 +--- a/media/libcubeb/osx-linearize-operations.patch ++++ /dev/null +@@ -1,968 +0,0 @@ +-From: Paul Adenot +-Subject: Linearize operations on AudioUnits to sidestep a deadlock. +- +---- +- +-diff --git a/src/cubeb_audiounit.cpp b/src/cubeb_audiounit.cpp +---- a/src/cubeb_audiounit.cpp +-+++ b/src/cubeb_audiounit.cpp +-@@ -53,40 +53,45 @@ typedef UInt32 AudioFormatFlags; +- +- #define AU_OUT_BUS 0 +- #define AU_IN_BUS 1 +- +- #define PRINT_ERROR_CODE(str, r) do { \ +- LOG("System call failed: %s (rv: %d)", str, r); \ +- } while(0) +- +-+const char * DISPATCH_QUEUE_LABEL = "org.mozilla.cubeb"; +-+ +- /* Testing empirically, some headsets report a minimal latency that is very +- * low, but this does not work in practice. Lie and say the minimum is 256 +- * frames. */ +- const uint32_t SAFE_MIN_LATENCY_FRAMES = 256; +- const uint32_t SAFE_MAX_LATENCY_FRAMES = 512; +- +- void audiounit_stream_stop_internal(cubeb_stream * stm); +- void audiounit_stream_start_internal(cubeb_stream * stm); +--static void close_audiounit_stream(cubeb_stream * stm); +--static int setup_audiounit_stream(cubeb_stream * stm); +-+static void audiounit_close_stream(cubeb_stream *stm); +-+static int audiounit_setup_stream(cubeb_stream *stm); +- +- extern cubeb_ops const audiounit_ops; +- +- struct cubeb { +- cubeb_ops const * ops; +- owned_critical_section mutex; +- std::atomic active_streams; +-+ uint32_t global_latency_frames = 0; +- int limit_streams; +- cubeb_device_collection_changed_callback collection_changed_callback; +- void * collection_changed_user_ptr; +- /* Differentiate input from output devices. */ +- cubeb_device_type collection_changed_devtype; +- uint32_t devtype_device_count; +- AudioObjectID * devtype_device_array; +-+ // The queue is asynchronously deallocated once all references to it are released +-+ dispatch_queue_t serial_queue = dispatch_queue_create(DISPATCH_QUEUE_LABEL, DISPATCH_QUEUE_SERIAL); +- }; +- +- class auto_array_wrapper +- { +- public: +- explicit auto_array_wrapper(auto_array * ar) +- : float_ar(ar) +- , short_ar(nullptr) +-@@ -205,16 +210,17 @@ struct cubeb_stream { +- cubeb_resampler * resampler; +- /* This is the number of output callback we got in a row. This is usually one, +- * but can be two when the input and output rate are different, and more when +- * a device has been plugged or unplugged, as there can be some time before +- * the device is ready. */ +- std::atomic output_callback_in_a_row; +- /* This is true if a device change callback is currently running. */ +- std::atomic switching_device; +-+ std::atomic buffer_size_change_state{ false }; +- }; +- +- bool has_input(cubeb_stream * stm) +- { +- return stm->input_stream_params.rate != 0; +- } +- +- bool has_output(cubeb_stream * stm) +-@@ -256,16 +262,24 @@ audiotimestamp_to_latency(AudioTimeStamp +- +- uint64_t pres = AudioConvertHostTimeToNanos(tstamp->mHostTime); +- uint64_t now = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime()); +- +- return ((pres - now) * stream->output_desc.mSampleRate) / 1000000000LL; +- } +- +- static void +-+audiounit_set_global_latency(cubeb_stream * stm, uint32_t latency_frames) +-+{ +-+ stm->mutex.assert_current_thread_owns(); +-+ assert(stm->context->active_streams == 1); +-+ stm->context->global_latency_frames = latency_frames; +-+} +-+ +-+static void +- audiounit_make_silent(AudioBuffer * ioData) +- { +- assert(ioData); +- assert(ioData->mData); +- memset(ioData->mData, 0, ioData->mDataByteSize); +- } +- +- static OSStatus +-@@ -576,29 +590,54 @@ audiounit_get_input_device_id(AudioDevic +- device_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- return CUBEB_OK; +- } +- +-+static int +-+audiounit_reinit_stream(cubeb_stream * stm, bool is_started) +-+{ +-+ if (is_started) { +-+ audiounit_stream_stop_internal(stm); +-+ } +-+ +-+ { +-+ auto_lock lock(stm->mutex); +-+ +-+ audiounit_close_stream(stm); +-+ +-+ if (audiounit_setup_stream(stm) != CUBEB_OK) { +-+ LOG("(%p) Stream reinit failed.", stm); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ // Reset input frames to force new stream pre-buffer +-+ // silence if needed, check `is_extra_input_needed()` +-+ stm->frames_read = 0; +-+ +-+ // If the stream was running, start it again. +-+ if (is_started) { +-+ audiounit_stream_start_internal(stm); +-+ } +-+ } +-+ return CUBEB_OK; +-+} +-+ +- static OSStatus +- audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_count, +- const AudioObjectPropertyAddress * addresses, +- void * user) +- { +- cubeb_stream * stm = (cubeb_stream*) user; +-- int rv; +-- bool was_running = false; +-- +- stm->switching_device = true; +-- +- // Note if the stream was running or not +-- was_running = !stm->shutdown; +-+ bool was_running = !stm->shutdown; +- +- LOG("(%p) Audio device changed, %d events.", stm, address_count); +- for (UInt32 i = 0; i < address_count; i++) { +- switch(addresses[i].mSelector) { +- case kAudioHardwarePropertyDefaultOutputDevice: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDefaultOutputDevice", i); +- // Allow restart to choose the new default +- stm->output_device = nullptr; +-@@ -639,38 +678,25 @@ audiounit_property_listener_callback(Aud +- if (stm->device_changed_callback) { +- stm->device_changed_callback(stm->user_ptr); +- } +- break; +- } +- } +- } +- +-- // This means the callback won't be called again. +-- audiounit_stream_stop_internal(stm); +-- +-- { +-- auto_lock lock(stm->mutex); +-- close_audiounit_stream(stm); +-- rv = setup_audiounit_stream(stm); +-- if (rv != CUBEB_OK) { +-- LOG("(%p) Could not reopen a stream after switching.", stm); +-+ // Use a new thread, through the queue, to avoid deadlock when calling +-+ // Get/SetProperties method from inside notify callback +-+ dispatch_async(stm->context->serial_queue, ^() { +-+ if (audiounit_reinit_stream(stm, was_running) != CUBEB_OK) { +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +-- return noErr; +-+ LOG("(%p) Could not reopen the stream after switching.", stm); +- } +-- +-- stm->frames_read = 0; +-- +-- // If the stream was running, start it again. +-- if (was_running) { +-- audiounit_stream_start_internal(stm); +-- } +-- } +-- +-- stm->switching_device = false; +-+ stm->switching_device = false; +-+ }); +- +- return noErr; +- } +- +- OSStatus +- audiounit_add_listener(cubeb_stream * stm, AudioDeviceID id, AudioObjectPropertySelector selector, +- AudioObjectPropertyScope scope, AudioObjectPropertyListenerProc listener) +- { +-@@ -1155,18 +1181,17 @@ audiounit_init_input_linear_buffer(cubeb +- +- static void +- audiounit_destroy_input_linear_buffer(cubeb_stream * stream) +- { +- delete stream->input_linear_buffer; +- } +- +- static uint32_t +--audiounit_clamp_latency(cubeb_stream * stm, +-- uint32_t latency_frames) +-+audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) +- { +- // For the 1st stream set anything within safe min-max +- assert(stm->context->active_streams > 0); +- if (stm->context->active_streams == 1) { +- return std::max(std::min(latency_frames, SAFE_MAX_LATENCY_FRAMES), +- SAFE_MIN_LATENCY_FRAMES); +- } +- +-@@ -1219,26 +1244,374 @@ audiounit_clamp_latency(cubeb_stream * s +- } else { +- upper_latency_limit = SAFE_MAX_LATENCY_FRAMES; +- } +- +- return std::max(std::min(latency_frames, upper_latency_limit), +- SAFE_MIN_LATENCY_FRAMES); +- } +- +-+/* +-+ * Change buffer size is prone to deadlock thus we change it +-+ * following the steps: +-+ * - register a listener for the buffer size property +-+ * - change the property +-+ * - wait until the listener is executed +-+ * - property has changed, remove the listener +-+ * */ +-+static void +-+buffer_size_changed_callback(void * inClientData, +-+ AudioUnit inUnit, +-+ AudioUnitPropertyID inPropertyID, +-+ AudioUnitScope inScope, +-+ AudioUnitElement inElement) +-+{ +-+ cubeb_stream * stm = (cubeb_stream *)inClientData; +-+ +-+ AudioUnit au = inUnit; +-+ AudioUnitScope au_scope = kAudioUnitScope_Input; +-+ AudioUnitElement au_element = inElement; +-+ const char * au_type = "output"; +-+ +-+ if (au == stm->input_unit) { +-+ au_scope = kAudioUnitScope_Output; +-+ au_type = "input"; +-+ } +-+ +-+ switch (inPropertyID) { +-+ +-+ case kAudioDevicePropertyBufferFrameSize: { +-+ if (inScope != au_scope) { +-+ break; +-+ } +-+ UInt32 new_buffer_size; +-+ UInt32 outSize = sizeof(UInt32); +-+ OSStatus r = AudioUnitGetProperty(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ au_scope, +-+ au_element, +-+ &new_buffer_size, +-+ &outSize); +-+ if (r != noErr) { +-+ LOG("(%p) Event: kAudioDevicePropertyBufferFrameSize: Cannot get current buffer size", stm); +-+ } else { +-+ LOG("(%p) Event: kAudioDevicePropertyBufferFrameSize: New %s buffer size = %d for scope %d", stm, +-+ au_type, new_buffer_size, inScope); +-+ } +-+ stm->buffer_size_change_state = true; +-+ break; +-+ } +-+ } +-+} +-+ +-+enum set_buffer_size_side { +-+ INPUT, +-+ OUTPUT, +-+}; +-+ +- static int +--setup_audiounit_stream(cubeb_stream * stm) +-+audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buffer_size_side set_side) +-+{ +-+ AudioUnit au = stm->output_unit; +-+ AudioUnitScope au_scope = kAudioUnitScope_Input; +-+ AudioUnitElement au_element = AU_OUT_BUS; +-+ const char * au_type = "output"; +-+ +-+ if (set_side == INPUT) { +-+ au = stm->input_unit; +-+ au_scope = kAudioUnitScope_Output; +-+ au_element = AU_IN_BUS; +-+ au_type = "input"; +-+ } +-+ +-+ uint32_t buffer_frames = 0; +-+ UInt32 size = sizeof(buffer_frames); +-+ int r = AudioUnitGetProperty(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ au_scope, +-+ au_element, +-+ &buffer_frames, +-+ &size); +-+ if (r != noErr) { +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ return CUBEB_ERROR; +-+ } +-+ +-+ if (new_size_frames == buffer_frames) { +-+ LOG("(%p) No need to update %s buffer size already %u frames", stm, au_type, buffer_frames); +-+ return CUBEB_OK; +-+ } +-+ +-+ r = AudioUnitAddPropertyListener(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ buffer_size_changed_callback, +-+ stm); +-+ if (r != noErr) { +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ return CUBEB_ERROR; +-+ } +-+ +-+ stm->buffer_size_change_state = false; +-+ +-+ r = AudioUnitSetProperty(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ au_scope, +-+ au_element, +-+ &new_size_frames, +-+ sizeof(new_size_frames)); +-+ if (r != noErr) { +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ +-+ r = AudioUnitRemovePropertyListenerWithUserData(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ buffer_size_changed_callback, +-+ stm); +-+ if (r != noErr) { +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ } +-+ +-+ return CUBEB_ERROR; +-+ } +-+ +-+ int count = 0; +-+ while (!stm->buffer_size_change_state && count++ < 30) { +-+ struct timespec req, rem; +-+ req.tv_sec = 0; +-+ req.tv_nsec = 100000000L; // 0.1 sec +-+ if (nanosleep(&req , &rem) < 0 ) { +-+ LOG("(%p) Warning: nanosleep call failed or interrupted. Remaining time %ld nano secs \n", stm, rem.tv_nsec); +-+ } +-+ LOG("(%p) audiounit_set_buffer_size : wait count = %d", stm, count); +-+ } +-+ +-+ r = AudioUnitRemovePropertyListenerWithUserData(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ buffer_size_changed_callback, +-+ stm); +-+ if (r != noErr) { +-+ return CUBEB_ERROR; +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ } +-+ +-+ if (!stm->buffer_size_change_state && count >= 30) { +-+ LOG("(%p) Error, did not get buffer size change callback ...", stm); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ LOG("(%p) %s buffer size changed to %u frames.", stm, au_type, new_size_frames); +-+ return CUBEB_OK; +-+} +-+ +-+static int +-+audiounit_configure_input(cubeb_stream * stm) +-+{ +-+ int r = 0; +-+ UInt32 size; +-+ AURenderCallbackStruct aurcbs_in; +-+ +-+ LOG("(%p) Opening input side: rate %u, channels %u, format %d, latency in frames %u.", +-+ stm, stm->input_stream_params.rate, stm->input_stream_params.channels, +-+ stm->input_stream_params.format, stm->latency_frames); +-+ +-+ /* Get input device sample rate. */ +-+ AudioStreamBasicDescription input_hw_desc; +-+ size = sizeof(AudioStreamBasicDescription); +-+ r = AudioUnitGetProperty(stm->input_unit, +-+ kAudioUnitProperty_StreamFormat, +-+ kAudioUnitScope_Input, +-+ AU_IN_BUS, +-+ &input_hw_desc, +-+ &size); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat", r); +-+ return CUBEB_ERROR; +-+ } +-+ stm->input_hw_rate = input_hw_desc.mSampleRate; +-+ LOG("(%p) Input device sampling rate: %.2f", stm, stm->input_hw_rate); +-+ +-+ /* Set format description according to the input params. */ +-+ r = audio_stream_desc_init(&stm->input_desc, &stm->input_stream_params); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Setting format description for input failed.", stm); +-+ return r; +-+ } +-+ +-+ // Use latency to set buffer size +-+ stm->input_buffer_frames = stm->latency_frames; +-+ r = audiounit_set_buffer_size(stm, stm->input_buffer_frames, INPUT); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Error in change input buffer size.", stm); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ AudioStreamBasicDescription src_desc = stm->input_desc; +-+ /* Input AudioUnit must be configured with device's sample rate. +-+ we will resample inside input callback. */ +-+ src_desc.mSampleRate = stm->input_hw_rate; +-+ +-+ r = AudioUnitSetProperty(stm->input_unit, +-+ kAudioUnitProperty_StreamFormat, +-+ kAudioUnitScope_Output, +-+ AU_IN_BUS, +-+ &src_desc, +-+ sizeof(AudioStreamBasicDescription)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ /* Frames per buffer in the input callback. */ +-+ r = AudioUnitSetProperty(stm->input_unit, +-+ kAudioUnitProperty_MaximumFramesPerSlice, +-+ kAudioUnitScope_Global, +-+ AU_IN_BUS, +-+ &stm->input_buffer_frames, +-+ sizeof(UInt32)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ // Input only capacity +-+ unsigned int array_capacity = 1; +-+ if (has_output(stm)) { +-+ // Full-duplex increase capacity +-+ array_capacity = 8; +-+ } +-+ if (audiounit_init_input_linear_buffer(stm, array_capacity) != CUBEB_OK) { +-+ return CUBEB_ERROR; +-+ } +-+ +-+ assert(stm->input_unit != NULL); +-+ aurcbs_in.inputProc = audiounit_input_callback; +-+ aurcbs_in.inputProcRefCon = stm; +-+ +-+ r = AudioUnitSetProperty(stm->input_unit, +-+ kAudioOutputUnitProperty_SetInputCallback, +-+ kAudioUnitScope_Global, +-+ AU_OUT_BUS, +-+ &aurcbs_in, +-+ sizeof(aurcbs_in)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback", r); +-+ return CUBEB_ERROR; +-+ } +-+ LOG("(%p) Input audiounit init successfully.", stm); +-+ +-+ return CUBEB_OK; +-+} +-+ +-+static int +-+audiounit_configure_output(cubeb_stream * stm) +-+{ +-+ int r; +-+ AURenderCallbackStruct aurcbs_out; +-+ UInt32 size; +-+ +-+ +-+ LOG("(%p) Opening output side: rate %u, channels %u, format %d, latency in frames %u.", +-+ stm, stm->output_stream_params.rate, stm->output_stream_params.channels, +-+ stm->output_stream_params.format, stm->latency_frames); +-+ +-+ r = audio_stream_desc_init(&stm->output_desc, &stm->output_stream_params); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not initialize the audio stream description.", stm); +-+ return r; +-+ } +-+ +-+ /* Get output device sample rate. */ +-+ AudioStreamBasicDescription output_hw_desc; +-+ size = sizeof(AudioStreamBasicDescription); +-+ memset(&output_hw_desc, 0, size); +-+ r = AudioUnitGetProperty(stm->output_unit, +-+ kAudioUnitProperty_StreamFormat, +-+ kAudioUnitScope_Output, +-+ AU_OUT_BUS, +-+ &output_hw_desc, +-+ &size); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitGetProperty/output/tkAudioUnitProperty_StreamFormat", r); +-+ return CUBEB_ERROR; +-+ } +-+ stm->output_hw_rate = output_hw_desc.mSampleRate; +-+ LOG("(%p) Output device sampling rate: %.2f", stm, output_hw_desc.mSampleRate); +-+ +-+ r = AudioUnitSetProperty(stm->output_unit, +-+ kAudioUnitProperty_StreamFormat, +-+ kAudioUnitScope_Input, +-+ AU_OUT_BUS, +-+ &stm->output_desc, +-+ sizeof(AudioStreamBasicDescription)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ r = audiounit_set_buffer_size(stm, stm->latency_frames, OUTPUT); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Error in change output buffer size.", stm); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ /* Frames per buffer in the input callback. */ +-+ r = AudioUnitSetProperty(stm->output_unit, +-+ kAudioUnitProperty_MaximumFramesPerSlice, +-+ kAudioUnitScope_Global, +-+ AU_OUT_BUS, +-+ &stm->latency_frames, +-+ sizeof(UInt32)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_MaximumFramesPerSlice", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ assert(stm->output_unit != NULL); +-+ aurcbs_out.inputProc = audiounit_output_callback; +-+ aurcbs_out.inputProcRefCon = stm; +-+ r = AudioUnitSetProperty(stm->output_unit, +-+ kAudioUnitProperty_SetRenderCallback, +-+ kAudioUnitScope_Global, +-+ AU_OUT_BUS, +-+ &aurcbs_out, +-+ sizeof(aurcbs_out)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ LOG("(%p) Output audiounit init successfully.", stm); +-+ return CUBEB_OK; +-+} +-+ +-+static int +-+audiounit_setup_stream(cubeb_stream * stm) +- { +- stm->mutex.assert_current_thread_owns(); +- +-- int r; +-- AURenderCallbackStruct aurcbs_in; +-- AURenderCallbackStruct aurcbs_out; +-- UInt32 size; +-- +-+ int r = 0; +- if (has_input(stm)) { +- r = audiounit_create_unit(&stm->input_unit, true, +- &stm->input_stream_params, +- stm->input_device); +- if (r != CUBEB_OK) { +- LOG("(%p) AudioUnit creation for input failed.", stm); +- return r; +- } +-@@ -1249,180 +1622,46 @@ setup_audiounit_stream(cubeb_stream * st +- &stm->output_stream_params, +- stm->output_device); +- if (r != CUBEB_OK) { +- LOG("(%p) AudioUnit creation for output failed.", stm); +- return r; +- } +- } +- +-+ /* Latency cannot change if another stream is operating in parallel. In this case +-+ * latecy is set to the other stream value. */ +-+ if (stm->context->active_streams > 1) { +-+ LOG("(%p) More than one active stream, use global latency.", stm); +-+ stm->latency_frames = stm->context->global_latency_frames; +-+ } else { +-+ /* Silently clamp the latency down to the platform default, because we +-+ * synthetize the clock from the callbacks, and we want the clock to update +-+ * often. */ +-+ stm->latency_frames = audiounit_clamp_latency(stm, stm->latency_frames); +-+ assert(stm->latency_frames); // Ungly error check +-+ audiounit_set_global_latency(stm, stm->latency_frames); +-+ } +-+ +- /* Setup Input Stream! */ +- if (has_input(stm)) { +-- LOG("(%p) Opening input side: rate %u, channels %u, format %d, latency in frames %u.", +-- stm, stm->input_stream_params.rate, stm->input_stream_params.channels, +-- stm->input_stream_params.format, stm->latency_frames); +-- /* Get input device sample rate. */ +-- AudioStreamBasicDescription input_hw_desc; +-- size = sizeof(AudioStreamBasicDescription); +-- r = AudioUnitGetProperty(stm->input_unit, +-- kAudioUnitProperty_StreamFormat, +-- kAudioUnitScope_Input, +-- AU_IN_BUS, +-- &input_hw_desc, +-- &size); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat", r); +-- return CUBEB_ERROR; +-- } +-- stm->input_hw_rate = input_hw_desc.mSampleRate; +-- LOG("(%p) Input device sampling rate: %.2f", stm, stm->input_hw_rate); +-- +-- /* Set format description according to the input params. */ +-- r = audio_stream_desc_init(&stm->input_desc, &stm->input_stream_params); +-+ r = audiounit_configure_input(stm); +- if (r != CUBEB_OK) { +-- LOG("(%p) Setting format description for input failed.", stm); +-+ LOG("(%p) Configure audiounit input failed.", stm); +- return r; +- } +-- +-- // Use latency to set buffer size +-- stm->input_buffer_frames = stm->latency_frames; +-- LOG("(%p) Input buffer frame count %u.", stm, unsigned(stm->input_buffer_frames)); +-- r = AudioUnitSetProperty(stm->input_unit, +-- kAudioDevicePropertyBufferFrameSize, +-- kAudioUnitScope_Output, +-- AU_IN_BUS, +-- &stm->input_buffer_frames, +-- sizeof(UInt32)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +-- return CUBEB_ERROR; +-- } +-- +-- AudioStreamBasicDescription src_desc = stm->input_desc; +-- /* Input AudioUnit must be configured with device's sample rate. +-- we will resample inside input callback. */ +-- src_desc.mSampleRate = stm->input_hw_rate; +-- +-- r = AudioUnitSetProperty(stm->input_unit, +-- kAudioUnitProperty_StreamFormat, +-- kAudioUnitScope_Output, +-- AU_IN_BUS, +-- &src_desc, +-- sizeof(AudioStreamBasicDescription)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat", r); +-- return CUBEB_ERROR; +-- } +-- +-- /* Frames per buffer in the input callback. */ +-- r = AudioUnitSetProperty(stm->input_unit, +-- kAudioUnitProperty_MaximumFramesPerSlice, +-- kAudioUnitScope_Output, +-- AU_IN_BUS, +-- &stm->input_buffer_frames, +-- sizeof(UInt32)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice", r); +-- return CUBEB_ERROR; +-- } +-- +-- // Input only capacity +-- unsigned int array_capacity = 1; +-- if (has_output(stm)) { +-- // Full-duplex increase capacity +-- array_capacity = 8; +-- } +-- if (audiounit_init_input_linear_buffer(stm, array_capacity) != CUBEB_OK) { +-- return CUBEB_ERROR; +-- } +-- +-- assert(stm->input_unit != NULL); +-- aurcbs_in.inputProc = audiounit_input_callback; +-- aurcbs_in.inputProcRefCon = stm; +-- +-- r = AudioUnitSetProperty(stm->input_unit, +-- kAudioOutputUnitProperty_SetInputCallback, +-- kAudioUnitScope_Global, +-- AU_OUT_BUS, +-- &aurcbs_in, +-- sizeof(aurcbs_in)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback", r); +-- return CUBEB_ERROR; +-- } +-- LOG("(%p) Input audiounit init successfully.", stm); +- } +- +- /* Setup Output Stream! */ +- if (has_output(stm)) { +-- LOG("(%p) Opening output side: rate %u, channels %u, format %d, latency in frames %u.", +-- stm, stm->output_stream_params.rate, stm->output_stream_params.channels, +-- stm->output_stream_params.format, stm->latency_frames); +-- r = audio_stream_desc_init(&stm->output_desc, &stm->output_stream_params); +-+ r = audiounit_configure_output(stm); +- if (r != CUBEB_OK) { +-- LOG("(%p) Could not initialize the audio stream description.", stm); +-+ LOG("(%p) Configure audiounit output failed.", stm); +- return r; +- } +-- +-- /* Get output device sample rate. */ +-- AudioStreamBasicDescription output_hw_desc; +-- size = sizeof(AudioStreamBasicDescription); +-- memset(&output_hw_desc, 0, size); +-- r = AudioUnitGetProperty(stm->output_unit, +-- kAudioUnitProperty_StreamFormat, +-- kAudioUnitScope_Output, +-- AU_OUT_BUS, +-- &output_hw_desc, +-- &size); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitGetProperty/output/tkAudioUnitProperty_StreamFormat", r); +-- return CUBEB_ERROR; +-- } +-- stm->output_hw_rate = output_hw_desc.mSampleRate; +-- LOG("(%p) Output device sampling rate: %.2f", stm, output_hw_desc.mSampleRate); +-- +-- r = AudioUnitSetProperty(stm->output_unit, +-- kAudioUnitProperty_StreamFormat, +-- kAudioUnitScope_Input, +-- AU_OUT_BUS, +-- &stm->output_desc, +-- sizeof(AudioStreamBasicDescription)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat", r); +-- return CUBEB_ERROR; +-- } +-- +-- // Use latency to calculate buffer size +-- uint32_t output_buffer_frames = stm->latency_frames; +-- LOG("(%p) Output buffer frame count %u.", stm, output_buffer_frames); +-- r = AudioUnitSetProperty(stm->output_unit, +-- kAudioDevicePropertyBufferFrameSize, +-- kAudioUnitScope_Input, +-- AU_OUT_BUS, +-- &output_buffer_frames, +-- sizeof(output_buffer_frames)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +-- return CUBEB_ERROR; +-- } +-- +-- assert(stm->output_unit != NULL); +-- aurcbs_out.inputProc = audiounit_output_callback; +-- aurcbs_out.inputProcRefCon = stm; +-- r = AudioUnitSetProperty(stm->output_unit, +-- kAudioUnitProperty_SetRenderCallback, +-- kAudioUnitScope_Global, +-- AU_OUT_BUS, +-- &aurcbs_out, +-- sizeof(aurcbs_out)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback", r); +-- return CUBEB_ERROR; +-- } +-- LOG("(%p) Output audiounit init successfully.", stm); +- } +- +- // Setting the latency doesn't work well for USB headsets (eg. plantronics). +- // Keep the default latency for now. +- #if 0 +- buffer_size = latency; +- +- /* Get the range of latency this particular device can work with, and clamp +-@@ -1535,63 +1774,60 @@ audiounit_stream_init(cubeb * context, +- void * user_ptr) +- { +- cubeb_stream * stm; +- int r; +- +- assert(context); +- *stream = NULL; +- +-+ assert(latency_frames > 0); +- if (context->limit_streams && context->active_streams >= CUBEB_STREAM_MAX) { +- LOG("Reached the stream limit of %d", CUBEB_STREAM_MAX); +- return CUBEB_ERROR; +- } +-- context->active_streams += 1; +- +- stm = (cubeb_stream *) calloc(1, sizeof(cubeb_stream)); +- assert(stm); +- // Placement new to call the ctors of cubeb_stream members. +- new (stm) cubeb_stream(); +- +- /* These could be different in the future if we have both +- * full-duplex stream and different devices for input vs output. */ +- stm->context = context; +- stm->data_callback = data_callback; +- stm->state_callback = state_callback; +- stm->user_ptr = user_ptr; +-+ stm->latency_frames = latency_frames; +- stm->device_changed_callback = NULL; +- if (input_stream_params) { +- stm->input_stream_params = *input_stream_params; +- stm->input_device = input_device; +- stm->is_default_input = input_device == nullptr || +- (audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT) == +- reinterpret_cast(input_device)); +- } +- if (output_stream_params) { +- stm->output_stream_params = *output_stream_params; +- stm->output_device = output_device; +- } +- +- /* Init data members where necessary */ +- stm->hw_latency_frames = UINT64_MAX; +- +-- /* Silently clamp the latency down to the platform default, because we +-- * synthetize the clock from the callbacks, and we want the clock to update +-- * often. */ +-- stm->latency_frames = audiounit_clamp_latency(stm, latency_frames); +-- assert(latency_frames > 0); +-- +- stm->switching_device = false; +- +-+ auto_lock context_lock(context->mutex); +- { +- // It's not critical to lock here, because no other thread has been started +- // yet, but it allows to assert that the lock has been taken in +-- // `setup_audiounit_stream`. +-+ // `audiounit_setup_stream`. +-+ context->active_streams += 1; +- auto_lock lock(stm->mutex); +-- r = setup_audiounit_stream(stm); +-+ r = audiounit_setup_stream(stm); +- } +- +- if (r != CUBEB_OK) { +- LOG("(%p) Could not setup the audiounit stream.", stm); +- audiounit_stream_destroy(stm); +- return r; +- } +- +-@@ -1602,17 +1838,17 @@ audiounit_stream_init(cubeb * context, +- } +- +- *stream = stm; +- LOG("Cubeb stream (%p) init successful.", stm); +- return CUBEB_OK; +- } +- +- static void +--close_audiounit_stream(cubeb_stream * stm) +-+audiounit_close_stream(cubeb_stream *stm) +- { +- stm->mutex.assert_current_thread_owns(); +- if (stm->input_unit) { +- AudioUnitUninitialize(stm->input_unit); +- AudioComponentInstanceDispose(stm->input_unit); +- } +- +- audiounit_destroy_input_linear_buffer(stm); +-@@ -1625,33 +1861,36 @@ close_audiounit_stream(cubeb_stream * st +- cubeb_resampler_destroy(stm->resampler); +- } +- +- static void +- audiounit_stream_destroy(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-+ auto_lock context_locl(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- { +- auto_lock lock(stm->mutex); +-- close_audiounit_stream(stm); +-+ audiounit_close_stream(stm); +- } +- +- #if !TARGET_OS_IPHONE +- int r = audiounit_uninstall_device_changed_callback(stm); +- if (r != CUBEB_OK) { +- LOG("(%p) Could not uninstall the device changed callback", stm); +- } +- #endif +- +- assert(stm->context->active_streams >= 1); +- stm->context->active_streams -= 1; +- +-+ LOG("Cubeb stream (%p) destroyed successful.", stm); +-+ +- stm->~cubeb_stream(); +- free(stm); +- } +- +- void +- audiounit_stream_start_internal(cubeb_stream * stm) +- { +- OSStatus r; +-@@ -1666,16 +1905,17 @@ audiounit_stream_start_internal(cubeb_st +- } +- +- static int +- audiounit_stream_start(cubeb_stream * stm) +- { +- stm->shutdown = false; +- stm->draining = false; +- +-+ auto_lock context_locl(stm->context->mutex); +- audiounit_stream_start_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); +- +- LOG("Cubeb stream (%p) started successfully.", stm); +- return CUBEB_OK; +- } +- +-@@ -1693,16 +1933,17 @@ audiounit_stream_stop_internal(cubeb_str +- } +- } +- +- static int +- audiounit_stream_stop(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-+ auto_lock context_locl(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- +- LOG("Cubeb stream (%p) stopped successfully.", stm); +- return CUBEB_OK; +- } +- +diff --git a/media/libcubeb/prevent-double-free.patch b/media/libcubeb/prevent-double-free.patch +deleted file mode 100644 +index aa5356d7f..000000000 +--- a/media/libcubeb/prevent-double-free.patch ++++ /dev/null +@@ -1,46 +0,0 @@ +-From f82f15635e09aac4f07d2ddac3d53c84b593d911 Mon Sep 17 00:00:00 2001 +-From: Paul Adenot +-Date: Mon, 16 Jan 2017 04:49:41 -0800 +-Subject: [PATCH 1/1] Prevent double-free when doing an emergency bailout from +- the rendering thread. +- +-This caused gecko bug 1326176. +- +-This was caused by the fact that we would null out `stm->thread` when in +-fact it was still running, so we would delete `stm->emergency_bailout` +-twice, because we would return true from `stop_and_join_thread`. +---- +- src/cubeb_wasapi.cpp | 15 ++++++++++----- +- 1 file changed, 10 insertions(+), 5 deletions(-) +- +-diff --git a/src/cubeb_wasapi.cpp b/src/cubeb_wasapi.cpp +-index 63c12ac..2920b5d 100644 +---- a/src/cubeb_wasapi.cpp +-+++ b/src/cubeb_wasapi.cpp +-@@ -1230,13 +1230,18 @@ bool stop_and_join_render_thread(cubeb_stream * stm) +- rv = false; +- } +- +-- LOG("Closing thread."); +- +-- CloseHandle(stm->thread); +-- stm->thread = NULL; +-+ // Only attempts to close and null out the thread and event if the +-+ // WaitForSingleObject above succeeded, so that calling this function again +-+ // attemps to clean up the thread and event each time. +-+ if (rv) { +-+ LOG("Closing thread."); +-+ CloseHandle(stm->thread); +-+ stm->thread = NULL; +- +-- CloseHandle(stm->shutdown_event); +-- stm->shutdown_event = 0; +-+ CloseHandle(stm->shutdown_event); +-+ stm->shutdown_event = 0; +-+ } +- +- return rv; +- } +--- +-2.7.4 +- +diff --git a/media/libcubeb/src/android/cubeb-output-latency.h b/media/libcubeb/src/android/cubeb-output-latency.h +new file mode 100644 +index 000000000..a824fc1c2 +--- /dev/null ++++ b/media/libcubeb/src/android/cubeb-output-latency.h +@@ -0,0 +1,76 @@ ++#ifndef _CUBEB_OUTPUT_LATENCY_H_ ++#define _CUBEB_OUTPUT_LATENCY_H_ ++ ++#include ++#include "cubeb_media_library.h" ++#include "../cubeb-jni.h" ++ ++struct output_latency_function { ++ media_lib * from_lib; ++ cubeb_jni * from_jni; ++ int version; ++}; ++ ++typedef struct output_latency_function output_latency_function; ++ ++const int ANDROID_JELLY_BEAN_MR1_4_2 = 17; ++ ++output_latency_function * ++cubeb_output_latency_load_method(int version) ++{ ++ output_latency_function * ol = NULL; ++ ol = calloc(1, sizeof(output_latency_function)); ++ ++ ol->version = version; ++ ++ if (ol->version > ANDROID_JELLY_BEAN_MR1_4_2){ ++ ol->from_jni = cubeb_jni_init(); ++ return ol; ++ } ++ ++ ol->from_lib = cubeb_load_media_library(); ++ return ol; ++} ++ ++bool ++cubeb_output_latency_method_is_loaded(output_latency_function * ol) ++{ ++ assert(ol && (ol->from_jni || ol->from_lib)); ++ if (ol->version > ANDROID_JELLY_BEAN_MR1_4_2){ ++ return !!ol->from_jni; ++ } ++ ++ return !!ol->from_lib; ++} ++ ++void ++cubeb_output_latency_unload_method(output_latency_function * ol) ++{ ++ if (!ol) { ++ return; ++ } ++ ++ if (ol->version > ANDROID_JELLY_BEAN_MR1_4_2 && ol->from_jni) { ++ cubeb_jni_destroy(ol->from_jni); ++ } ++ ++ if (ol->version <= ANDROID_JELLY_BEAN_MR1_4_2 && ol->from_lib) { ++ cubeb_close_media_library(ol->from_lib); ++ } ++ ++ free(ol); ++} ++ ++uint32_t ++cubeb_get_output_latency(output_latency_function * ol) ++{ ++ assert(cubeb_output_latency_method_is_loaded(ol)); ++ ++ if (ol->version > ANDROID_JELLY_BEAN_MR1_4_2){ ++ return cubeb_get_output_latency_from_jni(ol->from_jni); ++ } ++ ++ return cubeb_get_output_latency_from_media_library(ol->from_lib); ++} ++ ++#endif // _CUBEB_OUTPUT_LATENCY_H_ +diff --git a/media/libcubeb/src/android/cubeb_media_library.h b/media/libcubeb/src/android/cubeb_media_library.h +new file mode 100644 +index 000000000..ab21b779d +--- /dev/null ++++ b/media/libcubeb/src/android/cubeb_media_library.h +@@ -0,0 +1,62 @@ ++#ifndef _CUBEB_MEDIA_LIBRARY_H_ ++#define _CUBEB_MEDIA_LIBRARY_H_ ++ ++struct media_lib { ++ void * libmedia; ++ int32_t (* get_output_latency)(uint32_t * latency, int stream_type); ++}; ++ ++typedef struct media_lib media_lib; ++ ++media_lib * ++cubeb_load_media_library() ++{ ++ media_lib ml = {0}; ++ ml.libmedia = dlopen("libmedia.so", RTLD_LAZY); ++ if (!ml.libmedia) { ++ return NULL; ++ } ++ ++ // Get the latency, in ms, from AudioFlinger. First, try the most recent signature. ++ // status_t AudioSystem::getOutputLatency(uint32_t* latency, audio_stream_type_t streamType) ++ ml.get_output_latency = ++ dlsym(ml.libmedia, "_ZN7android11AudioSystem16getOutputLatencyEPj19audio_stream_type_t"); ++ if (!ml.get_output_latency) { ++ // In case of failure, try the signature from legacy version. ++ // status_t AudioSystem::getOutputLatency(uint32_t* latency, int streamType) ++ ml.get_output_latency = ++ dlsym(ml.libmedia, "_ZN7android11AudioSystem16getOutputLatencyEPji"); ++ if (!ml.get_output_latency) { ++ return NULL; ++ } ++ } ++ ++ media_lib * rv = NULL; ++ rv = calloc(1, sizeof(media_lib)); ++ assert(rv); ++ *rv = ml; ++ return rv; ++} ++ ++void ++cubeb_close_media_library(media_lib * ml) ++{ ++ dlclose(ml->libmedia); ++ ml->libmedia = NULL; ++ ml->get_output_latency = NULL; ++ free(ml); ++} ++ ++uint32_t ++cubeb_get_output_latency_from_media_library(media_lib * ml) ++{ ++ uint32_t latency = 0; ++ const int audio_stream_type_music = 3; ++ int32_t r = ml->get_output_latency(&latency, audio_stream_type_music); ++ if (r) { ++ return 0; ++ } ++ return latency; ++} ++ ++#endif // _CUBEB_MEDIA_LIBRARY_H_ +diff --git a/media/libcubeb/src/android/sles_definitions.h b/media/libcubeb/src/android/sles_definitions.h +index 1b1ace567..06d2e8d49 100644 +--- a/media/libcubeb/src/android/sles_definitions.h ++++ b/media/libcubeb/src/android/sles_definitions.h +@@ -43,10 +43,9 @@ + #define SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION ((SLuint32) 0x00000003) + /** uses the main microphone tuned for audio communications */ + #define SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION ((SLuint32) 0x00000004) ++/** uses the main microphone unprocessed */ ++#define SL_ANDROID_RECORDING_PRESET_UNPROCESSED ((SLuint32) 0x00000005) + +-/** Audio recording get session ID (read only) */ +-/** Audio recording get session ID key */ +-#define SL_ANDROID_KEY_RECORDING_SESSION_ID ((const SLchar*) "androidRecordingSessionId") + + /*---------------------------------------------------------------------------*/ + /* Android AudioPlayer configuration */ +@@ -69,9 +68,35 @@ + #define SL_ANDROID_STREAM_ALARM ((SLint32) 0x00000004) + /* same as android.media.AudioManager.STREAM_NOTIFICATION */ + #define SL_ANDROID_STREAM_NOTIFICATION ((SLint32) 0x00000005) +-/* same as android.media.AudioManager.STREAM_BLUETOOTH_SCO */ +-#define SL_ANDROID_STREAM_BLUETOOTH_SCO ((SLint32) 0x00000006) +-/* same as android.media.AudioManager.STREAM_SYSTEM_ENFORCED */ +-#define SL_ANDROID_STREAM_SYSTEM_ENFORCED ((SLint32) 0x00000007) ++ ++ ++/*---------------------------------------------------------------------------*/ ++/* Android AudioPlayer and AudioRecorder configuration */ ++/*---------------------------------------------------------------------------*/ ++ ++/** Audio Performance mode. ++ * Performance mode tells the framework how to configure the audio path ++ * for a player or recorder according to application performance and ++ * functional requirements. ++ * It affects the output or input latency based on acceptable tradeoffs on ++ * battery drain and use of pre or post processing effects. ++ * Performance mode should be set before realizing the object and should be ++ * read after realizing the object to check if the requested mode could be ++ * granted or not. ++ */ ++/** Audio Performance mode key */ ++#define SL_ANDROID_KEY_PERFORMANCE_MODE ((const SLchar*) "androidPerformanceMode") ++ ++/** Audio performance values */ ++/* No specific performance requirement. Allows HW and SW pre/post processing. */ ++#define SL_ANDROID_PERFORMANCE_NONE ((SLuint32) 0x00000000) ++/* Priority given to latency. No HW or software pre/post processing. ++ * This is the default if no performance mode is specified. */ ++#define SL_ANDROID_PERFORMANCE_LATENCY ((SLuint32) 0x00000001) ++/* Priority given to latency while still allowing HW pre and post processing. */ ++#define SL_ANDROID_PERFORMANCE_LATENCY_EFFECTS ((SLuint32) 0x00000002) ++/* Priority given to power saving if latency is not a concern. ++ * Allows HW and SW pre/post processing. */ ++#define SL_ANDROID_PERFORMANCE_POWER_SAVING ((SLuint32) 0x00000003) + + #endif /* OPENSL_ES_ANDROIDCONFIGURATION_H_ */ +diff --git a/media/libcubeb/src/cubeb-internal.h b/media/libcubeb/src/cubeb-internal.h +index dfcc186c5..312a9ea3a 100644 +--- a/media/libcubeb/src/cubeb-internal.h ++++ b/media/libcubeb/src/cubeb-internal.h +@@ -9,6 +9,7 @@ + + #include "cubeb/cubeb.h" + #include "cubeb_log.h" ++#include "cubeb_assert.h" + #include + #include + +@@ -28,9 +29,6 @@ + extern "C" { + #endif + +-/* Crash the caller. */ +-void cubeb_crash() CLANG_ANALYZER_NORETURN; +- + #if defined(__cplusplus) + } + #endif +@@ -44,7 +42,9 @@ struct cubeb_ops { + uint32_t * latency_ms); + int (* get_preferred_sample_rate)(cubeb * context, uint32_t * rate); + int (* enumerate_devices)(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection); ++ cubeb_device_collection * collection); ++ int (* device_collection_destroy)(cubeb * context, ++ cubeb_device_collection * collection); + void (* destroy)(cubeb * context); + int (* stream_init)(cubeb * context, + cubeb_stream ** stream, +@@ -60,10 +60,10 @@ struct cubeb_ops { + void (* stream_destroy)(cubeb_stream * stream); + int (* stream_start)(cubeb_stream * stream); + int (* stream_stop)(cubeb_stream * stream); ++ int (* stream_reset_default_device)(cubeb_stream * stream); + int (* stream_get_position)(cubeb_stream * stream, uint64_t * position); + int (* stream_get_latency)(cubeb_stream * stream, uint32_t * latency); + int (* stream_set_volume)(cubeb_stream * stream, float volumes); +- int (* stream_set_panning)(cubeb_stream * stream, float panning); + int (* stream_get_current_device)(cubeb_stream * stream, + cubeb_device ** const device); + int (* stream_device_destroy)(cubeb_stream * stream, +@@ -76,11 +76,4 @@ struct cubeb_ops { + void * user_ptr); + }; + +-#define XASSERT(expr) do { \ +- if (!(expr)) { \ +- fprintf(stderr, "%s:%d - fatal error: %s\n", __FILE__, __LINE__, #expr); \ +- cubeb_crash(); \ +- } \ +- } while (0) +- + #endif /* CUBEB_INTERNAL_0eb56756_4e20_4404_a76d_42bf88cd15a5 */ +diff --git a/media/libcubeb/src/cubeb-jni-instances.h b/media/libcubeb/src/cubeb-jni-instances.h +new file mode 100644 +index 000000000..19c5c29da +--- /dev/null ++++ b/media/libcubeb/src/cubeb-jni-instances.h +@@ -0,0 +1,34 @@ ++#ifndef _CUBEB_JNI_INSTANCES_H_ ++#define _CUBEB_JNI_INSTANCES_H_ ++ ++#include "GeneratedJNIWrappers.h" ++#include "mozilla/jni/Utils.h" ++ ++/* ++ * The methods in this file offer a way to pass in the required ++ * JNI instances in the cubeb library. By default they return NULL. ++ * In this case part of the cubeb API that depends on JNI ++ * will return CUBEB_ERROR_NOT_SUPPORTED. Currently only one ++ * method depends on that: ++ * ++ * cubeb_stream_get_position() ++ * ++ * Users that want to use that cubeb API method must "override" ++ * the methods bellow to return a valid instance of JavaVM ++ * and application's Context object. ++ * */ ++ ++JNIEnv * ++cubeb_get_jni_env_for_thread() ++{ ++ return mozilla::jni::GetEnvForThread(); ++} ++ ++jobject ++cubeb_jni_get_context_instance() ++{ ++ auto context = mozilla::java::GeckoAppShell::GetApplicationContext(); ++ return context.Forget(); ++} ++ ++#endif //_CUBEB_JNI_INSTANCES_H_ +diff --git a/media/libcubeb/src/cubeb-jni.cpp b/media/libcubeb/src/cubeb-jni.cpp +new file mode 100644 +index 000000000..a5066967a +--- /dev/null ++++ b/media/libcubeb/src/cubeb-jni.cpp +@@ -0,0 +1,68 @@ ++#include "jni.h" ++#include ++#include "cubeb-jni-instances.h" ++ ++#define AUDIO_STREAM_TYPE_MUSIC 3 ++ ++struct cubeb_jni { ++ jobject s_audio_manager_obj = nullptr; ++ jclass s_audio_manager_class = nullptr; ++ jmethodID s_get_output_latency_id = nullptr; ++}; ++ ++extern "C" ++cubeb_jni * ++cubeb_jni_init() ++{ ++ jobject ctx_obj = cubeb_jni_get_context_instance(); ++ JNIEnv * jni_env = cubeb_get_jni_env_for_thread(); ++ if (!jni_env || !ctx_obj) { ++ return nullptr; ++ } ++ ++ cubeb_jni * cubeb_jni_ptr = new cubeb_jni; ++ assert(cubeb_jni_ptr); ++ ++ // Find the audio manager object and make it global to call it from another method ++ jclass context_class = jni_env->FindClass("android/content/Context"); ++ jfieldID audio_service_field = jni_env->GetStaticFieldID(context_class, "AUDIO_SERVICE", "Ljava/lang/String;"); ++ jstring jstr = (jstring)jni_env->GetStaticObjectField(context_class, audio_service_field); ++ jmethodID get_system_service_id = jni_env->GetMethodID(context_class, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); ++ jobject audio_manager_obj = jni_env->CallObjectMethod(ctx_obj, get_system_service_id, jstr); ++ cubeb_jni_ptr->s_audio_manager_obj = reinterpret_cast(jni_env->NewGlobalRef(audio_manager_obj)); ++ ++ // Make the audio manager class a global reference in order to preserve method id ++ jclass audio_manager_class = jni_env->FindClass("android/media/AudioManager"); ++ cubeb_jni_ptr->s_audio_manager_class = reinterpret_cast(jni_env->NewGlobalRef(audio_manager_class)); ++ cubeb_jni_ptr->s_get_output_latency_id = jni_env->GetMethodID (audio_manager_class, "getOutputLatency", "(I)I"); ++ ++ jni_env->DeleteLocalRef(ctx_obj); ++ jni_env->DeleteLocalRef(context_class); ++ jni_env->DeleteLocalRef(jstr); ++ jni_env->DeleteLocalRef(audio_manager_obj); ++ jni_env->DeleteLocalRef(audio_manager_class); ++ ++ return cubeb_jni_ptr; ++} ++ ++extern "C" ++int cubeb_get_output_latency_from_jni(cubeb_jni * cubeb_jni_ptr) ++{ ++ assert(cubeb_jni_ptr); ++ JNIEnv * jni_env = cubeb_get_jni_env_for_thread(); ++ return jni_env->CallIntMethod(cubeb_jni_ptr->s_audio_manager_obj, cubeb_jni_ptr->s_get_output_latency_id, AUDIO_STREAM_TYPE_MUSIC); //param: AudioManager.STREAM_MUSIC ++} ++ ++extern "C" ++void cubeb_jni_destroy(cubeb_jni * cubeb_jni_ptr) ++{ ++ assert(cubeb_jni_ptr); ++ ++ JNIEnv * jni_env = cubeb_get_jni_env_for_thread(); ++ assert(jni_env); ++ ++ jni_env->DeleteGlobalRef(cubeb_jni_ptr->s_audio_manager_obj); ++ jni_env->DeleteGlobalRef(cubeb_jni_ptr->s_audio_manager_class); ++ ++ delete cubeb_jni_ptr; ++} +diff --git a/media/libcubeb/src/cubeb-jni.h b/media/libcubeb/src/cubeb-jni.h +new file mode 100644 +index 000000000..8c7ddb6ac +--- /dev/null ++++ b/media/libcubeb/src/cubeb-jni.h +@@ -0,0 +1,10 @@ ++#ifndef _CUBEB_JNI_H_ ++#define _CUBEB_JNI_H_ ++ ++typedef struct cubeb_jni cubeb_jni; ++ ++cubeb_jni * cubeb_jni_init(); ++int cubeb_get_output_latency_from_jni(cubeb_jni * cubeb_jni_ptr); ++void cubeb_jni_destroy(cubeb_jni * cubeb_jni_ptr); ++ ++#endif // _CUBEB_JNI_H_ +diff --git a/media/libcubeb/src/cubeb.c b/media/libcubeb/src/cubeb.c +index a239319a4..3ad39dee0 100644 +--- a/media/libcubeb/src/cubeb.c ++++ b/media/libcubeb/src/cubeb.c +@@ -8,20 +8,23 @@ + #include + #include + #include ++#include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + + #define NELEMS(x) ((int) (sizeof(x) / sizeof(x[0]))) + +-cubeb_log_level g_log_level; +-cubeb_log_callback g_log_callback; +- + struct cubeb { + struct cubeb_ops * ops; + }; + + struct cubeb_stream { ++ /* ++ * Note: All implementations of cubeb_stream must keep the following ++ * layout. ++ */ + struct cubeb * context; ++ void * user_ptr; + }; + + #if defined(USE_PULSE) +@@ -45,6 +48,9 @@ int wasapi_init(cubeb ** context, char const * context_name); + #if defined(USE_SNDIO) + int sndio_init(cubeb ** context, char const * context_name); + #endif ++#if defined(USE_SUN) ++int sun_init(cubeb ** context, char const * context_name); ++#endif + #if defined(USE_OPENSL) + int opensl_init(cubeb ** context, char const * context_name); + #endif +@@ -54,10 +60,6 @@ int audiotrack_init(cubeb ** context, char const * context_name); + #if defined(USE_KAI) + int kai_init(cubeb ** context, char const * context_name); + #endif +-#if defined(USE_SUN) +-int sunaudio_init(cubeb ** context, char const * context_name); +-#endif +- + + static int + validate_stream_params(cubeb_stream_params * input_stream_params, +@@ -66,7 +68,7 @@ validate_stream_params(cubeb_stream_params * input_stream_params, + XASSERT(input_stream_params || output_stream_params); + if (output_stream_params) { + if (output_stream_params->rate < 1000 || output_stream_params->rate > 192000 || +- output_stream_params->channels < 1 || output_stream_params->channels > 8) { ++ output_stream_params->channels < 1 || output_stream_params->channels > UINT8_MAX) { + return CUBEB_ERROR_INVALID_FORMAT; + } + } +@@ -99,8 +101,6 @@ validate_stream_params(cubeb_stream_params * input_stream_params, + return CUBEB_ERROR_INVALID_FORMAT; + } + +- +- + static int + validate_latency(int latency) + { +@@ -111,15 +111,75 @@ validate_latency(int latency) + } + + int +-cubeb_init(cubeb ** context, char const * context_name) ++cubeb_init(cubeb ** context, char const * context_name, char const * backend_name) + { +- int (* init[])(cubeb **, char const *) = { ++ int (* init_oneshot)(cubeb **, char const *) = NULL; ++ ++ if (backend_name != NULL) { ++ if (!strcmp(backend_name, "pulse")) { ++#if defined(USE_PULSE) ++ init_oneshot = pulse_init; ++#endif ++ } else if (!strcmp(backend_name, "jack")) { + #if defined(USE_JACK) +- jack_init, ++ init_oneshot = jack_init; ++#endif ++ } else if (!strcmp(backend_name, "alsa")) { ++#if defined(USE_ALSA) ++ init_oneshot = alsa_init; ++#endif ++ } else if (!strcmp(backend_name, "audiounit")) { ++#if defined(USE_AUDIOUNIT) ++ init_oneshot = audiounit_init; ++#endif ++ } else if (!strcmp(backend_name, "wasapi")) { ++#if defined(USE_WASAPI) ++ init_oneshot = wasapi_init; ++#endif ++ } else if (!strcmp(backend_name, "winmm")) { ++#if defined(USE_WINMM) ++ init_oneshot = winmm_init; ++#endif ++ } else if (!strcmp(backend_name, "sndio")) { ++#if defined(USE_SNDIO) ++ init_oneshot = sndio_init; ++#endif ++ } else if (!strcmp(backend_name, "sun")) { ++#if defined(USE_SUN) ++ init_oneshot = sun_init; + #endif ++ } else if (!strcmp(backend_name, "opensl")) { ++#if defined(USE_OPENSL) ++ init_oneshot = opensl_init; ++#endif ++ } else if (!strcmp(backend_name, "audiotrack")) { ++#if defined(USE_AUDIOTRACK) ++ init_oneshot = audiotrack_init; ++#endif ++ } else if (!strcmp(backend_name, "kai")) { ++#if defined(USE_KAI) ++ init_oneshot = kai_init; ++#endif ++ } else { ++ /* Already set */ ++ } ++ } ++ ++ int (* default_init[])(cubeb **, char const *) = { ++ /* ++ * init_oneshot must be at the top to allow user ++ * to override all other choices ++ */ ++ init_oneshot, + #if defined(USE_PULSE) + pulse_init, + #endif ++#if defined(USE_JACK) ++ jack_init, ++#endif ++#if defined(USE_SNDIO) ++ sndio_init, ++#endif + #if defined(USE_ALSA) + alsa_init, + #endif +@@ -132,8 +192,8 @@ cubeb_init(cubeb ** context, char const * context_name) + #if defined(USE_WINMM) + winmm_init, + #endif +-#if defined(USE_SNDIO) +- sndio_init, ++#if defined(USE_SUN) ++ sun_init, + #endif + #if defined(USE_OPENSL) + opensl_init, +@@ -143,9 +203,6 @@ cubeb_init(cubeb ** context, char const * context_name) + #endif + #if defined(USE_KAI) + kai_init, +-#endif +-#if defined(USE_SUN) +- sunaudio_init, + #endif + }; + int i; +@@ -154,10 +211,10 @@ cubeb_init(cubeb ** context, char const * context_name) + return CUBEB_ERROR_INVALID_PARAMETER; + } + +- for (i = 0; i < NELEMS(init); ++i) { +- if (init[i](context, context_name) == CUBEB_OK) { +- /* Assert that the minimal API is implemented. */ + #define OK(fn) assert((* context)->ops->fn) ++ for (i = 0; i < NELEMS(default_init); ++i) { ++ if (default_init[i] && default_init[i](context, context_name) == CUBEB_OK) { ++ /* Assert that the minimal API is implemented. */ + OK(get_backend_id); + OK(destroy); + OK(stream_init); +@@ -168,7 +225,6 @@ cubeb_init(cubeb ** context, char const * context_name) + return CUBEB_OK; + } + } +- + return CUBEB_ERROR; + } + +@@ -197,9 +253,9 @@ cubeb_get_max_channel_count(cubeb * context, uint32_t * max_channels) + } + + int +-cubeb_get_min_latency(cubeb * context, cubeb_stream_params params, uint32_t * latency_ms) ++cubeb_get_min_latency(cubeb * context, cubeb_stream_params * params, uint32_t * latency_ms) + { +- if (!context || !latency_ms) { ++ if (!context || !params || !latency_ms) { + return CUBEB_ERROR_INVALID_PARAMETER; + } + +@@ -207,7 +263,7 @@ cubeb_get_min_latency(cubeb * context, cubeb_stream_params params, uint32_t * la + return CUBEB_ERROR_NOT_SUPPORTED; + } + +- return context->ops->get_min_latency(context, params, latency_ms); ++ return context->ops->get_min_latency(context, *params, latency_ms); + } + + int +@@ -247,7 +303,7 @@ cubeb_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + { + int r; + +- if (!context || !stream) { ++ if (!context || !stream || !data_callback || !state_callback) { + return CUBEB_ERROR_INVALID_PARAMETER; + } + +@@ -256,15 +312,24 @@ cubeb_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + return r; + } + +- return context->ops->stream_init(context, stream, stream_name, +- input_device, +- input_stream_params, +- output_device, +- output_stream_params, +- latency, +- data_callback, +- state_callback, +- user_ptr); ++ r = context->ops->stream_init(context, stream, stream_name, ++ input_device, ++ input_stream_params, ++ output_device, ++ output_stream_params, ++ latency, ++ data_callback, ++ state_callback, ++ user_ptr); ++ ++ if (r == CUBEB_ERROR_INVALID_FORMAT) { ++ LOG("Invalid format, %p %p %d %d", ++ output_stream_params, input_stream_params, ++ output_stream_params && output_stream_params->format, ++ input_stream_params && input_stream_params->format); ++ } ++ ++ return r; + } + + void +@@ -297,6 +362,20 @@ cubeb_stream_stop(cubeb_stream * stream) + return stream->context->ops->stream_stop(stream); + } + ++int ++cubeb_stream_reset_default_device(cubeb_stream * stream) ++{ ++ if (!stream) { ++ return CUBEB_ERROR_INVALID_PARAMETER; ++ } ++ ++ if (!stream->context->ops->stream_reset_default_device) { ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ ++ return stream->context->ops->stream_reset_default_device(stream); ++} ++ + int + cubeb_stream_get_position(cubeb_stream * stream, uint64_t * position) + { +@@ -335,19 +414,6 @@ cubeb_stream_set_volume(cubeb_stream * stream, float volume) + return stream->context->ops->stream_set_volume(stream, volume); + } + +-int cubeb_stream_set_panning(cubeb_stream * stream, float panning) +-{ +- if (!stream || panning < -1.0 || panning > 1.0) { +- return CUBEB_ERROR_INVALID_PARAMETER; +- } +- +- if (!stream->context->ops->stream_set_panning) { +- return CUBEB_ERROR_NOT_SUPPORTED; +- } +- +- return stream->context->ops->stream_set_panning(stream, panning); +-} +- + int cubeb_stream_get_current_device(cubeb_stream * stream, + cubeb_device ** const device) + { +@@ -390,6 +456,15 @@ int cubeb_stream_register_device_changed_callback(cubeb_stream * stream, + return stream->context->ops->stream_register_device_changed_callback(stream, device_changed_callback); + } + ++void * cubeb_stream_user_ptr(cubeb_stream * stream) ++{ ++ if (!stream) { ++ return NULL; ++ } ++ ++ return stream->user_ptr; ++} ++ + static + void log_device(cubeb_device_info * device_info) + { +@@ -479,7 +554,7 @@ void log_device(cubeb_device_info * device_info) + + int cubeb_enumerate_devices(cubeb * context, + cubeb_device_type devtype, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { + int rv; + if ((devtype & (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT)) == 0) +@@ -491,42 +566,36 @@ int cubeb_enumerate_devices(cubeb * context, + + rv = context->ops->enumerate_devices(context, devtype, collection); + +- if (g_log_callback) { +- for (uint32_t i = 0; i < (*collection)->count; i++) { +- log_device((*collection)->device[i]); ++ if (g_cubeb_log_callback) { ++ for (size_t i = 0; i < collection->count; i++) { ++ log_device(&collection->device[i]); + } + } + + return rv; + } + +-int cubeb_device_collection_destroy(cubeb_device_collection * collection) ++int cubeb_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection) + { +- uint32_t i; ++ int r; + +- if (collection == NULL) ++ if (context == NULL || collection == NULL) + return CUBEB_ERROR_INVALID_PARAMETER; + +- for (i = 0; i < collection->count; i++) +- cubeb_device_info_destroy(collection->device[i]); ++ if (!context->ops->device_collection_destroy) ++ return CUBEB_ERROR_NOT_SUPPORTED; + +- free(collection); +- return CUBEB_OK; +-} ++ if (!collection->device) ++ return CUBEB_OK; + +-int cubeb_device_info_destroy(cubeb_device_info * info) +-{ +- if (info == NULL) { +- return CUBEB_ERROR_INVALID_PARAMETER; ++ r = context->ops->device_collection_destroy(context, collection); ++ if (r == CUBEB_OK) { ++ collection->device = NULL; ++ collection->count = 0; + } + +- free(info->device_id); +- free(info->friendly_name); +- free(info->group_id); +- free(info->vendor_name); +- +- free(info); +- return CUBEB_OK; ++ return r; + } + + int cubeb_register_device_collection_changed(cubeb * context, +@@ -555,20 +624,22 @@ int cubeb_set_log_callback(cubeb_log_level log_level, + return CUBEB_ERROR_INVALID_PARAMETER; + } + +- if (g_log_callback && log_callback) { ++ if (g_cubeb_log_callback && log_callback) { + return CUBEB_ERROR_NOT_SUPPORTED; + } + +- g_log_callback = log_callback; +- g_log_level = log_level; ++ g_cubeb_log_callback = log_callback; ++ g_cubeb_log_level = log_level; + +- return CUBEB_OK; +-} ++ // Logging a message here allows to initialize the asynchronous logger from a ++ // thread that is not the audio rendering thread, and especially to not ++ // initialize it the first time we find a verbose log, which is often in the ++ // audio rendering callback, that runs from the audio rendering thread, and ++ // that is high priority, and that we don't want to block. ++ if (log_level >= CUBEB_LOG_VERBOSE) { ++ ALOGV("Starting cubeb log"); ++ } + +-void +-cubeb_crash() +-{ +- *((volatile int *) NULL) = 0; +- abort(); ++ return CUBEB_OK; + } + +diff --git a/media/libcubeb/src/cubeb_alsa.c b/media/libcubeb/src/cubeb_alsa.c +index 72a6acfb1..a564fbfc6 100644 +--- a/media/libcubeb/src/cubeb_alsa.c ++++ b/media/libcubeb/src/cubeb_alsa.c +@@ -14,10 +14,58 @@ + #include + #include + #include ++#include + #include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + ++#ifdef DISABLE_LIBASOUND_DLOPEN ++#define WRAP(x) x ++#else ++#define WRAP(x) cubeb_##x ++#define LIBASOUND_API_VISIT(X) \ ++ X(snd_config) \ ++ X(snd_config_add) \ ++ X(snd_config_copy) \ ++ X(snd_config_delete) \ ++ X(snd_config_get_id) \ ++ X(snd_config_get_string) \ ++ X(snd_config_imake_integer) \ ++ X(snd_config_search) \ ++ X(snd_config_search_definition) \ ++ X(snd_lib_error_set_handler) \ ++ X(snd_pcm_avail_update) \ ++ X(snd_pcm_close) \ ++ X(snd_pcm_delay) \ ++ X(snd_pcm_drain) \ ++ X(snd_pcm_frames_to_bytes) \ ++ X(snd_pcm_get_params) \ ++ X(snd_pcm_hw_params_any) \ ++ X(snd_pcm_hw_params_get_channels_max) \ ++ X(snd_pcm_hw_params_get_rate) \ ++ X(snd_pcm_hw_params_set_rate_near) \ ++ X(snd_pcm_hw_params_sizeof) \ ++ X(snd_pcm_nonblock) \ ++ X(snd_pcm_open) \ ++ X(snd_pcm_open_lconf) \ ++ X(snd_pcm_pause) \ ++ X(snd_pcm_poll_descriptors) \ ++ X(snd_pcm_poll_descriptors_count) \ ++ X(snd_pcm_poll_descriptors_revents) \ ++ X(snd_pcm_readi) \ ++ X(snd_pcm_recover) \ ++ X(snd_pcm_set_params) \ ++ X(snd_pcm_start) \ ++ X(snd_pcm_state) \ ++ X(snd_pcm_writei) \ ++ ++#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x; ++LIBASOUND_API_VISIT(MAKE_TYPEDEF); ++#undef MAKE_TYPEDEF ++/* snd_pcm_hw_params_alloca is actually a macro */ ++#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof ++#endif ++ + #define CUBEB_STREAM_MAX 16 + #define CUBEB_WATCHDOG_MS 10000 + +@@ -36,6 +84,7 @@ static struct cubeb_ops const alsa_ops; + + struct cubeb { + struct cubeb_ops const * ops; ++ void * libasound; + + pthread_t thread; + +@@ -76,13 +125,15 @@ enum stream_state { + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + pthread_mutex_t mutex; + snd_pcm_t * pcm; + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; +- void * user_ptr; +- snd_pcm_uframes_t write_position; ++ snd_pcm_uframes_t stream_position; + snd_pcm_uframes_t last_position; + snd_pcm_uframes_t buffer_size; + cubeb_stream_params params; +@@ -107,6 +158,12 @@ struct cubeb_stream { + being logically active and playing. */ + struct timeval last_activity; + float volume; ++ ++ char * buffer; ++ snd_pcm_uframes_t bufframes; ++ snd_pcm_stream_t stream_type; ++ ++ struct cubeb_stream * other_stream; + }; + + static int +@@ -234,6 +291,14 @@ set_timeout(struct timeval * timeout, unsigned int ms) + timeout->tv_usec += (ms % 1000) * 1000; + } + ++static void ++stream_buffer_decrement(cubeb_stream * stm, long count) ++{ ++ char * bufremains = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, count); ++ memmove(stm->buffer, bufremains, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes - count)); ++ stm->bufframes -= count; ++} ++ + static void + alsa_set_stream_state(cubeb_stream * stm, enum stream_state state) + { +@@ -249,97 +314,173 @@ alsa_set_stream_state(cubeb_stream * stm, enum stream_state state) + } + + static enum stream_state +-alsa_refill_stream(cubeb_stream * stm) ++alsa_process_stream(cubeb_stream * stm) + { ++ unsigned short revents; + snd_pcm_sframes_t avail; +- long got; +- void * p; + int draining; + + draining = 0; + + pthread_mutex_lock(&stm->mutex); + +- avail = snd_pcm_avail_update(stm->pcm); +- if (avail < 0) { +- snd_pcm_recover(stm->pcm, avail, 1); +- avail = snd_pcm_avail_update(stm->pcm); +- } ++ /* Call _poll_descriptors_revents() even if we don't use it ++ to let underlying plugins clear null events. Otherwise poll() ++ may wake up again and again, producing unnecessary CPU usage. */ ++ WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); + +- /* Failed to recover from an xrun, this stream must be broken. */ +- if (avail < 0) { ++ avail = WRAP(snd_pcm_avail_update)(stm->pcm); ++ ++ /* Got null event? Bail and wait for another wakeup. */ ++ if (avail == 0) { + pthread_mutex_unlock(&stm->mutex); +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); +- return ERROR; ++ return RUNNING; + } + +- /* This should never happen. */ ++ /* This could happen if we were suspended with SIGSTOP/Ctrl+Z for a long time. */ + if ((unsigned int) avail > stm->buffer_size) { + avail = stm->buffer_size; + } + +- /* poll(2) claims this stream is active, so there should be some space +- available to write. If avail is still zero here, the stream must be in +- a funky state, bail and wait for another wakeup. */ +- if (avail == 0) { ++ /* Capture: Read available frames */ ++ if (stm->stream_type == SND_PCM_STREAM_CAPTURE && avail > 0) { ++ snd_pcm_sframes_t got; ++ ++ if (avail + stm->bufframes > stm->buffer_size) { ++ /* Buffer overflow. Skip and overwrite with new data. */ ++ stm->bufframes = 0; ++ // TODO: should it be marked as DRAINING? ++ } ++ ++ got = WRAP(snd_pcm_readi)(stm->pcm, stm->buffer+stm->bufframes, avail); ++ ++ if (got < 0) { ++ avail = got; // the error handler below will recover us ++ } else { ++ stm->bufframes += got; ++ stm->stream_position += got; ++ ++ gettimeofday(&stm->last_activity, NULL); ++ } ++ } ++ ++ /* Capture: Pass read frames to callback function */ ++ if (stm->stream_type == SND_PCM_STREAM_CAPTURE && stm->bufframes > 0 && ++ (!stm->other_stream || stm->other_stream->bufframes < stm->other_stream->buffer_size)) { ++ snd_pcm_sframes_t wrote = stm->bufframes; ++ struct cubeb_stream * mainstm = stm->other_stream ? stm->other_stream : stm; ++ void * other_buffer = stm->other_stream ? stm->other_stream->buffer + stm->other_stream->bufframes : NULL; ++ ++ /* Correct write size to the other stream available space */ ++ if (stm->other_stream && wrote > (snd_pcm_sframes_t) (stm->other_stream->buffer_size - stm->other_stream->bufframes)) { ++ wrote = stm->other_stream->buffer_size - stm->other_stream->bufframes; ++ } ++ + pthread_mutex_unlock(&stm->mutex); +- return RUNNING; ++ wrote = stm->data_callback(mainstm, stm->user_ptr, stm->buffer, other_buffer, wrote); ++ pthread_mutex_lock(&stm->mutex); ++ ++ if (wrote < 0) { ++ avail = wrote; // the error handler below will recover us ++ } else { ++ stream_buffer_decrement(stm, wrote); ++ ++ if (stm->other_stream) { ++ stm->other_stream->bufframes += wrote; ++ } ++ } + } + +- p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail)); +- assert(p); ++ /* Playback: Don't have enough data? Let's ask for more. */ ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && avail > (snd_pcm_sframes_t) stm->bufframes && ++ (!stm->other_stream || stm->other_stream->bufframes > 0)) { ++ long got = avail - stm->bufframes; ++ void * other_buffer = stm->other_stream ? stm->other_stream->buffer : NULL; ++ char * buftail = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes); ++ ++ /* Correct read size to the other stream available frames */ ++ if (stm->other_stream && got > (snd_pcm_sframes_t) stm->other_stream->bufframes) { ++ got = stm->other_stream->bufframes; ++ } + +- pthread_mutex_unlock(&stm->mutex); +- got = stm->data_callback(stm, stm->user_ptr, NULL, p, avail); +- pthread_mutex_lock(&stm->mutex); +- if (got < 0) { + pthread_mutex_unlock(&stm->mutex); +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); +- free(p); +- return ERROR; ++ got = stm->data_callback(stm, stm->user_ptr, other_buffer, buftail, got); ++ pthread_mutex_lock(&stm->mutex); ++ ++ if (got < 0) { ++ avail = got; // the error handler below will recover us ++ } else { ++ stm->bufframes += got; ++ ++ if (stm->other_stream) { ++ stream_buffer_decrement(stm->other_stream, got); ++ } ++ } + } +- if (got > 0) { ++ ++ /* Playback: Still don't have enough data? Add some silence. */ ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && avail > (snd_pcm_sframes_t) stm->bufframes) { ++ long drain_frames = avail - stm->bufframes; ++ double drain_time = (double) drain_frames / stm->params.rate; ++ ++ char * buftail = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes); ++ memset(buftail, 0, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, drain_frames)); ++ stm->bufframes = avail; ++ ++ /* Mark as draining, unless we're waiting for capture */ ++ if (!stm->other_stream || stm->other_stream->bufframes > 0) { ++ set_timeout(&stm->drain_timeout, drain_time * 1000); ++ ++ draining = 1; ++ } ++ } ++ ++ /* Playback: Have enough data and no errors. Let's write it out. */ ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && avail > 0) { + snd_pcm_sframes_t wrote; + + if (stm->params.format == CUBEB_SAMPLE_FLOAT32NE) { +- float * b = (float *) p; +- for (uint32_t i = 0; i < got * stm->params.channels; i++) { ++ float * b = (float *) stm->buffer; ++ for (uint32_t i = 0; i < avail * stm->params.channels; i++) { + b[i] *= stm->volume; + } + } else { +- short * b = (short *) p; +- for (uint32_t i = 0; i < got * stm->params.channels; i++) { ++ short * b = (short *) stm->buffer; ++ for (uint32_t i = 0; i < avail * stm->params.channels; i++) { + b[i] *= stm->volume; + } + } +- wrote = snd_pcm_writei(stm->pcm, p, got); ++ ++ wrote = WRAP(snd_pcm_writei)(stm->pcm, stm->buffer, avail); + if (wrote < 0) { +- snd_pcm_recover(stm->pcm, wrote, 1); +- wrote = snd_pcm_writei(stm->pcm, p, got); +- } +- if (wrote < 0 || wrote != got) { +- /* Recovery failed, somehow. */ +- pthread_mutex_unlock(&stm->mutex); +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); +- return ERROR; ++ avail = wrote; // the error handler below will recover us ++ } else { ++ stream_buffer_decrement(stm, wrote); ++ ++ stm->stream_position += wrote; ++ gettimeofday(&stm->last_activity, NULL); + } +- stm->write_position += wrote; +- gettimeofday(&stm->last_activity, NULL); + } +- if (got != avail) { +- long buffer_fill = stm->buffer_size - (avail - got); +- double buffer_time = (double) buffer_fill / stm->params.rate; + +- /* Fill the remaining buffer with silence to guarantee one full period +- has been written. */ +- snd_pcm_writei(stm->pcm, (char *) p + got, avail - got); ++ /* Got some error? Let's try to recover the stream. */ ++ if (avail < 0) { ++ avail = WRAP(snd_pcm_recover)(stm->pcm, avail, 0); + +- set_timeout(&stm->drain_timeout, buffer_time * 1000); ++ /* Capture pcm must be started after initial setup/recover */ ++ if (avail >= 0 && ++ stm->stream_type == SND_PCM_STREAM_CAPTURE && ++ WRAP(snd_pcm_state)(stm->pcm) == SND_PCM_STATE_PREPARED) { ++ avail = WRAP(snd_pcm_start)(stm->pcm); ++ } ++ } + +- draining = 1; ++ /* Failed to recover, this stream must be broken. */ ++ if (avail < 0) { ++ pthread_mutex_unlock(&stm->mutex); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ return ERROR; + } + +- free(p); + pthread_mutex_unlock(&stm->mutex); + return draining ? DRAINING : RUNNING; + } +@@ -395,7 +536,7 @@ alsa_run(cubeb * ctx) + if (stm && stm->state == RUNNING && stm->fds && any_revents(stm->fds, stm->nfds)) { + alsa_set_stream_state(stm, PROCESSING); + pthread_mutex_unlock(&ctx->mutex); +- state = alsa_refill_stream(stm); ++ state = alsa_process_stream(stm); + pthread_mutex_lock(&ctx->mutex); + alsa_set_stream_state(stm, state); + } +@@ -445,26 +586,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) + + slave_def = NULL; + +- r = snd_config_search(root_pcm, "slave", &slave_pcm); ++ r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm); + if (r < 0) { + return NULL; + } + +- r = snd_config_get_string(slave_pcm, &string); ++ r = WRAP(snd_config_get_string)(slave_pcm, &string); + if (r >= 0) { +- r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def); ++ r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def); + if (r < 0) { + return NULL; + } + } + + do { +- r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm); ++ r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm); + if (r < 0) { + break; + } + +- r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string); ++ r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string); + if (r < 0) { + break; + } +@@ -473,7 +614,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) + if (r < 0 || r > (int) sizeof(node_name)) { + break; + } +- r = snd_config_search(lconf, node_name, &pcm); ++ r = WRAP(snd_config_search)(lconf, node_name, &pcm); + if (r < 0) { + break; + } +@@ -482,7 +623,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) + } while (0); + + if (slave_def) { +- snd_config_delete(slave_def); ++ WRAP(snd_config_delete)(slave_def); + } + + return NULL; +@@ -505,22 +646,22 @@ init_local_config_with_workaround(char const * pcm_name) + + lconf = NULL; + +- if (snd_config == NULL) { ++ if (*WRAP(snd_config) == NULL) { + return NULL; + } + +- r = snd_config_copy(&lconf, snd_config); ++ r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config)); + if (r < 0) { + return NULL; + } + + do { +- r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node); ++ r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node); + if (r < 0) { + break; + } + +- r = snd_config_get_id(pcm_node, &string); ++ r = WRAP(snd_config_get_id)(pcm_node, &string); + if (r < 0) { + break; + } +@@ -529,7 +670,7 @@ init_local_config_with_workaround(char const * pcm_name) + if (r < 0 || r > (int) sizeof(node_name)) { + break; + } +- r = snd_config_search(lconf, node_name, &pcm_node); ++ r = WRAP(snd_config_search)(lconf, node_name, &pcm_node); + if (r < 0) { + break; + } +@@ -540,12 +681,12 @@ init_local_config_with_workaround(char const * pcm_name) + } + + /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */ +- r = snd_config_search(pcm_node, "type", &node); ++ r = WRAP(snd_config_search)(pcm_node, "type", &node); + if (r < 0) { + break; + } + +- r = snd_config_get_string(node, &string); ++ r = WRAP(snd_config_get_string)(node, &string); + if (r < 0) { + break; + } +@@ -556,18 +697,18 @@ init_local_config_with_workaround(char const * pcm_name) + + /* Don't clobber an explicit existing handle_underrun value, set it only + if it doesn't already exist. */ +- r = snd_config_search(pcm_node, "handle_underrun", &node); ++ r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node); + if (r != -ENOENT) { + break; + } + + /* Disable pcm_pulse's asynchronous underrun handling. */ +- r = snd_config_imake_integer(&node, "handle_underrun", 0); ++ r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0); + if (r < 0) { + break; + } + +- r = snd_config_add(pcm_node, node); ++ r = WRAP(snd_config_add)(pcm_node, node); + if (r < 0) { + break; + } +@@ -575,21 +716,21 @@ init_local_config_with_workaround(char const * pcm_name) + return lconf; + } while (0); + +- snd_config_delete(lconf); ++ WRAP(snd_config_delete)(lconf); + + return NULL; + } + + static int +-alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * local_config) ++alsa_locked_pcm_open(snd_pcm_t ** pcm, char const * pcm_name, snd_pcm_stream_t stream, snd_config_t * local_config) + { + int r; + + pthread_mutex_lock(&cubeb_alsa_mutex); + if (local_config) { +- r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); ++ r = WRAP(snd_pcm_open_lconf)(pcm, pcm_name, stream, SND_PCM_NONBLOCK, local_config); + } else { +- r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); ++ r = WRAP(snd_pcm_open)(pcm, pcm_name, stream, SND_PCM_NONBLOCK); + } + pthread_mutex_unlock(&cubeb_alsa_mutex); + +@@ -602,7 +743,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) + int r; + + pthread_mutex_lock(&cubeb_alsa_mutex); +- r = snd_pcm_close(pcm); ++ r = WRAP(snd_pcm_close)(pcm); + pthread_mutex_unlock(&cubeb_alsa_mutex); + + return r; +@@ -658,6 +799,7 @@ silent_error_handler(char const * file, int line, char const * function, + alsa_init(cubeb ** context, char const * context_name) + { + (void)context_name; ++ void * libasound = NULL; + cubeb * ctx; + int r; + int i; +@@ -668,9 +810,30 @@ alsa_init(cubeb ** context, char const * context_name) + assert(context); + *context = NULL; + ++#ifndef DISABLE_LIBASOUND_DLOPEN ++ libasound = dlopen("libasound.so.2", RTLD_LAZY); ++ if (!libasound) { ++ libasound = dlopen("libasound.so", RTLD_LAZY); ++ if (!libasound) { ++ return CUBEB_ERROR; ++ } ++ } ++ ++#define LOAD(x) { \ ++ cubeb_##x = dlsym(libasound, #x); \ ++ if (!cubeb_##x) { \ ++ dlclose(libasound); \ ++ return CUBEB_ERROR; \ ++ } \ ++ } ++ ++ LIBASOUND_API_VISIT(LOAD); ++#undef LOAD ++#endif ++ + pthread_mutex_lock(&cubeb_alsa_mutex); + if (!cubeb_alsa_error_handler_set) { +- snd_lib_error_set_handler(silent_error_handler); ++ WRAP(snd_lib_error_set_handler)(silent_error_handler); + cubeb_alsa_error_handler_set = 1; + } + pthread_mutex_unlock(&cubeb_alsa_mutex); +@@ -679,6 +842,7 @@ alsa_init(cubeb ** context, char const * context_name) + assert(ctx); + + ctx->ops = &alsa_ops; ++ ctx->libasound = libasound; + + r = pthread_mutex_init(&ctx->mutex, NULL); + assert(r == 0); +@@ -712,7 +876,7 @@ alsa_init(cubeb ** context, char const * context_name) + + /* Open a dummy PCM to force the configuration space to be evaluated so that + init_local_config_with_workaround can find and modify the default node. */ +- r = alsa_locked_pcm_open(&dummy, SND_PCM_STREAM_PLAYBACK, NULL); ++ r = alsa_locked_pcm_open(&dummy, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, NULL); + if (r >= 0) { + alsa_locked_pcm_close(dummy); + } +@@ -722,12 +886,12 @@ alsa_init(cubeb ** context, char const * context_name) + pthread_mutex_unlock(&cubeb_alsa_mutex); + if (ctx->local_config) { + ctx->is_pa = 1; +- r = alsa_locked_pcm_open(&dummy, SND_PCM_STREAM_PLAYBACK, ctx->local_config); ++ r = alsa_locked_pcm_open(&dummy, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, ctx->local_config); + /* If we got a local_config, we found a PA PCM. If opening a PCM with that + config fails with EINVAL, the PA PCM is too old for this workaround. */ + if (r == -EINVAL) { + pthread_mutex_lock(&cubeb_alsa_mutex); +- snd_config_delete(ctx->local_config); ++ WRAP(snd_config_delete)(ctx->local_config); + pthread_mutex_unlock(&cubeb_alsa_mutex); + ctx->local_config = NULL; + } else if (r >= 0) { +@@ -769,24 +933,28 @@ alsa_destroy(cubeb * ctx) + + if (ctx->local_config) { + pthread_mutex_lock(&cubeb_alsa_mutex); +- snd_config_delete(ctx->local_config); ++ WRAP(snd_config_delete)(ctx->local_config); + pthread_mutex_unlock(&cubeb_alsa_mutex); + } + ++ if (ctx->libasound) { ++ dlclose(ctx->libasound); ++ } ++ + free(ctx); + } + + static void alsa_stream_destroy(cubeb_stream * stm); + + static int +-alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, +- cubeb_devid input_device, +- cubeb_stream_params * input_stream_params, +- cubeb_devid output_device, +- cubeb_stream_params * output_stream_params, +- unsigned int latency_frames, +- cubeb_data_callback data_callback, cubeb_state_callback state_callback, +- void * user_ptr) ++alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, ++ snd_pcm_stream_t stream_type, ++ cubeb_devid deviceid, ++ cubeb_stream_params * stream_params, ++ unsigned int latency_frames, ++ cubeb_data_callback data_callback, ++ cubeb_state_callback state_callback, ++ void * user_ptr) + { + (void)stream_name; + cubeb_stream * stm; +@@ -794,23 +962,17 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + snd_pcm_format_t format; + snd_pcm_uframes_t period_size; + int latency_us = 0; +- ++ char const * pcm_name = deviceid ? (char const *) deviceid : CUBEB_ALSA_PCM_NAME; + + assert(ctx && stream); + +- if (input_stream_params) { +- /* Capture support not yet implemented. */ +- return CUBEB_ERROR_NOT_SUPPORTED; +- } ++ *stream = NULL; + +- if (input_device || output_device) { +- /* Device selection not yet implemented. */ +- return CUBEB_ERROR_DEVICE_UNAVAILABLE; ++ if (stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ return CUBEB_ERROR_NOT_SUPPORTED; + } + +- *stream = NULL; +- +- switch (output_stream_params->format) { ++ switch (stream_params->format) { + case CUBEB_SAMPLE_S16LE: + format = SND_PCM_FORMAT_S16_LE; + break; +@@ -842,20 +1004,27 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + stm->data_callback = data_callback; + stm->state_callback = state_callback; + stm->user_ptr = user_ptr; +- stm->params = *output_stream_params; ++ stm->params = *stream_params; + stm->state = INACTIVE; + stm->volume = 1.0; ++ stm->buffer = NULL; ++ stm->bufframes = 0; ++ stm->stream_type = stream_type; ++ stm->other_stream = NULL; + + r = pthread_mutex_init(&stm->mutex, NULL); + assert(r == 0); + +- r = alsa_locked_pcm_open(&stm->pcm, SND_PCM_STREAM_PLAYBACK, ctx->local_config); ++ r = pthread_cond_init(&stm->cond, NULL); ++ assert(r == 0); ++ ++ r = alsa_locked_pcm_open(&stm->pcm, pcm_name, stm->stream_type, ctx->local_config); + if (r < 0) { + alsa_stream_destroy(stm); + return CUBEB_ERROR; + } + +- r = snd_pcm_nonblock(stm->pcm, 1); ++ r = WRAP(snd_pcm_nonblock)(stm->pcm, 1); + assert(r == 0); + + latency_us = latency_frames * 1e6 / stm->params.rate; +@@ -868,7 +1037,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + latency_us = latency_us < min_latency ? min_latency: latency_us; + } + +- r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, ++ r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, + stm->params.channels, stm->params.rate, 1, + latency_us); + if (r < 0) { +@@ -876,20 +1045,22 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + return CUBEB_ERROR_INVALID_FORMAT; + } + +- r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &period_size); ++ r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &period_size); + assert(r == 0); + +- stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm); ++ /* Double internal buffer size to have enough space when waiting for the other side of duplex connection */ ++ stm->buffer_size *= 2; ++ stm->buffer = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->buffer_size)); ++ assert(stm->buffer); ++ ++ stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm); + assert(stm->nfds > 0); + + stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd)); + assert(stm->saved_fds); +- r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds); ++ r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds); + assert((nfds_t) r == stm->nfds); + +- r = pthread_cond_init(&stm->cond, NULL); +- assert(r == 0); +- + if (alsa_register_stream(ctx, stm) != 0) { + alsa_stream_destroy(stm); + return CUBEB_ERROR; +@@ -900,6 +1071,45 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + return CUBEB_OK; + } + ++static int ++alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, ++ cubeb_devid input_device, ++ cubeb_stream_params * input_stream_params, ++ cubeb_devid output_device, ++ cubeb_stream_params * output_stream_params, ++ unsigned int latency_frames, ++ cubeb_data_callback data_callback, cubeb_state_callback state_callback, ++ void * user_ptr) ++{ ++ int result = CUBEB_OK; ++ cubeb_stream * instm = NULL, * outstm = NULL; ++ ++ if (result == CUBEB_OK && input_stream_params) { ++ result = alsa_stream_init_single(ctx, &instm, stream_name, SND_PCM_STREAM_CAPTURE, ++ input_device, input_stream_params, latency_frames, ++ data_callback, state_callback, user_ptr); ++ } ++ ++ if (result == CUBEB_OK && output_stream_params) { ++ result = alsa_stream_init_single(ctx, &outstm, stream_name, SND_PCM_STREAM_PLAYBACK, ++ output_device, output_stream_params, latency_frames, ++ data_callback, state_callback, user_ptr); ++ } ++ ++ if (result == CUBEB_OK && input_stream_params && output_stream_params) { ++ instm->other_stream = outstm; ++ outstm->other_stream = instm; ++ } ++ ++ if (result != CUBEB_OK && instm) { ++ alsa_stream_destroy(instm); ++ } ++ ++ *stream = outstm ? outstm : instm; ++ ++ return result; ++} ++ + static void + alsa_stream_destroy(cubeb_stream * stm) + { +@@ -912,10 +1122,15 @@ alsa_stream_destroy(cubeb_stream * stm) + + ctx = stm->context; + ++ if (stm->other_stream) { ++ stm->other_stream->other_stream = NULL; // to stop infinite recursion ++ alsa_stream_destroy(stm->other_stream); ++ } ++ + pthread_mutex_lock(&stm->mutex); + if (stm->pcm) { + if (stm->state == DRAINING) { +- snd_pcm_drain(stm->pcm); ++ WRAP(snd_pcm_drain)(stm->pcm); + } + alsa_locked_pcm_close(stm->pcm); + stm->pcm = NULL; +@@ -934,6 +1149,8 @@ alsa_stream_destroy(cubeb_stream * stm) + ctx->active_streams -= 1; + pthread_mutex_unlock(&ctx->mutex); + ++ free(stm->buffer); ++ + free(stm); + } + +@@ -957,12 +1174,14 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + return CUBEB_ERROR; + } + +- r = snd_pcm_hw_params_any(stm->pcm, hw_params); ++ assert(stm); ++ ++ r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); + if (r < 0) { + return CUBEB_ERROR; + } + +- r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); ++ r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); + if (r < 0) { + return CUBEB_ERROR; + } +@@ -983,34 +1202,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { + + /* get a pcm, disabling resampling, so we get a rate the + * hardware/dmix/pulse/etc. supports. */ +- r = snd_pcm_open(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, SND_PCM_NO_AUTO_RESAMPLE); ++ r = WRAP(snd_pcm_open)(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, SND_PCM_NO_AUTO_RESAMPLE); + if (r < 0) { + return CUBEB_ERROR; + } + +- r = snd_pcm_hw_params_any(pcm, hw_params); ++ r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); + if (r < 0) { +- snd_pcm_close(pcm); ++ WRAP(snd_pcm_close)(pcm); + return CUBEB_ERROR; + } + +- r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); ++ r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); + if (r >= 0) { + /* There is a default rate: use it. */ +- snd_pcm_close(pcm); ++ WRAP(snd_pcm_close)(pcm); + return CUBEB_OK; + } + + /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ + *rate = 44100; + +- r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); ++ r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); + if (r < 0) { +- snd_pcm_close(pcm); ++ WRAP(snd_pcm_close)(pcm); + return CUBEB_ERROR; + } + +- snd_pcm_close(pcm); ++ WRAP(snd_pcm_close)(pcm); + + return CUBEB_OK; + } +@@ -1034,8 +1253,19 @@ alsa_stream_start(cubeb_stream * stm) + assert(stm); + ctx = stm->context; + ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && stm->other_stream) { ++ int r = alsa_stream_start(stm->other_stream); ++ if (r != CUBEB_OK) ++ return r; ++ } ++ + pthread_mutex_lock(&stm->mutex); +- snd_pcm_pause(stm->pcm, 0); ++ /* Capture pcm must be started after initial setup/recover */ ++ if (stm->stream_type == SND_PCM_STREAM_CAPTURE && ++ WRAP(snd_pcm_state)(stm->pcm) == SND_PCM_STATE_PREPARED) { ++ WRAP(snd_pcm_start)(stm->pcm); ++ } ++ WRAP(snd_pcm_pause)(stm->pcm, 0); + gettimeofday(&stm->last_activity, NULL); + pthread_mutex_unlock(&stm->mutex); + +@@ -1059,6 +1289,12 @@ alsa_stream_stop(cubeb_stream * stm) + assert(stm); + ctx = stm->context; + ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && stm->other_stream) { ++ int r = alsa_stream_stop(stm->other_stream); ++ if (r != CUBEB_OK) ++ return r; ++ } ++ + pthread_mutex_lock(&ctx->mutex); + while (stm->state == PROCESSING) { + r = pthread_cond_wait(&stm->cond, &ctx->mutex); +@@ -1069,7 +1305,7 @@ alsa_stream_stop(cubeb_stream * stm) + pthread_mutex_unlock(&ctx->mutex); + + pthread_mutex_lock(&stm->mutex); +- snd_pcm_pause(stm->pcm, 1); ++ WRAP(snd_pcm_pause)(stm->pcm, 1); + pthread_mutex_unlock(&stm->mutex); + + return CUBEB_OK; +@@ -1085,8 +1321,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) + pthread_mutex_lock(&stm->mutex); + + delay = -1; +- if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || +- snd_pcm_delay(stm->pcm, &delay) != 0) { ++ if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || ++ WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { + *position = stm->last_position; + pthread_mutex_unlock(&stm->mutex); + return CUBEB_OK; +@@ -1095,8 +1331,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) + assert(delay >= 0); + + *position = 0; +- if (stm->write_position >= (snd_pcm_uframes_t) delay) { +- *position = stm->write_position - delay; ++ if (stm->stream_position >= (snd_pcm_uframes_t) delay) { ++ *position = stm->stream_position - delay; + } + + stm->last_position = *position; +@@ -1111,7 +1347,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) + snd_pcm_sframes_t delay; + /* This function returns the delay in frames until a frame written using + snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ +- if (snd_pcm_delay(stm->pcm, &delay)) { ++ if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { + return CUBEB_ERROR; + } + +@@ -1131,22 +1367,84 @@ alsa_stream_set_volume(cubeb_stream * stm, float volume) + return CUBEB_OK; + } + ++static int ++alsa_enumerate_devices(cubeb * context, cubeb_device_type type, ++ cubeb_device_collection * collection) ++{ ++ cubeb_device_info* device = NULL; ++ ++ if (!context) ++ return CUBEB_ERROR; ++ ++ uint32_t rate, max_channels; ++ int r; ++ ++ r = alsa_get_preferred_sample_rate(context, &rate); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR; ++ } ++ ++ r = alsa_get_max_channel_count(context, &max_channels); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR; ++ } ++ ++ char const * a_name = "default"; ++ device = (cubeb_device_info *) calloc(1, sizeof(cubeb_device_info)); ++ assert(device); ++ if (!device) ++ return CUBEB_ERROR; ++ ++ device->device_id = a_name; ++ device->devid = (cubeb_devid) device->device_id; ++ device->friendly_name = a_name; ++ device->group_id = a_name; ++ device->vendor_name = a_name; ++ device->type = type; ++ device->state = CUBEB_DEVICE_STATE_ENABLED; ++ device->preferred = CUBEB_DEVICE_PREF_ALL; ++ device->format = CUBEB_DEVICE_FMT_S16NE; ++ device->default_format = CUBEB_DEVICE_FMT_S16NE; ++ device->max_channels = max_channels; ++ device->min_rate = rate; ++ device->max_rate = rate; ++ device->default_rate = rate; ++ device->latency_lo = 0; ++ device->latency_hi = 0; ++ ++ collection->device = device; ++ collection->count = 1; ++ ++ return CUBEB_OK; ++} ++ ++static int ++alsa_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection) ++{ ++ assert(collection->count == 1); ++ (void) context; ++ free(collection->device); ++ return CUBEB_OK; ++} ++ + static struct cubeb_ops const alsa_ops = { + .init = alsa_init, + .get_backend_id = alsa_get_backend_id, + .get_max_channel_count = alsa_get_max_channel_count, + .get_min_latency = alsa_get_min_latency, + .get_preferred_sample_rate = alsa_get_preferred_sample_rate, +- .enumerate_devices = NULL, ++ .enumerate_devices = alsa_enumerate_devices, ++ .device_collection_destroy = alsa_device_collection_destroy, + .destroy = alsa_destroy, + .stream_init = alsa_stream_init, + .stream_destroy = alsa_stream_destroy, + .stream_start = alsa_stream_start, + .stream_stop = alsa_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = alsa_stream_get_position, + .stream_get_latency = alsa_stream_get_latency, + .stream_set_volume = alsa_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_array_queue.h b/media/libcubeb/src/cubeb_array_queue.h +new file mode 100644 +index 000000000..a8ea4cd17 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_array_queue.h +@@ -0,0 +1,97 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#ifndef CUBEB_ARRAY_QUEUE_H ++#define CUBEB_ARRAY_QUEUE_H ++ ++#include ++#include ++#include ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++typedef struct ++{ ++ void ** buf; ++ size_t num; ++ size_t writePos; ++ size_t readPos; ++ pthread_mutex_t mutex; ++} array_queue; ++ ++array_queue * array_queue_create(size_t num) ++{ ++ assert(num != 0); ++ array_queue * new_queue = (array_queue*)calloc(1, sizeof(array_queue)); ++ new_queue->buf = (void **)calloc(1, sizeof(void *) * num); ++ new_queue->readPos = 0; ++ new_queue->writePos = 0; ++ new_queue->num = num; ++ ++ pthread_mutex_init(&new_queue->mutex, NULL); ++ ++ return new_queue; ++} ++ ++void array_queue_destroy(array_queue * aq) ++{ ++ assert(aq); ++ ++ free(aq->buf); ++ pthread_mutex_destroy(&aq->mutex); ++ free(aq); ++} ++ ++int array_queue_push(array_queue * aq, void * item) ++{ ++ assert(item); ++ ++ pthread_mutex_lock(&aq->mutex); ++ int ret = -1; ++ if(aq->buf[aq->writePos % aq->num] == NULL) ++ { ++ aq->buf[aq->writePos % aq->num] = item; ++ aq->writePos = (aq->writePos + 1) % aq->num; ++ ret = 0; ++ } ++ // else queue is full ++ pthread_mutex_unlock(&aq->mutex); ++ return ret; ++} ++ ++void* array_queue_pop(array_queue * aq) ++{ ++ pthread_mutex_lock(&aq->mutex); ++ void * value = aq->buf[aq->readPos % aq->num]; ++ if(value) ++ { ++ aq->buf[aq->readPos % aq->num] = NULL; ++ aq->readPos = (aq->readPos + 1) % aq->num; ++ } ++ pthread_mutex_unlock(&aq->mutex); ++ return value; ++} ++ ++size_t array_queue_get_size(array_queue * aq) ++{ ++ pthread_mutex_lock(&aq->mutex); ++ ssize_t r = aq->writePos - aq->readPos; ++ if (r < 0) { ++ r = aq->num + r; ++ assert(r >= 0); ++ } ++ pthread_mutex_unlock(&aq->mutex); ++ return (size_t)r; ++} ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif //CUBE_ARRAY_QUEUE_H +diff --git a/media/libcubeb/src/cubeb_assert.h b/media/libcubeb/src/cubeb_assert.h +new file mode 100644 +index 000000000..00d48d8ec +--- /dev/null ++++ b/media/libcubeb/src/cubeb_assert.h +@@ -0,0 +1,17 @@ ++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* vim:set ts=2 sw=2 sts=2 et cindent: */ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef CUBEB_ASSERT ++#define CUBEB_ASSERT ++ ++#include ++#include ++#include ++ ++/* Forward fatal asserts to MOZ_RELEASE_ASSERT when built inside Gecko. */ ++#define XASSERT(expr) MOZ_RELEASE_ASSERT(expr) ++ ++#endif +diff --git a/media/libcubeb/src/cubeb_audiotrack.c b/media/libcubeb/src/cubeb_audiotrack.c +index fe2603405..22f1fe0bc 100644 +--- a/media/libcubeb/src/cubeb_audiotrack.c ++++ b/media/libcubeb/src/cubeb_audiotrack.c +@@ -13,7 +13,7 @@ + #include + #include + #include +-#include "android/log.h" ++#include + + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" +@@ -75,12 +75,14 @@ struct cubeb { + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + cubeb_stream_params params; + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; + void * instance; +- void * user_ptr; + /* Number of frames that have been passed to the AudioTrack callback */ + long unsigned written; + int draining; +@@ -145,9 +147,9 @@ audiotrack_get_min_frame_count(cubeb * ctx, cubeb_stream_params * params, int * + status_t status; + /* Recent Android have a getMinFrameCount method. */ + if (!audiotrack_version_is_gingerbread(ctx)) { +- status = ctx->klass.get_min_frame_count(min_frame_count, params->stream_type, params->rate); ++ status = ctx->klass.get_min_frame_count(min_frame_count, AUDIO_STREAM_TYPE_MUSIC, params->rate); + } else { +- status = ctx->klass.get_min_frame_count_gingerbread(min_frame_count, params->stream_type, params->rate); ++ status = ctx->klass.get_min_frame_count_gingerbread(min_frame_count, AUDIO_STREAM_TYPE_MUSIC, params->rate); + } + if (status != 0) { + ALOG("error getting the min frame count"); +@@ -325,7 +327,7 @@ audiotrack_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_ + channels = stm->params.channels == 2 ? AUDIO_CHANNEL_OUT_STEREO_ICS : AUDIO_CHANNEL_OUT_MONO_ICS; + } + +- ctx->klass.ctor(stm->instance, stm->params.stream_type, stm->params.rate, ++ ctx->klass.ctor(stm->instance, AUDIO_STREAM_TYPE_MUSIC, stm->params.rate, + AUDIO_FORMAT_PCM_16_BIT, channels, min_frame_count, 0, + audiotrack_refill, stm, 0, 0); + +@@ -422,15 +424,16 @@ static struct cubeb_ops const audiotrack_ops = { + .get_min_latency = audiotrack_get_min_latency, + .get_preferred_sample_rate = audiotrack_get_preferred_sample_rate, + .enumerate_devices = NULL, ++ .device_collection_destroy = NULL, + .destroy = audiotrack_destroy, + .stream_init = audiotrack_stream_init, + .stream_destroy = audiotrack_stream_destroy, + .stream_start = audiotrack_stream_start, + .stream_stop = audiotrack_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = audiotrack_stream_get_position, + .stream_get_latency = audiotrack_stream_get_latency, + .stream_set_volume = audiotrack_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_audiounit.cpp b/media/libcubeb/src/cubeb_audiounit.cpp +index 9483c2795..e0c8fc696 100644 +--- a/media/libcubeb/src/cubeb_audiounit.cpp ++++ b/media/libcubeb/src/cubeb_audiounit.cpp +@@ -22,200 +22,243 @@ + #include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" +-#include "cubeb_panner.h" ++#include "cubeb_mixer.h" + #if !TARGET_OS_IPHONE + #include "cubeb_osx_run_loop.h" + #endif + #include "cubeb_resampler.h" + #include "cubeb_ring_array.h" +-#include "cubeb_utils.h" + #include + #include ++#include ++#include ++#include ++#include + +-#if !defined(kCFCoreFoundationVersionNumber10_7) +-/* From CoreFoundation CFBase.h */ +-#define kCFCoreFoundationVersionNumber10_7 635.00 +-#endif +- +-#if !TARGET_OS_IPHONE && MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +-#define AudioComponent Component +-#define AudioComponentDescription ComponentDescription +-#define AudioComponentFindNext FindNextComponent +-#define AudioComponentInstanceNew OpenAComponent +-#define AudioComponentInstanceDispose CloseComponent +-#endif ++using namespace std; + + #if MAC_OS_X_VERSION_MIN_REQUIRED < 101000 +-typedef UInt32 AudioFormatFlags; ++typedef UInt32 AudioFormatFlags; + #endif + +-#define CUBEB_STREAM_MAX 8 +- + #define AU_OUT_BUS 0 + #define AU_IN_BUS 1 + +-#define PRINT_ERROR_CODE(str, r) do { \ +- LOG("System call failed: %s (rv: %d)", str, r); \ +-} while(0) +- + const char * DISPATCH_QUEUE_LABEL = "org.mozilla.cubeb"; ++const char * PRIVATE_AGGREGATE_DEVICE_NAME = "CubebAggregateDevice"; ++ ++#ifdef ALOGV ++#undef ALOGV ++#endif ++#define ALOGV(msg, ...) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{LOGV(msg, ##__VA_ARGS__);}) ++ ++#ifdef ALOG ++#undef ALOG ++#endif ++#define ALOG(msg, ...) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{LOG(msg, ##__VA_ARGS__);}) + + /* Testing empirically, some headsets report a minimal latency that is very + * low, but this does not work in practice. Lie and say the minimum is 256 + * frames. */ +-const uint32_t SAFE_MIN_LATENCY_FRAMES = 256; ++const uint32_t SAFE_MIN_LATENCY_FRAMES = 128; + const uint32_t SAFE_MAX_LATENCY_FRAMES = 512; + ++const AudioObjectPropertyAddress DEFAULT_INPUT_DEVICE_PROPERTY_ADDRESS = { ++ kAudioHardwarePropertyDefaultInputDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress DEFAULT_OUTPUT_DEVICE_PROPERTY_ADDRESS = { ++ kAudioHardwarePropertyDefaultOutputDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress DEVICE_IS_ALIVE_PROPERTY_ADDRESS = { ++ kAudioDevicePropertyDeviceIsAlive, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress DEVICES_PROPERTY_ADDRESS = { ++ kAudioHardwarePropertyDevices, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress INPUT_DATA_SOURCE_PROPERTY_ADDRESS = { ++ kAudioDevicePropertyDataSource, ++ kAudioDevicePropertyScopeInput, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress OUTPUT_DATA_SOURCE_PROPERTY_ADDRESS = { ++ kAudioDevicePropertyDataSource, ++ kAudioDevicePropertyScopeOutput, ++ kAudioObjectPropertyElementMaster ++}; ++ ++typedef uint32_t device_flags_value; ++ ++enum device_flags { ++ DEV_UNKNOWN = 0x00, /* Unknown */ ++ DEV_INPUT = 0x01, /* Record device like mic */ ++ DEV_OUTPUT = 0x02, /* Playback device like speakers */ ++ DEV_SYSTEM_DEFAULT = 0x04, /* System default device */ ++ DEV_SELECTED_DEFAULT = 0x08, /* User selected to use the system default device */ ++}; ++ + void audiounit_stream_stop_internal(cubeb_stream * stm); +-void audiounit_stream_start_internal(cubeb_stream * stm); ++static int audiounit_stream_start_internal(cubeb_stream * stm); + static void audiounit_close_stream(cubeb_stream *stm); + static int audiounit_setup_stream(cubeb_stream *stm); ++static vector ++audiounit_get_devices_of_type(cubeb_device_type devtype); ++static UInt32 audiounit_get_device_presentation_latency(AudioObjectID devid, AudioObjectPropertyScope scope); ++ ++#if !TARGET_OS_IPHONE ++static AudioObjectID audiounit_get_default_device_id(cubeb_device_type type); ++static int audiounit_uninstall_device_changed_callback(cubeb_stream * stm); ++static int audiounit_uninstall_system_changed_callback(cubeb_stream * stm); ++static void audiounit_reinit_stream_async(cubeb_stream * stm, device_flags_value flags); ++#endif + + extern cubeb_ops const audiounit_ops; + + struct cubeb { +- cubeb_ops const * ops; ++ cubeb_ops const * ops = &audiounit_ops; + owned_critical_section mutex; +- std::atomic active_streams; ++ int active_streams = 0; + uint32_t global_latency_frames = 0; +- int limit_streams; +- cubeb_device_collection_changed_callback collection_changed_callback; +- void * collection_changed_user_ptr; +- /* Differentiate input from output devices. */ +- cubeb_device_type collection_changed_devtype; +- uint32_t devtype_device_count; +- AudioObjectID * devtype_device_array; +- // The queue is asynchronously deallocated once all references to it are released ++ cubeb_device_collection_changed_callback input_collection_changed_callback = nullptr; ++ void * input_collection_changed_user_ptr = nullptr; ++ cubeb_device_collection_changed_callback output_collection_changed_callback = nullptr; ++ void * output_collection_changed_user_ptr = nullptr; ++ // Store list of devices to detect changes ++ vector input_device_array; ++ vector output_device_array; ++ // The queue should be released when it’s no longer needed. + dispatch_queue_t serial_queue = dispatch_queue_create(DISPATCH_QUEUE_LABEL, DISPATCH_QUEUE_SERIAL); ++ // Current used channel layout ++ atomic layout{ CUBEB_LAYOUT_UNDEFINED }; ++ uint32_t channels = 0; + }; + +-class auto_array_wrapper ++static unique_ptr ++make_sized_audio_channel_layout(size_t sz) + { +-public: +- explicit auto_array_wrapper(auto_array * ar) +- : float_ar(ar) +- , short_ar(nullptr) +- {assert((float_ar && !short_ar) || (!float_ar && short_ar));} +- +- explicit auto_array_wrapper(auto_array * ar) +- : float_ar(nullptr) +- , short_ar(ar) +- {assert((float_ar && !short_ar) || (!float_ar && short_ar));} +- +- ~auto_array_wrapper() { +- auto_lock l(lock); +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- delete float_ar; +- delete short_ar; +- } +- +- void push(void * elements, size_t length){ +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->push(static_cast(elements), length); +- return short_ar->push(static_cast(elements), length); +- } +- +- size_t length() { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->length(); +- return short_ar->length(); +- } +- +- void push_silence(size_t length) { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->push_silence(length); +- return short_ar->push_silence(length); +- } ++ assert(sz >= sizeof(AudioChannelLayout)); ++ AudioChannelLayout * acl = reinterpret_cast(calloc(1, sz)); ++ assert(acl); // Assert the allocation works. ++ return unique_ptr(acl, free); ++} + +- bool pop(void * elements, size_t length) { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->pop(static_cast(elements), length); +- return short_ar->pop(static_cast(elements), length); +- } ++enum class io_side { ++ INPUT, ++ OUTPUT, ++}; + +- void * data() { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->data(); +- return short_ar->data(); ++static char const * ++to_string(io_side side) ++{ ++ switch (side) { ++ case io_side::INPUT: ++ return "input"; ++ case io_side::OUTPUT: ++ return "output"; + } ++} + +- void clear() { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) { +- float_ar->clear(); +- } else { +- short_ar->clear(); +- } +- } ++struct device_info { ++ AudioDeviceID id = kAudioObjectUnknown; ++ device_flags_value flags = DEV_UNKNOWN; ++}; + +-private: +- auto_array * float_ar; +- auto_array * short_ar; +- owned_critical_section lock; ++struct property_listener { ++ AudioDeviceID device_id; ++ const AudioObjectPropertyAddress * property_address; ++ AudioObjectPropertyListenerProc callback; ++ cubeb_stream * stream; ++ ++ property_listener(AudioDeviceID id, ++ const AudioObjectPropertyAddress * address, ++ AudioObjectPropertyListenerProc proc, ++ cubeb_stream * stm) ++ : device_id(id) ++ , property_address(address) ++ , callback(proc) ++ , stream(stm) ++ {} + }; + + struct cubeb_stream { ++ explicit cubeb_stream(cubeb * context); ++ ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; +- cubeb_data_callback data_callback; +- cubeb_state_callback state_callback; +- cubeb_device_changed_callback device_changed_callback; ++ void * user_ptr = nullptr; ++ /**/ ++ ++ cubeb_data_callback data_callback = nullptr; ++ cubeb_state_callback state_callback = nullptr; ++ cubeb_device_changed_callback device_changed_callback = nullptr; ++ owned_critical_section device_changed_callback_lock; + /* Stream creation parameters */ +- cubeb_stream_params input_stream_params; +- cubeb_stream_params output_stream_params; +- cubeb_devid input_device; +- bool is_default_input; +- cubeb_devid output_device; +- /* User pointer of data_callback */ +- void * user_ptr; ++ cubeb_stream_params input_stream_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ cubeb_stream_params output_stream_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ device_info input_device; ++ device_info output_device; + /* Format descriptions */ + AudioStreamBasicDescription input_desc; + AudioStreamBasicDescription output_desc; + /* I/O AudioUnits */ +- AudioUnit input_unit; +- AudioUnit output_unit; ++ AudioUnit input_unit = nullptr; ++ AudioUnit output_unit = nullptr; + /* I/O device sample rate */ +- Float64 input_hw_rate; +- Float64 output_hw_rate; ++ Float64 input_hw_rate = 0; ++ Float64 output_hw_rate = 0; + /* Expected I/O thread interleave, + * calculated from I/O hw rate. */ +- int expected_output_callbacks_in_a_row; ++ int expected_output_callbacks_in_a_row = 0; + owned_critical_section mutex; +- /* Hold the input samples in every +- * input callback iteration */ +- auto_array_wrapper * input_linear_buffer; +- /* Frames on input buffer */ +- std::atomic input_buffer_frames; ++ // Hold the input samples in every input callback iteration. ++ // Only accessed on input/output callback thread and during initial configure. ++ unique_ptr input_linear_buffer; + /* Frame counters */ +- uint64_t frames_played; +- uint64_t frames_queued; +- std::atomic frames_read; +- std::atomic shutdown; +- std::atomic draining; ++ atomic frames_played{ 0 }; ++ uint64_t frames_queued = 0; ++ // How many frames got read from the input since the stream started (includes ++ // padded silence) ++ atomic frames_read{ 0 }; ++ // How many frames got written to the output device since the stream started ++ atomic frames_written{ 0 }; ++ atomic shutdown{ true }; ++ atomic draining{ false }; ++ atomic reinit_pending { false }; ++ atomic destroy_pending{ false }; + /* Latency requested by the user. */ +- uint32_t latency_frames; +- std::atomic current_latency_frames; +- uint64_t hw_latency_frames; +- std::atomic panning; +- cubeb_resampler * resampler; +- /* This is the number of output callback we got in a row. This is usually one, +- * but can be two when the input and output rate are different, and more when +- * a device has been plugged or unplugged, as there can be some time before +- * the device is ready. */ +- std::atomic output_callback_in_a_row; ++ uint32_t latency_frames = 0; ++ atomic current_latency_frames{ 0 }; ++ atomic total_output_latency_frames { 0 }; ++ unique_ptr resampler; + /* This is true if a device change callback is currently running. */ +- std::atomic switching_device; +- std::atomic buffer_size_change_state{ false }; ++ atomic switching_device{ false }; ++ atomic buffer_size_change_state{ false }; ++ AudioDeviceID aggregate_device_id = kAudioObjectUnknown; // the aggregate device id ++ AudioObjectID plugin_id = kAudioObjectUnknown; // used to create aggregate device ++ /* Mixer interface */ ++ unique_ptr mixer; ++ /* Buffer where remixing/resampling will occur when upmixing is required */ ++ /* Only accessed from callback thread */ ++ unique_ptr temp_buffer; ++ size_t temp_buffer_size = 0; // size in bytes. ++ /* Listeners indicating what system events are monitored. */ ++ unique_ptr default_input_listener; ++ unique_ptr default_output_listener; ++ unique_ptr input_alive_listener; ++ unique_ptr input_source_listener; ++ unique_ptr output_source_listener; + }; + + bool has_input(cubeb_stream * stm) +@@ -228,14 +271,106 @@ bool has_output(cubeb_stream * stm) + return stm->output_stream_params.rate != 0; + } + ++cubeb_channel ++channel_label_to_cubeb_channel(UInt32 label) ++{ ++ switch (label) { ++ case kAudioChannelLabel_Left: ++ return CHANNEL_FRONT_LEFT; ++ case kAudioChannelLabel_Right: ++ return CHANNEL_FRONT_RIGHT; ++ case kAudioChannelLabel_Center: ++ return CHANNEL_FRONT_CENTER; ++ case kAudioChannelLabel_LFEScreen: ++ return CHANNEL_LOW_FREQUENCY; ++ case kAudioChannelLabel_LeftSurround: ++ return CHANNEL_BACK_LEFT; ++ case kAudioChannelLabel_RightSurround: ++ return CHANNEL_BACK_RIGHT; ++ case kAudioChannelLabel_LeftCenter: ++ return CHANNEL_FRONT_LEFT_OF_CENTER; ++ case kAudioChannelLabel_RightCenter: ++ return CHANNEL_FRONT_RIGHT_OF_CENTER; ++ case kAudioChannelLabel_CenterSurround: ++ return CHANNEL_BACK_CENTER; ++ case kAudioChannelLabel_LeftSurroundDirect: ++ return CHANNEL_SIDE_LEFT; ++ case kAudioChannelLabel_RightSurroundDirect: ++ return CHANNEL_SIDE_RIGHT; ++ case kAudioChannelLabel_TopCenterSurround: ++ return CHANNEL_TOP_CENTER; ++ case kAudioChannelLabel_VerticalHeightLeft: ++ return CHANNEL_TOP_FRONT_LEFT; ++ case kAudioChannelLabel_VerticalHeightCenter: ++ return CHANNEL_TOP_FRONT_CENTER; ++ case kAudioChannelLabel_VerticalHeightRight: ++ return CHANNEL_TOP_FRONT_RIGHT; ++ case kAudioChannelLabel_TopBackLeft: ++ return CHANNEL_TOP_BACK_LEFT; ++ case kAudioChannelLabel_TopBackCenter: ++ return CHANNEL_TOP_BACK_CENTER; ++ case kAudioChannelLabel_TopBackRight: ++ return CHANNEL_TOP_BACK_RIGHT; ++ default: ++ return CHANNEL_UNKNOWN; ++ } ++} ++ ++AudioChannelLabel ++cubeb_channel_to_channel_label(cubeb_channel channel) ++{ ++ switch (channel) { ++ case CHANNEL_FRONT_LEFT: ++ return kAudioChannelLabel_Left; ++ case CHANNEL_FRONT_RIGHT: ++ return kAudioChannelLabel_Right; ++ case CHANNEL_FRONT_CENTER: ++ return kAudioChannelLabel_Center; ++ case CHANNEL_LOW_FREQUENCY: ++ return kAudioChannelLabel_LFEScreen; ++ case CHANNEL_BACK_LEFT: ++ return kAudioChannelLabel_LeftSurround; ++ case CHANNEL_BACK_RIGHT: ++ return kAudioChannelLabel_RightSurround; ++ case CHANNEL_FRONT_LEFT_OF_CENTER: ++ return kAudioChannelLabel_LeftCenter; ++ case CHANNEL_FRONT_RIGHT_OF_CENTER: ++ return kAudioChannelLabel_RightCenter; ++ case CHANNEL_BACK_CENTER: ++ return kAudioChannelLabel_CenterSurround; ++ case CHANNEL_SIDE_LEFT: ++ return kAudioChannelLabel_LeftSurroundDirect; ++ case CHANNEL_SIDE_RIGHT: ++ return kAudioChannelLabel_RightSurroundDirect; ++ case CHANNEL_TOP_CENTER: ++ return kAudioChannelLabel_TopCenterSurround; ++ case CHANNEL_TOP_FRONT_LEFT: ++ return kAudioChannelLabel_VerticalHeightLeft; ++ case CHANNEL_TOP_FRONT_CENTER: ++ return kAudioChannelLabel_VerticalHeightCenter; ++ case CHANNEL_TOP_FRONT_RIGHT: ++ return kAudioChannelLabel_VerticalHeightRight; ++ case CHANNEL_TOP_BACK_LEFT: ++ return kAudioChannelLabel_TopBackLeft; ++ case CHANNEL_TOP_BACK_CENTER: ++ return kAudioChannelLabel_TopBackCenter; ++ case CHANNEL_TOP_BACK_RIGHT: ++ return kAudioChannelLabel_TopBackRight; ++ default: ++ return kAudioChannelLabel_Unknown; ++ } ++} ++ + #if TARGET_OS_IPHONE + typedef UInt32 AudioDeviceID; + typedef UInt32 AudioObjectID; + + #define AudioGetCurrentHostTime mach_absolute_time + ++#endif ++ + uint64_t +-AudioConvertHostTimeToNanos(uint64_t host_time) ++ConvertHostTimeToNanos(uint64_t host_time) + { + static struct mach_timebase_info timebase_info; + static bool initialized = false; +@@ -251,27 +386,34 @@ AudioConvertHostTimeToNanos(uint64_t host_time) + } + return (uint64_t)answer; + } +-#endif + +-static int64_t +-audiotimestamp_to_latency(AudioTimeStamp const * tstamp, cubeb_stream * stream) ++static void ++audiounit_increment_active_streams(cubeb * ctx) + { +- if (!(tstamp->mFlags & kAudioTimeStampHostTimeValid)) { +- return 0; +- } ++ ctx->mutex.assert_current_thread_owns(); ++ ctx->active_streams += 1; ++} + +- uint64_t pres = AudioConvertHostTimeToNanos(tstamp->mHostTime); +- uint64_t now = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime()); ++static void ++audiounit_decrement_active_streams(cubeb * ctx) ++{ ++ ctx->mutex.assert_current_thread_owns(); ++ ctx->active_streams -= 1; ++} + +- return ((pres - now) * stream->output_desc.mSampleRate) / 1000000000LL; ++static int ++audiounit_active_streams(cubeb * ctx) ++{ ++ ctx->mutex.assert_current_thread_owns(); ++ return ctx->active_streams; + } + + static void +-audiounit_set_global_latency(cubeb_stream * stm, uint32_t latency_frames) ++audiounit_set_global_latency(cubeb * ctx, uint32_t latency_frames) + { +- stm->mutex.assert_current_thread_owns(); +- assert(stm->context->active_streams == 1); +- stm->context->global_latency_frames = latency_frames; ++ ctx->mutex.assert_current_thread_owns(); ++ assert(audiounit_active_streams(ctx) == 1); ++ ctx->global_latency_frames = latency_frames; + } + + static void +@@ -306,24 +448,38 @@ audiounit_render_input(cubeb_stream * stm, + &input_buffer_list); + + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitRender", r); +- return r; ++ LOG("AudioUnitRender rv=%d", r); ++ if (r != kAudioUnitErr_CannotDoInCurrentContext) { ++ return r; ++ } ++ if (stm->output_unit) { ++ // kAudioUnitErr_CannotDoInCurrentContext is returned when using a BT ++ // headset and the profile is changed from A2DP to HFP/HSP. The previous ++ // output device is no longer valid and must be reset. ++ audiounit_reinit_stream_async(stm, DEV_INPUT | DEV_OUTPUT); ++ } ++ // For now state that no error occurred and feed silence, stream will be ++ // resumed once reinit has completed. ++ ALOGV("(%p) input: reinit pending feeding silence instead", stm); ++ stm->input_linear_buffer->push_silence(input_frames * stm->input_desc.mChannelsPerFrame); ++ } else { ++ /* Copy input data in linear buffer. */ ++ stm->input_linear_buffer->push(input_buffer_list.mBuffers[0].mData, ++ input_frames * stm->input_desc.mChannelsPerFrame); + } + +- /* Copy input data in linear buffer. */ +- stm->input_linear_buffer->push(input_buffer_list.mBuffers[0].mData, +- input_frames * stm->input_desc.mChannelsPerFrame); +- +- LOGV("(%p) input: buffers %d, size %d, channels %d, frames %d.", +- stm, input_buffer_list.mNumberBuffers, +- input_buffer_list.mBuffers[0].mDataByteSize, +- input_buffer_list.mBuffers[0].mNumberChannels, +- input_frames); +- + /* Advance input frame counter. */ + assert(input_frames > 0); + stm->frames_read += input_frames; + ++ ALOGV("(%p) input: buffers %u, size %u, channels %u, rendered frames %d, total frames %lu.", ++ stm, ++ (unsigned int) input_buffer_list.mNumberBuffers, ++ (unsigned int) input_buffer_list.mBuffers[0].mDataByteSize, ++ (unsigned int) input_buffer_list.mBuffers[0].mNumberChannels, ++ (unsigned int) input_frames, ++ stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame); ++ + return noErr; + } + +@@ -336,26 +492,15 @@ audiounit_input_callback(void * user_ptr, + AudioBufferList * /* bufs */) + { + cubeb_stream * stm = static_cast(user_ptr); +- long outframes; + + assert(stm->input_unit != NULL); + assert(AU_IN_BUS == bus); + + if (stm->shutdown) { +- LOG("(%p) input shutdown", stm); ++ ALOG("(%p) input shutdown", stm); + return noErr; + } + +- // This happens when we're finally getting a new input callback after having +- // switched device, we can clear the input buffer now, only keeping the data +- // we just got. +- if (stm->output_callback_in_a_row > stm->expected_output_callbacks_in_a_row) { +- stm->input_linear_buffer->pop( +- nullptr, +- stm->input_linear_buffer->length() - +- input_frames * stm->input_stream_params.channels); +- } +- + OSStatus r = audiounit_render_input(stm, flags, tstamp, bus, input_frames); + if (r != noErr) { + return r; +@@ -363,7 +508,6 @@ audiounit_input_callback(void * user_ptr, + + // Full Duplex. We'll call data_callback in the AudioUnit output callback. + if (stm->output_unit != NULL) { +- stm->output_callback_in_a_row = 0; + return noErr; + } + +@@ -371,41 +515,59 @@ audiounit_input_callback(void * user_ptr, + Resampler will deliver input buffer in the correct rate. */ + assert(input_frames <= stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame); + long total_input_frames = stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame; +- outframes = cubeb_resampler_fill(stm->resampler, +- stm->input_linear_buffer->data(), +- &total_input_frames, +- NULL, +- 0); +- // Reset input buffer +- stm->input_linear_buffer->clear(); +- +- if (outframes < 0 || outframes != input_frames) { +- stm->shutdown = true; ++ long outframes = cubeb_resampler_fill(stm->resampler.get(), ++ stm->input_linear_buffer->data(), ++ &total_input_frames, ++ NULL, ++ 0); ++ if (outframes < total_input_frames) { ++ OSStatus r = AudioOutputUnitStop(stm->input_unit); ++ assert(r == 0); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); + return noErr; + } + ++ // Reset input buffer ++ stm->input_linear_buffer->clear(); ++ + return noErr; + } + +-static bool +-is_extra_input_needed(cubeb_stream * stm) ++static void ++audiounit_mix_output_buffer(cubeb_stream * stm, ++ size_t output_frames, ++ void * input_buffer, ++ size_t input_buffer_size, ++ void * output_buffer, ++ size_t output_buffer_size) ++{ ++ assert(input_buffer_size >= ++ cubeb_sample_size(stm->output_stream_params.format) * ++ stm->output_stream_params.channels * output_frames); ++ assert(output_buffer_size >= stm->output_desc.mBytesPerFrame * output_frames); ++ ++ int r = cubeb_mixer_mix(stm->mixer.get(), ++ output_frames, ++ input_buffer, ++ input_buffer_size, ++ output_buffer, ++ output_buffer_size); ++ if (r != 0) { ++ LOG("Remix error = %d", r); ++ } ++} ++ ++// Return how many input frames (sampled at input_hw_rate) are needed to provide ++// output_frames (sampled at output_stream_params.rate) ++static int64_t ++minimum_resampling_input_frames(cubeb_stream * stm, uint32_t output_frames) + { +- /* If the output callback came first and this is a duplex stream, we need to +- * fill in some additional silence in the resampler. +- * Otherwise, if we had more than expected callbacks in a row, or we're currently +- * switching, we add some silence as well to compensate for the fact that +- * we're lacking some input data. */ +- +- /* If resampling is taking place after every output callback +- * the input buffer expected to be empty. Any frame left over +- * from resampling is stored inside the resampler available to +- * be used in next iteration as needed. +- * BUT when noop_resampler is operating we have left over +- * frames since it does not store anything internally. */ +- return stm->frames_read == 0 || +- (stm->input_linear_buffer->length() == 0 && +- (stm->output_callback_in_a_row > stm->expected_output_callbacks_in_a_row || +- stm->switching_device)); ++ if (stm->input_hw_rate == stm->output_stream_params.rate) { ++ // Fast path. ++ return output_frames; ++ } ++ return ceil(stm->input_hw_rate * output_frames / ++ stm->output_stream_params.rate); + } + + static OSStatus +@@ -421,23 +583,32 @@ audiounit_output_callback(void * user_ptr, + + cubeb_stream * stm = static_cast(user_ptr); + +- stm->output_callback_in_a_row++; ++ uint64_t now = ConvertHostTimeToNanos(mach_absolute_time()); ++ uint64_t audio_output_time = ConvertHostTimeToNanos(tstamp->mHostTime); ++ uint64_t output_latency_ns = audio_output_time - now; ++ ++ const int ns2s = 1e9; ++ // The total output latency is the timestamp difference + the stream latency + ++ // the hardware latency. ++ stm->total_output_latency_frames = output_latency_ns * stm->output_hw_rate / ns2s + stm->current_latency_frames; + +- LOGV("(%p) output: buffers %d, size %d, channels %d, frames %d.", +- stm, outBufferList->mNumberBuffers, +- outBufferList->mBuffers[0].mDataByteSize, +- outBufferList->mBuffers[0].mNumberChannels, output_frames); ++ ALOGV("(%p) output: buffers %u, size %u, channels %u, frames %u, total input frames %lu.", ++ stm, ++ (unsigned int) outBufferList->mNumberBuffers, ++ (unsigned int) outBufferList->mBuffers[0].mDataByteSize, ++ (unsigned int) outBufferList->mBuffers[0].mNumberChannels, ++ (unsigned int) output_frames, ++ has_input(stm) ? stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame : 0); + +- long outframes = 0, input_frames = 0; ++ long input_frames = 0; + void * output_buffer = NULL, * input_buffer = NULL; + + if (stm->shutdown) { +- LOG("(%p) output shutdown.", stm); ++ ALOG("(%p) output shutdown.", stm); + audiounit_make_silent(&outBufferList->mBuffers[0]); + return noErr; + } + +- stm->current_latency_frames = audiotimestamp_to_latency(tstamp, stm); + if (stm->draining) { + OSStatus r = AudioOutputUnitStop(stm->output_unit); + assert(r == 0); +@@ -449,61 +620,98 @@ audiounit_output_callback(void * user_ptr, + audiounit_make_silent(&outBufferList->mBuffers[0]); + return noErr; + } ++ + /* Get output buffer. */ +- output_buffer = outBufferList->mBuffers[0].mData; ++ if (stm->mixer) { ++ // If remixing needs to occur, we can't directly work in our final ++ // destination buffer as data may be overwritten or too small to start with. ++ size_t size_needed = output_frames * stm->output_stream_params.channels * ++ cubeb_sample_size(stm->output_stream_params.format); ++ if (stm->temp_buffer_size < size_needed) { ++ stm->temp_buffer.reset(new uint8_t[size_needed]); ++ stm->temp_buffer_size = size_needed; ++ } ++ output_buffer = stm->temp_buffer.get(); ++ } else { ++ output_buffer = outBufferList->mBuffers[0].mData; ++ } ++ ++ stm->frames_written += output_frames; ++ + /* If Full duplex get also input buffer */ + if (stm->input_unit != NULL) { +- if (is_extra_input_needed(stm)) { +- uint32_t min_input_frames_required = ceilf(stm->input_hw_rate / stm->output_hw_rate * +- stm->input_buffer_frames); +- stm->input_linear_buffer->push_silence(min_input_frames_required * stm->input_desc.mChannelsPerFrame); +- LOG("(%p) %s pushed %u frames of input silence.", stm, stm->frames_read == 0 ? "Input hasn't started," : +- stm->switching_device ? "Device switching," : "Drop out,", min_input_frames_required); +- } +- // The input buffer ++ /* If the output callback came first and this is a duplex stream, we need to ++ * fill in some additional silence in the resampler. ++ * Otherwise, if we had more than expected callbacks in a row, or we're ++ * currently switching, we add some silence as well to compensate for the ++ * fact that we're lacking some input data. */ ++ uint32_t input_frames_needed = ++ minimum_resampling_input_frames(stm, stm->frames_written); ++ long missing_frames = input_frames_needed - stm->frames_read; ++ if (missing_frames > 0) { ++ stm->input_linear_buffer->push_silence(missing_frames * stm->input_desc.mChannelsPerFrame); ++ stm->frames_read = input_frames_needed; ++ ++ ALOG("(%p) %s pushed %ld frames of input silence.", stm, stm->frames_read == 0 ? "Input hasn't started," : ++ stm->switching_device ? "Device switching," : "Drop out,", missing_frames); ++ } + input_buffer = stm->input_linear_buffer->data(); +- // Number of input frames in the buffer ++ // Number of input frames in the buffer. It will change to actually used frames ++ // inside fill + input_frames = stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame; + } + + /* Call user callback through resampler. */ +- outframes = cubeb_resampler_fill(stm->resampler, +- input_buffer, +- input_buffer ? &input_frames : NULL, +- output_buffer, +- output_frames); ++ long outframes = cubeb_resampler_fill(stm->resampler.get(), ++ input_buffer, ++ input_buffer ? &input_frames : NULL, ++ output_buffer, ++ output_frames); + + if (input_buffer) { +- stm->input_linear_buffer->pop(nullptr, input_frames * stm->input_desc.mChannelsPerFrame); ++ // Pop from the buffer the frames used by the the resampler. ++ stm->input_linear_buffer->pop(input_frames * stm->input_desc.mChannelsPerFrame); + } + +- if (outframes < 0) { ++ if (outframes < 0 || outframes > output_frames) { + stm->shutdown = true; ++ OSStatus r = AudioOutputUnitStop(stm->output_unit); ++ assert(r == 0); ++ if (stm->input_unit) { ++ r = AudioOutputUnitStop(stm->input_unit); ++ assert(r == 0); ++ } ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ audiounit_make_silent(&outBufferList->mBuffers[0]); + return noErr; + } + +- size_t outbpf = stm->output_desc.mBytesPerFrame; +- stm->draining = outframes < output_frames; ++ stm->draining = (UInt32) outframes < output_frames; + stm->frames_played = stm->frames_queued; + stm->frames_queued += outframes; + +- AudioFormatFlags outaff = stm->output_desc.mFormatFlags; +- float panning = (stm->output_desc.mChannelsPerFrame == 2) ? +- stm->panning.load(std::memory_order_relaxed) : 0.0f; +- + /* Post process output samples. */ + if (stm->draining) { + /* Clear missing frames (silence) */ +- memset((uint8_t*)output_buffer + outframes * outbpf, 0, (output_frames - outframes) * outbpf); ++ size_t channels = stm->output_stream_params.channels; ++ size_t missing_samples = (output_frames - outframes) * channels; ++ size_t size_sample = cubeb_sample_size(stm->output_stream_params.format); ++ /* number of bytes that have been filled with valid audio by the callback. */ ++ size_t audio_byte_count = outframes * channels * size_sample; ++ PodZero((uint8_t*)output_buffer + audio_byte_count, ++ missing_samples * size_sample); + } +- /* Pan stereo. */ +- if (panning != 0.0f) { +- if (outaff & kAudioFormatFlagIsFloat) { +- cubeb_pan_stereo_buffer_float((float*)output_buffer, outframes, panning); +- } else if (outaff & kAudioFormatFlagIsSignedInteger) { +- cubeb_pan_stereo_buffer_int((short*)output_buffer, outframes, panning); +- } ++ ++ /* Mixing */ ++ if (stm->mixer) { ++ audiounit_mix_output_buffer(stm, ++ output_frames, ++ output_buffer, ++ stm->temp_buffer_size, ++ outBufferList->mBuffers[0].mData, ++ outBufferList->mBuffers[0].mDataByteSize); + } ++ + return noErr; + } + +@@ -511,25 +719,11 @@ extern "C" { + int + audiounit_init(cubeb ** context, char const * /* context_name */) + { +- cubeb * ctx; +- +- *context = NULL; +- +- ctx = (cubeb *)calloc(1, sizeof(cubeb)); +- assert(ctx); +- // Placement new to call the ctors of cubeb members. +- new (ctx) cubeb(); +- +- ctx->ops = &audiounit_ops; +- +- ctx->active_streams = 0; +- +- ctx->limit_streams = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber10_7; + #if !TARGET_OS_IPHONE + cubeb_set_coreaudio_notification_runloop(); + #endif + +- *context = ctx; ++ *context = new cubeb; + + return CUBEB_OK; + } +@@ -542,146 +736,233 @@ audiounit_get_backend_id(cubeb * /* ctx */) + } + + #if !TARGET_OS_IPHONE ++ ++static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); ++static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); ++ + static int +-audiounit_get_output_device_id(AudioDeviceID * device_id) ++audiounit_set_device_info(cubeb_stream * stm, AudioDeviceID id, io_side side) + { +- UInt32 size; +- OSStatus r; +- AudioObjectPropertyAddress output_device_address = { +- kAudioHardwarePropertyDefaultOutputDevice, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster +- }; ++ assert(stm); + +- size = sizeof(*device_id); ++ device_info * info = nullptr; ++ cubeb_device_type type = CUBEB_DEVICE_TYPE_UNKNOWN; + +- r = AudioObjectGetPropertyData(kAudioObjectSystemObject, +- &output_device_address, +- 0, +- NULL, +- &size, +- device_id); +- if (r != noErr) { +- PRINT_ERROR_CODE("output_device_id", r); +- return CUBEB_ERROR; ++ if (side == io_side::INPUT) { ++ info = &stm->input_device; ++ type = CUBEB_DEVICE_TYPE_INPUT; ++ } else if (side == io_side::OUTPUT) { ++ info = &stm->output_device; ++ type = CUBEB_DEVICE_TYPE_OUTPUT; + } ++ memset(info, 0, sizeof(device_info)); ++ info->id = id; + +- return CUBEB_OK; +-} +- +-static int +-audiounit_get_input_device_id(AudioDeviceID * device_id) +-{ +- UInt32 size; +- OSStatus r; +- AudioObjectPropertyAddress input_device_address = { +- kAudioHardwarePropertyDefaultInputDevice, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster +- }; +- +- size = sizeof(*device_id); ++ if (side == io_side::INPUT) { ++ info->flags |= DEV_INPUT; ++ } else if (side == io_side::OUTPUT) { ++ info->flags |= DEV_OUTPUT; ++ } + +- r = AudioObjectGetPropertyData(kAudioObjectSystemObject, +- &input_device_address, +- 0, +- NULL, +- &size, +- device_id); +- if (r != noErr) { ++ AudioDeviceID default_device_id = audiounit_get_default_device_id(type); ++ if (default_device_id == kAudioObjectUnknown) { + return CUBEB_ERROR; + } ++ if (id == kAudioObjectUnknown) { ++ info->id = default_device_id; ++ info->flags |= DEV_SELECTED_DEFAULT; ++ } ++ ++ if (info->id == default_device_id) { ++ info->flags |= DEV_SYSTEM_DEFAULT; ++ } ++ ++ assert(info->id); ++ assert(info->flags & DEV_INPUT && !(info->flags & DEV_OUTPUT) || ++ !(info->flags & DEV_INPUT) && info->flags & DEV_OUTPUT); + + return CUBEB_OK; + } + +-static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); +-static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); +-static int audiounit_uninstall_device_changed_callback(cubeb_stream * stm); + + static int +-audiounit_reinit_stream(cubeb_stream * stm) ++audiounit_reinit_stream(cubeb_stream * stm, device_flags_value flags) + { + auto_lock context_lock(stm->context->mutex); ++ assert((flags & DEV_INPUT && stm->input_unit) || ++ (flags & DEV_OUTPUT && stm->output_unit)); + if (!stm->shutdown) { + audiounit_stream_stop_internal(stm); + } + + int r = audiounit_uninstall_device_changed_callback(stm); + if (r != CUBEB_OK) { +- LOG("(%p) Could not uninstall the device changed callback", stm); ++ LOG("(%p) Could not uninstall all device change listeners.", stm); + } + + { + auto_lock lock(stm->mutex); + float volume = 0.0; +- int vol_rv = audiounit_stream_get_volume(stm, &volume); ++ int vol_rv = CUBEB_ERROR; ++ if (stm->output_unit) { ++ vol_rv = audiounit_stream_get_volume(stm, &volume); ++ } + + audiounit_close_stream(stm); + ++ /* Reinit occurs in one of the following case: ++ * - When the device is not alive any more ++ * - When the default system device change. ++ * - The bluetooth device changed from A2DP to/from HFP/HSP profile ++ * We first attempt to re-use the same device id, should that fail we will ++ * default to the (potentially new) default device. */ ++ AudioDeviceID input_device = flags & DEV_INPUT ? stm->input_device.id : kAudioObjectUnknown; ++ if (flags & DEV_INPUT) { ++ r = audiounit_set_device_info(stm, input_device, io_side::INPUT); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Set input device info failed. This can happen when last media device is unplugged", stm); ++ return CUBEB_ERROR; ++ } ++ } ++ ++ /* Always use the default output on reinit. This is not correct in every ++ * case but it is sufficient for Firefox and prevent reinit from reporting ++ * failures. It will change soon when reinit mechanism will be updated. */ ++ r = audiounit_set_device_info(stm, kAudioObjectUnknown, io_side::OUTPUT); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Set output device info failed. This can happen when last media device is unplugged", stm); ++ return CUBEB_ERROR; ++ } ++ + if (audiounit_setup_stream(stm) != CUBEB_OK) { + LOG("(%p) Stream reinit failed.", stm); +- return CUBEB_ERROR; ++ if (flags & DEV_INPUT && input_device != kAudioObjectUnknown) { ++ // Attempt to re-use the same device-id failed, so attempt again with ++ // default input device. ++ audiounit_close_stream(stm); ++ if (audiounit_set_device_info(stm, kAudioObjectUnknown, io_side::INPUT) != CUBEB_OK || ++ audiounit_setup_stream(stm) != CUBEB_OK) { ++ LOG("(%p) Second stream reinit failed.", stm); ++ return CUBEB_ERROR; ++ } ++ } + } + + if (vol_rv == CUBEB_OK) { + audiounit_stream_set_volume(stm, volume); + } + +- // Reset input frames to force new stream pre-buffer +- // silence if needed, check `is_extra_input_needed()` +- stm->frames_read = 0; +- + // If the stream was running, start it again. + if (!stm->shutdown) { +- audiounit_stream_start_internal(stm); ++ r = audiounit_stream_start_internal(stm); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR; ++ } + } + } + return CUBEB_OK; + } + ++static void ++audiounit_reinit_stream_async(cubeb_stream * stm, device_flags_value flags) ++{ ++ if (std::atomic_exchange(&stm->reinit_pending, true)) { ++ // A reinit task is already pending, nothing more to do. ++ ALOG("(%p) re-init stream task already pending, cancelling request", stm); ++ return; ++ } ++ ++ // Use a new thread, through the queue, to avoid deadlock when calling ++ // Get/SetProperties method from inside notify callback ++ dispatch_async(stm->context->serial_queue, ^() { ++ if (stm->destroy_pending) { ++ ALOG("(%p) stream pending destroy, cancelling reinit task", stm); ++ return; ++ } ++ ++ if (audiounit_reinit_stream(stm, flags) != CUBEB_OK) { ++ if (audiounit_uninstall_system_changed_callback(stm) != CUBEB_OK) { ++ LOG("(%p) Could not uninstall system changed callback", stm); ++ } ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ LOG("(%p) Could not reopen the stream after switching.", stm); ++ } ++ stm->switching_device = false; ++ stm->reinit_pending = false; ++ }); ++} ++ ++static char const * ++event_addr_to_string(AudioObjectPropertySelector selector) ++{ ++ switch(selector) { ++ case kAudioHardwarePropertyDefaultOutputDevice: ++ return "kAudioHardwarePropertyDefaultOutputDevice"; ++ case kAudioHardwarePropertyDefaultInputDevice: ++ return "kAudioHardwarePropertyDefaultInputDevice"; ++ case kAudioDevicePropertyDeviceIsAlive: ++ return "kAudioDevicePropertyDeviceIsAlive"; ++ case kAudioDevicePropertyDataSource: ++ return "kAudioDevicePropertyDataSource"; ++ default: ++ return "Unknown"; ++ } ++} ++ + static OSStatus +-audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_count, ++audiounit_property_listener_callback(AudioObjectID id, UInt32 address_count, + const AudioObjectPropertyAddress * addresses, + void * user) + { + cubeb_stream * stm = (cubeb_stream*) user; ++ if (stm->switching_device) { ++ LOG("Switching is already taking place. Skip Event %s for id=%d", event_addr_to_string(addresses[0].mSelector), id); ++ return noErr; ++ } + stm->switching_device = true; + +- LOG("(%p) Audio device changed, %d events.", stm, address_count); ++ LOG("(%p) Audio device changed, %u events.", stm, (unsigned int) address_count); + for (UInt32 i = 0; i < address_count; i++) { + switch(addresses[i].mSelector) { + case kAudioHardwarePropertyDefaultOutputDevice: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDefaultOutputDevice", i); +- // Allow restart to choose the new default +- stm->output_device = nullptr; ++ LOG("Event[%u] - mSelector == kAudioHardwarePropertyDefaultOutputDevice for id=%d", (unsigned int) i, id); + } + break; + case kAudioHardwarePropertyDefaultInputDevice: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDefaultInputDevice", i); +- // Allow restart to choose the new default +- stm->input_device = nullptr; ++ LOG("Event[%u] - mSelector == kAudioHardwarePropertyDefaultInputDevice for id=%d", (unsigned int) i, id); + } + break; + case kAudioDevicePropertyDeviceIsAlive: { +- LOG("Event[%d] - mSelector == kAudioDevicePropertyDeviceIsAlive", i); ++ LOG("Event[%u] - mSelector == kAudioDevicePropertyDeviceIsAlive for id=%d", (unsigned int) i, id); + // If this is the default input device ignore the event, + // kAudioHardwarePropertyDefaultInputDevice will take care of the switch +- if (stm->is_default_input) { ++ if (stm->input_device.flags & DEV_SYSTEM_DEFAULT) { + LOG("It's the default input device, ignore the event"); ++ stm->switching_device = false; + return noErr; + } +- // Allow restart to choose the new default. Event register only for input. +- stm->input_device = nullptr; + } + break; + case kAudioDevicePropertyDataSource: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDataSource", i); +- return noErr; ++ LOG("Event[%u] - mSelector == kAudioDevicePropertyDataSource for id=%d", (unsigned int) i, id); + } ++ break; ++ default: ++ LOG("Event[%u] - mSelector == Unexpected Event id %d, return", (unsigned int) i, addresses[i].mSelector); ++ stm->switching_device = false; ++ return noErr; + } + } + ++ // Allow restart to choose the new default ++ device_flags_value switch_side = DEV_UNKNOWN; ++ if (has_input(stm)) { ++ switch_side |= DEV_INPUT; ++ } ++ if (has_output(stm)) { ++ switch_side |= DEV_OUTPUT; ++ } ++ + for (UInt32 i = 0; i < address_count; i++) { + switch(addresses[i].mSelector) { + case kAudioHardwarePropertyDefaultOutputDevice: +@@ -689,7 +970,7 @@ audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_coun + case kAudioDevicePropertyDeviceIsAlive: + /* fall through */ + case kAudioDevicePropertyDataSource: { +- auto_lock lock(stm->mutex); ++ auto_lock dev_cb_lock(stm->device_changed_callback_lock); + if (stm->device_changed_callback) { + stm->device_changed_callback(stm->user_ptr); + } +@@ -698,99 +979,77 @@ audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_coun + } + } + +- // Use a new thread, through the queue, to avoid deadlock when calling +- // Get/SetProperties method from inside notify callback +- dispatch_async(stm->context->serial_queue, ^() { +- if (audiounit_reinit_stream(stm) != CUBEB_OK) { +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- LOG("(%p) Could not reopen the stream after switching.", stm); +- } +- stm->switching_device = false; +- }); ++ audiounit_reinit_stream_async(stm, switch_side); + + return noErr; + } + + OSStatus +-audiounit_add_listener(cubeb_stream * stm, AudioDeviceID id, AudioObjectPropertySelector selector, +- AudioObjectPropertyScope scope, AudioObjectPropertyListenerProc listener) ++audiounit_add_listener(const property_listener * listener) + { +- AudioObjectPropertyAddress address = { +- selector, +- scope, +- kAudioObjectPropertyElementMaster +- }; +- +- return AudioObjectAddPropertyListener(id, &address, listener, stm); ++ assert(listener); ++ return AudioObjectAddPropertyListener(listener->device_id, ++ listener->property_address, ++ listener->callback, ++ listener->stream); + } + + OSStatus +-audiounit_remove_listener(cubeb_stream * stm, AudioDeviceID id, +- AudioObjectPropertySelector selector, +- AudioObjectPropertyScope scope, +- AudioObjectPropertyListenerProc listener) +-{ +- AudioObjectPropertyAddress address = { +- selector, +- scope, +- kAudioObjectPropertyElementMaster +- }; +- +- return AudioObjectRemovePropertyListener(id, &address, listener, stm); ++audiounit_remove_listener(const property_listener * listener) ++{ ++ assert(listener); ++ return AudioObjectRemovePropertyListener(listener->device_id, ++ listener->property_address, ++ listener->callback, ++ listener->stream); + } + +-static AudioObjectID audiounit_get_default_device_id(cubeb_device_type type); +- + static int + audiounit_install_device_changed_callback(cubeb_stream * stm) + { +- OSStatus r; ++ OSStatus rv; ++ int r = CUBEB_OK; + + if (stm->output_unit) { + /* This event will notify us when the data source on the same device changes, + * for example when the user plugs in a normal (non-usb) headset in the + * headphone jack. */ +- AudioDeviceID output_dev_id; +- r = audiounit_get_output_device_id(&output_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- r = audiounit_add_listener(stm, output_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/output/kAudioDevicePropertyDataSource", r); +- return CUBEB_ERROR; ++ stm->output_source_listener.reset(new property_listener( ++ stm->output_device.id, &OUTPUT_DATA_SOURCE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ rv = audiounit_add_listener(stm->output_source_listener.get()); ++ if (rv != noErr) { ++ stm->output_source_listener.reset(); ++ LOG("AudioObjectAddPropertyListener/output/kAudioDevicePropertyDataSource rv=%d, device id=%d", rv, stm->output_device.id); ++ r = CUBEB_ERROR; + } + } + + if (stm->input_unit) { + /* This event will notify us when the data source on the input device changes. */ +- AudioDeviceID input_dev_id; +- r = audiounit_get_input_device_id(&input_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- r = audiounit_add_listener(stm, input_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDataSource", r); +- return CUBEB_ERROR; ++ stm->input_source_listener.reset(new property_listener( ++ stm->input_device.id, &INPUT_DATA_SOURCE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ rv = audiounit_add_listener(stm->input_source_listener.get()); ++ if (rv != noErr) { ++ stm->input_source_listener.reset(); ++ LOG("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDataSource rv=%d, device id=%d", rv, stm->input_device.id); ++ r = CUBEB_ERROR; + } + + /* Event to notify when the input is going away. */ +- AudioDeviceID dev = stm->input_device ? reinterpret_cast(stm->input_device) : +- audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT); +- r = audiounit_add_listener(stm, dev, kAudioDevicePropertyDeviceIsAlive, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDeviceIsAlive", r); +- return CUBEB_ERROR; ++ stm->input_alive_listener.reset(new property_listener( ++ stm->input_device.id, &DEVICE_IS_ALIVE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ rv = audiounit_add_listener(stm->input_alive_listener.get()); ++ if (rv != noErr) { ++ stm->input_alive_listener.reset(); ++ LOG("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDeviceIsAlive rv=%d, device id =%d", rv, stm->input_device.id); ++ r = CUBEB_ERROR; + } + } + +- return CUBEB_OK; ++ return r; + } + + static int +@@ -803,9 +1062,12 @@ audiounit_install_system_changed_callback(cubeb_stream * stm) + * for example when the user plugs in a USB headset and the system chooses it + * automatically as the default, or when another device is chosen in the + * dropdown list. */ +- r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); ++ stm->default_output_listener.reset(new property_listener( ++ kAudioObjectSystemObject, &DEFAULT_OUTPUT_DEVICE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ r = audiounit_add_listener(stm->default_output_listener.get()); + if (r != noErr) { ++ stm->default_output_listener.reset(); + LOG("AudioObjectAddPropertyListener/output/kAudioHardwarePropertyDefaultOutputDevice rv=%d", r); + return CUBEB_ERROR; + } +@@ -813,9 +1075,12 @@ audiounit_install_system_changed_callback(cubeb_stream * stm) + + if (stm->input_unit) { + /* This event will notify us when the default input device changes. */ +- r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); ++ stm->default_input_listener.reset(new property_listener( ++ kAudioObjectSystemObject, &DEFAULT_INPUT_DEVICE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ r = audiounit_add_listener(stm->default_input_listener.get()); + if (r != noErr) { ++ stm->default_input_listener.reset(); + LOG("AudioObjectAddPropertyListener/input/kAudioHardwarePropertyDefaultInputDevice rv=%d", r); + return CUBEB_ERROR; + } +@@ -827,36 +1092,38 @@ audiounit_install_system_changed_callback(cubeb_stream * stm) + static int + audiounit_uninstall_device_changed_callback(cubeb_stream * stm) + { +- OSStatus r; +- +- if (stm->output_unit) { +- AudioDeviceID output_dev_id; +- r = audiounit_get_output_device_id(&output_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } ++ OSStatus rv; ++ // Failing to uninstall listeners is not a fatal error. ++ int r = CUBEB_OK; + +- r = audiounit_remove_listener(stm, output_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; ++ if (stm->output_source_listener) { ++ rv = audiounit_remove_listener(stm->output_source_listener.get()); ++ if (rv != noErr) { ++ LOG("AudioObjectRemovePropertyListener/output/kAudioDevicePropertyDataSource rv=%d, device id=%d", rv, stm->output_device.id); ++ r = CUBEB_ERROR; + } ++ stm->output_source_listener.reset(); + } + +- if (stm->input_unit) { +- AudioDeviceID input_dev_id; +- r = audiounit_get_input_device_id(&input_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; ++ if (stm->input_source_listener) { ++ rv = audiounit_remove_listener(stm->input_source_listener.get()); ++ if (rv != noErr) { ++ LOG("AudioObjectRemovePropertyListener/input/kAudioDevicePropertyDataSource rv=%d, device id=%d", rv, stm->input_device.id); ++ r = CUBEB_ERROR; + } ++ stm->input_source_listener.reset(); ++ } + +- r = audiounit_remove_listener(stm, input_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; ++ if (stm->input_alive_listener) { ++ rv = audiounit_remove_listener(stm->input_alive_listener.get()); ++ if (rv != noErr) { ++ LOG("AudioObjectRemovePropertyListener/input/kAudioDevicePropertyDeviceIsAlive rv=%d, device id=%d", rv, stm->input_device.id); ++ r = CUBEB_ERROR; + } ++ stm->input_alive_listener.reset(); + } +- return CUBEB_OK; ++ ++ return r; + } + + static int +@@ -864,20 +1131,20 @@ audiounit_uninstall_system_changed_callback(cubeb_stream * stm) + { + OSStatus r; + +- if (stm->output_unit) { +- r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); ++ if (stm->default_output_listener) { ++ r = audiounit_remove_listener(stm->default_output_listener.get()); + if (r != noErr) { + return CUBEB_ERROR; + } ++ stm->default_output_listener.reset(); + } + +- if (stm->input_unit) { +- r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); ++ if (stm->default_input_listener) { ++ r = audiounit_remove_listener(stm->default_input_listener.get()); + if (r != noErr) { + return CUBEB_ERROR; + } ++ stm->default_input_listener.reset(); + } + return CUBEB_OK; + } +@@ -895,7 +1162,8 @@ audiounit_get_acceptable_latency_range(AudioValueRange * latency_range) + kAudioObjectPropertyElementMaster + }; + +- if (audiounit_get_output_device_id(&output_device_id) != CUBEB_OK) { ++ output_device_id = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_OUTPUT); ++ if (output_device_id == kAudioObjectUnknown) { + LOG("Could not get default output device id."); + return CUBEB_ERROR; + } +@@ -910,7 +1178,7 @@ audiounit_get_acceptable_latency_range(AudioValueRange * latency_range) + &size, + latency_range); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectGetPropertyData/buffer size range", r); ++ LOG("AudioObjectGetPropertyData/buffer size range rv=%d", r); + return CUBEB_ERROR; + } + +@@ -921,20 +1189,19 @@ audiounit_get_acceptable_latency_range(AudioValueRange * latency_range) + static AudioObjectID + audiounit_get_default_device_id(cubeb_device_type type) + { +- AudioObjectPropertyAddress adr = { 0, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; +- AudioDeviceID devid; +- UInt32 size; +- ++ const AudioObjectPropertyAddress * adr; + if (type == CUBEB_DEVICE_TYPE_OUTPUT) { +- adr.mSelector = kAudioHardwarePropertyDefaultOutputDevice; ++ adr = &DEFAULT_OUTPUT_DEVICE_PROPERTY_ADDRESS; + } else if (type == CUBEB_DEVICE_TYPE_INPUT) { +- adr.mSelector = kAudioHardwarePropertyDefaultInputDevice; ++ adr = &DEFAULT_INPUT_DEVICE_PROPERTY_ADDRESS; + } else { + return kAudioObjectUnknown; + } + +- size = sizeof(AudioDeviceID); +- if (AudioObjectGetPropertyData(kAudioObjectSystemObject, &adr, 0, NULL, &size, &devid) != noErr) { ++ AudioDeviceID devid; ++ UInt32 size = sizeof(AudioDeviceID); ++ if (AudioObjectGetPropertyData(kAudioObjectSystemObject, ++ adr, 0, NULL, &size, &devid) != noErr) { + return kAudioObjectUnknown; + } + +@@ -960,174 +1227,783 @@ audiounit_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + + assert(ctx && max_channels); + +- if (audiounit_get_output_device_id(&output_device_id) != CUBEB_OK) { ++ output_device_id = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_OUTPUT); ++ if (output_device_id == kAudioObjectUnknown) { ++ return CUBEB_ERROR; ++ } ++ ++ size = sizeof(stream_format); ++ ++ r = AudioObjectGetPropertyData(output_device_id, ++ &stream_format_address, ++ 0, ++ NULL, ++ &size, ++ &stream_format); ++ if (r != noErr) { ++ LOG("AudioObjectPropertyAddress/StreamFormat rv=%d", r); ++ return CUBEB_ERROR; ++ } ++ ++ *max_channels = stream_format.mChannelsPerFrame; ++#endif ++ return CUBEB_OK; ++} ++ ++static int ++audiounit_get_min_latency(cubeb * /* ctx */, ++ cubeb_stream_params /* params */, ++ uint32_t * latency_frames) ++{ ++#if TARGET_OS_IPHONE ++ //TODO: [[AVAudioSession sharedInstance] inputLatency] ++ return CUBEB_ERROR_NOT_SUPPORTED; ++#else ++ AudioValueRange latency_range; ++ if (audiounit_get_acceptable_latency_range(&latency_range) != CUBEB_OK) { ++ LOG("Could not get acceptable latency range."); ++ return CUBEB_ERROR; ++ } ++ ++ *latency_frames = max(latency_range.mMinimum, ++ SAFE_MIN_LATENCY_FRAMES); ++#endif ++ ++ return CUBEB_OK; ++} ++ ++static int ++audiounit_get_preferred_sample_rate(cubeb * /* ctx */, uint32_t * rate) ++{ ++#if TARGET_OS_IPHONE ++ //TODO ++ return CUBEB_ERROR_NOT_SUPPORTED; ++#else ++ UInt32 size; ++ OSStatus r; ++ Float64 fsamplerate; ++ AudioDeviceID output_device_id; ++ AudioObjectPropertyAddress samplerate_address = { ++ kAudioDevicePropertyNominalSampleRate, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++ }; ++ ++ output_device_id = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_OUTPUT); ++ if (output_device_id == kAudioObjectUnknown) { ++ return CUBEB_ERROR; ++ } ++ ++ size = sizeof(fsamplerate); ++ r = AudioObjectGetPropertyData(output_device_id, ++ &samplerate_address, ++ 0, ++ NULL, ++ &size, ++ &fsamplerate); ++ ++ if (r != noErr) { ++ return CUBEB_ERROR; ++ } ++ ++ *rate = static_cast(fsamplerate); ++#endif ++ return CUBEB_OK; ++} ++ ++static cubeb_channel_layout ++audiounit_convert_channel_layout(AudioChannelLayout * layout) ++{ ++ // When having one or two channel, force mono or stereo. Some devices (namely, ++ // Bose QC35, mark 1 and 2), expose a single channel mapped to the right for ++ // some reason. ++ if (layout->mNumberChannelDescriptions == 1) { ++ return CUBEB_LAYOUT_MONO; ++ } else if (layout->mNumberChannelDescriptions == 2) { ++ return CUBEB_LAYOUT_STEREO; ++ } ++ ++ if (layout->mChannelLayoutTag != kAudioChannelLayoutTag_UseChannelDescriptions) { ++ // kAudioChannelLayoutTag_UseChannelBitmap ++ // kAudioChannelLayoutTag_Mono ++ // kAudioChannelLayoutTag_Stereo ++ // .... ++ LOG("Only handle UseChannelDescriptions for now.\n"); ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ ++ cubeb_channel_layout cl = 0; ++ for (UInt32 i = 0; i < layout->mNumberChannelDescriptions; ++i) { ++ cubeb_channel cc = channel_label_to_cubeb_channel( ++ layout->mChannelDescriptions[i].mChannelLabel); ++ if (cc == CHANNEL_UNKNOWN) { ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ cl |= cc; ++ } ++ ++ return cl; ++} ++ ++static cubeb_channel_layout ++audiounit_get_preferred_channel_layout(AudioUnit output_unit) ++{ ++ OSStatus rv = noErr; ++ UInt32 size = 0; ++ rv = AudioUnitGetPropertyInfo(output_unit, ++ kAudioDevicePropertyPreferredChannelLayout, ++ kAudioUnitScope_Output, ++ AU_OUT_BUS, ++ &size, ++ nullptr); ++ if (rv != noErr) { ++ LOG("AudioUnitGetPropertyInfo/kAudioDevicePropertyPreferredChannelLayout rv=%d", rv); ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ assert(size > 0); ++ ++ auto layout = make_sized_audio_channel_layout(size); ++ rv = AudioUnitGetProperty(output_unit, ++ kAudioDevicePropertyPreferredChannelLayout, ++ kAudioUnitScope_Output, ++ AU_OUT_BUS, ++ layout.get(), ++ &size); ++ if (rv != noErr) { ++ LOG("AudioUnitGetProperty/kAudioDevicePropertyPreferredChannelLayout rv=%d", rv); ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ ++ return audiounit_convert_channel_layout(layout.get()); ++} ++ ++static cubeb_channel_layout ++audiounit_get_current_channel_layout(AudioUnit output_unit) ++{ ++ OSStatus rv = noErr; ++ UInt32 size = 0; ++ rv = AudioUnitGetPropertyInfo(output_unit, ++ kAudioUnitProperty_AudioChannelLayout, ++ kAudioUnitScope_Output, ++ AU_OUT_BUS, ++ &size, ++ nullptr); ++ if (rv != noErr) { ++ LOG("AudioUnitGetPropertyInfo/kAudioUnitProperty_AudioChannelLayout rv=%d", rv); ++ // This property isn't known before macOS 10.12, attempt another method. ++ return audiounit_get_preferred_channel_layout(output_unit); ++ } ++ assert(size > 0); ++ ++ auto layout = make_sized_audio_channel_layout(size); ++ rv = AudioUnitGetProperty(output_unit, ++ kAudioUnitProperty_AudioChannelLayout, ++ kAudioUnitScope_Output, ++ AU_OUT_BUS, ++ layout.get(), ++ &size); ++ if (rv != noErr) { ++ LOG("AudioUnitGetProperty/kAudioUnitProperty_AudioChannelLayout rv=%d", rv); ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ ++ return audiounit_convert_channel_layout(layout.get()); ++} ++ ++static int audiounit_create_unit(AudioUnit * unit, device_info * device); ++ ++static OSStatus audiounit_remove_device_listener(cubeb * context, cubeb_device_type devtype); ++ ++static void ++audiounit_destroy(cubeb * ctx) ++{ ++ { ++ auto_lock lock(ctx->mutex); ++ ++ // Disabling this assert for bug 1083664 -- we seem to leak a stream ++ // assert(ctx->active_streams == 0); ++ if (audiounit_active_streams(ctx) > 0) { ++ LOG("(%p) API misuse, %d streams active when context destroyed!", ctx, audiounit_active_streams(ctx)); ++ } ++ ++ /* Unregister the callback if necessary. */ ++ if (ctx->input_collection_changed_callback) { ++ audiounit_remove_device_listener(ctx, CUBEB_DEVICE_TYPE_INPUT); ++ } ++ if (ctx->output_collection_changed_callback) { ++ audiounit_remove_device_listener(ctx, CUBEB_DEVICE_TYPE_OUTPUT); ++ } ++ } ++ ++ dispatch_release(ctx->serial_queue); ++ ++ delete ctx; ++} ++ ++static void audiounit_stream_destroy(cubeb_stream * stm); ++ ++static int ++audio_stream_desc_init(AudioStreamBasicDescription * ss, ++ const cubeb_stream_params * stream_params) ++{ ++ switch (stream_params->format) { ++ case CUBEB_SAMPLE_S16LE: ++ ss->mBitsPerChannel = 16; ++ ss->mFormatFlags = kAudioFormatFlagIsSignedInteger; ++ break; ++ case CUBEB_SAMPLE_S16BE: ++ ss->mBitsPerChannel = 16; ++ ss->mFormatFlags = kAudioFormatFlagIsSignedInteger | ++ kAudioFormatFlagIsBigEndian; ++ break; ++ case CUBEB_SAMPLE_FLOAT32LE: ++ ss->mBitsPerChannel = 32; ++ ss->mFormatFlags = kAudioFormatFlagIsFloat; ++ break; ++ case CUBEB_SAMPLE_FLOAT32BE: ++ ss->mBitsPerChannel = 32; ++ ss->mFormatFlags = kAudioFormatFlagIsFloat | ++ kAudioFormatFlagIsBigEndian; ++ break; ++ default: ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } ++ ++ ss->mFormatID = kAudioFormatLinearPCM; ++ ss->mFormatFlags |= kLinearPCMFormatFlagIsPacked; ++ ss->mSampleRate = stream_params->rate; ++ ss->mChannelsPerFrame = stream_params->channels; ++ ++ ss->mBytesPerFrame = (ss->mBitsPerChannel / 8) * ss->mChannelsPerFrame; ++ ss->mFramesPerPacket = 1; ++ ss->mBytesPerPacket = ss->mBytesPerFrame * ss->mFramesPerPacket; ++ ++ ss->mReserved = 0; ++ ++ return CUBEB_OK; ++} ++ ++void ++audiounit_init_mixer(cubeb_stream * stm) ++{ ++ // We can't rely on macOS' AudioUnit to properly downmix (or upmix) the audio ++ // data, it silently drop the channels so we need to remix the ++ // audio data by ourselves to keep all the information. ++ stm->mixer.reset(cubeb_mixer_create(stm->output_stream_params.format, ++ stm->output_stream_params.channels, ++ stm->output_stream_params.layout, ++ stm->context->channels, ++ stm->context->layout)); ++ assert(stm->mixer); ++} ++ ++static int ++audiounit_set_channel_layout(AudioUnit unit, ++ io_side side, ++ cubeb_channel_layout layout) ++{ ++ if (side != io_side::OUTPUT) { ++ return CUBEB_ERROR; ++ } ++ ++ if (layout == CUBEB_LAYOUT_UNDEFINED) { ++ // We leave everything as-is... ++ return CUBEB_OK; ++ } ++ ++ ++ OSStatus r; ++ uint32_t nb_channels = cubeb_channel_layout_nb_channels(layout); ++ ++ // We do not use CoreAudio standard layout for lack of documentation on what ++ // the actual channel orders are. So we set a custom layout. ++ size_t size = offsetof(AudioChannelLayout, mChannelDescriptions[nb_channels]); ++ auto au_layout = make_sized_audio_channel_layout(size); ++ au_layout->mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions; ++ au_layout->mNumberChannelDescriptions = nb_channels; ++ ++ uint32_t channels = 0; ++ cubeb_channel_layout channelMap = layout; ++ for (uint32_t i = 0; channelMap != 0; ++i) { ++ XASSERT(channels < nb_channels); ++ uint32_t channel = (channelMap & 1) << i; ++ if (channel != 0) { ++ au_layout->mChannelDescriptions[channels].mChannelLabel = ++ cubeb_channel_to_channel_label(static_cast(channel)); ++ au_layout->mChannelDescriptions[channels].mChannelFlags = kAudioChannelFlags_AllOff; ++ channels++; ++ } ++ channelMap = channelMap >> 1; ++ } ++ ++ r = AudioUnitSetProperty(unit, ++ kAudioUnitProperty_AudioChannelLayout, ++ kAudioUnitScope_Input, ++ AU_OUT_BUS, ++ au_layout.get(), ++ size); ++ if (r != noErr) { ++ LOG("AudioUnitSetProperty/%s/kAudioUnitProperty_AudioChannelLayout rv=%d", to_string(side), r); ++ return CUBEB_ERROR; ++ } ++ ++ return CUBEB_OK; ++} ++ ++void ++audiounit_layout_init(cubeb_stream * stm, io_side side) ++{ ++ // We currently don't support the input layout setting. ++ if (side == io_side::INPUT) { ++ return; ++ } ++ ++ stm->context->layout = audiounit_get_current_channel_layout(stm->output_unit); ++ ++ audiounit_set_channel_layout(stm->output_unit, io_side::OUTPUT, stm->context->layout); ++} ++ ++static vector ++audiounit_get_sub_devices(AudioDeviceID device_id) ++{ ++ vector sub_devices; ++ AudioObjectPropertyAddress property_address = { kAudioAggregateDevicePropertyActiveSubDeviceList, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ UInt32 size = 0; ++ OSStatus rv = AudioObjectGetPropertyDataSize(device_id, ++ &property_address, ++ 0, ++ nullptr, ++ &size); ++ ++ if (rv != noErr) { ++ sub_devices.push_back(device_id); ++ return sub_devices; ++ } ++ ++ uint32_t count = static_cast(size / sizeof(AudioObjectID)); ++ sub_devices.resize(count); ++ rv = AudioObjectGetPropertyData(device_id, ++ &property_address, ++ 0, ++ nullptr, ++ &size, ++ sub_devices.data()); ++ if (rv != noErr) { ++ sub_devices.clear(); ++ sub_devices.push_back(device_id); ++ } else { ++ LOG("Found %u sub-devices", count); ++ } ++ return sub_devices; ++} ++ ++static int ++audiounit_create_blank_aggregate_device(AudioObjectID * plugin_id, AudioDeviceID * aggregate_device_id) ++{ ++ AudioObjectPropertyAddress address_plugin_bundle_id = { kAudioHardwarePropertyPlugInForBundleID, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ UInt32 size = 0; ++ OSStatus r = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, ++ &address_plugin_bundle_id, ++ 0, NULL, ++ &size); ++ if (r != noErr) { ++ LOG("AudioObjectGetPropertyDataSize/kAudioHardwarePropertyPlugInForBundleID, rv=%d", r); + return CUBEB_ERROR; + } + +- size = sizeof(stream_format); ++ AudioValueTranslation translation_value; ++ CFStringRef in_bundle_ref = CFSTR("com.apple.audio.CoreAudio"); ++ translation_value.mInputData = &in_bundle_ref; ++ translation_value.mInputDataSize = sizeof(in_bundle_ref); ++ translation_value.mOutputData = plugin_id; ++ translation_value.mOutputDataSize = sizeof(*plugin_id); + +- r = AudioObjectGetPropertyData(output_device_id, +- &stream_format_address, ++ r = AudioObjectGetPropertyData(kAudioObjectSystemObject, ++ &address_plugin_bundle_id, + 0, +- NULL, ++ nullptr, + &size, +- &stream_format); ++ &translation_value); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectPropertyAddress/StreamFormat", r); ++ LOG("AudioObjectGetPropertyData/kAudioHardwarePropertyPlugInForBundleID, rv=%d", r); + return CUBEB_ERROR; + } + +- *max_channels = stream_format.mChannelsPerFrame; +-#endif ++ AudioObjectPropertyAddress create_aggregate_device_address = { kAudioPlugInCreateAggregateDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ r = AudioObjectGetPropertyDataSize(*plugin_id, ++ &create_aggregate_device_address, ++ 0, ++ nullptr, ++ &size); ++ if (r != noErr) { ++ LOG("AudioObjectGetPropertyDataSize/kAudioPlugInCreateAggregateDevice, rv=%d", r); ++ return CUBEB_ERROR; ++ } ++ ++ CFMutableDictionaryRef aggregate_device_dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, ++ &kCFTypeDictionaryKeyCallBacks, ++ &kCFTypeDictionaryValueCallBacks); ++ struct timeval timestamp; ++ gettimeofday(×tamp, NULL); ++ long long int time_id = timestamp.tv_sec * 1000000LL + timestamp.tv_usec; ++ CFStringRef aggregate_device_name = CFStringCreateWithFormat(NULL, NULL, CFSTR("%s_%llx"), PRIVATE_AGGREGATE_DEVICE_NAME, time_id); ++ CFDictionaryAddValue(aggregate_device_dict, CFSTR(kAudioAggregateDeviceNameKey), aggregate_device_name); ++ CFRelease(aggregate_device_name); ++ ++ CFStringRef aggregate_device_UID = CFStringCreateWithFormat(NULL, NULL, CFSTR("org.mozilla.%s_%llx"), PRIVATE_AGGREGATE_DEVICE_NAME, time_id); ++ CFDictionaryAddValue(aggregate_device_dict, CFSTR(kAudioAggregateDeviceUIDKey), aggregate_device_UID); ++ CFRelease(aggregate_device_UID); ++ ++ int private_value = 1; ++ CFNumberRef aggregate_device_private_key = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &private_value); ++ CFDictionaryAddValue(aggregate_device_dict, CFSTR(kAudioAggregateDeviceIsPrivateKey), aggregate_device_private_key); ++ CFRelease(aggregate_device_private_key); ++ ++ int stacked_value = 0; ++ CFNumberRef aggregate_device_stacked_key = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &stacked_value); ++ CFDictionaryAddValue(aggregate_device_dict, CFSTR(kAudioAggregateDeviceIsStackedKey), aggregate_device_stacked_key); ++ CFRelease(aggregate_device_stacked_key); ++ ++ r = AudioObjectGetPropertyData(*plugin_id, ++ &create_aggregate_device_address, ++ sizeof(aggregate_device_dict), ++ &aggregate_device_dict, ++ &size, ++ aggregate_device_id); ++ CFRelease(aggregate_device_dict); ++ if (r != noErr) { ++ LOG("AudioObjectGetPropertyData/kAudioPlugInCreateAggregateDevice, rv=%d", r); ++ return CUBEB_ERROR; ++ } ++ LOG("New aggregate device %u", *aggregate_device_id); ++ + return CUBEB_OK; + } + +-static int +-audiounit_get_min_latency(cubeb * /* ctx */, +- cubeb_stream_params /* params */, +- uint32_t * latency_frames) ++// The returned CFStringRef object needs to be released (via CFRelease) ++// if it's not NULL, since the reference count of the returned CFStringRef ++// object is increased. ++static CFStringRef ++get_device_name(AudioDeviceID id) + { +-#if TARGET_OS_IPHONE +- //TODO: [[AVAudioSession sharedInstance] inputLatency] +- return CUBEB_ERROR_NOT_SUPPORTED; +-#else +- AudioValueRange latency_range; +- if (audiounit_get_acceptable_latency_range(&latency_range) != CUBEB_OK) { +- LOG("Could not get acceptable latency range."); ++ UInt32 size = sizeof(CFStringRef); ++ CFStringRef UIname = nullptr; ++ AudioObjectPropertyAddress address_uuid = { kAudioDevicePropertyDeviceUID, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ OSStatus err = AudioObjectGetPropertyData(id, &address_uuid, 0, nullptr, &size, &UIname); ++ return (err == noErr) ? UIname : NULL; ++} ++ ++static int ++audiounit_set_aggregate_sub_device_list(AudioDeviceID aggregate_device_id, ++ AudioDeviceID input_device_id, ++ AudioDeviceID output_device_id) ++{ ++ LOG("Add devices input %u and output %u into aggregate device %u", ++ input_device_id, output_device_id, aggregate_device_id); ++ const vector output_sub_devices = audiounit_get_sub_devices(output_device_id); ++ const vector input_sub_devices = audiounit_get_sub_devices(input_device_id); ++ ++ CFMutableArrayRef aggregate_sub_devices_array = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks); ++ /* The order of the items in the array is significant and is used to determine the order of the streams ++ of the AudioAggregateDevice. */ ++ for (UInt32 i = 0; i < output_sub_devices.size(); i++) { ++ CFStringRef ref = get_device_name(output_sub_devices[i]); ++ if (ref == NULL) { ++ CFRelease(aggregate_sub_devices_array); ++ return CUBEB_ERROR; ++ } ++ CFArrayAppendValue(aggregate_sub_devices_array, ref); ++ CFRelease(ref); ++ } ++ for (UInt32 i = 0; i < input_sub_devices.size(); i++) { ++ CFStringRef ref = get_device_name(input_sub_devices[i]); ++ if (ref == NULL) { ++ CFRelease(aggregate_sub_devices_array); ++ return CUBEB_ERROR; ++ } ++ CFArrayAppendValue(aggregate_sub_devices_array, ref); ++ CFRelease(ref); ++ } ++ ++ AudioObjectPropertyAddress aggregate_sub_device_list = { kAudioAggregateDevicePropertyFullSubDeviceList, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ UInt32 size = sizeof(CFMutableArrayRef); ++ OSStatus rv = AudioObjectSetPropertyData(aggregate_device_id, ++ &aggregate_sub_device_list, ++ 0, ++ nullptr, ++ size, ++ &aggregate_sub_devices_array); ++ CFRelease(aggregate_sub_devices_array); ++ if (rv != noErr) { ++ LOG("AudioObjectSetPropertyData/kAudioAggregateDevicePropertyFullSubDeviceList, rv=%d", rv); + return CUBEB_ERROR; + } + +- *latency_frames = std::max(latency_range.mMinimum, +- SAFE_MIN_LATENCY_FRAMES); +-#endif ++ return CUBEB_OK; ++} ++ ++static int ++audiounit_set_master_aggregate_device(const AudioDeviceID aggregate_device_id) ++{ ++ assert(aggregate_device_id != kAudioObjectUnknown); ++ AudioObjectPropertyAddress master_aggregate_sub_device = { kAudioAggregateDevicePropertyMasterSubDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ ++ // Master become the 1st output sub device ++ AudioDeviceID output_device_id = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_OUTPUT); ++ const vector output_sub_devices = audiounit_get_sub_devices(output_device_id); ++ CFStringRef master_sub_device = get_device_name(output_sub_devices[0]); ++ ++ UInt32 size = sizeof(CFStringRef); ++ OSStatus rv = AudioObjectSetPropertyData(aggregate_device_id, ++ &master_aggregate_sub_device, ++ 0, ++ NULL, ++ size, ++ &master_sub_device); ++ if (master_sub_device) { ++ CFRelease(master_sub_device); ++ } ++ if (rv != noErr) { ++ LOG("AudioObjectSetPropertyData/kAudioAggregateDevicePropertyMasterSubDevice, rv=%d", rv); ++ return CUBEB_ERROR; ++ } + + return CUBEB_OK; + } + + static int +-audiounit_get_preferred_sample_rate(cubeb * /* ctx */, uint32_t * rate) ++audiounit_activate_clock_drift_compensation(const AudioDeviceID aggregate_device_id) + { +-#if TARGET_OS_IPHONE +- //TODO +- return CUBEB_ERROR_NOT_SUPPORTED; +-#else +- UInt32 size; +- OSStatus r; +- Float64 fsamplerate; +- AudioDeviceID output_device_id; +- AudioObjectPropertyAddress samplerate_address = { +- kAudioDevicePropertyNominalSampleRate, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster +- }; ++ assert(aggregate_device_id != kAudioObjectUnknown); ++ AudioObjectPropertyAddress address_owned = { kAudioObjectPropertyOwnedObjects, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; + +- if (audiounit_get_output_device_id(&output_device_id) != CUBEB_OK) { ++ UInt32 qualifier_data_size = sizeof(AudioObjectID); ++ AudioClassID class_id = kAudioSubDeviceClassID; ++ void * qualifier_data = &class_id; ++ UInt32 size = 0; ++ OSStatus rv = AudioObjectGetPropertyDataSize(aggregate_device_id, ++ &address_owned, ++ qualifier_data_size, ++ qualifier_data, ++ &size); ++ if (rv != noErr) { ++ LOG("AudioObjectGetPropertyDataSize/kAudioObjectPropertyOwnedObjects, rv=%d", rv); + return CUBEB_ERROR; + } + +- size = sizeof(fsamplerate); +- r = AudioObjectGetPropertyData(output_device_id, +- &samplerate_address, +- 0, +- NULL, +- &size, +- &fsamplerate); ++ UInt32 subdevices_num = 0; ++ subdevices_num = size / sizeof(AudioObjectID); ++ AudioObjectID sub_devices[subdevices_num]; ++ size = sizeof(sub_devices); + +- if (r != noErr) { ++ rv = AudioObjectGetPropertyData(aggregate_device_id, ++ &address_owned, ++ qualifier_data_size, ++ qualifier_data, ++ &size, ++ sub_devices); ++ if (rv != noErr) { ++ LOG("AudioObjectGetPropertyData/kAudioObjectPropertyOwnedObjects, rv=%d", rv); + return CUBEB_ERROR; + } + +- *rate = static_cast(fsamplerate); +-#endif ++ AudioObjectPropertyAddress address_drift = { kAudioSubDevicePropertyDriftCompensation, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ ++ // Start from the second device since the first is the master clock ++ for (UInt32 i = 1; i < subdevices_num; ++i) { ++ UInt32 drift_compensation_value = 1; ++ rv = AudioObjectSetPropertyData(sub_devices[i], ++ &address_drift, ++ 0, ++ nullptr, ++ sizeof(UInt32), ++ &drift_compensation_value); ++ if (rv != noErr) { ++ LOG("AudioObjectSetPropertyData/kAudioSubDevicePropertyDriftCompensation, rv=%d", rv); ++ return CUBEB_OK; ++ } ++ } + return CUBEB_OK; + } + +-static OSStatus audiounit_remove_device_listener(cubeb * context); ++static int audiounit_destroy_aggregate_device(AudioObjectID plugin_id, AudioDeviceID * aggregate_device_id); ++static void audiounit_get_available_samplerate(AudioObjectID devid, AudioObjectPropertyScope scope, ++ uint32_t * min, uint32_t * max, uint32_t * def); ++static int ++audiounit_create_device_from_hwdev(cubeb_device_info * dev_info, AudioObjectID devid, cubeb_device_type type); ++static void audiounit_device_destroy(cubeb_device_info * device); + + static void +-audiounit_destroy(cubeb * ctx) +-{ +- // Disabling this assert for bug 1083664 -- we seem to leak a stream +- // assert(ctx->active_streams == 0); +- +- { +- auto_lock lock(ctx->mutex); +- /* Unregister the callback if necessary. */ +- if(ctx->collection_changed_callback) { +- audiounit_remove_device_listener(ctx); ++audiounit_workaround_for_airpod(cubeb_stream * stm) ++{ ++ cubeb_device_info input_device_info; ++ audiounit_create_device_from_hwdev(&input_device_info, stm->input_device.id, CUBEB_DEVICE_TYPE_INPUT); ++ ++ cubeb_device_info output_device_info; ++ audiounit_create_device_from_hwdev(&output_device_info, stm->output_device.id, CUBEB_DEVICE_TYPE_OUTPUT); ++ ++ std::string input_name_str(input_device_info.friendly_name); ++ std::string output_name_str(output_device_info.friendly_name); ++ ++ if(input_name_str.find("AirPods") != std::string::npos && ++ output_name_str.find("AirPods") != std::string::npos) { ++ uint32_t input_min_rate = 0; ++ uint32_t input_max_rate = 0; ++ uint32_t input_nominal_rate = 0; ++ audiounit_get_available_samplerate(stm->input_device.id, kAudioObjectPropertyScopeGlobal, ++ &input_min_rate, &input_max_rate, &input_nominal_rate); ++ LOG("(%p) Input device %u, name: %s, min: %u, max: %u, nominal rate: %u", stm, stm->input_device.id ++ , input_device_info.friendly_name, input_min_rate, input_max_rate, input_nominal_rate); ++ uint32_t output_min_rate = 0; ++ uint32_t output_max_rate = 0; ++ uint32_t output_nominal_rate = 0; ++ audiounit_get_available_samplerate(stm->output_device.id, kAudioObjectPropertyScopeGlobal, ++ &output_min_rate, &output_max_rate, &output_nominal_rate); ++ LOG("(%p) Output device %u, name: %s, min: %u, max: %u, nominal rate: %u", stm, stm->output_device.id ++ , output_device_info.friendly_name, output_min_rate, output_max_rate, output_nominal_rate); ++ ++ Float64 rate = input_nominal_rate; ++ AudioObjectPropertyAddress addr = {kAudioDevicePropertyNominalSampleRate, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster}; ++ ++ OSStatus rv = AudioObjectSetPropertyData(stm->aggregate_device_id, ++ &addr, ++ 0, ++ nullptr, ++ sizeof(Float64), ++ &rate); ++ if (rv != noErr) { ++ LOG("Non fatal error, AudioObjectSetPropertyData/kAudioDevicePropertyNominalSampleRate, rv=%d", rv); + } + } +- +- ctx->~cubeb(); +- free(ctx); ++ audiounit_device_destroy(&input_device_info); ++ audiounit_device_destroy(&output_device_info); + } + +-static void audiounit_stream_destroy(cubeb_stream * stm); +- ++/* ++ * Aggregate Device is a virtual audio interface which utilizes inputs and outputs ++ * of one or more physical audio interfaces. It is possible to use the clock of ++ * one of the devices as a master clock for all the combined devices and enable ++ * drift compensation for the devices that are not designated clock master. ++ * ++ * Creating a new aggregate device programmatically requires [0][1]: ++ * 1. Locate the base plug-in ("com.apple.audio.CoreAudio") ++ * 2. Create a dictionary that describes the aggregate device ++ * (don't add sub-devices in that step, prone to fail [0]) ++ * 3. Ask the base plug-in to create the aggregate device (blank) ++ * 4. Add the array of sub-devices. ++ * 5. Set the master device (1st output device in our case) ++ * 6. Enable drift compensation for the non-master devices ++ * ++ * [0] https://lists.apple.com/archives/coreaudio-api/2006/Apr/msg00092.html ++ * [1] https://lists.apple.com/archives/coreaudio-api/2005/Jul/msg00150.html ++ * [2] CoreAudio.framework/Headers/AudioHardware.h ++ * */ + static int +-audio_stream_desc_init(AudioStreamBasicDescription * ss, +- const cubeb_stream_params * stream_params) ++audiounit_create_aggregate_device(cubeb_stream * stm) + { +- switch (stream_params->format) { +- case CUBEB_SAMPLE_S16LE: +- ss->mBitsPerChannel = 16; +- ss->mFormatFlags = kAudioFormatFlagIsSignedInteger; +- break; +- case CUBEB_SAMPLE_S16BE: +- ss->mBitsPerChannel = 16; +- ss->mFormatFlags = kAudioFormatFlagIsSignedInteger | +- kAudioFormatFlagIsBigEndian; +- break; +- case CUBEB_SAMPLE_FLOAT32LE: +- ss->mBitsPerChannel = 32; +- ss->mFormatFlags = kAudioFormatFlagIsFloat; +- break; +- case CUBEB_SAMPLE_FLOAT32BE: +- ss->mBitsPerChannel = 32; +- ss->mFormatFlags = kAudioFormatFlagIsFloat | +- kAudioFormatFlagIsBigEndian; +- break; +- default: +- return CUBEB_ERROR_INVALID_FORMAT; ++ int r = audiounit_create_blank_aggregate_device(&stm->plugin_id, &stm->aggregate_device_id); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Failed to create blank aggregate device", stm); ++ return CUBEB_ERROR; + } + +- ss->mFormatID = kAudioFormatLinearPCM; +- ss->mFormatFlags |= kLinearPCMFormatFlagIsPacked; +- ss->mSampleRate = stream_params->rate; +- ss->mChannelsPerFrame = stream_params->channels; ++ r = audiounit_set_aggregate_sub_device_list(stm->aggregate_device_id, stm->input_device.id, stm->output_device.id); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Failed to set aggregate sub-device list", stm); ++ audiounit_destroy_aggregate_device(stm->plugin_id, &stm->aggregate_device_id); ++ return CUBEB_ERROR; ++ } + +- ss->mBytesPerFrame = (ss->mBitsPerChannel / 8) * ss->mChannelsPerFrame; +- ss->mFramesPerPacket = 1; +- ss->mBytesPerPacket = ss->mBytesPerFrame * ss->mFramesPerPacket; ++ r = audiounit_set_master_aggregate_device(stm->aggregate_device_id); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Failed to set master sub-device for aggregate device", stm); ++ audiounit_destroy_aggregate_device(stm->plugin_id, &stm->aggregate_device_id); ++ return CUBEB_ERROR; ++ } + +- ss->mReserved = 0; ++ r = audiounit_activate_clock_drift_compensation(stm->aggregate_device_id); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Failed to activate clock drift compensation for aggregate device", stm); ++ audiounit_destroy_aggregate_device(stm->plugin_id, &stm->aggregate_device_id); ++ return CUBEB_ERROR; ++ } ++ ++ audiounit_workaround_for_airpod(stm); ++ ++ return CUBEB_OK; ++} + ++static int ++audiounit_destroy_aggregate_device(AudioObjectID plugin_id, AudioDeviceID * aggregate_device_id) ++{ ++ assert(aggregate_device_id && ++ *aggregate_device_id != kAudioDeviceUnknown && ++ plugin_id != kAudioObjectUnknown); ++ AudioObjectPropertyAddress destroy_aggregate_device_addr = { kAudioPlugInDestroyAggregateDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster}; ++ UInt32 size; ++ OSStatus rv = AudioObjectGetPropertyDataSize(plugin_id, ++ &destroy_aggregate_device_addr, ++ 0, ++ NULL, ++ &size); ++ if (rv != noErr) { ++ LOG("AudioObjectGetPropertyDataSize/kAudioPlugInDestroyAggregateDevice, rv=%d", rv); ++ return CUBEB_ERROR; ++ } ++ ++ rv = AudioObjectGetPropertyData(plugin_id, ++ &destroy_aggregate_device_addr, ++ 0, ++ NULL, ++ &size, ++ aggregate_device_id); ++ if (rv != noErr) { ++ LOG("AudioObjectGetPropertyData/kAudioPlugInDestroyAggregateDevice, rv=%d", rv); ++ return CUBEB_ERROR; ++ } ++ ++ LOG("Destroyed aggregate device %d", *aggregate_device_id); ++ *aggregate_device_id = kAudioObjectUnknown; + return CUBEB_OK; + } + + static int +-audiounit_create_unit(AudioUnit * unit, +- bool is_input, +- const cubeb_stream_params * /* stream_params */, +- cubeb_devid device) ++audiounit_new_unit_instance(AudioUnit * unit, device_info * device) + { + AudioComponentDescription desc; + AudioComponent comp; +- UInt32 enable; +- AudioDeviceID devid; + OSStatus rv; + + desc.componentType = kAudioUnitType_Output; + #if TARGET_OS_IPHONE +- bool use_default_output = false; + desc.componentSubType = kAudioUnitSubType_RemoteIO; + #else + // Use the DefaultOutputUnit for output when no device is specified + // so we retain automatic output device switching when the default + // changes. Once we have complete support for device notifications + // and switching, we can use the AUHAL for everything. +- bool use_default_output = device == NULL && !is_input; +- if (use_default_output) { ++ if ((device->flags & DEV_SYSTEM_DEFAULT) && ++ (device->flags & DEV_OUTPUT)) { + desc.componentSubType = kAudioUnitSubType_DefaultOutput; + } else { + desc.componentSubType = kAudioUnitSubType_HALOutput; +@@ -1144,96 +2020,118 @@ audiounit_create_unit(AudioUnit * unit, + + rv = AudioComponentInstanceNew(comp, unit); + if (rv != noErr) { +- PRINT_ERROR_CODE("AudioComponentInstanceNew", rv); ++ LOG("AudioComponentInstanceNew rv=%d", rv); + return CUBEB_ERROR; + } ++ return CUBEB_OK; ++} + +- if (!use_default_output) { +- enable = 1; +- rv = AudioUnitSetProperty(*unit, kAudioOutputUnitProperty_EnableIO, +- is_input ? kAudioUnitScope_Input : kAudioUnitScope_Output, +- is_input ? AU_IN_BUS : AU_OUT_BUS, &enable, sizeof(UInt32)); +- if (rv != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO", rv); +- return CUBEB_ERROR; +- } +- +- enable = 0; +- rv = AudioUnitSetProperty(*unit, kAudioOutputUnitProperty_EnableIO, +- is_input ? kAudioUnitScope_Output : kAudioUnitScope_Input, +- is_input ? AU_OUT_BUS : AU_IN_BUS, &enable, sizeof(UInt32)); +- if (rv != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO", rv); +- return CUBEB_ERROR; +- } ++enum enable_state { ++ DISABLE, ++ ENABLE, ++}; + +- if (device == NULL) { +- assert(is_input); +- devid = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT); +- } else { +- devid = reinterpret_cast(device); +- } +- rv = AudioUnitSetProperty(*unit, kAudioOutputUnitProperty_CurrentDevice, +- kAudioUnitScope_Global, +- is_input ? AU_IN_BUS : AU_OUT_BUS, +- &devid, sizeof(AudioDeviceID)); +- if (rv != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_CurrentDevice", rv); +- return CUBEB_ERROR; +- } ++static int ++audiounit_enable_unit_scope(AudioUnit * unit, io_side side, enable_state state) ++{ ++ OSStatus rv; ++ UInt32 enable = state; ++ rv = AudioUnitSetProperty(*unit, kAudioOutputUnitProperty_EnableIO, ++ (side == io_side::INPUT) ? kAudioUnitScope_Input : kAudioUnitScope_Output, ++ (side == io_side::INPUT) ? AU_IN_BUS : AU_OUT_BUS, ++ &enable, ++ sizeof(UInt32)); ++ if (rv != noErr) { ++ LOG("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO rv=%d", rv); ++ return CUBEB_ERROR; + } +- + return CUBEB_OK; + } + + static int +-audiounit_init_input_linear_buffer(cubeb_stream * stream, uint32_t capacity) ++audiounit_create_unit(AudioUnit * unit, device_info * device) + { +- if (stream->input_desc.mFormatFlags & kAudioFormatFlagIsSignedInteger) { +- stream->input_linear_buffer = new auto_array_wrapper( +- new auto_array(capacity * +- stream->input_buffer_frames * +- stream->input_desc.mChannelsPerFrame) ); +- } else { +- stream->input_linear_buffer = new auto_array_wrapper( +- new auto_array(capacity * +- stream->input_buffer_frames * +- stream->input_desc.mChannelsPerFrame) ); ++ assert(*unit == nullptr); ++ assert(device); ++ ++ OSStatus rv; ++ int r; ++ ++ r = audiounit_new_unit_instance(unit, device); ++ if (r != CUBEB_OK) { ++ return r; + } ++ assert(*unit); + +- if (!stream->input_linear_buffer) { +- return CUBEB_ERROR; ++ if ((device->flags & DEV_SYSTEM_DEFAULT) && ++ (device->flags & DEV_OUTPUT)) { ++ return CUBEB_OK; + } + +- assert(stream->input_linear_buffer->length() == 0); + +- // Pre-buffer silence if needed +- if (capacity != 1) { +- size_t silence_size = stream->input_buffer_frames * +- stream->input_desc.mChannelsPerFrame; +- stream->input_linear_buffer->push_silence(silence_size); ++ if (device->flags & DEV_INPUT) { ++ r = audiounit_enable_unit_scope(unit, io_side::INPUT, ENABLE); ++ if (r != CUBEB_OK) { ++ LOG("Failed to enable audiounit input scope"); ++ return r; ++ } ++ r = audiounit_enable_unit_scope(unit, io_side::OUTPUT, DISABLE); ++ if (r != CUBEB_OK) { ++ LOG("Failed to disable audiounit output scope"); ++ return r; ++ } ++ } else if (device->flags & DEV_OUTPUT) { ++ r = audiounit_enable_unit_scope(unit, io_side::OUTPUT, ENABLE); ++ if (r != CUBEB_OK) { ++ LOG("Failed to enable audiounit output scope"); ++ return r; ++ } ++ r = audiounit_enable_unit_scope(unit, io_side::INPUT, DISABLE); ++ if (r != CUBEB_OK) { ++ LOG("Failed to disable audiounit input scope"); ++ return r; ++ } ++ } else { ++ assert(false); ++ } + +- assert(stream->input_linear_buffer->length() == silence_size); ++ rv = AudioUnitSetProperty(*unit, ++ kAudioOutputUnitProperty_CurrentDevice, ++ kAudioUnitScope_Global, ++ 0, ++ &device->id, sizeof(AudioDeviceID)); ++ if (rv != noErr) { ++ LOG("AudioUnitSetProperty/kAudioOutputUnitProperty_CurrentDevice rv=%d", rv); ++ return CUBEB_ERROR; + } + + return CUBEB_OK; + } + +-static void +-audiounit_destroy_input_linear_buffer(cubeb_stream * stream) ++static int ++audiounit_init_input_linear_buffer(cubeb_stream * stream, uint32_t capacity) + { +- delete stream->input_linear_buffer; ++ uint32_t size = capacity * stream->latency_frames * stream->input_desc.mChannelsPerFrame; ++ if (stream->input_desc.mFormatFlags & kAudioFormatFlagIsSignedInteger) { ++ stream->input_linear_buffer.reset(new auto_array_wrapper_impl(size)); ++ } else { ++ stream->input_linear_buffer.reset(new auto_array_wrapper_impl(size)); ++ } ++ assert(stream->input_linear_buffer->length() == 0); ++ ++ return CUBEB_OK; + } + + static uint32_t + audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + { + // For the 1st stream set anything within safe min-max +- assert(stm->context->active_streams > 0); +- if (stm->context->active_streams == 1) { +- return std::max(std::min(latency_frames, SAFE_MAX_LATENCY_FRAMES), ++ assert(audiounit_active_streams(stm->context) > 0); ++ if (audiounit_active_streams(stm->context) == 1) { ++ return max(min(latency_frames, SAFE_MAX_LATENCY_FRAMES), + SAFE_MIN_LATENCY_FRAMES); + } ++ assert(stm->output_unit); + + // If more than one stream operates in parallel + // allow only lower values of latency +@@ -1248,11 +2146,11 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + &output_buffer_size, + &size); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize", r); ++ LOG("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize rv=%d", r); + return 0; + } + +- output_buffer_size = std::max(std::min(output_buffer_size, SAFE_MAX_LATENCY_FRAMES), ++ output_buffer_size = max(min(output_buffer_size, SAFE_MAX_LATENCY_FRAMES), + SAFE_MIN_LATENCY_FRAMES); + } + +@@ -1265,18 +2163,18 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + &input_buffer_size, + &size); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize", r); ++ LOG("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize rv=%d", r); + return 0; + } + +- input_buffer_size = std::max(std::min(input_buffer_size, SAFE_MAX_LATENCY_FRAMES), ++ input_buffer_size = max(min(input_buffer_size, SAFE_MAX_LATENCY_FRAMES), + SAFE_MIN_LATENCY_FRAMES); + } + + // Every following active streams can only set smaller latency + UInt32 upper_latency_limit = 0; + if (input_buffer_size != 0 && output_buffer_size != 0) { +- upper_latency_limit = std::min(input_buffer_size, output_buffer_size); ++ upper_latency_limit = min(input_buffer_size, output_buffer_size); + } else if (input_buffer_size != 0) { + upper_latency_limit = input_buffer_size; + } else if (output_buffer_size != 0) { +@@ -1285,7 +2183,7 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + upper_latency_limit = SAFE_MAX_LATENCY_FRAMES; + } + +- return std::max(std::min(latency_frames, upper_latency_limit), ++ return max(min(latency_frames, upper_latency_limit), + SAFE_MIN_LATENCY_FRAMES); + } + +@@ -1300,18 +2198,18 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + static void + buffer_size_changed_callback(void * inClientData, + AudioUnit inUnit, +- AudioUnitPropertyID inPropertyID, +- AudioUnitScope inScope, +- AudioUnitElement inElement) ++ AudioUnitPropertyID inPropertyID, ++ AudioUnitScope inScope, ++ AudioUnitElement inElement) + { + cubeb_stream * stm = (cubeb_stream *)inClientData; + + AudioUnit au = inUnit; + AudioUnitScope au_scope = kAudioUnitScope_Input; + AudioUnitElement au_element = inElement; +- const char * au_type = "output"; ++ char const * au_type = "output"; + +- if (au == stm->input_unit) { ++ if (AU_IN_BUS == inElement) { + au_scope = kAudioUnitScope_Output; + au_type = "input"; + } +@@ -1342,24 +2240,17 @@ buffer_size_changed_callback(void * inClientData, + } + } + +-enum set_buffer_size_side { +- INPUT, +- OUTPUT, +-}; +- + static int +-audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buffer_size_side set_side) ++audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, io_side side) + { + AudioUnit au = stm->output_unit; + AudioUnitScope au_scope = kAudioUnitScope_Input; + AudioUnitElement au_element = AU_OUT_BUS; +- const char * au_type = "output"; + +- if (set_side == INPUT) { ++ if (side == io_side::INPUT) { + au = stm->input_unit; + au_scope = kAudioUnitScope_Output; + au_element = AU_IN_BUS; +- au_type = "input"; + } + + uint32_t buffer_frames = 0; +@@ -1371,16 +2262,12 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + &buffer_frames, + &size); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitGetProperty/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + return CUBEB_ERROR; + } + + if (new_size_frames == buffer_frames) { +- LOG("(%p) No need to update %s buffer size already %u frames", stm, au_type, buffer_frames); ++ LOG("(%p) No need to update %s buffer size already %u frames", stm, to_string(side), buffer_frames); + return CUBEB_OK; + } + +@@ -1389,11 +2276,7 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + buffer_size_changed_callback, + stm); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + return CUBEB_ERROR; + } + +@@ -1406,22 +2289,14 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + &new_size_frames, + sizeof(new_size_frames)); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitSetProperty/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + + r = AudioUnitRemovePropertyListenerWithUserData(au, + kAudioDevicePropertyBufferFrameSize, + buffer_size_changed_callback, + stm); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + } + + return CUBEB_ERROR; +@@ -1443,11 +2318,7 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + buffer_size_changed_callback, + stm); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + return CUBEB_ERROR; + } + +@@ -1456,13 +2327,15 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + return CUBEB_ERROR; + } + +- LOG("(%p) %s buffer size changed to %u frames.", stm, au_type, new_size_frames); ++ LOG("(%p) %s buffer size changed to %u frames.", stm, to_string(side), new_size_frames); + return CUBEB_OK; + } + + static int + audiounit_configure_input(cubeb_stream * stm) + { ++ assert(stm && stm->input_unit); ++ + int r = 0; + UInt32 size; + AURenderCallbackStruct aurcbs_in; +@@ -1481,7 +2354,7 @@ audiounit_configure_input(cubeb_stream * stm) + &input_hw_desc, + &size); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat", r); ++ LOG("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat rv=%d", r); + return CUBEB_ERROR; + } + stm->input_hw_rate = input_hw_desc.mSampleRate; +@@ -1495,8 +2368,7 @@ audiounit_configure_input(cubeb_stream * stm) + } + + // Use latency to set buffer size +- stm->input_buffer_frames = stm->latency_frames; +- r = audiounit_set_buffer_size(stm, stm->input_buffer_frames, INPUT); ++ r = audiounit_set_buffer_size(stm, stm->latency_frames, io_side::INPUT); + if (r != CUBEB_OK) { + LOG("(%p) Error in change input buffer size.", stm); + return CUBEB_ERROR; +@@ -1514,7 +2386,7 @@ audiounit_configure_input(cubeb_stream * stm) + &src_desc, + sizeof(AudioStreamBasicDescription)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat", r); ++ LOG("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat rv=%d", r); + return CUBEB_ERROR; + } + +@@ -1523,10 +2395,10 @@ audiounit_configure_input(cubeb_stream * stm) + kAudioUnitProperty_MaximumFramesPerSlice, + kAudioUnitScope_Global, + AU_IN_BUS, +- &stm->input_buffer_frames, ++ &stm->latency_frames, + sizeof(UInt32)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice", r); ++ LOG("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice rv=%d", r); + return CUBEB_ERROR; + } + +@@ -1540,7 +2412,6 @@ audiounit_configure_input(cubeb_stream * stm) + return CUBEB_ERROR; + } + +- assert(stm->input_unit != NULL); + aurcbs_in.inputProc = audiounit_input_callback; + aurcbs_in.inputProcRefCon = stm; + +@@ -1551,9 +2422,12 @@ audiounit_configure_input(cubeb_stream * stm) + &aurcbs_in, + sizeof(aurcbs_in)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback", r); ++ LOG("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback rv=%d", r); + return CUBEB_ERROR; + } ++ ++ stm->frames_read = 0; ++ + LOG("(%p) Input audiounit init successfully.", stm); + + return CUBEB_OK; +@@ -1562,6 +2436,8 @@ audiounit_configure_input(cubeb_stream * stm) + static int + audiounit_configure_output(cubeb_stream * stm) + { ++ assert(stm && stm->output_unit); ++ + int r; + AURenderCallbackStruct aurcbs_out; + UInt32 size; +@@ -1588,11 +2464,30 @@ audiounit_configure_output(cubeb_stream * stm) + &output_hw_desc, + &size); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/output/tkAudioUnitProperty_StreamFormat", r); ++ LOG("AudioUnitGetProperty/output/kAudioUnitProperty_StreamFormat rv=%d", r); + return CUBEB_ERROR; + } + stm->output_hw_rate = output_hw_desc.mSampleRate; + LOG("(%p) Output device sampling rate: %.2f", stm, output_hw_desc.mSampleRate); ++ stm->context->channels = output_hw_desc.mChannelsPerFrame; ++ ++ // Set the input layout to match the output device layout. ++ audiounit_layout_init(stm, io_side::OUTPUT); ++ if (stm->context->channels != stm->output_stream_params.channels || ++ stm->context->layout != stm->output_stream_params.layout) { ++ LOG("Incompatible channel layouts detected, setting up remixer"); ++ audiounit_init_mixer(stm); ++ // We will be remixing the data before it reaches the output device. ++ // We need to adjust the number of channels and other ++ // AudioStreamDescription details. ++ stm->output_desc.mChannelsPerFrame = stm->context->channels; ++ stm->output_desc.mBytesPerFrame = (stm->output_desc.mBitsPerChannel / 8) * ++ stm->output_desc.mChannelsPerFrame; ++ stm->output_desc.mBytesPerPacket = ++ stm->output_desc.mBytesPerFrame * stm->output_desc.mFramesPerPacket; ++ } else { ++ stm->mixer = nullptr; ++ } + + r = AudioUnitSetProperty(stm->output_unit, + kAudioUnitProperty_StreamFormat, +@@ -1601,11 +2496,11 @@ audiounit_configure_output(cubeb_stream * stm) + &stm->output_desc, + sizeof(AudioStreamBasicDescription)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat", r); ++ LOG("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat rv=%d", r); + return CUBEB_ERROR; + } + +- r = audiounit_set_buffer_size(stm, stm->latency_frames, OUTPUT); ++ r = audiounit_set_buffer_size(stm, stm->latency_frames, io_side::OUTPUT); + if (r != CUBEB_OK) { + LOG("(%p) Error in change output buffer size.", stm); + return CUBEB_ERROR; +@@ -1619,11 +2514,10 @@ audiounit_configure_output(cubeb_stream * stm) + &stm->latency_frames, + sizeof(UInt32)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_MaximumFramesPerSlice", r); ++ LOG("AudioUnitSetProperty/output/kAudioUnitProperty_MaximumFramesPerSlice rv=%d", r); + return CUBEB_ERROR; + } + +- assert(stm->output_unit != NULL); + aurcbs_out.inputProc = audiounit_output_callback; + aurcbs_out.inputProcRefCon = stm; + r = AudioUnitSetProperty(stm->output_unit, +@@ -1633,10 +2527,12 @@ audiounit_configure_output(cubeb_stream * stm) + &aurcbs_out, + sizeof(aurcbs_out)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback", r); ++ LOG("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback rv=%d", r); + return CUBEB_ERROR; + } + ++ stm->frames_written = 0; ++ + LOG("(%p) Output audiounit init successfully.", stm); + return CUBEB_OK; + } +@@ -1646,11 +2542,37 @@ audiounit_setup_stream(cubeb_stream * stm) + { + stm->mutex.assert_current_thread_owns(); + ++ if ((stm->input_stream_params.prefs & CUBEB_STREAM_PREF_LOOPBACK) || ++ (stm->output_stream_params.prefs & CUBEB_STREAM_PREF_LOOPBACK)) { ++ LOG("(%p) Loopback not supported for audiounit.", stm); ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ + int r = 0; ++ ++ device_info in_dev_info = stm->input_device; ++ device_info out_dev_info = stm->output_device; ++ ++ if (has_input(stm) && has_output(stm) && ++ stm->input_device.id != stm->output_device.id) { ++ r = audiounit_create_aggregate_device(stm); ++ if (r != CUBEB_OK) { ++ stm->aggregate_device_id = kAudioObjectUnknown; ++ LOG("(%p) Create aggregate devices failed.", stm); ++ // !!!NOTE: It is not necessary to return here. If it does not ++ // return it will fallback to the old implementation. The intention ++ // is to investigate how often it fails. I plan to remove ++ // it after a couple of weeks. ++ return r; ++ } else { ++ in_dev_info.id = out_dev_info.id = stm->aggregate_device_id; ++ in_dev_info.flags = DEV_INPUT; ++ out_dev_info.flags = DEV_OUTPUT; ++ } ++ } ++ + if (has_input(stm)) { +- r = audiounit_create_unit(&stm->input_unit, true, +- &stm->input_stream_params, +- stm->input_device); ++ r = audiounit_create_unit(&stm->input_unit, &in_dev_info); + if (r != CUBEB_OK) { + LOG("(%p) AudioUnit creation for input failed.", stm); + return r; +@@ -1658,9 +2580,7 @@ audiounit_setup_stream(cubeb_stream * stm) + } + + if (has_output(stm)) { +- r = audiounit_create_unit(&stm->output_unit, false, +- &stm->output_stream_params, +- stm->output_device); ++ r = audiounit_create_unit(&stm->output_unit, &out_dev_info); + if (r != CUBEB_OK) { + LOG("(%p) AudioUnit creation for output failed.", stm); + return r; +@@ -1668,20 +2588,20 @@ audiounit_setup_stream(cubeb_stream * stm) + } + + /* Latency cannot change if another stream is operating in parallel. In this case +- * latecy is set to the other stream value. */ +- if (stm->context->active_streams > 1) { ++ * latency is set to the other stream value. */ ++ if (audiounit_active_streams(stm->context) > 1) { + LOG("(%p) More than one active stream, use global latency.", stm); + stm->latency_frames = stm->context->global_latency_frames; + } else { + /* Silently clamp the latency down to the platform default, because we +- * synthetize the clock from the callbacks, and we want the clock to update +- * often. */ ++ * synthetize the clock from the callbacks, and we want the clock to update ++ * often. */ + stm->latency_frames = audiounit_clamp_latency(stm, stm->latency_frames); +- assert(stm->latency_frames); // Ungly error check +- audiounit_set_global_latency(stm, stm->latency_frames); ++ assert(stm->latency_frames); // Ugly error check ++ audiounit_set_global_latency(stm->context, stm->latency_frames); + } + +- /* Setup Input Stream! */ ++ /* Configure I/O stream */ + if (has_input(stm)) { + r = audiounit_configure_input(stm); + if (r != CUBEB_OK) { +@@ -1690,7 +2610,6 @@ audiounit_setup_stream(cubeb_stream * stm) + } + } + +- /* Setup Output Stream! */ + if (has_output(stm)) { + r = audiounit_configure_output(stm); + if (r != CUBEB_OK) { +@@ -1762,13 +2681,13 @@ audiounit_setup_stream(cubeb_stream * stm) + + /* Create resampler. Output params are unchanged + * because we do not need conversion on the output. */ +- stm->resampler = cubeb_resampler_create(stm, +- has_input(stm) ? &input_unconverted_params : NULL, +- has_output(stm) ? &stm->output_stream_params : NULL, +- target_sample_rate, +- stm->data_callback, +- stm->user_ptr, +- CUBEB_RESAMPLER_QUALITY_DESKTOP); ++ stm->resampler.reset(cubeb_resampler_create(stm, ++ has_input(stm) ? &input_unconverted_params : NULL, ++ has_output(stm) ? &stm->output_stream_params : NULL, ++ target_sample_rate, ++ stm->data_callback, ++ stm->user_ptr, ++ CUBEB_RESAMPLER_QUALITY_DESKTOP)); + if (!stm->resampler) { + LOG("(%p) Could not create resampler.", stm); + return CUBEB_ERROR; +@@ -1777,7 +2696,7 @@ audiounit_setup_stream(cubeb_stream * stm) + if (stm->input_unit != NULL) { + r = AudioUnitInitialize(stm->input_unit); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitInitialize/input", r); ++ LOG("AudioUnitInitialize/input rv=%d", r); + return CUBEB_ERROR; + } + } +@@ -1785,9 +2704,17 @@ audiounit_setup_stream(cubeb_stream * stm) + if (stm->output_unit != NULL) { + r = AudioUnitInitialize(stm->output_unit); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitInitialize/output", r); ++ LOG("AudioUnitInitialize/output rv=%d", r); + return CUBEB_ERROR; + } ++ ++ stm->current_latency_frames = audiounit_get_device_presentation_latency(stm->output_device.id, kAudioDevicePropertyScopeOutput); ++ ++ Float64 unit_s; ++ UInt32 size = sizeof(unit_s); ++ if (AudioUnitGetProperty(stm->output_unit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, 0, &unit_s, &size) == noErr) { ++ stm->current_latency_frames += static_cast(unit_s * stm->output_desc.mSampleRate); ++ } + } + + if (stm->input_unit && stm->output_unit) { +@@ -1799,13 +2726,24 @@ audiounit_setup_stream(cubeb_stream * stm) + + r = audiounit_install_device_changed_callback(stm); + if (r != CUBEB_OK) { +- LOG("(%p) Could not install the device change callback.", stm); +- return r; ++ LOG("(%p) Could not install all device change callback.", stm); + } + ++ + return CUBEB_OK; + } + ++cubeb_stream::cubeb_stream(cubeb * context) ++ : context(context) ++ , resampler(nullptr, cubeb_resampler_destroy) ++ , mixer(nullptr, cubeb_mixer_destroy) ++{ ++ PodZero(&input_desc, 1); ++ PodZero(&output_desc, 1); ++} ++ ++static void audiounit_stream_destroy_internal(cubeb_stream * stm); ++ + static int + audiounit_stream_init(cubeb * context, + cubeb_stream ** stream, +@@ -1819,72 +2757,64 @@ audiounit_stream_init(cubeb * context, + cubeb_state_callback state_callback, + void * user_ptr) + { +- cubeb_stream * stm; +- int r; +- + assert(context); ++ auto_lock context_lock(context->mutex); ++ audiounit_increment_active_streams(context); ++ unique_ptr stm(new cubeb_stream(context), ++ audiounit_stream_destroy_internal); ++ int r; + *stream = NULL; +- + assert(latency_frames > 0); +- if (context->limit_streams && context->active_streams >= CUBEB_STREAM_MAX) { +- LOG("Reached the stream limit of %d", CUBEB_STREAM_MAX); +- return CUBEB_ERROR; +- } +- +- stm = (cubeb_stream *) calloc(1, sizeof(cubeb_stream)); +- assert(stm); +- // Placement new to call the ctors of cubeb_stream members. +- new (stm) cubeb_stream(); + + /* These could be different in the future if we have both + * full-duplex stream and different devices for input vs output. */ +- stm->context = context; + stm->data_callback = data_callback; + stm->state_callback = state_callback; + stm->user_ptr = user_ptr; + stm->latency_frames = latency_frames; +- stm->device_changed_callback = NULL; ++ ++ if ((input_device && !input_stream_params) || ++ (output_device && !output_stream_params)) { ++ return CUBEB_ERROR_INVALID_PARAMETER; ++ } + if (input_stream_params) { + stm->input_stream_params = *input_stream_params; +- stm->input_device = input_device; +- stm->is_default_input = input_device == nullptr || +- (audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT) == +- reinterpret_cast(input_device)); ++ r = audiounit_set_device_info(stm.get(), reinterpret_cast(input_device), io_side::INPUT); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Fail to set device info for input.", stm.get()); ++ return r; ++ } + } + if (output_stream_params) { + stm->output_stream_params = *output_stream_params; +- stm->output_device = output_device; ++ r = audiounit_set_device_info(stm.get(), reinterpret_cast(output_device), io_side::OUTPUT); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Fail to set device info for output.", stm.get()); ++ return r; ++ } + } + +- /* Init data members where necessary */ +- stm->hw_latency_frames = UINT64_MAX; +- +- stm->switching_device = false; +- +- auto_lock context_lock(context->mutex); + { + // It's not critical to lock here, because no other thread has been started + // yet, but it allows to assert that the lock has been taken in + // `audiounit_setup_stream`. +- context->active_streams += 1; + auto_lock lock(stm->mutex); +- r = audiounit_setup_stream(stm); ++ r = audiounit_setup_stream(stm.get()); + } + + if (r != CUBEB_OK) { +- LOG("(%p) Could not setup the audiounit stream.", stm); +- audiounit_stream_destroy(stm); ++ LOG("(%p) Could not setup the audiounit stream.", stm.get()); + return r; + } + +- r = audiounit_install_system_changed_callback(stm); ++ r = audiounit_install_system_changed_callback(stm.get()); + if (r != CUBEB_OK) { +- LOG("(%p) Could not install the device change callback.", stm); ++ LOG("(%p) Could not install the device change callback.", stm.get()); + return r; + } + +- *stream = stm; +- LOG("Cubeb stream (%p) init successful.", stm); ++ *stream = stm.release(); ++ LOG("(%p) Cubeb stream init successful.", *stream); + return CUBEB_OK; + } + +@@ -1896,64 +2826,86 @@ audiounit_close_stream(cubeb_stream *stm) + if (stm->input_unit) { + AudioUnitUninitialize(stm->input_unit); + AudioComponentInstanceDispose(stm->input_unit); ++ stm->input_unit = nullptr; + } + +- audiounit_destroy_input_linear_buffer(stm); ++ stm->input_linear_buffer.reset(); + + if (stm->output_unit) { + AudioUnitUninitialize(stm->output_unit); + AudioComponentInstanceDispose(stm->output_unit); ++ stm->output_unit = nullptr; + } + +- cubeb_resampler_destroy(stm->resampler); ++ stm->resampler.reset(); ++ stm->mixer.reset(); ++ ++ if (stm->aggregate_device_id != kAudioObjectUnknown) { ++ audiounit_destroy_aggregate_device(stm->plugin_id, &stm->aggregate_device_id); ++ stm->aggregate_device_id = kAudioObjectUnknown; ++ } + } + + static void +-audiounit_stream_destroy(cubeb_stream * stm) ++audiounit_stream_destroy_internal(cubeb_stream *stm) + { +- stm->shutdown = true; ++ stm->context->mutex.assert_current_thread_owns(); + + int r = audiounit_uninstall_system_changed_callback(stm); + if (r != CUBEB_OK) { + LOG("(%p) Could not uninstall the device changed callback", stm); + } +- + r = audiounit_uninstall_device_changed_callback(stm); + if (r != CUBEB_OK) { +- LOG("(%p) Could not uninstall the device changed callback", stm); ++ LOG("(%p) Could not uninstall all device change listeners", stm); + } + +- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); ++ auto_lock lock(stm->mutex); ++ audiounit_close_stream(stm); ++ assert(audiounit_active_streams(stm->context) >= 1); ++ audiounit_decrement_active_streams(stm->context); ++} ++ ++static void ++audiounit_stream_destroy(cubeb_stream * stm) ++{ ++ if (!stm->shutdown.load()){ ++ auto_lock context_lock(stm->context->mutex); ++ audiounit_stream_stop_internal(stm); ++ stm->shutdown = true; ++ } + ++ stm->destroy_pending = true; + // Execute close in serial queue to avoid collision + // with reinit when un/plug devices + dispatch_sync(stm->context->serial_queue, ^() { +- auto_lock lock(stm->mutex); +- audiounit_close_stream(stm); ++ auto_lock context_lock(stm->context->mutex); ++ audiounit_stream_destroy_internal(stm); + }); + +- assert(stm->context->active_streams >= 1); +- stm->context->active_streams -= 1; +- + LOG("Cubeb stream (%p) destroyed successful.", stm); +- +- stm->~cubeb_stream(); +- free(stm); ++ delete stm; + } + +-void ++static int + audiounit_stream_start_internal(cubeb_stream * stm) + { + OSStatus r; + if (stm->input_unit != NULL) { + r = AudioOutputUnitStart(stm->input_unit); +- assert(r == 0); ++ if (r != noErr) { ++ LOG("AudioOutputUnitStart (input) rv=%d", r); ++ return CUBEB_ERROR; ++ } + } + if (stm->output_unit != NULL) { + r = AudioOutputUnitStart(stm->output_unit); +- assert(r == 0); ++ if (r != noErr) { ++ LOG("AudioOutputUnitStart (output) rv=%d", r); ++ return CUBEB_ERROR; ++ } + } ++ return CUBEB_OK; + } + + static int +@@ -1963,7 +2915,10 @@ audiounit_stream_start(cubeb_stream * stm) + stm->shutdown = false; + stm->draining = false; + +- audiounit_stream_start_internal(stm); ++ int r = audiounit_stream_start_internal(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } + + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); + +@@ -2002,9 +2957,12 @@ audiounit_stream_stop(cubeb_stream * stm) + static int + audiounit_stream_get_position(cubeb_stream * stm, uint64_t * position) + { +- auto_lock lock(stm->mutex); +- +- *position = stm->frames_played; ++ assert(stm); ++ if (stm->current_latency_frames > stm->frames_played) { ++ *position = 0; ++ } else { ++ *position = stm->frames_played - stm->current_latency_frames; ++ } + return CUBEB_OK; + } + +@@ -2015,74 +2973,7 @@ audiounit_stream_get_latency(cubeb_stream * stm, uint32_t * latency) + //TODO + return CUBEB_ERROR_NOT_SUPPORTED; + #else +- auto_lock lock(stm->mutex); +- if (stm->hw_latency_frames == UINT64_MAX) { +- UInt32 size; +- uint32_t device_latency_frames, device_safety_offset; +- double unit_latency_sec; +- AudioDeviceID output_device_id; +- OSStatus r; +- AudioObjectPropertyAddress latency_address = { +- kAudioDevicePropertyLatency, +- kAudioDevicePropertyScopeOutput, +- kAudioObjectPropertyElementMaster +- }; +- AudioObjectPropertyAddress safety_offset_address = { +- kAudioDevicePropertySafetyOffset, +- kAudioDevicePropertyScopeOutput, +- kAudioObjectPropertyElementMaster +- }; +- +- r = audiounit_get_output_device_id(&output_device_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- size = sizeof(unit_latency_sec); +- r = AudioUnitGetProperty(stm->output_unit, +- kAudioUnitProperty_Latency, +- kAudioUnitScope_Global, +- 0, +- &unit_latency_sec, +- &size); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/kAudioUnitProperty_Latency", r); +- return CUBEB_ERROR; +- } +- +- size = sizeof(device_latency_frames); +- r = AudioObjectGetPropertyData(output_device_id, +- &latency_address, +- 0, +- NULL, +- &size, +- &device_latency_frames); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetPropertyData/latency_frames", r); +- return CUBEB_ERROR; +- } +- +- size = sizeof(device_safety_offset); +- r = AudioObjectGetPropertyData(output_device_id, +- &safety_offset_address, +- 0, +- NULL, +- &size, +- &device_safety_offset); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetPropertyData/safety_offset", r); +- return CUBEB_ERROR; +- } +- +- /* This part is fixed and depend on the stream parameter and the hardware. */ +- stm->hw_latency_frames = +- static_cast(unit_latency_sec * stm->output_desc.mSampleRate) +- + device_latency_frames +- + device_safety_offset; +- } +- +- *latency = stm->hw_latency_frames + stm->current_latency_frames; +- ++ *latency = stm->total_output_latency_frames; + return CUBEB_OK; + #endif + } +@@ -2102,119 +2993,110 @@ audiounit_stream_get_volume(cubeb_stream * stm, float * volume) + return CUBEB_OK; + } + +-int audiounit_stream_set_volume(cubeb_stream * stm, float volume) ++static int ++audiounit_stream_set_volume(cubeb_stream * stm, float volume) + { ++ assert(stm->output_unit); + OSStatus r; +- + r = AudioUnitSetParameter(stm->output_unit, + kHALOutputParam_Volume, + kAudioUnitScope_Global, + 0, volume, 0); + + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetParameter/kHALOutputParam_Volume", r); ++ LOG("AudioUnitSetParameter/kHALOutputParam_Volume rv=%d", r); + return CUBEB_ERROR; + } + return CUBEB_OK; + } + +-int audiounit_stream_set_panning(cubeb_stream * stm, float panning) ++unique_ptr convert_uint32_into_string(UInt32 data) + { +- if (stm->output_desc.mChannelsPerFrame > 2) { +- return CUBEB_ERROR_INVALID_PARAMETER; ++ // Simply create an empty string if no data. ++ size_t size = data == 0 ? 0 : 4; // 4 bytes for uint32. ++ auto str = unique_ptr { new char[size + 1] }; // + 1 for '\0'. ++ str[size] = '\0'; ++ if (size < 4) { ++ return str; + } + +- stm->panning.store(panning, std::memory_order_relaxed); +- return CUBEB_OK; ++ // Reverse 0xWXYZ into 0xZYXW. ++ str[0] = (char)(data >> 24); ++ str[1] = (char)(data >> 16); ++ str[2] = (char)(data >> 8); ++ str[3] = (char)(data); ++ return str; + } + +-int audiounit_stream_get_current_device(cubeb_stream * stm, +- cubeb_device ** const device) ++int audiounit_get_default_device_datasource(cubeb_device_type type, ++ UInt32 * data) + { +-#if TARGET_OS_IPHONE +- //TODO +- return CUBEB_ERROR_NOT_SUPPORTED; +-#else +- OSStatus r; +- UInt32 size; +- UInt32 data; +- char strdata[4]; +- AudioDeviceID output_device_id; +- AudioDeviceID input_device_id; +- +- AudioObjectPropertyAddress datasource_address = { +- kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, +- kAudioObjectPropertyElementMaster +- }; +- +- AudioObjectPropertyAddress datasource_address_input = { +- kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, +- kAudioObjectPropertyElementMaster +- }; +- +- *device = NULL; +- +- if (audiounit_get_output_device_id(&output_device_id) != CUBEB_OK) { +- return CUBEB_ERROR; +- } +- +- *device = new cubeb_device; +- if (!*device) { ++ AudioDeviceID id = audiounit_get_default_device_id(type); ++ if (id == kAudioObjectUnknown) { + return CUBEB_ERROR; + } +- PodZero(*device, 1); + +- size = sizeof(UInt32); +- /* This fails with some USB headset, so simply return an empty string. */ +- r = AudioObjectGetPropertyData(output_device_id, +- &datasource_address, +- 0, NULL, &size, &data); ++ UInt32 size = sizeof(*data); ++ /* This fails with some USB headsets (e.g., Plantronic .Audio 628). */ ++ OSStatus r = AudioObjectGetPropertyData(id, ++ type == CUBEB_DEVICE_TYPE_INPUT ? ++ &INPUT_DATA_SOURCE_PROPERTY_ADDRESS : ++ &OUTPUT_DATA_SOURCE_PROPERTY_ADDRESS, ++ 0, NULL, &size, data); + if (r != noErr) { +- size = 0; +- data = 0; +- } +- +- (*device)->output_name = new char[size + 1]; +- if (!(*device)->output_name) { +- return CUBEB_ERROR; ++ *data = 0; + } + +- // Turn the four chars packed into a uint32 into a string +- strdata[0] = (char)(data >> 24); +- strdata[1] = (char)(data >> 16); +- strdata[2] = (char)(data >> 8); +- strdata[3] = (char)(data); ++ return CUBEB_OK; ++} + +- memcpy((*device)->output_name, strdata, size); +- (*device)->output_name[size] = '\0'; ++int audiounit_get_default_device_name(cubeb_stream * stm, ++ cubeb_device * const device, ++ cubeb_device_type type) ++{ ++ assert(stm); ++ assert(device); + +- if (audiounit_get_input_device_id(&input_device_id) != CUBEB_OK) { +- return CUBEB_ERROR; ++ UInt32 data; ++ int r = audiounit_get_default_device_datasource(type, &data); ++ if (r != CUBEB_OK) { ++ return r; + } +- +- size = sizeof(UInt32); +- r = AudioObjectGetPropertyData(input_device_id, &datasource_address_input, 0, NULL, &size, &data); +- if (r != noErr) { +- LOG("(%p) Error when getting device !", stm); +- size = 0; +- data = 0; ++ char ** name = type == CUBEB_DEVICE_TYPE_INPUT ? ++ &device->input_name : &device->output_name; ++ *name = convert_uint32_into_string(data).release(); ++ if (!strlen(*name)) { // empty string. ++ LOG("(%p) name of %s device is empty!", stm, ++ type == CUBEB_DEVICE_TYPE_INPUT ? "input" : "output"); + } ++ return CUBEB_OK; ++} ++ + +- (*device)->input_name = new char[size + 1]; +- if (!(*device)->input_name) { ++int audiounit_stream_get_current_device(cubeb_stream * stm, ++ cubeb_device ** const device) ++{ ++#if TARGET_OS_IPHONE ++ //TODO ++ return CUBEB_ERROR_NOT_SUPPORTED; ++#else ++ *device = new cubeb_device; ++ if (!*device) { + return CUBEB_ERROR; + } ++ PodZero(*device, 1); + +- // Turn the four chars packed into a uint32 into a string +- strdata[0] = (char)(data >> 24); +- strdata[1] = (char)(data >> 16); +- strdata[2] = (char)(data >> 8); +- strdata[3] = (char)(data); ++ int r = audiounit_get_default_device_name(stm, *device, ++ CUBEB_DEVICE_TYPE_OUTPUT); ++ if (r != CUBEB_OK) { ++ return r; ++ } + +- memcpy((*device)->input_name, strdata, size); +- (*device)->input_name[size] = '\0'; ++ r = audiounit_get_default_device_name(stm, *device, ++ CUBEB_DEVICE_TYPE_INPUT); ++ if (r != CUBEB_OK) { ++ return r; ++ } + + return CUBEB_OK; + #endif +@@ -2232,52 +3114,14 @@ int audiounit_stream_device_destroy(cubeb_stream * /* stream */, + int audiounit_stream_register_device_changed_callback(cubeb_stream * stream, + cubeb_device_changed_callback device_changed_callback) + { ++ auto_lock dev_cb_lock(stream->device_changed_callback_lock); + /* Note: second register without unregister first causes 'nope' error. + * Current implementation requires unregister before register a new cb. */ +- assert(!stream->device_changed_callback); +- +- auto_lock lock(stream->mutex); +- ++ assert(!device_changed_callback || !stream->device_changed_callback); + stream->device_changed_callback = device_changed_callback; +- + return CUBEB_OK; + } + +-static OSStatus +-audiounit_get_devices(AudioObjectID ** devices, uint32_t * count) +-{ +- OSStatus ret; +- UInt32 size = 0; +- AudioObjectPropertyAddress adr = { kAudioHardwarePropertyDevices, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster }; +- +- ret = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &adr, 0, NULL, &size); +- if (ret != noErr) { +- return ret; +- } +- +- *count = static_cast(size / sizeof(AudioObjectID)); +- if (size >= sizeof(AudioObjectID)) { +- if (*devices != NULL) { +- delete [] (*devices); +- } +- *devices = new AudioObjectID[*count]; +- PodZero(*devices, *count); +- +- ret = AudioObjectGetPropertyData(kAudioObjectSystemObject, &adr, 0, NULL, &size, (void *)*devices); +- if (ret != noErr) { +- delete [] (*devices); +- *devices = NULL; +- } +- } else { +- *devices = NULL; +- ret = -1; +- } +- +- return ret; +-} +- + static char * + audiounit_strref_to_cstr_utf8(CFStringRef strref) + { +@@ -2288,11 +3132,12 @@ audiounit_strref_to_cstr_utf8(CFStringRef strref) + } + + len = CFStringGetLength(strref); +- size = CFStringGetMaximumSizeForEncoding(len, kCFStringEncodingUTF8); +- ret = static_cast(malloc(size)); ++ // Add 1 to size to allow for '\0' termination character. ++ size = CFStringGetMaximumSizeForEncoding(len, kCFStringEncodingUTF8) + 1; ++ ret = new char[size]; + + if (!CFStringGetCString(strref, ret, size, kCFStringEncodingUTF8)) { +- free(ret); ++ delete [] ret; + ret = NULL; + } + +@@ -2339,19 +3184,18 @@ audiounit_get_available_samplerate(AudioObjectID devid, AudioObjectPropertyScope + AudioValueRange range; + if (AudioObjectHasProperty(devid, &adr) && + AudioObjectGetPropertyDataSize(devid, &adr, 0, NULL, &size) == noErr) { +- uint32_t i, count = size / sizeof(AudioValueRange); +- AudioValueRange * ranges = new AudioValueRange[count]; ++ uint32_t count = size / sizeof(AudioValueRange); ++ vector ranges(count); + range.mMinimum = 9999999999.0; + range.mMaximum = 0.0; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, ranges) == noErr) { +- for (i = 0; i < count; i++) { ++ if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, ranges.data()) == noErr) { ++ for (uint32_t i = 0; i < count; i++) { + if (ranges[i].mMaximum > range.mMaximum) + range.mMaximum = ranges[i].mMaximum; + if (ranges[i].mMinimum < range.mMinimum) + range.mMinimum = ranges[i].mMinimum; + } + } +- delete [] ranges; + *max = static_cast(range.mMaximum); + *min = static_cast(range.mMinimum); + } else { +@@ -2364,7 +3208,7 @@ static UInt32 + audiounit_get_device_presentation_latency(AudioObjectID devid, AudioObjectPropertyScope scope) + { + AudioObjectPropertyAddress adr = { 0, scope, kAudioObjectPropertyElementMaster }; +- UInt32 size, dev, stream = 0, offset; ++ UInt32 size, dev, stream = 0; + AudioStreamID sid[1]; + + adr.mSelector = kAudioDevicePropertyLatency; +@@ -2381,216 +3225,249 @@ audiounit_get_device_presentation_latency(AudioObjectID devid, AudioObjectProper + AudioObjectGetPropertyData(sid[0], &adr, 0, NULL, &size, &stream); + } + +- adr.mSelector = kAudioDevicePropertySafetyOffset; +- size = sizeof(UInt32); +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &offset) != noErr) { +- offset = 0; +- } +- +- return dev + stream + offset; ++ return dev + stream; + } + +-static cubeb_device_info * +-audiounit_create_device_from_hwdev(AudioObjectID devid, cubeb_device_type type) ++static int ++audiounit_create_device_from_hwdev(cubeb_device_info * dev_info, AudioObjectID devid, cubeb_device_type type) + { + AudioObjectPropertyAddress adr = { 0, 0, kAudioObjectPropertyElementMaster }; +- UInt32 size, ch, latency; +- cubeb_device_info * ret; +- CFStringRef str = NULL; +- AudioValueRange range; ++ UInt32 size; + + if (type == CUBEB_DEVICE_TYPE_OUTPUT) { + adr.mScope = kAudioDevicePropertyScopeOutput; + } else if (type == CUBEB_DEVICE_TYPE_INPUT) { + adr.mScope = kAudioDevicePropertyScopeInput; + } else { +- return NULL; ++ return CUBEB_ERROR; + } + +- ch = audiounit_get_channel_count(devid, adr.mScope); ++ UInt32 ch = audiounit_get_channel_count(devid, adr.mScope); + if (ch == 0) { +- return NULL; ++ return CUBEB_ERROR; + } + +- ret = new cubeb_device_info; +- PodZero(ret, 1); ++ PodZero(dev_info, 1); + ++ CFStringRef device_id_str = nullptr; + size = sizeof(CFStringRef); + adr.mSelector = kAudioDevicePropertyDeviceUID; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &str) == noErr && str != NULL) { +- ret->device_id = audiounit_strref_to_cstr_utf8(str); +- ret->devid = (cubeb_devid)(size_t)devid; +- ret->group_id = strdup(ret->device_id); +- CFRelease(str); ++ OSStatus ret = AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &device_id_str); ++ if ( ret == noErr && device_id_str != NULL) { ++ dev_info->device_id = audiounit_strref_to_cstr_utf8(device_id_str); ++ static_assert(sizeof(cubeb_devid) >= sizeof(decltype(devid)), "cubeb_devid can't represent devid"); ++ dev_info->devid = reinterpret_cast(devid); ++ dev_info->group_id = dev_info->device_id; ++ CFRelease(device_id_str); + } + +- size = sizeof(CFStringRef); +- adr.mSelector = kAudioObjectPropertyName; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &str) == noErr && str != NULL) { +- UInt32 ds; +- size = sizeof(UInt32); +- adr.mSelector = kAudioDevicePropertyDataSource; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &ds) == noErr) { +- CFStringRef dsname; +- AudioValueTranslation trl = { &ds, sizeof(ds), &dsname, sizeof(dsname) }; +- adr.mSelector = kAudioDevicePropertyDataSourceNameForIDCFString; +- size = sizeof(AudioValueTranslation); +- // If there is a datasource for this device, use it instead of the device +- // name. +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &trl) == noErr) { +- CFRelease(str); +- str = dsname; +- } +- } ++ CFStringRef friendly_name_str = nullptr; ++ UInt32 ds; ++ size = sizeof(UInt32); ++ adr.mSelector = kAudioDevicePropertyDataSource; ++ ret = AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &ds); ++ if (ret == noErr) { ++ AudioValueTranslation trl = { &ds, sizeof(ds), &friendly_name_str, sizeof(CFStringRef) }; ++ adr.mSelector = kAudioDevicePropertyDataSourceNameForIDCFString; ++ size = sizeof(AudioValueTranslation); ++ AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &trl); ++ } ++ ++ // If there is no datasource for this device, fall back to the ++ // device name. ++ if (!friendly_name_str) { ++ size = sizeof(CFStringRef); ++ adr.mSelector = kAudioObjectPropertyName; ++ AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &friendly_name_str); ++ } + +- ret->friendly_name = audiounit_strref_to_cstr_utf8(str); +- CFRelease(str); ++ if (friendly_name_str) { ++ dev_info->friendly_name = audiounit_strref_to_cstr_utf8(friendly_name_str); ++ CFRelease(friendly_name_str); ++ } else { ++ // Couldn't get a datasource name nor a device name, return a ++ // valid string of length 0. ++ char * fallback_name = new char[1]; ++ fallback_name[0] = '\0'; ++ dev_info->friendly_name = fallback_name; + } + ++ CFStringRef vendor_name_str = nullptr; + size = sizeof(CFStringRef); + adr.mSelector = kAudioObjectPropertyManufacturer; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &str) == noErr && str != NULL) { +- ret->vendor_name = audiounit_strref_to_cstr_utf8(str); +- CFRelease(str); ++ ret = AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &vendor_name_str); ++ if (ret == noErr && vendor_name_str != NULL) { ++ dev_info->vendor_name = audiounit_strref_to_cstr_utf8(vendor_name_str); ++ CFRelease(vendor_name_str); + } + +- ret->type = type; +- ret->state = CUBEB_DEVICE_STATE_ENABLED; +- ret->preferred = (devid == audiounit_get_default_device_id(type)) ? ++ dev_info->type = type; ++ dev_info->state = CUBEB_DEVICE_STATE_ENABLED; ++ dev_info->preferred = (devid == audiounit_get_default_device_id(type)) ? + CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE; + +- ret->max_channels = ch; +- ret->format = (cubeb_device_fmt)CUBEB_DEVICE_FMT_ALL; /* CoreAudio supports All! */ ++ dev_info->max_channels = ch; ++ dev_info->format = (cubeb_device_fmt)CUBEB_DEVICE_FMT_ALL; /* CoreAudio supports All! */ + /* kAudioFormatFlagsAudioUnitCanonical is deprecated, prefer floating point */ +- ret->default_format = CUBEB_DEVICE_FMT_F32NE; ++ dev_info->default_format = CUBEB_DEVICE_FMT_F32NE; + audiounit_get_available_samplerate(devid, adr.mScope, +- &ret->min_rate, &ret->max_rate, &ret->default_rate); ++ &dev_info->min_rate, &dev_info->max_rate, &dev_info->default_rate); + +- latency = audiounit_get_device_presentation_latency(devid, adr.mScope); ++ UInt32 latency = audiounit_get_device_presentation_latency(devid, adr.mScope); + ++ AudioValueRange range; + adr.mSelector = kAudioDevicePropertyBufferFrameSizeRange; + size = sizeof(AudioValueRange); +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &range) == noErr) { +- ret->latency_lo = latency + range.mMinimum; +- ret->latency_hi = latency + range.mMaximum; ++ ret = AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &range); ++ if (ret == noErr) { ++ dev_info->latency_lo = latency + range.mMinimum; ++ dev_info->latency_hi = latency + range.mMaximum; + } else { +- ret->latency_lo = 10 * ret->default_rate / 1000; /* Default to 10ms */ +- ret->latency_hi = 100 * ret->default_rate / 1000; /* Default to 100ms */ ++ dev_info->latency_lo = 10 * dev_info->default_rate / 1000; /* Default to 10ms */ ++ dev_info->latency_hi = 100 * dev_info->default_rate / 1000; /* Default to 100ms */ + } + +- return ret; ++ return CUBEB_OK; ++} ++ ++bool ++is_aggregate_device(cubeb_device_info * device_info) ++{ ++ assert(device_info->friendly_name); ++ return !strncmp(device_info->friendly_name, PRIVATE_AGGREGATE_DEVICE_NAME, ++ strlen(PRIVATE_AGGREGATE_DEVICE_NAME)); + } + + static int + audiounit_enumerate_devices(cubeb * /* context */, cubeb_device_type type, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { +- AudioObjectID * hwdevs = NULL; +- uint32_t i, hwdevcount = 0; +- OSStatus err; ++ vector input_devs; ++ vector output_devs; + +- if ((err = audiounit_get_devices(&hwdevs, &hwdevcount)) != noErr) { +- return CUBEB_ERROR; ++ // Count number of input and output devices. This is not ++ // necessarily the same as the count of raw devices supported by the ++ // system since, for example, with Soundflower installed, some ++ // devices may report as being both input *and* output and cubeb ++ // separates those into two different devices. ++ ++ if (type & CUBEB_DEVICE_TYPE_OUTPUT) { ++ output_devs = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_OUTPUT); + } + +- *collection = static_cast(malloc(sizeof(cubeb_device_collection) + +- sizeof(cubeb_device_info*) * (hwdevcount > 0 ? hwdevcount - 1 : 0))); +- (*collection)->count = 0; ++ if (type & CUBEB_DEVICE_TYPE_INPUT) { ++ input_devs = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_INPUT); ++ } + +- if (hwdevcount > 0) { +- cubeb_device_info * cur; ++ auto devices = new cubeb_device_info[output_devs.size() + input_devs.size()]; ++ collection->count = 0; + +- if (type & CUBEB_DEVICE_TYPE_OUTPUT) { +- for (i = 0; i < hwdevcount; i++) { +- if ((cur = audiounit_create_device_from_hwdev(hwdevs[i], CUBEB_DEVICE_TYPE_OUTPUT)) != NULL) +- (*collection)->device[(*collection)->count++] = cur; ++ if (type & CUBEB_DEVICE_TYPE_OUTPUT) { ++ for (auto dev: output_devs) { ++ auto device = &devices[collection->count]; ++ auto err = audiounit_create_device_from_hwdev(device, dev, CUBEB_DEVICE_TYPE_OUTPUT); ++ if (err != CUBEB_OK || is_aggregate_device(device)) { ++ continue; + } ++ collection->count += 1; + } ++ } + +- if (type & CUBEB_DEVICE_TYPE_INPUT) { +- for (i = 0; i < hwdevcount; i++) { +- if ((cur = audiounit_create_device_from_hwdev(hwdevs[i], CUBEB_DEVICE_TYPE_INPUT)) != NULL) +- (*collection)->device[(*collection)->count++] = cur; ++ if (type & CUBEB_DEVICE_TYPE_INPUT) { ++ for (auto dev: input_devs) { ++ auto device = &devices[collection->count]; ++ auto err = audiounit_create_device_from_hwdev(device, dev, CUBEB_DEVICE_TYPE_INPUT); ++ if (err != CUBEB_OK || is_aggregate_device(device)) { ++ continue; + } ++ collection->count += 1; + } + } + +- delete [] hwdevs; ++ if (collection->count > 0) { ++ collection->device = devices; ++ } else { ++ delete [] devices; ++ collection->device = NULL; ++ } + + return CUBEB_OK; + } + +-/* qsort compare method. */ +-int compare_devid(const void * a, const void * b) ++static void ++audiounit_device_destroy(cubeb_device_info * device) + { +- return (*(AudioObjectID*)a - *(AudioObjectID*)b); ++ delete [] device->device_id; ++ delete [] device->friendly_name; ++ delete [] device->vendor_name; + } + +-static uint32_t +-audiounit_get_devices_of_type(cubeb_device_type devtype, AudioObjectID ** devid_array) ++static int ++audiounit_device_collection_destroy(cubeb * /* context */, ++ cubeb_device_collection * collection) + { +- assert(devid_array == NULL || *devid_array == NULL); ++ for (size_t i = 0; i < collection->count; i++) { ++ audiounit_device_destroy(&collection->device[i]); ++ } ++ delete [] collection->device; ++ ++ return CUBEB_OK; ++} + +- AudioObjectPropertyAddress adr = { kAudioHardwarePropertyDevices, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster }; ++static vector ++audiounit_get_devices_of_type(cubeb_device_type devtype) ++{ + UInt32 size = 0; +- OSStatus ret = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &adr, 0, NULL, &size); ++ OSStatus ret = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, ++ &DEVICES_PROPERTY_ADDRESS, 0, ++ NULL, &size); + if (ret != noErr) { +- return 0; ++ return vector(); + } +- /* Total number of input and output devices. */ +- uint32_t count = (uint32_t)(size / sizeof(AudioObjectID)); +- +- AudioObjectID devices[count]; +- ret = AudioObjectGetPropertyData(kAudioObjectSystemObject, &adr, 0, NULL, &size, &devices); ++ vector devices(size / sizeof(AudioObjectID)); ++ ret = AudioObjectGetPropertyData(kAudioObjectSystemObject, ++ &DEVICES_PROPERTY_ADDRESS, 0, NULL, &size, ++ devices.data()); + if (ret != noErr) { +- return 0; ++ return vector(); ++ } ++ ++ // Remove the aggregate device from the list of devices (if any). ++ for (auto it = devices.begin(); it != devices.end();) { ++ CFStringRef name = get_device_name(*it); ++ if (name && CFStringFind(name, CFSTR("CubebAggregateDevice"), 0).location != ++ kCFNotFound) { ++ it = devices.erase(it); ++ } else { ++ it++; ++ } ++ if (name) { ++ CFRelease(name); ++ } + } ++ + /* Expected sorted but did not find anything in the docs. */ +- qsort(devices, count, sizeof(AudioObjectID), compare_devid); ++ sort(devices.begin(), devices.end(), [](AudioObjectID a, AudioObjectID b) { ++ return a < b; ++ }); + + if (devtype == (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT)) { +- if (devid_array) { +- *devid_array = new AudioObjectID[count]; +- assert(*devid_array); +- memcpy(*devid_array, &devices, count * sizeof(AudioObjectID)); +- } +- return count; ++ return devices; + } + + AudioObjectPropertyScope scope = (devtype == CUBEB_DEVICE_TYPE_INPUT) ? + kAudioDevicePropertyScopeInput : + kAudioDevicePropertyScopeOutput; + +- uint32_t dev_count = 0; +- AudioObjectID devices_in_scope[count]; +- for(uint32_t i = 0; i < count; ++i) { ++ vector devices_in_scope; ++ for (uint32_t i = 0; i < devices.size(); ++i) { + /* For device in the given scope channel must be > 0. */ + if (audiounit_get_channel_count(devices[i], scope) > 0) { +- devices_in_scope[dev_count] = devices[i]; +- ++dev_count; ++ devices_in_scope.push_back(devices[i]); + } + } + +- if (devid_array && dev_count > 0) { +- *devid_array = new AudioObjectID[dev_count]; +- assert(*devid_array); +- memcpy(*devid_array, &devices_in_scope, dev_count * sizeof(AudioObjectID)); +- } +- return dev_count; +-} +- +-static uint32_t +-audiounit_equal_arrays(AudioObjectID * left, AudioObjectID * right, uint32_t size) +-{ +- /* Expected sorted arrays. */ +- for (uint32_t i = 0; i < size; ++i) { +- if (left[i] != right[i]) { +- return 0; +- } +- } +- return 1; ++ return devices_in_scope; + } + + static OSStatus +@@ -2600,33 +3477,32 @@ audiounit_collection_changed_callback(AudioObjectID /* inObjectID */, + void * inClientData) + { + cubeb * context = static_cast(inClientData); +- auto_lock lock(context->mutex); +- +- if (context->collection_changed_callback == NULL) { +- /* Listener removed while waiting in mutex, abort. */ +- return noErr; +- } + +- /* Differentiate input from output changes. */ +- if (context->collection_changed_devtype == CUBEB_DEVICE_TYPE_INPUT || +- context->collection_changed_devtype == CUBEB_DEVICE_TYPE_OUTPUT) { +- AudioObjectID * devices = NULL; +- uint32_t new_number_of_devices = audiounit_get_devices_of_type(context->collection_changed_devtype, &devices); +- /* When count is the same examine the devid for the case of coalescing. */ +- if (context->devtype_device_count == new_number_of_devices && +- audiounit_equal_arrays(devices, context->devtype_device_array, new_number_of_devices)) { +- /* Device changed for the other scope, ignore. */ +- delete [] devices; +- return noErr; ++ // This can be called from inside an AudioUnit function, dispatch to another queue. ++ dispatch_async(context->serial_queue, ^() { ++ auto_lock lock(context->mutex); ++ if (!context->input_collection_changed_callback && ++ !context->output_collection_changed_callback) { ++ /* Listener removed while waiting in mutex, abort. */ ++ return; + } +- /* Device on desired scope changed, reset counter and array. */ +- context->devtype_device_count = new_number_of_devices; +- /* Free the old array before replace. */ +- delete [] context->devtype_device_array; +- context->devtype_device_array = devices; +- } +- +- context->collection_changed_callback(context, context->collection_changed_user_ptr); ++ if (context->input_collection_changed_callback) { ++ vector devices = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_INPUT); ++ /* Elements in the vector expected sorted. */ ++ if (context->input_device_array != devices) { ++ context->input_device_array = devices; ++ context->input_collection_changed_callback(context, context->input_collection_changed_user_ptr); ++ } ++ } ++ if (context->output_collection_changed_callback) { ++ vector devices = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_OUTPUT); ++ /* Elements in the vector expected sorted. */ ++ if (context->output_device_array != devices) { ++ context->output_device_array = devices; ++ context->output_collection_changed_callback(context, context->output_collection_changed_user_ptr); ++ } ++ } ++ }); + return noErr; + } + +@@ -2636,62 +3512,65 @@ audiounit_add_device_listener(cubeb * context, + cubeb_device_collection_changed_callback collection_changed_callback, + void * user_ptr) + { ++ context->mutex.assert_current_thread_owns(); ++ assert(devtype & (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT)); + /* Note: second register without unregister first causes 'nope' error. + * Current implementation requires unregister before register a new cb. */ +- assert(context->collection_changed_callback == NULL); +- +- AudioObjectPropertyAddress devAddr; +- devAddr.mSelector = kAudioHardwarePropertyDevices; +- devAddr.mScope = kAudioObjectPropertyScopeGlobal; +- devAddr.mElement = kAudioObjectPropertyElementMaster; +- +- OSStatus ret = AudioObjectAddPropertyListener(kAudioObjectSystemObject, +- &devAddr, +- audiounit_collection_changed_callback, +- context); +- if (ret == noErr) { +- /* Expected zero after unregister. */ +- assert(context->devtype_device_count == 0); +- assert(context->devtype_device_array == NULL); +- /* Listener works for input and output. +- * When requested one of them we need to differentiate. */ +- if (devtype == CUBEB_DEVICE_TYPE_INPUT || +- devtype == CUBEB_DEVICE_TYPE_OUTPUT) { +- /* Used to differentiate input from output device changes. */ +- context->devtype_device_count = audiounit_get_devices_of_type(devtype, &context->devtype_device_array); +- } +- context->collection_changed_devtype = devtype; +- context->collection_changed_callback = collection_changed_callback; +- context->collection_changed_user_ptr = user_ptr; ++ assert((devtype & CUBEB_DEVICE_TYPE_INPUT) && !context->input_collection_changed_callback || ++ (devtype & CUBEB_DEVICE_TYPE_OUTPUT) && !context->output_collection_changed_callback); ++ ++ if (!context->input_collection_changed_callback && ++ !context->output_collection_changed_callback) { ++ OSStatus ret = AudioObjectAddPropertyListener(kAudioObjectSystemObject, ++ &DEVICES_PROPERTY_ADDRESS, ++ audiounit_collection_changed_callback, ++ context); ++ if (ret != noErr) { ++ return ret; ++ } + } +- return ret; ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ /* Expected empty after unregister. */ ++ assert(context->input_device_array.empty()); ++ context->input_device_array = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_INPUT); ++ context->input_collection_changed_callback = collection_changed_callback; ++ context->input_collection_changed_user_ptr = user_ptr; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ /* Expected empty after unregister. */ ++ assert(context->output_device_array.empty()); ++ context->output_device_array = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_OUTPUT); ++ context->output_collection_changed_callback = collection_changed_callback; ++ context->output_collection_changed_user_ptr = user_ptr; ++ } ++ return noErr; + } + + static OSStatus +-audiounit_remove_device_listener(cubeb * context) ++audiounit_remove_device_listener(cubeb * context, cubeb_device_type devtype) + { +- AudioObjectPropertyAddress devAddr; +- devAddr.mSelector = kAudioHardwarePropertyDevices; +- devAddr.mScope = kAudioObjectPropertyScopeGlobal; +- devAddr.mElement = kAudioObjectPropertyElementMaster; ++ context->mutex.assert_current_thread_owns(); + +- /* Note: unregister a non registered cb is not a problem, not checking. */ +- OSStatus ret = AudioObjectRemovePropertyListener(kAudioObjectSystemObject, +- &devAddr, +- audiounit_collection_changed_callback, +- context); +- if (ret == noErr) { +- /* Reset all values. */ +- context->collection_changed_devtype = CUBEB_DEVICE_TYPE_UNKNOWN; +- context->collection_changed_callback = NULL; +- context->collection_changed_user_ptr = NULL; +- context->devtype_device_count = 0; +- if (context->devtype_device_array) { +- delete [] context->devtype_device_array; +- context->devtype_device_array = NULL; +- } ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ context->input_collection_changed_callback = nullptr; ++ context->input_collection_changed_user_ptr = nullptr; ++ context->input_device_array.clear(); + } +- return ret; ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ context->output_collection_changed_callback = nullptr; ++ context->output_collection_changed_user_ptr = nullptr; ++ context->output_device_array.clear(); ++ } ++ ++ if (context->input_collection_changed_callback || ++ context->output_collection_changed_callback) { ++ return noErr; ++ } ++ /* Note: unregister a non registered cb is not a problem, not checking. */ ++ return AudioObjectRemovePropertyListener(kAudioObjectSystemObject, ++ &DEVICES_PROPERTY_ADDRESS, ++ audiounit_collection_changed_callback, ++ context); + } + + int audiounit_register_device_collection_changed(cubeb * context, +@@ -2699,14 +3578,18 @@ int audiounit_register_device_collection_changed(cubeb * context, + cubeb_device_collection_changed_callback collection_changed_callback, + void * user_ptr) + { ++ if (devtype == CUBEB_DEVICE_TYPE_UNKNOWN) { ++ return CUBEB_ERROR_INVALID_PARAMETER; ++ } + OSStatus ret; + auto_lock lock(context->mutex); + if (collection_changed_callback) { +- ret = audiounit_add_device_listener(context, devtype, ++ ret = audiounit_add_device_listener(context, ++ devtype, + collection_changed_callback, + user_ptr); + } else { +- ret = audiounit_remove_device_listener(context); ++ ret = audiounit_remove_device_listener(context, devtype); + } + return (ret == noErr) ? CUBEB_OK : CUBEB_ERROR; + } +@@ -2718,15 +3601,16 @@ cubeb_ops const audiounit_ops = { + /*.get_min_latency =*/ audiounit_get_min_latency, + /*.get_preferred_sample_rate =*/ audiounit_get_preferred_sample_rate, + /*.enumerate_devices =*/ audiounit_enumerate_devices, ++ /*.device_collection_destroy =*/ audiounit_device_collection_destroy, + /*.destroy =*/ audiounit_destroy, + /*.stream_init =*/ audiounit_stream_init, + /*.stream_destroy =*/ audiounit_stream_destroy, + /*.stream_start =*/ audiounit_stream_start, + /*.stream_stop =*/ audiounit_stream_stop, ++ /*.stream_reset_default_device =*/ nullptr, + /*.stream_get_position =*/ audiounit_stream_get_position, + /*.stream_get_latency =*/ audiounit_stream_get_latency, + /*.stream_set_volume =*/ audiounit_stream_set_volume, +- /*.stream_set_panning =*/ audiounit_stream_set_panning, + /*.stream_get_current_device =*/ audiounit_stream_get_current_device, + /*.stream_device_destroy =*/ audiounit_stream_device_destroy, + /*.stream_register_device_changed_callback =*/ audiounit_stream_register_device_changed_callback, +diff --git a/media/libcubeb/src/cubeb_jack.cpp b/media/libcubeb/src/cubeb_jack.cpp +index 8f995da66..1ab876c3f 100644 +--- a/media/libcubeb/src/cubeb_jack.cpp ++++ b/media/libcubeb/src/cubeb_jack.cpp +@@ -8,23 +8,20 @@ + */ + #define _DEFAULT_SOURCE + #define _BSD_SOURCE ++#ifndef __FreeBSD__ + #define _POSIX_SOURCE +-#include ++#endif + #include +-#include + #include +-#include +-#include + #include + #include +-#include +-#include + #include + #include + #include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + #include "cubeb_resampler.h" ++#include "cubeb_utils.h" + + #include + #include +@@ -98,7 +95,9 @@ static int cbjack_stream_device_destroy(cubeb_stream * stream, + cubeb_device * device); + static int cbjack_stream_get_current_device(cubeb_stream * stm, cubeb_device ** const device); + static int cbjack_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection); ++ cubeb_device_collection * collection); ++static int cbjack_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection); + static int cbjack_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_name, + cubeb_devid input_device, + cubeb_stream_params * input_stream_params, +@@ -121,15 +120,16 @@ static struct cubeb_ops const cbjack_ops = { + .get_min_latency = cbjack_get_min_latency, + .get_preferred_sample_rate = cbjack_get_preferred_sample_rate, + .enumerate_devices = cbjack_enumerate_devices, ++ .device_collection_destroy = cbjack_device_collection_destroy, + .destroy = cbjack_destroy, + .stream_init = cbjack_stream_init, + .stream_destroy = cbjack_stream_destroy, + .stream_start = cbjack_stream_start, + .stream_stop = cbjack_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = cbjack_stream_get_position, + .stream_get_latency = cbjack_get_latency, + .stream_set_volume = cbjack_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = cbjack_stream_get_current_device, + .stream_device_destroy = cbjack_stream_device_destroy, + .stream_register_device_changed_callback = NULL, +@@ -137,7 +137,10 @@ static struct cubeb_ops const cbjack_ops = { + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + + /**< Mutex for each stream */ + pthread_mutex_t mutex; +@@ -147,7 +150,6 @@ struct cubeb_stream { + + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; +- void * user_ptr; + cubeb_stream_params in_params; + cubeb_stream_params out_params; + +@@ -183,7 +185,6 @@ struct cubeb { + cubeb_stream streams[MAX_STREAMS]; + unsigned int active_streams; + +- cubeb_device_info * devinfo[2]; + cubeb_device_collection_changed_callback collection_changed_callback; + + bool active; +@@ -210,6 +211,9 @@ load_jack_lib(cubeb * context) + # endif + #else + context->libjack = dlopen("libjack.so.0", RTLD_LAZY); ++ if (!context->libjack) { ++ context->libjack = dlopen("libjack.so", RTLD_LAZY); ++ } + #endif + if (!context->libjack) { + return CUBEB_ERROR; +@@ -230,9 +234,10 @@ load_jack_lib(cubeb * context) + return CUBEB_OK; + } + +-static void ++static int + cbjack_connect_ports (cubeb_stream * stream) + { ++ int r = CUBEB_ERROR; + const char ** phys_in_ports = api_jack_get_ports (stream->context->jack_client, + NULL, NULL, + JackPortIsInput +@@ -242,7 +247,7 @@ cbjack_connect_ports (cubeb_stream * stream) + JackPortIsOutput + | JackPortIsPhysical); + +- if (*phys_in_ports == NULL) { ++ if (phys_in_ports == NULL || *phys_in_ports == NULL) { + goto skipplayback; + } + +@@ -252,9 +257,10 @@ cbjack_connect_ports (cubeb_stream * stream) + + api_jack_connect (stream->context->jack_client, src_port, phys_in_ports[c]); + } ++ r = CUBEB_OK; + + skipplayback: +- if (*phys_out_ports == NULL) { ++ if (phys_out_ports == NULL || *phys_out_ports == NULL) { + goto end; + } + // Connect inputs to capture +@@ -263,9 +269,15 @@ skipplayback: + + api_jack_connect (stream->context->jack_client, phys_out_ports[c], src_port); + } ++ r = CUBEB_OK; + end: +- api_jack_free(phys_out_ports); +- api_jack_free(phys_in_ports); ++ if (phys_out_ports) { ++ api_jack_free(phys_out_ports); ++ } ++ if (phys_in_ports) { ++ api_jack_free(phys_in_ports); ++ } ++ return r; + } + + static int +@@ -426,7 +438,6 @@ cbjack_process(jack_nframes_t nframes, void * arg) + return 0; + } + +- + static void + cbjack_deinterleave_playback_refill_float(cubeb_stream * stream, float ** in, float ** bufs_out, jack_nframes_t nframes) + { +@@ -439,7 +450,6 @@ cbjack_deinterleave_playback_refill_float(cubeb_stream * stream, float ** in, fl + long done_frames = 0; + long input_frames_count = (in != NULL) ? nframes : 0; + +- + done_frames = cubeb_resampler_fill(stream->resampler, + inptr, + &input_frames_count, +@@ -736,6 +746,12 @@ cbjack_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_ + if (input_device || output_device) + return CUBEB_ERROR_NOT_SUPPORTED; + ++ // Loopback is unsupported ++ if ((input_stream_params && (input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK)) || ++ (output_stream_params && (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK))) { ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ + *stream = NULL; + + // Find a free stream. +@@ -867,7 +883,11 @@ cbjack_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_ + } + } + +- cbjack_connect_ports(stm); ++ if (cbjack_connect_ports(stm) != CUBEB_OK) { ++ pthread_mutex_unlock(&stm->mutex); ++ cbjack_stream_destroy(stm); ++ return CUBEB_ERROR; ++ } + + *stream = stm; + +@@ -940,7 +960,6 @@ cbjack_stream_set_volume(cubeb_stream * stm, float volume) + return CUBEB_OK; + } + +- + static int + cbjack_stream_get_current_device(cubeb_stream * stm, cubeb_device ** const device) + { +@@ -978,70 +997,77 @@ cbjack_stream_device_destroy(cubeb_stream * /*stream*/, + return CUBEB_OK; + } + ++#define JACK_DEFAULT_IN "JACK capture" ++#define JACK_DEFAULT_OUT "JACK playback" ++ + static int + cbjack_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { + if (!context) + return CUBEB_ERROR; + + uint32_t rate; +- uint8_t i = 0; +- uint8_t j; + cbjack_get_preferred_sample_rate(context, &rate); +- const char * j_in = "JACK capture"; +- const char * j_out = "JACK playback"; ++ ++ cubeb_device_info * devices = new cubeb_device_info[2]; ++ if (!devices) ++ return CUBEB_ERROR; ++ PodZero(devices, 2); ++ collection->count = 0; + + if (type & CUBEB_DEVICE_TYPE_OUTPUT) { +- context->devinfo[i] = (cubeb_device_info *)malloc(sizeof(cubeb_device_info)); +- context->devinfo[i]->device_id = strdup(j_out); +- context->devinfo[i]->devid = context->devinfo[i]->device_id; +- context->devinfo[i]->friendly_name = strdup(j_out); +- context->devinfo[i]->group_id = strdup(j_out); +- context->devinfo[i]->vendor_name = strdup(j_out); +- context->devinfo[i]->type = CUBEB_DEVICE_TYPE_OUTPUT; +- context->devinfo[i]->state = CUBEB_DEVICE_STATE_ENABLED; +- context->devinfo[i]->preferred = CUBEB_DEVICE_PREF_ALL; +- context->devinfo[i]->format = CUBEB_DEVICE_FMT_F32NE; +- context->devinfo[i]->default_format = CUBEB_DEVICE_FMT_F32NE; +- context->devinfo[i]->max_channels = MAX_CHANNELS; +- context->devinfo[i]->min_rate = rate; +- context->devinfo[i]->max_rate = rate; +- context->devinfo[i]->default_rate = rate; +- context->devinfo[i]->latency_lo = 0; +- context->devinfo[i]->latency_hi = 0; +- i++; ++ cubeb_device_info * cur = &devices[collection->count]; ++ cur->device_id = JACK_DEFAULT_OUT; ++ cur->devid = (cubeb_devid) cur->device_id; ++ cur->friendly_name = JACK_DEFAULT_OUT; ++ cur->group_id = JACK_DEFAULT_OUT; ++ cur->vendor_name = JACK_DEFAULT_OUT; ++ cur->type = CUBEB_DEVICE_TYPE_OUTPUT; ++ cur->state = CUBEB_DEVICE_STATE_ENABLED; ++ cur->preferred = CUBEB_DEVICE_PREF_ALL; ++ cur->format = CUBEB_DEVICE_FMT_F32NE; ++ cur->default_format = CUBEB_DEVICE_FMT_F32NE; ++ cur->max_channels = MAX_CHANNELS; ++ cur->min_rate = rate; ++ cur->max_rate = rate; ++ cur->default_rate = rate; ++ cur->latency_lo = 0; ++ cur->latency_hi = 0; ++ collection->count +=1 ; + } + + if (type & CUBEB_DEVICE_TYPE_INPUT) { +- context->devinfo[i] = (cubeb_device_info *)malloc(sizeof(cubeb_device_info)); +- context->devinfo[i]->device_id = strdup(j_in); +- context->devinfo[i]->devid = context->devinfo[i]->device_id; +- context->devinfo[i]->friendly_name = strdup(j_in); +- context->devinfo[i]->group_id = strdup(j_in); +- context->devinfo[i]->vendor_name = strdup(j_in); +- context->devinfo[i]->type = CUBEB_DEVICE_TYPE_INPUT; +- context->devinfo[i]->state = CUBEB_DEVICE_STATE_ENABLED; +- context->devinfo[i]->preferred = CUBEB_DEVICE_PREF_ALL; +- context->devinfo[i]->format = CUBEB_DEVICE_FMT_F32NE; +- context->devinfo[i]->default_format = CUBEB_DEVICE_FMT_F32NE; +- context->devinfo[i]->max_channels = MAX_CHANNELS; +- context->devinfo[i]->min_rate = rate; +- context->devinfo[i]->max_rate = rate; +- context->devinfo[i]->default_rate = rate; +- context->devinfo[i]->latency_lo = 0; +- context->devinfo[i]->latency_hi = 0; +- i++; ++ cubeb_device_info * cur = &devices[collection->count]; ++ cur->device_id = JACK_DEFAULT_IN; ++ cur->devid = (cubeb_devid) cur->device_id; ++ cur->friendly_name = JACK_DEFAULT_IN; ++ cur->group_id = JACK_DEFAULT_IN; ++ cur->vendor_name = JACK_DEFAULT_IN; ++ cur->type = CUBEB_DEVICE_TYPE_INPUT; ++ cur->state = CUBEB_DEVICE_STATE_ENABLED; ++ cur->preferred = CUBEB_DEVICE_PREF_ALL; ++ cur->format = CUBEB_DEVICE_FMT_F32NE; ++ cur->default_format = CUBEB_DEVICE_FMT_F32NE; ++ cur->max_channels = MAX_CHANNELS; ++ cur->min_rate = rate; ++ cur->max_rate = rate; ++ cur->default_rate = rate; ++ cur->latency_lo = 0; ++ cur->latency_hi = 0; ++ collection->count += 1; + } + +- *collection = (cubeb_device_collection *) +- malloc(sizeof(cubeb_device_collection) + +- i * sizeof(cubeb_device_info *)); ++ collection->device = devices; + +- (*collection)->count = i; ++ return CUBEB_OK; ++} + +- for (j = 0; j < i; j++) { +- (*collection)->device[j] = context->devinfo[j]; +- } ++static int ++cbjack_device_collection_destroy(cubeb * /*ctx*/, ++ cubeb_device_collection * collection) ++{ ++ XASSERT(collection); ++ delete [] collection->device; + return CUBEB_OK; + } +diff --git a/media/libcubeb/src/cubeb_log.cpp b/media/libcubeb/src/cubeb_log.cpp +new file mode 100644 +index 000000000..54c7f4a15 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_log.cpp +@@ -0,0 +1,144 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++#define NOMINMAX ++ ++#include "cubeb_log.h" ++#include "cubeb_ringbuffer.h" ++#include ++#ifdef _WIN32 ++#include ++#else ++#include ++#endif ++ ++cubeb_log_level g_cubeb_log_level; ++cubeb_log_callback g_cubeb_log_callback; ++ ++/** The maximum size of a log message, after having been formatted. */ ++const size_t CUBEB_LOG_MESSAGE_MAX_SIZE = 256; ++/** The maximum number of log messages that can be queued before dropping ++ * messages. */ ++const size_t CUBEB_LOG_MESSAGE_QUEUE_DEPTH = 40; ++/** Number of milliseconds to wait before dequeuing log messages. */ ++#define CUBEB_LOG_BATCH_PRINT_INTERVAL_MS 10 ++ ++/** ++ * This wraps an inline buffer, that represents a log message, that must be ++ * null-terminated. ++ * This class should not use system calls or other potentially blocking code. ++ */ ++class cubeb_log_message ++{ ++public: ++ cubeb_log_message() ++ { ++ *storage = '\0'; ++ } ++ cubeb_log_message(char const str[CUBEB_LOG_MESSAGE_MAX_SIZE]) ++ { ++ size_t length = strlen(str); ++ /* paranoia against malformed message */ ++ assert(length < CUBEB_LOG_MESSAGE_MAX_SIZE); ++ if (length > CUBEB_LOG_MESSAGE_MAX_SIZE - 1) { ++ return; ++ } ++ PodCopy(storage, str, length); ++ storage[length] = '\0'; ++ } ++ char const * get() { ++ return storage; ++ } ++private: ++ char storage[CUBEB_LOG_MESSAGE_MAX_SIZE]; ++}; ++ ++/** Lock-free asynchronous logger, made so that logging from a ++ * real-time audio callback does not block the audio thread. */ ++class cubeb_async_logger ++{ ++public: ++ /* This is thread-safe since C++11 */ ++ static cubeb_async_logger & get() { ++ static cubeb_async_logger instance; ++ return instance; ++ } ++ void push(char const str[CUBEB_LOG_MESSAGE_MAX_SIZE]) ++ { ++ cubeb_log_message msg(str); ++ msg_queue.enqueue(msg); ++ } ++ void run() ++ { ++ std::thread([this]() { ++ while (true) { ++ cubeb_log_message msg; ++ while (msg_queue.dequeue(&msg, 1)) { ++ LOGV("%s", msg.get()); ++ } ++#ifdef _WIN32 ++ Sleep(CUBEB_LOG_BATCH_PRINT_INTERVAL_MS); ++#else ++ timespec sleep_duration = sleep_for; ++ timespec remainder; ++ do { ++ if (nanosleep(&sleep_duration, &remainder) == 0 || ++ errno != EINTR) { ++ break; ++ } ++ sleep_duration = remainder; ++ } while (remainder.tv_sec || remainder.tv_nsec); ++#endif ++ } ++ }).detach(); ++ } ++ // Tell the underlying queue the producer thread has changed, so it does not ++ // assert in debug. This should be called with the thread stopped. ++ void reset_producer_thread() ++ { ++ msg_queue.reset_thread_ids(); ++ } ++private: ++#ifndef _WIN32 ++ const struct timespec sleep_for = { ++ CUBEB_LOG_BATCH_PRINT_INTERVAL_MS/1000, ++ (CUBEB_LOG_BATCH_PRINT_INTERVAL_MS%1000)*1000*1000 ++ }; ++#endif ++ cubeb_async_logger() ++ : msg_queue(CUBEB_LOG_MESSAGE_QUEUE_DEPTH) ++ { ++ run(); ++ } ++ /** This is quite a big data structure, but is only instantiated if the ++ * asynchronous logger is used.*/ ++ lock_free_queue msg_queue; ++}; ++ ++ ++void cubeb_async_log(char const * fmt, ...) ++{ ++ if (!g_cubeb_log_callback) { ++ return; ++ } ++ // This is going to copy a 256 bytes array around, which is fine. ++ // We don't want to allocate memory here, because this is made to ++ // be called from a real-time callback. ++ va_list args; ++ va_start(args, fmt); ++ char msg[CUBEB_LOG_MESSAGE_MAX_SIZE]; ++ vsnprintf(msg, CUBEB_LOG_MESSAGE_MAX_SIZE, fmt, args); ++ cubeb_async_logger::get().push(msg); ++ va_end(args); ++} ++ ++void cubeb_async_log_reset_threads() ++{ ++ if (!g_cubeb_log_callback) { ++ return; ++ } ++ cubeb_async_logger::get().reset_producer_thread(); ++} +diff --git a/media/libcubeb/src/cubeb_log.h b/media/libcubeb/src/cubeb_log.h +index bca98c96f..a79976bb3 100644 +--- a/media/libcubeb/src/cubeb_log.h ++++ b/media/libcubeb/src/cubeb_log.h +@@ -8,6 +8,8 @@ + #ifndef CUBEB_LOG + #define CUBEB_LOG + ++#include "cubeb/cubeb.h" ++ + #ifdef __cplusplus + extern "C" { + #endif +@@ -18,8 +20,10 @@ extern "C" { + #define PRINTF_FORMAT(fmt, args) + #endif + +-extern cubeb_log_level g_log_level; +-extern cubeb_log_callback g_log_callback PRINTF_FORMAT(1, 2); ++extern cubeb_log_level g_cubeb_log_level; ++extern cubeb_log_callback g_cubeb_log_callback PRINTF_FORMAT(1, 2); ++void cubeb_async_log(const char * fmt, ...); ++void cubeb_async_log_reset_threads(); + + #ifdef __cplusplus + } +@@ -29,9 +33,15 @@ extern cubeb_log_callback g_log_callback PRINTF_FORMAT(1, 2); + #define LOG(msg, ...) LOG_INTERNAL(CUBEB_LOG_NORMAL, msg, ##__VA_ARGS__) + + #define LOG_INTERNAL(level, fmt, ...) do { \ +- if (g_log_callback && level <= g_log_level) { \ +- g_log_callback("%s:%d: " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__); \ ++ if (g_cubeb_log_callback && level <= g_cubeb_log_level) { \ ++ g_cubeb_log_callback("%s:%d: " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__); \ + } \ + } while(0) + ++/* Asynchronous verbose logging, to log in real-time callbacks. */ ++#define ALOGV(fmt, ...) \ ++do { \ ++ cubeb_async_log(fmt, ##__VA_ARGS__); \ ++} while(0) ++ + #endif // CUBEB_LOG +diff --git a/media/libcubeb/src/cubeb_mixer.cpp b/media/libcubeb/src/cubeb_mixer.cpp +new file mode 100644 +index 000000000..2ab7f673a +--- /dev/null ++++ b/media/libcubeb/src/cubeb_mixer.cpp +@@ -0,0 +1,663 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ * ++ * Adapted from code based on libswresample's rematrix.c ++ */ ++ ++#define NOMINMAX ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "cubeb-internal.h" ++#include "cubeb_mixer.h" ++#include "cubeb_utils.h" ++ ++#ifndef FF_ARRAY_ELEMS ++#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) ++#endif ++ ++#define CHANNELS_MAX 32 ++#define FRONT_LEFT 0 ++#define FRONT_RIGHT 1 ++#define FRONT_CENTER 2 ++#define LOW_FREQUENCY 3 ++#define BACK_LEFT 4 ++#define BACK_RIGHT 5 ++#define FRONT_LEFT_OF_CENTER 6 ++#define FRONT_RIGHT_OF_CENTER 7 ++#define BACK_CENTER 8 ++#define SIDE_LEFT 9 ++#define SIDE_RIGHT 10 ++#define TOP_CENTER 11 ++#define TOP_FRONT_LEFT 12 ++#define TOP_FRONT_CENTER 13 ++#define TOP_FRONT_RIGHT 14 ++#define TOP_BACK_LEFT 15 ++#define TOP_BACK_CENTER 16 ++#define TOP_BACK_RIGHT 17 ++#define NUM_NAMED_CHANNELS 18 ++ ++#ifndef M_SQRT1_2 ++#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ ++#endif ++#ifndef M_SQRT2 ++#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ ++#endif ++#define SQRT3_2 1.22474487139158904909 /* sqrt(3/2) */ ++ ++#define C30DB M_SQRT2 ++#define C15DB 1.189207115 ++#define C__0DB 1.0 ++#define C_15DB 0.840896415 ++#define C_30DB M_SQRT1_2 ++#define C_45DB 0.594603558 ++#define C_60DB 0.5 ++ ++static cubeb_channel_layout ++cubeb_channel_layout_check(cubeb_channel_layout l, uint32_t c) ++{ ++ if (l == CUBEB_LAYOUT_UNDEFINED) { ++ switch (c) { ++ case 1: return CUBEB_LAYOUT_MONO; ++ case 2: return CUBEB_LAYOUT_STEREO; ++ } ++ } ++ return l; ++} ++ ++unsigned int cubeb_channel_layout_nb_channels(cubeb_channel_layout x) ++{ ++#if __GNUC__ || __clang__ ++ return __builtin_popcount (x); ++#else ++ x -= (x >> 1) & 0x55555555; ++ x = (x & 0x33333333) + ((x >> 2) & 0x33333333); ++ x = (x + (x >> 4)) & 0x0F0F0F0F; ++ x += x >> 8; ++ return (x + (x >> 16)) & 0x3F; ++#endif ++} ++ ++struct MixerContext { ++ MixerContext(cubeb_sample_format f, ++ uint32_t in_channels, ++ cubeb_channel_layout in, ++ uint32_t out_channels, ++ cubeb_channel_layout out) ++ : _format(f) ++ , _in_ch_layout(cubeb_channel_layout_check(in, in_channels)) ++ , _out_ch_layout(cubeb_channel_layout_check(out, out_channels)) ++ , _in_ch_count(in_channels) ++ , _out_ch_count(out_channels) ++ { ++ if (in_channels != cubeb_channel_layout_nb_channels(in) || ++ out_channels != cubeb_channel_layout_nb_channels(out)) { ++ // Mismatch between channels and layout, aborting. ++ return; ++ } ++ _valid = init() >= 0; ++ } ++ ++ static bool even(cubeb_channel_layout layout) ++ { ++ if (!layout) { ++ return true; ++ } ++ if (layout & (layout - 1)) { ++ return true; ++ } ++ return false; ++ } ++ ++ // Ensure that the layout is sane (that is have symmetrical left/right ++ // channels), if not, layout will be treated as mono. ++ static cubeb_channel_layout clean_layout(cubeb_channel_layout layout) ++ { ++ if (layout && layout != CHANNEL_FRONT_LEFT && !(layout & (layout - 1))) { ++ LOG("Treating layout as mono"); ++ return CHANNEL_FRONT_CENTER; ++ } ++ ++ return layout; ++ } ++ ++ static bool sane_layout(cubeb_channel_layout layout) ++ { ++ if (!(layout & CUBEB_LAYOUT_3F)) { // at least 1 front speaker ++ return false; ++ } ++ if (!even(layout & (CHANNEL_FRONT_LEFT | ++ CHANNEL_FRONT_RIGHT))) { // no asymetric front ++ return false; ++ } ++ if (!even(layout & ++ (CHANNEL_SIDE_LEFT | CHANNEL_SIDE_RIGHT))) { // no asymetric side ++ return false; ++ } ++ if (!even(layout & (CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT))) { ++ return false; ++ } ++ if (!even(layout & ++ (CHANNEL_FRONT_LEFT_OF_CENTER | CHANNEL_FRONT_RIGHT_OF_CENTER))) { ++ return false; ++ } ++ if (cubeb_channel_layout_nb_channels(layout) >= CHANNELS_MAX) { ++ return false; ++ } ++ return true; ++ } ++ ++ int auto_matrix(); ++ int init(); ++ ++ const cubeb_sample_format _format; ++ const cubeb_channel_layout _in_ch_layout; ///< input channel layout ++ const cubeb_channel_layout _out_ch_layout; ///< output channel layout ++ const uint32_t _in_ch_count; ///< input channel count ++ const uint32_t _out_ch_count; ///< output channel count ++ const float _surround_mix_level = C_30DB; ///< surround mixing level ++ const float _center_mix_level = C_30DB; ///< center mixing level ++ const float _lfe_mix_level = 1; ///< LFE mixing level ++ double _matrix[CHANNELS_MAX][CHANNELS_MAX] = {{ 0 }}; ///< floating point rematrixing coefficients ++ float _matrix_flt[CHANNELS_MAX][CHANNELS_MAX] = {{ 0 }}; ///< single precision floating point rematrixing coefficients ++ int32_t _matrix32[CHANNELS_MAX][CHANNELS_MAX] = {{ 0 }}; ///< 17.15 fixed point rematrixing coefficients ++ uint8_t _matrix_ch[CHANNELS_MAX][CHANNELS_MAX+1] = {{ 0 }}; ///< Lists of input channels per output channel that have non zero rematrixing coefficients ++ bool _clipping = false; ///< Set to true if clipping detection is required ++ bool _valid = false; ///< Set to true if context is valid. ++}; ++ ++int MixerContext::auto_matrix() ++{ ++ double matrix[NUM_NAMED_CHANNELS][NUM_NAMED_CHANNELS] = { { 0 } }; ++ double maxcoef = 0; ++ float maxval; ++ ++ cubeb_channel_layout in_ch_layout = clean_layout(_in_ch_layout); ++ cubeb_channel_layout out_ch_layout = clean_layout(_out_ch_layout); ++ ++ if (!sane_layout(in_ch_layout)) { ++ // Channel Not Supported ++ LOG("Input Layout %x is not supported", _in_ch_layout); ++ return -1; ++ } ++ ++ if (!sane_layout(out_ch_layout)) { ++ LOG("Output Layout %x is not supported", _out_ch_layout); ++ return -1; ++ } ++ ++ for (uint32_t i = 0; i < FF_ARRAY_ELEMS(matrix); i++) { ++ if (in_ch_layout & out_ch_layout & (1U << i)) { ++ matrix[i][i] = 1.0; ++ } ++ } ++ ++ cubeb_channel_layout unaccounted = in_ch_layout & ~out_ch_layout; ++ ++ // Rematrixing is done via a matrix of coefficient that should be applied to ++ // all channels. Channels are treated as pair and must be symmetrical (if a ++ // left channel exists, the corresponding right should exist too) unless the ++ // output layout has similar layout. Channels are then mixed toward the front ++ // center or back center if they exist with a slight bias toward the front. ++ ++ if (unaccounted & CHANNEL_FRONT_CENTER) { ++ if ((out_ch_layout & CUBEB_LAYOUT_STEREO) == CUBEB_LAYOUT_STEREO) { ++ if (in_ch_layout & CUBEB_LAYOUT_STEREO) { ++ matrix[FRONT_LEFT][FRONT_CENTER] += _center_mix_level; ++ matrix[FRONT_RIGHT][FRONT_CENTER] += _center_mix_level; ++ } else { ++ matrix[FRONT_LEFT][FRONT_CENTER] += M_SQRT1_2; ++ matrix[FRONT_RIGHT][FRONT_CENTER] += M_SQRT1_2; ++ } ++ } ++ } ++ if (unaccounted & CUBEB_LAYOUT_STEREO) { ++ if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][FRONT_LEFT] += M_SQRT1_2; ++ matrix[FRONT_CENTER][FRONT_RIGHT] += M_SQRT1_2; ++ if (in_ch_layout & CHANNEL_FRONT_CENTER) ++ matrix[FRONT_CENTER][FRONT_CENTER] = _center_mix_level * M_SQRT2; ++ } ++ } ++ ++ if (unaccounted & CHANNEL_BACK_CENTER) { ++ if (out_ch_layout & CHANNEL_BACK_LEFT) { ++ matrix[BACK_LEFT][BACK_CENTER] += M_SQRT1_2; ++ matrix[BACK_RIGHT][BACK_CENTER] += M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_SIDE_LEFT) { ++ matrix[SIDE_LEFT][BACK_CENTER] += M_SQRT1_2; ++ matrix[SIDE_RIGHT][BACK_CENTER] += M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][BACK_CENTER] += _surround_mix_level * M_SQRT1_2; ++ matrix[FRONT_RIGHT][BACK_CENTER] += _surround_mix_level * M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][BACK_CENTER] += ++ _surround_mix_level * M_SQRT1_2; ++ } ++ } ++ if (unaccounted & CHANNEL_BACK_LEFT) { ++ if (out_ch_layout & CHANNEL_BACK_CENTER) { ++ matrix[BACK_CENTER][BACK_LEFT] += M_SQRT1_2; ++ matrix[BACK_CENTER][BACK_RIGHT] += M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_SIDE_LEFT) { ++ if (in_ch_layout & CHANNEL_SIDE_LEFT) { ++ matrix[SIDE_LEFT][BACK_LEFT] += M_SQRT1_2; ++ matrix[SIDE_RIGHT][BACK_RIGHT] += M_SQRT1_2; ++ } else { ++ matrix[SIDE_LEFT][BACK_LEFT] += 1.0; ++ matrix[SIDE_RIGHT][BACK_RIGHT] += 1.0; ++ } ++ } else if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][BACK_LEFT] += _surround_mix_level; ++ matrix[FRONT_RIGHT][BACK_RIGHT] += _surround_mix_level; ++ } else if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][BACK_LEFT] += _surround_mix_level * M_SQRT1_2; ++ matrix[FRONT_CENTER][BACK_RIGHT] += _surround_mix_level * M_SQRT1_2; ++ } ++ } ++ ++ if (unaccounted & CHANNEL_SIDE_LEFT) { ++ if (out_ch_layout & CHANNEL_BACK_LEFT) { ++ /* if back channels do not exist in the input, just copy side ++ channels to back channels, otherwise mix side into back */ ++ if (in_ch_layout & CHANNEL_BACK_LEFT) { ++ matrix[BACK_LEFT][SIDE_LEFT] += M_SQRT1_2; ++ matrix[BACK_RIGHT][SIDE_RIGHT] += M_SQRT1_2; ++ } else { ++ matrix[BACK_LEFT][SIDE_LEFT] += 1.0; ++ matrix[BACK_RIGHT][SIDE_RIGHT] += 1.0; ++ } ++ } else if (out_ch_layout & CHANNEL_BACK_CENTER) { ++ matrix[BACK_CENTER][SIDE_LEFT] += M_SQRT1_2; ++ matrix[BACK_CENTER][SIDE_RIGHT] += M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][SIDE_LEFT] += _surround_mix_level; ++ matrix[FRONT_RIGHT][SIDE_RIGHT] += _surround_mix_level; ++ } else if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][SIDE_LEFT] += _surround_mix_level * M_SQRT1_2; ++ matrix[FRONT_CENTER][SIDE_RIGHT] += _surround_mix_level * M_SQRT1_2; ++ } ++ } ++ ++ if (unaccounted & CHANNEL_FRONT_LEFT_OF_CENTER) { ++ if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][FRONT_LEFT_OF_CENTER] += 1.0; ++ matrix[FRONT_RIGHT][FRONT_RIGHT_OF_CENTER] += 1.0; ++ } else if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][FRONT_LEFT_OF_CENTER] += M_SQRT1_2; ++ matrix[FRONT_CENTER][FRONT_RIGHT_OF_CENTER] += M_SQRT1_2; ++ } ++ } ++ /* mix LFE into front left/right or center */ ++ if (unaccounted & CHANNEL_LOW_FREQUENCY) { ++ if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][LOW_FREQUENCY] += _lfe_mix_level; ++ } else if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][LOW_FREQUENCY] += _lfe_mix_level * M_SQRT1_2; ++ matrix[FRONT_RIGHT][LOW_FREQUENCY] += _lfe_mix_level * M_SQRT1_2; ++ } ++ } ++ ++ // Normalize the conversion matrix. ++ for (uint32_t out_i = 0, i = 0; i < CHANNELS_MAX; i++) { ++ double sum = 0; ++ int in_i = 0; ++ if ((out_ch_layout & (1U << i)) == 0) { ++ continue; ++ } ++ for (uint32_t j = 0; j < CHANNELS_MAX; j++) { ++ if ((in_ch_layout & (1U << j)) == 0) { ++ continue; ++ } ++ if (i < FF_ARRAY_ELEMS(matrix) && j < FF_ARRAY_ELEMS(matrix[0])) { ++ _matrix[out_i][in_i] = matrix[i][j]; ++ } else { ++ _matrix[out_i][in_i] = ++ i == j && (in_ch_layout & out_ch_layout & (1U << i)); ++ } ++ sum += fabs(_matrix[out_i][in_i]); ++ in_i++; ++ } ++ maxcoef = std::max(maxcoef, sum); ++ out_i++; ++ } ++ ++ if (_format == CUBEB_SAMPLE_S16NE) { ++ maxval = 1.0; ++ } else { ++ maxval = INT_MAX; ++ } ++ ++ // Normalize matrix if needed. ++ if (maxcoef > maxval) { ++ maxcoef /= maxval; ++ for (uint32_t i = 0; i < CHANNELS_MAX; i++) ++ for (uint32_t j = 0; j < CHANNELS_MAX; j++) { ++ _matrix[i][j] /= maxcoef; ++ } ++ } ++ ++ if (_format == CUBEB_SAMPLE_FLOAT32NE) { ++ for (uint32_t i = 0; i < FF_ARRAY_ELEMS(_matrix); i++) { ++ for (uint32_t j = 0; j < FF_ARRAY_ELEMS(_matrix[0]); j++) { ++ _matrix_flt[i][j] = _matrix[i][j]; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++int MixerContext::init() ++{ ++ int r = auto_matrix(); ++ if (r) { ++ return r; ++ } ++ ++ // Determine if matrix operation would overflow ++ if (_format == CUBEB_SAMPLE_S16NE) { ++ int maxsum = 0; ++ for (uint32_t i = 0; i < _out_ch_count; i++) { ++ double rem = 0; ++ int sum = 0; ++ ++ for (uint32_t j = 0; j < _in_ch_count; j++) { ++ double target = _matrix[i][j] * 32768 + rem; ++ int value = lrintf(target); ++ rem += target - value; ++ sum += std::abs(value); ++ } ++ maxsum = std::max(maxsum, sum); ++ } ++ if (maxsum > 32768) { ++ _clipping = true; ++ } ++ } ++ ++ // FIXME quantize for integers ++ for (uint32_t i = 0; i < CHANNELS_MAX; i++) { ++ int ch_in = 0; ++ for (uint32_t j = 0; j < CHANNELS_MAX; j++) { ++ _matrix32[i][j] = lrintf(_matrix[i][j] * 32768); ++ if (_matrix[i][j]) { ++ _matrix_ch[i][++ch_in] = j; ++ } ++ } ++ _matrix_ch[i][0] = ch_in; ++ } ++ ++ return 0; ++} ++ ++template ++void ++sum2(TYPE_SAMPLE * out, ++ uint32_t stride_out, ++ const TYPE_SAMPLE * in1, ++ const TYPE_SAMPLE * in2, ++ uint32_t stride_in, ++ TYPE_COEFF coeff1, ++ TYPE_COEFF coeff2, ++ F&& operand, ++ uint32_t frames) ++{ ++ static_assert( ++ std::is_same::type>::value, ++ "function must return the same type as used by matrix_coeff"); ++ for (uint32_t i = 0; i < frames; i++) { ++ *out = operand(coeff1 * *in1 + coeff2 * *in2); ++ out += stride_out; ++ in1 += stride_in; ++ in2 += stride_in; ++ } ++} ++ ++template ++void ++copy(TYPE_SAMPLE * out, ++ uint32_t stride_out, ++ const TYPE_SAMPLE * in, ++ uint32_t stride_in, ++ TYPE_COEFF coeff, ++ F&& operand, ++ uint32_t frames) ++{ ++ static_assert( ++ std::is_same::type>::value, ++ "function must return the same type as used by matrix_coeff"); ++ for (uint32_t i = 0; i < frames; i++) { ++ *out = operand(coeff * *in); ++ out += stride_out; ++ in += stride_in; ++ } ++} ++ ++template ++static int rematrix(const MixerContext * s, TYPE * aOut, const TYPE * aIn, ++ const TYPE_COEFF (&matrix_coeff)[COLS][COLS], ++ F&& aF, uint32_t frames) ++{ ++ static_assert( ++ std::is_same::type>::value, ++ "function must return the same type as used by matrix_coeff"); ++ ++ for (uint32_t out_i = 0; out_i < s->_out_ch_count; out_i++) { ++ TYPE* out = aOut + out_i; ++ switch (s->_matrix_ch[out_i][0]) { ++ case 0: ++ for (uint32_t i = 0; i < frames; i++) { ++ out[i * s->_out_ch_count] = 0; ++ } ++ break; ++ case 1: { ++ int in_i = s->_matrix_ch[out_i][1]; ++ copy(out, ++ s->_out_ch_count, ++ aIn + in_i, ++ s->_in_ch_count, ++ matrix_coeff[out_i][in_i], ++ aF, ++ frames); ++ } break; ++ case 2: ++ sum2(out, ++ s->_out_ch_count, ++ aIn + s->_matrix_ch[out_i][1], ++ aIn + s->_matrix_ch[out_i][2], ++ s->_in_ch_count, ++ matrix_coeff[out_i][s->_matrix_ch[out_i][1]], ++ matrix_coeff[out_i][s->_matrix_ch[out_i][2]], ++ aF, ++ frames); ++ break; ++ default: ++ for (uint32_t i = 0; i < frames; i++) { ++ TYPE_COEFF v = 0; ++ for (uint32_t j = 0; j < s->_matrix_ch[out_i][0]; j++) { ++ uint32_t in_i = s->_matrix_ch[out_i][1 + j]; ++ v += ++ *(aIn + in_i + i * s->_in_ch_count) * matrix_coeff[out_i][in_i]; ++ } ++ out[i * s->_out_ch_count] = aF(v); ++ } ++ break; ++ } ++ } ++ return 0; ++} ++ ++struct cubeb_mixer ++{ ++ cubeb_mixer(cubeb_sample_format format, ++ uint32_t in_channels, ++ cubeb_channel_layout in_layout, ++ uint32_t out_channels, ++ cubeb_channel_layout out_layout) ++ : _context(format, in_channels, in_layout, out_channels, out_layout) ++ { ++ } ++ ++ template ++ void copy_and_trunc(size_t frames, ++ const T * input_buffer, ++ T * output_buffer) const ++ { ++ if (_context._in_ch_count <= _context._out_ch_count) { ++ // Not enough channels to copy, fill the gaps with silence. ++ if (_context._in_ch_count == 1 && _context._out_ch_count >= 2) { ++ // Special case for upmixing mono input to stereo and more. We will ++ // duplicate the mono channel to the first two channels. On most system, ++ // the first two channels are for left and right. It is commonly ++ // expected that mono will on both left+right channels ++ for (uint32_t i = 0; i < frames; i++) { ++ output_buffer[0] = output_buffer[1] = *input_buffer; ++ PodZero(output_buffer + 2, _context._out_ch_count - 2); ++ output_buffer += _context._out_ch_count; ++ input_buffer++; ++ } ++ return; ++ } ++ for (uint32_t i = 0; i < frames; i++) { ++ PodCopy(output_buffer, input_buffer, _context._in_ch_count); ++ output_buffer += _context._in_ch_count; ++ input_buffer += _context._in_ch_count; ++ PodZero(output_buffer, _context._out_ch_count - _context._in_ch_count); ++ output_buffer += _context._out_ch_count - _context._in_ch_count; ++ } ++ } else { ++ for (uint32_t i = 0; i < frames; i++) { ++ PodCopy(output_buffer, input_buffer, _context._out_ch_count); ++ output_buffer += _context._out_ch_count; ++ input_buffer += _context._in_ch_count; ++ } ++ } ++ } ++ ++ int mix(size_t frames, ++ const void * input_buffer, ++ size_t input_buffer_size, ++ void * output_buffer, ++ size_t output_buffer_size) const ++ { ++ if (frames <= 0 || _context._out_ch_count == 0) { ++ return 0; ++ } ++ ++ // Check if output buffer is of sufficient size. ++ size_t size_read_needed = ++ frames * _context._in_ch_count * cubeb_sample_size(_context._format); ++ if (input_buffer_size < size_read_needed) { ++ // We don't have enough data to read! ++ return -1; ++ } ++ if (output_buffer_size * _context._in_ch_count < ++ size_read_needed * _context._out_ch_count) { ++ return -1; ++ } ++ ++ if (!valid()) { ++ // The channel layouts were invalid or unsupported, instead we will simply ++ // either drop the extra channels, or fill with silence the missing ones ++ if (_context._format == CUBEB_SAMPLE_FLOAT32NE) { ++ copy_and_trunc(frames, ++ static_cast(input_buffer), ++ static_cast(output_buffer)); ++ } else { ++ assert(_context._format == CUBEB_SAMPLE_S16NE); ++ copy_and_trunc(frames, ++ static_cast(input_buffer), ++ reinterpret_cast(output_buffer)); ++ } ++ return 0; ++ } ++ ++ switch (_context._format) ++ { ++ case CUBEB_SAMPLE_FLOAT32NE: { ++ auto f = [](float x) { return x; }; ++ return rematrix(&_context, ++ static_cast(output_buffer), ++ static_cast(input_buffer), ++ _context._matrix_flt, ++ f, ++ frames); ++ } ++ case CUBEB_SAMPLE_S16NE: ++ if (_context._clipping) { ++ auto f = [](int x) { ++ int y = (x + 16384) >> 15; ++ // clip the signed integer value into the -32768,32767 range. ++ if ((y + 0x8000U) & ~0xFFFF) { ++ return (y >> 31) ^ 0x7FFF; ++ } ++ return y; ++ }; ++ return rematrix(&_context, ++ static_cast(output_buffer), ++ static_cast(input_buffer), ++ _context._matrix32, ++ f, ++ frames); ++ } else { ++ auto f = [](int x) { return (x + 16384) >> 15; }; ++ return rematrix(&_context, ++ static_cast(output_buffer), ++ static_cast(input_buffer), ++ _context._matrix32, ++ f, ++ frames); ++ } ++ break; ++ default: ++ assert(false); ++ break; ++ } ++ ++ return -1; ++ } ++ ++ // Return false if any of the input or ouput layout were invalid. ++ bool valid() const { return _context._valid; } ++ ++ virtual ~cubeb_mixer(){}; ++ ++ MixerContext _context; ++}; ++ ++cubeb_mixer* cubeb_mixer_create(cubeb_sample_format format, ++ uint32_t in_channels, ++ cubeb_channel_layout in_layout, ++ uint32_t out_channels, ++ cubeb_channel_layout out_layout) ++{ ++ return new cubeb_mixer( ++ format, in_channels, in_layout, out_channels, out_layout); ++} ++ ++void cubeb_mixer_destroy(cubeb_mixer * mixer) ++{ ++ delete mixer; ++} ++ ++int cubeb_mixer_mix(cubeb_mixer * mixer, ++ size_t frames, ++ const void * input_buffer, ++ size_t input_buffer_size, ++ void * output_buffer, ++ size_t output_buffer_size) ++{ ++ return mixer->mix( ++ frames, input_buffer, input_buffer_size, output_buffer, output_buffer_size); ++} +diff --git a/media/libcubeb/src/cubeb_mixer.h b/media/libcubeb/src/cubeb_mixer.h +new file mode 100644 +index 000000000..d43a237f9 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_mixer.h +@@ -0,0 +1,37 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#ifndef CUBEB_MIXER ++#define CUBEB_MIXER ++ ++#include "cubeb/cubeb.h" // for cubeb_channel_layout and cubeb_stream_params. ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++typedef struct cubeb_mixer cubeb_mixer; ++cubeb_mixer * cubeb_mixer_create(cubeb_sample_format format, ++ uint32_t in_channels, ++ cubeb_channel_layout in_layout, ++ uint32_t out_channels, ++ cubeb_channel_layout out_layout); ++void cubeb_mixer_destroy(cubeb_mixer * mixer); ++int cubeb_mixer_mix(cubeb_mixer * mixer, ++ size_t frames, ++ const void * input_buffer, ++ size_t input_buffer_size, ++ void * output_buffer, ++ size_t output_buffer_size); ++ ++unsigned int cubeb_channel_layout_nb_channels(cubeb_channel_layout channel_layout); ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif // CUBEB_MIXER +diff --git a/media/libcubeb/src/cubeb_opensl.c b/media/libcubeb/src/cubeb_opensl.c +index dd5416228..96374ec07 100644 +--- a/media/libcubeb/src/cubeb_opensl.c ++++ b/media/libcubeb/src/cubeb_opensl.c +@@ -9,6 +9,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -19,88 +20,268 @@ + #include + #include + #include +-#define LOG(args...) __android_log_print(ANDROID_LOG_INFO, "Cubeb_OpenSL" , ## args) +-#define ANDROID_VERSION_GINGERBREAD_MR1 10 +-#define ANDROID_VERSION_LOLLIPOP 21 +-#define ANDROID_VERSION_MARSHMALLOW 23 + #endif + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + #include "cubeb_resampler.h" + #include "cubeb-sles.h" ++#include "cubeb_array_queue.h" ++#include "android/cubeb-output-latency.h" ++ ++#if defined(__ANDROID__) ++#ifdef LOG ++#undef LOG ++#endif ++//#define LOGGING_ENABLED ++#ifdef LOGGING_ENABLED ++#define LOG(args...) __android_log_print(ANDROID_LOG_INFO, "Cubeb_OpenSL" , ## args) ++#else ++#define LOG(...) ++#endif ++ ++//#define TIMESTAMP_ENABLED ++#ifdef TIMESTAMP_ENABLED ++#define FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) ++#define LOG_TS(args...) __android_log_print(ANDROID_LOG_INFO, "Cubeb_OpenSL ES: Timestamp(usec)" , ## args) ++#define TIMESTAMP(msg) do { \ ++ struct timeval timestamp; \ ++ int ts_ret = gettimeofday(×tamp, NULL); \ ++ if (ts_ret == 0) { \ ++ LOG_TS("%lld: %s (%s %s:%d)", timestamp.tv_sec * 1000000LL + timestamp.tv_usec, msg, __FUNCTION__, FILENAME, __LINE__);\ ++ } else { \ ++ LOG_TS("Error: %s (%s %s:%d) - %s", msg, __FUNCTION__, FILENAME, __LINE__);\ ++ } \ ++} while(0) ++#else ++#define TIMESTAMP(...) ++#endif ++ ++#define ANDROID_VERSION_GINGERBREAD_MR1 10 ++#define ANDROID_VERSION_JELLY_BEAN 18 ++#define ANDROID_VERSION_LOLLIPOP 21 ++#define ANDROID_VERSION_MARSHMALLOW 23 ++#define ANDROID_VERSION_N_MR1 25 ++#endif ++ ++#define DEFAULT_SAMPLE_RATE 48000 ++#define DEFAULT_NUM_OF_FRAMES 480 ++// If the latency requested is above this threshold, this stream is considered ++// intended for playback (vs. real-time). Tell Android it should favor saving ++// power over performance or latency. ++// This is around 100ms at 44100 or 48000 ++#define POWERSAVE_LATENCY_FRAMES_THRESHOLD 4000 + + static struct cubeb_ops const opensl_ops; + + struct cubeb { + struct cubeb_ops const * ops; + void * lib; +- void * libmedia; +- int32_t (* get_output_latency)(uint32_t * latency, int stream_type); + SLInterfaceID SL_IID_BUFFERQUEUE; + SLInterfaceID SL_IID_PLAY; + #if defined(__ANDROID__) + SLInterfaceID SL_IID_ANDROIDCONFIGURATION; ++ SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE; + #endif + SLInterfaceID SL_IID_VOLUME; ++ SLInterfaceID SL_IID_RECORD; + SLObjectItf engObj; + SLEngineItf eng; + SLObjectItf outmixObj; ++ output_latency_function * p_output_latency_function; + }; + + #define NELEMS(A) (sizeof(A) / sizeof A[0]) +-#define NBUFS 4 +-#define AUDIO_STREAM_TYPE_MUSIC 3 ++#define NBUFS 2 + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + pthread_mutex_t mutex; + SLObjectItf playerObj; + SLPlayItf play; + SLBufferQueueItf bufq; + SLVolumeItf volume; +- uint8_t *queuebuf[NBUFS]; ++ void ** queuebuf; ++ uint32_t queuebuf_capacity; + int queuebuf_idx; + long queuebuf_len; + long bytespersec; + long framesize; ++ /* Total number of played frames. ++ * Synchronized by stream::mutex lock. */ + long written; ++ /* Flag indicating draining. Synchronized ++ * by stream::mutex lock. */ + int draining; +- cubeb_stream_type stream_type; +- ++ /* Flags to determine in/out.*/ ++ uint32_t input_enabled; ++ uint32_t output_enabled; ++ /* Recorder abstract object. */ ++ SLObjectItf recorderObj; ++ /* Recorder Itf for input capture. */ ++ SLRecordItf recorderItf; ++ /* Buffer queue for input capture. */ ++ SLAndroidSimpleBufferQueueItf recorderBufferQueueItf; ++ /* Store input buffers. */ ++ void ** input_buffer_array; ++ /* The capacity of the array. ++ * On capture only can be small (4). ++ * On full duplex is calculated to ++ * store 1 sec of data buffers. */ ++ uint32_t input_array_capacity; ++ /* Current filled index of input buffer array. ++ * It is initiated to -1 indicating buffering ++ * have not started yet. */ ++ int input_buffer_index; ++ /* Length of input buffer.*/ ++ uint32_t input_buffer_length; ++ /* Input frame size */ ++ uint32_t input_frame_size; ++ /* Device sampling rate. If user rate is not ++ * accepted an compatible rate is set. If it is ++ * accepted this is equal to params.rate. */ ++ uint32_t input_device_rate; ++ /* Exchange input buffers between input ++ * and full duplex threads. */ ++ array_queue * input_queue; ++ /* Silent input buffer used on full duplex. */ ++ void * input_silent_buffer; ++ /* Number of input frames from the start of the stream*/ ++ uint32_t input_total_frames; ++ /* Flag to stop the execution of user callback and ++ * close all working threads. Synchronized by ++ * stream::mutex lock. */ ++ uint32_t shutdown; ++ /* Store user callback. */ + cubeb_data_callback data_callback; ++ /* Store state callback. */ + cubeb_state_callback state_callback; +- void * user_ptr; + + cubeb_resampler * resampler; +- unsigned int inputrate; +- unsigned int outputrate; +- unsigned int latency; ++ unsigned int user_output_rate; ++ unsigned int output_configured_rate; ++ unsigned int buffer_size_frames; ++ // Audio output latency used in cubeb_stream_get_position(). ++ unsigned int output_latency_ms; + int64_t lastPosition; + int64_t lastPositionTimeStamp; + int64_t lastCompensativePosition; ++ int voice; + }; + ++/* Forward declaration. */ ++static int opensl_stop_player(cubeb_stream * stm); ++static int opensl_stop_recorder(cubeb_stream * stm); ++ ++static int ++opensl_get_draining(cubeb_stream * stm) ++{ ++#ifdef DEBUG ++ int r = pthread_mutex_trylock(&stm->mutex); ++ assert((r == EDEADLK || r == EBUSY) && "get_draining: mutex should be locked but it's not."); ++#endif ++ return stm->draining; ++} ++ ++static void ++opensl_set_draining(cubeb_stream * stm, int value) ++{ ++#ifdef DEBUG ++ int r = pthread_mutex_trylock(&stm->mutex); ++ LOG("set draining try r = %d", r); ++ assert((r == EDEADLK || r == EBUSY) && "set_draining: mutex should be locked but it's not."); ++#endif ++ assert(value == 0 || value == 1); ++ stm->draining = value; ++} ++ ++static void ++opensl_notify_drained(cubeb_stream * stm) ++{ ++ assert(stm); ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ if (draining) { ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); ++ if (stm->play) { ++ LOG("stop player in play_callback"); ++ r = opensl_stop_player(stm); ++ assert(r == CUBEB_OK); ++ } ++ if (stm->recorderItf) { ++ r = opensl_stop_recorder(stm); ++ assert(r == CUBEB_OK); ++ } ++ } ++} ++ ++static uint32_t ++opensl_get_shutdown(cubeb_stream * stm) ++{ ++#ifdef DEBUG ++ int r = pthread_mutex_trylock(&stm->mutex); ++ assert((r == EDEADLK || r == EBUSY) && "get_shutdown: mutex should be locked but it's not."); ++#endif ++ return stm->shutdown; ++} ++ ++static void ++opensl_set_shutdown(cubeb_stream * stm, uint32_t value) ++{ ++#ifdef DEBUG ++ int r = pthread_mutex_trylock(&stm->mutex); ++ LOG("set shutdown try r = %d", r); ++ assert((r == EDEADLK || r == EBUSY) && "set_shutdown: mutex should be locked but it's not."); ++#endif ++ assert(value == 0 || value == 1); ++ stm->shutdown = value; ++} ++ + static void + play_callback(SLPlayItf caller, void * user_ptr, SLuint32 event) + { + cubeb_stream * stm = user_ptr; +- int draining; + assert(stm); + switch (event) { +- case SL_PLAYEVENT_HEADATMARKER: +- pthread_mutex_lock(&stm->mutex); +- draining = stm->draining; +- pthread_mutex_unlock(&stm->mutex); +- if (draining) { +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); +- (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PAUSED); +- } ++ case SL_PLAYEVENT_HEADATMARKER: ++ opensl_notify_drained(stm); + break; + default: + break; + } + } + ++static void ++recorder_marker_callback (SLRecordItf caller, void * pContext, SLuint32 event) ++{ ++ cubeb_stream * stm = pContext; ++ assert(stm); ++ ++ if (event == SL_RECORDEVENT_HEADATMARKER) { ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ if (draining) { ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); ++ if (stm->recorderItf) { ++ r = opensl_stop_recorder(stm); ++ assert(r == CUBEB_OK); ++ } ++ if (stm->play) { ++ r = opensl_stop_player(stm); ++ assert(r == CUBEB_OK); ++ } ++ } ++ } ++} ++ + static void + bufferqueue_callback(SLBufferQueueItf caller, void * user_ptr) + { +@@ -108,90 +289,333 @@ bufferqueue_callback(SLBufferQueueItf caller, void * user_ptr) + assert(stm); + SLBufferQueueState state; + SLresult res; ++ long written = 0; + + res = (*stm->bufq)->GetState(stm->bufq, &state); + assert(res == SL_RESULT_SUCCESS); + +- if (state.count > 1) ++ if (state.count > 1) { + return; ++ } + +- SLuint32 i; +- for (i = state.count; i < NBUFS; i++) { +- uint8_t *buf = stm->queuebuf[stm->queuebuf_idx]; +- long written = 0; +- pthread_mutex_lock(&stm->mutex); +- int draining = stm->draining; +- pthread_mutex_unlock(&stm->mutex); +- +- if (!draining) { +- written = cubeb_resampler_fill(stm->resampler, +- NULL, NULL, +- buf, stm->queuebuf_len / stm->framesize); +- if (written < 0 || written * stm->framesize > stm->queuebuf_len) { +- (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PAUSED); +- return; +- } ++ uint8_t *buf = stm->queuebuf[stm->queuebuf_idx]; ++ written = 0; ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ uint32_t shutdown = opensl_get_shutdown(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ if (!draining && !shutdown) { ++ written = cubeb_resampler_fill(stm->resampler, ++ NULL, NULL, ++ buf, stm->queuebuf_len / stm->framesize); ++ LOG("bufferqueue_callback: resampler fill returned %ld frames", written); ++ if (written < 0 || written * stm->framesize > stm->queuebuf_len) { ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ opensl_stop_player(stm); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ return; + } ++ } + +- // Keep sending silent data even in draining mode to prevent the audio +- // back-end from being stopped automatically by OpenSL/ES. +- memset(buf + written * stm->framesize, 0, stm->queuebuf_len - written * stm->framesize); +- res = (*stm->bufq)->Enqueue(stm->bufq, buf, stm->queuebuf_len); +- assert(res == SL_RESULT_SUCCESS); +- stm->queuebuf_idx = (stm->queuebuf_idx + 1) % NBUFS; +- if (written > 0) { +- pthread_mutex_lock(&stm->mutex); +- stm->written += written; +- pthread_mutex_unlock(&stm->mutex); +- } ++ // Keep sending silent data even in draining mode to prevent the audio ++ // back-end from being stopped automatically by OpenSL/ES. ++ assert(stm->queuebuf_len >= written * stm->framesize); ++ memset(buf + written * stm->framesize, 0, stm->queuebuf_len - written * stm->framesize); ++ res = (*stm->bufq)->Enqueue(stm->bufq, buf, stm->queuebuf_len); ++ assert(res == SL_RESULT_SUCCESS); ++ stm->queuebuf_idx = (stm->queuebuf_idx + 1) % stm->queuebuf_capacity; ++ ++ if (written > 0) { ++ pthread_mutex_lock(&stm->mutex); ++ stm->written += written; ++ pthread_mutex_unlock(&stm->mutex); ++ } + +- if (!draining && written * stm->framesize < stm->queuebuf_len) { +- pthread_mutex_lock(&stm->mutex); +- int64_t written_duration = INT64_C(1000) * stm->written * stm->framesize / stm->bytespersec; +- stm->draining = 1; +- pthread_mutex_unlock(&stm->mutex); ++ if (!draining && written * stm->framesize < stm->queuebuf_len) { ++ LOG("bufferqueue_callback draining"); ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int64_t written_duration = INT64_C(1000) * stm->written * stm->framesize / stm->bytespersec; ++ opensl_set_draining(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (written_duration == 0) { ++ // since we didn't write any sample, it's not possible to reach the marker ++ // time and trigger the callback. We should initiative notify drained. ++ opensl_notify_drained(stm); ++ } else { + // Use SL_PLAYEVENT_HEADATMARKER event from slPlayCallback of SLPlayItf + // to make sure all the data has been processed. + (*stm->play)->SetMarkerPosition(stm->play, (SLmillisecond)written_duration); +- return; + } ++ return; + } + } + +-#if defined(__ANDROID__) +-static SLuint32 +-convert_stream_type_to_sl_stream(cubeb_stream_type stream_type) +-{ +- switch(stream_type) { +- case CUBEB_STREAM_TYPE_SYSTEM: +- return SL_ANDROID_STREAM_SYSTEM; +- case CUBEB_STREAM_TYPE_MUSIC: +- return SL_ANDROID_STREAM_MEDIA; +- case CUBEB_STREAM_TYPE_NOTIFICATION: +- return SL_ANDROID_STREAM_NOTIFICATION; +- case CUBEB_STREAM_TYPE_ALARM: +- return SL_ANDROID_STREAM_ALARM; +- case CUBEB_STREAM_TYPE_VOICE_CALL: +- return SL_ANDROID_STREAM_VOICE; +- case CUBEB_STREAM_TYPE_RING: +- return SL_ANDROID_STREAM_RING; +- case CUBEB_STREAM_TYPE_SYSTEM_ENFORCED: +- return SL_ANDROID_STREAM_SYSTEM_ENFORCED; +- default: +- return 0xFFFFFFFF; ++static int ++opensl_enqueue_recorder(cubeb_stream * stm, void ** last_filled_buffer) ++{ ++ assert(stm); ++ ++ int current_index = stm->input_buffer_index; ++ void * last_buffer = NULL; ++ ++ if (current_index < 0) { ++ // This is the first enqueue ++ current_index = 0; ++ } else { ++ // The current index hold the last filled buffer get it before advance index. ++ last_buffer = stm->input_buffer_array[current_index]; ++ // Advance to get next available buffer ++ current_index = (current_index + 1) % stm->input_array_capacity; ++ } ++ // enqueue next empty buffer to be filled by the recorder ++ SLresult res = (*stm->recorderBufferQueueItf)->Enqueue(stm->recorderBufferQueueItf, ++ stm->input_buffer_array[current_index], ++ stm->input_buffer_length); ++ if (res != SL_RESULT_SUCCESS ) { ++ LOG("Enqueue recorder failed. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ // All good, update buffer and index. ++ stm->input_buffer_index = current_index; ++ if (last_filled_buffer) { ++ *last_filled_buffer = last_buffer; + } ++ return CUBEB_OK; ++} ++ ++// input data callback ++void recorder_callback(SLAndroidSimpleBufferQueueItf bq, void * context) ++{ ++ assert(context); ++ cubeb_stream * stm = context; ++ assert(stm->recorderBufferQueueItf); ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ uint32_t shutdown = opensl_get_shutdown(stm); ++ int draining = opensl_get_draining(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (shutdown || draining) { ++ // According to the OpenSL ES 1.1 Specification, 8.14 SLBufferQueueItf ++ // page 184, on transition to the SL_RECORDSTATE_STOPPED state, ++ // the application should continue to enqueue buffers onto the queue ++ // to retrieve the residual recorded data in the system. ++ r = opensl_enqueue_recorder(stm, NULL); ++ assert(r == CUBEB_OK); ++ return; ++ } ++ ++ // Enqueue next available buffer and get the last filled buffer. ++ void * input_buffer = NULL; ++ r = opensl_enqueue_recorder(stm, &input_buffer); ++ assert(r == CUBEB_OK); ++ assert(input_buffer); ++ // Fill resampler with last input ++ long input_frame_count = stm->input_buffer_length / stm->input_frame_size; ++ long got = cubeb_resampler_fill(stm->resampler, ++ input_buffer, ++ &input_frame_count, ++ NULL, ++ 0); ++ // Error case ++ if (got < 0 || got > input_frame_count) { ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ r = opensl_stop_recorder(stm); ++ assert(r == CUBEB_OK); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ } ++ ++ // Advance total stream frames ++ stm->input_total_frames += got; ++ ++ if (got < input_frame_count) { ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_draining(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ int64_t duration = INT64_C(1000) * stm->input_total_frames / stm->input_device_rate; ++ (*stm->recorderItf)->SetMarkerPosition(stm->recorderItf, (SLmillisecond)duration); ++ return; ++ } ++} ++ ++void recorder_fullduplex_callback(SLAndroidSimpleBufferQueueItf bq, void * context) ++{ ++ assert(context); ++ cubeb_stream * stm = context; ++ assert(stm->recorderBufferQueueItf); ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ uint32_t shutdown = opensl_get_shutdown(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (shutdown || draining) { ++ /* On draining and shutdown the recorder should have been stoped from ++ * the one set the flags. Accordint to the doc, on transition to ++ * the SL_RECORDSTATE_STOPPED state, the application should ++ * continue to enqueue buffers onto the queue to retrieve the residual ++ * recorded data in the system. */ ++ LOG("Input shutdown %d or drain %d", shutdown, draining); ++ int r = opensl_enqueue_recorder(stm, NULL); ++ assert(r == CUBEB_OK); ++ return; ++ } ++ ++ // Enqueue next available buffer and get the last filled buffer. ++ void * input_buffer = NULL; ++ r = opensl_enqueue_recorder(stm, &input_buffer); ++ assert(r == CUBEB_OK); ++ assert(input_buffer); ++ ++ assert(stm->input_queue); ++ r = array_queue_push(stm->input_queue, input_buffer); ++ if (r == -1) { ++ LOG("Input queue is full, drop input ..."); ++ return; ++ } ++ ++ LOG("Input pushed in the queue, input array %zu", ++ array_queue_get_size(stm->input_queue)); ++} ++ ++static void ++player_fullduplex_callback(SLBufferQueueItf caller, void * user_ptr) ++{ ++ TIMESTAMP("ENTER"); ++ cubeb_stream * stm = user_ptr; ++ assert(stm); ++ SLresult res; ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ uint32_t shutdown = opensl_get_shutdown(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ // Get output ++ void * output_buffer = NULL; ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ output_buffer = stm->queuebuf[stm->queuebuf_idx]; ++ // Advance the output buffer queue index ++ stm->queuebuf_idx = (stm->queuebuf_idx + 1) % stm->queuebuf_capacity; ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (shutdown || draining) { ++ LOG("Shutdown/draining, send silent"); ++ // Set silent on buffer ++ memset(output_buffer, 0, stm->queuebuf_len); ++ ++ // Enqueue data in player buffer queue ++ res = (*stm->bufq)->Enqueue(stm->bufq, ++ output_buffer, ++ stm->queuebuf_len); ++ assert(res == SL_RESULT_SUCCESS); ++ return; ++ } ++ ++ // Get input. ++ void * input_buffer = array_queue_pop(stm->input_queue); ++ long input_frame_count = stm->input_buffer_length / stm->input_frame_size; ++ long frames_needed = stm->queuebuf_len / stm->framesize; ++ if (!input_buffer) { ++ LOG("Input hole set silent input buffer"); ++ input_buffer = stm->input_silent_buffer; ++ } ++ ++ long written = 0; ++ // Trigger user callback through resampler ++ written = cubeb_resampler_fill(stm->resampler, ++ input_buffer, ++ &input_frame_count, ++ output_buffer, ++ frames_needed); ++ ++ LOG("Fill: written %ld, frames_needed %ld, input array size %zu", ++ written, frames_needed, array_queue_get_size(stm->input_queue)); ++ ++ if (written < 0 || written > frames_needed) { ++ // Error case ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ opensl_stop_player(stm); ++ opensl_stop_recorder(stm); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ memset(output_buffer, 0, stm->queuebuf_len); ++ ++ // Enqueue data in player buffer queue ++ res = (*stm->bufq)->Enqueue(stm->bufq, ++ output_buffer, ++ stm->queuebuf_len); ++ assert(res == SL_RESULT_SUCCESS); ++ return; ++ } ++ ++ // Advance total out written frames counter ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ stm->written += written; ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if ( written < frames_needed) { ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int64_t written_duration = INT64_C(1000) * stm->written * stm->framesize / stm->bytespersec; ++ opensl_set_draining(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ // Use SL_PLAYEVENT_HEADATMARKER event from slPlayCallback of SLPlayItf ++ // to make sure all the data has been processed. ++ (*stm->play)->SetMarkerPosition(stm->play, (SLmillisecond)written_duration); ++ } ++ ++ // Keep sending silent data even in draining mode to prevent the audio ++ // back-end from being stopped automatically by OpenSL/ES. ++ memset((uint8_t *)output_buffer + written * stm->framesize, 0, ++ stm->queuebuf_len - written * stm->framesize); ++ ++ // Enqueue data in player buffer queue ++ res = (*stm->bufq)->Enqueue(stm->bufq, ++ output_buffer, ++ stm->queuebuf_len); ++ assert(res == SL_RESULT_SUCCESS); ++ TIMESTAMP("EXIT"); + } +-#endif + + static void opensl_destroy(cubeb * ctx); + + #if defined(__ANDROID__) +- + #if (__ANDROID_API__ >= ANDROID_VERSION_LOLLIPOP) + typedef int (system_property_get)(const char*, char*); + + static int +-__system_property_get(const char* name, char* value) ++wrap_system_property_get(const char* name, char* value) + { + void* libc = dlopen("libc.so", RTLD_LAZY); + if (!libc) { +@@ -216,14 +640,18 @@ get_android_version(void) + + memset(version_string, 0, PROP_VALUE_MAX); + ++#if (__ANDROID_API__ >= ANDROID_VERSION_LOLLIPOP) ++ int len = wrap_system_property_get("ro.build.version.sdk", version_string); ++#else + int len = __system_property_get("ro.build.version.sdk", version_string); ++#endif + if (len <= 0) { + LOG("Failed to get Android version!\n"); + return len; + } + + int version = (int)strtol(version_string, NULL, 10); +- LOG("%d", version); ++ LOG("Android version %d", version); + return version; + } + #endif +@@ -249,30 +677,11 @@ opensl_init(cubeb ** context, char const * context_name) + ctx->ops = &opensl_ops; + + ctx->lib = dlopen("libOpenSLES.so", RTLD_LAZY); +- ctx->libmedia = dlopen("libmedia.so", RTLD_LAZY); +- if (!ctx->lib || !ctx->libmedia) { ++ if (!ctx->lib) { + free(ctx); + return CUBEB_ERROR; + } + +- /* Get the latency, in ms, from AudioFlinger */ +- /* status_t AudioSystem::getOutputLatency(uint32_t* latency, +- * audio_stream_type_t streamType) */ +- /* First, try the most recent signature. */ +- ctx->get_output_latency = +- dlsym(ctx->libmedia, "_ZN7android11AudioSystem16getOutputLatencyEPj19audio_stream_type_t"); +- if (!ctx->get_output_latency) { +- /* in case of failure, try the legacy version. */ +- /* status_t AudioSystem::getOutputLatency(uint32_t* latency, +- * int streamType) */ +- ctx->get_output_latency = +- dlsym(ctx->libmedia, "_ZN7android11AudioSystem16getOutputLatencyEPji"); +- if (!ctx->get_output_latency) { +- opensl_destroy(ctx); +- return CUBEB_ERROR; +- } +- } +- + typedef SLresult (*slCreateEngine_t)(SLObjectItf *, + SLuint32, + const SLEngineOption *, +@@ -287,16 +696,21 @@ opensl_init(cubeb ** context, char const * context_name) + ctx->SL_IID_BUFFERQUEUE = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_BUFFERQUEUE"); + #if defined(__ANDROID__) + ctx->SL_IID_ANDROIDCONFIGURATION = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_ANDROIDCONFIGURATION"); ++ ctx->SL_IID_ANDROIDSIMPLEBUFFERQUEUE = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_ANDROIDSIMPLEBUFFERQUEUE"); + #endif + ctx->SL_IID_PLAY = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_PLAY"); ++ ctx->SL_IID_RECORD = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_RECORD"); ++ + if (!f_slCreateEngine || + !SL_IID_ENGINE || + !SL_IID_OUTPUTMIX || + !ctx->SL_IID_BUFFERQUEUE || + #if defined(__ANDROID__) + !ctx->SL_IID_ANDROIDCONFIGURATION || ++ !ctx->SL_IID_ANDROIDSIMPLEBUFFERQUEUE || + #endif +- !ctx->SL_IID_PLAY) { ++ !ctx->SL_IID_PLAY || ++ !ctx->SL_IID_RECORD) { + opensl_destroy(ctx); + return CUBEB_ERROR; + } +@@ -337,8 +751,14 @@ opensl_init(cubeb ** context, char const * context_name) + return CUBEB_ERROR; + } + ++ ctx->p_output_latency_function = cubeb_output_latency_load_method(android_version); ++ if (!ctx->p_output_latency_function) { ++ LOG("Warning: output latency is not available, cubeb_stream_get_position() is not supported"); ++ } ++ + *context = ctx; + ++ LOG("Cubeb init (%p) success", ctx); + return CUBEB_OK; + } + +@@ -359,200 +779,257 @@ opensl_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + return CUBEB_OK; + } + ++static void ++opensl_destroy(cubeb * ctx) ++{ ++ if (ctx->outmixObj) ++ (*ctx->outmixObj)->Destroy(ctx->outmixObj); ++ if (ctx->engObj) ++ cubeb_destroy_sles_engine(&ctx->engObj); ++ dlclose(ctx->lib); ++ if (ctx->p_output_latency_function) ++ cubeb_output_latency_unload_method(ctx->p_output_latency_function); ++ free(ctx); ++} ++ ++static void opensl_stream_destroy(cubeb_stream * stm); ++ + static int +-opensl_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) +-{ +- /* https://android.googlesource.com/platform/ndk.git/+/master/docs/opensles/index.html +- * We don't want to deal with JNI here (and we don't have Java on b2g anyways), +- * so we just dlopen the library and get the two symbols we need. */ +- int r; +- void * libmedia; +- uint32_t (*get_primary_output_samplingrate)(); +- uint32_t (*get_output_samplingrate)(int * samplingRate, int streamType); +- +- libmedia = dlopen("libmedia.so", RTLD_LAZY); +- if (!libmedia) { +- return CUBEB_ERROR; ++opensl_set_format(SLDataFormat_PCM * format, cubeb_stream_params * params) ++{ ++ assert(format); ++ assert(params); ++ ++ format->formatType = SL_DATAFORMAT_PCM; ++ format->numChannels = params->channels; ++ // samplesPerSec is in milliHertz ++ format->samplesPerSec = params->rate * 1000; ++ format->bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; ++ format->containerSize = SL_PCMSAMPLEFORMAT_FIXED_16; ++ format->channelMask = params->channels == 1 ? ++ SL_SPEAKER_FRONT_CENTER : ++ SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; ++ ++ switch (params->format) { ++ case CUBEB_SAMPLE_S16LE: ++ format->endianness = SL_BYTEORDER_LITTLEENDIAN; ++ break; ++ case CUBEB_SAMPLE_S16BE: ++ format->endianness = SL_BYTEORDER_BIGENDIAN; ++ break; ++ default: ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } ++ return CUBEB_OK; ++} ++ ++static int ++opensl_configure_capture(cubeb_stream * stm, cubeb_stream_params * params) ++{ ++ assert(stm); ++ assert(params); ++ ++ SLDataLocator_AndroidSimpleBufferQueue lDataLocatorOut; ++ lDataLocatorOut.locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE; ++ lDataLocatorOut.numBuffers = NBUFS; ++ ++ SLDataFormat_PCM lDataFormat; ++ int r = opensl_set_format(&lDataFormat, params); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR_INVALID_FORMAT; + } + +- /* uint32_t AudioSystem::getPrimaryOutputSamplingRate(void) */ +- get_primary_output_samplingrate = +- dlsym(libmedia, "_ZN7android11AudioSystem28getPrimaryOutputSamplingRateEv"); +- if (!get_primary_output_samplingrate) { +- /* fallback to +- * status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType) +- * if we cannot find getPrimaryOutputSamplingRate. */ +- get_output_samplingrate = +- dlsym(libmedia, "_ZN7android11AudioSystem21getOutputSamplingRateEPj19audio_stream_type_t"); +- if (!get_output_samplingrate) { +- /* Another signature exists, with a int instead of an audio_stream_type_t */ +- get_output_samplingrate = +- dlsym(libmedia, "_ZN7android11AudioSystem21getOutputSamplingRateEPii"); +- if (!get_output_samplingrate) { +- dlclose(libmedia); +- return CUBEB_ERROR; +- } ++ /* For now set device rate to params rate. */ ++ stm->input_device_rate = params->rate; ++ ++ SLDataSink lDataSink; ++ lDataSink.pLocator = &lDataLocatorOut; ++ lDataSink.pFormat = &lDataFormat; ++ ++ SLDataLocator_IODevice lDataLocatorIn; ++ lDataLocatorIn.locatorType = SL_DATALOCATOR_IODEVICE; ++ lDataLocatorIn.deviceType = SL_IODEVICE_AUDIOINPUT; ++ lDataLocatorIn.deviceID = SL_DEFAULTDEVICEID_AUDIOINPUT; ++ lDataLocatorIn.device = NULL; ++ ++ SLDataSource lDataSource; ++ lDataSource.pLocator = &lDataLocatorIn; ++ lDataSource.pFormat = NULL; ++ ++ const SLInterfaceID lSoundRecorderIIDs[] = { stm->context->SL_IID_RECORD, ++ stm->context->SL_IID_ANDROIDSIMPLEBUFFERQUEUE, ++ stm->context->SL_IID_ANDROIDCONFIGURATION }; ++ ++ const SLboolean lSoundRecorderReqs[] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE }; ++ // create the audio recorder abstract object ++ SLresult res = (*stm->context->eng)->CreateAudioRecorder(stm->context->eng, ++ &stm->recorderObj, ++ &lDataSource, ++ &lDataSink, ++ NELEMS(lSoundRecorderIIDs), ++ lSoundRecorderIIDs, ++ lSoundRecorderReqs); ++ // Sample rate not supported. Try again with default sample rate! ++ if (res == SL_RESULT_CONTENT_UNSUPPORTED) { ++ if (stm->output_enabled && stm->output_configured_rate != 0) { ++ // Set the same with the player. Since there is no ++ // api for input device this is a safe choice. ++ stm->input_device_rate = stm->output_configured_rate; ++ } else { ++ // The output preferred rate is used for an input only scenario. ++ // The default rate expected to be supported from all android devices. ++ stm->input_device_rate = DEFAULT_SAMPLE_RATE; + } +- } ++ lDataFormat.samplesPerSec = stm->input_device_rate * 1000; ++ res = (*stm->context->eng)->CreateAudioRecorder(stm->context->eng, ++ &stm->recorderObj, ++ &lDataSource, ++ &lDataSink, ++ NELEMS(lSoundRecorderIIDs), ++ lSoundRecorderIIDs, ++ lSoundRecorderReqs); + +- if (get_primary_output_samplingrate) { +- *rate = get_primary_output_samplingrate(); +- } else { +- /* We don't really know about the type, here, so we just pass music. */ +- r = get_output_samplingrate((int *) rate, AUDIO_STREAM_TYPE_MUSIC); +- if (r) { +- dlclose(libmedia); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to create recorder. Error code: %lu", res); + return CUBEB_ERROR; + } + } + +- dlclose(libmedia); + +- /* Depending on which method we called above, we can get a zero back, yet have +- * a non-error return value, especially if the audio system is not +- * ready/shutting down (i.e. when we can't get our hand on the AudioFlinger +- * thread). */ +- if (*rate == 0) { +- return CUBEB_ERROR; +- } ++ if (get_android_version() > ANDROID_VERSION_JELLY_BEAN) { ++ SLAndroidConfigurationItf recorderConfig; ++ res = (*stm->recorderObj) ++ ->GetInterface(stm->recorderObj, ++ stm->context->SL_IID_ANDROIDCONFIGURATION, ++ &recorderConfig); + +- return CUBEB_OK; +-} ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to get the android configuration interface for recorder. Error " ++ "code: %lu", ++ res); ++ return CUBEB_ERROR; ++ } + +-static int +-opensl_get_min_latency(cubeb * ctx, cubeb_stream_params params, uint32_t * latency_frames) +-{ +- /* https://android.googlesource.com/platform/ndk.git/+/master/docs/opensles/index.html +- * We don't want to deal with JNI here (and we don't have Java on b2g anyways), +- * so we just dlopen the library and get the two symbols we need. */ ++ // Voice recognition is the lowest latency, according to the docs. Camcorder ++ // uses a microphone that is in the same direction as the camera. ++ SLint32 streamType = stm->voice ? SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION ++ : SL_ANDROID_RECORDING_PRESET_CAMCORDER; ++ ++ res = (*recorderConfig) ++ ->SetConfiguration(recorderConfig, SL_ANDROID_KEY_RECORDING_PRESET, ++ &streamType, sizeof(SLint32)); ++ ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to set the android configuration to VOICE for the recorder. " ++ "Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ } ++ // realize the audio recorder ++ res = (*stm->recorderObj)->Realize(stm->recorderObj, SL_BOOLEAN_FALSE); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to realize recorder. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ // get the record interface ++ res = (*stm->recorderObj)->GetInterface(stm->recorderObj, ++ stm->context->SL_IID_RECORD, ++ &stm->recorderItf); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to get recorder interface. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } + +- int r; +- void * libmedia; +- size_t (*get_primary_output_frame_count)(void); +- int (*get_output_frame_count)(size_t * frameCount, int streamType); +- uint32_t primary_sampling_rate; +- size_t primary_buffer_size; ++ res = (*stm->recorderItf)->RegisterCallback(stm->recorderItf, recorder_marker_callback, stm); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to register recorder marker callback. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } + +- r = opensl_get_preferred_sample_rate(ctx, &primary_sampling_rate); ++ (*stm->recorderItf)->SetMarkerPosition(stm->recorderItf, (SLmillisecond)0); + +- if (r) { ++ res = (*stm->recorderItf)->SetCallbackEventsMask(stm->recorderItf, (SLuint32)SL_RECORDEVENT_HEADATMARKER); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to set headatmarker event mask. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ // get the simple android buffer queue interface ++ res = (*stm->recorderObj)->GetInterface(stm->recorderObj, ++ stm->context->SL_IID_ANDROIDSIMPLEBUFFERQUEUE, ++ &stm->recorderBufferQueueItf); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to get recorder (android) buffer queue interface. Error code: %lu", res); + return CUBEB_ERROR; + } + +- libmedia = dlopen("libmedia.so", RTLD_LAZY); +- if (!libmedia) { ++ // register callback on record (input) buffer queue ++ slAndroidSimpleBufferQueueCallback rec_callback = recorder_callback; ++ if (stm->output_enabled) { ++ // Register full duplex callback instead. ++ rec_callback = recorder_fullduplex_callback; ++ } ++ res = (*stm->recorderBufferQueueItf)->RegisterCallback(stm->recorderBufferQueueItf, ++ rec_callback, ++ stm); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to register recorder buffer queue callback. Error code: %lu", res); + return CUBEB_ERROR; + } + +- /* JB variant */ +- /* size_t AudioSystem::getPrimaryOutputFrameCount(void) */ +- get_primary_output_frame_count = +- dlsym(libmedia, "_ZN7android11AudioSystem26getPrimaryOutputFrameCountEv"); +- if (!get_primary_output_frame_count) { +- /* ICS variant */ +- /* status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType) */ +- get_output_frame_count = +- dlsym(libmedia, "_ZN7android11AudioSystem19getOutputFrameCountEPii"); +- if (!get_output_frame_count) { +- dlclose(libmedia); +- return CUBEB_ERROR; +- } ++ // Calculate length of input buffer according to requested latency ++ stm->input_frame_size = params->channels * sizeof(int16_t); ++ stm->input_buffer_length = (stm->input_frame_size * stm->buffer_size_frames); ++ ++ // Calculate the capacity of input array ++ stm->input_array_capacity = NBUFS; ++ if (stm->output_enabled) { ++ // Full duplex, update capacity to hold 1 sec of data ++ stm->input_array_capacity = 1 * stm->input_device_rate / stm->input_buffer_length; ++ } ++ // Allocate input array ++ stm->input_buffer_array = (void**)calloc(1, sizeof(void*)*stm->input_array_capacity); ++ // Buffering has not started yet. ++ stm->input_buffer_index = -1; ++ // Prepare input buffers ++ for(uint32_t i = 0; i < stm->input_array_capacity; ++i) { ++ stm->input_buffer_array[i] = calloc(1, stm->input_buffer_length); + } + +- if (get_primary_output_frame_count) { +- primary_buffer_size = get_primary_output_frame_count(); +- } else { +- if (get_output_frame_count(&primary_buffer_size, params.stream_type) != 0) { +- return CUBEB_ERROR; +- } ++ // On full duplex allocate input queue and silent buffer ++ if (stm->output_enabled) { ++ stm->input_queue = array_queue_create(stm->input_array_capacity); ++ assert(stm->input_queue); ++ stm->input_silent_buffer = calloc(1, stm->input_buffer_length); ++ assert(stm->input_silent_buffer); + } + +- /* To get a fast track in Android's mixer, we need to be at the native +- * samplerate, which is device dependant. Some devices might be able to +- * resample when playing a fast track, but it's pretty rare. */ +- *latency_frames = NBUFS * primary_buffer_size; ++ // Enqueue buffer to start rolling once recorder started ++ r = opensl_enqueue_recorder(stm, NULL); ++ if (r != CUBEB_OK) { ++ return r; ++ } + +- dlclose(libmedia); ++ LOG("Cubeb stream init recorder success"); + + return CUBEB_OK; + } + +-static void +-opensl_destroy(cubeb * ctx) +-{ +- if (ctx->outmixObj) +- (*ctx->outmixObj)->Destroy(ctx->outmixObj); +- if (ctx->engObj) +- cubeb_destroy_sles_engine(&ctx->engObj); +- dlclose(ctx->lib); +- dlclose(ctx->libmedia); +- free(ctx); +-} +- +-static void opensl_stream_destroy(cubeb_stream * stm); +- + static int +-opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, +- cubeb_devid input_device, +- cubeb_stream_params * input_stream_params, +- cubeb_devid output_device, +- cubeb_stream_params * output_stream_params, +- unsigned int latency_frames, +- cubeb_data_callback data_callback, cubeb_state_callback state_callback, +- void * user_ptr) +-{ +- cubeb_stream * stm; +- +- assert(ctx); +- assert(!input_stream_params && "not supported"); +- if (input_device || output_device) { +- /* Device selection not yet implemented. */ +- return CUBEB_ERROR_DEVICE_UNAVAILABLE; +- } +- +- *stream = NULL; +- +- SLDataFormat_PCM format; +- +- format.formatType = SL_DATAFORMAT_PCM; +- format.numChannels = output_stream_params->channels; +- // samplesPerSec is in milliHertz +- format.samplesPerSec = output_stream_params->rate * 1000; +- format.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; +- format.containerSize = SL_PCMSAMPLEFORMAT_FIXED_16; +- format.channelMask = output_stream_params->channels == 1 ? +- SL_SPEAKER_FRONT_CENTER : +- SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; +- +- switch (output_stream_params->format) { +- case CUBEB_SAMPLE_S16LE: +- format.endianness = SL_BYTEORDER_LITTLEENDIAN; +- break; +- case CUBEB_SAMPLE_S16BE: +- format.endianness = SL_BYTEORDER_BIGENDIAN; +- break; +- default: +- return CUBEB_ERROR_INVALID_FORMAT; +- } +- +- stm = calloc(1, sizeof(*stm)); ++opensl_configure_playback(cubeb_stream * stm, cubeb_stream_params * params) { + assert(stm); ++ assert(params); + +- stm->context = ctx; +- stm->data_callback = data_callback; +- stm->state_callback = state_callback; +- stm->user_ptr = user_ptr; +- +- stm->inputrate = output_stream_params->rate; +- stm->latency = latency_frames; +- stm->stream_type = output_stream_params->stream_type; +- stm->framesize = output_stream_params->channels * sizeof(int16_t); ++ stm->user_output_rate = params->rate; ++ stm->framesize = params->channels * sizeof(int16_t); + stm->lastPosition = -1; + stm->lastPositionTimeStamp = 0; + stm->lastCompensativePosition = -1; + +- int r = pthread_mutex_init(&stm->mutex, NULL); +- assert(r == 0); ++ SLDataFormat_PCM format; ++ int r = opensl_set_format(&format, params); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } + + SLDataLocator_BufferQueue loc_bufq; + loc_bufq.locatorType = SL_DATALOCATOR_BUFFERQUEUE; +@@ -563,15 +1040,15 @@ opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name + + SLDataLocator_OutputMix loc_outmix; + loc_outmix.locatorType = SL_DATALOCATOR_OUTPUTMIX; +- loc_outmix.outputMix = ctx->outmixObj; ++ loc_outmix.outputMix = stm->context->outmixObj; + SLDataSink sink; + sink.pLocator = &loc_outmix; + sink.pFormat = NULL; + + #if defined(__ANDROID__) +- const SLInterfaceID ids[] = {ctx->SL_IID_BUFFERQUEUE, +- ctx->SL_IID_VOLUME, +- ctx->SL_IID_ANDROIDCONFIGURATION}; ++ const SLInterfaceID ids[] = {stm->context->SL_IID_BUFFERQUEUE, ++ stm->context->SL_IID_VOLUME, ++ stm->context->SL_IID_ANDROIDCONFIGURATION}; + const SLboolean req[] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; + #else + const SLInterfaceID ids[] = {ctx->SL_IID_BUFFERQUEUE, ctx->SL_IID_VOLUME}; +@@ -579,115 +1056,166 @@ opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name + #endif + assert(NELEMS(ids) == NELEMS(req)); + +- uint32_t preferred_sampling_rate = stm->inputrate; +-#if defined(__ANDROID__) +- if (get_android_version() >= ANDROID_VERSION_MARSHMALLOW) { +- // Reset preferred samping rate to trigger fallback to native sampling rate. +- preferred_sampling_rate = 0; +- if (opensl_get_min_latency(ctx, *output_stream_params, &latency_frames) != CUBEB_OK) { +- // Default to AudioFlinger's advertised fast track latency of 10ms. +- latency_frames = 440; +- } +- stm->latency = latency_frames; +- } +-#endif +- ++ uint32_t preferred_sampling_rate = stm->user_output_rate; + SLresult res = SL_RESULT_CONTENT_UNSUPPORTED; + if (preferred_sampling_rate) { +- res = (*ctx->eng)->CreateAudioPlayer(ctx->eng, &stm->playerObj, &source, +- &sink, NELEMS(ids), ids, req); ++ res = (*stm->context->eng)->CreateAudioPlayer(stm->context->eng, ++ &stm->playerObj, ++ &source, ++ &sink, ++ NELEMS(ids), ++ ids, ++ req); + } + + // Sample rate not supported? Try again with primary sample rate! +- if (res == SL_RESULT_CONTENT_UNSUPPORTED) { +- if (opensl_get_preferred_sample_rate(ctx, &preferred_sampling_rate)) { +- opensl_stream_destroy(stm); +- return CUBEB_ERROR; +- } +- ++ if (res == SL_RESULT_CONTENT_UNSUPPORTED && ++ preferred_sampling_rate != DEFAULT_SAMPLE_RATE) { ++ preferred_sampling_rate = DEFAULT_SAMPLE_RATE; + format.samplesPerSec = preferred_sampling_rate * 1000; +- res = (*ctx->eng)->CreateAudioPlayer(ctx->eng, &stm->playerObj, +- &source, &sink, NELEMS(ids), ids, req); ++ res = (*stm->context->eng)->CreateAudioPlayer(stm->context->eng, ++ &stm->playerObj, ++ &source, ++ &sink, ++ NELEMS(ids), ++ ids, ++ req); + } + + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to create audio player. Error code: %lu", res); + return CUBEB_ERROR; + } + +- stm->outputrate = preferred_sampling_rate; +- stm->bytespersec = stm->outputrate * stm->framesize; +- stm->queuebuf_len = stm->framesize * latency_frames / NBUFS; +- // round up to the next multiple of stm->framesize, if needed. +- if (stm->queuebuf_len % stm->framesize) { +- stm->queuebuf_len += stm->framesize - (stm->queuebuf_len % stm->framesize); ++ stm->output_configured_rate = preferred_sampling_rate; ++ stm->bytespersec = stm->output_configured_rate * stm->framesize; ++ stm->queuebuf_len = stm->framesize * stm->buffer_size_frames; ++ ++ // Calculate the capacity of input array ++ stm->queuebuf_capacity = NBUFS; ++ if (stm->output_enabled) { ++ // Full duplex, update capacity to hold 1 sec of data ++ stm->queuebuf_capacity = 1 * stm->output_configured_rate / stm->queuebuf_len; ++ } ++ // Allocate input array ++ stm->queuebuf = (void**)calloc(1, sizeof(void*) * stm->queuebuf_capacity); ++ for (uint32_t i = 0; i < stm->queuebuf_capacity; ++i) { ++ stm->queuebuf[i] = calloc(1, stm->queuebuf_len); ++ assert(stm->queuebuf[i]); + } + +- cubeb_stream_params params = *output_stream_params; +- params.rate = preferred_sampling_rate; ++ SLAndroidConfigurationItf playerConfig = NULL; + +- stm->resampler = cubeb_resampler_create(stm, NULL, ¶ms, +- output_stream_params->rate, +- data_callback, +- user_ptr, +- CUBEB_RESAMPLER_QUALITY_DEFAULT); ++ if (get_android_version() >= ANDROID_VERSION_N_MR1) { ++ res = (*stm->playerObj) ++ ->GetInterface(stm->playerObj, ++ stm->context->SL_IID_ANDROIDCONFIGURATION, ++ &playerConfig); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to get Android configuration interface. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } + +- if (!stm->resampler) { +- opensl_stream_destroy(stm); +- return CUBEB_ERROR; +- } ++ SLint32 streamType = SL_ANDROID_STREAM_MEDIA; ++ if (stm->voice) { ++ streamType = SL_ANDROID_STREAM_VOICE; ++ } ++ res = (*playerConfig)->SetConfiguration(playerConfig, ++ SL_ANDROID_KEY_STREAM_TYPE, ++ &streamType, ++ sizeof(streamType)); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to set Android configuration to %d Error code: %lu", ++ streamType, res); ++ } + +- int i; +- for (i = 0; i < NBUFS; i++) { +- stm->queuebuf[i] = malloc(stm->queuebuf_len); +- assert(stm->queuebuf[i]); +- } ++ SLuint32 performanceMode = SL_ANDROID_PERFORMANCE_LATENCY; ++ if (stm->buffer_size_frames > POWERSAVE_LATENCY_FRAMES_THRESHOLD) { ++ performanceMode = SL_ANDROID_PERFORMANCE_POWER_SAVING; ++ } + +-#if defined(__ANDROID__) +- SLuint32 stream_type = convert_stream_type_to_sl_stream(output_stream_params->stream_type); +- if (stream_type != 0xFFFFFFFF) { +- SLAndroidConfigurationItf playerConfig; +- res = (*stm->playerObj)->GetInterface(stm->playerObj, +- ctx->SL_IID_ANDROIDCONFIGURATION, &playerConfig); + res = (*playerConfig)->SetConfiguration(playerConfig, +- SL_ANDROID_KEY_STREAM_TYPE, &stream_type, sizeof(SLint32)); ++ SL_ANDROID_KEY_PERFORMANCE_MODE, ++ &performanceMode, ++ sizeof(performanceMode)); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); +- return CUBEB_ERROR; ++ LOG("Failed to set Android performance mode to %d Error code: %lu. This is" ++ " not fatal", performanceMode, res); + } + } +-#endif + + res = (*stm->playerObj)->Realize(stm->playerObj, SL_BOOLEAN_FALSE); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to realize player object. Error code: %lu", res); + return CUBEB_ERROR; + } + +- res = (*stm->playerObj)->GetInterface(stm->playerObj, ctx->SL_IID_PLAY, &stm->play); ++ // There are two ways of getting the audio output latency: ++ // - a configuration value, only available on some devices (notably devices ++ // running FireOS) ++ // - A Java method, that we call using JNI. ++ // ++ // The first method is prefered, if available, because it can account for more ++ // latency causes, and is more precise. ++ ++ // Latency has to be queried after the realization of the interface, when ++ // using SL_IID_ANDROIDCONFIGURATION. ++ SLuint32 audioLatency = 0; ++ SLuint32 paramSize = sizeof(SLuint32); ++ // The reported latency is in milliseconds. ++ if (playerConfig) { ++ res = (*playerConfig)->GetConfiguration(playerConfig, ++ (const SLchar *)"androidGetAudioLatency", ++ ¶mSize, ++ &audioLatency); ++ if (res == SL_RESULT_SUCCESS) { ++ LOG("Got playback latency using android configuration extension"); ++ stm->output_latency_ms = audioLatency; ++ } ++ } ++ // `playerConfig` is available, but the above failed, or `playerConfig` is not ++ // available. In both cases, we need to acquire the output latency by an other ++ // mean. ++ if ((playerConfig && res != SL_RESULT_SUCCESS) || ++ !playerConfig) { ++ if (cubeb_output_latency_method_is_loaded(stm->context->p_output_latency_function)) { ++ LOG("Got playback latency using JNI"); ++ stm->output_latency_ms = cubeb_get_output_latency(stm->context->p_output_latency_function); ++ } else { ++ LOG("No alternate latency querying method loaded, A/V sync will be off."); ++ stm->output_latency_ms = 0; ++ } ++ } ++ ++ LOG("Audio output latency: %dms", stm->output_latency_ms); ++ ++ res = (*stm->playerObj)->GetInterface(stm->playerObj, ++ stm->context->SL_IID_PLAY, ++ &stm->play); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to get play interface. Error code: %lu", res); + return CUBEB_ERROR; + } + +- res = (*stm->playerObj)->GetInterface(stm->playerObj, ctx->SL_IID_BUFFERQUEUE, ++ res = (*stm->playerObj)->GetInterface(stm->playerObj, ++ stm->context->SL_IID_BUFFERQUEUE, + &stm->bufq); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to get bufferqueue interface. Error code: %lu", res); + return CUBEB_ERROR; + } + +- res = (*stm->playerObj)->GetInterface(stm->playerObj, ctx->SL_IID_VOLUME, ++ res = (*stm->playerObj)->GetInterface(stm->playerObj, ++ stm->context->SL_IID_VOLUME, + &stm->volume); +- + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to get volume interface. Error code: %lu", res); + return CUBEB_ERROR; + } + + res = (*stm->play)->RegisterCallback(stm->play, play_callback, stm); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to register play callback. Error code: %lu", res); + return CUBEB_ERROR; + } + +@@ -696,13 +1224,17 @@ opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name + + res = (*stm->play)->SetCallbackEventsMask(stm->play, (SLuint32)SL_PLAYEVENT_HEADATMARKER); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to set headatmarker event mask. Error code: %lu", res); + return CUBEB_ERROR; + } + +- res = (*stm->bufq)->RegisterCallback(stm->bufq, bufferqueue_callback, stm); ++ slBufferQueueCallback player_callback = bufferqueue_callback; ++ if (stm->input_enabled) { ++ player_callback = player_fullduplex_callback; ++ } ++ res = (*stm->bufq)->RegisterCallback(stm->bufq, player_callback, stm); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to register bufferqueue callback. Error code: %lu", res); + return CUBEB_ERROR; + } + +@@ -717,55 +1249,340 @@ opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name + assert(res == SL_RESULT_SUCCESS); + } + +- *stream = stm; ++ LOG("Cubeb stream init playback success"); + return CUBEB_OK; + } + +-static void +-opensl_stream_destroy(cubeb_stream * stm) ++static int ++opensl_validate_stream_param(cubeb_stream_params * stream_params) + { +- if (stm->playerObj) +- (*stm->playerObj)->Destroy(stm->playerObj); +- int i; +- for (i = 0; i < NBUFS; i++) { +- free(stm->queuebuf[i]); ++ if ((stream_params && ++ (stream_params->channels < 1 || stream_params->channels > 32))) { ++ return CUBEB_ERROR_INVALID_FORMAT; + } +- pthread_mutex_destroy(&stm->mutex); ++ if ((stream_params && ++ (stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK))) { ++ LOG("Loopback is not supported"); ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ return CUBEB_OK; ++} + +- cubeb_resampler_destroy(stm->resampler); ++int has_pref_set(cubeb_stream_params* input_params, ++ cubeb_stream_params* output_params, ++ cubeb_stream_prefs pref) ++{ ++ return (input_params && input_params->prefs & pref) || ++ (output_params && output_params->prefs & pref); ++} + +- free(stm); ++static int ++opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, ++ cubeb_devid input_device, ++ cubeb_stream_params * input_stream_params, ++ cubeb_devid output_device, ++ cubeb_stream_params * output_stream_params, ++ unsigned int latency_frames, ++ cubeb_data_callback data_callback, cubeb_state_callback state_callback, ++ void * user_ptr) ++{ ++ cubeb_stream * stm; ++ ++ assert(ctx); ++ if (input_device || output_device) { ++ LOG("Device selection is not supported in Android. The default will be used"); ++ } ++ ++ *stream = NULL; ++ ++ int r = opensl_validate_stream_param(output_stream_params); ++ if(r != CUBEB_OK) { ++ LOG("Output stream params not valid"); ++ return r; ++ } ++ r = opensl_validate_stream_param(input_stream_params); ++ if(r != CUBEB_OK) { ++ LOG("Input stream params not valid"); ++ return r; ++ } ++ ++ stm = calloc(1, sizeof(*stm)); ++ assert(stm); ++ ++ stm->context = ctx; ++ stm->data_callback = data_callback; ++ stm->state_callback = state_callback; ++ stm->user_ptr = user_ptr; ++ stm->buffer_size_frames = latency_frames ? latency_frames : DEFAULT_NUM_OF_FRAMES; ++ stm->input_enabled = (input_stream_params) ? 1 : 0; ++ stm->output_enabled = (output_stream_params) ? 1 : 0; ++ stm->shutdown = 1; ++ stm->voice = has_pref_set(input_stream_params, output_stream_params, CUBEB_STREAM_PREF_VOICE); ++ ++ LOG("cubeb stream prefs: voice: %s", stm->voice ? "true" : "false"); ++ ++ ++#ifdef DEBUG ++ pthread_mutexattr_t attr; ++ pthread_mutexattr_init(&attr); ++ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); ++ r = pthread_mutex_init(&stm->mutex, &attr); ++#else ++ r = pthread_mutex_init(&stm->mutex, NULL); ++#endif ++ assert(r == 0); ++ ++ if (output_stream_params) { ++ LOG("Playback params: Rate %d, channels %d, format %d, latency in frames %d.", ++ output_stream_params->rate, output_stream_params->channels, ++ output_stream_params->format, stm->buffer_size_frames); ++ r = opensl_configure_playback(stm, output_stream_params); ++ if (r != CUBEB_OK) { ++ opensl_stream_destroy(stm); ++ return r; ++ } ++ } ++ ++ if (input_stream_params) { ++ LOG("Capture params: Rate %d, channels %d, format %d, latency in frames %d.", ++ input_stream_params->rate, input_stream_params->channels, ++ input_stream_params->format, stm->buffer_size_frames); ++ r = opensl_configure_capture(stm, input_stream_params); ++ if (r != CUBEB_OK) { ++ opensl_stream_destroy(stm); ++ return r; ++ } ++ } ++ ++ /* Configure resampler*/ ++ uint32_t target_sample_rate; ++ if (input_stream_params) { ++ target_sample_rate = input_stream_params->rate; ++ } else { ++ assert(output_stream_params); ++ target_sample_rate = output_stream_params->rate; ++ } ++ ++ // Use the actual configured rates for input ++ // and output. ++ cubeb_stream_params input_params; ++ if (input_stream_params) { ++ input_params = *input_stream_params; ++ input_params.rate = stm->input_device_rate; ++ } ++ cubeb_stream_params output_params; ++ if (output_stream_params) { ++ output_params = *output_stream_params; ++ output_params.rate = stm->output_configured_rate; ++ } ++ ++ stm->resampler = cubeb_resampler_create(stm, ++ input_stream_params ? &input_params : NULL, ++ output_stream_params ? &output_params : NULL, ++ target_sample_rate, ++ data_callback, ++ user_ptr, ++ CUBEB_RESAMPLER_QUALITY_DEFAULT); ++ if (!stm->resampler) { ++ LOG("Failed to create resampler"); ++ opensl_stream_destroy(stm); ++ return CUBEB_ERROR; ++ } ++ ++ *stream = stm; ++ LOG("Cubeb stream (%p) init success", stm); ++ return CUBEB_OK; ++} ++ ++static int ++opensl_start_player(cubeb_stream * stm) ++{ ++ assert(stm->playerObj); ++ SLuint32 playerState; ++ (*stm->playerObj)->GetState(stm->playerObj, &playerState); ++ if (playerState == SL_OBJECT_STATE_REALIZED) { ++ SLresult res = (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PLAYING); ++ if(res != SL_RESULT_SUCCESS) { ++ LOG("Failed to start player. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ } ++ return CUBEB_OK; ++} ++ ++static int ++opensl_start_recorder(cubeb_stream * stm) ++{ ++ assert(stm->recorderObj); ++ SLuint32 recorderState; ++ (*stm->recorderObj)->GetState(stm->recorderObj, &recorderState); ++ if (recorderState == SL_OBJECT_STATE_REALIZED) { ++ SLresult res = (*stm->recorderItf)->SetRecordState(stm->recorderItf, SL_RECORDSTATE_RECORDING); ++ if(res != SL_RESULT_SUCCESS) { ++ LOG("Failed to start recorder. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ } ++ return CUBEB_OK; + } + + static int + opensl_stream_start(cubeb_stream * stm) + { +- SLresult res = (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PLAYING); +- if (res != SL_RESULT_SUCCESS) +- return CUBEB_ERROR; ++ assert(stm); ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 0); ++ opensl_set_draining(stm, 0); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (stm->playerObj) { ++ r = opensl_start_player(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } ++ } ++ ++ if (stm->recorderObj) { ++ int r = opensl_start_recorder(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } ++ } ++ + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); ++ LOG("Cubeb stream (%p) started", stm); + return CUBEB_OK; + } + + static int +-opensl_stream_stop(cubeb_stream * stm) ++opensl_stop_player(cubeb_stream * stm) + { ++ assert(stm->playerObj); ++ assert(stm->shutdown || stm->draining); ++ + SLresult res = (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PAUSED); +- if (res != SL_RESULT_SUCCESS) ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to stop player. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ ++ return CUBEB_OK; ++} ++ ++static int ++opensl_stop_recorder(cubeb_stream * stm) ++{ ++ assert(stm->recorderObj); ++ assert(stm->shutdown || stm->draining); ++ ++ SLresult res = (*stm->recorderItf)->SetRecordState(stm->recorderItf, SL_RECORDSTATE_PAUSED); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to stop recorder. Error code: %lu", res); + return CUBEB_ERROR; ++ } ++ ++ return CUBEB_OK; ++} ++ ++static int ++opensl_stream_stop(cubeb_stream * stm) ++{ ++ assert(stm); ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (stm->playerObj) { ++ r = opensl_stop_player(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } ++ } ++ ++ if (stm->recorderObj) { ++ int r = opensl_stop_recorder(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } ++ } ++ + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); ++ LOG("Cubeb stream (%p) stopped", stm); + return CUBEB_OK; + } + ++static int ++opensl_destroy_recorder(cubeb_stream * stm) ++{ ++ assert(stm); ++ assert(stm->recorderObj); ++ ++ if (stm->recorderBufferQueueItf) { ++ SLresult res = (*stm->recorderBufferQueueItf)->Clear(stm->recorderBufferQueueItf); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to clear recorder buffer queue. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ stm->recorderBufferQueueItf = NULL; ++ for (uint32_t i = 0; i < stm->input_array_capacity; ++i) { ++ free(stm->input_buffer_array[i]); ++ } ++ } ++ ++ (*stm->recorderObj)->Destroy(stm->recorderObj); ++ stm->recorderObj = NULL; ++ stm->recorderItf = NULL; ++ ++ if (stm->input_queue) { ++ array_queue_destroy(stm->input_queue); ++ } ++ free(stm->input_silent_buffer); ++ ++ return CUBEB_OK; ++} ++ ++static void ++opensl_stream_destroy(cubeb_stream * stm) ++{ ++ assert(stm->draining || stm->shutdown); ++ ++ if (stm->playerObj) { ++ (*stm->playerObj)->Destroy(stm->playerObj); ++ stm->playerObj = NULL; ++ stm->play = NULL; ++ stm->bufq = NULL; ++ for (uint32_t i = 0; i < stm->queuebuf_capacity; ++i) { ++ free(stm->queuebuf[i]); ++ } ++ } ++ ++ if (stm->recorderObj) { ++ int r = opensl_destroy_recorder(stm); ++ assert(r == CUBEB_OK); ++ } ++ ++ if (stm->resampler) { ++ cubeb_resampler_destroy(stm->resampler); ++ } ++ ++ pthread_mutex_destroy(&stm->mutex); ++ ++ LOG("Cubeb stream (%p) destroyed", stm); ++ free(stm); ++} ++ + static int + opensl_stream_get_position(cubeb_stream * stm, uint64_t * position) + { + SLmillisecond msec; +- uint64_t samplerate; +- SLresult res; +- int r; +- uint32_t mixer_latency; + uint32_t compensation_msec = 0; ++ SLresult res; + + res = (*stm->play)->GetPosition(stm->play, &msec); + if (res != SL_RESULT_SUCCESS) +@@ -781,27 +1598,23 @@ opensl_stream_get_position(cubeb_stream * stm, uint64_t * position) + stm->lastPosition = msec; + } + +- samplerate = stm->inputrate; +- +- r = stm->context->get_output_latency(&mixer_latency, stm->stream_type); +- if (r) { +- return CUBEB_ERROR; +- } ++ uint64_t samplerate = stm->user_output_rate; ++ uint32_t output_latency = stm->output_latency_ms; + + pthread_mutex_lock(&stm->mutex); +- int64_t maximum_position = stm->written * (int64_t)stm->inputrate / stm->outputrate; ++ int64_t maximum_position = stm->written * (int64_t)stm->user_output_rate / stm->output_configured_rate; + pthread_mutex_unlock(&stm->mutex); + assert(maximum_position >= 0); + +- if (msec > mixer_latency) { ++ if (msec > output_latency) { + int64_t unadjusted_position; + if (stm->lastCompensativePosition > msec + compensation_msec) { + // Over compensation, use lastCompensativePosition. + unadjusted_position = +- samplerate * (stm->lastCompensativePosition - mixer_latency) / 1000; ++ samplerate * (stm->lastCompensativePosition - output_latency) / 1000; + } else { + unadjusted_position = +- samplerate * (msec - mixer_latency + compensation_msec) / 1000; ++ samplerate * (msec - output_latency + compensation_msec) / 1000; + stm->lastCompensativePosition = msec + compensation_msec; + } + *position = unadjusted_position < maximum_position ? +@@ -812,24 +1625,6 @@ opensl_stream_get_position(cubeb_stream * stm, uint64_t * position) + return CUBEB_OK; + } + +-int +-opensl_stream_get_latency(cubeb_stream * stm, uint32_t * latency) +-{ +- int r; +- uint32_t mixer_latency; // The latency returned by AudioFlinger is in ms. +- +- /* audio_stream_type_t is an int, so this is okay. */ +- r = stm->context->get_output_latency(&mixer_latency, stm->stream_type); +- if (r) { +- return CUBEB_ERROR; +- } +- +- *latency = stm->latency * stm->inputrate / 1000 + // OpenSL latency +- mixer_latency * stm->inputrate / 1000; // AudioFlinger latency +- +- return CUBEB_OK; +-} +- + int + opensl_stream_set_volume(cubeb_stream * stm, float volume) + { +@@ -865,18 +1660,19 @@ static struct cubeb_ops const opensl_ops = { + .init = opensl_init, + .get_backend_id = opensl_get_backend_id, + .get_max_channel_count = opensl_get_max_channel_count, +- .get_min_latency = opensl_get_min_latency, +- .get_preferred_sample_rate = opensl_get_preferred_sample_rate, ++ .get_min_latency = NULL, ++ .get_preferred_sample_rate = NULL, + .enumerate_devices = NULL, ++ .device_collection_destroy = NULL, + .destroy = opensl_destroy, + .stream_init = opensl_stream_init, + .stream_destroy = opensl_stream_destroy, + .stream_start = opensl_stream_start, + .stream_stop = opensl_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = opensl_stream_get_position, +- .stream_get_latency = opensl_stream_get_latency, ++ .stream_get_latency = NULL, + .stream_set_volume = opensl_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_pulse.c b/media/libcubeb/src/cubeb_pulse.c +index 4f474452d..846ba426a 100644 +--- a/media/libcubeb/src/cubeb_pulse.c ++++ b/media/libcubeb/src/cubeb_pulse.c +@@ -7,12 +7,14 @@ + #undef NDEBUG + #include + #include +-#include + #include ++#include ++#include + #include +-#include "cubeb/cubeb.h" + #include "cubeb-internal.h" +-#include ++#include "cubeb/cubeb.h" ++#include "cubeb_mixer.h" ++#include "cubeb_strings.h" + + #ifdef DISABLE_LIBPULSE_DLOPEN + #define WRAP(x) x +@@ -20,13 +22,14 @@ + #define WRAP(x) cubeb_##x + #define LIBPULSE_API_VISIT(X) \ + X(pa_channel_map_can_balance) \ +- X(pa_channel_map_init_auto) \ ++ X(pa_channel_map_init) \ + X(pa_context_connect) \ + X(pa_context_disconnect) \ + X(pa_context_drain) \ + X(pa_context_get_server_info) \ + X(pa_context_get_sink_info_by_name) \ + X(pa_context_get_sink_info_list) \ ++ X(pa_context_get_sink_input_info) \ + X(pa_context_get_source_info_list) \ + X(pa_context_get_state) \ + X(pa_context_new) \ +@@ -81,33 +84,50 @@ + X(pa_context_set_subscribe_callback) \ + X(pa_context_subscribe) \ + X(pa_mainloop_api_once) \ ++ X(pa_get_library_version) \ ++ X(pa_channel_map_init_auto) \ + + #define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x; + LIBPULSE_API_VISIT(MAKE_TYPEDEF); + #undef MAKE_TYPEDEF + #endif + ++#if PA_CHECK_VERSION(2, 0, 0) ++static int has_pulse_v2 = 0; ++#endif ++ + static struct cubeb_ops const pulse_ops; + ++struct cubeb_default_sink_info { ++ pa_channel_map channel_map; ++ uint32_t sample_spec_rate; ++ pa_sink_flags_t flags; ++}; ++ + struct cubeb { + struct cubeb_ops const * ops; + void * libpulse; + pa_threaded_mainloop * mainloop; + pa_context * context; +- pa_sink_info * default_sink_info; ++ struct cubeb_default_sink_info * default_sink_info; + char * context_name; + int error; +- cubeb_device_collection_changed_callback collection_changed_callback; +- void * collection_changed_user_ptr; ++ cubeb_device_collection_changed_callback output_collection_changed_callback; ++ void * output_collection_changed_user_ptr; ++ cubeb_device_collection_changed_callback input_collection_changed_callback; ++ void * input_collection_changed_user_ptr; ++ cubeb_strings * device_ids; + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + pa_stream * output_stream; + pa_stream * input_stream; + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; +- void * user_ptr; + pa_time_event * drain_timer; + pa_sample_spec output_sample_spec; + pa_sample_spec input_sample_spec; +@@ -124,6 +144,24 @@ enum cork_state { + NOTIFY = 1 << 1 + }; + ++static int ++intern_device_id(cubeb * ctx, char const ** id) ++{ ++ char const * interned; ++ ++ assert(ctx); ++ assert(id); ++ ++ interned = cubeb_strings_intern(ctx->device_ids, *id); ++ if (!interned) { ++ return CUBEB_ERROR; ++ } ++ ++ *id = interned; ++ ++ return CUBEB_OK; ++} ++ + static void + sink_info_callback(pa_context * context, const pa_sink_info * info, int eol, void * u) + { +@@ -131,8 +169,10 @@ sink_info_callback(pa_context * context, const pa_sink_info * info, int eol, voi + cubeb * ctx = u; + if (!eol) { + free(ctx->default_sink_info); +- ctx->default_sink_info = malloc(sizeof(pa_sink_info)); +- memcpy(ctx->default_sink_info, info, sizeof(pa_sink_info)); ++ ctx->default_sink_info = malloc(sizeof(struct cubeb_default_sink_info)); ++ memcpy(&ctx->default_sink_info->channel_map, &info->channel_map, sizeof(pa_channel_map)); ++ ctx->default_sink_info->sample_spec_rate = info->sample_spec.rate; ++ ctx->default_sink_info->flags = info->flags; + } + WRAP(pa_threaded_mainloop_signal)(ctx->mainloop, 0); + } +@@ -140,7 +180,11 @@ sink_info_callback(pa_context * context, const pa_sink_info * info, int eol, voi + static void + server_info_callback(pa_context * context, const pa_server_info * info, void * u) + { +- WRAP(pa_context_get_sink_info_by_name)(context, info->default_sink_name, sink_info_callback, u); ++ pa_operation * o; ++ o = WRAP(pa_context_get_sink_info_by_name)(context, info->default_sink_name, sink_info_callback, u); ++ if (o) { ++ WRAP(pa_operation_unref)(o); ++ } + } + + static void +@@ -467,12 +511,81 @@ stream_update_timing_info(cubeb_stream * stm) + return r; + } + ++static pa_channel_position_t ++cubeb_channel_to_pa_channel(cubeb_channel channel) ++{ ++ switch (channel) { ++ case CHANNEL_FRONT_LEFT: ++ return PA_CHANNEL_POSITION_FRONT_LEFT; ++ case CHANNEL_FRONT_RIGHT: ++ return PA_CHANNEL_POSITION_FRONT_RIGHT; ++ case CHANNEL_FRONT_CENTER: ++ return PA_CHANNEL_POSITION_FRONT_CENTER; ++ case CHANNEL_LOW_FREQUENCY: ++ return PA_CHANNEL_POSITION_LFE; ++ case CHANNEL_BACK_LEFT: ++ return PA_CHANNEL_POSITION_REAR_LEFT; ++ case CHANNEL_BACK_RIGHT: ++ return PA_CHANNEL_POSITION_REAR_RIGHT; ++ case CHANNEL_FRONT_LEFT_OF_CENTER: ++ return PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER; ++ case CHANNEL_FRONT_RIGHT_OF_CENTER: ++ return PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER; ++ case CHANNEL_BACK_CENTER: ++ return PA_CHANNEL_POSITION_REAR_CENTER; ++ case CHANNEL_SIDE_LEFT: ++ return PA_CHANNEL_POSITION_SIDE_LEFT; ++ case CHANNEL_SIDE_RIGHT: ++ return PA_CHANNEL_POSITION_SIDE_RIGHT; ++ case CHANNEL_TOP_CENTER: ++ return PA_CHANNEL_POSITION_TOP_CENTER; ++ case CHANNEL_TOP_FRONT_LEFT: ++ return PA_CHANNEL_POSITION_TOP_FRONT_LEFT; ++ case CHANNEL_TOP_FRONT_CENTER: ++ return PA_CHANNEL_POSITION_TOP_FRONT_CENTER; ++ case CHANNEL_TOP_FRONT_RIGHT: ++ return PA_CHANNEL_POSITION_TOP_FRONT_RIGHT; ++ case CHANNEL_TOP_BACK_LEFT: ++ return PA_CHANNEL_POSITION_TOP_REAR_LEFT; ++ case CHANNEL_TOP_BACK_CENTER: ++ return PA_CHANNEL_POSITION_TOP_REAR_CENTER; ++ case CHANNEL_TOP_BACK_RIGHT: ++ return PA_CHANNEL_POSITION_TOP_REAR_RIGHT; ++ default: ++ return PA_CHANNEL_POSITION_INVALID; ++ } ++} ++ ++static void ++layout_to_channel_map(cubeb_channel_layout layout, pa_channel_map * cm) ++{ ++ assert(cm && layout != CUBEB_LAYOUT_UNDEFINED); ++ ++ WRAP(pa_channel_map_init)(cm); ++ ++ uint32_t channels = 0; ++ cubeb_channel_layout channelMap = layout; ++ for (uint32_t i = 0 ; channelMap != 0; ++i) { ++ uint32_t channel = (channelMap & 1) << i; ++ if (channel != 0) { ++ cm->map[channels] = cubeb_channel_to_pa_channel(channel); ++ channels++; ++ } ++ channelMap = channelMap >> 1; ++ } ++ unsigned int channels_from_layout = cubeb_channel_layout_nb_channels(layout); ++ assert(channels_from_layout <= UINT8_MAX); ++ cm->channels = (uint8_t) channels_from_layout; ++} ++ + static void pulse_context_destroy(cubeb * ctx); + static void pulse_destroy(cubeb * ctx); + + static int + pulse_context_init(cubeb * ctx) + { ++ int r; ++ + if (ctx->context) { + assert(ctx->error == 1); + pulse_context_destroy(ctx); +@@ -486,9 +599,9 @@ pulse_context_init(cubeb * ctx) + WRAP(pa_context_set_state_callback)(ctx->context, context_state_callback, ctx); + + WRAP(pa_threaded_mainloop_lock)(ctx->mainloop); +- WRAP(pa_context_connect)(ctx->context, NULL, 0, NULL); ++ r = WRAP(pa_context_connect)(ctx->context, NULL, 0, NULL); + +- if (wait_until_context_ready(ctx) != 0) { ++ if (r < 0 || wait_until_context_ready(ctx) != 0) { + WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); + pulse_context_destroy(ctx); + ctx->context = NULL; +@@ -502,18 +615,25 @@ pulse_context_init(cubeb * ctx) + return 0; + } + ++static int pulse_subscribe_notifications(cubeb * context, ++ pa_subscription_mask_t mask); ++ + /*static*/ int + pulse_init(cubeb ** context, char const * context_name) + { + void * libpulse = NULL; + cubeb * ctx; ++ pa_operation * o; + + *context = NULL; + + #ifndef DISABLE_LIBPULSE_DLOPEN + libpulse = dlopen("libpulse.so.0", RTLD_LAZY); + if (!libpulse) { +- return CUBEB_ERROR; ++ libpulse = dlopen("libpulse.so", RTLD_LAZY); ++ if (!libpulse) { ++ return CUBEB_ERROR; ++ } + } + + #define LOAD(x) { \ +@@ -528,11 +648,20 @@ pulse_init(cubeb ** context, char const * context_name) + #undef LOAD + #endif + ++#if PA_CHECK_VERSION(2, 0, 0) ++ const char* version = WRAP(pa_get_library_version)(); ++ has_pulse_v2 = strtol(version, NULL, 10) >= 2; ++#endif ++ + ctx = calloc(1, sizeof(*ctx)); + assert(ctx); + + ctx->ops = &pulse_ops; + ctx->libpulse = libpulse; ++ if (cubeb_strings_init(&ctx->device_ids) != CUBEB_OK) { ++ pulse_destroy(ctx); ++ return CUBEB_ERROR; ++ } + + ctx->mainloop = WRAP(pa_threaded_mainloop_new)(); + ctx->default_sink_info = NULL; +@@ -545,10 +674,20 @@ pulse_init(cubeb ** context, char const * context_name) + return CUBEB_ERROR; + } + ++ /* server_info_callback performs a second async query, which is ++ responsible for initializing default_sink_info and signalling the ++ mainloop to end the wait. */ + WRAP(pa_threaded_mainloop_lock)(ctx->mainloop); +- WRAP(pa_context_get_server_info)(ctx->context, server_info_callback, ctx); ++ o = WRAP(pa_context_get_server_info)(ctx->context, server_info_callback, ctx); ++ if (o) { ++ operation_wait(ctx, NULL, o); ++ WRAP(pa_operation_unref)(o); ++ } + WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); + ++ /* Update `default_sink_info` when the default device changes. */ ++ pulse_subscribe_notifications(ctx, PA_SUBSCRIPTION_MASK_SERVER); ++ + *context = ctx; + + return CUBEB_OK; +@@ -567,11 +706,8 @@ pulse_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + (void)ctx; + assert(ctx && max_channels); + +- WRAP(pa_threaded_mainloop_lock)(ctx->mainloop); +- while (!ctx->default_sink_info) { +- WRAP(pa_threaded_mainloop_wait)(ctx->mainloop); +- } +- WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); ++ if (!ctx->default_sink_info) ++ return CUBEB_ERROR; + + *max_channels = ctx->default_sink_info->channel_map.channels; + +@@ -584,13 +720,10 @@ pulse_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) + assert(ctx && rate); + (void)ctx; + +- WRAP(pa_threaded_mainloop_lock)(ctx->mainloop); +- while (!ctx->default_sink_info) { +- WRAP(pa_threaded_mainloop_wait)(ctx->mainloop); +- } +- WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); ++ if (!ctx->default_sink_info) ++ return CUBEB_ERROR; + +- *rate = ctx->default_sink_info->sample_spec.rate; ++ *rate = ctx->default_sink_info->sample_spec_rate; + + return CUBEB_OK; + } +@@ -625,9 +758,7 @@ pulse_context_destroy(cubeb * ctx) + static void + pulse_destroy(cubeb * ctx) + { +- if (ctx->context_name) { +- free(ctx->context_name); +- } ++ free(ctx->context_name); + if (ctx->context) { + pulse_context_destroy(ctx); + } +@@ -637,12 +768,14 @@ pulse_destroy(cubeb * ctx) + WRAP(pa_threaded_mainloop_free)(ctx->mainloop); + } + ++ if (ctx->device_ids) { ++ cubeb_strings_destroy(ctx->device_ids); ++ } ++ + if (ctx->libpulse) { + dlclose(ctx->libpulse); + } +- if (ctx->default_sink_info) { +- free(ctx->default_sink_info); +- } ++ free(ctx->default_sink_info); + free(ctx); + } + +@@ -665,6 +798,25 @@ to_pulse_format(cubeb_sample_format format) + } + } + ++static cubeb_channel_layout ++pulse_default_layout_for_channels(uint32_t ch) ++{ ++ assert (ch > 0 && ch <= 8); ++ switch (ch) { ++ case 1: return CUBEB_LAYOUT_MONO; ++ case 2: return CUBEB_LAYOUT_STEREO; ++ case 3: return CUBEB_LAYOUT_3F; ++ case 4: return CUBEB_LAYOUT_QUAD; ++ case 5: return CUBEB_LAYOUT_3F2; ++ case 6: return CUBEB_LAYOUT_3F_LFE | ++ CHANNEL_SIDE_LEFT | CHANNEL_SIDE_RIGHT; ++ case 7: return CUBEB_LAYOUT_3F3R_LFE; ++ case 8: return CUBEB_LAYOUT_3F4_LFE; ++ } ++ // Never get here! ++ return CUBEB_LAYOUT_UNDEFINED; ++} ++ + static int + create_pa_stream(cubeb_stream * stm, + pa_stream ** pa_stm, +@@ -672,15 +824,39 @@ create_pa_stream(cubeb_stream * stm, + char const * stream_name) + { + assert(stm && stream_params); ++ assert(&stm->input_stream == pa_stm || (&stm->output_stream == pa_stm && ++ (stream_params->layout == CUBEB_LAYOUT_UNDEFINED || ++ (stream_params->layout != CUBEB_LAYOUT_UNDEFINED && ++ cubeb_channel_layout_nb_channels(stream_params->layout) == stream_params->channels)))); ++ if (stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } + *pa_stm = NULL; + pa_sample_spec ss; + ss.format = to_pulse_format(stream_params->format); + if (ss.format == PA_SAMPLE_INVALID) + return CUBEB_ERROR_INVALID_FORMAT; + ss.rate = stream_params->rate; +- ss.channels = stream_params->channels; +- +- *pa_stm = WRAP(pa_stream_new)(stm->context->context, stream_name, &ss, NULL); ++ if (stream_params->channels > UINT8_MAX) ++ return CUBEB_ERROR_INVALID_FORMAT; ++ ss.channels = (uint8_t) stream_params->channels; ++ ++ if (stream_params->layout == CUBEB_LAYOUT_UNDEFINED) { ++ pa_channel_map cm; ++ if (stream_params->channels <= 8 && ++ !WRAP(pa_channel_map_init_auto)(&cm, stream_params->channels, PA_CHANNEL_MAP_DEFAULT)) { ++ LOG("Layout undefined and PulseAudio's default layout has not been configured, guess one."); ++ layout_to_channel_map(pulse_default_layout_for_channels(stream_params->channels), &cm); ++ *pa_stm = WRAP(pa_stream_new)(stm->context->context, stream_name, &ss, &cm); ++ } else { ++ LOG("Layout undefined, PulseAudio will use its default."); ++ *pa_stm = WRAP(pa_stream_new)(stm->context->context, stream_name, &ss, NULL); ++ } ++ } else { ++ pa_channel_map cm; ++ layout_to_channel_map(stream_params->layout, &cm); ++ *pa_stm = WRAP(pa_stream_new)(stm->context->context, stream_name, &ss, &cm); ++ } + return (*pa_stm == NULL) ? CUBEB_ERROR : CUBEB_OK; + } + +@@ -753,7 +929,7 @@ pulse_stream_init(cubeb * context, + + battr = set_buffering_attribute(latency_frames, &stm->output_sample_spec); + WRAP(pa_stream_connect_playback)(stm->output_stream, +- output_device, ++ (char const *) output_device, + &battr, + PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_INTERPOLATE_TIMING | + PA_STREAM_START_CORKED | PA_STREAM_ADJUST_LATENCY, +@@ -776,7 +952,7 @@ pulse_stream_init(cubeb * context, + + battr = set_buffering_attribute(latency_frames, &stm->input_sample_spec); + WRAP(pa_stream_connect_record)(stm->input_stream, +- input_device, ++ (char const *) input_device, + &battr, + PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_INTERPOLATE_TIMING | + PA_STREAM_START_CORKED | PA_STREAM_ADJUST_LATENCY); +@@ -796,7 +972,7 @@ pulse_stream_init(cubeb * context, + return CUBEB_ERROR; + } + +- if (g_log_level) { ++ if (g_cubeb_log_level) { + if (output_stream_params){ + const pa_buffer_attr * output_att; + output_att = WRAP(pa_stream_get_buffer_attr)(stm->output_stream); +@@ -813,6 +989,7 @@ pulse_stream_init(cubeb * context, + } + + *stream = stm; ++ LOG("Cubeb stream (%p) init successful.", *stream); + + return CUBEB_OK; + } +@@ -844,6 +1021,7 @@ pulse_stream_destroy(cubeb_stream * stm) + } + WRAP(pa_threaded_mainloop_unlock)(stm->context->mainloop); + ++ LOG("Cubeb stream (%p) destroyed successfully.", stm); + free(stm); + } + +@@ -875,6 +1053,7 @@ pulse_stream_start(cubeb_stream * stm) + WRAP(pa_threaded_mainloop_unlock)(stm->context->mainloop); + } + ++ LOG("Cubeb stream (%p) started successfully.", stm); + return CUBEB_OK; + } + +@@ -890,6 +1069,7 @@ pulse_stream_stop(cubeb_stream * stm) + WRAP(pa_threaded_mainloop_unlock)(stm->context->mainloop); + + stream_cork(stm, CORK | NOTIFY); ++ LOG("Cubeb stream (%p) stopped successfully.", stm); + return CUBEB_OK; + } + +@@ -962,6 +1142,7 @@ pulse_stream_set_volume(cubeb_stream * stm, float volume) + pa_volume_t vol; + pa_cvolume cvol; + const pa_sample_spec * ss; ++ cubeb * ctx; + + if (!stm->output_stream) { + return CUBEB_ERROR; +@@ -969,13 +1150,11 @@ pulse_stream_set_volume(cubeb_stream * stm, float volume) + + WRAP(pa_threaded_mainloop_lock)(stm->context->mainloop); + +- while (!stm->context->default_sink_info) { +- WRAP(pa_threaded_mainloop_wait)(stm->context->mainloop); +- } +- + /* if the pulse daemon is configured to use flat volumes, + * apply our own gain instead of changing the input volume on the sink. */ +- if (stm->context->default_sink_info->flags & PA_SINK_FLAT_VOLUME) { ++ ctx = stm->context; ++ if (ctx->default_sink_info && ++ (ctx->default_sink_info->flags & PA_SINK_FLAT_VOLUME)) { + stm->volume = volume; + } else { + ss = WRAP(pa_stream_get_sample_spec)(stm->output_stream); +@@ -985,46 +1164,40 @@ pulse_stream_set_volume(cubeb_stream * stm, float volume) + + index = WRAP(pa_stream_get_index)(stm->output_stream); + +- op = WRAP(pa_context_set_sink_input_volume)(stm->context->context, ++ op = WRAP(pa_context_set_sink_input_volume)(ctx->context, + index, &cvol, volume_success, + stm); + if (op) { +- operation_wait(stm->context, stm->output_stream, op); ++ operation_wait(ctx, stm->output_stream, op); + WRAP(pa_operation_unref)(op); + } + } + +- WRAP(pa_threaded_mainloop_unlock)(stm->context->mainloop); ++ WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); + + return CUBEB_OK; + } + +-static int +-pulse_stream_set_panning(cubeb_stream * stream, float panning) +-{ +- const pa_channel_map * map; +- pa_cvolume vol; +- +- if (!stream->output_stream) { +- return CUBEB_ERROR; +- } +- +- map = WRAP(pa_stream_get_channel_map)(stream->output_stream); ++struct sink_input_info_result { ++ pa_cvolume * cvol; ++ pa_threaded_mainloop * mainloop; ++}; + +- if (!WRAP(pa_channel_map_can_balance)(map)) { +- return CUBEB_ERROR; ++static void ++sink_input_info_cb(pa_context * c, pa_sink_input_info const * i, int eol, void * u) ++{ ++ struct sink_input_info_result * r = u; ++ if (!eol) { ++ *r->cvol = i->volume; + } +- +- WRAP(pa_cvolume_set_balance)(&vol, map, panning); +- +- return CUBEB_OK; ++ WRAP(pa_threaded_mainloop_signal)(r->mainloop, 0); + } + + typedef struct { + char * default_sink_name; + char * default_source_name; + +- cubeb_device_info ** devinfo; ++ cubeb_device_info * devinfo; + uint32_t max; + uint32_t count; + cubeb * context; +@@ -1053,7 +1226,7 @@ pulse_ensure_dev_list_data_list_size (pulse_dev_list_data * list_data) + if (list_data->count == list_data->max) { + list_data->max += 8; + list_data->devinfo = realloc(list_data->devinfo, +- sizeof(cubeb_device_info *) * list_data->max); ++ sizeof(cubeb_device_info) * list_data->max); + } + } + +@@ -1062,33 +1235,47 @@ pulse_get_state_from_sink_port(pa_sink_port_info * info) + { + if (info != NULL) { + #if PA_CHECK_VERSION(2, 0, 0) +- if (info->available == PA_PORT_AVAILABLE_NO) ++ if (has_pulse_v2 && info->available == PA_PORT_AVAILABLE_NO) + return CUBEB_DEVICE_STATE_UNPLUGGED; + else /*if (info->available == PA_PORT_AVAILABLE_YES) + UNKNOWN */ + #endif + return CUBEB_DEVICE_STATE_ENABLED; + } + +- return CUBEB_DEVICE_STATE_DISABLED; ++ return CUBEB_DEVICE_STATE_ENABLED; + } + + static void + pulse_sink_info_cb(pa_context * context, const pa_sink_info * info, +- int eol, void * user_data) ++ int eol, void * user_data) + { + pulse_dev_list_data * list_data = user_data; + cubeb_device_info * devinfo; +- const char * prop; ++ char const * prop = NULL; ++ char const * device_id = NULL; + + (void)context; + +- if (eol || info == NULL) ++ if (eol) { ++ WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); ++ return; ++ } ++ ++ if (info == NULL) + return; + +- devinfo = calloc(1, sizeof(cubeb_device_info)); ++ device_id = info->name; ++ if (intern_device_id(list_data->context, &device_id) != CUBEB_OK) { ++ assert(NULL); ++ return; ++ } ++ ++ pulse_ensure_dev_list_data_list_size(list_data); ++ devinfo = &list_data->devinfo[list_data->count]; ++ memset(devinfo, 0, sizeof(cubeb_device_info)); + +- devinfo->device_id = strdup(info->name); +- devinfo->devid = devinfo->device_id; ++ devinfo->device_id = device_id; ++ devinfo->devid = (cubeb_devid) devinfo->device_id; + devinfo->friendly_name = strdup(info->description); + prop = WRAP(pa_proplist_gets)(info->proplist, "sysfs.path"); + if (prop) +@@ -1099,7 +1286,8 @@ pulse_sink_info_cb(pa_context * context, const pa_sink_info * info, + + devinfo->type = CUBEB_DEVICE_TYPE_OUTPUT; + devinfo->state = pulse_get_state_from_sink_port(info->active_port); +- devinfo->preferred = strcmp(info->name, list_data->default_sink_name) == 0; ++ devinfo->preferred = (strcmp(info->name, list_data->default_sink_name) == 0) ? ++ CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE; + + devinfo->format = CUBEB_DEVICE_FMT_ALL; + devinfo->default_format = pulse_format_to_cubeb_format(info->sample_spec.format); +@@ -1111,10 +1299,7 @@ pulse_sink_info_cb(pa_context * context, const pa_sink_info * info, + devinfo->latency_lo = 0; + devinfo->latency_hi = 0; + +- pulse_ensure_dev_list_data_list_size (list_data); +- list_data->devinfo[list_data->count++] = devinfo; +- +- WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); ++ list_data->count += 1; + } + + static cubeb_device_state +@@ -1122,14 +1307,14 @@ pulse_get_state_from_source_port(pa_source_port_info * info) + { + if (info != NULL) { + #if PA_CHECK_VERSION(2, 0, 0) +- if (info->available == PA_PORT_AVAILABLE_NO) ++ if (has_pulse_v2 && info->available == PA_PORT_AVAILABLE_NO) + return CUBEB_DEVICE_STATE_UNPLUGGED; + else /*if (info->available == PA_PORT_AVAILABLE_YES) + UNKNOWN */ + #endif + return CUBEB_DEVICE_STATE_ENABLED; + } + +- return CUBEB_DEVICE_STATE_DISABLED; ++ return CUBEB_DEVICE_STATE_ENABLED; + } + + static void +@@ -1138,17 +1323,28 @@ pulse_source_info_cb(pa_context * context, const pa_source_info * info, + { + pulse_dev_list_data * list_data = user_data; + cubeb_device_info * devinfo; +- const char * prop; ++ char const * prop = NULL; ++ char const * device_id = NULL; + + (void)context; + +- if (eol) ++ if (eol) { ++ WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); ++ return; ++ } ++ ++ device_id = info->name; ++ if (intern_device_id(list_data->context, &device_id) != CUBEB_OK) { ++ assert(NULL); + return; ++ } + +- devinfo = calloc(1, sizeof(cubeb_device_info)); ++ pulse_ensure_dev_list_data_list_size(list_data); ++ devinfo = &list_data->devinfo[list_data->count]; ++ memset(devinfo, 0, sizeof(cubeb_device_info)); + +- devinfo->device_id = strdup(info->name); +- devinfo->devid = devinfo->device_id; ++ devinfo->device_id = device_id; ++ devinfo->devid = (cubeb_devid) devinfo->device_id; + devinfo->friendly_name = strdup(info->description); + prop = WRAP(pa_proplist_gets)(info->proplist, "sysfs.path"); + if (prop) +@@ -1159,7 +1355,8 @@ pulse_source_info_cb(pa_context * context, const pa_source_info * info, + + devinfo->type = CUBEB_DEVICE_TYPE_INPUT; + devinfo->state = pulse_get_state_from_source_port(info->active_port); +- devinfo->preferred = strcmp(info->name, list_data->default_source_name) == 0; ++ devinfo->preferred = (strcmp(info->name, list_data->default_source_name) == 0) ? ++ CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE; + + devinfo->format = CUBEB_DEVICE_FMT_ALL; + devinfo->default_format = pulse_format_to_cubeb_format(info->sample_spec.format); +@@ -1171,10 +1368,7 @@ pulse_source_info_cb(pa_context * context, const pa_source_info * info, + devinfo->latency_lo = 0; + devinfo->latency_hi = 0; + +- pulse_ensure_dev_list_data_list_size (list_data); +- list_data->devinfo[list_data->count++] = devinfo; +- +- WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); ++ list_data->count += 1; + } + + static void +@@ -1186,19 +1380,20 @@ pulse_server_info_cb(pa_context * c, const pa_server_info * i, void * userdata) + + free(list_data->default_sink_name); + free(list_data->default_source_name); +- list_data->default_sink_name = strdup(i->default_sink_name); +- list_data->default_source_name = strdup(i->default_source_name); ++ list_data->default_sink_name = ++ i->default_sink_name ? strdup(i->default_sink_name) : NULL; ++ list_data->default_source_name = ++ i->default_source_name ? strdup(i->default_source_name) : NULL; + + WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); + } + + static int + pulse_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { + pulse_dev_list_data user_data = { NULL, NULL, NULL, 0, 0, context }; + pa_operation * o; +- uint32_t i; + + WRAP(pa_threaded_mainloop_lock)(context->mainloop); + +@@ -1229,15 +1424,26 @@ pulse_enumerate_devices(cubeb * context, cubeb_device_type type, + + WRAP(pa_threaded_mainloop_unlock)(context->mainloop); + +- *collection = malloc(sizeof(cubeb_device_collection) + +- sizeof(cubeb_device_info *) * (user_data.count > 0 ? user_data.count - 1 : 0)); +- (*collection)->count = user_data.count; +- for (i = 0; i < user_data.count; i++) +- (*collection)->device[i] = user_data.devinfo[i]; ++ collection->device = user_data.devinfo; ++ collection->count = user_data.count; + + free(user_data.default_sink_name); + free(user_data.default_source_name); +- free(user_data.devinfo); ++ return CUBEB_OK; ++} ++ ++static int ++pulse_device_collection_destroy(cubeb * ctx, cubeb_device_collection * collection) ++{ ++ size_t n; ++ ++ for (n = 0; n < collection->count; n++) { ++ free((void *) collection->device[n].friendly_name); ++ free((void *) collection->device[n].vendor_name); ++ free((void *) collection->device[n].group_id); ++ } ++ ++ free(collection->device); + return CUBEB_OK; + } + +@@ -1285,29 +1491,40 @@ pulse_subscribe_callback(pa_context * ctx, + cubeb * context = userdata; + + switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) { ++ case PA_SUBSCRIPTION_EVENT_SERVER: ++ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) { ++ LOG("Server changed %d", index); ++ WRAP(pa_context_get_server_info)(context->context, server_info_callback, context); ++ } ++ break; + case PA_SUBSCRIPTION_EVENT_SOURCE: + case PA_SUBSCRIPTION_EVENT_SINK: + +- if (g_log_level) { ++ if (g_cubeb_log_level) { + if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE && + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { +- LOG("Removing sink index %d", index); ++ LOG("Removing source index %d", index); + } else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE && + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) { +- LOG("Adding sink index %d", index); ++ LOG("Adding source index %d", index); + } + if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK && + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { +- LOG("Removing source index %d", index); ++ LOG("Removing sink index %d", index); + } else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK && + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) { +- LOG("Adding source index %d", index); ++ LOG("Adding sink index %d", index); + } + } + + if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE || + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) { +- context->collection_changed_callback(context, context->collection_changed_user_ptr); ++ if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE) { ++ context->input_collection_changed_callback(context, context->input_collection_changed_user_ptr); ++ } ++ if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK) { ++ context->output_collection_changed_callback(context, context->output_collection_changed_user_ptr); ++ } + } + break; + } +@@ -1323,34 +1540,15 @@ subscribe_success(pa_context *c, int success, void *userdata) + } + + static int +-pulse_register_device_collection_changed(cubeb * context, +- cubeb_device_type devtype, +- cubeb_device_collection_changed_callback collection_changed_callback, +- void * user_ptr) +-{ +- context->collection_changed_callback = collection_changed_callback; +- context->collection_changed_user_ptr = user_ptr; +- ++pulse_subscribe_notifications(cubeb * context, pa_subscription_mask_t mask) { + WRAP(pa_threaded_mainloop_lock)(context->mainloop); + +- pa_subscription_mask_t mask; +- if (context->collection_changed_callback == NULL) { +- // Unregister subscription +- WRAP(pa_context_set_subscribe_callback)(context->context, NULL, NULL); +- mask = PA_SUBSCRIPTION_MASK_NULL; +- } else { +- WRAP(pa_context_set_subscribe_callback)(context->context, pulse_subscribe_callback, context); +- if (devtype == CUBEB_DEVICE_TYPE_INPUT) +- mask = PA_SUBSCRIPTION_MASK_SOURCE; +- else if (devtype == CUBEB_DEVICE_TYPE_OUTPUT) +- mask = PA_SUBSCRIPTION_MASK_SINK; +- else +- mask = PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE; +- } ++ WRAP(pa_context_set_subscribe_callback)(context->context, pulse_subscribe_callback, context); + + pa_operation * o; + o = WRAP(pa_context_subscribe)(context->context, mask, subscribe_success, context); + if (o == NULL) { ++ WRAP(pa_threaded_mainloop_unlock)(context->mainloop); + LOG("Context subscribe failed"); + return CUBEB_ERROR; + } +@@ -1362,6 +1560,37 @@ pulse_register_device_collection_changed(cubeb * context, + return CUBEB_OK; + } + ++static int ++pulse_register_device_collection_changed(cubeb * context, ++ cubeb_device_type devtype, ++ cubeb_device_collection_changed_callback collection_changed_callback, ++ void * user_ptr) ++{ ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ context->input_collection_changed_callback = collection_changed_callback; ++ context->input_collection_changed_user_ptr = user_ptr; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ context->output_collection_changed_callback = collection_changed_callback; ++ context->output_collection_changed_user_ptr = user_ptr; ++ } ++ ++ pa_subscription_mask_t mask = PA_SUBSCRIPTION_MASK_NULL; ++ if (context->input_collection_changed_callback) { ++ /* Input added or removed */ ++ mask |= PA_SUBSCRIPTION_MASK_SOURCE; ++ } ++ if (context->output_collection_changed_callback) { ++ /* Output added or removed */ ++ mask |= PA_SUBSCRIPTION_MASK_SINK; ++ } ++ /* Default device changed, this is always registered in order to update the ++ * `default_sink_info` when the default device changes. */ ++ mask |= PA_SUBSCRIPTION_MASK_SERVER; ++ ++ return pulse_subscribe_notifications(context, mask); ++} ++ + static struct cubeb_ops const pulse_ops = { + .init = pulse_init, + .get_backend_id = pulse_get_backend_id, +@@ -1369,15 +1598,16 @@ static struct cubeb_ops const pulse_ops = { + .get_min_latency = pulse_get_min_latency, + .get_preferred_sample_rate = pulse_get_preferred_sample_rate, + .enumerate_devices = pulse_enumerate_devices, ++ .device_collection_destroy = pulse_device_collection_destroy, + .destroy = pulse_destroy, + .stream_init = pulse_stream_init, + .stream_destroy = pulse_stream_destroy, + .stream_start = pulse_stream_start, + .stream_stop = pulse_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = pulse_stream_get_position, + .stream_get_latency = pulse_stream_get_latency, + .stream_set_volume = pulse_stream_set_volume, +- .stream_set_panning = pulse_stream_set_panning, + .stream_get_current_device = pulse_stream_get_current_device, + .stream_device_destroy = pulse_stream_device_destroy, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_resampler.cpp b/media/libcubeb/src/cubeb_resampler.cpp +index f6676946c..2bc889340 100644 +--- a/media/libcubeb/src/cubeb_resampler.cpp ++++ b/media/libcubeb/src/cubeb_resampler.cpp +@@ -35,29 +35,54 @@ to_speex_quality(cubeb_resampler_quality q) + } + } + +-long noop_resampler::fill(void * input_buffer, long * input_frames_count, +- void * output_buffer, long output_frames) ++uint32_t min_buffered_audio_frame(uint32_t sample_rate) ++{ ++ return sample_rate / 20; ++} ++ ++template ++passthrough_resampler::passthrough_resampler(cubeb_stream * s, ++ cubeb_data_callback cb, ++ void * ptr, ++ uint32_t input_channels, ++ uint32_t sample_rate) ++ : processor(input_channels) ++ , stream(s) ++ , data_callback(cb) ++ , user_ptr(ptr) ++ , sample_rate(sample_rate) ++{ ++} ++ ++template ++long passthrough_resampler::fill(void * input_buffer, long * input_frames_count, ++ void * output_buffer, long output_frames) + { + if (input_buffer) { + assert(input_frames_count); + } +- assert((input_buffer && output_buffer && +- *input_frames_count >= output_frames) || +- (!input_buffer && (!input_frames_count || *input_frames_count == 0)) || +- (!output_buffer && output_frames == 0)); +- +- if (output_buffer == nullptr) { +- assert(input_buffer); +- output_frames = *input_frames_count; ++ assert((input_buffer && output_buffer) || ++ (output_buffer && !input_buffer && (!input_frames_count || *input_frames_count == 0)) || ++ (input_buffer && !output_buffer && output_frames == 0)); ++ ++ if (input_buffer) { ++ if (!output_buffer) { ++ output_frames = *input_frames_count; ++ } ++ internal_input_buffer.push(static_cast(input_buffer), ++ frames_to_samples(*input_frames_count)); + } + +- if (input_buffer && *input_frames_count != output_frames) { +- assert(*input_frames_count > output_frames); ++ long rv = data_callback(stream, user_ptr, internal_input_buffer.data(), ++ output_buffer, output_frames); ++ ++ if (input_buffer) { ++ internal_input_buffer.pop(nullptr, frames_to_samples(output_frames)); + *input_frames_count = output_frames; ++ drop_audio_if_needed(); + } + +- return data_callback(stream, user_ptr, +- input_buffer, output_buffer, output_frames); ++ return rv; + } + + template +@@ -120,27 +145,32 @@ cubeb_resampler_speex + assert(!input_buffer && (!input_frames_count || *input_frames_count == 0) && + output_buffer && output_frames_needed); + +- long got = 0; +- T * out_unprocessed = nullptr; +- long output_frames_before_processing = 0; ++ if (!draining) { ++ long got = 0; ++ T * out_unprocessed = nullptr; ++ long output_frames_before_processing = 0; + ++ /* fill directly the input buffer of the output processor to save a copy */ ++ output_frames_before_processing = ++ output_processor->input_needed_for_output(output_frames_needed); + +- /* fill directly the input buffer of the output processor to save a copy */ +- output_frames_before_processing = +- output_processor->input_needed_for_output(output_frames_needed); ++ out_unprocessed = ++ output_processor->input_buffer(output_frames_before_processing); + +- out_unprocessed = +- output_processor->input_buffer(output_frames_before_processing); ++ got = data_callback(stream, user_ptr, ++ nullptr, out_unprocessed, ++ output_frames_before_processing); + +- got = data_callback(stream, user_ptr, +- nullptr, out_unprocessed, +- output_frames_before_processing); ++ if (got < output_frames_before_processing) { ++ draining = true; + +- if (got < 0) { +- return got; +- } ++ if (got < 0) { ++ return got; ++ } ++ } + +- output_processor->written(got); ++ output_processor->written(got); ++ } + + /* Process the output. If not enough frames have been returned from the + * callback, drain the processors. */ +@@ -163,7 +193,10 @@ cubeb_resampler_speex + /* process the input, and present exactly `output_frames_needed` in the + * callback. */ + input_processor->input(input_buffer, *input_frames_count); +- resampled_input = input_processor->output(resampled_frame_count); ++ ++ size_t frames_resampled = 0; ++ resampled_input = input_processor->output(resampled_frame_count, &frames_resampled); ++ *input_frames_count = frames_resampled; + + long got = data_callback(stream, user_ptr, + resampled_input, nullptr, resampled_frame_count); +@@ -174,18 +207,22 @@ cubeb_resampler_speex + return (*input_frames_count) * (got / resampled_frame_count); + } + +- + template + long + cubeb_resampler_speex + ::fill_internal_duplex(T * in_buffer, long * input_frames_count, + T * out_buffer, long output_frames_needed) + { ++ if (draining) { ++ // discard input and drain any signal remaining in the resampler. ++ return output_processor->output(out_buffer, output_frames_needed); ++ } ++ + /* The input data, after eventual resampling. This is passed to the callback. */ + T * resampled_input = nullptr; + /* The output buffer passed down in the callback, that might be resampled. */ + T * out_unprocessed = nullptr; +- size_t output_frames_before_processing = 0; ++ long output_frames_before_processing = 0; + /* The number of frames returned from the callback. */ + long got = 0; + +@@ -210,8 +247,11 @@ cubeb_resampler_speex + /* process the input, and present exactly `output_frames_needed` in the + * callback. */ + input_processor->input(in_buffer, *input_frames_count); ++ ++ size_t frames_resampled = 0; + resampled_input = +- input_processor->output(output_frames_before_processing); ++ input_processor->output(output_frames_before_processing, &frames_resampled); ++ *input_frames_count = frames_resampled; + } else { + resampled_input = nullptr; + } +@@ -220,15 +260,25 @@ cubeb_resampler_speex + resampled_input, out_unprocessed, + output_frames_before_processing); + +- if (got < 0) { +- return got; ++ if (got < output_frames_before_processing) { ++ draining = true; ++ ++ if (got < 0) { ++ return got; ++ } + } + + output_processor->written(got); + ++ input_processor->drop_audio_if_needed(); ++ + /* Process the output. If not enough frames have been returned from the + * callback, drain the processors. */ +- return output_processor->output(out_buffer, output_frames_needed); ++ got = output_processor->output(out_buffer, output_frames_needed); ++ ++ output_processor->drop_audio_if_needed(); ++ ++ return got; + } + + /* Resampler C API */ +diff --git a/media/libcubeb/src/cubeb_resampler.h b/media/libcubeb/src/cubeb_resampler.h +index 020ccc17a..f6b551373 100644 +--- a/media/libcubeb/src/cubeb_resampler.h ++++ b/media/libcubeb/src/cubeb_resampler.h +@@ -25,8 +25,15 @@ typedef enum { + * Create a resampler to adapt the requested sample rate into something that + * is accepted by the audio backend. + * @param stream A cubeb_stream instance supplied to the data callback. +- * @param params Used to calculate bytes per frame and buffer size for resampling. +- * @param target_rate The sampling rate after resampling. ++ * @param input_params Used to calculate bytes per frame and buffer size for ++ * resampling of the input side of the stream. NULL if input should not be ++ * resampled. ++ * @param output_params Used to calculate bytes per frame and buffer size for ++ * resampling of the output side of the stream. NULL if output should not be ++ * resampled. ++ * @param target_rate The sampling rate after resampling for the input side of ++ * the stream, and/or the sampling rate prior to resampling of the output side ++ * of the stream. + * @param callback A callback to request data for resampling. + * @param user_ptr User data supplied to the data callback. + * @param quality Quality of the resampler. +@@ -47,8 +54,8 @@ cubeb_resampler * cubeb_resampler_create(cubeb_stream * stream, + * @param input_buffer A buffer of input samples + * @param input_frame_count The size of the buffer. Returns the number of frames + * consumed. +- * @param buffer The buffer to be filled. +- * @param frames_needed Number of frames that should be produced. ++ * @param output_buffer The buffer to be filled. ++ * @param output_frames_needed Number of frames that should be produced. + * @retval Number of frames that are actually produced. + * @retval CUBEB_ERROR on error. + */ +diff --git a/media/libcubeb/src/cubeb_resampler_internal.h b/media/libcubeb/src/cubeb_resampler_internal.h +index 3c37a04b9..fb69992ff 100644 +--- a/media/libcubeb/src/cubeb_resampler_internal.h ++++ b/media/libcubeb/src/cubeb_resampler_internal.h +@@ -39,6 +39,13 @@ MOZ_END_STD_NAMESPACE + + /* This header file contains the internal C++ API of the resamplers, for testing. */ + ++// When dropping audio input frames to prevent building ++// an input delay, this function returns the number of frames ++// to keep in the buffer. ++// @parameter sample_rate The sample rate of the stream. ++// @return A number of frames to keep. ++uint32_t min_buffered_audio_frame(uint32_t sample_rate); ++ + int to_speex_quality(cubeb_resampler_quality q); + + struct cubeb_resampler { +@@ -48,31 +55,6 @@ struct cubeb_resampler { + virtual ~cubeb_resampler() {} + }; + +-class noop_resampler : public cubeb_resampler { +-public: +- noop_resampler(cubeb_stream * s, +- cubeb_data_callback cb, +- void * ptr) +- : stream(s) +- , data_callback(cb) +- , user_ptr(ptr) +- { +- } +- +- virtual long fill(void * input_buffer, long * input_frames_count, +- void * output_buffer, long output_frames); +- +- virtual long latency() +- { +- return 0; +- } +- +-private: +- cubeb_stream * const stream; +- const cubeb_data_callback data_callback; +- void * const user_ptr; +-}; +- + /** Base class for processors. This is just used to share methods for now. */ + class processor { + public: +@@ -80,11 +62,11 @@ public: + : channels(channels) + {} + protected: +- size_t frames_to_samples(size_t frames) ++ size_t frames_to_samples(size_t frames) const + { + return frames * channels; + } +- size_t samples_to_frames(size_t samples) ++ size_t samples_to_frames(size_t samples) const + { + assert(!(samples % channels)); + return samples / channels; +@@ -93,6 +75,43 @@ protected: + const uint32_t channels; + }; + ++template ++class passthrough_resampler : public cubeb_resampler ++ , public processor { ++public: ++ passthrough_resampler(cubeb_stream * s, ++ cubeb_data_callback cb, ++ void * ptr, ++ uint32_t input_channels, ++ uint32_t sample_rate); ++ ++ virtual long fill(void * input_buffer, long * input_frames_count, ++ void * output_buffer, long output_frames); ++ ++ virtual long latency() ++ { ++ return 0; ++ } ++ ++ void drop_audio_if_needed() ++ { ++ uint32_t to_keep = min_buffered_audio_frame(sample_rate); ++ uint32_t available = samples_to_frames(internal_input_buffer.length()); ++ if (available > to_keep) { ++ internal_input_buffer.pop(nullptr, frames_to_samples(available - to_keep)); ++ } ++ } ++ ++private: ++ cubeb_stream * const stream; ++ const cubeb_data_callback data_callback; ++ void * const user_ptr; ++ /* This allows to buffer some input to account for the fact that we buffer ++ * some inputs. */ ++ auto_array internal_input_buffer; ++ uint32_t sample_rate; ++}; ++ + /** Bidirectional resampler, can resample an input and an output stream, or just + * an input stream or output stream. In this case a delay is inserted in the + * opposite direction to keep the streams synchronized. */ +@@ -138,6 +157,7 @@ private: + cubeb_stream * const stream; + const cubeb_data_callback data_callback; + void * const user_ptr; ++ bool draining = false; + }; + + /** Handles one way of a (possibly) duplex resampler, working on interleaved +@@ -163,6 +183,7 @@ public: + int quality) + : processor(channels) + , resampling_ratio(static_cast(source_rate) / target_rate) ++ , source_rate(source_rate) + , additional_latency(0) + , leftover_samples(0) + { +@@ -221,7 +242,7 @@ public: + + /** Returns a buffer containing exactly `output_frame_count` resampled frames. + * The consumer should not hold onto the pointer. */ +- T * output(size_t output_frame_count) ++ T * output(size_t output_frame_count, size_t * input_frames_used) + { + if (resampling_out_buffer.capacity() < frames_to_samples(output_frame_count)) { + resampling_out_buffer.reserve(frames_to_samples(output_frame_count)); +@@ -238,6 +259,7 @@ public: + /* This shifts back any unresampled samples to the beginning of the input + buffer. */ + resampling_in_buffer.pop(nullptr, frames_to_samples(in_len)); ++ *input_frames_used = in_len; + + return resampling_out_buffer.data(); + } +@@ -261,7 +283,7 @@ public: + * exactly `output_frame_count` resampled frames. This can return a number + * slightly bigger than what is strictly necessary, but it guaranteed that the + * number of output frames will be exactly equal. */ +- uint32_t input_needed_for_output(uint32_t output_frame_count) ++ uint32_t input_needed_for_output(uint32_t output_frame_count) const + { + int32_t unresampled_frames_left = samples_to_frames(resampling_in_buffer.length()); + int32_t resampled_frames_left = samples_to_frames(resampling_out_buffer.length()); +@@ -294,6 +316,16 @@ public: + resampling_in_buffer.set_length(leftover_samples + + frames_to_samples(written_frames)); + } ++ ++ void drop_audio_if_needed() ++ { ++ // Keep at most 100ms buffered. ++ uint32_t available = samples_to_frames(resampling_in_buffer.length()); ++ uint32_t to_keep = min_buffered_audio_frame(source_rate); ++ if (available > to_keep) { ++ resampling_in_buffer.pop(nullptr, frames_to_samples(available - to_keep)); ++ } ++ } + private: + /** Wrapper for the speex resampling functions to have a typed + * interface. */ +@@ -330,6 +362,7 @@ private: + SpeexResamplerState * speex_resampler; + /** Source rate / target rate. */ + const float resampling_ratio; ++ const uint32_t source_rate; + /** Storage for the input frames, to be resampled. Also contains + * any unresampled frames after resampling. */ + auto_array resampling_in_buffer; +@@ -348,11 +381,13 @@ class delay_line : public processor { + public: + /** Constructor + * @parameter frames the number of frames of delay. +- * @parameter channels the number of channels of this delay line. */ +- delay_line(uint32_t frames, uint32_t channels) ++ * @parameter channels the number of channels of this delay line. ++ * @parameter sample_rate sample-rate of the audio going through this delay line */ ++ delay_line(uint32_t frames, uint32_t channels, uint32_t sample_rate) + : processor(channels) + , length(frames) + , leftover_samples(0) ++ , sample_rate(sample_rate) + { + /* Fill the delay line with some silent frames to add latency. */ + delay_input_buffer.push_silence(frames * channels); +@@ -375,7 +410,7 @@ public: + * @parameter frames_needed the number of frames to be returned. + * @return a buffer containing the delayed frames. The consumer should not + * hold onto the pointer. */ +- T * output(uint32_t frames_needed) ++ T * output(uint32_t frames_needed, size_t * input_frames_used) + { + if (delay_output_buffer.capacity() < frames_to_samples(frames_needed)) { + delay_output_buffer.reserve(frames_to_samples(frames_needed)); +@@ -385,6 +420,7 @@ public: + delay_output_buffer.push(delay_input_buffer.data(), + frames_to_samples(frames_needed)); + delay_input_buffer.pop(nullptr, frames_to_samples(frames_needed)); ++ *input_frames_used = frames_needed; + + return delay_output_buffer.data(); + } +@@ -426,7 +462,7 @@ public: + * @parameter frames_needed the number of frames one want to write into the + * delay_line + * @returns the number of frames one will get. */ +- size_t input_needed_for_output(uint32_t frames_needed) ++ size_t input_needed_for_output(uint32_t frames_needed) const + { + return frames_needed; + } +@@ -441,6 +477,15 @@ public: + { + return length; + } ++ ++ void drop_audio_if_needed() ++ { ++ size_t available = samples_to_frames(delay_input_buffer.length()); ++ uint32_t to_keep = min_buffered_audio_frame(sample_rate); ++ if (available > to_keep) { ++ delay_input_buffer.pop(nullptr, frames_to_samples(available - to_keep)); ++ } ++ } + private: + /** The length, in frames, of this delay line */ + uint32_t length; +@@ -452,6 +497,7 @@ private: + /** The output buffer. This is only ever used if using the ::output with a + * single argument. */ + auto_array delay_output_buffer; ++ uint32_t sample_rate; + }; + + /** This sits behind the C API and is more typed. */ +@@ -480,7 +526,10 @@ cubeb_resampler_create_internal(cubeb_stream * stream, + (output_params && output_params->rate == target_rate)) || + (input_params && !output_params && (input_params->rate == target_rate)) || + (output_params && !input_params && (output_params->rate == target_rate))) { +- return new noop_resampler(stream, callback, user_ptr); ++ return new passthrough_resampler(stream, callback, ++ user_ptr, ++ input_params ? input_params->channels : 0, ++ target_rate); + } + + /* Determine if we need to resampler one or both directions, and create the +@@ -512,13 +561,15 @@ cubeb_resampler_create_internal(cubeb_stream * stream, + * other direction so that the streams are synchronized. */ + if (input_resampler && !output_resampler && input_params && output_params) { + output_delay.reset(new delay_line(input_resampler->latency(), +- output_params->channels)); ++ output_params->channels, ++ output_params->rate)); + if (!output_delay) { + return NULL; + } + } else if (output_resampler && !input_resampler && input_params && output_params) { + input_delay.reset(new delay_line(output_resampler->latency(), +- input_params->channels)); ++ input_params->channels, ++ output_params->rate)); + if (!input_delay) { + return NULL; + } +diff --git a/media/libcubeb/src/cubeb_ringbuffer.h b/media/libcubeb/src/cubeb_ringbuffer.h +new file mode 100644 +index 000000000..b6696e886 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_ringbuffer.h +@@ -0,0 +1,495 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#ifndef CUBEB_RING_BUFFER_H ++#define CUBEB_RING_BUFFER_H ++ ++#include "cubeb_utils.h" ++#include ++#include ++#include ++#include ++#include ++ ++/** ++ * Single producer single consumer lock-free and wait-free ring buffer. ++ * ++ * This data structure allows producing data from one thread, and consuming it on ++ * another thread, safely and without explicit synchronization. If used on two ++ * threads, this data structure uses atomics for thread safety. It is possible ++ * to disable the use of atomics at compile time and only use this data ++ * structure on one thread. ++ * ++ * The role for the producer and the consumer must be constant, i.e., the ++ * producer should always be on one thread and the consumer should always be on ++ * another thread. ++ * ++ * Some words about the inner workings of this class: ++ * - Capacity is fixed. Only one allocation is performed, in the constructor. ++ * When reading and writing, the return value of the method allows checking if ++ * the ring buffer is empty or full. ++ * - We always keep the read index at least one element ahead of the write ++ * index, so we can distinguish between an empty and a full ring buffer: an ++ * empty ring buffer is when the write index is at the same position as the ++ * read index. A full buffer is when the write index is exactly one position ++ * before the read index. ++ * - We synchronize updates to the read index after having read the data, and ++ * the write index after having written the data. This means that the each ++ * thread can only touch a portion of the buffer that is not touched by the ++ * other thread. ++ * - Callers are expected to provide buffers. When writing to the queue, ++ * elements are copied into the internal storage from the buffer passed in. ++ * When reading from the queue, the user is expected to provide a buffer. ++ * Because this is a ring buffer, data might not be contiguous in memory, ++ * providing an external buffer to copy into is an easy way to have linear ++ * data for further processing. ++ */ ++template ++class ring_buffer_base ++{ ++public: ++ /** ++ * Constructor for a ring buffer. ++ * ++ * This performs an allocation, but is the only allocation that will happen ++ * for the life time of a `ring_buffer_base`. ++ * ++ * @param capacity The maximum number of element this ring buffer will hold. ++ */ ++ ring_buffer_base(int capacity) ++ /* One more element to distinguish from empty and full buffer. */ ++ : capacity_(capacity + 1) ++ { ++ assert(storage_capacity() < ++ std::numeric_limits::max() / 2 && ++ "buffer too large for the type of index used."); ++ assert(capacity_ > 0); ++ ++ data_.reset(new T[storage_capacity()]); ++ /* If this queue is using atomics, initializing those members as the last ++ * action in the constructor acts as a full barrier, and allow capacity() to ++ * be thread-safe. */ ++ write_index_ = 0; ++ read_index_ = 0; ++ } ++ /** ++ * Push `count` zero or default constructed elements in the array. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @param count The number of elements to enqueue. ++ * @return The number of element enqueued. ++ */ ++ int enqueue_default(int count) ++ { ++ return enqueue(nullptr, count); ++ } ++ /** ++ * @brief Put an element in the queue ++ * ++ * Only safely called on the producer thread. ++ * ++ * @param element The element to put in the queue. ++ * ++ * @return 1 if the element was inserted, 0 otherwise. ++ */ ++ int enqueue(T& element) ++ { ++ return enqueue(&element, 1); ++ } ++ /** ++ * Push `count` elements in the ring buffer. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @param elements a pointer to a buffer containing at least `count` elements. ++ * If `elements` is nullptr, zero or default constructed elements are enqueued. ++ * @param count The number of elements to read from `elements` ++ * @return The number of elements successfully coped from `elements` and inserted ++ * into the ring buffer. ++ */ ++ int enqueue(T * elements, int count) ++ { ++#ifndef NDEBUG ++ assert_correct_thread(producer_id); ++#endif ++ ++ int rd_idx = read_index_.load(std::memory_order::memory_order_relaxed); ++ int wr_idx = write_index_.load(std::memory_order::memory_order_relaxed); ++ ++ if (full_internal(rd_idx, wr_idx)) { ++ return 0; ++ } ++ ++ int to_write = ++ std::min(available_write_internal(rd_idx, wr_idx), count); ++ ++ /* First part, from the write index to the end of the array. */ ++ int first_part = std::min(storage_capacity() - wr_idx, ++ to_write); ++ /* Second part, from the beginning of the array */ ++ int second_part = to_write - first_part; ++ ++ if (elements) { ++ Copy(data_.get() + wr_idx, elements, first_part); ++ Copy(data_.get(), elements + first_part, second_part); ++ } else { ++ ConstructDefault(data_.get() + wr_idx, first_part); ++ ConstructDefault(data_.get(), second_part); ++ } ++ ++ write_index_.store(increment_index(wr_idx, to_write), std::memory_order::memory_order_release); ++ ++ return to_write; ++ } ++ /** ++ * Retrieve at most `count` elements from the ring buffer, and copy them to ++ * `elements`, if non-null. ++ * ++ * Only safely called on the consumer side. ++ * ++ * @param elements A pointer to a buffer with space for at least `count` ++ * elements. If `elements` is `nullptr`, `count` element will be discarded. ++ * @param count The maximum number of elements to dequeue. ++ * @return The number of elements written to `elements`. ++ */ ++ int dequeue(T * elements, int count) ++ { ++#ifndef NDEBUG ++ assert_correct_thread(consumer_id); ++#endif ++ ++ int wr_idx = write_index_.load(std::memory_order::memory_order_acquire); ++ int rd_idx = read_index_.load(std::memory_order::memory_order_relaxed); ++ ++ if (empty_internal(rd_idx, wr_idx)) { ++ return 0; ++ } ++ ++ int to_read = ++ std::min(available_read_internal(rd_idx, wr_idx), count); ++ ++ int first_part = std::min(storage_capacity() - rd_idx, to_read); ++ int second_part = to_read - first_part; ++ ++ if (elements) { ++ Copy(elements, data_.get() + rd_idx, first_part); ++ Copy(elements + first_part, data_.get(), second_part); ++ } ++ ++ read_index_.store(increment_index(rd_idx, to_read), std::memory_order::memory_order_relaxed); ++ ++ return to_read; ++ } ++ /** ++ * Get the number of available element for consuming. ++ * ++ * Only safely called on the consumer thread. ++ * ++ * @return The number of available elements for reading. ++ */ ++ int available_read() const ++ { ++#ifndef NDEBUG ++ assert_correct_thread(consumer_id); ++#endif ++ return available_read_internal(read_index_.load(std::memory_order::memory_order_relaxed), ++ write_index_.load(std::memory_order::memory_order_relaxed)); ++ } ++ /** ++ * Get the number of available elements for consuming. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @return The number of empty slots in the buffer, available for writing. ++ */ ++ int available_write() const ++ { ++#ifndef NDEBUG ++ assert_correct_thread(producer_id); ++#endif ++ return available_write_internal(read_index_.load(std::memory_order::memory_order_relaxed), ++ write_index_.load(std::memory_order::memory_order_relaxed)); ++ } ++ /** ++ * Get the total capacity, for this ring buffer. ++ * ++ * Can be called safely on any thread. ++ * ++ * @return The maximum capacity of this ring buffer. ++ */ ++ int capacity() const ++ { ++ return storage_capacity() - 1; ++ } ++ /** ++ * Reset the consumer and producer thread identifier, in case the thread are ++ * being changed. This has to be externally synchronized. This is no-op when ++ * asserts are disabled. ++ */ ++ void reset_thread_ids() ++ { ++#ifndef NDEBUG ++ consumer_id = producer_id = std::thread::id(); ++#endif ++ } ++private: ++ /** Return true if the ring buffer is empty. ++ * ++ * @param read_index the read index to consider ++ * @param write_index the write index to consider ++ * @return true if the ring buffer is empty, false otherwise. ++ **/ ++ bool empty_internal(int read_index, ++ int write_index) const ++ { ++ return write_index == read_index; ++ } ++ /** Return true if the ring buffer is full. ++ * ++ * This happens if the write index is exactly one element behind the read ++ * index. ++ * ++ * @param read_index the read index to consider ++ * @param write_index the write index to consider ++ * @return true if the ring buffer is full, false otherwise. ++ **/ ++ bool full_internal(int read_index, ++ int write_index) const ++ { ++ return (write_index + 1) % storage_capacity() == read_index; ++ } ++ /** ++ * Return the size of the storage. It is one more than the number of elements ++ * that can be stored in the buffer. ++ * ++ * @return the number of elements that can be stored in the buffer. ++ */ ++ int storage_capacity() const ++ { ++ return capacity_; ++ } ++ /** ++ * Returns the number of elements available for reading. ++ * ++ * @return the number of available elements for reading. ++ */ ++ int ++ available_read_internal(int read_index, ++ int write_index) const ++ { ++ if (write_index >= read_index) { ++ return write_index - read_index; ++ } else { ++ return write_index + storage_capacity() - read_index; ++ } ++ } ++ /** ++ * Returns the number of empty elements, available for writing. ++ * ++ * @return the number of elements that can be written into the array. ++ */ ++ int ++ available_write_internal(int read_index, ++ int write_index) const ++ { ++ /* We substract one element here to always keep at least one sample ++ * free in the buffer, to distinguish between full and empty array. */ ++ int rv = read_index - write_index - 1; ++ if (write_index >= read_index) { ++ rv += storage_capacity(); ++ } ++ return rv; ++ } ++ /** ++ * Increments an index, wrapping it around the storage. ++ * ++ * @param index a reference to the index to increment. ++ * @param increment the number by which `index` is incremented. ++ * @return the new index. ++ */ ++ int ++ increment_index(int index, int increment) const ++ { ++ assert(increment >= 0); ++ return (index + increment) % storage_capacity(); ++ } ++ /** ++ * @brief This allows checking that enqueue (resp. dequeue) are always called ++ * by the right thread. ++ * ++ * @param id the id of the thread that has called the calling method first. ++ */ ++#ifndef NDEBUG ++ static void assert_correct_thread(std::thread::id& id) ++ { ++ if (id == std::thread::id()) { ++ id = std::this_thread::get_id(); ++ return; ++ } ++ assert(id == std::this_thread::get_id()); ++ } ++#endif ++ /** Index at which the oldest element is at, in samples. */ ++ std::atomic read_index_; ++ /** Index at which to write new elements. `write_index` is always at ++ * least one element ahead of `read_index_`. */ ++ std::atomic write_index_; ++ /** Maximum number of elements that can be stored in the ring buffer. */ ++ const int capacity_; ++ /** Data storage */ ++ std::unique_ptr data_; ++#ifndef NDEBUG ++ /** The id of the only thread that is allowed to read from the queue. */ ++ mutable std::thread::id consumer_id; ++ /** The id of the only thread that is allowed to write from the queue. */ ++ mutable std::thread::id producer_id; ++#endif ++}; ++ ++/** ++ * Adapter for `ring_buffer_base` that exposes an interface in frames. ++ */ ++template ++class audio_ring_buffer_base ++{ ++public: ++ /** ++ * @brief Constructor. ++ * ++ * @param channel_count Number of channels. ++ * @param capacity_in_frames The capacity in frames. ++ */ ++ audio_ring_buffer_base(int channel_count, int capacity_in_frames) ++ : channel_count(channel_count) ++ , ring_buffer(frames_to_samples(capacity_in_frames)) ++ { ++ assert(channel_count > 0); ++ } ++ /** ++ * @brief Enqueue silence. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @param frame_count The number of frames of silence to enqueue. ++ * @return The number of frames of silence actually written to the queue. ++ */ ++ int enqueue_default(int frame_count) ++ { ++ return samples_to_frames(ring_buffer.enqueue(nullptr, frames_to_samples(frame_count))); ++ } ++ /** ++ * @brief Enqueue `frames_count` frames of audio. ++ * ++ * Only safely called from the producer thread. ++ * ++ * @param [in] frames If non-null, the frames to enqueue. ++ * Otherwise, silent frames are enqueued. ++ * @param frame_count The number of frames to enqueue. ++ * ++ * @return The number of frames enqueued ++ */ ++ ++ int enqueue(T * frames, int frame_count) ++ { ++ return samples_to_frames(ring_buffer.enqueue(frames, frames_to_samples(frame_count))); ++ } ++ ++ /** ++ * @brief Removes `frame_count` frames from the buffer, and ++ * write them to `frames` if it is non-null. ++ * ++ * Only safely called on the consumer thread. ++ * ++ * @param frames If non-null, the frames are copied to `frames`. ++ * Otherwise, they are dropped. ++ * @param frame_count The number of frames to remove. ++ * ++ * @return The number of frames actually dequeud. ++ */ ++ int dequeue(T * frames, int frame_count) ++ { ++ return samples_to_frames(ring_buffer.dequeue(frames, frames_to_samples(frame_count))); ++ } ++ /** ++ * Get the number of available frames of audio for consuming. ++ * ++ * Only safely called on the consumer thread. ++ * ++ * @return The number of available frames of audio for reading. ++ */ ++ int available_read() const ++ { ++ return samples_to_frames(ring_buffer.available_read()); ++ } ++ /** ++ * Get the number of available frames of audio for consuming. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @return The number of empty slots in the buffer, available for writing. ++ */ ++ int available_write() const ++ { ++ return samples_to_frames(ring_buffer.available_write()); ++ } ++ /** ++ * Get the total capacity, for this ring buffer. ++ * ++ * Can be called safely on any thread. ++ * ++ * @return The maximum capacity of this ring buffer. ++ */ ++ int capacity() const ++ { ++ return samples_to_frames(ring_buffer.capacity()); ++ } ++private: ++ /** ++ * @brief Frames to samples conversion. ++ * ++ * @param frames The number of frames. ++ * ++ * @return A number of samples. ++ */ ++ int frames_to_samples(int frames) const ++ { ++ return frames * channel_count; ++ } ++ /** ++ * @brief Samples to frames conversion. ++ * ++ * @param samples The number of samples. ++ * ++ * @return A number of frames. ++ */ ++ int samples_to_frames(int samples) const ++ { ++ return samples / channel_count; ++ } ++ /** Number of channels of audio that will stream through this ring buffer. */ ++ int channel_count; ++ /** The underlying ring buffer that is used to store the data. */ ++ ring_buffer_base ring_buffer; ++}; ++ ++/** ++ * Lock-free instantiation of the `ring_buffer_base` type. This is safe to use ++ * from two threads, one producer, one consumer (that never change role), ++ * without explicit synchronization. ++ */ ++template ++using lock_free_queue = ring_buffer_base; ++/** ++ * Lock-free instantiation of the `audio_ring_buffer` type. This is safe to use ++ * from two threads, one producer, one consumer (that never change role), ++ * without explicit synchronization. ++ */ ++template ++using lock_free_audio_ring_buffer = audio_ring_buffer_base; ++ ++#endif // CUBEB_RING_BUFFER_H +diff --git a/media/libcubeb/src/cubeb_sndio.c b/media/libcubeb/src/cubeb_sndio.c +index c7ac18446..4a05bd845 100644 +--- a/media/libcubeb/src/cubeb_sndio.c ++++ b/media/libcubeb/src/cubeb_sndio.c +@@ -4,6 +4,7 @@ + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ ++#include + #include + #include + #include +@@ -11,6 +12,7 @@ + #include + #include + #include ++#include + #include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" +@@ -21,39 +23,87 @@ + #define DPR(...) do {} while(0) + #endif + ++#ifdef DISABLE_LIBSNDIO_DLOPEN ++#define WRAP(x) x ++#else ++#define WRAP(x) cubeb_##x ++#define LIBSNDIO_API_VISIT(X) \ ++ X(sio_close) \ ++ X(sio_eof) \ ++ X(sio_getpar) \ ++ X(sio_initpar) \ ++ X(sio_onmove) \ ++ X(sio_open) \ ++ X(sio_pollfd) \ ++ X(sio_read) \ ++ X(sio_revents) \ ++ X(sio_setpar) \ ++ X(sio_start) \ ++ X(sio_stop) \ ++ X(sio_write) \ ++ ++#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x; ++LIBSNDIO_API_VISIT(MAKE_TYPEDEF); ++#undef MAKE_TYPEDEF ++#endif ++ + static struct cubeb_ops const sndio_ops; + + struct cubeb { + struct cubeb_ops const * ops; ++ void * libsndio; + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; +- pthread_t th; /* to run real-time audio i/o */ +- pthread_mutex_t mtx; /* protects hdl and pos */ +- struct sio_hdl *hdl; /* link us to sndio */ +- int active; /* cubec_start() called */ +- int conv; /* need float->s16 conversion */ +- unsigned char *buf; /* data is prepared here */ +- unsigned int nfr; /* number of frames in buf */ +- unsigned int bpf; /* bytes per frame */ +- unsigned int pchan; /* number of play channels */ +- uint64_t rdpos; /* frame number Joe hears right now */ +- uint64_t wrpos; /* number of written frames */ ++ void * arg; /* user arg to {data,state}_cb */ ++ /**/ ++ pthread_t th; /* to run real-time audio i/o */ ++ pthread_mutex_t mtx; /* protects hdl and pos */ ++ struct sio_hdl *hdl; /* link us to sndio */ ++ int mode; /* bitmap of SIO_{PLAY,REC} */ ++ int active; /* cubec_start() called */ ++ int conv; /* need float->s16 conversion */ ++ unsigned char *rbuf; /* rec data consumed from here */ ++ unsigned char *pbuf; /* play data is prepared here */ ++ unsigned int nfr; /* number of frames in ibuf and obuf */ ++ unsigned int rbpf; /* rec bytes per frame */ ++ unsigned int pbpf; /* play bytes per frame */ ++ unsigned int rchan; /* number of rec channels */ ++ unsigned int pchan; /* number of play channels */ ++ unsigned int nblks; /* number of blocks in the buffer */ ++ uint64_t hwpos; /* frame number Joe hears right now */ ++ uint64_t swpos; /* number of frames produced/consumed */ + cubeb_data_callback data_cb; /* cb to preapare data */ + cubeb_state_callback state_cb; /* cb to notify about state changes */ +- void *arg; /* user arg to {data,state}_cb */ ++ float volume; /* current volume */ + }; + + static void +-float_to_s16(void *ptr, long nsamp) ++s16_setvol(void *ptr, long nsamp, float volume) ++{ ++ int16_t *dst = ptr; ++ int32_t mult = volume * 32768; ++ int32_t s; ++ ++ while (nsamp-- > 0) { ++ s = *dst; ++ s = (s * mult) >> 15; ++ *(dst++) = s; ++ } ++} ++ ++static void ++float_to_s16(void *ptr, long nsamp, float volume) + { + int16_t *dst = ptr; + float *src = ptr; ++ float mult = volume * 32768; + int s; + + while (nsamp-- > 0) { +- s = lrintf(*(src++) * 32768); ++ s = lrintf(*(src++) * mult); + if (s < -32768) + s = -32768; + else if (s > 32767) +@@ -62,12 +112,24 @@ float_to_s16(void *ptr, long nsamp) + } + } + ++static void ++s16_to_float(void *ptr, long nsamp) ++{ ++ int16_t *src = ptr; ++ float *dst = ptr; ++ ++ src += nsamp; ++ dst += nsamp; ++ while (nsamp-- > 0) ++ *(--dst) = (1. / 32768) * *(--src); ++} ++ + static void + sndio_onmove(void *arg, int delta) + { + cubeb_stream *s = (cubeb_stream *)arg; + +- s->rdpos += delta * s->bpf; ++ s->hwpos += delta; + } + + static void * +@@ -76,48 +138,99 @@ sndio_mainloop(void *arg) + #define MAXFDS 8 + struct pollfd pfds[MAXFDS]; + cubeb_stream *s = arg; +- int n, nfds, revents, state = CUBEB_STATE_STARTED; +- size_t start = 0, end = 0; ++ int n, eof = 0, prime, nfds, events, revents, state = CUBEB_STATE_STARTED; ++ size_t pstart = 0, pend = 0, rstart = 0, rend = 0; + long nfr; + + DPR("sndio_mainloop()\n"); + s->state_cb(s, s->arg, CUBEB_STATE_STARTED); + pthread_mutex_lock(&s->mtx); +- if (!sio_start(s->hdl)) { ++ if (!WRAP(sio_start)(s->hdl)) { + pthread_mutex_unlock(&s->mtx); + return NULL; + } + DPR("sndio_mainloop(), started\n"); + +- start = end = s->nfr; ++ if (s->mode & SIO_PLAY) { ++ pstart = pend = s->nfr * s->pbpf; ++ prime = s->nblks; ++ if (s->mode & SIO_REC) { ++ memset(s->rbuf, 0, s->nfr * s->rbpf); ++ rstart = rend = s->nfr * s->rbpf; ++ } ++ } else { ++ prime = 0; ++ rstart = 0; ++ rend = s->nfr * s->rbpf; ++ } ++ + for (;;) { + if (!s->active) { + DPR("sndio_mainloop() stopped\n"); + state = CUBEB_STATE_STOPPED; + break; + } +- if (start == end) { +- if (end < s->nfr) { ++ ++ /* do we have a complete block? */ ++ if ((!(s->mode & SIO_PLAY) || pstart == pend) && ++ (!(s->mode & SIO_REC) || rstart == rend)) { ++ ++ if (eof) { + DPR("sndio_mainloop() drained\n"); + state = CUBEB_STATE_DRAINED; + break; + } ++ ++ if ((s->mode & SIO_REC) && s->conv) ++ s16_to_float(s->rbuf, s->nfr * s->rchan); ++ ++ /* invoke call-back, it returns less that s->nfr if done */ + pthread_mutex_unlock(&s->mtx); +- nfr = s->data_cb(s, s->arg, NULL, s->buf, s->nfr); ++ nfr = s->data_cb(s, s->arg, s->rbuf, s->pbuf, s->nfr); + pthread_mutex_lock(&s->mtx); + if (nfr < 0) { + DPR("sndio_mainloop() cb err\n"); + state = CUBEB_STATE_ERROR; + break; + } +- if (s->conv) +- float_to_s16(s->buf, nfr * s->pchan); +- start = 0; +- end = nfr * s->bpf; ++ s->swpos += nfr; ++ ++ /* was this last call-back invocation (aka end-of-stream) ? */ ++ if (nfr < s->nfr) { ++ ++ if (!(s->mode & SIO_PLAY) || nfr == 0) { ++ state = CUBEB_STATE_DRAINED; ++ break; ++ } ++ ++ /* need to write (aka drain) the partial play block we got */ ++ pend = nfr * s->pbpf; ++ eof = 1; ++ } ++ ++ if (prime > 0) ++ prime--; ++ ++ if (s->mode & SIO_PLAY) { ++ if (s->conv) ++ float_to_s16(s->pbuf, nfr * s->pchan, s->volume); ++ else ++ s16_setvol(s->pbuf, nfr * s->pchan, s->volume); ++ } ++ ++ if (s->mode & SIO_REC) ++ rstart = 0; ++ if (s->mode & SIO_PLAY) ++ pstart = 0; + } +- if (end == 0) +- continue; +- nfds = sio_pollfd(s->hdl, pfds, POLLOUT); ++ ++ events = 0; ++ if ((s->mode & SIO_REC) && rstart < rend && prime == 0) ++ events |= POLLIN; ++ if ((s->mode & SIO_PLAY) && pstart < pend) ++ events |= POLLOUT; ++ nfds = WRAP(sio_pollfd)(s->hdl, pfds, events); ++ + if (nfds > 0) { + pthread_mutex_unlock(&s->mtx); + n = poll(pfds, nfds, -1); +@@ -125,22 +238,40 @@ sndio_mainloop(void *arg) + if (n < 0) + continue; + } +- revents = sio_revents(s->hdl, pfds); +- if (revents & POLLHUP) ++ ++ revents = WRAP(sio_revents)(s->hdl, pfds); ++ ++ if (revents & POLLHUP) { ++ state = CUBEB_STATE_ERROR; + break; ++ } ++ + if (revents & POLLOUT) { +- n = sio_write(s->hdl, s->buf + start, end - start); +- if (n == 0) { ++ n = WRAP(sio_write)(s->hdl, s->pbuf + pstart, pend - pstart); ++ if (n == 0 && WRAP(sio_eof)(s->hdl)) { + DPR("sndio_mainloop() werr\n"); + state = CUBEB_STATE_ERROR; + break; + } +- s->wrpos += n; +- start += n; ++ pstart += n; + } ++ ++ if (revents & POLLIN) { ++ n = WRAP(sio_read)(s->hdl, s->rbuf + rstart, rend - rstart); ++ if (n == 0 && WRAP(sio_eof)(s->hdl)) { ++ DPR("sndio_mainloop() rerr\n"); ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ rstart += n; ++ } ++ ++ /* skip rec block, if not recording (yet) */ ++ if (prime > 0 && (s->mode & SIO_REC)) ++ rstart = rend; + } +- sio_stop(s->hdl); +- s->rdpos = s->wrpos; ++ WRAP(sio_stop)(s->hdl); ++ s->hwpos = s->swpos; + pthread_mutex_unlock(&s->mtx); + s->state_cb(s, s->arg, state); + return NULL; +@@ -149,8 +280,34 @@ sndio_mainloop(void *arg) + /*static*/ int + sndio_init(cubeb **context, char const *context_name) + { ++ void * libsndio = NULL; ++ ++#ifndef DISABLE_LIBSNDIO_DLOPEN ++ libsndio = dlopen("libsndio.so.7.0", RTLD_LAZY); ++ if (!libsndio) { ++ libsndio = dlopen("libsndio.so", RTLD_LAZY); ++ if (!libsndio) { ++ DPR("sndio_init(%s) failed dlopen(libsndio.so)\n", context_name); ++ return CUBEB_ERROR; ++ } ++ } ++ ++#define LOAD(x) { \ ++ cubeb_##x = dlsym(libsndio, #x); \ ++ if (!cubeb_##x) { \ ++ DPR("sndio_init(%s) failed dlsym(%s)\n", context_name, #x); \ ++ dlclose(libsndio); \ ++ return CUBEB_ERROR; \ ++ } \ ++ } ++ ++ LIBSNDIO_API_VISIT(LOAD); ++#undef LOAD ++#endif ++ + DPR("sndio_init(%s)\n", context_name); + *context = malloc(sizeof(*context)); ++ (*context)->libsndio = libsndio; + (*context)->ops = &sndio_ops; + (void)context_name; + return CUBEB_OK; +@@ -166,6 +323,8 @@ static void + sndio_destroy(cubeb *context) + { + DPR("sndio_destroy()\n"); ++ if (context->libsndio) ++ dlclose(context->libsndio); + free(context); + } + +@@ -184,29 +343,49 @@ sndio_stream_init(cubeb * context, + { + cubeb_stream *s; + struct sio_par wpar, rpar; +- DPR("sndio_stream_init(%s)\n", stream_name); +- size_t size; ++ cubeb_sample_format format; ++ int rate; ++ size_t bps; + +- assert(!input_stream_params && "not supported."); +- if (input_device || output_device) { +- /* Device selection not yet implemented. */ +- return CUBEB_ERROR_DEVICE_UNAVAILABLE; +- } ++ DPR("sndio_stream_init(%s)\n", stream_name); + + s = malloc(sizeof(cubeb_stream)); + if (s == NULL) + return CUBEB_ERROR; ++ memset(s, 0, sizeof(cubeb_stream)); ++ s->mode = 0; ++ if (input_stream_params) { ++ if (input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ DPR("sndio_stream_init(), loopback not supported\n"); ++ goto err; ++ } ++ s->mode |= SIO_REC; ++ format = input_stream_params->format; ++ rate = input_stream_params->rate; ++ } ++ if (output_stream_params) { ++ if (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ DPR("sndio_stream_init(), loopback not supported\n"); ++ goto err; ++ } ++ s->mode |= SIO_PLAY; ++ format = output_stream_params->format; ++ rate = output_stream_params->rate; ++ } ++ if (s->mode == 0) { ++ DPR("sndio_stream_init(), neither playing nor recording\n"); ++ goto err; ++ } + s->context = context; +- s->hdl = sio_open(NULL, SIO_PLAY, 1); ++ s->hdl = WRAP(sio_open)(NULL, s->mode, 1); + if (s->hdl == NULL) { +- free(s); + DPR("sndio_stream_init(), sio_open() failed\n"); +- return CUBEB_ERROR; ++ goto err; + } +- sio_initpar(&wpar); ++ WRAP(sio_initpar)(&wpar); + wpar.sig = 1; + wpar.bits = 16; +- switch (output_stream_params->format) { ++ switch (format) { + case CUBEB_SAMPLE_S16LE: + wpar.le = 1; + break; +@@ -218,53 +397,70 @@ sndio_stream_init(cubeb * context, + break; + default: + DPR("sndio_stream_init() unsupported format\n"); +- return CUBEB_ERROR_INVALID_FORMAT; ++ goto err; + } +- wpar.rate = output_stream_params->rate; +- wpar.pchan = output_stream_params->channels; ++ wpar.rate = rate; ++ if (s->mode & SIO_REC) ++ wpar.rchan = input_stream_params->channels; ++ if (s->mode & SIO_PLAY) ++ wpar.pchan = output_stream_params->channels; + wpar.appbufsz = latency_frames; +- if (!sio_setpar(s->hdl, &wpar) || !sio_getpar(s->hdl, &rpar)) { +- sio_close(s->hdl); +- free(s); ++ if (!WRAP(sio_setpar)(s->hdl, &wpar) || !WRAP(sio_getpar)(s->hdl, &rpar)) { + DPR("sndio_stream_init(), sio_setpar() failed\n"); +- return CUBEB_ERROR; ++ goto err; + } + if (rpar.bits != wpar.bits || rpar.le != wpar.le || + rpar.sig != wpar.sig || rpar.rate != wpar.rate || +- rpar.pchan != wpar.pchan) { +- sio_close(s->hdl); +- free(s); ++ ((s->mode & SIO_REC) && rpar.rchan != wpar.rchan) || ++ ((s->mode & SIO_PLAY) && rpar.pchan != wpar.pchan)) { + DPR("sndio_stream_init() unsupported params\n"); +- return CUBEB_ERROR_INVALID_FORMAT; ++ goto err; + } +- sio_onmove(s->hdl, sndio_onmove, s); ++ WRAP(sio_onmove)(s->hdl, sndio_onmove, s); + s->active = 0; + s->nfr = rpar.round; +- s->bpf = rpar.bps * rpar.pchan; ++ s->rbpf = rpar.bps * rpar.rchan; ++ s->pbpf = rpar.bps * rpar.pchan; ++ s->rchan = rpar.rchan; + s->pchan = rpar.pchan; ++ s->nblks = rpar.bufsz / rpar.round; + s->data_cb = data_callback; + s->state_cb = state_callback; + s->arg = user_ptr; + s->mtx = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER; +- s->rdpos = s->wrpos = 0; +- if (output_stream_params->format == CUBEB_SAMPLE_FLOAT32LE) { ++ s->hwpos = s->swpos = 0; ++ if (format == CUBEB_SAMPLE_FLOAT32LE) { + s->conv = 1; +- size = rpar.round * rpar.pchan * sizeof(float); ++ bps = sizeof(float); + } else { + s->conv = 0; +- size = rpar.round * rpar.pchan * rpar.bps; ++ bps = rpar.bps; + } +- s->buf = malloc(size); +- if (s->buf == NULL) { +- sio_close(s->hdl); +- free(s); +- return CUBEB_ERROR; ++ if (s->mode & SIO_PLAY) { ++ s->pbuf = malloc(bps * rpar.pchan * rpar.round); ++ if (s->pbuf == NULL) ++ goto err; + } ++ if (s->mode & SIO_REC) { ++ s->rbuf = malloc(bps * rpar.rchan * rpar.round); ++ if (s->rbuf == NULL) ++ goto err; ++ } ++ s->volume = 1.; + *stream = s; + DPR("sndio_stream_init() end, ok\n"); + (void)context; + (void)stream_name; + return CUBEB_OK; ++err: ++ if (s->hdl) ++ WRAP(sio_close)(s->hdl); ++ if (s->pbuf) ++ free(s->pbuf); ++ if (s->rbuf) ++ free(s->pbuf); ++ free(s); ++ return CUBEB_ERROR; + } + + static int +@@ -280,16 +476,21 @@ sndio_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + static int + sndio_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) + { +- // XXX Not yet implemented. +- *rate = 44100; +- ++ /* ++ * We've no device-independent prefered rate; any rate will work if ++ * sndiod is running. If it isn't, 48kHz is what is most likely to ++ * work as most (but not all) devices support it. ++ */ ++ *rate = 48000; + return CUBEB_OK; + } + + static int + sndio_get_min_latency(cubeb * ctx, cubeb_stream_params params, uint32_t * latency_frames) + { +- // XXX Not yet implemented. ++ /* ++ * We've no device-independent minimum latency. ++ */ + *latency_frames = 2048; + + return CUBEB_OK; +@@ -299,7 +500,11 @@ static void + sndio_stream_destroy(cubeb_stream *s) + { + DPR("sndio_stream_destroy()\n"); +- sio_close(s->hdl); ++ WRAP(sio_close)(s->hdl); ++ if (s->mode & SIO_PLAY) ++ free(s->pbuf); ++ if (s->mode & SIO_REC) ++ free(s->rbuf); + free(s); + } + +@@ -335,8 +540,8 @@ static int + sndio_stream_get_position(cubeb_stream *s, uint64_t *p) + { + pthread_mutex_lock(&s->mtx); +- DPR("sndio_stream_get_position() %lld\n", s->rdpos); +- *p = s->rdpos / s->bpf; ++ DPR("sndio_stream_get_position() %" PRId64 "\n", s->hwpos); ++ *p = s->hwpos; + pthread_mutex_unlock(&s->mtx); + return CUBEB_OK; + } +@@ -346,7 +551,11 @@ sndio_stream_set_volume(cubeb_stream *s, float volume) + { + DPR("sndio_stream_set_volume(%f)\n", volume); + pthread_mutex_lock(&s->mtx); +- sio_setvol(s->hdl, SIO_MAXVOL * volume); ++ if (volume < 0.) ++ volume = 0.; ++ else if (volume > 1.0) ++ volume = 1.; ++ s->volume = volume; + pthread_mutex_unlock(&s->mtx); + return CUBEB_OK; + } +@@ -356,7 +565,47 @@ sndio_stream_get_latency(cubeb_stream * stm, uint32_t * latency) + { + // http://www.openbsd.org/cgi-bin/man.cgi?query=sio_open + // in the "Measuring the latency and buffers usage" paragraph. +- *latency = (stm->wrpos - stm->rdpos) / stm->bpf; ++ *latency = stm->swpos - stm->hwpos; ++ return CUBEB_OK; ++} ++ ++static int ++sndio_enumerate_devices(cubeb *context, cubeb_device_type type, ++ cubeb_device_collection *collection) ++{ ++ static char dev[] = SIO_DEVANY; ++ cubeb_device_info *device; ++ ++ device = malloc(sizeof(cubeb_device_info)); ++ if (device == NULL) ++ return CUBEB_ERROR; ++ ++ device->devid = dev; /* passed to stream_init() */ ++ device->device_id = dev; /* printable in UI */ ++ device->friendly_name = dev; /* same, but friendly */ ++ device->group_id = dev; /* actual device if full-duplex */ ++ device->vendor_name = NULL; /* may be NULL */ ++ device->type = type; /* Input/Output */ ++ device->state = CUBEB_DEVICE_STATE_ENABLED; ++ device->preferred = CUBEB_DEVICE_PREF_ALL; ++ device->format = CUBEB_DEVICE_FMT_S16NE; ++ device->default_format = CUBEB_DEVICE_FMT_S16NE; ++ device->max_channels = 16; ++ device->default_rate = 48000; ++ device->min_rate = 4000; ++ device->max_rate = 192000; ++ device->latency_lo = 480; ++ device->latency_hi = 9600; ++ collection->device = device; ++ collection->count = 1; ++ return CUBEB_OK; ++} ++ ++static int ++sndio_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection) ++{ ++ free(collection->device); + return CUBEB_OK; + } + +@@ -366,16 +615,17 @@ static struct cubeb_ops const sndio_ops = { + .get_max_channel_count = sndio_get_max_channel_count, + .get_min_latency = sndio_get_min_latency, + .get_preferred_sample_rate = sndio_get_preferred_sample_rate, +- .enumerate_devices = NULL, ++ .enumerate_devices = sndio_enumerate_devices, ++ .device_collection_destroy = sndio_device_collection_destroy, + .destroy = sndio_destroy, + .stream_init = sndio_stream_init, + .stream_destroy = sndio_stream_destroy, + .stream_start = sndio_stream_start, + .stream_stop = sndio_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = sndio_stream_get_position, + .stream_get_latency = sndio_stream_get_latency, + .stream_set_volume = sndio_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_strings.c b/media/libcubeb/src/cubeb_strings.c +new file mode 100644 +index 000000000..79d7d21b3 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_strings.c +@@ -0,0 +1,155 @@ ++/* ++ * Copyright © 2011 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#include "cubeb_strings.h" ++ ++#include ++#include ++#include ++ ++#define CUBEB_STRINGS_INLINE_COUNT 4 ++ ++struct cubeb_strings { ++ uint32_t size; ++ uint32_t count; ++ char ** data; ++ char * small_store[CUBEB_STRINGS_INLINE_COUNT]; ++}; ++ ++int ++cubeb_strings_init(cubeb_strings ** strings) ++{ ++ cubeb_strings* strs = NULL; ++ ++ if (!strings) { ++ return CUBEB_ERROR; ++ } ++ ++ strs = calloc(1, sizeof(cubeb_strings)); ++ assert(strs); ++ ++ if (!strs) { ++ return CUBEB_ERROR; ++ } ++ ++ strs->size = sizeof(strs->small_store) / sizeof(strs->small_store[0]); ++ strs->count = 0; ++ strs->data = strs->small_store; ++ ++ *strings = strs; ++ ++ return CUBEB_OK; ++} ++ ++void ++cubeb_strings_destroy(cubeb_strings * strings) ++{ ++ char ** sp = NULL; ++ char ** se = NULL; ++ ++ if (!strings) { ++ return; ++ } ++ ++ sp = strings->data; ++ se = sp + strings->count; ++ ++ for ( ; sp != se; sp++) { ++ if (*sp) { ++ free(*sp); ++ } ++ } ++ ++ if (strings->data != strings->small_store) { ++ free(strings->data); ++ } ++ ++ free(strings); ++} ++ ++/** Look for string in string storage. ++ @param strings Opaque pointer to interned string storage. ++ @param s String to look up. ++ @retval Read-only string or NULL if not found. */ ++static char const * ++cubeb_strings_lookup(cubeb_strings * strings, char const * s) ++{ ++ char ** sp = NULL; ++ char ** se = NULL; ++ ++ if (!strings || !s) { ++ return NULL; ++ } ++ ++ sp = strings->data; ++ se = sp + strings->count; ++ ++ for ( ; sp != se; sp++) { ++ if (*sp && strcmp(*sp, s) == 0) { ++ return *sp; ++ } ++ } ++ ++ return NULL; ++} ++ ++static char const * ++cubeb_strings_push(cubeb_strings * strings, char const * s) ++{ ++ char * is = NULL; ++ ++ if (strings->count == strings->size) { ++ char ** new_data; ++ uint32_t value_size = sizeof(char const *); ++ uint32_t new_size = strings->size * 2; ++ if (!new_size || value_size > (uint32_t)-1 / new_size) { ++ // overflow ++ return NULL; ++ } ++ ++ if (strings->small_store == strings->data) { ++ // First time heap allocation. ++ new_data = malloc(new_size * value_size); ++ if (new_data) { ++ memcpy(new_data, strings->small_store, sizeof(strings->small_store)); ++ } ++ } else { ++ new_data = realloc(strings->data, new_size * value_size); ++ } ++ ++ if (!new_data) { ++ // out of memory ++ return NULL; ++ } ++ ++ strings->size = new_size; ++ strings->data = new_data; ++ } ++ ++ is = strdup(s); ++ strings->data[strings->count++] = is; ++ ++ return is; ++} ++ ++char const * ++cubeb_strings_intern(cubeb_strings * strings, char const * s) ++{ ++ char const * is = NULL; ++ ++ if (!strings || !s) { ++ return NULL; ++ } ++ ++ is = cubeb_strings_lookup(strings, s); ++ if (is) { ++ return is; ++ } ++ ++ return cubeb_strings_push(strings, s); ++} ++ +diff --git a/media/libcubeb/src/cubeb_strings.h b/media/libcubeb/src/cubeb_strings.h +new file mode 100644 +index 000000000..a918a01c5 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_strings.h +@@ -0,0 +1,44 @@ ++/* ++ * Copyright © 2011 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#ifndef CUBEB_STRINGS_H ++#define CUBEB_STRINGS_H ++ ++#include "cubeb/cubeb.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++/** Opaque handle referencing interned string storage. */ ++typedef struct cubeb_strings cubeb_strings; ++ ++/** Initialize an interned string structure. ++ @param strings An out param where an opaque pointer to the ++ interned string storage will be returned. ++ @retval CUBEB_OK in case of success. ++ @retval CUBEB_ERROR in case of error. */ ++CUBEB_EXPORT int cubeb_strings_init(cubeb_strings ** strings); ++ ++/** Destroy an interned string structure freeing all associated memory. ++ @param strings An opaque pointer to the interned string storage to ++ destroy. */ ++CUBEB_EXPORT void cubeb_strings_destroy(cubeb_strings * strings); ++ ++/** Add string to internal storage. ++ @param strings Opaque pointer to interned string storage. ++ @param s String to add to storage. ++ @retval CUBEB_OK ++ @retval CUBEB_ERROR ++ */ ++CUBEB_EXPORT char const * cubeb_strings_intern(cubeb_strings * strings, char const * s); ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif // !CUBEB_STRINGS_H +diff --git a/media/libcubeb/src/cubeb_sun.c b/media/libcubeb/src/cubeb_sun.c +index b768bca56..64ab0b5b1 100644 +--- a/media/libcubeb/src/cubeb_sun.c ++++ b/media/libcubeb/src/cubeb_sun.c +@@ -1,504 +1,752 @@ + /* +- * Copyright (c) 2013, 2017 Ginn Chen ++ * Copyright © 2019 Nia Alarie + * + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ +-#include ++#include ++#include ++#include ++#include + #include + #include + #include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + +-/* Macros copied from audio_oss.h */ +-/* +- * CDDL HEADER START +- * +- * The contents of this file are subject to the terms of the +- * Common Development and Distribution License (the "License"). +- * You may not use this file except in compliance with the License. +- * +- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +- * or http://www.opensolaris.org/os/licensing. +- * See the License for the specific language governing permissions +- * and limitations under the License. +- * +- * When distributing Covered Code, include this CDDL HEADER in each +- * file and include the License file at usr/src/OPENSOLARIS.LICENSE. +- * If applicable, add the following below this CDDL HEADER, with the +- * fields enclosed by brackets "[]" replaced with your own identifying +- * information: Portions Copyright [yyyy] [name of copyright owner] +- * +- * CDDL HEADER END +- */ ++#define BYTES_TO_FRAMES(bytes, channels) \ ++ (bytes / (channels * sizeof(int16_t))) ++ ++#define FRAMES_TO_BYTES(frames, channels) \ ++ (frames * (channels * sizeof(int16_t))) ++ ++/* Default to 4 + 1 for the default device. */ ++#ifndef SUN_DEVICE_COUNT ++#define SUN_DEVICE_COUNT (5) ++#endif ++ ++/* Supported well by most hardware. */ ++#ifndef SUN_PREFER_RATE ++#define SUN_PREFER_RATE (48000) ++#endif ++ ++/* Standard acceptable minimum. */ ++#ifndef SUN_LATENCY_MS ++#define SUN_LATENCY_MS (40) ++#endif ++ ++#ifndef SUN_DEFAULT_DEVICE ++#define SUN_DEFAULT_DEVICE "/dev/audio" ++#endif ++ ++#ifndef SUN_POLL_TIMEOUT ++#define SUN_POLL_TIMEOUT (1000) ++#endif ++ ++#ifndef SUN_BUFFER_FRAMES ++#define SUN_BUFFER_FRAMES (32) ++#endif ++ + /* +- * Copyright (C) 4Front Technologies 1996-2008. +- * +- * Copyright 2009 Sun Microsystems, Inc. All rights reserved. +- * Use is subject to license terms. ++ * Supported on NetBSD regardless of hardware. + */ +-#define OSSIOCPARM_MASK 0x1fff /* parameters must be < 8192 bytes */ +-#define OSSIOC_VOID 0x00000000 /* no parameters */ +-#define OSSIOC_OUT 0x20000000 /* copy out parameters */ +-#define OSSIOC_IN 0x40000000 /* copy in parameters */ +-#define OSSIOC_INOUT (OSSIOC_IN|OSSIOC_OUT) +-#define OSSIOC_SZ(t) ((sizeof (t) & OSSIOCPARM_MASK) << 16) +-#define __OSSIO(x, y) ((int)(OSSIOC_VOID|(x<<8)|y)) +-#define __OSSIOR(x, y, t) ((int)(OSSIOC_OUT|OSSIOC_SZ(t)|(x<<8)|y)) +-#define __OSSIOWR(x, y, t) ((int)(OSSIOC_INOUT|OSSIOC_SZ(t)|(x<<8)|y)) +-#define SNDCTL_DSP_SPEED __OSSIOWR('P', 2, int) +-#define SNDCTL_DSP_CHANNELS __OSSIOWR('P', 6, int) +-#define SNDCTL_DSP_SETFMT __OSSIOWR('P', 5, int) /* Selects ONE fmt */ +-#define SNDCTL_DSP_GETODELAY __OSSIOR('P', 23, int) +-#define SNDCTL_DSP_HALT_OUTPUT __OSSIO('P', 34) +-#define AFMT_S16_LE 0x00000010 +-#define AFMT_S16_BE 0x00000020 +- +-#if defined(WORDS_BIGENDIAN) || defined(__BIG_ENDIAN__) +-#define AFMT_S16_NE AFMT_S16_BE +-#else +-#define AFMT_S16_NE AFMT_S16_LE +-#endif + +-#define DEFAULT_AUDIO_DEVICE "/dev/audio" +-#define DEFAULT_DSP_DEVICE "/dev/dsp" ++#ifndef SUN_MAX_CHANNELS ++# ifdef __NetBSD__ ++# define SUN_MAX_CHANNELS (12) ++# else ++# define SUN_MAX_CHANNELS (2) ++# endif ++#endif + +-#define BUF_SIZE_MS 10 ++#ifndef SUN_MIN_RATE ++#define SUN_MIN_RATE (1000) ++#endif + +-#if defined(CUBEB_SUNAUDIO_DEBUG) +-#define DPR(...) fprintf(stderr, __VA_ARGS__); +-#else +-#define DPR(...) do {} while(0) ++#ifndef SUN_MAX_RATE ++#define SUN_MAX_RATE (192000) + #endif + +-static struct cubeb_ops const sunaudio_ops; ++static struct cubeb_ops const sun_ops; + + struct cubeb { + struct cubeb_ops const * ops; + }; + + struct cubeb_stream { +- cubeb * context; +- pthread_t th; /* to run real-time audio i/o */ +- pthread_mutex_t mutex; /* protects fd and frm_played */ +- int fd; /* link us to sunaudio */ +- int active; /* cubec_start() called */ +- int conv; /* need float->s16 conversion */ +- int using_oss; +- unsigned char *buf; /* data is prepared here */ +- unsigned int rate; +- unsigned int n_channles; +- unsigned int bytes_per_ch; +- unsigned int n_frm; +- unsigned int buffer_size; +- int64_t frm_played; +- cubeb_data_callback data_cb; /* cb to preapare data */ +- cubeb_state_callback state_cb; /* cb to notify about state changes */ +- void *arg; /* user arg to {data,state}_cb */ ++ struct cubeb * context; ++ void * user_ptr; ++ pthread_t thread; ++ pthread_mutex_t mutex; /* protects running, volume, frames_written */ ++ int floating; ++ int running; ++ int play_fd; ++ int record_fd; ++ float volume; ++ struct audio_info p_info; /* info for the play fd */ ++ struct audio_info r_info; /* info for the record fd */ ++ cubeb_data_callback data_cb; ++ cubeb_state_callback state_cb; ++ int16_t * play_buf; ++ int16_t * record_buf; ++ float * f_play_buf; ++ float * f_record_buf; ++ char input_name[32]; ++ char output_name[32]; ++ uint64_t frames_written; ++ uint64_t blocks_written; + }; + ++int ++sun_init(cubeb ** context, char const * context_name) ++{ ++ cubeb * c; ++ ++ (void)context_name; ++ if ((c = calloc(1, sizeof(cubeb))) == NULL) { ++ return CUBEB_ERROR; ++ } ++ c->ops = &sun_ops; ++ *context = c; ++ return CUBEB_OK; ++} ++ + static void +-float_to_s16(void *ptr, long nsamp) ++sun_destroy(cubeb * context) + { +- int16_t *dst = ptr; +- float *src = ptr; ++ free(context); ++} + +- while (nsamp-- > 0) +- *(dst++) = *(src++) * 32767; ++static char const * ++sun_get_backend_id(cubeb * context) ++{ ++ return "sun"; + } + +-static void * +-sunaudio_mainloop(void *arg) ++static int ++sun_get_preferred_sample_rate(cubeb * context, uint32_t * rate) + { +- struct cubeb_stream *s = arg; +- int state; ++ (void)context; + +- DPR("sunaudio_mainloop()\n"); ++ *rate = SUN_PREFER_RATE; ++ return CUBEB_OK; ++} + +- s->state_cb(s, s->arg, CUBEB_STATE_STARTED); ++static int ++sun_get_max_channel_count(cubeb * context, uint32_t * max_channels) ++{ ++ (void)context; + +- pthread_mutex_lock(&s->mutex); +- DPR("sunaudio_mainloop(), started\n"); ++ *max_channels = SUN_MAX_CHANNELS; ++ return CUBEB_OK; ++} + +- for (;;) { +- if (!s->active) { +- DPR("sunaudio_mainloop() stopped\n"); +- state = CUBEB_STATE_STOPPED; +- break; +- } ++static int ++sun_get_min_latency(cubeb * context, cubeb_stream_params params, ++ uint32_t * latency_frames) ++{ ++ (void)context; + +- if (!s->using_oss) { +- audio_info_t info; +- ioctl(s->fd, AUDIO_GETINFO, &info); +- if (s->frm_played > info.play.samples + 3 * s->n_frm) { +- pthread_mutex_unlock(&s->mutex); +- struct timespec ts = {0, 10000}; // 10 ms +- nanosleep(&ts, NULL); +- pthread_mutex_lock(&s->mutex); +- continue; +- } +- } ++ *latency_frames = SUN_LATENCY_MS * params.rate / 1000; ++ return CUBEB_OK; ++} + +- pthread_mutex_unlock(&s->mutex); +- unsigned int got = s->data_cb(s, s->arg, NULL, s->buf, s->n_frm); +- DPR("sunaudio_mainloop() ask %d got %d\n", s->n_frm, got); +- pthread_mutex_lock(&s->mutex); ++static int ++sun_get_hwinfo(const char * device, struct audio_info * format, ++ int * props, struct audio_device * dev) ++{ ++ int fd = -1; + +- if (got < 0) { +- DPR("sunaudio_mainloop() cb err\n"); +- state = CUBEB_STATE_ERROR; +- break; +- } ++ if ((fd = open(device, O_RDONLY)) == -1) { ++ goto error; ++ } ++#ifdef AUDIO_GETFORMAT ++ if (ioctl(fd, AUDIO_GETFORMAT, format) != 0) { ++ goto error; ++ } ++#endif ++#ifdef AUDIO_GETPROPS ++ if (ioctl(fd, AUDIO_GETPROPS, props) != 0) { ++ goto error; ++ } ++#endif ++ if (ioctl(fd, AUDIO_GETDEV, dev) != 0) { ++ goto error; ++ } ++ close(fd); ++ return CUBEB_OK; ++error: ++ if (fd != -1) { ++ close(fd); ++ } ++ return CUBEB_ERROR; ++} + +- if (s->conv) { +- float_to_s16(s->buf, got * s->n_channles); +- } ++/* ++ * XXX: PR kern/54264 ++ */ ++static int ++sun_prinfo_verify_sanity(struct audio_prinfo * prinfo) ++{ ++ return prinfo->precision >= 8 && prinfo->precision <= 32 && ++ prinfo->channels >= 1 && prinfo->channels < SUN_MAX_CHANNELS && ++ prinfo->sample_rate < SUN_MAX_RATE && prinfo->sample_rate > SUN_MIN_RATE; ++} + +- unsigned int avail = got * 2 * s->n_channles; // coverted to s16 +- unsigned int pos = 0; ++static int ++sun_enumerate_devices(cubeb * context, cubeb_device_type type, ++ cubeb_device_collection * collection) ++{ ++ unsigned i; ++ cubeb_device_info device = {0}; ++ char dev[16] = SUN_DEFAULT_DEVICE; ++ char dev_friendly[64]; ++ struct audio_info hwfmt; ++ struct audio_device hwname; ++ struct audio_prinfo *prinfo = NULL; ++ int hwprops; ++ ++ collection->device = calloc(SUN_DEVICE_COUNT, sizeof(cubeb_device_info)); ++ if (collection->device == NULL) { ++ return CUBEB_ERROR; ++ } ++ collection->count = 0; + +- while (avail > 0 && s->active) { +- int written = write(s->fd, s->buf + pos, avail); +- if (written == -1) { +- if (errno != EINTR && errno != EWOULDBLOCK) { +- DPR("sunaudio_mainloop() write err\n"); +- state = CUBEB_STATE_ERROR; +- break; +- } +- pthread_mutex_unlock(&s->mutex); +- struct timespec ts = {0, 10000}; // 10 ms +- nanosleep(&ts, NULL); +- pthread_mutex_lock(&s->mutex); +- } else { +- pos += written; +- DPR("sunaudio_mainloop() write %d pos %d\n", written, pos); +- s->frm_played += written / 2 / s->n_channles; +- avail -= written; +- } ++ for (i = 0; i < SUN_DEVICE_COUNT; ++i) { ++ if (i > 0) { ++ (void)snprintf(dev, sizeof(dev), "/dev/audio%u", i - 1); + } +- +- if ((got < s->n_frm)) { +- DPR("sunaudio_mainloop() drained\n"); +- state = CUBEB_STATE_DRAINED; ++ if (sun_get_hwinfo(dev, &hwfmt, &hwprops, &hwname) != CUBEB_OK) { ++ continue; ++ } ++#ifdef AUDIO_GETPROPS ++ device.type = 0; ++ if ((hwprops & AUDIO_PROP_CAPTURE) != 0 && ++ sun_prinfo_verify_sanity(&hwfmt.record)) { ++ /* the device supports recording, probably */ ++ device.type |= CUBEB_DEVICE_TYPE_INPUT; ++ } ++ if ((hwprops & AUDIO_PROP_PLAYBACK) != 0 && ++ sun_prinfo_verify_sanity(&hwfmt.play)) { ++ /* the device supports playback, probably */ ++ device.type |= CUBEB_DEVICE_TYPE_OUTPUT; ++ } ++ switch (device.type) { ++ case 0: ++ /* device doesn't do input or output, aliens probably involved */ ++ continue; ++ case CUBEB_DEVICE_TYPE_INPUT: ++ if ((type & CUBEB_DEVICE_TYPE_INPUT) == 0) { ++ /* this device is input only, not scanning for those, skip it */ ++ continue; ++ } + break; ++ case CUBEB_DEVICE_TYPE_OUTPUT: ++ if ((type & CUBEB_DEVICE_TYPE_OUTPUT) == 0) { ++ /* this device is output only, not scanning for those, skip it */ ++ continue; ++ } ++ break; ++ } ++ if ((type & CUBEB_DEVICE_TYPE_INPUT) != 0) { ++ prinfo = &hwfmt.record; ++ } ++ if ((type & CUBEB_DEVICE_TYPE_OUTPUT) != 0) { ++ prinfo = &hwfmt.play; + } ++#endif ++ if (i > 0) { ++ (void)snprintf(dev_friendly, sizeof(dev_friendly), "%s %s %s (%d)", ++ hwname.name, hwname.version, hwname.config, i - 1); ++ } else { ++ (void)snprintf(dev_friendly, sizeof(dev_friendly), "%s %s %s (default)", ++ hwname.name, hwname.version, hwname.config); ++ } ++ device.devid = (void *)(uintptr_t)i; ++ device.device_id = strdup(dev); ++ device.friendly_name = strdup(dev_friendly); ++ device.group_id = strdup(dev); ++ device.vendor_name = strdup(hwname.name); ++ device.type = type; ++ device.state = CUBEB_DEVICE_STATE_ENABLED; ++ device.preferred = (i == 0) ? CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE; ++#ifdef AUDIO_GETFORMAT ++ device.max_channels = prinfo->channels; ++ device.default_rate = prinfo->sample_rate; ++#else ++ device.max_channels = 2; ++ device.default_rate = SUN_PREFER_RATE; ++#endif ++ device.default_format = CUBEB_DEVICE_FMT_S16NE; ++ device.format = CUBEB_DEVICE_FMT_S16NE; ++ device.min_rate = SUN_MIN_RATE; ++ device.max_rate = SUN_MAX_RATE; ++ device.latency_lo = SUN_LATENCY_MS * SUN_MIN_RATE / 1000; ++ device.latency_hi = SUN_LATENCY_MS * SUN_MAX_RATE / 1000; ++ collection->device[collection->count++] = device; + } ++ return CUBEB_OK; ++} + +- pthread_mutex_unlock(&s->mutex); +- s->state_cb(s, s->arg, state); ++static int ++sun_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection) ++{ ++ unsigned i; + +- return NULL; ++ for (i = 0; i < collection->count; ++i) { ++ free((char *)collection->device[i].device_id); ++ free((char *)collection->device[i].friendly_name); ++ free((char *)collection->device[i].group_id); ++ free((char *)collection->device[i].vendor_name); ++ } ++ free(collection->device); ++ return CUBEB_OK; + } + +-/*static*/ int +-sunaudio_init(cubeb **context, char const *context_name) ++static int ++sun_copy_params(int fd, cubeb_stream * stream, cubeb_stream_params * params, ++ struct audio_info * info, struct audio_prinfo * prinfo) + { +- DPR("sunaudio_init(%s)\n", context_name); +- *context = malloc(sizeof(*context)); +- (*context)->ops = &sunaudio_ops; +- (void)context_name; ++ prinfo->channels = params->channels; ++ prinfo->sample_rate = params->rate; ++ prinfo->precision = 16; ++#ifdef AUDIO_ENCODING_SLINEAR_LE ++ switch (params->format) { ++ case CUBEB_SAMPLE_S16LE: ++ prinfo->encoding = AUDIO_ENCODING_SLINEAR_LE; ++ break; ++ case CUBEB_SAMPLE_S16BE: ++ prinfo->encoding = AUDIO_ENCODING_SLINEAR_BE; ++ break; ++ case CUBEB_SAMPLE_FLOAT32NE: ++ stream->floating = 1; ++ prinfo->encoding = AUDIO_ENCODING_SLINEAR; ++ break; ++ default: ++ LOG("Unsupported format"); ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } ++#else ++ switch (params->format) { ++ case CUBEB_SAMPLE_S16NE: ++ prinfo->encoding = AUDIO_ENCODING_LINEAR; ++ break; ++ case CUBEB_SAMPLE_FLOAT32NE: ++ stream->floating = 1; ++ prinfo->encoding = AUDIO_ENCODING_LINEAR; ++ break; ++ default: ++ LOG("Unsupported format"); ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } ++#endif ++ if (ioctl(fd, AUDIO_SETINFO, info) == -1) { ++ return CUBEB_ERROR; ++ } ++ if (ioctl(fd, AUDIO_GETINFO, info) == -1) { ++ return CUBEB_ERROR; ++ } + return CUBEB_OK; + } + +-static char const * +-sunaudio_get_backend_id(cubeb *context) ++static int ++sun_stream_stop(cubeb_stream * s) + { +- return "sunaudio"; ++ pthread_mutex_lock(&s->mutex); ++ if (s->running) { ++ s->running = 0; ++ pthread_mutex_unlock(&s->mutex); ++ pthread_join(s->thread, NULL); ++ } else { ++ pthread_mutex_unlock(&s->mutex); ++ } ++ return CUBEB_OK; + } + + static void +-sunaudio_destroy(cubeb *context) ++sun_stream_destroy(cubeb_stream * s) + { +- DPR("sunaudio_destroy()\n"); +- free(context); ++ pthread_mutex_destroy(&s->mutex); ++ sun_stream_stop(s); ++ if (s->play_fd != -1) { ++ close(s->play_fd); ++ } ++ if (s->record_fd != -1) { ++ close(s->record_fd); ++ } ++ free(s->f_play_buf); ++ free(s->f_record_buf); ++ free(s->play_buf); ++ free(s->record_buf); ++ free(s); + } + +-static int +-sunaudio_stream_init(cubeb *context, +- cubeb_stream **stream, +- char const *stream_name, +- cubeb_devid input_device, +- cubeb_stream_params * input_stream_params, +- cubeb_devid output_device, +- cubeb_stream_params * output_stream_params, +- unsigned int latency, +- cubeb_data_callback data_callback, +- cubeb_state_callback state_callback, +- void *user_ptr) ++static void ++sun_float_to_linear(float * in, int16_t * out, ++ unsigned channels, long frames, float vol) + { +- struct cubeb_stream *s; +- DPR("sunaudio_stream_init(%s)\n", stream_name); +- size_t size; +- +- s = malloc(sizeof(struct cubeb_stream)); +- if (s == NULL) +- return CUBEB_ERROR; +- s->context = context; +- +- // If UTAUDIODEV is set, use it with Sun Audio interface +- char * sa_device_name = getenv("UTAUDIODEV"); +- char * dsp_device_name = NULL; +- if (!sa_device_name) { +- dsp_device_name = getenv("AUDIODSP"); +- if (!dsp_device_name) { +- dsp_device_name = DEFAULT_DSP_DEVICE; +- } +- sa_device_name = getenv("AUDIODEV"); +- if (!sa_device_name) { +- sa_device_name = DEFAULT_AUDIO_DEVICE; ++ unsigned i, sample_count = frames * channels; ++ float multiplier = vol * 0x8000; ++ ++ for (i = 0; i < sample_count; ++i) { ++ int32_t sample = lrintf(in[i] * multiplier); ++ if (sample < -0x8000) { ++ out[i] = -0x8000; ++ } else if (sample > 0x7fff) { ++ out[i] = 0x7fff; ++ } else { ++ out[i] = sample; + } + } ++} + +- s->using_oss = 0; +- // Try to use OSS if available +- if (dsp_device_name) { +- s->fd = open(dsp_device_name, O_WRONLY | O_NONBLOCK); +- if (s->fd >= 0) { +- s->using_oss = 1; +- } +- } ++static void ++sun_linear_to_float(int16_t * in, float * out, ++ unsigned channels, long frames) ++{ ++ unsigned i, sample_count = frames * channels; + +- // Try Sun Audio +- if (!s->using_oss) { +- s->fd = open(sa_device_name, O_WRONLY | O_NONBLOCK); ++ for (i = 0; i < sample_count; ++i) { ++ out[i] = (1.0 / 0x8000) * in[i]; + } ++} + +- if (s->fd < 0) { +- free(s); +- DPR("sunaudio_stream_init(), open() failed\n"); +- return CUBEB_ERROR; ++static void ++sun_linear_set_vol(int16_t * buf, unsigned channels, long frames, float vol) ++{ ++ unsigned i, sample_count = frames * channels; ++ int32_t multiplier = vol * 0x8000; ++ ++ for (i = 0; i < sample_count; ++i) { ++ buf[i] = (buf[i] * multiplier) >> 15; + } ++} + +- if (s->using_oss) { +- if (ioctl(s->fd, SNDCTL_DSP_SPEED, &output_stream_params->rate) < 0) { +- DPR("ioctl SNDCTL_DSP_SPEED failed.\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++static void * ++sun_io_routine(void * arg) ++{ ++ cubeb_stream *s = arg; ++ cubeb_state state = CUBEB_STATE_STARTED; ++ size_t to_read = 0; ++ long to_write = 0; ++ size_t write_ofs = 0; ++ size_t read_ofs = 0; ++ int drain = 0; ++ ++ s->state_cb(s, s->user_ptr, CUBEB_STATE_STARTED); ++ while (state != CUBEB_STATE_ERROR) { ++ pthread_mutex_lock(&s->mutex); ++ if (!s->running) { ++ pthread_mutex_unlock(&s->mutex); ++ state = CUBEB_STATE_STOPPED; ++ break; + } +- +- if (ioctl(s->fd, SNDCTL_DSP_CHANNELS, &output_stream_params->channels) < 0) { +- DPR("ioctl SNDCTL_DSP_CHANNELS failed.\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++ pthread_mutex_unlock(&s->mutex); ++ if (s->floating) { ++ if (s->record_fd != -1) { ++ sun_linear_to_float(s->record_buf, s->f_record_buf, ++ s->r_info.record.channels, SUN_BUFFER_FRAMES); ++ } ++ to_write = s->data_cb(s, s->user_ptr, ++ s->f_record_buf, s->f_play_buf, SUN_BUFFER_FRAMES); ++ if (to_write == CUBEB_ERROR) { ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ if (s->play_fd != -1) { ++ pthread_mutex_lock(&s->mutex); ++ sun_float_to_linear(s->f_play_buf, s->play_buf, ++ s->p_info.play.channels, to_write, s->volume); ++ pthread_mutex_unlock(&s->mutex); ++ } ++ } else { ++ to_write = s->data_cb(s, s->user_ptr, ++ s->record_buf, s->play_buf, SUN_BUFFER_FRAMES); ++ if (to_write == CUBEB_ERROR) { ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ if (s->play_fd != -1) { ++ pthread_mutex_lock(&s->mutex); ++ sun_linear_set_vol(s->play_buf, s->p_info.play.channels, to_write, s->volume); ++ pthread_mutex_unlock(&s->mutex); ++ } + } +- +- int format = AFMT_S16_NE; +- if (ioctl(s->fd, SNDCTL_DSP_SETFMT, &format) < 0) { +- DPR("ioctl SNDCTL_DSP_SETFMT failed.\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++ if (to_write < SUN_BUFFER_FRAMES) { ++ drain = 1; + } +- } else { +- audio_info_t audio_info; +- AUDIO_INITINFO(&audio_info) +- audio_info.play.sample_rate = output_stream_params->rate; +- audio_info.play.channels = output_stream_params->channels; +- audio_info.play.encoding = AUDIO_ENCODING_LINEAR; +- audio_info.play.precision = 16; +- if (ioctl(s->fd, AUDIO_SETINFO, &audio_info) == -1) { +- DPR("ioctl AUDIO_SETINFO failed.\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++ to_write = s->play_fd != -1 ? to_write : 0; ++ to_read = s->record_fd != -1 ? SUN_BUFFER_FRAMES : 0; ++ write_ofs = 0; ++ read_ofs = 0; ++ while (to_write > 0 || to_read > 0) { ++ size_t bytes; ++ ssize_t n, frames; ++ ++ if (to_write > 0) { ++ bytes = FRAMES_TO_BYTES(to_write, s->p_info.play.channels); ++ if ((n = write(s->play_fd, s->play_buf + write_ofs, bytes)) < 0) { ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ frames = BYTES_TO_FRAMES(n, s->p_info.play.channels); ++ pthread_mutex_lock(&s->mutex); ++ s->frames_written += frames; ++ pthread_mutex_unlock(&s->mutex); ++ to_write -= frames; ++ write_ofs += frames; ++ } ++ if (to_read > 0) { ++ bytes = FRAMES_TO_BYTES(to_read, s->r_info.record.channels); ++ if ((n = read(s->record_fd, s->record_buf + read_ofs, bytes)) < 0) { ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ frames = BYTES_TO_FRAMES(n, s->r_info.record.channels); ++ to_read -= frames; ++ read_ofs += frames; ++ } + } +- } +- +- s->conv = 0; +- switch (output_stream_params->format) { +- case CUBEB_SAMPLE_S16NE: +- s->bytes_per_ch = 2; +- break; +- case CUBEB_SAMPLE_FLOAT32NE: +- s->bytes_per_ch = 4; +- s->conv = 1; ++ if (drain && state != CUBEB_STATE_ERROR) { ++ state = CUBEB_STATE_DRAINED; + break; +- default: +- DPR("sunaudio_stream_init() unsupported format\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++ } + } ++ s->state_cb(s, s->user_ptr, state); ++ return NULL; ++} + +- s->active = 0; +- s->rate = output_stream_params->rate; +- s->n_channles = output_stream_params->channels; +- s->data_cb = data_callback; ++static int ++sun_stream_init(cubeb * context, ++ cubeb_stream ** stream, ++ char const * stream_name, ++ cubeb_devid input_device, ++ cubeb_stream_params * input_stream_params, ++ cubeb_devid output_device, ++ cubeb_stream_params * output_stream_params, ++ unsigned latency_frames, ++ cubeb_data_callback data_callback, ++ cubeb_state_callback state_callback, ++ void * user_ptr) ++{ ++ int ret = CUBEB_OK; ++ cubeb_stream *s = NULL; ++ ++ (void)stream_name; ++ (void)latency_frames; ++ if ((s = calloc(1, sizeof(cubeb_stream))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } ++ s->record_fd = -1; ++ s->play_fd = -1; ++ if (input_device != 0) { ++ snprintf(s->input_name, sizeof(s->input_name), ++ "/dev/audio%zu", (uintptr_t)input_device - 1); ++ } else { ++ snprintf(s->input_name, sizeof(s->input_name), "%s", SUN_DEFAULT_DEVICE); ++ } ++ if (output_device != 0) { ++ snprintf(s->output_name, sizeof(s->output_name), ++ "/dev/audio%zu", (uintptr_t)output_device - 1); ++ } else { ++ snprintf(s->output_name, sizeof(s->output_name), "%s", SUN_DEFAULT_DEVICE); ++ } ++ if (input_stream_params != NULL) { ++ if (input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ LOG("Loopback not supported"); ++ ret = CUBEB_ERROR_NOT_SUPPORTED; ++ goto error; ++ } ++ if (s->record_fd == -1) { ++ if ((s->record_fd = open(s->input_name, O_RDONLY)) == -1) { ++ LOG("Audio device cannot be opened as read-only"); ++ ret = CUBEB_ERROR_DEVICE_UNAVAILABLE; ++ goto error; ++ } ++ } ++ AUDIO_INITINFO(&s->r_info); ++#ifdef AUMODE_RECORD ++ s->r_info.mode = AUMODE_RECORD; ++#endif ++ if ((ret = sun_copy_params(s->record_fd, s, input_stream_params, ++ &s->r_info, &s->r_info.record)) != CUBEB_OK) { ++ LOG("Setting record params failed"); ++ goto error; ++ } ++ } ++ if (output_stream_params != NULL) { ++ if (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ LOG("Loopback not supported"); ++ ret = CUBEB_ERROR_NOT_SUPPORTED; ++ goto error; ++ } ++ if (s->play_fd == -1) { ++ if ((s->play_fd = open(s->output_name, O_WRONLY)) == -1) { ++ LOG("Audio device cannot be opened as write-only"); ++ ret = CUBEB_ERROR_DEVICE_UNAVAILABLE; ++ goto error; ++ } ++ } ++ AUDIO_INITINFO(&s->p_info); ++#ifdef AUMODE_PLAY ++ s->p_info.mode = AUMODE_PLAY; ++#endif ++ if ((ret = sun_copy_params(s->play_fd, s, output_stream_params, ++ &s->p_info, &s->p_info.play)) != CUBEB_OK) { ++ LOG("Setting play params failed"); ++ goto error; ++ } ++ } ++ s->context = context; ++ s->volume = 1.0; + s->state_cb = state_callback; +- s->arg = user_ptr; ++ s->data_cb = data_callback; ++ s->user_ptr = user_ptr; + if (pthread_mutex_init(&s->mutex, NULL) != 0) { +- free(s); +- return CUBEB_ERROR; ++ LOG("Failed to create mutex"); ++ goto error; + } +- s->frm_played = 0; +- s->n_frm = s->rate * BUF_SIZE_MS / 1000; +- s->buffer_size = s->bytes_per_ch * s->n_channles * s->n_frm; +- s->buf = malloc(s->buffer_size); +- if (s->buf == NULL) { +- close(s->fd); +- free(s); +- return CUBEB_ERROR; ++ if (s->play_fd != -1 && (s->play_buf = calloc(SUN_BUFFER_FRAMES, ++ s->p_info.play.channels * sizeof(int16_t))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } ++ if (s->record_fd != -1 && (s->record_buf = calloc(SUN_BUFFER_FRAMES, ++ s->r_info.record.channels * sizeof(int16_t))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } ++ if (s->floating) { ++ if (s->play_fd != -1 && (s->f_play_buf = calloc(SUN_BUFFER_FRAMES, ++ s->p_info.play.channels * sizeof(float))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } ++ if (s->record_fd != -1 && (s->f_record_buf = calloc(SUN_BUFFER_FRAMES, ++ s->r_info.record.channels * sizeof(float))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } + } +- + *stream = s; +- DPR("sunaudio_stream_init() end, ok\n"); + return CUBEB_OK; +-} +- +-static void +-sunaudio_stream_destroy(cubeb_stream *s) +-{ +- DPR("sunaudio_stream_destroy()\n"); +- if (s->fd > 0) { +- // Flush buffer +- if (s->using_oss) { +- ioctl(s->fd, SNDCTL_DSP_HALT_OUTPUT); +- } else { +- ioctl(s->fd, I_FLUSH); +- } +- close(s->fd); ++error: ++ if (s != NULL) { ++ sun_stream_destroy(s); + } +- free(s->buf); +- free(s); ++ return ret; + } + + static int +-sunaudio_stream_start(cubeb_stream *s) ++sun_stream_start(cubeb_stream * s) + { +- int err; +- +- DPR("sunaudio_stream_start()\n"); +- s->active = 1; +- err = pthread_create(&s->th, NULL, sunaudio_mainloop, s); +- if (err) { +- s->active = 0; ++ s->running = 1; ++ if (pthread_create(&s->thread, NULL, sun_io_routine, s) != 0) { ++ LOG("Couldn't create thread"); + return CUBEB_ERROR; + } + return CUBEB_OK; + } + + static int +-sunaudio_stream_stop(cubeb_stream *s) ++sun_stream_get_position(cubeb_stream * s, uint64_t * position) + { +- void *dummy; ++#ifdef AUDIO_GETOOFFS ++ struct audio_offset offset; + +- DPR("sunaudio_stream_stop()\n"); +- if (s->active) { +- s->active = 0; +- pthread_join(s->th, &dummy); ++ if (ioctl(s->play_fd, AUDIO_GETOOFFS, &offset) == -1) { ++ return CUBEB_ERROR; + } ++ s->blocks_written += offset.deltablks; ++ *position = BYTES_TO_FRAMES(s->blocks_written * s->p_info.blocksize, ++ s->p_info.play.channels); + return CUBEB_OK; +-} +- +-static int +-sunaudio_stream_get_position(cubeb_stream *s, uint64_t *p) +-{ +- int rv = CUBEB_OK; ++#else + pthread_mutex_lock(&s->mutex); +- if (s->active && s->fd > 0) { +- if (s->using_oss) { +- int delay; +- ioctl(s->fd, SNDCTL_DSP_GETODELAY, &delay); +- int64_t t = s->frm_played - delay / s->n_channles / 2; +- if (t < 0) { +- *p = 0; +- } else { +- *p = t; +- } +- } else { +- audio_info_t info; +- ioctl(s->fd, AUDIO_GETINFO, &info); +- *p = info.play.samples; +- } +- DPR("sunaudio_stream_get_position() %lld\n", *p); +- } else { +- rv = CUBEB_ERROR; +- } ++ *position = s->frames_written; + pthread_mutex_unlock(&s->mutex); +- return rv; ++ return CUBEB_OK; ++#endif + } + + static int +-sunaudio_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) ++sun_stream_get_latency(cubeb_stream * stream, uint32_t * latency) + { +- if (!ctx || !max_channels) +- return CUBEB_ERROR; ++#ifdef AUDIO_GETBUFINFO ++ struct audio_info info; + +- *max_channels = 2; ++ if (ioctl(stream->play_fd, AUDIO_GETBUFINFO, &info) == -1) { ++ return CUBEB_ERROR; ++ } + ++ *latency = BYTES_TO_FRAMES(info.play.seek + info.blocksize, ++ info.play.channels); + return CUBEB_OK; ++#else ++ cubeb_stream_params params; ++ ++ params.rate = stream->p_info.play.sample_rate; ++ ++ return sun_get_min_latency(NULL, params, latency); ++#endif + } + + static int +-sunaudio_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) ++sun_stream_set_volume(cubeb_stream * stream, float volume) + { +- if (!ctx || !rate) +- return CUBEB_ERROR; +- +- // XXX Not yet implemented. +- *rate = 44100; +- ++ pthread_mutex_lock(&stream->mutex); ++ stream->volume = volume; ++ pthread_mutex_unlock(&stream->mutex); + return CUBEB_OK; + } + + static int +-sunaudio_get_min_latency(cubeb * ctx, cubeb_stream_params params, uint32_t * latency_ms) ++sun_get_current_device(cubeb_stream * stream, cubeb_device ** const device) + { +- if (!ctx || !latency_ms) ++ *device = calloc(1, sizeof(cubeb_device)); ++ if (*device == NULL) { + return CUBEB_ERROR; +- +- // XXX Not yet implemented. +- *latency_ms = 20; +- ++ } ++ (*device)->input_name = stream->record_fd != -1 ? ++ strdup(stream->input_name) : NULL; ++ (*device)->output_name = stream->play_fd != -1 ? ++ strdup(stream->output_name) : NULL; + return CUBEB_OK; + } + + static int +-sunaudio_stream_get_latency(cubeb_stream * s, uint32_t * latency) ++sun_stream_device_destroy(cubeb_stream * stream, cubeb_device * device) + { +- if (!s || !latency) +- return CUBEB_ERROR; +- +- int rv = CUBEB_OK; +- pthread_mutex_lock(&s->mutex); +- if (s->active && s->fd > 0) { +- if (s->using_oss) { +- int delay; +- ioctl(s->fd, SNDCTL_DSP_GETODELAY, &delay); +- *latency = delay / s->n_channles / 2 / s->rate; +- } else { +- audio_info_t info; +- ioctl(s->fd, AUDIO_GETINFO, &info); +- *latency = (s->frm_played - info.play.samples) / s->rate; +- } +- DPR("sunaudio_stream_get_position() %lld\n", *p); +- } else { +- rv = CUBEB_ERROR; +- } +- pthread_mutex_unlock(&s->mutex); +- return rv; ++ (void)stream; ++ free(device->input_name); ++ free(device->output_name); ++ free(device); ++ return CUBEB_OK; + } + +-static struct cubeb_ops const sunaudio_ops = { +- .init = sunaudio_init, +- .get_backend_id = sunaudio_get_backend_id, +- .destroy = sunaudio_destroy, +- .get_preferred_sample_rate = sunaudio_get_preferred_sample_rate, +- .stream_init = sunaudio_stream_init, +- .stream_destroy = sunaudio_stream_destroy, +- .stream_start = sunaudio_stream_start, +- .stream_stop = sunaudio_stream_stop, +- .stream_get_position = sunaudio_stream_get_position, +- .get_max_channel_count = sunaudio_get_max_channel_count, +- .get_min_latency = sunaudio_get_min_latency, +- .stream_get_latency = sunaudio_stream_get_latency ++static struct cubeb_ops const sun_ops = { ++ .init = sun_init, ++ .get_backend_id = sun_get_backend_id, ++ .get_max_channel_count = sun_get_max_channel_count, ++ .get_min_latency = sun_get_min_latency, ++ .get_preferred_sample_rate = sun_get_preferred_sample_rate, ++ .enumerate_devices = sun_enumerate_devices, ++ .device_collection_destroy = sun_device_collection_destroy, ++ .destroy = sun_destroy, ++ .stream_init = sun_stream_init, ++ .stream_destroy = sun_stream_destroy, ++ .stream_start = sun_stream_start, ++ .stream_stop = sun_stream_stop, ++ .stream_reset_default_device = NULL, ++ .stream_get_position = sun_stream_get_position, ++ .stream_get_latency = sun_stream_get_latency, ++ .stream_set_volume = sun_stream_set_volume, ++ .stream_get_current_device = sun_get_current_device, ++ .stream_device_destroy = sun_stream_device_destroy, ++ .stream_register_device_changed_callback = NULL, ++ .register_device_collection_changed = NULL + }; +diff --git a/media/libcubeb/src/cubeb_utils.cpp b/media/libcubeb/src/cubeb_utils.cpp +new file mode 100644 +index 000000000..85572a9fe +--- /dev/null ++++ b/media/libcubeb/src/cubeb_utils.cpp +@@ -0,0 +1,23 @@ ++/* ++ * Copyright © 2018 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#include "cubeb_utils.h" ++ ++size_t cubeb_sample_size(cubeb_sample_format format) ++{ ++ switch (format) { ++ case CUBEB_SAMPLE_S16LE: ++ case CUBEB_SAMPLE_S16BE: ++ return sizeof(int16_t); ++ case CUBEB_SAMPLE_FLOAT32LE: ++ case CUBEB_SAMPLE_FLOAT32BE: ++ return sizeof(float); ++ default: ++ // should never happen as all cases are handled above. ++ assert(false); ++ } ++} +diff --git a/media/libcubeb/src/cubeb_utils.h b/media/libcubeb/src/cubeb_utils.h +index d8e9928fe..df6751155 100644 +--- a/media/libcubeb/src/cubeb_utils.h ++++ b/media/libcubeb/src/cubeb_utils.h +@@ -8,11 +8,16 @@ + #if !defined(CUBEB_UTILS) + #define CUBEB_UTILS + ++#include "cubeb/cubeb.h" ++ ++#ifdef __cplusplus ++ + #include + #include + #include ++#include + #include +-#if defined(WIN32) ++#if defined(_WIN32) + #include "cubeb_utils_win.h" + #else + #include "cubeb_utils_unix.h" +@@ -23,6 +28,7 @@ template + void PodCopy(T * destination, const T * source, size_t count) + { + static_assert(std::is_trivial::value, "Requires trivial type"); ++ assert(destination && source); + memcpy(destination, source, count * sizeof(T)); + } + +@@ -31,6 +37,7 @@ template + void PodMove(T * destination, const T * source, size_t count) + { + static_assert(std::is_trivial::value, "Requires trivial type"); ++ assert(destination && source); + memmove(destination, source, count * sizeof(T)); + } + +@@ -39,9 +46,67 @@ template + void PodZero(T * destination, size_t count) + { + static_assert(std::is_trivial::value, "Requires trivial type"); ++ assert(destination); + memset(destination, 0, count * sizeof(T)); + } + ++namespace { ++template ++void Copy(T * destination, const T * source, size_t count, Trait) ++{ ++ for (size_t i = 0; i < count; i++) { ++ destination[i] = source[i]; ++ } ++} ++ ++template ++void Copy(T * destination, const T * source, size_t count, std::true_type) ++{ ++ PodCopy(destination, source, count); ++} ++} ++ ++/** ++ * This allows copying a number of elements from a `source` pointer to a ++ * `destination` pointer, using `memcpy` if it is safe to do so, or a loop that ++ * calls the constructors and destructors otherwise. ++ */ ++template ++void Copy(T * destination, const T * source, size_t count) ++{ ++ assert(destination && source); ++ Copy(destination, source, count, typename std::is_trivial::type()); ++} ++ ++namespace { ++template ++void ConstructDefault(T * destination, size_t count, Trait) ++{ ++ for (size_t i = 0; i < count; i++) { ++ destination[i] = T(); ++ } ++} ++ ++template ++void ConstructDefault(T * destination, ++ size_t count, std::true_type) ++{ ++ PodZero(destination, count); ++} ++} ++ ++/** ++ * This allows zeroing (using memset) or default-constructing a number of ++ * elements calling the constructors and destructors if necessary. ++ */ ++template ++void ConstructDefault(T * destination, size_t count) ++{ ++ assert(destination); ++ ConstructDefault(destination, count, ++ typename std::is_arithmetic::type()); ++} ++ + template + class auto_array + { +@@ -63,6 +128,11 @@ public: + return data_; + } + ++ T * end() const ++ { ++ return data_ + length_; ++ } ++ + const T& at(size_t index) const + { + assert(index < length_ && "out of range"); +@@ -198,18 +268,76 @@ private: + size_t length_; + }; + +-struct auto_lock { +- explicit auto_lock(owned_critical_section & lock) +- : lock(lock) +- { +- lock.enter(); ++struct auto_array_wrapper { ++ virtual void push(void * elements, size_t length) = 0; ++ virtual size_t length() = 0; ++ virtual void push_silence(size_t length) = 0; ++ virtual bool pop(size_t length) = 0; ++ virtual void * data() = 0; ++ virtual void * end() = 0; ++ virtual void clear() = 0; ++ virtual bool reserve(size_t capacity) = 0; ++ virtual void set_length(size_t length) = 0; ++ virtual ~auto_array_wrapper() {} ++}; ++ ++template ++struct auto_array_wrapper_impl : public auto_array_wrapper { ++ auto_array_wrapper_impl() {} ++ ++ explicit auto_array_wrapper_impl(uint32_t size) ++ : ar(size) ++ {} ++ ++ void push(void * elements, size_t length) override { ++ ar.push(static_cast(elements), length); + } +- ~auto_lock() +- { +- lock.leave(); ++ ++ size_t length() override { ++ return ar.length(); ++ } ++ ++ void push_silence(size_t length) override { ++ ar.push_silence(length); ++ } ++ ++ bool pop(size_t length) override { ++ return ar.pop(nullptr, length); ++ } ++ ++ void * data() override { ++ return ar.data(); ++ } ++ ++ void * end() override { ++ return ar.end(); ++ } ++ ++ void clear() override { ++ ar.clear(); ++ } ++ ++ bool reserve(size_t capacity) override { ++ return ar.reserve(capacity); + } ++ ++ void set_length(size_t length) override { ++ ar.set_length(length); ++ } ++ ++ ~auto_array_wrapper_impl() { ++ ar.clear(); ++ } ++ + private: +- owned_critical_section & lock; ++ auto_array ar; + }; + ++extern "C" { ++ size_t cubeb_sample_size(cubeb_sample_format format); ++} ++ ++using auto_lock = std::lock_guard; ++#endif // __cplusplus ++ + #endif /* CUBEB_UTILS */ +diff --git a/media/libcubeb/src/cubeb_utils_unix.h b/media/libcubeb/src/cubeb_utils_unix.h +index 80219d58b..4876d015f 100644 +--- a/media/libcubeb/src/cubeb_utils_unix.h ++++ b/media/libcubeb/src/cubeb_utils_unix.h +@@ -48,7 +48,7 @@ public: + #endif + } + +- void enter() ++ void lock() + { + #ifndef NDEBUG + int r = +@@ -59,7 +59,7 @@ public: + #endif + } + +- void leave() ++ void unlock() + { + #ifndef NDEBUG + int r = +diff --git a/media/libcubeb/src/cubeb_utils_win.h b/media/libcubeb/src/cubeb_utils_win.h +index 2b094cd93..0112ad6d3 100644 +--- a/media/libcubeb/src/cubeb_utils_win.h ++++ b/media/libcubeb/src/cubeb_utils_win.h +@@ -29,7 +29,7 @@ public: + DeleteCriticalSection(&critical_section); + } + +- void enter() ++ void lock() + { + EnterCriticalSection(&critical_section); + #ifndef NDEBUG +@@ -38,7 +38,7 @@ public: + #endif + } + +- void leave() ++ void unlock() + { + #ifndef NDEBUG + /* GetCurrentThreadId cannot return 0: it is not a the valid thread id */ +diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp +index e88d6becd..6acf1c1cc 100644 +--- a/media/libcubeb/src/cubeb_wasapi.cpp ++++ b/media/libcubeb/src/cubeb_wasapi.cpp +@@ -4,6 +4,7 @@ + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ ++#define _WIN32_WINNT 0x0600 + #define NOMINMAX + + #include +@@ -23,20 +24,61 @@ + #include + #include + #include ++#include + + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" ++#include "cubeb_mixer.h" + #include "cubeb_resampler.h" ++#include "cubeb_strings.h" + #include "cubeb_utils.h" + +-/* devicetopology.h missing in MinGW. */ +-#ifndef __devicetopology_h__ +-#include "cubeb_devicetopology.h" ++// Windows 10 exposes the IAudioClient3 interface to create low-latency streams. ++// Copy the interface definition from audioclient.h here to make the code simpler ++// and so that we can still access IAudioClient3 via COM if cubeb was compiled ++// against an older SDK. ++#ifndef __IAudioClient3_INTERFACE_DEFINED__ ++#define __IAudioClient3_INTERFACE_DEFINED__ ++MIDL_INTERFACE("7ED4EE07-8E67-4CD4-8C1A-2B7A5987AD42") ++IAudioClient3 : public IAudioClient ++{ ++public: ++ virtual HRESULT STDMETHODCALLTYPE GetSharedModeEnginePeriod( ++ /* [annotation][in] */ ++ _In_ const WAVEFORMATEX *pFormat, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pDefaultPeriodInFrames, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pFundamentalPeriodInFrames, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pMinPeriodInFrames, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pMaxPeriodInFrames) = 0; ++ ++ virtual HRESULT STDMETHODCALLTYPE GetCurrentSharedModeEnginePeriod( ++ /* [unique][annotation][out] */ ++ _Out_ WAVEFORMATEX **ppFormat, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pCurrentPeriodInFrames) = 0; ++ ++ virtual HRESULT STDMETHODCALLTYPE InitializeSharedAudioStream( ++ /* [annotation][in] */ ++ _In_ DWORD StreamFlags, ++ /* [annotation][in] */ ++ _In_ UINT32 PeriodInFrames, ++ /* [annotation][in] */ ++ _In_ const WAVEFORMATEX *pFormat, ++ /* [annotation][in] */ ++ _In_opt_ LPCGUID AudioSessionGuid) = 0; ++}; ++#ifdef __CRT_UUID_DECL ++// Required for MinGW ++__CRT_UUID_DECL(IAudioClient3, 0x7ED4EE07, 0x8E67, 0x4CD4, 0x8C, 0x1A, 0x2B, 0x7A, 0x59, 0x87, 0xAD, 0x42) + #endif +- +-/* Taken from winbase.h, Not in MinGW. */ +-#ifndef STACK_SIZE_PARAM_IS_A_RESERVATION +-#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000 // Threads only ++#endif ++// Copied from audioclient.h in the Windows 10 SDK ++#ifndef AUDCLNT_E_ENGINE_PERIODICITY_LOCKED ++#define AUDCLNT_E_ENGINE_PERIODICITY_LOCKED AUDCLNT_ERR(0x028) + #endif + + #ifndef PKEY_Device_FriendlyName +@@ -47,6 +89,15 @@ DEFINE_PROPERTYKEY(PKEY_Device_InstanceId, 0x78c34fc8, 0x104a, 0x4aca, 0x9e + #endif + + namespace { ++struct com_heap_ptr_deleter { ++ void operator()(void * ptr) const noexcept { ++ CoTaskMemFree(ptr); ++ } ++}; ++ ++template ++using com_heap_ptr = std::unique_ptr; ++ + template + constexpr size_t + ARRAY_LENGTH(T(&)[N]) +@@ -54,51 +105,83 @@ ARRAY_LENGTH(T(&)[N]) + return N; + } + +-void +-SafeRelease(HANDLE handle) +-{ +- if (handle) { +- CloseHandle(handle); +- } +-} ++template ++class no_addref_release : public T { ++ ULONG STDMETHODCALLTYPE AddRef() = 0; ++ ULONG STDMETHODCALLTYPE Release() = 0; ++}; + + template +-void SafeRelease(T * ptr) +-{ +- if (ptr) { +- ptr->Release(); ++class com_ptr { ++public: ++ com_ptr() noexcept = default; ++ ++ com_ptr(com_ptr const & other) noexcept = delete; ++ com_ptr & operator=(com_ptr const & other) noexcept = delete; ++ T ** operator&() const noexcept = delete; ++ ++ ~com_ptr() noexcept { ++ release(); + } +-} + +-struct auto_com { +- auto_com() { +- result = CoInitializeEx(NULL, COINIT_MULTITHREADED); +- } +- ~auto_com() { +- if (result == RPC_E_CHANGED_MODE) { +- // This is not an error, COM was not initialized by this function, so it is +- // not necessary to uninit it. +- LOG("COM was already initialized in STA."); +- } else if (result == S_FALSE) { +- // This is not an error. We are allowed to call CoInitializeEx more than +- // once, as long as it is matches by an CoUninitialize call. +- // We do that in the dtor which is guaranteed to be called. +- LOG("COM was already initialized in MTA"); +- } +- if (SUCCEEDED(result)) { +- CoUninitialize(); ++ com_ptr(com_ptr && other) noexcept ++ : ptr(other.ptr) ++ { ++ other.ptr = nullptr; ++ } ++ ++ com_ptr & operator=(com_ptr && other) noexcept { ++ if (ptr != other.ptr) { ++ release(); ++ ptr = other.ptr; ++ other.ptr = nullptr; + } ++ return *this; ++ } ++ ++ explicit operator bool() const noexcept { ++ return nullptr != ptr; + } +- bool ok() { +- return result == RPC_E_CHANGED_MODE || SUCCEEDED(result); ++ ++ no_addref_release * operator->() const noexcept { ++ return static_cast *>(ptr); + } ++ ++ T * get() const noexcept { ++ return ptr; ++ } ++ ++ T ** receive() noexcept { ++ XASSERT(ptr == nullptr); ++ return &ptr; ++ } ++ ++ void ** receive_vpp() noexcept { ++ return reinterpret_cast(receive()); ++ } ++ ++ com_ptr & operator=(std::nullptr_t) noexcept { ++ release(); ++ return *this; ++ } ++ ++ void reset(T * p = nullptr) noexcept { ++ release(); ++ ptr = p; ++ } ++ + private: +- HRESULT result; +-}; ++ void release() noexcept { ++ T * temp = ptr; + +-typedef HANDLE (WINAPI *set_mm_thread_characteristics_function)( +- const char * TaskName, LPDWORD TaskIndex); +-typedef BOOL (WINAPI *revert_mm_thread_characteristics_function)(HANDLE handle); ++ if (temp) { ++ ptr = nullptr; ++ temp->Release(); ++ } ++ } ++ ++ T * ptr = nullptr; ++}; + + extern cubeb_ops const wasapi_ops; + +@@ -106,19 +189,28 @@ int wasapi_stream_stop(cubeb_stream * stm); + int wasapi_stream_start(cubeb_stream * stm); + void close_wasapi_stream(cubeb_stream * stm); + int setup_wasapi_stream(cubeb_stream * stm); +-static char * wstr_to_utf8(const wchar_t * str); +-static std::unique_ptr utf8_to_wstr(char* str); ++ERole pref_to_role(cubeb_stream_prefs param); ++static char const * wstr_to_utf8(wchar_t const * str); ++static std::unique_ptr utf8_to_wstr(char const * str); + + } + +-struct cubeb +-{ +- cubeb_ops const * ops; +- /* Library dynamically opened to increase the render thread priority, and +- the two function pointers we need. */ +- HMODULE mmcss_module; +- set_mm_thread_characteristics_function set_mm_thread_characteristics; +- revert_mm_thread_characteristics_function revert_mm_thread_characteristics; ++class wasapi_collection_notification_client; ++class monitor_device_notifications; ++ ++struct cubeb { ++ cubeb_ops const * ops = &wasapi_ops; ++ cubeb_strings * device_ids; ++ /* Device enumerator to get notifications when the ++ device collection change. */ ++ com_ptr device_collection_enumerator; ++ com_ptr collection_notification_client; ++ /* Collection changed for input (capture) devices. */ ++ cubeb_device_collection_changed_callback input_collection_changed_callback = nullptr; ++ void * input_collection_changed_user_ptr = nullptr; ++ /* Collection changed for output (render) devices. */ ++ cubeb_device_collection_changed_callback output_collection_changed_callback = nullptr; ++ void * output_collection_changed_user_ptr = nullptr; + }; + + class wasapi_endpoint_notification_client; +@@ -132,27 +224,35 @@ class wasapi_endpoint_notification_client; + */ + typedef bool (*wasapi_refill_callback)(cubeb_stream * stm); + +-struct cubeb_stream +-{ +- cubeb * context; ++struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ ++ cubeb * context = nullptr; ++ void * user_ptr = nullptr; ++ /**/ ++ + /* Mixer pameters. We need to convert the input stream to this + samplerate/channel layout, as WASAPI does not resample nor upmix + itself. */ +- cubeb_stream_params input_mix_params; +- cubeb_stream_params output_mix_params; ++ cubeb_stream_params input_mix_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ cubeb_stream_params output_mix_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; + /* Stream parameters. This is what the client requested, + * and what will be presented in the callback. */ +- cubeb_stream_params input_stream_params; +- cubeb_stream_params output_stream_params; ++ cubeb_stream_params input_stream_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ cubeb_stream_params output_stream_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ /* A MMDevice role for this stream: either communication or console here. */ ++ ERole role; + /* The input and output device, or NULL for default. */ +- cubeb_devid input_device; +- cubeb_devid output_device; ++ std::unique_ptr input_device; ++ std::unique_ptr output_device; + /* The latency initially requested for this stream, in frames. */ +- unsigned latency; +- cubeb_state_callback state_callback; +- cubeb_data_callback data_callback; +- wasapi_refill_callback refill_callback; +- void * user_ptr; ++ unsigned latency = 0; ++ cubeb_state_callback state_callback = nullptr; ++ cubeb_data_callback data_callback = nullptr; ++ wasapi_refill_callback refill_callback = nullptr; ++ /* True when a loopback device is requested with no output device. In this ++ case a dummy output device is opened to drive the loopback, but should not ++ be exposed. */ ++ bool has_dummy_output = false; + /* Lifetime considerations: + - client, render_client, audio_clock and audio_stream_volume are interface + pointer to the IAudioClient. +@@ -160,70 +260,324 @@ struct cubeb_stream + mix_buffer are the same as the cubeb_stream instance. */ + + /* Main handle on the WASAPI stream. */ +- IAudioClient * output_client; ++ com_ptr output_client; + /* Interface pointer to use the event-driven interface. */ +- IAudioRenderClient * render_client; ++ com_ptr render_client; + /* Interface pointer to use the volume facilities. */ +- IAudioStreamVolume * audio_stream_volume; ++ com_ptr audio_stream_volume; + /* Interface pointer to use the stream audio clock. */ +- IAudioClock * audio_clock; ++ com_ptr audio_clock; + /* Frames written to the stream since it was opened. Reset on device + change. Uses mix_params.rate. */ +- UINT64 frames_written; ++ UINT64 frames_written = 0; + /* Frames written to the (logical) stream since it was first + created. Updated on device change. Uses stream_params.rate. */ +- UINT64 total_frames_written; ++ UINT64 total_frames_written = 0; + /* Last valid reported stream position. Used to ensure the position + reported by stream_get_position increases monotonically. */ +- UINT64 prev_position; ++ UINT64 prev_position = 0; + /* Device enumerator to be able to be notified when the default + device change. */ +- IMMDeviceEnumerator * device_enumerator; ++ com_ptr device_enumerator; + /* Device notification client, to be able to be notified when the default + audio device changes and route the audio to the new default audio output + device */ +- wasapi_endpoint_notification_client * notification_client; ++ com_ptr notification_client; + /* Main andle to the WASAPI capture stream. */ +- IAudioClient * input_client; ++ com_ptr input_client; + /* Interface to use the event driven capture interface */ +- IAudioCaptureClient * capture_client; ++ com_ptr capture_client; + /* This event is set by the stream_stop and stream_destroy + function, so the render loop can exit properly. */ +- HANDLE shutdown_event; ++ HANDLE shutdown_event = 0; + /* Set by OnDefaultDeviceChanged when a stream reconfiguration is required. + The reconfiguration is handled by the render loop thread. */ +- HANDLE reconfigure_event; ++ HANDLE reconfigure_event = 0; + /* This is set by WASAPI when we should refill the stream. */ +- HANDLE refill_event; ++ HANDLE refill_event = 0; + /* This is set by WASAPI when we should read from the input stream. In + * practice, we read from the input stream in the output callback, so + * this is not used, but it is necessary to start getting input data. */ +- HANDLE input_available_event; ++ HANDLE input_available_event = 0; + /* Each cubeb_stream has its own thread. */ +- HANDLE thread; ++ HANDLE thread = 0; + /* The lock protects all members that are touched by the render thread or + change during a device reset, including: audio_clock, audio_stream_volume, + client, frames_written, mix_params, total_frames_written, prev_position. */ + owned_critical_section stream_reset_lock; + /* Maximum number of frames that can be passed down in a callback. */ +- uint32_t input_buffer_frame_count; ++ uint32_t input_buffer_frame_count = 0; + /* Maximum number of frames that can be requested in a callback. */ +- uint32_t output_buffer_frame_count; ++ uint32_t output_buffer_frame_count = 0; + /* Resampler instance. Resampling will only happen if necessary. */ +- cubeb_resampler * resampler; +- /* A buffer for up/down mixing multi-channel audio. */ +- float * mix_buffer; ++ std::unique_ptr resampler = { nullptr, cubeb_resampler_destroy }; ++ /* Mixer interfaces */ ++ std::unique_ptr output_mixer = { nullptr, cubeb_mixer_destroy }; ++ std::unique_ptr input_mixer = { nullptr, cubeb_mixer_destroy }; ++ /* A buffer for up/down mixing multi-channel audio output. */ ++ std::vector mix_buffer; + /* WASAPI input works in "packets". We re-linearize the audio packets + * into this buffer before handing it to the resampler. */ +- auto_array linear_input_buffer; ++ std::unique_ptr linear_input_buffer; ++ /* Bytes per sample. This multiplied by the number of channels is the number ++ * of bytes per frame. */ ++ size_t bytes_per_sample = 0; ++ /* WAVEFORMATEXTENSIBLE sub-format: either PCM or float. */ ++ GUID waveformatextensible_sub_format = GUID_NULL; + /* Stream volume. Set via stream_set_volume and used to reset volume on + device changes. */ +- float volume; ++ float volume = 1.0; + /* True if the stream is draining. */ +- bool draining; ++ bool draining = false; + /* True when we've destroyed the stream. This pointer is leaked on stream + * destruction if we could not join the thread. */ +- std::atomic*> emergency_bailout; ++ std::atomic*> emergency_bailout { nullptr }; ++ /* Synchronizes render thread start to ensure safe access to emergency_bailout. */ ++ HANDLE thread_ready_event = 0; ++}; ++ ++class monitor_device_notifications { ++public: ++ monitor_device_notifications(cubeb * context) ++ : cubeb_context(context) ++ { ++ create_thread(); ++ } ++ ++ ~monitor_device_notifications() ++ { ++ SetEvent(shutdown); ++ WaitForSingleObject(thread, INFINITE); ++ CloseHandle(thread); ++ ++ CloseHandle(input_changed); ++ CloseHandle(output_changed); ++ CloseHandle(shutdown); ++ } ++ ++ void notify(EDataFlow flow) ++ { ++ XASSERT(cubeb_context); ++ if (flow == eCapture && cubeb_context->input_collection_changed_callback) { ++ bool res = SetEvent(input_changed); ++ if (!res) { ++ LOG("Failed to set input changed event"); ++ } ++ return; ++ } ++ if (flow == eRender && cubeb_context->output_collection_changed_callback) { ++ bool res = SetEvent(output_changed); ++ if (!res) { ++ LOG("Failed to set output changed event"); ++ } ++ } ++ } ++private: ++ static unsigned int __stdcall ++ thread_proc(LPVOID args) ++ { ++ XASSERT(args); ++ static_cast(args) ++ ->notification_thread_loop(); ++ return 0; ++ } ++ ++ void notification_thread_loop() ++ { ++ struct auto_com { ++ auto_com() { ++ HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); ++ XASSERT(SUCCEEDED(hr)); ++ } ++ ~auto_com() { ++ CoUninitialize(); ++ } ++ } com; ++ ++ HANDLE wait_array[3] = { ++ input_changed, ++ output_changed, ++ shutdown, ++ }; ++ ++ while (true) { ++ Sleep(200); ++ ++ DWORD wait_result = WaitForMultipleObjects(ARRAY_LENGTH(wait_array), ++ wait_array, ++ FALSE, ++ INFINITE); ++ if (wait_result == WAIT_OBJECT_0) { // input changed ++ cubeb_context->input_collection_changed_callback(cubeb_context, ++ cubeb_context->input_collection_changed_user_ptr); ++ } else if (wait_result == WAIT_OBJECT_0 + 1) { // output changed ++ cubeb_context->output_collection_changed_callback(cubeb_context, ++ cubeb_context->output_collection_changed_user_ptr); ++ } else if (wait_result == WAIT_OBJECT_0 + 2) { // shutdown ++ break; ++ } else { ++ LOG("Unexpected result %lu", wait_result); ++ } ++ } // loop ++ } ++ ++ void create_thread() ++ { ++ output_changed = CreateEvent(nullptr, 0, 0, nullptr); ++ if (!output_changed) { ++ LOG("Failed to create output changed event."); ++ return; ++ } ++ ++ input_changed = CreateEvent(nullptr, 0, 0, nullptr); ++ if (!input_changed) { ++ LOG("Failed to create input changed event."); ++ return; ++ } ++ ++ shutdown = CreateEvent(nullptr, 0, 0, nullptr); ++ if (!shutdown) { ++ LOG("Failed to create shutdown event."); ++ return; ++ } ++ ++ thread = (HANDLE) _beginthreadex(nullptr, ++ 256 * 1024, ++ thread_proc, ++ this, ++ STACK_SIZE_PARAM_IS_A_RESERVATION, ++ nullptr); ++ if (!thread) { ++ LOG("Failed to create thread."); ++ return; ++ } ++ } ++ ++ HANDLE thread = INVALID_HANDLE_VALUE; ++ HANDLE output_changed = INVALID_HANDLE_VALUE; ++ HANDLE input_changed = INVALID_HANDLE_VALUE; ++ HANDLE shutdown = INVALID_HANDLE_VALUE; ++ ++ cubeb * cubeb_context = nullptr; ++}; ++ ++class wasapi_collection_notification_client : public IMMNotificationClient ++{ ++public: ++ /* The implementation of MSCOM was copied from MSDN. */ ++ ULONG STDMETHODCALLTYPE ++ AddRef() ++ { ++ return InterlockedIncrement(&ref_count); ++ } ++ ++ ULONG STDMETHODCALLTYPE ++ Release() ++ { ++ ULONG ulRef = InterlockedDecrement(&ref_count); ++ if (0 == ulRef) { ++ delete this; ++ } ++ return ulRef; ++ } ++ ++ HRESULT STDMETHODCALLTYPE ++ QueryInterface(REFIID riid, VOID **ppvInterface) ++ { ++ if (__uuidof(IUnknown) == riid) { ++ AddRef(); ++ *ppvInterface = (IUnknown*)this; ++ } else if (__uuidof(IMMNotificationClient) == riid) { ++ AddRef(); ++ *ppvInterface = (IMMNotificationClient*)this; ++ } else { ++ *ppvInterface = NULL; ++ return E_NOINTERFACE; ++ } ++ return S_OK; ++ } ++ ++ wasapi_collection_notification_client(cubeb * context) ++ : ref_count(1) ++ , cubeb_context(context) ++ , monitor_notifications(context) ++ { ++ XASSERT(cubeb_context); ++ } ++ ++ virtual ~wasapi_collection_notification_client() ++ { } ++ ++ HRESULT STDMETHODCALLTYPE ++ OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR device_id) ++ { ++ LOG("collection: Audio device default changed, id = %S.", device_id); ++ return S_OK; ++ } ++ ++ /* The remaining methods are not implemented, they simply log when called (if ++ log is enabled), for debugging. */ ++ HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR device_id) ++ { ++ LOG("collection: Audio device added."); ++ return S_OK; ++ }; ++ ++ HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR device_id) ++ { ++ LOG("collection: Audio device removed."); ++ return S_OK; ++ } ++ ++ HRESULT STDMETHODCALLTYPE ++ OnDeviceStateChanged(LPCWSTR device_id, DWORD new_state) ++ { ++ XASSERT(cubeb_context->output_collection_changed_callback || ++ cubeb_context->input_collection_changed_callback); ++ LOG("collection: Audio device state changed, id = %S, state = %lu.", device_id, new_state); ++ EDataFlow flow; ++ HRESULT hr = GetDataFlow(device_id, &flow); ++ if (FAILED(hr)) { ++ return hr; ++ } ++ monitor_notifications.notify(flow); ++ return S_OK; ++ } ++ ++ HRESULT STDMETHODCALLTYPE ++ OnPropertyValueChanged(LPCWSTR device_id, const PROPERTYKEY key) ++ { ++ //Audio device property value changed. ++ return S_OK; ++ } ++ ++private: ++ HRESULT GetDataFlow(LPCWSTR device_id, EDataFlow * flow) ++ { ++ com_ptr device; ++ com_ptr endpoint; ++ ++ HRESULT hr = cubeb_context->device_collection_enumerator ++ ->GetDevice(device_id, device.receive()); ++ if (FAILED(hr)) { ++ LOG("collection: Could not get device: %lx", hr); ++ return hr; ++ } ++ ++ hr = device->QueryInterface(IID_PPV_ARGS(endpoint.receive())); ++ if (FAILED(hr)) { ++ LOG("collection: Could not get endpoint: %lx", hr); ++ return hr; ++ } ++ ++ return endpoint->GetDataFlow(flow); ++ } ++ ++ /* refcount for this instance, necessary to implement MSCOM semantics. */ ++ LONG ref_count; ++ ++ cubeb * cubeb_context = nullptr; ++ monitor_device_notifications monitor_notifications; + }; + + class wasapi_endpoint_notification_client : public IMMNotificationClient +@@ -262,9 +616,10 @@ public: + return S_OK; + } + +- wasapi_endpoint_notification_client(HANDLE event) ++ wasapi_endpoint_notification_client(HANDLE event, ERole role) + : ref_count(1) + , reconfigure_event(event) ++ , role(role) + { } + + virtual ~wasapi_endpoint_notification_client() +@@ -273,16 +628,16 @@ public: + HRESULT STDMETHODCALLTYPE + OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR device_id) + { +- LOG("Audio device default changed."); ++ LOG("endpoint: Audio device default changed."); + + /* we only support a single stream type for now. */ +- if (flow != eRender && role != eConsole) { ++ if (flow != eRender && role != this->role) { + return S_OK; + } + + BOOL ok = SetEvent(reconfigure_event); + if (!ok) { +- LOG("SetEvent on reconfigure_event failed: %x", GetLastError()); ++ LOG("endpoint: SetEvent on reconfigure_event failed: %lx", GetLastError()); + } + + return S_OK; +@@ -292,36 +647,54 @@ public: + log is enabled), for debugging. */ + HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR device_id) + { +- LOG("Audio device added."); ++ LOG("endpoint: Audio device added."); + return S_OK; + }; + + HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR device_id) + { +- LOG("Audio device removed."); ++ LOG("endpoint: Audio device removed."); + return S_OK; + } + + HRESULT STDMETHODCALLTYPE + OnDeviceStateChanged(LPCWSTR device_id, DWORD new_state) + { +- LOG("Audio device state changed."); ++ LOG("endpoint: Audio device state changed."); + return S_OK; + } + + HRESULT STDMETHODCALLTYPE + OnPropertyValueChanged(LPCWSTR device_id, const PROPERTYKEY key) + { +- LOG("Audio device property value changed."); ++ //Audio device property value changed. + return S_OK; + } + private: + /* refcount for this instance, necessary to implement MSCOM semantics. */ + LONG ref_count; + HANDLE reconfigure_event; ++ ERole role; + }; + + namespace { ++ ++char const * ++intern_device_id(cubeb * ctx, wchar_t const * id) ++{ ++ XASSERT(id); ++ ++ char const * tmp = wstr_to_utf8(id); ++ if (!tmp) ++ return nullptr; ++ ++ char const * interned = cubeb_strings_intern(ctx->device_ids, tmp); ++ ++ free((void *) tmp); ++ ++ return interned; ++} ++ + bool has_input(cubeb_stream * stm) + { + return stm->input_stream_params.rate != 0; +@@ -332,22 +705,33 @@ bool has_output(cubeb_stream * stm) + return stm->output_stream_params.rate != 0; + } + +-bool should_upmix(cubeb_stream_params & stream, cubeb_stream_params & mixer) ++double stream_to_mix_samplerate_ratio(cubeb_stream_params & stream, cubeb_stream_params & mixer) + { +- return mixer.channels > stream.channels; ++ return double(stream.rate) / mixer.rate; + } + +-bool should_downmix(cubeb_stream_params & stream, cubeb_stream_params & mixer) +-{ +- return mixer.channels < stream.channels; +-} ++/* Convert the channel layout into the corresponding KSAUDIO_CHANNEL_CONFIG. ++ See more: https://msdn.microsoft.com/en-us/library/windows/hardware/ff537083(v=vs.85).aspx */ + +-double stream_to_mix_samplerate_ratio(cubeb_stream_params & stream, cubeb_stream_params & mixer) ++cubeb_channel_layout ++mask_to_channel_layout(WAVEFORMATEX const * fmt) + { +- return double(stream.rate) / mixer.rate; ++ cubeb_channel_layout mask = 0; ++ ++ if (fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { ++ WAVEFORMATEXTENSIBLE const * ext = reinterpret_cast(fmt); ++ mask = ext->dwChannelMask; ++ } else if (fmt->wFormatTag == WAVE_FORMAT_PCM || ++ fmt->wFormatTag == WAVE_FORMAT_IEEE_FLOAT) { ++ if (fmt->nChannels == 1) { ++ mask = CHANNEL_FRONT_CENTER; ++ } else if (fmt->nChannels == 2) { ++ mask = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT; ++ } ++ } ++ return mask; + } + +- + uint32_t + get_rate(cubeb_stream * stm) + { +@@ -356,99 +740,21 @@ get_rate(cubeb_stream * stm) + } + + uint32_t +-ms_to_hns(uint32_t ms) +-{ +- return ms * 10000; +-} +- +-uint32_t +-hns_to_ms(REFERENCE_TIME hns) +-{ +- return static_cast(hns / 10000); +-} +- +-double +-hns_to_s(REFERENCE_TIME hns) ++hns_to_frames(uint32_t rate, REFERENCE_TIME hns) + { +- return static_cast(hns) / 10000000; ++ return std::ceil((hns - 1) / 10000000.0 * rate); + } + + uint32_t + hns_to_frames(cubeb_stream * stm, REFERENCE_TIME hns) + { +- return hns_to_ms(hns * get_rate(stm)) / 1000; +-} +- +-uint32_t +-hns_to_frames(uint32_t rate, REFERENCE_TIME hns) +-{ +- return hns_to_ms(hns * rate) / 1000; ++ return hns_to_frames(get_rate(stm), hns); + } + + REFERENCE_TIME + frames_to_hns(cubeb_stream * stm, uint32_t frames) + { +- return frames * 1000 / get_rate(stm); +-} +- +-/* Upmix function, copies a mono channel into L and R */ +-template +-void +-mono_to_stereo(T * in, long insamples, T * out, int32_t out_channels) +-{ +- for (int i = 0, j = 0; i < insamples; ++i, j += out_channels) { +- out[j] = out[j + 1] = in[i]; +- } +-} +- +-template +-void +-upmix(T * in, long inframes, T * out, int32_t in_channels, int32_t out_channels) +-{ +- XASSERT(out_channels >= in_channels && in_channels > 0); +- +- /* Either way, if we have 2 or more channels, the first two are L and R. */ +- /* If we are playing a mono stream over stereo speakers, copy the data over. */ +- if (in_channels == 1 && out_channels >= 2) { +- mono_to_stereo(in, inframes, out, out_channels); +- } else { +- /* Copy through. */ +- for (int i = 0, o = 0; i < inframes * in_channels; +- i += in_channels, o += out_channels) { +- for (int j = 0; j < in_channels; ++j) { +- out[o + j] = in[i + j]; +- } +- } +- } +- +- /* Check if more channels. */ +- if (out_channels <= 2) { +- return; +- } +- +- /* Put silence in remaining channels. */ +- for (long i = 0, o = 0; i < inframes; ++i, o += out_channels) { +- for (int j = 2; j < out_channels; ++j) { +- out[o + j] = 0.0; +- } +- } +-} +- +-template +-void +-downmix(T * in, long inframes, T * out, int32_t in_channels, int32_t out_channels) +-{ +- XASSERT(in_channels >= out_channels); +- /* We could use a downmix matrix here, applying mixing weight based on the +- channel, but directsound and winmm simply drop the channels that cannot be +- rendered by the hardware, so we do the same for consistency. */ +- long out_index = 0; +- for (long i = 0; i < inframes * in_channels; i += in_channels) { +- for (int j = 0; j < out_channels; ++j) { +- out[out_index + j] = in[i + j]; +- } +- out_index += out_channels; +- } ++ return std::ceil(frames * 10000000.0 / get_rate(stm)); + } + + /* This returns the size of a frame in the stream, before the eventual upmix +@@ -456,30 +762,31 @@ downmix(T * in, long inframes, T * out, int32_t in_channels, int32_t out_channel + static size_t + frames_to_bytes_before_mix(cubeb_stream * stm, size_t frames) + { +- size_t stream_frame_size = stm->output_stream_params.channels * sizeof(float); +- return stream_frame_size * frames; ++ // This is called only when we has a output client. ++ XASSERT(has_output(stm)); ++ return stm->output_stream_params.channels * stm->bytes_per_sample * frames; + } + + /* This function handles the processing of the input and output audio, + * converting it to rate and channel layout specified at initialization. + * It then calls the data callback, via the resampler. */ + long +-refill(cubeb_stream * stm, float * input_buffer, long input_frames_count, +- float * output_buffer, long output_frames_needed) ++refill(cubeb_stream * stm, void * input_buffer, long input_frames_count, ++ void * output_buffer, long output_frames_needed) + { ++ XASSERT(!stm->draining); + /* If we need to upmix after resampling, resample into the mix buffer to +- avoid a copy. */ +- float * dest = nullptr; +- if (has_output(stm)) { +- if (should_upmix(stm->output_stream_params, stm->output_mix_params) || +- should_downmix(stm->output_stream_params, stm->output_mix_params)) { +- dest = stm->mix_buffer; ++ avoid a copy. Avoid exposing output if it is a dummy stream. */ ++ void * dest = nullptr; ++ if (has_output(stm) && !stm->has_dummy_output) { ++ if (stm->output_mixer) { ++ dest = stm->mix_buffer.data(); + } else { + dest = output_buffer; + } + } + +- long out_frames = cubeb_resampler_fill(stm->resampler, ++ long out_frames = cubeb_resampler_fill(stm->resampler.get(), + input_buffer, + &input_frames_count, + dest, +@@ -492,47 +799,51 @@ refill(cubeb_stream * stm, float * input_buffer, long input_frames_count, + stm->frames_written += out_frames; + } + +- /* Go in draining mode if we got fewer frames than requested. */ +- if (out_frames < output_frames_needed) { ++ /* Go in draining mode if we got fewer frames than requested. If the stream ++ has no output we still expect the callback to return number of frames read ++ from input, otherwise we stop. */ ++ if ((out_frames < output_frames_needed) || ++ (!has_output(stm) && out_frames < input_frames_count)) { + LOG("start draining."); + stm->draining = true; + } + + /* If this is not true, there will be glitches. + It is alright to have produced less frames if we are draining, though. */ +- XASSERT(out_frames == output_frames_needed || stm->draining || !has_output(stm)); +- +- if (has_output(stm)) { +- if (should_upmix(stm->output_stream_params, stm->output_mix_params)) { +- upmix(dest, out_frames, output_buffer, +- stm->output_stream_params.channels, stm->output_mix_params.channels); +- } else if (should_downmix(stm->output_stream_params, stm->output_mix_params)) { +- downmix(dest, out_frames, output_buffer, +- stm->output_stream_params.channels, stm->output_mix_params.channels); ++ XASSERT(out_frames == output_frames_needed || stm->draining || !has_output(stm) || stm->has_dummy_output); ++ ++ // We don't bother mixing dummy output as it will be silenced, otherwise mix output if needed ++ if (!stm->has_dummy_output && has_output(stm) && stm->output_mixer) { ++ XASSERT(dest == stm->mix_buffer.data()); ++ size_t dest_size = ++ out_frames * stm->output_stream_params.channels * stm->bytes_per_sample; ++ XASSERT(dest_size <= stm->mix_buffer.size()); ++ size_t output_buffer_size = ++ out_frames * stm->output_mix_params.channels * stm->bytes_per_sample; ++ int ret = cubeb_mixer_mix(stm->output_mixer.get(), ++ out_frames, ++ dest, ++ dest_size, ++ output_buffer, ++ output_buffer_size); ++ if (ret < 0) { ++ LOG("Error remixing content (%d)", ret); + } + } + + return out_frames; + } + ++int wasapi_stream_reset_default_device(cubeb_stream * stm); ++ + /* This helper grabs all the frames available from a capture client, put them in + * linear_input_buffer. linear_input_buffer should be cleared before the +- * callback exits. */ ++ * callback exits. This helper does not work with exclusive mode streams. */ + bool get_input_buffer(cubeb_stream * stm) + { +- HRESULT hr; +- UINT32 padding_in; +- + XASSERT(has_input(stm)); + +- hr = stm->input_client->GetCurrentPadding(&padding_in); +- if (FAILED(hr)) { +- LOG("Failed to get padding"); +- return false; +- } +- XASSERT(padding_in <= stm->input_buffer_frame_count); +- UINT32 total_available_input = padding_in; +- ++ HRESULT hr; + BYTE * input_packet = NULL; + DWORD flags; + UINT64 dev_pos; +@@ -540,73 +851,97 @@ bool get_input_buffer(cubeb_stream * stm) + /* Get input packets until we have captured enough frames, and put them in a + * contiguous buffer. */ + uint32_t offset = 0; +- while (offset != total_available_input) { +- hr = stm->capture_client->GetNextPacketSize(&next); ++ // If the input stream is event driven we should only ever expect to read a ++ // single packet each time. However, if we're pulling from the stream we may ++ // need to grab multiple packets worth of frames that have accumulated (so ++ // need a loop). ++ for (hr = stm->capture_client->GetNextPacketSize(&next); ++ next > 0; ++ hr = stm->capture_client->GetNextPacketSize(&next)) { ++ if (hr == AUDCLNT_E_DEVICE_INVALIDATED) { ++ // Application can recover from this error. More info ++ // https://msdn.microsoft.com/en-us/library/windows/desktop/dd316605(v=vs.85).aspx ++ LOG("Device invalidated error, reset default device"); ++ wasapi_stream_reset_default_device(stm); ++ return true; ++ } ++ + if (FAILED(hr)) { +- LOG("cannot get next packet size: %x", hr); ++ LOG("cannot get next packet size: %lx", hr); + return false; + } +- /* This can happen if the capture stream has stopped. Just return in this +- * case. */ +- if (!next) { +- break; +- } + +- UINT32 packet_size; ++ UINT32 frames; + hr = stm->capture_client->GetBuffer(&input_packet, +- &packet_size, ++ &frames, + &flags, + &dev_pos, + NULL); + if (FAILED(hr)) { +- LOG("GetBuffer failed for capture: %x", hr); ++ LOG("GetBuffer failed for capture: %lx", hr); + return false; + } +- XASSERT(packet_size == next); ++ XASSERT(frames == next); ++ ++ UINT32 input_stream_samples = frames * stm->input_stream_params.channels; ++ // We do not explicitly handle the AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY ++ // flag. There a two primary (non exhaustive) scenarios we anticipate this ++ // flag being set in: ++ // - The first GetBuffer after Start has this flag undefined. In this ++ // case the flag may be set but is meaningless and can be ignored. ++ // - If a glitch is introduced into the input. This should not happen ++ // for event based inputs, and should be mitigated by using a dummy ++ // stream to drive input in the case of input only loopback. Without ++ // a dummy output, input only loopback would glitch on silence. However, ++ // the dummy input should push silence to the loopback and prevent ++ // discontinuities. See https://blogs.msdn.microsoft.com/matthew_van_eerde/2008/12/16/sample-wasapi-loopback-capture-record-what-you-hear/ ++ // As the first scenario can be ignored, and we anticipate the second ++ // scenario is mitigated, we ignore the flag. ++ // For more info: https://msdn.microsoft.com/en-us/library/windows/desktop/dd370859(v=vs.85).aspx, ++ // https://msdn.microsoft.com/en-us/library/windows/desktop/dd371458(v=vs.85).aspx + if (flags & AUDCLNT_BUFFERFLAGS_SILENT) { +- LOG("insert silence: ps=%u", packet_size); +- stm->linear_input_buffer.push_silence(packet_size * stm->input_stream_params.channels); ++ LOG("insert silence: ps=%u", frames); ++ stm->linear_input_buffer->push_silence(input_stream_samples); + } else { +- if (should_upmix(stm->input_mix_params, stm->input_stream_params)) { +- bool ok = stm->linear_input_buffer.reserve(stm->linear_input_buffer.length() + +- packet_size * stm->input_stream_params.channels); +- assert(ok); +- upmix(reinterpret_cast(input_packet), packet_size, +- stm->linear_input_buffer.data() + stm->linear_input_buffer.length(), +- stm->input_mix_params.channels, +- stm->input_stream_params.channels); +- stm->linear_input_buffer.set_length(stm->linear_input_buffer.length() + packet_size * stm->input_stream_params.channels); +- } else if (should_downmix(stm->input_mix_params, stm->input_stream_params)) { +- bool ok = stm->linear_input_buffer.reserve(stm->linear_input_buffer.length() + +- packet_size * stm->input_stream_params.channels); +- assert(ok); +- downmix(reinterpret_cast(input_packet), packet_size, +- stm->linear_input_buffer.data() + stm->linear_input_buffer.length(), +- stm->input_mix_params.channels, +- stm->input_stream_params.channels); +- stm->linear_input_buffer.set_length(stm->linear_input_buffer.length() + packet_size * stm->input_stream_params.channels); ++ if (stm->input_mixer) { ++ bool ok = stm->linear_input_buffer->reserve( ++ stm->linear_input_buffer->length() + input_stream_samples); ++ XASSERT(ok); ++ size_t input_packet_size = ++ frames * stm->input_mix_params.channels * ++ cubeb_sample_size(stm->input_mix_params.format); ++ size_t linear_input_buffer_size = ++ input_stream_samples * ++ cubeb_sample_size(stm->input_stream_params.format); ++ cubeb_mixer_mix(stm->input_mixer.get(), ++ frames, ++ input_packet, ++ input_packet_size, ++ stm->linear_input_buffer->end(), ++ linear_input_buffer_size); ++ stm->linear_input_buffer->set_length( ++ stm->linear_input_buffer->length() + input_stream_samples); + } else { +- stm->linear_input_buffer.push(reinterpret_cast(input_packet), +- packet_size * stm->input_stream_params.channels); ++ stm->linear_input_buffer->push( ++ input_packet, input_stream_samples); + } + } +- hr = stm->capture_client->ReleaseBuffer(packet_size); ++ hr = stm->capture_client->ReleaseBuffer(frames); + if (FAILED(hr)) { + LOG("FAILED to release intput buffer"); + return false; + } +- offset += packet_size; ++ offset += input_stream_samples; + } + +- assert(stm->linear_input_buffer.length() >= total_available_input && +- offset == total_available_input); ++ XASSERT(stm->linear_input_buffer->length() >= offset); + + return true; + } + + /* Get an output buffer from the render_client. It has to be released before + * exiting the callback. */ +-bool get_output_buffer(cubeb_stream * stm, float *& buffer, size_t & frame_count) ++bool get_output_buffer(cubeb_stream * stm, void *& buffer, size_t & frame_count) + { + UINT32 padding_out; + HRESULT hr; +@@ -614,10 +949,19 @@ bool get_output_buffer(cubeb_stream * stm, float *& buffer, size_t & frame_count + XASSERT(has_output(stm)); + + hr = stm->output_client->GetCurrentPadding(&padding_out); ++ if (hr == AUDCLNT_E_DEVICE_INVALIDATED) { ++ // Application can recover from this error. More info ++ // https://msdn.microsoft.com/en-us/library/windows/desktop/dd316605(v=vs.85).aspx ++ LOG("Device invalidated error, reset default device"); ++ wasapi_stream_reset_default_device(stm); ++ return true; ++ } ++ + if (FAILED(hr)) { +- LOG("Failed to get padding: %x", hr); ++ LOG("Failed to get padding: %lx", hr); + return false; + } ++ + XASSERT(padding_out <= stm->output_buffer_frame_count); + + if (stm->draining) { +@@ -639,7 +983,7 @@ bool get_output_buffer(cubeb_stream * stm, float *& buffer, size_t & frame_count + return false; + } + +- buffer = reinterpret_cast(output_buffer); ++ buffer = output_buffer; + + return true; + } +@@ -651,7 +995,7 @@ bool + refill_callback_duplex(cubeb_stream * stm) + { + HRESULT hr; +- float * output_buffer = nullptr; ++ void * output_buffer = nullptr; + size_t output_frames = 0; + size_t input_frames; + bool rv; +@@ -663,7 +1007,7 @@ refill_callback_duplex(cubeb_stream * stm) + return rv; + } + +- input_frames = stm->linear_input_buffer.length() / stm->input_stream_params.channels; ++ input_frames = stm->linear_input_buffer->length() / stm->input_stream_params.channels; + if (!input_frames) { + return true; + } +@@ -680,29 +1024,43 @@ refill_callback_duplex(cubeb_stream * stm) + return true; + } + +- // When WASAPI has not filled the input buffer yet, send silence. +- double output_duration = double(output_frames) / stm->output_mix_params.rate; +- double input_duration = double(stm->linear_input_buffer.length() / stm->input_stream_params.channels) / stm->input_mix_params.rate; +- if (input_duration < output_duration) { +- size_t padding = size_t(round((output_duration - input_duration) * stm->input_mix_params.rate)); +- LOG("padding silence: out=%f in=%f pad=%u", output_duration, input_duration, padding); +- stm->linear_input_buffer.push_front_silence(padding * stm->input_stream_params.channels); ++ /* Wait for draining is not important on duplex. */ ++ if (stm->draining) { ++ return false; + } + +- LOGV("Duplex callback: input frames: %zu, output frames: %zu", +- stm->linear_input_buffer.length(), output_frames); ++ if (stm->has_dummy_output) { ++ ALOGV("Duplex callback (dummy output): input frames: %Iu, output frames: %Iu", ++ input_frames, output_frames); + +- refill(stm, +- stm->linear_input_buffer.data(), +- stm->linear_input_buffer.length(), +- output_buffer, +- output_frames); ++ // We don't want to expose the dummy output to the callback so don't pass ++ // the output buffer (it will be released later with silence in it) ++ refill(stm, ++ stm->linear_input_buffer->data(), ++ input_frames, ++ nullptr, ++ 0); ++ } else { ++ ALOGV("Duplex callback: input frames: %Iu, output frames: %Iu", ++ input_frames, output_frames); + +- stm->linear_input_buffer.clear(); ++ refill(stm, ++ stm->linear_input_buffer->data(), ++ input_frames, ++ output_buffer, ++ output_frames); ++ } + +- hr = stm->render_client->ReleaseBuffer(output_frames, 0); ++ stm->linear_input_buffer->clear(); ++ ++ if (stm->has_dummy_output) { ++ // If output is a dummy output, make sure it's silent ++ hr = stm->render_client->ReleaseBuffer(output_frames, AUDCLNT_BUFFERFLAGS_SILENT); ++ } else { ++ hr = stm->render_client->ReleaseBuffer(output_frames, 0); ++ } + if (FAILED(hr)) { +- LOG("failed to release buffer: %x", hr); ++ LOG("failed to release buffer: %lx", hr); + return false; + } + return true; +@@ -711,7 +1069,8 @@ refill_callback_duplex(cubeb_stream * stm) + bool + refill_callback_input(cubeb_stream * stm) + { +- bool rv, consumed_all_buffer; ++ bool rv; ++ size_t input_frames; + + XASSERT(has_input(stm) && !has_output(stm)); + +@@ -720,24 +1079,24 @@ refill_callback_input(cubeb_stream * stm) + return rv; + } + +- // This can happen at the very beginning of the stream. +- if (!stm->linear_input_buffer.length()) { ++ input_frames = stm->linear_input_buffer->length() / stm->input_stream_params.channels; ++ if (!input_frames) { + return true; + } + +- LOGV("Input callback: input frames: %zu", stm->linear_input_buffer.length()); ++ ALOGV("Input callback: input frames: %Iu", input_frames); + + long read = refill(stm, +- stm->linear_input_buffer.data(), +- stm->linear_input_buffer.length(), ++ stm->linear_input_buffer->data(), ++ input_frames, + nullptr, + 0); + +- consumed_all_buffer = read == stm->linear_input_buffer.length(); ++ XASSERT(read >= 0); + +- stm->linear_input_buffer.clear(); ++ stm->linear_input_buffer->clear(); + +- return consumed_all_buffer; ++ return !stm->draining; + } + + bool +@@ -745,7 +1104,7 @@ refill_callback_output(cubeb_stream * stm) + { + bool rv; + HRESULT hr; +- float * output_buffer = nullptr; ++ void * output_buffer = nullptr; + size_t output_frames = 0; + + XASSERT(!has_input(stm) && has_output(stm)); +@@ -765,19 +1124,19 @@ refill_callback_output(cubeb_stream * stm) + output_buffer, + output_frames); + +- LOGV("Output callback: output frames requested: %zu, got %ld", +- output_frames, got); ++ ALOGV("Output callback: output frames requested: %Iu, got %ld", ++ output_frames, got); + + XASSERT(got >= 0); +- XASSERT(got == output_frames || stm->draining); ++ XASSERT(size_t(got) == output_frames || stm->draining); + + hr = stm->render_client->ReleaseBuffer(got, 0); + if (FAILED(hr)) { +- LOG("failed to release buffer: %x", hr); ++ LOG("failed to release buffer: %lx", hr); + return false; + } + +- return got == output_frames || stm->draining; ++ return size_t(got) == output_frames || stm->draining; + } + + static unsigned int __stdcall +@@ -786,6 +1145,13 @@ wasapi_stream_render_loop(LPVOID stream) + cubeb_stream * stm = static_cast(stream); + std::atomic * emergency_bailout = stm->emergency_bailout; + ++ // Signal wasapi_stream_start that we've copied emergency_bailout. ++ BOOL ok = SetEvent(stm->thread_ready_event); ++ if (!ok) { ++ LOG("thread_ready SetEvent failed: %lx", GetLastError()); ++ return 0; ++ } ++ + bool is_playing = true; + HANDLE wait_array[4] = { + stm->shutdown_event, +@@ -796,25 +1162,22 @@ wasapi_stream_render_loop(LPVOID stream) + HANDLE mmcss_handle = NULL; + HRESULT hr = 0; + DWORD mmcss_task_index = 0; +- auto_com com; +- if (!com.ok()) { +- LOG("COM initialization failed on render_loop thread."); +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); +- return 0; +- } ++ struct auto_com { ++ auto_com() { ++ HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); ++ XASSERT(SUCCEEDED(hr)); ++ } ++ ~auto_com() { ++ CoUninitialize(); ++ } ++ } com; + + /* We could consider using "Pro Audio" here for WebAudio and + maybe WebRTC. */ +- mmcss_handle = +- stm->context->set_mm_thread_characteristics("Audio", &mmcss_task_index); ++ mmcss_handle = AvSetMmThreadCharacteristicsA("Audio", &mmcss_task_index); + if (!mmcss_handle) { + /* This is not fatal, but we might glitch under heavy load. */ +- LOG("Unable to use mmcss to bump the render thread priority: %x", GetLastError()); +- } +- +- // This has already been nulled out, simply exit. +- if (!emergency_bailout) { +- is_playing = false; ++ LOG("Unable to use mmcss to bump the render thread priority: %lx", GetLastError()); + } + + /* WaitForMultipleObjects timeout can trigger in cases where we don't want to +@@ -822,7 +1185,7 @@ wasapi_stream_render_loop(LPVOID stream) + the timeout error handling only when the timeout_limit is reached, which is + reset on each successful loop. */ + unsigned timeout_count = 0; +- const unsigned timeout_limit = 5; ++ const unsigned timeout_limit = 3; + while (is_playing) { + // We want to check the emergency bailout variable before a + // and after the WaitForMultipleObject, because the handles WaitForMultipleObjects +@@ -883,18 +1246,28 @@ wasapi_stream_render_loop(LPVOID stream) + } + XASSERT(stm->output_client || stm->input_client); + if (stm->output_client) { +- stm->output_client->Start(); ++ hr = stm->output_client->Start(); ++ if (FAILED(hr)) { ++ LOG("Error starting output after reconfigure, error: %lx", hr); ++ is_playing = false; ++ continue; ++ } + LOG("Output started after reconfigure."); + } + if (stm->input_client) { +- stm->input_client->Start(); ++ hr = stm->input_client->Start(); ++ if (FAILED(hr)) { ++ LOG("Error starting input after reconfiguring, error: %lx", hr); ++ is_playing = false; ++ continue; ++ } + LOG("Input started after reconfigure."); + } + break; + } + case WAIT_OBJECT_0 + 2: /* refill */ +- XASSERT(has_input(stm) && has_output(stm) || +- !has_input(stm) && has_output(stm)); ++ XASSERT((has_input(stm) && has_output(stm)) || ++ (!has_input(stm) && has_output(stm))); + is_playing = stm->refill_callback(stm); + break; + case WAIT_OBJECT_0 + 3: /* input available */ +@@ -910,7 +1283,7 @@ wasapi_stream_render_loop(LPVOID stream) + } + break; + default: +- LOG("case %d not handled in render loop.", waitResult); ++ LOG("case %lu not handled in render loop.", waitResult); + abort(); + } + } +@@ -919,41 +1292,31 @@ wasapi_stream_render_loop(LPVOID stream) + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + } + +- stm->context->revert_mm_thread_characteristics(mmcss_handle); ++ if (mmcss_handle) { ++ AvRevertMmThreadCharacteristics(mmcss_handle); ++ } + + return 0; + } + + void wasapi_destroy(cubeb * context); + +-HANDLE WINAPI set_mm_thread_characteristics_noop(const char *, LPDWORD mmcss_task_index) +-{ +- return (HANDLE)1; +-} +- +-BOOL WINAPI revert_mm_thread_characteristics_noop(HANDLE mmcss_handle) +-{ +- return true; +-} +- + HRESULT register_notification_client(cubeb_stream * stm) + { + HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), + NULL, CLSCTX_INPROC_SERVER, +- IID_PPV_ARGS(&stm->device_enumerator)); ++ IID_PPV_ARGS(stm->device_enumerator.receive())); + if (FAILED(hr)) { +- LOG("Could not get device enumerator: %x", hr); ++ LOG("Could not get device enumerator: %lx", hr); + return hr; + } + +- stm->notification_client = new wasapi_endpoint_notification_client(stm->reconfigure_event); ++ stm->notification_client.reset(new wasapi_endpoint_notification_client(stm->reconfigure_event, stm->role)); + +- hr = stm->device_enumerator->RegisterEndpointNotificationCallback(stm->notification_client); ++ hr = stm->device_enumerator->RegisterEndpointNotificationCallback(stm->notification_client.get()); + if (FAILED(hr)) { +- LOG("Could not register endpoint notification callback: %x", hr); +- SafeRelease(stm->notification_client); ++ LOG("Could not register endpoint notification callback: %lx", hr); + stm->notification_client = nullptr; +- SafeRelease(stm->device_enumerator); + stm->device_enumerator = nullptr; + } + +@@ -969,62 +1332,93 @@ HRESULT unregister_notification_client(cubeb_stream * stm) + return S_OK; + } + +- hr = stm->device_enumerator->UnregisterEndpointNotificationCallback(stm->notification_client); ++ hr = stm->device_enumerator->UnregisterEndpointNotificationCallback(stm->notification_client.get()); ++ if (FAILED(hr)) { ++ // We can't really do anything here, we'll probably leak the ++ // notification client, but we can at least release the enumerator. ++ stm->device_enumerator = nullptr; ++ return S_OK; ++ } ++ ++ stm->notification_client = nullptr; ++ stm->device_enumerator = nullptr; ++ ++ return S_OK; ++} ++ ++HRESULT get_endpoint(com_ptr & device, LPCWSTR devid) ++{ ++ com_ptr enumerator; ++ HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), ++ NULL, CLSCTX_INPROC_SERVER, ++ IID_PPV_ARGS(enumerator.receive())); ++ if (FAILED(hr)) { ++ LOG("Could not get device enumerator: %lx", hr); ++ return hr; ++ } ++ ++ hr = enumerator->GetDevice(devid, device.receive()); + if (FAILED(hr)) { +- // We can't really do anything here, we'll probably leak the +- // notification client, but we can at least release the enumerator. +- SafeRelease(stm->device_enumerator); +- return S_OK; ++ LOG("Could not get device: %lx", hr); ++ return hr; + } + +- SafeRelease(stm->notification_client); +- SafeRelease(stm->device_enumerator); +- + return S_OK; + } + +-HRESULT get_endpoint(IMMDevice ** device, LPCWSTR devid) ++HRESULT register_collection_notification_client(cubeb * context) + { +- IMMDeviceEnumerator * enumerator; + HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), + NULL, CLSCTX_INPROC_SERVER, +- IID_PPV_ARGS(&enumerator)); ++ IID_PPV_ARGS(context->device_collection_enumerator.receive())); + if (FAILED(hr)) { +- LOG("Could not get device enumerator: %x", hr); ++ LOG("Could not get device enumerator: %lx", hr); + return hr; + } + +- hr = enumerator->GetDevice(devid, device); ++ context->collection_notification_client.reset(new wasapi_collection_notification_client(context)); ++ ++ hr = context->device_collection_enumerator->RegisterEndpointNotificationCallback( ++ context->collection_notification_client.get()); ++ if (FAILED(hr)) { ++ LOG("Could not register endpoint notification callback: %lx", hr); ++ context->collection_notification_client.reset(); ++ context->device_collection_enumerator.reset(); ++ } ++ ++ return hr; ++} ++ ++HRESULT unregister_collection_notification_client(cubeb * context) ++{ ++ HRESULT hr = context->device_collection_enumerator-> ++ UnregisterEndpointNotificationCallback(context->collection_notification_client.get()); + if (FAILED(hr)) { +- LOG("Could not get device: %x", hr); +- SafeRelease(enumerator); + return hr; + } + +- SafeRelease(enumerator); ++ context->collection_notification_client = nullptr; ++ context->device_collection_enumerator = nullptr; + +- return S_OK; ++ return hr; + } + +-HRESULT get_default_endpoint(IMMDevice ** device, EDataFlow direction) ++HRESULT get_default_endpoint(com_ptr & device, EDataFlow direction, ERole role) + { +- IMMDeviceEnumerator * enumerator; ++ com_ptr enumerator; + HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), + NULL, CLSCTX_INPROC_SERVER, +- IID_PPV_ARGS(&enumerator)); ++ IID_PPV_ARGS(enumerator.receive())); + if (FAILED(hr)) { +- LOG("Could not get device enumerator: %x", hr); ++ LOG("Could not get device enumerator: %lx", hr); + return hr; + } +- hr = enumerator->GetDefaultAudioEndpoint(direction, eConsole, device); ++ hr = enumerator->GetDefaultAudioEndpoint(direction, role, device.receive()); + if (FAILED(hr)) { +- LOG("Could not get default audio endpoint: %x", hr); +- SafeRelease(enumerator); ++ LOG("Could not get default audio endpoint: %lx", hr); + return hr; + } + +- SafeRelease(enumerator); +- + return ERROR_SUCCESS; + } + +@@ -1043,14 +1437,14 @@ current_stream_delay(cubeb_stream * stm) + UINT64 freq; + HRESULT hr = stm->audio_clock->GetFrequency(&freq); + if (FAILED(hr)) { +- LOG("GetFrequency failed: %x", hr); ++ LOG("GetFrequency failed: %lx", hr); + return 0; + } + + UINT64 pos; + hr = stm->audio_clock->GetPosition(&pos, NULL); + if (FAILED(hr)) { +- LOG("GetPosition failed: %x", hr); ++ LOG("GetPosition failed: %lx", hr); + return 0; + } + +@@ -1073,8 +1467,8 @@ stream_set_volume(cubeb_stream * stm, float volume) + + uint32_t channels; + HRESULT hr = stm->audio_stream_volume->GetChannelCount(&channels); +- if (hr != S_OK) { +- LOG("could not get the channel count: %x", hr); ++ if (FAILED(hr)) { ++ LOG("could not get the channel count: %lx", hr); + return CUBEB_ERROR; + } + +@@ -1089,8 +1483,8 @@ stream_set_volume(cubeb_stream * stm, float volume) + } + + hr = stm->audio_stream_volume->SetAllVolumes(channels, volumes); +- if (hr != S_OK) { +- LOG("could not set the channels volume: %x", hr); ++ if (FAILED(hr)) { ++ LOG("could not set the channels volume: %lx", hr); + return CUBEB_ERROR; + } + +@@ -1101,49 +1495,27 @@ stream_set_volume(cubeb_stream * stm, float volume) + extern "C" { + int wasapi_init(cubeb ** context, char const * context_name) + { +- HRESULT hr; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } +- + /* We don't use the device yet, but need to make sure we can initialize one + so that this backend is not incorrectly enabled on platforms that don't + support WASAPI. */ +- IMMDevice * device; +- hr = get_default_endpoint(&device, eRender); ++ com_ptr device; ++ HRESULT hr = get_default_endpoint(device, eRender, eConsole); + if (FAILED(hr)) { +- LOG("Could not get device: %x", hr); +- return CUBEB_ERROR; ++ XASSERT(hr != CO_E_NOTINITIALIZED); ++ LOG("It wasn't able to find a default rendering device: %lx", hr); ++ hr = get_default_endpoint(device, eCapture, eConsole); ++ if (FAILED(hr)) { ++ LOG("It wasn't able to find a default capture device: %lx", hr); ++ return CUBEB_ERROR; ++ } + } +- SafeRelease(device); + +- cubeb * ctx = (cubeb *)calloc(1, sizeof(cubeb)); +- if (!ctx) { +- return CUBEB_ERROR; +- } ++ cubeb * ctx = new cubeb(); + + ctx->ops = &wasapi_ops; +- +- ctx->mmcss_module = LoadLibraryA("Avrt.dll"); +- +- if (ctx->mmcss_module) { +- ctx->set_mm_thread_characteristics = +- (set_mm_thread_characteristics_function) GetProcAddress( +- ctx->mmcss_module, "AvSetMmThreadCharacteristicsA"); +- ctx->revert_mm_thread_characteristics = +- (revert_mm_thread_characteristics_function) GetProcAddress( +- ctx->mmcss_module, "AvRevertMmThreadCharacteristics"); +- if (!(ctx->set_mm_thread_characteristics && ctx->revert_mm_thread_characteristics)) { +- LOG("Could not load AvSetMmThreadCharacteristics or AvRevertMmThreadCharacteristics: %x", GetLastError()); +- FreeLibrary(ctx->mmcss_module); +- } +- } else { +- // This is not a fatal error, but we might end up glitching when +- // the system is under high load. +- LOG("Could not load Avrt.dll"); +- ctx->set_mm_thread_characteristics = &set_mm_thread_characteristics_noop; +- ctx->revert_mm_thread_characteristics = &revert_mm_thread_characteristics_noop; ++ if (cubeb_strings_init(&ctx->device_ids) != CUBEB_OK) { ++ delete ctx; ++ return CUBEB_ERROR; + } + + *context = ctx; +@@ -1170,31 +1542,22 @@ bool stop_and_join_render_thread(cubeb_stream * stm) + + BOOL ok = SetEvent(stm->shutdown_event); + if (!ok) { +- LOG("Destroy SetEvent failed: %d", GetLastError()); ++ LOG("Destroy SetEvent failed: %lx", GetLastError()); + } + + /* Wait five seconds for the rendering thread to return. It's supposed to + * check its event loop very often, five seconds is rather conservative. */ + DWORD r = WaitForSingleObject(stm->thread, 5000); +- if (r == WAIT_TIMEOUT) { ++ if (r != WAIT_OBJECT_0) { + /* Something weird happened, leak the thread and continue the shutdown + * process. */ + *(stm->emergency_bailout) = true; + // We give the ownership to the rendering thread. + stm->emergency_bailout = nullptr; +- LOG("Destroy WaitForSingleObject on thread timed out," +- " leaking the thread: %d", GetLastError()); +- rv = false; +- } +- if (r == WAIT_FAILED) { +- *(stm->emergency_bailout) = true; +- // We give the ownership to the rendering thread. +- stm->emergency_bailout = nullptr; +- LOG("Destroy WaitForSingleObject on thread failed: %d", GetLastError()); ++ LOG("Destroy WaitForSingleObject on thread failed: %lx, %lx", r, GetLastError()); + rv = false; + } + +- + // Only attempts to close and null out the thread and event if the + // WaitForSingleObject above succeeded, so that calling this function again + // attemps to clean up the thread and event each time. +@@ -1212,10 +1575,11 @@ bool stop_and_join_render_thread(cubeb_stream * stm) + + void wasapi_destroy(cubeb * context) + { +- if (context->mmcss_module) { +- FreeLibrary(context->mmcss_module); ++ if (context->device_ids) { ++ cubeb_strings_destroy(context->device_ids); + } +- free(context); ++ ++ delete context; + } + + char const * wasapi_get_backend_id(cubeb * context) +@@ -1226,209 +1590,285 @@ char const * wasapi_get_backend_id(cubeb * context) + int + wasapi_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + { +- HRESULT hr; +- IAudioClient * client; +- WAVEFORMATEX * mix_format; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } +- + XASSERT(ctx && max_channels); + +- IMMDevice * device; +- hr = get_default_endpoint(&device, eRender); ++ com_ptr device; ++ HRESULT hr = get_default_endpoint(device, eRender, eConsole); + if (FAILED(hr)) { + return CUBEB_ERROR; + } + ++ com_ptr client; + hr = device->Activate(__uuidof(IAudioClient), + CLSCTX_INPROC_SERVER, +- NULL, (void **)&client); +- SafeRelease(device); ++ NULL, client.receive_vpp()); + if (FAILED(hr)) { + return CUBEB_ERROR; + } + +- hr = client->GetMixFormat(&mix_format); ++ WAVEFORMATEX * tmp = nullptr; ++ hr = client->GetMixFormat(&tmp); + if (FAILED(hr)) { +- SafeRelease(client); + return CUBEB_ERROR; + } ++ com_heap_ptr mix_format(tmp); + + *max_channels = mix_format->nChannels; + +- CoTaskMemFree(mix_format); +- SafeRelease(client); +- + return CUBEB_OK; + } + + int + wasapi_get_min_latency(cubeb * ctx, cubeb_stream_params params, uint32_t * latency_frames) + { +- HRESULT hr; +- IAudioClient * client; +- REFERENCE_TIME default_period; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } +- +- if (params.format != CUBEB_SAMPLE_FLOAT32NE) { ++ if (params.format != CUBEB_SAMPLE_FLOAT32NE && params.format != CUBEB_SAMPLE_S16NE) { + return CUBEB_ERROR_INVALID_FORMAT; + } + +- IMMDevice * device; +- hr = get_default_endpoint(&device, eRender); ++ ERole role = pref_to_role(params.prefs); ++ ++ com_ptr device; ++ HRESULT hr = get_default_endpoint(device, eRender, role); + if (FAILED(hr)) { +- LOG("Could not get default endpoint: %x", hr); ++ LOG("Could not get default endpoint: %lx", hr); + return CUBEB_ERROR; + } + ++ com_ptr client; + hr = device->Activate(__uuidof(IAudioClient), + CLSCTX_INPROC_SERVER, +- NULL, (void **)&client); +- SafeRelease(device); ++ NULL, client.receive_vpp()); + if (FAILED(hr)) { +- LOG("Could not activate device for latency: %x", hr); ++ LOG("Could not activate device for latency: %lx", hr); + return CUBEB_ERROR; + } + +- /* The second parameter is for exclusive mode, that we don't use. */ +- hr = client->GetDevicePeriod(&default_period, NULL); ++ REFERENCE_TIME minimum_period; ++ REFERENCE_TIME default_period; ++ hr = client->GetDevicePeriod(&default_period, &minimum_period); + if (FAILED(hr)) { +- SafeRelease(client); +- LOG("Could not get device period: %x", hr); ++ LOG("Could not get device period: %lx", hr); + return CUBEB_ERROR; + } + +- LOG("default device period: %lld", default_period); ++ LOG("default device period: %I64d, minimum device period: %I64d", default_period, minimum_period); + +- /* According to the docs, the best latency we can achieve is by synchronizing +- the stream and the engine. ++ /* If we're on Windows 10, we can use IAudioClient3 to get minimal latency. ++ Otherwise, according to the docs, the best latency we can achieve is by ++ synchronizing the stream and the engine. + http://msdn.microsoft.com/en-us/library/windows/desktop/dd370871%28v=vs.85%29.aspx */ + +- *latency_frames = hns_to_frames(params.rate, default_period); ++ #ifdef _WIN32_WINNT_WIN10 ++ *latency_frames = hns_to_frames(params.rate, minimum_period); ++ #else ++ *latency_frames = hns_to_frames(params.rate, default_period); ++ #endif + + LOG("Minimum latency in frames: %u", *latency_frames); + +- SafeRelease(client); +- + return CUBEB_OK; + } + + int + wasapi_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) + { +- HRESULT hr; +- IAudioClient * client; +- WAVEFORMATEX * mix_format; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } +- +- IMMDevice * device; +- hr = get_default_endpoint(&device, eRender); ++ com_ptr device; ++ HRESULT hr = get_default_endpoint(device, eRender, eConsole); + if (FAILED(hr)) { + return CUBEB_ERROR; + } + ++ com_ptr client; + hr = device->Activate(__uuidof(IAudioClient), + CLSCTX_INPROC_SERVER, +- NULL, (void **)&client); +- SafeRelease(device); ++ NULL, client.receive_vpp()); + if (FAILED(hr)) { + return CUBEB_ERROR; + } + +- hr = client->GetMixFormat(&mix_format); ++ WAVEFORMATEX * tmp = nullptr; ++ hr = client->GetMixFormat(&tmp); + if (FAILED(hr)) { +- SafeRelease(client); + return CUBEB_ERROR; + } ++ com_heap_ptr mix_format(tmp); + + *rate = mix_format->nSamplesPerSec; + + LOG("Preferred sample rate for output: %u", *rate); + +- CoTaskMemFree(mix_format); +- SafeRelease(client); +- + return CUBEB_OK; + } + + void wasapi_stream_destroy(cubeb_stream * stm); + +-/* Based on the mix format and the stream format, try to find a way to play +- what the user requested. */ + static void +-handle_channel_layout(cubeb_stream * stm, WAVEFORMATEX ** mix_format, const cubeb_stream_params * stream_params) ++waveformatex_update_derived_properties(WAVEFORMATEX * format) + { +- /* Common case: the hardware is stereo. Up-mixing and down-mixing will be +- handled in the callback. */ +- if ((*mix_format)->nChannels <= 2) { +- return; ++ format->nBlockAlign = format->wBitsPerSample * format->nChannels / 8; ++ format->nAvgBytesPerSec = format->nSamplesPerSec * format->nBlockAlign; ++ if (format->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { ++ WAVEFORMATEXTENSIBLE * format_pcm = reinterpret_cast(format); ++ format_pcm->Samples.wValidBitsPerSample = format->wBitsPerSample; + } ++} + ++/* Based on the mix format and the stream format, try to find a way to play ++ what the user requested. */ ++static void ++handle_channel_layout(cubeb_stream * stm, EDataFlow direction, com_heap_ptr & mix_format, const cubeb_stream_params * stream_params) ++{ ++ com_ptr & audio_client = (direction == eRender) ? stm->output_client : stm->input_client; ++ XASSERT(audio_client); + /* The docs say that GetMixFormat is always of type WAVEFORMATEXTENSIBLE [1], + so the reinterpret_cast below should be safe. In practice, this is not + true, and we just want to bail out and let the rest of the code find a good + conversion path instead of trying to make WASAPI do it by itself. + [1]: http://msdn.microsoft.com/en-us/library/windows/desktop/dd370811%28v=vs.85%29.aspx*/ +- if ((*mix_format)->wFormatTag != WAVE_FORMAT_EXTENSIBLE) { ++ if (mix_format->wFormatTag != WAVE_FORMAT_EXTENSIBLE) { + return; + } + +- WAVEFORMATEXTENSIBLE * format_pcm = reinterpret_cast(*mix_format); ++ WAVEFORMATEXTENSIBLE * format_pcm = reinterpret_cast(mix_format.get()); + + /* Stash a copy of the original mix format in case we need to restore it later. */ + WAVEFORMATEXTENSIBLE hw_mix_format = *format_pcm; + +- /* The hardware is in surround mode, we want to only use front left and front +- right. Try that, and check if it works. */ +- switch (stream_params->channels) { +- case 1: /* Mono */ +- format_pcm->dwChannelMask = KSAUDIO_SPEAKER_MONO; +- break; +- case 2: /* Stereo */ +- format_pcm->dwChannelMask = KSAUDIO_SPEAKER_STEREO; +- break; +- default: +- XASSERT(false && "Channel layout not supported."); +- break; +- } +- (*mix_format)->nChannels = stream_params->channels; +- (*mix_format)->nBlockAlign = ((*mix_format)->wBitsPerSample * (*mix_format)->nChannels) / 8; +- (*mix_format)->nAvgBytesPerSec = (*mix_format)->nSamplesPerSec * (*mix_format)->nBlockAlign; +- format_pcm->SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; +- (*mix_format)->wBitsPerSample = 32; +- format_pcm->Samples.wValidBitsPerSample = (*mix_format)->wBitsPerSample; ++ /* Get the channel mask by the channel layout. ++ If the layout is not supported, we will get a closest settings below. */ ++ format_pcm->dwChannelMask = stream_params->layout; ++ mix_format->nChannels = stream_params->channels; ++ waveformatex_update_derived_properties(mix_format.get()); + + /* Check if wasapi will accept our channel layout request. */ + WAVEFORMATEX * closest; +- HRESULT hr = stm->output_client->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, +- *mix_format, +- &closest); ++ HRESULT hr = audio_client->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, ++ mix_format.get(), ++ &closest); + if (hr == S_FALSE) { +- /* Not supported, but WASAPI gives us a suggestion. Use it, and handle the +- eventual upmix/downmix ourselves */ ++ /* Channel layout not supported, but WASAPI gives us a suggestion. Use it, ++ and handle the eventual upmix/downmix ourselves. Ignore the subformat of ++ the suggestion, since it seems to always be IEEE_FLOAT. */ + LOG("Using WASAPI suggested format: channels: %d", closest->nChannels); ++ XASSERT(closest->wFormatTag == WAVE_FORMAT_EXTENSIBLE); + WAVEFORMATEXTENSIBLE * closest_pcm = reinterpret_cast(closest); +- XASSERT(closest_pcm->SubFormat == format_pcm->SubFormat); +- CoTaskMemFree(*mix_format); +- *mix_format = closest; ++ format_pcm->dwChannelMask = closest_pcm->dwChannelMask; ++ mix_format->nChannels = closest->nChannels; ++ waveformatex_update_derived_properties(mix_format.get()); + } else if (hr == AUDCLNT_E_UNSUPPORTED_FORMAT) { + /* Not supported, no suggestion. This should not happen, but it does in the + field with some sound cards. We restore the mix format, and let the rest + of the code figure out the right conversion path. */ +- *reinterpret_cast(*mix_format) = hw_mix_format; ++ XASSERT(mix_format->wFormatTag == WAVE_FORMAT_EXTENSIBLE); ++ *reinterpret_cast(mix_format.get()) = hw_mix_format; + } else if (hr == S_OK) { + LOG("Requested format accepted by WASAPI."); + } else { +- LOG("IsFormatSupported unhandled error: %x", hr); ++ LOG("IsFormatSupported unhandled error: %lx", hr); ++ } ++} ++ ++static bool ++initialize_iaudioclient3(com_ptr & audio_client, ++ cubeb_stream * stm, ++ const com_heap_ptr & mix_format, ++ DWORD flags, ++ EDataFlow direction) ++{ ++ com_ptr audio_client3; ++ audio_client->QueryInterface(audio_client3.receive()); ++ if (!audio_client3) { ++ LOG("Could not get IAudioClient3 interface"); ++ return false; ++ } ++ ++ if (flags & AUDCLNT_STREAMFLAGS_LOOPBACK) { ++ // IAudioClient3 doesn't work with loopback streams, and will return error ++ // 88890021: AUDCLNT_E_INVALID_STREAM_FLAG ++ LOG("Audio stream is loopback, not using IAudioClient3"); ++ return false; ++ } ++ ++ // IAudioClient3 doesn't support AUDCLNT_STREAMFLAGS_NOPERSIST, and will return ++ // AUDCLNT_E_INVALID_STREAM_FLAG. This is undocumented. ++ flags = flags ^ AUDCLNT_STREAMFLAGS_NOPERSIST; ++ ++ // Some people have reported glitches with capture streams: ++ // http://blog.nirbheek.in/2018/03/low-latency-audio-on-windows-with.html ++ if (direction == eCapture) { ++ LOG("Audio stream is capture, not using IAudioClient3"); ++ return false; ++ } ++ ++ // Possibly initialize a shared-mode stream using IAudioClient3. Initializing ++ // a stream this way lets you request lower latencies, but also locks the global ++ // WASAPI engine at that latency. ++ // - If we request a shared-mode stream, streams created with IAudioClient will ++ // have their latency adjusted to match. When the shared-mode stream is ++ // closed, they'll go back to normal. ++ // - If there's already a shared-mode stream running, then we cannot request ++ // the engine change to a different latency - we have to match it. ++ // - It's antisocial to lock the WASAPI engine at its default latency. If we ++ // would do this, then stop and use IAudioClient instead. ++ ++ HRESULT hr; ++ uint32_t default_period = 0, fundamental_period = 0, min_period = 0, max_period = 0; ++ hr = audio_client3->GetSharedModeEnginePeriod(mix_format.get(), &default_period, &fundamental_period, &min_period, &max_period); ++ if (FAILED(hr)) { ++ LOG("Could not get shared mode engine period: error: %lx", hr); ++ return false; ++ } ++ uint32_t requested_latency = stm->latency; ++ if (requested_latency >= default_period) { ++ LOG("Requested latency %i greater than default latency %i, not using IAudioClient3", requested_latency, default_period); ++ return false; ++ } ++ LOG("Got shared mode engine period: default=%i fundamental=%i min=%i max=%i", default_period, fundamental_period, min_period, max_period); ++ // Snap requested latency to a valid value ++ uint32_t old_requested_latency = requested_latency; ++ if (requested_latency < min_period) { ++ requested_latency = min_period; ++ } ++ requested_latency -= (requested_latency - min_period) % fundamental_period; ++ if (requested_latency != old_requested_latency) { ++ LOG("Requested latency %i was adjusted to %i", old_requested_latency, requested_latency); ++ } ++ ++ hr = audio_client3->InitializeSharedAudioStream(flags, requested_latency, mix_format.get(), NULL); ++ if (SUCCEEDED(hr)) { ++ return true; ++ } ++ else if (hr == AUDCLNT_E_ENGINE_PERIODICITY_LOCKED) { ++ LOG("Got AUDCLNT_E_ENGINE_PERIODICITY_LOCKED, adjusting latency request"); ++ } else { ++ LOG("Could not initialize shared stream with IAudioClient3: error: %lx", hr); ++ return false; ++ } ++ ++ uint32_t current_period = 0; ++ WAVEFORMATEX* current_format = nullptr; ++ // We have to pass a valid WAVEFORMATEX** and not nullptr, otherwise ++ // GetCurrentSharedModeEnginePeriod will return E_POINTER ++ hr = audio_client3->GetCurrentSharedModeEnginePeriod(¤t_format, ¤t_period); ++ CoTaskMemFree(current_format); ++ if (FAILED(hr)) { ++ LOG("Could not get current shared mode engine period: error: %lx", hr); ++ return false; ++ } ++ ++ if (current_period >= default_period) { ++ LOG("Current shared mode engine period %i too high, not using IAudioClient", current_period); ++ return false; ++ } ++ ++ hr = audio_client3->InitializeSharedAudioStream(flags, current_period, mix_format.get(), NULL); ++ if (SUCCEEDED(hr)) { ++ LOG("Current shared mode engine period is %i instead of requested %i", current_period, requested_latency); ++ return true; + } ++ ++ LOG("Could not initialize shared stream with IAudioClient3: error: %lx", hr); ++ return false; + } + + #define DIRECTION_NAME (direction == eCapture ? "capture" : "render") +@@ -1436,18 +1876,22 @@ handle_channel_layout(cubeb_stream * stm, WAVEFORMATEX ** mix_format, const cub + template + int setup_wasapi_stream_one_side(cubeb_stream * stm, + cubeb_stream_params * stream_params, +- cubeb_devid devid, ++ wchar_t const * devid, + EDataFlow direction, + REFIID riid, +- IAudioClient ** audio_client, ++ com_ptr & audio_client, + uint32_t * buffer_frame_count, + HANDLE & event, +- T ** render_or_capture_client, ++ T & render_or_capture_client, + cubeb_stream_params * mix_params) + { +- IMMDevice * device; +- WAVEFORMATEX * mix_format; ++ com_ptr device; + HRESULT hr; ++ bool is_loopback = stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK; ++ if (is_loopback && direction != eCapture) { ++ LOG("Loopback pref can only be used with capture streams!\n"); ++ return CUBEB_ERROR; ++ } + + stm->stream_reset_lock.assert_current_thread_owns(); + bool try_again = false; +@@ -1455,35 +1899,46 @@ int setup_wasapi_stream_one_side(cubeb_stream * stm, + // possibilities. + do { + if (devid) { +- std::unique_ptr id(utf8_to_wstr(reinterpret_cast(devid))); +- hr = get_endpoint(&device, id.get()); ++ hr = get_endpoint(device, devid); + if (FAILED(hr)) { +- LOG("Could not get %s endpoint, error: %x\n", DIRECTION_NAME, hr); ++ LOG("Could not get %s endpoint, error: %lx\n", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } +- } +- else { +- hr = get_default_endpoint(&device, direction); ++ } else { ++ // If caller has requested loopback but not specified a device, look for ++ // the default render device. Otherwise look for the default device ++ // appropriate to the direction. ++ hr = get_default_endpoint(device, is_loopback ? eRender : direction, pref_to_role(stream_params->prefs)); + if (FAILED(hr)) { +- LOG("Could not get default %s endpoint, error: %x\n", DIRECTION_NAME, hr); ++ if (is_loopback) { ++ LOG("Could not get default render endpoint for loopback, error: %lx\n", hr); ++ } else { ++ LOG("Could not get default %s endpoint, error: %lx\n", DIRECTION_NAME, hr); ++ } + return CUBEB_ERROR; + } + } + + /* Get a client. We will get all other interfaces we need from + * this pointer. */ +- hr = device->Activate(__uuidof(IAudioClient), +- CLSCTX_INPROC_SERVER, +- NULL, (void **)audio_client); +- SafeRelease(device); ++ // hr = device->Activate(__uuidof(IAudioClient3), ++ // CLSCTX_INPROC_SERVER, ++ // NULL, audio_client.receive_vpp()); ++ // if (hr == E_NOINTERFACE) { ++ hr = device->Activate(__uuidof(IAudioClient), ++ CLSCTX_INPROC_SERVER, ++ NULL, audio_client.receive_vpp()); ++ //} ++ + if (FAILED(hr)) { + LOG("Could not activate the device to get an audio" +- " client for %s: error: %x\n", DIRECTION_NAME, hr); ++ " client for %s: error: %lx\n", DIRECTION_NAME, hr); + // A particular device can't be activated because it has been + // unplugged, try fall back to the default audio device. + if (devid && hr == AUDCLNT_E_DEVICE_INVALIDATED) { + LOG("Trying again with the default %s audio device.", DIRECTION_NAME); + devid = nullptr; ++ device = nullptr; + try_again = true; + } else { + return CUBEB_ERROR; +@@ -1495,62 +1950,85 @@ int setup_wasapi_stream_one_side(cubeb_stream * stm, + + /* We have to distinguish between the format the mixer uses, + * and the format the stream we want to play uses. */ +- hr = (*audio_client)->GetMixFormat(&mix_format); ++ WAVEFORMATEX * tmp = nullptr; ++ hr = audio_client->GetMixFormat(&tmp); + if (FAILED(hr)) { + LOG("Could not fetch current mix format from the audio" +- " client for %s: error: %x", DIRECTION_NAME, hr); ++ " client for %s: error: %lx", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } ++ com_heap_ptr mix_format(tmp); + +- handle_channel_layout(stm, &mix_format, stream_params); ++ mix_format->wBitsPerSample = stm->bytes_per_sample * 8; ++ if (mix_format->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { ++ WAVEFORMATEXTENSIBLE * format_pcm = reinterpret_cast(mix_format.get()); ++ format_pcm->SubFormat = stm->waveformatextensible_sub_format; ++ } ++ waveformatex_update_derived_properties(mix_format.get()); ++ ++ /* Set channel layout only when there're more than two channels. Otherwise, ++ * use the default setting retrieved from the stream format of the audio ++ * engine's internal processing by GetMixFormat. */ ++ if (mix_format->nChannels > 2) { ++ handle_channel_layout(stm, direction, mix_format, stream_params); ++ } + +- /* Shared mode WASAPI always supports float32 sample format, so this +- * is safe. */ +- mix_params->format = CUBEB_SAMPLE_FLOAT32NE; ++ mix_params->format = stream_params->format; + mix_params->rate = mix_format->nSamplesPerSec; + mix_params->channels = mix_format->nChannels; +- LOG("Setup requested=[f=%d r=%u c=%u] mix=[f=%d r=%u c=%u]", ++ mix_params->layout = mask_to_channel_layout(mix_format.get()); ++ ++ LOG("Setup requested=[f=%d r=%u c=%u l=%u] mix=[f=%d r=%u c=%u l=%u]", + stream_params->format, stream_params->rate, stream_params->channels, +- mix_params->format, mix_params->rate, mix_params->channels); +- +- hr = (*audio_client)->Initialize(AUDCLNT_SHAREMODE_SHARED, +- AUDCLNT_STREAMFLAGS_EVENTCALLBACK | +- AUDCLNT_STREAMFLAGS_NOPERSIST, +- frames_to_hns(stm, stm->latency), +- 0, +- mix_format, +- NULL); ++ stream_params->layout, ++ mix_params->format, mix_params->rate, mix_params->channels, ++ mix_params->layout); ++ ++ DWORD flags = AUDCLNT_STREAMFLAGS_NOPERSIST; ++ ++ // Check if a loopback device should be requested. Note that event callbacks ++ // do not work with loopback devices, so only request these if not looping. ++ if (is_loopback) { ++ flags |= AUDCLNT_STREAMFLAGS_LOOPBACK; ++ } else { ++ flags |= AUDCLNT_STREAMFLAGS_EVENTCALLBACK; ++ } ++ ++ // if (initialize_iaudioclient3(audio_client, stm, mix_format, flags, direction)) { ++ // LOG("Initialized with IAudioClient3"); ++ // } else { ++ hr = audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, ++ flags, ++ frames_to_hns(stm, stm->latency), ++ 0, ++ mix_format.get(), ++ NULL); ++ // } + if (FAILED(hr)) { +- LOG("Unable to initialize audio client for %s: %x.", DIRECTION_NAME, hr); ++ LOG("Unable to initialize audio client for %s: %lx.", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } + +- CoTaskMemFree(mix_format); +- +- hr = (*audio_client)->GetBufferSize(buffer_frame_count); ++ hr = audio_client->GetBufferSize(buffer_frame_count); + if (FAILED(hr)) { + LOG("Could not get the buffer size from the client" +- " for %s %x.", DIRECTION_NAME, hr); ++ " for %s %lx.", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } + +- // Input is up/down mixed when depacketized in get_input_buffer. +- if (has_output(stm) && +- (should_upmix(*stream_params, *mix_params) || +- should_downmix(*stream_params, *mix_params))) { +- stm->mix_buffer = (float *)malloc(frames_to_bytes_before_mix(stm, *buffer_frame_count)); +- } +- +- hr = (*audio_client)->SetEventHandle(event); +- if (FAILED(hr)) { +- LOG("Could set the event handle for the %s client %x.", +- DIRECTION_NAME, hr); +- return CUBEB_ERROR; ++ // Events are used if not looping back ++ if (!is_loopback) { ++ hr = audio_client->SetEventHandle(event); ++ if (FAILED(hr)) { ++ LOG("Could set the event handle for the %s client %lx.", ++ DIRECTION_NAME, hr); ++ return CUBEB_ERROR; ++ } + } + +- hr = (*audio_client)->GetService(riid, (void **)render_or_capture_client); ++ hr = audio_client->GetService(riid, render_or_capture_client.receive_vpp()); + if (FAILED(hr)) { +- LOG("Could not get the %s client %x.", DIRECTION_NAME, hr); ++ LOG("Could not get the %s client %lx.", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } + +@@ -1561,66 +2039,94 @@ int setup_wasapi_stream_one_side(cubeb_stream * stm, + + int setup_wasapi_stream(cubeb_stream * stm) + { +- HRESULT hr; + int rv; + + stm->stream_reset_lock.assert_current_thread_owns(); + +- auto_com com; +- if (!com.ok()) { +- LOG("Failure to initialize COM."); +- return CUBEB_ERROR; +- } +- + XASSERT((!stm->output_client || !stm->input_client) && "WASAPI stream already setup, close it first."); + + if (has_input(stm)) { +- LOG("Setup capture: device=%x", (int)stm->input_device); ++ LOG("(%p) Setup capture: device=%p", stm, stm->input_device.get()); + rv = setup_wasapi_stream_one_side(stm, + &stm->input_stream_params, +- stm->input_device, ++ stm->input_device.get(), + eCapture, + __uuidof(IAudioCaptureClient), +- &stm->input_client, ++ stm->input_client, + &stm->input_buffer_frame_count, + stm->input_available_event, +- &stm->capture_client, ++ stm->capture_client, + &stm->input_mix_params); + if (rv != CUBEB_OK) { + LOG("Failure to open the input side."); + return rv; + } ++ ++ // We initializing an input stream, buffer ahead two buffers worth of silence. ++ // This delays the input side slightly, but allow to not glitch when no input ++ // is available when calling into the resampler to call the callback: the input ++ // refill event will be set shortly after to compensate for this lack of data. ++ // In debug, four buffers are used, to avoid tripping up assertions down the line. ++#if !defined(DEBUG) ++ const int silent_buffer_count = 2; ++#else ++ const int silent_buffer_count = 6; ++#endif ++ stm->linear_input_buffer->push_silence(stm->input_buffer_frame_count * ++ stm->input_stream_params.channels * ++ silent_buffer_count); ++ } ++ ++ // If we don't have an output device but are requesting a loopback device, ++ // we attempt to open that same device in output mode in order to drive the ++ // loopback via the output events. ++ stm->has_dummy_output = false; ++ if (!has_output(stm) && stm->input_stream_params.prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ stm->output_stream_params.rate = stm->input_stream_params.rate; ++ stm->output_stream_params.channels = stm->input_stream_params.channels; ++ stm->output_stream_params.layout = stm->input_stream_params.layout; ++ if (stm->input_device) { ++ size_t len = wcslen(stm->input_device.get()); ++ std::unique_ptr tmp(new wchar_t[len + 1]); ++ if (wcsncpy_s(tmp.get(), len + 1, stm->input_device.get(), len) != 0) { ++ LOG("Failed to copy device identifier while copying input stream" ++ " configuration to output stream configuration to drive loopback."); ++ return CUBEB_ERROR; ++ } ++ stm->output_device = move(tmp); ++ } ++ stm->has_dummy_output = true; + } + + if (has_output(stm)) { +- LOG("Setup render: device=%x", (int)stm->output_device); ++ LOG("(%p) Setup render: device=%p", stm, stm->output_device.get()); + rv = setup_wasapi_stream_one_side(stm, + &stm->output_stream_params, +- stm->output_device, ++ stm->output_device.get(), + eRender, + __uuidof(IAudioRenderClient), +- &stm->output_client, ++ stm->output_client, + &stm->output_buffer_frame_count, + stm->refill_event, +- &stm->render_client, ++ stm->render_client, + &stm->output_mix_params); + if (rv != CUBEB_OK) { + LOG("Failure to open the output side."); + return rv; + } + +- hr = stm->output_client->GetService(__uuidof(IAudioStreamVolume), +- (void **)&stm->audio_stream_volume); ++ HRESULT hr = stm->output_client->GetService(__uuidof(IAudioStreamVolume), ++ stm->audio_stream_volume.receive_vpp()); + if (FAILED(hr)) { +- LOG("Could not get the IAudioStreamVolume: %x", hr); ++ LOG("Could not get the IAudioStreamVolume: %lx", hr); + return CUBEB_ERROR; + } + + XASSERT(stm->frames_written == 0); + hr = stm->output_client->GetService(__uuidof(IAudioClock), +- (void **)&stm->audio_clock); ++ stm->audio_clock.receive_vpp()); + if (FAILED(hr)) { +- LOG("Could not get the IAudioClock: %x", hr); ++ LOG("Could not get the IAudioClock: %lx", hr); + return CUBEB_ERROR; + } + +@@ -1635,7 +2141,7 @@ int setup_wasapi_stream(cubeb_stream * stm) + * the highest sample rate available. */ + int32_t target_sample_rate; + if (has_input(stm) && has_output(stm)) { +- assert(stm->input_stream_params.rate == stm->output_stream_params.rate); ++ XASSERT(stm->input_stream_params.rate == stm->output_stream_params.rate); + target_sample_rate = stm->input_stream_params.rate; + } else if (has_input(stm)) { + target_sample_rate = stm->input_stream_params.rate; +@@ -1655,14 +2161,14 @@ int setup_wasapi_stream(cubeb_stream * stm) + cubeb_stream_params output_params = stm->output_mix_params; + output_params.channels = stm->output_stream_params.channels; + +- stm->resampler = ++ stm->resampler.reset( + cubeb_resampler_create(stm, + has_input(stm) ? &input_params : nullptr, + has_output(stm) ? &output_params : nullptr, + target_sample_rate, + stm->data_callback, + stm->user_ptr, +- CUBEB_RESAMPLER_QUALITY_DESKTOP); ++ CUBEB_RESAMPLER_QUALITY_DESKTOP)); + if (!stm->resampler) { + LOG("Could not get a resampler"); + return CUBEB_ERROR; +@@ -1678,9 +2184,52 @@ int setup_wasapi_stream(cubeb_stream * stm) + stm->refill_callback = refill_callback_output; + } + ++ // Create input mixer. ++ if (has_input(stm) && ++ ((stm->input_mix_params.layout != CUBEB_LAYOUT_UNDEFINED && ++ stm->input_mix_params.layout != stm->input_stream_params.layout) || ++ (stm->input_mix_params.channels != stm->input_stream_params.channels))) { ++ if (stm->input_mix_params.layout == CUBEB_LAYOUT_UNDEFINED) { ++ LOG("Input stream using undefined layout! Any mixing may be " ++ "unpredictable!\n"); ++ } ++ stm->input_mixer.reset(cubeb_mixer_create(stm->input_stream_params.format, ++ stm->input_mix_params.channels, ++ stm->input_mix_params.layout, ++ stm->input_stream_params.channels, ++ stm->input_stream_params.layout)); ++ assert(stm->input_mixer); ++ } ++ ++ // Create output mixer. ++ if (has_output(stm) && stm->output_mix_params.layout != stm->output_stream_params.layout) { ++ if (stm->output_mix_params.layout == CUBEB_LAYOUT_UNDEFINED) { ++ LOG("Output stream using undefined layout! Any mixing may be unpredictable!\n"); ++ } ++ stm->output_mixer.reset(cubeb_mixer_create(stm->output_stream_params.format, ++ stm->output_stream_params.channels, ++ stm->output_stream_params.layout, ++ stm->output_mix_params.channels, ++ stm->output_mix_params.layout)); ++ assert(stm->output_mixer); ++ // Input is up/down mixed when depacketized in get_input_buffer. ++ stm->mix_buffer.resize( ++ frames_to_bytes_before_mix(stm, stm->output_buffer_frame_count)); ++ } ++ + return CUBEB_OK; + } + ++ERole ++pref_to_role(cubeb_stream_prefs prefs) ++{ ++ if (prefs & CUBEB_STREAM_PREF_VOICE) { ++ return eCommunications; ++ } ++ ++ return eConsole; ++} ++ + int + wasapi_stream_init(cubeb * context, cubeb_stream ** stream, + char const * stream_name, +@@ -1691,92 +2240,100 @@ wasapi_stream_init(cubeb * context, cubeb_stream ** stream, + unsigned int latency_frames, cubeb_data_callback data_callback, + cubeb_state_callback state_callback, void * user_ptr) + { +- HRESULT hr; + int rv; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } + + XASSERT(context && stream && (input_stream_params || output_stream_params)); + +- if (output_stream_params && output_stream_params->format != CUBEB_SAMPLE_FLOAT32NE || +- input_stream_params && input_stream_params->format != CUBEB_SAMPLE_FLOAT32NE) { +- LOG("Invalid format, %p %p %d %d", +- output_stream_params, input_stream_params, +- output_stream_params && output_stream_params->format, +- input_stream_params && input_stream_params->format); ++ if (output_stream_params && input_stream_params && ++ output_stream_params->format != input_stream_params->format) { + return CUBEB_ERROR_INVALID_FORMAT; + } + +- cubeb_stream * stm = (cubeb_stream *)calloc(1, sizeof(cubeb_stream)); +- +- XASSERT(stm); ++ std::unique_ptr stm(new cubeb_stream(), wasapi_stream_destroy); + + stm->context = context; + stm->data_callback = data_callback; + stm->state_callback = state_callback; + stm->user_ptr = user_ptr; +- stm->draining = false; ++ ++ if (stm->output_stream_params.prefs & CUBEB_STREAM_PREF_VOICE || ++ stm->input_stream_params.prefs & CUBEB_STREAM_PREF_VOICE) { ++ stm->role = eCommunications; ++ } else { ++ stm->role = eConsole; ++ } ++ + if (input_stream_params) { + stm->input_stream_params = *input_stream_params; +- stm->input_device = input_device; ++ stm->input_device = utf8_to_wstr(reinterpret_cast(input_device)); + } + if (output_stream_params) { + stm->output_stream_params = *output_stream_params; +- stm->output_device = output_device; ++ stm->output_device = utf8_to_wstr(reinterpret_cast(output_device)); + } + +- stm->latency = latency_frames; +- stm->volume = 1.0; ++ switch (output_stream_params ? output_stream_params->format : input_stream_params->format) { ++ case CUBEB_SAMPLE_S16NE: ++ stm->bytes_per_sample = sizeof(short); ++ stm->waveformatextensible_sub_format = KSDATAFORMAT_SUBTYPE_PCM; ++ stm->linear_input_buffer.reset(new auto_array_wrapper_impl); ++ break; ++ case CUBEB_SAMPLE_FLOAT32NE: ++ stm->bytes_per_sample = sizeof(float); ++ stm->waveformatextensible_sub_format = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; ++ stm->linear_input_buffer.reset(new auto_array_wrapper_impl); ++ break; ++ default: ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } + +- // Placement new to call ctor. +- new (&stm->stream_reset_lock) owned_critical_section(); ++ stm->latency = latency_frames; + + stm->reconfigure_event = CreateEvent(NULL, 0, 0, NULL); + if (!stm->reconfigure_event) { +- LOG("Can't create the reconfigure event, error: %x", GetLastError()); +- wasapi_stream_destroy(stm); ++ LOG("Can't create the reconfigure event, error: %lx", GetLastError()); + return CUBEB_ERROR; + } + + /* Unconditionally create the two events so that the wait logic is simpler. */ + stm->refill_event = CreateEvent(NULL, 0, 0, NULL); + if (!stm->refill_event) { +- LOG("Can't create the refill event, error: %x", GetLastError()); +- wasapi_stream_destroy(stm); ++ LOG("Can't create the refill event, error: %lx", GetLastError()); + return CUBEB_ERROR; + } + + stm->input_available_event = CreateEvent(NULL, 0, 0, NULL); + if (!stm->input_available_event) { +- LOG("Can't create the input available event , error: %x", GetLastError()); +- wasapi_stream_destroy(stm); ++ LOG("Can't create the input available event , error: %lx", GetLastError()); + return CUBEB_ERROR; + } + +- + { + /* Locking here is not strictly necessary, because we don't have a + notification client that can reset the stream yet, but it lets us + assert that the lock is held in the function. */ + auto_lock lock(stm->stream_reset_lock); +- rv = setup_wasapi_stream(stm); ++ rv = setup_wasapi_stream(stm.get()); + } + if (rv != CUBEB_OK) { +- wasapi_stream_destroy(stm); + return rv; + } + +- hr = register_notification_client(stm); +- if (FAILED(hr)) { +- /* this is not fatal, we can still play audio, but we won't be able +- to keep using the default audio endpoint if it changes. */ +- LOG("failed to register notification client, %x", hr); ++ if (!((input_stream_params ? ++ (input_stream_params->prefs & CUBEB_STREAM_PREF_DISABLE_DEVICE_SWITCHING) : 0) || ++ (output_stream_params ? ++ (output_stream_params->prefs & CUBEB_STREAM_PREF_DISABLE_DEVICE_SWITCHING) : 0))) { ++ HRESULT hr = register_notification_client(stm.get()); ++ if (FAILED(hr)) { ++ /* this is not fatal, we can still play audio, but we won't be able ++ to keep using the default audio endpoint if it changes. */ ++ LOG("failed to register notification client, %lx", hr); ++ } + } + +- *stream = stm; ++ *stream = stm.release(); + ++ LOG("Stream init succesfull (%p)", *stream); + return CUBEB_OK; + } + +@@ -1786,61 +2343,55 @@ void close_wasapi_stream(cubeb_stream * stm) + + stm->stream_reset_lock.assert_current_thread_owns(); + +- SafeRelease(stm->output_client); +- stm->output_client = NULL; +- SafeRelease(stm->input_client); +- stm->input_client = NULL; ++ stm->output_client = nullptr; ++ stm->render_client = nullptr; + +- SafeRelease(stm->render_client); +- stm->render_client = NULL; ++ stm->input_client = nullptr; ++ stm->capture_client = nullptr; + +- SafeRelease(stm->capture_client); +- stm->capture_client = NULL; ++ stm->audio_stream_volume = nullptr; + +- SafeRelease(stm->audio_stream_volume); +- stm->audio_stream_volume = NULL; +- +- SafeRelease(stm->audio_clock); +- stm->audio_clock = NULL; ++ stm->audio_clock = nullptr; + stm->total_frames_written += static_cast(round(stm->frames_written * stream_to_mix_samplerate_ratio(stm->output_stream_params, stm->output_mix_params))); + stm->frames_written = 0; + +- if (stm->resampler) { +- cubeb_resampler_destroy(stm->resampler); +- stm->resampler = NULL; +- } +- +- free(stm->mix_buffer); +- stm->mix_buffer = NULL; ++ stm->resampler.reset(); ++ stm->output_mixer.reset(); ++ stm->input_mixer.reset(); ++ stm->mix_buffer.clear(); + } + + void wasapi_stream_destroy(cubeb_stream * stm) + { + XASSERT(stm); ++ LOG("Stream destroy (%p)", stm); + +- // Only free stm->emergency_bailout if we could not join the thread. +- // If we could not join the thread, stm->emergency_bailout is true ++ // Only free stm->emergency_bailout if we could join the thread. ++ // If we could not join the thread, stm->emergency_bailout is true + // and is still alive until the thread wakes up and exits cleanly. + if (stop_and_join_render_thread(stm)) { + delete stm->emergency_bailout.load(); + stm->emergency_bailout = nullptr; + } + +- unregister_notification_client(stm); ++ if (stm->notification_client) { ++ unregister_notification_client(stm); ++ } ++ ++ CloseHandle(stm->reconfigure_event); ++ CloseHandle(stm->refill_event); ++ CloseHandle(stm->input_available_event); + +- SafeRelease(stm->reconfigure_event); +- SafeRelease(stm->refill_event); +- SafeRelease(stm->input_available_event); ++ // The variables intialized in wasapi_stream_init, ++ // must be destroyed in wasapi_stream_destroy. ++ stm->linear_input_buffer.reset(); + + { + auto_lock lock(stm->stream_reset_lock); + close_wasapi_stream(stm); + } + +- // Need to call dtor to free the resource in owned_critical_section. +- stm->stream_reset_lock.~owned_critical_section(); +- +- free(stm); ++ delete stm; + } + + enum StreamDirection { +@@ -1860,7 +2411,7 @@ int stream_start_one_side(cubeb_stream * stm, StreamDirection dir) + + BOOL ok = ResetEvent(stm->reconfigure_event); + if (!ok) { +- LOG("resetting reconfig event failed for %s stream: %x", ++ LOG("resetting reconfig event failed for %s stream: %lx", + dir == OUTPUT ? "output" : "input", GetLastError()); + } + +@@ -1873,12 +2424,12 @@ int stream_start_one_side(cubeb_stream * stm, StreamDirection dir) + + HRESULT hr2 = dir == OUTPUT ? stm->output_client->Start() : stm->input_client->Start(); + if (FAILED(hr2)) { +- LOG("could not start the %s stream after reconfig: %x", ++ LOG("could not start the %s stream after reconfig: %lx", + dir == OUTPUT ? "output" : "input", hr); + return CUBEB_ERROR; + } + } else if (FAILED(hr)) { +- LOG("could not start the %s stream: %x.", ++ LOG("could not start the %s stream: %lx.", + dir == OUTPUT ? "output" : "input", hr); + return CUBEB_ERROR; + } +@@ -1911,16 +2462,31 @@ int wasapi_stream_start(cubeb_stream * stm) + + stm->shutdown_event = CreateEvent(NULL, 0, 0, NULL); + if (!stm->shutdown_event) { +- LOG("Can't create the shutdown event, error: %x", GetLastError()); ++ LOG("Can't create the shutdown event, error: %lx", GetLastError()); ++ return CUBEB_ERROR; ++ } ++ ++ stm->thread_ready_event = CreateEvent(NULL, 0, 0, NULL); ++ if (!stm->thread_ready_event) { ++ LOG("Can't create the thread_ready event, error: %lx", GetLastError()); + return CUBEB_ERROR; + } + ++ cubeb_async_log_reset_threads(); + stm->thread = (HANDLE) _beginthreadex(NULL, 512 * 1024, wasapi_stream_render_loop, stm, STACK_SIZE_PARAM_IS_A_RESERVATION, NULL); + if (stm->thread == NULL) { + LOG("could not create WASAPI render thread."); + return CUBEB_ERROR; + } + ++ // Wait for wasapi_stream_render_loop to signal that emergency_bailout has ++ // been read, avoiding a bailout situation where we could free `stm` ++ // before wasapi_stream_render_loop had a chance to run. ++ HRESULT hr = WaitForSingleObject(stm->thread_ready_event, INFINITE); ++ XASSERT(hr == WAIT_OBJECT_0); ++ CloseHandle(stm->thread_ready_event); ++ stm->thread_ready_event = 0; ++ + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); + + return CUBEB_OK; +@@ -1950,21 +2516,32 @@ int wasapi_stream_stop(cubeb_stream * stm) + } + } + +- + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); + } + + if (stop_and_join_render_thread(stm)) { +- // This is null if we've given the pointer to the other thread +- if (stm->emergency_bailout.load()) { +- delete stm->emergency_bailout.load(); +- stm->emergency_bailout = nullptr; +- } ++ delete stm->emergency_bailout.load(); ++ stm->emergency_bailout = nullptr; ++ } else { ++ // If we could not join the thread, put the stream in error. ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ return CUBEB_ERROR; + } + + return CUBEB_OK; + } + ++int wasapi_stream_reset_default_device(cubeb_stream * stm) ++{ ++ XASSERT(stm && stm->reconfigure_event); ++ BOOL ok = SetEvent(stm->reconfigure_event); ++ if (!ok) { ++ LOG("SetEvent on reconfigure_event failed: %lx", GetLastError()); ++ return CUBEB_ERROR; ++ } ++ return CUBEB_OK; ++} ++ + int wasapi_stream_get_position(cubeb_stream * stm, uint64_t * position) + { + XASSERT(stm && position); +@@ -2037,253 +2614,329 @@ int wasapi_stream_set_volume(cubeb_stream * stm, float volume) + return CUBEB_OK; + } + +-static char * ++static char const * + wstr_to_utf8(LPCWSTR str) + { +- char * ret = NULL; +- int size; +- +- size = ::WideCharToMultiByte(CP_UTF8, 0, str, -1, ret, 0, NULL, NULL); +- if (size > 0) { +- ret = static_cast(malloc(size)); +- ::WideCharToMultiByte(CP_UTF8, 0, str, -1, ret, size, NULL, NULL); ++ int size = ::WideCharToMultiByte(CP_UTF8, 0, str, -1, nullptr, 0, NULL, NULL); ++ if (size <= 0) { ++ return nullptr; + } + ++ char * ret = static_cast(malloc(size)); ++ ::WideCharToMultiByte(CP_UTF8, 0, str, -1, ret, size, NULL, NULL); + return ret; + } + +-static std::unique_ptr +-utf8_to_wstr(char* str) ++static std::unique_ptr ++utf8_to_wstr(char const * str) + { +- std::unique_ptr ret; +- int size; +- +- size = ::MultiByteToWideChar(CP_UTF8, 0, str, -1, nullptr, 0); +- if (size > 0) { +- ret.reset(new wchar_t[size]); +- ::MultiByteToWideChar(CP_UTF8, 0, str, -1, ret.get(), size); ++ int size = ::MultiByteToWideChar(CP_UTF8, 0, str, -1, nullptr, 0); ++ if (size <= 0) { ++ return nullptr; + } + +- return std::move(ret); ++ std::unique_ptr ret(new wchar_t[size]); ++ ::MultiByteToWideChar(CP_UTF8, 0, str, -1, ret.get(), size); ++ return ret; + } + +-static IMMDevice * ++static com_ptr + wasapi_get_device_node(IMMDeviceEnumerator * enumerator, IMMDevice * dev) + { +- IMMDevice * ret = NULL; +- IDeviceTopology * devtopo = NULL; +- IConnector * connector = NULL; +- +- if (SUCCEEDED(dev->Activate(__uuidof(IDeviceTopology), CLSCTX_ALL, NULL, (void**)&devtopo)) && +- SUCCEEDED(devtopo->GetConnector(0, &connector))) { +- LPWSTR filterid; +- if (SUCCEEDED(connector->GetDeviceIdConnectedTo(&filterid))) { +- if (FAILED(enumerator->GetDevice(filterid, &ret))) ++ com_ptr ret; ++ com_ptr devtopo; ++ com_ptr connector; ++ ++ if (SUCCEEDED(dev->Activate(__uuidof(IDeviceTopology), CLSCTX_ALL, NULL, devtopo.receive_vpp())) && ++ SUCCEEDED(devtopo->GetConnector(0, connector.receive()))) { ++ wchar_t * tmp = nullptr; ++ if (SUCCEEDED(connector->GetDeviceIdConnectedTo(&tmp))) { ++ com_heap_ptr filterid(tmp); ++ if (FAILED(enumerator->GetDevice(filterid.get(), ret.receive()))) + ret = NULL; +- CoTaskMemFree(filterid); + } + } + +- SafeRelease(connector); +- SafeRelease(devtopo); + return ret; + } + + static BOOL + wasapi_is_default_device(EDataFlow flow, ERole role, LPCWSTR device_id, +- IMMDeviceEnumerator * enumerator) ++ IMMDeviceEnumerator * enumerator) + { + BOOL ret = FALSE; +- IMMDevice * dev; ++ com_ptr dev; + HRESULT hr; + +- hr = enumerator->GetDefaultAudioEndpoint(flow, role, &dev); ++ hr = enumerator->GetDefaultAudioEndpoint(flow, role, dev.receive()); + if (SUCCEEDED(hr)) { +- LPWSTR defdevid = NULL; +- if (SUCCEEDED(dev->GetId(&defdevid))) +- ret = (wcscmp(defdevid, device_id) == 0); +- if (defdevid != NULL) +- CoTaskMemFree(defdevid); +- SafeRelease(dev); ++ wchar_t * tmp = nullptr; ++ if (SUCCEEDED(dev->GetId(&tmp))) { ++ com_heap_ptr defdevid(tmp); ++ ret = (wcscmp(defdevid.get(), device_id) == 0); ++ } + } + + return ret; + } + +-static cubeb_device_info * +-wasapi_create_device(IMMDeviceEnumerator * enumerator, IMMDevice * dev) ++int ++wasapi_create_device(cubeb * ctx, cubeb_device_info& ret, IMMDeviceEnumerator * enumerator, IMMDevice * dev) + { +- IMMEndpoint * endpoint = NULL; +- IMMDevice * devnode = NULL; +- IAudioClient * client = NULL; +- cubeb_device_info * ret = NULL; ++ com_ptr endpoint; ++ com_ptr devnode; ++ com_ptr client; + EDataFlow flow; +- LPWSTR device_id = NULL; + DWORD state = DEVICE_STATE_NOTPRESENT; +- IPropertyStore * propstore = NULL; +- PROPVARIANT propvar; ++ com_ptr propstore; + REFERENCE_TIME def_period, min_period; + HRESULT hr; + +- PropVariantInit(&propvar); ++ struct prop_variant : public PROPVARIANT { ++ prop_variant() { PropVariantInit(this); } ++ ~prop_variant() { PropVariantClear(this); } ++ prop_variant(prop_variant const &) = delete; ++ prop_variant & operator=(prop_variant const &) = delete; ++ }; + +- hr = dev->QueryInterface(IID_PPV_ARGS(&endpoint)); +- if (FAILED(hr)) goto done; ++ hr = dev->QueryInterface(IID_PPV_ARGS(endpoint.receive())); ++ if (FAILED(hr)) return CUBEB_ERROR; + + hr = endpoint->GetDataFlow(&flow); +- if (FAILED(hr)) goto done; ++ if (FAILED(hr)) return CUBEB_ERROR; + +- hr = dev->GetId(&device_id); +- if (FAILED(hr)) goto done; ++ wchar_t * tmp = nullptr; ++ hr = dev->GetId(&tmp); ++ if (FAILED(hr)) return CUBEB_ERROR; ++ com_heap_ptr device_id(tmp); ++ ++ char const * device_id_intern = intern_device_id(ctx, device_id.get()); ++ if (!device_id_intern) { ++ return CUBEB_ERROR; ++ } + +- hr = dev->OpenPropertyStore(STGM_READ, &propstore); +- if (FAILED(hr)) goto done; ++ hr = dev->OpenPropertyStore(STGM_READ, propstore.receive()); ++ if (FAILED(hr)) return CUBEB_ERROR; + + hr = dev->GetState(&state); +- if (FAILED(hr)) goto done; +- +- ret = (cubeb_device_info *)calloc(1, sizeof(cubeb_device_info)); ++ if (FAILED(hr)) return CUBEB_ERROR; + +- ret->devid = ret->device_id = wstr_to_utf8(device_id); +- hr = propstore->GetValue(PKEY_Device_FriendlyName, &propvar); ++ ret.device_id = device_id_intern; ++ ret.devid = reinterpret_cast(ret.device_id); ++ prop_variant namevar; ++ hr = propstore->GetValue(PKEY_Device_FriendlyName, &namevar); + if (SUCCEEDED(hr)) +- ret->friendly_name = wstr_to_utf8(propvar.pwszVal); ++ ret.friendly_name = wstr_to_utf8(namevar.pwszVal); + + devnode = wasapi_get_device_node(enumerator, dev); +- if (devnode != NULL) { +- IPropertyStore * ps = NULL; +- hr = devnode->OpenPropertyStore(STGM_READ, &ps); +- if (FAILED(hr)) goto done; ++ if (devnode) { ++ com_ptr ps; ++ hr = devnode->OpenPropertyStore(STGM_READ, ps.receive()); ++ if (FAILED(hr)) return CUBEB_ERROR; + +- PropVariantClear(&propvar); +- hr = ps->GetValue(PKEY_Device_InstanceId, &propvar); ++ prop_variant instancevar; ++ hr = ps->GetValue(PKEY_Device_InstanceId, &instancevar); + if (SUCCEEDED(hr)) { +- ret->group_id = wstr_to_utf8(propvar.pwszVal); ++ ret.group_id = wstr_to_utf8(instancevar.pwszVal); + } +- SafeRelease(ps); + } + +- ret->preferred = CUBEB_DEVICE_PREF_NONE; +- if (wasapi_is_default_device(flow, eConsole, device_id, enumerator)) +- ret->preferred = (cubeb_device_pref)(ret->preferred | CUBEB_DEVICE_PREF_MULTIMEDIA); +- if (wasapi_is_default_device(flow, eCommunications, device_id, enumerator)) +- ret->preferred = (cubeb_device_pref)(ret->preferred | CUBEB_DEVICE_PREF_VOICE); +- if (wasapi_is_default_device(flow, eConsole, device_id, enumerator)) +- ret->preferred = (cubeb_device_pref)(ret->preferred | CUBEB_DEVICE_PREF_NOTIFICATION); ++ ret.preferred = CUBEB_DEVICE_PREF_NONE; ++ if (wasapi_is_default_device(flow, eConsole, device_id.get(), enumerator)) ++ ret.preferred = (cubeb_device_pref)(ret.preferred | CUBEB_DEVICE_PREF_MULTIMEDIA); ++ if (wasapi_is_default_device(flow, eCommunications, device_id.get(), enumerator)) ++ ret.preferred = (cubeb_device_pref)(ret.preferred | CUBEB_DEVICE_PREF_VOICE); ++ if (wasapi_is_default_device(flow, eConsole, device_id.get(), enumerator)) ++ ret.preferred = (cubeb_device_pref)(ret.preferred | CUBEB_DEVICE_PREF_NOTIFICATION); + +- if (flow == eRender) ret->type = CUBEB_DEVICE_TYPE_OUTPUT; +- else if (flow == eCapture) ret->type = CUBEB_DEVICE_TYPE_INPUT; ++ if (flow == eRender) ret.type = CUBEB_DEVICE_TYPE_OUTPUT; ++ else if (flow == eCapture) ret.type = CUBEB_DEVICE_TYPE_INPUT; + switch (state) { + case DEVICE_STATE_ACTIVE: +- ret->state = CUBEB_DEVICE_STATE_ENABLED; ++ ret.state = CUBEB_DEVICE_STATE_ENABLED; + break; + case DEVICE_STATE_UNPLUGGED: +- ret->state = CUBEB_DEVICE_STATE_UNPLUGGED; ++ ret.state = CUBEB_DEVICE_STATE_UNPLUGGED; + break; + default: +- ret->state = CUBEB_DEVICE_STATE_DISABLED; ++ ret.state = CUBEB_DEVICE_STATE_DISABLED; + break; + }; + +- ret->format = CUBEB_DEVICE_FMT_F32NE; /* cubeb only supports 32bit float at the moment */ +- ret->default_format = CUBEB_DEVICE_FMT_F32NE; +- PropVariantClear(&propvar); +- hr = propstore->GetValue(PKEY_AudioEngine_DeviceFormat, &propvar); +- if (SUCCEEDED(hr) && propvar.vt == VT_BLOB) { +- if (propvar.blob.cbSize == sizeof(PCMWAVEFORMAT)) { +- const PCMWAVEFORMAT * pcm = reinterpret_cast(propvar.blob.pBlobData); ++ ret.format = static_cast(CUBEB_DEVICE_FMT_F32NE | CUBEB_DEVICE_FMT_S16NE); ++ ret.default_format = CUBEB_DEVICE_FMT_F32NE; ++ prop_variant fmtvar; ++ hr = propstore->GetValue(PKEY_AudioEngine_DeviceFormat, &fmtvar); ++ if (SUCCEEDED(hr) && fmtvar.vt == VT_BLOB) { ++ if (fmtvar.blob.cbSize == sizeof(PCMWAVEFORMAT)) { ++ const PCMWAVEFORMAT * pcm = reinterpret_cast(fmtvar.blob.pBlobData); + +- ret->max_rate = ret->min_rate = ret->default_rate = pcm->wf.nSamplesPerSec; +- ret->max_channels = pcm->wf.nChannels; +- } else if (propvar.blob.cbSize >= sizeof(WAVEFORMATEX)) { +- WAVEFORMATEX* wfx = reinterpret_cast(propvar.blob.pBlobData); ++ ret.max_rate = ret.min_rate = ret.default_rate = pcm->wf.nSamplesPerSec; ++ ret.max_channels = pcm->wf.nChannels; ++ } else if (fmtvar.blob.cbSize >= sizeof(WAVEFORMATEX)) { ++ WAVEFORMATEX* wfx = reinterpret_cast(fmtvar.blob.pBlobData); + +- if (propvar.blob.cbSize >= sizeof(WAVEFORMATEX) + wfx->cbSize || ++ if (fmtvar.blob.cbSize >= sizeof(WAVEFORMATEX) + wfx->cbSize || + wfx->wFormatTag == WAVE_FORMAT_PCM) { +- ret->max_rate = ret->min_rate = ret->default_rate = wfx->nSamplesPerSec; +- ret->max_channels = wfx->nChannels; ++ ret.max_rate = ret.min_rate = ret.default_rate = wfx->nSamplesPerSec; ++ ret.max_channels = wfx->nChannels; + } + } + } + +- if (SUCCEEDED(dev->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&client)) && ++ if (SUCCEEDED(dev->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, client.receive_vpp())) && + SUCCEEDED(client->GetDevicePeriod(&def_period, &min_period))) { +- ret->latency_lo = hns_to_frames(ret->default_rate, min_period); +- ret->latency_hi = hns_to_frames(ret->default_rate, def_period); ++ ret.latency_lo = hns_to_frames(ret.default_rate, min_period); ++ ret.latency_hi = hns_to_frames(ret.default_rate, def_period); + } else { +- ret->latency_lo = 0; +- ret->latency_hi = 0; +- } +- SafeRelease(client); +- +-done: +- SafeRelease(devnode); +- SafeRelease(endpoint); +- SafeRelease(propstore); +- if (device_id != NULL) +- CoTaskMemFree(device_id); +- PropVariantClear(&propvar); +- return ret; ++ ret.latency_lo = 0; ++ ret.latency_hi = 0; ++ } ++ ++ return CUBEB_OK; + } + + static int + wasapi_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** out) ++ cubeb_device_collection * out) + { +- auto_com com; +- IMMDeviceEnumerator * enumerator; +- IMMDeviceCollection * collection; +- IMMDevice * dev; +- cubeb_device_info * cur; ++ com_ptr enumerator; ++ com_ptr collection; + HRESULT hr; + UINT cc, i; + EDataFlow flow; + +- *out = NULL; +- +- if (!com.ok()) +- return CUBEB_ERROR; +- + hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, +- CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&enumerator)); ++ CLSCTX_INPROC_SERVER, IID_PPV_ARGS(enumerator.receive())); + if (FAILED(hr)) { +- LOG("Could not get device enumerator: %x", hr); ++ LOG("Could not get device enumerator: %lx", hr); + return CUBEB_ERROR; + } + + if (type == CUBEB_DEVICE_TYPE_OUTPUT) flow = eRender; + else if (type == CUBEB_DEVICE_TYPE_INPUT) flow = eCapture; +- else if (type & (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_INPUT)) flow = eAll; ++ else if (type & (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT)) flow = eAll; + else return CUBEB_ERROR; + +- hr = enumerator->EnumAudioEndpoints(flow, DEVICE_STATEMASK_ALL, &collection); ++ hr = enumerator->EnumAudioEndpoints(flow, DEVICE_STATEMASK_ALL, collection.receive()); + if (FAILED(hr)) { +- LOG("Could not enumerate audio endpoints: %x", hr); ++ LOG("Could not enumerate audio endpoints: %lx", hr); + return CUBEB_ERROR; + } + + hr = collection->GetCount(&cc); + if (FAILED(hr)) { +- LOG("IMMDeviceCollection::GetCount() failed: %x", hr); ++ LOG("IMMDeviceCollection::GetCount() failed: %lx", hr); + return CUBEB_ERROR; + } +- *out = (cubeb_device_collection *) malloc(sizeof(cubeb_device_collection) + +- sizeof(cubeb_device_info*) * (cc > 0 ? cc - 1 : 0)); +- if (!*out) { ++ cubeb_device_info * devices = new cubeb_device_info[cc]; ++ if (!devices) + return CUBEB_ERROR; +- } +- (*out)->count = 0; ++ ++ PodZero(devices, cc); ++ out->count = 0; + for (i = 0; i < cc; i++) { +- hr = collection->Item(i, &dev); ++ com_ptr dev; ++ hr = collection->Item(i, dev.receive()); ++ if (FAILED(hr)) { ++ LOG("IMMDeviceCollection::Item(%u) failed: %lx", i-1, hr); ++ continue; ++ } ++ if (wasapi_create_device(context, devices[out->count], ++ enumerator.get(), dev.get()) == CUBEB_OK) { ++ out->count += 1; ++ } ++ } ++ ++ out->device = devices; ++ return CUBEB_OK; ++} ++ ++static int ++wasapi_device_collection_destroy(cubeb * /*ctx*/, cubeb_device_collection * collection) ++{ ++ XASSERT(collection); ++ ++ for (size_t n = 0; n < collection->count; n++) { ++ cubeb_device_info& dev = collection->device[n]; ++ delete [] dev.friendly_name; ++ delete [] dev.group_id; ++ } ++ ++ delete [] collection->device; ++ return CUBEB_OK; ++} ++ ++static int ++wasapi_register_device_collection_changed(cubeb * context, ++ cubeb_device_type devtype, ++ cubeb_device_collection_changed_callback collection_changed_callback, ++ void * user_ptr) ++{ ++ if (devtype == CUBEB_DEVICE_TYPE_UNKNOWN) { ++ return CUBEB_ERROR_INVALID_PARAMETER; ++ } ++ ++ if (collection_changed_callback) { ++ // Make sure it has been unregistered first. ++ XASSERT(((devtype & CUBEB_DEVICE_TYPE_INPUT) && ++ !context->input_collection_changed_callback) || ++ ((devtype & CUBEB_DEVICE_TYPE_OUTPUT) && ++ !context->output_collection_changed_callback)); ++ ++ // Stop the notification client. Notifications arrive on ++ // a separate thread. We stop them here to avoid ++ // synchronization issues during the update. ++ if (context->device_collection_enumerator.get()) { ++ HRESULT hr = unregister_collection_notification_client(context); ++ if (FAILED(hr)) { ++ return CUBEB_ERROR; ++ } ++ } ++ ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ context->input_collection_changed_callback = collection_changed_callback; ++ context->input_collection_changed_user_ptr = user_ptr; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ context->output_collection_changed_callback = collection_changed_callback; ++ context->output_collection_changed_user_ptr = user_ptr; ++ } ++ ++ HRESULT hr = register_collection_notification_client(context); ++ if (FAILED(hr)) { ++ return CUBEB_ERROR; ++ } ++ } else { ++ if (!context->device_collection_enumerator.get()) { ++ // Already unregistered, ignore it. ++ return CUBEB_OK; ++ } ++ ++ HRESULT hr = unregister_collection_notification_client(context); + if (FAILED(hr)) { +- LOG("IMMDeviceCollection::Item(%u) failed: %x", i-1, hr); +- } else if ((cur = wasapi_create_device(enumerator, dev)) != NULL) { +- (*out)->device[(*out)->count++] = cur; ++ return CUBEB_ERROR; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ context->input_collection_changed_callback = nullptr; ++ context->input_collection_changed_user_ptr = nullptr; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ context->output_collection_changed_callback = nullptr; ++ context->output_collection_changed_user_ptr = nullptr; ++ } ++ ++ // If after the updates we still have registered ++ // callbacks restart the notification client. ++ if (context->input_collection_changed_callback || ++ context->output_collection_changed_callback) { ++ hr = register_collection_notification_client(context); ++ if (FAILED(hr)) { ++ return CUBEB_ERROR; ++ } + } + } + +- SafeRelease(collection); +- SafeRelease(enumerator); + return CUBEB_OK; + } + +@@ -2294,18 +2947,19 @@ cubeb_ops const wasapi_ops = { + /*.get_min_latency =*/ wasapi_get_min_latency, + /*.get_preferred_sample_rate =*/ wasapi_get_preferred_sample_rate, + /*.enumerate_devices =*/ wasapi_enumerate_devices, ++ /*.device_collection_destroy =*/ wasapi_device_collection_destroy, + /*.destroy =*/ wasapi_destroy, + /*.stream_init =*/ wasapi_stream_init, + /*.stream_destroy =*/ wasapi_stream_destroy, + /*.stream_start =*/ wasapi_stream_start, + /*.stream_stop =*/ wasapi_stream_stop, ++ /*.stream_reset_default_device =*/ wasapi_stream_reset_default_device, + /*.stream_get_position =*/ wasapi_stream_get_position, + /*.stream_get_latency =*/ wasapi_stream_get_latency, + /*.stream_set_volume =*/ wasapi_stream_set_volume, +- /*.stream_set_panning =*/ NULL, + /*.stream_get_current_device =*/ NULL, + /*.stream_device_destroy =*/ NULL, + /*.stream_register_device_changed_callback =*/ NULL, +- /*.register_device_collection_changed =*/ NULL ++ /*.register_device_collection_changed =*/ wasapi_register_device_collection_changed, + }; + } // namespace anonymous +diff --git a/media/libcubeb/src/cubeb_winmm.c b/media/libcubeb/src/cubeb_winmm.c +index 585d11e89..e064ca079 100644 +--- a/media/libcubeb/src/cubeb_winmm.c ++++ b/media/libcubeb/src/cubeb_winmm.c +@@ -4,7 +4,6 @@ + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ +-#define __MSVCRT_VERSION__ 0x0700 + #undef WINVER + #define WINVER 0x0501 + #undef WIN32_LEAN_AND_MEAN +@@ -93,11 +92,13 @@ struct cubeb { + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + cubeb_stream_params params; + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; +- void * user_ptr; + WAVEHDR buffers[NBUFS]; + size_t buffer_size; + int next_buffer; +@@ -402,6 +403,7 @@ winmm_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + + XASSERT(context); + XASSERT(stream); ++ XASSERT(output_stream_params); + + if (input_stream_params) { + /* Capture support not yet implemented. */ +@@ -413,6 +415,11 @@ winmm_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + return CUBEB_ERROR_DEVICE_UNAVAILABLE; + } + ++ if (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ /* Loopback is not supported */ ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ + *stream = NULL; + + memset(&wfx, 0, sizeof(wfx)); +@@ -512,7 +519,6 @@ winmm_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + return CUBEB_ERROR; + } + +- + for (i = 0; i < NBUFS; ++i) { + WAVEHDR * hdr = &stm->buffers[i]; + +@@ -769,7 +775,6 @@ winmm_calculate_device_rate(cubeb_device_info * info, DWORD formats) + } + } + +- + #define MM_S16_MASK (WAVE_FORMAT_1M16 | WAVE_FORMAT_1S16 | WAVE_FORMAT_2M16 | WAVE_FORMAT_2S16 | WAVE_FORMAT_4M16 | \ + WAVE_FORMAT_4S16 | WAVE_FORMAT_48M16 | WAVE_FORMAT_48S16 | WAVE_FORMAT_96M16 | WAVE_FORMAT_96S16) + static int +@@ -803,11 +808,11 @@ winmm_query_supported_formats(UINT devid, DWORD formats, + static char * + guid_to_cstr(LPGUID guid) + { +- char * ret = malloc(sizeof(char) * 40); ++ char * ret = malloc(40); + if (!ret) { + return NULL; + } +- _snprintf_s(ret, sizeof(char) * 40, _TRUNCATE, ++ _snprintf_s(ret, 40, _TRUNCATE, + "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", + guid->Data1, guid->Data2, guid->Data3, + guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], +@@ -821,12 +826,12 @@ winmm_query_preferred_out_device(UINT devid) + DWORD mmpref = WAVE_MAPPER, compref = WAVE_MAPPER, status; + cubeb_device_pref ret = CUBEB_DEVICE_PREF_NONE; + +- if (waveOutMessage((HWAVEOUT)(size_t)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, ++ if (waveOutMessage((HWAVEOUT) WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, + (DWORD_PTR)&mmpref, (DWORD_PTR)&status) == MMSYSERR_NOERROR && + devid == mmpref) + ret |= CUBEB_DEVICE_PREF_MULTIMEDIA | CUBEB_DEVICE_PREF_NOTIFICATION; + +- if (waveOutMessage((HWAVEOUT)(size_t)WAVE_MAPPER, DRVM_MAPPER_CONSOLEVOICECOM_GET, ++ if (waveOutMessage((HWAVEOUT) WAVE_MAPPER, DRVM_MAPPER_CONSOLEVOICECOM_GET, + (DWORD_PTR)&compref, (DWORD_PTR)&status) == MMSYSERR_NOERROR && + devid == compref) + ret |= CUBEB_DEVICE_PREF_VOICE; +@@ -837,7 +842,7 @@ winmm_query_preferred_out_device(UINT devid) + static char * + device_id_idx(UINT devid) + { +- char * ret = (char *)malloc(sizeof(char)*16); ++ char * ret = malloc(16); + if (!ret) { + return NULL; + } +@@ -845,16 +850,11 @@ device_id_idx(UINT devid) + return ret; + } + +-static cubeb_device_info * +-winmm_create_device_from_outcaps2(LPWAVEOUTCAPS2A caps, UINT devid) ++static void ++winmm_create_device_from_outcaps2(cubeb_device_info * ret, LPWAVEOUTCAPS2A caps, UINT devid) + { +- cubeb_device_info * ret; +- +- ret = calloc(1, sizeof(cubeb_device_info)); +- if (!ret) { +- return NULL; +- } +- ret->devid = (cubeb_devid)(size_t)devid; ++ XASSERT(ret); ++ ret->devid = (cubeb_devid) devid; + ret->device_id = device_id_idx(devid); + ret->friendly_name = _strdup(caps->szPname); + ret->group_id = guid_to_cstr(&caps->ProductGuid); +@@ -869,23 +869,16 @@ winmm_create_device_from_outcaps2(LPWAVEOUTCAPS2A caps, UINT devid) + winmm_query_supported_formats(devid, caps->dwFormats, + &ret->format, &ret->default_format); + +- /* Hardcoed latency estimates... */ ++ /* Hardcoded latency estimates... */ + ret->latency_lo = 100 * ret->default_rate / 1000; + ret->latency_hi = 200 * ret->default_rate / 1000; +- +- return ret; + } + +-static cubeb_device_info * +-winmm_create_device_from_outcaps(LPWAVEOUTCAPSA caps, UINT devid) ++static void ++winmm_create_device_from_outcaps(cubeb_device_info * ret, LPWAVEOUTCAPSA caps, UINT devid) + { +- cubeb_device_info * ret; +- +- ret = calloc(1, sizeof(cubeb_device_info)); +- if (!ret) { +- return NULL; +- } +- ret->devid = (cubeb_devid)(size_t)devid; ++ XASSERT(ret); ++ ret->devid = (cubeb_devid) devid; + ret->device_id = device_id_idx(devid); + ret->friendly_name = _strdup(caps->szPname); + ret->group_id = NULL; +@@ -900,11 +893,9 @@ winmm_create_device_from_outcaps(LPWAVEOUTCAPSA caps, UINT devid) + winmm_query_supported_formats(devid, caps->dwFormats, + &ret->format, &ret->default_format); + +- /* Hardcoed latency estimates... */ ++ /* Hardcoded latency estimates... */ + ret->latency_lo = 100 * ret->default_rate / 1000; + ret->latency_hi = 200 * ret->default_rate / 1000; +- +- return ret; + } + + static cubeb_device_pref +@@ -913,12 +904,12 @@ winmm_query_preferred_in_device(UINT devid) + DWORD mmpref = WAVE_MAPPER, compref = WAVE_MAPPER, status; + cubeb_device_pref ret = CUBEB_DEVICE_PREF_NONE; + +- if (waveInMessage((HWAVEIN)(size_t)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, ++ if (waveInMessage((HWAVEIN) WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, + (DWORD_PTR)&mmpref, (DWORD_PTR)&status) == MMSYSERR_NOERROR && + devid == mmpref) + ret |= CUBEB_DEVICE_PREF_MULTIMEDIA | CUBEB_DEVICE_PREF_NOTIFICATION; + +- if (waveInMessage((HWAVEIN)(size_t)WAVE_MAPPER, DRVM_MAPPER_CONSOLEVOICECOM_GET, ++ if (waveInMessage((HWAVEIN) WAVE_MAPPER, DRVM_MAPPER_CONSOLEVOICECOM_GET, + (DWORD_PTR)&compref, (DWORD_PTR)&status) == MMSYSERR_NOERROR && + devid == compref) + ret |= CUBEB_DEVICE_PREF_VOICE; +@@ -926,16 +917,11 @@ winmm_query_preferred_in_device(UINT devid) + return ret; + } + +-static cubeb_device_info * +-winmm_create_device_from_incaps2(LPWAVEINCAPS2A caps, UINT devid) ++static void ++winmm_create_device_from_incaps2(cubeb_device_info * ret, LPWAVEINCAPS2A caps, UINT devid) + { +- cubeb_device_info * ret; +- +- ret = calloc(1, sizeof(cubeb_device_info)); +- if (!ret) { +- return NULL; +- } +- ret->devid = (cubeb_devid)(size_t)devid; ++ XASSERT(ret); ++ ret->devid = (cubeb_devid) devid; + ret->device_id = device_id_idx(devid); + ret->friendly_name = _strdup(caps->szPname); + ret->group_id = guid_to_cstr(&caps->ProductGuid); +@@ -950,23 +936,16 @@ winmm_create_device_from_incaps2(LPWAVEINCAPS2A caps, UINT devid) + winmm_query_supported_formats(devid, caps->dwFormats, + &ret->format, &ret->default_format); + +- /* Hardcoed latency estimates... */ ++ /* Hardcoded latency estimates... */ + ret->latency_lo = 100 * ret->default_rate / 1000; + ret->latency_hi = 200 * ret->default_rate / 1000; +- +- return ret; + } + +-static cubeb_device_info * +-winmm_create_device_from_incaps(LPWAVEINCAPSA caps, UINT devid) ++static void ++winmm_create_device_from_incaps(cubeb_device_info * ret, LPWAVEINCAPSA caps, UINT devid) + { +- cubeb_device_info * ret; +- +- ret = calloc(1, sizeof(cubeb_device_info)); +- if (!ret) { +- return NULL; +- } +- ret->devid = (cubeb_devid)(size_t)devid; ++ XASSERT(ret); ++ ret->devid = (cubeb_devid) devid; + ret->device_id = device_id_idx(devid); + ret->friendly_name = _strdup(caps->szPname); + ret->group_id = NULL; +@@ -981,29 +960,25 @@ winmm_create_device_from_incaps(LPWAVEINCAPSA caps, UINT devid) + winmm_query_supported_formats(devid, caps->dwFormats, + &ret->format, &ret->default_format); + +- /* Hardcoed latency estimates... */ ++ /* Hardcoded latency estimates... */ + ret->latency_lo = 100 * ret->default_rate / 1000; + ret->latency_hi = 200 * ret->default_rate / 1000; +- +- return ret; + } + + static int + winmm_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { + UINT i, incount, outcount, total; +- cubeb_device_info * cur; ++ cubeb_device_info * devices; ++ cubeb_device_info * dev; + + outcount = waveOutGetNumDevs(); + incount = waveInGetNumDevs(); + total = outcount + incount; +- if (total > 0) { +- total -= 1; +- } +- *collection = malloc(sizeof(cubeb_device_collection) + +- sizeof(cubeb_device_info*) * total); +- (*collection)->count = 0; ++ ++ devices = calloc(total, sizeof(cubeb_device_info)); ++ collection->count = 0; + + if (type & CUBEB_DEVICE_TYPE_OUTPUT) { + WAVEOUTCAPSA woc; +@@ -1013,12 +988,13 @@ winmm_enumerate_devices(cubeb * context, cubeb_device_type type, + ZeroMemory(&woc2, sizeof(woc2)); + + for (i = 0; i < outcount; i++) { +- if ((waveOutGetDevCapsA(i, (LPWAVEOUTCAPSA)&woc2, sizeof(woc2)) == MMSYSERR_NOERROR && +- (cur = winmm_create_device_from_outcaps2(&woc2, i)) != NULL) || +- (waveOutGetDevCapsA(i, &woc, sizeof(woc)) == MMSYSERR_NOERROR && +- (cur = winmm_create_device_from_outcaps(&woc, i)) != NULL) +- ) { +- (*collection)->device[(*collection)->count++] = cur; ++ dev = &devices[collection->count]; ++ if (waveOutGetDevCapsA(i, (LPWAVEOUTCAPSA)&woc2, sizeof(woc2)) == MMSYSERR_NOERROR) { ++ winmm_create_device_from_outcaps2(dev, &woc2, i); ++ collection->count += 1; ++ } else if (waveOutGetDevCapsA(i, &woc, sizeof(woc)) == MMSYSERR_NOERROR) { ++ winmm_create_device_from_outcaps(dev, &woc, i); ++ collection->count += 1; + } + } + } +@@ -1031,16 +1007,39 @@ winmm_enumerate_devices(cubeb * context, cubeb_device_type type, + ZeroMemory(&wic2, sizeof(wic2)); + + for (i = 0; i < incount; i++) { +- if ((waveInGetDevCapsA(i, (LPWAVEINCAPSA)&wic2, sizeof(wic2)) == MMSYSERR_NOERROR && +- (cur = winmm_create_device_from_incaps2(&wic2, i)) != NULL) || +- (waveInGetDevCapsA(i, &wic, sizeof(wic)) == MMSYSERR_NOERROR && +- (cur = winmm_create_device_from_incaps(&wic, i)) != NULL) +- ) { +- (*collection)->device[(*collection)->count++] = cur; ++ dev = &devices[collection->count]; ++ if (waveInGetDevCapsA(i, (LPWAVEINCAPSA)&wic2, sizeof(wic2)) == MMSYSERR_NOERROR) { ++ winmm_create_device_from_incaps2(dev, &wic2, i); ++ collection->count += 1; ++ } else if (waveInGetDevCapsA(i, &wic, sizeof(wic)) == MMSYSERR_NOERROR) { ++ winmm_create_device_from_incaps(dev, &wic, i); ++ collection->count += 1; + } + } + } + ++ collection->device = devices; ++ ++ return CUBEB_OK; ++} ++ ++static int ++winmm_device_collection_destroy(cubeb * ctx, ++ cubeb_device_collection * collection) ++{ ++ uint32_t i; ++ XASSERT(collection); ++ ++ (void) ctx; ++ ++ for (i = 0; i < collection->count; i++) { ++ free((void *) collection->device[i].device_id); ++ free((void *) collection->device[i].friendly_name); ++ free((void *) collection->device[i].group_id); ++ free((void *) collection->device[i].vendor_name); ++ } ++ ++ free(collection->device); + return CUBEB_OK; + } + +@@ -1051,15 +1050,16 @@ static struct cubeb_ops const winmm_ops = { + /*.get_min_latency=*/ winmm_get_min_latency, + /*.get_preferred_sample_rate =*/ winmm_get_preferred_sample_rate, + /*.enumerate_devices =*/ winmm_enumerate_devices, ++ /*.device_collection_destroy =*/ winmm_device_collection_destroy, + /*.destroy =*/ winmm_destroy, + /*.stream_init =*/ winmm_stream_init, + /*.stream_destroy =*/ winmm_stream_destroy, + /*.stream_start =*/ winmm_stream_start, + /*.stream_stop =*/ winmm_stream_stop, ++ /*.stream_reset_default_device =*/ NULL, + /*.stream_get_position =*/ winmm_stream_get_position, + /*.stream_get_latency = */ winmm_stream_get_latency, + /*.stream_set_volume =*/ winmm_stream_set_volume, +- /*.stream_set_panning =*/ NULL, + /*.stream_get_current_device =*/ NULL, + /*.stream_device_destroy =*/ NULL, + /*.stream_register_device_changed_callback=*/ NULL, +diff --git a/media/libcubeb/src/moz.build b/media/libcubeb/src/moz.build +index 772aa6d39..4b36b80fb 100644 +--- a/media/libcubeb/src/moz.build ++++ b/media/libcubeb/src/moz.build +@@ -10,7 +10,11 @@ Library('cubeb') + + SOURCES += [ + 'cubeb.c', +- 'cubeb_panner.cpp' ++ 'cubeb_log.cpp', ++ 'cubeb_mixer.cpp', ++ 'cubeb_panner.cpp', ++ 'cubeb_strings.c', ++ 'cubeb_utils.cpp' + ] + + if CONFIG['MOZ_ALSA']: +@@ -76,6 +80,7 @@ if CONFIG['OS_TARGET'] == 'WINNT': + if CONFIG['OS_TARGET'] == 'Android': + SOURCES += ['cubeb_opensl.c'] + SOURCES += ['cubeb_resampler.cpp'] ++ SOURCES += ['cubeb-jni.cpp'] + DEFINES['USE_OPENSL'] = True + SOURCES += [ + 'cubeb_audiotrack.c', +@@ -85,6 +90,7 @@ if CONFIG['OS_TARGET'] == 'Android': + FINAL_LIBRARY = 'gkmedias' + + CFLAGS += CONFIG['MOZ_ALSA_CFLAGS'] ++CFLAGS += CONFIG['MOZ_JACK_CFLAGS'] + CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS'] + + # We allow warnings for third-party code that can be updated from upstream. +diff --git a/media/libcubeb/unresampled-frames.patch b/media/libcubeb/unresampled-frames.patch +deleted file mode 100644 +index 714f3d4ba..000000000 +--- a/media/libcubeb/unresampled-frames.patch ++++ /dev/null +@@ -1,36 +0,0 @@ +-From 46d12e9ae6fa9c233bc32812b13185ee7df8d3fd Mon Sep 17 00:00:00 2001 +-From: Paul Adenot +-Date: Thu, 10 Nov 2016 06:20:16 +0100 +-Subject: [PATCH] Prevent underflowing the number of input frames needed in +- input when resampling. (#188) +- +---- +- src/cubeb_resampler_internal.h | 12 +++++++++--- +- 1 file changed, 9 insertions(+), 3 deletions(-) +- +-diff --git a/src/cubeb_resampler_internal.h b/src/cubeb_resampler_internal.h +-index e165cc2..3c37a04 100644 +---- a/src/cubeb_resampler_internal.h +-+++ b/src/cubeb_resampler_internal.h +-@@ -263,9 +263,15 @@ public: +- * number of output frames will be exactly equal. */ +- uint32_t input_needed_for_output(uint32_t output_frame_count) +- { +-- return (uint32_t)ceilf((output_frame_count - samples_to_frames(resampling_out_buffer.length())) +-- * resampling_ratio); +-- +-+ int32_t unresampled_frames_left = samples_to_frames(resampling_in_buffer.length()); +-+ int32_t resampled_frames_left = samples_to_frames(resampling_out_buffer.length()); +-+ float input_frames_needed = +-+ (output_frame_count - unresampled_frames_left) * resampling_ratio +-+ - resampled_frames_left; +-+ if (input_frames_needed < 0) { +-+ return 0; +-+ } +-+ return (uint32_t)ceilf(input_frames_needed); +- } +- +- /** Returns a pointer to the input buffer, that contains empty space for at +--- +-2.7.4 +- +diff --git a/media/libcubeb/update.sh b/media/libcubeb/update.sh +index 235b963e2..0e8d21456 100755 +--- a/media/libcubeb/update.sh ++++ b/media/libcubeb/update.sh +@@ -1,6 +1,11 @@ ++#!/bin/bash + # Usage: sh update.sh ++ + set -e + ++[[ -n "$1" ]] || ( echo "syntax: $0 update_src_directory"; exit 1 ) ++[[ -e "$1/src/cubeb.c" ]] || ( echo "$1: cubeb not found"; exit 1 ) ++ + cp $1/AUTHORS . + cp $1/LICENSE . + cp $1/README.md . +@@ -11,21 +16,32 @@ cp $1/src/cubeb-internal.h src + cp $1/src/cubeb-speex-resampler.h src + cp $1/src/cubeb.c src + cp $1/src/cubeb_alsa.c src +-cp $1/src/cubeb_log.h src ++cp $1/src/cubeb_array_queue.h src + cp $1/src/cubeb_audiotrack.c src + cp $1/src/cubeb_audiounit.cpp src +-cp $1/src/cubeb_osx_run_loop.h src + cp $1/src/cubeb_jack.cpp src ++cp $1/src/cubeb_log.cpp src ++cp $1/src/cubeb_log.h src ++cp $1/src/cubeb_mixer.cpp src ++cp $1/src/cubeb_mixer.h src + cp $1/src/cubeb_opensl.c src +-cp $1/src/cubeb_panner.cpp src +-cp $1/src/cubeb_panner.h src ++cp $1/src/cubeb-jni.cpp src ++cp $1/src/cubeb-jni.h src ++cp $1/src/android/cubeb-output-latency.h src/android ++cp $1/src/android/cubeb_media_library.h src/android ++cp $1/src/cubeb_osx_run_loop.h src + cp $1/src/cubeb_pulse.c src + cp $1/src/cubeb_resampler.cpp src + cp $1/src/cubeb_resampler.h src + cp $1/src/cubeb_resampler_internal.h src + cp $1/src/cubeb_ring_array.h src ++cp $1/src/cubeb_ringbuffer.h src + cp $1/src/cubeb_sndio.c src ++cp $1/src/cubeb_strings.c src ++cp $1/src/cubeb_strings.h src ++cp $1/src/cubeb_sun.c src + cp $1/src/cubeb_utils.h src ++cp $1/src/cubeb_utils.cpp src + cp $1/src/cubeb_utils_unix.h src + cp $1/src/cubeb_utils_win.h src + cp $1/src/cubeb_wasapi.cpp src +@@ -43,7 +59,12 @@ cp $1/test/test_utils.cpp tests/test_utils.cpp + + if [ -d $1/.git ]; then + rev=$(cd $1 && git rev-parse --verify HEAD) ++ date=$(cd $1 && git show -s --format=%ci HEAD) + dirty=$(cd $1 && git diff-index --name-only HEAD) ++ set +e ++ pre_rev=$(grep -o '[[:xdigit:]]\{40\}' moz.yaml) ++ commits=$(cd $1 && git log --pretty=format:'%h - %s' $pre_rev..$rev) ++ set -e + fi + + if [ -n "$rev" ]; then +@@ -52,38 +73,18 @@ if [ -n "$rev" ]; then + version=$version-dirty + echo "WARNING: updating from a dirty git repository." + fi +- sed -i.bak -e "/The git commit ID used was/ s/[0-9a-f]\{40\}\(-dirty\)\{0,1\}\./$version./" README_MOZILLA +- rm README_MOZILLA.bak ++ sed -i.bak -e "s/^ *release:.*/ release: \"$version ($date)\"/" moz.yaml ++ if [[ ! "$( grep "$version" moz.yaml )" ]]; then ++ echo "Updating moz.yaml failed." ++ exit 1 ++ fi ++ rm moz.yaml.bak ++ [[ -n "$commits" ]] && echo -e "Pick commits:\n$commits" + else +- echo "Remember to update README_MOZILLA with the version details." ++ echo "Remember to update moz.yaml with the version details." + fi + +-echo "Applying a patch on top of $version" +-patch -p1 < ./unresampled-frames.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./bug1302231_emergency_bailout.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./osx-linearize-operations.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./prevent-double-free.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./bug1292803_pulse_assert.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./uplift-wasapi-part-to-beta.patch +- +-echo "Applying a patch on top of $version" +-patch -p3 < ./fix-crashes.patch +- +-echo "Applying a patch on top of $version" +-patch -p3 < ./uplift-part-of-f07ee6d-esr52.patch +- +-echo "Applying a patch on top of $version" +-patch -p3 < ./uplift-system-listener-patch.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./uplift-patch-7a4c711.patch ++echo "Applying disable-assert.patch on top of $rev" ++patch -p3 < disable-assert.patch ++echo "Applying disable-iaudioclient3.patch on top of $rev" ++patch -p3 < disable-iaudioclient3.patch +diff --git a/media/libcubeb/uplift-part-of-f07ee6d-esr52.patch b/media/libcubeb/uplift-part-of-f07ee6d-esr52.patch +deleted file mode 100644 +index 0eb1aca82..000000000 +--- a/media/libcubeb/uplift-part-of-f07ee6d-esr52.patch ++++ /dev/null +@@ -1,167 +0,0 @@ +-# HG changeset patch +-# User Alex Chronopoulos +-# Parent 00c051cd38c7a6cb3178fd0890d52056f83abfdc +-Bug 1345049 - Uplift part of cubeb upstream f07ee6d to esr52. r=padenot. a=xxxxxx +- +-diff --git a/media/libcubeb/src/cubeb_audiounit.cpp b/media/libcubeb/src/cubeb_audiounit.cpp +---- a/media/libcubeb/src/cubeb_audiounit.cpp +-+++ b/media/libcubeb/src/cubeb_audiounit.cpp +-@@ -590,33 +590,43 @@ audiounit_get_input_device_id(AudioDevic +- device_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- return CUBEB_OK; +- } +- +-+static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); +-+static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); +-+ +- static int +- audiounit_reinit_stream(cubeb_stream * stm, bool is_started) +- { +-+ auto_lock context_lock(stm->context->mutex); +- if (is_started) { +- audiounit_stream_stop_internal(stm); +- } +- +- { +- auto_lock lock(stm->mutex); +-+ float volume = 0.0; +-+ int vol_rv = audiounit_stream_get_volume(stm, &volume); +- +- audiounit_close_stream(stm); +- +- if (audiounit_setup_stream(stm) != CUBEB_OK) { +- LOG("(%p) Stream reinit failed.", stm); +- return CUBEB_ERROR; +- } +- +-+ if (vol_rv == CUBEB_OK) { +-+ audiounit_stream_set_volume(stm, volume); +-+ } +-+ +- // Reset input frames to force new stream pre-buffer +- // silence if needed, check `is_extra_input_needed()` +- stm->frames_read = 0; +- +- // If the stream was running, start it again. +- if (is_started) { +- audiounit_stream_start_internal(stm); +- } +-@@ -1007,20 +1017,22 @@ audiounit_get_preferred_sample_rate(cube +- static OSStatus audiounit_remove_device_listener(cubeb * context); +- +- static void +- audiounit_destroy(cubeb * ctx) +- { +- // Disabling this assert for bug 1083664 -- we seem to leak a stream +- // assert(ctx->active_streams == 0); +- +-- /* Unregister the callback if necessary. */ +-- if(ctx->collection_changed_callback) { +-+ { +- auto_lock lock(ctx->mutex); +-- audiounit_remove_device_listener(ctx); +-+ /* Unregister the callback if necessary. */ +-+ if(ctx->collection_changed_callback) { +-+ audiounit_remove_device_listener(ctx); +-+ } +- } +- +- ctx->~cubeb(); +- free(ctx); +- } +- +- static void audiounit_stream_destroy(cubeb_stream * stm); +- +-@@ -1861,17 +1873,17 @@ audiounit_close_stream(cubeb_stream *stm +- cubeb_resampler_destroy(stm->resampler); +- } +- +- static void +- audiounit_stream_destroy(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-- auto_lock context_locl(stm->context->mutex); +-+ auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- { +- auto_lock lock(stm->mutex); +- audiounit_close_stream(stm); +- } +- +- #if !TARGET_OS_IPHONE +-@@ -1905,17 +1917,17 @@ audiounit_stream_start_internal(cubeb_st +- } +- +- static int +- audiounit_stream_start(cubeb_stream * stm) +- { +- stm->shutdown = false; +- stm->draining = false; +- +-- auto_lock context_locl(stm->context->mutex); +-+ auto_lock context_lock(stm->context->mutex); +- audiounit_stream_start_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); +- +- LOG("Cubeb stream (%p) started successfully.", stm); +- return CUBEB_OK; +- } +- +-@@ -1933,17 +1945,17 @@ audiounit_stream_stop_internal(cubeb_str +- } +- } +- +- static int +- audiounit_stream_stop(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-- auto_lock context_locl(stm->context->mutex); +-+ auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- +- LOG("Cubeb stream (%p) stopped successfully.", stm); +- return CUBEB_OK; +- } +- +-@@ -2030,16 +2042,31 @@ audiounit_stream_get_latency(cubeb_strea +- } +- +- *latency = stm->hw_latency_frames + stm->current_latency_frames; +- +- return CUBEB_OK; +- #endif +- } +- +-+static int +-+audiounit_stream_get_volume(cubeb_stream * stm, float * volume) +-+{ +-+ assert(stm->output_unit); +-+ OSStatus r = AudioUnitGetParameter(stm->output_unit, +-+ kHALOutputParam_Volume, +-+ kAudioUnitScope_Global, +-+ 0, volume); +-+ if (r != noErr) { +-+ LOG("AudioUnitGetParameter/kHALOutputParam_Volume rv=%d", r); +-+ return CUBEB_ERROR; +-+ } +-+ return CUBEB_OK; +-+} +-+ +- int audiounit_stream_set_volume(cubeb_stream * stm, float volume) +- { +- OSStatus r; +- +- r = AudioUnitSetParameter(stm->output_unit, +- kHALOutputParam_Volume, +- kAudioUnitScope_Global, +- 0, volume, 0); +diff --git a/media/libcubeb/uplift-patch-7a4c711.patch b/media/libcubeb/uplift-patch-7a4c711.patch +deleted file mode 100644 +index 188bdf8b2..000000000 +--- a/media/libcubeb/uplift-patch-7a4c711.patch ++++ /dev/null +@@ -1,69 +0,0 @@ +-From 7a4c711d6e998b451326a0a87dd2e9dab5a257ef Mon Sep 17 00:00:00 2001 +-From: Alex Chronopoulos +-Date: Mon, 15 May 2017 16:47:26 +0300 +-Subject: [PATCH] audiounit: synchronize destroy stream and reinit (Bug +- 1361657) +- +---- +- src/cubeb_audiounit.cpp | 22 +++++++++++++++------- +- 1 file changed, 15 insertions(+), 7 deletions(-) +- +-diff --git a/src/cubeb_audiounit.cpp b/src/cubeb_audiounit.cpp +-index 8aa40d54..331bc735 100644 +---- a/src/cubeb_audiounit.cpp +-+++ b/src/cubeb_audiounit.cpp +-@@ -603,6 +603,7 @@ audiounit_get_input_device_id(AudioDeviceID * device_id) +- +- static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); +- static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); +-+static int audiounit_uninstall_device_changed_callback(cubeb_stream * stm); +- +- static int +- audiounit_reinit_stream(cubeb_stream * stm) +-@@ -612,6 +613,11 @@ audiounit_reinit_stream(cubeb_stream * stm) +- audiounit_stream_stop_internal(stm); +- } +- +-+ int r = audiounit_uninstall_device_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not uninstall the device changed callback", stm); +-+ } +-+ +- { +- auto_lock lock(stm->mutex); +- float volume = 0.0; +-@@ -2516,11 +2522,6 @@ audiounit_close_stream(cubeb_stream *stm) +- { +- stm->mutex.assert_current_thread_owns(); +- +-- int r = audiounit_uninstall_device_changed_callback(stm); +-- if (r != CUBEB_OK) { +-- LOG("(%p) Could not uninstall the device changed callback", stm); +-- } +-- +- if (stm->input_unit) { +- AudioUnitUninitialize(stm->input_unit); +- AudioComponentInstanceDispose(stm->input_unit); +-@@ -2554,13 +2555,20 @@ audiounit_stream_destroy(cubeb_stream * stm) +- LOG("(%p) Could not uninstall the device changed callback", stm); +- } +- +-+ r = audiounit_uninstall_device_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not uninstall the device changed callback", stm); +-+ } +-+ +- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +-- { +-+ // Execute close in serial queue to avoid collision +-+ // with reinit when un/plug devices +-+ dispatch_sync(stm->context->serial_queue, ^() { +- auto_lock lock(stm->mutex); +- audiounit_close_stream(stm); +-- } +-+ }); +- +- assert(stm->context->active_streams >= 1); +- stm->context->active_streams -= 1; +diff --git a/media/libcubeb/uplift-system-listener-patch.patch b/media/libcubeb/uplift-system-listener-patch.patch +deleted file mode 100644 +index 5064d7fb3..000000000 +--- a/media/libcubeb/uplift-system-listener-patch.patch ++++ /dev/null +@@ -1,402 +0,0 @@ +-diff --git a/media/libcubeb/src/cubeb_audiounit.cpp b/media/libcubeb/src/cubeb_audiounit.cpp +---- a/media/libcubeb/src/cubeb_audiounit.cpp +-+++ b/media/libcubeb/src/cubeb_audiounit.cpp +-@@ -594,20 +594,20 @@ audiounit_get_input_device_id(AudioDevic +- +- return CUBEB_OK; +- } +- +- static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); +- static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); +- +- static int +--audiounit_reinit_stream(cubeb_stream * stm, bool is_started) +-+audiounit_reinit_stream(cubeb_stream * stm) +- { +- auto_lock context_lock(stm->context->mutex); +-- if (is_started) { +-+ if (!stm->shutdown) { +- audiounit_stream_stop_internal(stm); +- } +- +- { +- auto_lock lock(stm->mutex); +- float volume = 0.0; +- int vol_rv = audiounit_stream_get_volume(stm, &volume); +- +-@@ -622,32 +622,30 @@ audiounit_reinit_stream(cubeb_stream * s +- audiounit_stream_set_volume(stm, volume); +- } +- +- // Reset input frames to force new stream pre-buffer +- // silence if needed, check `is_extra_input_needed()` +- stm->frames_read = 0; +- +- // If the stream was running, start it again. +-- if (is_started) { +-+ if (!stm->shutdown) { +- audiounit_stream_start_internal(stm); +- } +- } +- return CUBEB_OK; +- } +- +- static OSStatus +- audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_count, +- const AudioObjectPropertyAddress * addresses, +- void * user) +- { +- cubeb_stream * stm = (cubeb_stream*) user; +- stm->switching_device = true; +-- // Note if the stream was running or not +-- bool was_running = !stm->shutdown; +- +- LOG("(%p) Audio device changed, %d events.", stm, address_count); +- for (UInt32 i = 0; i < address_count; i++) { +- switch(addresses[i].mSelector) { +- case kAudioHardwarePropertyDefaultOutputDevice: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDefaultOutputDevice", i); +- // Allow restart to choose the new default +- stm->output_device = nullptr; +-@@ -666,19 +664,20 @@ audiounit_property_listener_callback(Aud +- if (stm->is_default_input) { +- LOG("It's the default input device, ignore the event"); +- return noErr; +- } +- // Allow restart to choose the new default. Event register only for input. +- stm->input_device = nullptr; +- } +- break; +-- case kAudioDevicePropertyDataSource: +-- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDataSource", i); +-- break; +-+ case kAudioDevicePropertyDataSource: { +-+ LOG("Event[%d] - mSelector == kAudioHardwarePropertyDataSource", i); +-+ return noErr; +-+ } +- } +- } +- +- for (UInt32 i = 0; i < address_count; i++) { +- switch(addresses[i].mSelector) { +- case kAudioHardwarePropertyDefaultOutputDevice: +- case kAudioHardwarePropertyDefaultInputDevice: +- case kAudioDevicePropertyDeviceIsAlive: +-@@ -691,17 +690,17 @@ audiounit_property_listener_callback(Aud +- break; +- } +- } +- } +- +- // Use a new thread, through the queue, to avoid deadlock when calling +- // Get/SetProperties method from inside notify callback +- dispatch_async(stm->context->serial_queue, ^() { +-- if (audiounit_reinit_stream(stm, was_running) != CUBEB_OK) { +-+ if (audiounit_reinit_stream(stm) != CUBEB_OK) { +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- LOG("(%p) Could not reopen the stream after switching.", stm); +- } +- stm->switching_device = false; +- }); +- +- return noErr; +- } +-@@ -752,27 +751,16 @@ audiounit_install_device_changed_callbac +- } +- +- r = audiounit_add_listener(stm, output_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/output/kAudioDevicePropertyDataSource", r); +- return CUBEB_ERROR; +- } +-- +-- /* This event will notify us when the default audio device changes, +-- * for example when the user plugs in a USB headset and the system chooses it +-- * automatically as the default, or when another device is chosen in the +-- * dropdown list. */ +-- r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +-- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/output/kAudioHardwarePropertyDefaultOutputDevice", r); +-- return CUBEB_ERROR; +-- } +- } +- +- if (stm->input_unit) { +- /* This event will notify us when the data source on the input device changes. */ +- AudioDeviceID input_dev_id; +- r = audiounit_get_input_device_id(&input_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +-@@ -780,78 +768,112 @@ audiounit_install_device_changed_callbac +- +- r = audiounit_add_listener(stm, input_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDataSource", r); +- return CUBEB_ERROR; +- } +- +-- /* This event will notify us when the default input device changes. */ +-- r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +-- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioHardwarePropertyDefaultInputDevice", r); +-- return CUBEB_ERROR; +-- } +-- +- /* Event to notify when the input is going away. */ +- AudioDeviceID dev = stm->input_device ? reinterpret_cast(stm->input_device) : +- audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT); +- r = audiounit_add_listener(stm, dev, kAudioDevicePropertyDeviceIsAlive, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDeviceIsAlive", r); +- return CUBEB_ERROR; +- } +- } +- +- return CUBEB_OK; +- } +- +- static int +-+audiounit_install_system_changed_callback(cubeb_stream * stm) +-+{ +-+ OSStatus r; +-+ +-+ if (stm->output_unit) { +-+ /* This event will notify us when the default audio device changes, +-+ * for example when the user plugs in a USB headset and the system chooses it +-+ * automatically as the default, or when another device is chosen in the +-+ * dropdown list. */ +-+ r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +-+ kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-+ if (r != noErr) { +-+ LOG("AudioObjectAddPropertyListener/output/kAudioHardwarePropertyDefaultOutputDevice rv=%d", r); +-+ return CUBEB_ERROR; +-+ } +-+ } +-+ +-+ if (stm->input_unit) { +-+ /* This event will notify us when the default input device changes. */ +-+ r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +-+ kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-+ if (r != noErr) { +-+ LOG("AudioObjectAddPropertyListener/input/kAudioHardwarePropertyDefaultInputDevice rv=%d", r); +-+ return CUBEB_ERROR; +-+ } +-+ } +-+ +-+ return CUBEB_OK; +-+} +-+ +-+static int +- audiounit_uninstall_device_changed_callback(cubeb_stream * stm) +- { +- OSStatus r; +- +- if (stm->output_unit) { +- AudioDeviceID output_dev_id; +- r = audiounit_get_output_device_id(&output_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- r = audiounit_remove_listener(stm, output_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +-- +-- r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +-- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-- if (r != noErr) { +-- return CUBEB_ERROR; +-- } +- } +- +- if (stm->input_unit) { +- AudioDeviceID input_dev_id; +- r = audiounit_get_input_device_id(&input_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- r = audiounit_remove_listener(stm, input_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +-- +-+ } +-+ return CUBEB_OK; +-+} +-+ +-+static int +-+audiounit_uninstall_system_changed_callback(cubeb_stream * stm) +-+{ +-+ OSStatus r; +-+ +-+ if (stm->output_unit) { +-+ r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +-+ kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-+ if (r != noErr) { +-+ return CUBEB_ERROR; +-+ } +-+ } +-+ +-+ if (stm->input_unit) { +- r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +-- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-+ kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- } +- return CUBEB_OK; +- } +- +- /* Get the acceptable buffer size (in frames) that this device can work with. */ +-@@ -1764,16 +1786,22 @@ audiounit_setup_stream(cubeb_stream * st +- +- if (stm->input_unit && stm->output_unit) { +- // According to the I/O hardware rate it is expected a specific pattern of callbacks +- // for example is input is 44100 and output is 48000 we expected no more than 2 +- // out callback in a row. +- stm->expected_output_callbacks_in_a_row = ceilf(stm->output_hw_rate / stm->input_hw_rate); +- } +- +-+ r = audiounit_install_device_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not install the device change callback.", stm); +-+ return r; +-+ } +-+ +- return CUBEB_OK; +- } +- +- static int +- audiounit_stream_init(cubeb * context, +- cubeb_stream ** stream, +- char const * /* stream_name */, +- cubeb_devid input_device, +-@@ -1838,31 +1866,37 @@ audiounit_stream_init(cubeb * context, +- } +- +- if (r != CUBEB_OK) { +- LOG("(%p) Could not setup the audiounit stream.", stm); +- audiounit_stream_destroy(stm); +- return r; +- } +- +-- r = audiounit_install_device_changed_callback(stm); +-+ r = audiounit_install_system_changed_callback(stm); +- if (r != CUBEB_OK) { +- LOG("(%p) Could not install the device change callback.", stm); +- return r; +- } +- +- *stream = stm; +- LOG("Cubeb stream (%p) init successful.", stm); +- return CUBEB_OK; +- } +- +- static void +- audiounit_close_stream(cubeb_stream *stm) +- { +- stm->mutex.assert_current_thread_owns(); +-+ +-+ int r = audiounit_uninstall_device_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not uninstall the device changed callback", stm); +-+ } +-+ +- if (stm->input_unit) { +- AudioUnitUninitialize(stm->input_unit); +- AudioComponentInstanceDispose(stm->input_unit); +- } +- +- audiounit_destroy_input_linear_buffer(stm); +- +- if (stm->output_unit) { +-@@ -1873,31 +1907,29 @@ audiounit_close_stream(cubeb_stream *stm +- cubeb_resampler_destroy(stm->resampler); +- } +- +- static void +- audiounit_stream_destroy(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-+ int r = audiounit_uninstall_system_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not uninstall the device changed callback", stm); +-+ } +-+ +- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- { +- auto_lock lock(stm->mutex); +- audiounit_close_stream(stm); +- } +- +--#if !TARGET_OS_IPHONE +-- int r = audiounit_uninstall_device_changed_callback(stm); +-- if (r != CUBEB_OK) { +-- LOG("(%p) Could not uninstall the device changed callback", stm); +-- } +--#endif +-- +- assert(stm->context->active_streams >= 1); +- stm->context->active_streams -= 1; +- +- LOG("Cubeb stream (%p) destroyed successful.", stm); +- +- stm->~cubeb_stream(); +- free(stm); +- } +-@@ -1914,20 +1946,20 @@ audiounit_stream_start_internal(cubeb_st +- r = AudioOutputUnitStart(stm->output_unit); +- assert(r == 0); +- } +- } +- +- static int +- audiounit_stream_start(cubeb_stream * stm) +- { +-+ auto_lock context_lock(stm->context->mutex); +- stm->shutdown = false; +- stm->draining = false; +- +-- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_start_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); +- +- LOG("Cubeb stream (%p) started successfully.", stm); +- return CUBEB_OK; +- } +- +-@@ -1943,19 +1975,19 @@ audiounit_stream_stop_internal(cubeb_str +- r = AudioOutputUnitStop(stm->output_unit); +- assert(r == 0); +- } +- } +- +- static int +- audiounit_stream_stop(cubeb_stream * stm) +- { +-+ auto_lock context_lock(stm->context->mutex); +- stm->shutdown = true; +- +-- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- +- LOG("Cubeb stream (%p) stopped successfully.", stm); +- return CUBEB_OK; +- } +- +diff --git a/media/libcubeb/uplift-wasapi-part-to-beta.patch b/media/libcubeb/uplift-wasapi-part-to-beta.patch +deleted file mode 100644 +index 90e827830..000000000 +--- a/media/libcubeb/uplift-wasapi-part-to-beta.patch ++++ /dev/null +@@ -1,118 +0,0 @@ +-# HG changeset patch +-# User Alex Chronopoulos +-# Parent b7bb31e5a851d6f8e142c39dc077e3774719eced +-Bug 1342363 - Uplift wasapi fixes in Beta. r?kinetik +- +-diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp +---- a/media/libcubeb/src/cubeb_wasapi.cpp +-+++ b/media/libcubeb/src/cubeb_wasapi.cpp +-@@ -807,16 +807,20 @@ wasapi_stream_render_loop(LPVOID stream) +- maybe WebRTC. */ +- mmcss_handle = +- stm->context->set_mm_thread_characteristics("Audio", &mmcss_task_index); +- if (!mmcss_handle) { +- /* This is not fatal, but we might glitch under heavy load. */ +- LOG("Unable to use mmcss to bump the render thread priority: %x", GetLastError()); +- } +- +-+ // This has already been nulled out, simply exit. +-+ if (!emergency_bailout) { +-+ is_playing = false; +-+ } +- +- /* WaitForMultipleObjects timeout can trigger in cases where we don't want to +- treat it as a timeout, such as across a system sleep/wake cycle. Trigger +- the timeout error handling only when the timeout_limit is reached, which is +- reset on each successful loop. */ +- unsigned timeout_count = 0; +- const unsigned timeout_limit = 5; +- while (is_playing) { +-@@ -1158,22 +1162,26 @@ bool stop_and_join_render_thread(cubeb_s +- +- /* Wait five seconds for the rendering thread to return. It's supposed to +- * check its event loop very often, five seconds is rather conservative. */ +- DWORD r = WaitForSingleObject(stm->thread, 5000); +- if (r == WAIT_TIMEOUT) { +- /* Something weird happened, leak the thread and continue the shutdown +- * process. */ +- *(stm->emergency_bailout) = true; +-+ // We give the ownership to the rendering thread. +-+ stm->emergency_bailout = nullptr; +- LOG("Destroy WaitForSingleObject on thread timed out," +- " leaking the thread: %d", GetLastError()); +- rv = false; +- } +- if (r == WAIT_FAILED) { +- *(stm->emergency_bailout) = true; +-+ // We give the ownership to the rendering thread. +-+ stm->emergency_bailout = nullptr; +- LOG("Destroy WaitForSingleObject on thread failed: %d", GetLastError()); +- rv = false; +- } +- +- +- // Only attempts to close and null out the thread and event if the +- // WaitForSingleObject above succeeded, so that calling this function again +- // attemps to clean up the thread and event each time. +-@@ -1798,19 +1806,16 @@ void wasapi_stream_destroy(cubeb_stream +- XASSERT(stm); +- +- // Only free stm->emergency_bailout if we could not join the thread. +- // If we could not join the thread, stm->emergency_bailout is true +- // and is still alive until the thread wakes up and exits cleanly. +- if (stop_and_join_render_thread(stm)) { +- delete stm->emergency_bailout.load(); +- stm->emergency_bailout = nullptr; +-- } else { +-- // If we're leaking, it must be that this is true. +-- assert(*(stm->emergency_bailout)); +- } +- +- unregister_notification_client(stm); +- +- SafeRelease(stm->reconfigure_event); +- SafeRelease(stm->refill_event); +- SafeRelease(stm->input_available_event); +- +-@@ -1865,21 +1870,21 @@ int stream_start_one_side(cubeb_stream * +- return CUBEB_ERROR; +- } +- +- return CUBEB_OK; +- } +- +- int wasapi_stream_start(cubeb_stream * stm) +- { +-+ auto_lock lock(stm->stream_reset_lock); +-+ +- XASSERT(stm && !stm->thread && !stm->shutdown_event); +- XASSERT(stm->output_client || stm->input_client); +- +-- auto_lock lock(stm->stream_reset_lock); +-- +- stm->emergency_bailout = new std::atomic(false); +- +- if (stm->output_client) { +- int rv = stream_start_one_side(stm, OUTPUT); +- if (rv != CUBEB_OK) { +- return rv; +- } +- } +-@@ -1932,16 +1937,17 @@ int wasapi_stream_stop(cubeb_stream * st +- } +- } +- +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- } +- +- if (stop_and_join_render_thread(stm)) { +-+ // This is null if we've given the pointer to the other thread +- if (stm->emergency_bailout.load()) { +- delete stm->emergency_bailout.load(); +- stm->emergency_bailout = nullptr; +- } +- } +- +- return CUBEB_OK; +- } +-- +2.23.0 + diff --git a/icedove-uxp/0008-Don-t-use-toolkit-search-provider.patch b/icedove-uxp/0008-Don-t-use-toolkit-search-provider.patch new file mode 100644 index 0000000..4145c79 --- /dev/null +++ b/icedove-uxp/0008-Don-t-use-toolkit-search-provider.patch @@ -0,0 +1,24 @@ +From ace199bce1ca06b145c94e14b2f8e2955cd60dc4 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Wed, 2 Jun 2021 16:59:01 -0400 +Subject: [PATCH 1/1] Don't use toolkit search provider + +--- + toolkit/components/moz.build | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/toolkit/components/moz.build b/toolkit/components/moz.build +index ba695a3c2..845bd9e87 100644 +--- a/toolkit/components/moz.build ++++ b/toolkit/components/moz.build +@@ -82,6 +82,7 @@ if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']: + DIRS += ['filepicker'] + + if CONFIG['MOZ_TOOLKIT_SEARCH'] and not CONFIG['MC_BASILISK'] \ ++ and not CONFIG['HYPE_ICEDOVE'] \ + and not CONFIG['HYPE_ICEWEASEL']: + DIRS += ['search'] + +-- +2.31.1 + diff --git a/icedove-uxp/0009-icedove-uxp-install-dir.patch b/icedove-uxp/0009-icedove-uxp-install-dir.patch new file mode 100644 index 0000000..0a73c8d --- /dev/null +++ b/icedove-uxp/0009-icedove-uxp-install-dir.patch @@ -0,0 +1,13 @@ +diff --git a/mozilla/config/baseconfig.mk b/mozilla/config/baseconfig.mk +index 47a12b1..1d9f262 100644 +--- a/mozilla/config/baseconfig.mk ++++ b/mozilla/config/baseconfig.mk +@@ -4,7 +4,7 @@ + # whether a normal build is happening or whether the check is running. + includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) + idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) +-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) ++installdir = $(libdir)/$(MOZ_APP_NAME) + sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) + ifeq (.,$(DEPTH)) + DIST = dist diff --git a/icedove-uxp/0010-remove-malfunctional-searchplugins.patch b/icedove-uxp/0010-remove-malfunctional-searchplugins.patch new file mode 100644 index 0000000..8442a32 --- /dev/null +++ b/icedove-uxp/0010-remove-malfunctional-searchplugins.patch @@ -0,0 +1,394 @@ +--- a/mail/locales/search/list.json 2021-06-05 05:01:35.000000000 +0200 ++++ b/mail/locales/search/list.json 2024-12-23 01:11:38.763495274 +0100 +@@ -1,315 +1,315 @@ + { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + }, + "locales": { + "en-US": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ar": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ast": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "be": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "br": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ca": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "cs": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "da": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "de": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "en-GB": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "es-AR": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "es-ES": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "et": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "fi": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "fr": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ga-IE": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "gd": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "he": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "hr": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "hu": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "id": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "is": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "it": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ja-JP-mac": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ja": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "kab": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ko": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "lt": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "nb-NO": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "nl": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "nn-NO": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "pl": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "pt-PT": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "rm": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ro": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "ru": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "sk": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "sl": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "sq": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "sv-SE": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "tr": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "uk": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "vi": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + }, + "zh-TW": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "wikipedia-en" ++ "wikipedia-en" + ] + } + } +--- a/mail/locales/en-US/chrome/messenger-region/region.properties 2021-06-05 05:01:35.000000000 +0200 ++++ b/mail/locales/en-US/chrome/messenger-region/region.properties 2024-12-23 01:14:43.163707607 +0100 +@@ -3,12 +3,10 @@ + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + # Default search engine +-browser.search.defaultenginename=SearX ++browser.search.defaultenginename=Wikipedia (en) + + # Search engine order (order displayed in the search bar dropdown)s +-browser.search.order.1=SearX +-browser.search.order.2=YaCy +-browser.search.order.3=SearX (Tor) ++browser.search.order.1=Wikipedia (en) + + # To make mapit buttons to disappear in the addressbook, specify empty string. For example: + # mail.addr_book.mapit_url.format= +@@ -23,10 +21,10 @@ + # @ZI == zip code + # @CO == country + # Default map service: +-mail.addr_book.mapit_url.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO ++mail.addr_book.mapit_url.format= + # List of available map services (up to 5 can be defined here): +-mail.addr_book.mapit_url.1.name=OpenStreetMap +-mail.addr_book.mapit_url.1.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO ++mail.addr_book.mapit_url.1.name= ++mail.addr_book.mapit_url.1.format= + + # Recognize non-standard versions of "Re:" in subjects from localized versions of MS Outlook et al. + # Specify a comma-separated list without spaces. For example: mailnews.localizedRe=AW,SV diff --git a/icedove-uxp/LICENSE b/icedove-uxp/LICENSE new file mode 100644 index 0000000..901ff11 --- /dev/null +++ b/icedove-uxp/LICENSE @@ -0,0 +1,5473 @@ + + about:license + +*Binaries* of this product have been made available to you by the +Hyperbola Project under the Mozilla Public +License 2.0 (MPL). Know your rights . + +All of the *source code* to this product is available under licenses +which are both free and +GPL-compatible +. +A URL identifying the specific source code used to create this copy can +be found on the build configuration page , and you +can read instructions on how to download and build the code for yourself +. + +More specifically, most of the source code is available under the +Mozilla Public License 2.0 (MPL). The MPL has a FAQ + to help you understand it. The +remainder of the software which is not under the MPL is available under +one of a variety of other free and open source licenses. Those that +require reproduction of the license text in the distribution are given +below. (Note: your copy of this product may not contain code covered by +one or more of the licenses listed here, depending on the exact product +and version you choose.) + + * Mozilla Public License 2.0 + + * GNU Lesser General Public License 2.1 + + * GNU Lesser General Public License 3.0 + + * GNU General Public License 3.0 + + * ACE License + * acorn License + * Adjust SDK License + * Adobe CMap License + * Android Open Source License + * ANGLE License + * Apache License 2.0 + * Apple License + * Apple/Mozilla NPRuntime License + * ARM License + * bspatch License + * Cairo Component Licenses + * Chromium License + * CodeMirror License + * cubic-bezier License + * D3 License + * Dagre-D3 License + * dtoa License + * Dutch Spellchecking Dictionary License + * Twemoji License + * Estonian Spellchecking Dictionary License + * Expat License + * Firebug License + * gfxFontList License + * Google BSD License + * Google Gears License + * Google Gears/iStumbler License + * Google VP8 License + * gyp License + * halloc License + * HarfBuzz License + * ICU License + * Immutable.js License + * Japan Network Information Center License + * jQuery License + * k_exp License + * Khronos group License + * Kiss FFT License + * libc++ License + * libcubeb License + * libevent License + * libffi License + * libjingle License + * libnestegg License + * libsoundtouch License + * libyuv License + * Lithuanian Spellchecking Dictionary License + * MIT license — microformat-shiv + * MySpell License + * naturalSort License + * nICEr License + * node-properties License + * nrappkit License + * OpenAES License + * OpenVision License + * pbkdf2_sha256 License + * Pocketsphinx License + * praton License + * qcms License + * QR Code Generator License + * React License + * React-Redux License + * React Virtualized License + * Red Hat xdg_user_dir_lookup License + * Redux License + * Reselect License + * Russian Spellchecking Dictionary License + * SCTP Licenses + * Skia License + * Snappy License + * sprintf.js License + * SunSoft License + * SuperFastHash License + * Unicode License + * University of California License + * US English Spellchecking Dictionary Licenses + + * V8 License + * Valve BSD License + * VTune License + * WebRTC License + * x264 License + * Xiph.org Foundation License + + + * Other Required Notices + * Optional Notices + * Proprietary Operating System Components + + +------------------------------------------------------------------------ + + + Mozilla Public License 2.0 + + + 1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + + means + + 1. + + that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + 2. + + that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + 1. + + any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + 2. + + any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + + + 2. License Grants and Conditions + + + 2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + + 1. + + under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + 2. + + under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + + + 2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + + + 2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + + 1. + + for any code that a Contributor has removed from Covered Software; or + + 2. + + for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + 3. + + under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + + + 2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + + + 2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + + + 2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + + + 2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + + + 3. Responsibilities + + + 3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code Form. + + + 3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + + 1. + + such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + + 2. + + You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + + + 3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + + + 3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + + + 3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + + + 4. Inability to Comply Due to Statute or Regulation + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + + + 5. Termination + + + 5.1. + +The rights granted under this License will terminate automatically if +You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + + + 5.2. + +If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + + + 5.3. + +In the event of termination under Sections 5.1 or 5.2 above, all end +user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + + + 6. Disclaimer of Warranty + +/Covered Software is provided under this License on an "as is" basis, +without warranty of any kind, either expressed, implied, or statutory, +including, without limitation, warranties that the Covered Software is +free of defects, merchantable, fit for a particular purpose or +non-infringing. The entire risk as to the quality and performance of the +Covered Software is with You. Should any Covered Software prove +defective in any respect, You (not any Contributor) assume the cost of +any necessary servicing, repair, or correction. This disclaimer of +warranty constitutes an essential part of this License. No use of any +Covered Software is authorized under this License except under this +disclaimer./ + + + 7. Limitation of Liability + +/Under no circumstances and under no legal theory, whether tort +(including negligence), contract, or otherwise, shall any Contributor, +or anyone who distributes Covered Software as permitted above, be liable +to You for any direct, indirect, special, incidental, or consequential +damages of any character including, without limitation, damages for lost +profits, loss of goodwill, work stoppage, computer failure or +malfunction, or any and all other commercial damages or losses, even if +such party shall have been informed of the possibility of such damages. +This limitation of liability shall not apply to liability for death or +personal injury resulting from such party's negligence to the extent +applicable law prohibits such limitation. Some jurisdictions do not +allow the exclusion or limitation of incidental or consequential +damages, so this exclusion and limitation may not apply to You./ + + + 8. Litigation + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + + + 9. Miscellaneous + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + + + 10. Versions of the License + + + 10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + + + 10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + + + 10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + + + 10.4. Distributing Source Code Form that is Incompatible With + Secondary Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + + + Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + + + Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +------------------------------------------------------------------------ + + + GNU Lesser General Public License 2.1 + +This product contains code from the following LGPLed libraries: + + * libsoundtouch + * libav + * FFmpeg + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + + Preamble + +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public Licenses are +intended to guarantee your freedom to share and change free software--to +make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the Free +Software Foundation and other authors who decide to use it. You can use +it too, but we suggest you first think carefully about whether this +license or the ordinary General Public License is the better strategy to +use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish); that you receive source code or can get it if +you want it; that you can change the software and use pieces of it in +new free programs; and that you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for you +if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or +for a fee, you must give the recipients all the rights that we gave you. +You must make sure that they, too, receive or can get the source code. +If you link other code with the library, you must provide complete +object files to the recipients, so that they can relink them with the +library after making changes to the library and recompiling it. And you +must show them these terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is +no warranty for the free library. Also, if the library is modified by +someone else and passed on, the recipients should know that what they +have is not the original version, so that the original author's +reputation will not be affected by problems that might be introduced by +others. + +Finally, software patents pose a constant threat to the existence of any +free program. We wish to make sure that a company cannot effectively +restrict the users of a free program by obtaining a restrictive license +from a patent holder. Therefore, we insist that any patent license +obtained for a version of the library must be consistent with the full +freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License. This license, the GNU Lesser General Public +License, applies to certain designated libraries, and is quite different +from the ordinary General Public License. We use this license for +certain libraries in order to permit linking those libraries into +non-free programs. + +When a program is linked with a library, whether statically or using a +shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the entire +combination fits its criteria of freedom. The Lesser General Public +License permits more lax criteria for linking other code with the library. + +We call this license the "Lesser" General Public License because it does +Less to protect the user's freedom than the ordinary General Public +License. It also provides other free software developers Less of an +advantage over competing non-free programs. These disadvantages are the +reason we use the ordinary General Public License for many libraries. +However, the Lesser license provides advantages in certain special +circumstances. + +For example, on rare occasions, there may be a special need to encourage +the widest possible use of a certain library, so that it becomes a +de-facto standard. To achieve this, non-free programs must be allowed to +use the library. A more frequent case is that a free library does the +same job as widely used non-free libraries. In this case, there is +little to gain by limiting the free library to free software only, so we +use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of free +software. For example, permission to use the GNU C Library in non-free +programs enables many more people to use the whole GNU operating system, +as well as its variant, the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is linked +with the Library has the freedom and the wherewithal to run that program +using a modified version of the Library. + +The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +*0.* This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or other +authorized party saying it may be distributed under the terms of this +Lesser General Public License (also called "this License"). Each +licensee is addressed as "you". + +A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which +has been distributed under these terms. A "work based on the Library" +means either the Library or any derivative work under copyright law: +that is to say, a work containing the Library or a portion of it, either +verbatim or with modifications and/or translated straightforwardly into +another language. (Hereinafter, translation is included without +limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making +modifications to it. For a library, complete source code means all the +source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and +installation of the library. + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of running +a program using the Library is not restricted, and output from such a +program is covered only if its contents constitute a work based on the +Library (independent of the use of the Library in a tool for writing +it). Whether that is true depends on what the Library does and what the +program that uses the Library does. + +*1.* You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the notices +that refer to this License and to the absence of any warranty; and +distribute a copy of this License along with the Library. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +*2.* You may modify your copy or copies of the Library or any portion of +it, thus forming a work based on the Library, and copy and distribute +such modifications or work under the terms of Section 1 above, provided +that you also meet all of these conditions: + + * *a)* The modified work must itself be a software library. + * *b)* You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + * *c)* You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + * *d)* If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses the + facility, other than as an argument passed when the facility is + invoked, then you must make a good faith effort to ensure that, in + the event an application does not supply such function or table, the + facility still operates, and performs whatever part of its purpose + remains meaningful. + + (For example, a function in a library to compute square roots has a + purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must be + optional: if the application does not supply it, the square root + function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, and +can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based on +the Library, the distribution of the whole must be on the terms of this +License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of a +storage or distribution medium does not bring the other work under the +scope of this License. + +*3.* You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so that +they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in these +notices. + +Once this change is made in a given copy, it is irreversible for that +copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the +Library into a program that is not a library. + +*4.* You may copy and distribute the Library (or a portion or derivative +of it, under Section 2) in object code or executable form under the +terms of Sections 1 and 2 above provided that you accompany it with the +complete corresponding machine-readable source code, which must be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a +designated place, then offering equivalent access to copy the source +code from the same place satisfies the requirement to distribute the +source code, even though third parties are not compelled to copy the +source along with the object code. + +*5.* A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a work, +in isolation, is not a derivative work of the Library, and therefore +falls outside the scope of this License. + +However, linking a "work that uses the Library" with the Library creates +an executable that is a derivative of the Library (because it contains +portions of the Library), rather than a "work that uses the library". +The executable is therefore covered by this License. Section 6 states +terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be linked +without the Library, or if the work is itself a library. The threshold +for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data structure +layouts and accessors, and small macros and small inline functions (ten +lines or less in length), then the use of the object file is +unrestricted, regardless of whether it is legally a derivative work. +(Executables containing this object code plus portions of the Library +will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, whether +or not they are linked directly with the Library itself. + +*6.* As an exception to the Sections above, you may also combine or link +a "work that uses the Library" with the Library to produce a work +containing portions of the Library, and distribute that work under terms +of your choice, provided that the terms permit modification of the work +for the customer's own use and reverse engineering for debugging such +modifications. + +You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work during +execution displays copyright notices, you must include the copyright +notice for the Library among them, as well as a reference directing the +user to the copy of this License. Also, you must do one of these things: + + * *a)* Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that uses + the Library", as object code and/or source code, so that the user + can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood that + the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application to + use the modified definitions.) + * *b)* Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if the + user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + * *c)* Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + * *d)* If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + * *e)* Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" +must include any data and utility programs needed for reproducing the +executable from it. However, as a special exception, the materials to be +distributed need not include anything that is normally distributed (in +either source or binary form) with the major components (compiler, +kernel, and so on) of the operating system on which the executable runs, +unless that component itself accompanies the executable. + +It may happen that this requirement contradicts the license restrictions +of other proprietary libraries that do not normally accompany the +operating system. Such a contradiction means you cannot use both them +and the Library together in an executable that you distribute. + +*7.* You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise permitted, +and provided that you do these two things: + + * *a)* Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library facilities. + This must be distributed under the terms of the Sections above. + * *b)* Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining where + to find the accompanying uncombined form of the same work. + +*8.* You may not copy, modify, sublicense, link with, or distribute the +Library except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, link with, or distribute the +Library is void, and will automatically terminate your rights under this +License. However, parties who have received copies, or rights, from you +under this License will not have their licenses terminated so long as +such parties remain in full compliance. + +*9.* You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and all +its terms and conditions for copying, distributing or modifying the +Library or works based on it. + +*10.* Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + +*11.* If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot distribute +so as to satisfy simultaneously your obligations under this License and +any other pertinent obligations, then as a consequence you may not +distribute the Library at all. For example, if a patent license would +not permit royalty-free redistribution of the Library by all those who +receive copies directly or indirectly through you, then the only way you +could satisfy both it and this License would be to refrain entirely from +distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is implemented +by public license practices. Many people have made generous +contributions to the wide range of software distributed through that +system in reliance on consistent application of that system; it is up to +the author/donor to decide if he or she is willing to distribute +software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be +a consequence of the rest of this License. + +*12.* If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may +add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among countries +not thus excluded. In such case, this License incorporates the +limitation as if written in the body of this License. + +*13.* The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. Such +new versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a license +version number, you may choose any version ever published by the Free +Software Foundation. + +*14.* If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free Software +Foundation; we sometimes make exceptions for this. Our decision will be +guided by the two goals of preserving the free status of all derivatives +of our free software and of promoting the sharing and reuse of software +generally. + +*NO WARRANTY* + +*15.* BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, +EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH +YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL +NECESSARY SERVICING, REPAIR OR CORRECTION. + +*16.* IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR +DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL +DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF +THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR +OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +------------------------------------------------------------------------ + + + GNU Lesser General Public License 3.0 + +Some versions of this product contains code from the following LGPLed +libraries: + + * Swedish dictionary + + + +Copyright © 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the +terms and conditions of version 3 of the GNU General Public License, +supplemented by the additional permissions listed below. + + + 0. Additional Definitions + +As used herein, “this License” refers to version 3 of the GNU Lesser +General Public License, and the “GNU GPL” refers to version 3 of the GNU +General Public License. + +“The Library” refers to a covered work governed by this License, other +than an Application or a Combined Work as defined below. + +An “Application” is any work that makes use of an interface provided by +the Library, but which is not otherwise based on the Library. Defining a +subclass of a class defined by the Library is deemed a mode of using an +interface provided by the Library. + +A “Combined Work” is a work produced by combining or linking an +Application with the Library. The particular version of the Library with +which the Combined Work was made is also called the “Linked Version”. + +The “Minimal Corresponding Source” for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The “Corresponding Application Code” for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + + 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + + 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified version: + + * a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs whatever + part of its purpose remains meaningful, or + * b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + + 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a +header file that is part of the Library. You may convey such object code +under terms of your choice, provided that, if the incorporated material +is not limited to numerical parameters, data structure layouts and +accessors, or small macros, inline functions and templates (ten or fewer +lines in length), you do both of the following: + + * a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are covered + by this License. + * b) Accompany the object code with a copy of the GNU GPL and this + license document. + + + 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken +together, effectively do not restrict modification of the portions of +the Library contained in the Combined Work and reverse engineering for +debugging such modifications, if you also do each of the following: + + * a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + * b) Accompany the Combined Work with a copy of the GNU GPL and this + license document. + * c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among these + notices, as well as a reference directing the user to the copies of + the GNU GPL and this license document. + * d) Do one of the following: + o 0) Convey the Minimal Corresponding Source under the terms of + this License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to recombine + or relink the Application with a modified version of the Linked + Version to produce a modified Combined Work, in the manner + specified by section 6 of the GNU GPL for conveying + Corresponding Source. + o 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time a + copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version of + the Library that is interface-compatible with the Linked Version. + * e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the GNU + GPL, and only to the extent that such information is necessary to + install and execute a modified version of the Combined Work produced + by recombining or relinking the Application with a modified version + of the Linked Version. (If you use option 4d0, the Installation + Information must accompany the Minimal Corresponding Source and + Corresponding Application Code. If you use option 4d1, you must + provide the Installation Information in the manner specified by + section 6 of the GNU GPL for conveying Corresponding Source.) + + + 5. Combined Libraries. + +You may place library facilities that are a work based on the Library +side by side in a single library together with other library facilities +that are not Applications and are not covered by this License, and +convey such a combined library under terms of your choice, if you do +both of the following: + + * a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + * b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + + 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library as +you received it specifies that a certain numbered version of the GNU +Lesser General Public License “or any later version” applies to it, you +have the option of following the terms and conditions either of that +published version or of any later version published by the Free Software +Foundation. If the Library as you received it does not specify a version +number of the GNU Lesser General Public License, you may choose any +version of the GNU Lesser General Public License ever published by the +Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the Library. + +------------------------------------------------------------------------ + + + GNU General Public License 3.0 + +This license does not apply to any of the code shipped with Firefox, but +may apply to Disconnect.me blocklists downloaded after installation for +use with the tracking protection feature. Firefox and such blocklists +are separate and independent works as described in Sections 5 and 6 of +this license. + +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + + Preamble + +The GNU General Public License is a free, copyleft license for software +and other kinds of works. + +The licenses for most software and other practical works are designed to +take away your freedom to share and change the works. By contrast, the +GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. +Our General Public Licenses are designed to make sure that you have the +freedom to distribute copies of free software (and charge for them if +you wish), that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these +rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis +or for a fee, you must pass on to the recipients the same freedoms that +you received. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) +assert copyright on the software, and (2) offer you this License giving +you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of protecting +users' freedom to change the software. The systematic pattern of such +abuse occurs in the area of products for individuals to use, which is +precisely where it is most unacceptable. Therefore, we have designed +this version of the GPL to prohibit the practice for those products. If +such problems arise substantially in other domains, we stand ready to +extend this provision to those domains in future versions of the GPL, as +needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + + + TERMS AND CONDITIONS + + + 0. Definitions. + +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this +License. Each licensee is addressed as “you”. “Licensees” and +“recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a “modified version” of the +earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on +the Program. + +To “propagate” a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to +the extent that it includes a convenient and prominently visible feature +that (1) displays an appropriate copyright notice, and (2) tells the +user that there is no warranty for the work (except to the extent that +warranties are provided), that licensees may convey the work under this +License, and how to view a copy of this License. If the interface +presents a list of user commands or options, such as a menu, a prominent +item in the list meets this criterion. + + + 1. Source Code. + +The “source code” for a work means the preferred form of the work for +making modifications to it. “Object code” means any non-source form of a +work. + +A “Standard Interface” means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that is +widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that Major +Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A “Major +Component”, in this context, means a major essential component (kernel, +window system, and so on) of the specific operating system (if any) on +which the executable work runs, or a compiler used to produce the work, +or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the +source code needed to generate, install, and (for an executable work) +run the object code and to modify the work, including scripts to control +those activities. However, it does not include the work's System +Libraries, or general-purpose tools or generally available free programs +which are used unmodified in performing those activities but which are +not part of the work. For example, Corresponding Source includes +interface definition files associated with source files for the work, +and the source code for shared libraries and dynamically linked +subprograms that the work is specifically designed to require, such as +by intimate data communication or control flow between those subprograms +and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + + + 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article 11 +of the WIPO copyright treaty adopted on 20 December 1996, or similar +laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to the +covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + + 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; keep +intact all notices stating that this License and any non-permissive +terms added in accord with section 7 apply to the code; keep intact all +notices of the absence of any warranty; and give all recipients a copy +of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and +you may offer support or warranty protection for a fee. + + + 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the terms +of section 4, provided that you also meet all of these conditions: + + * a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + * b) The work must carry prominent notices stating that it is released + under this License and any conditions added under section 7. This + requirement modifies the requirement in section 4 to “keep intact + all notices”. + * c) You must license the entire work, as a whole, under this License + to anyone who comes into possession of a copy. This License will + therefore apply, along with any applicable section 7 additional + terms, to the whole of the work, and all its parts, regardless of + how they are packaged. This License gives no permission to license + the work in any other way, but it does not invalidate such + permission if you have separately received it. + * d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your work + need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, and +which are not combined with it such as to form a larger program, in or +on a volume of a storage or distribution medium, is called an +“aggregate” if the compilation and its resulting copyright are not used +to limit the access or legal rights of the compilation's users beyond +what the individual works permit. Inclusion of a covered work in an +aggregate does not cause this License to apply to the other parts of the +aggregate. + + + 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these ways: + + * a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium customarily + used for software interchange. + * b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a written + offer, valid for at least three years and valid for as long as you + offer spare parts or customer support for that product model, to + give anyone who possesses the object code either (1) a copy of the + Corresponding Source for all the software in the product that is + covered by this License, on a durable physical medium customarily + used for software interchange, for a price no more than your + reasonable cost of physically performing this conveying of source, + or (2) access to copy the Corresponding Source from a network server + at no charge. + * c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This alternative + is allowed only occasionally and noncommercially, and only if you + received the object code with such an offer, in accord with + subsection 6b. + * d) Convey the object code by offering access from a designated place + (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) that + supports equivalent copying facilities, provided you maintain clear + directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + * e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be included +in conveying the object code work. + +A “User Product” is either (1) a “consumer product”, which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of coverage. +For a particular product received by a particular user, “normally used” +refers to a typical or common use of that class of product, regardless +of the status of the particular user or of the way in which the +particular user actually uses, or expects or is expected to use, the +product. A product is a consumer product regardless of whether the +product has substantial commercial, industrial or non-consumer uses, +unless such uses represent the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product +from a modified version of its Corresponding Source. The information +must suffice to ensure that the continued functioning of the modified +object code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied by +the Installation Information. But this requirement does not apply if +neither you nor any third party retains the ability to install modified +object code on the User Product (for example, the work has been +installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in +accord with this section must be in a format that is publicly documented +(and with an implementation available to the public in source code +form), and must require no special password or key for unpacking, +reading or copying. + + + 7. Additional Terms. + +“Additional permissions” are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by this +License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove +any additional permissions from that copy, or from any part of it. +(Additional permissions may be written to require their own removal in +certain cases when you modify the work.) You may place additional +permissions on material, added by you to a covered work, for which you +have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + + * a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + * b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + * c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + * d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + * e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + * f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + +All other non-permissive additional terms are considered “further +restrictions” within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains a +further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms of +that license document, provided that the further restriction does not +survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must +place, in the relevant source files, a statement of the additional terms +that apply to those files, or a notice indicating where to find the +applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the above +requirements apply either way. + + + 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally terminates +your license, and (b) permanently, if the copyright holder fails to +notify you of the violation by some reasonable means prior to 60 days +after the cessation. + +Moreover, your license from a particular copyright holder is reinstated +permanently if the copyright holder notifies you of the violation by +some reasonable means, this is the first time you have received notice +of violation of this License (for any work) from that copyright holder, +and you cure the violation prior to 30 days after your receipt of the +notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + + 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a +copy of the Program. Ancillary propagation of a covered work occurring +solely as a consequence of using peer-to-peer transmission to receive a +copy likewise does not require acceptance. However, nothing other than +this License grants you permission to propagate or modify any covered +work. These actions infringe copyright if you do not accept this +License. Therefore, by modifying or propagating a covered work, you +indicate your acceptance of this License to do so. + + + 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered work +results from an entity transaction, each party to that transaction who +receives a copy of the work also receives whatever licenses to the work +the party's predecessor in interest had or could give under the previous +paragraph, plus a right to possession of the Corresponding Source of the +work from the predecessor in interest, if the predecessor has it or can +get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may not +impose a license fee, royalty, or other charge for exercise of rights +granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that any +patent claim is infringed by making, using, selling, offering for sale, +or importing the Program or any portion of it. + + + 11. Patents. + +A “contributor” is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The work +thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or +controlled by the contributor, whether already acquired or hereafter +acquired, that would be infringed by some manner, permitted by this +License, of making, using, or selling its contributor version, but do +not include claims that would be infringed only as a consequence of +further modification of the contributor version. For purposes of this +definition, “control” includes the right to grant patent sublicenses in +a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to make, +use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To “grant” such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and +the Corresponding Source of the work is not available for anyone to +copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. “Knowingly relying” means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify or +convey a specific copy of the covered work, then the patent license you +grant is automatically extended to all recipients of the covered work +and works based on it. + +A patent license is “discriminatory” if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you are +a party to an arrangement with a third party that is in the business of +distributing software, under which you make payment to the third party +based on the extent of your activity of conveying the work, and under +which the third party grants, to any of the parties who would receive +the covered work from you, a discriminatory patent license (a) in +connection with copies of the covered work conveyed by you (or copies +made from those copies), or (b) primarily for and in connection with +specific products or compilations that contain the covered work, unless +you entered into that arrangement, or that patent license was granted, +prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any +implied license or other defenses to infringement that may otherwise be +available to you under applicable patent law. + + + 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not convey it at all. For example, if you agree to terms that +obligate you to collect a royalty for further conveying from those to +whom you convey the Program, the only way you could satisfy both those +terms and this License would be to refrain entirely from conveying the +Program. + + + 13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have permission +to link or combine any covered work with a work licensed under version 3 +of the GNU Affero General Public License into a single combined work, +and to convey the resulting work. The terms of this License will +continue to apply to the part which is the covered work, but the special +requirements of the GNU Affero General Public License, section 13, +concerning interaction through a network will apply to the combination +as such. + + + 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License “or any later version” applies to it, you have the option of +following the terms and conditions either of that numbered version or of +any later version published by the Free Software Foundation. If the +Program does not specify a version number of the GNU General Public +License, you may choose any version ever published by the Free Software +Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. + +Later license versions may give you additional or different permissions. +However, no additional obligations are imposed on any author or +copyright holder as a result of your choosing to follow a later version. + + + 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF +THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + + 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES +SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE +WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN +ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + + 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above +cannot be given local legal effect according to their terms, reviewing +courts shall apply local law that most closely approximates an absolute +waiver of all civil liability in connection with the Program, unless a +warranty or assumption of liability accompanies a copy of the Program in +return for a fee. + +END OF TERMS AND CONDITIONS + + + How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +“copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice +like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an “about box”. + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a “copyright disclaimer” for the program, if +necessary. For more information on this, and how to apply and follow the +GNU GPL, see . + +The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Lesser General Public License instead of this License. But first, +please read . + +------------------------------------------------------------------------ + + + ACE License + +This license applies to the file +media/webrtc/trunk/webrtc/system_wrappers/source/condition_variable_event_win.cc. + +ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), and CoSMIC(TM) +(henceforth referred to as "DOC software") are copyrighted by +Douglas C. Schmidt and his research group at Washington University, +University of California, Irvine, and Vanderbilt University, +Copyright (c) 1993-2009, all rights reserved. +Since DOC software is open-source, freely available software, +you are free to use, modify, copy, and distribute--perpetually and +irrevocably--the DOC software source code and object code produced +from the source, as well as copy and distribute modified versions of +this software. You must, however, include this copyright statement +along with any code built using DOC software that you release. No +copyright statement needs to be provided if you just ship binary +executables of your software products. + +------------------------------------------------------------------------ + + + Adobe CMap License + +This license applies to files in the directory +browser/extensions/pdfjs/content/web/cmaps/. + +Copyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. + +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the +following conditions are met: + +Redistributions of source code must retain the above +copyright notice, this list of conditions and the following +disclaimer. + +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials +provided with the distribution. + +Neither the name of Adobe Systems Incorporated nor the names +of its contributors may be used to endorse or promote +products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Android Open Source License + +This license applies to various files in the Mozilla codebase, including +those in the directory gfx/skia/. + + Copyright 2009, The Android Open Source Project + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + ANGLE License + +This license applies to files in the directory gfx/angle/. + +Copyright (C) 2002-2010 The ANGLE Project Authors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + acorn License + +This license applies to all files in devtools/shared/acorn. + +Copyright (C) 2012 by Marijn Haverbeke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Please note that some subdirectories of the CodeMirror distribution +include their own LICENSE files, and are released under different +licences. + +------------------------------------------------------------------------ + + + Adjust SDK License + +This license applies to all files in the directory +mobile/android/thirdparty/com/adjust/sdk. + +Copyright (c) 2012-2014 adjust GmbH, +http://www.adjust.com + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + Apache License 2.0 + +This license applies to various files in the Mozilla codebase. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +------------------------------------------------------------------------ + + + Apple License + +This license applies to certain files in the directories +dom/media/webaudio/blink, and widget/cocoa. + +Copyright (C) 2008, 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Apple/Mozilla NPRuntime License + +This license applies to the file dom/plugins/base/npruntime.h. + +Copyright © 2004, Apple Computer, Inc. and The Mozilla Foundation. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla +Foundation ("Mozilla") nor the names of their contributors may be used +to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR +THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + ARM License + +This license applies to files in the directory js/src/jit/arm64/vixl/. + +Copyright 2013, ARM Limited +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ARM Limited nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + bspatch License + +This license applies to the files +toolkit/mozapps/update/updater/bspatch.cpp and +toolkit/mozapps/update/updater/bspatch.h. + +Copyright 2003,2004 Colin Percival +All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted providing that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Cairo Component Licenses + +This license, with different copyright holders, applies to certain files +in the directory gfx/cairo/. The copyright holders and the applicable +ranges of dates are as follows: + + * 2004 Richard D. Worth + * 2004, 2005 Red Hat, Inc. + * 2003 USC, Information Sciences Institute + * 2004 David Reveman + * 2005 Novell, Inc. + * 2004 David Reveman, Peter Nilsson + * 2000 Keith Packard, member of The XFree86 Project, Inc. + * 2005 Lars Knoll & Zack Rusin, Trolltech + * 1998, 2000, 2002, 2004 Keith Packard + * 2004 Nicholas Miell + * 2005 Trolltech AS + * 2000 SuSE, Inc. + * 2003 Carl Worth + * 1987, 1988, 1989, 1998 The Open Group + * 1987, 1988, 1989 Digital Equipment Corporation, Maynard, Massachusetts. + * 1998 Keith Packard + * 2003 Richard Henderson + +Copyright © + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without +fee, provided that the above copyright notice appear in all copies +and that both that copyright notice and this permission notice +appear in supporting documentation, and that the name of + not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. + makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + + DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + Chromium License + +This license applies to parts of the code in: + + * editor/libeditor/EditorEventListener.cpp + * security/sandbox/ + * widget/cocoa/GfxInfo.mm + +and also some files in these directories: + + * dom/media/webspeech/recognition/ + * dom/plugins/ + * gfx/ots/ + * gfx/ycbcr/ + * ipc/chromium/ + * media/openmax_dl/ + * toolkit/components/downloads/chromium/ + * toolkit/components/url-classifier/chromium/ + * tools/profiler/ + +Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + CodeMirror License + +This license applies to all files in +devtools/client/sourceeditor/codemirror and to specified files in the +devtools/client/sourceeditor/test/: + + * cm_comment_test.js + * cm_driver.js + * cm_mode_javascript_test.js + * cm_mode_test.css + * cm_mode_test.js + * cm_test.js + +Copyright (C) 2013 by Marijn Haverbeke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Please note that some subdirectories of the CodeMirror distribution +include their own LICENSE files, and are released under different +licences. + +------------------------------------------------------------------------ + + + cubic-bezier License + +This license applies to the file +devtools/client/shared/widgets/CubicBezierWidget.js . + +Copyright (c) 2013 Lea Verou. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + D3 License + +This license applies to the file devtools/client/shared/d3.js. + +Copyright (c) 2014, Michael Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* The name Michael Bostock may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Dagre-D3 License + +This license applies to the file +devtools/client/webaudioeditor/lib/dagre-d3.js. + +Copyright (c) 2013 Chris Pettitt + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + dtoa License + +This license applies to the file nsprpub/pr/src/misc/dtoa.c. + +The author of this software is David M. Gay. + +Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + +Permission to use, copy, modify, and distribute this software for any +purpose without fee is hereby granted, provided that this entire notice +is included in all copies of any software which is or includes a copy +or modification of this software and in all copies of the supporting +documentation for such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY +REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY +OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +------------------------------------------------------------------------ + + + Dutch Spellchecking Dictionary License + +This license applies to the Dutch Spellchecking Dictionary. (This code +only ships in some localized versions of this product.) + +Copyright (c) 2006, 2007 OpenTaal +Copyright (c) 2001, 2002, 2003, 2005 Simon Brouwer e.a. +Copyright (c) 1996 Nederlandstalige Tex Gebruikersgroep + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +* Neither the name of the OpenTaal, Simon Brouwer e.a., or Nederlandstalige Tex +Gebruikersgroep nor the names of its contributors may be used to endorse or +promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ +#if defined(XP_WIN) || defined(XP_LINUX) + + + Twemoji License + +This license applies to the emoji art contained within the bundled emoji +font file. + +Copyright (c) 2018 Twitter, Inc and other contributors. + +Creative Commons Attribution 4.0 International (CC BY 4.0) + +See https://creativecommons.org/licenses/by/4.0/legalcode or +for the human readable summary: https://creativecommons.org/licenses/by/4.0/ + +You are free to: + +Share — copy and redistribute the material in any medium or format + +Adapt — remix, transform, and build upon the material for any purpose, even commercially. + +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, +and indicate if changes were made. You may do so in any reasonable manner, +but not in any way that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological +measures that legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in +the public domain or where your use is permitted by an applicable exception or +limitation. No warranties are given. The license may not give you all of the +permissions necessary for your intended use. For example, other rights such as +publicity, privacy, or moral rights may limit how you use the material. + +------------------------------------------------------------------------ + + + Estonian Spellchecking Dictionary License + +This license applies to precursor works to certain files which are part +of the Estonian Spellchecking Dictionary. The shipped versions are under +the GNU Lesser General Public License. (This code only ships in some +localized versions of this product.) + +Copyright © Institute of the Estonian Language + +E-mail: litsents@eki.ee +URL: http://www.eki.ee/tarkvara/ + +The present Licence Agreement gives the user of this Software Product +(hereinafter: Product) the right to use the Product for whatever purpose +(incl. distribution, copying, altering, inclusion in other software, and +selling) on the following conditions: + +1. The present Licence Agreement should belong unaltered to each copy ever + made of this Product; +2. Neither the Institute of the Estonian Language (hereinafter: IEL) nor the + author(s) of the Product will take responsibility for any detriment, direct + or indirect, possibly ensuing from the application of the Product; +3. The IEL is ready to share the Product with other users as we wish to + advance research on the Estonian language and to promote the use of + Estonian in rapidly developing infotechnology, yet we refuse to bind + ourselves to any further obligation, which means that the IEL is not + obliged either to warrant the suitability of the Product for a specific + purpose, to improve the software, or to provide a more detailed description + of the underlying algorithms. (Which does not mean, though, that we may not + do it.) + +Notification Request: + +As a courtesy, we would appreciate being informed whenever our linguistic +products are used to create derivative works. If you modify our software or +include it in other products, please inform us by sending e-mail to +litsents@eki.ee or by letter to + +Institute of the Estonian Language +Roosikrantsi 6 +10119 Tallinn +ESTONIA + +Phone & Fax: +372 6411443 + +------------------------------------------------------------------------ + + + Expat License + +This license applies to certain files in the directory parser/expat/. + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper +Copyright (c) 2001, 2002, 2003 Expat maintainers. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + Firebug License + +This license applies to the code +devtools/shared/webconsole/network-helper.js. + +Copyright (c) 2007, Parakey Inc. +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or +without modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Parakey Inc. nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of Parakey Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + gfxFontList License + +This license applies to the files gfx/thebes/gfxMacPlatformFontList.mm +and gfx/thebes/gfxPlatformFontList.cpp. + +Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Google BSD License + +This license applies to files in the directories +toolkit/crashreporter/google-breakpad/ and toolkit/components/protobuf/. + +Copyright (c) 2006, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Google VP8 License + +This license applies to certain files in the directory media/libvpx. + +Copyright (c) 2010, Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +- Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Subject to the terms and conditions of the above License, Google +hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this +section) patent license to make, have made, use, offer to sell, sell, +import, and otherwise transfer this implementation of VP8, where such +license applies only to those patent claims, both currently owned by +Google and acquired in the future, licensable by Google that are +necessarily infringed by this implementation of VP8. If You or your +agent or exclusive licensee institute or order or agree to the +institution of patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that this +implementation of VP8 or any code incorporated within this +implementation of VP8 constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any rights +granted to You under this License for this implementation of VP8 +shall terminate as of the date such litigation is filed. + +------------------------------------------------------------------------ + + + Google Gears/iStumbler License + +This license applies to the file netwerk/wifi/osx_wifi.h. + +Copyright 2008, Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of Google Inc. nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The contents of this file are taken from Apple80211.h from the iStumbler +project (http://www.istumbler.net). This project is released under the BSD +license with the following restrictions. + +Copyright (c) 02006, Alf Watt (alf@istumbler.net). All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name of iStumbler nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + gyp License + +This license applies to certain files in the directory +media/webrtc/trunk/tools/gyp. + +Copyright (c) 2009 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + halloc License + +This license applies to certain files in the directory media/libnestegg/src. + +Copyright (c) 2004-2010 Alex Pankratov. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the project nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + HarfBuzz License + +This license, with different copyright holders, applies to the files in +the directory gfx/harfbuzz/. The copyright holders and the applicable +ranges of dates are as follows: + + * 1998-2004 David Turner and Werner Lemberg + * 2004, 2007, 2008, 2009, 2010 Red Hat, Inc. + * 2006 Behdad Esfahbod + * 2007 Chris Wilson + * 2009 Keith Stribley + * 2010 Mozilla Foundation + +Copyright (C) + + This is part of HarfBuzz, an OpenType Layout engine library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +------------------------------------------------------------------------ + + + ICU License + +This license applies to some code in the gfx/thebes directory. + +ICU License - ICU 1.8.1 and later + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2012 International Business Machines Corporation and +others + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, provided that the above copyright notice(s) and this +permission notice appear in all copies of the Software and that both the +above copyright notice(s) and this permission notice appear in supporting +documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization of the +copyright holder. +All trademarks and registered trademarks mentioned herein are the property +of their respective owners. + +------------------------------------------------------------------------ + + + Immutable.js License + +BSD License + +For Immutable JS software + +Copyright (c) 2014-2015, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Japan Network Information Center License + +This license applies to certain files in the directory netwerk/dns/. + +Copyright (c) 2001,2002 Japan Network Information Center. +All rights reserved. + +By using this file, you agree to the terms and conditions set forth below. + + LICENSE TERMS AND CONDITIONS + +The following License Terms and Conditions apply, unless a different +license is obtained from Japan Network Information Center ("JPNIC"), +a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda, +Chiyoda-ku, Tokyo 101-0047, Japan. + +1. Use, Modification and Redistribution (including distribution of any + modified or derived work) in source and/or binary forms is permitted + under this License Terms and Conditions. + +2. Redistribution of source code must retain the copyright notices as they + appear in each source code file, this License Terms and Conditions. + +3. Redistribution in binary form must reproduce the Copyright Notice, + this License Terms and Conditions, in the documentation and/or other + materials provided with the distribution. For the purposes of binary + distribution the "Copyright Notice" refers to the following language: + "Copyright (c) 2000-2002 Japan Network Information Center. All rights + reserved." + +4. The name of JPNIC may not be used to endorse or promote products + derived from this Software without specific prior written approval of + JPNIC. + +5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +------------------------------------------------------------------------ + + + jQuery License + +This license applies to all copies of jQuery in the code. + +Copyright (c) 2010 John Resig, http://jquery.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + k_exp License + +This license applies to the file modules/fdlibm/src/k_exp.cpp. + +Copyright (c) 2011 David Schultz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Khronos group License + +This license applies to the following files: + + * openmax_dl/dl/api/omxtypes.h + * openmax_dl/dl/sp/api/omxSP.h + +Copyright 2005-2008 The Khronos Group Inc. All Rights Reserved. + +These materials are protected by copyright laws and contain material +proprietary to the Khronos Group, Inc. You may use these materials +for implementing Khronos specifications, without altering or removing +any trademark, copyright or other notice from the specification. + +Khronos Group makes no, and expressly disclaims any, representations +or warranties, express or implied, regarding these materials, including, +without limitation, any implied warranties of merchantability or fitness +for a particular purpose or non-infringement of any intellectual property. +Khronos Group makes no, and expressly disclaims any, warranties, express +or implied, regarding the correctness, accuracy, completeness, timeliness, +and reliability of these materials. + +Under no circumstances will the Khronos Group, or any of its Promoters, +Contributors or Members or their respective partners, officers, directors, +employees, agents or representatives be liable for any damages, whether +direct, indirect, special or consequential damages for lost revenues, +lost profits, or otherwise, arising from or in connection with these +materials. + +Khronos and OpenMAX are trademarks of the Khronos Group Inc. + +------------------------------------------------------------------------ + + + Kiss FFT License + +This license applies to files in the directory media/kiss_fft/. + +Copyright (c) 2003-2010 Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + libc++ License + +This license applies to the copy of libc++ obtained from the Android NDK. + +Copyright (c) 2009-2014 by the contributors listed in the libc++ CREDITS.TXT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + libcubeb License + +This license applies to files in the directory media/libcubeb. + +Copyright © 2011 Mozilla Foundation + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + libevent License + +This license applies to files in the directory +ipc/chromium/src/third_party/libevent/. + +Copyright 2000-2002 Niels Provos +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + libffi License + +This license applies to files in the directory js/src/ctypes/libffi/. + +libffi - Copyright (c) 1996-2008 Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + libjingle License + +This license applies to the following files: + + * media/mtransport/sigslot.h + * media/mtransport/test/gtest_utils.h + +Copyright (c) 2004--2005, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + libnestegg License + +This license applies to certain files in the directory media/libnestegg. + +Copyright © 2010 Mozilla Foundation + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + libsoundtouch License + +This license applies to certain files in the directory +media/libsoundtouch/src/. + +The SoundTouch Library Copyright © Olli Parviainen 2001-2012 + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +------------------------------------------------------------------------ + + + libyuv License + +This license applies to files in the directory media/libyuv except for +the file media/libyuv/source/x86inc.asm. + +Copyright (c) 2011, The LibYuv project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Lithuanian Spellchecking Dictionary License + +This license applies to the Lithuanian Spellchecking Dictionary. (This +code only ships in some localized versions of this product.) + +Copyright (c) 2000-2013, Albertas Agejevas and contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holders nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL ALBERTAS AGEJEVAS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + MIT license — microformat-shiv + +This license applies to some files in the directory +toolkit/components/microformats. + +MIT license — microformat-shiv + +Copyright (c) 2012-2013 Glenn Jones + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + MySpell License + +This license applies to some files in the directory +extensions/spellcheck/hunspell. + +Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada +And Contributors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. All modifications to the source code must be clearly marked as + such. Binary redistributions based on modified source code + must be clearly marked as modified versions in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + naturalSort License + +This license applies to devtools/client/shared/natural-sort.js. + +The MIT License (MIT) + +Copyright (c) 2014 Gabriel Llamas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + nICEr License + +This license applies to certain files in the directory +media/mtransport/third_party/nICEr. + + Copyright (C) 2007, Adobe Systems Inc. + Copyright (C) 2007-2008, Network Resonance, Inc. + +Each source file bears an individual copyright notice. + +The following license applies to this distribution as a whole. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name of Adobe Systems, Network Resonance nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + OpenAES License + +This license applies to certain files in the directory +media/gmp-clearkey/0.1/openaes. + +Copyright (c) 2012, Nabil S. Al Ramli, www.nalramli.com +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + OpenVision License + +This license applies to the file extensions/auth/gssapi.h. + +Copyright 1993 by OpenVision Technologies, Inc. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appears in all copies and +that both that copyright notice and this permission notice appear in +supporting documentation, and that the name of OpenVision not be used +in advertising or publicity pertaining to distribution of the software +without specific, written prior permission. OpenVision makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty. + +OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + node-properties License + +This license applies to devtools/shared/node-properties/node-properties.js. + +The MIT License (MIT) + +Copyright (c) 2014 Gabriel Llamas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + nrappkit License + +This license applies to certain files in the directory +media/mtransport/third_party/nrappkit. + +Copyright (C) 2001-2007, Network Resonance, Inc. +All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of Network Resonance, Inc. nor the name of any + contributors to this software may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +This license applies to certain files in the directory +media/mtransport/third_party/nrappkit. + +Copyright (C) 1999-2003 RTFM, Inc. +All Rights Reserved + +This package is a SSLv3/TLS protocol analyzer written by Eric Rescorla + and licensed by RTFM, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + + This product includes software developed by Eric Rescorla for + RTFM, Inc. + +4. Neither the name of RTFM, Inc. nor the name of Eric Rescorla may be + used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE ERIC RESCORLA AND RTFM ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +oDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Note that RTFM, Inc. has waived clause (3) above as of June 20, 2012 for +files appearing in this distribution. This waiver applies only to files +included in this distribution. it does not apply to any other part of +ssldump not included in this distribution. + +This license applies to the file +media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h. + +Copyright (c) 1991, 1993 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +This license applies to the file: +media/mtransport/third_party/nrappkit/src/util/util.c. + +Copyright (c) 1998 Todd C. Miller +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + praton License + +This license applies to the file nsprpub/pr/src/misc/praton.c. + +Copyright (c) 1983, 1990, 1993 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + +Portions Copyright (c) 1993 by Digital Equipment Corporation. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies, and that +the name of Digital Equipment Corporation not be used in advertising or +publicity pertaining to distribution of the document or software without +specific, written prior permission. + +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") +Portions Copyright (c) 1996-1999 by Internet Software Consortium. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + pbkdf2_sha256 License + +This license applies to the code mozglue/android/pbkdf2_sha256.c and +mozglue/android/pbkdf2_sha256.h. + +Copyright 2005,2007,2009 Colin Percival +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Pocketsphinx License + +This license applies to files in the directories media/pocketsphinx/ and +media/sphinxbase/. + +Copyright (c) 1999-2014 Carnegie Mellon University. All rights +reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +This work was supported in part by funding from the Defense Advanced +Research Projects Agency and the National Science Foundation of the +United States of America, and the CMU Sphinx Speech Consortium. + +THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND +ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY +NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + qcms License + +This license applies to certain files in the directory gfx/qcms/. + +Copyright (C) 2009 Mozilla Corporation +Copyright (C) 1998-2007 Marti Maria + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject +to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + QR Code Generator License + +This license applies to certain files in the directory +devtools/shared/qrcode/encoder/. + +Copyright (c) 2009 Kazuhiko Arase + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + React License + +This license applies to various files in the Mozilla codebase. + +Copyright (c) 2013-2015, Facebook, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + React-Redux License + +This license applies to the file +devtools/client/shared/vendor/react-redux.js. + +Copyright (c) 2015 Dan Abramov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + React Virtualized License + +This license applies to the file +devtools/client/shared/vendor/react-virtualized.js. + +Copyright (c) 2015 Brian Vaughn + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + Red Hat xdg_user_dir_lookup License + +This license applies to the xdg_user_dir_lookup function in +xpcom/io/SpecialSystemDirectory.cpp. + +Copyright (c) 2007 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + Redux License + +This license applies to the file devtools/client/shared/vendor/redux.js. + +Copyright (c) 2015 Dan Abramov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + Reselect License + +This license applies to the file devtools/client/shared/vendor/reselect.js. + +The MIT License (MIT) + +Copyright (c) 2015-2016 Reselect Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + Russian Spellchecking Dictionary License + +This license applies to the Russian Spellchecking Dictionary. (This code +only ships in some localized versions of this product.) + +* Copyright (c) 1997-2008, Alexander I. Lebedev + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Modified versions must be clearly marked as such. +* The name of Alexander I. Lebedev may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + SCTP Licenses + +These licenses apply to certain files in the directory netwerk/sctp/src/. + +Copyright (c) 2009-2010 Brad Penoff +Copyright (c) 2009-2010 Humaira Kamal +Copyright (c) 2011-2012 Irene Ruengeler +Copyright (c) 2010-2012, by Michael Tuexen. All rights reserved. +Copyright (c) 2010-2012, by Randall Stewart. All rights reserved. +Copyright (c) 2010-2012, by Robin Seggelmann. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved. +Copyright (c) 2008-2012, by Randall Stewart. All rights reserved. +Copyright (c) 2008-2012, by Michael Tuexen. All rights reserved. +Copyright (c) 2008-2012, by Brad Penoff. All rights reserved. +Copyright (c) 1980, 1982, 1986, 1987, 1988, 1990, 1993 + The Regents of the University of California. +Copyright (c) 2005 Robert N. M. Watson All rights reserved. +Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +a) Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +b) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. +c) Neither the name of Cisco Systems, Inc, the name of the university, + the WIDE project, nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Skia License + +This license applies to certain files in the directory gfx/skia/. + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Snappy License + +This license applies to certain files in the directory +other-licenses/snappy/. + +Copyright 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + sprintf.js License + +This license applies to devtools/shared/sprintfjs/sprintf.js. + +Copyright (c) 2007-2016, Alexandru Marasteanu +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of this software nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + SunSoft License + +This license applies to the ICC_H block in gfx/qcms/qcms.h. + +Copyright (c) 1994-1996 SunSoft, Inc. + + Rights Reserved + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restrict- +ion, including without limitation the rights to use, copy, modify, +merge, publish distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON- +INFRINGEMENT. IN NO EVENT SHALL SUNSOFT, INC. OR ITS PARENT +COMPANY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of SunSoft, Inc. +shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without written +authorization from SunSoft Inc. + +------------------------------------------------------------------------ + + + SuperFastHash License + +This license applies to files in the directory +security/sandbox/chromium/base/third_party/superfasthash/. + +Copyright (c) 2010, Paul Hsieh +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither my name, Paul Hsieh, nor the names of any other contributors to the + code use may not be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Unicode License + +This license applies to files in the intl/icu and intl/tzdata +directories and certain files in the js/src/vm directory. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2016 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +--------------------- + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +1. ICU License - ICU 1.8.1 to ICU 57.1 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2016 International Business Machines Corporation and others +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +All trademarks and registered trademarks mentioned herein are the +property of their respective owners. + +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + + # The Google Chrome software developed by Google is licensed under + # the BSD license. Other software included in this distribution is + # provided under other licenses, as set forth below. + # + # The BSD License + # http://opensource.org/licenses/bsd-license.php + # Copyright (C) 2006-2008, Google Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are met: + # + # Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided with + # the distribution. + # Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + # + # The word list in cjdict.txt are generated by combining three word lists + # listed below with further processing for compound word breaking. The + # frequency is generated with an iterative training against Google web + # corpora. + # + # * Libtabe (Chinese) + # - https://sourceforge.net/project/?group_id=1519 + # - Its license terms and conditions are shown below. + # + # * IPADIC (Japanese) + # - http://chasen.aist-nara.ac.jp/chasen/distribution.html + # - Its license terms and conditions are shown below. + # + # ---------COPYING.libtabe ---- BEGIN-------------------- + # + # /* + # * Copyrighy (c) 1999 TaBE Project. + # * Copyright (c) 1999 Pai-Hsiang Hsiao. + # * All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the TaBE Project nor the names of its + # * contributors may be used to endorse or promote products derived + # * from this software without specific prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # /* + # * Copyright (c) 1999 Computer Systems and Communication Lab, + # * Institute of Information Science, Academia + # * Sinica. All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the Computer Systems and Communication Lab + # * nor the names of its contributors may be used to endorse or + # * promote products derived from this software without specific + # * prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + # University of Illinois + # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + # + # ---------------COPYING.libtabe-----END-------------------------------- + # + # + # ---------------COPYING.ipadic-----BEGIN------------------------------- + # + # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science + # and Technology. All Rights Reserved. + # + # Use, reproduction, and distribution of this software is permitted. + # Any copy of this software, whether in its original form or modified, + # must include both the above copyright notice and the following + # paragraphs. + # + # Nara Institute of Science and Technology (NAIST), + # the copyright holders, disclaims all warranties with regard to this + # software, including all implied warranties of merchantability and + # fitness, in no event shall NAIST be liable for + # any special, indirect or consequential damages or any damages + # whatsoever resulting from loss of use, data or profits, whether in an + # action of contract, negligence or other tortuous action, arising out + # of or in connection with the use or performance of this software. + # + # A large portion of the dictionary entries + # originate from ICOT Free Software. The following conditions for ICOT + # Free Software applies to the current dictionary as well. + # + # Each User may also freely distribute the Program, whether in its + # original form or modified, to any third party or parties, PROVIDED + # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear + # on, or be attached to, the Program, which is distributed substantially + # in the same form as set out herein and that such intended + # distribution, if actually made, will neither violate or otherwise + # contravene any of the laws and regulations of the countries having + # jurisdiction over the User or the intended distribution itself. + # + # NO WARRANTY + # + # The program was produced on an experimental basis in the course of the + # research and development conducted during the project and is provided + # to users as so produced on an experimental basis. Accordingly, the + # program is provided without any warranty whatsoever, whether express, + # implied, statutory or otherwise. The term "warranty" used herein + # includes, but is not limited to, any warranty of the quality, + # performance, merchantability and fitness for a particular purpose of + # the program and the nonexistence of any infringement or violation of + # any right of any third party. + # + # Each user of the program will agree and understand, and be deemed to + # have agreed and understood, that there is no warranty whatsoever for + # the program and, accordingly, the entire risk arising from or + # otherwise connected with the program is assumed by the user. + # + # Therefore, neither ICOT, the copyright holder, or any other + # organization that participated in or was otherwise related to the + # development of the program and their respective officials, directors, + # officers and other employees shall be held liable for any and all + # damages, including, without limitation, general, special, incidental + # and consequential damages, arising out of or otherwise in connection + # with the use or inability to use the program or any product, material + # or result produced or otherwise obtained by using the program, + # regardless of whether they have been advised of, or otherwise had + # knowledge of, the possibility of such damages at any time during the + # project or thereafter. Each user will be deemed to have agreed to the + # foregoing by his or her commencement of use of the program. The term + # "use" as used herein includes, but is not limited to, the use, + # modification, copying and distribution of the program and the + # production of secondary products from the program. + # + # In the case where the program, whether in its original form or + # modified, was distributed or delivered to or received by a user from + # any person, organization or entity other than ICOT, unless it makes or + # grants independently of ICOT any specific warranty to the user in + # writing, such person, organization or entity, will also be exempted + # from and not be held liable to the user for any such damages as noted + # above as far as the program is concerned. + # + # ---------------COPYING.ipadic-----END---------------------------------- + +3. Lao Word Break Dictionary Data (laodict.txt) + + # Copyright (c) 2013 International Business Machines Corporation + # and others. All Rights Reserved. + # + # Project: http://code.google.com/p/lao-dictionary/ + # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt + # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt + # (copied below) + # + # This file is derived from the above dictionary, with slight + # modifications. + # ---------------------------------------------------------------------- + # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, + # are permitted provided that the following conditions are met: + # + # + # Redistributions of source code must retain the above copyright notice, this + # list of conditions and the following disclaimer. Redistributions in + # binary form must reproduce the above copyright notice, this list of + # conditions and the following disclaimer in the documentation and/or + # other materials provided with the distribution. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # OF THE POSSIBILITY OF SUCH DAMAGE. + # -------------------------------------------------------------------------- + +4. Burmese Word Break Dictionary Data (burmesedict.txt) + + # Copyright (c) 2014 International Business Machines Corporation + # and others. All Rights Reserved. + # + # This list is part of a project hosted at: + # github.com/kanyawtech/myanmar-karen-word-lists + # + # -------------------------------------------------------------------------- + # Copyright (c) 2013, LeRoy Benjamin Sharon + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions + # are met: Redistributions of source code must retain the above + # copyright notice, this list of conditions and the following + # disclaimer. Redistributions in binary form must reproduce the + # above copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided + # with the distribution. + # + # Neither the name Myanmar Karen Word Lists, nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS + # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + # SUCH DAMAGE. + # -------------------------------------------------------------------------- + +5. Time Zone Database + + ICU uses the public domain data and code derived from Time Zone +Database for its time zone support. The ownership of the TZ database +is explained in BCP 175: Procedure for Maintaining the Time Zone +Database section 7. + + # 7. Database Ownership + # + # The TZ database itself is not an IETF Contribution or an IETF + # document. Rather it is a pre-existing and regularly updated work + # that is in the public domain, and is intended to remain in the + # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do + # not apply to the TZ Database or contributions that individuals make + # to it. Should any claims be made and substantiated against the TZ + # Database, the organization that is providing the IANA + # Considerations defined in this RFC, under the memorandum of + # understanding with the IETF, currently ICANN, may act in accordance + # with all competent court orders. No ownership claims will be made + # by ICANN or the IETF Trust on the database or the code. Any person + # making a contribution to the database or code waives all rights to + # future claims in that contribution or in the TZ Database. + +------------------------------------------------------------------------ + + + University of California License + +This license applies to the following files or, in the case of +directories, certain files in those directories: + + * dbm/ + * db/mork/src/morkQuickSort.cpp + * xpcom/glue/nsQuickSort.cpp + * nsprpub/pr/src/misc/praton.c + * media/mtransport/third_party/nICEr/src/stun/addrs.c + +Copyright (c) 1990, 1993 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +[3 Deleted as of 22nd July 1999; see + ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change + for details] +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + US English Spellchecking Dictionary Licenses + +These licenses apply to certain files in the directory +extensions/spellcheck/locales/en-US/hunspell/. (This code only ships in +some localized versions of this product.) + +Different parts of the US English dictionary (SCOWL) are subject to the +following licenses as shown below. For additional details, sources, credits, +and public domain references, see README.txt +. + +The collective work of the Spell Checking Oriented Word Lists (SCOWL) is under +the following copyright: + +Copyright 2000-2007 by Kevin Atkinson +Permission to use, copy, modify, distribute and sell these word lists, the +associated scripts, the output created from the scripts, and its documentation +for any purpose is hereby granted without fee, provided that the above +copyright notice appears in all copies and that both that copyright notice and +this permission notice appear in supporting documentation. Kevin Atkinson makes +no representations about the suitability of this array for any purpose. It is +provided "as is" without express or implied warranty. + +The WordNet database is under the following copyright: + +This software and database is being provided to you, the LICENSEE, by Princeton +University under the following license. By obtaining, using and/or copying +this software and database, you agree that you have read, understood, and will +comply with these terms and conditions: +Permission to use, copy, modify and distribute this software and database and +its documentation for any purpose and without fee or royalty is hereby granted, +provided that you agree to comply with the following copyright notice and +statements, including the disclaimer, and that the same appear on ALL copies of +the software, database and documentation, including modifications that you make +for internal use or for distribution. +WordNet 1.6 Copyright 1997 by Princeton University. All rights reserved. +THIS SOFTWARE AND DATABASE IS PROVIDED "AS IS" AND PRINCETON UNIVERSITY +MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF +EXAMPLE, BUT NOT LIMITATION, PRINCETON UNIVERSITY MAKES NO +REPRESENTATIONS OR WARRANTIES OF MERCHANT- ABILITY OR FITNESS FOR ANY +PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE, DATABASE OR +DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, +TRADEMARKS OR OTHER RIGHTS. +The name of Princeton University or Princeton may not be used in advertising or +publicity pertaining to distribution of the software and/or database. Title to +copyright in this software, database and any associated documentation shall at +all times remain with Princeton University and LICENSEE agrees to preserve same. + +The "UK Advanced Cryptics Dictionary" is under the following copyright: + +Copyright (c) J Ross Beresford 1993-1999. All Rights Reserved. +The following restriction is placed on the use of this publication: if The UK +Advanced Cryptics Dictionary is used in a software package or redistributed in +any form, the copyright notice must be prominently displayed and the text of +this document must be included verbatim. There are no other restrictions: I +would like to see the list distributed as widely as possible. + +Various parts are under the Ispell copyright: + +Copyright 1993, Geoff Kuenning, Granada Hills, CA +All rights reserved. Redistribution and use in source and binary forms, with +or without modification, are permitted provided that the following conditions +are met: + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + 3. All modifications to the source code must be clearly marked as such. +Binary redistributions based on modified source code must be clearly marked as +modified versions in the documentation and/or other materials provided with +the distribution. + (clause 4 removed with permission from Geoff Kuenning) + 5. The name of Geoff Kuenning may not be used to endorse or promote products +derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Additional Contributors: + + Alan Beale + M Cooper + +------------------------------------------------------------------------ + + + V8 License + +This license applies to certain files in the directories +js/src/irregexp, js/src/builtin, js/src/jit/arm and js/src/jit/mips. + +Copyright 2006-2012 the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#if defined(XP_WIN) || defined(XP_MACOSX) || defined(XP_LINUX) +------------------------------------------------------------------------ + + + Valve BSD License + +This license applies to certain files in the directory gfx/vr/openvr. + +Copyright (c) 2015, Valve Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + VTune License + +This license applies to certain files in the directory js/src/vtune. + +Copyright (c) 2005-2012 Intel Corporation. All rights reserved. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + WebRTC License + +This license applies to certain files in the directory media/webrtc/trunk. + +Copyright (c) 2011, The WebRTC project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + x264 License + +This license applies to the file +media/webrtc/trunk/third_party/libyuv/source/x86inc.asm. + +Copyright (C) 2005-2012 x264 project + +Authors: Loren Merritt + Anton Mitrofanov + Jason Garrett-Glaser + Henrik Gramner + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + Xiph.org Foundation License + +This license applies to files in the following directories with the +specified copyright year ranges: + + * media/libogg/, 2002 + * media/libtheora/, 2002-2007 + * media/libvorbis/, 2002-2004 + * media/libtremor/, 2002-2010 + * media/libspeex_resampler/, 2002-2008 + +Copyright (c) , Xiph.org Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Other Required Notices + + * This software is based in part on the work of the Independent JPEG + Group. + * Portions of the OS/2 and Android versions of this software are + copyright ©1996-2012 The FreeType Project + . All rights reserved. + +------------------------------------------------------------------------ + + + Optional Notices + +Some permissive software licenses request but do not require an +acknowledgement of the use of their software. We are very grateful to +the following people and projects for their contributions to this product: + + * The zlib compression library (Jean-loup + Gailly, Mark Adler and team) + * The bzip2 compression library (Julian Seward) + * The libpng graphics library (Glenn + Randers-Pehrson and team) + * The sqlite database engine (D. Richard Hipp + and team) + * The Nullsoft Scriptable Install System + (Amir Szekely and team) + +------------------------------------------------------------------------ + + + Proprietary Operating System Components + +Under some circumstances, under our binary components policy +, +Mozilla may decide to include additional operating system vendor code +with the installer of our products designed for that vendor's +proprietary platform, to make our products work well on that specific +operating system. The following license statements apply to such inclusions. + + + Microsoft Windows: Terms for 'Microsoft Distributable Code' + +These terms apply to the following files; they are referred to below as +"Distributable Code": + + * d3d*.dll (Direct3D libraries) + * msvc*.dll (C and C++ runtime libraries) + +Copyright (c) Microsoft Corporation. + +The Distributable Code may be used and distributed only if you comply with the +following terms: + +(i) You may use, copy, and distribute the Distributable Code only as part of + this product; +(ii) You may not use the Distributable Code on a platform other than Windows; +(iii) You may not alter any copyright, trademark or patent notice in the + Distributable Code; +(iv) You may not modify or distribute the source code of any Distributable + Code so that any part of the source code becomes subject to the MPL or + any other copyleft license; +(v) You must comply with any technical limitations in the Distributable Code + that only allow you to use it in certain ways; and +(vi) You must comply with all domestic and international export laws and + regulations that apply to the Distributable Code. + +------------------------------------------------------------------------ + +Return to top . + diff --git a/icedove-uxp/PKGBUILD b/icedove-uxp/PKGBUILD new file mode 100644 index 0000000..376aab8 --- /dev/null +++ b/icedove-uxp/PKGBUILD @@ -0,0 +1,180 @@ +# Maintainer: Jesus E. + +# Based on icedove package + +if [ "${CARCH}" = "i686" ]; then + _pgo=false +else + _pgo=true +fi + +_pkgname=UXP +pkgname=icedove-uxp +_pkgver=2021.06.02 +_appver=2.5 +pkgver=52.9.${_pkgver//./} +pkgrel=6 +pkgdesc="A new generation of Icedove, an XUL-based standalone mail and news reader on the Unified XUL Platform (UXP)." +arch=(i686 x86_64) +license=(MPL-2.0) +depends=(gtk2 hunspell libxt sndio) +makedepends=(autoconf-legacy diffutils xorg-imake mesa pkg-config tauthon unzip xenocara-server-xvfb yasm zip) +options=(!emptydirs !makeflags) +if $_pgo; then + makedepends+=(xenocara-server-xvfb) + options+=(!ccache) +fi +url="https://wiki.hyperbola.info/$pkgname" +replaces=('icedove' 'thunderbird') +conflicts=('icedove' 'thunderbird') +provides=('icedove' 'thunderbird') +install=$pkgname.install +source=("https://repo.hyperbola.info:50000/other/$_pkgname/$_pkgname-$_pkgver.tar.gz" + "https://repo.hyperbola.info:50000/other/$pkgname/$pkgname-$_appver.tar.gz" + mozconfig + $pkgname.desktop + vendor.js + LICENSE + # Application patches + 0001-Restore-risky-system-libraries.patch + 0002-Add-icedove-uxp-application-specfic-override.patch + 0003-Hardcode-AppName-in-nsAppRunner.patch + 0004-Disable-SSLKEYLOGFILE-in-NSS.patch + 0005-Fix-PGO-Build.patch + # build bustage work-around + 0006-init-configure-patch.patch + # libcubeb patch + 0007-Update-libcubeb-to-a1200c34.patch + 0008-Don-t-use-toolkit-search-provider.patch + 0009-$pkgname-install-dir.patch + 0010-remove-malfunctional-searchplugins.patch) +sha512sums=('4513e30b38229654f1d02a6f4ba7914408d2169a95884560a9b1024a33fab5292dce41e113be2959fd2efbd8abd0763926352ee4362606a03700cb3ac53aeffa' + '1ab5e7e5d62d5d932cda503e3ac711f055b8f531bcee15beeded33f6e9ced7fac16053791dc94714f4b5bc65e2f8985941a9f43d8e5339e06965a5fbb85239c4' + '6553e501778cb9efc9ec054edb9b1e6503b8ad2ddeb6938114ab892f8ececb445ac65691e0bf6f794ec836d511940c8a8635a67061bd49344965b14558042e02' + 'f0ae28e1a2e5a67a3bd17b3d440960ff488046c11e309655b6dcbe7497f3d840da97bae9833f737013f860b2bb8f3df4099c1ec5c5ed90f786ba3a5a2ad245b6' + 'b8c38ba8f40b792fd0dde22d9f0f95c42848f43afcd627abd2bf660b68cb7670a037307f06ed01dc25776620bcb850fb7e89e21cc6f0b17987ee690f52ce4ef1' + '5b49d98ce0740ced95de8b8b39a886ee8bc5071302c4c20dbe0421b27dd1ff1aed13115819fc5fd8309745f91a94cf4c8038cf993c6237a536010185727cd7c9' + '45bb48b4d8436ef0d9535d3891848bafc3c80ff187597591533eab70a0b160eb2825c4856698e813e5858f8baaf9f054abbcd5ce6d2763a374ef3d1917952f27' + '21b137b200a3c2cd91ae6b80a704d1c82c03c590d7f6215135c7bf32a8d4c6ebf7526fe7ec52321e9a2513b11d18418d2aaddea4171a31a3c726a2e02b761118' + 'ff74dd292fa0f138d37174a4aa9f4fa8267cd5b020caf401faad7085e0c7d987a06b89fab9faf58cc7723ab819adc678d75d347814ef38abd05df4440c06e227' + '4d87565a2ce99a135130fa4340f2f6ab29330d7b7e8eb40607c69951b6e807733e4dc2885bd0082c658605809103ac445d67849183ce1d5ed5aaf21dd412b1ef' + '787e271adba2f802737e381aa370331570b2d5254e05d524dc0dd1c941839f9e38a725964104c1e51ba41bb0d585b295eb864477bb66768b19646fb0815ffb9d' + '090773648376a996f03094309dd66c3b868a8923d544a02abc44eb8c374603e0126ae72182d9f6c9030fbddefc5d8cdd4d7ca7c817ac02bceb9fba6f3bb27f33' + '76f4bac91536785eadfc4bc5a220b586f34acbe36e22b16d65163c0bebf767740d1c65e0f86fe8db550749aa53736d1c735b78b879742834202d7ca9e01f98da' + '437f1521aa8eea9b3b6d9f7b030f9879b86daa46a6b70a81cc1cdbc5c1955e82318cb6f293bf08e1dd86ee1588663414669817202f7254d8c56c374515b3eb51' + 'a735f553b86843069524cb4df5aa5032aa9d50b3ee200366cfb86452a2b8e8370f25ba192fb4dce09a8d881c7ffdf0573b76bcc4a163d3ab6f73e979e52acf64' + '89a23bf0338f47136d25224103cb6c7979606840e23b4de3041360f94dd990b776841331c31497126aaf1b6099d813466887bd9de29c2c1a9fd9c9da71caa824') + +prepare() { + # Move the Unified XUL Platform into our application + cd "$srcdir/$pkgname-$_appver" + mv "$srcdir/$_pkgname-$_pkgver" mozilla + + pushd mozilla + # Allow us to build with system libs (this is not recommended/untested per UXP devs) + patch -p1 -i "$srcdir/0001-Restore-risky-system-libraries.patch" + + # Apply Icedove-UXP application specific overrides to UXP + patch -p1 -i "$srcdir/0002-Add-icedove-uxp-application-specfic-override.patch" + + # Hardcode AppName in nsAppRunner + patch -p1 -i "$srcdir/0003-Hardcode-AppName-in-nsAppRunner.patch" + + # Disable SSLKEYLOGFILE in NSS + patch -p1 -i "$srcdir/0004-Disable-SSLKEYLOGFILE-in-NSS.patch" + + # Fix PGO build + patch -p1 -i "$srcdir/0005-Fix-PGO-Build.patch" + + # Apply configure fix (Next release) + patch -p1 -i "$srcdir/0006-init-configure-patch.patch" + + # Apply and update libcubeb for sndio support + patch -p1 -i "$srcdir/0007-Update-libcubeb-to-a1200c34.patch" + + # Apply toolkit search bypass patch + patch -p1 -i "$srcdir/0008-Don-t-use-toolkit-search-provider.patch" + + # Remove bad credit records for some CA issuers such as CNNIC, StartCom, Symantec and WoSign + sed -e '/^# Certificate .*\(CNNIC\|China\|GDCA\|StartCom\|Symantec\|UCA\|WoSign\)/,/^CKA_TRUST_STEP_UP_APPROVED/d' \ + -i security/nss/lib/ckfw/builtins/certdata.txt + + # Remove further bad credit records for some CA issuers such as GDCA, UCA, vTrus and TrustCor + sed -e '/^# Certificate .*\(GDCA\|UCA\|vTrus\|TrustCor\)/,/^CKA_TRUST_STEP_UP_APPROVED/d' \ + -i security/nss/lib/ckfw/builtins/certdata.txt + + popd + + # Install to /usr/lib/icedove-uxp + patch -p1 -i "$srcdir/0009-$pkgname-install-dir.patch" + # Adapt Icedove-UXP version to $pkgver + sed -i "s|MOZ_APP_VERSION[=]52[.]9[.].*|MOZ_APP_VERSION=52.9.${_pkgver//./}| + s|MOZ_APP_VERSION_DISPLAY[=]52[.]9[.].*|MOZ_APP_VERSION_DISPLAY=52.9.${_pkgver//./}| + " mail/confvars.sh + + # Remove malfunctional searchplugins + rm mail/locales/en-US/searchplugins/{searx,searx-tor}.xml + patch -Np1 -i "$srcdir/0010-remove-malfunctional-searchplugins.patch" + + # Load our build config + cp "$srcdir/mozconfig" .mozconfig + + mkdir "$srcdir/path" + ln -s /usr/bin/tauthon "$srcdir/path/python" +} + +build() { + cd "$srcdir/$pkgname-$_appver" + + # _FORTIFY_SOURCE causes configure failures + CPPFLAGS+=" -O2" + + # Hardening + LDFLAGS+=" -Wl,-z,now" + + export PATH="$srcdir/path:$PATH" + + if $_pgo; then + # Do PGO + xvfb-run -a -n 95 -s "-extension GLX -screen 0 1280x1024x24" \ + make -f client.mk build MOZ_PGO=1 + else + make -f client.mk build + fi +} + +package() { + cd "$srcdir/$pkgname-$_appver" + make -f client.mk DESTDIR="$pkgdir" INSTALL_SDK= install + + install -Dm644 ../LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + install -Dm644 ../vendor.js "$pkgdir/usr/lib/$pkgname/defaults/preferences/vendor.js" + + # Install Icedove-UXP menu icon + install -Dm644 mail/branding/${pkgname%-*}/${pkgname%-*}.xpm "$pkgdir/usr/share/pixmaps/$pkgname.xpm" + + # Install Icedove-UXP icons + brandingdir=mail/branding/${pkgname%-*}/app-icons + icondir="$pkgdir/usr/share/icons/hicolor" + for i in 16 22 24 32 48 64 128 256; do + install -Dm644 "$brandingdir/${pkgname%-*}$i.png" \ + "$icondir/${i}x${i}/apps/$pkgname.png" + done + install -Dm644 "$brandingdir/${pkgname%-*}big.svg" \ + "$icondir/scalable/apps/$pkgname.svg" + + # Install Icedove-UXP desktop + install -d "$pkgdir/usr/share/applications" + install -m644 "$srcdir/$pkgname.desktop" \ + "$pkgdir/usr/share/applications" + + # Use system-provided dictionaries + rm -rf "$pkgdir/usr/lib/$pkgname/"{dictionaries,hyphenation} + ln -s /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries" + ln -s /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation" + + # Replace duplicate binary with symlink + # https://bugzilla.mozilla.org/show_bug.cgi?id=658850 + ln -sf $pkgname "$pkgdir/usr/lib/$pkgname/$pkgname-bin" +} diff --git a/icedove-uxp/icedove-uxp.desktop b/icedove-uxp/icedove-uxp.desktop new file mode 100644 index 0000000..3b72cb5 --- /dev/null +++ b/icedove-uxp/icedove-uxp.desktop @@ -0,0 +1,173 @@ +[Desktop Entry] +Name=Icedove-UXP +Comment=Send and receive mail with Icedove-UXP +Comment[ast]=Lleer y escribir corrĂ©u electrĂłnicu +Comment[ca]=Llegiu i escriviu correu +Comment[cs]=ÄŚtenĂ­ a psanĂ­ pošty +Comment[da]=Skriv/læs e-post/nyhedsgruppe med Icedove-UXP +Comment[de]=E-Mails und Nachrichten mit Icedove-UXP lesen und schreiben +Comment[el]=ΔιαβάĎτε και ÎłĎάĎτε ÎłĎάμματα με το Icedove-UXP +Comment[es]=Lea y escriba correos y noticias con Icedove-UXP +Comment[fi]=Lue ja kirjoita sähköposteja +Comment[fr]=Lire et Ă©crire des courriels +Comment[gl]=Lea e escriba correo electrĂłnico +Comment[he]=קרי××”/כתיבה של דו×״ל/חדשות ב×מצעות Icedove-UXP +Comment[hr]=ÄŚitajte/šaljite e-poštu s Icedove-UXP +Comment[hu]=Levelek Ă­rása Ă©s olvasása a Icedove-UXP +Comment[it]=Per leggere e scrivere email +Comment[ja]=ăˇăĽă«ă®čŞ­ăżć›¸ăŤ +Comment[ko]=Icedove-UXP 메일/뉴스 읽기 ë°Ź 쓰기 í´ëťĽěť´ě–¸íЏ +Comment[nl]=E-mail/nieuws lezen en schrijven met Icedove-UXP +Comment[pl]=Czytanie i wysyĹ‚anie e-maili +Comment[pt_BR]=Leia e escreva suas mensagens +Comment[ru]=Читайте и пиŃите пиŃьма +Comment[sk]=ÄŚĂ­tajte a píšte poštu pomocou programu Icedove-UXP +Comment[sv]=Läs och skriv e-post +Comment[ug]=ئŰلخەت ۋە خەۋەرلەرنى Icedove-UXP دا ŮۆرŰŘ´ ۋە ŮŠŰزىش +Comment[uk]=Читання та напиŃання лиŃтів +Comment[vi]=Äọc vĂ  soạn thư Ä‘iện tá»­ +Comment[zh_CN]=é…读邮件ć–ć–°é—» +Comment[zh_TW]=以 Icedove-UXP 讀寫éµä»¶ć–ć–°čž +GenericName=Mail Client +GenericName[ast]=Client de correu +GenericName[ca]=Client de correu +GenericName[cs]=PoštovnĂ­ klient +GenericName[da]=E-postklient +GenericName[de]=E-Mail-Anwendung +GenericName[el]=ΛογιĎμικό αλληλογĎαφίας +GenericName[es]=Cliente de correo +GenericName[fi]=Sähköpostiohjelma +GenericName[fr]=Client de messagerie +GenericName[gl]=Cliente de correo electrĂłnico +GenericName[he]=לקוח דו×״ל +GenericName[hr]=Klijent e-pošte +GenericName[hu]=LevelezĹ‘kliens +GenericName[it]=Client email +GenericName[ja]=é›»ĺ­ăˇăĽă«ă‚Żă©ă‚¤ă‚˘ăłă +GenericName[ko]=메일 í´ëťĽěť´ě–¸íЏ +GenericName[nl]=E-mailprogramma +GenericName[pl]=Klient poczty +GenericName[pt_BR]=Cliente de E-mail +GenericName[ru]=Почтовый клиент +GenericName[sk]=PoštovĂ˝ klient +GenericName[ug]=ئŰلخەت ŘŻŰتالى +GenericName[uk]=ПоŃтова програма +GenericName[vi]=Pháş§n má»m khách quản lĂ˝ thư Ä‘iện tá»­ +GenericName[zh_CN]=邮件新闻客ć·ç«Ż +GenericName[zh_TW]=éµä»¶ç”¨ć¶ç«Ż +Exec=icedove-uxp %u +Terminal=false +Type=Application +Icon=icedove-uxp +Categories=Network;Email; +MimeType=message/rfc822;x-scheme-handler/mailto;application/x-xpinstall; +StartupNotify=true +Actions=ComposeMessage;OpenAddressBook; + +[Desktop Action ComposeMessage] +Name=Write new message +Name[ar]=اŮتب رسالة جديدة +Name[ast]=Redactar mensaxe nuevu +Name[be]=НапіŃаць новы ліŃŃ‚ +Name[bg]=СъŃтавяне на ново Ńъобщение +Name[br]=Skrivañ ur gemennadenn nevez +Name[ca]=Escriu un missatge nou +Name[cs]=Napsat novou zprávu +Name[da]=Skriv en ny meddelelse +Name[de]=Neue Nachricht verfassen +Name[el]=Σύνταξη νέου μηνύματος +Name[es_AR]=Escribir un nuevo mensaje +Name[es_ES]=Redactar nuevo mensaje +Name[et]=Kirjuta uus kiri +Name[eu]=Idatzi mezu berria +Name[fi]=Kirjoita uusi viesti +Name[fr]=RĂ©diger un nouveau message +Name[fy_NL]=Skriuw in nij berjocht +Name[ga_IE]=ScrĂ­obh teachtaireacht nua +Name[gd]=Sgrìobh teachdaireachd Ăąr +Name[gl]=Escribir unha nova mensaxe +Name[he]=כתיבת הודעה חדשה +Name[hr]=Piši novu poruku +Name[hu]=Ăšj ĂĽzenet Ă­rása +Name[hy_AM]=ÔłÖ€ŐĄŐ¬ Ő¶Ő¸Ö€ Ő¶ŐˇŐ´ŐˇŐŻ +Name[is]=SKrifa nĂ˝jan pĂłst +Name[it]=Scrivi nuovo messaggio +Name[ja]=ć–°ă—ă„ăˇăă‚»ăĽă‚¸ă‚’作ćă™ă‚‹ +Name[ko]=ě 메시지 작성 +Name[lt]=Rašyti naujÄ… laiškÄ… +Name[nb_NO]=Skriv ny melding +Name[nl]=Nieuw bericht aanmaken +Name[nn_NO]=Skriv ny melding +Name[pl]=Nowa wiadomość +Name[pt_BR]=Nova mensagem +Name[pt_PT]=Escrever nova mensagem +Name[rm]=Scriver in nov messadi +Name[ro]=Scrie un mesaj nou +Name[ru]=Создать новое Ńообщение +Name[si]=නව ලිපියක් ලියන්න +Name[sk]=Nová e-mailová správa +Name[sl]=Sestavi novo sporoÄŤilo +Name[sq]=Shkruani mesazh tĂ« ri +Name[sr]=ПиŃање нове порŃке +Name[sv_SE]=Skriv ett nytt meddelande +Name[ta_LK]=பŕŻŕ®¤ŕ®żŕ®Ż செய்திய௠எழŕŻŕ®¤ŕŻŕ®• +Name[tr]=Yeni ileti yaz +Name[uk]=НапиŃати нового лиŃта +Name[vi]=Viáşżt thư má»›i +Name[zh_CN]=编写新ć¶ćŻ +Name[zh_TW]=寫一ĺ°ć–°č¨ŠćŻ +Exec=icedove-uxp -compose + +[Desktop Action OpenAddressBook] +Name=Open address book +Name[ar]=اŮŘŞŘ­ ŘŻŮتر العناŮين +Name[ast]=Abrir llibreta de direiciones +Name[be]=Đдкрыць адраŃĐ˝ŃŃŽ ĐşĐ˝Ń–ĐłŃ +Name[bg]=Отваряне на адреŃник +Name[br]=Digeriñ ur c'harned chomlec'hioĂą +Name[ca]=Obre la llibreta d'adreces +Name[cs]=Otevřít Adresář +Name[da]=Ă…bn adressebog +Name[de]=Adressbuch öffnen +Name[el]=Άνοιγμα ευĎετηĎίου διευθύνĎεων +Name[es_AR]=Abrir libreta de direcciones +Name[es_ES]=Abrir libreta de direcciones +Name[et]=Ava aadressiraamat +Name[eu]=Ireki helbide-liburua +Name[fi]=Avaa osoitekirja +Name[fr]=Ouvrir un carnet d'adresses +Name[fy_NL]=Iepenje adresboek +Name[ga_IE]=Oscail leabhar seoltaĂ­ +Name[gd]=Fosgail leabhar-sheòlaidhean +Name[gl]=Abrir a axenda de enderezos +Name[he]=פתיחת ספר כתובות +Name[hr]=Otvori adresar +Name[hu]=CĂ­mjegyzĂ©k megnyitása +Name[hy_AM]=Ô˛ŐˇÖŐĄŐ¬ Ő€ŐˇŐ˝ÖŐĄŐˇŐŁŐ«Ö€Ö„Ő¨ +Name[is]=Opna nafnaskrá +Name[it]=Apri rubrica +Name[ja]=アă‰ă¬ă‚ąĺ¸łă‚’開㏠+Name[ko]=주소록 열기 +Name[lt]=Atverti adresĹł knygÄ… +Name[nb_NO]=Ă…pne adressebok +Name[nl]=Adresboek openen +Name[nn_NO]=Opne adressebok +Name[pl]=KsiÄ…ĹĽka adresowa +Name[pt_BR]=Catálogo de endereços +Name[pt_PT]=Abrir livro de endereços +Name[rm]=Avrir il cudeschet d'adressas +Name[ro]=Deschide agenda de contacte +Name[ru]=Открыть адреŃĐ˝ŃŃŽ ĐşĐ˝Đ¸ĐłŃ +Name[si]=ලිපින ŕ¶´ŕ·śŕ¶­ විවŕ·ŕ¶­ කරන්න +Name[sk]=OtvoriĹĄ adresár +Name[sl]=Odpri adressar +Name[sq]=Hapni libĂ«r adresash +Name[sr]=Отвори адреŃар +Name[sv_SE]=Ă–ppna adressboken +Name[ta_LK]=ŕ®®ŕŻŕ®•வரி பத்தகத்த௠திறக்க +Name[tr]=Adres defterini aç +Name[uk]=Відкрити адреŃĐ˝Ń ĐşĐ˝Đ¸ĐłŃ +Name[vi]=Mở sổ địa chỉ +Name[zh_CN]=打开通讯录 +Name[zh_TW]=開啟通訊錄 +Exec=icedove-uxp -addressbook diff --git a/icedove-uxp/icedove-uxp.install b/icedove-uxp/icedove-uxp.install new file mode 100644 index 0000000..ffe8a28 --- /dev/null +++ b/icedove-uxp/icedove-uxp.install @@ -0,0 +1,29 @@ +post_install() { + echo '>>> !!!MANUAL UPGRADE REQUIRED FOR EXISTING PROFILES!!!' + echo '>>> =================================================================================' + echo '>>> The latest version of Icedove-UXP now uses its own profile directory.' + echo '>>> In order to use your existing mail profile, please rename "~/.mozilla/thunderbird"' + echo '>>> to "~/.hyperbola/icedove-uxp". e.g.:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> mkdir -p ~/.hyperbola/icedove-uxp' + echo '>>> cp -a ~/.mozilla/thunderbird/* ~/.hyperbola/icedove-uxp' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Once you have confirmed your profile is working in all installed application(s)' + echo '>>> you may remove the ~/.mozilla directory.' +} + +post_upgrade() { + if (( $(vercmp $2 52.9.20190826-1) < 0 )); then + echo '>>> !!!MANUAL UPGRADE REQUIRED FOR EXISTING PROFILES!!!' + echo '>>> =================================================================================' + echo '>>> The latest version of Icedove-UXP now uses its own profile directory.' + echo '>>> In order to use your existing mail profile, please rename "~/.mozilla/thunderbird"' + echo '>>> to "~/.hyperbola/icedove-uxp". e.g.:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> mkdir -p ~/.hyperbola/icedove-uxp' + echo '>>> cp -a ~/.mozilla/thunderbird/* ~/.hyperbola/icedove-uxp' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Once you have confirmed your profile is working in all installed application(s)' + echo '>>> you may remove the ~/.mozilla directory.' + fi +} diff --git a/icedove-uxp/mozconfig b/icedove-uxp/mozconfig new file mode 100644 index 0000000..122a247 --- /dev/null +++ b/icedove-uxp/mozconfig @@ -0,0 +1,42 @@ +ac_add_options --enable-application=mail +ac_add_options --enable-calendar + +ac_add_options --prefix=/usr +ac_add_options --enable-release +ac_add_options --enable-gold +ac_add_options --enable-pie +ac_add_options --enable-optimize="-O2" + +# Icedove-UXP +ac_add_options --disable-safe-browsing +ac_add_options --disable-url-classifier +ac_add_options --disable-tests + +# System libraries +#ac_add_options --with-system-nspr # keep disabled for stability +#ac_add_options --with-system-nss # keep disabled for stability +#ac_add_options --with-system-icu # keep disabled for stability +ac_add_options --with-system-jpeg +ac_add_options --with-system-zlib +ac_add_options --with-system-bz2 +#ac_add_options --with-system-libvpx # keep disabled for freedom issues +ac_add_options --enable-system-hunspell +#ac_add_options --enable-system-sqlite # keep disabled for stability +ac_add_options --enable-system-ffi +ac_add_options --enable-system-pixman + +# Disable bloat +ac_add_options --disable-necko-wifi +ac_add_options --disable-dbus +ac_add_options --disable-jack +ac_add_options --disable-pulseaudio + +# Features +ac_add_options --enable-default-toolkit=cairo-gtk2 +ac_add_options --disable-gconf +ac_add_options --disable-crashreporter +ac_add_options --disable-alsa +ac_add_options --enable-sndio +ac_add_options --disable-updater + +# vim:set ft=sh: diff --git a/icedove-uxp/vendor.js b/icedove-uxp/vendor.js new file mode 100644 index 0000000..426f6ee --- /dev/null +++ b/icedove-uxp/vendor.js @@ -0,0 +1,26 @@ +// Use LANG environment variable to choose locale +pref("intl.locale.matchOS", true); + +// Disable default mailer checking. +pref("mail.shell.checkDefaultMail", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); + +// Disable Social API for content +pref("social.remote-install.enabled", false); +pref("social.toast-notifications.enabled", false); + +// Make sure that whitelisted and directory installs are empty +pref("social.whitelist", ""); +pref("social.directories", ""); + +// Disable the GeoLocation API for content +pref("geo.enabled", false); + +// Pointing the "Help -> What's new" menu entry to wiki.hyperbola.info +pref("mailnews.start_page.override_url", "https://wiki.hyperbola.info/doku.php?id=en:project:icedove-uxp"); + +// Enable sndio audio backend +pref("media.cubeb.backend", "sndio"); diff --git a/iceweasel-uxp/0001-Restore-risky-system-libraries.patch b/iceweasel-uxp/0001-Restore-risky-system-libraries.patch new file mode 100644 index 0000000..8b19daa --- /dev/null +++ b/iceweasel-uxp/0001-Restore-risky-system-libraries.patch @@ -0,0 +1,743 @@ +From 4a192ea19e118a6b8c982b4a8a14fd4523c287b8 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:07:41 -0400 +Subject: [PATCH 01/12] Restore risky system libraries + +WARNING: Not recommended and entirely unsupported upstream. + +libevent - known incompatibilities causing crashes with certain version/application combinations. +ICU - system ICU will break JS Intl. +sqlite - at the core of our profile manipulation, places, and many functions. If the lib API ever deviates in the slightest it will kill us. +libpng for APNG and misc fixes +libvpx for strict compat +--- + build/autoconf/icu.m4 | 16 +- + build/directive4.py | 3 + + build/moz.configure/old.configure | 5 + + config/Makefile.in | 4 + + config/external/icu/moz.build | 22 +- + config/external/moz.build | 6 +- + config/external/nss/Makefile.in | 2 + + config/moz.build | 3 + + config/system-headers | 32 ++ + db/sqlite3/src/moz.build | 10 +- + ipc/chromium/moz.build | 4 +- + .../src/third_party/libeventcommon.mozbuild | 2 +- + ipc/chromium/src/third_party/moz.build | 3 + + media/webrtc/signaling/test/common.build | 3 + + old-configure.in | 284 ++++++++++++++++++ + storage/SQLiteMutex.h | 2 +- + storage/moz.build | 4 + + toolkit/library/moz.build | 9 + + 18 files changed, 393 insertions(+), 21 deletions(-) + +diff --git a/build/autoconf/icu.m4 b/build/autoconf/icu.m4 +index 090d6c0a2..d76c98c29 100644 +--- a/build/autoconf/icu.m4 ++++ b/build/autoconf/icu.m4 +@@ -9,6 +9,18 @@ AC_DEFUN([MOZ_CONFIG_ICU], [ + + ICU_LIB_NAMES= + ++MOZ_SYSTEM_ICU= ++MOZ_ARG_WITH_BOOL(system-icu, ++[ --with-system-icu ++ Use system ICU (located with pkgconfig)], ++ MOZ_SYSTEM_ICU=1) ++if test -n "$MOZ_SYSTEM_ICU"; then ++ PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 58.1) ++ CFLAGS="$CFLAGS $MOZ_ICU_CFLAGS" ++ CXXFLAGS="$CXXFLAGS $MOZ_ICU_CFLAGS" ++fi ++AC_SUBST(MOZ_SYSTEM_ICU) ++ + dnl We always use ICU. + USE_ICU=1 + +@@ -38,7 +50,7 @@ if test -n "$USE_ICU"; then + dnl We also don't do it on Windows because sometimes the file goes + dnl missing -- possibly due to overzealous antivirus software? -- + dnl which prevents the browser from starting up :( +- if test -z "$JS_STANDALONE"; then ++ if test -z "$JS_STANDALONE" -a -z "$MOZ_SYSTEM_ICU"; then + MOZ_ICU_DATA_ARCHIVE=1 + else + MOZ_ICU_DATA_ARCHIVE= +@@ -51,7 +63,7 @@ AC_SUBST(USE_ICU) + AC_SUBST(ICU_DATA_FILE) + AC_SUBST(MOZ_ICU_DATA_ARCHIVE) + +-if test -n "$USE_ICU"; then ++if test -n "$USE_ICU" -a -z "$MOZ_SYSTEM_ICU"; then + if test -z "$YASM" -a -z "$GNU_AS" -a "$COMPILE_ENVIRONMENT"; then + AC_MSG_ERROR([Building ICU requires either yasm or a GNU assembler. If you do not have either of those available for this platform you must use --without-intl-api]) + fi +diff --git a/build/directive4.py b/build/directive4.py +index 650349d68..38465628b 100644 +--- a/build/directive4.py ++++ b/build/directive4.py +@@ -36,6 +36,9 @@ if ('MOZ_OFFICIAL_BRANDING' in listConfig) or (strBrandingDirectory.endswith("br + 'MOZ_SYSTEM_JPEG', + 'MOZ_SYSTEM_ZLIB', + 'MOZ_SYSTEM_BZ2', ++ 'MOZ_SYSTEM_PNG', ++ 'MOZ_SYSTEM_LIBVPX', ++ 'MOZ_SYSTEM_SQLITE', + 'MOZ_SYSTEM_JEMALLOC' + ] + +diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure +index aba1edf85..9568b4c88 100644 +--- a/build/moz.configure/old.configure ++++ b/build/moz.configure/old.configure +@@ -236,6 +236,7 @@ def old_configure_options(*options): + '--enable-system-cairo', + '--enable-system-extension-dirs', + '--enable-system-pixman', ++ '--enable-system-sqlite', + '--enable-tasktracer', + '--enable-tests', + '--enable-thread-sanitizer', +@@ -289,7 +290,11 @@ def old_configure_options(*options): + '--with-sixgill', + '--with-soft-float', + '--with-system-bz2', ++ '--with-system-icu', + '--with-system-jpeg', ++ '--with-system-libevent', ++ '--with-system-libvpx', ++ '--with-system-png', + '--with-system-zlib', + '--with-thumb', + '--with-thumb-interwork', +diff --git a/config/Makefile.in b/config/Makefile.in +index c9cc3592c..10807cfb9 100644 +--- a/config/Makefile.in ++++ b/config/Makefile.in +@@ -44,7 +44,11 @@ export:: $(export-preqs) + -DMOZ_SYSTEM_HUNSPELL=$(MOZ_SYSTEM_HUNSPELL) \ + -DMOZ_SYSTEM_BZ2=$(MOZ_SYSTEM_BZ2) \ + -DMOZ_SYSTEM_ZLIB=$(MOZ_SYSTEM_ZLIB) \ ++ -DMOZ_SYSTEM_PNG=$(MOZ_SYSTEM_PNG) \ + -DMOZ_SYSTEM_JPEG=$(MOZ_SYSTEM_JPEG) \ ++ -DMOZ_SYSTEM_LIBEVENT=$(MOZ_SYSTEM_LIBEVENT) \ ++ -DMOZ_SYSTEM_LIBVPX=$(MOZ_SYSTEM_LIBVPX) \ ++ -DMOZ_SYSTEM_ICU=$(MOZ_SYSTEM_ICU) \ + $(srcdir)/system-headers $(srcdir)/stl-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers + $(INSTALL) system_wrappers $(DIST) + +diff --git a/config/external/icu/moz.build b/config/external/icu/moz.build +index 488a02159..248652a85 100644 +--- a/config/external/icu/moz.build ++++ b/config/external/icu/moz.build +@@ -6,14 +6,16 @@ + + Library('icu') + +-DIRS += [ +- 'common', +- 'data', +- 'i18n', +-] +- +-if CONFIG['MOZ_ICU_DATA_ARCHIVE']: +- DIRS += ['stubdata'] +- USE_LIBS += ['icustubdata'] ++if CONFIG['MOZ_SYSTEM_ICU']: ++ OS_LIBS += CONFIG['MOZ_ICU_LIBS'] + else: +- USE_LIBS += ['icudata'] ++ DIRS += [ ++ 'common', ++ 'data', ++ 'i18n', ++ ] ++ if CONFIG['MOZ_ICU_DATA_ARCHIVE']: ++ DIRS += ['stubdata'] ++ USE_LIBS += ['icustubdata'] ++ else: ++ USE_LIBS += ['icudata'] +diff --git a/config/external/moz.build b/config/external/moz.build +index 1234016fa..cedef8a31 100644 +--- a/config/external/moz.build ++++ b/config/external/moz.build +@@ -28,12 +28,14 @@ if CONFIG['MOZ_TREMOR']: + if CONFIG['MOZ_WEBM_ENCODER']: + external_dirs += ['media/libmkv'] + +-external_dirs += ['media/libvpx'] ++if not CONFIG['MOZ_SYSTEM_LIBVPX']: ++ external_dirs += ['media/libvpx'] + + if CONFIG['MOZ_AV1']: + external_dirs += ['media/libaom'] + +-external_dirs += ['media/libpng'] ++if not CONFIG['MOZ_SYSTEM_PNG']: ++ external_dirs += ['media/libpng'] + + external_dirs += ['media/libwebp'] + +diff --git a/config/external/nss/Makefile.in b/config/external/nss/Makefile.in +index 7289e57f4..14eed9712 100644 +--- a/config/external/nss/Makefile.in ++++ b/config/external/nss/Makefile.in +@@ -119,9 +119,11 @@ DEFAULT_GMAKE_FLAGS += NSS_ENABLE_TLS_1_3=1 + ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_1) + DEFAULT_GMAKE_FLAGS += OS_DLLFLAGS='-static-libgcc' NSPR31_LIB_PREFIX=lib + endif ++ifndef MOZ_SYSTEM_SQLITE + DEFAULT_GMAKE_FLAGS += SQLITE_LIB_NAME=mozsqlite3 + DEFAULT_GMAKE_FLAGS += SQLITE_LIB_DIR=$(ABS_DIST)/../db/sqlite3/src + DEFAULT_GMAKE_FLAGS += SQLITE_INCLUDE_DIR=$(ABS_DIST)/include ++endif + ifdef NSS_DISABLE_DBM + DEFAULT_GMAKE_FLAGS += NSS_DISABLE_DBM=1 + endif +diff --git a/config/moz.build b/config/moz.build +index c512bd07d..7bcac7992 100644 +--- a/config/moz.build ++++ b/config/moz.build +@@ -29,6 +29,9 @@ if CONFIG['HOST_OS_ARCH'] != 'WINNT': + # while the program here is in C. + HostProgram('nsinstall_real', c_only=True) + ++if CONFIG['MOZ_SYSTEM_ICU']: ++ DEFINES['MOZ_SYSTEM_ICU'] = True ++ + PYTHON_UNIT_TESTS += [ + 'tests/test_mozbuild_reading.py', + 'tests/unit-expandlibs.py', +diff --git a/config/system-headers b/config/system-headers +index 3685d6d1c..b10324f0f 100644 +--- a/config/system-headers ++++ b/config/system-headers +@@ -1253,6 +1253,9 @@ soundtouch/SoundTouchFactory.h + #if MOZ_LIBAV_FFT==1 + libavcodec/avfft.h + #endif ++#if MOZ_SYSTEM_PNG==1 ++png.h ++#endif + #if MOZ_SYSTEM_ZLIB==1 + zlib.h + #endif +@@ -1273,7 +1276,11 @@ bzlib.h + #ifdef MOZ_ENABLE_GIO + gio/gio.h + #endif ++#if MOZ_SYSTEM_LIBEVENT==1 ++event.h ++#else + sys/event.h ++#endif + #ifdef MOZ_ENABLE_LIBPROXY + proxy.h + #endif +@@ -1288,6 +1295,15 @@ QtSparql/qsparqlresult.h + #if MOZ_TREE_PIXMAN!=1 + pixman.h + #endif ++#if MOZ_SYSTEM_LIBVPX==1 ++vpx/svc_context.h ++vpx/vpx_codec.h ++vpx/vpx_decoder.h ++vpx/vpx_encoder.h ++vpx/vp8cx.h ++vpx/vp8dx.h ++vpx_mem/vpx_mem.h ++#endif + gst/gst.h + gst/app/gstappsink.h + gst/app/gstappsrc.h +@@ -1300,6 +1316,22 @@ kvm.h + spawn.h + err.h + xlocale.h ++#ifdef MOZ_SYSTEM_ICU ++unicode/locid.h ++unicode/numsys.h ++unicode/timezone.h ++unicode/ucal.h ++unicode/uchar.h ++unicode/uclean.h ++unicode/ucol.h ++unicode/udat.h ++unicode/udatpg.h ++unicode/uenum.h ++unicode/unorm.h ++unicode/unum.h ++unicode/ustring.h ++unicode/utypes.h ++#endif + libutil.h + unwind.h + fenv.h +diff --git a/db/sqlite3/src/moz.build b/db/sqlite3/src/moz.build +index eba8633b5..d8cec85ff 100644 +--- a/db/sqlite3/src/moz.build ++++ b/db/sqlite3/src/moz.build +@@ -9,9 +9,13 @@ NO_VISIBILITY_FLAGS = True + # We allow warnings for third-party code that can be updated from upstream. + ALLOW_COMPILER_WARNINGS = True + +-GeckoSharedLibrary('sqlite', linkage=None, mozglue='library') +-SHARED_LIBRARY_NAME = 'mozsqlite3' +-SYMBOLS_FILE = 'sqlite.symbols' ++if CONFIG['MOZ_SYSTEM_SQLITE']: ++ Library('sqlite') ++ OS_LIBS += CONFIG['SQLITE_LIBS'] ++else: ++ GeckoSharedLibrary('sqlite', linkage=None, mozglue='library') ++ SHARED_LIBRARY_NAME = 'mozsqlite3' ++ SYMBOLS_FILE = 'sqlite.symbols' + + EXPORTS += ['sqlite3.h'] + SOURCES += ['sqlite3.c'] +diff --git a/ipc/chromium/moz.build b/ipc/chromium/moz.build +index b386134f9..085e65c96 100644 +--- a/ipc/chromium/moz.build ++++ b/ipc/chromium/moz.build +@@ -58,7 +58,7 @@ if os_win: + 'src/chrome/common/process_watcher_win.cc', + 'src/chrome/common/transport_dib_win.cc', + ] +-else: ++elif not CONFIG['MOZ_SYSTEM_LIBEVENT']: + DIRS += ['src/third_party'] + + if os_posix: +@@ -145,7 +145,7 @@ if os_solaris: + 'src/base/time_posix.cc', + ] + +-else: ++elif not CONFIG['MOZ_SYSTEM_LIBEVENT']: + LOCAL_INCLUDES += ['src/third_party/libevent/linux'] + + ost = CONFIG['OS_TEST'] +diff --git a/ipc/chromium/src/third_party/libeventcommon.mozbuild b/ipc/chromium/src/third_party/libeventcommon.mozbuild +index 33482c661..2b45ecb19 100644 +--- a/ipc/chromium/src/third_party/libeventcommon.mozbuild ++++ b/ipc/chromium/src/third_party/libeventcommon.mozbuild +@@ -32,7 +32,7 @@ else: + else: + libevent_include_suffix = 'linux' + +-if os_posix: ++if os_posix and not CONFIG['MOZ_SYSTEM_LIBEVENT']: + DEFINES['HAVE_CONFIG_H'] = True + LOCAL_INCLUDES += sorted([ + 'libevent', +diff --git a/ipc/chromium/src/third_party/moz.build b/ipc/chromium/src/third_party/moz.build +index 20a5043fb..2b99e53b3 100644 +--- a/ipc/chromium/src/third_party/moz.build ++++ b/ipc/chromium/src/third_party/moz.build +@@ -10,6 +10,9 @@ include(libevent_path_prefix + '/libeventcommon.mozbuild') + if os_win: + error('should not reach here on Windows') + ++if CONFIG['MOZ_SYSTEM_LIBEVENT']: ++ error('should not reach here if we are using a native libevent') ++ + UNIFIED_SOURCES += [ + 'libevent/buffer.c', + 'libevent/bufferevent.c', +diff --git a/media/webrtc/signaling/test/common.build b/media/webrtc/signaling/test/common.build +index 2d9a57139..3e5450f5d 100644 +--- a/media/webrtc/signaling/test/common.build ++++ b/media/webrtc/signaling/test/common.build +@@ -105,6 +105,9 @@ if CONFIG['MOZ_ALSA']: + if CONFIG['MOZ_SYSTEM_JPEG']: + OS_LIBS += CONFIG['MOZ_JPEG_LIBS'] + ++if CONFIG['MOZ_SYSTEM_LIBVPX']: ++ OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS'] ++ + if not CONFIG['MOZ_TREE_PIXMAN']: + OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] + +diff --git a/old-configure.in b/old-configure.in +index 2965f60b7..b3ac8c2f1 100644 +--- a/old-configure.in ++++ b/old-configure.in +@@ -2005,6 +2005,44 @@ esac + + MOZ_CONFIG_NSPR() + ++dnl ======================================================== ++dnl system libevent Support ++dnl ======================================================== ++MOZ_ARG_WITH_STRING(system-libevent, ++[ --with-system-libevent[=PFX] ++ Use system libevent [installed at prefix PFX]], ++ LIBEVENT_DIR=$withval) ++ ++_SAVE_CFLAGS=$CFLAGS ++_SAVE_LDFLAGS=$LDFLAGS ++_SAVE_LIBS=$LIBS ++if test "$LIBEVENT_DIR" = yes; then ++ PKG_CHECK_MODULES(MOZ_LIBEVENT, libevent, ++ MOZ_SYSTEM_LIBEVENT=1, ++ LIBEVENT_DIR=/usr) ++fi ++if test -z "$LIBEVENT_DIR" -o "$LIBEVENT_DIR" = no; then ++ MOZ_SYSTEM_LIBEVENT= ++elif test -z "$MOZ_SYSTEM_LIBEVENT"; then ++ CFLAGS="-I${LIBEVENT_DIR}/include $CFLAGS" ++ LDFLAGS="-L${LIBEVENT_DIR}/lib $LDFLAGS" ++ MOZ_CHECK_HEADER(event.h, ++ [if test ! -f "${LIBEVENT_DIR}/include/event.h"; then ++ AC_MSG_ERROR([event.h found, but is not in ${LIBEVENT_DIR}/include]) ++ fi], ++ AC_MSG_ERROR([--with-system-libevent requested but event.h not found])) ++ AC_CHECK_LIB(event, event_init, ++ [MOZ_SYSTEM_LIBEVENT=1 ++ MOZ_LIBEVENT_CFLAGS="-I${LIBEVENT_DIR}/include" ++ MOZ_LIBEVENT_LIBS="-L${LIBEVENT_DIR}/lib -levent"], ++ [MOZ_SYSTEM_LIBEVENT= MOZ_LIBEVENT_CFLAGS= MOZ_LIBEVENT_LIBS=]) ++fi ++CFLAGS=$_SAVE_CFLAGS ++LDFLAGS=$_SAVE_LDFLAGS ++LIBS=$_SAVE_LIBS ++ ++AC_SUBST(MOZ_SYSTEM_LIBEVENT) ++ + # TODO: We need to find a better place to define this include + NSS_CFLAGS="-I${DIST}/include/nss" + AC_SUBST(NSS_CFLAGS) +@@ -2092,6 +2130,51 @@ if test "${BZ2_DIR}" -a -d "${BZ2_DIR}" -a "$MOZ_SYSTEM_BZ2" = 1; then + MOZ_BZ2_LIBS="-L${BZ2_DIR}/lib ${MOZ_BZ2_LIBS}" + fi + ++dnl ======================================================== ++dnl system PNG Support ++dnl ======================================================== ++MOZ_ARG_WITH_STRING(system-png, ++[ --with-system-png[=PFX] ++ Use system libpng [installed at prefix PFX]], ++ PNG_DIR=$withval) ++ ++_SAVE_CFLAGS=$CFLAGS ++_SAVE_LDFLAGS=$LDFLAGS ++_SAVE_LIBS=$LIBS ++if test -n "${PNG_DIR}" -a "${PNG_DIR}" != "yes"; then ++ CFLAGS="-I${PNG_DIR}/include $CFLAGS" ++ LDFLAGS="-L${PNG_DIR}/lib $LDFLAGS" ++fi ++if test -z "$PNG_DIR" -o "$PNG_DIR" = no; then ++ MOZ_SYSTEM_PNG= ++else ++ AC_CHECK_LIB(png, png_get_valid, [MOZ_SYSTEM_PNG=1 MOZ_PNG_LIBS="-lpng"], ++ AC_MSG_ERROR([--with-system-png requested but no working libpng found])) ++ AC_CHECK_LIB(png, png_get_acTL, , ++ AC_MSG_ERROR([--with-system-png won't work because the system's libpng doesn't have APNG support])) ++fi ++if test "$MOZ_SYSTEM_PNG" = 1; then ++ AC_TRY_COMPILE([ #include ++ #include ++ #include ], ++ [ #if PNG_LIBPNG_VER < $MOZPNG ++ #error "Insufficient libpng version ($MOZPNG required)." ++ #endif ++ #ifndef PNG_UINT_31_MAX ++ #error "Insufficient libpng version." ++ #endif ], ++ MOZ_SYSTEM_PNG=1, ++ AC_MSG_ERROR([--with-system-png requested but no working libpng found])) ++fi ++CFLAGS=$_SAVE_CFLAGS ++LDFLAGS=$_SAVE_LDFLAGS ++LIBS=$_SAVE_LIBS ++ ++if test "${PNG_DIR}" -a -d "${PNG_DIR}" -a "$MOZ_SYSTEM_PNG" = 1; then ++ MOZ_PNG_CFLAGS="-I${PNG_DIR}/include" ++ MOZ_PNG_LIBS="-L${PNG_DIR}/lib ${MOZ_PNG_LIBS}" ++fi ++ + fi # SKIP_LIBRARY_CHECKS + + dnl ======================================================== +@@ -2962,6 +3045,13 @@ fi + + AC_SUBST(MOZ_EME) + ++dnl ======================================================== ++dnl system libvpx Support ++dnl ======================================================== ++MOZ_ARG_WITH_BOOL(system-libvpx, ++[ --with-system-libvpx Use system libvpx (located with pkgconfig)], ++ MOZ_SYSTEM_LIBVPX=1) ++ + MOZ_LIBVPX_CFLAGS= + MOZ_LIBVPX_LIBS= + +@@ -2969,6 +3059,35 @@ if test -n "$MOZ_VPX_ERROR_CONCEALMENT" ; then + AC_DEFINE(MOZ_VPX_ERROR_CONCEALMENT) + fi + ++_SAVE_CFLAGS=$CFLAGS ++_SAVE_LIBS=$LIBS ++if test -n "$MOZ_SYSTEM_LIBVPX"; then ++ dnl ============================ ++ dnl === libvpx Version check === ++ dnl ============================ ++ dnl Check to see if we have a system libvpx package. ++ PKG_CHECK_MODULES(MOZ_LIBVPX, vpx >= 1.5.0) ++ ++ CFLAGS="$CFLAGS $MOZ_LIBVPX_CFLAGS" ++ LIBS="$LIBS $MOZ_LIBVPX_LIBS" ++ ++ MOZ_CHECK_HEADER([vpx/vpx_decoder.h], [], ++ [AC_MSG_ERROR([Couldn't find vpx/vpx_decoder.h which is required for build with system libvpx. Use --without-system-libvpx to build with in-tree libvpx.])]) ++ ++ AC_CHECK_LIB(vpx, vpx_codec_dec_init_ver, [], ++ [AC_MSG_ERROR([--with-system-libvpx requested but symbol vpx_codec_dec_init_ver not found])]) ++ ++ MOZ_CHECK_HEADER([vpx_mem/vpx_mem.h], ++ [AC_CHECK_FUNC(vpx_mem_set_functions)]) ++ if test "$ac_cv_header_vpx_mem_vpx_mem_h" = no -o \ ++ "$ac_cv_func_vpx_mem_set_functions" = no; then ++ AC_DEFINE(MOZ_VPX_NO_MEM_REPORTING) ++ fi ++fi ++CFLAGS=$_SAVE_CFLAGS ++LIBS=$_SAVE_LIBS ++ ++AC_SUBST(MOZ_SYSTEM_LIBVPX) + AC_SUBST_LIST(MOZ_LIBVPX_CFLAGS) + AC_SUBST_LIST(MOZ_LIBVPX_LIBS) + +@@ -3723,6 +3842,170 @@ else + fi + fi + ++dnl ======================================================== ++dnl Check for sqlite ++dnl ======================================================== ++ ++MOZ_SYSTEM_SQLITE= ++MOZ_ARG_ENABLE_BOOL(system-sqlite, ++[ --enable-system-sqlite Use system sqlite (located with pkgconfig)], ++MOZ_SYSTEM_SQLITE=1, ++MOZ_SYSTEM_SQLITE= ) ++ ++if test -n "$MOZ_SYSTEM_SQLITE" ++then ++ dnl ============================ ++ dnl === SQLite Version check === ++ dnl ============================ ++ dnl Check to see if the system SQLite package is new enough. ++ PKG_CHECK_MODULES(SQLITE, sqlite3 >= $SQLITE_VERSION) ++ ++ dnl ================================== ++ dnl === SQLITE_SECURE_DELETE check === ++ dnl ================================== ++ dnl Check to see if the system SQLite package is compiled with ++ dnl SQLITE_SECURE_DELETE enabled. ++ AC_MSG_CHECKING(for SQLITE_SECURE_DELETE support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_secure_delete,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_SECURE_DELETE"); ++ }], ++ ac_cv_sqlite_secure_delete=yes, ++ ac_cv_sqlite_secure_delete=no, ++ ac_cv_sqlite_secure_delete=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_secure_delete) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_secure_delete" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_SECURE_DELETE.]) ++ fi ++ ++ dnl =============================== ++ dnl === SQLITE_THREADSAFE check === ++ dnl =============================== ++ dnl Check to see if the system SQLite package is compiled with ++ dnl SQLITE_THREADSAFE enabled. ++ AC_MSG_CHECKING(for SQLITE_THREADSAFE support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_threadsafe,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_THREADSAFE=1"); ++ }], ++ ac_cv_sqlite_threadsafe=yes, ++ ac_cv_sqlite_threadsafe=no, ++ ac_cv_sqlite_threadsafe=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_threadsafe) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_threadsafe" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_THREADSAFE.]) ++ fi ++ ++ dnl ================================ ++ dnl === SQLITE_ENABLE_FTS3 check === ++ dnl ================================ ++ dnl check to see if the system SQLite package is compiled with ++ dnl SQLITE_ENABLE_FTS3 enabled. ++ AC_MSG_CHECKING(for SQLITE_ENABLE_FTS3 support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_enable_fts3,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_ENABLE_FTS3"); ++ }], ++ ac_cv_sqlite_enable_fts3=yes, ++ ac_cv_sqlite_enable_fts3=no, ++ ac_cv_sqlite_enable_fts3=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_enable_fts3) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_enable_fts3" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_FTS3.]) ++ fi ++ ++ dnl ========================================= ++ dnl === SQLITE_ENABLE_UNLOCK_NOTIFY check === ++ dnl ========================================= ++ dnl check to see if the system SQLite package is compiled with ++ dnl SQLITE_ENABLE_UNLOCK_NOTIFY enabled. ++ AC_MSG_CHECKING(for SQLITE_ENABLE_UNLOCK_NOTIFY support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_enable_unlock_notify,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_ENABLE_UNLOCK_NOTIFY"); ++ }], ++ ac_cv_sqlite_enable_unlock_notify=yes, ++ ac_cv_sqlite_enable_unlock_notify=no, ++ ac_cv_sqlite_enable_unlock_notify=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_enable_unlock_notify) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_enable_unlock_notify" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_UNLOCK_NOTIFY.]) ++ fi ++ ++ dnl ========================================= ++ dnl === SQLITE_ENABLE_DBSTAT_VTAB check === ++ dnl ========================================= ++ dnl check to see if the system SQLite package is compiled with ++ dnl SQLITE_ENABLE_DBSTAT_VTAB. ++ AC_MSG_CHECKING(for SQLITE_ENABLE_DBSTAT_VTAB support in system SQLite) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $SQLITE_CFLAGS" ++ _SAVE_LIBS="$LIBS" ++ LIBS="$LIBS $SQLITE_LIBS" ++ AC_CACHE_VAL(ac_cv_sqlite_dbstat_vtab,[ ++ AC_TRY_RUN([ ++ #include "sqlite3.h" ++ int main(int argc, char **argv){ ++ return !sqlite3_compileoption_used("SQLITE_ENABLE_DBSTAT_VTAB"); ++ }], ++ ac_cv_sqlite_dbstat_vtab=yes, ++ ac_cv_sqlite_dbstat_vtab=no, ++ ac_cv_sqlite_dbstat_vtab=no ++ ) ++ ]) ++ AC_MSG_RESULT($ac_cv_sqlite_dbstat_vtab) ++ CFLAGS="$_SAVE_CFLAGS" ++ LIBS="$_SAVE_LIBS" ++ if test "x$ac_cv_sqlite_dbstat_vtab" = "xno"; then ++ AC_MSG_ERROR([System SQLite library is not compiled with SQLITE_ENABLE_DBSTAT_VTAB.]) ++ fi ++fi ++ ++if test -n "$MOZ_SYSTEM_SQLITE"; then ++ AC_DEFINE(MOZ_SYSTEM_SQLITE) ++fi ++AC_SUBST(MOZ_SYSTEM_SQLITE) ++ + dnl ======================================================== + dnl = Enable Google safe browsing (anti-phishing) + dnl ======================================================== +@@ -5349,6 +5632,7 @@ MC_BASILISK=$MC_BASILISK + MC_PALEMOON=$MC_PALEMOON + MOZ_EME=$MOZ_EME + MOZ_WEBRTC=$MOZ_WEBRTC ++MOZ_SYSTEM_LIBEVENT=$MOZ_SYSTEM_LIBEVENT + MOZ_SYSTEM_JPEG=$MOZ_SYSTEM_JPEG + MOZ_SYSTEM_ZLIB=$MOZ_SYSTEM_ZLIB + MOZ_SYSTEM_BZ2=$MOZ_SYSTEM_BZ2 +diff --git a/storage/SQLiteMutex.h b/storage/SQLiteMutex.h +index eaa69eab1..a38525fd6 100644 +--- a/storage/SQLiteMutex.h ++++ b/storage/SQLiteMutex.h +@@ -50,7 +50,7 @@ public: + mMutex = aMutex; + } + +-#if !defined(DEBUG) ++#if !defined(DEBUG) || defined(MOZ_SYSTEM_SQLITE) + /** + * Acquires the mutex. + */ +diff --git a/storage/moz.build b/storage/moz.build +index f0e754bdc..606c93001 100644 +--- a/storage/moz.build ++++ b/storage/moz.build +@@ -99,6 +99,10 @@ if CONFIG['MOZ_MEMORY']: + DEFINES['SQLITE_MAX_LIKE_PATTERN_LENGTH'] = 50000 + + # See Sqlite moz.build for reasoning about TEMP_STORE. ++# For system sqlite we cannot use the compile time option, so we use a pragma. ++if CONFIG['MOZ_SYSTEM_SQLITE'] and (CONFIG['OS_TARGET'] == 'Android' ++ or CONFIG['HAVE_64BIT_BUILD']): ++ DEFINES['MOZ_MEMORY_TEMP_STORE_PRAGMA'] = True + + LOCAL_INCLUDES += [ + '/db/sqlite3/src', +diff --git a/toolkit/library/moz.build b/toolkit/library/moz.build +index d9b167547..acfd83aa3 100644 +--- a/toolkit/library/moz.build ++++ b/toolkit/library/moz.build +@@ -195,9 +195,18 @@ if CONFIG['SERVO_TARGET_DIR']: + if CONFIG['MOZ_SYSTEM_JPEG']: + OS_LIBS += CONFIG['MOZ_JPEG_LIBS'] + ++if CONFIG['MOZ_SYSTEM_PNG']: ++ OS_LIBS += CONFIG['MOZ_PNG_LIBS'] ++ + if CONFIG['MOZ_SYSTEM_HUNSPELL']: + OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS'] + ++if CONFIG['MOZ_SYSTEM_LIBEVENT']: ++ OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS'] ++ ++if CONFIG['MOZ_SYSTEM_LIBVPX']: ++ OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS'] ++ + if not CONFIG['MOZ_TREE_PIXMAN']: + OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] + +-- +2.25.2 + diff --git a/iceweasel-uxp/0002-Add-iceweasel-uxp-application-specfic-override.patch b/iceweasel-uxp/0002-Add-iceweasel-uxp-application-specfic-override.patch new file mode 100644 index 0000000..74c1d59 --- /dev/null +++ b/iceweasel-uxp/0002-Add-iceweasel-uxp-application-specfic-override.patch @@ -0,0 +1,44 @@ +From 9de464ed516e1ff2995eb5270d942048e832ae1d Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:15:03 -0400 +Subject: [PATCH 02/12] Add iceweasel-uxp application specfic override + +--- + docshell/base/nsAboutRedirector.cpp | 5 ++--- + toolkit/xre/nsAppRunner.cpp | 4 ++-- + 2 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp +index e1d883532..12a767a78 100644 +--- a/docshell/base/nsAboutRedirector.cpp ++++ b/docshell/base/nsAboutRedirector.cpp +@@ -53,9 +53,8 @@ static RedirEntry kRedirMap[] = { + { "config", "chrome://global/content/config.xul", 0 }, + { "console", "chrome://global/content/console.xul", 0 }, + { +- "credits", "http://www.palemoon.org/Contributors.shtml", +- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | +- nsIAboutModule::MAKE_LINKABLE ++ "credits", "chrome://global/content/aboutCredits.html", ++ nsIAboutModule::MAKE_LINKABLE + }, + #ifdef MOZ_DEVTOOLS + { +diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp +index 55072c474..ad5ba1017 100644 +--- a/toolkit/xre/nsAppRunner.cpp ++++ b/toolkit/xre/nsAppRunner.cpp +@@ -3695,8 +3695,8 @@ XREMain::XRE_mainRun() + // reset the profile. + // For Basilisk and Pale Moon: + // Hard-code MOZ_APP_NAME to firefox because of hard-coded type in migrator. +- aKey = (((MOZ_APP_NAME == "basilisk") +- || (MOZ_APP_NAME == "palemoon")) ++ aKey = (((MOZ_APP_NAME == "iceweasel-uxp") ++ || (MOZ_APP_NAME == "iceweasel-classic")) + ? "firefox" : MOZ_APP_NAME); + + } +-- +2.25.2 + diff --git a/iceweasel-uxp/0003-Uplift-enable-proxy-bypass-protection-flag.patch b/iceweasel-uxp/0003-Uplift-enable-proxy-bypass-protection-flag.patch new file mode 100644 index 0000000..1e55f6c --- /dev/null +++ b/iceweasel-uxp/0003-Uplift-enable-proxy-bypass-protection-flag.patch @@ -0,0 +1,142 @@ +From 4d4919ad99c2139d2c045ef4f1b2da857aeb5d06 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:23:06 -0400 +Subject: [PATCH 03/12] Uplift enable-proxy-bypass-protection flag + +--- + build/moz.configure/old.configure | 1 + + extensions/gio/nsGIOProtocolHandler.cpp | 11 ++++++++--- + netwerk/base/Tickler.h | 2 ++ + old-configure.in | 13 +++++++++++++ + toolkit/profile/nsProfileLock.cpp | 9 +++++++++ + widget/gtk/nsFilePicker.cpp | 4 ++++ + 6 files changed, 37 insertions(+), 3 deletions(-) + +diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure +index 9568b4c88..0d7684118 100644 +--- a/build/moz.configure/old.configure ++++ b/build/moz.configure/old.configure +@@ -216,6 +216,7 @@ def old_configure_options(*options): + '--enable-precompiled-startupcache', + '--enable-pref-extensions', + '--enable-private-build', ++ '--enable-proxy-bypass-protection', + '--enable-pulseaudio', + '--enable-sndio', + '--enable-raw', +diff --git a/extensions/gio/nsGIOProtocolHandler.cpp b/extensions/gio/nsGIOProtocolHandler.cpp +index a378e8700..9adc38f80 100644 +--- a/extensions/gio/nsGIOProtocolHandler.cpp ++++ b/extensions/gio/nsGIOProtocolHandler.cpp +@@ -929,10 +929,15 @@ nsGIOProtocolHandler::InitSupportedProtocolsPref(nsIPrefBranch *prefs) + if (NS_SUCCEEDED(rv)) { + mSupportedProtocols.StripWhitespace(); + ToLowerCase(mSupportedProtocols); ++ } else { ++ mSupportedProtocols.AssignLiteral( ++#ifdef MOZ_PROXY_BYPASS_PROTECTION ++ "" // use none ++#else ++ "smb:,sftp:" // use defaults ++#endif ++ ); + } +- else +- mSupportedProtocols.AssignLiteral("smb:,sftp:"); // use defaults +- + LOG(("gio: supported protocols \"%s\"\n", mSupportedProtocols.get())); + } + +diff --git a/netwerk/base/Tickler.h b/netwerk/base/Tickler.h +index e38f0d99c..3c37250c9 100644 +--- a/netwerk/base/Tickler.h ++++ b/netwerk/base/Tickler.h +@@ -31,7 +31,9 @@ + #include "nsISupports.h" + #include + ++#if !defined(MOZ_PROXY_BYPASS_PROTECTION) + #ifdef MOZ_USE_WIFI_TICKLER ++#endif + #include "mozilla/Mutex.h" + #include "mozilla/TimeStamp.h" + #include "nsAutoPtr.h" +diff --git a/old-configure.in b/old-configure.in +index b3ac8c2f1..06c8eb3c6 100644 +--- a/old-configure.in ++++ b/old-configure.in +@@ -2240,6 +2240,7 @@ MOZ_JETPACK=1 + MOZ_DEVTOOLS_SERVER=1 + MOZ_DEVTOOLS= + MOZ_PLACES=1 ++MOZ_PROXY_BYPASS_PROTECTION= + MOZ_SECURITY_SQLSTORE= + MOZ_SERVICES_HEALTHREPORT=1 + MOZ_SERVICES_SYNC=1 +@@ -5054,6 +5055,18 @@ fi + + AC_SUBST(MOZ_XUL) + ++dnl ======================================================== ++dnl enable proxy bypass protection ++dnl ======================================================== ++MOZ_ARG_ENABLE_BOOL(proxy-bypass-protection, ++[ --enable-proxy-bypass-protection Enable proxy bypass protection], ++ MOZ_PROXY_BYPASS_PROTECTION=1, ++ MOZ_PROXY_BYPASS_PROTECTION=) ++if test -n "$MOZ_PROXY_BYPASS_PROTECTION"; then ++ AC_DEFINE(MOZ_PROXY_BYPASS_PROTECTION) ++fi ++AC_SUBST(MOZ_PROXY_BYPASS_PROTECTION) ++ + dnl ======================================================== + dnl necko configuration options + dnl ======================================================== +diff --git a/toolkit/profile/nsProfileLock.cpp b/toolkit/profile/nsProfileLock.cpp +index d75b6082d..8400c26dc 100644 +--- a/toolkit/profile/nsProfileLock.cpp ++++ b/toolkit/profile/nsProfileLock.cpp +@@ -316,6 +316,14 @@ nsresult nsProfileLock::LockWithSymlink(nsIFile *aLockFile, bool aHaveFcntlLock) + struct in_addr inaddr; + inaddr.s_addr = htonl(INADDR_LOOPBACK); + ++ // Avoid a DNS lookup here with --enable-proxy-bypass-protection. ++ // Instead, always use 127.0.0.1 for the IP address portion ++ // of the lock signature, which may cause the browser to refuse to ++ // start in the rare event that all of the following conditions are met: ++ // 1. The browser profile is on a network file system. ++ // 2. The file system does not support fcntl() locking. ++ // 3. The browser is run from two different computers at the same time. ++#ifndef MOZ_PROXY_BYPASS_PROTECTION + char hostname[256]; + PRStatus status = PR_GetSystemInfo(PR_SI_HOSTNAME, hostname, sizeof hostname); + if (status == PR_SUCCESS) +@@ -326,6 +334,7 @@ nsresult nsProfileLock::LockWithSymlink(nsIFile *aLockFile, bool aHaveFcntlLock) + if (status == PR_SUCCESS) + memcpy(&inaddr, hostent.h_addr, sizeof inaddr); + } ++#endif + + char *signature = + PR_smprintf("%s:%s%lu", inet_ntoa(inaddr), aHaveFcntlLock ? "+" : "", +diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp +index 05d8bb0f0..ff0034a1a 100644 +--- a/widget/gtk/nsFilePicker.cpp ++++ b/widget/gtk/nsFilePicker.cpp +@@ -395,9 +395,13 @@ nsFilePicker::Open(nsIFilePickerShownCallback *aCallback) + } + + void *file_chooser = GtkFileChooserNew(title.get(), parent_widget, action, accept_button); ++ // If we have --enable-proxy-bypass-protection, then don't allow ++ // remote URLs to be used. ++#ifndef MOZ_PROXY_BYPASS_PROTECTION + if (mAllowURLs) { + gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(file_chooser), FALSE); + } ++#endif + + if (action == GTK_FILE_CHOOSER_ACTION_OPEN || action == GTK_FILE_CHOOSER_ACTION_SAVE) { + GtkWidget *img_preview = gtk_image_new(); +-- +2.25.2 + diff --git a/iceweasel-uxp/0004-Hardcode-AppName-in-nsAppRunner.patch b/iceweasel-uxp/0004-Hardcode-AppName-in-nsAppRunner.patch new file mode 100644 index 0000000..a2fac96 --- /dev/null +++ b/iceweasel-uxp/0004-Hardcode-AppName-in-nsAppRunner.patch @@ -0,0 +1,57 @@ +From 2e63d37d5c67acf638985f9f15d6608361de66e6 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sat, 20 Jul 2019 22:48:03 -0400 +Subject: [PATCH 04/12] Hardcode AppName in nsAppRunner + +Patches WM_ClassName and Application Name since we are keeping them unchanged for folder compatibility reasons. +Additional branding improvements of Help and Version String changes courtesy HarvettFox96. +--- + toolkit/xre/nsAppRunner.cpp | 14 +++++--------- + 1 file changed, 5 insertions(+), 9 deletions(-) + +diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp +index ad5ba1017..1a516eecc 100644 +--- a/toolkit/xre/nsAppRunner.cpp ++++ b/toolkit/xre/nsAppRunner.cpp +@@ -1331,11 +1331,11 @@ DumpHelp() + #endif + #ifdef XP_UNIX + printf(" --g-fatal-warnings Make all warnings fatal.\n" +- "\n%s options\n", gAppData->name); ++ "\nIceweasel-UXP options\n", gAppData->name); + #endif + + printf(" -h or --help Print this message.\n" +- " -v or --version Print %s version.\n" ++ " -v or --version Print Iceweasel-UXP version.\n" + " -P Start with .\n" + " --profile Start with profile at .\n" + #ifdef MC_BASILISK +@@ -1404,9 +1404,7 @@ static int MSCRTReportHook( int aReportType, char *aMessage, int *oReturnValue) + static inline void + DumpVersion() + { +- if (gAppData->vendor) +- printf("%s ", gAppData->vendor); +- printf("%s %s", gAppData->name, gAppData->version); ++ printf("Hyperbola Iceweasel-UXP %s", gAppData->version); + if (gAppData->copyright) + printf(", %s", gAppData->copyright); + printf("\n"); +@@ -3195,11 +3193,9 @@ XREMain::XRE_mainStartup(bool* aExitFlag) + gdk_rgb_set_install(TRUE); + #endif + +- // Set program name to the one defined in application.ini. ++ // Set WM_CLASS name + { +- nsAutoCString program(gAppData->name); +- ToLowerCase(program); +- g_set_prgname(program.get()); ++ g_set_prgname("Iceweasel-UXP"); + } + + // Initialize GTK here for splash. +-- +2.25.2 + diff --git a/iceweasel-uxp/0005-Disable-SSLKEYLOGFILE-in-NSS.patch b/iceweasel-uxp/0005-Disable-SSLKEYLOGFILE-in-NSS.patch new file mode 100644 index 0000000..711f2c5 --- /dev/null +++ b/iceweasel-uxp/0005-Disable-SSLKEYLOGFILE-in-NSS.patch @@ -0,0 +1,39 @@ +From a408d97064eccc60f75f0ac70e126a0684444b2b Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 12 Jan 2020 17:11:36 -0500 +Subject: [PATCH 05/12] Disable SSLKEYLOGFILE in NSS + +--- + config/external/nss/Makefile.in | 2 +- + security/nss/lib/ssl/ssl.gyp | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/config/external/nss/Makefile.in b/config/external/nss/Makefile.in +index 14eed9712..97d6e4b25 100644 +--- a/config/external/nss/Makefile.in ++++ b/config/external/nss/Makefile.in +@@ -225,7 +225,7 @@ DEFAULT_GMAKE_FLAGS += \ + endif + + DEFAULT_GMAKE_FLAGS += FREEBL_NO_DEPEND=0 $(FREEBL_LOWHASH_FLAG) +-DEFAULT_GMAKE_FLAGS += NSS_ALLOW_SSLKEYLOGFILE=1 ++DEFAULT_GMAKE_FLAGS += NSS_ALLOW_SSLKEYLOGFILE=0 + + ifdef MOZ_NO_WLZDEFS + DEFAULT_GMAKE_FLAGS += ZDEFS_FLAG= +diff --git a/security/nss/lib/ssl/ssl.gyp b/security/nss/lib/ssl/ssl.gyp +index 3e1b5531a..ca75795ea 100644 +--- a/security/nss/lib/ssl/ssl.gyp ++++ b/security/nss/lib/ssl/ssl.gyp +@@ -70,7 +70,7 @@ + 'UNSAFE_FUZZER_MODE', + ], + }], +- [ 'enable_sslkeylogfile==1', { ++ [ 'enable_sslkeylogfile==0', { + 'defines': [ + 'NSS_ALLOW_SSLKEYLOGFILE', + ], +-- +2.25.2 + diff --git a/iceweasel-uxp/0006-Fix-PGO-Build.patch b/iceweasel-uxp/0006-Fix-PGO-Build.patch new file mode 100644 index 0000000..d5ff7f1 --- /dev/null +++ b/iceweasel-uxp/0006-Fix-PGO-Build.patch @@ -0,0 +1,44 @@ +From 96b399b1986434df67b5fc02003df8a16e43122f Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:25:59 -0400 +Subject: [PATCH 06/12] Fix PGO Build + +--- + Makefile.in | 2 ++ + gfx/thebes/gfxFont.cpp | 10 ++++++++++ + 2 files changed, 12 insertions(+) + +diff --git a/Makefile.in b/Makefile.in +index 6c2327388..6e4e49a4e 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -404,3 +404,5 @@ config/export: + endif + + # There used to be build interdependencies here. They are now in config/recurse.mk ++ ++pgo-profile-run: +diff --git a/gfx/thebes/gfxFont.cpp b/gfx/thebes/gfxFont.cpp +index a73252759..ad38e6fb1 100644 +--- a/gfx/thebes/gfxFont.cpp ++++ b/gfx/thebes/gfxFont.cpp +@@ -2546,6 +2546,16 @@ IsBoundarySpace(char16_t aChar, char16_t aNextChar) + #endif + + /* GetShapedWord is in gfxFont-Impl.h */ ++template gfxShapedWord* ++gfxFont::GetShapedWord(DrawTarget *aDrawTarget, ++ const uint8_t *aText, ++ uint32_t aLength, ++ uint32_t aHash, ++ Script aRunScript, ++ bool aVertical, ++ int32_t aAppUnitsPerDevUnit, ++ uint32_t aFlags, ++ gfxTextPerfMetrics *aTextPerf); + + bool + gfxFont::CacheHashEntry::KeyEquals(const KeyTypePointer aKey) const +-- +2.25.2 + diff --git a/iceweasel-uxp/0007-init-configure-patch.patch b/iceweasel-uxp/0007-init-configure-patch.patch new file mode 100644 index 0000000..665ab3d --- /dev/null +++ b/iceweasel-uxp/0007-init-configure-patch.patch @@ -0,0 +1,26 @@ +From 7d02b2509f5280bb7e65a65849e4e5c04c76a28c Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 24 May 2020 00:27:45 -0400 +Subject: [PATCH 07/12] init configure patch + +--- + build/moz.configure/init.configure | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure +index 2e6034e8e..00d9935ba 100644 +--- a/build/moz.configure/init.configure ++++ b/build/moz.configure/init.configure +@@ -656,9 +656,6 @@ def build_project(project, external_source_dir, build_env, help): + + build_app = project[0] + +- if not external_source_dir and build_app not in ('xulrunner', 'js'): +- die('Cannot find project %s', build_app) +- + build_app_abspath = os.path.join(base_dir, build_app) + + if exists(build_app_abspath): +-- +2.25.2 + diff --git a/iceweasel-uxp/0008-Update-libcubeb-to-a1200c34.patch b/iceweasel-uxp/0008-Update-libcubeb-to-a1200c34.patch new file mode 100644 index 0000000..e2856ed --- /dev/null +++ b/iceweasel-uxp/0008-Update-libcubeb-to-a1200c34.patch @@ -0,0 +1,20298 @@ +From 727afcebcfda2f0bbe6473b581678cf0f84f4057 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Sun, 10 Nov 2019 09:09:14 -0500 +Subject: [PATCH 1/1] Update libcubeb to a1200c34 + +--- + dom/media/CubebUtils.cpp | 4 +- + dom/media/GraphDriver.cpp | 2 +- + media/libcubeb/AUTHORS | 1 + + media/libcubeb/bug1292803_pulse_assert.patch | 46 - + .../bug1302231_emergency_bailout.patch | 140 - + media/libcubeb/disable-assert.patch | 23 + + media/libcubeb/disable-iaudioclient3.patch | 64 + + media/libcubeb/fix-crashes.patch | 71 - + media/libcubeb/include/cubeb.h | 255 +- + media/libcubeb/osx-linearize-operations.patch | 968 ----- + media/libcubeb/prevent-double-free.patch | 46 - + .../src/android/cubeb-output-latency.h | 76 + + .../src/android/cubeb_media_library.h | 62 + + media/libcubeb/src/android/sles_definitions.h | 39 +- + media/libcubeb/src/cubeb-internal.h | 17 +- + media/libcubeb/src/cubeb-jni-instances.h | 34 + + media/libcubeb/src/cubeb-jni.cpp | 68 + + media/libcubeb/src/cubeb-jni.h | 10 + + media/libcubeb/src/cubeb.c | 233 +- + media/libcubeb/src/cubeb_alsa.c | 560 ++- + media/libcubeb/src/cubeb_array_queue.h | 97 + + media/libcubeb/src/cubeb_assert.h | 17 + + media/libcubeb/src/cubeb_audiotrack.c | 15 +- + media/libcubeb/src/cubeb_audiounit.cpp | 3156 +++++++++++------ + media/libcubeb/src/cubeb_jack.cpp | 160 +- + media/libcubeb/src/cubeb_log.cpp | 144 + + media/libcubeb/src/cubeb_log.h | 18 +- + media/libcubeb/src/cubeb_mixer.cpp | 663 ++++ + media/libcubeb/src/cubeb_mixer.h | 37 + + media/libcubeb/src/cubeb_opensl.c | 1566 ++++++-- + media/libcubeb/src/cubeb_pulse.c | 488 ++- + media/libcubeb/src/cubeb_resampler.cpp | 122 +- + media/libcubeb/src/cubeb_resampler.h | 15 +- + media/libcubeb/src/cubeb_resampler_internal.h | 123 +- + media/libcubeb/src/cubeb_ringbuffer.h | 495 +++ + media/libcubeb/src/cubeb_sndio.c | 414 ++- + media/libcubeb/src/cubeb_strings.c | 155 + + media/libcubeb/src/cubeb_strings.h | 44 + + media/libcubeb/src/cubeb_sun.c | 1006 ++++-- + media/libcubeb/src/cubeb_utils.cpp | 23 + + media/libcubeb/src/cubeb_utils.h | 148 +- + media/libcubeb/src/cubeb_utils_unix.h | 4 +- + media/libcubeb/src/cubeb_utils_win.h | 4 +- + media/libcubeb/src/cubeb_wasapi.cpp | 2276 +++++++----- + media/libcubeb/src/cubeb_winmm.c | 160 +- + media/libcubeb/src/moz.build | 8 +- + media/libcubeb/unresampled-frames.patch | 36 - + media/libcubeb/update.sh | 73 +- + .../uplift-part-of-f07ee6d-esr52.patch | 167 - + media/libcubeb/uplift-patch-7a4c711.patch | 69 - + .../uplift-system-listener-patch.patch | 402 --- + .../libcubeb/uplift-wasapi-part-to-beta.patch | 118 - + 52 files changed, 9351 insertions(+), 5591 deletions(-) + delete mode 100644 media/libcubeb/bug1292803_pulse_assert.patch + delete mode 100644 media/libcubeb/bug1302231_emergency_bailout.patch + create mode 100644 media/libcubeb/disable-assert.patch + create mode 100644 media/libcubeb/disable-iaudioclient3.patch + delete mode 100644 media/libcubeb/fix-crashes.patch + delete mode 100644 media/libcubeb/osx-linearize-operations.patch + delete mode 100644 media/libcubeb/prevent-double-free.patch + create mode 100644 media/libcubeb/src/android/cubeb-output-latency.h + create mode 100644 media/libcubeb/src/android/cubeb_media_library.h + create mode 100644 media/libcubeb/src/cubeb-jni-instances.h + create mode 100644 media/libcubeb/src/cubeb-jni.cpp + create mode 100644 media/libcubeb/src/cubeb-jni.h + create mode 100644 media/libcubeb/src/cubeb_array_queue.h + create mode 100644 media/libcubeb/src/cubeb_assert.h + create mode 100644 media/libcubeb/src/cubeb_log.cpp + create mode 100644 media/libcubeb/src/cubeb_mixer.cpp + create mode 100644 media/libcubeb/src/cubeb_mixer.h + create mode 100644 media/libcubeb/src/cubeb_ringbuffer.h + create mode 100644 media/libcubeb/src/cubeb_strings.c + create mode 100644 media/libcubeb/src/cubeb_strings.h + create mode 100644 media/libcubeb/src/cubeb_utils.cpp + delete mode 100644 media/libcubeb/unresampled-frames.patch + delete mode 100644 media/libcubeb/uplift-part-of-f07ee6d-esr52.patch + delete mode 100644 media/libcubeb/uplift-patch-7a4c711.patch + delete mode 100644 media/libcubeb/uplift-system-listener-patch.patch + delete mode 100644 media/libcubeb/uplift-wasapi-part-to-beta.patch + +diff --git a/dom/media/CubebUtils.cpp b/dom/media/CubebUtils.cpp +index 0f0167d9c..8f1ea0179 100644 +--- a/dom/media/CubebUtils.cpp ++++ b/dom/media/CubebUtils.cpp +@@ -55,6 +55,7 @@ bool sCubebPlaybackLatencyPrefSet; + bool sCubebMSGLatencyPrefSet; + bool sAudioStreamInitEverSucceeded = false; + StaticAutoPtr sBrandName; ++StaticAutoPtr sCubebBackendName; + + const char kBrandBundleURL[] = "chrome://branding/locale/brand.properties"; + +@@ -226,7 +227,7 @@ cubeb* GetCubebContextUnlocked() + sBrandName, "Did not initialize sbrandName, and not on the main thread?"); + } + +- int rv = cubeb_init(&sCubebContext, sBrandName); ++ int rv = cubeb_init(&sCubebContext, sBrandName, sCubebBackendName); + NS_WARNING_ASSERTION(rv == CUBEB_OK, "Could not get a cubeb context."); + sCubebState = (rv == CUBEB_OK) ? CubebState::Initialized : CubebState::Uninitialized; + +@@ -292,6 +293,7 @@ void ShutdownLibrary() + sCubebContext = nullptr; + } + sBrandName = nullptr; ++ sCubebBackendName = nullptr; + // This will ensure we don't try to re-create a context. + sCubebState = CubebState::Shutdown; + } +diff --git a/dom/media/GraphDriver.cpp b/dom/media/GraphDriver.cpp +index 37c692a4b..aa75918f1 100644 +--- a/dom/media/GraphDriver.cpp ++++ b/dom/media/GraphDriver.cpp +@@ -656,7 +656,7 @@ AudioCallbackDriver::Init() + if (latencyPref) { + latency_frames = latencyPref.value(); + } else { +- if (cubeb_get_min_latency(cubebContext, output, &latency_frames) != CUBEB_OK) { ++ if (cubeb_get_min_latency(cubebContext, &output, &latency_frames) != CUBEB_OK) { + NS_WARNING("Could not get minimal latency from cubeb."); + } + } +diff --git a/media/libcubeb/AUTHORS b/media/libcubeb/AUTHORS +index 0fde65baa..f0f959522 100644 +--- a/media/libcubeb/AUTHORS ++++ b/media/libcubeb/AUTHORS +@@ -13,3 +13,4 @@ Landry Breuil + Jacek Caban + Paul Hancock + Ted Mielczarek ++Chun-Min Chang +diff --git a/media/libcubeb/bug1292803_pulse_assert.patch b/media/libcubeb/bug1292803_pulse_assert.patch +deleted file mode 100644 +index 8dee88777..000000000 +--- a/media/libcubeb/bug1292803_pulse_assert.patch ++++ /dev/null +@@ -1,46 +0,0 @@ +-commit 2c7617f5ca20b764c605e19af490889c761e65e2 +-Author: Matthew Gregan +-Date: Thu Nov 10 19:07:07 2016 +1300 +- +- pulse: Bail early from pulse_defer_event_cb when shutting down. +- +- When starting a stream, trigger_user_callback may be called from +- stream_write_callback and immediately enter a drain situation, creating +- a drain timer and setting shutdown to true. If pulse_defer_event_cb +- then runs without checking for shutdown, it can overwrite the current +- timer with a new timer, resulting in a leaked timer and a null pointer +- assertion. +- +-diff --git a/src/cubeb_pulse.c b/src/cubeb_pulse.c +-index 5b61bda..86f2ba3 100644 +---- a/src/cubeb_pulse.c +-+++ b/src/cubeb_pulse.c +-@@ -181,9 +181,9 @@ static void +- stream_drain_callback(pa_mainloop_api * a, pa_time_event * e, struct timeval const * tv, void * u) +- { +- (void)a; +-- (void)e; +- (void)tv; +- cubeb_stream * stm = u; +-+ assert(stm->drain_timer == e); +- stream_state_change_callback(stm, CUBEB_STATE_DRAINED); +- /* there's no pa_rttime_free, so use this instead. */ +- a->time_free(stm->drain_timer); +-@@ -267,6 +267,7 @@ trigger_user_callback(pa_stream * s, void const * input_data, size_t nbytes, cub +- assert(r == 0 || r == -PA_ERR_NODATA); +- /* pa_stream_drain is useless, see PA bug# 866. this is a workaround. */ +- /* arbitrary safety margin: double the current latency. */ +-+ assert(!stm->drain_timer); +- stm->drain_timer = WRAP(pa_context_rttime_new)(stm->context->context, WRAP(pa_rtclock_now)() + 2 * latency, stream_drain_callback, stm); +- stm->shutdown = 1; +- return; +-@@ -851,6 +852,9 @@ pulse_defer_event_cb(pa_mainloop_api * a, void * userdata) +- { +- (void)a; +- cubeb_stream * stm = userdata; +-+ if (stm->shutdown) { +-+ return; +-+ } +- size_t writable_size = WRAP(pa_stream_writable_size)(stm->output_stream); +- trigger_user_callback(stm->output_stream, NULL, writable_size, stm); +- } +diff --git a/media/libcubeb/bug1302231_emergency_bailout.patch b/media/libcubeb/bug1302231_emergency_bailout.patch +deleted file mode 100644 +index 82152c23f..000000000 +--- a/media/libcubeb/bug1302231_emergency_bailout.patch ++++ /dev/null +@@ -1,140 +0,0 @@ +-From 37ce70d4400a2ab6b59ee432b41d4ffcc9d136ff Mon Sep 17 00:00:00 2001 +-From: Paul Adenot +-Date: Thu, 10 Nov 2016 21:45:14 +0100 +-Subject: [PATCH] Bail out safely from the rendering loop if we could not join +- the rendering thread in time (#187) +- +-Bail out safely from the rendering loop if we could not join the rendering thread in time. +---- +- src/cubeb_wasapi.cpp | 41 ++++++++++++++++++++++++++++++++++++----- +- 1 file changed, 36 insertions(+), 5 deletions(-) +- +-diff --git a/src/cubeb_wasapi.cpp b/src/cubeb_wasapi.cpp +-index 9e689b9..519d5ca 100644 +---- a/src/cubeb_wasapi.cpp +-+++ b/src/cubeb_wasapi.cpp +-@@ -22,6 +22,7 @@ +- #include +- #include +- #include +-+#include +- +- #include "cubeb/cubeb.h" +- #include "cubeb-internal.h" +-@@ -220,9 +221,11 @@ struct cubeb_stream +- float volume; +- /* True if the stream is draining. */ +- bool draining; +-+ /* True when we've destroyed the stream. This pointer is leaked on stream +-+ * destruction if we could not join the thread. */ +-+ std::atomic*> emergency_bailout; +- }; +- +-- +- class wasapi_endpoint_notification_client : public IMMNotificationClient +- { +- public: +-@@ -781,6 +784,7 @@ static unsigned int __stdcall +- wasapi_stream_render_loop(LPVOID stream) +- { +- cubeb_stream * stm = static_cast(stream); +-+ std::atomic * emergency_bailout = stm->emergency_bailout; +- +- bool is_playing = true; +- HANDLE wait_array[4] = { +-@@ -820,6 +824,10 @@ wasapi_stream_render_loop(LPVOID stream) +- wait_array, +- FALSE, +- 1000); +-+ if (*emergency_bailout) { +-+ delete emergency_bailout; +-+ return 0; +-+ } +- if (waitResult != WAIT_TIMEOUT) { +- timeout_count = 0; +- } +-@@ -1134,12 +1142,13 @@ int wasapi_init(cubeb ** context, char const * context_name) +- } +- +- namespace { +--void stop_and_join_render_thread(cubeb_stream * stm) +-+bool stop_and_join_render_thread(cubeb_stream * stm) +- { +-+ bool rv = true; +- LOG("Stop and join render thread."); +- if (!stm->thread) { +- LOG("No thread present."); +-- return; +-+ return true; +- } +- +- BOOL ok = SetEvent(stm->shutdown_event); +-@@ -1153,11 +1162,15 @@ void stop_and_join_render_thread(cubeb_stream * stm) +- if (r == WAIT_TIMEOUT) { +- /* Something weird happened, leak the thread and continue the shutdown +- * process. */ +-+ *(stm->emergency_bailout) = true; +- LOG("Destroy WaitForSingleObject on thread timed out," +- " leaking the thread: %d", GetLastError()); +-+ rv = false; +- } +- if (r == WAIT_FAILED) { +-+ *(stm->emergency_bailout) = true; +- LOG("Destroy WaitForSingleObject on thread failed: %d", GetLastError()); +-+ rv = false; +- } +- +- LOG("Closing thread."); +-@@ -1167,6 +1180,8 @@ void stop_and_join_render_thread(cubeb_stream * stm) +- +- CloseHandle(stm->shutdown_event); +- stm->shutdown_event = 0; +-+ +-+ return rv; +- } +- +- void wasapi_destroy(cubeb * context) +-@@ -1775,7 +1790,16 @@ void wasapi_stream_destroy(cubeb_stream * stm) +- { +- XASSERT(stm); +- +-- stop_and_join_render_thread(stm); +-+ // Only free stm->emergency_bailout if we could not join the thread. +-+ // If we could not join the thread, stm->emergency_bailout is true +-+ // and is still alive until the thread wakes up and exits cleanly. +-+ if (stop_and_join_render_thread(stm)) { +-+ delete stm->emergency_bailout.load(); +-+ stm->emergency_bailout = nullptr; +-+ } else { +-+ // If we're leaking, it must be that this is true. +-+ assert(*(stm->emergency_bailout)); +-+ } +- +- unregister_notification_client(stm); +- +-@@ -1844,6 +1868,8 @@ int wasapi_stream_start(cubeb_stream * stm) +- +- auto_lock lock(stm->stream_reset_lock); +- +-+ stm->emergency_bailout = new std::atomic(false); +-+ +- if (stm->output_client) { +- int rv = stream_start_one_side(stm, OUTPUT); +- if (rv != CUBEB_OK) { +-@@ -1903,7 +1929,12 @@ int wasapi_stream_stop(cubeb_stream * stm) +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- } +- +-- stop_and_join_render_thread(stm); +-+ if (stop_and_join_render_thread(stm)) { +-+ if (stm->emergency_bailout.load()) { +-+ delete stm->emergency_bailout.load(); +-+ stm->emergency_bailout = nullptr; +-+ } +-+ } +- +- return CUBEB_OK; +- } +--- +-2.7.4 +- +diff --git a/media/libcubeb/disable-assert.patch b/media/libcubeb/disable-assert.patch +new file mode 100644 +index 000000000..6fae3a766 +--- /dev/null ++++ b/media/libcubeb/disable-assert.patch +@@ -0,0 +1,23 @@ ++diff --git a/media/libcubeb/src/cubeb_resampler.cpp b/media/libcubeb/src/cubeb_resampler.cpp ++--- a/media/libcubeb/src/cubeb_resampler.cpp +++++ b/media/libcubeb/src/cubeb_resampler.cpp ++@@ -50,18 +50,17 @@ passthrough_resampler::passthrough_re ++ ++ template ++ long passthrough_resampler::fill(void * input_buffer, long * input_frames_count, ++ void * output_buffer, long output_frames) ++ { ++ if (input_buffer) { ++ assert(input_frames_count); ++ } ++- assert((input_buffer && output_buffer && ++- *input_frames_count + static_cast(samples_to_frames(internal_input_buffer.length())) >= output_frames) || +++ assert((input_buffer && output_buffer) || ++ (output_buffer && !input_buffer && (!input_frames_count || *input_frames_count == 0)) || ++ (input_buffer && !output_buffer && output_frames == 0)); ++ ++ if (input_buffer) { ++ if (!output_buffer) { ++ output_frames = *input_frames_count; ++ } ++ internal_input_buffer.push(static_cast(input_buffer), +diff --git a/media/libcubeb/disable-iaudioclient3.patch b/media/libcubeb/disable-iaudioclient3.patch +new file mode 100644 +index 000000000..658806b26 +--- /dev/null ++++ b/media/libcubeb/disable-iaudioclient3.patch +@@ -0,0 +1,64 @@ ++diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp ++--- a/media/libcubeb/src/cubeb_wasapi.cpp +++++ b/media/libcubeb/src/cubeb_wasapi.cpp ++@@ -1916,24 +1916,24 @@ int setup_wasapi_stream_one_side(cubeb_s ++ LOG("Could not get default %s endpoint, error: %lx\n", DIRECTION_NAME, hr); ++ } ++ return CUBEB_ERROR; ++ } ++ } ++ ++ /* Get a client. We will get all other interfaces we need from ++ * this pointer. */ ++- hr = device->Activate(__uuidof(IAudioClient3), ++- CLSCTX_INPROC_SERVER, ++- NULL, audio_client.receive_vpp()); ++- if (hr == E_NOINTERFACE) { +++ // hr = device->Activate(__uuidof(IAudioClient3), +++ // CLSCTX_INPROC_SERVER, +++ // NULL, audio_client.receive_vpp()); +++ // if (hr == E_NOINTERFACE) { ++ hr = device->Activate(__uuidof(IAudioClient), ++ CLSCTX_INPROC_SERVER, ++ NULL, audio_client.receive_vpp()); ++- } +++ //} ++ ++ if (FAILED(hr)) { ++ LOG("Could not activate the device to get an audio" ++ " client for %s: error: %lx\n", DIRECTION_NAME, hr); ++ // A particular device can't be activated because it has been ++ // unplugged, try fall back to the default audio device. ++ if (devid && hr == AUDCLNT_E_DEVICE_INVALIDATED) { ++ LOG("Trying again with the default %s audio device.", DIRECTION_NAME); ++@@ -1989,26 +1989,26 @@ int setup_wasapi_stream_one_side(cubeb_s ++ // Check if a loopback device should be requested. Note that event callbacks ++ // do not work with loopback devices, so only request these if not looping. ++ if (is_loopback) { ++ flags |= AUDCLNT_STREAMFLAGS_LOOPBACK; ++ } else { ++ flags |= AUDCLNT_STREAMFLAGS_EVENTCALLBACK; ++ } ++ ++- if (initialize_iaudioclient3(audio_client, stm, mix_format, flags, direction)) { ++- LOG("Initialized with IAudioClient3"); ++- } else { +++ // if (initialize_iaudioclient3(audio_client, stm, mix_format, flags, direction)) { +++ // LOG("Initialized with IAudioClient3"); +++ // } else { ++ hr = audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, ++ flags, ++ frames_to_hns(stm, stm->latency), ++ 0, ++ mix_format.get(), ++ NULL); ++- } +++ // } ++ if (FAILED(hr)) { ++ LOG("Unable to initialize audio client for %s: %lx.", DIRECTION_NAME, hr); ++ return CUBEB_ERROR; ++ } ++ ++ hr = audio_client->GetBufferSize(buffer_frame_count); ++ if (FAILED(hr)) { ++ LOG("Could not get the buffer size from the client" +diff --git a/media/libcubeb/fix-crashes.patch b/media/libcubeb/fix-crashes.patch +deleted file mode 100644 +index b23501fcf..000000000 +--- a/media/libcubeb/fix-crashes.patch ++++ /dev/null +@@ -1,71 +0,0 @@ +-This patch fixes three different crashes, one crash per chunk in this patch, +-in the same order. +-- Bug 1342389 +-- Bug 1345147 +-- Bug 1347453 +- +-diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp +---- a/media/libcubeb/src/cubeb_wasapi.cpp +-+++ b/media/libcubeb/src/cubeb_wasapi.cpp +-@@ -878,16 +878,23 @@ wasapi_stream_render_loop(LPVOID stream) +- +- /* WaitForMultipleObjects timeout can trigger in cases where we don't want to +- treat it as a timeout, such as across a system sleep/wake cycle. Trigger +- the timeout error handling only when the timeout_limit is reached, which is +- reset on each successful loop. */ +- unsigned timeout_count = 0; +- const unsigned timeout_limit = 5; +- while (is_playing) { +-+ // We want to check the emergency bailout variable before a +-+ // and after the WaitForMultipleObject, because the handles WaitForMultipleObjects +-+ // is going to wait on might have been closed already. +-+ if (*emergency_bailout) { +-+ delete emergency_bailout; +-+ return 0; +-+ } +- DWORD waitResult = WaitForMultipleObjects(ARRAY_LENGTH(wait_array), +- wait_array, +- FALSE, +- 1000); +- if (*emergency_bailout) { +- delete emergency_bailout; +- return 0; +- } +-@@ -1199,16 +1206,22 @@ bool stop_and_join_render_thread(cubeb_s +- { +- bool rv = true; +- LOG("Stop and join render thread."); +- if (!stm->thread) { +- LOG("No thread present."); +- return true; +- } +- +-+ // If we've already leaked the thread, just return, +-+ // there is not much we can do. +-+ if (!stm->emergency_bailout.load()) { +-+ return false; +-+ } +-+ +- BOOL ok = SetEvent(stm->shutdown_event); +- if (!ok) { +- LOG("Destroy SetEvent failed: %lx", GetLastError()); +- } +- +- /* Wait five seconds for the rendering thread to return. It's supposed to +- * check its event loop very often, five seconds is rather conservative. */ +- DWORD r = WaitForSingleObject(stm->thread, 5000); +-diff --git a/media/libcubeb/update.sh b/media/libcubeb/update.sh +---- a/media/libcubeb/update.sh +-+++ b/media/libcubeb/update.sh +-@@ -66,8 +66,11 @@ fi +- echo "Applying a patch on top of $version" +- patch -p1 < ./wasapi-drift-fix-passthrough-resampler.patch +- +- echo "Applying a patch on top of $version" +- patch -p1 < ./audiounit-drift-fix.patch +- +- echo "Applying a patch on top of $version" +- patch -p1 < ./uplift-wasapi-fixes-aurora.patch +-+ +-+echo "Applying a patch on top of $version" +-+patch -p3 < ./fix-crashes.patch +diff --git a/media/libcubeb/include/cubeb.h b/media/libcubeb/include/cubeb.h +index 449b39c55..e6cf8dd87 100644 +--- a/media/libcubeb/include/cubeb.h ++++ b/media/libcubeb/include/cubeb.h +@@ -8,6 +8,7 @@ + #define CUBEB_c2f983e9_c96f_e71c_72c3_bbf62992a382 + + #include ++#include + #include "cubeb_export.h" + + #if defined(__cplusplus) +@@ -32,11 +33,11 @@ extern "C" { + cubeb * app_ctx; + cubeb_init(&app_ctx, "Example Application"); + int rv; +- int rate; +- int latency_frames; ++ uint32_t rate; ++ uint32_t latency_frames; + uint64_t ts; + +- rv = cubeb_get_min_latency(app_ctx, output_params, &latency_frames); ++ rv = cubeb_get_min_latency(app_ctx, &output_params, &latency_frames); + if (rv != CUBEB_OK) { + fprintf(stderr, "Could not get minimum latency"); + return rv; +@@ -52,16 +53,20 @@ extern "C" { + output_params.format = CUBEB_SAMPLE_FLOAT32NE; + output_params.rate = rate; + output_params.channels = 2; ++ output_params.layout = CUBEB_LAYOUT_UNDEFINED; ++ output_params.prefs = CUBEB_STREAM_PREF_NONE; + + cubeb_stream_params input_params; +- output_params.format = CUBEB_SAMPLE_FLOAT32NE; +- output_params.rate = rate; +- output_params.channels = 1; ++ input_params.format = CUBEB_SAMPLE_FLOAT32NE; ++ input_params.rate = rate; ++ input_params.channels = 1; ++ input_params.layout = CUBEB_LAYOUT_UNDEFINED; ++ input_params.prefs = CUBEB_STREAM_PREF_NONE; + + cubeb_stream * stm; + rv = cubeb_stream_init(app_ctx, &stm, "Example Stream 1", +- NULL, input_params, +- NULL, output_params, ++ NULL, &input_params, ++ NULL, &output_params, + latency_frames, + data_cb, state_cb, + NULL); +@@ -99,7 +104,7 @@ extern "C" { + + for (i = 0; i < nframes; ++i) { + for (c = 0; c < 2; ++c) { +- buf[i][c] = in[i]; ++ out[i][c] = in[i]; + } + } + return nframes; +@@ -143,31 +148,9 @@ typedef enum { + #endif + } cubeb_sample_format; + +-#if defined(__ANDROID__) +-/** +- * This maps to the underlying stream types on supported platforms, e.g. +- * Android. +- */ +-typedef enum { +- CUBEB_STREAM_TYPE_VOICE_CALL = 0, +- CUBEB_STREAM_TYPE_SYSTEM = 1, +- CUBEB_STREAM_TYPE_RING = 2, +- CUBEB_STREAM_TYPE_MUSIC = 3, +- CUBEB_STREAM_TYPE_ALARM = 4, +- CUBEB_STREAM_TYPE_NOTIFICATION = 5, +- CUBEB_STREAM_TYPE_BLUETOOTH_SCO = 6, +- CUBEB_STREAM_TYPE_SYSTEM_ENFORCED = 7, +- CUBEB_STREAM_TYPE_DTMF = 8, +- CUBEB_STREAM_TYPE_TTS = 9, +- CUBEB_STREAM_TYPE_FM = 10, +- +- CUBEB_STREAM_TYPE_MAX +-} cubeb_stream_type; +-#endif +- + /** An opaque handle used to refer a particular input or output device + * across calls. */ +-typedef void * cubeb_devid; ++typedef void const * cubeb_devid; + + /** Level (verbosity) of logging for a particular cubeb context. */ + typedef enum { +@@ -176,15 +159,93 @@ typedef enum { + CUBEB_LOG_VERBOSE = 2, /**< Verbose logging of callbacks, can have performance implications. */ + } cubeb_log_level; + ++typedef enum { ++ CHANNEL_UNKNOWN = 0, ++ CHANNEL_FRONT_LEFT = 1 << 0, ++ CHANNEL_FRONT_RIGHT = 1 << 1, ++ CHANNEL_FRONT_CENTER = 1 << 2, ++ CHANNEL_LOW_FREQUENCY = 1 << 3, ++ CHANNEL_BACK_LEFT = 1 << 4, ++ CHANNEL_BACK_RIGHT = 1 << 5, ++ CHANNEL_FRONT_LEFT_OF_CENTER = 1 << 6, ++ CHANNEL_FRONT_RIGHT_OF_CENTER = 1 << 7, ++ CHANNEL_BACK_CENTER = 1 << 8, ++ CHANNEL_SIDE_LEFT = 1 << 9, ++ CHANNEL_SIDE_RIGHT = 1 << 10, ++ CHANNEL_TOP_CENTER = 1 << 11, ++ CHANNEL_TOP_FRONT_LEFT = 1 << 12, ++ CHANNEL_TOP_FRONT_CENTER = 1 << 13, ++ CHANNEL_TOP_FRONT_RIGHT = 1 << 14, ++ CHANNEL_TOP_BACK_LEFT = 1 << 15, ++ CHANNEL_TOP_BACK_CENTER = 1 << 16, ++ CHANNEL_TOP_BACK_RIGHT = 1 << 17 ++} cubeb_channel; ++ ++typedef uint32_t cubeb_channel_layout; ++// Some common layout definitions. ++enum { ++ CUBEB_LAYOUT_UNDEFINED = 0, // Indicate the speaker's layout is undefined. ++ CUBEB_LAYOUT_MONO = CHANNEL_FRONT_CENTER, ++ CUBEB_LAYOUT_MONO_LFE = CUBEB_LAYOUT_MONO | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_STEREO = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT, ++ CUBEB_LAYOUT_STEREO_LFE = CUBEB_LAYOUT_STEREO | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F = ++ CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_FRONT_CENTER, ++ CUBEB_LAYOUT_3F_LFE = CUBEB_LAYOUT_3F | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_2F1 = ++ CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | CHANNEL_BACK_CENTER, ++ CUBEB_LAYOUT_2F1_LFE = CUBEB_LAYOUT_2F1 | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F1 = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_FRONT_CENTER | CHANNEL_BACK_CENTER, ++ CUBEB_LAYOUT_3F1_LFE = CUBEB_LAYOUT_3F1 | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_2F2 = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_SIDE_LEFT | CHANNEL_SIDE_RIGHT, ++ CUBEB_LAYOUT_2F2_LFE = CUBEB_LAYOUT_2F2 | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_QUAD = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT, ++ CUBEB_LAYOUT_QUAD_LFE = CUBEB_LAYOUT_QUAD | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F2 = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_FRONT_CENTER | CHANNEL_SIDE_LEFT | ++ CHANNEL_SIDE_RIGHT, ++ CUBEB_LAYOUT_3F2_LFE = CUBEB_LAYOUT_3F2 | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F2_BACK = CUBEB_LAYOUT_QUAD | CHANNEL_FRONT_CENTER, ++ CUBEB_LAYOUT_3F2_LFE_BACK = CUBEB_LAYOUT_3F2_BACK | CHANNEL_LOW_FREQUENCY, ++ CUBEB_LAYOUT_3F3R_LFE = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_FRONT_CENTER | CHANNEL_LOW_FREQUENCY | ++ CHANNEL_BACK_CENTER | CHANNEL_SIDE_LEFT | ++ CHANNEL_SIDE_RIGHT, ++ CUBEB_LAYOUT_3F4_LFE = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT | ++ CHANNEL_FRONT_CENTER | CHANNEL_LOW_FREQUENCY | ++ CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT | ++ CHANNEL_SIDE_LEFT | CHANNEL_SIDE_RIGHT, ++}; ++ ++/** Miscellaneous stream preferences. */ ++typedef enum { ++ CUBEB_STREAM_PREF_NONE = 0x00, /**< No stream preferences are requested. */ ++ CUBEB_STREAM_PREF_LOOPBACK = 0x01, /**< Request a loopback stream. Should be ++ specified on the input params and an ++ output device to loopback from should ++ be passed in place of an input device. */ ++ CUBEB_STREAM_PREF_DISABLE_DEVICE_SWITCHING = 0x02, /**< Disable switching ++ default device on OS ++ changes. */ ++ CUBEB_STREAM_PREF_VOICE = 0x04 /**< This stream is going to transport voice data. ++ Depending on the backend and platform, this can ++ change the audio input or output devices ++ selected, as well as the quality of the stream, ++ for example to accomodate bluetooth SCO modes on ++ bluetooth devices. */ ++} cubeb_stream_prefs; ++ + /** Stream format initialization parameters. */ + typedef struct { +- cubeb_sample_format format; /**< Requested sample format. One of +- #cubeb_sample_format. */ +- unsigned int rate; /**< Requested sample rate. Valid range is [1000, 192000]. */ +- unsigned int channels; /**< Requested channel count. Valid range is [1, 8]. */ +-#if defined(__ANDROID__) +- cubeb_stream_type stream_type; /**< Used to map Android audio stream types */ +-#endif ++ cubeb_sample_format format; /**< Requested sample format. One of ++ #cubeb_sample_format. */ ++ uint32_t rate; /**< Requested sample rate. Valid range is [1000, 192000]. */ ++ uint32_t channels; /**< Requested channel count. Valid range is [1, 8]. */ ++ cubeb_channel_layout layout; /**< Requested channel layout. This must be consistent with the provided channels. CUBEB_LAYOUT_UNDEFINED if unknown */ ++ cubeb_stream_prefs prefs; /**< Requested preferences. */ + } cubeb_stream_params; + + /** Audio device description */ +@@ -271,15 +332,16 @@ typedef enum { + } cubeb_device_pref; + + /** This structure holds the characteristics +- * of an input or output audio device. It can be obtained using +- * `cubeb_enumerate_devices`, and must be destroyed using +- * `cubeb_device_info_destroy`. */ ++ * of an input or output audio device. It is obtained using ++ * `cubeb_enumerate_devices`, which returns these structures via ++ * `cubeb_device_collection` and must be destroyed via ++ * `cubeb_device_collection_destroy`. */ + typedef struct { + cubeb_devid devid; /**< Device identifier handle. */ +- char * device_id; /**< Device identifier which might be presented in a UI. */ +- char * friendly_name; /**< Friendly device name which might be presented in a UI. */ +- char * group_id; /**< Two devices have the same group identifier if they belong to the same physical device; for example a headset and microphone. */ +- char * vendor_name; /**< Optional vendor name, may be NULL. */ ++ char const * device_id; /**< Device identifier which might be presented in a UI. */ ++ char const * friendly_name; /**< Friendly device name which might be presented in a UI. */ ++ char const * group_id; /**< Two devices have the same group identifier if they belong to the same physical device; for example a headset and microphone. */ ++ char const * vendor_name; /**< Optional vendor name, may be NULL. */ + + cubeb_device_type type; /**< Type of device (Input/Output). */ + cubeb_device_state state; /**< State of device disabled/enabled/unplugged. */ +@@ -287,19 +349,21 @@ typedef struct { + + cubeb_device_fmt format; /**< Sample format supported. */ + cubeb_device_fmt default_format; /**< The default sample format for this device. */ +- unsigned int max_channels; /**< Channels. */ +- unsigned int default_rate; /**< Default/Preferred sample rate. */ +- unsigned int max_rate; /**< Maximum sample rate supported. */ +- unsigned int min_rate; /**< Minimum sample rate supported. */ ++ uint32_t max_channels; /**< Channels. */ ++ uint32_t default_rate; /**< Default/Preferred sample rate. */ ++ uint32_t max_rate; /**< Maximum sample rate supported. */ ++ uint32_t min_rate; /**< Minimum sample rate supported. */ + +- unsigned int latency_lo; /**< Lowest possible latency in frames. */ +- unsigned int latency_hi; /**< Higest possible latency in frames. */ ++ uint32_t latency_lo; /**< Lowest possible latency in frames. */ ++ uint32_t latency_hi; /**< Higest possible latency in frames. */ + } cubeb_device_info; + +-/** Device collection. */ ++/** Device collection. ++ * Returned by `cubeb_enumerate_devices` and destroyed by ++ * `cubeb_device_collection_destroy`. */ + typedef struct { +- uint32_t count; /**< Device count in collection. */ +- cubeb_device_info * device[1]; /**< Array of pointers to device info. */ ++ cubeb_device_info * device; /**< Array of pointers to device info. */ ++ size_t count; /**< Device count in collection. */ + } cubeb_device_collection; + + /** User supplied data callback. +@@ -316,13 +380,17 @@ typedef struct { + @param output_buffer A pointer to a buffer to be filled with audio samples, + or nullptr if this is an input-only stream. + @param nframes The number of frames of the two buffer. +- @retval Number of frames written to the output buffer. If this number is +- less than nframes, then the stream will start to drain. ++ @retval If the stream has output, this is the number of frames written to ++ the output buffer. In this case, if this number is less than ++ nframes then the stream will start to drain. If the stream is ++ input only, then returning nframes indicates data has been read. ++ In this case, a value less than nframes will result in the stream ++ being stopped. + @retval CUBEB_ERROR on error, in which case the data callback will stop + and the stream will enter a shutdown state. */ + typedef long (* cubeb_data_callback)(cubeb_stream * stream, + void * user_ptr, +- const void * input_buffer, ++ void const * input_buffer, + void * output_buffer, + long nframes); + +@@ -342,23 +410,33 @@ typedef void (* cubeb_device_changed_callback)(void * user_ptr); + /** + * User supplied callback called when the underlying device collection changed. + * @param context A pointer to the cubeb context. +- * @param user_ptr The pointer passed to cubeb_stream_init. */ ++ * @param user_ptr The pointer passed to cubeb_register_device_collection_changed. */ + typedef void (* cubeb_device_collection_changed_callback)(cubeb * context, + void * user_ptr); + + /** User supplied callback called when a message needs logging. */ +-typedef void (* cubeb_log_callback)(const char * fmt, ...); ++typedef void (* cubeb_log_callback)(char const * fmt, ...); + + /** Initialize an application context. This will perform any library or + application scoped initialization. ++ ++ Note: On Windows platforms, COM must be initialized in MTA mode on ++ any thread that will call the cubeb API. ++ + @param context A out param where an opaque pointer to the application + context will be returned. + @param context_name A name for the context. Depending on the platform this + can appear in different locations. ++ @param backend_name The name of the cubeb backend user desires to select. ++ Accepted values self-documented in cubeb.c: init_oneshot ++ If NULL, a default ordering is used for backend choice. ++ A valid choice overrides all other possible backends, ++ so long as the backend was included at compile time. + @retval CUBEB_OK in case of success. + @retval CUBEB_ERROR in case of error, for example because the host + has no audio hardware. */ +-CUBEB_EXPORT int cubeb_init(cubeb ** context, char const * context_name); ++CUBEB_EXPORT int cubeb_init(cubeb ** context, char const * context_name, ++ char const * backend_name); + + /** Get a read-only string identifying this context's current backend. + @param context A pointer to the cubeb context. +@@ -376,7 +454,7 @@ CUBEB_EXPORT int cubeb_get_max_channel_count(cubeb * context, uint32_t * max_cha + + /** Get the minimal latency value, in frames, that is guaranteed to work + when creating a stream for the specified sample rate. This is platform, +- hardware and backend dependant. ++ hardware and backend dependent. + @param context A pointer to the cubeb context. + @param params On some backends, the minimum achievable latency depends on + the characteristics of the stream. +@@ -386,11 +464,11 @@ CUBEB_EXPORT int cubeb_get_max_channel_count(cubeb * context, uint32_t * max_cha + @retval CUBEB_ERROR_INVALID_PARAMETER + @retval CUBEB_ERROR_NOT_SUPPORTED */ + CUBEB_EXPORT int cubeb_get_min_latency(cubeb * context, +- cubeb_stream_params params, ++ cubeb_stream_params * params, + uint32_t * latency_frames); + + /** Get the preferred sample rate for this backend: this is hardware and +- platform dependant, and can avoid resampling, and/or trigger fastpaths. ++ platform dependent, and can avoid resampling, and/or trigger fastpaths. + @param context A pointer to the cubeb context. + @param rate The samplerate (in Hz) the current configuration prefers. + @retval CUBEB_OK +@@ -434,7 +512,7 @@ CUBEB_EXPORT int cubeb_stream_init(cubeb * context, + cubeb_stream_params * input_stream_params, + cubeb_devid output_device, + cubeb_stream_params * output_stream_params, +- unsigned int latency_frames, ++ uint32_t latency_frames, + cubeb_data_callback data_callback, + cubeb_state_callback state_callback, + void * user_ptr); +@@ -456,6 +534,14 @@ CUBEB_EXPORT int cubeb_stream_start(cubeb_stream * stream); + @retval CUBEB_ERROR */ + CUBEB_EXPORT int cubeb_stream_stop(cubeb_stream * stream); + ++/** Reset stream to the default device. ++ @param stream ++ @retval CUBEB_OK ++ @retval CUBEB_ERROR_INVALID_PARAMETER ++ @retval CUBEB_ERROR_NOT_SUPPORTED ++ @retval CUBEB_ERROR */ ++CUBEB_EXPORT int cubeb_stream_reset_default_device(cubeb_stream * stream); ++ + /** Get the current stream playback position. + @param stream + @param position Playback position in frames. +@@ -482,20 +568,6 @@ CUBEB_EXPORT int cubeb_stream_get_latency(cubeb_stream * stream, uint32_t * late + @retval CUBEB_ERROR_NOT_SUPPORTED */ + CUBEB_EXPORT int cubeb_stream_set_volume(cubeb_stream * stream, float volume); + +-/** If the stream is stereo, set the left/right panning. If the stream is mono, +- this has no effect. +- @param stream the stream for which to change the panning +- @param panning a number from -1.0 to 1.0. -1.0 means that the stream is +- fully mixed in the left channel, 1.0 means the stream is fully +- mixed in the right channel. 0.0 is equal power in the right and +- left channel (default). +- @retval CUBEB_OK +- @retval CUBEB_ERROR_INVALID_PARAMETER if stream is null or if panning is +- outside the [-1.0, 1.0] range. +- @retval CUBEB_ERROR_NOT_SUPPORTED +- @retval CUBEB_ERROR stream is not mono nor stereo */ +-CUBEB_EXPORT int cubeb_stream_set_panning(cubeb_stream * stream, float panning); +- + /** Get the current output device for this stream. + @param stm the stream for which to query the current output device + @param device a pointer in which the current output device will be stored. +@@ -526,6 +598,11 @@ CUBEB_EXPORT int cubeb_stream_device_destroy(cubeb_stream * stream, + CUBEB_EXPORT int cubeb_stream_register_device_changed_callback(cubeb_stream * stream, + cubeb_device_changed_callback device_changed_callback); + ++/** Return the user data pointer registered with the stream with cubeb_stream_init. ++ @param stream the stream for which to retrieve user data pointer. ++ @retval user data pointer */ ++CUBEB_EXPORT void * cubeb_stream_user_ptr(cubeb_stream * stream); ++ + /** Returns enumerated devices. + @param context + @param devtype device type to include +@@ -535,26 +612,26 @@ CUBEB_EXPORT int cubeb_stream_register_device_changed_callback(cubeb_stream * st + @retval CUBEB_ERROR_NOT_SUPPORTED */ + CUBEB_EXPORT int cubeb_enumerate_devices(cubeb * context, + cubeb_device_type devtype, +- cubeb_device_collection ** collection); ++ cubeb_device_collection * collection); + + /** Destroy a cubeb_device_collection, and its `cubeb_device_info`. ++ @param context + @param collection collection to destroy + @retval CUBEB_OK + @retval CUBEB_ERROR_INVALID_PARAMETER if collection is an invalid pointer */ +-CUBEB_EXPORT int cubeb_device_collection_destroy(cubeb_device_collection * collection); +- +-/** Destroy a cubeb_device_info structure. +- @param info pointer to device info structure +- @retval CUBEB_OK +- @retval CUBEB_ERROR_INVALID_PARAMETER if info is an invalid pointer */ +-CUBEB_EXPORT int cubeb_device_info_destroy(cubeb_device_info * info); ++CUBEB_EXPORT int cubeb_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection); + + /** Registers a callback which is called when the system detects + a new device or a device is removed. + @param context +- @param devtype device type to include ++ @param devtype device type to include. Different callbacks and user pointers ++ can be registered for each devtype. The hybrid devtype ++ `CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT` is also valid ++ and will register the provided callback and user pointer in both sides. + @param callback a function called whenever the system device list changes. +- Passing NULL allow to unregister a function ++ Passing NULL allow to unregister a function. You have to unregister ++ first before you register a new callback. + @param user_ptr pointer to user specified data which will be present in + subsequent callbacks. + @retval CUBEB_ERROR_NOT_SUPPORTED */ +diff --git a/media/libcubeb/osx-linearize-operations.patch b/media/libcubeb/osx-linearize-operations.patch +deleted file mode 100644 +index 9f4f31bca..000000000 +--- a/media/libcubeb/osx-linearize-operations.patch ++++ /dev/null +@@ -1,968 +0,0 @@ +-From: Paul Adenot +-Subject: Linearize operations on AudioUnits to sidestep a deadlock. +- +---- +- +-diff --git a/src/cubeb_audiounit.cpp b/src/cubeb_audiounit.cpp +---- a/src/cubeb_audiounit.cpp +-+++ b/src/cubeb_audiounit.cpp +-@@ -53,40 +53,45 @@ typedef UInt32 AudioFormatFlags; +- +- #define AU_OUT_BUS 0 +- #define AU_IN_BUS 1 +- +- #define PRINT_ERROR_CODE(str, r) do { \ +- LOG("System call failed: %s (rv: %d)", str, r); \ +- } while(0) +- +-+const char * DISPATCH_QUEUE_LABEL = "org.mozilla.cubeb"; +-+ +- /* Testing empirically, some headsets report a minimal latency that is very +- * low, but this does not work in practice. Lie and say the minimum is 256 +- * frames. */ +- const uint32_t SAFE_MIN_LATENCY_FRAMES = 256; +- const uint32_t SAFE_MAX_LATENCY_FRAMES = 512; +- +- void audiounit_stream_stop_internal(cubeb_stream * stm); +- void audiounit_stream_start_internal(cubeb_stream * stm); +--static void close_audiounit_stream(cubeb_stream * stm); +--static int setup_audiounit_stream(cubeb_stream * stm); +-+static void audiounit_close_stream(cubeb_stream *stm); +-+static int audiounit_setup_stream(cubeb_stream *stm); +- +- extern cubeb_ops const audiounit_ops; +- +- struct cubeb { +- cubeb_ops const * ops; +- owned_critical_section mutex; +- std::atomic active_streams; +-+ uint32_t global_latency_frames = 0; +- int limit_streams; +- cubeb_device_collection_changed_callback collection_changed_callback; +- void * collection_changed_user_ptr; +- /* Differentiate input from output devices. */ +- cubeb_device_type collection_changed_devtype; +- uint32_t devtype_device_count; +- AudioObjectID * devtype_device_array; +-+ // The queue is asynchronously deallocated once all references to it are released +-+ dispatch_queue_t serial_queue = dispatch_queue_create(DISPATCH_QUEUE_LABEL, DISPATCH_QUEUE_SERIAL); +- }; +- +- class auto_array_wrapper +- { +- public: +- explicit auto_array_wrapper(auto_array * ar) +- : float_ar(ar) +- , short_ar(nullptr) +-@@ -205,16 +210,17 @@ struct cubeb_stream { +- cubeb_resampler * resampler; +- /* This is the number of output callback we got in a row. This is usually one, +- * but can be two when the input and output rate are different, and more when +- * a device has been plugged or unplugged, as there can be some time before +- * the device is ready. */ +- std::atomic output_callback_in_a_row; +- /* This is true if a device change callback is currently running. */ +- std::atomic switching_device; +-+ std::atomic buffer_size_change_state{ false }; +- }; +- +- bool has_input(cubeb_stream * stm) +- { +- return stm->input_stream_params.rate != 0; +- } +- +- bool has_output(cubeb_stream * stm) +-@@ -256,16 +262,24 @@ audiotimestamp_to_latency(AudioTimeStamp +- +- uint64_t pres = AudioConvertHostTimeToNanos(tstamp->mHostTime); +- uint64_t now = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime()); +- +- return ((pres - now) * stream->output_desc.mSampleRate) / 1000000000LL; +- } +- +- static void +-+audiounit_set_global_latency(cubeb_stream * stm, uint32_t latency_frames) +-+{ +-+ stm->mutex.assert_current_thread_owns(); +-+ assert(stm->context->active_streams == 1); +-+ stm->context->global_latency_frames = latency_frames; +-+} +-+ +-+static void +- audiounit_make_silent(AudioBuffer * ioData) +- { +- assert(ioData); +- assert(ioData->mData); +- memset(ioData->mData, 0, ioData->mDataByteSize); +- } +- +- static OSStatus +-@@ -576,29 +590,54 @@ audiounit_get_input_device_id(AudioDevic +- device_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- return CUBEB_OK; +- } +- +-+static int +-+audiounit_reinit_stream(cubeb_stream * stm, bool is_started) +-+{ +-+ if (is_started) { +-+ audiounit_stream_stop_internal(stm); +-+ } +-+ +-+ { +-+ auto_lock lock(stm->mutex); +-+ +-+ audiounit_close_stream(stm); +-+ +-+ if (audiounit_setup_stream(stm) != CUBEB_OK) { +-+ LOG("(%p) Stream reinit failed.", stm); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ // Reset input frames to force new stream pre-buffer +-+ // silence if needed, check `is_extra_input_needed()` +-+ stm->frames_read = 0; +-+ +-+ // If the stream was running, start it again. +-+ if (is_started) { +-+ audiounit_stream_start_internal(stm); +-+ } +-+ } +-+ return CUBEB_OK; +-+} +-+ +- static OSStatus +- audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_count, +- const AudioObjectPropertyAddress * addresses, +- void * user) +- { +- cubeb_stream * stm = (cubeb_stream*) user; +-- int rv; +-- bool was_running = false; +-- +- stm->switching_device = true; +-- +- // Note if the stream was running or not +-- was_running = !stm->shutdown; +-+ bool was_running = !stm->shutdown; +- +- LOG("(%p) Audio device changed, %d events.", stm, address_count); +- for (UInt32 i = 0; i < address_count; i++) { +- switch(addresses[i].mSelector) { +- case kAudioHardwarePropertyDefaultOutputDevice: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDefaultOutputDevice", i); +- // Allow restart to choose the new default +- stm->output_device = nullptr; +-@@ -639,38 +678,25 @@ audiounit_property_listener_callback(Aud +- if (stm->device_changed_callback) { +- stm->device_changed_callback(stm->user_ptr); +- } +- break; +- } +- } +- } +- +-- // This means the callback won't be called again. +-- audiounit_stream_stop_internal(stm); +-- +-- { +-- auto_lock lock(stm->mutex); +-- close_audiounit_stream(stm); +-- rv = setup_audiounit_stream(stm); +-- if (rv != CUBEB_OK) { +-- LOG("(%p) Could not reopen a stream after switching.", stm); +-+ // Use a new thread, through the queue, to avoid deadlock when calling +-+ // Get/SetProperties method from inside notify callback +-+ dispatch_async(stm->context->serial_queue, ^() { +-+ if (audiounit_reinit_stream(stm, was_running) != CUBEB_OK) { +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +-- return noErr; +-+ LOG("(%p) Could not reopen the stream after switching.", stm); +- } +-- +-- stm->frames_read = 0; +-- +-- // If the stream was running, start it again. +-- if (was_running) { +-- audiounit_stream_start_internal(stm); +-- } +-- } +-- +-- stm->switching_device = false; +-+ stm->switching_device = false; +-+ }); +- +- return noErr; +- } +- +- OSStatus +- audiounit_add_listener(cubeb_stream * stm, AudioDeviceID id, AudioObjectPropertySelector selector, +- AudioObjectPropertyScope scope, AudioObjectPropertyListenerProc listener) +- { +-@@ -1155,18 +1181,17 @@ audiounit_init_input_linear_buffer(cubeb +- +- static void +- audiounit_destroy_input_linear_buffer(cubeb_stream * stream) +- { +- delete stream->input_linear_buffer; +- } +- +- static uint32_t +--audiounit_clamp_latency(cubeb_stream * stm, +-- uint32_t latency_frames) +-+audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) +- { +- // For the 1st stream set anything within safe min-max +- assert(stm->context->active_streams > 0); +- if (stm->context->active_streams == 1) { +- return std::max(std::min(latency_frames, SAFE_MAX_LATENCY_FRAMES), +- SAFE_MIN_LATENCY_FRAMES); +- } +- +-@@ -1219,26 +1244,374 @@ audiounit_clamp_latency(cubeb_stream * s +- } else { +- upper_latency_limit = SAFE_MAX_LATENCY_FRAMES; +- } +- +- return std::max(std::min(latency_frames, upper_latency_limit), +- SAFE_MIN_LATENCY_FRAMES); +- } +- +-+/* +-+ * Change buffer size is prone to deadlock thus we change it +-+ * following the steps: +-+ * - register a listener for the buffer size property +-+ * - change the property +-+ * - wait until the listener is executed +-+ * - property has changed, remove the listener +-+ * */ +-+static void +-+buffer_size_changed_callback(void * inClientData, +-+ AudioUnit inUnit, +-+ AudioUnitPropertyID inPropertyID, +-+ AudioUnitScope inScope, +-+ AudioUnitElement inElement) +-+{ +-+ cubeb_stream * stm = (cubeb_stream *)inClientData; +-+ +-+ AudioUnit au = inUnit; +-+ AudioUnitScope au_scope = kAudioUnitScope_Input; +-+ AudioUnitElement au_element = inElement; +-+ const char * au_type = "output"; +-+ +-+ if (au == stm->input_unit) { +-+ au_scope = kAudioUnitScope_Output; +-+ au_type = "input"; +-+ } +-+ +-+ switch (inPropertyID) { +-+ +-+ case kAudioDevicePropertyBufferFrameSize: { +-+ if (inScope != au_scope) { +-+ break; +-+ } +-+ UInt32 new_buffer_size; +-+ UInt32 outSize = sizeof(UInt32); +-+ OSStatus r = AudioUnitGetProperty(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ au_scope, +-+ au_element, +-+ &new_buffer_size, +-+ &outSize); +-+ if (r != noErr) { +-+ LOG("(%p) Event: kAudioDevicePropertyBufferFrameSize: Cannot get current buffer size", stm); +-+ } else { +-+ LOG("(%p) Event: kAudioDevicePropertyBufferFrameSize: New %s buffer size = %d for scope %d", stm, +-+ au_type, new_buffer_size, inScope); +-+ } +-+ stm->buffer_size_change_state = true; +-+ break; +-+ } +-+ } +-+} +-+ +-+enum set_buffer_size_side { +-+ INPUT, +-+ OUTPUT, +-+}; +-+ +- static int +--setup_audiounit_stream(cubeb_stream * stm) +-+audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buffer_size_side set_side) +-+{ +-+ AudioUnit au = stm->output_unit; +-+ AudioUnitScope au_scope = kAudioUnitScope_Input; +-+ AudioUnitElement au_element = AU_OUT_BUS; +-+ const char * au_type = "output"; +-+ +-+ if (set_side == INPUT) { +-+ au = stm->input_unit; +-+ au_scope = kAudioUnitScope_Output; +-+ au_element = AU_IN_BUS; +-+ au_type = "input"; +-+ } +-+ +-+ uint32_t buffer_frames = 0; +-+ UInt32 size = sizeof(buffer_frames); +-+ int r = AudioUnitGetProperty(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ au_scope, +-+ au_element, +-+ &buffer_frames, +-+ &size); +-+ if (r != noErr) { +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ return CUBEB_ERROR; +-+ } +-+ +-+ if (new_size_frames == buffer_frames) { +-+ LOG("(%p) No need to update %s buffer size already %u frames", stm, au_type, buffer_frames); +-+ return CUBEB_OK; +-+ } +-+ +-+ r = AudioUnitAddPropertyListener(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ buffer_size_changed_callback, +-+ stm); +-+ if (r != noErr) { +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ return CUBEB_ERROR; +-+ } +-+ +-+ stm->buffer_size_change_state = false; +-+ +-+ r = AudioUnitSetProperty(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ au_scope, +-+ au_element, +-+ &new_size_frames, +-+ sizeof(new_size_frames)); +-+ if (r != noErr) { +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ +-+ r = AudioUnitRemovePropertyListenerWithUserData(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ buffer_size_changed_callback, +-+ stm); +-+ if (r != noErr) { +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ } +-+ +-+ return CUBEB_ERROR; +-+ } +-+ +-+ int count = 0; +-+ while (!stm->buffer_size_change_state && count++ < 30) { +-+ struct timespec req, rem; +-+ req.tv_sec = 0; +-+ req.tv_nsec = 100000000L; // 0.1 sec +-+ if (nanosleep(&req , &rem) < 0 ) { +-+ LOG("(%p) Warning: nanosleep call failed or interrupted. Remaining time %ld nano secs \n", stm, rem.tv_nsec); +-+ } +-+ LOG("(%p) audiounit_set_buffer_size : wait count = %d", stm, count); +-+ } +-+ +-+ r = AudioUnitRemovePropertyListenerWithUserData(au, +-+ kAudioDevicePropertyBufferFrameSize, +-+ buffer_size_changed_callback, +-+ stm); +-+ if (r != noErr) { +-+ return CUBEB_ERROR; +-+ if (set_side == INPUT) { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +-+ } else { +-+ PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +-+ } +-+ } +-+ +-+ if (!stm->buffer_size_change_state && count >= 30) { +-+ LOG("(%p) Error, did not get buffer size change callback ...", stm); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ LOG("(%p) %s buffer size changed to %u frames.", stm, au_type, new_size_frames); +-+ return CUBEB_OK; +-+} +-+ +-+static int +-+audiounit_configure_input(cubeb_stream * stm) +-+{ +-+ int r = 0; +-+ UInt32 size; +-+ AURenderCallbackStruct aurcbs_in; +-+ +-+ LOG("(%p) Opening input side: rate %u, channels %u, format %d, latency in frames %u.", +-+ stm, stm->input_stream_params.rate, stm->input_stream_params.channels, +-+ stm->input_stream_params.format, stm->latency_frames); +-+ +-+ /* Get input device sample rate. */ +-+ AudioStreamBasicDescription input_hw_desc; +-+ size = sizeof(AudioStreamBasicDescription); +-+ r = AudioUnitGetProperty(stm->input_unit, +-+ kAudioUnitProperty_StreamFormat, +-+ kAudioUnitScope_Input, +-+ AU_IN_BUS, +-+ &input_hw_desc, +-+ &size); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat", r); +-+ return CUBEB_ERROR; +-+ } +-+ stm->input_hw_rate = input_hw_desc.mSampleRate; +-+ LOG("(%p) Input device sampling rate: %.2f", stm, stm->input_hw_rate); +-+ +-+ /* Set format description according to the input params. */ +-+ r = audio_stream_desc_init(&stm->input_desc, &stm->input_stream_params); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Setting format description for input failed.", stm); +-+ return r; +-+ } +-+ +-+ // Use latency to set buffer size +-+ stm->input_buffer_frames = stm->latency_frames; +-+ r = audiounit_set_buffer_size(stm, stm->input_buffer_frames, INPUT); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Error in change input buffer size.", stm); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ AudioStreamBasicDescription src_desc = stm->input_desc; +-+ /* Input AudioUnit must be configured with device's sample rate. +-+ we will resample inside input callback. */ +-+ src_desc.mSampleRate = stm->input_hw_rate; +-+ +-+ r = AudioUnitSetProperty(stm->input_unit, +-+ kAudioUnitProperty_StreamFormat, +-+ kAudioUnitScope_Output, +-+ AU_IN_BUS, +-+ &src_desc, +-+ sizeof(AudioStreamBasicDescription)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ /* Frames per buffer in the input callback. */ +-+ r = AudioUnitSetProperty(stm->input_unit, +-+ kAudioUnitProperty_MaximumFramesPerSlice, +-+ kAudioUnitScope_Global, +-+ AU_IN_BUS, +-+ &stm->input_buffer_frames, +-+ sizeof(UInt32)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ // Input only capacity +-+ unsigned int array_capacity = 1; +-+ if (has_output(stm)) { +-+ // Full-duplex increase capacity +-+ array_capacity = 8; +-+ } +-+ if (audiounit_init_input_linear_buffer(stm, array_capacity) != CUBEB_OK) { +-+ return CUBEB_ERROR; +-+ } +-+ +-+ assert(stm->input_unit != NULL); +-+ aurcbs_in.inputProc = audiounit_input_callback; +-+ aurcbs_in.inputProcRefCon = stm; +-+ +-+ r = AudioUnitSetProperty(stm->input_unit, +-+ kAudioOutputUnitProperty_SetInputCallback, +-+ kAudioUnitScope_Global, +-+ AU_OUT_BUS, +-+ &aurcbs_in, +-+ sizeof(aurcbs_in)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback", r); +-+ return CUBEB_ERROR; +-+ } +-+ LOG("(%p) Input audiounit init successfully.", stm); +-+ +-+ return CUBEB_OK; +-+} +-+ +-+static int +-+audiounit_configure_output(cubeb_stream * stm) +-+{ +-+ int r; +-+ AURenderCallbackStruct aurcbs_out; +-+ UInt32 size; +-+ +-+ +-+ LOG("(%p) Opening output side: rate %u, channels %u, format %d, latency in frames %u.", +-+ stm, stm->output_stream_params.rate, stm->output_stream_params.channels, +-+ stm->output_stream_params.format, stm->latency_frames); +-+ +-+ r = audio_stream_desc_init(&stm->output_desc, &stm->output_stream_params); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not initialize the audio stream description.", stm); +-+ return r; +-+ } +-+ +-+ /* Get output device sample rate. */ +-+ AudioStreamBasicDescription output_hw_desc; +-+ size = sizeof(AudioStreamBasicDescription); +-+ memset(&output_hw_desc, 0, size); +-+ r = AudioUnitGetProperty(stm->output_unit, +-+ kAudioUnitProperty_StreamFormat, +-+ kAudioUnitScope_Output, +-+ AU_OUT_BUS, +-+ &output_hw_desc, +-+ &size); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitGetProperty/output/tkAudioUnitProperty_StreamFormat", r); +-+ return CUBEB_ERROR; +-+ } +-+ stm->output_hw_rate = output_hw_desc.mSampleRate; +-+ LOG("(%p) Output device sampling rate: %.2f", stm, output_hw_desc.mSampleRate); +-+ +-+ r = AudioUnitSetProperty(stm->output_unit, +-+ kAudioUnitProperty_StreamFormat, +-+ kAudioUnitScope_Input, +-+ AU_OUT_BUS, +-+ &stm->output_desc, +-+ sizeof(AudioStreamBasicDescription)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ r = audiounit_set_buffer_size(stm, stm->latency_frames, OUTPUT); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Error in change output buffer size.", stm); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ /* Frames per buffer in the input callback. */ +-+ r = AudioUnitSetProperty(stm->output_unit, +-+ kAudioUnitProperty_MaximumFramesPerSlice, +-+ kAudioUnitScope_Global, +-+ AU_OUT_BUS, +-+ &stm->latency_frames, +-+ sizeof(UInt32)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_MaximumFramesPerSlice", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ assert(stm->output_unit != NULL); +-+ aurcbs_out.inputProc = audiounit_output_callback; +-+ aurcbs_out.inputProcRefCon = stm; +-+ r = AudioUnitSetProperty(stm->output_unit, +-+ kAudioUnitProperty_SetRenderCallback, +-+ kAudioUnitScope_Global, +-+ AU_OUT_BUS, +-+ &aurcbs_out, +-+ sizeof(aurcbs_out)); +-+ if (r != noErr) { +-+ PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback", r); +-+ return CUBEB_ERROR; +-+ } +-+ +-+ LOG("(%p) Output audiounit init successfully.", stm); +-+ return CUBEB_OK; +-+} +-+ +-+static int +-+audiounit_setup_stream(cubeb_stream * stm) +- { +- stm->mutex.assert_current_thread_owns(); +- +-- int r; +-- AURenderCallbackStruct aurcbs_in; +-- AURenderCallbackStruct aurcbs_out; +-- UInt32 size; +-- +-+ int r = 0; +- if (has_input(stm)) { +- r = audiounit_create_unit(&stm->input_unit, true, +- &stm->input_stream_params, +- stm->input_device); +- if (r != CUBEB_OK) { +- LOG("(%p) AudioUnit creation for input failed.", stm); +- return r; +- } +-@@ -1249,180 +1622,46 @@ setup_audiounit_stream(cubeb_stream * st +- &stm->output_stream_params, +- stm->output_device); +- if (r != CUBEB_OK) { +- LOG("(%p) AudioUnit creation for output failed.", stm); +- return r; +- } +- } +- +-+ /* Latency cannot change if another stream is operating in parallel. In this case +-+ * latecy is set to the other stream value. */ +-+ if (stm->context->active_streams > 1) { +-+ LOG("(%p) More than one active stream, use global latency.", stm); +-+ stm->latency_frames = stm->context->global_latency_frames; +-+ } else { +-+ /* Silently clamp the latency down to the platform default, because we +-+ * synthetize the clock from the callbacks, and we want the clock to update +-+ * often. */ +-+ stm->latency_frames = audiounit_clamp_latency(stm, stm->latency_frames); +-+ assert(stm->latency_frames); // Ungly error check +-+ audiounit_set_global_latency(stm, stm->latency_frames); +-+ } +-+ +- /* Setup Input Stream! */ +- if (has_input(stm)) { +-- LOG("(%p) Opening input side: rate %u, channels %u, format %d, latency in frames %u.", +-- stm, stm->input_stream_params.rate, stm->input_stream_params.channels, +-- stm->input_stream_params.format, stm->latency_frames); +-- /* Get input device sample rate. */ +-- AudioStreamBasicDescription input_hw_desc; +-- size = sizeof(AudioStreamBasicDescription); +-- r = AudioUnitGetProperty(stm->input_unit, +-- kAudioUnitProperty_StreamFormat, +-- kAudioUnitScope_Input, +-- AU_IN_BUS, +-- &input_hw_desc, +-- &size); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat", r); +-- return CUBEB_ERROR; +-- } +-- stm->input_hw_rate = input_hw_desc.mSampleRate; +-- LOG("(%p) Input device sampling rate: %.2f", stm, stm->input_hw_rate); +-- +-- /* Set format description according to the input params. */ +-- r = audio_stream_desc_init(&stm->input_desc, &stm->input_stream_params); +-+ r = audiounit_configure_input(stm); +- if (r != CUBEB_OK) { +-- LOG("(%p) Setting format description for input failed.", stm); +-+ LOG("(%p) Configure audiounit input failed.", stm); +- return r; +- } +-- +-- // Use latency to set buffer size +-- stm->input_buffer_frames = stm->latency_frames; +-- LOG("(%p) Input buffer frame count %u.", stm, unsigned(stm->input_buffer_frames)); +-- r = AudioUnitSetProperty(stm->input_unit, +-- kAudioDevicePropertyBufferFrameSize, +-- kAudioUnitScope_Output, +-- AU_IN_BUS, +-- &stm->input_buffer_frames, +-- sizeof(UInt32)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +-- return CUBEB_ERROR; +-- } +-- +-- AudioStreamBasicDescription src_desc = stm->input_desc; +-- /* Input AudioUnit must be configured with device's sample rate. +-- we will resample inside input callback. */ +-- src_desc.mSampleRate = stm->input_hw_rate; +-- +-- r = AudioUnitSetProperty(stm->input_unit, +-- kAudioUnitProperty_StreamFormat, +-- kAudioUnitScope_Output, +-- AU_IN_BUS, +-- &src_desc, +-- sizeof(AudioStreamBasicDescription)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat", r); +-- return CUBEB_ERROR; +-- } +-- +-- /* Frames per buffer in the input callback. */ +-- r = AudioUnitSetProperty(stm->input_unit, +-- kAudioUnitProperty_MaximumFramesPerSlice, +-- kAudioUnitScope_Output, +-- AU_IN_BUS, +-- &stm->input_buffer_frames, +-- sizeof(UInt32)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice", r); +-- return CUBEB_ERROR; +-- } +-- +-- // Input only capacity +-- unsigned int array_capacity = 1; +-- if (has_output(stm)) { +-- // Full-duplex increase capacity +-- array_capacity = 8; +-- } +-- if (audiounit_init_input_linear_buffer(stm, array_capacity) != CUBEB_OK) { +-- return CUBEB_ERROR; +-- } +-- +-- assert(stm->input_unit != NULL); +-- aurcbs_in.inputProc = audiounit_input_callback; +-- aurcbs_in.inputProcRefCon = stm; +-- +-- r = AudioUnitSetProperty(stm->input_unit, +-- kAudioOutputUnitProperty_SetInputCallback, +-- kAudioUnitScope_Global, +-- AU_OUT_BUS, +-- &aurcbs_in, +-- sizeof(aurcbs_in)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback", r); +-- return CUBEB_ERROR; +-- } +-- LOG("(%p) Input audiounit init successfully.", stm); +- } +- +- /* Setup Output Stream! */ +- if (has_output(stm)) { +-- LOG("(%p) Opening output side: rate %u, channels %u, format %d, latency in frames %u.", +-- stm, stm->output_stream_params.rate, stm->output_stream_params.channels, +-- stm->output_stream_params.format, stm->latency_frames); +-- r = audio_stream_desc_init(&stm->output_desc, &stm->output_stream_params); +-+ r = audiounit_configure_output(stm); +- if (r != CUBEB_OK) { +-- LOG("(%p) Could not initialize the audio stream description.", stm); +-+ LOG("(%p) Configure audiounit output failed.", stm); +- return r; +- } +-- +-- /* Get output device sample rate. */ +-- AudioStreamBasicDescription output_hw_desc; +-- size = sizeof(AudioStreamBasicDescription); +-- memset(&output_hw_desc, 0, size); +-- r = AudioUnitGetProperty(stm->output_unit, +-- kAudioUnitProperty_StreamFormat, +-- kAudioUnitScope_Output, +-- AU_OUT_BUS, +-- &output_hw_desc, +-- &size); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitGetProperty/output/tkAudioUnitProperty_StreamFormat", r); +-- return CUBEB_ERROR; +-- } +-- stm->output_hw_rate = output_hw_desc.mSampleRate; +-- LOG("(%p) Output device sampling rate: %.2f", stm, output_hw_desc.mSampleRate); +-- +-- r = AudioUnitSetProperty(stm->output_unit, +-- kAudioUnitProperty_StreamFormat, +-- kAudioUnitScope_Input, +-- AU_OUT_BUS, +-- &stm->output_desc, +-- sizeof(AudioStreamBasicDescription)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat", r); +-- return CUBEB_ERROR; +-- } +-- +-- // Use latency to calculate buffer size +-- uint32_t output_buffer_frames = stm->latency_frames; +-- LOG("(%p) Output buffer frame count %u.", stm, output_buffer_frames); +-- r = AudioUnitSetProperty(stm->output_unit, +-- kAudioDevicePropertyBufferFrameSize, +-- kAudioUnitScope_Input, +-- AU_OUT_BUS, +-- &output_buffer_frames, +-- sizeof(output_buffer_frames)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +-- return CUBEB_ERROR; +-- } +-- +-- assert(stm->output_unit != NULL); +-- aurcbs_out.inputProc = audiounit_output_callback; +-- aurcbs_out.inputProcRefCon = stm; +-- r = AudioUnitSetProperty(stm->output_unit, +-- kAudioUnitProperty_SetRenderCallback, +-- kAudioUnitScope_Global, +-- AU_OUT_BUS, +-- &aurcbs_out, +-- sizeof(aurcbs_out)); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback", r); +-- return CUBEB_ERROR; +-- } +-- LOG("(%p) Output audiounit init successfully.", stm); +- } +- +- // Setting the latency doesn't work well for USB headsets (eg. plantronics). +- // Keep the default latency for now. +- #if 0 +- buffer_size = latency; +- +- /* Get the range of latency this particular device can work with, and clamp +-@@ -1535,63 +1774,60 @@ audiounit_stream_init(cubeb * context, +- void * user_ptr) +- { +- cubeb_stream * stm; +- int r; +- +- assert(context); +- *stream = NULL; +- +-+ assert(latency_frames > 0); +- if (context->limit_streams && context->active_streams >= CUBEB_STREAM_MAX) { +- LOG("Reached the stream limit of %d", CUBEB_STREAM_MAX); +- return CUBEB_ERROR; +- } +-- context->active_streams += 1; +- +- stm = (cubeb_stream *) calloc(1, sizeof(cubeb_stream)); +- assert(stm); +- // Placement new to call the ctors of cubeb_stream members. +- new (stm) cubeb_stream(); +- +- /* These could be different in the future if we have both +- * full-duplex stream and different devices for input vs output. */ +- stm->context = context; +- stm->data_callback = data_callback; +- stm->state_callback = state_callback; +- stm->user_ptr = user_ptr; +-+ stm->latency_frames = latency_frames; +- stm->device_changed_callback = NULL; +- if (input_stream_params) { +- stm->input_stream_params = *input_stream_params; +- stm->input_device = input_device; +- stm->is_default_input = input_device == nullptr || +- (audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT) == +- reinterpret_cast(input_device)); +- } +- if (output_stream_params) { +- stm->output_stream_params = *output_stream_params; +- stm->output_device = output_device; +- } +- +- /* Init data members where necessary */ +- stm->hw_latency_frames = UINT64_MAX; +- +-- /* Silently clamp the latency down to the platform default, because we +-- * synthetize the clock from the callbacks, and we want the clock to update +-- * often. */ +-- stm->latency_frames = audiounit_clamp_latency(stm, latency_frames); +-- assert(latency_frames > 0); +-- +- stm->switching_device = false; +- +-+ auto_lock context_lock(context->mutex); +- { +- // It's not critical to lock here, because no other thread has been started +- // yet, but it allows to assert that the lock has been taken in +-- // `setup_audiounit_stream`. +-+ // `audiounit_setup_stream`. +-+ context->active_streams += 1; +- auto_lock lock(stm->mutex); +-- r = setup_audiounit_stream(stm); +-+ r = audiounit_setup_stream(stm); +- } +- +- if (r != CUBEB_OK) { +- LOG("(%p) Could not setup the audiounit stream.", stm); +- audiounit_stream_destroy(stm); +- return r; +- } +- +-@@ -1602,17 +1838,17 @@ audiounit_stream_init(cubeb * context, +- } +- +- *stream = stm; +- LOG("Cubeb stream (%p) init successful.", stm); +- return CUBEB_OK; +- } +- +- static void +--close_audiounit_stream(cubeb_stream * stm) +-+audiounit_close_stream(cubeb_stream *stm) +- { +- stm->mutex.assert_current_thread_owns(); +- if (stm->input_unit) { +- AudioUnitUninitialize(stm->input_unit); +- AudioComponentInstanceDispose(stm->input_unit); +- } +- +- audiounit_destroy_input_linear_buffer(stm); +-@@ -1625,33 +1861,36 @@ close_audiounit_stream(cubeb_stream * st +- cubeb_resampler_destroy(stm->resampler); +- } +- +- static void +- audiounit_stream_destroy(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-+ auto_lock context_locl(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- { +- auto_lock lock(stm->mutex); +-- close_audiounit_stream(stm); +-+ audiounit_close_stream(stm); +- } +- +- #if !TARGET_OS_IPHONE +- int r = audiounit_uninstall_device_changed_callback(stm); +- if (r != CUBEB_OK) { +- LOG("(%p) Could not uninstall the device changed callback", stm); +- } +- #endif +- +- assert(stm->context->active_streams >= 1); +- stm->context->active_streams -= 1; +- +-+ LOG("Cubeb stream (%p) destroyed successful.", stm); +-+ +- stm->~cubeb_stream(); +- free(stm); +- } +- +- void +- audiounit_stream_start_internal(cubeb_stream * stm) +- { +- OSStatus r; +-@@ -1666,16 +1905,17 @@ audiounit_stream_start_internal(cubeb_st +- } +- +- static int +- audiounit_stream_start(cubeb_stream * stm) +- { +- stm->shutdown = false; +- stm->draining = false; +- +-+ auto_lock context_locl(stm->context->mutex); +- audiounit_stream_start_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); +- +- LOG("Cubeb stream (%p) started successfully.", stm); +- return CUBEB_OK; +- } +- +-@@ -1693,16 +1933,17 @@ audiounit_stream_stop_internal(cubeb_str +- } +- } +- +- static int +- audiounit_stream_stop(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-+ auto_lock context_locl(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- +- LOG("Cubeb stream (%p) stopped successfully.", stm); +- return CUBEB_OK; +- } +- +diff --git a/media/libcubeb/prevent-double-free.patch b/media/libcubeb/prevent-double-free.patch +deleted file mode 100644 +index aa5356d7f..000000000 +--- a/media/libcubeb/prevent-double-free.patch ++++ /dev/null +@@ -1,46 +0,0 @@ +-From f82f15635e09aac4f07d2ddac3d53c84b593d911 Mon Sep 17 00:00:00 2001 +-From: Paul Adenot +-Date: Mon, 16 Jan 2017 04:49:41 -0800 +-Subject: [PATCH 1/1] Prevent double-free when doing an emergency bailout from +- the rendering thread. +- +-This caused gecko bug 1326176. +- +-This was caused by the fact that we would null out `stm->thread` when in +-fact it was still running, so we would delete `stm->emergency_bailout` +-twice, because we would return true from `stop_and_join_thread`. +---- +- src/cubeb_wasapi.cpp | 15 ++++++++++----- +- 1 file changed, 10 insertions(+), 5 deletions(-) +- +-diff --git a/src/cubeb_wasapi.cpp b/src/cubeb_wasapi.cpp +-index 63c12ac..2920b5d 100644 +---- a/src/cubeb_wasapi.cpp +-+++ b/src/cubeb_wasapi.cpp +-@@ -1230,13 +1230,18 @@ bool stop_and_join_render_thread(cubeb_stream * stm) +- rv = false; +- } +- +-- LOG("Closing thread."); +- +-- CloseHandle(stm->thread); +-- stm->thread = NULL; +-+ // Only attempts to close and null out the thread and event if the +-+ // WaitForSingleObject above succeeded, so that calling this function again +-+ // attemps to clean up the thread and event each time. +-+ if (rv) { +-+ LOG("Closing thread."); +-+ CloseHandle(stm->thread); +-+ stm->thread = NULL; +- +-- CloseHandle(stm->shutdown_event); +-- stm->shutdown_event = 0; +-+ CloseHandle(stm->shutdown_event); +-+ stm->shutdown_event = 0; +-+ } +- +- return rv; +- } +--- +-2.7.4 +- +diff --git a/media/libcubeb/src/android/cubeb-output-latency.h b/media/libcubeb/src/android/cubeb-output-latency.h +new file mode 100644 +index 000000000..a824fc1c2 +--- /dev/null ++++ b/media/libcubeb/src/android/cubeb-output-latency.h +@@ -0,0 +1,76 @@ ++#ifndef _CUBEB_OUTPUT_LATENCY_H_ ++#define _CUBEB_OUTPUT_LATENCY_H_ ++ ++#include ++#include "cubeb_media_library.h" ++#include "../cubeb-jni.h" ++ ++struct output_latency_function { ++ media_lib * from_lib; ++ cubeb_jni * from_jni; ++ int version; ++}; ++ ++typedef struct output_latency_function output_latency_function; ++ ++const int ANDROID_JELLY_BEAN_MR1_4_2 = 17; ++ ++output_latency_function * ++cubeb_output_latency_load_method(int version) ++{ ++ output_latency_function * ol = NULL; ++ ol = calloc(1, sizeof(output_latency_function)); ++ ++ ol->version = version; ++ ++ if (ol->version > ANDROID_JELLY_BEAN_MR1_4_2){ ++ ol->from_jni = cubeb_jni_init(); ++ return ol; ++ } ++ ++ ol->from_lib = cubeb_load_media_library(); ++ return ol; ++} ++ ++bool ++cubeb_output_latency_method_is_loaded(output_latency_function * ol) ++{ ++ assert(ol && (ol->from_jni || ol->from_lib)); ++ if (ol->version > ANDROID_JELLY_BEAN_MR1_4_2){ ++ return !!ol->from_jni; ++ } ++ ++ return !!ol->from_lib; ++} ++ ++void ++cubeb_output_latency_unload_method(output_latency_function * ol) ++{ ++ if (!ol) { ++ return; ++ } ++ ++ if (ol->version > ANDROID_JELLY_BEAN_MR1_4_2 && ol->from_jni) { ++ cubeb_jni_destroy(ol->from_jni); ++ } ++ ++ if (ol->version <= ANDROID_JELLY_BEAN_MR1_4_2 && ol->from_lib) { ++ cubeb_close_media_library(ol->from_lib); ++ } ++ ++ free(ol); ++} ++ ++uint32_t ++cubeb_get_output_latency(output_latency_function * ol) ++{ ++ assert(cubeb_output_latency_method_is_loaded(ol)); ++ ++ if (ol->version > ANDROID_JELLY_BEAN_MR1_4_2){ ++ return cubeb_get_output_latency_from_jni(ol->from_jni); ++ } ++ ++ return cubeb_get_output_latency_from_media_library(ol->from_lib); ++} ++ ++#endif // _CUBEB_OUTPUT_LATENCY_H_ +diff --git a/media/libcubeb/src/android/cubeb_media_library.h b/media/libcubeb/src/android/cubeb_media_library.h +new file mode 100644 +index 000000000..ab21b779d +--- /dev/null ++++ b/media/libcubeb/src/android/cubeb_media_library.h +@@ -0,0 +1,62 @@ ++#ifndef _CUBEB_MEDIA_LIBRARY_H_ ++#define _CUBEB_MEDIA_LIBRARY_H_ ++ ++struct media_lib { ++ void * libmedia; ++ int32_t (* get_output_latency)(uint32_t * latency, int stream_type); ++}; ++ ++typedef struct media_lib media_lib; ++ ++media_lib * ++cubeb_load_media_library() ++{ ++ media_lib ml = {0}; ++ ml.libmedia = dlopen("libmedia.so", RTLD_LAZY); ++ if (!ml.libmedia) { ++ return NULL; ++ } ++ ++ // Get the latency, in ms, from AudioFlinger. First, try the most recent signature. ++ // status_t AudioSystem::getOutputLatency(uint32_t* latency, audio_stream_type_t streamType) ++ ml.get_output_latency = ++ dlsym(ml.libmedia, "_ZN7android11AudioSystem16getOutputLatencyEPj19audio_stream_type_t"); ++ if (!ml.get_output_latency) { ++ // In case of failure, try the signature from legacy version. ++ // status_t AudioSystem::getOutputLatency(uint32_t* latency, int streamType) ++ ml.get_output_latency = ++ dlsym(ml.libmedia, "_ZN7android11AudioSystem16getOutputLatencyEPji"); ++ if (!ml.get_output_latency) { ++ return NULL; ++ } ++ } ++ ++ media_lib * rv = NULL; ++ rv = calloc(1, sizeof(media_lib)); ++ assert(rv); ++ *rv = ml; ++ return rv; ++} ++ ++void ++cubeb_close_media_library(media_lib * ml) ++{ ++ dlclose(ml->libmedia); ++ ml->libmedia = NULL; ++ ml->get_output_latency = NULL; ++ free(ml); ++} ++ ++uint32_t ++cubeb_get_output_latency_from_media_library(media_lib * ml) ++{ ++ uint32_t latency = 0; ++ const int audio_stream_type_music = 3; ++ int32_t r = ml->get_output_latency(&latency, audio_stream_type_music); ++ if (r) { ++ return 0; ++ } ++ return latency; ++} ++ ++#endif // _CUBEB_MEDIA_LIBRARY_H_ +diff --git a/media/libcubeb/src/android/sles_definitions.h b/media/libcubeb/src/android/sles_definitions.h +index 1b1ace567..06d2e8d49 100644 +--- a/media/libcubeb/src/android/sles_definitions.h ++++ b/media/libcubeb/src/android/sles_definitions.h +@@ -43,10 +43,9 @@ + #define SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION ((SLuint32) 0x00000003) + /** uses the main microphone tuned for audio communications */ + #define SL_ANDROID_RECORDING_PRESET_VOICE_COMMUNICATION ((SLuint32) 0x00000004) ++/** uses the main microphone unprocessed */ ++#define SL_ANDROID_RECORDING_PRESET_UNPROCESSED ((SLuint32) 0x00000005) + +-/** Audio recording get session ID (read only) */ +-/** Audio recording get session ID key */ +-#define SL_ANDROID_KEY_RECORDING_SESSION_ID ((const SLchar*) "androidRecordingSessionId") + + /*---------------------------------------------------------------------------*/ + /* Android AudioPlayer configuration */ +@@ -69,9 +68,35 @@ + #define SL_ANDROID_STREAM_ALARM ((SLint32) 0x00000004) + /* same as android.media.AudioManager.STREAM_NOTIFICATION */ + #define SL_ANDROID_STREAM_NOTIFICATION ((SLint32) 0x00000005) +-/* same as android.media.AudioManager.STREAM_BLUETOOTH_SCO */ +-#define SL_ANDROID_STREAM_BLUETOOTH_SCO ((SLint32) 0x00000006) +-/* same as android.media.AudioManager.STREAM_SYSTEM_ENFORCED */ +-#define SL_ANDROID_STREAM_SYSTEM_ENFORCED ((SLint32) 0x00000007) ++ ++ ++/*---------------------------------------------------------------------------*/ ++/* Android AudioPlayer and AudioRecorder configuration */ ++/*---------------------------------------------------------------------------*/ ++ ++/** Audio Performance mode. ++ * Performance mode tells the framework how to configure the audio path ++ * for a player or recorder according to application performance and ++ * functional requirements. ++ * It affects the output or input latency based on acceptable tradeoffs on ++ * battery drain and use of pre or post processing effects. ++ * Performance mode should be set before realizing the object and should be ++ * read after realizing the object to check if the requested mode could be ++ * granted or not. ++ */ ++/** Audio Performance mode key */ ++#define SL_ANDROID_KEY_PERFORMANCE_MODE ((const SLchar*) "androidPerformanceMode") ++ ++/** Audio performance values */ ++/* No specific performance requirement. Allows HW and SW pre/post processing. */ ++#define SL_ANDROID_PERFORMANCE_NONE ((SLuint32) 0x00000000) ++/* Priority given to latency. No HW or software pre/post processing. ++ * This is the default if no performance mode is specified. */ ++#define SL_ANDROID_PERFORMANCE_LATENCY ((SLuint32) 0x00000001) ++/* Priority given to latency while still allowing HW pre and post processing. */ ++#define SL_ANDROID_PERFORMANCE_LATENCY_EFFECTS ((SLuint32) 0x00000002) ++/* Priority given to power saving if latency is not a concern. ++ * Allows HW and SW pre/post processing. */ ++#define SL_ANDROID_PERFORMANCE_POWER_SAVING ((SLuint32) 0x00000003) + + #endif /* OPENSL_ES_ANDROIDCONFIGURATION_H_ */ +diff --git a/media/libcubeb/src/cubeb-internal.h b/media/libcubeb/src/cubeb-internal.h +index dfcc186c5..312a9ea3a 100644 +--- a/media/libcubeb/src/cubeb-internal.h ++++ b/media/libcubeb/src/cubeb-internal.h +@@ -9,6 +9,7 @@ + + #include "cubeb/cubeb.h" + #include "cubeb_log.h" ++#include "cubeb_assert.h" + #include + #include + +@@ -28,9 +29,6 @@ + extern "C" { + #endif + +-/* Crash the caller. */ +-void cubeb_crash() CLANG_ANALYZER_NORETURN; +- + #if defined(__cplusplus) + } + #endif +@@ -44,7 +42,9 @@ struct cubeb_ops { + uint32_t * latency_ms); + int (* get_preferred_sample_rate)(cubeb * context, uint32_t * rate); + int (* enumerate_devices)(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection); ++ cubeb_device_collection * collection); ++ int (* device_collection_destroy)(cubeb * context, ++ cubeb_device_collection * collection); + void (* destroy)(cubeb * context); + int (* stream_init)(cubeb * context, + cubeb_stream ** stream, +@@ -60,10 +60,10 @@ struct cubeb_ops { + void (* stream_destroy)(cubeb_stream * stream); + int (* stream_start)(cubeb_stream * stream); + int (* stream_stop)(cubeb_stream * stream); ++ int (* stream_reset_default_device)(cubeb_stream * stream); + int (* stream_get_position)(cubeb_stream * stream, uint64_t * position); + int (* stream_get_latency)(cubeb_stream * stream, uint32_t * latency); + int (* stream_set_volume)(cubeb_stream * stream, float volumes); +- int (* stream_set_panning)(cubeb_stream * stream, float panning); + int (* stream_get_current_device)(cubeb_stream * stream, + cubeb_device ** const device); + int (* stream_device_destroy)(cubeb_stream * stream, +@@ -76,11 +76,4 @@ struct cubeb_ops { + void * user_ptr); + }; + +-#define XASSERT(expr) do { \ +- if (!(expr)) { \ +- fprintf(stderr, "%s:%d - fatal error: %s\n", __FILE__, __LINE__, #expr); \ +- cubeb_crash(); \ +- } \ +- } while (0) +- + #endif /* CUBEB_INTERNAL_0eb56756_4e20_4404_a76d_42bf88cd15a5 */ +diff --git a/media/libcubeb/src/cubeb-jni-instances.h b/media/libcubeb/src/cubeb-jni-instances.h +new file mode 100644 +index 000000000..19c5c29da +--- /dev/null ++++ b/media/libcubeb/src/cubeb-jni-instances.h +@@ -0,0 +1,34 @@ ++#ifndef _CUBEB_JNI_INSTANCES_H_ ++#define _CUBEB_JNI_INSTANCES_H_ ++ ++#include "GeneratedJNIWrappers.h" ++#include "mozilla/jni/Utils.h" ++ ++/* ++ * The methods in this file offer a way to pass in the required ++ * JNI instances in the cubeb library. By default they return NULL. ++ * In this case part of the cubeb API that depends on JNI ++ * will return CUBEB_ERROR_NOT_SUPPORTED. Currently only one ++ * method depends on that: ++ * ++ * cubeb_stream_get_position() ++ * ++ * Users that want to use that cubeb API method must "override" ++ * the methods bellow to return a valid instance of JavaVM ++ * and application's Context object. ++ * */ ++ ++JNIEnv * ++cubeb_get_jni_env_for_thread() ++{ ++ return mozilla::jni::GetEnvForThread(); ++} ++ ++jobject ++cubeb_jni_get_context_instance() ++{ ++ auto context = mozilla::java::GeckoAppShell::GetApplicationContext(); ++ return context.Forget(); ++} ++ ++#endif //_CUBEB_JNI_INSTANCES_H_ +diff --git a/media/libcubeb/src/cubeb-jni.cpp b/media/libcubeb/src/cubeb-jni.cpp +new file mode 100644 +index 000000000..a5066967a +--- /dev/null ++++ b/media/libcubeb/src/cubeb-jni.cpp +@@ -0,0 +1,68 @@ ++#include "jni.h" ++#include ++#include "cubeb-jni-instances.h" ++ ++#define AUDIO_STREAM_TYPE_MUSIC 3 ++ ++struct cubeb_jni { ++ jobject s_audio_manager_obj = nullptr; ++ jclass s_audio_manager_class = nullptr; ++ jmethodID s_get_output_latency_id = nullptr; ++}; ++ ++extern "C" ++cubeb_jni * ++cubeb_jni_init() ++{ ++ jobject ctx_obj = cubeb_jni_get_context_instance(); ++ JNIEnv * jni_env = cubeb_get_jni_env_for_thread(); ++ if (!jni_env || !ctx_obj) { ++ return nullptr; ++ } ++ ++ cubeb_jni * cubeb_jni_ptr = new cubeb_jni; ++ assert(cubeb_jni_ptr); ++ ++ // Find the audio manager object and make it global to call it from another method ++ jclass context_class = jni_env->FindClass("android/content/Context"); ++ jfieldID audio_service_field = jni_env->GetStaticFieldID(context_class, "AUDIO_SERVICE", "Ljava/lang/String;"); ++ jstring jstr = (jstring)jni_env->GetStaticObjectField(context_class, audio_service_field); ++ jmethodID get_system_service_id = jni_env->GetMethodID(context_class, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); ++ jobject audio_manager_obj = jni_env->CallObjectMethod(ctx_obj, get_system_service_id, jstr); ++ cubeb_jni_ptr->s_audio_manager_obj = reinterpret_cast(jni_env->NewGlobalRef(audio_manager_obj)); ++ ++ // Make the audio manager class a global reference in order to preserve method id ++ jclass audio_manager_class = jni_env->FindClass("android/media/AudioManager"); ++ cubeb_jni_ptr->s_audio_manager_class = reinterpret_cast(jni_env->NewGlobalRef(audio_manager_class)); ++ cubeb_jni_ptr->s_get_output_latency_id = jni_env->GetMethodID (audio_manager_class, "getOutputLatency", "(I)I"); ++ ++ jni_env->DeleteLocalRef(ctx_obj); ++ jni_env->DeleteLocalRef(context_class); ++ jni_env->DeleteLocalRef(jstr); ++ jni_env->DeleteLocalRef(audio_manager_obj); ++ jni_env->DeleteLocalRef(audio_manager_class); ++ ++ return cubeb_jni_ptr; ++} ++ ++extern "C" ++int cubeb_get_output_latency_from_jni(cubeb_jni * cubeb_jni_ptr) ++{ ++ assert(cubeb_jni_ptr); ++ JNIEnv * jni_env = cubeb_get_jni_env_for_thread(); ++ return jni_env->CallIntMethod(cubeb_jni_ptr->s_audio_manager_obj, cubeb_jni_ptr->s_get_output_latency_id, AUDIO_STREAM_TYPE_MUSIC); //param: AudioManager.STREAM_MUSIC ++} ++ ++extern "C" ++void cubeb_jni_destroy(cubeb_jni * cubeb_jni_ptr) ++{ ++ assert(cubeb_jni_ptr); ++ ++ JNIEnv * jni_env = cubeb_get_jni_env_for_thread(); ++ assert(jni_env); ++ ++ jni_env->DeleteGlobalRef(cubeb_jni_ptr->s_audio_manager_obj); ++ jni_env->DeleteGlobalRef(cubeb_jni_ptr->s_audio_manager_class); ++ ++ delete cubeb_jni_ptr; ++} +diff --git a/media/libcubeb/src/cubeb-jni.h b/media/libcubeb/src/cubeb-jni.h +new file mode 100644 +index 000000000..8c7ddb6ac +--- /dev/null ++++ b/media/libcubeb/src/cubeb-jni.h +@@ -0,0 +1,10 @@ ++#ifndef _CUBEB_JNI_H_ ++#define _CUBEB_JNI_H_ ++ ++typedef struct cubeb_jni cubeb_jni; ++ ++cubeb_jni * cubeb_jni_init(); ++int cubeb_get_output_latency_from_jni(cubeb_jni * cubeb_jni_ptr); ++void cubeb_jni_destroy(cubeb_jni * cubeb_jni_ptr); ++ ++#endif // _CUBEB_JNI_H_ +diff --git a/media/libcubeb/src/cubeb.c b/media/libcubeb/src/cubeb.c +index a239319a4..3ad39dee0 100644 +--- a/media/libcubeb/src/cubeb.c ++++ b/media/libcubeb/src/cubeb.c +@@ -8,20 +8,23 @@ + #include + #include + #include ++#include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + + #define NELEMS(x) ((int) (sizeof(x) / sizeof(x[0]))) + +-cubeb_log_level g_log_level; +-cubeb_log_callback g_log_callback; +- + struct cubeb { + struct cubeb_ops * ops; + }; + + struct cubeb_stream { ++ /* ++ * Note: All implementations of cubeb_stream must keep the following ++ * layout. ++ */ + struct cubeb * context; ++ void * user_ptr; + }; + + #if defined(USE_PULSE) +@@ -45,6 +48,9 @@ int wasapi_init(cubeb ** context, char const * context_name); + #if defined(USE_SNDIO) + int sndio_init(cubeb ** context, char const * context_name); + #endif ++#if defined(USE_SUN) ++int sun_init(cubeb ** context, char const * context_name); ++#endif + #if defined(USE_OPENSL) + int opensl_init(cubeb ** context, char const * context_name); + #endif +@@ -54,10 +60,6 @@ int audiotrack_init(cubeb ** context, char const * context_name); + #if defined(USE_KAI) + int kai_init(cubeb ** context, char const * context_name); + #endif +-#if defined(USE_SUN) +-int sunaudio_init(cubeb ** context, char const * context_name); +-#endif +- + + static int + validate_stream_params(cubeb_stream_params * input_stream_params, +@@ -66,7 +68,7 @@ validate_stream_params(cubeb_stream_params * input_stream_params, + XASSERT(input_stream_params || output_stream_params); + if (output_stream_params) { + if (output_stream_params->rate < 1000 || output_stream_params->rate > 192000 || +- output_stream_params->channels < 1 || output_stream_params->channels > 8) { ++ output_stream_params->channels < 1 || output_stream_params->channels > UINT8_MAX) { + return CUBEB_ERROR_INVALID_FORMAT; + } + } +@@ -99,8 +101,6 @@ validate_stream_params(cubeb_stream_params * input_stream_params, + return CUBEB_ERROR_INVALID_FORMAT; + } + +- +- + static int + validate_latency(int latency) + { +@@ -111,15 +111,75 @@ validate_latency(int latency) + } + + int +-cubeb_init(cubeb ** context, char const * context_name) ++cubeb_init(cubeb ** context, char const * context_name, char const * backend_name) + { +- int (* init[])(cubeb **, char const *) = { ++ int (* init_oneshot)(cubeb **, char const *) = NULL; ++ ++ if (backend_name != NULL) { ++ if (!strcmp(backend_name, "pulse")) { ++#if defined(USE_PULSE) ++ init_oneshot = pulse_init; ++#endif ++ } else if (!strcmp(backend_name, "jack")) { + #if defined(USE_JACK) +- jack_init, ++ init_oneshot = jack_init; ++#endif ++ } else if (!strcmp(backend_name, "alsa")) { ++#if defined(USE_ALSA) ++ init_oneshot = alsa_init; ++#endif ++ } else if (!strcmp(backend_name, "audiounit")) { ++#if defined(USE_AUDIOUNIT) ++ init_oneshot = audiounit_init; ++#endif ++ } else if (!strcmp(backend_name, "wasapi")) { ++#if defined(USE_WASAPI) ++ init_oneshot = wasapi_init; ++#endif ++ } else if (!strcmp(backend_name, "winmm")) { ++#if defined(USE_WINMM) ++ init_oneshot = winmm_init; ++#endif ++ } else if (!strcmp(backend_name, "sndio")) { ++#if defined(USE_SNDIO) ++ init_oneshot = sndio_init; ++#endif ++ } else if (!strcmp(backend_name, "sun")) { ++#if defined(USE_SUN) ++ init_oneshot = sun_init; + #endif ++ } else if (!strcmp(backend_name, "opensl")) { ++#if defined(USE_OPENSL) ++ init_oneshot = opensl_init; ++#endif ++ } else if (!strcmp(backend_name, "audiotrack")) { ++#if defined(USE_AUDIOTRACK) ++ init_oneshot = audiotrack_init; ++#endif ++ } else if (!strcmp(backend_name, "kai")) { ++#if defined(USE_KAI) ++ init_oneshot = kai_init; ++#endif ++ } else { ++ /* Already set */ ++ } ++ } ++ ++ int (* default_init[])(cubeb **, char const *) = { ++ /* ++ * init_oneshot must be at the top to allow user ++ * to override all other choices ++ */ ++ init_oneshot, + #if defined(USE_PULSE) + pulse_init, + #endif ++#if defined(USE_JACK) ++ jack_init, ++#endif ++#if defined(USE_SNDIO) ++ sndio_init, ++#endif + #if defined(USE_ALSA) + alsa_init, + #endif +@@ -132,8 +192,8 @@ cubeb_init(cubeb ** context, char const * context_name) + #if defined(USE_WINMM) + winmm_init, + #endif +-#if defined(USE_SNDIO) +- sndio_init, ++#if defined(USE_SUN) ++ sun_init, + #endif + #if defined(USE_OPENSL) + opensl_init, +@@ -143,9 +203,6 @@ cubeb_init(cubeb ** context, char const * context_name) + #endif + #if defined(USE_KAI) + kai_init, +-#endif +-#if defined(USE_SUN) +- sunaudio_init, + #endif + }; + int i; +@@ -154,10 +211,10 @@ cubeb_init(cubeb ** context, char const * context_name) + return CUBEB_ERROR_INVALID_PARAMETER; + } + +- for (i = 0; i < NELEMS(init); ++i) { +- if (init[i](context, context_name) == CUBEB_OK) { +- /* Assert that the minimal API is implemented. */ + #define OK(fn) assert((* context)->ops->fn) ++ for (i = 0; i < NELEMS(default_init); ++i) { ++ if (default_init[i] && default_init[i](context, context_name) == CUBEB_OK) { ++ /* Assert that the minimal API is implemented. */ + OK(get_backend_id); + OK(destroy); + OK(stream_init); +@@ -168,7 +225,6 @@ cubeb_init(cubeb ** context, char const * context_name) + return CUBEB_OK; + } + } +- + return CUBEB_ERROR; + } + +@@ -197,9 +253,9 @@ cubeb_get_max_channel_count(cubeb * context, uint32_t * max_channels) + } + + int +-cubeb_get_min_latency(cubeb * context, cubeb_stream_params params, uint32_t * latency_ms) ++cubeb_get_min_latency(cubeb * context, cubeb_stream_params * params, uint32_t * latency_ms) + { +- if (!context || !latency_ms) { ++ if (!context || !params || !latency_ms) { + return CUBEB_ERROR_INVALID_PARAMETER; + } + +@@ -207,7 +263,7 @@ cubeb_get_min_latency(cubeb * context, cubeb_stream_params params, uint32_t * la + return CUBEB_ERROR_NOT_SUPPORTED; + } + +- return context->ops->get_min_latency(context, params, latency_ms); ++ return context->ops->get_min_latency(context, *params, latency_ms); + } + + int +@@ -247,7 +303,7 @@ cubeb_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + { + int r; + +- if (!context || !stream) { ++ if (!context || !stream || !data_callback || !state_callback) { + return CUBEB_ERROR_INVALID_PARAMETER; + } + +@@ -256,15 +312,24 @@ cubeb_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + return r; + } + +- return context->ops->stream_init(context, stream, stream_name, +- input_device, +- input_stream_params, +- output_device, +- output_stream_params, +- latency, +- data_callback, +- state_callback, +- user_ptr); ++ r = context->ops->stream_init(context, stream, stream_name, ++ input_device, ++ input_stream_params, ++ output_device, ++ output_stream_params, ++ latency, ++ data_callback, ++ state_callback, ++ user_ptr); ++ ++ if (r == CUBEB_ERROR_INVALID_FORMAT) { ++ LOG("Invalid format, %p %p %d %d", ++ output_stream_params, input_stream_params, ++ output_stream_params && output_stream_params->format, ++ input_stream_params && input_stream_params->format); ++ } ++ ++ return r; + } + + void +@@ -297,6 +362,20 @@ cubeb_stream_stop(cubeb_stream * stream) + return stream->context->ops->stream_stop(stream); + } + ++int ++cubeb_stream_reset_default_device(cubeb_stream * stream) ++{ ++ if (!stream) { ++ return CUBEB_ERROR_INVALID_PARAMETER; ++ } ++ ++ if (!stream->context->ops->stream_reset_default_device) { ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ ++ return stream->context->ops->stream_reset_default_device(stream); ++} ++ + int + cubeb_stream_get_position(cubeb_stream * stream, uint64_t * position) + { +@@ -335,19 +414,6 @@ cubeb_stream_set_volume(cubeb_stream * stream, float volume) + return stream->context->ops->stream_set_volume(stream, volume); + } + +-int cubeb_stream_set_panning(cubeb_stream * stream, float panning) +-{ +- if (!stream || panning < -1.0 || panning > 1.0) { +- return CUBEB_ERROR_INVALID_PARAMETER; +- } +- +- if (!stream->context->ops->stream_set_panning) { +- return CUBEB_ERROR_NOT_SUPPORTED; +- } +- +- return stream->context->ops->stream_set_panning(stream, panning); +-} +- + int cubeb_stream_get_current_device(cubeb_stream * stream, + cubeb_device ** const device) + { +@@ -390,6 +456,15 @@ int cubeb_stream_register_device_changed_callback(cubeb_stream * stream, + return stream->context->ops->stream_register_device_changed_callback(stream, device_changed_callback); + } + ++void * cubeb_stream_user_ptr(cubeb_stream * stream) ++{ ++ if (!stream) { ++ return NULL; ++ } ++ ++ return stream->user_ptr; ++} ++ + static + void log_device(cubeb_device_info * device_info) + { +@@ -479,7 +554,7 @@ void log_device(cubeb_device_info * device_info) + + int cubeb_enumerate_devices(cubeb * context, + cubeb_device_type devtype, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { + int rv; + if ((devtype & (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT)) == 0) +@@ -491,42 +566,36 @@ int cubeb_enumerate_devices(cubeb * context, + + rv = context->ops->enumerate_devices(context, devtype, collection); + +- if (g_log_callback) { +- for (uint32_t i = 0; i < (*collection)->count; i++) { +- log_device((*collection)->device[i]); ++ if (g_cubeb_log_callback) { ++ for (size_t i = 0; i < collection->count; i++) { ++ log_device(&collection->device[i]); + } + } + + return rv; + } + +-int cubeb_device_collection_destroy(cubeb_device_collection * collection) ++int cubeb_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection) + { +- uint32_t i; ++ int r; + +- if (collection == NULL) ++ if (context == NULL || collection == NULL) + return CUBEB_ERROR_INVALID_PARAMETER; + +- for (i = 0; i < collection->count; i++) +- cubeb_device_info_destroy(collection->device[i]); ++ if (!context->ops->device_collection_destroy) ++ return CUBEB_ERROR_NOT_SUPPORTED; + +- free(collection); +- return CUBEB_OK; +-} ++ if (!collection->device) ++ return CUBEB_OK; + +-int cubeb_device_info_destroy(cubeb_device_info * info) +-{ +- if (info == NULL) { +- return CUBEB_ERROR_INVALID_PARAMETER; ++ r = context->ops->device_collection_destroy(context, collection); ++ if (r == CUBEB_OK) { ++ collection->device = NULL; ++ collection->count = 0; + } + +- free(info->device_id); +- free(info->friendly_name); +- free(info->group_id); +- free(info->vendor_name); +- +- free(info); +- return CUBEB_OK; ++ return r; + } + + int cubeb_register_device_collection_changed(cubeb * context, +@@ -555,20 +624,22 @@ int cubeb_set_log_callback(cubeb_log_level log_level, + return CUBEB_ERROR_INVALID_PARAMETER; + } + +- if (g_log_callback && log_callback) { ++ if (g_cubeb_log_callback && log_callback) { + return CUBEB_ERROR_NOT_SUPPORTED; + } + +- g_log_callback = log_callback; +- g_log_level = log_level; ++ g_cubeb_log_callback = log_callback; ++ g_cubeb_log_level = log_level; + +- return CUBEB_OK; +-} ++ // Logging a message here allows to initialize the asynchronous logger from a ++ // thread that is not the audio rendering thread, and especially to not ++ // initialize it the first time we find a verbose log, which is often in the ++ // audio rendering callback, that runs from the audio rendering thread, and ++ // that is high priority, and that we don't want to block. ++ if (log_level >= CUBEB_LOG_VERBOSE) { ++ ALOGV("Starting cubeb log"); ++ } + +-void +-cubeb_crash() +-{ +- *((volatile int *) NULL) = 0; +- abort(); ++ return CUBEB_OK; + } + +diff --git a/media/libcubeb/src/cubeb_alsa.c b/media/libcubeb/src/cubeb_alsa.c +index 72a6acfb1..a564fbfc6 100644 +--- a/media/libcubeb/src/cubeb_alsa.c ++++ b/media/libcubeb/src/cubeb_alsa.c +@@ -14,10 +14,58 @@ + #include + #include + #include ++#include + #include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + ++#ifdef DISABLE_LIBASOUND_DLOPEN ++#define WRAP(x) x ++#else ++#define WRAP(x) cubeb_##x ++#define LIBASOUND_API_VISIT(X) \ ++ X(snd_config) \ ++ X(snd_config_add) \ ++ X(snd_config_copy) \ ++ X(snd_config_delete) \ ++ X(snd_config_get_id) \ ++ X(snd_config_get_string) \ ++ X(snd_config_imake_integer) \ ++ X(snd_config_search) \ ++ X(snd_config_search_definition) \ ++ X(snd_lib_error_set_handler) \ ++ X(snd_pcm_avail_update) \ ++ X(snd_pcm_close) \ ++ X(snd_pcm_delay) \ ++ X(snd_pcm_drain) \ ++ X(snd_pcm_frames_to_bytes) \ ++ X(snd_pcm_get_params) \ ++ X(snd_pcm_hw_params_any) \ ++ X(snd_pcm_hw_params_get_channels_max) \ ++ X(snd_pcm_hw_params_get_rate) \ ++ X(snd_pcm_hw_params_set_rate_near) \ ++ X(snd_pcm_hw_params_sizeof) \ ++ X(snd_pcm_nonblock) \ ++ X(snd_pcm_open) \ ++ X(snd_pcm_open_lconf) \ ++ X(snd_pcm_pause) \ ++ X(snd_pcm_poll_descriptors) \ ++ X(snd_pcm_poll_descriptors_count) \ ++ X(snd_pcm_poll_descriptors_revents) \ ++ X(snd_pcm_readi) \ ++ X(snd_pcm_recover) \ ++ X(snd_pcm_set_params) \ ++ X(snd_pcm_start) \ ++ X(snd_pcm_state) \ ++ X(snd_pcm_writei) \ ++ ++#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x; ++LIBASOUND_API_VISIT(MAKE_TYPEDEF); ++#undef MAKE_TYPEDEF ++/* snd_pcm_hw_params_alloca is actually a macro */ ++#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof ++#endif ++ + #define CUBEB_STREAM_MAX 16 + #define CUBEB_WATCHDOG_MS 10000 + +@@ -36,6 +84,7 @@ static struct cubeb_ops const alsa_ops; + + struct cubeb { + struct cubeb_ops const * ops; ++ void * libasound; + + pthread_t thread; + +@@ -76,13 +125,15 @@ enum stream_state { + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + pthread_mutex_t mutex; + snd_pcm_t * pcm; + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; +- void * user_ptr; +- snd_pcm_uframes_t write_position; ++ snd_pcm_uframes_t stream_position; + snd_pcm_uframes_t last_position; + snd_pcm_uframes_t buffer_size; + cubeb_stream_params params; +@@ -107,6 +158,12 @@ struct cubeb_stream { + being logically active and playing. */ + struct timeval last_activity; + float volume; ++ ++ char * buffer; ++ snd_pcm_uframes_t bufframes; ++ snd_pcm_stream_t stream_type; ++ ++ struct cubeb_stream * other_stream; + }; + + static int +@@ -234,6 +291,14 @@ set_timeout(struct timeval * timeout, unsigned int ms) + timeout->tv_usec += (ms % 1000) * 1000; + } + ++static void ++stream_buffer_decrement(cubeb_stream * stm, long count) ++{ ++ char * bufremains = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, count); ++ memmove(stm->buffer, bufremains, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes - count)); ++ stm->bufframes -= count; ++} ++ + static void + alsa_set_stream_state(cubeb_stream * stm, enum stream_state state) + { +@@ -249,97 +314,173 @@ alsa_set_stream_state(cubeb_stream * stm, enum stream_state state) + } + + static enum stream_state +-alsa_refill_stream(cubeb_stream * stm) ++alsa_process_stream(cubeb_stream * stm) + { ++ unsigned short revents; + snd_pcm_sframes_t avail; +- long got; +- void * p; + int draining; + + draining = 0; + + pthread_mutex_lock(&stm->mutex); + +- avail = snd_pcm_avail_update(stm->pcm); +- if (avail < 0) { +- snd_pcm_recover(stm->pcm, avail, 1); +- avail = snd_pcm_avail_update(stm->pcm); +- } ++ /* Call _poll_descriptors_revents() even if we don't use it ++ to let underlying plugins clear null events. Otherwise poll() ++ may wake up again and again, producing unnecessary CPU usage. */ ++ WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); + +- /* Failed to recover from an xrun, this stream must be broken. */ +- if (avail < 0) { ++ avail = WRAP(snd_pcm_avail_update)(stm->pcm); ++ ++ /* Got null event? Bail and wait for another wakeup. */ ++ if (avail == 0) { + pthread_mutex_unlock(&stm->mutex); +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); +- return ERROR; ++ return RUNNING; + } + +- /* This should never happen. */ ++ /* This could happen if we were suspended with SIGSTOP/Ctrl+Z for a long time. */ + if ((unsigned int) avail > stm->buffer_size) { + avail = stm->buffer_size; + } + +- /* poll(2) claims this stream is active, so there should be some space +- available to write. If avail is still zero here, the stream must be in +- a funky state, bail and wait for another wakeup. */ +- if (avail == 0) { ++ /* Capture: Read available frames */ ++ if (stm->stream_type == SND_PCM_STREAM_CAPTURE && avail > 0) { ++ snd_pcm_sframes_t got; ++ ++ if (avail + stm->bufframes > stm->buffer_size) { ++ /* Buffer overflow. Skip and overwrite with new data. */ ++ stm->bufframes = 0; ++ // TODO: should it be marked as DRAINING? ++ } ++ ++ got = WRAP(snd_pcm_readi)(stm->pcm, stm->buffer+stm->bufframes, avail); ++ ++ if (got < 0) { ++ avail = got; // the error handler below will recover us ++ } else { ++ stm->bufframes += got; ++ stm->stream_position += got; ++ ++ gettimeofday(&stm->last_activity, NULL); ++ } ++ } ++ ++ /* Capture: Pass read frames to callback function */ ++ if (stm->stream_type == SND_PCM_STREAM_CAPTURE && stm->bufframes > 0 && ++ (!stm->other_stream || stm->other_stream->bufframes < stm->other_stream->buffer_size)) { ++ snd_pcm_sframes_t wrote = stm->bufframes; ++ struct cubeb_stream * mainstm = stm->other_stream ? stm->other_stream : stm; ++ void * other_buffer = stm->other_stream ? stm->other_stream->buffer + stm->other_stream->bufframes : NULL; ++ ++ /* Correct write size to the other stream available space */ ++ if (stm->other_stream && wrote > (snd_pcm_sframes_t) (stm->other_stream->buffer_size - stm->other_stream->bufframes)) { ++ wrote = stm->other_stream->buffer_size - stm->other_stream->bufframes; ++ } ++ + pthread_mutex_unlock(&stm->mutex); +- return RUNNING; ++ wrote = stm->data_callback(mainstm, stm->user_ptr, stm->buffer, other_buffer, wrote); ++ pthread_mutex_lock(&stm->mutex); ++ ++ if (wrote < 0) { ++ avail = wrote; // the error handler below will recover us ++ } else { ++ stream_buffer_decrement(stm, wrote); ++ ++ if (stm->other_stream) { ++ stm->other_stream->bufframes += wrote; ++ } ++ } + } + +- p = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, avail)); +- assert(p); ++ /* Playback: Don't have enough data? Let's ask for more. */ ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && avail > (snd_pcm_sframes_t) stm->bufframes && ++ (!stm->other_stream || stm->other_stream->bufframes > 0)) { ++ long got = avail - stm->bufframes; ++ void * other_buffer = stm->other_stream ? stm->other_stream->buffer : NULL; ++ char * buftail = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes); ++ ++ /* Correct read size to the other stream available frames */ ++ if (stm->other_stream && got > (snd_pcm_sframes_t) stm->other_stream->bufframes) { ++ got = stm->other_stream->bufframes; ++ } + +- pthread_mutex_unlock(&stm->mutex); +- got = stm->data_callback(stm, stm->user_ptr, NULL, p, avail); +- pthread_mutex_lock(&stm->mutex); +- if (got < 0) { + pthread_mutex_unlock(&stm->mutex); +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); +- free(p); +- return ERROR; ++ got = stm->data_callback(stm, stm->user_ptr, other_buffer, buftail, got); ++ pthread_mutex_lock(&stm->mutex); ++ ++ if (got < 0) { ++ avail = got; // the error handler below will recover us ++ } else { ++ stm->bufframes += got; ++ ++ if (stm->other_stream) { ++ stream_buffer_decrement(stm->other_stream, got); ++ } ++ } + } +- if (got > 0) { ++ ++ /* Playback: Still don't have enough data? Add some silence. */ ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && avail > (snd_pcm_sframes_t) stm->bufframes) { ++ long drain_frames = avail - stm->bufframes; ++ double drain_time = (double) drain_frames / stm->params.rate; ++ ++ char * buftail = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes); ++ memset(buftail, 0, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, drain_frames)); ++ stm->bufframes = avail; ++ ++ /* Mark as draining, unless we're waiting for capture */ ++ if (!stm->other_stream || stm->other_stream->bufframes > 0) { ++ set_timeout(&stm->drain_timeout, drain_time * 1000); ++ ++ draining = 1; ++ } ++ } ++ ++ /* Playback: Have enough data and no errors. Let's write it out. */ ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && avail > 0) { + snd_pcm_sframes_t wrote; + + if (stm->params.format == CUBEB_SAMPLE_FLOAT32NE) { +- float * b = (float *) p; +- for (uint32_t i = 0; i < got * stm->params.channels; i++) { ++ float * b = (float *) stm->buffer; ++ for (uint32_t i = 0; i < avail * stm->params.channels; i++) { + b[i] *= stm->volume; + } + } else { +- short * b = (short *) p; +- for (uint32_t i = 0; i < got * stm->params.channels; i++) { ++ short * b = (short *) stm->buffer; ++ for (uint32_t i = 0; i < avail * stm->params.channels; i++) { + b[i] *= stm->volume; + } + } +- wrote = snd_pcm_writei(stm->pcm, p, got); ++ ++ wrote = WRAP(snd_pcm_writei)(stm->pcm, stm->buffer, avail); + if (wrote < 0) { +- snd_pcm_recover(stm->pcm, wrote, 1); +- wrote = snd_pcm_writei(stm->pcm, p, got); +- } +- if (wrote < 0 || wrote != got) { +- /* Recovery failed, somehow. */ +- pthread_mutex_unlock(&stm->mutex); +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); +- return ERROR; ++ avail = wrote; // the error handler below will recover us ++ } else { ++ stream_buffer_decrement(stm, wrote); ++ ++ stm->stream_position += wrote; ++ gettimeofday(&stm->last_activity, NULL); + } +- stm->write_position += wrote; +- gettimeofday(&stm->last_activity, NULL); + } +- if (got != avail) { +- long buffer_fill = stm->buffer_size - (avail - got); +- double buffer_time = (double) buffer_fill / stm->params.rate; + +- /* Fill the remaining buffer with silence to guarantee one full period +- has been written. */ +- snd_pcm_writei(stm->pcm, (char *) p + got, avail - got); ++ /* Got some error? Let's try to recover the stream. */ ++ if (avail < 0) { ++ avail = WRAP(snd_pcm_recover)(stm->pcm, avail, 0); + +- set_timeout(&stm->drain_timeout, buffer_time * 1000); ++ /* Capture pcm must be started after initial setup/recover */ ++ if (avail >= 0 && ++ stm->stream_type == SND_PCM_STREAM_CAPTURE && ++ WRAP(snd_pcm_state)(stm->pcm) == SND_PCM_STATE_PREPARED) { ++ avail = WRAP(snd_pcm_start)(stm->pcm); ++ } ++ } + +- draining = 1; ++ /* Failed to recover, this stream must be broken. */ ++ if (avail < 0) { ++ pthread_mutex_unlock(&stm->mutex); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ return ERROR; + } + +- free(p); + pthread_mutex_unlock(&stm->mutex); + return draining ? DRAINING : RUNNING; + } +@@ -395,7 +536,7 @@ alsa_run(cubeb * ctx) + if (stm && stm->state == RUNNING && stm->fds && any_revents(stm->fds, stm->nfds)) { + alsa_set_stream_state(stm, PROCESSING); + pthread_mutex_unlock(&ctx->mutex); +- state = alsa_refill_stream(stm); ++ state = alsa_process_stream(stm); + pthread_mutex_lock(&ctx->mutex); + alsa_set_stream_state(stm, state); + } +@@ -445,26 +586,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) + + slave_def = NULL; + +- r = snd_config_search(root_pcm, "slave", &slave_pcm); ++ r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm); + if (r < 0) { + return NULL; + } + +- r = snd_config_get_string(slave_pcm, &string); ++ r = WRAP(snd_config_get_string)(slave_pcm, &string); + if (r >= 0) { +- r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def); ++ r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def); + if (r < 0) { + return NULL; + } + } + + do { +- r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm); ++ r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm); + if (r < 0) { + break; + } + +- r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string); ++ r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string); + if (r < 0) { + break; + } +@@ -473,7 +614,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) + if (r < 0 || r > (int) sizeof(node_name)) { + break; + } +- r = snd_config_search(lconf, node_name, &pcm); ++ r = WRAP(snd_config_search)(lconf, node_name, &pcm); + if (r < 0) { + break; + } +@@ -482,7 +623,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) + } while (0); + + if (slave_def) { +- snd_config_delete(slave_def); ++ WRAP(snd_config_delete)(slave_def); + } + + return NULL; +@@ -505,22 +646,22 @@ init_local_config_with_workaround(char const * pcm_name) + + lconf = NULL; + +- if (snd_config == NULL) { ++ if (*WRAP(snd_config) == NULL) { + return NULL; + } + +- r = snd_config_copy(&lconf, snd_config); ++ r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config)); + if (r < 0) { + return NULL; + } + + do { +- r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node); ++ r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node); + if (r < 0) { + break; + } + +- r = snd_config_get_id(pcm_node, &string); ++ r = WRAP(snd_config_get_id)(pcm_node, &string); + if (r < 0) { + break; + } +@@ -529,7 +670,7 @@ init_local_config_with_workaround(char const * pcm_name) + if (r < 0 || r > (int) sizeof(node_name)) { + break; + } +- r = snd_config_search(lconf, node_name, &pcm_node); ++ r = WRAP(snd_config_search)(lconf, node_name, &pcm_node); + if (r < 0) { + break; + } +@@ -540,12 +681,12 @@ init_local_config_with_workaround(char const * pcm_name) + } + + /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */ +- r = snd_config_search(pcm_node, "type", &node); ++ r = WRAP(snd_config_search)(pcm_node, "type", &node); + if (r < 0) { + break; + } + +- r = snd_config_get_string(node, &string); ++ r = WRAP(snd_config_get_string)(node, &string); + if (r < 0) { + break; + } +@@ -556,18 +697,18 @@ init_local_config_with_workaround(char const * pcm_name) + + /* Don't clobber an explicit existing handle_underrun value, set it only + if it doesn't already exist. */ +- r = snd_config_search(pcm_node, "handle_underrun", &node); ++ r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node); + if (r != -ENOENT) { + break; + } + + /* Disable pcm_pulse's asynchronous underrun handling. */ +- r = snd_config_imake_integer(&node, "handle_underrun", 0); ++ r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0); + if (r < 0) { + break; + } + +- r = snd_config_add(pcm_node, node); ++ r = WRAP(snd_config_add)(pcm_node, node); + if (r < 0) { + break; + } +@@ -575,21 +716,21 @@ init_local_config_with_workaround(char const * pcm_name) + return lconf; + } while (0); + +- snd_config_delete(lconf); ++ WRAP(snd_config_delete)(lconf); + + return NULL; + } + + static int +-alsa_locked_pcm_open(snd_pcm_t ** pcm, snd_pcm_stream_t stream, snd_config_t * local_config) ++alsa_locked_pcm_open(snd_pcm_t ** pcm, char const * pcm_name, snd_pcm_stream_t stream, snd_config_t * local_config) + { + int r; + + pthread_mutex_lock(&cubeb_alsa_mutex); + if (local_config) { +- r = snd_pcm_open_lconf(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK, local_config); ++ r = WRAP(snd_pcm_open_lconf)(pcm, pcm_name, stream, SND_PCM_NONBLOCK, local_config); + } else { +- r = snd_pcm_open(pcm, CUBEB_ALSA_PCM_NAME, stream, SND_PCM_NONBLOCK); ++ r = WRAP(snd_pcm_open)(pcm, pcm_name, stream, SND_PCM_NONBLOCK); + } + pthread_mutex_unlock(&cubeb_alsa_mutex); + +@@ -602,7 +743,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) + int r; + + pthread_mutex_lock(&cubeb_alsa_mutex); +- r = snd_pcm_close(pcm); ++ r = WRAP(snd_pcm_close)(pcm); + pthread_mutex_unlock(&cubeb_alsa_mutex); + + return r; +@@ -658,6 +799,7 @@ silent_error_handler(char const * file, int line, char const * function, + alsa_init(cubeb ** context, char const * context_name) + { + (void)context_name; ++ void * libasound = NULL; + cubeb * ctx; + int r; + int i; +@@ -668,9 +810,30 @@ alsa_init(cubeb ** context, char const * context_name) + assert(context); + *context = NULL; + ++#ifndef DISABLE_LIBASOUND_DLOPEN ++ libasound = dlopen("libasound.so.2", RTLD_LAZY); ++ if (!libasound) { ++ libasound = dlopen("libasound.so", RTLD_LAZY); ++ if (!libasound) { ++ return CUBEB_ERROR; ++ } ++ } ++ ++#define LOAD(x) { \ ++ cubeb_##x = dlsym(libasound, #x); \ ++ if (!cubeb_##x) { \ ++ dlclose(libasound); \ ++ return CUBEB_ERROR; \ ++ } \ ++ } ++ ++ LIBASOUND_API_VISIT(LOAD); ++#undef LOAD ++#endif ++ + pthread_mutex_lock(&cubeb_alsa_mutex); + if (!cubeb_alsa_error_handler_set) { +- snd_lib_error_set_handler(silent_error_handler); ++ WRAP(snd_lib_error_set_handler)(silent_error_handler); + cubeb_alsa_error_handler_set = 1; + } + pthread_mutex_unlock(&cubeb_alsa_mutex); +@@ -679,6 +842,7 @@ alsa_init(cubeb ** context, char const * context_name) + assert(ctx); + + ctx->ops = &alsa_ops; ++ ctx->libasound = libasound; + + r = pthread_mutex_init(&ctx->mutex, NULL); + assert(r == 0); +@@ -712,7 +876,7 @@ alsa_init(cubeb ** context, char const * context_name) + + /* Open a dummy PCM to force the configuration space to be evaluated so that + init_local_config_with_workaround can find and modify the default node. */ +- r = alsa_locked_pcm_open(&dummy, SND_PCM_STREAM_PLAYBACK, NULL); ++ r = alsa_locked_pcm_open(&dummy, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, NULL); + if (r >= 0) { + alsa_locked_pcm_close(dummy); + } +@@ -722,12 +886,12 @@ alsa_init(cubeb ** context, char const * context_name) + pthread_mutex_unlock(&cubeb_alsa_mutex); + if (ctx->local_config) { + ctx->is_pa = 1; +- r = alsa_locked_pcm_open(&dummy, SND_PCM_STREAM_PLAYBACK, ctx->local_config); ++ r = alsa_locked_pcm_open(&dummy, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, ctx->local_config); + /* If we got a local_config, we found a PA PCM. If opening a PCM with that + config fails with EINVAL, the PA PCM is too old for this workaround. */ + if (r == -EINVAL) { + pthread_mutex_lock(&cubeb_alsa_mutex); +- snd_config_delete(ctx->local_config); ++ WRAP(snd_config_delete)(ctx->local_config); + pthread_mutex_unlock(&cubeb_alsa_mutex); + ctx->local_config = NULL; + } else if (r >= 0) { +@@ -769,24 +933,28 @@ alsa_destroy(cubeb * ctx) + + if (ctx->local_config) { + pthread_mutex_lock(&cubeb_alsa_mutex); +- snd_config_delete(ctx->local_config); ++ WRAP(snd_config_delete)(ctx->local_config); + pthread_mutex_unlock(&cubeb_alsa_mutex); + } + ++ if (ctx->libasound) { ++ dlclose(ctx->libasound); ++ } ++ + free(ctx); + } + + static void alsa_stream_destroy(cubeb_stream * stm); + + static int +-alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, +- cubeb_devid input_device, +- cubeb_stream_params * input_stream_params, +- cubeb_devid output_device, +- cubeb_stream_params * output_stream_params, +- unsigned int latency_frames, +- cubeb_data_callback data_callback, cubeb_state_callback state_callback, +- void * user_ptr) ++alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, ++ snd_pcm_stream_t stream_type, ++ cubeb_devid deviceid, ++ cubeb_stream_params * stream_params, ++ unsigned int latency_frames, ++ cubeb_data_callback data_callback, ++ cubeb_state_callback state_callback, ++ void * user_ptr) + { + (void)stream_name; + cubeb_stream * stm; +@@ -794,23 +962,17 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + snd_pcm_format_t format; + snd_pcm_uframes_t period_size; + int latency_us = 0; +- ++ char const * pcm_name = deviceid ? (char const *) deviceid : CUBEB_ALSA_PCM_NAME; + + assert(ctx && stream); + +- if (input_stream_params) { +- /* Capture support not yet implemented. */ +- return CUBEB_ERROR_NOT_SUPPORTED; +- } ++ *stream = NULL; + +- if (input_device || output_device) { +- /* Device selection not yet implemented. */ +- return CUBEB_ERROR_DEVICE_UNAVAILABLE; ++ if (stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ return CUBEB_ERROR_NOT_SUPPORTED; + } + +- *stream = NULL; +- +- switch (output_stream_params->format) { ++ switch (stream_params->format) { + case CUBEB_SAMPLE_S16LE: + format = SND_PCM_FORMAT_S16_LE; + break; +@@ -842,20 +1004,27 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + stm->data_callback = data_callback; + stm->state_callback = state_callback; + stm->user_ptr = user_ptr; +- stm->params = *output_stream_params; ++ stm->params = *stream_params; + stm->state = INACTIVE; + stm->volume = 1.0; ++ stm->buffer = NULL; ++ stm->bufframes = 0; ++ stm->stream_type = stream_type; ++ stm->other_stream = NULL; + + r = pthread_mutex_init(&stm->mutex, NULL); + assert(r == 0); + +- r = alsa_locked_pcm_open(&stm->pcm, SND_PCM_STREAM_PLAYBACK, ctx->local_config); ++ r = pthread_cond_init(&stm->cond, NULL); ++ assert(r == 0); ++ ++ r = alsa_locked_pcm_open(&stm->pcm, pcm_name, stm->stream_type, ctx->local_config); + if (r < 0) { + alsa_stream_destroy(stm); + return CUBEB_ERROR; + } + +- r = snd_pcm_nonblock(stm->pcm, 1); ++ r = WRAP(snd_pcm_nonblock)(stm->pcm, 1); + assert(r == 0); + + latency_us = latency_frames * 1e6 / stm->params.rate; +@@ -868,7 +1037,7 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + latency_us = latency_us < min_latency ? min_latency: latency_us; + } + +- r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, ++ r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, + stm->params.channels, stm->params.rate, 1, + latency_us); + if (r < 0) { +@@ -876,20 +1045,22 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + return CUBEB_ERROR_INVALID_FORMAT; + } + +- r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &period_size); ++ r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &period_size); + assert(r == 0); + +- stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm); ++ /* Double internal buffer size to have enough space when waiting for the other side of duplex connection */ ++ stm->buffer_size *= 2; ++ stm->buffer = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->buffer_size)); ++ assert(stm->buffer); ++ ++ stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm); + assert(stm->nfds > 0); + + stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd)); + assert(stm->saved_fds); +- r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds); ++ r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds); + assert((nfds_t) r == stm->nfds); + +- r = pthread_cond_init(&stm->cond, NULL); +- assert(r == 0); +- + if (alsa_register_stream(ctx, stm) != 0) { + alsa_stream_destroy(stm); + return CUBEB_ERROR; +@@ -900,6 +1071,45 @@ alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, + return CUBEB_OK; + } + ++static int ++alsa_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, ++ cubeb_devid input_device, ++ cubeb_stream_params * input_stream_params, ++ cubeb_devid output_device, ++ cubeb_stream_params * output_stream_params, ++ unsigned int latency_frames, ++ cubeb_data_callback data_callback, cubeb_state_callback state_callback, ++ void * user_ptr) ++{ ++ int result = CUBEB_OK; ++ cubeb_stream * instm = NULL, * outstm = NULL; ++ ++ if (result == CUBEB_OK && input_stream_params) { ++ result = alsa_stream_init_single(ctx, &instm, stream_name, SND_PCM_STREAM_CAPTURE, ++ input_device, input_stream_params, latency_frames, ++ data_callback, state_callback, user_ptr); ++ } ++ ++ if (result == CUBEB_OK && output_stream_params) { ++ result = alsa_stream_init_single(ctx, &outstm, stream_name, SND_PCM_STREAM_PLAYBACK, ++ output_device, output_stream_params, latency_frames, ++ data_callback, state_callback, user_ptr); ++ } ++ ++ if (result == CUBEB_OK && input_stream_params && output_stream_params) { ++ instm->other_stream = outstm; ++ outstm->other_stream = instm; ++ } ++ ++ if (result != CUBEB_OK && instm) { ++ alsa_stream_destroy(instm); ++ } ++ ++ *stream = outstm ? outstm : instm; ++ ++ return result; ++} ++ + static void + alsa_stream_destroy(cubeb_stream * stm) + { +@@ -912,10 +1122,15 @@ alsa_stream_destroy(cubeb_stream * stm) + + ctx = stm->context; + ++ if (stm->other_stream) { ++ stm->other_stream->other_stream = NULL; // to stop infinite recursion ++ alsa_stream_destroy(stm->other_stream); ++ } ++ + pthread_mutex_lock(&stm->mutex); + if (stm->pcm) { + if (stm->state == DRAINING) { +- snd_pcm_drain(stm->pcm); ++ WRAP(snd_pcm_drain)(stm->pcm); + } + alsa_locked_pcm_close(stm->pcm); + stm->pcm = NULL; +@@ -934,6 +1149,8 @@ alsa_stream_destroy(cubeb_stream * stm) + ctx->active_streams -= 1; + pthread_mutex_unlock(&ctx->mutex); + ++ free(stm->buffer); ++ + free(stm); + } + +@@ -957,12 +1174,14 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + return CUBEB_ERROR; + } + +- r = snd_pcm_hw_params_any(stm->pcm, hw_params); ++ assert(stm); ++ ++ r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); + if (r < 0) { + return CUBEB_ERROR; + } + +- r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); ++ r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); + if (r < 0) { + return CUBEB_ERROR; + } +@@ -983,34 +1202,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { + + /* get a pcm, disabling resampling, so we get a rate the + * hardware/dmix/pulse/etc. supports. */ +- r = snd_pcm_open(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, SND_PCM_NO_AUTO_RESAMPLE); ++ r = WRAP(snd_pcm_open)(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, SND_PCM_NO_AUTO_RESAMPLE); + if (r < 0) { + return CUBEB_ERROR; + } + +- r = snd_pcm_hw_params_any(pcm, hw_params); ++ r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); + if (r < 0) { +- snd_pcm_close(pcm); ++ WRAP(snd_pcm_close)(pcm); + return CUBEB_ERROR; + } + +- r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); ++ r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); + if (r >= 0) { + /* There is a default rate: use it. */ +- snd_pcm_close(pcm); ++ WRAP(snd_pcm_close)(pcm); + return CUBEB_OK; + } + + /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ + *rate = 44100; + +- r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); ++ r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); + if (r < 0) { +- snd_pcm_close(pcm); ++ WRAP(snd_pcm_close)(pcm); + return CUBEB_ERROR; + } + +- snd_pcm_close(pcm); ++ WRAP(snd_pcm_close)(pcm); + + return CUBEB_OK; + } +@@ -1034,8 +1253,19 @@ alsa_stream_start(cubeb_stream * stm) + assert(stm); + ctx = stm->context; + ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && stm->other_stream) { ++ int r = alsa_stream_start(stm->other_stream); ++ if (r != CUBEB_OK) ++ return r; ++ } ++ + pthread_mutex_lock(&stm->mutex); +- snd_pcm_pause(stm->pcm, 0); ++ /* Capture pcm must be started after initial setup/recover */ ++ if (stm->stream_type == SND_PCM_STREAM_CAPTURE && ++ WRAP(snd_pcm_state)(stm->pcm) == SND_PCM_STATE_PREPARED) { ++ WRAP(snd_pcm_start)(stm->pcm); ++ } ++ WRAP(snd_pcm_pause)(stm->pcm, 0); + gettimeofday(&stm->last_activity, NULL); + pthread_mutex_unlock(&stm->mutex); + +@@ -1059,6 +1289,12 @@ alsa_stream_stop(cubeb_stream * stm) + assert(stm); + ctx = stm->context; + ++ if (stm->stream_type == SND_PCM_STREAM_PLAYBACK && stm->other_stream) { ++ int r = alsa_stream_stop(stm->other_stream); ++ if (r != CUBEB_OK) ++ return r; ++ } ++ + pthread_mutex_lock(&ctx->mutex); + while (stm->state == PROCESSING) { + r = pthread_cond_wait(&stm->cond, &ctx->mutex); +@@ -1069,7 +1305,7 @@ alsa_stream_stop(cubeb_stream * stm) + pthread_mutex_unlock(&ctx->mutex); + + pthread_mutex_lock(&stm->mutex); +- snd_pcm_pause(stm->pcm, 1); ++ WRAP(snd_pcm_pause)(stm->pcm, 1); + pthread_mutex_unlock(&stm->mutex); + + return CUBEB_OK; +@@ -1085,8 +1321,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) + pthread_mutex_lock(&stm->mutex); + + delay = -1; +- if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || +- snd_pcm_delay(stm->pcm, &delay) != 0) { ++ if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || ++ WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { + *position = stm->last_position; + pthread_mutex_unlock(&stm->mutex); + return CUBEB_OK; +@@ -1095,8 +1331,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) + assert(delay >= 0); + + *position = 0; +- if (stm->write_position >= (snd_pcm_uframes_t) delay) { +- *position = stm->write_position - delay; ++ if (stm->stream_position >= (snd_pcm_uframes_t) delay) { ++ *position = stm->stream_position - delay; + } + + stm->last_position = *position; +@@ -1111,7 +1347,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) + snd_pcm_sframes_t delay; + /* This function returns the delay in frames until a frame written using + snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ +- if (snd_pcm_delay(stm->pcm, &delay)) { ++ if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { + return CUBEB_ERROR; + } + +@@ -1131,22 +1367,84 @@ alsa_stream_set_volume(cubeb_stream * stm, float volume) + return CUBEB_OK; + } + ++static int ++alsa_enumerate_devices(cubeb * context, cubeb_device_type type, ++ cubeb_device_collection * collection) ++{ ++ cubeb_device_info* device = NULL; ++ ++ if (!context) ++ return CUBEB_ERROR; ++ ++ uint32_t rate, max_channels; ++ int r; ++ ++ r = alsa_get_preferred_sample_rate(context, &rate); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR; ++ } ++ ++ r = alsa_get_max_channel_count(context, &max_channels); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR; ++ } ++ ++ char const * a_name = "default"; ++ device = (cubeb_device_info *) calloc(1, sizeof(cubeb_device_info)); ++ assert(device); ++ if (!device) ++ return CUBEB_ERROR; ++ ++ device->device_id = a_name; ++ device->devid = (cubeb_devid) device->device_id; ++ device->friendly_name = a_name; ++ device->group_id = a_name; ++ device->vendor_name = a_name; ++ device->type = type; ++ device->state = CUBEB_DEVICE_STATE_ENABLED; ++ device->preferred = CUBEB_DEVICE_PREF_ALL; ++ device->format = CUBEB_DEVICE_FMT_S16NE; ++ device->default_format = CUBEB_DEVICE_FMT_S16NE; ++ device->max_channels = max_channels; ++ device->min_rate = rate; ++ device->max_rate = rate; ++ device->default_rate = rate; ++ device->latency_lo = 0; ++ device->latency_hi = 0; ++ ++ collection->device = device; ++ collection->count = 1; ++ ++ return CUBEB_OK; ++} ++ ++static int ++alsa_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection) ++{ ++ assert(collection->count == 1); ++ (void) context; ++ free(collection->device); ++ return CUBEB_OK; ++} ++ + static struct cubeb_ops const alsa_ops = { + .init = alsa_init, + .get_backend_id = alsa_get_backend_id, + .get_max_channel_count = alsa_get_max_channel_count, + .get_min_latency = alsa_get_min_latency, + .get_preferred_sample_rate = alsa_get_preferred_sample_rate, +- .enumerate_devices = NULL, ++ .enumerate_devices = alsa_enumerate_devices, ++ .device_collection_destroy = alsa_device_collection_destroy, + .destroy = alsa_destroy, + .stream_init = alsa_stream_init, + .stream_destroy = alsa_stream_destroy, + .stream_start = alsa_stream_start, + .stream_stop = alsa_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = alsa_stream_get_position, + .stream_get_latency = alsa_stream_get_latency, + .stream_set_volume = alsa_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_array_queue.h b/media/libcubeb/src/cubeb_array_queue.h +new file mode 100644 +index 000000000..a8ea4cd17 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_array_queue.h +@@ -0,0 +1,97 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#ifndef CUBEB_ARRAY_QUEUE_H ++#define CUBEB_ARRAY_QUEUE_H ++ ++#include ++#include ++#include ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++typedef struct ++{ ++ void ** buf; ++ size_t num; ++ size_t writePos; ++ size_t readPos; ++ pthread_mutex_t mutex; ++} array_queue; ++ ++array_queue * array_queue_create(size_t num) ++{ ++ assert(num != 0); ++ array_queue * new_queue = (array_queue*)calloc(1, sizeof(array_queue)); ++ new_queue->buf = (void **)calloc(1, sizeof(void *) * num); ++ new_queue->readPos = 0; ++ new_queue->writePos = 0; ++ new_queue->num = num; ++ ++ pthread_mutex_init(&new_queue->mutex, NULL); ++ ++ return new_queue; ++} ++ ++void array_queue_destroy(array_queue * aq) ++{ ++ assert(aq); ++ ++ free(aq->buf); ++ pthread_mutex_destroy(&aq->mutex); ++ free(aq); ++} ++ ++int array_queue_push(array_queue * aq, void * item) ++{ ++ assert(item); ++ ++ pthread_mutex_lock(&aq->mutex); ++ int ret = -1; ++ if(aq->buf[aq->writePos % aq->num] == NULL) ++ { ++ aq->buf[aq->writePos % aq->num] = item; ++ aq->writePos = (aq->writePos + 1) % aq->num; ++ ret = 0; ++ } ++ // else queue is full ++ pthread_mutex_unlock(&aq->mutex); ++ return ret; ++} ++ ++void* array_queue_pop(array_queue * aq) ++{ ++ pthread_mutex_lock(&aq->mutex); ++ void * value = aq->buf[aq->readPos % aq->num]; ++ if(value) ++ { ++ aq->buf[aq->readPos % aq->num] = NULL; ++ aq->readPos = (aq->readPos + 1) % aq->num; ++ } ++ pthread_mutex_unlock(&aq->mutex); ++ return value; ++} ++ ++size_t array_queue_get_size(array_queue * aq) ++{ ++ pthread_mutex_lock(&aq->mutex); ++ ssize_t r = aq->writePos - aq->readPos; ++ if (r < 0) { ++ r = aq->num + r; ++ assert(r >= 0); ++ } ++ pthread_mutex_unlock(&aq->mutex); ++ return (size_t)r; ++} ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif //CUBE_ARRAY_QUEUE_H +diff --git a/media/libcubeb/src/cubeb_assert.h b/media/libcubeb/src/cubeb_assert.h +new file mode 100644 +index 000000000..00d48d8ec +--- /dev/null ++++ b/media/libcubeb/src/cubeb_assert.h +@@ -0,0 +1,17 @@ ++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* vim:set ts=2 sw=2 sts=2 et cindent: */ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef CUBEB_ASSERT ++#define CUBEB_ASSERT ++ ++#include ++#include ++#include ++ ++/* Forward fatal asserts to MOZ_RELEASE_ASSERT when built inside Gecko. */ ++#define XASSERT(expr) MOZ_RELEASE_ASSERT(expr) ++ ++#endif +diff --git a/media/libcubeb/src/cubeb_audiotrack.c b/media/libcubeb/src/cubeb_audiotrack.c +index fe2603405..22f1fe0bc 100644 +--- a/media/libcubeb/src/cubeb_audiotrack.c ++++ b/media/libcubeb/src/cubeb_audiotrack.c +@@ -13,7 +13,7 @@ + #include + #include + #include +-#include "android/log.h" ++#include + + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" +@@ -75,12 +75,14 @@ struct cubeb { + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + cubeb_stream_params params; + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; + void * instance; +- void * user_ptr; + /* Number of frames that have been passed to the AudioTrack callback */ + long unsigned written; + int draining; +@@ -145,9 +147,9 @@ audiotrack_get_min_frame_count(cubeb * ctx, cubeb_stream_params * params, int * + status_t status; + /* Recent Android have a getMinFrameCount method. */ + if (!audiotrack_version_is_gingerbread(ctx)) { +- status = ctx->klass.get_min_frame_count(min_frame_count, params->stream_type, params->rate); ++ status = ctx->klass.get_min_frame_count(min_frame_count, AUDIO_STREAM_TYPE_MUSIC, params->rate); + } else { +- status = ctx->klass.get_min_frame_count_gingerbread(min_frame_count, params->stream_type, params->rate); ++ status = ctx->klass.get_min_frame_count_gingerbread(min_frame_count, AUDIO_STREAM_TYPE_MUSIC, params->rate); + } + if (status != 0) { + ALOG("error getting the min frame count"); +@@ -325,7 +327,7 @@ audiotrack_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_ + channels = stm->params.channels == 2 ? AUDIO_CHANNEL_OUT_STEREO_ICS : AUDIO_CHANNEL_OUT_MONO_ICS; + } + +- ctx->klass.ctor(stm->instance, stm->params.stream_type, stm->params.rate, ++ ctx->klass.ctor(stm->instance, AUDIO_STREAM_TYPE_MUSIC, stm->params.rate, + AUDIO_FORMAT_PCM_16_BIT, channels, min_frame_count, 0, + audiotrack_refill, stm, 0, 0); + +@@ -422,15 +424,16 @@ static struct cubeb_ops const audiotrack_ops = { + .get_min_latency = audiotrack_get_min_latency, + .get_preferred_sample_rate = audiotrack_get_preferred_sample_rate, + .enumerate_devices = NULL, ++ .device_collection_destroy = NULL, + .destroy = audiotrack_destroy, + .stream_init = audiotrack_stream_init, + .stream_destroy = audiotrack_stream_destroy, + .stream_start = audiotrack_stream_start, + .stream_stop = audiotrack_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = audiotrack_stream_get_position, + .stream_get_latency = audiotrack_stream_get_latency, + .stream_set_volume = audiotrack_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_audiounit.cpp b/media/libcubeb/src/cubeb_audiounit.cpp +index 9483c2795..e0c8fc696 100644 +--- a/media/libcubeb/src/cubeb_audiounit.cpp ++++ b/media/libcubeb/src/cubeb_audiounit.cpp +@@ -22,200 +22,243 @@ + #include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" +-#include "cubeb_panner.h" ++#include "cubeb_mixer.h" + #if !TARGET_OS_IPHONE + #include "cubeb_osx_run_loop.h" + #endif + #include "cubeb_resampler.h" + #include "cubeb_ring_array.h" +-#include "cubeb_utils.h" + #include + #include ++#include ++#include ++#include ++#include + +-#if !defined(kCFCoreFoundationVersionNumber10_7) +-/* From CoreFoundation CFBase.h */ +-#define kCFCoreFoundationVersionNumber10_7 635.00 +-#endif +- +-#if !TARGET_OS_IPHONE && MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +-#define AudioComponent Component +-#define AudioComponentDescription ComponentDescription +-#define AudioComponentFindNext FindNextComponent +-#define AudioComponentInstanceNew OpenAComponent +-#define AudioComponentInstanceDispose CloseComponent +-#endif ++using namespace std; + + #if MAC_OS_X_VERSION_MIN_REQUIRED < 101000 +-typedef UInt32 AudioFormatFlags; ++typedef UInt32 AudioFormatFlags; + #endif + +-#define CUBEB_STREAM_MAX 8 +- + #define AU_OUT_BUS 0 + #define AU_IN_BUS 1 + +-#define PRINT_ERROR_CODE(str, r) do { \ +- LOG("System call failed: %s (rv: %d)", str, r); \ +-} while(0) +- + const char * DISPATCH_QUEUE_LABEL = "org.mozilla.cubeb"; ++const char * PRIVATE_AGGREGATE_DEVICE_NAME = "CubebAggregateDevice"; ++ ++#ifdef ALOGV ++#undef ALOGV ++#endif ++#define ALOGV(msg, ...) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{LOGV(msg, ##__VA_ARGS__);}) ++ ++#ifdef ALOG ++#undef ALOG ++#endif ++#define ALOG(msg, ...) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{LOG(msg, ##__VA_ARGS__);}) + + /* Testing empirically, some headsets report a minimal latency that is very + * low, but this does not work in practice. Lie and say the minimum is 256 + * frames. */ +-const uint32_t SAFE_MIN_LATENCY_FRAMES = 256; ++const uint32_t SAFE_MIN_LATENCY_FRAMES = 128; + const uint32_t SAFE_MAX_LATENCY_FRAMES = 512; + ++const AudioObjectPropertyAddress DEFAULT_INPUT_DEVICE_PROPERTY_ADDRESS = { ++ kAudioHardwarePropertyDefaultInputDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress DEFAULT_OUTPUT_DEVICE_PROPERTY_ADDRESS = { ++ kAudioHardwarePropertyDefaultOutputDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress DEVICE_IS_ALIVE_PROPERTY_ADDRESS = { ++ kAudioDevicePropertyDeviceIsAlive, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress DEVICES_PROPERTY_ADDRESS = { ++ kAudioHardwarePropertyDevices, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress INPUT_DATA_SOURCE_PROPERTY_ADDRESS = { ++ kAudioDevicePropertyDataSource, ++ kAudioDevicePropertyScopeInput, ++ kAudioObjectPropertyElementMaster ++}; ++ ++const AudioObjectPropertyAddress OUTPUT_DATA_SOURCE_PROPERTY_ADDRESS = { ++ kAudioDevicePropertyDataSource, ++ kAudioDevicePropertyScopeOutput, ++ kAudioObjectPropertyElementMaster ++}; ++ ++typedef uint32_t device_flags_value; ++ ++enum device_flags { ++ DEV_UNKNOWN = 0x00, /* Unknown */ ++ DEV_INPUT = 0x01, /* Record device like mic */ ++ DEV_OUTPUT = 0x02, /* Playback device like speakers */ ++ DEV_SYSTEM_DEFAULT = 0x04, /* System default device */ ++ DEV_SELECTED_DEFAULT = 0x08, /* User selected to use the system default device */ ++}; ++ + void audiounit_stream_stop_internal(cubeb_stream * stm); +-void audiounit_stream_start_internal(cubeb_stream * stm); ++static int audiounit_stream_start_internal(cubeb_stream * stm); + static void audiounit_close_stream(cubeb_stream *stm); + static int audiounit_setup_stream(cubeb_stream *stm); ++static vector ++audiounit_get_devices_of_type(cubeb_device_type devtype); ++static UInt32 audiounit_get_device_presentation_latency(AudioObjectID devid, AudioObjectPropertyScope scope); ++ ++#if !TARGET_OS_IPHONE ++static AudioObjectID audiounit_get_default_device_id(cubeb_device_type type); ++static int audiounit_uninstall_device_changed_callback(cubeb_stream * stm); ++static int audiounit_uninstall_system_changed_callback(cubeb_stream * stm); ++static void audiounit_reinit_stream_async(cubeb_stream * stm, device_flags_value flags); ++#endif + + extern cubeb_ops const audiounit_ops; + + struct cubeb { +- cubeb_ops const * ops; ++ cubeb_ops const * ops = &audiounit_ops; + owned_critical_section mutex; +- std::atomic active_streams; ++ int active_streams = 0; + uint32_t global_latency_frames = 0; +- int limit_streams; +- cubeb_device_collection_changed_callback collection_changed_callback; +- void * collection_changed_user_ptr; +- /* Differentiate input from output devices. */ +- cubeb_device_type collection_changed_devtype; +- uint32_t devtype_device_count; +- AudioObjectID * devtype_device_array; +- // The queue is asynchronously deallocated once all references to it are released ++ cubeb_device_collection_changed_callback input_collection_changed_callback = nullptr; ++ void * input_collection_changed_user_ptr = nullptr; ++ cubeb_device_collection_changed_callback output_collection_changed_callback = nullptr; ++ void * output_collection_changed_user_ptr = nullptr; ++ // Store list of devices to detect changes ++ vector input_device_array; ++ vector output_device_array; ++ // The queue should be released when it’s no longer needed. + dispatch_queue_t serial_queue = dispatch_queue_create(DISPATCH_QUEUE_LABEL, DISPATCH_QUEUE_SERIAL); ++ // Current used channel layout ++ atomic layout{ CUBEB_LAYOUT_UNDEFINED }; ++ uint32_t channels = 0; + }; + +-class auto_array_wrapper ++static unique_ptr ++make_sized_audio_channel_layout(size_t sz) + { +-public: +- explicit auto_array_wrapper(auto_array * ar) +- : float_ar(ar) +- , short_ar(nullptr) +- {assert((float_ar && !short_ar) || (!float_ar && short_ar));} +- +- explicit auto_array_wrapper(auto_array * ar) +- : float_ar(nullptr) +- , short_ar(ar) +- {assert((float_ar && !short_ar) || (!float_ar && short_ar));} +- +- ~auto_array_wrapper() { +- auto_lock l(lock); +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- delete float_ar; +- delete short_ar; +- } +- +- void push(void * elements, size_t length){ +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->push(static_cast(elements), length); +- return short_ar->push(static_cast(elements), length); +- } +- +- size_t length() { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->length(); +- return short_ar->length(); +- } +- +- void push_silence(size_t length) { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->push_silence(length); +- return short_ar->push_silence(length); +- } ++ assert(sz >= sizeof(AudioChannelLayout)); ++ AudioChannelLayout * acl = reinterpret_cast(calloc(1, sz)); ++ assert(acl); // Assert the allocation works. ++ return unique_ptr(acl, free); ++} + +- bool pop(void * elements, size_t length) { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->pop(static_cast(elements), length); +- return short_ar->pop(static_cast(elements), length); +- } ++enum class io_side { ++ INPUT, ++ OUTPUT, ++}; + +- void * data() { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) +- return float_ar->data(); +- return short_ar->data(); ++static char const * ++to_string(io_side side) ++{ ++ switch (side) { ++ case io_side::INPUT: ++ return "input"; ++ case io_side::OUTPUT: ++ return "output"; + } ++} + +- void clear() { +- assert((float_ar && !short_ar) || (!float_ar && short_ar)); +- auto_lock l(lock); +- if (float_ar) { +- float_ar->clear(); +- } else { +- short_ar->clear(); +- } +- } ++struct device_info { ++ AudioDeviceID id = kAudioObjectUnknown; ++ device_flags_value flags = DEV_UNKNOWN; ++}; + +-private: +- auto_array * float_ar; +- auto_array * short_ar; +- owned_critical_section lock; ++struct property_listener { ++ AudioDeviceID device_id; ++ const AudioObjectPropertyAddress * property_address; ++ AudioObjectPropertyListenerProc callback; ++ cubeb_stream * stream; ++ ++ property_listener(AudioDeviceID id, ++ const AudioObjectPropertyAddress * address, ++ AudioObjectPropertyListenerProc proc, ++ cubeb_stream * stm) ++ : device_id(id) ++ , property_address(address) ++ , callback(proc) ++ , stream(stm) ++ {} + }; + + struct cubeb_stream { ++ explicit cubeb_stream(cubeb * context); ++ ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; +- cubeb_data_callback data_callback; +- cubeb_state_callback state_callback; +- cubeb_device_changed_callback device_changed_callback; ++ void * user_ptr = nullptr; ++ /**/ ++ ++ cubeb_data_callback data_callback = nullptr; ++ cubeb_state_callback state_callback = nullptr; ++ cubeb_device_changed_callback device_changed_callback = nullptr; ++ owned_critical_section device_changed_callback_lock; + /* Stream creation parameters */ +- cubeb_stream_params input_stream_params; +- cubeb_stream_params output_stream_params; +- cubeb_devid input_device; +- bool is_default_input; +- cubeb_devid output_device; +- /* User pointer of data_callback */ +- void * user_ptr; ++ cubeb_stream_params input_stream_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ cubeb_stream_params output_stream_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ device_info input_device; ++ device_info output_device; + /* Format descriptions */ + AudioStreamBasicDescription input_desc; + AudioStreamBasicDescription output_desc; + /* I/O AudioUnits */ +- AudioUnit input_unit; +- AudioUnit output_unit; ++ AudioUnit input_unit = nullptr; ++ AudioUnit output_unit = nullptr; + /* I/O device sample rate */ +- Float64 input_hw_rate; +- Float64 output_hw_rate; ++ Float64 input_hw_rate = 0; ++ Float64 output_hw_rate = 0; + /* Expected I/O thread interleave, + * calculated from I/O hw rate. */ +- int expected_output_callbacks_in_a_row; ++ int expected_output_callbacks_in_a_row = 0; + owned_critical_section mutex; +- /* Hold the input samples in every +- * input callback iteration */ +- auto_array_wrapper * input_linear_buffer; +- /* Frames on input buffer */ +- std::atomic input_buffer_frames; ++ // Hold the input samples in every input callback iteration. ++ // Only accessed on input/output callback thread and during initial configure. ++ unique_ptr input_linear_buffer; + /* Frame counters */ +- uint64_t frames_played; +- uint64_t frames_queued; +- std::atomic frames_read; +- std::atomic shutdown; +- std::atomic draining; ++ atomic frames_played{ 0 }; ++ uint64_t frames_queued = 0; ++ // How many frames got read from the input since the stream started (includes ++ // padded silence) ++ atomic frames_read{ 0 }; ++ // How many frames got written to the output device since the stream started ++ atomic frames_written{ 0 }; ++ atomic shutdown{ true }; ++ atomic draining{ false }; ++ atomic reinit_pending { false }; ++ atomic destroy_pending{ false }; + /* Latency requested by the user. */ +- uint32_t latency_frames; +- std::atomic current_latency_frames; +- uint64_t hw_latency_frames; +- std::atomic panning; +- cubeb_resampler * resampler; +- /* This is the number of output callback we got in a row. This is usually one, +- * but can be two when the input and output rate are different, and more when +- * a device has been plugged or unplugged, as there can be some time before +- * the device is ready. */ +- std::atomic output_callback_in_a_row; ++ uint32_t latency_frames = 0; ++ atomic current_latency_frames{ 0 }; ++ atomic total_output_latency_frames { 0 }; ++ unique_ptr resampler; + /* This is true if a device change callback is currently running. */ +- std::atomic switching_device; +- std::atomic buffer_size_change_state{ false }; ++ atomic switching_device{ false }; ++ atomic buffer_size_change_state{ false }; ++ AudioDeviceID aggregate_device_id = kAudioObjectUnknown; // the aggregate device id ++ AudioObjectID plugin_id = kAudioObjectUnknown; // used to create aggregate device ++ /* Mixer interface */ ++ unique_ptr mixer; ++ /* Buffer where remixing/resampling will occur when upmixing is required */ ++ /* Only accessed from callback thread */ ++ unique_ptr temp_buffer; ++ size_t temp_buffer_size = 0; // size in bytes. ++ /* Listeners indicating what system events are monitored. */ ++ unique_ptr default_input_listener; ++ unique_ptr default_output_listener; ++ unique_ptr input_alive_listener; ++ unique_ptr input_source_listener; ++ unique_ptr output_source_listener; + }; + + bool has_input(cubeb_stream * stm) +@@ -228,14 +271,106 @@ bool has_output(cubeb_stream * stm) + return stm->output_stream_params.rate != 0; + } + ++cubeb_channel ++channel_label_to_cubeb_channel(UInt32 label) ++{ ++ switch (label) { ++ case kAudioChannelLabel_Left: ++ return CHANNEL_FRONT_LEFT; ++ case kAudioChannelLabel_Right: ++ return CHANNEL_FRONT_RIGHT; ++ case kAudioChannelLabel_Center: ++ return CHANNEL_FRONT_CENTER; ++ case kAudioChannelLabel_LFEScreen: ++ return CHANNEL_LOW_FREQUENCY; ++ case kAudioChannelLabel_LeftSurround: ++ return CHANNEL_BACK_LEFT; ++ case kAudioChannelLabel_RightSurround: ++ return CHANNEL_BACK_RIGHT; ++ case kAudioChannelLabel_LeftCenter: ++ return CHANNEL_FRONT_LEFT_OF_CENTER; ++ case kAudioChannelLabel_RightCenter: ++ return CHANNEL_FRONT_RIGHT_OF_CENTER; ++ case kAudioChannelLabel_CenterSurround: ++ return CHANNEL_BACK_CENTER; ++ case kAudioChannelLabel_LeftSurroundDirect: ++ return CHANNEL_SIDE_LEFT; ++ case kAudioChannelLabel_RightSurroundDirect: ++ return CHANNEL_SIDE_RIGHT; ++ case kAudioChannelLabel_TopCenterSurround: ++ return CHANNEL_TOP_CENTER; ++ case kAudioChannelLabel_VerticalHeightLeft: ++ return CHANNEL_TOP_FRONT_LEFT; ++ case kAudioChannelLabel_VerticalHeightCenter: ++ return CHANNEL_TOP_FRONT_CENTER; ++ case kAudioChannelLabel_VerticalHeightRight: ++ return CHANNEL_TOP_FRONT_RIGHT; ++ case kAudioChannelLabel_TopBackLeft: ++ return CHANNEL_TOP_BACK_LEFT; ++ case kAudioChannelLabel_TopBackCenter: ++ return CHANNEL_TOP_BACK_CENTER; ++ case kAudioChannelLabel_TopBackRight: ++ return CHANNEL_TOP_BACK_RIGHT; ++ default: ++ return CHANNEL_UNKNOWN; ++ } ++} ++ ++AudioChannelLabel ++cubeb_channel_to_channel_label(cubeb_channel channel) ++{ ++ switch (channel) { ++ case CHANNEL_FRONT_LEFT: ++ return kAudioChannelLabel_Left; ++ case CHANNEL_FRONT_RIGHT: ++ return kAudioChannelLabel_Right; ++ case CHANNEL_FRONT_CENTER: ++ return kAudioChannelLabel_Center; ++ case CHANNEL_LOW_FREQUENCY: ++ return kAudioChannelLabel_LFEScreen; ++ case CHANNEL_BACK_LEFT: ++ return kAudioChannelLabel_LeftSurround; ++ case CHANNEL_BACK_RIGHT: ++ return kAudioChannelLabel_RightSurround; ++ case CHANNEL_FRONT_LEFT_OF_CENTER: ++ return kAudioChannelLabel_LeftCenter; ++ case CHANNEL_FRONT_RIGHT_OF_CENTER: ++ return kAudioChannelLabel_RightCenter; ++ case CHANNEL_BACK_CENTER: ++ return kAudioChannelLabel_CenterSurround; ++ case CHANNEL_SIDE_LEFT: ++ return kAudioChannelLabel_LeftSurroundDirect; ++ case CHANNEL_SIDE_RIGHT: ++ return kAudioChannelLabel_RightSurroundDirect; ++ case CHANNEL_TOP_CENTER: ++ return kAudioChannelLabel_TopCenterSurround; ++ case CHANNEL_TOP_FRONT_LEFT: ++ return kAudioChannelLabel_VerticalHeightLeft; ++ case CHANNEL_TOP_FRONT_CENTER: ++ return kAudioChannelLabel_VerticalHeightCenter; ++ case CHANNEL_TOP_FRONT_RIGHT: ++ return kAudioChannelLabel_VerticalHeightRight; ++ case CHANNEL_TOP_BACK_LEFT: ++ return kAudioChannelLabel_TopBackLeft; ++ case CHANNEL_TOP_BACK_CENTER: ++ return kAudioChannelLabel_TopBackCenter; ++ case CHANNEL_TOP_BACK_RIGHT: ++ return kAudioChannelLabel_TopBackRight; ++ default: ++ return kAudioChannelLabel_Unknown; ++ } ++} ++ + #if TARGET_OS_IPHONE + typedef UInt32 AudioDeviceID; + typedef UInt32 AudioObjectID; + + #define AudioGetCurrentHostTime mach_absolute_time + ++#endif ++ + uint64_t +-AudioConvertHostTimeToNanos(uint64_t host_time) ++ConvertHostTimeToNanos(uint64_t host_time) + { + static struct mach_timebase_info timebase_info; + static bool initialized = false; +@@ -251,27 +386,34 @@ AudioConvertHostTimeToNanos(uint64_t host_time) + } + return (uint64_t)answer; + } +-#endif + +-static int64_t +-audiotimestamp_to_latency(AudioTimeStamp const * tstamp, cubeb_stream * stream) ++static void ++audiounit_increment_active_streams(cubeb * ctx) + { +- if (!(tstamp->mFlags & kAudioTimeStampHostTimeValid)) { +- return 0; +- } ++ ctx->mutex.assert_current_thread_owns(); ++ ctx->active_streams += 1; ++} + +- uint64_t pres = AudioConvertHostTimeToNanos(tstamp->mHostTime); +- uint64_t now = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime()); ++static void ++audiounit_decrement_active_streams(cubeb * ctx) ++{ ++ ctx->mutex.assert_current_thread_owns(); ++ ctx->active_streams -= 1; ++} + +- return ((pres - now) * stream->output_desc.mSampleRate) / 1000000000LL; ++static int ++audiounit_active_streams(cubeb * ctx) ++{ ++ ctx->mutex.assert_current_thread_owns(); ++ return ctx->active_streams; + } + + static void +-audiounit_set_global_latency(cubeb_stream * stm, uint32_t latency_frames) ++audiounit_set_global_latency(cubeb * ctx, uint32_t latency_frames) + { +- stm->mutex.assert_current_thread_owns(); +- assert(stm->context->active_streams == 1); +- stm->context->global_latency_frames = latency_frames; ++ ctx->mutex.assert_current_thread_owns(); ++ assert(audiounit_active_streams(ctx) == 1); ++ ctx->global_latency_frames = latency_frames; + } + + static void +@@ -306,24 +448,38 @@ audiounit_render_input(cubeb_stream * stm, + &input_buffer_list); + + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitRender", r); +- return r; ++ LOG("AudioUnitRender rv=%d", r); ++ if (r != kAudioUnitErr_CannotDoInCurrentContext) { ++ return r; ++ } ++ if (stm->output_unit) { ++ // kAudioUnitErr_CannotDoInCurrentContext is returned when using a BT ++ // headset and the profile is changed from A2DP to HFP/HSP. The previous ++ // output device is no longer valid and must be reset. ++ audiounit_reinit_stream_async(stm, DEV_INPUT | DEV_OUTPUT); ++ } ++ // For now state that no error occurred and feed silence, stream will be ++ // resumed once reinit has completed. ++ ALOGV("(%p) input: reinit pending feeding silence instead", stm); ++ stm->input_linear_buffer->push_silence(input_frames * stm->input_desc.mChannelsPerFrame); ++ } else { ++ /* Copy input data in linear buffer. */ ++ stm->input_linear_buffer->push(input_buffer_list.mBuffers[0].mData, ++ input_frames * stm->input_desc.mChannelsPerFrame); + } + +- /* Copy input data in linear buffer. */ +- stm->input_linear_buffer->push(input_buffer_list.mBuffers[0].mData, +- input_frames * stm->input_desc.mChannelsPerFrame); +- +- LOGV("(%p) input: buffers %d, size %d, channels %d, frames %d.", +- stm, input_buffer_list.mNumberBuffers, +- input_buffer_list.mBuffers[0].mDataByteSize, +- input_buffer_list.mBuffers[0].mNumberChannels, +- input_frames); +- + /* Advance input frame counter. */ + assert(input_frames > 0); + stm->frames_read += input_frames; + ++ ALOGV("(%p) input: buffers %u, size %u, channels %u, rendered frames %d, total frames %lu.", ++ stm, ++ (unsigned int) input_buffer_list.mNumberBuffers, ++ (unsigned int) input_buffer_list.mBuffers[0].mDataByteSize, ++ (unsigned int) input_buffer_list.mBuffers[0].mNumberChannels, ++ (unsigned int) input_frames, ++ stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame); ++ + return noErr; + } + +@@ -336,26 +492,15 @@ audiounit_input_callback(void * user_ptr, + AudioBufferList * /* bufs */) + { + cubeb_stream * stm = static_cast(user_ptr); +- long outframes; + + assert(stm->input_unit != NULL); + assert(AU_IN_BUS == bus); + + if (stm->shutdown) { +- LOG("(%p) input shutdown", stm); ++ ALOG("(%p) input shutdown", stm); + return noErr; + } + +- // This happens when we're finally getting a new input callback after having +- // switched device, we can clear the input buffer now, only keeping the data +- // we just got. +- if (stm->output_callback_in_a_row > stm->expected_output_callbacks_in_a_row) { +- stm->input_linear_buffer->pop( +- nullptr, +- stm->input_linear_buffer->length() - +- input_frames * stm->input_stream_params.channels); +- } +- + OSStatus r = audiounit_render_input(stm, flags, tstamp, bus, input_frames); + if (r != noErr) { + return r; +@@ -363,7 +508,6 @@ audiounit_input_callback(void * user_ptr, + + // Full Duplex. We'll call data_callback in the AudioUnit output callback. + if (stm->output_unit != NULL) { +- stm->output_callback_in_a_row = 0; + return noErr; + } + +@@ -371,41 +515,59 @@ audiounit_input_callback(void * user_ptr, + Resampler will deliver input buffer in the correct rate. */ + assert(input_frames <= stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame); + long total_input_frames = stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame; +- outframes = cubeb_resampler_fill(stm->resampler, +- stm->input_linear_buffer->data(), +- &total_input_frames, +- NULL, +- 0); +- // Reset input buffer +- stm->input_linear_buffer->clear(); +- +- if (outframes < 0 || outframes != input_frames) { +- stm->shutdown = true; ++ long outframes = cubeb_resampler_fill(stm->resampler.get(), ++ stm->input_linear_buffer->data(), ++ &total_input_frames, ++ NULL, ++ 0); ++ if (outframes < total_input_frames) { ++ OSStatus r = AudioOutputUnitStop(stm->input_unit); ++ assert(r == 0); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); + return noErr; + } + ++ // Reset input buffer ++ stm->input_linear_buffer->clear(); ++ + return noErr; + } + +-static bool +-is_extra_input_needed(cubeb_stream * stm) ++static void ++audiounit_mix_output_buffer(cubeb_stream * stm, ++ size_t output_frames, ++ void * input_buffer, ++ size_t input_buffer_size, ++ void * output_buffer, ++ size_t output_buffer_size) ++{ ++ assert(input_buffer_size >= ++ cubeb_sample_size(stm->output_stream_params.format) * ++ stm->output_stream_params.channels * output_frames); ++ assert(output_buffer_size >= stm->output_desc.mBytesPerFrame * output_frames); ++ ++ int r = cubeb_mixer_mix(stm->mixer.get(), ++ output_frames, ++ input_buffer, ++ input_buffer_size, ++ output_buffer, ++ output_buffer_size); ++ if (r != 0) { ++ LOG("Remix error = %d", r); ++ } ++} ++ ++// Return how many input frames (sampled at input_hw_rate) are needed to provide ++// output_frames (sampled at output_stream_params.rate) ++static int64_t ++minimum_resampling_input_frames(cubeb_stream * stm, uint32_t output_frames) + { +- /* If the output callback came first and this is a duplex stream, we need to +- * fill in some additional silence in the resampler. +- * Otherwise, if we had more than expected callbacks in a row, or we're currently +- * switching, we add some silence as well to compensate for the fact that +- * we're lacking some input data. */ +- +- /* If resampling is taking place after every output callback +- * the input buffer expected to be empty. Any frame left over +- * from resampling is stored inside the resampler available to +- * be used in next iteration as needed. +- * BUT when noop_resampler is operating we have left over +- * frames since it does not store anything internally. */ +- return stm->frames_read == 0 || +- (stm->input_linear_buffer->length() == 0 && +- (stm->output_callback_in_a_row > stm->expected_output_callbacks_in_a_row || +- stm->switching_device)); ++ if (stm->input_hw_rate == stm->output_stream_params.rate) { ++ // Fast path. ++ return output_frames; ++ } ++ return ceil(stm->input_hw_rate * output_frames / ++ stm->output_stream_params.rate); + } + + static OSStatus +@@ -421,23 +583,32 @@ audiounit_output_callback(void * user_ptr, + + cubeb_stream * stm = static_cast(user_ptr); + +- stm->output_callback_in_a_row++; ++ uint64_t now = ConvertHostTimeToNanos(mach_absolute_time()); ++ uint64_t audio_output_time = ConvertHostTimeToNanos(tstamp->mHostTime); ++ uint64_t output_latency_ns = audio_output_time - now; ++ ++ const int ns2s = 1e9; ++ // The total output latency is the timestamp difference + the stream latency + ++ // the hardware latency. ++ stm->total_output_latency_frames = output_latency_ns * stm->output_hw_rate / ns2s + stm->current_latency_frames; + +- LOGV("(%p) output: buffers %d, size %d, channels %d, frames %d.", +- stm, outBufferList->mNumberBuffers, +- outBufferList->mBuffers[0].mDataByteSize, +- outBufferList->mBuffers[0].mNumberChannels, output_frames); ++ ALOGV("(%p) output: buffers %u, size %u, channels %u, frames %u, total input frames %lu.", ++ stm, ++ (unsigned int) outBufferList->mNumberBuffers, ++ (unsigned int) outBufferList->mBuffers[0].mDataByteSize, ++ (unsigned int) outBufferList->mBuffers[0].mNumberChannels, ++ (unsigned int) output_frames, ++ has_input(stm) ? stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame : 0); + +- long outframes = 0, input_frames = 0; ++ long input_frames = 0; + void * output_buffer = NULL, * input_buffer = NULL; + + if (stm->shutdown) { +- LOG("(%p) output shutdown.", stm); ++ ALOG("(%p) output shutdown.", stm); + audiounit_make_silent(&outBufferList->mBuffers[0]); + return noErr; + } + +- stm->current_latency_frames = audiotimestamp_to_latency(tstamp, stm); + if (stm->draining) { + OSStatus r = AudioOutputUnitStop(stm->output_unit); + assert(r == 0); +@@ -449,61 +620,98 @@ audiounit_output_callback(void * user_ptr, + audiounit_make_silent(&outBufferList->mBuffers[0]); + return noErr; + } ++ + /* Get output buffer. */ +- output_buffer = outBufferList->mBuffers[0].mData; ++ if (stm->mixer) { ++ // If remixing needs to occur, we can't directly work in our final ++ // destination buffer as data may be overwritten or too small to start with. ++ size_t size_needed = output_frames * stm->output_stream_params.channels * ++ cubeb_sample_size(stm->output_stream_params.format); ++ if (stm->temp_buffer_size < size_needed) { ++ stm->temp_buffer.reset(new uint8_t[size_needed]); ++ stm->temp_buffer_size = size_needed; ++ } ++ output_buffer = stm->temp_buffer.get(); ++ } else { ++ output_buffer = outBufferList->mBuffers[0].mData; ++ } ++ ++ stm->frames_written += output_frames; ++ + /* If Full duplex get also input buffer */ + if (stm->input_unit != NULL) { +- if (is_extra_input_needed(stm)) { +- uint32_t min_input_frames_required = ceilf(stm->input_hw_rate / stm->output_hw_rate * +- stm->input_buffer_frames); +- stm->input_linear_buffer->push_silence(min_input_frames_required * stm->input_desc.mChannelsPerFrame); +- LOG("(%p) %s pushed %u frames of input silence.", stm, stm->frames_read == 0 ? "Input hasn't started," : +- stm->switching_device ? "Device switching," : "Drop out,", min_input_frames_required); +- } +- // The input buffer ++ /* If the output callback came first and this is a duplex stream, we need to ++ * fill in some additional silence in the resampler. ++ * Otherwise, if we had more than expected callbacks in a row, or we're ++ * currently switching, we add some silence as well to compensate for the ++ * fact that we're lacking some input data. */ ++ uint32_t input_frames_needed = ++ minimum_resampling_input_frames(stm, stm->frames_written); ++ long missing_frames = input_frames_needed - stm->frames_read; ++ if (missing_frames > 0) { ++ stm->input_linear_buffer->push_silence(missing_frames * stm->input_desc.mChannelsPerFrame); ++ stm->frames_read = input_frames_needed; ++ ++ ALOG("(%p) %s pushed %ld frames of input silence.", stm, stm->frames_read == 0 ? "Input hasn't started," : ++ stm->switching_device ? "Device switching," : "Drop out,", missing_frames); ++ } + input_buffer = stm->input_linear_buffer->data(); +- // Number of input frames in the buffer ++ // Number of input frames in the buffer. It will change to actually used frames ++ // inside fill + input_frames = stm->input_linear_buffer->length() / stm->input_desc.mChannelsPerFrame; + } + + /* Call user callback through resampler. */ +- outframes = cubeb_resampler_fill(stm->resampler, +- input_buffer, +- input_buffer ? &input_frames : NULL, +- output_buffer, +- output_frames); ++ long outframes = cubeb_resampler_fill(stm->resampler.get(), ++ input_buffer, ++ input_buffer ? &input_frames : NULL, ++ output_buffer, ++ output_frames); + + if (input_buffer) { +- stm->input_linear_buffer->pop(nullptr, input_frames * stm->input_desc.mChannelsPerFrame); ++ // Pop from the buffer the frames used by the the resampler. ++ stm->input_linear_buffer->pop(input_frames * stm->input_desc.mChannelsPerFrame); + } + +- if (outframes < 0) { ++ if (outframes < 0 || outframes > output_frames) { + stm->shutdown = true; ++ OSStatus r = AudioOutputUnitStop(stm->output_unit); ++ assert(r == 0); ++ if (stm->input_unit) { ++ r = AudioOutputUnitStop(stm->input_unit); ++ assert(r == 0); ++ } ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ audiounit_make_silent(&outBufferList->mBuffers[0]); + return noErr; + } + +- size_t outbpf = stm->output_desc.mBytesPerFrame; +- stm->draining = outframes < output_frames; ++ stm->draining = (UInt32) outframes < output_frames; + stm->frames_played = stm->frames_queued; + stm->frames_queued += outframes; + +- AudioFormatFlags outaff = stm->output_desc.mFormatFlags; +- float panning = (stm->output_desc.mChannelsPerFrame == 2) ? +- stm->panning.load(std::memory_order_relaxed) : 0.0f; +- + /* Post process output samples. */ + if (stm->draining) { + /* Clear missing frames (silence) */ +- memset((uint8_t*)output_buffer + outframes * outbpf, 0, (output_frames - outframes) * outbpf); ++ size_t channels = stm->output_stream_params.channels; ++ size_t missing_samples = (output_frames - outframes) * channels; ++ size_t size_sample = cubeb_sample_size(stm->output_stream_params.format); ++ /* number of bytes that have been filled with valid audio by the callback. */ ++ size_t audio_byte_count = outframes * channels * size_sample; ++ PodZero((uint8_t*)output_buffer + audio_byte_count, ++ missing_samples * size_sample); + } +- /* Pan stereo. */ +- if (panning != 0.0f) { +- if (outaff & kAudioFormatFlagIsFloat) { +- cubeb_pan_stereo_buffer_float((float*)output_buffer, outframes, panning); +- } else if (outaff & kAudioFormatFlagIsSignedInteger) { +- cubeb_pan_stereo_buffer_int((short*)output_buffer, outframes, panning); +- } ++ ++ /* Mixing */ ++ if (stm->mixer) { ++ audiounit_mix_output_buffer(stm, ++ output_frames, ++ output_buffer, ++ stm->temp_buffer_size, ++ outBufferList->mBuffers[0].mData, ++ outBufferList->mBuffers[0].mDataByteSize); + } ++ + return noErr; + } + +@@ -511,25 +719,11 @@ extern "C" { + int + audiounit_init(cubeb ** context, char const * /* context_name */) + { +- cubeb * ctx; +- +- *context = NULL; +- +- ctx = (cubeb *)calloc(1, sizeof(cubeb)); +- assert(ctx); +- // Placement new to call the ctors of cubeb members. +- new (ctx) cubeb(); +- +- ctx->ops = &audiounit_ops; +- +- ctx->active_streams = 0; +- +- ctx->limit_streams = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber10_7; + #if !TARGET_OS_IPHONE + cubeb_set_coreaudio_notification_runloop(); + #endif + +- *context = ctx; ++ *context = new cubeb; + + return CUBEB_OK; + } +@@ -542,146 +736,233 @@ audiounit_get_backend_id(cubeb * /* ctx */) + } + + #if !TARGET_OS_IPHONE ++ ++static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); ++static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); ++ + static int +-audiounit_get_output_device_id(AudioDeviceID * device_id) ++audiounit_set_device_info(cubeb_stream * stm, AudioDeviceID id, io_side side) + { +- UInt32 size; +- OSStatus r; +- AudioObjectPropertyAddress output_device_address = { +- kAudioHardwarePropertyDefaultOutputDevice, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster +- }; ++ assert(stm); + +- size = sizeof(*device_id); ++ device_info * info = nullptr; ++ cubeb_device_type type = CUBEB_DEVICE_TYPE_UNKNOWN; + +- r = AudioObjectGetPropertyData(kAudioObjectSystemObject, +- &output_device_address, +- 0, +- NULL, +- &size, +- device_id); +- if (r != noErr) { +- PRINT_ERROR_CODE("output_device_id", r); +- return CUBEB_ERROR; ++ if (side == io_side::INPUT) { ++ info = &stm->input_device; ++ type = CUBEB_DEVICE_TYPE_INPUT; ++ } else if (side == io_side::OUTPUT) { ++ info = &stm->output_device; ++ type = CUBEB_DEVICE_TYPE_OUTPUT; + } ++ memset(info, 0, sizeof(device_info)); ++ info->id = id; + +- return CUBEB_OK; +-} +- +-static int +-audiounit_get_input_device_id(AudioDeviceID * device_id) +-{ +- UInt32 size; +- OSStatus r; +- AudioObjectPropertyAddress input_device_address = { +- kAudioHardwarePropertyDefaultInputDevice, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster +- }; +- +- size = sizeof(*device_id); ++ if (side == io_side::INPUT) { ++ info->flags |= DEV_INPUT; ++ } else if (side == io_side::OUTPUT) { ++ info->flags |= DEV_OUTPUT; ++ } + +- r = AudioObjectGetPropertyData(kAudioObjectSystemObject, +- &input_device_address, +- 0, +- NULL, +- &size, +- device_id); +- if (r != noErr) { ++ AudioDeviceID default_device_id = audiounit_get_default_device_id(type); ++ if (default_device_id == kAudioObjectUnknown) { + return CUBEB_ERROR; + } ++ if (id == kAudioObjectUnknown) { ++ info->id = default_device_id; ++ info->flags |= DEV_SELECTED_DEFAULT; ++ } ++ ++ if (info->id == default_device_id) { ++ info->flags |= DEV_SYSTEM_DEFAULT; ++ } ++ ++ assert(info->id); ++ assert(info->flags & DEV_INPUT && !(info->flags & DEV_OUTPUT) || ++ !(info->flags & DEV_INPUT) && info->flags & DEV_OUTPUT); + + return CUBEB_OK; + } + +-static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); +-static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); +-static int audiounit_uninstall_device_changed_callback(cubeb_stream * stm); + + static int +-audiounit_reinit_stream(cubeb_stream * stm) ++audiounit_reinit_stream(cubeb_stream * stm, device_flags_value flags) + { + auto_lock context_lock(stm->context->mutex); ++ assert((flags & DEV_INPUT && stm->input_unit) || ++ (flags & DEV_OUTPUT && stm->output_unit)); + if (!stm->shutdown) { + audiounit_stream_stop_internal(stm); + } + + int r = audiounit_uninstall_device_changed_callback(stm); + if (r != CUBEB_OK) { +- LOG("(%p) Could not uninstall the device changed callback", stm); ++ LOG("(%p) Could not uninstall all device change listeners.", stm); + } + + { + auto_lock lock(stm->mutex); + float volume = 0.0; +- int vol_rv = audiounit_stream_get_volume(stm, &volume); ++ int vol_rv = CUBEB_ERROR; ++ if (stm->output_unit) { ++ vol_rv = audiounit_stream_get_volume(stm, &volume); ++ } + + audiounit_close_stream(stm); + ++ /* Reinit occurs in one of the following case: ++ * - When the device is not alive any more ++ * - When the default system device change. ++ * - The bluetooth device changed from A2DP to/from HFP/HSP profile ++ * We first attempt to re-use the same device id, should that fail we will ++ * default to the (potentially new) default device. */ ++ AudioDeviceID input_device = flags & DEV_INPUT ? stm->input_device.id : kAudioObjectUnknown; ++ if (flags & DEV_INPUT) { ++ r = audiounit_set_device_info(stm, input_device, io_side::INPUT); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Set input device info failed. This can happen when last media device is unplugged", stm); ++ return CUBEB_ERROR; ++ } ++ } ++ ++ /* Always use the default output on reinit. This is not correct in every ++ * case but it is sufficient for Firefox and prevent reinit from reporting ++ * failures. It will change soon when reinit mechanism will be updated. */ ++ r = audiounit_set_device_info(stm, kAudioObjectUnknown, io_side::OUTPUT); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Set output device info failed. This can happen when last media device is unplugged", stm); ++ return CUBEB_ERROR; ++ } ++ + if (audiounit_setup_stream(stm) != CUBEB_OK) { + LOG("(%p) Stream reinit failed.", stm); +- return CUBEB_ERROR; ++ if (flags & DEV_INPUT && input_device != kAudioObjectUnknown) { ++ // Attempt to re-use the same device-id failed, so attempt again with ++ // default input device. ++ audiounit_close_stream(stm); ++ if (audiounit_set_device_info(stm, kAudioObjectUnknown, io_side::INPUT) != CUBEB_OK || ++ audiounit_setup_stream(stm) != CUBEB_OK) { ++ LOG("(%p) Second stream reinit failed.", stm); ++ return CUBEB_ERROR; ++ } ++ } + } + + if (vol_rv == CUBEB_OK) { + audiounit_stream_set_volume(stm, volume); + } + +- // Reset input frames to force new stream pre-buffer +- // silence if needed, check `is_extra_input_needed()` +- stm->frames_read = 0; +- + // If the stream was running, start it again. + if (!stm->shutdown) { +- audiounit_stream_start_internal(stm); ++ r = audiounit_stream_start_internal(stm); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR; ++ } + } + } + return CUBEB_OK; + } + ++static void ++audiounit_reinit_stream_async(cubeb_stream * stm, device_flags_value flags) ++{ ++ if (std::atomic_exchange(&stm->reinit_pending, true)) { ++ // A reinit task is already pending, nothing more to do. ++ ALOG("(%p) re-init stream task already pending, cancelling request", stm); ++ return; ++ } ++ ++ // Use a new thread, through the queue, to avoid deadlock when calling ++ // Get/SetProperties method from inside notify callback ++ dispatch_async(stm->context->serial_queue, ^() { ++ if (stm->destroy_pending) { ++ ALOG("(%p) stream pending destroy, cancelling reinit task", stm); ++ return; ++ } ++ ++ if (audiounit_reinit_stream(stm, flags) != CUBEB_OK) { ++ if (audiounit_uninstall_system_changed_callback(stm) != CUBEB_OK) { ++ LOG("(%p) Could not uninstall system changed callback", stm); ++ } ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ LOG("(%p) Could not reopen the stream after switching.", stm); ++ } ++ stm->switching_device = false; ++ stm->reinit_pending = false; ++ }); ++} ++ ++static char const * ++event_addr_to_string(AudioObjectPropertySelector selector) ++{ ++ switch(selector) { ++ case kAudioHardwarePropertyDefaultOutputDevice: ++ return "kAudioHardwarePropertyDefaultOutputDevice"; ++ case kAudioHardwarePropertyDefaultInputDevice: ++ return "kAudioHardwarePropertyDefaultInputDevice"; ++ case kAudioDevicePropertyDeviceIsAlive: ++ return "kAudioDevicePropertyDeviceIsAlive"; ++ case kAudioDevicePropertyDataSource: ++ return "kAudioDevicePropertyDataSource"; ++ default: ++ return "Unknown"; ++ } ++} ++ + static OSStatus +-audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_count, ++audiounit_property_listener_callback(AudioObjectID id, UInt32 address_count, + const AudioObjectPropertyAddress * addresses, + void * user) + { + cubeb_stream * stm = (cubeb_stream*) user; ++ if (stm->switching_device) { ++ LOG("Switching is already taking place. Skip Event %s for id=%d", event_addr_to_string(addresses[0].mSelector), id); ++ return noErr; ++ } + stm->switching_device = true; + +- LOG("(%p) Audio device changed, %d events.", stm, address_count); ++ LOG("(%p) Audio device changed, %u events.", stm, (unsigned int) address_count); + for (UInt32 i = 0; i < address_count; i++) { + switch(addresses[i].mSelector) { + case kAudioHardwarePropertyDefaultOutputDevice: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDefaultOutputDevice", i); +- // Allow restart to choose the new default +- stm->output_device = nullptr; ++ LOG("Event[%u] - mSelector == kAudioHardwarePropertyDefaultOutputDevice for id=%d", (unsigned int) i, id); + } + break; + case kAudioHardwarePropertyDefaultInputDevice: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDefaultInputDevice", i); +- // Allow restart to choose the new default +- stm->input_device = nullptr; ++ LOG("Event[%u] - mSelector == kAudioHardwarePropertyDefaultInputDevice for id=%d", (unsigned int) i, id); + } + break; + case kAudioDevicePropertyDeviceIsAlive: { +- LOG("Event[%d] - mSelector == kAudioDevicePropertyDeviceIsAlive", i); ++ LOG("Event[%u] - mSelector == kAudioDevicePropertyDeviceIsAlive for id=%d", (unsigned int) i, id); + // If this is the default input device ignore the event, + // kAudioHardwarePropertyDefaultInputDevice will take care of the switch +- if (stm->is_default_input) { ++ if (stm->input_device.flags & DEV_SYSTEM_DEFAULT) { + LOG("It's the default input device, ignore the event"); ++ stm->switching_device = false; + return noErr; + } +- // Allow restart to choose the new default. Event register only for input. +- stm->input_device = nullptr; + } + break; + case kAudioDevicePropertyDataSource: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDataSource", i); +- return noErr; ++ LOG("Event[%u] - mSelector == kAudioDevicePropertyDataSource for id=%d", (unsigned int) i, id); + } ++ break; ++ default: ++ LOG("Event[%u] - mSelector == Unexpected Event id %d, return", (unsigned int) i, addresses[i].mSelector); ++ stm->switching_device = false; ++ return noErr; + } + } + ++ // Allow restart to choose the new default ++ device_flags_value switch_side = DEV_UNKNOWN; ++ if (has_input(stm)) { ++ switch_side |= DEV_INPUT; ++ } ++ if (has_output(stm)) { ++ switch_side |= DEV_OUTPUT; ++ } ++ + for (UInt32 i = 0; i < address_count; i++) { + switch(addresses[i].mSelector) { + case kAudioHardwarePropertyDefaultOutputDevice: +@@ -689,7 +970,7 @@ audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_coun + case kAudioDevicePropertyDeviceIsAlive: + /* fall through */ + case kAudioDevicePropertyDataSource: { +- auto_lock lock(stm->mutex); ++ auto_lock dev_cb_lock(stm->device_changed_callback_lock); + if (stm->device_changed_callback) { + stm->device_changed_callback(stm->user_ptr); + } +@@ -698,99 +979,77 @@ audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_coun + } + } + +- // Use a new thread, through the queue, to avoid deadlock when calling +- // Get/SetProperties method from inside notify callback +- dispatch_async(stm->context->serial_queue, ^() { +- if (audiounit_reinit_stream(stm) != CUBEB_OK) { +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- LOG("(%p) Could not reopen the stream after switching.", stm); +- } +- stm->switching_device = false; +- }); ++ audiounit_reinit_stream_async(stm, switch_side); + + return noErr; + } + + OSStatus +-audiounit_add_listener(cubeb_stream * stm, AudioDeviceID id, AudioObjectPropertySelector selector, +- AudioObjectPropertyScope scope, AudioObjectPropertyListenerProc listener) ++audiounit_add_listener(const property_listener * listener) + { +- AudioObjectPropertyAddress address = { +- selector, +- scope, +- kAudioObjectPropertyElementMaster +- }; +- +- return AudioObjectAddPropertyListener(id, &address, listener, stm); ++ assert(listener); ++ return AudioObjectAddPropertyListener(listener->device_id, ++ listener->property_address, ++ listener->callback, ++ listener->stream); + } + + OSStatus +-audiounit_remove_listener(cubeb_stream * stm, AudioDeviceID id, +- AudioObjectPropertySelector selector, +- AudioObjectPropertyScope scope, +- AudioObjectPropertyListenerProc listener) +-{ +- AudioObjectPropertyAddress address = { +- selector, +- scope, +- kAudioObjectPropertyElementMaster +- }; +- +- return AudioObjectRemovePropertyListener(id, &address, listener, stm); ++audiounit_remove_listener(const property_listener * listener) ++{ ++ assert(listener); ++ return AudioObjectRemovePropertyListener(listener->device_id, ++ listener->property_address, ++ listener->callback, ++ listener->stream); + } + +-static AudioObjectID audiounit_get_default_device_id(cubeb_device_type type); +- + static int + audiounit_install_device_changed_callback(cubeb_stream * stm) + { +- OSStatus r; ++ OSStatus rv; ++ int r = CUBEB_OK; + + if (stm->output_unit) { + /* This event will notify us when the data source on the same device changes, + * for example when the user plugs in a normal (non-usb) headset in the + * headphone jack. */ +- AudioDeviceID output_dev_id; +- r = audiounit_get_output_device_id(&output_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- r = audiounit_add_listener(stm, output_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/output/kAudioDevicePropertyDataSource", r); +- return CUBEB_ERROR; ++ stm->output_source_listener.reset(new property_listener( ++ stm->output_device.id, &OUTPUT_DATA_SOURCE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ rv = audiounit_add_listener(stm->output_source_listener.get()); ++ if (rv != noErr) { ++ stm->output_source_listener.reset(); ++ LOG("AudioObjectAddPropertyListener/output/kAudioDevicePropertyDataSource rv=%d, device id=%d", rv, stm->output_device.id); ++ r = CUBEB_ERROR; + } + } + + if (stm->input_unit) { + /* This event will notify us when the data source on the input device changes. */ +- AudioDeviceID input_dev_id; +- r = audiounit_get_input_device_id(&input_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- r = audiounit_add_listener(stm, input_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDataSource", r); +- return CUBEB_ERROR; ++ stm->input_source_listener.reset(new property_listener( ++ stm->input_device.id, &INPUT_DATA_SOURCE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ rv = audiounit_add_listener(stm->input_source_listener.get()); ++ if (rv != noErr) { ++ stm->input_source_listener.reset(); ++ LOG("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDataSource rv=%d, device id=%d", rv, stm->input_device.id); ++ r = CUBEB_ERROR; + } + + /* Event to notify when the input is going away. */ +- AudioDeviceID dev = stm->input_device ? reinterpret_cast(stm->input_device) : +- audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT); +- r = audiounit_add_listener(stm, dev, kAudioDevicePropertyDeviceIsAlive, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDeviceIsAlive", r); +- return CUBEB_ERROR; ++ stm->input_alive_listener.reset(new property_listener( ++ stm->input_device.id, &DEVICE_IS_ALIVE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ rv = audiounit_add_listener(stm->input_alive_listener.get()); ++ if (rv != noErr) { ++ stm->input_alive_listener.reset(); ++ LOG("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDeviceIsAlive rv=%d, device id =%d", rv, stm->input_device.id); ++ r = CUBEB_ERROR; + } + } + +- return CUBEB_OK; ++ return r; + } + + static int +@@ -803,9 +1062,12 @@ audiounit_install_system_changed_callback(cubeb_stream * stm) + * for example when the user plugs in a USB headset and the system chooses it + * automatically as the default, or when another device is chosen in the + * dropdown list. */ +- r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); ++ stm->default_output_listener.reset(new property_listener( ++ kAudioObjectSystemObject, &DEFAULT_OUTPUT_DEVICE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ r = audiounit_add_listener(stm->default_output_listener.get()); + if (r != noErr) { ++ stm->default_output_listener.reset(); + LOG("AudioObjectAddPropertyListener/output/kAudioHardwarePropertyDefaultOutputDevice rv=%d", r); + return CUBEB_ERROR; + } +@@ -813,9 +1075,12 @@ audiounit_install_system_changed_callback(cubeb_stream * stm) + + if (stm->input_unit) { + /* This event will notify us when the default input device changes. */ +- r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); ++ stm->default_input_listener.reset(new property_listener( ++ kAudioObjectSystemObject, &DEFAULT_INPUT_DEVICE_PROPERTY_ADDRESS, ++ &audiounit_property_listener_callback, stm)); ++ r = audiounit_add_listener(stm->default_input_listener.get()); + if (r != noErr) { ++ stm->default_input_listener.reset(); + LOG("AudioObjectAddPropertyListener/input/kAudioHardwarePropertyDefaultInputDevice rv=%d", r); + return CUBEB_ERROR; + } +@@ -827,36 +1092,38 @@ audiounit_install_system_changed_callback(cubeb_stream * stm) + static int + audiounit_uninstall_device_changed_callback(cubeb_stream * stm) + { +- OSStatus r; +- +- if (stm->output_unit) { +- AudioDeviceID output_dev_id; +- r = audiounit_get_output_device_id(&output_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } ++ OSStatus rv; ++ // Failing to uninstall listeners is not a fatal error. ++ int r = CUBEB_OK; + +- r = audiounit_remove_listener(stm, output_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; ++ if (stm->output_source_listener) { ++ rv = audiounit_remove_listener(stm->output_source_listener.get()); ++ if (rv != noErr) { ++ LOG("AudioObjectRemovePropertyListener/output/kAudioDevicePropertyDataSource rv=%d, device id=%d", rv, stm->output_device.id); ++ r = CUBEB_ERROR; + } ++ stm->output_source_listener.reset(); + } + +- if (stm->input_unit) { +- AudioDeviceID input_dev_id; +- r = audiounit_get_input_device_id(&input_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; ++ if (stm->input_source_listener) { ++ rv = audiounit_remove_listener(stm->input_source_listener.get()); ++ if (rv != noErr) { ++ LOG("AudioObjectRemovePropertyListener/input/kAudioDevicePropertyDataSource rv=%d, device id=%d", rv, stm->input_device.id); ++ r = CUBEB_ERROR; + } ++ stm->input_source_listener.reset(); ++ } + +- r = audiounit_remove_listener(stm, input_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; ++ if (stm->input_alive_listener) { ++ rv = audiounit_remove_listener(stm->input_alive_listener.get()); ++ if (rv != noErr) { ++ LOG("AudioObjectRemovePropertyListener/input/kAudioDevicePropertyDeviceIsAlive rv=%d, device id=%d", rv, stm->input_device.id); ++ r = CUBEB_ERROR; + } ++ stm->input_alive_listener.reset(); + } +- return CUBEB_OK; ++ ++ return r; + } + + static int +@@ -864,20 +1131,20 @@ audiounit_uninstall_system_changed_callback(cubeb_stream * stm) + { + OSStatus r; + +- if (stm->output_unit) { +- r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); ++ if (stm->default_output_listener) { ++ r = audiounit_remove_listener(stm->default_output_listener.get()); + if (r != noErr) { + return CUBEB_ERROR; + } ++ stm->default_output_listener.reset(); + } + +- if (stm->input_unit) { +- r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); ++ if (stm->default_input_listener) { ++ r = audiounit_remove_listener(stm->default_input_listener.get()); + if (r != noErr) { + return CUBEB_ERROR; + } ++ stm->default_input_listener.reset(); + } + return CUBEB_OK; + } +@@ -895,7 +1162,8 @@ audiounit_get_acceptable_latency_range(AudioValueRange * latency_range) + kAudioObjectPropertyElementMaster + }; + +- if (audiounit_get_output_device_id(&output_device_id) != CUBEB_OK) { ++ output_device_id = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_OUTPUT); ++ if (output_device_id == kAudioObjectUnknown) { + LOG("Could not get default output device id."); + return CUBEB_ERROR; + } +@@ -910,7 +1178,7 @@ audiounit_get_acceptable_latency_range(AudioValueRange * latency_range) + &size, + latency_range); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectGetPropertyData/buffer size range", r); ++ LOG("AudioObjectGetPropertyData/buffer size range rv=%d", r); + return CUBEB_ERROR; + } + +@@ -921,20 +1189,19 @@ audiounit_get_acceptable_latency_range(AudioValueRange * latency_range) + static AudioObjectID + audiounit_get_default_device_id(cubeb_device_type type) + { +- AudioObjectPropertyAddress adr = { 0, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; +- AudioDeviceID devid; +- UInt32 size; +- ++ const AudioObjectPropertyAddress * adr; + if (type == CUBEB_DEVICE_TYPE_OUTPUT) { +- adr.mSelector = kAudioHardwarePropertyDefaultOutputDevice; ++ adr = &DEFAULT_OUTPUT_DEVICE_PROPERTY_ADDRESS; + } else if (type == CUBEB_DEVICE_TYPE_INPUT) { +- adr.mSelector = kAudioHardwarePropertyDefaultInputDevice; ++ adr = &DEFAULT_INPUT_DEVICE_PROPERTY_ADDRESS; + } else { + return kAudioObjectUnknown; + } + +- size = sizeof(AudioDeviceID); +- if (AudioObjectGetPropertyData(kAudioObjectSystemObject, &adr, 0, NULL, &size, &devid) != noErr) { ++ AudioDeviceID devid; ++ UInt32 size = sizeof(AudioDeviceID); ++ if (AudioObjectGetPropertyData(kAudioObjectSystemObject, ++ adr, 0, NULL, &size, &devid) != noErr) { + return kAudioObjectUnknown; + } + +@@ -960,174 +1227,783 @@ audiounit_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + + assert(ctx && max_channels); + +- if (audiounit_get_output_device_id(&output_device_id) != CUBEB_OK) { ++ output_device_id = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_OUTPUT); ++ if (output_device_id == kAudioObjectUnknown) { ++ return CUBEB_ERROR; ++ } ++ ++ size = sizeof(stream_format); ++ ++ r = AudioObjectGetPropertyData(output_device_id, ++ &stream_format_address, ++ 0, ++ NULL, ++ &size, ++ &stream_format); ++ if (r != noErr) { ++ LOG("AudioObjectPropertyAddress/StreamFormat rv=%d", r); ++ return CUBEB_ERROR; ++ } ++ ++ *max_channels = stream_format.mChannelsPerFrame; ++#endif ++ return CUBEB_OK; ++} ++ ++static int ++audiounit_get_min_latency(cubeb * /* ctx */, ++ cubeb_stream_params /* params */, ++ uint32_t * latency_frames) ++{ ++#if TARGET_OS_IPHONE ++ //TODO: [[AVAudioSession sharedInstance] inputLatency] ++ return CUBEB_ERROR_NOT_SUPPORTED; ++#else ++ AudioValueRange latency_range; ++ if (audiounit_get_acceptable_latency_range(&latency_range) != CUBEB_OK) { ++ LOG("Could not get acceptable latency range."); ++ return CUBEB_ERROR; ++ } ++ ++ *latency_frames = max(latency_range.mMinimum, ++ SAFE_MIN_LATENCY_FRAMES); ++#endif ++ ++ return CUBEB_OK; ++} ++ ++static int ++audiounit_get_preferred_sample_rate(cubeb * /* ctx */, uint32_t * rate) ++{ ++#if TARGET_OS_IPHONE ++ //TODO ++ return CUBEB_ERROR_NOT_SUPPORTED; ++#else ++ UInt32 size; ++ OSStatus r; ++ Float64 fsamplerate; ++ AudioDeviceID output_device_id; ++ AudioObjectPropertyAddress samplerate_address = { ++ kAudioDevicePropertyNominalSampleRate, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster ++ }; ++ ++ output_device_id = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_OUTPUT); ++ if (output_device_id == kAudioObjectUnknown) { ++ return CUBEB_ERROR; ++ } ++ ++ size = sizeof(fsamplerate); ++ r = AudioObjectGetPropertyData(output_device_id, ++ &samplerate_address, ++ 0, ++ NULL, ++ &size, ++ &fsamplerate); ++ ++ if (r != noErr) { ++ return CUBEB_ERROR; ++ } ++ ++ *rate = static_cast(fsamplerate); ++#endif ++ return CUBEB_OK; ++} ++ ++static cubeb_channel_layout ++audiounit_convert_channel_layout(AudioChannelLayout * layout) ++{ ++ // When having one or two channel, force mono or stereo. Some devices (namely, ++ // Bose QC35, mark 1 and 2), expose a single channel mapped to the right for ++ // some reason. ++ if (layout->mNumberChannelDescriptions == 1) { ++ return CUBEB_LAYOUT_MONO; ++ } else if (layout->mNumberChannelDescriptions == 2) { ++ return CUBEB_LAYOUT_STEREO; ++ } ++ ++ if (layout->mChannelLayoutTag != kAudioChannelLayoutTag_UseChannelDescriptions) { ++ // kAudioChannelLayoutTag_UseChannelBitmap ++ // kAudioChannelLayoutTag_Mono ++ // kAudioChannelLayoutTag_Stereo ++ // .... ++ LOG("Only handle UseChannelDescriptions for now.\n"); ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ ++ cubeb_channel_layout cl = 0; ++ for (UInt32 i = 0; i < layout->mNumberChannelDescriptions; ++i) { ++ cubeb_channel cc = channel_label_to_cubeb_channel( ++ layout->mChannelDescriptions[i].mChannelLabel); ++ if (cc == CHANNEL_UNKNOWN) { ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ cl |= cc; ++ } ++ ++ return cl; ++} ++ ++static cubeb_channel_layout ++audiounit_get_preferred_channel_layout(AudioUnit output_unit) ++{ ++ OSStatus rv = noErr; ++ UInt32 size = 0; ++ rv = AudioUnitGetPropertyInfo(output_unit, ++ kAudioDevicePropertyPreferredChannelLayout, ++ kAudioUnitScope_Output, ++ AU_OUT_BUS, ++ &size, ++ nullptr); ++ if (rv != noErr) { ++ LOG("AudioUnitGetPropertyInfo/kAudioDevicePropertyPreferredChannelLayout rv=%d", rv); ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ assert(size > 0); ++ ++ auto layout = make_sized_audio_channel_layout(size); ++ rv = AudioUnitGetProperty(output_unit, ++ kAudioDevicePropertyPreferredChannelLayout, ++ kAudioUnitScope_Output, ++ AU_OUT_BUS, ++ layout.get(), ++ &size); ++ if (rv != noErr) { ++ LOG("AudioUnitGetProperty/kAudioDevicePropertyPreferredChannelLayout rv=%d", rv); ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ ++ return audiounit_convert_channel_layout(layout.get()); ++} ++ ++static cubeb_channel_layout ++audiounit_get_current_channel_layout(AudioUnit output_unit) ++{ ++ OSStatus rv = noErr; ++ UInt32 size = 0; ++ rv = AudioUnitGetPropertyInfo(output_unit, ++ kAudioUnitProperty_AudioChannelLayout, ++ kAudioUnitScope_Output, ++ AU_OUT_BUS, ++ &size, ++ nullptr); ++ if (rv != noErr) { ++ LOG("AudioUnitGetPropertyInfo/kAudioUnitProperty_AudioChannelLayout rv=%d", rv); ++ // This property isn't known before macOS 10.12, attempt another method. ++ return audiounit_get_preferred_channel_layout(output_unit); ++ } ++ assert(size > 0); ++ ++ auto layout = make_sized_audio_channel_layout(size); ++ rv = AudioUnitGetProperty(output_unit, ++ kAudioUnitProperty_AudioChannelLayout, ++ kAudioUnitScope_Output, ++ AU_OUT_BUS, ++ layout.get(), ++ &size); ++ if (rv != noErr) { ++ LOG("AudioUnitGetProperty/kAudioUnitProperty_AudioChannelLayout rv=%d", rv); ++ return CUBEB_LAYOUT_UNDEFINED; ++ } ++ ++ return audiounit_convert_channel_layout(layout.get()); ++} ++ ++static int audiounit_create_unit(AudioUnit * unit, device_info * device); ++ ++static OSStatus audiounit_remove_device_listener(cubeb * context, cubeb_device_type devtype); ++ ++static void ++audiounit_destroy(cubeb * ctx) ++{ ++ { ++ auto_lock lock(ctx->mutex); ++ ++ // Disabling this assert for bug 1083664 -- we seem to leak a stream ++ // assert(ctx->active_streams == 0); ++ if (audiounit_active_streams(ctx) > 0) { ++ LOG("(%p) API misuse, %d streams active when context destroyed!", ctx, audiounit_active_streams(ctx)); ++ } ++ ++ /* Unregister the callback if necessary. */ ++ if (ctx->input_collection_changed_callback) { ++ audiounit_remove_device_listener(ctx, CUBEB_DEVICE_TYPE_INPUT); ++ } ++ if (ctx->output_collection_changed_callback) { ++ audiounit_remove_device_listener(ctx, CUBEB_DEVICE_TYPE_OUTPUT); ++ } ++ } ++ ++ dispatch_release(ctx->serial_queue); ++ ++ delete ctx; ++} ++ ++static void audiounit_stream_destroy(cubeb_stream * stm); ++ ++static int ++audio_stream_desc_init(AudioStreamBasicDescription * ss, ++ const cubeb_stream_params * stream_params) ++{ ++ switch (stream_params->format) { ++ case CUBEB_SAMPLE_S16LE: ++ ss->mBitsPerChannel = 16; ++ ss->mFormatFlags = kAudioFormatFlagIsSignedInteger; ++ break; ++ case CUBEB_SAMPLE_S16BE: ++ ss->mBitsPerChannel = 16; ++ ss->mFormatFlags = kAudioFormatFlagIsSignedInteger | ++ kAudioFormatFlagIsBigEndian; ++ break; ++ case CUBEB_SAMPLE_FLOAT32LE: ++ ss->mBitsPerChannel = 32; ++ ss->mFormatFlags = kAudioFormatFlagIsFloat; ++ break; ++ case CUBEB_SAMPLE_FLOAT32BE: ++ ss->mBitsPerChannel = 32; ++ ss->mFormatFlags = kAudioFormatFlagIsFloat | ++ kAudioFormatFlagIsBigEndian; ++ break; ++ default: ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } ++ ++ ss->mFormatID = kAudioFormatLinearPCM; ++ ss->mFormatFlags |= kLinearPCMFormatFlagIsPacked; ++ ss->mSampleRate = stream_params->rate; ++ ss->mChannelsPerFrame = stream_params->channels; ++ ++ ss->mBytesPerFrame = (ss->mBitsPerChannel / 8) * ss->mChannelsPerFrame; ++ ss->mFramesPerPacket = 1; ++ ss->mBytesPerPacket = ss->mBytesPerFrame * ss->mFramesPerPacket; ++ ++ ss->mReserved = 0; ++ ++ return CUBEB_OK; ++} ++ ++void ++audiounit_init_mixer(cubeb_stream * stm) ++{ ++ // We can't rely on macOS' AudioUnit to properly downmix (or upmix) the audio ++ // data, it silently drop the channels so we need to remix the ++ // audio data by ourselves to keep all the information. ++ stm->mixer.reset(cubeb_mixer_create(stm->output_stream_params.format, ++ stm->output_stream_params.channels, ++ stm->output_stream_params.layout, ++ stm->context->channels, ++ stm->context->layout)); ++ assert(stm->mixer); ++} ++ ++static int ++audiounit_set_channel_layout(AudioUnit unit, ++ io_side side, ++ cubeb_channel_layout layout) ++{ ++ if (side != io_side::OUTPUT) { ++ return CUBEB_ERROR; ++ } ++ ++ if (layout == CUBEB_LAYOUT_UNDEFINED) { ++ // We leave everything as-is... ++ return CUBEB_OK; ++ } ++ ++ ++ OSStatus r; ++ uint32_t nb_channels = cubeb_channel_layout_nb_channels(layout); ++ ++ // We do not use CoreAudio standard layout for lack of documentation on what ++ // the actual channel orders are. So we set a custom layout. ++ size_t size = offsetof(AudioChannelLayout, mChannelDescriptions[nb_channels]); ++ auto au_layout = make_sized_audio_channel_layout(size); ++ au_layout->mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions; ++ au_layout->mNumberChannelDescriptions = nb_channels; ++ ++ uint32_t channels = 0; ++ cubeb_channel_layout channelMap = layout; ++ for (uint32_t i = 0; channelMap != 0; ++i) { ++ XASSERT(channels < nb_channels); ++ uint32_t channel = (channelMap & 1) << i; ++ if (channel != 0) { ++ au_layout->mChannelDescriptions[channels].mChannelLabel = ++ cubeb_channel_to_channel_label(static_cast(channel)); ++ au_layout->mChannelDescriptions[channels].mChannelFlags = kAudioChannelFlags_AllOff; ++ channels++; ++ } ++ channelMap = channelMap >> 1; ++ } ++ ++ r = AudioUnitSetProperty(unit, ++ kAudioUnitProperty_AudioChannelLayout, ++ kAudioUnitScope_Input, ++ AU_OUT_BUS, ++ au_layout.get(), ++ size); ++ if (r != noErr) { ++ LOG("AudioUnitSetProperty/%s/kAudioUnitProperty_AudioChannelLayout rv=%d", to_string(side), r); ++ return CUBEB_ERROR; ++ } ++ ++ return CUBEB_OK; ++} ++ ++void ++audiounit_layout_init(cubeb_stream * stm, io_side side) ++{ ++ // We currently don't support the input layout setting. ++ if (side == io_side::INPUT) { ++ return; ++ } ++ ++ stm->context->layout = audiounit_get_current_channel_layout(stm->output_unit); ++ ++ audiounit_set_channel_layout(stm->output_unit, io_side::OUTPUT, stm->context->layout); ++} ++ ++static vector ++audiounit_get_sub_devices(AudioDeviceID device_id) ++{ ++ vector sub_devices; ++ AudioObjectPropertyAddress property_address = { kAudioAggregateDevicePropertyActiveSubDeviceList, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ UInt32 size = 0; ++ OSStatus rv = AudioObjectGetPropertyDataSize(device_id, ++ &property_address, ++ 0, ++ nullptr, ++ &size); ++ ++ if (rv != noErr) { ++ sub_devices.push_back(device_id); ++ return sub_devices; ++ } ++ ++ uint32_t count = static_cast(size / sizeof(AudioObjectID)); ++ sub_devices.resize(count); ++ rv = AudioObjectGetPropertyData(device_id, ++ &property_address, ++ 0, ++ nullptr, ++ &size, ++ sub_devices.data()); ++ if (rv != noErr) { ++ sub_devices.clear(); ++ sub_devices.push_back(device_id); ++ } else { ++ LOG("Found %u sub-devices", count); ++ } ++ return sub_devices; ++} ++ ++static int ++audiounit_create_blank_aggregate_device(AudioObjectID * plugin_id, AudioDeviceID * aggregate_device_id) ++{ ++ AudioObjectPropertyAddress address_plugin_bundle_id = { kAudioHardwarePropertyPlugInForBundleID, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ UInt32 size = 0; ++ OSStatus r = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, ++ &address_plugin_bundle_id, ++ 0, NULL, ++ &size); ++ if (r != noErr) { ++ LOG("AudioObjectGetPropertyDataSize/kAudioHardwarePropertyPlugInForBundleID, rv=%d", r); + return CUBEB_ERROR; + } + +- size = sizeof(stream_format); ++ AudioValueTranslation translation_value; ++ CFStringRef in_bundle_ref = CFSTR("com.apple.audio.CoreAudio"); ++ translation_value.mInputData = &in_bundle_ref; ++ translation_value.mInputDataSize = sizeof(in_bundle_ref); ++ translation_value.mOutputData = plugin_id; ++ translation_value.mOutputDataSize = sizeof(*plugin_id); + +- r = AudioObjectGetPropertyData(output_device_id, +- &stream_format_address, ++ r = AudioObjectGetPropertyData(kAudioObjectSystemObject, ++ &address_plugin_bundle_id, + 0, +- NULL, ++ nullptr, + &size, +- &stream_format); ++ &translation_value); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectPropertyAddress/StreamFormat", r); ++ LOG("AudioObjectGetPropertyData/kAudioHardwarePropertyPlugInForBundleID, rv=%d", r); + return CUBEB_ERROR; + } + +- *max_channels = stream_format.mChannelsPerFrame; +-#endif ++ AudioObjectPropertyAddress create_aggregate_device_address = { kAudioPlugInCreateAggregateDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ r = AudioObjectGetPropertyDataSize(*plugin_id, ++ &create_aggregate_device_address, ++ 0, ++ nullptr, ++ &size); ++ if (r != noErr) { ++ LOG("AudioObjectGetPropertyDataSize/kAudioPlugInCreateAggregateDevice, rv=%d", r); ++ return CUBEB_ERROR; ++ } ++ ++ CFMutableDictionaryRef aggregate_device_dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, ++ &kCFTypeDictionaryKeyCallBacks, ++ &kCFTypeDictionaryValueCallBacks); ++ struct timeval timestamp; ++ gettimeofday(×tamp, NULL); ++ long long int time_id = timestamp.tv_sec * 1000000LL + timestamp.tv_usec; ++ CFStringRef aggregate_device_name = CFStringCreateWithFormat(NULL, NULL, CFSTR("%s_%llx"), PRIVATE_AGGREGATE_DEVICE_NAME, time_id); ++ CFDictionaryAddValue(aggregate_device_dict, CFSTR(kAudioAggregateDeviceNameKey), aggregate_device_name); ++ CFRelease(aggregate_device_name); ++ ++ CFStringRef aggregate_device_UID = CFStringCreateWithFormat(NULL, NULL, CFSTR("org.mozilla.%s_%llx"), PRIVATE_AGGREGATE_DEVICE_NAME, time_id); ++ CFDictionaryAddValue(aggregate_device_dict, CFSTR(kAudioAggregateDeviceUIDKey), aggregate_device_UID); ++ CFRelease(aggregate_device_UID); ++ ++ int private_value = 1; ++ CFNumberRef aggregate_device_private_key = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &private_value); ++ CFDictionaryAddValue(aggregate_device_dict, CFSTR(kAudioAggregateDeviceIsPrivateKey), aggregate_device_private_key); ++ CFRelease(aggregate_device_private_key); ++ ++ int stacked_value = 0; ++ CFNumberRef aggregate_device_stacked_key = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &stacked_value); ++ CFDictionaryAddValue(aggregate_device_dict, CFSTR(kAudioAggregateDeviceIsStackedKey), aggregate_device_stacked_key); ++ CFRelease(aggregate_device_stacked_key); ++ ++ r = AudioObjectGetPropertyData(*plugin_id, ++ &create_aggregate_device_address, ++ sizeof(aggregate_device_dict), ++ &aggregate_device_dict, ++ &size, ++ aggregate_device_id); ++ CFRelease(aggregate_device_dict); ++ if (r != noErr) { ++ LOG("AudioObjectGetPropertyData/kAudioPlugInCreateAggregateDevice, rv=%d", r); ++ return CUBEB_ERROR; ++ } ++ LOG("New aggregate device %u", *aggregate_device_id); ++ + return CUBEB_OK; + } + +-static int +-audiounit_get_min_latency(cubeb * /* ctx */, +- cubeb_stream_params /* params */, +- uint32_t * latency_frames) ++// The returned CFStringRef object needs to be released (via CFRelease) ++// if it's not NULL, since the reference count of the returned CFStringRef ++// object is increased. ++static CFStringRef ++get_device_name(AudioDeviceID id) + { +-#if TARGET_OS_IPHONE +- //TODO: [[AVAudioSession sharedInstance] inputLatency] +- return CUBEB_ERROR_NOT_SUPPORTED; +-#else +- AudioValueRange latency_range; +- if (audiounit_get_acceptable_latency_range(&latency_range) != CUBEB_OK) { +- LOG("Could not get acceptable latency range."); ++ UInt32 size = sizeof(CFStringRef); ++ CFStringRef UIname = nullptr; ++ AudioObjectPropertyAddress address_uuid = { kAudioDevicePropertyDeviceUID, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ OSStatus err = AudioObjectGetPropertyData(id, &address_uuid, 0, nullptr, &size, &UIname); ++ return (err == noErr) ? UIname : NULL; ++} ++ ++static int ++audiounit_set_aggregate_sub_device_list(AudioDeviceID aggregate_device_id, ++ AudioDeviceID input_device_id, ++ AudioDeviceID output_device_id) ++{ ++ LOG("Add devices input %u and output %u into aggregate device %u", ++ input_device_id, output_device_id, aggregate_device_id); ++ const vector output_sub_devices = audiounit_get_sub_devices(output_device_id); ++ const vector input_sub_devices = audiounit_get_sub_devices(input_device_id); ++ ++ CFMutableArrayRef aggregate_sub_devices_array = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks); ++ /* The order of the items in the array is significant and is used to determine the order of the streams ++ of the AudioAggregateDevice. */ ++ for (UInt32 i = 0; i < output_sub_devices.size(); i++) { ++ CFStringRef ref = get_device_name(output_sub_devices[i]); ++ if (ref == NULL) { ++ CFRelease(aggregate_sub_devices_array); ++ return CUBEB_ERROR; ++ } ++ CFArrayAppendValue(aggregate_sub_devices_array, ref); ++ CFRelease(ref); ++ } ++ for (UInt32 i = 0; i < input_sub_devices.size(); i++) { ++ CFStringRef ref = get_device_name(input_sub_devices[i]); ++ if (ref == NULL) { ++ CFRelease(aggregate_sub_devices_array); ++ return CUBEB_ERROR; ++ } ++ CFArrayAppendValue(aggregate_sub_devices_array, ref); ++ CFRelease(ref); ++ } ++ ++ AudioObjectPropertyAddress aggregate_sub_device_list = { kAudioAggregateDevicePropertyFullSubDeviceList, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ UInt32 size = sizeof(CFMutableArrayRef); ++ OSStatus rv = AudioObjectSetPropertyData(aggregate_device_id, ++ &aggregate_sub_device_list, ++ 0, ++ nullptr, ++ size, ++ &aggregate_sub_devices_array); ++ CFRelease(aggregate_sub_devices_array); ++ if (rv != noErr) { ++ LOG("AudioObjectSetPropertyData/kAudioAggregateDevicePropertyFullSubDeviceList, rv=%d", rv); + return CUBEB_ERROR; + } + +- *latency_frames = std::max(latency_range.mMinimum, +- SAFE_MIN_LATENCY_FRAMES); +-#endif ++ return CUBEB_OK; ++} ++ ++static int ++audiounit_set_master_aggregate_device(const AudioDeviceID aggregate_device_id) ++{ ++ assert(aggregate_device_id != kAudioObjectUnknown); ++ AudioObjectPropertyAddress master_aggregate_sub_device = { kAudioAggregateDevicePropertyMasterSubDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ ++ // Master become the 1st output sub device ++ AudioDeviceID output_device_id = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_OUTPUT); ++ const vector output_sub_devices = audiounit_get_sub_devices(output_device_id); ++ CFStringRef master_sub_device = get_device_name(output_sub_devices[0]); ++ ++ UInt32 size = sizeof(CFStringRef); ++ OSStatus rv = AudioObjectSetPropertyData(aggregate_device_id, ++ &master_aggregate_sub_device, ++ 0, ++ NULL, ++ size, ++ &master_sub_device); ++ if (master_sub_device) { ++ CFRelease(master_sub_device); ++ } ++ if (rv != noErr) { ++ LOG("AudioObjectSetPropertyData/kAudioAggregateDevicePropertyMasterSubDevice, rv=%d", rv); ++ return CUBEB_ERROR; ++ } + + return CUBEB_OK; + } + + static int +-audiounit_get_preferred_sample_rate(cubeb * /* ctx */, uint32_t * rate) ++audiounit_activate_clock_drift_compensation(const AudioDeviceID aggregate_device_id) + { +-#if TARGET_OS_IPHONE +- //TODO +- return CUBEB_ERROR_NOT_SUPPORTED; +-#else +- UInt32 size; +- OSStatus r; +- Float64 fsamplerate; +- AudioDeviceID output_device_id; +- AudioObjectPropertyAddress samplerate_address = { +- kAudioDevicePropertyNominalSampleRate, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster +- }; ++ assert(aggregate_device_id != kAudioObjectUnknown); ++ AudioObjectPropertyAddress address_owned = { kAudioObjectPropertyOwnedObjects, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; + +- if (audiounit_get_output_device_id(&output_device_id) != CUBEB_OK) { ++ UInt32 qualifier_data_size = sizeof(AudioObjectID); ++ AudioClassID class_id = kAudioSubDeviceClassID; ++ void * qualifier_data = &class_id; ++ UInt32 size = 0; ++ OSStatus rv = AudioObjectGetPropertyDataSize(aggregate_device_id, ++ &address_owned, ++ qualifier_data_size, ++ qualifier_data, ++ &size); ++ if (rv != noErr) { ++ LOG("AudioObjectGetPropertyDataSize/kAudioObjectPropertyOwnedObjects, rv=%d", rv); + return CUBEB_ERROR; + } + +- size = sizeof(fsamplerate); +- r = AudioObjectGetPropertyData(output_device_id, +- &samplerate_address, +- 0, +- NULL, +- &size, +- &fsamplerate); ++ UInt32 subdevices_num = 0; ++ subdevices_num = size / sizeof(AudioObjectID); ++ AudioObjectID sub_devices[subdevices_num]; ++ size = sizeof(sub_devices); + +- if (r != noErr) { ++ rv = AudioObjectGetPropertyData(aggregate_device_id, ++ &address_owned, ++ qualifier_data_size, ++ qualifier_data, ++ &size, ++ sub_devices); ++ if (rv != noErr) { ++ LOG("AudioObjectGetPropertyData/kAudioObjectPropertyOwnedObjects, rv=%d", rv); + return CUBEB_ERROR; + } + +- *rate = static_cast(fsamplerate); +-#endif ++ AudioObjectPropertyAddress address_drift = { kAudioSubDevicePropertyDriftCompensation, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster }; ++ ++ // Start from the second device since the first is the master clock ++ for (UInt32 i = 1; i < subdevices_num; ++i) { ++ UInt32 drift_compensation_value = 1; ++ rv = AudioObjectSetPropertyData(sub_devices[i], ++ &address_drift, ++ 0, ++ nullptr, ++ sizeof(UInt32), ++ &drift_compensation_value); ++ if (rv != noErr) { ++ LOG("AudioObjectSetPropertyData/kAudioSubDevicePropertyDriftCompensation, rv=%d", rv); ++ return CUBEB_OK; ++ } ++ } + return CUBEB_OK; + } + +-static OSStatus audiounit_remove_device_listener(cubeb * context); ++static int audiounit_destroy_aggregate_device(AudioObjectID plugin_id, AudioDeviceID * aggregate_device_id); ++static void audiounit_get_available_samplerate(AudioObjectID devid, AudioObjectPropertyScope scope, ++ uint32_t * min, uint32_t * max, uint32_t * def); ++static int ++audiounit_create_device_from_hwdev(cubeb_device_info * dev_info, AudioObjectID devid, cubeb_device_type type); ++static void audiounit_device_destroy(cubeb_device_info * device); + + static void +-audiounit_destroy(cubeb * ctx) +-{ +- // Disabling this assert for bug 1083664 -- we seem to leak a stream +- // assert(ctx->active_streams == 0); +- +- { +- auto_lock lock(ctx->mutex); +- /* Unregister the callback if necessary. */ +- if(ctx->collection_changed_callback) { +- audiounit_remove_device_listener(ctx); ++audiounit_workaround_for_airpod(cubeb_stream * stm) ++{ ++ cubeb_device_info input_device_info; ++ audiounit_create_device_from_hwdev(&input_device_info, stm->input_device.id, CUBEB_DEVICE_TYPE_INPUT); ++ ++ cubeb_device_info output_device_info; ++ audiounit_create_device_from_hwdev(&output_device_info, stm->output_device.id, CUBEB_DEVICE_TYPE_OUTPUT); ++ ++ std::string input_name_str(input_device_info.friendly_name); ++ std::string output_name_str(output_device_info.friendly_name); ++ ++ if(input_name_str.find("AirPods") != std::string::npos && ++ output_name_str.find("AirPods") != std::string::npos) { ++ uint32_t input_min_rate = 0; ++ uint32_t input_max_rate = 0; ++ uint32_t input_nominal_rate = 0; ++ audiounit_get_available_samplerate(stm->input_device.id, kAudioObjectPropertyScopeGlobal, ++ &input_min_rate, &input_max_rate, &input_nominal_rate); ++ LOG("(%p) Input device %u, name: %s, min: %u, max: %u, nominal rate: %u", stm, stm->input_device.id ++ , input_device_info.friendly_name, input_min_rate, input_max_rate, input_nominal_rate); ++ uint32_t output_min_rate = 0; ++ uint32_t output_max_rate = 0; ++ uint32_t output_nominal_rate = 0; ++ audiounit_get_available_samplerate(stm->output_device.id, kAudioObjectPropertyScopeGlobal, ++ &output_min_rate, &output_max_rate, &output_nominal_rate); ++ LOG("(%p) Output device %u, name: %s, min: %u, max: %u, nominal rate: %u", stm, stm->output_device.id ++ , output_device_info.friendly_name, output_min_rate, output_max_rate, output_nominal_rate); ++ ++ Float64 rate = input_nominal_rate; ++ AudioObjectPropertyAddress addr = {kAudioDevicePropertyNominalSampleRate, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster}; ++ ++ OSStatus rv = AudioObjectSetPropertyData(stm->aggregate_device_id, ++ &addr, ++ 0, ++ nullptr, ++ sizeof(Float64), ++ &rate); ++ if (rv != noErr) { ++ LOG("Non fatal error, AudioObjectSetPropertyData/kAudioDevicePropertyNominalSampleRate, rv=%d", rv); + } + } +- +- ctx->~cubeb(); +- free(ctx); ++ audiounit_device_destroy(&input_device_info); ++ audiounit_device_destroy(&output_device_info); + } + +-static void audiounit_stream_destroy(cubeb_stream * stm); +- ++/* ++ * Aggregate Device is a virtual audio interface which utilizes inputs and outputs ++ * of one or more physical audio interfaces. It is possible to use the clock of ++ * one of the devices as a master clock for all the combined devices and enable ++ * drift compensation for the devices that are not designated clock master. ++ * ++ * Creating a new aggregate device programmatically requires [0][1]: ++ * 1. Locate the base plug-in ("com.apple.audio.CoreAudio") ++ * 2. Create a dictionary that describes the aggregate device ++ * (don't add sub-devices in that step, prone to fail [0]) ++ * 3. Ask the base plug-in to create the aggregate device (blank) ++ * 4. Add the array of sub-devices. ++ * 5. Set the master device (1st output device in our case) ++ * 6. Enable drift compensation for the non-master devices ++ * ++ * [0] https://lists.apple.com/archives/coreaudio-api/2006/Apr/msg00092.html ++ * [1] https://lists.apple.com/archives/coreaudio-api/2005/Jul/msg00150.html ++ * [2] CoreAudio.framework/Headers/AudioHardware.h ++ * */ + static int +-audio_stream_desc_init(AudioStreamBasicDescription * ss, +- const cubeb_stream_params * stream_params) ++audiounit_create_aggregate_device(cubeb_stream * stm) + { +- switch (stream_params->format) { +- case CUBEB_SAMPLE_S16LE: +- ss->mBitsPerChannel = 16; +- ss->mFormatFlags = kAudioFormatFlagIsSignedInteger; +- break; +- case CUBEB_SAMPLE_S16BE: +- ss->mBitsPerChannel = 16; +- ss->mFormatFlags = kAudioFormatFlagIsSignedInteger | +- kAudioFormatFlagIsBigEndian; +- break; +- case CUBEB_SAMPLE_FLOAT32LE: +- ss->mBitsPerChannel = 32; +- ss->mFormatFlags = kAudioFormatFlagIsFloat; +- break; +- case CUBEB_SAMPLE_FLOAT32BE: +- ss->mBitsPerChannel = 32; +- ss->mFormatFlags = kAudioFormatFlagIsFloat | +- kAudioFormatFlagIsBigEndian; +- break; +- default: +- return CUBEB_ERROR_INVALID_FORMAT; ++ int r = audiounit_create_blank_aggregate_device(&stm->plugin_id, &stm->aggregate_device_id); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Failed to create blank aggregate device", stm); ++ return CUBEB_ERROR; + } + +- ss->mFormatID = kAudioFormatLinearPCM; +- ss->mFormatFlags |= kLinearPCMFormatFlagIsPacked; +- ss->mSampleRate = stream_params->rate; +- ss->mChannelsPerFrame = stream_params->channels; ++ r = audiounit_set_aggregate_sub_device_list(stm->aggregate_device_id, stm->input_device.id, stm->output_device.id); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Failed to set aggregate sub-device list", stm); ++ audiounit_destroy_aggregate_device(stm->plugin_id, &stm->aggregate_device_id); ++ return CUBEB_ERROR; ++ } + +- ss->mBytesPerFrame = (ss->mBitsPerChannel / 8) * ss->mChannelsPerFrame; +- ss->mFramesPerPacket = 1; +- ss->mBytesPerPacket = ss->mBytesPerFrame * ss->mFramesPerPacket; ++ r = audiounit_set_master_aggregate_device(stm->aggregate_device_id); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Failed to set master sub-device for aggregate device", stm); ++ audiounit_destroy_aggregate_device(stm->plugin_id, &stm->aggregate_device_id); ++ return CUBEB_ERROR; ++ } + +- ss->mReserved = 0; ++ r = audiounit_activate_clock_drift_compensation(stm->aggregate_device_id); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Failed to activate clock drift compensation for aggregate device", stm); ++ audiounit_destroy_aggregate_device(stm->plugin_id, &stm->aggregate_device_id); ++ return CUBEB_ERROR; ++ } ++ ++ audiounit_workaround_for_airpod(stm); ++ ++ return CUBEB_OK; ++} + ++static int ++audiounit_destroy_aggregate_device(AudioObjectID plugin_id, AudioDeviceID * aggregate_device_id) ++{ ++ assert(aggregate_device_id && ++ *aggregate_device_id != kAudioDeviceUnknown && ++ plugin_id != kAudioObjectUnknown); ++ AudioObjectPropertyAddress destroy_aggregate_device_addr = { kAudioPlugInDestroyAggregateDevice, ++ kAudioObjectPropertyScopeGlobal, ++ kAudioObjectPropertyElementMaster}; ++ UInt32 size; ++ OSStatus rv = AudioObjectGetPropertyDataSize(plugin_id, ++ &destroy_aggregate_device_addr, ++ 0, ++ NULL, ++ &size); ++ if (rv != noErr) { ++ LOG("AudioObjectGetPropertyDataSize/kAudioPlugInDestroyAggregateDevice, rv=%d", rv); ++ return CUBEB_ERROR; ++ } ++ ++ rv = AudioObjectGetPropertyData(plugin_id, ++ &destroy_aggregate_device_addr, ++ 0, ++ NULL, ++ &size, ++ aggregate_device_id); ++ if (rv != noErr) { ++ LOG("AudioObjectGetPropertyData/kAudioPlugInDestroyAggregateDevice, rv=%d", rv); ++ return CUBEB_ERROR; ++ } ++ ++ LOG("Destroyed aggregate device %d", *aggregate_device_id); ++ *aggregate_device_id = kAudioObjectUnknown; + return CUBEB_OK; + } + + static int +-audiounit_create_unit(AudioUnit * unit, +- bool is_input, +- const cubeb_stream_params * /* stream_params */, +- cubeb_devid device) ++audiounit_new_unit_instance(AudioUnit * unit, device_info * device) + { + AudioComponentDescription desc; + AudioComponent comp; +- UInt32 enable; +- AudioDeviceID devid; + OSStatus rv; + + desc.componentType = kAudioUnitType_Output; + #if TARGET_OS_IPHONE +- bool use_default_output = false; + desc.componentSubType = kAudioUnitSubType_RemoteIO; + #else + // Use the DefaultOutputUnit for output when no device is specified + // so we retain automatic output device switching when the default + // changes. Once we have complete support for device notifications + // and switching, we can use the AUHAL for everything. +- bool use_default_output = device == NULL && !is_input; +- if (use_default_output) { ++ if ((device->flags & DEV_SYSTEM_DEFAULT) && ++ (device->flags & DEV_OUTPUT)) { + desc.componentSubType = kAudioUnitSubType_DefaultOutput; + } else { + desc.componentSubType = kAudioUnitSubType_HALOutput; +@@ -1144,96 +2020,118 @@ audiounit_create_unit(AudioUnit * unit, + + rv = AudioComponentInstanceNew(comp, unit); + if (rv != noErr) { +- PRINT_ERROR_CODE("AudioComponentInstanceNew", rv); ++ LOG("AudioComponentInstanceNew rv=%d", rv); + return CUBEB_ERROR; + } ++ return CUBEB_OK; ++} + +- if (!use_default_output) { +- enable = 1; +- rv = AudioUnitSetProperty(*unit, kAudioOutputUnitProperty_EnableIO, +- is_input ? kAudioUnitScope_Input : kAudioUnitScope_Output, +- is_input ? AU_IN_BUS : AU_OUT_BUS, &enable, sizeof(UInt32)); +- if (rv != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO", rv); +- return CUBEB_ERROR; +- } +- +- enable = 0; +- rv = AudioUnitSetProperty(*unit, kAudioOutputUnitProperty_EnableIO, +- is_input ? kAudioUnitScope_Output : kAudioUnitScope_Input, +- is_input ? AU_OUT_BUS : AU_IN_BUS, &enable, sizeof(UInt32)); +- if (rv != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO", rv); +- return CUBEB_ERROR; +- } ++enum enable_state { ++ DISABLE, ++ ENABLE, ++}; + +- if (device == NULL) { +- assert(is_input); +- devid = audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT); +- } else { +- devid = reinterpret_cast(device); +- } +- rv = AudioUnitSetProperty(*unit, kAudioOutputUnitProperty_CurrentDevice, +- kAudioUnitScope_Global, +- is_input ? AU_IN_BUS : AU_OUT_BUS, +- &devid, sizeof(AudioDeviceID)); +- if (rv != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/kAudioOutputUnitProperty_CurrentDevice", rv); +- return CUBEB_ERROR; +- } ++static int ++audiounit_enable_unit_scope(AudioUnit * unit, io_side side, enable_state state) ++{ ++ OSStatus rv; ++ UInt32 enable = state; ++ rv = AudioUnitSetProperty(*unit, kAudioOutputUnitProperty_EnableIO, ++ (side == io_side::INPUT) ? kAudioUnitScope_Input : kAudioUnitScope_Output, ++ (side == io_side::INPUT) ? AU_IN_BUS : AU_OUT_BUS, ++ &enable, ++ sizeof(UInt32)); ++ if (rv != noErr) { ++ LOG("AudioUnitSetProperty/kAudioOutputUnitProperty_EnableIO rv=%d", rv); ++ return CUBEB_ERROR; + } +- + return CUBEB_OK; + } + + static int +-audiounit_init_input_linear_buffer(cubeb_stream * stream, uint32_t capacity) ++audiounit_create_unit(AudioUnit * unit, device_info * device) + { +- if (stream->input_desc.mFormatFlags & kAudioFormatFlagIsSignedInteger) { +- stream->input_linear_buffer = new auto_array_wrapper( +- new auto_array(capacity * +- stream->input_buffer_frames * +- stream->input_desc.mChannelsPerFrame) ); +- } else { +- stream->input_linear_buffer = new auto_array_wrapper( +- new auto_array(capacity * +- stream->input_buffer_frames * +- stream->input_desc.mChannelsPerFrame) ); ++ assert(*unit == nullptr); ++ assert(device); ++ ++ OSStatus rv; ++ int r; ++ ++ r = audiounit_new_unit_instance(unit, device); ++ if (r != CUBEB_OK) { ++ return r; + } ++ assert(*unit); + +- if (!stream->input_linear_buffer) { +- return CUBEB_ERROR; ++ if ((device->flags & DEV_SYSTEM_DEFAULT) && ++ (device->flags & DEV_OUTPUT)) { ++ return CUBEB_OK; + } + +- assert(stream->input_linear_buffer->length() == 0); + +- // Pre-buffer silence if needed +- if (capacity != 1) { +- size_t silence_size = stream->input_buffer_frames * +- stream->input_desc.mChannelsPerFrame; +- stream->input_linear_buffer->push_silence(silence_size); ++ if (device->flags & DEV_INPUT) { ++ r = audiounit_enable_unit_scope(unit, io_side::INPUT, ENABLE); ++ if (r != CUBEB_OK) { ++ LOG("Failed to enable audiounit input scope"); ++ return r; ++ } ++ r = audiounit_enable_unit_scope(unit, io_side::OUTPUT, DISABLE); ++ if (r != CUBEB_OK) { ++ LOG("Failed to disable audiounit output scope"); ++ return r; ++ } ++ } else if (device->flags & DEV_OUTPUT) { ++ r = audiounit_enable_unit_scope(unit, io_side::OUTPUT, ENABLE); ++ if (r != CUBEB_OK) { ++ LOG("Failed to enable audiounit output scope"); ++ return r; ++ } ++ r = audiounit_enable_unit_scope(unit, io_side::INPUT, DISABLE); ++ if (r != CUBEB_OK) { ++ LOG("Failed to disable audiounit input scope"); ++ return r; ++ } ++ } else { ++ assert(false); ++ } + +- assert(stream->input_linear_buffer->length() == silence_size); ++ rv = AudioUnitSetProperty(*unit, ++ kAudioOutputUnitProperty_CurrentDevice, ++ kAudioUnitScope_Global, ++ 0, ++ &device->id, sizeof(AudioDeviceID)); ++ if (rv != noErr) { ++ LOG("AudioUnitSetProperty/kAudioOutputUnitProperty_CurrentDevice rv=%d", rv); ++ return CUBEB_ERROR; + } + + return CUBEB_OK; + } + +-static void +-audiounit_destroy_input_linear_buffer(cubeb_stream * stream) ++static int ++audiounit_init_input_linear_buffer(cubeb_stream * stream, uint32_t capacity) + { +- delete stream->input_linear_buffer; ++ uint32_t size = capacity * stream->latency_frames * stream->input_desc.mChannelsPerFrame; ++ if (stream->input_desc.mFormatFlags & kAudioFormatFlagIsSignedInteger) { ++ stream->input_linear_buffer.reset(new auto_array_wrapper_impl(size)); ++ } else { ++ stream->input_linear_buffer.reset(new auto_array_wrapper_impl(size)); ++ } ++ assert(stream->input_linear_buffer->length() == 0); ++ ++ return CUBEB_OK; + } + + static uint32_t + audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + { + // For the 1st stream set anything within safe min-max +- assert(stm->context->active_streams > 0); +- if (stm->context->active_streams == 1) { +- return std::max(std::min(latency_frames, SAFE_MAX_LATENCY_FRAMES), ++ assert(audiounit_active_streams(stm->context) > 0); ++ if (audiounit_active_streams(stm->context) == 1) { ++ return max(min(latency_frames, SAFE_MAX_LATENCY_FRAMES), + SAFE_MIN_LATENCY_FRAMES); + } ++ assert(stm->output_unit); + + // If more than one stream operates in parallel + // allow only lower values of latency +@@ -1248,11 +2146,11 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + &output_buffer_size, + &size); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize", r); ++ LOG("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize rv=%d", r); + return 0; + } + +- output_buffer_size = std::max(std::min(output_buffer_size, SAFE_MAX_LATENCY_FRAMES), ++ output_buffer_size = max(min(output_buffer_size, SAFE_MAX_LATENCY_FRAMES), + SAFE_MIN_LATENCY_FRAMES); + } + +@@ -1265,18 +2163,18 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + &input_buffer_size, + &size); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize", r); ++ LOG("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize rv=%d", r); + return 0; + } + +- input_buffer_size = std::max(std::min(input_buffer_size, SAFE_MAX_LATENCY_FRAMES), ++ input_buffer_size = max(min(input_buffer_size, SAFE_MAX_LATENCY_FRAMES), + SAFE_MIN_LATENCY_FRAMES); + } + + // Every following active streams can only set smaller latency + UInt32 upper_latency_limit = 0; + if (input_buffer_size != 0 && output_buffer_size != 0) { +- upper_latency_limit = std::min(input_buffer_size, output_buffer_size); ++ upper_latency_limit = min(input_buffer_size, output_buffer_size); + } else if (input_buffer_size != 0) { + upper_latency_limit = input_buffer_size; + } else if (output_buffer_size != 0) { +@@ -1285,7 +2183,7 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + upper_latency_limit = SAFE_MAX_LATENCY_FRAMES; + } + +- return std::max(std::min(latency_frames, upper_latency_limit), ++ return max(min(latency_frames, upper_latency_limit), + SAFE_MIN_LATENCY_FRAMES); + } + +@@ -1300,18 +2198,18 @@ audiounit_clamp_latency(cubeb_stream * stm, uint32_t latency_frames) + static void + buffer_size_changed_callback(void * inClientData, + AudioUnit inUnit, +- AudioUnitPropertyID inPropertyID, +- AudioUnitScope inScope, +- AudioUnitElement inElement) ++ AudioUnitPropertyID inPropertyID, ++ AudioUnitScope inScope, ++ AudioUnitElement inElement) + { + cubeb_stream * stm = (cubeb_stream *)inClientData; + + AudioUnit au = inUnit; + AudioUnitScope au_scope = kAudioUnitScope_Input; + AudioUnitElement au_element = inElement; +- const char * au_type = "output"; ++ char const * au_type = "output"; + +- if (au == stm->input_unit) { ++ if (AU_IN_BUS == inElement) { + au_scope = kAudioUnitScope_Output; + au_type = "input"; + } +@@ -1342,24 +2240,17 @@ buffer_size_changed_callback(void * inClientData, + } + } + +-enum set_buffer_size_side { +- INPUT, +- OUTPUT, +-}; +- + static int +-audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buffer_size_side set_side) ++audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, io_side side) + { + AudioUnit au = stm->output_unit; + AudioUnitScope au_scope = kAudioUnitScope_Input; + AudioUnitElement au_element = AU_OUT_BUS; +- const char * au_type = "output"; + +- if (set_side == INPUT) { ++ if (side == io_side::INPUT) { + au = stm->input_unit; + au_scope = kAudioUnitScope_Output; + au_element = AU_IN_BUS; +- au_type = "input"; + } + + uint32_t buffer_frames = 0; +@@ -1371,16 +2262,12 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + &buffer_frames, + &size); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitGetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitGetProperty/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + return CUBEB_ERROR; + } + + if (new_size_frames == buffer_frames) { +- LOG("(%p) No need to update %s buffer size already %u frames", stm, au_type, buffer_frames); ++ LOG("(%p) No need to update %s buffer size already %u frames", stm, to_string(side), buffer_frames); + return CUBEB_OK; + } + +@@ -1389,11 +2276,7 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + buffer_size_changed_callback, + stm); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + return CUBEB_ERROR; + } + +@@ -1406,22 +2289,14 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + &new_size_frames, + sizeof(new_size_frames)); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitSetProperty/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + + r = AudioUnitRemovePropertyListenerWithUserData(au, + kAudioDevicePropertyBufferFrameSize, + buffer_size_changed_callback, + stm); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + } + + return CUBEB_ERROR; +@@ -1443,11 +2318,7 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + buffer_size_changed_callback, + stm); + if (r != noErr) { +- if (set_side == INPUT) { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/input/kAudioDevicePropertyBufferFrameSize", r); +- } else { +- PRINT_ERROR_CODE("AudioUnitAddPropertyListener/output/kAudioDevicePropertyBufferFrameSize", r); +- } ++ LOG("AudioUnitAddPropertyListener/%s/kAudioDevicePropertyBufferFrameSize rv=%d", to_string(side), r); + return CUBEB_ERROR; + } + +@@ -1456,13 +2327,15 @@ audiounit_set_buffer_size(cubeb_stream * stm, uint32_t new_size_frames, set_buff + return CUBEB_ERROR; + } + +- LOG("(%p) %s buffer size changed to %u frames.", stm, au_type, new_size_frames); ++ LOG("(%p) %s buffer size changed to %u frames.", stm, to_string(side), new_size_frames); + return CUBEB_OK; + } + + static int + audiounit_configure_input(cubeb_stream * stm) + { ++ assert(stm && stm->input_unit); ++ + int r = 0; + UInt32 size; + AURenderCallbackStruct aurcbs_in; +@@ -1481,7 +2354,7 @@ audiounit_configure_input(cubeb_stream * stm) + &input_hw_desc, + &size); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat", r); ++ LOG("AudioUnitGetProperty/input/kAudioUnitProperty_StreamFormat rv=%d", r); + return CUBEB_ERROR; + } + stm->input_hw_rate = input_hw_desc.mSampleRate; +@@ -1495,8 +2368,7 @@ audiounit_configure_input(cubeb_stream * stm) + } + + // Use latency to set buffer size +- stm->input_buffer_frames = stm->latency_frames; +- r = audiounit_set_buffer_size(stm, stm->input_buffer_frames, INPUT); ++ r = audiounit_set_buffer_size(stm, stm->latency_frames, io_side::INPUT); + if (r != CUBEB_OK) { + LOG("(%p) Error in change input buffer size.", stm); + return CUBEB_ERROR; +@@ -1514,7 +2386,7 @@ audiounit_configure_input(cubeb_stream * stm) + &src_desc, + sizeof(AudioStreamBasicDescription)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat", r); ++ LOG("AudioUnitSetProperty/input/kAudioUnitProperty_StreamFormat rv=%d", r); + return CUBEB_ERROR; + } + +@@ -1523,10 +2395,10 @@ audiounit_configure_input(cubeb_stream * stm) + kAudioUnitProperty_MaximumFramesPerSlice, + kAudioUnitScope_Global, + AU_IN_BUS, +- &stm->input_buffer_frames, ++ &stm->latency_frames, + sizeof(UInt32)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice", r); ++ LOG("AudioUnitSetProperty/input/kAudioUnitProperty_MaximumFramesPerSlice rv=%d", r); + return CUBEB_ERROR; + } + +@@ -1540,7 +2412,6 @@ audiounit_configure_input(cubeb_stream * stm) + return CUBEB_ERROR; + } + +- assert(stm->input_unit != NULL); + aurcbs_in.inputProc = audiounit_input_callback; + aurcbs_in.inputProcRefCon = stm; + +@@ -1551,9 +2422,12 @@ audiounit_configure_input(cubeb_stream * stm) + &aurcbs_in, + sizeof(aurcbs_in)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback", r); ++ LOG("AudioUnitSetProperty/input/kAudioOutputUnitProperty_SetInputCallback rv=%d", r); + return CUBEB_ERROR; + } ++ ++ stm->frames_read = 0; ++ + LOG("(%p) Input audiounit init successfully.", stm); + + return CUBEB_OK; +@@ -1562,6 +2436,8 @@ audiounit_configure_input(cubeb_stream * stm) + static int + audiounit_configure_output(cubeb_stream * stm) + { ++ assert(stm && stm->output_unit); ++ + int r; + AURenderCallbackStruct aurcbs_out; + UInt32 size; +@@ -1588,11 +2464,30 @@ audiounit_configure_output(cubeb_stream * stm) + &output_hw_desc, + &size); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/output/tkAudioUnitProperty_StreamFormat", r); ++ LOG("AudioUnitGetProperty/output/kAudioUnitProperty_StreamFormat rv=%d", r); + return CUBEB_ERROR; + } + stm->output_hw_rate = output_hw_desc.mSampleRate; + LOG("(%p) Output device sampling rate: %.2f", stm, output_hw_desc.mSampleRate); ++ stm->context->channels = output_hw_desc.mChannelsPerFrame; ++ ++ // Set the input layout to match the output device layout. ++ audiounit_layout_init(stm, io_side::OUTPUT); ++ if (stm->context->channels != stm->output_stream_params.channels || ++ stm->context->layout != stm->output_stream_params.layout) { ++ LOG("Incompatible channel layouts detected, setting up remixer"); ++ audiounit_init_mixer(stm); ++ // We will be remixing the data before it reaches the output device. ++ // We need to adjust the number of channels and other ++ // AudioStreamDescription details. ++ stm->output_desc.mChannelsPerFrame = stm->context->channels; ++ stm->output_desc.mBytesPerFrame = (stm->output_desc.mBitsPerChannel / 8) * ++ stm->output_desc.mChannelsPerFrame; ++ stm->output_desc.mBytesPerPacket = ++ stm->output_desc.mBytesPerFrame * stm->output_desc.mFramesPerPacket; ++ } else { ++ stm->mixer = nullptr; ++ } + + r = AudioUnitSetProperty(stm->output_unit, + kAudioUnitProperty_StreamFormat, +@@ -1601,11 +2496,11 @@ audiounit_configure_output(cubeb_stream * stm) + &stm->output_desc, + sizeof(AudioStreamBasicDescription)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat", r); ++ LOG("AudioUnitSetProperty/output/kAudioUnitProperty_StreamFormat rv=%d", r); + return CUBEB_ERROR; + } + +- r = audiounit_set_buffer_size(stm, stm->latency_frames, OUTPUT); ++ r = audiounit_set_buffer_size(stm, stm->latency_frames, io_side::OUTPUT); + if (r != CUBEB_OK) { + LOG("(%p) Error in change output buffer size.", stm); + return CUBEB_ERROR; +@@ -1619,11 +2514,10 @@ audiounit_configure_output(cubeb_stream * stm) + &stm->latency_frames, + sizeof(UInt32)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_MaximumFramesPerSlice", r); ++ LOG("AudioUnitSetProperty/output/kAudioUnitProperty_MaximumFramesPerSlice rv=%d", r); + return CUBEB_ERROR; + } + +- assert(stm->output_unit != NULL); + aurcbs_out.inputProc = audiounit_output_callback; + aurcbs_out.inputProcRefCon = stm; + r = AudioUnitSetProperty(stm->output_unit, +@@ -1633,10 +2527,12 @@ audiounit_configure_output(cubeb_stream * stm) + &aurcbs_out, + sizeof(aurcbs_out)); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback", r); ++ LOG("AudioUnitSetProperty/output/kAudioUnitProperty_SetRenderCallback rv=%d", r); + return CUBEB_ERROR; + } + ++ stm->frames_written = 0; ++ + LOG("(%p) Output audiounit init successfully.", stm); + return CUBEB_OK; + } +@@ -1646,11 +2542,37 @@ audiounit_setup_stream(cubeb_stream * stm) + { + stm->mutex.assert_current_thread_owns(); + ++ if ((stm->input_stream_params.prefs & CUBEB_STREAM_PREF_LOOPBACK) || ++ (stm->output_stream_params.prefs & CUBEB_STREAM_PREF_LOOPBACK)) { ++ LOG("(%p) Loopback not supported for audiounit.", stm); ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ + int r = 0; ++ ++ device_info in_dev_info = stm->input_device; ++ device_info out_dev_info = stm->output_device; ++ ++ if (has_input(stm) && has_output(stm) && ++ stm->input_device.id != stm->output_device.id) { ++ r = audiounit_create_aggregate_device(stm); ++ if (r != CUBEB_OK) { ++ stm->aggregate_device_id = kAudioObjectUnknown; ++ LOG("(%p) Create aggregate devices failed.", stm); ++ // !!!NOTE: It is not necessary to return here. If it does not ++ // return it will fallback to the old implementation. The intention ++ // is to investigate how often it fails. I plan to remove ++ // it after a couple of weeks. ++ return r; ++ } else { ++ in_dev_info.id = out_dev_info.id = stm->aggregate_device_id; ++ in_dev_info.flags = DEV_INPUT; ++ out_dev_info.flags = DEV_OUTPUT; ++ } ++ } ++ + if (has_input(stm)) { +- r = audiounit_create_unit(&stm->input_unit, true, +- &stm->input_stream_params, +- stm->input_device); ++ r = audiounit_create_unit(&stm->input_unit, &in_dev_info); + if (r != CUBEB_OK) { + LOG("(%p) AudioUnit creation for input failed.", stm); + return r; +@@ -1658,9 +2580,7 @@ audiounit_setup_stream(cubeb_stream * stm) + } + + if (has_output(stm)) { +- r = audiounit_create_unit(&stm->output_unit, false, +- &stm->output_stream_params, +- stm->output_device); ++ r = audiounit_create_unit(&stm->output_unit, &out_dev_info); + if (r != CUBEB_OK) { + LOG("(%p) AudioUnit creation for output failed.", stm); + return r; +@@ -1668,20 +2588,20 @@ audiounit_setup_stream(cubeb_stream * stm) + } + + /* Latency cannot change if another stream is operating in parallel. In this case +- * latecy is set to the other stream value. */ +- if (stm->context->active_streams > 1) { ++ * latency is set to the other stream value. */ ++ if (audiounit_active_streams(stm->context) > 1) { + LOG("(%p) More than one active stream, use global latency.", stm); + stm->latency_frames = stm->context->global_latency_frames; + } else { + /* Silently clamp the latency down to the platform default, because we +- * synthetize the clock from the callbacks, and we want the clock to update +- * often. */ ++ * synthetize the clock from the callbacks, and we want the clock to update ++ * often. */ + stm->latency_frames = audiounit_clamp_latency(stm, stm->latency_frames); +- assert(stm->latency_frames); // Ungly error check +- audiounit_set_global_latency(stm, stm->latency_frames); ++ assert(stm->latency_frames); // Ugly error check ++ audiounit_set_global_latency(stm->context, stm->latency_frames); + } + +- /* Setup Input Stream! */ ++ /* Configure I/O stream */ + if (has_input(stm)) { + r = audiounit_configure_input(stm); + if (r != CUBEB_OK) { +@@ -1690,7 +2610,6 @@ audiounit_setup_stream(cubeb_stream * stm) + } + } + +- /* Setup Output Stream! */ + if (has_output(stm)) { + r = audiounit_configure_output(stm); + if (r != CUBEB_OK) { +@@ -1762,13 +2681,13 @@ audiounit_setup_stream(cubeb_stream * stm) + + /* Create resampler. Output params are unchanged + * because we do not need conversion on the output. */ +- stm->resampler = cubeb_resampler_create(stm, +- has_input(stm) ? &input_unconverted_params : NULL, +- has_output(stm) ? &stm->output_stream_params : NULL, +- target_sample_rate, +- stm->data_callback, +- stm->user_ptr, +- CUBEB_RESAMPLER_QUALITY_DESKTOP); ++ stm->resampler.reset(cubeb_resampler_create(stm, ++ has_input(stm) ? &input_unconverted_params : NULL, ++ has_output(stm) ? &stm->output_stream_params : NULL, ++ target_sample_rate, ++ stm->data_callback, ++ stm->user_ptr, ++ CUBEB_RESAMPLER_QUALITY_DESKTOP)); + if (!stm->resampler) { + LOG("(%p) Could not create resampler.", stm); + return CUBEB_ERROR; +@@ -1777,7 +2696,7 @@ audiounit_setup_stream(cubeb_stream * stm) + if (stm->input_unit != NULL) { + r = AudioUnitInitialize(stm->input_unit); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitInitialize/input", r); ++ LOG("AudioUnitInitialize/input rv=%d", r); + return CUBEB_ERROR; + } + } +@@ -1785,9 +2704,17 @@ audiounit_setup_stream(cubeb_stream * stm) + if (stm->output_unit != NULL) { + r = AudioUnitInitialize(stm->output_unit); + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitInitialize/output", r); ++ LOG("AudioUnitInitialize/output rv=%d", r); + return CUBEB_ERROR; + } ++ ++ stm->current_latency_frames = audiounit_get_device_presentation_latency(stm->output_device.id, kAudioDevicePropertyScopeOutput); ++ ++ Float64 unit_s; ++ UInt32 size = sizeof(unit_s); ++ if (AudioUnitGetProperty(stm->output_unit, kAudioUnitProperty_Latency, kAudioUnitScope_Global, 0, &unit_s, &size) == noErr) { ++ stm->current_latency_frames += static_cast(unit_s * stm->output_desc.mSampleRate); ++ } + } + + if (stm->input_unit && stm->output_unit) { +@@ -1799,13 +2726,24 @@ audiounit_setup_stream(cubeb_stream * stm) + + r = audiounit_install_device_changed_callback(stm); + if (r != CUBEB_OK) { +- LOG("(%p) Could not install the device change callback.", stm); +- return r; ++ LOG("(%p) Could not install all device change callback.", stm); + } + ++ + return CUBEB_OK; + } + ++cubeb_stream::cubeb_stream(cubeb * context) ++ : context(context) ++ , resampler(nullptr, cubeb_resampler_destroy) ++ , mixer(nullptr, cubeb_mixer_destroy) ++{ ++ PodZero(&input_desc, 1); ++ PodZero(&output_desc, 1); ++} ++ ++static void audiounit_stream_destroy_internal(cubeb_stream * stm); ++ + static int + audiounit_stream_init(cubeb * context, + cubeb_stream ** stream, +@@ -1819,72 +2757,64 @@ audiounit_stream_init(cubeb * context, + cubeb_state_callback state_callback, + void * user_ptr) + { +- cubeb_stream * stm; +- int r; +- + assert(context); ++ auto_lock context_lock(context->mutex); ++ audiounit_increment_active_streams(context); ++ unique_ptr stm(new cubeb_stream(context), ++ audiounit_stream_destroy_internal); ++ int r; + *stream = NULL; +- + assert(latency_frames > 0); +- if (context->limit_streams && context->active_streams >= CUBEB_STREAM_MAX) { +- LOG("Reached the stream limit of %d", CUBEB_STREAM_MAX); +- return CUBEB_ERROR; +- } +- +- stm = (cubeb_stream *) calloc(1, sizeof(cubeb_stream)); +- assert(stm); +- // Placement new to call the ctors of cubeb_stream members. +- new (stm) cubeb_stream(); + + /* These could be different in the future if we have both + * full-duplex stream and different devices for input vs output. */ +- stm->context = context; + stm->data_callback = data_callback; + stm->state_callback = state_callback; + stm->user_ptr = user_ptr; + stm->latency_frames = latency_frames; +- stm->device_changed_callback = NULL; ++ ++ if ((input_device && !input_stream_params) || ++ (output_device && !output_stream_params)) { ++ return CUBEB_ERROR_INVALID_PARAMETER; ++ } + if (input_stream_params) { + stm->input_stream_params = *input_stream_params; +- stm->input_device = input_device; +- stm->is_default_input = input_device == nullptr || +- (audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT) == +- reinterpret_cast(input_device)); ++ r = audiounit_set_device_info(stm.get(), reinterpret_cast(input_device), io_side::INPUT); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Fail to set device info for input.", stm.get()); ++ return r; ++ } + } + if (output_stream_params) { + stm->output_stream_params = *output_stream_params; +- stm->output_device = output_device; ++ r = audiounit_set_device_info(stm.get(), reinterpret_cast(output_device), io_side::OUTPUT); ++ if (r != CUBEB_OK) { ++ LOG("(%p) Fail to set device info for output.", stm.get()); ++ return r; ++ } + } + +- /* Init data members where necessary */ +- stm->hw_latency_frames = UINT64_MAX; +- +- stm->switching_device = false; +- +- auto_lock context_lock(context->mutex); + { + // It's not critical to lock here, because no other thread has been started + // yet, but it allows to assert that the lock has been taken in + // `audiounit_setup_stream`. +- context->active_streams += 1; + auto_lock lock(stm->mutex); +- r = audiounit_setup_stream(stm); ++ r = audiounit_setup_stream(stm.get()); + } + + if (r != CUBEB_OK) { +- LOG("(%p) Could not setup the audiounit stream.", stm); +- audiounit_stream_destroy(stm); ++ LOG("(%p) Could not setup the audiounit stream.", stm.get()); + return r; + } + +- r = audiounit_install_system_changed_callback(stm); ++ r = audiounit_install_system_changed_callback(stm.get()); + if (r != CUBEB_OK) { +- LOG("(%p) Could not install the device change callback.", stm); ++ LOG("(%p) Could not install the device change callback.", stm.get()); + return r; + } + +- *stream = stm; +- LOG("Cubeb stream (%p) init successful.", stm); ++ *stream = stm.release(); ++ LOG("(%p) Cubeb stream init successful.", *stream); + return CUBEB_OK; + } + +@@ -1896,64 +2826,86 @@ audiounit_close_stream(cubeb_stream *stm) + if (stm->input_unit) { + AudioUnitUninitialize(stm->input_unit); + AudioComponentInstanceDispose(stm->input_unit); ++ stm->input_unit = nullptr; + } + +- audiounit_destroy_input_linear_buffer(stm); ++ stm->input_linear_buffer.reset(); + + if (stm->output_unit) { + AudioUnitUninitialize(stm->output_unit); + AudioComponentInstanceDispose(stm->output_unit); ++ stm->output_unit = nullptr; + } + +- cubeb_resampler_destroy(stm->resampler); ++ stm->resampler.reset(); ++ stm->mixer.reset(); ++ ++ if (stm->aggregate_device_id != kAudioObjectUnknown) { ++ audiounit_destroy_aggregate_device(stm->plugin_id, &stm->aggregate_device_id); ++ stm->aggregate_device_id = kAudioObjectUnknown; ++ } + } + + static void +-audiounit_stream_destroy(cubeb_stream * stm) ++audiounit_stream_destroy_internal(cubeb_stream *stm) + { +- stm->shutdown = true; ++ stm->context->mutex.assert_current_thread_owns(); + + int r = audiounit_uninstall_system_changed_callback(stm); + if (r != CUBEB_OK) { + LOG("(%p) Could not uninstall the device changed callback", stm); + } +- + r = audiounit_uninstall_device_changed_callback(stm); + if (r != CUBEB_OK) { +- LOG("(%p) Could not uninstall the device changed callback", stm); ++ LOG("(%p) Could not uninstall all device change listeners", stm); + } + +- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); ++ auto_lock lock(stm->mutex); ++ audiounit_close_stream(stm); ++ assert(audiounit_active_streams(stm->context) >= 1); ++ audiounit_decrement_active_streams(stm->context); ++} ++ ++static void ++audiounit_stream_destroy(cubeb_stream * stm) ++{ ++ if (!stm->shutdown.load()){ ++ auto_lock context_lock(stm->context->mutex); ++ audiounit_stream_stop_internal(stm); ++ stm->shutdown = true; ++ } + ++ stm->destroy_pending = true; + // Execute close in serial queue to avoid collision + // with reinit when un/plug devices + dispatch_sync(stm->context->serial_queue, ^() { +- auto_lock lock(stm->mutex); +- audiounit_close_stream(stm); ++ auto_lock context_lock(stm->context->mutex); ++ audiounit_stream_destroy_internal(stm); + }); + +- assert(stm->context->active_streams >= 1); +- stm->context->active_streams -= 1; +- + LOG("Cubeb stream (%p) destroyed successful.", stm); +- +- stm->~cubeb_stream(); +- free(stm); ++ delete stm; + } + +-void ++static int + audiounit_stream_start_internal(cubeb_stream * stm) + { + OSStatus r; + if (stm->input_unit != NULL) { + r = AudioOutputUnitStart(stm->input_unit); +- assert(r == 0); ++ if (r != noErr) { ++ LOG("AudioOutputUnitStart (input) rv=%d", r); ++ return CUBEB_ERROR; ++ } + } + if (stm->output_unit != NULL) { + r = AudioOutputUnitStart(stm->output_unit); +- assert(r == 0); ++ if (r != noErr) { ++ LOG("AudioOutputUnitStart (output) rv=%d", r); ++ return CUBEB_ERROR; ++ } + } ++ return CUBEB_OK; + } + + static int +@@ -1963,7 +2915,10 @@ audiounit_stream_start(cubeb_stream * stm) + stm->shutdown = false; + stm->draining = false; + +- audiounit_stream_start_internal(stm); ++ int r = audiounit_stream_start_internal(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } + + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); + +@@ -2002,9 +2957,12 @@ audiounit_stream_stop(cubeb_stream * stm) + static int + audiounit_stream_get_position(cubeb_stream * stm, uint64_t * position) + { +- auto_lock lock(stm->mutex); +- +- *position = stm->frames_played; ++ assert(stm); ++ if (stm->current_latency_frames > stm->frames_played) { ++ *position = 0; ++ } else { ++ *position = stm->frames_played - stm->current_latency_frames; ++ } + return CUBEB_OK; + } + +@@ -2015,74 +2973,7 @@ audiounit_stream_get_latency(cubeb_stream * stm, uint32_t * latency) + //TODO + return CUBEB_ERROR_NOT_SUPPORTED; + #else +- auto_lock lock(stm->mutex); +- if (stm->hw_latency_frames == UINT64_MAX) { +- UInt32 size; +- uint32_t device_latency_frames, device_safety_offset; +- double unit_latency_sec; +- AudioDeviceID output_device_id; +- OSStatus r; +- AudioObjectPropertyAddress latency_address = { +- kAudioDevicePropertyLatency, +- kAudioDevicePropertyScopeOutput, +- kAudioObjectPropertyElementMaster +- }; +- AudioObjectPropertyAddress safety_offset_address = { +- kAudioDevicePropertySafetyOffset, +- kAudioDevicePropertyScopeOutput, +- kAudioObjectPropertyElementMaster +- }; +- +- r = audiounit_get_output_device_id(&output_device_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- size = sizeof(unit_latency_sec); +- r = AudioUnitGetProperty(stm->output_unit, +- kAudioUnitProperty_Latency, +- kAudioUnitScope_Global, +- 0, +- &unit_latency_sec, +- &size); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetProperty/kAudioUnitProperty_Latency", r); +- return CUBEB_ERROR; +- } +- +- size = sizeof(device_latency_frames); +- r = AudioObjectGetPropertyData(output_device_id, +- &latency_address, +- 0, +- NULL, +- &size, +- &device_latency_frames); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetPropertyData/latency_frames", r); +- return CUBEB_ERROR; +- } +- +- size = sizeof(device_safety_offset); +- r = AudioObjectGetPropertyData(output_device_id, +- &safety_offset_address, +- 0, +- NULL, +- &size, +- &device_safety_offset); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitGetPropertyData/safety_offset", r); +- return CUBEB_ERROR; +- } +- +- /* This part is fixed and depend on the stream parameter and the hardware. */ +- stm->hw_latency_frames = +- static_cast(unit_latency_sec * stm->output_desc.mSampleRate) +- + device_latency_frames +- + device_safety_offset; +- } +- +- *latency = stm->hw_latency_frames + stm->current_latency_frames; +- ++ *latency = stm->total_output_latency_frames; + return CUBEB_OK; + #endif + } +@@ -2102,119 +2993,110 @@ audiounit_stream_get_volume(cubeb_stream * stm, float * volume) + return CUBEB_OK; + } + +-int audiounit_stream_set_volume(cubeb_stream * stm, float volume) ++static int ++audiounit_stream_set_volume(cubeb_stream * stm, float volume) + { ++ assert(stm->output_unit); + OSStatus r; +- + r = AudioUnitSetParameter(stm->output_unit, + kHALOutputParam_Volume, + kAudioUnitScope_Global, + 0, volume, 0); + + if (r != noErr) { +- PRINT_ERROR_CODE("AudioUnitSetParameter/kHALOutputParam_Volume", r); ++ LOG("AudioUnitSetParameter/kHALOutputParam_Volume rv=%d", r); + return CUBEB_ERROR; + } + return CUBEB_OK; + } + +-int audiounit_stream_set_panning(cubeb_stream * stm, float panning) ++unique_ptr convert_uint32_into_string(UInt32 data) + { +- if (stm->output_desc.mChannelsPerFrame > 2) { +- return CUBEB_ERROR_INVALID_PARAMETER; ++ // Simply create an empty string if no data. ++ size_t size = data == 0 ? 0 : 4; // 4 bytes for uint32. ++ auto str = unique_ptr { new char[size + 1] }; // + 1 for '\0'. ++ str[size] = '\0'; ++ if (size < 4) { ++ return str; + } + +- stm->panning.store(panning, std::memory_order_relaxed); +- return CUBEB_OK; ++ // Reverse 0xWXYZ into 0xZYXW. ++ str[0] = (char)(data >> 24); ++ str[1] = (char)(data >> 16); ++ str[2] = (char)(data >> 8); ++ str[3] = (char)(data); ++ return str; + } + +-int audiounit_stream_get_current_device(cubeb_stream * stm, +- cubeb_device ** const device) ++int audiounit_get_default_device_datasource(cubeb_device_type type, ++ UInt32 * data) + { +-#if TARGET_OS_IPHONE +- //TODO +- return CUBEB_ERROR_NOT_SUPPORTED; +-#else +- OSStatus r; +- UInt32 size; +- UInt32 data; +- char strdata[4]; +- AudioDeviceID output_device_id; +- AudioDeviceID input_device_id; +- +- AudioObjectPropertyAddress datasource_address = { +- kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, +- kAudioObjectPropertyElementMaster +- }; +- +- AudioObjectPropertyAddress datasource_address_input = { +- kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, +- kAudioObjectPropertyElementMaster +- }; +- +- *device = NULL; +- +- if (audiounit_get_output_device_id(&output_device_id) != CUBEB_OK) { +- return CUBEB_ERROR; +- } +- +- *device = new cubeb_device; +- if (!*device) { ++ AudioDeviceID id = audiounit_get_default_device_id(type); ++ if (id == kAudioObjectUnknown) { + return CUBEB_ERROR; + } +- PodZero(*device, 1); + +- size = sizeof(UInt32); +- /* This fails with some USB headset, so simply return an empty string. */ +- r = AudioObjectGetPropertyData(output_device_id, +- &datasource_address, +- 0, NULL, &size, &data); ++ UInt32 size = sizeof(*data); ++ /* This fails with some USB headsets (e.g., Plantronic .Audio 628). */ ++ OSStatus r = AudioObjectGetPropertyData(id, ++ type == CUBEB_DEVICE_TYPE_INPUT ? ++ &INPUT_DATA_SOURCE_PROPERTY_ADDRESS : ++ &OUTPUT_DATA_SOURCE_PROPERTY_ADDRESS, ++ 0, NULL, &size, data); + if (r != noErr) { +- size = 0; +- data = 0; +- } +- +- (*device)->output_name = new char[size + 1]; +- if (!(*device)->output_name) { +- return CUBEB_ERROR; ++ *data = 0; + } + +- // Turn the four chars packed into a uint32 into a string +- strdata[0] = (char)(data >> 24); +- strdata[1] = (char)(data >> 16); +- strdata[2] = (char)(data >> 8); +- strdata[3] = (char)(data); ++ return CUBEB_OK; ++} + +- memcpy((*device)->output_name, strdata, size); +- (*device)->output_name[size] = '\0'; ++int audiounit_get_default_device_name(cubeb_stream * stm, ++ cubeb_device * const device, ++ cubeb_device_type type) ++{ ++ assert(stm); ++ assert(device); + +- if (audiounit_get_input_device_id(&input_device_id) != CUBEB_OK) { +- return CUBEB_ERROR; ++ UInt32 data; ++ int r = audiounit_get_default_device_datasource(type, &data); ++ if (r != CUBEB_OK) { ++ return r; + } +- +- size = sizeof(UInt32); +- r = AudioObjectGetPropertyData(input_device_id, &datasource_address_input, 0, NULL, &size, &data); +- if (r != noErr) { +- LOG("(%p) Error when getting device !", stm); +- size = 0; +- data = 0; ++ char ** name = type == CUBEB_DEVICE_TYPE_INPUT ? ++ &device->input_name : &device->output_name; ++ *name = convert_uint32_into_string(data).release(); ++ if (!strlen(*name)) { // empty string. ++ LOG("(%p) name of %s device is empty!", stm, ++ type == CUBEB_DEVICE_TYPE_INPUT ? "input" : "output"); + } ++ return CUBEB_OK; ++} ++ + +- (*device)->input_name = new char[size + 1]; +- if (!(*device)->input_name) { ++int audiounit_stream_get_current_device(cubeb_stream * stm, ++ cubeb_device ** const device) ++{ ++#if TARGET_OS_IPHONE ++ //TODO ++ return CUBEB_ERROR_NOT_SUPPORTED; ++#else ++ *device = new cubeb_device; ++ if (!*device) { + return CUBEB_ERROR; + } ++ PodZero(*device, 1); + +- // Turn the four chars packed into a uint32 into a string +- strdata[0] = (char)(data >> 24); +- strdata[1] = (char)(data >> 16); +- strdata[2] = (char)(data >> 8); +- strdata[3] = (char)(data); ++ int r = audiounit_get_default_device_name(stm, *device, ++ CUBEB_DEVICE_TYPE_OUTPUT); ++ if (r != CUBEB_OK) { ++ return r; ++ } + +- memcpy((*device)->input_name, strdata, size); +- (*device)->input_name[size] = '\0'; ++ r = audiounit_get_default_device_name(stm, *device, ++ CUBEB_DEVICE_TYPE_INPUT); ++ if (r != CUBEB_OK) { ++ return r; ++ } + + return CUBEB_OK; + #endif +@@ -2232,52 +3114,14 @@ int audiounit_stream_device_destroy(cubeb_stream * /* stream */, + int audiounit_stream_register_device_changed_callback(cubeb_stream * stream, + cubeb_device_changed_callback device_changed_callback) + { ++ auto_lock dev_cb_lock(stream->device_changed_callback_lock); + /* Note: second register without unregister first causes 'nope' error. + * Current implementation requires unregister before register a new cb. */ +- assert(!stream->device_changed_callback); +- +- auto_lock lock(stream->mutex); +- ++ assert(!device_changed_callback || !stream->device_changed_callback); + stream->device_changed_callback = device_changed_callback; +- + return CUBEB_OK; + } + +-static OSStatus +-audiounit_get_devices(AudioObjectID ** devices, uint32_t * count) +-{ +- OSStatus ret; +- UInt32 size = 0; +- AudioObjectPropertyAddress adr = { kAudioHardwarePropertyDevices, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster }; +- +- ret = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &adr, 0, NULL, &size); +- if (ret != noErr) { +- return ret; +- } +- +- *count = static_cast(size / sizeof(AudioObjectID)); +- if (size >= sizeof(AudioObjectID)) { +- if (*devices != NULL) { +- delete [] (*devices); +- } +- *devices = new AudioObjectID[*count]; +- PodZero(*devices, *count); +- +- ret = AudioObjectGetPropertyData(kAudioObjectSystemObject, &adr, 0, NULL, &size, (void *)*devices); +- if (ret != noErr) { +- delete [] (*devices); +- *devices = NULL; +- } +- } else { +- *devices = NULL; +- ret = -1; +- } +- +- return ret; +-} +- + static char * + audiounit_strref_to_cstr_utf8(CFStringRef strref) + { +@@ -2288,11 +3132,12 @@ audiounit_strref_to_cstr_utf8(CFStringRef strref) + } + + len = CFStringGetLength(strref); +- size = CFStringGetMaximumSizeForEncoding(len, kCFStringEncodingUTF8); +- ret = static_cast(malloc(size)); ++ // Add 1 to size to allow for '\0' termination character. ++ size = CFStringGetMaximumSizeForEncoding(len, kCFStringEncodingUTF8) + 1; ++ ret = new char[size]; + + if (!CFStringGetCString(strref, ret, size, kCFStringEncodingUTF8)) { +- free(ret); ++ delete [] ret; + ret = NULL; + } + +@@ -2339,19 +3184,18 @@ audiounit_get_available_samplerate(AudioObjectID devid, AudioObjectPropertyScope + AudioValueRange range; + if (AudioObjectHasProperty(devid, &adr) && + AudioObjectGetPropertyDataSize(devid, &adr, 0, NULL, &size) == noErr) { +- uint32_t i, count = size / sizeof(AudioValueRange); +- AudioValueRange * ranges = new AudioValueRange[count]; ++ uint32_t count = size / sizeof(AudioValueRange); ++ vector ranges(count); + range.mMinimum = 9999999999.0; + range.mMaximum = 0.0; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, ranges) == noErr) { +- for (i = 0; i < count; i++) { ++ if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, ranges.data()) == noErr) { ++ for (uint32_t i = 0; i < count; i++) { + if (ranges[i].mMaximum > range.mMaximum) + range.mMaximum = ranges[i].mMaximum; + if (ranges[i].mMinimum < range.mMinimum) + range.mMinimum = ranges[i].mMinimum; + } + } +- delete [] ranges; + *max = static_cast(range.mMaximum); + *min = static_cast(range.mMinimum); + } else { +@@ -2364,7 +3208,7 @@ static UInt32 + audiounit_get_device_presentation_latency(AudioObjectID devid, AudioObjectPropertyScope scope) + { + AudioObjectPropertyAddress adr = { 0, scope, kAudioObjectPropertyElementMaster }; +- UInt32 size, dev, stream = 0, offset; ++ UInt32 size, dev, stream = 0; + AudioStreamID sid[1]; + + adr.mSelector = kAudioDevicePropertyLatency; +@@ -2381,216 +3225,249 @@ audiounit_get_device_presentation_latency(AudioObjectID devid, AudioObjectProper + AudioObjectGetPropertyData(sid[0], &adr, 0, NULL, &size, &stream); + } + +- adr.mSelector = kAudioDevicePropertySafetyOffset; +- size = sizeof(UInt32); +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &offset) != noErr) { +- offset = 0; +- } +- +- return dev + stream + offset; ++ return dev + stream; + } + +-static cubeb_device_info * +-audiounit_create_device_from_hwdev(AudioObjectID devid, cubeb_device_type type) ++static int ++audiounit_create_device_from_hwdev(cubeb_device_info * dev_info, AudioObjectID devid, cubeb_device_type type) + { + AudioObjectPropertyAddress adr = { 0, 0, kAudioObjectPropertyElementMaster }; +- UInt32 size, ch, latency; +- cubeb_device_info * ret; +- CFStringRef str = NULL; +- AudioValueRange range; ++ UInt32 size; + + if (type == CUBEB_DEVICE_TYPE_OUTPUT) { + adr.mScope = kAudioDevicePropertyScopeOutput; + } else if (type == CUBEB_DEVICE_TYPE_INPUT) { + adr.mScope = kAudioDevicePropertyScopeInput; + } else { +- return NULL; ++ return CUBEB_ERROR; + } + +- ch = audiounit_get_channel_count(devid, adr.mScope); ++ UInt32 ch = audiounit_get_channel_count(devid, adr.mScope); + if (ch == 0) { +- return NULL; ++ return CUBEB_ERROR; + } + +- ret = new cubeb_device_info; +- PodZero(ret, 1); ++ PodZero(dev_info, 1); + ++ CFStringRef device_id_str = nullptr; + size = sizeof(CFStringRef); + adr.mSelector = kAudioDevicePropertyDeviceUID; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &str) == noErr && str != NULL) { +- ret->device_id = audiounit_strref_to_cstr_utf8(str); +- ret->devid = (cubeb_devid)(size_t)devid; +- ret->group_id = strdup(ret->device_id); +- CFRelease(str); ++ OSStatus ret = AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &device_id_str); ++ if ( ret == noErr && device_id_str != NULL) { ++ dev_info->device_id = audiounit_strref_to_cstr_utf8(device_id_str); ++ static_assert(sizeof(cubeb_devid) >= sizeof(decltype(devid)), "cubeb_devid can't represent devid"); ++ dev_info->devid = reinterpret_cast(devid); ++ dev_info->group_id = dev_info->device_id; ++ CFRelease(device_id_str); + } + +- size = sizeof(CFStringRef); +- adr.mSelector = kAudioObjectPropertyName; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &str) == noErr && str != NULL) { +- UInt32 ds; +- size = sizeof(UInt32); +- adr.mSelector = kAudioDevicePropertyDataSource; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &ds) == noErr) { +- CFStringRef dsname; +- AudioValueTranslation trl = { &ds, sizeof(ds), &dsname, sizeof(dsname) }; +- adr.mSelector = kAudioDevicePropertyDataSourceNameForIDCFString; +- size = sizeof(AudioValueTranslation); +- // If there is a datasource for this device, use it instead of the device +- // name. +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &trl) == noErr) { +- CFRelease(str); +- str = dsname; +- } +- } ++ CFStringRef friendly_name_str = nullptr; ++ UInt32 ds; ++ size = sizeof(UInt32); ++ adr.mSelector = kAudioDevicePropertyDataSource; ++ ret = AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &ds); ++ if (ret == noErr) { ++ AudioValueTranslation trl = { &ds, sizeof(ds), &friendly_name_str, sizeof(CFStringRef) }; ++ adr.mSelector = kAudioDevicePropertyDataSourceNameForIDCFString; ++ size = sizeof(AudioValueTranslation); ++ AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &trl); ++ } ++ ++ // If there is no datasource for this device, fall back to the ++ // device name. ++ if (!friendly_name_str) { ++ size = sizeof(CFStringRef); ++ adr.mSelector = kAudioObjectPropertyName; ++ AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &friendly_name_str); ++ } + +- ret->friendly_name = audiounit_strref_to_cstr_utf8(str); +- CFRelease(str); ++ if (friendly_name_str) { ++ dev_info->friendly_name = audiounit_strref_to_cstr_utf8(friendly_name_str); ++ CFRelease(friendly_name_str); ++ } else { ++ // Couldn't get a datasource name nor a device name, return a ++ // valid string of length 0. ++ char * fallback_name = new char[1]; ++ fallback_name[0] = '\0'; ++ dev_info->friendly_name = fallback_name; + } + ++ CFStringRef vendor_name_str = nullptr; + size = sizeof(CFStringRef); + adr.mSelector = kAudioObjectPropertyManufacturer; +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &str) == noErr && str != NULL) { +- ret->vendor_name = audiounit_strref_to_cstr_utf8(str); +- CFRelease(str); ++ ret = AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &vendor_name_str); ++ if (ret == noErr && vendor_name_str != NULL) { ++ dev_info->vendor_name = audiounit_strref_to_cstr_utf8(vendor_name_str); ++ CFRelease(vendor_name_str); + } + +- ret->type = type; +- ret->state = CUBEB_DEVICE_STATE_ENABLED; +- ret->preferred = (devid == audiounit_get_default_device_id(type)) ? ++ dev_info->type = type; ++ dev_info->state = CUBEB_DEVICE_STATE_ENABLED; ++ dev_info->preferred = (devid == audiounit_get_default_device_id(type)) ? + CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE; + +- ret->max_channels = ch; +- ret->format = (cubeb_device_fmt)CUBEB_DEVICE_FMT_ALL; /* CoreAudio supports All! */ ++ dev_info->max_channels = ch; ++ dev_info->format = (cubeb_device_fmt)CUBEB_DEVICE_FMT_ALL; /* CoreAudio supports All! */ + /* kAudioFormatFlagsAudioUnitCanonical is deprecated, prefer floating point */ +- ret->default_format = CUBEB_DEVICE_FMT_F32NE; ++ dev_info->default_format = CUBEB_DEVICE_FMT_F32NE; + audiounit_get_available_samplerate(devid, adr.mScope, +- &ret->min_rate, &ret->max_rate, &ret->default_rate); ++ &dev_info->min_rate, &dev_info->max_rate, &dev_info->default_rate); + +- latency = audiounit_get_device_presentation_latency(devid, adr.mScope); ++ UInt32 latency = audiounit_get_device_presentation_latency(devid, adr.mScope); + ++ AudioValueRange range; + adr.mSelector = kAudioDevicePropertyBufferFrameSizeRange; + size = sizeof(AudioValueRange); +- if (AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &range) == noErr) { +- ret->latency_lo = latency + range.mMinimum; +- ret->latency_hi = latency + range.mMaximum; ++ ret = AudioObjectGetPropertyData(devid, &adr, 0, NULL, &size, &range); ++ if (ret == noErr) { ++ dev_info->latency_lo = latency + range.mMinimum; ++ dev_info->latency_hi = latency + range.mMaximum; + } else { +- ret->latency_lo = 10 * ret->default_rate / 1000; /* Default to 10ms */ +- ret->latency_hi = 100 * ret->default_rate / 1000; /* Default to 100ms */ ++ dev_info->latency_lo = 10 * dev_info->default_rate / 1000; /* Default to 10ms */ ++ dev_info->latency_hi = 100 * dev_info->default_rate / 1000; /* Default to 100ms */ + } + +- return ret; ++ return CUBEB_OK; ++} ++ ++bool ++is_aggregate_device(cubeb_device_info * device_info) ++{ ++ assert(device_info->friendly_name); ++ return !strncmp(device_info->friendly_name, PRIVATE_AGGREGATE_DEVICE_NAME, ++ strlen(PRIVATE_AGGREGATE_DEVICE_NAME)); + } + + static int + audiounit_enumerate_devices(cubeb * /* context */, cubeb_device_type type, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { +- AudioObjectID * hwdevs = NULL; +- uint32_t i, hwdevcount = 0; +- OSStatus err; ++ vector input_devs; ++ vector output_devs; + +- if ((err = audiounit_get_devices(&hwdevs, &hwdevcount)) != noErr) { +- return CUBEB_ERROR; ++ // Count number of input and output devices. This is not ++ // necessarily the same as the count of raw devices supported by the ++ // system since, for example, with Soundflower installed, some ++ // devices may report as being both input *and* output and cubeb ++ // separates those into two different devices. ++ ++ if (type & CUBEB_DEVICE_TYPE_OUTPUT) { ++ output_devs = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_OUTPUT); + } + +- *collection = static_cast(malloc(sizeof(cubeb_device_collection) + +- sizeof(cubeb_device_info*) * (hwdevcount > 0 ? hwdevcount - 1 : 0))); +- (*collection)->count = 0; ++ if (type & CUBEB_DEVICE_TYPE_INPUT) { ++ input_devs = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_INPUT); ++ } + +- if (hwdevcount > 0) { +- cubeb_device_info * cur; ++ auto devices = new cubeb_device_info[output_devs.size() + input_devs.size()]; ++ collection->count = 0; + +- if (type & CUBEB_DEVICE_TYPE_OUTPUT) { +- for (i = 0; i < hwdevcount; i++) { +- if ((cur = audiounit_create_device_from_hwdev(hwdevs[i], CUBEB_DEVICE_TYPE_OUTPUT)) != NULL) +- (*collection)->device[(*collection)->count++] = cur; ++ if (type & CUBEB_DEVICE_TYPE_OUTPUT) { ++ for (auto dev: output_devs) { ++ auto device = &devices[collection->count]; ++ auto err = audiounit_create_device_from_hwdev(device, dev, CUBEB_DEVICE_TYPE_OUTPUT); ++ if (err != CUBEB_OK || is_aggregate_device(device)) { ++ continue; + } ++ collection->count += 1; + } ++ } + +- if (type & CUBEB_DEVICE_TYPE_INPUT) { +- for (i = 0; i < hwdevcount; i++) { +- if ((cur = audiounit_create_device_from_hwdev(hwdevs[i], CUBEB_DEVICE_TYPE_INPUT)) != NULL) +- (*collection)->device[(*collection)->count++] = cur; ++ if (type & CUBEB_DEVICE_TYPE_INPUT) { ++ for (auto dev: input_devs) { ++ auto device = &devices[collection->count]; ++ auto err = audiounit_create_device_from_hwdev(device, dev, CUBEB_DEVICE_TYPE_INPUT); ++ if (err != CUBEB_OK || is_aggregate_device(device)) { ++ continue; + } ++ collection->count += 1; + } + } + +- delete [] hwdevs; ++ if (collection->count > 0) { ++ collection->device = devices; ++ } else { ++ delete [] devices; ++ collection->device = NULL; ++ } + + return CUBEB_OK; + } + +-/* qsort compare method. */ +-int compare_devid(const void * a, const void * b) ++static void ++audiounit_device_destroy(cubeb_device_info * device) + { +- return (*(AudioObjectID*)a - *(AudioObjectID*)b); ++ delete [] device->device_id; ++ delete [] device->friendly_name; ++ delete [] device->vendor_name; + } + +-static uint32_t +-audiounit_get_devices_of_type(cubeb_device_type devtype, AudioObjectID ** devid_array) ++static int ++audiounit_device_collection_destroy(cubeb * /* context */, ++ cubeb_device_collection * collection) + { +- assert(devid_array == NULL || *devid_array == NULL); ++ for (size_t i = 0; i < collection->count; i++) { ++ audiounit_device_destroy(&collection->device[i]); ++ } ++ delete [] collection->device; ++ ++ return CUBEB_OK; ++} + +- AudioObjectPropertyAddress adr = { kAudioHardwarePropertyDevices, +- kAudioObjectPropertyScopeGlobal, +- kAudioObjectPropertyElementMaster }; ++static vector ++audiounit_get_devices_of_type(cubeb_device_type devtype) ++{ + UInt32 size = 0; +- OSStatus ret = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &adr, 0, NULL, &size); ++ OSStatus ret = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, ++ &DEVICES_PROPERTY_ADDRESS, 0, ++ NULL, &size); + if (ret != noErr) { +- return 0; ++ return vector(); + } +- /* Total number of input and output devices. */ +- uint32_t count = (uint32_t)(size / sizeof(AudioObjectID)); +- +- AudioObjectID devices[count]; +- ret = AudioObjectGetPropertyData(kAudioObjectSystemObject, &adr, 0, NULL, &size, &devices); ++ vector devices(size / sizeof(AudioObjectID)); ++ ret = AudioObjectGetPropertyData(kAudioObjectSystemObject, ++ &DEVICES_PROPERTY_ADDRESS, 0, NULL, &size, ++ devices.data()); + if (ret != noErr) { +- return 0; ++ return vector(); ++ } ++ ++ // Remove the aggregate device from the list of devices (if any). ++ for (auto it = devices.begin(); it != devices.end();) { ++ CFStringRef name = get_device_name(*it); ++ if (name && CFStringFind(name, CFSTR("CubebAggregateDevice"), 0).location != ++ kCFNotFound) { ++ it = devices.erase(it); ++ } else { ++ it++; ++ } ++ if (name) { ++ CFRelease(name); ++ } + } ++ + /* Expected sorted but did not find anything in the docs. */ +- qsort(devices, count, sizeof(AudioObjectID), compare_devid); ++ sort(devices.begin(), devices.end(), [](AudioObjectID a, AudioObjectID b) { ++ return a < b; ++ }); + + if (devtype == (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT)) { +- if (devid_array) { +- *devid_array = new AudioObjectID[count]; +- assert(*devid_array); +- memcpy(*devid_array, &devices, count * sizeof(AudioObjectID)); +- } +- return count; ++ return devices; + } + + AudioObjectPropertyScope scope = (devtype == CUBEB_DEVICE_TYPE_INPUT) ? + kAudioDevicePropertyScopeInput : + kAudioDevicePropertyScopeOutput; + +- uint32_t dev_count = 0; +- AudioObjectID devices_in_scope[count]; +- for(uint32_t i = 0; i < count; ++i) { ++ vector devices_in_scope; ++ for (uint32_t i = 0; i < devices.size(); ++i) { + /* For device in the given scope channel must be > 0. */ + if (audiounit_get_channel_count(devices[i], scope) > 0) { +- devices_in_scope[dev_count] = devices[i]; +- ++dev_count; ++ devices_in_scope.push_back(devices[i]); + } + } + +- if (devid_array && dev_count > 0) { +- *devid_array = new AudioObjectID[dev_count]; +- assert(*devid_array); +- memcpy(*devid_array, &devices_in_scope, dev_count * sizeof(AudioObjectID)); +- } +- return dev_count; +-} +- +-static uint32_t +-audiounit_equal_arrays(AudioObjectID * left, AudioObjectID * right, uint32_t size) +-{ +- /* Expected sorted arrays. */ +- for (uint32_t i = 0; i < size; ++i) { +- if (left[i] != right[i]) { +- return 0; +- } +- } +- return 1; ++ return devices_in_scope; + } + + static OSStatus +@@ -2600,33 +3477,32 @@ audiounit_collection_changed_callback(AudioObjectID /* inObjectID */, + void * inClientData) + { + cubeb * context = static_cast(inClientData); +- auto_lock lock(context->mutex); +- +- if (context->collection_changed_callback == NULL) { +- /* Listener removed while waiting in mutex, abort. */ +- return noErr; +- } + +- /* Differentiate input from output changes. */ +- if (context->collection_changed_devtype == CUBEB_DEVICE_TYPE_INPUT || +- context->collection_changed_devtype == CUBEB_DEVICE_TYPE_OUTPUT) { +- AudioObjectID * devices = NULL; +- uint32_t new_number_of_devices = audiounit_get_devices_of_type(context->collection_changed_devtype, &devices); +- /* When count is the same examine the devid for the case of coalescing. */ +- if (context->devtype_device_count == new_number_of_devices && +- audiounit_equal_arrays(devices, context->devtype_device_array, new_number_of_devices)) { +- /* Device changed for the other scope, ignore. */ +- delete [] devices; +- return noErr; ++ // This can be called from inside an AudioUnit function, dispatch to another queue. ++ dispatch_async(context->serial_queue, ^() { ++ auto_lock lock(context->mutex); ++ if (!context->input_collection_changed_callback && ++ !context->output_collection_changed_callback) { ++ /* Listener removed while waiting in mutex, abort. */ ++ return; + } +- /* Device on desired scope changed, reset counter and array. */ +- context->devtype_device_count = new_number_of_devices; +- /* Free the old array before replace. */ +- delete [] context->devtype_device_array; +- context->devtype_device_array = devices; +- } +- +- context->collection_changed_callback(context, context->collection_changed_user_ptr); ++ if (context->input_collection_changed_callback) { ++ vector devices = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_INPUT); ++ /* Elements in the vector expected sorted. */ ++ if (context->input_device_array != devices) { ++ context->input_device_array = devices; ++ context->input_collection_changed_callback(context, context->input_collection_changed_user_ptr); ++ } ++ } ++ if (context->output_collection_changed_callback) { ++ vector devices = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_OUTPUT); ++ /* Elements in the vector expected sorted. */ ++ if (context->output_device_array != devices) { ++ context->output_device_array = devices; ++ context->output_collection_changed_callback(context, context->output_collection_changed_user_ptr); ++ } ++ } ++ }); + return noErr; + } + +@@ -2636,62 +3512,65 @@ audiounit_add_device_listener(cubeb * context, + cubeb_device_collection_changed_callback collection_changed_callback, + void * user_ptr) + { ++ context->mutex.assert_current_thread_owns(); ++ assert(devtype & (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT)); + /* Note: second register without unregister first causes 'nope' error. + * Current implementation requires unregister before register a new cb. */ +- assert(context->collection_changed_callback == NULL); +- +- AudioObjectPropertyAddress devAddr; +- devAddr.mSelector = kAudioHardwarePropertyDevices; +- devAddr.mScope = kAudioObjectPropertyScopeGlobal; +- devAddr.mElement = kAudioObjectPropertyElementMaster; +- +- OSStatus ret = AudioObjectAddPropertyListener(kAudioObjectSystemObject, +- &devAddr, +- audiounit_collection_changed_callback, +- context); +- if (ret == noErr) { +- /* Expected zero after unregister. */ +- assert(context->devtype_device_count == 0); +- assert(context->devtype_device_array == NULL); +- /* Listener works for input and output. +- * When requested one of them we need to differentiate. */ +- if (devtype == CUBEB_DEVICE_TYPE_INPUT || +- devtype == CUBEB_DEVICE_TYPE_OUTPUT) { +- /* Used to differentiate input from output device changes. */ +- context->devtype_device_count = audiounit_get_devices_of_type(devtype, &context->devtype_device_array); +- } +- context->collection_changed_devtype = devtype; +- context->collection_changed_callback = collection_changed_callback; +- context->collection_changed_user_ptr = user_ptr; ++ assert((devtype & CUBEB_DEVICE_TYPE_INPUT) && !context->input_collection_changed_callback || ++ (devtype & CUBEB_DEVICE_TYPE_OUTPUT) && !context->output_collection_changed_callback); ++ ++ if (!context->input_collection_changed_callback && ++ !context->output_collection_changed_callback) { ++ OSStatus ret = AudioObjectAddPropertyListener(kAudioObjectSystemObject, ++ &DEVICES_PROPERTY_ADDRESS, ++ audiounit_collection_changed_callback, ++ context); ++ if (ret != noErr) { ++ return ret; ++ } + } +- return ret; ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ /* Expected empty after unregister. */ ++ assert(context->input_device_array.empty()); ++ context->input_device_array = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_INPUT); ++ context->input_collection_changed_callback = collection_changed_callback; ++ context->input_collection_changed_user_ptr = user_ptr; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ /* Expected empty after unregister. */ ++ assert(context->output_device_array.empty()); ++ context->output_device_array = audiounit_get_devices_of_type(CUBEB_DEVICE_TYPE_OUTPUT); ++ context->output_collection_changed_callback = collection_changed_callback; ++ context->output_collection_changed_user_ptr = user_ptr; ++ } ++ return noErr; + } + + static OSStatus +-audiounit_remove_device_listener(cubeb * context) ++audiounit_remove_device_listener(cubeb * context, cubeb_device_type devtype) + { +- AudioObjectPropertyAddress devAddr; +- devAddr.mSelector = kAudioHardwarePropertyDevices; +- devAddr.mScope = kAudioObjectPropertyScopeGlobal; +- devAddr.mElement = kAudioObjectPropertyElementMaster; ++ context->mutex.assert_current_thread_owns(); + +- /* Note: unregister a non registered cb is not a problem, not checking. */ +- OSStatus ret = AudioObjectRemovePropertyListener(kAudioObjectSystemObject, +- &devAddr, +- audiounit_collection_changed_callback, +- context); +- if (ret == noErr) { +- /* Reset all values. */ +- context->collection_changed_devtype = CUBEB_DEVICE_TYPE_UNKNOWN; +- context->collection_changed_callback = NULL; +- context->collection_changed_user_ptr = NULL; +- context->devtype_device_count = 0; +- if (context->devtype_device_array) { +- delete [] context->devtype_device_array; +- context->devtype_device_array = NULL; +- } ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ context->input_collection_changed_callback = nullptr; ++ context->input_collection_changed_user_ptr = nullptr; ++ context->input_device_array.clear(); + } +- return ret; ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ context->output_collection_changed_callback = nullptr; ++ context->output_collection_changed_user_ptr = nullptr; ++ context->output_device_array.clear(); ++ } ++ ++ if (context->input_collection_changed_callback || ++ context->output_collection_changed_callback) { ++ return noErr; ++ } ++ /* Note: unregister a non registered cb is not a problem, not checking. */ ++ return AudioObjectRemovePropertyListener(kAudioObjectSystemObject, ++ &DEVICES_PROPERTY_ADDRESS, ++ audiounit_collection_changed_callback, ++ context); + } + + int audiounit_register_device_collection_changed(cubeb * context, +@@ -2699,14 +3578,18 @@ int audiounit_register_device_collection_changed(cubeb * context, + cubeb_device_collection_changed_callback collection_changed_callback, + void * user_ptr) + { ++ if (devtype == CUBEB_DEVICE_TYPE_UNKNOWN) { ++ return CUBEB_ERROR_INVALID_PARAMETER; ++ } + OSStatus ret; + auto_lock lock(context->mutex); + if (collection_changed_callback) { +- ret = audiounit_add_device_listener(context, devtype, ++ ret = audiounit_add_device_listener(context, ++ devtype, + collection_changed_callback, + user_ptr); + } else { +- ret = audiounit_remove_device_listener(context); ++ ret = audiounit_remove_device_listener(context, devtype); + } + return (ret == noErr) ? CUBEB_OK : CUBEB_ERROR; + } +@@ -2718,15 +3601,16 @@ cubeb_ops const audiounit_ops = { + /*.get_min_latency =*/ audiounit_get_min_latency, + /*.get_preferred_sample_rate =*/ audiounit_get_preferred_sample_rate, + /*.enumerate_devices =*/ audiounit_enumerate_devices, ++ /*.device_collection_destroy =*/ audiounit_device_collection_destroy, + /*.destroy =*/ audiounit_destroy, + /*.stream_init =*/ audiounit_stream_init, + /*.stream_destroy =*/ audiounit_stream_destroy, + /*.stream_start =*/ audiounit_stream_start, + /*.stream_stop =*/ audiounit_stream_stop, ++ /*.stream_reset_default_device =*/ nullptr, + /*.stream_get_position =*/ audiounit_stream_get_position, + /*.stream_get_latency =*/ audiounit_stream_get_latency, + /*.stream_set_volume =*/ audiounit_stream_set_volume, +- /*.stream_set_panning =*/ audiounit_stream_set_panning, + /*.stream_get_current_device =*/ audiounit_stream_get_current_device, + /*.stream_device_destroy =*/ audiounit_stream_device_destroy, + /*.stream_register_device_changed_callback =*/ audiounit_stream_register_device_changed_callback, +diff --git a/media/libcubeb/src/cubeb_jack.cpp b/media/libcubeb/src/cubeb_jack.cpp +index 8f995da66..1ab876c3f 100644 +--- a/media/libcubeb/src/cubeb_jack.cpp ++++ b/media/libcubeb/src/cubeb_jack.cpp +@@ -8,23 +8,20 @@ + */ + #define _DEFAULT_SOURCE + #define _BSD_SOURCE ++#ifndef __FreeBSD__ + #define _POSIX_SOURCE +-#include ++#endif + #include +-#include + #include +-#include +-#include + #include + #include +-#include +-#include + #include + #include + #include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + #include "cubeb_resampler.h" ++#include "cubeb_utils.h" + + #include + #include +@@ -98,7 +95,9 @@ static int cbjack_stream_device_destroy(cubeb_stream * stream, + cubeb_device * device); + static int cbjack_stream_get_current_device(cubeb_stream * stm, cubeb_device ** const device); + static int cbjack_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection); ++ cubeb_device_collection * collection); ++static int cbjack_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection); + static int cbjack_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_name, + cubeb_devid input_device, + cubeb_stream_params * input_stream_params, +@@ -121,15 +120,16 @@ static struct cubeb_ops const cbjack_ops = { + .get_min_latency = cbjack_get_min_latency, + .get_preferred_sample_rate = cbjack_get_preferred_sample_rate, + .enumerate_devices = cbjack_enumerate_devices, ++ .device_collection_destroy = cbjack_device_collection_destroy, + .destroy = cbjack_destroy, + .stream_init = cbjack_stream_init, + .stream_destroy = cbjack_stream_destroy, + .stream_start = cbjack_stream_start, + .stream_stop = cbjack_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = cbjack_stream_get_position, + .stream_get_latency = cbjack_get_latency, + .stream_set_volume = cbjack_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = cbjack_stream_get_current_device, + .stream_device_destroy = cbjack_stream_device_destroy, + .stream_register_device_changed_callback = NULL, +@@ -137,7 +137,10 @@ static struct cubeb_ops const cbjack_ops = { + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + + /**< Mutex for each stream */ + pthread_mutex_t mutex; +@@ -147,7 +150,6 @@ struct cubeb_stream { + + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; +- void * user_ptr; + cubeb_stream_params in_params; + cubeb_stream_params out_params; + +@@ -183,7 +185,6 @@ struct cubeb { + cubeb_stream streams[MAX_STREAMS]; + unsigned int active_streams; + +- cubeb_device_info * devinfo[2]; + cubeb_device_collection_changed_callback collection_changed_callback; + + bool active; +@@ -210,6 +211,9 @@ load_jack_lib(cubeb * context) + # endif + #else + context->libjack = dlopen("libjack.so.0", RTLD_LAZY); ++ if (!context->libjack) { ++ context->libjack = dlopen("libjack.so", RTLD_LAZY); ++ } + #endif + if (!context->libjack) { + return CUBEB_ERROR; +@@ -230,9 +234,10 @@ load_jack_lib(cubeb * context) + return CUBEB_OK; + } + +-static void ++static int + cbjack_connect_ports (cubeb_stream * stream) + { ++ int r = CUBEB_ERROR; + const char ** phys_in_ports = api_jack_get_ports (stream->context->jack_client, + NULL, NULL, + JackPortIsInput +@@ -242,7 +247,7 @@ cbjack_connect_ports (cubeb_stream * stream) + JackPortIsOutput + | JackPortIsPhysical); + +- if (*phys_in_ports == NULL) { ++ if (phys_in_ports == NULL || *phys_in_ports == NULL) { + goto skipplayback; + } + +@@ -252,9 +257,10 @@ cbjack_connect_ports (cubeb_stream * stream) + + api_jack_connect (stream->context->jack_client, src_port, phys_in_ports[c]); + } ++ r = CUBEB_OK; + + skipplayback: +- if (*phys_out_ports == NULL) { ++ if (phys_out_ports == NULL || *phys_out_ports == NULL) { + goto end; + } + // Connect inputs to capture +@@ -263,9 +269,15 @@ skipplayback: + + api_jack_connect (stream->context->jack_client, phys_out_ports[c], src_port); + } ++ r = CUBEB_OK; + end: +- api_jack_free(phys_out_ports); +- api_jack_free(phys_in_ports); ++ if (phys_out_ports) { ++ api_jack_free(phys_out_ports); ++ } ++ if (phys_in_ports) { ++ api_jack_free(phys_in_ports); ++ } ++ return r; + } + + static int +@@ -426,7 +438,6 @@ cbjack_process(jack_nframes_t nframes, void * arg) + return 0; + } + +- + static void + cbjack_deinterleave_playback_refill_float(cubeb_stream * stream, float ** in, float ** bufs_out, jack_nframes_t nframes) + { +@@ -439,7 +450,6 @@ cbjack_deinterleave_playback_refill_float(cubeb_stream * stream, float ** in, fl + long done_frames = 0; + long input_frames_count = (in != NULL) ? nframes : 0; + +- + done_frames = cubeb_resampler_fill(stream->resampler, + inptr, + &input_frames_count, +@@ -736,6 +746,12 @@ cbjack_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_ + if (input_device || output_device) + return CUBEB_ERROR_NOT_SUPPORTED; + ++ // Loopback is unsupported ++ if ((input_stream_params && (input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK)) || ++ (output_stream_params && (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK))) { ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ + *stream = NULL; + + // Find a free stream. +@@ -867,7 +883,11 @@ cbjack_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_ + } + } + +- cbjack_connect_ports(stm); ++ if (cbjack_connect_ports(stm) != CUBEB_OK) { ++ pthread_mutex_unlock(&stm->mutex); ++ cbjack_stream_destroy(stm); ++ return CUBEB_ERROR; ++ } + + *stream = stm; + +@@ -940,7 +960,6 @@ cbjack_stream_set_volume(cubeb_stream * stm, float volume) + return CUBEB_OK; + } + +- + static int + cbjack_stream_get_current_device(cubeb_stream * stm, cubeb_device ** const device) + { +@@ -978,70 +997,77 @@ cbjack_stream_device_destroy(cubeb_stream * /*stream*/, + return CUBEB_OK; + } + ++#define JACK_DEFAULT_IN "JACK capture" ++#define JACK_DEFAULT_OUT "JACK playback" ++ + static int + cbjack_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { + if (!context) + return CUBEB_ERROR; + + uint32_t rate; +- uint8_t i = 0; +- uint8_t j; + cbjack_get_preferred_sample_rate(context, &rate); +- const char * j_in = "JACK capture"; +- const char * j_out = "JACK playback"; ++ ++ cubeb_device_info * devices = new cubeb_device_info[2]; ++ if (!devices) ++ return CUBEB_ERROR; ++ PodZero(devices, 2); ++ collection->count = 0; + + if (type & CUBEB_DEVICE_TYPE_OUTPUT) { +- context->devinfo[i] = (cubeb_device_info *)malloc(sizeof(cubeb_device_info)); +- context->devinfo[i]->device_id = strdup(j_out); +- context->devinfo[i]->devid = context->devinfo[i]->device_id; +- context->devinfo[i]->friendly_name = strdup(j_out); +- context->devinfo[i]->group_id = strdup(j_out); +- context->devinfo[i]->vendor_name = strdup(j_out); +- context->devinfo[i]->type = CUBEB_DEVICE_TYPE_OUTPUT; +- context->devinfo[i]->state = CUBEB_DEVICE_STATE_ENABLED; +- context->devinfo[i]->preferred = CUBEB_DEVICE_PREF_ALL; +- context->devinfo[i]->format = CUBEB_DEVICE_FMT_F32NE; +- context->devinfo[i]->default_format = CUBEB_DEVICE_FMT_F32NE; +- context->devinfo[i]->max_channels = MAX_CHANNELS; +- context->devinfo[i]->min_rate = rate; +- context->devinfo[i]->max_rate = rate; +- context->devinfo[i]->default_rate = rate; +- context->devinfo[i]->latency_lo = 0; +- context->devinfo[i]->latency_hi = 0; +- i++; ++ cubeb_device_info * cur = &devices[collection->count]; ++ cur->device_id = JACK_DEFAULT_OUT; ++ cur->devid = (cubeb_devid) cur->device_id; ++ cur->friendly_name = JACK_DEFAULT_OUT; ++ cur->group_id = JACK_DEFAULT_OUT; ++ cur->vendor_name = JACK_DEFAULT_OUT; ++ cur->type = CUBEB_DEVICE_TYPE_OUTPUT; ++ cur->state = CUBEB_DEVICE_STATE_ENABLED; ++ cur->preferred = CUBEB_DEVICE_PREF_ALL; ++ cur->format = CUBEB_DEVICE_FMT_F32NE; ++ cur->default_format = CUBEB_DEVICE_FMT_F32NE; ++ cur->max_channels = MAX_CHANNELS; ++ cur->min_rate = rate; ++ cur->max_rate = rate; ++ cur->default_rate = rate; ++ cur->latency_lo = 0; ++ cur->latency_hi = 0; ++ collection->count +=1 ; + } + + if (type & CUBEB_DEVICE_TYPE_INPUT) { +- context->devinfo[i] = (cubeb_device_info *)malloc(sizeof(cubeb_device_info)); +- context->devinfo[i]->device_id = strdup(j_in); +- context->devinfo[i]->devid = context->devinfo[i]->device_id; +- context->devinfo[i]->friendly_name = strdup(j_in); +- context->devinfo[i]->group_id = strdup(j_in); +- context->devinfo[i]->vendor_name = strdup(j_in); +- context->devinfo[i]->type = CUBEB_DEVICE_TYPE_INPUT; +- context->devinfo[i]->state = CUBEB_DEVICE_STATE_ENABLED; +- context->devinfo[i]->preferred = CUBEB_DEVICE_PREF_ALL; +- context->devinfo[i]->format = CUBEB_DEVICE_FMT_F32NE; +- context->devinfo[i]->default_format = CUBEB_DEVICE_FMT_F32NE; +- context->devinfo[i]->max_channels = MAX_CHANNELS; +- context->devinfo[i]->min_rate = rate; +- context->devinfo[i]->max_rate = rate; +- context->devinfo[i]->default_rate = rate; +- context->devinfo[i]->latency_lo = 0; +- context->devinfo[i]->latency_hi = 0; +- i++; ++ cubeb_device_info * cur = &devices[collection->count]; ++ cur->device_id = JACK_DEFAULT_IN; ++ cur->devid = (cubeb_devid) cur->device_id; ++ cur->friendly_name = JACK_DEFAULT_IN; ++ cur->group_id = JACK_DEFAULT_IN; ++ cur->vendor_name = JACK_DEFAULT_IN; ++ cur->type = CUBEB_DEVICE_TYPE_INPUT; ++ cur->state = CUBEB_DEVICE_STATE_ENABLED; ++ cur->preferred = CUBEB_DEVICE_PREF_ALL; ++ cur->format = CUBEB_DEVICE_FMT_F32NE; ++ cur->default_format = CUBEB_DEVICE_FMT_F32NE; ++ cur->max_channels = MAX_CHANNELS; ++ cur->min_rate = rate; ++ cur->max_rate = rate; ++ cur->default_rate = rate; ++ cur->latency_lo = 0; ++ cur->latency_hi = 0; ++ collection->count += 1; + } + +- *collection = (cubeb_device_collection *) +- malloc(sizeof(cubeb_device_collection) + +- i * sizeof(cubeb_device_info *)); ++ collection->device = devices; + +- (*collection)->count = i; ++ return CUBEB_OK; ++} + +- for (j = 0; j < i; j++) { +- (*collection)->device[j] = context->devinfo[j]; +- } ++static int ++cbjack_device_collection_destroy(cubeb * /*ctx*/, ++ cubeb_device_collection * collection) ++{ ++ XASSERT(collection); ++ delete [] collection->device; + return CUBEB_OK; + } +diff --git a/media/libcubeb/src/cubeb_log.cpp b/media/libcubeb/src/cubeb_log.cpp +new file mode 100644 +index 000000000..54c7f4a15 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_log.cpp +@@ -0,0 +1,144 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++#define NOMINMAX ++ ++#include "cubeb_log.h" ++#include "cubeb_ringbuffer.h" ++#include ++#ifdef _WIN32 ++#include ++#else ++#include ++#endif ++ ++cubeb_log_level g_cubeb_log_level; ++cubeb_log_callback g_cubeb_log_callback; ++ ++/** The maximum size of a log message, after having been formatted. */ ++const size_t CUBEB_LOG_MESSAGE_MAX_SIZE = 256; ++/** The maximum number of log messages that can be queued before dropping ++ * messages. */ ++const size_t CUBEB_LOG_MESSAGE_QUEUE_DEPTH = 40; ++/** Number of milliseconds to wait before dequeuing log messages. */ ++#define CUBEB_LOG_BATCH_PRINT_INTERVAL_MS 10 ++ ++/** ++ * This wraps an inline buffer, that represents a log message, that must be ++ * null-terminated. ++ * This class should not use system calls or other potentially blocking code. ++ */ ++class cubeb_log_message ++{ ++public: ++ cubeb_log_message() ++ { ++ *storage = '\0'; ++ } ++ cubeb_log_message(char const str[CUBEB_LOG_MESSAGE_MAX_SIZE]) ++ { ++ size_t length = strlen(str); ++ /* paranoia against malformed message */ ++ assert(length < CUBEB_LOG_MESSAGE_MAX_SIZE); ++ if (length > CUBEB_LOG_MESSAGE_MAX_SIZE - 1) { ++ return; ++ } ++ PodCopy(storage, str, length); ++ storage[length] = '\0'; ++ } ++ char const * get() { ++ return storage; ++ } ++private: ++ char storage[CUBEB_LOG_MESSAGE_MAX_SIZE]; ++}; ++ ++/** Lock-free asynchronous logger, made so that logging from a ++ * real-time audio callback does not block the audio thread. */ ++class cubeb_async_logger ++{ ++public: ++ /* This is thread-safe since C++11 */ ++ static cubeb_async_logger & get() { ++ static cubeb_async_logger instance; ++ return instance; ++ } ++ void push(char const str[CUBEB_LOG_MESSAGE_MAX_SIZE]) ++ { ++ cubeb_log_message msg(str); ++ msg_queue.enqueue(msg); ++ } ++ void run() ++ { ++ std::thread([this]() { ++ while (true) { ++ cubeb_log_message msg; ++ while (msg_queue.dequeue(&msg, 1)) { ++ LOGV("%s", msg.get()); ++ } ++#ifdef _WIN32 ++ Sleep(CUBEB_LOG_BATCH_PRINT_INTERVAL_MS); ++#else ++ timespec sleep_duration = sleep_for; ++ timespec remainder; ++ do { ++ if (nanosleep(&sleep_duration, &remainder) == 0 || ++ errno != EINTR) { ++ break; ++ } ++ sleep_duration = remainder; ++ } while (remainder.tv_sec || remainder.tv_nsec); ++#endif ++ } ++ }).detach(); ++ } ++ // Tell the underlying queue the producer thread has changed, so it does not ++ // assert in debug. This should be called with the thread stopped. ++ void reset_producer_thread() ++ { ++ msg_queue.reset_thread_ids(); ++ } ++private: ++#ifndef _WIN32 ++ const struct timespec sleep_for = { ++ CUBEB_LOG_BATCH_PRINT_INTERVAL_MS/1000, ++ (CUBEB_LOG_BATCH_PRINT_INTERVAL_MS%1000)*1000*1000 ++ }; ++#endif ++ cubeb_async_logger() ++ : msg_queue(CUBEB_LOG_MESSAGE_QUEUE_DEPTH) ++ { ++ run(); ++ } ++ /** This is quite a big data structure, but is only instantiated if the ++ * asynchronous logger is used.*/ ++ lock_free_queue msg_queue; ++}; ++ ++ ++void cubeb_async_log(char const * fmt, ...) ++{ ++ if (!g_cubeb_log_callback) { ++ return; ++ } ++ // This is going to copy a 256 bytes array around, which is fine. ++ // We don't want to allocate memory here, because this is made to ++ // be called from a real-time callback. ++ va_list args; ++ va_start(args, fmt); ++ char msg[CUBEB_LOG_MESSAGE_MAX_SIZE]; ++ vsnprintf(msg, CUBEB_LOG_MESSAGE_MAX_SIZE, fmt, args); ++ cubeb_async_logger::get().push(msg); ++ va_end(args); ++} ++ ++void cubeb_async_log_reset_threads() ++{ ++ if (!g_cubeb_log_callback) { ++ return; ++ } ++ cubeb_async_logger::get().reset_producer_thread(); ++} +diff --git a/media/libcubeb/src/cubeb_log.h b/media/libcubeb/src/cubeb_log.h +index bca98c96f..a79976bb3 100644 +--- a/media/libcubeb/src/cubeb_log.h ++++ b/media/libcubeb/src/cubeb_log.h +@@ -8,6 +8,8 @@ + #ifndef CUBEB_LOG + #define CUBEB_LOG + ++#include "cubeb/cubeb.h" ++ + #ifdef __cplusplus + extern "C" { + #endif +@@ -18,8 +20,10 @@ extern "C" { + #define PRINTF_FORMAT(fmt, args) + #endif + +-extern cubeb_log_level g_log_level; +-extern cubeb_log_callback g_log_callback PRINTF_FORMAT(1, 2); ++extern cubeb_log_level g_cubeb_log_level; ++extern cubeb_log_callback g_cubeb_log_callback PRINTF_FORMAT(1, 2); ++void cubeb_async_log(const char * fmt, ...); ++void cubeb_async_log_reset_threads(); + + #ifdef __cplusplus + } +@@ -29,9 +33,15 @@ extern cubeb_log_callback g_log_callback PRINTF_FORMAT(1, 2); + #define LOG(msg, ...) LOG_INTERNAL(CUBEB_LOG_NORMAL, msg, ##__VA_ARGS__) + + #define LOG_INTERNAL(level, fmt, ...) do { \ +- if (g_log_callback && level <= g_log_level) { \ +- g_log_callback("%s:%d: " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__); \ ++ if (g_cubeb_log_callback && level <= g_cubeb_log_level) { \ ++ g_cubeb_log_callback("%s:%d: " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__); \ + } \ + } while(0) + ++/* Asynchronous verbose logging, to log in real-time callbacks. */ ++#define ALOGV(fmt, ...) \ ++do { \ ++ cubeb_async_log(fmt, ##__VA_ARGS__); \ ++} while(0) ++ + #endif // CUBEB_LOG +diff --git a/media/libcubeb/src/cubeb_mixer.cpp b/media/libcubeb/src/cubeb_mixer.cpp +new file mode 100644 +index 000000000..2ab7f673a +--- /dev/null ++++ b/media/libcubeb/src/cubeb_mixer.cpp +@@ -0,0 +1,663 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ * ++ * Adapted from code based on libswresample's rematrix.c ++ */ ++ ++#define NOMINMAX ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "cubeb-internal.h" ++#include "cubeb_mixer.h" ++#include "cubeb_utils.h" ++ ++#ifndef FF_ARRAY_ELEMS ++#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) ++#endif ++ ++#define CHANNELS_MAX 32 ++#define FRONT_LEFT 0 ++#define FRONT_RIGHT 1 ++#define FRONT_CENTER 2 ++#define LOW_FREQUENCY 3 ++#define BACK_LEFT 4 ++#define BACK_RIGHT 5 ++#define FRONT_LEFT_OF_CENTER 6 ++#define FRONT_RIGHT_OF_CENTER 7 ++#define BACK_CENTER 8 ++#define SIDE_LEFT 9 ++#define SIDE_RIGHT 10 ++#define TOP_CENTER 11 ++#define TOP_FRONT_LEFT 12 ++#define TOP_FRONT_CENTER 13 ++#define TOP_FRONT_RIGHT 14 ++#define TOP_BACK_LEFT 15 ++#define TOP_BACK_CENTER 16 ++#define TOP_BACK_RIGHT 17 ++#define NUM_NAMED_CHANNELS 18 ++ ++#ifndef M_SQRT1_2 ++#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ ++#endif ++#ifndef M_SQRT2 ++#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ ++#endif ++#define SQRT3_2 1.22474487139158904909 /* sqrt(3/2) */ ++ ++#define C30DB M_SQRT2 ++#define C15DB 1.189207115 ++#define C__0DB 1.0 ++#define C_15DB 0.840896415 ++#define C_30DB M_SQRT1_2 ++#define C_45DB 0.594603558 ++#define C_60DB 0.5 ++ ++static cubeb_channel_layout ++cubeb_channel_layout_check(cubeb_channel_layout l, uint32_t c) ++{ ++ if (l == CUBEB_LAYOUT_UNDEFINED) { ++ switch (c) { ++ case 1: return CUBEB_LAYOUT_MONO; ++ case 2: return CUBEB_LAYOUT_STEREO; ++ } ++ } ++ return l; ++} ++ ++unsigned int cubeb_channel_layout_nb_channels(cubeb_channel_layout x) ++{ ++#if __GNUC__ || __clang__ ++ return __builtin_popcount (x); ++#else ++ x -= (x >> 1) & 0x55555555; ++ x = (x & 0x33333333) + ((x >> 2) & 0x33333333); ++ x = (x + (x >> 4)) & 0x0F0F0F0F; ++ x += x >> 8; ++ return (x + (x >> 16)) & 0x3F; ++#endif ++} ++ ++struct MixerContext { ++ MixerContext(cubeb_sample_format f, ++ uint32_t in_channels, ++ cubeb_channel_layout in, ++ uint32_t out_channels, ++ cubeb_channel_layout out) ++ : _format(f) ++ , _in_ch_layout(cubeb_channel_layout_check(in, in_channels)) ++ , _out_ch_layout(cubeb_channel_layout_check(out, out_channels)) ++ , _in_ch_count(in_channels) ++ , _out_ch_count(out_channels) ++ { ++ if (in_channels != cubeb_channel_layout_nb_channels(in) || ++ out_channels != cubeb_channel_layout_nb_channels(out)) { ++ // Mismatch between channels and layout, aborting. ++ return; ++ } ++ _valid = init() >= 0; ++ } ++ ++ static bool even(cubeb_channel_layout layout) ++ { ++ if (!layout) { ++ return true; ++ } ++ if (layout & (layout - 1)) { ++ return true; ++ } ++ return false; ++ } ++ ++ // Ensure that the layout is sane (that is have symmetrical left/right ++ // channels), if not, layout will be treated as mono. ++ static cubeb_channel_layout clean_layout(cubeb_channel_layout layout) ++ { ++ if (layout && layout != CHANNEL_FRONT_LEFT && !(layout & (layout - 1))) { ++ LOG("Treating layout as mono"); ++ return CHANNEL_FRONT_CENTER; ++ } ++ ++ return layout; ++ } ++ ++ static bool sane_layout(cubeb_channel_layout layout) ++ { ++ if (!(layout & CUBEB_LAYOUT_3F)) { // at least 1 front speaker ++ return false; ++ } ++ if (!even(layout & (CHANNEL_FRONT_LEFT | ++ CHANNEL_FRONT_RIGHT))) { // no asymetric front ++ return false; ++ } ++ if (!even(layout & ++ (CHANNEL_SIDE_LEFT | CHANNEL_SIDE_RIGHT))) { // no asymetric side ++ return false; ++ } ++ if (!even(layout & (CHANNEL_BACK_LEFT | CHANNEL_BACK_RIGHT))) { ++ return false; ++ } ++ if (!even(layout & ++ (CHANNEL_FRONT_LEFT_OF_CENTER | CHANNEL_FRONT_RIGHT_OF_CENTER))) { ++ return false; ++ } ++ if (cubeb_channel_layout_nb_channels(layout) >= CHANNELS_MAX) { ++ return false; ++ } ++ return true; ++ } ++ ++ int auto_matrix(); ++ int init(); ++ ++ const cubeb_sample_format _format; ++ const cubeb_channel_layout _in_ch_layout; ///< input channel layout ++ const cubeb_channel_layout _out_ch_layout; ///< output channel layout ++ const uint32_t _in_ch_count; ///< input channel count ++ const uint32_t _out_ch_count; ///< output channel count ++ const float _surround_mix_level = C_30DB; ///< surround mixing level ++ const float _center_mix_level = C_30DB; ///< center mixing level ++ const float _lfe_mix_level = 1; ///< LFE mixing level ++ double _matrix[CHANNELS_MAX][CHANNELS_MAX] = {{ 0 }}; ///< floating point rematrixing coefficients ++ float _matrix_flt[CHANNELS_MAX][CHANNELS_MAX] = {{ 0 }}; ///< single precision floating point rematrixing coefficients ++ int32_t _matrix32[CHANNELS_MAX][CHANNELS_MAX] = {{ 0 }}; ///< 17.15 fixed point rematrixing coefficients ++ uint8_t _matrix_ch[CHANNELS_MAX][CHANNELS_MAX+1] = {{ 0 }}; ///< Lists of input channels per output channel that have non zero rematrixing coefficients ++ bool _clipping = false; ///< Set to true if clipping detection is required ++ bool _valid = false; ///< Set to true if context is valid. ++}; ++ ++int MixerContext::auto_matrix() ++{ ++ double matrix[NUM_NAMED_CHANNELS][NUM_NAMED_CHANNELS] = { { 0 } }; ++ double maxcoef = 0; ++ float maxval; ++ ++ cubeb_channel_layout in_ch_layout = clean_layout(_in_ch_layout); ++ cubeb_channel_layout out_ch_layout = clean_layout(_out_ch_layout); ++ ++ if (!sane_layout(in_ch_layout)) { ++ // Channel Not Supported ++ LOG("Input Layout %x is not supported", _in_ch_layout); ++ return -1; ++ } ++ ++ if (!sane_layout(out_ch_layout)) { ++ LOG("Output Layout %x is not supported", _out_ch_layout); ++ return -1; ++ } ++ ++ for (uint32_t i = 0; i < FF_ARRAY_ELEMS(matrix); i++) { ++ if (in_ch_layout & out_ch_layout & (1U << i)) { ++ matrix[i][i] = 1.0; ++ } ++ } ++ ++ cubeb_channel_layout unaccounted = in_ch_layout & ~out_ch_layout; ++ ++ // Rematrixing is done via a matrix of coefficient that should be applied to ++ // all channels. Channels are treated as pair and must be symmetrical (if a ++ // left channel exists, the corresponding right should exist too) unless the ++ // output layout has similar layout. Channels are then mixed toward the front ++ // center or back center if they exist with a slight bias toward the front. ++ ++ if (unaccounted & CHANNEL_FRONT_CENTER) { ++ if ((out_ch_layout & CUBEB_LAYOUT_STEREO) == CUBEB_LAYOUT_STEREO) { ++ if (in_ch_layout & CUBEB_LAYOUT_STEREO) { ++ matrix[FRONT_LEFT][FRONT_CENTER] += _center_mix_level; ++ matrix[FRONT_RIGHT][FRONT_CENTER] += _center_mix_level; ++ } else { ++ matrix[FRONT_LEFT][FRONT_CENTER] += M_SQRT1_2; ++ matrix[FRONT_RIGHT][FRONT_CENTER] += M_SQRT1_2; ++ } ++ } ++ } ++ if (unaccounted & CUBEB_LAYOUT_STEREO) { ++ if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][FRONT_LEFT] += M_SQRT1_2; ++ matrix[FRONT_CENTER][FRONT_RIGHT] += M_SQRT1_2; ++ if (in_ch_layout & CHANNEL_FRONT_CENTER) ++ matrix[FRONT_CENTER][FRONT_CENTER] = _center_mix_level * M_SQRT2; ++ } ++ } ++ ++ if (unaccounted & CHANNEL_BACK_CENTER) { ++ if (out_ch_layout & CHANNEL_BACK_LEFT) { ++ matrix[BACK_LEFT][BACK_CENTER] += M_SQRT1_2; ++ matrix[BACK_RIGHT][BACK_CENTER] += M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_SIDE_LEFT) { ++ matrix[SIDE_LEFT][BACK_CENTER] += M_SQRT1_2; ++ matrix[SIDE_RIGHT][BACK_CENTER] += M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][BACK_CENTER] += _surround_mix_level * M_SQRT1_2; ++ matrix[FRONT_RIGHT][BACK_CENTER] += _surround_mix_level * M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][BACK_CENTER] += ++ _surround_mix_level * M_SQRT1_2; ++ } ++ } ++ if (unaccounted & CHANNEL_BACK_LEFT) { ++ if (out_ch_layout & CHANNEL_BACK_CENTER) { ++ matrix[BACK_CENTER][BACK_LEFT] += M_SQRT1_2; ++ matrix[BACK_CENTER][BACK_RIGHT] += M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_SIDE_LEFT) { ++ if (in_ch_layout & CHANNEL_SIDE_LEFT) { ++ matrix[SIDE_LEFT][BACK_LEFT] += M_SQRT1_2; ++ matrix[SIDE_RIGHT][BACK_RIGHT] += M_SQRT1_2; ++ } else { ++ matrix[SIDE_LEFT][BACK_LEFT] += 1.0; ++ matrix[SIDE_RIGHT][BACK_RIGHT] += 1.0; ++ } ++ } else if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][BACK_LEFT] += _surround_mix_level; ++ matrix[FRONT_RIGHT][BACK_RIGHT] += _surround_mix_level; ++ } else if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][BACK_LEFT] += _surround_mix_level * M_SQRT1_2; ++ matrix[FRONT_CENTER][BACK_RIGHT] += _surround_mix_level * M_SQRT1_2; ++ } ++ } ++ ++ if (unaccounted & CHANNEL_SIDE_LEFT) { ++ if (out_ch_layout & CHANNEL_BACK_LEFT) { ++ /* if back channels do not exist in the input, just copy side ++ channels to back channels, otherwise mix side into back */ ++ if (in_ch_layout & CHANNEL_BACK_LEFT) { ++ matrix[BACK_LEFT][SIDE_LEFT] += M_SQRT1_2; ++ matrix[BACK_RIGHT][SIDE_RIGHT] += M_SQRT1_2; ++ } else { ++ matrix[BACK_LEFT][SIDE_LEFT] += 1.0; ++ matrix[BACK_RIGHT][SIDE_RIGHT] += 1.0; ++ } ++ } else if (out_ch_layout & CHANNEL_BACK_CENTER) { ++ matrix[BACK_CENTER][SIDE_LEFT] += M_SQRT1_2; ++ matrix[BACK_CENTER][SIDE_RIGHT] += M_SQRT1_2; ++ } else if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][SIDE_LEFT] += _surround_mix_level; ++ matrix[FRONT_RIGHT][SIDE_RIGHT] += _surround_mix_level; ++ } else if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][SIDE_LEFT] += _surround_mix_level * M_SQRT1_2; ++ matrix[FRONT_CENTER][SIDE_RIGHT] += _surround_mix_level * M_SQRT1_2; ++ } ++ } ++ ++ if (unaccounted & CHANNEL_FRONT_LEFT_OF_CENTER) { ++ if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][FRONT_LEFT_OF_CENTER] += 1.0; ++ matrix[FRONT_RIGHT][FRONT_RIGHT_OF_CENTER] += 1.0; ++ } else if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][FRONT_LEFT_OF_CENTER] += M_SQRT1_2; ++ matrix[FRONT_CENTER][FRONT_RIGHT_OF_CENTER] += M_SQRT1_2; ++ } ++ } ++ /* mix LFE into front left/right or center */ ++ if (unaccounted & CHANNEL_LOW_FREQUENCY) { ++ if (out_ch_layout & CHANNEL_FRONT_CENTER) { ++ matrix[FRONT_CENTER][LOW_FREQUENCY] += _lfe_mix_level; ++ } else if (out_ch_layout & CHANNEL_FRONT_LEFT) { ++ matrix[FRONT_LEFT][LOW_FREQUENCY] += _lfe_mix_level * M_SQRT1_2; ++ matrix[FRONT_RIGHT][LOW_FREQUENCY] += _lfe_mix_level * M_SQRT1_2; ++ } ++ } ++ ++ // Normalize the conversion matrix. ++ for (uint32_t out_i = 0, i = 0; i < CHANNELS_MAX; i++) { ++ double sum = 0; ++ int in_i = 0; ++ if ((out_ch_layout & (1U << i)) == 0) { ++ continue; ++ } ++ for (uint32_t j = 0; j < CHANNELS_MAX; j++) { ++ if ((in_ch_layout & (1U << j)) == 0) { ++ continue; ++ } ++ if (i < FF_ARRAY_ELEMS(matrix) && j < FF_ARRAY_ELEMS(matrix[0])) { ++ _matrix[out_i][in_i] = matrix[i][j]; ++ } else { ++ _matrix[out_i][in_i] = ++ i == j && (in_ch_layout & out_ch_layout & (1U << i)); ++ } ++ sum += fabs(_matrix[out_i][in_i]); ++ in_i++; ++ } ++ maxcoef = std::max(maxcoef, sum); ++ out_i++; ++ } ++ ++ if (_format == CUBEB_SAMPLE_S16NE) { ++ maxval = 1.0; ++ } else { ++ maxval = INT_MAX; ++ } ++ ++ // Normalize matrix if needed. ++ if (maxcoef > maxval) { ++ maxcoef /= maxval; ++ for (uint32_t i = 0; i < CHANNELS_MAX; i++) ++ for (uint32_t j = 0; j < CHANNELS_MAX; j++) { ++ _matrix[i][j] /= maxcoef; ++ } ++ } ++ ++ if (_format == CUBEB_SAMPLE_FLOAT32NE) { ++ for (uint32_t i = 0; i < FF_ARRAY_ELEMS(_matrix); i++) { ++ for (uint32_t j = 0; j < FF_ARRAY_ELEMS(_matrix[0]); j++) { ++ _matrix_flt[i][j] = _matrix[i][j]; ++ } ++ } ++ } ++ ++ return 0; ++} ++ ++int MixerContext::init() ++{ ++ int r = auto_matrix(); ++ if (r) { ++ return r; ++ } ++ ++ // Determine if matrix operation would overflow ++ if (_format == CUBEB_SAMPLE_S16NE) { ++ int maxsum = 0; ++ for (uint32_t i = 0; i < _out_ch_count; i++) { ++ double rem = 0; ++ int sum = 0; ++ ++ for (uint32_t j = 0; j < _in_ch_count; j++) { ++ double target = _matrix[i][j] * 32768 + rem; ++ int value = lrintf(target); ++ rem += target - value; ++ sum += std::abs(value); ++ } ++ maxsum = std::max(maxsum, sum); ++ } ++ if (maxsum > 32768) { ++ _clipping = true; ++ } ++ } ++ ++ // FIXME quantize for integers ++ for (uint32_t i = 0; i < CHANNELS_MAX; i++) { ++ int ch_in = 0; ++ for (uint32_t j = 0; j < CHANNELS_MAX; j++) { ++ _matrix32[i][j] = lrintf(_matrix[i][j] * 32768); ++ if (_matrix[i][j]) { ++ _matrix_ch[i][++ch_in] = j; ++ } ++ } ++ _matrix_ch[i][0] = ch_in; ++ } ++ ++ return 0; ++} ++ ++template ++void ++sum2(TYPE_SAMPLE * out, ++ uint32_t stride_out, ++ const TYPE_SAMPLE * in1, ++ const TYPE_SAMPLE * in2, ++ uint32_t stride_in, ++ TYPE_COEFF coeff1, ++ TYPE_COEFF coeff2, ++ F&& operand, ++ uint32_t frames) ++{ ++ static_assert( ++ std::is_same::type>::value, ++ "function must return the same type as used by matrix_coeff"); ++ for (uint32_t i = 0; i < frames; i++) { ++ *out = operand(coeff1 * *in1 + coeff2 * *in2); ++ out += stride_out; ++ in1 += stride_in; ++ in2 += stride_in; ++ } ++} ++ ++template ++void ++copy(TYPE_SAMPLE * out, ++ uint32_t stride_out, ++ const TYPE_SAMPLE * in, ++ uint32_t stride_in, ++ TYPE_COEFF coeff, ++ F&& operand, ++ uint32_t frames) ++{ ++ static_assert( ++ std::is_same::type>::value, ++ "function must return the same type as used by matrix_coeff"); ++ for (uint32_t i = 0; i < frames; i++) { ++ *out = operand(coeff * *in); ++ out += stride_out; ++ in += stride_in; ++ } ++} ++ ++template ++static int rematrix(const MixerContext * s, TYPE * aOut, const TYPE * aIn, ++ const TYPE_COEFF (&matrix_coeff)[COLS][COLS], ++ F&& aF, uint32_t frames) ++{ ++ static_assert( ++ std::is_same::type>::value, ++ "function must return the same type as used by matrix_coeff"); ++ ++ for (uint32_t out_i = 0; out_i < s->_out_ch_count; out_i++) { ++ TYPE* out = aOut + out_i; ++ switch (s->_matrix_ch[out_i][0]) { ++ case 0: ++ for (uint32_t i = 0; i < frames; i++) { ++ out[i * s->_out_ch_count] = 0; ++ } ++ break; ++ case 1: { ++ int in_i = s->_matrix_ch[out_i][1]; ++ copy(out, ++ s->_out_ch_count, ++ aIn + in_i, ++ s->_in_ch_count, ++ matrix_coeff[out_i][in_i], ++ aF, ++ frames); ++ } break; ++ case 2: ++ sum2(out, ++ s->_out_ch_count, ++ aIn + s->_matrix_ch[out_i][1], ++ aIn + s->_matrix_ch[out_i][2], ++ s->_in_ch_count, ++ matrix_coeff[out_i][s->_matrix_ch[out_i][1]], ++ matrix_coeff[out_i][s->_matrix_ch[out_i][2]], ++ aF, ++ frames); ++ break; ++ default: ++ for (uint32_t i = 0; i < frames; i++) { ++ TYPE_COEFF v = 0; ++ for (uint32_t j = 0; j < s->_matrix_ch[out_i][0]; j++) { ++ uint32_t in_i = s->_matrix_ch[out_i][1 + j]; ++ v += ++ *(aIn + in_i + i * s->_in_ch_count) * matrix_coeff[out_i][in_i]; ++ } ++ out[i * s->_out_ch_count] = aF(v); ++ } ++ break; ++ } ++ } ++ return 0; ++} ++ ++struct cubeb_mixer ++{ ++ cubeb_mixer(cubeb_sample_format format, ++ uint32_t in_channels, ++ cubeb_channel_layout in_layout, ++ uint32_t out_channels, ++ cubeb_channel_layout out_layout) ++ : _context(format, in_channels, in_layout, out_channels, out_layout) ++ { ++ } ++ ++ template ++ void copy_and_trunc(size_t frames, ++ const T * input_buffer, ++ T * output_buffer) const ++ { ++ if (_context._in_ch_count <= _context._out_ch_count) { ++ // Not enough channels to copy, fill the gaps with silence. ++ if (_context._in_ch_count == 1 && _context._out_ch_count >= 2) { ++ // Special case for upmixing mono input to stereo and more. We will ++ // duplicate the mono channel to the first two channels. On most system, ++ // the first two channels are for left and right. It is commonly ++ // expected that mono will on both left+right channels ++ for (uint32_t i = 0; i < frames; i++) { ++ output_buffer[0] = output_buffer[1] = *input_buffer; ++ PodZero(output_buffer + 2, _context._out_ch_count - 2); ++ output_buffer += _context._out_ch_count; ++ input_buffer++; ++ } ++ return; ++ } ++ for (uint32_t i = 0; i < frames; i++) { ++ PodCopy(output_buffer, input_buffer, _context._in_ch_count); ++ output_buffer += _context._in_ch_count; ++ input_buffer += _context._in_ch_count; ++ PodZero(output_buffer, _context._out_ch_count - _context._in_ch_count); ++ output_buffer += _context._out_ch_count - _context._in_ch_count; ++ } ++ } else { ++ for (uint32_t i = 0; i < frames; i++) { ++ PodCopy(output_buffer, input_buffer, _context._out_ch_count); ++ output_buffer += _context._out_ch_count; ++ input_buffer += _context._in_ch_count; ++ } ++ } ++ } ++ ++ int mix(size_t frames, ++ const void * input_buffer, ++ size_t input_buffer_size, ++ void * output_buffer, ++ size_t output_buffer_size) const ++ { ++ if (frames <= 0 || _context._out_ch_count == 0) { ++ return 0; ++ } ++ ++ // Check if output buffer is of sufficient size. ++ size_t size_read_needed = ++ frames * _context._in_ch_count * cubeb_sample_size(_context._format); ++ if (input_buffer_size < size_read_needed) { ++ // We don't have enough data to read! ++ return -1; ++ } ++ if (output_buffer_size * _context._in_ch_count < ++ size_read_needed * _context._out_ch_count) { ++ return -1; ++ } ++ ++ if (!valid()) { ++ // The channel layouts were invalid or unsupported, instead we will simply ++ // either drop the extra channels, or fill with silence the missing ones ++ if (_context._format == CUBEB_SAMPLE_FLOAT32NE) { ++ copy_and_trunc(frames, ++ static_cast(input_buffer), ++ static_cast(output_buffer)); ++ } else { ++ assert(_context._format == CUBEB_SAMPLE_S16NE); ++ copy_and_trunc(frames, ++ static_cast(input_buffer), ++ reinterpret_cast(output_buffer)); ++ } ++ return 0; ++ } ++ ++ switch (_context._format) ++ { ++ case CUBEB_SAMPLE_FLOAT32NE: { ++ auto f = [](float x) { return x; }; ++ return rematrix(&_context, ++ static_cast(output_buffer), ++ static_cast(input_buffer), ++ _context._matrix_flt, ++ f, ++ frames); ++ } ++ case CUBEB_SAMPLE_S16NE: ++ if (_context._clipping) { ++ auto f = [](int x) { ++ int y = (x + 16384) >> 15; ++ // clip the signed integer value into the -32768,32767 range. ++ if ((y + 0x8000U) & ~0xFFFF) { ++ return (y >> 31) ^ 0x7FFF; ++ } ++ return y; ++ }; ++ return rematrix(&_context, ++ static_cast(output_buffer), ++ static_cast(input_buffer), ++ _context._matrix32, ++ f, ++ frames); ++ } else { ++ auto f = [](int x) { return (x + 16384) >> 15; }; ++ return rematrix(&_context, ++ static_cast(output_buffer), ++ static_cast(input_buffer), ++ _context._matrix32, ++ f, ++ frames); ++ } ++ break; ++ default: ++ assert(false); ++ break; ++ } ++ ++ return -1; ++ } ++ ++ // Return false if any of the input or ouput layout were invalid. ++ bool valid() const { return _context._valid; } ++ ++ virtual ~cubeb_mixer(){}; ++ ++ MixerContext _context; ++}; ++ ++cubeb_mixer* cubeb_mixer_create(cubeb_sample_format format, ++ uint32_t in_channels, ++ cubeb_channel_layout in_layout, ++ uint32_t out_channels, ++ cubeb_channel_layout out_layout) ++{ ++ return new cubeb_mixer( ++ format, in_channels, in_layout, out_channels, out_layout); ++} ++ ++void cubeb_mixer_destroy(cubeb_mixer * mixer) ++{ ++ delete mixer; ++} ++ ++int cubeb_mixer_mix(cubeb_mixer * mixer, ++ size_t frames, ++ const void * input_buffer, ++ size_t input_buffer_size, ++ void * output_buffer, ++ size_t output_buffer_size) ++{ ++ return mixer->mix( ++ frames, input_buffer, input_buffer_size, output_buffer, output_buffer_size); ++} +diff --git a/media/libcubeb/src/cubeb_mixer.h b/media/libcubeb/src/cubeb_mixer.h +new file mode 100644 +index 000000000..d43a237f9 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_mixer.h +@@ -0,0 +1,37 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#ifndef CUBEB_MIXER ++#define CUBEB_MIXER ++ ++#include "cubeb/cubeb.h" // for cubeb_channel_layout and cubeb_stream_params. ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++typedef struct cubeb_mixer cubeb_mixer; ++cubeb_mixer * cubeb_mixer_create(cubeb_sample_format format, ++ uint32_t in_channels, ++ cubeb_channel_layout in_layout, ++ uint32_t out_channels, ++ cubeb_channel_layout out_layout); ++void cubeb_mixer_destroy(cubeb_mixer * mixer); ++int cubeb_mixer_mix(cubeb_mixer * mixer, ++ size_t frames, ++ const void * input_buffer, ++ size_t input_buffer_size, ++ void * output_buffer, ++ size_t output_buffer_size); ++ ++unsigned int cubeb_channel_layout_nb_channels(cubeb_channel_layout channel_layout); ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif // CUBEB_MIXER +diff --git a/media/libcubeb/src/cubeb_opensl.c b/media/libcubeb/src/cubeb_opensl.c +index dd5416228..96374ec07 100644 +--- a/media/libcubeb/src/cubeb_opensl.c ++++ b/media/libcubeb/src/cubeb_opensl.c +@@ -9,6 +9,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -19,88 +20,268 @@ + #include + #include + #include +-#define LOG(args...) __android_log_print(ANDROID_LOG_INFO, "Cubeb_OpenSL" , ## args) +-#define ANDROID_VERSION_GINGERBREAD_MR1 10 +-#define ANDROID_VERSION_LOLLIPOP 21 +-#define ANDROID_VERSION_MARSHMALLOW 23 + #endif + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + #include "cubeb_resampler.h" + #include "cubeb-sles.h" ++#include "cubeb_array_queue.h" ++#include "android/cubeb-output-latency.h" ++ ++#if defined(__ANDROID__) ++#ifdef LOG ++#undef LOG ++#endif ++//#define LOGGING_ENABLED ++#ifdef LOGGING_ENABLED ++#define LOG(args...) __android_log_print(ANDROID_LOG_INFO, "Cubeb_OpenSL" , ## args) ++#else ++#define LOG(...) ++#endif ++ ++//#define TIMESTAMP_ENABLED ++#ifdef TIMESTAMP_ENABLED ++#define FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) ++#define LOG_TS(args...) __android_log_print(ANDROID_LOG_INFO, "Cubeb_OpenSL ES: Timestamp(usec)" , ## args) ++#define TIMESTAMP(msg) do { \ ++ struct timeval timestamp; \ ++ int ts_ret = gettimeofday(×tamp, NULL); \ ++ if (ts_ret == 0) { \ ++ LOG_TS("%lld: %s (%s %s:%d)", timestamp.tv_sec * 1000000LL + timestamp.tv_usec, msg, __FUNCTION__, FILENAME, __LINE__);\ ++ } else { \ ++ LOG_TS("Error: %s (%s %s:%d) - %s", msg, __FUNCTION__, FILENAME, __LINE__);\ ++ } \ ++} while(0) ++#else ++#define TIMESTAMP(...) ++#endif ++ ++#define ANDROID_VERSION_GINGERBREAD_MR1 10 ++#define ANDROID_VERSION_JELLY_BEAN 18 ++#define ANDROID_VERSION_LOLLIPOP 21 ++#define ANDROID_VERSION_MARSHMALLOW 23 ++#define ANDROID_VERSION_N_MR1 25 ++#endif ++ ++#define DEFAULT_SAMPLE_RATE 48000 ++#define DEFAULT_NUM_OF_FRAMES 480 ++// If the latency requested is above this threshold, this stream is considered ++// intended for playback (vs. real-time). Tell Android it should favor saving ++// power over performance or latency. ++// This is around 100ms at 44100 or 48000 ++#define POWERSAVE_LATENCY_FRAMES_THRESHOLD 4000 + + static struct cubeb_ops const opensl_ops; + + struct cubeb { + struct cubeb_ops const * ops; + void * lib; +- void * libmedia; +- int32_t (* get_output_latency)(uint32_t * latency, int stream_type); + SLInterfaceID SL_IID_BUFFERQUEUE; + SLInterfaceID SL_IID_PLAY; + #if defined(__ANDROID__) + SLInterfaceID SL_IID_ANDROIDCONFIGURATION; ++ SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE; + #endif + SLInterfaceID SL_IID_VOLUME; ++ SLInterfaceID SL_IID_RECORD; + SLObjectItf engObj; + SLEngineItf eng; + SLObjectItf outmixObj; ++ output_latency_function * p_output_latency_function; + }; + + #define NELEMS(A) (sizeof(A) / sizeof A[0]) +-#define NBUFS 4 +-#define AUDIO_STREAM_TYPE_MUSIC 3 ++#define NBUFS 2 + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + pthread_mutex_t mutex; + SLObjectItf playerObj; + SLPlayItf play; + SLBufferQueueItf bufq; + SLVolumeItf volume; +- uint8_t *queuebuf[NBUFS]; ++ void ** queuebuf; ++ uint32_t queuebuf_capacity; + int queuebuf_idx; + long queuebuf_len; + long bytespersec; + long framesize; ++ /* Total number of played frames. ++ * Synchronized by stream::mutex lock. */ + long written; ++ /* Flag indicating draining. Synchronized ++ * by stream::mutex lock. */ + int draining; +- cubeb_stream_type stream_type; +- ++ /* Flags to determine in/out.*/ ++ uint32_t input_enabled; ++ uint32_t output_enabled; ++ /* Recorder abstract object. */ ++ SLObjectItf recorderObj; ++ /* Recorder Itf for input capture. */ ++ SLRecordItf recorderItf; ++ /* Buffer queue for input capture. */ ++ SLAndroidSimpleBufferQueueItf recorderBufferQueueItf; ++ /* Store input buffers. */ ++ void ** input_buffer_array; ++ /* The capacity of the array. ++ * On capture only can be small (4). ++ * On full duplex is calculated to ++ * store 1 sec of data buffers. */ ++ uint32_t input_array_capacity; ++ /* Current filled index of input buffer array. ++ * It is initiated to -1 indicating buffering ++ * have not started yet. */ ++ int input_buffer_index; ++ /* Length of input buffer.*/ ++ uint32_t input_buffer_length; ++ /* Input frame size */ ++ uint32_t input_frame_size; ++ /* Device sampling rate. If user rate is not ++ * accepted an compatible rate is set. If it is ++ * accepted this is equal to params.rate. */ ++ uint32_t input_device_rate; ++ /* Exchange input buffers between input ++ * and full duplex threads. */ ++ array_queue * input_queue; ++ /* Silent input buffer used on full duplex. */ ++ void * input_silent_buffer; ++ /* Number of input frames from the start of the stream*/ ++ uint32_t input_total_frames; ++ /* Flag to stop the execution of user callback and ++ * close all working threads. Synchronized by ++ * stream::mutex lock. */ ++ uint32_t shutdown; ++ /* Store user callback. */ + cubeb_data_callback data_callback; ++ /* Store state callback. */ + cubeb_state_callback state_callback; +- void * user_ptr; + + cubeb_resampler * resampler; +- unsigned int inputrate; +- unsigned int outputrate; +- unsigned int latency; ++ unsigned int user_output_rate; ++ unsigned int output_configured_rate; ++ unsigned int buffer_size_frames; ++ // Audio output latency used in cubeb_stream_get_position(). ++ unsigned int output_latency_ms; + int64_t lastPosition; + int64_t lastPositionTimeStamp; + int64_t lastCompensativePosition; ++ int voice; + }; + ++/* Forward declaration. */ ++static int opensl_stop_player(cubeb_stream * stm); ++static int opensl_stop_recorder(cubeb_stream * stm); ++ ++static int ++opensl_get_draining(cubeb_stream * stm) ++{ ++#ifdef DEBUG ++ int r = pthread_mutex_trylock(&stm->mutex); ++ assert((r == EDEADLK || r == EBUSY) && "get_draining: mutex should be locked but it's not."); ++#endif ++ return stm->draining; ++} ++ ++static void ++opensl_set_draining(cubeb_stream * stm, int value) ++{ ++#ifdef DEBUG ++ int r = pthread_mutex_trylock(&stm->mutex); ++ LOG("set draining try r = %d", r); ++ assert((r == EDEADLK || r == EBUSY) && "set_draining: mutex should be locked but it's not."); ++#endif ++ assert(value == 0 || value == 1); ++ stm->draining = value; ++} ++ ++static void ++opensl_notify_drained(cubeb_stream * stm) ++{ ++ assert(stm); ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ if (draining) { ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); ++ if (stm->play) { ++ LOG("stop player in play_callback"); ++ r = opensl_stop_player(stm); ++ assert(r == CUBEB_OK); ++ } ++ if (stm->recorderItf) { ++ r = opensl_stop_recorder(stm); ++ assert(r == CUBEB_OK); ++ } ++ } ++} ++ ++static uint32_t ++opensl_get_shutdown(cubeb_stream * stm) ++{ ++#ifdef DEBUG ++ int r = pthread_mutex_trylock(&stm->mutex); ++ assert((r == EDEADLK || r == EBUSY) && "get_shutdown: mutex should be locked but it's not."); ++#endif ++ return stm->shutdown; ++} ++ ++static void ++opensl_set_shutdown(cubeb_stream * stm, uint32_t value) ++{ ++#ifdef DEBUG ++ int r = pthread_mutex_trylock(&stm->mutex); ++ LOG("set shutdown try r = %d", r); ++ assert((r == EDEADLK || r == EBUSY) && "set_shutdown: mutex should be locked but it's not."); ++#endif ++ assert(value == 0 || value == 1); ++ stm->shutdown = value; ++} ++ + static void + play_callback(SLPlayItf caller, void * user_ptr, SLuint32 event) + { + cubeb_stream * stm = user_ptr; +- int draining; + assert(stm); + switch (event) { +- case SL_PLAYEVENT_HEADATMARKER: +- pthread_mutex_lock(&stm->mutex); +- draining = stm->draining; +- pthread_mutex_unlock(&stm->mutex); +- if (draining) { +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); +- (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PAUSED); +- } ++ case SL_PLAYEVENT_HEADATMARKER: ++ opensl_notify_drained(stm); + break; + default: + break; + } + } + ++static void ++recorder_marker_callback (SLRecordItf caller, void * pContext, SLuint32 event) ++{ ++ cubeb_stream * stm = pContext; ++ assert(stm); ++ ++ if (event == SL_RECORDEVENT_HEADATMARKER) { ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ if (draining) { ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); ++ if (stm->recorderItf) { ++ r = opensl_stop_recorder(stm); ++ assert(r == CUBEB_OK); ++ } ++ if (stm->play) { ++ r = opensl_stop_player(stm); ++ assert(r == CUBEB_OK); ++ } ++ } ++ } ++} ++ + static void + bufferqueue_callback(SLBufferQueueItf caller, void * user_ptr) + { +@@ -108,90 +289,333 @@ bufferqueue_callback(SLBufferQueueItf caller, void * user_ptr) + assert(stm); + SLBufferQueueState state; + SLresult res; ++ long written = 0; + + res = (*stm->bufq)->GetState(stm->bufq, &state); + assert(res == SL_RESULT_SUCCESS); + +- if (state.count > 1) ++ if (state.count > 1) { + return; ++ } + +- SLuint32 i; +- for (i = state.count; i < NBUFS; i++) { +- uint8_t *buf = stm->queuebuf[stm->queuebuf_idx]; +- long written = 0; +- pthread_mutex_lock(&stm->mutex); +- int draining = stm->draining; +- pthread_mutex_unlock(&stm->mutex); +- +- if (!draining) { +- written = cubeb_resampler_fill(stm->resampler, +- NULL, NULL, +- buf, stm->queuebuf_len / stm->framesize); +- if (written < 0 || written * stm->framesize > stm->queuebuf_len) { +- (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PAUSED); +- return; +- } ++ uint8_t *buf = stm->queuebuf[stm->queuebuf_idx]; ++ written = 0; ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ uint32_t shutdown = opensl_get_shutdown(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ if (!draining && !shutdown) { ++ written = cubeb_resampler_fill(stm->resampler, ++ NULL, NULL, ++ buf, stm->queuebuf_len / stm->framesize); ++ LOG("bufferqueue_callback: resampler fill returned %ld frames", written); ++ if (written < 0 || written * stm->framesize > stm->queuebuf_len) { ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ opensl_stop_player(stm); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ return; + } ++ } + +- // Keep sending silent data even in draining mode to prevent the audio +- // back-end from being stopped automatically by OpenSL/ES. +- memset(buf + written * stm->framesize, 0, stm->queuebuf_len - written * stm->framesize); +- res = (*stm->bufq)->Enqueue(stm->bufq, buf, stm->queuebuf_len); +- assert(res == SL_RESULT_SUCCESS); +- stm->queuebuf_idx = (stm->queuebuf_idx + 1) % NBUFS; +- if (written > 0) { +- pthread_mutex_lock(&stm->mutex); +- stm->written += written; +- pthread_mutex_unlock(&stm->mutex); +- } ++ // Keep sending silent data even in draining mode to prevent the audio ++ // back-end from being stopped automatically by OpenSL/ES. ++ assert(stm->queuebuf_len >= written * stm->framesize); ++ memset(buf + written * stm->framesize, 0, stm->queuebuf_len - written * stm->framesize); ++ res = (*stm->bufq)->Enqueue(stm->bufq, buf, stm->queuebuf_len); ++ assert(res == SL_RESULT_SUCCESS); ++ stm->queuebuf_idx = (stm->queuebuf_idx + 1) % stm->queuebuf_capacity; ++ ++ if (written > 0) { ++ pthread_mutex_lock(&stm->mutex); ++ stm->written += written; ++ pthread_mutex_unlock(&stm->mutex); ++ } + +- if (!draining && written * stm->framesize < stm->queuebuf_len) { +- pthread_mutex_lock(&stm->mutex); +- int64_t written_duration = INT64_C(1000) * stm->written * stm->framesize / stm->bytespersec; +- stm->draining = 1; +- pthread_mutex_unlock(&stm->mutex); ++ if (!draining && written * stm->framesize < stm->queuebuf_len) { ++ LOG("bufferqueue_callback draining"); ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int64_t written_duration = INT64_C(1000) * stm->written * stm->framesize / stm->bytespersec; ++ opensl_set_draining(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (written_duration == 0) { ++ // since we didn't write any sample, it's not possible to reach the marker ++ // time and trigger the callback. We should initiative notify drained. ++ opensl_notify_drained(stm); ++ } else { + // Use SL_PLAYEVENT_HEADATMARKER event from slPlayCallback of SLPlayItf + // to make sure all the data has been processed. + (*stm->play)->SetMarkerPosition(stm->play, (SLmillisecond)written_duration); +- return; + } ++ return; + } + } + +-#if defined(__ANDROID__) +-static SLuint32 +-convert_stream_type_to_sl_stream(cubeb_stream_type stream_type) +-{ +- switch(stream_type) { +- case CUBEB_STREAM_TYPE_SYSTEM: +- return SL_ANDROID_STREAM_SYSTEM; +- case CUBEB_STREAM_TYPE_MUSIC: +- return SL_ANDROID_STREAM_MEDIA; +- case CUBEB_STREAM_TYPE_NOTIFICATION: +- return SL_ANDROID_STREAM_NOTIFICATION; +- case CUBEB_STREAM_TYPE_ALARM: +- return SL_ANDROID_STREAM_ALARM; +- case CUBEB_STREAM_TYPE_VOICE_CALL: +- return SL_ANDROID_STREAM_VOICE; +- case CUBEB_STREAM_TYPE_RING: +- return SL_ANDROID_STREAM_RING; +- case CUBEB_STREAM_TYPE_SYSTEM_ENFORCED: +- return SL_ANDROID_STREAM_SYSTEM_ENFORCED; +- default: +- return 0xFFFFFFFF; ++static int ++opensl_enqueue_recorder(cubeb_stream * stm, void ** last_filled_buffer) ++{ ++ assert(stm); ++ ++ int current_index = stm->input_buffer_index; ++ void * last_buffer = NULL; ++ ++ if (current_index < 0) { ++ // This is the first enqueue ++ current_index = 0; ++ } else { ++ // The current index hold the last filled buffer get it before advance index. ++ last_buffer = stm->input_buffer_array[current_index]; ++ // Advance to get next available buffer ++ current_index = (current_index + 1) % stm->input_array_capacity; ++ } ++ // enqueue next empty buffer to be filled by the recorder ++ SLresult res = (*stm->recorderBufferQueueItf)->Enqueue(stm->recorderBufferQueueItf, ++ stm->input_buffer_array[current_index], ++ stm->input_buffer_length); ++ if (res != SL_RESULT_SUCCESS ) { ++ LOG("Enqueue recorder failed. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ // All good, update buffer and index. ++ stm->input_buffer_index = current_index; ++ if (last_filled_buffer) { ++ *last_filled_buffer = last_buffer; + } ++ return CUBEB_OK; ++} ++ ++// input data callback ++void recorder_callback(SLAndroidSimpleBufferQueueItf bq, void * context) ++{ ++ assert(context); ++ cubeb_stream * stm = context; ++ assert(stm->recorderBufferQueueItf); ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ uint32_t shutdown = opensl_get_shutdown(stm); ++ int draining = opensl_get_draining(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (shutdown || draining) { ++ // According to the OpenSL ES 1.1 Specification, 8.14 SLBufferQueueItf ++ // page 184, on transition to the SL_RECORDSTATE_STOPPED state, ++ // the application should continue to enqueue buffers onto the queue ++ // to retrieve the residual recorded data in the system. ++ r = opensl_enqueue_recorder(stm, NULL); ++ assert(r == CUBEB_OK); ++ return; ++ } ++ ++ // Enqueue next available buffer and get the last filled buffer. ++ void * input_buffer = NULL; ++ r = opensl_enqueue_recorder(stm, &input_buffer); ++ assert(r == CUBEB_OK); ++ assert(input_buffer); ++ // Fill resampler with last input ++ long input_frame_count = stm->input_buffer_length / stm->input_frame_size; ++ long got = cubeb_resampler_fill(stm->resampler, ++ input_buffer, ++ &input_frame_count, ++ NULL, ++ 0); ++ // Error case ++ if (got < 0 || got > input_frame_count) { ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ r = opensl_stop_recorder(stm); ++ assert(r == CUBEB_OK); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ } ++ ++ // Advance total stream frames ++ stm->input_total_frames += got; ++ ++ if (got < input_frame_count) { ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_draining(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ int64_t duration = INT64_C(1000) * stm->input_total_frames / stm->input_device_rate; ++ (*stm->recorderItf)->SetMarkerPosition(stm->recorderItf, (SLmillisecond)duration); ++ return; ++ } ++} ++ ++void recorder_fullduplex_callback(SLAndroidSimpleBufferQueueItf bq, void * context) ++{ ++ assert(context); ++ cubeb_stream * stm = context; ++ assert(stm->recorderBufferQueueItf); ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ uint32_t shutdown = opensl_get_shutdown(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (shutdown || draining) { ++ /* On draining and shutdown the recorder should have been stoped from ++ * the one set the flags. Accordint to the doc, on transition to ++ * the SL_RECORDSTATE_STOPPED state, the application should ++ * continue to enqueue buffers onto the queue to retrieve the residual ++ * recorded data in the system. */ ++ LOG("Input shutdown %d or drain %d", shutdown, draining); ++ int r = opensl_enqueue_recorder(stm, NULL); ++ assert(r == CUBEB_OK); ++ return; ++ } ++ ++ // Enqueue next available buffer and get the last filled buffer. ++ void * input_buffer = NULL; ++ r = opensl_enqueue_recorder(stm, &input_buffer); ++ assert(r == CUBEB_OK); ++ assert(input_buffer); ++ ++ assert(stm->input_queue); ++ r = array_queue_push(stm->input_queue, input_buffer); ++ if (r == -1) { ++ LOG("Input queue is full, drop input ..."); ++ return; ++ } ++ ++ LOG("Input pushed in the queue, input array %zu", ++ array_queue_get_size(stm->input_queue)); ++} ++ ++static void ++player_fullduplex_callback(SLBufferQueueItf caller, void * user_ptr) ++{ ++ TIMESTAMP("ENTER"); ++ cubeb_stream * stm = user_ptr; ++ assert(stm); ++ SLresult res; ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int draining = opensl_get_draining(stm); ++ uint32_t shutdown = opensl_get_shutdown(stm); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ // Get output ++ void * output_buffer = NULL; ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ output_buffer = stm->queuebuf[stm->queuebuf_idx]; ++ // Advance the output buffer queue index ++ stm->queuebuf_idx = (stm->queuebuf_idx + 1) % stm->queuebuf_capacity; ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (shutdown || draining) { ++ LOG("Shutdown/draining, send silent"); ++ // Set silent on buffer ++ memset(output_buffer, 0, stm->queuebuf_len); ++ ++ // Enqueue data in player buffer queue ++ res = (*stm->bufq)->Enqueue(stm->bufq, ++ output_buffer, ++ stm->queuebuf_len); ++ assert(res == SL_RESULT_SUCCESS); ++ return; ++ } ++ ++ // Get input. ++ void * input_buffer = array_queue_pop(stm->input_queue); ++ long input_frame_count = stm->input_buffer_length / stm->input_frame_size; ++ long frames_needed = stm->queuebuf_len / stm->framesize; ++ if (!input_buffer) { ++ LOG("Input hole set silent input buffer"); ++ input_buffer = stm->input_silent_buffer; ++ } ++ ++ long written = 0; ++ // Trigger user callback through resampler ++ written = cubeb_resampler_fill(stm->resampler, ++ input_buffer, ++ &input_frame_count, ++ output_buffer, ++ frames_needed); ++ ++ LOG("Fill: written %ld, frames_needed %ld, input array size %zu", ++ written, frames_needed, array_queue_get_size(stm->input_queue)); ++ ++ if (written < 0 || written > frames_needed) { ++ // Error case ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ opensl_stop_player(stm); ++ opensl_stop_recorder(stm); ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ memset(output_buffer, 0, stm->queuebuf_len); ++ ++ // Enqueue data in player buffer queue ++ res = (*stm->bufq)->Enqueue(stm->bufq, ++ output_buffer, ++ stm->queuebuf_len); ++ assert(res == SL_RESULT_SUCCESS); ++ return; ++ } ++ ++ // Advance total out written frames counter ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ stm->written += written; ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if ( written < frames_needed) { ++ r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ int64_t written_duration = INT64_C(1000) * stm->written * stm->framesize / stm->bytespersec; ++ opensl_set_draining(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ // Use SL_PLAYEVENT_HEADATMARKER event from slPlayCallback of SLPlayItf ++ // to make sure all the data has been processed. ++ (*stm->play)->SetMarkerPosition(stm->play, (SLmillisecond)written_duration); ++ } ++ ++ // Keep sending silent data even in draining mode to prevent the audio ++ // back-end from being stopped automatically by OpenSL/ES. ++ memset((uint8_t *)output_buffer + written * stm->framesize, 0, ++ stm->queuebuf_len - written * stm->framesize); ++ ++ // Enqueue data in player buffer queue ++ res = (*stm->bufq)->Enqueue(stm->bufq, ++ output_buffer, ++ stm->queuebuf_len); ++ assert(res == SL_RESULT_SUCCESS); ++ TIMESTAMP("EXIT"); + } +-#endif + + static void opensl_destroy(cubeb * ctx); + + #if defined(__ANDROID__) +- + #if (__ANDROID_API__ >= ANDROID_VERSION_LOLLIPOP) + typedef int (system_property_get)(const char*, char*); + + static int +-__system_property_get(const char* name, char* value) ++wrap_system_property_get(const char* name, char* value) + { + void* libc = dlopen("libc.so", RTLD_LAZY); + if (!libc) { +@@ -216,14 +640,18 @@ get_android_version(void) + + memset(version_string, 0, PROP_VALUE_MAX); + ++#if (__ANDROID_API__ >= ANDROID_VERSION_LOLLIPOP) ++ int len = wrap_system_property_get("ro.build.version.sdk", version_string); ++#else + int len = __system_property_get("ro.build.version.sdk", version_string); ++#endif + if (len <= 0) { + LOG("Failed to get Android version!\n"); + return len; + } + + int version = (int)strtol(version_string, NULL, 10); +- LOG("%d", version); ++ LOG("Android version %d", version); + return version; + } + #endif +@@ -249,30 +677,11 @@ opensl_init(cubeb ** context, char const * context_name) + ctx->ops = &opensl_ops; + + ctx->lib = dlopen("libOpenSLES.so", RTLD_LAZY); +- ctx->libmedia = dlopen("libmedia.so", RTLD_LAZY); +- if (!ctx->lib || !ctx->libmedia) { ++ if (!ctx->lib) { + free(ctx); + return CUBEB_ERROR; + } + +- /* Get the latency, in ms, from AudioFlinger */ +- /* status_t AudioSystem::getOutputLatency(uint32_t* latency, +- * audio_stream_type_t streamType) */ +- /* First, try the most recent signature. */ +- ctx->get_output_latency = +- dlsym(ctx->libmedia, "_ZN7android11AudioSystem16getOutputLatencyEPj19audio_stream_type_t"); +- if (!ctx->get_output_latency) { +- /* in case of failure, try the legacy version. */ +- /* status_t AudioSystem::getOutputLatency(uint32_t* latency, +- * int streamType) */ +- ctx->get_output_latency = +- dlsym(ctx->libmedia, "_ZN7android11AudioSystem16getOutputLatencyEPji"); +- if (!ctx->get_output_latency) { +- opensl_destroy(ctx); +- return CUBEB_ERROR; +- } +- } +- + typedef SLresult (*slCreateEngine_t)(SLObjectItf *, + SLuint32, + const SLEngineOption *, +@@ -287,16 +696,21 @@ opensl_init(cubeb ** context, char const * context_name) + ctx->SL_IID_BUFFERQUEUE = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_BUFFERQUEUE"); + #if defined(__ANDROID__) + ctx->SL_IID_ANDROIDCONFIGURATION = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_ANDROIDCONFIGURATION"); ++ ctx->SL_IID_ANDROIDSIMPLEBUFFERQUEUE = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_ANDROIDSIMPLEBUFFERQUEUE"); + #endif + ctx->SL_IID_PLAY = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_PLAY"); ++ ctx->SL_IID_RECORD = *(SLInterfaceID *)dlsym(ctx->lib, "SL_IID_RECORD"); ++ + if (!f_slCreateEngine || + !SL_IID_ENGINE || + !SL_IID_OUTPUTMIX || + !ctx->SL_IID_BUFFERQUEUE || + #if defined(__ANDROID__) + !ctx->SL_IID_ANDROIDCONFIGURATION || ++ !ctx->SL_IID_ANDROIDSIMPLEBUFFERQUEUE || + #endif +- !ctx->SL_IID_PLAY) { ++ !ctx->SL_IID_PLAY || ++ !ctx->SL_IID_RECORD) { + opensl_destroy(ctx); + return CUBEB_ERROR; + } +@@ -337,8 +751,14 @@ opensl_init(cubeb ** context, char const * context_name) + return CUBEB_ERROR; + } + ++ ctx->p_output_latency_function = cubeb_output_latency_load_method(android_version); ++ if (!ctx->p_output_latency_function) { ++ LOG("Warning: output latency is not available, cubeb_stream_get_position() is not supported"); ++ } ++ + *context = ctx; + ++ LOG("Cubeb init (%p) success", ctx); + return CUBEB_OK; + } + +@@ -359,200 +779,257 @@ opensl_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + return CUBEB_OK; + } + ++static void ++opensl_destroy(cubeb * ctx) ++{ ++ if (ctx->outmixObj) ++ (*ctx->outmixObj)->Destroy(ctx->outmixObj); ++ if (ctx->engObj) ++ cubeb_destroy_sles_engine(&ctx->engObj); ++ dlclose(ctx->lib); ++ if (ctx->p_output_latency_function) ++ cubeb_output_latency_unload_method(ctx->p_output_latency_function); ++ free(ctx); ++} ++ ++static void opensl_stream_destroy(cubeb_stream * stm); ++ + static int +-opensl_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) +-{ +- /* https://android.googlesource.com/platform/ndk.git/+/master/docs/opensles/index.html +- * We don't want to deal with JNI here (and we don't have Java on b2g anyways), +- * so we just dlopen the library and get the two symbols we need. */ +- int r; +- void * libmedia; +- uint32_t (*get_primary_output_samplingrate)(); +- uint32_t (*get_output_samplingrate)(int * samplingRate, int streamType); +- +- libmedia = dlopen("libmedia.so", RTLD_LAZY); +- if (!libmedia) { +- return CUBEB_ERROR; ++opensl_set_format(SLDataFormat_PCM * format, cubeb_stream_params * params) ++{ ++ assert(format); ++ assert(params); ++ ++ format->formatType = SL_DATAFORMAT_PCM; ++ format->numChannels = params->channels; ++ // samplesPerSec is in milliHertz ++ format->samplesPerSec = params->rate * 1000; ++ format->bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; ++ format->containerSize = SL_PCMSAMPLEFORMAT_FIXED_16; ++ format->channelMask = params->channels == 1 ? ++ SL_SPEAKER_FRONT_CENTER : ++ SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; ++ ++ switch (params->format) { ++ case CUBEB_SAMPLE_S16LE: ++ format->endianness = SL_BYTEORDER_LITTLEENDIAN; ++ break; ++ case CUBEB_SAMPLE_S16BE: ++ format->endianness = SL_BYTEORDER_BIGENDIAN; ++ break; ++ default: ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } ++ return CUBEB_OK; ++} ++ ++static int ++opensl_configure_capture(cubeb_stream * stm, cubeb_stream_params * params) ++{ ++ assert(stm); ++ assert(params); ++ ++ SLDataLocator_AndroidSimpleBufferQueue lDataLocatorOut; ++ lDataLocatorOut.locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE; ++ lDataLocatorOut.numBuffers = NBUFS; ++ ++ SLDataFormat_PCM lDataFormat; ++ int r = opensl_set_format(&lDataFormat, params); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR_INVALID_FORMAT; + } + +- /* uint32_t AudioSystem::getPrimaryOutputSamplingRate(void) */ +- get_primary_output_samplingrate = +- dlsym(libmedia, "_ZN7android11AudioSystem28getPrimaryOutputSamplingRateEv"); +- if (!get_primary_output_samplingrate) { +- /* fallback to +- * status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType) +- * if we cannot find getPrimaryOutputSamplingRate. */ +- get_output_samplingrate = +- dlsym(libmedia, "_ZN7android11AudioSystem21getOutputSamplingRateEPj19audio_stream_type_t"); +- if (!get_output_samplingrate) { +- /* Another signature exists, with a int instead of an audio_stream_type_t */ +- get_output_samplingrate = +- dlsym(libmedia, "_ZN7android11AudioSystem21getOutputSamplingRateEPii"); +- if (!get_output_samplingrate) { +- dlclose(libmedia); +- return CUBEB_ERROR; +- } ++ /* For now set device rate to params rate. */ ++ stm->input_device_rate = params->rate; ++ ++ SLDataSink lDataSink; ++ lDataSink.pLocator = &lDataLocatorOut; ++ lDataSink.pFormat = &lDataFormat; ++ ++ SLDataLocator_IODevice lDataLocatorIn; ++ lDataLocatorIn.locatorType = SL_DATALOCATOR_IODEVICE; ++ lDataLocatorIn.deviceType = SL_IODEVICE_AUDIOINPUT; ++ lDataLocatorIn.deviceID = SL_DEFAULTDEVICEID_AUDIOINPUT; ++ lDataLocatorIn.device = NULL; ++ ++ SLDataSource lDataSource; ++ lDataSource.pLocator = &lDataLocatorIn; ++ lDataSource.pFormat = NULL; ++ ++ const SLInterfaceID lSoundRecorderIIDs[] = { stm->context->SL_IID_RECORD, ++ stm->context->SL_IID_ANDROIDSIMPLEBUFFERQUEUE, ++ stm->context->SL_IID_ANDROIDCONFIGURATION }; ++ ++ const SLboolean lSoundRecorderReqs[] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE }; ++ // create the audio recorder abstract object ++ SLresult res = (*stm->context->eng)->CreateAudioRecorder(stm->context->eng, ++ &stm->recorderObj, ++ &lDataSource, ++ &lDataSink, ++ NELEMS(lSoundRecorderIIDs), ++ lSoundRecorderIIDs, ++ lSoundRecorderReqs); ++ // Sample rate not supported. Try again with default sample rate! ++ if (res == SL_RESULT_CONTENT_UNSUPPORTED) { ++ if (stm->output_enabled && stm->output_configured_rate != 0) { ++ // Set the same with the player. Since there is no ++ // api for input device this is a safe choice. ++ stm->input_device_rate = stm->output_configured_rate; ++ } else { ++ // The output preferred rate is used for an input only scenario. ++ // The default rate expected to be supported from all android devices. ++ stm->input_device_rate = DEFAULT_SAMPLE_RATE; + } +- } ++ lDataFormat.samplesPerSec = stm->input_device_rate * 1000; ++ res = (*stm->context->eng)->CreateAudioRecorder(stm->context->eng, ++ &stm->recorderObj, ++ &lDataSource, ++ &lDataSink, ++ NELEMS(lSoundRecorderIIDs), ++ lSoundRecorderIIDs, ++ lSoundRecorderReqs); + +- if (get_primary_output_samplingrate) { +- *rate = get_primary_output_samplingrate(); +- } else { +- /* We don't really know about the type, here, so we just pass music. */ +- r = get_output_samplingrate((int *) rate, AUDIO_STREAM_TYPE_MUSIC); +- if (r) { +- dlclose(libmedia); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to create recorder. Error code: %lu", res); + return CUBEB_ERROR; + } + } + +- dlclose(libmedia); + +- /* Depending on which method we called above, we can get a zero back, yet have +- * a non-error return value, especially if the audio system is not +- * ready/shutting down (i.e. when we can't get our hand on the AudioFlinger +- * thread). */ +- if (*rate == 0) { +- return CUBEB_ERROR; +- } ++ if (get_android_version() > ANDROID_VERSION_JELLY_BEAN) { ++ SLAndroidConfigurationItf recorderConfig; ++ res = (*stm->recorderObj) ++ ->GetInterface(stm->recorderObj, ++ stm->context->SL_IID_ANDROIDCONFIGURATION, ++ &recorderConfig); + +- return CUBEB_OK; +-} ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to get the android configuration interface for recorder. Error " ++ "code: %lu", ++ res); ++ return CUBEB_ERROR; ++ } + +-static int +-opensl_get_min_latency(cubeb * ctx, cubeb_stream_params params, uint32_t * latency_frames) +-{ +- /* https://android.googlesource.com/platform/ndk.git/+/master/docs/opensles/index.html +- * We don't want to deal with JNI here (and we don't have Java on b2g anyways), +- * so we just dlopen the library and get the two symbols we need. */ ++ // Voice recognition is the lowest latency, according to the docs. Camcorder ++ // uses a microphone that is in the same direction as the camera. ++ SLint32 streamType = stm->voice ? SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION ++ : SL_ANDROID_RECORDING_PRESET_CAMCORDER; ++ ++ res = (*recorderConfig) ++ ->SetConfiguration(recorderConfig, SL_ANDROID_KEY_RECORDING_PRESET, ++ &streamType, sizeof(SLint32)); ++ ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to set the android configuration to VOICE for the recorder. " ++ "Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ } ++ // realize the audio recorder ++ res = (*stm->recorderObj)->Realize(stm->recorderObj, SL_BOOLEAN_FALSE); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to realize recorder. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ // get the record interface ++ res = (*stm->recorderObj)->GetInterface(stm->recorderObj, ++ stm->context->SL_IID_RECORD, ++ &stm->recorderItf); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to get recorder interface. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } + +- int r; +- void * libmedia; +- size_t (*get_primary_output_frame_count)(void); +- int (*get_output_frame_count)(size_t * frameCount, int streamType); +- uint32_t primary_sampling_rate; +- size_t primary_buffer_size; ++ res = (*stm->recorderItf)->RegisterCallback(stm->recorderItf, recorder_marker_callback, stm); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to register recorder marker callback. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } + +- r = opensl_get_preferred_sample_rate(ctx, &primary_sampling_rate); ++ (*stm->recorderItf)->SetMarkerPosition(stm->recorderItf, (SLmillisecond)0); + +- if (r) { ++ res = (*stm->recorderItf)->SetCallbackEventsMask(stm->recorderItf, (SLuint32)SL_RECORDEVENT_HEADATMARKER); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to set headatmarker event mask. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ // get the simple android buffer queue interface ++ res = (*stm->recorderObj)->GetInterface(stm->recorderObj, ++ stm->context->SL_IID_ANDROIDSIMPLEBUFFERQUEUE, ++ &stm->recorderBufferQueueItf); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to get recorder (android) buffer queue interface. Error code: %lu", res); + return CUBEB_ERROR; + } + +- libmedia = dlopen("libmedia.so", RTLD_LAZY); +- if (!libmedia) { ++ // register callback on record (input) buffer queue ++ slAndroidSimpleBufferQueueCallback rec_callback = recorder_callback; ++ if (stm->output_enabled) { ++ // Register full duplex callback instead. ++ rec_callback = recorder_fullduplex_callback; ++ } ++ res = (*stm->recorderBufferQueueItf)->RegisterCallback(stm->recorderBufferQueueItf, ++ rec_callback, ++ stm); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to register recorder buffer queue callback. Error code: %lu", res); + return CUBEB_ERROR; + } + +- /* JB variant */ +- /* size_t AudioSystem::getPrimaryOutputFrameCount(void) */ +- get_primary_output_frame_count = +- dlsym(libmedia, "_ZN7android11AudioSystem26getPrimaryOutputFrameCountEv"); +- if (!get_primary_output_frame_count) { +- /* ICS variant */ +- /* status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType) */ +- get_output_frame_count = +- dlsym(libmedia, "_ZN7android11AudioSystem19getOutputFrameCountEPii"); +- if (!get_output_frame_count) { +- dlclose(libmedia); +- return CUBEB_ERROR; +- } ++ // Calculate length of input buffer according to requested latency ++ stm->input_frame_size = params->channels * sizeof(int16_t); ++ stm->input_buffer_length = (stm->input_frame_size * stm->buffer_size_frames); ++ ++ // Calculate the capacity of input array ++ stm->input_array_capacity = NBUFS; ++ if (stm->output_enabled) { ++ // Full duplex, update capacity to hold 1 sec of data ++ stm->input_array_capacity = 1 * stm->input_device_rate / stm->input_buffer_length; ++ } ++ // Allocate input array ++ stm->input_buffer_array = (void**)calloc(1, sizeof(void*)*stm->input_array_capacity); ++ // Buffering has not started yet. ++ stm->input_buffer_index = -1; ++ // Prepare input buffers ++ for(uint32_t i = 0; i < stm->input_array_capacity; ++i) { ++ stm->input_buffer_array[i] = calloc(1, stm->input_buffer_length); + } + +- if (get_primary_output_frame_count) { +- primary_buffer_size = get_primary_output_frame_count(); +- } else { +- if (get_output_frame_count(&primary_buffer_size, params.stream_type) != 0) { +- return CUBEB_ERROR; +- } ++ // On full duplex allocate input queue and silent buffer ++ if (stm->output_enabled) { ++ stm->input_queue = array_queue_create(stm->input_array_capacity); ++ assert(stm->input_queue); ++ stm->input_silent_buffer = calloc(1, stm->input_buffer_length); ++ assert(stm->input_silent_buffer); + } + +- /* To get a fast track in Android's mixer, we need to be at the native +- * samplerate, which is device dependant. Some devices might be able to +- * resample when playing a fast track, but it's pretty rare. */ +- *latency_frames = NBUFS * primary_buffer_size; ++ // Enqueue buffer to start rolling once recorder started ++ r = opensl_enqueue_recorder(stm, NULL); ++ if (r != CUBEB_OK) { ++ return r; ++ } + +- dlclose(libmedia); ++ LOG("Cubeb stream init recorder success"); + + return CUBEB_OK; + } + +-static void +-opensl_destroy(cubeb * ctx) +-{ +- if (ctx->outmixObj) +- (*ctx->outmixObj)->Destroy(ctx->outmixObj); +- if (ctx->engObj) +- cubeb_destroy_sles_engine(&ctx->engObj); +- dlclose(ctx->lib); +- dlclose(ctx->libmedia); +- free(ctx); +-} +- +-static void opensl_stream_destroy(cubeb_stream * stm); +- + static int +-opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, +- cubeb_devid input_device, +- cubeb_stream_params * input_stream_params, +- cubeb_devid output_device, +- cubeb_stream_params * output_stream_params, +- unsigned int latency_frames, +- cubeb_data_callback data_callback, cubeb_state_callback state_callback, +- void * user_ptr) +-{ +- cubeb_stream * stm; +- +- assert(ctx); +- assert(!input_stream_params && "not supported"); +- if (input_device || output_device) { +- /* Device selection not yet implemented. */ +- return CUBEB_ERROR_DEVICE_UNAVAILABLE; +- } +- +- *stream = NULL; +- +- SLDataFormat_PCM format; +- +- format.formatType = SL_DATAFORMAT_PCM; +- format.numChannels = output_stream_params->channels; +- // samplesPerSec is in milliHertz +- format.samplesPerSec = output_stream_params->rate * 1000; +- format.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; +- format.containerSize = SL_PCMSAMPLEFORMAT_FIXED_16; +- format.channelMask = output_stream_params->channels == 1 ? +- SL_SPEAKER_FRONT_CENTER : +- SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; +- +- switch (output_stream_params->format) { +- case CUBEB_SAMPLE_S16LE: +- format.endianness = SL_BYTEORDER_LITTLEENDIAN; +- break; +- case CUBEB_SAMPLE_S16BE: +- format.endianness = SL_BYTEORDER_BIGENDIAN; +- break; +- default: +- return CUBEB_ERROR_INVALID_FORMAT; +- } +- +- stm = calloc(1, sizeof(*stm)); ++opensl_configure_playback(cubeb_stream * stm, cubeb_stream_params * params) { + assert(stm); ++ assert(params); + +- stm->context = ctx; +- stm->data_callback = data_callback; +- stm->state_callback = state_callback; +- stm->user_ptr = user_ptr; +- +- stm->inputrate = output_stream_params->rate; +- stm->latency = latency_frames; +- stm->stream_type = output_stream_params->stream_type; +- stm->framesize = output_stream_params->channels * sizeof(int16_t); ++ stm->user_output_rate = params->rate; ++ stm->framesize = params->channels * sizeof(int16_t); + stm->lastPosition = -1; + stm->lastPositionTimeStamp = 0; + stm->lastCompensativePosition = -1; + +- int r = pthread_mutex_init(&stm->mutex, NULL); +- assert(r == 0); ++ SLDataFormat_PCM format; ++ int r = opensl_set_format(&format, params); ++ if (r != CUBEB_OK) { ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } + + SLDataLocator_BufferQueue loc_bufq; + loc_bufq.locatorType = SL_DATALOCATOR_BUFFERQUEUE; +@@ -563,15 +1040,15 @@ opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name + + SLDataLocator_OutputMix loc_outmix; + loc_outmix.locatorType = SL_DATALOCATOR_OUTPUTMIX; +- loc_outmix.outputMix = ctx->outmixObj; ++ loc_outmix.outputMix = stm->context->outmixObj; + SLDataSink sink; + sink.pLocator = &loc_outmix; + sink.pFormat = NULL; + + #if defined(__ANDROID__) +- const SLInterfaceID ids[] = {ctx->SL_IID_BUFFERQUEUE, +- ctx->SL_IID_VOLUME, +- ctx->SL_IID_ANDROIDCONFIGURATION}; ++ const SLInterfaceID ids[] = {stm->context->SL_IID_BUFFERQUEUE, ++ stm->context->SL_IID_VOLUME, ++ stm->context->SL_IID_ANDROIDCONFIGURATION}; + const SLboolean req[] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE}; + #else + const SLInterfaceID ids[] = {ctx->SL_IID_BUFFERQUEUE, ctx->SL_IID_VOLUME}; +@@ -579,115 +1056,166 @@ opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name + #endif + assert(NELEMS(ids) == NELEMS(req)); + +- uint32_t preferred_sampling_rate = stm->inputrate; +-#if defined(__ANDROID__) +- if (get_android_version() >= ANDROID_VERSION_MARSHMALLOW) { +- // Reset preferred samping rate to trigger fallback to native sampling rate. +- preferred_sampling_rate = 0; +- if (opensl_get_min_latency(ctx, *output_stream_params, &latency_frames) != CUBEB_OK) { +- // Default to AudioFlinger's advertised fast track latency of 10ms. +- latency_frames = 440; +- } +- stm->latency = latency_frames; +- } +-#endif +- ++ uint32_t preferred_sampling_rate = stm->user_output_rate; + SLresult res = SL_RESULT_CONTENT_UNSUPPORTED; + if (preferred_sampling_rate) { +- res = (*ctx->eng)->CreateAudioPlayer(ctx->eng, &stm->playerObj, &source, +- &sink, NELEMS(ids), ids, req); ++ res = (*stm->context->eng)->CreateAudioPlayer(stm->context->eng, ++ &stm->playerObj, ++ &source, ++ &sink, ++ NELEMS(ids), ++ ids, ++ req); + } + + // Sample rate not supported? Try again with primary sample rate! +- if (res == SL_RESULT_CONTENT_UNSUPPORTED) { +- if (opensl_get_preferred_sample_rate(ctx, &preferred_sampling_rate)) { +- opensl_stream_destroy(stm); +- return CUBEB_ERROR; +- } +- ++ if (res == SL_RESULT_CONTENT_UNSUPPORTED && ++ preferred_sampling_rate != DEFAULT_SAMPLE_RATE) { ++ preferred_sampling_rate = DEFAULT_SAMPLE_RATE; + format.samplesPerSec = preferred_sampling_rate * 1000; +- res = (*ctx->eng)->CreateAudioPlayer(ctx->eng, &stm->playerObj, +- &source, &sink, NELEMS(ids), ids, req); ++ res = (*stm->context->eng)->CreateAudioPlayer(stm->context->eng, ++ &stm->playerObj, ++ &source, ++ &sink, ++ NELEMS(ids), ++ ids, ++ req); + } + + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to create audio player. Error code: %lu", res); + return CUBEB_ERROR; + } + +- stm->outputrate = preferred_sampling_rate; +- stm->bytespersec = stm->outputrate * stm->framesize; +- stm->queuebuf_len = stm->framesize * latency_frames / NBUFS; +- // round up to the next multiple of stm->framesize, if needed. +- if (stm->queuebuf_len % stm->framesize) { +- stm->queuebuf_len += stm->framesize - (stm->queuebuf_len % stm->framesize); ++ stm->output_configured_rate = preferred_sampling_rate; ++ stm->bytespersec = stm->output_configured_rate * stm->framesize; ++ stm->queuebuf_len = stm->framesize * stm->buffer_size_frames; ++ ++ // Calculate the capacity of input array ++ stm->queuebuf_capacity = NBUFS; ++ if (stm->output_enabled) { ++ // Full duplex, update capacity to hold 1 sec of data ++ stm->queuebuf_capacity = 1 * stm->output_configured_rate / stm->queuebuf_len; ++ } ++ // Allocate input array ++ stm->queuebuf = (void**)calloc(1, sizeof(void*) * stm->queuebuf_capacity); ++ for (uint32_t i = 0; i < stm->queuebuf_capacity; ++i) { ++ stm->queuebuf[i] = calloc(1, stm->queuebuf_len); ++ assert(stm->queuebuf[i]); + } + +- cubeb_stream_params params = *output_stream_params; +- params.rate = preferred_sampling_rate; ++ SLAndroidConfigurationItf playerConfig = NULL; + +- stm->resampler = cubeb_resampler_create(stm, NULL, ¶ms, +- output_stream_params->rate, +- data_callback, +- user_ptr, +- CUBEB_RESAMPLER_QUALITY_DEFAULT); ++ if (get_android_version() >= ANDROID_VERSION_N_MR1) { ++ res = (*stm->playerObj) ++ ->GetInterface(stm->playerObj, ++ stm->context->SL_IID_ANDROIDCONFIGURATION, ++ &playerConfig); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to get Android configuration interface. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } + +- if (!stm->resampler) { +- opensl_stream_destroy(stm); +- return CUBEB_ERROR; +- } ++ SLint32 streamType = SL_ANDROID_STREAM_MEDIA; ++ if (stm->voice) { ++ streamType = SL_ANDROID_STREAM_VOICE; ++ } ++ res = (*playerConfig)->SetConfiguration(playerConfig, ++ SL_ANDROID_KEY_STREAM_TYPE, ++ &streamType, ++ sizeof(streamType)); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to set Android configuration to %d Error code: %lu", ++ streamType, res); ++ } + +- int i; +- for (i = 0; i < NBUFS; i++) { +- stm->queuebuf[i] = malloc(stm->queuebuf_len); +- assert(stm->queuebuf[i]); +- } ++ SLuint32 performanceMode = SL_ANDROID_PERFORMANCE_LATENCY; ++ if (stm->buffer_size_frames > POWERSAVE_LATENCY_FRAMES_THRESHOLD) { ++ performanceMode = SL_ANDROID_PERFORMANCE_POWER_SAVING; ++ } + +-#if defined(__ANDROID__) +- SLuint32 stream_type = convert_stream_type_to_sl_stream(output_stream_params->stream_type); +- if (stream_type != 0xFFFFFFFF) { +- SLAndroidConfigurationItf playerConfig; +- res = (*stm->playerObj)->GetInterface(stm->playerObj, +- ctx->SL_IID_ANDROIDCONFIGURATION, &playerConfig); + res = (*playerConfig)->SetConfiguration(playerConfig, +- SL_ANDROID_KEY_STREAM_TYPE, &stream_type, sizeof(SLint32)); ++ SL_ANDROID_KEY_PERFORMANCE_MODE, ++ &performanceMode, ++ sizeof(performanceMode)); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); +- return CUBEB_ERROR; ++ LOG("Failed to set Android performance mode to %d Error code: %lu. This is" ++ " not fatal", performanceMode, res); + } + } +-#endif + + res = (*stm->playerObj)->Realize(stm->playerObj, SL_BOOLEAN_FALSE); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to realize player object. Error code: %lu", res); + return CUBEB_ERROR; + } + +- res = (*stm->playerObj)->GetInterface(stm->playerObj, ctx->SL_IID_PLAY, &stm->play); ++ // There are two ways of getting the audio output latency: ++ // - a configuration value, only available on some devices (notably devices ++ // running FireOS) ++ // - A Java method, that we call using JNI. ++ // ++ // The first method is prefered, if available, because it can account for more ++ // latency causes, and is more precise. ++ ++ // Latency has to be queried after the realization of the interface, when ++ // using SL_IID_ANDROIDCONFIGURATION. ++ SLuint32 audioLatency = 0; ++ SLuint32 paramSize = sizeof(SLuint32); ++ // The reported latency is in milliseconds. ++ if (playerConfig) { ++ res = (*playerConfig)->GetConfiguration(playerConfig, ++ (const SLchar *)"androidGetAudioLatency", ++ ¶mSize, ++ &audioLatency); ++ if (res == SL_RESULT_SUCCESS) { ++ LOG("Got playback latency using android configuration extension"); ++ stm->output_latency_ms = audioLatency; ++ } ++ } ++ // `playerConfig` is available, but the above failed, or `playerConfig` is not ++ // available. In both cases, we need to acquire the output latency by an other ++ // mean. ++ if ((playerConfig && res != SL_RESULT_SUCCESS) || ++ !playerConfig) { ++ if (cubeb_output_latency_method_is_loaded(stm->context->p_output_latency_function)) { ++ LOG("Got playback latency using JNI"); ++ stm->output_latency_ms = cubeb_get_output_latency(stm->context->p_output_latency_function); ++ } else { ++ LOG("No alternate latency querying method loaded, A/V sync will be off."); ++ stm->output_latency_ms = 0; ++ } ++ } ++ ++ LOG("Audio output latency: %dms", stm->output_latency_ms); ++ ++ res = (*stm->playerObj)->GetInterface(stm->playerObj, ++ stm->context->SL_IID_PLAY, ++ &stm->play); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to get play interface. Error code: %lu", res); + return CUBEB_ERROR; + } + +- res = (*stm->playerObj)->GetInterface(stm->playerObj, ctx->SL_IID_BUFFERQUEUE, ++ res = (*stm->playerObj)->GetInterface(stm->playerObj, ++ stm->context->SL_IID_BUFFERQUEUE, + &stm->bufq); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to get bufferqueue interface. Error code: %lu", res); + return CUBEB_ERROR; + } + +- res = (*stm->playerObj)->GetInterface(stm->playerObj, ctx->SL_IID_VOLUME, ++ res = (*stm->playerObj)->GetInterface(stm->playerObj, ++ stm->context->SL_IID_VOLUME, + &stm->volume); +- + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to get volume interface. Error code: %lu", res); + return CUBEB_ERROR; + } + + res = (*stm->play)->RegisterCallback(stm->play, play_callback, stm); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to register play callback. Error code: %lu", res); + return CUBEB_ERROR; + } + +@@ -696,13 +1224,17 @@ opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name + + res = (*stm->play)->SetCallbackEventsMask(stm->play, (SLuint32)SL_PLAYEVENT_HEADATMARKER); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to set headatmarker event mask. Error code: %lu", res); + return CUBEB_ERROR; + } + +- res = (*stm->bufq)->RegisterCallback(stm->bufq, bufferqueue_callback, stm); ++ slBufferQueueCallback player_callback = bufferqueue_callback; ++ if (stm->input_enabled) { ++ player_callback = player_fullduplex_callback; ++ } ++ res = (*stm->bufq)->RegisterCallback(stm->bufq, player_callback, stm); + if (res != SL_RESULT_SUCCESS) { +- opensl_stream_destroy(stm); ++ LOG("Failed to register bufferqueue callback. Error code: %lu", res); + return CUBEB_ERROR; + } + +@@ -717,55 +1249,340 @@ opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name + assert(res == SL_RESULT_SUCCESS); + } + +- *stream = stm; ++ LOG("Cubeb stream init playback success"); + return CUBEB_OK; + } + +-static void +-opensl_stream_destroy(cubeb_stream * stm) ++static int ++opensl_validate_stream_param(cubeb_stream_params * stream_params) + { +- if (stm->playerObj) +- (*stm->playerObj)->Destroy(stm->playerObj); +- int i; +- for (i = 0; i < NBUFS; i++) { +- free(stm->queuebuf[i]); ++ if ((stream_params && ++ (stream_params->channels < 1 || stream_params->channels > 32))) { ++ return CUBEB_ERROR_INVALID_FORMAT; + } +- pthread_mutex_destroy(&stm->mutex); ++ if ((stream_params && ++ (stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK))) { ++ LOG("Loopback is not supported"); ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ return CUBEB_OK; ++} + +- cubeb_resampler_destroy(stm->resampler); ++int has_pref_set(cubeb_stream_params* input_params, ++ cubeb_stream_params* output_params, ++ cubeb_stream_prefs pref) ++{ ++ return (input_params && input_params->prefs & pref) || ++ (output_params && output_params->prefs & pref); ++} + +- free(stm); ++static int ++opensl_stream_init(cubeb * ctx, cubeb_stream ** stream, char const * stream_name, ++ cubeb_devid input_device, ++ cubeb_stream_params * input_stream_params, ++ cubeb_devid output_device, ++ cubeb_stream_params * output_stream_params, ++ unsigned int latency_frames, ++ cubeb_data_callback data_callback, cubeb_state_callback state_callback, ++ void * user_ptr) ++{ ++ cubeb_stream * stm; ++ ++ assert(ctx); ++ if (input_device || output_device) { ++ LOG("Device selection is not supported in Android. The default will be used"); ++ } ++ ++ *stream = NULL; ++ ++ int r = opensl_validate_stream_param(output_stream_params); ++ if(r != CUBEB_OK) { ++ LOG("Output stream params not valid"); ++ return r; ++ } ++ r = opensl_validate_stream_param(input_stream_params); ++ if(r != CUBEB_OK) { ++ LOG("Input stream params not valid"); ++ return r; ++ } ++ ++ stm = calloc(1, sizeof(*stm)); ++ assert(stm); ++ ++ stm->context = ctx; ++ stm->data_callback = data_callback; ++ stm->state_callback = state_callback; ++ stm->user_ptr = user_ptr; ++ stm->buffer_size_frames = latency_frames ? latency_frames : DEFAULT_NUM_OF_FRAMES; ++ stm->input_enabled = (input_stream_params) ? 1 : 0; ++ stm->output_enabled = (output_stream_params) ? 1 : 0; ++ stm->shutdown = 1; ++ stm->voice = has_pref_set(input_stream_params, output_stream_params, CUBEB_STREAM_PREF_VOICE); ++ ++ LOG("cubeb stream prefs: voice: %s", stm->voice ? "true" : "false"); ++ ++ ++#ifdef DEBUG ++ pthread_mutexattr_t attr; ++ pthread_mutexattr_init(&attr); ++ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); ++ r = pthread_mutex_init(&stm->mutex, &attr); ++#else ++ r = pthread_mutex_init(&stm->mutex, NULL); ++#endif ++ assert(r == 0); ++ ++ if (output_stream_params) { ++ LOG("Playback params: Rate %d, channels %d, format %d, latency in frames %d.", ++ output_stream_params->rate, output_stream_params->channels, ++ output_stream_params->format, stm->buffer_size_frames); ++ r = opensl_configure_playback(stm, output_stream_params); ++ if (r != CUBEB_OK) { ++ opensl_stream_destroy(stm); ++ return r; ++ } ++ } ++ ++ if (input_stream_params) { ++ LOG("Capture params: Rate %d, channels %d, format %d, latency in frames %d.", ++ input_stream_params->rate, input_stream_params->channels, ++ input_stream_params->format, stm->buffer_size_frames); ++ r = opensl_configure_capture(stm, input_stream_params); ++ if (r != CUBEB_OK) { ++ opensl_stream_destroy(stm); ++ return r; ++ } ++ } ++ ++ /* Configure resampler*/ ++ uint32_t target_sample_rate; ++ if (input_stream_params) { ++ target_sample_rate = input_stream_params->rate; ++ } else { ++ assert(output_stream_params); ++ target_sample_rate = output_stream_params->rate; ++ } ++ ++ // Use the actual configured rates for input ++ // and output. ++ cubeb_stream_params input_params; ++ if (input_stream_params) { ++ input_params = *input_stream_params; ++ input_params.rate = stm->input_device_rate; ++ } ++ cubeb_stream_params output_params; ++ if (output_stream_params) { ++ output_params = *output_stream_params; ++ output_params.rate = stm->output_configured_rate; ++ } ++ ++ stm->resampler = cubeb_resampler_create(stm, ++ input_stream_params ? &input_params : NULL, ++ output_stream_params ? &output_params : NULL, ++ target_sample_rate, ++ data_callback, ++ user_ptr, ++ CUBEB_RESAMPLER_QUALITY_DEFAULT); ++ if (!stm->resampler) { ++ LOG("Failed to create resampler"); ++ opensl_stream_destroy(stm); ++ return CUBEB_ERROR; ++ } ++ ++ *stream = stm; ++ LOG("Cubeb stream (%p) init success", stm); ++ return CUBEB_OK; ++} ++ ++static int ++opensl_start_player(cubeb_stream * stm) ++{ ++ assert(stm->playerObj); ++ SLuint32 playerState; ++ (*stm->playerObj)->GetState(stm->playerObj, &playerState); ++ if (playerState == SL_OBJECT_STATE_REALIZED) { ++ SLresult res = (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PLAYING); ++ if(res != SL_RESULT_SUCCESS) { ++ LOG("Failed to start player. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ } ++ return CUBEB_OK; ++} ++ ++static int ++opensl_start_recorder(cubeb_stream * stm) ++{ ++ assert(stm->recorderObj); ++ SLuint32 recorderState; ++ (*stm->recorderObj)->GetState(stm->recorderObj, &recorderState); ++ if (recorderState == SL_OBJECT_STATE_REALIZED) { ++ SLresult res = (*stm->recorderItf)->SetRecordState(stm->recorderItf, SL_RECORDSTATE_RECORDING); ++ if(res != SL_RESULT_SUCCESS) { ++ LOG("Failed to start recorder. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ } ++ return CUBEB_OK; + } + + static int + opensl_stream_start(cubeb_stream * stm) + { +- SLresult res = (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PLAYING); +- if (res != SL_RESULT_SUCCESS) +- return CUBEB_ERROR; ++ assert(stm); ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 0); ++ opensl_set_draining(stm, 0); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (stm->playerObj) { ++ r = opensl_start_player(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } ++ } ++ ++ if (stm->recorderObj) { ++ int r = opensl_start_recorder(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } ++ } ++ + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); ++ LOG("Cubeb stream (%p) started", stm); + return CUBEB_OK; + } + + static int +-opensl_stream_stop(cubeb_stream * stm) ++opensl_stop_player(cubeb_stream * stm) + { ++ assert(stm->playerObj); ++ assert(stm->shutdown || stm->draining); ++ + SLresult res = (*stm->play)->SetPlayState(stm->play, SL_PLAYSTATE_PAUSED); +- if (res != SL_RESULT_SUCCESS) ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to stop player. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ ++ return CUBEB_OK; ++} ++ ++static int ++opensl_stop_recorder(cubeb_stream * stm) ++{ ++ assert(stm->recorderObj); ++ assert(stm->shutdown || stm->draining); ++ ++ SLresult res = (*stm->recorderItf)->SetRecordState(stm->recorderItf, SL_RECORDSTATE_PAUSED); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to stop recorder. Error code: %lu", res); + return CUBEB_ERROR; ++ } ++ ++ return CUBEB_OK; ++} ++ ++static int ++opensl_stream_stop(cubeb_stream * stm) ++{ ++ assert(stm); ++ ++ int r = pthread_mutex_lock(&stm->mutex); ++ assert(r == 0); ++ opensl_set_shutdown(stm, 1); ++ r = pthread_mutex_unlock(&stm->mutex); ++ assert(r == 0); ++ ++ if (stm->playerObj) { ++ r = opensl_stop_player(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } ++ } ++ ++ if (stm->recorderObj) { ++ int r = opensl_stop_recorder(stm); ++ if (r != CUBEB_OK) { ++ return r; ++ } ++ } ++ + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); ++ LOG("Cubeb stream (%p) stopped", stm); + return CUBEB_OK; + } + ++static int ++opensl_destroy_recorder(cubeb_stream * stm) ++{ ++ assert(stm); ++ assert(stm->recorderObj); ++ ++ if (stm->recorderBufferQueueItf) { ++ SLresult res = (*stm->recorderBufferQueueItf)->Clear(stm->recorderBufferQueueItf); ++ if (res != SL_RESULT_SUCCESS) { ++ LOG("Failed to clear recorder buffer queue. Error code: %lu", res); ++ return CUBEB_ERROR; ++ } ++ stm->recorderBufferQueueItf = NULL; ++ for (uint32_t i = 0; i < stm->input_array_capacity; ++i) { ++ free(stm->input_buffer_array[i]); ++ } ++ } ++ ++ (*stm->recorderObj)->Destroy(stm->recorderObj); ++ stm->recorderObj = NULL; ++ stm->recorderItf = NULL; ++ ++ if (stm->input_queue) { ++ array_queue_destroy(stm->input_queue); ++ } ++ free(stm->input_silent_buffer); ++ ++ return CUBEB_OK; ++} ++ ++static void ++opensl_stream_destroy(cubeb_stream * stm) ++{ ++ assert(stm->draining || stm->shutdown); ++ ++ if (stm->playerObj) { ++ (*stm->playerObj)->Destroy(stm->playerObj); ++ stm->playerObj = NULL; ++ stm->play = NULL; ++ stm->bufq = NULL; ++ for (uint32_t i = 0; i < stm->queuebuf_capacity; ++i) { ++ free(stm->queuebuf[i]); ++ } ++ } ++ ++ if (stm->recorderObj) { ++ int r = opensl_destroy_recorder(stm); ++ assert(r == CUBEB_OK); ++ } ++ ++ if (stm->resampler) { ++ cubeb_resampler_destroy(stm->resampler); ++ } ++ ++ pthread_mutex_destroy(&stm->mutex); ++ ++ LOG("Cubeb stream (%p) destroyed", stm); ++ free(stm); ++} ++ + static int + opensl_stream_get_position(cubeb_stream * stm, uint64_t * position) + { + SLmillisecond msec; +- uint64_t samplerate; +- SLresult res; +- int r; +- uint32_t mixer_latency; + uint32_t compensation_msec = 0; ++ SLresult res; + + res = (*stm->play)->GetPosition(stm->play, &msec); + if (res != SL_RESULT_SUCCESS) +@@ -781,27 +1598,23 @@ opensl_stream_get_position(cubeb_stream * stm, uint64_t * position) + stm->lastPosition = msec; + } + +- samplerate = stm->inputrate; +- +- r = stm->context->get_output_latency(&mixer_latency, stm->stream_type); +- if (r) { +- return CUBEB_ERROR; +- } ++ uint64_t samplerate = stm->user_output_rate; ++ uint32_t output_latency = stm->output_latency_ms; + + pthread_mutex_lock(&stm->mutex); +- int64_t maximum_position = stm->written * (int64_t)stm->inputrate / stm->outputrate; ++ int64_t maximum_position = stm->written * (int64_t)stm->user_output_rate / stm->output_configured_rate; + pthread_mutex_unlock(&stm->mutex); + assert(maximum_position >= 0); + +- if (msec > mixer_latency) { ++ if (msec > output_latency) { + int64_t unadjusted_position; + if (stm->lastCompensativePosition > msec + compensation_msec) { + // Over compensation, use lastCompensativePosition. + unadjusted_position = +- samplerate * (stm->lastCompensativePosition - mixer_latency) / 1000; ++ samplerate * (stm->lastCompensativePosition - output_latency) / 1000; + } else { + unadjusted_position = +- samplerate * (msec - mixer_latency + compensation_msec) / 1000; ++ samplerate * (msec - output_latency + compensation_msec) / 1000; + stm->lastCompensativePosition = msec + compensation_msec; + } + *position = unadjusted_position < maximum_position ? +@@ -812,24 +1625,6 @@ opensl_stream_get_position(cubeb_stream * stm, uint64_t * position) + return CUBEB_OK; + } + +-int +-opensl_stream_get_latency(cubeb_stream * stm, uint32_t * latency) +-{ +- int r; +- uint32_t mixer_latency; // The latency returned by AudioFlinger is in ms. +- +- /* audio_stream_type_t is an int, so this is okay. */ +- r = stm->context->get_output_latency(&mixer_latency, stm->stream_type); +- if (r) { +- return CUBEB_ERROR; +- } +- +- *latency = stm->latency * stm->inputrate / 1000 + // OpenSL latency +- mixer_latency * stm->inputrate / 1000; // AudioFlinger latency +- +- return CUBEB_OK; +-} +- + int + opensl_stream_set_volume(cubeb_stream * stm, float volume) + { +@@ -865,18 +1660,19 @@ static struct cubeb_ops const opensl_ops = { + .init = opensl_init, + .get_backend_id = opensl_get_backend_id, + .get_max_channel_count = opensl_get_max_channel_count, +- .get_min_latency = opensl_get_min_latency, +- .get_preferred_sample_rate = opensl_get_preferred_sample_rate, ++ .get_min_latency = NULL, ++ .get_preferred_sample_rate = NULL, + .enumerate_devices = NULL, ++ .device_collection_destroy = NULL, + .destroy = opensl_destroy, + .stream_init = opensl_stream_init, + .stream_destroy = opensl_stream_destroy, + .stream_start = opensl_stream_start, + .stream_stop = opensl_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = opensl_stream_get_position, +- .stream_get_latency = opensl_stream_get_latency, ++ .stream_get_latency = NULL, + .stream_set_volume = opensl_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_pulse.c b/media/libcubeb/src/cubeb_pulse.c +index 4f474452d..846ba426a 100644 +--- a/media/libcubeb/src/cubeb_pulse.c ++++ b/media/libcubeb/src/cubeb_pulse.c +@@ -7,12 +7,14 @@ + #undef NDEBUG + #include + #include +-#include + #include ++#include ++#include + #include +-#include "cubeb/cubeb.h" + #include "cubeb-internal.h" +-#include ++#include "cubeb/cubeb.h" ++#include "cubeb_mixer.h" ++#include "cubeb_strings.h" + + #ifdef DISABLE_LIBPULSE_DLOPEN + #define WRAP(x) x +@@ -20,13 +22,14 @@ + #define WRAP(x) cubeb_##x + #define LIBPULSE_API_VISIT(X) \ + X(pa_channel_map_can_balance) \ +- X(pa_channel_map_init_auto) \ ++ X(pa_channel_map_init) \ + X(pa_context_connect) \ + X(pa_context_disconnect) \ + X(pa_context_drain) \ + X(pa_context_get_server_info) \ + X(pa_context_get_sink_info_by_name) \ + X(pa_context_get_sink_info_list) \ ++ X(pa_context_get_sink_input_info) \ + X(pa_context_get_source_info_list) \ + X(pa_context_get_state) \ + X(pa_context_new) \ +@@ -81,33 +84,50 @@ + X(pa_context_set_subscribe_callback) \ + X(pa_context_subscribe) \ + X(pa_mainloop_api_once) \ ++ X(pa_get_library_version) \ ++ X(pa_channel_map_init_auto) \ + + #define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x; + LIBPULSE_API_VISIT(MAKE_TYPEDEF); + #undef MAKE_TYPEDEF + #endif + ++#if PA_CHECK_VERSION(2, 0, 0) ++static int has_pulse_v2 = 0; ++#endif ++ + static struct cubeb_ops const pulse_ops; + ++struct cubeb_default_sink_info { ++ pa_channel_map channel_map; ++ uint32_t sample_spec_rate; ++ pa_sink_flags_t flags; ++}; ++ + struct cubeb { + struct cubeb_ops const * ops; + void * libpulse; + pa_threaded_mainloop * mainloop; + pa_context * context; +- pa_sink_info * default_sink_info; ++ struct cubeb_default_sink_info * default_sink_info; + char * context_name; + int error; +- cubeb_device_collection_changed_callback collection_changed_callback; +- void * collection_changed_user_ptr; ++ cubeb_device_collection_changed_callback output_collection_changed_callback; ++ void * output_collection_changed_user_ptr; ++ cubeb_device_collection_changed_callback input_collection_changed_callback; ++ void * input_collection_changed_user_ptr; ++ cubeb_strings * device_ids; + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + pa_stream * output_stream; + pa_stream * input_stream; + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; +- void * user_ptr; + pa_time_event * drain_timer; + pa_sample_spec output_sample_spec; + pa_sample_spec input_sample_spec; +@@ -124,6 +144,24 @@ enum cork_state { + NOTIFY = 1 << 1 + }; + ++static int ++intern_device_id(cubeb * ctx, char const ** id) ++{ ++ char const * interned; ++ ++ assert(ctx); ++ assert(id); ++ ++ interned = cubeb_strings_intern(ctx->device_ids, *id); ++ if (!interned) { ++ return CUBEB_ERROR; ++ } ++ ++ *id = interned; ++ ++ return CUBEB_OK; ++} ++ + static void + sink_info_callback(pa_context * context, const pa_sink_info * info, int eol, void * u) + { +@@ -131,8 +169,10 @@ sink_info_callback(pa_context * context, const pa_sink_info * info, int eol, voi + cubeb * ctx = u; + if (!eol) { + free(ctx->default_sink_info); +- ctx->default_sink_info = malloc(sizeof(pa_sink_info)); +- memcpy(ctx->default_sink_info, info, sizeof(pa_sink_info)); ++ ctx->default_sink_info = malloc(sizeof(struct cubeb_default_sink_info)); ++ memcpy(&ctx->default_sink_info->channel_map, &info->channel_map, sizeof(pa_channel_map)); ++ ctx->default_sink_info->sample_spec_rate = info->sample_spec.rate; ++ ctx->default_sink_info->flags = info->flags; + } + WRAP(pa_threaded_mainloop_signal)(ctx->mainloop, 0); + } +@@ -140,7 +180,11 @@ sink_info_callback(pa_context * context, const pa_sink_info * info, int eol, voi + static void + server_info_callback(pa_context * context, const pa_server_info * info, void * u) + { +- WRAP(pa_context_get_sink_info_by_name)(context, info->default_sink_name, sink_info_callback, u); ++ pa_operation * o; ++ o = WRAP(pa_context_get_sink_info_by_name)(context, info->default_sink_name, sink_info_callback, u); ++ if (o) { ++ WRAP(pa_operation_unref)(o); ++ } + } + + static void +@@ -467,12 +511,81 @@ stream_update_timing_info(cubeb_stream * stm) + return r; + } + ++static pa_channel_position_t ++cubeb_channel_to_pa_channel(cubeb_channel channel) ++{ ++ switch (channel) { ++ case CHANNEL_FRONT_LEFT: ++ return PA_CHANNEL_POSITION_FRONT_LEFT; ++ case CHANNEL_FRONT_RIGHT: ++ return PA_CHANNEL_POSITION_FRONT_RIGHT; ++ case CHANNEL_FRONT_CENTER: ++ return PA_CHANNEL_POSITION_FRONT_CENTER; ++ case CHANNEL_LOW_FREQUENCY: ++ return PA_CHANNEL_POSITION_LFE; ++ case CHANNEL_BACK_LEFT: ++ return PA_CHANNEL_POSITION_REAR_LEFT; ++ case CHANNEL_BACK_RIGHT: ++ return PA_CHANNEL_POSITION_REAR_RIGHT; ++ case CHANNEL_FRONT_LEFT_OF_CENTER: ++ return PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER; ++ case CHANNEL_FRONT_RIGHT_OF_CENTER: ++ return PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER; ++ case CHANNEL_BACK_CENTER: ++ return PA_CHANNEL_POSITION_REAR_CENTER; ++ case CHANNEL_SIDE_LEFT: ++ return PA_CHANNEL_POSITION_SIDE_LEFT; ++ case CHANNEL_SIDE_RIGHT: ++ return PA_CHANNEL_POSITION_SIDE_RIGHT; ++ case CHANNEL_TOP_CENTER: ++ return PA_CHANNEL_POSITION_TOP_CENTER; ++ case CHANNEL_TOP_FRONT_LEFT: ++ return PA_CHANNEL_POSITION_TOP_FRONT_LEFT; ++ case CHANNEL_TOP_FRONT_CENTER: ++ return PA_CHANNEL_POSITION_TOP_FRONT_CENTER; ++ case CHANNEL_TOP_FRONT_RIGHT: ++ return PA_CHANNEL_POSITION_TOP_FRONT_RIGHT; ++ case CHANNEL_TOP_BACK_LEFT: ++ return PA_CHANNEL_POSITION_TOP_REAR_LEFT; ++ case CHANNEL_TOP_BACK_CENTER: ++ return PA_CHANNEL_POSITION_TOP_REAR_CENTER; ++ case CHANNEL_TOP_BACK_RIGHT: ++ return PA_CHANNEL_POSITION_TOP_REAR_RIGHT; ++ default: ++ return PA_CHANNEL_POSITION_INVALID; ++ } ++} ++ ++static void ++layout_to_channel_map(cubeb_channel_layout layout, pa_channel_map * cm) ++{ ++ assert(cm && layout != CUBEB_LAYOUT_UNDEFINED); ++ ++ WRAP(pa_channel_map_init)(cm); ++ ++ uint32_t channels = 0; ++ cubeb_channel_layout channelMap = layout; ++ for (uint32_t i = 0 ; channelMap != 0; ++i) { ++ uint32_t channel = (channelMap & 1) << i; ++ if (channel != 0) { ++ cm->map[channels] = cubeb_channel_to_pa_channel(channel); ++ channels++; ++ } ++ channelMap = channelMap >> 1; ++ } ++ unsigned int channels_from_layout = cubeb_channel_layout_nb_channels(layout); ++ assert(channels_from_layout <= UINT8_MAX); ++ cm->channels = (uint8_t) channels_from_layout; ++} ++ + static void pulse_context_destroy(cubeb * ctx); + static void pulse_destroy(cubeb * ctx); + + static int + pulse_context_init(cubeb * ctx) + { ++ int r; ++ + if (ctx->context) { + assert(ctx->error == 1); + pulse_context_destroy(ctx); +@@ -486,9 +599,9 @@ pulse_context_init(cubeb * ctx) + WRAP(pa_context_set_state_callback)(ctx->context, context_state_callback, ctx); + + WRAP(pa_threaded_mainloop_lock)(ctx->mainloop); +- WRAP(pa_context_connect)(ctx->context, NULL, 0, NULL); ++ r = WRAP(pa_context_connect)(ctx->context, NULL, 0, NULL); + +- if (wait_until_context_ready(ctx) != 0) { ++ if (r < 0 || wait_until_context_ready(ctx) != 0) { + WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); + pulse_context_destroy(ctx); + ctx->context = NULL; +@@ -502,18 +615,25 @@ pulse_context_init(cubeb * ctx) + return 0; + } + ++static int pulse_subscribe_notifications(cubeb * context, ++ pa_subscription_mask_t mask); ++ + /*static*/ int + pulse_init(cubeb ** context, char const * context_name) + { + void * libpulse = NULL; + cubeb * ctx; ++ pa_operation * o; + + *context = NULL; + + #ifndef DISABLE_LIBPULSE_DLOPEN + libpulse = dlopen("libpulse.so.0", RTLD_LAZY); + if (!libpulse) { +- return CUBEB_ERROR; ++ libpulse = dlopen("libpulse.so", RTLD_LAZY); ++ if (!libpulse) { ++ return CUBEB_ERROR; ++ } + } + + #define LOAD(x) { \ +@@ -528,11 +648,20 @@ pulse_init(cubeb ** context, char const * context_name) + #undef LOAD + #endif + ++#if PA_CHECK_VERSION(2, 0, 0) ++ const char* version = WRAP(pa_get_library_version)(); ++ has_pulse_v2 = strtol(version, NULL, 10) >= 2; ++#endif ++ + ctx = calloc(1, sizeof(*ctx)); + assert(ctx); + + ctx->ops = &pulse_ops; + ctx->libpulse = libpulse; ++ if (cubeb_strings_init(&ctx->device_ids) != CUBEB_OK) { ++ pulse_destroy(ctx); ++ return CUBEB_ERROR; ++ } + + ctx->mainloop = WRAP(pa_threaded_mainloop_new)(); + ctx->default_sink_info = NULL; +@@ -545,10 +674,20 @@ pulse_init(cubeb ** context, char const * context_name) + return CUBEB_ERROR; + } + ++ /* server_info_callback performs a second async query, which is ++ responsible for initializing default_sink_info and signalling the ++ mainloop to end the wait. */ + WRAP(pa_threaded_mainloop_lock)(ctx->mainloop); +- WRAP(pa_context_get_server_info)(ctx->context, server_info_callback, ctx); ++ o = WRAP(pa_context_get_server_info)(ctx->context, server_info_callback, ctx); ++ if (o) { ++ operation_wait(ctx, NULL, o); ++ WRAP(pa_operation_unref)(o); ++ } + WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); + ++ /* Update `default_sink_info` when the default device changes. */ ++ pulse_subscribe_notifications(ctx, PA_SUBSCRIPTION_MASK_SERVER); ++ + *context = ctx; + + return CUBEB_OK; +@@ -567,11 +706,8 @@ pulse_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + (void)ctx; + assert(ctx && max_channels); + +- WRAP(pa_threaded_mainloop_lock)(ctx->mainloop); +- while (!ctx->default_sink_info) { +- WRAP(pa_threaded_mainloop_wait)(ctx->mainloop); +- } +- WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); ++ if (!ctx->default_sink_info) ++ return CUBEB_ERROR; + + *max_channels = ctx->default_sink_info->channel_map.channels; + +@@ -584,13 +720,10 @@ pulse_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) + assert(ctx && rate); + (void)ctx; + +- WRAP(pa_threaded_mainloop_lock)(ctx->mainloop); +- while (!ctx->default_sink_info) { +- WRAP(pa_threaded_mainloop_wait)(ctx->mainloop); +- } +- WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); ++ if (!ctx->default_sink_info) ++ return CUBEB_ERROR; + +- *rate = ctx->default_sink_info->sample_spec.rate; ++ *rate = ctx->default_sink_info->sample_spec_rate; + + return CUBEB_OK; + } +@@ -625,9 +758,7 @@ pulse_context_destroy(cubeb * ctx) + static void + pulse_destroy(cubeb * ctx) + { +- if (ctx->context_name) { +- free(ctx->context_name); +- } ++ free(ctx->context_name); + if (ctx->context) { + pulse_context_destroy(ctx); + } +@@ -637,12 +768,14 @@ pulse_destroy(cubeb * ctx) + WRAP(pa_threaded_mainloop_free)(ctx->mainloop); + } + ++ if (ctx->device_ids) { ++ cubeb_strings_destroy(ctx->device_ids); ++ } ++ + if (ctx->libpulse) { + dlclose(ctx->libpulse); + } +- if (ctx->default_sink_info) { +- free(ctx->default_sink_info); +- } ++ free(ctx->default_sink_info); + free(ctx); + } + +@@ -665,6 +798,25 @@ to_pulse_format(cubeb_sample_format format) + } + } + ++static cubeb_channel_layout ++pulse_default_layout_for_channels(uint32_t ch) ++{ ++ assert (ch > 0 && ch <= 8); ++ switch (ch) { ++ case 1: return CUBEB_LAYOUT_MONO; ++ case 2: return CUBEB_LAYOUT_STEREO; ++ case 3: return CUBEB_LAYOUT_3F; ++ case 4: return CUBEB_LAYOUT_QUAD; ++ case 5: return CUBEB_LAYOUT_3F2; ++ case 6: return CUBEB_LAYOUT_3F_LFE | ++ CHANNEL_SIDE_LEFT | CHANNEL_SIDE_RIGHT; ++ case 7: return CUBEB_LAYOUT_3F3R_LFE; ++ case 8: return CUBEB_LAYOUT_3F4_LFE; ++ } ++ // Never get here! ++ return CUBEB_LAYOUT_UNDEFINED; ++} ++ + static int + create_pa_stream(cubeb_stream * stm, + pa_stream ** pa_stm, +@@ -672,15 +824,39 @@ create_pa_stream(cubeb_stream * stm, + char const * stream_name) + { + assert(stm && stream_params); ++ assert(&stm->input_stream == pa_stm || (&stm->output_stream == pa_stm && ++ (stream_params->layout == CUBEB_LAYOUT_UNDEFINED || ++ (stream_params->layout != CUBEB_LAYOUT_UNDEFINED && ++ cubeb_channel_layout_nb_channels(stream_params->layout) == stream_params->channels)))); ++ if (stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } + *pa_stm = NULL; + pa_sample_spec ss; + ss.format = to_pulse_format(stream_params->format); + if (ss.format == PA_SAMPLE_INVALID) + return CUBEB_ERROR_INVALID_FORMAT; + ss.rate = stream_params->rate; +- ss.channels = stream_params->channels; +- +- *pa_stm = WRAP(pa_stream_new)(stm->context->context, stream_name, &ss, NULL); ++ if (stream_params->channels > UINT8_MAX) ++ return CUBEB_ERROR_INVALID_FORMAT; ++ ss.channels = (uint8_t) stream_params->channels; ++ ++ if (stream_params->layout == CUBEB_LAYOUT_UNDEFINED) { ++ pa_channel_map cm; ++ if (stream_params->channels <= 8 && ++ !WRAP(pa_channel_map_init_auto)(&cm, stream_params->channels, PA_CHANNEL_MAP_DEFAULT)) { ++ LOG("Layout undefined and PulseAudio's default layout has not been configured, guess one."); ++ layout_to_channel_map(pulse_default_layout_for_channels(stream_params->channels), &cm); ++ *pa_stm = WRAP(pa_stream_new)(stm->context->context, stream_name, &ss, &cm); ++ } else { ++ LOG("Layout undefined, PulseAudio will use its default."); ++ *pa_stm = WRAP(pa_stream_new)(stm->context->context, stream_name, &ss, NULL); ++ } ++ } else { ++ pa_channel_map cm; ++ layout_to_channel_map(stream_params->layout, &cm); ++ *pa_stm = WRAP(pa_stream_new)(stm->context->context, stream_name, &ss, &cm); ++ } + return (*pa_stm == NULL) ? CUBEB_ERROR : CUBEB_OK; + } + +@@ -753,7 +929,7 @@ pulse_stream_init(cubeb * context, + + battr = set_buffering_attribute(latency_frames, &stm->output_sample_spec); + WRAP(pa_stream_connect_playback)(stm->output_stream, +- output_device, ++ (char const *) output_device, + &battr, + PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_INTERPOLATE_TIMING | + PA_STREAM_START_CORKED | PA_STREAM_ADJUST_LATENCY, +@@ -776,7 +952,7 @@ pulse_stream_init(cubeb * context, + + battr = set_buffering_attribute(latency_frames, &stm->input_sample_spec); + WRAP(pa_stream_connect_record)(stm->input_stream, +- input_device, ++ (char const *) input_device, + &battr, + PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_INTERPOLATE_TIMING | + PA_STREAM_START_CORKED | PA_STREAM_ADJUST_LATENCY); +@@ -796,7 +972,7 @@ pulse_stream_init(cubeb * context, + return CUBEB_ERROR; + } + +- if (g_log_level) { ++ if (g_cubeb_log_level) { + if (output_stream_params){ + const pa_buffer_attr * output_att; + output_att = WRAP(pa_stream_get_buffer_attr)(stm->output_stream); +@@ -813,6 +989,7 @@ pulse_stream_init(cubeb * context, + } + + *stream = stm; ++ LOG("Cubeb stream (%p) init successful.", *stream); + + return CUBEB_OK; + } +@@ -844,6 +1021,7 @@ pulse_stream_destroy(cubeb_stream * stm) + } + WRAP(pa_threaded_mainloop_unlock)(stm->context->mainloop); + ++ LOG("Cubeb stream (%p) destroyed successfully.", stm); + free(stm); + } + +@@ -875,6 +1053,7 @@ pulse_stream_start(cubeb_stream * stm) + WRAP(pa_threaded_mainloop_unlock)(stm->context->mainloop); + } + ++ LOG("Cubeb stream (%p) started successfully.", stm); + return CUBEB_OK; + } + +@@ -890,6 +1069,7 @@ pulse_stream_stop(cubeb_stream * stm) + WRAP(pa_threaded_mainloop_unlock)(stm->context->mainloop); + + stream_cork(stm, CORK | NOTIFY); ++ LOG("Cubeb stream (%p) stopped successfully.", stm); + return CUBEB_OK; + } + +@@ -962,6 +1142,7 @@ pulse_stream_set_volume(cubeb_stream * stm, float volume) + pa_volume_t vol; + pa_cvolume cvol; + const pa_sample_spec * ss; ++ cubeb * ctx; + + if (!stm->output_stream) { + return CUBEB_ERROR; +@@ -969,13 +1150,11 @@ pulse_stream_set_volume(cubeb_stream * stm, float volume) + + WRAP(pa_threaded_mainloop_lock)(stm->context->mainloop); + +- while (!stm->context->default_sink_info) { +- WRAP(pa_threaded_mainloop_wait)(stm->context->mainloop); +- } +- + /* if the pulse daemon is configured to use flat volumes, + * apply our own gain instead of changing the input volume on the sink. */ +- if (stm->context->default_sink_info->flags & PA_SINK_FLAT_VOLUME) { ++ ctx = stm->context; ++ if (ctx->default_sink_info && ++ (ctx->default_sink_info->flags & PA_SINK_FLAT_VOLUME)) { + stm->volume = volume; + } else { + ss = WRAP(pa_stream_get_sample_spec)(stm->output_stream); +@@ -985,46 +1164,40 @@ pulse_stream_set_volume(cubeb_stream * stm, float volume) + + index = WRAP(pa_stream_get_index)(stm->output_stream); + +- op = WRAP(pa_context_set_sink_input_volume)(stm->context->context, ++ op = WRAP(pa_context_set_sink_input_volume)(ctx->context, + index, &cvol, volume_success, + stm); + if (op) { +- operation_wait(stm->context, stm->output_stream, op); ++ operation_wait(ctx, stm->output_stream, op); + WRAP(pa_operation_unref)(op); + } + } + +- WRAP(pa_threaded_mainloop_unlock)(stm->context->mainloop); ++ WRAP(pa_threaded_mainloop_unlock)(ctx->mainloop); + + return CUBEB_OK; + } + +-static int +-pulse_stream_set_panning(cubeb_stream * stream, float panning) +-{ +- const pa_channel_map * map; +- pa_cvolume vol; +- +- if (!stream->output_stream) { +- return CUBEB_ERROR; +- } +- +- map = WRAP(pa_stream_get_channel_map)(stream->output_stream); ++struct sink_input_info_result { ++ pa_cvolume * cvol; ++ pa_threaded_mainloop * mainloop; ++}; + +- if (!WRAP(pa_channel_map_can_balance)(map)) { +- return CUBEB_ERROR; ++static void ++sink_input_info_cb(pa_context * c, pa_sink_input_info const * i, int eol, void * u) ++{ ++ struct sink_input_info_result * r = u; ++ if (!eol) { ++ *r->cvol = i->volume; + } +- +- WRAP(pa_cvolume_set_balance)(&vol, map, panning); +- +- return CUBEB_OK; ++ WRAP(pa_threaded_mainloop_signal)(r->mainloop, 0); + } + + typedef struct { + char * default_sink_name; + char * default_source_name; + +- cubeb_device_info ** devinfo; ++ cubeb_device_info * devinfo; + uint32_t max; + uint32_t count; + cubeb * context; +@@ -1053,7 +1226,7 @@ pulse_ensure_dev_list_data_list_size (pulse_dev_list_data * list_data) + if (list_data->count == list_data->max) { + list_data->max += 8; + list_data->devinfo = realloc(list_data->devinfo, +- sizeof(cubeb_device_info *) * list_data->max); ++ sizeof(cubeb_device_info) * list_data->max); + } + } + +@@ -1062,33 +1235,47 @@ pulse_get_state_from_sink_port(pa_sink_port_info * info) + { + if (info != NULL) { + #if PA_CHECK_VERSION(2, 0, 0) +- if (info->available == PA_PORT_AVAILABLE_NO) ++ if (has_pulse_v2 && info->available == PA_PORT_AVAILABLE_NO) + return CUBEB_DEVICE_STATE_UNPLUGGED; + else /*if (info->available == PA_PORT_AVAILABLE_YES) + UNKNOWN */ + #endif + return CUBEB_DEVICE_STATE_ENABLED; + } + +- return CUBEB_DEVICE_STATE_DISABLED; ++ return CUBEB_DEVICE_STATE_ENABLED; + } + + static void + pulse_sink_info_cb(pa_context * context, const pa_sink_info * info, +- int eol, void * user_data) ++ int eol, void * user_data) + { + pulse_dev_list_data * list_data = user_data; + cubeb_device_info * devinfo; +- const char * prop; ++ char const * prop = NULL; ++ char const * device_id = NULL; + + (void)context; + +- if (eol || info == NULL) ++ if (eol) { ++ WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); ++ return; ++ } ++ ++ if (info == NULL) + return; + +- devinfo = calloc(1, sizeof(cubeb_device_info)); ++ device_id = info->name; ++ if (intern_device_id(list_data->context, &device_id) != CUBEB_OK) { ++ assert(NULL); ++ return; ++ } ++ ++ pulse_ensure_dev_list_data_list_size(list_data); ++ devinfo = &list_data->devinfo[list_data->count]; ++ memset(devinfo, 0, sizeof(cubeb_device_info)); + +- devinfo->device_id = strdup(info->name); +- devinfo->devid = devinfo->device_id; ++ devinfo->device_id = device_id; ++ devinfo->devid = (cubeb_devid) devinfo->device_id; + devinfo->friendly_name = strdup(info->description); + prop = WRAP(pa_proplist_gets)(info->proplist, "sysfs.path"); + if (prop) +@@ -1099,7 +1286,8 @@ pulse_sink_info_cb(pa_context * context, const pa_sink_info * info, + + devinfo->type = CUBEB_DEVICE_TYPE_OUTPUT; + devinfo->state = pulse_get_state_from_sink_port(info->active_port); +- devinfo->preferred = strcmp(info->name, list_data->default_sink_name) == 0; ++ devinfo->preferred = (strcmp(info->name, list_data->default_sink_name) == 0) ? ++ CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE; + + devinfo->format = CUBEB_DEVICE_FMT_ALL; + devinfo->default_format = pulse_format_to_cubeb_format(info->sample_spec.format); +@@ -1111,10 +1299,7 @@ pulse_sink_info_cb(pa_context * context, const pa_sink_info * info, + devinfo->latency_lo = 0; + devinfo->latency_hi = 0; + +- pulse_ensure_dev_list_data_list_size (list_data); +- list_data->devinfo[list_data->count++] = devinfo; +- +- WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); ++ list_data->count += 1; + } + + static cubeb_device_state +@@ -1122,14 +1307,14 @@ pulse_get_state_from_source_port(pa_source_port_info * info) + { + if (info != NULL) { + #if PA_CHECK_VERSION(2, 0, 0) +- if (info->available == PA_PORT_AVAILABLE_NO) ++ if (has_pulse_v2 && info->available == PA_PORT_AVAILABLE_NO) + return CUBEB_DEVICE_STATE_UNPLUGGED; + else /*if (info->available == PA_PORT_AVAILABLE_YES) + UNKNOWN */ + #endif + return CUBEB_DEVICE_STATE_ENABLED; + } + +- return CUBEB_DEVICE_STATE_DISABLED; ++ return CUBEB_DEVICE_STATE_ENABLED; + } + + static void +@@ -1138,17 +1323,28 @@ pulse_source_info_cb(pa_context * context, const pa_source_info * info, + { + pulse_dev_list_data * list_data = user_data; + cubeb_device_info * devinfo; +- const char * prop; ++ char const * prop = NULL; ++ char const * device_id = NULL; + + (void)context; + +- if (eol) ++ if (eol) { ++ WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); ++ return; ++ } ++ ++ device_id = info->name; ++ if (intern_device_id(list_data->context, &device_id) != CUBEB_OK) { ++ assert(NULL); + return; ++ } + +- devinfo = calloc(1, sizeof(cubeb_device_info)); ++ pulse_ensure_dev_list_data_list_size(list_data); ++ devinfo = &list_data->devinfo[list_data->count]; ++ memset(devinfo, 0, sizeof(cubeb_device_info)); + +- devinfo->device_id = strdup(info->name); +- devinfo->devid = devinfo->device_id; ++ devinfo->device_id = device_id; ++ devinfo->devid = (cubeb_devid) devinfo->device_id; + devinfo->friendly_name = strdup(info->description); + prop = WRAP(pa_proplist_gets)(info->proplist, "sysfs.path"); + if (prop) +@@ -1159,7 +1355,8 @@ pulse_source_info_cb(pa_context * context, const pa_source_info * info, + + devinfo->type = CUBEB_DEVICE_TYPE_INPUT; + devinfo->state = pulse_get_state_from_source_port(info->active_port); +- devinfo->preferred = strcmp(info->name, list_data->default_source_name) == 0; ++ devinfo->preferred = (strcmp(info->name, list_data->default_source_name) == 0) ? ++ CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE; + + devinfo->format = CUBEB_DEVICE_FMT_ALL; + devinfo->default_format = pulse_format_to_cubeb_format(info->sample_spec.format); +@@ -1171,10 +1368,7 @@ pulse_source_info_cb(pa_context * context, const pa_source_info * info, + devinfo->latency_lo = 0; + devinfo->latency_hi = 0; + +- pulse_ensure_dev_list_data_list_size (list_data); +- list_data->devinfo[list_data->count++] = devinfo; +- +- WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); ++ list_data->count += 1; + } + + static void +@@ -1186,19 +1380,20 @@ pulse_server_info_cb(pa_context * c, const pa_server_info * i, void * userdata) + + free(list_data->default_sink_name); + free(list_data->default_source_name); +- list_data->default_sink_name = strdup(i->default_sink_name); +- list_data->default_source_name = strdup(i->default_source_name); ++ list_data->default_sink_name = ++ i->default_sink_name ? strdup(i->default_sink_name) : NULL; ++ list_data->default_source_name = ++ i->default_source_name ? strdup(i->default_source_name) : NULL; + + WRAP(pa_threaded_mainloop_signal)(list_data->context->mainloop, 0); + } + + static int + pulse_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { + pulse_dev_list_data user_data = { NULL, NULL, NULL, 0, 0, context }; + pa_operation * o; +- uint32_t i; + + WRAP(pa_threaded_mainloop_lock)(context->mainloop); + +@@ -1229,15 +1424,26 @@ pulse_enumerate_devices(cubeb * context, cubeb_device_type type, + + WRAP(pa_threaded_mainloop_unlock)(context->mainloop); + +- *collection = malloc(sizeof(cubeb_device_collection) + +- sizeof(cubeb_device_info *) * (user_data.count > 0 ? user_data.count - 1 : 0)); +- (*collection)->count = user_data.count; +- for (i = 0; i < user_data.count; i++) +- (*collection)->device[i] = user_data.devinfo[i]; ++ collection->device = user_data.devinfo; ++ collection->count = user_data.count; + + free(user_data.default_sink_name); + free(user_data.default_source_name); +- free(user_data.devinfo); ++ return CUBEB_OK; ++} ++ ++static int ++pulse_device_collection_destroy(cubeb * ctx, cubeb_device_collection * collection) ++{ ++ size_t n; ++ ++ for (n = 0; n < collection->count; n++) { ++ free((void *) collection->device[n].friendly_name); ++ free((void *) collection->device[n].vendor_name); ++ free((void *) collection->device[n].group_id); ++ } ++ ++ free(collection->device); + return CUBEB_OK; + } + +@@ -1285,29 +1491,40 @@ pulse_subscribe_callback(pa_context * ctx, + cubeb * context = userdata; + + switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) { ++ case PA_SUBSCRIPTION_EVENT_SERVER: ++ if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) { ++ LOG("Server changed %d", index); ++ WRAP(pa_context_get_server_info)(context->context, server_info_callback, context); ++ } ++ break; + case PA_SUBSCRIPTION_EVENT_SOURCE: + case PA_SUBSCRIPTION_EVENT_SINK: + +- if (g_log_level) { ++ if (g_cubeb_log_level) { + if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE && + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { +- LOG("Removing sink index %d", index); ++ LOG("Removing source index %d", index); + } else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE && + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) { +- LOG("Adding sink index %d", index); ++ LOG("Adding source index %d", index); + } + if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK && + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { +- LOG("Removing source index %d", index); ++ LOG("Removing sink index %d", index); + } else if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK && + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) { +- LOG("Adding source index %d", index); ++ LOG("Adding sink index %d", index); + } + } + + if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE || + (t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) { +- context->collection_changed_callback(context, context->collection_changed_user_ptr); ++ if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE) { ++ context->input_collection_changed_callback(context, context->input_collection_changed_user_ptr); ++ } ++ if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK) { ++ context->output_collection_changed_callback(context, context->output_collection_changed_user_ptr); ++ } + } + break; + } +@@ -1323,34 +1540,15 @@ subscribe_success(pa_context *c, int success, void *userdata) + } + + static int +-pulse_register_device_collection_changed(cubeb * context, +- cubeb_device_type devtype, +- cubeb_device_collection_changed_callback collection_changed_callback, +- void * user_ptr) +-{ +- context->collection_changed_callback = collection_changed_callback; +- context->collection_changed_user_ptr = user_ptr; +- ++pulse_subscribe_notifications(cubeb * context, pa_subscription_mask_t mask) { + WRAP(pa_threaded_mainloop_lock)(context->mainloop); + +- pa_subscription_mask_t mask; +- if (context->collection_changed_callback == NULL) { +- // Unregister subscription +- WRAP(pa_context_set_subscribe_callback)(context->context, NULL, NULL); +- mask = PA_SUBSCRIPTION_MASK_NULL; +- } else { +- WRAP(pa_context_set_subscribe_callback)(context->context, pulse_subscribe_callback, context); +- if (devtype == CUBEB_DEVICE_TYPE_INPUT) +- mask = PA_SUBSCRIPTION_MASK_SOURCE; +- else if (devtype == CUBEB_DEVICE_TYPE_OUTPUT) +- mask = PA_SUBSCRIPTION_MASK_SINK; +- else +- mask = PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE; +- } ++ WRAP(pa_context_set_subscribe_callback)(context->context, pulse_subscribe_callback, context); + + pa_operation * o; + o = WRAP(pa_context_subscribe)(context->context, mask, subscribe_success, context); + if (o == NULL) { ++ WRAP(pa_threaded_mainloop_unlock)(context->mainloop); + LOG("Context subscribe failed"); + return CUBEB_ERROR; + } +@@ -1362,6 +1560,37 @@ pulse_register_device_collection_changed(cubeb * context, + return CUBEB_OK; + } + ++static int ++pulse_register_device_collection_changed(cubeb * context, ++ cubeb_device_type devtype, ++ cubeb_device_collection_changed_callback collection_changed_callback, ++ void * user_ptr) ++{ ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ context->input_collection_changed_callback = collection_changed_callback; ++ context->input_collection_changed_user_ptr = user_ptr; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ context->output_collection_changed_callback = collection_changed_callback; ++ context->output_collection_changed_user_ptr = user_ptr; ++ } ++ ++ pa_subscription_mask_t mask = PA_SUBSCRIPTION_MASK_NULL; ++ if (context->input_collection_changed_callback) { ++ /* Input added or removed */ ++ mask |= PA_SUBSCRIPTION_MASK_SOURCE; ++ } ++ if (context->output_collection_changed_callback) { ++ /* Output added or removed */ ++ mask |= PA_SUBSCRIPTION_MASK_SINK; ++ } ++ /* Default device changed, this is always registered in order to update the ++ * `default_sink_info` when the default device changes. */ ++ mask |= PA_SUBSCRIPTION_MASK_SERVER; ++ ++ return pulse_subscribe_notifications(context, mask); ++} ++ + static struct cubeb_ops const pulse_ops = { + .init = pulse_init, + .get_backend_id = pulse_get_backend_id, +@@ -1369,15 +1598,16 @@ static struct cubeb_ops const pulse_ops = { + .get_min_latency = pulse_get_min_latency, + .get_preferred_sample_rate = pulse_get_preferred_sample_rate, + .enumerate_devices = pulse_enumerate_devices, ++ .device_collection_destroy = pulse_device_collection_destroy, + .destroy = pulse_destroy, + .stream_init = pulse_stream_init, + .stream_destroy = pulse_stream_destroy, + .stream_start = pulse_stream_start, + .stream_stop = pulse_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = pulse_stream_get_position, + .stream_get_latency = pulse_stream_get_latency, + .stream_set_volume = pulse_stream_set_volume, +- .stream_set_panning = pulse_stream_set_panning, + .stream_get_current_device = pulse_stream_get_current_device, + .stream_device_destroy = pulse_stream_device_destroy, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_resampler.cpp b/media/libcubeb/src/cubeb_resampler.cpp +index f6676946c..2bc889340 100644 +--- a/media/libcubeb/src/cubeb_resampler.cpp ++++ b/media/libcubeb/src/cubeb_resampler.cpp +@@ -35,29 +35,54 @@ to_speex_quality(cubeb_resampler_quality q) + } + } + +-long noop_resampler::fill(void * input_buffer, long * input_frames_count, +- void * output_buffer, long output_frames) ++uint32_t min_buffered_audio_frame(uint32_t sample_rate) ++{ ++ return sample_rate / 20; ++} ++ ++template ++passthrough_resampler::passthrough_resampler(cubeb_stream * s, ++ cubeb_data_callback cb, ++ void * ptr, ++ uint32_t input_channels, ++ uint32_t sample_rate) ++ : processor(input_channels) ++ , stream(s) ++ , data_callback(cb) ++ , user_ptr(ptr) ++ , sample_rate(sample_rate) ++{ ++} ++ ++template ++long passthrough_resampler::fill(void * input_buffer, long * input_frames_count, ++ void * output_buffer, long output_frames) + { + if (input_buffer) { + assert(input_frames_count); + } +- assert((input_buffer && output_buffer && +- *input_frames_count >= output_frames) || +- (!input_buffer && (!input_frames_count || *input_frames_count == 0)) || +- (!output_buffer && output_frames == 0)); +- +- if (output_buffer == nullptr) { +- assert(input_buffer); +- output_frames = *input_frames_count; ++ assert((input_buffer && output_buffer) || ++ (output_buffer && !input_buffer && (!input_frames_count || *input_frames_count == 0)) || ++ (input_buffer && !output_buffer && output_frames == 0)); ++ ++ if (input_buffer) { ++ if (!output_buffer) { ++ output_frames = *input_frames_count; ++ } ++ internal_input_buffer.push(static_cast(input_buffer), ++ frames_to_samples(*input_frames_count)); + } + +- if (input_buffer && *input_frames_count != output_frames) { +- assert(*input_frames_count > output_frames); ++ long rv = data_callback(stream, user_ptr, internal_input_buffer.data(), ++ output_buffer, output_frames); ++ ++ if (input_buffer) { ++ internal_input_buffer.pop(nullptr, frames_to_samples(output_frames)); + *input_frames_count = output_frames; ++ drop_audio_if_needed(); + } + +- return data_callback(stream, user_ptr, +- input_buffer, output_buffer, output_frames); ++ return rv; + } + + template +@@ -120,27 +145,32 @@ cubeb_resampler_speex + assert(!input_buffer && (!input_frames_count || *input_frames_count == 0) && + output_buffer && output_frames_needed); + +- long got = 0; +- T * out_unprocessed = nullptr; +- long output_frames_before_processing = 0; ++ if (!draining) { ++ long got = 0; ++ T * out_unprocessed = nullptr; ++ long output_frames_before_processing = 0; + ++ /* fill directly the input buffer of the output processor to save a copy */ ++ output_frames_before_processing = ++ output_processor->input_needed_for_output(output_frames_needed); + +- /* fill directly the input buffer of the output processor to save a copy */ +- output_frames_before_processing = +- output_processor->input_needed_for_output(output_frames_needed); ++ out_unprocessed = ++ output_processor->input_buffer(output_frames_before_processing); + +- out_unprocessed = +- output_processor->input_buffer(output_frames_before_processing); ++ got = data_callback(stream, user_ptr, ++ nullptr, out_unprocessed, ++ output_frames_before_processing); + +- got = data_callback(stream, user_ptr, +- nullptr, out_unprocessed, +- output_frames_before_processing); ++ if (got < output_frames_before_processing) { ++ draining = true; + +- if (got < 0) { +- return got; +- } ++ if (got < 0) { ++ return got; ++ } ++ } + +- output_processor->written(got); ++ output_processor->written(got); ++ } + + /* Process the output. If not enough frames have been returned from the + * callback, drain the processors. */ +@@ -163,7 +193,10 @@ cubeb_resampler_speex + /* process the input, and present exactly `output_frames_needed` in the + * callback. */ + input_processor->input(input_buffer, *input_frames_count); +- resampled_input = input_processor->output(resampled_frame_count); ++ ++ size_t frames_resampled = 0; ++ resampled_input = input_processor->output(resampled_frame_count, &frames_resampled); ++ *input_frames_count = frames_resampled; + + long got = data_callback(stream, user_ptr, + resampled_input, nullptr, resampled_frame_count); +@@ -174,18 +207,22 @@ cubeb_resampler_speex + return (*input_frames_count) * (got / resampled_frame_count); + } + +- + template + long + cubeb_resampler_speex + ::fill_internal_duplex(T * in_buffer, long * input_frames_count, + T * out_buffer, long output_frames_needed) + { ++ if (draining) { ++ // discard input and drain any signal remaining in the resampler. ++ return output_processor->output(out_buffer, output_frames_needed); ++ } ++ + /* The input data, after eventual resampling. This is passed to the callback. */ + T * resampled_input = nullptr; + /* The output buffer passed down in the callback, that might be resampled. */ + T * out_unprocessed = nullptr; +- size_t output_frames_before_processing = 0; ++ long output_frames_before_processing = 0; + /* The number of frames returned from the callback. */ + long got = 0; + +@@ -210,8 +247,11 @@ cubeb_resampler_speex + /* process the input, and present exactly `output_frames_needed` in the + * callback. */ + input_processor->input(in_buffer, *input_frames_count); ++ ++ size_t frames_resampled = 0; + resampled_input = +- input_processor->output(output_frames_before_processing); ++ input_processor->output(output_frames_before_processing, &frames_resampled); ++ *input_frames_count = frames_resampled; + } else { + resampled_input = nullptr; + } +@@ -220,15 +260,25 @@ cubeb_resampler_speex + resampled_input, out_unprocessed, + output_frames_before_processing); + +- if (got < 0) { +- return got; ++ if (got < output_frames_before_processing) { ++ draining = true; ++ ++ if (got < 0) { ++ return got; ++ } + } + + output_processor->written(got); + ++ input_processor->drop_audio_if_needed(); ++ + /* Process the output. If not enough frames have been returned from the + * callback, drain the processors. */ +- return output_processor->output(out_buffer, output_frames_needed); ++ got = output_processor->output(out_buffer, output_frames_needed); ++ ++ output_processor->drop_audio_if_needed(); ++ ++ return got; + } + + /* Resampler C API */ +diff --git a/media/libcubeb/src/cubeb_resampler.h b/media/libcubeb/src/cubeb_resampler.h +index 020ccc17a..f6b551373 100644 +--- a/media/libcubeb/src/cubeb_resampler.h ++++ b/media/libcubeb/src/cubeb_resampler.h +@@ -25,8 +25,15 @@ typedef enum { + * Create a resampler to adapt the requested sample rate into something that + * is accepted by the audio backend. + * @param stream A cubeb_stream instance supplied to the data callback. +- * @param params Used to calculate bytes per frame and buffer size for resampling. +- * @param target_rate The sampling rate after resampling. ++ * @param input_params Used to calculate bytes per frame and buffer size for ++ * resampling of the input side of the stream. NULL if input should not be ++ * resampled. ++ * @param output_params Used to calculate bytes per frame and buffer size for ++ * resampling of the output side of the stream. NULL if output should not be ++ * resampled. ++ * @param target_rate The sampling rate after resampling for the input side of ++ * the stream, and/or the sampling rate prior to resampling of the output side ++ * of the stream. + * @param callback A callback to request data for resampling. + * @param user_ptr User data supplied to the data callback. + * @param quality Quality of the resampler. +@@ -47,8 +54,8 @@ cubeb_resampler * cubeb_resampler_create(cubeb_stream * stream, + * @param input_buffer A buffer of input samples + * @param input_frame_count The size of the buffer. Returns the number of frames + * consumed. +- * @param buffer The buffer to be filled. +- * @param frames_needed Number of frames that should be produced. ++ * @param output_buffer The buffer to be filled. ++ * @param output_frames_needed Number of frames that should be produced. + * @retval Number of frames that are actually produced. + * @retval CUBEB_ERROR on error. + */ +diff --git a/media/libcubeb/src/cubeb_resampler_internal.h b/media/libcubeb/src/cubeb_resampler_internal.h +index 3c37a04b9..fb69992ff 100644 +--- a/media/libcubeb/src/cubeb_resampler_internal.h ++++ b/media/libcubeb/src/cubeb_resampler_internal.h +@@ -39,6 +39,13 @@ MOZ_END_STD_NAMESPACE + + /* This header file contains the internal C++ API of the resamplers, for testing. */ + ++// When dropping audio input frames to prevent building ++// an input delay, this function returns the number of frames ++// to keep in the buffer. ++// @parameter sample_rate The sample rate of the stream. ++// @return A number of frames to keep. ++uint32_t min_buffered_audio_frame(uint32_t sample_rate); ++ + int to_speex_quality(cubeb_resampler_quality q); + + struct cubeb_resampler { +@@ -48,31 +55,6 @@ struct cubeb_resampler { + virtual ~cubeb_resampler() {} + }; + +-class noop_resampler : public cubeb_resampler { +-public: +- noop_resampler(cubeb_stream * s, +- cubeb_data_callback cb, +- void * ptr) +- : stream(s) +- , data_callback(cb) +- , user_ptr(ptr) +- { +- } +- +- virtual long fill(void * input_buffer, long * input_frames_count, +- void * output_buffer, long output_frames); +- +- virtual long latency() +- { +- return 0; +- } +- +-private: +- cubeb_stream * const stream; +- const cubeb_data_callback data_callback; +- void * const user_ptr; +-}; +- + /** Base class for processors. This is just used to share methods for now. */ + class processor { + public: +@@ -80,11 +62,11 @@ public: + : channels(channels) + {} + protected: +- size_t frames_to_samples(size_t frames) ++ size_t frames_to_samples(size_t frames) const + { + return frames * channels; + } +- size_t samples_to_frames(size_t samples) ++ size_t samples_to_frames(size_t samples) const + { + assert(!(samples % channels)); + return samples / channels; +@@ -93,6 +75,43 @@ protected: + const uint32_t channels; + }; + ++template ++class passthrough_resampler : public cubeb_resampler ++ , public processor { ++public: ++ passthrough_resampler(cubeb_stream * s, ++ cubeb_data_callback cb, ++ void * ptr, ++ uint32_t input_channels, ++ uint32_t sample_rate); ++ ++ virtual long fill(void * input_buffer, long * input_frames_count, ++ void * output_buffer, long output_frames); ++ ++ virtual long latency() ++ { ++ return 0; ++ } ++ ++ void drop_audio_if_needed() ++ { ++ uint32_t to_keep = min_buffered_audio_frame(sample_rate); ++ uint32_t available = samples_to_frames(internal_input_buffer.length()); ++ if (available > to_keep) { ++ internal_input_buffer.pop(nullptr, frames_to_samples(available - to_keep)); ++ } ++ } ++ ++private: ++ cubeb_stream * const stream; ++ const cubeb_data_callback data_callback; ++ void * const user_ptr; ++ /* This allows to buffer some input to account for the fact that we buffer ++ * some inputs. */ ++ auto_array internal_input_buffer; ++ uint32_t sample_rate; ++}; ++ + /** Bidirectional resampler, can resample an input and an output stream, or just + * an input stream or output stream. In this case a delay is inserted in the + * opposite direction to keep the streams synchronized. */ +@@ -138,6 +157,7 @@ private: + cubeb_stream * const stream; + const cubeb_data_callback data_callback; + void * const user_ptr; ++ bool draining = false; + }; + + /** Handles one way of a (possibly) duplex resampler, working on interleaved +@@ -163,6 +183,7 @@ public: + int quality) + : processor(channels) + , resampling_ratio(static_cast(source_rate) / target_rate) ++ , source_rate(source_rate) + , additional_latency(0) + , leftover_samples(0) + { +@@ -221,7 +242,7 @@ public: + + /** Returns a buffer containing exactly `output_frame_count` resampled frames. + * The consumer should not hold onto the pointer. */ +- T * output(size_t output_frame_count) ++ T * output(size_t output_frame_count, size_t * input_frames_used) + { + if (resampling_out_buffer.capacity() < frames_to_samples(output_frame_count)) { + resampling_out_buffer.reserve(frames_to_samples(output_frame_count)); +@@ -238,6 +259,7 @@ public: + /* This shifts back any unresampled samples to the beginning of the input + buffer. */ + resampling_in_buffer.pop(nullptr, frames_to_samples(in_len)); ++ *input_frames_used = in_len; + + return resampling_out_buffer.data(); + } +@@ -261,7 +283,7 @@ public: + * exactly `output_frame_count` resampled frames. This can return a number + * slightly bigger than what is strictly necessary, but it guaranteed that the + * number of output frames will be exactly equal. */ +- uint32_t input_needed_for_output(uint32_t output_frame_count) ++ uint32_t input_needed_for_output(uint32_t output_frame_count) const + { + int32_t unresampled_frames_left = samples_to_frames(resampling_in_buffer.length()); + int32_t resampled_frames_left = samples_to_frames(resampling_out_buffer.length()); +@@ -294,6 +316,16 @@ public: + resampling_in_buffer.set_length(leftover_samples + + frames_to_samples(written_frames)); + } ++ ++ void drop_audio_if_needed() ++ { ++ // Keep at most 100ms buffered. ++ uint32_t available = samples_to_frames(resampling_in_buffer.length()); ++ uint32_t to_keep = min_buffered_audio_frame(source_rate); ++ if (available > to_keep) { ++ resampling_in_buffer.pop(nullptr, frames_to_samples(available - to_keep)); ++ } ++ } + private: + /** Wrapper for the speex resampling functions to have a typed + * interface. */ +@@ -330,6 +362,7 @@ private: + SpeexResamplerState * speex_resampler; + /** Source rate / target rate. */ + const float resampling_ratio; ++ const uint32_t source_rate; + /** Storage for the input frames, to be resampled. Also contains + * any unresampled frames after resampling. */ + auto_array resampling_in_buffer; +@@ -348,11 +381,13 @@ class delay_line : public processor { + public: + /** Constructor + * @parameter frames the number of frames of delay. +- * @parameter channels the number of channels of this delay line. */ +- delay_line(uint32_t frames, uint32_t channels) ++ * @parameter channels the number of channels of this delay line. ++ * @parameter sample_rate sample-rate of the audio going through this delay line */ ++ delay_line(uint32_t frames, uint32_t channels, uint32_t sample_rate) + : processor(channels) + , length(frames) + , leftover_samples(0) ++ , sample_rate(sample_rate) + { + /* Fill the delay line with some silent frames to add latency. */ + delay_input_buffer.push_silence(frames * channels); +@@ -375,7 +410,7 @@ public: + * @parameter frames_needed the number of frames to be returned. + * @return a buffer containing the delayed frames. The consumer should not + * hold onto the pointer. */ +- T * output(uint32_t frames_needed) ++ T * output(uint32_t frames_needed, size_t * input_frames_used) + { + if (delay_output_buffer.capacity() < frames_to_samples(frames_needed)) { + delay_output_buffer.reserve(frames_to_samples(frames_needed)); +@@ -385,6 +420,7 @@ public: + delay_output_buffer.push(delay_input_buffer.data(), + frames_to_samples(frames_needed)); + delay_input_buffer.pop(nullptr, frames_to_samples(frames_needed)); ++ *input_frames_used = frames_needed; + + return delay_output_buffer.data(); + } +@@ -426,7 +462,7 @@ public: + * @parameter frames_needed the number of frames one want to write into the + * delay_line + * @returns the number of frames one will get. */ +- size_t input_needed_for_output(uint32_t frames_needed) ++ size_t input_needed_for_output(uint32_t frames_needed) const + { + return frames_needed; + } +@@ -441,6 +477,15 @@ public: + { + return length; + } ++ ++ void drop_audio_if_needed() ++ { ++ size_t available = samples_to_frames(delay_input_buffer.length()); ++ uint32_t to_keep = min_buffered_audio_frame(sample_rate); ++ if (available > to_keep) { ++ delay_input_buffer.pop(nullptr, frames_to_samples(available - to_keep)); ++ } ++ } + private: + /** The length, in frames, of this delay line */ + uint32_t length; +@@ -452,6 +497,7 @@ private: + /** The output buffer. This is only ever used if using the ::output with a + * single argument. */ + auto_array delay_output_buffer; ++ uint32_t sample_rate; + }; + + /** This sits behind the C API and is more typed. */ +@@ -480,7 +526,10 @@ cubeb_resampler_create_internal(cubeb_stream * stream, + (output_params && output_params->rate == target_rate)) || + (input_params && !output_params && (input_params->rate == target_rate)) || + (output_params && !input_params && (output_params->rate == target_rate))) { +- return new noop_resampler(stream, callback, user_ptr); ++ return new passthrough_resampler(stream, callback, ++ user_ptr, ++ input_params ? input_params->channels : 0, ++ target_rate); + } + + /* Determine if we need to resampler one or both directions, and create the +@@ -512,13 +561,15 @@ cubeb_resampler_create_internal(cubeb_stream * stream, + * other direction so that the streams are synchronized. */ + if (input_resampler && !output_resampler && input_params && output_params) { + output_delay.reset(new delay_line(input_resampler->latency(), +- output_params->channels)); ++ output_params->channels, ++ output_params->rate)); + if (!output_delay) { + return NULL; + } + } else if (output_resampler && !input_resampler && input_params && output_params) { + input_delay.reset(new delay_line(output_resampler->latency(), +- input_params->channels)); ++ input_params->channels, ++ output_params->rate)); + if (!input_delay) { + return NULL; + } +diff --git a/media/libcubeb/src/cubeb_ringbuffer.h b/media/libcubeb/src/cubeb_ringbuffer.h +new file mode 100644 +index 000000000..b6696e886 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_ringbuffer.h +@@ -0,0 +1,495 @@ ++/* ++ * Copyright © 2016 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#ifndef CUBEB_RING_BUFFER_H ++#define CUBEB_RING_BUFFER_H ++ ++#include "cubeb_utils.h" ++#include ++#include ++#include ++#include ++#include ++ ++/** ++ * Single producer single consumer lock-free and wait-free ring buffer. ++ * ++ * This data structure allows producing data from one thread, and consuming it on ++ * another thread, safely and without explicit synchronization. If used on two ++ * threads, this data structure uses atomics for thread safety. It is possible ++ * to disable the use of atomics at compile time and only use this data ++ * structure on one thread. ++ * ++ * The role for the producer and the consumer must be constant, i.e., the ++ * producer should always be on one thread and the consumer should always be on ++ * another thread. ++ * ++ * Some words about the inner workings of this class: ++ * - Capacity is fixed. Only one allocation is performed, in the constructor. ++ * When reading and writing, the return value of the method allows checking if ++ * the ring buffer is empty or full. ++ * - We always keep the read index at least one element ahead of the write ++ * index, so we can distinguish between an empty and a full ring buffer: an ++ * empty ring buffer is when the write index is at the same position as the ++ * read index. A full buffer is when the write index is exactly one position ++ * before the read index. ++ * - We synchronize updates to the read index after having read the data, and ++ * the write index after having written the data. This means that the each ++ * thread can only touch a portion of the buffer that is not touched by the ++ * other thread. ++ * - Callers are expected to provide buffers. When writing to the queue, ++ * elements are copied into the internal storage from the buffer passed in. ++ * When reading from the queue, the user is expected to provide a buffer. ++ * Because this is a ring buffer, data might not be contiguous in memory, ++ * providing an external buffer to copy into is an easy way to have linear ++ * data for further processing. ++ */ ++template ++class ring_buffer_base ++{ ++public: ++ /** ++ * Constructor for a ring buffer. ++ * ++ * This performs an allocation, but is the only allocation that will happen ++ * for the life time of a `ring_buffer_base`. ++ * ++ * @param capacity The maximum number of element this ring buffer will hold. ++ */ ++ ring_buffer_base(int capacity) ++ /* One more element to distinguish from empty and full buffer. */ ++ : capacity_(capacity + 1) ++ { ++ assert(storage_capacity() < ++ std::numeric_limits::max() / 2 && ++ "buffer too large for the type of index used."); ++ assert(capacity_ > 0); ++ ++ data_.reset(new T[storage_capacity()]); ++ /* If this queue is using atomics, initializing those members as the last ++ * action in the constructor acts as a full barrier, and allow capacity() to ++ * be thread-safe. */ ++ write_index_ = 0; ++ read_index_ = 0; ++ } ++ /** ++ * Push `count` zero or default constructed elements in the array. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @param count The number of elements to enqueue. ++ * @return The number of element enqueued. ++ */ ++ int enqueue_default(int count) ++ { ++ return enqueue(nullptr, count); ++ } ++ /** ++ * @brief Put an element in the queue ++ * ++ * Only safely called on the producer thread. ++ * ++ * @param element The element to put in the queue. ++ * ++ * @return 1 if the element was inserted, 0 otherwise. ++ */ ++ int enqueue(T& element) ++ { ++ return enqueue(&element, 1); ++ } ++ /** ++ * Push `count` elements in the ring buffer. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @param elements a pointer to a buffer containing at least `count` elements. ++ * If `elements` is nullptr, zero or default constructed elements are enqueued. ++ * @param count The number of elements to read from `elements` ++ * @return The number of elements successfully coped from `elements` and inserted ++ * into the ring buffer. ++ */ ++ int enqueue(T * elements, int count) ++ { ++#ifndef NDEBUG ++ assert_correct_thread(producer_id); ++#endif ++ ++ int rd_idx = read_index_.load(std::memory_order::memory_order_relaxed); ++ int wr_idx = write_index_.load(std::memory_order::memory_order_relaxed); ++ ++ if (full_internal(rd_idx, wr_idx)) { ++ return 0; ++ } ++ ++ int to_write = ++ std::min(available_write_internal(rd_idx, wr_idx), count); ++ ++ /* First part, from the write index to the end of the array. */ ++ int first_part = std::min(storage_capacity() - wr_idx, ++ to_write); ++ /* Second part, from the beginning of the array */ ++ int second_part = to_write - first_part; ++ ++ if (elements) { ++ Copy(data_.get() + wr_idx, elements, first_part); ++ Copy(data_.get(), elements + first_part, second_part); ++ } else { ++ ConstructDefault(data_.get() + wr_idx, first_part); ++ ConstructDefault(data_.get(), second_part); ++ } ++ ++ write_index_.store(increment_index(wr_idx, to_write), std::memory_order::memory_order_release); ++ ++ return to_write; ++ } ++ /** ++ * Retrieve at most `count` elements from the ring buffer, and copy them to ++ * `elements`, if non-null. ++ * ++ * Only safely called on the consumer side. ++ * ++ * @param elements A pointer to a buffer with space for at least `count` ++ * elements. If `elements` is `nullptr`, `count` element will be discarded. ++ * @param count The maximum number of elements to dequeue. ++ * @return The number of elements written to `elements`. ++ */ ++ int dequeue(T * elements, int count) ++ { ++#ifndef NDEBUG ++ assert_correct_thread(consumer_id); ++#endif ++ ++ int wr_idx = write_index_.load(std::memory_order::memory_order_acquire); ++ int rd_idx = read_index_.load(std::memory_order::memory_order_relaxed); ++ ++ if (empty_internal(rd_idx, wr_idx)) { ++ return 0; ++ } ++ ++ int to_read = ++ std::min(available_read_internal(rd_idx, wr_idx), count); ++ ++ int first_part = std::min(storage_capacity() - rd_idx, to_read); ++ int second_part = to_read - first_part; ++ ++ if (elements) { ++ Copy(elements, data_.get() + rd_idx, first_part); ++ Copy(elements + first_part, data_.get(), second_part); ++ } ++ ++ read_index_.store(increment_index(rd_idx, to_read), std::memory_order::memory_order_relaxed); ++ ++ return to_read; ++ } ++ /** ++ * Get the number of available element for consuming. ++ * ++ * Only safely called on the consumer thread. ++ * ++ * @return The number of available elements for reading. ++ */ ++ int available_read() const ++ { ++#ifndef NDEBUG ++ assert_correct_thread(consumer_id); ++#endif ++ return available_read_internal(read_index_.load(std::memory_order::memory_order_relaxed), ++ write_index_.load(std::memory_order::memory_order_relaxed)); ++ } ++ /** ++ * Get the number of available elements for consuming. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @return The number of empty slots in the buffer, available for writing. ++ */ ++ int available_write() const ++ { ++#ifndef NDEBUG ++ assert_correct_thread(producer_id); ++#endif ++ return available_write_internal(read_index_.load(std::memory_order::memory_order_relaxed), ++ write_index_.load(std::memory_order::memory_order_relaxed)); ++ } ++ /** ++ * Get the total capacity, for this ring buffer. ++ * ++ * Can be called safely on any thread. ++ * ++ * @return The maximum capacity of this ring buffer. ++ */ ++ int capacity() const ++ { ++ return storage_capacity() - 1; ++ } ++ /** ++ * Reset the consumer and producer thread identifier, in case the thread are ++ * being changed. This has to be externally synchronized. This is no-op when ++ * asserts are disabled. ++ */ ++ void reset_thread_ids() ++ { ++#ifndef NDEBUG ++ consumer_id = producer_id = std::thread::id(); ++#endif ++ } ++private: ++ /** Return true if the ring buffer is empty. ++ * ++ * @param read_index the read index to consider ++ * @param write_index the write index to consider ++ * @return true if the ring buffer is empty, false otherwise. ++ **/ ++ bool empty_internal(int read_index, ++ int write_index) const ++ { ++ return write_index == read_index; ++ } ++ /** Return true if the ring buffer is full. ++ * ++ * This happens if the write index is exactly one element behind the read ++ * index. ++ * ++ * @param read_index the read index to consider ++ * @param write_index the write index to consider ++ * @return true if the ring buffer is full, false otherwise. ++ **/ ++ bool full_internal(int read_index, ++ int write_index) const ++ { ++ return (write_index + 1) % storage_capacity() == read_index; ++ } ++ /** ++ * Return the size of the storage. It is one more than the number of elements ++ * that can be stored in the buffer. ++ * ++ * @return the number of elements that can be stored in the buffer. ++ */ ++ int storage_capacity() const ++ { ++ return capacity_; ++ } ++ /** ++ * Returns the number of elements available for reading. ++ * ++ * @return the number of available elements for reading. ++ */ ++ int ++ available_read_internal(int read_index, ++ int write_index) const ++ { ++ if (write_index >= read_index) { ++ return write_index - read_index; ++ } else { ++ return write_index + storage_capacity() - read_index; ++ } ++ } ++ /** ++ * Returns the number of empty elements, available for writing. ++ * ++ * @return the number of elements that can be written into the array. ++ */ ++ int ++ available_write_internal(int read_index, ++ int write_index) const ++ { ++ /* We substract one element here to always keep at least one sample ++ * free in the buffer, to distinguish between full and empty array. */ ++ int rv = read_index - write_index - 1; ++ if (write_index >= read_index) { ++ rv += storage_capacity(); ++ } ++ return rv; ++ } ++ /** ++ * Increments an index, wrapping it around the storage. ++ * ++ * @param index a reference to the index to increment. ++ * @param increment the number by which `index` is incremented. ++ * @return the new index. ++ */ ++ int ++ increment_index(int index, int increment) const ++ { ++ assert(increment >= 0); ++ return (index + increment) % storage_capacity(); ++ } ++ /** ++ * @brief This allows checking that enqueue (resp. dequeue) are always called ++ * by the right thread. ++ * ++ * @param id the id of the thread that has called the calling method first. ++ */ ++#ifndef NDEBUG ++ static void assert_correct_thread(std::thread::id& id) ++ { ++ if (id == std::thread::id()) { ++ id = std::this_thread::get_id(); ++ return; ++ } ++ assert(id == std::this_thread::get_id()); ++ } ++#endif ++ /** Index at which the oldest element is at, in samples. */ ++ std::atomic read_index_; ++ /** Index at which to write new elements. `write_index` is always at ++ * least one element ahead of `read_index_`. */ ++ std::atomic write_index_; ++ /** Maximum number of elements that can be stored in the ring buffer. */ ++ const int capacity_; ++ /** Data storage */ ++ std::unique_ptr data_; ++#ifndef NDEBUG ++ /** The id of the only thread that is allowed to read from the queue. */ ++ mutable std::thread::id consumer_id; ++ /** The id of the only thread that is allowed to write from the queue. */ ++ mutable std::thread::id producer_id; ++#endif ++}; ++ ++/** ++ * Adapter for `ring_buffer_base` that exposes an interface in frames. ++ */ ++template ++class audio_ring_buffer_base ++{ ++public: ++ /** ++ * @brief Constructor. ++ * ++ * @param channel_count Number of channels. ++ * @param capacity_in_frames The capacity in frames. ++ */ ++ audio_ring_buffer_base(int channel_count, int capacity_in_frames) ++ : channel_count(channel_count) ++ , ring_buffer(frames_to_samples(capacity_in_frames)) ++ { ++ assert(channel_count > 0); ++ } ++ /** ++ * @brief Enqueue silence. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @param frame_count The number of frames of silence to enqueue. ++ * @return The number of frames of silence actually written to the queue. ++ */ ++ int enqueue_default(int frame_count) ++ { ++ return samples_to_frames(ring_buffer.enqueue(nullptr, frames_to_samples(frame_count))); ++ } ++ /** ++ * @brief Enqueue `frames_count` frames of audio. ++ * ++ * Only safely called from the producer thread. ++ * ++ * @param [in] frames If non-null, the frames to enqueue. ++ * Otherwise, silent frames are enqueued. ++ * @param frame_count The number of frames to enqueue. ++ * ++ * @return The number of frames enqueued ++ */ ++ ++ int enqueue(T * frames, int frame_count) ++ { ++ return samples_to_frames(ring_buffer.enqueue(frames, frames_to_samples(frame_count))); ++ } ++ ++ /** ++ * @brief Removes `frame_count` frames from the buffer, and ++ * write them to `frames` if it is non-null. ++ * ++ * Only safely called on the consumer thread. ++ * ++ * @param frames If non-null, the frames are copied to `frames`. ++ * Otherwise, they are dropped. ++ * @param frame_count The number of frames to remove. ++ * ++ * @return The number of frames actually dequeud. ++ */ ++ int dequeue(T * frames, int frame_count) ++ { ++ return samples_to_frames(ring_buffer.dequeue(frames, frames_to_samples(frame_count))); ++ } ++ /** ++ * Get the number of available frames of audio for consuming. ++ * ++ * Only safely called on the consumer thread. ++ * ++ * @return The number of available frames of audio for reading. ++ */ ++ int available_read() const ++ { ++ return samples_to_frames(ring_buffer.available_read()); ++ } ++ /** ++ * Get the number of available frames of audio for consuming. ++ * ++ * Only safely called on the producer thread. ++ * ++ * @return The number of empty slots in the buffer, available for writing. ++ */ ++ int available_write() const ++ { ++ return samples_to_frames(ring_buffer.available_write()); ++ } ++ /** ++ * Get the total capacity, for this ring buffer. ++ * ++ * Can be called safely on any thread. ++ * ++ * @return The maximum capacity of this ring buffer. ++ */ ++ int capacity() const ++ { ++ return samples_to_frames(ring_buffer.capacity()); ++ } ++private: ++ /** ++ * @brief Frames to samples conversion. ++ * ++ * @param frames The number of frames. ++ * ++ * @return A number of samples. ++ */ ++ int frames_to_samples(int frames) const ++ { ++ return frames * channel_count; ++ } ++ /** ++ * @brief Samples to frames conversion. ++ * ++ * @param samples The number of samples. ++ * ++ * @return A number of frames. ++ */ ++ int samples_to_frames(int samples) const ++ { ++ return samples / channel_count; ++ } ++ /** Number of channels of audio that will stream through this ring buffer. */ ++ int channel_count; ++ /** The underlying ring buffer that is used to store the data. */ ++ ring_buffer_base ring_buffer; ++}; ++ ++/** ++ * Lock-free instantiation of the `ring_buffer_base` type. This is safe to use ++ * from two threads, one producer, one consumer (that never change role), ++ * without explicit synchronization. ++ */ ++template ++using lock_free_queue = ring_buffer_base; ++/** ++ * Lock-free instantiation of the `audio_ring_buffer` type. This is safe to use ++ * from two threads, one producer, one consumer (that never change role), ++ * without explicit synchronization. ++ */ ++template ++using lock_free_audio_ring_buffer = audio_ring_buffer_base; ++ ++#endif // CUBEB_RING_BUFFER_H +diff --git a/media/libcubeb/src/cubeb_sndio.c b/media/libcubeb/src/cubeb_sndio.c +index c7ac18446..4a05bd845 100644 +--- a/media/libcubeb/src/cubeb_sndio.c ++++ b/media/libcubeb/src/cubeb_sndio.c +@@ -4,6 +4,7 @@ + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ ++#include + #include + #include + #include +@@ -11,6 +12,7 @@ + #include + #include + #include ++#include + #include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" +@@ -21,39 +23,87 @@ + #define DPR(...) do {} while(0) + #endif + ++#ifdef DISABLE_LIBSNDIO_DLOPEN ++#define WRAP(x) x ++#else ++#define WRAP(x) cubeb_##x ++#define LIBSNDIO_API_VISIT(X) \ ++ X(sio_close) \ ++ X(sio_eof) \ ++ X(sio_getpar) \ ++ X(sio_initpar) \ ++ X(sio_onmove) \ ++ X(sio_open) \ ++ X(sio_pollfd) \ ++ X(sio_read) \ ++ X(sio_revents) \ ++ X(sio_setpar) \ ++ X(sio_start) \ ++ X(sio_stop) \ ++ X(sio_write) \ ++ ++#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x; ++LIBSNDIO_API_VISIT(MAKE_TYPEDEF); ++#undef MAKE_TYPEDEF ++#endif ++ + static struct cubeb_ops const sndio_ops; + + struct cubeb { + struct cubeb_ops const * ops; ++ void * libsndio; + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; +- pthread_t th; /* to run real-time audio i/o */ +- pthread_mutex_t mtx; /* protects hdl and pos */ +- struct sio_hdl *hdl; /* link us to sndio */ +- int active; /* cubec_start() called */ +- int conv; /* need float->s16 conversion */ +- unsigned char *buf; /* data is prepared here */ +- unsigned int nfr; /* number of frames in buf */ +- unsigned int bpf; /* bytes per frame */ +- unsigned int pchan; /* number of play channels */ +- uint64_t rdpos; /* frame number Joe hears right now */ +- uint64_t wrpos; /* number of written frames */ ++ void * arg; /* user arg to {data,state}_cb */ ++ /**/ ++ pthread_t th; /* to run real-time audio i/o */ ++ pthread_mutex_t mtx; /* protects hdl and pos */ ++ struct sio_hdl *hdl; /* link us to sndio */ ++ int mode; /* bitmap of SIO_{PLAY,REC} */ ++ int active; /* cubec_start() called */ ++ int conv; /* need float->s16 conversion */ ++ unsigned char *rbuf; /* rec data consumed from here */ ++ unsigned char *pbuf; /* play data is prepared here */ ++ unsigned int nfr; /* number of frames in ibuf and obuf */ ++ unsigned int rbpf; /* rec bytes per frame */ ++ unsigned int pbpf; /* play bytes per frame */ ++ unsigned int rchan; /* number of rec channels */ ++ unsigned int pchan; /* number of play channels */ ++ unsigned int nblks; /* number of blocks in the buffer */ ++ uint64_t hwpos; /* frame number Joe hears right now */ ++ uint64_t swpos; /* number of frames produced/consumed */ + cubeb_data_callback data_cb; /* cb to preapare data */ + cubeb_state_callback state_cb; /* cb to notify about state changes */ +- void *arg; /* user arg to {data,state}_cb */ ++ float volume; /* current volume */ + }; + + static void +-float_to_s16(void *ptr, long nsamp) ++s16_setvol(void *ptr, long nsamp, float volume) ++{ ++ int16_t *dst = ptr; ++ int32_t mult = volume * 32768; ++ int32_t s; ++ ++ while (nsamp-- > 0) { ++ s = *dst; ++ s = (s * mult) >> 15; ++ *(dst++) = s; ++ } ++} ++ ++static void ++float_to_s16(void *ptr, long nsamp, float volume) + { + int16_t *dst = ptr; + float *src = ptr; ++ float mult = volume * 32768; + int s; + + while (nsamp-- > 0) { +- s = lrintf(*(src++) * 32768); ++ s = lrintf(*(src++) * mult); + if (s < -32768) + s = -32768; + else if (s > 32767) +@@ -62,12 +112,24 @@ float_to_s16(void *ptr, long nsamp) + } + } + ++static void ++s16_to_float(void *ptr, long nsamp) ++{ ++ int16_t *src = ptr; ++ float *dst = ptr; ++ ++ src += nsamp; ++ dst += nsamp; ++ while (nsamp-- > 0) ++ *(--dst) = (1. / 32768) * *(--src); ++} ++ + static void + sndio_onmove(void *arg, int delta) + { + cubeb_stream *s = (cubeb_stream *)arg; + +- s->rdpos += delta * s->bpf; ++ s->hwpos += delta; + } + + static void * +@@ -76,48 +138,99 @@ sndio_mainloop(void *arg) + #define MAXFDS 8 + struct pollfd pfds[MAXFDS]; + cubeb_stream *s = arg; +- int n, nfds, revents, state = CUBEB_STATE_STARTED; +- size_t start = 0, end = 0; ++ int n, eof = 0, prime, nfds, events, revents, state = CUBEB_STATE_STARTED; ++ size_t pstart = 0, pend = 0, rstart = 0, rend = 0; + long nfr; + + DPR("sndio_mainloop()\n"); + s->state_cb(s, s->arg, CUBEB_STATE_STARTED); + pthread_mutex_lock(&s->mtx); +- if (!sio_start(s->hdl)) { ++ if (!WRAP(sio_start)(s->hdl)) { + pthread_mutex_unlock(&s->mtx); + return NULL; + } + DPR("sndio_mainloop(), started\n"); + +- start = end = s->nfr; ++ if (s->mode & SIO_PLAY) { ++ pstart = pend = s->nfr * s->pbpf; ++ prime = s->nblks; ++ if (s->mode & SIO_REC) { ++ memset(s->rbuf, 0, s->nfr * s->rbpf); ++ rstart = rend = s->nfr * s->rbpf; ++ } ++ } else { ++ prime = 0; ++ rstart = 0; ++ rend = s->nfr * s->rbpf; ++ } ++ + for (;;) { + if (!s->active) { + DPR("sndio_mainloop() stopped\n"); + state = CUBEB_STATE_STOPPED; + break; + } +- if (start == end) { +- if (end < s->nfr) { ++ ++ /* do we have a complete block? */ ++ if ((!(s->mode & SIO_PLAY) || pstart == pend) && ++ (!(s->mode & SIO_REC) || rstart == rend)) { ++ ++ if (eof) { + DPR("sndio_mainloop() drained\n"); + state = CUBEB_STATE_DRAINED; + break; + } ++ ++ if ((s->mode & SIO_REC) && s->conv) ++ s16_to_float(s->rbuf, s->nfr * s->rchan); ++ ++ /* invoke call-back, it returns less that s->nfr if done */ + pthread_mutex_unlock(&s->mtx); +- nfr = s->data_cb(s, s->arg, NULL, s->buf, s->nfr); ++ nfr = s->data_cb(s, s->arg, s->rbuf, s->pbuf, s->nfr); + pthread_mutex_lock(&s->mtx); + if (nfr < 0) { + DPR("sndio_mainloop() cb err\n"); + state = CUBEB_STATE_ERROR; + break; + } +- if (s->conv) +- float_to_s16(s->buf, nfr * s->pchan); +- start = 0; +- end = nfr * s->bpf; ++ s->swpos += nfr; ++ ++ /* was this last call-back invocation (aka end-of-stream) ? */ ++ if (nfr < s->nfr) { ++ ++ if (!(s->mode & SIO_PLAY) || nfr == 0) { ++ state = CUBEB_STATE_DRAINED; ++ break; ++ } ++ ++ /* need to write (aka drain) the partial play block we got */ ++ pend = nfr * s->pbpf; ++ eof = 1; ++ } ++ ++ if (prime > 0) ++ prime--; ++ ++ if (s->mode & SIO_PLAY) { ++ if (s->conv) ++ float_to_s16(s->pbuf, nfr * s->pchan, s->volume); ++ else ++ s16_setvol(s->pbuf, nfr * s->pchan, s->volume); ++ } ++ ++ if (s->mode & SIO_REC) ++ rstart = 0; ++ if (s->mode & SIO_PLAY) ++ pstart = 0; + } +- if (end == 0) +- continue; +- nfds = sio_pollfd(s->hdl, pfds, POLLOUT); ++ ++ events = 0; ++ if ((s->mode & SIO_REC) && rstart < rend && prime == 0) ++ events |= POLLIN; ++ if ((s->mode & SIO_PLAY) && pstart < pend) ++ events |= POLLOUT; ++ nfds = WRAP(sio_pollfd)(s->hdl, pfds, events); ++ + if (nfds > 0) { + pthread_mutex_unlock(&s->mtx); + n = poll(pfds, nfds, -1); +@@ -125,22 +238,40 @@ sndio_mainloop(void *arg) + if (n < 0) + continue; + } +- revents = sio_revents(s->hdl, pfds); +- if (revents & POLLHUP) ++ ++ revents = WRAP(sio_revents)(s->hdl, pfds); ++ ++ if (revents & POLLHUP) { ++ state = CUBEB_STATE_ERROR; + break; ++ } ++ + if (revents & POLLOUT) { +- n = sio_write(s->hdl, s->buf + start, end - start); +- if (n == 0) { ++ n = WRAP(sio_write)(s->hdl, s->pbuf + pstart, pend - pstart); ++ if (n == 0 && WRAP(sio_eof)(s->hdl)) { + DPR("sndio_mainloop() werr\n"); + state = CUBEB_STATE_ERROR; + break; + } +- s->wrpos += n; +- start += n; ++ pstart += n; + } ++ ++ if (revents & POLLIN) { ++ n = WRAP(sio_read)(s->hdl, s->rbuf + rstart, rend - rstart); ++ if (n == 0 && WRAP(sio_eof)(s->hdl)) { ++ DPR("sndio_mainloop() rerr\n"); ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ rstart += n; ++ } ++ ++ /* skip rec block, if not recording (yet) */ ++ if (prime > 0 && (s->mode & SIO_REC)) ++ rstart = rend; + } +- sio_stop(s->hdl); +- s->rdpos = s->wrpos; ++ WRAP(sio_stop)(s->hdl); ++ s->hwpos = s->swpos; + pthread_mutex_unlock(&s->mtx); + s->state_cb(s, s->arg, state); + return NULL; +@@ -149,8 +280,34 @@ sndio_mainloop(void *arg) + /*static*/ int + sndio_init(cubeb **context, char const *context_name) + { ++ void * libsndio = NULL; ++ ++#ifndef DISABLE_LIBSNDIO_DLOPEN ++ libsndio = dlopen("libsndio.so.7.0", RTLD_LAZY); ++ if (!libsndio) { ++ libsndio = dlopen("libsndio.so", RTLD_LAZY); ++ if (!libsndio) { ++ DPR("sndio_init(%s) failed dlopen(libsndio.so)\n", context_name); ++ return CUBEB_ERROR; ++ } ++ } ++ ++#define LOAD(x) { \ ++ cubeb_##x = dlsym(libsndio, #x); \ ++ if (!cubeb_##x) { \ ++ DPR("sndio_init(%s) failed dlsym(%s)\n", context_name, #x); \ ++ dlclose(libsndio); \ ++ return CUBEB_ERROR; \ ++ } \ ++ } ++ ++ LIBSNDIO_API_VISIT(LOAD); ++#undef LOAD ++#endif ++ + DPR("sndio_init(%s)\n", context_name); + *context = malloc(sizeof(*context)); ++ (*context)->libsndio = libsndio; + (*context)->ops = &sndio_ops; + (void)context_name; + return CUBEB_OK; +@@ -166,6 +323,8 @@ static void + sndio_destroy(cubeb *context) + { + DPR("sndio_destroy()\n"); ++ if (context->libsndio) ++ dlclose(context->libsndio); + free(context); + } + +@@ -184,29 +343,49 @@ sndio_stream_init(cubeb * context, + { + cubeb_stream *s; + struct sio_par wpar, rpar; +- DPR("sndio_stream_init(%s)\n", stream_name); +- size_t size; ++ cubeb_sample_format format; ++ int rate; ++ size_t bps; + +- assert(!input_stream_params && "not supported."); +- if (input_device || output_device) { +- /* Device selection not yet implemented. */ +- return CUBEB_ERROR_DEVICE_UNAVAILABLE; +- } ++ DPR("sndio_stream_init(%s)\n", stream_name); + + s = malloc(sizeof(cubeb_stream)); + if (s == NULL) + return CUBEB_ERROR; ++ memset(s, 0, sizeof(cubeb_stream)); ++ s->mode = 0; ++ if (input_stream_params) { ++ if (input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ DPR("sndio_stream_init(), loopback not supported\n"); ++ goto err; ++ } ++ s->mode |= SIO_REC; ++ format = input_stream_params->format; ++ rate = input_stream_params->rate; ++ } ++ if (output_stream_params) { ++ if (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ DPR("sndio_stream_init(), loopback not supported\n"); ++ goto err; ++ } ++ s->mode |= SIO_PLAY; ++ format = output_stream_params->format; ++ rate = output_stream_params->rate; ++ } ++ if (s->mode == 0) { ++ DPR("sndio_stream_init(), neither playing nor recording\n"); ++ goto err; ++ } + s->context = context; +- s->hdl = sio_open(NULL, SIO_PLAY, 1); ++ s->hdl = WRAP(sio_open)(NULL, s->mode, 1); + if (s->hdl == NULL) { +- free(s); + DPR("sndio_stream_init(), sio_open() failed\n"); +- return CUBEB_ERROR; ++ goto err; + } +- sio_initpar(&wpar); ++ WRAP(sio_initpar)(&wpar); + wpar.sig = 1; + wpar.bits = 16; +- switch (output_stream_params->format) { ++ switch (format) { + case CUBEB_SAMPLE_S16LE: + wpar.le = 1; + break; +@@ -218,53 +397,70 @@ sndio_stream_init(cubeb * context, + break; + default: + DPR("sndio_stream_init() unsupported format\n"); +- return CUBEB_ERROR_INVALID_FORMAT; ++ goto err; + } +- wpar.rate = output_stream_params->rate; +- wpar.pchan = output_stream_params->channels; ++ wpar.rate = rate; ++ if (s->mode & SIO_REC) ++ wpar.rchan = input_stream_params->channels; ++ if (s->mode & SIO_PLAY) ++ wpar.pchan = output_stream_params->channels; + wpar.appbufsz = latency_frames; +- if (!sio_setpar(s->hdl, &wpar) || !sio_getpar(s->hdl, &rpar)) { +- sio_close(s->hdl); +- free(s); ++ if (!WRAP(sio_setpar)(s->hdl, &wpar) || !WRAP(sio_getpar)(s->hdl, &rpar)) { + DPR("sndio_stream_init(), sio_setpar() failed\n"); +- return CUBEB_ERROR; ++ goto err; + } + if (rpar.bits != wpar.bits || rpar.le != wpar.le || + rpar.sig != wpar.sig || rpar.rate != wpar.rate || +- rpar.pchan != wpar.pchan) { +- sio_close(s->hdl); +- free(s); ++ ((s->mode & SIO_REC) && rpar.rchan != wpar.rchan) || ++ ((s->mode & SIO_PLAY) && rpar.pchan != wpar.pchan)) { + DPR("sndio_stream_init() unsupported params\n"); +- return CUBEB_ERROR_INVALID_FORMAT; ++ goto err; + } +- sio_onmove(s->hdl, sndio_onmove, s); ++ WRAP(sio_onmove)(s->hdl, sndio_onmove, s); + s->active = 0; + s->nfr = rpar.round; +- s->bpf = rpar.bps * rpar.pchan; ++ s->rbpf = rpar.bps * rpar.rchan; ++ s->pbpf = rpar.bps * rpar.pchan; ++ s->rchan = rpar.rchan; + s->pchan = rpar.pchan; ++ s->nblks = rpar.bufsz / rpar.round; + s->data_cb = data_callback; + s->state_cb = state_callback; + s->arg = user_ptr; + s->mtx = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER; +- s->rdpos = s->wrpos = 0; +- if (output_stream_params->format == CUBEB_SAMPLE_FLOAT32LE) { ++ s->hwpos = s->swpos = 0; ++ if (format == CUBEB_SAMPLE_FLOAT32LE) { + s->conv = 1; +- size = rpar.round * rpar.pchan * sizeof(float); ++ bps = sizeof(float); + } else { + s->conv = 0; +- size = rpar.round * rpar.pchan * rpar.bps; ++ bps = rpar.bps; + } +- s->buf = malloc(size); +- if (s->buf == NULL) { +- sio_close(s->hdl); +- free(s); +- return CUBEB_ERROR; ++ if (s->mode & SIO_PLAY) { ++ s->pbuf = malloc(bps * rpar.pchan * rpar.round); ++ if (s->pbuf == NULL) ++ goto err; + } ++ if (s->mode & SIO_REC) { ++ s->rbuf = malloc(bps * rpar.rchan * rpar.round); ++ if (s->rbuf == NULL) ++ goto err; ++ } ++ s->volume = 1.; + *stream = s; + DPR("sndio_stream_init() end, ok\n"); + (void)context; + (void)stream_name; + return CUBEB_OK; ++err: ++ if (s->hdl) ++ WRAP(sio_close)(s->hdl); ++ if (s->pbuf) ++ free(s->pbuf); ++ if (s->rbuf) ++ free(s->pbuf); ++ free(s); ++ return CUBEB_ERROR; + } + + static int +@@ -280,16 +476,21 @@ sndio_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + static int + sndio_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) + { +- // XXX Not yet implemented. +- *rate = 44100; +- ++ /* ++ * We've no device-independent prefered rate; any rate will work if ++ * sndiod is running. If it isn't, 48kHz is what is most likely to ++ * work as most (but not all) devices support it. ++ */ ++ *rate = 48000; + return CUBEB_OK; + } + + static int + sndio_get_min_latency(cubeb * ctx, cubeb_stream_params params, uint32_t * latency_frames) + { +- // XXX Not yet implemented. ++ /* ++ * We've no device-independent minimum latency. ++ */ + *latency_frames = 2048; + + return CUBEB_OK; +@@ -299,7 +500,11 @@ static void + sndio_stream_destroy(cubeb_stream *s) + { + DPR("sndio_stream_destroy()\n"); +- sio_close(s->hdl); ++ WRAP(sio_close)(s->hdl); ++ if (s->mode & SIO_PLAY) ++ free(s->pbuf); ++ if (s->mode & SIO_REC) ++ free(s->rbuf); + free(s); + } + +@@ -335,8 +540,8 @@ static int + sndio_stream_get_position(cubeb_stream *s, uint64_t *p) + { + pthread_mutex_lock(&s->mtx); +- DPR("sndio_stream_get_position() %lld\n", s->rdpos); +- *p = s->rdpos / s->bpf; ++ DPR("sndio_stream_get_position() %" PRId64 "\n", s->hwpos); ++ *p = s->hwpos; + pthread_mutex_unlock(&s->mtx); + return CUBEB_OK; + } +@@ -346,7 +551,11 @@ sndio_stream_set_volume(cubeb_stream *s, float volume) + { + DPR("sndio_stream_set_volume(%f)\n", volume); + pthread_mutex_lock(&s->mtx); +- sio_setvol(s->hdl, SIO_MAXVOL * volume); ++ if (volume < 0.) ++ volume = 0.; ++ else if (volume > 1.0) ++ volume = 1.; ++ s->volume = volume; + pthread_mutex_unlock(&s->mtx); + return CUBEB_OK; + } +@@ -356,7 +565,47 @@ sndio_stream_get_latency(cubeb_stream * stm, uint32_t * latency) + { + // http://www.openbsd.org/cgi-bin/man.cgi?query=sio_open + // in the "Measuring the latency and buffers usage" paragraph. +- *latency = (stm->wrpos - stm->rdpos) / stm->bpf; ++ *latency = stm->swpos - stm->hwpos; ++ return CUBEB_OK; ++} ++ ++static int ++sndio_enumerate_devices(cubeb *context, cubeb_device_type type, ++ cubeb_device_collection *collection) ++{ ++ static char dev[] = SIO_DEVANY; ++ cubeb_device_info *device; ++ ++ device = malloc(sizeof(cubeb_device_info)); ++ if (device == NULL) ++ return CUBEB_ERROR; ++ ++ device->devid = dev; /* passed to stream_init() */ ++ device->device_id = dev; /* printable in UI */ ++ device->friendly_name = dev; /* same, but friendly */ ++ device->group_id = dev; /* actual device if full-duplex */ ++ device->vendor_name = NULL; /* may be NULL */ ++ device->type = type; /* Input/Output */ ++ device->state = CUBEB_DEVICE_STATE_ENABLED; ++ device->preferred = CUBEB_DEVICE_PREF_ALL; ++ device->format = CUBEB_DEVICE_FMT_S16NE; ++ device->default_format = CUBEB_DEVICE_FMT_S16NE; ++ device->max_channels = 16; ++ device->default_rate = 48000; ++ device->min_rate = 4000; ++ device->max_rate = 192000; ++ device->latency_lo = 480; ++ device->latency_hi = 9600; ++ collection->device = device; ++ collection->count = 1; ++ return CUBEB_OK; ++} ++ ++static int ++sndio_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection) ++{ ++ free(collection->device); + return CUBEB_OK; + } + +@@ -366,16 +615,17 @@ static struct cubeb_ops const sndio_ops = { + .get_max_channel_count = sndio_get_max_channel_count, + .get_min_latency = sndio_get_min_latency, + .get_preferred_sample_rate = sndio_get_preferred_sample_rate, +- .enumerate_devices = NULL, ++ .enumerate_devices = sndio_enumerate_devices, ++ .device_collection_destroy = sndio_device_collection_destroy, + .destroy = sndio_destroy, + .stream_init = sndio_stream_init, + .stream_destroy = sndio_stream_destroy, + .stream_start = sndio_stream_start, + .stream_stop = sndio_stream_stop, ++ .stream_reset_default_device = NULL, + .stream_get_position = sndio_stream_get_position, + .stream_get_latency = sndio_stream_get_latency, + .stream_set_volume = sndio_stream_set_volume, +- .stream_set_panning = NULL, + .stream_get_current_device = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, +diff --git a/media/libcubeb/src/cubeb_strings.c b/media/libcubeb/src/cubeb_strings.c +new file mode 100644 +index 000000000..79d7d21b3 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_strings.c +@@ -0,0 +1,155 @@ ++/* ++ * Copyright © 2011 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#include "cubeb_strings.h" ++ ++#include ++#include ++#include ++ ++#define CUBEB_STRINGS_INLINE_COUNT 4 ++ ++struct cubeb_strings { ++ uint32_t size; ++ uint32_t count; ++ char ** data; ++ char * small_store[CUBEB_STRINGS_INLINE_COUNT]; ++}; ++ ++int ++cubeb_strings_init(cubeb_strings ** strings) ++{ ++ cubeb_strings* strs = NULL; ++ ++ if (!strings) { ++ return CUBEB_ERROR; ++ } ++ ++ strs = calloc(1, sizeof(cubeb_strings)); ++ assert(strs); ++ ++ if (!strs) { ++ return CUBEB_ERROR; ++ } ++ ++ strs->size = sizeof(strs->small_store) / sizeof(strs->small_store[0]); ++ strs->count = 0; ++ strs->data = strs->small_store; ++ ++ *strings = strs; ++ ++ return CUBEB_OK; ++} ++ ++void ++cubeb_strings_destroy(cubeb_strings * strings) ++{ ++ char ** sp = NULL; ++ char ** se = NULL; ++ ++ if (!strings) { ++ return; ++ } ++ ++ sp = strings->data; ++ se = sp + strings->count; ++ ++ for ( ; sp != se; sp++) { ++ if (*sp) { ++ free(*sp); ++ } ++ } ++ ++ if (strings->data != strings->small_store) { ++ free(strings->data); ++ } ++ ++ free(strings); ++} ++ ++/** Look for string in string storage. ++ @param strings Opaque pointer to interned string storage. ++ @param s String to look up. ++ @retval Read-only string or NULL if not found. */ ++static char const * ++cubeb_strings_lookup(cubeb_strings * strings, char const * s) ++{ ++ char ** sp = NULL; ++ char ** se = NULL; ++ ++ if (!strings || !s) { ++ return NULL; ++ } ++ ++ sp = strings->data; ++ se = sp + strings->count; ++ ++ for ( ; sp != se; sp++) { ++ if (*sp && strcmp(*sp, s) == 0) { ++ return *sp; ++ } ++ } ++ ++ return NULL; ++} ++ ++static char const * ++cubeb_strings_push(cubeb_strings * strings, char const * s) ++{ ++ char * is = NULL; ++ ++ if (strings->count == strings->size) { ++ char ** new_data; ++ uint32_t value_size = sizeof(char const *); ++ uint32_t new_size = strings->size * 2; ++ if (!new_size || value_size > (uint32_t)-1 / new_size) { ++ // overflow ++ return NULL; ++ } ++ ++ if (strings->small_store == strings->data) { ++ // First time heap allocation. ++ new_data = malloc(new_size * value_size); ++ if (new_data) { ++ memcpy(new_data, strings->small_store, sizeof(strings->small_store)); ++ } ++ } else { ++ new_data = realloc(strings->data, new_size * value_size); ++ } ++ ++ if (!new_data) { ++ // out of memory ++ return NULL; ++ } ++ ++ strings->size = new_size; ++ strings->data = new_data; ++ } ++ ++ is = strdup(s); ++ strings->data[strings->count++] = is; ++ ++ return is; ++} ++ ++char const * ++cubeb_strings_intern(cubeb_strings * strings, char const * s) ++{ ++ char const * is = NULL; ++ ++ if (!strings || !s) { ++ return NULL; ++ } ++ ++ is = cubeb_strings_lookup(strings, s); ++ if (is) { ++ return is; ++ } ++ ++ return cubeb_strings_push(strings, s); ++} ++ +diff --git a/media/libcubeb/src/cubeb_strings.h b/media/libcubeb/src/cubeb_strings.h +new file mode 100644 +index 000000000..a918a01c5 +--- /dev/null ++++ b/media/libcubeb/src/cubeb_strings.h +@@ -0,0 +1,44 @@ ++/* ++ * Copyright © 2011 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#ifndef CUBEB_STRINGS_H ++#define CUBEB_STRINGS_H ++ ++#include "cubeb/cubeb.h" ++ ++#if defined(__cplusplus) ++extern "C" { ++#endif ++ ++/** Opaque handle referencing interned string storage. */ ++typedef struct cubeb_strings cubeb_strings; ++ ++/** Initialize an interned string structure. ++ @param strings An out param where an opaque pointer to the ++ interned string storage will be returned. ++ @retval CUBEB_OK in case of success. ++ @retval CUBEB_ERROR in case of error. */ ++CUBEB_EXPORT int cubeb_strings_init(cubeb_strings ** strings); ++ ++/** Destroy an interned string structure freeing all associated memory. ++ @param strings An opaque pointer to the interned string storage to ++ destroy. */ ++CUBEB_EXPORT void cubeb_strings_destroy(cubeb_strings * strings); ++ ++/** Add string to internal storage. ++ @param strings Opaque pointer to interned string storage. ++ @param s String to add to storage. ++ @retval CUBEB_OK ++ @retval CUBEB_ERROR ++ */ ++CUBEB_EXPORT char const * cubeb_strings_intern(cubeb_strings * strings, char const * s); ++ ++#if defined(__cplusplus) ++} ++#endif ++ ++#endif // !CUBEB_STRINGS_H +diff --git a/media/libcubeb/src/cubeb_sun.c b/media/libcubeb/src/cubeb_sun.c +index b768bca56..64ab0b5b1 100644 +--- a/media/libcubeb/src/cubeb_sun.c ++++ b/media/libcubeb/src/cubeb_sun.c +@@ -1,504 +1,752 @@ + /* +- * Copyright (c) 2013, 2017 Ginn Chen ++ * Copyright © 2019 Nia Alarie + * + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ +-#include ++#include ++#include ++#include ++#include + #include + #include + #include +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" + +-/* Macros copied from audio_oss.h */ +-/* +- * CDDL HEADER START +- * +- * The contents of this file are subject to the terms of the +- * Common Development and Distribution License (the "License"). +- * You may not use this file except in compliance with the License. +- * +- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +- * or http://www.opensolaris.org/os/licensing. +- * See the License for the specific language governing permissions +- * and limitations under the License. +- * +- * When distributing Covered Code, include this CDDL HEADER in each +- * file and include the License file at usr/src/OPENSOLARIS.LICENSE. +- * If applicable, add the following below this CDDL HEADER, with the +- * fields enclosed by brackets "[]" replaced with your own identifying +- * information: Portions Copyright [yyyy] [name of copyright owner] +- * +- * CDDL HEADER END +- */ ++#define BYTES_TO_FRAMES(bytes, channels) \ ++ (bytes / (channels * sizeof(int16_t))) ++ ++#define FRAMES_TO_BYTES(frames, channels) \ ++ (frames * (channels * sizeof(int16_t))) ++ ++/* Default to 4 + 1 for the default device. */ ++#ifndef SUN_DEVICE_COUNT ++#define SUN_DEVICE_COUNT (5) ++#endif ++ ++/* Supported well by most hardware. */ ++#ifndef SUN_PREFER_RATE ++#define SUN_PREFER_RATE (48000) ++#endif ++ ++/* Standard acceptable minimum. */ ++#ifndef SUN_LATENCY_MS ++#define SUN_LATENCY_MS (40) ++#endif ++ ++#ifndef SUN_DEFAULT_DEVICE ++#define SUN_DEFAULT_DEVICE "/dev/audio" ++#endif ++ ++#ifndef SUN_POLL_TIMEOUT ++#define SUN_POLL_TIMEOUT (1000) ++#endif ++ ++#ifndef SUN_BUFFER_FRAMES ++#define SUN_BUFFER_FRAMES (32) ++#endif ++ + /* +- * Copyright (C) 4Front Technologies 1996-2008. +- * +- * Copyright 2009 Sun Microsystems, Inc. All rights reserved. +- * Use is subject to license terms. ++ * Supported on NetBSD regardless of hardware. + */ +-#define OSSIOCPARM_MASK 0x1fff /* parameters must be < 8192 bytes */ +-#define OSSIOC_VOID 0x00000000 /* no parameters */ +-#define OSSIOC_OUT 0x20000000 /* copy out parameters */ +-#define OSSIOC_IN 0x40000000 /* copy in parameters */ +-#define OSSIOC_INOUT (OSSIOC_IN|OSSIOC_OUT) +-#define OSSIOC_SZ(t) ((sizeof (t) & OSSIOCPARM_MASK) << 16) +-#define __OSSIO(x, y) ((int)(OSSIOC_VOID|(x<<8)|y)) +-#define __OSSIOR(x, y, t) ((int)(OSSIOC_OUT|OSSIOC_SZ(t)|(x<<8)|y)) +-#define __OSSIOWR(x, y, t) ((int)(OSSIOC_INOUT|OSSIOC_SZ(t)|(x<<8)|y)) +-#define SNDCTL_DSP_SPEED __OSSIOWR('P', 2, int) +-#define SNDCTL_DSP_CHANNELS __OSSIOWR('P', 6, int) +-#define SNDCTL_DSP_SETFMT __OSSIOWR('P', 5, int) /* Selects ONE fmt */ +-#define SNDCTL_DSP_GETODELAY __OSSIOR('P', 23, int) +-#define SNDCTL_DSP_HALT_OUTPUT __OSSIO('P', 34) +-#define AFMT_S16_LE 0x00000010 +-#define AFMT_S16_BE 0x00000020 +- +-#if defined(WORDS_BIGENDIAN) || defined(__BIG_ENDIAN__) +-#define AFMT_S16_NE AFMT_S16_BE +-#else +-#define AFMT_S16_NE AFMT_S16_LE +-#endif + +-#define DEFAULT_AUDIO_DEVICE "/dev/audio" +-#define DEFAULT_DSP_DEVICE "/dev/dsp" ++#ifndef SUN_MAX_CHANNELS ++# ifdef __NetBSD__ ++# define SUN_MAX_CHANNELS (12) ++# else ++# define SUN_MAX_CHANNELS (2) ++# endif ++#endif + +-#define BUF_SIZE_MS 10 ++#ifndef SUN_MIN_RATE ++#define SUN_MIN_RATE (1000) ++#endif + +-#if defined(CUBEB_SUNAUDIO_DEBUG) +-#define DPR(...) fprintf(stderr, __VA_ARGS__); +-#else +-#define DPR(...) do {} while(0) ++#ifndef SUN_MAX_RATE ++#define SUN_MAX_RATE (192000) + #endif + +-static struct cubeb_ops const sunaudio_ops; ++static struct cubeb_ops const sun_ops; + + struct cubeb { + struct cubeb_ops const * ops; + }; + + struct cubeb_stream { +- cubeb * context; +- pthread_t th; /* to run real-time audio i/o */ +- pthread_mutex_t mutex; /* protects fd and frm_played */ +- int fd; /* link us to sunaudio */ +- int active; /* cubec_start() called */ +- int conv; /* need float->s16 conversion */ +- int using_oss; +- unsigned char *buf; /* data is prepared here */ +- unsigned int rate; +- unsigned int n_channles; +- unsigned int bytes_per_ch; +- unsigned int n_frm; +- unsigned int buffer_size; +- int64_t frm_played; +- cubeb_data_callback data_cb; /* cb to preapare data */ +- cubeb_state_callback state_cb; /* cb to notify about state changes */ +- void *arg; /* user arg to {data,state}_cb */ ++ struct cubeb * context; ++ void * user_ptr; ++ pthread_t thread; ++ pthread_mutex_t mutex; /* protects running, volume, frames_written */ ++ int floating; ++ int running; ++ int play_fd; ++ int record_fd; ++ float volume; ++ struct audio_info p_info; /* info for the play fd */ ++ struct audio_info r_info; /* info for the record fd */ ++ cubeb_data_callback data_cb; ++ cubeb_state_callback state_cb; ++ int16_t * play_buf; ++ int16_t * record_buf; ++ float * f_play_buf; ++ float * f_record_buf; ++ char input_name[32]; ++ char output_name[32]; ++ uint64_t frames_written; ++ uint64_t blocks_written; + }; + ++int ++sun_init(cubeb ** context, char const * context_name) ++{ ++ cubeb * c; ++ ++ (void)context_name; ++ if ((c = calloc(1, sizeof(cubeb))) == NULL) { ++ return CUBEB_ERROR; ++ } ++ c->ops = &sun_ops; ++ *context = c; ++ return CUBEB_OK; ++} ++ + static void +-float_to_s16(void *ptr, long nsamp) ++sun_destroy(cubeb * context) + { +- int16_t *dst = ptr; +- float *src = ptr; ++ free(context); ++} + +- while (nsamp-- > 0) +- *(dst++) = *(src++) * 32767; ++static char const * ++sun_get_backend_id(cubeb * context) ++{ ++ return "sun"; + } + +-static void * +-sunaudio_mainloop(void *arg) ++static int ++sun_get_preferred_sample_rate(cubeb * context, uint32_t * rate) + { +- struct cubeb_stream *s = arg; +- int state; ++ (void)context; + +- DPR("sunaudio_mainloop()\n"); ++ *rate = SUN_PREFER_RATE; ++ return CUBEB_OK; ++} + +- s->state_cb(s, s->arg, CUBEB_STATE_STARTED); ++static int ++sun_get_max_channel_count(cubeb * context, uint32_t * max_channels) ++{ ++ (void)context; + +- pthread_mutex_lock(&s->mutex); +- DPR("sunaudio_mainloop(), started\n"); ++ *max_channels = SUN_MAX_CHANNELS; ++ return CUBEB_OK; ++} + +- for (;;) { +- if (!s->active) { +- DPR("sunaudio_mainloop() stopped\n"); +- state = CUBEB_STATE_STOPPED; +- break; +- } ++static int ++sun_get_min_latency(cubeb * context, cubeb_stream_params params, ++ uint32_t * latency_frames) ++{ ++ (void)context; + +- if (!s->using_oss) { +- audio_info_t info; +- ioctl(s->fd, AUDIO_GETINFO, &info); +- if (s->frm_played > info.play.samples + 3 * s->n_frm) { +- pthread_mutex_unlock(&s->mutex); +- struct timespec ts = {0, 10000}; // 10 ms +- nanosleep(&ts, NULL); +- pthread_mutex_lock(&s->mutex); +- continue; +- } +- } ++ *latency_frames = SUN_LATENCY_MS * params.rate / 1000; ++ return CUBEB_OK; ++} + +- pthread_mutex_unlock(&s->mutex); +- unsigned int got = s->data_cb(s, s->arg, NULL, s->buf, s->n_frm); +- DPR("sunaudio_mainloop() ask %d got %d\n", s->n_frm, got); +- pthread_mutex_lock(&s->mutex); ++static int ++sun_get_hwinfo(const char * device, struct audio_info * format, ++ int * props, struct audio_device * dev) ++{ ++ int fd = -1; + +- if (got < 0) { +- DPR("sunaudio_mainloop() cb err\n"); +- state = CUBEB_STATE_ERROR; +- break; +- } ++ if ((fd = open(device, O_RDONLY)) == -1) { ++ goto error; ++ } ++#ifdef AUDIO_GETFORMAT ++ if (ioctl(fd, AUDIO_GETFORMAT, format) != 0) { ++ goto error; ++ } ++#endif ++#ifdef AUDIO_GETPROPS ++ if (ioctl(fd, AUDIO_GETPROPS, props) != 0) { ++ goto error; ++ } ++#endif ++ if (ioctl(fd, AUDIO_GETDEV, dev) != 0) { ++ goto error; ++ } ++ close(fd); ++ return CUBEB_OK; ++error: ++ if (fd != -1) { ++ close(fd); ++ } ++ return CUBEB_ERROR; ++} + +- if (s->conv) { +- float_to_s16(s->buf, got * s->n_channles); +- } ++/* ++ * XXX: PR kern/54264 ++ */ ++static int ++sun_prinfo_verify_sanity(struct audio_prinfo * prinfo) ++{ ++ return prinfo->precision >= 8 && prinfo->precision <= 32 && ++ prinfo->channels >= 1 && prinfo->channels < SUN_MAX_CHANNELS && ++ prinfo->sample_rate < SUN_MAX_RATE && prinfo->sample_rate > SUN_MIN_RATE; ++} + +- unsigned int avail = got * 2 * s->n_channles; // coverted to s16 +- unsigned int pos = 0; ++static int ++sun_enumerate_devices(cubeb * context, cubeb_device_type type, ++ cubeb_device_collection * collection) ++{ ++ unsigned i; ++ cubeb_device_info device = {0}; ++ char dev[16] = SUN_DEFAULT_DEVICE; ++ char dev_friendly[64]; ++ struct audio_info hwfmt; ++ struct audio_device hwname; ++ struct audio_prinfo *prinfo = NULL; ++ int hwprops; ++ ++ collection->device = calloc(SUN_DEVICE_COUNT, sizeof(cubeb_device_info)); ++ if (collection->device == NULL) { ++ return CUBEB_ERROR; ++ } ++ collection->count = 0; + +- while (avail > 0 && s->active) { +- int written = write(s->fd, s->buf + pos, avail); +- if (written == -1) { +- if (errno != EINTR && errno != EWOULDBLOCK) { +- DPR("sunaudio_mainloop() write err\n"); +- state = CUBEB_STATE_ERROR; +- break; +- } +- pthread_mutex_unlock(&s->mutex); +- struct timespec ts = {0, 10000}; // 10 ms +- nanosleep(&ts, NULL); +- pthread_mutex_lock(&s->mutex); +- } else { +- pos += written; +- DPR("sunaudio_mainloop() write %d pos %d\n", written, pos); +- s->frm_played += written / 2 / s->n_channles; +- avail -= written; +- } ++ for (i = 0; i < SUN_DEVICE_COUNT; ++i) { ++ if (i > 0) { ++ (void)snprintf(dev, sizeof(dev), "/dev/audio%u", i - 1); + } +- +- if ((got < s->n_frm)) { +- DPR("sunaudio_mainloop() drained\n"); +- state = CUBEB_STATE_DRAINED; ++ if (sun_get_hwinfo(dev, &hwfmt, &hwprops, &hwname) != CUBEB_OK) { ++ continue; ++ } ++#ifdef AUDIO_GETPROPS ++ device.type = 0; ++ if ((hwprops & AUDIO_PROP_CAPTURE) != 0 && ++ sun_prinfo_verify_sanity(&hwfmt.record)) { ++ /* the device supports recording, probably */ ++ device.type |= CUBEB_DEVICE_TYPE_INPUT; ++ } ++ if ((hwprops & AUDIO_PROP_PLAYBACK) != 0 && ++ sun_prinfo_verify_sanity(&hwfmt.play)) { ++ /* the device supports playback, probably */ ++ device.type |= CUBEB_DEVICE_TYPE_OUTPUT; ++ } ++ switch (device.type) { ++ case 0: ++ /* device doesn't do input or output, aliens probably involved */ ++ continue; ++ case CUBEB_DEVICE_TYPE_INPUT: ++ if ((type & CUBEB_DEVICE_TYPE_INPUT) == 0) { ++ /* this device is input only, not scanning for those, skip it */ ++ continue; ++ } + break; ++ case CUBEB_DEVICE_TYPE_OUTPUT: ++ if ((type & CUBEB_DEVICE_TYPE_OUTPUT) == 0) { ++ /* this device is output only, not scanning for those, skip it */ ++ continue; ++ } ++ break; ++ } ++ if ((type & CUBEB_DEVICE_TYPE_INPUT) != 0) { ++ prinfo = &hwfmt.record; ++ } ++ if ((type & CUBEB_DEVICE_TYPE_OUTPUT) != 0) { ++ prinfo = &hwfmt.play; + } ++#endif ++ if (i > 0) { ++ (void)snprintf(dev_friendly, sizeof(dev_friendly), "%s %s %s (%d)", ++ hwname.name, hwname.version, hwname.config, i - 1); ++ } else { ++ (void)snprintf(dev_friendly, sizeof(dev_friendly), "%s %s %s (default)", ++ hwname.name, hwname.version, hwname.config); ++ } ++ device.devid = (void *)(uintptr_t)i; ++ device.device_id = strdup(dev); ++ device.friendly_name = strdup(dev_friendly); ++ device.group_id = strdup(dev); ++ device.vendor_name = strdup(hwname.name); ++ device.type = type; ++ device.state = CUBEB_DEVICE_STATE_ENABLED; ++ device.preferred = (i == 0) ? CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE; ++#ifdef AUDIO_GETFORMAT ++ device.max_channels = prinfo->channels; ++ device.default_rate = prinfo->sample_rate; ++#else ++ device.max_channels = 2; ++ device.default_rate = SUN_PREFER_RATE; ++#endif ++ device.default_format = CUBEB_DEVICE_FMT_S16NE; ++ device.format = CUBEB_DEVICE_FMT_S16NE; ++ device.min_rate = SUN_MIN_RATE; ++ device.max_rate = SUN_MAX_RATE; ++ device.latency_lo = SUN_LATENCY_MS * SUN_MIN_RATE / 1000; ++ device.latency_hi = SUN_LATENCY_MS * SUN_MAX_RATE / 1000; ++ collection->device[collection->count++] = device; + } ++ return CUBEB_OK; ++} + +- pthread_mutex_unlock(&s->mutex); +- s->state_cb(s, s->arg, state); ++static int ++sun_device_collection_destroy(cubeb * context, ++ cubeb_device_collection * collection) ++{ ++ unsigned i; + +- return NULL; ++ for (i = 0; i < collection->count; ++i) { ++ free((char *)collection->device[i].device_id); ++ free((char *)collection->device[i].friendly_name); ++ free((char *)collection->device[i].group_id); ++ free((char *)collection->device[i].vendor_name); ++ } ++ free(collection->device); ++ return CUBEB_OK; + } + +-/*static*/ int +-sunaudio_init(cubeb **context, char const *context_name) ++static int ++sun_copy_params(int fd, cubeb_stream * stream, cubeb_stream_params * params, ++ struct audio_info * info, struct audio_prinfo * prinfo) + { +- DPR("sunaudio_init(%s)\n", context_name); +- *context = malloc(sizeof(*context)); +- (*context)->ops = &sunaudio_ops; +- (void)context_name; ++ prinfo->channels = params->channels; ++ prinfo->sample_rate = params->rate; ++ prinfo->precision = 16; ++#ifdef AUDIO_ENCODING_SLINEAR_LE ++ switch (params->format) { ++ case CUBEB_SAMPLE_S16LE: ++ prinfo->encoding = AUDIO_ENCODING_SLINEAR_LE; ++ break; ++ case CUBEB_SAMPLE_S16BE: ++ prinfo->encoding = AUDIO_ENCODING_SLINEAR_BE; ++ break; ++ case CUBEB_SAMPLE_FLOAT32NE: ++ stream->floating = 1; ++ prinfo->encoding = AUDIO_ENCODING_SLINEAR; ++ break; ++ default: ++ LOG("Unsupported format"); ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } ++#else ++ switch (params->format) { ++ case CUBEB_SAMPLE_S16NE: ++ prinfo->encoding = AUDIO_ENCODING_LINEAR; ++ break; ++ case CUBEB_SAMPLE_FLOAT32NE: ++ stream->floating = 1; ++ prinfo->encoding = AUDIO_ENCODING_LINEAR; ++ break; ++ default: ++ LOG("Unsupported format"); ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } ++#endif ++ if (ioctl(fd, AUDIO_SETINFO, info) == -1) { ++ return CUBEB_ERROR; ++ } ++ if (ioctl(fd, AUDIO_GETINFO, info) == -1) { ++ return CUBEB_ERROR; ++ } + return CUBEB_OK; + } + +-static char const * +-sunaudio_get_backend_id(cubeb *context) ++static int ++sun_stream_stop(cubeb_stream * s) + { +- return "sunaudio"; ++ pthread_mutex_lock(&s->mutex); ++ if (s->running) { ++ s->running = 0; ++ pthread_mutex_unlock(&s->mutex); ++ pthread_join(s->thread, NULL); ++ } else { ++ pthread_mutex_unlock(&s->mutex); ++ } ++ return CUBEB_OK; + } + + static void +-sunaudio_destroy(cubeb *context) ++sun_stream_destroy(cubeb_stream * s) + { +- DPR("sunaudio_destroy()\n"); +- free(context); ++ pthread_mutex_destroy(&s->mutex); ++ sun_stream_stop(s); ++ if (s->play_fd != -1) { ++ close(s->play_fd); ++ } ++ if (s->record_fd != -1) { ++ close(s->record_fd); ++ } ++ free(s->f_play_buf); ++ free(s->f_record_buf); ++ free(s->play_buf); ++ free(s->record_buf); ++ free(s); + } + +-static int +-sunaudio_stream_init(cubeb *context, +- cubeb_stream **stream, +- char const *stream_name, +- cubeb_devid input_device, +- cubeb_stream_params * input_stream_params, +- cubeb_devid output_device, +- cubeb_stream_params * output_stream_params, +- unsigned int latency, +- cubeb_data_callback data_callback, +- cubeb_state_callback state_callback, +- void *user_ptr) ++static void ++sun_float_to_linear(float * in, int16_t * out, ++ unsigned channels, long frames, float vol) + { +- struct cubeb_stream *s; +- DPR("sunaudio_stream_init(%s)\n", stream_name); +- size_t size; +- +- s = malloc(sizeof(struct cubeb_stream)); +- if (s == NULL) +- return CUBEB_ERROR; +- s->context = context; +- +- // If UTAUDIODEV is set, use it with Sun Audio interface +- char * sa_device_name = getenv("UTAUDIODEV"); +- char * dsp_device_name = NULL; +- if (!sa_device_name) { +- dsp_device_name = getenv("AUDIODSP"); +- if (!dsp_device_name) { +- dsp_device_name = DEFAULT_DSP_DEVICE; +- } +- sa_device_name = getenv("AUDIODEV"); +- if (!sa_device_name) { +- sa_device_name = DEFAULT_AUDIO_DEVICE; ++ unsigned i, sample_count = frames * channels; ++ float multiplier = vol * 0x8000; ++ ++ for (i = 0; i < sample_count; ++i) { ++ int32_t sample = lrintf(in[i] * multiplier); ++ if (sample < -0x8000) { ++ out[i] = -0x8000; ++ } else if (sample > 0x7fff) { ++ out[i] = 0x7fff; ++ } else { ++ out[i] = sample; + } + } ++} + +- s->using_oss = 0; +- // Try to use OSS if available +- if (dsp_device_name) { +- s->fd = open(dsp_device_name, O_WRONLY | O_NONBLOCK); +- if (s->fd >= 0) { +- s->using_oss = 1; +- } +- } ++static void ++sun_linear_to_float(int16_t * in, float * out, ++ unsigned channels, long frames) ++{ ++ unsigned i, sample_count = frames * channels; + +- // Try Sun Audio +- if (!s->using_oss) { +- s->fd = open(sa_device_name, O_WRONLY | O_NONBLOCK); ++ for (i = 0; i < sample_count; ++i) { ++ out[i] = (1.0 / 0x8000) * in[i]; + } ++} + +- if (s->fd < 0) { +- free(s); +- DPR("sunaudio_stream_init(), open() failed\n"); +- return CUBEB_ERROR; ++static void ++sun_linear_set_vol(int16_t * buf, unsigned channels, long frames, float vol) ++{ ++ unsigned i, sample_count = frames * channels; ++ int32_t multiplier = vol * 0x8000; ++ ++ for (i = 0; i < sample_count; ++i) { ++ buf[i] = (buf[i] * multiplier) >> 15; + } ++} + +- if (s->using_oss) { +- if (ioctl(s->fd, SNDCTL_DSP_SPEED, &output_stream_params->rate) < 0) { +- DPR("ioctl SNDCTL_DSP_SPEED failed.\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++static void * ++sun_io_routine(void * arg) ++{ ++ cubeb_stream *s = arg; ++ cubeb_state state = CUBEB_STATE_STARTED; ++ size_t to_read = 0; ++ long to_write = 0; ++ size_t write_ofs = 0; ++ size_t read_ofs = 0; ++ int drain = 0; ++ ++ s->state_cb(s, s->user_ptr, CUBEB_STATE_STARTED); ++ while (state != CUBEB_STATE_ERROR) { ++ pthread_mutex_lock(&s->mutex); ++ if (!s->running) { ++ pthread_mutex_unlock(&s->mutex); ++ state = CUBEB_STATE_STOPPED; ++ break; + } +- +- if (ioctl(s->fd, SNDCTL_DSP_CHANNELS, &output_stream_params->channels) < 0) { +- DPR("ioctl SNDCTL_DSP_CHANNELS failed.\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++ pthread_mutex_unlock(&s->mutex); ++ if (s->floating) { ++ if (s->record_fd != -1) { ++ sun_linear_to_float(s->record_buf, s->f_record_buf, ++ s->r_info.record.channels, SUN_BUFFER_FRAMES); ++ } ++ to_write = s->data_cb(s, s->user_ptr, ++ s->f_record_buf, s->f_play_buf, SUN_BUFFER_FRAMES); ++ if (to_write == CUBEB_ERROR) { ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ if (s->play_fd != -1) { ++ pthread_mutex_lock(&s->mutex); ++ sun_float_to_linear(s->f_play_buf, s->play_buf, ++ s->p_info.play.channels, to_write, s->volume); ++ pthread_mutex_unlock(&s->mutex); ++ } ++ } else { ++ to_write = s->data_cb(s, s->user_ptr, ++ s->record_buf, s->play_buf, SUN_BUFFER_FRAMES); ++ if (to_write == CUBEB_ERROR) { ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ if (s->play_fd != -1) { ++ pthread_mutex_lock(&s->mutex); ++ sun_linear_set_vol(s->play_buf, s->p_info.play.channels, to_write, s->volume); ++ pthread_mutex_unlock(&s->mutex); ++ } + } +- +- int format = AFMT_S16_NE; +- if (ioctl(s->fd, SNDCTL_DSP_SETFMT, &format) < 0) { +- DPR("ioctl SNDCTL_DSP_SETFMT failed.\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++ if (to_write < SUN_BUFFER_FRAMES) { ++ drain = 1; + } +- } else { +- audio_info_t audio_info; +- AUDIO_INITINFO(&audio_info) +- audio_info.play.sample_rate = output_stream_params->rate; +- audio_info.play.channels = output_stream_params->channels; +- audio_info.play.encoding = AUDIO_ENCODING_LINEAR; +- audio_info.play.precision = 16; +- if (ioctl(s->fd, AUDIO_SETINFO, &audio_info) == -1) { +- DPR("ioctl AUDIO_SETINFO failed.\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++ to_write = s->play_fd != -1 ? to_write : 0; ++ to_read = s->record_fd != -1 ? SUN_BUFFER_FRAMES : 0; ++ write_ofs = 0; ++ read_ofs = 0; ++ while (to_write > 0 || to_read > 0) { ++ size_t bytes; ++ ssize_t n, frames; ++ ++ if (to_write > 0) { ++ bytes = FRAMES_TO_BYTES(to_write, s->p_info.play.channels); ++ if ((n = write(s->play_fd, s->play_buf + write_ofs, bytes)) < 0) { ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ frames = BYTES_TO_FRAMES(n, s->p_info.play.channels); ++ pthread_mutex_lock(&s->mutex); ++ s->frames_written += frames; ++ pthread_mutex_unlock(&s->mutex); ++ to_write -= frames; ++ write_ofs += frames; ++ } ++ if (to_read > 0) { ++ bytes = FRAMES_TO_BYTES(to_read, s->r_info.record.channels); ++ if ((n = read(s->record_fd, s->record_buf + read_ofs, bytes)) < 0) { ++ state = CUBEB_STATE_ERROR; ++ break; ++ } ++ frames = BYTES_TO_FRAMES(n, s->r_info.record.channels); ++ to_read -= frames; ++ read_ofs += frames; ++ } + } +- } +- +- s->conv = 0; +- switch (output_stream_params->format) { +- case CUBEB_SAMPLE_S16NE: +- s->bytes_per_ch = 2; +- break; +- case CUBEB_SAMPLE_FLOAT32NE: +- s->bytes_per_ch = 4; +- s->conv = 1; ++ if (drain && state != CUBEB_STATE_ERROR) { ++ state = CUBEB_STATE_DRAINED; + break; +- default: +- DPR("sunaudio_stream_init() unsupported format\n"); +- close(s->fd); +- free(s); +- return CUBEB_ERROR_INVALID_FORMAT; ++ } + } ++ s->state_cb(s, s->user_ptr, state); ++ return NULL; ++} + +- s->active = 0; +- s->rate = output_stream_params->rate; +- s->n_channles = output_stream_params->channels; +- s->data_cb = data_callback; ++static int ++sun_stream_init(cubeb * context, ++ cubeb_stream ** stream, ++ char const * stream_name, ++ cubeb_devid input_device, ++ cubeb_stream_params * input_stream_params, ++ cubeb_devid output_device, ++ cubeb_stream_params * output_stream_params, ++ unsigned latency_frames, ++ cubeb_data_callback data_callback, ++ cubeb_state_callback state_callback, ++ void * user_ptr) ++{ ++ int ret = CUBEB_OK; ++ cubeb_stream *s = NULL; ++ ++ (void)stream_name; ++ (void)latency_frames; ++ if ((s = calloc(1, sizeof(cubeb_stream))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } ++ s->record_fd = -1; ++ s->play_fd = -1; ++ if (input_device != 0) { ++ snprintf(s->input_name, sizeof(s->input_name), ++ "/dev/audio%zu", (uintptr_t)input_device - 1); ++ } else { ++ snprintf(s->input_name, sizeof(s->input_name), "%s", SUN_DEFAULT_DEVICE); ++ } ++ if (output_device != 0) { ++ snprintf(s->output_name, sizeof(s->output_name), ++ "/dev/audio%zu", (uintptr_t)output_device - 1); ++ } else { ++ snprintf(s->output_name, sizeof(s->output_name), "%s", SUN_DEFAULT_DEVICE); ++ } ++ if (input_stream_params != NULL) { ++ if (input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ LOG("Loopback not supported"); ++ ret = CUBEB_ERROR_NOT_SUPPORTED; ++ goto error; ++ } ++ if (s->record_fd == -1) { ++ if ((s->record_fd = open(s->input_name, O_RDONLY)) == -1) { ++ LOG("Audio device cannot be opened as read-only"); ++ ret = CUBEB_ERROR_DEVICE_UNAVAILABLE; ++ goto error; ++ } ++ } ++ AUDIO_INITINFO(&s->r_info); ++#ifdef AUMODE_RECORD ++ s->r_info.mode = AUMODE_RECORD; ++#endif ++ if ((ret = sun_copy_params(s->record_fd, s, input_stream_params, ++ &s->r_info, &s->r_info.record)) != CUBEB_OK) { ++ LOG("Setting record params failed"); ++ goto error; ++ } ++ } ++ if (output_stream_params != NULL) { ++ if (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ LOG("Loopback not supported"); ++ ret = CUBEB_ERROR_NOT_SUPPORTED; ++ goto error; ++ } ++ if (s->play_fd == -1) { ++ if ((s->play_fd = open(s->output_name, O_WRONLY)) == -1) { ++ LOG("Audio device cannot be opened as write-only"); ++ ret = CUBEB_ERROR_DEVICE_UNAVAILABLE; ++ goto error; ++ } ++ } ++ AUDIO_INITINFO(&s->p_info); ++#ifdef AUMODE_PLAY ++ s->p_info.mode = AUMODE_PLAY; ++#endif ++ if ((ret = sun_copy_params(s->play_fd, s, output_stream_params, ++ &s->p_info, &s->p_info.play)) != CUBEB_OK) { ++ LOG("Setting play params failed"); ++ goto error; ++ } ++ } ++ s->context = context; ++ s->volume = 1.0; + s->state_cb = state_callback; +- s->arg = user_ptr; ++ s->data_cb = data_callback; ++ s->user_ptr = user_ptr; + if (pthread_mutex_init(&s->mutex, NULL) != 0) { +- free(s); +- return CUBEB_ERROR; ++ LOG("Failed to create mutex"); ++ goto error; + } +- s->frm_played = 0; +- s->n_frm = s->rate * BUF_SIZE_MS / 1000; +- s->buffer_size = s->bytes_per_ch * s->n_channles * s->n_frm; +- s->buf = malloc(s->buffer_size); +- if (s->buf == NULL) { +- close(s->fd); +- free(s); +- return CUBEB_ERROR; ++ if (s->play_fd != -1 && (s->play_buf = calloc(SUN_BUFFER_FRAMES, ++ s->p_info.play.channels * sizeof(int16_t))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } ++ if (s->record_fd != -1 && (s->record_buf = calloc(SUN_BUFFER_FRAMES, ++ s->r_info.record.channels * sizeof(int16_t))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } ++ if (s->floating) { ++ if (s->play_fd != -1 && (s->f_play_buf = calloc(SUN_BUFFER_FRAMES, ++ s->p_info.play.channels * sizeof(float))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } ++ if (s->record_fd != -1 && (s->f_record_buf = calloc(SUN_BUFFER_FRAMES, ++ s->r_info.record.channels * sizeof(float))) == NULL) { ++ ret = CUBEB_ERROR; ++ goto error; ++ } + } +- + *stream = s; +- DPR("sunaudio_stream_init() end, ok\n"); + return CUBEB_OK; +-} +- +-static void +-sunaudio_stream_destroy(cubeb_stream *s) +-{ +- DPR("sunaudio_stream_destroy()\n"); +- if (s->fd > 0) { +- // Flush buffer +- if (s->using_oss) { +- ioctl(s->fd, SNDCTL_DSP_HALT_OUTPUT); +- } else { +- ioctl(s->fd, I_FLUSH); +- } +- close(s->fd); ++error: ++ if (s != NULL) { ++ sun_stream_destroy(s); + } +- free(s->buf); +- free(s); ++ return ret; + } + + static int +-sunaudio_stream_start(cubeb_stream *s) ++sun_stream_start(cubeb_stream * s) + { +- int err; +- +- DPR("sunaudio_stream_start()\n"); +- s->active = 1; +- err = pthread_create(&s->th, NULL, sunaudio_mainloop, s); +- if (err) { +- s->active = 0; ++ s->running = 1; ++ if (pthread_create(&s->thread, NULL, sun_io_routine, s) != 0) { ++ LOG("Couldn't create thread"); + return CUBEB_ERROR; + } + return CUBEB_OK; + } + + static int +-sunaudio_stream_stop(cubeb_stream *s) ++sun_stream_get_position(cubeb_stream * s, uint64_t * position) + { +- void *dummy; ++#ifdef AUDIO_GETOOFFS ++ struct audio_offset offset; + +- DPR("sunaudio_stream_stop()\n"); +- if (s->active) { +- s->active = 0; +- pthread_join(s->th, &dummy); ++ if (ioctl(s->play_fd, AUDIO_GETOOFFS, &offset) == -1) { ++ return CUBEB_ERROR; + } ++ s->blocks_written += offset.deltablks; ++ *position = BYTES_TO_FRAMES(s->blocks_written * s->p_info.blocksize, ++ s->p_info.play.channels); + return CUBEB_OK; +-} +- +-static int +-sunaudio_stream_get_position(cubeb_stream *s, uint64_t *p) +-{ +- int rv = CUBEB_OK; ++#else + pthread_mutex_lock(&s->mutex); +- if (s->active && s->fd > 0) { +- if (s->using_oss) { +- int delay; +- ioctl(s->fd, SNDCTL_DSP_GETODELAY, &delay); +- int64_t t = s->frm_played - delay / s->n_channles / 2; +- if (t < 0) { +- *p = 0; +- } else { +- *p = t; +- } +- } else { +- audio_info_t info; +- ioctl(s->fd, AUDIO_GETINFO, &info); +- *p = info.play.samples; +- } +- DPR("sunaudio_stream_get_position() %lld\n", *p); +- } else { +- rv = CUBEB_ERROR; +- } ++ *position = s->frames_written; + pthread_mutex_unlock(&s->mutex); +- return rv; ++ return CUBEB_OK; ++#endif + } + + static int +-sunaudio_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) ++sun_stream_get_latency(cubeb_stream * stream, uint32_t * latency) + { +- if (!ctx || !max_channels) +- return CUBEB_ERROR; ++#ifdef AUDIO_GETBUFINFO ++ struct audio_info info; + +- *max_channels = 2; ++ if (ioctl(stream->play_fd, AUDIO_GETBUFINFO, &info) == -1) { ++ return CUBEB_ERROR; ++ } + ++ *latency = BYTES_TO_FRAMES(info.play.seek + info.blocksize, ++ info.play.channels); + return CUBEB_OK; ++#else ++ cubeb_stream_params params; ++ ++ params.rate = stream->p_info.play.sample_rate; ++ ++ return sun_get_min_latency(NULL, params, latency); ++#endif + } + + static int +-sunaudio_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) ++sun_stream_set_volume(cubeb_stream * stream, float volume) + { +- if (!ctx || !rate) +- return CUBEB_ERROR; +- +- // XXX Not yet implemented. +- *rate = 44100; +- ++ pthread_mutex_lock(&stream->mutex); ++ stream->volume = volume; ++ pthread_mutex_unlock(&stream->mutex); + return CUBEB_OK; + } + + static int +-sunaudio_get_min_latency(cubeb * ctx, cubeb_stream_params params, uint32_t * latency_ms) ++sun_get_current_device(cubeb_stream * stream, cubeb_device ** const device) + { +- if (!ctx || !latency_ms) ++ *device = calloc(1, sizeof(cubeb_device)); ++ if (*device == NULL) { + return CUBEB_ERROR; +- +- // XXX Not yet implemented. +- *latency_ms = 20; +- ++ } ++ (*device)->input_name = stream->record_fd != -1 ? ++ strdup(stream->input_name) : NULL; ++ (*device)->output_name = stream->play_fd != -1 ? ++ strdup(stream->output_name) : NULL; + return CUBEB_OK; + } + + static int +-sunaudio_stream_get_latency(cubeb_stream * s, uint32_t * latency) ++sun_stream_device_destroy(cubeb_stream * stream, cubeb_device * device) + { +- if (!s || !latency) +- return CUBEB_ERROR; +- +- int rv = CUBEB_OK; +- pthread_mutex_lock(&s->mutex); +- if (s->active && s->fd > 0) { +- if (s->using_oss) { +- int delay; +- ioctl(s->fd, SNDCTL_DSP_GETODELAY, &delay); +- *latency = delay / s->n_channles / 2 / s->rate; +- } else { +- audio_info_t info; +- ioctl(s->fd, AUDIO_GETINFO, &info); +- *latency = (s->frm_played - info.play.samples) / s->rate; +- } +- DPR("sunaudio_stream_get_position() %lld\n", *p); +- } else { +- rv = CUBEB_ERROR; +- } +- pthread_mutex_unlock(&s->mutex); +- return rv; ++ (void)stream; ++ free(device->input_name); ++ free(device->output_name); ++ free(device); ++ return CUBEB_OK; + } + +-static struct cubeb_ops const sunaudio_ops = { +- .init = sunaudio_init, +- .get_backend_id = sunaudio_get_backend_id, +- .destroy = sunaudio_destroy, +- .get_preferred_sample_rate = sunaudio_get_preferred_sample_rate, +- .stream_init = sunaudio_stream_init, +- .stream_destroy = sunaudio_stream_destroy, +- .stream_start = sunaudio_stream_start, +- .stream_stop = sunaudio_stream_stop, +- .stream_get_position = sunaudio_stream_get_position, +- .get_max_channel_count = sunaudio_get_max_channel_count, +- .get_min_latency = sunaudio_get_min_latency, +- .stream_get_latency = sunaudio_stream_get_latency ++static struct cubeb_ops const sun_ops = { ++ .init = sun_init, ++ .get_backend_id = sun_get_backend_id, ++ .get_max_channel_count = sun_get_max_channel_count, ++ .get_min_latency = sun_get_min_latency, ++ .get_preferred_sample_rate = sun_get_preferred_sample_rate, ++ .enumerate_devices = sun_enumerate_devices, ++ .device_collection_destroy = sun_device_collection_destroy, ++ .destroy = sun_destroy, ++ .stream_init = sun_stream_init, ++ .stream_destroy = sun_stream_destroy, ++ .stream_start = sun_stream_start, ++ .stream_stop = sun_stream_stop, ++ .stream_reset_default_device = NULL, ++ .stream_get_position = sun_stream_get_position, ++ .stream_get_latency = sun_stream_get_latency, ++ .stream_set_volume = sun_stream_set_volume, ++ .stream_get_current_device = sun_get_current_device, ++ .stream_device_destroy = sun_stream_device_destroy, ++ .stream_register_device_changed_callback = NULL, ++ .register_device_collection_changed = NULL + }; +diff --git a/media/libcubeb/src/cubeb_utils.cpp b/media/libcubeb/src/cubeb_utils.cpp +new file mode 100644 +index 000000000..85572a9fe +--- /dev/null ++++ b/media/libcubeb/src/cubeb_utils.cpp +@@ -0,0 +1,23 @@ ++/* ++ * Copyright © 2018 Mozilla Foundation ++ * ++ * This program is made available under an ISC-style license. See the ++ * accompanying file LICENSE for details. ++ */ ++ ++#include "cubeb_utils.h" ++ ++size_t cubeb_sample_size(cubeb_sample_format format) ++{ ++ switch (format) { ++ case CUBEB_SAMPLE_S16LE: ++ case CUBEB_SAMPLE_S16BE: ++ return sizeof(int16_t); ++ case CUBEB_SAMPLE_FLOAT32LE: ++ case CUBEB_SAMPLE_FLOAT32BE: ++ return sizeof(float); ++ default: ++ // should never happen as all cases are handled above. ++ assert(false); ++ } ++} +diff --git a/media/libcubeb/src/cubeb_utils.h b/media/libcubeb/src/cubeb_utils.h +index d8e9928fe..df6751155 100644 +--- a/media/libcubeb/src/cubeb_utils.h ++++ b/media/libcubeb/src/cubeb_utils.h +@@ -8,11 +8,16 @@ + #if !defined(CUBEB_UTILS) + #define CUBEB_UTILS + ++#include "cubeb/cubeb.h" ++ ++#ifdef __cplusplus ++ + #include + #include + #include ++#include + #include +-#if defined(WIN32) ++#if defined(_WIN32) + #include "cubeb_utils_win.h" + #else + #include "cubeb_utils_unix.h" +@@ -23,6 +28,7 @@ template + void PodCopy(T * destination, const T * source, size_t count) + { + static_assert(std::is_trivial::value, "Requires trivial type"); ++ assert(destination && source); + memcpy(destination, source, count * sizeof(T)); + } + +@@ -31,6 +37,7 @@ template + void PodMove(T * destination, const T * source, size_t count) + { + static_assert(std::is_trivial::value, "Requires trivial type"); ++ assert(destination && source); + memmove(destination, source, count * sizeof(T)); + } + +@@ -39,9 +46,67 @@ template + void PodZero(T * destination, size_t count) + { + static_assert(std::is_trivial::value, "Requires trivial type"); ++ assert(destination); + memset(destination, 0, count * sizeof(T)); + } + ++namespace { ++template ++void Copy(T * destination, const T * source, size_t count, Trait) ++{ ++ for (size_t i = 0; i < count; i++) { ++ destination[i] = source[i]; ++ } ++} ++ ++template ++void Copy(T * destination, const T * source, size_t count, std::true_type) ++{ ++ PodCopy(destination, source, count); ++} ++} ++ ++/** ++ * This allows copying a number of elements from a `source` pointer to a ++ * `destination` pointer, using `memcpy` if it is safe to do so, or a loop that ++ * calls the constructors and destructors otherwise. ++ */ ++template ++void Copy(T * destination, const T * source, size_t count) ++{ ++ assert(destination && source); ++ Copy(destination, source, count, typename std::is_trivial::type()); ++} ++ ++namespace { ++template ++void ConstructDefault(T * destination, size_t count, Trait) ++{ ++ for (size_t i = 0; i < count; i++) { ++ destination[i] = T(); ++ } ++} ++ ++template ++void ConstructDefault(T * destination, ++ size_t count, std::true_type) ++{ ++ PodZero(destination, count); ++} ++} ++ ++/** ++ * This allows zeroing (using memset) or default-constructing a number of ++ * elements calling the constructors and destructors if necessary. ++ */ ++template ++void ConstructDefault(T * destination, size_t count) ++{ ++ assert(destination); ++ ConstructDefault(destination, count, ++ typename std::is_arithmetic::type()); ++} ++ + template + class auto_array + { +@@ -63,6 +128,11 @@ public: + return data_; + } + ++ T * end() const ++ { ++ return data_ + length_; ++ } ++ + const T& at(size_t index) const + { + assert(index < length_ && "out of range"); +@@ -198,18 +268,76 @@ private: + size_t length_; + }; + +-struct auto_lock { +- explicit auto_lock(owned_critical_section & lock) +- : lock(lock) +- { +- lock.enter(); ++struct auto_array_wrapper { ++ virtual void push(void * elements, size_t length) = 0; ++ virtual size_t length() = 0; ++ virtual void push_silence(size_t length) = 0; ++ virtual bool pop(size_t length) = 0; ++ virtual void * data() = 0; ++ virtual void * end() = 0; ++ virtual void clear() = 0; ++ virtual bool reserve(size_t capacity) = 0; ++ virtual void set_length(size_t length) = 0; ++ virtual ~auto_array_wrapper() {} ++}; ++ ++template ++struct auto_array_wrapper_impl : public auto_array_wrapper { ++ auto_array_wrapper_impl() {} ++ ++ explicit auto_array_wrapper_impl(uint32_t size) ++ : ar(size) ++ {} ++ ++ void push(void * elements, size_t length) override { ++ ar.push(static_cast(elements), length); + } +- ~auto_lock() +- { +- lock.leave(); ++ ++ size_t length() override { ++ return ar.length(); ++ } ++ ++ void push_silence(size_t length) override { ++ ar.push_silence(length); ++ } ++ ++ bool pop(size_t length) override { ++ return ar.pop(nullptr, length); ++ } ++ ++ void * data() override { ++ return ar.data(); ++ } ++ ++ void * end() override { ++ return ar.end(); ++ } ++ ++ void clear() override { ++ ar.clear(); ++ } ++ ++ bool reserve(size_t capacity) override { ++ return ar.reserve(capacity); + } ++ ++ void set_length(size_t length) override { ++ ar.set_length(length); ++ } ++ ++ ~auto_array_wrapper_impl() { ++ ar.clear(); ++ } ++ + private: +- owned_critical_section & lock; ++ auto_array ar; + }; + ++extern "C" { ++ size_t cubeb_sample_size(cubeb_sample_format format); ++} ++ ++using auto_lock = std::lock_guard; ++#endif // __cplusplus ++ + #endif /* CUBEB_UTILS */ +diff --git a/media/libcubeb/src/cubeb_utils_unix.h b/media/libcubeb/src/cubeb_utils_unix.h +index 80219d58b..4876d015f 100644 +--- a/media/libcubeb/src/cubeb_utils_unix.h ++++ b/media/libcubeb/src/cubeb_utils_unix.h +@@ -48,7 +48,7 @@ public: + #endif + } + +- void enter() ++ void lock() + { + #ifndef NDEBUG + int r = +@@ -59,7 +59,7 @@ public: + #endif + } + +- void leave() ++ void unlock() + { + #ifndef NDEBUG + int r = +diff --git a/media/libcubeb/src/cubeb_utils_win.h b/media/libcubeb/src/cubeb_utils_win.h +index 2b094cd93..0112ad6d3 100644 +--- a/media/libcubeb/src/cubeb_utils_win.h ++++ b/media/libcubeb/src/cubeb_utils_win.h +@@ -29,7 +29,7 @@ public: + DeleteCriticalSection(&critical_section); + } + +- void enter() ++ void lock() + { + EnterCriticalSection(&critical_section); + #ifndef NDEBUG +@@ -38,7 +38,7 @@ public: + #endif + } + +- void leave() ++ void unlock() + { + #ifndef NDEBUG + /* GetCurrentThreadId cannot return 0: it is not a the valid thread id */ +diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp +index e88d6becd..6acf1c1cc 100644 +--- a/media/libcubeb/src/cubeb_wasapi.cpp ++++ b/media/libcubeb/src/cubeb_wasapi.cpp +@@ -4,6 +4,7 @@ + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ ++#define _WIN32_WINNT 0x0600 + #define NOMINMAX + + #include +@@ -23,20 +24,61 @@ + #include + #include + #include ++#include + + #include "cubeb/cubeb.h" + #include "cubeb-internal.h" ++#include "cubeb_mixer.h" + #include "cubeb_resampler.h" ++#include "cubeb_strings.h" + #include "cubeb_utils.h" + +-/* devicetopology.h missing in MinGW. */ +-#ifndef __devicetopology_h__ +-#include "cubeb_devicetopology.h" ++// Windows 10 exposes the IAudioClient3 interface to create low-latency streams. ++// Copy the interface definition from audioclient.h here to make the code simpler ++// and so that we can still access IAudioClient3 via COM if cubeb was compiled ++// against an older SDK. ++#ifndef __IAudioClient3_INTERFACE_DEFINED__ ++#define __IAudioClient3_INTERFACE_DEFINED__ ++MIDL_INTERFACE("7ED4EE07-8E67-4CD4-8C1A-2B7A5987AD42") ++IAudioClient3 : public IAudioClient ++{ ++public: ++ virtual HRESULT STDMETHODCALLTYPE GetSharedModeEnginePeriod( ++ /* [annotation][in] */ ++ _In_ const WAVEFORMATEX *pFormat, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pDefaultPeriodInFrames, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pFundamentalPeriodInFrames, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pMinPeriodInFrames, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pMaxPeriodInFrames) = 0; ++ ++ virtual HRESULT STDMETHODCALLTYPE GetCurrentSharedModeEnginePeriod( ++ /* [unique][annotation][out] */ ++ _Out_ WAVEFORMATEX **ppFormat, ++ /* [annotation][out] */ ++ _Out_ UINT32 *pCurrentPeriodInFrames) = 0; ++ ++ virtual HRESULT STDMETHODCALLTYPE InitializeSharedAudioStream( ++ /* [annotation][in] */ ++ _In_ DWORD StreamFlags, ++ /* [annotation][in] */ ++ _In_ UINT32 PeriodInFrames, ++ /* [annotation][in] */ ++ _In_ const WAVEFORMATEX *pFormat, ++ /* [annotation][in] */ ++ _In_opt_ LPCGUID AudioSessionGuid) = 0; ++}; ++#ifdef __CRT_UUID_DECL ++// Required for MinGW ++__CRT_UUID_DECL(IAudioClient3, 0x7ED4EE07, 0x8E67, 0x4CD4, 0x8C, 0x1A, 0x2B, 0x7A, 0x59, 0x87, 0xAD, 0x42) + #endif +- +-/* Taken from winbase.h, Not in MinGW. */ +-#ifndef STACK_SIZE_PARAM_IS_A_RESERVATION +-#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000 // Threads only ++#endif ++// Copied from audioclient.h in the Windows 10 SDK ++#ifndef AUDCLNT_E_ENGINE_PERIODICITY_LOCKED ++#define AUDCLNT_E_ENGINE_PERIODICITY_LOCKED AUDCLNT_ERR(0x028) + #endif + + #ifndef PKEY_Device_FriendlyName +@@ -47,6 +89,15 @@ DEFINE_PROPERTYKEY(PKEY_Device_InstanceId, 0x78c34fc8, 0x104a, 0x4aca, 0x9e + #endif + + namespace { ++struct com_heap_ptr_deleter { ++ void operator()(void * ptr) const noexcept { ++ CoTaskMemFree(ptr); ++ } ++}; ++ ++template ++using com_heap_ptr = std::unique_ptr; ++ + template + constexpr size_t + ARRAY_LENGTH(T(&)[N]) +@@ -54,51 +105,83 @@ ARRAY_LENGTH(T(&)[N]) + return N; + } + +-void +-SafeRelease(HANDLE handle) +-{ +- if (handle) { +- CloseHandle(handle); +- } +-} ++template ++class no_addref_release : public T { ++ ULONG STDMETHODCALLTYPE AddRef() = 0; ++ ULONG STDMETHODCALLTYPE Release() = 0; ++}; + + template +-void SafeRelease(T * ptr) +-{ +- if (ptr) { +- ptr->Release(); ++class com_ptr { ++public: ++ com_ptr() noexcept = default; ++ ++ com_ptr(com_ptr const & other) noexcept = delete; ++ com_ptr & operator=(com_ptr const & other) noexcept = delete; ++ T ** operator&() const noexcept = delete; ++ ++ ~com_ptr() noexcept { ++ release(); + } +-} + +-struct auto_com { +- auto_com() { +- result = CoInitializeEx(NULL, COINIT_MULTITHREADED); +- } +- ~auto_com() { +- if (result == RPC_E_CHANGED_MODE) { +- // This is not an error, COM was not initialized by this function, so it is +- // not necessary to uninit it. +- LOG("COM was already initialized in STA."); +- } else if (result == S_FALSE) { +- // This is not an error. We are allowed to call CoInitializeEx more than +- // once, as long as it is matches by an CoUninitialize call. +- // We do that in the dtor which is guaranteed to be called. +- LOG("COM was already initialized in MTA"); +- } +- if (SUCCEEDED(result)) { +- CoUninitialize(); ++ com_ptr(com_ptr && other) noexcept ++ : ptr(other.ptr) ++ { ++ other.ptr = nullptr; ++ } ++ ++ com_ptr & operator=(com_ptr && other) noexcept { ++ if (ptr != other.ptr) { ++ release(); ++ ptr = other.ptr; ++ other.ptr = nullptr; + } ++ return *this; ++ } ++ ++ explicit operator bool() const noexcept { ++ return nullptr != ptr; + } +- bool ok() { +- return result == RPC_E_CHANGED_MODE || SUCCEEDED(result); ++ ++ no_addref_release * operator->() const noexcept { ++ return static_cast *>(ptr); + } ++ ++ T * get() const noexcept { ++ return ptr; ++ } ++ ++ T ** receive() noexcept { ++ XASSERT(ptr == nullptr); ++ return &ptr; ++ } ++ ++ void ** receive_vpp() noexcept { ++ return reinterpret_cast(receive()); ++ } ++ ++ com_ptr & operator=(std::nullptr_t) noexcept { ++ release(); ++ return *this; ++ } ++ ++ void reset(T * p = nullptr) noexcept { ++ release(); ++ ptr = p; ++ } ++ + private: +- HRESULT result; +-}; ++ void release() noexcept { ++ T * temp = ptr; + +-typedef HANDLE (WINAPI *set_mm_thread_characteristics_function)( +- const char * TaskName, LPDWORD TaskIndex); +-typedef BOOL (WINAPI *revert_mm_thread_characteristics_function)(HANDLE handle); ++ if (temp) { ++ ptr = nullptr; ++ temp->Release(); ++ } ++ } ++ ++ T * ptr = nullptr; ++}; + + extern cubeb_ops const wasapi_ops; + +@@ -106,19 +189,28 @@ int wasapi_stream_stop(cubeb_stream * stm); + int wasapi_stream_start(cubeb_stream * stm); + void close_wasapi_stream(cubeb_stream * stm); + int setup_wasapi_stream(cubeb_stream * stm); +-static char * wstr_to_utf8(const wchar_t * str); +-static std::unique_ptr utf8_to_wstr(char* str); ++ERole pref_to_role(cubeb_stream_prefs param); ++static char const * wstr_to_utf8(wchar_t const * str); ++static std::unique_ptr utf8_to_wstr(char const * str); + + } + +-struct cubeb +-{ +- cubeb_ops const * ops; +- /* Library dynamically opened to increase the render thread priority, and +- the two function pointers we need. */ +- HMODULE mmcss_module; +- set_mm_thread_characteristics_function set_mm_thread_characteristics; +- revert_mm_thread_characteristics_function revert_mm_thread_characteristics; ++class wasapi_collection_notification_client; ++class monitor_device_notifications; ++ ++struct cubeb { ++ cubeb_ops const * ops = &wasapi_ops; ++ cubeb_strings * device_ids; ++ /* Device enumerator to get notifications when the ++ device collection change. */ ++ com_ptr device_collection_enumerator; ++ com_ptr collection_notification_client; ++ /* Collection changed for input (capture) devices. */ ++ cubeb_device_collection_changed_callback input_collection_changed_callback = nullptr; ++ void * input_collection_changed_user_ptr = nullptr; ++ /* Collection changed for output (render) devices. */ ++ cubeb_device_collection_changed_callback output_collection_changed_callback = nullptr; ++ void * output_collection_changed_user_ptr = nullptr; + }; + + class wasapi_endpoint_notification_client; +@@ -132,27 +224,35 @@ class wasapi_endpoint_notification_client; + */ + typedef bool (*wasapi_refill_callback)(cubeb_stream * stm); + +-struct cubeb_stream +-{ +- cubeb * context; ++struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ ++ cubeb * context = nullptr; ++ void * user_ptr = nullptr; ++ /**/ ++ + /* Mixer pameters. We need to convert the input stream to this + samplerate/channel layout, as WASAPI does not resample nor upmix + itself. */ +- cubeb_stream_params input_mix_params; +- cubeb_stream_params output_mix_params; ++ cubeb_stream_params input_mix_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ cubeb_stream_params output_mix_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; + /* Stream parameters. This is what the client requested, + * and what will be presented in the callback. */ +- cubeb_stream_params input_stream_params; +- cubeb_stream_params output_stream_params; ++ cubeb_stream_params input_stream_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ cubeb_stream_params output_stream_params = { CUBEB_SAMPLE_FLOAT32NE, 0, 0, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE }; ++ /* A MMDevice role for this stream: either communication or console here. */ ++ ERole role; + /* The input and output device, or NULL for default. */ +- cubeb_devid input_device; +- cubeb_devid output_device; ++ std::unique_ptr input_device; ++ std::unique_ptr output_device; + /* The latency initially requested for this stream, in frames. */ +- unsigned latency; +- cubeb_state_callback state_callback; +- cubeb_data_callback data_callback; +- wasapi_refill_callback refill_callback; +- void * user_ptr; ++ unsigned latency = 0; ++ cubeb_state_callback state_callback = nullptr; ++ cubeb_data_callback data_callback = nullptr; ++ wasapi_refill_callback refill_callback = nullptr; ++ /* True when a loopback device is requested with no output device. In this ++ case a dummy output device is opened to drive the loopback, but should not ++ be exposed. */ ++ bool has_dummy_output = false; + /* Lifetime considerations: + - client, render_client, audio_clock and audio_stream_volume are interface + pointer to the IAudioClient. +@@ -160,70 +260,324 @@ struct cubeb_stream + mix_buffer are the same as the cubeb_stream instance. */ + + /* Main handle on the WASAPI stream. */ +- IAudioClient * output_client; ++ com_ptr output_client; + /* Interface pointer to use the event-driven interface. */ +- IAudioRenderClient * render_client; ++ com_ptr render_client; + /* Interface pointer to use the volume facilities. */ +- IAudioStreamVolume * audio_stream_volume; ++ com_ptr audio_stream_volume; + /* Interface pointer to use the stream audio clock. */ +- IAudioClock * audio_clock; ++ com_ptr audio_clock; + /* Frames written to the stream since it was opened. Reset on device + change. Uses mix_params.rate. */ +- UINT64 frames_written; ++ UINT64 frames_written = 0; + /* Frames written to the (logical) stream since it was first + created. Updated on device change. Uses stream_params.rate. */ +- UINT64 total_frames_written; ++ UINT64 total_frames_written = 0; + /* Last valid reported stream position. Used to ensure the position + reported by stream_get_position increases monotonically. */ +- UINT64 prev_position; ++ UINT64 prev_position = 0; + /* Device enumerator to be able to be notified when the default + device change. */ +- IMMDeviceEnumerator * device_enumerator; ++ com_ptr device_enumerator; + /* Device notification client, to be able to be notified when the default + audio device changes and route the audio to the new default audio output + device */ +- wasapi_endpoint_notification_client * notification_client; ++ com_ptr notification_client; + /* Main andle to the WASAPI capture stream. */ +- IAudioClient * input_client; ++ com_ptr input_client; + /* Interface to use the event driven capture interface */ +- IAudioCaptureClient * capture_client; ++ com_ptr capture_client; + /* This event is set by the stream_stop and stream_destroy + function, so the render loop can exit properly. */ +- HANDLE shutdown_event; ++ HANDLE shutdown_event = 0; + /* Set by OnDefaultDeviceChanged when a stream reconfiguration is required. + The reconfiguration is handled by the render loop thread. */ +- HANDLE reconfigure_event; ++ HANDLE reconfigure_event = 0; + /* This is set by WASAPI when we should refill the stream. */ +- HANDLE refill_event; ++ HANDLE refill_event = 0; + /* This is set by WASAPI when we should read from the input stream. In + * practice, we read from the input stream in the output callback, so + * this is not used, but it is necessary to start getting input data. */ +- HANDLE input_available_event; ++ HANDLE input_available_event = 0; + /* Each cubeb_stream has its own thread. */ +- HANDLE thread; ++ HANDLE thread = 0; + /* The lock protects all members that are touched by the render thread or + change during a device reset, including: audio_clock, audio_stream_volume, + client, frames_written, mix_params, total_frames_written, prev_position. */ + owned_critical_section stream_reset_lock; + /* Maximum number of frames that can be passed down in a callback. */ +- uint32_t input_buffer_frame_count; ++ uint32_t input_buffer_frame_count = 0; + /* Maximum number of frames that can be requested in a callback. */ +- uint32_t output_buffer_frame_count; ++ uint32_t output_buffer_frame_count = 0; + /* Resampler instance. Resampling will only happen if necessary. */ +- cubeb_resampler * resampler; +- /* A buffer for up/down mixing multi-channel audio. */ +- float * mix_buffer; ++ std::unique_ptr resampler = { nullptr, cubeb_resampler_destroy }; ++ /* Mixer interfaces */ ++ std::unique_ptr output_mixer = { nullptr, cubeb_mixer_destroy }; ++ std::unique_ptr input_mixer = { nullptr, cubeb_mixer_destroy }; ++ /* A buffer for up/down mixing multi-channel audio output. */ ++ std::vector mix_buffer; + /* WASAPI input works in "packets". We re-linearize the audio packets + * into this buffer before handing it to the resampler. */ +- auto_array linear_input_buffer; ++ std::unique_ptr linear_input_buffer; ++ /* Bytes per sample. This multiplied by the number of channels is the number ++ * of bytes per frame. */ ++ size_t bytes_per_sample = 0; ++ /* WAVEFORMATEXTENSIBLE sub-format: either PCM or float. */ ++ GUID waveformatextensible_sub_format = GUID_NULL; + /* Stream volume. Set via stream_set_volume and used to reset volume on + device changes. */ +- float volume; ++ float volume = 1.0; + /* True if the stream is draining. */ +- bool draining; ++ bool draining = false; + /* True when we've destroyed the stream. This pointer is leaked on stream + * destruction if we could not join the thread. */ +- std::atomic*> emergency_bailout; ++ std::atomic*> emergency_bailout { nullptr }; ++ /* Synchronizes render thread start to ensure safe access to emergency_bailout. */ ++ HANDLE thread_ready_event = 0; ++}; ++ ++class monitor_device_notifications { ++public: ++ monitor_device_notifications(cubeb * context) ++ : cubeb_context(context) ++ { ++ create_thread(); ++ } ++ ++ ~monitor_device_notifications() ++ { ++ SetEvent(shutdown); ++ WaitForSingleObject(thread, INFINITE); ++ CloseHandle(thread); ++ ++ CloseHandle(input_changed); ++ CloseHandle(output_changed); ++ CloseHandle(shutdown); ++ } ++ ++ void notify(EDataFlow flow) ++ { ++ XASSERT(cubeb_context); ++ if (flow == eCapture && cubeb_context->input_collection_changed_callback) { ++ bool res = SetEvent(input_changed); ++ if (!res) { ++ LOG("Failed to set input changed event"); ++ } ++ return; ++ } ++ if (flow == eRender && cubeb_context->output_collection_changed_callback) { ++ bool res = SetEvent(output_changed); ++ if (!res) { ++ LOG("Failed to set output changed event"); ++ } ++ } ++ } ++private: ++ static unsigned int __stdcall ++ thread_proc(LPVOID args) ++ { ++ XASSERT(args); ++ static_cast(args) ++ ->notification_thread_loop(); ++ return 0; ++ } ++ ++ void notification_thread_loop() ++ { ++ struct auto_com { ++ auto_com() { ++ HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); ++ XASSERT(SUCCEEDED(hr)); ++ } ++ ~auto_com() { ++ CoUninitialize(); ++ } ++ } com; ++ ++ HANDLE wait_array[3] = { ++ input_changed, ++ output_changed, ++ shutdown, ++ }; ++ ++ while (true) { ++ Sleep(200); ++ ++ DWORD wait_result = WaitForMultipleObjects(ARRAY_LENGTH(wait_array), ++ wait_array, ++ FALSE, ++ INFINITE); ++ if (wait_result == WAIT_OBJECT_0) { // input changed ++ cubeb_context->input_collection_changed_callback(cubeb_context, ++ cubeb_context->input_collection_changed_user_ptr); ++ } else if (wait_result == WAIT_OBJECT_0 + 1) { // output changed ++ cubeb_context->output_collection_changed_callback(cubeb_context, ++ cubeb_context->output_collection_changed_user_ptr); ++ } else if (wait_result == WAIT_OBJECT_0 + 2) { // shutdown ++ break; ++ } else { ++ LOG("Unexpected result %lu", wait_result); ++ } ++ } // loop ++ } ++ ++ void create_thread() ++ { ++ output_changed = CreateEvent(nullptr, 0, 0, nullptr); ++ if (!output_changed) { ++ LOG("Failed to create output changed event."); ++ return; ++ } ++ ++ input_changed = CreateEvent(nullptr, 0, 0, nullptr); ++ if (!input_changed) { ++ LOG("Failed to create input changed event."); ++ return; ++ } ++ ++ shutdown = CreateEvent(nullptr, 0, 0, nullptr); ++ if (!shutdown) { ++ LOG("Failed to create shutdown event."); ++ return; ++ } ++ ++ thread = (HANDLE) _beginthreadex(nullptr, ++ 256 * 1024, ++ thread_proc, ++ this, ++ STACK_SIZE_PARAM_IS_A_RESERVATION, ++ nullptr); ++ if (!thread) { ++ LOG("Failed to create thread."); ++ return; ++ } ++ } ++ ++ HANDLE thread = INVALID_HANDLE_VALUE; ++ HANDLE output_changed = INVALID_HANDLE_VALUE; ++ HANDLE input_changed = INVALID_HANDLE_VALUE; ++ HANDLE shutdown = INVALID_HANDLE_VALUE; ++ ++ cubeb * cubeb_context = nullptr; ++}; ++ ++class wasapi_collection_notification_client : public IMMNotificationClient ++{ ++public: ++ /* The implementation of MSCOM was copied from MSDN. */ ++ ULONG STDMETHODCALLTYPE ++ AddRef() ++ { ++ return InterlockedIncrement(&ref_count); ++ } ++ ++ ULONG STDMETHODCALLTYPE ++ Release() ++ { ++ ULONG ulRef = InterlockedDecrement(&ref_count); ++ if (0 == ulRef) { ++ delete this; ++ } ++ return ulRef; ++ } ++ ++ HRESULT STDMETHODCALLTYPE ++ QueryInterface(REFIID riid, VOID **ppvInterface) ++ { ++ if (__uuidof(IUnknown) == riid) { ++ AddRef(); ++ *ppvInterface = (IUnknown*)this; ++ } else if (__uuidof(IMMNotificationClient) == riid) { ++ AddRef(); ++ *ppvInterface = (IMMNotificationClient*)this; ++ } else { ++ *ppvInterface = NULL; ++ return E_NOINTERFACE; ++ } ++ return S_OK; ++ } ++ ++ wasapi_collection_notification_client(cubeb * context) ++ : ref_count(1) ++ , cubeb_context(context) ++ , monitor_notifications(context) ++ { ++ XASSERT(cubeb_context); ++ } ++ ++ virtual ~wasapi_collection_notification_client() ++ { } ++ ++ HRESULT STDMETHODCALLTYPE ++ OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR device_id) ++ { ++ LOG("collection: Audio device default changed, id = %S.", device_id); ++ return S_OK; ++ } ++ ++ /* The remaining methods are not implemented, they simply log when called (if ++ log is enabled), for debugging. */ ++ HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR device_id) ++ { ++ LOG("collection: Audio device added."); ++ return S_OK; ++ }; ++ ++ HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR device_id) ++ { ++ LOG("collection: Audio device removed."); ++ return S_OK; ++ } ++ ++ HRESULT STDMETHODCALLTYPE ++ OnDeviceStateChanged(LPCWSTR device_id, DWORD new_state) ++ { ++ XASSERT(cubeb_context->output_collection_changed_callback || ++ cubeb_context->input_collection_changed_callback); ++ LOG("collection: Audio device state changed, id = %S, state = %lu.", device_id, new_state); ++ EDataFlow flow; ++ HRESULT hr = GetDataFlow(device_id, &flow); ++ if (FAILED(hr)) { ++ return hr; ++ } ++ monitor_notifications.notify(flow); ++ return S_OK; ++ } ++ ++ HRESULT STDMETHODCALLTYPE ++ OnPropertyValueChanged(LPCWSTR device_id, const PROPERTYKEY key) ++ { ++ //Audio device property value changed. ++ return S_OK; ++ } ++ ++private: ++ HRESULT GetDataFlow(LPCWSTR device_id, EDataFlow * flow) ++ { ++ com_ptr device; ++ com_ptr endpoint; ++ ++ HRESULT hr = cubeb_context->device_collection_enumerator ++ ->GetDevice(device_id, device.receive()); ++ if (FAILED(hr)) { ++ LOG("collection: Could not get device: %lx", hr); ++ return hr; ++ } ++ ++ hr = device->QueryInterface(IID_PPV_ARGS(endpoint.receive())); ++ if (FAILED(hr)) { ++ LOG("collection: Could not get endpoint: %lx", hr); ++ return hr; ++ } ++ ++ return endpoint->GetDataFlow(flow); ++ } ++ ++ /* refcount for this instance, necessary to implement MSCOM semantics. */ ++ LONG ref_count; ++ ++ cubeb * cubeb_context = nullptr; ++ monitor_device_notifications monitor_notifications; + }; + + class wasapi_endpoint_notification_client : public IMMNotificationClient +@@ -262,9 +616,10 @@ public: + return S_OK; + } + +- wasapi_endpoint_notification_client(HANDLE event) ++ wasapi_endpoint_notification_client(HANDLE event, ERole role) + : ref_count(1) + , reconfigure_event(event) ++ , role(role) + { } + + virtual ~wasapi_endpoint_notification_client() +@@ -273,16 +628,16 @@ public: + HRESULT STDMETHODCALLTYPE + OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR device_id) + { +- LOG("Audio device default changed."); ++ LOG("endpoint: Audio device default changed."); + + /* we only support a single stream type for now. */ +- if (flow != eRender && role != eConsole) { ++ if (flow != eRender && role != this->role) { + return S_OK; + } + + BOOL ok = SetEvent(reconfigure_event); + if (!ok) { +- LOG("SetEvent on reconfigure_event failed: %x", GetLastError()); ++ LOG("endpoint: SetEvent on reconfigure_event failed: %lx", GetLastError()); + } + + return S_OK; +@@ -292,36 +647,54 @@ public: + log is enabled), for debugging. */ + HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR device_id) + { +- LOG("Audio device added."); ++ LOG("endpoint: Audio device added."); + return S_OK; + }; + + HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR device_id) + { +- LOG("Audio device removed."); ++ LOG("endpoint: Audio device removed."); + return S_OK; + } + + HRESULT STDMETHODCALLTYPE + OnDeviceStateChanged(LPCWSTR device_id, DWORD new_state) + { +- LOG("Audio device state changed."); ++ LOG("endpoint: Audio device state changed."); + return S_OK; + } + + HRESULT STDMETHODCALLTYPE + OnPropertyValueChanged(LPCWSTR device_id, const PROPERTYKEY key) + { +- LOG("Audio device property value changed."); ++ //Audio device property value changed. + return S_OK; + } + private: + /* refcount for this instance, necessary to implement MSCOM semantics. */ + LONG ref_count; + HANDLE reconfigure_event; ++ ERole role; + }; + + namespace { ++ ++char const * ++intern_device_id(cubeb * ctx, wchar_t const * id) ++{ ++ XASSERT(id); ++ ++ char const * tmp = wstr_to_utf8(id); ++ if (!tmp) ++ return nullptr; ++ ++ char const * interned = cubeb_strings_intern(ctx->device_ids, tmp); ++ ++ free((void *) tmp); ++ ++ return interned; ++} ++ + bool has_input(cubeb_stream * stm) + { + return stm->input_stream_params.rate != 0; +@@ -332,22 +705,33 @@ bool has_output(cubeb_stream * stm) + return stm->output_stream_params.rate != 0; + } + +-bool should_upmix(cubeb_stream_params & stream, cubeb_stream_params & mixer) ++double stream_to_mix_samplerate_ratio(cubeb_stream_params & stream, cubeb_stream_params & mixer) + { +- return mixer.channels > stream.channels; ++ return double(stream.rate) / mixer.rate; + } + +-bool should_downmix(cubeb_stream_params & stream, cubeb_stream_params & mixer) +-{ +- return mixer.channels < stream.channels; +-} ++/* Convert the channel layout into the corresponding KSAUDIO_CHANNEL_CONFIG. ++ See more: https://msdn.microsoft.com/en-us/library/windows/hardware/ff537083(v=vs.85).aspx */ + +-double stream_to_mix_samplerate_ratio(cubeb_stream_params & stream, cubeb_stream_params & mixer) ++cubeb_channel_layout ++mask_to_channel_layout(WAVEFORMATEX const * fmt) + { +- return double(stream.rate) / mixer.rate; ++ cubeb_channel_layout mask = 0; ++ ++ if (fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { ++ WAVEFORMATEXTENSIBLE const * ext = reinterpret_cast(fmt); ++ mask = ext->dwChannelMask; ++ } else if (fmt->wFormatTag == WAVE_FORMAT_PCM || ++ fmt->wFormatTag == WAVE_FORMAT_IEEE_FLOAT) { ++ if (fmt->nChannels == 1) { ++ mask = CHANNEL_FRONT_CENTER; ++ } else if (fmt->nChannels == 2) { ++ mask = CHANNEL_FRONT_LEFT | CHANNEL_FRONT_RIGHT; ++ } ++ } ++ return mask; + } + +- + uint32_t + get_rate(cubeb_stream * stm) + { +@@ -356,99 +740,21 @@ get_rate(cubeb_stream * stm) + } + + uint32_t +-ms_to_hns(uint32_t ms) +-{ +- return ms * 10000; +-} +- +-uint32_t +-hns_to_ms(REFERENCE_TIME hns) +-{ +- return static_cast(hns / 10000); +-} +- +-double +-hns_to_s(REFERENCE_TIME hns) ++hns_to_frames(uint32_t rate, REFERENCE_TIME hns) + { +- return static_cast(hns) / 10000000; ++ return std::ceil((hns - 1) / 10000000.0 * rate); + } + + uint32_t + hns_to_frames(cubeb_stream * stm, REFERENCE_TIME hns) + { +- return hns_to_ms(hns * get_rate(stm)) / 1000; +-} +- +-uint32_t +-hns_to_frames(uint32_t rate, REFERENCE_TIME hns) +-{ +- return hns_to_ms(hns * rate) / 1000; ++ return hns_to_frames(get_rate(stm), hns); + } + + REFERENCE_TIME + frames_to_hns(cubeb_stream * stm, uint32_t frames) + { +- return frames * 1000 / get_rate(stm); +-} +- +-/* Upmix function, copies a mono channel into L and R */ +-template +-void +-mono_to_stereo(T * in, long insamples, T * out, int32_t out_channels) +-{ +- for (int i = 0, j = 0; i < insamples; ++i, j += out_channels) { +- out[j] = out[j + 1] = in[i]; +- } +-} +- +-template +-void +-upmix(T * in, long inframes, T * out, int32_t in_channels, int32_t out_channels) +-{ +- XASSERT(out_channels >= in_channels && in_channels > 0); +- +- /* Either way, if we have 2 or more channels, the first two are L and R. */ +- /* If we are playing a mono stream over stereo speakers, copy the data over. */ +- if (in_channels == 1 && out_channels >= 2) { +- mono_to_stereo(in, inframes, out, out_channels); +- } else { +- /* Copy through. */ +- for (int i = 0, o = 0; i < inframes * in_channels; +- i += in_channels, o += out_channels) { +- for (int j = 0; j < in_channels; ++j) { +- out[o + j] = in[i + j]; +- } +- } +- } +- +- /* Check if more channels. */ +- if (out_channels <= 2) { +- return; +- } +- +- /* Put silence in remaining channels. */ +- for (long i = 0, o = 0; i < inframes; ++i, o += out_channels) { +- for (int j = 2; j < out_channels; ++j) { +- out[o + j] = 0.0; +- } +- } +-} +- +-template +-void +-downmix(T * in, long inframes, T * out, int32_t in_channels, int32_t out_channels) +-{ +- XASSERT(in_channels >= out_channels); +- /* We could use a downmix matrix here, applying mixing weight based on the +- channel, but directsound and winmm simply drop the channels that cannot be +- rendered by the hardware, so we do the same for consistency. */ +- long out_index = 0; +- for (long i = 0; i < inframes * in_channels; i += in_channels) { +- for (int j = 0; j < out_channels; ++j) { +- out[out_index + j] = in[i + j]; +- } +- out_index += out_channels; +- } ++ return std::ceil(frames * 10000000.0 / get_rate(stm)); + } + + /* This returns the size of a frame in the stream, before the eventual upmix +@@ -456,30 +762,31 @@ downmix(T * in, long inframes, T * out, int32_t in_channels, int32_t out_channel + static size_t + frames_to_bytes_before_mix(cubeb_stream * stm, size_t frames) + { +- size_t stream_frame_size = stm->output_stream_params.channels * sizeof(float); +- return stream_frame_size * frames; ++ // This is called only when we has a output client. ++ XASSERT(has_output(stm)); ++ return stm->output_stream_params.channels * stm->bytes_per_sample * frames; + } + + /* This function handles the processing of the input and output audio, + * converting it to rate and channel layout specified at initialization. + * It then calls the data callback, via the resampler. */ + long +-refill(cubeb_stream * stm, float * input_buffer, long input_frames_count, +- float * output_buffer, long output_frames_needed) ++refill(cubeb_stream * stm, void * input_buffer, long input_frames_count, ++ void * output_buffer, long output_frames_needed) + { ++ XASSERT(!stm->draining); + /* If we need to upmix after resampling, resample into the mix buffer to +- avoid a copy. */ +- float * dest = nullptr; +- if (has_output(stm)) { +- if (should_upmix(stm->output_stream_params, stm->output_mix_params) || +- should_downmix(stm->output_stream_params, stm->output_mix_params)) { +- dest = stm->mix_buffer; ++ avoid a copy. Avoid exposing output if it is a dummy stream. */ ++ void * dest = nullptr; ++ if (has_output(stm) && !stm->has_dummy_output) { ++ if (stm->output_mixer) { ++ dest = stm->mix_buffer.data(); + } else { + dest = output_buffer; + } + } + +- long out_frames = cubeb_resampler_fill(stm->resampler, ++ long out_frames = cubeb_resampler_fill(stm->resampler.get(), + input_buffer, + &input_frames_count, + dest, +@@ -492,47 +799,51 @@ refill(cubeb_stream * stm, float * input_buffer, long input_frames_count, + stm->frames_written += out_frames; + } + +- /* Go in draining mode if we got fewer frames than requested. */ +- if (out_frames < output_frames_needed) { ++ /* Go in draining mode if we got fewer frames than requested. If the stream ++ has no output we still expect the callback to return number of frames read ++ from input, otherwise we stop. */ ++ if ((out_frames < output_frames_needed) || ++ (!has_output(stm) && out_frames < input_frames_count)) { + LOG("start draining."); + stm->draining = true; + } + + /* If this is not true, there will be glitches. + It is alright to have produced less frames if we are draining, though. */ +- XASSERT(out_frames == output_frames_needed || stm->draining || !has_output(stm)); +- +- if (has_output(stm)) { +- if (should_upmix(stm->output_stream_params, stm->output_mix_params)) { +- upmix(dest, out_frames, output_buffer, +- stm->output_stream_params.channels, stm->output_mix_params.channels); +- } else if (should_downmix(stm->output_stream_params, stm->output_mix_params)) { +- downmix(dest, out_frames, output_buffer, +- stm->output_stream_params.channels, stm->output_mix_params.channels); ++ XASSERT(out_frames == output_frames_needed || stm->draining || !has_output(stm) || stm->has_dummy_output); ++ ++ // We don't bother mixing dummy output as it will be silenced, otherwise mix output if needed ++ if (!stm->has_dummy_output && has_output(stm) && stm->output_mixer) { ++ XASSERT(dest == stm->mix_buffer.data()); ++ size_t dest_size = ++ out_frames * stm->output_stream_params.channels * stm->bytes_per_sample; ++ XASSERT(dest_size <= stm->mix_buffer.size()); ++ size_t output_buffer_size = ++ out_frames * stm->output_mix_params.channels * stm->bytes_per_sample; ++ int ret = cubeb_mixer_mix(stm->output_mixer.get(), ++ out_frames, ++ dest, ++ dest_size, ++ output_buffer, ++ output_buffer_size); ++ if (ret < 0) { ++ LOG("Error remixing content (%d)", ret); + } + } + + return out_frames; + } + ++int wasapi_stream_reset_default_device(cubeb_stream * stm); ++ + /* This helper grabs all the frames available from a capture client, put them in + * linear_input_buffer. linear_input_buffer should be cleared before the +- * callback exits. */ ++ * callback exits. This helper does not work with exclusive mode streams. */ + bool get_input_buffer(cubeb_stream * stm) + { +- HRESULT hr; +- UINT32 padding_in; +- + XASSERT(has_input(stm)); + +- hr = stm->input_client->GetCurrentPadding(&padding_in); +- if (FAILED(hr)) { +- LOG("Failed to get padding"); +- return false; +- } +- XASSERT(padding_in <= stm->input_buffer_frame_count); +- UINT32 total_available_input = padding_in; +- ++ HRESULT hr; + BYTE * input_packet = NULL; + DWORD flags; + UINT64 dev_pos; +@@ -540,73 +851,97 @@ bool get_input_buffer(cubeb_stream * stm) + /* Get input packets until we have captured enough frames, and put them in a + * contiguous buffer. */ + uint32_t offset = 0; +- while (offset != total_available_input) { +- hr = stm->capture_client->GetNextPacketSize(&next); ++ // If the input stream is event driven we should only ever expect to read a ++ // single packet each time. However, if we're pulling from the stream we may ++ // need to grab multiple packets worth of frames that have accumulated (so ++ // need a loop). ++ for (hr = stm->capture_client->GetNextPacketSize(&next); ++ next > 0; ++ hr = stm->capture_client->GetNextPacketSize(&next)) { ++ if (hr == AUDCLNT_E_DEVICE_INVALIDATED) { ++ // Application can recover from this error. More info ++ // https://msdn.microsoft.com/en-us/library/windows/desktop/dd316605(v=vs.85).aspx ++ LOG("Device invalidated error, reset default device"); ++ wasapi_stream_reset_default_device(stm); ++ return true; ++ } ++ + if (FAILED(hr)) { +- LOG("cannot get next packet size: %x", hr); ++ LOG("cannot get next packet size: %lx", hr); + return false; + } +- /* This can happen if the capture stream has stopped. Just return in this +- * case. */ +- if (!next) { +- break; +- } + +- UINT32 packet_size; ++ UINT32 frames; + hr = stm->capture_client->GetBuffer(&input_packet, +- &packet_size, ++ &frames, + &flags, + &dev_pos, + NULL); + if (FAILED(hr)) { +- LOG("GetBuffer failed for capture: %x", hr); ++ LOG("GetBuffer failed for capture: %lx", hr); + return false; + } +- XASSERT(packet_size == next); ++ XASSERT(frames == next); ++ ++ UINT32 input_stream_samples = frames * stm->input_stream_params.channels; ++ // We do not explicitly handle the AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY ++ // flag. There a two primary (non exhaustive) scenarios we anticipate this ++ // flag being set in: ++ // - The first GetBuffer after Start has this flag undefined. In this ++ // case the flag may be set but is meaningless and can be ignored. ++ // - If a glitch is introduced into the input. This should not happen ++ // for event based inputs, and should be mitigated by using a dummy ++ // stream to drive input in the case of input only loopback. Without ++ // a dummy output, input only loopback would glitch on silence. However, ++ // the dummy input should push silence to the loopback and prevent ++ // discontinuities. See https://blogs.msdn.microsoft.com/matthew_van_eerde/2008/12/16/sample-wasapi-loopback-capture-record-what-you-hear/ ++ // As the first scenario can be ignored, and we anticipate the second ++ // scenario is mitigated, we ignore the flag. ++ // For more info: https://msdn.microsoft.com/en-us/library/windows/desktop/dd370859(v=vs.85).aspx, ++ // https://msdn.microsoft.com/en-us/library/windows/desktop/dd371458(v=vs.85).aspx + if (flags & AUDCLNT_BUFFERFLAGS_SILENT) { +- LOG("insert silence: ps=%u", packet_size); +- stm->linear_input_buffer.push_silence(packet_size * stm->input_stream_params.channels); ++ LOG("insert silence: ps=%u", frames); ++ stm->linear_input_buffer->push_silence(input_stream_samples); + } else { +- if (should_upmix(stm->input_mix_params, stm->input_stream_params)) { +- bool ok = stm->linear_input_buffer.reserve(stm->linear_input_buffer.length() + +- packet_size * stm->input_stream_params.channels); +- assert(ok); +- upmix(reinterpret_cast(input_packet), packet_size, +- stm->linear_input_buffer.data() + stm->linear_input_buffer.length(), +- stm->input_mix_params.channels, +- stm->input_stream_params.channels); +- stm->linear_input_buffer.set_length(stm->linear_input_buffer.length() + packet_size * stm->input_stream_params.channels); +- } else if (should_downmix(stm->input_mix_params, stm->input_stream_params)) { +- bool ok = stm->linear_input_buffer.reserve(stm->linear_input_buffer.length() + +- packet_size * stm->input_stream_params.channels); +- assert(ok); +- downmix(reinterpret_cast(input_packet), packet_size, +- stm->linear_input_buffer.data() + stm->linear_input_buffer.length(), +- stm->input_mix_params.channels, +- stm->input_stream_params.channels); +- stm->linear_input_buffer.set_length(stm->linear_input_buffer.length() + packet_size * stm->input_stream_params.channels); ++ if (stm->input_mixer) { ++ bool ok = stm->linear_input_buffer->reserve( ++ stm->linear_input_buffer->length() + input_stream_samples); ++ XASSERT(ok); ++ size_t input_packet_size = ++ frames * stm->input_mix_params.channels * ++ cubeb_sample_size(stm->input_mix_params.format); ++ size_t linear_input_buffer_size = ++ input_stream_samples * ++ cubeb_sample_size(stm->input_stream_params.format); ++ cubeb_mixer_mix(stm->input_mixer.get(), ++ frames, ++ input_packet, ++ input_packet_size, ++ stm->linear_input_buffer->end(), ++ linear_input_buffer_size); ++ stm->linear_input_buffer->set_length( ++ stm->linear_input_buffer->length() + input_stream_samples); + } else { +- stm->linear_input_buffer.push(reinterpret_cast(input_packet), +- packet_size * stm->input_stream_params.channels); ++ stm->linear_input_buffer->push( ++ input_packet, input_stream_samples); + } + } +- hr = stm->capture_client->ReleaseBuffer(packet_size); ++ hr = stm->capture_client->ReleaseBuffer(frames); + if (FAILED(hr)) { + LOG("FAILED to release intput buffer"); + return false; + } +- offset += packet_size; ++ offset += input_stream_samples; + } + +- assert(stm->linear_input_buffer.length() >= total_available_input && +- offset == total_available_input); ++ XASSERT(stm->linear_input_buffer->length() >= offset); + + return true; + } + + /* Get an output buffer from the render_client. It has to be released before + * exiting the callback. */ +-bool get_output_buffer(cubeb_stream * stm, float *& buffer, size_t & frame_count) ++bool get_output_buffer(cubeb_stream * stm, void *& buffer, size_t & frame_count) + { + UINT32 padding_out; + HRESULT hr; +@@ -614,10 +949,19 @@ bool get_output_buffer(cubeb_stream * stm, float *& buffer, size_t & frame_count + XASSERT(has_output(stm)); + + hr = stm->output_client->GetCurrentPadding(&padding_out); ++ if (hr == AUDCLNT_E_DEVICE_INVALIDATED) { ++ // Application can recover from this error. More info ++ // https://msdn.microsoft.com/en-us/library/windows/desktop/dd316605(v=vs.85).aspx ++ LOG("Device invalidated error, reset default device"); ++ wasapi_stream_reset_default_device(stm); ++ return true; ++ } ++ + if (FAILED(hr)) { +- LOG("Failed to get padding: %x", hr); ++ LOG("Failed to get padding: %lx", hr); + return false; + } ++ + XASSERT(padding_out <= stm->output_buffer_frame_count); + + if (stm->draining) { +@@ -639,7 +983,7 @@ bool get_output_buffer(cubeb_stream * stm, float *& buffer, size_t & frame_count + return false; + } + +- buffer = reinterpret_cast(output_buffer); ++ buffer = output_buffer; + + return true; + } +@@ -651,7 +995,7 @@ bool + refill_callback_duplex(cubeb_stream * stm) + { + HRESULT hr; +- float * output_buffer = nullptr; ++ void * output_buffer = nullptr; + size_t output_frames = 0; + size_t input_frames; + bool rv; +@@ -663,7 +1007,7 @@ refill_callback_duplex(cubeb_stream * stm) + return rv; + } + +- input_frames = stm->linear_input_buffer.length() / stm->input_stream_params.channels; ++ input_frames = stm->linear_input_buffer->length() / stm->input_stream_params.channels; + if (!input_frames) { + return true; + } +@@ -680,29 +1024,43 @@ refill_callback_duplex(cubeb_stream * stm) + return true; + } + +- // When WASAPI has not filled the input buffer yet, send silence. +- double output_duration = double(output_frames) / stm->output_mix_params.rate; +- double input_duration = double(stm->linear_input_buffer.length() / stm->input_stream_params.channels) / stm->input_mix_params.rate; +- if (input_duration < output_duration) { +- size_t padding = size_t(round((output_duration - input_duration) * stm->input_mix_params.rate)); +- LOG("padding silence: out=%f in=%f pad=%u", output_duration, input_duration, padding); +- stm->linear_input_buffer.push_front_silence(padding * stm->input_stream_params.channels); ++ /* Wait for draining is not important on duplex. */ ++ if (stm->draining) { ++ return false; + } + +- LOGV("Duplex callback: input frames: %zu, output frames: %zu", +- stm->linear_input_buffer.length(), output_frames); ++ if (stm->has_dummy_output) { ++ ALOGV("Duplex callback (dummy output): input frames: %Iu, output frames: %Iu", ++ input_frames, output_frames); + +- refill(stm, +- stm->linear_input_buffer.data(), +- stm->linear_input_buffer.length(), +- output_buffer, +- output_frames); ++ // We don't want to expose the dummy output to the callback so don't pass ++ // the output buffer (it will be released later with silence in it) ++ refill(stm, ++ stm->linear_input_buffer->data(), ++ input_frames, ++ nullptr, ++ 0); ++ } else { ++ ALOGV("Duplex callback: input frames: %Iu, output frames: %Iu", ++ input_frames, output_frames); + +- stm->linear_input_buffer.clear(); ++ refill(stm, ++ stm->linear_input_buffer->data(), ++ input_frames, ++ output_buffer, ++ output_frames); ++ } + +- hr = stm->render_client->ReleaseBuffer(output_frames, 0); ++ stm->linear_input_buffer->clear(); ++ ++ if (stm->has_dummy_output) { ++ // If output is a dummy output, make sure it's silent ++ hr = stm->render_client->ReleaseBuffer(output_frames, AUDCLNT_BUFFERFLAGS_SILENT); ++ } else { ++ hr = stm->render_client->ReleaseBuffer(output_frames, 0); ++ } + if (FAILED(hr)) { +- LOG("failed to release buffer: %x", hr); ++ LOG("failed to release buffer: %lx", hr); + return false; + } + return true; +@@ -711,7 +1069,8 @@ refill_callback_duplex(cubeb_stream * stm) + bool + refill_callback_input(cubeb_stream * stm) + { +- bool rv, consumed_all_buffer; ++ bool rv; ++ size_t input_frames; + + XASSERT(has_input(stm) && !has_output(stm)); + +@@ -720,24 +1079,24 @@ refill_callback_input(cubeb_stream * stm) + return rv; + } + +- // This can happen at the very beginning of the stream. +- if (!stm->linear_input_buffer.length()) { ++ input_frames = stm->linear_input_buffer->length() / stm->input_stream_params.channels; ++ if (!input_frames) { + return true; + } + +- LOGV("Input callback: input frames: %zu", stm->linear_input_buffer.length()); ++ ALOGV("Input callback: input frames: %Iu", input_frames); + + long read = refill(stm, +- stm->linear_input_buffer.data(), +- stm->linear_input_buffer.length(), ++ stm->linear_input_buffer->data(), ++ input_frames, + nullptr, + 0); + +- consumed_all_buffer = read == stm->linear_input_buffer.length(); ++ XASSERT(read >= 0); + +- stm->linear_input_buffer.clear(); ++ stm->linear_input_buffer->clear(); + +- return consumed_all_buffer; ++ return !stm->draining; + } + + bool +@@ -745,7 +1104,7 @@ refill_callback_output(cubeb_stream * stm) + { + bool rv; + HRESULT hr; +- float * output_buffer = nullptr; ++ void * output_buffer = nullptr; + size_t output_frames = 0; + + XASSERT(!has_input(stm) && has_output(stm)); +@@ -765,19 +1124,19 @@ refill_callback_output(cubeb_stream * stm) + output_buffer, + output_frames); + +- LOGV("Output callback: output frames requested: %zu, got %ld", +- output_frames, got); ++ ALOGV("Output callback: output frames requested: %Iu, got %ld", ++ output_frames, got); + + XASSERT(got >= 0); +- XASSERT(got == output_frames || stm->draining); ++ XASSERT(size_t(got) == output_frames || stm->draining); + + hr = stm->render_client->ReleaseBuffer(got, 0); + if (FAILED(hr)) { +- LOG("failed to release buffer: %x", hr); ++ LOG("failed to release buffer: %lx", hr); + return false; + } + +- return got == output_frames || stm->draining; ++ return size_t(got) == output_frames || stm->draining; + } + + static unsigned int __stdcall +@@ -786,6 +1145,13 @@ wasapi_stream_render_loop(LPVOID stream) + cubeb_stream * stm = static_cast(stream); + std::atomic * emergency_bailout = stm->emergency_bailout; + ++ // Signal wasapi_stream_start that we've copied emergency_bailout. ++ BOOL ok = SetEvent(stm->thread_ready_event); ++ if (!ok) { ++ LOG("thread_ready SetEvent failed: %lx", GetLastError()); ++ return 0; ++ } ++ + bool is_playing = true; + HANDLE wait_array[4] = { + stm->shutdown_event, +@@ -796,25 +1162,22 @@ wasapi_stream_render_loop(LPVOID stream) + HANDLE mmcss_handle = NULL; + HRESULT hr = 0; + DWORD mmcss_task_index = 0; +- auto_com com; +- if (!com.ok()) { +- LOG("COM initialization failed on render_loop thread."); +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); +- return 0; +- } ++ struct auto_com { ++ auto_com() { ++ HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); ++ XASSERT(SUCCEEDED(hr)); ++ } ++ ~auto_com() { ++ CoUninitialize(); ++ } ++ } com; + + /* We could consider using "Pro Audio" here for WebAudio and + maybe WebRTC. */ +- mmcss_handle = +- stm->context->set_mm_thread_characteristics("Audio", &mmcss_task_index); ++ mmcss_handle = AvSetMmThreadCharacteristicsA("Audio", &mmcss_task_index); + if (!mmcss_handle) { + /* This is not fatal, but we might glitch under heavy load. */ +- LOG("Unable to use mmcss to bump the render thread priority: %x", GetLastError()); +- } +- +- // This has already been nulled out, simply exit. +- if (!emergency_bailout) { +- is_playing = false; ++ LOG("Unable to use mmcss to bump the render thread priority: %lx", GetLastError()); + } + + /* WaitForMultipleObjects timeout can trigger in cases where we don't want to +@@ -822,7 +1185,7 @@ wasapi_stream_render_loop(LPVOID stream) + the timeout error handling only when the timeout_limit is reached, which is + reset on each successful loop. */ + unsigned timeout_count = 0; +- const unsigned timeout_limit = 5; ++ const unsigned timeout_limit = 3; + while (is_playing) { + // We want to check the emergency bailout variable before a + // and after the WaitForMultipleObject, because the handles WaitForMultipleObjects +@@ -883,18 +1246,28 @@ wasapi_stream_render_loop(LPVOID stream) + } + XASSERT(stm->output_client || stm->input_client); + if (stm->output_client) { +- stm->output_client->Start(); ++ hr = stm->output_client->Start(); ++ if (FAILED(hr)) { ++ LOG("Error starting output after reconfigure, error: %lx", hr); ++ is_playing = false; ++ continue; ++ } + LOG("Output started after reconfigure."); + } + if (stm->input_client) { +- stm->input_client->Start(); ++ hr = stm->input_client->Start(); ++ if (FAILED(hr)) { ++ LOG("Error starting input after reconfiguring, error: %lx", hr); ++ is_playing = false; ++ continue; ++ } + LOG("Input started after reconfigure."); + } + break; + } + case WAIT_OBJECT_0 + 2: /* refill */ +- XASSERT(has_input(stm) && has_output(stm) || +- !has_input(stm) && has_output(stm)); ++ XASSERT((has_input(stm) && has_output(stm)) || ++ (!has_input(stm) && has_output(stm))); + is_playing = stm->refill_callback(stm); + break; + case WAIT_OBJECT_0 + 3: /* input available */ +@@ -910,7 +1283,7 @@ wasapi_stream_render_loop(LPVOID stream) + } + break; + default: +- LOG("case %d not handled in render loop.", waitResult); ++ LOG("case %lu not handled in render loop.", waitResult); + abort(); + } + } +@@ -919,41 +1292,31 @@ wasapi_stream_render_loop(LPVOID stream) + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + } + +- stm->context->revert_mm_thread_characteristics(mmcss_handle); ++ if (mmcss_handle) { ++ AvRevertMmThreadCharacteristics(mmcss_handle); ++ } + + return 0; + } + + void wasapi_destroy(cubeb * context); + +-HANDLE WINAPI set_mm_thread_characteristics_noop(const char *, LPDWORD mmcss_task_index) +-{ +- return (HANDLE)1; +-} +- +-BOOL WINAPI revert_mm_thread_characteristics_noop(HANDLE mmcss_handle) +-{ +- return true; +-} +- + HRESULT register_notification_client(cubeb_stream * stm) + { + HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), + NULL, CLSCTX_INPROC_SERVER, +- IID_PPV_ARGS(&stm->device_enumerator)); ++ IID_PPV_ARGS(stm->device_enumerator.receive())); + if (FAILED(hr)) { +- LOG("Could not get device enumerator: %x", hr); ++ LOG("Could not get device enumerator: %lx", hr); + return hr; + } + +- stm->notification_client = new wasapi_endpoint_notification_client(stm->reconfigure_event); ++ stm->notification_client.reset(new wasapi_endpoint_notification_client(stm->reconfigure_event, stm->role)); + +- hr = stm->device_enumerator->RegisterEndpointNotificationCallback(stm->notification_client); ++ hr = stm->device_enumerator->RegisterEndpointNotificationCallback(stm->notification_client.get()); + if (FAILED(hr)) { +- LOG("Could not register endpoint notification callback: %x", hr); +- SafeRelease(stm->notification_client); ++ LOG("Could not register endpoint notification callback: %lx", hr); + stm->notification_client = nullptr; +- SafeRelease(stm->device_enumerator); + stm->device_enumerator = nullptr; + } + +@@ -969,62 +1332,93 @@ HRESULT unregister_notification_client(cubeb_stream * stm) + return S_OK; + } + +- hr = stm->device_enumerator->UnregisterEndpointNotificationCallback(stm->notification_client); ++ hr = stm->device_enumerator->UnregisterEndpointNotificationCallback(stm->notification_client.get()); ++ if (FAILED(hr)) { ++ // We can't really do anything here, we'll probably leak the ++ // notification client, but we can at least release the enumerator. ++ stm->device_enumerator = nullptr; ++ return S_OK; ++ } ++ ++ stm->notification_client = nullptr; ++ stm->device_enumerator = nullptr; ++ ++ return S_OK; ++} ++ ++HRESULT get_endpoint(com_ptr & device, LPCWSTR devid) ++{ ++ com_ptr enumerator; ++ HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), ++ NULL, CLSCTX_INPROC_SERVER, ++ IID_PPV_ARGS(enumerator.receive())); ++ if (FAILED(hr)) { ++ LOG("Could not get device enumerator: %lx", hr); ++ return hr; ++ } ++ ++ hr = enumerator->GetDevice(devid, device.receive()); + if (FAILED(hr)) { +- // We can't really do anything here, we'll probably leak the +- // notification client, but we can at least release the enumerator. +- SafeRelease(stm->device_enumerator); +- return S_OK; ++ LOG("Could not get device: %lx", hr); ++ return hr; + } + +- SafeRelease(stm->notification_client); +- SafeRelease(stm->device_enumerator); +- + return S_OK; + } + +-HRESULT get_endpoint(IMMDevice ** device, LPCWSTR devid) ++HRESULT register_collection_notification_client(cubeb * context) + { +- IMMDeviceEnumerator * enumerator; + HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), + NULL, CLSCTX_INPROC_SERVER, +- IID_PPV_ARGS(&enumerator)); ++ IID_PPV_ARGS(context->device_collection_enumerator.receive())); + if (FAILED(hr)) { +- LOG("Could not get device enumerator: %x", hr); ++ LOG("Could not get device enumerator: %lx", hr); + return hr; + } + +- hr = enumerator->GetDevice(devid, device); ++ context->collection_notification_client.reset(new wasapi_collection_notification_client(context)); ++ ++ hr = context->device_collection_enumerator->RegisterEndpointNotificationCallback( ++ context->collection_notification_client.get()); ++ if (FAILED(hr)) { ++ LOG("Could not register endpoint notification callback: %lx", hr); ++ context->collection_notification_client.reset(); ++ context->device_collection_enumerator.reset(); ++ } ++ ++ return hr; ++} ++ ++HRESULT unregister_collection_notification_client(cubeb * context) ++{ ++ HRESULT hr = context->device_collection_enumerator-> ++ UnregisterEndpointNotificationCallback(context->collection_notification_client.get()); + if (FAILED(hr)) { +- LOG("Could not get device: %x", hr); +- SafeRelease(enumerator); + return hr; + } + +- SafeRelease(enumerator); ++ context->collection_notification_client = nullptr; ++ context->device_collection_enumerator = nullptr; + +- return S_OK; ++ return hr; + } + +-HRESULT get_default_endpoint(IMMDevice ** device, EDataFlow direction) ++HRESULT get_default_endpoint(com_ptr & device, EDataFlow direction, ERole role) + { +- IMMDeviceEnumerator * enumerator; ++ com_ptr enumerator; + HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), + NULL, CLSCTX_INPROC_SERVER, +- IID_PPV_ARGS(&enumerator)); ++ IID_PPV_ARGS(enumerator.receive())); + if (FAILED(hr)) { +- LOG("Could not get device enumerator: %x", hr); ++ LOG("Could not get device enumerator: %lx", hr); + return hr; + } +- hr = enumerator->GetDefaultAudioEndpoint(direction, eConsole, device); ++ hr = enumerator->GetDefaultAudioEndpoint(direction, role, device.receive()); + if (FAILED(hr)) { +- LOG("Could not get default audio endpoint: %x", hr); +- SafeRelease(enumerator); ++ LOG("Could not get default audio endpoint: %lx", hr); + return hr; + } + +- SafeRelease(enumerator); +- + return ERROR_SUCCESS; + } + +@@ -1043,14 +1437,14 @@ current_stream_delay(cubeb_stream * stm) + UINT64 freq; + HRESULT hr = stm->audio_clock->GetFrequency(&freq); + if (FAILED(hr)) { +- LOG("GetFrequency failed: %x", hr); ++ LOG("GetFrequency failed: %lx", hr); + return 0; + } + + UINT64 pos; + hr = stm->audio_clock->GetPosition(&pos, NULL); + if (FAILED(hr)) { +- LOG("GetPosition failed: %x", hr); ++ LOG("GetPosition failed: %lx", hr); + return 0; + } + +@@ -1073,8 +1467,8 @@ stream_set_volume(cubeb_stream * stm, float volume) + + uint32_t channels; + HRESULT hr = stm->audio_stream_volume->GetChannelCount(&channels); +- if (hr != S_OK) { +- LOG("could not get the channel count: %x", hr); ++ if (FAILED(hr)) { ++ LOG("could not get the channel count: %lx", hr); + return CUBEB_ERROR; + } + +@@ -1089,8 +1483,8 @@ stream_set_volume(cubeb_stream * stm, float volume) + } + + hr = stm->audio_stream_volume->SetAllVolumes(channels, volumes); +- if (hr != S_OK) { +- LOG("could not set the channels volume: %x", hr); ++ if (FAILED(hr)) { ++ LOG("could not set the channels volume: %lx", hr); + return CUBEB_ERROR; + } + +@@ -1101,49 +1495,27 @@ stream_set_volume(cubeb_stream * stm, float volume) + extern "C" { + int wasapi_init(cubeb ** context, char const * context_name) + { +- HRESULT hr; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } +- + /* We don't use the device yet, but need to make sure we can initialize one + so that this backend is not incorrectly enabled on platforms that don't + support WASAPI. */ +- IMMDevice * device; +- hr = get_default_endpoint(&device, eRender); ++ com_ptr device; ++ HRESULT hr = get_default_endpoint(device, eRender, eConsole); + if (FAILED(hr)) { +- LOG("Could not get device: %x", hr); +- return CUBEB_ERROR; ++ XASSERT(hr != CO_E_NOTINITIALIZED); ++ LOG("It wasn't able to find a default rendering device: %lx", hr); ++ hr = get_default_endpoint(device, eCapture, eConsole); ++ if (FAILED(hr)) { ++ LOG("It wasn't able to find a default capture device: %lx", hr); ++ return CUBEB_ERROR; ++ } + } +- SafeRelease(device); + +- cubeb * ctx = (cubeb *)calloc(1, sizeof(cubeb)); +- if (!ctx) { +- return CUBEB_ERROR; +- } ++ cubeb * ctx = new cubeb(); + + ctx->ops = &wasapi_ops; +- +- ctx->mmcss_module = LoadLibraryA("Avrt.dll"); +- +- if (ctx->mmcss_module) { +- ctx->set_mm_thread_characteristics = +- (set_mm_thread_characteristics_function) GetProcAddress( +- ctx->mmcss_module, "AvSetMmThreadCharacteristicsA"); +- ctx->revert_mm_thread_characteristics = +- (revert_mm_thread_characteristics_function) GetProcAddress( +- ctx->mmcss_module, "AvRevertMmThreadCharacteristics"); +- if (!(ctx->set_mm_thread_characteristics && ctx->revert_mm_thread_characteristics)) { +- LOG("Could not load AvSetMmThreadCharacteristics or AvRevertMmThreadCharacteristics: %x", GetLastError()); +- FreeLibrary(ctx->mmcss_module); +- } +- } else { +- // This is not a fatal error, but we might end up glitching when +- // the system is under high load. +- LOG("Could not load Avrt.dll"); +- ctx->set_mm_thread_characteristics = &set_mm_thread_characteristics_noop; +- ctx->revert_mm_thread_characteristics = &revert_mm_thread_characteristics_noop; ++ if (cubeb_strings_init(&ctx->device_ids) != CUBEB_OK) { ++ delete ctx; ++ return CUBEB_ERROR; + } + + *context = ctx; +@@ -1170,31 +1542,22 @@ bool stop_and_join_render_thread(cubeb_stream * stm) + + BOOL ok = SetEvent(stm->shutdown_event); + if (!ok) { +- LOG("Destroy SetEvent failed: %d", GetLastError()); ++ LOG("Destroy SetEvent failed: %lx", GetLastError()); + } + + /* Wait five seconds for the rendering thread to return. It's supposed to + * check its event loop very often, five seconds is rather conservative. */ + DWORD r = WaitForSingleObject(stm->thread, 5000); +- if (r == WAIT_TIMEOUT) { ++ if (r != WAIT_OBJECT_0) { + /* Something weird happened, leak the thread and continue the shutdown + * process. */ + *(stm->emergency_bailout) = true; + // We give the ownership to the rendering thread. + stm->emergency_bailout = nullptr; +- LOG("Destroy WaitForSingleObject on thread timed out," +- " leaking the thread: %d", GetLastError()); +- rv = false; +- } +- if (r == WAIT_FAILED) { +- *(stm->emergency_bailout) = true; +- // We give the ownership to the rendering thread. +- stm->emergency_bailout = nullptr; +- LOG("Destroy WaitForSingleObject on thread failed: %d", GetLastError()); ++ LOG("Destroy WaitForSingleObject on thread failed: %lx, %lx", r, GetLastError()); + rv = false; + } + +- + // Only attempts to close and null out the thread and event if the + // WaitForSingleObject above succeeded, so that calling this function again + // attemps to clean up the thread and event each time. +@@ -1212,10 +1575,11 @@ bool stop_and_join_render_thread(cubeb_stream * stm) + + void wasapi_destroy(cubeb * context) + { +- if (context->mmcss_module) { +- FreeLibrary(context->mmcss_module); ++ if (context->device_ids) { ++ cubeb_strings_destroy(context->device_ids); + } +- free(context); ++ ++ delete context; + } + + char const * wasapi_get_backend_id(cubeb * context) +@@ -1226,209 +1590,285 @@ char const * wasapi_get_backend_id(cubeb * context) + int + wasapi_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) + { +- HRESULT hr; +- IAudioClient * client; +- WAVEFORMATEX * mix_format; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } +- + XASSERT(ctx && max_channels); + +- IMMDevice * device; +- hr = get_default_endpoint(&device, eRender); ++ com_ptr device; ++ HRESULT hr = get_default_endpoint(device, eRender, eConsole); + if (FAILED(hr)) { + return CUBEB_ERROR; + } + ++ com_ptr client; + hr = device->Activate(__uuidof(IAudioClient), + CLSCTX_INPROC_SERVER, +- NULL, (void **)&client); +- SafeRelease(device); ++ NULL, client.receive_vpp()); + if (FAILED(hr)) { + return CUBEB_ERROR; + } + +- hr = client->GetMixFormat(&mix_format); ++ WAVEFORMATEX * tmp = nullptr; ++ hr = client->GetMixFormat(&tmp); + if (FAILED(hr)) { +- SafeRelease(client); + return CUBEB_ERROR; + } ++ com_heap_ptr mix_format(tmp); + + *max_channels = mix_format->nChannels; + +- CoTaskMemFree(mix_format); +- SafeRelease(client); +- + return CUBEB_OK; + } + + int + wasapi_get_min_latency(cubeb * ctx, cubeb_stream_params params, uint32_t * latency_frames) + { +- HRESULT hr; +- IAudioClient * client; +- REFERENCE_TIME default_period; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } +- +- if (params.format != CUBEB_SAMPLE_FLOAT32NE) { ++ if (params.format != CUBEB_SAMPLE_FLOAT32NE && params.format != CUBEB_SAMPLE_S16NE) { + return CUBEB_ERROR_INVALID_FORMAT; + } + +- IMMDevice * device; +- hr = get_default_endpoint(&device, eRender); ++ ERole role = pref_to_role(params.prefs); ++ ++ com_ptr device; ++ HRESULT hr = get_default_endpoint(device, eRender, role); + if (FAILED(hr)) { +- LOG("Could not get default endpoint: %x", hr); ++ LOG("Could not get default endpoint: %lx", hr); + return CUBEB_ERROR; + } + ++ com_ptr client; + hr = device->Activate(__uuidof(IAudioClient), + CLSCTX_INPROC_SERVER, +- NULL, (void **)&client); +- SafeRelease(device); ++ NULL, client.receive_vpp()); + if (FAILED(hr)) { +- LOG("Could not activate device for latency: %x", hr); ++ LOG("Could not activate device for latency: %lx", hr); + return CUBEB_ERROR; + } + +- /* The second parameter is for exclusive mode, that we don't use. */ +- hr = client->GetDevicePeriod(&default_period, NULL); ++ REFERENCE_TIME minimum_period; ++ REFERENCE_TIME default_period; ++ hr = client->GetDevicePeriod(&default_period, &minimum_period); + if (FAILED(hr)) { +- SafeRelease(client); +- LOG("Could not get device period: %x", hr); ++ LOG("Could not get device period: %lx", hr); + return CUBEB_ERROR; + } + +- LOG("default device period: %lld", default_period); ++ LOG("default device period: %I64d, minimum device period: %I64d", default_period, minimum_period); + +- /* According to the docs, the best latency we can achieve is by synchronizing +- the stream and the engine. ++ /* If we're on Windows 10, we can use IAudioClient3 to get minimal latency. ++ Otherwise, according to the docs, the best latency we can achieve is by ++ synchronizing the stream and the engine. + http://msdn.microsoft.com/en-us/library/windows/desktop/dd370871%28v=vs.85%29.aspx */ + +- *latency_frames = hns_to_frames(params.rate, default_period); ++ #ifdef _WIN32_WINNT_WIN10 ++ *latency_frames = hns_to_frames(params.rate, minimum_period); ++ #else ++ *latency_frames = hns_to_frames(params.rate, default_period); ++ #endif + + LOG("Minimum latency in frames: %u", *latency_frames); + +- SafeRelease(client); +- + return CUBEB_OK; + } + + int + wasapi_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) + { +- HRESULT hr; +- IAudioClient * client; +- WAVEFORMATEX * mix_format; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } +- +- IMMDevice * device; +- hr = get_default_endpoint(&device, eRender); ++ com_ptr device; ++ HRESULT hr = get_default_endpoint(device, eRender, eConsole); + if (FAILED(hr)) { + return CUBEB_ERROR; + } + ++ com_ptr client; + hr = device->Activate(__uuidof(IAudioClient), + CLSCTX_INPROC_SERVER, +- NULL, (void **)&client); +- SafeRelease(device); ++ NULL, client.receive_vpp()); + if (FAILED(hr)) { + return CUBEB_ERROR; + } + +- hr = client->GetMixFormat(&mix_format); ++ WAVEFORMATEX * tmp = nullptr; ++ hr = client->GetMixFormat(&tmp); + if (FAILED(hr)) { +- SafeRelease(client); + return CUBEB_ERROR; + } ++ com_heap_ptr mix_format(tmp); + + *rate = mix_format->nSamplesPerSec; + + LOG("Preferred sample rate for output: %u", *rate); + +- CoTaskMemFree(mix_format); +- SafeRelease(client); +- + return CUBEB_OK; + } + + void wasapi_stream_destroy(cubeb_stream * stm); + +-/* Based on the mix format and the stream format, try to find a way to play +- what the user requested. */ + static void +-handle_channel_layout(cubeb_stream * stm, WAVEFORMATEX ** mix_format, const cubeb_stream_params * stream_params) ++waveformatex_update_derived_properties(WAVEFORMATEX * format) + { +- /* Common case: the hardware is stereo. Up-mixing and down-mixing will be +- handled in the callback. */ +- if ((*mix_format)->nChannels <= 2) { +- return; ++ format->nBlockAlign = format->wBitsPerSample * format->nChannels / 8; ++ format->nAvgBytesPerSec = format->nSamplesPerSec * format->nBlockAlign; ++ if (format->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { ++ WAVEFORMATEXTENSIBLE * format_pcm = reinterpret_cast(format); ++ format_pcm->Samples.wValidBitsPerSample = format->wBitsPerSample; + } ++} + ++/* Based on the mix format and the stream format, try to find a way to play ++ what the user requested. */ ++static void ++handle_channel_layout(cubeb_stream * stm, EDataFlow direction, com_heap_ptr & mix_format, const cubeb_stream_params * stream_params) ++{ ++ com_ptr & audio_client = (direction == eRender) ? stm->output_client : stm->input_client; ++ XASSERT(audio_client); + /* The docs say that GetMixFormat is always of type WAVEFORMATEXTENSIBLE [1], + so the reinterpret_cast below should be safe. In practice, this is not + true, and we just want to bail out and let the rest of the code find a good + conversion path instead of trying to make WASAPI do it by itself. + [1]: http://msdn.microsoft.com/en-us/library/windows/desktop/dd370811%28v=vs.85%29.aspx*/ +- if ((*mix_format)->wFormatTag != WAVE_FORMAT_EXTENSIBLE) { ++ if (mix_format->wFormatTag != WAVE_FORMAT_EXTENSIBLE) { + return; + } + +- WAVEFORMATEXTENSIBLE * format_pcm = reinterpret_cast(*mix_format); ++ WAVEFORMATEXTENSIBLE * format_pcm = reinterpret_cast(mix_format.get()); + + /* Stash a copy of the original mix format in case we need to restore it later. */ + WAVEFORMATEXTENSIBLE hw_mix_format = *format_pcm; + +- /* The hardware is in surround mode, we want to only use front left and front +- right. Try that, and check if it works. */ +- switch (stream_params->channels) { +- case 1: /* Mono */ +- format_pcm->dwChannelMask = KSAUDIO_SPEAKER_MONO; +- break; +- case 2: /* Stereo */ +- format_pcm->dwChannelMask = KSAUDIO_SPEAKER_STEREO; +- break; +- default: +- XASSERT(false && "Channel layout not supported."); +- break; +- } +- (*mix_format)->nChannels = stream_params->channels; +- (*mix_format)->nBlockAlign = ((*mix_format)->wBitsPerSample * (*mix_format)->nChannels) / 8; +- (*mix_format)->nAvgBytesPerSec = (*mix_format)->nSamplesPerSec * (*mix_format)->nBlockAlign; +- format_pcm->SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; +- (*mix_format)->wBitsPerSample = 32; +- format_pcm->Samples.wValidBitsPerSample = (*mix_format)->wBitsPerSample; ++ /* Get the channel mask by the channel layout. ++ If the layout is not supported, we will get a closest settings below. */ ++ format_pcm->dwChannelMask = stream_params->layout; ++ mix_format->nChannels = stream_params->channels; ++ waveformatex_update_derived_properties(mix_format.get()); + + /* Check if wasapi will accept our channel layout request. */ + WAVEFORMATEX * closest; +- HRESULT hr = stm->output_client->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, +- *mix_format, +- &closest); ++ HRESULT hr = audio_client->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, ++ mix_format.get(), ++ &closest); + if (hr == S_FALSE) { +- /* Not supported, but WASAPI gives us a suggestion. Use it, and handle the +- eventual upmix/downmix ourselves */ ++ /* Channel layout not supported, but WASAPI gives us a suggestion. Use it, ++ and handle the eventual upmix/downmix ourselves. Ignore the subformat of ++ the suggestion, since it seems to always be IEEE_FLOAT. */ + LOG("Using WASAPI suggested format: channels: %d", closest->nChannels); ++ XASSERT(closest->wFormatTag == WAVE_FORMAT_EXTENSIBLE); + WAVEFORMATEXTENSIBLE * closest_pcm = reinterpret_cast(closest); +- XASSERT(closest_pcm->SubFormat == format_pcm->SubFormat); +- CoTaskMemFree(*mix_format); +- *mix_format = closest; ++ format_pcm->dwChannelMask = closest_pcm->dwChannelMask; ++ mix_format->nChannels = closest->nChannels; ++ waveformatex_update_derived_properties(mix_format.get()); + } else if (hr == AUDCLNT_E_UNSUPPORTED_FORMAT) { + /* Not supported, no suggestion. This should not happen, but it does in the + field with some sound cards. We restore the mix format, and let the rest + of the code figure out the right conversion path. */ +- *reinterpret_cast(*mix_format) = hw_mix_format; ++ XASSERT(mix_format->wFormatTag == WAVE_FORMAT_EXTENSIBLE); ++ *reinterpret_cast(mix_format.get()) = hw_mix_format; + } else if (hr == S_OK) { + LOG("Requested format accepted by WASAPI."); + } else { +- LOG("IsFormatSupported unhandled error: %x", hr); ++ LOG("IsFormatSupported unhandled error: %lx", hr); ++ } ++} ++ ++static bool ++initialize_iaudioclient3(com_ptr & audio_client, ++ cubeb_stream * stm, ++ const com_heap_ptr & mix_format, ++ DWORD flags, ++ EDataFlow direction) ++{ ++ com_ptr audio_client3; ++ audio_client->QueryInterface(audio_client3.receive()); ++ if (!audio_client3) { ++ LOG("Could not get IAudioClient3 interface"); ++ return false; ++ } ++ ++ if (flags & AUDCLNT_STREAMFLAGS_LOOPBACK) { ++ // IAudioClient3 doesn't work with loopback streams, and will return error ++ // 88890021: AUDCLNT_E_INVALID_STREAM_FLAG ++ LOG("Audio stream is loopback, not using IAudioClient3"); ++ return false; ++ } ++ ++ // IAudioClient3 doesn't support AUDCLNT_STREAMFLAGS_NOPERSIST, and will return ++ // AUDCLNT_E_INVALID_STREAM_FLAG. This is undocumented. ++ flags = flags ^ AUDCLNT_STREAMFLAGS_NOPERSIST; ++ ++ // Some people have reported glitches with capture streams: ++ // http://blog.nirbheek.in/2018/03/low-latency-audio-on-windows-with.html ++ if (direction == eCapture) { ++ LOG("Audio stream is capture, not using IAudioClient3"); ++ return false; ++ } ++ ++ // Possibly initialize a shared-mode stream using IAudioClient3. Initializing ++ // a stream this way lets you request lower latencies, but also locks the global ++ // WASAPI engine at that latency. ++ // - If we request a shared-mode stream, streams created with IAudioClient will ++ // have their latency adjusted to match. When the shared-mode stream is ++ // closed, they'll go back to normal. ++ // - If there's already a shared-mode stream running, then we cannot request ++ // the engine change to a different latency - we have to match it. ++ // - It's antisocial to lock the WASAPI engine at its default latency. If we ++ // would do this, then stop and use IAudioClient instead. ++ ++ HRESULT hr; ++ uint32_t default_period = 0, fundamental_period = 0, min_period = 0, max_period = 0; ++ hr = audio_client3->GetSharedModeEnginePeriod(mix_format.get(), &default_period, &fundamental_period, &min_period, &max_period); ++ if (FAILED(hr)) { ++ LOG("Could not get shared mode engine period: error: %lx", hr); ++ return false; ++ } ++ uint32_t requested_latency = stm->latency; ++ if (requested_latency >= default_period) { ++ LOG("Requested latency %i greater than default latency %i, not using IAudioClient3", requested_latency, default_period); ++ return false; ++ } ++ LOG("Got shared mode engine period: default=%i fundamental=%i min=%i max=%i", default_period, fundamental_period, min_period, max_period); ++ // Snap requested latency to a valid value ++ uint32_t old_requested_latency = requested_latency; ++ if (requested_latency < min_period) { ++ requested_latency = min_period; ++ } ++ requested_latency -= (requested_latency - min_period) % fundamental_period; ++ if (requested_latency != old_requested_latency) { ++ LOG("Requested latency %i was adjusted to %i", old_requested_latency, requested_latency); ++ } ++ ++ hr = audio_client3->InitializeSharedAudioStream(flags, requested_latency, mix_format.get(), NULL); ++ if (SUCCEEDED(hr)) { ++ return true; ++ } ++ else if (hr == AUDCLNT_E_ENGINE_PERIODICITY_LOCKED) { ++ LOG("Got AUDCLNT_E_ENGINE_PERIODICITY_LOCKED, adjusting latency request"); ++ } else { ++ LOG("Could not initialize shared stream with IAudioClient3: error: %lx", hr); ++ return false; ++ } ++ ++ uint32_t current_period = 0; ++ WAVEFORMATEX* current_format = nullptr; ++ // We have to pass a valid WAVEFORMATEX** and not nullptr, otherwise ++ // GetCurrentSharedModeEnginePeriod will return E_POINTER ++ hr = audio_client3->GetCurrentSharedModeEnginePeriod(¤t_format, ¤t_period); ++ CoTaskMemFree(current_format); ++ if (FAILED(hr)) { ++ LOG("Could not get current shared mode engine period: error: %lx", hr); ++ return false; ++ } ++ ++ if (current_period >= default_period) { ++ LOG("Current shared mode engine period %i too high, not using IAudioClient", current_period); ++ return false; ++ } ++ ++ hr = audio_client3->InitializeSharedAudioStream(flags, current_period, mix_format.get(), NULL); ++ if (SUCCEEDED(hr)) { ++ LOG("Current shared mode engine period is %i instead of requested %i", current_period, requested_latency); ++ return true; + } ++ ++ LOG("Could not initialize shared stream with IAudioClient3: error: %lx", hr); ++ return false; + } + + #define DIRECTION_NAME (direction == eCapture ? "capture" : "render") +@@ -1436,18 +1876,22 @@ handle_channel_layout(cubeb_stream * stm, WAVEFORMATEX ** mix_format, const cub + template + int setup_wasapi_stream_one_side(cubeb_stream * stm, + cubeb_stream_params * stream_params, +- cubeb_devid devid, ++ wchar_t const * devid, + EDataFlow direction, + REFIID riid, +- IAudioClient ** audio_client, ++ com_ptr & audio_client, + uint32_t * buffer_frame_count, + HANDLE & event, +- T ** render_or_capture_client, ++ T & render_or_capture_client, + cubeb_stream_params * mix_params) + { +- IMMDevice * device; +- WAVEFORMATEX * mix_format; ++ com_ptr device; + HRESULT hr; ++ bool is_loopback = stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK; ++ if (is_loopback && direction != eCapture) { ++ LOG("Loopback pref can only be used with capture streams!\n"); ++ return CUBEB_ERROR; ++ } + + stm->stream_reset_lock.assert_current_thread_owns(); + bool try_again = false; +@@ -1455,35 +1899,46 @@ int setup_wasapi_stream_one_side(cubeb_stream * stm, + // possibilities. + do { + if (devid) { +- std::unique_ptr id(utf8_to_wstr(reinterpret_cast(devid))); +- hr = get_endpoint(&device, id.get()); ++ hr = get_endpoint(device, devid); + if (FAILED(hr)) { +- LOG("Could not get %s endpoint, error: %x\n", DIRECTION_NAME, hr); ++ LOG("Could not get %s endpoint, error: %lx\n", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } +- } +- else { +- hr = get_default_endpoint(&device, direction); ++ } else { ++ // If caller has requested loopback but not specified a device, look for ++ // the default render device. Otherwise look for the default device ++ // appropriate to the direction. ++ hr = get_default_endpoint(device, is_loopback ? eRender : direction, pref_to_role(stream_params->prefs)); + if (FAILED(hr)) { +- LOG("Could not get default %s endpoint, error: %x\n", DIRECTION_NAME, hr); ++ if (is_loopback) { ++ LOG("Could not get default render endpoint for loopback, error: %lx\n", hr); ++ } else { ++ LOG("Could not get default %s endpoint, error: %lx\n", DIRECTION_NAME, hr); ++ } + return CUBEB_ERROR; + } + } + + /* Get a client. We will get all other interfaces we need from + * this pointer. */ +- hr = device->Activate(__uuidof(IAudioClient), +- CLSCTX_INPROC_SERVER, +- NULL, (void **)audio_client); +- SafeRelease(device); ++ // hr = device->Activate(__uuidof(IAudioClient3), ++ // CLSCTX_INPROC_SERVER, ++ // NULL, audio_client.receive_vpp()); ++ // if (hr == E_NOINTERFACE) { ++ hr = device->Activate(__uuidof(IAudioClient), ++ CLSCTX_INPROC_SERVER, ++ NULL, audio_client.receive_vpp()); ++ //} ++ + if (FAILED(hr)) { + LOG("Could not activate the device to get an audio" +- " client for %s: error: %x\n", DIRECTION_NAME, hr); ++ " client for %s: error: %lx\n", DIRECTION_NAME, hr); + // A particular device can't be activated because it has been + // unplugged, try fall back to the default audio device. + if (devid && hr == AUDCLNT_E_DEVICE_INVALIDATED) { + LOG("Trying again with the default %s audio device.", DIRECTION_NAME); + devid = nullptr; ++ device = nullptr; + try_again = true; + } else { + return CUBEB_ERROR; +@@ -1495,62 +1950,85 @@ int setup_wasapi_stream_one_side(cubeb_stream * stm, + + /* We have to distinguish between the format the mixer uses, + * and the format the stream we want to play uses. */ +- hr = (*audio_client)->GetMixFormat(&mix_format); ++ WAVEFORMATEX * tmp = nullptr; ++ hr = audio_client->GetMixFormat(&tmp); + if (FAILED(hr)) { + LOG("Could not fetch current mix format from the audio" +- " client for %s: error: %x", DIRECTION_NAME, hr); ++ " client for %s: error: %lx", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } ++ com_heap_ptr mix_format(tmp); + +- handle_channel_layout(stm, &mix_format, stream_params); ++ mix_format->wBitsPerSample = stm->bytes_per_sample * 8; ++ if (mix_format->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { ++ WAVEFORMATEXTENSIBLE * format_pcm = reinterpret_cast(mix_format.get()); ++ format_pcm->SubFormat = stm->waveformatextensible_sub_format; ++ } ++ waveformatex_update_derived_properties(mix_format.get()); ++ ++ /* Set channel layout only when there're more than two channels. Otherwise, ++ * use the default setting retrieved from the stream format of the audio ++ * engine's internal processing by GetMixFormat. */ ++ if (mix_format->nChannels > 2) { ++ handle_channel_layout(stm, direction, mix_format, stream_params); ++ } + +- /* Shared mode WASAPI always supports float32 sample format, so this +- * is safe. */ +- mix_params->format = CUBEB_SAMPLE_FLOAT32NE; ++ mix_params->format = stream_params->format; + mix_params->rate = mix_format->nSamplesPerSec; + mix_params->channels = mix_format->nChannels; +- LOG("Setup requested=[f=%d r=%u c=%u] mix=[f=%d r=%u c=%u]", ++ mix_params->layout = mask_to_channel_layout(mix_format.get()); ++ ++ LOG("Setup requested=[f=%d r=%u c=%u l=%u] mix=[f=%d r=%u c=%u l=%u]", + stream_params->format, stream_params->rate, stream_params->channels, +- mix_params->format, mix_params->rate, mix_params->channels); +- +- hr = (*audio_client)->Initialize(AUDCLNT_SHAREMODE_SHARED, +- AUDCLNT_STREAMFLAGS_EVENTCALLBACK | +- AUDCLNT_STREAMFLAGS_NOPERSIST, +- frames_to_hns(stm, stm->latency), +- 0, +- mix_format, +- NULL); ++ stream_params->layout, ++ mix_params->format, mix_params->rate, mix_params->channels, ++ mix_params->layout); ++ ++ DWORD flags = AUDCLNT_STREAMFLAGS_NOPERSIST; ++ ++ // Check if a loopback device should be requested. Note that event callbacks ++ // do not work with loopback devices, so only request these if not looping. ++ if (is_loopback) { ++ flags |= AUDCLNT_STREAMFLAGS_LOOPBACK; ++ } else { ++ flags |= AUDCLNT_STREAMFLAGS_EVENTCALLBACK; ++ } ++ ++ // if (initialize_iaudioclient3(audio_client, stm, mix_format, flags, direction)) { ++ // LOG("Initialized with IAudioClient3"); ++ // } else { ++ hr = audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, ++ flags, ++ frames_to_hns(stm, stm->latency), ++ 0, ++ mix_format.get(), ++ NULL); ++ // } + if (FAILED(hr)) { +- LOG("Unable to initialize audio client for %s: %x.", DIRECTION_NAME, hr); ++ LOG("Unable to initialize audio client for %s: %lx.", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } + +- CoTaskMemFree(mix_format); +- +- hr = (*audio_client)->GetBufferSize(buffer_frame_count); ++ hr = audio_client->GetBufferSize(buffer_frame_count); + if (FAILED(hr)) { + LOG("Could not get the buffer size from the client" +- " for %s %x.", DIRECTION_NAME, hr); ++ " for %s %lx.", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } + +- // Input is up/down mixed when depacketized in get_input_buffer. +- if (has_output(stm) && +- (should_upmix(*stream_params, *mix_params) || +- should_downmix(*stream_params, *mix_params))) { +- stm->mix_buffer = (float *)malloc(frames_to_bytes_before_mix(stm, *buffer_frame_count)); +- } +- +- hr = (*audio_client)->SetEventHandle(event); +- if (FAILED(hr)) { +- LOG("Could set the event handle for the %s client %x.", +- DIRECTION_NAME, hr); +- return CUBEB_ERROR; ++ // Events are used if not looping back ++ if (!is_loopback) { ++ hr = audio_client->SetEventHandle(event); ++ if (FAILED(hr)) { ++ LOG("Could set the event handle for the %s client %lx.", ++ DIRECTION_NAME, hr); ++ return CUBEB_ERROR; ++ } + } + +- hr = (*audio_client)->GetService(riid, (void **)render_or_capture_client); ++ hr = audio_client->GetService(riid, render_or_capture_client.receive_vpp()); + if (FAILED(hr)) { +- LOG("Could not get the %s client %x.", DIRECTION_NAME, hr); ++ LOG("Could not get the %s client %lx.", DIRECTION_NAME, hr); + return CUBEB_ERROR; + } + +@@ -1561,66 +2039,94 @@ int setup_wasapi_stream_one_side(cubeb_stream * stm, + + int setup_wasapi_stream(cubeb_stream * stm) + { +- HRESULT hr; + int rv; + + stm->stream_reset_lock.assert_current_thread_owns(); + +- auto_com com; +- if (!com.ok()) { +- LOG("Failure to initialize COM."); +- return CUBEB_ERROR; +- } +- + XASSERT((!stm->output_client || !stm->input_client) && "WASAPI stream already setup, close it first."); + + if (has_input(stm)) { +- LOG("Setup capture: device=%x", (int)stm->input_device); ++ LOG("(%p) Setup capture: device=%p", stm, stm->input_device.get()); + rv = setup_wasapi_stream_one_side(stm, + &stm->input_stream_params, +- stm->input_device, ++ stm->input_device.get(), + eCapture, + __uuidof(IAudioCaptureClient), +- &stm->input_client, ++ stm->input_client, + &stm->input_buffer_frame_count, + stm->input_available_event, +- &stm->capture_client, ++ stm->capture_client, + &stm->input_mix_params); + if (rv != CUBEB_OK) { + LOG("Failure to open the input side."); + return rv; + } ++ ++ // We initializing an input stream, buffer ahead two buffers worth of silence. ++ // This delays the input side slightly, but allow to not glitch when no input ++ // is available when calling into the resampler to call the callback: the input ++ // refill event will be set shortly after to compensate for this lack of data. ++ // In debug, four buffers are used, to avoid tripping up assertions down the line. ++#if !defined(DEBUG) ++ const int silent_buffer_count = 2; ++#else ++ const int silent_buffer_count = 6; ++#endif ++ stm->linear_input_buffer->push_silence(stm->input_buffer_frame_count * ++ stm->input_stream_params.channels * ++ silent_buffer_count); ++ } ++ ++ // If we don't have an output device but are requesting a loopback device, ++ // we attempt to open that same device in output mode in order to drive the ++ // loopback via the output events. ++ stm->has_dummy_output = false; ++ if (!has_output(stm) && stm->input_stream_params.prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ stm->output_stream_params.rate = stm->input_stream_params.rate; ++ stm->output_stream_params.channels = stm->input_stream_params.channels; ++ stm->output_stream_params.layout = stm->input_stream_params.layout; ++ if (stm->input_device) { ++ size_t len = wcslen(stm->input_device.get()); ++ std::unique_ptr tmp(new wchar_t[len + 1]); ++ if (wcsncpy_s(tmp.get(), len + 1, stm->input_device.get(), len) != 0) { ++ LOG("Failed to copy device identifier while copying input stream" ++ " configuration to output stream configuration to drive loopback."); ++ return CUBEB_ERROR; ++ } ++ stm->output_device = move(tmp); ++ } ++ stm->has_dummy_output = true; + } + + if (has_output(stm)) { +- LOG("Setup render: device=%x", (int)stm->output_device); ++ LOG("(%p) Setup render: device=%p", stm, stm->output_device.get()); + rv = setup_wasapi_stream_one_side(stm, + &stm->output_stream_params, +- stm->output_device, ++ stm->output_device.get(), + eRender, + __uuidof(IAudioRenderClient), +- &stm->output_client, ++ stm->output_client, + &stm->output_buffer_frame_count, + stm->refill_event, +- &stm->render_client, ++ stm->render_client, + &stm->output_mix_params); + if (rv != CUBEB_OK) { + LOG("Failure to open the output side."); + return rv; + } + +- hr = stm->output_client->GetService(__uuidof(IAudioStreamVolume), +- (void **)&stm->audio_stream_volume); ++ HRESULT hr = stm->output_client->GetService(__uuidof(IAudioStreamVolume), ++ stm->audio_stream_volume.receive_vpp()); + if (FAILED(hr)) { +- LOG("Could not get the IAudioStreamVolume: %x", hr); ++ LOG("Could not get the IAudioStreamVolume: %lx", hr); + return CUBEB_ERROR; + } + + XASSERT(stm->frames_written == 0); + hr = stm->output_client->GetService(__uuidof(IAudioClock), +- (void **)&stm->audio_clock); ++ stm->audio_clock.receive_vpp()); + if (FAILED(hr)) { +- LOG("Could not get the IAudioClock: %x", hr); ++ LOG("Could not get the IAudioClock: %lx", hr); + return CUBEB_ERROR; + } + +@@ -1635,7 +2141,7 @@ int setup_wasapi_stream(cubeb_stream * stm) + * the highest sample rate available. */ + int32_t target_sample_rate; + if (has_input(stm) && has_output(stm)) { +- assert(stm->input_stream_params.rate == stm->output_stream_params.rate); ++ XASSERT(stm->input_stream_params.rate == stm->output_stream_params.rate); + target_sample_rate = stm->input_stream_params.rate; + } else if (has_input(stm)) { + target_sample_rate = stm->input_stream_params.rate; +@@ -1655,14 +2161,14 @@ int setup_wasapi_stream(cubeb_stream * stm) + cubeb_stream_params output_params = stm->output_mix_params; + output_params.channels = stm->output_stream_params.channels; + +- stm->resampler = ++ stm->resampler.reset( + cubeb_resampler_create(stm, + has_input(stm) ? &input_params : nullptr, + has_output(stm) ? &output_params : nullptr, + target_sample_rate, + stm->data_callback, + stm->user_ptr, +- CUBEB_RESAMPLER_QUALITY_DESKTOP); ++ CUBEB_RESAMPLER_QUALITY_DESKTOP)); + if (!stm->resampler) { + LOG("Could not get a resampler"); + return CUBEB_ERROR; +@@ -1678,9 +2184,52 @@ int setup_wasapi_stream(cubeb_stream * stm) + stm->refill_callback = refill_callback_output; + } + ++ // Create input mixer. ++ if (has_input(stm) && ++ ((stm->input_mix_params.layout != CUBEB_LAYOUT_UNDEFINED && ++ stm->input_mix_params.layout != stm->input_stream_params.layout) || ++ (stm->input_mix_params.channels != stm->input_stream_params.channels))) { ++ if (stm->input_mix_params.layout == CUBEB_LAYOUT_UNDEFINED) { ++ LOG("Input stream using undefined layout! Any mixing may be " ++ "unpredictable!\n"); ++ } ++ stm->input_mixer.reset(cubeb_mixer_create(stm->input_stream_params.format, ++ stm->input_mix_params.channels, ++ stm->input_mix_params.layout, ++ stm->input_stream_params.channels, ++ stm->input_stream_params.layout)); ++ assert(stm->input_mixer); ++ } ++ ++ // Create output mixer. ++ if (has_output(stm) && stm->output_mix_params.layout != stm->output_stream_params.layout) { ++ if (stm->output_mix_params.layout == CUBEB_LAYOUT_UNDEFINED) { ++ LOG("Output stream using undefined layout! Any mixing may be unpredictable!\n"); ++ } ++ stm->output_mixer.reset(cubeb_mixer_create(stm->output_stream_params.format, ++ stm->output_stream_params.channels, ++ stm->output_stream_params.layout, ++ stm->output_mix_params.channels, ++ stm->output_mix_params.layout)); ++ assert(stm->output_mixer); ++ // Input is up/down mixed when depacketized in get_input_buffer. ++ stm->mix_buffer.resize( ++ frames_to_bytes_before_mix(stm, stm->output_buffer_frame_count)); ++ } ++ + return CUBEB_OK; + } + ++ERole ++pref_to_role(cubeb_stream_prefs prefs) ++{ ++ if (prefs & CUBEB_STREAM_PREF_VOICE) { ++ return eCommunications; ++ } ++ ++ return eConsole; ++} ++ + int + wasapi_stream_init(cubeb * context, cubeb_stream ** stream, + char const * stream_name, +@@ -1691,92 +2240,100 @@ wasapi_stream_init(cubeb * context, cubeb_stream ** stream, + unsigned int latency_frames, cubeb_data_callback data_callback, + cubeb_state_callback state_callback, void * user_ptr) + { +- HRESULT hr; + int rv; +- auto_com com; +- if (!com.ok()) { +- return CUBEB_ERROR; +- } + + XASSERT(context && stream && (input_stream_params || output_stream_params)); + +- if (output_stream_params && output_stream_params->format != CUBEB_SAMPLE_FLOAT32NE || +- input_stream_params && input_stream_params->format != CUBEB_SAMPLE_FLOAT32NE) { +- LOG("Invalid format, %p %p %d %d", +- output_stream_params, input_stream_params, +- output_stream_params && output_stream_params->format, +- input_stream_params && input_stream_params->format); ++ if (output_stream_params && input_stream_params && ++ output_stream_params->format != input_stream_params->format) { + return CUBEB_ERROR_INVALID_FORMAT; + } + +- cubeb_stream * stm = (cubeb_stream *)calloc(1, sizeof(cubeb_stream)); +- +- XASSERT(stm); ++ std::unique_ptr stm(new cubeb_stream(), wasapi_stream_destroy); + + stm->context = context; + stm->data_callback = data_callback; + stm->state_callback = state_callback; + stm->user_ptr = user_ptr; +- stm->draining = false; ++ ++ if (stm->output_stream_params.prefs & CUBEB_STREAM_PREF_VOICE || ++ stm->input_stream_params.prefs & CUBEB_STREAM_PREF_VOICE) { ++ stm->role = eCommunications; ++ } else { ++ stm->role = eConsole; ++ } ++ + if (input_stream_params) { + stm->input_stream_params = *input_stream_params; +- stm->input_device = input_device; ++ stm->input_device = utf8_to_wstr(reinterpret_cast(input_device)); + } + if (output_stream_params) { + stm->output_stream_params = *output_stream_params; +- stm->output_device = output_device; ++ stm->output_device = utf8_to_wstr(reinterpret_cast(output_device)); + } + +- stm->latency = latency_frames; +- stm->volume = 1.0; ++ switch (output_stream_params ? output_stream_params->format : input_stream_params->format) { ++ case CUBEB_SAMPLE_S16NE: ++ stm->bytes_per_sample = sizeof(short); ++ stm->waveformatextensible_sub_format = KSDATAFORMAT_SUBTYPE_PCM; ++ stm->linear_input_buffer.reset(new auto_array_wrapper_impl); ++ break; ++ case CUBEB_SAMPLE_FLOAT32NE: ++ stm->bytes_per_sample = sizeof(float); ++ stm->waveformatextensible_sub_format = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT; ++ stm->linear_input_buffer.reset(new auto_array_wrapper_impl); ++ break; ++ default: ++ return CUBEB_ERROR_INVALID_FORMAT; ++ } + +- // Placement new to call ctor. +- new (&stm->stream_reset_lock) owned_critical_section(); ++ stm->latency = latency_frames; + + stm->reconfigure_event = CreateEvent(NULL, 0, 0, NULL); + if (!stm->reconfigure_event) { +- LOG("Can't create the reconfigure event, error: %x", GetLastError()); +- wasapi_stream_destroy(stm); ++ LOG("Can't create the reconfigure event, error: %lx", GetLastError()); + return CUBEB_ERROR; + } + + /* Unconditionally create the two events so that the wait logic is simpler. */ + stm->refill_event = CreateEvent(NULL, 0, 0, NULL); + if (!stm->refill_event) { +- LOG("Can't create the refill event, error: %x", GetLastError()); +- wasapi_stream_destroy(stm); ++ LOG("Can't create the refill event, error: %lx", GetLastError()); + return CUBEB_ERROR; + } + + stm->input_available_event = CreateEvent(NULL, 0, 0, NULL); + if (!stm->input_available_event) { +- LOG("Can't create the input available event , error: %x", GetLastError()); +- wasapi_stream_destroy(stm); ++ LOG("Can't create the input available event , error: %lx", GetLastError()); + return CUBEB_ERROR; + } + +- + { + /* Locking here is not strictly necessary, because we don't have a + notification client that can reset the stream yet, but it lets us + assert that the lock is held in the function. */ + auto_lock lock(stm->stream_reset_lock); +- rv = setup_wasapi_stream(stm); ++ rv = setup_wasapi_stream(stm.get()); + } + if (rv != CUBEB_OK) { +- wasapi_stream_destroy(stm); + return rv; + } + +- hr = register_notification_client(stm); +- if (FAILED(hr)) { +- /* this is not fatal, we can still play audio, but we won't be able +- to keep using the default audio endpoint if it changes. */ +- LOG("failed to register notification client, %x", hr); ++ if (!((input_stream_params ? ++ (input_stream_params->prefs & CUBEB_STREAM_PREF_DISABLE_DEVICE_SWITCHING) : 0) || ++ (output_stream_params ? ++ (output_stream_params->prefs & CUBEB_STREAM_PREF_DISABLE_DEVICE_SWITCHING) : 0))) { ++ HRESULT hr = register_notification_client(stm.get()); ++ if (FAILED(hr)) { ++ /* this is not fatal, we can still play audio, but we won't be able ++ to keep using the default audio endpoint if it changes. */ ++ LOG("failed to register notification client, %lx", hr); ++ } + } + +- *stream = stm; ++ *stream = stm.release(); + ++ LOG("Stream init succesfull (%p)", *stream); + return CUBEB_OK; + } + +@@ -1786,61 +2343,55 @@ void close_wasapi_stream(cubeb_stream * stm) + + stm->stream_reset_lock.assert_current_thread_owns(); + +- SafeRelease(stm->output_client); +- stm->output_client = NULL; +- SafeRelease(stm->input_client); +- stm->input_client = NULL; ++ stm->output_client = nullptr; ++ stm->render_client = nullptr; + +- SafeRelease(stm->render_client); +- stm->render_client = NULL; ++ stm->input_client = nullptr; ++ stm->capture_client = nullptr; + +- SafeRelease(stm->capture_client); +- stm->capture_client = NULL; ++ stm->audio_stream_volume = nullptr; + +- SafeRelease(stm->audio_stream_volume); +- stm->audio_stream_volume = NULL; +- +- SafeRelease(stm->audio_clock); +- stm->audio_clock = NULL; ++ stm->audio_clock = nullptr; + stm->total_frames_written += static_cast(round(stm->frames_written * stream_to_mix_samplerate_ratio(stm->output_stream_params, stm->output_mix_params))); + stm->frames_written = 0; + +- if (stm->resampler) { +- cubeb_resampler_destroy(stm->resampler); +- stm->resampler = NULL; +- } +- +- free(stm->mix_buffer); +- stm->mix_buffer = NULL; ++ stm->resampler.reset(); ++ stm->output_mixer.reset(); ++ stm->input_mixer.reset(); ++ stm->mix_buffer.clear(); + } + + void wasapi_stream_destroy(cubeb_stream * stm) + { + XASSERT(stm); ++ LOG("Stream destroy (%p)", stm); + +- // Only free stm->emergency_bailout if we could not join the thread. +- // If we could not join the thread, stm->emergency_bailout is true ++ // Only free stm->emergency_bailout if we could join the thread. ++ // If we could not join the thread, stm->emergency_bailout is true + // and is still alive until the thread wakes up and exits cleanly. + if (stop_and_join_render_thread(stm)) { + delete stm->emergency_bailout.load(); + stm->emergency_bailout = nullptr; + } + +- unregister_notification_client(stm); ++ if (stm->notification_client) { ++ unregister_notification_client(stm); ++ } ++ ++ CloseHandle(stm->reconfigure_event); ++ CloseHandle(stm->refill_event); ++ CloseHandle(stm->input_available_event); + +- SafeRelease(stm->reconfigure_event); +- SafeRelease(stm->refill_event); +- SafeRelease(stm->input_available_event); ++ // The variables intialized in wasapi_stream_init, ++ // must be destroyed in wasapi_stream_destroy. ++ stm->linear_input_buffer.reset(); + + { + auto_lock lock(stm->stream_reset_lock); + close_wasapi_stream(stm); + } + +- // Need to call dtor to free the resource in owned_critical_section. +- stm->stream_reset_lock.~owned_critical_section(); +- +- free(stm); ++ delete stm; + } + + enum StreamDirection { +@@ -1860,7 +2411,7 @@ int stream_start_one_side(cubeb_stream * stm, StreamDirection dir) + + BOOL ok = ResetEvent(stm->reconfigure_event); + if (!ok) { +- LOG("resetting reconfig event failed for %s stream: %x", ++ LOG("resetting reconfig event failed for %s stream: %lx", + dir == OUTPUT ? "output" : "input", GetLastError()); + } + +@@ -1873,12 +2424,12 @@ int stream_start_one_side(cubeb_stream * stm, StreamDirection dir) + + HRESULT hr2 = dir == OUTPUT ? stm->output_client->Start() : stm->input_client->Start(); + if (FAILED(hr2)) { +- LOG("could not start the %s stream after reconfig: %x", ++ LOG("could not start the %s stream after reconfig: %lx", + dir == OUTPUT ? "output" : "input", hr); + return CUBEB_ERROR; + } + } else if (FAILED(hr)) { +- LOG("could not start the %s stream: %x.", ++ LOG("could not start the %s stream: %lx.", + dir == OUTPUT ? "output" : "input", hr); + return CUBEB_ERROR; + } +@@ -1911,16 +2462,31 @@ int wasapi_stream_start(cubeb_stream * stm) + + stm->shutdown_event = CreateEvent(NULL, 0, 0, NULL); + if (!stm->shutdown_event) { +- LOG("Can't create the shutdown event, error: %x", GetLastError()); ++ LOG("Can't create the shutdown event, error: %lx", GetLastError()); ++ return CUBEB_ERROR; ++ } ++ ++ stm->thread_ready_event = CreateEvent(NULL, 0, 0, NULL); ++ if (!stm->thread_ready_event) { ++ LOG("Can't create the thread_ready event, error: %lx", GetLastError()); + return CUBEB_ERROR; + } + ++ cubeb_async_log_reset_threads(); + stm->thread = (HANDLE) _beginthreadex(NULL, 512 * 1024, wasapi_stream_render_loop, stm, STACK_SIZE_PARAM_IS_A_RESERVATION, NULL); + if (stm->thread == NULL) { + LOG("could not create WASAPI render thread."); + return CUBEB_ERROR; + } + ++ // Wait for wasapi_stream_render_loop to signal that emergency_bailout has ++ // been read, avoiding a bailout situation where we could free `stm` ++ // before wasapi_stream_render_loop had a chance to run. ++ HRESULT hr = WaitForSingleObject(stm->thread_ready_event, INFINITE); ++ XASSERT(hr == WAIT_OBJECT_0); ++ CloseHandle(stm->thread_ready_event); ++ stm->thread_ready_event = 0; ++ + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); + + return CUBEB_OK; +@@ -1950,21 +2516,32 @@ int wasapi_stream_stop(cubeb_stream * stm) + } + } + +- + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); + } + + if (stop_and_join_render_thread(stm)) { +- // This is null if we've given the pointer to the other thread +- if (stm->emergency_bailout.load()) { +- delete stm->emergency_bailout.load(); +- stm->emergency_bailout = nullptr; +- } ++ delete stm->emergency_bailout.load(); ++ stm->emergency_bailout = nullptr; ++ } else { ++ // If we could not join the thread, put the stream in error. ++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); ++ return CUBEB_ERROR; + } + + return CUBEB_OK; + } + ++int wasapi_stream_reset_default_device(cubeb_stream * stm) ++{ ++ XASSERT(stm && stm->reconfigure_event); ++ BOOL ok = SetEvent(stm->reconfigure_event); ++ if (!ok) { ++ LOG("SetEvent on reconfigure_event failed: %lx", GetLastError()); ++ return CUBEB_ERROR; ++ } ++ return CUBEB_OK; ++} ++ + int wasapi_stream_get_position(cubeb_stream * stm, uint64_t * position) + { + XASSERT(stm && position); +@@ -2037,253 +2614,329 @@ int wasapi_stream_set_volume(cubeb_stream * stm, float volume) + return CUBEB_OK; + } + +-static char * ++static char const * + wstr_to_utf8(LPCWSTR str) + { +- char * ret = NULL; +- int size; +- +- size = ::WideCharToMultiByte(CP_UTF8, 0, str, -1, ret, 0, NULL, NULL); +- if (size > 0) { +- ret = static_cast(malloc(size)); +- ::WideCharToMultiByte(CP_UTF8, 0, str, -1, ret, size, NULL, NULL); ++ int size = ::WideCharToMultiByte(CP_UTF8, 0, str, -1, nullptr, 0, NULL, NULL); ++ if (size <= 0) { ++ return nullptr; + } + ++ char * ret = static_cast(malloc(size)); ++ ::WideCharToMultiByte(CP_UTF8, 0, str, -1, ret, size, NULL, NULL); + return ret; + } + +-static std::unique_ptr +-utf8_to_wstr(char* str) ++static std::unique_ptr ++utf8_to_wstr(char const * str) + { +- std::unique_ptr ret; +- int size; +- +- size = ::MultiByteToWideChar(CP_UTF8, 0, str, -1, nullptr, 0); +- if (size > 0) { +- ret.reset(new wchar_t[size]); +- ::MultiByteToWideChar(CP_UTF8, 0, str, -1, ret.get(), size); ++ int size = ::MultiByteToWideChar(CP_UTF8, 0, str, -1, nullptr, 0); ++ if (size <= 0) { ++ return nullptr; + } + +- return std::move(ret); ++ std::unique_ptr ret(new wchar_t[size]); ++ ::MultiByteToWideChar(CP_UTF8, 0, str, -1, ret.get(), size); ++ return ret; + } + +-static IMMDevice * ++static com_ptr + wasapi_get_device_node(IMMDeviceEnumerator * enumerator, IMMDevice * dev) + { +- IMMDevice * ret = NULL; +- IDeviceTopology * devtopo = NULL; +- IConnector * connector = NULL; +- +- if (SUCCEEDED(dev->Activate(__uuidof(IDeviceTopology), CLSCTX_ALL, NULL, (void**)&devtopo)) && +- SUCCEEDED(devtopo->GetConnector(0, &connector))) { +- LPWSTR filterid; +- if (SUCCEEDED(connector->GetDeviceIdConnectedTo(&filterid))) { +- if (FAILED(enumerator->GetDevice(filterid, &ret))) ++ com_ptr ret; ++ com_ptr devtopo; ++ com_ptr connector; ++ ++ if (SUCCEEDED(dev->Activate(__uuidof(IDeviceTopology), CLSCTX_ALL, NULL, devtopo.receive_vpp())) && ++ SUCCEEDED(devtopo->GetConnector(0, connector.receive()))) { ++ wchar_t * tmp = nullptr; ++ if (SUCCEEDED(connector->GetDeviceIdConnectedTo(&tmp))) { ++ com_heap_ptr filterid(tmp); ++ if (FAILED(enumerator->GetDevice(filterid.get(), ret.receive()))) + ret = NULL; +- CoTaskMemFree(filterid); + } + } + +- SafeRelease(connector); +- SafeRelease(devtopo); + return ret; + } + + static BOOL + wasapi_is_default_device(EDataFlow flow, ERole role, LPCWSTR device_id, +- IMMDeviceEnumerator * enumerator) ++ IMMDeviceEnumerator * enumerator) + { + BOOL ret = FALSE; +- IMMDevice * dev; ++ com_ptr dev; + HRESULT hr; + +- hr = enumerator->GetDefaultAudioEndpoint(flow, role, &dev); ++ hr = enumerator->GetDefaultAudioEndpoint(flow, role, dev.receive()); + if (SUCCEEDED(hr)) { +- LPWSTR defdevid = NULL; +- if (SUCCEEDED(dev->GetId(&defdevid))) +- ret = (wcscmp(defdevid, device_id) == 0); +- if (defdevid != NULL) +- CoTaskMemFree(defdevid); +- SafeRelease(dev); ++ wchar_t * tmp = nullptr; ++ if (SUCCEEDED(dev->GetId(&tmp))) { ++ com_heap_ptr defdevid(tmp); ++ ret = (wcscmp(defdevid.get(), device_id) == 0); ++ } + } + + return ret; + } + +-static cubeb_device_info * +-wasapi_create_device(IMMDeviceEnumerator * enumerator, IMMDevice * dev) ++int ++wasapi_create_device(cubeb * ctx, cubeb_device_info& ret, IMMDeviceEnumerator * enumerator, IMMDevice * dev) + { +- IMMEndpoint * endpoint = NULL; +- IMMDevice * devnode = NULL; +- IAudioClient * client = NULL; +- cubeb_device_info * ret = NULL; ++ com_ptr endpoint; ++ com_ptr devnode; ++ com_ptr client; + EDataFlow flow; +- LPWSTR device_id = NULL; + DWORD state = DEVICE_STATE_NOTPRESENT; +- IPropertyStore * propstore = NULL; +- PROPVARIANT propvar; ++ com_ptr propstore; + REFERENCE_TIME def_period, min_period; + HRESULT hr; + +- PropVariantInit(&propvar); ++ struct prop_variant : public PROPVARIANT { ++ prop_variant() { PropVariantInit(this); } ++ ~prop_variant() { PropVariantClear(this); } ++ prop_variant(prop_variant const &) = delete; ++ prop_variant & operator=(prop_variant const &) = delete; ++ }; + +- hr = dev->QueryInterface(IID_PPV_ARGS(&endpoint)); +- if (FAILED(hr)) goto done; ++ hr = dev->QueryInterface(IID_PPV_ARGS(endpoint.receive())); ++ if (FAILED(hr)) return CUBEB_ERROR; + + hr = endpoint->GetDataFlow(&flow); +- if (FAILED(hr)) goto done; ++ if (FAILED(hr)) return CUBEB_ERROR; + +- hr = dev->GetId(&device_id); +- if (FAILED(hr)) goto done; ++ wchar_t * tmp = nullptr; ++ hr = dev->GetId(&tmp); ++ if (FAILED(hr)) return CUBEB_ERROR; ++ com_heap_ptr device_id(tmp); ++ ++ char const * device_id_intern = intern_device_id(ctx, device_id.get()); ++ if (!device_id_intern) { ++ return CUBEB_ERROR; ++ } + +- hr = dev->OpenPropertyStore(STGM_READ, &propstore); +- if (FAILED(hr)) goto done; ++ hr = dev->OpenPropertyStore(STGM_READ, propstore.receive()); ++ if (FAILED(hr)) return CUBEB_ERROR; + + hr = dev->GetState(&state); +- if (FAILED(hr)) goto done; +- +- ret = (cubeb_device_info *)calloc(1, sizeof(cubeb_device_info)); ++ if (FAILED(hr)) return CUBEB_ERROR; + +- ret->devid = ret->device_id = wstr_to_utf8(device_id); +- hr = propstore->GetValue(PKEY_Device_FriendlyName, &propvar); ++ ret.device_id = device_id_intern; ++ ret.devid = reinterpret_cast(ret.device_id); ++ prop_variant namevar; ++ hr = propstore->GetValue(PKEY_Device_FriendlyName, &namevar); + if (SUCCEEDED(hr)) +- ret->friendly_name = wstr_to_utf8(propvar.pwszVal); ++ ret.friendly_name = wstr_to_utf8(namevar.pwszVal); + + devnode = wasapi_get_device_node(enumerator, dev); +- if (devnode != NULL) { +- IPropertyStore * ps = NULL; +- hr = devnode->OpenPropertyStore(STGM_READ, &ps); +- if (FAILED(hr)) goto done; ++ if (devnode) { ++ com_ptr ps; ++ hr = devnode->OpenPropertyStore(STGM_READ, ps.receive()); ++ if (FAILED(hr)) return CUBEB_ERROR; + +- PropVariantClear(&propvar); +- hr = ps->GetValue(PKEY_Device_InstanceId, &propvar); ++ prop_variant instancevar; ++ hr = ps->GetValue(PKEY_Device_InstanceId, &instancevar); + if (SUCCEEDED(hr)) { +- ret->group_id = wstr_to_utf8(propvar.pwszVal); ++ ret.group_id = wstr_to_utf8(instancevar.pwszVal); + } +- SafeRelease(ps); + } + +- ret->preferred = CUBEB_DEVICE_PREF_NONE; +- if (wasapi_is_default_device(flow, eConsole, device_id, enumerator)) +- ret->preferred = (cubeb_device_pref)(ret->preferred | CUBEB_DEVICE_PREF_MULTIMEDIA); +- if (wasapi_is_default_device(flow, eCommunications, device_id, enumerator)) +- ret->preferred = (cubeb_device_pref)(ret->preferred | CUBEB_DEVICE_PREF_VOICE); +- if (wasapi_is_default_device(flow, eConsole, device_id, enumerator)) +- ret->preferred = (cubeb_device_pref)(ret->preferred | CUBEB_DEVICE_PREF_NOTIFICATION); ++ ret.preferred = CUBEB_DEVICE_PREF_NONE; ++ if (wasapi_is_default_device(flow, eConsole, device_id.get(), enumerator)) ++ ret.preferred = (cubeb_device_pref)(ret.preferred | CUBEB_DEVICE_PREF_MULTIMEDIA); ++ if (wasapi_is_default_device(flow, eCommunications, device_id.get(), enumerator)) ++ ret.preferred = (cubeb_device_pref)(ret.preferred | CUBEB_DEVICE_PREF_VOICE); ++ if (wasapi_is_default_device(flow, eConsole, device_id.get(), enumerator)) ++ ret.preferred = (cubeb_device_pref)(ret.preferred | CUBEB_DEVICE_PREF_NOTIFICATION); + +- if (flow == eRender) ret->type = CUBEB_DEVICE_TYPE_OUTPUT; +- else if (flow == eCapture) ret->type = CUBEB_DEVICE_TYPE_INPUT; ++ if (flow == eRender) ret.type = CUBEB_DEVICE_TYPE_OUTPUT; ++ else if (flow == eCapture) ret.type = CUBEB_DEVICE_TYPE_INPUT; + switch (state) { + case DEVICE_STATE_ACTIVE: +- ret->state = CUBEB_DEVICE_STATE_ENABLED; ++ ret.state = CUBEB_DEVICE_STATE_ENABLED; + break; + case DEVICE_STATE_UNPLUGGED: +- ret->state = CUBEB_DEVICE_STATE_UNPLUGGED; ++ ret.state = CUBEB_DEVICE_STATE_UNPLUGGED; + break; + default: +- ret->state = CUBEB_DEVICE_STATE_DISABLED; ++ ret.state = CUBEB_DEVICE_STATE_DISABLED; + break; + }; + +- ret->format = CUBEB_DEVICE_FMT_F32NE; /* cubeb only supports 32bit float at the moment */ +- ret->default_format = CUBEB_DEVICE_FMT_F32NE; +- PropVariantClear(&propvar); +- hr = propstore->GetValue(PKEY_AudioEngine_DeviceFormat, &propvar); +- if (SUCCEEDED(hr) && propvar.vt == VT_BLOB) { +- if (propvar.blob.cbSize == sizeof(PCMWAVEFORMAT)) { +- const PCMWAVEFORMAT * pcm = reinterpret_cast(propvar.blob.pBlobData); ++ ret.format = static_cast(CUBEB_DEVICE_FMT_F32NE | CUBEB_DEVICE_FMT_S16NE); ++ ret.default_format = CUBEB_DEVICE_FMT_F32NE; ++ prop_variant fmtvar; ++ hr = propstore->GetValue(PKEY_AudioEngine_DeviceFormat, &fmtvar); ++ if (SUCCEEDED(hr) && fmtvar.vt == VT_BLOB) { ++ if (fmtvar.blob.cbSize == sizeof(PCMWAVEFORMAT)) { ++ const PCMWAVEFORMAT * pcm = reinterpret_cast(fmtvar.blob.pBlobData); + +- ret->max_rate = ret->min_rate = ret->default_rate = pcm->wf.nSamplesPerSec; +- ret->max_channels = pcm->wf.nChannels; +- } else if (propvar.blob.cbSize >= sizeof(WAVEFORMATEX)) { +- WAVEFORMATEX* wfx = reinterpret_cast(propvar.blob.pBlobData); ++ ret.max_rate = ret.min_rate = ret.default_rate = pcm->wf.nSamplesPerSec; ++ ret.max_channels = pcm->wf.nChannels; ++ } else if (fmtvar.blob.cbSize >= sizeof(WAVEFORMATEX)) { ++ WAVEFORMATEX* wfx = reinterpret_cast(fmtvar.blob.pBlobData); + +- if (propvar.blob.cbSize >= sizeof(WAVEFORMATEX) + wfx->cbSize || ++ if (fmtvar.blob.cbSize >= sizeof(WAVEFORMATEX) + wfx->cbSize || + wfx->wFormatTag == WAVE_FORMAT_PCM) { +- ret->max_rate = ret->min_rate = ret->default_rate = wfx->nSamplesPerSec; +- ret->max_channels = wfx->nChannels; ++ ret.max_rate = ret.min_rate = ret.default_rate = wfx->nSamplesPerSec; ++ ret.max_channels = wfx->nChannels; + } + } + } + +- if (SUCCEEDED(dev->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&client)) && ++ if (SUCCEEDED(dev->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, client.receive_vpp())) && + SUCCEEDED(client->GetDevicePeriod(&def_period, &min_period))) { +- ret->latency_lo = hns_to_frames(ret->default_rate, min_period); +- ret->latency_hi = hns_to_frames(ret->default_rate, def_period); ++ ret.latency_lo = hns_to_frames(ret.default_rate, min_period); ++ ret.latency_hi = hns_to_frames(ret.default_rate, def_period); + } else { +- ret->latency_lo = 0; +- ret->latency_hi = 0; +- } +- SafeRelease(client); +- +-done: +- SafeRelease(devnode); +- SafeRelease(endpoint); +- SafeRelease(propstore); +- if (device_id != NULL) +- CoTaskMemFree(device_id); +- PropVariantClear(&propvar); +- return ret; ++ ret.latency_lo = 0; ++ ret.latency_hi = 0; ++ } ++ ++ return CUBEB_OK; + } + + static int + wasapi_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** out) ++ cubeb_device_collection * out) + { +- auto_com com; +- IMMDeviceEnumerator * enumerator; +- IMMDeviceCollection * collection; +- IMMDevice * dev; +- cubeb_device_info * cur; ++ com_ptr enumerator; ++ com_ptr collection; + HRESULT hr; + UINT cc, i; + EDataFlow flow; + +- *out = NULL; +- +- if (!com.ok()) +- return CUBEB_ERROR; +- + hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, +- CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&enumerator)); ++ CLSCTX_INPROC_SERVER, IID_PPV_ARGS(enumerator.receive())); + if (FAILED(hr)) { +- LOG("Could not get device enumerator: %x", hr); ++ LOG("Could not get device enumerator: %lx", hr); + return CUBEB_ERROR; + } + + if (type == CUBEB_DEVICE_TYPE_OUTPUT) flow = eRender; + else if (type == CUBEB_DEVICE_TYPE_INPUT) flow = eCapture; +- else if (type & (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_INPUT)) flow = eAll; ++ else if (type & (CUBEB_DEVICE_TYPE_INPUT | CUBEB_DEVICE_TYPE_OUTPUT)) flow = eAll; + else return CUBEB_ERROR; + +- hr = enumerator->EnumAudioEndpoints(flow, DEVICE_STATEMASK_ALL, &collection); ++ hr = enumerator->EnumAudioEndpoints(flow, DEVICE_STATEMASK_ALL, collection.receive()); + if (FAILED(hr)) { +- LOG("Could not enumerate audio endpoints: %x", hr); ++ LOG("Could not enumerate audio endpoints: %lx", hr); + return CUBEB_ERROR; + } + + hr = collection->GetCount(&cc); + if (FAILED(hr)) { +- LOG("IMMDeviceCollection::GetCount() failed: %x", hr); ++ LOG("IMMDeviceCollection::GetCount() failed: %lx", hr); + return CUBEB_ERROR; + } +- *out = (cubeb_device_collection *) malloc(sizeof(cubeb_device_collection) + +- sizeof(cubeb_device_info*) * (cc > 0 ? cc - 1 : 0)); +- if (!*out) { ++ cubeb_device_info * devices = new cubeb_device_info[cc]; ++ if (!devices) + return CUBEB_ERROR; +- } +- (*out)->count = 0; ++ ++ PodZero(devices, cc); ++ out->count = 0; + for (i = 0; i < cc; i++) { +- hr = collection->Item(i, &dev); ++ com_ptr dev; ++ hr = collection->Item(i, dev.receive()); ++ if (FAILED(hr)) { ++ LOG("IMMDeviceCollection::Item(%u) failed: %lx", i-1, hr); ++ continue; ++ } ++ if (wasapi_create_device(context, devices[out->count], ++ enumerator.get(), dev.get()) == CUBEB_OK) { ++ out->count += 1; ++ } ++ } ++ ++ out->device = devices; ++ return CUBEB_OK; ++} ++ ++static int ++wasapi_device_collection_destroy(cubeb * /*ctx*/, cubeb_device_collection * collection) ++{ ++ XASSERT(collection); ++ ++ for (size_t n = 0; n < collection->count; n++) { ++ cubeb_device_info& dev = collection->device[n]; ++ delete [] dev.friendly_name; ++ delete [] dev.group_id; ++ } ++ ++ delete [] collection->device; ++ return CUBEB_OK; ++} ++ ++static int ++wasapi_register_device_collection_changed(cubeb * context, ++ cubeb_device_type devtype, ++ cubeb_device_collection_changed_callback collection_changed_callback, ++ void * user_ptr) ++{ ++ if (devtype == CUBEB_DEVICE_TYPE_UNKNOWN) { ++ return CUBEB_ERROR_INVALID_PARAMETER; ++ } ++ ++ if (collection_changed_callback) { ++ // Make sure it has been unregistered first. ++ XASSERT(((devtype & CUBEB_DEVICE_TYPE_INPUT) && ++ !context->input_collection_changed_callback) || ++ ((devtype & CUBEB_DEVICE_TYPE_OUTPUT) && ++ !context->output_collection_changed_callback)); ++ ++ // Stop the notification client. Notifications arrive on ++ // a separate thread. We stop them here to avoid ++ // synchronization issues during the update. ++ if (context->device_collection_enumerator.get()) { ++ HRESULT hr = unregister_collection_notification_client(context); ++ if (FAILED(hr)) { ++ return CUBEB_ERROR; ++ } ++ } ++ ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ context->input_collection_changed_callback = collection_changed_callback; ++ context->input_collection_changed_user_ptr = user_ptr; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ context->output_collection_changed_callback = collection_changed_callback; ++ context->output_collection_changed_user_ptr = user_ptr; ++ } ++ ++ HRESULT hr = register_collection_notification_client(context); ++ if (FAILED(hr)) { ++ return CUBEB_ERROR; ++ } ++ } else { ++ if (!context->device_collection_enumerator.get()) { ++ // Already unregistered, ignore it. ++ return CUBEB_OK; ++ } ++ ++ HRESULT hr = unregister_collection_notification_client(context); + if (FAILED(hr)) { +- LOG("IMMDeviceCollection::Item(%u) failed: %x", i-1, hr); +- } else if ((cur = wasapi_create_device(enumerator, dev)) != NULL) { +- (*out)->device[(*out)->count++] = cur; ++ return CUBEB_ERROR; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_INPUT) { ++ context->input_collection_changed_callback = nullptr; ++ context->input_collection_changed_user_ptr = nullptr; ++ } ++ if (devtype & CUBEB_DEVICE_TYPE_OUTPUT) { ++ context->output_collection_changed_callback = nullptr; ++ context->output_collection_changed_user_ptr = nullptr; ++ } ++ ++ // If after the updates we still have registered ++ // callbacks restart the notification client. ++ if (context->input_collection_changed_callback || ++ context->output_collection_changed_callback) { ++ hr = register_collection_notification_client(context); ++ if (FAILED(hr)) { ++ return CUBEB_ERROR; ++ } + } + } + +- SafeRelease(collection); +- SafeRelease(enumerator); + return CUBEB_OK; + } + +@@ -2294,18 +2947,19 @@ cubeb_ops const wasapi_ops = { + /*.get_min_latency =*/ wasapi_get_min_latency, + /*.get_preferred_sample_rate =*/ wasapi_get_preferred_sample_rate, + /*.enumerate_devices =*/ wasapi_enumerate_devices, ++ /*.device_collection_destroy =*/ wasapi_device_collection_destroy, + /*.destroy =*/ wasapi_destroy, + /*.stream_init =*/ wasapi_stream_init, + /*.stream_destroy =*/ wasapi_stream_destroy, + /*.stream_start =*/ wasapi_stream_start, + /*.stream_stop =*/ wasapi_stream_stop, ++ /*.stream_reset_default_device =*/ wasapi_stream_reset_default_device, + /*.stream_get_position =*/ wasapi_stream_get_position, + /*.stream_get_latency =*/ wasapi_stream_get_latency, + /*.stream_set_volume =*/ wasapi_stream_set_volume, +- /*.stream_set_panning =*/ NULL, + /*.stream_get_current_device =*/ NULL, + /*.stream_device_destroy =*/ NULL, + /*.stream_register_device_changed_callback =*/ NULL, +- /*.register_device_collection_changed =*/ NULL ++ /*.register_device_collection_changed =*/ wasapi_register_device_collection_changed, + }; + } // namespace anonymous +diff --git a/media/libcubeb/src/cubeb_winmm.c b/media/libcubeb/src/cubeb_winmm.c +index 585d11e89..e064ca079 100644 +--- a/media/libcubeb/src/cubeb_winmm.c ++++ b/media/libcubeb/src/cubeb_winmm.c +@@ -4,7 +4,6 @@ + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ +-#define __MSVCRT_VERSION__ 0x0700 + #undef WINVER + #define WINVER 0x0501 + #undef WIN32_LEAN_AND_MEAN +@@ -93,11 +92,13 @@ struct cubeb { + }; + + struct cubeb_stream { ++ /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb * context; ++ void * user_ptr; ++ /**/ + cubeb_stream_params params; + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; +- void * user_ptr; + WAVEHDR buffers[NBUFS]; + size_t buffer_size; + int next_buffer; +@@ -402,6 +403,7 @@ winmm_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + + XASSERT(context); + XASSERT(stream); ++ XASSERT(output_stream_params); + + if (input_stream_params) { + /* Capture support not yet implemented. */ +@@ -413,6 +415,11 @@ winmm_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + return CUBEB_ERROR_DEVICE_UNAVAILABLE; + } + ++ if (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) { ++ /* Loopback is not supported */ ++ return CUBEB_ERROR_NOT_SUPPORTED; ++ } ++ + *stream = NULL; + + memset(&wfx, 0, sizeof(wfx)); +@@ -512,7 +519,6 @@ winmm_stream_init(cubeb * context, cubeb_stream ** stream, char const * stream_n + return CUBEB_ERROR; + } + +- + for (i = 0; i < NBUFS; ++i) { + WAVEHDR * hdr = &stm->buffers[i]; + +@@ -769,7 +775,6 @@ winmm_calculate_device_rate(cubeb_device_info * info, DWORD formats) + } + } + +- + #define MM_S16_MASK (WAVE_FORMAT_1M16 | WAVE_FORMAT_1S16 | WAVE_FORMAT_2M16 | WAVE_FORMAT_2S16 | WAVE_FORMAT_4M16 | \ + WAVE_FORMAT_4S16 | WAVE_FORMAT_48M16 | WAVE_FORMAT_48S16 | WAVE_FORMAT_96M16 | WAVE_FORMAT_96S16) + static int +@@ -803,11 +808,11 @@ winmm_query_supported_formats(UINT devid, DWORD formats, + static char * + guid_to_cstr(LPGUID guid) + { +- char * ret = malloc(sizeof(char) * 40); ++ char * ret = malloc(40); + if (!ret) { + return NULL; + } +- _snprintf_s(ret, sizeof(char) * 40, _TRUNCATE, ++ _snprintf_s(ret, 40, _TRUNCATE, + "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", + guid->Data1, guid->Data2, guid->Data3, + guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], +@@ -821,12 +826,12 @@ winmm_query_preferred_out_device(UINT devid) + DWORD mmpref = WAVE_MAPPER, compref = WAVE_MAPPER, status; + cubeb_device_pref ret = CUBEB_DEVICE_PREF_NONE; + +- if (waveOutMessage((HWAVEOUT)(size_t)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, ++ if (waveOutMessage((HWAVEOUT) WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, + (DWORD_PTR)&mmpref, (DWORD_PTR)&status) == MMSYSERR_NOERROR && + devid == mmpref) + ret |= CUBEB_DEVICE_PREF_MULTIMEDIA | CUBEB_DEVICE_PREF_NOTIFICATION; + +- if (waveOutMessage((HWAVEOUT)(size_t)WAVE_MAPPER, DRVM_MAPPER_CONSOLEVOICECOM_GET, ++ if (waveOutMessage((HWAVEOUT) WAVE_MAPPER, DRVM_MAPPER_CONSOLEVOICECOM_GET, + (DWORD_PTR)&compref, (DWORD_PTR)&status) == MMSYSERR_NOERROR && + devid == compref) + ret |= CUBEB_DEVICE_PREF_VOICE; +@@ -837,7 +842,7 @@ winmm_query_preferred_out_device(UINT devid) + static char * + device_id_idx(UINT devid) + { +- char * ret = (char *)malloc(sizeof(char)*16); ++ char * ret = malloc(16); + if (!ret) { + return NULL; + } +@@ -845,16 +850,11 @@ device_id_idx(UINT devid) + return ret; + } + +-static cubeb_device_info * +-winmm_create_device_from_outcaps2(LPWAVEOUTCAPS2A caps, UINT devid) ++static void ++winmm_create_device_from_outcaps2(cubeb_device_info * ret, LPWAVEOUTCAPS2A caps, UINT devid) + { +- cubeb_device_info * ret; +- +- ret = calloc(1, sizeof(cubeb_device_info)); +- if (!ret) { +- return NULL; +- } +- ret->devid = (cubeb_devid)(size_t)devid; ++ XASSERT(ret); ++ ret->devid = (cubeb_devid) devid; + ret->device_id = device_id_idx(devid); + ret->friendly_name = _strdup(caps->szPname); + ret->group_id = guid_to_cstr(&caps->ProductGuid); +@@ -869,23 +869,16 @@ winmm_create_device_from_outcaps2(LPWAVEOUTCAPS2A caps, UINT devid) + winmm_query_supported_formats(devid, caps->dwFormats, + &ret->format, &ret->default_format); + +- /* Hardcoed latency estimates... */ ++ /* Hardcoded latency estimates... */ + ret->latency_lo = 100 * ret->default_rate / 1000; + ret->latency_hi = 200 * ret->default_rate / 1000; +- +- return ret; + } + +-static cubeb_device_info * +-winmm_create_device_from_outcaps(LPWAVEOUTCAPSA caps, UINT devid) ++static void ++winmm_create_device_from_outcaps(cubeb_device_info * ret, LPWAVEOUTCAPSA caps, UINT devid) + { +- cubeb_device_info * ret; +- +- ret = calloc(1, sizeof(cubeb_device_info)); +- if (!ret) { +- return NULL; +- } +- ret->devid = (cubeb_devid)(size_t)devid; ++ XASSERT(ret); ++ ret->devid = (cubeb_devid) devid; + ret->device_id = device_id_idx(devid); + ret->friendly_name = _strdup(caps->szPname); + ret->group_id = NULL; +@@ -900,11 +893,9 @@ winmm_create_device_from_outcaps(LPWAVEOUTCAPSA caps, UINT devid) + winmm_query_supported_formats(devid, caps->dwFormats, + &ret->format, &ret->default_format); + +- /* Hardcoed latency estimates... */ ++ /* Hardcoded latency estimates... */ + ret->latency_lo = 100 * ret->default_rate / 1000; + ret->latency_hi = 200 * ret->default_rate / 1000; +- +- return ret; + } + + static cubeb_device_pref +@@ -913,12 +904,12 @@ winmm_query_preferred_in_device(UINT devid) + DWORD mmpref = WAVE_MAPPER, compref = WAVE_MAPPER, status; + cubeb_device_pref ret = CUBEB_DEVICE_PREF_NONE; + +- if (waveInMessage((HWAVEIN)(size_t)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, ++ if (waveInMessage((HWAVEIN) WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, + (DWORD_PTR)&mmpref, (DWORD_PTR)&status) == MMSYSERR_NOERROR && + devid == mmpref) + ret |= CUBEB_DEVICE_PREF_MULTIMEDIA | CUBEB_DEVICE_PREF_NOTIFICATION; + +- if (waveInMessage((HWAVEIN)(size_t)WAVE_MAPPER, DRVM_MAPPER_CONSOLEVOICECOM_GET, ++ if (waveInMessage((HWAVEIN) WAVE_MAPPER, DRVM_MAPPER_CONSOLEVOICECOM_GET, + (DWORD_PTR)&compref, (DWORD_PTR)&status) == MMSYSERR_NOERROR && + devid == compref) + ret |= CUBEB_DEVICE_PREF_VOICE; +@@ -926,16 +917,11 @@ winmm_query_preferred_in_device(UINT devid) + return ret; + } + +-static cubeb_device_info * +-winmm_create_device_from_incaps2(LPWAVEINCAPS2A caps, UINT devid) ++static void ++winmm_create_device_from_incaps2(cubeb_device_info * ret, LPWAVEINCAPS2A caps, UINT devid) + { +- cubeb_device_info * ret; +- +- ret = calloc(1, sizeof(cubeb_device_info)); +- if (!ret) { +- return NULL; +- } +- ret->devid = (cubeb_devid)(size_t)devid; ++ XASSERT(ret); ++ ret->devid = (cubeb_devid) devid; + ret->device_id = device_id_idx(devid); + ret->friendly_name = _strdup(caps->szPname); + ret->group_id = guid_to_cstr(&caps->ProductGuid); +@@ -950,23 +936,16 @@ winmm_create_device_from_incaps2(LPWAVEINCAPS2A caps, UINT devid) + winmm_query_supported_formats(devid, caps->dwFormats, + &ret->format, &ret->default_format); + +- /* Hardcoed latency estimates... */ ++ /* Hardcoded latency estimates... */ + ret->latency_lo = 100 * ret->default_rate / 1000; + ret->latency_hi = 200 * ret->default_rate / 1000; +- +- return ret; + } + +-static cubeb_device_info * +-winmm_create_device_from_incaps(LPWAVEINCAPSA caps, UINT devid) ++static void ++winmm_create_device_from_incaps(cubeb_device_info * ret, LPWAVEINCAPSA caps, UINT devid) + { +- cubeb_device_info * ret; +- +- ret = calloc(1, sizeof(cubeb_device_info)); +- if (!ret) { +- return NULL; +- } +- ret->devid = (cubeb_devid)(size_t)devid; ++ XASSERT(ret); ++ ret->devid = (cubeb_devid) devid; + ret->device_id = device_id_idx(devid); + ret->friendly_name = _strdup(caps->szPname); + ret->group_id = NULL; +@@ -981,29 +960,25 @@ winmm_create_device_from_incaps(LPWAVEINCAPSA caps, UINT devid) + winmm_query_supported_formats(devid, caps->dwFormats, + &ret->format, &ret->default_format); + +- /* Hardcoed latency estimates... */ ++ /* Hardcoded latency estimates... */ + ret->latency_lo = 100 * ret->default_rate / 1000; + ret->latency_hi = 200 * ret->default_rate / 1000; +- +- return ret; + } + + static int + winmm_enumerate_devices(cubeb * context, cubeb_device_type type, +- cubeb_device_collection ** collection) ++ cubeb_device_collection * collection) + { + UINT i, incount, outcount, total; +- cubeb_device_info * cur; ++ cubeb_device_info * devices; ++ cubeb_device_info * dev; + + outcount = waveOutGetNumDevs(); + incount = waveInGetNumDevs(); + total = outcount + incount; +- if (total > 0) { +- total -= 1; +- } +- *collection = malloc(sizeof(cubeb_device_collection) + +- sizeof(cubeb_device_info*) * total); +- (*collection)->count = 0; ++ ++ devices = calloc(total, sizeof(cubeb_device_info)); ++ collection->count = 0; + + if (type & CUBEB_DEVICE_TYPE_OUTPUT) { + WAVEOUTCAPSA woc; +@@ -1013,12 +988,13 @@ winmm_enumerate_devices(cubeb * context, cubeb_device_type type, + ZeroMemory(&woc2, sizeof(woc2)); + + for (i = 0; i < outcount; i++) { +- if ((waveOutGetDevCapsA(i, (LPWAVEOUTCAPSA)&woc2, sizeof(woc2)) == MMSYSERR_NOERROR && +- (cur = winmm_create_device_from_outcaps2(&woc2, i)) != NULL) || +- (waveOutGetDevCapsA(i, &woc, sizeof(woc)) == MMSYSERR_NOERROR && +- (cur = winmm_create_device_from_outcaps(&woc, i)) != NULL) +- ) { +- (*collection)->device[(*collection)->count++] = cur; ++ dev = &devices[collection->count]; ++ if (waveOutGetDevCapsA(i, (LPWAVEOUTCAPSA)&woc2, sizeof(woc2)) == MMSYSERR_NOERROR) { ++ winmm_create_device_from_outcaps2(dev, &woc2, i); ++ collection->count += 1; ++ } else if (waveOutGetDevCapsA(i, &woc, sizeof(woc)) == MMSYSERR_NOERROR) { ++ winmm_create_device_from_outcaps(dev, &woc, i); ++ collection->count += 1; + } + } + } +@@ -1031,16 +1007,39 @@ winmm_enumerate_devices(cubeb * context, cubeb_device_type type, + ZeroMemory(&wic2, sizeof(wic2)); + + for (i = 0; i < incount; i++) { +- if ((waveInGetDevCapsA(i, (LPWAVEINCAPSA)&wic2, sizeof(wic2)) == MMSYSERR_NOERROR && +- (cur = winmm_create_device_from_incaps2(&wic2, i)) != NULL) || +- (waveInGetDevCapsA(i, &wic, sizeof(wic)) == MMSYSERR_NOERROR && +- (cur = winmm_create_device_from_incaps(&wic, i)) != NULL) +- ) { +- (*collection)->device[(*collection)->count++] = cur; ++ dev = &devices[collection->count]; ++ if (waveInGetDevCapsA(i, (LPWAVEINCAPSA)&wic2, sizeof(wic2)) == MMSYSERR_NOERROR) { ++ winmm_create_device_from_incaps2(dev, &wic2, i); ++ collection->count += 1; ++ } else if (waveInGetDevCapsA(i, &wic, sizeof(wic)) == MMSYSERR_NOERROR) { ++ winmm_create_device_from_incaps(dev, &wic, i); ++ collection->count += 1; + } + } + } + ++ collection->device = devices; ++ ++ return CUBEB_OK; ++} ++ ++static int ++winmm_device_collection_destroy(cubeb * ctx, ++ cubeb_device_collection * collection) ++{ ++ uint32_t i; ++ XASSERT(collection); ++ ++ (void) ctx; ++ ++ for (i = 0; i < collection->count; i++) { ++ free((void *) collection->device[i].device_id); ++ free((void *) collection->device[i].friendly_name); ++ free((void *) collection->device[i].group_id); ++ free((void *) collection->device[i].vendor_name); ++ } ++ ++ free(collection->device); + return CUBEB_OK; + } + +@@ -1051,15 +1050,16 @@ static struct cubeb_ops const winmm_ops = { + /*.get_min_latency=*/ winmm_get_min_latency, + /*.get_preferred_sample_rate =*/ winmm_get_preferred_sample_rate, + /*.enumerate_devices =*/ winmm_enumerate_devices, ++ /*.device_collection_destroy =*/ winmm_device_collection_destroy, + /*.destroy =*/ winmm_destroy, + /*.stream_init =*/ winmm_stream_init, + /*.stream_destroy =*/ winmm_stream_destroy, + /*.stream_start =*/ winmm_stream_start, + /*.stream_stop =*/ winmm_stream_stop, ++ /*.stream_reset_default_device =*/ NULL, + /*.stream_get_position =*/ winmm_stream_get_position, + /*.stream_get_latency = */ winmm_stream_get_latency, + /*.stream_set_volume =*/ winmm_stream_set_volume, +- /*.stream_set_panning =*/ NULL, + /*.stream_get_current_device =*/ NULL, + /*.stream_device_destroy =*/ NULL, + /*.stream_register_device_changed_callback=*/ NULL, +diff --git a/media/libcubeb/src/moz.build b/media/libcubeb/src/moz.build +index 772aa6d39..4b36b80fb 100644 +--- a/media/libcubeb/src/moz.build ++++ b/media/libcubeb/src/moz.build +@@ -10,7 +10,11 @@ Library('cubeb') + + SOURCES += [ + 'cubeb.c', +- 'cubeb_panner.cpp' ++ 'cubeb_log.cpp', ++ 'cubeb_mixer.cpp', ++ 'cubeb_panner.cpp', ++ 'cubeb_strings.c', ++ 'cubeb_utils.cpp' + ] + + if CONFIG['MOZ_ALSA']: +@@ -76,6 +80,7 @@ if CONFIG['OS_TARGET'] == 'WINNT': + if CONFIG['OS_TARGET'] == 'Android': + SOURCES += ['cubeb_opensl.c'] + SOURCES += ['cubeb_resampler.cpp'] ++ SOURCES += ['cubeb-jni.cpp'] + DEFINES['USE_OPENSL'] = True + SOURCES += [ + 'cubeb_audiotrack.c', +@@ -85,6 +90,7 @@ if CONFIG['OS_TARGET'] == 'Android': + FINAL_LIBRARY = 'gkmedias' + + CFLAGS += CONFIG['MOZ_ALSA_CFLAGS'] ++CFLAGS += CONFIG['MOZ_JACK_CFLAGS'] + CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS'] + + # We allow warnings for third-party code that can be updated from upstream. +diff --git a/media/libcubeb/unresampled-frames.patch b/media/libcubeb/unresampled-frames.patch +deleted file mode 100644 +index 714f3d4ba..000000000 +--- a/media/libcubeb/unresampled-frames.patch ++++ /dev/null +@@ -1,36 +0,0 @@ +-From 46d12e9ae6fa9c233bc32812b13185ee7df8d3fd Mon Sep 17 00:00:00 2001 +-From: Paul Adenot +-Date: Thu, 10 Nov 2016 06:20:16 +0100 +-Subject: [PATCH] Prevent underflowing the number of input frames needed in +- input when resampling. (#188) +- +---- +- src/cubeb_resampler_internal.h | 12 +++++++++--- +- 1 file changed, 9 insertions(+), 3 deletions(-) +- +-diff --git a/src/cubeb_resampler_internal.h b/src/cubeb_resampler_internal.h +-index e165cc2..3c37a04 100644 +---- a/src/cubeb_resampler_internal.h +-+++ b/src/cubeb_resampler_internal.h +-@@ -263,9 +263,15 @@ public: +- * number of output frames will be exactly equal. */ +- uint32_t input_needed_for_output(uint32_t output_frame_count) +- { +-- return (uint32_t)ceilf((output_frame_count - samples_to_frames(resampling_out_buffer.length())) +-- * resampling_ratio); +-- +-+ int32_t unresampled_frames_left = samples_to_frames(resampling_in_buffer.length()); +-+ int32_t resampled_frames_left = samples_to_frames(resampling_out_buffer.length()); +-+ float input_frames_needed = +-+ (output_frame_count - unresampled_frames_left) * resampling_ratio +-+ - resampled_frames_left; +-+ if (input_frames_needed < 0) { +-+ return 0; +-+ } +-+ return (uint32_t)ceilf(input_frames_needed); +- } +- +- /** Returns a pointer to the input buffer, that contains empty space for at +--- +-2.7.4 +- +diff --git a/media/libcubeb/update.sh b/media/libcubeb/update.sh +index 235b963e2..0e8d21456 100755 +--- a/media/libcubeb/update.sh ++++ b/media/libcubeb/update.sh +@@ -1,6 +1,11 @@ ++#!/bin/bash + # Usage: sh update.sh ++ + set -e + ++[[ -n "$1" ]] || ( echo "syntax: $0 update_src_directory"; exit 1 ) ++[[ -e "$1/src/cubeb.c" ]] || ( echo "$1: cubeb not found"; exit 1 ) ++ + cp $1/AUTHORS . + cp $1/LICENSE . + cp $1/README.md . +@@ -11,21 +16,32 @@ cp $1/src/cubeb-internal.h src + cp $1/src/cubeb-speex-resampler.h src + cp $1/src/cubeb.c src + cp $1/src/cubeb_alsa.c src +-cp $1/src/cubeb_log.h src ++cp $1/src/cubeb_array_queue.h src + cp $1/src/cubeb_audiotrack.c src + cp $1/src/cubeb_audiounit.cpp src +-cp $1/src/cubeb_osx_run_loop.h src + cp $1/src/cubeb_jack.cpp src ++cp $1/src/cubeb_log.cpp src ++cp $1/src/cubeb_log.h src ++cp $1/src/cubeb_mixer.cpp src ++cp $1/src/cubeb_mixer.h src + cp $1/src/cubeb_opensl.c src +-cp $1/src/cubeb_panner.cpp src +-cp $1/src/cubeb_panner.h src ++cp $1/src/cubeb-jni.cpp src ++cp $1/src/cubeb-jni.h src ++cp $1/src/android/cubeb-output-latency.h src/android ++cp $1/src/android/cubeb_media_library.h src/android ++cp $1/src/cubeb_osx_run_loop.h src + cp $1/src/cubeb_pulse.c src + cp $1/src/cubeb_resampler.cpp src + cp $1/src/cubeb_resampler.h src + cp $1/src/cubeb_resampler_internal.h src + cp $1/src/cubeb_ring_array.h src ++cp $1/src/cubeb_ringbuffer.h src + cp $1/src/cubeb_sndio.c src ++cp $1/src/cubeb_strings.c src ++cp $1/src/cubeb_strings.h src ++cp $1/src/cubeb_sun.c src + cp $1/src/cubeb_utils.h src ++cp $1/src/cubeb_utils.cpp src + cp $1/src/cubeb_utils_unix.h src + cp $1/src/cubeb_utils_win.h src + cp $1/src/cubeb_wasapi.cpp src +@@ -43,7 +59,12 @@ cp $1/test/test_utils.cpp tests/test_utils.cpp + + if [ -d $1/.git ]; then + rev=$(cd $1 && git rev-parse --verify HEAD) ++ date=$(cd $1 && git show -s --format=%ci HEAD) + dirty=$(cd $1 && git diff-index --name-only HEAD) ++ set +e ++ pre_rev=$(grep -o '[[:xdigit:]]\{40\}' moz.yaml) ++ commits=$(cd $1 && git log --pretty=format:'%h - %s' $pre_rev..$rev) ++ set -e + fi + + if [ -n "$rev" ]; then +@@ -52,38 +73,18 @@ if [ -n "$rev" ]; then + version=$version-dirty + echo "WARNING: updating from a dirty git repository." + fi +- sed -i.bak -e "/The git commit ID used was/ s/[0-9a-f]\{40\}\(-dirty\)\{0,1\}\./$version./" README_MOZILLA +- rm README_MOZILLA.bak ++ sed -i.bak -e "s/^ *release:.*/ release: \"$version ($date)\"/" moz.yaml ++ if [[ ! "$( grep "$version" moz.yaml )" ]]; then ++ echo "Updating moz.yaml failed." ++ exit 1 ++ fi ++ rm moz.yaml.bak ++ [[ -n "$commits" ]] && echo -e "Pick commits:\n$commits" + else +- echo "Remember to update README_MOZILLA with the version details." ++ echo "Remember to update moz.yaml with the version details." + fi + +-echo "Applying a patch on top of $version" +-patch -p1 < ./unresampled-frames.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./bug1302231_emergency_bailout.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./osx-linearize-operations.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./prevent-double-free.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./bug1292803_pulse_assert.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./uplift-wasapi-part-to-beta.patch +- +-echo "Applying a patch on top of $version" +-patch -p3 < ./fix-crashes.patch +- +-echo "Applying a patch on top of $version" +-patch -p3 < ./uplift-part-of-f07ee6d-esr52.patch +- +-echo "Applying a patch on top of $version" +-patch -p3 < ./uplift-system-listener-patch.patch +- +-echo "Applying a patch on top of $version" +-patch -p1 < ./uplift-patch-7a4c711.patch ++echo "Applying disable-assert.patch on top of $rev" ++patch -p3 < disable-assert.patch ++echo "Applying disable-iaudioclient3.patch on top of $rev" ++patch -p3 < disable-iaudioclient3.patch +diff --git a/media/libcubeb/uplift-part-of-f07ee6d-esr52.patch b/media/libcubeb/uplift-part-of-f07ee6d-esr52.patch +deleted file mode 100644 +index 0eb1aca82..000000000 +--- a/media/libcubeb/uplift-part-of-f07ee6d-esr52.patch ++++ /dev/null +@@ -1,167 +0,0 @@ +-# HG changeset patch +-# User Alex Chronopoulos +-# Parent 00c051cd38c7a6cb3178fd0890d52056f83abfdc +-Bug 1345049 - Uplift part of cubeb upstream f07ee6d to esr52. r=padenot. a=xxxxxx +- +-diff --git a/media/libcubeb/src/cubeb_audiounit.cpp b/media/libcubeb/src/cubeb_audiounit.cpp +---- a/media/libcubeb/src/cubeb_audiounit.cpp +-+++ b/media/libcubeb/src/cubeb_audiounit.cpp +-@@ -590,33 +590,43 @@ audiounit_get_input_device_id(AudioDevic +- device_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- return CUBEB_OK; +- } +- +-+static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); +-+static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); +-+ +- static int +- audiounit_reinit_stream(cubeb_stream * stm, bool is_started) +- { +-+ auto_lock context_lock(stm->context->mutex); +- if (is_started) { +- audiounit_stream_stop_internal(stm); +- } +- +- { +- auto_lock lock(stm->mutex); +-+ float volume = 0.0; +-+ int vol_rv = audiounit_stream_get_volume(stm, &volume); +- +- audiounit_close_stream(stm); +- +- if (audiounit_setup_stream(stm) != CUBEB_OK) { +- LOG("(%p) Stream reinit failed.", stm); +- return CUBEB_ERROR; +- } +- +-+ if (vol_rv == CUBEB_OK) { +-+ audiounit_stream_set_volume(stm, volume); +-+ } +-+ +- // Reset input frames to force new stream pre-buffer +- // silence if needed, check `is_extra_input_needed()` +- stm->frames_read = 0; +- +- // If the stream was running, start it again. +- if (is_started) { +- audiounit_stream_start_internal(stm); +- } +-@@ -1007,20 +1017,22 @@ audiounit_get_preferred_sample_rate(cube +- static OSStatus audiounit_remove_device_listener(cubeb * context); +- +- static void +- audiounit_destroy(cubeb * ctx) +- { +- // Disabling this assert for bug 1083664 -- we seem to leak a stream +- // assert(ctx->active_streams == 0); +- +-- /* Unregister the callback if necessary. */ +-- if(ctx->collection_changed_callback) { +-+ { +- auto_lock lock(ctx->mutex); +-- audiounit_remove_device_listener(ctx); +-+ /* Unregister the callback if necessary. */ +-+ if(ctx->collection_changed_callback) { +-+ audiounit_remove_device_listener(ctx); +-+ } +- } +- +- ctx->~cubeb(); +- free(ctx); +- } +- +- static void audiounit_stream_destroy(cubeb_stream * stm); +- +-@@ -1861,17 +1873,17 @@ audiounit_close_stream(cubeb_stream *stm +- cubeb_resampler_destroy(stm->resampler); +- } +- +- static void +- audiounit_stream_destroy(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-- auto_lock context_locl(stm->context->mutex); +-+ auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- { +- auto_lock lock(stm->mutex); +- audiounit_close_stream(stm); +- } +- +- #if !TARGET_OS_IPHONE +-@@ -1905,17 +1917,17 @@ audiounit_stream_start_internal(cubeb_st +- } +- +- static int +- audiounit_stream_start(cubeb_stream * stm) +- { +- stm->shutdown = false; +- stm->draining = false; +- +-- auto_lock context_locl(stm->context->mutex); +-+ auto_lock context_lock(stm->context->mutex); +- audiounit_stream_start_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); +- +- LOG("Cubeb stream (%p) started successfully.", stm); +- return CUBEB_OK; +- } +- +-@@ -1933,17 +1945,17 @@ audiounit_stream_stop_internal(cubeb_str +- } +- } +- +- static int +- audiounit_stream_stop(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-- auto_lock context_locl(stm->context->mutex); +-+ auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- +- LOG("Cubeb stream (%p) stopped successfully.", stm); +- return CUBEB_OK; +- } +- +-@@ -2030,16 +2042,31 @@ audiounit_stream_get_latency(cubeb_strea +- } +- +- *latency = stm->hw_latency_frames + stm->current_latency_frames; +- +- return CUBEB_OK; +- #endif +- } +- +-+static int +-+audiounit_stream_get_volume(cubeb_stream * stm, float * volume) +-+{ +-+ assert(stm->output_unit); +-+ OSStatus r = AudioUnitGetParameter(stm->output_unit, +-+ kHALOutputParam_Volume, +-+ kAudioUnitScope_Global, +-+ 0, volume); +-+ if (r != noErr) { +-+ LOG("AudioUnitGetParameter/kHALOutputParam_Volume rv=%d", r); +-+ return CUBEB_ERROR; +-+ } +-+ return CUBEB_OK; +-+} +-+ +- int audiounit_stream_set_volume(cubeb_stream * stm, float volume) +- { +- OSStatus r; +- +- r = AudioUnitSetParameter(stm->output_unit, +- kHALOutputParam_Volume, +- kAudioUnitScope_Global, +- 0, volume, 0); +diff --git a/media/libcubeb/uplift-patch-7a4c711.patch b/media/libcubeb/uplift-patch-7a4c711.patch +deleted file mode 100644 +index 188bdf8b2..000000000 +--- a/media/libcubeb/uplift-patch-7a4c711.patch ++++ /dev/null +@@ -1,69 +0,0 @@ +-From 7a4c711d6e998b451326a0a87dd2e9dab5a257ef Mon Sep 17 00:00:00 2001 +-From: Alex Chronopoulos +-Date: Mon, 15 May 2017 16:47:26 +0300 +-Subject: [PATCH] audiounit: synchronize destroy stream and reinit (Bug +- 1361657) +- +---- +- src/cubeb_audiounit.cpp | 22 +++++++++++++++------- +- 1 file changed, 15 insertions(+), 7 deletions(-) +- +-diff --git a/src/cubeb_audiounit.cpp b/src/cubeb_audiounit.cpp +-index 8aa40d54..331bc735 100644 +---- a/src/cubeb_audiounit.cpp +-+++ b/src/cubeb_audiounit.cpp +-@@ -603,6 +603,7 @@ audiounit_get_input_device_id(AudioDeviceID * device_id) +- +- static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); +- static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); +-+static int audiounit_uninstall_device_changed_callback(cubeb_stream * stm); +- +- static int +- audiounit_reinit_stream(cubeb_stream * stm) +-@@ -612,6 +613,11 @@ audiounit_reinit_stream(cubeb_stream * stm) +- audiounit_stream_stop_internal(stm); +- } +- +-+ int r = audiounit_uninstall_device_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not uninstall the device changed callback", stm); +-+ } +-+ +- { +- auto_lock lock(stm->mutex); +- float volume = 0.0; +-@@ -2516,11 +2522,6 @@ audiounit_close_stream(cubeb_stream *stm) +- { +- stm->mutex.assert_current_thread_owns(); +- +-- int r = audiounit_uninstall_device_changed_callback(stm); +-- if (r != CUBEB_OK) { +-- LOG("(%p) Could not uninstall the device changed callback", stm); +-- } +-- +- if (stm->input_unit) { +- AudioUnitUninitialize(stm->input_unit); +- AudioComponentInstanceDispose(stm->input_unit); +-@@ -2554,13 +2555,20 @@ audiounit_stream_destroy(cubeb_stream * stm) +- LOG("(%p) Could not uninstall the device changed callback", stm); +- } +- +-+ r = audiounit_uninstall_device_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not uninstall the device changed callback", stm); +-+ } +-+ +- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +-- { +-+ // Execute close in serial queue to avoid collision +-+ // with reinit when un/plug devices +-+ dispatch_sync(stm->context->serial_queue, ^() { +- auto_lock lock(stm->mutex); +- audiounit_close_stream(stm); +-- } +-+ }); +- +- assert(stm->context->active_streams >= 1); +- stm->context->active_streams -= 1; +diff --git a/media/libcubeb/uplift-system-listener-patch.patch b/media/libcubeb/uplift-system-listener-patch.patch +deleted file mode 100644 +index 5064d7fb3..000000000 +--- a/media/libcubeb/uplift-system-listener-patch.patch ++++ /dev/null +@@ -1,402 +0,0 @@ +-diff --git a/media/libcubeb/src/cubeb_audiounit.cpp b/media/libcubeb/src/cubeb_audiounit.cpp +---- a/media/libcubeb/src/cubeb_audiounit.cpp +-+++ b/media/libcubeb/src/cubeb_audiounit.cpp +-@@ -594,20 +594,20 @@ audiounit_get_input_device_id(AudioDevic +- +- return CUBEB_OK; +- } +- +- static int audiounit_stream_get_volume(cubeb_stream * stm, float * volume); +- static int audiounit_stream_set_volume(cubeb_stream * stm, float volume); +- +- static int +--audiounit_reinit_stream(cubeb_stream * stm, bool is_started) +-+audiounit_reinit_stream(cubeb_stream * stm) +- { +- auto_lock context_lock(stm->context->mutex); +-- if (is_started) { +-+ if (!stm->shutdown) { +- audiounit_stream_stop_internal(stm); +- } +- +- { +- auto_lock lock(stm->mutex); +- float volume = 0.0; +- int vol_rv = audiounit_stream_get_volume(stm, &volume); +- +-@@ -622,32 +622,30 @@ audiounit_reinit_stream(cubeb_stream * s +- audiounit_stream_set_volume(stm, volume); +- } +- +- // Reset input frames to force new stream pre-buffer +- // silence if needed, check `is_extra_input_needed()` +- stm->frames_read = 0; +- +- // If the stream was running, start it again. +-- if (is_started) { +-+ if (!stm->shutdown) { +- audiounit_stream_start_internal(stm); +- } +- } +- return CUBEB_OK; +- } +- +- static OSStatus +- audiounit_property_listener_callback(AudioObjectID /* id */, UInt32 address_count, +- const AudioObjectPropertyAddress * addresses, +- void * user) +- { +- cubeb_stream * stm = (cubeb_stream*) user; +- stm->switching_device = true; +-- // Note if the stream was running or not +-- bool was_running = !stm->shutdown; +- +- LOG("(%p) Audio device changed, %d events.", stm, address_count); +- for (UInt32 i = 0; i < address_count; i++) { +- switch(addresses[i].mSelector) { +- case kAudioHardwarePropertyDefaultOutputDevice: { +- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDefaultOutputDevice", i); +- // Allow restart to choose the new default +- stm->output_device = nullptr; +-@@ -666,19 +664,20 @@ audiounit_property_listener_callback(Aud +- if (stm->is_default_input) { +- LOG("It's the default input device, ignore the event"); +- return noErr; +- } +- // Allow restart to choose the new default. Event register only for input. +- stm->input_device = nullptr; +- } +- break; +-- case kAudioDevicePropertyDataSource: +-- LOG("Event[%d] - mSelector == kAudioHardwarePropertyDataSource", i); +-- break; +-+ case kAudioDevicePropertyDataSource: { +-+ LOG("Event[%d] - mSelector == kAudioHardwarePropertyDataSource", i); +-+ return noErr; +-+ } +- } +- } +- +- for (UInt32 i = 0; i < address_count; i++) { +- switch(addresses[i].mSelector) { +- case kAudioHardwarePropertyDefaultOutputDevice: +- case kAudioHardwarePropertyDefaultInputDevice: +- case kAudioDevicePropertyDeviceIsAlive: +-@@ -691,17 +690,17 @@ audiounit_property_listener_callback(Aud +- break; +- } +- } +- } +- +- // Use a new thread, through the queue, to avoid deadlock when calling +- // Get/SetProperties method from inside notify callback +- dispatch_async(stm->context->serial_queue, ^() { +-- if (audiounit_reinit_stream(stm, was_running) != CUBEB_OK) { +-+ if (audiounit_reinit_stream(stm) != CUBEB_OK) { +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- LOG("(%p) Could not reopen the stream after switching.", stm); +- } +- stm->switching_device = false; +- }); +- +- return noErr; +- } +-@@ -752,27 +751,16 @@ audiounit_install_device_changed_callbac +- } +- +- r = audiounit_add_listener(stm, output_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/output/kAudioDevicePropertyDataSource", r); +- return CUBEB_ERROR; +- } +-- +-- /* This event will notify us when the default audio device changes, +-- * for example when the user plugs in a USB headset and the system chooses it +-- * automatically as the default, or when another device is chosen in the +-- * dropdown list. */ +-- r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +-- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/output/kAudioHardwarePropertyDefaultOutputDevice", r); +-- return CUBEB_ERROR; +-- } +- } +- +- if (stm->input_unit) { +- /* This event will notify us when the data source on the input device changes. */ +- AudioDeviceID input_dev_id; +- r = audiounit_get_input_device_id(&input_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +-@@ -780,78 +768,112 @@ audiounit_install_device_changed_callbac +- +- r = audiounit_add_listener(stm, input_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDataSource", r); +- return CUBEB_ERROR; +- } +- +-- /* This event will notify us when the default input device changes. */ +-- r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +-- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-- if (r != noErr) { +-- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioHardwarePropertyDefaultInputDevice", r); +-- return CUBEB_ERROR; +-- } +-- +- /* Event to notify when the input is going away. */ +- AudioDeviceID dev = stm->input_device ? reinterpret_cast(stm->input_device) : +- audiounit_get_default_device_id(CUBEB_DEVICE_TYPE_INPUT); +- r = audiounit_add_listener(stm, dev, kAudioDevicePropertyDeviceIsAlive, +- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +- if (r != noErr) { +- PRINT_ERROR_CODE("AudioObjectAddPropertyListener/input/kAudioDevicePropertyDeviceIsAlive", r); +- return CUBEB_ERROR; +- } +- } +- +- return CUBEB_OK; +- } +- +- static int +-+audiounit_install_system_changed_callback(cubeb_stream * stm) +-+{ +-+ OSStatus r; +-+ +-+ if (stm->output_unit) { +-+ /* This event will notify us when the default audio device changes, +-+ * for example when the user plugs in a USB headset and the system chooses it +-+ * automatically as the default, or when another device is chosen in the +-+ * dropdown list. */ +-+ r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +-+ kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-+ if (r != noErr) { +-+ LOG("AudioObjectAddPropertyListener/output/kAudioHardwarePropertyDefaultOutputDevice rv=%d", r); +-+ return CUBEB_ERROR; +-+ } +-+ } +-+ +-+ if (stm->input_unit) { +-+ /* This event will notify us when the default input device changes. */ +-+ r = audiounit_add_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +-+ kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-+ if (r != noErr) { +-+ LOG("AudioObjectAddPropertyListener/input/kAudioHardwarePropertyDefaultInputDevice rv=%d", r); +-+ return CUBEB_ERROR; +-+ } +-+ } +-+ +-+ return CUBEB_OK; +-+} +-+ +-+static int +- audiounit_uninstall_device_changed_callback(cubeb_stream * stm) +- { +- OSStatus r; +- +- if (stm->output_unit) { +- AudioDeviceID output_dev_id; +- r = audiounit_get_output_device_id(&output_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- r = audiounit_remove_listener(stm, output_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeOutput, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +-- +-- r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +-- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-- if (r != noErr) { +-- return CUBEB_ERROR; +-- } +- } +- +- if (stm->input_unit) { +- AudioDeviceID input_dev_id; +- r = audiounit_get_input_device_id(&input_dev_id); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- +- r = audiounit_remove_listener(stm, input_dev_id, kAudioDevicePropertyDataSource, +- kAudioDevicePropertyScopeInput, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +-- +-+ } +-+ return CUBEB_OK; +-+} +-+ +-+static int +-+audiounit_uninstall_system_changed_callback(cubeb_stream * stm) +-+{ +-+ OSStatus r; +-+ +-+ if (stm->output_unit) { +-+ r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultOutputDevice, +-+ kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-+ if (r != noErr) { +-+ return CUBEB_ERROR; +-+ } +-+ } +-+ +-+ if (stm->input_unit) { +- r = audiounit_remove_listener(stm, kAudioObjectSystemObject, kAudioHardwarePropertyDefaultInputDevice, +-- kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +-+ kAudioObjectPropertyScopeGlobal, &audiounit_property_listener_callback); +- if (r != noErr) { +- return CUBEB_ERROR; +- } +- } +- return CUBEB_OK; +- } +- +- /* Get the acceptable buffer size (in frames) that this device can work with. */ +-@@ -1764,16 +1786,22 @@ audiounit_setup_stream(cubeb_stream * st +- +- if (stm->input_unit && stm->output_unit) { +- // According to the I/O hardware rate it is expected a specific pattern of callbacks +- // for example is input is 44100 and output is 48000 we expected no more than 2 +- // out callback in a row. +- stm->expected_output_callbacks_in_a_row = ceilf(stm->output_hw_rate / stm->input_hw_rate); +- } +- +-+ r = audiounit_install_device_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not install the device change callback.", stm); +-+ return r; +-+ } +-+ +- return CUBEB_OK; +- } +- +- static int +- audiounit_stream_init(cubeb * context, +- cubeb_stream ** stream, +- char const * /* stream_name */, +- cubeb_devid input_device, +-@@ -1838,31 +1866,37 @@ audiounit_stream_init(cubeb * context, +- } +- +- if (r != CUBEB_OK) { +- LOG("(%p) Could not setup the audiounit stream.", stm); +- audiounit_stream_destroy(stm); +- return r; +- } +- +-- r = audiounit_install_device_changed_callback(stm); +-+ r = audiounit_install_system_changed_callback(stm); +- if (r != CUBEB_OK) { +- LOG("(%p) Could not install the device change callback.", stm); +- return r; +- } +- +- *stream = stm; +- LOG("Cubeb stream (%p) init successful.", stm); +- return CUBEB_OK; +- } +- +- static void +- audiounit_close_stream(cubeb_stream *stm) +- { +- stm->mutex.assert_current_thread_owns(); +-+ +-+ int r = audiounit_uninstall_device_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not uninstall the device changed callback", stm); +-+ } +-+ +- if (stm->input_unit) { +- AudioUnitUninitialize(stm->input_unit); +- AudioComponentInstanceDispose(stm->input_unit); +- } +- +- audiounit_destroy_input_linear_buffer(stm); +- +- if (stm->output_unit) { +-@@ -1873,31 +1907,29 @@ audiounit_close_stream(cubeb_stream *stm +- cubeb_resampler_destroy(stm->resampler); +- } +- +- static void +- audiounit_stream_destroy(cubeb_stream * stm) +- { +- stm->shutdown = true; +- +-+ int r = audiounit_uninstall_system_changed_callback(stm); +-+ if (r != CUBEB_OK) { +-+ LOG("(%p) Could not uninstall the device changed callback", stm); +-+ } +-+ +- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- { +- auto_lock lock(stm->mutex); +- audiounit_close_stream(stm); +- } +- +--#if !TARGET_OS_IPHONE +-- int r = audiounit_uninstall_device_changed_callback(stm); +-- if (r != CUBEB_OK) { +-- LOG("(%p) Could not uninstall the device changed callback", stm); +-- } +--#endif +-- +- assert(stm->context->active_streams >= 1); +- stm->context->active_streams -= 1; +- +- LOG("Cubeb stream (%p) destroyed successful.", stm); +- +- stm->~cubeb_stream(); +- free(stm); +- } +-@@ -1914,20 +1946,20 @@ audiounit_stream_start_internal(cubeb_st +- r = AudioOutputUnitStart(stm->output_unit); +- assert(r == 0); +- } +- } +- +- static int +- audiounit_stream_start(cubeb_stream * stm) +- { +-+ auto_lock context_lock(stm->context->mutex); +- stm->shutdown = false; +- stm->draining = false; +- +-- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_start_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); +- +- LOG("Cubeb stream (%p) started successfully.", stm); +- return CUBEB_OK; +- } +- +-@@ -1943,19 +1975,19 @@ audiounit_stream_stop_internal(cubeb_str +- r = AudioOutputUnitStop(stm->output_unit); +- assert(r == 0); +- } +- } +- +- static int +- audiounit_stream_stop(cubeb_stream * stm) +- { +-+ auto_lock context_lock(stm->context->mutex); +- stm->shutdown = true; +- +-- auto_lock context_lock(stm->context->mutex); +- audiounit_stream_stop_internal(stm); +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- +- LOG("Cubeb stream (%p) stopped successfully.", stm); +- return CUBEB_OK; +- } +- +diff --git a/media/libcubeb/uplift-wasapi-part-to-beta.patch b/media/libcubeb/uplift-wasapi-part-to-beta.patch +deleted file mode 100644 +index 90e827830..000000000 +--- a/media/libcubeb/uplift-wasapi-part-to-beta.patch ++++ /dev/null +@@ -1,118 +0,0 @@ +-# HG changeset patch +-# User Alex Chronopoulos +-# Parent b7bb31e5a851d6f8e142c39dc077e3774719eced +-Bug 1342363 - Uplift wasapi fixes in Beta. r?kinetik +- +-diff --git a/media/libcubeb/src/cubeb_wasapi.cpp b/media/libcubeb/src/cubeb_wasapi.cpp +---- a/media/libcubeb/src/cubeb_wasapi.cpp +-+++ b/media/libcubeb/src/cubeb_wasapi.cpp +-@@ -807,16 +807,20 @@ wasapi_stream_render_loop(LPVOID stream) +- maybe WebRTC. */ +- mmcss_handle = +- stm->context->set_mm_thread_characteristics("Audio", &mmcss_task_index); +- if (!mmcss_handle) { +- /* This is not fatal, but we might glitch under heavy load. */ +- LOG("Unable to use mmcss to bump the render thread priority: %x", GetLastError()); +- } +- +-+ // This has already been nulled out, simply exit. +-+ if (!emergency_bailout) { +-+ is_playing = false; +-+ } +- +- /* WaitForMultipleObjects timeout can trigger in cases where we don't want to +- treat it as a timeout, such as across a system sleep/wake cycle. Trigger +- the timeout error handling only when the timeout_limit is reached, which is +- reset on each successful loop. */ +- unsigned timeout_count = 0; +- const unsigned timeout_limit = 5; +- while (is_playing) { +-@@ -1158,22 +1162,26 @@ bool stop_and_join_render_thread(cubeb_s +- +- /* Wait five seconds for the rendering thread to return. It's supposed to +- * check its event loop very often, five seconds is rather conservative. */ +- DWORD r = WaitForSingleObject(stm->thread, 5000); +- if (r == WAIT_TIMEOUT) { +- /* Something weird happened, leak the thread and continue the shutdown +- * process. */ +- *(stm->emergency_bailout) = true; +-+ // We give the ownership to the rendering thread. +-+ stm->emergency_bailout = nullptr; +- LOG("Destroy WaitForSingleObject on thread timed out," +- " leaking the thread: %d", GetLastError()); +- rv = false; +- } +- if (r == WAIT_FAILED) { +- *(stm->emergency_bailout) = true; +-+ // We give the ownership to the rendering thread. +-+ stm->emergency_bailout = nullptr; +- LOG("Destroy WaitForSingleObject on thread failed: %d", GetLastError()); +- rv = false; +- } +- +- +- // Only attempts to close and null out the thread and event if the +- // WaitForSingleObject above succeeded, so that calling this function again +- // attemps to clean up the thread and event each time. +-@@ -1798,19 +1806,16 @@ void wasapi_stream_destroy(cubeb_stream +- XASSERT(stm); +- +- // Only free stm->emergency_bailout if we could not join the thread. +- // If we could not join the thread, stm->emergency_bailout is true +- // and is still alive until the thread wakes up and exits cleanly. +- if (stop_and_join_render_thread(stm)) { +- delete stm->emergency_bailout.load(); +- stm->emergency_bailout = nullptr; +-- } else { +-- // If we're leaking, it must be that this is true. +-- assert(*(stm->emergency_bailout)); +- } +- +- unregister_notification_client(stm); +- +- SafeRelease(stm->reconfigure_event); +- SafeRelease(stm->refill_event); +- SafeRelease(stm->input_available_event); +- +-@@ -1865,21 +1870,21 @@ int stream_start_one_side(cubeb_stream * +- return CUBEB_ERROR; +- } +- +- return CUBEB_OK; +- } +- +- int wasapi_stream_start(cubeb_stream * stm) +- { +-+ auto_lock lock(stm->stream_reset_lock); +-+ +- XASSERT(stm && !stm->thread && !stm->shutdown_event); +- XASSERT(stm->output_client || stm->input_client); +- +-- auto_lock lock(stm->stream_reset_lock); +-- +- stm->emergency_bailout = new std::atomic(false); +- +- if (stm->output_client) { +- int rv = stream_start_one_side(stm, OUTPUT); +- if (rv != CUBEB_OK) { +- return rv; +- } +- } +-@@ -1932,16 +1937,17 @@ int wasapi_stream_stop(cubeb_stream * st +- } +- } +- +- +- stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); +- } +- +- if (stop_and_join_render_thread(stm)) { +-+ // This is null if we've given the pointer to the other thread +- if (stm->emergency_bailout.load()) { +- delete stm->emergency_bailout.load(); +- stm->emergency_bailout = nullptr; +- } +- } +- +- return CUBEB_OK; +- } +-- +2.23.0 + diff --git a/iceweasel-uxp/0009-Tauthon.patch b/iceweasel-uxp/0009-Tauthon.patch new file mode 100644 index 0000000..ac69fd8 --- /dev/null +++ b/iceweasel-uxp/0009-Tauthon.patch @@ -0,0 +1,1146 @@ +From 0a66b93e7b6d88d67c6a37e7e22180e86ff310a7 Mon Sep 17 00:00:00 2001 +From: Gaming4JC +Date: Wed, 12 Aug 2020 23:32:39 -0400 +Subject: [PATCH 1/1] Tauthon Patch + +--- + build/build-clang/build-clang.py | 2 +- + build/build-clang/clang-static-analysis-linux64.json | 2 +- + build/checksums.py | 2 +- + build/compare-mozconfig/compare-mozconfigs-wrapper.py | 2 +- + build/compare-mozconfig/compare-mozconfigs.py | 2 +- + build/gen_test_packages_manifest.py | 2 +- + build/pgo/profileserver.py | 2 +- + build/upload.py | 2 +- + build/util/count_ctors.py | 2 +- + build/win32/pgomerge.py | 2 +- + client.py | 2 +- + .../checkout/closure-library/closure/bin/scopify.py | 2 +- + .../checkout/conformance/ogles/process-ogles2-tests.py | 2 +- + .../tests/browserscope/lib/richtext2/richtext2/common.py | 2 +- + .../tests/browserscope/lib/richtext2/richtext2/handlers.py | 2 +- + gfx/angle/src/libANGLE/renderer/angle_format.py | 2 +- + .../libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py | 2 +- + .../libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py | 2 +- + gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py | 2 +- + gfx/angle/src/libANGLE/renderer/gen_load_functions_table.py | 2 +- + gfx/harfbuzz/src/gen-arabic-table.py | 2 +- + gfx/harfbuzz/src/gen-indic-table.py | 2 +- + gfx/harfbuzz/src/gen-use-table.py | 2 +- + gfx/harfbuzz/src/sample.py | 2 +- + gfx/thebes/genTables.py | 2 +- + intl/icu/source/tools/icu-svnprops-check.py | 2 +- + intl/uconv/tools/gen-big5-data.py | 2 +- + .../src/third_party/libevent/test/rpcgen_wrapper.sh | 4 ++-- + ipc/ipdl/msgtype-components | 2 +- + js/src/ctypes/libffi/libffi.xcodeproj/project.pbxproj | 4 ++-- + js/src/devtools/rootAnalysis/analyze.py | 2 +- + js/src/devtools/rootAnalysis/explain.py | 2 +- + .../ecma_6/String/make-normalize-generateddata-input.py | 2 +- + js/src/vm/make_opcode_doc.py | 2 +- + layout/reftests/fonts/mark-generate.py | 2 +- + layout/reftests/fonts/math/generate.py | 2 +- + layout/reftests/w3c-css/import-tests.py | 2 +- + mailnews/extensions/fts3/data/generate_table.py | 2 +- + media/libaom/src/test/gviz_api.py | 2 +- + media/libaom/src/test/visual_metrics.py | 2 +- + media/libaom/src/tools/cpplint.py | 2 +- + media/libaom/src/tools/gen_constrained_tokenset.py | 2 +- + media/libaom/src/tools/lint-hunks.py | 2 +- + media/libstagefright/files.py | 2 +- + media/webrtc/trunk/build/ios/clean_env.py | 2 +- + media/webrtc/trunk/build/mac/strip_save_dsym | 2 +- + .../testing/gtest/xcode/gtest.xcodeproj/project.pbxproj | 2 +- + media/webrtc/trunk/tools/gyp/samples/samples | 2 +- + .../trunk/tools/gyp/test/actions-none/src/fake_cross.py | 2 +- + .../compiler-override/gyptest-compiler-global-settings.py | 2 +- + .../tools/gyp/test/external-cross-compile/src/fake_cross.py | 2 +- + .../tools/gyp/test/external-cross-compile/src/tochar.py | 2 +- + .../gyp/test/ios/app-bundle/TestApp/check_no_signature.py | 2 +- + nsprpub/automation/release/nspr-release-helper.py | 2 +- + nsprpub/build/win32/pgomerge.py | 2 +- + parser/html/java/htmlparser/generate-encoding-data.py | 2 +- + python/PyECC/setup.py | 2 +- + python/mozbuild/mozbuild/configure/libstdcxx.py | 2 +- + python/psutil/PKG-INFO | 4 ++-- + python/psutil/README.rst | 4 ++-- + python/psutil/docs/index.rst | 2 +- + python/psutil/examples/pmap.py | 6 +++--- + python/psutil/examples/process_detail.py | 2 +- + python/pyasn1-modules/tools/cmpdump.py | 2 +- + python/pyasn1-modules/tools/crldump.py | 2 +- + python/pyasn1-modules/tools/crmfdump.py | 2 +- + python/pyasn1-modules/tools/ocspclient.py | 2 +- + python/pyasn1-modules/tools/ocspreqdump.py | 2 +- + python/pyasn1-modules/tools/ocsprspdump.py | 2 +- + python/pyasn1-modules/tools/ocspserver.py | 2 +- + python/pyasn1-modules/tools/pkcs10dump.py | 2 +- + python/pyasn1-modules/tools/pkcs1dump.py | 2 +- + python/pyasn1-modules/tools/pkcs7dump.py | 2 +- + python/pyasn1-modules/tools/pkcs8dump.py | 2 +- + python/pyasn1-modules/tools/snmpget.py | 2 +- + python/pyasn1-modules/tools/x509dump.py | 2 +- + python/pyyaml/examples/yaml-highlight/yaml_hl.py | 2 +- + python/virtualenv/docs/reference.rst | 2 +- + python/virtualenv/tests/test_virtualenv.py | 6 +++--- + security/nss/automation/release/nss-release-helper.py | 2 +- + .../google_test/gtest/xcode/gtest.xcodeproj/project.pbxproj | 2 +- + testing/docker/centos6-build/system-setup.sh | 2 +- + testing/docker/recipes/run-task | 2 +- + testing/mozharness/external_tools/clobberer.py | 2 +- + testing/mozharness/external_tools/gittool.py | 2 +- + .../mozharness/external_tools/virtualenv/docs/reference.rst | 2 +- + .../external_tools/virtualenv/tests/test_virtualenv.py | 6 +++--- + tools/check-moz-style/checkmozstyle.py | 2 +- + tools/check-moz-style/modules/cpplint.py | 2 +- + tools/check-moz-style/run_tests.py | 2 +- + tools/rb/find_leakers.py | 2 +- + tools/rb/fix_linux_stack.py | 2 +- + tools/rb/fix_macosx_stack.py | 2 +- + tools/update-packaging/test_make_incremental_updates.py | 2 +- + 94 files changed, 104 insertions(+), 104 deletions(-) + +diff --git a/build/build-clang/build-clang.py b/build/build-clang/build-clang.py +index 697bbb9b8..97f347335 100755 +--- a/build/build-clang/build-clang.py ++++ b/build/build-clang/build-clang.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python2.7 ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/build/build-clang/clang-static-analysis-linux64.json b/build/build-clang/clang-static-analysis-linux64.json +index d3ae6c8ad..f80b489be 100644 +--- a/build/build-clang/clang-static-analysis-linux64.json ++++ b/build/build-clang/clang-static-analysis-linux64.json +@@ -9,7 +9,7 @@ + "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_380/final", + "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_380/final", + "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_380/final", +- "python_path": "/usr/bin/python2.7", ++ "python_path": "/usr/bin/tauthon2.8", + "gcc_dir": "/home/worker/workspace/build/src/gcc", + "cc": "/home/worker/workspace/build/src/gcc/bin/gcc", + "cxx": "/home/worker/workspace/build/src/gcc/bin/g++", +diff --git a/build/checksums.py b/build/checksums.py +index 9b13b50cb..25819a994 100755 +--- a/build/checksums.py ++++ b/build/checksums.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/build/compare-mozconfig/compare-mozconfigs-wrapper.py b/build/compare-mozconfig/compare-mozconfigs-wrapper.py +index e1888eed7..7f5e496f0 100644 +--- a/build/compare-mozconfig/compare-mozconfigs-wrapper.py ++++ b/build/compare-mozconfig/compare-mozconfigs-wrapper.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/build/compare-mozconfig/compare-mozconfigs.py b/build/compare-mozconfig/compare-mozconfigs.py +index 876e336fe..c5187b369 100644 +--- a/build/compare-mozconfig/compare-mozconfigs.py ++++ b/build/compare-mozconfig/compare-mozconfigs.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/build/gen_test_packages_manifest.py b/build/gen_test_packages_manifest.py +index 1e2a7c3bb..70f503e91 100644 +--- a/build/gen_test_packages_manifest.py ++++ b/build/gen_test_packages_manifest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this +diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py +index adc93d9b1..31258f31b 100644 +--- a/build/pgo/profileserver.py ++++ b/build/pgo/profileserver.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this +diff --git a/build/upload.py b/build/upload.py +index c6bc10429..2c2f0c4cd 100644 +--- a/build/upload.py ++++ b/build/upload.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this +diff --git a/build/util/count_ctors.py b/build/util/count_ctors.py +index 6a3a87068..7a59d44e6 100644 +--- a/build/util/count_ctors.py ++++ b/build/util/count_ctors.py +@@ -1,5 +1,5 @@ + +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + import json + import re + import subprocess +diff --git a/build/win32/pgomerge.py b/build/win32/pgomerge.py +index 313d66870..4e8cd835a 100755 +--- a/build/win32/pgomerge.py ++++ b/build/win32/pgomerge.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/client.py b/client.py +index d832c4287..18d6a0423 100755 +--- a/client.py ++++ b/client.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/dom/canvas/test/webgl-conf/checkout/closure-library/closure/bin/scopify.py b/dom/canvas/test/webgl-conf/checkout/closure-library/closure/bin/scopify.py +index d8057efbc..2329d39b7 100644 +--- a/dom/canvas/test/webgl-conf/checkout/closure-library/closure/bin/scopify.py ++++ b/dom/canvas/test/webgl-conf/checkout/closure-library/closure/bin/scopify.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Copyright 2010 The Closure Library Authors. All Rights Reserved. + # +diff --git a/dom/canvas/test/webgl-conf/checkout/conformance/ogles/process-ogles2-tests.py b/dom/canvas/test/webgl-conf/checkout/conformance/ogles/process-ogles2-tests.py +index 5ef710a68..e9ed95604 100644 +--- a/dom/canvas/test/webgl-conf/checkout/conformance/ogles/process-ogles2-tests.py ++++ b/dom/canvas/test/webgl-conf/checkout/conformance/ogles/process-ogles2-tests.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + """generates tests from OpenGL ES 2.0 .run/.test files.""" + +diff --git a/editor/libeditor/tests/browserscope/lib/richtext2/richtext2/common.py b/editor/libeditor/tests/browserscope/lib/richtext2/richtext2/common.py +index 345f9bbb0..a6c0a45ea 100644 +--- a/editor/libeditor/tests/browserscope/lib/richtext2/richtext2/common.py ++++ b/editor/libeditor/tests/browserscope/lib/richtext2/richtext2/common.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python2.5 ++#!/usr/bin/tauthon2.8 + # + # Copyright 2010 Google Inc. + # +diff --git a/editor/libeditor/tests/browserscope/lib/richtext2/richtext2/handlers.py b/editor/libeditor/tests/browserscope/lib/richtext2/richtext2/handlers.py +index 2ee1e79ad..2d514d703 100644 +--- a/editor/libeditor/tests/browserscope/lib/richtext2/richtext2/handlers.py ++++ b/editor/libeditor/tests/browserscope/lib/richtext2/richtext2/handlers.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python2.5 ++#!/usr/bin/tauthon2.8 + # + # Copyright 2010 Google Inc. + # +diff --git a/gfx/angle/src/libANGLE/renderer/angle_format.py b/gfx/angle/src/libANGLE/renderer/angle_format.py +index e46bc7dba..18698d9d1 100755 +--- a/gfx/angle/src/libANGLE/renderer/angle_format.py ++++ b/gfx/angle/src/libANGLE/renderer/angle_format.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright 2016 The ANGLE Project Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py +index 21b22803b..d43f82149 100755 +--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py ++++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright 2015 The ANGLE Project Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py +index 981a77f51..841e1f73f 100755 +--- a/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py ++++ b/gfx/angle/src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright 2015 The ANGLE Project Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py b/gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py +index 7356fc414..904771758 100755 +--- a/gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py ++++ b/gfx/angle/src/libANGLE/renderer/gen_angle_format_table.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright 2016 The ANGLE Project Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/gfx/angle/src/libANGLE/renderer/gen_load_functions_table.py b/gfx/angle/src/libANGLE/renderer/gen_load_functions_table.py +index eb3e4c5bf..27839d64e 100755 +--- a/gfx/angle/src/libANGLE/renderer/gen_load_functions_table.py ++++ b/gfx/angle/src/libANGLE/renderer/gen_load_functions_table.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright 2015 The ANGLE Project Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/gfx/harfbuzz/src/gen-arabic-table.py b/gfx/harfbuzz/src/gen-arabic-table.py +index 308435f99..1babb8e1f 100755 +--- a/gfx/harfbuzz/src/gen-arabic-table.py ++++ b/gfx/harfbuzz/src/gen-arabic-table.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + import sys + import os.path +diff --git a/gfx/harfbuzz/src/gen-indic-table.py b/gfx/harfbuzz/src/gen-indic-table.py +index 3016cd07b..d1363b1c2 100755 +--- a/gfx/harfbuzz/src/gen-indic-table.py ++++ b/gfx/harfbuzz/src/gen-indic-table.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + import sys + +diff --git a/gfx/harfbuzz/src/gen-use-table.py b/gfx/harfbuzz/src/gen-use-table.py +index a922c92fa..b192abed2 100755 +--- a/gfx/harfbuzz/src/gen-use-table.py ++++ b/gfx/harfbuzz/src/gen-use-table.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + import sys + +diff --git a/gfx/harfbuzz/src/sample.py b/gfx/harfbuzz/src/sample.py +index c2cb94d53..ea3531f4a 100755 +--- a/gfx/harfbuzz/src/sample.py ++++ b/gfx/harfbuzz/src/sample.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # -*- coding: utf-8 -*- + + from __future__ import print_function +diff --git a/gfx/thebes/genTables.py b/gfx/thebes/genTables.py +index 0e902c52a..448012bb6 100644 +--- a/gfx/thebes/genTables.py ++++ b/gfx/thebes/genTables.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + from __future__ import print_function + import sys +diff --git a/intl/icu/source/tools/icu-svnprops-check.py b/intl/icu/source/tools/icu-svnprops-check.py +index 4eb505c7f..7fc90d2e3 100755 +--- a/intl/icu/source/tools/icu-svnprops-check.py ++++ b/intl/icu/source/tools/icu-svnprops-check.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/tauthon2.8 + + # Copyright (C) 2016 and later: Unicode, Inc. and others. + # License & terms of use: http://www.unicode.org/copyright.html +diff --git a/intl/uconv/tools/gen-big5-data.py b/intl/uconv/tools/gen-big5-data.py +index 1d0f59bb4..779d98214 100644 +--- a/intl/uconv/tools/gen-big5-data.py ++++ b/intl/uconv/tools/gen-big5-data.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this +diff --git a/ipc/chromium/src/third_party/libevent/test/rpcgen_wrapper.sh b/ipc/chromium/src/third_party/libevent/test/rpcgen_wrapper.sh +index d2101b05c..977ed0e81 100755 +--- a/ipc/chromium/src/third_party/libevent/test/rpcgen_wrapper.sh ++++ b/ipc/chromium/src/third_party/libevent/test/rpcgen_wrapper.sh +@@ -26,8 +26,8 @@ exit_failed() { + exit 1 + } + +-if [ -x /usr/bin/python2 ] ; then +- PYTHON2=/usr/bin/python2 ++if [ -x /usr/bin/tauthon2.8 ] ; then ++ PYTHON2=/usr/bin/tauthon2.8 + elif [ "x`which python2`" != x ] ; then + PYTHON2=python2 + else +diff --git a/ipc/ipdl/msgtype-components b/ipc/ipdl/msgtype-components +index e411234f9..652a41737 100644 +--- a/ipc/ipdl/msgtype-components ++++ b/ipc/ipdl/msgtype-components +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/js/src/ctypes/libffi/libffi.xcodeproj/project.pbxproj b/js/src/ctypes/libffi/libffi.xcodeproj/project.pbxproj +index 1cf396ffa..6b6a38101 100644 +--- a/js/src/ctypes/libffi/libffi.xcodeproj/project.pbxproj ++++ b/js/src/ctypes/libffi/libffi.xcodeproj/project.pbxproj +@@ -353,7 +353,7 @@ + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; +- shellScript = "/usr/bin/python generate-darwin-source-and-headers.py --only-ios"; ++ shellScript = "/usr/bin/tauthon2.8 generate-darwin-source-and-headers.py --only-ios"; + }; + DB13B3061849E0490010F42D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; +@@ -366,7 +366,7 @@ + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; +- shellScript = "/usr/bin/python generate-darwin-source-and-headers.py --only-osx"; ++ shellScript = "/usr/bin/tauthon2.8 generate-darwin-source-and-headers.py --only-osx"; + }; + /* End PBXShellScriptBuildPhase section */ + +diff --git a/js/src/devtools/rootAnalysis/analyze.py b/js/src/devtools/rootAnalysis/analyze.py +index 69482dab7..4abcaffc7 100755 +--- a/js/src/devtools/rootAnalysis/analyze.py ++++ b/js/src/devtools/rootAnalysis/analyze.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + # + # This Source Code Form is subject to the terms of the Mozilla Public +diff --git a/js/src/devtools/rootAnalysis/explain.py b/js/src/devtools/rootAnalysis/explain.py +index dc8b76f5c..a6d0b15ef 100755 +--- a/js/src/devtools/rootAnalysis/explain.py ++++ b/js/src/devtools/rootAnalysis/explain.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + import re + import argparse +diff --git a/js/src/tests/ecma_6/String/make-normalize-generateddata-input.py b/js/src/tests/ecma_6/String/make-normalize-generateddata-input.py +index c1983dbd1..8ce367ed4 100644 +--- a/js/src/tests/ecma_6/String/make-normalize-generateddata-input.py ++++ b/js/src/tests/ecma_6/String/make-normalize-generateddata-input.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python -B ++#!/usr/bin/tauthon2.8 -B + + """ Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL + +diff --git a/js/src/vm/make_opcode_doc.py b/js/src/vm/make_opcode_doc.py +index 454d8b8d5..fa7481825 100755 +--- a/js/src/vm/make_opcode_doc.py ++++ b/js/src/vm/make_opcode_doc.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python -B ++#!/usr/bin/tauthon2.8 -B + + """ Usage: make_opcode_doc.py PATH_TO_MOZILLA_CENTRAL + +diff --git a/layout/reftests/fonts/mark-generate.py b/layout/reftests/fonts/mark-generate.py +index 1af6612ec..6601fc263 100755 +--- a/layout/reftests/fonts/mark-generate.py ++++ b/layout/reftests/fonts/mark-generate.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/layout/reftests/fonts/math/generate.py b/layout/reftests/fonts/math/generate.py +index 76cfcc597..9ce0b9223 100644 +--- a/layout/reftests/fonts/math/generate.py ++++ b/layout/reftests/fonts/math/generate.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/layout/reftests/w3c-css/import-tests.py b/layout/reftests/w3c-css/import-tests.py +index 1a631e2be..3787b6bbf 100755 +--- a/layout/reftests/w3c-css/import-tests.py ++++ b/layout/reftests/w3c-css/import-tests.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/mailnews/extensions/fts3/data/generate_table.py b/mailnews/extensions/fts3/data/generate_table.py +index f6b012685..d49914634 100644 +--- a/mailnews/extensions/fts3/data/generate_table.py ++++ b/mailnews/extensions/fts3/data/generate_table.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # ***** BEGIN LICENSE BLOCK ***** + # Version: MPL 1.1/GPL 2.0/LGPL 2.1 + # +diff --git a/media/libaom/src/test/gviz_api.py b/media/libaom/src/test/gviz_api.py +index d3a443dab..91fd74669 100644 +--- a/media/libaom/src/test/gviz_api.py ++++ b/media/libaom/src/test/gviz_api.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Copyright (c) 2016, Alliance for Open Media. All rights reserved + # +diff --git a/media/libaom/src/test/visual_metrics.py b/media/libaom/src/test/visual_metrics.py +index 9055feb33..34099a7c9 100644 +--- a/media/libaom/src/test/visual_metrics.py ++++ b/media/libaom/src/test/visual_metrics.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Copyright (c) 2016, Alliance for Open Media. All rights reserved + # +diff --git a/media/libaom/src/tools/cpplint.py b/media/libaom/src/tools/cpplint.py +index 25fbef73d..17b9df288 100644 +--- a/media/libaom/src/tools/cpplint.py ++++ b/media/libaom/src/tools/cpplint.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Copyright (c) 2009 Google Inc. All rights reserved. + # +diff --git a/media/libaom/src/tools/gen_constrained_tokenset.py b/media/libaom/src/tools/gen_constrained_tokenset.py +index 5d12ee1ef..f6c4e4498 100644 +--- a/media/libaom/src/tools/gen_constrained_tokenset.py ++++ b/media/libaom/src/tools/gen_constrained_tokenset.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + ## + ## Copyright (c) 2016, Alliance for Open Media. All rights reserved + ## +diff --git a/media/libaom/src/tools/lint-hunks.py b/media/libaom/src/tools/lint-hunks.py +index d02bee16c..b065351e6 100644 +--- a/media/libaom/src/tools/lint-hunks.py ++++ b/media/libaom/src/tools/lint-hunks.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + ## + ## Copyright (c) 2016, Alliance for Open Media. All rights reserved + ## +diff --git a/media/libstagefright/files.py b/media/libstagefright/files.py +index 4d6775fa4..02ea1609d 100644 +--- a/media/libstagefright/files.py ++++ b/media/libstagefright/files.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + import os + import sys +diff --git a/media/webrtc/trunk/build/ios/clean_env.py b/media/webrtc/trunk/build/ios/clean_env.py +index 548e2b92e..44d49024b 100755 +--- a/media/webrtc/trunk/build/ios/clean_env.py ++++ b/media/webrtc/trunk/build/ios/clean_env.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/media/webrtc/trunk/build/mac/strip_save_dsym b/media/webrtc/trunk/build/mac/strip_save_dsym +index ef08d831f..ebf29c1d1 100755 +--- a/media/webrtc/trunk/build/mac/strip_save_dsym ++++ b/media/webrtc/trunk/build/mac/strip_save_dsym +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + # Copyright (c) 2011 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be +diff --git a/media/webrtc/trunk/testing/gtest/xcode/gtest.xcodeproj/project.pbxproj b/media/webrtc/trunk/testing/gtest/xcode/gtest.xcodeproj/project.pbxproj +index da6455b5c..0574b6f4c 100644 +--- a/media/webrtc/trunk/testing/gtest/xcode/gtest.xcodeproj/project.pbxproj ++++ b/media/webrtc/trunk/testing/gtest/xcode/gtest.xcodeproj/project.pbxproj +@@ -652,7 +652,7 @@ + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; +- shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/usr/bin/python Scripts/versiongenerate.py ../ $PROJECT_TEMP_DIR"; ++ shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/usr/bin/tauthon2.8 Scripts/versiongenerate.py ../ $PROJECT_TEMP_DIR"; + }; + /* End PBXShellScriptBuildPhase section */ + +diff --git a/media/webrtc/trunk/tools/gyp/samples/samples b/media/webrtc/trunk/tools/gyp/samples/samples +index 804b61899..6bc544f7f 100755 +--- a/media/webrtc/trunk/tools/gyp/samples/samples ++++ b/media/webrtc/trunk/tools/gyp/samples/samples +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + # Copyright (c) 2009 Google Inc. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be +diff --git a/media/webrtc/trunk/tools/gyp/test/actions-none/src/fake_cross.py b/media/webrtc/trunk/tools/gyp/test/actions-none/src/fake_cross.py +index 2913f66a6..9c20a2109 100644 +--- a/media/webrtc/trunk/tools/gyp/test/actions-none/src/fake_cross.py ++++ b/media/webrtc/trunk/tools/gyp/test/actions-none/src/fake_cross.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright (c) 2012 Google Inc. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/media/webrtc/trunk/tools/gyp/test/compiler-override/gyptest-compiler-global-settings.py b/media/webrtc/trunk/tools/gyp/test/compiler-override/gyptest-compiler-global-settings.py +index d58fc7c2f..723ed3b5d 100755 +--- a/media/webrtc/trunk/tools/gyp/test/compiler-override/gyptest-compiler-global-settings.py ++++ b/media/webrtc/trunk/tools/gyp/test/compiler-override/gyptest-compiler-global-settings.py +@@ -23,7 +23,7 @@ test = TestGyp.TestGyp(formats=['ninja', 'make']) + + gypfile = 'compiler-global-settings.gyp' + +-replacements = { 'PYTHON': '/usr/bin/python', 'PWD': os.getcwd()} ++replacements = { 'PYTHON': '/usr/bin/tauthon2.8', 'PWD': os.getcwd()} + + # Process the .in gyp file to produce the final gyp file + # since we need to include absolute paths in the make_global_settings +diff --git a/media/webrtc/trunk/tools/gyp/test/external-cross-compile/src/fake_cross.py b/media/webrtc/trunk/tools/gyp/test/external-cross-compile/src/fake_cross.py +index 05eacc6a6..d4a9dc272 100644 +--- a/media/webrtc/trunk/tools/gyp/test/external-cross-compile/src/fake_cross.py ++++ b/media/webrtc/trunk/tools/gyp/test/external-cross-compile/src/fake_cross.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright (c) 2012 Google Inc. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/media/webrtc/trunk/tools/gyp/test/external-cross-compile/src/tochar.py b/media/webrtc/trunk/tools/gyp/test/external-cross-compile/src/tochar.py +index c0780d984..4732594e7 100644 +--- a/media/webrtc/trunk/tools/gyp/test/external-cross-compile/src/tochar.py ++++ b/media/webrtc/trunk/tools/gyp/test/external-cross-compile/src/tochar.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Copyright (c) 2012 Google Inc. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/media/webrtc/trunk/tools/gyp/test/ios/app-bundle/TestApp/check_no_signature.py b/media/webrtc/trunk/tools/gyp/test/ios/app-bundle/TestApp/check_no_signature.py +index 4f6e34007..8d2bd04e0 100644 +--- a/media/webrtc/trunk/tools/gyp/test/ios/app-bundle/TestApp/check_no_signature.py ++++ b/media/webrtc/trunk/tools/gyp/test/ios/app-bundle/TestApp/check_no_signature.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + import os + import subprocess +diff --git a/nsprpub/automation/release/nspr-release-helper.py b/nsprpub/automation/release/nspr-release-helper.py +index f526618bf..b54d2ad45 100644 +--- a/nsprpub/automation/release/nspr-release-helper.py ++++ b/nsprpub/automation/release/nspr-release-helper.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/nsprpub/build/win32/pgomerge.py b/nsprpub/build/win32/pgomerge.py +index 313d66870..4e8cd835a 100644 +--- a/nsprpub/build/win32/pgomerge.py ++++ b/nsprpub/build/win32/pgomerge.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/parser/html/java/htmlparser/generate-encoding-data.py b/parser/html/java/htmlparser/generate-encoding-data.py +index 69b2fdc30..753f059dc 100644 +--- a/parser/html/java/htmlparser/generate-encoding-data.py ++++ b/parser/html/java/htmlparser/generate-encoding-data.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + # Copyright (c) 2013-2015 Mozilla Foundation + # +diff --git a/python/PyECC/setup.py b/python/PyECC/setup.py +index b9e507c18..72e1dcd32 100644 +--- a/python/PyECC/setup.py ++++ b/python/PyECC/setup.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python2.4 ++#!/usr/bin/tauthon2.8 + # + # Copyright 2007 The Python-Twitter Developers + # +diff --git a/python/mozbuild/mozbuild/configure/libstdcxx.py b/python/mozbuild/mozbuild/configure/libstdcxx.py +index cab0ccb11..3baaa7853 100644 +--- a/python/mozbuild/mozbuild/configure/libstdcxx.py ++++ b/python/mozbuild/mozbuild/configure/libstdcxx.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/python/psutil/PKG-INFO b/python/psutil/PKG-INFO +index e74d33f65..5daeab797 100644 +--- a/python/psutil/PKG-INFO ++++ b/python/psutil/PKG-INFO +@@ -216,11 +216,11 @@ Description: .. image:: https://img.shields.io/pypi/dm/psutil.svg + >>> p.name() + 'python' + >>> p.exe() +- '/usr/bin/python' ++ '/usr/bin/tauthon2.8' + >>> p.cwd() + '/home/giampaolo' + >>> p.cmdline() +- ['/usr/bin/python', 'main.py'] ++ ['/usr/bin/tauthon2.8', 'main.py'] + >>> + >>> p.status() + 'running' +diff --git a/python/psutil/README.rst b/python/psutil/README.rst +index 564656146..a10275352 100644 +--- a/python/psutil/README.rst ++++ b/python/psutil/README.rst +@@ -208,11 +208,11 @@ Process management + >>> p.name() + 'python' + >>> p.exe() +- '/usr/bin/python' ++ '/usr/bin/tauthon2.8' + >>> p.cwd() + '/home/giampaolo' + >>> p.cmdline() +- ['/usr/bin/python', 'main.py'] ++ ['/usr/bin/tauthon2.8', 'main.py'] + >>> + >>> p.status() + 'running' +diff --git a/python/psutil/docs/index.rst b/python/psutil/docs/index.rst +index 443019226..79e1655ba 100644 +--- a/python/psutil/docs/index.rst ++++ b/python/psutil/docs/index.rst +@@ -1248,7 +1248,7 @@ Popen class + >>> import psutil + >>> from subprocess import PIPE + >>> +- >>> p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"], stdout=PIPE) ++ >>> p = psutil.Popen(["/usr/bin/tauthon2.8", "-c", "print('hello')"], stdout=PIPE) + >>> p.name() + 'python' + >>> p.username() +diff --git a/python/psutil/examples/pmap.py b/python/psutil/examples/pmap.py +index 7593777ae..5bc713d2f 100755 +--- a/python/psutil/examples/pmap.py ++++ b/python/psutil/examples/pmap.py +@@ -11,9 +11,9 @@ Report memory map of a process. + $ python examples/pmap.py 32402 + pid=32402, name=hg + Address RSS Mode Mapping +-0000000000400000 1200K r-xp /usr/bin/python2.7 +-0000000000838000 4K r--p /usr/bin/python2.7 +-0000000000839000 304K rw-p /usr/bin/python2.7 ++0000000000400000 1200K r-xp /usr/bin/tauthon2.8 ++0000000000838000 4K r--p /usr/bin/tauthon2.8 ++0000000000839000 304K rw-p /usr/bin/tauthon2.8 + 00000000008ae000 68K rw-p [anon] + 000000000275e000 5396K rw-p [heap] + 00002b29bb1e0000 124K r-xp /lib/x86_64-linux-gnu/ld-2.17.so +diff --git a/python/psutil/examples/process_detail.py b/python/psutil/examples/process_detail.py +index e20371aef..5ca35ef2a 100755 +--- a/python/psutil/examples/process_detail.py ++++ b/python/psutil/examples/process_detail.py +@@ -11,7 +11,7 @@ Author: Giampaolo Rodola' + $ python examples/process_detail.py + pid 820 + name python +-exe /usr/bin/python2.7 ++exe /usr/bin/tauthon2.8 + parent 29613 (bash) + cmdline python examples/process_detail.py + started 2014-41-27 03:41 +diff --git a/python/pyasn1-modules/tools/cmpdump.py b/python/pyasn1-modules/tools/cmpdump.py +index 74c4f77a4..78f343b58 100755 +--- a/python/pyasn1-modules/tools/cmpdump.py ++++ b/python/pyasn1-modules/tools/cmpdump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Read ASN.1/PEM CMP message on stdin, parse into + # plain text, then build substrate from it + from pyasn1.codec.der import decoder, encoder +diff --git a/python/pyasn1-modules/tools/crldump.py b/python/pyasn1-modules/tools/crldump.py +index d4b0a547c..04704c8af 100755 +--- a/python/pyasn1-modules/tools/crldump.py ++++ b/python/pyasn1-modules/tools/crldump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Read X.509 CRL on stdin, print them pretty and encode back into + # original wire format. +diff --git a/python/pyasn1-modules/tools/crmfdump.py b/python/pyasn1-modules/tools/crmfdump.py +index 22bfc9d95..0608c04ad 100755 +--- a/python/pyasn1-modules/tools/crmfdump.py ++++ b/python/pyasn1-modules/tools/crmfdump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # Read ASN.1/PEM X.509 CRMF request on stdin, parse into + # plain text, then build substrate from it + from pyasn1.codec.der import decoder, encoder +diff --git a/python/pyasn1-modules/tools/ocspclient.py b/python/pyasn1-modules/tools/ocspclient.py +index b2d1dfc54..d66db78e9 100755 +--- a/python/pyasn1-modules/tools/ocspclient.py ++++ b/python/pyasn1-modules/tools/ocspclient.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + from pyasn1.codec.der import decoder, encoder + from pyasn1_modules import rfc2560, rfc2459, pem +diff --git a/python/pyasn1-modules/tools/ocspreqdump.py b/python/pyasn1-modules/tools/ocspreqdump.py +index 3a03115ea..c0ae776d2 100755 +--- a/python/pyasn1-modules/tools/ocspreqdump.py ++++ b/python/pyasn1-modules/tools/ocspreqdump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Read ASN.1/PEM X.509 CRMF request on stdin, parse into + # plain text, then build substrate from it +diff --git a/python/pyasn1-modules/tools/ocsprspdump.py b/python/pyasn1-modules/tools/ocsprspdump.py +index 9e49ce038..45c1da2c9 100755 +--- a/python/pyasn1-modules/tools/ocsprspdump.py ++++ b/python/pyasn1-modules/tools/ocsprspdump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Read ASN.1/PEM OCSP response on stdin, parse into + # plain text, then build substrate from it +diff --git a/python/pyasn1-modules/tools/ocspserver.py b/python/pyasn1-modules/tools/ocspserver.py +index 2d12d5399..8e9692978 100755 +--- a/python/pyasn1-modules/tools/ocspserver.py ++++ b/python/pyasn1-modules/tools/ocspserver.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + from pyasn1.codec.der import decoder, encoder + from pyasn1_modules import rfc2560, rfc2459, pem +diff --git a/python/pyasn1-modules/tools/pkcs10dump.py b/python/pyasn1-modules/tools/pkcs10dump.py +index ea979c0cf..ad204a1a0 100755 +--- a/python/pyasn1-modules/tools/pkcs10dump.py ++++ b/python/pyasn1-modules/tools/pkcs10dump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Read ASN.1/PEM X.509 certificate requests (PKCS#10 format) on stdin, + # parse each into plain text, then build substrate from it +diff --git a/python/pyasn1-modules/tools/pkcs1dump.py b/python/pyasn1-modules/tools/pkcs1dump.py +index d0da82b2f..c6dbf62f8 100755 +--- a/python/pyasn1-modules/tools/pkcs1dump.py ++++ b/python/pyasn1-modules/tools/pkcs1dump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Read unencrypted PKCS#1/PKIX-compliant, PEM&DER encoded private keys on + # stdin, print them pretty and encode back into original wire format. +diff --git a/python/pyasn1-modules/tools/pkcs7dump.py b/python/pyasn1-modules/tools/pkcs7dump.py +index 779487162..6b2709029 100755 +--- a/python/pyasn1-modules/tools/pkcs7dump.py ++++ b/python/pyasn1-modules/tools/pkcs7dump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Read ASN.1/PEM PKCS#7 on stdin, parse it into plain text, + # then build substrate from it +diff --git a/python/pyasn1-modules/tools/pkcs8dump.py b/python/pyasn1-modules/tools/pkcs8dump.py +index d1d125f8c..bdbb6d8f5 100755 +--- a/python/pyasn1-modules/tools/pkcs8dump.py ++++ b/python/pyasn1-modules/tools/pkcs8dump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Read bunch of ASN.1/PEM plain/encrypted private keys in PKCS#8 + # format on stdin, parse each into plain text, then build substrate from it +diff --git a/python/pyasn1-modules/tools/snmpget.py b/python/pyasn1-modules/tools/snmpget.py +index 372510329..a3380408a 100755 +--- a/python/pyasn1-modules/tools/snmpget.py ++++ b/python/pyasn1-modules/tools/snmpget.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Generate SNMPGET request, parse response + # +diff --git a/python/pyasn1-modules/tools/x509dump.py b/python/pyasn1-modules/tools/x509dump.py +index 64cba7e30..3fc159aeb 100755 +--- a/python/pyasn1-modules/tools/x509dump.py ++++ b/python/pyasn1-modules/tools/x509dump.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Read ASN.1/PEM X.509 certificates on stdin, parse each into plain text, + # then build substrate from it +diff --git a/python/pyyaml/examples/yaml-highlight/yaml_hl.py b/python/pyyaml/examples/yaml-highlight/yaml_hl.py +index d6f7bf4eb..8b2e966db 100755 +--- a/python/pyyaml/examples/yaml-highlight/yaml_hl.py ++++ b/python/pyyaml/examples/yaml-highlight/yaml_hl.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + + import yaml, codecs, sys, os.path, optparse + +diff --git a/python/virtualenv/docs/reference.rst b/python/virtualenv/docs/reference.rst +index 9249473c9..2901b76db 100644 +--- a/python/virtualenv/docs/reference.rst ++++ b/python/virtualenv/docs/reference.rst +@@ -43,7 +43,7 @@ Options + --python=python2.5 will use the python2.5 interpreter + to create the new environment. The default is the + interpreter that virtualenv was installed with +- (like ``/usr/bin/python``) ++ (like ``/usr/bin/tauthon2.8``) + + .. option:: --clear + +diff --git a/python/virtualenv/tests/test_virtualenv.py b/python/virtualenv/tests/test_virtualenv.py +index 756cde936..c6446549d 100644 +--- a/python/virtualenv/tests/test_virtualenv.py ++++ b/python/virtualenv/tests/test_virtualenv.py +@@ -20,7 +20,7 @@ def test_resolve_interpreter_with_absolute_path(mock_exists): + """Should return absolute path if given and exists""" + mock_exists.return_value = True + virtualenv.is_executable = Mock(return_value=True) +- test_abs_path = os.path.abspath("/usr/bin/python53") ++ test_abs_path = os.path.abspath("/usr/bin/tauthon2.853") + + exe = virtualenv.resolve_interpreter(test_abs_path) + +@@ -35,9 +35,9 @@ def test_resolve_interpreter_with_nonexistent_interpreter(mock_exists): + mock_exists.return_value = False + + with pytest.raises(SystemExit): +- virtualenv.resolve_interpreter("/usr/bin/python53") ++ virtualenv.resolve_interpreter("/usr/bin/tauthon2.853") + +- mock_exists.assert_called_with("/usr/bin/python53") ++ mock_exists.assert_called_with("/usr/bin/tauthon2.853") + + + @patch('os.path.exists') +diff --git a/security/nss/automation/release/nss-release-helper.py b/security/nss/automation/release/nss-release-helper.py +index 8cc0a725e..17787b11a 100644 +--- a/security/nss/automation/release/nss-release-helper.py ++++ b/security/nss/automation/release/nss-release-helper.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/security/nss/gtests/google_test/gtest/xcode/gtest.xcodeproj/project.pbxproj b/security/nss/gtests/google_test/gtest/xcode/gtest.xcodeproj/project.pbxproj +index 003bff8cb..497c3cdc6 100644 +--- a/security/nss/gtests/google_test/gtest/xcode/gtest.xcodeproj/project.pbxproj ++++ b/security/nss/gtests/google_test/gtest/xcode/gtest.xcodeproj/project.pbxproj +@@ -697,7 +697,7 @@ + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; +- shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/usr/bin/python Scripts/versiongenerate.py ../ $PROJECT_TEMP_DIR"; ++ shellScript = "# Remember, this \"Run Script\" build phase will be executed from $SRCROOT\n/usr/bin/tauthon2.8 Scripts/versiongenerate.py ../ $PROJECT_TEMP_DIR"; + }; + /* End PBXShellScriptBuildPhase section */ + +diff --git a/testing/docker/centos6-build/system-setup.sh b/testing/docker/centos6-build/system-setup.sh +index ddb529eed..f9aaafd98 100644 +--- a/testing/docker/centos6-build/system-setup.sh ++++ b/testing/docker/centos6-build/system-setup.sh +@@ -366,7 +366,7 @@ EOF + cd Python-2.7.10 + ./configure --prefix=/usr + make +-# `altinstall` means that /usr/bin/python still points to CentOS's Python 2.6 install. ++# `altinstall` means that /usr/bin/tauthon2.8 still points to CentOS's Python 2.6 install. + # If you want Python 2.7, use `python2.7` + make altinstall + +diff --git a/testing/docker/recipes/run-task b/testing/docker/recipes/run-task +index 978683cb5..18d570cc8 100755 +--- a/testing/docker/recipes/run-task ++++ b/testing/docker/recipes/run-task +@@ -1,4 +1,4 @@ +-#!/usr/bin/python2.7 -u ++#!/usr/bin/tauthon2.8 -u + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +diff --git a/testing/mozharness/external_tools/clobberer.py b/testing/mozharness/external_tools/clobberer.py +index a58b00402..2b01fe802 100755 +--- a/testing/mozharness/external_tools/clobberer.py ++++ b/testing/mozharness/external_tools/clobberer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # vim:sts=2 sw=2 + import sys + import shutil +diff --git a/testing/mozharness/external_tools/gittool.py b/testing/mozharness/external_tools/gittool.py +index 520aeaf38..3eee9fb0a 100755 +--- a/testing/mozharness/external_tools/gittool.py ++++ b/testing/mozharness/external_tools/gittool.py +@@ -11,7 +11,7 @@ for name, source in module_sources: + sys.modules[name] = mod + + ### Original script follows ### +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + """%prog [-p|--props-file] [-r|--rev revision] [-b|--branch branch] + [-s|--shared-dir shared_dir] repo [dest] + +diff --git a/testing/mozharness/external_tools/virtualenv/docs/reference.rst b/testing/mozharness/external_tools/virtualenv/docs/reference.rst +index 9249473c9..2901b76db 100644 +--- a/testing/mozharness/external_tools/virtualenv/docs/reference.rst ++++ b/testing/mozharness/external_tools/virtualenv/docs/reference.rst +@@ -43,7 +43,7 @@ Options + --python=python2.5 will use the python2.5 interpreter + to create the new environment. The default is the + interpreter that virtualenv was installed with +- (like ``/usr/bin/python``) ++ (like ``/usr/bin/tauthon2.8``) + + .. option:: --clear + +diff --git a/testing/mozharness/external_tools/virtualenv/tests/test_virtualenv.py b/testing/mozharness/external_tools/virtualenv/tests/test_virtualenv.py +index 756cde936..a2e764df3 100644 +--- a/testing/mozharness/external_tools/virtualenv/tests/test_virtualenv.py ++++ b/testing/mozharness/external_tools/virtualenv/tests/test_virtualenv.py +@@ -20,7 +20,7 @@ def test_resolve_interpreter_with_absolute_path(mock_exists): + """Should return absolute path if given and exists""" + mock_exists.return_value = True + virtualenv.is_executable = Mock(return_value=True) +- test_abs_path = os.path.abspath("/usr/bin/python53") ++ test_abs_path = os.path.abspath("/usr/bin/tauthon2.8") + + exe = virtualenv.resolve_interpreter(test_abs_path) + +@@ -35,9 +35,9 @@ def test_resolve_interpreter_with_nonexistent_interpreter(mock_exists): + mock_exists.return_value = False + + with pytest.raises(SystemExit): +- virtualenv.resolve_interpreter("/usr/bin/python53") ++ virtualenv.resolve_interpreter("/usr/bin/tauthon2.8") + +- mock_exists.assert_called_with("/usr/bin/python53") ++ mock_exists.assert_called_with("/usr/bin/tauthon2.8") + + + @patch('os.path.exists') +diff --git a/tools/check-moz-style/checkmozstyle.py b/tools/check-moz-style/checkmozstyle.py +index d8261aec5..01c16234b 100755 +--- a/tools/check-moz-style/checkmozstyle.py ++++ b/tools/check-moz-style/checkmozstyle.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Copyright (C) 2009 Google Inc. All rights reserved. + # +diff --git a/tools/check-moz-style/modules/cpplint.py b/tools/check-moz-style/modules/cpplint.py +index c01e82d45..9383c4cb3 100644 +--- a/tools/check-moz-style/modules/cpplint.py ++++ b/tools/check-moz-style/modules/cpplint.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # -*- coding: utf-8 -*- + # + # Copyright (C) 2009 Google Inc. All rights reserved. +diff --git a/tools/check-moz-style/run_tests.py b/tools/check-moz-style/run_tests.py +index 5ef3fa311..9a974d338 100755 +--- a/tools/check-moz-style/run_tests.py ++++ b/tools/check-moz-style/run_tests.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # Any copyright is dedicated to the Public Domain. + # http://creativecommons.org/publicdomain/zero/1.0/ +diff --git a/tools/rb/find_leakers.py b/tools/rb/find_leakers.py +index 4405d7a17..ce881d6ef 100755 +--- a/tools/rb/find_leakers.py ++++ b/tools/rb/find_leakers.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this +diff --git a/tools/rb/fix_linux_stack.py b/tools/rb/fix_linux_stack.py +index bdc8a15dc..2b9526f4d 100755 +--- a/tools/rb/fix_linux_stack.py ++++ b/tools/rb/fix_linux_stack.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # vim:sw=4:ts=4:et: + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this +diff --git a/tools/rb/fix_macosx_stack.py b/tools/rb/fix_macosx_stack.py +index 7d076d9b6..ae22091d9 100755 +--- a/tools/rb/fix_macosx_stack.py ++++ b/tools/rb/fix_macosx_stack.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # vim:sw=4:ts=4:et: + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this +diff --git a/tools/update-packaging/test_make_incremental_updates.py b/tools/update-packaging/test_make_incremental_updates.py +index 016823dee..242398977 100644 +--- a/tools/update-packaging/test_make_incremental_updates.py ++++ b/tools/update-packaging/test_make_incremental_updates.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/tauthon2.8 + # This Source Code Form is subject to the terms of the Mozilla Public + # License, v. 2.0. If a copy of the MPL was not distributed with this + # file, You can obtain one at http://mozilla.org/MPL/2.0/. +-- +2.26.3 + diff --git a/iceweasel-uxp/0010-remove-malfunctional-searchplugins.patch b/iceweasel-uxp/0010-remove-malfunctional-searchplugins.patch new file mode 100644 index 0000000..6163659 --- /dev/null +++ b/iceweasel-uxp/0010-remove-malfunctional-searchplugins.patch @@ -0,0 +1,822 @@ +--- a/application/iceweasel-uxp/locales/search/list.json 2021-06-02 22:37:21.000000000 +0200 ++++ b/application/iceweasel-uxp/locales/search/list.json 2024-11-19 16:21:54.220827326 +0100 +@@ -1,7 +1,7 @@ + { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + }, + "regionOverrides": { +@@ -10,693 +10,693 @@ + "en-US": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ach": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "af": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "an": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ar": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "as": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ast": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "az": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "bg": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "bn-BD": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "bn-IN": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "br": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "bs": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ca": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "cak": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "cs": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "cy": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "da": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "de": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "dsb": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "el": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "en-GB": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "en-ZA": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "eo": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "es-AR": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "es-CL": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "es-ES": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "es-MX": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "et": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "eu": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "fa": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ff": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "fi": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "fr": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "fy-NL": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ga-IE": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "gd": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "gl": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "gn": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "gu-IN": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "he": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "hi-IN": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "hr": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "hsb": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "hu": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "hy-AM": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "id": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "is": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "it": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ja-JP-mac": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ja": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ka": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "kab": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "kk": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "km": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "kn": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ko": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "lij": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "lt": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ltg": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "lv": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "mai": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "mk": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ml": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "mr": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ms": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "my": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "nb-NO": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ne-NP": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "nl": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "nn-NO": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "or": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "pa-IN": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "pl": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "pt-BR": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "pt-PT": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "rm": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ro": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ru": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "si": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "sk": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "sl": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "son": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "sq": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "sr": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "sv-SE": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ta": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "te": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "th": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "tl": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "tr": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "uk": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "ur": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "uz": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "vi": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "wo": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "xh": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "zh-CN": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + }, + "zh-TW": { + "default": { + "visibleDefaultEngines": [ +- "searx", "searx-tor", "yacy", "gnusocial", "invidious", "invidious-tor", "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" ++ "internet-archive", "wikipedia-en", "wikimedia-commons", "hyperbola-packages" + ] + } + } +--- a/application/iceweasel-uxp/locales/en-US/chrome/browser-region/region.properties 2021-06-02 22:37:21.000000000 +0200 ++++ b/application/iceweasel-uxp/locales/en-US/chrome/browser-region/region.properties 2024-11-19 16:24:25.930787059 +0100 +@@ -3,9 +3,9 @@ + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + # Default search engine +-browser.search.defaultenginename=SearX ++browser.search.defaultenginename=Internet Archive + + # Search engine order (order displayed in the search bar dropdown)s +-browser.search.order.1=SearX +-browser.search.order.2=YaCy +-browser.search.order.3=SearX (Tor) +\ ++browser.search.order.1=Internet Archive ++browser.search.order.2=Hyperbola Packages ++browser.search.order.3=Wikipedia (en) +\ diff --git a/iceweasel-uxp/0011-iceweasel-uxp-install-dir.patch b/iceweasel-uxp/0011-iceweasel-uxp-install-dir.patch new file mode 100644 index 0000000..01e5fb8 --- /dev/null +++ b/iceweasel-uxp/0011-iceweasel-uxp-install-dir.patch @@ -0,0 +1,13 @@ +diff --git a/config/baseconfig.mk b/config/baseconfig.mk +index 47a12b1..1d9f262 100644 +--- a/config/baseconfig.mk ++++ b/config/baseconfig.mk +@@ -4,7 +4,7 @@ + # whether a normal build is happening or whether the check is running. + includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) + idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) +-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) ++installdir = $(libdir)/$(MOZ_APP_NAME) + sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) + ifeq (.,$(DEPTH)) + DIST = dist diff --git a/iceweasel-uxp/LICENSE b/iceweasel-uxp/LICENSE new file mode 100644 index 0000000..901ff11 --- /dev/null +++ b/iceweasel-uxp/LICENSE @@ -0,0 +1,5473 @@ + + about:license + +*Binaries* of this product have been made available to you by the +Hyperbola Project under the Mozilla Public +License 2.0 (MPL). Know your rights . + +All of the *source code* to this product is available under licenses +which are both free and +GPL-compatible +. +A URL identifying the specific source code used to create this copy can +be found on the build configuration page , and you +can read instructions on how to download and build the code for yourself +. + +More specifically, most of the source code is available under the +Mozilla Public License 2.0 (MPL). The MPL has a FAQ + to help you understand it. The +remainder of the software which is not under the MPL is available under +one of a variety of other free and open source licenses. Those that +require reproduction of the license text in the distribution are given +below. (Note: your copy of this product may not contain code covered by +one or more of the licenses listed here, depending on the exact product +and version you choose.) + + * Mozilla Public License 2.0 + + * GNU Lesser General Public License 2.1 + + * GNU Lesser General Public License 3.0 + + * GNU General Public License 3.0 + + * ACE License + * acorn License + * Adjust SDK License + * Adobe CMap License + * Android Open Source License + * ANGLE License + * Apache License 2.0 + * Apple License + * Apple/Mozilla NPRuntime License + * ARM License + * bspatch License + * Cairo Component Licenses + * Chromium License + * CodeMirror License + * cubic-bezier License + * D3 License + * Dagre-D3 License + * dtoa License + * Dutch Spellchecking Dictionary License + * Twemoji License + * Estonian Spellchecking Dictionary License + * Expat License + * Firebug License + * gfxFontList License + * Google BSD License + * Google Gears License + * Google Gears/iStumbler License + * Google VP8 License + * gyp License + * halloc License + * HarfBuzz License + * ICU License + * Immutable.js License + * Japan Network Information Center License + * jQuery License + * k_exp License + * Khronos group License + * Kiss FFT License + * libc++ License + * libcubeb License + * libevent License + * libffi License + * libjingle License + * libnestegg License + * libsoundtouch License + * libyuv License + * Lithuanian Spellchecking Dictionary License + * MIT license — microformat-shiv + * MySpell License + * naturalSort License + * nICEr License + * node-properties License + * nrappkit License + * OpenAES License + * OpenVision License + * pbkdf2_sha256 License + * Pocketsphinx License + * praton License + * qcms License + * QR Code Generator License + * React License + * React-Redux License + * React Virtualized License + * Red Hat xdg_user_dir_lookup License + * Redux License + * Reselect License + * Russian Spellchecking Dictionary License + * SCTP Licenses + * Skia License + * Snappy License + * sprintf.js License + * SunSoft License + * SuperFastHash License + * Unicode License + * University of California License + * US English Spellchecking Dictionary Licenses + + * V8 License + * Valve BSD License + * VTune License + * WebRTC License + * x264 License + * Xiph.org Foundation License + + + * Other Required Notices + * Optional Notices + * Proprietary Operating System Components + + +------------------------------------------------------------------------ + + + Mozilla Public License 2.0 + + + 1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + + means + + 1. + + that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + 2. + + that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + 1. + + any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + 2. + + any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + + + 2. License Grants and Conditions + + + 2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + + 1. + + under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + 2. + + under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + + + 2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + + + 2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + + 1. + + for any code that a Contributor has removed from Covered Software; or + + 2. + + for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + 3. + + under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + + + 2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + + + 2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + + + 2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + + + 2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + + + 3. Responsibilities + + + 3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code Form. + + + 3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + + 1. + + such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + + 2. + + You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + + + 3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + + + 3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + + + 3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + + + 4. Inability to Comply Due to Statute or Regulation + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + + + 5. Termination + + + 5.1. + +The rights granted under this License will terminate automatically if +You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + + + 5.2. + +If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + + + 5.3. + +In the event of termination under Sections 5.1 or 5.2 above, all end +user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + + + 6. Disclaimer of Warranty + +/Covered Software is provided under this License on an "as is" basis, +without warranty of any kind, either expressed, implied, or statutory, +including, without limitation, warranties that the Covered Software is +free of defects, merchantable, fit for a particular purpose or +non-infringing. The entire risk as to the quality and performance of the +Covered Software is with You. Should any Covered Software prove +defective in any respect, You (not any Contributor) assume the cost of +any necessary servicing, repair, or correction. This disclaimer of +warranty constitutes an essential part of this License. No use of any +Covered Software is authorized under this License except under this +disclaimer./ + + + 7. Limitation of Liability + +/Under no circumstances and under no legal theory, whether tort +(including negligence), contract, or otherwise, shall any Contributor, +or anyone who distributes Covered Software as permitted above, be liable +to You for any direct, indirect, special, incidental, or consequential +damages of any character including, without limitation, damages for lost +profits, loss of goodwill, work stoppage, computer failure or +malfunction, or any and all other commercial damages or losses, even if +such party shall have been informed of the possibility of such damages. +This limitation of liability shall not apply to liability for death or +personal injury resulting from such party's negligence to the extent +applicable law prohibits such limitation. Some jurisdictions do not +allow the exclusion or limitation of incidental or consequential +damages, so this exclusion and limitation may not apply to You./ + + + 8. Litigation + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + + + 9. Miscellaneous + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + + + 10. Versions of the License + + + 10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + + + 10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + + + 10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + + + 10.4. Distributing Source Code Form that is Incompatible With + Secondary Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + + + Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + + + Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +------------------------------------------------------------------------ + + + GNU Lesser General Public License 2.1 + +This product contains code from the following LGPLed libraries: + + * libsoundtouch + * libav + * FFmpeg + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + + Preamble + +The licenses for most software are designed to take away your freedom to +share and change it. By contrast, the GNU General Public Licenses are +intended to guarantee your freedom to share and change free software--to +make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the Free +Software Foundation and other authors who decide to use it. You can use +it too, but we suggest you first think carefully about whether this +license or the ordinary General Public License is the better strategy to +use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish); that you receive source code or can get it if +you want it; that you can change the software and use pieces of it in +new free programs; and that you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for you +if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or +for a fee, you must give the recipients all the rights that we gave you. +You must make sure that they, too, receive or can get the source code. +If you link other code with the library, you must provide complete +object files to the recipients, so that they can relink them with the +library after making changes to the library and recompiling it. And you +must show them these terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is +no warranty for the free library. Also, if the library is modified by +someone else and passed on, the recipients should know that what they +have is not the original version, so that the original author's +reputation will not be affected by problems that might be introduced by +others. + +Finally, software patents pose a constant threat to the existence of any +free program. We wish to make sure that a company cannot effectively +restrict the users of a free program by obtaining a restrictive license +from a patent holder. Therefore, we insist that any patent license +obtained for a version of the library must be consistent with the full +freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License. This license, the GNU Lesser General Public +License, applies to certain designated libraries, and is quite different +from the ordinary General Public License. We use this license for +certain libraries in order to permit linking those libraries into +non-free programs. + +When a program is linked with a library, whether statically or using a +shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the entire +combination fits its criteria of freedom. The Lesser General Public +License permits more lax criteria for linking other code with the library. + +We call this license the "Lesser" General Public License because it does +Less to protect the user's freedom than the ordinary General Public +License. It also provides other free software developers Less of an +advantage over competing non-free programs. These disadvantages are the +reason we use the ordinary General Public License for many libraries. +However, the Lesser license provides advantages in certain special +circumstances. + +For example, on rare occasions, there may be a special need to encourage +the widest possible use of a certain library, so that it becomes a +de-facto standard. To achieve this, non-free programs must be allowed to +use the library. A more frequent case is that a free library does the +same job as widely used non-free libraries. In this case, there is +little to gain by limiting the free library to free software only, so we +use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of free +software. For example, permission to use the GNU C Library in non-free +programs enables many more people to use the whole GNU operating system, +as well as its variant, the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is linked +with the Library has the freedom and the wherewithal to run that program +using a modified version of the Library. + +The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +*0.* This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or other +authorized party saying it may be distributed under the terms of this +Lesser General Public License (also called "this License"). Each +licensee is addressed as "you". + +A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which +has been distributed under these terms. A "work based on the Library" +means either the Library or any derivative work under copyright law: +that is to say, a work containing the Library or a portion of it, either +verbatim or with modifications and/or translated straightforwardly into +another language. (Hereinafter, translation is included without +limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making +modifications to it. For a library, complete source code means all the +source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and +installation of the library. + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of running +a program using the Library is not restricted, and output from such a +program is covered only if its contents constitute a work based on the +Library (independent of the use of the Library in a tool for writing +it). Whether that is true depends on what the Library does and what the +program that uses the Library does. + +*1.* You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the notices +that refer to this License and to the absence of any warranty; and +distribute a copy of this License along with the Library. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +*2.* You may modify your copy or copies of the Library or any portion of +it, thus forming a work based on the Library, and copy and distribute +such modifications or work under the terms of Section 1 above, provided +that you also meet all of these conditions: + + * *a)* The modified work must itself be a software library. + * *b)* You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + * *c)* You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + * *d)* If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses the + facility, other than as an argument passed when the facility is + invoked, then you must make a good faith effort to ensure that, in + the event an application does not supply such function or table, the + facility still operates, and performs whatever part of its purpose + remains meaningful. + + (For example, a function in a library to compute square roots has a + purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must be + optional: if the application does not supply it, the square root + function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, and +can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based on +the Library, the distribution of the whole must be on the terms of this +License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of a +storage or distribution medium does not bring the other work under the +scope of this License. + +*3.* You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so that +they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in these +notices. + +Once this change is made in a given copy, it is irreversible for that +copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the +Library into a program that is not a library. + +*4.* You may copy and distribute the Library (or a portion or derivative +of it, under Section 2) in object code or executable form under the +terms of Sections 1 and 2 above provided that you accompany it with the +complete corresponding machine-readable source code, which must be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a +designated place, then offering equivalent access to copy the source +code from the same place satisfies the requirement to distribute the +source code, even though third parties are not compelled to copy the +source along with the object code. + +*5.* A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a work, +in isolation, is not a derivative work of the Library, and therefore +falls outside the scope of this License. + +However, linking a "work that uses the Library" with the Library creates +an executable that is a derivative of the Library (because it contains +portions of the Library), rather than a "work that uses the library". +The executable is therefore covered by this License. Section 6 states +terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be linked +without the Library, or if the work is itself a library. The threshold +for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data structure +layouts and accessors, and small macros and small inline functions (ten +lines or less in length), then the use of the object file is +unrestricted, regardless of whether it is legally a derivative work. +(Executables containing this object code plus portions of the Library +will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, whether +or not they are linked directly with the Library itself. + +*6.* As an exception to the Sections above, you may also combine or link +a "work that uses the Library" with the Library to produce a work +containing portions of the Library, and distribute that work under terms +of your choice, provided that the terms permit modification of the work +for the customer's own use and reverse engineering for debugging such +modifications. + +You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work during +execution displays copyright notices, you must include the copyright +notice for the Library among them, as well as a reference directing the +user to the copy of this License. Also, you must do one of these things: + + * *a)* Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that uses + the Library", as object code and/or source code, so that the user + can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood that + the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application to + use the modified definitions.) + * *b)* Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if the + user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + * *c)* Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + * *d)* If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + * *e)* Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" +must include any data and utility programs needed for reproducing the +executable from it. However, as a special exception, the materials to be +distributed need not include anything that is normally distributed (in +either source or binary form) with the major components (compiler, +kernel, and so on) of the operating system on which the executable runs, +unless that component itself accompanies the executable. + +It may happen that this requirement contradicts the license restrictions +of other proprietary libraries that do not normally accompany the +operating system. Such a contradiction means you cannot use both them +and the Library together in an executable that you distribute. + +*7.* You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise permitted, +and provided that you do these two things: + + * *a)* Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library facilities. + This must be distributed under the terms of the Sections above. + * *b)* Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining where + to find the accompanying uncombined form of the same work. + +*8.* You may not copy, modify, sublicense, link with, or distribute the +Library except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, link with, or distribute the +Library is void, and will automatically terminate your rights under this +License. However, parties who have received copies, or rights, from you +under this License will not have their licenses terminated so long as +such parties remain in full compliance. + +*9.* You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and all +its terms and conditions for copying, distributing or modifying the +Library or works based on it. + +*10.* Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + +*11.* If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot distribute +so as to satisfy simultaneously your obligations under this License and +any other pertinent obligations, then as a consequence you may not +distribute the Library at all. For example, if a patent license would +not permit royalty-free redistribution of the Library by all those who +receive copies directly or indirectly through you, then the only way you +could satisfy both it and this License would be to refrain entirely from +distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is implemented +by public license practices. Many people have made generous +contributions to the wide range of software distributed through that +system in reliance on consistent application of that system; it is up to +the author/donor to decide if he or she is willing to distribute +software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be +a consequence of the rest of this License. + +*12.* If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may +add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among countries +not thus excluded. In such case, this License incorporates the +limitation as if written in the body of this License. + +*13.* The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. Such +new versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a license +version number, you may choose any version ever published by the Free +Software Foundation. + +*14.* If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free Software +Foundation; we sometimes make exceptions for this. Our decision will be +guided by the two goals of preserving the free status of all derivatives +of our free software and of promoting the sharing and reuse of software +generally. + +*NO WARRANTY* + +*15.* BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, +EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE +ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH +YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL +NECESSARY SERVICING, REPAIR OR CORRECTION. + +*16.* IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR +DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL +DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY +(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF +THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR +OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +------------------------------------------------------------------------ + + + GNU Lesser General Public License 3.0 + +Some versions of this product contains code from the following LGPLed +libraries: + + * Swedish dictionary + + + +Copyright © 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the +terms and conditions of version 3 of the GNU General Public License, +supplemented by the additional permissions listed below. + + + 0. Additional Definitions + +As used herein, “this License” refers to version 3 of the GNU Lesser +General Public License, and the “GNU GPL” refers to version 3 of the GNU +General Public License. + +“The Library” refers to a covered work governed by this License, other +than an Application or a Combined Work as defined below. + +An “Application” is any work that makes use of an interface provided by +the Library, but which is not otherwise based on the Library. Defining a +subclass of a class defined by the Library is deemed a mode of using an +interface provided by the Library. + +A “Combined Work” is a work produced by combining or linking an +Application with the Library. The particular version of the Library with +which the Combined Work was made is also called the “Linked Version”. + +The “Minimal Corresponding Source” for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The “Corresponding Application Code” for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + + 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + + 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified version: + + * a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs whatever + part of its purpose remains meaningful, or + * b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + + 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a +header file that is part of the Library. You may convey such object code +under terms of your choice, provided that, if the incorporated material +is not limited to numerical parameters, data structure layouts and +accessors, or small macros, inline functions and templates (ten or fewer +lines in length), you do both of the following: + + * a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are covered + by this License. + * b) Accompany the object code with a copy of the GNU GPL and this + license document. + + + 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken +together, effectively do not restrict modification of the portions of +the Library contained in the Combined Work and reverse engineering for +debugging such modifications, if you also do each of the following: + + * a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + * b) Accompany the Combined Work with a copy of the GNU GPL and this + license document. + * c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among these + notices, as well as a reference directing the user to the copies of + the GNU GPL and this license document. + * d) Do one of the following: + o 0) Convey the Minimal Corresponding Source under the terms of + this License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to recombine + or relink the Application with a modified version of the Linked + Version to produce a modified Combined Work, in the manner + specified by section 6 of the GNU GPL for conveying + Corresponding Source. + o 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time a + copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version of + the Library that is interface-compatible with the Linked Version. + * e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the GNU + GPL, and only to the extent that such information is necessary to + install and execute a modified version of the Combined Work produced + by recombining or relinking the Application with a modified version + of the Linked Version. (If you use option 4d0, the Installation + Information must accompany the Minimal Corresponding Source and + Corresponding Application Code. If you use option 4d1, you must + provide the Installation Information in the manner specified by + section 6 of the GNU GPL for conveying Corresponding Source.) + + + 5. Combined Libraries. + +You may place library facilities that are a work based on the Library +side by side in a single library together with other library facilities +that are not Applications and are not covered by this License, and +convey such a combined library under terms of your choice, if you do +both of the following: + + * a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + * b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + + 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library as +you received it specifies that a certain numbered version of the GNU +Lesser General Public License “or any later version” applies to it, you +have the option of following the terms and conditions either of that +published version or of any later version published by the Free Software +Foundation. If the Library as you received it does not specify a version +number of the GNU Lesser General Public License, you may choose any +version of the GNU Lesser General Public License ever published by the +Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the Library. + +------------------------------------------------------------------------ + + + GNU General Public License 3.0 + +This license does not apply to any of the code shipped with Firefox, but +may apply to Disconnect.me blocklists downloaded after installation for +use with the tracking protection feature. Firefox and such blocklists +are separate and independent works as described in Sections 5 and 6 of +this license. + +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + + Preamble + +The GNU General Public License is a free, copyleft license for software +and other kinds of works. + +The licenses for most software and other practical works are designed to +take away your freedom to share and change the works. By contrast, the +GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. +Our General Public Licenses are designed to make sure that you have the +freedom to distribute copies of free software (and charge for them if +you wish), that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these +rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis +or for a fee, you must pass on to the recipients the same freedoms that +you received. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) +assert copyright on the software, and (2) offer you this License giving +you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of protecting +users' freedom to change the software. The systematic pattern of such +abuse occurs in the area of products for individuals to use, which is +precisely where it is most unacceptable. Therefore, we have designed +this version of the GPL to prohibit the practice for those products. If +such problems arise substantially in other domains, we stand ready to +extend this provision to those domains in future versions of the GPL, as +needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + + + TERMS AND CONDITIONS + + + 0. Definitions. + +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this +License. Each licensee is addressed as “you”. “Licensees” and +“recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a “modified version” of the +earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on +the Program. + +To “propagate” a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to +the extent that it includes a convenient and prominently visible feature +that (1) displays an appropriate copyright notice, and (2) tells the +user that there is no warranty for the work (except to the extent that +warranties are provided), that licensees may convey the work under this +License, and how to view a copy of this License. If the interface +presents a list of user commands or options, such as a menu, a prominent +item in the list meets this criterion. + + + 1. Source Code. + +The “source code” for a work means the preferred form of the work for +making modifications to it. “Object code” means any non-source form of a +work. + +A “Standard Interface” means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that is +widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that Major +Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A “Major +Component”, in this context, means a major essential component (kernel, +window system, and so on) of the specific operating system (if any) on +which the executable work runs, or a compiler used to produce the work, +or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the +source code needed to generate, install, and (for an executable work) +run the object code and to modify the work, including scripts to control +those activities. However, it does not include the work's System +Libraries, or general-purpose tools or generally available free programs +which are used unmodified in performing those activities but which are +not part of the work. For example, Corresponding Source includes +interface definition files associated with source files for the work, +and the source code for shared libraries and dynamically linked +subprograms that the work is specifically designed to require, such as +by intimate data communication or control flow between those subprograms +and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + + + 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article 11 +of the WIPO copyright treaty adopted on 20 December 1996, or similar +laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to the +covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + + 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; keep +intact all notices stating that this License and any non-permissive +terms added in accord with section 7 apply to the code; keep intact all +notices of the absence of any warranty; and give all recipients a copy +of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and +you may offer support or warranty protection for a fee. + + + 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the terms +of section 4, provided that you also meet all of these conditions: + + * a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + * b) The work must carry prominent notices stating that it is released + under this License and any conditions added under section 7. This + requirement modifies the requirement in section 4 to “keep intact + all notices”. + * c) You must license the entire work, as a whole, under this License + to anyone who comes into possession of a copy. This License will + therefore apply, along with any applicable section 7 additional + terms, to the whole of the work, and all its parts, regardless of + how they are packaged. This License gives no permission to license + the work in any other way, but it does not invalidate such + permission if you have separately received it. + * d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your work + need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, and +which are not combined with it such as to form a larger program, in or +on a volume of a storage or distribution medium, is called an +“aggregate” if the compilation and its resulting copyright are not used +to limit the access or legal rights of the compilation's users beyond +what the individual works permit. Inclusion of a covered work in an +aggregate does not cause this License to apply to the other parts of the +aggregate. + + + 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these ways: + + * a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium customarily + used for software interchange. + * b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a written + offer, valid for at least three years and valid for as long as you + offer spare parts or customer support for that product model, to + give anyone who possesses the object code either (1) a copy of the + Corresponding Source for all the software in the product that is + covered by this License, on a durable physical medium customarily + used for software interchange, for a price no more than your + reasonable cost of physically performing this conveying of source, + or (2) access to copy the Corresponding Source from a network server + at no charge. + * c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This alternative + is allowed only occasionally and noncommercially, and only if you + received the object code with such an offer, in accord with + subsection 6b. + * d) Convey the object code by offering access from a designated place + (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) that + supports equivalent copying facilities, provided you maintain clear + directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + * e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be included +in conveying the object code work. + +A “User Product” is either (1) a “consumer product”, which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of coverage. +For a particular product received by a particular user, “normally used” +refers to a typical or common use of that class of product, regardless +of the status of the particular user or of the way in which the +particular user actually uses, or expects or is expected to use, the +product. A product is a consumer product regardless of whether the +product has substantial commercial, industrial or non-consumer uses, +unless such uses represent the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product +from a modified version of its Corresponding Source. The information +must suffice to ensure that the continued functioning of the modified +object code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied by +the Installation Information. But this requirement does not apply if +neither you nor any third party retains the ability to install modified +object code on the User Product (for example, the work has been +installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in +accord with this section must be in a format that is publicly documented +(and with an implementation available to the public in source code +form), and must require no special password or key for unpacking, +reading or copying. + + + 7. Additional Terms. + +“Additional permissions” are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by this +License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove +any additional permissions from that copy, or from any part of it. +(Additional permissions may be written to require their own removal in +certain cases when you modify the work.) You may place additional +permissions on material, added by you to a covered work, for which you +have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + + * a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + * b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + * c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + * d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + * e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + * f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + +All other non-permissive additional terms are considered “further +restrictions” within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains a +further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms of +that license document, provided that the further restriction does not +survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must +place, in the relevant source files, a statement of the additional terms +that apply to those files, or a notice indicating where to find the +applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the above +requirements apply either way. + + + 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally terminates +your license, and (b) permanently, if the copyright holder fails to +notify you of the violation by some reasonable means prior to 60 days +after the cessation. + +Moreover, your license from a particular copyright holder is reinstated +permanently if the copyright holder notifies you of the violation by +some reasonable means, this is the first time you have received notice +of violation of this License (for any work) from that copyright holder, +and you cure the violation prior to 30 days after your receipt of the +notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + + 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a +copy of the Program. Ancillary propagation of a covered work occurring +solely as a consequence of using peer-to-peer transmission to receive a +copy likewise does not require acceptance. However, nothing other than +this License grants you permission to propagate or modify any covered +work. These actions infringe copyright if you do not accept this +License. Therefore, by modifying or propagating a covered work, you +indicate your acceptance of this License to do so. + + + 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered work +results from an entity transaction, each party to that transaction who +receives a copy of the work also receives whatever licenses to the work +the party's predecessor in interest had or could give under the previous +paragraph, plus a right to possession of the Corresponding Source of the +work from the predecessor in interest, if the predecessor has it or can +get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may not +impose a license fee, royalty, or other charge for exercise of rights +granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that any +patent claim is infringed by making, using, selling, offering for sale, +or importing the Program or any portion of it. + + + 11. Patents. + +A “contributor” is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The work +thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or +controlled by the contributor, whether already acquired or hereafter +acquired, that would be infringed by some manner, permitted by this +License, of making, using, or selling its contributor version, but do +not include claims that would be infringed only as a consequence of +further modification of the contributor version. For purposes of this +definition, “control” includes the right to grant patent sublicenses in +a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to make, +use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To “grant” such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and +the Corresponding Source of the work is not available for anyone to +copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. “Knowingly relying” means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify or +convey a specific copy of the covered work, then the patent license you +grant is automatically extended to all recipients of the covered work +and works based on it. + +A patent license is “discriminatory” if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you are +a party to an arrangement with a third party that is in the business of +distributing software, under which you make payment to the third party +based on the extent of your activity of conveying the work, and under +which the third party grants, to any of the parties who would receive +the covered work from you, a discriminatory patent license (a) in +connection with copies of the covered work conveyed by you (or copies +made from those copies), or (b) primarily for and in connection with +specific products or compilations that contain the covered work, unless +you entered into that arrangement, or that patent license was granted, +prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any +implied license or other defenses to infringement that may otherwise be +available to you under applicable patent law. + + + 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not convey it at all. For example, if you agree to terms that +obligate you to collect a royalty for further conveying from those to +whom you convey the Program, the only way you could satisfy both those +terms and this License would be to refrain entirely from conveying the +Program. + + + 13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have permission +to link or combine any covered work with a work licensed under version 3 +of the GNU Affero General Public License into a single combined work, +and to convey the resulting work. The terms of this License will +continue to apply to the part which is the covered work, but the special +requirements of the GNU Affero General Public License, section 13, +concerning interaction through a network will apply to the combination +as such. + + + 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License “or any later version” applies to it, you have the option of +following the terms and conditions either of that numbered version or of +any later version published by the Free Software Foundation. If the +Program does not specify a version number of the GNU General Public +License, you may choose any version ever published by the Free Software +Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. + +Later license versions may give you additional or different permissions. +However, no additional obligations are imposed on any author or +copyright holder as a result of your choosing to follow a later version. + + + 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF +THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + + 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES +SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE +WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN +ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + + 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above +cannot be given local legal effect according to their terms, reviewing +courts shall apply local law that most closely approximates an absolute +waiver of all civil liability in connection with the Program, unless a +warranty or assumption of liability accompanies a copy of the Program in +return for a fee. + +END OF TERMS AND CONDITIONS + + + How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +“copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice +like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an “about box”. + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a “copyright disclaimer” for the program, if +necessary. For more information on this, and how to apply and follow the +GNU GPL, see . + +The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Lesser General Public License instead of this License. But first, +please read . + +------------------------------------------------------------------------ + + + ACE License + +This license applies to the file +media/webrtc/trunk/webrtc/system_wrappers/source/condition_variable_event_win.cc. + +ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), and CoSMIC(TM) +(henceforth referred to as "DOC software") are copyrighted by +Douglas C. Schmidt and his research group at Washington University, +University of California, Irvine, and Vanderbilt University, +Copyright (c) 1993-2009, all rights reserved. +Since DOC software is open-source, freely available software, +you are free to use, modify, copy, and distribute--perpetually and +irrevocably--the DOC software source code and object code produced +from the source, as well as copy and distribute modified versions of +this software. You must, however, include this copyright statement +along with any code built using DOC software that you release. No +copyright statement needs to be provided if you just ship binary +executables of your software products. + +------------------------------------------------------------------------ + + + Adobe CMap License + +This license applies to files in the directory +browser/extensions/pdfjs/content/web/cmaps/. + +Copyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. + +Redistribution and use in source and binary forms, with or +without modification, are permitted provided that the +following conditions are met: + +Redistributions of source code must retain the above +copyright notice, this list of conditions and the following +disclaimer. + +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials +provided with the distribution. + +Neither the name of Adobe Systems Incorporated nor the names +of its contributors may be used to endorse or promote +products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Android Open Source License + +This license applies to various files in the Mozilla codebase, including +those in the directory gfx/skia/. + + Copyright 2009, The Android Open Source Project + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + ANGLE License + +This license applies to files in the directory gfx/angle/. + +Copyright (C) 2002-2010 The ANGLE Project Authors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc. + Ltd., nor the names of their contributors may be used to endorse + or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + acorn License + +This license applies to all files in devtools/shared/acorn. + +Copyright (C) 2012 by Marijn Haverbeke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Please note that some subdirectories of the CodeMirror distribution +include their own LICENSE files, and are released under different +licences. + +------------------------------------------------------------------------ + + + Adjust SDK License + +This license applies to all files in the directory +mobile/android/thirdparty/com/adjust/sdk. + +Copyright (c) 2012-2014 adjust GmbH, +http://www.adjust.com + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + Apache License 2.0 + +This license applies to various files in the Mozilla codebase. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + +------------------------------------------------------------------------ + + + Apple License + +This license applies to certain files in the directories +dom/media/webaudio/blink, and widget/cocoa. + +Copyright (C) 2008, 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Apple/Mozilla NPRuntime License + +This license applies to the file dom/plugins/base/npruntime.h. + +Copyright © 2004, Apple Computer, Inc. and The Mozilla Foundation. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla +Foundation ("Mozilla") nor the names of their contributors may be used +to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR +THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + ARM License + +This license applies to files in the directory js/src/jit/arm64/vixl/. + +Copyright 2013, ARM Limited +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ARM Limited nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + bspatch License + +This license applies to the files +toolkit/mozapps/update/updater/bspatch.cpp and +toolkit/mozapps/update/updater/bspatch.h. + +Copyright 2003,2004 Colin Percival +All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted providing that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Cairo Component Licenses + +This license, with different copyright holders, applies to certain files +in the directory gfx/cairo/. The copyright holders and the applicable +ranges of dates are as follows: + + * 2004 Richard D. Worth + * 2004, 2005 Red Hat, Inc. + * 2003 USC, Information Sciences Institute + * 2004 David Reveman + * 2005 Novell, Inc. + * 2004 David Reveman, Peter Nilsson + * 2000 Keith Packard, member of The XFree86 Project, Inc. + * 2005 Lars Knoll & Zack Rusin, Trolltech + * 1998, 2000, 2002, 2004 Keith Packard + * 2004 Nicholas Miell + * 2005 Trolltech AS + * 2000 SuSE, Inc. + * 2003 Carl Worth + * 1987, 1988, 1989, 1998 The Open Group + * 1987, 1988, 1989 Digital Equipment Corporation, Maynard, Massachusetts. + * 1998 Keith Packard + * 2003 Richard Henderson + +Copyright © + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without +fee, provided that the above copyright notice appear in all copies +and that both that copyright notice and this permission notice +appear in supporting documentation, and that the name of + not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. + makes no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. + + DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN +NO EVENT SHALL BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + Chromium License + +This license applies to parts of the code in: + + * editor/libeditor/EditorEventListener.cpp + * security/sandbox/ + * widget/cocoa/GfxInfo.mm + +and also some files in these directories: + + * dom/media/webspeech/recognition/ + * dom/plugins/ + * gfx/ots/ + * gfx/ycbcr/ + * ipc/chromium/ + * media/openmax_dl/ + * toolkit/components/downloads/chromium/ + * toolkit/components/url-classifier/chromium/ + * tools/profiler/ + +Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + CodeMirror License + +This license applies to all files in +devtools/client/sourceeditor/codemirror and to specified files in the +devtools/client/sourceeditor/test/: + + * cm_comment_test.js + * cm_driver.js + * cm_mode_javascript_test.js + * cm_mode_test.css + * cm_mode_test.js + * cm_test.js + +Copyright (C) 2013 by Marijn Haverbeke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Please note that some subdirectories of the CodeMirror distribution +include their own LICENSE files, and are released under different +licences. + +------------------------------------------------------------------------ + + + cubic-bezier License + +This license applies to the file +devtools/client/shared/widgets/CubicBezierWidget.js . + +Copyright (c) 2013 Lea Verou. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + D3 License + +This license applies to the file devtools/client/shared/d3.js. + +Copyright (c) 2014, Michael Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* The name Michael Bostock may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Dagre-D3 License + +This license applies to the file +devtools/client/webaudioeditor/lib/dagre-d3.js. + +Copyright (c) 2013 Chris Pettitt + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + dtoa License + +This license applies to the file nsprpub/pr/src/misc/dtoa.c. + +The author of this software is David M. Gay. + +Copyright (c) 1991, 2000, 2001 by Lucent Technologies. + +Permission to use, copy, modify, and distribute this software for any +purpose without fee is hereby granted, provided that this entire notice +is included in all copies of any software which is or includes a copy +or modification of this software and in all copies of the supporting +documentation for such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY +REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY +OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +------------------------------------------------------------------------ + + + Dutch Spellchecking Dictionary License + +This license applies to the Dutch Spellchecking Dictionary. (This code +only ships in some localized versions of this product.) + +Copyright (c) 2006, 2007 OpenTaal +Copyright (c) 2001, 2002, 2003, 2005 Simon Brouwer e.a. +Copyright (c) 1996 Nederlandstalige Tex Gebruikersgroep + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +* Neither the name of the OpenTaal, Simon Brouwer e.a., or Nederlandstalige Tex +Gebruikersgroep nor the names of its contributors may be used to endorse or +promote products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ +#if defined(XP_WIN) || defined(XP_LINUX) + + + Twemoji License + +This license applies to the emoji art contained within the bundled emoji +font file. + +Copyright (c) 2018 Twitter, Inc and other contributors. + +Creative Commons Attribution 4.0 International (CC BY 4.0) + +See https://creativecommons.org/licenses/by/4.0/legalcode or +for the human readable summary: https://creativecommons.org/licenses/by/4.0/ + +You are free to: + +Share — copy and redistribute the material in any medium or format + +Adapt — remix, transform, and build upon the material for any purpose, even commercially. + +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, +and indicate if changes were made. You may do so in any reasonable manner, +but not in any way that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological +measures that legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in +the public domain or where your use is permitted by an applicable exception or +limitation. No warranties are given. The license may not give you all of the +permissions necessary for your intended use. For example, other rights such as +publicity, privacy, or moral rights may limit how you use the material. + +------------------------------------------------------------------------ + + + Estonian Spellchecking Dictionary License + +This license applies to precursor works to certain files which are part +of the Estonian Spellchecking Dictionary. The shipped versions are under +the GNU Lesser General Public License. (This code only ships in some +localized versions of this product.) + +Copyright © Institute of the Estonian Language + +E-mail: litsents@eki.ee +URL: http://www.eki.ee/tarkvara/ + +The present Licence Agreement gives the user of this Software Product +(hereinafter: Product) the right to use the Product for whatever purpose +(incl. distribution, copying, altering, inclusion in other software, and +selling) on the following conditions: + +1. The present Licence Agreement should belong unaltered to each copy ever + made of this Product; +2. Neither the Institute of the Estonian Language (hereinafter: IEL) nor the + author(s) of the Product will take responsibility for any detriment, direct + or indirect, possibly ensuing from the application of the Product; +3. The IEL is ready to share the Product with other users as we wish to + advance research on the Estonian language and to promote the use of + Estonian in rapidly developing infotechnology, yet we refuse to bind + ourselves to any further obligation, which means that the IEL is not + obliged either to warrant the suitability of the Product for a specific + purpose, to improve the software, or to provide a more detailed description + of the underlying algorithms. (Which does not mean, though, that we may not + do it.) + +Notification Request: + +As a courtesy, we would appreciate being informed whenever our linguistic +products are used to create derivative works. If you modify our software or +include it in other products, please inform us by sending e-mail to +litsents@eki.ee or by letter to + +Institute of the Estonian Language +Roosikrantsi 6 +10119 Tallinn +ESTONIA + +Phone & Fax: +372 6411443 + +------------------------------------------------------------------------ + + + Expat License + +This license applies to certain files in the directory parser/expat/. + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper +Copyright (c) 2001, 2002, 2003 Expat maintainers. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + Firebug License + +This license applies to the code +devtools/shared/webconsole/network-helper.js. + +Copyright (c) 2007, Parakey Inc. +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or +without modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Parakey Inc. nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of Parakey Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + gfxFontList License + +This license applies to the files gfx/thebes/gfxMacPlatformFontList.mm +and gfx/thebes/gfxPlatformFontList.cpp. + +Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Google BSD License + +This license applies to files in the directories +toolkit/crashreporter/google-breakpad/ and toolkit/components/protobuf/. + +Copyright (c) 2006, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Google VP8 License + +This license applies to certain files in the directory media/libvpx. + +Copyright (c) 2010, Google, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +- Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Subject to the terms and conditions of the above License, Google +hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this +section) patent license to make, have made, use, offer to sell, sell, +import, and otherwise transfer this implementation of VP8, where such +license applies only to those patent claims, both currently owned by +Google and acquired in the future, licensable by Google that are +necessarily infringed by this implementation of VP8. If You or your +agent or exclusive licensee institute or order or agree to the +institution of patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that this +implementation of VP8 or any code incorporated within this +implementation of VP8 constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any rights +granted to You under this License for this implementation of VP8 +shall terminate as of the date such litigation is filed. + +------------------------------------------------------------------------ + + + Google Gears/iStumbler License + +This license applies to the file netwerk/wifi/osx_wifi.h. + +Copyright 2008, Google Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of Google Inc. nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The contents of this file are taken from Apple80211.h from the iStumbler +project (http://www.istumbler.net). This project is released under the BSD +license with the following restrictions. + +Copyright (c) 02006, Alf Watt (alf@istumbler.net). All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name of iStumbler nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + gyp License + +This license applies to certain files in the directory +media/webrtc/trunk/tools/gyp. + +Copyright (c) 2009 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + halloc License + +This license applies to certain files in the directory media/libnestegg/src. + +Copyright (c) 2004-2010 Alex Pankratov. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the project nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + HarfBuzz License + +This license, with different copyright holders, applies to the files in +the directory gfx/harfbuzz/. The copyright holders and the applicable +ranges of dates are as follows: + + * 1998-2004 David Turner and Werner Lemberg + * 2004, 2007, 2008, 2009, 2010 Red Hat, Inc. + * 2006 Behdad Esfahbod + * 2007 Chris Wilson + * 2009 Keith Stribley + * 2010 Mozilla Foundation + +Copyright (C) + + This is part of HarfBuzz, an OpenType Layout engine library. + +Permission is hereby granted, without written agreement and without +license or royalty fees, to use, copy, modify, and distribute this +software and its documentation for any purpose, provided that the +above copyright notice and the following two paragraphs appear in +all copies of this software. + +IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN +IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS +ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO +PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +------------------------------------------------------------------------ + + + ICU License + +This license applies to some code in the gfx/thebes directory. + +ICU License - ICU 1.8.1 and later + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2012 International Business Machines Corporation and +others + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, provided that the above copyright notice(s) and this +permission notice appear in all copies of the Software and that both the +above copyright notice(s) and this permission notice appear in supporting +documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization of the +copyright holder. +All trademarks and registered trademarks mentioned herein are the property +of their respective owners. + +------------------------------------------------------------------------ + + + Immutable.js License + +BSD License + +For Immutable JS software + +Copyright (c) 2014-2015, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Japan Network Information Center License + +This license applies to certain files in the directory netwerk/dns/. + +Copyright (c) 2001,2002 Japan Network Information Center. +All rights reserved. + +By using this file, you agree to the terms and conditions set forth below. + + LICENSE TERMS AND CONDITIONS + +The following License Terms and Conditions apply, unless a different +license is obtained from Japan Network Information Center ("JPNIC"), +a Japanese association, Kokusai-Kougyou-Kanda Bldg 6F, 2-3-4 Uchi-Kanda, +Chiyoda-ku, Tokyo 101-0047, Japan. + +1. Use, Modification and Redistribution (including distribution of any + modified or derived work) in source and/or binary forms is permitted + under this License Terms and Conditions. + +2. Redistribution of source code must retain the copyright notices as they + appear in each source code file, this License Terms and Conditions. + +3. Redistribution in binary form must reproduce the Copyright Notice, + this License Terms and Conditions, in the documentation and/or other + materials provided with the distribution. For the purposes of binary + distribution the "Copyright Notice" refers to the following language: + "Copyright (c) 2000-2002 Japan Network Information Center. All rights + reserved." + +4. The name of JPNIC may not be used to endorse or promote products + derived from this Software without specific prior written approval of + JPNIC. + +5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JPNIC BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +------------------------------------------------------------------------ + + + jQuery License + +This license applies to all copies of jQuery in the code. + +Copyright (c) 2010 John Resig, http://jquery.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + k_exp License + +This license applies to the file modules/fdlibm/src/k_exp.cpp. + +Copyright (c) 2011 David Schultz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Khronos group License + +This license applies to the following files: + + * openmax_dl/dl/api/omxtypes.h + * openmax_dl/dl/sp/api/omxSP.h + +Copyright 2005-2008 The Khronos Group Inc. All Rights Reserved. + +These materials are protected by copyright laws and contain material +proprietary to the Khronos Group, Inc. You may use these materials +for implementing Khronos specifications, without altering or removing +any trademark, copyright or other notice from the specification. + +Khronos Group makes no, and expressly disclaims any, representations +or warranties, express or implied, regarding these materials, including, +without limitation, any implied warranties of merchantability or fitness +for a particular purpose or non-infringement of any intellectual property. +Khronos Group makes no, and expressly disclaims any, warranties, express +or implied, regarding the correctness, accuracy, completeness, timeliness, +and reliability of these materials. + +Under no circumstances will the Khronos Group, or any of its Promoters, +Contributors or Members or their respective partners, officers, directors, +employees, agents or representatives be liable for any damages, whether +direct, indirect, special or consequential damages for lost revenues, +lost profits, or otherwise, arising from or in connection with these +materials. + +Khronos and OpenMAX are trademarks of the Khronos Group Inc. + +------------------------------------------------------------------------ + + + Kiss FFT License + +This license applies to files in the directory media/kiss_fft/. + +Copyright (c) 2003-2010 Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + libc++ License + +This license applies to the copy of libc++ obtained from the Android NDK. + +Copyright (c) 2009-2014 by the contributors listed in the libc++ CREDITS.TXT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + libcubeb License + +This license applies to files in the directory media/libcubeb. + +Copyright © 2011 Mozilla Foundation + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + libevent License + +This license applies to files in the directory +ipc/chromium/src/third_party/libevent/. + +Copyright 2000-2002 Niels Provos +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + libffi License + +This license applies to files in the directory js/src/ctypes/libffi/. + +libffi - Copyright (c) 1996-2008 Red Hat, Inc and others. +See source files for details. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +``Software''), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + libjingle License + +This license applies to the following files: + + * media/mtransport/sigslot.h + * media/mtransport/test/gtest_utils.h + +Copyright (c) 2004--2005, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + libnestegg License + +This license applies to certain files in the directory media/libnestegg. + +Copyright © 2010 Mozilla Foundation + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + libsoundtouch License + +This license applies to certain files in the directory +media/libsoundtouch/src/. + +The SoundTouch Library Copyright © Olli Parviainen 2001-2012 + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +------------------------------------------------------------------------ + + + libyuv License + +This license applies to files in the directory media/libyuv except for +the file media/libyuv/source/x86inc.asm. + +Copyright (c) 2011, The LibYuv project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Lithuanian Spellchecking Dictionary License + +This license applies to the Lithuanian Spellchecking Dictionary. (This +code only ships in some localized versions of this product.) + +Copyright (c) 2000-2013, Albertas Agejevas and contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holders nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL ALBERTAS AGEJEVAS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + MIT license — microformat-shiv + +This license applies to some files in the directory +toolkit/components/microformats. + +MIT license — microformat-shiv + +Copyright (c) 2012-2013 Glenn Jones + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + MySpell License + +This license applies to some files in the directory +extensions/spellcheck/hunspell. + +Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada +And Contributors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. All modifications to the source code must be clearly marked as + such. Binary redistributions based on modified source code + must be clearly marked as modified versions in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + naturalSort License + +This license applies to devtools/client/shared/natural-sort.js. + +The MIT License (MIT) + +Copyright (c) 2014 Gabriel Llamas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + nICEr License + +This license applies to certain files in the directory +media/mtransport/third_party/nICEr. + + Copyright (C) 2007, Adobe Systems Inc. + Copyright (C) 2007-2008, Network Resonance, Inc. + +Each source file bears an individual copyright notice. + +The following license applies to this distribution as a whole. + + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name of Adobe Systems, Network Resonance nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + OpenAES License + +This license applies to certain files in the directory +media/gmp-clearkey/0.1/openaes. + +Copyright (c) 2012, Nabil S. Al Ramli, www.nalramli.com +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + OpenVision License + +This license applies to the file extensions/auth/gssapi.h. + +Copyright 1993 by OpenVision Technologies, Inc. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appears in all copies and +that both that copyright notice and this permission notice appear in +supporting documentation, and that the name of OpenVision not be used +in advertising or publicity pertaining to distribution of the software +without specific, written prior permission. OpenVision makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty. + +OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + node-properties License + +This license applies to devtools/shared/node-properties/node-properties.js. + +The MIT License (MIT) + +Copyright (c) 2014 Gabriel Llamas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + nrappkit License + +This license applies to certain files in the directory +media/mtransport/third_party/nrappkit. + +Copyright (C) 2001-2007, Network Resonance, Inc. +All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of Network Resonance, Inc. nor the name of any + contributors to this software may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +This license applies to certain files in the directory +media/mtransport/third_party/nrappkit. + +Copyright (C) 1999-2003 RTFM, Inc. +All Rights Reserved + +This package is a SSLv3/TLS protocol analyzer written by Eric Rescorla + and licensed by RTFM, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + + This product includes software developed by Eric Rescorla for + RTFM, Inc. + +4. Neither the name of RTFM, Inc. nor the name of Eric Rescorla may be + used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE ERIC RESCORLA AND RTFM ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +oDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Note that RTFM, Inc. has waived clause (3) above as of June 20, 2012 for +files appearing in this distribution. This waiver applies only to files +included in this distribution. it does not apply to any other part of +ssldump not included in this distribution. + +This license applies to the file +media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h. + +Copyright (c) 1991, 1993 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +This license applies to the file: +media/mtransport/third_party/nrappkit/src/util/util.c. + +Copyright (c) 1998 Todd C. Miller +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + praton License + +This license applies to the file nsprpub/pr/src/misc/praton.c. + +Copyright (c) 1983, 1990, 1993 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + +Portions Copyright (c) 1993 by Digital Equipment Corporation. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies, and that +the name of Digital Equipment Corporation not be used in advertising or +publicity pertaining to distribution of the document or software without +specific, written prior permission. + +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") +Portions Copyright (c) 1996-1999 by Internet Software Consortium. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + pbkdf2_sha256 License + +This license applies to the code mozglue/android/pbkdf2_sha256.c and +mozglue/android/pbkdf2_sha256.h. + +Copyright 2005,2007,2009 Colin Percival +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Pocketsphinx License + +This license applies to files in the directories media/pocketsphinx/ and +media/sphinxbase/. + +Copyright (c) 1999-2014 Carnegie Mellon University. All rights +reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +This work was supported in part by funding from the Defense Advanced +Research Projects Agency and the National Science Foundation of the +United States of America, and the CMU Sphinx Speech Consortium. + +THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND +ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY +NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + qcms License + +This license applies to certain files in the directory gfx/qcms/. + +Copyright (C) 2009 Mozilla Corporation +Copyright (C) 1998-2007 Marti Maria + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject +to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + + QR Code Generator License + +This license applies to certain files in the directory +devtools/shared/qrcode/encoder/. + +Copyright (c) 2009 Kazuhiko Arase + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------ + + + React License + +This license applies to various files in the Mozilla codebase. + +Copyright (c) 2013-2015, Facebook, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + React-Redux License + +This license applies to the file +devtools/client/shared/vendor/react-redux.js. + +Copyright (c) 2015 Dan Abramov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + React Virtualized License + +This license applies to the file +devtools/client/shared/vendor/react-virtualized.js. + +Copyright (c) 2015 Brian Vaughn + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + Red Hat xdg_user_dir_lookup License + +This license applies to the xdg_user_dir_lookup function in +xpcom/io/SpecialSystemDirectory.cpp. + +Copyright (c) 2007 Red Hat, Inc. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + Redux License + +This license applies to the file devtools/client/shared/vendor/redux.js. + +Copyright (c) 2015 Dan Abramov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + Reselect License + +This license applies to the file devtools/client/shared/vendor/reselect.js. + +The MIT License (MIT) + +Copyright (c) 2015-2016 Reselect Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +------------------------------------------------------------------------ + + + Russian Spellchecking Dictionary License + +This license applies to the Russian Spellchecking Dictionary. (This code +only ships in some localized versions of this product.) + +* Copyright (c) 1997-2008, Alexander I. Lebedev + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Modified versions must be clearly marked as such. +* The name of Alexander I. Lebedev may not be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + SCTP Licenses + +These licenses apply to certain files in the directory netwerk/sctp/src/. + +Copyright (c) 2009-2010 Brad Penoff +Copyright (c) 2009-2010 Humaira Kamal +Copyright (c) 2011-2012 Irene Ruengeler +Copyright (c) 2010-2012, by Michael Tuexen. All rights reserved. +Copyright (c) 2010-2012, by Randall Stewart. All rights reserved. +Copyright (c) 2010-2012, by Robin Seggelmann. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Copyright (c) 2001-2008, by Cisco Systems, Inc. All rights reserved. +Copyright (c) 2008-2012, by Randall Stewart. All rights reserved. +Copyright (c) 2008-2012, by Michael Tuexen. All rights reserved. +Copyright (c) 2008-2012, by Brad Penoff. All rights reserved. +Copyright (c) 1980, 1982, 1986, 1987, 1988, 1990, 1993 + The Regents of the University of California. +Copyright (c) 2005 Robert N. M. Watson All rights reserved. +Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +a) Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +b) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. +c) Neither the name of Cisco Systems, Inc, the name of the university, + the WIDE project, nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Skia License + +This license applies to certain files in the directory gfx/skia/. + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Snappy License + +This license applies to certain files in the directory +other-licenses/snappy/. + +Copyright 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + sprintf.js License + +This license applies to devtools/shared/sprintfjs/sprintf.js. + +Copyright (c) 2007-2016, Alexandru Marasteanu +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name of this software nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + SunSoft License + +This license applies to the ICC_H block in gfx/qcms/qcms.h. + +Copyright (c) 1994-1996 SunSoft, Inc. + + Rights Reserved + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restrict- +ion, including without limitation the rights to use, copy, modify, +merge, publish distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON- +INFRINGEMENT. IN NO EVENT SHALL SUNSOFT, INC. OR ITS PARENT +COMPANY BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of SunSoft, Inc. +shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without written +authorization from SunSoft Inc. + +------------------------------------------------------------------------ + + + SuperFastHash License + +This license applies to files in the directory +security/sandbox/chromium/base/third_party/superfasthash/. + +Copyright (c) 2010, Paul Hsieh +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither my name, Paul Hsieh, nor the names of any other contributors to the + code use may not be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Unicode License + +This license applies to files in the intl/icu and intl/tzdata +directories and certain files in the js/src/vm directory. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2016 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +--------------------- + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +1. ICU License - ICU 1.8.1 to ICU 57.1 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2016 International Business Machines Corporation and others +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +All trademarks and registered trademarks mentioned herein are the +property of their respective owners. + +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + + # The Google Chrome software developed by Google is licensed under + # the BSD license. Other software included in this distribution is + # provided under other licenses, as set forth below. + # + # The BSD License + # http://opensource.org/licenses/bsd-license.php + # Copyright (C) 2006-2008, Google Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are met: + # + # Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided with + # the distribution. + # Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + # + # The word list in cjdict.txt are generated by combining three word lists + # listed below with further processing for compound word breaking. The + # frequency is generated with an iterative training against Google web + # corpora. + # + # * Libtabe (Chinese) + # - https://sourceforge.net/project/?group_id=1519 + # - Its license terms and conditions are shown below. + # + # * IPADIC (Japanese) + # - http://chasen.aist-nara.ac.jp/chasen/distribution.html + # - Its license terms and conditions are shown below. + # + # ---------COPYING.libtabe ---- BEGIN-------------------- + # + # /* + # * Copyrighy (c) 1999 TaBE Project. + # * Copyright (c) 1999 Pai-Hsiang Hsiao. + # * All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the TaBE Project nor the names of its + # * contributors may be used to endorse or promote products derived + # * from this software without specific prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # /* + # * Copyright (c) 1999 Computer Systems and Communication Lab, + # * Institute of Information Science, Academia + # * Sinica. All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the Computer Systems and Communication Lab + # * nor the names of its contributors may be used to endorse or + # * promote products derived from this software without specific + # * prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + # University of Illinois + # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + # + # ---------------COPYING.libtabe-----END-------------------------------- + # + # + # ---------------COPYING.ipadic-----BEGIN------------------------------- + # + # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science + # and Technology. All Rights Reserved. + # + # Use, reproduction, and distribution of this software is permitted. + # Any copy of this software, whether in its original form or modified, + # must include both the above copyright notice and the following + # paragraphs. + # + # Nara Institute of Science and Technology (NAIST), + # the copyright holders, disclaims all warranties with regard to this + # software, including all implied warranties of merchantability and + # fitness, in no event shall NAIST be liable for + # any special, indirect or consequential damages or any damages + # whatsoever resulting from loss of use, data or profits, whether in an + # action of contract, negligence or other tortuous action, arising out + # of or in connection with the use or performance of this software. + # + # A large portion of the dictionary entries + # originate from ICOT Free Software. The following conditions for ICOT + # Free Software applies to the current dictionary as well. + # + # Each User may also freely distribute the Program, whether in its + # original form or modified, to any third party or parties, PROVIDED + # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear + # on, or be attached to, the Program, which is distributed substantially + # in the same form as set out herein and that such intended + # distribution, if actually made, will neither violate or otherwise + # contravene any of the laws and regulations of the countries having + # jurisdiction over the User or the intended distribution itself. + # + # NO WARRANTY + # + # The program was produced on an experimental basis in the course of the + # research and development conducted during the project and is provided + # to users as so produced on an experimental basis. Accordingly, the + # program is provided without any warranty whatsoever, whether express, + # implied, statutory or otherwise. The term "warranty" used herein + # includes, but is not limited to, any warranty of the quality, + # performance, merchantability and fitness for a particular purpose of + # the program and the nonexistence of any infringement or violation of + # any right of any third party. + # + # Each user of the program will agree and understand, and be deemed to + # have agreed and understood, that there is no warranty whatsoever for + # the program and, accordingly, the entire risk arising from or + # otherwise connected with the program is assumed by the user. + # + # Therefore, neither ICOT, the copyright holder, or any other + # organization that participated in or was otherwise related to the + # development of the program and their respective officials, directors, + # officers and other employees shall be held liable for any and all + # damages, including, without limitation, general, special, incidental + # and consequential damages, arising out of or otherwise in connection + # with the use or inability to use the program or any product, material + # or result produced or otherwise obtained by using the program, + # regardless of whether they have been advised of, or otherwise had + # knowledge of, the possibility of such damages at any time during the + # project or thereafter. Each user will be deemed to have agreed to the + # foregoing by his or her commencement of use of the program. The term + # "use" as used herein includes, but is not limited to, the use, + # modification, copying and distribution of the program and the + # production of secondary products from the program. + # + # In the case where the program, whether in its original form or + # modified, was distributed or delivered to or received by a user from + # any person, organization or entity other than ICOT, unless it makes or + # grants independently of ICOT any specific warranty to the user in + # writing, such person, organization or entity, will also be exempted + # from and not be held liable to the user for any such damages as noted + # above as far as the program is concerned. + # + # ---------------COPYING.ipadic-----END---------------------------------- + +3. Lao Word Break Dictionary Data (laodict.txt) + + # Copyright (c) 2013 International Business Machines Corporation + # and others. All Rights Reserved. + # + # Project: http://code.google.com/p/lao-dictionary/ + # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt + # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt + # (copied below) + # + # This file is derived from the above dictionary, with slight + # modifications. + # ---------------------------------------------------------------------- + # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, + # are permitted provided that the following conditions are met: + # + # + # Redistributions of source code must retain the above copyright notice, this + # list of conditions and the following disclaimer. Redistributions in + # binary form must reproduce the above copyright notice, this list of + # conditions and the following disclaimer in the documentation and/or + # other materials provided with the distribution. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # OF THE POSSIBILITY OF SUCH DAMAGE. + # -------------------------------------------------------------------------- + +4. Burmese Word Break Dictionary Data (burmesedict.txt) + + # Copyright (c) 2014 International Business Machines Corporation + # and others. All Rights Reserved. + # + # This list is part of a project hosted at: + # github.com/kanyawtech/myanmar-karen-word-lists + # + # -------------------------------------------------------------------------- + # Copyright (c) 2013, LeRoy Benjamin Sharon + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions + # are met: Redistributions of source code must retain the above + # copyright notice, this list of conditions and the following + # disclaimer. Redistributions in binary form must reproduce the + # above copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided + # with the distribution. + # + # Neither the name Myanmar Karen Word Lists, nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS + # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + # SUCH DAMAGE. + # -------------------------------------------------------------------------- + +5. Time Zone Database + + ICU uses the public domain data and code derived from Time Zone +Database for its time zone support. The ownership of the TZ database +is explained in BCP 175: Procedure for Maintaining the Time Zone +Database section 7. + + # 7. Database Ownership + # + # The TZ database itself is not an IETF Contribution or an IETF + # document. Rather it is a pre-existing and regularly updated work + # that is in the public domain, and is intended to remain in the + # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do + # not apply to the TZ Database or contributions that individuals make + # to it. Should any claims be made and substantiated against the TZ + # Database, the organization that is providing the IANA + # Considerations defined in this RFC, under the memorandum of + # understanding with the IETF, currently ICANN, may act in accordance + # with all competent court orders. No ownership claims will be made + # by ICANN or the IETF Trust on the database or the code. Any person + # making a contribution to the database or code waives all rights to + # future claims in that contribution or in the TZ Database. + +------------------------------------------------------------------------ + + + University of California License + +This license applies to the following files or, in the case of +directories, certain files in those directories: + + * dbm/ + * db/mork/src/morkQuickSort.cpp + * xpcom/glue/nsQuickSort.cpp + * nsprpub/pr/src/misc/praton.c + * media/mtransport/third_party/nICEr/src/stun/addrs.c + +Copyright (c) 1990, 1993 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +[3 Deleted as of 22nd July 1999; see + ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change + for details] +4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +------------------------------------------------------------------------ + + + US English Spellchecking Dictionary Licenses + +These licenses apply to certain files in the directory +extensions/spellcheck/locales/en-US/hunspell/. (This code only ships in +some localized versions of this product.) + +Different parts of the US English dictionary (SCOWL) are subject to the +following licenses as shown below. For additional details, sources, credits, +and public domain references, see README.txt +. + +The collective work of the Spell Checking Oriented Word Lists (SCOWL) is under +the following copyright: + +Copyright 2000-2007 by Kevin Atkinson +Permission to use, copy, modify, distribute and sell these word lists, the +associated scripts, the output created from the scripts, and its documentation +for any purpose is hereby granted without fee, provided that the above +copyright notice appears in all copies and that both that copyright notice and +this permission notice appear in supporting documentation. Kevin Atkinson makes +no representations about the suitability of this array for any purpose. It is +provided "as is" without express or implied warranty. + +The WordNet database is under the following copyright: + +This software and database is being provided to you, the LICENSEE, by Princeton +University under the following license. By obtaining, using and/or copying +this software and database, you agree that you have read, understood, and will +comply with these terms and conditions: +Permission to use, copy, modify and distribute this software and database and +its documentation for any purpose and without fee or royalty is hereby granted, +provided that you agree to comply with the following copyright notice and +statements, including the disclaimer, and that the same appear on ALL copies of +the software, database and documentation, including modifications that you make +for internal use or for distribution. +WordNet 1.6 Copyright 1997 by Princeton University. All rights reserved. +THIS SOFTWARE AND DATABASE IS PROVIDED "AS IS" AND PRINCETON UNIVERSITY +MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF +EXAMPLE, BUT NOT LIMITATION, PRINCETON UNIVERSITY MAKES NO +REPRESENTATIONS OR WARRANTIES OF MERCHANT- ABILITY OR FITNESS FOR ANY +PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE, DATABASE OR +DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, +TRADEMARKS OR OTHER RIGHTS. +The name of Princeton University or Princeton may not be used in advertising or +publicity pertaining to distribution of the software and/or database. Title to +copyright in this software, database and any associated documentation shall at +all times remain with Princeton University and LICENSEE agrees to preserve same. + +The "UK Advanced Cryptics Dictionary" is under the following copyright: + +Copyright (c) J Ross Beresford 1993-1999. All Rights Reserved. +The following restriction is placed on the use of this publication: if The UK +Advanced Cryptics Dictionary is used in a software package or redistributed in +any form, the copyright notice must be prominently displayed and the text of +this document must be included verbatim. There are no other restrictions: I +would like to see the list distributed as widely as possible. + +Various parts are under the Ispell copyright: + +Copyright 1993, Geoff Kuenning, Granada Hills, CA +All rights reserved. Redistribution and use in source and binary forms, with +or without modification, are permitted provided that the following conditions +are met: + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + 3. All modifications to the source code must be clearly marked as such. +Binary redistributions based on modified source code must be clearly marked as +modified versions in the documentation and/or other materials provided with +the distribution. + (clause 4 removed with permission from Geoff Kuenning) + 5. The name of Geoff Kuenning may not be used to endorse or promote products +derived from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Additional Contributors: + + Alan Beale + M Cooper + +------------------------------------------------------------------------ + + + V8 License + +This license applies to certain files in the directories +js/src/irregexp, js/src/builtin, js/src/jit/arm and js/src/jit/mips. + +Copyright 2006-2012 the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#if defined(XP_WIN) || defined(XP_MACOSX) || defined(XP_LINUX) +------------------------------------------------------------------------ + + + Valve BSD License + +This license applies to certain files in the directory gfx/vr/openvr. + +Copyright (c) 2015, Valve Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + VTune License + +This license applies to certain files in the directory js/src/vtune. + +Copyright (c) 2005-2012 Intel Corporation. All rights reserved. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + WebRTC License + +This license applies to certain files in the directory media/webrtc/trunk. + +Copyright (c) 2011, The WebRTC project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + x264 License + +This license applies to the file +media/webrtc/trunk/third_party/libyuv/source/x86inc.asm. + +Copyright (C) 2005-2012 x264 project + +Authors: Loren Merritt + Anton Mitrofanov + Jason Garrett-Glaser + Henrik Gramner + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +------------------------------------------------------------------------ + + + Xiph.org Foundation License + +This license applies to files in the following directories with the +specified copyright year ranges: + + * media/libogg/, 2002 + * media/libtheora/, 2002-2007 + * media/libvorbis/, 2002-2004 + * media/libtremor/, 2002-2010 + * media/libspeex_resampler/, 2002-2008 + +Copyright (c) , Xiph.org Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------ + + + Other Required Notices + + * This software is based in part on the work of the Independent JPEG + Group. + * Portions of the OS/2 and Android versions of this software are + copyright ©1996-2012 The FreeType Project + . All rights reserved. + +------------------------------------------------------------------------ + + + Optional Notices + +Some permissive software licenses request but do not require an +acknowledgement of the use of their software. We are very grateful to +the following people and projects for their contributions to this product: + + * The zlib compression library (Jean-loup + Gailly, Mark Adler and team) + * The bzip2 compression library (Julian Seward) + * The libpng graphics library (Glenn + Randers-Pehrson and team) + * The sqlite database engine (D. Richard Hipp + and team) + * The Nullsoft Scriptable Install System + (Amir Szekely and team) + +------------------------------------------------------------------------ + + + Proprietary Operating System Components + +Under some circumstances, under our binary components policy +, +Mozilla may decide to include additional operating system vendor code +with the installer of our products designed for that vendor's +proprietary platform, to make our products work well on that specific +operating system. The following license statements apply to such inclusions. + + + Microsoft Windows: Terms for 'Microsoft Distributable Code' + +These terms apply to the following files; they are referred to below as +"Distributable Code": + + * d3d*.dll (Direct3D libraries) + * msvc*.dll (C and C++ runtime libraries) + +Copyright (c) Microsoft Corporation. + +The Distributable Code may be used and distributed only if you comply with the +following terms: + +(i) You may use, copy, and distribute the Distributable Code only as part of + this product; +(ii) You may not use the Distributable Code on a platform other than Windows; +(iii) You may not alter any copyright, trademark or patent notice in the + Distributable Code; +(iv) You may not modify or distribute the source code of any Distributable + Code so that any part of the source code becomes subject to the MPL or + any other copyleft license; +(v) You must comply with any technical limitations in the Distributable Code + that only allow you to use it in certain ways; and +(vi) You must comply with all domestic and international export laws and + regulations that apply to the Distributable Code. + +------------------------------------------------------------------------ + +Return to top . + diff --git a/iceweasel-uxp/PKGBUILD b/iceweasel-uxp/PKGBUILD new file mode 100644 index 0000000..6a0f414 --- /dev/null +++ b/iceweasel-uxp/PKGBUILD @@ -0,0 +1,188 @@ +# Maintainer: Jesus E. + +# Based on iceweasel-esr and basilisk packages + +if [ "${CARCH}" = "i686" ]; then + _pgo=false +else + _pgo=true +fi + +_pkgname=UXP +pkgname=iceweasel-uxp +_pkgver=2021.06.02 +_appver=3.0 +pkgver=52.9.${_pkgver//./} +pkgrel=5 +pkgdesc="A new generation of Iceweasel, an XUL-based standalone web browser on the Unified XUL Platform (UXP)." +arch=(i686 x86_64) +license=(MPL-2.0) +depends=(ffmpeg gtk2 libevent libxt sndio hunspell) +makedepends=(autoconf-legacy diffutils xorg-imake mesa tauthon unzip yasm zip) +options=(!emptydirs !makeflags !strip debug) +if $_pgo; then + makedepends+=(xenocara-server-xvfb) + options+=(!ccache) +fi +optdepends=('speech-dispatcher: Text-to-Speech') +url="https://wiki.hyperbola.info/$pkgname" +replaces=('basilisk' 'firefox' 'firefox-esr' 'icecat' 'iceweasel' 'iceweasel-esr') +conflicts=('basilisk' 'firefox' 'firefox-esr' 'icecat' 'iceweasel' 'iceweasel-esr') +provides=('basilisk' 'firefox' 'firefox-esr' 'icecat' 'iceweasel' 'iceweasel-esr') +install=$pkgname.install +source=("https://repo.hyperbola.info:50000/other/$_pkgname/$_pkgname-$_pkgver.tar.gz" + "https://repo.hyperbola.info:50000/other/$pkgname/$pkgname-$_appver.tar.gz" + mozconfig + $pkgname.desktop + vendor.js + LICENSE + # Application patches + 0001-Restore-risky-system-libraries.patch + 0002-Add-iceweasel-uxp-application-specfic-override.patch + 0003-Uplift-enable-proxy-bypass-protection-flag.patch + 0004-Hardcode-AppName-in-nsAppRunner.patch + 0005-Disable-SSLKEYLOGFILE-in-NSS.patch + 0006-Fix-PGO-Build.patch + # build bustage work-around + 0007-init-configure-patch.patch + # libcubeb patch + 0008-Update-libcubeb-to-a1200c34.patch + 0009-Tauthon.patch + # Additional application patches + 0010-remove-malfunctional-searchplugins.patch + 0011-$pkgname-install-dir.patch) +sha512sums=('4513e30b38229654f1d02a6f4ba7914408d2169a95884560a9b1024a33fab5292dce41e113be2959fd2efbd8abd0763926352ee4362606a03700cb3ac53aeffa' + 'f78df3239819b5be0887757fba3c1f9f422f2bd69299d76d15f2d5c71b3fe69492ac962a447e5b0fac2a0b3c03d77b72531dbde31399fe1e31a20e72ae7e0b2f' + 'b81e56ff312d22a9c32a9719fa8dfb1b3d6a3c94bcf697aa77b0df62f440a82ed49684de8486993c38940af1ea6ade44f9d5dcdbc41450a7157a8c2081363c5c' + '42f0003895200da7a311226d6a14245c667a1ed1c643b7a2a0f2676d2b30e0881c6198909eead14777584bb6f81733205503e6a15c78ed581d39d5bfb6b95ec4' + 'eea256d545108077f90d0351ec6e43029c1d687bf532795176504b8e35e17a68b45f78395126f32f091e54adfd9209b22d361e8d07085a0b2eaf5edd3ddcdb58' + '5b49d98ce0740ced95de8b8b39a886ee8bc5071302c4c20dbe0421b27dd1ff1aed13115819fc5fd8309745f91a94cf4c8038cf993c6237a536010185727cd7c9' + '45bb48b4d8436ef0d9535d3891848bafc3c80ff187597591533eab70a0b160eb2825c4856698e813e5858f8baaf9f054abbcd5ce6d2763a374ef3d1917952f27' + '21b137b200a3c2cd91ae6b80a704d1c82c03c590d7f6215135c7bf32a8d4c6ebf7526fe7ec52321e9a2513b11d18418d2aaddea4171a31a3c726a2e02b761118' + '140dec7c094c04a1180655136d85b0f921bb7461298ff1f5d02721373be838a732aeb9684550857574ce4d056f26873f28bd7e4371ee602dc73f64d0ff5ec1fe' + '23e1c095820165a3d35f10c0eb2e4e4cf62296bb8b16d18b9bf4aefadd641539a710bb4907285ac6e014a70d6986ac9c38ebe718d11fb3a8333770dcf153ffbd' + '4d87565a2ce99a135130fa4340f2f6ab29330d7b7e8eb40607c69951b6e807733e4dc2885bd0082c658605809103ac445d67849183ce1d5ed5aaf21dd412b1ef' + '787e271adba2f802737e381aa370331570b2d5254e05d524dc0dd1c941839f9e38a725964104c1e51ba41bb0d585b295eb864477bb66768b19646fb0815ffb9d' + '090773648376a996f03094309dd66c3b868a8923d544a02abc44eb8c374603e0126ae72182d9f6c9030fbddefc5d8cdd4d7ca7c817ac02bceb9fba6f3bb27f33' + '76f4bac91536785eadfc4bc5a220b586f34acbe36e22b16d65163c0bebf767740d1c65e0f86fe8db550749aa53736d1c735b78b879742834202d7ca9e01f98da' + '07a2e719c372efc56c595a70a7faebccbee80a15739ffc8da4a47e054f914b897f8998a83852d39840a223130b521f2b58328a547994cf58f7685afd6238e63f' + 'e39f63f0f9adcdaf688b0d91030fb5aa2690ee8ccf97049b84f3bc19a61ba0ec09a3b61df2c15707674eb3aaf56e80fc2cb6709c3f6fbef3133c92f07faecb82' + '30d607ed2e6c0da75930a87191c4a703f47ca918bb33748bd5f62e3f7fd6846605b65aa1f3825da48bb9828188ef784fd3c953a0673c60a28dfa8a74a13195c1') + +prepare() { + # Move our application into the Unified XUL Platform + cd "$srcdir/$_pkgname-$_pkgver" + mkdir -p application + mv "$srcdir/$pkgname-$_appver" application/$pkgname + + # Allow us to build with system libs (this is not recommended/untested per UXP devs) + patch -p1 -i "$srcdir/0001-Restore-risky-system-libraries.patch" + + # Apply Iceweasel-UXP application specific overrides to UXP + patch -p1 -i "$srcdir/0002-Add-iceweasel-uxp-application-specfic-override.patch" + + # Uplift enable-proxy-bypass-protection flag + patch -p1 -i "$srcdir/0003-Uplift-enable-proxy-bypass-protection-flag.patch" + + # Hardcode AppName in nsAppRunner + patch -p1 -i "$srcdir/0004-Hardcode-AppName-in-nsAppRunner.patch" + + # Disable SSLKEYLOGFILE in NSS + patch -p1 -i "$srcdir/0005-Disable-SSLKEYLOGFILE-in-NSS.patch" + + # Fix PGO build + patch -p1 -i "$srcdir/0006-Fix-PGO-Build.patch" + + # Apply configure fix (Next release) + patch -p1 -i "$srcdir/0007-init-configure-patch.patch" + + # Apply and update libcubeb for sndio support + patch -p1 -i "$srcdir/0008-Update-libcubeb-to-a1200c34.patch" + + # Apply Tauthon patch instead of using Python + patch -p1 -i "$srcdir/0009-Tauthon.patch" + + # Remove bad credit records for some CA issuers such as CNNIC, StartCom, Symantec and WoSign + sed -e '/^# Certificate .*\(CNNIC\|China\|GDCA\|StartCom\|Symantec\|UCA\|WoSign\)/,/^CKA_TRUST_STEP_UP_APPROVED/d' \ + -i security/nss/lib/ckfw/builtins/certdata.txt + + # Remove further bad credit records for some CA issuers such as GDCA, UCA, vTrus and TrustCor + sed -e '/^# Certificate .*\(GDCA\|UCA\|vTrus\|TrustCor\)/,/^CKA_TRUST_STEP_UP_APPROVED/d' \ + -i security/nss/lib/ckfw/builtins/certdata.txt + + # Remove malfunctional searchplugins + patch -Np1 -i ${srcdir}/0010-remove-malfunctional-searchplugins.patch + rm "application/$pkgname/locales/searchplugins/"{gnusocial,invidious,invidious-tor,searx,searx-tor,yacy}.xml + + # Install to /usr/lib/iceweasel-uxp + patch -p1 -i "$srcdir/0011-$pkgname-install-dir.patch" + + # Adapt Iceweasel-UXP version to $pkgver + sed -i "s|52.9.0_YYYYMMDD|52.9.YYYYMMDD| + s|MOZ_APP_VERSION[=]52[.]9[.].*|MOZ_APP_VERSION=52.9.${_pkgver//./}| + s|MOZ_APP_VERSION_DISPLAY[=].*date.*|MOZ_APP_VERSION_DISPLAY=${_pkgver//./}| + " application/$pkgname/confvars.sh + + # Add missing versionField.textContent in aboutDialog.js + sed -i 's|let version [=] Services[.]appinfo[.]version[;]|let version = Services.appinfo.version;\n versionField.textContent = version;|' application/$pkgname/base/content/aboutDialog.js + + # Load our build config + cp "$srcdir/mozconfig" .mozconfig + + mkdir "$srcdir/path" + ln -s /usr/bin/tauthon "$srcdir/path/python" +} + +build() { + cd "$srcdir/$_pkgname-$_pkgver" + + # _FORTIFY_SOURCE causes configure failures + CPPFLAGS+=" -O2" + + export PATH="$srcdir/path:$PATH" + + if $_pgo; then + # Do PGO + xvfb-run -a -n 95 -s "-extension GLX -screen 0 1280x1024x24" \ + make -f client.mk build MOZ_PGO=1 + else + make -f client.mk build + fi +} + +package() { + cd "$srcdir/$_pkgname-$_pkgver" + + make -f client.mk DESTDIR="$pkgdir" INSTALL_SDK= install + + install -Dm644 "$srcdir/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + install -Dm644 "$srcdir/vendor.js" "$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js" + + for i in 16 32 48; do + install -Dm644 application/$pkgname/branding/${pkgname%-*}/default$i.png \ + "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png" + done + install -Dm644 application/$pkgname/branding/${pkgname%-*}/content/icon64.png \ + "$pkgdir/usr/share/icons/hicolor/64x64/apps/$pkgname.png" + install -Dm644 application/$pkgname/branding/${pkgname%-*}/content/about-logo.png \ + "$pkgdir/usr/share/icons/hicolor/192x192/apps/$pkgname.png" + install -Dm644 application/$pkgname/branding/${pkgname%-*}/content/about-logo@2x.png \ + "$pkgdir/usr/share/icons/hicolor/384x384/apps/$pkgname.png" + + install -Dm644 "$srcdir/$pkgname.desktop" \ + "$pkgdir/usr/share/applications/$pkgname.desktop" + + # Use system-provided dictionaries + rm -rf "$pkgdir/usr/lib/$pkgname/"{dictionaries,hyphenation} + ln -s /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries" + ln -s /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation" + + # Replace duplicate binary with symlink + # https://bugzilla.mozilla.org/show_bug.cgi?id=658850 + ln -sf $pkgname "$pkgdir/usr/lib/$pkgname/$pkgname-bin" + rm "$pkgdir/usr/bin/$pkgname" + + ln -srf "$pkgdir/usr/lib/$pkgname/$pkgname" \ + "$pkgdir/usr/bin/$pkgname" +} diff --git a/iceweasel-uxp/iceweasel-uxp.desktop b/iceweasel-uxp/iceweasel-uxp.desktop new file mode 100644 index 0000000..c081b94 --- /dev/null +++ b/iceweasel-uxp/iceweasel-uxp.desktop @@ -0,0 +1,310 @@ +[Desktop Entry] +Version=1.0 +Name=Iceweasel-UXP +GenericName=Web Browser +GenericName[ar]=متصŮŘ­ ŮŮب +GenericName[ast]=Restolador Web +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[ca]=Navegador web +GenericName[cs]=WebovĂ˝ prohlĂ­ĹľeÄŤ +GenericName[da]=Webbrowser +GenericName[de]=Webbrowser +GenericName[el]=ΠεĎιηγητής διαδικτύου +GenericName[es]=Navegador web +GenericName[et]=Veebibrauser +GenericName[fa]=مرŮرگر اینترنتی +GenericName[fi]=WWW-selain +GenericName[fr]=Navigateur Web +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן ××™× ××¨× × +GenericName[hr]=Web preglednik +GenericName[hu]=WebböngĂ©szĹ‘ +GenericName[it]=Browser Web +GenericName[ja]=ウェă–ă»ă–ă©ă‚¦ă‚¶ +GenericName[ko]=웹 브라우저 +GenericName[ku]=Geroka torĂŞ +GenericName[lt]=Interneto naršyklÄ— +GenericName[nb]=Nettleser +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[no]=Nettleser +GenericName[pl]=PrzeglÄ…darka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator Internet +GenericName[ru]=Веб-браŃзер +GenericName[sk]=InternetovĂ˝ prehliadaÄŤ +GenericName[sl]=Spletni brskalnik +GenericName[sv]=Webbläsare +GenericName[tr]=Web Tarayıcı +GenericName[ug]=ŘŞŮرŮŰ†Ř±ÚŻŰ +GenericName[uk]=Веб-браŃзер +GenericName[vi]=Trình duyệt Web +GenericName[zh_CN]=网络浏č§ĺ™¨ +GenericName[zh_TW]=網路瀏覽器 +Comment=Browse the Web +Comment[ar]=تصŮŘ­ الŮŮب +Comment[ast]=Restola pela Rede +Comment[bn]=ইন্টারনেট ব্রাউজ করŕ§ŕ¦¨ +Comment[ca]=Navegueu per el web +Comment[cs]=ProhlĂ­ĹľenĂ­ stránek World Wide Webu +Comment[da]=Surf pĂĄ internettet +Comment[de]=Im Internet surfen +Comment[el]=ΜποĎείτε να πεĎιηγηθείτε Ďτο διαδίκτυο (Web) +Comment[es]=Navegue por la web +Comment[et]=Lehitse veebi +Comment[fa]=صŮحات شبکه جهانی اینترنت را مرŮر نمایید +Comment[fi]=Selaa Internetin WWW-sivuja +Comment[fr]=Naviguer sur le Web +Comment[gl]=Navegar pola rede +Comment[he]=גלישה ברחבי ×”××™× ××¨× × +Comment[hr]=PretraĹľite web +Comment[hu]=A világhálĂł böngĂ©szĂ©se +Comment[it]=Esplora il web +Comment[ja]=ウェă–を閲覧ă—ăľă™ +Comment[ko]=웹을 돌아 다닙ë‹ë‹¤ +Comment[ku]=Li torĂŞ bigere +Comment[lt]=Naršykite internete +Comment[nb]=Surf pĂĄ nettet +Comment[nl]=Verken het internet +Comment[nn]=Surf pĂĄ nettet +Comment[no]=Surf pĂĄ nettet +Comment[pl]=PrzeglÄ…danie stron WWW +Comment[pt]=Navegue na Internet +Comment[pt_BR]=Navegue na Internet +Comment[ro]=NavigaČ›i pe Internet +Comment[ru]=ДоŃŃ‚ŃĐż в Đнтернет +Comment[sk]=Prehliadanie internetu +Comment[sl]=Brskajte po spletu +Comment[sv]=Surfa pĂĄ webben +Comment[tr]=İnternet'te Gezinin +Comment[ug]=دۇنيادىŮى ŘŞŮربەتلەرنى Ůۆرگىلى بŮلىدۇ +Comment[uk]=Перегляд Ńторінок Đ†Đ˝Ń‚ĐµŃ€Đ˝ĐµŃ‚Ń +Comment[vi]=Äá» duyệt các trang web +Comment[zh_CN]=浏č§äş’č”网 +Comment[zh_TW]=瀏覽網際網路 +Exec=iceweasel-uxp %u +Icon=iceweasel-uxp +Terminal=false +Type=Application +MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https; +StartupNotify=true +Categories=Network;WebBrowser; +Keywords=web;browser;internet; +Actions=new-window;new-private-window; + +[Desktop Action new-window] +Name=New Window +Name[ach]=Dirica manyen +Name[af]=Nuwe venster +Name[an]=Nueva finestra +Name[ar]=ناŮذة جديدة +Name[as]=নতŕ§ŕ¦¨ উইন্ডো +Name[ast]=Ventana nueva +Name[az]=Yeni PÉ™ncÉ™rÉ™ +Name[be]=Новае акно +Name[bg]=Нов прозорец +Name[bn_BD]=নতŕ§ŕ¦¨ উইন্ডো (N) +Name[bn_IN]=নতŕ§ŕ¦¨ উইন্ডো +Name[br]=Prenestr nevez +Name[brx]=गोदान उइन्ड'(N) +Name[bs]=Novi prozor +Name[ca]=Finestra nova +Name[cak]=K'ak'a' tzuwäch +Name[cs]=NovĂ© okno +Name[cy]=Ffenestr Newydd +Name[da]=Nyt vindue +Name[de]=Neues Fenster +Name[dsb]=Nowe wokno +Name[el]=Νέο παĎάθυĎÎż +Name[en_GB]=New Window +Name[en_US]=New Window +Name[en_ZA]=New Window +Name[eo]=Nova fenestro +Name[es_AR]=Nueva ventana +Name[es_CL]=Nueva ventana +Name[es_ES]=Nueva ventana +Name[es_MX]=Nueva ventana +Name[et]=Uus aken +Name[eu]=Leiho berria +Name[fa]=پنجره جدید +Name[ff]=Henorde Hesere +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenĂŞtre +Name[fy_NL]=Nij finster +Name[ga_IE]=Fuinneog Nua +Name[gd]=Uinneag Ăąr +Name[gl]=Nova xanela +Name[gn]=OvetĂŁ pyahu +Name[gu_IN]=નવી વિન્ડો +Name[he]=חלון חדש +Name[hi_IN]=नया विंडो +Name[hr]=Novi prozor +Name[hsb]=Nowe wokno +Name[hu]=Ăšj ablak +Name[hy_AM]=Ő†Ő¸Ö€ ŐŠŐˇŐżŐ¸Ö‚Ő°ŐˇŐ¶ +Name[id]=Jendela Baru +Name[is]=NĂ˝r gluggi +Name[it]=Nuova finestra +Name[ja]=ć–°ă—ă„ウィăłă‰ă‚¦ +Name[ja_JP-mac]=新規ウイăłă‰ă‚¦ +Name[ka]=áá®áášá á¤ááśáŻáá á +Name[kk]=Жаңа терезе +Name[km]=បង្អួចážáź’ážáž¸ +Name[kn]=ಹೊಸ ಕಿಟಕಿ +Name[ko]=ě ě°˝ +Name[kok]=नवें जनेल +Name[ks]=نئئ ŮŮنÚŮ +Name[lij]=Neuvo barcon +Name[lo]=ຫນ້າຕŕ»ŕş˛ŕş‡ŕ»ŕş«ŕşˇŕ» +Name[lt]=Naujas langas +Name[ltg]=Jauns lĹ«gs +Name[lv]=Jauns logs +Name[mai]=नव विंडो +Name[mk]=Нов прозорец +Name[ml]=ŕ´Şŕµŕ´¤ŕ´żŕ´Ż ജാലകം +Name[mr]=नवीन पटल +Name[ms]=Tetingkap Baru +Name[my]=ဝင်းဒိုးအသစ် +Name[nb_NO]=Nytt vindu +Name[ne_NP]=नयाठसञ्झ्याल +Name[nl]=Nieuw venster +Name[nn_NO]=Nytt vindauge +Name[or]=ନୂତନ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ +Name[pl]=Nowe okno +Name[pt_BR]=Nova janela +Name[pt_PT]=Nova janela +Name[rm]=Nova fanestra +Name[ro]=FereastrÄ nouÄ +Name[ru]=Новое окно +Name[sat]=नावा विंडो (N) +Name[si]=නව කවුළුවක් +Name[sk]=NovĂ© okno +Name[sl]=Novo okno +Name[son]=Zanfun taaga +Name[sq]=Dritare e Re +Name[sr]=Нови прозор +Name[sv_SE]=Nytt fönster +Name[ta]=பŕŻŕ®¤ŕ®żŕ®Ż சாளரம் +Name[te]=కొత్త విండో +Name[th]=หน้าตŕąŕ¸˛ŕ¸‡ŕąŕ¸«ŕ¸ˇŕą +Name[tr]=Yeni pencere +Name[tsz]=Eraatarakua jimpani +Name[uk]=Нове вікно +Name[ur]=نیا ŘŻŘ±ŰŚÚ†Ű +Name[uz]=Yangi oyna +Name[vi]=Cá»­a sổ má»›i +Name[wo]=Palanteer bu bees +Name[xh]=Ifestile entsha +Name[zh_CN]=新建窗口 +Name[zh_TW]=開新視窗 +Exec=iceweasel-uxp --new-window %u + +[Desktop Action new-private-window] +Name=New Private Window +Name[ach]=Dirica manyen me mung +Name[af]=Nuwe privaatvenster +Name[an]=Nueva finestra privada +Name[ar]=ناŮذة خاصة جديدة +Name[as]=নতŕ§ŕ¦¨ ব্যক্তিগত উইন্ডো +Name[ast]=Ventana privada nueva +Name[az]=Yeni MÉ™xfi PÉ™ncÉ™rÉ™ +Name[be]=Новае акно адаŃаблення +Name[bg]=Нов прозорец за поверително Ńърфиране +Name[bn_BD]=নতŕ§ŕ¦¨ ব্যক্তিগত উইন্ডো +Name[bn_IN]=নতŕ§ŕ¦¨ ব্যক্তিগত উইন্ডো +Name[br]=Prenestr merdeiñ prevez nevez +Name[brx]=गोदान प्राइभेट उइन्ड' +Name[bs]=Novi privatni prozor +Name[ca]=Finestra privada nova +Name[cak]=K'ak'a' ichinan tzuwäch +Name[cs]=NovĂ© anonymnĂ­ okno +Name[cy]=Ffenestr Breifat Newydd +Name[da]=Nyt privat vindue +Name[de]=Neues privates Fenster +Name[dsb]=Nowe priwatne wokno +Name[el]=Νέο παĎάθυĎÎż ιδιωτικής πεĎιήγηĎης +Name[en_GB]=New Private Window +Name[en_US]=New Private Window +Name[en_ZA]=New Private Window +Name[eo]=Nova privata fenestro +Name[es_AR]=Nueva ventana privada +Name[es_CL]=Nueva ventana privada +Name[es_ES]=Nueva ventana privada +Name[es_MX]=Nueva ventana privada +Name[et]=Uus privaatne aken +Name[eu]=Leiho pribatu berria +Name[fa]=پنجره ناشناس جدید +Name[ff]=Henorde Suturo Hesere +Name[fi]=Uusi yksityinen ikkuna +Name[fr]=Nouvelle fenĂŞtre de navigation privĂ©e +Name[fy_NL]=Nij priveefinster +Name[ga_IE]=Fuinneog Nua PhrĂ­obháideach +Name[gd]=Uinneag phrìobhaideach Ăąr +Name[gl]=Nova xanela privada +Name[gn]=OvetĂŁ ñemi pyahu +Name[gu_IN]=નવી ખાનગી વિન્ડો +Name[he]=חלון פר××™ חדש +Name[hi_IN]=नयी निजी विंडो +Name[hr]=Novi privatni prozor +Name[hsb]=Nowe priwatne wokno +Name[hu]=Ăšj privát ablak +Name[hy_AM]=ŐŤŐŻŐ˝ŐĄŐ¬ ÔłŐˇŐ˛ŐżŐ¶Ő« Ő¤Ő«ŐżŐˇÖ€ŐŻŐ¸Ö‚Ő´ +Name[id]=Jendela Mode Pribadi Baru +Name[is]=NĂ˝r huliðsgluggi +Name[it]=Nuova finestra anonima +Name[ja]=ć–°ă—ă„ă—ă©ă‚¤ă™ăĽăウィăłă‰ă‚¦ +Name[ja_JP-mac]=新規ă—ă©ă‚¤ă™ăĽăウイăłă‰ă‚¦ +Name[ka]=áá®áášá ážáá áá“á á¤ááśáŻáá á +Name[kk]=Жаңа жекелік терезе +Name[km]=បង្អួចឯកជនážáź’ážáž¸ +Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ +Name[ko]=ě 사ěťí™ś ëł´í¸ ëŞ¨ë“ś +Name[kok]=नवो खाजगी विंडो +Name[ks]=نْ٠پرایŮŮą ŮینÚŮ +Name[lij]=NĂŞuvo barcĂłn privòu +Name[lo]=ເປີດຫນ້າຕŕ»ŕş˛ŕş‡ŕşŞŕş§ŕş™ŕş•ົວຂື້ນມາŕ»ŕş«ŕşˇŕ» +Name[lt]=Naujas privataus naršymo langas +Name[ltg]=Jauns privatais lĹ«gs +Name[lv]=Jauns privÄtais logs +Name[mai]=नया निज विंडो (W) +Name[mk]=Нов приватен прозорец +Name[ml]=ŕ´Şŕµŕ´¤ŕ´żŕ´Ż സ്വകാര്യ ജാലകം +Name[mr]=नवीन वŕĄŕ¤Żŕ¤•्तिक पटल +Name[ms]=Tetingkap Persendirian Baharu +Name[my]=New Private Window +Name[nb_NO]=Nytt privat vindu +Name[ne_NP]=नयाठनिजी सञ्झ्याल +Name[nl]=Nieuw privĂ©venster +Name[nn_NO]=Nytt privat vindauge +Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾŕ¨ŕ¨µŕ©‡ŕ¨ź ਵਿੰਡੋ +Name[pl]=Nowe okno prywatne +Name[pt_BR]=Nova janela privativa +Name[pt_PT]=Nova janela privada +Name[rm]=Nova fanestra privata +Name[ro]=FereastrÄ privatÄ nouÄ +Name[ru]=Новое приватное окно +Name[sat]=नावा निजेराक् विंडो (W ) +Name[si]=නව පුද්ගලික කවුළුව (W) +Name[sk]=NovĂ© okno v reĹľime SĂşkromnĂ© prehliadanie +Name[sl]=Novo zasebno okno +Name[son]=Sutura zanfun taaga +Name[sq]=Dritare e Re Private +Name[sr]=Нови приватан прозор +Name[sv_SE]=Nytt privat fönster +Name[ta]=பŕŻŕ®¤ŕ®żŕ®Ż தனிப்பட்ட சாளரம் +Name[te]=కొత్త ఆంతరంగిక విండో +Name[th]=หน้าตŕąŕ¸˛ŕ¸‡ŕ¸Şŕąŕ¸§ŕ¸™ŕ¸•ัวŕąŕ¸«ŕ¸ˇŕą +Name[tr]=Yeni gizli pencere +Name[tsz]=Juchiiti eraatarakua jimpani +Name[uk]=Приватне вікно +Name[ur]=نیا نجی ŘŻŘ±ŰŚÚ†Ű +Name[uz]=Yangi maxfiy oyna +Name[vi]=Cá»­a sổ riĂŞng tư má»›i +Name[wo]=Panlanteeru biir bu bees +Name[xh]=Ifestile yangasese entsha +Name[zh_CN]=新建éšç§ćµŹč§çŞ—ĺŹŁ +Name[zh_TW]=新增隱ç§č¦–窗 +Exec=iceweasel-uxp --private-window %u diff --git a/iceweasel-uxp/iceweasel-uxp.install b/iceweasel-uxp/iceweasel-uxp.install new file mode 100644 index 0000000..7baba1a --- /dev/null +++ b/iceweasel-uxp/iceweasel-uxp.install @@ -0,0 +1,29 @@ +post_install() { + echo '>>> !!!MANUAL UPGRADE REQUIRED FOR EXISTING PROFILES!!!' + echo '>>> =================================================================================' + echo '>>> The latest version of Iceweasel-UXP now uses its own profile directory.' + echo '>>> In order to use your existing browser profile, please rename "~/.mozilla/firefox"' + echo '>>> to "~/.hyperbola/iceweasel-uxp". e.g.:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> mkdir -p ~/.hyperbola/iceweasel-uxp' + echo '>>> cp -a ~/.mozilla/firefox/* ~/.hyperbola/iceweasel-uxp' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Once you have confirmed your profile is working in all installed application(s)' + echo '>>> you may remove the ~/.mozilla directory.' +} + +post_upgrade() { + if (( $(vercmp $2 52.9.20190826-1) < 0 )); then + echo '>>> !!!MANUAL UPGRADE REQUIRED FOR EXISTING PROFILES!!!' + echo '>>> =================================================================================' + echo '>>> The latest version of Iceweasel-UXP now uses its own profile directory.' + echo '>>> In order to use your existing browser profile, please rename "~/.mozilla/firefox"' + echo '>>> to "~/.hyperbola/iceweasel-uxp". e.g.:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> mkdir -p ~/.hyperbola/iceweasel-uxp' + echo '>>> cp -a ~/.mozilla/firefox/* ~/.hyperbola/iceweasel-uxp' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Once you have confirmed your profile is working in all installed application(s)' + echo '>>> you may remove the ~/.mozilla directory.' + fi +} diff --git a/iceweasel-uxp/mozconfig b/iceweasel-uxp/mozconfig new file mode 100644 index 0000000..ca3a8c5 --- /dev/null +++ b/iceweasel-uxp/mozconfig @@ -0,0 +1,61 @@ +ac_add_options --prefix=/usr +ac_add_options --enable-release +ac_add_options --enable-gold +ac_add_options --enable-pie + +# Iceweasel-UXP +ac_add_options --enable-application=application/iceweasel-uxp +ac_add_options --disable-official-branding +ac_add_options --with-branding=application/iceweasel-uxp/branding/iceweasel +export MOZILLA_OFFICIAL=0 +export MOZ_TELEMETRY_REPORTING=0 +export MOZ_ADDON_SIGNING=1 +export MOZ_REQUIRE_SIGNING=0 + +# Disable bloat +ac_add_options --disable-safe-browsing +ac_add_options --disable-url-classifier +ac_add_options --disable-eme +#ac_add_options --disable-webspeech +#ac_add_options --disable-webspeechtestbackend +ac_add_options --disable-mozril-geoloc +ac_add_options --disable-nfc +ac_add_options --disable-synth-pico +ac_add_options --disable-gamepad +ac_add_options --disable-startup-notification +ac_add_options --disable-tests +ac_add_options --disable-necko-wifi +ac_add_options --disable-dbus +ac_add_options --disable-userinfo +ac_add_options --disable-sync +ac_add_options --disable-pulseaudio + +# System libraries +#ac_add_options --with-system-nspr # keep disabled for stability +#ac_add_options --with-system-nss # keep disabled for stability +#ac_add_options --with-system-icu +ac_add_options --with-system-jpeg +ac_add_options --with-system-zlib +ac_add_options --with-system-bz2 +ac_add_options --with-system-libevent +#ac_add_options --with-system-libvpx # keep disabled for freedom issues +ac_add_options --enable-system-hunspell +#ac_add_options --enable-system-sqlite # keep disabled for stability +ac_add_options --enable-system-ffi +ac_add_options --enable-system-pixman + +# Features +ac_add_options --enable-default-toolkit=cairo-gtk2 +ac_add_options --disable-gconf +ac_add_options --enable-proxy-bypass-protection +ac_add_options --disable-crashreporter +ac_add_options --disable-alsa +ac_add_options --enable-sndio +ac_add_options --disable-updater + +STRIP_FLAGS="--strip-debug" + +# Other +mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/moz-objdir + +# vim:set ft=sh: diff --git a/iceweasel-uxp/vendor.js b/iceweasel-uxp/vendor.js new file mode 100644 index 0000000..65595c4 --- /dev/null +++ b/iceweasel-uxp/vendor.js @@ -0,0 +1,277 @@ +// Use LANG environment variable to choose locale +pref("intl.locale.matchOS", true); + +// Disable default browser checking. +pref("browser.shell.checkDefaultBrowser", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); + +// Opt all of us into e10s, instead of just 50% (Disabled) https://bugzilla.mozilla.org/show_bug.cgi?id=1371886 +// pref("browser.tabs.remote.autostart", true); + +// Disable "alt" as a shortcut key to open full menu bar. Conflicts with "alt" as a modifier +pref("ui.key.menuAccessKeyFocuses", false); + +// Disable the GeoLocation API for content +pref("geo.enabled", false); + +// Make sure that the request URL of the GeoLocation backend is empty +pref("geo.wifi.uri", ""); + +// Disable Freedom Violating DRM Feature +pref("browser.eme.ui.enabled", false); +// EME +pref("media.eme.enabled", false); +pref("media.eme.apiVisible", false); + +// Google Widevine DRM +// https://blog.mozilla.org/futurereleases/2016/04/08/mozilla-to-test-widevine-cdm-in-firefox-nightly/ +// https://wiki.mozilla.org/QA/Widevine_CDM +// https://bugzilla.mozilla.org/show_bug.cgi?id=1288580 +pref("media.gmp-widevinecdm.visible", false); +pref("media.gmp-widevinecdm.enabled", false); +pref("media.gmp-widevinecdm.autoupdate", false); + +// Default to classic view for about:newtab +pref("browser.newtabpage.enhanced", false); + +// Poodle attack +pref("security.tls.version.min", 1); + +// Don't call home for blacklisting +pref("extensions.blocklist.enabled", false); + +// Disable plugin installer +pref("plugins.hide_infobar_for_missing_plugin", true); +pref("plugins.hide_infobar_for_outdated_plugin", true); +pref("plugins.notifyMissingFlash", false); + +//https://developer.mozilla.org/en-US/docs/Web/API/MediaSource +//pref("media.mediasource.enabled",true); + +// Speeding it up +pref("network.http.pipelining", true); +pref("network.http.proxy.pipelining", true); +pref("network.http.pipelining.maxrequests", 10); +pref("nglayout.initialpaint.delay", 0); + +// Disable third party cookies +pref("network.cookie.cookieBehavior", 1); + +// Prevent EULA dialog to popup on first run +pref("browser.EULA.override", true); + +// Spoof the useragent to a generic one +//pref("general.useragent.compatMode.firefox", false); +// Spoof the useragent to a generic one for user experience and privacy +pref("general.useragent.override", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0"); +pref("general.appname.override", "Netscape"); +pref("general.appversion.override", "5.0 (Windows)"); +pref("general.buildID.override", "Gecko/20100101"); +pref("general.oscpu.override", "Windows NT 10.0"); +pref("general.platform.override", "Win64"); + +// Privacy & Freedom Issues +// https://webdevelopmentaid.wordpress.com/2013/10/21/customize-privacy-settings-in-mozilla-firefox-part-1-aboutconfig/ +// https://panopticlick.eff.org +// http://ip-check.info +// http://browserspy.dk +// https://wiki.mozilla.org/Fingerprinting +// http://www.browserleaks.com +// http://fingerprint.pet-portal.eu +pref("privacy.donottrackheader.enabled", true); +pref("privacy.donottrackheader.value", 1); +pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", false); +// Disable navigator.sendBeacon() tracking +// https://matomo.org/faq/how-to/faq_33087/ +pref("beacon.enabled", false); + +// CIS 2.1.1 Disable Auto Update / Balrog +pref("app.update.auto", false); +pref("app.update.checkInstallTime", false); +pref("app.update.enabled", false); +pref("app.update.staging.enabled", false); +pref("app.update.url", "about:blank"); +pref("media.gmp-manager.certs.1.commonName", ""); +pref("media.gmp-manager.certs.2.commonName", ""); +// Disable Gecko media plugins: https://wiki.mozilla.org/GeckoMediaPlugins +pref("media.gmp-manager.url", "http://127.0.0.1/"); +pref("media.gmp-manager.url.override", "data:text/plain,"); +pref("media.gmp-provider.enabled", false); +// Don't install openh264 codec +pref("media.gmp-gmpopenh264.enabled", false); +pref("media.gmp-eme-adobe.enabled", false); +pref("media.peerconnection.video.h264_enabled", false); + +// CIS 2.3.4 Block Reported Web Forgeries +// http://kb.mozillazine.org/Browser.safebrowsing.enabled +// http://kb.mozillazine.org/Safe_browsing +// https://support.mozilla.org/en-US/kb/how-does-phishing-and-malware-protection-work +// http://forums.mozillazine.org/viewtopic.php?f=39&t=2711237&p=12896849#p12896849 +pref("browser.safebrowsing.enabled", false); + +// CIS 2.3.5 Block Reported Attack Sites +// http://kb.mozillazine.org/Browser.safebrowsing.malware.enabled +pref("browser.safebrowsing.malware.enabled", false); + +// Disable safe browsing remote lookups for downloaded files. +// This leaks information to google. +// https://www.mozilla.org/en-US/firefox/39.0/releasenotes/ +// https://wiki.mozilla.org/Security/Application_Reputation +pref("browser.safebrowsing.downloads.remote.enabled", false); +pref("browser.safebrowsing.appRepURL", "about:blank"); +pref("browser.safebrowsing.provider.mozilla.gethashURL", "about:blank"); +pref("browser.safebrowsing.provider.mozilla.updateURL", "about:blank"); +pref("browser.safebrowsing.downloads.remote.block_dangerous", false); +pref("browser.safebrowsing.downloads.remote.block_dangerous_host", false); +pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false); +pref("browser.safebrowsing.downloads.remote.block_uncommon", false); +pref("browser.safebrowsing.downloads.remote.enabled", false); +pref("browser.safebrowsing.downloads.remote.url", "about:blank"); +pref("browser.safebrowsing.provider.google.pver", "about:blank"); +pref("browser.safebrowsing.provider.google.reportURL", "about:blank"); +pref("browser.safebrowsing.provider.google.gethashURL", "about:blank"); +pref("browser.safebrowsing.provider.google.updateURL", "about:blank"); +pref("browser.safebrowsing.provider.google.lists", "about:blank"); + +// https://bugzilla.mozilla.org/show_bug.cgi?id=1025965 +pref("browser.safebrowsing.phishing.enabled", false); +pref("browser.safebrowsing.provider.google4.lists", "about:blank"); +pref("browser.safebrowsing.provider.google4.updateURL", "about:blank"); +pref("browser.safebrowsing.provider.google4.gethashURL", "about:blank"); +pref("browser.safebrowsing.provider.google4.pver", "about:blank"); +pref("browser.safebrowsing.provider.google4.reportURL", "about:blank"); +pref("browser.safebrowsing.provider.mozilla.lists", "about:blank"); + +// Disable Microsoft Family Safety MiTM support +// https://bugzilla.mozilla.org/show_bug.cgi?id=1239166 +// https://wiki.mozilla.org/SecurityEngineering/Untrusted_Certificates_in_Windows_Child_Mode +// https://hg.mozilla.org/releases/mozilla-release/file/ddb37c386bb2ffa180117b4d30ca3b41a8af233c/security/manager/ssl/nsNSSComponent.cpp#l782 +pref("security.family_safety.mode", 0); +// https://bugzilla.mozilla.org/show_bug.cgi?id=1265113 +// https://hg.mozilla.org/releases/mozilla-release/rev/d9659c22b3c5 +// https://bugzilla.mozilla.org/show_bug.cgi?id=1298883 +pref("security.enterprise_roots.enabled", false); + +//pref("services.sync.privacyURL", "https://www.gnu.org/software/gnuzilla/"); +pref("social.enabled", false); +pref("social.remote-install.enabled", false); +pref("datareporting.healthreport.uploadEnabled", false); +pref("datareporting.healthreport.about.reportUrl", "127.0.0.1"); +pref("datareporting.healthreport.documentServerURI", "127.0.0.1"); +pref("healthreport.uploadEnabled", false); +pref("social.toast-notifications.enabled", false); +pref("datareporting.policy.dataSubmissionEnabled", false); +pref("datareporting.healthreport.service.enabled", false); +pref("browser.slowStartup.notificationDisabled", true); +pref("network.http.sendRefererHeader", 2); +//pref("network.http.referer.spoofSource", true); +//http://grack.com/blog/2010/01/06/3rd-party-cookies-dom-storage-and-privacy/ +//pref("dom.storage.enabled", false); +pref("dom.event.clipboardevents.enabled",false); +pref("network.prefetch-next", false); +pref("network.dns.disablePrefetch", true); +pref("network.http.sendSecureXSiteReferrer", false); +pref("toolkit.telemetry.enabled", false); +pref("toolkit.telemetry.unified", false); +// Do not tell what plugins do we have enabled: https://mail.mozilla.org/pipermail/firefox-dev/2013-November/001186.html +pref("plugins.enumerable_names", ""); +pref("plugin.state.flash", 0); +// Do not autoupdate search engines +pref("browser.search.update", false); +// Warn when the page tries to redirect or refresh +//pref("accessibility.blockautorefresh", true); +pref("dom.battery.enabled", false); +pref("device.sensors.enabled", false); +pref("camera.control.face_detection.enabled", false); +pref("camera.control.autofocus_moving_callback.enabled", false); +pref("network.http.speculative-parallel-limit", 0); +// No search suggestions +pref("browser.urlbar.userMadeSearchSuggestionsChoice", true); +pref("browser.search.suggest.enabled", false); + + +// WebRTC +pref("media.peerconnection.enabled", false); +pref("media.peerconnection.ice.default_address_only", true); + +pref("font.default.x-western", "sans-serif"); + +// Preferences for the Get Add-ons panel and search engines +pref("extensions.webservice.discoverURL", "https://iw.addons.hyperbola.info"); +pref("extensions.getAddons.search.url", "https://iw.addons.hyperbola.info"); +pref("browser.search.searchEnginesURL", "https://iw.addons.hyperbola.info"); + +// Mobile +pref("privacy.announcements.enabled", false); +pref("browser.snippets.enabled", false); +pref("browser.snippets.syncPromo.enabled", false); +pref("identity.mobilepromo.android", "https://f-droid.org/repository/browse/?fdid=org.gnu.icecat&"); +pref("browser.snippets.geoUrl", "http://127.0.0.1/"); +pref("browser.snippets.updateUrl", "http://127.0.0.1/"); +pref("browser.snippets.statsUrl", "http://127.0.0.1/"); +pref("datareporting.policy.firstRunTime", 0); +pref("datareporting.policy.dataSubmissionPolicyVersion", 2); +pref("browser.webapps.checkForUpdates", 0); +pref("browser.webapps.updateCheckUrl", "http://127.0.0.1/"); +pref("app.faqURL", "http://libreplanet.org/wiki/Group:IceCat/FAQ"); + +// Geolocation depends on third party services +pref("geo.enabled", false); +pref("geo.wifi.uri", ""); + +// Disable heartbeat +pref("browser.selfsupport.url", ""); + +// Disable Link to FireFox Marketplace, currently loaded with non-free "apps" +pref("browser.apps.URL", ""); + +// Use old style preferences, that allow javascript to be disabled +pref("browser.preferences.inContent",false); + +// Don't download ads for the newtab page +pref("browser.newtabpage.directory.source", ""); +pref("browser.newtabpage.directory.ping", ""); +pref("browser.newtabpage.introShown", true); + +// Disable home snippets +pref("browser.aboutHomeSnippets.updateUrl", "data:text/html"); + +// Disable hardware acceleration and WebGL +//pref("layers.acceleration.disabled", false); +pref("webgl.disabled", false); + +// Disable SSDP +pref("browser.casting.enabled", false); + +// Do not require xpi extensions to be signed by Mozilla +pref("xpinstall.signatures.required", false); + +// Disable File and Directory Entries API (Imported from Edge/Chromium) +// https://developer.mozilla.org/en-US/Firefox/Releases/50#Files_and_directories +// https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API +// https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/Introduction +// https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/Firefox_support +// https://bugzilla.mozilla.org/show_bug.cgi?id=1265767 +pref("dom.webkitBlink.filesystem.enabled", false); +// https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory +// https://bugzilla.mozilla.org/show_bug.cgi?id=1258489 +// https://hg.mozilla.org/releases/mozilla-release/rev/133af19777be +pref("dom.webkitBlink.dirPicker.enabled", false); + +// Directory Upload API, webkitdirectory +// https://bugzilla.mozilla.org/show_bug.cgi?id=1188880 +// https://bugzilla.mozilla.org/show_bug.cgi?id=907707 +// https://wicg.github.io/directory-upload/proposal.html +pref("dom.input.dirpicker", false); + +// Disable Captive Portal +pref("network.captive-portal-service.enabled", false); + +// Disable Media Capture and Streams API (Media Streams) +pref("media.navigator.enabled", false); + +// Enable sndio audio backend +pref("media.cubeb.backend", "sndio"); diff --git a/icewm/PKGBUILD b/icewm/PKGBUILD new file mode 100644 index 0000000..2986d42 --- /dev/null +++ b/icewm/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=icewm +pkgver=3.6.0 +pkgrel=2 +pkgdesc="Free and libre window manager designed for speed, usability and consistency" +arch=('i686' 'x86_64') +url='https://ice-wm.org/' +license=('GPL-2') +depends=('imlib2' 'librsvg-legacy' 'libsndfile' 'libxcomposite' 'libxdamage' 'libxinerama' 'libxpm' 'libxrandr' 'libao') +makedepends=('asciidoctor' 'xenocara-mkfontscale' 'gettext-tiny') +optdepends=('perl: for icewm-menu-xrandr') +source=("https://github.com/ice-wm/icewm/releases/download/$pkgver/${pkgname}-${pkgver}.tar.lz" + "libre.patch") +sha512sums=('510c342ab98fe248bfaf4e925a92059ffc7e23e6f47725c274970e1ab751ce57405e52ac5de0e05a1dfa65260c64a4db3c87f8b560e27528aea88ba45cd83920' + '93e0dab410c6d3b61fe7e9e94861d2bd3842be4d8499fc9b1b7366cafee7023375838b60d052031fa6c3b110fa426fb5fb43b8456ac8b761f35782f40eba3d02') + +prepare() { + cd "$pkgname-$pkgver" + + # remove non-free parts + rm -rf ./lib/themes/NanoBlue + rm ./lib/icons/{communicator-abook,communicator-browser,communicator-composer,communicator-discussion,communicator-mail,emacs,gnome,java,kde,navigator,netscape,pdf}_16x16.xpm + rm ./lib/icons/{communicator-abook,communicator-browser,communicator-composer,communicator-discussion,communicator-mail,emacs,java,navigator,netscape,pdf}_32x32.xpm + rm ./lib/taskbar/debian.xpm + patch -Np1 -i ${srcdir}/libre.patch +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-icesound=AO + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # remove unwanted data + rm "${pkgdir}/usr/bin/icewm-set-gnomewm" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/icewm/libre.patch b/icewm/libre.patch new file mode 100644 index 0000000..d3d7e51 --- /dev/null +++ b/icewm/libre.patch @@ -0,0 +1,555 @@ +--- a/lib/Makefile.am 2024-06-16 14:30:54.000000000 +0200 ++++ b/lib/Makefile.am 2025-01-27 02:34:44.070949474 +0100 +@@ -28,18 +28,6 @@ + icons/bomb_16x16.xpm \ + icons/bomb_32x32.xpm \ + icons/cancel-logout_16x16.xpm \ +- icons/communicator-abook_16x16.xpm \ +- icons/communicator-abook_32x32.xpm \ +- icons/communicator-browser_16x16.xpm \ +- icons/communicator-browser_32x32.xpm \ +- icons/communicator-composer_16x16.xpm \ +- icons/communicator-composer_32x32.xpm \ +- icons/communicator-discussion_16x16.xpm \ +- icons/communicator-discussion_32x32.xpm \ +- icons/communicator-mail_16x16.xpm \ +- icons/communicator-mail_32x32.xpm \ +- icons/emacs_16x16.xpm \ +- icons/emacs_32x32.xpm \ + icons/file_16x16.xpm \ + icons/file_32x32.xpm \ + icons/focus_16x16.xpm \ +@@ -52,16 +40,12 @@ + icons/fte_32x32.xpm \ + icons/gimp_16x16.xpm \ + icons/gimp_32x32.xpm \ +- icons/gnome_16x16.xpm \ + icons/help_16x16.xpm \ + icons/help_32x32.xpm \ + icons/hibernate_16x16.xpm \ + icons/hibernate_32x32.xpm \ + icons/icewm_16x16.png \ + icons/icewm_32x32.png \ +- icons/java_16x16.xpm \ +- icons/java_32x32.xpm \ +- icons/kde_16x16.xpm \ + icons/key_16x16.png \ + icons/key_32x32.png \ + icons/koules_16x16.xpm \ +@@ -71,12 +55,6 @@ + icons/lock_48x48.xpm \ + icons/logout_16x16.xpm \ + icons/logout_32x32.xpm \ +- icons/navigator_16x16.xpm \ +- icons/navigator_32x32.xpm \ +- icons/netscape_16x16.xpm \ +- icons/netscape_32x32.xpm \ +- icons/pdf_16x16.xpm \ +- icons/pdf_32x32.xpm \ + icons/pref_16x16.png \ + icons/pref_32x32.png \ + icons/programs_16x16.xpm \ +@@ -149,7 +127,6 @@ + mailbox/nomail.xpm \ + mailbox/unreadmail.xpm \ + taskbar/collapse.xpm \ +- taskbar/debian.xpm \ + taskbar/desktop.xpm \ + taskbar/expand.xpm \ + taskbar/icewm.xpm \ +@@ -456,117 +433,4 @@ + themes/Helix/titleIP.xpm \ + themes/Helix/titleIS.xpm \ + themes/Helix/titleIT.xpm \ +- themes/Helix/default.theme \ +- themes/NanoBlue/closeA.xpm \ +- themes/NanoBlue/closeI.xpm \ +- themes/NanoBlue/closeO.xpm \ +- themes/NanoBlue/dframeAB.xpm \ +- themes/NanoBlue/dframeABL.xpm \ +- themes/NanoBlue/dframeABR.xpm \ +- themes/NanoBlue/dframeAL.xpm \ +- themes/NanoBlue/dframeAR.xpm \ +- themes/NanoBlue/dframeAT.xpm \ +- themes/NanoBlue/dframeATL.xpm \ +- themes/NanoBlue/dframeATR.xpm \ +- themes/NanoBlue/dframeIB.xpm \ +- themes/NanoBlue/dframeIBL.xpm \ +- themes/NanoBlue/dframeIBR.xpm \ +- themes/NanoBlue/dframeIL.xpm \ +- themes/NanoBlue/dframeIR.xpm \ +- themes/NanoBlue/dframeIT.xpm \ +- themes/NanoBlue/dframeITL.xpm \ +- themes/NanoBlue/dframeITR.xpm \ +- themes/NanoBlue/eos.jpg \ +- themes/NanoBlue/expandA.xpm \ +- themes/NanoBlue/expandI.xpm \ +- themes/NanoBlue/expandO.xpm \ +- themes/NanoBlue/frameAB.xpm \ +- themes/NanoBlue/frameABL.xpm \ +- themes/NanoBlue/frameABR.xpm \ +- themes/NanoBlue/frameAL.xpm \ +- themes/NanoBlue/frameAR.xpm \ +- themes/NanoBlue/frameAT.xpm \ +- themes/NanoBlue/frameATL.xpm \ +- themes/NanoBlue/frameATR.xpm \ +- themes/NanoBlue/frameIB.xpm \ +- themes/NanoBlue/frameIBL.xpm \ +- themes/NanoBlue/frameIBR.xpm \ +- themes/NanoBlue/frameIL.xpm \ +- themes/NanoBlue/frameIR.xpm \ +- themes/NanoBlue/frameIT.xpm \ +- themes/NanoBlue/frameITL.xpm \ +- themes/NanoBlue/frameITR.xpm \ +- themes/NanoBlue/maximizeA.xpm \ +- themes/NanoBlue/maximizeI.xpm \ +- themes/NanoBlue/maximizeO.xpm \ +- themes/NanoBlue/menuButtonA.xpm \ +- themes/NanoBlue/menuButtonI.xpm \ +- themes/NanoBlue/menuButtonO.xpm \ +- themes/NanoBlue/menusel.xpm \ +- themes/NanoBlue/menusep.xpm \ +- themes/NanoBlue/minimizeA.xpm \ +- themes/NanoBlue/minimizeI.xpm \ +- themes/NanoBlue/minimizeO.xpm \ +- themes/NanoBlue/restoreA.xpm \ +- themes/NanoBlue/restoreI.xpm \ +- themes/NanoBlue/restoreO.xpm \ +- themes/NanoBlue/titleAB.xpm \ +- themes/NanoBlue/titleAL.xpm \ +- themes/NanoBlue/titleAM.xpm \ +- themes/NanoBlue/titleAP.xpm \ +- themes/NanoBlue/titleAR.xpm \ +- themes/NanoBlue/titleAS.xpm \ +- themes/NanoBlue/titleAT.xpm \ +- themes/NanoBlue/titleIB.xpm \ +- themes/NanoBlue/titleIL.xpm \ +- themes/NanoBlue/titleIM.xpm \ +- themes/NanoBlue/titleIP.xpm \ +- themes/NanoBlue/titleIR.xpm \ +- themes/NanoBlue/titleIS.xpm \ +- themes/NanoBlue/titleIT.xpm \ +- themes/NanoBlue/taskbar/desktop.xpm \ +- themes/NanoBlue/taskbar/icewm.xpm \ +- themes/NanoBlue/taskbar/taskbarbg.xpm \ +- themes/NanoBlue/taskbar/taskbuttonactive.xpm \ +- themes/NanoBlue/taskbar/taskbuttonbg.xpm \ +- themes/NanoBlue/taskbar/taskbuttonminimized.xpm \ +- themes/NanoBlue/taskbar/toolbuttonbg.xpm \ +- themes/NanoBlue/taskbar/windows.xpm \ +- themes/NanoBlue/taskbar/workspacebuttonactive.xpm \ +- themes/NanoBlue/taskbar/workspacebuttonbg.xpm \ +- themes/NanoBlue/icons/IceWM_16x16.xpm \ +- themes/NanoBlue/icons/IceWM_32x32.xpm \ +- themes/NanoBlue/icons/app_16x16.xpm \ +- themes/NanoBlue/icons/app_32x32.xpm \ +- themes/NanoBlue/icons/firefox_16x16.xpm \ +- themes/NanoBlue/icons/firefox_32x32.xpm \ +- themes/NanoBlue/icons/folder_16x16.xpm \ +- themes/NanoBlue/icons/folder_32x32.xpm \ +- themes/NanoBlue/icons/gimp_16x16.xpm \ +- themes/NanoBlue/icons/gimp_32x32.xpm \ +- themes/NanoBlue/icons/mplayer_16x16.xpm \ +- themes/NanoBlue/icons/mplayer_32x32.xpm \ +- themes/NanoBlue/icons/thunderbird_16x16.xpm \ +- themes/NanoBlue/icons/thunderbird_32x32.xpm \ +- themes/NanoBlue/icons/xterm_16x16.xpm \ +- themes/NanoBlue/icons/xterm_32x32.xpm \ +- themes/NanoBlue/ledclock/a.xpm \ +- themes/NanoBlue/ledclock/colon.xpm \ +- themes/NanoBlue/ledclock/dot.xpm \ +- themes/NanoBlue/ledclock/m.xpm \ +- themes/NanoBlue/ledclock/n0.xpm \ +- themes/NanoBlue/ledclock/n1.xpm \ +- themes/NanoBlue/ledclock/n2.xpm \ +- themes/NanoBlue/ledclock/n3.xpm \ +- themes/NanoBlue/ledclock/n4.xpm \ +- themes/NanoBlue/ledclock/n5.xpm \ +- themes/NanoBlue/ledclock/n6.xpm \ +- themes/NanoBlue/ledclock/n7.xpm \ +- themes/NanoBlue/ledclock/n8.xpm \ +- themes/NanoBlue/ledclock/n9.xpm \ +- themes/NanoBlue/ledclock/p.xpm \ +- themes/NanoBlue/ledclock/slash.xpm \ +- themes/NanoBlue/ledclock/space.xpm \ +- themes/NanoBlue/taskbar/collapse.xpm \ +- themes/NanoBlue/taskbar/expand.xpm \ +- themes/NanoBlue/default.theme ++ themes/Helix/default.theme +--- a/lib/Makefile.in 2024-06-16 14:30:54.000000000 +0200 ++++ b/lib/Makefile.in 2025-01-27 02:35:23.761534355 +0100 +@@ -388,18 +388,6 @@ + icons/bomb_16x16.xpm \ + icons/bomb_32x32.xpm \ + icons/cancel-logout_16x16.xpm \ +- icons/communicator-abook_16x16.xpm \ +- icons/communicator-abook_32x32.xpm \ +- icons/communicator-browser_16x16.xpm \ +- icons/communicator-browser_32x32.xpm \ +- icons/communicator-composer_16x16.xpm \ +- icons/communicator-composer_32x32.xpm \ +- icons/communicator-discussion_16x16.xpm \ +- icons/communicator-discussion_32x32.xpm \ +- icons/communicator-mail_16x16.xpm \ +- icons/communicator-mail_32x32.xpm \ +- icons/emacs_16x16.xpm \ +- icons/emacs_32x32.xpm \ + icons/file_16x16.xpm \ + icons/file_32x32.xpm \ + icons/focus_16x16.xpm \ +@@ -412,16 +400,12 @@ + icons/fte_32x32.xpm \ + icons/gimp_16x16.xpm \ + icons/gimp_32x32.xpm \ +- icons/gnome_16x16.xpm \ + icons/help_16x16.xpm \ + icons/help_32x32.xpm \ + icons/hibernate_16x16.xpm \ + icons/hibernate_32x32.xpm \ + icons/icewm_16x16.png \ + icons/icewm_32x32.png \ +- icons/java_16x16.xpm \ +- icons/java_32x32.xpm \ +- icons/kde_16x16.xpm \ + icons/key_16x16.png \ + icons/key_32x32.png \ + icons/koules_16x16.xpm \ +@@ -431,12 +415,6 @@ + icons/lock_48x48.xpm \ + icons/logout_16x16.xpm \ + icons/logout_32x32.xpm \ +- icons/navigator_16x16.xpm \ +- icons/navigator_32x32.xpm \ +- icons/netscape_16x16.xpm \ +- icons/netscape_32x32.xpm \ +- icons/pdf_16x16.xpm \ +- icons/pdf_32x32.xpm \ + icons/pref_16x16.png \ + icons/pref_32x32.png \ + icons/programs_16x16.xpm \ +@@ -509,7 +487,6 @@ + mailbox/nomail.xpm \ + mailbox/unreadmail.xpm \ + taskbar/collapse.xpm \ +- taskbar/debian.xpm \ + taskbar/desktop.xpm \ + taskbar/expand.xpm \ + taskbar/icewm.xpm \ +@@ -816,120 +793,7 @@ + themes/Helix/titleIP.xpm \ + themes/Helix/titleIS.xpm \ + themes/Helix/titleIT.xpm \ +- themes/Helix/default.theme \ +- themes/NanoBlue/closeA.xpm \ +- themes/NanoBlue/closeI.xpm \ +- themes/NanoBlue/closeO.xpm \ +- themes/NanoBlue/dframeAB.xpm \ +- themes/NanoBlue/dframeABL.xpm \ +- themes/NanoBlue/dframeABR.xpm \ +- themes/NanoBlue/dframeAL.xpm \ +- themes/NanoBlue/dframeAR.xpm \ +- themes/NanoBlue/dframeAT.xpm \ +- themes/NanoBlue/dframeATL.xpm \ +- themes/NanoBlue/dframeATR.xpm \ +- themes/NanoBlue/dframeIB.xpm \ +- themes/NanoBlue/dframeIBL.xpm \ +- themes/NanoBlue/dframeIBR.xpm \ +- themes/NanoBlue/dframeIL.xpm \ +- themes/NanoBlue/dframeIR.xpm \ +- themes/NanoBlue/dframeIT.xpm \ +- themes/NanoBlue/dframeITL.xpm \ +- themes/NanoBlue/dframeITR.xpm \ +- themes/NanoBlue/eos.jpg \ +- themes/NanoBlue/expandA.xpm \ +- themes/NanoBlue/expandI.xpm \ +- themes/NanoBlue/expandO.xpm \ +- themes/NanoBlue/frameAB.xpm \ +- themes/NanoBlue/frameABL.xpm \ +- themes/NanoBlue/frameABR.xpm \ +- themes/NanoBlue/frameAL.xpm \ +- themes/NanoBlue/frameAR.xpm \ +- themes/NanoBlue/frameAT.xpm \ +- themes/NanoBlue/frameATL.xpm \ +- themes/NanoBlue/frameATR.xpm \ +- themes/NanoBlue/frameIB.xpm \ +- themes/NanoBlue/frameIBL.xpm \ +- themes/NanoBlue/frameIBR.xpm \ +- themes/NanoBlue/frameIL.xpm \ +- themes/NanoBlue/frameIR.xpm \ +- themes/NanoBlue/frameIT.xpm \ +- themes/NanoBlue/frameITL.xpm \ +- themes/NanoBlue/frameITR.xpm \ +- themes/NanoBlue/maximizeA.xpm \ +- themes/NanoBlue/maximizeI.xpm \ +- themes/NanoBlue/maximizeO.xpm \ +- themes/NanoBlue/menuButtonA.xpm \ +- themes/NanoBlue/menuButtonI.xpm \ +- themes/NanoBlue/menuButtonO.xpm \ +- themes/NanoBlue/menusel.xpm \ +- themes/NanoBlue/menusep.xpm \ +- themes/NanoBlue/minimizeA.xpm \ +- themes/NanoBlue/minimizeI.xpm \ +- themes/NanoBlue/minimizeO.xpm \ +- themes/NanoBlue/restoreA.xpm \ +- themes/NanoBlue/restoreI.xpm \ +- themes/NanoBlue/restoreO.xpm \ +- themes/NanoBlue/titleAB.xpm \ +- themes/NanoBlue/titleAL.xpm \ +- themes/NanoBlue/titleAM.xpm \ +- themes/NanoBlue/titleAP.xpm \ +- themes/NanoBlue/titleAR.xpm \ +- themes/NanoBlue/titleAS.xpm \ +- themes/NanoBlue/titleAT.xpm \ +- themes/NanoBlue/titleIB.xpm \ +- themes/NanoBlue/titleIL.xpm \ +- themes/NanoBlue/titleIM.xpm \ +- themes/NanoBlue/titleIP.xpm \ +- themes/NanoBlue/titleIR.xpm \ +- themes/NanoBlue/titleIS.xpm \ +- themes/NanoBlue/titleIT.xpm \ +- themes/NanoBlue/taskbar/desktop.xpm \ +- themes/NanoBlue/taskbar/icewm.xpm \ +- themes/NanoBlue/taskbar/taskbarbg.xpm \ +- themes/NanoBlue/taskbar/taskbuttonactive.xpm \ +- themes/NanoBlue/taskbar/taskbuttonbg.xpm \ +- themes/NanoBlue/taskbar/taskbuttonminimized.xpm \ +- themes/NanoBlue/taskbar/toolbuttonbg.xpm \ +- themes/NanoBlue/taskbar/windows.xpm \ +- themes/NanoBlue/taskbar/workspacebuttonactive.xpm \ +- themes/NanoBlue/taskbar/workspacebuttonbg.xpm \ +- themes/NanoBlue/icons/IceWM_16x16.xpm \ +- themes/NanoBlue/icons/IceWM_32x32.xpm \ +- themes/NanoBlue/icons/app_16x16.xpm \ +- themes/NanoBlue/icons/app_32x32.xpm \ +- themes/NanoBlue/icons/firefox_16x16.xpm \ +- themes/NanoBlue/icons/firefox_32x32.xpm \ +- themes/NanoBlue/icons/folder_16x16.xpm \ +- themes/NanoBlue/icons/folder_32x32.xpm \ +- themes/NanoBlue/icons/gimp_16x16.xpm \ +- themes/NanoBlue/icons/gimp_32x32.xpm \ +- themes/NanoBlue/icons/mplayer_16x16.xpm \ +- themes/NanoBlue/icons/mplayer_32x32.xpm \ +- themes/NanoBlue/icons/thunderbird_16x16.xpm \ +- themes/NanoBlue/icons/thunderbird_32x32.xpm \ +- themes/NanoBlue/icons/xterm_16x16.xpm \ +- themes/NanoBlue/icons/xterm_32x32.xpm \ +- themes/NanoBlue/ledclock/a.xpm \ +- themes/NanoBlue/ledclock/colon.xpm \ +- themes/NanoBlue/ledclock/dot.xpm \ +- themes/NanoBlue/ledclock/m.xpm \ +- themes/NanoBlue/ledclock/n0.xpm \ +- themes/NanoBlue/ledclock/n1.xpm \ +- themes/NanoBlue/ledclock/n2.xpm \ +- themes/NanoBlue/ledclock/n3.xpm \ +- themes/NanoBlue/ledclock/n4.xpm \ +- themes/NanoBlue/ledclock/n5.xpm \ +- themes/NanoBlue/ledclock/n6.xpm \ +- themes/NanoBlue/ledclock/n7.xpm \ +- themes/NanoBlue/ledclock/n8.xpm \ +- themes/NanoBlue/ledclock/n9.xpm \ +- themes/NanoBlue/ledclock/p.xpm \ +- themes/NanoBlue/ledclock/slash.xpm \ +- themes/NanoBlue/ledclock/space.xpm \ +- themes/NanoBlue/taskbar/collapse.xpm \ +- themes/NanoBlue/taskbar/expand.xpm \ +- themes/NanoBlue/default.theme ++ themes/Helix/default.theme + + all: all-am + +--- a/lib/menu.in 2024-06-16 14:30:54.000000000 +0200 ++++ b/lib/menu.in 2025-01-27 01:52:35.583957913 +0100 +@@ -7,7 +7,6 @@ + prog urxvt xterm urxvt -bg black -cr green -fg white -C -sl 500 + prog gedit fte gedit + prog NEdit nedit nedit +-prog Firefox firefox firefox + prog Hexchat xchat hexchat + prog Gimp gimp gimp + includeprog icewm-menu-fdo --sep-before --no-sep-others +--- a/lib/keys.in 2024-06-16 14:30:54.000000000 +0200 ++++ b/lib/keys.in 2025-01-27 02:05:36.580742905 +0100 +@@ -10,7 +10,6 @@ + # + key "Alt+Ctrl+t" @XTERMCMD@ + key "Alt+Ctrl+b" xdg-open about:blank +-key "Alt+Ctrl+s" xdg-open https://www.google.com + + key "Super+KP_Subtract" amixer sset Master 5%- + key "Super+KP_Add" amixer sset Master 5%+ +@@ -18,17 +17,13 @@ + # "Multimedia key" bindings for Xorg. Gather the keycodes of your + # advanced function keys by watching the output of the xev command + # whilst pressing those keys and map those symbols using xmodmap. +-# Note that some of these may interfere with other listeners, +-# like systemd for the suspend key events. ++# Note that some of these may interfere with other listeners. + # +-# key "XF86Standby" /bin/sh -c "{ test -e /run/systemd/system && systemctl suspend; } ||:" +-# key "XF86Sleep" /bin/sh -c "{ test -e /run/systemd/system && systemctl suspend; } ||:" + key "XF86AudioLowerVolume" amixer sset Master 5%- + key "XF86AudioRaiseVolume" amixer sset Master 5%+ + key "XF86AudioMute" amixer sset Master toggle + key "XF86HomePage" xdg-open about:blank +-key "XF86Search" xdg-open https://www.google.com + key "XF86Eject" eject +-key "XF86Calculator" /bin/sh -c "gnome-calculator || xcalc || ( type bc >/dev/null 2>&1 && @XTERMCMD@ -e bc -l)" ++key "XF86Calculator" /bin/sh -c "galculator || xcalc || ( type bc >/dev/null 2>&1 && @XTERMCMD@ -e bc -l)" + + switchkey "Super+p" icewm-menu-xrandr +--- a/src/default.h 2024-06-16 14:30:54.000000000 +0200 ++++ b/src/default.h 2025-01-27 02:08:29.238272838 +0100 +@@ -189,10 +189,10 @@ + XSV(const char *, logoutCommand, 0) + XSV(const char *, logoutCancelCommand, 0) + #if __linux__ +-XSV(const char *, shutdownCommand, "test -e /run/systemd/system && systemctl poweroff || loginctl poweroff") +-XSV(const char *, rebootCommand, "test -e /run/systemd/system && systemctl reboot || loginctl reboot") +-XSV(const char *, suspendCommand, "test -e /run/systemd/system && systemctl suspend || loginctl suspend") +-XSV(const char *, hibernateCommand, "test -e /run/systemd/system && systemctl hibernate || loginctl hibernate") ++XSV(const char *, shutdownCommand, "poweroff") ++XSV(const char *, rebootCommand, "reboot") ++XSV(const char *, suspendCommand, "zzz") ++XSV(const char *, hibernateCommand, "zzz") + #elif __OpenBSD__ || __NetBSD__ || __FreeBSD__ + XSV(const char *, shutdownCommand, "shutdown -p now") + XSV(const char *, rebootCommand, "shutdown -r now") +--- a/man/icesh.pod 2024-06-16 14:30:54.000000000 +0200 ++++ b/man/icesh.pod 2025-01-27 01:56:49.906167383 +0100 +@@ -971,11 +971,6 @@ + + icesh -W "Top" setWorkspace "this" + +-Restore all hidden clients, minimize all clients on the current +-workspace and activate Firefox. +- +- icesh -N HIDDEN restore -a -W "this" minimize -a -c Firefox activate +- + Resize the focused window to occupy the right half of the desktop area. + + icesh -f sizeto 49% 100% top right raise +--- a/man/icewm-keys.pod 2024-06-16 14:30:54.000000000 +0200 ++++ b/man/icewm-keys.pod 2025-01-27 02:00:33.738111948 +0100 +@@ -101,7 +101,6 @@ + # + key "Alt+Ctrl+t" xterm + key "Alt+Ctrl+b" xdg-open about:blank +- key "Alt+Ctrl+s" xdg-open https://www.google.com + + key "Super+KP_Subtract" amixer sset PCM 5%- + key "Super+KP_Add" amixer sset PCM 5%+ +@@ -115,7 +114,6 @@ + key "XF86AudioRaiseVolume" amixer sset PCM 5%+ + key "XF86AudioMute" amixer sset PCM 0% + key "XF86HomePage" xdg-open about:blank +- key "XF86Search" xdg-open https://www.google.com + key "XF86Eject" eject + + # display and select monitor setup configurations +--- a/man/icewm-preferences.pod 2024-06-16 14:30:54.000000000 +0200 ++++ b/man/icewm-preferences.pod 2025-01-27 02:04:23.150104967 +0100 +@@ -1036,19 +1036,19 @@ + + Command to cancel logout. + +-=item B="/bin/sh -c "{ test -e /run/systemd/system && systemctl poweroff || loginctl poweroff; }"" ++=item B="poweroff" + + Command to shutdown the system. + +-=item B="/bin/sh -c "{ test -e /run/systemd/system && systemctl reboot || loginctl reboot; }"" ++=item B="reboot" + + Command to reboot the system. + +-=item B="test -e /run/systemd/system && systemctl suspend || loginctl suspend" ++=item B="zzz" + + Command to send the system to standby mode + +-=item B="test -e /run/systemd/system && systemctl hibernate || loginctl hibernate" ++=item B="zzz" + + Command to hibernate the system. + +--- a/man/icewm-toolbar.pod 2024-06-16 14:30:54.000000000 +0200 ++++ b/man/icewm-toolbar.pod 2025-01-27 01:59:09.777382539 +0100 +@@ -23,11 +23,7 @@ + may be a double quoted string. Then follows the bare name of the icon + to use without extensions. This icon will be shown in the toolbar. The + last component is a shell command line that will be executed whenever +-the user presses the icon in the toolbar. For example, the following +-line in toolbar will create a button with tool tip C +-with the F icon which launches L when clicked: +- +- prog "Mozilla Firefox" firefox /usr/bin/firefox --private-window ++the user presses the icon in the toolbar. + + =head2 FORMAT + +@@ -78,7 +74,6 @@ + L panel: + + prog "File Manager" file-manager.png pcmanfm +- prog "Web Browser" web-browser.png /usr/lib/firefox/firefox + prog "Terminal" terminal.png roxterm + prog "Graphical Editor" text-editor.png gvim -f + prog "Calculator" accessories-calculator.png calculator +--- a/man/icewm-winoptions.pod 2024-06-16 14:30:54.000000000 +0200 ++++ b/man/icewm-winoptions.pod 2025-01-27 01:59:59.697816223 +0100 +@@ -215,19 +215,6 @@ + + =head2 EXAMPLES + +-This example uses the WM_WINDOW_ROLE property value C to deny +-input focus to I pop-ups and asks to close them immediately. +- +- google-chrome.pop-up.doNotFocus: 1 +- google-chrome.pop-up.forcedClose: 1 +- google-chrome.pop-up.ignorePagerPreview: 1 +- google-chrome.pop-up.ignoreUrgentHint: 1 +- google-chrome.pop-up.layer: Below +- google-chrome.pop-up.noFocusOnAppRaise: 1 +- google-chrome.pop-up.noFocusOnMap: 1 +- google-chrome.pop-up.startClose: 1 +- google-chrome.pop-up.startMinimized: 1 +- + IceWM places dockapps in a container automatically, but for those + that fail to comply with the protocol it can also be emulated. + An emulated dockapp should appear on all workspaces, have +--- a/man/icewm.pod 2024-06-16 14:30:54.000000000 +0200 ++++ b/man/icewm.pod 2025-01-27 01:58:30.337039893 +0100 +@@ -248,8 +248,7 @@ + The workspaces are defined in the F file. To change a name + for only this session, double-click, edit the name and hit Enter. + When C is turned on, a small graphical window summary +-for each workspace is shown. They support drag-and-drop: dragging a +-Firefox tab to a workspace button changes the current workspace. ++for each workspace is shown. They support drag-and-drop. + Then releasing it moves that tab to a new window in that workspace. + + The I consists of a list of wide buttons for each application +@@ -476,10 +475,6 @@ + + key "Alt+u" icesh -f untab + +-To open all chrome windows in the same frame add this to C: +- +- google-chrome.frame: chrome +- + =head2 WORKSPACES + + B supports multiple virtual desktops called workspaces. A +@@ -1404,11 +1399,7 @@ + may be a double quoted string. Then follows the bare name of the icon + to use without extensions. This icon will be shown in the toolbar. The + last component is a shell command-line that will be executed whenever +-the user presses the icon in the toolbar. For example, the following +-line in toolbar will create a button with tool tip C +-with the F icon that launches L when clicked: +- +- prog "Mozilla Firefox" firefox /usr/bin/firefox --private-window ++the user presses the icon in the toolbar. + + See L. + diff --git a/icon-naming-utils/PKGBUILD b/icon-naming-utils/PKGBUILD new file mode 100644 index 0000000..9499476 --- /dev/null +++ b/icon-naming-utils/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=icon-naming-utils +pkgver=0.8.90 +pkgrel=1 +pkgdesc="Maps the new names of icons to their legacy counterparts" +arch=('any') +license=('GPL-2') +depends=('perl-xml-simple') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig} + "remove-legacy-calc.patch") +sha512sums=('6c23f6138e053f9fc6de9d56f94b80849f29f9fde46cdf54b705720cb48b0c660f315484fb36fb9936d4ceade7768aad2d17280545a4b392aa56185c9452999d' + 'SKIP' + 'a29df0d7acbbb72c46adaf857ae054b10c4422562e3ba1b626368a6be2be244e80eef65deede392164ef296af7c08a08753f6d3c5e33a5d35acc4586b67cc080') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + patch -Np1 -i "$srcdir/remove-legacy-calc.patch" +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + mkdir -p "$pkgdir/usr/lib/" + mv "$pkgdir/usr/share/pkgconfig" "$pkgdir/usr/lib/pkgconfig" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/icon-naming-utils/remove-legacy-calc.patch b/icon-naming-utils/remove-legacy-calc.patch new file mode 100644 index 0000000..1d1cc70 --- /dev/null +++ b/icon-naming-utils/remove-legacy-calc.patch @@ -0,0 +1,15 @@ +diff -Nur icon-naming-utils-0.8.90.orig/legacy-icon-mapping.xml icon-naming-utils-0.8.90/legacy-icon-mapping.xml +--- icon-naming-utils-0.8.90.orig/legacy-icon-mapping.xml 2011-06-06 12:18:27.059555925 +0000 ++++ icon-naming-utils-0.8.90/legacy-icon-mapping.xml 2011-06-06 12:18:47.709737921 +0000 +@@ -427,11 +427,6 @@ + + + +- +- gnome-calculator +- kcalc +- calc +- + + gnome-character-map + gucharmap \ No newline at end of file diff --git a/icoutils/PKGBUILD b/icoutils/PKGBUILD new file mode 100644 index 0000000..61efccd --- /dev/null +++ b/icoutils/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=icoutils +pkgver=0.32.3 +_debver=0.32.3 +_debrel=3 +pkgrel=1 +pkgdesc='Extracts and converts images in MS Windows(R) icon and cursor files.' +arch=('i686' 'x86_64') +license=('GPL-3') +url='https://www.nongnu.org/icoutils/' +depends=('libpng>=1.0.0' 'perl-libwww>=5.64') +makedepends=('quilt') +source=("https://savannah.nongnu.org/download/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/i/icoutils/icoutils_$_debver-$_debrel.debian.tar.xz") +sha512sums=('982a051a5dc4a63bb2a9f23e78e5a88e481e5c7a9c25789253e1c396e40d4c093e5a9b399966d660e4f2da21ce15d539cb9d20bfd8126b1138f148b86baa6726' + 'c17cafabfc281a4698e27ea58cbcc4e0de06ebf72b87fc6d474b279dbca11bf24eaef8a40095ada60dffc46372b05164be37a2145b6651551201a0ce3133543b') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/id3/PKGBUILD b/id3/PKGBUILD new file mode 100644 index 0000000..a9442c0 --- /dev/null +++ b/id3/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=id3 +pkgver=1.1.2 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Utility to edit id3-tags" +arch=('i686' 'x86_64') +url='https://devel.ringlet.net/audio/id3/' +license=('GPL-2') +depends=('gcc-libs') +makedepends=('quilt') +options=('!makeflags') +source=("https://deb.debian.org/debian/pool/main/i/id3/id3_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/i/id3/id3_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('39a96bcac200680d59d78496d0e40699f73ad890b1077d2e33732492a2b5d2a8bc3ee24eae8740c6915cd28409fa3ba8e154811e473c72b121c4e9e7a9fb27d3' + 'e75d436b37c22b4e0196b7d3e493de6542d7e6d12cba1b6977c838ae58a8e09fa484eb055784eaf52acaaa7e3e103fa7b1094b2d17198e9283c7dea093603b29') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make prefix="${pkgdir}/usr" mandir="${pkgdir}/usr/share/man" install + + # install license + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/id3lib/PKGBUILD b/id3lib/PKGBUILD new file mode 100644 index 0000000..c7ad148 --- /dev/null +++ b/id3lib/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=id3lib +pkgver=3.8.3 +_debver=3.8.3 +_debrel=16.3 +pkgrel=17 +pkgdesc='Library for reading, writing, and manipulating ID3v1 and ID3v2 tags' +arch=('i686' 'x86_64') +license=('LGPL-2') +url="http://id3lib.sourceforge.net/" +depends=('zlib' 'gcc-libs') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/i/id3lib3.8.3/id3lib3.8.3_$_debver-$_debrel.debian.tar.xz) +sha512sums=('3787e261f86933c1c2f2bff2c4b349b42f5d8636e489e4f39f9d75e6dfbdc79b87009a0f4ce4b786f2fb3dbc01ca9d56c4112095b46244f897e6c9a28573adaf' + '7315b49881b40050d1c1c4a9a277270325ba0dbb82b230f82eebbceb1f10c25b8db0f3687014b3a0db18f69b0ed6bcb47e077793b0cafe0842c3b664d6baad45') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + libtoolize -fc + aclocal + autoconf + automake --add-missing --copy +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix=/usr + make +} + +check() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make check +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + # fixing man-pages + install -d "${pkgdir}"/usr/share/man/man1 + cp doc/man/* "${pkgdir}"/usr/share/man/man1 + + # fixing license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/id3v2/PKGBUILD b/id3v2/PKGBUILD new file mode 100644 index 0000000..90f5e2c --- /dev/null +++ b/id3v2/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=id3v2 +pkgver=0.1.12 +_debver=$pkgver +_debrel=7 +pkgrel=1 +pkgdesc="Utility to edit id3v2 tags" +arch=('i686' 'x86_64') +url='http://id3v2.sourceforge.net/' +license=('LGPL-2.1') +depends=('gcc-libs' 'glibc' 'id3lib' 'zlib') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/i/id3v2/id3v2_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('f9c74ab6ffbb50ab7ae7af64dcde78a0766bcbf71308d4c9fb480543b5790e2690ae096d6a2ecaffb01b7497a18841b5235500177cf5eaa8e668cf443abc726a' + '39d2bf0bb71e02b6b176c495965c38fe828447e40196d60331dcfe85830d8dc131472a0a1da108953e0bed9eab1c42c87bc217cedda324634525ab89d3e57c80') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + make clean + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + install -d -m755 "${pkgdir}"/usr/{bin,share/man/man1} + make PREFIX="${pkgdir}/usr" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/idesk/PKGBUILD b/idesk/PKGBUILD new file mode 100644 index 0000000..0fb46ae --- /dev/null +++ b/idesk/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=idesk +pkgver=0.7.5 +pkgrel=1 +pkgdesc="Free and libre program to show icons on the desktop" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/idesk/' +license=('GPL-2' 'Modified-BSD') +depends=('pkgconfig' 'imlib2' 'libpng' 'libxpm' 'libxft' 'gcc-libs') +source=("https://downloads.sourceforge.net/sourceforge/idesk/$pkgname-$pkgver.tar.bz2" + "imlib2-config.patch") +sha512sums=('42c15cecc6e2cf6546420542fc4480902fd33c26c19ffc32e65eb04d09116d3b80f5539cde4ca86d4bec30ce96417752bfe7416ec83c531235d9064d06ec0475' + '2397d451861d9b1c61bceba3b5c23a649d83115b25c46ff88fe4c45166c4334c33a6d59a5adc7ea27395de6f0052aa3dc140ecd9b6374d8d551d278f3a48b6b9') + +prepare() { + cd $pkgname-$pkgver + sed -i \ + -e '1,1i#include ' \ + -e '1,1i#include ' \ + -e '1,1i#include ' \ + src/DesktopConfig.cpp + sed -i 's/return iconConfigList\[++iterCtr\];/return ++iterCtr < iconConfigList.size() ? iconConfigList\[iterCtr\] : NULL;/' src/AbstractClasses.h + sed -i 's#usr/local#usr#' examples/default.lnk + patch -Np2 -b -z .orig <../imlib2-config.patch + autoreconf -fiv + sed -i \ + -e 's#IMLIB2_LIBS=.*#IMLIB2_LIBS=-lImlib2#g' \ + -e 's#IMLIB_LIBS=.*#IMLIB_LIBS="-L/usr/lib -Wl,-O1,--sort-common,--as-needed,-z,relro -ljpeg -ltiff -lgif -lpng -lz -lm -lXext -lXext -lX11 -lImlib2"#g' \ + configure +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/idesk/imlib2-config.patch b/idesk/imlib2-config.patch new file mode 100644 index 0000000..a32a8f9 --- /dev/null +++ b/idesk/imlib2-config.patch @@ -0,0 +1,38 @@ +diff -up src/idesk-0.7.5/configure.in.orig src/idesk-0.7.5/configure.in +--- src/idesk-0.7.5/configure.in.orig 2005-09-11 01:14:04.000000000 -0600 ++++ src/idesk-0.7.5/configure.in 2021-12-19 00:06:11.240000000 -0700 +@@ -94,19 +94,22 @@ LIBS="$LIBS $Xext_lib" + + dnl Imlib2 detection + +-AC_PATH_GENERIC(imlib2, , [ +- AC_SUBST(IMLIB_LIBS) +- AC_SUBST(IMLIB_CXXFLAGS) ], +- AC_MSG_ERROR(Cannot find imlib2: Is imlib2-config in the path? +- You need Imlib2 to build Idesk. Verify that you have Imlib2-dev)) +- +-dnl the above doesn't work for some reason :/ +-IMLIB_LIBS=`imlib2-config --libs` +-IMLIB_CFLAGS=`imlib2-config --cflags` +-AC_SUBST(IMLIB_LIBS) +-AC_SUBST(IMLIB_CXXFLAGS) ++PKG_CHECK_MODULES([IMLIB],[imlib2]) + +-CXXFLAGS="$CXXFLAGS $IMLIB_CXXFLAGS" ++dnl AC_PATH_GENERIC(imlib2, , [ ++dnl AC_SUBST(IMLIB_LIBS) ++dnl AC_SUBST(IMLIB_CXXFLAGS) ], ++dnl AC_MSG_ERROR(Cannot find imlib2: Is imlib2-config in the path? ++dnl You need Imlib2 to build Idesk. Verify that you have Imlib2-dev)) ++dnl ++dnl dnl the above doesn't work for some reason :/ ++dnl IMLIB_LIBS=`imlib2-config --libs` ++dnl IMLIB_CFLAGS=`imlib2-config --cflags` ++dnl AC_SUBST(IMLIB_LIBS) ++dnl AC_SUBST(IMLIB_CXXFLAGS) ++dnl ++ ++CXXFLAGS="$CXXFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" + + diff --git a/iftop/PKGBUILD b/iftop/PKGBUILD new file mode 100644 index 0000000..f09e29c --- /dev/null +++ b/iftop/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=iftop +pkgver=1.0~pre4 +_realpkgver=1.0pre4 +_debver=$pkgver +_debrel=7 +pkgrel=2 +pkgdesc="Display bandwidth usage on an interface" +arch=('i686' 'x86_64') +url='http://www.ex-parrot.com/~pdw/iftop/' +license=('GPL-2') +depends=('libpcap' 'ncurses') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/i/iftop/iftop_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/i/iftop/iftop_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('abd74e8025bb82fef9ebab4997b1d018201a523d47c0128128ca37797490046538d74758dc4471735c22b890e5bd238ad6b2a30776d465138ede367cdd263d22' + '2c7b83faab10c59d20c50ae7be1976d7226eb66a4be1bf872da3765223f9a2cefc064663ba94625eba31eafed1c940e043be4ed9888e6e568effb1abce12371d') + +prepare() { + cd $pkgname-$_realpkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$_realpkgver + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$_realpkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ii/PKGBUILD b/ii/PKGBUILD new file mode 100644 index 0000000..0ac4a96 --- /dev/null +++ b/ii/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=ii +pkgver=2.0 +pkgrel=1 +pkgdesc="A minimalist FIFO and filesystem-based IRC client" +arch=('i686' 'x86_64') +url='https://tools.suckless.org/ii/' +license=('Expat') +source=("https://dl.suckless.org/tools/${pkgname}-${pkgver}.tar.gz") +sha512sums=('ab8102b5669495b7bc6a3311245f3eb49d2add1e387290e41deb51e121f4c7c98a09d117052c345d8b896149276a83790c0b78efe3ed19fc52bc00575bf8e44a') + +build() { + cd "$pkgname-$pkgver" + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" PREFIX="/usr" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ijs/PKGBUILD b/ijs/PKGBUILD new file mode 100644 index 0000000..90b77f6 --- /dev/null +++ b/ijs/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=ijs +pkgver=0.35 +_debver=$pkgver +_debrel=15 +pkgrel=4 +pkgdesc="A library which implements a protocol for transmission of raster page images" +arch=('i686' 'x86_64') +url='https://www.openprinting.org/download/ijs/' +license=('Expat' 'GPL-2') +depends=('glibc' 'sh') +makedepends=('ghostscript' 'quilt') +source=("https://www.openprinting.org/download/ijs/download/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/i/ijs/ijs_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('b5f8df6fe394efea4ee7059c1ca8d7eb91588f060642da12f6591f0f40d169883aa9f7a6976a00042c89dd370b30f36afc407c4e7515cbd68537505a63c9a293' + 'dca54da109d9c6b0deaddc60d8224f8626339be8c07ee14f6968ea763a79e44ab10a14bbd43ad43304a071f2396df927bc4f5b3bd7f0c08fe00f856733161cdb') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/020160121~0c176a9.patch || true + rm -v debian/patches/1002_use_db2pdf.patch || true + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --disable-static \ + --enable-shared \ + --mandir=/usr/share/man + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + + # install doc + install -Dm644 ijs_spec.pdf ${pkgdir}/usr/share/doc/$pkgname/ijs_spec.pdf + + # install license + install -Dm644 debian/copyright -t ${pkgdir}/usr/share/licenses/$pkgname +} diff --git a/imlib2/PKGBUILD b/imlib2/PKGBUILD new file mode 100644 index 0000000..b40b192 --- /dev/null +++ b/imlib2/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=imlib2 +pkgver=1.7.1 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Library that does image file loading and saving as well as rendering, manipulation, arbitrary polygon support" +url='https://sourceforge.net/projects/enlightenment/' +arch=('i686' 'x86_64') +license=('Imlib2') +depends=('libtiff' 'giflib' 'bzip2' 'freetype2' 'libxext' 'libpng' 'libid3tag' 'libjpeg-turbo') +source=(https://downloads.sourceforge.net/enlightenment/$pkgname-$pkgver.tar.bz2 + https://deb.debian.org/debian/pool/main/i/imlib2/imlib2_$_debver-$_debrel.debian.tar.xz) +sha512sums=('36e457855da0f129c7e7ba3dfcb44162b6624b1d56df5f84448495a96fe9ad1ce3e6c628222630be7274476722c4feaa8e1648d1e463439ca758e66ce9645970' + '0700a2a7cba25b3adaca975fb3b6e399f879b5bb4558334a52e0b443bafe003a2bd61c197b307edba6c03e33d8b1abd55b4245755b0d048e456296fba4448d13') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i 's/@my_libs@//' imlib2-config.in +} + +build() { + cd "${pkgname}-${pkgver}" + + [ $CARCH = "i686" ] && EXTRAOPTS="--enable-mmx" + [ $CARCH = "x86_64" ] && EXTRAOPTS="--enable-amd64" + + ./configure --prefix=/usr \ + --sysconfdir=/etc/imlib2 \ + --x-libraries=/usr/lib $EXTRAOPTS + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + # Install License + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/imv/PKGBUILD b/imv/PKGBUILD new file mode 100644 index 0000000..622db70 --- /dev/null +++ b/imv/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=imv +pkgver=4.3.0 +_debver=$pkgver +_debrel=1.1 +pkgrel=3 +pkgdesc="Free software image viewer for X11" +url='https://github.com/eXeC64/imv' +arch=('i686' 'x86_64') +license=('Expat') +depends=('glu' 'libinih' 'libnsgif' 'libxkbcommon' 'libxkbcommon-x11' 'pango' 'freeimage') +makedepends=('asciidoc' 'cmocka' 'meson' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/eXeC64/imv/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/i/imv/imv_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('1735c03c48888004b11b3aaf0215a9530c035468a8efdb210d856551ebb75030c906eee2b6ab80e5d3646206e6051a73a8c5e15c010dd09bca7f9e90f9b0e34b' + '7df76333ddbf1a8fedec86d8d38d00b59685813f0ad476c057e070bb08a9c9cd9652ffeda3389dae054ac7020fa1f85b3a186dc83cabd2a65b2edf19a3e4ca6f') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0002-Fix-segfault-with-latest-wlroots.patch || true + + quilt push -av + fi +} + +build() { + hyperbola-meson build $pkgname-$pkgver \ + -D windows="x11" \ + -D librsvg=disabled \ + -D libheif=disabled + ninja -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 "${srcdir}/$pkgname-$pkgver/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/indent/PKGBUILD b/indent/PKGBUILD new file mode 100644 index 0000000..8b596ef --- /dev/null +++ b/indent/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=indent +pkgver=2.2.12 +pkgrel=1 +pkgdesc="C language source code formatting program" +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/indent/' +license=('GPL-3') +depends=('glibc') +makedepends=('texi2html' 'gettext-tiny') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('dbe73bd3729074825f9f5b4241a4c539ad32069df56511963417caf0351ff9ec5edd77e9580338301c8abf89ab9c0592bc7e82c14eec7450c496259d7e9045dd') + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" docdir=/usr/share/doc/indent install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/iniparser/PKGBUILD b/iniparser/PKGBUILD new file mode 100644 index 0000000..80ab288 --- /dev/null +++ b/iniparser/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. +# Maintaner: Tobias Dausend + +pkgname=iniparser +pkgver=4.1 +pkgrel=1 +pkgdesc='A free stand-alone ini file parsing library written in portable ANSI C' +arch=('i686' 'x86_64') +url='http://ndevilla.free.fr/iniparser/' +license=('Expat') +depends=('glibc') +makedepends=('chrpath') +source=($pkgname-$pkgver.tar.gz::https://github.com/ndevilla/iniparser/archive/v$pkgver.tar.gz) +sha512sums=('a8125aaaead1f9dfde380fa1e45bae31ca2312be029f2c53b4072cb3b127d16578a95c7c0aee1e3dda5e7b8db7a865ba6dfe8a1d80eb673061b3babef744e968') + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + install -Dm644 src/iniparser.h "$pkgdir"/usr/include/iniparser.h + install -Dm644 src/dictionary.h "$pkgdir"/usr/include/dictionary.h + install -Dm644 libiniparser.a "$pkgdir"/usr/lib/libiniparser.a + install -Dm644 libiniparser.so.1 "$pkgdir"/usr/lib/libiniparser.so.1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname + ln -sf libiniparser.so.1 "$pkgdir"/usr/lib/libiniparser.so + chrpath -d "$pkgdir"/usr/lib/libiniparser.so +} diff --git a/inkscape-legacy/PKGBUILD b/inkscape-legacy/PKGBUILD new file mode 100644 index 0000000..a3e867c --- /dev/null +++ b/inkscape-legacy/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +_realpkgname=inkscape +pkgname=$_realpkgname-legacy +pkgver=0.92.4 +_debver=$pkgver +_debrel=3 +pkgrel=8 +pkgdesc="Professional vector graphics editor (legacy version)" +url='https://inkscape.org/' +license=('GPL-2' 'GPL-3' 'LGPL-2.1') +arch=('i686' 'x86_64') +conflicts=('inkscape') +provides=('inkscape') +depends=('gtk' 'gc' 'gsl' 'gtkmm' 'gtkspell3' 'graphicsmagick-imagemagick-compat' 'libxslt' + 'poppler-glib' 'popt' 'potrace' 'ttf-dejavu' 'tauthon' 'desktop-file-utils' 'hicolor-icon-theme' 'gdl') +makedepends=('boost' 'intltool' 'python' 'quilt') +optdepends=('tauthon-numpy: some extensions' + 'tauthon-lxml: some extensions and filters') +source=("https://media.inkscape.org/dl/resources/file/${_realpkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/i/inkscape/inkscape_${_debver}-${_debrel}.debian.tar.xz" + "no-const.patch" + "deny-clipboards-extension.patch") +sha512sums=('b9034605a79cd8aea808edf42e284819951ae1ea67778f0922f4c10224e94aca6c844acbc2294625773f0a7047d4e32ccdada876238a792a2c17db172c88e120' + 'db47ca8d28c29d18de6cec372297715bc16cc33fc6a75adf14a8b716d884fbe521726f98eb222e5749b3589d6dd5e0449eb88f377f60bce47cc874c8d4be2e12' + 'f6593e23f4e292e275eef131a6f69eb1fa4dd2f9a31a9e64d7a63565b0400c4720395d9081a0d930dcf9fe71ff58b878c4e0f0ccc33316618754890826f6f293' + 'b6f5484596b06d7cba475e3342886a224cf70a7726b7d24ac997a439dfdf64a4cd4ab969e706a48629fd5bb9ec7e3824ae70870f535328daeed14f1053ecbe81') + +prepare() { + cd "${srcdir}/${_realpkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + ./autogen.sh + patch -Np1 -i ${srcdir}/no-const.patch + patch -Np1 -i ${srcdir}/deny-clipboards-extension.patch + + sed -i 's|/usr/bin/python\>|/usr/bin/tauthon|g' cxxtest/*.py + sed -i 's|/usr/bin/env python\>|/usr/bin/env tauthon|g' share/*/{test/,}*.py + sed -i 's|"python" },|"tauthon" },|g' src/extension/implementation/script.cpp + sed -i 's|python -c|tauthon -c|g' configure share/extensions/uniconv*.py + sed -i 's|"python"|"tauthon"|g' src/main.cpp + + sed -i 's| abs(| std::fabs(|g' src/ui/tools/flood-tool.cpp +} + +build() { + cd "${srcdir}/${_realpkgname}-${pkgver}" + export FREETYPE_CONFIG="/usr/bin/pkg-config freetype2" + + ./configure \ + --prefix=/usr \ + --enable-lcms \ + --enable-poppler-cairo \ + --disable-strict-build \ + --disable-dependency-tracking \ + --enable-gtk3-experimental + make +} + +package() { + cd "${srcdir}/${_realpkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/inkscape-legacy/deny-clipboards-extension.patch b/inkscape-legacy/deny-clipboards-extension.patch new file mode 100644 index 0000000..64d5b0e --- /dev/null +++ b/inkscape-legacy/deny-clipboards-extension.patch @@ -0,0 +1,23 @@ +--- a/src/ui/clipboard.cpp 2019-01-15 05:29:27.000000000 +0100 ++++ b/src/ui/clipboard.cpp 2024-12-31 20:41:22.337917664 +0100 +@@ -1163,7 +1163,11 @@ + // FIXME: Temporary hack until we add support for memory output. + // Save to a temporary file, read it back and then set the clipboard contents + gchar *filename = g_build_filename( g_get_tmp_dir(), "inkscape-clipboard-export", NULL ); +- gsize len; gchar *data; ++ gchar *data; ++ gsize len; ++ ++ bool previous_gui = INKSCAPE.use_gui(); ++ INKSCAPE.use_gui(false); + + try { + if (out == outlist.end() && target == "image/png") +@@ -1204,6 +1208,7 @@ + } catch (...) { + } + ++ INKSCAPE.use_gui(previous_gui); + g_unlink(filename); // delete the temporary file + g_free(filename); + } diff --git a/inkscape-legacy/no-const.patch b/inkscape-legacy/no-const.patch new file mode 100644 index 0000000..c4e4fcb --- /dev/null +++ b/inkscape-legacy/no-const.patch @@ -0,0 +1,136 @@ +--- a/src/extension/internal/pdfinput/pdf-input.cpp 2019-01-15 05:29:27.000000000 +0100 ++++ b/src/extension/internal/pdfinput/pdf-input.cpp 2024-12-31 21:27:27.574557163 +0100 +@@ -689,12 +689,12 @@ + // + gchar const *poppler_datadir = g_getenv("POPPLER_DATADIR"); + if (poppler_datadir != NULL) { +- globalParams = new GlobalParams(poppler_datadir); ++ globalParams = _POPPLER_NEW_GLOBAL_PARAMS(poppler_datadir); + } else { +- globalParams = new GlobalParams(); ++ globalParams = _POPPLER_NEW_GLOBAL_PARAMS(); + } + #else +- globalParams = new GlobalParams(); ++ globalParams = _POPPLER_NEW_GLOBAL_PARAMS(); + #endif // ENABLE_OSX_APP_LOCATIONS + } + +--- a/src/extension/internal/pdfinput/pdf-parser.cpp 2019-01-15 05:29:27.000000000 +0100 ++++ b/src/extension/internal/pdfinput/pdf-parser.cpp 2024-12-31 21:30:17.185577782 +0100 +@@ -272,7 +272,7 @@ + ClipHistoryEntry *save(); + ClipHistoryEntry *restore(); + GBool hasSaves() { return saved != NULL; } +- void setClip(GfxPath *newClipPath, GfxClipType newClipType = clipNormal); ++ void setClip(_POPPLER_CONST_83 GfxPath *newClipPath, GfxClipType newClipType = clipNormal); + GfxPath *getClipPath() { return clipPath; } + GfxClipType getClipType() { return clipType; } + +@@ -426,7 +426,7 @@ + error(errInternal, -1, "Weird page contents"); + return; + } +- parser = new Parser(xref, new Lexer(xref, obj), gFalse); ++ parser = new _POPPLER_NEW_PARSER(xref, obj); + go(topLevel); + delete parser; + parser = NULL; +@@ -2210,7 +2210,11 @@ + } + if (printCommands) { + printf(" font: tag=%s name='%s' %g\n", ++#if POPPLER_CHECK_VERSION(21,11,0) ++ font->getTag().c_str(), ++#else + font->getTag()->getCString(), ++#endif + font->getName() ? font->getName()->getCString() : "???", + args[1].getNum()); + fflush(stdout); +@@ -2414,7 +2418,7 @@ + int wMode; + double riseX, riseY; + CharCode code; +- Unicode *u = NULL; ++ Unicode _POPPLER_CONST_82 *u = NULL; + double x, y, dx, dy, tdx, tdy; + double originX, originY, tOriginX, tOriginY; + double oldCTM[6], newCTM[6]; +@@ -3394,7 +3398,7 @@ + } + } + +-void ClipHistoryEntry::setClip(GfxPath *clipPathA, GfxClipType clipTypeA) { ++void ClipHistoryEntry::setClip(_POPPLER_CONST_83 GfxPath *clipPathA, GfxClipType clipTypeA) { + // Free previous clip path + if (clipPath) { + delete clipPath; +--- a/src/extension/internal/pdfinput/poppler-transition-api.h 2019-01-15 05:29:27.000000000 +0100 ++++ b/src/extension/internal/pdfinput/poppler-transition-api.h 2024-12-31 21:32:58.276547132 +0100 +@@ -3,6 +3,30 @@ + + #include + ++#if POPPLER_CHECK_VERSION(0, 83, 0) ++#define _POPPLER_CONST_83 const ++#else ++#define _POPPLER_CONST_83 ++#endif ++ ++#if POPPLER_CHECK_VERSION(0, 82, 0) ++#define _POPPLER_CONST_82 const ++#else ++#define _POPPLER_CONST_82 ++#endif ++ ++#if POPPLER_CHECK_VERSION(0, 76, 0) ++#define _POPPLER_NEW_PARSER(xref, obj) Parser(xref, obj, gFalse) ++#else ++#define _POPPLER_NEW_PARSER(xref, obj) Parser(xref, new Lexer(xref, obj), gFalse) ++#endif ++ ++#if POPPLER_CHECK_VERSION(0, 83, 0) ++#define _POPPLER_NEW_GLOBAL_PARAMS(args...) std::unique_ptr(new GlobalParams(args)) ++#else ++#define _POPPLER_NEW_GLOBAL_PARAMS(args...) new GlobalParams(args) ++#endif ++ + #if POPPLER_CHECK_VERSION(0, 72, 0) + #define getCString c_str + #endif +--- a/src/extension/internal/pdfinput/svg-builder.cpp 2019-01-15 05:29:27.000000000 +0100 ++++ b/src/extension/internal/pdfinput/svg-builder.cpp 2024-12-31 21:34:24.487065888 +0100 +@@ -264,10 +264,10 @@ + /** + * \brief Generates a SVG path string from poppler's data structure + */ +-static gchar *svgInterpretPath(GfxPath *path) { ++static gchar *svgInterpretPath(_POPPLER_CONST_83 GfxPath *path) { + Inkscape::SVG::PathString pathString; + for (int i = 0 ; i < path->getNumSubpaths() ; ++i ) { +- GfxSubpath *subpath = path->getSubpath(i); ++ _POPPLER_CONST_83 GfxSubpath *subpath = path->getSubpath(i); + if (subpath->getNumPoints() > 0) { + pathString.moveTo(subpath->getX(0), subpath->getY(0)); + int j = 1; +@@ -1379,7 +1379,7 @@ + void SvgBuilder::addChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, +- CharCode /*code*/, int /*nBytes*/, Unicode *u, int uLen) { ++ CharCode /*code*/, int /*nBytes*/, Unicode const *u, int uLen) { + + + bool is_space = ( uLen == 1 && u[0] == 32 ); +--- a/src/extension/internal/pdfinput/svg-builder.h 2019-01-15 05:29:27.000000000 +0100 ++++ b/src/extension/internal/pdfinput/svg-builder.h 2024-12-31 21:34:45.897194723 +0100 +@@ -141,7 +141,7 @@ + void addChar(GfxState *state, double x, double y, + double dx, double dy, + double originX, double originY, +- CharCode code, int nBytes, Unicode *u, int uLen); ++ CharCode code, int nBytes, Unicode const *u, int uLen); + void beginTextObject(GfxState *state); + void endTextObject(GfxState *state); + diff --git a/innoextract/PKGBUILD b/innoextract/PKGBUILD new file mode 100644 index 0000000..daa03d0 --- /dev/null +++ b/innoextract/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=innoextract +pkgver=1.8 +_debver=1.8 +_debrel=1.2 +pkgrel=1 +pkgdesc="A tool to extract installers created by Inno Setup" +url='https://constexpr.org/innoextract/' +arch=('i686' 'x86_64') +license=('zlib') +depends=('boost-libs' 'xz') +makedepends=('boost' 'cmake' 'quilt') +source=("https://constexpr.org/innoextract/files/$pkgname-$pkgver.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/i/innoextract/innoextract_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('2c68009333f02a8a677c084e9c95c835d84a73e60c9b0c70fee5f23fd9a7a640cf2aa7e0476c55579774ac7079498fa24668f9388493bbc13415ff5a5b06ac9c' + 'SKIP' + 'b17c990948d8722da37386cae467372fadc39c685bb21e87e1e6b22779eb93ea04679e23b826e3ac78e7e60be239780d2eab44b3812434d3ab3368fb8c2a0747') +validpgpkeys=("ADE9653703D4ADE0E997758128555A66D7E1DEC9") # Daniel Scharrer + +prepare() { + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + + # https://github.com/dscharrer/innoextract/issues/88 + cmake . -DCMAKE_INSTALL_PREFIX=/usr -DBoost_NO_BOOST_CMAKE=ON + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + + install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" + install -m644 CHANGELOG "$pkgdir/usr/share/doc/$pkgname/CHANGELOG" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/intltool/PKGBUILD b/intltool/PKGBUILD new file mode 100644 index 0000000..a4652e4 --- /dev/null +++ b/intltool/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=intltool +pkgver=0.51.0 +_debver=0.51.0 +_debrel=5 +pkgrel=3 +pkgdesc="The internationalization tool collection" +arch=('any') +url="https://launchpad.net/intltool" +license=('GPL-2') +depends=('perl-xml-parser') +makedepends=('quilt') +source=(https://launchpad.net/intltool/trunk/${pkgver}/+download/${pkgname}-${pkgver}.tar.gz{,.asc} + https://deb.debian.org/debian/pool/main/i/intltool/intltool_$_debver-$_debrel.debian.tar.xz + intltool-0.51.0-perl-5.26.patch + intltool-merge-Create-cache-file-atomically.patch + intltool_distcheck-fix.patch) +sha512sums=('4c93cb26592ed0b1622d3b7800b5d6622ffa36f58ac73f2ef0bddfab522565fdfb8fa73d81914b9a202f1d62bc995a08960f8adb9f62c86918e75498e85fbfdf' + 'SKIP' + 'b8783917774aa4e5276c44227823ac25790dcf566bb08db93be427b38abc8213a63ce1dd763ee3a7ea08aa928da805553e1d7b1b332e0dfa02044bbd844b7717' + '338d203b290d4334477ac88991ff587b938f70415bbbc1d00bde9e0cf9c780f3e2c2e5ea9f4e49b973b9f0101ccf3bae5f769dd9543b603239171a62a2e04fd6' + '5432474871b46da3675ba34da2822d5a46d35d99282eaacfb1574126bef5ded784be31e662d5e9ecfccf4fe77b7d4abec063e8df267b767036fdf25a35f9fc77' + '75ebec0675e9321aaf2020f5cbf2feff6aac097cd45f1ceee6eec651f42e989cfda785d956a3ed34cdc4788f2dc02b02efaf46219af7a6a0a5050aa1022f7be1') +validpgpkeys=('9EBD001680E8C8F9FAC61A9BE1A701D4C9DE75B5') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -Np1 -i ../intltool-0.51.0-perl-5.26.patch + fi + patch -Np1 -i ../intltool-merge-Create-cache-file-atomically.patch + patch -Np1 -i ../intltool_distcheck-fix.patch +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +check() { + cd ${pkgname}-${pkgver} + make check +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -D -m644 doc/I18N-HOWTO "${pkgdir}/usr/share/doc/${pkgname}/I18N-HOWTO" + install -D -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/intltool/intltool-0.51.0-perl-5.26.patch b/intltool/intltool-0.51.0-perl-5.26.patch new file mode 100644 index 0000000..8f6a0b3 --- /dev/null +++ b/intltool/intltool-0.51.0-perl-5.26.patch @@ -0,0 +1,51 @@ +diff -Naur intltool-0.51.0.orig/intltool-update.in intltool-0.51.0/intltool-update.in +--- intltool-0.51.0.orig/intltool-update.in 2015-03-09 02:39:54.000000000 +0100 ++++ intltool-0.51.0/intltool-update.in 2017-07-21 22:35:10.613631420 +0200 +@@ -1062,13 +1062,13 @@ + } + } + +- if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/) ++ if ($str =~ /^(.*)\$\{?([A-Z_]+)}?(.*)$/) + { + my $rest = $3; + my $untouched = $1; + my $sub = ""; + # Ignore recursive definitions of variables +- $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/; ++ $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\$\{?$2}?/; + + return SubstituteVariable ("$untouched$sub$rest"); + } +@@ -1190,10 +1190,10 @@ + $name =~ s/\(+$//g; + $version =~ s/\(+$//g; + +- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); +- $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); +- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); +- $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); ++ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\$\{?AC_PACKAGE_NAME}?/); ++ $varhash{"PACKAGE"} = $name if (not $name =~ /\$\{?PACKAGE}?/); ++ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\$\{?AC_PACKAGE_VERSION}?/); ++ $varhash{"VERSION"} = $version if (not $name =~ /\$\{?VERSION}?/); + } + + if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)[,]?([^,\)]+)?/m) +@@ -1219,11 +1219,11 @@ + $version =~ s/\(+$//g; + $bugurl =~ s/\(+$//g if (defined $bugurl); + +- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/); +- $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/); +- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/); +- $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/); +- $varhash{"PACKAGE_BUGREPORT"} = $bugurl if (defined $bugurl and not $bugurl =~ /\${?\w+}?/); ++ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\$\{?AC_PACKAGE_NAME}?/); ++ $varhash{"PACKAGE"} = $name if (not $name =~ /\$\{?PACKAGE}?/); ++ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\$\{?AC_PACKAGE_VERSION}?/); ++ $varhash{"VERSION"} = $version if (not $name =~ /\$\{?VERSION}?/); ++ $varhash{"PACKAGE_BUGREPORT"} = $bugurl if (defined $bugurl and not $bugurl =~ /\$\{?\w+}?/); + } + + # \s makes this not work, why? diff --git a/intltool/intltool-merge-Create-cache-file-atomically.patch b/intltool/intltool-merge-Create-cache-file-atomically.patch new file mode 100644 index 0000000..677ea45 --- /dev/null +++ b/intltool/intltool-merge-Create-cache-file-atomically.patch @@ -0,0 +1,38 @@ +From d328542bea50b9445c63cdf2454052392282a1ce Mon Sep 17 00:00:00 2001 +From: Colin Walters +Date: Thu, 8 Oct 2015 16:25:47 -0400 +Subject: [PATCH] intltool-merge: Create cache file atomically + +It's going to be relatively common for build systems operating in +parallel to run multiple copies of `intltool-merge`, yet the cache +file is not created atomically (i.e. with the "open .tmp file and +rename()" dance). + +I suspect (but have not yet determined conclusively) this is the cause +of some systemd build issues where translations don't appear in the +merged file. + +Regardless, this patch can't hurt. +--- + intltool-merge.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/intltool-merge.in b/intltool-merge.in +index 1afa2a4..d1eba8f 100644 +--- a/intltool-merge.in ++++ b/intltool-merge.in +@@ -371,9 +371,10 @@ sub create_cache + + &create_translation_database; + +- open CACHE, ">$cache_file" || die; ++ open CACHE, ">$cache_file" . ".tmp" || die; + print CACHE join "\x01", %translations; + close CACHE; ++ rename("$cache_file" . ".tmp", "$cache_file"); + } + + sub load_cache +-- +1.8.3.1 + diff --git a/intltool/intltool_distcheck-fix.patch b/intltool/intltool_distcheck-fix.patch new file mode 100644 index 0000000..6e7f198 --- /dev/null +++ b/intltool/intltool_distcheck-fix.patch @@ -0,0 +1,30 @@ +diff -upr intltool-0.51.0-orig/intltool-update.in intltool-0.51.0/intltool-update.in +--- intltool-0.51.0-orig/intltool-update.in 2016-07-29 14:08:06.276987000 +0200 ++++ intltool-0.51.0/intltool-update.in 2016-07-29 14:11:09.562126918 +0200 +@@ -620,6 +620,14 @@ sub FindLeftoutFiles + + my @result; + ++ # If the builddir is a subdir of srcdir, the list of files found will be prefixed with ++ # an additional prefix (e.g. "_build/sub" for automake 1.15 make distcheck). Try to ++ # handle that, by removing those matches as well. ++ my $absbuilddir = Cwd::abs_path("..\/"); ++ my $abssrcdir = Cwd::abs_path("$SRCDIR/.."); ++ # Check if builddir is a subdir of srcdir ++ my ($abspath,$relpath) = split /\s*$abssrcdir\/\s*/, $absbuilddir, 2; ++ + foreach (@buf_allfiles_sorted) + { + my $dummy = $_; +@@ -628,7 +636,10 @@ sub FindLeftoutFiles + $srcdir =~ s#^../##; + $dummy =~ s#^$srcdir/../##; + $dummy =~ s#^$srcdir/##; +- $dummy =~ s#_build/##; ++ if ($relpath) ++ { ++ $dummy =~ s#^$relpath/##; ++ } + if (!exists($in2{$dummy})) + { + push @result, $dummy diff --git a/iperf/PKGBUILD b/iperf/PKGBUILD new file mode 100644 index 0000000..24e6550 --- /dev/null +++ b/iperf/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=iperf +pkgver=2.1.8 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A tool to measure maximum TCP bandwidth" +arch=('i686' 'x86_64') +license=('custom:GPL-2-WithACException' 'custom:GPL-3-WithACException' 'Modified-BSD' 'Simplified-BSD' 'Expat' 'ISC' 'LGPL-2' 'GPL-2') +url='https://sourceforge.net/projects/iperf2/' +makedepends=('quilt') +source=("https://downloads.sourceforge.net/iperf2/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/i/iperf/iperf_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('0b5c3dbb493d6663e7ea8621489aa92d2996c48c19499878b33b5e114a57b2c0184bd56624ab935f259c34ee63842a4a89710a91c249e2f4fb7bb37fb7572df8' + 'ea334e105f473c9642ca7b72a57a7c866e4a62dd270674dc864285f91e1158db18e4ae30f406c0652a285da3aa5a661ff9cda398a71c530a3c52ab95909de547') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/013-delete-service.patch || true + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --enable-ipv6 \ + --enable-multicast \ + --enable-threads \ + --enable-fastsampling + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/iperf3/PKGBUILD b/iperf3/PKGBUILD new file mode 100644 index 0000000..4913cdb --- /dev/null +++ b/iperf3/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=iperf3 +pkgver=3.16 +pkgrel=1 +pkgdesc="TCP and UDP network bandwidth measurement tool" +url='https://github.com/esnet/iperf' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('libressl') +source=("https://downloads.es.net/pub/iperf/iperf-${pkgver}.tar.gz") +sha512sums=('9ba97e03f17f3b939343b07ed3d508fbf57489e2b984b77a3dc3ada535f981350e56495154bdd108a83b3c507ccbed599b2b7b25de0d1778912d2c01b4ad4e7c') + +build() { + cd iperf-${pkgver} + ./configure \ + --prefix=/usr \ + --without-sctp + make +} + +package() { + cd iperf-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 examples/*{.am,.in,.c} -t "${pkgdir}/usr/share/doc/${pkgname}/examples" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/ipxe/PKGBUILD b/ipxe/PKGBUILD new file mode 100644 index 0000000..c0f117a --- /dev/null +++ b/ipxe/PKGBUILD @@ -0,0 +1,146 @@ +# Maintainer: Jesus E. + +pkgname=ipxe +_pkgver=1.0.0+git-20190125.36a4c85 +pkgver=1.0.0+git20190125.36a4c85 +_debver=$_pkgver +_debrel=5.1 +pkgrel=2 +pkgdesc="iPXE free and libre boot firmware" +arch=('i686' 'x86_64') +url='http://www.ipxe.org/' +license=('GPL-2') +depends=('bash') +makedepends=('libisoburn' 'mtools' 'syslinux' 'xz' 'quilt') +install=$pkgname.install +source=("${pkgname}-${_pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/i/ipxe/ipxe_${_pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/i/ipxe/ipxe_${_debver}-${_debrel}.debian.tar.xz" + "ipxe-0002-banner.patch" + "ipxe-0003-efi-iso.patch" + "grub" + "chain-default.ipxe" + "chain-default-3928.ipxe") +sha512sums=('8503fbc92a29a52368ac3b4dec0bc122767793a87493a83881eaf8b7e4a6dd8dd1211e354d66824e736114e90e1c26b81e89cdee3683d447071344df6ccf1e65' + '0a62e1d3d6dade60c14e4aa1980674d69011fd42e392e8f900236608acf6c3246b8a90d21c0a11357695318477e1f34c5f2da8cce2bce881ef8f303af5399a0e' + '6bd7041fc86308e1f9fdbfe168cdf4b5a429810739c070b4bca56855862773d72d52481bf4fd651f998c5b0988e96c3fd1bb5758cd50cd685c5fc1eddfb6e8dd' + '2a6bf5978845e17c35fece6a626e2983c38f4b3f073f17bf7822be0aa552f4df5e42426e5358c7da4c5554a505123b696d9ab60b07cd5dc1b06e908868dd20f3' + '4c820bf56a277cf230b2a057ddabca27578a24e6491a0616847b64852feabd48fa4f54e11c91dd79ddf9544820e21e363769c601d7fab1145036d57b9307dd26' + '9162f528cd0080b9231785795f08d3229c52ce3c18ca5a6efcfbea5028e103a294ddef79a0f28ab64b8d0cdcb9e6cdd7fee797766ad2c3d1dbc3891ddeb4b553' + '2208f9de509f07c0ae661ec54c8acb751c72ba7d7bb794fc6a8909118cdc06620c5423cf3ae75692af18130f641df6180839c7f09cb98c35925d7147e910d34f') + +prepare() { + cd $pkgname-$_pkgver/ + + if [[ ${pkgver%.*.*} = ${_debver%.*.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd src/ + + # Hyperbola branding + patch -Np2 < "${srcdir}/ipxe-0002-banner.patch" + + # ISO image with EFI support + patch -Np2 < "${srcdir}/ipxe-0003-efi-iso.patch" + + # change menu colors + sed -i "/COLOR_[A-Z]*_BG/s/COLOR_BLUE/COLOR_BLACK/" config/colour.h + + # enable neighbour command + sed -i "/NEIGHBOUR_CMD/c #define NEIGHBOUR_CMD" config/general.h + + # enable ping command + sed -i "/PING_CMD/c #define PING_CMD" config/general.h + + # enable HTTPS + sed -i "/DOWNLOAD_PROTO_HTTPS/c #define DOWNLOAD_PROTO_HTTPS" config/general.h + + # enable reboot and poweroff + sed -i -e "/REBOOT_CMD/c #define REBOOT_CMD" \ + -e "/POWEROFF_CMD/c #define POWEROFF_CMD" config/general.h + + # disable WEP, WPA and WPA2 + sed -i -e "/CRYPTO_80211_/s/^#define/#undef/" \ + -e "/IWMGMT_CMD/c #undef IWMGMT_CMD" config/general.h + + # Fix compatibility for x86 architectures + sed -i 's|SIZEOF_LOW_4GB[ ][/][ ]SIZEOF_2MB_PAGE|2048|' arch/x86/transitions/librm.S +} + +build() { + cd $pkgname-$_pkgver/src/ + + # default targets (ipxe.{lkrn,dsk,iso,usb}, undionly.kpxe) + make all + + # this includes drivers, but is bigger + # build targets with embedded scripts first and rename + make bin/ipxe.pxe EMBED=${srcdir}/chain-default.ipxe + mv bin/ipxe.pxe bin/ipxe-default.pxe + + make bin/ipxe.pxe EMBED=${srcdir}/chain-default-3928.ipxe + mv bin/ipxe.pxe bin/ipxe-default-3928.pxe + + make bin/ipxe.pxe + + if [ $CARCH = x86_64 ]; then + # EFI + make bin-i386-efi/ipxe.efi bin-x86_64-efi/ipxe.efi + + # ipxe.liso and ipxe.eiso + # build after EFI! + make bin/ipxe.liso bin/ipxe.eiso + elif [ $CARCH = i686 ]; then + # EFI + make bin-i386-efi/ipxe.efi + + # ipxe.liso + # build after EFI! + make bin/ipxe.liso + fi +} + +package() { + cd $pkgname-$_pkgver/ + + install -D -m0755 ${srcdir}/grub ${pkgdir}/etc/grub.d/35_ipxe + + install -D -m0644 COPYING ${pkgdir}/usr/share/licenses/ipxe/COPYING + install -D -m0644 COPYING.GPLv2 ${pkgdir}/usr/share/licenses/ipxe/COPYING.GPLv2 + install -D -m0644 COPYING.UBDL ${pkgdir}/usr/share/licenses/ipxe/COPYING.UBDL + + cd src/ + + # iPXE kernel bzImage + install -D -m0644 bin/ipxe.lkrn ${pkgdir}/usr/lib/ipxe/ipxe.lkrn + + # default targets, legacy and EFI ISO + install -D -m0644 bin/ipxe.dsk ${pkgdir}/usr/share/ipxe/ipxe.dsk + install -D -m0644 bin/ipxe.usb ${pkgdir}/usr/share/ipxe/ipxe.usb + install -D -m0644 bin/ipxe.iso ${pkgdir}/usr/share/ipxe/ipxe.iso + install -D -m0644 bin/ipxe.liso ${pkgdir}/usr/share/ipxe/ipxe-legacy.iso + if [ $CARCH = x86_64 ]; then + install -D -m0644 bin/ipxe.eiso ${pkgdir}/usr/share/ipxe/ipxe-efi.iso + fi + + # iPXE UNDI-only targets + install -D -m0644 bin/undionly.kpxe ${pkgdir}/usr/lib/ipxe/undi.kpxe + + # iPXE targets with full driver support + install -D -m0644 bin/ipxe.pxe ${pkgdir}/usr/lib/ipxe/ipxe.pxe + install -D -m0644 bin/ipxe-default.pxe ${pkgdir}/usr/lib/ipxe/ipxe-default.pxe + install -D -m0644 bin/ipxe-default-3928.pxe ${pkgdir}/usr/lib/ipxe/ipxe-default-3928.pxe + + # iPXE EFI targets + install -D -m0644 bin-i386-efi/ipxe.efi ${pkgdir}/usr/lib/ipxe/efi-i386.efi + if [ $CARCH = x86_64 ]; then + install -D -m0644 bin-x86_64-efi/ipxe.efi ${pkgdir}/usr/lib/ipxe/efi-x86_64.efi + fi +} diff --git a/ipxe/chain-default-3928.ipxe b/ipxe/chain-default-3928.ipxe new file mode 100644 index 0000000..17329e2 --- /dev/null +++ b/ipxe/chain-default-3928.ipxe @@ -0,0 +1,6 @@ +#!ipxe + +set next-server-port 3928 + +dhcp && +chain http://${next-server}:${next-server-port}/default.ipxe diff --git a/ipxe/chain-default.ipxe b/ipxe/chain-default.ipxe new file mode 100644 index 0000000..81981ee --- /dev/null +++ b/ipxe/chain-default.ipxe @@ -0,0 +1,6 @@ +#!ipxe + +set next-server-port 80 + +dhcp && +chain http://${next-server}:${next-server-port}/default.ipxe diff --git a/ipxe/grub b/ipxe/grub new file mode 100644 index 0000000..faa613a --- /dev/null +++ b/ipxe/grub @@ -0,0 +1,49 @@ +#! /bin/sh -e +######################################################## +# This script generates an iPXE entry on grub.cfg # +# if ipxe is installed on the system. # +######################################################## + +prefix="/usr" +exec_prefix="${prefix}" + +datarootdir="/usr/share" +datadir="${datarootdir}" + +. "${datadir}/grub/grub-mkconfig_lib" + +IPXE_BZIMAGE="/boot/ipxe/ipxe.lkrn" +case $(uname -m) in + x86_64) + IPXE_EFI="/usr/lib/ipxe/efi-x86_64.efi" ;; + *) + IPXE_EFI="/usr/lib/ipxe/efi-i386.efi" ;; +esac +EFI_MOUNT="$(lsblk -l -o 'MOUNTPOINT,PARTTYPE' -n | grep 'c12a7328-f81f-11d2-ba4b-00a0c93ec93b' | head -n1 | cut -d' ' -f1)" +IPXE_EFI_DEST="${EFI_MOUNT}/EFI/ipxe/ipxe.efi" +CLASS="--class ipxe --class gnu --class tool" + +if [ -d /sys/firmware/efi ]; then + if [ -n "${EFI_MOUNT}" ]; then + # EFI system + # This can chainload from EFI system partition only! + echo "Setting up iPXE for EFI chainloading" >&2 + mkdir -p "$(dirname ${IPXE_EFI_DEST})" + cp ${IPXE_EFI} "${IPXE_EFI_DEST}" + echo "menuentry \"iPXE - Free Boot Firmware\" ${CLASS} {" + prepare_grub_to_access_device $(${grub_probe} --target=device ${IPXE_EFI_DEST}) | sed -e "s/^/\t/" + echo -e "\techo 'Loading iPXE EFI ...'" + echo -e "\tchainloader $(make_system_path_relative_to_its_root ${IPXE_EFI_DEST})" + echo "}" + fi +else + if [ -e ${IPXE_BZIMAGE} ] && is_path_readable_by_grub ${IPXE_BZIMAGE}; then + # image exists, create menu entry + echo "Found iPXE bzImage: ${IPXE_BZIMAGE}" >&2 + echo "menuentry \"iPXE - Free Boot Firmware\" ${CLASS} {" + prepare_grub_to_access_device $(${grub_probe} --target=device ${IPXE_BZIMAGE}) | sed -e "s/^/\t/" + echo -e "\techo 'Loading iPXE ...'" + echo -e "\tlinux16 $(make_system_path_relative_to_its_root ${IPXE_BZIMAGE})" + echo "}" + fi +fi diff --git a/ipxe/ipxe-0002-banner.patch b/ipxe/ipxe-0002-banner.patch new file mode 100644 index 0000000..5c0a126 --- /dev/null +++ b/ipxe/ipxe-0002-banner.patch @@ -0,0 +1,30 @@ +diff --git a/src/usr/autoboot.c b/src/usr/autoboot.c +index 106e0f8..0a33a18 100644 +--- a/src/usr/autoboot.c ++++ b/src/usr/autoboot.c +@@ -70,7 +70,8 @@ static int ( * is_autoboot_device ) ( struct net_device *netdev ); + + #define NORMAL "\033[0m" + #define BOLD "\033[1m" +-#define CYAN "\033[36m" ++#define BLACK "\033[1;30m" ++#define GREY "\033[0;37m" + + /** The "scriptlet" setting */ + const struct setting scriptlet_setting __setting ( SETTING_MISC, scriptlet ) = { +@@ -582,9 +583,13 @@ int ipxe ( struct net_device *netdev ) { + * do so. + * + */ +- printf ( NORMAL "\n\n" PRODUCT_NAME "\n" BOLD PRODUCT_SHORT_NAME " %s" ++ printf ( NORMAL "\n\n" PRODUCT_NAME "\n" BOLD PRODUCT_SHORT_NAME + NORMAL " -- " PRODUCT_TAG_LINE " -- " +- CYAN PRODUCT_URI NORMAL "\nFeatures:", product_version ); ++ GREY PRODUCT_URI NORMAL "\n" ++ BOLD "Hyperbola" BLACK "GNU/Linux-libre" NORMAL " -- make it simple and lightweight -- " ++ BOLD BLACK "https://www.hyperbola.info" NORMAL "\n" ++ "Version %s compiled on " __DATE__ ", " __TIME__ "\n" ++ "Features:", product_version ); + for_each_table_entry ( feature, FEATURES ) + printf ( " %s", feature->name ); + printf ( "\n" ); diff --git a/ipxe/ipxe-0003-efi-iso.patch b/ipxe/ipxe-0003-efi-iso.patch new file mode 100644 index 0000000..d49c152 --- /dev/null +++ b/ipxe/ipxe-0003-efi-iso.patch @@ -0,0 +1,121 @@ +From 1bb5900a8aa64ae332dcd49a7ce82e43063b0244 Mon Sep 17 00:00:00 2001 +From: Christian Hesse +Date: Wed, 24 Feb 2016 09:16:51 +0100 +Subject: [PATCH] allow to build ISO image with EFI support (ipxe.eiso) + +--- + src/arch/x86/Makefile.pcbios | 7 +++++ + src/util/geniso | 52 +++++++++++++++++++++++++++--------- + 2 files changed, 47 insertions(+), 12 deletions(-) + +diff --git a/src/arch/x86/Makefile.pcbios b/src/arch/x86/Makefile.pcbios +index c44eefc1fa..bad076298d 100644 +--- a/src/arch/x86/Makefile.pcbios ++++ b/src/arch/x86/Makefile.pcbios +@@ -86,6 +86,13 @@ NON_AUTO_MEDIA += iso + $(Q)ISOLINUX_BIN=$(ISOLINUX_BIN) LDLINUX_C32=$(LDLINUX_C32) \ + VERSION="$(VERSION)" bash util/geniso -o $@ $< + ++# rule to make a non-emulation ISO boot image with EFI support ++NON_AUTO_MEDIA += eiso ++%eiso: %lkrn bin-i386-efi/ipxe.efi bin-x86_64-efi/ipxe.efi util/geniso ++ $(QM)$(ECHO) " [GENISO] $@" ++ $(Q)ISOLINUX_BIN=$(ISOLINUX_BIN) LDLINUX_C32=$(LDLINUX_C32) \ ++ VERSION="$(VERSION)" bash util/geniso -e -o $@ $< ++ + # rule to make a floppy emulation ISO boot image + NON_AUTO_MEDIA += liso + %liso: %lkrn util/geniso +diff --git a/src/util/geniso b/src/util/geniso +index ff090d4a08..7694036862 100755 +--- a/src/util/geniso ++++ b/src/util/geniso +@@ -6,16 +6,21 @@ function help() { + echo "usage: ${0} [OPTIONS] foo.lkrn [bar.lkrn,...]" + echo + echo "where OPTIONS are:" ++ echo " -e build image with EFI support" + echo " -h show this help" + echo " -l build legacy image with floppy emulation" + echo " -o FILE save iso image to file" + } + ++EFI=0 + LEGACY=0 + FIRST="" + +-while getopts "hlo:" opt; do ++while getopts "ehlo:" opt; do + case ${opt} in ++ e) ++ EFI=1 ++ ;; + h) + help + exit 0 +@@ -37,17 +42,25 @@ if [ -z "${OUT}" ]; then + exit 1 + fi + +-# There should either be mkisofs or the compatible genisoimage program +-for command in genisoimage mkisofs; do +- if ${command} --version >/dev/null 2>/dev/null; then +- mkisofs=(${command}) +- break +- fi +-done +- +-if [ -z "${mkisofs}" ]; then +- echo "${0}: mkisofs or genisoimage not found, please install or set PATH" >&2 ++# We need xorriso (from libisoburn) for EFI support, so try that first. ++if xorriso --version >/dev/null 2>/dev/null; then ++ mkisofs=(xorriso -as mkisofs) ++elif [ ${EFI} -eq 1 ]; then ++ echo "${0}: xorriso not found, but required for EFI support. Please install." >&2 + exit 1 ++else ++ # fall back to mkisofs or the compatible genisoimage program ++ for command in genisoimage mkisofs; do ++ if ${command} --version >/dev/null 2>/dev/null; then ++ mkisofs=(${command}) ++ break ++ fi ++ done ++ ++ if [ -z "${mkisofs}" ]; then ++ echo "${0}: mkisofs or genisoimage not found, please install or set PATH" >&2 ++ exit 1 ++ fi + fi + + dir=$(mktemp -d bin/iso.dir.XXXXXX) +@@ -122,13 +135,28 @@ case "${LEGACY}" in + # copy isolinux bootloader + cp ${ISOLINUX_BIN} ${dir} + ++ mkisofs+=(-b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table) ++ ++ if [ "${EFI}" -eq 1 ]; then ++ # generate EFI image ++ img=${dir}/efiboot.img ++ ++ mformat -f 2880 -C -i ${img} :: ++ mmd -i ${img} "::/EFI" ++ mmd -i ${img} "::/EFI/BOOT" ++ mcopy -m -i ${img} bin-x86_64-efi/ipxe.efi "::EFI/BOOT/BOOTX64.EFI" ++ mcopy -m -i ${img} bin-i386-efi/ipxe.efi "::EFI/BOOT/BOOTIA32.EFI" ++ ++ mkisofs+=(-eltorito-alt-boot -e efiboot.img -isohybrid-gpt-basdat -no-emul-boot) ++ fi ++ + # syslinux 6.x needs a file called ldlinux.c32 + if [ -n "${LDLINUX_C32}" -a -s "${LDLINUX_C32}" ]; then + cp ${LDLINUX_C32} ${dir} + fi + + # generate the iso image +- "${mkisofs[@]}" -b isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -output ${OUT} ${dir} ++ "${mkisofs[@]}" -output ${OUT} ${dir} + + # isohybrid will be used if available + if isohybrid --version >/dev/null 2>/dev/null; then diff --git a/ipxe/ipxe.install b/ipxe/ipxe.install new file mode 100644 index 0000000..a16df2a --- /dev/null +++ b/ipxe/ipxe.install @@ -0,0 +1,41 @@ +#!/bin/sh + +post_upgrade() { + mkdir -p /boot/ipxe/ + cp /usr/lib/ipxe/ipxe.lkrn /boot/ipxe/ipxe.lkrn +} + +post_install() { + # This text is taken from Makefile +cat < To create a bootable floppy, type + > cat bin/ipxe.dsk > /dev/fd0 + > where /dev/fd0 is your floppy drive. This will erase any + > data already on the disk. + > + > To create a bootable USB key, type + > cat bin/ipxe.usb > /dev/sdX + > where /dev/sdX is your USB key, and is *not* a real hard + > disk on your system. This will erase any data already on + > the USB key. + > + > To create a bootable CD-ROM, burn the ISO image + > bin/ipxe.iso to a blank CD-ROM. + > + > These images contain drivers for all supported cards. You + > can build more customised images, and ROM images, using + > make bin/. +EOF + + if [ -x /usr/sbin/grub-mkconfig ] && [ -s /boot/grub/grub.cfg ]; then + echo ' >' + echo ' > Run grub-mkconfig now for iPXE in Grub boot menu.' + fi + + post_upgrade +} + +post_remove() { + rm -f /boot/ipxe/ipxe.lkrn + rmdir /boot/ipxe/ +} diff --git a/irqbalance/PKGBUILD b/irqbalance/PKGBUILD new file mode 100644 index 0000000..dff4c5d --- /dev/null +++ b/irqbalance/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Jesus E. + +pkgname=irqbalance +pkgver=1.7.0 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="IRQ balancing daemon for SMP systems" +arch=('i686' 'x86_64') +url="https://github.com/irqbalance/irqbalance" +license=('GPL-2') +depends=('glibc') +makedepends=('glib2' 'libcap-ng' 'ncurses' 'numactl' 'quilt') +backup=('etc/conf.d/irqbalance' + 'etc/sv/irqbalance/conf') +source=("$pkgname-$pkgver.tar.gz::https://github.com/${pkgname}/${pkgname}/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/i/irqbalance/irqbalance_${_debver}-${_debrel}.debian.tar.xz" + "irqbalance.confd" + "irqbalance.initd" + "irqbalance.conf" + "irqbalance.run") +sha512sums=('2fa29c738275dda2fac38d78ca0ec4619826b72529e8eda7ad8ddcda5768bbf282e2260dddc16a8b46d4296289b25dc59684575ae1badca0c6c6ae30b1e9b5ea' + 'cd60361749688ce8e79a6f5b1013d21a3196e99ef0dcbcf044f1ae9dc7bdb74958a4b07d4a1c6e099fa6fd3ec3d436b5f306c41fdb8b25a860ccf7b07d02addb' + '90e7ed187b4dccd6f6c4383ba54d6e1aed1645240e44aaf02db1b70b56594b1a828644d671e6db91212417981b1d5e53d1ecfd4b366496dbcb484d1064d7d24c' + '88c3902015c6ce2d0ed2f1e41b0239c3ff68a14c4e1879c9670111d5ed7f7e37dc61915f109998527b74331ced06e48d42fc0b5c9185c2280f116706ae108b7e' + '81ed47f44f5cf6717a3fd17576b4c5319a82d3dd6f2f36fdf62c01c19ce47c0b464daabe29aa70395cfa05ab92ee1e5b4a6eab709d7ccee2f0cee5e5257eeee1' + '8561e9702c511a4c54e775044d9bc43ed89d0cc211307030b16201b8a714c1be8a874bdbce3925daa0304d70c5b5ae1f62baa61e7def6f4f867c6cc14fb4f341') + +prepare() { + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make install DESTDIR="$pkgdir" + + # these are system manuals + mv $pkgdir/usr/share/man/man1 $pkgdir/usr/share/man/man8 + for f in irqbalance irqbalance-ui; do + mv $pkgdir/usr/share/man/man8/$f.1 \ + $pkgdir/usr/share/man/man8/$f.8 + done + + # service-configuration + install -Dm0644 "$srcdir/${pkgname}.confd" "${pkgdir}/etc/conf.d/${pkgname}" + install -Dm0755 "$srcdir/${pkgname}.initd" "${pkgdir}/etc/init.d/${pkgname}" + install -Dm0644 "$srcdir/${pkgname}.conf" "${pkgdir}/etc/sv/${pkgname}/conf" + install -Dm0755 "$srcdir/${pkgname}.run" "${pkgdir}/etc/sv/${pkgname}/run" + + # license + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/irqbalance/irqbalance.conf b/irqbalance/irqbalance.conf new file mode 100644 index 0000000..f1db8a6 --- /dev/null +++ b/irqbalance/irqbalance.conf @@ -0,0 +1,17 @@ +# Additional options to pass to irqbalance itself. +IRQBALANCE_OPTS="" + +# These are envvars used by irqbalance itself, so make sure the "export" +# is retained. For more info, please see the irqbalance manpage. + +# Run irqbalance once and then exit +#export IRQBALANCE_ONESHOT="0" + +# Include debug messages in output +#export IRQBALANCE_DEBUG="0" + +# List of cpus to not include in balancing +#export IRQBALANCE_BANNED_CPUS="" + +# List of interrupts to not include in balancing +#export IRQBALANCE_BANNED_INTERRUPTS="" diff --git a/irqbalance/irqbalance.confd b/irqbalance/irqbalance.confd new file mode 100644 index 0000000..2761cfc --- /dev/null +++ b/irqbalance/irqbalance.confd @@ -0,0 +1,19 @@ +# /etc/conf.d/irqbalance: config file for /etc/init.d/irqbalance + +# Additional options to pass to irqbalance itself. +IRQBALANCE_OPTS="" + +# These are envvars used by irqbalance itself, so make sure the "export" +# is retained. For more info, please see the irqbalance manpage. + +# Run irqbalance once and then exit +#export IRQBALANCE_ONESHOT="0" + +# Include debug messages in output +#export IRQBALANCE_DEBUG="0" + +# List of cpus to not include in balancing +#export IRQBALANCE_BANNED_CPUS="" + +# List of interrupts to not include in balancing +#export IRQBALANCE_BANNED_INTERRUPTS="" diff --git a/irqbalance/irqbalance.initd b/irqbalance/irqbalance.initd new file mode 100644 index 0000000..9ed1641 --- /dev/null +++ b/irqbalance/irqbalance.initd @@ -0,0 +1,27 @@ +#!/sbin/openrc-run +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 or later + +depend() { + need localmount + after bootmisc +} + +command="/usr/sbin/irqbalance" +command_args="${IRQBALANCE_OPTS}" + +check_sysfs() { + if grep -q MSI /proc/interrupts 2>/dev/null && \ + test -z "$(find /sys/devices -type d -name msi_irqs 2>/dev/null)"; then + eerror "MSI interrupts found in /proc/interrupts but none found in sysfs." + eerror "You need to update your kernel." + return 1 + fi +} + +start() { + check_sysfs || return 1 + ebegin "Starting irqbalance" + start-stop-daemon --exec ${command} --start -- ${IRQBALANCE_OPTS} + eend $? +} diff --git a/irqbalance/irqbalance.run b/irqbalance/irqbalance.run new file mode 100644 index 0000000..d037544 --- /dev/null +++ b/irqbalance/irqbalance.run @@ -0,0 +1,4 @@ +#!/bin/sh +[ -r conf ] && . ./conf +install -d -m0755 /run/irqbalance +exec irqbalance -f ${IRQBALANCE_OPTS} diff --git a/irrlamb/PKGBUILD b/irrlamb/PKGBUILD new file mode 100644 index 0000000..b13a5bf --- /dev/null +++ b/irrlamb/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=irrlamb +pkgver=1.0.7 +pkgbuild=d99c154 +pkgrel=1 +pkgdesc="Free and libre 3D game that probably involves a lot of physics and frustrating gameplay" +arch=('i686' 'x86_64') +url='https://irrlamb.gitlab.io/' +license=('GPL-3') +depends=('gcc-libs' 'freetype2' 'sqlite' 'openal' 'libvorbis' 'libogg' + 'libjpeg-turbo' 'libpng' 'zlib' 'libx11' 'libxrandr' 'mesa-libgl') +makedepends=('cmake') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://gitlab.com/jazztickets/uploads/-/raw/main/${pkgname}-${pkgver}-${pkgbuild}-src.tar.gz") +sha512sums=('eca084e6e3486b22df6bc3500d2d22b81043477d89e91c1f225c0c4adab3d973d2b2af9ac792e2d53ef370ef0f34e4101f31550f248288f14840e3593ce35ea4') + +build() { + cmake \ + -S ${pkgname}-${pkgver}-${pkgbuild} \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr + make -C build +} + +package() { + make DESTDIR="$pkgdir/" -C build install + + # move binary to correct location for being FHS-compliant + install -d -m755 "${pkgdir}/usr/games" + mv "${pkgdir}/usr/bin/irrlamb" "${pkgdir}/usr/games" + rm -rf "${pkgdir}/usr/bin" + + # license + install -Dm644 "${srcdir}/${pkgname}-${pkgver}-${pkgbuild}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/irrlicht/PKGBUILD b/irrlicht/PKGBUILD new file mode 100644 index 0000000..d7aab27 --- /dev/null +++ b/irrlicht/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Jesus E. + +pkgname=irrlicht +pkgver=1.8.4 +_debver=$pkgver +_debrel=1.1 +pkgrel=2 +pkgdesc="A free software high performance realtime 3D graphics engine." +arch=('i686' 'x86_64') +url='https://irrlicht.sourceforge.net/' +license=('zlib') +depends=('mesa-libgl' 'libjpeg-turbo' 'bzip2' 'libpng') +makedepends=('mesa' 'unzip' 'libxcursor' 'quilt') +optdepends=('libxcursor: run examples') +source=("https://downloads.sourceforge.net/irrlicht/${pkgname}-${pkgver}.zip" + "https://deb.debian.org/debian/pool/main/i/irrlicht/irrlicht_${_debver}+dfsg1-${_debrel}.debian.tar.xz") +noextract=($pkgname-$pkgver.zip) +sha512sums=('de69ddd2c6bc80a1b27b9a620e3697b1baa552f24c7d624076d471f3aecd9b15f71dce3b640811e6ece20f49b57688d428e3503936a7926b3e3b0cc696af98d1' + '5ee61ab9b3f569e74acb92ba911dbf27eb9235e4809eaf2c1ecfc5bebe18f1ab3311f40ec0ae8c35fd6274d26f021d964755240d9b3997e584c55aec6421a818') + +prepare() { + unzip $pkgname-$pkgver.zip + cd $srcdir/$pkgname-$pkgver + + sed -r '/^#define _IRR_USE_NON_SYSTEM_(JPEG_LIB|LIB_PNG|ZLIB|BZLIB)_/d' -i include/IrrCompileConfig.h + sed -r '/^(ZLIB|JPEGLIB|LIBPNG|BZIP2)OBJ/d' -i source/Irrlicht/Makefile + sed -r '/^sharedlib: LDFLAGS/s,\r?$, -lz -ljpeg -lpng -lz -lbz2,' -i source/Irrlicht/Makefile + rm -r source/Irrlicht/{bzip2,jpeglib,libpng,zlib} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/debian/use-system-libs.diff || true + rm -v debian/patches/debian/link-against-needed-libs.diff || true + + quilt push -av + fi +} + +build() { + cd $srcdir/$pkgname-$pkgver/source/Irrlicht + make NDEBUG=1 sharedlib +} + +package() { + cd $srcdir/$pkgname-$pkgver/source/Irrlicht + + sed -i "/^INSTALL_DIR/s:=.*:=$pkgdir/usr/lib:" Makefile + + make install + + # fix headers permissions + chmod 644 "$pkgdir"/usr/include/$pkgname/* + + ln -s libIrrlicht.so.$pkgver "$pkgdir"/usr/lib/libIrrlicht.so.1 + + cd $srcdir/$pkgname-$pkgver + + # prepare documentation + install -d "$pkgdir"/usr/share/$pkgname "$pkgdir"/usr/share/doc/$pkgname + + # install media files for examples + cp -r media "$pkgdir"/usr/share/$pkgname + + # install documentation + cp -r doc/* "$pkgdir"/usr/share/doc/$pkgname + rm -f "$pkgdir"/usr/share/doc/$pkgname/*.txt + + # license + install -Dm644 $srcdir/$pkgname-$pkgver/readme.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/irssi-xmpp/PKGBUILD b/irssi-xmpp/PKGBUILD new file mode 100644 index 0000000..90396cf --- /dev/null +++ b/irssi-xmpp/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=irssi-xmpp +pkgver=0.54 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="irssi plugin to connect to the Jabber network" +url='https://cybione.org/~irssi-xmpp' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glib2' 'loudmouth' 'irssi') +makedepends=('quilt') +source=("https://github.com/cdidier/irssi-xmpp/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/i/irssi-plugin-xmpp/irssi-plugin-xmpp_${_debver}+git20191101+c13fa5-${_debrel}.debian.tar.xz") +sha512sums=('31ddd9e0147eec23d08b8bcbe242e831d612cb2d00f3b56776e9d0b87db9bd76d4bb147422cdf18c0567f0e0463ab828ab7a0ef80a2b35cfdc0a8be962b39f14' + 'a45d9115c8b689feb94b835031bf3402eafffb275653ffbe3b52b147042f1170ed17493d93ea415f4279ed70ec7da57c2a40799190bde63c1befa17c656dcbd2') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/GTalk-MUC-support.patch || true + rm -v debian/patches/strip_resource_08082009.patch || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + make PREFIX=/usr IRSSI_INCLUDE=/usr/include/irssi +} + +package() { + cd ${pkgname}-${pkgver} + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm644 README.md NEWS -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/irssi/PKGBUILD b/irssi/PKGBUILD new file mode 100644 index 0000000..5835fd4 --- /dev/null +++ b/irssi/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=irssi +pkgver=1.4.5 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Modular text mode IRC client with Perl scripting" +url='https://irssi.org/' +arch=('i686' 'x86_64') +license=('custom:GPL-2+OpenSSL-Linking-Exception') +depends=('glibc' 'glib2' 'libressl' 'libotr' 'libutf8proc' 'perl' 'ncurses') +makedepends=('meson' 'ninja' 'quilt') +optdepends=('perl-libwww: for the scriptassist script') +backup=('etc/irssi.conf') +source=("https://github.com/irssi/irssi/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.xz"{,.asc} + "https://deb.debian.org/debian/pool/main/i/irssi/irssi_${_debver}-${_debrel}~bpo12+1.debian.tar.xz") +sha512sums=('5d80107ad625feb6d2b3ac807f517c5cfeae58986d3fbfe53ea82f2dee70396f5092abdc6ef137c5651e4515e081591079b37f0e428f69990db493cfe14e4f36' + 'SKIP' + '1ec71310fbde78f5b3b3820e88dc4431ea401e95d3563d4e611c8fce8d297bfb40c6e127c36e4e6e3da65c96a83fec0723930e97bdc27a502c4bd8b484dfd84d') +validpgpkeys=('7EE65E3082A5FB06AC7C368D00CCB587DDBEF0E1') # The Irssi project + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/03firsttimer_text || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + hyperbola-meson build \ + -Dwith-perl-lib=vendor \ + -Dwith-proxy=yes \ + -Dwith-otr=yes \ + -Dwith-perl=yes \ + -Denable-true-color=yes + ninja -C build +} + +package() { + cd ${pkgname}-${pkgver} + DESTDIR="${pkgdir}" ninja -C build install + install -Dm644 irssi.conf -t "${pkgdir}/etc/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/iso-codes/PKGBUILD b/iso-codes/PKGBUILD new file mode 100644 index 0000000..c6a8799 --- /dev/null +++ b/iso-codes/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=iso-codes +pkgver=4.5.0 +pkgrel=1 +pkgdesc="Lists of the country, language, and currency names" +arch=(any) +url="https://salsa.debian.org/iso-codes-team/iso-codes" +license=(LGPL-2.1) +makedepends=(python) +source=(https://deb.debian.org/debian/pool/main/i/iso-codes/iso-codes_$pkgver.orig.tar.xz) +sha512sums=('2785d57c2ae2a2d494dd361613965f7e5004b87bb6da7d020914981c4cb0de275050e8e424e3cb467f1e56889cb0dd8d9b5f9456295b4382ed3e73ce3620891d') + +prepare() { + cd $pkgname-$pkgver + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" pkgconfigdir=/usr/lib/pkgconfig install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/iso2mkv/PKGBUILD b/iso2mkv/PKGBUILD new file mode 100644 index 0000000..62ea6ea --- /dev/null +++ b/iso2mkv/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=iso2mkv +pkgver=2011.05.02 +pkgrel=1 +pkgdesc="Script to convert DVD image, device, or VIDEO_TS to mkv" +arch=('any') +url='http://5ko.free.fr/en/iso2mkv.html' +license=('Expat') +depends=('lame' 'normalize' 'vorbis-tools' 'mencoder' 'mkvtoolnix-cli' 'ogmtools' 'bash') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.bz2"{,.sig}) +sha512sums=('4307be1e2756bfe9fa7d547acadcd585a2b3015de60fd9d88d7f63a75311ba6cefeae15c52131724b50786fcfccab26b93df86682039d80e6177f6c09aa9b205' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +package() { + cd "${srcdir}"/${pkgname} + + install -Dm755 $pkgname -t "${pkgdir}"/usr/bin + install -Dm644 $pkgname.conf -t "${pkgdir}"/usr/share/$pkgname/examples + install -Dm644 README.utf8.txt -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/isomaster/PKGBUILD b/isomaster/PKGBUILD new file mode 100644 index 0000000..5d22e3d --- /dev/null +++ b/isomaster/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=isomaster +pkgver=1.3.13 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Graphical CD image editor" +arch=('i686' 'x86_64') +url='http://littlesvr.ca/isomaster' +license=('GPL-2') +depends=('gtk2' 'desktop-file-utils') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/i/isomaster/isomaster_${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/i/isomaster/isomaster_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('dbc6a77fabf8d454bbde25a7540e68820bf773bc991176e5684e87aeb6044ad1bbbcf1c4f537148c18ec8847572949a52d6578a14f68b8ad3f21d542685859ba' + '32a237e676fc55f45e5ad358f6f94138dff5581d761f36627f3e2a323ddbe4e72c7736ed840dea7b207a3c95be382f3d7d6dbf705b063a4cbdb910ecc14de7af') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i 's/m 644/Dm 644/' Makefile +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + for n in ./po/*.po; do + msgfmt $n -o ./po/`basename $n .po`.mo + done + make PREFIX=/usr +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + install -d ${pkgdir}/usr/share/locale + for n in ./po/*.mo; do + install -p -D -m644 $n ${pkgdir}/usr/share/locale/`basename $n .mo`/LC_MESSAGES/${pkgname}.mo + done + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm644 LICENCE.TXT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/ispell/PKGBUILD b/ispell/PKGBUILD new file mode 100644 index 0000000..76f816f --- /dev/null +++ b/ispell/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=ispell +pkgver=3.4.02 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc='An interactive spell-checking program for Unix' +arch=(i686 x86_64) +url="https://www.cs.hmc.edu/~geoff/$pkgname.html" +license=('custom:Ispell') +depends=(ncurses) +makedepends=(byacc quilt) +source=(https://www.cs.hmc.edu/~geoff/tars/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/i/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz + license.txt) +sha512sums=('4392c00d8bcc66a9cc521ef0ba6b06ada896925f7260b7712a65529719b331dab54de5298058c5d130ee52bd088d38ba5fcf7797f265a0f68514765574b966d4' + '6d7323014860539c90f7c0f522da41a0ee736230bfe123821ba9dc235ff45cc66c1d4d74e70d0494c47526ff0841e12334e427a0380bd818b1a6fe7f3688150d' + 'c991ab91e629c35d1b84fc9e83b7738141b01612a7108b5a3f49f8f8606c2320727b1e6f2c1333ccaee0b942a126c699ca2ef72e84cb4bc3a1d0947c8a06fa27') +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-Configuration.patch || true + rm -v debian/patches/0003-Fix-FTBFS-on-Hurd.patch || true + rm -v debian/patches/0010-Debian-control-file.patch || true + rm -v debian/patches/0027-Include-Debian-Makefile.languages.inc.patch || true + + quilt push -av + fi + + # Hotfix in generate "config.sh" file (bad Makefile code) + touch config.sh + chmod +x config.sh + + # Hotfix in languages build (to ignore prebuild files error; bad Makefile code) + sed -i '\|eval| s|[$][(]MAKE[)]|$(MAKE) -i|' Makefile + + # Hotfix in package (to ignore prebuild directories error; bad Makefile code) + sed -i -e '\|mkdirpath| s|[$][(]MAKE[)]|$(MAKE) -i|' \ + -e 's|[$][(]MAKE[)][ ]EXEEXT[=][$][$]EXEEXT[ ]install|$(MAKE) -i EXEEXT=$$EXEEXT install|' \ + Makefile +} + +build() { + # Configure source code to built this package + export CC=cc EXEEXT= + pushd $pkgname-$pkgver + cp -va local.h.linux local.h + sed -i -e 's|bison[ ][-]y|yacc|' \ + -e "s|/usr/local|/usr|" \ + -e 's|/lib|/lib/ispell|' local.h + popd + + make -C $pkgname-$pkgver all +} + +package() { + make DESTDIR=$pkgdir -C $pkgname-$pkgver install + install -Dm644 license.txt -t $pkgdir/usr/share/licenses/$pkgname + + # correct package-structure + mv $pkgdir/usr/man $pkgdir/usr/share +} diff --git a/ispell/license.txt b/ispell/license.txt new file mode 100644 index 0000000..5b4db32 --- /dev/null +++ b/ispell/license.txt @@ -0,0 +1,35 @@ + Copyright (c), 1983, by Pace Willisson + + Copyright 1992, 1993, 1999, 2001, 2005, Geoff Kuenning, Claremont, CA + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. All modifications to the source code must be clearly marked as + such. Binary redistributions based on modified source code + must be clearly marked as modified versions in the documentation + and/or other materials provided with the distribution. + 4. The code that causes the 'ispell -v' command to display a prominent + link to the official ispell Web site may not be removed. + 5. The name of Geoff Kuenning may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL GEOFF KUENNING OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. diff --git a/isync/PKGBUILD b/isync/PKGBUILD new file mode 100644 index 0000000..87989d3 --- /dev/null +++ b/isync/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=isync +pkgver=1.4.4 +pkgrel=1 +pkgdesc="IMAP and MailDir mailbox synchronizer" +arch=('i686' 'x86_64') +url='https://isync.sourceforge.io/' +license=('GPL-2') +depends=('libsasl' 'zlib' 'db') +makedepends=('gettext-tiny') +source=("https://downloads.sourceforge.net/sourceforge/isync/$pkgname-$pkgver.tar.gz") +sha512sums=('b769f474f2296764cabaae7e2b23e47c22714fca5919e9f1c916ed70b18c71c0bc9301fff0f64434f4f0ae28c9d16216e72556b48014ec94d1b7646de7183011') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/itstool/PKGBUILD b/itstool/PKGBUILD new file mode 100644 index 0000000..3b9b190 --- /dev/null +++ b/itstool/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=itstool +pkgver=2.0.6 +_debver=2.0.6 +_debrel=1 +pkgrel=1 +epoch=1 +pkgdesc="XML to PO and back again" +arch=(any) +url="http://itstool.org/" +license=('custom:GPL-3+OpenSSL-Linking-Exception') +depends=(python libxml2 docbook-xml) +makedepends=(quilt) +source=(http://files.itstool.org/itstool/itstool-$pkgver.tar.bz2 + https://deb.debian.org/debian/pool/main/i/itstool/itstool_$_debver-$_debrel.debian.tar.xz + itstool-2.0.5-fix-crash-wrong-encoding.patch) +sha512sums=('51058bdcb208f6fb84810f71f9bf67e42b00bf157a9756be45f060849c0aff36f695f4403404193720d4446818fa77de61fa94eed9e8789d26c07a2926072eb7' + 'e308520969453b5ab6ab58d5fe6b7362d2c74ca386b9c77e16b53239e89fcf4c8b1dba110750bcf3de5dfee78f10e234910430fee510fd4448e3495ccfe7d0e0' + '91c6b822c61f60d904960fc0c1b4d3b67c05540fe46d8738d834235eb9ecf6f7832585e741d4ac46021901f11fdc8624dd3ef42d9bd2901de99ab2b07ccd2cbc') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + # From https://src.fedoraproject.org/rpms/libxml2/tree/master + patch -Np1 -i ../itstool-2.0.5-fix-crash-wrong-encoding.patch + fi + + autoreconf -fvi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +check() { + cd $pkgname-$pkgver + make check +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + for i in COPYING{,.GPL3}; do + install -Dm644 $i $pkgdir/usr/share/licenses/$pkgname/$i + done +} diff --git a/itstool/itstool-2.0.5-fix-crash-wrong-encoding.patch b/itstool/itstool-2.0.5-fix-crash-wrong-encoding.patch new file mode 100644 index 0000000..46577d0 --- /dev/null +++ b/itstool/itstool-2.0.5-fix-crash-wrong-encoding.patch @@ -0,0 +1,68 @@ +Description: Fix the crash from #912099 + ITS Tool 2.0.4 crashes when building some documentation, as reported in + #912099. This comes from translations with invalid XML markup, which ITS Tool + fails to merge (which is not abnormal), and to report these issues, needlessly + encodes the original msgstr from unicode to bytes, causing it to be recoded + using the default ascii codec, which fails when the msgstr contains anything + out of ascii. + . + This patch removes the useless decoding, avoiding the failing subsequent + recoding. It also explicitly encodes the output strings to be able to print + them in all cases, even when the output encoding cannot be detected. +Bug: https://github.com/itstool/itstool/issues/25 +Bug-Debian: https://bugs.debian.org/912099 +Forwarded: https://github.com/itstool/itstool/issues/25 +Author: Tanguy Ortolo +Last-Update: 2018-12-071 + +Index: itstool/itstool.in +=================================================================== +--- itstool.orig/itstool.in 2018-12-10 18:31:23.762143539 +0100 ++++ itstool/itstool.in 2018-12-10 18:38:03.496777117 +0100 +@@ -44,9 +44,22 @@ + else: + return str(s) + ustr_type = str ++ def pr_str(s): ++ """Return a string that can be safely print()ed""" ++ # Since print works on both bytes and unicode, just return the argument ++ return s + else: + string_types = basestring, + ustr = ustr_type = unicode ++ def pr_str(s): ++ """Return a string that can be safely print()ed""" ++ if isinstance(s, str): ++ # Since print works on str, just return the argument ++ return s ++ else: ++ # print may not work on unicode if the output encoding cannot be ++ # detected, so just encode with UTF-8 ++ return unicode.encode(s, 'utf-8') + + NS_ITS = 'http://www.w3.org/2005/11/its' + NS_ITST = 'http://itstool.org/extensions/' +@@ -1060,9 +1073,9 @@ + if strict: + raise + else: +- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % ( ++ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % ( + (lang + ' ') if lang is not None else '', +- msgstr.encode('utf-8'))) ++ msgstr))) + self._xml_err = '' + return node + def scan_node(node): +@@ -1087,9 +1100,9 @@ + if strict: + raise + else: +- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % ( ++ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % ( + (lang + ' ') if lang is not None else '', +- msgstr.encode('utf-8'))) ++ msgstr))) + self._xml_err = '' + ctxt.doc().freeDoc() + return node diff --git a/jack1/40-audio-privileges.rules b/jack1/40-audio-privileges.rules new file mode 100644 index 0000000..cacad7e --- /dev/null +++ b/jack1/40-audio-privileges.rules @@ -0,0 +1,2 @@ +# rw access to /dev/cpu_dma_latency to prevent CPUs from going into idle state +KERNEL=="cpu_dma_latency", GROUP="audio" diff --git a/jack1/PKGBUILD b/jack1/PKGBUILD new file mode 100644 index 0000000..89e8be2 --- /dev/null +++ b/jack1/PKGBUILD @@ -0,0 +1,187 @@ +# Maintainer: Jesus E. + +pkgbase=jack +_pkgbase=jackd1 +pkgname=('jack1' 'libjack1') +pkgver=0.125.0 +pkgrel=2 +_debname=jack-audio-connection-kit +_debver=$pkgver +_debrel=3 +arch=('i686' 'x86_64') +url='https://jackaudio.org/' +makedepends=('celt' 'db' 'doxygen' 'libsamplerate' 'libsndfile' + 'readline' 'quilt') +if [ "$(uname -o)" = 'GNU/Linux' ]; then + makedepends+=('zita-alsa-pcmi' 'zita-resampler') +fi +_url=("https://deb.debian.org/debian/pool/main/${_debname::1}/${_debname}") +source=("${_url[0]}/${_debname}_${_debver}.orig.tar.xz" + "${_url[0]}/${_debname}_${_debver}-${_debrel}.debian.tar.xz" + '40-audio-privileges.rules' + 'jack1.conf' + 'jackd.sh' + 'jackd.confd' + 'jackd.initd' + 'remove-system_has_rtprio_limits_conf-function.patch') +sha512sums=('31eb6974213ab6692cf8ffead59c9a4e57fcbc4d45766b0905adf92d20c203564064fddf7340ba6344767e8692eccf0304cf330986cad10e9f664e2b107dff62' + 'f9720ba081c90f224474eb23324c879402867c5b526cff10e7855475e159b604ac4edca03613a1abd033be2fcc79f5616b64113a56d4b1773d324f8915213aea' + '7a8383fe2820b89159c4532a11eca6103a9d3001f20bb73d84f56512a885ac756deeca918627d88902f864ac96abeb2843b6bc9692b4d94150c08b1ebfa6cffe' + 'db133c903754a6eb90031bc195b9af0da329594ab49ef770d4340f82179c84909f19833c7d0bc762533aa2db5b90b6f8c8911177dc0cff8ac4032db8e522b32a' + '00350094e1be304d6ebf9c850a942d84a94a06040c0f892caebeb604e426000e77ba8a566ce5f06156b5b3589cef3c761a8aca294f95b687cd968bdc41126c14' + '0478d821a280a74c2e7f58147cbe981201e7d06ae19e24c8cebacc43e802c0e3ba0330589b8a2a399269e6392188beec542da519be8b96a48105c5303057e77a' + '7761988c17e61cc485bbe0e720836ddeefe14dc7e8d473d44db165e9fb6d7be3aca152171f11baa8f1294d01f76e79abd164aa5b1c9107c4edd878ace81be6c2' + '7a462bff22da14f21a2514e28a32f5c1e731588270a4b81f4e1cf8242b0f151d805707df55ea4ae21ceef80f01c6873e8427c1b65ff460d0c926f4cf6cc94bc1') + +prepare() { + cd "${srcdir}/${_pkgbase}-${pkgver}" + + if [ "${pkgver%.*}" = "${_debver%.*}" ]; then + # Debian patches + export QUILT_PATCHES='debian/patches' + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "${srcdir}/debian" '.' + + # Doesn't apply + rm -v 'debian/patches/2001_debian_lib64.patch' || true + + quilt 'push' -av + fi + unset QUILT_PATCHES QUILT_REFRESH_ARGS QUILT_DIFF_ARGS + + # remove system_has_rtprio_limits_conf() from pam configuration + patch -p '1' -i "${srcdir}/remove-system_has_rtprio_limits_conf-function.patch" + + # fix zalsa support + ln -s ../../jack tools/zalsa + + autoreconf -fiv + + # use sun in HyperbolaBSD and alsa in Hyperbola GNU/Linux + cp "${srcdir}/jackd.confd" "${srcdir}/_jackd.confd" + if [ "$(uname -s)" = 'HyperbolaBSD' ]; then + sed -i 's|%SYSAUDIO%|-d sun -C /dev/audio0 -P /dev/audio0|' \ + "${srcdir}/_jackd.confd" + elif [ "$(uname -o)" = 'GNU/Linux' ]; then + sed -i 's|%SYSAUDIO%|-d alsa -d hw:0|' \ + "${srcdir}/_jackd.confd" + fi +} + +build() { + cd "${srcdir}/${_pkgbase}-${pkgver}" + + mkdir "${srcdir}/build" + cd "${srcdir}/build" + "${srcdir}/${_pkgbase}-${pkgver}/configure" \ + --prefix='/usr' \ + --includedir='/usr/include/jack1' \ + --libdir='/usr/lib/jack1' + cd "${OLDPWD}" + make -C "${srcdir}/build" V='1' +} + +package_jack1() { + license=('GPL-2') + pkgdesc="A low-latency audio server (legacy version)" + backup=('etc/conf.d/jackd') + depends=('celt' 'libjack1' 'libsndfile' 'readline') + if [ "$(uname -o)" = 'GNU/Linux' ]; then + depends+=('zita-alsa-pcmi' 'zita-resampler') + fi + provides=('jack') + conflicts=('jack') + + make -C "${srcdir}/build" DESTDIR="${pkgdir}" 'install' + + # move jackd binary file to correct directory and + # fix RT priority in GNU/Linux + if [ "$(uname -s)" = 'HyperbolaBSD' ]; then + install -dm '750' -g '4' "${pkgdir}/usr/sbin" + mv "${pkgdir}/usr/bin/jackd" "${pkgdir}/usr/sbin" + elif [ "$(uname -o)" = 'GNU/Linux' ]; then + install -dm '755' "${pkgdir}/usr/libexec/jack" + mv "${pkgdir}/usr/bin/jackd" "${pkgdir}/usr/libexec/jack" + install -dm '750' -g '4' "${pkgdir}/usr/sbin" + install -Dm '755' "${srcdir}/jackd.sh" "${pkgdir}/usr/sbin/jackd" + fi + ln -s 'jackd' "${pkgdir}/usr/sbin/jackstart" + + # move jackd manual file to correct directory + install -dm '750' -g '4' "${pkgdir}/usr/share/man/man8" + for i in 'jackd' 'jackstart'; do + mv "${pkgdir}/usr/share/man/man1/${i}.1" \ + "${pkgdir}/usr/share/man/man8/${i}.8" + done + unset i + rmdir "${pkgdir}/usr/share/man/man1" + + # move jack1 library modules to correct directory + mv "${pkgdir}/usr/lib/jack1/jack" "${pkgdir}/usr/lib" + + # remove files, because these are files from libjack1 package + rm -r "${pkgdir}/usr/lib/jack1" + + # remove header files, because these are files from libjack1 package + for i in 'intclient' 'jack' 'jslist' 'metadata' 'midiport' \ + 'ringbuffer' 'session' 'statistics' 'thread' 'transport' \ + 'types' 'uuid' 'weakjack' 'weakmacros'; do + rm "${pkgdir}/usr/include/jack1/jack/${i}.h" + done + unset i + + # move documents files to correct directory + install -dm '755' "${pkgdir}/usr/share/doc" + mv "${pkgdir}/usr/share/${_debname}/reference" "${pkgdir}/usr/share/doc/jack" + rmdir "${pkgdir}/usr/share/${_debname}" + + # install udev rules + install -Dm '644' "${srcdir}/40-audio-privileges.rules" \ + -t "${pkgdir}/lib/udev/rules.d" + + # install OpenRC + install -Dm '644' "${srcdir}/_jackd.confd" "${pkgdir}/etc/conf.d/jackd" + install -Dm '755' "${srcdir}/jackd.initd" "${pkgdir}/etc/init.d/jackd" + + # install licenses + for i in 'COPYING' 'COPYING.GPL'; do + install -Dm '644' "${srcdir}/${_pkgbase}-${pkgver}/${i}" \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i +} + +package_libjack1() { + license=('LGPL-2.1') + pkgdesc="A low-latency audio server libraries (legacy version)" + depends=('db') + makedepends=('quilt') + + make -C "${srcdir}/build" DESTDIR="${pkgdir}" 'install' + + # remove files, because these are files from jack1 package + for i in 'usr/bin' 'usr/lib/jack1/jack' 'usr/share'; do + rm -r "${pkgdir}/${i}" + done + unset i + + # remove header file, because these are files from jack1 package + rm "${pkgdir}/usr/include/jack1/jack/control.h" + + # rename jack pkgconfig file + mv "${pkgdir}/usr/lib/jack1/pkgconfig" "${pkgdir}/usr/lib" + mv "${pkgdir}/usr/lib/pkgconfig/jack.pc" \ + "${pkgdir}/usr/lib/pkgconfig/jack1.pc" + + # install ld.so.conf file + install -Dm '644' "${srcdir}/jack1.conf" -t "${pkgdir}/etc/ld.so.conf.d" + + # install licenses + for i in 'COPYING' 'COPYING.LGPL'; do + install -Dm '644' "${srcdir}/${_pkgbase}-${pkgver}/${i}" \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" + done + unset i +} diff --git a/jack1/jack1.conf b/jack1/jack1.conf new file mode 100644 index 0000000..92080f2 --- /dev/null +++ b/jack1/jack1.conf @@ -0,0 +1 @@ +/usr/lib/jack1 diff --git a/jack1/jackd.confd b/jack1/jackd.confd new file mode 100644 index 0000000..ca857ae --- /dev/null +++ b/jack1/jackd.confd @@ -0,0 +1,7 @@ +# /etc/conf.d/jackd: config file for /etc/init.d/jackd + +# Options to pass to the jackd service. +# See the jackd(1) man page for more info. + +ARGS='%SYSAUDIO%' +#ARGS='-d sndio -d snd/0' diff --git a/jack1/jackd.initd b/jack1/jackd.initd new file mode 100644 index 0000000..1dd1862 --- /dev/null +++ b/jack1/jackd.initd @@ -0,0 +1,20 @@ +#!/sbin/openrc-run +# Copyright 2019-2021 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description='A low-latency audio service' + +command='/usr/sbin/jackd' +command_args="${ARGS}" +command_background='yes' +pidfile='/run/jackd/jackd.pid' +retry='TERM/10/KILL/5' + +depend() { + need 'localmount' + after 'bootmisc' 'modules' 'isapnp' 'coldplug' 'hotplug' 'alsasound' 'sndiod' +} + +start_pre() { + checkpath --directory --owner ':audio' --mode '750' '/run/jackd' +} diff --git a/jack1/jackd.sh b/jack1/jackd.sh new file mode 100644 index 0000000..0c7ea5e --- /dev/null +++ b/jack1/jackd.sh @@ -0,0 +1,3 @@ +#!/bin/sh +prlimit --rtprio='99' '/usr/libexec/jack/jackd' "${@}" +prlimit --memlock='unlimited' --pid "${?}" diff --git a/jack1/remove-system_has_rtprio_limits_conf-function.patch b/jack1/remove-system_has_rtprio_limits_conf-function.patch new file mode 100644 index 0000000..9cfaafd --- /dev/null +++ b/jack1/remove-system_has_rtprio_limits_conf-function.patch @@ -0,0 +1,71 @@ +diff --git a/config/os/gnu-linux/sanitycheck.c b/config/os/gnu-linux/sanitycheck.c +index f8449f20..ab0fa8bd 100644 +--- a/config/os/gnu-linux/sanitycheck.c ++++ b/config/os/gnu-linux/sanitycheck.c +@@ -33,14 +33,10 @@ int sanitycheck (int care_about_realtime, + errors++; + relogin++; + fprintf (stderr, "\nJACK is running in realtime mode, but you are not allowed to use realtime scheduling.\n"); ++ fprintf (stderr, "Please use the prlimit command like: \n"); ++ fprintf (stderr, " prlimit --rtprio=99 jackd [options] \n"); + +- if (!system_has_rtprio_limits_conf ()) { +- errors++; +- relogin++; +- fprintf (stderr, "Please check your /etc/security/limits.conf for the following line\n"); +- fprintf (stderr, "and correct/add it if necessary:\n\n"); +- fprintf (stderr, " @audio - rtprio 99\n"); +- } else if (!system_has_audiogroup ()) { ++ if (!system_has_audiogroup ()) { + errors++; + relogin++; + fprintf (stderr, "\nYour system has no audio group. Please add it by executing (as root):\n"); +diff --git a/config/os/gnu-linux/systemtest.c b/config/os/gnu-linux/systemtest.c +index 957abe8a..9e77f378 100644 +--- a/config/os/gnu-linux/systemtest.c ++++ b/config/os/gnu-linux/systemtest.c +@@ -156,25 +156,6 @@ static gid_t get_group_by_name (const char* name) + return res; + } + +-/*** +- * Checks for a definition in /etc/security/limits.conf that looks +- * as if it allows RT scheduling priority. +- * +- * @returns 1 if there appears to be such a line +- **/ +-int system_has_rtprio_limits_conf () +-{ +- const char* limits = "/etc/security/limits.conf"; +- char cmd[100]; +- +- snprintf (cmd, sizeof(cmd), "grep -q 'rtprio *[0-9][0-9]*' %s", limits); +- if (system (cmd) == 0) { +- return 1; +- } +- return 0; +-} +- +- + /** + * Checks for the existence of the 'audio' group on this system + * +diff --git a/include/systemtest.h b/include/systemtest.h +index 9445372a..969ee545 100644 +--- a/include/systemtest.h ++++ b/include/systemtest.h +@@ -32,14 +32,6 @@ int system_has_frequencyscaling(); + int system_uses_frequencyscaling(); + + +-/*** +- * Checks for a definition in /etc/security/limits.conf that looks +- * as if it allows RT scheduling priority. +- * +- * @returns 1 if there appears to be such a line +- **/ +-int system_has_rtprio_limits_conf(); +- + /** + * Checks for the existence of the 'audio' group on this system + * diff --git a/jack2/40-audio-privileges.rules b/jack2/40-audio-privileges.rules new file mode 100644 index 0000000..cacad7e --- /dev/null +++ b/jack2/40-audio-privileges.rules @@ -0,0 +1,2 @@ +# rw access to /dev/cpu_dma_latency to prevent CPUs from going into idle state +KERNEL=="cpu_dma_latency", GROUP="audio" diff --git a/jack2/PKGBUILD b/jack2/PKGBUILD new file mode 100644 index 0000000..9a50088 --- /dev/null +++ b/jack2/PKGBUILD @@ -0,0 +1,152 @@ +# Maintainer: Jesus E. + +pkgbase=jack +_pkgbase=jack2 +pkgname=('jack2' 'libjack') +pkgver=1.9.17 +pkgrel=3 +_debname=jackd2 +_debver=$pkgver +_debrel=1 +arch=('i686' 'x86_64') +url='https://jackaudio.org/' +makedepends=('celt' 'db' 'libsamplerate' 'opus' 'readline' 'waf' 'quilt') +_url=("https://deb.debian.org/debian/pool/main/${_debname::1}/${_debname}") +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/jackaudio/${pkgname}/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/j/jackd2/jackd2_${_debver}~dfsg-${_debrel}.debian.tar.xz" + '40-audio-privileges.rules' + 'jackd.sh' + 'jackd.confd' + 'jackd.initd') +sha512sums=('dff611273e23cea6fe258114c65e193f01dfa0366ddd4e6a026a3d676a32002ee744bc70085fb8568cb85395399072beec2c7f7eed8d9ec912332a2a56623521' + 'b33163af66ecde21e4e158221b3f1963c6d66b1a207bd51aede689fd1195b88accffd219931ec7e73760e3e22085d94a4631e6ac91aa07e289053157bde9ecec' + '7a8383fe2820b89159c4532a11eca6103a9d3001f20bb73d84f56512a885ac756deeca918627d88902f864ac96abeb2843b6bc9692b4d94150c08b1ebfa6cffe' + '00350094e1be304d6ebf9c850a942d84a94a06040c0f892caebeb604e426000e77ba8a566ce5f06156b5b3589cef3c761a8aca294f95b687cd968bdc41126c14' + '0478d821a280a74c2e7f58147cbe981201e7d06ae19e24c8cebacc43e802c0e3ba0330589b8a2a399269e6392188beec542da519be8b96a48105c5303057e77a' + '7761988c17e61cc485bbe0e720836ddeefe14dc7e8d473d44db165e9fb6d7be3aca152171f11baa8f1294d01f76e79abd164aa5b1c9107c4edd878ace81be6c2') + +prepare() { + cd "${srcdir}/${_pkgbase}-${pkgver}" + + if [ "${pkgver%.*}" = "${_debver%.*}" ]; then + # Debian patches + export QUILT_PATCHES='debian/patches' + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "${srcdir}/debian" '.' + + # Doesn't apply + rm -v 'debian/patches/reproducible-build.patch' || true + + quilt 'push' -av + fi + unset QUILT_PATCHES QUILT_REFRESH_ARGS QUILT_DIFF_ARGS + + # copying relevant custom waf scripts and loading them specifically using + # wscript + ( + touch '__init__.py' + mkdir -vp 'tools' + cp -v 'waflib/extras/xcode'*'.py' 'tools' + rm -rv 'waflib' + sed -e "s/load('xcode'/load('xcode', tooldir='tools'/g" \ + -e "s/load('xcode6'/load('xcode6', tooldir='tools'/g" \ + -i 'wscript' + ) + + # use sun in HyperbolaBSD and alsa in Hyperbola GNU/Linux + cp "${srcdir}/jackd.confd" "${srcdir}/_jackd.confd" + if [ "$(uname -s)" = 'HyperbolaBSD' ]; then + sed -i 's|%SYSAUDIO%|-d sun -C /dev/audio0 -P /dev/audio0|' \ + "${srcdir}/_jackd.confd" + elif [ "$(uname -o)" = 'GNU/Linux' ]; then + sed -i 's|%SYSAUDIO%|-d alsa -d hw:0|' \ + "${srcdir}/_jackd.confd" + fi +} + +build() { + cd "${srcdir}/${_pkgbase}-${pkgver}" + + export PYTHONPATH="${PWD}:${PYTHONPATH}" + waf 'configure' --prefix='/usr' \ + --htmldir="/usr/share/doc/${pkgbase}/" \ + --autostart='none' \ + --classic + waf 'build' +} + +package_jack2() { + license=('GPL-2') + pkgdesc="A low-latency audio server" + backup=('etc/conf.d/jackd') + depends=('libjack' 'readline') + provides=('jack') + conflicts=('jack') + + cd "${srcdir}/${_pkgbase}-${pkgver}" + + export PYTHONPATH="${PWD}:${PYTHONPATH}" + waf 'install' --destdir="${pkgdir}" + + # move jackd binary file to correct directory and + # fix RT priority in GNU/Linux + if [ "$(uname -s)" = 'HyperbolaBSD' ]; then + install -dm '750' -g '4' "${pkgdir}/usr/sbin" + mv "${pkgdir}/usr/bin/jackd" "${pkgdir}/usr/sbin" + elif [ "$(uname -o)" = 'GNU/Linux' ]; then + install -dm '755' "${pkgdir}/usr/libexec/jack" + mv "${pkgdir}/usr/bin/jackd" "${pkgdir}/usr/libexec/jack" + install -dm '750' -g '4' "${pkgdir}/usr/sbin" + install -Dm '755' "${srcdir}/jackd.sh" "${pkgdir}/usr/sbin/jackd" + fi + + # move jackd manual file to correct directory + install -dm '750' -g '4' "${pkgdir}/usr/share/man/man8" + mv "${pkgdir}/usr/share/man/man1/jackd.1" \ + "${pkgdir}/usr/share/man/man8/jackd.8" + + # remove libjack library files, because these are files from libjack package + rm "${pkgdir}/usr/lib/libjack"*".so"* + + # remove files, because these are files from libjack package + for i in 'usr/lib/pkgconfig' 'usr/include'; do + rm -r "${pkgdir}/${i}" + done + unset i + + # install udev rules + install -Dm '644' "${srcdir}/40-audio-privileges.rules" \ + -t "${pkgdir}/lib/udev/rules.d" + + # install OpenRC + install -Dm '644' "${srcdir}/_jackd.confd" "${pkgdir}/etc/conf.d/jackd" + install -Dm '755' "${srcdir}/jackd.initd" "${pkgdir}/etc/init.d/jackd" + + # install license + install -Dm644 "COPYING" \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_libjack() { + license=('GPL-2') + pkgdesc="A low-latency audio server libraries" + depends=('celt' 'db' 'libsamplerate' 'opus') + makedepends=('waf' 'quilt') + + cd "${srcdir}/${_pkgbase}-${pkgver}" + + export PYTHONPATH="${PWD}:${PYTHONPATH}" + waf 'install' --destdir="${pkgdir}" + + # remove files, because these are files from jack2 package + for i in 'usr/bin' 'usr/lib/jack' 'usr/share'; do + rm -r "${pkgdir}/${i}" + done + unset i + + # install license + install -Dm644 "COPYING" \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/jack2/jackd.confd b/jack2/jackd.confd new file mode 100644 index 0000000..ca857ae --- /dev/null +++ b/jack2/jackd.confd @@ -0,0 +1,7 @@ +# /etc/conf.d/jackd: config file for /etc/init.d/jackd + +# Options to pass to the jackd service. +# See the jackd(1) man page for more info. + +ARGS='%SYSAUDIO%' +#ARGS='-d sndio -d snd/0' diff --git a/jack2/jackd.initd b/jack2/jackd.initd new file mode 100644 index 0000000..1dd1862 --- /dev/null +++ b/jack2/jackd.initd @@ -0,0 +1,20 @@ +#!/sbin/openrc-run +# Copyright 2019-2021 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description='A low-latency audio service' + +command='/usr/sbin/jackd' +command_args="${ARGS}" +command_background='yes' +pidfile='/run/jackd/jackd.pid' +retry='TERM/10/KILL/5' + +depend() { + need 'localmount' + after 'bootmisc' 'modules' 'isapnp' 'coldplug' 'hotplug' 'alsasound' 'sndiod' +} + +start_pre() { + checkpath --directory --owner ':audio' --mode '750' '/run/jackd' +} diff --git a/jack2/jackd.sh b/jack2/jackd.sh new file mode 100644 index 0000000..0c7ea5e --- /dev/null +++ b/jack2/jackd.sh @@ -0,0 +1,3 @@ +#!/bin/sh +prlimit --rtprio='99' '/usr/libexec/jack/jackd' "${@}" +prlimit --memlock='unlimited' --pid "${?}" diff --git a/jansson/PKGBUILD b/jansson/PKGBUILD new file mode 100644 index 0000000..fc4402c --- /dev/null +++ b/jansson/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=jansson +pkgver=2.13.1 +pkgrel=1 +pkgdesc='C library for encoding, decoding and manipulating JSON data' +arch=('i686' 'x86_64') +url='https://digip.org/jansson/' +depends=('glibc') +license=('Expat') +options=('staticlibs') +source=("https://www.digip.org/$pkgname/releases/$pkgname-$pkgver.tar.bz2"{,.asc}) +sha512sums=('057f0eda43e4162569888d739f4d78d1d02fce8359400d8f66fdc6e440b0405cb457e1126820dc8ce51e9c4a7f4b7effc640caf1d54307c78c0c47c3fc093011' + 'SKIP') +validpgpkeys=('B5D6953E6D5059ED7ADA0F2FD3657D24D058434C') # Petri Lehtinen + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/jasper/PKGBUILD b/jasper/PKGBUILD new file mode 100644 index 0000000..13c45a4 --- /dev/null +++ b/jasper/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgbase=jasper +pkgname=('jasper' 'jasper-doc') +pkgver=2.0.16 +pkgrel=1 +pkgdesc='Software-based implementation of the codec specified in the emerging JPEG-2000 Part-1 standard' +url='https://www.ece.uvic.ca/~frodo/jasper/' +arch=('i686' 'x86_64') +license=('custom:JasPer2.0') +makedepends=('libjpeg-turbo' 'freeglut' 'libxmu' 'glu' 'cmake' 'doxygen') +options=('staticlibs') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/mdadams/jasper/archive/version-${pkgver}.tar.gz + jasper-1.900.1-fix-filename-buffer-overflow.patch) +sha512sums=('b3bca227f833567c9061c4a29c0599784ed6a131b5cceddfd1696542d19add821eda445ce6d83782b454b266723b24d0f028cbc644a25c0e3a75304e615b34ee' + 'b8d798bf75523c5db263783e42c653dd0cb03deee90be32eddf878bb6893cca02abadd94de6a8c737a5b7fe76f7fb245979f010765e6a95fc520b215e3a2a7f0') + +prepare() { + cd ${pkgbase}-version-${pkgver} + patch -p1 < "${srcdir}/jasper-1.900.1-fix-filename-buffer-overflow.patch" + sed -r 's|(CMAKE_SKIP_BUILD_RPATH) FALSE|\1 TRUE|g' -i CMakeLists.txt + mkdir -p build-shared build-static +} + +build() { + cd ${pkgbase}-version-${pkgver} + local options=( + -DCMAKE_INSTALL_PREFIX=/usr + -DCMAKE_INSTALL_LIBDIR=lib + -DCMAKE_BUILD_TYPE=Release + -DJAS_ENABLE_OPENGL=ON + -DJAS_ENABLE_LIBJPEG=ON + -DJAS_ENABLE_AUTOMATIC_DEPENDENCIES=OFF + -DCMAKE_SKIP_RPATH=ON + ) + msg2 "Building static lib..." + (cd build-static + cmake ${options[@]} -DJAS_ENABLE_SHARED=OFF .. + make + ) + msg2 "Building shared lib..." + (cd build-shared + cmake ${options[@]} -DJAS_ENABLE_SHARED=ON .. + make + ) +} + +check() { + cd ${pkgbase}-version-${pkgver}/build-static + make -j1 test +} + +package_jasper() { + depends=('libjpeg-turbo') + optdepends=('jasper-doc: documentation' + 'freeglut: jiv support' + 'glu: jiv support') + cd ${pkgbase}-version-${pkgver} + make -C build-static DESTDIR="${pkgdir}" install + make -C build-shared DESTDIR="${pkgdir}" install + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + rm -r "${pkgdir}/usr/share/doc" +} + +package_jasper-doc() { + pkgdesc+=' (documentation)' + optdepends=('jasper') + cd ${pkgbase}-version-${pkgver} + make -C build-shared DESTDIR="${pkgdir}" install + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + rm -rf "${pkgdir}/usr/"{bin,include,lib,share/man} +} + +# vim: ts=2 sw=2 et: diff --git a/jasper/jasper-1.900.1-fix-filename-buffer-overflow.patch b/jasper/jasper-1.900.1-fix-filename-buffer-overflow.patch new file mode 100644 index 0000000..e95ed9c --- /dev/null +++ b/jasper/jasper-1.900.1-fix-filename-buffer-overflow.patch @@ -0,0 +1,37 @@ +Description: Filename buffer overflow fix + This patch fixes a security hole by a bad buffer size handling. +Author: Roland Stigge +Bug-Debian: http://bugs.debian.org/645118 + +--- a/src/libjasper/include/jasper/jas_stream.h ++++ b/src/libjasper/include/jasper/jas_stream.h +@@ -77,6 +77,7 @@ + #include + + #include ++#include + #if defined(JAS_HAVE_FCNTL_H) + #include + #endif +@@ -99,6 +100,12 @@ extern "C" { + #define O_BINARY 0 + #endif + ++#ifdef PATH_MAX ++#define JAS_PATH_MAX PATH_MAX ++#else ++#define JAS_PATH_MAX 4096 ++#endif ++ + /* + * Stream open flags. + */ +@@ -251,7 +258,7 @@ typedef struct { + typedef struct { + int fd; + int flags; +- char pathname[L_tmpnam + 1]; ++ char pathname[JAS_PATH_MAX + 1]; + } jas_stream_fileobj_t; + + #define JAS_STREAM_FILEOBJ_DELONCLOSE 0x01 diff --git a/jbig2dec/PKGBUILD b/jbig2dec/PKGBUILD new file mode 100644 index 0000000..172775e --- /dev/null +++ b/jbig2dec/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=jbig2dec +pkgver=0.19 +_gsver=gs9530 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Decoder implementation of the JBIG2 image compression format" +url='https://jbig2dec.com/' +arch=('i686' 'x86_64') +license=('AGPL-3') +depends=('libpng') +makedepends=('quilt') +source=("https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/${_gsver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/j/jbig2dec/jbig2dec_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('0d3ec8123b446b5b74846b189004c188e82cdf7b1c7ec3e02f98892aaa249fba0b0fe7f1db7036f2571b0ef2a5df22d1997d3d3f5479c9bef7851bf114134737' + '60cf1810796e025f652b8c600ac977b1a133121653c5c68463c5e3032938e4f0dfa2be0506ae3ba7ac8f3b15cbde9a1f37363064ecc8a530a4da4ee2549784fc') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/2* || true + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + for i in COPYING LICENSE; do + install -Dm644 ${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/jbigkit/PKGBUILD b/jbigkit/PKGBUILD new file mode 100644 index 0000000..3110792 --- /dev/null +++ b/jbigkit/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=jbigkit +pkgver=2.1 +_debver=2.1 +_debrel=3.1 +pkgrel=3 +pkgdesc="Data compression library/utilities for bi-level high-resolution images" +arch=('i686' 'x86_64') +url="http://www.cl.cam.ac.uk/~mgk25/jbigkit/" +license=('GPL-2') +makedepends=('quilt') +options=('staticlibs') +source=(https://www.cl.cam.ac.uk/~mgk25/download/jbigkit-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/j/jbigkit/jbigkit_$_debver-$_debrel.debian.tar.xz) +sha512sums=('c4127480470ef90db1ef3bd2caa444df10b50ed8df0bc9997db7612cb48b49278baf44965028f1807a21028eb965d677e015466306b44683c4ec75a23e1922cf' + 'ba3738605b2677c84a7136981d9afd431b7b14dd82f14c643d3ba334421a97c25ce1ee7000dca9ba866f64264b2c35935674422e1aae04ee4320c7adf4fab3b7') + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/$pkgname-$pkgver + unset CFLAGS CPPFLAGS LDFLAGS + [ "$CARCH" == "x86_64" ] && export CFLAGS="$CFLAGS -fPIC" + make CFLAGS="$CFLAGS" +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + + install -D -m644 libjbig/libjbig.a "$pkgdir"/usr/lib/libjbig.a + install -D -m644 libjbig/libjbig85.a "$pkgdir"/usr/lib/libjbig85.a + install -D -m644 libjbig/jbig.h "$pkgdir"/usr/include/jbig.h + install -D -m644 libjbig/jbig_ar.h "$pkgdir"/usr/include/jbig_ar.h + install -D -m644 libjbig/jbig85.h "$pkgdir"/usr/include/jbig85.h + + install -d -m755 "$pkgdir"/usr/share/man/man1 +# install -d -m755 "$pkgdir"/usr/share/man/man5 + install -m644 pbmtools/*.1* "$pkgdir"/usr/share/man/man1 +# install -m644 pbmtools/*.5* "$pkgdir"/usr/share/man/man5 + + install -D -m755 pbmtools/jbgtopbm "$pkgdir"/usr/bin/jbgtopbm + install -D -m755 pbmtools/pbmtojbg "$pkgdir"/usr/bin/pbmtojbg + install -D -m755 pbmtools/jbgtopbm85 "$pkgdir"/usr/bin/jbgtopbm85 + install -D -m755 pbmtools/pbmtojbg85 "$pkgdir"/usr/bin/pbmtojbg85 + + rm -f "$pkgdir"/usr/share/man/man5/p{b,g}m.5* + + install -D -m644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING +} diff --git a/jemalloc/PKGBUILD b/jemalloc/PKGBUILD new file mode 100644 index 0000000..410db3a --- /dev/null +++ b/jemalloc/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=jemalloc +pkgver=5.3.0 +pkgrel=1 +pkgdesc="General-purpose scalable concurrent malloc implementation" +arch=('i686' 'x86_64') +url='https://jemalloc.net/' +license=('Simplified-BSD') +makedepends=('clang') +optdepends=('perl: for jeprof') +source=("https://github.com/${pkgname}/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.bz2") +sha512sums=('22907bb052096e2caffb6e4e23548aecc5cc9283dce476896a2b1127eee64170e3562fa2e7db9571298814a7a2c7df6e8d1fbe152bd3f3b0c1abec22a2de34b1') + +build() { + cd ${pkgname}-${pkgver} + export CC=clang && export CXX=clang++ + ./configure \ + --enable-prof \ + --enable-autogen \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + chmod 644 ${pkgdir}/usr/lib/lib${pkgname}_pic.a + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/jgmenu/PKGBUILD b/jgmenu/PKGBUILD new file mode 100644 index 0000000..41e808f --- /dev/null +++ b/jgmenu/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=jgmenu +pkgver=4.4.0 +pkgrel=1 +pkgdesc="Simple, independent, contemporary-looking X11 menu, designed for scripting, ricing and tweaking" +arch=('i686' 'x86_64') +url='https://www.github.com/johanmalm/jgmenu' +license=('GPL-2') +depends=('libx11' 'cairo' 'pango' 'libxrandr' 'librsvg-legacy' 'libxml2' 'glib2' 'python') +source=("${pkgname}-${pkgver}.tar.gz::https://www.github.com/johanmalm/jgmenu/archive/v${pkgver}.tar.gz") +sha512sums=('bb0ca1927c77a1471f5f4566e54509756cd0a2426cf04e1e46687ff5309d86ce7992794fba86d253927fcb6014040891146f1296daa4eb55d71faddf01f596ed') + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --with-pmenu + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" prefix=/usr install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/jhead/PKGBUILD b/jhead/PKGBUILD new file mode 100644 index 0000000..5afe2b9 --- /dev/null +++ b/jhead/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=jhead +pkgver=3.04 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="EXIF JPEG info parser and thumbnail remover" +url='http://www.sentex.net/~mwandel/jhead/' +arch=('i686' 'x86_64') +license=('Public-Domain') +depends=('glibc') +makedepends=('quilt') +optdepends=('libjpeg-turbo: to up-right images according to rotation tag') +source=("${pkgname}-${pkgver}.tar.gz::http://deb.debian.org/debian/pool/main/j/jhead/jhead_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/j/jhead/jhead_${_debver}-${_debrel}.debian.tar.xz" + "fix-build.patch") +sha512sums=('d783b02059ebcb01845d346e7c48bdc9d9f12fb7b0fd47bf8aff0a85a03f3523fbc536ddab0912f1c56ddb315b6cf31f16d4c7a4f81112d9a4c76a4a57ec1aed' + '8b4d1f6a066c819ff885d707fbc1dc94f55f919c743f553ec8212800c96055abd68e3f3749db8dbddbca5ec96fb2d928a3ef43ee88caab43067c44e92f5572c5' + '3261cf164ab275b06601135ed41097e1b3de662d86b7938c8aece7f607035c5aedab4cd16bc5e695dfc8291eb01f02d4079c27335f82820a8c5ce3e41c2d0f65') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # additional patches + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + install -Dm755 jhead "${pkgdir}/usr/bin/jhead" + install -Dm644 jhead.1 "${pkgdir}/usr/share/man/man1/jhead.1" + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/jhead/fix-build.patch b/jhead/fix-build.patch new file mode 100644 index 0000000..2f20820 --- /dev/null +++ b/jhead/fix-build.patch @@ -0,0 +1,15 @@ +--- a/makefile 2019-11-22 15:27:34.000000000 +0100 ++++ b/makefile 2022-08-21 19:40:34.537512240 +0200 +@@ -3,9 +3,9 @@ + #-------------------------------- + OBJ=. + SRC=. +-CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) +-CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) +-LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS) ++CPPFLAGS:=$(CPPFLAGS) ++CFLAGS:=$(CFLAGS) ++LDFLAGS:=$(LDFLAGS) + + all: jhead + diff --git a/jmtpfs/PKGBUILD b/jmtpfs/PKGBUILD new file mode 100644 index 0000000..30de232 --- /dev/null +++ b/jmtpfs/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=jmtpfs +pkgver=0.5 +pkgrel=1 +license=('GPL-3') +pkgdesc='FUSE and libmtp based filesystem for accessing MTP (Media Transfer Protocol) devices' +arch=('i686' 'x86_64') +url='https://github.com/JasonFerrara/jmtpfs' +depends=('fuse2' 'libmtp') +source=(https://github.com/JasonFerrara/jmtpfs/archive/v$pkgver/jmtpfs-v$pkgver.tar.gz) +sha512sums=('1997d202199af59ae2138701855864e4dab624fff4feac08ea98e3e4ed6c39e4181d8f9fec35db0e83570f48de204f3d00e1b0d2244ec677f77a99b1dc9c38b3') + +build() { + cd $pkgname-$pkgver + ./configure CXXFLAGS=-lpthread --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + ln -s jmtpfs "$pkgdir"/usr/bin/mount.jmtpfs + ln -s jmtpfs "$pkgdir"/usr/bin/mount.fuse.jmtpfs + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/joe/PKGBUILD b/joe/PKGBUILD new file mode 100644 index 0000000..65ebb67 --- /dev/null +++ b/joe/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=joe +pkgver=4.6 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="User friendly, free and libre full screen text editor" +arch=('i686' 'x86_64') +url='https://joe-editor.sourceforge.io/' +license=('GPL-2') +depends=('ncurses') +makedepends=('quilt') +optdepends=('gpm: console mouse support') +backup=('etc/joe/ftyperc' + 'etc/joe/jicerc.ru' + 'etc/joe/jmacsrc' + 'etc/joe/joerc' + 'etc/joe/jpicorc' + 'etc/joe/jstarrc' + 'etc/joe/rjoerc') +source=("https://downloads.sourceforge.net/joe-editor/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/j/joe/joe_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('3dd64a994fb3d352a12bf027ef16d57d14ac2577fd63fb6b6e25cae46052befaa7c15dc029bff2f8c3275df90f0343bd46313601055d97277ea4540e109fbe82' + '2a3d35db604de33291a935da538ab885317d03a1c773cc866c532425c241e66a6c6d4e6b6c4524683ddbe823b0a31c9c5dcc3b1998d4a7ae9c6f8fb6dee0a204') + +prepare() { + cd "${srcdir}"/${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/004_debcontrol_syntax.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man + make +} + +package() { + cd "${srcdir}"/${pkgname}-${pkgver} + make DESTDIR="${pkgdir}/" install + rm "${pkgdir}"/usr/share/${pkgname}/syntax/{ant,avr,csharp,debian,dockerfile,groovy,haskell,iptables,java,pascal,php,powershell,r,rust,typescript}.jsf + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/jq/ChangeLog b/jq/ChangeLog new file mode 100644 index 0000000..871dc46 --- /dev/null +++ b/jq/ChangeLog @@ -0,0 +1,20 @@ +1.6-1: +adapted for Hyperbola + +1.6-1: +upstream update + +1.5-6: +oniguruma rebuild + +1.5-4: +fix CVE-2015-8863 (FS#50330) + +1.5-2: +add oniguruma for regexp support + +1.5-1: +upstream update + +1.4-1: +move from AUR into [community] diff --git a/jq/PKGBUILD b/jq/PKGBUILD new file mode 100644 index 0000000..ec30b7b --- /dev/null +++ b/jq/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=jq +pkgver=1.6 +pkgrel=2 +pkgdesc="Command-line JSON processor" +arch=('i686' 'x86_64') +url='https://stedolan.github.io/jq/' +license=('Expat') +depends=('glibc' 'oniguruma') +makedepends=('autoconf' 'automake' 'bison' 'flex' 'python') +source=("https://github.com/stedolan/jq/releases/download/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('5da71f53c325257f1f546a2520fe47828b495c953270df25ea0e37741463fdda72f0ba4d5b05b25114ec30f27a559344c2b024bacabf610759f4e3e9efadb480') + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="${pkgdir}" prefix=/usr install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/json-glib/PKGBUILD b/json-glib/PKGBUILD new file mode 100644 index 0000000..bb84856 --- /dev/null +++ b/json-glib/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=json-glib +pkgver=1.6.0 +_debver=1.6.0 +_debrel=2 +pkgrel=1 +pkgdesc="JSON library built on GLib" +url="https://wiki.gnome.org/Projects/JsonGlib" +arch=(i686 x86_64) +license=(LGPL-2.1) +depends=(glib2) +makedepends=(gobject-introspection meson quilt) +options=(!emptydirs) +source=(https://ftp.gnome.org/pub/GNOME/sources/${pkgname}/${pkgver:0:3}/${pkgname}-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/j/json-glib/json-glib_$_debver-$_debrel.debian.tar.xz) +sha512sums=('0025f913c54a223e6c5f7e65c081afc8ea65ab5a30ed9f30d2d2bb28d17c5695f6e308c64dfdf128e47ddc99d3178421204b5273e78305a096c0b7dfe67dd406' + 'c040d5de852a9475dd76d84ce5d0803beff3663daaf593f5dbc9940a0b6ebbbe37a172de7f50d8dad1a9a786399cf23bf4fc6b75e044937d7b480f952f0ac34f') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgname-$pkgver build -D gtk_doc=disabled -D man=true + ninja -C build +} + +check() { + meson test -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + rm -r "$pkgdir"/usr/{libexec,share}/installed-tests + install -Dm644 $pkgname-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/jsoncpp/PKGBUILD b/jsoncpp/PKGBUILD new file mode 100644 index 0000000..e9be1a1 --- /dev/null +++ b/jsoncpp/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=jsoncpp +pkgver=1.9.5 +pkgrel=1 +pkgdesc="C++ library for interacting with JSON" +url='https://github.com/open-source-parsers/jsoncpp' +arch=('i686' 'x86_64') +license=('Expat' 'Public-Domain') +depends=('gcc-libs') +checkdepends=('python') +makedepends=('cmake' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/open-source-parsers/${pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('1d06e044759b1e1a4cc4960189dd7e001a0a4389d7239a6d59295af995a553518e4e0337b4b4b817e70da5d9731a4c98655af90791b6287870b5ff8d73ad8873') + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=OFF + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/judy/PKGBUILD b/judy/PKGBUILD new file mode 100644 index 0000000..fd639fe --- /dev/null +++ b/judy/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=judy +pkgver=1.0.5 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc="C library creating and accessing dynamic arrays" +license=('LGPL-2.1') +depends=('glibc') +url='http://judy.sourceforge.net/' +source=("https://downloads.sourceforge.net/judy/Judy-${pkgver}.tar.gz") +sha512sums=('1a0d59b092c80d95270a3089cd25ee0ddad1d591101b03784e2e46dfc73bce445a7fb495b449043544a366c09b35b833556053bf3bf65dd00abbd786d26c6980') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr + make -j1 +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/jumpnbump/PKGBUILD b/jumpnbump/PKGBUILD new file mode 100644 index 0000000..61fb73e --- /dev/null +++ b/jumpnbump/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=jumpnbump +pkgver=1.61 +_debver=$pkgver +_debrel=3.1 +_deblevelsver=20191111 +pkgrel=2 +pkgdesc="Cute, free and libre multiplayer platform game with bunnies or other figures" +arch=('i686' 'x86_64') +url='https://libregames.gitlab.io/jumpnbump/' +license=('GPL-2') +depends=('sdl2' 'sdl2_mixer' 'sdl2_net' 'gtk' 'python' 'python-pygobject' 'python-pillow') +makedepends=('quilt' 'bzip2') +groups=('games') +source=("https://deb.debian.org/debian/pool/main/j/jumpnbump/jumpnbump_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/j/jumpnbump/jumpnbump_${_debver}-${_debrel}.debian.tar.xz" + "https://deb.debian.org/debian/pool/main/j/jumpnbump-levels/jumpnbump-levels_${_deblevelsver}.tar.xz") +sha512sums=('1c5999c6d0d00770416a61803e5dac4742e23d787ba6bec3742517e3eab006efe9448e59f3e84278e224e184a8ac8444c7c766b74374761b1aec7cffdc1708c1' + '602f00e0b76ea791dea16ca38763751f7cc474f38fed3a414aff7d2f18ce9bacf83bc27ea44783ee0fe903666f64fdae48577d4043cc1f2d97ef72a5fd40bab7' + '43b3be4f6789c95674cd2acba282558de2640b2ebe0c4ec9e96d934a36e2c68849a3fe771745ddb2dc1342fadbc8fb61c376040292c0d6c295bee494ecf38601') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + + make PREFIX=/usr BINDIR=/usr/games GAMEDATADIR=/usr/share/games all + make PREFIX=/usr BINDIR=/usr/games GAMEDATADIR=/usr/share/games -C menu +} + +package() { + cd ${pkgname}-${pkgver} + + make PREFIX="${pkgdir}/usr/" BINDIR="${pkgdir}/usr/games/" GAMEDATADIR="${pkgdir}/usr/share/games/" install + make PREFIX="${pkgdir}/usr/" BINDIR="${pkgdir}/usr/games/" GAMEDATADIR="${pkgdir}/usr/share/games/" install -C menu + + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname + + # install additional levels + cd ${srcdir}/${pkgname}-levels-${_deblevelsver} + bzip2 -dk *.dat.bz2 + install -Dm644 -t "${pkgdir}/usr/share/games/$pkgname/" *.dat + install -Dm644 debian/copyright -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/jwm/PKGBUILD b/jwm/PKGBUILD new file mode 100644 index 0000000..36405de --- /dev/null +++ b/jwm/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=jwm +pkgver=2.4.6 +pkgrel=1 +pkgdesc="A lightweight window manager for the X11 Window System" +arch=('i686' 'x86_64') +url='https://joewing.net/projects/jwm/' +license=('Expat') +depends=('libx11' 'libxft' 'libxmu' 'libjpeg-turbo' 'libxpm' 'libxinerama' 'libpng' 'cairo' 'librsvg-legacy') +makedepends=('gettext-tiny') +backup=('etc/system.jwmrc') +source=("https://github.com/joewing/jwm/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.xz" + "$pkgname.desktop") +sha512sums=('daf1bf033f2055534bab7ac5a12966df69039d3af2a220d1c9ce2126759019c9e6fea1a50fdf72d30be36d0cd22f243d11010d50f4b0795577b4d74209b82bd6' + '1e033d4edfca67c7de47e92404dc718e4ab2fc716b4f9f4bb21ddca525dcee7828b585f84695e02c176391ed0dcb1c8251772f4a946d0c3d06c4b190347c2cc4') + +prepare() { + cd "$pkgname-$pkgver" + + # fixing example-configuration + sed -i 's|/usr/local/share/|/usr/share/|' contrib/Makefile po/Makefile* example.jwmrc + + # remove non-free applications + sed -i -e 's|Firefox|Iceweasel-UXP|g' -e 's|firefox|iceweasel-uxp|g' example.jwmrc +} + +build() { + cd "$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd "$pkgname-$pkgver" + make BINDIR="$pkgdir/usr/bin" MANDIR="$pkgdir/usr/share/man" DESTDIR="$pkgdir" SYSCONF="$pkgdir/etc" install + install -Dm644 $srcdir/$pkgname.desktop -t "$pkgdir/usr/share/xsessions" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/jwm/jwm.desktop b/jwm/jwm.desktop new file mode 100644 index 0000000..d0da22c --- /dev/null +++ b/jwm/jwm.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=Jwm +Comment=Minimalistic pure X11 window manager with menu/tray support +Type=Application +Terminal=False +Exec=/usr/bin/jwm +TryExec=jwm +Icon=/usr/share/jwm/jwm-red.svg +Keywords=X11;floating;windowmanager; + +[Window Manager] +SessionManaged=true diff --git a/karchive/PKGBUILD b/karchive/PKGBUILD new file mode 100644 index 0000000..ac0c37f --- /dev/null +++ b/karchive/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=karchive +pkgver=5.78.0 +pkgrel=1 +pkgdesc='Qt addon providing access to numerous types of archives' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-3) +depends=(qt-base) +makedepends=(doxygen extra-cmake-modules graphviz qt-tools) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('a7d5285123d80d9de9845aead4a84bf93c58dc094c623c48db5cbe3048fdd0cb544ce25dea95305f5ac624abfe5de3c289cc568231faf3a01e42ae3570298ba8' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LicenseRef-KDE-Accepted-LGPL.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kcaldav/PKGBUILD b/kcaldav/PKGBUILD new file mode 100644 index 0000000..ed321a1 --- /dev/null +++ b/kcaldav/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=kcaldav +pkgver=0.2.4 +_realpkgver=0_2_4 +pkgrel=1 +pkgdesc="Simple, safe, minimal, free and libre CalDAV server" +arch=('i686' 'x86_64') +url='https://kristaps.bsd.lv/kcaldav/' +license=('ISC') +depends=('libbsd' 'sqlite' 'libmd') +makedepends=('expat' 'kcgi') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/kristapsdz/kcaldav/archive/refs/tags/VERSION_${_realpkgver}.tar.gz") +sha512sums=('00bef799af9334a2363789bd5df16f587d6c75ed8a7e2e9742efec946196f25848da661f40a664de6624d2f307d3f94c921cd4d035c47f518a7e69aaeaf039d8') + +prepare() { + mv "${pkgname}-VERSION_${_realpkgver}" "${pkgname}-${pkgver}" +} + +build () { + cd "${pkgname}-${pkgver}" + ./configure PREFIX=/usr + cat >> Makefile.configure <<-EOF + CFLAGS += ${CFLAGS} $(pkg-config libbsd --cflags) \ + -include stdint.h -D_GNU_SOURCE -include errno.h + LDFLAGS += ${LDFLAGS} $(pkg-config libbsd --libs) + EOF + make LDADD_STATIC='' +} + +package () { + cd "${pkgname}-${pkgver}" + make install installcgi DESTDIR="${pkgdir}" \ + CGIPREFIX=/usr/lib/kcaldav \ + HTDOCSPREFIX=/usr/share/kcaldav + + # fix path for manual pages + install -dm755 "${pkgdir}/usr/share/" + mv "${pkgdir}/usr/man" "${pkgdir}/usr/share/" + + awk '/^\/\*/,/\*\// { print ; }' kcaldav.c > COPYING + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/kcgi/PKGBUILD b/kcgi/PKGBUILD new file mode 100644 index 0000000..8266442 --- /dev/null +++ b/kcgi/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=kcgi +pkgver=0.13.4 +_realpkgver=0_13_4 +pkgrel=1 +pkgdesc="Minimal CGI and FastCGI library" +arch=('i686' 'x86_64') +url='https://kristaps.bsd.lv/kcgi/' +license=('ISC') +depends=('glibc') +makedepends=('bmake' 'libseccomp' 'libmd') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/kristapsdz/kcgi/archive/refs/tags/VERSION_${_realpkgver}.tar.gz") +sha512sums=('53acccc5ad59958c359f1c46a5e08a66926d06f6adb9096226a197ed7334c556de9a4af8e0c292090884747cc42762ef1d810e2824daaa0041ba5568a153aea9') + +prepare() { + mv "${pkgname}-VERSION_${_realpkgver}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + ./configure \ + PREFIX=/usr \ + MANDIR=/usr/share/man \ + SBINDIR=/usr/bin \ + LDFLAGS="$LDFLAGS" + echo 'LDADD_LIB_SOCKET += $(LDFLAGS)' >> Makefile.configure + + # enable seccomp filter + sed -i 's/#CPPFLAGS/CPPFLAGS/' Makefile +} + +build() { + cd "${pkgname}-${pkgver}" + bmake +} + +package() { + cd "${pkgname}-${pkgver}" + bmake DESTDIR="$pkgdir" install + strip -x --strip-unneeded "$pkgdir/usr/bin/kfcgi" + install -Dm644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE.md +} diff --git a/kcompletion/PKGBUILD b/kcompletion/PKGBUILD new file mode 100644 index 0000000..5b99c29 --- /dev/null +++ b/kcompletion/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=kcompletion +pkgver=5.78.0 +pkgrel=2 +_debver=$pkgver +_debrel=3 +pkgdesc='Text completion helpers and widgets' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-2.1) +depends=(kwidgetsaddons kconfig) +optdepends=('python-pyqt: for the Python bindings') +makedepends=(doxygen extra-cmake-modules graphviz python-pyqt qt-tools sip) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig} + https://deb.debian.org/debian/pool/main/${pkgname::1}/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('29fbc9c56a34601a4c674c45d04a3d2b79beebe0484c2dc80bf7a9a71de9c8ee82b548bd8d3df521593a60e37f0789d9e23eec5058fab9c3bfee2e53c8d6f58a' + 'SKIP' + 'd551deb098c8e0ea3d133249bd1661786aa1f0e091b037dcbf4b3645440569f59855ddd418c679a2f9744d27a1e3a2c2321ec1b95e1e55bb43186f5504584534') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LGPL-2.1-or-later.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kconfig/PKGBUILD b/kconfig/PKGBUILD new file mode 100644 index 0000000..0597c9f --- /dev/null +++ b/kconfig/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=kconfig +pkgver=5.78.0 +_pkgver=5.78 +pkgrel=2 +_debver=$pkgver +_debrel=4 +pkgdesc='KF5 Configuration system' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-3) +depends=(qt-base) +makedepends=(doxygen extra-cmake-modules python-pyqt qt-tools quilt sip) +optdepends=('python-pyqt: for the Python bindings') +groups=(kf5) +source=(https://download.kde.org/Attic/frameworks/$_pkgver/$pkgname-$pkgver.tar.xz{,.sig} + https://deb.debian.org/debian/pool/main/k/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('cb2f34c5d0e7683629d1cbe7a8dd7b5ebd52d2638bb05ca5c4869173b681f60f468fb94a0f9ef9b27d0eb02d9586f2af3d7939ebcb4fe17d8b11ed7f5a31a8b5' + 'SKIP' + '70602d7021d441080626d748e9c17a62a039a51ed681ac509e16551bb37f4b9f317a3094cac82bfcce056a71eb68188ffcbbcadd38857a3ded6ab19a3aceab20') +validpgpkeys=('53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB') # David Faure + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D KCONFIG_USE_DBUS=OFF \ + -D BUILD_TESTING=OFF \ + -D BUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR=$pkgdir -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LicenseRef-KDE-Accepted-LGPL.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kcoreaddons/PKGBUILD b/kcoreaddons/PKGBUILD new file mode 100644 index 0000000..8e6aa58 --- /dev/null +++ b/kcoreaddons/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=kcoreaddons +pkgver=5.78.0 +pkgrel=2 +_debver=$pkgver +_debrel=4 +pkgdesc='Addons to QtCore' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=('custom:LGPL-3+Qt-Exception-1.1') +depends=(qt-base) +optdepends=('python-pyqt: for the Python bindings') +makedepends=(doxygen extra-cmake-modules graphviz python-pyqt qt-tools sip) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig} + https://deb.debian.org/debian/pool/main/${pkgname::1}/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('0056c993a741a5bc24973f30c578c9b601884aff6c22da21a135c84218a5f796021cba8eb1fecf13428d4e98c97b4e6f1646839c7de62b5f667e579effb726e8' + 'SKIP' + 'a9539fb16dd79edeadd33b5c7a48b8258f6e22b7b0f82238ed56ab55edf5352391f935406556ee9d7a829bbd27f5d47a0082def2487b35093301e1609fd5a3bd') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D_KDE4_DEFAULT_HOME_POSTFIX=4 \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LicenseRef-KDE-Accepted-LGPL.txt -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 $pkgname-$pkgver/LICENSES/Qt-LGPL-exception-1.1.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kcrash/PKGBUILD b/kcrash/PKGBUILD new file mode 100644 index 0000000..7429dfb --- /dev/null +++ b/kcrash/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=kcrash +pkgver=5.78.0 +pkgrel=1 +pkgdesc='Support for application crash analysis and bug report from apps' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-2) +depends=(kcoreaddons kwindowsystem) +optdepends=('drkonqi: KDE crash handler application') +makedepends=(doxygen extra-cmake-modules graphviz qt5-tools) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('abfff0ca4a311b90269dd0755c380ffe8331efa316ba95d6e41fb0cb5cd3dcc95c5cab61ffd8acf0aab6834e1094effd18739db6acfb67b74260bdbb3f150633' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LGPL-2.0-or-later.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kdoctools/PKGBUILD b/kdoctools/PKGBUILD new file mode 100644 index 0000000..f3260dc --- /dev/null +++ b/kdoctools/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=kdoctools +pkgver=5.78.0 +pkgrel=1 +pkgdesc='Documentation generation from docbook' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-3) +depends=(docbook-xsl karchive ki18n) +makedepends=(doxygen extra-cmake-modules gettext-tiny graphviz perl-uri qt-tools) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('76b158099ac6c06c10245ba46a1f6431604ac3768f18fc52c7ce5016ff396a681ebc2466212cdc30da9342dc03beac7777cb27ea29484cc52183d1596ebb1fce' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LicenseRef-KDE-Accepted-LGPL.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/keepassx/PKGBUILD b/keepassx/PKGBUILD new file mode 100644 index 0000000..64e28da --- /dev/null +++ b/keepassx/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=keepassx +pkgver=2.0.3 +_debver=$pkgver +_debrel=2.2 +pkgrel=4 +pkgdesc="Cross Platform Password Manager" +arch=('i686' 'x86_64') +url='https://github.com/keepassx/keepassx' +license=('GPL-2' 'GPL-3' 'LGPL-2.1' 'LGPL-3' 'CC0-1.0' 'Boost-1.0' 'Modified-BSD') +depends=('qt-x11extras' 'shared-mime-info' 'hicolor-icon-theme' 'desktop-file-utils') +makedepends=('cmake' 'qt-base' 'qt-tools' 'zlib' 'libgcrypt' 'optipng' 'intltool' 'quilt') +options=(!emptydirs) +source=("https://www.keepassx.org/releases/$pkgver/$pkgname-$pkgver.tar.gz" + "latest-commit.patch" + "https://deb.debian.org/debian/pool/main/k/$pkgname/${pkgname}_$_debver+git20190121.1682ab9-${_debrel}.debian.tar.xz") +sha512sums=('bf1a4ffa49fc4a6b7a27e6292981c9c13920712b4cd86759a99976f7e0593a243ea14575c57d664ba7e55d2449b5d83bc3d43a64a9a6972335e52234da79d773' + '9403c73aac86e2ff0632a3710d84012e3614c03214ff60d6f0bb044e50450494c632669838af215925100f8675203e83926d6d588f7c7e91d851d1047bbc0cee' + 'bdc6b2b06abdf96e01da50ed5f607f63b3a53c1b2ca4260ba96bb40fbd0ecc49a9673f97bcf0946f6a648728ac84a0566d14fb099c4cd3587e84c0b2fdfcae51') + +prepare() { + cd $pkgname-$pkgver + + patch -p1 -i $srcdir/latest-commit.patch + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_BINDIR=/usr/bin \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DCMAKE_BUILD_TYPE=Release + make -C build +} + +package() { + make DESTDIR="${pkgdir}" -C build install + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/keepassx/latest-commit.patch b/keepassx/latest-commit.patch new file mode 100644 index 0000000..18bfd0a --- /dev/null +++ b/keepassx/latest-commit.patch @@ -0,0 +1,12061 @@ +diff --git a/.travis.yml b/.travis.yml +index fa33cf0..550518a 100644 +--- a/.travis.yml ++++ b/.travis.yml +@@ -5,16 +5,20 @@ compiler: + - gcc + - clang + language: cpp ++sudo: required ++dist: trusty + install: + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq update; fi +- - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq install cmake libqt4-dev libgcrypt11-dev zlib1g-dev libxtst-dev; fi ++ - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq install cmake qtbase5-dev libqt5x11extras5-dev qttools5-dev qttools5-dev-tools libgcrypt20-dev zlib1g-dev libxtst-dev xvfb; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq cmake || brew install cmake; fi +- - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq qt || brew install qt; fi ++ - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq qt5 || brew install qt5; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq libgcrypt || brew install libgcrypt; fi +-before_script: mkdir build && pushd build ++before_script: ++ - if [ "$TRAVIS_OS_NAME" = "osx" ]; then CMAKE_ARGS="-DCMAKE_PREFIX_PATH=/usr/local/opt/qt5"; fi ++ - mkdir build && pushd build + script: +- - cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_GUI_TESTS=ON .. ++ - cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_GUI_TESTS=ON $CMAKE_ARGS .. + - make + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then make test ARGS+="-E testgui --output-on-failure"; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then xvfb-run -a --server-args="-screen 0 800x600x24" make test ARGS+="-R testgui --output-on-failure"; fi +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4dd3ed2..048b8f7 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -21,7 +21,7 @@ endif() + + project(KeePassX) + +-cmake_minimum_required(VERSION 2.6.4) ++cmake_minimum_required(VERSION 2.8.12) + + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) + +@@ -31,7 +31,7 @@ include(CheckCXXSourceCompiles) + + option(WITH_TESTS "Enable building of unit tests" ON) + option(WITH_GUI_TESTS "Enable building of GUI tests" OFF) +-option(WITH_CXX11 "Build with the C++ 11 standard" ON) ++option(WITH_DEV_BUILD "Use only for development. Disables/warns about deprecated methods." OFF) + + set(KEEPASSX_VERSION "2.0.3") + set(KEEPASSX_VERSION_NUM "2.0.3") +@@ -61,7 +61,7 @@ macro(add_gcc_compiler_flags FLAGS) + add_gcc_compiler_cflags("${FLAGS}") + endmacro(add_gcc_compiler_flags) + +-add_definitions(-DQT_NO_KEYWORDS -DQT_NO_EXCEPTIONS -DQT_NO_STL -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII) ++add_definitions(-DQT_NO_KEYWORDS -DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII) + + add_gcc_compiler_flags("-fno-common -fstack-protector --param=ssp-buffer-size=4") + add_gcc_compiler_flags("-Wall -Wextra -Wundef -Wpointer-arith -Wno-long-long") +@@ -100,14 +100,16 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro") + endif() + +-if (WITH_CXX11) +- add_gcc_compiler_cxxflags("-std=c++0x") +- add_gcc_compiler_cflags("-ansi") +- if(APPLE) +- add_gcc_compiler_cxxflags("-stdlib=libc++") +- endif() +-else() +- add_gcc_compiler_flags("-ansi") ++add_gcc_compiler_cxxflags("-std=c++11") ++ ++if(APPLE) ++ add_gcc_compiler_cxxflags("-stdlib=libc++") ++endif() ++ ++add_gcc_compiler_cflags("-ansi") ++ ++if(WITH_DEV_BUILD) ++ add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED) + endif() + + if(MINGW) +@@ -146,19 +148,18 @@ if(WITH_TESTS) + enable_testing() + endif(WITH_TESTS) + +-set(QT_REQUIRED_MODULES QtCore QtGui QtTest) ++find_package(Qt5Core 5.2 REQUIRED) ++find_package(Qt5Concurrent 5.2 REQUIRED) ++find_package(Qt5Widgets 5.2 REQUIRED) ++find_package(Qt5Test 5.2 REQUIRED) ++find_package(Qt5LinguistTools 5.2 REQUIRED) ++set(CMAKE_AUTOMOC ON) + +-find_package(Qt4 4.6.0 REQUIRED ${QT_REQUIRED_MODULES}) +-include(${QT_USE_FILE}) + # Debian sets the the build type to None for package builds. + # Make sure we don't enable asserts there. +-set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG) ++set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:QT_NO_DEBUG>) + +-find_package(Gcrypt REQUIRED) +-if(NOT (${GCRYPT_VERSION_STRING} VERSION_LESS "1.6.0")) +- message(STATUS "Gcrypt ${GCRYPT_VERSION_STRING} supports the SALSA20 cipher") +- set(GCRYPT_HAS_SALSA20 1) +-endif() ++find_package(Gcrypt 1.6.0 REQUIRED) + + find_package(ZLIB REQUIRED) + +@@ -199,10 +200,7 @@ endif() + + include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) + +-if(NOT (${CMAKE_VERSION} VERSION_LESS 2.8.3)) +- set(PRINT_SUMMARY ON) +- include(FeatureSummary) +-endif() ++include(FeatureSummary) + + add_subdirectory(src) + add_subdirectory(share) +diff --git a/README.md b/README.md +index a581789..e0861d3 100644 +--- a/README.md ++++ b/README.md +@@ -49,20 +49,20 @@ Once downloaded, double click on the file to execute the installer. + The following tools must exist within your PATH: + + * make +-* cmake (>= 2.6.4) +-* g++ or clang++ ++* cmake (>= 2.8.12) ++* g++ (>= 4.7) or clang++ (>= 3.0) + + The following libraries are required: + +-* Qt 4 (>= 4.6) +-* libgcrypt ++* Qt 5 (>= 5.2): qtbase and qttools5 ++* libgcrypt (>= 1.6) + * zlib +-* libxi, libxtst (optional for auto-type on X11) ++* libxi, libxtst, qtx11extras (optional for auto-type on X11) + + On Debian you can install them with: + + ```bash +-sudo apt-get install build-essential cmake libqt4-dev libgcrypt11-dev zlib1g-dev libxi-dev libxtst-dev ++sudo apt-get install build-essential cmake qtbase5-dev libqt5x11extras5-dev qttools5-dev qttools5-dev-tools libgcrypt20-dev zlib1g-dev libxi-dev libxtst-dev + ``` + + #### Build Steps +diff --git a/share/translations/CMakeLists.txt b/share/translations/CMakeLists.txt +index b1aa878..7380750 100644 +--- a/share/translations/CMakeLists.txt ++++ b/share/translations/CMakeLists.txt +@@ -17,9 +17,9 @@ file(GLOB TRANSLATION_FILES *.ts) + get_filename_component(TRANSLATION_EN_ABS keepassx_en.ts ABSOLUTE) + list(REMOVE_ITEM TRANSLATION_FILES keepassx_en.ts) + list(REMOVE_ITEM TRANSLATION_FILES ${TRANSLATION_EN_ABS}) +-message(STATUS ${TRANSLATION_FILES}) ++message(STATUS "${TRANSLATION_FILES}") + +-qt4_add_translation(QM_FILES ${TRANSLATION_FILES}) ++qt5_add_translation(QM_FILES ${TRANSLATION_FILES}) + + install(FILES ${QM_FILES} DESTINATION ${DATA_INSTALL_DIR}/translations) + add_custom_target(translations DEPENDS ${QM_FILES}) +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index da8b9ec..da35651 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -54,9 +54,6 @@ set(keepassx_SOURCES + core/ListDeleter.h + core/Metadata.cpp + core/PasswordGenerator.cpp +- core/qlockfile.cpp +- core/qsavefile.cpp +- core/qsavefile_p.h + core/SignalMultiplexer.cpp + core/TimeDelta.cpp + core/TimeInfo.cpp +@@ -64,8 +61,6 @@ set(keepassx_SOURCES + core/Tools.cpp + core/Translator.cpp + core/Uuid.cpp +- core/qcommandlineoption.cpp +- core/qcommandlineparser.cpp + crypto/Crypto.cpp + crypto/CryptoHash.cpp + crypto/Random.cpp +@@ -133,94 +128,10 @@ set(keepassx_SOURCES + streams/SymmetricCipherStream.cpp + ) + +-if(NOT GCRYPT_HAS_SALSA20) +- set(keepassx_SOURCES +- ${keepassx_SOURCES} +- crypto/salsa20/ecrypt-config.h +- crypto/salsa20/ecrypt-machine.h +- crypto/salsa20/ecrypt-portable.h +- crypto/salsa20/ecrypt-sync.h +- crypto/salsa20/salsa20.c +- crypto/SymmetricCipherSalsa20.cpp +- ) +-endif() +- +-if(UNIX) +- set(keepassx_SOURCES +- ${keepassx_SOURCES} +- core/qlockfile_unix.cpp +- ) +-elseif(MINGW) +- set(keepassx_SOURCES +- ${keepassx_SOURCES} +- core/qlockfile_win.cpp +- ) +-endif() +- + set(keepassx_SOURCES_MAINEXE + main.cpp + ) + +-set(keepassx_MOC +- autotype/AutoType.h +- autotype/AutoTypeSelectDialog.h +- autotype/AutoTypeSelectView.h +- autotype/ShortcutWidget.h +- autotype/WindowSelectComboBox.h +- core/AutoTypeAssociations.h +- core/Config.h +- core/Database.h +- core/Entry.h +- core/EntryAttachments.h +- core/EntryAttributes.h +- core/Group.h +- core/InactivityTimer.h +- core/Metadata.h +- core/qsavefile.h +- gui/AboutDialog.h +- gui/Application.h +- gui/ChangeMasterKeyWidget.h +- gui/Clipboard.h +- gui/DatabaseOpenWidget.h +- gui/DatabaseRepairWidget.h +- gui/DatabaseSettingsWidget.h +- gui/DatabaseTabWidget.h +- gui/DatabaseWidget.h +- gui/DatabaseWidgetStateSync.h +- gui/DialogyWidget.h +- gui/DragTabBar.h +- gui/EditWidget.h +- gui/EditWidgetIcons.h +- gui/EditWidgetProperties.h +- gui/IconModels.h +- gui/KeePass1OpenWidget.h +- gui/LineEdit.h +- gui/MainWindow.h +- gui/PasswordEdit.h +- gui/PasswordGeneratorWidget.h +- gui/PasswordComboBox.h +- gui/SettingsWidget.h +- gui/SortFilterHideProxyModel.h +- gui/UnlockDatabaseWidget.h +- gui/WelcomeWidget.h +- gui/entry/AutoTypeAssociationsModel.h +- gui/entry/EditEntryWidget.h +- gui/entry/EntryAttachmentsModel.h +- gui/entry/EntryAttributesModel.h +- gui/entry/EntryHistoryModel.h +- gui/entry/EntryModel.h +- gui/entry/EntryView.h +- gui/group/EditGroupWidget.h +- gui/group/GroupModel.h +- gui/group/GroupView.h +- keys/CompositeKey_p.h +- streams/HashedBlockStream.h +- streams/LayeredStream.h +- streams/qtiocompressor.h +- streams/StoreDataStream.h +- streams/SymmetricCipherStream.h +-) +- + set(keepassx_FORMS + gui/AboutDialog.ui + gui/ChangeMasterKeyWidget.ui +@@ -248,17 +159,18 @@ if(MINGW) + ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) + endif() + +-qt4_wrap_ui(keepassx_SOURCES ${keepassx_FORMS}) +-qt4_wrap_cpp(keepassx_SOURCES ${keepassx_MOC}) ++qt5_wrap_ui(keepassx_SOURCES ${keepassx_FORMS}) + + add_library(keepassx_core STATIC ${keepassx_SOURCES}) + set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) ++target_link_libraries(keepassx_core Qt5::Core Qt5::Concurrent Qt5::Widgets) + + add_executable(${PROGNAME} WIN32 MACOSX_BUNDLE ${keepassx_SOURCES_MAINEXE}) + target_link_libraries(${PROGNAME} + keepassx_core +- ${QT_QTCORE_LIBRARY} +- ${QT_QTGUI_LIBRARY} ++ Qt5::Core ++ Qt5::Concurrent ++ Qt5::Widgets + ${GCRYPT_LIBRARIES} + ${ZLIB_LIBRARIES}) + +@@ -276,7 +188,7 @@ install(TARGETS ${PROGNAME} + + add_subdirectory(autotype) + +-if(APPLE AND NOT (${CMAKE_VERSION} VERSION_LESS 2.8.8)) ++if(APPLE) + if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") + install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" + DESTINATION "${DATA_INSTALL_DIR}") +@@ -294,7 +206,7 @@ if(APPLE AND NOT (${CMAKE_VERSION} VERSION_LESS 2.8.8)) + install_qt4_executable(${PROGNAME}.app "qjpeg;qgif;qico;qtaccessiblewidgets") + endif() + +-if(MINGW AND NOT (${CMAKE_VERSION} VERSION_LESS 2.8.8)) ++if(MINGW ) + set(CPACK_GENERATOR "ZIP") + set(CPACK_STRIP_FILES ON) + set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSX_VERSION_NUM}") +diff --git a/src/autotype/AutoType.cpp b/src/autotype/AutoType.cpp +index f1b7e3e..8032c27 100644 +--- a/src/autotype/AutoType.cpp ++++ b/src/autotype/AutoType.cpp +@@ -32,7 +32,7 @@ + #include "core/Tools.h" + #include "gui/MessageBox.h" + +-AutoType* AutoType::m_instance = Q_NULLPTR; ++AutoType* AutoType::m_instance = nullptr; + + AutoType::AutoType(QObject* parent, bool test) + : QObject(parent) +@@ -40,8 +40,8 @@ AutoType::AutoType(QObject* parent, bool test) + , m_currentGlobalKey(static_cast(0)) + , m_currentGlobalModifiers(0) + , m_pluginLoader(new QPluginLoader(this)) +- , m_plugin(Q_NULLPTR) +- , m_executor(Q_NULLPTR) ++ , m_plugin(nullptr) ++ , m_executor(nullptr) + , m_windowFromGlobal(0) + { + // prevent crash when the plugin has unresolved symbols +@@ -49,7 +49,7 @@ AutoType::AutoType(QObject* parent, bool test) + + QString pluginName = "keepassx-autotype-"; + if (!test) { +- pluginName += Tools::platform(); ++ pluginName += QApplication::platformName(); + } + else { + pluginName += "test"; +@@ -68,7 +68,7 @@ AutoType::~AutoType() + { + if (m_executor) { + delete m_executor; +- m_executor = Q_NULLPTR; ++ m_executor = nullptr; + } + } + +@@ -79,7 +79,7 @@ void AutoType::loadPlugin(const QString& pluginPath) + QObject* pluginInstance = m_pluginLoader->instance(); + if (pluginInstance) { + m_plugin = qobject_cast(pluginInstance); +- m_executor = Q_NULLPTR; ++ m_executor = nullptr; + + if (m_plugin) { + if (m_plugin->isAvailable()) { +@@ -157,7 +157,7 @@ void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow, const QS + + QCoreApplication::processEvents(QEventLoop::AllEvents, 10); + +- Q_FOREACH (AutoTypeAction* action, actions) { ++ for (AutoTypeAction* action : asConst(actions)) { + if (m_plugin->activeWindow() != window) { + qWarning("Active window changed, interrupting auto-type."); + break; +@@ -187,8 +187,9 @@ void AutoType::performGlobalAutoType(const QList& dbList) + QList entryList; + QHash sequenceHash; + +- Q_FOREACH (Database* db, dbList) { +- Q_FOREACH (Entry* entry, db->rootGroup()->entriesRecursive()) { ++ for (Database* db : dbList) { ++ const QList dbEntries = db->rootGroup()->entriesRecursive(); ++ for (Entry* entry : dbEntries) { + QString sequence = autoTypeSequence(entry, windowTitle); + if (!sequence.isEmpty()) { + entryList << entry; +@@ -202,11 +203,11 @@ void AutoType::performGlobalAutoType(const QList& dbList) + QString message = tr("Couldn't find an entry that matches the window title:"); + message.append("\n\n"); + message.append(windowTitle); +- MessageBox::information(Q_NULLPTR, tr("Auto-Type - KeePassX"), message); ++ MessageBox::information(nullptr, tr("Auto-Type - KeePassX"), message); + } + else if ((entryList.size() == 1) && !config()->get("security/autotypeask").toBool()) { + m_inAutoType = false; +- performAutoType(entryList.first(), Q_NULLPTR, sequenceHash[entryList.first()]); ++ performAutoType(entryList.first(), nullptr, sequenceHash[entryList.first()]); + } + else { + m_windowFromGlobal = m_plugin->activeWindow(); +@@ -228,7 +229,7 @@ void AutoType::performAutoTypeFromGlobal(Entry* entry, const QString& sequence) + m_plugin->raiseWindow(m_windowFromGlobal); + + m_inAutoType = false; +- performAutoType(entry, Q_NULLPTR, sequence, m_windowFromGlobal); ++ performAutoType(entry, nullptr, sequence, m_windowFromGlobal); + } + + void AutoType::resetInAutoType() +@@ -242,12 +243,12 @@ void AutoType::unloadPlugin() + { + if (m_executor) { + delete m_executor; +- m_executor = Q_NULLPTR; ++ m_executor = nullptr; + } + + if (m_plugin) { + m_plugin->unload(); +- m_plugin = Q_NULLPTR; ++ m_plugin = nullptr; + } + } + +@@ -300,7 +301,7 @@ bool AutoType::parseActions(const QString& sequence, const Entry* entry, QList AutoType::createActionFromTemplate(const QString& tmpl, c + } + + +- QString placeholder = QString("{%1}").arg(tmplName); +- QString resolved = entry->resolvePlaceholders(placeholder); ++ const QString placeholder = QString("{%1}").arg(tmplName); ++ const QString resolved = entry->resolvePlaceholders(placeholder); + if (placeholder != resolved) { +- Q_FOREACH (const QChar& ch, resolved) { ++ for (const QChar& ch : resolved) { + if (ch == '\n') { + list.append(new AutoTypeKey(Qt::Key_Enter)); + } +@@ -511,7 +512,8 @@ QString AutoType::autoTypeSequence(const Entry* entry, const QString& windowTitl + QString sequence; + if (!windowTitle.isEmpty()) { + bool match = false; +- Q_FOREACH (const AutoTypeAssociations::Association& assoc, entry->autoTypeAssociations()->getAll()) { ++ const QList assocList = entry->autoTypeAssociations()->getAll(); ++ for (const AutoTypeAssociations::Association& assoc : assocList) { + if (windowMatches(windowTitle, assoc.window)) { + if (!assoc.sequence.isEmpty()) { + sequence = assoc.sequence; +diff --git a/src/autotype/AutoType.h b/src/autotype/AutoType.h +index f3d626c..d1c8817 100644 +--- a/src/autotype/AutoType.h ++++ b/src/autotype/AutoType.h +@@ -22,8 +22,6 @@ + #include + #include + +-#include "core/Global.h" +- + class AutoTypeAction; + class AutoTypeExecutor; + class AutoTypePlatformInterface; +@@ -37,7 +35,7 @@ class AutoType : public QObject + + public: + QStringList windowTitles(); +- void performAutoType(const Entry* entry, QWidget* hideWindow = Q_NULLPTR, ++ void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr, + const QString& customSequence = QString(), WId window = 0); + bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); + void unregisterGlobalShortcut(); +@@ -62,7 +60,7 @@ private Q_SLOTS: + void unloadPlugin(); + + private: +- explicit AutoType(QObject* parent = Q_NULLPTR, bool test = false); ++ explicit AutoType(QObject* parent = nullptr, bool test = false); + ~AutoType(); + void loadPlugin(const QString& pluginPath); + bool parseActions(const QString& sequence, const Entry* entry, QList& actions); +diff --git a/src/autotype/AutoTypeAction.h b/src/autotype/AutoTypeAction.h +index 07e050b..490f0d8 100644 +--- a/src/autotype/AutoTypeAction.h ++++ b/src/autotype/AutoTypeAction.h +@@ -66,7 +66,7 @@ public: + class KEEPASSX_EXPORT AutoTypeClearField : public AutoTypeAction + { + public: +- explicit AutoTypeClearField(); ++ AutoTypeClearField(); + AutoTypeAction* clone(); + void accept(AutoTypeExecutor* executor); + }; +diff --git a/src/autotype/AutoTypeSelectDialog.cpp b/src/autotype/AutoTypeSelectDialog.cpp +index 3e7a247..61b534b 100644 +--- a/src/autotype/AutoTypeSelectDialog.cpp ++++ b/src/autotype/AutoTypeSelectDialog.cpp +@@ -20,10 +20,12 @@ + #include + #include + #include ++#include + #include + #include + + #include "autotype/AutoTypeSelectView.h" ++#include "core/Config.h" + #include "core/FilePath.h" + #include "gui/entry/EntryModel.h" + +@@ -39,11 +41,14 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) + setWindowTitle(tr("Auto-Type - KeePassX")); + setWindowIcon(filePath()->applicationIcon()); + +- QSize size(400, 250); ++ QRect screenGeometry = QApplication::desktop()->availableGeometry(QCursor::pos()); ++ QSize size = config()->get("GUI/AutoTypeSelectDialogSize", QSize(400, 250)).toSize(); ++ size.setWidth(qMin(size.width(), screenGeometry.width())); ++ size.setHeight(qMin(size.height(), screenGeometry.height())); + resize(size); + + // move dialog to the center of the screen +- QPoint screenCenter = QApplication::desktop()->availableGeometry(QCursor::pos()).center(); ++ QPoint screenCenter = screenGeometry.center(); + move(screenCenter.x() - (size.width() / 2), screenCenter.y() - (size.height() / 2)); + + QVBoxLayout* layout = new QVBoxLayout(this); +@@ -65,6 +70,15 @@ void AutoTypeSelectDialog::setEntries(const QList& entries, const QHash< + { + m_sequences = sequences; + m_view->setEntryList(entries); ++ ++ m_view->header()->resizeSections(QHeaderView::ResizeToContents); ++} ++ ++void AutoTypeSelectDialog::done(int r) ++{ ++ config()->set("GUI/AutoTypeSelectDialogSize", size()); ++ ++ QDialog::done(r); + } + + void AutoTypeSelectDialog::emitEntryActivated(const QModelIndex& index) +diff --git a/src/autotype/AutoTypeSelectDialog.h b/src/autotype/AutoTypeSelectDialog.h +index 4f455c7..7b3909a 100644 +--- a/src/autotype/AutoTypeSelectDialog.h ++++ b/src/autotype/AutoTypeSelectDialog.h +@@ -22,8 +22,6 @@ + #include + #include + +-#include "core/Global.h" +- + class AutoTypeSelectView; + class Entry; + +@@ -32,12 +30,15 @@ class AutoTypeSelectDialog : public QDialog + Q_OBJECT + + public: +- explicit AutoTypeSelectDialog(QWidget* parent = Q_NULLPTR); ++ explicit AutoTypeSelectDialog(QWidget* parent = nullptr); + void setEntries(const QList& entries, const QHash& sequences); + + Q_SIGNALS: + void entryActivated(Entry* entry, const QString& sequence); + ++public Q_SLOTS: ++ void done(int r) override; ++ + private Q_SLOTS: + void emitEntryActivated(const QModelIndex& index); + void entryRemoved(); +diff --git a/src/autotype/AutoTypeSelectView.h b/src/autotype/AutoTypeSelectView.h +index bcbb262..749f6a9 100644 +--- a/src/autotype/AutoTypeSelectView.h ++++ b/src/autotype/AutoTypeSelectView.h +@@ -18,7 +18,6 @@ + #ifndef KEEPASSX_AUTOTYPESELECTVIEW_H + #define KEEPASSX_AUTOTYPESELECTVIEW_H + +-#include "core/Global.h" + #include "gui/entry/EntryView.h" + + class Entry; +@@ -28,10 +27,10 @@ class AutoTypeSelectView : public EntryView + Q_OBJECT + + public: +- explicit AutoTypeSelectView(QWidget* parent = Q_NULLPTR); ++ explicit AutoTypeSelectView(QWidget* parent = nullptr); + + protected: +- void mouseMoveEvent(QMouseEvent* event) Q_DECL_OVERRIDE; ++ void mouseMoveEvent(QMouseEvent* event) override; + + private Q_SLOTS: + void selectFirstEntry(); +diff --git a/src/autotype/CMakeLists.txt b/src/autotype/CMakeLists.txt +index fb6e512..468de18 100644 +--- a/src/autotype/CMakeLists.txt ++++ b/src/autotype/CMakeLists.txt +@@ -1,12 +1,12 @@ +-if(Q_WS_X11) ++if(UNIX AND NOT APPLE) + find_package(X11) +- if(PRINT_SUMMARY) +- add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") +- add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") +- endif() ++ find_package(Qt5X11Extras 5.2) ++ add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") ++ add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") ++ add_feature_info(Qt5X11Extras Qt5X11Extras_FOUND "The Qt5X11Extras library is required for auto-type") + +- if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND) +- add_subdirectory(x11) ++ if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND AND Qt5X11Extras_FOUND) ++ add_subdirectory(xcb) + endif() + endif() + +diff --git a/src/autotype/ShortcutWidget.h b/src/autotype/ShortcutWidget.h +index 5ff306c..60898ab 100644 +--- a/src/autotype/ShortcutWidget.h ++++ b/src/autotype/ShortcutWidget.h +@@ -20,21 +20,19 @@ + + #include + +-#include "core/Global.h" +- + class ShortcutWidget : public QLineEdit + { + Q_OBJECT + + public: +- explicit ShortcutWidget(QWidget* parent = Q_NULLPTR); ++ explicit ShortcutWidget(QWidget* parent = nullptr); + Qt::Key key() const; + Qt::KeyboardModifiers modifiers() const; + void setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); + + protected: +- void keyPressEvent(QKeyEvent* event) Q_DECL_OVERRIDE; +- void keyReleaseEvent(QKeyEvent* event) Q_DECL_OVERRIDE; ++ void keyPressEvent(QKeyEvent* event) override; ++ void keyReleaseEvent(QKeyEvent* event) override; + + private: + void keyEvent(QKeyEvent* event); +diff --git a/src/autotype/WildcardMatcher.cpp b/src/autotype/WildcardMatcher.cpp +index 3d7cc75..ad83f9b 100644 +--- a/src/autotype/WildcardMatcher.cpp ++++ b/src/autotype/WildcardMatcher.cpp +@@ -70,7 +70,7 @@ bool WildcardMatcher::startOrEndDoesNotMatch(const QStringList& parts) + bool WildcardMatcher::partsMatch(const QStringList& parts) + { + int index = 0; +- Q_FOREACH (const QString& part, parts) { ++ for (const QString& part : parts) { + int matchIndex = getMatchIndex(part, index); + if (noMatchFound(matchIndex)) { + return false; +diff --git a/src/autotype/WindowSelectComboBox.h b/src/autotype/WindowSelectComboBox.h +index 661bc84..244119a 100644 +--- a/src/autotype/WindowSelectComboBox.h ++++ b/src/autotype/WindowSelectComboBox.h +@@ -20,19 +20,17 @@ + + #include + +-#include "core/Global.h" +- + class WindowSelectComboBox : public QComboBox + { + Q_OBJECT + + public: +- explicit WindowSelectComboBox(QWidget* parent = Q_NULLPTR); ++ explicit WindowSelectComboBox(QWidget* parent = nullptr); + void refreshWindowList(); + +- void showPopup() Q_DECL_OVERRIDE; +- QSize sizeHint() const Q_DECL_OVERRIDE; +- QSize minimumSizeHint() const Q_DECL_OVERRIDE; ++ void showPopup() override; ++ QSize sizeHint() const override; ++ QSize minimumSizeHint() const override; + }; + + #endif // KEEPASSX_WINDOWSELECTCOMBOBOX_H +diff --git a/src/autotype/test/AutoTypeTest.cpp b/src/autotype/test/AutoTypeTest.cpp +index a8bcc71..979af8b 100644 +--- a/src/autotype/test/AutoTypeTest.cpp ++++ b/src/autotype/test/AutoTypeTest.cpp +@@ -129,5 +129,3 @@ void AutoTypeExecturorTest::execKey(AutoTypeKey* action) + { + m_platform->addActionKey(action); + } +- +-Q_EXPORT_PLUGIN2(keepassx-autotype-test, AutoTypePlatformTest) +diff --git a/src/autotype/test/AutoTypeTest.h b/src/autotype/test/AutoTypeTest.h +index c791c15..8c6e524 100644 +--- a/src/autotype/test/AutoTypeTest.h ++++ b/src/autotype/test/AutoTypeTest.h +@@ -23,34 +23,34 @@ + #include "autotype/AutoTypePlatformPlugin.h" + #include "autotype/AutoTypeAction.h" + #include "autotype/test/AutoTypeTestInterface.h" +-#include "core/Global.h" + + class AutoTypePlatformTest : public QObject, + public AutoTypePlatformInterface, + public AutoTypeTestInterface + { + Q_OBJECT ++ Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformInterface") + Q_INTERFACES(AutoTypePlatformInterface AutoTypeTestInterface) + + public: +- QString keyToString(Qt::Key key) Q_DECL_OVERRIDE; ++ QString keyToString(Qt::Key key) override; + +- bool isAvailable() Q_DECL_OVERRIDE; +- QStringList windowTitles() Q_DECL_OVERRIDE; +- WId activeWindow() Q_DECL_OVERRIDE; +- QString activeWindowTitle() Q_DECL_OVERRIDE; +- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE; +- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE; +- int platformEventFilter(void* event) Q_DECL_OVERRIDE; +- int initialTimeout() Q_DECL_OVERRIDE; +- bool raiseWindow(WId window) Q_DECL_OVERRIDE; +- AutoTypeExecutor* createExecutor() Q_DECL_OVERRIDE; ++ bool isAvailable() override; ++ QStringList windowTitles() override; ++ WId activeWindow() override; ++ QString activeWindowTitle() override; ++ bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; ++ void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; ++ int platformEventFilter(void* event) override; ++ int initialTimeout() override; ++ bool raiseWindow(WId window) override; ++ AutoTypeExecutor* createExecutor() override; + +- void setActiveWindowTitle(const QString& title) Q_DECL_OVERRIDE; ++ void setActiveWindowTitle(const QString& title) override; + +- QString actionChars() Q_DECL_OVERRIDE; +- int actionCount() Q_DECL_OVERRIDE; +- void clearActions() Q_DECL_OVERRIDE; ++ QString actionChars() override; ++ int actionCount() override; ++ void clearActions() override; + + void addActionChar(AutoTypeChar* action); + void addActionKey(AutoTypeKey* action); +@@ -69,8 +69,8 @@ class AutoTypeExecturorTest : public AutoTypeExecutor + public: + explicit AutoTypeExecturorTest(AutoTypePlatformTest* platform); + +- void execChar(AutoTypeChar* action) Q_DECL_OVERRIDE; +- void execKey(AutoTypeKey* action) Q_DECL_OVERRIDE; ++ void execChar(AutoTypeChar* action) override; ++ void execKey(AutoTypeKey* action) override; + + private: + AutoTypePlatformTest* const m_platform; +diff --git a/src/autotype/test/CMakeLists.txt b/src/autotype/test/CMakeLists.txt +index 749f7d5..9b3dbd4 100644 +--- a/src/autotype/test/CMakeLists.txt ++++ b/src/autotype/test/CMakeLists.txt +@@ -2,11 +2,5 @@ set(autotype_test_SOURCES + AutoTypeTest.cpp + ) + +-set(autotype_test_MOC +- AutoTypeTest.h +-) +- +-qt4_wrap_cpp(autotype_test_SOURCES ${autotype_test_MOC}) +- + add_library(keepassx-autotype-test MODULE ${autotype_test_SOURCES}) +-target_link_libraries(keepassx-autotype-test testautotype ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}) ++target_link_libraries(keepassx-autotype-test testautotype Qt5::Core Qt5::Widgets) +diff --git a/src/autotype/x11/CMakeLists.txt b/src/autotype/x11/CMakeLists.txt +deleted file mode 100644 +index cc401f7..0000000 +--- a/src/autotype/x11/CMakeLists.txt ++++ /dev/null +@@ -1,17 +0,0 @@ +-include_directories(SYSTEM ${X11_X11_INCLUDE_PATH}) +- +-set(autotype_X11_SOURCES +- AutoTypeX11.cpp +-) +- +-set(autotype_X11_MOC +- AutoTypeX11.h +-) +- +-qt4_wrap_cpp(autotype_X11_SOURCES ${autotype_X11_MOC}) +- +-add_library(keepassx-autotype-x11 MODULE ${autotype_X11_SOURCES}) +-target_link_libraries(keepassx-autotype-x11 ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) +-install(TARGETS keepassx-autotype-x11 +- BUNDLE DESTINATION . COMPONENT Runtime +- LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) +diff --git a/src/autotype/x11/AutoTypeX11.cpp b/src/autotype/xcb/AutoTypeXCB.cpp +similarity index 90% +rename from src/autotype/x11/AutoTypeX11.cpp +rename to src/autotype/xcb/AutoTypeXCB.cpp +index b185ad6..becb65e 100644 +--- a/src/autotype/x11/AutoTypeX11.cpp ++++ b/src/autotype/xcb/AutoTypeXCB.cpp +@@ -16,14 +16,16 @@ + * along with this program. If not, see . + */ + +-#include "AutoTypeX11.h" ++#include "AutoTypeXCB.h" + #include "KeySymMap.h" ++#include "core/Tools.h" + + #include ++#include + + bool AutoTypePlatformX11::m_catchXErrors = false; + bool AutoTypePlatformX11::m_xErrorOccured = false; +-int (*AutoTypePlatformX11::m_oldXErrorHandler)(Display*, XErrorEvent*) = Q_NULLPTR; ++int (*AutoTypePlatformX11::m_oldXErrorHandler)(Display*, XErrorEvent*) = nullptr; + + AutoTypePlatformX11::AutoTypePlatformX11() + { +@@ -46,8 +48,8 @@ AutoTypePlatformX11::AutoTypePlatformX11() + m_currentGlobalKey = static_cast(0); + m_currentGlobalModifiers = 0; + +- m_keysymTable = Q_NULLPTR; +- m_xkb = Q_NULLPTR; ++ m_keysymTable = nullptr; ++ m_xkb = nullptr; + m_remapKeycode = 0; + m_currentRemapKeysym = NoSymbol; + m_modifierMask = ControlMask | ShiftMask | Mod1Mask | Mod4Mask; +@@ -119,7 +121,7 @@ WId AutoTypePlatformX11::activeWindow() + + Window root; + Window parent; +- Window* children = Q_NULLPTR; ++ Window* children = nullptr; + unsigned int numChildren; + tree = XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren); + window = parent; +@@ -202,22 +204,42 @@ void AutoTypePlatformX11::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModi + + int AutoTypePlatformX11::platformEventFilter(void* event) + { +- XEvent* xevent = static_cast(event); ++ xcb_generic_event_t* genericEvent = static_cast(event); ++ quint8 type = genericEvent->response_type & 0x7f; ++ ++ if (type == XCB_KEY_PRESS || type == XCB_KEY_RELEASE) { ++ xcb_key_press_event_t* keyPressEvent = static_cast(event); ++ if (keyPressEvent->detail == m_currentGlobalKeycode ++ && (keyPressEvent->state & m_modifierMask) == m_currentGlobalNativeModifiers ++ && (!QApplication::activeWindow() || QApplication::activeWindow()->isMinimized()) ++ && m_loaded) { ++ if (type == XCB_KEY_PRESS) { ++ Q_EMIT globalShortcutTriggered(); ++ } + +- if ((xevent->type == KeyPress || xevent->type == KeyRelease) +- && m_currentGlobalKey +- && xevent->xkey.keycode == m_currentGlobalKeycode +- && (xevent->xkey.state & m_modifierMask) == m_currentGlobalNativeModifiers +- && (!QApplication::activeWindow() || QApplication::activeWindow()->isMinimized()) +- && m_loaded) { +- if (xevent->type == KeyPress) { +- Q_EMIT globalShortcutTriggered(); ++ return 1; + } +- return 1; + } +- if (xevent->type == MappingNotify && m_loaded) { +- XRefreshKeyboardMapping(reinterpret_cast(xevent)); +- updateKeymap(); ++ else if (type == XCB_MAPPING_NOTIFY) { ++ xcb_mapping_notify_event_t* mappingNotifyEvent = static_cast(event); ++ if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD ++ || mappingNotifyEvent->request == XCB_MAPPING_MODIFIER) ++ { ++ XMappingEvent xMappingEvent; ++ memset(&xMappingEvent, 0, sizeof(xMappingEvent)); ++ xMappingEvent.type = MappingNotify; ++ xMappingEvent.display = m_dpy; ++ if (mappingNotifyEvent->request == XCB_MAPPING_KEYBOARD) { ++ xMappingEvent.request = MappingKeyboard; ++ } ++ else { ++ xMappingEvent.request = MappingModifier; ++ } ++ xMappingEvent.first_keycode = mappingNotifyEvent->first_keycode; ++ xMappingEvent.count = mappingNotifyEvent->count; ++ XRefreshKeyboardMapping(&xMappingEvent); ++ updateKeymap(); ++ } + } + + return -1; +@@ -236,7 +258,7 @@ QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist) + int format; + unsigned long nitems; + unsigned long after; +- unsigned char* data = Q_NULLPTR; ++ unsigned char* data = nullptr; + + // the window manager spec says we should read _NET_WM_NAME first, then fall back to WM_NAME + +@@ -250,7 +272,7 @@ QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist) + XTextProperty textProp; + retVal = XGetTextProperty(m_dpy, window, &textProp, m_atomWmName); + if ((retVal != 0) && textProp.value) { +- char** textList = Q_NULLPTR; ++ char** textList = nullptr; + int count; + + if (textProp.encoding == m_atomUtf8String) { +@@ -302,8 +324,8 @@ QString AutoTypePlatformX11::windowClassName(Window window) + QString className; + + XClassHint wmClass; +- wmClass.res_name = Q_NULLPTR; +- wmClass.res_class = Q_NULLPTR; ++ wmClass.res_name = nullptr; ++ wmClass.res_class = nullptr; + + if (XGetClassHint(m_dpy, window, &wmClass) && wmClass.res_name) { + className = QString::fromLocal8Bit(wmClass.res_name); +@@ -322,7 +344,7 @@ QList AutoTypePlatformX11::widgetsToX11Windows(const QWidgetList& widget + { + QList windows; + +- Q_FOREACH (const QWidget* widget, widgetList) { ++ for (const QWidget* widget : widgetList) { + windows.append(widget->effectiveWinId()); + } + +@@ -342,7 +364,7 @@ QStringList AutoTypePlatformX11::windowTitlesRecursive(Window window) + + Window root; + Window parent; +- Window* children = Q_NULLPTR; ++ Window* children = nullptr; + unsigned int numChildren; + if (XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren) && children) { + for (uint i = 0; i < numChildren; i++) { +@@ -362,7 +384,7 @@ bool AutoTypePlatformX11::isTopLevelWindow(Window window) + int format; + unsigned long nitems; + unsigned long after; +- unsigned char* data = Q_NULLPTR; ++ unsigned char* data = nullptr; + int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 2, False, m_atomWmState, &type, &format, + &nitems, &after, &data); + +@@ -391,9 +413,9 @@ KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch) + } + + /* mapping table generated from keysymdef.h */ +- const uint* match = qBinaryFind(m_unicodeToKeysymKeys, +- m_unicodeToKeysymKeys + m_unicodeToKeysymLen, +- unicode); ++ const uint* match = Tools::binaryFind(m_unicodeToKeysymKeys, ++ m_unicodeToKeysymKeys + m_unicodeToKeysymLen, ++ unicode); + int index = match - m_unicodeToKeysymKeys; + if (index != m_unicodeToKeysymLen) { + return m_unicodeToKeysymValues[index]; +@@ -514,7 +536,7 @@ void AutoTypePlatformX11::updateKeymap() + timespec ts; + ts.tv_sec = 0; + ts.tv_nsec = 30 * 1000 * 1000; +- nanosleep(&ts, Q_NULLPTR); ++ nanosleep(&ts, nullptr); + } + + bool AutoTypePlatformX11::isRemapKeycodeValid() +@@ -565,7 +587,7 @@ XkbDescPtr AutoTypePlatformX11::getKeyboard() + XID keyboard_id = XkbUseCoreKbd; + XDeviceInfo* devices = XListInputDevices(m_dpy, &num_devices); + if (!devices) { +- return Q_NULLPTR; ++ return nullptr; + } + + for (int i = 0; i < num_devices; i++) { +@@ -721,7 +743,7 @@ void AutoTypePlatformX11::SendKeyPressedEvent(KeySym keysym) + event.y = 1; + event.x_root = 1; + event.y_root = 1; +- event.same_screen = TRUE; ++ event.same_screen = True; + + Window root, child; + int root_x, root_y, x, y; +@@ -854,5 +876,3 @@ bool AutoTypePlatformX11::raiseWindow(WId window) + + return true; + } +- +-Q_EXPORT_PLUGIN2(keepassx-autotype-x11, AutoTypePlatformX11) +diff --git a/src/autotype/x11/AutoTypeX11.h b/src/autotype/xcb/AutoTypeXCB.h +similarity index 83% +rename from src/autotype/x11/AutoTypeX11.h +rename to src/autotype/xcb/AutoTypeXCB.h +index 99abb23..8adee77 100644 +--- a/src/autotype/x11/AutoTypeX11.h ++++ b/src/autotype/xcb/AutoTypeXCB.h +@@ -16,8 +16,8 @@ + * along with this program. If not, see . + */ + +-#ifndef KEEPASSX_AUTOTYPEX11_H +-#define KEEPASSX_AUTOTYPEX11_H ++#ifndef KEEPASSX_AUTOTYPEXCB_H ++#define KEEPASSX_AUTOTYPEXCB_H + + #include + #include +@@ -31,28 +31,28 @@ + + #include "autotype/AutoTypePlatformPlugin.h" + #include "autotype/AutoTypeAction.h" +-#include "core/Global.h" + + #define N_MOD_INDICES (Mod5MapIndex + 1) + + class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface + { + Q_OBJECT ++ Q_PLUGIN_METADATA(IID "org.keepassx.AutoTypePlatformX11") + Q_INTERFACES(AutoTypePlatformInterface) + + public: + AutoTypePlatformX11(); +- bool isAvailable() Q_DECL_OVERRIDE; +- void unload() Q_DECL_OVERRIDE; +- QStringList windowTitles() Q_DECL_OVERRIDE; +- WId activeWindow() Q_DECL_OVERRIDE; +- QString activeWindowTitle() Q_DECL_OVERRIDE; +- bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE; +- void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE; +- int platformEventFilter(void* event) Q_DECL_OVERRIDE; +- int initialTimeout() Q_DECL_OVERRIDE; +- bool raiseWindow(WId window) Q_DECL_OVERRIDE; +- AutoTypeExecutor* createExecutor() Q_DECL_OVERRIDE; ++ bool isAvailable() override; ++ void unload() override; ++ QStringList windowTitles() override; ++ WId activeWindow() override; ++ QString activeWindowTitle() override; ++ bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; ++ void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) override; ++ int platformEventFilter(void* event) override; ++ int initialTimeout() override; ++ bool raiseWindow(WId window) override; ++ AutoTypeExecutor* createExecutor() override; + + KeySym charToKeySym(const QChar& ch); + KeySym keyToKeySym(Qt::Key key); +@@ -124,11 +124,11 @@ class AutoTypeExecturorX11 : public AutoTypeExecutor + public: + explicit AutoTypeExecturorX11(AutoTypePlatformX11* platform); + +- void execChar(AutoTypeChar* action) Q_DECL_OVERRIDE; +- void execKey(AutoTypeKey* action) Q_DECL_OVERRIDE; ++ void execChar(AutoTypeChar* action) override; ++ void execKey(AutoTypeKey* action) override; + + private: + AutoTypePlatformX11* const m_platform; + }; + +-#endif // KEEPASSX_AUTOTYPEX11_H ++#endif // KEEPASSX_AUTOTYPEXCB_H +diff --git a/src/autotype/xcb/CMakeLists.txt b/src/autotype/xcb/CMakeLists.txt +new file mode 100644 +index 0000000..3b56b31 +--- /dev/null ++++ b/src/autotype/xcb/CMakeLists.txt +@@ -0,0 +1,11 @@ ++include_directories(SYSTEM ${X11_X11_INCLUDE_PATH}) ++ ++set(autotype_XCB_SOURCES ++ AutoTypeXCB.cpp ++) ++ ++add_library(keepassx-autotype-xcb MODULE ${autotype_XCB_SOURCES}) ++target_link_libraries(keepassx-autotype-xcb Qt5::Core Qt5::Widgets Qt5::X11Extras ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) ++install(TARGETS keepassx-autotype-xcb ++ BUNDLE DESTINATION . COMPONENT Runtime ++ LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) +diff --git a/src/autotype/x11/KeySymMap.h b/src/autotype/xcb/KeySymMap.h +similarity index 100% +rename from src/autotype/x11/KeySymMap.h +rename to src/autotype/xcb/KeySymMap.h +diff --git a/src/autotype/x11/keysymmap.py b/src/autotype/xcb/keysymmap.py +similarity index 100% +rename from src/autotype/x11/keysymmap.py +rename to src/autotype/xcb/keysymmap.py +diff --git a/src/config-keepassx.h.cmake b/src/config-keepassx.h.cmake +index 197c0d3..dc418b6 100644 +--- a/src/config-keepassx.h.cmake ++++ b/src/config-keepassx.h.cmake +@@ -16,6 +16,4 @@ + #cmakedefine HAVE_RLIMIT_CORE 1 + #cmakedefine HAVE_PT_DENY_ATTACH 1 + +-#cmakedefine GCRYPT_HAS_SALSA20 +- + #endif // KEEPASSX_CONFIG_KEEPASSX_H +diff --git a/src/core/AutoTypeAssociations.h b/src/core/AutoTypeAssociations.h +index 1b5871b..491a5db 100644 +--- a/src/core/AutoTypeAssociations.h ++++ b/src/core/AutoTypeAssociations.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class AutoTypeAssociations : public QObject + { + Q_OBJECT +@@ -36,7 +34,7 @@ public: + bool operator!=(const AutoTypeAssociations::Association& other) const; + }; + +- explicit AutoTypeAssociations(QObject* parent = Q_NULLPTR); ++ explicit AutoTypeAssociations(QObject* parent = nullptr); + void copyDataFrom(const AutoTypeAssociations* other); + void add(const AutoTypeAssociations::Association& association); + void remove(int index); +diff --git a/src/core/Config.cpp b/src/core/Config.cpp +index 046a0fe..5b06c22 100644 +--- a/src/core/Config.cpp ++++ b/src/core/Config.cpp +@@ -18,12 +18,12 @@ + #include "Config.h" + + #include +-#include + #include + #include ++#include + #include + +-Config* Config::m_instance(Q_NULLPTR); ++Config* Config::m_instance(nullptr); + + QVariant Config::get(const QString& key) + { +@@ -53,7 +53,7 @@ Config::Config(QObject* parent) + QString homePath = QDir::homePath(); + + #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) +- // we can't use QDesktopServices on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME ++ // we can't use QStandardPaths on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME + QByteArray env = qgetenv("XDG_CONFIG_HOME"); + if (env.isEmpty()) { + userPath = homePath; +@@ -70,7 +70,7 @@ Config::Config(QObject* parent) + + userPath += "/keepassx/"; + #else +- userPath = QDir::fromNativeSeparators(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); ++ userPath = QDir::fromNativeSeparators(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); + // storageLocation() appends the application name ("/keepassx") to the end + userPath += "/"; + #endif +diff --git a/src/core/Config.h b/src/core/Config.h +index ca0f74c..09aa02f 100644 +--- a/src/core/Config.h ++++ b/src/core/Config.h +@@ -21,8 +21,6 @@ + #include + #include + +-#include "core/Global.h" +- + class QSettings; + + class Config : public QObject +diff --git a/src/core/Database.cpp b/src/core/Database.cpp +index 098cc06..9e01d3b 100644 +--- a/src/core/Database.cpp ++++ b/src/core/Database.cpp +@@ -23,7 +23,6 @@ + + #include "core/Group.h" + #include "core/Metadata.h" +-#include "core/Tools.h" + #include "crypto/Random.h" + #include "format/KeePass2.h" + +@@ -92,20 +91,22 @@ Entry* Database::resolveEntry(const Uuid& uuid) + + Entry* Database::recFindEntry(const Uuid& uuid, Group* group) + { +- Q_FOREACH (Entry* entry, group->entries()) { ++ const QList entryList = group->entries(); ++ for (Entry* entry : entryList) { + if (entry->uuid() == uuid) { + return entry; + } + } + +- Q_FOREACH (Group* child, group->children()) { ++ const QList children = group->children(); ++ for (Group* child : children) { + Entry* result = recFindEntry(uuid, child); + if (result) { + return result; + } + } + +- return Q_NULLPTR; ++ return nullptr; + } + + Group* Database::resolveGroup(const Uuid& uuid) +@@ -119,14 +120,15 @@ Group* Database::recFindGroup(const Uuid& uuid, Group* group) + return group; + } + +- Q_FOREACH (Group* child, group->children()) { ++ const QList children = group->children(); ++ for (Group* child : children) { + Group* result = recFindGroup(uuid, child); + if (result) { + return result; + } + } + +- return Q_NULLPTR; ++ return nullptr; + } + + QList Database::deletedObjects() +@@ -143,7 +145,7 @@ void Database::addDeletedObject(const DeletedObject& delObj) + void Database::addDeletedObject(const Uuid& uuid) + { + DeletedObject delObj; +- delObj.deletionTime = Tools::currentDateTimeUtc(); ++ delObj.deletionTime = QDateTime::currentDateTimeUtc(); + delObj.uuid = uuid; + + addDeletedObject(delObj); +@@ -223,7 +225,7 @@ bool Database::setKey(const CompositeKey& key, const QByteArray& transformSeed, + m_data.transformedMasterKey = transformedMasterKey; + m_data.hasKey = true; + if (updateChangedTime) { +- m_metadata->setMasterKeyChanged(Tools::currentDateTimeUtc()); ++ m_metadata->setMasterKeyChanged(QDateTime::currentDateTimeUtc()); + } + Q_EMIT modifiedImmediate(); + +diff --git a/src/core/Database.h b/src/core/Database.h +index 97ccad2..6fde3c6 100644 +--- a/src/core/Database.h ++++ b/src/core/Database.h +@@ -20,6 +20,7 @@ + + #include + #include ++#include + + #include "core/Uuid.h" + #include "keys/CompositeKey.h" +diff --git a/src/core/DatabaseIcons.cpp b/src/core/DatabaseIcons.cpp +index d6e816f..4e62f79 100644 +--- a/src/core/DatabaseIcons.cpp ++++ b/src/core/DatabaseIcons.cpp +@@ -19,7 +19,7 @@ + + #include "core/FilePath.h" + +-DatabaseIcons* DatabaseIcons::m_instance(Q_NULLPTR); ++DatabaseIcons* DatabaseIcons::m_instance(nullptr); + const int DatabaseIcons::IconCount(69); + const int DatabaseIcons::ExpiredIconIndex(45); + const char* const DatabaseIcons::m_indexToName[] = { +diff --git a/src/core/DatabaseIcons.h b/src/core/DatabaseIcons.h +index 68d1e0c..a1d9480 100644 +--- a/src/core/DatabaseIcons.h ++++ b/src/core/DatabaseIcons.h +@@ -23,8 +23,6 @@ + #include + #include + +-#include "core/Global.h" +- + class DatabaseIcons + { + public: +diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp +index 1bc89e9..d90a33f 100644 +--- a/src/core/Entry.cpp ++++ b/src/core/Entry.cpp +@@ -21,7 +21,6 @@ + #include "core/DatabaseIcons.h" + #include "core/Group.h" + #include "core/Metadata.h" +-#include "core/Tools.h" + + const int Entry::DefaultIconNumber = 0; + +@@ -29,7 +28,7 @@ Entry::Entry() + : m_attributes(new EntryAttributes(this)) + , m_attachments(new EntryAttachments(this)) + , m_autoTypeAssociations(new AutoTypeAssociations(this)) +- , m_tmpHistoryItem(Q_NULLPTR) ++ , m_tmpHistoryItem(nullptr) + , m_modifiedSinceBegin(false) + , m_updateTimeinfo(true) + { +@@ -74,8 +73,8 @@ template inline bool Entry::set(T& property, const T& value) + void Entry::updateTimeinfo() + { + if (m_updateTimeinfo) { +- m_data.timeInfo.setLastModificationTime(Tools::currentDateTimeUtc()); +- m_data.timeInfo.setLastAccessTime(Tools::currentDateTimeUtc()); ++ m_data.timeInfo.setLastModificationTime(QDateTime::currentDateTimeUtc()); ++ m_data.timeInfo.setLastAccessTime(QDateTime::currentDateTimeUtc()); + } + } + +@@ -223,7 +222,7 @@ QString Entry::notes() const + + bool Entry::isExpired() const + { +- return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Tools::currentDateTimeUtc(); ++ return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < QDateTime::currentDateTimeUtc(); + } + + EntryAttributes* Entry::attributes() +@@ -383,7 +382,7 @@ void Entry::removeHistoryItems(const QList& historyEntries) + return; + } + +- Q_FOREACH (Entry* entry, historyEntries) { ++ for (Entry* entry : historyEntries) { + Q_ASSERT(!entry->parent()); + Q_ASSERT(entry->uuid() == uuid()); + Q_ASSERT(m_history.contains(entry)); +@@ -432,8 +431,8 @@ void Entry::truncateHistory() + if (size <= histMaxSize) { + size += historyItem->attributes()->attributesSize(); + +- QSet newAttachments = historyItem->attachments()->values().toSet() - foundAttachements; +- Q_FOREACH (const QByteArray& attachment, newAttachments) { ++ const QSet newAttachments = historyItem->attachments()->values().toSet() - foundAttachements; ++ for (const QByteArray& attachment : newAttachments) { + size += attachment.size(); + } + foundAttachements += newAttachments; +@@ -462,7 +461,7 @@ Entry* Entry::clone(CloneFlags flags) const + entry->m_attachments->copyDataFrom(m_attachments); + entry->m_autoTypeAssociations->copyDataFrom(this->m_autoTypeAssociations); + if (flags & CloneIncludeHistory) { +- Q_FOREACH (Entry* historyItem, m_history) { ++ for (Entry* historyItem : m_history) { + Entry* historyItemClone = historyItem->clone(flags & ~CloneIncludeHistory & ~CloneNewUuid); + historyItemClone->setUpdateTimeinfo(false); + historyItemClone->setUuid(entry->uuid()); +@@ -473,7 +472,7 @@ Entry* Entry::clone(CloneFlags flags) const + entry->setUpdateTimeinfo(true); + + if (flags & CloneResetTimeInfo) { +- QDateTime now = Tools::currentDateTimeUtc(); ++ QDateTime now = QDateTime::currentDateTimeUtc(); + entry->m_data.timeInfo.setCreationTime(now); + entry->m_data.timeInfo.setLastModificationTime(now); + entry->m_data.timeInfo.setLastAccessTime(now); +@@ -509,7 +508,7 @@ void Entry::beginUpdate() + m_modifiedSinceBegin = false; + } + +-void Entry::endUpdate() ++bool Entry::endUpdate() + { + Q_ASSERT(m_tmpHistoryItem); + if (m_modifiedSinceBegin) { +@@ -521,7 +520,9 @@ void Entry::endUpdate() + delete m_tmpHistoryItem; + } + +- m_tmpHistoryItem = Q_NULLPTR; ++ m_tmpHistoryItem = nullptr; ++ ++ return m_modifiedSinceBegin; + } + + void Entry::updateModifiedSinceBegin() +@@ -567,7 +568,7 @@ void Entry::setGroup(Group* group) + QObject::setParent(group); + + if (m_updateTimeinfo) { +- m_data.timeInfo.setLocationChanged(Tools::currentDateTimeUtc()); ++ m_data.timeInfo.setLocationChanged(QDateTime::currentDateTimeUtc()); + } + } + +@@ -582,7 +583,7 @@ const Database* Entry::database() const + return m_group->database(); + } + else { +- return Q_NULLPTR; ++ return nullptr; + } + } + +diff --git a/src/core/Entry.h b/src/core/Entry.h +index 3044dc8..0b4d482 100644 +--- a/src/core/Entry.h ++++ b/src/core/Entry.h +@@ -29,7 +29,6 @@ + #include "core/AutoTypeAssociations.h" + #include "core/EntryAttachments.h" + #include "core/EntryAttributes.h" +-#include "core/Global.h" + #include "core/TimeInfo.h" + #include "core/Uuid.h" + +@@ -134,7 +133,7 @@ public: + * if the entry has been changed. + */ + void beginUpdate(); +- void endUpdate(); ++ bool endUpdate(); + + Group* group(); + const Group* group() const; +diff --git a/src/core/EntryAttachments.h b/src/core/EntryAttachments.h +index 3446b31..903ca10 100644 +--- a/src/core/EntryAttachments.h ++++ b/src/core/EntryAttachments.h +@@ -21,14 +21,12 @@ + #include + #include + +-#include "core/Global.h" +- + class EntryAttachments : public QObject + { + Q_OBJECT + + public: +- explicit EntryAttachments(QObject* parent = Q_NULLPTR); ++ explicit EntryAttachments(QObject* parent = nullptr); + QList keys() const; + bool hasKey(const QString& key) const; + QList values() const; +diff --git a/src/core/EntryAttributes.cpp b/src/core/EntryAttributes.cpp +index 01dcf96..5b30c70 100644 +--- a/src/core/EntryAttributes.cpp ++++ b/src/core/EntryAttributes.cpp +@@ -44,7 +44,8 @@ bool EntryAttributes::hasKey(const QString& key) const + QList EntryAttributes::customKeys() + { + QList customKeys; +- Q_FOREACH (const QString& key, keys()) { ++ const QList keyList = keys(); ++ for (const QString& key : keyList) { + if (!isDefaultAttribute(key)) { + customKeys.append(key); + } +@@ -162,14 +163,16 @@ void EntryAttributes::copyCustomKeysFrom(const EntryAttributes* other) + Q_EMIT aboutToBeReset(); + + // remove all non-default keys +- Q_FOREACH (const QString& key, keys()) { ++ const QList keyList = keys(); ++ for (const QString& key : keyList) { + if (!isDefaultAttribute(key)) { + m_attributes.remove(key); + m_protectedAttributes.remove(key); + } + } + +- Q_FOREACH (const QString& key, other->keys()) { ++ const QList otherKeyList = other->keys(); ++ for (const QString& key : otherKeyList) { + if (!isDefaultAttribute(key)) { + m_attributes.insert(key, other->value(key)); + if (other->isProtected(key)) { +@@ -189,7 +192,8 @@ bool EntryAttributes::areCustomKeysDifferent(const EntryAttributes* other) + return true; + } + +- Q_FOREACH (const QString& key, keys()) { ++ const QList keyList = keys(); ++ for (const QString& key : keyList) { + if (isDefaultAttribute(key)) { + continue; + } +@@ -234,7 +238,7 @@ void EntryAttributes::clear() + m_attributes.clear(); + m_protectedAttributes.clear(); + +- Q_FOREACH (const QString& key, DefaultAttributes) { ++ for (const QString& key : DefaultAttributes) { + m_attributes.insert(key, ""); + } + +diff --git a/src/core/EntryAttributes.h b/src/core/EntryAttributes.h +index 334eb0a..c6bbf29 100644 +--- a/src/core/EntryAttributes.h ++++ b/src/core/EntryAttributes.h +@@ -23,14 +23,12 @@ + #include + #include + +-#include "core/Global.h" +- + class EntryAttributes : public QObject + { + Q_OBJECT + + public: +- explicit EntryAttributes(QObject* parent = Q_NULLPTR); ++ explicit EntryAttributes(QObject* parent = nullptr); + QList keys() const; + bool hasKey(const QString& key) const; + QList customKeys(); +diff --git a/src/core/EntrySearcher.cpp b/src/core/EntrySearcher.cpp +index 82a553e..c0360a3 100644 +--- a/src/core/EntrySearcher.cpp ++++ b/src/core/EntrySearcher.cpp +@@ -19,7 +19,8 @@ + + #include "core/Group.h" + +-QList EntrySearcher::search(const QString &searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity) ++QList EntrySearcher::search(const QString& searchTerm, const Group* group, ++ Qt::CaseSensitivity caseSensitivity) + { + if (!group->resolveSearchingEnabled()) { + return QList(); +@@ -28,14 +29,18 @@ QList EntrySearcher::search(const QString &searchTerm, const Group* grou + return searchEntries(searchTerm, group, caseSensitivity); + } + +-QList EntrySearcher::searchEntries(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity) ++QList EntrySearcher::searchEntries(const QString& searchTerm, const Group* group, ++ Qt::CaseSensitivity caseSensitivity) + { + QList searchResult; + +- Q_FOREACH (Entry* entry, group->entries()) { +- searchResult.append(matchEntry(searchTerm, entry, caseSensitivity)); ++ const QList entryList = group->entries(); ++ for (Entry* entry : entryList) { ++ searchResult.append(matchEntry(searchTerm, entry, caseSensitivity)); + } +- Q_FOREACH (Group* childGroup, group->children()) { ++ ++ const QList children = group->children(); ++ for (Group* childGroup : children) { + if (childGroup->searchingEnabled() != Group::Disable) { + searchResult.append(searchEntries(searchTerm, childGroup, caseSensitivity)); + } +@@ -44,10 +49,11 @@ QList EntrySearcher::searchEntries(const QString& searchTerm, const Grou + return searchResult; + } + +-QList EntrySearcher::matchEntry(const QString& searchTerm, Entry* entry, Qt::CaseSensitivity caseSensitivity) ++QList EntrySearcher::matchEntry(const QString& searchTerm, Entry* entry, ++ Qt::CaseSensitivity caseSensitivity) + { +- QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts); +- Q_FOREACH (const QString& word, wordList) { ++ const QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts); ++ for (const QString& word : wordList) { + if (!wordMatch(word, entry, caseSensitivity)) { + return QList(); + } +diff --git a/src/core/EntrySearcher.h b/src/core/EntrySearcher.h +index 246538c..c7075dc 100644 +--- a/src/core/EntrySearcher.h ++++ b/src/core/EntrySearcher.h +@@ -28,10 +28,11 @@ class EntrySearcher + { + public: + QList search(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity); ++ + private: + QList searchEntries(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity); + QList matchEntry(const QString& searchTerm, Entry* entry, Qt::CaseSensitivity caseSensitivity); +- bool wordMatch(const QString &word, Entry *entry, Qt::CaseSensitivity caseSensitivity); ++ bool wordMatch(const QString& word, Entry* entry, Qt::CaseSensitivity caseSensitivity); + }; + + #endif // KEEPASSX_ENTRYSEARCHER_H +diff --git a/src/core/FilePath.cpp b/src/core/FilePath.cpp +index f7c4075..06208b7 100644 +--- a/src/core/FilePath.cpp ++++ b/src/core/FilePath.cpp +@@ -22,8 +22,9 @@ + #include + + #include "config-keepassx.h" ++#include "core/Global.h" + +-FilePath* FilePath::m_instance(Q_NULLPTR); ++FilePath* FilePath::m_instance(nullptr); + + QString FilePath::dataPath(const QString& name) + { +@@ -40,7 +41,8 @@ QString FilePath::pluginPath(const QString& name) + QStringList pluginPaths; + + QDir buildDir(QCoreApplication::applicationDirPath() + "/autotype"); +- Q_FOREACH (const QString& dir, buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { ++ const QStringList buildDirEntryList = buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); ++ for (const QString& dir : buildDirEntryList) { + pluginPaths << QCoreApplication::applicationDirPath() + "/autotype/" + dir; + } + +@@ -68,10 +70,10 @@ QString FilePath::pluginPath(const QString& name) + QStringList dirFilter; + dirFilter << QString("*%1*").arg(name); + +- Q_FOREACH (const QString& path, pluginPaths) { +- QStringList fileCandidates = QDir(path).entryList(dirFilter, QDir::Files); ++ for (const QString& path : asConst(pluginPaths)) { ++ const QStringList fileCandidates = QDir(path).entryList(dirFilter, QDir::Files); + +- Q_FOREACH (const QString& file, fileCandidates) { ++ for (const QString& file : fileCandidates) { + QString filePath = path + "/" + file; + + if (QLibrary::isLibrary(filePath)) { +@@ -103,10 +105,9 @@ QIcon FilePath::icon(const QString& category, const QString& name, bool fromThem + } + + if (icon.isNull()) { +- QList pngSizes; +- pngSizes << 16 << 22 << 24 << 32 << 48 << 64 << 128; ++ const QList pngSizes = { 16, 22, 24, 32, 48, 64, 128 }; + QString filename; +- Q_FOREACH (int size, pngSizes) { ++ for (int size : pngSizes) { + filename = QString("%1/icons/application/%2x%2/%3.png").arg(m_dataPath, QString::number(size), + combinedName); + if (QFile::exists(filename)) { +@@ -148,10 +149,9 @@ QIcon FilePath::onOffIcon(const QString& category, const QString& name) + stateName = "on"; + } + +- QList pngSizes; +- pngSizes << 16 << 22 << 24 << 32 << 48 << 64 << 128; ++ const QList pngSizes = { 16, 22, 24, 32, 48, 64, 128 }; + QString filename; +- Q_FOREACH (int size, pngSizes) { ++ for (int size : pngSizes) { + filename = QString("%1/icons/application/%2x%2/%3-%4.png").arg(m_dataPath, QString::number(size), + combinedName, stateName); + if (QFile::exists(filename)) { +diff --git a/src/core/FilePath.h b/src/core/FilePath.h +index 9e98d3e..c37a908 100644 +--- a/src/core/FilePath.h ++++ b/src/core/FilePath.h +@@ -22,8 +22,6 @@ + #include + #include + +-#include "core/Global.h" +- + class FilePath + { + public: +diff --git a/src/core/Global.h b/src/core/Global.h +index 914c7b4..bd6a733 100644 +--- a/src/core/Global.h ++++ b/src/core/Global.h +@@ -20,104 +20,8 @@ + #ifndef KEEPASSX_GLOBAL_H + #define KEEPASSX_GLOBAL_H + +-// mostly copied from qcompilerdetection.h which is part of Qt 5 +- + #include + +-#ifdef Q_CC_CLANG +-# if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) +-# if __has_feature(cxx_strong_enums) +-# define COMPILER_CLASS_ENUM +-# endif +-# if __has_feature(cxx_constexpr) +-# define COMPILER_CONSTEXPR +-# endif +-# if __has_feature(cxx_decltype) /* && __has_feature(cxx_decltype_incomplete_return_types) */ +-# define COMPILER_DECLTYPE +-# endif +-# if __has_feature(cxx_override_control) +-# define COMPILER_EXPLICIT_OVERRIDES +-# endif +-# if __has_feature(cxx_nullptr) +-# define COMPILER_NULLPTR +-# endif +-# if __has_feature(cxx_static_assert) +-# define COMPILER_STATIC_ASSERT +-# endif +-# endif +-#endif // Q_CC_CLANG +- +-#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) +-# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L +-# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403 +-# define COMPILER_DECLTYPE +-# define COMPILER_STATIC_ASSERT +-# endif +-# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 +-# define COMPILER_CLASS_ENUM +-# endif +-# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 +-# define COMPILER_CONSTEXPR +-# define COMPILER_NULLPTR +-# endif +-# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 +-# define COMPILER_EXPLICIT_OVERRIDES +-# endif +-# endif +-#endif +- +-/* +- * C++11 keywords and expressions +- */ +-#if !defined(Q_NULLPTR) +-# ifdef COMPILER_NULLPTR +-# define Q_NULLPTR nullptr +-# else +-# define Q_NULLPTR 0 +-# endif +-#endif +- +-#if !defined(Q_DECL_CONSTEXPR) +-# ifdef COMPILER_CONSTEXPR +-# define Q_DECL_CONSTEXPR constexpr +-# else +-# define Q_DECL_CONSTEXPR +-# endif +-#endif +- +-#if !defined(Q_DECL_OVERRIDE) && !defined(Q_DECL_FINAL) && !defined(Q_DECL_FINAL_CLASS) +-# ifdef COMPILER_EXPLICIT_OVERRIDES +-# define Q_DECL_OVERRIDE override +-# define Q_DECL_FINAL final +-# ifdef COMPILER_DECLTYPE +-# define Q_DECL_FINAL_CLASS final +-# else +-# define Q_DECL_FINAL_CLASS +-# endif +-# else +-# define Q_DECL_OVERRIDE +-# define Q_DECL_FINAL +-# define Q_DECL_FINAL_CLASS +-# endif +-#endif +- +-#if !defined(Q_STATIC_ASSERT) && !defined(Q_STATIC_ASSERT_X) +-#ifdef COMPILER_STATIC_ASSERT +-#define Q_STATIC_ASSERT(Condition) static_assert(static_cast(Condition), #Condition) +-#define Q_STATIC_ASSERT_X(Condition, Message) static_assert(static_cast(Condition), Message) +-#else +-// Intentionally undefined +-template class QStaticAssertFailure; +-template <> class QStaticAssertFailure {}; +- +-#define Q_STATIC_ASSERT_PRIVATE_JOIN(A, B) Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) +-#define Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) A ## B +-#define Q_STATIC_ASSERT(Condition) \ +- enum {Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __LINE__) = sizeof(QStaticAssertFailure)} +-#define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition) +-#endif // COMPILER_STATIC_ASSERT +-#endif // !defined(Q_STATIC_ASSERT) && !defined(Q_STATIC_ASSERT_X) +- + #if defined(Q_OS_WIN) + # if defined(KEEPASSX_BUILDING_CORE) + # define KEEPASSX_EXPORT Q_DECL_EXPORT +@@ -132,4 +36,13 @@ template <> class QStaticAssertFailure {}; + #define QUINT32_MAX 4294967295U + #endif + ++template struct AddConst { typedef const T Type; }; ++ ++// this adds const to non-const objects (like std::as_const) ++template ++constexpr typename AddConst::Type& asConst(T &t) noexcept { return t; } ++// prevent rvalue arguments: ++template ++void asConst(const T&&) = delete; ++ + #endif // KEEPASSX_GLOBAL_H +diff --git a/src/core/Group.cpp b/src/core/Group.cpp +index cae53db..325ef94 100644 +--- a/src/core/Group.cpp ++++ b/src/core/Group.cpp +@@ -18,9 +18,9 @@ + #include "Group.h" + + #include "core/Config.h" ++#include "core/Global.h" + #include "core/DatabaseIcons.h" + #include "core/Metadata.h" +-#include "core/Tools.h" + + const int Group::DefaultIconNumber = 48; + const int Group::RecycleBinIconNumber = 43; +@@ -38,19 +38,19 @@ Group::~Group() + { + // Destroy entries and children manually so DeletedObjects can be added + // to database. +- QList entries = m_entries; +- Q_FOREACH (Entry* entry, entries) { ++ const QList entries = m_entries; ++ for (Entry* entry : entries) { + delete entry; + } + +- QList children = m_children; +- Q_FOREACH (Group* group, children) { ++ const QList children = m_children; ++ for (Group* group : children) { + delete group; + } + + if (m_db && m_parent) { + DeletedObject delGroup; +- delGroup.deletionTime = Tools::currentDateTimeUtc(); ++ delGroup.deletionTime = QDateTime::currentDateTimeUtc(); + delGroup.uuid = m_uuid; + m_db->addDeletedObject(delGroup); + } +@@ -84,8 +84,8 @@ template inline bool Group::set(P& property, const V& value) + void Group::updateTimeinfo() + { + if (m_updateTimeinfo) { +- m_data.timeInfo.setLastModificationTime(Tools::currentDateTimeUtc()); +- m_data.timeInfo.setLastAccessTime(Tools::currentDateTimeUtc()); ++ m_data.timeInfo.setLastModificationTime(QDateTime::currentDateTimeUtc()); ++ m_data.timeInfo.setLastAccessTime(QDateTime::currentDateTimeUtc()); + } + } + +@@ -203,7 +203,7 @@ Entry* Group::lastTopVisibleEntry() const + + bool Group::isExpired() const + { +- return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Tools::currentDateTimeUtc(); ++ return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < QDateTime::currentDateTimeUtc(); + } + + void Group::setUuid(const Uuid& uuid) +@@ -365,7 +365,7 @@ void Group::setParent(Group* parent, int index) + } + + if (m_updateTimeinfo) { +- m_data.timeInfo.setLocationChanged(Tools::currentDateTimeUtc()); ++ m_data.timeInfo.setLocationChanged(QDateTime::currentDateTimeUtc()); + } + + Q_EMIT modified(); +@@ -385,7 +385,7 @@ void Group::setParent(Database* db) + + cleanupParent(); + +- m_parent = Q_NULLPTR; ++ m_parent = nullptr; + recSetDatabase(db); + + QObject::setParent(db); +@@ -428,12 +428,12 @@ QList Group::entriesRecursive(bool includeHistoryItems) const + entryList.append(m_entries); + + if (includeHistoryItems) { +- Q_FOREACH (Entry* entry, m_entries) { ++ for (Entry* entry : m_entries) { + entryList.append(entry->historyItems()); + } + } + +- Q_FOREACH (Group* group, m_children) { ++ for (Group* group : m_children) { + entryList.append(group->entriesRecursive(includeHistoryItems)); + } + +@@ -447,7 +447,7 @@ QList Group::groupsRecursive(bool includeSelf) const + groupList.append(this); + } + +- Q_FOREACH (const Group* group, m_children) { ++ for (const Group* group : m_children) { + groupList.append(group->groupsRecursive(true)); + } + +@@ -461,7 +461,7 @@ QList Group::groupsRecursive(bool includeSelf) + groupList.append(this); + } + +- Q_FOREACH (Group* group, m_children) { ++ for (Group* group : asConst(m_children)) { + groupList.append(group->groupsRecursive(true)); + } + +@@ -476,13 +476,14 @@ QSet Group::customIconsRecursive() const + result.insert(iconUuid()); + } + +- Q_FOREACH (Entry* entry, entriesRecursive(true)) { ++ const QList entryList = entriesRecursive(true); ++ for (Entry* entry : entryList) { + if (!entry->iconUuid().isNull()) { + result.insert(entry->iconUuid()); + } + } + +- Q_FOREACH (Group* group, m_children) { ++ for (Group* group : m_children) { + result.unite(group->customIconsRecursive()); + } + +@@ -498,19 +499,21 @@ Group* Group::clone(Entry::CloneFlags entryFlags) const + clonedGroup->setUuid(Uuid::random()); + clonedGroup->m_data = m_data; + +- Q_FOREACH (Entry* entry, entries()) { ++ const QList entryList = entries(); ++ for (Entry* entry : entryList) { + Entry* clonedEntry = entry->clone(entryFlags); + clonedEntry->setGroup(clonedGroup); + } + +- Q_FOREACH (Group* groupChild, children()) { ++ const QList childrenGroups = children(); ++ for (Group* groupChild : childrenGroups) { + Group* clonedGroupChild = groupChild->clone(entryFlags); + clonedGroupChild->setParent(clonedGroup); + } + + clonedGroup->setUpdateTimeinfo(true); + +- QDateTime now = Tools::currentDateTimeUtc(); ++ QDateTime now = QDateTime::currentDateTimeUtc(); + clonedGroup->m_data.timeInfo.setCreationTime(now); + clonedGroup->m_data.timeInfo.setLastModificationTime(now); + clonedGroup->m_data.timeInfo.setLastAccessTime(now); +@@ -570,7 +573,7 @@ void Group::recSetDatabase(Database* db) + disconnect(SIGNAL(modified()), m_db); + } + +- Q_FOREACH (Entry* entry, m_entries) { ++ for (Entry* entry : asConst(m_entries)) { + if (m_db) { + entry->disconnect(m_db); + } +@@ -592,7 +595,7 @@ void Group::recSetDatabase(Database* db) + + m_db = db; + +- Q_FOREACH (Group* group, m_children) { ++ for (Group* group : asConst(m_children)) { + group->recSetDatabase(db); + } + } +@@ -610,11 +613,11 @@ void Group::cleanupParent() + void Group::recCreateDelObjects() + { + if (m_db) { +- Q_FOREACH (Entry* entry, m_entries) { ++ for (Entry* entry : asConst(m_entries)) { + m_db->addDeletedObject(entry->uuid()); + } + +- Q_FOREACH (Group* group, m_children) { ++ for (Group* group : asConst(m_children)) { + group->recCreateDelObjects(); + } + m_db->addDeletedObject(m_uuid); +diff --git a/src/core/InactivityTimer.h b/src/core/InactivityTimer.h +index e0a21e0..ba571a5 100644 +--- a/src/core/InactivityTimer.h ++++ b/src/core/InactivityTimer.h +@@ -21,8 +21,6 @@ + #include + #include + +-#include "core/Global.h" +- + class QTimer; + + class InactivityTimer : public QObject +@@ -30,7 +28,7 @@ class InactivityTimer : public QObject + Q_OBJECT + + public: +- explicit InactivityTimer(QObject* parent = Q_NULLPTR); ++ explicit InactivityTimer(QObject* parent = nullptr); + void setInactivityTimeout(int inactivityTimeout); + void activate(); + void deactivate(); +diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp +index 0c67bba..e908fbb 100644 +--- a/src/core/Metadata.cpp ++++ b/src/core/Metadata.cpp +@@ -42,7 +42,7 @@ Metadata::Metadata(QObject* parent) + m_data.protectNotes = false; + // m_data.autoEnableVisualHiding = false; + +- QDateTime now = Tools::currentDateTimeUtc(); ++ QDateTime now = QDateTime::currentDateTimeUtc(); + m_data.nameChanged = now; + m_data.descriptionChanged = now; + m_data.defaultUserNameChanged = now; +@@ -67,7 +67,7 @@ template bool Metadata::set(P& property, const V& value, QDat + if (property != value) { + property = value; + if (m_updateDatetime) { +- dateTime = Tools::currentDateTimeUtc(); ++ dateTime = QDateTime::currentDateTimeUtc(); + } + Q_EMIT modified(); + return true; +@@ -218,7 +218,7 @@ QHash Metadata::customIconsScaledPixmaps() const + { + QHash result; + +- Q_FOREACH (const Uuid& uuid, m_customIconsOrder) { ++ for (const Uuid& uuid : m_customIconsOrder) { + result.insert(uuid, customIconScaledPixmap(uuid)); + } + +@@ -427,7 +427,7 @@ void Metadata::removeCustomIcon(const Uuid& uuid) + + void Metadata::copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata) + { +- Q_FOREACH (const Uuid& uuid, iconList) { ++ for (const Uuid& uuid : iconList) { + Q_ASSERT(otherMetadata->containsCustomIcon(uuid)); + + if (!containsCustomIcon(uuid) && otherMetadata->containsCustomIcon(uuid)) { +diff --git a/src/core/Metadata.h b/src/core/Metadata.h +index 062e552..c35aed3 100644 +--- a/src/core/Metadata.h ++++ b/src/core/Metadata.h +@@ -26,7 +26,6 @@ + #include + #include + +-#include "core/Global.h" + #include "core/Uuid.h" + + class Database; +@@ -37,7 +36,7 @@ class Metadata : public QObject + Q_OBJECT + + public: +- explicit Metadata(QObject* parent = Q_NULLPTR); ++ explicit Metadata(QObject* parent = nullptr); + + struct MetadataData + { +diff --git a/src/core/PasswordGenerator.cpp b/src/core/PasswordGenerator.cpp +index 5915ba8..f52f6e4 100644 +--- a/src/core/PasswordGenerator.cpp ++++ b/src/core/PasswordGenerator.cpp +@@ -45,11 +45,11 @@ QString PasswordGenerator::generatePassword() const + { + Q_ASSERT(isValid()); + +- QVector groups = passwordGroups(); ++ const QVector groups = passwordGroups(); + + QVector passwordChars; +- Q_FOREACH (const PasswordGroup& group, groups) { +- Q_FOREACH (QChar ch, group) { ++ for (const PasswordGroup& group : groups) { ++ for (QChar ch : group) { + passwordChars.append(ch); + } + } +diff --git a/src/core/PasswordGenerator.h b/src/core/PasswordGenerator.h +index 6a9d212..cc8196f 100644 +--- a/src/core/PasswordGenerator.h ++++ b/src/core/PasswordGenerator.h +@@ -22,8 +22,6 @@ + #include + #include + +-#include "core/Global.h" +- + typedef QVector PasswordGroup; + + class PasswordGenerator +diff --git a/src/core/SignalMultiplexer.cpp b/src/core/SignalMultiplexer.cpp +index a70e9ef..7b5fab9 100644 +--- a/src/core/SignalMultiplexer.cpp ++++ b/src/core/SignalMultiplexer.cpp +@@ -17,6 +17,8 @@ + + #include "SignalMultiplexer.h" + ++#include "core/Global.h" ++ + SignalMultiplexer::SignalMultiplexer() + { + } +@@ -24,7 +26,7 @@ SignalMultiplexer::SignalMultiplexer() + SignalMultiplexer::~SignalMultiplexer() + { + // disconnect all connections +- setCurrentObject(Q_NULLPTR); ++ setCurrentObject(nullptr); + } + + QObject* SignalMultiplexer::currentObject() const +@@ -45,7 +47,7 @@ void SignalMultiplexer::setCurrentObject(QObject* object) + } + + if (m_currentObject) { +- Q_FOREACH (const Connection& con, m_connections) { ++ for (const Connection& con : asConst(m_connections)) { + disconnect(con); + } + } +@@ -53,7 +55,7 @@ void SignalMultiplexer::setCurrentObject(QObject* object) + m_currentObject = object; + + if (object) { +- Q_FOREACH (const Connection& con, m_connections) { ++ for (const Connection& con : asConst(m_connections)) { + connect(con); + } + } +diff --git a/src/core/SignalMultiplexer.h b/src/core/SignalMultiplexer.h +index 6d39cd5..b27e1f3 100644 +--- a/src/core/SignalMultiplexer.h ++++ b/src/core/SignalMultiplexer.h +@@ -21,8 +21,6 @@ + #include + #include + +-#include "core/Global.h" +- + class SignalMultiplexer + { + public: +diff --git a/src/core/TimeInfo.cpp b/src/core/TimeInfo.cpp +index 2613325..ec6ebde 100644 +--- a/src/core/TimeInfo.cpp ++++ b/src/core/TimeInfo.cpp +@@ -23,7 +23,7 @@ TimeInfo::TimeInfo() + : m_expires(false) + , m_usageCount(0) + { +- QDateTime now = Tools::currentDateTimeUtc(); ++ QDateTime now = QDateTime::currentDateTimeUtc(); + m_lastModificationTime = now; + m_creationTime = now; + m_lastAccessTime = now; +diff --git a/src/core/Tools.cpp b/src/core/Tools.cpp +index db3baa8..bc63bf1 100644 +--- a/src/core/Tools.cpp ++++ b/src/core/Tools.cpp +@@ -23,11 +23,7 @@ + #include + #include + +-#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) + #include +-#else +-#include +-#endif + + #ifdef Q_OS_WIN + #include // for Sleep(), SetDllDirectoryA() and SetSearchPathMode() +@@ -75,7 +71,9 @@ bool hasChild(const QObject* parent, const QObject* child) + if (!parent || !child) { + return false; + } +- Q_FOREACH (QObject* c, parent->children()) { ++ ++ const QObjectList children = parent->children(); ++ for (QObject* c : children) { + if (child == c || hasChild(c, child)) { + return true; + } +@@ -122,21 +120,12 @@ bool readAllFromDevice(QIODevice* device, QByteArray& data) + } + } + +-QDateTime currentDateTimeUtc() +-{ +-#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) +- return QDateTime::currentDateTimeUtc(); +-#else +- return QDateTime::currentDateTime().toUTC(); +-#endif +-} +- + QString imageReaderFilter() + { +- QList formats = QImageReader::supportedImageFormats(); ++ const QList formats = QImageReader::supportedImageFormats(); + QStringList formatsStringList; + +- Q_FOREACH (const QByteArray& format, formats) { ++ for (const QByteArray& format : formats) { + for (int i = 0; i < format.size(); i++) { + if (!QChar(format.at(i)).isLetterOrNumber()) { + continue; +@@ -151,7 +140,7 @@ QString imageReaderFilter() + + bool isHex(const QByteArray& ba) + { +- Q_FOREACH (char c, ba) { ++ for (char c : ba) { + if ( !( (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ) ) { + return false; + } +@@ -184,7 +173,7 @@ void sleep(int ms) + timespec ts; + ts.tv_sec = ms / 1000; + ts.tv_nsec = (ms % 1000) * 1000 * 1000; +- nanosleep(&ts, Q_NULLPTR); ++ nanosleep(&ts, nullptr); + #endif + } + +@@ -196,11 +185,7 @@ void wait(int ms) + return; + } + +-#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) + QElapsedTimer timer; +-#else +- QTime timer; +-#endif + timer.start(); + + if (ms <= 50) { +@@ -215,23 +200,10 @@ void wait(int ms) + QCoreApplication::processEvents(QEventLoop::AllEvents, timeLeft); + sleep(10); + } +- } while (timer.elapsed() < ms); ++ } while (!timer.hasExpired(ms)); + } + } + +-QString platform() +-{ +-#if defined(Q_WS_X11) +- return "x11"; +-#elif defined(Q_WS_MAC) +- return "mac"; +-#elif defined(Q_WS_WIN) +- return "win"; +-#else +- return QString(); +-#endif +-} +- + void disableCoreDumps() + { + // default to true +diff --git a/src/core/Tools.h b/src/core/Tools.h +index 68e9dcd..65df1ea 100644 +--- a/src/core/Tools.h ++++ b/src/core/Tools.h +@@ -18,11 +18,13 @@ + #ifndef KEEPASSX_TOOLS_H + #define KEEPASSX_TOOLS_H + ++#include "core/Global.h" ++ + #include + #include + #include + +-#include "core/Global.h" ++#include + + class QIODevice; + +@@ -32,16 +34,27 @@ QString humanReadableFileSize(qint64 bytes); + bool hasChild(const QObject* parent, const QObject* child); + bool readFromDevice(QIODevice* device, QByteArray& data, int size = 16384); + bool readAllFromDevice(QIODevice* device, QByteArray& data); +-QDateTime currentDateTimeUtc(); + QString imageReaderFilter(); + bool isHex(const QByteArray& ba); + bool isBase64(const QByteArray& ba); + void sleep(int ms); + void wait(int ms); +-QString platform(); + void disableCoreDumps(); + void setupSearchPaths(); + ++template ++RandomAccessIterator binaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T& value) ++{ ++ RandomAccessIterator it = std::lower_bound(begin, end, value); ++ ++ if ((it == end) || (value < *it)) { ++ return end; ++ } ++ else { ++ return it; ++ } ++} ++ + } // namespace Tools + + #endif // KEEPASSX_TOOLS_H +diff --git a/src/core/Translator.cpp b/src/core/Translator.cpp +index ed63693..713727e 100644 +--- a/src/core/Translator.cpp ++++ b/src/core/Translator.cpp +@@ -49,18 +49,20 @@ void Translator::installTranslator() + + QList > Translator::availableLanguages() + { +- QStringList paths; ++ const QStringList paths = { + #ifdef QT_DEBUG +- paths.append(QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR)); ++ QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR), + #endif +- paths.append(filePath()->dataPath("translations")); ++ filePath()->dataPath("translations") ++ }; + + QList > languages; + languages.append(QPair("system", "System default")); + + QRegExp regExp("keepassx_([a-zA-Z_]+)\\.qm", Qt::CaseInsensitive, QRegExp::RegExp2); +- Q_FOREACH (const QString& path, paths) { +- Q_FOREACH (const QString& filename, QDir(path).entryList()) { ++ for (const QString& path : paths) { ++ const QStringList fileList = QDir(path).entryList(); ++ for (const QString& filename : fileList) { + if (regExp.exactMatch(filename)) { + QString langcode = regExp.cap(1); + if (langcode == "en_plurals") { +@@ -85,13 +87,14 @@ QList > Translator::availableLanguages() + + bool Translator::installTranslator(const QString& language) + { +- QStringList paths; ++ const QStringList paths = { + #ifdef QT_DEBUG +- paths.append(QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR)); ++ QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR), + #endif +- paths.append(filePath()->dataPath("translations")); ++ filePath()->dataPath("translations") ++ }; + +- Q_FOREACH (const QString& path, paths) { ++ for (const QString& path : paths) { + if (installTranslator(language, path)) { + return true; + } +@@ -116,7 +119,7 @@ bool Translator::installTranslator(const QString& language, const QString& path) + bool Translator::installQtTranslator(const QString& language) + { + QTranslator* qtTranslator = new QTranslator(qApp); +- if (qtTranslator->load(QString("%1/qt_%2").arg(QLibraryInfo::location(QLibraryInfo::TranslationsPath), language))) { ++ if (qtTranslator->load(QString("%1/qtbase_%2").arg(QLibraryInfo::location(QLibraryInfo::TranslationsPath), language))) { + QCoreApplication::installTranslator(qtTranslator); + return true; + } +diff --git a/src/core/qcommandlineoption.cpp b/src/core/qcommandlineoption.cpp +deleted file mode 100644 +index c908807..0000000 +--- a/src/core/qcommandlineoption.cpp ++++ /dev/null +@@ -1,305 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 Laszlo Papp +-** Copyright (C) 2013 David Faure +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 as published by the Free Software +-** Foundation and appearing in the file LICENSE.LGPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU Lesser General Public License version 2.1 requirements +-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU +-** General Public License version 3.0 as published by the Free Software +-** Foundation and appearing in the file LICENSE.GPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU General Public License version 3.0 requirements will be +-** met: http://www.gnu.org/copyleft/gpl.html. +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#include "qcommandlineoption.h" +- +-#include +- +-class QCommandLineOptionPrivate : public QSharedData +-{ +-public: +- inline QCommandLineOptionPrivate() +- { } +- +- void setNames(const QStringList &nameList); +- +- //! The list of names used for this option. +- QStringList names; +- +- //! The documentation name for the value, if one is expected +- //! Example: "-o " means valueName == "file" +- QString valueName; +- +- //! The description used for this option. +- QString description; +- +- //! The list of default values used for this option. +- QStringList defaultValues; +-}; +- +-/*! +- \since 5.2 +- \class QCommandLineOption +- \brief The QCommandLineOption class defines a possible command-line option. +- \inmodule QtCore +- \ingroup shared +- \ingroup tools +- +- This class is used to describe an option on the command line. It allows +- different ways of defining the same option with multiple aliases possible. +- It is also used to describe how the option is used - it may be a flag (e.g. \c{-v}) +- or take an argument (e.g. \c{-o file}). +- +- Examples: +- \snippet code/src_corelib_tools_qcommandlineoption.cpp 0 +- +- \sa QCommandLineParser +-*/ +- +-/*! +- Constructs a command line option object with the given arguments. +- +- The name of the option is set to \a name. +- The name can be either short or long. If the name is one character in +- length, it is considered a short name. Option names must not be empty, +- must not start with a dash or a slash character, must not contain a \c{=} +- and cannot be repeated. +- +- The description is set to \a description. It is customary to add a "." +- at the end of the description. +- +- In addition, the \a valueName can be set if the option expects a value. +- The default value for the option is set to \a defaultValue. +- +- \sa setDescription(), setValueName(), setDefaultValues() +-*/ +-QCommandLineOption::QCommandLineOption(const QString &name, const QString &description, +- const QString &valueName, +- const QString &defaultValue) +- : d(new QCommandLineOptionPrivate) +-{ +- d->setNames(QStringList(name)); +- setValueName(valueName); +- setDescription(description); +- setDefaultValue(defaultValue); +-} +- +-/*! +- Constructs a command line option object with the given arguments. +- +- This overload allows to set multiple names for the option, for instance +- \c{o} and \c{output}. +- +- The names of the option are set to \a names. +- The names can be either short or long. Any name in the list that is one +- character in length is a short name. Option names must not be empty, +- must not start with a dash or a slash character, must not contain a \c{=} +- and cannot be repeated. +- +- The description is set to \a description. It is customary to add a "." +- at the end of the description. +- +- In addition, the \a valueName can be set if the option expects a value. +- The default value for the option is set to \a defaultValue. +- +- \sa setDescription(), setValueName(), setDefaultValues() +-*/ +-QCommandLineOption::QCommandLineOption(const QStringList &names, const QString &description, +- const QString &valueName, +- const QString &defaultValue) +- : d(new QCommandLineOptionPrivate) +-{ +- d->setNames(names); +- setValueName(valueName); +- setDescription(description); +- setDefaultValue(defaultValue); +-} +- +-/*! +- Constructs a QCommandLineOption object that is a copy of the QCommandLineOption +- object \a other. +- +- \sa operator=() +-*/ +-QCommandLineOption::QCommandLineOption(const QCommandLineOption &other) +- : d(other.d) +-{ +-} +- +-/*! +- Destroys the command line option object. +-*/ +-QCommandLineOption::~QCommandLineOption() +-{ +-} +- +-/*! +- Makes a copy of the \a other object and assigns it to this QCommandLineOption +- object. +-*/ +-QCommandLineOption &QCommandLineOption::operator=(const QCommandLineOption &other) +-{ +- d = other.d; +- return *this; +-} +- +-/*! +- Returns the names set for this option. +- */ +-QStringList QCommandLineOption::names() const +-{ +- return d->names; +-} +- +-void QCommandLineOptionPrivate::setNames(const QStringList &nameList) +-{ +- QStringList newNames; +- if (nameList.isEmpty()) +- qWarning("QCommandLineOption: Options must have at least one name"); +- Q_FOREACH (const QString &name, nameList) { +- if (name.isEmpty()) { +- qWarning("QCommandLineOption: Option names cannot be empty"); +- } else { +- const QChar c = name.at(0); +- if (c == QLatin1Char('-')) +- qWarning("QCommandLineOption: Option names cannot start with a '-'"); +- else if (c == QLatin1Char('/')) +- qWarning("QCommandLineOption: Option names cannot start with a '/'"); +- else if (name.contains(QLatin1Char('='))) +- qWarning("QCommandLineOption: Option names cannot contain a '='"); +- else +- newNames.append(name); +- } +- } +- // commit +- names = newNames; +-} +- +-/*! +- Sets the name of the expected value, for the documentation, to \a valueName. +- +- Options without a value assigned have a boolean-like behavior: +- either the user specifies --option or they don't. +- +- Options with a value assigned need to set a name for the expected value, +- for the documentation of the option in the help output. An option with names \c{o} and \c{output}, +- and a value name of \c{file} will appear as \c{-o, --output }. +- +- Call QCommandLineParser::argument() if you expect the option to be present +- only once, and QCommandLineParser::arguments() if you expect that option +- to be present multiple times. +- +- \sa valueName() +- */ +-void QCommandLineOption::setValueName(const QString &valueName) +-{ +- d->valueName = valueName; +-} +- +-/*! +- Returns the name of the expected value. +- +- If empty, the option doesn't take a value. +- +- \sa setValueName() +- */ +-QString QCommandLineOption::valueName() const +-{ +- return d->valueName; +-} +- +-/*! +- Sets the description used for this option to \a description. +- +- It is customary to add a "." at the end of the description. +- +- The description is used by QCommandLineParser::showHelp(). +- +- \sa description() +- */ +-void QCommandLineOption::setDescription(const QString &description) +-{ +- d->description = description; +-} +- +-/*! +- Returns the description set for this option. +- +- \sa setDescription() +- */ +-QString QCommandLineOption::description() const +-{ +- return d->description; +-} +- +-/*! +- Sets the default value used for this option to \a defaultValue. +- +- The default value is used if the user of the application does not specify +- the option on the command line. +- +- If \a defaultValue is empty, the option has no default values. +- +- \sa defaultValues() setDefaultValues() +- */ +-void QCommandLineOption::setDefaultValue(const QString &defaultValue) +-{ +- QStringList newDefaultValues; +- if (!defaultValue.isEmpty()) { +- newDefaultValues << defaultValue; +- } +- // commit: +- d->defaultValues = newDefaultValues; +-} +- +-/*! +- Sets the list of default values used for this option to \a defaultValues. +- +- The default values are used if the user of the application does not specify +- the option on the command line. +- +- \sa defaultValues() setDefaultValue() +- */ +-void QCommandLineOption::setDefaultValues(const QStringList &defaultValues) +-{ +- d->defaultValues = defaultValues; +-} +- +-/*! +- Returns the default values set for this option. +- +- \sa setDefaultValues() +- */ +-QStringList QCommandLineOption::defaultValues() const +-{ +- return d->defaultValues; +-} +diff --git a/src/core/qcommandlineoption.h b/src/core/qcommandlineoption.h +deleted file mode 100644 +index b97d44c..0000000 +--- a/src/core/qcommandlineoption.h ++++ /dev/null +@@ -1,81 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 Laszlo Papp +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 as published by the Free Software +-** Foundation and appearing in the file LICENSE.LGPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU Lesser General Public License version 2.1 requirements +-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU +-** General Public License version 3.0 as published by the Free Software +-** Foundation and appearing in the file LICENSE.GPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU General Public License version 3.0 requirements will be +-** met: http://www.gnu.org/copyleft/gpl.html. +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#ifndef QCOMMANDLINEOPTION_H +-#define QCOMMANDLINEOPTION_H +- +-#include +-#include +- +-class QCommandLineOptionPrivate; +- +-class QCommandLineOption +-{ +-public: +- explicit QCommandLineOption(const QString &name, const QString &description = QString(), +- const QString &valueName = QString(), +- const QString &defaultValue = QString()); +- explicit QCommandLineOption(const QStringList &names, const QString &description = QString(), +- const QString &valueName = QString(), +- const QString &defaultValue = QString()); +- QCommandLineOption(const QCommandLineOption &other); +- +- ~QCommandLineOption(); +- +- QCommandLineOption &operator=(const QCommandLineOption &other); +- +- QStringList names() const; +- +- void setValueName(const QString &name); +- QString valueName() const; +- +- void setDescription(const QString &description); +- QString description() const; +- +- void setDefaultValue(const QString &defaultValue); +- void setDefaultValues(const QStringList &defaultValues); +- QStringList defaultValues() const; +- +-private: +- QSharedDataPointer d; +-}; +- +-#endif // QCOMMANDLINEOPTION_H +diff --git a/src/core/qcommandlineparser.cpp b/src/core/qcommandlineparser.cpp +deleted file mode 100644 +index f97d78a..0000000 +--- a/src/core/qcommandlineparser.cpp ++++ /dev/null +@@ -1,944 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 Laszlo Papp +-** Copyright (C) 2013 David Faure +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 as published by the Free Software +-** Foundation and appearing in the file LICENSE.LGPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU Lesser General Public License version 2.1 requirements +-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU +-** General Public License version 3.0 as published by the Free Software +-** Foundation and appearing in the file LICENSE.GPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU General Public License version 3.0 requirements will be +-** met: http://www.gnu.org/copyleft/gpl.html. +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#include "qcommandlineparser.h" +- +-#include +-#include +-#include +-#include +-#include +- +-typedef QHash NameHash_t; +- +-class QCommandLineParserPrivate +-{ +-public: +- inline QCommandLineParserPrivate() +- : singleDashWordOptionMode(QCommandLineParser::ParseAsCompactedShortOptions), +- builtinVersionOption(false), +- builtinHelpOption(false), +- needsParsing(true) +- { } +- +- bool parse(const QStringList &args); +- void checkParsed(const char *method); +- QStringList aliases(const QString &name) const; +- QString helpText() const; +- bool registerFoundOption(const QString &optionName); +- bool parseOptionValue(const QString &optionName, const QString &argument, +- QStringList::const_iterator *argumentIterator, +- QStringList::const_iterator argsEnd); +- +- //! Error text set when parse() returns false +- QString errorText; +- +- //! The command line options used for parsing +- QList commandLineOptionList; +- +- //! Hash mapping option names to their offsets in commandLineOptionList and optionArgumentList. +- NameHash_t nameHash; +- +- //! Option values found (only for options with a value) +- QHash optionValuesHash; +- +- //! Names of options found on the command line. +- QStringList optionNames; +- +- //! Arguments which did not belong to any option. +- QStringList positionalArgumentList; +- +- //! Names of options which were unknown. +- QStringList unknownOptionNames; +- +- //! Application description +- QString description; +- +- //! Documentation for positional arguments +- struct PositionalArgumentDefinition +- { +- QString name; +- QString description; +- QString syntax; +- }; +- QVector positionalArgumentDefinitions; +- +- //! The parsing mode for "-abc" +- QCommandLineParser::SingleDashWordOptionMode singleDashWordOptionMode; +- +- //! Whether addVersionOption was called +- bool builtinVersionOption; +- +- //! Whether addHelpOption was called +- bool builtinHelpOption; +- +- //! True if parse() needs to be called +- bool needsParsing; +-}; +- +-QStringList QCommandLineParserPrivate::aliases(const QString &optionName) const +-{ +- const NameHash_t::const_iterator it = nameHash.find(optionName); +- if (it == nameHash.end()) { +- qWarning("QCommandLineParser: option not defined: \"%s\"", qPrintable(optionName)); +- return QStringList(); +- } +- return commandLineOptionList.at(*it).names(); +-} +- +-/*! +- \since 5.2 +- \class QCommandLineParser +- \inmodule QtCore +- \ingroup tools +- +- \brief The QCommandLineParser class provides a means for handling the +- command line options. +- +- QCoreApplication provides the command-line arguments as a simple list of strings. +- QCommandLineParser provides the ability to define a set of options, parse the +- command-line arguments, and store which options have actually been used, as +- well as option values. +- +- Any argument that isn't an option (i.e. doesn't start with a \c{-}) is stored +- as a "positional argument". +- +- The parser handles short names, long names, more than one name for the same +- option, and option values. +- +- Options on the command line are recognized as starting with a single or +- double \c{-} character(s). +- The option \c{-} (single dash alone) is a special case, often meaning standard +- input, and not treated as an option. The parser will treat everything after the +- option \c{--} (double dash) as positional arguments. +- +- Short options are single letters. The option \c{v} would be specified by +- passing \c{-v} on the command line. In the default parsing mode, short options +- can be written in a compact form, for instance \c{-abc} is equivalent to \c{-a -b -c}. +- The parsing mode for can be set to ParseAsLongOptions, in which case \c{-abc} +- will be parsed as the long option \c{abc}. +- +- Long options are more than one letter long and cannot be compacted together. +- The long option \c{verbose} would be passed as \c{--verbose} or \c{-verbose}. +- +- Passing values to options can be done using the assignment operator: \c{-v=value} +- \c{--verbose=value}, or a space: \c{-v value} \c{--verbose value}, i.e. the next +- argument is used as value (even if it starts with a \c{-}). +- +- The parser does not support optional values - if an option is set to +- require a value, one must be present. If such an option is placed last +- and has no value, the option will be treated as if it had not been +- specified. +- +- The parser does not automatically support negating or disabling long options +- by using the format \c{--disable-option} or \c{--no-option}. However, it is +- possible to handle this case explicitly by making an option with \c{no-option} +- as one of its names, and handling the option explicitly. +- +- Example: +- \snippet code/src_corelib_tools_qcommandlineparser_main.cpp 0 +- +- Known limitation: the parsing of Qt options inside QCoreApplication and subclasses +- happens before QCommandLineParser exists, so it can't take it into account. This +- means any option value that looks like a builtin Qt option, will be treated by +- QCoreApplication as a builtin Qt option. Example: \c{--profile -reverse} will +- lead to QGuiApplication seeing the -reverse option set, and removing it from +- QCoreApplication::arguments() before QCommandLineParser defines the \c{profile} +- option and parses the command line. +- +- \sa QCommandLineOption, QCoreApplication +-*/ +- +-/*! +- Constructs a command line parser object. +-*/ +-QCommandLineParser::QCommandLineParser() +- : d(new QCommandLineParserPrivate) +-{ +-} +- +-/*! +- Destroys the command line parser object. +-*/ +-QCommandLineParser::~QCommandLineParser() +-{ +- delete d; +-} +- +-/*! +- \enum QCommandLineParser::SingleDashWordOptionMode +- +- This enum describes the way the parser interprets command-line +- options that use a single dash followed by multiple letters, as as \c{-abc}. +- +- \value ParseAsCompactedShortOptions \c{-abc} is interpreted as \c{-a -b -c}, +- i.e. as three short options that have been compacted on the command-line, +- if none of the options take a value. If \c{a} takes a value, then it +- is interpreted as \c{-a bc}, i.e. the short option \c{a} followed by the value \c{bc}. +- This is typically used in tools that behave like compilers, in order +- to handle options such as \c{-DDEFINE=VALUE} or \c{-I/include/path}. +- This is the default parsing mode. New applications are recommended to +- use this mode. +- +- \value ParseAsLongOptions \c{-abc} is interpreted as \c{--abc}, +- i.e. as the long option named \c{abc}. This is how Qt's own tools +- (uic, rcc...) have always been parsing arguments. This mode should be +- used for preserving compatibility in applications that were parsing +- arguments in such a way. +- +- \sa setSingleDashWordOptionMode() +-*/ +- +-/*! +- Sets the parsing mode to \a singleDashWordOptionMode. +- This must be called before process() or parse(). +-*/ +-void QCommandLineParser::setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode singleDashWordOptionMode) +-{ +- d->singleDashWordOptionMode = singleDashWordOptionMode; +-} +- +-/*! +- Adds the option \a option to look for while parsing. +- +- Returns \c true if adding the option was successful; otherwise returns \c false. +- +- Adding the option fails if there is no name attached to the option, or +- the option has a name that clashes with an option name added before. +- */ +-bool QCommandLineParser::addOption(const QCommandLineOption &option) +-{ +- QStringList optionNames = option.names(); +- +- if (!optionNames.isEmpty()) { +- Q_FOREACH (const QString &name, optionNames) { +- if (d->nameHash.contains(name)) +- return false; +- } +- +- d->commandLineOptionList.append(option); +- +- const int offset = d->commandLineOptionList.size() - 1; +- Q_FOREACH (const QString &name, optionNames) +- d->nameHash.insert(name, offset); +- +- return true; +- } +- +- return false; +-} +- +-/*! +- Adds the \c{-v} / \c{--version} option, which displays the version string of the application. +- +- This option is handled automatically by QCommandLineParser. +- +- You can set the actual version string by using QCoreApplication::setApplicationVersion(). +- +- Returns the option instance, which can be used to call isSet(). +-*/ +-QCommandLineOption QCommandLineParser::addVersionOption() +-{ +- QCommandLineOption opt(QStringList() << "v" << "version", tr("Displays version information.")); +- addOption(opt); +- d->builtinVersionOption = true; +- return opt; +-} +- +-/*! +- Adds the help option (\c{-h}, \c{--help} and \c{-?} on Windows) +- This option is handled automatically by QCommandLineParser. +- +- Remember to use setApplicationDescription to set the application description, +- which will be displayed when this option is used. +- +- Example: +- \snippet code/src_corelib_tools_qcommandlineparser_main.cpp 0 +- +- Returns the option instance, which can be used to call isSet(). +-*/ +-QCommandLineOption QCommandLineParser::addHelpOption() +-{ +- QCommandLineOption opt(QStringList() +-#ifdef Q_OS_WIN +- << "?" +-#endif +- << "h" +- << "help", tr("Displays this help.")); +- addOption(opt); +- d->builtinHelpOption = true; +- return opt; +-} +- +-/*! +- Sets the application \a description shown by helpText(). +-*/ +-void QCommandLineParser::setApplicationDescription(const QString &description) +-{ +- d->description = description; +-} +- +-/*! +- Returns the application description set in setApplicationDescription(). +-*/ +-QString QCommandLineParser::applicationDescription() const +-{ +- return d->description; +-} +- +-/*! +- Defines an additional argument to the application, for the benefit of the help text. +- +- The argument \a name and \a description will appear under the \c{Arguments:} section +- of the help. If \a syntax is specified, it will be appended to the Usage line, otherwise +- the \a name will be appended. +- +- Example: +- \snippet code/src_corelib_tools_qcommandlineparser.cpp 2 +- +- \sa addHelpOption(), helpText() +-*/ +-void QCommandLineParser::addPositionalArgument(const QString &name, const QString &description, const QString &syntax) +-{ +- QCommandLineParserPrivate::PositionalArgumentDefinition arg; +- arg.name = name; +- arg.description = description; +- arg.syntax = syntax.isEmpty() ? name : syntax; +- d->positionalArgumentDefinitions.append(arg); +-} +- +-/*! +- Clears the definitions of additional arguments from the help text. +- +- This is only needed for the special case of tools which support multiple commands +- with different options. Once the actual command has been identified, the options +- for this command can be defined, and the help text for the command can be adjusted +- accordingly. +- +- Example: +- \snippet code/src_corelib_tools_qcommandlineparser.cpp 3 +-*/ +-void QCommandLineParser::clearPositionalArguments() +-{ +- d->positionalArgumentDefinitions.clear(); +-} +- +-/*! +- Parses the command line \a arguments. +- +- Most programs don't need to call this, a simple call to process() is enough. +- +- parse() is more low-level, and only does the parsing. The application will have to +- take care of the error handling, using errorText() if parse() returns \c false. +- This can be useful for instance to show a graphical error message in graphical programs. +- +- Calling parse() instead of process() can also be useful in order to ignore unknown +- options temporarily, because more option definitions will be provided later on +- (depending on one of the arguments), before calling process(). +- +- Don't forget that \a arguments must start with the name of the executable (ignored, though). +- +- Returns \c false in case of a parse error (unknown option or missing value); returns \c true otherwise. +- +- \sa process() +-*/ +-bool QCommandLineParser::parse(const QStringList &arguments) +-{ +- return d->parse(arguments); +-} +- +-/*! +- Returns a translated error text for the user. +- This should only be called when parse() returns \c false. +-*/ +-QString QCommandLineParser::errorText() const +-{ +- if (!d->errorText.isEmpty()) +- return d->errorText; +- if (d->unknownOptionNames.count() == 1) +- return tr("Unknown option '%1'.").arg(d->unknownOptionNames.first()); +- if (d->unknownOptionNames.count() > 1) +- return tr("Unknown options: %1.").arg(d->unknownOptionNames.join(", ")); +- return QString(); +-} +- +-/*! +- Processes the command line \a arguments. +- +- In addition to parsing the options (like parse()), this function also handles the builtin +- options and handles errors. +- +- The builtin options are \c{--version} if addVersionOption was called and \c{--help} if addHelpOption was called. +- +- When invoking one of these options, or when an error happens (for instance an unknown option was +- passed), the current process will then stop, using the exit() function. +- +- \sa QCoreApplication::arguments(), parse() +- */ +-void QCommandLineParser::process(const QStringList &arguments) +-{ +- if (!d->parse(arguments)) { +- fprintf(stderr, "%s\n", qPrintable(errorText())); +- ::exit(EXIT_FAILURE); +- } +- +- if (d->builtinVersionOption && isSet("version")) { +- printf("%s %s\n", qPrintable(QCoreApplication::applicationName()), qPrintable(QCoreApplication::applicationVersion())); +- ::exit(EXIT_SUCCESS); +- } +- +- if (d->builtinHelpOption && isSet("help")) +- showHelp(EXIT_SUCCESS); +-} +- +-/*! +- \overload +- +- The command line is obtained from the QCoreApplication instance \a app. +- */ +-void QCommandLineParser::process(const QCoreApplication &app) +-{ +- // QCoreApplication::arguments() is static, but the app instance must exist so we require it as parameter +- Q_UNUSED(app); +- process(QCoreApplication::arguments()); +-} +- +-void QCommandLineParserPrivate::checkParsed(const char *method) +-{ +- if (needsParsing) +- qWarning("QCommandLineParser: call process() or parse() before %s", method); +-} +- +-/*! +- \internal +- Looks up the option \a optionName (found on the command line) and register it as found. +- Returns \c true on success. +- */ +-bool QCommandLineParserPrivate::registerFoundOption(const QString &optionName) +-{ +- if (nameHash.contains(optionName)) { +- optionNames.append(optionName); +- return true; +- } else { +- unknownOptionNames.append(optionName); +- return false; +- } +-} +- +-/*! +- \internal +- \brief Parse the value for a given option, if it was defined to expect one. +- +- The value is taken from the next argument, or after the equal sign in \a argument. +- +- \param optionName the short option name +- \param argument the argument from the command line currently parsed. Only used for -k=value parsing. +- \param argumentIterator iterator to the currently parsed argument. Incremented if the next argument contains the value. +- \param argsEnd args.end(), to check if ++argumentIterator goes out of bounds +- Returns \c true on success. +- */ +-bool QCommandLineParserPrivate::parseOptionValue(const QString &optionName, const QString &argument, +- QStringList::const_iterator *argumentIterator, QStringList::const_iterator argsEnd) +-{ +- const QLatin1Char assignChar('='); +- const NameHash_t::const_iterator nameHashIt = nameHash.constFind(optionName); +- if (nameHashIt != nameHash.constEnd()) { +- const int assignPos = argument.indexOf(assignChar); +- const NameHash_t::mapped_type optionOffset = *nameHashIt; +- const bool withValue = !commandLineOptionList.at(optionOffset).valueName().isEmpty(); +- if (withValue) { +- if (assignPos == -1) { +- ++(*argumentIterator); +- if (*argumentIterator == argsEnd) { +- errorText = QCommandLineParser::tr("Missing value after '%1'.").arg(argument); +- return false; +- } +- optionValuesHash[optionOffset].append(*(*argumentIterator)); +- } else { +- optionValuesHash[optionOffset].append(argument.mid(assignPos + 1)); +- } +- } else { +- if (assignPos != -1) { +- errorText = QCommandLineParser::tr("Unexpected value after '%1'.").arg(argument.left(assignPos)); +- return false; +- } +- } +- } +- return true; +-} +- +-/*! +- \internal +- +- Parse the list of arguments \a args, and fills in +- optionNames, optionValuesHash, unknownOptionNames, positionalArguments, and errorText. +- +- Any results from a previous parse operation are removed. +- +- The parser will not look for further options once it encounters the option +- \c{--}; this does not include when \c{--} follows an option that requires a value. +- */ +-bool QCommandLineParserPrivate::parse(const QStringList &args) +-{ +- needsParsing = false; +- bool error = false; +- +- const QString doubleDashString("--"); +- const QLatin1Char dashChar('-'); +- const QLatin1Char assignChar('='); +- +- bool doubleDashFound = false; +- errorText.clear(); +- positionalArgumentList.clear(); +- optionNames.clear(); +- unknownOptionNames.clear(); +- optionValuesHash.clear(); +- +- if (args.isEmpty()) { +- qWarning("QCommandLineParser: argument list cannot be empty, it should contain at least the executable name"); +- return false; +- } +- +- QStringList::const_iterator argumentIterator = args.begin(); +- ++argumentIterator; // skip executable name +- +- for (; argumentIterator != args.end() ; ++argumentIterator) { +- QString argument = *argumentIterator; +- +- if (doubleDashFound) { +- positionalArgumentList.append(argument); +- } else if (argument.startsWith(doubleDashString)) { +- if (argument.length() > 2) { +- QString optionName = argument.mid(2).section(assignChar, 0, 0); +- if (registerFoundOption(optionName)) { +- if (!parseOptionValue(optionName, argument, &argumentIterator, args.end())) +- error = true; +- } else { +- error = true; +- } +- } else { +- doubleDashFound = true; +- } +- } else if (argument.startsWith(dashChar)) { +- if (argument.size() == 1) { // single dash ("stdin") +- positionalArgumentList.append(argument); +- continue; +- } +- switch (singleDashWordOptionMode) { +- case QCommandLineParser::ParseAsCompactedShortOptions: +- { +- QString optionName; +- bool valueFound = false; +- for (int pos = 1 ; pos < argument.size(); ++pos) { +- optionName = argument.mid(pos, 1); +- if (!registerFoundOption(optionName)) { +- error = true; +- } else { +- const NameHash_t::const_iterator nameHashIt = nameHash.constFind(optionName); +- Q_ASSERT(nameHashIt != nameHash.constEnd()); // checked by registerFoundOption +- const NameHash_t::mapped_type optionOffset = *nameHashIt; +- const bool withValue = !commandLineOptionList.at(optionOffset).valueName().isEmpty(); +- if (withValue) { +- if (pos + 1 < argument.size()) { +- if (argument.at(pos + 1) == assignChar) +- ++pos; +- optionValuesHash[optionOffset].append(argument.mid(pos + 1)); +- valueFound = true; +- } +- break; +- } +- if (pos + 1 < argument.size() && argument.at(pos + 1) == assignChar) +- break; +- } +- } +- if (!valueFound && !parseOptionValue(optionName, argument, &argumentIterator, args.end())) +- error = true; +- break; +- } +- case QCommandLineParser::ParseAsLongOptions: +- { +- const QString optionName = argument.mid(1).section(assignChar, 0, 0); +- if (registerFoundOption(optionName)) { +- if (!parseOptionValue(optionName, argument, &argumentIterator, args.end())) +- error = true; +- } else { +- error = true; +- } +- break; +- } +- } +- } else { +- positionalArgumentList.append(argument); +- } +- if (argumentIterator == args.end()) +- break; +- } +- return !error; +-} +- +-/*! +- Checks whether the option \a name was passed to the application. +- +- Returns \c true if the option \a name was set, false otherwise. +- +- The name provided can be any long or short name of any option that was +- added with \c addOption(). All the options names are treated as being +- equivalent. If the name is not recognized or that option was not present, +- false is returned. +- +- Example: +- \snippet code/src_corelib_tools_qcommandlineparser.cpp 0 +- */ +- +-bool QCommandLineParser::isSet(const QString &name) const +-{ +- d->checkParsed("isSet"); +- if (d->optionNames.contains(name)) +- return true; +- const QStringList aliases = d->aliases(name); +- Q_FOREACH (const QString &optionName, d->optionNames) { +- if (aliases.contains(optionName)) +- return true; +- } +- return false; +-} +- +-/*! +- Returns the option value found for the given option name \a optionName, or +- an empty string if not found. +- +- The name provided can be any long or short name of any option that was +- added with \c addOption(). All the option names are treated as being +- equivalent. If the name is not recognized or that option was not present, an +- empty string is returned. +- +- For options found by the parser, the last value found for +- that option is returned. If the option wasn't specified on the command line, +- the default value is returned. +- +- An empty string is returned if the option does not take a value. +- +- \sa values(), QCommandLineOption::setDefaultValue(), QCommandLineOption::setDefaultValues() +- */ +- +-QString QCommandLineParser::value(const QString &optionName) const +-{ +- d->checkParsed("value"); +- const QStringList valueList = values(optionName); +- +- if (!valueList.isEmpty()) +- return valueList.last(); +- +- return QString(); +-} +- +-/*! +- Returns a list of option values found for the given option name \a +- optionName, or an empty list if not found. +- +- The name provided can be any long or short name of any option that was +- added with \c addOption(). All the options names are treated as being +- equivalent. If the name is not recognized or that option was not present, an +- empty list is returned. +- +- For options found by the parser, the list will contain an entry for +- each time the option was encountered by the parser. If the option wasn't +- specified on the command line, the default values are returned. +- +- An empty list is returned if the option does not take a value. +- +- \sa value(), QCommandLineOption::setDefaultValue(), QCommandLineOption::setDefaultValues() +- */ +- +-QStringList QCommandLineParser::values(const QString &optionName) const +-{ +- d->checkParsed("values"); +- const NameHash_t::const_iterator it = d->nameHash.constFind(optionName); +- if (it != d->nameHash.constEnd()) { +- const int optionOffset = *it; +- QStringList values = d->optionValuesHash.value(optionOffset); +- if (values.isEmpty()) +- values = d->commandLineOptionList.at(optionOffset).defaultValues(); +- return values; +- } +- +- qWarning("QCommandLineParser: option not defined: \"%s\"", qPrintable(optionName)); +- return QStringList(); +-} +- +-/*! +- \overload +- Checks whether the \a option was passed to the application. +- +- Returns \c true if the \a option was set, false otherwise. +- +- This is the recommended way to check for options with no values. +- +- Example: +- \snippet code/src_corelib_tools_qcommandlineparser.cpp 1 +-*/ +-bool QCommandLineParser::isSet(const QCommandLineOption &option) const +-{ +- // option.names() might be empty if the constructor failed +- return !option.names().isEmpty() && isSet(option.names().first()); +-} +- +-/*! +- \overload +- Returns the option value found for the given \a option, or +- an empty string if not found. +- +- For options found by the parser, the last value found for +- that option is returned. If the option wasn't specified on the command line, +- the default value is returned. +- +- An empty string is returned if the option does not take a value. +- +- \sa values(), QCommandLineOption::setDefaultValue(), QCommandLineOption::setDefaultValues() +-*/ +-QString QCommandLineParser::value(const QCommandLineOption &option) const +-{ +- return value(option.names().first()); +-} +- +-/*! +- \overload +- Returns a list of option values found for the given \a option, +- or an empty list if not found. +- +- For options found by the parser, the list will contain an entry for +- each time the option was encountered by the parser. If the option wasn't +- specified on the command line, the default values are returned. +- +- An empty list is returned if the option does not take a value. +- +- \sa value(), QCommandLineOption::setDefaultValue(), QCommandLineOption::setDefaultValues() +-*/ +-QStringList QCommandLineParser::values(const QCommandLineOption &option) const +-{ +- return values(option.names().first()); +-} +- +-/*! +- Returns a list of positional arguments. +- +- These are all of the arguments that were not recognized as part of an +- option. +- */ +- +-QStringList QCommandLineParser::positionalArguments() const +-{ +- d->checkParsed("positionalArguments"); +- return d->positionalArgumentList; +-} +- +-/*! +- Returns a list of option names that were found. +- +- This returns a list of all the recognized option names found by the +- parser, in the order in which they were found. For any long options +- that were in the form {--option=value}, the value part will have been +- dropped. +- +- The names in this list do not include the preceding dash characters. +- Names may appear more than once in this list if they were encountered +- more than once by the parser. +- +- Any entry in the list can be used with \c value() or with +- \c values() to get any relevant option values. +- */ +- +-QStringList QCommandLineParser::optionNames() const +-{ +- d->checkParsed("optionNames"); +- return d->optionNames; +-} +- +-/*! +- Returns a list of unknown option names. +- +- This list will include both long an short name options that were not +- recognized. For any long options that were in the form {--option=value}, +- the value part will have been dropped and only the long name is added. +- +- The names in this list do not include the preceding dash characters. +- Names may appear more than once in this list if they were encountered +- more than once by the parser. +- +- \sa optionNames() +- */ +- +-QStringList QCommandLineParser::unknownOptionNames() const +-{ +- d->checkParsed("unknownOptionNames"); +- return d->unknownOptionNames; +-} +- +-/*! +- Displays the help information, and exits the application. +- This is automatically triggered by the --help option, but can also +- be used to display the help when the user is not invoking the +- application correctly. +- The exit code is set to \a exitCode. It should be set to 0 if the +- user requested to see the help, and to any other value in case of +- an error. +- +- \sa helpText() +-*/ +-void QCommandLineParser::showHelp(int exitCode) +-{ +- fprintf(stdout, "%s", qPrintable(d->helpText())); +- ::exit(exitCode); +-} +- +-/*! +- Returns a string containing the complete help information. +- +- \sa showHelp() +-*/ +-QString QCommandLineParser::helpText() const +-{ +- return d->helpText(); +-} +- +-static QString wrapText(const QString &names, int longestOptionNameString, const QString &description) +-{ +- const QLatin1Char nl('\n'); +- QString text = QString(" ") + names.leftJustified(longestOptionNameString) + QLatin1Char(' '); +- const int indent = text.length(); +- int lineStart = 0; +- int lastBreakable = -1; +- const int max = 79 - indent; +- int x = 0; +- const int len = description.length(); +- +- for (int i = 0; i < len; ++i) { +- ++x; +- const QChar c = description.at(i); +- if (c.isSpace()) +- lastBreakable = i; +- +- int breakAt = -1; +- int nextLineStart = -1; +- if (x > max && lastBreakable != -1) { +- // time to break and we know where +- breakAt = lastBreakable; +- nextLineStart = lastBreakable + 1; +- } else if ((x > max - 1 && lastBreakable == -1) || i == len - 1) { +- // time to break but found nowhere [-> break here], or end of last line +- breakAt = i + 1; +- nextLineStart = breakAt; +- } else if (c == nl) { +- // forced break +- breakAt = i; +- nextLineStart = i + 1; +- } +- +- if (breakAt != -1) { +- const int numChars = breakAt - lineStart; +- //qDebug() << "breakAt=" << description.at(breakAt) << "breakAtSpace=" << breakAtSpace << lineStart << "to" << breakAt << description.mid(lineStart, numChars); +- if (lineStart > 0) +- text += QString(indent, QLatin1Char(' ')); +- text += description.mid(lineStart, numChars) + nl; +- x = 0; +- lastBreakable = -1; +- lineStart = nextLineStart; +- if (lineStart < len && description.at(lineStart).isSpace()) +- ++lineStart; // don't start a line with a space +- i = lineStart; +- } +- } +- +- return text; +-} +- +-QString QCommandLineParserPrivate::helpText() const +-{ +- const QLatin1Char nl('\n'); +- QString text; +- const QString exeName = QCoreApplication::instance()->arguments().first(); +- QString usage = exeName; +- if (!commandLineOptionList.isEmpty()) { +- usage += QLatin1Char(' '); +- usage += QCommandLineParser::tr("[options]"); +- } +- Q_FOREACH (const PositionalArgumentDefinition &arg, positionalArgumentDefinitions) { +- usage += QLatin1Char(' '); +- usage += arg.syntax; +- } +- text += QCommandLineParser::tr("Usage: %1").arg(usage) + nl; +- if (!description.isEmpty()) +- text += description + nl; +- text += nl; +- if (!commandLineOptionList.isEmpty()) +- text += QCommandLineParser::tr("Options:") + nl; +- QStringList optionNameList; +- int longestOptionNameString = 0; +- Q_FOREACH (const QCommandLineOption &option, commandLineOptionList) { +- QStringList optionNames; +- Q_FOREACH (const QString &optionName, option.names()) { +- if (optionName.length() == 1) +- optionNames.append(QLatin1Char('-') + optionName); +- else +- optionNames.append(QString("--") + optionName); +- } +- QString optionNamesString = optionNames.join(", "); +- if (!option.valueName().isEmpty()) +- optionNamesString += QString(" <") + option.valueName() + QLatin1Char('>'); +- optionNameList.append(optionNamesString); +- longestOptionNameString = qMax(longestOptionNameString, optionNamesString.length()); +- } +- ++longestOptionNameString; +- for (int i = 0; i < commandLineOptionList.count(); ++i) { +- const QCommandLineOption &option = commandLineOptionList.at(i); +- text += wrapText(optionNameList.at(i), longestOptionNameString, option.description()); +- } +- if (!positionalArgumentDefinitions.isEmpty()) { +- if (!commandLineOptionList.isEmpty()) +- text += nl; +- text += QCommandLineParser::tr("Arguments:") + nl; +- Q_FOREACH (const PositionalArgumentDefinition &arg, positionalArgumentDefinitions) { +- text += wrapText(arg.name, longestOptionNameString, arg.description); +- } +- } +- return text; +-} +diff --git a/src/core/qcommandlineparser.h b/src/core/qcommandlineparser.h +deleted file mode 100644 +index eeecf2d..0000000 +--- a/src/core/qcommandlineparser.h ++++ /dev/null +@@ -1,102 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 Laszlo Papp +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 as published by the Free Software +-** Foundation and appearing in the file LICENSE.LGPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU Lesser General Public License version 2.1 requirements +-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU +-** General Public License version 3.0 as published by the Free Software +-** Foundation and appearing in the file LICENSE.GPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU General Public License version 3.0 requirements will be +-** met: http://www.gnu.org/copyleft/gpl.html. +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#ifndef QCOMMANDLINEPARSER_H +-#define QCOMMANDLINEPARSER_H +- +-#include +-#include +- +-#include "qcommandlineoption.h" +- +-class QCommandLineParserPrivate; +-class QCoreApplication; +- +-class QCommandLineParser +-{ +- Q_DECLARE_TR_FUNCTIONS(QCommandLineParser) +-public: +- QCommandLineParser(); +- ~QCommandLineParser(); +- +- enum SingleDashWordOptionMode { +- ParseAsCompactedShortOptions, +- ParseAsLongOptions +- }; +- void setSingleDashWordOptionMode(SingleDashWordOptionMode parsingMode); +- +- bool addOption(const QCommandLineOption &commandLineOption); +- +- QCommandLineOption addVersionOption(); +- QCommandLineOption addHelpOption(); +- void setApplicationDescription(const QString &description); +- QString applicationDescription() const; +- void addPositionalArgument(const QString &name, const QString &description, const QString &syntax = QString()); +- void clearPositionalArguments(); +- +- void process(const QStringList &arguments); +- void process(const QCoreApplication &app); +- +- bool parse(const QStringList &arguments); +- QString errorText() const; +- +- bool isSet(const QString &name) const; +- QString value(const QString &name) const; +- QStringList values(const QString &name) const; +- +- bool isSet(const QCommandLineOption &option) const; +- QString value(const QCommandLineOption &option) const; +- QStringList values(const QCommandLineOption &option) const; +- +- QStringList positionalArguments() const; +- QStringList optionNames() const; +- QStringList unknownOptionNames() const; +- +- void showHelp(int exitCode = 0); +- QString helpText() const; +- +-private: +- Q_DISABLE_COPY(QCommandLineParser) +- +- QCommandLineParserPrivate * const d; +-}; +- +-#endif // QCOMMANDLINEPARSER_H +diff --git a/src/core/qlockfile.cpp b/src/core/qlockfile.cpp +deleted file mode 100644 +index 567440c..0000000 +--- a/src/core/qlockfile.cpp ++++ /dev/null +@@ -1,344 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 David Faure +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL21$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 or version 3 as published by the Free +-** Software Foundation and appearing in the file LICENSE.LGPLv21 and +-** LICENSE.LGPLv3 included in the packaging of this file. Please review the +-** following information to ensure the GNU Lesser General Public License +-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#include "qlockfile.h" +-#include "qlockfile_p.h" +-#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) +-# include +-#else +-# include +-#endif +-#include +- +-QT_BEGIN_NAMESPACE +- +-/*! +- \class QLockFile +- \inmodule QtCore +- \brief The QLockFile class provides locking between processes using a file. +- \since 5.1 +- +- A lock file can be used to prevent multiple processes from accessing concurrently +- the same resource. For instance, a configuration file on disk, or a socket, a port, +- a region of shared memory... +- +- Serialization is only guaranteed if all processes that access the shared resource +- use QLockFile, with the same file path. +- +- QLockFile supports two use cases: +- to protect a resource for a short-term operation (e.g. verifying if a configuration +- file has changed before saving new settings), and for long-lived protection of a +- resource (e.g. a document opened by a user in an editor) for an indefinite amount of time. +- +- When protecting for a short-term operation, it is acceptable to call lock() and wait +- until any running operation finishes. +- When protecting a resource over a long time, however, the application should always +- call setStaleLockTime(0) and then tryLock() with a short timeout, in order to +- warn the user that the resource is locked. +- +- If the process holding the lock crashes, the lock file stays on disk and can prevent +- any other process from accessing the shared resource, ever. For this reason, QLockFile +- tries to detect such a "stale" lock file, based on the process ID written into the file, +- and (in case that process ID got reused meanwhile), on the last modification time of +- the lock file (30s by default, for the use case of a short-lived operation). +- If the lock file is found to be stale, it will be deleted. +- +- For the use case of protecting a resource over a long time, you should therefore call +- setStaleLockTime(0), and when tryLock() returns LockFailedError, inform the user +- that the document is locked, possibly using getLockInfo() for more details. +-*/ +- +-/*! +- \enum QLockFile::LockError +- +- This enum describes the result of the last call to lock() or tryLock(). +- +- \value NoError The lock was acquired successfully. +- \value LockFailedError The lock could not be acquired because another process holds it. +- \value PermissionError The lock file could not be created, for lack of permissions +- in the parent directory. +- \value UnknownError Another error happened, for instance a full partition +- prevented writing out the lock file. +-*/ +- +-/*! +- Constructs a new lock file object. +- The object is created in an unlocked state. +- When calling lock() or tryLock(), a lock file named \a fileName will be created, +- if it doesn't already exist. +- +- \sa lock(), unlock() +-*/ +-QLockFile::QLockFile(const QString &fileName) +- : d_ptr(new QLockFilePrivate(fileName)) +-{ +-} +- +-/*! +- Destroys the lock file object. +- If the lock was acquired, this will release the lock, by deleting the lock file. +-*/ +-QLockFile::~QLockFile() +-{ +- unlock(); +-} +- +-/*! +- Sets \a staleLockTime to be the time in milliseconds after which +- a lock file is considered stale. +- The default value is 30000, i.e. 30 seconds. +- If your application typically keeps the file locked for more than 30 seconds +- (for instance while saving megabytes of data for 2 minutes), you should set +- a bigger value using setStaleLockTime(). +- +- The value of \a staleLockTime is used by lock() and tryLock() in order +- to determine when an existing lock file is considered stale, i.e. left over +- by a crashed process. This is useful for the case where the PID got reused +- meanwhile, so the only way to detect a stale lock file is by the fact that +- it has been around for a long time. +- +- \sa staleLockTime() +-*/ +-void QLockFile::setStaleLockTime(int staleLockTime) +-{ +- Q_D(QLockFile); +- d->staleLockTime = staleLockTime; +-} +- +-/*! +- Returns the time in milliseconds after which +- a lock file is considered stale. +- +- \sa setStaleLockTime() +-*/ +-int QLockFile::staleLockTime() const +-{ +- Q_D(const QLockFile); +- return d->staleLockTime; +-} +- +-/*! +- Returns \c true if the lock was acquired by this QLockFile instance, +- otherwise returns \c false. +- +- \sa lock(), unlock(), tryLock() +-*/ +-bool QLockFile::isLocked() const +-{ +- Q_D(const QLockFile); +- return d->isLocked; +-} +- +-/*! +- Creates the lock file. +- +- If another process (or another thread) has created the lock file already, +- this function will block until that process (or thread) releases it. +- +- Calling this function multiple times on the same lock from the same +- thread without unlocking first is not allowed. This function will +- \e dead-lock when the file is locked recursively. +- +- Returns \c true if the lock was acquired, false if it could not be acquired +- due to an unrecoverable error, such as no permissions in the parent directory. +- +- \sa unlock(), tryLock() +-*/ +-bool QLockFile::lock() +-{ +- return tryLock(-1); +-} +- +-/*! +- Attempts to create the lock file. This function returns \c true if the +- lock was obtained; otherwise it returns \c false. If another process (or +- another thread) has created the lock file already, this function will +- wait for at most \a timeout milliseconds for the lock file to become +- available. +- +- Note: Passing a negative number as the \a timeout is equivalent to +- calling lock(), i.e. this function will wait forever until the lock +- file can be locked if \a timeout is negative. +- +- If the lock was obtained, it must be released with unlock() +- before another process (or thread) can successfully lock it. +- +- Calling this function multiple times on the same lock from the same +- thread without unlocking first is not allowed, this function will +- \e always return false when attempting to lock the file recursively. +- +- \sa lock(), unlock() +-*/ +-bool QLockFile::tryLock(int timeout) +-{ +- Q_D(QLockFile); +-#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) +- QElapsedTimer timer; +-#else +- QTime timer; +-#endif +- if (timeout > 0) +- timer.start(); +- int sleepTime = 100; +- Q_FOREVER { +- d->lockError = d->tryLock_sys(); +- switch (d->lockError) { +- case NoError: +- d->isLocked = true; +- return true; +- case PermissionError: +- case UnknownError: +- return false; +- case LockFailedError: +- if (!d->isLocked && d->isApparentlyStale()) { +- // Stale lock from another thread/process +- // Ensure two processes don't remove it at the same time +- QLockFile rmlock(d->fileName + QLatin1String(".rmlock")); +- if (rmlock.tryLock()) { +- if (d->isApparentlyStale() && d->removeStaleLock()) +- continue; +- } +- } +- break; +- } +- if (timeout == 0 || (timeout > 0 && (timer.elapsed() > timeout))) +- return false; +- QLockFileThread::msleep(sleepTime); +- if (sleepTime < 5 * 1000) +- sleepTime *= 2; +- } +- // not reached +- return false; +-} +- +-/*! +- \fn void QLockFile::unlock() +- Releases the lock, by deleting the lock file. +- +- Calling unlock() without locking the file first, does nothing. +- +- \sa lock(), tryLock() +-*/ +- +-/*! +- Retrieves information about the current owner of the lock file. +- +- If tryLock() returns \c false, and error() returns LockFailedError, +- this function can be called to find out more information about the existing +- lock file: +- \list +- \li the PID of the application (returned in \a pid) +- \li the \a hostname it's running on (useful in case of networked filesystems), +- \li the name of the application which created it (returned in \a appname), +- \endlist +- +- Note that tryLock() automatically deleted the file if there is no +- running application with this PID, so LockFailedError can only happen if there is +- an application with this PID (it could be unrelated though). +- +- This can be used to inform users about the existing lock file and give them +- the choice to delete it. After removing the file using removeStaleLockFile(), +- the application can call tryLock() again. +- +- This function returns \c true if the information could be successfully retrieved, false +- if the lock file doesn't exist or doesn't contain the expected data. +- This can happen if the lock file was deleted between the time where tryLock() failed +- and the call to this function. Simply call tryLock() again if this happens. +-*/ +-bool QLockFile::getLockInfo(qint64 *pid, QString *hostname, QString *appname) const +-{ +- Q_D(const QLockFile); +- return d->getLockInfo(pid, hostname, appname); +-} +- +-bool QLockFilePrivate::getLockInfo(qint64 *pid, QString *hostname, QString *appname) const +-{ +- QFile reader(fileName); +- if (!reader.open(QIODevice::ReadOnly)) +- return false; +- +- QByteArray pidLine = reader.readLine(); +- pidLine.chop(1); +- QByteArray appNameLine = reader.readLine(); +- appNameLine.chop(1); +- QByteArray hostNameLine = reader.readLine(); +- hostNameLine.chop(1); +- if (pidLine.isEmpty()) +- return false; +- +- qint64 thePid = pidLine.toLongLong(); +- if (pid) +- *pid = thePid; +- if (appname) +- *appname = QString::fromUtf8(appNameLine); +- if (hostname) +- *hostname = QString::fromUtf8(hostNameLine); +- return thePid > 0; +-} +- +-/*! +- Attempts to forcefully remove an existing lock file. +- +- Calling this is not recommended when protecting a short-lived operation: QLockFile +- already takes care of removing lock files after they are older than staleLockTime(). +- +- This method should only be called when protecting a resource for a long time, i.e. +- with staleLockTime(0), and after tryLock() returned LockFailedError, and the user +- agreed on removing the lock file. +- +- Returns \c true on success, false if the lock file couldn't be removed. This happens +- on Windows, when the application owning the lock is still running. +-*/ +-bool QLockFile::removeStaleLockFile() +-{ +- Q_D(QLockFile); +- if (d->isLocked) { +- qWarning("removeStaleLockFile can only be called when not holding the lock"); +- return false; +- } +- return d->removeStaleLock(); +-} +- +-/*! +- Returns the lock file error status. +- +- If tryLock() returns \c false, this function can be called to find out +- the reason why the locking failed. +-*/ +-QLockFile::LockError QLockFile::error() const +-{ +- Q_D(const QLockFile); +- return d->lockError; +-} +- +-QT_END_NAMESPACE +diff --git a/src/core/qlockfile.h b/src/core/qlockfile.h +deleted file mode 100644 +index 673026f..0000000 +--- a/src/core/qlockfile.h ++++ /dev/null +@@ -1,79 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 David Faure +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL21$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 or version 3 as published by the Free +-** Software Foundation and appearing in the file LICENSE.LGPLv21 and +-** LICENSE.LGPLv3 included in the packaging of this file. Please review the +-** following information to ensure the GNU Lesser General Public License +-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#ifndef QLOCKFILE_H +-#define QLOCKFILE_H +- +-#include +-#include +- +-QT_BEGIN_NAMESPACE +- +-class QLockFilePrivate; +- +-class QLockFile +-{ +-public: +- QLockFile(const QString &fileName); +- ~QLockFile(); +- +- bool lock(); +- bool tryLock(int timeout = 0); +- void unlock(); +- +- void setStaleLockTime(int); +- int staleLockTime() const; +- +- bool isLocked() const; +- bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const; +- bool removeStaleLockFile(); +- +- enum LockError { +- NoError = 0, +- LockFailedError = 1, +- PermissionError = 2, +- UnknownError = 3 +- }; +- LockError error() const; +- +-protected: +- QScopedPointer d_ptr; +- +-private: +- Q_DECLARE_PRIVATE(QLockFile) +- Q_DISABLE_COPY(QLockFile) +-}; +- +-QT_END_NAMESPACE +- +-#endif // QLOCKFILE_H +diff --git a/src/core/qlockfile_p.h b/src/core/qlockfile_p.h +deleted file mode 100644 +index 15fa37b..0000000 +--- a/src/core/qlockfile_p.h ++++ /dev/null +@@ -1,101 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 David Faure +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL21$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 or version 3 as published by the Free +-** Software Foundation and appearing in the file LICENSE.LGPLv21 and +-** LICENSE.LGPLv3 included in the packaging of this file. Please review the +-** following information to ensure the GNU Lesser General Public License +-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#ifndef QLOCKFILE_P_H +-#define QLOCKFILE_P_H +- +-// +-// W A R N I N G +-// ------------- +-// +-// This file is not part of the Qt API. It exists purely as an +-// implementation detail. This header file may change from version to +-// version without notice, or even be removed. +-// +-// We mean it. +-// +- +-#include "qlockfile.h" +- +-#include +-#include +- +-#ifdef Q_OS_WIN +-#include +-#endif +- +-QT_BEGIN_NAMESPACE +- +-class QLockFileThread : public QThread +-{ +-public: +- static void msleep(unsigned long msecs) { QThread::msleep(msecs); } +-}; +- +-class QLockFilePrivate +-{ +-public: +- QLockFilePrivate(const QString &fn) +- : fileName(fn), +-#ifdef Q_OS_WIN +- fileHandle(INVALID_HANDLE_VALUE), +-#else +- fileHandle(-1), +-#endif +- staleLockTime(30 * 1000), // 30 seconds +- lockError(QLockFile::NoError), +- isLocked(false) +- { +- } +- QLockFile::LockError tryLock_sys(); +- bool removeStaleLock(); +- bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const; +- // Returns \c true if the lock belongs to dead PID, or is old. +- // The attempt to delete it will tell us if it was really stale or not, though. +- bool isApparentlyStale() const; +- static QString processNameByPid(qint64 pid); +- +- QString fileName; +-#ifdef Q_OS_WIN +- Qt::HANDLE fileHandle; +-#else +- int fileHandle; +-#endif +- int staleLockTime; // "int milliseconds" is big enough for 24 days +- QLockFile::LockError lockError; +- bool isLocked; +-}; +- +-QT_END_NAMESPACE +- +-#endif /* QLOCKFILE_P_H */ +diff --git a/src/core/qlockfile_unix.cpp b/src/core/qlockfile_unix.cpp +deleted file mode 100644 +index 5b3add3..0000000 +--- a/src/core/qlockfile_unix.cpp ++++ /dev/null +@@ -1,244 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 David Faure +-** Copyright (C) 2015 The Qt Company Ltd. +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL21$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 or version 3 as published by the Free +-** Software Foundation and appearing in the file LICENSE.LGPLv21 and +-** LICENSE.LGPLv3 included in the packaging of this file. Please review the +-** following information to ensure the GNU Lesser General Public License +-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#include "qlockfile_p.h" +- +-#include +-#include +-#include +-#include +-#include +- +-#include // flock +-#include // kill +-#include // kill +-#include // gethostname +- +-#include +- +-#if defined(Q_OS_MAC) +-# include +-#elif defined(Q_OS_LINUX) +-# include +-# include +-#endif +- +-QT_BEGIN_NAMESPACE +- +-#define EINTR_LOOP(var, cmd) \ +- do { \ +- var = cmd; \ +- } while (var == -1 && errno == EINTR) +- +-// don't call QT_OPEN or ::open +-// call qt_safe_open +-static inline int qt_safe_open(const char *pathname, int flags, mode_t mode = 0777) +-{ +-#ifdef O_CLOEXEC +- flags |= O_CLOEXEC; +-#endif +- int fd; +- EINTR_LOOP(fd, ::open(pathname, flags, mode)); +- +- // unknown flags are ignored, so we have no way of verifying if +- // O_CLOEXEC was accepted +- if (fd != -1) +- ::fcntl(fd, F_SETFD, FD_CLOEXEC); +- return fd; +-} +- +-static inline qint64 qt_safe_write(int fd, const void *data, qint64 len) +-{ +- qint64 ret = 0; +- EINTR_LOOP(ret, ::write(fd, data, len)); +- return ret; +-} +- +-static QByteArray localHostName() // from QHostInfo::localHostName(), modified to return a QByteArray +-{ +- QByteArray hostName(512, Qt::Uninitialized); +- if (gethostname(hostName.data(), hostName.size()) == -1) +- return QByteArray(); +- hostName.truncate(strlen(hostName.data())); +- return hostName; +-} +- +-// ### merge into qt_safe_write? +-static qint64 qt_write_loop(int fd, const char *data, qint64 len) +-{ +- qint64 pos = 0; +- while (pos < len) { +- const qint64 ret = qt_safe_write(fd, data + pos, len - pos); +- if (ret == -1) // e.g. partition full +- return pos; +- pos += ret; +- } +- return pos; +-} +- +-static bool setNativeLocks(int fd) +-{ +-#if defined(LOCK_EX) && defined(LOCK_NB) +- if (flock(fd, LOCK_EX | LOCK_NB) == -1) // other threads, and other processes on a local fs +- return false; +-#endif +- struct flock flockData; +- flockData.l_type = F_WRLCK; +- flockData.l_whence = SEEK_SET; +- flockData.l_start = 0; +- flockData.l_len = 0; // 0 = entire file +- flockData.l_pid = getpid(); +- if (fcntl(fd, F_SETLK, &flockData) == -1) // for networked filesystems +- return false; +- return true; +-} +- +-QLockFile::LockError QLockFilePrivate::tryLock_sys() +-{ +- // Assemble data, to write in a single call to write +- // (otherwise we'd have to check every write call) +- // Use operator% from the fast builder to avoid multiple memory allocations. +- QByteArray fileData = QByteArray::number(QCoreApplication::applicationPid()) + '\n' +- + QCoreApplication::applicationName().toUtf8() + '\n' +- + localHostName() + '\n'; +- +- const QByteArray lockFileName = QFile::encodeName(fileName); +- const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY | O_CREAT | O_EXCL, 0644); +- if (fd < 0) { +- switch (errno) { +- case EEXIST: +- return QLockFile::LockFailedError; +- case EACCES: +- case EROFS: +- return QLockFile::PermissionError; +- default: +- return QLockFile::UnknownError; +- } +- } +- // Ensure nobody else can delete the file while we have it +- if (!setNativeLocks(fd)) +- qWarning() << "setNativeLocks failed:" << strerror(errno); +- +- if (qt_write_loop(fd, fileData.constData(), fileData.size()) < fileData.size()) { +- close(fd); +- if (!QFile::remove(fileName)) +- qWarning("QLockFile: Could not remove our own lock file %s.", qPrintable(fileName)); +- return QLockFile::UnknownError; // partition full +- } +- +- // We hold the lock, continue. +- fileHandle = fd; +- +- return QLockFile::NoError; +-} +- +-bool QLockFilePrivate::removeStaleLock() +-{ +- const QByteArray lockFileName = QFile::encodeName(fileName); +- const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY, 0644); +- if (fd < 0) // gone already? +- return false; +-#ifdef Q_OS_MAC +- // ugly workaround: ignore setNativeLocks() result on Mac since it's broken there +- setNativeLocks(fd); +- bool success = (::unlink(lockFileName) == 0); +-#else +- bool success = setNativeLocks(fd) && (::unlink(lockFileName) == 0); +-#endif +- close(fd); +- return success; +-} +- +-bool QLockFilePrivate::isApparentlyStale() const +-{ +- qint64 pid; +- QString hostname, appname; +- if (getLockInfo(&pid, &hostname, &appname)) { +- if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) { +- if (::kill(pid, 0) == -1 && errno == ESRCH) +- return true; // PID doesn't exist anymore +- const QString processName = processNameByPid(pid); +- if (!processName.isEmpty()) { +- QFileInfo fi(appname); +- if (fi.isSymLink()) +- fi.setFile(fi.symLinkTarget()); +- if (processName.toLower() != fi.fileName().toLower()) +- return true; // PID got reused by a different application. +- } +- } +- } +- const qint64 age = QFileInfo(fileName).lastModified().secsTo(QDateTime::currentDateTime()) * 1000; +- return staleLockTime > 0 && age > staleLockTime; +-} +- +-QString QLockFilePrivate::processNameByPid(qint64 pid) +-{ +-#if defined(Q_OS_MAC) +- char name[1024]; +- proc_name(pid, name, sizeof(name) / sizeof(char)); +- return QFile::decodeName(name); +-#elif defined(Q_OS_LINUX) +- if (!QFile::exists(QString("/proc/version"))) +- return QString(); +- char exePath[64]; +- char buf[PATH_MAX + 1]; +- sprintf(exePath, "/proc/%lld/exe", pid); +- size_t len = static_cast(readlink(exePath, buf, sizeof(buf))); +- if (len >= sizeof(buf)) { +- // The pid is gone. Return some invalid process name to fail the test. +- return QString("/ERROR/"); +- } +- buf[len] = 0; +- return QFileInfo(QFile::decodeName(buf)).fileName(); +-#else +- return QString(); +-#endif +-} +- +-void QLockFile::unlock() +-{ +- Q_D(QLockFile); +- if (!d->isLocked) +- return; +- close(d->fileHandle); +- d->fileHandle = -1; +- if (!QFile::remove(d->fileName)) { +- qWarning() << "Could not remove our own lock file" << d->fileName << "maybe permissions changed meanwhile?"; +- // This is bad because other users of this lock file will now have to wait for the stale-lock-timeout... +- } +- d->lockError = QLockFile::NoError; +- d->isLocked = false; +-} +- +-QT_END_NAMESPACE +diff --git a/src/core/qlockfile_win.cpp b/src/core/qlockfile_win.cpp +deleted file mode 100644 +index 5fc3327..0000000 +--- a/src/core/qlockfile_win.cpp ++++ /dev/null +@@ -1,227 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 David Faure +-** Copyright (C) 2015 The Qt Company Ltd. +-** Contact: http://www.qt.io/licensing/ +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL21$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and The Qt Company. For licensing terms +-** and conditions see http://www.qt.io/terms-conditions. For further +-** information use the contact form at http://www.qt.io/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 or version 3 as published by the Free +-** Software Foundation and appearing in the file LICENSE.LGPLv21 and +-** LICENSE.LGPLv3 included in the packaging of this file. Please review the +-** following information to ensure the GNU Lesser General Public License +-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** As a special exception, The Qt Company gives you certain additional +-** rights. These rights are described in The Qt Company LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#ifndef _UNICODE +-#define _UNICODE +-#endif +- +-#ifndef UNICODE +-#define UNICODE +-#endif +- +-#include "qlockfile_p.h" +- +-#include +- +-#include +-#include +-#include +-#include +-#include +- +-QT_BEGIN_NAMESPACE +- +-static inline QByteArray localHostName() +-{ +- return qgetenv("COMPUTERNAME"); +-} +- +-static inline bool fileExists(const wchar_t *fileName) +-{ +- WIN32_FILE_ATTRIBUTE_DATA data; +- return GetFileAttributesEx(fileName, GetFileExInfoStandard, &data); +-} +- +-QLockFile::LockError QLockFilePrivate::tryLock_sys() +-{ +- const ushort* nativePath = QDir::toNativeSeparators(fileName).utf16(); +- // When writing, allow others to read. +- // When reading, QFile will allow others to read and write, all good. +- // Adding FILE_SHARE_DELETE would allow forceful deletion of stale files, +- // but Windows doesn't allow recreating it while this handle is open anyway, +- // so this would only create confusion (can't lock, but no lock file to read from). +- const DWORD dwShareMode = FILE_SHARE_READ; +-#ifndef Q_OS_WINRT +- SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE }; +- HANDLE fh = CreateFile((const wchar_t*)nativePath, +- GENERIC_WRITE, +- dwShareMode, +- &securityAtts, +- CREATE_NEW, // error if already exists +- FILE_ATTRIBUTE_NORMAL, +- NULL); +-#else // !Q_OS_WINRT +- HANDLE fh = CreateFile2((const wchar_t*)nativePath, +- GENERIC_WRITE, +- dwShareMode, +- CREATE_NEW, // error if already exists +- NULL); +-#endif // Q_OS_WINRT +- if (fh == INVALID_HANDLE_VALUE) { +- const DWORD lastError = GetLastError(); +- switch (lastError) { +- case ERROR_SHARING_VIOLATION: +- case ERROR_ALREADY_EXISTS: +- case ERROR_FILE_EXISTS: +- return QLockFile::LockFailedError; +- case ERROR_ACCESS_DENIED: +- // readonly file, or file still in use by another process. +- // Assume the latter if the file exists, since we don't create it readonly. +- return fileExists((const wchar_t*)nativePath) +- ? QLockFile::LockFailedError +- : QLockFile::PermissionError; +- default: +- qWarning() << "Got unexpected locking error" << lastError; +- return QLockFile::UnknownError; +- } +- } +- +- // We hold the lock, continue. +- fileHandle = fh; +- // Assemble data, to write in a single call to write +- // (otherwise we'd have to check every write call) +- QByteArray fileData; +- fileData += QByteArray::number(QCoreApplication::applicationPid()); +- fileData += '\n'; +- fileData += QCoreApplication::applicationName().toUtf8(); +- fileData += '\n'; +- fileData += localHostName(); +- fileData += '\n'; +- DWORD bytesWritten = 0; +- QLockFile::LockError error = QLockFile::NoError; +- if (!WriteFile(fh, fileData.constData(), fileData.size(), &bytesWritten, NULL) || !FlushFileBuffers(fh)) +- error = QLockFile::UnknownError; // partition full +- return error; +-} +- +-bool QLockFilePrivate::removeStaleLock() +-{ +- // QFile::remove fails on Windows if the other process is still using the file, so it's not stale. +- return QFile::remove(fileName); +-} +- +-bool QLockFilePrivate::isApparentlyStale() const +-{ +- qint64 pid; +- QString hostname, appname; +- +- // On WinRT there seems to be no way of obtaining information about other +- // processes due to sandboxing +-#ifndef Q_OS_WINRT +- if (getLockInfo(&pid, &hostname, &appname)) { +- if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) { +- HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); +- if (!procHandle) +- return true; +- // We got a handle but check if process is still alive +- DWORD dwR = ::WaitForSingleObject(procHandle, 0); +- ::CloseHandle(procHandle); +- if (dwR == WAIT_TIMEOUT) +- return true; +- const QString processName = processNameByPid(pid); +- if (!processName.isEmpty() && processName != appname) +- return true; // PID got reused by a different application. +- } +- } +-#else // !Q_OS_WINRT +- Q_UNUSED(pid); +- Q_UNUSED(hostname); +- Q_UNUSED(appname); +-#endif // Q_OS_WINRT +- const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime()); +- return staleLockTime > 0 && age > staleLockTime; +-} +- +-QString QLockFilePrivate::processNameByPid(qint64 pid) +-{ +-#if !defined(Q_OS_WINRT) && !defined(Q_OS_WINCE) +- typedef DWORD (WINAPI *GetModuleFileNameExFunc)(HANDLE, HMODULE, LPTSTR, DWORD); +- +- HMODULE hPsapi = LoadLibraryA("psapi"); +- if (!hPsapi) +- return QString(); +- +- GetModuleFileNameExFunc qGetModuleFileNameEx +- = (GetModuleFileNameExFunc)GetProcAddress(hPsapi, "GetModuleFileNameExW"); +- if (!qGetModuleFileNameEx) { +- FreeLibrary(hPsapi); +- return QString(); +- } +- +- HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, DWORD(pid)); +- if (!hProcess) { +- FreeLibrary(hPsapi); +- return QString(); +- } +- wchar_t buf[MAX_PATH]; +- const DWORD length = qGetModuleFileNameEx(hProcess, NULL, buf, sizeof(buf) / sizeof(wchar_t)); +- CloseHandle(hProcess); +- FreeLibrary(hPsapi); +- if (!length) +- return QString(); +- QString name = QString::fromWCharArray(buf, length); +- int i = name.lastIndexOf(QLatin1Char('\\')); +- if (i >= 0) +- name.remove(0, i + 1); +- i = name.lastIndexOf(QLatin1Char('.')); +- if (i >= 0) +- name.truncate(i); +- return name; +-#else +- Q_UNUSED(pid); +- return QString(); +-#endif +-} +- +-void QLockFile::unlock() +-{ +- Q_D(QLockFile); +- if (!d->isLocked) +- return; +- CloseHandle(d->fileHandle); +- int attempts = 0; +- static const int maxAttempts = 500; // 500ms +- while (!QFile::remove(d->fileName) && ++attempts < maxAttempts) { +- // Someone is reading the lock file right now (on Windows this prevents deleting it). +- QLockFileThread::msleep(1); +- } +- if (attempts == maxAttempts) { +- qWarning() << "Could not remove our own lock file" << d->fileName << ". Either other users of the lock file are reading it constantly for 500 ms, or we (no longer) have permissions to delete the file"; +- // This is bad because other users of this lock file will now have to wait for the stale-lock-timeout... +- } +- d->lockError = QLockFile::NoError; +- d->isLocked = false; +-} +- +-QT_END_NAMESPACE +diff --git a/src/core/qsavefile.cpp b/src/core/qsavefile.cpp +deleted file mode 100644 +index 287f9e8..0000000 +--- a/src/core/qsavefile.cpp ++++ /dev/null +@@ -1,452 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +-** Contact: http://www.qt-project.org/ +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** GNU Lesser General Public License Usage +-** This file may be used under the terms of the GNU Lesser General Public +-** License version 2.1 as published by the Free Software Foundation and +-** appearing in the file LICENSE.LGPL included in the packaging of this +-** file. Please review the following information to ensure the GNU Lesser +-** General Public License version 2.1 requirements will be met: +-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Nokia gives you certain additional +-** rights. These rights are described in the Nokia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU General +-** Public License version 3.0 as published by the Free Software Foundation +-** and appearing in the file LICENSE.GPL included in the packaging of this +-** file. Please review the following information to ensure the GNU General +-** Public License version 3.0 requirements will be met: +-** http://www.gnu.org/copyleft/gpl.html. +-** +-** Other Usage +-** Alternatively, this file may be used in accordance with the terms and +-** conditions contained in a signed written agreement between you and Nokia. +-** +-** +-** +-** +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#include "qsavefile.h" +-#include "qsavefile_p.h" +- +-#include +-#include +-#include +- +-#ifdef Q_OS_WIN +-# include +-#else +-# include +-#endif +- +-QSaveFilePrivate::QSaveFilePrivate() +- : tempFile(0), error(QFile::NoError) +-{ +-} +- +-QSaveFilePrivate::~QSaveFilePrivate() +-{ +-} +- +-/*! +- \class QSaveFile +- \brief The QSaveFile class provides an interface for safely writing to files. +- +- \ingroup io +- +- \reentrant +- +- QSaveFile is an I/O device for writing text and binary files, without losing +- existing data if the writing operation fails. +- +- While writing, the contents will be written to a temporary file, and if +- no error happened, commit() will move it to the final file. This ensures that +- no data at the final file is lost in case an error happens while writing, +- and no partially-written file is ever present at the final location. Always +- use QSaveFile when saving entire documents to disk. +- +- QSaveFile automatically detects errors while writing, such as the full partition +- situation, where write() cannot write all the bytes. It will remember that +- an error happened, and will discard the temporary file in commit(). +- +- Much like with QFile, the file is opened with open(). Data is usually read +- and written using QDataStream or QTextStream, but you can also call the +- QIODevice-inherited functions read(), readLine(), readAll(), write(). +- +- Unlike QFile, calling close() is not allowed. commit() replaces it. If commit() +- was not called and the QSaveFile instance is destroyed, the temporary file is +- discarded. +- +- \sa QTextStream, QDataStream, QFileInfo, QDir, QFile, QTemporaryFile +-*/ +- +-/*! +- \internal +-*/ +-QSaveFile::QSaveFile() +- : QIODevice(), d_ptr(new QSaveFilePrivate) +-{ +-} +-/*! +- Constructs a new file object with the given \a parent. +-*/ +-QSaveFile::QSaveFile(QObject *parent) +- : QIODevice(parent), d_ptr(new QSaveFilePrivate) +-{ +-} +-/*! +- Constructs a new file object to represent the file with the given \a name. +-*/ +-QSaveFile::QSaveFile(const QString &name) +- : QIODevice(0), d_ptr(new QSaveFilePrivate) +-{ +- Q_D(QSaveFile); +- d->fileName = name; +-} +-/*! +- Constructs a new file object with the given \a parent to represent the +- file with the specified \a name. +-*/ +-QSaveFile::QSaveFile(const QString &name, QObject *parent) +- : QIODevice(parent), d_ptr(new QSaveFilePrivate) +-{ +- Q_D(QSaveFile); +- d->fileName = name; +-} +- +-/*! +- Destroys the file object, discarding the saved contents unless commit() was called. +-*/ +-QSaveFile::~QSaveFile() +-{ +- Q_D(QSaveFile); +- if (d->tempFile) { +- d->tempFile->setAutoRemove(true); +- delete d->tempFile; +- } +- QIODevice::close(); +- delete d; +-} +- +-/*! +- Returns false since temporary files support random access. +- +- \sa QIODevice::isSequential() +-*/ +-bool QSaveFile::isSequential() const +-{ +- return false; +-} +- +-/*! +- Returns the file error status. +- +- The I/O device status returns an error code. For example, if open() +- returns false, or a read/write operation returns -1, this function can +- be called to find out the reason why the operation failed. +- +- Unlike QFile which clears the error on the next operation, QSaveFile remembers +- the error until the file is closed, in order to discard the file contents in close(). +- +- \sa unsetError() +-*/ +- +-QFile::FileError QSaveFile::error() const +-{ +- return d_func()->error; +-} +- +-/*! +- Sets the file's error to QFile::NoError. +- +- This will make QSaveFile forget that an error happened during saving, so you +- probably don't want to call this, unless you're really sure that you want to +- save the file anyway. +- +- \sa error() +-*/ +-void QSaveFile::unsetError() +-{ +- d_func()->error = QFile::NoError; +- setErrorString(QString()); +-} +- +-/*! +- Returns the name set by setFileName() or to the QSaveFile +- constructor. +- +- \sa setFileName() +-*/ +-QString QSaveFile::fileName() const +-{ +- return d_func()->fileName; +-} +- +-/*! +- Sets the \a name of the file. The name can have no path, a +- relative path, or an absolute path. +- +- \sa QFile::setFileName(), fileName() +-*/ +-void QSaveFile::setFileName(const QString &name) +-{ +- d_func()->fileName = name; +-} +- +-/*! +- Opens the file using OpenMode \a mode, returning true if successful; +- otherwise false. +- +- Important: the \a mode must be QIODevice::WriteOnly. +- It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered. +- +- QIODevice::ReadWrite and QIODevice::Append are not supported at the moment. +- +- \sa QIODevice::OpenMode, setFileName() +-*/ +-bool QSaveFile::open(OpenMode mode) +-{ +- Q_D(QSaveFile); +- if (isOpen()) { +- qWarning("QSaveFile::open: File (%s) already open", qPrintable(fileName())); +- return false; +- } +- unsetError(); +- if ((mode & (ReadOnly | WriteOnly)) == 0) { +- qWarning("QSaveFile::open: Open mode not specified"); +- return false; +- } +- // In the future we could implement Append and ReadWrite by copying from the existing file to the temp file... +- if ((mode & ReadOnly) || (mode & Append)) { +- qWarning("QSaveFile::open: Unsupported open mode %d", int(mode)); +- return false; +- } +- +- // check if existing file is writable +- QFileInfo existingFile(d->fileName); +- if (existingFile.exists() && !existingFile.isWritable()) { +- d->error = QFile::WriteError; +- setErrorString(QSaveFile::tr("Existing file %1 is not writable").arg(d->fileName)); +- return false; +- } +- d->tempFile = new QTemporaryFile; +- d->tempFile->setAutoRemove(false); +- d->tempFile->setFileTemplate(d->fileName); +- if (!d->tempFile->open()) { +- d->error = d->tempFile->error(); +- setErrorString(d->tempFile->errorString()); +- delete d->tempFile; +- d->tempFile = 0; +- return false; +- } +- QIODevice::open(mode); +- if (existingFile.exists()) +- d->tempFile->setPermissions(existingFile.permissions()); +- return true; +-} +- +-/*! +- \reimp +- Cannot be called. +- Call commit() instead. +-*/ +-void QSaveFile::close() +-{ +- qFatal("QSaveFile::close called"); +-} +- +-/* +- Commits the changes to disk, if all previous writes were successful. +- +- It is mandatory to call this at the end of the saving operation, otherwise the file will be +- discarded. +- +- If an error happened during writing, deletes the temporary file and returns false. +- Otherwise, renames it to the final fileName and returns true on success. +- Finally, closes the device. +- +- \sa cancelWriting() +-*/ +-bool QSaveFile::commit() +-{ +- Q_D(QSaveFile); +- if (!d->tempFile) +- return false; +- if (!isOpen()) { +- qWarning("QSaveFile::commit: File (%s) is not open", qPrintable(fileName())); +- return false; +- } +- flush(); +-#ifdef Q_OS_WIN +- FlushFileBuffers(reinterpret_cast(handle())); +-#elif defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 +- fdatasync(d->tempFile->handle()); +-#else +- fsync(d->tempFile->handle()); +-#endif +- QIODevice::close(); +- if (d->error != QFile::NoError) { +- d->tempFile->remove(); +- unsetError(); +- delete d->tempFile; +- d->tempFile = 0; +- return false; +- } +- d->tempFile->close(); +-#ifdef Q_OS_WIN +- // On Windows QAbstractFileEngine::rename() fails if the the target exists, +- // so we have to rename the target. +- // Ideally the winapi ReplaceFile() method should be used. +- QString bakname = d->fileName + "~"; +- QFile::remove(bakname); +- QFile::rename(d->fileName, bakname); +-#endif +- QAbstractFileEngine* fileEngine = d->tempFile->fileEngine(); +- Q_ASSERT(fileEngine); +- if (!fileEngine->rename(d->fileName)) { +- d->error = fileEngine->error(); +- setErrorString(fileEngine->errorString()); +- d->tempFile->remove(); +- delete d->tempFile; +- d->tempFile = 0; +-#ifdef Q_OS_WIN +- QFile::rename(bakname, d->fileName); +-#endif +- return false; +- } +- delete d->tempFile; +- d->tempFile = 0; +-#ifdef Q_OS_WIN +- QFile::remove(bakname); +-#endif +- return true; +-} +- +-/*! +- Sets an error code so that commit() discards the temporary file. +- +- Further write operations are possible after calling this method, but none +- of it will have any effect, the written file will be discarded. +- +- \sa commit() +-*/ +-void QSaveFile::cancelWriting() +-{ +- if (!isOpen()) +- return; +- d_func()->error = QFile::WriteError; +- setErrorString(QSaveFile::tr("Writing canceled by application")); +-} +- +-/*! +- Returns the size of the file. +- \sa QFile::size() +-*/ +-qint64 QSaveFile::size() const +-{ +- Q_D(const QSaveFile); +- return d->tempFile ? d->tempFile->size() : qint64(-1); +-} +- +-/*! +- \reimp +-*/ +-qint64 QSaveFile::pos() const +-{ +- Q_D(const QSaveFile); +- return d->tempFile ? d->tempFile->pos() : qint64(-1); +-} +- +-/*! +- \reimp +-*/ +-bool QSaveFile::seek(qint64 offset) +-{ +- Q_D(QSaveFile); +- return d->tempFile ? d->tempFile->seek(offset) : false; +-} +- +-/*! +- \reimp +-*/ +-bool QSaveFile::atEnd() const +-{ +- Q_D(const QSaveFile); +- return d->tempFile ? d->tempFile->atEnd() : true; +-} +- +-/*! +- Flushes any buffered data to the file. Returns true if successful; +- otherwise returns false. +-*/ +-bool QSaveFile::flush() +-{ +- Q_D(QSaveFile); +- if (d->tempFile) { +- if (!d->tempFile->flush()) { +- d->error = d->tempFile->error(); +- setErrorString(d->tempFile->errorString()); +- return false; +- } +- return true; +- } +- return false; +-} +- +-/*! +- Returns the file handle of the temporary file. +- +- \sa QFile::handle() +-*/ +-int QSaveFile::handle() const +-{ +- Q_D(const QSaveFile); +- return d->tempFile ? d->tempFile->handle() : -1; +-} +- +-/*! +- \reimp +-*/ +-qint64 QSaveFile::readData(char *data, qint64 maxlen) +-{ +- Q_D(QSaveFile); +- return d->tempFile ? d->tempFile->read(data, maxlen) : -1; +-} +- +-/*! +- \reimp +-*/ +-qint64 QSaveFile::writeData(const char *data, qint64 len) +-{ +- Q_D(QSaveFile); +- if (!d->tempFile) +- return -1; +- const qint64 written = d->tempFile->write(data, len); +- if (written != len) { +- d->error = QFile::WriteError; +- setErrorString(QSaveFile::tr("Partial write. Partition full?")); +- } +- return written; +-} +- +-/*! +- \reimp +-*/ +-qint64 QSaveFile::readLineData(char *data, qint64 maxlen) +-{ +- Q_D(QSaveFile); +- return d->tempFile ? d->tempFile->readLine(data, maxlen) : -1; +-} +diff --git a/src/core/qsavefile.h b/src/core/qsavefile.h +deleted file mode 100644 +index 84d5a24..0000000 +--- a/src/core/qsavefile.h ++++ /dev/null +@@ -1,105 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +-** Contact: http://www.qt-project.org/ +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** GNU Lesser General Public License Usage +-** This file may be used under the terms of the GNU Lesser General Public +-** License version 2.1 as published by the Free Software Foundation and +-** appearing in the file LICENSE.LGPL included in the packaging of this +-** file. Please review the following information to ensure the GNU Lesser +-** General Public License version 2.1 requirements will be met: +-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Nokia gives you certain additional +-** rights. These rights are described in the Nokia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU General +-** Public License version 3.0 as published by the Free Software Foundation +-** and appearing in the file LICENSE.GPL included in the packaging of this +-** file. Please review the following information to ensure the GNU General +-** Public License version 3.0 requirements will be met: +-** http://www.gnu.org/copyleft/gpl.html. +-** +-** Other Usage +-** Alternatively, this file may be used in accordance with the terms and +-** conditions contained in a signed written agreement between you and Nokia. +-** +-** +-** +-** +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#ifndef QSAVEFILE_H +-#define QSAVEFILE_H +- +-#include +-#include +- +-#ifdef open +-#error qsavefile.h must be included before any header file that defines open +-#endif +- +-class QAbstractFileEngine; +-class QSaveFilePrivate; +- +-class QSaveFile : public QIODevice +-{ +- Q_OBJECT +- Q_DECLARE_PRIVATE(QSaveFile) +- +-public: +- +- QSaveFile(); +- explicit QSaveFile(const QString &name); +- explicit QSaveFile(QObject *parent); +- QSaveFile(const QString &name, QObject *parent); +- ~QSaveFile(); +- +- QFile::FileError error() const; +- void unsetError(); +- +- QString fileName() const; +- void setFileName(const QString &name); +- +- bool isSequential() const; +- +- virtual bool open(OpenMode flags); +- bool commit(); +- +- void cancelWriting(); +- +- qint64 size() const; +- qint64 pos() const; +- bool seek(qint64 offset); +- bool atEnd() const; +- bool flush(); +- +- bool resize(qint64 sz); +- +- int handle() const; +- +-protected: +- qint64 readData(char *data, qint64 maxlen); +- qint64 writeData(const char *data, qint64 len); +- qint64 readLineData(char *data, qint64 maxlen); +- +-private: +- virtual void close(); +- +-private: +- Q_DISABLE_COPY(QSaveFile) +- +- QSaveFilePrivate* const d_ptr; +-}; +- +-#endif // QSAVEFILE_H +diff --git a/src/core/qsavefile_p.h b/src/core/qsavefile_p.h +deleted file mode 100644 +index 549ecc1..0000000 +--- a/src/core/qsavefile_p.h ++++ /dev/null +@@ -1,71 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +-** Contact: http://www.qt-project.org/ +-** +-** This file is part of the QtCore module of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** GNU Lesser General Public License Usage +-** This file may be used under the terms of the GNU Lesser General Public +-** License version 2.1 as published by the Free Software Foundation and +-** appearing in the file LICENSE.LGPL included in the packaging of this +-** file. Please review the following information to ensure the GNU Lesser +-** General Public License version 2.1 requirements will be met: +-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Nokia gives you certain additional +-** rights. These rights are described in the Nokia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU General +-** Public License version 3.0 as published by the Free Software Foundation +-** and appearing in the file LICENSE.GPL included in the packaging of this +-** file. Please review the following information to ensure the GNU General +-** Public License version 3.0 requirements will be met: +-** http://www.gnu.org/copyleft/gpl.html. +-** +-** Other Usage +-** Alternatively, this file may be used in accordance with the terms and +-** conditions contained in a signed written agreement between you and Nokia. +-** +-** +-** +-** +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#ifndef QSAVEFILE_P_H +-#define QSAVEFILE_P_H +- +-// +-// W A R N I N G +-// ------------- +-// +-// This file is not part of the Qt API. It exists purely as an +-// implementation detail. This header file may change from version to +-// version without notice, or even be removed. +-// +-// We mean it. +-// +- +-#include +- +-class QSaveFilePrivate +-{ +-public: +- QSaveFilePrivate(); +- ~QSaveFilePrivate(); +- +- QString fileName; +- QTemporaryFile *tempFile; +- +- QFile::FileError error; +-}; +- +-#endif // QSAVEFILE_P_H +- +diff --git a/src/crypto/Crypto.cpp b/src/crypto/Crypto.cpp +index 40ec7ea..4669de6 100644 +--- a/src/crypto/Crypto.cpp ++++ b/src/crypto/Crypto.cpp +@@ -29,43 +29,6 @@ bool Crypto::m_initalized(false); + QString Crypto::m_errorStr; + QString Crypto::m_backendVersion; + +-#if !defined(GCRYPT_VERSION_NUMBER) || (GCRYPT_VERSION_NUMBER < 0x010600) +-static int gcry_qt_mutex_init(void** p_sys) +-{ +- *p_sys = new QMutex(); +- return 0; +-} +- +-static int gcry_qt_mutex_destroy(void** p_sys) +-{ +- delete reinterpret_cast(*p_sys); +- return 0; +-} +- +-static int gcry_qt_mutex_lock(void** p_sys) +-{ +- reinterpret_cast(*p_sys)->lock(); +- return 0; +-} +- +-static int gcry_qt_mutex_unlock(void** p_sys) +-{ +- reinterpret_cast(*p_sys)->unlock(); +- return 0; +-} +- +-static const struct gcry_thread_cbs gcry_threads_qt = +-{ +- GCRY_THREAD_OPTION_USER, +- 0, +- gcry_qt_mutex_init, +- gcry_qt_mutex_destroy, +- gcry_qt_mutex_lock, +- gcry_qt_mutex_unlock, +- 0, 0, 0, 0, 0, 0, 0, 0 +-}; +-#endif +- + Crypto::Crypto() + { + } +@@ -77,10 +40,6 @@ bool Crypto::init() + return true; + } + +- // libgcrypt >= 1.6 doesn't allow custom thread callbacks anymore. +-#if !defined(GCRYPT_VERSION_NUMBER) || (GCRYPT_VERSION_NUMBER < 0x010600) +- gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_qt); +-#endif + m_backendVersion = QString::fromLocal8Bit(gcry_check_version(0)); + gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); + +@@ -121,23 +80,21 @@ bool Crypto::backendSelfTest() + + bool Crypto::checkAlgorithms() + { +- if (gcry_cipher_algo_info(GCRY_CIPHER_AES256, GCRYCTL_TEST_ALGO, Q_NULLPTR, Q_NULLPTR) != 0) { ++ if (gcry_cipher_algo_info(GCRY_CIPHER_AES256, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { + m_errorStr = "GCRY_CIPHER_AES256 not found."; + qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); + return false; + } +- if (gcry_cipher_algo_info(GCRY_CIPHER_TWOFISH, GCRYCTL_TEST_ALGO, Q_NULLPTR, Q_NULLPTR) != 0) { ++ if (gcry_cipher_algo_info(GCRY_CIPHER_TWOFISH, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { + m_errorStr = "GCRY_CIPHER_TWOFISH not found."; + qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); + return false; + } +-#ifdef GCRYPT_HAS_SALSA20 +- if (gcry_cipher_algo_info(GCRY_CIPHER_SALSA20, GCRYCTL_TEST_ALGO, Q_NULLPTR, Q_NULLPTR) != 0) { ++ if (gcry_cipher_algo_info(GCRY_CIPHER_SALSA20, GCRYCTL_TEST_ALGO, nullptr, nullptr) != 0) { + m_errorStr = "GCRY_CIPHER_SALSA20 not found."; + qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); + return false; + } +-#endif + if (gcry_md_test_algo(GCRY_MD_SHA256) != 0) { + m_errorStr = "GCRY_MD_SHA256 not found."; + qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); +diff --git a/src/crypto/Crypto.h b/src/crypto/Crypto.h +index 1726865..0ce2903 100644 +--- a/src/crypto/Crypto.h ++++ b/src/crypto/Crypto.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class Crypto + { + public: +diff --git a/src/crypto/Random.cpp b/src/crypto/Random.cpp +index 2a375f3..dc0667f 100644 +--- a/src/crypto/Random.cpp ++++ b/src/crypto/Random.cpp +@@ -19,15 +19,16 @@ + + #include + ++#include "core/Global.h" + #include "crypto/Crypto.h" + + class RandomBackendGcrypt : public RandomBackend + { + public: +- void randomize(void* data, int len) Q_DECL_OVERRIDE; ++ void randomize(void* data, int len) override; + }; + +-Random* Random::m_instance(Q_NULLPTR); ++Random* Random::m_instance(nullptr); + + void Random::randomize(QByteArray& ba) + { +diff --git a/src/crypto/SymmetricCipher.cpp b/src/crypto/SymmetricCipher.cpp +index 454548c..12ec264 100644 +--- a/src/crypto/SymmetricCipher.cpp ++++ b/src/crypto/SymmetricCipher.cpp +@@ -19,7 +19,6 @@ + + #include "config-keepassx.h" + #include "crypto/SymmetricCipherGcrypt.h" +-#include "crypto/SymmetricCipherSalsa20.h" + + SymmetricCipher::SymmetricCipher(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, + SymmetricCipher::Direction direction) +@@ -61,19 +60,12 @@ SymmetricCipherBackend* SymmetricCipher::createBackend(SymmetricCipher::Algorith + switch (algo) { + case SymmetricCipher::Aes256: + case SymmetricCipher::Twofish: +-#if defined(GCRYPT_HAS_SALSA20) + case SymmetricCipher::Salsa20: +-#endif + return new SymmetricCipherGcrypt(algo, mode, direction); + +-#if !defined(GCRYPT_HAS_SALSA20) +- case SymmetricCipher::Salsa20: +- return new SymmetricCipherSalsa20(algo, mode, direction); +-#endif +- + default: + Q_ASSERT(false); +- return Q_NULLPTR; ++ return nullptr; + } + } + +diff --git a/src/crypto/SymmetricCipher.h b/src/crypto/SymmetricCipher.h +index b8b3eb1..1ac8e14 100644 +--- a/src/crypto/SymmetricCipher.h ++++ b/src/crypto/SymmetricCipher.h +@@ -22,7 +22,6 @@ + #include + #include + +-#include "core/Global.h" + #include "crypto/SymmetricCipherBackend.h" + + class SymmetricCipher +@@ -59,11 +58,11 @@ public: + return m_backend->process(data, ok); + } + +- inline bool processInPlace(QByteArray& data) Q_REQUIRED_RESULT { ++ Q_REQUIRED_RESULT inline bool processInPlace(QByteArray& data) { + return m_backend->processInPlace(data); + } + +- inline bool processInPlace(QByteArray& data, quint64 rounds) Q_REQUIRED_RESULT { ++ Q_REQUIRED_RESULT inline bool processInPlace(QByteArray& data, quint64 rounds) { + Q_ASSERT(rounds > 0); + return m_backend->processInPlace(data, rounds); + } +diff --git a/src/crypto/SymmetricCipherBackend.h b/src/crypto/SymmetricCipherBackend.h +index 8f19b8e..78ec60c 100644 +--- a/src/crypto/SymmetricCipherBackend.h ++++ b/src/crypto/SymmetricCipherBackend.h +@@ -29,8 +29,8 @@ public: + virtual bool setIv(const QByteArray& iv) = 0; + + virtual QByteArray process(const QByteArray& data, bool* ok) = 0; +- virtual bool processInPlace(QByteArray& data) Q_REQUIRED_RESULT = 0; +- virtual bool processInPlace(QByteArray& data, quint64 rounds) Q_REQUIRED_RESULT = 0; ++ Q_REQUIRED_RESULT virtual bool processInPlace(QByteArray& data) = 0; ++ Q_REQUIRED_RESULT virtual bool processInPlace(QByteArray& data, quint64 rounds) = 0; + + virtual bool reset() = 0; + virtual int blockSize() const = 0; +diff --git a/src/crypto/SymmetricCipherGcrypt.cpp b/src/crypto/SymmetricCipherGcrypt.cpp +index 5c4fe6a..b59f0c0 100644 +--- a/src/crypto/SymmetricCipherGcrypt.cpp ++++ b/src/crypto/SymmetricCipherGcrypt.cpp +@@ -22,7 +22,7 @@ + + SymmetricCipherGcrypt::SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, + SymmetricCipher::Direction direction) +- : m_ctx(Q_NULLPTR) ++ : m_ctx(nullptr) + , m_algo(gcryptAlgo(algo)) + , m_mode(gcryptMode(mode)) + , m_direction(direction) +@@ -44,10 +44,8 @@ int SymmetricCipherGcrypt::gcryptAlgo(SymmetricCipher::Algorithm algo) + case SymmetricCipher::Twofish: + return GCRY_CIPHER_TWOFISH; + +-#ifdef GCRYPT_HAS_SALSA20 + case SymmetricCipher::Salsa20: + return GCRY_CIPHER_SALSA20; +-#endif + + default: + Q_ASSERT(false); +@@ -95,7 +93,7 @@ bool SymmetricCipherGcrypt::init() + } + + size_t blockSizeT; +- error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_BLKLEN, Q_NULLPTR, &blockSizeT); ++ error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_BLKLEN, nullptr, &blockSizeT); + if (error != 0) { + setErrorString(error); + return false; +@@ -150,6 +148,7 @@ QByteArray SymmetricCipherGcrypt::process(const QByteArray& data, bool* ok) + if (error != 0) { + setErrorString(error); + *ok = false; ++ return QByteArray(); + } + + *ok = true; +@@ -163,10 +162,10 @@ bool SymmetricCipherGcrypt::processInPlace(QByteArray& data) + gcry_error_t error; + + if (m_direction == SymmetricCipher::Decrypt) { +- error = gcry_cipher_decrypt(m_ctx, data.data(), data.size(), Q_NULLPTR, 0); ++ error = gcry_cipher_decrypt(m_ctx, data.data(), data.size(), nullptr, 0); + } + else { +- error = gcry_cipher_encrypt(m_ctx, data.data(), data.size(), Q_NULLPTR, 0); ++ error = gcry_cipher_encrypt(m_ctx, data.data(), data.size(), nullptr, 0); + } + + if (error != 0) { +@@ -188,7 +187,7 @@ bool SymmetricCipherGcrypt::processInPlace(QByteArray& data, quint64 rounds) + + if (m_direction == SymmetricCipher::Decrypt) { + for (quint64 i = 0; i != rounds; ++i) { +- error = gcry_cipher_decrypt(m_ctx, rawData, size, Q_NULLPTR, 0); ++ error = gcry_cipher_decrypt(m_ctx, rawData, size, nullptr, 0); + + if (error != 0) { + setErrorString(error); +@@ -198,7 +197,7 @@ bool SymmetricCipherGcrypt::processInPlace(QByteArray& data, quint64 rounds) + } + else { + for (quint64 i = 0; i != rounds; ++i) { +- error = gcry_cipher_encrypt(m_ctx, rawData, size, Q_NULLPTR, 0); ++ error = gcry_cipher_encrypt(m_ctx, rawData, size, nullptr, 0); + + if (error != 0) { + setErrorString(error); +diff --git a/src/crypto/SymmetricCipherGcrypt.h b/src/crypto/SymmetricCipherGcrypt.h +index 367ee5b..d3ad8d1 100644 +--- a/src/crypto/SymmetricCipherGcrypt.h ++++ b/src/crypto/SymmetricCipherGcrypt.h +@@ -35,8 +35,8 @@ public: + bool setIv(const QByteArray& iv); + + QByteArray process(const QByteArray& data, bool* ok); +- bool processInPlace(QByteArray& data) Q_REQUIRED_RESULT; +- bool processInPlace(QByteArray& data, quint64 rounds) Q_REQUIRED_RESULT; ++ Q_REQUIRED_RESULT bool processInPlace(QByteArray& data); ++ Q_REQUIRED_RESULT bool processInPlace(QByteArray& data, quint64 rounds); + + bool reset(); + int blockSize() const; +diff --git a/src/crypto/salsa20/ecrypt-config.h b/src/crypto/salsa20/ecrypt-config.h +deleted file mode 100644 +index 0914fbc..0000000 +--- a/src/crypto/salsa20/ecrypt-config.h ++++ /dev/null +@@ -1,260 +0,0 @@ +-/* ecrypt-config.h */ +- +-/* *** Normally, it should not be necessary to edit this file. *** */ +- +-#ifndef ECRYPT_CONFIG +-#define ECRYPT_CONFIG +- +-/* ------------------------------------------------------------------------- */ +- +-/* Guess the endianness of the target architecture. */ +- +-#include +- +-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN +-#define ECRYPT_LITTLE_ENDIAN +-#elif Q_BYTE_ORDER == Q_BIG_ENDIAN +-#define ECRYPT_BIG_ENDIAN +-#else +-#define ECRYPT_UNKNOWN +-#endif +- +-/* ------------------------------------------------------------------------- */ +- +-/* +- * Find minimal-width types to store 8-bit, 16-bit, 32-bit, and 64-bit +- * integers. +- * +- * Note: to enable 64-bit types on 32-bit compilers, it might be +- * necessary to switch from ISO C90 mode to ISO C99 mode (e.g., gcc +- * -std=c99), or to allow compiler-specific extensions. +- */ +- +-#include +- +-/* --- check char --- */ +- +-#if (UCHAR_MAX / 0xFU > 0xFU) +-#ifndef I8T +-#define I8T char +-#define U8C(v) (v##U) +- +-#if (UCHAR_MAX == 0xFFU) +-#define ECRYPT_I8T_IS_BYTE +-#endif +- +-#endif +- +-#if (UCHAR_MAX / 0xFFU > 0xFFU) +-#ifndef I16T +-#define I16T char +-#define U16C(v) (v##U) +-#endif +- +-#if (UCHAR_MAX / 0xFFFFU > 0xFFFFU) +-#ifndef I32T +-#define I32T char +-#define U32C(v) (v##U) +-#endif +- +-#if (UCHAR_MAX / 0xFFFFFFFFU > 0xFFFFFFFFU) +-#ifndef I64T +-#define I64T char +-#define U64C(v) (v##U) +-#define ECRYPT_NATIVE64 +-#endif +- +-#endif +-#endif +-#endif +-#endif +- +-/* --- check short --- */ +- +-#if (USHRT_MAX / 0xFU > 0xFU) +-#ifndef I8T +-#define I8T short +-#define U8C(v) (v##U) +- +-#if (USHRT_MAX == 0xFFU) +-#define ECRYPT_I8T_IS_BYTE +-#endif +- +-#endif +- +-#if (USHRT_MAX / 0xFFU > 0xFFU) +-#ifndef I16T +-#define I16T short +-#define U16C(v) (v##U) +-#endif +- +-#if (USHRT_MAX / 0xFFFFU > 0xFFFFU) +-#ifndef I32T +-#define I32T short +-#define U32C(v) (v##U) +-#endif +- +-#if (USHRT_MAX / 0xFFFFFFFFU > 0xFFFFFFFFU) +-#ifndef I64T +-#define I64T short +-#define U64C(v) (v##U) +-#define ECRYPT_NATIVE64 +-#endif +- +-#endif +-#endif +-#endif +-#endif +- +-/* --- check int --- */ +- +-#if (UINT_MAX / 0xFU > 0xFU) +-#ifndef I8T +-#define I8T int +-#define U8C(v) (v##U) +- +-#if (ULONG_MAX == 0xFFU) +-#define ECRYPT_I8T_IS_BYTE +-#endif +- +-#endif +- +-#if (UINT_MAX / 0xFFU > 0xFFU) +-#ifndef I16T +-#define I16T int +-#define U16C(v) (v##U) +-#endif +- +-#if (UINT_MAX / 0xFFFFU > 0xFFFFU) +-#ifndef I32T +-#define I32T int +-#define U32C(v) (v##U) +-#endif +- +-#if (UINT_MAX / 0xFFFFFFFFU > 0xFFFFFFFFU) +-#ifndef I64T +-#define I64T int +-#define U64C(v) (v##U) +-#define ECRYPT_NATIVE64 +-#endif +- +-#endif +-#endif +-#endif +-#endif +- +-/* --- check long --- */ +- +-#if (ULONG_MAX / 0xFUL > 0xFUL) +-#ifndef I8T +-#define I8T long +-#define U8C(v) (v##UL) +- +-#if (ULONG_MAX == 0xFFUL) +-#define ECRYPT_I8T_IS_BYTE +-#endif +- +-#endif +- +-#if (ULONG_MAX / 0xFFUL > 0xFFUL) +-#ifndef I16T +-#define I16T long +-#define U16C(v) (v##UL) +-#endif +- +-#if (ULONG_MAX / 0xFFFFUL > 0xFFFFUL) +-#ifndef I32T +-#define I32T long +-#define U32C(v) (v##UL) +-#endif +- +-#if (ULONG_MAX / 0xFFFFFFFFUL > 0xFFFFFFFFUL) +-#ifndef I64T +-#define I64T long +-#define U64C(v) (v##UL) +-#define ECRYPT_NATIVE64 +-#endif +- +-#endif +-#endif +-#endif +-#endif +- +-/* --- check long long --- */ +- +-#ifdef ULLONG_MAX +- +-#if (ULLONG_MAX / 0xFULL > 0xFULL) +-#ifndef I8T +-#define I8T long long +-#define U8C(v) (v##ULL) +- +-#if (ULLONG_MAX == 0xFFULL) +-#define ECRYPT_I8T_IS_BYTE +-#endif +- +-#endif +- +-#if (ULLONG_MAX / 0xFFULL > 0xFFULL) +-#ifndef I16T +-#define I16T long long +-#define U16C(v) (v##ULL) +-#endif +- +-#if (ULLONG_MAX / 0xFFFFULL > 0xFFFFULL) +-#ifndef I32T +-#define I32T long long +-#define U32C(v) (v##ULL) +-#endif +- +-#if (ULLONG_MAX / 0xFFFFFFFFULL > 0xFFFFFFFFULL) +-#ifndef I64T +-#define I64T long long +-#define U64C(v) (v##ULL) +-#endif +- +-#endif +-#endif +-#endif +-#endif +- +-#endif +- +-/* --- check __int64 --- */ +- +-#if !defined(__STDC__) && defined(_UI64_MAX) +- +-#ifndef I64T +-#define I64T __int64 +-#define U64C(v) (v##ui64) +-#endif +- +-#endif +- +-/* ------------------------------------------------------------------------- */ +- +-/* find the largest type on this platform (used for alignment) */ +- +-#if defined(__SSE__) || (defined(_MSC_VER) && (_MSC_VER >= 1300)) +- +-#include +-#define MAXT __m128 +- +-#elif defined(__MMX__) +- +-#include +-#define MAXT __m64 +- +-#elif defined(__ALTIVEC__) +- +-#define MAXT __vector int +- +-#else +- +-#define MAXT long +- +-#endif +- +-/* ------------------------------------------------------------------------- */ +- +-#endif +diff --git a/src/crypto/salsa20/ecrypt-machine.h b/src/crypto/salsa20/ecrypt-machine.h +deleted file mode 100644 +index d006bed..0000000 +--- a/src/crypto/salsa20/ecrypt-machine.h ++++ /dev/null +@@ -1,49 +0,0 @@ +-/* ecrypt-machine.h */ +- +-/* +- * This file is included by 'ecrypt-portable.h'. It allows to override +- * the default macros for specific platforms. Please carefully check +- * the machine code generated by your compiler (with optimisations +- * turned on) before deciding to edit this file. +- */ +- +-/* ------------------------------------------------------------------------- */ +- +-#if (defined(ECRYPT_DEFAULT_ROT) && !defined(ECRYPT_MACHINE_ROT)) +- +-#define ECRYPT_MACHINE_ROT +- +-#if (defined(WIN32) && defined(_MSC_VER)) +- +-#undef ROTL32 +-#undef ROTR32 +-#undef ROTL64 +-#undef ROTR64 +- +-#include +- +-#pragma intrinsic(_lrotl) /* compile rotations "inline" */ +-#pragma intrinsic(_lrotr) +- +-#define ROTL32(v, n) _lrotl(v, n) +-#define ROTR32(v, n) _lrotr(v, n) +-#define ROTL64(v, n) _rotl64(v, n) +-#define ROTR64(v, n) _rotr64(v, n) +- +-#endif +- +-#endif +- +-/* ------------------------------------------------------------------------- */ +- +-#if (defined(ECRYPT_DEFAULT_SWAP) && !defined(ECRYPT_MACHINE_SWAP)) +- +-#define ECRYPT_MACHINE_SWAP +- +-/* +- * If you want to overwrite the default swap macros, put it here. And so on. +- */ +- +-#endif +- +-/* ------------------------------------------------------------------------- */ +diff --git a/src/crypto/salsa20/ecrypt-portable.h b/src/crypto/salsa20/ecrypt-portable.h +deleted file mode 100644 +index 438a464..0000000 +--- a/src/crypto/salsa20/ecrypt-portable.h ++++ /dev/null +@@ -1,310 +0,0 @@ +-/* ecrypt-portable.h */ +- +-/* +- * WARNING: the conversions defined below are implemented as macros, +- * and should be used carefully. They should NOT be used with +- * parameters which perform some action. E.g., the following two lines +- * are not equivalent: +- * +- * 1) ++x; y = ROTL32(x, n); +- * 2) y = ROTL32(++x, n); +- */ +- +-/* +- * *** Please do not edit this file. *** +- * +- * The default macros can be overridden for specific architectures by +- * editing 'ecrypt-machine.h'. +- */ +- +-#ifndef ECRYPT_PORTABLE +-#define ECRYPT_PORTABLE +- +-#include "ecrypt-config.h" +- +-/* ------------------------------------------------------------------------- */ +- +-/* +- * The following types are defined (if available): +- * +- * u8: unsigned integer type, at least 8 bits +- * u16: unsigned integer type, at least 16 bits +- * u32: unsigned integer type, at least 32 bits +- * u64: unsigned integer type, at least 64 bits +- * +- * s8, s16, s32, s64 -> signed counterparts of u8, u16, u32, u64 +- * +- * The selection of minimum-width integer types is taken care of by +- * 'ecrypt-config.h'. Note: to enable 64-bit types on 32-bit +- * compilers, it might be necessary to switch from ISO C90 mode to ISO +- * C99 mode (e.g., gcc -std=c99). +- */ +- +-#ifdef I8T +-typedef signed I8T s8; +-typedef unsigned I8T u8; +-#endif +- +-#ifdef I16T +-typedef signed I16T s16; +-typedef unsigned I16T u16; +-#endif +- +-#ifdef I32T +-typedef signed I32T s32; +-typedef unsigned I32T u32; +-#endif +- +-#ifdef I64T +-typedef signed I64T s64; +-typedef unsigned I64T u64; +-#endif +- +-/* +- * The following macros are used to obtain exact-width results. +- */ +- +-#define U8V(v) ((u8)(v) & U8C(0xFF)) +-#define U16V(v) ((u16)(v) & U16C(0xFFFF)) +-#define U32V(v) ((u32)(v) & U32C(0xFFFFFFFF)) +-#define U64V(v) ((u64)(v) & U64C(0xFFFFFFFFFFFFFFFF)) +- +-/* ------------------------------------------------------------------------- */ +- +-/* +- * The following macros return words with their bits rotated over n +- * positions to the left/right. +- */ +- +-#define ECRYPT_DEFAULT_ROT +- +-#define ROTL8(v, n) \ +- (U8V((v) << (n)) | ((v) >> (8 - (n)))) +- +-#define ROTL16(v, n) \ +- (U16V((v) << (n)) | ((v) >> (16 - (n)))) +- +-#define ROTL32(v, n) \ +- (U32V((v) << (n)) | ((v) >> (32 - (n)))) +- +-#define ROTL64(v, n) \ +- (U64V((v) << (n)) | ((v) >> (64 - (n)))) +- +-#define ROTR8(v, n) ROTL8(v, 8 - (n)) +-#define ROTR16(v, n) ROTL16(v, 16 - (n)) +-#define ROTR32(v, n) ROTL32(v, 32 - (n)) +-#define ROTR64(v, n) ROTL64(v, 64 - (n)) +- +-#include "ecrypt-machine.h" +- +-/* ------------------------------------------------------------------------- */ +- +-/* +- * The following macros return a word with bytes in reverse order. +- */ +- +-#define ECRYPT_DEFAULT_SWAP +- +-#define SWAP16(v) \ +- ROTL16(v, 8) +- +-#define SWAP32(v) \ +- ((ROTL32(v, 8) & U32C(0x00FF00FF)) | \ +- (ROTL32(v, 24) & U32C(0xFF00FF00))) +- +-#ifdef ECRYPT_NATIVE64 +-#define SWAP64(v) \ +- ((ROTL64(v, 8) & U64C(0x000000FF000000FF)) | \ +- (ROTL64(v, 24) & U64C(0x0000FF000000FF00)) | \ +- (ROTL64(v, 40) & U64C(0x00FF000000FF0000)) | \ +- (ROTL64(v, 56) & U64C(0xFF000000FF000000))) +-#else +-#define SWAP64(v) \ +- (((u64)SWAP32(U32V(v)) << 32) | (u64)SWAP32(U32V(v >> 32))) +-#endif +- +-#include "ecrypt-machine.h" +- +-#define ECRYPT_DEFAULT_WTOW +- +-#ifdef ECRYPT_LITTLE_ENDIAN +-#define U16TO16_LITTLE(v) (v) +-#define U32TO32_LITTLE(v) (v) +-#define U64TO64_LITTLE(v) (v) +- +-#define U16TO16_BIG(v) SWAP16(v) +-#define U32TO32_BIG(v) SWAP32(v) +-#define U64TO64_BIG(v) SWAP64(v) +-#endif +- +-#ifdef ECRYPT_BIG_ENDIAN +-#define U16TO16_LITTLE(v) SWAP16(v) +-#define U32TO32_LITTLE(v) SWAP32(v) +-#define U64TO64_LITTLE(v) SWAP64(v) +- +-#define U16TO16_BIG(v) (v) +-#define U32TO32_BIG(v) (v) +-#define U64TO64_BIG(v) (v) +-#endif +- +-#include "ecrypt-machine.h" +- +-/* +- * The following macros load words from an array of bytes with +- * different types of endianness, and vice versa. +- */ +- +-#define ECRYPT_DEFAULT_BTOW +- +-#if (!defined(ECRYPT_UNKNOWN) && defined(ECRYPT_I8T_IS_BYTE)) +- +-#define U8TO16_LITTLE(p) U16TO16_LITTLE(((u16*)(p))[0]) +-#define U8TO32_LITTLE(p) U32TO32_LITTLE(((u32*)(p))[0]) +-#define U8TO64_LITTLE(p) U64TO64_LITTLE(((u64*)(p))[0]) +- +-#define U8TO16_BIG(p) U16TO16_BIG(((u16*)(p))[0]) +-#define U8TO32_BIG(p) U32TO32_BIG(((u32*)(p))[0]) +-#define U8TO64_BIG(p) U64TO64_BIG(((u64*)(p))[0]) +- +-#define U16TO8_LITTLE(p, v) (((u16*)(p))[0] = U16TO16_LITTLE(v)) +-#define U32TO8_LITTLE(p, v) (((u32*)(p))[0] = U32TO32_LITTLE(v)) +-#define U64TO8_LITTLE(p, v) (((u64*)(p))[0] = U64TO64_LITTLE(v)) +- +-#define U16TO8_BIG(p, v) (((u16*)(p))[0] = U16TO16_BIG(v)) +-#define U32TO8_BIG(p, v) (((u32*)(p))[0] = U32TO32_BIG(v)) +-#define U64TO8_BIG(p, v) (((u64*)(p))[0] = U64TO64_BIG(v)) +- +-#else +- +-#define U8TO16_LITTLE(p) \ +- (((u16)((p)[0]) ) | \ +- ((u16)((p)[1]) << 8)) +- +-#define U8TO32_LITTLE(p) \ +- (((u32)((p)[0]) ) | \ +- ((u32)((p)[1]) << 8) | \ +- ((u32)((p)[2]) << 16) | \ +- ((u32)((p)[3]) << 24)) +- +-#ifdef ECRYPT_NATIVE64 +-#define U8TO64_LITTLE(p) \ +- (((u64)((p)[0]) ) | \ +- ((u64)((p)[1]) << 8) | \ +- ((u64)((p)[2]) << 16) | \ +- ((u64)((p)[3]) << 24) | \ +- ((u64)((p)[4]) << 32) | \ +- ((u64)((p)[5]) << 40) | \ +- ((u64)((p)[6]) << 48) | \ +- ((u64)((p)[7]) << 56)) +-#else +-#define U8TO64_LITTLE(p) \ +- ((u64)U8TO32_LITTLE(p) | ((u64)U8TO32_LITTLE((p) + 4) << 32)) +-#endif +- +-#define U8TO16_BIG(p) \ +- (((u16)((p)[0]) << 8) | \ +- ((u16)((p)[1]) )) +- +-#define U8TO32_BIG(p) \ +- (((u32)((p)[0]) << 24) | \ +- ((u32)((p)[1]) << 16) | \ +- ((u32)((p)[2]) << 8) | \ +- ((u32)((p)[3]) )) +- +-#ifdef ECRYPT_NATIVE64 +-#define U8TO64_BIG(p) \ +- (((u64)((p)[0]) << 56) | \ +- ((u64)((p)[1]) << 48) | \ +- ((u64)((p)[2]) << 40) | \ +- ((u64)((p)[3]) << 32) | \ +- ((u64)((p)[4]) << 24) | \ +- ((u64)((p)[5]) << 16) | \ +- ((u64)((p)[6]) << 8) | \ +- ((u64)((p)[7]) )) +-#else +-#define U8TO64_BIG(p) \ +- (((u64)U8TO32_BIG(p) << 32) | (u64)U8TO32_BIG((p) + 4)) +-#endif +- +-#define U16TO8_LITTLE(p, v) \ +- do { \ +- (p)[0] = U8V((v) ); \ +- (p)[1] = U8V((v) >> 8); \ +- } while (0) +- +-#define U32TO8_LITTLE(p, v) \ +- do { \ +- (p)[0] = U8V((v) ); \ +- (p)[1] = U8V((v) >> 8); \ +- (p)[2] = U8V((v) >> 16); \ +- (p)[3] = U8V((v) >> 24); \ +- } while (0) +- +-#ifdef ECRYPT_NATIVE64 +-#define U64TO8_LITTLE(p, v) \ +- do { \ +- (p)[0] = U8V((v) ); \ +- (p)[1] = U8V((v) >> 8); \ +- (p)[2] = U8V((v) >> 16); \ +- (p)[3] = U8V((v) >> 24); \ +- (p)[4] = U8V((v) >> 32); \ +- (p)[5] = U8V((v) >> 40); \ +- (p)[6] = U8V((v) >> 48); \ +- (p)[7] = U8V((v) >> 56); \ +- } while (0) +-#else +-#define U64TO8_LITTLE(p, v) \ +- do { \ +- U32TO8_LITTLE((p), U32V((v) )); \ +- U32TO8_LITTLE((p) + 4, U32V((v) >> 32)); \ +- } while (0) +-#endif +- +-#define U16TO8_BIG(p, v) \ +- do { \ +- (p)[0] = U8V((v) ); \ +- (p)[1] = U8V((v) >> 8); \ +- } while (0) +- +-#define U32TO8_BIG(p, v) \ +- do { \ +- (p)[0] = U8V((v) >> 24); \ +- (p)[1] = U8V((v) >> 16); \ +- (p)[2] = U8V((v) >> 8); \ +- (p)[3] = U8V((v) ); \ +- } while (0) +- +-#ifdef ECRYPT_NATIVE64 +-#define U64TO8_BIG(p, v) \ +- do { \ +- (p)[0] = U8V((v) >> 56); \ +- (p)[1] = U8V((v) >> 48); \ +- (p)[2] = U8V((v) >> 40); \ +- (p)[3] = U8V((v) >> 32); \ +- (p)[4] = U8V((v) >> 24); \ +- (p)[5] = U8V((v) >> 16); \ +- (p)[6] = U8V((v) >> 8); \ +- (p)[7] = U8V((v) ); \ +- } while (0) +-#else +-#define U64TO8_BIG(p, v) \ +- do { \ +- U32TO8_BIG((p), U32V((v) >> 32)); \ +- U32TO8_BIG((p) + 4, U32V((v) )); \ +- } while (0) +-#endif +- +-#endif +- +-#include "ecrypt-machine.h" +- +-/* ------------------------------------------------------------------------- */ +- +-#define AT_LEAST_ONE(n) (((n) < 1) ? 1 : (n)) +- +-#define ALIGN(t, v, n) \ +- union { t b[n]; MAXT l[AT_LEAST_ONE(n * sizeof(t) / sizeof(MAXT))]; } v +- +-/* ------------------------------------------------------------------------- */ +- +-#endif +diff --git a/src/crypto/salsa20/ecrypt-sync.h b/src/crypto/salsa20/ecrypt-sync.h +deleted file mode 100644 +index 245793e..0000000 +--- a/src/crypto/salsa20/ecrypt-sync.h ++++ /dev/null +@@ -1,287 +0,0 @@ +-/* ecrypt-sync.h */ +- +-/* +- * Header file for synchronous stream ciphers without authentication +- * mechanism. +- * +- * *** Please only edit parts marked with "[edit]". *** +- */ +- +-#ifndef ECRYPT_SYNC +-#define ECRYPT_SYNC +- +-#ifdef __cplusplus +-extern "C" { +-#endif +- +-#include "ecrypt-portable.h" +- +-/* ------------------------------------------------------------------------- */ +- +-/* Cipher parameters */ +- +-/* +- * The name of your cipher. +- */ +-#define ECRYPT_NAME "Salsa20" /* [edit] */ +-#define ECRYPT_PROFILE "S!_H." +- +-/* +- * Specify which key and IV sizes are supported by your cipher. A user +- * should be able to enumerate the supported sizes by running the +- * following code: +- * +- * for (i = 0; ECRYPT_KEYSIZE(i) <= ECRYPT_MAXKEYSIZE; ++i) +- * { +- * keysize = ECRYPT_KEYSIZE(i); +- * +- * ... +- * } +- * +- * All sizes are in bits. +- */ +- +-#define ECRYPT_MAXKEYSIZE 256 /* [edit] */ +-#define ECRYPT_KEYSIZE(i) (128 + (i)*128) /* [edit] */ +- +-#define ECRYPT_MAXIVSIZE 64 /* [edit] */ +-#define ECRYPT_IVSIZE(i) (64 + (i)*64) /* [edit] */ +- +-/* ------------------------------------------------------------------------- */ +- +-/* Data structures */ +- +-/* +- * ECRYPT_ctx is the structure containing the representation of the +- * internal state of your cipher. +- */ +- +-typedef struct +-{ +- u32 input[16]; /* could be compressed */ +- /* +- * [edit] +- * +- * Put here all state variable needed during the encryption process. +- */ +-} ECRYPT_ctx; +- +-/* ------------------------------------------------------------------------- */ +- +-/* Mandatory functions */ +- +-/* +- * Key and message independent initialization. This function will be +- * called once when the program starts (e.g., to build expanded S-box +- * tables). +- */ +-void ECRYPT_init(); +- +-/* +- * Key setup. It is the user's responsibility to select the values of +- * keysize and ivsize from the set of supported values specified +- * above. +- */ +-void ECRYPT_keysetup( +- ECRYPT_ctx* ctx, +- const u8* key, +- u32 keysize, /* Key size in bits. */ +- u32 ivsize); /* IV size in bits. */ +- +-/* +- * IV setup. After having called ECRYPT_keysetup(), the user is +- * allowed to call ECRYPT_ivsetup() different times in order to +- * encrypt/decrypt different messages with the same key but different +- * IV's. +- */ +-void ECRYPT_ivsetup( +- ECRYPT_ctx* ctx, +- const u8* iv); +- +-/* +- * Encryption/decryption of arbitrary length messages. +- * +- * For efficiency reasons, the API provides two types of +- * encrypt/decrypt functions. The ECRYPT_encrypt_bytes() function +- * (declared here) encrypts byte strings of arbitrary length, while +- * the ECRYPT_encrypt_blocks() function (defined later) only accepts +- * lengths which are multiples of ECRYPT_BLOCKLENGTH. +- * +- * The user is allowed to make multiple calls to +- * ECRYPT_encrypt_blocks() to incrementally encrypt a long message, +- * but he is NOT allowed to make additional encryption calls once he +- * has called ECRYPT_encrypt_bytes() (unless he starts a new message +- * of course). For example, this sequence of calls is acceptable: +- * +- * ECRYPT_keysetup(); +- * +- * ECRYPT_ivsetup(); +- * ECRYPT_encrypt_blocks(); +- * ECRYPT_encrypt_blocks(); +- * ECRYPT_encrypt_bytes(); +- * +- * ECRYPT_ivsetup(); +- * ECRYPT_encrypt_blocks(); +- * ECRYPT_encrypt_blocks(); +- * +- * ECRYPT_ivsetup(); +- * ECRYPT_encrypt_bytes(); +- * +- * The following sequence is not: +- * +- * ECRYPT_keysetup(); +- * ECRYPT_ivsetup(); +- * ECRYPT_encrypt_blocks(); +- * ECRYPT_encrypt_bytes(); +- * ECRYPT_encrypt_blocks(); +- */ +- +-void ECRYPT_encrypt_bytes( +- ECRYPT_ctx* ctx, +- const u8* plaintext, +- u8* ciphertext, +- u32 msglen); /* Message length in bytes. */ +- +-void ECRYPT_decrypt_bytes( +- ECRYPT_ctx* ctx, +- const u8* ciphertext, +- u8* plaintext, +- u32 msglen); /* Message length in bytes. */ +- +-/* ------------------------------------------------------------------------- */ +- +-/* Optional features */ +- +-/* +- * For testing purposes it can sometimes be useful to have a function +- * which immediately generates keystream without having to provide it +- * with a zero plaintext. If your cipher cannot provide this function +- * (e.g., because it is not strictly a synchronous cipher), please +- * reset the ECRYPT_GENERATES_KEYSTREAM flag. +- */ +- +-#define ECRYPT_GENERATES_KEYSTREAM +-#ifdef ECRYPT_GENERATES_KEYSTREAM +- +-void ECRYPT_keystream_bytes( +- ECRYPT_ctx* ctx, +- u8* keystream, +- u32 length); /* Length of keystream in bytes. */ +- +-#endif +- +-/* ------------------------------------------------------------------------- */ +- +-/* Optional optimizations */ +- +-/* +- * By default, the functions in this section are implemented using +- * calls to functions declared above. However, you might want to +- * implement them differently for performance reasons. +- */ +- +-/* +- * All-in-one encryption/decryption of (short) packets. +- * +- * The default definitions of these functions can be found in +- * "ecrypt-sync.c". If you want to implement them differently, please +- * undef the ECRYPT_USES_DEFAULT_ALL_IN_ONE flag. +- */ +-#define ECRYPT_USES_DEFAULT_ALL_IN_ONE /* [edit] */ +- +-void ECRYPT_encrypt_packet( +- ECRYPT_ctx* ctx, +- const u8* iv, +- const u8* plaintext, +- u8* ciphertext, +- u32 msglen); +- +-void ECRYPT_decrypt_packet( +- ECRYPT_ctx* ctx, +- const u8* iv, +- const u8* ciphertext, +- u8* plaintext, +- u32 msglen); +- +-/* +- * Encryption/decryption of blocks. +- * +- * By default, these functions are defined as macros. If you want to +- * provide a different implementation, please undef the +- * ECRYPT_USES_DEFAULT_BLOCK_MACROS flag and implement the functions +- * declared below. +- */ +- +-#define ECRYPT_BLOCKLENGTH 64 /* [edit] */ +- +-#define ECRYPT_USES_DEFAULT_BLOCK_MACROS /* [edit] */ +-#ifdef ECRYPT_USES_DEFAULT_BLOCK_MACROS +- +-#define ECRYPT_encrypt_blocks(ctx, plaintext, ciphertext, blocks) \ +- ECRYPT_encrypt_bytes(ctx, plaintext, ciphertext, \ +- (blocks) * ECRYPT_BLOCKLENGTH) +- +-#define ECRYPT_decrypt_blocks(ctx, ciphertext, plaintext, blocks) \ +- ECRYPT_decrypt_bytes(ctx, ciphertext, plaintext, \ +- (blocks) * ECRYPT_BLOCKLENGTH) +- +-#ifdef ECRYPT_GENERATES_KEYSTREAM +- +-#define ECRYPT_keystream_blocks(ctx, keystream, blocks) \ +- ECRYPT_keystream_bytes(ctx, keystream, \ +- (blocks) * ECRYPT_BLOCKLENGTH) +- +-#endif +- +-#else +- +-void ECRYPT_encrypt_blocks( +- ECRYPT_ctx* ctx, +- const u8* plaintext, +- u8* ciphertext, +- u32 blocks); /* Message length in blocks. */ +- +-void ECRYPT_decrypt_blocks( +- ECRYPT_ctx* ctx, +- const u8* ciphertext, +- u8* plaintext, +- u32 blocks); /* Message length in blocks. */ +- +-#ifdef ECRYPT_GENERATES_KEYSTREAM +- +-void ECRYPT_keystream_blocks( +- ECRYPT_ctx* ctx, +- const u8* keystream, +- u32 blocks); /* Keystream length in blocks. */ +- +-#endif +- +-#endif +- +-/* +- * If your cipher can be implemented in different ways, you can use +- * the ECRYPT_VARIANT parameter to allow the user to choose between +- * them at compile time (e.g., gcc -DECRYPT_VARIANT=3 ...). Please +- * only use this possibility if you really think it could make a +- * significant difference and keep the number of variants +- * (ECRYPT_MAXVARIANT) as small as possible (definitely not more than +- * 10). Note also that all variants should have exactly the same +- * external interface (i.e., the same ECRYPT_BLOCKLENGTH, etc.). +- */ +-#define ECRYPT_MAXVARIANT 1 /* [edit] */ +- +-#ifndef ECRYPT_VARIANT +-#define ECRYPT_VARIANT 1 +-#endif +- +-#if (ECRYPT_VARIANT > ECRYPT_MAXVARIANT) +-#error this variant does not exist +-#endif +- +-/* ------------------------------------------------------------------------- */ +- +-#ifdef __cplusplus +-} +-#endif +- +-#endif +diff --git a/src/crypto/salsa20/salsa20.c b/src/crypto/salsa20/salsa20.c +deleted file mode 100644 +index 74f806c..0000000 +--- a/src/crypto/salsa20/salsa20.c ++++ /dev/null +@@ -1,133 +0,0 @@ +-/* +-salsa20-ref.c version 20051118 +-D. J. Bernstein +-Public domain. +-*/ +- +-#include "ecrypt-sync.h" +- +-#define ROTATE(v,c) (ROTL32(v,c)) +-#define XOR(v,w) ((v) ^ (w)) +-#define PLUS(v,w) (U32V((v) + (w))) +-#define PLUSONE(v) (PLUS((v),1)) +- +-static void salsa20_wordtobyte(u8 output[64],const u32 input[16]) +-{ +- u32 x[16]; +- int i; +- +- for (i = 0;i < 16;++i) x[i] = input[i]; +- for (i = 20;i > 0;i -= 2) { +- x[ 4] = XOR(x[ 4],ROTATE(PLUS(x[ 0],x[12]), 7)); +- x[ 8] = XOR(x[ 8],ROTATE(PLUS(x[ 4],x[ 0]), 9)); +- x[12] = XOR(x[12],ROTATE(PLUS(x[ 8],x[ 4]),13)); +- x[ 0] = XOR(x[ 0],ROTATE(PLUS(x[12],x[ 8]),18)); +- x[ 9] = XOR(x[ 9],ROTATE(PLUS(x[ 5],x[ 1]), 7)); +- x[13] = XOR(x[13],ROTATE(PLUS(x[ 9],x[ 5]), 9)); +- x[ 1] = XOR(x[ 1],ROTATE(PLUS(x[13],x[ 9]),13)); +- x[ 5] = XOR(x[ 5],ROTATE(PLUS(x[ 1],x[13]),18)); +- x[14] = XOR(x[14],ROTATE(PLUS(x[10],x[ 6]), 7)); +- x[ 2] = XOR(x[ 2],ROTATE(PLUS(x[14],x[10]), 9)); +- x[ 6] = XOR(x[ 6],ROTATE(PLUS(x[ 2],x[14]),13)); +- x[10] = XOR(x[10],ROTATE(PLUS(x[ 6],x[ 2]),18)); +- x[ 3] = XOR(x[ 3],ROTATE(PLUS(x[15],x[11]), 7)); +- x[ 7] = XOR(x[ 7],ROTATE(PLUS(x[ 3],x[15]), 9)); +- x[11] = XOR(x[11],ROTATE(PLUS(x[ 7],x[ 3]),13)); +- x[15] = XOR(x[15],ROTATE(PLUS(x[11],x[ 7]),18)); +- x[ 1] = XOR(x[ 1],ROTATE(PLUS(x[ 0],x[ 3]), 7)); +- x[ 2] = XOR(x[ 2],ROTATE(PLUS(x[ 1],x[ 0]), 9)); +- x[ 3] = XOR(x[ 3],ROTATE(PLUS(x[ 2],x[ 1]),13)); +- x[ 0] = XOR(x[ 0],ROTATE(PLUS(x[ 3],x[ 2]),18)); +- x[ 6] = XOR(x[ 6],ROTATE(PLUS(x[ 5],x[ 4]), 7)); +- x[ 7] = XOR(x[ 7],ROTATE(PLUS(x[ 6],x[ 5]), 9)); +- x[ 4] = XOR(x[ 4],ROTATE(PLUS(x[ 7],x[ 6]),13)); +- x[ 5] = XOR(x[ 5],ROTATE(PLUS(x[ 4],x[ 7]),18)); +- x[11] = XOR(x[11],ROTATE(PLUS(x[10],x[ 9]), 7)); +- x[ 8] = XOR(x[ 8],ROTATE(PLUS(x[11],x[10]), 9)); +- x[ 9] = XOR(x[ 9],ROTATE(PLUS(x[ 8],x[11]),13)); +- x[10] = XOR(x[10],ROTATE(PLUS(x[ 9],x[ 8]),18)); +- x[12] = XOR(x[12],ROTATE(PLUS(x[15],x[14]), 7)); +- x[13] = XOR(x[13],ROTATE(PLUS(x[12],x[15]), 9)); +- x[14] = XOR(x[14],ROTATE(PLUS(x[13],x[12]),13)); +- x[15] = XOR(x[15],ROTATE(PLUS(x[14],x[13]),18)); +- } +- for (i = 0;i < 16;++i) x[i] = PLUS(x[i],input[i]); +- for (i = 0;i < 16;++i) U32TO8_LITTLE(output + 4 * i,x[i]); +-} +- +-void ECRYPT_init(void) +-{ +- return; +-} +- +-static const char sigma[16] = "expand 32-byte k"; +-static const char tau[16] = "expand 16-byte k"; +- +-void ECRYPT_keysetup(ECRYPT_ctx *x,const u8 *k,u32 kbits,u32 ivbits) +-{ +- (void)ivbits; +- const char *constants; +- +- x->input[1] = U8TO32_LITTLE(k + 0); +- x->input[2] = U8TO32_LITTLE(k + 4); +- x->input[3] = U8TO32_LITTLE(k + 8); +- x->input[4] = U8TO32_LITTLE(k + 12); +- if (kbits == 256) { /* recommended */ +- k += 16; +- constants = sigma; +- } else { /* kbits == 128 */ +- constants = tau; +- } +- x->input[11] = U8TO32_LITTLE(k + 0); +- x->input[12] = U8TO32_LITTLE(k + 4); +- x->input[13] = U8TO32_LITTLE(k + 8); +- x->input[14] = U8TO32_LITTLE(k + 12); +- x->input[0] = U8TO32_LITTLE(constants + 0); +- x->input[5] = U8TO32_LITTLE(constants + 4); +- x->input[10] = U8TO32_LITTLE(constants + 8); +- x->input[15] = U8TO32_LITTLE(constants + 12); +-} +- +-void ECRYPT_ivsetup(ECRYPT_ctx *x,const u8 *iv) +-{ +- x->input[6] = U8TO32_LITTLE(iv + 0); +- x->input[7] = U8TO32_LITTLE(iv + 4); +- x->input[8] = 0; +- x->input[9] = 0; +-} +- +-void ECRYPT_encrypt_bytes(ECRYPT_ctx *x,const u8 *m,u8 *c,u32 bytes) +-{ +- u8 output[64]; +- u32 i; +- +- if (!bytes) return; +- for (;;) { +- salsa20_wordtobyte(output,x->input); +- x->input[8] = PLUSONE(x->input[8]); +- if (!x->input[8]) { +- x->input[9] = PLUSONE(x->input[9]); +- /* stopping at 2^70 bytes per nonce is user's responsibility */ +- } +- if (bytes <= 64) { +- for (i = 0;i < bytes;++i) c[i] = m[i] ^ output[i]; +- return; +- } +- for (i = 0;i < 64;++i) c[i] = m[i] ^ output[i]; +- bytes -= 64; +- c += 64; +- m += 64; +- } +-} +- +-void ECRYPT_decrypt_bytes(ECRYPT_ctx *x,const u8 *c,u8 *m,u32 bytes) +-{ +- ECRYPT_encrypt_bytes(x,c,m,bytes); +-} +- +-void ECRYPT_keystream_bytes(ECRYPT_ctx *x,u8 *stream,u32 bytes) +-{ +- u32 i; +- for (i = 0;i < bytes;++i) stream[i] = 0; +- ECRYPT_encrypt_bytes(x,stream,stream,bytes); +-} +diff --git a/src/format/CsvExporter.cpp b/src/format/CsvExporter.cpp +index 1137864..c444afe 100644 +--- a/src/format/CsvExporter.cpp ++++ b/src/format/CsvExporter.cpp +@@ -64,7 +64,8 @@ bool CsvExporter::writeGroup(QIODevice* device, const Group* group, QString grou + } + groupPath.append(group->name()); + +- Q_FOREACH (const Entry* entry, group->entries()) { ++ const QList entryList = group->entries(); ++ for (const Entry* entry : entryList) { + QString line; + + addColumn(line, groupPath); +@@ -82,7 +83,8 @@ bool CsvExporter::writeGroup(QIODevice* device, const Group* group, QString grou + } + } + +- Q_FOREACH (const Group* child, group->children()) { ++ const QList children = group->children(); ++ for (const Group* child : children) { + if (!writeGroup(device, child, groupPath)) { + return false; + } +diff --git a/src/format/KeePass1Reader.cpp b/src/format/KeePass1Reader.cpp +index 0175a62..4747d7f 100644 +--- a/src/format/KeePass1Reader.cpp ++++ b/src/format/KeePass1Reader.cpp +@@ -49,9 +49,9 @@ private: + + + KeePass1Reader::KeePass1Reader() +- : m_db(Q_NULLPTR) +- , m_tmpParent(Q_NULLPTR) +- , m_device(Q_NULLPTR) ++ : m_db(nullptr) ++ , m_tmpParent(nullptr) ++ , m_device(nullptr) + , m_encryptionFlags(0) + , m_transformRounds(0) + , m_error(false) +@@ -72,16 +72,16 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor + + if (keyfileData.isEmpty()) { + raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); +- return Q_NULLPTR; ++ return nullptr; + } + if (!keyfileDevice->seek(0)) { + raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); +- return Q_NULLPTR; ++ return nullptr; + } + + if (!newFileKey.load(keyfileDevice)) { + raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); +- return Q_NULLPTR; ++ return nullptr; + } + } + +@@ -96,72 +96,72 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor + quint32 signature1 = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); + if (!ok || signature1 != KeePass1::SIGNATURE_1) { + raiseError(tr("Not a KeePass database.")); +- return Q_NULLPTR; ++ return nullptr; + } + + quint32 signature2 = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); + if (!ok || signature2 != KeePass1::SIGNATURE_2) { + raiseError(tr("Not a KeePass database.")); +- return Q_NULLPTR; ++ return nullptr; + } + + m_encryptionFlags = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); + if (!ok || !(m_encryptionFlags & KeePass1::Rijndael || m_encryptionFlags & KeePass1::Twofish)) { + raiseError(tr("Unsupported encryption algorithm.")); +- return Q_NULLPTR; ++ return nullptr; + } + + quint32 version = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); + if (!ok || (version & KeePass1::FILE_VERSION_CRITICAL_MASK) + != (KeePass1::FILE_VERSION & KeePass1::FILE_VERSION_CRITICAL_MASK)) { + raiseError(tr("Unsupported KeePass database version.")); +- return Q_NULLPTR; ++ return nullptr; + } + + m_masterSeed = m_device->read(16); + if (m_masterSeed.size() != 16) { + raiseError("Unable to read master seed"); +- return Q_NULLPTR; ++ return nullptr; + } + + m_encryptionIV = m_device->read(16); + if (m_encryptionIV.size() != 16) { + raiseError("Unable to read encryption IV"); +- return Q_NULLPTR; ++ return nullptr; + } + + quint32 numGroups = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); + if (!ok) { + raiseError("Invalid number of groups"); +- return Q_NULLPTR; ++ return nullptr; + } + + quint32 numEntries = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); + if (!ok) { + raiseError("Invalid number of entries"); +- return Q_NULLPTR; ++ return nullptr; + } + + m_contentHashHeader = m_device->read(32); + if (m_contentHashHeader.size() != 32) { + raiseError("Invalid content hash size"); +- return Q_NULLPTR; ++ return nullptr; + } + + m_transformSeed = m_device->read(32); + if (m_transformSeed.size() != 32) { + raiseError("Invalid transform seed size"); +- return Q_NULLPTR; ++ return nullptr; + } + + m_transformRounds = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); + if (!ok) { + raiseError("Invalid number of transform rounds"); +- return Q_NULLPTR; ++ return nullptr; + } + if (!m_db->setTransformRounds(m_transformRounds)) { + raiseError(tr("Unable to calculate master key")); +- return Q_NULLPTR; ++ return nullptr; + } + + qint64 contentPos = m_device->pos(); +@@ -169,14 +169,14 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor + QScopedPointer cipherStream(testKeys(password, keyfileData, contentPos)); + + if (!cipherStream) { +- return Q_NULLPTR; ++ return nullptr; + } + + QList groups; + for (quint32 i = 0; i < numGroups; i++) { + Group* group = readGroup(cipherStream.data()); + if (!group) { +- return Q_NULLPTR; ++ return nullptr; + } + groups.append(group); + } +@@ -185,17 +185,17 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor + for (quint32 i = 0; i < numEntries; i++) { + Entry* entry = readEntry(cipherStream.data()); + if (!entry) { +- return Q_NULLPTR; ++ return nullptr; + } + entries.append(entry); + } + + if (!constructGroupTree(groups)) { + raiseError("Unable to construct group tree"); +- return Q_NULLPTR; ++ return nullptr; + } + +- Q_FOREACH (Entry* entry, entries) { ++ for (Entry* entry : asConst(entries)) { + if (isMetaStream(entry)) { + parseMetaStream(entry); + +@@ -215,7 +215,8 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor + + db->rootGroup()->setName(tr("Root")); + +- Q_FOREACH (Group* group, db->rootGroup()->children()) { ++ const QList children = db->rootGroup()->children(); ++ for (Group* group : children) { + if (group->name() == "Backup") { + group->setSearchingEnabled(Group::Disable); + group->setAutoTypeEnabled(Group::Disable); +@@ -225,11 +226,12 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor + Q_ASSERT(m_tmpParent->children().isEmpty()); + Q_ASSERT(m_tmpParent->entries().isEmpty()); + +- Q_FOREACH (Group* group, groups) { ++ for (Group* group : asConst(groups)) { + group->setUpdateTimeinfo(true); + } + +- Q_FOREACH (Entry* entry, m_db->rootGroup()->entriesRecursive()) { ++ const QList dbEntries = m_db->rootGroup()->entriesRecursive(); ++ for (Entry* entry : dbEntries) { + entry->setUpdateTimeinfo(true); + } + +@@ -243,7 +245,7 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor + + if (!db->setKey(key)) { + raiseError(tr("Unable to calculate master key")); +- return Q_NULLPTR; ++ return nullptr; + } + + return db.take(); +@@ -257,7 +259,7 @@ Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& passwor + keyFile.reset(new QFile(keyfileName)); + if (!keyFile->open(QFile::ReadOnly)) { + raiseError(keyFile->errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + } + +@@ -272,14 +274,14 @@ Database* KeePass1Reader::readDatabase(const QString& filename, const QString& p + QFile dbFile(filename); + if (!dbFile.open(QFile::ReadOnly)) { + raiseError(dbFile.errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + + Database* db = readDatabase(&dbFile, password, keyfileName); + + if (dbFile.error() != QFile::NoError) { + raiseError(dbFile.errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + + return db; +@@ -298,15 +300,14 @@ QString KeePass1Reader::errorString() + SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const QByteArray& keyfileData, + qint64 contentPos) + { +- QList encodings; +- encodings << Windows1252 << Latin1 << UTF8; ++ const QList encodings = { Windows1252, Latin1, UTF8 }; + + QScopedPointer cipherStream; + QByteArray passwordData; + QTextCodec* codec = QTextCodec::codecForName("Windows-1252"); + QByteArray passwordDataCorrect = codec->fromUnicode(password); + +- Q_FOREACH (PasswordEncoding encoding, encodings) { ++ for (PasswordEncoding encoding : encodings) { + if (encoding == Windows1252) { + passwordData = passwordDataCorrect; + } +@@ -337,7 +338,7 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q + + QByteArray finalKey = key(passwordData, keyfileData); + if (finalKey.isEmpty()) { +- return Q_NULLPTR; ++ return nullptr; + } + if (m_encryptionFlags & KeePass1::Rijndael) { + cipherStream.reset(new SymmetricCipherStream(m_device, SymmetricCipher::Aes256, +@@ -350,11 +351,11 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q + + if (!cipherStream->init(finalKey, m_encryptionIV)) { + raiseError(cipherStream->errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + if (!cipherStream->open(QIODevice::ReadOnly)) { + raiseError(cipherStream->errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + + bool success = verifyKey(cipherStream.data()); +@@ -368,7 +369,7 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q + } + raiseError(msg); + +- return Q_NULLPTR; ++ return nullptr; + } + cipherStream->open(QIODevice::ReadOnly); + +@@ -446,19 +447,19 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) + quint16 fieldType = Endian::readUInt16(cipherStream, KeePass1::BYTEORDER, &ok); + if (!ok) { + raiseError("Invalid group field type number"); +- return Q_NULLPTR; ++ return nullptr; + } + + int fieldSize = static_cast(Endian::readUInt32(cipherStream, KeePass1::BYTEORDER, &ok)); + if (!ok) { + raiseError("Invalid group field size"); +- return Q_NULLPTR; ++ return nullptr; + } + + QByteArray fieldData = cipherStream->read(fieldSize); + if (fieldData.size() != fieldSize) { + raiseError("Read group field data doesn't match size"); +- return Q_NULLPTR; ++ return nullptr; + } + + switch (fieldType) { +@@ -468,7 +469,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) + case 0x0001: + if (fieldSize != 4) { + raiseError("Incorrect group id field size"); +- return Q_NULLPTR; ++ return nullptr; + } + groupId = Endian::bytesToUInt32(fieldData, KeePass1::BYTEORDER); + groupIdSet = true; +@@ -480,7 +481,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) + { + if (fieldSize != 5) { + raiseError("Incorrect group creation time field size"); +- return Q_NULLPTR; ++ return nullptr; + } + QDateTime dateTime = dateFromPackedStruct(fieldData); + if (dateTime.isValid()) { +@@ -492,7 +493,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) + { + if (fieldSize != 5) { + raiseError("Incorrect group modification time field size"); +- return Q_NULLPTR; ++ return nullptr; + } + QDateTime dateTime = dateFromPackedStruct(fieldData); + if (dateTime.isValid()) { +@@ -527,7 +528,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) + { + if (fieldSize != 4) { + raiseError("Incorrect group icon field size"); +- return Q_NULLPTR; ++ return nullptr; + } + quint32 iconNumber = Endian::bytesToUInt32(fieldData, KeePass1::BYTEORDER); + group->setIcon(iconNumber); +@@ -537,7 +538,7 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) + { + if (fieldSize != 2) { + raiseError("Incorrect group level field size"); +- return Q_NULLPTR; ++ return nullptr; + } + groupLevel = Endian::bytesToUInt16(fieldData, KeePass1::BYTEORDER); + groupLevelSet = true; +@@ -552,13 +553,13 @@ Group* KeePass1Reader::readGroup(QIODevice* cipherStream) + default: + // invalid field + raiseError("Invalid group field type"); +- return Q_NULLPTR; ++ return nullptr; + } + } while (!reachedEnd); + + if (!groupIdSet || !groupLevelSet) { + raiseError("Missing group id or level"); +- return Q_NULLPTR; ++ return nullptr; + } + + group->setUuid(Uuid::random()); +@@ -584,19 +585,19 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + quint16 fieldType = Endian::readUInt16(cipherStream, KeePass1::BYTEORDER, &ok); + if (!ok) { + raiseError("Missing entry field type number"); +- return Q_NULLPTR; ++ return nullptr; + } + + int fieldSize = static_cast(Endian::readUInt32(cipherStream, KeePass1::BYTEORDER, &ok)); + if (!ok) { + raiseError("Invalid entry field size"); +- return Q_NULLPTR; ++ return nullptr; + } + + QByteArray fieldData = cipherStream->read(fieldSize); + if (fieldData.size() != fieldSize) { + raiseError("Read entry field data doesn't match size"); +- return Q_NULLPTR; ++ return nullptr; + } + + switch (fieldType) { +@@ -606,7 +607,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + case 0x0001: + if (fieldSize != 16) { + raiseError("Invalid entry uuid field size"); +- return Q_NULLPTR; ++ return nullptr; + } + m_entryUuids.insert(fieldData, entry.data()); + break; +@@ -614,7 +615,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + { + if (fieldSize != 4) { + raiseError("Invalid entry group id field size"); +- return Q_NULLPTR; ++ return nullptr; + } + quint32 groupId = Endian::bytesToUInt32(fieldData, KeePass1::BYTEORDER); + m_entryGroupIds.insert(entry.data(), groupId); +@@ -624,7 +625,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + { + if (fieldSize != 4) { + raiseError("Invalid entry icon field size"); +- return Q_NULLPTR; ++ return nullptr; + } + quint32 iconNumber = Endian::bytesToUInt32(fieldData, KeePass1::BYTEORDER); + entry->setIcon(iconNumber); +@@ -649,7 +650,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + { + if (fieldSize != 5) { + raiseError("Invalid entry creation time field size"); +- return Q_NULLPTR; ++ return nullptr; + } + QDateTime dateTime = dateFromPackedStruct(fieldData); + if (dateTime.isValid()) { +@@ -661,7 +662,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + { + if (fieldSize != 5) { + raiseError("Invalid entry modification time field size"); +- return Q_NULLPTR; ++ return nullptr; + } + QDateTime dateTime = dateFromPackedStruct(fieldData); + if (dateTime.isValid()) { +@@ -673,7 +674,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + { + if (fieldSize != 5) { + raiseError("Invalid entry creation time field size"); +- return Q_NULLPTR; ++ return nullptr; + } + QDateTime dateTime = dateFromPackedStruct(fieldData); + if (dateTime.isValid()) { +@@ -685,7 +686,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + { + if (fieldSize != 5) { + raiseError("Invalid entry expiry time field size"); +- return Q_NULLPTR; ++ return nullptr; + } + QDateTime dateTime = dateFromPackedStruct(fieldData); + if (dateTime.isValid()) { +@@ -708,7 +709,7 @@ Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) + default: + // invalid field + raiseError("Invalid entry field type"); +- return Q_NULLPTR; ++ return nullptr; + } + } while (!reachedEnd); + +@@ -727,7 +728,8 @@ void KeePass1Reader::parseNotes(const QString& rawNotes, Entry* entry) + QStringList notes; + + bool lastLineAutoType = false; +- Q_FOREACH (QString line, rawNotes.split("\n")) { ++ const QStringList rawNotesLines = rawNotes.split("\n"); ++ for (QString line : rawNotesLines) { + line.remove("\r"); + + if (sequenceRegexp.exactMatch(line)) { +@@ -769,8 +771,9 @@ void KeePass1Reader::parseNotes(const QString& rawNotes, Entry* entry) + i.next(); + + QString sequence = sequences.value(i.key()); ++ const QStringList windowList = i.value(); + +- Q_FOREACH (const QString& window, i.value()) { ++ for (const QString& window : windowList) { + AutoTypeAssociations::Association assoc; + assoc.window = window; + assoc.sequence = sequence; +diff --git a/src/format/KeePass2RandomStream.h b/src/format/KeePass2RandomStream.h +index 022c839..584d738 100644 +--- a/src/format/KeePass2RandomStream.h ++++ b/src/format/KeePass2RandomStream.h +@@ -29,7 +29,7 @@ public: + bool init(const QByteArray& key); + QByteArray randomBytes(int size, bool* ok); + QByteArray process(const QByteArray& data, bool* ok); +- bool processInPlace(QByteArray& data) Q_REQUIRED_RESULT; ++ Q_REQUIRED_RESULT bool processInPlace(QByteArray& data); + QString errorString() const; + + private: +diff --git a/src/format/KeePass2Reader.cpp b/src/format/KeePass2Reader.cpp +index d665bf5..b0247f7 100644 +--- a/src/format/KeePass2Reader.cpp ++++ b/src/format/KeePass2Reader.cpp +@@ -34,12 +34,12 @@ + #include "streams/SymmetricCipherStream.h" + + KeePass2Reader::KeePass2Reader() +- : m_device(Q_NULLPTR) +- , m_headerStream(Q_NULLPTR) ++ : m_device(nullptr) ++ , m_headerStream(nullptr) + , m_error(false) + , m_headerEnd(false) + , m_saveXml(false) +- , m_db(Q_NULLPTR) ++ , m_db(nullptr) + { + } + +@@ -67,7 +67,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + quint32 signature1 = Endian::readUInt32(m_headerStream, KeePass2::BYTEORDER, &ok); + if (!ok || signature1 != KeePass2::SIGNATURE_1) { + raiseError(tr("Not a KeePass database.")); +- return Q_NULLPTR; ++ return nullptr; + } + + quint32 signature2 = Endian::readUInt32(m_headerStream, KeePass2::BYTEORDER, &ok); +@@ -76,11 +76,11 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + "You can import it by clicking on Database > 'Import KeePass 1 database'.\n" + "This is a one-way migration. You won't be able to open the imported " + "database with the old KeePassX 0.4 version.")); +- return Q_NULLPTR; ++ return nullptr; + } + else if (!ok || signature2 != KeePass2::SIGNATURE_2) { + raiseError(tr("Not a KeePass database.")); +- return Q_NULLPTR; ++ return nullptr; + } + + quint32 version = Endian::readUInt32(m_headerStream, KeePass2::BYTEORDER, &ok) +@@ -88,7 +88,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + quint32 maxVersion = KeePass2::FILE_VERSION & KeePass2::FILE_VERSION_CRITICAL_MASK; + if (!ok || (version < KeePass2::FILE_VERSION_MIN) || (version > maxVersion)) { + raiseError(tr("Unsupported KeePass database version.")); +- return Q_NULLPTR; ++ return nullptr; + } + + while (readHeaderField() && !hasError()) { +@@ -97,7 +97,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + headerStream.close(); + + if (hasError()) { +- return Q_NULLPTR; ++ return nullptr; + } + + // check if all required headers were present +@@ -105,12 +105,12 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + || m_streamStartBytes.isEmpty() || m_protectedStreamKey.isEmpty() + || m_db->cipher().isNull()) { + raiseError("missing database headers"); +- return Q_NULLPTR; ++ return nullptr; + } + + if (!m_db->setKey(key, m_transformSeed, false)) { + raiseError(tr("Unable to calculate master key")); +- return Q_NULLPTR; ++ return nullptr; + } + + CryptoHash hash(CryptoHash::Sha256); +@@ -122,24 +122,24 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + SymmetricCipher::Cbc, SymmetricCipher::Decrypt); + if (!cipherStream.init(finalKey, m_encryptionIV)) { + raiseError(cipherStream.errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + if (!cipherStream.open(QIODevice::ReadOnly)) { + raiseError(cipherStream.errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + + QByteArray realStart = cipherStream.read(32); + + if (realStart != m_streamStartBytes) { + raiseError(tr("Wrong key or database file is corrupt.")); +- return Q_NULLPTR; ++ return nullptr; + } + + HashedBlockStream hashedStream(&cipherStream); + if (!hashedStream.open(QIODevice::ReadOnly)) { + raiseError(hashedStream.errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + + QIODevice* xmlDevice; +@@ -153,7 +153,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); + if (!ioCompressor->open(QIODevice::ReadOnly)) { + raiseError(ioCompressor->errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + xmlDevice = ioCompressor.data(); + } +@@ -161,7 +161,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + KeePass2RandomStream randomStream; + if (!randomStream.init(m_protectedStreamKey)) { + raiseError(randomStream.errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + + QScopedPointer buffer; +@@ -182,7 +182,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + return db.take(); + } + else { +- return Q_NULLPTR; ++ return nullptr; + } + } + +@@ -192,7 +192,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke + QByteArray headerHash = CryptoHash::hash(headerStream.storedData(), CryptoHash::Sha256); + if (headerHash != xmlReader.headerHash()) { + raiseError("Header doesn't match hash"); +- return Q_NULLPTR; ++ return nullptr; + } + } + +@@ -204,14 +204,14 @@ Database* KeePass2Reader::readDatabase(const QString& filename, const CompositeK + QFile file(filename); + if (!file.open(QFile::ReadOnly)) { + raiseError(file.errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + + QScopedPointer db(readDatabase(&file, key)); + + if (file.error() != QFile::NoError) { + raiseError(file.errorString()); +- return Q_NULLPTR; ++ return nullptr; + } + + return db.take(); +diff --git a/src/format/KeePass2Repair.cpp b/src/format/KeePass2Repair.cpp +index f435a7d..81ada2f 100644 +--- a/src/format/KeePass2Repair.cpp ++++ b/src/format/KeePass2Repair.cpp +@@ -25,13 +25,13 @@ + #include "format/KeePass2XmlReader.h" + + KeePass2Repair::KeePass2Repair() +- : m_db(Q_NULLPTR) ++ : m_db(nullptr) + { + } + + KeePass2Repair::RepairResult KeePass2Repair::repairDatabase(QIODevice* device, const CompositeKey& key) + { +- m_db = Q_NULLPTR; ++ m_db = nullptr; + m_errorStr.clear(); + + KeePass2Reader reader; +diff --git a/src/format/KeePass2XmlReader.cpp b/src/format/KeePass2XmlReader.cpp +index 2e76c2a..659c706 100644 +--- a/src/format/KeePass2XmlReader.cpp ++++ b/src/format/KeePass2XmlReader.cpp +@@ -31,10 +31,10 @@ + typedef QPair StringPair; + + KeePass2XmlReader::KeePass2XmlReader() +- : m_randomStream(Q_NULLPTR) +- , m_db(Q_NULLPTR) +- , m_meta(Q_NULLPTR) +- , m_tmpParent(Q_NULLPTR) ++ : m_randomStream(nullptr) ++ , m_db(nullptr) ++ , m_meta(nullptr) ++ , m_tmpParent(nullptr) + , m_error(false) + , m_strictMode(false) + { +@@ -86,17 +86,17 @@ void KeePass2XmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Ra + } + } + +- QSet poolKeys = m_binaryPool.keys().toSet(); +- QSet entryKeys = m_binaryMap.keys().toSet(); +- QSet unmappedKeys = entryKeys - poolKeys; +- QSet unusedKeys = poolKeys - entryKeys; ++ const QSet poolKeys = m_binaryPool.keys().toSet(); ++ const QSet entryKeys = m_binaryMap.keys().toSet(); ++ const QSet unmappedKeys = entryKeys - poolKeys; ++ const QSet unusedKeys = poolKeys - entryKeys; + + if (!unmappedKeys.isEmpty()) { + raiseError("Unmapped keys left."); + } + + if (!m_xml.error()) { +- Q_FOREACH (const QString& key, unusedKeys) { ++ for (const QString& key : unusedKeys) { + qWarning("KeePass2XmlReader::readDatabase: found unused key \"%s\"", qPrintable(key)); + } + } +@@ -118,7 +118,8 @@ void KeePass2XmlReader::readDatabase(QIODevice* device, Database* db, KeePass2Ra + for (iEntry = m_entries.constBegin(); iEntry != m_entries.constEnd(); ++iEntry) { + iEntry.value()->setUpdateTimeinfo(true); + +- Q_FOREACH (Entry* histEntry, iEntry.value()->historyItems()) { ++ const QList historyItems = iEntry.value()->historyItems(); ++ for (Entry* histEntry : historyItems) { + histEntry->setUpdateTimeinfo(true); + } + } +@@ -387,7 +388,7 @@ void KeePass2XmlReader::parseBinaries() + QString id = attr.value("ID").toString(); + + QByteArray data; +- if (attr.value("Compressed").compare("True", Qt::CaseInsensitive) == 0) { ++ if (attr.value("Compressed").compare(QLatin1String("True"), Qt::CaseInsensitive) == 0) { + data = readCompressedBinary(); + } + else { +@@ -614,11 +615,11 @@ Group* KeePass2XmlReader::parseGroup() + raiseError("No group uuid found"); + } + +- Q_FOREACH (Group* child, children) { ++ for (Group* child : asConst(children)) { + child->setParent(group); + } + +- Q_FOREACH (Entry* entry, entries) { ++ for (Entry* entry : asConst(entries)) { + entry->setGroup(group); + } + +@@ -777,7 +778,7 @@ Entry* KeePass2XmlReader::parseEntry(bool history) + raiseError("No entry uuid found"); + } + +- Q_FOREACH (Entry* historyItem, historyItems) { ++ for (Entry* historyItem : asConst(historyItems)) { + if (historyItem->uuid() != entry->uuid()) { + if (m_strictMode) { + raiseError("History element with different uuid"); +@@ -788,7 +789,7 @@ Entry* KeePass2XmlReader::parseEntry(bool history) + entry->addHistoryItem(historyItem); + } + +- Q_FOREACH (const StringPair& ref, binaryRefs) { ++ for (const StringPair& ref : asConst(binaryRefs)) { + m_binaryMap.insertMulti(ref.first, qMakePair(entry, ref.second)); + } + +@@ -1052,7 +1053,7 @@ QDateTime KeePass2XmlReader::readDateTime() + raiseError("Invalid date time value"); + } + else { +- dt = Tools::currentDateTimeUtc(); ++ dt = QDateTime::currentDateTimeUtc(); + } + } + +@@ -1153,7 +1154,7 @@ QByteArray KeePass2XmlReader::readCompressedBinary() + Group* KeePass2XmlReader::getGroup(const Uuid& uuid) + { + if (uuid.isNull()) { +- return Q_NULLPTR; ++ return nullptr; + } + + if (m_groups.contains(uuid)) { +@@ -1172,7 +1173,7 @@ Group* KeePass2XmlReader::getGroup(const Uuid& uuid) + Entry* KeePass2XmlReader::getEntry(const Uuid& uuid) + { + if (uuid.isNull()) { +- return Q_NULLPTR; ++ return nullptr; + } + + if (m_entries.contains(uuid)) { +diff --git a/src/format/KeePass2XmlReader.h b/src/format/KeePass2XmlReader.h +index ca311b0..d2e0e00 100644 +--- a/src/format/KeePass2XmlReader.h ++++ b/src/format/KeePass2XmlReader.h +@@ -25,7 +25,6 @@ + #include + #include + +-#include "core/Global.h" + #include "core/TimeInfo.h" + #include "core/Uuid.h" + +@@ -42,7 +41,7 @@ class KeePass2XmlReader + public: + KeePass2XmlReader(); + Database* readDatabase(QIODevice* device); +- void readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = Q_NULLPTR); ++ void readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = nullptr); + Database* readDatabase(const QString& filename); + bool hasError(); + QString errorString(); +diff --git a/src/format/KeePass2XmlWriter.cpp b/src/format/KeePass2XmlWriter.cpp +index 1eb8dc1..6c92c4b 100644 +--- a/src/format/KeePass2XmlWriter.cpp ++++ b/src/format/KeePass2XmlWriter.cpp +@@ -25,9 +25,9 @@ + #include "streams/QtIOCompressor" + + KeePass2XmlWriter::KeePass2XmlWriter() +- : m_db(Q_NULLPTR) +- , m_meta(Q_NULLPTR) +- , m_randomStream(Q_NULLPTR) ++ : m_db(nullptr) ++ , m_meta(nullptr) ++ , m_randomStream(nullptr) + , m_error(false) + { + m_xml.setAutoFormatting(true); +@@ -58,11 +58,9 @@ void KeePass2XmlWriter::writeDatabase(QIODevice* device, Database* db, KeePass2R + + m_xml.writeEndDocument(); + +-#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0) + if (m_xml.hasError()) { + raiseError(device->errorString()); + } +-#endif + } + + void KeePass2XmlWriter::writeDatabase(const QString& filename, Database* db) +@@ -84,11 +82,12 @@ QString KeePass2XmlWriter::errorString() + + void KeePass2XmlWriter::generateIdMap() + { +- QList allEntries = m_db->rootGroup()->entriesRecursive(true); ++ const QList allEntries = m_db->rootGroup()->entriesRecursive(true); + int nextId = 0; + +- Q_FOREACH (Entry* entry, allEntries) { +- Q_FOREACH (const QString& key, entry->attachments()->keys()) { ++ for (Entry* entry : allEntries) { ++ const QList attachmentKeys = entry->attachments()->keys(); ++ for (const QString& key : attachmentKeys) { + QByteArray data = entry->attachments()->value(key); + if (!m_idMap.contains(data)) { + m_idMap.insert(data, nextId++); +@@ -151,7 +150,8 @@ void KeePass2XmlWriter::writeCustomIcons() + { + m_xml.writeStartElement("CustomIcons"); + +- Q_FOREACH (const Uuid& uuid, m_meta->customIconsOrder()) { ++ const QList customIconsOrder = m_meta->customIconsOrder(); ++ for (const Uuid& uuid : customIconsOrder) { + writeIcon(uuid, m_meta->customIcon(uuid)); + } + +@@ -222,7 +222,8 @@ void KeePass2XmlWriter::writeCustomData() + m_xml.writeStartElement("CustomData"); + + QHash customFields = m_meta->customFields(); +- Q_FOREACH (const QString& key, customFields.keys()) { ++ const QList keyList = customFields.keys(); ++ for (const QString& key : keyList) { + writeCustomDataItem(key, customFields.value(key)); + } + +@@ -275,11 +276,13 @@ void KeePass2XmlWriter::writeGroup(const Group* group) + + writeUuid("LastTopVisibleEntry", group->lastTopVisibleEntry()); + +- Q_FOREACH (const Entry* entry, group->entries()) { ++ const QList entryList = group->entries(); ++ for (const Entry* entry : entryList) { + writeEntry(entry); + } + +- Q_FOREACH (const Group* child, group->children()) { ++ const QList children = group->children(); ++ for (const Group* child : children) { + writeGroup(child); + } + +@@ -305,7 +308,8 @@ void KeePass2XmlWriter::writeDeletedObjects() + { + m_xml.writeStartElement("DeletedObjects"); + +- Q_FOREACH (const DeletedObject& delObj, m_db->deletedObjects()) { ++ const QList delObjList = m_db->deletedObjects(); ++ for (const DeletedObject& delObj : delObjList) { + writeDeletedObject(delObj); + } + +@@ -339,7 +343,8 @@ void KeePass2XmlWriter::writeEntry(const Entry* entry) + writeString("Tags", entry->tags()); + writeTimes(entry->timeInfo()); + +- Q_FOREACH (const QString& key, entry->attributes()->keys()) { ++ const QList attributesKeyList = entry->attributes()->keys(); ++ for (const QString& key : attributesKeyList) { + m_xml.writeStartElement("String"); + + bool protect = ( ((key == "Title") && m_meta->protectTitle()) || +@@ -381,7 +386,8 @@ void KeePass2XmlWriter::writeEntry(const Entry* entry) + m_xml.writeEndElement(); + } + +- Q_FOREACH (const QString& key, entry->attachments()->keys()) { ++ const QList attachmentsKeyList = entry->attachments()->keys(); ++ for (const QString& key : attachmentsKeyList) { + m_xml.writeStartElement("Binary"); + + writeString("Key", key); +@@ -410,7 +416,8 @@ void KeePass2XmlWriter::writeAutoType(const Entry* entry) + writeNumber("DataTransferObfuscation", entry->autoTypeObfuscation()); + writeString("DefaultSequence", entry->defaultAutoTypeSequence()); + +- Q_FOREACH (const AutoTypeAssociations::Association& assoc, entry->autoTypeAssociations()->getAll()) { ++ const QList autoTypeAssociations = entry->autoTypeAssociations()->getAll(); ++ for (const AutoTypeAssociations::Association& assoc : autoTypeAssociations) { + writeAutoTypeAssoc(assoc); + } + +@@ -432,7 +439,7 @@ void KeePass2XmlWriter::writeEntryHistory(const Entry* entry) + m_xml.writeStartElement("History"); + + const QList& historyItems = entry->historyItems(); +- Q_FOREACH (const Entry* item, historyItems) { ++ for (const Entry* item : historyItems) { + writeEntry(item); + } + +diff --git a/src/format/KeePass2XmlWriter.h b/src/format/KeePass2XmlWriter.h +index 48dde6a..23e148d 100644 +--- a/src/format/KeePass2XmlWriter.h ++++ b/src/format/KeePass2XmlWriter.h +@@ -36,7 +36,7 @@ class KeePass2XmlWriter + { + public: + KeePass2XmlWriter(); +- void writeDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = Q_NULLPTR, ++ void writeDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = nullptr, + const QByteArray& headerHash = QByteArray()); + void writeDatabase(const QString& filename, Database* db); + bool hasError(); +diff --git a/src/gui/AboutDialog.h b/src/gui/AboutDialog.h +index 1436aee..08db6c8 100644 +--- a/src/gui/AboutDialog.h ++++ b/src/gui/AboutDialog.h +@@ -21,8 +21,6 @@ + #include + #include + +-#include "core/Global.h" +- + namespace Ui { + class AboutDialog; + } +@@ -32,7 +30,7 @@ class AboutDialog : public QDialog + Q_OBJECT + + public: +- explicit AboutDialog(QWidget* parent = Q_NULLPTR); ++ explicit AboutDialog(QWidget* parent = nullptr); + ~AboutDialog(); + + private: +diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp +index ae6931f..70550c5 100644 +--- a/src/gui/Application.cpp ++++ b/src/gui/Application.cpp +@@ -18,14 +18,38 @@ + + #include "Application.h" + ++#include + #include + + #include "autotype/AutoType.h" + ++#if defined(Q_OS_UNIX) && !defined(Q_OS_OSX) ++class XcbEventFilter : public QAbstractNativeEventFilter ++{ ++public: ++ bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override ++ { ++ Q_UNUSED(result) ++ ++ if (eventType == QByteArrayLiteral("xcb_generic_event_t")) { ++ int retCode = autoType()->callEventFilter(message); ++ if (retCode == 1) { ++ return true; ++ } ++ } ++ ++ return false; ++ } ++}; ++#endif ++ + Application::Application(int& argc, char** argv) + : QApplication(argc, argv) +- , m_mainWindow(Q_NULLPTR) ++ , m_mainWindow(nullptr) + { ++#if defined(Q_OS_UNIX) && !defined(Q_OS_OSX) ++ installNativeEventFilter(new XcbEventFilter()); ++#endif + } + + void Application::setMainWindow(QWidget* mainWindow) +@@ -53,19 +77,3 @@ bool Application::event(QEvent* event) + + return QApplication::event(event); + } +- +-#ifdef Q_WS_X11 +-bool Application::x11EventFilter(XEvent* event) +-{ +- int retCode = autoType()->callEventFilter(event); +- +- if (retCode == 0) { +- return false; +- } +- else if (retCode == 1) { +- return true; +- } +- +- return QApplication::x11EventFilter(event); +-} +-#endif +diff --git a/src/gui/Application.h b/src/gui/Application.h +index 2b78998..149b61d 100644 +--- a/src/gui/Application.h ++++ b/src/gui/Application.h +@@ -21,8 +21,6 @@ + + #include + +-#include "core/Global.h" +- + class Application : public QApplication + { + Q_OBJECT +@@ -31,10 +29,7 @@ public: + Application(int& argc, char** argv); + void setMainWindow(QWidget* mainWindow); + +- bool event(QEvent* event) Q_DECL_OVERRIDE; +-#ifdef Q_WS_X11 +- bool x11EventFilter(XEvent* event) Q_DECL_OVERRIDE; +-#endif ++ bool event(QEvent* event) override; + + Q_SIGNALS: + void openFile(const QString& filename); +diff --git a/src/gui/ChangeMasterKeyWidget.h b/src/gui/ChangeMasterKeyWidget.h +index 46fc3ef..8985ff7 100644 +--- a/src/gui/ChangeMasterKeyWidget.h ++++ b/src/gui/ChangeMasterKeyWidget.h +@@ -33,7 +33,7 @@ class ChangeMasterKeyWidget : public DialogyWidget + Q_OBJECT + + public: +- explicit ChangeMasterKeyWidget(QWidget* parent = Q_NULLPTR); ++ explicit ChangeMasterKeyWidget(QWidget* parent = nullptr); + ~ChangeMasterKeyWidget(); + void clearForms(); + CompositeKey newMasterKey(); +diff --git a/src/gui/Clipboard.cpp b/src/gui/Clipboard.cpp +index 698ca89..bf4db8f 100644 +--- a/src/gui/Clipboard.cpp ++++ b/src/gui/Clipboard.cpp +@@ -23,7 +23,7 @@ + + #include "core/Config.h" + +-Clipboard* Clipboard::m_instance(Q_NULLPTR); ++Clipboard* Clipboard::m_instance(nullptr); + + Clipboard::Clipboard(QObject* parent) + : QObject(parent) +diff --git a/src/gui/Clipboard.h b/src/gui/Clipboard.h +index 8c234a2..dafce70 100644 +--- a/src/gui/Clipboard.h ++++ b/src/gui/Clipboard.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class QTimer; + + class Clipboard : public QObject +@@ -40,7 +38,7 @@ private Q_SLOTS: + void clearClipboard(); + + private: +- explicit Clipboard(QObject* parent = Q_NULLPTR); ++ explicit Clipboard(QObject* parent = nullptr); + + static Clipboard* m_instance; + +diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp +index 9647f88..6b90893 100644 +--- a/src/gui/DatabaseOpenWidget.cpp ++++ b/src/gui/DatabaseOpenWidget.cpp +@@ -30,7 +30,7 @@ + DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) + : DialogyWidget(parent) + , m_ui(new Ui::DatabaseOpenWidget()) +- , m_db(Q_NULLPTR) ++ , m_db(nullptr) + { + m_ui->setupUi(this); + +diff --git a/src/gui/DatabaseOpenWidget.h b/src/gui/DatabaseOpenWidget.h +index 9c9a062..ba55e4c 100644 +--- a/src/gui/DatabaseOpenWidget.h ++++ b/src/gui/DatabaseOpenWidget.h +@@ -35,7 +35,7 @@ class DatabaseOpenWidget : public DialogyWidget + Q_OBJECT + + public: +- explicit DatabaseOpenWidget(QWidget* parent = Q_NULLPTR); ++ explicit DatabaseOpenWidget(QWidget* parent = nullptr); + ~DatabaseOpenWidget(); + void load(const QString& filename); + void enterKey(const QString& pw, const QString& keyFile); +diff --git a/src/gui/DatabaseRepairWidget.h b/src/gui/DatabaseRepairWidget.h +index 56c5c96..6775d2d 100644 +--- a/src/gui/DatabaseRepairWidget.h ++++ b/src/gui/DatabaseRepairWidget.h +@@ -25,14 +25,14 @@ class DatabaseRepairWidget : public DatabaseOpenWidget + Q_OBJECT + + public: +- explicit DatabaseRepairWidget(QWidget* parent = Q_NULLPTR); ++ explicit DatabaseRepairWidget(QWidget* parent = nullptr); + + Q_SIGNALS: + void success(); + void error(); + + protected: +- void openDatabase() Q_DECL_OVERRIDE; ++ void openDatabase() override; + + private Q_SLOTS: + void processEditFinished(bool result); +diff --git a/src/gui/DatabaseSettingsWidget.cpp b/src/gui/DatabaseSettingsWidget.cpp +index 007c44a..b0759bf 100644 +--- a/src/gui/DatabaseSettingsWidget.cpp ++++ b/src/gui/DatabaseSettingsWidget.cpp +@@ -26,7 +26,7 @@ + DatabaseSettingsWidget::DatabaseSettingsWidget(QWidget* parent) + : DialogyWidget(parent) + , m_ui(new Ui::DatabaseSettingsWidget()) +- , m_db(Q_NULLPTR) ++ , m_db(nullptr) + { + m_ui->setupUi(this); + +@@ -139,8 +139,8 @@ void DatabaseSettingsWidget::transformRoundsBenchmark() + + void DatabaseSettingsWidget::truncateHistories() + { +- QList allEntries = m_db->rootGroup()->entriesRecursive(false); +- Q_FOREACH (Entry* entry, allEntries) { ++ const QList allEntries = m_db->rootGroup()->entriesRecursive(false); ++ for (Entry* entry : allEntries) { + entry->truncateHistory(); + } + } +diff --git a/src/gui/DatabaseSettingsWidget.h b/src/gui/DatabaseSettingsWidget.h +index a7d2832..040e0db 100644 +--- a/src/gui/DatabaseSettingsWidget.h ++++ b/src/gui/DatabaseSettingsWidget.h +@@ -33,7 +33,7 @@ class DatabaseSettingsWidget : public DialogyWidget + Q_OBJECT + + public: +- explicit DatabaseSettingsWidget(QWidget* parent = Q_NULLPTR); ++ explicit DatabaseSettingsWidget(QWidget* parent = nullptr); + ~DatabaseSettingsWidget(); + + void load(Database* db); +diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp +index 65c5430..1abb6b4 100644 +--- a/src/gui/DatabaseTabWidget.cpp ++++ b/src/gui/DatabaseTabWidget.cpp +@@ -18,6 +18,8 @@ + #include "DatabaseTabWidget.h" + + #include ++#include ++#include + #include + + #include "autotype/AutoType.h" +@@ -25,7 +27,6 @@ + #include "core/Database.h" + #include "core/Group.h" + #include "core/Metadata.h" +-#include "core/qsavefile.h" + #include "format/CsvExporter.h" + #include "gui/Clipboard.h" + #include "gui/DatabaseWidget.h" +@@ -37,8 +38,8 @@ + #include "gui/group/GroupView.h" + + DatabaseManagerStruct::DatabaseManagerStruct() +- : dbWidget(Q_NULLPTR) +- , lockFile(Q_NULLPTR) ++ : dbWidget(nullptr) ++ , lockFile(nullptr) + , saveToFilename(false) + , modified(false) + , readOnly(false) +@@ -159,7 +160,7 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw, + if (result == QMessageBox::No) { + dbStruct.readOnly = true; + delete lockFile; +- lockFile = Q_NULLPTR; ++ lockFile = nullptr; + } + else { + // take over the lock file if possible +@@ -222,7 +223,7 @@ bool DatabaseTabWidget::closeDatabase(Database* db) + if (dbName.right(1) == "*") { + dbName.chop(1); + } +- if (dbStruct.dbWidget->isInEditMode() && db->hasKey()) { ++ if (dbStruct.dbWidget->isInEditMode() && db->hasKey() && dbStruct.dbWidget->isEditWidgetModified()) { + QMessageBox::StandardButton result = + MessageBox::question( + this, tr("Close?"), +@@ -336,7 +337,7 @@ bool DatabaseTabWidget::saveDatabaseAs(Database* db) + } + QString fileName = fileDialog()->getSaveFileName(this, tr("Save database as"), + oldFileName, tr("KeePass 2 Database").append(" (*.kdbx)"), +- Q_NULLPTR, 0, "kdbx"); ++ nullptr, 0, "kdbx"); + if (!fileName.isEmpty()) { + QFileInfo fileInfo(fileName); + QString lockFilePath; +@@ -460,7 +461,7 @@ void DatabaseTabWidget::exportToCsv() + + QString fileName = fileDialog()->getSaveFileName(this, tr("Export database to CSV file"), + QString(), tr("CSV file").append(" (*.csv)"), +- Q_NULLPTR, 0, "csv"); ++ nullptr, 0, "csv"); + if (fileName.isEmpty()) { + return; + } +@@ -565,7 +566,7 @@ Database* DatabaseTabWidget::indexDatabase(int index) + } + } + +- return Q_NULLPTR; ++ return nullptr; + } + + DatabaseManagerStruct DatabaseTabWidget::indexDatabaseManagerStruct(int index) +@@ -593,7 +594,7 @@ Database* DatabaseTabWidget::databaseFromDatabaseWidget(DatabaseWidget* dbWidget + } + } + +- return Q_NULLPTR; ++ return nullptr; + } + + void DatabaseTabWidget::insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct) +@@ -618,7 +619,7 @@ DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget() + return m_dbList[db].dbWidget; + } + else { +- return Q_NULLPTR; ++ return nullptr; + } + } + +@@ -656,7 +657,7 @@ void DatabaseTabWidget::lockDatabases() + // show the correct tab widget before we are asking questions about it + setCurrentWidget(dbWidget); + +- if (mode == DatabaseWidget::EditMode) { ++ if (mode == DatabaseWidget::EditMode && dbWidget->isEditWidgetModified()) { + QMessageBox::StandardButton result = + MessageBox::question( + this, tr("Lock database"), +diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h +index c15408d..de4a9ca 100644 +--- a/src/gui/DatabaseTabWidget.h ++++ b/src/gui/DatabaseTabWidget.h +@@ -21,7 +21,6 @@ + #include + #include + +-#include "core/qlockfile.h" + #include "format/KeePass2Writer.h" + #include "gui/DatabaseWidget.h" + +@@ -29,6 +28,7 @@ class DatabaseWidget; + class DatabaseWidgetStateSync; + class DatabaseOpenWidget; + class QFile; ++class QLockFile; + + struct DatabaseManagerStruct + { +@@ -51,7 +51,7 @@ class DatabaseTabWidget : public QTabWidget + Q_OBJECT + + public: +- explicit DatabaseTabWidget(QWidget* parent = Q_NULLPTR); ++ explicit DatabaseTabWidget(QWidget* parent = nullptr); + ~DatabaseTabWidget(); + void openDatabase(const QString& fileName, const QString& pw = QString(), + const QString& keyFile = QString()); +@@ -101,7 +101,7 @@ private: + Database* databaseFromDatabaseWidget(DatabaseWidget* dbWidget); + void insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct); + void updateLastDatabases(const QString& filename); +- void connectDatabase(Database* newDb, Database* oldDb = Q_NULLPTR); ++ void connectDatabase(Database* newDb, Database* oldDb = nullptr); + + KeePass2Writer m_writer; + QHash m_dbList; +diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp +index 257bcb6..499ef09 100644 +--- a/src/gui/DatabaseWidget.cpp ++++ b/src/gui/DatabaseWidget.cpp +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -52,9 +53,9 @@ DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent) + , m_db(db) + , m_searchUi(new Ui::SearchWidget()) + , m_searchWidget(new QWidget()) +- , m_newGroup(Q_NULLPTR) +- , m_newEntry(Q_NULLPTR) +- , m_newParent(Q_NULLPTR) ++ , m_newGroup(nullptr) ++ , m_newEntry(nullptr) ++ , m_newParent(nullptr) + { + m_searchUi->setupUi(m_searchWidget); + +@@ -175,7 +176,7 @@ DatabaseWidget::~DatabaseWidget() + + DatabaseWidget::Mode DatabaseWidget::currentMode() const + { +- if (currentWidget() == Q_NULLPTR) { ++ if (currentWidget() == nullptr) { + return DatabaseWidget::None; + } + else if (currentWidget() == m_mainWidget) { +@@ -194,6 +195,18 @@ bool DatabaseWidget::isInEditMode() const + return currentMode() == DatabaseWidget::EditMode; + } + ++bool DatabaseWidget::isEditWidgetModified() const ++{ ++ if (currentWidget() == m_editEntryWidget) { ++ return m_editEntryWidget->hasBeenModified(); ++ } ++ else { ++ // other edit widget don't have a hasBeenModified() method yet ++ // assume that they already have been modified ++ return true; ++ } ++} ++ + QList DatabaseWidget::splitterSizes() const + { + return m_splitter->sizes(); +@@ -311,7 +324,7 @@ void DatabaseWidget::deleteEntries() + + // get all entry pointers as the indexes change when removing multiple entries + QList selectedEntries; +- Q_FOREACH (const QModelIndex& index, selected) { ++ for (const QModelIndex& index : selected) { + selectedEntries.append(m_entryView->entryFromIndex(index)); + } + +@@ -335,7 +348,7 @@ void DatabaseWidget::deleteEntries() + } + + if (result == QMessageBox::Yes) { +- Q_FOREACH (Entry* entry, selectedEntries) { ++ for (Entry* entry : asConst(selectedEntries)) { + delete entry; + } + } +@@ -361,7 +374,7 @@ void DatabaseWidget::deleteEntries() + return; + } + +- Q_FOREACH (Entry* entry, selectedEntries) { ++ for (Entry* entry : asConst(selectedEntries)) { + m_db->recycleEntry(entry); + } + } +@@ -566,8 +579,8 @@ void DatabaseWidget::switchToView(bool accepted) + delete m_newGroup; + } + +- m_newGroup = Q_NULLPTR; +- m_newParent = Q_NULLPTR; ++ m_newGroup = nullptr; ++ m_newParent = nullptr; + } + else if (m_newEntry) { + if (accepted) { +@@ -579,8 +592,8 @@ void DatabaseWidget::switchToView(bool accepted) + delete m_newEntry; + } + +- m_newEntry = Q_NULLPTR; +- m_newParent = Q_NULLPTR; ++ m_newEntry = nullptr; ++ m_newParent = nullptr; + } + + setCurrentWidget(m_mainWidget); +@@ -650,9 +663,9 @@ void DatabaseWidget::openDatabase(bool accepted) + // We won't need those anymore and KeePass1OpenWidget closes + // the file in its dtor. + delete m_databaseOpenWidget; +- m_databaseOpenWidget = Q_NULLPTR; ++ m_databaseOpenWidget = nullptr; + delete m_keepass1OpenWidget; +- m_keepass1OpenWidget = Q_NULLPTR; ++ m_keepass1OpenWidget = nullptr; + } + else { + if (m_databaseOpenWidget->database()) { +@@ -671,8 +684,8 @@ void DatabaseWidget::unlockDatabase(bool accepted) + + replaceDatabase(static_cast(sender())->database()); + +- QList groups = m_db->rootGroup()->groupsRecursive(true); +- Q_FOREACH (Group* group, groups) { ++ const QList groups = m_db->rootGroup()->groupsRecursive(true); ++ for (Group* group : groups) { + if (group->uuid() == m_groupBeforeLock) { + m_groupView->setCurrentGroup(group); + break; +@@ -894,7 +907,7 @@ bool DatabaseWidget::isInSearchMode() const + void DatabaseWidget::clearLastGroup(Group* group) + { + if (group) { +- m_lastGroup = Q_NULLPTR; ++ m_lastGroup = nullptr; + m_searchWidget->hide(); + } + } +@@ -943,7 +956,7 @@ QStringList DatabaseWidget::customEntryAttributes() const + + bool DatabaseWidget::isGroupSelected() const + { +- return m_groupView->currentGroup() != Q_NULLPTR; ++ return m_groupView->currentGroup() != nullptr; + } + + bool DatabaseWidget::currentEntryHasTitle() +diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h +index a925606..e49ee86 100644 +--- a/src/gui/DatabaseWidget.h ++++ b/src/gui/DatabaseWidget.h +@@ -21,7 +21,6 @@ + #include + #include + +-#include "core/Global.h" + #include "core/Uuid.h" + + #include "gui/entry/EntryModel.h" +@@ -59,7 +58,7 @@ public: + LockedMode + }; + +- explicit DatabaseWidget(Database* db, QWidget* parent = Q_NULLPTR); ++ explicit DatabaseWidget(Database* db, QWidget* parent = nullptr); + ~DatabaseWidget(); + Database* database(); + bool dbHasKey() const; +@@ -75,6 +74,7 @@ public: + QStringList customEntryAttributes() const; + bool isGroupSelected() const; + bool isInEditMode() const; ++ bool isEditWidgetModified() const; + QList splitterSizes() const; + void setSplitterSizes(const QList& sizes); + QList entryHeaderViewSizes() const; +@@ -103,7 +103,7 @@ Q_SIGNALS: + void entryColumnSizesChanged(); + + protected: +- bool eventFilter(QObject* object, QEvent* event) Q_DECL_OVERRIDE; ++ bool eventFilter(QObject* object, QEvent* event) override; + + public Q_SLOTS: + void createEntry(); +diff --git a/src/gui/DatabaseWidgetStateSync.cpp b/src/gui/DatabaseWidgetStateSync.cpp +index 66b8492..f2359fe 100644 +--- a/src/gui/DatabaseWidgetStateSync.cpp ++++ b/src/gui/DatabaseWidgetStateSync.cpp +@@ -22,7 +22,7 @@ + + DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent) + : QObject(parent) +- , m_activeDbWidget(Q_NULLPTR) ++ , m_activeDbWidget(nullptr) + , m_blockUpdates(false) + { + m_splitterSizes = variantToIntList(config()->get("GUI/SplitterState")); +@@ -124,10 +124,10 @@ void DatabaseWidgetStateSync::updateColumnSizes() + + QList DatabaseWidgetStateSync::variantToIntList(const QVariant& variant) + { +- QVariantList list = variant.toList(); ++ const QVariantList list = variant.toList(); + QList result; + +- Q_FOREACH (const QVariant& var, list) { ++ for (const QVariant& var : list) { + bool ok; + int size = var.toInt(&ok); + if (ok) { +@@ -146,7 +146,7 @@ QVariant DatabaseWidgetStateSync::intListToVariant(const QList& list) + { + QVariantList result; + +- Q_FOREACH (int value, list) { ++ for (int value : list) { + result.append(value); + } + +diff --git a/src/gui/DatabaseWidgetStateSync.h b/src/gui/DatabaseWidgetStateSync.h +index f6a87cd..a486117 100644 +--- a/src/gui/DatabaseWidgetStateSync.h ++++ b/src/gui/DatabaseWidgetStateSync.h +@@ -16,8 +16,8 @@ + * along with this program. If not, see . + */ + +-#ifndef KEEPASSX_HEADERVIEWSYNC_H +-#define KEEPASSX_HEADERVIEWSYNC_H ++#ifndef KEEPASSX_DATABASEWIDGETSTATESYNC_H ++#define KEEPASSX_DATABASEWIDGETSTATESYNC_H + + #include "gui/DatabaseWidget.h" + +@@ -26,7 +26,7 @@ class DatabaseWidgetStateSync : public QObject + Q_OBJECT + + public: +- explicit DatabaseWidgetStateSync(QObject* parent = Q_NULLPTR); ++ explicit DatabaseWidgetStateSync(QObject* parent = nullptr); + ~DatabaseWidgetStateSync(); + + public Q_SLOTS: +@@ -51,4 +51,4 @@ private: + QList m_columnSizesSearch; + }; + +-#endif // KEEPASSX_HEADERVIEWSYNC_H ++#endif // KEEPASSX_DATABASEWIDGETSTATESYNC_H +diff --git a/src/gui/DialogyWidget.h b/src/gui/DialogyWidget.h +index 9dd0528..b0915a2 100644 +--- a/src/gui/DialogyWidget.h ++++ b/src/gui/DialogyWidget.h +@@ -21,17 +21,15 @@ + #include + #include + +-#include "core/Global.h" +- + class DialogyWidget : public QWidget + { + Q_OBJECT + + public: +- explicit DialogyWidget(QWidget* parent = Q_NULLPTR); ++ explicit DialogyWidget(QWidget* parent = nullptr); + + protected: +- virtual void keyPressEvent(QKeyEvent* e) Q_DECL_OVERRIDE; ++ void keyPressEvent(QKeyEvent* e) override; + + private: + bool clickButton(QDialogButtonBox::StandardButton standardButton); +diff --git a/src/gui/DragTabBar.h b/src/gui/DragTabBar.h +index 1b6005d..a6117a0 100644 +--- a/src/gui/DragTabBar.h ++++ b/src/gui/DragTabBar.h +@@ -20,21 +20,19 @@ + + #include + +-#include "core/Global.h" +- + class DragTabBar : public QTabBar + { + Q_OBJECT + + public: +- explicit DragTabBar(QWidget* parent = Q_NULLPTR); ++ explicit DragTabBar(QWidget* parent = nullptr); + + protected: +- void dragEnterEvent(QDragEnterEvent* event) Q_DECL_OVERRIDE; +- void dragMoveEvent(QDragMoveEvent* event) Q_DECL_OVERRIDE; +- void dragLeaveEvent(QDragLeaveEvent* event) Q_DECL_OVERRIDE; +- void dropEvent(QDropEvent* event) Q_DECL_OVERRIDE; +- void tabLayoutChange() Q_DECL_OVERRIDE; ++ void dragEnterEvent(QDragEnterEvent* event) override; ++ void dragMoveEvent(QDragMoveEvent* event) override; ++ void dragLeaveEvent(QDragLeaveEvent* event) override; ++ void dropEvent(QDropEvent* event) override; ++ void tabLayoutChange() override; + + private Q_SLOTS: + void dragSwitchTab(); +diff --git a/src/gui/EditWidget.h b/src/gui/EditWidget.h +index d27abe9..c5f507a 100644 +--- a/src/gui/EditWidget.h ++++ b/src/gui/EditWidget.h +@@ -33,7 +33,7 @@ class EditWidget : public DialogyWidget + Q_OBJECT + + public: +- explicit EditWidget(QWidget* parent = Q_NULLPTR); ++ explicit EditWidget(QWidget* parent = nullptr); + ~EditWidget(); + + void add(const QString& labelText, QWidget* widget); +diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp +index 6bca81c..ba1d9b2 100644 +--- a/src/gui/EditWidgetIcons.cpp ++++ b/src/gui/EditWidgetIcons.cpp +@@ -36,7 +36,7 @@ IconStruct::IconStruct() + EditWidgetIcons::EditWidgetIcons(QWidget* parent) + : QWidget(parent) + , m_ui(new Ui::EditWidgetIcons()) +- , m_database(Q_NULLPTR) ++ , m_database(nullptr) + , m_defaultIconModel(new DefaultIconModel(this)) + , m_customIconModel(new CustomIconModel(this)) + { +@@ -61,11 +61,8 @@ EditWidgetIcons::~EditWidgetIcons() + { + } + +-IconStruct EditWidgetIcons::save() ++IconStruct EditWidgetIcons::state() const + { +- Q_ASSERT(m_database); +- Q_ASSERT(!m_currentUuid.isNull()); +- + IconStruct iconStruct; + if (m_ui->defaultIconsRadio->isChecked()) { + QModelIndex index = m_ui->defaultIconsView->currentIndex(); +@@ -86,11 +83,15 @@ IconStruct EditWidgetIcons::save() + } + } + +- m_database = Q_NULLPTR; +- m_currentUuid = Uuid(); + return iconStruct; + } + ++void EditWidgetIcons::reset() ++{ ++ m_database = nullptr; ++ m_currentUuid = Uuid(); ++} ++ + void EditWidgetIcons::load(Uuid currentUuid, Database* database, IconStruct iconStruct) + { + Q_ASSERT(database); +@@ -158,10 +159,10 @@ void EditWidgetIcons::removeCustomIcon() + Uuid iconUuid = m_customIconModel->uuidFromIndex(index); + int iconUsedCount = 0; + +- QList allEntries = m_database->rootGroup()->entriesRecursive(true); ++ const QList allEntries = m_database->rootGroup()->entriesRecursive(true); + QList historyEntriesWithSameIcon; + +- Q_FOREACH (Entry* entry, allEntries) { ++ for (Entry* entry : allEntries) { + bool isHistoryEntry = !entry->group(); + if (iconUuid == entry->iconUuid()) { + if (isHistoryEntry) { +@@ -173,15 +174,15 @@ void EditWidgetIcons::removeCustomIcon() + } + } + +- QList allGroups = m_database->rootGroup()->groupsRecursive(true); +- Q_FOREACH (const Group* group, allGroups) { ++ const QList allGroups = m_database->rootGroup()->groupsRecursive(true); ++ for (const Group* group : allGroups) { + if (iconUuid == group->iconUuid() && m_currentUuid != group->uuid()) { + iconUsedCount++; + } + } + + if (iconUsedCount == 0) { +- Q_FOREACH (Entry* entry, historyEntriesWithSameIcon) { ++ for (Entry* entry : asConst(historyEntriesWithSameIcon)) { + entry->setUpdateTimeinfo(false); + entry->setIcon(0); + entry->setUpdateTimeinfo(true); +diff --git a/src/gui/EditWidgetIcons.h b/src/gui/EditWidgetIcons.h +index e18f444..db58801 100644 +--- a/src/gui/EditWidgetIcons.h ++++ b/src/gui/EditWidgetIcons.h +@@ -20,7 +20,6 @@ + + #include + +-#include "core/Global.h" + #include "core/Uuid.h" + + class Database; +@@ -44,10 +43,11 @@ class EditWidgetIcons : public QWidget + Q_OBJECT + + public: +- explicit EditWidgetIcons(QWidget* parent = Q_NULLPTR); ++ explicit EditWidgetIcons(QWidget* parent = nullptr); + ~EditWidgetIcons(); + +- IconStruct save(); ++ IconStruct state() const; ++ void reset(); + void load(Uuid currentUuid, Database* database, IconStruct iconStruct); + + private Q_SLOTS: +diff --git a/src/gui/EditWidgetProperties.h b/src/gui/EditWidgetProperties.h +index c5d0eb0..4a2c059 100644 +--- a/src/gui/EditWidgetProperties.h ++++ b/src/gui/EditWidgetProperties.h +@@ -20,7 +20,6 @@ + + #include + +-#include "core/Global.h" + #include "core/TimeInfo.h" + #include "core/Uuid.h" + +@@ -33,7 +32,7 @@ class EditWidgetProperties : public QWidget + Q_OBJECT + + public: +- explicit EditWidgetProperties(QWidget* parent = Q_NULLPTR); ++ explicit EditWidgetProperties(QWidget* parent = nullptr); + ~EditWidgetProperties(); + + void setFields(TimeInfo timeInfo, Uuid uuid); +diff --git a/src/gui/FileDialog.cpp b/src/gui/FileDialog.cpp +index 8448258..e293db2 100644 +--- a/src/gui/FileDialog.cpp ++++ b/src/gui/FileDialog.cpp +@@ -19,7 +19,7 @@ + + #include "core/Config.h" + +-FileDialog* FileDialog::m_instance(Q_NULLPTR); ++FileDialog* FileDialog::m_instance(nullptr); + + QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, QString dir, + const QString& filter, QString* selectedFilter, +diff --git a/src/gui/FileDialog.h b/src/gui/FileDialog.h +index 46c6353..9f8fbb5 100644 +--- a/src/gui/FileDialog.h ++++ b/src/gui/FileDialog.h +@@ -20,17 +20,15 @@ + + #include + +-#include "core/Global.h" +- + class FileDialog + { + public: +- QString getOpenFileName(QWidget* parent = Q_NULLPTR, const QString& caption = QString(), ++ QString getOpenFileName(QWidget* parent = nullptr, const QString& caption = QString(), + QString dir = QString(), const QString& filter = QString(), +- QString* selectedFilter = Q_NULLPTR, QFileDialog::Options options = 0); +- QString getSaveFileName(QWidget* parent = Q_NULLPTR, const QString& caption = QString(), ++ QString* selectedFilter = nullptr, QFileDialog::Options options = 0); ++ QString getSaveFileName(QWidget* parent = nullptr, const QString& caption = QString(), + QString dir = QString(), const QString& filter = QString(), +- QString* selectedFilter = Q_NULLPTR, QFileDialog::Options options = 0, ++ QString* selectedFilter = nullptr, QFileDialog::Options options = 0, + const QString& defaultExtension = QString()); + + /** +diff --git a/src/gui/IconModels.h b/src/gui/IconModels.h +index 8a24707..868ce44 100644 +--- a/src/gui/IconModels.h ++++ b/src/gui/IconModels.h +@@ -21,7 +21,6 @@ + #include + #include + +-#include "core/Global.h" + #include "core/Uuid.h" + + class DefaultIconModel : public QAbstractListModel +@@ -29,10 +28,10 @@ class DefaultIconModel : public QAbstractListModel + Q_OBJECT + + public: +- explicit DefaultIconModel(QObject* parent = Q_NULLPTR); ++ explicit DefaultIconModel(QObject* parent = nullptr); + +- int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; ++ int rowCount(const QModelIndex& parent = QModelIndex()) const override; ++ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + }; + + class CustomIconModel : public QAbstractListModel +@@ -40,10 +39,10 @@ class CustomIconModel : public QAbstractListModel + Q_OBJECT + + public: +- explicit CustomIconModel(QObject* parent = Q_NULLPTR); ++ explicit CustomIconModel(QObject* parent = nullptr); + +- virtual int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; ++ int rowCount(const QModelIndex& parent = QModelIndex()) const override; ++ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + void setIcons(const QHash& icons, const QList& iconsOrder); + Uuid uuidFromIndex(const QModelIndex& index) const; + QModelIndex indexFromUuid(const Uuid& uuid) const; +diff --git a/src/gui/KeePass1OpenWidget.h b/src/gui/KeePass1OpenWidget.h +index a398f9a..203b786 100644 +--- a/src/gui/KeePass1OpenWidget.h ++++ b/src/gui/KeePass1OpenWidget.h +@@ -25,10 +25,10 @@ class KeePass1OpenWidget : public DatabaseOpenWidget + Q_OBJECT + + public: +- explicit KeePass1OpenWidget(QWidget* parent = Q_NULLPTR); ++ explicit KeePass1OpenWidget(QWidget* parent = nullptr); + + protected: +- void openDatabase() Q_DECL_OVERRIDE; ++ void openDatabase() override; + }; + + #endif // KEEPASSX_KEEPASS1OPENWIDGET_H +diff --git a/src/gui/LineEdit.h b/src/gui/LineEdit.h +index 2672aae..f5f0584 100644 +--- a/src/gui/LineEdit.h ++++ b/src/gui/LineEdit.h +@@ -22,8 +22,6 @@ + + #include + +-#include "core/Global.h" +- + class QToolButton; + + class LineEdit : public QLineEdit +@@ -31,10 +29,10 @@ class LineEdit : public QLineEdit + Q_OBJECT + + public: +- explicit LineEdit(QWidget* parent = Q_NULLPTR); ++ explicit LineEdit(QWidget* parent = nullptr); + + protected: +- void resizeEvent(QResizeEvent* event) Q_DECL_OVERRIDE; ++ void resizeEvent(QResizeEvent* event) override; + + private Q_SLOTS: + void updateCloseButton(const QString& text); +diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp +index b6dc1df..c2701c2 100644 +--- a/src/gui/MainWindow.cpp ++++ b/src/gui/MainWindow.cpp +@@ -38,7 +38,7 @@ const QString MainWindow::BaseWindowTitle = "KeePassX"; + + MainWindow::MainWindow() + : m_ui(new Ui::MainWindow()) +- , m_trayIcon(Q_NULLPTR) ++ , m_trayIcon(nullptr) + { + m_ui->setupUi(this); + +@@ -224,9 +224,10 @@ void MainWindow::updateLastDatabasesMenu() + { + m_ui->menuRecentDatabases->clear(); + +- QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList(); +- Q_FOREACH (const QString& database, lastDatabases) { ++ const QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList(); ++ for (const QString& database : lastDatabases) { + QAction* action = m_ui->menuRecentDatabases->addAction(database); ++ action->setData(database); + m_lastDatabasesActions->addAction(action); + } + m_ui->menuRecentDatabases->addSeparator(); +@@ -249,7 +250,8 @@ void MainWindow::updateCopyAttributesMenu() + delete actions[i]; + } + +- Q_FOREACH (const QString& key, dbWidget->customEntryAttributes()) { ++ const QStringList customEntryAttributes = dbWidget->customEntryAttributes(); ++ for (const QString& key : customEntryAttributes) { + QAction* action = m_ui->menuEntryCopyAttribute->addAction(key); + m_copyAdditionalAttributeActions->addAction(action); + } +@@ -257,7 +259,7 @@ void MainWindow::updateCopyAttributesMenu() + + void MainWindow::openRecentDatabase(QAction* action) + { +- openDatabase(action->text()); ++ openDatabase(action->data().toString()); + } + + void MainWindow::clearLastDatabases() +@@ -315,12 +317,14 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) + break; + } + case DatabaseWidget::EditMode: +- case DatabaseWidget::LockedMode: +- Q_FOREACH (QAction* action, m_ui->menuEntries->actions()) { ++ case DatabaseWidget::LockedMode: { ++ const QList entryActions = m_ui->menuEntries->actions(); ++ for (QAction* action : entryActions) { + action->setEnabled(false); + } + +- Q_FOREACH (QAction* action, m_ui->menuGroups->actions()) { ++ const QList groupActions = m_ui->menuGroups->actions(); ++ for (QAction* action : groupActions) { + action->setEnabled(false); + } + m_ui->actionEntryCopyTitle->setEnabled(false); +@@ -337,17 +341,20 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) + m_ui->actionDatabaseSaveAs->setEnabled(false); + m_ui->actionExportCsv->setEnabled(false); + break; ++ } + default: + Q_ASSERT(false); + } + m_ui->actionDatabaseClose->setEnabled(true); + } + else { +- Q_FOREACH (QAction* action, m_ui->menuEntries->actions()) { ++ const QList entryActions = m_ui->menuEntries->actions(); ++ for (QAction* action : entryActions) { + action->setEnabled(false); + } + +- Q_FOREACH (QAction* action, m_ui->menuGroups->actions()) { ++ const QList groupActions = m_ui->menuGroups->actions(); ++ for (QAction* action : groupActions) { + action->setEnabled(false); + } + m_ui->actionEntryCopyTitle->setEnabled(false); +@@ -450,7 +457,7 @@ void MainWindow::closeEvent(QCloseEvent* event) + } + } + +-void MainWindow::changeEvent(QEvent *event) ++void MainWindow::changeEvent(QEvent* event) + { + if ((event->type() == QEvent::WindowStateChange) && isMinimized() + && isTrayIconEnabled() && m_trayIcon && m_trayIcon->isVisible() +@@ -521,7 +528,7 @@ void MainWindow::updateTrayIcon() + if (m_trayIcon) { + m_trayIcon->hide(); + delete m_trayIcon; +- m_trayIcon = Q_NULLPTR; ++ m_trayIcon = nullptr; + } + } + } +@@ -622,7 +629,7 @@ void MainWindow::repairDatabase() + if (dialog->exec() == QDialog::Accepted && dbRepairWidget->database()) { + QString saveFileName = fileDialog()->getSaveFileName(this, tr("Save repaired database"), QString(), + tr("KeePass 2 Database").append(" (*.kdbx)"), +- Q_NULLPTR, 0, "kdbx"); ++ nullptr, 0, "kdbx"); + + if (!saveFileName.isEmpty()) { + KeePass2Writer writer; +diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h +index 5aa39ca..c52cfba 100644 +--- a/src/gui/MainWindow.h ++++ b/src/gui/MainWindow.h +@@ -44,8 +44,8 @@ public Q_SLOTS: + const QString& keyFile = QString()); + + protected: +- void closeEvent(QCloseEvent* event) Q_DECL_OVERRIDE; +- void changeEvent(QEvent* event) Q_DECL_OVERRIDE; ++ void closeEvent(QCloseEvent* event) override; ++ void changeEvent(QEvent* event) override; + + private Q_SLOTS: + void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::None); +diff --git a/src/gui/MessageBox.h b/src/gui/MessageBox.h +index abb12c0..1ea4022 100644 +--- a/src/gui/MessageBox.h ++++ b/src/gui/MessageBox.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class MessageBox + { + public: +diff --git a/src/gui/PasswordComboBox.cpp b/src/gui/PasswordComboBox.cpp +index 2fad2ab..1f6c068 100644 +--- a/src/gui/PasswordComboBox.cpp ++++ b/src/gui/PasswordComboBox.cpp +@@ -24,7 +24,7 @@ + + PasswordComboBox::PasswordComboBox(QWidget* parent) + : QComboBox(parent) +- , m_generator(Q_NULLPTR) ++ , m_generator(nullptr) + , m_alternatives(10) + { + setEditable(true); +@@ -51,7 +51,6 @@ void PasswordComboBox::setEcho(bool echo) + #else + setStyleSheet("QComboBox { font-family: monospace,Courier New; }"); + #endif +- + } + else { + // clear items so the combobox indicates that no popup menu is available +diff --git a/src/gui/PasswordComboBox.h b/src/gui/PasswordComboBox.h +index 69ce152..7c54e27 100644 +--- a/src/gui/PasswordComboBox.h ++++ b/src/gui/PasswordComboBox.h +@@ -21,8 +21,6 @@ + + #include + +-#include "core/Global.h" +- + class PasswordGenerator; + + class PasswordComboBox : public QComboBox +@@ -30,7 +28,7 @@ class PasswordComboBox : public QComboBox + Q_OBJECT + + public: +- explicit PasswordComboBox(QWidget* parent = Q_NULLPTR); ++ explicit PasswordComboBox(QWidget* parent = nullptr); + ~PasswordComboBox(); + + void setGenerator(PasswordGenerator* generator); +diff --git a/src/gui/PasswordEdit.cpp b/src/gui/PasswordEdit.cpp +index 77b523a..3fd5d47 100644 +--- a/src/gui/PasswordEdit.cpp ++++ b/src/gui/PasswordEdit.cpp +@@ -17,14 +17,12 @@ + + #include "PasswordEdit.h" + +-#include "core/Global.h" +- + const QColor PasswordEdit::CorrectSoFarColor = QColor(255, 205, 15); + const QColor PasswordEdit::ErrorColor = QColor(255, 125, 125); + + PasswordEdit::PasswordEdit(QWidget* parent) + : QLineEdit(parent) +- , m_basePasswordEdit(Q_NULLPTR) ++ , m_basePasswordEdit(nullptr) + { + } + +diff --git a/src/gui/PasswordEdit.h b/src/gui/PasswordEdit.h +index cfb4a76..7ce4908 100644 +--- a/src/gui/PasswordEdit.h ++++ b/src/gui/PasswordEdit.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class PasswordEdit : public QLineEdit + { + Q_OBJECT +@@ -30,7 +28,7 @@ public: + static const QColor CorrectSoFarColor; + static const QColor ErrorColor; + +- explicit PasswordEdit(QWidget* parent = Q_NULLPTR); ++ explicit PasswordEdit(QWidget* parent = nullptr); + void enableVerifyMode(PasswordEdit* baseEdit); + + public Q_SLOTS: +diff --git a/src/gui/PasswordGeneratorWidget.h b/src/gui/PasswordGeneratorWidget.h +index 8759672..46ef08c 100644 +--- a/src/gui/PasswordGeneratorWidget.h ++++ b/src/gui/PasswordGeneratorWidget.h +@@ -21,7 +21,6 @@ + #include + #include + +-#include "core/Global.h" + #include "core/PasswordGenerator.h" + + namespace Ui { +@@ -35,7 +34,7 @@ class PasswordGeneratorWidget : public QWidget + Q_OBJECT + + public: +- explicit PasswordGeneratorWidget(QWidget* parent = Q_NULLPTR); ++ explicit PasswordGeneratorWidget(QWidget* parent = nullptr); + ~PasswordGeneratorWidget(); + void loadSettings(); + void reset(); +diff --git a/src/gui/SettingsWidget.h b/src/gui/SettingsWidget.h +index cefbf6d..3fe621d 100644 +--- a/src/gui/SettingsWidget.h ++++ b/src/gui/SettingsWidget.h +@@ -30,7 +30,7 @@ class SettingsWidget : public EditWidget + Q_OBJECT + + public: +- explicit SettingsWidget(QWidget* parent = Q_NULLPTR); ++ explicit SettingsWidget(QWidget* parent = nullptr); + ~SettingsWidget(); + void loadSettings(); + +diff --git a/src/gui/SortFilterHideProxyModel.cpp b/src/gui/SortFilterHideProxyModel.cpp +index 0902361..0193d95 100644 +--- a/src/gui/SortFilterHideProxyModel.cpp ++++ b/src/gui/SortFilterHideProxyModel.cpp +@@ -22,6 +22,11 @@ SortFilterHideProxyModel::SortFilterHideProxyModel(QObject* parent) + { + } + ++Qt::DropActions SortFilterHideProxyModel::supportedDragActions() const ++{ ++ return sourceModel()->supportedDragActions(); ++} ++ + void SortFilterHideProxyModel::hideColumn(int column, bool hide) + { + m_hiddenColumns.resize(column + 1); +diff --git a/src/gui/SortFilterHideProxyModel.h b/src/gui/SortFilterHideProxyModel.h +index a6f1e71..58d9ff7 100644 +--- a/src/gui/SortFilterHideProxyModel.h ++++ b/src/gui/SortFilterHideProxyModel.h +@@ -21,18 +21,17 @@ + #include + #include + +-#include "core/Global.h" +- + class SortFilterHideProxyModel : public QSortFilterProxyModel + { + Q_OBJECT + + public: +- explicit SortFilterHideProxyModel(QObject* parent = Q_NULLPTR); ++ explicit SortFilterHideProxyModel(QObject* parent = nullptr); ++ Qt::DropActions supportedDragActions() const override; + void hideColumn(int column, bool hide); + + protected: +- bool filterAcceptsColumn(int sourceColumn, const QModelIndex& sourceParent) const Q_DECL_OVERRIDE; ++ bool filterAcceptsColumn(int sourceColumn, const QModelIndex& sourceParent) const override; + + private: + QBitArray m_hiddenColumns; +diff --git a/src/gui/UnlockDatabaseWidget.cpp b/src/gui/UnlockDatabaseWidget.cpp +index 242b07a..a005d0e 100644 +--- a/src/gui/UnlockDatabaseWidget.cpp ++++ b/src/gui/UnlockDatabaseWidget.cpp +@@ -34,5 +34,5 @@ void UnlockDatabaseWidget::clearForms() + m_ui->checkPassword->setChecked(false); + m_ui->checkKeyFile->setChecked(false); + m_ui->buttonTogglePassword->setChecked(false); +- m_db = Q_NULLPTR; ++ m_db = nullptr; + } +diff --git a/src/gui/UnlockDatabaseWidget.h b/src/gui/UnlockDatabaseWidget.h +index 052578b..adb5efb 100644 +--- a/src/gui/UnlockDatabaseWidget.h ++++ b/src/gui/UnlockDatabaseWidget.h +@@ -25,7 +25,7 @@ class UnlockDatabaseWidget : public DatabaseOpenWidget + Q_OBJECT + + public: +- explicit UnlockDatabaseWidget(QWidget* parent = Q_NULLPTR); ++ explicit UnlockDatabaseWidget(QWidget* parent = nullptr); + void clearForms(); + }; + +diff --git a/src/gui/WelcomeWidget.h b/src/gui/WelcomeWidget.h +index 983aaa0..80a0dde 100644 +--- a/src/gui/WelcomeWidget.h ++++ b/src/gui/WelcomeWidget.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + namespace Ui { + class WelcomeWidget; + } +@@ -31,7 +29,7 @@ class WelcomeWidget : public QWidget + Q_OBJECT + + public: +- explicit WelcomeWidget(QWidget* parent = Q_NULLPTR); ++ explicit WelcomeWidget(QWidget* parent = nullptr); + ~WelcomeWidget(); + + private: +diff --git a/src/gui/entry/AutoTypeAssociationsModel.cpp b/src/gui/entry/AutoTypeAssociationsModel.cpp +index 6d6dc97..49f6786 100644 +--- a/src/gui/entry/AutoTypeAssociationsModel.cpp ++++ b/src/gui/entry/AutoTypeAssociationsModel.cpp +@@ -19,7 +19,7 @@ + + AutoTypeAssociationsModel::AutoTypeAssociationsModel(QObject* parent) + : QAbstractListModel(parent) +- , m_autoTypeAssociations(Q_NULLPTR) ++ , m_autoTypeAssociations(nullptr) + { + } + +diff --git a/src/gui/entry/AutoTypeAssociationsModel.h b/src/gui/entry/AutoTypeAssociationsModel.h +index ecb4247..c75168c 100644 +--- a/src/gui/entry/AutoTypeAssociationsModel.h ++++ b/src/gui/entry/AutoTypeAssociationsModel.h +@@ -29,12 +29,12 @@ class AutoTypeAssociationsModel : public QAbstractListModel + Q_OBJECT + + public: +- explicit AutoTypeAssociationsModel(QObject* parent = Q_NULLPTR); ++ explicit AutoTypeAssociationsModel(QObject* parent = nullptr); + void setAutoTypeAssociations(AutoTypeAssociations* autoTypeAssociations); +- int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; ++ int rowCount(const QModelIndex& parent = QModelIndex()) const override; ++ int columnCount(const QModelIndex& parent = QModelIndex()) const override; ++ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; ++ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + + public Q_SLOTS: + void associationChange(int i); +diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp +index 035abad..b65c5b4 100644 +--- a/src/gui/entry/EditEntryWidget.cpp ++++ b/src/gui/entry/EditEntryWidget.cpp +@@ -21,8 +21,10 @@ + #include "ui_EditEntryWidgetHistory.h" + #include "ui_EditEntryWidgetMain.h" + ++#include + #include + #include ++#include + #include + #include + #include +@@ -45,7 +47,7 @@ + + EditEntryWidget::EditEntryWidget(QWidget* parent) + : EditWidget(parent) +- , m_entry(Q_NULLPTR) ++ , m_entry(nullptr) + , m_mainUi(new Ui::EditEntryWidgetMain()) + , m_advancedUi(new Ui::EditEntryWidgetAdvanced()) + , m_autoTypeUi(new Ui::EditEntryWidgetAutoType()) +@@ -232,7 +234,7 @@ void EditEntryWidget::useExpiryPreset(QAction* action) + { + m_mainUi->expireCheck->setChecked(true); + TimeDelta delta = action->data().value(); +- QDateTime now = Tools::currentDateTimeUtc().toLocalTime(); ++ QDateTime now = QDateTime::currentDateTime(); + QDateTime expiryDateTime = now + delta; + m_mainUi->expireDatePicker->setDateTime(expiryDateTime); + } +@@ -408,53 +410,58 @@ void EditEntryWidget::saveEntry() + // we don't want to create a new history item, if only the history has changed + m_entry->removeHistoryItems(m_historyModel->deletedEntries()); + ++ m_autoTypeAssoc->removeEmpty(); ++ + if (!m_create) { + m_entry->beginUpdate(); + } + +- m_entry->setTitle(m_mainUi->titleEdit->text()); +- m_entry->setUsername(m_mainUi->usernameEdit->text()); +- m_entry->setUrl(m_mainUi->urlEdit->text()); +- m_entry->setPassword(m_mainUi->passwordEdit->text()); +- m_entry->setExpires(m_mainUi->expireCheck->isChecked()); +- m_entry->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); ++ updateEntryData(m_entry); + +- m_entry->setNotes(m_mainUi->notesEdit->toPlainText()); ++ if (!m_create) { ++ m_entry->endUpdate(); ++ } + +- m_entry->attributes()->copyCustomKeysFrom(m_entryAttributes); +- m_entry->attachments()->copyDataFrom(m_entryAttachments); ++ clear(); + +- IconStruct iconStruct = m_iconsWidget->save(); ++ Q_EMIT editFinished(true); ++} ++ ++void EditEntryWidget::updateEntryData(Entry* entry) const ++{ ++ entry->setTitle(m_mainUi->titleEdit->text()); ++ entry->setUsername(m_mainUi->usernameEdit->text()); ++ entry->setUrl(m_mainUi->urlEdit->text()); ++ entry->setPassword(m_mainUi->passwordEdit->text()); ++ entry->setExpires(m_mainUi->expireCheck->isChecked()); ++ entry->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); ++ ++ entry->setNotes(m_mainUi->notesEdit->toPlainText()); ++ ++ entry->attributes()->copyCustomKeysFrom(m_entryAttributes); ++ entry->attachments()->copyDataFrom(m_entryAttachments); ++ ++ IconStruct iconStruct = m_iconsWidget->state(); + + if (iconStruct.number < 0) { +- m_entry->setIcon(Entry::DefaultIconNumber); ++ entry->setIcon(Entry::DefaultIconNumber); + } + else if (iconStruct.uuid.isNull()) { +- m_entry->setIcon(iconStruct.number); ++ entry->setIcon(iconStruct.number); + } + else { +- m_entry->setIcon(iconStruct.uuid); ++ entry->setIcon(iconStruct.uuid); + } + +- m_entry->setAutoTypeEnabled(m_autoTypeUi->enableButton->isChecked()); ++ entry->setAutoTypeEnabled(m_autoTypeUi->enableButton->isChecked()); + if (m_autoTypeUi->inheritSequenceButton->isChecked()) { +- m_entry->setDefaultAutoTypeSequence(QString()); ++ entry->setDefaultAutoTypeSequence(QString()); + } + else { +- m_entry->setDefaultAutoTypeSequence(m_autoTypeUi->sequenceEdit->text()); +- } +- +- m_autoTypeAssoc->removeEmpty(); +- m_entry->autoTypeAssociations()->copyDataFrom(m_autoTypeAssoc); +- +- if (!m_create) { +- m_entry->endUpdate(); ++ entry->setDefaultAutoTypeSequence(m_autoTypeUi->sequenceEdit->text()); + } + +- +- clear(); +- +- Q_EMIT editFinished(true); ++ entry->autoTypeAssociations()->copyDataFrom(m_autoTypeAssoc); + } + + void EditEntryWidget::cancel() +@@ -477,12 +484,29 @@ void EditEntryWidget::cancel() + + void EditEntryWidget::clear() + { +- m_entry = Q_NULLPTR; +- m_database = Q_NULLPTR; ++ m_entry = nullptr; ++ m_database = nullptr; + m_entryAttributes->clear(); + m_entryAttachments->clear(); + m_autoTypeAssoc->clear(); + m_historyModel->clear(); ++ m_iconsWidget->reset(); ++} ++ ++bool EditEntryWidget::hasBeenModified() const ++{ ++ // entry has been modified if a history item is to be deleted ++ if (!m_historyModel->deletedEntries().isEmpty()) { ++ return true; ++ } ++ ++ // check if updating the entry would modify it ++ QScopedPointer entry(new Entry()); ++ entry->copyDataFrom(m_entry); ++ ++ entry->beginUpdate(); ++ updateEntryData(entry.data()); ++ return entry->endUpdate(); + } + + void EditEntryWidget::togglePasswordGeneratorButton(bool checked) +@@ -591,7 +615,7 @@ void EditEntryWidget::insertAttachment() + + QString defaultDir = config()->get("LastAttachmentDir").toString(); + if (defaultDir.isEmpty() || !QDir(defaultDir).exists()) { +- defaultDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); ++ defaultDir = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation).value(0); + } + QString filename = fileDialog()->getOpenFileName(this, tr("Select file"), defaultDir); + if (filename.isEmpty() || !QFile::exists(filename)) { +@@ -625,7 +649,7 @@ void EditEntryWidget::saveCurrentAttachment() + QString filename = m_attachmentsModel->keyByIndex(index); + QString defaultDirName = config()->get("LastAttachmentDir").toString(); + if (defaultDirName.isEmpty() || !QDir(defaultDirName).exists()) { +- defaultDirName = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); ++ defaultDirName = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); + } + QDir dir(defaultDirName); + QString savePath = fileDialog()->getSaveFileName(this, tr("Save attachment"), +diff --git a/src/gui/entry/EditEntryWidget.h b/src/gui/entry/EditEntryWidget.h +index 03811bf..c8045d9 100644 +--- a/src/gui/entry/EditEntryWidget.h ++++ b/src/gui/entry/EditEntryWidget.h +@@ -52,7 +52,7 @@ class EditEntryWidget : public EditWidget + Q_OBJECT + + public: +- explicit EditEntryWidget(QWidget* parent = Q_NULLPTR); ++ explicit EditEntryWidget(QWidget* parent = nullptr); + ~EditEntryWidget(); + + void loadEntry(Entry* entry, bool create, bool history, const QString& parentName, +@@ -61,6 +61,7 @@ public: + void createPresetsMenu(QMenu* expirePresetsMenu); + QString entryTitle() const; + void clear(); ++ bool hasBeenModified() const; + + Q_SIGNALS: + void editFinished(bool accepted); +@@ -107,6 +108,7 @@ private: + bool passwordsEqual(); + void setForms(const Entry* entry, bool restore = false); + QMenu* createPresetsMenu(); ++ void updateEntryData(Entry* entry) const; + + Entry* m_entry; + Database* m_database; +diff --git a/src/gui/entry/EntryAttachmentsModel.cpp b/src/gui/entry/EntryAttachmentsModel.cpp +index e072d17..39ed69f 100644 +--- a/src/gui/entry/EntryAttachmentsModel.cpp ++++ b/src/gui/entry/EntryAttachmentsModel.cpp +@@ -20,9 +20,11 @@ + #include "core/Entry.h" + #include "core/Tools.h" + ++#include ++ + EntryAttachmentsModel::EntryAttachmentsModel(QObject* parent) + : QAbstractListModel(parent) +- , m_entryAttachments(Q_NULLPTR) ++ , m_entryAttachments(nullptr) + { + } + +@@ -102,7 +104,7 @@ void EntryAttachmentsModel::attachmentAboutToAdd(const QString& key) + { + QList rows = m_entryAttachments->keys(); + rows.append(key); +- qSort(rows); ++ std::sort(rows.begin(), rows.end()); + int row = rows.indexOf(key); + beginInsertRows(QModelIndex(), row, row); + } +diff --git a/src/gui/entry/EntryAttachmentsModel.h b/src/gui/entry/EntryAttachmentsModel.h +index 177cde0..c2e238a 100644 +--- a/src/gui/entry/EntryAttachmentsModel.h ++++ b/src/gui/entry/EntryAttachmentsModel.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class EntryAttachments; + + class EntryAttachmentsModel : public QAbstractListModel +@@ -29,11 +27,11 @@ class EntryAttachmentsModel : public QAbstractListModel + Q_OBJECT + + public: +- explicit EntryAttachmentsModel(QObject* parent = Q_NULLPTR); ++ explicit EntryAttachmentsModel(QObject* parent = nullptr); + void setEntryAttachments(EntryAttachments* entry); +- int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; ++ int rowCount(const QModelIndex& parent = QModelIndex()) const override; ++ int columnCount(const QModelIndex& parent = QModelIndex()) const override; ++ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + QString keyByIndex(const QModelIndex& index) const; + + private Q_SLOTS: +diff --git a/src/gui/entry/EntryAttributesModel.cpp b/src/gui/entry/EntryAttributesModel.cpp +index f73a2d2..b22380a 100644 +--- a/src/gui/entry/EntryAttributesModel.cpp ++++ b/src/gui/entry/EntryAttributesModel.cpp +@@ -20,9 +20,11 @@ + #include "core/Entry.h" + #include "core/Tools.h" + ++#include ++ + EntryAttributesModel::EntryAttributesModel(QObject* parent) + : QAbstractListModel(parent) +- , m_entryAttributes(Q_NULLPTR) ++ , m_entryAttributes(nullptr) + , m_nextRenameDataChange(false) + { + } +@@ -152,7 +154,7 @@ void EntryAttributesModel::attributeAboutToAdd(const QString& key) + { + QList rows = m_attributes; + rows.append(key); +- qSort(rows); ++ std::sort(rows.begin(), rows.end()); + int row = rows.indexOf(key); + beginInsertRows(QModelIndex(), row, row); + } +@@ -182,7 +184,7 @@ void EntryAttributesModel::attributeAboutToRename(const QString& oldKey, const Q + QList rows = m_attributes; + rows.removeOne(oldKey); + rows.append(newKey); +- qSort(rows); ++ std::sort(rows.begin(), rows.end()); + int newRow = rows.indexOf(newKey); + if (newRow > oldRow) { + newRow++; +@@ -230,7 +232,8 @@ void EntryAttributesModel::updateAttributes() + { + m_attributes.clear(); + +- Q_FOREACH (const QString& key, m_entryAttributes->keys()) { ++ const QList attributesKeyList = m_entryAttributes->keys(); ++ for (const QString& key : attributesKeyList) { + if (!EntryAttributes::isDefaultAttribute(key)) { + m_attributes.append(key); + } +diff --git a/src/gui/entry/EntryAttributesModel.h b/src/gui/entry/EntryAttributesModel.h +index f6ac651..1eec8bf 100644 +--- a/src/gui/entry/EntryAttributesModel.h ++++ b/src/gui/entry/EntryAttributesModel.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class EntryAttributes; + + class EntryAttributesModel : public QAbstractListModel +@@ -29,14 +27,14 @@ class EntryAttributesModel : public QAbstractListModel + Q_OBJECT + + public: +- explicit EntryAttributesModel(QObject* parent = Q_NULLPTR); ++ explicit EntryAttributesModel(QObject* parent = nullptr); + void setEntryAttributes(EntryAttributes* entryAttributes); +- int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; +- bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) Q_DECL_OVERRIDE; +- Qt::ItemFlags flags(const QModelIndex& index) const Q_DECL_OVERRIDE; ++ int rowCount(const QModelIndex& parent = QModelIndex()) const override; ++ int columnCount(const QModelIndex& parent = QModelIndex()) const override; ++ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; ++ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; ++ bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; ++ Qt::ItemFlags flags(const QModelIndex& index) const override; + QModelIndex indexByKey(const QString& key) const; + QString keyByIndex(const QModelIndex& index) const; + +diff --git a/src/gui/entry/EntryHistoryModel.cpp b/src/gui/entry/EntryHistoryModel.cpp +index 58aa49a..ca21055 100644 +--- a/src/gui/entry/EntryHistoryModel.cpp ++++ b/src/gui/entry/EntryHistoryModel.cpp +@@ -18,6 +18,7 @@ + #include "EntryHistoryModel.h" + + #include "core/Entry.h" ++#include "core/Global.h" + + EntryHistoryModel::EntryHistoryModel(QObject* parent) + : QAbstractTableModel(parent) +@@ -136,7 +137,7 @@ void EntryHistoryModel::deleteAll() + + beginRemoveRows(QModelIndex(), 0, m_historyEntries.size() - 1); + +- Q_FOREACH (Entry* entry, m_historyEntries) { ++ for (Entry* entry : asConst(m_historyEntries)) { + m_deletedHistoryEntries << entry; + } + m_historyEntries.clear(); +diff --git a/src/gui/entry/EntryHistoryModel.h b/src/gui/entry/EntryHistoryModel.h +index 6c8073a..a7434e0 100644 +--- a/src/gui/entry/EntryHistoryModel.h ++++ b/src/gui/entry/EntryHistoryModel.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class Entry; + + class EntryHistoryModel : public QAbstractTableModel +@@ -29,13 +27,13 @@ class EntryHistoryModel : public QAbstractTableModel + Q_OBJECT + + public: +- explicit EntryHistoryModel(QObject* parent = Q_NULLPTR); ++ explicit EntryHistoryModel(QObject* parent = nullptr); + + Entry* entryFromIndex(const QModelIndex& index) const; +- int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; +- QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE; ++ int columnCount(const QModelIndex& parent = QModelIndex()) const override; ++ int rowCount(const QModelIndex& parent = QModelIndex()) const override; ++ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; ++ QVariant headerData(int section, Qt::Orientation orientation, int role) const override; + + void setEntries(const QList& entries); + void clear(); +diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp +index 084ad72..d606a77 100644 +--- a/src/gui/entry/EntryModel.cpp ++++ b/src/gui/entry/EntryModel.cpp +@@ -22,14 +22,14 @@ + + #include "core/DatabaseIcons.h" + #include "core/Entry.h" ++#include "core/Global.h" + #include "core/Group.h" + #include "core/Metadata.h" + + EntryModel::EntryModel(QObject* parent) + : QAbstractTableModel(parent) +- , m_group(Q_NULLPTR) ++ , m_group(nullptr) + { +- setSupportedDragActions(Qt::MoveAction | Qt::CopyAction); + } + + Entry* EntryModel::entryFromIndex(const QModelIndex& index) const +@@ -72,20 +72,21 @@ void EntryModel::setEntryList(const QList& entries) + + severConnections(); + +- m_group = Q_NULLPTR; ++ m_group = nullptr; + m_allGroups.clear(); + m_entries = entries; + m_orgEntries = entries; + + QSet databases; + +- Q_FOREACH (Entry* entry, m_entries) { ++ for (Entry* entry : asConst(m_entries)) { + databases.insert(entry->group()->database()); + } + +- Q_FOREACH (Database* db, databases) { ++ for (Database* db : asConst(databases)) { + Q_ASSERT(db); +- Q_FOREACH (const Group* group, db->rootGroup()->groupsRecursive(true)) { ++ const QList groupList = db->rootGroup()->groupsRecursive(true); ++ for (const Group* group : groupList) { + m_allGroups.append(group); + } + +@@ -94,7 +95,7 @@ void EntryModel::setEntryList(const QList& entries) + } + } + +- Q_FOREACH (const Group* group, m_allGroups) { ++ for (const Group* group : asConst(m_allGroups)) { + makeConnections(group); + } + +@@ -191,6 +192,11 @@ Qt::DropActions EntryModel::supportedDropActions() const + return 0; + } + ++Qt::DropActions EntryModel::supportedDragActions() const ++{ ++ return (Qt::MoveAction | Qt::CopyAction); ++} ++ + Qt::ItemFlags EntryModel::flags(const QModelIndex& modelIndex) const + { + if (!modelIndex.isValid()) { +@@ -211,7 +217,7 @@ QStringList EntryModel::mimeTypes() const + QMimeData* EntryModel::mimeData(const QModelIndexList& indexes) const + { + if (indexes.isEmpty()) { +- return Q_NULLPTR; ++ return nullptr; + } + + QMimeData* data = new QMimeData(); +@@ -220,7 +226,7 @@ QMimeData* EntryModel::mimeData(const QModelIndexList& indexes) const + + QSet seenEntries; + +- Q_FOREACH (const QModelIndex& index, indexes) { ++ for (const QModelIndex& index : indexes) { + if (!index.isValid()) { + continue; + } +@@ -236,7 +242,7 @@ QMimeData* EntryModel::mimeData(const QModelIndexList& indexes) const + + if (seenEntries.isEmpty()) { + delete data; +- return Q_NULLPTR; ++ return nullptr; + } + else { + data->setData(mimeTypes().at(0), encoded); +@@ -294,11 +300,11 @@ void EntryModel::entryDataChanged(Entry* entry) + void EntryModel::severConnections() + { + if (m_group) { +- disconnect(m_group, Q_NULLPTR, this, Q_NULLPTR); ++ disconnect(m_group, nullptr, this, nullptr); + } + +- Q_FOREACH (const Group* group, m_allGroups) { +- disconnect(group, Q_NULLPTR, this, Q_NULLPTR); ++ for (const Group* group : asConst(m_allGroups)) { ++ disconnect(group, nullptr, this, nullptr); + } + } + +diff --git a/src/gui/entry/EntryModel.h b/src/gui/entry/EntryModel.h +index 20bcad9..0183c47 100644 +--- a/src/gui/entry/EntryModel.h ++++ b/src/gui/entry/EntryModel.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class Entry; + class Group; + +@@ -38,18 +36,19 @@ public: + Url = 3 + }; + +- explicit EntryModel(QObject* parent = Q_NULLPTR); ++ explicit EntryModel(QObject* parent = nullptr); + Entry* entryFromIndex(const QModelIndex& index) const; + QModelIndex indexFromEntry(Entry* entry) const; + +- int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; +- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; +- Qt::ItemFlags flags(const QModelIndex& modelIndex) const Q_DECL_OVERRIDE; +- QStringList mimeTypes() const Q_DECL_OVERRIDE; +- QMimeData* mimeData(const QModelIndexList& indexes) const Q_DECL_OVERRIDE; ++ int rowCount(const QModelIndex& parent = QModelIndex()) const override; ++ int columnCount(const QModelIndex& parent = QModelIndex()) const override; ++ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; ++ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; ++ Qt::DropActions supportedDropActions() const override; ++ Qt::DropActions supportedDragActions() const override; ++ Qt::ItemFlags flags(const QModelIndex& modelIndex) const override; ++ QStringList mimeTypes() const override; ++ QMimeData* mimeData(const QModelIndexList& indexes) const override; + + void setEntryList(const QList& entries); + +diff --git a/src/gui/entry/EntryView.cpp b/src/gui/entry/EntryView.cpp +index cd2c6fb..1c900a5 100644 +--- a/src/gui/entry/EntryView.cpp ++++ b/src/gui/entry/EntryView.cpp +@@ -32,7 +32,6 @@ EntryView::EntryView(QWidget* parent) + m_sortModel->setDynamicSortFilter(true); + m_sortModel->setSortLocaleAware(true); + m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); +- m_sortModel->setSupportedDragActions(m_model->supportedDragActions()); + QTreeView::setModel(m_sortModel); + + setUniformRowHeights(true); +@@ -75,7 +74,7 @@ void EntryView::setEntryList(const QList& entries) + + void EntryView::setFirstEntryActive() + { +- if(m_model->rowCount() > 0) { ++ if (m_model->rowCount() > 0) { + QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); + setCurrentEntry(m_model->entryFromIndex(index)); + } +@@ -109,7 +108,7 @@ Entry* EntryView::currentEntry() + return m_model->entryFromIndex(m_sortModel->mapToSource(list.first())); + } + else { +- return Q_NULLPTR; ++ return nullptr; + } + } + +@@ -130,7 +129,7 @@ Entry* EntryView::entryFromIndex(const QModelIndex& index) + return m_model->entryFromIndex(m_sortModel->mapToSource(index)); + } + else { +- return Q_NULLPTR; ++ return nullptr; + } + } + +diff --git a/src/gui/entry/EntryView.h b/src/gui/entry/EntryView.h +index c11d041..fb9e356 100644 +--- a/src/gui/entry/EntryView.h ++++ b/src/gui/entry/EntryView.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + #include "gui/entry/EntryModel.h" + + class Entry; +@@ -34,8 +32,8 @@ class EntryView : public QTreeView + Q_OBJECT + + public: +- explicit EntryView(QWidget* parent = Q_NULLPTR); +- void setModel(QAbstractItemModel* model) Q_DECL_OVERRIDE; ++ explicit EntryView(QWidget* parent = nullptr); ++ void setModel(QAbstractItemModel* model) override; + Entry* currentEntry(); + void setCurrentEntry(Entry* entry); + Entry* entryFromIndex(const QModelIndex& index); +@@ -52,7 +50,7 @@ Q_SIGNALS: + void entrySelectionChanged(); + + protected: +- void keyPressEvent(QKeyEvent* event) Q_DECL_OVERRIDE; ++ void keyPressEvent(QKeyEvent* event) override; + + private Q_SLOTS: + void emitEntryActivated(const QModelIndex& index); +diff --git a/src/gui/group/EditGroupWidget.cpp b/src/gui/group/EditGroupWidget.cpp +index ebe5cb9..a5b426b 100644 +--- a/src/gui/group/EditGroupWidget.cpp ++++ b/src/gui/group/EditGroupWidget.cpp +@@ -28,8 +28,8 @@ EditGroupWidget::EditGroupWidget(QWidget* parent) + , m_editGroupWidgetMain(new QWidget()) + , m_editGroupWidgetIcons(new EditWidgetIcons()) + , m_editWidgetProperties(new EditWidgetProperties()) +- , m_group(Q_NULLPTR) +- , m_database(Q_NULLPTR) ++ , m_group(nullptr) ++ , m_database(nullptr) + { + m_mainUi->setupUi(m_editGroupWidgetMain); + +@@ -113,7 +113,7 @@ void EditGroupWidget::save() + m_group->setDefaultAutoTypeSequence(m_mainUi->autoTypeSequenceCustomEdit->text()); + } + +- IconStruct iconStruct = m_editGroupWidgetIcons->save(); ++ IconStruct iconStruct = m_editGroupWidgetIcons->state(); + + if (iconStruct.number < 0) { + m_group->setIcon(Group::DefaultIconNumber); +@@ -142,8 +142,9 @@ void EditGroupWidget::cancel() + + void EditGroupWidget::clear() + { +- m_group = Q_NULLPTR; +- m_database = Q_NULLPTR; ++ m_group = nullptr; ++ m_database = nullptr; ++ m_editGroupWidgetIcons->reset(); + } + + void EditGroupWidget::addTriStateItems(QComboBox* comboBox, bool inheritDefault) +diff --git a/src/gui/group/EditGroupWidget.h b/src/gui/group/EditGroupWidget.h +index c6d91a5..94ad891 100644 +--- a/src/gui/group/EditGroupWidget.h ++++ b/src/gui/group/EditGroupWidget.h +@@ -37,7 +37,7 @@ class EditGroupWidget : public EditWidget + Q_OBJECT + + public: +- explicit EditGroupWidget(QWidget* parent = Q_NULLPTR); ++ explicit EditGroupWidget(QWidget* parent = nullptr); + ~EditGroupWidget(); + + void loadGroup(Group* group, bool create, Database* database); +diff --git a/src/gui/group/GroupModel.cpp b/src/gui/group/GroupModel.cpp +index 1244ad7..5aafc1a 100644 +--- a/src/gui/group/GroupModel.cpp ++++ b/src/gui/group/GroupModel.cpp +@@ -28,7 +28,7 @@ + + GroupModel::GroupModel(Database* db, QObject* parent) + : QAbstractItemModel(parent) +- , m_db(Q_NULLPTR) ++ , m_db(nullptr) + { + changeDatabase(db); + } +@@ -329,7 +329,7 @@ QStringList GroupModel::mimeTypes() const + QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const + { + if (indexes.isEmpty()) { +- return Q_NULLPTR; ++ return nullptr; + } + + QMimeData* data = new QMimeData(); +@@ -338,7 +338,7 @@ QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const + + QSet seenGroups; + +- Q_FOREACH (const QModelIndex& index, indexes) { ++ for (const QModelIndex& index : indexes) { + if (!index.isValid()) { + continue; + } +@@ -354,7 +354,7 @@ QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const + + if (seenGroups.isEmpty()) { + delete data; +- return Q_NULLPTR; ++ return nullptr; + } + else { + data->setData(mimeTypes().at(0), encoded); +diff --git a/src/gui/group/GroupModel.h b/src/gui/group/GroupModel.h +index 752eb2b..0ef0ba9 100644 +--- a/src/gui/group/GroupModel.h ++++ b/src/gui/group/GroupModel.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class Database; + class Group; + +@@ -30,23 +28,23 @@ class GroupModel : public QAbstractItemModel + Q_OBJECT + + public: +- explicit GroupModel(Database* db, QObject* parent = Q_NULLPTR); ++ explicit GroupModel(Database* db, QObject* parent = nullptr); + void changeDatabase(Database* newDb); + QModelIndex index(Group* group) const; + Group* groupFromIndex(const QModelIndex& index) const; + +- int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; +- QModelIndex parent(const QModelIndex& index) const Q_DECL_OVERRIDE; +- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; +- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; +- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; +- Qt::ItemFlags flags(const QModelIndex& modelIndex) const Q_DECL_OVERRIDE; ++ int rowCount(const QModelIndex& parent = QModelIndex()) const override; ++ int columnCount(const QModelIndex& parent = QModelIndex()) const override; ++ QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override; ++ QModelIndex parent(const QModelIndex& index) const override; ++ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; ++ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; ++ Qt::DropActions supportedDropActions() const override; ++ Qt::ItemFlags flags(const QModelIndex& modelIndex) const override; + bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, +- const QModelIndex& parent) Q_DECL_OVERRIDE; +- QStringList mimeTypes() const Q_DECL_OVERRIDE; +- QMimeData* mimeData(const QModelIndexList& indexes) const Q_DECL_OVERRIDE; ++ const QModelIndex& parent) override; ++ QStringList mimeTypes() const override; ++ QMimeData* mimeData(const QModelIndexList& indexes) const override; + + private: + QModelIndex parent(Group* group) const; +diff --git a/src/gui/group/GroupView.cpp b/src/gui/group/GroupView.cpp +index 3c93662..31f5639 100644 +--- a/src/gui/group/GroupView.cpp ++++ b/src/gui/group/GroupView.cpp +@@ -19,6 +19,7 @@ + + #include + #include ++#include + + #include "core/Database.h" + #include "core/Group.h" +@@ -74,7 +75,7 @@ void GroupView::dragMoveEvent(QDragMoveEvent* event) + Group* GroupView::currentGroup() + { + if (currentIndex() == QModelIndex()) { +- return Q_NULLPTR; ++ return nullptr; + } + else { + return m_model->groupFromIndex(currentIndex()); +@@ -97,7 +98,8 @@ void GroupView::recInitExpanded(Group* group) + expandGroup(group, group->isExpanded()); + m_updatingExpanded = false; + +- Q_FOREACH (Group* child, group->children()) { ++ const QList children = group->children(); ++ for (Group* child : children) { + recInitExpanded(child); + } + } +diff --git a/src/gui/group/GroupView.h b/src/gui/group/GroupView.h +index 06bdbaf..69ca828 100644 +--- a/src/gui/group/GroupView.h ++++ b/src/gui/group/GroupView.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class Database; + class Group; + class GroupModel; +@@ -31,9 +29,9 @@ class GroupView : public QTreeView + Q_OBJECT + + public: +- explicit GroupView(Database* db, QWidget* parent = Q_NULLPTR); ++ explicit GroupView(Database* db, QWidget* parent = nullptr); + void changeDatabase(Database* newDb); +- void setModel(QAbstractItemModel* model) Q_DECL_OVERRIDE; ++ void setModel(QAbstractItemModel* model) override; + Group* currentGroup(); + void setCurrentGroup(Group* group); + void expandGroup(Group* group, bool expand = true); +@@ -49,7 +47,7 @@ private Q_SLOTS: + void modelReset(); + + protected: +- void dragMoveEvent(QDragMoveEvent* event) Q_DECL_OVERRIDE; ++ void dragMoveEvent(QDragMoveEvent* event) override; + + private: + void recInitExpanded(Group* group); +diff --git a/src/keys/CompositeKey.cpp b/src/keys/CompositeKey.cpp +index 5bf9cae..16b4859 100644 +--- a/src/keys/CompositeKey.cpp ++++ b/src/keys/CompositeKey.cpp +@@ -18,9 +18,10 @@ + #include "CompositeKey.h" + #include "CompositeKey_p.h" + +-#include +-#include ++#include ++#include + ++#include "core/Global.h" + #include "crypto/CryptoHash.h" + #include "crypto/SymmetricCipher.h" + +@@ -63,7 +64,7 @@ CompositeKey& CompositeKey::operator=(const CompositeKey& key) + + clear(); + +- Q_FOREACH (const Key* subKey, key.m_keys) { ++ for (const Key* subKey : asConst(key.m_keys)) { + addKey(*subKey); + } + +@@ -74,7 +75,7 @@ QByteArray CompositeKey::rawKey() const + { + CryptoHash cryptoHash(CryptoHash::Sha256); + +- Q_FOREACH (const Key* key, m_keys) { ++ for (const Key* key : m_keys) { + cryptoHash.addData(key->rawKey()); + } + +@@ -94,7 +95,8 @@ QByteArray CompositeKey::transform(const QByteArray& seed, quint64 rounds, + + QByteArray key = rawKey(); + +- QFuture future = QtConcurrent::run(transformKeyRaw, key.left(16), seed, rounds, &okLeft, &errorStringLeft); ++ QFuture future = QtConcurrent::run(transformKeyRaw, key.left(16), seed, rounds, ++ &okLeft, &errorStringLeft); + QByteArray result2 = transformKeyRaw(key.right(16), seed, rounds, &okRight, &errorStringRight); + + QByteArray transformed; +@@ -182,7 +184,7 @@ void TransformKeyBenchmarkThread::run() + SymmetricCipher::Encrypt); + cipher.init(seed, iv); + +- QTime t; ++ QElapsedTimer t; + t.start(); + + do { +@@ -191,5 +193,5 @@ void TransformKeyBenchmarkThread::run() + return; + } + m_rounds += 10000; +- } while (t.elapsed() < m_msec); ++ } while (!t.hasExpired(m_msec)); + } +diff --git a/src/keys/FileKey.h b/src/keys/FileKey.h +index f985433..7a9b1ca 100644 +--- a/src/keys/FileKey.h ++++ b/src/keys/FileKey.h +@@ -20,7 +20,6 @@ + + #include + +-#include "core/Global.h" + #include "keys/Key.h" + + class QIODevice; +@@ -30,11 +29,11 @@ class FileKey : public Key + public: + FileKey(); + bool load(QIODevice* device); +- bool load(const QString& fileName, QString* errorMsg = Q_NULLPTR); ++ bool load(const QString& fileName, QString* errorMsg = nullptr); + QByteArray rawKey() const; + FileKey* clone() const; + static void create(QIODevice* device); +- static bool create(const QString& fileName, QString* errorMsg = Q_NULLPTR); ++ static bool create(const QString& fileName, QString* errorMsg = nullptr); + + private: + bool loadXml(QIODevice* device); +diff --git a/src/main.cpp b/src/main.cpp +index bf558f1..d6b1b2d 100644 +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -15,11 +15,11 @@ + * along with this program. If not, see . + */ + ++#include + #include + + #include "config-keepassx.h" + #include "core/Config.h" +-#include "core/qcommandlineparser.h" + #include "core/Tools.h" + #include "core/Translator.h" + #include "crypto/Crypto.h" +@@ -38,7 +38,7 @@ int main(int argc, char** argv) + Application::setApplicationName("keepassx"); + Application::setApplicationVersion(KEEPASSX_VERSION); + // don't set organizationName as that changes the return value of +- // QDesktopServices::storageLocation(QDesktopServices::DataLocation) ++ // QStandardPaths::writableLocation(QDesktopServices::DataLocation) + + QApplication::setQuitOnLastWindowClosed(false); + +@@ -47,7 +47,7 @@ int main(int argc, char** argv) + "Fatal error while testing the cryptographic functions."); + error.append("\n"); + error.append(Crypto::errorString()); +- MessageBox::critical(Q_NULLPTR, QCoreApplication::translate("Main", "KeePassX - Error"), error); ++ MessageBox::critical(nullptr, QCoreApplication::translate("Main", "KeePassX - Error"), error); + return 1; + } + +@@ -95,8 +95,8 @@ int main(int argc, char** argv) + } + + if (config()->get("OpenPreviousDatabasesOnStartup").toBool()) { +- QStringList filenames = config()->get("LastOpenedDatabases").toStringList(); +- Q_FOREACH (const QString& filename, filenames) { ++ const QStringList filenames = config()->get("LastOpenedDatabases").toStringList(); ++ for (const QString& filename : filenames) { + if (!filename.isEmpty() && QFile::exists(filename)) { + mainWindow.openDatabase(filename, QString(), QString()); + } +diff --git a/src/streams/HashedBlockStream.h b/src/streams/HashedBlockStream.h +index cae4eb4..93e4af5 100644 +--- a/src/streams/HashedBlockStream.h ++++ b/src/streams/HashedBlockStream.h +@@ -31,12 +31,12 @@ public: + HashedBlockStream(QIODevice* baseDevice, qint32 blockSize); + ~HashedBlockStream(); + +- bool reset() Q_DECL_OVERRIDE; +- void close() Q_DECL_OVERRIDE; ++ bool reset() override; ++ void close() override; + + protected: +- qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE; +- qint64 writeData(const char* data, qint64 maxSize) Q_DECL_OVERRIDE; ++ qint64 readData(char* data, qint64 maxSize) override; ++ qint64 writeData(const char* data, qint64 maxSize) override; + + private: + void init(); +diff --git a/src/streams/LayeredStream.h b/src/streams/LayeredStream.h +index b243e55..8586b41 100644 +--- a/src/streams/LayeredStream.h ++++ b/src/streams/LayeredStream.h +@@ -20,8 +20,6 @@ + + #include + +-#include "core/Global.h" +- + class LayeredStream : public QIODevice + { + Q_OBJECT +@@ -30,12 +28,12 @@ public: + explicit LayeredStream(QIODevice* baseDevice); + virtual ~LayeredStream(); + +- bool isSequential() const Q_DECL_OVERRIDE; +- bool open(QIODevice::OpenMode mode) Q_DECL_OVERRIDE; ++ bool isSequential() const override; ++ bool open(QIODevice::OpenMode mode) override; + + protected: +- qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE; +- qint64 writeData(const char* data, qint64 maxSize) Q_DECL_OVERRIDE; ++ qint64 readData(char* data, qint64 maxSize) override; ++ qint64 writeData(const char* data, qint64 maxSize) override; + + QIODevice* const m_baseDevice; + +diff --git a/src/streams/StoreDataStream.h b/src/streams/StoreDataStream.h +index 4143438..9f39d6a 100644 +--- a/src/streams/StoreDataStream.h ++++ b/src/streams/StoreDataStream.h +@@ -26,11 +26,11 @@ class StoreDataStream : public LayeredStream + + public: + explicit StoreDataStream(QIODevice* baseDevice); +- bool open(QIODevice::OpenMode mode) Q_DECL_OVERRIDE; ++ bool open(QIODevice::OpenMode mode) override; + QByteArray storedData() const; + + protected: +- qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE; ++ qint64 readData(char* data, qint64 maxSize) override; + + private: + QByteArray m_storedData; +diff --git a/src/streams/SymmetricCipherStream.h b/src/streams/SymmetricCipherStream.h +index fa44605..b6228e1 100644 +--- a/src/streams/SymmetricCipherStream.h ++++ b/src/streams/SymmetricCipherStream.h +@@ -33,13 +33,13 @@ public: + SymmetricCipher::Mode mode, SymmetricCipher::Direction direction); + ~SymmetricCipherStream(); + bool init(const QByteArray& key, const QByteArray& iv); +- bool open(QIODevice::OpenMode mode) Q_DECL_OVERRIDE; +- bool reset() Q_DECL_OVERRIDE; +- void close() Q_DECL_OVERRIDE; ++ bool open(QIODevice::OpenMode mode) override; ++ bool reset() override; ++ void close() override; + + protected: +- qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE; +- qint64 writeData(const char* data, qint64 maxSize) Q_DECL_OVERRIDE; ++ qint64 readData(char* data, qint64 maxSize) override; ++ qint64 writeData(const char* data, qint64 maxSize) override; + + private: + void resetInternalState(); +diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt +index 2de7094..7ea399f 100644 +--- a/tests/CMakeLists.txt ++++ b/tests/CMakeLists.txt +@@ -52,10 +52,9 @@ macro(parse_arguments prefix arg_names option_names) + endmacro(parse_arguments) + + macro(add_unit_test) +- parse_arguments(TEST "NAME;SOURCES;MOCS;LIBS" "" ${ARGN}) ++ parse_arguments(TEST "NAME;SOURCES;LIBS" "" ${ARGN}) + set(_test_NAME ${TEST_NAME}) + set(_srcList ${TEST_SOURCES}) +- qt4_wrap_cpp(_srcList ${TEST_MOCS}) + add_executable(${_test_NAME} ${_srcList}) + target_link_libraries(${_test_NAME} ${TEST_LIBS}) + +@@ -86,85 +85,80 @@ endmacro(add_unit_test) + + set(TEST_LIBRARIES + keepassx_core +- ${QT_QTCORE_LIBRARY} +- ${QT_QTGUI_LIBRARY} +- ${QT_QTTEST_LIBRARY} ++ Qt5::Core ++ Qt5::Concurrent ++ Qt5::Widgets ++ Qt5::Test + ${GCRYPT_LIBRARIES} + ${ZLIB_LIBRARIES} + ) + + set(testsupport_SOURCES modeltest.cpp FailDevice.cpp) +-qt4_wrap_cpp(testsupport_SOURCES modeltest.h FailDevice.h) + add_library(testsupport STATIC ${testsupport_SOURCES}) ++target_link_libraries(testsupport Qt5::Core Qt5::Concurrent Qt5::Widgets Qt5::Test) + +-add_unit_test(NAME testgroup SOURCES TestGroup.cpp MOCS TestGroup.h ++add_unit_test(NAME testgroup SOURCES TestGroup.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testkeepass2xmlreader SOURCES TestKeePass2XmlReader.cpp MOCS TestKeePass2XmlReader.h ++add_unit_test(NAME testkeepass2xmlreader SOURCES TestKeePass2XmlReader.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testkeys SOURCES TestKeys.cpp MOCS TestKeys.h ++add_unit_test(NAME testkeys SOURCES TestKeys.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testkeepass2reader SOURCES TestKeePass2Reader.cpp MOCS TestKeePass2Reader.h ++add_unit_test(NAME testkeepass2reader SOURCES TestKeePass2Reader.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testkeepass2writer SOURCES TestKeePass2Writer.cpp MOCS TestKeePass2Writer.h ++add_unit_test(NAME testkeepass2writer SOURCES TestKeePass2Writer.cpp + LIBS testsupport ${TEST_LIBRARIES}) + +-add_unit_test(NAME testgroupmodel SOURCES TestGroupModel.cpp MOCS TestGroupModel.h ++add_unit_test(NAME testgroupmodel SOURCES TestGroupModel.cpp + LIBS testsupport ${TEST_LIBRARIES}) + +-add_unit_test(NAME testentrymodel SOURCES TestEntryModel.cpp MOCS TestEntryModel.h ++add_unit_test(NAME testentrymodel SOURCES TestEntryModel.cpp + LIBS testsupport ${TEST_LIBRARIES}) + +-add_unit_test(NAME testcryptohash SOURCES TestCryptoHash.cpp MOCS TestCryptoHash.h ++add_unit_test(NAME testcryptohash SOURCES TestCryptoHash.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testsymmetriccipher SOURCES TestSymmetricCipher.cpp MOCS TestSymmetricCipher.h ++add_unit_test(NAME testsymmetriccipher SOURCES TestSymmetricCipher.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testhashedblockstream SOURCES TestHashedBlockStream.cpp MOCS TestHashedBlockStream.h ++add_unit_test(NAME testhashedblockstream SOURCES TestHashedBlockStream.cpp + LIBS testsupport ${TEST_LIBRARIES}) + +-add_unit_test(NAME testkeepass2randomstream SOURCES TestKeePass2RandomStream.cpp MOCS TestKeePass2RandomStream.h ++add_unit_test(NAME testkeepass2randomstream SOURCES TestKeePass2RandomStream.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testmodified SOURCES TestModified.cpp MOCS TestModified.h ++add_unit_test(NAME testmodified SOURCES TestModified.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testdeletedobjects SOURCES TestDeletedObjects.cpp MOCS TestDeletedObjects.h ++add_unit_test(NAME testdeletedobjects SOURCES TestDeletedObjects.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testkeepass1reader SOURCES TestKeePass1Reader.cpp MOCS TestKeePass1Reader.h ++add_unit_test(NAME testkeepass1reader SOURCES TestKeePass1Reader.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testqsavefile SOURCES TestQSaveFile.cpp MOCS TestQSaveFile.h ++add_unit_test(NAME testwildcardmatcher SOURCES TestWildcardMatcher.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testwildcardmatcher SOURCES TestWildcardMatcher.cpp MOCS TestWildcardMatcher.h +- LIBS ${TEST_LIBRARIES}) +- +-add_unit_test(NAME testautotype SOURCES TestAutoType.cpp MOCS TestAutoType.h ++add_unit_test(NAME testautotype SOURCES TestAutoType.cpp + LIBS ${TEST_LIBRARIES}) + set_target_properties(testautotype PROPERTIES ENABLE_EXPORTS ON) + +-add_unit_test(NAME testentry SOURCES TestEntry.cpp MOCS TestEntry.h +- LIBS ${TEST_LIBRARIES}) +- +-add_unit_test(NAME testqcommandlineparser SOURCES TestQCommandLineParser.cpp MOCS TestQCommandLineParser.h ++add_unit_test(NAME testentry SOURCES TestEntry.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testrandom SOURCES TestRandom.cpp MOCS TestRandom.h ++add_unit_test(NAME testrandom SOURCES TestRandom.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testentrysearcher SOURCES TestEntrySearcher.cpp MOCS TestEntrySearcher.h ++add_unit_test(NAME testentrysearcher SOURCES TestEntrySearcher.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testexporter SOURCES TestExporter.cpp MOCS TestExporter.h ++add_unit_test(NAME testexporter SOURCES TestExporter.cpp + LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testcsvexporter SOURCES TestCsvExporter.cpp MOCS TestCsvExporter.h ++add_unit_test(NAME testcsvexporter SOURCES TestCsvExporter.cpp + LIBS ${TEST_LIBRARIES}) + + if(WITH_GUI_TESTS) +diff --git a/tests/FailDevice.h b/tests/FailDevice.h +index f812593..194d617 100644 +--- a/tests/FailDevice.h ++++ b/tests/FailDevice.h +@@ -20,19 +20,17 @@ + + #include + +-#include "core/Global.h" +- + class FailDevice : public QBuffer + { + Q_OBJECT + + public: +- explicit FailDevice(int failAfter, QObject* parent = Q_NULLPTR); +- bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE; ++ explicit FailDevice(int failAfter, QObject* parent = nullptr); ++ bool open(QIODevice::OpenMode openMode) override; + + protected: +- qint64 readData(char* data, qint64 len) Q_DECL_OVERRIDE; +- qint64 writeData(const char* data, qint64 len) Q_DECL_OVERRIDE; ++ qint64 readData(char* data, qint64 len) override; ++ qint64 writeData(const char* data, qint64 len) override; + + private: + int m_failAfter; +diff --git a/tests/TestAutoType.cpp b/tests/TestAutoType.cpp +index 8968348..cbd927f 100644 +--- a/tests/TestAutoType.cpp ++++ b/tests/TestAutoType.cpp +@@ -20,7 +20,6 @@ + #include + #include + +-#include "tests.h" + #include "core/Config.h" + #include "core/FilePath.h" + #include "core/Entry.h" +@@ -108,7 +107,7 @@ void TestAutoType::testInternal() + + void TestAutoType::testAutoTypeWithoutSequence() + { +- m_autoType->performAutoType(m_entry1, Q_NULLPTR); ++ m_autoType->performAutoType(m_entry1, nullptr); + + QCOMPARE(m_test->actionCount(), 14); + QCOMPARE(m_test->actionChars(), +@@ -119,7 +118,7 @@ void TestAutoType::testAutoTypeWithoutSequence() + + void TestAutoType::testAutoTypeWithSequence() + { +- m_autoType->performAutoType(m_entry1, Q_NULLPTR, "{Username}abc{PaSsWoRd}"); ++ m_autoType->performAutoType(m_entry1, nullptr, "{Username}abc{PaSsWoRd}"); + + QCOMPARE(m_test->actionCount(), 15); + QCOMPARE(m_test->actionChars(), +diff --git a/tests/TestCryptoHash.cpp b/tests/TestCryptoHash.cpp +index 4002aea..c166f55 100644 +--- a/tests/TestCryptoHash.cpp ++++ b/tests/TestCryptoHash.cpp +@@ -19,7 +19,6 @@ + + #include + +-#include "tests.h" + #include "crypto/Crypto.h" + #include "crypto/CryptoHash.h" + +diff --git a/tests/TestCsvExporter.cpp b/tests/TestCsvExporter.cpp +index 5965e60..1fa6634 100644 +--- a/tests/TestCsvExporter.cpp ++++ b/tests/TestCsvExporter.cpp +@@ -21,8 +21,6 @@ + #include + #include + +-#include "tests.h" +- + #include "core/Database.h" + #include "core/Entry.h" + #include "core/Group.h" +@@ -53,7 +51,7 @@ void TestCsvExporter::cleanUp() + void TestCsvExporter::testExport() + { + Group* groupRoot = m_db->rootGroup(); +- Group* group= new Group(); ++ Group* group = new Group(); + group->setName("Test Group Name"); + group->setParent(groupRoot); + Entry* entry = new Entry(); +@@ -85,10 +83,10 @@ void TestCsvExporter::testEmptyDatabase() + void TestCsvExporter::testNestedGroups() + { + Group* groupRoot = m_db->rootGroup(); +- Group* group= new Group(); ++ Group* group = new Group(); + group->setName("Test Group Name"); + group->setParent(groupRoot); +- Group* childGroup= new Group(); ++ Group* childGroup = new Group(); + childGroup->setName("Test Sub Group Name"); + childGroup->setParent(group); + Entry* entry = new Entry(); +diff --git a/tests/TestCsvExporter.h b/tests/TestCsvExporter.h +index a71c936..c8cc4dc 100644 +--- a/tests/TestCsvExporter.h ++++ b/tests/TestCsvExporter.h +@@ -42,7 +42,6 @@ private Q_SLOTS: + private: + Database* m_db; + CsvExporter* m_csvExporter; +- + }; + + #endif // KEEPASSX_TESTCSVEXPORTER_H +diff --git a/tests/TestDeletedObjects.cpp b/tests/TestDeletedObjects.cpp +index cf9e3d1..5af0178 100644 +--- a/tests/TestDeletedObjects.cpp ++++ b/tests/TestDeletedObjects.cpp +@@ -19,7 +19,6 @@ + + #include + +-#include "tests.h" + #include "core/Database.h" + #include "core/Group.h" + #include "crypto/Crypto.h" +diff --git a/tests/TestEntry.cpp b/tests/TestEntry.cpp +index f918b6c..1eaca32 100644 +--- a/tests/TestEntry.cpp ++++ b/tests/TestEntry.cpp +@@ -19,7 +19,6 @@ + + #include + +-#include "tests.h" + #include "core/Entry.h" + #include "crypto/Crypto.h" + +diff --git a/tests/TestEntryModel.cpp b/tests/TestEntryModel.cpp +index b323a73..3f956d7 100644 +--- a/tests/TestEntryModel.cpp ++++ b/tests/TestEntryModel.cpp +@@ -21,7 +21,6 @@ + #include + + #include "modeltest.h" +-#include "tests.h" + #include "core/DatabaseIcons.h" + #include "core/Entry.h" + #include "core/Group.h" +diff --git a/tests/TestEntrySearcher.cpp b/tests/TestEntrySearcher.cpp +index 9f7ca13..6b951c7 100644 +--- a/tests/TestEntrySearcher.cpp ++++ b/tests/TestEntrySearcher.cpp +@@ -19,8 +19,6 @@ + + #include + +-#include "tests.h" +- + QTEST_GUILESS_MAIN(TestEntrySearcher) + + void TestEntrySearcher::initTestCase() +diff --git a/tests/TestExporter.cpp b/tests/TestExporter.cpp +index 76a6f75..656b76c 100644 +--- a/tests/TestExporter.cpp ++++ b/tests/TestExporter.cpp +@@ -20,7 +20,6 @@ + + #include + +-#include "tests.h" + #include "core/ToDbExporter.h" + #include "core/Group.h" + #include "core/Metadata.h" +@@ -77,6 +76,3 @@ void TestExporter::testToDbExporter() + delete dbOrg; + delete dbExp; + } +- +- +- +diff --git a/tests/TestGroup.cpp b/tests/TestGroup.cpp +index 514ef6d..a923776 100644 +--- a/tests/TestGroup.cpp ++++ b/tests/TestGroup.cpp +@@ -21,7 +21,6 @@ + #include + #include + +-#include "tests.h" + #include "core/Database.h" + #include "core/Group.h" + #include "core/Metadata.h" +diff --git a/tests/TestGroupModel.cpp b/tests/TestGroupModel.cpp +index 32a4b8e..3608cc4 100644 +--- a/tests/TestGroupModel.cpp ++++ b/tests/TestGroupModel.cpp +@@ -21,7 +21,6 @@ + #include + + #include "modeltest.h" +-#include "tests.h" + #include "core/Database.h" + #include "core/Group.h" + #include "crypto/Crypto.h" +diff --git a/tests/TestHashedBlockStream.cpp b/tests/TestHashedBlockStream.cpp +index d5a0cea..b78a46b 100644 +--- a/tests/TestHashedBlockStream.cpp ++++ b/tests/TestHashedBlockStream.cpp +@@ -20,7 +20,6 @@ + #include + #include + +-#include "tests.h" + #include "FailDevice.h" + #include "crypto/Crypto.h" + #include "streams/HashedBlockStream.h" +diff --git a/tests/TestKeePass1Reader.cpp b/tests/TestKeePass1Reader.cpp +index d9dff9e..f60846d 100644 +--- a/tests/TestKeePass1Reader.cpp ++++ b/tests/TestKeePass1Reader.cpp +@@ -21,7 +21,6 @@ + #include + + #include "config-keepassx-tests.h" +-#include "tests.h" + #include "core/Database.h" + #include "core/Entry.h" + #include "core/Group.h" +diff --git a/tests/TestKeePass2RandomStream.cpp b/tests/TestKeePass2RandomStream.cpp +index cb88133..03dfbe5 100644 +--- a/tests/TestKeePass2RandomStream.cpp ++++ b/tests/TestKeePass2RandomStream.cpp +@@ -19,7 +19,6 @@ + + #include + +-#include "tests.h" + #include "crypto/Crypto.h" + #include "crypto/CryptoHash.h" + #include "crypto/SymmetricCipher.h" +diff --git a/tests/TestKeePass2Reader.cpp b/tests/TestKeePass2Reader.cpp +index d6cb70c..22973ee 100644 +--- a/tests/TestKeePass2Reader.cpp ++++ b/tests/TestKeePass2Reader.cpp +@@ -20,7 +20,6 @@ + #include + + #include "config-keepassx-tests.h" +-#include "tests.h" + #include "core/Database.h" + #include "core/Group.h" + #include "core/Metadata.h" +diff --git a/tests/TestKeePass2Writer.cpp b/tests/TestKeePass2Writer.cpp +index d56d98d..9f0c87b 100644 +--- a/tests/TestKeePass2Writer.cpp ++++ b/tests/TestKeePass2Writer.cpp +@@ -22,7 +22,6 @@ + #include + + #include "config-keepassx-tests.h" +-#include "tests.h" + #include "FailDevice.h" + #include "core/Database.h" + #include "core/Group.h" +diff --git a/tests/TestKeePass2XmlReader.cpp b/tests/TestKeePass2XmlReader.cpp +index 014587f..495b39a 100644 +--- a/tests/TestKeePass2XmlReader.cpp ++++ b/tests/TestKeePass2XmlReader.cpp +@@ -21,7 +21,6 @@ + #include + #include + +-#include "tests.h" + #include "core/Database.h" + #include "core/Group.h" + #include "core/Metadata.h" +@@ -112,12 +111,12 @@ void TestKeePass2XmlReader::testMetadata() + QCOMPARE(m_db->metadata()->protectUrl(), true); + QCOMPARE(m_db->metadata()->protectNotes(), false); + QCOMPARE(m_db->metadata()->recycleBinEnabled(), true); +- QVERIFY(m_db->metadata()->recycleBin() != Q_NULLPTR); ++ QVERIFY(m_db->metadata()->recycleBin() != nullptr); + QCOMPARE(m_db->metadata()->recycleBin()->name(), QString("Recycle Bin")); + QCOMPARE(m_db->metadata()->recycleBinChanged(), genDT(2010, 8, 25, 16, 12, 57)); +- QVERIFY(m_db->metadata()->entryTemplatesGroup() == Q_NULLPTR); ++ QVERIFY(m_db->metadata()->entryTemplatesGroup() == nullptr); + QCOMPARE(m_db->metadata()->entryTemplatesGroupChanged(), genDT(2010, 8, 8, 17, 24, 19)); +- QVERIFY(m_db->metadata()->lastSelectedGroup() != Q_NULLPTR); ++ QVERIFY(m_db->metadata()->lastSelectedGroup() != nullptr); + QCOMPARE(m_db->metadata()->lastSelectedGroup()->name(), QString("NewDatabase")); + QVERIFY(m_db->metadata()->lastTopVisibleGroup() == m_db->metadata()->lastSelectedGroup()); + QCOMPARE(m_db->metadata()->historyMaxItems(), -1); +diff --git a/tests/TestKeys.cpp b/tests/TestKeys.cpp +index b661775..6c1953f 100644 +--- a/tests/TestKeys.cpp ++++ b/tests/TestKeys.cpp +@@ -21,7 +21,6 @@ + #include + + #include "config-keepassx-tests.h" +-#include "tests.h" + #include "core/Database.h" + #include "core/Metadata.h" + #include "crypto/Crypto.h" +@@ -177,7 +176,7 @@ void TestKeys::benchmarkTransformKey() + QByteArray env = qgetenv("BENCHMARK"); + + if (env.isEmpty() || env == "0" || env == "no") { +- QSKIP("Benchmark skipped. Set env variable BENCHMARK=1 to enable.", SkipAll); ++ QSKIP("Benchmark skipped. Set env variable BENCHMARK=1 to enable."); + } + + PasswordKey pwKey; +diff --git a/tests/TestModified.cpp b/tests/TestModified.cpp +index e275e83..70a4a48 100644 +--- a/tests/TestModified.cpp ++++ b/tests/TestModified.cpp +@@ -20,7 +20,6 @@ + #include + #include + +-#include "tests.h" + #include "core/Database.h" + #include "core/Group.h" + #include "core/Metadata.h" +@@ -237,7 +236,7 @@ void TestModified::testEntrySets() + entry->setExpires(entry->timeInfo().expires()); + QCOMPARE(spyModified.count(), spyCount); + +- entry->setExpiryTime(Tools::currentDateTimeUtc().addYears(1)); ++ entry->setExpiryTime(QDateTime::currentDateTimeUtc().addYears(1)); + QCOMPARE(spyModified.count(), ++spyCount); + entry->setExpiryTime(entry->timeInfo().expiryTime()); + QCOMPARE(spyModified.count(), spyCount); +diff --git a/tests/TestQCommandLineParser.cpp b/tests/TestQCommandLineParser.cpp +deleted file mode 100644 +index 4e2c635..0000000 +--- a/tests/TestQCommandLineParser.cpp ++++ /dev/null +@@ -1,416 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 David Faure +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the test suite of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 as published by the Free Software +-** Foundation and appearing in the file LICENSE.LGPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU Lesser General Public License version 2.1 requirements +-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU +-** General Public License version 3.0 as published by the Free Software +-** Foundation and appearing in the file LICENSE.GPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU General Public License version 3.0 requirements will be +-** met: http://www.gnu.org/copyleft/gpl.html. +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#include "TestQCommandLineParser.h" +- +-#include +- +-#include "tests.h" +-#include "core/qcommandlineparser.h" +- +-QTEST_GUILESS_MAIN(TestQCommandLineParser) +- +-Q_DECLARE_METATYPE(char**) +- +-static char *empty_argv[] = { 0 }; +-static int empty_argc = 1; +- +-void TestQCommandLineParser::initTestCase() +-{ +- Q_ASSERT(!empty_argv[0]); +- empty_argv[0] = const_cast("TestQCommandLineParser"); +-} +- +-Q_DECLARE_METATYPE(QCommandLineParser::SingleDashWordOptionMode) +- +-void TestQCommandLineParser::parsingModes_data() +-{ +- QTest::addColumn("parsingMode"); +- +- QTest::newRow("collapsed") << QCommandLineParser::ParseAsCompactedShortOptions; +- QTest::newRow("implicitlylong") << QCommandLineParser::ParseAsLongOptions; +-} +- +-void TestQCommandLineParser::testInvalidOptions() +-{ +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- QTest::ignoreMessage(QtWarningMsg, "QCommandLineOption: Option names cannot start with a '-'"); +- parser.addOption(QCommandLineOption("-v", "Displays version information.")); +-} +- +-void TestQCommandLineParser::testPositionalArguments() +-{ +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "file.txt")); +- QCOMPARE(parser.positionalArguments(), QStringList() << "file.txt"); +-} +- +-void TestQCommandLineParser::testBooleanOption_data() +-{ +- QTest::addColumn("args"); +- QTest::addColumn("expectedOptionNames"); +- QTest::addColumn("expectedIsSet"); +- +- QTest::newRow("set") << (QStringList() << "TestQCommandLineParser" << "-b") << (QStringList() << "b") << true; +- QTest::newRow("unset") << (QStringList() << "TestQCommandLineParser") << QStringList() << false; +-} +- +-void TestQCommandLineParser::testBooleanOption() +-{ +- QFETCH(QStringList, args); +- QFETCH(QStringList, expectedOptionNames); +- QFETCH(bool, expectedIsSet); +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- QVERIFY(parser.addOption(QCommandLineOption("b", "a boolean option"))); +- QVERIFY(parser.parse(args)); +- QCOMPARE(parser.optionNames(), expectedOptionNames); +- QCOMPARE(parser.isSet("b"), expectedIsSet); +- QCOMPARE(parser.values("b"), QStringList()); +- QCOMPARE(parser.positionalArguments(), QStringList()); +- // Should warn on typos +- QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: option not defined: \"c\""); +- QVERIFY(!parser.isSet("c")); +-} +- +-void TestQCommandLineParser::testMultipleNames_data() +-{ +- QTest::addColumn("args"); +- QTest::addColumn("expectedOptionNames"); +- +- QTest::newRow("short") << (QStringList() << "TestQCommandLineParser" << "-v") << (QStringList() << "v"); +- QTest::newRow("long") << (QStringList() << "TestQCommandLineParser" << "--version") << (QStringList() << "version"); +- QTest::newRow("not_set") << (QStringList() << "TestQCommandLineParser") << QStringList(); +-} +- +-void TestQCommandLineParser::testMultipleNames() +-{ +- QFETCH(QStringList, args); +- QFETCH(QStringList, expectedOptionNames); +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineOption option(QStringList() << "v" << "version", "Show version information"); +- QCOMPARE(option.names(), QStringList() << "v" << "version"); +- QCommandLineParser parser; +- QVERIFY(parser.addOption(option)); +- QVERIFY(parser.parse(args)); +- QCOMPARE(parser.optionNames(), expectedOptionNames); +- const bool expectedIsSet = !expectedOptionNames.isEmpty(); +- QCOMPARE(parser.isSet("v"), expectedIsSet); +- QCOMPARE(parser.isSet("version"), expectedIsSet); +-} +- +-void TestQCommandLineParser::testSingleValueOption_data() +-{ +- QTest::addColumn("args"); +- QTest::addColumn("defaults"); +- QTest::addColumn("expectedIsSet"); +- +- QTest::newRow("short") << (QStringList() << "tst" << "-s" << "oxygen") << QStringList() << true; +- QTest::newRow("long") << (QStringList() << "tst" << "--style" << "oxygen") << QStringList() << true; +- QTest::newRow("longequal") << (QStringList() << "tst" << "--style=oxygen") << QStringList() << true; +- QTest::newRow("default") << (QStringList() << "tst") << (QStringList() << "oxygen") << false; +-} +- +-void TestQCommandLineParser::testSingleValueOption() +-{ +- QFETCH(QStringList, args); +- QFETCH(QStringList, defaults); +- QFETCH(bool, expectedIsSet); +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- QCommandLineOption option(QStringList() << "s" << "style", "style name", "styleName"); +- option.setDefaultValues(defaults); +- QVERIFY(parser.addOption(option)); +- for (int mode = 0; mode < 2; ++mode) { +- parser.setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode(mode)); +- QVERIFY(parser.parse(args)); +- QCOMPARE(parser.isSet("s"), expectedIsSet); +- QCOMPARE(parser.isSet("style"), expectedIsSet); +- QCOMPARE(parser.isSet(option), expectedIsSet); +- QCOMPARE(parser.value("s"), QString("oxygen")); +- QCOMPARE(parser.value("style"), QString("oxygen")); +- QCOMPARE(parser.values("s"), QStringList() << "oxygen"); +- QCOMPARE(parser.values("style"), QStringList() << "oxygen"); +- QCOMPARE(parser.values(option), QStringList() << "oxygen"); +- QCOMPARE(parser.positionalArguments(), QStringList()); +- } +- // Should warn on typos +- QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: option not defined: \"c\""); +- QVERIFY(parser.values("c").isEmpty()); +-} +- +-void TestQCommandLineParser::testValueNotSet() +-{ +- QCoreApplication app(empty_argc, empty_argv); +- // Not set, no default value +- QCommandLineParser parser; +- QCommandLineOption option(QStringList() << "s" << "style", "style name"); +- option.setValueName("styleName"); +- QVERIFY(parser.addOption(option)); +- QVERIFY(parser.parse(QStringList() << "tst")); +- QCOMPARE(parser.optionNames(), QStringList()); +- QVERIFY(!parser.isSet("s")); +- QVERIFY(!parser.isSet("style")); +- QCOMPARE(parser.value("s"), QString()); +- QCOMPARE(parser.value("style"), QString()); +- QCOMPARE(parser.values("s"), QStringList()); +- QCOMPARE(parser.values("style"), QStringList()); +-} +- +-void TestQCommandLineParser::testMultipleValuesOption() +-{ +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineOption option("param", "Pass parameter to the backend."); +- option.setValueName("key=value"); +- QCommandLineParser parser; +- QVERIFY(parser.addOption(option)); +- { +- QVERIFY(parser.parse(QStringList() << "tst" << "--param" << "key1=value1")); +- QVERIFY(parser.isSet("param")); +- QCOMPARE(parser.values("param"), QStringList() << "key1=value1"); +- QCOMPARE(parser.value("param"), QString("key1=value1")); +- } +- { +- QVERIFY(parser.parse(QStringList() << "tst" << "--param" << "key1=value1" << "--param" << "key2=value2")); +- QVERIFY(parser.isSet("param")); +- QCOMPARE(parser.values("param"), QStringList() << "key1=value1" << "key2=value2"); +- QCOMPARE(parser.value("param"), QString("key2=value2")); +- } +- +- QString expected = +- "Usage: TestQCommandLineParser [options]\n" +- "\n" +- "Options:\n" +- " --param Pass parameter to the backend.\n"; +- +- const QString exeName = QCoreApplication::instance()->arguments().first(); // e.g. debug\tst_qcommandlineparser.exe on Windows +- expected.replace("TestQCommandLineParser", exeName); +- QCOMPARE(parser.helpText(), expected); +-} +- +-void TestQCommandLineParser::testUnknownOptionErrorHandling_data() +-{ +- QTest::addColumn("parsingMode"); +- QTest::addColumn("args"); +- QTest::addColumn("expectedUnknownOptionNames"); +- QTest::addColumn("expectedErrorText"); +- +- const QStringList args_hello = QStringList() << "TestQCommandLineParser" << "--hello"; +- const QString error_hello("Unknown option 'hello'."); +- QTest::newRow("unknown_name_collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << args_hello << QStringList("hello") << error_hello; +- QTest::newRow("unknown_name_long") << QCommandLineParser::ParseAsLongOptions << args_hello << QStringList("hello") << error_hello; +- +- const QStringList args_value = QStringList() << "TestQCommandLineParser" << "-b=1"; +- QTest::newRow("bool_with_value_collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << args_value << QStringList() << QString("Unexpected value after '-b'."); +- QTest::newRow("bool_with_value_long") << QCommandLineParser::ParseAsLongOptions << args_value << QStringList() << QString("Unexpected value after '-b'."); +- +- const QStringList args_dash_long = QStringList() << "TestQCommandLineParser" << "-bool"; +- const QString error_bool("Unknown options: o, o, l."); +- QTest::newRow("unknown_name_long_collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << args_dash_long << (QStringList() << "o" << "o" << "l") << error_bool; +-} +- +-void TestQCommandLineParser::testUnknownOptionErrorHandling() +-{ +- QFETCH(QCommandLineParser::SingleDashWordOptionMode, parsingMode); +- QFETCH(QStringList, args); +- QFETCH(QStringList, expectedUnknownOptionNames); +- QFETCH(QString, expectedErrorText); +- +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- parser.setSingleDashWordOptionMode(parsingMode); +- QVERIFY(parser.addOption(QCommandLineOption(QStringList() << "b" << "bool", "a boolean option"))); +- QCOMPARE(parser.parse(args), expectedErrorText.isEmpty()); +- QCOMPARE(parser.unknownOptionNames(), expectedUnknownOptionNames); +- QCOMPARE(parser.errorText(), expectedErrorText); +-} +- +-void TestQCommandLineParser::testDoubleDash_data() +-{ +- parsingModes_data(); +-} +- +-void TestQCommandLineParser::testDoubleDash() +-{ +- QFETCH(QCommandLineParser::SingleDashWordOptionMode, parsingMode); +- +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- parser.addOption(QCommandLineOption(QStringList() << "o" << "output", "Output file", "filename")); +- parser.setSingleDashWordOptionMode(parsingMode); +- QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "--output" << "foo")); +- QCOMPARE(parser.value("output"), QString("foo")); +- QCOMPARE(parser.positionalArguments(), QStringList()); +- QCOMPARE(parser.unknownOptionNames(), QStringList()); +- QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "--" << "--output" << "bar" << "-b" << "bleh")); +- QCOMPARE(parser.value("output"), QString()); +- QCOMPARE(parser.positionalArguments(), QStringList() << "--output" << "bar" << "-b" << "bleh"); +- QCOMPARE(parser.unknownOptionNames(), QStringList()); +-} +- +-void TestQCommandLineParser::testDefaultValue() +-{ +- QCommandLineOption opt("name", "desc", +- "valueName", "default"); +- QCOMPARE(opt.defaultValues(), QStringList("default")); +- opt.setDefaultValue(""); +- QCOMPARE(opt.defaultValues(), QStringList()); +- opt.setDefaultValue("default"); +- QCOMPARE(opt.defaultValues(), QStringList("default")); +-} +- +-void TestQCommandLineParser::testProcessNotCalled() +-{ +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- QVERIFY(parser.addOption(QCommandLineOption("b", "a boolean option"))); +- QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: call process() or parse() before isSet"); +- QVERIFY(!parser.isSet("b")); +- QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: call process() or parse() before values"); +- QCOMPARE(parser.values("b"), QStringList()); +-} +- +-void TestQCommandLineParser::testEmptyArgsList() +-{ +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: argument list cannot be empty, it should contain at least the executable name"); +- QVERIFY(!parser.parse(QStringList())); // invalid call, argv[0] is missing +-} +- +-void TestQCommandLineParser::testMissingOptionValue() +-{ +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- parser.addOption(QCommandLineOption("option", "An option", "value")); +- QVERIFY(!parser.parse(QStringList() << "argv0" << "--option")); // the user forgot to pass a value for --option +- QCOMPARE(parser.value("option"), QString()); +- QCOMPARE(parser.errorText(), QString("Missing value after '--option'.")); +-} +- +-void TestQCommandLineParser::testStdinArgument_data() +-{ +- parsingModes_data(); +-} +- +-void TestQCommandLineParser::testStdinArgument() +-{ +- QFETCH(QCommandLineParser::SingleDashWordOptionMode, parsingMode); +- +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- parser.setSingleDashWordOptionMode(parsingMode); +- parser.addOption(QCommandLineOption(QStringList() << "i" << "input", "Input file.", "filename")); +- parser.addOption(QCommandLineOption("b", "Boolean option.")); +- QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "--input" << "-")); +- QCOMPARE(parser.value("input"), QString("-")); +- QCOMPARE(parser.positionalArguments(), QStringList()); +- QCOMPARE(parser.unknownOptionNames(), QStringList()); +- +- QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "--input" << "-" << "-b" << "arg")); +- QCOMPARE(parser.value("input"), QString("-")); +- QVERIFY(parser.isSet("b")); +- QCOMPARE(parser.positionalArguments(), QStringList() << "arg"); +- QCOMPARE(parser.unknownOptionNames(), QStringList()); +- +- QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "-")); +- QCOMPARE(parser.value("input"), QString()); +- QVERIFY(!parser.isSet("b")); +- QCOMPARE(parser.positionalArguments(), QStringList() << "-"); +- QCOMPARE(parser.unknownOptionNames(), QStringList()); +-} +- +-void TestQCommandLineParser::testSingleDashWordOptionModes_data() +-{ +- QTest::addColumn("parsingMode"); +- QTest::addColumn("commandLine"); +- QTest::addColumn("expectedOptionNames"); +- QTest::addColumn("expectedOptionValues"); +- +- QTest::newRow("collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-abc" << "val") +- << (QStringList() << "a" << "b" << "c") << (QStringList() << QString() << QString() << "val"); +- QTest::newRow("collapsed_with_equalsign_value") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-abc=val") +- << (QStringList() << "a" << "b" << "c") << (QStringList() << QString() << QString() << "val"); +- QTest::newRow("collapsed_explicit_longoption") << QCommandLineParser::ParseAsCompactedShortOptions << QStringList("--nn") +- << QStringList("nn") << QStringList(); +- QTest::newRow("collapsed_longoption_value") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "--abc" << "val") +- << QStringList("abc") << QStringList("val"); +- QTest::newRow("compiler") << QCommandLineParser::ParseAsCompactedShortOptions << QStringList("-cab") +- << QStringList("c") << QStringList("ab"); +- QTest::newRow("compiler_with_space") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-c" << "val") +- << QStringList("c") << QStringList("val"); +- +- QTest::newRow("implicitlylong") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-abc" << "val") +- << QStringList("abc") << QStringList("val"); +- QTest::newRow("implicitlylong_equal") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-abc=val") +- << QStringList("abc") << QStringList("val"); +- QTest::newRow("implicitlylong_longoption") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "--nn") +- << QStringList("nn") << QStringList(); +- QTest::newRow("implicitlylong_longoption_value") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "--abc" << "val") +- << QStringList("abc") << QStringList("val"); +- QTest::newRow("implicitlylong_with_space") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-c" << "val") +- << QStringList("c") << QStringList("val"); +-} +- +-void TestQCommandLineParser::testSingleDashWordOptionModes() +-{ +- QFETCH(QCommandLineParser::SingleDashWordOptionMode, parsingMode); +- QFETCH(QStringList, commandLine); +- QFETCH(QStringList, expectedOptionNames); +- QFETCH(QStringList, expectedOptionValues); +- +- commandLine.prepend("TestQCommandLineParser"); +- +- QCoreApplication app(empty_argc, empty_argv); +- QCommandLineParser parser; +- parser.setSingleDashWordOptionMode(parsingMode); +- parser.addOption(QCommandLineOption("a", "a option.")); +- parser.addOption(QCommandLineOption("b", "b option.")); +- parser.addOption(QCommandLineOption(QStringList() << "c" << "abc", "c option.", "value")); +- parser.addOption(QCommandLineOption("nn", "nn option.")); +- QVERIFY(parser.parse(commandLine)); +- QCOMPARE(parser.optionNames(), expectedOptionNames); +- for (int i = 0; i < expectedOptionValues.count(); ++i) +- QCOMPARE(parser.value(parser.optionNames().at(i)), expectedOptionValues.at(i)); +- QCOMPARE(parser.unknownOptionNames(), QStringList()); +-} +diff --git a/tests/TestQCommandLineParser.h b/tests/TestQCommandLineParser.h +deleted file mode 100644 +index 46214cd..0000000 +--- a/tests/TestQCommandLineParser.h ++++ /dev/null +@@ -1,82 +0,0 @@ +-/**************************************************************************** +-** +-** Copyright (C) 2013 David Faure +-** Contact: http://www.qt-project.org/legal +-** +-** This file is part of the test suite of the Qt Toolkit. +-** +-** $QT_BEGIN_LICENSE:LGPL$ +-** Commercial License Usage +-** Licensees holding valid commercial Qt licenses may use this file in +-** accordance with the commercial license agreement provided with the +-** Software or, alternatively, in accordance with the terms contained in +-** a written agreement between you and Digia. For licensing terms and +-** conditions see http://qt.digia.com/licensing. For further information +-** use the contact form at http://qt.digia.com/contact-us. +-** +-** GNU Lesser General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU Lesser +-** General Public License version 2.1 as published by the Free Software +-** Foundation and appearing in the file LICENSE.LGPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU Lesser General Public License version 2.1 requirements +-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +-** +-** In addition, as a special exception, Digia gives you certain additional +-** rights. These rights are described in the Digia Qt LGPL Exception +-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +-** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU +-** General Public License version 3.0 as published by the Free Software +-** Foundation and appearing in the file LICENSE.GPL included in the +-** packaging of this file. Please review the following information to +-** ensure the GNU General Public License version 3.0 requirements will be +-** met: http://www.gnu.org/copyleft/gpl.html. +-** +-** +-** $QT_END_LICENSE$ +-** +-****************************************************************************/ +- +-#ifndef KEEPASSX_TESTQCOMMANDLINEPARSER_H +-#define KEEPASSX_TESTQCOMMANDLINEPARSER_H +- +-#include +- +-class TestQCommandLineParser : public QObject +-{ +- Q_OBJECT +- +-public Q_SLOTS: +- void initTestCase(); +- +-private Q_SLOTS: +- void parsingModes_data(); +- +- // In-process tests +- void testInvalidOptions(); +- void testPositionalArguments(); +- void testBooleanOption_data(); +- void testBooleanOption(); +- void testMultipleNames_data(); +- void testMultipleNames(); +- void testSingleValueOption_data(); +- void testSingleValueOption(); +- void testValueNotSet(); +- void testMultipleValuesOption(); +- void testUnknownOptionErrorHandling_data(); +- void testUnknownOptionErrorHandling(); +- void testDoubleDash_data(); +- void testDoubleDash(); +- void testDefaultValue(); +- void testProcessNotCalled(); +- void testEmptyArgsList(); +- void testMissingOptionValue(); +- void testStdinArgument_data(); +- void testStdinArgument(); +- void testSingleDashWordOptionModes_data(); +- void testSingleDashWordOptionModes(); +-}; +- +-#endif // KEEPASSX_TESTQCOMMANDLINEPARSER_H +diff --git a/tests/TestQSaveFile.cpp b/tests/TestQSaveFile.cpp +deleted file mode 100644 +index 443db52..0000000 +--- a/tests/TestQSaveFile.cpp ++++ /dev/null +@@ -1,204 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#include "TestQSaveFile.h" +- +-#include +- +-#include +- +-#if defined(Q_OS_WIN) +-# include +-#endif +- +-#include "tests.h" +-#include "core/qsavefile.h" +- +-QTEST_GUILESS_MAIN(TestQSaveFile) +- +-class DirCleanup +-{ +-public: +- DirCleanup(const QString& dir, const QString& filePrefix) : m_dir(dir), m_filePrefix(filePrefix) {} +- ~DirCleanup() { +- QDir dir(m_dir); +- QStringList files = dir.entryList(QStringList() << (m_filePrefix + "*"), QDir::Files); +- Q_FOREACH (const QString& file, files) { +- QFile::remove(m_dir + "/" + file); +- } +- +- QDir().rmdir(m_dir); +- } +- +-private: +- QString m_dir; +- QString m_filePrefix; +-}; +- +-void TestQSaveFile::transactionalWrite() +-{ +- const QString dir = tmpDir(); +- QVERIFY(!dir.isEmpty()); +- const QString targetFile = dir + QString::fromLatin1("/outfile"); +- DirCleanup dirCleanup(dir, "outfile"); +- QFile::remove(targetFile); +- QSaveFile file(targetFile); +- QVERIFY(file.open(QIODevice::WriteOnly)); +- QVERIFY(file.isOpen()); +- QCOMPARE(file.fileName(), targetFile); +- QVERIFY(!QFile::exists(targetFile)); +- +- QTextStream ts(&file); +- ts << "This is test data one.\n"; +- ts.flush(); +- QCOMPARE(file.error(), QFile::NoError); +- QVERIFY(!QFile::exists(targetFile)); +- +- QVERIFY(file.commit()); +- QVERIFY(QFile::exists(targetFile)); +- QCOMPARE(file.fileName(), targetFile); +- +- // Check that we can reuse a QSaveFile object +- // (and test the case of an existing target file) +- QVERIFY(file.open(QIODevice::WriteOnly)); +- QCOMPARE(file.write("Hello"), 5LL); +- QVERIFY(file.commit()); +- +- QFile reader(targetFile); +- QVERIFY(reader.open(QIODevice::ReadOnly)); +- QCOMPARE(QString::fromLatin1(reader.readAll().constData()), QString::fromLatin1("Hello")); +- reader.close(); +- +- QVERIFY(QFile::remove(targetFile)); +-} +- +-void TestQSaveFile::autoFlush() +-{ +- const QString dir = tmpDir(); +- QVERIFY(!dir.isEmpty()); +- const QString targetFile = dir + QString::fromLatin1("/outfile"); +- DirCleanup dirCleanup(dir, "outfile"); +- QFile::remove(targetFile); +- QSaveFile file(targetFile); +- QVERIFY(file.open(QIODevice::WriteOnly)); +- +- QTextStream ts(&file); +- ts << "Auto-flush."; +- // no flush +- QVERIFY(file.commit()); // close will emit aboutToClose, which will flush the stream +- QFile reader(targetFile); +- QVERIFY(reader.open(QIODevice::ReadOnly)); +- QCOMPARE(QString::fromLatin1(reader.readAll().constData()), QString::fromLatin1("Auto-flush.")); +- reader.close(); +- +- QVERIFY(QFile::remove(targetFile)); +-} +- +-void TestQSaveFile::transactionalWriteNoPermissions() +-{ +-#ifdef Q_OS_UNIX +- if (::geteuid() == 0) { +- QSKIP("not valid running this test as root", SkipAll); +- } +- +- // You can write into /dev/zero, but you can't create a /dev/zero.XXXXXX temp file. +- QSaveFile file("/dev/zero"); +- if (!QDir("/dev").exists()) { +- QSKIP("/dev doesn't exist on this system", SkipAll); +- } +- +- QVERIFY(!file.open(QIODevice::WriteOnly)); +- QCOMPARE(static_cast(file.error()), static_cast(QFile::OpenError)); +- QVERIFY(!file.commit()); +-#endif +-} +- +-void TestQSaveFile::transactionalWriteCanceled() +-{ +- const QString dir = tmpDir(); +- QVERIFY(!dir.isEmpty()); +- const QString targetFile = dir + QString::fromLatin1("/outfile"); +- DirCleanup dirCleanup(dir, "outfile"); +- QFile::remove(targetFile); +- QSaveFile file(targetFile); +- QVERIFY(file.open(QIODevice::WriteOnly)); +- +- QTextStream ts(&file); +- ts << "This writing operation will soon be canceled.\n"; +- ts.flush(); +- QCOMPARE(file.error(), QFile::NoError); +- QVERIFY(!QFile::exists(targetFile)); +- +- // We change our mind, let's abort writing +- file.cancelWriting(); +- +- QVERIFY(!file.commit()); +- +- QVERIFY(!QFile::exists(targetFile)); // temp file was discarded +- QCOMPARE(file.fileName(), targetFile); +-} +- +-void TestQSaveFile::transactionalWriteErrorRenaming() +-{ +-#ifndef Q_OS_WIN +- if (::geteuid() == 0) { +- QSKIP("not valid running this test as root", SkipAll); +- } +- const QString dir = tmpDir(); +- QVERIFY(!dir.isEmpty()); +- const QString targetFile = dir + QString::fromLatin1("/outfile"); +- DirCleanup dirCleanup(dir, "outfile"); +- QSaveFile file(targetFile); +- QVERIFY(file.open(QIODevice::WriteOnly)); +- QCOMPARE(file.write("Hello"), qint64(5)); +- QVERIFY(!QFile::exists(targetFile)); +- +-#ifdef Q_OS_UNIX +- QFile dirAsFile(dir); // yay, I have to use QFile to change a dir's permissions... +- QVERIFY(dirAsFile.setPermissions(QFile::Permissions(0))); // no permissions +-#else +- QVERIFY(file.setPermissions(QFile::ReadOwner)); +-#endif +- +- QVERIFY(!file.commit()); +- QVERIFY(!QFile::exists(targetFile)); // renaming failed +- QCOMPARE(file.error(), QFile::RenameError); +- +- // Restore permissions so that the cleanup can happen +-#ifdef Q_OS_UNIX +- QVERIFY(dirAsFile.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner))); +-#else +- QVERIFY(file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)); +-#endif +-#endif // !Q_OS_WIN +-} +- +-QString TestQSaveFile::tmpDir() +-{ +- QTemporaryFile* tmpFile = new QTemporaryFile(QDir::tempPath() + "/qttest_temp.XXXXXX"); +- if (!tmpFile->open()) { +- return QString(); +- } +- QString dirName = tmpFile->fileName(); +- delete tmpFile; +- if (!QDir().mkdir(dirName)) { +- return QString(); +- } +- +- return dirName; +-} +diff --git a/tests/TestQSaveFile.h b/tests/TestQSaveFile.h +deleted file mode 100644 +index 8e1caf0..0000000 +--- a/tests/TestQSaveFile.h ++++ /dev/null +@@ -1,39 +0,0 @@ +-/* +- * Copyright (C) 2012 Felix Geyer +- * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_TESTQSAVEFILE_H +-#define KEEPASSX_TESTQSAVEFILE_H +- +-#include +- +-class TestQSaveFile : public QObject +-{ +- Q_OBJECT +- +-private Q_SLOTS: +- void transactionalWrite(); +- void autoFlush(); +- void transactionalWriteNoPermissions(); +- void transactionalWriteCanceled(); +- void transactionalWriteErrorRenaming(); +- +-private: +- QString tmpDir(); +-}; +- +-#endif // KEEPASSX_TESTQSAVEFILE_H +diff --git a/tests/TestRandom.cpp b/tests/TestRandom.cpp +index 40ab702..6c5b1f7 100644 +--- a/tests/TestRandom.cpp ++++ b/tests/TestRandom.cpp +@@ -17,8 +17,8 @@ + + #include "TestRandom.h" + +-#include "tests.h" + #include "core/Endian.h" ++#include "core/Global.h" + + #include + +diff --git a/tests/TestRandom.h b/tests/TestRandom.h +index a308f36..c879f94 100644 +--- a/tests/TestRandom.h ++++ b/tests/TestRandom.h +@@ -18,7 +18,6 @@ + #ifndef KEEPASSX_TESTRANDOM_H + #define KEEPASSX_TESTRANDOM_H + +-#include "core/Global.h" + #include "crypto/Random.h" + + #include +@@ -27,7 +26,7 @@ class RandomBackendTest : public RandomBackend + { + public: + RandomBackendTest(); +- void randomize(void* data, int len) Q_DECL_OVERRIDE; ++ void randomize(void* data, int len) override; + void setNextBytes(const QByteArray& nextBytes); + + private: +diff --git a/tests/TestSymmetricCipher.cpp b/tests/TestSymmetricCipher.cpp +index 578d250..698ecb2 100644 +--- a/tests/TestSymmetricCipher.cpp ++++ b/tests/TestSymmetricCipher.cpp +@@ -20,7 +20,6 @@ + #include + #include + +-#include "tests.h" + #include "crypto/Crypto.h" + #include "crypto/SymmetricCipher.h" + #include "streams/SymmetricCipherStream.h" +diff --git a/tests/TestWildcardMatcher.cpp b/tests/TestWildcardMatcher.cpp +index dc9991d..dffe1c8 100644 +--- a/tests/TestWildcardMatcher.cpp ++++ b/tests/TestWildcardMatcher.cpp +@@ -19,7 +19,6 @@ + + #include + +-#include "tests.h" + #include "autotype/WildcardMatcher.h" + + QTEST_GUILESS_MAIN(TestWildcardMatcher) +diff --git a/tests/gui/CMakeLists.txt b/tests/gui/CMakeLists.txt +index 91fcd69..a1ca914 100644 +--- a/tests/gui/CMakeLists.txt ++++ b/tests/gui/CMakeLists.txt +@@ -13,6 +13,6 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + +-add_unit_test(NAME testgui SOURCES TestGui.cpp MOCS TestGui.h LIBS ${TEST_LIBRARIES}) ++add_unit_test(NAME testgui SOURCES TestGui.cpp LIBS ${TEST_LIBRARIES}) + +-add_unit_test(NAME testguipixmaps SOURCES TestGuiPixmaps.cpp MOCS TestGuiPixmaps.h LIBS ${TEST_LIBRARIES}) ++add_unit_test(NAME testguipixmaps SOURCES TestGuiPixmaps.cpp LIBS ${TEST_LIBRARIES}) +diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp +index 8845c60..90d7fc2 100644 +--- a/tests/gui/TestGui.cpp ++++ b/tests/gui/TestGui.cpp +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -29,7 +30,6 @@ + #include + + #include "config-keepassx-tests.h" +-#include "tests.h" + #include "core/Config.h" + #include "core/Database.h" + #include "core/Entry.h" +@@ -56,6 +56,7 @@ void TestGui::initTestCase() + m_mainWindow = new MainWindow(); + m_tabWidget = m_mainWindow->findChild("tabWidget"); + m_mainWindow->show(); ++ m_mainWindow->activateWindow(); + Tools::wait(50); + + QByteArray tmpData; +@@ -184,7 +185,7 @@ void TestGui::testSearch() + QLineEdit* searchEdit = m_dbWidget->findChild("searchEdit"); + QToolButton* clearSearch = m_dbWidget->findChild("clearButton"); + +- QVERIFY(!searchEdit->hasFocus()); ++ QVERIFY(!searchEdit->isVisible()); + + // Enter search + QTest::mouseClick(searchActionWidget, Qt::LeftButton); +@@ -440,8 +441,8 @@ void TestGui::testDatabaseLocking() + + triggerAction("actionLockDatabases"); + +- QCOMPARE(m_tabWidget->tabText(0), QString("Save [locked]")); +- QCOMPARE(m_tabWidget->tabText(1), QString("basic [New database]*")); ++ QCOMPARE(m_tabWidget->tabText(0).remove('&'), QString("Save [locked]")); ++ QCOMPARE(m_tabWidget->tabText(1).remove('&'), QString("basic [New database]*")); + + QWidget* dbWidget = m_tabWidget->currentDatabaseWidget(); + QWidget* unlockDatabaseWidget = dbWidget->findChild("unlockDatabaseWidget"); +@@ -451,7 +452,7 @@ void TestGui::testDatabaseLocking() + QTest::keyClicks(editPassword, "masterpw"); + QTest::keyClick(editPassword, Qt::Key_Enter); + +- QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("basic [New database]*")); ++ QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()).remove('&'), QString("basic [New database]*")); + } + + void TestGui::cleanupTestCase() +diff --git a/tests/gui/TestGuiPixmaps.cpp b/tests/gui/TestGuiPixmaps.cpp +index 87e3f24..3637494 100644 +--- a/tests/gui/TestGuiPixmaps.cpp ++++ b/tests/gui/TestGuiPixmaps.cpp +@@ -19,7 +19,6 @@ + + #include + +-#include "tests.h" + #include "core/Database.h" + #include "core/DatabaseIcons.h" + #include "core/Entry.h" +diff --git a/tests/modeltest.cpp b/tests/modeltest.cpp +index 19f02d9..4d8b184 100644 +--- a/tests/modeltest.cpp ++++ b/tests/modeltest.cpp +@@ -1,50 +1,40 @@ + /**************************************************************************** + ** +-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +-** Contact: http://www.qt-project.org/ ++** Copyright (C) 2015 The Qt Company Ltd. ++** Contact: http://www.qt.io/licensing/ + ** + ** This file is part of the test suite of the Qt Toolkit. + ** +-** $QT_BEGIN_LICENSE:LGPL$ ++** $QT_BEGIN_LICENSE:LGPL21$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see http://www.qt.io/terms-conditions. For further ++** information use the contact form at http://www.qt.io/contact-us. ++** + ** GNU Lesser General Public License Usage +-** This file may be used under the terms of the GNU Lesser General Public +-** License version 2.1 as published by the Free Software Foundation and +-** appearing in the file LICENSE.LGPL included in the packaging of this +-** file. Please review the following information to ensure the GNU Lesser +-** General Public License version 2.1 requirements will be met: ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 or version 3 as published by the Free ++** Software Foundation and appearing in the file LICENSE.LGPLv21 and ++** LICENSE.LGPLv3 included in the packaging of this file. Please review the ++** following information to ensure the GNU Lesser General Public License ++** requirements will be met: https://www.gnu.org/licenses/lgpl.html and + ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** +-** In addition, as a special exception, Nokia gives you certain additional +-** rights. These rights are described in the Nokia Qt LGPL Exception ++** As a special exception, The Qt Company gives you certain additional ++** rights. These rights are described in The Qt Company LGPL Exception + ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + ** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU General +-** Public License version 3.0 as published by the Free Software Foundation +-** and appearing in the file LICENSE.GPL included in the packaging of this +-** file. Please review the following information to ensure the GNU General +-** Public License version 3.0 requirements will be met: +-** http://www.gnu.org/copyleft/gpl.html. +-** +-** Other Usage +-** Alternatively, this file may be used in accordance with the terms and +-** conditions contained in a signed written agreement between you and Nokia. +-** +-** +-** +-** +-** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + +- + #include "modeltest.h" + +-#include +-#include +- +-Q_DECLARE_METATYPE ( QModelIndex ) ++#include ++#include + + /*! + Connect to all of the models signals. Whenever anything happens recheck everything. +@@ -54,50 +44,52 @@ ModelTest::ModelTest ( QAbstractItemModel *_model, QObject *parent ) : QObject ( + if (!model) + qFatal("%s: model must not be null", Q_FUNC_INFO); + +- connect ( model, SIGNAL ( columnsAboutToBeInserted ( const QModelIndex &, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( columnsAboutToBeRemoved ( const QModelIndex &, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( columnsInserted ( const QModelIndex &, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( columnsRemoved ( const QModelIndex &, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( dataChanged ( const QModelIndex &, const QModelIndex & ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( headerDataChanged ( Qt::Orientation, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( layoutAboutToBeChanged () ), this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( layoutChanged () ), this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( modelReset () ), this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( rowsAboutToBeInserted ( const QModelIndex &, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( rowsAboutToBeRemoved ( const QModelIndex &, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( rowsInserted ( const QModelIndex &, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- connect ( model, SIGNAL ( rowsRemoved ( const QModelIndex &, int, int ) ), +- this, SLOT ( runAllTests() ) ); +- +- // Special checks for inserting/removing +- connect ( model, SIGNAL ( layoutAboutToBeChanged() ), +- this, SLOT ( layoutAboutToBeChanged() ) ); +- connect ( model, SIGNAL ( layoutChanged() ), +- this, SLOT ( layoutChanged() ) ); +- +- connect ( model, SIGNAL ( rowsAboutToBeInserted ( const QModelIndex &, int, int ) ), +- this, SLOT ( rowsAboutToBeInserted ( const QModelIndex &, int, int ) ) ); +- connect ( model, SIGNAL ( rowsAboutToBeRemoved ( const QModelIndex &, int, int ) ), +- this, SLOT ( rowsAboutToBeRemoved ( const QModelIndex &, int, int ) ) ); +- connect ( model, SIGNAL ( rowsInserted ( const QModelIndex &, int, int ) ), +- this, SLOT ( rowsInserted ( const QModelIndex &, int, int ) ) ); +- connect ( model, SIGNAL ( rowsRemoved ( const QModelIndex &, int, int ) ), +- this, SLOT ( rowsRemoved ( const QModelIndex &, int, int ) ) ); +- +- connect ( model, SIGNAL (rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)), +- this, SLOT (rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)) ); +- connect ( model, SIGNAL (rowsMoved(QModelIndex,int,int,QModelIndex,int)), +- this, SLOT (rowsMoved(QModelIndex,int,int,QModelIndex,int)) ); +- ++ connect(model, SIGNAL(columnsAboutToBeInserted(QModelIndex,int,int)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(columnsInserted(QModelIndex,int,int)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(columnsRemoved(QModelIndex,int,int)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(layoutAboutToBeChanged()), this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(layoutChanged()), this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(modelReset()), this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), ++ this, SLOT(runAllTests()) ); ++ connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)), ++ this, SLOT(runAllTests()) ); ++ ++ // Special checks for changes ++ connect(model, SIGNAL(layoutAboutToBeChanged()), ++ this, SLOT(layoutAboutToBeChanged()) ); ++ connect(model, SIGNAL(layoutChanged()), ++ this, SLOT(layoutChanged()) ); ++ ++ connect(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)), ++ this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int)) ); ++ connect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)), ++ this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)) ); ++ connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), ++ this, SLOT(rowsInserted(QModelIndex,int,int)) ); ++ connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)), ++ this, SLOT(rowsRemoved(QModelIndex,int,int)) ); ++ connect(model, SIGNAL (rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)), ++ this, SLOT (rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)) ); ++ connect(model, SIGNAL (rowsMoved(QModelIndex,int,int,QModelIndex,int)), ++ this, SLOT (rowsMoved(QModelIndex,int,int,QModelIndex,int)) ); ++ connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), ++ this, SLOT(dataChanged(QModelIndex,QModelIndex)) ); ++ connect(model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)), ++ this, SLOT(headerDataChanged(Qt::Orientation,int,int)) ); + + runAllTests(); + } +@@ -257,7 +249,7 @@ void ModelTest::index() + void ModelTest::parent() + { + // qDebug() << "p"; +- // Make sure the model wont crash and will return an invalid QModelIndex ++ // Make sure the model won't crash and will return an invalid QModelIndex + // when asked for the parent of an invalid index. + QVERIFY( model->parent ( QModelIndex() ) == QModelIndex() ); + +@@ -339,6 +331,8 @@ void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth ) + //qDebug() << "parent:" << model->data(parent).toString() << "rows:" << rows + // << "columns:" << columns << "parent column:" << parent.column(); + ++ const QModelIndex topLeftChild = model->index( 0, 0, parent ); ++ + QVERIFY( !model->hasIndex ( rows + 1, 0, parent ) ); + for ( int r = 0; r < rows; ++r ) { + if ( model->canFetchMore ( parent ) ) { +@@ -362,6 +356,15 @@ void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth ) + QModelIndex b = model->index ( r, c, parent ); + QVERIFY( a == b ); + ++ { ++ const QModelIndex sibling = model->sibling( r, c, topLeftChild ); ++ QVERIFY( index == sibling ); ++ } ++ { ++ const QModelIndex sibling = topLeftChild.sibling( r, c ); ++ QVERIFY( index == sibling ); ++ } ++ + // Some basic checking on the index that is returned + QVERIFY( index.model() == model ); + QCOMPARE( index.row(), r ); +@@ -445,7 +448,7 @@ void ModelTest::data() + QVariant textAlignmentVariant = model->data ( model->index ( 0, 0 ), Qt::TextAlignmentRole ); + if ( textAlignmentVariant.isValid() ) { + int alignment = textAlignmentVariant.toInt(); +- QCOMPARE( alignment, ( alignment & ( Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask ) ) ); ++ QCOMPARE( alignment, ( alignment & static_cast( Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask ) ) ); + } + + // General Purpose roles that should return a QColor +@@ -474,9 +477,9 @@ void ModelTest::data() + + \sa rowsInserted() + */ +-void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int end ) ++void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int /* end */) + { +- Q_UNUSED(end); ++// Q_UNUSED(end); + // qDebug() << "rowsAboutToBeInserted" << "start=" << start << "end=" << end << "parent=" << model->data ( parent ).toString() + // << "current count of parent=" << model->rowCount ( parent ); // << "display of last=" << model->data( model->index(start-1, 0, parent) ); + // qDebug() << model->index(start-1, 0, parent) << model->data( model->index(start-1, 0, parent) ); +@@ -565,6 +568,30 @@ void ModelTest::rowsRemoved ( const QModelIndex & parent, int start, int end ) + QVERIFY( c.next == model->data ( model->index ( start, 0, c.parent ) ) ); + } + ++void ModelTest::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) ++{ ++ QVERIFY(topLeft.isValid()); ++ QVERIFY(bottomRight.isValid()); ++ QModelIndex commonParent = bottomRight.parent(); ++ QVERIFY(topLeft.parent() == commonParent); ++ QVERIFY(topLeft.row() <= bottomRight.row()); ++ QVERIFY(topLeft.column() <= bottomRight.column()); ++ int rowCount = model->rowCount(commonParent); ++ int columnCount = model->columnCount(commonParent); ++ QVERIFY(bottomRight.row() < rowCount); ++ QVERIFY(bottomRight.column() < columnCount); ++} ++ ++void ModelTest::headerDataChanged(Qt::Orientation orientation, int start, int end) ++{ ++ QVERIFY(start >= 0); ++ QVERIFY(end >= 0); ++ QVERIFY(start <= end); ++ int itemCount = orientation == Qt::Vertical ? model->rowCount() : model->columnCount(); ++ QVERIFY(start < itemCount); ++ QVERIFY(end < itemCount); ++} ++ + void ModelTest::rowsAboutToBeMoved( const QModelIndex &srcParent, int start, int end, const QModelIndex &destParent, int destinationRow ) + { + Changing cs; +@@ -589,8 +616,8 @@ void ModelTest::rowsMoved( const QModelIndex &srcParent, int start, int end, con + QVERIFY ( cd.oldSize == model->rowCount ( destParent ) ); + + // TODO: Find out what I can assert here about last and next. +- // QVERIFY ( cd.last == model->data ( model->index ( destinationRow - 1, 0, cd.parent ) ) ); +- // QVERIFY ( cd.next == model->data ( model->index ( destinationRow + (end - start + 1), 0, cd.parent ) ) ); ++ // Q_ASSERT ( cd.last == model->data ( model->index ( destinationRow - 1, 0, cd.parent ) ) ); ++ // Q_ASSERT ( cd.next == model->data ( model->index ( destinationRow + (end - start + 1), 0, cd.parent ) ) ); + } + else { + QVERIFY ( cd.oldSize + ( end - start + 1 ) == model->rowCount ( destParent ) ); +@@ -602,12 +629,12 @@ void ModelTest::rowsMoved( const QModelIndex &srcParent, int start, int end, con + Changing cs = remove.pop(); + QVERIFY ( cs.parent == srcParent ); + if (srcParent == destParent) { +- QVERIFY ( cs.oldSize == model->rowCount ( srcParent ) ); ++ QVERIFY ( cs.oldSize == model->rowCount ( srcParent ) ); + } + else { +- QVERIFY ( cs.oldSize - ( end - start + 1 ) == model->rowCount ( srcParent ) ); ++ QVERIFY ( cs.oldSize - ( end - start + 1 ) == model->rowCount ( srcParent ) ); + +- QVERIFY ( cs.last == model->data ( model->index ( start - 1, 0, srcParent ) ) ); +- QVERIFY ( cs.next == model->data ( model->index ( start, 0, srcParent ) ) ); ++ QVERIFY ( cs.last == model->data ( model->index ( start - 1, 0, srcParent ) ) ); ++ QVERIFY ( cs.next == model->data ( model->index ( start, 0, srcParent ) ) ); + } + } +diff --git a/tests/modeltest.h b/tests/modeltest.h +index 9eb343d..3dcf18c 100644 +--- a/tests/modeltest.h ++++ b/tests/modeltest.h +@@ -1,40 +1,32 @@ + /**************************************************************************** + ** +-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +-** All rights reserved. +-** Contact: Nokia Corporation (qt-info@nokia.com) ++** Copyright (C) 2015 The Qt Company Ltd. ++** Contact: http://www.qt.io/licensing/ + ** + ** This file is part of the test suite of the Qt Toolkit. + ** +-** $QT_BEGIN_LICENSE:LGPL$ ++** $QT_BEGIN_LICENSE:LGPL21$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see http://www.qt.io/terms-conditions. For further ++** information use the contact form at http://www.qt.io/contact-us. ++** + ** GNU Lesser General Public License Usage +-** This file may be used under the terms of the GNU Lesser General Public +-** License version 2.1 as published by the Free Software Foundation and +-** appearing in the file LICENSE.LGPL included in the packaging of this +-** file. Please review the following information to ensure the GNU Lesser +-** General Public License version 2.1 requirements will be met: ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 or version 3 as published by the Free ++** Software Foundation and appearing in the file LICENSE.LGPLv21 and ++** LICENSE.LGPLv3 included in the packaging of this file. Please review the ++** following information to ensure the GNU Lesser General Public License ++** requirements will be met: https://www.gnu.org/licenses/lgpl.html and + ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** +-** In addition, as a special exception, Nokia gives you certain additional +-** rights. These rights are described in the Nokia Qt LGPL Exception ++** As a special exception, The Qt Company gives you certain additional ++** rights. These rights are described in The Qt Company LGPL Exception + ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + ** +-** GNU General Public License Usage +-** Alternatively, this file may be used under the terms of the GNU General +-** Public License version 3.0 as published by the Free Software Foundation +-** and appearing in the file LICENSE.GPL included in the packaging of this +-** file. Please review the following information to ensure the GNU General +-** Public License version 3.0 requirements will be met: +-** http://www.gnu.org/copyleft/gpl.html. +-** +-** Other Usage +-** Alternatively, this file may be used in accordance with the terms and +-** conditions contained in a signed written agreement between you and Nokia. +-** +-** +-** +-** +-** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ +@@ -43,8 +35,8 @@ + #ifndef MODELTEST_H + #define MODELTEST_H + +-#include + #include ++#include + #include + + class ModelTest : public QObject +@@ -73,7 +65,8 @@ protected Q_SLOTS: + void rowsRemoved( const QModelIndex & parent, int start, int end ); + void rowsAboutToBeMoved ( const QModelIndex &srcParent, int start, int end, const QModelIndex &destParent, int destinationRow ); + void rowsMoved ( const QModelIndex &srcParent, int start, int end, const QModelIndex &destParent, int destinationRow ); +- ++ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); ++ void headerDataChanged(Qt::Orientation orientation, int start, int end); + + private: + void checkChildren( const QModelIndex &parent, int currentDepth = 0 ); +diff --git a/tests/tests.h b/tests/tests.h +deleted file mode 100644 +index e719a0b..0000000 +--- a/tests/tests.h ++++ /dev/null +@@ -1,72 +0,0 @@ +-/* +- * Copyright (C) 2011 Felix Geyer +- * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +- * +- * This program is free software: you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation, either version 2 or (at your option) +- * version 3 of the License. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program. If not, see . +- */ +- +-#ifndef KEEPASSX_TESTS_H +-#define KEEPASSX_TESTS_H +- +-#include +- +-// backport QTEST_GUILESS_MAIN, QTRY_VERIFY and QTRY_COMPARE from Qt 5 +- +-#ifndef QTEST_GUILESS_MAIN +-#define QTEST_GUILESS_MAIN(TestObject) \ +-int main(int argc, char* argv[]) \ +-{ \ +- QCoreApplication app(argc, argv); \ +- TestObject tc; \ +- return QTest::qExec(&tc, argc, argv); \ +-} +-#endif // QTEST_GUILESS_MAIN +- +- +-#ifndef QTRY_VERIFY +-#define KEEPASSX_VERIFY_WITH_TIMEOUT(__expr, __timeout) \ +-do { \ +- const int __step = 50; \ +- const int __timeoutValue = __timeout; \ +- if (!(__expr)) { \ +- QTest::qWait(0); \ +- } \ +- for (int __i = 0; __i < __timeoutValue && !(__expr); __i+=__step) { \ +- QTest::qWait(__step); \ +- } \ +- QVERIFY(__expr); \ +-} while (0) +- +-#define QTRY_VERIFY(__expr) KEEPASSX_VERIFY_WITH_TIMEOUT(__expr, 5000) +-#endif // QTRY_VERIFY +- +- +-#ifndef QTRY_COMPARE +-#define KEEPASSX_COMPARE_WITH_TIMEOUT(__expr, __expected, __timeout) \ +-do { \ +- const int __step = 50; \ +- const int __timeoutValue = __timeout; \ +- if ((__expr) != (__expected)) { \ +- QTest::qWait(0); \ +- } \ +- for (int __i = 0; __i < __timeoutValue && ((__expr) != (__expected)); __i+=__step) { \ +- QTest::qWait(__step); \ +- } \ +- QCOMPARE(__expr, __expected); \ +-} while (0) +- +-#define QTRY_COMPARE(__expr, __expected) KEEPASSX_COMPARE_WITH_TIMEOUT(__expr, __expected, 5000) +-#endif // QTRY_COMPARE +- +-#endif // KEEPASSX_TESTS_H +diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt +index c4aa5fa..7988467 100644 +--- a/utils/CMakeLists.txt ++++ b/utils/CMakeLists.txt +@@ -18,7 +18,8 @@ include_directories(../src) + add_executable(kdbx-extract kdbx-extract.cpp) + target_link_libraries(kdbx-extract + keepassx_core +- ${QT_QTCORE_LIBRARY} +- ${QT_QTGUI_LIBRARY} ++ Qt5::Core ++ Qt5::Concurrent ++ Qt5::Widgets + ${GCRYPT_LIBRARIES} + ${ZLIB_LIBRARIES}) diff --git a/kguiaddons/PKGBUILD b/kguiaddons/PKGBUILD new file mode 100644 index 0000000..68bea06 --- /dev/null +++ b/kguiaddons/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=kguiaddons +pkgver=5.78.0 +pkgrel=2 +pkgdesc='Addons to QtGui' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-3) +depends=(qt-x11extras) +optdepends=('python-pyqt: for the Python bindings') +makedepends=(doxygen extra-cmake-modules graphviz python-pyqt qt-tools sip) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('79f59af4af45059f9b48c677df2ecf3b79a5ff9efbe3d37e46cf11194376e535e8767e5e568a7524f00998f6e83ccea00d2ccfe63140091d2d689a0a20d703aa' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D BUILD_TESTING=OFF \ + -D BUILD_QCH=ON \ + -D WITH_WAYLAND=OFF + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LicenseRef-KDE-Accepted-LGPL.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/khotkeys/PKGBUILD b/khotkeys/PKGBUILD new file mode 100644 index 0000000..20b073f --- /dev/null +++ b/khotkeys/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=khotkeys +pkgver=5.9.5 +pkgrel=1.hyperbola2 +pkgdesc='KHotKeys, with searx support' +arch=('i686' 'x86_64') +url='https://www.kde.org/workspaces/plasmadesktop/' +license=('GPL-2' 'LGPL-2.1') +depends=('plasma-workspace') +makedepends=('extra-cmake-modules' 'kdoctools' 'python' 'kdesignerplugin') +conflicts=('kdebase-workspace') +groups=(plasma) +source=("https://download.kde.org/stable/plasma/${pkgver}/$pkgname-$pkgver.tar.xz"{,.sig}) +sha512sums=('5e0fb509cbd799af6dd720e03c691c23a056e944cd26166a14c45d033312eb46d2bf78ad7ab28658f8a866dfd7b45369c05f5572a72590b75da8da04bb337f5c' + 'SKIP') +validpgpkeys=('2D1D5B0588357787DE9EE225EC94D18F7F05997E' # Jonathan Riddell + '348C8651206633FD983A8FC4DEACEA00075E1D76' # KDE Neon + 'D07BD8662C56CB291B316EB2F5675605C74E02CF') # David Edmundson + +prepare() { + mkdir -p build + cd ${pkgname}-${pkgver} + sed -i 's|http[:][/][/]google[.]com|https://searx.openpandora.org|' data/defaults.khotkeys +} + +build() { + cd build + cmake ../${pkgname}-${pkgver} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DKDE_INSTALL_LIBDIR=lib \ + -DBUILD_TESTING=OFF + make +} + +package() { + cd build + make DESTDIR="${pkgdir}" install + for i in COPYING{,.LIB}; do + install -Dm644 ../${pkgname}-${pkgver}/${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/khtml/PKGBUILD b/khtml/PKGBUILD new file mode 100644 index 0000000..ca814f7 --- /dev/null +++ b/khtml/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=khtml +pkgver=5.33.0 +pkgrel=1.hyperbola1 +pkgdesc='KHTML APIs, without Java support' +arch=('i686' 'x86_64') +url='https://community.kde.org/Frameworks' +license=('GPL-3' 'LGPL-2.1') +depends=('giflib' 'kparts' 'kjs') +makedepends=('extra-cmake-modules' 'python') +groups=('kf5-aids') +source=("https://download.kde.org/stable/frameworks/${pkgver%.*}/portingAids/${pkgname}-${pkgver}.tar.xz"{,.sig} + 'remove-java-support.patch') +sha512sums=('6d380ad8276772f8851334b593d1545453a039cd5de6b2ab2a4f76dbfa2942d4763c01781aec51a1dd5fb73646332594660efb732cab3d6149c1339f884fc443' + 'SKIP' + '55f6b2086592a038e2725e961cde5272ec3ca933d317d413d53b9261c0b0c1708da226e84862fbff61bd3301a79fd6328cf9b385c53f67b6f9b41c8cd8e4b7a5') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +prepare() { + mkdir -p build + cd ${pkgname}-${pkgver} + patch -p1 -i ../remove-java-support.patch +} + +build() { + cd build + cmake ../${pkgname}-${pkgver} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DKDE_INSTALL_LIBDIR=lib \ + -DBUILD_TESTING=OFF + make +} + +package() { + cd build + make DESTDIR="${pkgdir}" install + for i in COPYING.{GPL3,LIB}; do + install -Dm644 ../${pkgname}-${pkgver}/${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/khtml/remove-java-support.patch b/khtml/remove-java-support.patch new file mode 100644 index 0000000..74a6dd7 --- /dev/null +++ b/khtml/remove-java-support.patch @@ -0,0 +1,28 @@ +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index a99de17..78fa78f 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -453,7 +453,6 @@ include_directories( + ${CMAKE_CURRENT_SOURCE_DIR}/ecma + ${CMAKE_CURRENT_SOURCE_DIR}/imload + ${CMAKE_CURRENT_SOURCE_DIR}/imload/decoders +- ${CMAKE_CURRENT_SOURCE_DIR}/java + ${CMAKE_CURRENT_SOURCE_DIR}/svg + ${CMAKE_CURRENT_SOURCE_DIR}/svg/graphics + ${CMAKE_CURRENT_SOURCE_DIR}/platform/graphics +@@ -472,7 +471,6 @@ include_directories( + # ${CMAKE_CURRENT_BINARY_DIR}/rendering + # ${CMAKE_CURRENT_BINARY_DIR}/imload + # ${CMAKE_CURRENT_BINARY_DIR}/imload/decoders +- ${CMAKE_CURRENT_BINARY_DIR}/java + # ${CMAKE_CURRENT_BINARY_DIR}/svg + # ${CMAKE_CURRENT_BINARY_DIR}/svg/graphics + # ${CMAKE_CURRENT_BINARY_DIR}/platform/graphics +@@ -488,7 +486,6 @@ set( KDELIBSUFF ${LIB_SUFFIX} ) + configure_file(html/ksslconfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/ksslconfig.h ) + + add_subdirectory( kmultipart ) +-add_subdirectory( java ) + + add_definitions(-DENABLE_VIDEO) + diff --git a/ki18n/PKGBUILD b/ki18n/PKGBUILD new file mode 100644 index 0000000..2cbc941 --- /dev/null +++ b/ki18n/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=ki18n +pkgver=5.78.0 +pkgrel=2 +pkgdesc='Advanced internationalization framework' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-3) +depends=(qt-declarative) +optdepends=('python-pyqt: for the Python bindings' 'python: to compile .ts files') +makedepends=(doxygen extra-cmake-modules gettext-tiny graphviz python-pyqt qt-tools sip) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('0283caf2a33bdcb2196e91eec7db1ba3e56d27cfa449e431e738e5ada0a0d8d83ed5a315300858e034eb85313f5e820c296939c19fcfdeb4c4e59d19152abbbe' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LicenseRef-KDE-Accepted-LGPL.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kickshaw/PKGBUILD b/kickshaw/PKGBUILD new file mode 100644 index 0000000..38738d4 --- /dev/null +++ b/kickshaw/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=kickshaw +pkgver=1.1.58 +pkgrel=1 +pkgdesc="A menu editor for Openbox" +url='https://savannah.nongnu.org/projects/obladi' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('gtk') +source=("${pkgname}-${pkgver}.tar.bz2::https://download.savannah.gnu.org/releases/obladi/${pkgname}_${pkgver}_GTK3_source_only.tar.bz2" + "fix-build.patch") +sha512sums=('e19eeec3ab2372f2cbcf1864856c97a57bcdd5a74b1b5f4f26d3872f04e7fc26ab01d553d4c37bcd6dc2c4c330fb724bfca04a3f0dc10394727b989df47ebbd3' + '612a20aef20f2ba936973a500a376720c4cab473043cd8a8087152f98672e4f7e1ff83bcb9b4f11191c5029d6facd7ad2019e2656cbb4b279b62685c71f8757a') + +prepare() { + mv "${pkgname}_${pkgver}_GTK3_source_only" "${pkgname}-${pkgver}" + cd ${pkgname}-${pkgver} + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cd ${pkgname}-${pkgver}/source + make +} + +package() { + cd ${pkgname}-${pkgver}/source + make DESTDIR="${pkgdir}" PREFIX="${pkgdir}/usr" install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/kickshaw/fix-build.patch b/kickshaw/fix-build.patch new file mode 100644 index 0000000..a3deba5 --- /dev/null +++ b/kickshaw/fix-build.patch @@ -0,0 +1,293 @@ +--- a/source/Makefile 2024-02-22 22:44:06.000000000 +0100 ++++ b/source/Makefile 2024-03-01 13:56:57.877429926 +0100 +@@ -18,103 +18,104 @@ + rm -f .*resource*.o *.o *.bak *~ kickshaw + + install: +- mkdir -p /usr/share/locale +- cp -R resources/txts/translations/af /usr/share/locale/ +- cp -R resources/txts/translations/az /usr/share/locale/ +- cp -R resources/txts/translations/bg /usr/share/locale/ +- cp -R resources/txts/translations/bn /usr/share/locale/ +- cp -R resources/txts/translations/ca /usr/share/locale/ +- cp -R resources/txts/translations/cs /usr/share/locale/ +- cp -R resources/txts/translations/cy /usr/share/locale/ +- cp -R resources/txts/translations/da /usr/share/locale/ +- cp -R resources/txts/translations/de /usr/share/locale/ +- cp -R resources/txts/translations/el /usr/share/locale/ +- cp -R resources/txts/translations/es /usr/share/locale/ +- cp -R resources/txts/translations/et /usr/share/locale/ +- cp -R resources/txts/translations/eu /usr/share/locale/ +- cp -R resources/txts/translations/fi /usr/share/locale/ +- cp -R resources/txts/translations/fo /usr/share/locale/ +- cp -R resources/txts/translations/fr /usr/share/locale/ +- cp -R resources/txts/translations/fy /usr/share/locale/ +- cp -R resources/txts/translations/gl /usr/share/locale/ +- cp -R resources/txts/translations/hi /usr/share/locale/ +- cp -R resources/txts/translations/hr /usr/share/locale/ +- cp -R resources/txts/translations/hu /usr/share/locale/ +- cp -R resources/txts/translations/hy /usr/share/locale/ +- cp -R resources/txts/translations/id /usr/share/locale/ +- cp -R resources/txts/translations/is /usr/share/locale/ +- cp -R resources/txts/translations/it /usr/share/locale/ +- cp -R resources/txts/translations/ja /usr/share/locale/ +- cp -R resources/txts/translations/ka /usr/share/locale/ +- cp -R resources/txts/translations/ko /usr/share/locale/ +- cp -R resources/txts/translations/lt /usr/share/locale/ +- cp -R resources/txts/translations/lv /usr/share/locale/ +- cp -R resources/txts/translations/mt /usr/share/locale/ +- cp -R resources/txts/translations/nb /usr/share/locale/ +- cp -R resources/txts/translations/nl /usr/share/locale/ +- cp -R resources/txts/translations/pl /usr/share/locale/ +- cp -R resources/txts/translations/pt /usr/share/locale/ +- cp -R resources/txts/translations/ro /usr/share/locale/ +- cp -R resources/txts/translations/ru /usr/share/locale/ +- cp -R resources/txts/translations/sk /usr/share/locale/ +- cp -R resources/txts/translations/sl /usr/share/locale/ +- cp -R resources/txts/translations/sq /usr/share/locale/ +- cp -R resources/txts/translations/sv /usr/share/locale/ +- cp -R resources/txts/translations/th /usr/share/locale/ +- cp -R resources/txts/translations/tr /usr/share/locale/ +- cp -R resources/txts/translations/vi /usr/share/locale/ +- cp -R resources/txts/translations/zh_CN /usr/share/locale/ +- cp -R resources/txts/translations/zh_HK /usr/share/locale/ +- cp -R resources/txts/translations/zh_TW /usr/share/locale/ +- cp kickshaw $(PREFIX)/bin ++ mkdir -p ${PREFIX}/bin ++ mkdir -p ${PREFIX}/share/locale ++ cp -R resources/txts/translations/af ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/az ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/bg ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/bn ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/ca ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/cs ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/cy ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/da ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/de ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/el ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/es ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/et ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/eu ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/fi ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/fo ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/fr ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/fy ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/gl ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/hi ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/hr ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/hu ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/hy ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/id ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/is ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/it ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/ja ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/ka ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/ko ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/lt ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/lv ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/mt ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/nb ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/nl ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/pl ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/pt ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/ro ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/ru ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/sk ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/sl ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/sq ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/sv ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/th ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/tr ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/vi ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/zh_CN ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/zh_HK ${PREFIX}/share/locale/ ++ cp -R resources/txts/translations/zh_TW ${PREFIX}/share/locale/ ++ cp kickshaw $(PREFIX)/bin/ + + uninstall: + rm $(PREFIX)/bin/kickshaw +- rm /usr/share/locale/af/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/az/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/bg/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/bn/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/ca/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/cs/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/cy/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/da/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/de/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/el/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/es/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/et/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/eu/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/fi/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/fo/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/fr/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/fy/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/gl/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/hi/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/hr/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/hu/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/hy/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/id/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/is/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/it/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/ja/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/ka/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/ko/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/lt/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/lv/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/mt/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/nb/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/nl/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/pl/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/pt/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/ro/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/ru/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/sk/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/sl/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/sq/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/sv/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/th/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/tr/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/vi/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/zh_CN/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/zh_HK/LC_MESSAGES/kickshaw.mo +- rm /usr/share/locale/zh_TW/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/af/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/az/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/bg/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/bn/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/ca/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/cs/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/cy/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/da/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/de/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/el/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/es/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/et/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/eu/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/fi/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/fo/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/fr/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/fy/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/gl/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/hi/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/hr/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/hu/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/hy/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/id/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/is/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/it/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/ja/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/ka/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/ko/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/lt/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/lv/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/mt/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/nb/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/nl/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/pl/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/pt/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/ro/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/ru/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/sk/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/sl/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/sq/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/sv/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/th/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/tr/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/vi/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/zh_CN/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/zh_HK/LC_MESSAGES/kickshaw.mo ++ rm ${PREFIX}/share/locale/zh_TW/LC_MESSAGES/kickshaw.mo + @echo "For every user who has started Kickshaw a settings file .kickshawrc was created inside the respective home directory. It is not removed automatically, so it has to be removed manually." +--- a/source/kickshaw.c 2024-02-22 22:44:06.000000000 +0100 ++++ b/source/kickshaw.c 2024-03-01 14:02:21.874904052 +0100 +@@ -2547,78 +2547,6 @@ + + void get_latest_version_str_from_server_callback (GObject *source_object, GAsyncResult *result, G_GNUC_UNUSED gpointer user_data) + { +- g_autoptr(GError) error = NULL; +- +- g_socket_client_connect_to_uri_finish (G_SOCKET_CLIENT (source_object), result, &error); +- +- if (!error) { +- g_autoptr(GFile) latest = g_file_new_for_uri ("http://download.savannah.gnu.org/releases/obladi/latest"); +- g_autofree gchar *latest_local_str = g_strdup_printf ("%s/latest", ks.tmp_path); +- g_autoptr(GFile) latest_local = g_file_new_for_path (latest_local_str); +- +- g_autoptr(GError) error = NULL; +- +- if (G_LIKELY (g_file_copy (latest, latest_local, G_FILE_COPY_ALL_METADATA, NULL, NULL, NULL, &error))) { +- g_autoptr(GFileInputStream) latest_local_input_stream = NULL; +- +- if (G_LIKELY ((latest_local_input_stream = g_file_read (latest_local, NULL, &error)))) { +- g_autoptr(GDataInputStream) latest_local_data_input_stream = g_data_input_stream_new (G_INPUT_STREAM (latest_local_input_stream)); +- g_autofree gchar *latest_local_check_version; +- +- if (G_UNLIKELY (!(latest_local_check_version = g_data_input_stream_read_line (latest_local_data_input_stream, +- NULL, NULL, &error)))) { +- g_autofree gchar *err_msg = g_strdup_printf (_("Could not obtain the version from the version check file " +- "latest located inside the tmp folder " +- "%s !\n" +- "Error: %s"), ks.tmp_path, error->message); +- +- show_errmsg (err_msg); +- } +- +- if (G_UNLIKELY (!(g_file_delete (latest_local, NULL, &error)))) { +- g_autofree gchar *err_msg = g_strdup_printf (_("Could not remove version check file latest " +- "from tmp folder %s !"), ks.tmp_path); +- +- show_errmsg (err_msg); +- } +- +-#if __GLIBC__ +- if (strverscmp (latest_local_check_version, KICKSHAW_VERSION) > 0) { +-#else +- if (strverscmp_nonglibc (latest_local_check_version, KICKSHAW_VERSION) > 0) { +-#endif +- FREE_AND_REASSIGN (ks.version_info, g_strdup_printf (_("%s\nNewer version %s is available."), KICKSHAW_VERSION, latest_local_check_version)); +- } +- else { +- FREE_AND_REASSIGN (ks.version_info, g_strdup_printf (_("%s\nThis is the latest version."), KICKSHAW_VERSION)); +- } +- } +- else { +- g_autofree gchar *err_msg = g_strdup_printf (_("Could not open version check file " +- "latest inside %s !\n" +- "Error: %s"), ks.tmp_path, error->message); +- +- show_errmsg (err_msg); +- } +- } +- /* +- Ignore if the version check file hasn't been found. +- The file might have been renamed on the server or the whole version check functionality have been rewritten +- in the meantime. In this case, the version check is likely to work again with a newer version of Kickshaw. +- */ +- else if (!(g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))) { +- g_autofree gchar *err_msg = g_strdup_printf (_("Could not copy version check file " +- "latest to %s !\n" +- "Error: %s"), ks.tmp_path, error->message); +- +- show_errmsg (err_msg); +- } +- } +- else { // No internet connection or download server is down +- FREE_AND_REASSIGN (ks.version_info, g_strdup_printf ("%s\n%s", KICKSHAW_VERSION, _("Check for newer version requires internet connection."))); +- } +- +- ks.stopped_trying_to_connect_to_server = TRUE; + } + + /* +@@ -2633,8 +2561,6 @@ + + ks.version_info = g_strdup (KICKSHAW_VERSION); + +- g_socket_client_connect_to_uri_async (socket_client, "http://download.savannah.gnu.org", 80, NULL, (GAsyncReadyCallback) get_latest_version_str_from_server_callback, NULL); +- + g_autoptr(GResource) resources = resources_get_resource (); + + g_resources_register (resources); diff --git a/kitemmodels/PKGBUILD b/kitemmodels/PKGBUILD new file mode 100644 index 0000000..86f38a1 --- /dev/null +++ b/kitemmodels/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=kitemmodels +pkgver=5.78.0 +pkgrel=2 +pkgdesc='Models for Qt Model/View system' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-2.1) +depends=(qt-base) +optdepends=('python-pyqt: for the Python bindings' 'qt-declarative: QML bindings') +makedepends=(doxygen extra-cmake-modules graphviz python-pyqt qt-declarative qt-tools sip) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('135fc0019f5b0eafaca482d589eb84bc3e38636fbc7f552a9a98bad4e06dc87c32da236379800e8c804b9cb8964b37b3cefeaf752c34b15550df87bcdb663742' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LGPL-2.1-or-later.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kitemviews/PKGBUILD b/kitemviews/PKGBUILD new file mode 100644 index 0000000..8db16a9 --- /dev/null +++ b/kitemviews/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=kitemviews +pkgver=5.78.0 +pkgrel=2 +pkgdesc='Widget addons for Qt Model/View' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-2) +depends=(qt-base) +optdepends=('python-pyqt: for the Python bindings') +makedepends=(doxygen extra-cmake-modules graphviz python-pyqt qt-tools sip) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('afa5773e8e69e44dda0aa355335037aff41bd3100dface8db6b97418a20abcd2b384f34717dd68af91bafe95d3c6965288e1273312c78db539439e07496ac7c2' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LGPL-2.0-or-later.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kobodeluxe/PKGBUILD b/kobodeluxe/PKGBUILD new file mode 100644 index 0000000..eddc275 --- /dev/null +++ b/kobodeluxe/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgname=kobodeluxe +pkgver=0.5.1 +_debver=0.5.1 +_debrel=10 +pkgrel=1 +pkgdesc="An enhanced version of Akira Higuchi's game XKobo, an addictive space shoot'em up" +arch=('i686' 'x86_64') +url="http://www.olofson.net/kobodl/" +license=('GPL-2' 'LGPL-2.1') +depends=('sdl_image' 'hicolor-icon-theme') +makedepends=('quilt') +groups=('games') +install=kobodeluxe.install +source=(https://deb.debian.org/debian/pool/main/k/kobodeluxe/kobodeluxe_${pkgver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/k/kobodeluxe/kobodeluxe_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('01bd3ed84fa9d1a63a748a2e8cade9e0574bf73e289fa438711d7747d99d8dd29283be23ff18da9a6e5115b8e89ee6e4d283ccc97728eddcff5d70ced2f9fb52' + '11c166464d547cd0d65d9e41c4a83e9538e5d08b6448909b89d7047e06b21050ecde711e02c22dea00cc237ce43be4340ee2829b215ae61a4b55d7d1f83e0323') + +prepare() { + cd KoboDeluxe-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + tar -xf icons.tar.gz +} + +build() { + cd KoboDeluxe-${pkgver} + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games \ + --localstatedir=/var \ + --sharedstatedir=/var/games + make +} + +package() { + cd KoboDeluxe-${pkgver} + make DESTDIR="${pkgdir}" install + + install -D -m644 icons/KDE/kobo-deluxe.desktop "${pkgdir}/usr/share/applications/kobo-deluxe.desktop" + for i in 16 22 32 48 64 128 ; do + install -D -m644 icons/KDE/icons/${i}x${i}/kobodl.png "${pkgdir}/usr/share/icons/hicolor/${i}x${i}/apps/kobodl.png" + done + + chown root:games "${pkgdir}/usr/games/kobodl" + chmod 2755 "${pkgdir}/usr/games/kobodl" + chown root:games "${pkgdir}/usr/share/games/kobo-deluxe" + chmod 2755 "${pkgdir}/usr/share/games/kobo-deluxe" + chown root:games "${pkgdir}/var/games" + chmod 775 "${pkgdir}/var/games" + chown root:games "${pkgdir}/var/games/kobo-deluxe" + chmod 775 "${pkgdir}/var/games/kobo-deluxe" + chown root:games "${pkgdir}/var/games/kobo-deluxe/scores" + chmod 775 "${pkgdir}/var/games/kobo-deluxe/scores" + + install -Dm644 {COPYING,COPYING.LIB} -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/kobodeluxe/kobodeluxe.install b/kobodeluxe/kobodeluxe.install new file mode 100644 index 0000000..d718b73 --- /dev/null +++ b/kobodeluxe/kobodeluxe.install @@ -0,0 +1,16 @@ +post_install() { + post_upgrade +} + +post_upgrade() { + if [ -d usr/share/games/kobo-deluxe/kobo-deluxe/scores ] ; then + mkdir -p var/games/kobo-deluxe/scores/ + for i in usr/share/games/kobo-deluxe/kobo-deluxe/scores/* ; do + mv $i var/games/kobo-deluxe/scores/ + done + rmdir usr/share/games/kobo-deluxe/kobo-deluxe/scores + rmdir usr/share/games/kobo-deluxe/kobo-deluxe + chgrp -R games var/games/kobo-deluxe/scores/ + fi +} + diff --git a/krita-legacy/PKGBUILD b/krita-legacy/PKGBUILD new file mode 100644 index 0000000..18e8c71 --- /dev/null +++ b/krita-legacy/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +_realpkgname=krita +pkgname=$_realpkgname-legacy +pkgver=4.4.2 +pkgrel=1 +pkgdesc="Raster graphics editor and 2D animations (legacy version)" +arch=('i686' 'x86_64') +url='https://krita.org' +license=('GPL-3') +depends=('boost-libs' 'desktop-file-utils' 'eigen' 'exiv2' 'fftw' 'giflib' 'gsl' 'hicolor-icon-theme' + 'kcompletion' 'kcrash' 'kseexpr' 'kguiaddons' 'kitemmodels' 'kitemviews' 'libraw' + 'poppler-qt' 'python-pyqt' 'qt-multimedia' 'qt-svg' 'quazip') +makedepends=('boost' 'extra-cmake-modules' 'gettext-tiny' 'python-setuptools' 'sip' 'vc') +optdepends=('ffmpeg: to save animations' + 'qt-imageformats: to support some image formats') +source=("https://download.kde.org/Attic/${_realpkgname}/${pkgver}/${_realpkgname}-${pkgver}.tar.gz") +sha512sums=('62fe7d719d119099a10277e03b2cf48cefebe30daa664867dad989b812e58959abf34169b06aa5b8e9430aa92378b847f42ecfc38e0f8f20b3d8060f983eaac2') + +build() { + cmake -B build -S $_realpkgname-$pkgver \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTING=OFF \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + # Hotfix Krita 4.X in Qt5-Base 5.15.X QPalette::QPalette C++ Method error. + # https://sourceforge.net/p/qt5ct/tickets/77/ + install -dm 755 $pkgdir/usr/libexec + mv $pkgdir/usr/bin/$_realpkgname $pkgdir/usr/libexec + printf '%s\n%s %s\n' \ + '#!/bin/sh' \ + 'QT_QPA_PLATFORMTHEME=qt5ct' \ + "/usr/libexec/$_realpkgname" \ + > $pkgdir/usr/bin/$_realpkgname + chmod 0755 $pkgdir/usr/bin/$_realpkgname + + install -Dm644 $_realpkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kseexpr/PKGBUILD b/kseexpr/PKGBUILD new file mode 100644 index 0000000..6406919 --- /dev/null +++ b/kseexpr/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=kseexpr +pkgver=4.0.3.0 +pkgrel=1 +pkgdesc='An embeddable expression evaluation engine (Krita fork)' +arch=(i686 x86_64) +url='https://krita.org' +license=(GPL-3) +depends=(ki18n) +makedepends=(doxygen extra-cmake-modules gettext-tiny graphviz qt-tools) +replaces=(seexpr-krita) +source=(https://download.kde.org/stable/kseexpr/${pkgver%.*}/$pkgname-$pkgver.tar.gz) +sha512sums=('51ea726c764f1b6cb2ba24b51f0c2e99fd0714ac051cf9e662d3f92cdf0473e488a70816a05ac219c10501d167fe15ed0c7d0d48567c7816c8f4f21d6382a639') + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_DEMOS=OFF \ + -DBUILD_TESTS=OFF + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSE.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kwidgetsaddons/PKGBUILD b/kwidgetsaddons/PKGBUILD new file mode 100644 index 0000000..1ac00a9 --- /dev/null +++ b/kwidgetsaddons/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=kwidgetsaddons +pkgver=5.78.0 +pkgrel=2 +pkgdesc='Addons to QtWidgets' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-3) +depends=(qt-base) +optdepends=('python-pyqt: for the Python bindings') +makedepends=(doxygen extra-cmake-modules graphviz python-pyqt qt-tools sip) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('73919fba9cb0dd61a42adfe51991d4ee6fd7d872b9cf74cada484c156e38ed24281269bab773a0a87675e0ff7318cdb86485eaf1c334bb544f615c61f12d0cfa' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LicenseRef-KDE-Accepted-LGPL.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kwindowsystem/PKGBUILD b/kwindowsystem/PKGBUILD new file mode 100644 index 0000000..8cc588f --- /dev/null +++ b/kwindowsystem/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=kwindowsystem +pkgver=5.78.0 +pkgrel=1 +pkgdesc='Access to the windowing system' +arch=(i686 x86_64) +url='https://community.kde.org/Frameworks' +license=(LGPL-3) +depends=(qt-x11extras) +makedepends=(doxygen extra-cmake-modules graphviz qt-tools) +groups=(kf5) +source=(https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz{,.sig}) +sha512sums=('440294c1d9236009be1a27827457699eb75f154dc4cca723eff1c0b76c8a30ee8d3a2b89ace76aa3220e40e3547d4410919b338c287d9010a8ff1326ec503fc6' + 'SKIP') +validpgpkeys=(53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB) # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSES/LicenseRef-KDE-Accepted-LGPL.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/kyotocabinet/PKGBUILD b/kyotocabinet/PKGBUILD new file mode 100644 index 0000000..36c1bf7 --- /dev/null +++ b/kyotocabinet/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=kyotocabinet +pkgver=1.2.76 +_debver=$pkgver +_debrel=4.2 +pkgrel=1 +pkgdesc="A modern implementation of DBM in C++" +arch=('i686' 'x86_64') +url='http://fallabs.com/kyotocabinet/' +license=('LGPL-3') +depends=('zlib' 'lzo' 'xz' 'gcc-libs') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/k/kyotocabinet/kyotocabinet_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/k/kyotocabinet/kyotocabinet_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('278db7b327eb4c21bf0137d9aa14fb67d74d5ce7ed1cb29fc9120d157a60de165ec0cf842903eb7952e8f998045ae585b958977fa973ba0e0773381de71d9f6a' + '1351b38d6e65b6825043d72f9c23dde086d3a0b391753390234eeb6e9b061181805494d8da2e97cd818c1e70f4a86ea5f72f3854dc4778ef24aef2d535405943') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/kfreebsd-support-getsysinfo-on-GNU-kFreeBSD.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-zlib \ + --enable-lzo \ + --enable-lzma \ + --disable-opt + make +} + +package() { + cd $pkgname-$pkgver + make install DESTDIR="$pkgdir/" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/l-smash/PKGBUILD b/l-smash/PKGBUILD new file mode 100644 index 0000000..1238c03 --- /dev/null +++ b/l-smash/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=l-smash +pkgver=2.14.5 +pkgrel=1 +pkgdesc='MP4 muxer and other tools' +arch=('i686' 'x86_64') +url='https://github.com/l-smash/l-smash' +license=('ISC') +depends=('glibc') +source=("l-smash-${pkgver}.tar.gz::https://github.com/l-smash/l-smash/archive/v${pkgver}.tar.gz") +sha512sums=('1dc38cd89d7b317b608d5f5f411ffeac3c1e7fdeea2fc2d7c09d209dce90756c51c27198c20199082fc2168f966a604cef3f9cfd2fd17086ae0f9c0bf50f1ec7') + +build() { + cd l-smash-${pkgver} + + ./configure \ + --prefix='/usr' \ + --enable-shared \ + --disable-static \ + --extra-cflags="$CFLAGS" \ + --extra-ldflags="$LDFLAGS" + make +} + +package() { + cd l-smash-${pkgver} + + make DESTDIR="${pkgdir}" install + + install -Dm644 LICENSE "${pkgdir}"/usr/share/licenses/l-smash/LICENSE +} + +# vim: ts=2 sw=2 et: diff --git a/l3afpad/PKGBUILD b/l3afpad/PKGBUILD new file mode 100644 index 0000000..09b533a --- /dev/null +++ b/l3afpad/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=l3afpad +pkgver=0.8.18.1.11 +pkgrel=1 +pkgdesc='Simple plain text editor for GTK+ 3' +arch=('i686' 'x86_64') +url='https://github.com/stevenhoneyman/l3afpad' +license=('GPL-2') +depends=('gtk') +makedepends=('intltool' 'gettext-tiny') +source=($pkgname-$pkgver.tar.gz::https://github.com/stevenhoneyman/l3afpad/archive/v$pkgver.tar.gz + l3afpad.appdata.xml) +sha512sums=('f77494afc81d4c8586a976318d77d194eedf8414fc896cc9e2593de00dd3bb8c157f199a44908147b467f04b7a76c2c20aa67c64567685a77421ba0c2bff4643' + '06c8518f897f6d7f2f1c6ac1b10a83a5db862bf287e3bf1f97b7022b0107582fc29eefc8a04e64a7c37f4534dbff4e12da4fa4a9a1b67897bf4eb3779793b1f9') + +prepare() { + cd $pkgname-$pkgver + sed -i 's|gtk_window_set_icon_from_file(GTK_WINDOW(mw->window), ICONDIR"/l3afpad.png", NULL);|gtk_window_set_icon_name(GTK_WINDOW(mw->window), "l3afpad");|' src/window.c + ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 ../$pkgname.appdata.xml "$pkgdir/usr/share/metainfo/$pkgname.appdata.xml" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + rm -r "$pkgdir/usr/share/pixmaps/" +} diff --git a/l3afpad/l3afpad.appdata.xml b/l3afpad/l3afpad.appdata.xml new file mode 100644 index 0000000..20bad68 --- /dev/null +++ b/l3afpad/l3afpad.appdata.xml @@ -0,0 +1,24 @@ + + + com.github.l3afpad + l3afpad.desktop + L3afpad + Simple text editor + CC0-1.0 + GPL-2.0 + +

+ L3afpad is a simple GTK+ text editor that emphasizes simplicity. As development + focuses on keeping weight down to a minimum, only the most essential features + are implemented in the editor. L3afpad is simple to use, is easily compiled, + requires few libraries, and starts up quickly. +

+
+ + + https://cn.opendesktop.org/img/hive/content-pre1/144892-1.png + + + https://github.com/stevenhoneyman/l3afpad/issues + https://github.com/stevenhoneyman/l3afpad +
diff --git a/lablgtk2/PKGBUILD b/lablgtk2/PKGBUILD new file mode 100644 index 0000000..0b6c563 --- /dev/null +++ b/lablgtk2/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=lablgtk2 +pkgver=2.18.11 +pkgrel=1 +pkgdesc='An Objective Caml interface to gtk2' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url='http://lablgtk.forge.ocamlcore.org/' +depends=('gtk2' 'librsvg-legacy') +makedepends=('ocaml-compiler-libs' 'camlp5') +optdepends=('ocaml: for using the tools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/garrigue/lablgtk/archive/${pkgver}.tar.gz") +sha512sums=('adc840df68aa5f9541db44f888f344b313e40c7d8f5cd35f2a45f1bc84e7136dde4b39f873de011db5d5fdfd904c0a097cd9d105458ea9f483cdab3954a2ee05') +options=(!makeflags staticlibs) + +build() { + cd "${srcdir}/lablgtk-${pkgver}" + ./configure --prefix=/usr \ + --without-gnomeui \ + --without-gnomecanvas \ + --without-panel \ + --without-gtkspell \ + --without-gtksourceview \ + --without-gtksourceview2 \ + --without-glade + sed -e "s|-O|$CFLAGS|" \ + -e "s|-shared|& -ccopt \"$LDFLAGS\"|" \ + -e "s|(CAMLMKLIB)|& -ldopt \"$LDFLAGS\"|" \ + -i src/Makefile + make world + make opt +} + +package() { + cd "${srcdir}/lablgtk-${pkgver}" + make DESTDIR="${pkgdir}" old-install + install -m644 META "${pkgdir}/usr/lib/ocaml/lablgtk2/" + install -Dm644 LGPL -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ladspa/PKGBUILD b/ladspa/PKGBUILD new file mode 100644 index 0000000..7dcc86f --- /dev/null +++ b/ladspa/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=ladspa +pkgver=1.15 +_debver=1.15 +_debrel=2 +pkgrel=1 +pkgdesc="Sample tools for audio developer's simple plugin architecture" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url="https://www.ladspa.org/" +depends=('gcc-libs') +makedepends=('quilt') +source=("https://ladspa.org/download/ladspa_sdk_${pkgver}.tgz" + "https://deb.debian.org/debian/pool/main/l/ladspa-sdk/ladspa-sdk_$_debver-$_debrel.debian.tar.xz" + 'fix-memleak-in-plugin-scanning.patch') +sha512sums=('a521622e23d988284244003e4ccfc3b42f6ddc7944cb00e7949b87e09d7f39a0cbb64b6d8b5a5af0a5ccf7179f88815416a88f02d3912957167e54b74accfc65' + '686bef2ccfcbb4d83835150b26ae3090a1f898ac1e8ab2d75786e6f842803028508d861c522590a3c1743b2b9abceaa8331b7d301e4efc96d315aa4016f7abf3' + 'e80a575e6afe42f9d0ac1234a7832a29fb9362c7ab7b2d6b14cc3e6da6a9ba67af886cf09f1c0b78c161205084f705049fb4dc22fe2795efaeb7d94da90dc93e') + +prepare() { + mv -v ${pkgname}_sdk_${pkgver} ${pkgname}-${pkgver} + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/Allow-passing-FLAGS-to-make.patch + + quilt push -av + fi + patch -Np0 -i "../fix-memleak-in-plugin-scanning.patch" + # add LDFLAGS for full RELRO + sed -e "s#-O2#${CFLAGS} ${LDFLAGS}#" -i src/Makefile +} + +build() { + cd "${pkgname}-${pkgver}/src" + make targets +} + +package() { + cd "${pkgname}-${pkgver}/src" + make INSTALL_PLUGINS_DIR="${pkgdir}/usr/lib/ladspa/" \ + INSTALL_INCLUDE_DIR="${pkgdir}/usr/include/" \ + INSTALL_BINARY_DIR="${pkgdir}/usr/bin/" install + install -vDm 644 ../doc/*.{html,txt} -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 ../doc/COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + diff --git a/ladspa/fix-memleak-in-plugin-scanning.patch b/ladspa/fix-memleak-in-plugin-scanning.patch new file mode 100644 index 0000000..76cb2e8 --- /dev/null +++ b/ladspa/fix-memleak-in-plugin-scanning.patch @@ -0,0 +1,11 @@ +--- src/search.c.orig 2008-11-07 00:38:18.000000000 +0100 ++++ src/search.c 2008-11-07 00:50:51.000000000 +0100 +@@ -83,6 +83,8 @@ + dlclose(pcFilename); + free(pcFilename); + } ++ } else { ++ free(pcFilename); + } + } + } diff --git a/lame/PKGBUILD b/lame/PKGBUILD new file mode 100644 index 0000000..a62f1ce --- /dev/null +++ b/lame/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=lame +pkgver=3.100 +_debver=3.100 +_debrel=3 +pkgrel=1 +pkgdesc='A high quality MPEG Audio Layer III (MP3) encoder' +arch=('i686' 'x86_64') +url='http://lame.sourceforge.net/' +depends=('ncurses') +makedepends=('nasm' 'quilt') +license=('LGPL-2') +source=("https://downloads.sourceforge.net/lame/lame-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/l/lame/lame_$_debver-$_debrel.debian.tar.xz") +sha512sums=('0844b9eadb4aacf8000444621451277de365041cc1d97b7f7a589da0b7a23899310afd4e4d81114b9912aa97832621d20588034715573d417b2923948c08634b' + 'f7beaf4a2da51e6f5940c26986621a57094236c62c12df1d36d6ef08a6c129276f253bec50a5bbfb176de87466a3615ffdebf79c507a57dd598ad9978fd8784d') + +prepare() { + cd lame-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches debian + + # Doesn't apply and seems unimportant + rm -v debian/patches/msse.patch || true + + quilt push -av + fi +} + +build() { + cd lame-${pkgver} + + ./configure \ + --prefix='/usr' \ + --enable-nasm \ + --enable-shared + make +} + +package() { + cd lame-${pkgver} + + make DESTDIR="${pkgdir}" install + + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} +# vim: ts=2 sw=2 et: diff --git a/laminar/Chart.min.js b/laminar/Chart.min.js new file mode 100644 index 0000000..dbf22c4 --- /dev/null +++ b/laminar/Chart.min.js @@ -0,0 +1,10 @@ +/*! + * Chart.js + * http://chartjs.org/ + * Version: 2.7.2 + * + * Copyright 2018 Chart.js Contributors + * Released under the MIT license + * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md + */ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Chart=t()}}(function(){return function t(e,i,n){function a(r,s){if(!i[r]){if(!e[r]){var l="function"==typeof require&&require;if(!s&&l)return l(r,!0);if(o)return o(r,!0);var u=new Error("Cannot find module '"+r+"'");throw u.code="MODULE_NOT_FOUND",u}var d=i[r]={exports:{}};e[r][0].call(d.exports,function(t){var i=e[r][1][t];return a(i||t)},d,d.exports,t,e,i,n)}return i[r].exports}for(var o="function"==typeof require&&require,r=0;ri?(e+.05)/(i+.05):(i+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,i=(e[0]+t)%360;return e[0]=i<0?360+i:i,this.setValues("hsl",e),this},mix:function(t,e){var i=this,n=t,a=void 0===e?.5:e,o=2*a-1,r=i.alpha()-n.alpha(),s=((o*r==-1?o:(o+r)/(1+o*r))+1)/2,l=1-s;return this.rgb(s*i.red()+l*n.red(),s*i.green()+l*n.green(),s*i.blue()+l*n.blue()).alpha(i.alpha()*a+n.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,i=new o,n=this.values,a=i.values;for(var r in n)n.hasOwnProperty(r)&&(t=n[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return i}},o.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},o.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},o.prototype.getValues=function(t){for(var e=this.values,i={},n=0;n.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)+.1805*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)),100*(.2126*e+.7152*i+.0722*n),100*(.0193*e+.1192*i+.9505*n)]}function d(t){var e=u(t),i=e[0],n=e[1],a=e[2];return n/=100,a/=108.883,i=(i/=95.047)>.008856?Math.pow(i,1/3):7.787*i+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(i-n),200*(n-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]}function c(t){var e,i,n,a,o,r=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return[o=255*l,o,o];e=2*l-(i=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(n=r+1/3*-(u-1))<0&&n++,n>1&&n--,o=6*n<1?e+6*(i-e)*n:2*n<1?i:3*n<2?e+(i-e)*(2/3-n)*6:e,a[u]=255*o;return a}function h(t){var e=t[0]/60,i=t[1]/100,n=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),r=255*n*(1-i),s=255*n*(1-i*o),l=255*n*(1-i*(1-o));n*=255;switch(a){case 0:return[n,l,r];case 1:return[s,n,r];case 2:return[r,n,l];case 3:return[r,s,n];case 4:return[l,r,n];case 5:return[n,r,s]}}function f(t){var e,i,n,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,u=s+l;switch(u>1&&(s/=u,l/=u),n=6*o-(e=Math.floor(6*o)),0!=(1&e)&&(n=1-n),a=s+n*((i=1-l)-s),e){default:case 6:case 0:r=i,g=a,b=s;break;case 1:r=a,g=i,b=s;break;case 2:r=s,g=i,b=a;break;case 3:r=s,g=a,b=i;break;case 4:r=a,g=s,b=i;break;case 5:r=i,g=s,b=a}return[255*r,255*g,255*b]}function p(t){var e=t[0]/100,i=t[1]/100,n=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]}function m(t){var e,i,n,a=t[0]/100,o=t[1]/100,r=t[2]/100;return i=-.9689*a+1.8758*o+.0415*r,n=.0557*a+-.204*o+1.057*r,e=(e=3.2406*a+-1.5372*o+-.4986*r)>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(i=Math.min(Math.max(0,i),1)),255*(n=Math.min(Math.max(0,n),1))]}function v(t){var e=t[0],i=t[1],n=t[2];return i/=100,n/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(e-i),200*(i-(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116))]}function x(t){var e,i,n,a,o=t[0],r=t[1],s=t[2];return o<=8?a=(i=100*o/903.3)/100*7.787+16/116:(i=100*Math.pow((o+16)/116,3),a=Math.pow(i/100,1/3)),[e=e/95.047<=.008856?e=95.047*(r/500+a-16/116)/7.787:95.047*Math.pow(r/500+a,3),i,n=n/108.883<=.008859?n=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3)]}function y(t){var e,i=t[0],n=t[1],a=t[2];return(e=360*Math.atan2(a,n)/2/Math.PI)<0&&(e+=360),[i,Math.sqrt(n*n+a*a),e]}function k(t){return m(x(t))}function M(t){var e,i=t[0],n=t[1];return e=t[2]/360*2*Math.PI,[i,n*Math.cos(e),n*Math.sin(e)]}function w(t){return S[t]}e.exports={rgb2hsl:n,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:s,rgb2keyword:l,rgb2xyz:u,rgb2lab:d,rgb2lch:function(t){return y(d(t))},hsl2rgb:c,hsl2hsv:function(t){var e=t[0],i=t[1]/100,n=t[2]/100;if(0===n)return[0,0,0];return[e,100*(2*(i*=(n*=2)<=1?n:2-n)/(n+i)),100*((n+i)/2)]},hsl2hwb:function(t){return o(c(t))},hsl2cmyk:function(t){return s(c(t))},hsl2keyword:function(t){return l(c(t))},hsv2rgb:h,hsv2hsl:function(t){var e,i,n=t[0],a=t[1]/100,o=t[2]/100;return e=a*o,[n,100*(e=(e/=(i=(2-a)*o)<=1?i:2-i)||0),100*(i/=2)]},hsv2hwb:function(t){return o(h(t))},hsv2cmyk:function(t){return s(h(t))},hsv2keyword:function(t){return l(h(t))},hwb2rgb:f,hwb2hsl:function(t){return n(f(t))},hwb2hsv:function(t){return a(f(t))},hwb2cmyk:function(t){return s(f(t))},hwb2keyword:function(t){return l(f(t))},cmyk2rgb:p,cmyk2hsl:function(t){return n(p(t))},cmyk2hsv:function(t){return a(p(t))},cmyk2hwb:function(t){return o(p(t))},cmyk2keyword:function(t){return l(p(t))},keyword2rgb:w,keyword2hsl:function(t){return n(w(t))},keyword2hsv:function(t){return a(w(t))},keyword2hwb:function(t){return o(w(t))},keyword2cmyk:function(t){return s(w(t))},keyword2lab:function(t){return d(w(t))},keyword2xyz:function(t){return u(w(t))},xyz2rgb:m,xyz2lab:v,xyz2lch:function(t){return y(v(t))},lab2xyz:x,lab2rgb:k,lab2lch:y,lch2lab:M,lch2xyz:function(t){return x(M(t))},lch2rgb:function(t){return k(M(t))}};var S={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},C={};for(var _ in S)C[JSON.stringify(S[_])]=_},{}],5:[function(t,e,i){var n=t(4),a=function(){return new u};for(var o in n){a[o+"Raw"]=function(t){return function(e){return"number"==typeof e&&(e=Array.prototype.slice.call(arguments)),n[t](e)}}(o);var r=/(\w+)2(\w+)/.exec(o),s=r[1],l=r[2];(a[s]=a[s]||{})[l]=a[o]=function(t){return function(e){"number"==typeof e&&(e=Array.prototype.slice.call(arguments));var i=n[t](e);if("string"==typeof i||void 0===i)return i;for(var a=0;a0&&(t[0].yLabel?i=t[0].yLabel:e.labels.length>0&&t[0].index0?Math.min(r,n-i):r,i=n;return r}(i,u):-1,pixels:u,start:s,end:l,stackCount:n,scale:i}},calculateBarValuePixels:function(t,e){var i,n,a,o,r,s,l=this.chart,u=this.getMeta(),d=this.getValueScale(),c=l.data.datasets,h=d.getRightValue(c[t].data[e]),f=d.options.stacked,g=u.stack,p=0;if(f||void 0===f&&void 0!==g)for(i=0;i=0&&a>0)&&(p+=a));return o=d.getPixelForValue(p),{size:s=((r=d.getPixelForValue(p+h))-o)/2,base:o,head:r,center:r+s/2}},calculateBarIndexPixels:function(t,e,i){var n,a,r,s,l,u,d,c,h,f,g,p,m,v,b,x,y,k=i.scale.options,M="flex"===k.barThickness?(h=e,g=k,m=(f=i).pixels,v=m[h],b=h>0?m[h-1]:null,x=h');var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var o=0;o'),a[o]&&e.push(a[o]),e.push("");return e.push(""),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),r=e.datasets[0],s=a.data[n],l=s&&s.custom||{},u=o.valueAtIndexOrDefault,d=t.options.elements.arc;return{text:i,fillStyle:l.backgroundColor?l.backgroundColor:u(r.backgroundColor,n,d.backgroundColor),strokeStyle:l.borderColor?l.borderColor:u(r.borderColor,n,d.borderColor),lineWidth:l.borderWidth?l.borderWidth:u(r.borderWidth,n,d.borderWidth),hidden:isNaN(r.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i=Math.PI?-1:g<-Math.PI?1:0))+f,m=Math.cos(g),v=Math.sin(g),b=Math.cos(p),x=Math.sin(p),y=g<=0&&p>=0||g<=2*Math.PI&&2*Math.PI<=p,k=g<=.5*Math.PI&&.5*Math.PI<=p||g<=2.5*Math.PI&&2.5*Math.PI<=p,M=g<=-Math.PI&&-Math.PI<=p||g<=Math.PI&&Math.PI<=p,w=g<=.5*-Math.PI&&.5*-Math.PI<=p||g<=1.5*Math.PI&&1.5*Math.PI<=p,S=h/100,C=M?-1:Math.min(m*(m<0?1:S),b*(b<0?1:S)),_=w?-1:Math.min(v*(v<0?1:S),x*(x<0?1:S)),D=y?1:Math.max(m*(m>0?1:S),b*(b>0?1:S)),I=k?1:Math.max(v*(v>0?1:S),x*(x>0?1:S)),P=.5*(D-C),A=.5*(I-_);u=Math.min(s/P,l/A),d={x:-.5*(D+C),y:-.5*(I+_)}}i.borderWidth=e.getMaxBorderWidth(c.data),i.outerRadius=Math.max((u-i.borderWidth)/2,0),i.innerRadius=Math.max(h?i.outerRadius/100*h:0,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),i.offsetX=d.x*i.outerRadius,i.offsetY=d.y*i.outerRadius,c.total=e.calculateTotal(),e.outerRadius=i.outerRadius-i.radiusLength*e.getRingIndex(e.index),e.innerRadius=Math.max(e.outerRadius-i.radiusLength,0),o.each(c.data,function(i,n){e.updateElement(i,n,t)})},updateElement:function(t,e,i){var n=this,a=n.chart,r=a.chartArea,s=a.options,l=s.animation,u=(r.left+r.right)/2,d=(r.top+r.bottom)/2,c=s.rotation,h=s.rotation,f=n.getDataset(),g=i&&l.animateRotate?0:t.hidden?0:n.calculateCircumference(f.data[e])*(s.circumference/(2*Math.PI)),p=i&&l.animateScale?0:n.innerRadius,m=i&&l.animateScale?0:n.outerRadius,v=o.valueAtIndexOrDefault;o.extend(t,{_datasetIndex:n.index,_index:e,_model:{x:u+a.offsetX,y:d+a.offsetY,startAngle:c,endAngle:h,circumference:g,outerRadius:m,innerRadius:p,label:v(f.label,e,a.data.labels[e])}});var b=t._model;this.removeHoverStyle(t),i&&l.animateRotate||(b.startAngle=0===e?s.rotation:n.getMeta().data[e-1]._model.endAngle,b.endAngle=b.startAngle+b.circumference),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},calculateTotal:function(){var t,e=this.getDataset(),i=this.getMeta(),n=0;return o.each(i.data,function(i,a){t=e.data[a],isNaN(t)||i.hidden||(n+=Math.abs(t))}),n},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){for(var e,i,n=0,a=this.index,o=t.length,r=0;r(n=e>n?e:n)?i:n;return n}})}},{25:25,40:40,45:45}],18:[function(t,e,i){"use strict";var n=t(25),a=t(40),o=t(45);n._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}}),e.exports=function(t){function e(t,e){return o.valueOrDefault(t.showLine,e.showLines)}t.controllers.line=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,update:function(t){var i,n,a,r=this,s=r.getMeta(),l=s.dataset,u=s.data||[],d=r.chart.options,c=d.elements.line,h=r.getScaleForId(s.yAxisID),f=r.getDataset(),g=e(f,d);for(g&&(a=l.custom||{},void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),l._scale=h,l._datasetIndex=r.index,l._children=u,l._model={spanGaps:f.spanGaps?f.spanGaps:d.spanGaps,tension:a.tension?a.tension:o.valueOrDefault(f.lineTension,c.tension),backgroundColor:a.backgroundColor?a.backgroundColor:f.backgroundColor||c.backgroundColor,borderWidth:a.borderWidth?a.borderWidth:f.borderWidth||c.borderWidth,borderColor:a.borderColor?a.borderColor:f.borderColor||c.borderColor,borderCapStyle:a.borderCapStyle?a.borderCapStyle:f.borderCapStyle||c.borderCapStyle,borderDash:a.borderDash?a.borderDash:f.borderDash||c.borderDash,borderDashOffset:a.borderDashOffset?a.borderDashOffset:f.borderDashOffset||c.borderDashOffset,borderJoinStyle:a.borderJoinStyle?a.borderJoinStyle:f.borderJoinStyle||c.borderJoinStyle,fill:a.fill?a.fill:void 0!==f.fill?f.fill:c.fill,steppedLine:a.steppedLine?a.steppedLine:o.valueOrDefault(f.steppedLine,c.stepped),cubicInterpolationMode:a.cubicInterpolationMode?a.cubicInterpolationMode:o.valueOrDefault(f.cubicInterpolationMode,c.cubicInterpolationMode)},l.pivot()),i=0,n=u.length;i');var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var o=0;o'),a[o]&&e.push(a[o]),e.push("");return e.push(""),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),r=e.datasets[0],s=a.data[n].custom||{},l=o.valueAtIndexOrDefault,u=t.options.elements.arc;return{text:i,fillStyle:s.backgroundColor?s.backgroundColor:l(r.backgroundColor,n,u.backgroundColor),strokeStyle:s.borderColor?s.borderColor:l(r.borderColor,n,u.borderColor),lineWidth:s.borderWidth?s.borderWidth:l(r.borderWidth,n,u.borderWidth),hidden:isNaN(r.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i0&&!isNaN(t)?2*Math.PI/e:0}})}},{25:25,40:40,45:45}],20:[function(t,e,i){"use strict";var n=t(25),a=t(40),o=t(45);n._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}}),e.exports=function(t){t.controllers.radar=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,linkScales:o.noop,update:function(t){var e=this,i=e.getMeta(),n=i.dataset,a=i.data,r=n.custom||{},s=e.getDataset(),l=e.chart.options.elements.line,u=e.chart.scale;void 0!==s.tension&&void 0===s.lineTension&&(s.lineTension=s.tension),o.extend(i.dataset,{_datasetIndex:e.index,_scale:u,_children:a,_loop:!0,_model:{tension:r.tension?r.tension:o.valueOrDefault(s.lineTension,l.tension),backgroundColor:r.backgroundColor?r.backgroundColor:s.backgroundColor||l.backgroundColor,borderWidth:r.borderWidth?r.borderWidth:s.borderWidth||l.borderWidth,borderColor:r.borderColor?r.borderColor:s.borderColor||l.borderColor,fill:r.fill?r.fill:void 0!==s.fill?s.fill:l.fill,borderCapStyle:r.borderCapStyle?r.borderCapStyle:s.borderCapStyle||l.borderCapStyle,borderDash:r.borderDash?r.borderDash:s.borderDash||l.borderDash,borderDashOffset:r.borderDashOffset?r.borderDashOffset:s.borderDashOffset||l.borderDashOffset,borderJoinStyle:r.borderJoinStyle?r.borderJoinStyle:s.borderJoinStyle||l.borderJoinStyle}}),i.dataset.pivot(),o.each(a,function(i,n){e.updateElement(i,n,t)},e),e.updateBezierControlPoints()},updateElement:function(t,e,i){var n=this,a=t.custom||{},r=n.getDataset(),s=n.chart.scale,l=n.chart.options.elements.point,u=s.getPointPositionForValue(e,r.data[e]);void 0!==r.radius&&void 0===r.pointRadius&&(r.pointRadius=r.radius),void 0!==r.hitRadius&&void 0===r.pointHitRadius&&(r.pointHitRadius=r.hitRadius),o.extend(t,{_datasetIndex:n.index,_index:e,_scale:s,_model:{x:i?s.xCenter:u.x,y:i?s.yCenter:u.y,tension:a.tension?a.tension:o.valueOrDefault(r.lineTension,n.chart.options.elements.line.tension),radius:a.radius?a.radius:o.valueAtIndexOrDefault(r.pointRadius,e,l.radius),backgroundColor:a.backgroundColor?a.backgroundColor:o.valueAtIndexOrDefault(r.pointBackgroundColor,e,l.backgroundColor),borderColor:a.borderColor?a.borderColor:o.valueAtIndexOrDefault(r.pointBorderColor,e,l.borderColor),borderWidth:a.borderWidth?a.borderWidth:o.valueAtIndexOrDefault(r.pointBorderWidth,e,l.borderWidth),pointStyle:a.pointStyle?a.pointStyle:o.valueAtIndexOrDefault(r.pointStyle,e,l.pointStyle),hitRadius:a.hitRadius?a.hitRadius:o.valueAtIndexOrDefault(r.pointHitRadius,e,l.hitRadius)}}),t._model.skip=a.skip?a.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var t=this.chart.chartArea,e=this.getMeta();o.each(e.data,function(i,n){var a=i._model,r=o.splineCurve(o.previousItem(e.data,n,!0)._model,a,o.nextItem(e.data,n,!0)._model,a.tension);a.controlPointPreviousX=Math.max(Math.min(r.previous.x,t.right),t.left),a.controlPointPreviousY=Math.max(Math.min(r.previous.y,t.bottom),t.top),a.controlPointNextX=Math.max(Math.min(r.next.x,t.right),t.left),a.controlPointNextY=Math.max(Math.min(r.next.y,t.bottom),t.top),i.pivot()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},n=t._index,a=t._model;a.radius=i.hoverRadius?i.hoverRadius:o.valueAtIndexOrDefault(e.pointHoverRadius,n,this.chart.options.elements.point.hoverRadius),a.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:o.valueAtIndexOrDefault(e.pointHoverBackgroundColor,n,o.getHoverColor(a.backgroundColor)),a.borderColor=i.hoverBorderColor?i.hoverBorderColor:o.valueAtIndexOrDefault(e.pointHoverBorderColor,n,o.getHoverColor(a.borderColor)),a.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:o.valueAtIndexOrDefault(e.pointHoverBorderWidth,n,a.borderWidth)},removeHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},n=t._index,a=t._model,r=this.chart.options.elements.point;a.radius=i.radius?i.radius:o.valueAtIndexOrDefault(e.pointRadius,n,r.radius),a.backgroundColor=i.backgroundColor?i.backgroundColor:o.valueAtIndexOrDefault(e.pointBackgroundColor,n,r.backgroundColor),a.borderColor=i.borderColor?i.borderColor:o.valueAtIndexOrDefault(e.pointBorderColor,n,r.borderColor),a.borderWidth=i.borderWidth?i.borderWidth:o.valueAtIndexOrDefault(e.pointBorderWidth,n,r.borderWidth)}})}},{25:25,40:40,45:45}],21:[function(t,e,i){"use strict";t(25)._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),e.exports=function(t){t.controllers.scatter=t.controllers.line}},{25:25}],22:[function(t,e,i){"use strict";var n=t(25),a=t(26),o=t(45);n._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:o.noop,onComplete:o.noop}}),e.exports=function(t){t.Animation=a.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,i,n){var a,o,r=this.animations;for(e.chart=t,n||(t.animating=!0),a=0,o=r.length;a1&&(i=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1),t.advance(1+i);var n=Date.now();t.dropFrames+=(n-e)/t.frameDuration,t.animations.length>0&&t.requestAnimationFrame()},advance:function(t){for(var e,i,n=this.animations,a=0;a=e.numSteps?(o.callback(e.onAnimationComplete,[e],i),i.animating=!1,n.splice(a,1)):++a}},Object.defineProperty(t.Animation.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(t.Animation.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}})}},{25:25,26:26,45:45}],23:[function(t,e,i){"use strict";var n=t(25),a=t(45),o=t(28),r=t(30),s=t(48),l=t(31);e.exports=function(t){function e(t){return"top"===t||"bottom"===t}t.types={},t.instances={},t.controllers={},a.extend(t.prototype,{construct:function(e,i){var o,r,l=this;(r=(o=(o=i)||{}).data=o.data||{}).datasets=r.datasets||[],r.labels=r.labels||[],o.options=a.configMerge(n.global,n[o.type],o.options||{}),i=o;var u=s.acquireContext(e,i),d=u&&u.canvas,c=d&&d.height,h=d&&d.width;l.id=a.uid(),l.ctx=u,l.canvas=d,l.config=i,l.width=h,l.height=c,l.aspectRatio=c?h/c:null,l.options=i.options,l._bufferedRender=!1,l.chart=l,l.controller=l,t.instances[l.id]=l,Object.defineProperty(l,"data",{get:function(){return l.config.data},set:function(t){l.config.data=t}}),u&&d?(l.initialize(),l.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return l.notify(t,"beforeInit"),a.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),l.notify(t,"afterInit"),t},clear:function(){return a.canvas.clear(this),this},stop:function(){return t.animationService.cancelAnimation(this),this},resize:function(t){var e=this,i=e.options,n=e.canvas,o=i.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(a.getMaximumWidth(n))),s=Math.max(0,Math.floor(o?r/o:a.getMaximumHeight(n)));if((e.width!==r||e.height!==s)&&(n.width=e.width=r,n.height=e.height=s,n.style.width=r+"px",n.style.height=s+"px",a.retinaScale(e,i.devicePixelRatio),!t)){var u={width:r,height:s};l.notify(e,"resize",[u]),e.options.onResize&&e.options.onResize(e,u),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},i=t.scale;a.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),a.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),i&&(i.id=i.id||"scale")},buildOrUpdateScales:function(){var i=this,n=i.options,o=i.scales||{},r=[],s=Object.keys(o).reduce(function(t,e){return t[e]=!1,t},{});n.scales&&(r=r.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),n.scale&&r.push({options:n.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),a.each(r,function(n){var r=n.options,l=r.id,u=a.valueOrDefault(r.type,n.dtype);e(r.position)!==e(n.dposition)&&(r.position=n.dposition),s[l]=!0;var d=null;if(l in o&&o[l].type===u)(d=o[l]).options=r,d.ctx=i.ctx,d.chart=i;else{var c=t.scaleService.getScaleConstructor(u);if(!c)return;d=new c({id:l,type:u,options:r,ctx:i.ctx,chart:i}),o[d.id]=d}d.mergeTicksOptions(),n.isDefault&&(i.scale=d)}),a.each(s,function(t,e){t||delete o[e]}),i.scales=o,t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e=this,i=[],n=[];return a.each(e.data.datasets,function(a,o){var r=e.getDatasetMeta(o),s=a.type||e.config.type;if(r.type&&r.type!==s&&(e.destroyDatasetMeta(o),r=e.getDatasetMeta(o)),r.type=s,i.push(r.type),r.controller)r.controller.updateIndex(o),r.controller.linkScales();else{var l=t.controllers[r.type];if(void 0===l)throw new Error('"'+r.type+'" is not a chart type.');r.controller=new l(e,o),n.push(r.controller)}},e),n},resetElements:function(){var t=this;a.each(t.data.datasets,function(e,i){t.getDatasetMeta(i).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(e){var i,n,o=this;if(e&&"object"==typeof e||(e={duration:e,lazy:arguments[1]}),n=(i=o).options,a.each(i.scales,function(t){r.removeBox(i,t)}),n=a.configMerge(t.defaults.global,t.defaults[i.config.type],n),i.options=i.config.options=n,i.ensureScalesHaveIDs(),i.buildOrUpdateScales(),i.tooltip._options=n.tooltips,i.tooltip.initialize(),l._invalidate(o),!1!==l.notify(o,"beforeUpdate")){o.tooltip._data=o.data;var s=o.buildOrUpdateControllers();a.each(o.data.datasets,function(t,e){o.getDatasetMeta(e).controller.buildOrUpdateElements()},o),o.updateLayout(),o.options.animation&&o.options.animation.duration&&a.each(s,function(t){t.reset()}),o.updateDatasets(),o.tooltip.initialize(),o.lastActive=[],l.notify(o,"afterUpdate"),o._bufferedRender?o._bufferedRequest={duration:e.duration,easing:e.easing,lazy:e.lazy}:o.render(e)}},updateLayout:function(){!1!==l.notify(this,"beforeLayout")&&(r.update(this,this.width,this.height),l.notify(this,"afterScaleUpdate"),l.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==l.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t=0;--i)e.isDatasetVisible(i)&&e.drawDataset(i,t);l.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var i=this.getDatasetMeta(t),n={meta:i,index:t,easingValue:e};!1!==l.notify(this,"beforeDatasetDraw",[n])&&(i.controller.draw(e),l.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,i={tooltip:e,easingValue:t};!1!==l.notify(this,"beforeTooltipDraw",[i])&&(e.draw(),l.notify(this,"afterTooltipDraw",[i]))},getElementAtEvent:function(t){return o.modes.single(this,t)},getElementsAtEvent:function(t){return o.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return o.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,i){var n=o.modes[e];return"function"==typeof n?n(this,t,i):[]},getDatasetAtEvent:function(t){return o.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var i=e._meta[this.id];return i||(i=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,i=this.data.datasets.length;e0||(e.forEach(function(e){delete t[e]}),delete t._chartjs)}}t.DatasetController=function(t,e){this.initialize(t,e)},n.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),i=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=i.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=i.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&&i(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,i=this.getMeta(),n=this.getDataset().data||[],a=i.data;for(t=0,e=n.length;ti&&this.insertElements(i,n-i)},insertElements:function(t,e){for(var i=0;i=i[e].length&&i[e].push({}),!i[e][r].type||l.type&&l.type!==i[e][r].type?o.merge(i[e][r],[t.scaleService.getScaleDefaults(s),l]):o.merge(i[e][r],l)}else o._merger(e,i,n,a)}})},o.where=function(t,e){if(o.isArray(t)&&Array.prototype.filter)return t.filter(e);var i=[];return o.each(t,function(t){e(t)&&i.push(t)}),i},o.findIndex=Array.prototype.findIndex?function(t,e,i){return t.findIndex(e,i)}:function(t,e,i){i=void 0===i?t:i;for(var n=0,a=t.length;n=0;n--){var a=t[n];if(e(a))return a}},o.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.almostEquals=function(t,e,i){return Math.abs(t-e)t},o.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},o.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},o.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},o.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,i=Math.round(e);return t===Math.pow(10,i)?i:e},o.toRadians=function(t){return t*(Math.PI/180)},o.toDegrees=function(t){return t*(180/Math.PI)},o.getAngleFromPoint=function(t,e){var i=e.x-t.x,n=e.y-t.y,a=Math.sqrt(i*i+n*n),o=Math.atan2(n,i);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},o.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},o.aliasPixel=function(t){return t%2==0?0:.5},o.splineCurve=function(t,e,i,n){var a=t.skip?e:t,o=e,r=i.skip?e:i,s=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),l=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),u=s/(s+l),d=l/(s+l),c=n*(u=isNaN(u)?0:u),h=n*(d=isNaN(d)?0:d);return{previous:{x:o.x-c*(r.x-a.x),y:o.y-c*(r.y-a.y)},next:{x:o.x+h*(r.x-a.x),y:o.y+h*(r.y-a.y)}}},o.EPSILON=Number.EPSILON||1e-14,o.splineCurveMonotone=function(t){var e,i,n,a,r,s,l,u,d,c=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),h=c.length;for(e=0;e0?c[e-1]:null,(a=e0?c[e-1]:null,a=e=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},o.previousItem=function(t,e,i){return i?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},o.niceNum=function(t,e){var i=Math.floor(o.log10(t)),n=t/Math.pow(10,i);return(e?n<1.5?1:n<3?2:n<7?5:10:n<=1?1:n<=2?2:n<=5?5:10)*Math.pow(10,i)},o.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},o.getRelativePosition=function(t,e){var i,n,a=t.originalEvent||t,r=t.currentTarget||t.srcElement,s=r.getBoundingClientRect(),l=a.touches;l&&l.length>0?(i=l[0].clientX,n=l[0].clientY):(i=a.clientX,n=a.clientY);var u=parseFloat(o.getStyle(r,"padding-left")),d=parseFloat(o.getStyle(r,"padding-top")),c=parseFloat(o.getStyle(r,"padding-right")),h=parseFloat(o.getStyle(r,"padding-bottom")),f=s.right-s.left-u-c,g=s.bottom-s.top-d-h;return{x:i=Math.round((i-s.left-u)/f*r.width/e.currentDevicePixelRatio),y:n=Math.round((n-s.top-d)/g*r.height/e.currentDevicePixelRatio)}},o.getConstraintWidth=function(t){return r(t,"max-width","clientWidth")},o.getConstraintHeight=function(t){return r(t,"max-height","clientHeight")},o.getMaximumWidth=function(t){var e=t.parentNode;if(!e)return t.clientWidth;var i=parseInt(o.getStyle(e,"padding-left"),10),n=parseInt(o.getStyle(e,"padding-right"),10),a=e.clientWidth-i-n,r=o.getConstraintWidth(t);return isNaN(r)?a:Math.min(a,r)},o.getMaximumHeight=function(t){var e=t.parentNode;if(!e)return t.clientHeight;var i=parseInt(o.getStyle(e,"padding-top"),10),n=parseInt(o.getStyle(e,"padding-bottom"),10),a=e.clientHeight-i-n,r=o.getConstraintHeight(t);return isNaN(r)?a:Math.min(a,r)},o.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},o.retinaScale=function(t,e){var i=t.currentDevicePixelRatio=e||window.devicePixelRatio||1;if(1!==i){var n=t.canvas,a=t.height,o=t.width;n.height=a*i,n.width=o*i,t.ctx.scale(i,i),n.style.height||n.style.width||(n.style.height=a+"px",n.style.width=o+"px")}},o.fontString=function(t,e,i){return e+" "+t+"px "+i},o.longestText=function(t,e,i,n){var a=(n=n||{}).data=n.data||{},r=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(a=n.data={},r=n.garbageCollect=[],n.font=e),t.font=e;var s=0;o.each(i,function(e){null!=e&&!0!==o.isArray(e)?s=o.measureText(t,a,r,s,e):o.isArray(e)&&o.each(e,function(e){null==e||o.isArray(e)||(s=o.measureText(t,a,r,s,e))})});var l=r.length/2;if(l>i.length){for(var u=0;un&&(n=o),n},o.numberOfLabelLines=function(t){var e=1;return o.each(t,function(t){o.isArray(t)&&t.length>e&&(e=t.length)}),e},o.color=n?function(t){return t instanceof CanvasGradient&&(t=a.global.defaultColor),n(t)}:function(t){return console.error("Color.js not found!"),t},o.getHoverColor=function(t){return t instanceof CanvasPattern?t:o.color(t).saturate(.5).darken(.1).rgbString()}}},{25:25,3:3,45:45}],28:[function(t,e,i){"use strict";var n=t(45);function a(t,e){return t.native?{x:t.x,y:t.y}:n.getRelativePosition(t,e)}function o(t,e){var i,n,a,o,r;for(n=0,o=t.data.datasets.length;n0&&(u=t.getDatasetMeta(u[0]._datasetIndex).data),u},"x-axis":function(t,e){return u(t,e,{intersect:!1})},point:function(t,e){return r(t,a(e,t))},nearest:function(t,e,i){var n=a(e,t);i.axis=i.axis||"xy";var o=l(i.axis),r=s(t,n,i.intersect,o);return r.length>1&&r.sort(function(t,e){var i=t.getArea()-e.getArea();return 0===i&&(i=t._datasetIndex-e._datasetIndex),i}),r.slice(0,1)},x:function(t,e,i){var n=a(e,t),r=[],s=!1;return o(t,function(t){t.inXRange(n.x)&&r.push(t),t.inRange(n.x,n.y)&&(s=!0)}),i.intersect&&!s&&(r=[]),r},y:function(t,e,i){var n=a(e,t),r=[],s=!1;return o(t,function(t){t.inYRange(n.y)&&r.push(t),t.inRange(n.x,n.y)&&(s=!0)}),i.intersect&&!s&&(r=[]),r}}}},{45:45}],29:[function(t,e,i){"use strict";t(25)._set("global",{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},layout:{padding:{top:0,right:0,bottom:0,left:0}}}),e.exports=function(){var t=function(t,e){return this.construct(t,e),this};return t.Chart=t,t}},{25:25}],30:[function(t,e,i){"use strict";var n=t(45);function a(t,e){return n.where(t,function(t){return t.position===e})}function o(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,i){var n=e?i:t,a=e?t:i;return n.weight===a.weight?n._tmpIndex_-a._tmpIndex_:n.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}e.exports={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure:function(t,e,i){for(var n,a=["fullWidth","position","weight"],o=a.length,r=0;rh&&lt.maxHeight){l--;break}l++,c=u*d}t.labelRotation=l},afterCalculateTickRotation:function(){o.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){o.callback(this.options.beforeFit,[this])},fit:function(){var t=this,n=t.minSize={width:0,height:0},a=s(t._ticks),l=t.options,u=l.ticks,d=l.scaleLabel,c=l.gridLines,h=l.display,f=t.isHorizontal(),g=i(u),p=l.gridLines.tickMarkLength;if(n.width=f?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:h&&c.drawTicks?p:0,n.height=f?h&&c.drawTicks?p:0:t.maxHeight,d.display&&h){var m=r(d)+o.options.toPadding(d.padding).height;f?n.height+=m:n.width+=m}if(u.display&&h){var v=o.longestText(t.ctx,g.font,a,t.longestTextCache),b=o.numberOfLabelLines(a),x=.5*g.size,y=t.options.ticks.padding;if(f){t.longestLabelWidth=v;var k=o.toRadians(t.labelRotation),M=Math.cos(k),w=Math.sin(k)*v+g.size*b+x*(b-1)+x;n.height=Math.min(t.maxHeight,n.height+w+y),t.ctx.font=g.font;var S=e(t.ctx,a[0],g.font),C=e(t.ctx,a[a.length-1],g.font);0!==t.labelRotation?(t.paddingLeft="bottom"===l.position?M*S+3:M*x+3,t.paddingRight="bottom"===l.position?M*x+3:M*C+3):(t.paddingLeft=S/2+3,t.paddingRight=C/2+3)}else u.mirror?v=0:v+=y+x,n.width=Math.min(t.maxWidth,n.width+v),t.paddingTop=g.size/2,t.paddingBottom=g.size/2}t.handleMargins(),t.width=n.width,t.height=n.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){o.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(o.isNullOrUndef(t))return NaN;if("number"==typeof t&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:o.noop,getPixelForValue:o.noop,getValueForPixel:o.noop,getPixelForTick:function(t){var e=this,i=e.options.offset;if(e.isHorizontal()){var n=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(i?0:1),1),a=n*t+e.paddingLeft;i&&(a+=n/2);var o=e.left+Math.round(a);return o+=e.isFullWidth()?e.margins.left:0}var r=e.height-(e.paddingTop+e.paddingBottom);return e.top+t*(r/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft,n=e.left+Math.round(i);return n+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,i,n,a,r=this,s=r.isHorizontal(),l=r.options.ticks.minor,u=t.length,d=o.toRadians(r.labelRotation),c=Math.cos(d),h=r.longestLabelWidth*c,f=[];for(l.maxTicksLimit&&(a=l.maxTicksLimit),s&&(e=!1,(h+l.autoSkipPadding)*u>r.width-(r.paddingLeft+r.paddingRight)&&(e=1+Math.floor((h+l.autoSkipPadding)*u/(r.width-(r.paddingLeft+r.paddingRight)))),a&&u>a&&(e=Math.max(e,Math.floor(u/a)))),i=0;i1&&i%e>0||i%e==0&&i+e>=u)&&i!==u-1&&delete n.label,f.push(n);return f},draw:function(t){var e=this,a=e.options;if(a.display){var s=e.ctx,u=n.global,d=a.ticks.minor,c=a.ticks.major||d,h=a.gridLines,f=a.scaleLabel,g=0!==e.labelRotation,p=e.isHorizontal(),m=d.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),v=o.valueOrDefault(d.fontColor,u.defaultFontColor),b=i(d),x=o.valueOrDefault(c.fontColor,u.defaultFontColor),y=i(c),k=h.drawTicks?h.tickMarkLength:0,M=o.valueOrDefault(f.fontColor,u.defaultFontColor),w=i(f),S=o.options.toPadding(f.padding),C=o.toRadians(e.labelRotation),_=[],D=e.options.gridLines.lineWidth,I="right"===a.position?e.right:e.right-D-k,P="right"===a.position?e.right+k:e.right,A="bottom"===a.position?e.top+D:e.bottom-k-D,T="bottom"===a.position?e.top+D+k:e.bottom+D;if(o.each(m,function(i,n){if(!o.isNullOrUndef(i.label)){var r,s,c,f,v,b,x,y,M,w,S,F,O,R,L=i.label;n===e.zeroLineIndex&&a.offset===h.offsetGridLines?(r=h.zeroLineWidth,s=h.zeroLineColor,c=h.zeroLineBorderDash,f=h.zeroLineBorderDashOffset):(r=o.valueAtIndexOrDefault(h.lineWidth,n),s=o.valueAtIndexOrDefault(h.color,n),c=o.valueOrDefault(h.borderDash,u.borderDash),f=o.valueOrDefault(h.borderDashOffset,u.borderDashOffset));var z="middle",B="middle",W=d.padding;if(p){var N=k+W;"bottom"===a.position?(B=g?"middle":"top",z=g?"right":"center",R=e.top+N):(B=g?"middle":"bottom",z=g?"left":"center",R=e.bottom-N);var V=l(e,n,h.offsetGridLines&&m.length>1);V1);j3?i[2]-i[1]:i[1]-i[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var o=n.log10(Math.abs(a)),r="";if(0!==t){var s=-1*Math.floor(o);s=Math.max(Math.min(s,20),0),r=t.toFixed(s)}else r="0";return r},logarithmic:function(t,e,i){var a=t/Math.pow(10,Math.floor(n.log10(t)));return 0===t?"0":1===a||2===a||5===a||0===e||e===i.length-1?t.toExponential():""}}}},{45:45}],35:[function(t,e,i){"use strict";var n=t(25),a=t(26),o=t(45);n._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:o.noop,title:function(t,e){var i="",n=e.labels,a=n?n.length:0;if(t.length>0){var o=t[0];o.xLabel?i=o.xLabel:a>0&&o.indexl.height-e.height&&(c="bottom");var h=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===c?(i=function(t){return t<=h},n=function(t){return t>h}):(i=function(t){return t<=e.width/2},n=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},o=function(t){return t-e.width-s.caretSize-s.caretPadding<0},r=function(t){return t<=f?"top":"bottom"},i(s.x)?(d="left",a(s.x)&&(d="center",c=r(s.y))):n(s.x)&&(d="right",o(s.x)&&(d="center",c=r(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:c}}(this,F=function(t,e){var i=t._chart.ctx,n=2*e.yPadding,a=0,r=e.body,s=r.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);s+=e.beforeBody.length+e.afterBody.length;var l=e.title.length,u=e.footer.length,d=e.titleFontSize,c=e.bodyFontSize,h=e.footerFontSize;n+=l*d,n+=l?(l-1)*e.titleSpacing:0,n+=l?e.titleMarginBottom:0,n+=s*c,n+=s?(s-1)*e.bodySpacing:0,n+=u?e.footerMarginTop:0,n+=u*h,n+=u?(u-1)*e.footerSpacing:0;var f=0,g=function(t){a=Math.max(a,i.measureText(t).width+f)};return i.font=o.fontString(d,e._titleFontStyle,e._titleFontFamily),o.each(e.title,g),i.font=o.fontString(c,e._bodyFontStyle,e._bodyFontFamily),o.each(e.beforeBody.concat(e.afterBody),g),f=e.displayColors?c+2:0,o.each(r,function(t){o.each(t.before,g),o.each(t.lines,g),o.each(t.after,g)}),f=0,i.font=o.fontString(h,e._footerFontStyle,e._footerFontFamily),o.each(e.footer,g),{width:a+=2*e.xPadding,height:n}}(this,D)),a=D,s=F,l=A,u=S._chart,d=a.x,c=a.y,h=a.caretSize,f=a.caretPadding,g=a.cornerRadius,p=l.xAlign,m=l.yAlign,v=h+f,b=g+f,"right"===p?d-=s.width:"center"===p&&((d-=s.width/2)+s.width>u.width&&(d=u.width-s.width),d<0&&(d=0)),"top"===m?c+=v:c-="bottom"===m?s.height+v:s.height/2,"center"===m?"left"===p?d+=v:"right"===p&&(d-=v):"left"===p?d-=b:"right"===p&&(d+=b),T={x:d,y:c}}else D.opacity=0;return D.xAlign=A.xAlign,D.yAlign=A.yAlign,D.x=T.x,D.y=T.y,D.width=F.width,D.height=F.height,D.caretX=O.x,D.caretY=O.y,S._model=D,e&&C.custom&&C.custom.call(S,D),S},drawCaret:function(t,e){var i=this._chart.ctx,n=this._view,a=this.getCaretPosition(t,e,n);i.lineTo(a.x1,a.y1),i.lineTo(a.x2,a.y2),i.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,i){var n,a,o,r,s,l,u=i.caretSize,d=i.cornerRadius,c=i.xAlign,h=i.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===h)s=g+m/2,"left"===c?(a=(n=f)-u,o=n,r=s+u,l=s-u):(a=(n=f+p)+u,o=n,r=s-u,l=s+u);else if("left"===c?(n=(a=f+d+u)-u,o=a+u):"right"===c?(n=(a=f+p-d-u)-u,o=a+u):(n=(a=i.caretX)-u,o=a+u),"top"===h)s=(r=g)-u,l=r;else{s=(r=g+m)+u,l=r;var v=o;o=n,n=v}return{x1:n,x2:a,x3:o,y1:r,y2:s,y3:l}},drawTitle:function(t,i,n,a){var r=i.title;if(r.length){n.textAlign=i._titleAlign,n.textBaseline="top";var s,l,u=i.titleFontSize,d=i.titleSpacing;for(n.fillStyle=e(i.titleFontColor,a),n.font=o.fontString(u,i._titleFontStyle,i._titleFontFamily),s=0,l=r.length;s0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var i={width:e.width,height:e.height},n={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(this.drawBackground(n,e,t,i,a),n.x+=e.xPadding,n.y+=e.yPadding,this.drawTitle(n,e,t,a),this.drawBody(n,e,t,a),this.drawFooter(n,e,t,a))}},handleEvent:function(t){var e,i=this,n=i._options;return i._lastActive=i._lastActive||[],"mouseout"===t.type?i._active=[]:i._active=i._chart.getElementsAtEventForMode(t,n.mode,n),(e=!o.arrayEquals(i._active,i._lastActive))&&(i._lastActive=i._active,(n.enabled||n.custom)&&(i._eventPosition={x:t.x,y:t.y},i.update(!0),i.pivot())),e}}),t.Tooltip.positioners={average:function(t){if(!t.length)return!1;var e,i,n=0,a=0,o=0;for(e=0,i=t.length;el;)a-=2*Math.PI;for(;a=s&&a<=l,d=r>=i.innerRadius&&r<=i.outerRadius;return u&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,i=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,i=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},draw:function(){var t=this._chart.ctx,e=this._view,i=e.startAngle,n=e.endAngle;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,i,n),t.arc(e.x,e.y,e.innerRadius,n,i,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin="bevel",e.borderWidth&&t.stroke()}})},{25:25,26:26,45:45}],37:[function(t,e,i){"use strict";var n=t(25),a=t(26),o=t(45),r=n.global;n._set("global",{elements:{line:{tension:.4,backgroundColor:r.defaultColor,borderWidth:3,borderColor:r.defaultColor,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}}),e.exports=a.extend({draw:function(){var t,e,i,n,a=this._view,s=this._chart.ctx,l=a.spanGaps,u=this._children.slice(),d=r.elements.line,c=-1;for(this._loop&&u.length&&u.push(u[0]),s.save(),s.lineCap=a.borderCapStyle||d.borderCapStyle,s.setLineDash&&s.setLineDash(a.borderDash||d.borderDash),s.lineDashOffset=a.borderDashOffset||d.borderDashOffset,s.lineJoin=a.borderJoinStyle||d.borderJoinStyle,s.lineWidth=a.borderWidth||d.borderWidth,s.strokeStyle=a.borderColor||r.defaultColor,s.beginPath(),c=-1,t=0;tt?1:-1,o=1,r=l.borderSkipped||"left"):(t=l.x-l.width/2,e=l.x+l.width/2,i=l.y,a=1,o=(n=l.base)>i?1:-1,r=l.borderSkipped||"bottom"),u){var d=Math.min(Math.abs(t-e),Math.abs(i-n)),c=(u=u>d?d:u)/2,h=t+("left"!==r?c*a:0),f=e+("right"!==r?-c*a:0),g=i+("top"!==r?c*o:0),p=n+("bottom"!==r?-c*o:0);h!==f&&(i=g,n=p),g!==p&&(t=h,e=f)}s.beginPath(),s.fillStyle=l.backgroundColor,s.strokeStyle=l.borderColor,s.lineWidth=u;var m=[[t,n],[t,i],[e,i],[e,n]],v=["bottom","left","top","right"].indexOf(r,0);function b(t){return m[(v+t)%4]}-1===v&&(v=0);var x=b(0);s.moveTo(x[0],x[1]);for(var y=1;y<4;y++)x=b(y),s.lineTo(x[0],x[1]);s.fill(),u&&s.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var i=!1;if(this._view){var n=r(this);i=t>=n.left&&t<=n.right&&e>=n.top&&e<=n.bottom}return i},inLabelRange:function(t,e){if(!this._view)return!1;var i=r(this);return o(this)?t>=i.left&&t<=i.right:e>=i.top&&e<=i.bottom},inXRange:function(t){var e=r(this);return t>=e.left&&t<=e.right},inYRange:function(t){var e=r(this);return t>=e.top&&t<=e.bottom},getCenterPoint:function(){var t,e,i=this._view;return o(this)?(t=i.x,e=(i.y+i.base)/2):(t=(i.x+i.base)/2,e=i.y),{x:t,y:e}},getArea:function(){var t=this._view;return t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})},{25:25,26:26}],40:[function(t,e,i){"use strict";e.exports={},e.exports.Arc=t(36),e.exports.Line=t(37),e.exports.Point=t(38),e.exports.Rectangle=t(39)},{36:36,37:37,38:38,39:39}],41:[function(t,e,i){"use strict";var n=t(42);i=e.exports={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,i,n,a,o){if(o){var r=Math.min(o,n/2),s=Math.min(o,a/2);t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.quadraticCurveTo(e+n,i,e+n,i+s),t.lineTo(e+n,i+a-s),t.quadraticCurveTo(e+n,i+a,e+n-r,i+a),t.lineTo(e+r,i+a),t.quadraticCurveTo(e,i+a,e,i+a-s),t.lineTo(e,i+s),t.quadraticCurveTo(e,i,e+r,i)}else t.rect(e,i,n,a)},drawPoint:function(t,e,i,n,a){var o,r,s,l,u,d;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(o=e.toString())&&"[object HTMLCanvasElement]"!==o){if(!(isNaN(i)||i<=0)){switch(e){default:t.beginPath(),t.arc(n,a,i,0,2*Math.PI),t.closePath(),t.fill();break;case"triangle":t.beginPath(),u=(r=3*i/Math.sqrt(3))*Math.sqrt(3)/2,t.moveTo(n-r/2,a+u/3),t.lineTo(n+r/2,a+u/3),t.lineTo(n,a-2*u/3),t.closePath(),t.fill();break;case"rect":d=1/Math.SQRT2*i,t.beginPath(),t.fillRect(n-d,a-d,2*d,2*d),t.strokeRect(n-d,a-d,2*d,2*d);break;case"rectRounded":var c=i/Math.SQRT2,h=n-c,f=a-c,g=Math.SQRT2*i;t.beginPath(),this.roundedRect(t,h,f,g,g,i/2),t.closePath(),t.fill();break;case"rectRot":d=1/Math.SQRT2*i,t.beginPath(),t.moveTo(n-d,a),t.lineTo(n,a+d),t.lineTo(n+d,a),t.lineTo(n,a-d),t.closePath(),t.fill();break;case"cross":t.beginPath(),t.moveTo(n,a+i),t.lineTo(n,a-i),t.moveTo(n-i,a),t.lineTo(n+i,a),t.closePath();break;case"crossRot":t.beginPath(),s=Math.cos(Math.PI/4)*i,l=Math.sin(Math.PI/4)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n-s,a+l),t.lineTo(n+s,a-l),t.closePath();break;case"star":t.beginPath(),t.moveTo(n,a+i),t.lineTo(n,a-i),t.moveTo(n-i,a),t.lineTo(n+i,a),s=Math.cos(Math.PI/4)*i,l=Math.sin(Math.PI/4)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n-s,a+l),t.lineTo(n+s,a-l),t.closePath();break;case"line":t.beginPath(),t.moveTo(n-i,a),t.lineTo(n+i,a),t.closePath();break;case"dash":t.beginPath(),t.moveTo(n,a),t.lineTo(n+i,a),t.closePath()}t.stroke()}}else t.drawImage(e,n-e.width/2,a-e.height/2,e.width,e.height)},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,i,n){if(i.steppedLine)return"after"===i.steppedLine&&!n||"after"!==i.steppedLine&&n?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y),void t.lineTo(i.x,i.y);i.tension?t.bezierCurveTo(n?e.controlPointPreviousX:e.controlPointNextX,n?e.controlPointPreviousY:e.controlPointNextY,n?i.controlPointNextX:i.controlPointPreviousX,n?i.controlPointNextY:i.controlPointPreviousY,i.x,i.y):t.lineTo(i.x,i.y)}};n.clear=i.clear,n.drawRoundedRectangle=function(t){t.beginPath(),i.roundedRect.apply(i,arguments),t.closePath()}},{42:42}],42:[function(t,e,i){"use strict";var n,a={noop:function(){},uid:(n=0,function(){return n++}),isNullOrUndef:function(t){return null==t},isArray:Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,i){return a.valueOrDefault(a.isArray(t)?t[e]:t,i)},callback:function(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)},each:function(t,e,i,n){var o,r,s;if(a.isArray(t))if(r=t.length,n)for(o=r-1;o>=0;o--)e.call(i,t[o],o);else for(o=0;o=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i))},easeOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/i)+1)},easeInOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:2==(t/=.5)?1:(i||(i=.45),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),t<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},easeInBack:function(t){return t*t*(2.70158*t-1.70158)},easeOutBack:function(t){return(t-=1)*t*(2.70158*t+1.70158)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-a.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*a.easeInBounce(2*t):.5*a.easeOutBounce(2*t-1)+.5}};e.exports={effects:a},n.easingEffects=a},{42:42}],44:[function(t,e,i){"use strict";var n=t(42);e.exports={toLineHeight:function(t,e){var i=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,i,a,o;return n.isObject(t)?(e=+t.top||0,i=+t.right||0,a=+t.bottom||0,o=+t.left||0):e=i=a=o=+t||0,{top:e,right:i,bottom:a,left:o,height:e+a,width:o+i}},resolve:function(t,e,i){var a,o,r;for(a=0,o=t.length;a
';var a=e.childNodes[0],r=e.childNodes[1];e._reset=function(){a.scrollLeft=1e6,a.scrollTop=1e6,r.scrollLeft=1e6,r.scrollTop=1e6};var s=function(){e._reset(),t()};return h(a,"scroll",s.bind(a,"expand")),h(r,"scroll",s.bind(r,"shrink")),e}((u=function(){if(x.resizer)return e(g("resize",i))},c=!1,f=[],function(){f=Array.prototype.slice.call(arguments),d=d||this,c||(c=!0,n.requestAnimFrame.call(window,function(){c=!1,u.apply(d,f)}))}));m=function(){if(x.resizer){var e=t.parentNode;e&&e!==y.parentNode&&e.insertBefore(y,e.firstChild),y._reset()}},v=(p=t)[a]||(p[a]={}),b=v.renderProxy=function(t){t.animationName===s&&m()},n.each(l,function(t){h(p,t,b)}),v.reflow=!!p.offsetParent,p.classList.add(r)}function m(t){var e,i,o,s=t[a]||{},u=s.resizer;delete s.resizer,i=(e=t)[a]||{},(o=i.renderProxy)&&(n.each(l,function(t){f(e,t,o)}),delete i.renderProxy),e.classList.remove(r),u&&u.parentNode&&u.parentNode.removeChild(u)}e.exports={_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,initialize:function(){var t,e,i,n="from{opacity:0.99}to{opacity:1}";e="@-webkit-keyframes "+s+"{"+n+"}@keyframes "+s+"{"+n+"}."+r+"{-webkit-animation:"+s+" 0.001s;animation:"+s+" 0.001s;}",i=(t=this)._style||document.createElement("style"),t._style||(t._style=i,e="/* Chart.js */\n"+e,i.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(i)),i.appendChild(document.createTextNode(e))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){var i=t.style,n=t.getAttribute("height"),o=t.getAttribute("width");if(t[a]={initial:{height:n,width:o,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",null===o||""===o){var r=d(t,"width");void 0!==r&&(t.width=r)}if(null===n||""===n)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var s=d(t,"height");void 0!==r&&(t.height=s)}}(t,e),i):null},releaseContext:function(t){var e=t.canvas;if(e[a]){var i=e[a].initial;["height","width"].forEach(function(t){var a=i[t];n.isNullOrUndef(a)?e.removeAttribute(t):e.setAttribute(t,a)}),n.each(i.style||{},function(t,i){e.style[i]=t}),e.width=e.width,delete e[a]}},addEventListener:function(t,e,i){var o=t.canvas;if("resize"!==e){var r=i[a]||(i[a]={});h(o,e,(r.proxies||(r.proxies={}))[t.id+"_"+e]=function(e){var a,o,r,s;i((o=t,r=u[(a=e).type]||a.type,s=n.getRelativePosition(a,o),g(r,o,s.x,s.y,a)))})}else p(o,i,t)},removeEventListener:function(t,e,i){var n=t.canvas;if("resize"!==e){var o=((i[a]||{}).proxies||{})[t.id+"_"+e];o&&f(n,e,o)}else m(n)}},n.addEvent=h,n.removeEvent=f},{45:45}],48:[function(t,e,i){"use strict";var n=t(45),a=t(46),o=t(47),r=o._enabled?o:a;e.exports=n.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},r)},{45:45,46:46,47:47}],49:[function(t,e,i){"use strict";e.exports={},e.exports.filler=t(50),e.exports.legend=t(51),e.exports.title=t(52)},{50:50,51:51,52:52}],50:[function(t,e,i){"use strict";var n=t(25),a=t(40),o=t(45);n._set("global",{plugins:{filler:{propagate:!0}}});var r={dataset:function(t){var e=t.fill,i=t.chart,n=i.getDatasetMeta(e),a=n&&i.isDatasetVisible(e)&&n.dataset._children||[],o=a.length||0;return o?function(t,e){return e=i)&&n;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return o;default:return!1}}function l(t){var e,i=t.el._model||{},n=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return null;if("start"===a?o=void 0===i.scaleBottom?n.bottom:i.scaleBottom:"end"===a?o=void 0===i.scaleTop?n.top:i.scaleTop:void 0!==i.scaleZero?o=i.scaleZero:n.getBasePosition?o=n.getBasePosition():n.getBasePixel&&(o=n.getBasePixel()),null!=o){if(void 0!==o.x&&void 0!==o.y)return o;if("number"==typeof o&&isFinite(o))return{x:(e=n.isHorizontal())?o:null,y:e?null:o}}return null}function u(t,e,i){var n,a=t[e].fill,o=[e];if(!i)return a;for(;!1!==a&&-1===o.indexOf(a);){if(!isFinite(a))return a;if(!(n=t[a]))return!1;if(n.visible)return a;o.push(a),a=n.fill}return!1}function d(t){return t&&!t.skip}function c(t,e,i,n,a){var r;if(n&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r0;--r)o.canvas.lineTo(t,i[r],i[r-1],!0)}}e.exports={id:"filler",afterDatasetsUpdate:function(t,e){var i,n,o,d,c,h,f,g=(t.data.datasets||[]).length,p=e.propagate,m=[];for(n=0;n');for(var i=0;i'),t.data.datasets[i].label&&e.push(t.data.datasets[i].label),e.push("");return e.push(""),e.join("")}});var u=a.extend({initialize:function(t){o.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:s,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:s,beforeSetDimensions:s,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:s,beforeBuildLabels:s,buildLabels:function(){var t=this,e=t.options.labels||{},i=o.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(i=i.filter(function(i){return e.filter(i,t.chart.data)})),t.options.reverse&&i.reverse(),t.legendItems=i},afterBuildLabels:s,beforeFit:s,fit:function(){var t=this,e=t.options,i=e.labels,a=e.display,r=t.ctx,s=n.global,u=o.valueOrDefault,d=u(i.fontSize,s.defaultFontSize),c=u(i.fontStyle,s.defaultFontStyle),h=u(i.fontFamily,s.defaultFontFamily),f=o.fontString(d,c,h),g=t.legendHitBoxes=[],p=t.minSize,m=t.isHorizontal();if(m?(p.width=t.maxWidth,p.height=a?10:0):(p.width=a?10:0,p.height=t.maxHeight),a)if(r.font=f,m){var v=t.lineWidths=[0],b=t.legendItems.length?d+i.padding:0;r.textAlign="left",r.textBaseline="top",o.each(t.legendItems,function(e,n){var a=l(i,d)+d/2+r.measureText(e.text).width;v[v.length-1]+a+i.padding>=t.width&&(b+=d+i.padding,v[v.length]=t.left),g[n]={left:0,top:0,width:a,height:d},v[v.length-1]+=a+i.padding}),p.height+=b}else{var x=i.padding,y=t.columnWidths=[],k=i.padding,M=0,w=0,S=d+x;o.each(t.legendItems,function(t,e){var n=l(i,d)+d/2+r.measureText(t.text).width;w+S>p.height&&(k+=M+i.padding,y.push(M),M=0,w=0),M=Math.max(M,n),w+=S,g[e]={left:0,top:0,width:n,height:d}}),k+=M,y.push(M),p.width+=k}t.width=p.width,t.height=p.height},afterFit:s,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,i=e.labels,a=n.global,r=a.elements.line,s=t.width,u=t.lineWidths;if(e.display){var d,c=t.ctx,h=o.valueOrDefault,f=h(i.fontColor,a.defaultFontColor),g=h(i.fontSize,a.defaultFontSize),p=h(i.fontStyle,a.defaultFontStyle),m=h(i.fontFamily,a.defaultFontFamily),v=o.fontString(g,p,m);c.textAlign="left",c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=v;var b=l(i,g),x=t.legendHitBoxes,y=t.isHorizontal();d=y?{x:t.left+(s-u[0])/2,y:t.top+i.padding,line:0}:{x:t.left+i.padding,y:t.top+i.padding,line:0};var k=g+i.padding;o.each(t.legendItems,function(n,l){var f,p,m,v,M,w=c.measureText(n.text).width,S=b+g/2+w,C=d.x,_=d.y;y?C+S>=s&&(_=d.y+=k,d.line++,C=d.x=t.left+(s-u[d.line])/2):_+k>t.bottom&&(C=d.x=C+t.columnWidths[d.line]+i.padding,_=d.y=t.top+i.padding,d.line++),function(t,i,n){if(!(isNaN(b)||b<=0)){c.save(),c.fillStyle=h(n.fillStyle,a.defaultColor),c.lineCap=h(n.lineCap,r.borderCapStyle),c.lineDashOffset=h(n.lineDashOffset,r.borderDashOffset),c.lineJoin=h(n.lineJoin,r.borderJoinStyle),c.lineWidth=h(n.lineWidth,r.borderWidth),c.strokeStyle=h(n.strokeStyle,a.defaultColor);var s=0===h(n.lineWidth,r.borderWidth);if(c.setLineDash&&c.setLineDash(h(n.lineDash,r.borderDash)),e.labels&&e.labels.usePointStyle){var l=g*Math.SQRT2/2,u=l/Math.SQRT2,d=t+u,f=i+u;o.canvas.drawPoint(c,n.pointStyle,l,d,f)}else s||c.strokeRect(t,i,b,g),c.fillRect(t,i,b,g);c.restore()}}(C,_,n),x[l].left=C,x[l].top=_,f=n,p=w,v=b+(m=g/2)+C,M=_+m,c.fillText(f.text,v,M),f.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(v,M),c.lineTo(v+p,M),c.stroke()),y?d.x+=S+i.padding:d.y+=k})}},handleEvent:function(t){var e=this,i=e.options,n="mouseup"===t.type?"click":t.type,a=!1;if("mousemove"===n){if(!i.onHover)return}else{if("click"!==n)return;if(!i.onClick)return}var o=t.x,r=t.y;if(o>=e.left&&o<=e.right&&r>=e.top&&r<=e.bottom)for(var s=e.legendHitBoxes,l=0;l=u.left&&o<=u.left+u.width&&r>=u.top&&r<=u.top+u.height){if("click"===n){i.onClick.call(e,t.native,e.legendItems[l]),a=!0;break}if("mousemove"===n){i.onHover.call(e,t.native,e.legendItems[l]),a=!0;break}}}return a}});function d(t,e){var i=new u({ctx:t.ctx,options:e,chart:t});r.configure(t,i,e),r.addBox(t,i),t.legend=i}e.exports={id:"legend",_element:u,beforeInit:function(t){var e=t.options.legend;e&&d(t,e)},beforeUpdate:function(t){var e=t.options.legend,i=t.legend;e?(o.mergeIf(e,n.global.legend),i?(r.configure(t,i,e),i.options=e):d(t,e)):i&&(r.removeBox(t,i),delete t.legend)},afterEvent:function(t,e){var i=t.legend;i&&i.handleEvent(e)}}},{25:25,26:26,30:30,45:45}],52:[function(t,e,i){"use strict";var n=t(25),a=t(26),o=t(45),r=t(30),s=o.noop;n._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,lineHeight:1.2,padding:10,position:"top",text:"",weight:2e3}});var l=a.extend({initialize:function(t){o.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:s,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:s,beforeSetDimensions:s,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:s,beforeBuildLabels:s,buildLabels:s,afterBuildLabels:s,beforeFit:s,fit:function(){var t=this,e=o.valueOrDefault,i=t.options,a=i.display,r=e(i.fontSize,n.global.defaultFontSize),s=t.minSize,l=o.isArray(i.text)?i.text.length:1,u=o.options.toLineHeight(i.lineHeight,r),d=a?l*u+2*i.padding:0;t.isHorizontal()?(s.width=t.maxWidth,s.height=d):(s.width=d,s.height=t.maxHeight),t.width=s.width,t.height=s.height},afterFit:s,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,i=o.valueOrDefault,a=t.options,r=n.global;if(a.display){var s,l,u,d=i(a.fontSize,r.defaultFontSize),c=i(a.fontStyle,r.defaultFontStyle),h=i(a.fontFamily,r.defaultFontFamily),f=o.fontString(d,c,h),g=o.options.toLineHeight(a.lineHeight,d),p=g/2+a.padding,m=0,v=t.top,b=t.left,x=t.bottom,y=t.right;e.fillStyle=i(a.fontColor,r.defaultFontColor),e.font=f,t.isHorizontal()?(l=b+(y-b)/2,u=v+p,s=y-b):(l="left"===a.position?b+p:y-p,u=v+(x-v)/2,s=x-v,m=Math.PI*("left"===a.position?-.5:.5)),e.save(),e.translate(l,u),e.rotate(m),e.textAlign="center",e.textBaseline="middle";var k=a.text;if(o.isArray(k))for(var M=0,w=0;wt.max&&(t.max=n))})});t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},getTickLimit:function(){var t,e=this.options.ticks;if(this.isHorizontal())t=Math.min(e.maxTicksLimit?e.maxTicksLimit:11,Math.ceil(this.width/50));else{var i=a.valueOrDefault(e.fontSize,n.global.defaultFontSize);t=Math.min(e.maxTicksLimit?e.maxTicksLimit:11,Math.ceil(this.height/(2*i)))}return t},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,i=e.start,n=+e.getRightValue(t),a=e.end-i;return e.isHorizontal()?e.left+e.width/a*(n-i):e.bottom-e.height/a*(n-i)},getValueForPixel:function(t){var e=this,i=e.isHorizontal(),n=i?e.width:e.height,a=(i?t-e.left:e.bottom-t)/n;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});t.scaleService.registerScaleType("linear",i,e)}},{25:25,34:34,45:45}],55:[function(t,e,i){"use strict";var n=t(45);e.exports=function(t){var e=n.noop;t.LinearScaleBase=t.Scale.extend({getRightValue:function(e){return"string"==typeof e?+e:t.Scale.prototype.getRightValue.call(this,e)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var i=n.sign(t.min),a=n.sign(t.max);i<0&&a<0?t.max=0:i>0&&a>0&&(t.min=0)}var o=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),o!==r&&t.min>=t.max&&(o?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:e,handleDirectionalChanges:e,buildTicks:function(){var t=this,e=t.options.ticks,i=t.getTickLimit(),a={maxTicks:i=Math.max(2,i),min:e.min,max:e.max,stepSize:n.valueOrDefault(e.fixedStepSize,e.stepSize)},o=t.ticks=function(t,e){var i,a=[];if(t.stepSize&&t.stepSize>0)i=t.stepSize;else{var o=n.niceNum(e.max-e.min,!1);i=n.niceNum(o/(t.maxTicks-1),!0)}var r=Math.floor(e.min/i)*i,s=Math.ceil(e.max/i)*i;t.min&&t.max&&t.stepSize&&n.almostWhole((t.max-t.min)/t.stepSize,i/1e3)&&(r=t.min,s=t.max);var l=(s-r)/i;l=n.almostEquals(l,Math.round(l),i/1e3)?Math.round(l):Math.ceil(l);var u=1;i<1&&(u=Math.pow(10,i.toString().length-2),r=Math.round(r*u)/u,s=Math.round(s*u)/u),a.push(void 0!==t.min?t.min:r);for(var d=1;d0){var i=n.min(e),a=n.max(e);t.min=null===t.min?i:Math.min(t.min,i),t.max=null===t.max?a:Math.max(t.max,a)}})}else n.each(a,function(e,a){var o=i.getDatasetMeta(a);i.isDatasetVisible(a)&&r(o)&&n.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||o.data[i].hidden||n<0||(null===t.min?t.min=n:nt.max&&(t.max=n),0!==n&&(null===t.minNotZero||n0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(n.log10(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,i=!t.isHorizontal(),a={min:e.min,max:e.max},o=t.ticks=function(t,e){var i,a,o=[],r=n.valueOrDefault,s=r(t.min,Math.pow(10,Math.floor(n.log10(e.min)))),l=Math.floor(n.log10(e.max)),u=Math.ceil(e.max/Math.pow(10,l));0===s?(i=Math.floor(n.log10(e.minNotZero)),a=Math.floor(e.minNotZero/Math.pow(10,i)),o.push(s),s=a*Math.pow(10,i)):(i=Math.floor(n.log10(s)),a=Math.floor(s/Math.pow(10,i)));for(var d=i<0?Math.pow(10,Math.abs(i)):1;o.push(s),10==++a&&(a=1,d=++i>=0?1:d),s=Math.round(a*Math.pow(10,i)*d)/d,ia?{start:e-i-5,end:e}:{start:e,end:e+i+5}}function u(t,e,i,n){if(a.isArray(e))for(var o=i.y,r=1.5*n,s=0;sd.r&&(d.r=b.end,c.r=m),x.startd.b&&(d.b=x.end,c.b=m)}t.setReductions(u,d,c)}(this):(t=this,e=Math.min(t.height/2,t.width/2),t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0))},setReductions:function(t,e,i){var n=e.l/Math.sin(i.l),a=Math.max(e.r-this.width,0)/Math.sin(i.r),o=-e.t/Math.cos(i.t),r=-Math.max(e.b-this.height,0)/Math.cos(i.b);n=d(n),a=d(a),o=d(o),r=d(r),this.drawingArea=Math.min(Math.round(t-(n+a)/2),Math.round(t-(o+r)/2)),this.setCenterPoint(n,a,o,r)},setCenterPoint:function(t,e,i,n){var a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,s=i+a.drawingArea,l=a.height-n-a.drawingArea;a.xCenter=Math.round((r+o)/2+a.left),a.yCenter=Math.round((s+l)/2+a.top)},getIndexAngle:function(t){return t*(2*Math.PI/r(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var i=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*i:(t-e.min)*i},getPointPosition:function(t,e){var i=this.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(i)*e)+this.xCenter,y:Math.round(Math.sin(i)*e)+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,i=t.options,n=i.gridLines,o=i.ticks,l=a.valueOrDefault;if(i.display){var d=t.ctx,c=this.getIndexAngle(0),h=l(o.fontSize,e.defaultFontSize),f=l(o.fontStyle,e.defaultFontStyle),g=l(o.fontFamily,e.defaultFontFamily),p=a.fontString(h,f,g);a.each(t.ticks,function(i,s){if(s>0||o.reverse){var u=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if(n.display&&0!==s&&function(t,e,i,n){var o=t.ctx;if(o.strokeStyle=a.valueAtIndexOrDefault(e.color,n-1),o.lineWidth=a.valueAtIndexOrDefault(e.lineWidth,n-1),t.options.gridLines.circular)o.beginPath(),o.arc(t.xCenter,t.yCenter,i,0,2*Math.PI),o.closePath(),o.stroke();else{var s=r(t);if(0===s)return;o.beginPath();var l=t.getPointPosition(0,i);o.moveTo(l.x,l.y);for(var u=1;u=0;m--){if(o.display){var v=t.getPointPosition(m,g);i.beginPath(),i.moveTo(t.xCenter,t.yCenter),i.lineTo(v.x,v.y),i.stroke(),i.closePath()}if(l.display){var b=t.getPointPosition(m,g+5),x=a.valueAtIndexOrDefault(l.fontColor,m,e.defaultFontColor);i.font=p.font,i.fillStyle=x;var y=t.getIndexAngle(m),k=a.toDegrees(y);i.textAlign=0===(f=k)||180===f?"center":f<180?"left":"right",d=k,c=t._pointLabelSizes[m],h=b,90===d||270===d?h.y-=c.h/2:(d>270||d<90)&&(h.y-=c.h),u(i,t.pointLabels[m]||"",b,p.size)}}}(t)}}});t.scaleService.registerScaleType("radialLinear",c,i)}},{25:25,34:34,45:45}],58:[function(t,e,i){"use strict";var n=t(1);n="function"==typeof n?n:window.moment;var a=t(25),o=t(45),r=Number.MIN_SAFE_INTEGER||-9007199254740991,s=Number.MAX_SAFE_INTEGER||9007199254740991,l={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},u=Object.keys(l);function d(t,e){return t-e}function c(t){var e,i,n,a={},o=[];for(e=0,i=t.length;e=0&&r<=s;){if(a=t[(n=r+s>>1)-1]||null,o=t[n],!a)return{lo:null,hi:o};if(o[e]i))return{lo:a,hi:o};s=n-1}}return{lo:o,hi:null}}(t,e,i),o=a.lo?a.hi?a.lo:t[t.length-2]:t[0],r=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=r[e]-o[e],l=s?(i-o[e])/s:0,u=(r[n]-o[n])*l;return o[n]+u}function f(t,e){var i=e.parser,a=e.parser||e.format;return"function"==typeof i?i(t):"string"==typeof t&&"string"==typeof a?n(t,a):(t instanceof n||(t=n(t)),t.isValid()?t:"function"==typeof a?a(t):t)}function g(t,e){if(o.isNullOrUndef(t))return null;var i=e.options.time,n=f(e.getRightValue(t),i);return n.isValid()?(i.round&&n.startOf(i.round),n.valueOf()):null}function p(t){for(var e=u.indexOf(t)+1,i=u.length;e=k&&i<=M&&_.push(i);return y.min=k,y.max=M,y._unit=S.unit||function(t,e,i,a){var o,r,s=n.duration(n(a).diff(n(i)));for(o=u.length-1;o>=u.indexOf(e);o--)if(r=u[o],l[r].common&&s.as(r)>=t.length)return r;return u[e?u.indexOf(e):0]}(_,S.minUnit,y.min,y.max),y._majorUnit=p(y._unit),y._table=function(t,e,i,n){if("linear"===n||!t.length)return[{time:e,pos:0},{time:i,pos:1}];var a,o,r,s,l,u=[],d=[e];for(a=0,o=t.length;ae&&s1?o[1]:s,v=o[0],b=(h(a,"time",c,"pos")-h(a,"time",v,"pos"))/2),d.time.max||(c=o[o.length-1],v=o.length>1?o[o.length-2]:r,x=(h(a,"time",c,"pos")-h(a,"time",v,"pos"))/2)),{left:b,right:x}),y._labelFormat=function(t,e){var i,n,a,o=t.length;for(i=0;i=0&&t0?s:1}});t.scaleService.registerScaleType("time",e,{position:"bottom",distribution:"linear",bounds:"data",time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}})}},{1:1,25:25,45:45}]},{},[7])(7)}); diff --git a/laminar/PKGBUILD b/laminar/PKGBUILD new file mode 100644 index 0000000..c6e2a1f --- /dev/null +++ b/laminar/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: Jesus E. + +pkgname=laminar +pkgver=1.0 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Free software, fast and lightweight Continuous Integration server (with Hyperbola-branding)" +arch=('i686' 'x86_64') +url='https://laminar.ohwg.net' +license=('GPL-3' 'Expat') +depends=('capnproto' 'sqlite' 'rapidjson' 'boost-libs') +makedepends=('cmake' 'boost' 'quilt') +options=('strip') +source=("$pkgname-$pkgver.tar.gz::https://github.com/ohwgiles/laminar/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/l/laminar/laminar_$_debver-$_debrel.debian.tar.xz" + "fix-build.patch" + "ansi_up.js" + "Chart.min.js" + "vue.min.js" + "vue-router.min.js" + "icon.png" + "laminard.initd" + "laminard.confd") +sha512sums=('5d9f9c9fe14a90733ab5b2c7f135d2d232e17a8f6bfe054b34f925ed37f589a40e6c2b1ec5fd73cc52f433f1562a6db94c7a4d649631d28b715a0cbbbd184a55' + 'f41e881320e08052940cfb891c38ce45c9c74e5576aaf99c98a961b1278ff73899eb7541090dedbdddd3f165fa673c25cba8cf6d6ce2b54301bfc70a5227bb1d' + '94d8b3e428b3223903a0b7d79eca7a70ff56614dd39ac57352696cd5d5385e427f84e4e379574863a6d38a270b82e28731edea6b23d91ff2efa27cd204b18b14' + 'b5833288efea1636ce702701ac88a0cca2064f3f281c68a71d7773a411aefdd07a47f29aa17b86e2f7fe11dab154ca5d94eb97622bf2770bca450a5dde99a702' + '1aca85f35d1c3701cc08310b4f08b7620588070298425bc2d564c027a7e4f34aed07accddc859da6842e8c1402b8e30ec575e4b045b01349382eb6fe37cec365' + '04a6d247e71fcb12dd300b04d2768b45e1522e0f3fa636e07f11e1fe4fe4502f361f2eebe87b51e612e1a1b6a59f681c4efce4cb27a1add444763a6c430cb627' + '0e938bf1c6e5854c162036596387239920a7607173860620f069896590468894aedcb2743d8a466d926355081dcee595f530a9adc0d6ebc2ed252763626f11d4' + '8712c82d558d06aa495f5ff2464b1cf83890868fc28dbc74dc7aa917f2de23f7b9c5953c1f5c02ca3a624f2dc167302db280d0929c72bf87fb1e3d8a14800b2d' + '533af672db0154b1dd3b9516a0bdafdadb427c469145bf8f30e2cf4e5a0fbca73c19f7180ea5f70c45a8fffcff0c4cd320a422dbfa37b92e37af600cac516eb0' + '5394447f3ec020d1e41f9ea123d5b68710c5673fc2f3698d35bc11aa6583eb733dcd930016a757788a4d13ea2af53070ffda678943998d12340954b2e2f12933') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0000-Remove-dependency-on-vue-router.patch || true + rm -v debian/patches/0001-Remove-vue-router-in-the-build-process.patch || true + rm -v debian/patches/0002-Move-ansi-up-to-latest-version.patch || true + rm -v debian/patches/0003-Patch-build-system-to-use-JS-libraries-from-Debian-p.patch || true + rm -v debian/patches/0005-Add-Documentation-links-to-the-systemd-service.patch || true + + quilt push -av + fi + patch -Np1 -i ${srcdir}/fix-build.patch + + # copy 3rd-party files for compile + mkdir -p ./js + cp "$srcdir"/{ansi_up,Chart.min,vue.min,vue-router.min}.js "$srcdir/$pkgname-$pkgver/js" + + # insert branding + rm "$srcdir/$pkgname-$pkgver/src/resources/icon.png" + cp "$srcdir"/icon.png "$srcdir/$pkgname-$pkgver/src/resources" +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLAMINAR_VERSION=$pkgver . + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -d "${pkgdir}/var/lib/laminar/cfg/"{jobs,contexts,scripts} + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + + # install services + install -Dm755 "${srcdir}/laminard.initd" "${pkgdir}/etc/init.d/laminard" + install -Dm644 "${srcdir}/laminard.confd" "${pkgdir}/etc/conf.d/laminard" +} diff --git a/laminar/ansi_up.js b/laminar/ansi_up.js new file mode 100644 index 0000000..74f541a --- /dev/null +++ b/laminar/ansi_up.js @@ -0,0 +1,327 @@ +// ansi_up.js +// version : 1.3.0 +// author : Dru Nelson +// license : MIT +// http://github.com/drudru/ansi_up + +(function (Date, undefined) { + + var ansi_up, + VERSION = "1.3.0", + + // check for nodeJS + hasModule = (typeof module !== 'undefined'), + + // Normal and then Bright + ANSI_COLORS = [ + [ + { color: "0, 0, 0", 'class': "ansi-black" }, + { color: "187, 0, 0", 'class': "ansi-red" }, + { color: "0, 187, 0", 'class': "ansi-green" }, + { color: "187, 187, 0", 'class': "ansi-yellow" }, + { color: "0, 0, 187", 'class': "ansi-blue" }, + { color: "187, 0, 187", 'class': "ansi-magenta" }, + { color: "0, 187, 187", 'class': "ansi-cyan" }, + { color: "255,255,255", 'class': "ansi-white" } + ], + [ + { color: "85, 85, 85", 'class': "ansi-bright-black" }, + { color: "255, 85, 85", 'class': "ansi-bright-red" }, + { color: "0, 255, 0", 'class': "ansi-bright-green" }, + { color: "255, 255, 85", 'class': "ansi-bright-yellow" }, + { color: "85, 85, 255", 'class': "ansi-bright-blue" }, + { color: "255, 85, 255", 'class': "ansi-bright-magenta" }, + { color: "85, 255, 255", 'class': "ansi-bright-cyan" }, + { color: "255, 255, 255", 'class': "ansi-bright-white" } + ] + ], + + // 256 Colors Palette + PALETTE_COLORS; + + function Ansi_Up() { + this.fg = this.bg = this.fg_truecolor = this.bg_truecolor = null; + this.bright = 0; + } + + Ansi_Up.prototype.setup_palette = function() { + PALETTE_COLORS = []; + // Index 0..15 : System color + (function() { + var i, j; + for (i = 0; i < 2; ++i) { + for (j = 0; j < 8; ++j) { + PALETTE_COLORS.push(ANSI_COLORS[i][j]['color']); + } + } + })(); + + // Index 16..231 : RGB 6x6x6 + // https://gist.github.com/jasonm23/2868981#file-xterm-256color-yaml + (function() { + var levels = [0, 95, 135, 175, 215, 255]; + var format = function (r, g, b) { return levels[r] + ', ' + levels[g] + ', ' + levels[b] }; + var r, g, b; + for (r = 0; r < 6; ++r) { + for (g = 0; g < 6; ++g) { + for (b = 0; b < 6; ++b) { + PALETTE_COLORS.push(format.call(this, r, g, b)); + } + } + } + })(); + + // Index 232..255 : Grayscale + (function() { + var level = 8; + var format = function(level) { return level + ', ' + level + ', ' + level }; + var i; + for (i = 0; i < 24; ++i, level += 10) { + PALETTE_COLORS.push(format.call(this, level)); + } + })(); + }; + + Ansi_Up.prototype.escape_for_html = function (txt) { + return txt.replace(/[&<>]/gm, function(str) { + if (str == "&") return "&"; + if (str == "<") return "<"; + if (str == ">") return ">"; + }); + }; + + Ansi_Up.prototype.linkify = function (txt) { + return txt.replace(/(https?:\/\/[^\s]+)/gm, function(str) { + return "
" + str + ""; + }); + }; + + Ansi_Up.prototype.ansi_to_html = function (txt, options) { + return this.process(txt, options, true); + }; + + Ansi_Up.prototype.ansi_to_text = function (txt) { + var options = {}; + return this.process(txt, options, false); + }; + + Ansi_Up.prototype.process = function (txt, options, markup) { + var self = this; + var raw_text_chunks = txt.split(/\033\[/); + var first_chunk = raw_text_chunks.shift(); // the first chunk is not the result of the split + + var color_chunks = raw_text_chunks.map(function (chunk) { + return self.process_chunk(chunk, options, markup); + }); + + color_chunks.unshift(first_chunk); + + return color_chunks.join(''); + }; + + Ansi_Up.prototype.process_chunk = function (text, options, markup) { + + // Are we using classes or styles? + options = typeof options == 'undefined' ? {} : options; + var use_classes = typeof options.use_classes != 'undefined' && options.use_classes; + var key = use_classes ? 'class' : 'color'; + + // Each 'chunk' is the text after the CSI (ESC + '[') and before the next CSI/EOF. + // + // This regex matches four groups within a chunk. + // + // The first and third groups match code type. + // We supported only SGR command. It has empty first group and 'm' in third. + // + // The second group matches all of the number+semicolon command sequences + // before the 'm' (or other trailing) character. + // These are the graphics or SGR commands. + // + // The last group is the text (including newlines) that is colored by + // the other group's commands. + var matches = text.match(/^([!\x3c-\x3f]*)([\d;]*)([\x20-\x2c]*[\x40-\x7e])([\s\S]*)/m); + + if (!matches) return text; + + var orig_txt = matches[4]; + var nums = matches[2].split(';'); + + // We currently support only "SGR" (Select Graphic Rendition) + // Simply ignore if not a SGR command. + if (matches[1] !== '' || matches[3] !== 'm') { + return orig_txt; + } + + if (!markup) { + return orig_txt; + } + + var self = this; + + while (nums.length > 0) { + var num_str = nums.shift(); + var num = parseInt(num_str); + + if (isNaN(num) || num === 0) { + self.fg = self.bg = null; + self.bright = 0; + } else if (num === 1) { + self.bright = 1; + } else if (num == 39) { + self.fg = null; + } else if (num == 49) { + self.bg = null; + } else if ((num >= 30) && (num < 38)) { + self.fg = ANSI_COLORS[self.bright][(num % 10)][key]; + } else if ((num >= 90) && (num < 98)) { + self.fg = ANSI_COLORS[1][(num % 10)][key]; + } else if ((num >= 40) && (num < 48)) { + self.bg = ANSI_COLORS[0][(num % 10)][key]; + } else if ((num >= 100) && (num < 108)) { + self.bg = ANSI_COLORS[1][(num % 10)][key]; + } else if (num === 38 || num === 48) { // extend color (38=fg, 48=bg) + (function() { + var is_foreground = (num === 38); + if (nums.length >= 1) { + var mode = nums.shift(); + if (mode === '5' && nums.length >= 1) { // palette color + var palette_index = parseInt(nums.shift()); + if (palette_index >= 0 && palette_index <= 255) { + if (!use_classes) { + if (!PALETTE_COLORS) { + self.setup_palette.call(self); + } + if (is_foreground) { + self.fg = PALETTE_COLORS[palette_index]; + } else { + self.bg = PALETTE_COLORS[palette_index]; + } + } else { + var klass = (palette_index >= 16) + ? ('ansi-palette-' + palette_index) + : ANSI_COLORS[palette_index > 7 ? 1 : 0][palette_index % 8]['class']; + if (is_foreground) { + self.fg = klass; + } else { + self.bg = klass; + } + } + } + } else if(mode === '2' && nums.length >= 3) { // true color + var r = parseInt(nums.shift()); + var g = parseInt(nums.shift()); + var b = parseInt(nums.shift()); + if ((r >= 0 && r <= 255) && (g >= 0 && g <= 255) && (b >= 0 && b <= 255)) { + var color = r + ', ' + g + ', ' + b; + if (!use_classes) { + if (is_foreground) { + self.fg = color; + } else { + self.bg = color; + } + } else { + if (is_foreground) { + self.fg = 'ansi-truecolor'; + self.fg_truecolor = color; + } else { + self.bg = 'ansi-truecolor'; + self.bg_truecolor = color; + } + } + } + } + } + })(); + } + } + + if ((self.fg === null) && (self.bg === null)) { + return orig_txt; + } else { + var styles = []; + var classes = []; + var data = {}; + var render_data = function (data) { + var fragments = []; + var key; + for (key in data) { + if (data.hasOwnProperty(key)) { + fragments.push('data-' + key + '="' + this.escape_for_html(data[key]) + '"'); + } + } + return fragments.length > 0 ? ' ' + fragments.join(' ') : ''; + }; + + if (self.fg) { + if (use_classes) { + classes.push(self.fg + "-fg"); + if (self.fg_truecolor !== null) { + data['ansi-truecolor-fg'] = self.fg_truecolor; + self.fg_truecolor = null; + } + } else { + styles.push("color:rgb(" + self.fg + ")"); + } + } + if (self.bg) { + if (use_classes) { + classes.push(self.bg + "-bg"); + if (self.bg_truecolor !== null) { + data['ansi-truecolor-bg'] = self.bg_truecolor; + self.bg_truecolor = null; + } + } else { + styles.push("background-color:rgb(" + self.bg + ")"); + } + } + if (use_classes) { + return '' + orig_txt + ''; + } else { + return '' + orig_txt + ''; + } + } + }; + + // Module exports + ansi_up = { + + escape_for_html: function (txt) { + var a2h = new Ansi_Up(); + return a2h.escape_for_html(txt); + }, + + linkify: function (txt) { + var a2h = new Ansi_Up(); + return a2h.linkify(txt); + }, + + ansi_to_html: function (txt, options) { + var a2h = new Ansi_Up(); + return a2h.ansi_to_html(txt, options); + }, + + ansi_to_text: function (txt) { + var a2h = new Ansi_Up(); + return a2h.ansi_to_text(txt); + }, + + ansi_to_html_obj: function () { + return new Ansi_Up(); + } + }; + + // CommonJS module is defined + if (hasModule) { + module.exports = ansi_up; + } + /*global ender:false */ + if (typeof window !== 'undefined' && typeof ender === 'undefined') { + window.ansi_up = ansi_up; + } + /*global define:false */ + if (typeof define === "function" && define.amd) { + define("ansi_up", [], function () { + return ansi_up; + }); + } +})(Date); diff --git a/laminar/fix-build.patch b/laminar/fix-build.patch new file mode 100644 index 0000000..978bed2 --- /dev/null +++ b/laminar/fix-build.patch @@ -0,0 +1,35 @@ +--- a/CMakeLists.txt 2020-12-05 01:55:11.000000000 +0100 ++++ b/CMakeLists.txt 2022-05-05 00:24:11.786391267 +0200 +@@ -82,16 +82,7 @@ + COMMAND sh -c '( echo -n "\\#define INDEX_HTML_UNCOMPRESSED_SIZE " && wc -c < "${CMAKE_SOURCE_DIR}/src/resources/index.html" ) > index_html_size.h' + DEPENDS src/resources/index.html) + +-# Download 3rd-party frontend JS libs... +-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js +- js/vue.min.js EXPECTED_MD5 fb192338844efe86ec759a40152fcb8e) +-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.4.8/vue-router.min.js +- js/vue-router.min.js EXPECTED_MD5 5f51d4dbbf68fd6725956a5a2b865f3b) +-file(DOWNLOAD https://raw.githubusercontent.com/drudru/ansi_up/v1.3.0/ansi_up.js +- js/ansi_up.js EXPECTED_MD5 158566dc1ff8f2804de972f7e841e2f6) +-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js +- js/Chart.min.js EXPECTED_MD5 f6c8efa65711e0cbbc99ba72997ecd0e) +-# ...and compile them ++# Compile frontend JS libs + generate_compressed_bins(${CMAKE_BINARY_DIR} js/vue-router.min.js js/vue.min.js + js/ansi_up.js js/Chart.min.js) + # (see resources.cpp where these are fetched) +@@ -141,14 +132,9 @@ + target_link_libraries(laminar-tests ${GTEST_LIBRARY} capnp-rpc capnp kj-http kj-async kj pthread sqlite3 z) + endif() + +-set(SYSTEMD_UNITDIR /lib/systemd/system CACHE PATH "Path to systemd unit files") + set(BASH_COMPLETIONS_DIR /usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory") + set(ZSH_COMPLETIONS_DIR /usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory") + install(TARGETS laminard RUNTIME DESTINATION sbin) + install(TARGETS laminarc RUNTIME DESTINATION bin) +-install(FILES etc/laminar.conf DESTINATION /etc) + install(FILES etc/laminarc-completion.bash DESTINATION ${BASH_COMPLETIONS_DIR} RENAME laminarc) + install(FILES etc/laminarc-completion.zsh DESTINATION ${ZSH_COMPLETIONS_DIR} RENAME _laminarc) +- +-configure_file(etc/laminar.service.in laminar.service @ONLY) +-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/laminar.service DESTINATION ${SYSTEMD_UNITDIR}) diff --git a/laminar/icon.png b/laminar/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..78f0386bb00d881f143ba06caedf4e762619ea86 GIT binary patch literal 1357 zcmV-T1+w~yP)EX>4Tx04R}tkv&MmKp2MKrk09S9qb_DkfC<6AS&XhRVYG*P%E_RU~=gnG%+M8 zE{=k0!NH%!s)LKOt`4q(Aov5~=;Wm6A|-y86k5c1$8itueecWNcYx5SGR^8512o+> zGpVGQ%dd#xSA=NxA&!vDEMr!Z((oN$_XzO)F2S?>>;4?QYQbVaKqQ`FhG`S86Hjg0 z2Iqa^C@ae<@j3CRNf#u3)BVfh)c3-)I2SpQP8@ zTI>ku-v%zO+nTZmT$3MT>$%48KO`F74X>IXOC4wSNM8odR zPO^B=i$aAS6chzfB1l0G6;B?7QmFQlQ)>lLTm(_PC`sPz&SuHU7O906TE*594~hy# zGMSm5mt9%H#?0WAnN3~kLyPy2Ixw%`dv|yH&mIhVz zsa|qbRXopoEt}2Wo*K~V>gp4!y1Uyv-}i@Vwc4k^Sg~0A+D;2dRr8i*jdhdbd7c|Z z(fh!lZQEl2R*DvyP}K=z%g3ea)VG~3rUv9V&R4+6e~^U0+bb(854o;;Wy1$cbL&u5t6HtT z3d}Tz3g9B}xvCy_UHAL{Y+v(zf5;e<>w4(>z47AW;^^Ai+Cg9%*efC{fFFk8JJZwC zKmKb##+YFdc@uaE80aAR4S2FtDw%5zWQ;i|BD28OO{BkPGMNVpg~FwzeRs7|HyVwb zf*?2!ypS+uFplFRz=71?P@~b<76id(K)%Zt8b(pHC#j#TghR9^2!cirFaWk?S{)?Ir&SHF9_SV&j33BGMUW2LZNV>YY$Z_l}r>xAGN_Ka59RbdrGC!;Uq8s z<#PEa;85#4ilXg3nR;||^q8tX-YOMDBws3(p6_KFa2)4j;Cwf0p0%#(dl`5I2!J=cVT|{V P00000NkvXXu0mjfeCv*R literal 0 HcmV?d00001 diff --git a/laminar/laminard.confd b/laminar/laminard.confd new file mode 100644 index 0000000..4df17b5 --- /dev/null +++ b/laminar/laminard.confd @@ -0,0 +1,64 @@ +### +### LAMINAR_HOME +### +### Root location containing laminar configuration, database, +### build workspaces and archive. +### +### Default: /var/lib/laminar +### +LAMINAR_HOME=/var/lib/laminar + +### LAMINAR_BIND_HTTP +### +### Interface on which laminard will bind to serve the Web UI. +### May be of the form IP:PORT, unix:PATH/TO/SOCKET or unix-abstract:NAME +### +### Default: *:8080 +### +LAMINAR_BIND_HTTP=*:8080 + +### LAMINAR_BIND_RPC +### +### Interface on which laminard will bind to accept RPC from laminarc. +### May be of the form IP:PORT, unix:PATH/TO/SOCKET or unix-abstract:NAME +### +### Default: unix-abstract:laminar +LAMINAR_BIND_RPC=unix-abstract:laminar + +### +### LAMINAR_TITLE +### +### Page title to show in web frontend +### +LAMINAR_TITLE= + +### +### LAMINAR_KEEP_RUNDIRS +### +### Setting this prevents the immediate deletion of job rundirs +### $LAMINAR_HOME/run/$JOB/$RUN. Value should be an integer represeting +### the number of rundirs to keep. +### +### Default: 0 +### +LAMINAR_KEEP_RUNDIRS=0 + + +### +### LAMINAR_BASE_URL +### +### Base url for the frontend. This affects the tag and needs +### to be set if Laminar runs behind a reverse-proxy that hosts Laminar +### within a subfolder (rather than at a subdomain root) +### +LAMINAR_BASE_URL=/ + +### +### LAMINAR_ARCHIVE_URL +### +### Base url used to request artifacts. Laminar can serve build +### artifacts (and it will if you leave this unset), but it +### uses a very naive and inefficient method. Best to let a real +### webserver handle serving those requests. +### +#LAMINAR_ARCHIVE_URL=http://backbone.example.com/ci/archive/ diff --git a/laminar/laminard.initd b/laminar/laminard.initd new file mode 100644 index 0000000..5c064b3 --- /dev/null +++ b/laminar/laminard.initd @@ -0,0 +1,29 @@ +#!/sbin/openrc-run +# Copyright 2022 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +export LAMINAR_HOME=${LAMINAR_HOME} +export LAMINAR_BIND_HTTP=${LAMINAR_BIND_HTTP} +export LAMINAR_BIND_RPC=${LAMINAR_BIND_RPC} +export LAMINAR_TITLE=${LAMINAR_TITLE} +export LAMINAR_KEEP_RUNDIRS=${LAMINAR_KEEP_RUNDIRS} +export LAMINAR_BASE_URL=${LAMINAR_BASE_URL} +export LAMINAR_ARCHIVE_URL=${LAMINAR_ARCHIVE_URL} + +depend() { + need net localmount +} + +start() { + ebegin "Starting Laminar Continuous Integration Server" + start-stop-daemon --start --background --chdir /var/lib/laminar \ + --make-pidfile --pidfile /run/laminard.pid \ + --exec /usr/sbin/laminard -- + eend $? +} + +stop() { + ebegin "Stopping Laminar Continuous Integration Server" + start-stop-daemon --stop --quiet --pidfile /run/laminard.pid + eend $? +} diff --git a/laminar/vue-router.min.js b/laminar/vue-router.min.js new file mode 100644 index 0000000..1f0006c --- /dev/null +++ b/laminar/vue-router.min.js @@ -0,0 +1,6 @@ +/*! + * vue-router v3.4.8 + * (c) 2020 Evan You + * @license MIT + */ +var t,e;t=this,e=function(){"use strict";function t(t,e){for(var r in e)t[r]=e[r];return t}var e=/[!'()*]/g,r=function(t){return"%"+t.charCodeAt(0).toString(16)},n=/%2C/g,o=function(t){return encodeURIComponent(t).replace(e,r).replace(n,",")};function i(t){try{return decodeURIComponent(t)}catch(t){}return t}var a=function(t){return null==t||"object"==typeof t?t:String(t)};function s(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var r=t.replace(/\+/g," ").split("="),n=i(r.shift()),o=r.length>0?i(r.join("=")):null;void 0===e[n]?e[n]=o:Array.isArray(e[n])?e[n].push(o):e[n]=[e[n],o]}),e):e}function u(t){var e=t?Object.keys(t).map(function(e){var r=t[e];if(void 0===r)return"";if(null===r)return o(e);if(Array.isArray(r)){var n=[];return r.forEach(function(t){void 0!==t&&(null===t?n.push(o(e)):n.push(o(e)+"="+o(t)))}),n.join("&")}return o(e)+"="+o(r)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}var c=/\/?$/;function p(t,e,r,n){var o=n&&n.options.stringifyQuery,i=e.query||{};try{i=f(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:d(e,o),matched:t?l(t):[]};return r&&(a.redirectedFrom=d(r,o)),Object.freeze(a)}function f(t){if(Array.isArray(t))return t.map(f);if(t&&"object"==typeof t){var e={};for(var r in t)e[r]=f(t[r]);return e}return t}var h=p(null,{path:"/"});function l(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function d(t,e){var r=t.path,n=t.query;void 0===n&&(n={});var o=t.hash;return void 0===o&&(o=""),(r||"/")+(e||u)(n)+o}function v(t,e){return e===h?t===e:!!e&&(t.path&&e.path?t.path.replace(c,"")===e.path.replace(c,"")&&t.hash===e.hash&&y(t.query,e.query):!(!t.name||!e.name)&&t.name===e.name&&t.hash===e.hash&&y(t.query,e.query)&&y(t.params,e.params))}function y(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var r=Object.keys(t).sort(),n=Object.keys(e).sort();return r.length===n.length&&r.every(function(r,o){var i=t[r];if(n[o]!==r)return!1;var a=e[r];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?y(i,a):String(i)===String(a)})}function m(t){for(var e=0;e=0&&(e=t.slice(n),t=t.slice(0,n));var o=t.indexOf("?");return o>=0&&(r=t.slice(o+1),t=t.slice(0,o)),{path:t,query:r,hash:e}}(i.path||""),h=r&&r.path||"/",l=f.path?b(f.path,h,n||i.append):h,d=function(t,e,r){void 0===e&&(e={});var n,o=r||s;try{n=o(t||"")}catch(t){n={}}for(var i in e){var u=e[i];n[i]=Array.isArray(u)?u.map(a):a(u)}return n}(f.query,i.query,o&&o.options.parseQuery),v=i.hash||f.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:l,query:d,hash:v}}var H,F=[String,Object],N=[String,Array],z=function(){},D={name:"RouterLink",props:{to:{type:F,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:N,default:"click"}},render:function(e){var r=this,n=this.$router,o=this.$route,i=n.resolve(this.to,o,this.append),a=i.location,s=i.route,u=i.href,f={},h=n.options.linkActiveClass,l=n.options.linkExactActiveClass,d=null==h?"router-link-active":h,y=null==l?"router-link-exact-active":l,m=null==this.activeClass?d:this.activeClass,g=null==this.exactActiveClass?y:this.exactActiveClass,w=s.redirectedFrom?p(null,B(s.redirectedFrom),null,n):s;f[g]=v(o,w),f[m]=this.exact?f[g]:function(t,e){return 0===t.path.replace(c,"/").indexOf(e.path.replace(c,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var r in e)if(!(r in t))return!1;return!0}(t.query,e.query)}(o,w);var b=f[g]?this.ariaCurrentValue:null,x=function(t){K(t)&&(r.replace?n.replace(a,z):n.push(a,z))},k={click:K};Array.isArray(this.event)?this.event.forEach(function(t){k[t]=x}):k[this.event]=x;var R={class:f},E=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:s,navigate:x,isActive:f[m],isExactActive:f[g]});if(E){if(1===E.length)return E[0];if(E.length>1||!E.length)return 0===E.length?e():e("span",{},E)}if("a"===this.tag)R.on=k,R.attrs={href:u,"aria-current":b};else{var C=function t(e){if(e)for(var r,n=0;n-1&&(s.params[h]=r.params[h]);return s.path=V(p.path,s.params),u(p,s,a)}if(s.path){s.params={};for(var l=0;l=t.length?r():t[o]?e(t[o],function(){n(o+1)}):n(o+1)};n(0)}var gt={redirected:2,aborted:4,cancelled:8,duplicated:16};function wt(t,e){return xt(t,e,gt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return kt.forEach(function(r){r in t&&(e[r]=t[r])}),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function bt(t,e){return xt(t,e,gt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function xt(t,e,r,n){var o=new Error(n);return o._isRouter=!0,o.from=t,o.to=e,o.type=r,o}var kt=["params","query","hash"];function Rt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Et(t,e){return Rt(t)&&t._isRouter&&(null==e||t.type===e)}function Ct(t){return function(e,r,n){var o=!1,i=0,a=null;At(t,function(t,e,r,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=jt(function(e){var o;((o=e).__esModule||_t&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:H.extend(e),r.components[s]=e,--i<=0&&n()}),p=jt(function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Rt(t)?t:new Error(e),n(a))});try{u=t(c,p)}catch(t){p(t)}if(u)if("function"==typeof u.then)u.then(c,p);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,p)}}}),o||n()}}function At(t,e){return Ot(t.map(function(t){return Object.keys(t.components).map(function(r){return e(t.components[r],t.instances[r],t,r)})}))}function Ot(t){return Array.prototype.concat.apply([],t)}var _t="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function jt(t){var e=!1;return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];if(!e)return e=!0,t.apply(this,r)}}var St=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}(e),this.current=h,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function $t(t,e,r,n){var o=At(t,function(t,n,o,i){var a=function(t,e){return"function"!=typeof t&&(t=H.extend(t)),t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map(function(t){return r(t,n,o,i)}):r(a,n,o,i)});return Ot(n?o.reverse():o)}function Pt(t,e){if(e)return function(){return t.apply(e,arguments)}}St.prototype.listen=function(t){this.cb=t},St.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},St.prototype.onError=function(t){this.errorCbs.push(t)},St.prototype.transitionTo=function(t,e,r){var n,o=this;try{n=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach(function(e){e(t)}),t}var i=this.current;this.confirmTransition(n,function(){o.updateRoute(n),e&&e(n),o.ensureURL(),o.router.afterHooks.forEach(function(t){t&&t(n,i)}),o.ready||(o.ready=!0,o.readyCbs.forEach(function(t){t(n)}))},function(t){r&&r(t),t&&!o.ready&&(Et(t,gt.redirected)&&i===h||(o.ready=!0,o.readyErrorCbs.forEach(function(e){e(t)})))})},St.prototype.confirmTransition=function(t,e,r){var n=this,o=this.current;this.pending=t;var i,a,s=function(t){!Et(t)&&Rt(t)&&(n.errorCbs.length?n.errorCbs.forEach(function(e){e(t)}):console.error(t)),r&&r(t)},u=t.matched.length-1,c=o.matched.length-1;if(v(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),s(((a=xt(i=o,t,gt.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var p=function(t,e){var r,n=Math.max(t.length,e.length);for(r=0;r0)){var e=this.router,r=e.options.scrollBehavior,n=dt&&r;n&&this.listeners.push(ot());var o=function(){var r=t.current,o=Lt(t.base);t.current===h&&o===t._startLocation||t.transitionTo(o,function(t){n&&it(e,t,r,!0)})};window.addEventListener("popstate",o),this.listeners.push(function(){window.removeEventListener("popstate",o)})}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,function(t){vt(x(n.base+t.fullPath)),it(n.router,t,o,!1),e&&e(t)},r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,function(t){yt(x(n.base+t.fullPath)),it(n.router,t,o,!1),e&&e(t)},r)},e.prototype.ensureURL=function(t){if(Lt(this.base)!==this.current.fullPath){var e=x(this.base+this.current.fullPath);t?vt(e):yt(e)}},e.prototype.getCurrentLocation=function(){return Lt(this.base)},e}(St);function Lt(t){var e=window.location.pathname;return t&&0===e.toLowerCase().indexOf(t.toLowerCase())&&(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var qt=function(t){function e(e,r,n){t.call(this,e,r),n&&function(t){var e=Lt(t);if(!/^\/#/.test(e))return window.location.replace(x(t+"/#"+e)),!0}(this.base)||Ut()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,r=dt&&e;r&&this.listeners.push(ot());var n=function(){var e=t.current;Ut()&&t.transitionTo(It(),function(n){r&&it(t.router,n,e,!0),dt||Bt(n.fullPath)})},o=dt?"popstate":"hashchange";window.addEventListener(o,n),this.listeners.push(function(){window.removeEventListener(o,n)})}},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,function(t){Vt(t.fullPath),it(n.router,t,o,!1),e&&e(t)},r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,function(t){Bt(t.fullPath),it(n.router,t,o,!1),e&&e(t)},r)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;It()!==e&&(t?Vt(e):Bt(e))},e.prototype.getCurrentLocation=function(){return It()},e}(St);function Ut(){var t=It();return"/"===t.charAt(0)||(Bt("/"+t),!1)}function It(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Mt(t){var e=window.location.href,r=e.indexOf("#");return(r>=0?e.slice(0,r):e)+"#"+t}function Vt(t){dt?vt(Mt(t)):window.location.hash=t}function Bt(t){dt?yt(Mt(t)):window.location.replace(Mt(t))}var Ht=function(t){function e(e,r){t.call(this,e,r),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,r){var n=this;this.transitionTo(t,function(t){n.stack=n.stack.slice(0,n.index+1).concat(t),n.index++,e&&e(t)},r)},e.prototype.replace=function(t,e,r){var n=this;this.transitionTo(t,function(t){n.stack=n.stack.slice(0,n.index).concat(t),e&&e(t)},r)},e.prototype.go=function(t){var e=this,r=this.index+t;if(!(r<0||r>=this.stack.length)){var n=this.stack[r];this.confirmTransition(n,function(){var t=e.current;e.index=r,e.updateRoute(n),e.router.afterHooks.forEach(function(e){e&&e(n,t)})},function(t){Et(t,gt.duplicated)&&(e.index=r)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(St),Ft=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Y(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!dt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new Tt(this,t.base);break;case"hash":this.history=new qt(this,t.base,this.fallback);break;case"abstract":this.history=new Ht(this,t.base)}},Nt={currentRoute:{configurable:!0}};function zt(t,e){return t.push(e),function(){var r=t.indexOf(e);r>-1&&t.splice(r,1)}}return Ft.prototype.match=function(t,e,r){return this.matcher.match(t,e,r)},Nt.currentRoute.get=function(){return this.history&&this.history.current},Ft.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",function(){var r=e.apps.indexOf(t);r>-1&&e.apps.splice(r,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()}),!this.app){this.app=t;var r=this.history;if(r instanceof Tt||r instanceof qt){var n=function(t){r.setupListeners(),function(t){var n=r.current,o=e.options.scrollBehavior;dt&&o&&"fullPath"in t&&it(e,t,n,!1)}(t)};r.transitionTo(r.getCurrentLocation(),n,n)}r.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},Ft.prototype.beforeEach=function(t){return zt(this.beforeHooks,t)},Ft.prototype.beforeResolve=function(t){return zt(this.resolveHooks,t)},Ft.prototype.afterEach=function(t){return zt(this.afterHooks,t)},Ft.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ft.prototype.onError=function(t){this.history.onError(t)},Ft.prototype.push=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise(function(e,r){n.history.push(t,e,r)});this.history.push(t,e,r)},Ft.prototype.replace=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise(function(e,r){n.history.replace(t,e,r)});this.history.replace(t,e,r)},Ft.prototype.go=function(t){this.history.go(t)},Ft.prototype.back=function(){this.go(-1)},Ft.prototype.forward=function(){this.go(1)},Ft.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},Ft.prototype.resolve=function(t,e,r){var n=B(t,e=e||this.history.current,r,this),o=this.match(n,e),i=o.redirectedFrom||o.fullPath;return{location:n,route:o,href:function(t,e,r){var n="hash"===r?"#"+e:e;return t?x(t+"/"+n):n}(this.history.base,i,this.mode),normalizedTo:n,resolved:o}},Ft.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==h&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ft.prototype,Nt),Ft.install=function t(e){if(!t.installed||H!==e){t.installed=!0,H=e;var r=function(t){return void 0!==t},n=function(t,e){var n=t.$options._parentVnode;r(n)&&r(n=n.data)&&r(n=n.registerRouteInstance)&&n(t,e)};e.mixin({beforeCreate:function(){r(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,n(this,this)},destroyed:function(){n(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",g),e.component("RouterLink",D);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ft.version="3.4.8",Ft.isNavigationFailure=Et,Ft.NavigationFailureType=gt,J&&window.Vue&&window.Vue.use(Ft),Ft},"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).VueRouter=e(); diff --git a/laminar/vue.min.js b/laminar/vue.min.js new file mode 100644 index 0000000..5fa4a26 --- /dev/null +++ b/laminar/vue.min.js @@ -0,0 +1,6 @@ +/*! + * Vue.js v2.6.12 + * (c) 2014-2020 Evan You + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){"use strict";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function o(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function s(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,C=g(function(e){return e.replace(w,"-$1").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf("edge/")>0,G=(J&&J.indexOf("android"),J&&/iphone|ipad|ipod|ios/.test(J)||"ios"===K),X=(J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\/(\d+)/)),Y={}.watch,Q=!1;if(z)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Q=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!z&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ne=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,oe="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);ie="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,"default"))a=!1;else if(""===a||a===C(e)){var c=Pe(String,i.type);(c<0||s0&&(st((u=e(u,(a||"")+"_"+c))[0])&&st(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?st(f)?s[l]=he(f.text+u):""!==u&&s.push(he(u)):st(u)&&st(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key="__vlist"+a+"_"+c+"__"),s.push(u)));return s}(e):void 0}function st(e){return n(e)&&n(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=pt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=dt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,"$stable",a),R(i,"$key",s),R(i,"$hasNormal",o),i}function pt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:at(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function dt(e,t){return function(){return e[t]}}function vt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return cn.now()})}function un(){var e,t;for(an=sn(),rn=!0,Qt.sort(function(e,t){return e.id-t.id}),on=0;onon&&Qt[n].id>e.id;)n--;Qt.splice(n+1,0,e)}else Qt.push(e);nn||(nn=!0,Ye(un))}}(this)},fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Re(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:S,set:S};function dn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}function vn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Me(o,t,n,e);xe(r,o,a),o in e||dn(e,"_props",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data="function"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return Re(e,t,"data()"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&dn(e,"_data",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new fn(e,a||S,S,hn)),i in e||mn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===a.call(n)&&e.test(t));var n}function An(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=xn(a.componentOptions);s&&!t(s)&&On(n,o,r,i)}}}function On(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=bn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De($n(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&qt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=ut(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Pt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Pt(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),Yt(n,"beforeCreate"),function(e){var t=ct(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),vn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Yt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return _n(this,e,t,n);(n=n||{}).user=!0;var r=new fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){Re(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(wn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for "'+e+'"',i=0,o=t.length;iparseInt(this.max)&&On(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Ye,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),M.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,A(e.options.components,Tn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),Cn(e),function(e){M.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(wn),Object.defineProperty(wn.prototype,"$isServer",{get:te}),Object.defineProperty(wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wn,"FunctionalRenderContext",{value:Tt}),wn.version="2.6.12";var En=p("style,class"),Nn=p("input,textarea,option,select,progress"),jn=function(e,t,n){return"value"===n&&Nn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Dn=p("contenteditable,draggable,spellcheck"),Ln=p("events,caret,typing,plaintext-only"),Mn=function(e,t){return Hn(t)||"false"===t?"false":"contenteditable"===e&&Ln(t)?t:"true"},In=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Fn="http://www.w3.org/1999/xlink",Pn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Rn=function(e){return Pn(e)?e.slice(6,e.length):""},Hn=function(e){return null==e||!1===e};function Bn(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Un(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Un(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Vn(t));return""}(t.staticClass,t.class)}function Un(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+" "+t:e:t||""}function Vn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=e.length;i-1?hr(e,t,n):In(t)?Hn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Dn(t)?e.setAttribute(t,Mn(t,n)):Pn(t)?Hn(n)?e.removeAttributeNS(Fn,Rn(t)):e.setAttributeNS(Fn,t,n):hr(e,t,n)}function hr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var mr={create:dr,update:dr};function yr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Bn(r),c=i._transitionClasses;n(c)&&(s=zn(s,Vn(c))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}var gr,_r,br,$r,wr,Cr,xr={create:yr,update:yr},kr=/[\w).+\-_$\]]/;function Ar(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=e.charAt(v));v--);h&&kr.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,$r),key:'"'+e.slice($r+1)+'"'}:{exp:e,key:null};_r=e,$r=wr=Cr=0;for(;!zr();)Vr(br=Ur())?Jr(br):91===br&&Kr(br);return{exp:e.slice(0,wr),key:e.slice(wr+1,Cr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Ur(){return _r.charCodeAt(++$r)}function zr(){return $r>=gr}function Vr(e){return 34===e||39===e}function Kr(e){var t=1;for(wr=$r;!zr();)if(Vr(e=Ur()))Jr(e);else if(91===e&&t++,93===e&&t--,0===t){Cr=$r;break}}function Jr(e){for(var t=e;!zr()&&(e=Ur())!==t;);}var qr,Wr="__r",Zr="__c";function Gr(e,t,n){var r=qr;return function i(){null!==t.apply(null,arguments)&&Qr(e,i,n,r)}}var Xr=Ve&&!(X&&Number(X[1])<=53);function Yr(e,t,n,r){if(Xr){var i=an,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function Qr(e,t,n,r){(r||qr).removeEventListener(e,t._wrapper||t,n)}function ei(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};qr=r.elm,function(e){if(n(e[Wr])){var t=q?"change":"input";e[t]=[].concat(e[Wr],e[t]||[]),delete e[Wr]}n(e[Zr])&&(e.change=[].concat(e[Zr],e.change||[]),delete e[Zr])}(i),rt(i,o,Yr,Qr,Gr,r.context),qr=void 0}}var ti,ni={create:ei,update:ei};function ri(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]="");for(i in c){if(o=c[i],"textContent"===i||"innerHTML"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var u=t(o)?"":String(o);ii(a,u)&&(a.value=u)}else if("innerHTML"===i&&qn(a.tagName)&&t(a.innerHTML)){(ti=ti||document.createElement("div")).innerHTML=""+o+"";for(var l=ti.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function ii(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var oi={create:ri,update:ri},ai=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function si(e){var t=ci(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ci(e){return Array.isArray(e)?O(e):"string"==typeof e?ai(e):e}var ui,li=/^--/,fi=/\s*!important$/,pi=function(e,t,n){if(li.test(t))e.style.setProperty(t,n);else if(fi.test(n))e.style.setProperty(C(t),n.replace(fi,""),"important");else{var r=vi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(yi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function _i(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(yi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function bi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,$i(e.name||"v")),A(t,e),t}return"string"==typeof e?$i(e):void 0}}var $i=g(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),wi=z&&!W,Ci="transition",xi="animation",ki="transition",Ai="transitionend",Oi="animation",Si="animationend";wi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ki="WebkitTransition",Ai="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Oi="WebkitAnimation",Si="webkitAnimationEnd"));var Ti=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ti(function(){Ti(e)})}function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),gi(e,t))}function ji(e,t){e._transitionClasses&&h(e._transitionClasses,t),_i(e,t)}function Di(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ci?Ai:Si,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=Ci,l=a,f=o.length):t===xi?u>0&&(n=xi,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Ci:xi:null)?n===Ci?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Ci&&Li.test(r[ki+"Property"])}}function Ii(e,t){for(;e.length1}function Ui(e,t){!0!==t.data.show&&Pi(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,""),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)&&u.setTextContent(p,""):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(N(Wi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function qi(e,t){return t.every(function(t){return!N(t,e)})}function Wi(e){return"_value"in e?e._value:e.value}function Zi(e){e.target.composing=!0}function Gi(e){e.target.composing&&(e.target.composing=!1,Xi(e.target,"input"))}function Xi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Yi(e){return!e.componentInstance||e.data&&e.data.transition?e:Yi(e.componentInstance._vnode)}var Qi={model:Vi,show:{bind:function(e,t,n){var r=t.value,i=(n=Yi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,Pi(n,function(){e.style.display=o})):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Yi(n)).data&&n.data.transition?(n.data.show=!0,r?Pi(n,function(){e.style.display=e.__vOriginalDisplay}):Ri(n,function(){e.style.display="none"})):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},eo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function to(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?to(zt(t.children)):e}function no(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function ro(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var io=function(e){return e.tag||Ut(e)},oo=function(e){return"show"===e.name},ao={name:"transition",props:eo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(io)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=to(o);if(!a)return o;if(this._leaving)return ro(e,o);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=no(this),u=this._vnode,l=to(u);if(a.data.directives&&a.data.directives.some(oo)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!Ut(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if("out-in"===r)return this._leaving=!0,it(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),ro(e,o);if("in-out"===r){if(Ut(a))return u;var p,d=function(){p()};it(c,"afterEnter",d),it(c,"enterCancelled",d),it(f,"delayLeave",function(e){p=e})}}return o}}},so=A({tag:String,moveClass:String},eo);function co(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function uo(e){e.data.newPos=e.elm.getBoundingClientRect()}function lo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete so.mode;var fo={Transition:ao,TransitionGroup:{props:so,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Zt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=no(this),s=0;s-1?Gn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Gn[e]=/HTMLUnknownElement/.test(t.toString())},A(wn.options.directives,Qi),A(wn.options.components,fo),wn.prototype.__patch__=z?zi:S,wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Yt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new fn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Yt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Yt(e,"mounted")),e}(this,e=e&&z?Yn(e):void 0,t)},z&&setTimeout(function(){F.devtools&&ne&&ne.emit("init",wn)},0);var po=/\{\{((?:.|\r?\n)+?)\}\}/g,vo=/[-.*+?^${}()|[\]\/\\]/g,ho=g(function(e){var t=e[0].replace(vo,"\\$&"),n=e[1].replace(vo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")});var mo={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Fr(e,"class");n&&(e.staticClass=JSON.stringify(n));var r=Ir(e,"class",!1);r&&(e.classBinding=r)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var yo,go={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Fr(e,"style");n&&(e.staticStyle=JSON.stringify(ai(n)));var r=Ir(e,"style",!1);r&&(e.styleBinding=r)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},_o=function(e){return(yo=yo||document.createElement("div")).innerHTML=e,yo.textContent},bo=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),$o=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),wo=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Co=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,xo=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+P.source+"]*",Ao="((?:"+ko+"\\:)?"+ko+")",Oo=new RegExp("^<"+Ao),So=/^\s*(\/?)>/,To=new RegExp("^<\\/"+Ao+"[^>]*>"),Eo=/^]+>/i,No=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Io=/&(?:lt|gt|quot|amp|#39);/g,Fo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Po=p("pre,textarea",!0),Ro=function(e,t){return e&&Po(e)&&"\n"===t[0]};function Ho(e,t){var n=t?Fo:Io;return e.replace(n,function(e){return Mo[e]})}var Bo,Uo,zo,Vo,Ko,Jo,qo,Wo,Zo=/^@|^v-on:/,Go=/^v-|^@|^:|^#/,Xo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Yo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Qo=/^\(|\)$/g,ea=/^\[.*\]$/,ta=/:(.*)$/,na=/^:|^\.|^v-bind:/,ra=/\.[^.\]]+(?=[^\]]*$)/g,ia=/^v-slot(:|$)|^#/,oa=/[\r\n]/,aa=/\s+/g,sa=g(_o),ca="_empty_";function ua(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ma(t),rawAttrsMap:{},parent:n,children:[]}}function la(e,t){Bo=t.warn||Sr,Jo=t.isPreTag||T,qo=t.mustUseProp||T,Wo=t.getTagNamespace||T;t.isReservedTag;zo=Tr(t.modules,"transformNode"),Vo=Tr(t.modules,"preTransformNode"),Ko=Tr(t.modules,"postTransformNode"),Uo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=fa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&da(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&da(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),Jo(e.tag)&&(c=!1);for(var f=0;f]*>)","i")),p=e.replace(f,function(e,n,r){return u=r.length,Do(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),Ro(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf("<");if(0===d){if(No.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(jo.test(e)){var h=e.indexOf("]>");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(To);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ro(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(To.test($)||Oo.test($)||No.test($)||jo.test($)||(w=$.indexOf("<",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(Oo);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(So))&&(r=e.match(xo)||e.match(Co));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&("p"===r&&wo(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,o):"p"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Bo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Wo(e);q&&"svg"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Ar(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=i+r[0].length}return c-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Mr(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Br(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Br(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Br(t,"$$c")+"}",null,!0)}(e,r,i);else if("input"===o&&"radio"===a)!function(e,t,n){var r=n&&n.number,i=Ir(e,"value")||"null";Er(e,"checked","_q("+t+","+(i=r?"_n("+i+")":i)+")"),Mr(e,"change",Br(t,i),null,!0)}(e,r,i);else if("input"===o||"textarea"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?Wr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Br(t,l);c&&(f="if($event.target.composing)return;"+f),Er(e,"value","("+t+")"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,"blur","$forceUpdate()")}(e,r,i);else if(!F.isReservedTag(o))return Hr(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Er(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:bo,mustUseProp:jn,canBeLeftOpenTag:$o,isReservedTag:Wn,getTagNamespace:Zn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}(ba)},xa=g(function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))});function ka(e,t){e&&($a=xa(t.staticKeys||""),wa=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!wa(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every($a)))}(t);if(1===t.type){if(!wa(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,Oa=/\([^)]*?\);*$/,Sa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ta={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Na=function(e){return"if("+e+")return null;"},ja={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Na("$event.target !== $event.currentTarget"),ctrl:Na("!$event.ctrlKey"),shift:Na("!$event.shiftKey"),alt:Na("!$event.altKey"),meta:Na("!$event.metaKey"),left:Na("'button' in $event && $event.button !== 0"),middle:Na("'button' in $event && $event.button !== 1"),right:Na("'button' in $event && $event.button !== 2")};function Da(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var a=La(e[o]);e[o]&&e[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?n+"_d("+r+",["+i.slice(0,-1)+"])":n+r}function La(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return La(e)}).join(",")+"]";var t=Sa.test(e.value),n=Aa.test(e.value),r=Sa.test(e.value.replace(Oa,""));if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(ja[s])o+=ja[s],Ta[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=Na(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ma).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Ta[e],r=Ea[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var Ia={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:S},Fa=function(e){this.options=e,this.warn=e.warn||Sr,this.transforms=Tr(e.modules,"transformCode"),this.dataGenFns=Tr(e.modules,"genData"),this.directives=A(A({},Ia),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Pa(e,t){var n=new Fa(t);return{render:"with(this){return "+(e?Ra(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ra(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ha(e,t);if(e.once&&!e.onceProcessed)return Ba(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Ua(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=qa(e,t),i="_t("+n+(r?","+r:""),o=e.attrs||e.dynamicAttrs?Ga((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:qa(t,n,!0);return"_c("+e+","+Va(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Va(e,t));var i=e.inlineTemplate?null:qa(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Pa(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Ga(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ka(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ka))}function Ja(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ua(e,t,Ja,"null");if(e.for&&!e.forProcessed)return za(e,t,Ja);var r=e.slotScope===ca?"":String(e.slotScope),i="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(qa(e,t)||"undefined")+":undefined":qa(e,t)||"undefined":Ra(e,t))+"}",o=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+o+"}"}function qa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||Ra)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ts.innerHTML.indexOf(" ")>0}var os=!!z&&is(!1),as=!!z&&is(!0),ss=g(function(e){var t=Yn(e);return t&&t.innerHTML}),cs=wn.prototype.$mount;return wn.prototype.$mount=function(e,t){if((e=e&&Yn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=ss(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=rs(r,{outputSourceRange:!1,shouldDecodeNewlines:os,shouldDecodeNewlinesForHref:as,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return cs.call(this,e,t)},wn.compile=rs,wn}); diff --git a/lapack/PKGBUILD b/lapack/PKGBUILD new file mode 100644 index 0000000..b38c267 --- /dev/null +++ b/lapack/PKGBUILD @@ -0,0 +1,112 @@ +# Maintainer: Jesus E. + +pkgbase=lapack +pkgname=(lapack blas cblas lapacke lapack-doc) +pkgver=3.9.0 +_debver=$pkgver +_debrel=3 +pkgrel=2 +url='https://www.netlib.org/lapack' +pkgdesc="Linear Algebra PACKage" +makedepends=(gcc-fortran cmake python doxygen quilt) +arch=(i686 x86_64) +license=(Modified-BSD) +source=($pkgbase-$pkgver.tar.gz::"https://github.com/Reference-LAPACK/lapack/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/l/lapack/lapack_${_debver}-${_debrel}+deb11u1.debian.tar.xz" + "lapacke-missing-symbols.patch") +sha512sums=('424956ad941a60a4b71e0d451ad48db12a692f8a71a90f3ca7f71d6ecc1922f392746ea84df1c47a46577ed2db32e9e47ec44ad248207c5ac7da179becb712ef' + '7919ce67169ffae66af2baa1ab91186bb4e3ecaf3812bc6284b493d51f2abc688c5371fdb7b303535c52e38e0c9ed3f8ec6a643b524d6c027595601b08d7a6b1' + '7964addb97716b24a0d9ea375c826925256a0efe82547921e0e5867cc12f2b611d626232c0e26d26cdaeea9fd36674ed5275407ad7efcc060c673cde0082c3a6') + +prepare() { + cd $pkgbase-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/python3.patch || true + + quilt push -av + else + # https://github.com/Reference-LAPACK/lapack/issues/365 + patch -p1 -i $srcdir/lapacke-missing-symbols.patch + fi +} + +build() { + cmake \ + -S $pkgbase-$pkgver \ + -B build \ + -DCMAKE_SKIP_RPATH=ON \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_TESTING=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_Fortran_COMPILER=gfortran \ + -DLAPACKE_WITH_TMG=ON \ + -DCBLAS=ON \ + -DBUILD_DEPRECATED=ON + make -C build + + # build man pages + cd $pkgname-$pkgver + doxygen DOCS/Doxyfile_man +} + +package_lapack() { + depends=(blas) + + cd build + make DESTDIR="$pkgdir" install + + rm -r "$pkgdir"/usr/lib/{libblas.*,libcblas.*,liblapacke.*} + rm -r "$pkgdir"/usr/lib/pkgconfig/{blas.*,cblas.*,lapacke.*} + rm -r "$pkgdir"/usr/lib/cmake/{cblas*,lapacke*} + rm -r "$pkgdir"/usr/include + + install -Dm644 $srcdir/$pkgbase-$pkgver/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_blas() { + pkgdesc="Basic Linear Algebra Subprograms" + depends=(gcc-libs) + + cd build/BLAS + make DESTDIR="$pkgdir" install + + install -Dm644 $srcdir/$pkgbase-$pkgver/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_cblas() { + pkgdesc="C interface to BLAS" + depends=(blas) + + cd build/CBLAS + make DESTDIR="$pkgdir" install + + install -Dm644 $srcdir/$pkgbase-$pkgver/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lapacke() { + pkgdesc="C interface to LAPACK" + depends=(lapack) + + cd build/LAPACKE + make DESTDIR="$pkgdir" install + + install -Dm644 $srcdir/$pkgbase-$pkgver/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lapack-doc() { + pkgdesc="Man pages for BLAS/LAPACK" + + mkdir -p "$pkgdir"/usr/share + cp -r lapack-$pkgver/DOCS/man "$pkgdir"/usr/share + + install -Dm644 $srcdir/$pkgbase-$pkgver/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/lapack/lapacke-missing-symbols.patch b/lapack/lapacke-missing-symbols.patch new file mode 100644 index 0000000..9c0fb4e --- /dev/null +++ b/lapack/lapacke-missing-symbols.patch @@ -0,0 +1,138 @@ +From 87536aa3c8bb0af00f66088fb6ac05d87509e011 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= +Date: Sat, 23 Nov 2019 12:22:20 +0100 +Subject: [PATCH] Restore missing prototypes for deprecated LAPACK functions + +Some LAPACK functions prototypes were inadvertedly dropped in 3.9.0. As a +consequence, LAPACKE has several unresolved symbols. + +Closes #365 +--- + LAPACKE/include/lapack.h | 100 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 100 insertions(+) + +diff --git a/LAPACKE/include/lapack.h b/LAPACKE/include/lapack.h +index 3f425325f..5c131d844 100644 +--- a/LAPACKE/include/lapack.h ++++ b/LAPACKE/include/lapack.h +@@ -1842,6 +1842,28 @@ void LAPACK_zgeqlf( + lapack_complex_double* work, lapack_int const* lwork, + lapack_int* info ); + ++#define LAPACK_sgeqpf LAPACK_GLOBAL(sgeqpf,SGEQPF) ++void LAPACK_sgeqpf( lapack_int* m, lapack_int* n, float* a, lapack_int* lda, ++ lapack_int* jpvt, float* tau, float* work, ++ lapack_int *info ); ++ ++#define LAPACK_dgeqpf LAPACK_GLOBAL(dgeqpf,DGEQPF) ++void LAPACK_dgeqpf( lapack_int* m, lapack_int* n, double* a, lapack_int* lda, ++ lapack_int* jpvt, double* tau, double* work, ++ lapack_int *info ); ++ ++#define LAPACK_cgeqpf LAPACK_GLOBAL(cgeqpf,CGEQPF) ++void LAPACK_cgeqpf( lapack_int* m, lapack_int* n, lapack_complex_float* a, ++ lapack_int* lda, lapack_int* jpvt, ++ lapack_complex_float* tau, lapack_complex_float* work, ++ float* rwork, lapack_int *info ); ++ ++#define LAPACK_zgeqpf LAPACK_GLOBAL(zgeqpf,ZGEQPF) ++void LAPACK_zgeqpf( lapack_int* m, lapack_int* n, lapack_complex_double* a, ++ lapack_int* lda, lapack_int* jpvt, ++ lapack_complex_double* tau, lapack_complex_double* work, ++ double* rwork, lapack_int *info ); ++ + #define LAPACK_cgeqp3 LAPACK_GLOBAL(cgeqp3,CGEQP3) + void LAPACK_cgeqp3( + lapack_int const* m, lapack_int const* n, +@@ -3617,6 +3639,47 @@ void LAPACK_zggrqf( + lapack_complex_double* work, lapack_int const* lwork, + lapack_int* info ); + ++#define LAPACK_sggsvd LAPACK_GLOBAL(sggsvd,SGGSVD) ++lapack_int LAPACKE_sggsvd( int matrix_layout, char jobu, char jobv, char jobq, ++ lapack_int m, lapack_int n, lapack_int p, ++ lapack_int* k, lapack_int* l, float* a, ++ lapack_int lda, float* b, lapack_int ldb, ++ float* alpha, float* beta, float* u, lapack_int ldu, ++ float* v, lapack_int ldv, float* q, lapack_int ldq, ++ lapack_int* iwork ); ++ ++#define LAPACK_dggsvd LAPACK_GLOBAL(dggsvd,DGGSVD) ++lapack_int LAPACKE_dggsvd( int matrix_layout, char jobu, char jobv, char jobq, ++ lapack_int m, lapack_int n, lapack_int p, ++ lapack_int* k, lapack_int* l, double* a, ++ lapack_int lda, double* b, lapack_int ldb, ++ double* alpha, double* beta, double* u, ++ lapack_int ldu, double* v, lapack_int ldv, double* q, ++ lapack_int ldq, lapack_int* iwork ); ++ ++#define LAPACK_cggsvd LAPACK_GLOBAL(cggsvd,CGGSVD) ++lapack_int LAPACKE_cggsvd( int matrix_layout, char jobu, char jobv, char jobq, ++ lapack_int m, lapack_int n, lapack_int p, ++ lapack_int* k, lapack_int* l, ++ lapack_complex_float* a, lapack_int lda, ++ lapack_complex_float* b, lapack_int ldb, ++ float* alpha, float* beta, lapack_complex_float* u, ++ lapack_int ldu, lapack_complex_float* v, ++ lapack_int ldv, lapack_complex_float* q, ++ lapack_int ldq, lapack_int* iwork ); ++ ++#define LAPACK_zggsvd LAPACK_GLOBAL(zggsvd,ZGGSVD) ++lapack_int LAPACKE_zggsvd( int matrix_layout, char jobu, char jobv, char jobq, ++ lapack_int m, lapack_int n, lapack_int p, ++ lapack_int* k, lapack_int* l, ++ lapack_complex_double* a, lapack_int lda, ++ lapack_complex_double* b, lapack_int ldb, ++ double* alpha, double* beta, ++ lapack_complex_double* u, lapack_int ldu, ++ lapack_complex_double* v, lapack_int ldv, ++ lapack_complex_double* q, lapack_int ldq, ++ lapack_int* iwork ); ++ + #define LAPACK_cggsvd3 LAPACK_GLOBAL(cggsvd3,CGGSVD3) + void LAPACK_cggsvd3( + char const* jobu, char const* jobv, char const* jobq, +@@ -3679,6 +3742,43 @@ void LAPACK_zggsvd3( + lapack_int* iwork, + lapack_int* info ); + ++#define LAPACK_sggsvp LAPACK_GLOBAL(sggsvp,SGGSVP) ++lapack_int LAPACKE_sggsvp( int matrix_layout, char jobu, char jobv, char jobq, ++ lapack_int m, lapack_int p, lapack_int n, float* a, ++ lapack_int lda, float* b, lapack_int ldb, float tola, ++ float tolb, lapack_int* k, lapack_int* l, float* u, ++ lapack_int ldu, float* v, lapack_int ldv, float* q, ++ lapack_int ldq ); ++ ++#define LAPACK_dggsvp LAPACK_GLOBAL(dggsvp,DGGSVP) ++lapack_int LAPACKE_dggsvp( int matrix_layout, char jobu, char jobv, char jobq, ++ lapack_int m, lapack_int p, lapack_int n, double* a, ++ lapack_int lda, double* b, lapack_int ldb, ++ double tola, double tolb, lapack_int* k, ++ lapack_int* l, double* u, lapack_int ldu, double* v, ++ lapack_int ldv, double* q, lapack_int ldq ); ++ ++#define LAPACK_cggsvp LAPACK_GLOBAL(cggsvp,CGGSVP) ++lapack_int LAPACKE_cggsvp( int matrix_layout, char jobu, char jobv, char jobq, ++ lapack_int m, lapack_int p, lapack_int n, ++ lapack_complex_float* a, lapack_int lda, ++ lapack_complex_float* b, lapack_int ldb, float tola, ++ float tolb, lapack_int* k, lapack_int* l, ++ lapack_complex_float* u, lapack_int ldu, ++ lapack_complex_float* v, lapack_int ldv, ++ lapack_complex_float* q, lapack_int ldq ); ++ ++#define LAPACK_zggsvp LAPACK_GLOBAL(zggsvp,ZGGSVP) ++lapack_int LAPACKE_zggsvp( int matrix_layout, char jobu, char jobv, char jobq, ++ lapack_int m, lapack_int p, lapack_int n, ++ lapack_complex_double* a, lapack_int lda, ++ lapack_complex_double* b, lapack_int ldb, ++ double tola, double tolb, lapack_int* k, ++ lapack_int* l, lapack_complex_double* u, ++ lapack_int ldu, lapack_complex_double* v, ++ lapack_int ldv, lapack_complex_double* q, ++ lapack_int ldq ); ++ + #define LAPACK_cggsvp3 LAPACK_GLOBAL(cggsvp3,CGGSVP3) + void LAPACK_cggsvp3( + char const* jobu, char const* jobv, char const* jobq, diff --git a/lasem/CVE-2013-7447.patch b/lasem/CVE-2013-7447.patch new file mode 100644 index 0000000..0f58958 --- /dev/null +++ b/lasem/CVE-2013-7447.patch @@ -0,0 +1,28 @@ +From 6f2feed780d9139a45c06e1ad399d06a4f351fbf Mon Sep 17 00:00:00 2001 +From: RyuzakiKK +Date: Sat, 5 Aug 2017 21:40:55 +0200 +Subject: cairo: Avoid integer overflow CVE-2013-7447 + +lasem is affected by a possible integer overflow, that was also +found and patched upstream in gtk+ +https://git.gnome.org/browse/gtk+/commit/?id=894b1ae76a32720f4bb3d39cf460402e3ce331d6 +--- + src/lsmcairo.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/lsmcairo.c b/src/lsmcairo.c +index c568fd5..73fb93e 100644 +--- a/src/lsmcairo.c ++++ b/src/lsmcairo.c +@@ -528,7 +528,7 @@ lsm_cairo_set_source_pixbuf (cairo_t *cairo, + format = CAIRO_FORMAT_ARGB32; + + cairo_stride = cairo_format_stride_for_width (format, width); +- cairo_pixels = g_malloc (height * cairo_stride); ++ cairo_pixels = g_malloc_n (height, cairo_stride); + surface = cairo_image_surface_create_for_data ((unsigned char *)cairo_pixels, + format, + width, height, cairo_stride); +-- +cgit v0.12 + diff --git a/lasem/PKGBUILD b/lasem/PKGBUILD new file mode 100644 index 0000000..f80dd11 --- /dev/null +++ b/lasem/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=lasem +pkgver=0.4.4 +pkgrel=1 +pkgdesc='SVG and Mathml rendering library' +arch=('i686' 'x86_64') +url='https://wiki.gnome.org/Projects/Lasem' +license=('GPL-2') +depends=('gtk') +makedepends=('intltool' 'python' 'gettext-tiny') +options=('!libtool') +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:3}/$pkgname-$pkgver.tar.xz + CVE-2013-7447.patch) +sha512sums=('3f78f6892715b0aabc1c6b16b4ab45c00227fcbd155ebed6a1e84af907d1ce3934c0a9db3f0c25c5e52a092ab58442b9b18a027dbcaae15e5e6dbe8d0d085480' + '25f771fe5455c032198125eebd8acf3847db5fe7ddbc6261bfab3b3b586210cb507c6085ef562239787730e3b56411f31020fba8d189d3b0bdf3820a296caa42') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i ../CVE-2013-7447.patch +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ + --disable-static + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + mv "$pkgdir/usr/doc" "$pkgdir/usr/share/doc" + + # removing references towards gtk-doc + rm -rf "${pkgdir}"/usr/share/gtk-doc + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lbreakout2/PKGBUILD b/lbreakout2/PKGBUILD new file mode 100644 index 0000000..e32c9b6 --- /dev/null +++ b/lbreakout2/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgname=lbreakout2 +pkgver=2.6.5 +_debver=2.6.5 +_debrel=2 +pkgrel=1 +pkgdesc="A breakout game with nice effects, graphics, and sounds" +arch=('i686' 'x86_64') +url="http://lgames.sourceforge.net" +license=('GPL-2') +depends=('sdl_mixer' 'libpng') +makedepends=('quilt') +backup=('var/games/lbreakout2/lbreakout2.hscr') +groups=('games') +source=(https://downloads.sourceforge.net/lgames/${pkgname}-${pkgver/_/-}.tar.gz + https://deb.debian.org/debian/pool/main/l/lbreakout2/lbreakout2_${_debver}-${_debrel}.debian.tar.xz + lbreakout2.desktop + lbreakout2.png) +sha512sums=('45c54bc9401131c96eba5fdcc08ca1324904fb50d3967acf7f29034045cbcd4c1d0b65f38eb33d8aace4cfe35f2a2e7a6c2319e4a6d6a1b41274dbe293a1747b' + 'fa85b83141118c6bf0d52a69f9c8f538147e81638d9824fe2ec4b2e91de8f1f2a19284436bfc17a260616ad9501b9811f405b2817634b0fafa0d3834a94a1bd8' + '3f626522ed6ae48bc14f94e02ccb498cbc6154c2261ab7148fc8d640fd88bfc550f83f5bdd834771c8235a5d71afdda804aecae5e5a912b68f423bdc50e23968' + '10894aac98b87eb586d7ee5dd9ca935742d091426a293d504e6ea7d1fa7781b855df728345531d883eaf3dffdf2b983fa21a544494f11f5472d16cb3a511472a') + +prepare() { + cd ${pkgname}-${pkgver/_/-} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver/_/-} + + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games \ + --localstatedir=/var/games/lbreakout2 + make +} + +package() { + cd ${pkgname}-${pkgver/_/-} + + make DESTDIR="${pkgdir}"/ doc_dir=/usr/share/doc install + + mv "${pkgdir}/usr/share/games/locale" "${pkgdir}/usr/share" + rm -rf "${pkgdir}/usr/share/games/"{applications,icons} + + chmod -R 755 "${pkgdir}"/usr + chown root:games "${pkgdir}"/var/games + chmod 775 "${pkgdir}"/var/games + chown root:games "${pkgdir}"/var/games/lbreakout2 + chmod 755 "${pkgdir}"/var/games/lbreakout2 + chown root:games "${pkgdir}"/var/games/lbreakout2/lbreakout2.hscr + chmod 775 "${pkgdir}"/var/games/lbreakout2/lbreakout2.hscr + + install -Dm644 "${srcdir}"/lbreakout2.png "${pkgdir}"/usr/share/pixmaps/lbreakout2.png + install -Dm644 "${srcdir}"/lbreakout2.desktop "${pkgdir}"/usr/share/applications/lbreakout2.desktop + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lbreakout2/lbreakout2.desktop b/lbreakout2/lbreakout2.desktop new file mode 100644 index 0000000..c8ef945 --- /dev/null +++ b/lbreakout2/lbreakout2.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Encoding=UTF-8 +Name=Linux Breakout 2 +Comment=Breakout and Arkanoid style arcade game +Icon=/usr/share/pixmaps/lbreakout2.png +TryExec=lbreakout2 +Exec=lbreakout2 +Terminal=false +Categories=Application;Game; diff --git a/lbreakout2/lbreakout2.png b/lbreakout2/lbreakout2.png new file mode 100644 index 0000000000000000000000000000000000000000..f9541e1842bad41cf496141a3412eaf75fb45a28 GIT binary patch literal 1930 zcmd5+{a4a=82$Pw8=_KuOHf**RAi;h2rbdbP*K51k*v_($S|2wLSaE#GD9UY^QC5{ z8_clbq@uJ&4a*AC)Ep~!qS98&-puvluuy6APwaHhd7k^+bDkgWFZUKFuwp!sSR@2N zo^i2JY$peO9>fIa-t@q&34$g-3Gtk0ryL(2bBqm+eRw!FI^cNOI{MONv(~=rEV2}M zDVRV+1-ofLoeF+Q16{cue;&jcvjB$(c)`GCskGl$+xv8XpH7od!Qhn~1_1w#j}JHo z?mF&X8@*<<8?`p=z8Cw#>ce0OjLJsAA{dd0m?57rTR9soMbl2x$S24k1<)?iD&JQ6 zm-+)HFnll!*~h>Z0G5G;p>Z4Kf;AF80AQnBSY|%nY;QH%%zT9)Xn8P^%9iVtM!UJ& zZZ*6!vPE1h9=l4oK~yWX*sOvwQ3#8ILc_@tZdvnjwlJB_V-Tq%6pW&$Op2DGrvW z#Pu3<)>~$yUS~Fyyc}q@+b%im9YaILE_035+}dk2bSriWSj&h+d|lBt%TYx~tHxn7 zzIl1ZsMGf9YC9x+BPUA9W9Sw9Ud_>FWu8$dH|Z74CGz!L+A&e8iOXo+oTTTnj0U+* zD?P5@Y1woGgTf{eNC9|$bg(LLW?gtd9-pNu*i>DSsjkjGrIFAW}wWzkXqVC1AA0O*rINDzTUB2YpWP@Etw2nitsEbu2_r_FQz z0DuPohlX)DG!Bc#VqqAb3Zp!b0DSr)ab|c!J_NZyJK3zHFVf)uX9`Lh`D(7S4_tW6 zm?)^ob!Mznxb28tCwB7ZI~Jn1e@k^X2PQ6R1t+%cb;ZXpPNH|)?ch5P!mg>p=t=a> znzNn3`rpsTj%srIy$p44z*DOaBz zq~#o9pf1Iv`9d5Qg?Q>MDJkI9wsLO-mAjF_4D1z*kL~*U^6JLZr;m0<^t|#^?2q_5 zw{*pf%ph-1DQQCflTczoTh973ao;}LUF+_*IN*`e-E~eu)!yN5!jaI4;Si=H8>rA% z!YHs0BH^t%yz}O@Vbi2jGi%&D+*!*f(%ngyCO(=MUX|}#Q0PvnY4JrcRs7|wHzSiV zH$4g>p4nWv@q}~h($B92^Kv*9`A`qQgmVQUg+43!{_UAVEf9H8+ZaZ>`LUyT%lXWY zN(5Qv(x^&pl6G;)DK3pEEt{WcyAn0xB12%xg=k^_Suv_r|4?Qdy1!iJ_xQ@y$ikmW zI=SCR#2k)}nRWQXh^F537oz9`X4!A~tn1g!HL6vy@$viT5X|#x7}VT>%v2K)2(QW|w~)7# zLa$>>lU&p9zP5xN$oXgWpPV17XqNHI!`9)iCZ7|F#5+Xdw;!KpXYJwcT3J(6`lilk zQva2)^+~0DA`z)B^Dhm$CFu?O+u;X|s!pX^x|?z?>>wAZh2+#7f4D~o;oM}c3vGb>PB LG%HF^+a&)Fhg>wM literal 0 HcmV?d00001 diff --git a/lbreakouthd/PKGBUILD b/lbreakouthd/PKGBUILD new file mode 100644 index 0000000..9308b4e --- /dev/null +++ b/lbreakouthd/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=lbreakouthd +pkgver=1.1.9 +pkgrel=1 +pkgdesc="Scalable 16:9 remake of LBreakout2" +arch=('i686' 'x86_64') +url='https://lgames.sourceforge.io/LBreakoutHD/' +license=('GPL-3') +depends=('sdl2' 'sdl2_ttf' 'sdl2_image' 'sdl2_mixer') +makedepends=('automake') +groups=('games') +source=("https://downloads.sourceforge.net/project/lgames/${pkgname}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('c3a51cd0c57c87133423912de2b4e9411bc8eff5220288d484851db30299cdfec8c6b044b90702896bbd374678da1cf6e663ab9a75555ff58323149b55169ec3') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + cp $(ls -td /usr/share/automake-* | head -n1)/config.guess . + sed -i 's|-Wno-format||g' configure +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + CFLAGS="${CFLAGS}" ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games \ + --localstatedir=/var/games/lbreakouthd + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" install + mv "${pkgdir}/usr/share/games/"{applications,icons} "${pkgdir}/usr/share" + + chown root:games "${pkgdir}"/var/games + chmod 775 "${pkgdir}"/var/games + chown root:games "${pkgdir}"/var/games/lbreakouthd + chmod 755 "${pkgdir}"/var/games/lbreakouthd + chown root:games "${pkgdir}"/var/games/lbreakouthd/lbreakouthd.hscr + chmod 775 "${pkgdir}"/var/games/lbreakouthd/lbreakouthd.hscr + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lcms2/PKGBUILD b/lcms2/PKGBUILD new file mode 100644 index 0000000..536d4cc --- /dev/null +++ b/lcms2/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=lcms2 +pkgver=2.9 +_debver=2.9 +_debrel=4 +pkgrel=2 +pkgdesc='Small-footprint color management engine, version 2' +arch=('i686' 'x86_64') +url='https://www.littlecms.com/' +license=('Expat') +depends=('libtiff') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/sourceforge/lcms/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/l/lcms2/lcms2_$_debver-$_debrel.debian.tar.xz") +sha512sums=('70b1c51fa8d137d5072425e580745ff1fbf49c6e8bb1da0a8adb0647d3b7c095208793cb02de1e8d1a01363b8575fa60c61bedbff99bbec57a44228239cb00e5' + '0f3527accbf235dc642b3b3f082414c7e5ccce043d94b07fe323ec8aa9982e658ade3a35503931d777a43abecad9c055ece193772af6094145c7ac3194cda338') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr + make +} + +check() { + cd ${pkgname}-${pkgver} + + make check +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -D -m0644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/ldb/PKGBUILD b/ldb/PKGBUILD new file mode 100644 index 0000000..6bcfb23 --- /dev/null +++ b/ldb/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=ldb +pkgver=2.2.3 +_debver=$pkgver +_debrel=2 +pkgrel=1 +epoch=1 +pkgdesc="Schema-less, ldap like, API and database" +arch=('i686' 'x86_64') +url='https://ldb.samba.org/' +license=('GPL-3' 'LGPL-3' 'Expat' 'Modified-BSD') +depends=('talloc' 'tdb' 'popt' 'lmdb') +makedepends=('python' 'cmocka' 'docbook-xsl' 'tevent' 'quilt') +optdepends=('python: for python bindings') +source=(https://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/l/ldb/ldb_${_debver}-${_debrel}~deb11u2.debian.tar.xz) +sha512sums=('0fdda9e033cbd04d6b50c76ecf044068353d2abf50c5c9d9c804b8b9e70f6d85bf925ac984a38c2b7a159a384bfc94e5232b05a32cdbc9299dc43930d1b6a985' + '35d7c3b6b623655d72cb3f8909d79a0c22c7db82ae748d1ea1dfe26b68b3375b8a3f757688712d575bfbf87f0611f06f9cc91a083e6d3392a1a38cafb2b876c2') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --disable-rpath \ + --disable-rpath-install \ + --bundled-libraries=NONE \ + --builtin-libraries=replace \ + --with-modulesdir=/usr/lib/ldb/modules \ + --with-privatelibdir=/usr/lib/ldb + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ldoc/PKGBUILD b/ldoc/PKGBUILD new file mode 100644 index 0000000..494dc1e --- /dev/null +++ b/ldoc/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=ldoc +pkgver=1.4.6 +pkgrel=1 +pkgdesc='LuaDoc-compatible documentation generation system' +url='https://stevedonovan.github.com/ldoc/' +arch=('any') +license=('Expat') +depends=('lua' 'lua-penlight') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/stevedonovan/ldoc/archive/${pkgver}.tar.gz) +sha512sums=('bcaddba4e462a4fb0aa0d8fcff390de3f195fa5cc569d8f05b84ad0fff900f5ac945be7a2eb15cf5ca60cc462f02c874579e4a19e33776178a04104ef9d944af') + +package() { + cd LDoc-${pkgver} + + # install library + install -dm 755 "${pkgdir}/usr/share/lua/5.3" + cp -a ldoc "${pkgdir}/usr/share/lua/5.3" + + # install binaries + install -Dm 755 ldoc.lua "${pkgdir}/usr/bin/ldoc.lua" + ln -s ldoc.lua "${pkgdir}/usr/bin/ldoc" + + # copy docs + install -Dm 644 readme.md doc/doc.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 COPYRIGHT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/ledger/PKGBUILD b/ledger/PKGBUILD new file mode 100644 index 0000000..ff871e2 --- /dev/null +++ b/ledger/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=ledger +pkgver=3.3.0 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Double-entry accounting system with a command-line reporting interface" +arch=('i686' 'x86_64') +url='https://ledger-cli.org' +license=('Modified-BSD') +depends=('boost-libs' 'libedit' 'mpfr') +makedepends=('boost' 'cmake' 'python' 'quilt') +optdepends=('python: python library') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/ledger/ledger/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/l/ledger/ledger_${_debver}-${_debrel}.debian.tar.xz" + "https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-docs-${pkgver}.tar.gz"{,.sig}) +sha512sums=('2de12b46dbc770dd615fbb8a3ad951102fdf63d0de03920000361b4e8c1ef001f3f0b76911d92ec5d9ef79d6c486c9969c372f27eddc9f2e227388d4d9b7641f' + '74456e810c203c44f145e54d646fb4d8657bb0f2f2e905bf370c7017a135ccdab15016c642c7e44b0846e3f703af72eff15c289338409afbd31b3bdbfc5fc8bc' + '73d36cf6c103cab598ad039cfae64aa13c379195c49e790e48c6c8d2380f64b587d95e9b9e21c443b06ad98b88eb7d9eb2c09a9dcbc396fe2caddc9479a9f274' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + + cmake . \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DCMAKE_INSTALL_LIBDIR:PATH=lib \ + -DUSE_PYTHON:BOOL=TRUE + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/$pkgname-docs/"{ledger.1.html,ledger3.html,ledger3.pdf} -t "$pkgdir/usr/share/doc/$pkgname" + install -Dm644 "$srcdir/$pkgname-docs/ledger3.info" -t "$pkgdir/usr/share/info" + install -Dm644 LICENSE.md -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/legalcode.txt b/legalcode.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/legalcode.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/lemonbar/PKGBUILD b/lemonbar/PKGBUILD new file mode 100644 index 0000000..4530706 --- /dev/null +++ b/lemonbar/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=lemonbar +pkgver=1.4 +pkgrel=1 +pkgdesc="A lightweight bar based on xcb" +arch=('i686' 'x86_64') +url='https://github.com/LemonBoy/bar' +license=('Expat') +depends=('libxcb') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/LemonBoy/bar/archive/v${pkgver}.tar.gz") +sha512sums=('2e516298854ad4ebf3dd4b67e933f0dca46a23cfb4146ef1737f26d937c582d0f9ce93b62ce094a7e456d55bd6273168f664c284c48c9637c8ed08f032799b14') + +build() { + cd "bar-${pkgver}" + make +} + +package() { + cd "bar-${pkgver}" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -D -m644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/lensfun/PKGBUILD b/lensfun/PKGBUILD new file mode 100644 index 0000000..b6ac027 --- /dev/null +++ b/lensfun/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=lensfun +pkgver=0.3.2 +pkgrel=1 +_debver=0.3.2 +_debrel=6 +pkgdesc='Database of photographic lenses and a library that allows advanced access to the database' +arch=(i686 x86_64) +url='https://lensfun.github.io/' +license=(GPL-3 LGPL-3 CC-BY-SA-3.0) # software, libraries and database +depends=(glib2) # libpng is only required for lenstools build +optdepends=('python: for lensfun-update-data and lensfun-add-adapter') +makedepends=(cmake doxygen python-docutils quilt) +source=($pkgname-$pkgver.tar.gz::https://github.com/$pkgname/$pkgname/archive/refs/tags/v$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/l/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz + COPYING.CC_BY-SA_3.0::https://creativecommons.org/licenses/by-sa/3.0/legalcode.txt) +sha512sums=('9c6f546fa70e6dc692e66ef378447345be6d3383812934780d326d772d775c1918cbf3447cd91c067655044cf659025763bf47ba2d938a82a3c2de4d60127446' + '62fa1d853b90480a4788549be02b63872c3bd8ce8c43542f29bcf66b0729d48caf7db5729203387327866c17abd508872aea25e1d8493e3dd9eb635bddca1130' + '2635a3dd63d647420f31346be165fe0481f9606b1676653b1201f7725e61c25c2daead810e12c3358724e24dd6b09327cd33a0ec93b3c0d47a629138e12c45e6') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + cmake . \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_DOC=OFF \ + -DBUILD_FOR_SSE=ON \ + -DBUILD_FOR_SSE2=ON \ + -DBUILD_LENSTOOL=OFF # disabled, due Makefile2 error + make -v all +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + install -Dm644 docs/gpl-3.0.txt -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 docs/lgpl-3.0.txt -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 ../COPYING.CC_BY-SA_3.0 -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/leptonica/PKGBUILD b/leptonica/PKGBUILD new file mode 100644 index 0000000..8385942 --- /dev/null +++ b/leptonica/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=leptonica +pkgver=1.79.0 +_debver=$pkgver +_debrel=1.1 +pkgrel=2 +pkgdesc="Software that is broadly useful for image processing and image analysis applications" +arch=('i686' 'x86_64') +url='http://www.leptonica.com/' +license=('Simplified-BSD') +depends=('giflib' 'libjpeg-turbo' 'libpng' 'libtiff' 'zlib') +makedepends=('quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/DanBloomberg/leptonica/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/l/leptonlib/leptonlib_${_debver}-${_debrel}+deb11u1.debian.tar.xz") +sha512sums=('d7ade3b559ff7597117f6a798c4c9881877b412915fbf1732557c6ffb0d700ba769872ea3191acb7c7bfd85b40a41593ec3dc7d752b11b97281cea79d7d3fb63' + 'c22351bd19f933bfd64e25d921b1ac61e411e2f51f9cd6ca5434dec1cfb21bf88bf7783835316099e90c1f8d29b5199ec548dce2a8275e22b26b76df769f607a') + +prepare() { + cd "$srcdir"/leptonica-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + ./autogen.sh +} + +build() { + cd "$srcdir"/leptonica-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir"/leptonica-${pkgver} + make DESTDIR="$pkgdir" install + install -Dm755 leptonica-license.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/lesstif/PKGBUILD b/lesstif/PKGBUILD new file mode 100644 index 0000000..da28a6f --- /dev/null +++ b/lesstif/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=lesstif +pkgver=0.95.2 +pkgrel=1 +pkgdesc="Free and libre implementation of Motif" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/lesstif/' +license=('LGPL-2') +depends=('freetype2' 'libxt' 'libxp') +options=('!makeflags' '!buildflags') +conflicts=('openmotif') +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "property-64bit.diff") +sha512sums=('228c032e00998f774af4677e8af442b6d29eb0781a6cea27ad200fe2d89997dea8326df75000befbd976007c92a886b043a13cefda2b772d4ac7a9958dc58e99' + '59ca8af545a6b74cf54b03a21dc5b63b5e4fbe3e0a992f603eeb9094c84b59a295bdfc74d2fc20fa548da97802b7170e19d49bc674c5620e39984fa1ad1badd6') + +prepare() { + cd ${pkgname}-${pkgver} + + patch -p1 -i "${srcdir}"/property-64bit.diff +} + +build() { + cd ${pkgname}-${pkgver} + + CFLAGS="$CFLAGS -L${srcdir}/${pkgname}-${pkgver}/lib/Xm-2.1/.libs" + ./configure --prefix=/usr \ + --enable-production \ + --enable-nonstandard-conversions \ + --enable-editres \ + --with-xdnd \ + --enable-build-21 \ + --disable-debug + + # fix linkage against already installed version + perl -pi -e 's/^(hardcode_into_libs)=.*/$1=no/' libtool + + make + + # fix linkage against already installed version + for f in $(find . -name \*.la -type f) ; do + perl -pi -e 's/^(relink_command=.*)/# $1/' $f + done + + make -C lib/Mrm-2.1 +} + +package() { + cd ${pkgname}-${pkgver} + + make -C lib/Mrm-2.1 DESTDIR="${pkgdir}" install + make DESTDIR="${pkgdir}" appdir=/usr/share/X11/app-defaults rootdir=/usr/share/doc/LessTif install + install -Dm644 COPYING.LIB -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/lftp/PKGBUILD b/lftp/PKGBUILD new file mode 100644 index 0000000..526e8aa --- /dev/null +++ b/lftp/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=lftp +pkgver=4.9.2 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Sophisticated command line based FTP client" +arch=('i686' 'x86_64') +url='https://lftp.yar.ru/' +license=('GPL-3') +depends=('gcc-libs' 'readline' 'gnutls' 'expat' 'sh' 'hicolor-icon-theme') +makedepends=('quilt') +optdepends=('perl: needed for convert-netscape-cookies and verify-file') +backup=('etc/lftp.conf') +source=("https://lftp.yar.ru/ftp/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/l/lftp/lftp_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('cda8698e7e34d748715a6fe5dc06c758240302621c7957402f0cc67577acf1a96b436fda4282408dee8171dc84a31e0be432df99a30f0a10057a8e7ea9ec64ad' + 'c50e5e8482b02a8d2f65759f37a12bb2038180651e8d641b3e5c14feb03f71d7d7518a597cfc44b1a6b025e60d17e673518167b0348edc56e0d95babc0aa9b19') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --with-gnutls \ + --without-openssl \ + --without-included-regex \ + --disable-static + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/lib + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lgeneral/PKGBUILD b/lgeneral/PKGBUILD new file mode 100644 index 0000000..eae468b --- /dev/null +++ b/lgeneral/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=lgeneral +pkgver=1.4.4 +pkgrel=1 +pkgdesc="A turn-based strategy game" +arch=('i686' 'x86_64') +url='https://lgames.sourceforge.net/LGeneral/' +license=('GPL-2' 'CC-BY-SA-3.0') +depends=('sdl_mixer' 'hicolor-icon-theme') +makedepends=('intltool' 'gettext-tiny') +install=$pkgname.install +groups=('games') +source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "http://downloads.sourceforge.net/${pkgname}/kukgen-data-1.1.tar.gz" + "$pkgname.png") +sha512sums=('d1028e999c5420477ed02521ea8bd32dd7481067f3b6f25545b367c082cd740e6c950f1383bc0aa33c345a380ed2abb9f2b5285b60d429bdb48972ce5fca34b2' + '239c59924943627ab7ef3dac3283884cf34c8a299bc8974aae0ddcf180c95dcecd6e1b3eb1c69b5db39dbfa86e027649343df5fdfe655709a3b817f08575a546' + '4405768da909f3e15921ddf5b3f6b1cc859ed33c66301ba55c97b1050b5edf1e90def519a91caa051540b73875ed563338558f7774f84a4dcfc4ec5ed22c675f') + +prepare() { + mv "lgeneral-data-1.1-d4d831b06c39a4d20dd0a96d0a89e3d50f22e69a" "kukgen-data" +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + # correct package-structure, delete non-free data + mkdir -p ${pkgdir}/usr/share/games/lgeneral + mkdir -p ${pkgdir}/usr/share/licenses/$pkgname + cp -pR ${srcdir}/kukgen-data ${pkgdir}/usr/share/games/lgeneral/kukgen-data + mv ${pkgdir}/usr/share/games/applications ${pkgdir}/usr/share + rm -rf ${pkgdir}/usr/share/games/icons + rm -rf ${pkgdir}/usr/share/games/lgeneral/campaigns/PG + + # fix icon and add licenses + install -Dm644 ${srcdir}/$pkgname.png -t ${pkgdir}/usr/share/pixmaps + install -Dm644 COPYING ${srcdir}/kukgen-data/LICENSE -t ${pkgdir}/usr/share/licenses/$pkgname +} diff --git a/lgeneral/lgeneral.install b/lgeneral/lgeneral.install new file mode 100644 index 0000000..c943c7a --- /dev/null +++ b/lgeneral/lgeneral.install @@ -0,0 +1,8 @@ +post_install() { + echo "Installing LGeneral data files ..." + cp -npr /usr/share/games/lgeneral/kukgen-data/{campaigns,gfx,maps,nations,scenarios,sounds,units} /usr/share/games/lgeneral +} + +post_upgrade() { + post_install +} diff --git a/lgeneral/lgeneral.png b/lgeneral/lgeneral.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d7b0d1a54ed6a61eb22007825e717d1edcfa38 GIT binary patch literal 1253 zcmV5Fij>C}3bv zU~nLy;J|@`0|5sP6c`#B90)jIa3J7-K!HJkK!AY20|o*H3k(cA;{r+Bwc_h3ZLZf& z_04!>f7-Wt-@ZS)GIZ$Bp+kob9XkAfarOdp9KOMvt?^eMW}Qy64Au8A+X8?v2wr0T z*7%|2xP$x2i=6#_PhR9?A`HAfL*EA=FLL{7+BtK*7}~7RLDt6p7{Vn|1bhbGl%`)qFjfXUcu>3xWufI6? z(D!-Fa{vOZ8QZ)J3_njMM* zns7C|0lq4({3q*viF>I@G z{mOB`a!np!;5-lhh`<4`&Ohd5Zr7`<8k5uxiU>)P*!yuD^I0|`JMd+6iFu8Tu6{D209Kc$H*V8Eg zucuS|uvA}E0z9qlYQ}MFQ%_`L(_=Ck!81G88F08L4T++No9VdBabSF1KBU+09~s@w zW;Oz@h&YaUJ)Is!pkC=hgq~82s@!j49LMA$ye;dbwTLsE2xzSt1|E-DVT;N0dJMdQ zHQ1WHExLy^MXEH}8pA+q)*?sO8cHeN-@f4?&AAAD9@3m#gsaPd{jSG+u>c?p!)J*& ziU5?wrnM$bQ=lxG$22`E#*H!fT9a4lQ3^XQysa_z>Y`2~w|LK$ViZNJ(v&n!`8c0H zO8~A2rPPz6?JH%wi<|oct&bc$#k;lhCA)fY>gPT;0yPfTlL=82wXtiB+NojS@!Kl1 z+%WJ^JrA=hP(2TTPf23!+KOmGEa3gF$EK0TK^5}m4w{K@5&DR1 z>~48gwbL5)n7WvoxLbY(+DE`{WOw)X{5qSFI$``4=qbg{7<-N4m}I#G%DuuE!!NhD zt>-%`;w(+s8Dn=!w}+pCr}fEur}$G`uWA^D$dM3${ch*__f-J^hv4$^N&jAppp>%h zukP{9Gfd5&8o#Qd>hiU1A;NVW^Kr3YJe{&i5-y{N#ryZI1RNFdKx=mO8Ku!S-H5D3 zY`9(iOXKU-?DBOh4Z@HQvl-**ln=8ReWhAE?+!Y=o6j-EFuT2_rxZaLk|qg$7}8gY zVO5N45mwa!&eQq{Kd8<;E?+OkDSm5=-5-K5B#I)GQgso3Rmcyn^BZIE!;qaZq)CET zrG-)oUu*m-9oz$*%h!%Ic{jCOeo#d*2t$G}L{(>fV+`-+bKaFZ@}IuJow)+)bItce zeUxdtD<8d)^_4n$LHQnNzQBA9wgz6_l^4T5`ZrC74jnpl=+L3Ve+j<>idmZz_ literal 0 HcmV?d00001 diff --git a/lhasa/PKGBUILD b/lhasa/PKGBUILD new file mode 100644 index 0000000..dcda0eb --- /dev/null +++ b/lhasa/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=lhasa +pkgver=0.3.1 +pkgrel=2 +pkgdesc="Free and libre LZH/LHA archive tool" +url='https://github.com/fragglet/lhasa' +arch=('i686' 'x86_64') +license=('Expat') +depends=('glibc') +conflicts=('lha') +provides=('lha') +source=("https://github.com/fragglet/lhasa/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('6e4797aaa054f2ecd25069b32b809ab0111d0179adfd9c676e0609d69efbcc968ec6dce67fbd8ce6bccc102d09ee69996805a5542882b432731e3c273f132c05') + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libao/0001-Check-memory-allocations-for-success.patch b/libao/0001-Check-memory-allocations-for-success.patch new file mode 100644 index 0000000..c7d41fa --- /dev/null +++ b/libao/0001-Check-memory-allocations-for-success.patch @@ -0,0 +1,193 @@ +From d5221655dfd1a2156aa6be83b5aadea7c1e0f5bd Mon Sep 17 00:00:00 2001 +From: Ron +Date: Sat, 13 Jan 2018 20:19:20 +1030 +Subject: [PATCH 1/2] Check memory allocations for success + +Adds some missing checks spotted by eye in a visual review while looking +into the details of https://bugs.debian.org/870608 +--- + src/audio_out.c | 58 +++++++++++++++++++++++++++++++----------- + src/plugins/macosx/ao_macosx.c | 2 +- + src/plugins/sndio/ao_sndio.c | 3 +++ + 3 files changed, 47 insertions(+), 16 deletions(-) + +diff --git a/src/audio_out.c b/src/audio_out.c +index bd8f6fc..f5942d6 100644 +--- a/src/audio_out.c ++++ b/src/audio_out.c +@@ -634,6 +634,10 @@ static char *_sanitize_matrix(int maxchannels, char *matrix, ao_device *device){ + char *ret = calloc(strlen(matrix)+1,1); /* can only get smaller */ + char *p=matrix; + int count=0; ++ ++ if(!ret) ++ return NULL; ++ + while(countp && isspace(*(t-1)))t--; + + ret[count] = calloc(t-p+1,1); ++ if(!ret[count]){ ++ _free_map(ret); ++ return NULL; ++ } + memcpy(ret[count],p,t-p); + count++; + if(!*h)break; +@@ -755,16 +774,6 @@ static char **_tokenize_matrix(char *matrix){ + } + + return ret; +- +-} +- +-static void _free_map(char **m){ +- char **in=m; +- while(m && *m){ +- free(*m); +- m++; +- } +- if(in)free(in); + } + + static unsigned int _matrix_to_channelmask(int ch, char *matrix, char *premap, int **mout){ +@@ -772,7 +781,14 @@ static unsigned int _matrix_to_channelmask(int ch, char *matrix, char *premap, i + char *p=matrix; + int *perm=(*mout=malloc(ch*sizeof(*mout))); + int i; +- char **map = _tokenize_matrix(premap); ++ char **map; ++ ++ if(!perm) ++ return 0; ++ ++ map = _tokenize_matrix(premap); ++ if(!map) ++ return 0; + + for(i=0;ioutput_matrix, + &device->input_map); + int channels = _channelmask_bits(mask); +- if(channels<0){ ++ if(channels<=0){ + aerror("Unable to map any channels from input matrix to output"); + errno = AO_EBADFORMAT; + goto error; +@@ -1060,7 +1082,7 @@ static ao_device* _open_device(int driver_id, ao_sample_format *format, + device->output_matrix, + &device->input_map); + int channels = _channelmask_bits(mask); +- if(channels<0){ ++ if(channels<=0){ + aerror("Unable to map any channels from input matrix to output"); + errno = AO_EBADFORMAT; + goto error; +@@ -1111,6 +1133,10 @@ static ao_device* _open_device(int driver_id, ao_sample_format *format, + int count=0; + device->inter_permute = calloc(device->output_channels,sizeof(int)); + ++ if (!device->inter_permute) { ++ errno = AO_EFAIL; ++ goto error; ++ } + adebug("\n"); + + while(countoutput_channels){ +@@ -1157,8 +1183,10 @@ static ao_device* _open_device(int driver_id, ao_sample_format *format, + for(i=0;ioutput_channels;i++) + if(device->inter_permute[i]==j)break; + if(i==device->output_channels){ +- adebug("input %d (%s)\t -> none\n", +- j,inch[j]); ++ if(inch){ ++ adebug("input %d (%s)\t -> none\n", ++ j,inch[j]); ++ } + unflag=1; + } + } +diff --git a/src/plugins/macosx/ao_macosx.c b/src/plugins/macosx/ao_macosx.c +index a3daf1b..129020d 100644 +--- a/src/plugins/macosx/ao_macosx.c ++++ b/src/plugins/macosx/ao_macosx.c +@@ -594,11 +594,11 @@ int ao_plugin_open(ao_device *device, ao_sample_format *format) + internal->firstValidByteOffset = 0; + internal->validByteCount = 0; + internal->buffer = malloc(internal->bufferByteCount); +- memset(internal->buffer, 0, internal->bufferByteCount); + if (!internal->buffer) { + aerror("Unable to allocate queue buffer.\n"); + return 0; + } ++ memset(internal->buffer, 0, internal->bufferByteCount); + + /* limited to stereo for now */ + //if(!device->output_matrix) +diff --git a/src/plugins/sndio/ao_sndio.c b/src/plugins/sndio/ao_sndio.c +index ec251fb..e23fd47 100644 +--- a/src/plugins/sndio/ao_sndio.c ++++ b/src/plugins/sndio/ao_sndio.c +@@ -67,6 +67,9 @@ int ao_plugin_device_init(ao_device *device) + { + ao_sndio_internal *internal; + internal = (ao_sndio_internal *) calloc(1,sizeof(*internal)); ++ if (internal == NULL) ++ return 0; ++ + internal->id=-1; + device->internal = internal; + device->output_matrix_order = AO_OUTPUT_MATRIX_FIXED; +-- +2.12.2 + diff --git a/libao/0002-ao_example-free-buffer.patch b/libao/0002-ao_example-free-buffer.patch new file mode 100644 index 0000000..1c3f16b --- /dev/null +++ b/libao/0002-ao_example-free-buffer.patch @@ -0,0 +1,25 @@ +From 20dc8ed9fa4605f5c25e7496ede42e8ba6468225 Mon Sep 17 00:00:00 2001 +From: Tristan Matthews +Date: Sat, 29 Dec 2018 15:47:27 -0500 +Subject: [PATCH 2/2] ao_example: free buffer + +Fixes #3 +--- + doc/ao_example.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/doc/ao_example.c b/doc/ao_example.c +index a2764c3..053a577 100644 +--- a/doc/ao_example.c ++++ b/doc/ao_example.c +@@ -83,5 +83,7 @@ int main(int argc, char **argv) + + ao_shutdown(); + ++ free(buffer); ++ + return (0); + } +-- +2.12.2 + diff --git a/libao/PKGBUILD b/libao/PKGBUILD new file mode 100644 index 0000000..edd42c8 --- /dev/null +++ b/libao/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=libao +pkgver=1.2.2 +pkgrel=2 +pkgdesc='Cross-platform audio output library and plugins' +url='https://xiph.org/ao/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('alsa-lib' 'libsndio') +optdepends=('sndio: sndio audio backend') +backup=('etc/libao.conf') +source=("$pkgname-$pkgver.tar.gz::https://github.com/xiph/$pkgname/archive/$pkgver.tar.gz" + 'libao.conf' + '0001-Check-memory-allocations-for-success.patch' + '0002-ao_example-free-buffer.patch' + 'patch-src_plugins_sndio_ao_sndio_c.patch') +sha512sums=('d2736d25b60862e7d7469611ce31b1df40a4366ab160e2ff1b46919ae91692d1596c8468e4f016303b306fc3ac1bddc7b727f535a362f403c3fe7c6532e9045a' + '7064b123b0a4827241e1554752344b97202d5d5c9522c5e126aba25548e3218237828aa2e5fa5b4c2d0354833bf15f894d189372a82e7cc96d395cfcbc9bd323' + '09bc3b90a6403563d2b9628aa81210e41c2935b0141fb164be60c6b82a38a16cc4f6a307df2d543d5001a740757e78de9778f8342aaeae9a8a57a190e2cdb753' + 'e5a95c772a66f7631c6f7cf9d6872b1e867836599b548076d8ec689363cee4649b3234b41e2e553905c2223434dba632ae064eafb4ce1a2e6c04c7626ca687be' + '4753de36a6a222e1dd6fc3e0ff38950373b2c53c22905724e1c8db4fa799ef0c34115f4e7b7e438622e2dd5be619de6585776f2946888a4bede45612478ca23a') + +conflicts=('libao-pulse') +provides=("libao-pulse=${pkgver}-${pkgrel}") +replaces=('libao-pulse') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + patch -p1 -i ../0001-Check-memory-allocations-for-success.patch + patch -p1 -i ../0002-ao_example-free-buffer.patch + patch -p0 -i ../patch-src_plugins_sndio_ao_sndio_c.patch + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --enable-alsa-mmap \ + --disable-pulse + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}"/libao.conf "${pkgdir}"/etc/libao.conf + install -Dm644 COPYING "${pkgdir}"/usr/share/licenses/${pkgname}/COPYING +} diff --git a/libao/libao.conf b/libao/libao.conf new file mode 100644 index 0000000..7a37f07 --- /dev/null +++ b/libao/libao.conf @@ -0,0 +1,4 @@ +default_driver=alsa +dev=hw:0 +#default_driver=sndio +#dev=snd/0 diff --git a/libao/patch-src_plugins_sndio_ao_sndio_c.patch b/libao/patch-src_plugins_sndio_ao_sndio_c.patch new file mode 100644 index 0000000..76925b9 --- /dev/null +++ b/libao/patch-src_plugins_sndio_ao_sndio_c.patch @@ -0,0 +1,59 @@ +$OpenBSD: patch-src_plugins_sndio_ao_sndio_c,v 1.3 2014/05/27 19:44:56 naddy Exp $ +--- src/plugins/sndio/ao_sndio.c.orig Tue Feb 14 01:46:06 2012 ++++ src/plugins/sndio/ao_sndio.c Tue May 27 17:07:14 2014 +@@ -99,6 +99,7 @@ int ao_plugin_set_option(ao_device *device, const char + int ao_plugin_open(ao_device *device, ao_sample_format *format) + { + ao_sndio_internal *internal = (ao_sndio_internal *) device->internal; ++ struct sio_hdl *hdl; + struct sio_par par; + + if(!internal->dev && internal->id>=0){ +@@ -107,21 +108,27 @@ int ao_plugin_open(ao_device *device, ao_sample_format + internal->dev = strdup(buf); + } + +- internal->hdl = sio_open(internal->dev, SIO_PLAY, 0); +- if (internal->hdl == NULL) ++ hdl = sio_open(internal->dev, SIO_PLAY, 0); ++ if (hdl == NULL) + return 0; ++ internal->hdl = hdl; + + sio_initpar(&par); + par.sig = 1; +- par.le = SIO_LE_NATIVE; ++ if (format->bits > 8) ++ par.le = device->client_byte_format == AO_FMT_LITTLE ? 1 : 0; + par.bits = format->bits; + par.rate = format->rate; + par.pchan = device->output_channels; +- if (!sio_setpar(internal->hdl, &par)) ++ if (!sio_setpar(hdl, &par)) + return 0; +- device->driver_byte_format = AO_FMT_NATIVE; +- if (!sio_start(internal->hdl)) ++ if (!sio_getpar(hdl, &par)) + return 0; ++ if (par.bits != format->bits) ++ return 0; ++ device->driver_byte_format = par.le ? AO_FMT_LITTLE : AO_FMT_BIG; ++ if (!sio_start(hdl)) ++ return 0; + + if(!device->inter_matrix){ + /* set up matrix such that users are warned about > stereo playback */ +@@ -148,9 +155,10 @@ int ao_plugin_close(ao_device *device) + ao_sndio_internal *internal = (ao_sndio_internal *) device->internal; + struct sio_hdl *hdl = internal->hdl; + +- if(hdl) +- if (!sio_stop(hdl)) +- return 0; ++ if(hdl){ ++ sio_close(hdl); ++ internal->hdl = NULL; ++ } + return 1; + } + diff --git a/libart/PKGBUILD b/libart/PKGBUILD new file mode 100644 index 0000000..2632051 --- /dev/null +++ b/libart/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=libart +pkgver=2.3.21 +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="A library for high-performance 2D graphics" +url='https://www.levien.com/libart/' +arch=('i686' 'x86_64') +license=('LGPL-2') +makedepends=('quilt') +source=("https://download.gnome.org/sources/libart_lgpl/2.3/libart_lgpl-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/liba/libart-lgpl/libart-lgpl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('8a632a6a4da59e5e8c02ec2f5a57e36d182b325b46513765425e5f171ff9ae326af1b133725beba28f7e76654309e001aee9bace727b5b4c8589405256a3c020' + 'dfa26b816ebbecbc7b625210e0eba63bd81239a050d67797a05d13156d0b5ef99d796f8d759a9f76f0407afbeb8d17d329a2ca5776edc369764b018e7004c56c') + +prepare() { + cd "${srcdir}/libart_lgpl-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/libart_lgpl-${pkgver}" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "${srcdir}/libart_lgpl-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libass/PKGBUILD b/libass/PKGBUILD new file mode 100644 index 0000000..accb8eb --- /dev/null +++ b/libass/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=libass +pkgver=0.15.0 +pkgrel=1 +pkgdesc='A portable library for SSA/ASS subtitles rendering' +arch=('i686' 'x86_64') +url='https://github.com/libass/libass/' +license=('ISC') +depends=('fontconfig' 'fribidi' 'glib2' 'glibc' 'harfbuzz' + 'freetype2') +makedepends=('nasm') +source=("https://github.com/libass/libass/releases/download/${pkgver}/libass-${pkgver}.tar.xz") +sha512sums=('067ed519e64da7e2e45436bb09e390f1a77d966aeb9420729f36c9725d89491655ead69eb61b43f3220b8ff8f9de3891911b62757466f843ab13ee7149d88459') + +build() { + cd libass-${pkgver} + + ./configure \ + --prefix='/usr' \ + --enable-harfbuzz \ + --enable-fontconfig + make +} + +package() { + cd libass-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm 644 COPYING -t "${pkgdir}"/usr/share/licenses/libass/ +} + +# vim: ts=2 sw=2 et: diff --git a/libb2/PKGBUILD b/libb2/PKGBUILD new file mode 100644 index 0000000..b5e2988 --- /dev/null +++ b/libb2/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=libb2 +pkgver=0.98.1 +_debver=$pkgver +_debrel=1.1 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc="Free and libre C library providing BLAKE2b, BLAKE2s, BLAKE2bp, BLAKE2sp hash functions" +url='https://blake2.net/' +license=('CC0-1.0') +depends=('gcc-libs') +makedepends=('quilt') +source=("https://github.com/BLAKE2/libb2/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libb/libb2/libb2_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e760972173bb9ff3562843882abbe9042af09da63f37a5706921381be2d64cc4d333aec65e1e676d5a45ace913417536a1dc188c90b394c2f7b9cae654dbb108' + 'dcc35643ae61e8e932bf5bee0031b554c316108283d4e1b4b63a53ea28eb88288f657073ca117cf9961b0fb12ed5919e837889956017e3549a794272c9cff63f') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --disable-static \ + --enable-shared \ + --disable-native \ + --enable-fat + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libbpf/PKGBUILD b/libbpf/PKGBUILD new file mode 100644 index 0000000..6a15bf1 --- /dev/null +++ b/libbpf/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=libbpf +pkgver=0.3 +pkgrel=3 +pkgdesc="Library for loading eBPF programs and reading and manipulating eBPF objects from user-space" +url='https://github.com/libbpf/libbpf' +arch=('i686' 'x86_64') +license=('LGPL-2.1' 'GPL-2') +depends=('glibc' 'libelf') +makedepends=('rsync') +source=("https://github.com/libbpf/libbpf/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "consolidate-lib-dirs.patch") +sha512sums=('91c3368626e731b5868fd1bb6d16bd049b2ed0d5cbf966647fa1069cf8c912d91f3d734f05353a0c16c8ff03790ca8e1e6515fff66e4a76d70ffdf2dbac6d8e3' + '1f19209278f7feaee27a8211f11851c3fe601e5a5c548c8b1bcf1aae7e17c0fe2933e07a3b5b38115c940949ca4c30ad669c618bad69fe2b3d8d1a4d91fecc1b') + +prepare() { + cd ${pkgname}-${pkgver} + patch -p1 -i ${srcdir}/consolidate-lib-dirs.patch +} + +build() { + cd ${pkgname}-${pkgver} + make NO_PKG_CONFIG=1 -C src +} + +package() { + cd ${pkgname}-${pkgver} + make -C src DESTDIR="${pkgdir}" install install_headers + install -Dm 644 LICENSE* -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm 644 README.md src/README.rst -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/libbpf/consolidate-lib-dirs.patch b/libbpf/consolidate-lib-dirs.patch new file mode 100644 index 0000000..50ed1e8 --- /dev/null +++ b/libbpf/consolidate-lib-dirs.patch @@ -0,0 +1,19 @@ +Alpine doesn't recognize lib64 directories by default, so we consolidate into lib. + +diff --git a/src/Makefile b/src/Makefile +index e9021fe..1d86ecd 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -54,11 +54,7 @@ INSTALL = install + + DESTDIR ?= + +-ifeq ($(shell uname -m),x86_64) +- LIBSUBDIR := lib64 +-else +- LIBSUBDIR := lib +-endif ++LIBSUBDIR := lib + + PREFIX ?= /usr + LIBDIR ?= $(PREFIX)/$(LIBSUBDIR) diff --git a/libbs2b/PKGBUILD b/libbs2b/PKGBUILD new file mode 100644 index 0000000..bc64403 --- /dev/null +++ b/libbs2b/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=libbs2b +pkgver=3.1.0 +_debver=3.1.0+dfsg +_debrel=2.2 +pkgrel=1 +pkgdesc="Bauer stereophonic-to-binaural DSP effect library" +url="http://bs2b.sourceforge.net" +arch=(i686 x86_64) +license=('Expat') +depends=(libsndfile gcc-libs) +makedepends=(quilt) +source=("https://downloads.sourceforge.net/sourceforge/bs2b/$pkgname-$pkgver.tar.lzma" + "https://deb.debian.org/debian/pool/main/libb/libbs2b/libbs2b_$_debver-$_debrel.debian.tar.xz") +sha512sums=('0192f37344763c582fbe6c6a5349a5694886543b7da8773c90500457b9123c0302fda16f7bbe0d532b5b8b5991a5e71492b1ba01ac6601bd78a355516a34a769' + '8852a9374ae758f88209021ffddf8cb38db2775be224127a141770ad8214261b6a1bc986405bb3a331f161c57aff9d67dcd456c507f72f5e7c12c20197aa2be7') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i 's/dist-lzma/dist-xz/g' configure.ac + autoreconf -fvi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +check() { + cd $pkgname-$pkgver + make check +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libbsd/PKGBUILD b/libbsd/PKGBUILD new file mode 100644 index 0000000..1e35404 --- /dev/null +++ b/libbsd/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=libbsd +pkgver=0.10.0 +pkgrel=1 +pkgdesc='Provides useful functions commonly found on BSD systems like strlcpy()' +arch=('i686' 'x86_64') +url="https://libbsd.freedesktop.org" +license=('Modified-BSD') +depends=('glibc') +options=('staticlibs') +source=("https://libbsd.freedesktop.org/releases/$pkgname-$pkgver.tar.xz"{,.asc}) +sha512sums=('b75529785b16c93d31401187f8a58258fbebe565dac071c8311775c913af989f62cd29d5ce2651af3ea6221cffd31cf04826577d3e546ab9ca14340f297777b9' + 'SKIP') +validpgpkeys=('4F3E74F436050C10F5696574B972BF3EA4AE57A3') # Guillem Jover + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +check() { + cd "$pkgname-$pkgver" + make check +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + rm "${pkgdir}"/usr/lib/libbsd.a + install -D -m644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + # included now in man-pages, FS#53351 + rm -f "${pkgdir}"/usr/share/man/man3/explicit_bzero.3 +} diff --git a/libbulletml/Makefile b/libbulletml/Makefile new file mode 100644 index 0000000..5f1c067 --- /dev/null +++ b/libbulletml/Makefile @@ -0,0 +1,59 @@ +INCLUDES = -I. -I../d_cpp +CXXFLAGS ?= -O2 -W -Wall -ansi -pedantic +CXXFLAGS += -ansi +CFLAGS ?= -O2 +prefix ?= /usr/local +VDIR = tinyxml + +includedir ?= $(prefix)/include +libdir ?= $(prefix)/lib + +MAJOR=0d2 +MINOR=0 + +VPATH=.:tinyxml +OBJS = bulletmlparser-tinyxml.o bulletmlparser.o bulletmltree.o calc.o \ + formula-variables.o bulletmlrunner.o bulletmlrunnerimpl.o bulletml_d.o +TINYXML = tinyxml.o tinyxmlerror.o tinyxmlparser.o + +all: bulletml.d libbulletml.a libbulletml.so.$(MAJOR).$(MINOR) + +libbulletml.a: $(OBJS) $(TINYXML) + $(AR) cru $@ $^ + +libbulletml.so.$(MAJOR).$(MINOR): $(OBJS) $(TINYXML) + $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -fPIC -fpic \ + -Wl,-soname,libbulletml.so.$(MAJOR) \ + -o $@ $^ + +bulletml.d: bulletml_d.cpp + perl ../d_cpp/create_d_import.pl bulletml_d.cpp bulletml.d + +clean: + rm -f calc.cpp libbulletml.a libbulletml.so.$(MAJOR).$(MINOR) *.o tinyxml/*.o + +calc.cpp: calc.yy + bison -y calc.yy -o calc.cpp + +$(OBJS) $(TINYXML): %.o: %.cpp + $(CXX) -c $(CXXFLAGS) -fPIC -fpic $(INCLUDES) $< + +doxy: + doxygen + +install: all + install -D -m 644 bulletml.d $(DESTDIR)/$(includedir)/d/bulletml.d + install -D -m 644 tinyxml/tinyxml.h \ + $(DESTDIR)/$(includedir)/bulletml/tinyxml/tinyxml.h + install -m 644 *.h $(DESTDIR)/$(includedir)/bulletml + install -d $(DESTDIR)/$(libdir) + install -m 644 libbulletml.a $(DESTDIR)/$(libdir) + install -m 644 libbulletml.so.$(MAJOR).$(MINOR) $(DESTDIR)/$(libdir) + ln -f -r -s \ + $(DESTDIR)/$(libdir)/libbulletml.so.$(MAJOR).$(MINOR) \ + $(DESTDIR)/$(libdir)/libbulletml.so.$(MAJOR) + ln -f -r -s \ + $(DESTDIR)/$(libdir)/libbulletml.so.$(MAJOR).$(MINOR) \ + $(DESTDIR)/$(libdir)/libbulletml.so + +.PHONY: all clean doxy install diff --git a/libbulletml/PKGBUILD b/libbulletml/PKGBUILD new file mode 100644 index 0000000..0db5b9b --- /dev/null +++ b/libbulletml/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=libbulletml +pkgver=0.0.6 +_debver=$pkgver +_debrel=7 +pkgrel=1 +pkgdesc="C++ library to handle the markup language BulletML easily" +arch=('i686' 'x86_64') +url='http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/index_e.html' +license=('GPL-2' 'zlib' 'Modified-BSD' 'Simplified-BSD') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/b/bulletml/bulletml_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/b/bulletml/bulletml_${_debver}-${_debrel}.debian.tar.xz" + "Makefile") +sha512sums=('916eff772459384bfbf9b646ebe267dc23f0d54dc2ac1d783fecefa6a212b09566bfc254609be3a0f0fe536fa8252b67ad4892f043d731a2a33b57b9544695e9' + '843158d73989df2bd0d2e8c6921c0e53572aea9f66118e1e80e587587b035cf4a2d0efe4556117be9f7c654bef4721b9593f9871d6482a73b35b25634afdade9' + 'ae7136201f4fa5c8225df55dc8c5719bf65f459926b21e07f6a77e00b7b51273c3d8761bcae44c05be2276826e2eda664e65808e59103564c8cd65d91e2a9316') + +prepare() { + cd bulletml + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + cp "${srcdir}/Makefile" src +} + +build() { + make -C bulletml/src +} + +package() { + cd bulletml + make -C src DESTDIR="$pkgdir" prefix=/usr install + + install -D -m 644 README "$pkgdir/usr/share/doc/libbulletml/README.jp" + install -m 644 README.en "$pkgdir/usr/share/doc/libbulletml" + install -m 644 README.bulletml "$pkgdir/usr/share/doc/libbulletml" + + install -D -m 644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libburn/PKGBUILD b/libburn/PKGBUILD new file mode 100644 index 0000000..53c906c --- /dev/null +++ b/libburn/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=libburn +pkgver=1.5.2 #.pl01 +_debver=1.5.2 +_debrel=1 +pkgrel=1 +pkgdesc="Library for reading, mastering and writing optical discs" +arch=('i686' 'x86_64') +url="https://dev.lovelyhq.com/libburnia" +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=(https://files.libburnia-project.org/releases/${pkgname}-${pkgver}.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/libb/libburn/libburn_$_debver-$_debrel.debian.tar.xz) +options=('!emptydirs') +sha512sums=('a8887907bbfcd9b743dfc2e8924cc9290d7af5a71651aeabfdc5874f2df076278ccdbc94f81efd6a720972f380512d330576739837ba685055ee717dd74797d3' + 'SKIP' + 'fc18d72287042d2631621d3650ac3425133ba3fa9b97ebc2e40ec79c472ad665e5a8b8bd71cf59fe63e40a838f9d7a5fe6a0eda9f52c5a2f41770cba1fbfa971') +validpgpkeys=('44BC9FD0D688EB007C4DD029E9CBDFC0ABC0A854') # Thomas Schmitt + +prepare() { + cd ${pkgname}-${pkgver/.pl01/} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver/.pl01/} + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd ${pkgname}-${pkgver/.pl01/} + make DESTDIR=${pkgdir} install + + for i in COPYING COPYRIGHT; do + install -Dm644 ${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done + + # Make symlinks for cdrkit/cdrtools/dvdrtools compatibility + ln -s cdrskin $pkgdir/usr/bin/cdrecord + ln -s cdrskin $pkgdir/usr/bin/dvdrecord + ln -s cdrskin $pkgdir/usr/bin/wodim + + ln -s cdrskin.1.gz $pkgdir/usr/share/man/man1/cdrecord.1.gz + ln -s cdrskin.1.gz $pkgdir/usr/share/man/man1/dvdrecord.1.gz + ln -s cdrskin.1.gz $pkgdir/usr/share/man/man1/wodim.1.gz +} diff --git a/libcaca/PKGBUILD b/libcaca/PKGBUILD new file mode 100644 index 0000000..3efb706 --- /dev/null +++ b/libcaca/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=libcaca +pkgver=0.99.beta19 +_debver=$pkgver +_debrel=2.1 +pkgrel=3 +pkgdesc="Color AsCii Art library" +arch=('i686' 'x86_64') +license=('WTFPL-2.0' 'LGPL-2.1') +url='http://caca.zoy.org/wiki/libcaca' +depends=('imlib2' 'ncurses') +makedepends=('quilt') +options=(!emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/libc/libcaca/libcaca_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/libc/libcaca/libcaca_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('780fc7684d40207cc10df3f87d6d8f1d47ddfffa0e76e41a5ce671b82d5c7f090facb054c3d49ca7c4ea1a619625bb9085ce52f837f50792b4a2d776a4c68e15' + '5635351db67126be7d9b215c8b224e3ff5fa08333fa95d1c560840a056c048c83203d17d9412068740e352e106bb49a7f3ce1552bc0ec9372bf4a5a3e3dae5f5') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --enable-shared \ + --disable-doc \ + --disable-cxx \ + --disable-gl \ + --disable-csharp \ + --disable-static + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + for i in COPYING{,.LGPL}; do + install -Dm644 ${i} "${pkgdir}/usr/share/licenses/libcaca/${i}" + done +} diff --git a/libcdio-paranoia/PKGBUILD b/libcdio-paranoia/PKGBUILD new file mode 100644 index 0000000..9fb0e5f --- /dev/null +++ b/libcdio-paranoia/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=libcdio-paranoia +pkgver=10.2+2.0.0 +pkgrel=3 +pkgdesc='CD paranoia libraries from libcdio' +arch=('i686' 'x86_64') +license=('GPL-3') +url='https://www.gnu.org/software/libcdio/' +depends=('libcdio') +source=(https://ftp.gnu.org/gnu/libcdio/${pkgname}-${pkgver}.tar.bz2) +sha512sums=('0398617f9af63632d74c5a93c4efae1bc69d339fb7ab2e36dbfa6d19c0940f3bf27ea3ed482698d2842838d2034df3e40304774f1648db8c274d441130ef40a2') + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr --enable-cpp-progs --disable-static --disable-example-progs + make +} + +package() { + cd "${pkgname}-${pkgver}" + make -j1 DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libcdio/PKGBUILD b/libcdio/PKGBUILD new file mode 100644 index 0000000..2facd9c --- /dev/null +++ b/libcdio/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=libcdio +pkgver=2.1.0 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="GNU Compact Disc Input and Control Library" +url='https://www.gnu.org/software/libcdio/' +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('ncurses' 'gcc-libs') +makedepends=('quilt') +source=("https://ftp.gnu.org/gnu/libcdio/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/libc/libcdio/libcdio_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('c290821da55fd9ae366670a58857aa6efcebc9f25b7caea063cf12f9cbda84fe770c5f59f972227fda50517ca58c5f39c0137daa0f93179e3daa45303d8b610f' + '35c6a59d99cb29f71d02d8ef000625dc51ccd15dd2f5f25bb8bf7f05b1743afa1b3b42e1c9884830cf89dde886dea9d9e08029c910e7fa386bf41284d14de8fa') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -fi +} + +build() { + export LDFLAGS+=" -Wl,--copy-dt-needed-entries" + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-vcd-info \ + --enable-cpp-progs \ + --disable-cddb \ + --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname + + if [[ ${pkgver%.*} != ${_debver%.*} ]]; then + sed -e "/define CDIO_LIBCDIO_SOURCE_PATH/s|.*|/* #undef CDIO_LIBCDIO_SOURCE_PATH */|" \ + -i "$pkgdir/usr/include/cdio/cdio_config.h" + fi +} diff --git a/libcerf/PKGBUILD b/libcerf/PKGBUILD new file mode 100644 index 0000000..61036f5 --- /dev/null +++ b/libcerf/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=libcerf +pkgver=1.3 +_debver=$pkgver +_debrel=2.1 +pkgrel=1 +pkgdesc="Self-contained numeric library that provides an efficient and accurate implementation of complex error functions" +arch=('i686' 'x86_64') +url='http://apps.jcns.fz-juelich.de/doku/sc/libcerf' +license=('Expat') +depends=('glibc') +makedepends=('cmake' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/libc/libcerf/libcerf_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/libc/libcerf/libcerf_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('274fa7f3b149bb27582a54a39fe76b478cd5acc6716dd0588a2f637b77c87a6bbc4f467b52bb067ebad2d1ba18750211cc71c6a6feef75fa08d01ac1dbf5dc56' + '446a32cdd1f5cf377d10725bd2248586b1a8b4dcc730b5fc6a12e893a26c214bb6630fc4111df5bf1d6fbcd5b25c04f8dc96f2291a68dc33584429ee0933b32a') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libconfig/PKGBUILD b/libconfig/PKGBUILD new file mode 100644 index 0000000..0635ace --- /dev/null +++ b/libconfig/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=libconfig +pkgver=1.5 +_debver=1.5 +_debrel=0.4 +pkgrel=4 +pkgdesc="C/C++ Configuration File Library" +arch=('i686' 'x86_64') +url="https://hyperrealm.com/libconfig/libconfig.html" +license=('LGPL-2.1') +depends=('gcc-libs' 'texinfo') +makedepends=('quilt') +options=('!emptydirs' 'zipman') +source=("https://github.com/hyperrealm/libconfig/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libc/libconfig/libconfig_$_debver-$_debrel.debian.tar.xz") +sha512sums=('f3a0a969d56604c473b004fd15e541569a6b7639a23db896e391d6280060c278f0adbae1da92bc2a9a55431e74a9312d7581cc47dc27d043a9ac3b045ae2a8a0' + 'b7702c056aecc73d0f5d7f4c2603d4b9694b5f0c312df2cfc08fbe2265d68f452444a746f0c34254303a1e9467e2686a1b0b9fc377d8cde74a91e22a8f2fe7c0') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches debian + + quilt push -av + fi + + autoreconf -vfi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + rm "$pkgdir/usr/share/info/dir" + + install -Dm644 COPYING.LIB "$pkgdir/usr/share/licenses/$pkgname/COPYING.LIB" +} + +# vim:set ts=2 sw=2 et: diff --git a/libcroco/PKGBUILD b/libcroco/PKGBUILD new file mode 100644 index 0000000..57a10dc --- /dev/null +++ b/libcroco/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=libcroco +pkgver=0.6.13 +pkgrel=2 +pkgdesc="A CSS parsing library" +url='https://gitlab.gnome.org/GNOME/libcroco' +arch=(i686 x86_64) +depends=(glib2 libxml2) +makedepends=(intltool) +license=(LGPL-2) +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:3}/$pkgname-$pkgver.tar.xz) +sha512sums=('038a3ac9d160a8cf86a8a88c34367e154ef26ede289c93349332b7bc449a5199b51ea3611cebf3a2416ae23b9e45ecf8f9c6b24ea6d16a5519b796d3c7e272d4') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + install -Dm644 COPYING.LIB -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libcss/PKGBUILD b/libcss/PKGBUILD new file mode 100644 index 0000000..2e5218c --- /dev/null +++ b/libcss/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=libcss +pkgver=0.9.1 +pkgrel=1 +pkgdesc='CSS parser and selection engine' +arch=('i686' 'x86_64') +url='https://www.netsurf-browser.org/projects/libcss/' +license=('Expat') +makedepends=('netsurf-buildsystem') +depends=('libparserutils>=0.2.4' 'libwapcaplet>=0.4.3') +source=("https://download.netsurf-browser.org/libs/releases/libcss-$pkgver-src.tar.gz") +sha512sums=('069b30e74ff03fc91666dd16f22a38effbb3e29f066fd0fbc09efdc26dd8678e3f31adeaf918c5596fb962c56335fb2ecdbde1aa6704fcbdec3c2f97d03e5bbe') + +prepare() { + sed -i 's,_BSD_SOURCE,_DEFAULT_SOURCE,' "$pkgname-$pkgver/Makefile" +} + +build() { + export CFLAGS="$CFLAGS -w" + make -C "$pkgname-$pkgver" \ + INCLUDEDIR=include \ + LIBDIR=lib \ + PREFIX=/usr \ + COMPONENT_TYPE=lib-shared +} + +package() { + export CFLAGS="$CFLAGS -w" + make -C "$pkgname-$pkgver" \ + INCLUDEDIR=include \ + LIBDIR=lib \ + PREFIX=/usr \ + DESTDIR="$pkgdir" \ + install + + install -Dm644 "$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libcue/PKGBUILD b/libcue/PKGBUILD new file mode 100644 index 0000000..35718e7 --- /dev/null +++ b/libcue/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=libcue +pkgver=2.2.1 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="Parses so-called cue sheets and handles the parsed data" +url='https://github.com/lipnitsk/libcue/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc') +makedepends=('cmake' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/lipnitsk/libcue/archive/v${pkgver}.tar.gz" + "https://security.debian.org/debian-security/pool/updates/main/libc/libcue/libcue_${_debver}-${_debrel}+deb12u1.debian.tar.xz") +sha512sums=('32e476cb09ed2cb2d64aaba1342fb91e77e448391b493a3a794a8d2a6723a0e6097a90b11c6ad82998cb7f270f4f18c2578d7b8575f6929c2a35502e09ebc964' + '30ca81473732bd74be49a9b64ee78762511527465dcb676920eb094de9689e3973eb671958a9e21e9afa4cee121ac39426885ba10aba008890f3402fc4c75568') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -S "${pkgname}-${pkgver}" \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_SHARED_LIBS=ON . + make -C build +} + +package() { + make DESTDIR="${pkgdir}" -C build install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/"LICENSE -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/libcurl3-gnutls/03_keep_symbols_compat.patch b/libcurl3-gnutls/03_keep_symbols_compat.patch new file mode 100644 index 0000000..b4b83da --- /dev/null +++ b/libcurl3-gnutls/03_keep_symbols_compat.patch @@ -0,0 +1,17 @@ +Description: Keep versioned symbols backwards compatibility. +Origin: vendor +Forwarded: not-needed +Author: Alessandro Ghedini +Last-Update: 2013-04-16 + +--- a/lib/libcurl.vers.in ++++ b/lib/libcurl.vers.in +@@ -6,7 +6,7 @@ + _save*; + }; + +-CURL_@CURL_LT_SHLIB_VERSIONED_FLAVOUR@4 ++CURL_@CURL_LT_SHLIB_VERSIONED_FLAVOUR@3 + { + global: curl_*; + local: *; diff --git a/libcurl3-gnutls/CVE-2023-38545.patch b/libcurl3-gnutls/CVE-2023-38545.patch new file mode 100644 index 0000000..9e149f7 --- /dev/null +++ b/libcurl3-gnutls/CVE-2023-38545.patch @@ -0,0 +1,140 @@ +From c736c1e678d1b81d895281e419e59d9c4e853071 Mon Sep 17 00:00:00 2001 +From: Jay Satiro +Date: Mon, 9 Oct 2023 15:37:31 -0400 +Subject: [PATCH] socks: return error if hostname too long for remote resolve + +Prior to this change the state machine attempted to change the remote +resolve to a local resolve if the hostname was longer than 255 +characters. Unfortunately that did not work as intended and caused a +security issue. + +This patch applies to curl versions 7.69.0 - 7.72.0. Other versions +that are affected take a different patch. Refer to the CVE advisory +for more information. + +Bug: https://curl.se/docs/CVE-2023-38545.html +--- + lib/socks.c | 8 +++--- + tests/data/Makefile.inc | 1 + + tests/data/test728 | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 76 insertions(+), 4 deletions(-) + create mode 100644 tests/data/test728 + +diff --git a/lib/socks.c b/lib/socks.c +index 0fb97e1..74064fe 100644 +--- a/lib/socks.c ++++ b/lib/socks.c +@@ -521,9 +521,9 @@ CURLcode Curl_SOCKS5(const char *proxy_user, + + /* RFC1928 chapter 5 specifies max 255 chars for domain name in packet */ + if(!socks5_resolve_local && hostname_len > 255) { +- infof(conn->data, "SOCKS5: server resolving disabled for hostnames of " +- "length > 255 [actual len=%zu]\n", hostname_len); +- socks5_resolve_local = TRUE; ++ failf(data, "SOCKS5: the destination hostname is too long to be " ++ "resolved remotely by the proxy."); ++ return CURLE_COULDNT_RESOLVE_HOST; + } + + if(auth & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI)) +@@ -835,7 +835,7 @@ CURLcode Curl_SOCKS5(const char *proxy_user, + + if(!socks5_resolve_local) { + socksreq[len++] = 3; /* ATYP: domain name = 3 */ +- socksreq[len++] = (char) hostname_len; /* one byte address length */ ++ socksreq[len++] = (unsigned char) hostname_len; /* one byte length */ + memcpy(&socksreq[len], hostname, hostname_len); /* address w/o NULL */ + len += hostname_len; + infof(data, "SOCKS5 connect to %s:%d (remotely resolved)\n", +diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc +index dfc7432..1281c39 100644 +--- a/tests/data/Makefile.inc ++++ b/tests/data/Makefile.inc +@@ -89,6 +89,7 @@ test662 test663 \ + \ + test700 test701 test702 test703 test704 test705 test706 test707 test708 \ + test709 test710 test711 test712 test713 test714 test715 test716 test717 \ ++test728 \ + \ + test800 test801 test802 test803 test804 test805 test806 test807 test808 \ + test809 test810 test811 test812 test813 test814 test815 test816 test817 \ +diff --git a/tests/data/test728 b/tests/data/test728 +new file mode 100644 +index 0000000..04dc2c7 +--- /dev/null ++++ b/tests/data/test728 +@@ -0,0 +1,71 @@ ++ ++ ++ ++HTTP ++HTTP GET ++SOCKS5 ++SOCKS5h ++followlocation ++ ++ ++ ++# ++# Server-side ++ ++# The hostname in this redirect is 256 characters and too long (> 255) for ++# SOCKS5 remote resolve. curl must return error CURLE_COULDNT_RESOLVE_HOST in ++# this case. ++ ++HTTP/1.1 301 Moved Permanently ++Location: http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/ ++Content-Length: 0 ++Connection: close ++ ++ ++ ++ ++# ++# Client-side ++ ++ ++proxy ++ ++ ++http ++socks5 ++ ++ ++SOCKS5h with HTTP redirect to hostname too long ++ ++ ++--no-progress-meter --location --proxy socks5h://%HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/728 ++ ++ ++ ++# ++# Verify data after the test has been "shot" ++ ++ ++^User-Agent:.* ++ ++ ++s/\r\n$/\n/ ++ ++ ++GET /728 HTTP/1.1 ++Host: %HOSTIP:%HTTPPORT ++Accept: */* ++ ++ ++ ++6 ++ ++# the error message is verified because error code ++# CURLE_COULDNT_RESOLVE_HOST (6) may be returned for any number of reasons and ++# we need to make sure it is specifically for the reason below so that we know ++# the check is working. ++ ++curl: (6) SOCKS5: the destination hostname is too long to be resolved remotely by the proxy. ++ ++ ++ +-- +2.7.4 + diff --git a/libcurl3-gnutls/PKGBUILD b/libcurl3-gnutls/PKGBUILD new file mode 100644 index 0000000..17e579a --- /dev/null +++ b/libcurl3-gnutls/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=libcurl3-gnutls +pkgver=7.72.0 +pkgrel=2 +pkgdesc="An URL retrieval library (linked against gnutls) with libcurl3 versioned symbols" +arch=('i686' 'x86_64') +url='https://curl.haxx.se' +license=('Expat') +depends=('curl' 'glibc' 'gnutls' 'libpsl' 'nettle' 'zlib' 'libssh2') +options=('strip') +conflicts=('libcurl-gnutls') +provides=('libcurl-gnutls') +source=("https://curl.haxx.se/download/curl-${pkgver}.tar.gz"{,.asc} + "03_keep_symbols_compat.patch" + "CVE-2023-38545.patch") +sha512sums=('f1946394595baa2b2889c4fed5e8745036cecfe9c425010c41fbc4baa71ffd7ff3e78289dd7ee14f0c74c482056838e5408d63f9ee9ee06c31ed920282f08507' + 'SKIP' + '596c227bb5ede8182831c5c92b3ac7b74b770f51fae99277e2aabb02d38b7a5d4d06003731042ab5403ca89e719827d7080c3a179e29ef08b41a1993a7788a33' + '6e4303f35589d36053d38192bfafdc4fdbb91e491f7ef4bac7193a7ddc0958242d10ffe92c1b3a04bb474bb81db5435619f0c76c1830c0e769465f81a1246c29') +validpgpkeys=('27EDEAF22F3ABCEB50DB9A125CC908FDB71E12C2') # Daniel Stenberg + +prepare() { + cd curl-${pkgver} + + patch -p1 < ${srcdir}/03_keep_symbols_compat.patch + patch -p1 < ${srcdir}/CVE-2023-38545.patch +} + +build() { + cd curl-${pkgver} + + ./configure \ + --prefix='/usr' \ + --disable-ldap \ + --disable-ldaps \ + --disable-manual \ + --enable-versioned-symbols \ + --enable-ipv6 \ + --enable-threaded-resolver \ + --without-gssapi \ + --with-libssh2 \ + --without-libidn \ + --without-ssl \ + --with-gnutls='/usr' \ + --with-random='/dev/urandom' \ + --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt' + + make -C lib +} + +package() { + cd curl-${pkgver} + + make -C lib DESTDIR="${pkgdir}" install + + mv "${pkgdir}"/usr/lib/libcurl{,-gnutls}.so.4.6.0 + rm "${pkgdir}"/usr/lib/libcurl.{a,so}* + for version in 3 4 4.0.0 4.1.0 4.2.0 4.3.0 4.4.0 4.5.0; do + ln -s libcurl-gnutls.so.4.6.0 "${pkgdir}"/usr/lib/libcurl-gnutls.so.${version} + done + + # license + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libdatrie/PKGBUILD b/libdatrie/PKGBUILD new file mode 100644 index 0000000..cca0784 --- /dev/null +++ b/libdatrie/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libdatrie +pkgver=0.2.12 +pkgrel=1 +pkgdesc="Implementation of double-array structure for representing trie, as proposed by Junichi Aoe." +url="https://linux.thai.net/projects/datrie" +license=('LGPL-2.1') +arch=('i686' 'x86_64') +depends=('glibc') +options=('!emptydirs') +source=(https://linux.thai.net/pub/thailinux/software/libthai/${pkgname}-${pkgver}.tar.xz) +sha512sums=('7cf17859331d6111679e2c6fe0fa256abb13187b0b1116c8225f066281ab852f847a0d2d0d42b9604faf1d56290909fe3386362e34ed5bd1109516dffa2775a1') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/libdbi-drivers/PKGBUILD b/libdbi-drivers/PKGBUILD new file mode 100644 index 0000000..4629521 --- /dev/null +++ b/libdbi-drivers/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=libdbi-drivers +pkgver=0.9.0 +_debver=$pkgver +_debrel=9 +pkgrel=2 +pkgdesc="Database drivers for libdbi (PostgreSQL and SQLite)" +url='http://libdbi-drivers.sourceforge.net/' +license=('LGPL-2.1') +arch=('i686' 'x86_64') +depends=('libdbi') +makedepends=('postgresql-libs' 'sqlite' 'quilt') +optdepends=('postgresql-libs: To work with PostgreSQL using libdbdpgsql' + 'sqlite: To work with SQLite using libdbdsqlite3') +source=("https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libd/libdbi-drivers/libdbi-drivers_$_debver-$_debrel.debian.tar.xz") +sha512sums=('f4d3aaa71014697c53012a10bf9f0af398bcf5ee5872af165f8f43a682d2fb3045a9172ffea0e068dcbfcad52494878c037d8d90fadfaf176936e42f7f1e85c1' + '95a81900ba9e690e29ee8a0ae3b27888d826b74294152118bea06aef4624cde1f9e8e707d142097107c184ab4941642294b72986147438b6053dd0ccc99ccbf2') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --localstatedir=/var \ + --disable-docs \ + --without-mysql \ + --with-pgsql \ + --with-sqlite3 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libdbi/PKGBUILD b/libdbi/PKGBUILD new file mode 100644 index 0000000..cc18f21 --- /dev/null +++ b/libdbi/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=libdbi +pkgver=0.9.0 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc="Database independant abstraction layer for C" +url='https://libdbi.sourceforge.net/' +license=('LGPL-2.1') +arch=('i686' 'x86_64') +depends=('glibc') +makedepends=('quilt') +options=(!emptydirs) +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libd/libdbi/libdbi_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ee8777195af43057409d051a6055ec0467cd926d48da076458b09f91d2f0995a1cc4bc071762e401b7bdcd8a4173fd8ea3472db3a1518e34b4c5b5ed24e4e2ce' + '7053df9ed2319e081d22d5df218a65d74119bf6fb71899a233434081800ffea786ae51ae2c90365fb91ae54682f7b8774dd7cd6817c26d815f79e6300380ce27') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + make +} + +package() { + cd $pkgbase-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libdca/PKGBUILD b/libdca/PKGBUILD new file mode 100644 index 0000000..f89bb7b --- /dev/null +++ b/libdca/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=libdca +pkgver=0.0.7 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Free software library for decoding DTS Coherent Acoustics streams" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://www.videolan.org/developers/libdca.html' +depends=('sh' 'libsndio') +makedepends=('quilt') +provides=('libdts') +replaces=('libdts') +options=('!emptydirs') +source=("https://download.videolan.org/pub/videolan/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/libd/libdca/libdca_${_debver}-${_debrel}.debian.tar.xz" + "sndio.patch") +sha512sums=('dae15d77d066687c882833d5bed8d65a585c1fc0277b7276563c89ddd5a83b35389ec94cca445f38af28a9b01430b72647e9afd1b08f030959e711de1a08924a' + '2776028a318216e548eb3655ac145e1e0b81518ddba5d97610c044908b2b38364fb0b65d120222c641a7bdae91e99886dc495ca7e7c50275f2259364a0c94c78' + '0e61c60a728cefd7c847e4cc4d04254386204c82eab213f23b907aebc6f6bc092c1f5278fbaa84d2046c4ff050b9be079c4155202a2d2813e3a19d6c038b1751') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -p1 -i $srcdir/sndio.patch + ./bootstrap +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --disable-static + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + + rm -f "${pkgdir}/usr/share/man/man1"/{extract_dts,dtsdec}.1 + ln -s dcadec.1.gz "${pkgdir}/usr/share/man/man1/dtsdec.1.gz" + ln -s extract_dca.1.gz "${pkgdir}/usr/share/man/man1/extract_dts.1.gz" + rm -f "${pkgdir}/usr/lib/libdts.a" +} diff --git a/libdca/sndio.patch b/libdca/sndio.patch new file mode 100644 index 0000000..7d6f34d --- /dev/null +++ b/libdca/sndio.patch @@ -0,0 +1,237 @@ +diff --git a/configure.ac b/configure.ac +index 71108fc..53b6e3d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -147,6 +147,15 @@ if test x"$enable_oss" != x"no"; then + esac + fi + ++dnl check for sndio ++AC_ARG_ENABLE([sndio], ++ [ --disable-sndio make a version not using sndio]) ++if test x"$enable_sndio" != x"no"; then ++ AC_DEFINE([LIBAO_SNDIO],,[libao sndio support]) ++ AC_CHECK_LIB([sndio],[sio_initpar], ++ [LIBAO_LIBS="$LIBAO_LIBS -lsndio"]) ++fi ++ + dnl check for solaris + AC_ARG_ENABLE([solaris-audio], + [ --disable-solaris-audio make a version not using solaris audio]) +diff --git a/libao/Makefile.am b/libao/Makefile.am +index 39c8a80..77ed9a0 100644 +--- a/libao/Makefile.am ++++ b/libao/Makefile.am +@@ -3,7 +3,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include + + noinst_LTLIBRARIES = libao.la + libao_la_SOURCES = audio_out.c audio_out_null.c audio_out_float.c \ +- audio_out_oss.c audio_out_solaris.c audio_out_al.c \ ++ audio_out_oss.c audio_out_sndio.c audio_out_solaris.c audio_out_al.c \ + audio_out_win.c audio_out_wav.c audio_out_aif.c \ + audio_out_peak.c convert2s16.c \ + audio_out_internal.h +diff --git a/libao/audio_out.c b/libao/audio_out.c +index 8de05b1..5240992 100644 +--- a/libao/audio_out.c ++++ b/libao/audio_out.c +@@ -34,6 +34,10 @@ extern ao_open_t ao_oss_open; + extern ao_open_t ao_ossdolby_open; + extern ao_open_t ao_oss4_open; + extern ao_open_t ao_oss6_open; ++extern ao_open_t ao_sndio_open; ++extern ao_open_t ao_sndiodolby_open; ++extern ao_open_t ao_sndio4_open; ++extern ao_open_t ao_sndio6_open; + extern ao_open_t ao_solaris_open; + extern ao_open_t ao_solarisdolby_open; + extern ao_open_t ao_al_open; +@@ -62,6 +66,12 @@ static ao_driver_t audio_out_drivers[] = { + {"oss4", ao_oss4_open}, + {"oss6", ao_oss6_open}, + #endif ++#ifdef LIBAO_SNDIO ++ {"sndio", ao_sndio_open}, ++ {"sndiodolby", ao_sndiodolby_open}, ++ {"sndio4", ao_sndio4_open}, ++ {"sndio6", ao_sndio6_open}, ++#endif + #ifdef LIBAO_SOLARIS + {"solaris", ao_solaris_open}, + {"solarisdolby", ao_solarisdolby_open}, +diff --git b/libao/audio_out_sndio.c b/libao/audio_out_sndio.c +new file mode 100644 +index 0000000..e3908d3 +--- /dev/null ++++ b/libao/audio_out_sndio.c +@@ -0,0 +1,170 @@ ++/* ++ * audio_out_sndio.c ++ * Copyright (C) 2000-2003 Michel Lespinasse ++ * Copyright (C) 1999-2000 Aaron Holtzman ++ * ++ * This file is part of a52dec, a free ATSC A-52 stream decoder. ++ * See http://liba52.sourceforge.net/ for updates. ++ * ++ * a52dec is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * a52dec is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the ++ * Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ */ ++ ++#include "config.h" ++ ++#ifdef LIBAO_SNDIO ++ ++#include ++#include ++#include ++#include ++ ++#include "dca.h" ++#include "audio_out.h" ++#include "audio_out_internal.h" ++ ++typedef struct sndio_instance_s { ++ ao_instance_t ao; ++ struct sio_hdl *hdl; ++ int sample_rate; ++ int set_params; ++ int flags; ++} sndio_instance_t; ++ ++static int sndio_setup (ao_instance_t * _instance, int sample_rate, int * flags, ++ level_t * level, sample_t * bias) ++{ ++ sndio_instance_t * instance = (sndio_instance_t *) _instance; ++ ++ if ((instance->set_params == 0) && (instance->sample_rate != sample_rate)) ++ return 1; ++ instance->sample_rate = sample_rate; ++ ++ *flags = instance->flags; ++ *level = CONVERT_LEVEL; ++ *bias = CONVERT_BIAS; ++ ++ return 0; ++} ++ ++static int sndio_play (ao_instance_t * _instance, int flags, sample_t * _samples) ++{ ++ sndio_instance_t * instance = (sndio_instance_t *) _instance; ++ int16_t int16_samples[256*6]; ++ int chans = -1; ++ ++#ifdef LIBDCA_DOUBLE ++ convert_t samples[256 * 6]; ++ int i; ++ ++ for (i = 0; i < 256 * 6; i++) ++ samples[i] = _samples[i]; ++#else ++ convert_t * samples = _samples; ++#endif ++ ++ chans = channels_multi (flags); ++ flags &= DCA_CHANNEL_MASK | DCA_LFE; ++ ++ if (instance->set_params) { ++ struct sio_par par; ++ ++ sio_initpar(&par); ++ par.bits = 16; ++ par.sig = 1; ++ par.le = SIO_LE_NATIVE; ++ par.pchan = chans; ++ par.rate = instance->sample_rate; ++ if (!sio_setpar(instance->hdl, &par) || !sio_setpar(instance->hdl, &par)) { ++ fprintf (stderr, "Can not set audio parameters\n"); ++ return 1; ++ } ++ if (par.bits != 16 || par.sig != 1 || par.le != SIO_LE_NATIVE || ++ par.pchan != chans || par.rate != instance->sample_rate) { ++ fprintf (stderr, "Unsupported audio parameters\n"); ++ return 1; ++ } ++ instance->flags = flags; ++ instance->set_params = 0; ++ sio_start(instance->hdl); ++ } else if ((flags == DCA_DOLBY) && (instance->flags == DCA_STEREO)) { ++ fprintf (stderr, "Switching from stereo to dolby surround\n"); ++ instance->flags = DCA_DOLBY; ++ } else if ((flags == DCA_STEREO) && (instance->flags == DCA_DOLBY)) { ++ fprintf (stderr, "Switching from dolby surround to stereo\n"); ++ instance->flags = DCA_STEREO; ++ } else if (flags != instance->flags) ++ return 1; ++ ++ convert2s16_multi (samples, int16_samples, flags); ++ sio_write (instance->hdl, int16_samples, 256 * sizeof (int16_t) * chans); ++ ++ return 0; ++} ++ ++static void sndio_close (ao_instance_t * _instance) ++{ ++ sndio_instance_t * instance = (sndio_instance_t *) _instance; ++ ++ sio_close (instance->hdl); ++} ++ ++static ao_instance_t * sndio_open (int flags) ++{ ++ sndio_instance_t * instance; ++ ++ instance = (sndio_instance_t *) malloc (sizeof (sndio_instance_t)); ++ if (instance == NULL) ++ return NULL; ++ ++ instance->ao.setup = sndio_setup; ++ instance->ao.play = sndio_play; ++ instance->ao.close = sndio_close; ++ ++ instance->sample_rate = 0; ++ instance->set_params = 1; ++ instance->flags = flags; ++ ++ instance->hdl = sio_open (SIO_DEVANY, SIO_PLAY, 0); ++ if (instance->hdl == NULL) { ++ fprintf (stderr, "Can not open " SIO_DEVANY " device\n"); ++ free (instance); ++ return NULL; ++ } ++ ++ return (ao_instance_t *) instance; ++} ++ ++ao_instance_t * ao_sndio_open (void) ++{ ++ return sndio_open (DCA_STEREO); ++} ++ ++ao_instance_t * ao_sndiodolby_open (void) ++{ ++ return sndio_open (DCA_DOLBY); ++} ++ ++ao_instance_t * ao_sndio4_open (void) ++{ ++ return sndio_open (DCA_2F2R); ++} ++ ++ao_instance_t * ao_sndio6_open (void) ++{ ++ return sndio_open (DCA_3F2R | DCA_LFE); ++} ++ ++#endif diff --git a/libde265/PKGBUILD b/libde265/PKGBUILD new file mode 100644 index 0000000..50d78ab --- /dev/null +++ b/libde265/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=libde265 +pkgver=1.0.11 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Free and libre h.265 video codec implementation" +arch=('i686' 'x86_64') +url='https://github.com/strukturag/libde265' +license=('LGPL-3') +depends=('gcc-libs') +makedepends=('ffmpeg' 'sdl' 'qt-base' 'quilt') +optdepends=('ffmpeg: for sherlock265' + 'qt-base: for sherlock265' + 'sdl: dec265 YUV overlay output') +source=("https://github.com/strukturag/libde265/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libd/libde265/libde265_${_debver}-${_debrel}+deb12u2.debian.tar.xz") +sha512sums=('2ce28558c66e20714c07bf3011bc10dccabb770649903616bc32f1c4f18beba559ef7e0e42365ead77d7e813316b8c051039dc393cd351221cbab7248b3fa34c' + '45128028a97d4e89e70e898a2e036a61a27e662b68384cbe3fe8a8dd3616b076c1c5d527af2784f9fabf98833db089e5b7823504f070eeb85cc5bdc68bbae2e8') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-static=no + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/libdmx/PKGBUILD b/libdmx/PKGBUILD new file mode 100644 index 0000000..7c92feb --- /dev/null +++ b/libdmx/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libdmx +_openbsdver=6.9 +pkgver=1.1.4 +pkgrel=3 +pkgdesc="X11 Distributed Multihead extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('xenocara-proto' 'libxext') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libdmx-$pkgver.tar.lz{,.sig}) +sha512sums=('eba7e12d13fbd68484142300ff39293c655407d781fccc5a475f6b4101cb776e99b8aa27b0d9032b7227fb134f4bc0f427ca662b922e5c592ea30430a7435941' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libdmx" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libdmx" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libdmx" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libdom/PKGBUILD b/libdom/PKGBUILD new file mode 100644 index 0000000..80aa66f --- /dev/null +++ b/libdom/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=libdom +pkgver=0.4.1 +pkgrel=1 +pkgdesc='Implementation of the W3C DOM' +arch=('i686' 'x86_64') +url='https://www.netsurf-browser.org/projects/libdom/' +license=('Expat') +depends=('expat' 'libhubbub>=0.3.7' 'libwapcaplet>=0.4.3') +makedepends=('netsurf-buildsystem') +source=("https://download.netsurf-browser.org/libs/releases/$pkgname-$pkgver-src.tar.gz") +sha512sums=('8927b294c98dcb424a454036b20981963ba9982c1aad95b07fc0ca1efc58756b7d85373ed4cde0dcff6281b518a2b5993358494f432d85f7ac7ebd51230a6c22') + +prepare() { + sed -i 's:_BSD_SOURCE:_DEFAULT_SOURCE:' "$pkgname-$pkgver/Makefile" +} + +build() { + export CFLAGS="$CFLAGS -shared -fPIC -w" + export LDFLAGS="$LDFLAGS -shared -z,now" + make -C "$pkgname-$pkgver" \ + INCLUDEDIR=include \ + LIBDIR=lib \ + PREFIX=/usr \ + COMPONENT_TYPE="lib-shared" +} + +package() { + make -C "$pkgname-$pkgver" \ + DESTDIR="$pkgdir" \ + INCLUDEDIR=include \ + LIBDIR=lib \ + PREFIX=/usr \ + COMPONENT_TYPE="lib-shared" \ + install + + install -Dm644 "$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libdrm-debug/COPYING b/libdrm-debug/COPYING new file mode 100644 index 0000000..6e74c33 --- /dev/null +++ b/libdrm-debug/COPYING @@ -0,0 +1,48 @@ + Copyright 2005 Adam Jackson. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation on the rights to use, copy, modify, merge, + publish, distribute, sub license, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial + portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NON-INFRINGEMENT. IN NO EVENT SHALL ADAM JACKSON BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. + Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. + All Rights Reserved. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial + portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS + SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. diff --git a/libdrm-debug/PKGBUILD b/libdrm-debug/PKGBUILD new file mode 100644 index 0000000..eefb945 --- /dev/null +++ b/libdrm-debug/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=libdrm-debug +_pkgname=libdrm +pkgver=2.4.104 +_debver=2.4.104 +_debrel=1 +pkgrel=2 +pkgdesc="Userspace interface to kernel DRM services" +arch=(i686 x86_64) +license=('Expat') +depends=('libpciaccess') +makedepends=('xenocara-util-macros' 'python-docutils' 'meson' 'quilt') +provides=('libdrm') +conflicts=('libdrm') +replaces=('libdrm-new' 'libdrm-nouveau') +url="https://dri.freedesktop.org/" +source=(https://dri.freedesktop.org/$_pkgname/$_pkgname-$pkgver.tar.xz{,.sig} + https://deb.debian.org/debian/pool/main/libd/libdrm/libdrm_$_debver-$_debrel.debian.tar.xz + COPYING) +options=(!strip) # It's required for debug packages +sha512sums=('0fdbef53e0e7c441c805c95ac55ca2c94f11e8fa18e36b4dc7534c22e2b5bc8eca7283fdf41785da753f98d0b589023111abdba70db7e79837729b1540253d6e' + 'SKIP' + 'f4e18613f814cd39a3ef985ad96e3ca7d392c55dbb5fedc47c2f971e0f0cbaeca03162eaad023a0eed4ca788c909b8d7450107031a764b5b6667e159b9654562' + 'b0ca349b882a4326b19f81f22804fabdb6fb7aef31cdc7b16b0a7ae191bfbb50c7daddb2fc4e6c33f1136af06d060a273de36f6f3412ea326f16fa4309fda660') +validpgpkeys=('B97BD6A80CAC4981091AE547FE558C72A67013C3') # Maarten Lankhorst +validpgpkeys+=('34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48') # emersion +validpgpkeys+=('215DEE688925CCB965BE5DA97C03D7797B6E1AE2') # Damien Lespiau +validpgpkeys+=('10A6D91DA1B05BD29F6DEBAC0C74F35979C486BE') # David Airlie +validpgpkeys+=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov +validpgpkeys+=('D6285B5E899299F3DA746184191C9B905522B045') # Rob Clark +validpgpkeys+=('E8EB5B34081CE1EEA26EFE195B5BDA071D49CC38') # Kenneth Graunke +validpgpkeys+=('FC9BAE1435A9F7F664B82057B5D62936D1FC9EE8') # Eric Anholt +validpgpkeys+=('3BB639E56F861FA2E86505690FDD682D974CA72A') # Matt Turner +validpgpkeys+=('C20F5C4490D7D64B4C9A09998CD1DF552975297B') # Robert Bragg +validpgpkeys+=('CD47C5341A375F33BEF7BAFAFDD15D5ACEF0F2B1') # Marek Olšák +validpgpkeys+=('A66D805F7C9329B4C5D82767CCC4F07FAC641EFF') # Daniel Stone +validpgpkeys+=('CFD0E654BCBE5DD2D030D222CFCC297C6D0A120B') # Lucas Stach + +prepare() { + cd $_pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + hyperbola-meson $_pkgname-$pkgver build \ + -Dudev=false \ + -Dvalgrind=false + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libdrm/COPYING b/libdrm/COPYING new file mode 100644 index 0000000..6e74c33 --- /dev/null +++ b/libdrm/COPYING @@ -0,0 +1,48 @@ + Copyright 2005 Adam Jackson. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation on the rights to use, copy, modify, merge, + publish, distribute, sub license, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, + subject to the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial + portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NON-INFRINGEMENT. IN NO EVENT SHALL ADAM JACKSON BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +------------------------------------------------------------------------ + + Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. + Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. + All Rights Reserved. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial + portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS + SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. diff --git a/libdrm/PKGBUILD b/libdrm/PKGBUILD new file mode 100644 index 0000000..5b8fd6b --- /dev/null +++ b/libdrm/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=libdrm +pkgver=2.4.104 +_debver=2.4.104 +_debrel=1 +pkgrel=1 +pkgdesc="Userspace interface to kernel DRM services" +arch=(i686 x86_64) +license=('Expat') +depends=('libpciaccess') +makedepends=('xenocara-util-macros' 'python-docutils' 'meson' 'quilt') +replaces=('libdrm-new' 'libdrm-nouveau') +url="https://dri.freedesktop.org/" +source=(https://dri.freedesktop.org/$pkgname/$pkgname-$pkgver.tar.xz{,.sig} + https://deb.debian.org/debian/pool/main/libd/libdrm/libdrm_$_debver-$_debrel.debian.tar.xz + COPYING) +sha512sums=('0fdbef53e0e7c441c805c95ac55ca2c94f11e8fa18e36b4dc7534c22e2b5bc8eca7283fdf41785da753f98d0b589023111abdba70db7e79837729b1540253d6e' + 'SKIP' + 'f4e18613f814cd39a3ef985ad96e3ca7d392c55dbb5fedc47c2f971e0f0cbaeca03162eaad023a0eed4ca788c909b8d7450107031a764b5b6667e159b9654562' + 'b0ca349b882a4326b19f81f22804fabdb6fb7aef31cdc7b16b0a7ae191bfbb50c7daddb2fc4e6c33f1136af06d060a273de36f6f3412ea326f16fa4309fda660') +validpgpkeys=('B97BD6A80CAC4981091AE547FE558C72A67013C3') # Maarten Lankhorst +validpgpkeys+=('34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48') # emersion +validpgpkeys+=('215DEE688925CCB965BE5DA97C03D7797B6E1AE2') # Damien Lespiau +validpgpkeys+=('10A6D91DA1B05BD29F6DEBAC0C74F35979C486BE') # David Airlie +validpgpkeys+=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov +validpgpkeys+=('D6285B5E899299F3DA746184191C9B905522B045') # Rob Clark +validpgpkeys+=('E8EB5B34081CE1EEA26EFE195B5BDA071D49CC38') # Kenneth Graunke +validpgpkeys+=('FC9BAE1435A9F7F664B82057B5D62936D1FC9EE8') # Eric Anholt +validpgpkeys+=('3BB639E56F861FA2E86505690FDD682D974CA72A') # Matt Turner +validpgpkeys+=('C20F5C4490D7D64B4C9A09998CD1DF552975297B') # Robert Bragg +validpgpkeys+=('CD47C5341A375F33BEF7BAFAFDD15D5ACEF0F2B1') # Marek Olšák +validpgpkeys+=('A66D805F7C9329B4C5D82767CCC4F07FAC641EFF') # Daniel Stone +validpgpkeys+=('CFD0E654BCBE5DD2D030D222CFCC297C6D0A120B') # Lucas Stach + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgname-$pkgver build \ + -Dudev=false \ + -Dvalgrind=false + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libdvbpsi/PKGBUILD b/libdvbpsi/PKGBUILD new file mode 100644 index 0000000..d46a439 --- /dev/null +++ b/libdvbpsi/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=libdvbpsi +pkgver=1.3.3 +_debver=1.3.3 +_debrel=1 +pkgrel=1 +epoch=1 +pkgdesc='Library designed for decoding and generation of MPEG TS and DVB PSI tables' +url='https://www.videolan.org/developers/libdvbpsi.html' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('glibc') +makedepends=('quilt') +source=(https://code.videolan.org/videolan/${pkgname}/-/archive/${pkgver}/${pkgname}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/libd/libdvbpsi/libdvbpsi_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('30bc8ce28754d6488b47f71e7e3adbb39e0d8927f7a8371fd146dbf42bb022fd2091bbf802c4554856de8c6a65a0773b0258e95a9c6b77e347fcf1b2e27261ee' + '36c5348db15ab903094187d9ffdaa2cde601ffdd2c94c30503fdfb53d8f9a1cc22e5e74fbb85fc01f386175a5f6745d69126402409e5bb8cf6d9c1b86ceb883d') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -fiv +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/libdvdcss/PKGBUILD b/libdvdcss/PKGBUILD new file mode 100644 index 0000000..dded1a1 --- /dev/null +++ b/libdvdcss/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libdvdcss +pkgver=1.4.2 +pkgrel=1 +pkgdesc="Portable abstraction library for DVD decryption" +url="https://www.videolan.org/developers/libdvdcss.html" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc') +options=('!docs' '!emptydirs') +source=(https://download.videolan.org/pub/$pkgname/$pkgver/$pkgname-$pkgver.tar.bz2) +sha512sums=('e46ccded1951046ec481604c5b533c435be14cd0e734cd5315b61868836a20edf4cdc7c1466c2f4ed374de4382c5e758ace700e84aadcb29513001d696f1049c') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/libdvdnav/PKGBUILD b/libdvdnav/PKGBUILD new file mode 100644 index 0000000..d217af4 --- /dev/null +++ b/libdvdnav/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=libdvdnav +pkgver=6.1.0 +pkgrel=1 +pkgdesc="The library for xine-dvdnav plugin." +arch=('i686' 'x86_64') +license=('GPL-2') +url="https://www.videolan.org/developers/libdvdnav.html" +depends=('libdvdread') +source=("https://download.videolan.org/pub/videolan/libdvdnav/$pkgver/libdvdnav-$pkgver.tar.bz2"{,.asc}) +sha512sums=('40ea50d818067a3178b4b09e4b95b0cc67d5ff88dbff2cbeee943d086c5f59a71a7aecc425ba35d7dbe5285d8b1ea099a439c0c80c5dca280687ac0cbdc57c71' + 'SKIP') +validpgpkeys=('65F7C6B4206BD057A7EB73787180713BE58D1ADC') # VideoLAN Release Signing Key + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/libdvdread/PKGBUILD b/libdvdread/PKGBUILD new file mode 100644 index 0000000..b1ee9ea --- /dev/null +++ b/libdvdread/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=libdvdread +pkgver=6.1.1 +_debver=6.1.1 +_debrel=2 +pkgrel=1 +pkgdesc="Provides a simple foundation for reading DVD video disks" +arch=(i686 x86_64) +url="https://www.videolan.org/developers/libdvdnav.html" +license=('GPL-2') +depends=('glibc') +makedepends=('libdvdcss' 'quilt') +optdepends=('libdvdcss: for decoding encrypted DVDs') +source=("https://download.videolan.org/pub/videolan/$pkgname/$pkgver/$pkgname-$pkgver.tar.bz2"{,.asc} + "https://deb.debian.org/debian/pool/main/libd/libdvdread/libdvdread_$_debver-$_debrel.debian.tar.xz") +sha512sums=('f02c2d33ec3e79a4efd0b4ed9172935b092c9f827eb6810ed354328c34b5206ee4ffd646239ce50b9401cab1758f1a746113e004461b20df4f44bc7fa6bc2278' + 'SKIP' + 'd0c16855ce737d83157762dfe07a404dd84b4db4834db51ed68b407966bf41d5002de7b58345272dd5736068f91d2084a2cefae004acf8a3d17c4d1b221b5ec7') +validpgpkeys=('65F7C6B4206BD057A7EB73787180713BE58D1ADC') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/libebml/PKGBUILD b/libebml/PKGBUILD new file mode 100644 index 0000000..59bafc6 --- /dev/null +++ b/libebml/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=libebml +pkgver=1.4.2 +pkgrel=1 +pkgdesc='Extensible Binary Meta Language library' +arch=('i686' 'x86_64') +url='https://github.com/Matroska-Org/libebml' +license=('LGPL-2.1') +depends=('gcc-libs') +makedepends=('cmake') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Matroska-Org/${pkgname}/archive/refs/tags/release-${pkgver}.tar.gz") +sha512sums=('2a03ca1d82a41ee05cfe4dd2726cc79295fa06a4d8eceb93fe8f41bdff09f04897b434b49dd1f496e1c014289b14c3f3416eab4c8b1e745652ff1ab4a620bf83') + +prepare() { + mv ${pkgname}-release-${pkgver} ${pkgname}-${pkgver} +} + +build() { + cmake -B build -S ${pkgname}-${pkgver} \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DBUILD_SHARED_LIBS=ON + make -C build +} + +package() { + make DESTDIR="${pkgdir}" -C build install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE.LGPL" \ + -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/libebur128/PKGBUILD b/libebur128/PKGBUILD new file mode 100644 index 0000000..d180e8c --- /dev/null +++ b/libebur128/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libebur128 +pkgver=1.2.5 +pkgrel=1 +pkgdesc='A library that implements the EBU R 128 standard for loudness normalisation.' +arch=('i686' 'x86_64') +url='https://github.com/jiixyj/libebur128' +license=('Expat') +depends=('glibc') +makedepends=('cmake') +source=($pkgname-$pkgver.tar.gz::"https://github.com/jiixyj/$pkgname/archive/v$pkgver.tar.gz") +sha512sums=('5f53c64f47bbad224840eef978bbc357f3fab091ef45f849749e5fabba0035d074451bc6e60240d3ff2c56b96faaf66fb91f32f96dcaacd9d81d3c148688c2f7') + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_STATIC_LIBS=OFF + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -Dm644 $pkgname-$pkgver/COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libepoxy/PKGBUILD b/libepoxy/PKGBUILD new file mode 100644 index 0000000..1bfc636 --- /dev/null +++ b/libepoxy/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=libepoxy +pkgver=1.5.4 +pkgrel=2 +pkgdesc="Library handling OpenGL function pointer management" +url="https://github.com/anholt/libepoxy" +arch=(i686 x86_64) +license=(Expat) +depends=(glibc mesa-libgl) +makedepends=(python meson doxygen) +source=(https://github.com/anholt/$pkgname/releases/download/$pkgver/libepoxy-$pkgver.tar.xz) +sha512sums=('7bde6fe7164aaa88b6e476dafb13391c551c530267936a1456e242d2bf648117f319788ba089100b3f773444098a894db6d27326b47dc4ae26db4766308d7510') + +build() { + hyperbola-meson $pkgname-$pkgver build -D docs=true + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/liberation-circuit/PKGBUILD b/liberation-circuit/PKGBUILD new file mode 100644 index 0000000..3df9039 --- /dev/null +++ b/liberation-circuit/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=liberation-circuit +pkgver=1.3 +pkgrel=3 +pkgdesc="A real-time strategy/programming game" +arch=('i686' 'x86_64') +license=('GPL-3') +url="https://github.com/linleyh/liberation-circuit" +install=${pkgname}.install +depends=('allegro') +makedepends=('redo-python') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/linleyh/liberation-circuit/archive/v${pkgver}.tar.gz" + "libcirc" + "libcirc.desktop" + "libcirc.png") +sha512sums=('793f7dc64bfb12089ebaa9666527f7a8a4c1a3f1fd4424414a0ad9319c16d2c328148ce380a34acbaa34f61d75bebcb67232d51909f4688599c6ff6e7b9bddf6' + '20e0ba848a5842048b9872a133043fda65debc9b82b812b17c48d9eb265c155a12375be27b14acf1049dd9082d4760672a89b19ab7be2b098be30e8e48dc6c4e' + '0a687bcf73c3c02d2dcdfd6f65ed7e109dbbdbd4dc1dd37d5ccce12c9efa2b6ee91d3f55671ef88458d473f3699ccc4136d89eb8de92c9ff13a3c9b0b58f84d3' + '241ca16f04f118b40edcc85bf07e7eb3f94aa6202f593ebe5b7b38cf52db1dc7d275ffffb2d5839ba8e891368e5f9c62b13141b90f5d295a0b36b07a80f7d427') + +build() { + cd liberation-circuit-${pkgver} + redo +} + +package() { + cd liberation-circuit-${pkgver} + install -Dm755 ${srcdir}/libcirc "${pkgdir}/usr/games/libcirc" + install -dm755 "${pkgdir}/usr/share/games/${pkgname}" + install -Dm755 src/g_game "${pkgdir}/usr/share/games/${pkgname}/libcirc" + rm bin/libcirc + rm bin/libcirc.do + cp -rf bin/* "${pkgdir}/usr/share/games/${pkgname}" + + install -Dm644 "$srcdir"/libcirc.png "$pkgdir"/usr/share/pixmaps/libcirc.png + install -Dm644 "$srcdir"/libcirc.desktop "$pkgdir"/usr/share/applications/libcirc.desktop + + install -Dm644 LICENSE.md -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/liberation-circuit/libcirc b/liberation-circuit/libcirc new file mode 100644 index 0000000..c436c2a --- /dev/null +++ b/liberation-circuit/libcirc @@ -0,0 +1,8 @@ +#!/bin/bash + +# liberation-circuit start script +# Currently there is no way to explicitly specify the asset folder location +# so we have to switch the working directory before starting the game. + +cd /usr/share/games/liberation-circuit +./libcirc diff --git a/liberation-circuit/libcirc.desktop b/liberation-circuit/libcirc.desktop new file mode 100644 index 0000000..d5e47b7 --- /dev/null +++ b/liberation-circuit/libcirc.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Liberation Circuit +Comment=A real-time strategy/programming game +Exec=libcirc +Icon=libcirc +Terminal=false +Type=Application +Categories=Game;StrategyGame; diff --git a/liberation-circuit/libcirc.png b/liberation-circuit/libcirc.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6c47f6b4877f58bdbd1c3330d5875b64e0f868 GIT binary patch literal 1143 zcmV--1c>{IP)8VlLam z!bP|%H)T@i1;+>n4W5xJW{kXaeHc?=?So}cgMm!cDb-bL7hD~A&@lpL;?n~ABR<4F z7zPDz*@5W}WkrZmao&r)$VRGeGzGQwA-N^JY)RTAH|ci15H6gYbNGEf_vCl(<@^E& z2?+@awMSYw))OBXe6F1_Y;BYAZ8{~#L#px~fNcP-nwEVsKQndP>sWjq8}HUB84jt+ zIDjWzUoRSrpPObpv3NIs?~wu^$y!&GlEXSB699GrfL$np&n-X+J^>{dfD#Ni-G4V2 z|7e==3yXL2%bOlRd|>c^PRUsS;Y#Cnp}3|W>DvL)7p!dh!C?H2TsAYkDFJBVSVX5} zBBUxWIc$mZ@r}Xw>$z;^SI+=cY-wizJmrP)R^|uaI+y!_p;!A? zx3rBWxE6t!2QX$ZzOMY>tJC-kSPB2~r#PpIs>8yV*M(bJrgvyRhWM z=Tm}#J-w=O%rD8;fBAX#p$}1A^-ex{W8SkQ*QhFPQUHKjt#20|a|r+ffB+x>2mk_r z03ZMe00MvjAOHve0)PM@00;mAfB+x>2mk`W1LT~{cDj^c0R54jl}%L-Osk#@`6apM zufOlddsStt5)7=KzuASQjx^sN*$L7Y#P)z60GMgnLsu?-{%y4}H4jH6Sqnued0(ew z7=Yht@8HAHpG?ahF&O_kKQpybYi!-eAK*B@qYk(Xv;v z4gl9o%YHYVO5SW%+)Xc(ESJV607M!A;Yx5nnwCA5P9?82JKmO+%9cS)03hoD;WBQS zmVMe_{EPg|)PJprv!%t-lC1fnlpNG4ISpWMH4v`lUI6fk!T6`SY^J48U0#>VCjdNM zdYUYjKTDOy7Xh3z7(bKCX8!adHc$UBA<3FQO34wOk`GWWvMg&Ez*nYaznxAcfAcaX zPXRd6!m;jCepTaVqVXnbIB3xtG(goN6s{{aI;yi-&Si{k(Q002ov JPDHLkV1n%V_IdyS literal 0 HcmV?d00001 diff --git a/liberation-circuit/liberation-circuit.install b/liberation-circuit/liberation-circuit.install new file mode 100644 index 0000000..a17c802 --- /dev/null +++ b/liberation-circuit/liberation-circuit.install @@ -0,0 +1,22 @@ +# Colored makepkg-like functions +msg_blue() { + printf "${blue}==>${bold} $1${all_off}\n" +} + +note() { + printf "${blue}==>${yellow} NOTE:${bold} $1${all_off}\n" +} + +all_off="$(tput sgr0)" +bold="${all_off}$(tput bold)" +blue="${bold}$(tput setaf 4)" +yellow="${bold}$(tput setaf 3)" + +post_install() { + note "Please manually change the save file location by editing /usr/share/games/liberation-circuit/init.txt" + note "The launcher is called: 'libcirc'" +} + +post_upgrade() { + post_install +} diff --git a/libesmtp/PKGBUILD b/libesmtp/PKGBUILD new file mode 100644 index 0000000..e54fec8 --- /dev/null +++ b/libesmtp/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=libesmtp +pkgver=1.0.6 +_debver=1.0.6 +_debrel=4.3 +pkgrel=1 +pkgdesc='A library to manage posting mail to a preconfigured MTA.' +arch=('i686' 'x86_64') +url='http://www.stafford.uklinux.net/libesmtp/' +license=('LGPL-2.1') +depends=('libressl') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/libe/libesmtp/libesmtp_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/libe/libesmtp/libesmtp_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('2b0fd42d66800c4d3315b6e6b152cf427a7ef3656fc1269799d1697cba3bd07594e8346dacfd18ee74a71cb80a793f75449be236aa3319ef53c70a51c4eb2bc3' + '69a5860b1b8f556b72a9015fb45b0f2cdb2947b20e0683c5df70d4ba8284de1efac00475703425b6d6776d1cc1e639fe6c4973a817805783e7d485186a2ea130') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.LIB -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libetpan/PKGBUILD b/libetpan/PKGBUILD new file mode 100644 index 0000000..4c71095 --- /dev/null +++ b/libetpan/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=libetpan +pkgver=1.9.4 +_debver=1.9.4 +_debrel=3 +pkgrel=1 +pkgdesc='A portable middleware for email access' +arch=('i686' 'x86_64') +url='https://www.etpan.org/libetpan.html' +license=('Modified-BSD') +depends=('libgcrypt' 'gnutls' 'libsasl' 'zlib') +makedepends=('expat' 'quilt') +source=($pkgname-$pkgver.tar.gz::https://github.com/dinhviethoa/${pkgname}/archive/${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libe/libetpan/libetpan_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('7b7047d084fb4ce0c91821c2ad78e921d6d009106851afb7f5b068713c84ebe6926f6bf7a7423f263eeebef617511e44f6b65448d892bbc058c447235fd55c0f' + 'bf592cbb27518d5e62d1b45de2be7398a1aea279522b1eb3bba2efb46cfada8c2f6329d1c3cd3424b40c68d935fc9f15fc52c31236bf4409ba28eba1f3edd8b1') + +prepare() { + cd "${pkgname}"-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/11_use_openjade.diff || true + + quilt push -av + fi + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd "${pkgname}"-${pkgver} + + ./configure --prefix=/usr \ + --disable-static \ + --disable-db \ + --with-openssl=no \ + --with-gnutls=yes + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${pkgname}"-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYRIGHT -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/libev/PKGBUILD b/libev/PKGBUILD new file mode 100644 index 0000000..e193454 --- /dev/null +++ b/libev/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=libev +pkgver=4.33 +pkgrel=2 +pkgdesc="A full-featured and high-performance event loop" +arch=('i686' 'x86_64') +url='http://software.schmorp.de/pkg/libev.html' +license=('Modified-BSD') +depends=('glibc') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/libe/libev/libev_${pkgver}.orig.tar.gz") +sha512sums=('c662a65360115e0b2598e3e8824cf7b33360c43a96ac9233f6b6ea2873a10102551773cad0e89e738541e75af9fd4f3e3c11cd2f251c5703aa24f193128b896b') + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + + # fix conflict with libevent + rm "${pkgdir}"/usr/include/event.h + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libevdev/PKGBUILD b/libevdev/PKGBUILD new file mode 100644 index 0000000..e5b2fa0 --- /dev/null +++ b/libevdev/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=libevdev +pkgver=1.11.0 +_debver=1.11.0+dfsg +_debrel=1 +pkgrel=2 +pkgdesc="Wrapper library for evdev devices" +arch=(i686 x86_64) +url="https://www.freedesktop.org/wiki/Software/libevdev/" +license=(X11) +depends=('glibc') +makedepends=('python' 'check' 'doxygen' 'quilt') +source=(https://freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz{,.sig} + https://deb.debian.org/debian/pool/main/libe/libevdev/libevdev_$_debver-$_debrel.debian.tar.xz) +sha512sums=('b3c6b4a1532c5142f3684b920dcdd497a5368aec516e8c389e2c8f9d1eaba16c907b2a7f2c82a3c3ff89bb4d0ae5503c736098c095f9f1bc98f0668e99bf639d' + 'SKIP' + '402c7667b463eea870af738dccf95bf972425e55c264e297196c417046082ac8aa8f0a1f738ea6d0afa2af637970e0dae88a17d5fca6f6e5862f58621b00fda7') +validpgpkeys=('3C2C43D9447D5938EF4551EBE23B7E70B467F0BF') # Peter Hutterer (Who-T) + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr \ + --disable-static + make +} +check() { + cd $pkgname-$pkgver + # some failures are "expected" + make check || true +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/libexif-gtk/PKGBUILD b/libexif-gtk/PKGBUILD new file mode 100644 index 0000000..633381f --- /dev/null +++ b/libexif-gtk/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=libexif-gtk +pkgver=0.5.0 +pkgrel=1 +pkgdesc="GTK+ frontend to the libexif library" +arch=('i686' 'x86_64') +url='http://libexif.sourceforge.net' +license=('LGPL-2.1') +depends=('libexif' 'gtk2') +options=('!libtool') +source=("https://github.com/libexif/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.xz") +sha512sums=('ade46abee851abacec7093174a2470eb59b2e43549b9b60877f1da87efa58482052d471c6be44717664b15e17d5846837703c658a846f5e0d95e75fdc2ed02d4') + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libexif/PKGBUILD b/libexif/PKGBUILD new file mode 100644 index 0000000..d43af1c --- /dev/null +++ b/libexif/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=libexif +pkgver=0.6.22 +_debver=0.6.22 +_debrel=3 +pkgrel=1 +pkgdesc='Library to parse an EXIF file and read the data from those tags' +url='https://github.com/libexif/libexif' +arch=(i686 x86_64) +license=('LGPL-2.1') +depends=('glibc') +makedepends=('quilt') +source=(${url}/archive/${pkgname}-${pkgver//./_}-release.tar.gz + https://deb.debian.org/debian/pool/main/libe/libexif/libexif_$_debver-$_debrel.debian.tar.xz) +sha512sums=('6c63abe2734c9e83fb04adb00bdd77f687165007c0efd0279df26c101363b990604050c430c7dd73dfa8735dd2fd196334d321bdb114d4869998f21e7bed5b43' + '87dfece8707e44e99ffc9d08560e55d6b6f6806ca6f1a07a9646631e46b7508cf637590b02821299a98034afd0ac805b80105752199bff0c39f024945879ab88') + +prepare() { + cd ${pkgname}-${pkgname}-${pkgver//./_}-release + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -fiv +} + +build() { + cd ${pkgname}-${pkgname}-${pkgver//./_}-release + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgname}-${pkgver//./_}-release + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/libfilezilla/PKGBUILD b/libfilezilla/PKGBUILD new file mode 100644 index 0000000..a169a76 --- /dev/null +++ b/libfilezilla/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=libfilezilla +pkgver=0.26.0 +pkgrel=2 +pkgdesc="Small and modern C++ library, offering some basic functionality to build high-performing, platform-independent programs" +url='https://lib.filezilla-project.org/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc' 'gcc-libs' 'nettle' 'gnutls') +makedepends=('clang' 'gettext-tiny') +checkdepends=('cppunit') +source=(https://download.filezilla-project.org/libfilezilla/libfilezilla-${pkgver}.tar.bz2) +sha512sums=('96ccc61e66dae744c092389a570f591e4f4e62ebf4fc39ed5a60206ea96b47b1aeb3d8f2fb7e22b4920560af4ec212540cc177d23ddbeea879dcd80143b86af6') + +build() { + cd ${pkgname}-${pkgver} + export CXX=clang++ + export CC=clang + ./configure \ + --prefix=/usr \ + --disable-static + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libfontenc/PKGBUILD b/libfontenc/PKGBUILD new file mode 100644 index 0000000..74f499b --- /dev/null +++ b/libfontenc/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=libfontenc +_openbsdver=6.9 +pkgver=1.1.4 +pkgrel=3 +pkgdesc="X11 font encoding library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('zlib') +makedepends=('pkg-config' 'xenocara-proto' 'xenocara-font-util' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libfontenc-$pkgver.tar.lz{,.sig}) +sha512sums=('4bc89fa2b823a74b12efb66377da91156fa16cd4bc345881e1d169d1bff39a3787be42388dc8547887c614f80d505b91ba8ddbaae736d1631153f8800ded816c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libfontenc" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libfontenc" + ./configure --prefix=/usr --sysconfdir=/etc \ + --localstatedir=/var --disable-static \ + --with-encodingsdir=/usr/share/fonts/encodings + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libfontenc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libftdi/PKGBUILD b/libftdi/PKGBUILD new file mode 100644 index 0000000..f80a213 --- /dev/null +++ b/libftdi/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=libftdi +pkgver=1.5 +pkgrel=1 +pkgdesc='A library to talk to FTDI chips, optional python bindings.' +arch=('i686' 'x86_64') +url='https://www.intra2net.com/en/developer/libftdi/download.php' +license=('GPL-2') +depends=('libusb' 'confuse') +optdepends=('python: library bindings') +makedepends=('boost' 'cmake' 'python' 'swig') +source=(https://www.intra2net.com/en/developer/libftdi/download/${pkgname}1-$pkgver.tar.bz2 + fix_includes_path.patch) +sha512sums=('c525b2ab6aff9ef9254971ae7d57f3549a36a36875765c48f947d52532814a2a004de1232389d4fe824a8c8ab84277b08427308573476e1da9b7db83db802f6f' + '11e6ff5f5a0f1a53a4815bb1cfc49cbfbb13eca2f7ecbe6c08b105d04910d58cdb7ed1a116bffdaa7c541e23c25b1f1d48f1dd13320d1d3c207a8e31bc52533f') + +prepare() { + cd "${pkgname}1-$pkgver" + sed -i 's|LIB_SUFFIX 64|LIB_SUFFIX ""|' CMakeLists.txt + sed -i "s|MODE=\"0664\", GROUP=\"plugdev\"|TAG+=\"uaccess\"|g" packages/99-libftdi.rules + + patch -p1 < ../fix_includes_path.patch +} + +build() { + cd "$srcdir/${pkgname}1-$pkgver" + mkdir -p build + cd build + cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_SKIP_BUILD_RPATH=ON \ + -DCMAKE_BUILD_TYPE=Release -DEXAMPLES=OFF -DFTDI_EEPROM=ON \ + -DFTDIPP=ON -DPYTHON_BINDINGS=ON -DLINK_PYTHON_LIBRARY=ON + make +} + +package() { + cd "${pkgname}1-$pkgver/build" + + make DESTDIR="$pkgdir" install + install -Dm644 "../packages/99-libftdi.rules" "$pkgdir/lib/udev/rules.d/69-libftdi.rules" + install -Dm644 "$srcdir/${pkgname}1-$pkgver/"COPYING.GPL -t "${pkgdir}/usr/share/licenses/$pkgname" + install -d "$pkgdir/usr/share/libftdi/examples" + cp -r ../examples/* "$pkgdir/usr/share/libftdi/examples" +} diff --git a/libftdi/fix_includes_path.patch b/libftdi/fix_includes_path.patch new file mode 100644 index 0000000..4117f9c --- /dev/null +++ b/libftdi/fix_includes_path.patch @@ -0,0 +1,41 @@ +From: Fabrice Fontaine +Date: Fri, 17 Jul 2020 19:25:03 +0000 (+0200) +Subject: CMakeLists.txt: fix paths when FTDIPP is set +X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=commitdiff_plain;h=cdb28383402d248dbc6062f4391b038375c52385;hp=5c2c58e03ea999534e8cb64906c8ae8b15536c30 + +CMakeLists.txt: fix paths when FTDIPP is set + +Use the same project name (i.e. libftdi1 and not libftdipp1) when FTDIPP +is enabled as suggested by Aurelien Jarno in +http://developer.intra2net.com/mailarchive/html/libftdi/2020/msg00044.html + +Without this change, the libftdi1.pc config file defines the include +path as /usr/local/include/libftdipp1 while the ftdi.h file is actually +installed in /usr/local/include/libftdi1 + +This is an issue for example for libsigrok which will fail on: + +In file included from src/hardware/asix-sigma/protocol.c:27: +src/hardware/asix-sigma/protocol.h:28:10: fatal error: ftdi.h: No such file or directory + 28 | #include + | ^~~~~~~~ + +Fixes: + - http://autobuild.buildroot.org/results/1427f44e36752c337791597fab47a1889552a2fe + +Signed-off-by: Fabrice Fontaine +--- + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5aecafc..3b0b87c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -136,7 +136,7 @@ endif () + + add_subdirectory(src) + if ( FTDIPP ) +- project(libftdipp1 C CXX) ++ project(libftdi1 C CXX) + add_subdirectory(ftdipp) + endif () + if ( PYTHON_BINDINGS ) diff --git a/libgig/PKGBUILD b/libgig/PKGBUILD new file mode 100644 index 0000000..e5da252 --- /dev/null +++ b/libgig/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=libgig +pkgver=4.2.0 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="C++ library for loading, modifying and creating GIG, KSF, KMP, SF2, and DLS files" +arch=('i686' 'x86_64') +url='https://www.linuxsampler.org/libgig/' +license=('GPL-2') +depends=('util-linux' 'glibc' 'libsndfile') +makedepends=('quilt') +source=("https://download.linuxsampler.org/packages/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/libg/${pkgname}/${pkgname}_${_debver}~ds1-${_debrel}.debian.tar.xz") +sha512sums=('52c8c749c7852e229c76c17211398dbf5dd5891a1ee9d8e8bc61d55b825c5676595b20b26014e739b9bfd387db36895152b380519609a928a8fa68f4a20279f6' + '423c5446383b13989c644aa235d0b58dd6fb1079ff9d16bba22f9730e5d91e985b17be1db76fdab736a48b79de691ae98638a16fbb93f26882b2f9da17973891') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv ${srcdir}/debian . + + # Doesn't apply + rm -v debian/patches/01-Makefile.patch || true + + quilt push -av + fi + + sed -ie 's#\sdebian\b##' Makefile.am + sed -ie 'N;s#^\s*debian/Makefile \\\n##' configure{,.ac} + autoreconf +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver}/ + make DESTDIR=${pkgdir} install + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/libgit2/PKGBUILD b/libgit2/PKGBUILD new file mode 100644 index 0000000..fdc0e47 --- /dev/null +++ b/libgit2/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=libgit2 +pkgver=1.7.2 +_debver=$pkgver +_debrel=1 +pkgrel=1 +epoch=1 +pkgdesc="A linkable library for Git" +arch=('i686' 'x86_64') +url='https://libgit2.github.com/' +license=('custom:GPL-2+with-linking-exception' 'Simplified-BSD' 'GPL-2' 'Public-Domain' 'Modified-BSD' 'Expat' 'LGPL-2.1' 'ISC' 'CC0-1.0') +depends=('glibc' 'http-parser' 'libressl' 'pcre' 'zlib') +makedepends=('cmake' 'libssh2' 'python' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/libgit2/libgit2/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libg/libgit2/libgit2_${_debver}+ds-${_debrel}.debian.tar.xz") +sha512sums=('825737e4a1991fba50ea535f15b0e560ebe76ead752e04aeba36925b944d0da77fe9826a70980a1aa3d0bf9afbedfab79dd92e799c9252931384c89ebec9b012' + '85426848ff9acdbec6fbaf41669cddb827308ae091c8ae85edd462829c4ec21b3e4e761f991e4dd0d151687de3532bc4f0d5b6225916f82c90eaa3f877177d95') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE='None' \ + -DUSE_HTTP_PARSER=system \ + -Wno-dev + make -C build +} + +package() { + make -C build DESTDIR="$pkgdir" install + + cd "$pkgname-$pkgver" + install -Dm644 {AUTHORS,README.md} -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/libglade/PKGBUILD b/libglade/PKGBUILD new file mode 100644 index 0000000..6807c3e --- /dev/null +++ b/libglade/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libglade +pkgver=2.6.4 +_debver=2.6.4 +_debrel=2.3 +pkgrel=1 +pkgdesc='Allows you to load glade interface files in a program at runtime' +url='https://gnome.org/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('gtk2' 'libxml2') +makedepends=('tauthon' 'pkgconfig') +install=glade.install +source=(https://download.gnome.org/sources/${pkgname}/2.6/${pkgname}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/libg/libglade2/libglade2_$_debver-$_debrel.debian.tar.xz) +sha512sums=('b725842febaf4c1f0d305a629ae1c61ea2de24dd6f41937e806c078fada2cea483195ef40f5238ce2045e47130c92559e984f677de667b840dd7fff0f8559735' + '328c47c6e4e8579c0f28e136dec791475f893b0e51e9ec6fca1bad1de4edbf0ba0a4dbc4485d5510b12f2b8e68c43a1b8864748add80c2f52f5c98e31bcfa04a') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + PYTHON=/usr/bin/tauthon ./configure --sysconfdir=/etc --prefix=/usr --localstatedir=/var + + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + rm -r "$pkgdir/usr/share/gtk-doc" + install -m755 libglade-convert "${pkgdir}/usr/bin/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libglade/glade.install b/libglade/glade.install new file mode 100644 index 0000000..a7f05c5 --- /dev/null +++ b/libglade/glade.install @@ -0,0 +1,25 @@ +post_install() { + if [ ! -d etc/xml ]; then + mkdir -p etc/xml + fi + if [ ! -e etc/xml/catalog ]; then + xmlcatalog --noout --create etc/xml/catalog + fi + xmlcatalog --noout --add "system" \ + "http://glade.gnome.org/glade-2.0.dtd" \ + /usr/share/xml/libglade/glade-2.0.dtd etc/xml/catalog +} + +pre_upgrade() { + post_remove +} + +post_upgrade() { + post_install $1 +} + +# arg 1: the old package version +post_remove() { + xmlcatalog --noout --del \ + /usr/share/xml/libglade/glade-2.0.dtd etc/xml/catalog +} diff --git a/libgnomecanvas/PKGBUILD b/libgnomecanvas/PKGBUILD new file mode 100644 index 0000000..c0f341b --- /dev/null +++ b/libgnomecanvas/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=libgnomecanvas +pkgver=2.30.3 +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="Canvas library" +url='https://www.gnome.org' +arch=('i686' 'x86_64') +license=('LGPL-2') +depends=('libglade' 'libart') +makedepends=('pkg-config' 'intltool' 'python' 'quilt') +source=("https://download.gnome.org/sources/${pkgname}/2.30/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/libg/libgnomecanvas/libgnomecanvas_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('b5bfa2133f5172abd5228d467db4d980dd4ac125cdbf55dcc1d5055dc3330861320c12cccb52ea63ba7f69824504c9d25781cd78001dc7a92b11c6f7e0c550de' + 'e05e6103b7a04a9bf9d7c3030d0bbc081ca8c8a3118a0a52952731fae8826626ff8562671a8473f7434ea49080a8fd06df437d873dd58e0f038f50405f661101') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --disable-static \ + --enable-glade + + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.LIB -t "${pkgdir}/usr/share/licenses/$pkgname" + + # cleanup + rm -rf "${pkgdir}/usr/share/gtk-doc" +} diff --git a/libgphoto2/PKGBUILD b/libgphoto2/PKGBUILD new file mode 100644 index 0000000..6602ced --- /dev/null +++ b/libgphoto2/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=libgphoto2 +pkgver=2.5.27 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Digital camera access library" +url='https://gphoto.sourceforge.io/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('libexif' 'libjpeg-turbo' 'gd' 'libltdl' 'libusb' 'libxml2' 'curl') +makedepends=('autoconf-archive' 'quilt') +source=("https://downloads.sourceforge.net/gphoto/${pkgname}-${pkgver}.tar.bz2"{,.asc} + "https://deb.debian.org/debian/pool/main/libg/libgphoto2/libgphoto2_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('7cc82977e62034c539c7e62bff62ee61a299d3adb0c42e88b8e5521e75eedbc22437b9520af8a4bbd7dc0639ce5a8a10b1f5e5e8075e9b73a566da9061c958f8' + 'SKIP' + '0e95edf90d4389b8ab4170e8c2a946265dc2a647eff5549a39d9d9d45367e62d3e83e06f4c5d59c773abaf7bbe4a29f12cced707421ddeb49123852b67a53d51') +validpgpkeys=('7C4AFD61D8AAE7570796A5172209D6902F969C95') # Marcus MeiĂźner (german spelling) + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -fvi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --without-hotplug-doc-dir \ + --without-hotplug-usermap-dir \ + --disable-rpath + + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/ func_append compile_command " -Wl,-O1,--as-needed"\n func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # remove udev helper + rm -r "$pkgdir/usr/lib/udev" + + # install license + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libgsf/PKGBUILD b/libgsf/PKGBUILD new file mode 100644 index 0000000..b6cd6ce --- /dev/null +++ b/libgsf/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=libgsf +pkgver=1.14.50 +_debver=$pkgver +_debrel=1 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc="An extensible I/O abstraction library for dealing with structured file formats" +url='https://gitlab.gnome.org/GNOME/libgsf.git' +license=('GPL-2') +depends=('libxml2' 'gdk-pixbuf2' 'bzip2') +makedepends=('gobject-introspection' 'autoconf-archive' 'tauthon' 'quilt') +source=("https://download.gnome.org/sources/${pkgname}/1.14/${pkgname}-${pkgver}.tar.xz" + "https://security.debian.org/debian-security/pool/updates/main/libg/libgsf/libgsf_${_debver}-${_debrel}+deb12u1.debian.tar.xz") +sha512sums=('e4a405d01440654bfe5059536524d494e5b66859235648bcf6031a74b59967504b50750f471bbe1607c4a5ef11cac98aa2ca9ebb31151cf5a19ffa340d421adb' + 'c8d906a78527706506d55d6c21c2cecbeb16dfa5d0dcdc61222daf587b5ef9755d2fd135bc29e64d13c5e4c06f474b43c5d8c2f3c7b9516dc8243fb5a07a0714') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + PYTHON=/usr/bin/tauthon ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --enable-introspection \ + --disable-gtk-doc + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + # removing references towards gtk-doc + rm -rf "${pkgdir}"/usr/share/gtk-doc + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libhubbub/PKGBUILD b/libhubbub/PKGBUILD new file mode 100644 index 0000000..8683e34 --- /dev/null +++ b/libhubbub/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=libhubbub +pkgver=0.3.7 +pkgrel=1 +pkgdesc='HTML5 compliant parsing library' +arch=('i686' 'x86_64') +url='https://www.netsurf-browser.org/projects/hubbub/' +license=('Expat') +depends=('libparserutils>=0.2.4') +makedepends=('netsurf-buildsystem') +source=("https://download.netsurf-browser.org/libs/releases/$pkgname-$pkgver-src.tar.gz") +sha512sums=('d8ae4a8c4ded2c0e73902bfcf4d5d353154e27f236be0f6ea878cc2daed8a399378a4a9c2021f96106e1c822585b1daa09c9bd49c1551d3e87f37348865cfce1') + +build() { + make -C $pkgname-$pkgver \ + INCLUDEDIR=include \ + LIBDIR=lib \ + PREFIX=/usr \ + COMPONENT_TYPE=lib-shared +} + +package() { + make -C $pkgname-$pkgver \ + INCLUDEDIR=include \ + LIBDIR=lib \ + PREFIX=/usr \ + DESTDIR="$pkgdir" \ + COMPONENT_TYPE=lib-shared \ + install + + install -Dm644 $pkgname-$pkgver/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libical/PKGBUILD b/libical/PKGBUILD new file mode 100644 index 0000000..19dff59 --- /dev/null +++ b/libical/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=libical +pkgver=3.0.8 +pkgrel=1 +pkgdesc="A free software reference implementation of the icalendar data type and serialization format" +arch=('i686' 'x86_64') +url='https://github.com/libical/libical' +license=('LGPL-2.1') +depends=('glibc') +makedepends=('cmake') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/${pkgname}/${pkgname}/archive/v${pkgver}.tar.gz") +sha512sums=('ce015e6d4c1c7cb4af7b45748ce8251c663f80f6a4357ddff6a97796642619abe882f4cadeca10cabeb1b25577869f436da15bca882e032eb3ff0475f6010d8b') + +prepare() { + mkdir build +} + +build() { + cd build + + cmake ../${pkgname}-${pkgver} \ + -DCMAKE_BUILD_TYPE=Release \ + -DSHARED_ONLY=true \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DENABLE_GTK_DOC=OFF + make +} + +package() { + cd build + make DESTDIR="${pkgdir}" install + for i in COPYING LICENSE; do + install -Dm644 ../${pkgname}-${pkgver}/${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/libice/PKGBUILD b/libice/PKGBUILD new file mode 100644 index 0000000..c2403f0 --- /dev/null +++ b/libice/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=libice +_openbsdver=6.9 +pkgver=1.0.10 +pkgrel=2 +pkgdesc="X11 Inter-Client Exchange library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +depends=('glibc' 'xenocara-proto' 'libbsd') +makedepends=('libxtrans>=1.4.0' 'xenocara-util-macros') +license=('X11') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libice-$pkgver.tar.lz{,.sig}) +sha512sums=('10a80cf9c2cb555fcf10262b2ec9f7feca1846be1604c94df06a19704975485f7599451fe2b300567ef6bbdd49c63cea81364e7ddacb7dc2fa13e743cb1672b2' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libICE" + autoreconf -vfi +} + +build() { + export LDFLAGS="$LDFLAGS -lbsd" + + cd "xenocara-$_openbsdver/lib/libICE" + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libICE" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libid3tag/CVE-2008-2109.patch b/libid3tag/CVE-2008-2109.patch new file mode 100644 index 0000000..26c54c5 --- /dev/null +++ b/libid3tag/CVE-2008-2109.patch @@ -0,0 +1,11 @@ +--- field.c.orig 2008-05-05 09:49:15.000000000 -0400 ++++ field.c 2008-05-05 09:49:25.000000000 -0400 +@@ -291,7 +291,7 @@ + + end = *ptr + length; + +- while (end - *ptr > 0) { ++ while (end - *ptr > 0 && **ptr != '\0') { + ucs4 = id3_parse_string(ptr, end - *ptr, *encoding, 0); + if (ucs4 == 0) + goto fail; diff --git a/libid3tag/PKGBUILD b/libid3tag/PKGBUILD new file mode 100644 index 0000000..b675da4 --- /dev/null +++ b/libid3tag/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=libid3tag +pkgver=0.15.1b +_debver=0.15.1b +_debrel=14 +pkgrel=9 +pkgdesc="library for id3 tagging" +arch=('i686' 'x86_64') +url="https://www.underbit.com/products/mad/" +license=('GPL-2') +depends=('zlib') +makedepends=('gperf' 'quilt') +source=("https://sourceforge.net/projects/mad/files/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.gz"{,.sign} + "https://deb.debian.org/debian/pool/main/libi/libid3tag/libid3tag_$_debver-$_debrel.debian.tar.xz" + 'id3tag.pc' + '10_utf16.diff' '11_unknown_encoding.diff' 'CVE-2008-2109.patch' libid3tag-gperf.patch) +sha512sums=('ade7ce2a43c3646b4c9fdc642095174b9d4938b078b205cd40906d525acd17e87ad76064054a961f391edcba6495441450af2f68be69f116549ca666b069e6d3' + 'SKIP' + 'e9c84b02c1b4fbd6c26ecce0705e9f90a3c957798bb7753a18592d398fb8d281248a3e25b65abc79bbc9f551bed43fdbcfb64ca7062cdc26b478744d0e0541ea' + '7bbc8680b0c20f518801da02a9de2e84844b7cd8fba9cb6e9f9e7df834589106540aaa80e57963d2534731abad3dfefacd290e0ecb5f309f1dce26b46f519477' + '3a1c6ad1ba82738276d87369eac0dedf08b83322c767e23e1d73571275a92d6a06877a998d508c74345538a75d28fdffc92446fa3dcff9f3bee90de36fa42247' + '8d8ae41a65e1cd343aad2dcf77239144f3c96c433259c3180c403da2d50701687755cb67814b42da04888b2b7e92814705a438de286b548c941493d1cae14531' + '895d6a71540c8a60258e8900479bbce8f3eef67c9b0ff631130862778b3688568c5e363e0ba2a7b55a2e4a9109e22673eda69903e7bcaa77776de876cb09295b' + '2af08ba12f9fd2121529045c1639206feccc9e4471c348cf9ea7ed73d24ba26b4146afaa6ae2ee03cae976655bf42d8a9e61cfc943d0cd6f73a41c4605de89f8') +validpgpkeys=('4229B6BBA00DE143B485B74D2CE2036B4BF38A33') # Rob Leslie + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -p1 -i ${srcdir}/10_utf16.diff + patch -p1 -i ${srcdir}/11_unknown_encoding.diff + patch -p1 -i ../libid3tag-gperf.patch # Fedora patch + fi + patch -Np0 -i ${srcdir}/CVE-2008-2109.patch + + rm compat.c frametype.c # regenerate them from gperf sources +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -D -m644 "${srcdir}/id3tag.pc" "${pkgdir}/usr/lib/pkgconfig/id3tag.pc" + install -D -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/libid3tag/id3tag.pc b/libid3tag/id3tag.pc new file mode 100644 index 0000000..3155de7 --- /dev/null +++ b/libid3tag/id3tag.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=/usr/bin +libdir=/usr/lib +includedir=/usr/include + +Name: ID3TAG +Description: libid3tag - ID3 tag manipulation library +Version: 0.15.0b +Libs: -L${libdir} -lid3tag -lz +Cflags: diff --git a/libid3tag/libid3tag-gperf.patch b/libid3tag/libid3tag-gperf.patch new file mode 100644 index 0000000..9dfad6c --- /dev/null +++ b/libid3tag/libid3tag-gperf.patch @@ -0,0 +1,26 @@ +Index: libid3tag-0.15.1b/frametype.h +=================================================================== +--- libid3tag-0.15.1b.orig/frametype.h ++++ libid3tag-0.15.1b/frametype.h +@@ -37,6 +37,6 @@ extern struct id3_frametype const id3_fr + extern struct id3_frametype const id3_frametype_obsolete; + + struct id3_frametype const *id3_frametype_lookup(register char const *, +- register unsigned int); ++ register size_t); + + # endif +Index: libid3tag-0.15.1b/compat.h +=================================================================== +--- libid3tag-0.15.1b.orig/compat.h ++++ libid3tag-0.15.1b/compat.h +@@ -34,7 +34,7 @@ struct id3_compat { + }; + + struct id3_compat const *id3_compat_lookup(register char const *, +- register unsigned int); ++ register size_t); + + int id3_compat_fixup(struct id3_tag *); + + diff --git a/libident/PKGBUILD b/libident/PKGBUILD new file mode 100644 index 0000000..2285e8d --- /dev/null +++ b/libident/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=libident +pkgver=0.32 +pkgrel=1 +pkgdesc='Library for querying IDENT servers' +arch=('i686' 'x86_64') +url='https://www.remlab.net/libident/' +license=('Public-Domain') +options=('!emptydirs') +source=("https://www.remlab.net/files/libident/libident-$pkgver.tar.bz2" + 'libident.pc') +sha512sums=('5e5d0e3dd2514fa5af9dba02eca52cc8015d091fca05beeb23bae1c98d33a1a1313081cafc9e1e49d2beb5c524beaf1eb3679ff54330164aa170d74dbd84b244' + 'a78cb25383b74797ae7737237b62259c7499b2410ad76f87669add28acfe5667de2dec41f38947dbdaf973d4b2a8a993e31ded20732c3398138173d0de989463') + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + install -Dm755 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm644 "$srcdir/libident.pc" "$pkgdir/usr/lib/pkgconfig/libident.pc" +} diff --git a/libident/libident.pc b/libident/libident.pc new file mode 100644 index 0000000..1d8654c --- /dev/null +++ b/libident/libident.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: libident +Description: IDENT query library +Version: 0.32 +Libs: -L${libdir} -lident +Cflags: -I${includedir} diff --git a/libidn/PKGBUILD b/libidn/PKGBUILD new file mode 100644 index 0000000..ba51c14 --- /dev/null +++ b/libidn/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=libidn +pkgver=1.33 +_debver=1.33 +_debrel=2.4 +pkgrel=2 +pkgdesc="Implementation of the Stringprep, Punycode and IDNA specifications" +url="https://www.gnu.org/software/libidn/" +arch=('i686' 'x86_64') +license=('LGPL-3') +depends=('glibc') +makedepends=('help2man' 'texinfo' 'automake=1.14' 'quilt') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/libi/libidn/libidn_$_debver-$_debrel.debian.tar.xz") +sha512sums=('38dd459eaeda0c9e3cc2d24d967113515a499747550a2a9157f32357def90d71a3a3b52398e96a44a28cd5948dc353b0473c4ff0453a69720191c4cb49cac2c6' + 'SKIP' + 'fb98761e99a05a9ca42b05e06fa8f89d3116cdbdddb7c2f1697ae1439318e6a2face3221c13ba08e95c3a5db9ed81f3491e53bafe11ba03492649d07d91ba0c3') +validpgpkeys=('9AA9BDB11BB1B99A21285A330664A76954265E8C') # "Simon Josefsson " + +prepare() { + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --disable-gtk-doc + make +} + +check() { + cd ${pkgname}-${pkgver} + make check +} +package() { + cd ${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + install -dm755 ${pkgdir}/lib + mv ${pkgdir}/usr/lib/libidn.so.11* ${pkgdir}/lib + ln -sf ../../lib/libidn.so.11 ${pkgdir}/usr/lib/libidn.so + install -d -m755 ${pkgdir}/usr/share/licenses/${pkgname} + install -m644 COPYING{,.LESSERv3} ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/libieee1284/PKGBUILD b/libieee1284/PKGBUILD new file mode 100644 index 0000000..3c8ae05 --- /dev/null +++ b/libieee1284/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=libieee1284 +pkgver=0.2.11 +_tag=${pkgver//\./_} +_debver=$pkgver +_debrel=14 +pkgrel=2 +pkgdesc="Library to query devices connected in parallel port" +arch=('i686' 'x86_64') +license=('GPL-3') +url='https://github.com/twaugh/libieee1284' +makedepends=('python' 'xmlto' 'docbook-xml' 'docbook-xsl' 'quilt') +optdepends=('python: for python module') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/twaugh/libieee1284/archive/refs/tags/V${_tag}.tar.gz" + "https://deb.debian.org/debian/pool/main/libi/libieee1284/libieee1284_${_debver}-${_debrel}.debian.tar.xz" + "libieee1284-upstream_python_fix1.patch" + "libieee1284-upstream_python_fix2.patch" + "libieee1284-python3.patch") +sha512sums=('d225b3730bf378558991f3206e753aa93c56ce59071c479d67aabe9f276e289ff244b9d0b3f378c39fbb26c819a1f92498efc2b07600b19fe10b86f91492406b' + 'f7eb56ee16ab178db65524bbdbd9c1178e4aaa1f9e96a85df630e0cfa75a4d3aa81c8175ac824ad71959d27240e990e0f0285fa07d7495dc090cce3f8d8e4490' + 'ff922c1c4b2c11b2083a77031e48d564aa180c009a80826b0319a7af6a7e4b039b63aa2ac05fe5f6f665ec07c333aaa9fa0f1f8b72acc48bc40f74a711eb9085' + '535d7df22c5482986225345ebfaa2aed7219f055c89fc193aabe8044dd3e56bcc2b7eb3d02bf8711f9e56e1d56ae88669b255eba571c9e3283c3949ac3f1f762' + 'd3b508441bb988ae03b6449041df3ae9825c4f18cf007b8dd66ce8d61b45ec51c81cf8023cc978135945291da198a41f96ec6253c5fa9e05352fac0f0681003d') + +prepare() { + cd ${pkgname}-${_tag} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/kfreebsd-amd64.patch || true + rm -v debian/patches/autotools_update.patch || true + + quilt push -av + fi + + patch -p1 < $srcdir/libieee1284-upstream_python_fix1.patch + patch -p1 < $srcdir/libieee1284-upstream_python_fix2.patch + patch -p1 < $srcdir/libieee1284-python3.patch +} + +build() { + cd ${pkgname}-${_tag} + + ./bootstrap + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --with-python + make +} + +package() { + cd ${pkgname}-${_tag} + make DESTDIR="$pkgdir"/ install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libieee1284/libieee1284-python3.patch b/libieee1284/libieee1284-python3.patch new file mode 100644 index 0000000..bed2be2 --- /dev/null +++ b/libieee1284/libieee1284-python3.patch @@ -0,0 +1,266 @@ +diff --git a/src/ieee1284module.c b/src/ieee1284module.c +index 23c1f29..c6d6928 100644 +--- a/src/ieee1284module.c ++++ b/src/ieee1284module.c +@@ -52,33 +52,32 @@ Parport_dealloc (ParportObject *self) + { + if (self->port) + ieee1284_unref (self->port); +- +- self->ob_type->tp_free ((PyObject *) self); ++ Py_TYPE(self)->tp_free((PyObject *) self); + } + + static PyObject * + Parport_getname (ParportObject *self, void *closure) + { +- return PyString_FromString (self->port->name); ++ return PyBytes_FromString (self->port->name); + } + + static PyObject * + Parport_getbase_addr (ParportObject *self, void *closure) + { +- return PyInt_FromLong (self->port->base_addr); ++ return PyLong_FromLong (self->port->base_addr); + } + + static PyObject * + Parport_gethibase_addr (ParportObject *self, void *closure) + { +- return PyInt_FromLong (self->port->hibase_addr); ++ return PyLong_FromLong (self->port->hibase_addr); + } + + static PyObject * + Parport_getfilename (ParportObject *self, void *closure) + { + if (self->port->filename) +- return PyString_FromString (self->port->filename); ++ return PyBytes_FromString (self->port->filename); + + Py_INCREF (Py_None); + return Py_None; +@@ -168,7 +167,7 @@ Parport_get_deviceid (ParportObject *self, PyObject *args) + return NULL; + } + +- return PyString_FromStringAndSize (buffer, r); ++ return PyBytes_FromStringAndSize (buffer, r); + } + + static PyObject * +@@ -186,7 +185,7 @@ Parport_open (ParportObject *self, PyObject *args) + return NULL; + } + +- return PyInt_FromLong (capabilities); ++ return PyLong_FromLong (capabilities); + } + + static PyObject * +@@ -198,7 +197,7 @@ Parport_get_irq_fd (ParportObject *self) + return NULL; + } + +- return PyInt_FromLong (fd); ++ return PyLong_FromLong (fd); + } + + static PyObject * +@@ -213,7 +212,7 @@ Parport_clear_irq (ParportObject *self) + return NULL; + } + +- return PyInt_FromLong (portcount); ++ return PyLong_FromLong (portcount); + } + + static PyObject * +@@ -259,7 +258,7 @@ Parport_read_data (ParportObject *self) + return NULL; + } + +- return PyInt_FromLong (r); ++ return PyLong_FromLong (r); + } + + static PyObject * +@@ -301,7 +300,7 @@ Parport_read_status (ParportObject *self) + return NULL; + } + +- return PyInt_FromLong (r); ++ return PyLong_FromLong (r); + } + + static PyObject * +@@ -335,7 +334,7 @@ Parport_read_control (ParportObject *self) + return NULL; + } + +- return PyInt_FromLong (r); ++ return PyLong_FromLong (r); + } + + static PyObject * +@@ -452,7 +451,7 @@ Parport_##x (ParportObject *self, PyObject *args) \ + return NULL; \ + } \ + \ +- ret = PyString_FromStringAndSize (buffer, got); \ ++ ret = PyBytes_FromStringAndSize (buffer, got); \ + free (buffer); \ + return ret; \ + } +@@ -480,7 +479,7 @@ Parport_##x (ParportObject *self, PyObject *args) \ + return NULL; \ + } \ + \ +- return PyInt_FromLong (wrote); \ ++ return PyLong_FromLong (wrote); \ + } + + #define WRITE_METHOD(x) \ +@@ -581,44 +580,53 @@ WRITE_METHOD(ecp_write_addr) + + static PyTypeObject ParportType = { + PyObject_HEAD_INIT(NULL) +- 0, /* ob_size */ +- "ieee1284.Parport", /* tp_name */ +- sizeof (ParportObject), /* tp_basicsize */ +- 0, /* tp_itemsize */ +- (destructor)Parport_dealloc, /* tp_dealloc */ +- 0, /* tp_print */ +- 0, /* tp_getattr */ +- 0, /* tp_setattr */ +- 0, /* tp_compare */ +- 0, /* tp_repr */ +- 0, /* tp_as_number */ +- 0, /* tp_as_sequence */ +- 0, /* tp_as_mapping */ +- 0, /* tp_hash */ +- 0, /* tp_call */ +- 0, /* tp_str */ +- 0, /* tp_getattro */ +- 0, /* tp_setattro */ +- 0, /* tp_as_buffer */ +- Py_TPFLAGS_DEFAULT, /* tp_flags */ +- "parallel port object", /* tp_doc */ +- 0, /* tp_traverse */ +- 0, /* tp_clear */ +- 0, /* tp_richcompare */ +- 0, /* tp_weaklistoffset */ +- 0, /* tp_iter */ +- 0, /* tp_iternext */ +- Parport_methods, /* tp_methods */ +- 0, /* tp_members */ +- Parport_getseters, /* tp_getset */ +- 0, /* tp_base */ +- 0, /* tp_dict */ +- 0, /* tp_descr_get */ +- 0, /* tp_descr_set */ +- 0, /* tp_dictoffset */ +- (initproc)Parport_init, /* tp_init */ +- 0, /* tp_alloc */ +- Parport_new, /* tp_new */ ++ "ieee1284.Parport", /* const char *tp_name; */ ++ sizeof (ParportObject), /* Py_ssize_t tp_basicsize */ ++ 0, /* Py_ssize_t tp_itemsize; */ ++ (destructor)Parport_dealloc, /* destructor tp_dealloc; */ ++ 0, /* printfunc tp_print; */ ++ 0, /* getattrfunc tp_getattr; */ ++ 0, /* setattrfunc tp_setattr; */ ++ 0, /* PyAsyncMethods *tp_as_async; */ ++ 0, /* reprfunc tp_repr; */ ++ 0, /* PyNumberMethods *tp_as_number; */ ++ 0, /* PySequenceMethods *tp_as_sequence; */ ++ 0, /* PyMappingMethods *tp_as_mapping; */ ++ 0, /* hashfunc tp_hash; */ ++ 0, /* ternaryfunc tp_call; */ ++ 0, /* reprfunc tp_str; */ ++ 0, /* getattrofunc tp_getattro; */ ++ 0, /* setattrofunc tp_setattro; */ ++ 0, /* PyBufferProcs *tp_as_buffer; */ ++ Py_TPFLAGS_DEFAULT, /* unsigned long tp_flags; */ ++ "parallel port object", /* const char *tp_doc; */ ++ 0, /* traverseproc tp_traverse; */ ++ 0, /* inquiry tp_clear; */ ++ 0, /* richcmpfunc tp_richcompare; */ ++ 0, /* Py_ssize_t tp_weaklistoffset; */ ++ 0, /* getiterfunc tp_iter; */ ++ 0, /* iternextfunc tp_iternext; */ ++ Parport_methods, /* struct PyMethodDef *tp_methods; */ ++ 0, /* struct PyMemberDef *tp_members; */ ++ Parport_getseters, /* struct PyGetSetDef *tp_getset; */ ++ 0, /* struct _typeobject *tp_base; */ ++ 0, /* PyObject *tp_dict; */ ++ 0, /* descrgetfunc tp_descr_get; */ ++ 0, /* descrsetfunc tp_descr_set; */ ++ 0, /* Py_ssize_t tp_dictoffset; */ ++ (initproc)Parport_init, /* initproc tp_init; */ ++ 0, /* allocfunc tp_alloc; */ ++ Parport_new, /* newfunc tp_new; */ ++ 0, /* freefunc tp_free; */ ++ 0, /* inquiry tp_is_gc; */ ++ 0, /* PyObject *tp_bases; */ ++ 0, /* PyObject *tp_mro; */ ++ 0, /* PyObject *tp_cache; */ ++ 0, /* PyObject *tp_subclasses; */ ++ 0, /* PyObject *tp_weaklist; */ ++ 0, /* destructor tp_del; */ ++ 0, /* unsigned int tp_version_tag; */ ++ 0 /* destructor tp_finalize; */ + }; + + static PyObject * +@@ -672,18 +680,30 @@ static PyMethodDef Ieee1284Methods[] = { + {NULL, NULL, 0, NULL} + }; + ++static struct PyModuleDef Ieee1284Module = { ++ PyModuleDef_HEAD_INIT, ++ "ieee1284", ++ NULL, /* documentation */ ++ -1, ++ Ieee1284Methods, ++ NULL, ++ NULL, ++ NULL, ++ NULL ++}; ++ + #ifndef PyMODINIT_FUNC + #define PyMODINIT_FUNC void + #endif + PyMODINIT_FUNC +-initieee1284 (void) ++PyInit_ieee1284module (void) + { +- PyObject *m = Py_InitModule ("ieee1284", Ieee1284Methods); ++ PyObject *m = PyModule_Create (&Ieee1284Module); + PyObject *d = PyModule_GetDict (m); + PyObject *c; + + if (PyType_Ready (&ParportType) < 0) +- return; ++ return NULL; + + PyModule_AddObject (m, "Parport", (PyObject *) &ParportType); + +@@ -693,7 +713,7 @@ initieee1284 (void) + + #define CONSTANT(x) \ + do { \ +- c = PyInt_FromLong (x); \ ++ c = PyLong_FromLong (x); \ + PyDict_SetItemString (d, #x, c); \ + Py_DECREF (c); \ + } while (0) +@@ -740,4 +760,6 @@ initieee1284 (void) + CONSTANT (F1284_SWE); + CONSTANT (F1284_RLE); + CONSTANT (F1284_FASTEPP); ++ ++ return m; + } diff --git a/libieee1284/libieee1284-upstream_python_fix1.patch b/libieee1284/libieee1284-upstream_python_fix1.patch new file mode 100644 index 0000000..1596327 --- /dev/null +++ b/libieee1284/libieee1284-upstream_python_fix1.patch @@ -0,0 +1,104 @@ +From c48855528beee1397d883f9c8a5df7aed5c917a6 Mon Sep 17 00:00:00 2001 +From: Tim Waugh +Date: Wed, 23 Jun 2010 11:58:04 +0000 +Subject: [PATCH] 2010-06-23 Tim Waugh + +* src/ieee1284module.c: Fixed warnings. +--- + ChangeLog | 1 + + src/ieee1284module.c | 37 ++++++++++++++++++++++++++++--------- + 2 files changed, 29 insertions(+), 9 deletions(-) + +diff --git a/src/ieee1284module.c b/src/ieee1284module.c +index 30972f8..0093d6f 100644 +--- a/src/ieee1284module.c ++++ b/src/ieee1284module.c +@@ -28,6 +28,17 @@ typedef struct { + struct parport *port; + } ParportObject; + ++static PyObject * ++Parport_new (PyTypeObject *type, PyObject *args, PyObject *kwds) ++{ ++ ParportObject *self; ++ self = (ParportObject *) type->tp_alloc (type, 0); ++ if (self != NULL) ++ self->port = NULL; ++ ++ return (PyObject *) self; ++} ++ + static int + Parport_init (ParportObject *self, PyObject *args, PyObject *kwds) + { +@@ -215,7 +226,6 @@ Parport_release (ParportObject *self) + static PyObject * + Parport_read_data (ParportObject *self) + { +- unsigned char b[2]; + int r = ieee1284_read_data (self->port); + if (r < 0) { + handle_error (r); +@@ -258,7 +268,6 @@ Parport_data_dir (ParportObject *self, PyObject *args) + static PyObject * + Parport_read_status (ParportObject *self) + { +- unsigned char b[2]; + int r = ieee1284_read_status (self->port); + if (r < 0) { + handle_error (r); +@@ -293,7 +302,6 @@ Parport_wait_status (ParportObject *self, PyObject *args) + static PyObject * + Parport_read_control (ParportObject *self) + { +- unsigned char b[2]; + int r = ieee1284_read_control (self->port); + if (r < 0) { + handle_error (r); +@@ -435,7 +443,6 @@ Parport_##x (ParportObject *self, PyObject *args) \ + int len; \ + char *buffer; \ + ssize_t wrote; \ +- PyObject *ret; \ + \ + if (!PyArg_ParseTuple (args, "s#|i", &buffer, &len, &flags)) \ + return NULL; \ +@@ -562,6 +569,23 @@ static PyTypeObject ParportType = { + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "parallel port object", /* tp_doc */ ++ 0, /* tp_traverse */ ++ 0, /* tp_clear */ ++ 0, /* tp_richcompare */ ++ 0, /* tp_weaklistoffset */ ++ 0, /* tp_iter */ ++ 0, /* tp_iternext */ ++ Parport_methods, /* tp_methods */ ++ 0, /* tp_members */ ++ Parport_getseters, /* tp_getset */ ++ 0, /* tp_base */ ++ 0, /* tp_dict */ ++ 0, /* tp_descr_get */ ++ 0, /* tp_descr_set */ ++ 0, /* tp_dictoffset */ ++ (initproc)Parport_init, /* tp_init */ ++ 0, /* tp_alloc */ ++ Parport_new, /* tp_new */ + }; + + static PyObject * +@@ -625,14 +649,9 @@ initieee1284 (void) + PyObject *d = PyModule_GetDict (m); + PyObject *c; + +- ParportType.tp_new = PyType_GenericNew; +- ParportType.tp_init = (initproc) Parport_init; +- ParportType.tp_getset = Parport_getseters; +- ParportType.tp_methods = Parport_methods; + if (PyType_Ready (&ParportType) < 0) + return; + +- Py_INCREF (&ParportType); + PyModule_AddObject (m, "Parport", (PyObject *) &ParportType); + + pyieee1284_error = PyErr_NewException("ieee1284.error", NULL, NULL); diff --git a/libieee1284/libieee1284-upstream_python_fix2.patch b/libieee1284/libieee1284-upstream_python_fix2.patch new file mode 100644 index 0000000..e6926ce --- /dev/null +++ b/libieee1284/libieee1284-upstream_python_fix2.patch @@ -0,0 +1,63 @@ +From b4d63327dfef8dbf12aabf4bba0f6818a3519995 Mon Sep 17 00:00:00 2001 +From: Tim Waugh +Date: Tue, 8 Mar 2011 15:07:04 +0000 +Subject: [PATCH] 2011-03-08 Tim Waugh + +* src/ieee1284module.c: Added bindings for get_irq_fd and +clear_irq. Patch by Sergey Temerkhanov. +--- + ChangeLog | 5 +++++ + src/ieee1284module.c | 33 +++++++++++++++++++++++++++++++++ + 2 files changed, 38 insertions(+) + +diff --git a/src/ieee1284module.c b/src/ieee1284module.c +index 0093d6f..23c1f29 100644 +--- a/src/ieee1284module.c ++++ b/src/ieee1284module.c +@@ -189,6 +189,33 @@ Parport_open (ParportObject *self, PyObject *args) + return PyInt_FromLong (capabilities); + } + ++static PyObject * ++Parport_get_irq_fd (ParportObject *self) ++{ ++ int fd = ieee1284_get_irq_fd (self->port); ++ if (fd < 0) { ++ handle_error (fd); ++ return NULL; ++ } ++ ++ return PyInt_FromLong (fd); ++} ++ ++static PyObject * ++Parport_clear_irq (ParportObject *self) ++{ ++ int portcount = 0; ++ int r; ++ ++ int fd = ieee1284_clear_irq (self->port, &portcount); ++ if (r < 0) { ++ handle_error (r); ++ return NULL; ++ } ++ ++ return PyInt_FromLong (portcount); ++} ++ + static PyObject * + Parport_close (ParportObject *self) + { +@@ -484,6 +511,12 @@ PyMethodDef Parport_methods[] = { + { "close", (PyCFunction) Parport_close, METH_NOARGS, + "close() -> None\n" + "Closes a port." }, ++ { "get_irq_fd", (PyCFunction) Parport_get_irq_fd, METH_VARARGS, ++ "get_irq_fd() -> int\n" ++ "Returns a pollable IRQ file descriptor." }, ++ { "clear_irq", (PyCFunction) Parport_clear_irq, METH_NOARGS, ++ "clear_irq(portcount) -> int\n" ++ "Clears IRQ and returns number of IRQs raised." }, + { "claim", (PyCFunction) Parport_claim, METH_NOARGS, + "claim() -> None\n" + "Claims a port." }, diff --git a/libimagequant/PKGBUILD b/libimagequant/PKGBUILD new file mode 100644 index 0000000..cd8082d --- /dev/null +++ b/libimagequant/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=libimagequant +pkgver=2.12.2 +pkgrel=1 +pkgdesc='Library for high-quality conversion of RGBA images to 8-bit indexed-color (palette) images' +arch=('i686' 'x86_64') +url='https://pngquant.org/lib/' +license=('GPL-3') +depends=('gcc-libs') +source=("https://github.com/ImageOptim/libimagequant/archive/$pkgver/libimagequant-$pkgver.tar.gz") +sha512sums=('7e7bfcffd163d8b73a46d523dc441e4a4726f5dde804f306f13900f74afae6f6e7cf780bf157b5823a71c790bcdd0e9c9c34cf43f84a21289e470fc78835d8d8') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + sed -r 's/^install:.*/install:/;/install.*STATICLIB/d' -i Makefile +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr --with-openmp + make shared imagequant.pc +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" PREFIX=/usr install + install -Dm644 COPYRIGHT -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libinfinity/PKGBUILD b/libinfinity/PKGBUILD new file mode 100644 index 0000000..b47f3b3 --- /dev/null +++ b/libinfinity/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=libinfinity +pkgver=0.7.2 +pkgrel=1 +pkgdesc="A library to build collaborative text editors, including the infinoted server" +arch=('i686' 'x86_64') +url='https://gobby.github.io/' +license=('LGPL-2.1') +depends=('gnutls' 'gsasl' 'glib2' 'libxml2' 'gobject-introspection-runtime') +makedepends=('gettext-tiny' 'gobject-introspection' 'gtk' 'mesa-libgl') +optdepends=('gtk: gtk support') +source=("https://deb.debian.org/debian/pool/main/libi/libinfinity/libinfinity_${pkgver}.orig.tar.gz") +sha512sums=('02b76affc095546f858a315d9a6a485d4e893e18a897f84e5263f06fba9c9d66aef5840482820992f45acfc11a92a323721676f71aaed4cfcaade3099b67478f') + +build() { + cd "$srcdir"/${pkgname}-${pkgver} + [ -x configure ] || ./autogen.sh + ./configure \ + --prefix=/usr \ + --localstatedir=/var \ + --with-infgtk \ + --with-inftextgtk + make +} + +package() { + cd "$srcdir"/${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + # remove unneeded parts + rm -rf "$pkgdir"/var "$pkgdir"/usr/share/gtk-doc "$pkgdir"/usr/lib/infinoted-0.7/plugins/libinfinoted-plugin-dbus.{so,a} + + # license + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libinih/PKGBUILD b/libinih/PKGBUILD new file mode 100644 index 0000000..5195b0d --- /dev/null +++ b/libinih/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=libinih +pkgbasename=inih +pkgver=53 +_debver=53 +_debrel=1 +pkgrel=1 +pkgdesc='A simple .INI file parser written in C' +arch=('i686' 'x86_64') +url='https://github.com/benhoyt/inih' +license=('Modidied-BSD') +depends=('gcc-libs' 'glibc') +makedepends=('meson' 'quilt') +source=("https://github.com/benhoyt/inih/archive/refs/tags/r${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libi/libinih/libinih_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('99bc40c294b521e9973184bfb30d60c129735991f33b387b3d023827a34672b0489eadf91e38895ea725168dbc7b27bb02c1975debe7573b4b209d0e947b2100' + 'f59207d44cfc5f222785fa76502922d71e61b0ad18815040328357498dbe12214976b1b148a609a3d0bf34adce18bece28f770cf80d751b7148d375d1d79e180') + +prepare() { + cd ${pkgbasename}-r${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson ${pkgbasename}-r${pkgver} build \ + -Ddefault_library=shared \ + -Ddistro_install=true \ + -Dwith_INIReader=true + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 "${srcdir}/${pkgbasename}-r${pkgver}/LICENSE.txt" -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/libinstpatch/PKGBUILD b/libinstpatch/PKGBUILD new file mode 100644 index 0000000..3504a7d --- /dev/null +++ b/libinstpatch/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=libinstpatch +pkgver=1.1.6 +pkgrel=2 +pkgdesc="Instrument file software library" +arch=('i686' 'x86_64') +url="https://github.com/swami/libinstpatch" +license=('LGPL-2.1') +depends=('glibc') +makedepends=('cmake' 'glib2' 'libsndfile' 'python') +source=("$pkgname-$pkgver.tar.gz::https://github.com/swami/libinstpatch/archive/v${pkgver}.tar.gz") +sha512sums=('0e22165fc3c045bbc3ab2e1c090728232ed9142797ddbd067b682b9bcfee93850deb76c23b78f49a776e3d099be25fa029673ce8e4a909b2f48860dcdc55803c') + +build() { + cd "$pkgname-$pkgver" + export CFLAGS+=" ${CPPFLAGS}" + export CXXFLAGS+=" ${CPPFLAGS}" + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_INSTALL_DIR=/usr/lib \ + -DCMAKE_BUILD_TYPE='None' \ + -Wno-dev \ + -B build \ + -S . + make VERBOSE=1 -C build +} + +package() { + cd "$pkgname-$pkgver" + make VERBOSE=1 DESTDIR="$pkgdir/" install -C build + install -vDm 644 {AUTHORS,ChangeLog,README.md,TODO.tasks} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libiptcdata/PKGBUILD b/libiptcdata/PKGBUILD new file mode 100644 index 0000000..5e5d652 --- /dev/null +++ b/libiptcdata/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libiptcdata +pkgver=1.0.5 +pkgrel=1 +pkgdesc='Library for manipulating the IPTC metadata' +arch=('i686' 'x86_64') +url='http://libiptcdata.sourceforge.net/' +license=('GPL-2') +depends=('glibc') +source=(https://deb.debian.org/debian/pool/main/libi/libiptcdata/libiptcdata_${pkgver}.orig.tar.gz) +sha512sums=('581870b32100b7a9fa8093a4ba368d06be4eaf0d76423fbb70bb2abf4513ad62232535049d7e848cf3f4f8194879b2261b7c530680b59136800a5f4742795503') + +build() { + cd "$srcdir/$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libircclient/PKGBUILD b/libircclient/PKGBUILD new file mode 100644 index 0000000..e154b5b --- /dev/null +++ b/libircclient/PKGBUILD @@ -0,0 +1,66 @@ +# Maintainer: Jesus E. + +pkgname=libircclient +pkgver=1.9 +_debver=1.9 +_debrel=1 +pkgrel=1 +pkgdesc='Small but powerful library, which implements client-server IRC protocol' +arch=('i686' 'x86_64') +url='https://www.ulduzsoft.com/linux/libircclient/' +license=('GPL-2') +depends=('libressl') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libi/libircclient/libircclient_$_debver-$_debrel.debian.tar.xz") +sha512sums=('6f424791fed94ecacdd5d0b2c04472b0ddba09da08a8efb76c115a2a6abedecdf0aab3a86632bdf0fbca78781256fb591d8c94ed8eb776c5f30557d5c426bd1c' + '89f777915523ce41ddbd85ea9c859131544eafee3e45c635ffc440b60d079389de303e4bb55308fb59bef9be69a2a2b24351564992641f773129ba5ba41f9de1') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/proper-lib-building.patch || true + + quilt push -av + fi + + # fix include dir path + sed -i "s/@\/include/&\/${pkgname}/" src/Makefile.in + + # support openssl 1.1 + sed -e 's|SSL_library_init|OPENSSL_init_ssl|' -i configure.in + + autoreconf -vi +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --libdir=/usr/lib \ + --enable-shared \ + --enable-openssl \ + --enable-ipv6 + make -C src +} + +package() { + cd $pkgname-$pkgver + + make -C src DESTDIR="${pkgdir}" install + + # examples + install -t "${pkgdir}/usr/share/${pkgname}/examples" -Dm644 ./examples/* + + # license + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libiscsi/PKGBUILD b/libiscsi/PKGBUILD new file mode 100644 index 0000000..45611f4 --- /dev/null +++ b/libiscsi/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=libiscsi +pkgver=1.19.0 +_debver=1.19.0 +_debrel=3 +pkgrel=1 +makedepends=('quilt') +depends=('glibc' 'popt' 'libgcrypt') +pkgdesc="Clientside library to implement the iSCSI protocol" +arch=(i686 x86_64) +url="https://github.com/sahlberg/libiscsi" +license=('LGPL-2.1') +source=(https://github.com/sahlberg/${pkgname}/archive/refs/tags/${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libi/libiscsi/libiscsi_$_debver-$_debrel.debian.tar.xz) +sha512sums=('2c0e70b7ecf66204524e57edf557a014b5141a8819e5d663b6e50cb2e756fd634ae1db0b1ca6915444d80a9babd54a82619bdd98726d16d4eeaf7b3c89cf3d53' + 'e5313614a4c80cbfb962c490653cb9c936e37d4a031fed6aba8ed793e01511fea397b9b823a9059f8c56077b2a59dd4772b45115541a15dc2cd8a72aab9cc685') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/soversion.diff || true + + quilt push -av + fi + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + # Disabled werror due to GCC 8 warnings: https://github.com/sahlberg/libiscsi/issues/266 + ./configure --prefix=/usr --disable-static --libdir=/usr/lib --disable-werror + make +} + +check() { + cd "${srcdir}/${pkgname}-${pkgver}" + make check +} + +package () { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + for i in COPYING LICENCE-LGPL-2.1.txt; do + install -Dm644 $i -t "${pkgdir}/usr/share/licenses/${pkgname}" + done +} diff --git a/libisoburn/PKGBUILD b/libisoburn/PKGBUILD new file mode 100644 index 0000000..946f8c8 --- /dev/null +++ b/libisoburn/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=libisoburn +pkgver=1.5.2 #.pl01 +_debver=1.5.2 +_debrel=1 +pkgrel=1 +pkgdesc="frontend for libraries libburn and libisofs" +url="https://dev.lovelyhq.com/libburnia" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libburn' 'libisofs' 'readline') +makedepends=('quilt') +optdepends=('tk: for xorriso-tcltk frontend') +provides=('xorriso' 'xorriso-tcltk' 'cdrkit' 'cdrtools' 'dvdrtools') +conflicts=('cdrkit''cdrtools' 'dvdrtools') +replaces=('cdrkit' 'cdrtools' 'dvdrtools') +source=(https://files.libburnia-project.org/releases/${pkgname}-${pkgver}.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/libi/libisoburn/libisoburn_$_debver-$_debrel.debian.tar.xz) +sha512sums=('b481aa5ff20bb35ab0ab19f3f4f3ebc4f2baa8366a14a5afe4f262788441679b6501e140e182f4e80045c747f1cf48db40832d8d5cd064e58a02de2882536897' + 'SKIP' + '9b5264104f219c9f95ae640e8fd45274ab90298724fd3ced1efa35e9c0466c0ec6fb623fce05158310250baa15282e090a9e690ae132d65415cb4d2ec219cb80') +validpgpkeys=('44BC9FD0D688EB007C4DD029E9CBDFC0ABC0A854') # Thomas Schmitt + +prepare() { + cd ${pkgname}-${pkgver/.pl01/} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/01-switch-to-libjte2.patch || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver/.pl01/} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver/.pl01/} + make DESTDIR=${pkgdir} install + + for i in COPYING COPYRIGHT; do + install -Dm644 ${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done + + # Make symlinks for cdrkit/cdrtools/dvdrtools compatibility + install -dm755 $pkgdir/usr/share/man/man8/ + + ln -s xorrisofs $pkgdir/usr/bin/genisoimage + ln -s xorrisofs $pkgdir/usr/bin/mkhybrid + ln -s xorrisofs $pkgdir/usr/bin/mkisofs + + ln -s xorrisofs.1.gz $pkgdir/usr/share/man/man1/genisoimage.1.gz + ln -s xorrisofs.1.gz $pkgdir/usr/share/man/man1/mkhybrid.1.gz + ln -s xorrisofs.1.gz $pkgdir/usr/share/man/man8/mkhybrid.8.gz + ln -s xorrisofs.1.gz $pkgdir/usr/share/man/man1/mkisofs.1.gz + ln -s xorrisofs.1.gz $pkgdir/usr/share/man/man8/mkisofs.8.gz +} diff --git a/libisofs/PKGBUILD b/libisofs/PKGBUILD new file mode 100644 index 0000000..7093a25 --- /dev/null +++ b/libisofs/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=libisofs +pkgver=1.5.2 +_debver=1.5.2 +_debrel=1 +pkgrel=1 +pkgdesc="Library to pack up hard disk files and directories into a ISO 9660 disk image" +arch=('i686' 'x86_64') +url="https://dev.lovelyhq.com/libburnia" +license=('GPL-2') +depends=('acl' 'zlib') +source=(https://files.libburnia-project.org/releases/${pkgname}-${pkgver}.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/libi/libisofs/libisofs_$_debver-$_debrel.debian.tar.xz) +sha512sums=('65048f2e33e96091ebce5b432ea607242050a3561c8eac18364bbe966d38c4f12ac1f4b38da5ea95ad4414f2b79b5fca99c1c0827e754bbbf6f7668d7e2c2bab' + 'SKIP' + 'a015a7b1463e3d190fd7ecde33b2c35f3ec36c2f705dc49ab65dd32fbd7e8e8ad23659acaaf42cb1ae7df3f95f77f90bf4cf59449cd64589de6b32607e92234c') +validpgpkeys=('44BC9FD0D688EB007C4DD029E9CBDFC0ABC0A854') # Thomas Schmitt + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/01-switch-to-libjte2.patch || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --enable-libacl --enable-xattr --disable-static + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + + for i in COPYING COPYRIGHT; do + install -Dm644 ${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/libjpeg-turbo/COPYING.BSD3 b/libjpeg-turbo/COPYING.BSD3 new file mode 100644 index 0000000..a4d1ede --- /dev/null +++ b/libjpeg-turbo/COPYING.BSD3 @@ -0,0 +1,25 @@ +Copyright (C)2009-2016 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/libjpeg-turbo/COPYING.IJG b/libjpeg-turbo/COPYING.IJG new file mode 100644 index 0000000..dbec65b --- /dev/null +++ b/libjpeg-turbo/COPYING.IJG @@ -0,0 +1,53 @@ +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltmain.sh). Another support script, install-sh, is copyright by X Consortium +but is also freely distributable. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent (now expired), GIF reading +support has been removed altogether, and the GIF writer has been simplified +to produce "uncompressed GIFs". This technique does not use the LZW +algorithm; the resulting GIF files are larger than usual, but are readable +by all standard GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." diff --git a/libjpeg-turbo/COPYING.ZLIB b/libjpeg-turbo/COPYING.ZLIB new file mode 100644 index 0000000..4f0640b --- /dev/null +++ b/libjpeg-turbo/COPYING.ZLIB @@ -0,0 +1,19 @@ +Copyright 2009 Pierre Ossman for Cendio AB +Copyright (C) 2010, D. R. Commander. +Copyright (C) 1999-2006, MIYASAKA Masaru. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. diff --git a/libjpeg-turbo/PKGBUILD b/libjpeg-turbo/PKGBUILD new file mode 100644 index 0000000..a093b39 --- /dev/null +++ b/libjpeg-turbo/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgname=libjpeg-turbo +pkgver=2.0.5 +_debver=2.0.5 +_debrel=2 +pkgrel=2 +pkgdesc='JPEG image codec with accelerated baseline compression and decompression' +url='https://libjpeg-turbo.org/' +arch=('i686' 'x86_64') +license=('custom:IJG' 'Modified-BSD' 'zlib') +makedepends=('cmake' 'nasm' 'quilt') +validpgpkeys=('7D6293CC6378786E1B5C496885C7044E033FDE16') +source=("https://downloads.sourceforge.net/project/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg-turbo_$_debver-$_debrel.debian.tar.xz" + 'COPYING.BSD3' + 'COPYING.IJG' + 'COPYING.ZLIB') +sha512sums=('5bf9ecf069b43783ff24365febf36dda69ccb92d6397efec6069b2b4f359bfd7b87934a6ce4311873220fccc73acabdacef5ce0604b79209eb1912e8ba478555' + 'ca6ee52c3fa944e56139054249aaedae7615f7f619f4ba39ae3c57fcac111466de4f7da0db8e6d9b4073cb07b9d32a3941fcdba5098031e4882e8a55e6bad1e6' + '99bf74a259f531b79309ce5e02ced1beceebb0a7269231ee2ea7f496b4584670dbb72c06cb60f7b8f84db1212a14b7b818beb3cac3b5e503aa2852c6166e9a74' + '77a09897f1f637a3ff3acfffb2bbdda0e446bd8b1307f1b4dc3a40566247123b39fe4755318380cf38d5afc8724055f4f27496340b6f4a1e2931299e2259d4fb' + '3bdfc937b59fd314f57f32d9943f332a2196d29935967dc5677e2eb81355511027d9411bf8937369732ca3adccf54bb91d563de295e841e896758d4441516586') + +provides=('libjpeg=8.2.2' 'turbojpeg') +conflicts=('libjpeg' 'turbojpeg') +replaces=('libjpeg' 'turbojpeg') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + cmake \ + -DWITH_JAVA=0 \ + -DWITH_JPEG8=1 \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + . + + make +} + +check() { + cd "${srcdir}/${pkgname}-${pkgver}" + make test +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make \ + DESTDIR="${pkgdir}" \ + docdir="/usr/share/doc/${pkgname}" \ + exampledir="/usr/share/doc/${pkgname}" \ + install + + install -Dm644 LICENSE.md "${pkgdir}/usr/share/licenses/libjpeg-turbo/LICENSE.md" + for i in COPYING.{BSD3,IJG,ZLIB}; do + install -Dm644 "${srcdir}/${i}" "${pkgdir}/usr/share/licenses/libjpeg-turbo/${i}" + done + install -m644 jpegint.h "${pkgdir}/usr/include" # required by other software +} diff --git a/libkate/0001-Fix-automake-warnings.patch b/libkate/0001-Fix-automake-warnings.patch new file mode 100644 index 0000000..8360c64 --- /dev/null +++ b/libkate/0001-Fix-automake-warnings.patch @@ -0,0 +1,84 @@ +From f86958231c2e5d3172554976a88f8cb552109079 Mon Sep 17 00:00:00 2001 +From: Jelle van der Waa +Date: Wed, 21 Jun 2017 21:42:57 +0200 +Subject: [PATCH] Fix automake warnings + +Signed-off-by: Jelle van der Waa +--- + Makefile.am | 2 -- + configure.ac | 3 ++- + doc/Makefile.am | 2 -- + tests/Makefile.am | 2 -- + tools/Makefile.am | 2 -- + 5 files changed, 2 insertions(+), 9 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 12a85d3..c137e1d 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -16,8 +16,6 @@ katepc_DATA+=misc/pkgconfig/oggkate.pc + noinst_DATA+=misc/pkgconfig/oggkate-uninstalled.pc + endif + +-LIBTOOLFLAGS=--silent +- + AM_CPPFLAGS=-I $(top_srcdir)/src -I $(top_srcdir)/include + + lib_libkate_la_SOURCES=\ +diff --git a/configure.ac b/configure.ac +index 58ff478..0234255 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -7,7 +7,7 @@ AC_PREREQ(2.53) + + AC_CANONICAL_TARGET + +-AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) ++AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects -Wno-portability]) + AC_CONFIG_HEADERS([include/config.h]) + + ifdef([AM_SILENT_RULES],[AM_SILENT_RULES]) +@@ -27,6 +27,7 @@ dnl then set AGE to 0. + LIBKATE_SHARED_VERSION="4:0:3" + LIBOGGKATE_SHARED_VERSION="3:2:2" + ++AM_PROG_AR + AC_PROG_CC_C_O + AC_LIBTOOL_DLOPEN + AC_PROG_LIBTOOL +diff --git a/doc/Makefile.am b/doc/Makefile.am +index 693f2fc..f519c08 100644 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -1,5 +1,3 @@ +-LIBTOOLFLAGS=--silent +- + man_MANS=man/kateenc.1 man/katedec.1 man/katalyzer.1 man/KateDJ.1 + + # dependency to get doc to be built +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 4fa768a..31d3434 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -1,5 +1,3 @@ +-LIBTOOLFLAGS=--silent +- + AM_CPPFLAGS=-I $(top_srcdir)/src -I $(top_srcdir)/include + + LIBKATE=../lib/libkate.la +diff --git a/tools/Makefile.am b/tools/Makefile.am +index 2be12a3..01c3d7b 100644 +--- a/tools/Makefile.am ++++ b/tools/Makefile.am +@@ -2,8 +2,6 @@ if HAVE_PYTHON + SUBDIRS=KateDJ + endif + +-LIBTOOLFLAGS=--silent +- + AM_CPPFLAGS=-I $(top_srcdir)/src -I $(top_srcdir)/include -I $(top_srcdir)/tools + + noinst_HEADERS=\ +-- +2.13.1 + diff --git a/libkate/PKGBUILD b/libkate/PKGBUILD new file mode 100644 index 0000000..42458a1 --- /dev/null +++ b/libkate/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libkate +pkgver=0.4.1 +_debver=0.4.1 +_debrel=11 +pkgrel=6 +pkgdesc="A karaoke and text codec for embedding in ogg" +url="https://wiki.xiph.org/OggKate" +license=('Modified-BSD') +arch=('i686' 'x86_64') +depends=('libpng' 'libogg') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/libk/libkate/libkate_$pkgver.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/libk/libkate/libkate_$_debver-$_debrel.debian.tar.xz" + 0001-Fix-automake-warnings.patch) +sha512sums=('2635237753abc0f6c43fc07bd0ecc57c2f3c893efa6c62ad08de9191045612477302ed45acd61cdfea7447efd654ebbe0ed2d6a2cbf867eb834581d7ee43377b' + '8ee09457110a76881183001865392a5f908913a47c32ba6c091dacdefc10e826621526d3e809c3cc5d49aa69de92bd37c72076ec0f0abe6e75a2f1c660e28b7a' + '525d120cddd040441859f2783e6e566da631ba304074bfa40a34399879fc3053577e8e71ef804168aeef519fac62e205829b50a61d770cddd46f7dbfba660842') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -Np1 -i ../0001-Fix-automake-warnings.patch + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --disable-static \ + --disable-doc + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dt "${pkgdir}/usr/share/licenses/${pkgname}" -m644 COPYING + rm "${pkgdir}/usr/share/man/man1/KateDJ.1" +} diff --git a/libkeybinder3/PKGBUILD b/libkeybinder3/PKGBUILD new file mode 100644 index 0000000..8f06c50 --- /dev/null +++ b/libkeybinder3/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=libkeybinder3 +pkgver=0.3.2 +_debver=$pkgver +_debrel=1.1 +pkgrel=2 +pkgdesc="A library for registering global keyboard shortcuts" +arch=('i686' 'x86_64') +url="https://github.com/engla/keybinder/tree/keybinder-3.0" +license=('Expat') +depends=('gtk') +makedepends=('gobject-introspection' 'mesa-libgl' 'quilt') +optdepends=('lua-lgi: lua bindings') +source=("https://github.com/kupferlauncher/keybinder/releases/download/keybinder-3.0-v$pkgver/keybinder-3.0-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/k/keybinder-3.0/keybinder-3.0_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('14171875e03ade88165f28c7267b66cf9efe34259d7a3072a786ba49dacf8f8d6d84753b1aeedec5dfb0a24028be86bceeebee2f6b1bf5ef2eb79ee45f909b11' + 'SKIP' + 'e9da66b66af6fac4da958c4aab72d2c08b4c0a53fc396bdc0c15ca64d7906c48810f8e64ef48819eb429b20ec6fd84023d35095a68031d1fc482628a6ef3ecbf') +validpgpkeys=('2578ABA1F9023159DFF211B7368712C4D7A44445') # Ulrik Sverdrup + +prepare() { + cd keybinder-3.0-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd keybinder-3.0-$pkgver + ./configure \ + --prefix=/usr \ + --disable-gtk-doc + make +} + +package() { + cd keybinder-3.0-$pkgver + make DESTDIR="$pkgdir" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/liblo/PKGBUILD b/liblo/PKGBUILD new file mode 100644 index 0000000..2336cea --- /dev/null +++ b/liblo/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=liblo +pkgver=0.31 +pkgrel=1 +epoch=1 +pkgdesc='A lightweight OSC (Open Sound Control) implementation' +arch=('i686' 'x86_64') +url='http://liblo.sourceforge.net/' +license=('LGPL-2.1') +depends=('glibc') +makedepends=('doxygen') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/radarsat1/${pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('328d413a6608e5e99d41bfc5a153ef10510e79589cb4d8df4511c8187b8baa6fd8f8c2fd3fe54de7736855f699619d4ebc088a17acf8700085b59ee38ade7d21') + +prepare() { + cd "$pkgname-$pkgver" + + # fixing bug in autotools setup: + # https://github.com/radarsat1/liblo/issues/96 + ln -svf README.md README + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + + # delete broken man pages + rm -f doc/man/man3/_*.3 + + # man pages + install -vDm 644 doc/man/man3/*.3 -t "${pkgdir}/usr/share/man/man3" + + # examples + install -vDm 644 examples/*.{cpp,c} \ + -t "${pkgdir}/usr/share/${pkgname}/examples/" + + # docs + install -vDm 644 doc/html/* -t "${pkgdir}/usr/share/doc/${pkgname}/html/" + install -vDm 644 doc/latex/* -t "${pkgdir}/usr/share/doc/${pkgname}/latex/" + install -vDm 644 {AUTHORS,ChangeLog,NEWS,README.md,TODO} \ + -t "${pkgdir}/usr/share/doc/${pkgname}/" + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/liblockfile/PKGBUILD b/liblockfile/PKGBUILD new file mode 100644 index 0000000..12ff2bc --- /dev/null +++ b/liblockfile/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=liblockfile +pkgver=1.17 +pkgrel=1 +pkgdesc="a library with NFS-safe locking functions" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://packages.debian.org/unstable/libs/liblockfile1' +depends=('glibc') +source=("https://deb.debian.org/debian/pool/main/libl/liblockfile/liblockfile_${pkgver}.orig.tar.gz") +sha512sums=('d191be2eb3126cfbd65ee3ed85b436aa3872f014424d2c09596996f3e94bc608c81665b59e8bf23bedc6c65db70df4c56415ad56db63233550eece612b8db51c') + +build() { + cd ${pkgname}-${pkgver} + LDCONFIG=/bin/true ./configure --enable-shared --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd ${pkgname}-${pkgver} + mkdir -p "$pkgdir"/usr/{lib,bin,include,share/man/man1,share/man/man3} + make install prefix="$pkgdir"/usr mandir="$pkgdir"/usr/share/man + install -Dm 644 licenses/GPL-2 -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/liblouis/PKGBUILD b/liblouis/PKGBUILD new file mode 100644 index 0000000..ededd41 --- /dev/null +++ b/liblouis/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=liblouis +pkgver=3.16.0 +_debver=3.16.0 +_debrel=1 +pkgrel=1 +pkgdesc="Free software braille translator and back-translator" +arch=(i686 x86_64) +url="http://liblouis.org/" +license=(LGPL-3) +depends=(glibc) +makedepends=(help2man python quilt) +source=(https://github.com/liblouis/liblouis/releases/download/v$pkgver/liblouis-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libl/liblouis/liblouis_$_debver-$_debrel.debian.tar.xz) +sha512sums=('b247e8e501b3b07c45e55ff5df79d7ee8174c12dba9cf7e11ae88e0bbb845c08330e6a1be5ebabc21258bcfd7276484f525e9acc56605ba0fd3ec910b7289a1b' + '8147f70dd80ccc9685a2101205391c7ec630f3d5354b174165571bc7b543714a82a23bce32c454e4dab7e8cb3a4ce3a6d45df66d4fedaa6f43b1a000f4125718') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --disable-static --enable-ucs4 + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + cd python + LD_PRELOAD+=":$srcdir/$pkgname-$pkgver/liblouis/.libs/liblouis.so" + python setup.py install --root="$pkgdir" --prefix="/usr" --optimize=1 + + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING.LESSER $pkgdir/usr/share/licenses/$pkgname/COPYING.LESSER +} +# vim:set ts=2 sw=2 et: diff --git a/liblrdf/PKGBUILD b/liblrdf/PKGBUILD new file mode 100644 index 0000000..cfcb32b --- /dev/null +++ b/liblrdf/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=liblrdf +pkgver=0.6.1 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="A library for the manipulation of RDF file in LADSPA plugins" +arch=('i686' 'x86_64') +url="https://github.com/swh/LRDF" +depends=('raptor') +makedepends=('ladspa' 'quilt') +license=('GPL-2') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/swh/LRDF/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libl/liblrdf/liblrdf_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('7732813eec704aef984d056de254e4fa049fdd0a7444b6a88f75f012afe9c587cbd1295f027c77361fa42bc097cdce9d9cabdba6b86e99a3c14805d84258df1c' + 'ede6a55862b248cdf886fa1ba4e776772ada916a368f497493f25e11782a8c5b1641de2719f407161bafe125dbf377f61ba6ba79f619c3076b7aad04dc18ee58') + +prepare() { + mv -v "LRDF-${pkgver}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + # raptor.h changed location + export CXXFLAGS="$(pkg-config --cflags raptor2) ${CXXFLAGS}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -vDm 644 {AUTHORS,ChangeLog,NEWS,README} -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libmad/PKGBUILD b/libmad/PKGBUILD new file mode 100644 index 0000000..700e3db --- /dev/null +++ b/libmad/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=libmad +pkgver=0.15.1b +_debver=$pkgver +_debrel=10 +pkgrel=2 +pkgdesc="A high-quality MPEG audio decoder" +arch=('i686' 'x86_64') +url='https://www.underbit.com/products/mad/' +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/sourceforge/mad/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libm/$pkgname/${pkgname}_$_debver-$_debrel.diff.gz" + "libmad.patch") +sha512sums=('2cad30347fb310dc605c46bacd9da117f447a5cabedd8fefdb24ab5de641429e5ec5ce8af7aefa6a75a3f545d3adfa255e3fa0a2d50971f76bc0c4fc0400cc45' + 'ddd6a3c84531d0aed145c9671d08e0bb0332b2d71acc9c21bd255973a095b6242eff39eccb9f22a74cbfa0a34d27f655cc851d6ee13f88fb1b37e5169e76b07c' + 'ff815f5aa32aec4230351b258430ca2184c0a44f80845c92b46aedb9942b3cd85c7b3aa575f4f562a5e02f7fadf6f3d6fe06e64d2b65418dbcd10762214695b1') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + patch -p1 -i ../${pkgname}_$_debver-$_debrel.diff + + quilt push -av + fi + + patch -p1 -i "${srcdir}/libmad.patch" +} + +build() { + cd ${pkgname}-${pkgver} + CFLAGS="$CFLAGS -ftree-vectorize -ftree-vectorizer-verbose=1" + autoconf + ./configure \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libmad/libmad.patch b/libmad/libmad.patch new file mode 100644 index 0000000..0ac88ac --- /dev/null +++ b/libmad/libmad.patch @@ -0,0 +1,117 @@ +diff -ruN libmad-0.15.1b.orig/Makefile.am libmad-0.15.1b/Makefile.am +--- libmad-0.15.1b.orig/Makefile.am 2004-02-17 02:02:03.000000000 +0000 ++++ libmad-0.15.1b/Makefile.am 2005-08-25 12:08:04.000000000 +0000 +@@ -33,9 +33,12 @@ + minimad_INCLUDES = + minimad_LDADD = libmad.la + +-EXTRA_DIST = mad.h.sed \ ++EXTRA_DIST = mad.h.sed mad.pc.in \ + CHANGES COPYRIGHT CREDITS README TODO VERSION + ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA= mad.pc ++ + exported_headers = version.h fixed.h bit.h timer.h stream.h frame.h \ + synth.h decoder.h + +diff -ruN libmad-0.15.1b.orig/Makefile.in libmad-0.15.1b/Makefile.in +--- libmad-0.15.1b.orig/Makefile.in 2004-02-17 02:33:23.000000000 +0000 ++++ libmad-0.15.1b/Makefile.in 2005-08-25 12:09:34.000000000 +0000 +@@ -14,6 +14,8 @@ + + @SET_MAKE@ + ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = mad.pc + + SOURCES = $(libmad_la_SOURCES) $(EXTRA_libmad_la_SOURCES) $(minimad_SOURCES) + +@@ -43,7 +45,7 @@ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(srcdir)/libmad.list.in \ + $(top_srcdir)/configure COPYING INSTALL TODO config.guess \ +- config.sub depcomp install-sh ltmain.sh missing mkinstalldirs ++ config.sub depcomp install-sh ltmain.sh missing mkinstalldirs mad.pc.in + subdir = . + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/configure.ac +@@ -53,7 +55,7 @@ + configure.lineno configure.status.lineno + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs + CONFIG_HEADER = config.h +-CONFIG_CLEAN_FILES = libmad.list ++CONFIG_CLEAN_FILES = libmad.list mad.pc + am__installdirs = $(DESTDIR)$(libdir) $(DESTDIR)$(includedir) + libLTLIBRARIES_INSTALL = $(INSTALL) + LTLIBRARIES = $(lib_LTLIBRARIES) +@@ -218,7 +220,7 @@ + minimad_SOURCES = minimad.c + minimad_INCLUDES = + minimad_LDADD = libmad.la +-EXTRA_DIST = mad.h.sed \ ++EXTRA_DIST = mad.h.sed mad.pc.in \ + CHANGES COPYRIGHT CREDITS README TODO VERSION + + exported_headers = version.h fixed.h bit.h timer.h stream.h frame.h \ +@@ -298,6 +300,28 @@ + rm -f stamp-h1 + touch $@ + ++mad.pc: $(top_builddir)/config.status mad.pc.in ++ cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status ++ ++install-pkgconfigDATA: $(pkgconfig_DATA) ++ @$(NORMAL_INSTALL) ++ $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir) ++ @list='$(pkgconfig_DATA)'; for p in $$list; do \ ++ if test -f $(srcdir)/$$p; then \ ++ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p"; \ ++ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p; \ ++ else if test -f $$p; then \ ++ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p"; \ ++ $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p; \ ++ fi; fi; \ ++ done ++ ++uninstall-pkgconfigDATA: ++ @$(NORMAL_UNINSTALL) ++ list='$(pkgconfig_DATA)'; for p in $$list; do \ ++ rm -f $(DESTDIR)$(pkgconfigdir)/$$p; \ ++ done ++ + distclean-hdr: + -rm -f config.h stamp-h1 + libmad.list: $(top_builddir)/config.status $(srcdir)/libmad.list.in +@@ -726,7 +750,7 @@ + + info-am: + +-install-data-am: install-includeHEADERS ++install-data-am: install-includeHEADERS install-pkgconfigDATA + + install-exec-am: install-libLTLIBRARIES + +@@ -757,7 +781,7 @@ + ps-am: + + uninstall-am: uninstall-includeHEADERS uninstall-info-am \ +- uninstall-libLTLIBRARIES ++ uninstall-libLTLIBRARIES install-pkgconfigDATA + + uninstall-info: uninstall-info-recursive + +diff -ruN libmad-0.15.1b.orig/mad.pc.in libmad-0.15.1b/mad.pc.in +--- libmad-0.15.1b.orig/mad.pc.in 1970-01-01 00:00:00.000000000 +0000 ++++ libmad-0.15.1b/mad.pc.in 2005-08-25 12:08:04.000000000 +0000 +@@ -0,0 +1,10 @@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: MAD ++Description: libmad - MPEG audio decoder library ++Version: @VERSION@ ++Libs: -L${libdir} -lmad ++Cflags: diff --git a/libmatroska/PKGBUILD b/libmatroska/PKGBUILD new file mode 100644 index 0000000..bcfca18 --- /dev/null +++ b/libmatroska/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=libmatroska +pkgver=1.6.2 +pkgrel=1 +pkgdesc='Matroska library' +arch=('i686' 'x86_64') +url='https://github.com/Matroska-Org/libmatroska' +license=('LGPL-2.1') +depends=('libebml') +makedepends=('cmake' 'ninja') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Matroska-Org/${pkgname}/archive/refs/tags/release-${pkgver}.tar.gz") +sha512sums=('c2e2181d2762f703a0c85696cf1216a469c11efab611b236eeec9fa1a760c090da63118111bb907d17fb6491c6f65ea49c8314542a2969982c3cad466ac276c4') + +prepare() { + mv ${pkgname}-release-${pkgver} ${pkgname}-${pkgver} +} + +build() { + cmake -S ${pkgname}-${pkgver} -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DBUILD_SHARED_LIBS=ON + cmake --build build +} + +package() { + DESTDIR="${pkgdir}" cmake --build build --target install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE.LGPL" \ + -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/libmcrypt/PKGBUILD b/libmcrypt/PKGBUILD new file mode 100644 index 0000000..e4bfb07 --- /dev/null +++ b/libmcrypt/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libmcrypt +pkgver=2.5.8 +pkgrel=1 +pkgdesc="A library which provides a uniform interface to several symmetric encryption algorithms" +url="http://mcrypt.sourceforge.net/" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('glibc') +options=('!emptydirs') +source=("https://downloads.sourceforge.net/mcrypt/${pkgname}-${pkgver}.tar.bz2") +sha512sums=('6c05c42767401d66af67b0922b207d17cdb1c3efdbfdfb5b0c2e651821c48a8a6c6749debfa0206091b8a801f538fabe9f7d95ebc86d82c6b84c8001031d50fe') + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.LIB -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libmd/PKGBUILD b/libmd/PKGBUILD new file mode 100644 index 0000000..0eab7a4 --- /dev/null +++ b/libmd/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libmd +pkgver=1.1.0 +pkgrel=1 +pkgdesc="Message Digest functions from BSD systems" +arch=('i686' 'x86_64') +url='https://www.hadrons.org/software/libmd/' +license=('Modified-BSD' 'Simplified-BSD' 'ISC' 'Beerware' 'Public-Domain') +depends=('glibc') +source=("https://libbsd.freedesktop.org/releases/$pkgname-$pkgver.tar.xz") +sha512sums=('5d0da3337038e474fae7377bbc646d17214e72dc848a7aadc157f49333ce7b5ac1456e45d13674bd410ea08477c6115fc4282fed6c8e6a0bf63537a418c0df96') + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname}/ +} diff --git a/libmicrodns/PKGBUILD b/libmicrodns/PKGBUILD new file mode 100644 index 0000000..d4c5292 --- /dev/null +++ b/libmicrodns/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=libmicrodns +pkgver=0.1.2 +pkgrel=1 +pkgdesc='Minimal mDNS resolver library' +url='https://github.com/videolabs/libmicrodns' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('glibc') +makedepends=('meson') +source=(https://github.com/videolabs/libmicrodns/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz) +sha512sums=('a2a40f785cfcab280c1d5e187eef5f63e642dccdf1ada2e9f7ed2b85aef26e5c1b1cefc7df6fa4f83b46e5da5eaf05e0f0b02b677ca4e5e73b7fd70d74878552') + +build() { + cd ${pkgname}-${pkgver} + hyperbola-meson build + ninja -C build +} + +package() { + cd ${pkgname}-${pkgver} + DESTDIR="${pkgdir}" meson install -C build + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} + +# vim: ts=2 sw=2 et: diff --git a/libmikmod/PKGBUILD b/libmikmod/PKGBUILD new file mode 100644 index 0000000..aee0a16 --- /dev/null +++ b/libmikmod/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=libmikmod +pkgver=3.3.11.1 +_debver=3.3.11.1 +_debrel=6 +pkgrel=1 +pkgdesc="Module player library supporting many formats, including MOD, S3M, IT and XM" +url=http://mikmod.sourceforge.net +license=(LGPL-2) +arch=(i686 x86_64) +depends=(glibc libsndio sh) +makedepends=(alsa-lib cmake quilt) +source=(https://downloads.sourceforge.net/mikmod/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libm/libmikmod/libmikmod_$_debver-$_debrel.debian.tar.xz + cmake-man.patch) +sha512sums=('f2439e2b691613847cd0787dd4e050116683ce7b05c215b8afecde5c6add819ea6c18e678e258c0a80786bef463f406072de15127f64368f694287a5e8e1a9de' + '553c0cae558e517b677cee985c03125454cc5a6a3affde8816f0cd18339639b7e6ae4c02fae01d23c094e4cb7bd9038d666642a0216ee57fc9ca198061f7964d' + '9b8a87039b545855f3fdd16ee6f6a2e4f060460c5997a3a69eef027f69d1d5def2618843ee75f0c08eef0af284f2dc70dfe764fba71a5dffdfdb32942aebb9f2') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ../cmake-man.patch +} + +build() { + # cmake ignores CPPFLAGS + CFLAGS+=" $CPPFLAGS" + + cmake -H$pkgname-$pkgver -Bbuild \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_DL=1 \ + -DENABLE_SNDIO=1 + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --build build --target install + + install -Dt "$pkgdir/usr/share/aclocal" -m644 $pkgname-$pkgver/libmikmod.m4 + install -Dt "$pkgdir/usr/share/doc/$pkgname" -m644 \ + $pkgname-$pkgver/{NEWS,README,TODO} build/docs/mikmod.html + install -Dt "$pkgdir/usr/share/info" build/docs/mikmod.info + install -Dt "$pkgdir/usr/share/man/man1" build/docs/libmikmod-config.1 + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 \ + $pkgname-$pkgver/COPYING.LIB +} diff --git a/libmikmod/cmake-man.patch b/libmikmod/cmake-man.patch new file mode 100644 index 0000000..9cc6b44 --- /dev/null +++ b/libmikmod/cmake-man.patch @@ -0,0 +1,11 @@ +diff -u -r libmikmod-3.3.11.1/docs/CMakeLists.txt libmikmod-3.3.11.1-man/docs/CMakeLists.txt +--- libmikmod-3.3.11.1/docs/CMakeLists.txt 2014-07-10 07:37:00.000000000 +0000 ++++ libmikmod-3.3.11.1-man/docs/CMakeLists.txt 2020-01-11 18:54:48.154853499 +0000 +@@ -20,5 +20,7 @@ + COMMENT "Creating HTML file ${html_out}" + VERBATIM) + ++configure_file(libmikmod-config.1.in libmikmod-config.1 @ONLY) ++ + add_custom_target(info ALL DEPENDS ${info_out} ${html_out}) + ENDIF(ENABLE_DOC) diff --git a/libmilter/PKGBUILD b/libmilter/PKGBUILD new file mode 100644 index 0000000..35c1477 --- /dev/null +++ b/libmilter/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=libmilter +_pkgname=sendmail +pkgver=8.15.2 +_debver=8.15.2 +_debrel=22 +pkgrel=1 +pkgdesc='Implementation of the sendmail Mail Filter API' +url='https://www.proofpoint.com/us/sendmail-open-source' +arch=('i686' 'x86_64') +options=('staticlibs') +license=('custom:Sendmail') +makedepends=('quilt') +validpgpkeys=('30BCA74705FA415455731D7BAAF5B5DE05BDCC53') +source=("https://ftp.sendmail.org/${_pkgname}.${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/s/sendmail/sendmail_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('04feb37316c13b66b1518596507a7da7c16cb0bf1abf10367f7fd888a428fadb093a9efa55342fa55b936c3f0cbdc63b9e2505cd99201a69a0c05b8ad65f49f9' + 'SKIP' + '3ed2f2bc21acf80161a02b5348594023fcef11f9608dc98e56cc1fceeea9447e0417b6ab73c423f883ad8fd42b96918f411b0ca054bb49675a6c8763e6ada65b') + + +prepare() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/shared_libmilter.patch || true + + quilt push -av + fi + + # From http://www.j-chkmail.org/wiki/doku.php/doc/installation/start#libmilter + cat >> devtools/Site/site.config.m4 < + +pkgname=libmms +pkgver=0.6.4 +_debver=0.6.4 +_debrel=3 +pkgrel=2 +pkgdesc="MMS stream protocol library" +arch=(i686 x86_64) +url="https://sourceforge.net/projects/libmms/" +license=(LGPL-2.1) +depends=('glibc') +makedepends=('quilt') +source=(https://download.sourceforge.net/libmms/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libm/libmms/libmms_$_debver-$_debrel.debian.tar.xz) +sha512sums=('9771c697515f5232eaeaff79e68fe15e34d8aa38aa5d3d68525216357223f314c544d71b5fe18d79a77682f41b1b5d9fb5e7c3c99d0cba5723d2e3de31faec96' + 'd6da31229d629ea6c9119a464fa8b6cc1c012539f469c2176f486743463af08f54e05985a02e0b0cdd01bde0f652567166470e348f8684b60b93e002c4c63814') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.LIB -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libmng/PKGBUILD b/libmng/PKGBUILD new file mode 100644 index 0000000..2687416 --- /dev/null +++ b/libmng/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=libmng +pkgver=1.0.10 +pkgrel=1 +_debver=1.0.10+dfsg +_debrel=3.1 +pkgdesc="A collection of routines used to create and manipulate MNG format graphics files" +arch=(i686 x86_64) +url="https://www.$pkgdir.com/" +license=('custom:MNG-Library') +depends=(lcms2) +makedepends=(quilt) +source=(https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2 + https://ftp.debian.org/debian/pool/main/libm/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('e920a0a93064ceae495d7f231fbb7f41a8b8c18dccbedefb8a00c7af95c9e92695c52f48386f2c80c0bd7820c1e4a0b0d607e66cdbf8d38f8df785d7524f6e8c' + '012c6dc026639bfa2f21feb8efd92e647305c79841efe76d0c64042d94b79b4501419f9ff142e5dcf157cb34de45e95043001fd6efb2ffc5f855e64e39d8e649') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # prepare 1.x version to build it + sed -i 's/AM_C_PROTOTYPES//' makefiles/configure.in + ln -s makefiles/configure.in . + ln -s makefiles/Makefile.am . + autoreconf --force --install + + # fix FILE data type error + sed -i 's|[#]define[ ][_]libmng[_]h[_]|#define _libmng_h_\n\n#include /* needs FILE data type */|' $pkgname.h +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/libmodplug/PKGBUILD b/libmodplug/PKGBUILD new file mode 100644 index 0000000..c5b21ee --- /dev/null +++ b/libmodplug/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=libmodplug +pkgver=0.8.9.0 +pkgrel=3 +pkgdesc="A MOD playing library" +arch=('i686' 'x86_64') +url="http://modplug-xmms.sourceforge.net/" +license=('Public-Domain') +depends=('gcc-libs') +source=(https://downloads.sourceforge.net/modplug-xmms/${pkgname}-${pkgver}.tar.gz) +sha512sums=('880e10154fd367ee24ace53ca7e32a5c1fee7dfff1f934e6499944c12779427da63e2f55f8d6ce25db0a42a5b4424053bf64305b31dbfc4ef6a8909924d655fd') + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -D -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/libmp3splt/PKGBUILD b/libmp3splt/PKGBUILD new file mode 100644 index 0000000..9b9b541 --- /dev/null +++ b/libmp3splt/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libmp3splt +pkgver=0.9.2 +pkgrel=1 +pkgdesc="Library for splitting mp3 and ogg files without decoding" +arch=('i686' 'x86_64') +url='http://mp3splt.sourceforge.net' +license=('GPL-2') +depends=('flac' 'libmad' 'libvorbis' 'libid3tag' 'pcre' 'libtool') +makedepends=('libtool') +source=("https://downloads.sourceforge.net/sourceforge/mp3splt/$pkgname-$pkgver.tar.gz" + "properly-zero-initialise-the-ogg-and-vorbis-state.patch") +sha512sums=('e5c98e8b173bc86302ccee4ca5eb0c8a8d93f225357eb7b14dea8d0700ed62ed6316506c182f6b295130f7924ff0b38e865d5e49fa9cd7882c648360d68872ed' + 'ec9904f86fb631520b4c06c03dcd7fde2b17a0ebdf7e77f36c47bddcaa49961f639c91976470bcd571001d133b724403eb4ffe550c14b49ae883940d914567e9') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i ${srcdir}/properly-zero-initialise-the-ogg-and-vorbis-state.patch + libtoolize --copy --force + ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libmp3splt/properly-zero-initialise-the-ogg-and-vorbis-state.patch b/libmp3splt/properly-zero-initialise-the-ogg-and-vorbis-state.patch new file mode 100644 index 0000000..c8665d4 --- /dev/null +++ b/libmp3splt/properly-zero-initialise-the-ogg-and-vorbis-state.patch @@ -0,0 +1,65 @@ +From 18f018cd774cb931116ce06a520dc0c5f9443932 Mon Sep 17 00:00:00 2001 +From: Ron +Date: Wed, 27 Sep 2017 03:36:51 +0930 +Subject: [PATCH] Properly zero initialise the ogg and vorbis state structs + +This prevents things from exploding in flames if an error occurs and the +code tries to unwind before the codec and container initialiser functions +can all be called. It fixes the second issue indicated in CVE-2017-11333, +which isn't the fault of libvorbis, it's caused by us passing junk data +to vorbis_block_clear() when an invalid file is detected and we bail out +before vorbis_block_init() gets called. + +Ideally, we should simplify all of this and get rid of most of the malloc +farm there by embedding the needed structs in splt_ogg_state (instead of +pointers to them), then just do a single malloc and memset for the whole +lot - but that would be a much more intrusive change, so for now just +ensure the allocated memory is all safely zeroed in the simplest manner. +--- + libmp3splt/plugins/ogg.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/libmp3splt/plugins/ogg.c b/libmp3splt/plugins/ogg.c +index 50cc495..57745f1 100644 +--- a/plugins/ogg.c ++++ b/plugins/ogg.c +@@ -212,26 +212,36 @@ static splt_ogg_state *splt_ogg_v_new(int *error) + goto error; + } + memset(oggstate, 0, sizeof(splt_ogg_state)); ++ + if ((oggstate->sync_in = malloc(sizeof(ogg_sync_state)))==NULL) + { + goto error; + } ++ memset(oggstate->sync_in, 0, sizeof(ogg_sync_state)); ++ + if ((oggstate->stream_in = malloc(sizeof(ogg_stream_state)))==NULL) + { + goto error; + } ++ memset(oggstate->stream_in, 0, sizeof(ogg_stream_state)); ++ + if ((oggstate->vd = malloc(sizeof(vorbis_dsp_state)))==NULL) + { + goto error; + } ++ memset(oggstate->vd, 0, sizeof(vorbis_dsp_state)); ++ + if ((oggstate->vi = malloc(sizeof(vorbis_info)))==NULL) + { + goto error; + } ++ memset(oggstate->vi, 0, sizeof(vorbis_info)); ++ + if ((oggstate->vb = malloc(sizeof(vorbis_block)))==NULL) + { + goto error; + } ++ memset(oggstate->vb, 0, sizeof(vorbis_block)); + + if ((oggstate->headers = malloc(sizeof(splt_v_packet) * TOTAL_HEADER_PACKETS))==NULL) + { +-- +2.29.2 + diff --git a/libmp4v2/PKGBUILD b/libmp4v2/PKGBUILD new file mode 100644 index 0000000..dc905ad --- /dev/null +++ b/libmp4v2/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=libmp4v2 +pkgver=4.1.6 +pkgrel=1 +pkgdesc='An API to create and modify mp4 files as defined by ISO-IEC:14496-1:2001 MPEG-4 Systems' +arch=('i686' 'x86_64') +license=('MPL-1.1') +url='https://github.com/TechSmith/mp4v2' +depends=('gcc-libs') +source=("https://github.com/TechSmith/mp4v2/archive/Release-ThirdParty-MP4v2-$pkgver.tar.gz") +sha512sums=('91f5183d38c9d7fd754ba4b5e149b00600d5b6cb8da063667e5c3a6c8edb4e5efc919d6c4381acd6e011ef56dce3f722a78c51b984066f5c0cc54aae735f3611') + +build() { + cd mp4v2-Release-ThirdParty-MP4v2-$pkgver + + # https://github.com/TechSmith/mp4v2/issues/48 + CXXFLAGS="$CXXFLAGS -Wno-narrowing" ./configure --prefix=/usr + make +} + +package() { + cd mp4v2-Release-ThirdParty-MP4v2-$pkgver + make DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" install-man + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libmpack/PKGBUILD b/libmpack/PKGBUILD new file mode 100644 index 0000000..e3fd30e --- /dev/null +++ b/libmpack/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=libmpack +pkgver=1.0.5 +pkgrel=1 +pkgdesc="Simple implementation of msgpack in C" +arch=('i686' 'x86_64') +url="https://github.com/libmpack/libmpack" +license=('Expat') +source=(https://github.com/libmpack/libmpack/archive/${pkgver}.tar.gz) +sha512sums=('6e30edafcacfb580b410bc6749ed7fe8f18b3be0cb98959339853e77bc3ec0cda6df08a0f1f22768cfc773458a2ea6bcef4f0421eea55cf56c58981d13711a04') + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" PREFIX=/usr install + install -Dm644 LICENSE-MIT -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libmpdclient/PKGBUILD b/libmpdclient/PKGBUILD new file mode 100644 index 0000000..32492ae --- /dev/null +++ b/libmpdclient/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=libmpdclient +pkgver=2.19 +pkgrel=1 +pkgdesc="C library to implement a MPD client" +url="https://www.musicpd.org/libs/libmpdclient/" +license=('Modified-BSD') +arch=('i686' 'x86_64') +depends=('glibc') +makedepends=('meson') +source=("https://www.musicpd.org/download/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz"{,.sig}) +sha512sums=('5d67b95d4b615bc750641f6d5a0240122e8f59c66108838a96bd4bc5cdda8b15288ad03d0e35d92d6e562e67c600f68aad643ca541092121074952a1bc5b3590' + 'SKIP') +validpgpkeys=('0392335A78083894A4301C43236E8A58C6DB4512') # Max Kellermann + +build() { + cd "${pkgname}-${pkgver}" + meson --prefix /usr \ + --libexecdir libexec \ + --sbindir sbin \ + --buildtype plain \ + --auto-features enabled \ + --wrap-mode nodownload \ + -D b_lto=true \ + -D b_pie=true \ + build + ninja -C build +} + +package() { + cd "${pkgname}-${pkgver}" + DESTDIR="${pkgdir}" ninja -C build install + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libmpeg2/PKGBUILD b/libmpeg2/PKGBUILD new file mode 100644 index 0000000..4fb5089 --- /dev/null +++ b/libmpeg2/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=libmpeg2 +pkgver=0.5.1 +pkgrel=6 +pkgdesc="Library for decoding MPEG-1 and MPEG-2 video streams." +arch=('i686' 'x86_64') +url="https://libmpeg2.sourceforge.io/" +depends=('glibc') +makedepends=('sdl' 'libxv') +optdepends=('sdl: required for mpeg2dec' + 'libxv: required for mpeg2dec') +source=(https://libmpeg2.sourceforge.io/files/${pkgname}-${pkgver}.tar.gz + libmpeg2-0.5.1-gcc4.6.patch) +license=('GPL-2') +provides=('mpeg2dec') +sha512sums=('3648a2b3d7e2056d5adb328acd2fb983a1fa9a05ccb6f9388cc686c819445421811f42e8439418a0491a13080977f074a0d8bf8fa6bc101ff245ddea65a46fbc' + '5eef5e283f0f4e8901a1aa1c16e9a2d1e5896a7a09dd5ae107379ec27001f7cd22db62ab731328f2c5e11089e6a8371ced2def4fa8a5a834072ca1e4a4e2ca5d') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np1 -i "${srcdir}/libmpeg2-0.5.1-gcc4.6.patch" + + sed '/AC_PATH_XTRA/d' -i configure.ac + autoreconf --force --install +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --enable-shared --disable-static + make OPT_CFLAGS="${CFLAGS}" \ + MPEG2DEC_CFLAGS="${CFLAGS}" \ + LIBMPEG2_CFLAGS="" +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/libmpeg2/libmpeg2-0.5.1-gcc4.6.patch b/libmpeg2/libmpeg2-0.5.1-gcc4.6.patch new file mode 100644 index 0000000..9c0e185 --- /dev/null +++ b/libmpeg2/libmpeg2-0.5.1-gcc4.6.patch @@ -0,0 +1,128 @@ +--- libmpeg2-0.5.1/libmpeg2/idct_mmx.c.orig 2011-05-13 09:23:02.557758717 -0300 ++++ libmpeg2-0.5.1/libmpeg2/idct_mmx.c 2011-05-13 09:23:06.346778580 -0300 +@@ -39,7 +39,6 @@ + #define rounder(bias) {round (bias), round (bias)} + #define rounder_sse2(bias) {round (bias), round (bias), round (bias), round (bias)} + +- + #if 0 + /* C row IDCT - it is just here to document the MMXEXT and MMX versions */ + static inline void idct_row (int16_t * row, int offset, +@@ -464,10 +463,10 @@ static inline void sse2_idct_col (int16_ + /* Almost identical to mmxext version: */ + /* just do both 4x8 columns in paraller */ + +- static const short t1_vector[] ATTR_ALIGN(16) = {T1,T1,T1,T1,T1,T1,T1,T1}; +- static const short t2_vector[] ATTR_ALIGN(16) = {T2,T2,T2,T2,T2,T2,T2,T2}; +- static const short t3_vector[] ATTR_ALIGN(16) = {T3,T3,T3,T3,T3,T3,T3,T3}; +- static const short c4_vector[] ATTR_ALIGN(16) = {C4,C4,C4,C4,C4,C4,C4,C4}; ++ static/* const*/ short t1_vector[] ATTR_ALIGN(16) = {T1,T1,T1,T1,T1,T1,T1,T1}; ++ static/* const*/ short t2_vector[] ATTR_ALIGN(16) = {T2,T2,T2,T2,T2,T2,T2,T2}; ++ static/* const*/ short t3_vector[] ATTR_ALIGN(16) = {T3,T3,T3,T3,T3,T3,T3,T3}; ++ static/* const*/ short c4_vector[] ATTR_ALIGN(16) = {C4,C4,C4,C4,C4,C4,C4,C4}; + + #if defined(__x86_64__) + +@@ -710,10 +709,10 @@ static inline void sse2_idct_col (int16_ + /* MMX column IDCT */ + static inline void idct_col (int16_t * const col, const int offset) + { +- static const short t1_vector[] ATTR_ALIGN(8) = {T1,T1,T1,T1}; +- static const short t2_vector[] ATTR_ALIGN(8) = {T2,T2,T2,T2}; +- static const short t3_vector[] ATTR_ALIGN(8) = {T3,T3,T3,T3}; +- static const short c4_vector[] ATTR_ALIGN(8) = {C4,C4,C4,C4}; ++ static/* const*/ short t1_vector[] ATTR_ALIGN(8) = {T1,T1,T1,T1}; ++ static/* const*/ short t2_vector[] ATTR_ALIGN(8) = {T2,T2,T2,T2}; ++ static/* const*/ short t3_vector[] ATTR_ALIGN(8) = {T3,T3,T3,T3}; ++ static/* const*/ short c4_vector[] ATTR_ALIGN(8) = {C4,C4,C4,C4}; + + /* column code adapted from peter gubanov */ + /* http://www.elecard.com/peter/idct.shtml */ +@@ -847,33 +846,33 @@ static inline void idct_col (int16_t * c + } + + +-static const int32_t rounder0[] ATTR_ALIGN(8) = ++static/* const*/ int32_t rounder0[] ATTR_ALIGN(8) = + rounder ((1 << (COL_SHIFT - 1)) - 0.5); +-static const int32_t rounder4[] ATTR_ALIGN(8) = rounder (0); +-static const int32_t rounder1[] ATTR_ALIGN(8) = ++static/* const*/ int32_t rounder4[] ATTR_ALIGN(8) = rounder (0); ++static/* const*/ int32_t rounder1[] ATTR_ALIGN(8) = + rounder (1.25683487303); /* C1*(C1/C4+C1+C7)/2 */ +-static const int32_t rounder7[] ATTR_ALIGN(8) = ++static/* const*/ int32_t rounder7[] ATTR_ALIGN(8) = + rounder (-0.25); /* C1*(C7/C4+C7-C1)/2 */ +-static const int32_t rounder2[] ATTR_ALIGN(8) = ++static/* const*/ int32_t rounder2[] ATTR_ALIGN(8) = + rounder (0.60355339059); /* C2 * (C6+C2)/2 */ +-static const int32_t rounder6[] ATTR_ALIGN(8) = ++static/* const*/ int32_t rounder6[] ATTR_ALIGN(8) = + rounder (-0.25); /* C2 * (C6-C2)/2 */ +-static const int32_t rounder3[] ATTR_ALIGN(8) = ++static/* const*/ int32_t rounder3[] ATTR_ALIGN(8) = + rounder (0.087788325588); /* C3*(-C3/C4+C3+C5)/2 */ +-static const int32_t rounder5[] ATTR_ALIGN(8) = ++static/* const*/ int32_t rounder5[] ATTR_ALIGN(8) = + rounder (-0.441341716183); /* C3*(-C5/C4+C5-C3)/2 */ + + + #define declare_idct(idct,table,idct_row_head,idct_row,idct_row_tail,idct_row_mid) \ + static inline void idct (int16_t * const block) \ + { \ +- static const int16_t table04[] ATTR_ALIGN(16) = \ ++ static/* const*/ int16_t table04[] ATTR_ALIGN(16) = \ + table (22725, 21407, 19266, 16384, 12873, 8867, 4520); \ +- static const int16_t table17[] ATTR_ALIGN(16) = \ ++ static/* const*/ int16_t table17[] ATTR_ALIGN(16) = \ + table (31521, 29692, 26722, 22725, 17855, 12299, 6270); \ +- static const int16_t table26[] ATTR_ALIGN(16) = \ ++ static/* const*/ int16_t table26[] ATTR_ALIGN(16) = \ + table (29692, 27969, 25172, 21407, 16819, 11585, 5906); \ +- static const int16_t table35[] ATTR_ALIGN(16) = \ ++ static/* const*/ int16_t table35[] ATTR_ALIGN(16) = \ + table (26722, 25172, 22654, 19266, 15137, 10426, 5315); \ + \ + idct_row_head (block, 0*8, table04); \ +@@ -900,29 +899,29 @@ static inline void idct (int16_t * const + + static inline void sse2_idct (int16_t * const block) + { +- static const int16_t table04[] ATTR_ALIGN(16) = ++ static/* const*/ int16_t table04[] ATTR_ALIGN(16) = + sse2_table (22725, 21407, 19266, 16384, 12873, 8867, 4520); +- static const int16_t table17[] ATTR_ALIGN(16) = ++ static/* const*/ int16_t table17[] ATTR_ALIGN(16) = + sse2_table (31521, 29692, 26722, 22725, 17855, 12299, 6270); +- static const int16_t table26[] ATTR_ALIGN(16) = ++ static/* const*/ int16_t table26[] ATTR_ALIGN(16) = + sse2_table (29692, 27969, 25172, 21407, 16819, 11585, 5906); +- static const int16_t table35[] ATTR_ALIGN(16) = ++ static/* const*/ int16_t table35[] ATTR_ALIGN(16) = + sse2_table (26722, 25172, 22654, 19266, 15137, 10426, 5315); + +- static const int32_t rounder0_128[] ATTR_ALIGN(16) = ++ static/* const*/ int32_t rounder0_128[] ATTR_ALIGN(16) = + rounder_sse2 ((1 << (COL_SHIFT - 1)) - 0.5); +- static const int32_t rounder4_128[] ATTR_ALIGN(16) = rounder_sse2 (0); +- static const int32_t rounder1_128[] ATTR_ALIGN(16) = ++ static/* const*/ int32_t rounder4_128[] ATTR_ALIGN(16) = rounder_sse2 (0); ++ static/* const*/ int32_t rounder1_128[] ATTR_ALIGN(16) = + rounder_sse2 (1.25683487303); /* C1*(C1/C4+C1+C7)/2 */ +- static const int32_t rounder7_128[] ATTR_ALIGN(16) = ++ static/* const*/ int32_t rounder7_128[] ATTR_ALIGN(16) = + rounder_sse2 (-0.25); /* C1*(C7/C4+C7-C1)/2 */ +- static const int32_t rounder2_128[] ATTR_ALIGN(16) = ++ static/* const*/ int32_t rounder2_128[] ATTR_ALIGN(16) = + rounder_sse2 (0.60355339059); /* C2 * (C6+C2)/2 */ +- static const int32_t rounder6_128[] ATTR_ALIGN(16) = ++ static/* const*/ int32_t rounder6_128[] ATTR_ALIGN(16) = + rounder_sse2 (-0.25); /* C2 * (C6-C2)/2 */ +- static const int32_t rounder3_128[] ATTR_ALIGN(16) = ++ static/* const*/ int32_t rounder3_128[] ATTR_ALIGN(16) = + rounder_sse2 (0.087788325588); /* C3*(-C3/C4+C3+C5)/2 */ +- static const int32_t rounder5_128[] ATTR_ALIGN(16) = ++ static/* const*/ int32_t rounder5_128[] ATTR_ALIGN(16) = + rounder_sse2 (-0.441341716183); /* C3*(-C5/C4+C5-C3)/2 */ + + #if defined(__x86_64__) diff --git a/libmtp/PKGBUILD b/libmtp/PKGBUILD new file mode 100644 index 0000000..22a3bb6 --- /dev/null +++ b/libmtp/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=libmtp +pkgver=1.1.17 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="Library implementation of the Media Transfer Protocol" +arch=('i686' 'x86_64') +url='http://libmtp.sourceforge.net' +license=('LGPL-2.1') +depends=('libusb') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/$pkgname/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libm/libmtp/libmtp_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('f2648e259529bd3dfe74a7049a79c4b0042bcaf63cc1fec8b232b66312d62e9620280e4f725312c9ef8207f1f1ceac19f460a0a8772a3cc6c7f0b00ead01add2' + 'e0f94795cc48b7f7e91147ac39baf323398a18a07a6a7aaff1ca21bf321a8b58e7dede70634ce10ef20ee5d410d0b5ac31bf44445d9aaa554dd461c040009e46') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/1002-udev_rules.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --with-udev=/lib/udev + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libmypaint/PKGBUILD b/libmypaint/PKGBUILD new file mode 100644 index 0000000..83c3b82 --- /dev/null +++ b/libmypaint/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +_pkgname=mypaint +pkgname=lib$_pkgname +# this version is a 1.6.0 with fixes only, doen't need debian patches (package revised) +pkgver=1.6.1 +pkgrel=4 +pkgdesc="Library for making brushstrokes which is used by MyPaint and other projects" +url='https://mypaint.app/' +arch=('i686' 'x86_64') +license=('ISC') +depends=('gegl' 'json-c') +makedepends=('doxygen' 'gobject-introspection' 'intltool' 'python' 'gettext-tiny') +optdepends=('gobject-introspection: gir bindings') +source=("https://github.com/${_pkgname}/${pkgname}/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('f759223e2e2da9fcc675bc2fa6324e2688ab36bdd979c0b3fad6737a6884e6095b6599c37960fd4897b9fd9063d5643fc2ab7e559438095c1872e019cd46d38b') + +prepare() { + cd $pkgname-$pkgver + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-gegl \ + --enable-docs + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libnatpmp/PKGBUILD b/libnatpmp/PKGBUILD new file mode 100644 index 0000000..776cd28 --- /dev/null +++ b/libnatpmp/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=libnatpmp +pkgver=20150609 +_debver=20150609 +_debrel=7.1 +pkgrel=1 +pkgdesc='A portable and fully compliant implementation of the NAT-PMP protocol' +arch=('i686' 'x86_64') +url='http://miniupnp.free.fr/libnatpmp.html' +license=('Modified-BSD') +depends=('glibc') +makedepends=('quilt') +source=("https://miniupnp.tuxfamily.org/files/libnatpmp-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libn/libnatpmp/libnatpmp_$_debver-$_debrel.debian.tar.xz") +sha512sums=('e50b1f68ce9254bb2f068ddc37417a3c417b80f7b3fb3d84e3e9af4a144d89e204ab993b54c01657335e855d0124a8fcbbf96ce78db7b9ae0b03b6eb79de2e09' + 'cd38c4b3a5b412c7f51f0cadfc9cf3f2f7f0959ffd15c6fecf784dad4d3a04d39579798bd6ee1a8d10925800cf67c4d181e771fdf2d53ce6c2b855a409bfe0f1') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -e 's/CFLAGS = /CFLAGS += /' -i Makefile +} + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make INSTALLPREFIX="$pkgdir/usr" INSTALLDIRINC="$pkgdir/usr/include" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm644 natpmpc.1 "$pkgdir/usr/share/man/man1/natpmpc.1" +} diff --git a/libnet/PKGBUILD b/libnet/PKGBUILD new file mode 100644 index 0000000..1891a9f --- /dev/null +++ b/libnet/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=libnet +pkgver=1.1.6 +pkgrel=1 +epoch=1 +pkgdesc="A library which provides API for commonly used low-level net functions" +arch=('i686' 'x86_64') +url="https://github.com/libnet/libnet" +license=('Simplified-BSD') +depends=('glibc' 'sh') +makedepends=('help2man' 'doxygen') +source=(https://github.com/libnet/libnet/releases/download/v${pkgver}/libnet-${pkgver}.tar.gz) +sha512sums=('a67e502b0e6957ca590e47cb50b0472dd83d622d84c62818d665d771616df91b5a8fa8fcf1040d13b7860aaabaf338152ef40f66ab97c3fc9502edb08cea0bb6') + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -Dm644 doc/COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libnetfilter_acct/PKGBUILD b/libnetfilter_acct/PKGBUILD new file mode 100644 index 0000000..f47c9b9 --- /dev/null +++ b/libnetfilter_acct/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=libnetfilter_acct +pkgver=1.0.3 +pkgrel=1 +pkgdesc="Library providing interface to extended accounting infrastructure" +arch=('i686' 'x86_64') +url='https://www.netfilter.org/projects/libnetfilter_acct/' +license=('LGPL-2.1') +depends=('libnfnetlink' 'libmnl') +makedepends=('pkg-config') +validpgpkeys=('C09DB2063F1D7034BA6152ADAB4655A126D292E4') # Netfilter Core Team +source=("https://www.netfilter.org/projects/$pkgname/files/$pkgname-$pkgver.tar.bz2"{,.sig}) +sha512sums=('5ca332840663941182343fdc0d5e45116bba71a97a913db0b385ea37ef31a04f8267a2279b7a2862ce338c6eeb093bb3ef9908f57770e64acf5d2b2266d3bfe5' + 'SKIP') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libnetfilter_log/PKGBUILD b/libnetfilter_log/PKGBUILD new file mode 100644 index 0000000..95ab034 --- /dev/null +++ b/libnetfilter_log/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=libnetfilter_log +pkgver=1.0.1 +_debver=1.0.1 +_debrel=3 +pkgrel=1 +pkgdesc="Library providing API to packets that have been logged by netfilter" +arch=('i686' 'x86_64') +url='https://www.netfilter.org/projects/libnetfilter_log/' +license=('GPL-2') +depends=('libnfnetlink') +makedepends=('quilt') +validpgpkeys=('57FF5E9C9AA67A860B557AF7A4111F89BB5F58CC') # Netfilter Core Team +source=("https://www.netfilter.org/projects/$pkgname/files/$pkgname-$pkgver.tar.bz2"{,.sig} + "https://deb.debian.org/debian/pool/main/libn/libnetfilter-log/libnetfilter-log_$_debver-$_debrel.debian.tar.xz") +sha512sums=('4088b9bf055fb4cd5f2e201a46a00def7642116b5d1695a371936b7b45eb93877944456506b45761bf2f3f81b40c161c1ecdcfb90532009f073dac3cedc6f436' + 'SKIP' + '1d5a46a3d5d8652e0cd019c42fdb7fe782c77ce3b40c37c67b5ad1ad300c21ab99ded7ad549eff5b0d08f049dccf571d6fb36c9627bd17718fe71444ba4bdc0c') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libnetfilter_queue/PKGBUILD b/libnetfilter_queue/PKGBUILD new file mode 100644 index 0000000..da4f57d --- /dev/null +++ b/libnetfilter_queue/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=libnetfilter_queue +pkgver=1.0.5 +pkgrel=1 +pkgdesc='Userspace API to packets that have been queued by the kernel packet filter' +arch=('i686' 'x86_64') +url='https://www.netfilter.org/projects/libnetfilter_queue/' +license=('GPL-2') +depends=('libnfnetlink' 'libmnl') +validpgpkeys=('57FF5E9C9AA67A860B557AF7A4111F89BB5F58CC' + 'C09DB2063F1D7034BA6152ADAB4655A126D292E4') +source=("https://www.netfilter.org/projects/$pkgname/files/$pkgname-$pkgver.tar.bz2"{,.sig}) +sha512sums=('732a44b602e5efaa4f5582ea25ff8f5ec8f4dca5c0e725cd93fe2d441db80416b25c6018147be90acb262d7428eb5b21b3f7b5920e612d115061ec6a19d67f85' + 'SKIP') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libnewt/PKGBUILD b/libnewt/PKGBUILD new file mode 100644 index 0000000..0fecd2f --- /dev/null +++ b/libnewt/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libnewt +pkgver=0.52.21 +_debver=$pkgver +_debrel=4 +pkgrel=1 +_tclver=8.6 +pkgdesc="Not Erik's Windowing Toolkit - text mode windowing with slang" +arch=('i686' 'x86_64') +url='https://pagure.io/newt' +license=('LGPL-2') +depends=('gpm' 'libxcrypt' 'popt' 'slang') +makedepends=('python' "tcl>=$_tclver" 'quilt') +optdepends=('python: libnewt support with the _snack module' + 'tcl: whiptcl support') +options=(!makeflags) +source=("https://releases.pagure.org/newt/newt-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/n/newt/newt_$_debver-$_debrel.debian.tar.xz") +sha512sums=('d53d927996d17223e688bf54dccfabb2a3dc02bfe38ffc455964e86feaca3cd9f9ab5b19774433be430fa4d761cd9b6680b558f297acb86f80daeb6942f7d23c' + 'c980721e4f725e945ff5cf255674d3cbd7e090709e70c93a341311209aedf2f7b7f9b49d1146371020c90a3805fc3bb2a49ab3b52ef233245c496721ae3b3151') + +prepare() { + cd newt-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + echo '#define USE_INTERP_RESULT 1' >> config.h + sed -i "s:tcl8.4:tcl$_tclver:" Makefile.in +} + +build() { + cd newt-$pkgver + ./configure --prefix=/usr --with-gpm-support + make +} + +package() { + make -C newt-$pkgver prefix="$pkgdir/usr" install + install -Dm644 newt-$pkgver/COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libnfs/PKGBUILD b/libnfs/PKGBUILD new file mode 100644 index 0000000..3315c26 --- /dev/null +++ b/libnfs/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libnfs +pkgver=4.0.0 +_debver=4.0.0 +_debrel=1 +pkgrel=1 +pkgdesc="client library for accessing NFS shares" +arch=('i686' 'x86_64') +url="https://github.com/sahlberg/libnfs" +license=('LGPL-2.1') +depends=('glibc') +makedepends=('quilt') +source=("https://github.com/sahlberg/$pkgname/archive/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libn/libnfs/libnfs_$_debver-$_debrel.debian.tar.xz") +sha512sums=('3d93d83d1909f24de304c0d47fa6240da7ecf43ce2488a242a58ddabe51d774caf813f5a90ae720a8edd251a765b30e88c0e5b6a13ecb254dfecdc98e30737fa' + '4ba7c5dab818139ce2f108594b512f76c432d5faadd4290fe23665f3857b43517ca3f7da7c416ed8ec92ff0796ad2daa8f827bc876f148ef74e0ec2e6e3518bf') + +prepare() { + cd "$pkgname-$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -vif +} + +build() { + cd "$pkgname-$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + + install -Dm644 LICENCE-LGPL-2.1.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} + diff --git a/libnids/PKGBUILD b/libnids/PKGBUILD new file mode 100644 index 0000000..e6333fe --- /dev/null +++ b/libnids/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=libnids +pkgver=1.25 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="An implementation of an E-component of Network Intrusion Detection System." +arch=('i686' 'x86_64') +url='http://libnids.sourceforge.net/' +license=('GPL-2') +depends=('libnet' 'libpcap' 'glib2' 'libnsl') +makedepends=('pkgconfig' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/libn/${pkgname}/${pkgname}_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/libn/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('8f89b0e26759d54b139c1a77a5ec45fe5437d88cc4db718d4f77c2fa741aec7bd82e1dcfc8402d47acbc037c1e32b35f709bce316e47a15b5d20d8beb16fe830' + '43fe1db3cfc19cd60aae0c15f421c1eca407b5f00730731c65300d1561b4c9f384b69a071f867473d3f668b3dce0c24e655225158574d6649512e317cf2c9de7') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/04_avoid-soname-bump.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir"/$pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --man=/usr/share/man \ + --enable-shared + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + + make install_prefix="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libnsbmp/PKGBUILD b/libnsbmp/PKGBUILD new file mode 100644 index 0000000..641bf15 --- /dev/null +++ b/libnsbmp/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=libnsbmp +pkgver=0.1.6 +pkgrel=1 +pkgdesc='Decoding library for BMP and ICO image file formats' +arch=('i686' 'x86_64') +url='https://www.netsurf-browser.org/projects/libnsbmp/' +license=('Expat') +makedepends=('netsurf-buildsystem') +source=("https://download.netsurf-browser.org/libs/releases/$pkgname-$pkgver-src.tar.gz") +sha512sums=('7e987a47d56216b2e2a795c1233c63599d474fdd9dd495f31bc9a902f92072078ae79e73323da457fd5059908a65f44bacc6c8742f92f0950af80196a4bb4732') + +build() { + make -C $pkgname-$pkgver \ + INCLUDEDIR=include \ + LIBDIR=lib PREFIX=/usr \ + COMPONENT_TYPE=lib-shared +} + +package() { + cd $pkgname-$pkgver + make install \ + INCLUDEDIR=include \ + LIBDIR=lib \ + PREFIX=/usr \ + DESTDIR="$pkgdir" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libnsgif/PKGBUILD b/libnsgif/PKGBUILD new file mode 100644 index 0000000..2f3aa90 --- /dev/null +++ b/libnsgif/PKGBUILD @@ -0,0 +1,21 @@ +# Maintainer: Jesus E. + +pkgname=libnsgif +pkgver=0.2.1 +pkgrel=1 +pkgdesc='Decoding library for the GIF image file format' +arch=(i686 x86_64) +url='https://www.netsurf-browser.org/projects/libnsgif/' +license=(Expat) +depends=(glibc) +makedepends=('netsurf-buildsystem>=1.9') +source=("https://download.netsurf-browser.org/libs/releases/$pkgname-$pkgver-src.tar.gz") +sha256sums=('9eaea534cd70b53c5aaf45317ae957701685a6b4a88dbe34ed26f4faae879a4b') + +package() { + cd $pkgname-$pkgver + make PREFIX=/usr COMPONENT_TYPE="lib-shared" DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +# vim:set sw=2 et: diff --git a/libnsutils/PKGBUILD b/libnsutils/PKGBUILD new file mode 100644 index 0000000..5630647 --- /dev/null +++ b/libnsutils/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=libnsutils +pkgver=0.1.0 +pkgrel=2 +pkgdesc='NetSurf Utilities' +arch=('i686' 'x86_64') +url='https://source.netsurf-browser.org/libnsutils.git/' +license=('Expat') +makedepends=('netsurf-buildsystem') +source=("http://download.netsurf-browser.org/libs/releases/${pkgname}-${pkgver}-src.tar.gz") +sha512sums=('82d75e799b21484120b9711c853075a07990aa4d5ac5bb0574683bd1fd59eef547d9b78333eeb2da9d96c2132b4e7c32510cf690c80cef291cce8ef2eb44198e') + +build() { + make -C $pkgname-$pkgver PREFIX=/usr INCLUDEDIR=include \ + LIBDIR=lib COMPONENT_TYPE=lib-shared +} + +package() { + cd $pkgname-$pkgver + make PREFIX=/usr INCLUDEDIR=include LIBDIR=lib COMPONENT_TYPE=lib-shared \ + DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libofx/PKGBUILD b/libofx/PKGBUILD new file mode 100644 index 0000000..855b904 --- /dev/null +++ b/libofx/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgbase=libofx +pkgname=('libofx' 'libofx-doc') +pkgver=0.10.9 +pkgrel=1 +pkgdesc="The libofx OFX banking protocol abstraction library" +arch=('i686' 'x86_64') +url='https://github.com/libofx' +license=('GPL-2') +depends=('opensp' 'curl' 'libxml++2.6') +source=("https://github.com/$pkgname/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('89425912fa8c800ede9d7177ccd5cb3ea2a2301b42aa6580ddb105406fe68c770e2c461eefdea5bc7e883967c90e3519a219bf0b56d12c7de1030d0964d50cac') + +build() { + cd $pkgbase-$pkgver + ./configure --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make CXXFLAGS+=-std=c++11 +} + +package_libofx() { + options=('!docs') + cd $pkgbase-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_libofx-doc() { + pkgdesc="Documention of the OFX banking standard API" + depends=() + cd $pkgbase-$pkgver + make DESTDIR="$pkgdir" install-docDATA + make -C doc DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libogg/PKGBUILD b/libogg/PKGBUILD new file mode 100644 index 0000000..e05879d --- /dev/null +++ b/libogg/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=libogg +pkgver=1.3.4 +pkgrel=1 +pkgdesc='Ogg bitstream and framing library' +arch=(i686 x86_64) +url=https://www.xiph.org/ogg/ +license=(Modified-BSD) +depends=(glibc) +makedepends=( + cmake + ninja +) +source=("https://downloads.xiph.org/releases/ogg/libogg-${pkgver}.tar.xz") +sha512sums=('09ffb72c3cbde5c05140f5879bd457106ed4070bd7aa5ea7720cf8910167f1d0fa6312f1f71625d51f21e3033219da858e1a8a2701bfd768b35061f7586f976c') + +prepare() { + if [[ -d build ]]; then + rm -rf build + fi + mkdir build +} + +build() { + cd build + + cmake ../${pkgname}-${pkgver} \ + -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON + ninja +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install + install -Dm 644 ${pkgname}-${pkgver}/COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname}/ +} + +# vim: ts=2 sw=2 et: diff --git a/libolm/PKGBUILD b/libolm/PKGBUILD new file mode 100644 index 0000000..ca55922 --- /dev/null +++ b/libolm/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=('libolm' 'python-olm') +pkgver=3.2.1 +_debver=$pkgver +_debrel=7 +pkgrel=1 +pkgdesc="Implementation of the Olm and Megolm cryptographic ratchets" +arch=('i686' 'x86_64') +url='https://gitlab.matrix.org/matrix-org/olm' +license=('Apache-2.0') +makedepends=('cmake' 'python' 'python-cffi' 'python-future' 'python-setuptools' 'quilt') +source=("https://gitlab.matrix.org/matrix-org/olm/-/archive/${pkgver}/olm-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/o/olm/olm_${_debver}~dfsg-${_debrel}.debian.tar.xz") +sha512sums=('0c24e397a02e430487639494997c7d6cf47cce229b36114db818f14173e79c5ef7d25598c25f2778da4a1647e72fdd67e8b3c6272b980132f308d5fd1b17e189' + '0cba86c680cb9129fd72d8e0ea4e6d814b8d7daf0d9ca1445cee03f8200e87d97921274bff2c84d32736ae1ab8d6438d6a4da59135bcc6f5578e46f793adcf1c') + +prepare() { + cd olm-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd olm-$pkgver + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_C_FLAGS="${CFLAGS} ${CPPFLAGS}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS} ${CPPFLAGS}" \ + -B build + cmake --build build + + cd ./python + make olm-python3 +} + +package_libolm() { + depends=('gcc-libs') + + cd olm-$pkgver/build + make DESTDIR="$pkgdir" install + install -Dm644 $srcdir/olm-$pkgver/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_python-olm() { + pkgdesc="Python bindings for Olm" + depends=('libolm' 'python' 'python-cffi' 'python-future') + + cd olm-$pkgver/python + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 $srcdir/olm-$pkgver/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libopenmpt/PKGBUILD b/libopenmpt/PKGBUILD new file mode 100644 index 0000000..e2c5e2d --- /dev/null +++ b/libopenmpt/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=libopenmpt +pkgver=0.5.12 +pkgrel=1 +pkgdesc='A library to render tracker music to a PCM audio stream' +arch=('i686' 'x86_64') +url="https://lib.openmpt.org/libopenmpt/" +license=('Modified-BSD') +depends=('flac' 'gcc-libs' 'glibc' 'libogg' 'libsndfile' 'libvorbis' 'mpg123' 'portaudio') +makedepends=('autoconf-archive' 'doxygen' 'help2man') +provides=('openmpt123') +replaces=('openmpt123') +source=("$pkgname-$pkgver.tar.gz::https://lib.openmpt.org/files/libopenmpt/src/${pkgname}-${pkgver}+release.autotools.tar.gz") +sha512sums=('e22a79737a825a5753429271bba7af94fd195fb0ff770a3e2091b941c3856bbad770eeeb88cd86d37e01b0138e820199d3650f55546f2e33bb2e99b1b14d9925') + +prepare() { + mv -v "$pkgname-$pkgver+release.autotools" "$pkgname-$pkgver" + cd "$pkgname-$pkgver" + autoreconf -fiv +} + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr --with-pulseaudio=no --without-portaudiocpp + # prevent excessive overlinking due to libtool + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -vDm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/libopusenc/PKGBUILD b/libopusenc/PKGBUILD new file mode 100644 index 0000000..f5b6fe4 --- /dev/null +++ b/libopusenc/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=libopusenc +pkgver=0.2.1 +pkgrel=1 +pkgdesc="High-level API for encoding .opus files" +arch=('i686' 'x86_64') +url="https://opus-codec.org/" +license=('Modified-BSD') +depends=('glibc' 'opus') +options=('staticlibs') +source=("https://archive.mozilla.org/pub/opus/$pkgname-$pkgver.tar.gz") +sha512sums=('adf30cacea9ac2e5889a40147f53943a1bec5279c5ff3a9b09de8ca52727a6cbaeecd338417fc5856e337ae183c85b0d366d14ec4ec329de12d50709a6f6507a') + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix="/usr" + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -rf "$pkgdir/usr/share/doc" +} diff --git a/libotr/PKGBUILD b/libotr/PKGBUILD new file mode 100644 index 0000000..b258fcf --- /dev/null +++ b/libotr/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=libotr +pkgver=4.1.1 +_debver=4.1.1 +_debrel=4 +pkgrel=1 +pkgdesc='Off-the-Record Messaging Library and Toolkit' +arch=('i686' 'x86_64') +url='https://otr.cypherpunks.ca/' +license=('GPL-2' 'LGPL-2.1') +depends=('libgcrypt') +makedepends=('quilt') +source=("https://otr.cypherpunks.ca/${pkgname}-${pkgver}.tar.gz"{,.asc} + "https://deb.debian.org/debian/pool/main/libo/libotr/libotr_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('c957206235b9f627542f23a645c822ea1b318d83fa655f41ed8d9a3c0dddf30b88f0ca82060026af155e48ecb13969dc9270831f20304669794151f666ae5cb0' + 'SKIP' + '661e5ecafd010655fce7fdfc83738415b33c86f4ae8fcfa87dba5b232134ca4bf02239473099b2fb578ecb4f89b555ae760b71fcaf4173077605e479596d164e') +validpgpkeys=('22DF3305DF56667CE15784FCF24DE08F42C2ABAD') # OTR Dev Team + + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0004-Suggest-pidgin-otr-to-Debian-and-Ubuntu-users-who-ha.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}" + for i in COPYING{,.LIB}; do + install -m644 -v "$i" "${pkgdir}/usr/share/licenses/${pkgname}" + done +} + +# vim:set ts=2 sw=2 et: diff --git a/libots/PKGBUILD b/libots/PKGBUILD new file mode 100644 index 0000000..da0f7fa --- /dev/null +++ b/libots/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=libots +pkgver=0.5.0 +_debver=0.5.0 +_debrel=6 +pkgrel=1 +pkgdesc='Open Text Summarizer' +url='https://libots.sourceforge.net/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libxml2' 'glib2' 'popt') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/o/ots/ots_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/o/ots/ots_${_debver}-${_debrel}.debian.tar.xz" + "remove-gtk-doc.patch") +sha512sums=('736a672e16b741f2948e6874b88d4ade8e0450941915e65285f2fe661194a6d384a6abb267b15c3254c638750c644b4b2cf4279d7bda163b02336fcd8da9cfbe' + 'd905bc2c92b174fe2f0ca07e5a5a6c6926cb4d8ddc3d79525cbd27938d0b0b9a278e669dcc39090423bd96cbcbf3397e60dbc34c92fb0dbbba10a3740202a6fd' + '0e39c88898444d7643ee17eddca5e7055bef88b2784f77611ed725acaee5843376ea271ebfcacaa6bb9dcc57d1e54d68bf7f80d735f2817eff14fb42fafb9085') + +prepare() { + cd ots-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/gtkdoc.patch || true + + quilt push -av + fi + + # additional fixes + patch -Np1 -i ../remove-gtk-doc.patch + + autoreconf -vfi +} + +build() { + cd ots-${pkgver} + ./configure --prefix=/usr --disable-gtk-doc + + make +} + +package() { + cd ots-${pkgver} + make DESTDIR="${pkgdir}" install + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libots/remove-gtk-doc.patch b/libots/remove-gtk-doc.patch new file mode 100644 index 0000000..cc18d6b --- /dev/null +++ b/libots/remove-gtk-doc.patch @@ -0,0 +1,47 @@ +diff --git a/Makefile.am b/Makefile.am +index a2575466..fe2c8e48 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -28,5 +28,4 @@ MAINTAINERCLEANFILES = \ + $(srcdir)/ltmain.sh \ + $(srcdir)/missing \ + $(srcdir)/mkinstalldirs \ +- $(srcdir)/gtk-doc.make \ + `find "$(srcdir)" -type f -name Makefile.in -print` +diff --git a/Makefile.in b/Makefile.in +index 6270c761..56fa269f 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -111,7 +111,7 @@ EXTRA_DIST = libots-1.pc.in ots.spec.in ots.spec README TODO + + DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc + +-MAINTAINERCLEANFILES = $(srcdir)/INSTALL $(srcdir)/aclocal.m4 $(srcdir)/autoscan.log $(srcdir)/compile $(srcdir)/config.guess $(srcdir)/config.h.in $(srcdir)/config.sub $(srcdir)/configure $(srcdir)/configure.scan $(srcdir)/depcomp $(srcdir)/install-sh $(srcdir)/ltmain.sh $(srcdir)/missing $(srcdir)/mkinstalldirs $(srcdir)/gtk-doc.make `find "$(srcdir)" -type f -name Makefile.in -print` ++MAINTAINERCLEANFILES = $(srcdir)/INSTALL $(srcdir)/aclocal.m4 $(srcdir)/autoscan.log $(srcdir)/compile $(srcdir)/config.guess $(srcdir)/config.h.in $(srcdir)/config.sub $(srcdir)/configure $(srcdir)/configure.scan $(srcdir)/depcomp $(srcdir)/install-sh $(srcdir)/ltmain.sh $(srcdir)/missing $(srcdir)/mkinstalldirs `find "$(srcdir)" -type f -name Makefile.in -print` + + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +diff --git a/doc/Makefile.am b/doc/Makefile.am +index 1722b855..495c08e4 100644 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -39,6 +39,3 @@ extra_files = + GTKDOC_CFLAGS = -I$(top_srcdir) + + GTKDOC_LIBS = +- +- +-include $(top_srcdir)/gtk-doc.make +diff --git a/doc/Makefile.in b/doc/Makefile.in +index 2380c9e1..0f21b8df 100644 +--- a/doc/Makefile.in ++++ b/doc/Makefile.in +@@ -241,8 +241,6 @@ distclean-generic clean-generic maintainer-clean-generic clean \ + mostlyclean distclean maintainer-clean + + +-include $(top_srcdir)/gtk-doc.make +- + # Tell versions [3.59,3.63) of GNU make to not export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. + .NOEXPORT: diff --git a/libpaper/PKGBUILD b/libpaper/PKGBUILD new file mode 100644 index 0000000..9b2a87a --- /dev/null +++ b/libpaper/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libpaper +pkgver=1.1.28 +pkgrel=1 +pkgdesc='Library for handling paper characteristics' +arch=('i686' 'x86_64') +url='https://packages.debian.org/source/bullseye/libpaper' +license=('GPL-2') +depends=('sh' 'run-parts') +makedepends=('gettext-tiny') +backup=('etc/papersize') +source=("https://deb.debian.org/debian/pool/main/libp/libpaper/libpaper_$pkgver.tar.gz") +sha512sums=('3bf6ebb0af89931d2f72ea4a09a7fa958b2facda5f238983ec7bac39652e08614b33f0de3af74a03457b2a4203eee4950bf18a4b726e79aa64093ace6a1fb0bc') + +prepare() { + cd "$pkgname-$pkgver" + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # add systemwide default papersize read by many office applications + install -dm 755 "$pkgdir"/etc + echo '# Simply write the paper name. See papersize(5) for possible values' > "$pkgdir"/etc/papersize + + # add libpaper.d directory other packages can use to store files + install -dm 755 "$pkgdir"/etc/libpaper.d + + # add localisation + pushd debian/po + for i in `ls *.po`; do + install -dm 755 "${pkgdir}"/usr/share/locale/${i%.po}/LC_MESSAGES/; + msgfmt $i -o "${pkgdir}"/usr/share/locale/${i%.po}/LC_MESSAGES/${pkgname}.mo; + done + popd + + # add license + install -Dm 644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING +} diff --git a/libparserutils/PKGBUILD b/libparserutils/PKGBUILD new file mode 100644 index 0000000..a980345 --- /dev/null +++ b/libparserutils/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libparserutils +pkgver=0.2.4 +pkgrel=1 +pkgdesc='Library for building efficient parsers' +arch=('i686' 'x86_64') +url='https://www.netsurf-browser.org/projects/libparserutils/' +license=('Expat') +makedepends=('netsurf-buildsystem') +source=("https://download.netsurf-browser.org/libs/releases/$pkgname-$pkgver-src.tar.gz") +sha512sums=('e6a7b618e00e2bc69a0de63c29cc809f250fbd1c10544523c563f4bb9ac3281e02ba36c096518fc0a9074dad49a05346b04cc85b7d972f88f2645af0f869cbc2') + +build() { + cd $pkgname-$pkgver + sed 's:_BSD_SOURCE:_DEFAULT_SOURCE:' -i Makefile + make INCLUDEDIR=include LIBDIR=lib PREFIX=/usr COMPONENT_TYPE=lib-shared +} + +package() { + cd $pkgname-$pkgver + make install INCLUDEDIR=include LIBDIR=lib PREFIX=/usr DESTDIR="$pkgdir" \ + COMPONENT_TYPE=lib-shared + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libpciaccess/PKGBUILD b/libpciaccess/PKGBUILD new file mode 100644 index 0000000..8682eff --- /dev/null +++ b/libpciaccess/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libpciaccess +_openbsdver=6.9 +pkgver=0.14 +pkgrel=4 +pkgdesc="X11 PCI access library, provided by Xenocara" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libpciaccess-$pkgver.tar.lz{,.sig}) +sha512sums=('7f82d778adf87258f151b8e5b751a3606faffb37aee445df4991c12ea2904d7d8b419e10fa682d15707c138e79e4032571a7cadf693b7949e5bc4bb88de8b4a0' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libpciaccess" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libpciaccess" + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libpciaccess" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libpeas/PKGBUILD b/libpeas/PKGBUILD new file mode 100644 index 0000000..f90d217 --- /dev/null +++ b/libpeas/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=libpeas +pkgver=1.30.0 +pkgrel=2 +pkgdesc="A GObject plugins library" +arch=('i686' 'x86_64') +url='https://wiki.gnome.org/Projects/Libpeas' +license=('GPL-2') +depends=('gtk' 'gobject-introspection-runtime') +makedepends=('python-pygobject' 'gobject-introspection' 'meson' 'vala') +optdepends=('python-pygobject: Python loader') +source=("https://gitlab.gnome.org/GNOME/${pkgname}/-/archive/${pkgname}-${pkgver}/${pkgname}-${pkgname}-${pkgver}.tar.gz") +sha512sums=('4effd07e8675c0cb34a4eb4a804070042d91e61c62c69fad1652a730b5942f5c21015cd357c95e23d1f04f54cc8800bdde7229252d6d9e355eef24cddca54a3f') + +prepare() { + mv "$pkgname-$pkgname-$pkgver" "$pkgname-$pkgver" +} + +build() { + cd "$pkgname-$pkgver" + hyperbola-meson build -D vapi=true -D gtk_doc=false + meson compile -C build +} + +package() { + cd "$pkgname-$pkgver" + DESTDIR="$pkgdir" meson install -C build + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libpgm/PKGBUILD b/libpgm/PKGBUILD new file mode 100644 index 0000000..617b9fa --- /dev/null +++ b/libpgm/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=libpgm +pkgver=5.3.128 +_debver=$pkgver +_debrel=2 +_pkgver="${pkgver//./-}" +pkgrel=2 +pkgdesc="OpenPGM: implementation of the Pragmatic General Multicast (PGM, RFC3208)" +arch=('i686' 'x86_64') +url='https://www.freshports.org/net/openpgm/' +license=('LGPL-2.1') +depends=('glibc') +makedepends=('python' 'quilt') +options=(!strip) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/steve-o/openpgm/archive/release-${_pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libp/libpgm/libpgm_${_debver}~dfsg-${_debrel}.debian.tar.xz") +sha512sums=('ad1148cb01d982be48ca35c027938e60fc86f2da3de14e994c3d390a6c5b13385893f2bd87d23c2d6cbd9015770ff72ef6fb1090b6ccf3bfd0812189e67fd3bd' + '72909c6418a3de568ecebce7f535aeab36a19904d169745eb0645036c4a46f254357c3f5c46bb7f5b149712474422da1c26736a4f81b1c2be85596d554e67346') + +prepare() { + cd "$srcdir/openpgm-release-$_pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd "$srcdir/openpgm-release-$_pkgver/openpgm/pgm" + + 2to3 -wn version_generator.py + # version 5.3.128 is a little broken + cp openpgm-5.2.pc.in openpgm-5.3.pc.in +} + +build() { + cd "$srcdir/openpgm-release-$_pkgver/openpgm/pgm" + ./bootstrap.sh + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/openpgm-release-$_pkgver/openpgm/pgm" + make prefix="$pkgdir/usr" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libplacebo/PKGBUILD b/libplacebo/PKGBUILD new file mode 100644 index 0000000..5b2f08e --- /dev/null +++ b/libplacebo/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=libplacebo +pkgver=2.72.2 +pkgrel=2 +pkgdesc="Reusable library for GPU-accelerated video/image rendering primitives" +url='https://github.com/haasn/libplacebo' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('glslang' 'lcms2' 'libepoxy' 'mesa-libgl') +makedepends=('meson' 'ninja' 'python' 'python-mako') +source=(https://code.videolan.org/videolan/libplacebo/-/archive/v${pkgver}/libplacebo-v${pkgver}.tar.gz) +sha512sums=('0cb100350dbc81566a8363b0265bf89de8569b0313d1f1aa8ba621e39d7ee43a47ec9ab7827d01fdd2133c357983002412e67c2b2ba3616bd570f16e8e3ba135') + +build() { + cd ${pkgbase}-v${pkgver} + CXXFLAGS+=" -I/usr/include/glslang" + hyperbola-meson build \ + -D tests=true \ + -D glslang=enabled \ + -D vulkan=disabled \ + -D shaderc=disabled \ + -D lcms=enabled + ninja -C build +} + +package() { + cd ${pkgbase}-v${pkgver} + DESTDIR="${pkgdir}" ninja -C build install + install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libpng/PKGBUILD b/libpng/PKGBUILD new file mode 100644 index 0000000..23c13b1 --- /dev/null +++ b/libpng/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=libpng +pkgver=1.6.37 +_debver=1.6.37 +_debrel=3 +pkgrel=1 +pkgdesc="A collection of routines used to create PNG format graphics files" +arch=('i686' 'x86_64') +url="http://www.libpng.org/pub/png/libpng.html" +license=('custom:libpng') +depends=('zlib' 'sh') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.xz" + "https://deb.debian.org/debian/pool/main/libp/libpng1.6/libpng1.6_$_debver-$_debrel.debian.tar.xz") +sha512sums=('59e8c1059013497ae616a14c3abbe239322d3873c6ded0912403fc62fb260561768230b6ab997e2cccc3b868c09f539fd13635616b9fa0dd6279a3f63ec7e074' + '572781fe5581cbff3a140922bb611e84d44511256d766b85b4e334a47afc3ffbb7d60f96068945efb7e9e4f3d92b8beb63593dab8752d85182c6ecc26907ef37') +validpgpkeys=('8048643BA2C840F4F92A195FF54984BFA16C640F') # Glenn Randers-Pehrson (mozilla) + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/libpng-config.patch || true + rm -fv debian/patches/libpng-1.6.37-apng.patch || true + rm -v debian/patches/72fa126446460347a504f3d9b90f24aed1365595.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --disable-static + make +} + +check() { + cd $pkgname-$pkgver + + make check +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + cd contrib/pngminus + make PNGLIB_SHARED="-L$pkgdir/usr/lib -lpng" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" png2pnm pnm2png + install -m0755 png2pnm pnm2png "$pkgdir/usr/bin/" +} + +# vim:set ts=2 sw=2 et: diff --git a/libpng12/PKGBUILD b/libpng12/PKGBUILD new file mode 100644 index 0000000..05a47d3 --- /dev/null +++ b/libpng12/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=libpng12 +pkgver=1.2.59 +pkgrel=1 +pkgdesc="A collection of routines used to create PNG format graphics files" +arch=('i686' 'x86_64') +url='http://www.libpng.org/pub/png/libpng.html' +license=('custom:libpng') +depends=('glibc' 'zlib') +source=("https://sourceforge.net/projects/libpng/files/libpng-${pkgver}.tar.xz" + "https://sourceforge.net/projects/libpng-apng/files/libpng12/${pkgver}/libpng-${pkgver}-apng.patch.gz") +sha512sums=('bfdc51eca72a76697f1396611a08aa4ce6a169837197699c55d845fdef17850e8f7665b7b81ba815c277453737f12eeb41409ff9c7eca1ac0c0d134c44492a6e' + '5e405e8c444956b5f30cb2bc8c55f8050c038287afa4b478d237a02084428c9ecda60bc0015c4ca915bf9784492ad3d854a627f165fa62040817cd19f32234c0') + +prepare() { + cd libpng-${pkgver} + + patch -Np1 -i ../libpng-${pkgver}-apng.patch + + libtoolize --force --copy + aclocal + autoconf + automake --add-missing +} + +build() { + cd libpng-${pkgver} + + ./configure \ + --prefix='/usr' + make +} + +package() { + cd libpng-${pkgver} + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/{bin,include/*.h,lib/{libpng.{a,so},pkgconfig},share} + install -Dm 644 LICENSE -t "${pkgdir}"/usr/share/licenses/$pkgname/ +} diff --git a/libproxy/PKGBUILD b/libproxy/PKGBUILD new file mode 100644 index 0000000..a0d9489 --- /dev/null +++ b/libproxy/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=libproxy +pkgver=0.4.17 +_debver=0.4.17 +_debrel=1 +pkgrel=1 +pkgdesc="Automatic proxy configuration management library" +url="https://libproxy.github.io/libproxy/" +arch=(i686 x86_64) +license=(LGPL-2.1) +depends=(gcc-libs glib2) +makedepends=(cmake python tauthon perl quilt) +optdepends=('perl: Perl bindings' + 'tauthon: Tauthon bindings' + 'python: Python bindings') +source=(https://github.com/libproxy/libproxy/releases/download/$pkgver/libproxy-$pkgver.tar.xz + https://deb.debian.org/debian/pool/main/libp/libproxy/libproxy_$_debver-$_debrel.debian.tar.xz) +sha512sums=('900bd7e44d968f6adf856d34dbc9d6558217143cae7a4eb6cb64766a26bee53f26e08f7feba3d5ad2b6d4db7409a35155c1dc34e1b9be42515b00b09d8c362b7' + '4c989373d9709199bd2c120a9a7f1e8970952413519490c5746e1eafaec40ac547fb51d0e3ee258098aaaa54fe695cae4e984990f52f966fb21c5ecdb4b9cd18') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -H$pkgname-$pkgver -Bbuild \ + -DBIPR=0 \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS" \ + -DCMAKE_C_FLAGS="$CFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_SKIP_RPATH=ON \ + -DLIBEXEC_INSTALL_DIR=/usr/lib \ + -DPERL_VENDORINSTALL=yes \ + -DPYTHON2_EXECUTABLE:FILEPATH=/usr/bin/tauthon \ + -DWITH_MOZJS=OFF \ + -DWITH_WEBKIT=OFF \ + -DWITH_WEBKIT3=OFF + cmake --build build +} + +check() { + cmake --build build --target test +} + +package() { + DESTDIR="$pkgdir" cmake --build build --target install + install -Dm644 $pkgname-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/libquicktime/PKGBUILD b/libquicktime/PKGBUILD new file mode 100644 index 0000000..afbda29 --- /dev/null +++ b/libquicktime/PKGBUILD @@ -0,0 +1,79 @@ +# Maintainer: Jesus E. + +pkgname=libquicktime +pkgver=1.2.4 +_debver=$pkgver +_debrel=12 +pkgrel=17 +pkgdesc="A library for reading and writing quicktime files" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url='https://libquicktime.sourceforge.net/' +depends=('glib2' 'glibc' 'zlib' 'alsa-lib' 'faad2' 'ffmpeg' 'gtk2' 'lame' + 'mesa-libgl' 'libjpeg-turbo' 'libvorbis' 'libx11' 'libxaw' + 'libxext' 'libxt' 'libxv' 'libsndio' 'x264') +makedepends=('quilt') +optdepends=('alsa-lib: for lqtplay' + 'ffmpeg: for lqt_ffmpeg plugin' + 'gtk2: for libquicktime_config' + 'lame: for lqt_lame plugin' + 'libjpeg-turbo: for lqt_mjpeg plugin' + 'libpng: for lqt_png plugin' + 'libvorbis: for lqt_lame and lqt_vorbis plugin' + 'libx11: for lqtplay' + 'libxaw: for lqtplay' + 'libxext: for lqtplay' + 'libxt: for lqtplay' + 'libxv: for lqtplay' + 'sndio: for lqtplay' + 'x264: for lqt_x264 plugin') +source=("https://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libq/libquicktime/libquicktime_$_debver-$_debrel.debian.tar.xz" + "${pkgname}-1.2.4-faad2.patch") +sha512sums=('6ab6cd62ae2361bb3ad73725e9e8baa2b03361bc23e9e34b24f90c0e2bec4337de950ed7f30a6a1d2e67ab33e8f0c43538369fd07e417f54b84583a3c331f8dd' + '714f941a47b46cb308c6d84f2a3689f9b80c7282bc6934c149e1616c4c61eb57ce1053c8523831519b8bd21f36116261c9a81d97ee870811ac7dfbcde2c1b215' + '3e751330ebbc4026363efd45b21c60c313ea169a57a5cdfa46125e126aab34c2dea3629ce92e7b0b5f14693db4f11723177fd28611e2e979cc8fcd506077509e') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/02-install-in-libquicktime2.patch || true + + quilt push -av + fi + + # checks for faad2 are broken in configure.ac + patch -Np1 -i "${srcdir}/${pkgname}-1.2.4-faad2.patch" + + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-gpl \ + --with-ffmpeg \ + --with-x264 \ + --without-doxygen \ + --without-schroedinger \ + --without-libdv \ + --without-faac + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -vDm 644 {AUTHORS,ChangeLog,README,TODO} -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname}/ +} diff --git a/libquicktime/libquicktime-1.2.4-faad2.patch b/libquicktime/libquicktime-1.2.4-faad2.patch new file mode 100644 index 0000000..563f464 --- /dev/null +++ b/libquicktime/libquicktime-1.2.4-faad2.patch @@ -0,0 +1,86 @@ +diff -ruN a/configure.ac b/configure.ac +--- a/configure.ac 2012-03-29 21:44:28.000000000 +0200 ++++ b/configure.ac 2020-02-09 18:27:31.599127781 +0100 +@@ -728,82 +728,9 @@ + + if test "x$with_faad2" != "xno"; then + +-OLD_CFLAGS=$CFLAGS +-OLD_LIBS=$LIBS +- + CFLAGS="$CFLAGS" + LIBS="$LIBS -lfaad -lm" + +-AC_MSG_CHECKING(for neaacdec.h usability for faad2) +- +- +-AC_TRY_RUN([ +- #include +- #include +- main() +- { +- int faad_major; +- int faad_minor; +- faacDecHandle dec; +- +- if(sscanf(FAAD2_VERSION, "%d.%d", &faad_major, &faad_minor) < 2) +- return -1; +- dec = faacDecOpen(); +- if(!dec) +- return -1; +- return 0; +- } +- ], +- [ +- # program could be run +- have_faad2="true" +- AC_MSG_RESULT(yes) +- FAAD2_CFLAGS=$CFLAGS +- FAAD2_LIBS=$LIBS +- AC_DEFINE(HAVE_NEAACDEC_H) +- ], +- # program could not be run +- AC_MSG_RESULT(no) +-) +- +-if test "x$have_faad2" != "xtrue"; then +- +-AC_MSG_CHECKING(for faad.h usability for faad2) +- +-AC_TRY_RUN([ +- #include +- #include +- main() +- { +- int faad_major; +- int faad_minor; +- faacDecHandle dec; +- +- if(sscanf(FAAD2_VERSION, "%d.%d", &faad_major, &faad_minor) < 2) +- return -1; +- dec = faacDecOpen(); +- if(!dec) +- return -1; +- return 0; +- } +- ], +- [ +- # program could be run +- have_faad2="true" +- AC_MSG_RESULT(yes) +- FAAD2_CFLAGS=$CFLAGS +- FAAD2_LIBS=$LIBS +- +- +- ], +- # program could not be run +- AC_MSG_RESULT(no) +-) +- +-fi +- +-CFLAGS=$OLD_CFLAGS +-LIBS=$OLD_LIBS + + fi + diff --git a/libraqm/PKGBUILD b/libraqm/PKGBUILD new file mode 100644 index 0000000..7789dad --- /dev/null +++ b/libraqm/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libraqm +pkgver=0.7.0 +_debver=0.7.0 +_debrel=4 +pkgrel=1 +pkgdesc='A library that encapsulates the logic for complex text layout' +arch=('i686' 'x86_64') +url='https://github.com/HOST-Oman/libraqm/' +license=('Expat') +depends=('freetype2' 'fribidi' 'harfbuzz') +source=(https://github.com/HOST-Oman/libraqm/releases/download/v$pkgver/raqm-$pkgver.tar.gz) +sha512sums=('4aed401df0b53cc95423afa5980164b54102776eca675119fc483c410334a635ca95ef6564ee9b54666c13c916eb52a0a1cd24f288230946c53825fb10451161') + +build() { + cd raqm-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-static=no \ + --enable-shared=yes \ + --enable-fast-install=yes \ + --enable-gtk-doc=no + make +} + +package() { + cd raqm-$pkgver + + make DESTDIR="$pkgdir" install + rm -rf "$pkgdir"/usr/share/gtk-doc + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libraw/PKGBUILD b/libraw/PKGBUILD new file mode 100644 index 0000000..ff919eb --- /dev/null +++ b/libraw/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=libraw +_pkgname=LibRaw +pkgver=0.20.2 +pkgrel=1 +pkgdesc='A library for reading RAW files obtained from digital photo cameras (CRW/CR2, NEF, RAF, DNG, and others)' +arch=(i686 x86_64) +url="https://www.$pkgname.org/" +license=(LGPL-2.1) +depends=(lcms2 jasper) +makedepends=(automake-1.15 quilt) +source=(https://www.$pkgname.org/data/$_pkgname-$pkgver.tar.gz) +sha512sums=('96b1aaf09e2d46448d1b3619270c1f1c32e9bcbd866567cec67d5b1f889362f0fae3f3533ea9bf6a11a917be3b61ee6c9938bad09209d93453039ed04eaeae4a') + +build() { + cd $_pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-examples \ + --enable-jasper \ + --enable-jpeg \ + --enable-lcms \ + --enable-openmp \ + --enable-zlib + make +} + +package() { + cd $_pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + install -Dm644 LICENSE.LGPL -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libreoffice-l10n/LICENSE b/libreoffice-l10n/LICENSE new file mode 100644 index 0000000..c064168 --- /dev/null +++ b/libreoffice-l10n/LICENSE @@ -0,0 +1,293 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: LibreOffice +Upstream-Contact: libreoffice@lists.freedesktop.org +Source: http://download.documentfoundation.org/libreoffice/src +# they are already removed when packing the upstream tarballs, but are in git... +#Files-Excluded: schema/*/* + +Files: * +Copyright: Copyright 2000, 2010 Oracle and/or its affiliates. + Copyright (c) 2000, 2010 LibreOffice contributors and/or their affiliates. +License: MPL-2.0 + On Debian systems the full text of the MPL-2.0 can be found in + /usr/share/common-licenses/MPL-2.0. + . + Some files include Apache-2.0 licensed material: + . + # This file incorporates work covered by the following license notice: + # + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed + # with this work for additional information regarding copyright + # ownership. The ASF licenses this file to you under the Apache + # License, Version 2.0 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.apache.org/licenses/LICENSE-2.0 . + . + On Debian systems the full text of the Apache-2.0 license can be found in + /usr/share/common-licenses/Apache-2.0. + +Files: extras/source/truetype/symbol/OpenSymbol.sfd +Copyright: (c) 2009 Sun Microsystems Inc. + (c) 2010 Google Corporation + (c) 2011 Julien Nabet + (c) 2011 Olivier Hallot + (c) 2013 Mathias Hasselmann + (c) 2015 Khaled Hosny + (c) 2016 Mike Kaganski +License: MPL-2.0 + On Debian systems the full text of the MPL-2.0 can be found in + /usr/share/common-licenses/MPL-2.0. + . + Some files include Apache-2.0 licensed material: + . + # This file incorporates work covered by the following license notice: + # + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed + # with this work for additional information regarding copyright + # ownership. The ASF licenses this file to you under the Apache + # License, Version 2.0 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.apache.org/licenses/LICENSE-2.0 . + . + On Debian systems the full text of the Apache-2.0 license can be found in + /usr/share/common-licenses/Apache-2.0. + +Files: swext/mediawiki/src/filter/odt2mediawiki.xsl +Copyright: Copyright (C) 2007-2013 Bernhard Haumacher (haui@haumacher.de) +License: Apache-2.0 + +Files: sysui/desktop/apparmor/* +Copyright: Copyright (C) 2016 Canonical Ltd. + Copyright (C) 2017 Software in the Public Interest, Inc. +License: MPL-2.0 + +Files: icon-themes/breeze*/* +Copyright: Copyright 2014 Uri Herrera + Copyright 2015 Andreas Kainz and other contributors +License: GPL-2+ + +Files: icon-themes/sifr*/* +Copyright: Jakub Steiner + Lapo Calamandrei + Hylke Bons + Barbara Muraus + Issa Alkurtass + Norah Abanumay + Copyright 2017-2018 Matthias Freund +License: CC-BY-SA-3.0 + +Files: icon_themes/elementary*/* +Copyright: Copyright 2015 by Simon Steinbeiss , Pasi Lallinaho +License: GPL-3+ + +Files: icon-themes/colibre*/* +Copyright: Copyright 2018 Andreas Kainz +License: CC0-1.0 + +https://github.com/rizmut/libreoffice-style-karasa-jaga/blob/master/COPYING +Files: icon-themes/karasa_jaga/* +Copyright: Copyright (c) 2014 Rizal Muttaqin +License: LGPL-3+ + +Files: icon_themes/sukapura*/* +Copyright: Copyright (c) 2019-2020 Rizal Muttaqin +License: MPL_2.0 + +Files: helpcontent2/help3xsl/fuse.js +Copyright: Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me) +License: Apache-2.0 + +Files: helpcontent2/help3xsl/paginathing.js +Copyright: (C) 2018 Alfred Crosby +License: Expat + +Files: helpcontent2/help3xsl/normalize.css +Copyright: Copyright © Nicolas Gallagher and Jonathan Neal +License: Expat + +Files: helpcontent2/help3xsl/fuzzysort.js +Copyright: Copyright (c) 2018 Stephen Kamenar +License: Expat + +Files: debian/* +Copyright: Copyright (C) 2002-2009 Software in the Public Interest, Inc. +License: GPL-2 + +Files: debian/scripts/get_ttf_version.pl +Copyright: Copyright (C) 2015 Software in the Public Interest, Inc. +License: MPL-2.0 + +Files: debian/templates/debian-presentation.otp +Copyright: Copyright (C) 2010 RaphaĂ«l Hertzog +License: GPL-2+ + +Files: debian/templates/debian-presentation-background.xcf +Copyright: Copyright Alexis Younes "ayo" +License: GPL-2+ + +Files: tarballs/*dtoa* +Copyright: Copyright (c) 1991, 2000, 2001 by Lucent Technologies. +License: Expat + +# https://github.com/google/skia/blob/master/LICENSE +Files: tarballs/*skia* +Copyright: Copyright (c) 2011 Google Inc. +License: BSD-3-clause + +Files: tarballs/*rhino* +Copyright: Copyright (C) 1997-2000 Netscape Communications Corporation + Copyright (C) 2000 See Beyond Communications Corporation +License: MPL-1.1 or GPL-2 or LGPL-2 + +Files: tarballs/*xsltml* +Copyright: Copyright (C) 2001-2003 Vasil Yaroshevich +License: other + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the ``Software''), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + Except as contained in this notice, the names of individuals + credited with contribution to this software shall not be used in + advertising or otherwise to promote the sale, use or other + dealings in this Software without prior written authorization + from the individuals in question. + . + Any stylesheet derived from this Software that is publically + distributed will be identified with a different name and the + version strings in any derived Software will be changed so that + no possibility of confusion between the derived package and this + Software will exist. + +Files: tarballs/*swingEx* +Copyright: Copyright 2008 by Sun Microsystems, Inc. +License: LGPL-3 + On Debian systems the full text of the LGPL-3 can be found in + /usr/share/common-licenses/LGPL-3 + +Files: tarballs/*pdfium* +Copyright: // Copyright 2014-2016 PDFium Authors. + // Original code copyright 2014 Foxit Software Inc. +License: other + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions are + // met: + // + // * Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // * Redistributions in binary form must reproduce the above + // copyright notice, this list of conditions and the following disclaimer + // in the documentation and/or other materials provided with the + // distribution. + // * Neither the name of Google Inc. nor the names of its + // contributors may be used to endorse or promote products derived from + // this software without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Files: debian/patches/add-access2base-doc.diff wizards/source/access2base/access2base.html +License: other +Copyright: Copyright (c) Jeremy Ruston 2004-2007 + Copyright (c) UnaMesa Association 2007-2012 +License: other + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + . + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + . + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or other + materials provided with the distribution. + . + Neither the name of the UnaMesa Association nor the names of its contributors may be + used to endorse or promote products derived from this software without specific + prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE. + +License: Expat + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License: MPL-2.0 + On Debian systems the full text of the MPL-2.0 can be found in + /usr/share/common-licenses/MPL-2.0. + +License: Apache-2.0 + On Debian systems the full text of the Apache-2.0 license can be found in + /usr/share/common-licenses/Apache-2.0. + +License: GPL-2+ + On Debian systems the full text of the GPL-2 can be found in + /usr/share/common-licenses/GPL-2 + +License: GPL-3+ + On Debian systems the full text of the GPL-3 can be found in + /usr/share/common-licenses/GPL-3 + +License: GPL-2 + On Debian systems the full text of the GPL-2 can be found in + /usr/share/common-licenses/GPL-2 + +License: MPL-1.1 + On Debian systems the full text of the MPL-1.1 can be found in + /usr/share/common-licenses/MPL-1.1 + +License: LGPL-2 + On Debian systems the full text of the LGPL-2 can be found in + /usr/share/common-licenses/LGPL-2 + +License: LGPL-3+ + On Debian systems the full text of the LGPL-3 can be found in + /usr/share/common-licenses/LGPL-3 + +License: CC0-1.0 + On Debian systems the full text of the CC0-1.0 license can be found in + /usr/share/common-licenses/CC0-1.0 + + diff --git a/libreoffice-l10n/PKGBUILD b/libreoffice-l10n/PKGBUILD new file mode 100644 index 0000000..e86fe84 --- /dev/null +++ b/libreoffice-l10n/PKGBUILD @@ -0,0 +1,593 @@ +# Maintainer: Jesus E. + +pkgbase=libreoffice-l10n + +_LOver=7.0.4.2 +pkgver=7.0.4 +pkgrel=2 + +arch=('any') +url='https://www.libreoffice.org/' +license=('GPL-3' 'LGPL-3' 'MPL-2.0') + +_url="https://downloadarchive.documentfoundation.org/libreoffice/old/${_LOver}/rpm/x86_64" + +_languages=( + 'af "Afrikaans"' + 'am "Amharic"' + 'ar "Arabic"' + 'as "Assamese (India)"' + 'ast "Asturianu"' + 'be "Belarusian"' + 'bg "Bulgarian"' + 'bn "Bengali"' + 'bn-IN "Bengali (India)"' + 'bo "Tibetan"' + 'br "Breton"' + 'brx "Bodo"' + 'bs "Bosnian"' + 'ca "Catalan"' + 'ca-valencia "Catalan (Valencia)"' + 'cs "Czech"' + 'cy "Welsh"' + 'da "Danish"' + 'de "German"' + 'dgo "Dogri"' + 'dz "Dzongkha"' + 'el "Greek"' + 'en-GB "English (British)"' + 'en-ZA "English (South African)"' + 'eo "Esperanto"' + 'es "Spanish"' + 'et "Estonian"' + 'eu "Basque"' + 'fa "Persian"' + 'fi "Finnish"' + 'fr "French"' + 'ga "Irish"' + 'gd "Gaelic (Scottish)"' + 'gl "Galician"' + 'gu "Gujarati"' + 'he "Hebrew"' + 'hi "Hindi"' + 'hr "Croatian"' + 'hu "Hungarian"' + 'id "Indonesian"' + 'is "Icelandic"' + 'it "Italian"' + 'ja "Japanese"' + 'ka "Georgian"' + 'kk "Kazakh"' + 'km "Khmer (Cambodia)"' + 'kmr-Latn "Kurdish"' + 'kn "Kannada"' + 'ko "Korean"' + 'kok "Konkani"' + 'ks "Kashmiri"' + 'lb "Luxembourgish"' + 'lo "Lao"' + 'lt "Lithuanian"' + 'lv "Latvian"' + 'mai "Maithili"' + 'mk "Macedonian"' + 'ml "Malayalam"' + 'mn "Mongolian"' + 'mni "Manipuri"' + 'mr "Marathi"' + 'my "Burmese"' + 'nb "Norwegian Bokmal"' + 'ne "Nepali"' + 'nl "Dutch"' + 'nn "Norwegian Nynorsk"' + 'nr "Ndebele (South)"' + 'nso "Northern Sotho"' + 'oc "Occitan"' + 'om "Oromo"' + 'or "Oriya"' + 'pa-IN "Punjabi (India)"' + 'pl "Polish"' + 'pt "Portuguese"' + 'pt-BR "Portuguese (Brazil)"' + 'ro "Romanian"' + 'ru "Russian"' + 'rw "Kinyarwanda"' + 'sa-IN "Sanskrit (India)"' + 'sat "Santali"' + 'sd "Sindhi"' + 'si "Singhalese"' + 'sid "Sidama"' + 'sk "Slovak"' + 'sl "Slovenian"' + 'sq "Albanien"' + 'sr "Serbian"' + 'sr-Latn "Serbian (Latin)"' + 'ss "Swati"' + 'st "Southern Sotho"' + 'sv "Swedish"' + 'sw-TZ "Swahili (Tanzania)"' + 'ta "Tamil"' + 'te "Telugu"' + 'tg "Tajik"' + 'th "Thai"' + 'tn "Tswana"' + 'tr "Turkish"' + 'ts "Tsonga"' + 'tt "Tatar"' + 'ug "Uighur"' + 'uk "Ukrainian"' + 'uz "Uzbek"' + 've "Venda"' + 'vi "Vietnamese"' + 'xh "Xhosa"' + 'zh-CN "Chinese (simplified)"' + 'zh-TW "Chinese (traditional)"' + 'zu "Zulu"' +) + +_helppacklanguages=( + am + ar + ast + bg + bn-IN + bn + bo + bs + ca-valencia + ca + cs + da + de + dz + el + en-GB + en-ZA + eo + es + et + eu + fi + fr + gl + gu + he + hi + hr + hu + id + is + it + ja + ka + km + ko + lo + lt + lv + mk + nb + ne + nl + nn + om + pl + pt-BR + pt + ro + ru + si + sid + sk + sl + sq + sv + ta + tg + tr + ug + uk + vi + zh-CN + zh-TW +) + +sha512sums=('09f43e4d38667c1a506187f8c7e8f3503388a2c99e42bd5e9315ca25ed271f66044adea97acbd9a7caea41493359f3a37b0f655dcfd7ff7f4e973011053d31b7' + 'SKIP' + '0b55ec8edd86197ed3f8f4e4fd01e024263d7845488e3cc78e18d96c6ca8abd5448f32851a40564f3ac63c176df6cfc02f38721b911764abbe15804f4ffdc0a1' + 'SKIP' + 'bf3219169b098623381cd834c668101a25a2ed48e502c9f98560858200ba0a27d8cbe02116dac580a782359a4be0d0e84327dafc3c7de895e45b83dd6c716432' + 'SKIP' + '8b24007111d25453deca526f745fb90697253f7be7316c98aa10977a03fb96e539fc4637b81a9518dbddfaab7f6e74ca345c5912f79920495b560c5b3e12dd12' + 'SKIP' + '40b3d853118be59ce49c96a1c391266df0281ce7f12c684647e44b1c3c147c3b25c904382f2ba9d0a1e6e05db3c694312a6369da8d7a2bd5c9440d9244a9a111' + 'SKIP' + '207d006190b2ab996c96a0c4e9f693eb43025a084a22482bf1c7b3047adc46c3a6a11ee4d0e0f0faead984bed241542b3cf4c47611fb1c60f85c39b5087b867b' + 'SKIP' + '5d799a42a01956da9ea723f31fa7aff4837c8a9d901aaa2049c1f70d995407b2407eeb10790997a48b48f9d6fc65eb5151631092a4b5f10e33ad04fdb4872244' + 'SKIP' + '7c7bf1573b73e747eb071a1a86c3305c23223267d815527f8090bf4134367eba2e70e73dc356d6c43bec3936b7bc258a15d3cd2c1e34e7eece46575ac699eb23' + 'SKIP' + 'efd9880b13ef92ab78b8b2cfde86813e9aa60b65cd1994bf35de287101e4b0a491fa5b543ca4feca2d1534a986052a43a17b3396601a8c9523de8f88f3575c7e' + 'SKIP' + '3dba35e3f59af71d503c4aa6aae0e6b4531b6d1a28d9893e28cf71fb3e56611a7cb05f50fce97783c7386b503aa42e75bbca9a25761e869fa961286df9d384cc' + 'SKIP' + 'ffcec9e3ebe8261ef6f5a3f78384b7bc1d34594355822f2265fd7c0adb62466508e36ac47678ed252bab26ab0ac16e29824074d6fe45b44504fc137d13b97ee1' + 'SKIP' + 'bd8f72372e23bd7942805d39127136a839bc92e9113bdff2d5838630099847b5bf22da48f604e2da1b6ad54525051f9514229c2d9fda7b21a32b2fd38a97f232' + 'SKIP' + '8b42065996c5a72c8813e1bc35c13d9cf865faab781ebe2cc738d2eace3ee3c7c241b6f7e928b4f03577acf19dec0dd52b99435575ff71bd313ab7e73ecba3cb' + 'SKIP' + '6adba6d134ae51f2f03a602fe0ddd841774b89e584dbf1c718d45ebfc319f490b6bf96cd2d8651faed2c4864124eb05d7a1b252e35ef6f6330104fd4f186fe84' + 'SKIP' + '23a5b7358925038d129accfbd25e5b8de747cba46e236280dc94ac318a16bacd03aedbe85b2553d081e141b86a5697b504bdb4029ef325e61ad7b098ba7ffc44' + 'SKIP' + 'eab0c122a9250ac2a666f16eaf2c04c94dcc0c39b69d0d96e753cf032de23c294012ee3111ed097ae60a59de2115399e8722273c6c7be5172edd92f9c7b443c3' + 'SKIP' + '85defb0b93bd3b2bab7343e4024bcef94453fd4dccb2fd276e4f94d9769bc42de1066469912c28fccebfbae1faf2a1de4df1d6097a464474a5f78b3befeb6fa6' + 'SKIP' + '920e281c02a25e49fe9edd1c67d3f2c9ef1b5588b746d52f7dae5d2e0a45438e2cebd598057c2f012fddcb38fecc687283c9256e59b37fb3d0df4dcf7c8b9d3f' + 'SKIP' + '6918a056c45d8f9b14afac1af796db7c128d424bcbd4e6f800101da756fe90d87721efd92b4617f8bd934deabd4e3b6b3a835db8401901d59016249cdf57773b' + 'SKIP' + 'abfe8fccb7cf57ca08e4ee26e4141fcff058110608e31efd2f6f98285617f50b99744b92987b843bce839fa376dfad1ab62a2ad1f76f619aa295bbae4d4e79f4' + 'SKIP' + '38ce1d5966728e4d916eb2c6f3f78b7336d6c0cc786b886f6329b7a5f186b3cf8c16231bdd384870c3cf078c0ebcbdb68c0b2aba607dfd3ca97424f043a61580' + 'SKIP' + 'd7821edd1c7d71de3cf0f388f9e6eebb8f5c7f73168cfb2acc909fb8f2efc594eb49f15bbb4b92659c00ff5d22d2701824153e19a7e85aa56ab3f59d81a5f64c' + 'SKIP' + '98a256087685b5e269c4badae14014dd5001a9724aa892fbd648287eaa07bc9baeae4a4ff18a8a32da54e65066893caf9b45d7bc8ccc887f2b44607ee2b010f3' + 'SKIP' + '6bf6abf14bb8dd8f1bd9a56e9148955d1347529e281eeb55c74f34b381f8ad961340a890ffa9430119cccdbafb7b6918d8155b47b929b303fcd6c5db619fe8d9' + 'SKIP' + 'ceeaae0ed4d01f512467aca3f4a65f3619119ebb5adede411da52085a9bf22ed1936fa0f1535a802c967f8fb10bf2250f4ef0dc8924b50994b0fca7e5530577b' + 'SKIP' + '5011f2efb1bf33567f7b9f01be30f163be5885ad91af5fcd25839596d5c17b2ac78458f2ed4771cf4d2eebbb88c72d93baaad4f8f0affa5b6377db7ad73b6370' + 'SKIP' + '01964ec854aca58339200ca7eecf5acaec252dd4c92e6a29f521d6561a980da53a103622ab09ae648ee24dd085d3053b715af5b7771e0745aee0b2ba04f86f73' + 'SKIP' + 'af325f387e951062c9b5ded8c73e16cc945783f52abe46968c52c8f5cfe6d288c91b99b6b29b9f77ab747e8defc5b0ab5d38da3518929246806a435d540caa4c' + 'SKIP' + '8ae8b0ef500f32829173ceef4aabc1b116c41f93c06dd6cac6c793d010aa33b23458c531608c616ec656914253bd160f11d63160869bb85fdfa59b310b17ec09' + 'SKIP' + 'a6408f060dcddbac32ec9b3468205e0c9a868d4f0f6875af484780af95ee6f8b728c7572c1382fd1fb14f37720921cf2a0bafb92f9192dfee87c5d5dc1d3bf57' + 'SKIP' + '6afaad0e183fa10a8bb46ce3771314f64a1e22197e630ea2e2e4adb7be90b559a98d68cb8af8d42380dc6990edd74ce4df9ba9d375f799a1a5c34bcad4b1f393' + 'SKIP' + 'a544692d862458c4ebf96001302000f01fb9b3d86e2a683bf3b90f3ada1f86ee3ca867df7cbc46c606c622fc710e7d1b52cae2e70527a74ae93f14194177e927' + 'SKIP' + 'c501726f431ebe6033407d978b775c74340a687afdbb6d0c88fc423979c938e307ab036e8ea56bcbbd8e05b44d197956d08e2c76b491f6b8bdf10112011e95d0' + 'SKIP' + '99740c17ceccacf36d0ad239584456dfbb37898916f0a7f773a1c5b9ce1b517312b079d3b22f848a04c35daa5e243e818066b27bde7305965132c627e293580f' + 'SKIP' + 'ff48b5bfae08154bf763660b38524233a660c100a68a5b61017f1058718bbf6cf8cfc5b65f58f87144c97135a8113e2b2454d61762440a5d075b91f29540795f' + 'SKIP' + 'b6a9ec10652ebac716f3a5c596821c02404d269171dbc4f82d476580284a922954df1407c6342bcd315c62345488c63e8b2f64d13efad43e7b99c3624fbed4e3' + 'SKIP' + 'df4ed6f42a02fadaa5c7bbf2262db82873c715a4766a9acab9a8e68333b7b2a2be5ad3e85f811604751a46e807cc576e9352fa3ed15a965b5728920b5c6a24ae' + 'SKIP' + '506bca9ebbeac585867138e87ea28c2fae830118ef6cb8dc270c5d3379009e4d7f0b577045ce60d433dc28122945a9bb64a351c260ce0d85860aea62a3463d4e' + 'SKIP' + '1c7010977ff3a7bb0a4878e93337b4dd032a4bd059ff0251b215d5d463ec8b406d58097461bbaf63da8a0961f4dc460b29a06f8ded49037bf93109fc41e3a925' + 'SKIP' + '09ae22fa348220415e2cce7ea2ca1b8fa63b8180a8226a56688b8eb1370c1f930777fa661d1338d5c91534b506e6593f92673d21457221e8eb287deeb2d10e6e' + 'SKIP' + '12666ad949cf66d4931acaed6b75302f6493a98f93900dff197af7cc165e207a6e79762d1a21f7abbb209735e721dbb10be1d861084bc2b08c187fb7e33ad925' + 'SKIP' + 'a53e3a8a3b1524025625b1506f651571ff0c350a3cdae82c68838b2e260b4a79bc03ab7bd87c499309a30749dff44b19fccae140c28fcb5234e8cbee6f3b3675' + 'SKIP' + 'fa9ce8722aa7e4595a44a4f794a0c97ede032f1d8b46d9355eca3b4a5e41f644ea5cb291dc43a9b5164a3da12fa72e1e65985f824b7b4108a68cd7ecae393930' + 'SKIP' + '4800863317ff0844f2876a98b7a7078dd38d87b87d55c2b772a74c7fdcf25e4489ba87ee25575bedb63c321667d00e62c0e04abab7e8e9cb4085da6663059fa9' + 'SKIP' + 'da3bd95e59682241c4f6dc98a27bc4124505942eee91025dccc3a476ac8d7732d2000049b8a0f2c18fe0c8f9678713b9fda1ffd83572cb1b81f7dda2008ee5e6' + 'SKIP' + '8b0c5e48eb52cf95a7d1f1be515895160ca5ae97e02fbfa1d25a2012018f440fde2ca235ba847f3cf68bd35cfe51eab2023ed450c601fdb9253bc64796da6bce' + 'SKIP' + '665a7f6d2e844a446585a22e24abf2983f04b70e3dadaa7c24b897f67c470506e3aa9d1ceecc0304ea89bdeae296db49d8e669e543b2eb19b60d7059ac72814a' + 'SKIP' + '7b7f9b7dcf9281707ba55e12bf8bfe2fd31d1edc3870b5d33c21d2e1a62d76184e6ee764d44182e1c2ead83b2a88a88efbab32621dfa45c7ce3c7c4a28ad81fd' + 'SKIP' + '70651cc676d5b7faf6298d910b9bbd5529d604273b1fc090cf416541b50dac2725487657c3c187b7992263fa69520be8af81d58e217b43a44d6001d8c0ea6073' + 'SKIP' + 'eb68a848ab413cb418708244c35b9aba626092a9c7f350600533546a53595e396d47899ddc701f2eaadcd608d37620368daf8b6e23865afcbf4c12942d8cbcd0' + 'SKIP' + 'ed7ce20faf322795b2c9dbba2ee51e5fa55ffe19ec1fd32fdecbb2d213e4716b1393f1f0dfe55e21d8ae72e65b6731d840a62b01e6cfbbe678b0c01fa0801b95' + 'SKIP' + '5ff5c556ef93ecd896d0e81c34dbbe9b0df907e509458fcf1511cf72487b7107cb493240fb8f7cdd5f69612a5c270228d492a1750ca97e8f3a9742ff96409a25' + 'SKIP' + 'f6c1fa622512493ba8eaa37927b09f3084ce4153f4ec84937006e04add8f630f05bd2a7b78a38f5a676448f0747f17a9c6e6aeacdebf159ddd8e5ba2ec75a170' + 'SKIP' + 'd85d92d4de55200e9e08e5b2af3220a379cf547c1d7a78b370aed7276844a01b6c89e134ed1bb7581f36e1349117dbf5722c9f639a360144dab6d2273349bdb4' + 'SKIP' + '57f549de130aa6e5ce498bfb05643340d3fab543bc6749a2b08b7cc722974d63c18d1c4822348d7bc2f4fd36b4c19a9a7380d00deefbdf4129a93108972ae485' + 'SKIP' + '2bf531b43701b28738f84969772f6aa299dd16db4517593899069b95452da1a435011cf0216e4a62de00a68386b82537cfef91abb5d8ff2169434dfd265f63ed' + 'SKIP' + 'a1e687ccae05c16b550a35f39abdad4005c533af4bfc003d0c9410387f0b25bbf46c6811ec6989459bb7b59ee2d234539a1e102094e2a81642b93ef5bde9d28c' + 'SKIP' + 'fa46ad6a68e3830988817fdaea24b12520a78819ca91ff9ca0a62cc5040fcaa55c806d870c78fa7fe6f0f7682b1c5d8cc7f4ea48adefdd59b83a0b421c4fbdac' + 'SKIP' + 'a28f61fd29b9d55bc25408056c12c81008e6b63bf4b075f03226654dabef0cd28eaa4a47995a96e59d3980f65a31d3060dc4218c76dc48b66c9c18fe89827513' + 'SKIP' + '83cb5a9bcdf2bb48619ba2f4d1f6b72474db80a1f70815bb59340f779b3615b6527fe01d5bc294d2fb56f16d49731e2ca449b4b9e63c68cff85cbe0961add5db' + 'SKIP' + '904386576094abe1415765c435a47fcfc4a6d7ba0f764b3593551d07a601db948d85dac563a488c8a04d7386750b6a85f81ff3e082644a42451d107fa1978ea7' + 'SKIP' + 'a4380dcd2a4655f8aac14fd9991dd0ae9b03d6c4b95061c60e81253aac63a467e26e71f3d2e5c4dfda09fdddf9710ddc5f23d7335e64f9afed72b6c47b627ffb' + 'SKIP' + 'b44d2e6977e9247b23116482cde1bc68de16b35f98a0d35b8f169114a8a4f916a23e9588419b037f15ed36c4ff8dc3a46d560b438cf96cfe7db9046304545a9a' + 'SKIP' + '8483312c587124fddd0019253a8eb2e69b0d1fd0641cd4e1cab4ac498b883420182fad65b871fefeeb9c54329ecf23881725d1aff0f3f5cb6ff7a59c0e6dfd88' + 'SKIP' + '6cbfed2b3bf2fc3ff41d91e81c9a5da575381e92c135305cd7e3ccb4c233971dece9d270f72dfe325d2c43ace8ac163cdc05c740c24fa714106f1660d784f463' + 'SKIP' + 'c237a7f502a460a4e7b72fc9db7e8f3a8e25680c4a62df667676f2ff0b391c925c781eb784c390f16ff26b2797db03b9f0b1bbf64d500dc01c424d4552edc27d' + 'SKIP' + '7c754f98aacb233ca4f8c22a62d63863008489aec39b068a8799c40dbdaf8219a8857f100dfe3bf0fa7b998516d36267d57ca40e54da3fc6259b50ad1e425174' + 'SKIP' + 'ffc0dd26a3f1210996f87790edc35bf9cad405a76f954ce01b45b4647abc0d80f29ce3ea1337b9411be4826aa02206f107cd6c5f740832adf052a25d8abd3796' + 'SKIP' + '7397c42a6a0bee779fa61c743f5e83d317dfaafdb5fe2e3772a37ee97195e38cc740ee2881ebb24f62a1f6dd7ec62de8364bae37f6048486ae5b7b508d246e4d' + 'SKIP' + '2f642ca683fcd4a38c8b410730524e1fd22bb5b0c4d1f3a18b270b5d8174ff3110f7c3f738d0e84efb6d143baebbd1449c583068597f9f7b2cbfb0822d2ea175' + 'SKIP' + 'fba6c8484f3930907e09b3fa90970f7b668a2703115fce4c81c7aa87eacfee62b9083e66484b071e8ed9bcaeff950c4b463c4ab4c90026d6b013c7fba4788e8e' + 'SKIP' + 'd3ea707adff02fd687facee15c24b5f146a93b94e75af10460728274b6e523da39eaded81482010c00ba02ea0b0d909aba11c8171cfca13741aa0cafe1e6bc58' + 'SKIP' + '222754983131f6dd6a5aa3081514e10aff3c0c92ab66b937e051dfc92b179cdfa54874a91ca5428ffbfa56d25bfd55b3d5771ef0ee7b8641ca6544c71da1539b' + 'SKIP' + 'e1df77633eeb8427530fca09d3d87bd92d80bcbd9bac6d357d706ebf7c73203988d875b1afc712cfcd5d7bc32f618ee53092dff09e4b28af33757e0a71c689f7' + 'SKIP' + '19cfdf2f316f63ee7bcf39ea17dae9580bb58489d6247f0cc946c4980e9b2ef8bc2ada3768a45cc4387372d33403cc57430a8fa7ed83f028a2979868840e4ed8' + 'SKIP' + '0c81dc57adb6aa8ad90dbbd201f5024b7e058f94639bd1e8ec6e0316ac2a3d0a38e05f26e0151e98dffae7fa7b2c3d8f1e4d6986ae5eadad1b621c1ea9d7d197' + 'SKIP' + '5fe22486aad4553cea2359aac62ac8919b2a764b801c6585a6d3ada3d1da7698b8a3c8baeed0f7961da3ac4ad36eac8270602f42dc5a672e8a64ac6e0d57368c' + 'SKIP' + 'bc66674636a3efab93cc2c89300784d0ab26232c9538a3996a9266b7478ac62c739a8ec9897629d2a49f801ac4a4b6c6fcfc4570b8fbb491b3e4acb3f7be4251' + 'SKIP' + 'd564d1412fb1b3fe3716eb120202c915ffe29abbeb4b233c3e51a1d8fc4fec5e292f103902f960fd23d08b5c982361828966fdfdd50916a63ffc3eab72d77443' + 'SKIP' + '497fe74f9027232b63e02c47e65ef1d72406aa5698bade50f015e18776fbd32b9ec0c10e311ffe0955c6ea38be7d433cfae1f74cf073edcdc742a60d4b920a07' + 'SKIP' + '651402022c554ac58f27c1eb4c15ccd1d54bd2fa6c3616d6a4a5fdee77d74f00bafbe0c31deb47d6c6ed9648e67f6d6f58ed5e6a1df54640463077a595ed0940' + 'SKIP' + '130d977511e965da937965813d271fc91882b18227199a34484a883cf6c35cc9bb43ce090c9aa4e46c31bd38acd2e7f9a10a9a34464dd3276641caf87c505a3a' + 'SKIP' + '006b37ae3af67f1d919569fd5ff724eaef6ee36f073335e38c78c4733e5bce69729ec69cae5eda8a894270797fbe978c4e8a33bc49714b007d18686183f9fae1' + 'SKIP' + 'fd3f23f6d2354809e1f96ec2e57fd93b3b85ff0bedc8f4aec7aa28a63bc38d28a8b222b5230d70894b9dabeb12a6eba1bf735c702f0ec36b424a3e083e966539' + 'SKIP' + '8c45792a07e8a841ef183cc66034685bb42da2c23ba8283e010b24056265470b5dc03623dac0655484ca7e9d05a5da4638b1ca7550a221dedfa8b2d4abc974fa' + 'SKIP' + '70bfb4c724c378cb8b2f71ec97b4ee0ed201f8692caf96c2a019936cd65fd5861c3bef44a488caff68b0e6864e2e01a50cd049a0f41272440033666a3ae8151c' + 'SKIP' + 'e74ee9369443476cec35d245ba1992e5d4e428bdcd6df00f0e42bd8e416dd7405b3d8719d04a95e5a2ee95efa123808001e37ae88f563bf1edd62908519c86a8' + 'SKIP' + 'cb5b83e6498256e6a55681cae7a4a2b6094a10e127a8197343f8eed413e18bfab827b1a5d0615f1c478a5cfdd0ea7ae1d338f04edb195655fbed459f972bd02d' + 'SKIP' + '770138b2f2440ca2eddd37aeca3ab0f6fed77d243095f90f50d226f73903d6d3125c06cd1517cfe026ebd8a7261bfb60de0055a3f6a772f72814370cd7f3f806' + 'SKIP' + '2dec16f7d287cda8c87c21df1a20f60e0e6996dc473f4c6cc980beef52523e982e153cf328548a80b856b2ae42c7605c873c6653d3cbf9ecf909a9e0abbbe3bf' + 'SKIP' + 'd757a59620dffef0843efa256976447199ed2df75694db461d121a9a969c53d8c1e3d29548d9b17733c7c46a23a03ea105f8e79c833c2b21c22d610e9bd5030a' + 'SKIP' + '08fcea126b0ac1e742cfee110f1647c0280c1f70cf375669d3f4e9e842b36a3b0e380f06cd34c8dbbfe9dd454904b62a2c2683f73a898fe5a85d14a37fa1b37d' + 'SKIP' + 'f53e5b503019f16c7261523fd5b0c19ae7e4c1f218cd835dbf7700cec492bda33a013d568b156911267d231043de9c46de0f195d99a3d2a542e593b92fa6c276' + 'SKIP' + '528b14a1ebd065e3232678eb79e335226433d203afce8b5945f224b15f7f3f9c9220f9d7d897807db625b2d3bd7a4b1838f19a430850391010b092ddabcdc68b' + 'SKIP' + 'ad3b3f6972a9d2270e63fea989b006dd2577d294946663db2040dfb9de5086d740c9f00bb5d78b84375ad734f5729a69d2b57f08506fb0ce33e17ad408f3ffc9' + 'SKIP' + '7026196fb2f65741530dbcafe18996d33d7137dc3a828c539068e222352bacf0f497dcd986c654af9067f083e6416065550e3234318ae3b728a79702f460b54b' + 'SKIP' + 'e23e902b8704c1cb35010f77c5275e2947742df3218a443f4621721b52182fdda1c2577c547b2dee893b22ace966ffa1bf2831226be75bad45740f53c677bfb2' + 'SKIP' + '99e1bd3447706441e85da59df32b50c432d1be3e1539203b6156ef31fd7f9627b7285ee1d2da28389daa2523e4fbfa76e4b15ee8d833ecb8c333254733df3da0' + 'SKIP' + '4cc3dae6dc148b91acb1f072bafc3a13b02c8b1ebbe4ff3e0d421e2ec04eb10e6beb57e5f4340d7880065a52637960dc4a773c63867340a093d5ab3ed43cadfd' + 'SKIP' + '6151d03ddfb92a44b6778219bf925127e908995f4305a7a8ff425402d566220ed68e30470818f82978f0fb2ad728496b027617fbb19472ea5eef3bc1f0db676a' + 'SKIP' + 'b761468a06303818913c7a016db162c44bf46c1b90b3d45cb9484eef44c80f23aa80f76c5227eaa9a51f90031a5a81f8244c41a4f81af841a2345c62f5ca2f38' + 'SKIP' + '1a1dfe5327e4516ff4c71f4124f32f5243a2bef791f030696d4311e5fdfc86d86b77ea3bee1e97c55ee8a501189d5ea32011824e18df5d101e9857307a0a5ec0' + 'SKIP' + '23a0c29029a19b1e4a85bb6947363bd5b44891731e7849aff45d5337b43bea64730068ab8aa9c943b90baca70befc50479c5c06d5a46b3308a8c967aff8d7ccb' + 'SKIP' + '6c03c6b1a37ef4a4e18fb39a22bbaa7575eb1c27bb1a9cd834d71c01278719cdd7241f238190aa00ed05bc72c826362b5aa75b378b411e11aa42e02e50543a57' + 'SKIP' + '6782acd7223bde5f025e80e9e56581b802a58c58c4d7ba05938af628602f3755ba14a90ba1e824ea286fed18da2706513cad5fa67520469d546ecbe0726bfddd' + 'SKIP' + '515865bc31274d26d2dcc8ddace8a4566ca9650aa6932edbc2e9159d020d7181a7b5546667d43643fb16e2933cb5d52da670249b0f251133e3397398861946f3' + 'SKIP' + '585c2f346e6ae556b6764e34ccf7bfc27dc6a3d48ec11bed8c2bc78848b20412ff55f44122f113d04fab49b8b41570b47ef2c3a0b53af05efdcdccd93c76e350' + 'SKIP' + 'bdc7d9a48314b8baf0916808932018fbb47f774282bb898b2cf1ddf801610a9f3671172cd647028052e8f37245ba70a83fba3583d25e24f2d751e8ca7ef2186e' + 'SKIP' + 'b9ef270f76a04cc7109a93772011cc8c3c3823d65a552c708d2e12380669757a5f4feb6e4c3a19e745abd4b3ae800fb980b0c88cd3ab3a704db4ad840c387b60' + 'SKIP' + 'e7a0f359a7cd58d94d531f834c4511b7b41f7628432fc9b32c3f5e96265e3a9c7c3e2f529e4635095484e370eb18430d273a80ecde7e3f0f1ae429f162037523' + 'SKIP' + 'faf4bece4b8be4447b98958617eff0ad10e5dd9eb19f6e666ab4402288ed26d47995320a77df9b667c1861d41528b710b756ab4fccda80208a9867be9cca18b3' + 'SKIP' + '680431991861ca9253a36663e58b6c1e977350fb8cd1b6591195a3a17a2ed310428a3226a54a874e1fcb4836f997f32eb6750dee15cf39928533b3e984b085f8' + 'SKIP' + 'b6c61ace16e6b36e3f6c4729c88a9129fcda8668a80d759bd5c7bcc01aa00df43f0fd48e2b77dd3b18727498c940800ea071a250ec489dbd21c5a3a36d4f01bf' + 'SKIP' + 'd60848a1c433535ac22a4d2b98ed5526b4e5505a1ce609cb338a3df6e35c0ead56bcbcc4bff61b58052ff0e680ebcee6bd0ee810bd024f42d88640c2979035a9' + 'SKIP' + '1cffae0a36e54ad8e91a08b662272973f156864517969553e36dfb77493d560f5611d41aec98607046c424df471758236f6103e79a497dd68592372bf40cbd2f' + 'SKIP' + 'bfdd54f8e722080a548c7d115ff363f810c91f546c4077644ab6de6a94beaeb14e69e1c249ccd97a7c755dec652a7d59f1ac62899e2f8b21fd91d87c4456fc9e' + 'SKIP' + 'eaa47939c992ff4afb4942037cb8511d667c5ad3484c53d08f0da0b7d04cda459bde5bcd40122436aa4f6e2e12efac3756e79d25b7d3e2c3c6270dbf0d5ca552' + 'SKIP' + '1cfda233019ef47dc89937812cd6b3eafb1f9938f730a0451b518428319a02f51cf211d22c221b1b6b4979095b2d864081f9c9db7bfe468e9adc05f94e83d9a8' + 'SKIP' + '49709dd9715b5c152eae4f2343cd0fc5ea48f8c2a63b8cb749530d8492302de978570e2fa4c4b26b723ee8fce92bc23eb65e45f1648b0749850cfed8f7c20697' + 'SKIP' + '2d4b0a135b31c22c50964226c6f6efb7b4bef76165f43f30bdc134cddc7858992be33f6943d662d2b33cf3bf56dd8734e064a242f7a72776b380264be17b6d71' + 'SKIP' + '20ceda63b747130d5d28a781b6d0d7c1a1c4dbbfd510f1455828a44cf276404ceb2bc89ff8a3ebc37ca86b8366260b532572bfafc1297497e8583841f69460e1' + 'SKIP' + '3d785b6e7ea0802a7dc37ed6d4867ffcc21da047af2abc1e95845eec1a2069c803241e44200cc51e14808cb585d297050edd2e353504268169d7d4301d956761' + 'SKIP' + '4efbb6cd2110f3570e6ba7538ccd943cfbc6c27f9902a468862db596a219bb29229809eeb8968afb0d5ff7a9653ca2d98cc8e0f837ec9f2c01e4b1f5d093642b' + 'SKIP' + 'ebbfa7bc9975759baa2159aa05ace80bbc5b6a59b49920a93f0dba950adc059d30e42b5bc3c3ae8ce852537d2c513e0aef1d15e12a330ac502fe2ddece574445' + 'SKIP' + '4ad45923ba03ca02c6435d4ef150cc855bc9514b6d058915704c040ca80694098baa5814b574d8bd6ba368b17a9bd838343fb1c123f34f940d0d0f1fbadbcaa6' + 'SKIP' + '32da02f8a8155b9a5d9ca6d173f83ad3813103aa0d0f659b721eedb215ebd60f7da0e2606cc7ac87fdc0347e8a3a9e389c84a1ba2da3c0ca7209a6e78934323b' + 'SKIP' + 'e5ee5aa0ee21f4b4f3964e73f9b56b94a71b7d7de26e0ab7fecaac07d0e2b1526caf69089a0f25b22305a4b0ac822203a8be36632d7d66165a44aa6732174cd5' + 'SKIP' + '0039d9cf57eb0540efada4bbf1782a429b824995345efe17d3aef689385dbcf8b27bad8b863318f5940486fc9e183b7cfb2deb3a73a2f82542498a3c267e3b42' + 'SKIP' + 'cb0cba464a8f4a8171e887d29e8161c9d0756847c3d1532b375eafbde4f346a7b107cbcd75d3a4007f39666c95083baf1c29b274ac0d25c390965c62aef1bcc6' + 'SKIP' + '28fb8750d595cd3323843fb6e06a4c582de0329d070ba9178a72c2daee5074b7985ff8f9d04af678230bf044d8411fa382a23029483a7a2f170ae1239ad7d7d2' + 'SKIP' + '2a43a489cc6a91145481a941e358a75ef52bdb703940e73c52fae0b1d09be678e0c73994f7936c03c49f8c5e7d5a6009b7f12bff6c4817190df193871aaeea27' + 'SKIP' + 'f2a7b5dee0aa6a1bbfd6290b184e9f7d72937ef787fcaf9a3458669400086eeab5e4553eb7c6af02c7aa250873a5acf8f727a59590e7fa2d888b8cef1bc469f8' + 'SKIP' + '3a8a4b9498ddbbabcf2094f66606df5c96e2d6a153a21a195dc17425a267d1d12bb4b788aec40d3e7874953fc515b228c8bfd05bf7accfe16fee9691f61c9870' + 'SKIP' + '236ca474c5a3bb42a854b30eae6a66abc04f44fdfa94430b1b6cf437ccdf02ce66025ac364875351d8baac91b073202c8d605cdfb9fcb4118d88bbf558d5738e' + 'SKIP' + '6e7960c4ded953ad693a8c2cc8fb63b2f38675c6f0538c9f3d7b4475e601b0951fa406f19d36774be72f566afd6d9428f69aaf6e0ee5749994a0aafd2fb0e65c' + 'SKIP' + '4c5fc7c99ee0ac0b9792e7086908b277ef1274504d861b0739c9f8fdf55a8b81ad4e3dfed2720408db4464dfda25977bd49c6f7a51ef3833fe96fddac013b4e2' + 'SKIP' + 'cafc0ceee80e407ca51c29cdd62f2c41fc15ae0ed509bc35e32329aa94aa93c23662425b869c3220b6d3327ce1086f49ed6193db193d16f7d9cb721aac41063b' + 'SKIP' + '03154561d552abd3d3664ce91b80beb1bddcf8c1897a5ca6e9820587aec079002654830e93392865007d4606c8c52e0b9783fe4e828531caf4c31ae58911df5b' + 'SKIP' + 'c9622b06c5dcd09b815454b00e1cd1d391d72edfcb730e6a90364370b912280e14c6dde72d550575b8d38fdd3f30384ae029d1da8ab03219ad72f8984fad5b52' + 'SKIP' + 'f3080256c980405d691189232a23ac61f918ee486691e83fb7517b402f3e49af0fd11ebe62940641432a8d038dfccf3039d0cfa5e7990e2755ea8d33406796f9' + 'SKIP' + '3f0918900712c886afcb6119731f03aaf630a00e2862e51cbbf1eaa5cef0b2ec35f92b8aba5ca1b69b57336d8203a26fe6dcebc3b52984940e344c5304abd323' + 'SKIP' + 'ce923189dd89642d25bd30f8f9c78afec3c9c8c66ea144d479e76e4e5778f2e54a7bc8d8f521860d3d2bfa0879d50b6effcf19014c588da61f7a6abde239f39b' + 'SKIP' + 'e2ce00703300908ff4ce13f855fe707e657f0d131b1a27fe97c22f88471646a7f60212c21044e138f0780d375451e67689f542eb189fc598a084c8768b9311ca' + 'SKIP' + '6752d0d55e4e9e3ca9d2e792ad4c385c17f3be089b679e3e0c89a8cb8e07a01d77b358b796272ace000f7c668816287e21c6671670915bd4e1a542b5c5975dbe' + 'SKIP' + '6a7b0ce2c251535fddf968837022790540ab4888e427b712aa4fcbbb1a6a44e6ff3a32ee10bffe695d4d0616d85dbf59d633fb12d9e48452296e7d8c8b948ba6' + 'SKIP' + 'a2268233f67ff8f8622d4f23222830ae5ff3185142e64afdb79d11b5b26290f56afb3239d559337358f0da0661f46bf96e34f991f0f798adae061dc7981aedd1' + 'SKIP' + 'b178af97fb2cd6015efa5675120ac4d7f37c0bbb54cda085b5a8b0a04aba88dab673db6385328b7ce474f0b68ee2629dd6e0b4437ccc13e757534c549bf7855e' + 'SKIP' + '4b6ab759818481c6f0fd3df79bccb94c85b14bb47d9e140655b97f067bb7e8aea64a27b742dbf2ad88bbc4964b6fc7cd6c52dc4733b47d2ae07cf6d3d271351d' + 'SKIP' + '0de84885e82e0a647b3969972c962387dc98970a9c3fe3edf4761a15f0df700affc58e0be1968bd120988c33400fbeb45f2b4254a4cb076ee2572f8d4f7d9bf1' + 'SKIP' + '855f1b16aec21d56cd90af3c4713fd4977b94141c81f88b209a0d9a51bedb2b7a997bf631d381df081be7de33c2a8f9774c206a6ee9c650cb48d031d6d04e8e6' + 'SKIP' + '4b711a14a06ddcaae17bbeaf0dcedfc786dff1de1d72d1f9d05dc314afecc697af1293aaabc2b361fbf673b3f62f253e255349e005f854d90206b68b8e21a817' + 'SKIP' + '9dd13e34e0a8004560305db4594514bc874042b514b5e94bc730cc07351d4db63d54c5e25bd8eaed7d6c0ee09683d60957b28002717406a1680bbba057832268' + 'SKIP' + 'e850a59ad2616d2a605d971988c2fa0b4cd41826a55611c66b1711668a5074c8a3d9c27a5cdc8baf1d14e64db336f5f61d83493207ccdfbedfd45684f935b291' + 'SKIP' + '7562325287bd3e90a6530ea80a34362566262e3a10616b7ca25b73c3ec20a5b8b1418238218e58d14e17fdd2e66ec155aff7b89425e8a966db1a780d109b3cfc' + 'SKIP' + 'e4920caf1d11925702841ac4049b837c8c3e862c356a3e7164bd0654660de973c34fdaa95cbee00a6589c4da653e4bc082c88dbdf63ae185b83f955afc23e167' + 'SKIP' + '870db5ef0a8442c0807ed2028f2faa77876a6696bfbca7311eecd718c38621d4faeb9f947409d186e194536a692ef24ac226b932ae04b8f462cb41a32fb9d43c' + 'SKIP' + '0a852f95616266ec978ae9b8e4c668a7a800d6d9fd566d0a7b18142dcc45b51b2ed129ded8fb0552a25f46b85bb60c4ea49b73e990cd2a7929f67c997ef2f8c6' + 'SKIP' + 'a3e10379f0a7b4bb43d476f3705f31697e4f6a3a26fb9b895a9f63f8475cf66283c6eaee60d907e7b0784a64bc8ba07a0ee65a4d8a992f6b937a138f8c277b30' + 'SKIP' + '04b6ddc97cd6204078e460c4da57b443006dbf0eed87634f1f0a94ef48db4d48dcd17cce85aad91049bf8b63637ce04942550a9ed6999d2c0f283e38693c7b3f' + 'SKIP' + 'd8cf7cce76751011ac3b70cc5ff7c07a3abc3418bdca5e6a426c91121af4e49b6538269ad83cf7f29a54279ac26bacade0fd4e3b6326dfe53889f083d9183401' + 'SKIP' + 'aaed3fd6613abd971220129f92c0a8ab2425c474a1bd9eda2af22f64fac36f3d2b471a6b26fd3be68beb85ac7650bf187279a38b2de0130477b931d380f78cf7' + 'SKIP' + '228b488a09f5dfdab256fd717e753cad95fd93dddbfe9115a0650dd0338b5b767a394fa188204bd2fa5d252a1d60c863a65b2da709135fcbbe7de1c88cbe64d3' + 'SKIP' + '901e5741b7a792690b4bc4a7b169b521d3d5b92ee101e65dda2e43fbab98e48ffea7cc4db946058cd918e2da5c3c4d692d1dbbb346196cffd59960fba7dec2dc' + 'SKIP' + 'd9d114a031127ce217be5485b2acd453ecef42e07254a6d783c2d2011cfa1a35aaa02b10d2933fc837984a04ba1219807547d643290192dd0fe51036ed5dea85' + 'SKIP' + '57b42bc43b372a08a3b48c49236896e09c6ed06a6f6ae54e1cf6811bc93bbb9060c4aafba0a3acf21dd76f9ac69fffda7a27c80673670e52b3450cdd61976d52' + 'SKIP' + 'dcbca2901f96b2f47c7213482e8dfa82ff2b93dde8566c9ff5f69be1cdb95c1674d1b832bef1a2fbc6076f067a744e78c8195bd9718bab8cd76b97f9a710c23a' + 'SKIP' + '8e775596d78c5831954fff8c5002f90b9b9d5c4aab811112013882d7eb0f9de707d7dc53a7515accf442202e9ad8be343fa4571f5f573681d3c00321bb61144d' + 'SKIP' + 'f358aba9f17e7a85b1d0fef4d7b2b709fa43c2c7b89b3ad1af3eccdeb7df990a440e1ccd63bb87e72f6f7fdb7e5ff4c894e209e2fb88c1385c99a1bd4d211eae' + 'SKIP' + '7a33a8b70f481b0740c2ec06a2b91fa9af8570efca19f80d152118acd87f8fee037414adbe66546e16aee72a857ff8cee2f437dbb3f80800779071e0cee2d263' + 'SKIP' + '7cf4d4c5f39bcd8887f5fb06b500c3add85c0f8188e70b71ec9c0149598773e40851c79f31c9e3d17b91a623157f45a1bacd963b77878b1fc1d547e268a652b2' + 'SKIP' + '953853e24f2e762f7d33912c47dbb1b5cfb97bd02ddbfa3bd10393d91767cfd046d7b5f3233aedc5269b0f0e96ef6d3dec6998375c0530ae2ca30d30791b9188' + 'SKIP' + '4424ac5dc481b341bc9be0b8a091862cf1f005ef83b2927c4c16ff82479fc65c6c4b4d57e9f7be402b360ea1c6cfd503b08bebde61df81fe3c4105f359f29a65' + 'SKIP' + '302ec630c3ee1e100c9e55e1c36f8937bb8b748718e989c9e965d89308a6cc830ff04e3004cdd9be10c3ab4f3524e7c6b9ff3580c2521edec4d49cdcc6a84018' + 'SKIP' + '7452850c2c99df6fcdad04d93feea6dbf597976864e184349f0449c6c62693ad0cc3eaf1e507bd70cdb842e90b2c7a2796a33c507b3870bbf670f8762bfeae9e') +validpgpkeys=('C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3') # LibreOffice Build Team + +for _lang in "${_languages[@]}"; do + _locale=${_lang%% *} + _pkgname=${pkgbase}-${_locale,,} + + pkgname+=(${_pkgname}) + eval "package_${_pkgname}() { + _package $_lang + }" +done + +for _langpack in "${_languages[@]}"; do + __langpack=${_langpack%% *} + _langpacksrc+=(${_url}/LibreOffice_${_LOver}_Linux_x86-64_rpm_langpack_${__langpack}.tar.gz{,.asc}) +done + +for _helppack in "${_helppacklanguages[@]}"; do + _helppacksrc+=(${_url}/LibreOffice_${_LOver}_Linux_x86-64_rpm_helppack_${_helppack}.tar.gz{,.asc}) +done + +source=(${_langpacksrc[@]} ${_helppacksrc[@]} LICENSE) + +_package() { + pkgdesc="$2 language pack for LibreOffice (legacy version)" + depends=('libreoffice-legacy') + provides=("libreoffice-$1") + + echo $1 " unpacking..." + cd "${srcdir}"/LibreOffice_${_LOver}_Linux_x86-64_rpm_langpack_$1/RPMS + + # remove dictionaries if shipped + rm -vf *-dict-*.rpm || /bin/true + + for j in *.rpm + do bsdtar -x -f $j + done + + # the helppack rpm goes also into the langpack dir, when existing + # otherwise we jump over this so we do not include errors + if [ -e "${srcdir}/LibreOffice_${_LOver}_Linux_x86-64_rpm_helppack_$1.tar.gz" ] + then + bsdtar -x -f \ + "${srcdir}"/LibreOffice_${_LOver}_Linux_x86-64_rpm_helppack_$1/RPMS/*.rpm \ + || true + fi + + mkdir -p "${pkgdir}"/usr/lib/libreoffice + cp -R opt/libreoffice*/* "${pkgdir}"/usr/lib/libreoffice + chown root:root -R "${pkgdir}"/usr/lib/libreoffice + + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libreoffice-legacy/PKGBUILD b/libreoffice-legacy/PKGBUILD new file mode 100644 index 0000000..1d96447 --- /dev/null +++ b/libreoffice-legacy/PKGBUILD @@ -0,0 +1,400 @@ +# Maintainer: Jesus E. + +pkgbase=libreoffice-legacy +_pkgname=libreoffice +pkgname=('libreoffice-sdk-legacy' 'libreoffice-legacy') +pkgver=7.0.4 +_pkgver=${pkgver}.2 +_debver=$pkgver +_debrel=4 +pkgrel=2 +arch=('i686' 'x86_64') +license=('LGPL-3' 'GPL-3' 'MPL-2.0') +url='https://www.libreoffice.org/' +makedepends=('boost' 'cppunit' 'curl' 'desktop-file-utils' 'doxygen' + 'gcc-libs' 'gdb' 'glm' 'gperf' 'gpgme' 'graphite' 'gst-plugins-base-libs' 'harfbuzz-icu' + 'hicolor-icon-theme' 'hunspell' 'hyphen' 'icu' 'lcms2' 'lpsolve' 'neon' 'nspr' 'nss' + 'pango' 'perl-archive-zip' 'poppler' 'postgresql-libs' 'python' 'qt-base' 'qt-x11extras' + 'quilt' 'sane' 'shared-mime-info' 'ttf-dejavu' 'ttf-liberation' 'unixodbc' 'unzip' + 'xmlsec' 'zip' 'libffi' 'libjpeg-turbo' 'libxinerama' 'libxrandr' 'libxslt' 'libepoxy' 'clang') +_source_url='https://dev-www.libreoffice.org' +source=("https://download.documentfoundation.org/${_pkgname}/src/${pkgver}/${_pkgname}"{,-help,-translations}"-${_pkgver}.tar.xz"{,.asc} + "https://deb.debian.org/debian/pool/main/libr/libreoffice/libreoffice_${_debver}-${_debrel}+deb11u10.debian.tar.xz" + "${_pkgname}.sh" + "${_pkgname}.csh" + "make-pyuno-work-with-system-wide-module-install.diff" + "help-${_pkgname}-languages.js" + "template-soffice.desktop.in" + "${_source_url}/src/CoinMP-1.7.6.tgz" + "${_source_url}/src/Firebird-3.0.0.32483-0.tar.bz2" + "${_source_url}/src/QR-Code-generator-1.4.0.tar.gz" + "${_source_url}/src/dtoa-20180411.tgz" + "${_source_url}/src/pdfium-4306.tar.bz2" + "${_source_url}/src/serf-1.3.9.tar.bz2" + "${_source_url}/src/libatomic_ops-7.6.8.tar.gz" + "${_source_url}/src/libabw/libabw-0.1.3.tar.xz" + "${_source_url}/src/libcmis-0.5.2.tar.xz" + "${_source_url}/src/skia-m85-e684c6daef6bfb774a325a069eda1f76ca6ac26c.tar.xz" + "${_source_url}/src/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz" + "${_source_url}/src/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip" + "${_source_url}/src/48d647fbd8ef8889e5a7f422c1bfda94-clucene-core-2.3.3.4.tar.gz" + "${_source_url}/src/mariadb-connector-c-3.1.8-src.tar.gz" + "${_source_url}/src/884ed41809687c3e168fc7c19b16585149ff058eca79acbf3ee784f6630704cc-opens___.ttf" + "${_source_url}/src/libcdr-0.1.6.tar.xz" + "${_source_url}/src/libvisio-0.1.7.tar.xz" + "${_source_url}/src/libpagemaker-0.0.4.tar.xz" + "${_source_url}/src/liborcus-0.16.1.tar.bz2" + "${_source_url}/src/libstaroffice-0.0.7.tar.xz" + "${_source_url}/src/libqxp-0.0.2.tar.xz" + "${_source_url}/src/libetonyek-0.1.9.tar.xz" + "${_source_url}/src/libmwaw-0.3.16.tar.xz" + "${_source_url}/src/libzmf-0.0.2.tar.xz" + "${_source_url}/src/libwpd-0.10.3.tar.xz" + "${_source_url}/src/libwpg-0.3.3.tar.xz" + "${_source_url}/src/libwps-0.4.11.tar.xz" + "${_source_url}/src/libmspub-0.1.4.tar.xz" + "${_source_url}/src/libfreehand-0.1.2.tar.xz" + "${_source_url}/src/librevenge-0.0.4.tar.bz2" + "${_source_url}/src/libepubgen-0.1.1.tar.xz" + "${_source_url}/src/libodfgen-0.1.6.tar.bz2" + "${_source_url}/src/libe-book-0.1.3.tar.xz" + "${_source_url}/src/liblangtag-0.6.2.tar.bz2" + "${_source_url}/src/language-subtag-registry-2020-09-29.tar.bz2" + "${_source_url}/src/mdds-1.6.0.tar.bz2" + "${_source_url}/src/libexttextcat-3.4.5.tar.xz" + "${_source_url}/src/libnumbertext-1.0.6.tar.xz" + "${_source_url}/src/a8c2c5b8f09e7ede322d5c602ff6a4b6-mythes-1.2.4.tar.gz" + "${_source_url}/src/ltm-1.0.zip" + "${_source_url}/src/e5be03eda13ef68aabab6e42aa67715e-redland-1.0.17.tar.gz" + "${_source_url}/src/a39f6c07ddb20d7dd2ff1f95fa21e2cd-raptor2-2.0.15.tar.gz" + "${_source_url}/src/1f5def51ca0026cd192958ef07228b52-rasqal-0.9.33.tar.gz") +sha512sums=('cc65497b8d27f0e48ebfc5fa66b09d45948febe9454149300b447d9a6aafecd4be728403c3095c058852b9dc53570841d612bc196979f25595f6b8981f706d4b' + 'SKIP' + 'ba346fa8ee015479d799d9d0b2a315cb901071b5fba2c4d7eba2eeba41dd4cac72210d12542704220c8cbb82d6a7b37a9285c1933fe2407e8e149510df4d58fe' + 'SKIP' + 'a1da20b4e4ae4952ca619871fc74c5693202e1f909f16ca1321a46dbc9abf979239c989bc56799c3e0c1f0930e8a41bd9aca2212bf5435e733951bdef8a5315c' + 'SKIP' + '62214e1a22337fe1a2f65c19a369f6a642a523f4e4a31d04ea4fbd8b69a7ea416816c56f568ab88fce3d64892d47a5da3821fb7382816dfddb8d30db6c06d392' + 'b4d9c0f0088ed1b8046e441c2db16406ee502373eb897a8241eb132424c9db78ab26dbb589b492ceb02d158b925b069a0beb356c8e9dd0092c8998e41ef0492b' + 'd17f85dcc464685ae1955c5e2fdac9cd1ca02d55c2d76c3616bd1b5fcecb8eaec5fb639b30d1bdece1251bdddcde5a1d5d26d20a0a76bbfa17f7e2eefb7868ad' + 'be4d752ee1e26de5dd0f83635a54c3e07f6e88eb98bed044e544a0ec4238df227a5b3e9b59cf58fce46c80f5d3e9056e6504b795167282daea80ff7dde053e4c' + 'a99788691719b74bee93dd938b34df73d0aa4d4366ad249e5030f6a97bfeaf8cae34771d51294d8edd5054ccb87e411b054d398893e9582e9856be38b9b61da8' + 'c759a5650bce25ec5ed4bea5ea71b77b1a6045bf552bac786492ef828749a04d40617ada6966714b7bb8394011d2b2ecbab8f569611703aa6364009428763f72' + '1612d43d52d0ee29b4e6ca328e1535c59722dfd5c7a7e0811a4180ad6033ef27111ced6497f9d5cea816c047a4e11c2aed6d1936feac8ded797eeec55d9539ce' + '17d170ce3ced3830a10fc7e517d5ef53d151c5affe9676485b7a860e94f68bbb5a003123fbcaa5fffc04b2d91aec161a8f3ef1ee2c0b197a8546904a4c6e6dee' + '314a757bfdf9a38bcf07fd7a0103d28a2d1dd7311b8234761304efeef7bfdb740db78ab01e6b67e99a28d523cc2be9c1073b2de9d65e853d191c3dad19af56d0' + '722aa814c33a34bfffe6c0201b0035cc3b65854a0ba9ae2f51620a89d68019353e2c306651b35bca337186b22b2e9865ef3c5e3df8e9328006f882e4577f8c85' + '3f0adc03d1a105bba18e8d2384f698214c98c6b5c2602eb0cbc7d74fd3f7afe6c51fd8ff751fc5054d5671ce8b5b8205c4d2a1f044d5ebadac4d4a3b92701e10' + '9f5418d991840a08d293d1ecba70cd9534a207696d002f22dbe62354e7b005955112a0d144a76c89c7f7ad3b4c882e54974441fafa0c09c4aa25c49c021ca75d' + 'bc448fadcf8e2936fa933a5872d5550ecdff04b0df27120d3182dcbb2147a6594ec6bfc5b214e21b37ffa1b5100c1c56d301ba9cae7df26cee5e6b999dcda14c' + '0d2646e1bad1e11b3da43714ac5931fc67ffdbc4e7a25a44ef5b6e6a41de1e0ae14596b4a87cceb07bf56dbbe9344622b3d60afcb054ee0ab8577ca8e9b5c289' + '295ab15115e75b1f6074f17d3538afe0de9b2b77ab454f5c63cb05e8df11886d82942fbf21ba01486052e3f6c75b0636b99d8e660cd3472dc4b87c31d3cd557b' + '4aeba56400d20e5fe234c7927b3d196233e19513a3202e074a88fad0d14d168221574a5a72b8dd9398cf3a9453c46eba4e4ed23d8d2031522b6cb11bc8bb43c1' + 'b9c02d63e9b47a838dbe67c05b9e9e4983d13b9d74794e1c30c73d341c3bc905c9edec3a72fa339ae8c0e06d97e69ac2ea23bf51336b77af14cab7ae67721a46' + '2d3835f7ac356805025cafedcad97faa48d0f5da386e6ac7b7451030059df8e2fdb0861ade07a576ebf9fb5b88a973585ab0437944b06aac9289d6898ba8586a' + '1c9da9077edcebd46563bd9e47d330518e0b30061016650a759cfe051e9748fdad8932a472b1cca53a6adafed5f41656527271fc5f55ddfcefb558f0d83286b4' + '005fdacd7e7b353b97b5c1305f973a90744e495d7bf5d407fc6c75d49323e13a743e6c3877c00ada2b3fc49a0f33e5c2dcd70b1f8fe8eb8f579af1bce3b3e6b9' + 'ce7e23e750f2c6f7ff2e590cc8941caa18eaae2727c9ca31313ab72ab19278055bd9393d38b0b5b685594e2f04ee15cb83b3bbb25d09665fe7383d7f26bf2ae8' + '629d55da71c7333f41f60a32e2880deffcf80088096af1bbc8c572b80ef21d851102fdebce56f77245ed60822ca98e02c0867b192abef496a2313fde54a97bb6' + 'c26f67a09fa6a6d0bf6f3fff5590d5cf16983630d4f7cfcf86d9461baec58dbdf7989fd934be6db0639ca043c160aac2d008275afb9e047766bc878ac579a9ea' + 'd9d9436622ae378da2a3c8e50a35b6133582a595c9ff0fe0e3b124fd0b83f1f12afdfc6a27d16b509ca9bab33067215d7300e505d4bf6b280be7e4bf46da6c64' + '23e9cb90da67366bcb2e9e5e222fccb25b6738d6e58253a237963f949a39df94f395f3f1e8d6a40f6faac3e98573e2d7a6874bb7ae70a8d1be06868e030177a9' + 'fae873457a8018c1613667aa92771981503585513ab01bdbd2dd6d506ed4f72a7a8fdcfcb8953a46dfcb8fd902d2c9ef8ccd1a5ff15c83990a89847fb98009f8' + '409d3df82ac522b39bdd0ef4f0a781b906e246a8e6f502009c095eea90d672c482a7fc5c7f998d89952bc598c6f51357346ed6df490c25cb48e1318e27c50dab' + '3f439b369d450bb1a4bdb3fe92023bda234b323cf676570f1738318c56867a97910f536280b9b164c3fdaa423a3ee669c935df75a5c700bc1530ea5b9a00391e' + 'c043d77e4b0efd7da594c1e370f24ee2d85afcb8a5e28179b4c3d76c8b7925f41ca5361bee12b35af732ef39f34fac46aa3636cb27c179ef9bb2b6feeaa19b0a' + 'ad4a8e65e85434e43caa239ff2a3f358c6db6411235c4bb73d8d2aa1527a4f411433370706db391f8f8110a36759249ee19b27be75bae5f361c491006d1b9aa2' + 'df14f11e885a583218afdb0aafe8a15d01890289af8b316cd1d225e4a83996c82907fbfdde83257dc71d99bfbc5b21b2c96536f5a783748388659155dbdb8949' + '99f8346b336eb902626fe07836c73870a57e100620ddd242ce7c2866e564483ed024a3a0b2804f81a0f59a0873310c3a93c005d306437a27818a6f4374c0c491' + '6c81342b68fd93974c10ec0907dd46e9417cafa46d06205843941650828f4299a8793a7ace5c0ca755b8b9fb91fc1d6ef63304c641e7b5de36885e9995566e36' + '7275f890645961b3fd56df4584788962e8c064fe3f99f5834c6ba6177ce76d00d544fbe9a25b7ab2f4180d2f3a90c609fe0bb68d61ea24e95b086190390fff31' + '4112a76ac99999801d97d1b282596d631d8496a5bf65778ab26aa06da86637b1e2b630648a67ea01bf3316ecec9f2715546baff27af090b900267c87a011b963' + '9430158503a42a3b2ee2c34426e647facd773886fd256c0fc6f6d04fd58dee87745118688058bf8e2418685b49c6559fc9e6c878d6282061294fb98cb46e4c86' + '9d911384672b5394ff1df3280a5c9fe12888530c41f177aa100f135954e2ec279b64193f8388f12c96f6a6e587483ce853e74fe45b29fb748a930512dd011c2b' + '4757875d113c11e3aa6e3bdcd93463187bebb94a07eafeb70c3c01b236fff8d3980236c201349abb6bbc99fd027fa627c2efdb7e0f2616dd2435cecbf7c661d1' + '56dfa93816b8a1b7e223bda517ff81547fd7b311c3fe2bea64b12c4290642d4b9ed3778df06c4ee7a65f2b9db57702c00c32aec819efb7820115165af3d5ebdc' + '812e00d0a26eedc1fa9bee6d0b9da53b8faca8d1fc5f93a0423106b5b777c7b1ec5854da7d02606c215ad1a1248de93016559c7a55288a4b427857fb1ed1ad8f' + 'b0b4a7fc35613da18aaf106f1ab6eaa152d83df6efe3ab0ed372d09db28c0a9b099f149baf313054db45404cf2b8b6db477fded747c3348e025725c5f9a813d9' + '7c66894748e998f24374a5c6ea342ae2736e4bdba53be89510a1674690517ed7303786e1290fcfa26b07f236788c192ad29790129c228074397ab43699cdb290' + 'f05a9f08c2f2f335d0e483c024321b96fee7424bc1398d4c6acbd9c501f92e22f881bc3d6ec2c0434f9bf4604f3c4b0e880e37d3d0de410eac1a20ea6669baa6' + '0b2a5226f363af9a6df90f788f6cdc5fe95ddb524d96ad2db1caf2e7f414649ce2975eae3c9e5fceecbf825a90c736a0717b02ec9671e980ab9cfb3e2df73b8d' + 'a04da39812bcfb1391a2cba7de73e955eafe141679ec03ed6657d03bebf360b432480d0037dff9ed72a1dfda5a70d77d44ac2bb14cdb109fd8e2a38376feee21' + '70c273ea4195066d4449aa1c96afbd3af1069d735cbefc67bebb86e3a63c2c12e85507677ef1bb4fd615ba4c88bbdf33bcd3cffef4b4e9fc309db518aca294e1' + '363323ffc9e75d4f0e3a3b40952f6241fd0d8b9f46bfd4dd86cf0a5162de35257a8b70ce408a6083c03ba7c388982231a3774e5e9024b262ebb02968f778b850' + '563dd01869eb4df8524ec12e2c0a541653874dcd834bd1eb265bc2943bb616968f624121d4688579cdce11b4f00a8ab53b7099f1a0850e256bb0a2c16ba048ee' + '05728682797470db9e51d156012e8fde9dec1554d107372faa11cbe6cdc3356e92386f4f8de6d7c41e3100b76f9b1c6809102a913829cddbd2ff29043c04d522') +noextract=("CoinMP-1.7.6.tgz" + "Firebird-3.0.0.32483-0.tar.bz2" + "QR-Code-generator-1.4.0.tar.gz" + "dtoa-20180411.tgz" + "pdfium-4306.tar.bz2" + "serf-1.3.9.tar.bz2" + "libatomic_ops-7.6.8.tar.gz" + "libabw-0.1.3.tar.xz" + "libcmis-0.5.2.tar.xz" + "skia-m85-e684c6daef6bfb774a325a069eda1f76ca6ac26c.tar.xz" + "0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz" + "a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip" + "48d647fbd8ef8889e5a7f422c1bfda94-clucene-core-2.3.3.4.tar.gz" + "mariadb-connector-c-3.1.8-src.tar.gz" + "884ed41809687c3e168fc7c19b16585149ff058eca79acbf3ee784f6630704cc-opens___.ttf" + "libcdr-0.1.6.tar.xz" + "libvisio-0.1.7.tar.xz" + "libpagemaker-0.0.4.tar.xz" + "liborcus-0.16.1.tar.bz2" + "libstaroffice-0.0.7.tar.xz" + "libqxp-0.0.2.tar.xz" + "libetonyek-0.1.9.tar.xz" + "libmwaw-0.3.16.tar.xz" + "libzmf-0.0.2.tar.xz" + "libwpd-0.10.3.tar.xz" + "libwpg-0.3.3.tar.xz" + "libwps-0.4.11.tar.xz" + "libmspub-0.1.4.tar.xz" + "libfreehand-0.1.2.tar.xz" + "librevenge-0.0.4.tar.bz2" + "libepubgen-0.1.1.tar.xz" + "libodfgen-0.1.6.tar.bz2" + "libe-book-0.1.3.tar.xz" + "liblangtag-0.6.2.tar.bz2" + "language-subtag-registry-2020-09-29.tar.bz2" + "mdds-1.6.0.tar.bz2" + "libexttextcat-3.4.5.tar.xz" + "libnumbertext-1.0.6.tar.xz" + "a8c2c5b8f09e7ede322d5c602ff6a4b6-mythes-1.2.4.tar.gz" + "ltm-1.0.zip" + "e5be03eda13ef68aabab6e42aa67715e-redland-1.0.17.tar.gz" + "a39f6c07ddb20d7dd2ff1f95fa21e2cd-raptor2-2.0.15.tar.gz" + "1f5def51ca0026cd192958ef07228b52-rasqal-0.9.33.tar.gz") +validpgpkeys=('C2839ECAD9408FBE9531C3E9F434A1EFAFEEAEA3' # LibreOffice Build Team + 'C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd ${_pkgname}-${_pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index" + export QUILT_DIFF_ARGS="--no-timestamps" + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/apparmor-*.diff || true + rm -v debian/patches/build-against-shared-lpsolve.diff || true + rm -v debian/patches/debian-*.diff || true + rm -v debian/patches/disableClassPathURLCheck.diff || true + rm -v debian/patches/fix-bluez-external.diff || true + rm -v debian/patches/fix-internal-hsqldb-build.diff || true + rm -v debian/patches/fix-system-lpsolve-build.diff || true + rm -v debian/patches/hide-math-desktop-file.diff || true + rm -v debian/patches/hppa-is-32bit.diff || true + rm -v debian/patches/install-fixes.diff || true + rm -v debian/patches/javadoc-optional.diff || true + rm -v debian/patches/jdbc-driver-classpaths.diff || true + rm -v debian/patches/jurt-soffice-location.diff || true + rm -v debian/patches/mention-java-common-package.diff || true + rm -v debian/patches/no-openssl.diff || true + rm -v debian/patches/pdfium-m68k.diff || true + rm -v debian/patches/sensible-lomua.diff || true + rm -v debian/patches/split-evoab.diff || true + rm -v debian/patches/system-officeotron-and-odfvalidator || true + rm -v debian/patches/unowinreg-static-libgcc.diff || true + rm -v debian/patches/use-mariadb-java-instead-of-mysql-java.diff || true + + quilt push -av + fi + + # link all non-extracted files to the external source directory + install -dv ../ext_sources + pushd ../ext_sources + for source in ${noextract[@]}; do + ln -sv ../${source} . + done + popd + + # apply patch fixing not upstreamable pyuno paths + patch -p1 -i ../make-pyuno-work-with-system-wide-module-install.diff + + # use $CFLAGS variable but remove overridden ones from LibreOffice + for i in ${CFLAGS}; do + case "${i}" in + -O?|-pipe|-Wall|-g|-fexceptions) continue;; + esac + ARCH_FLAGS="${ARCH_FLAGS} ${i}" + done +} + +build() { + cd ${_pkgname}-${_pkgver} + + # strip -s from $MAKEFLAGS in case you use it to shorten build logs. + _MAKEFLAGS=${MAKEFLAGS/-s/} + + # see https://icu.unicode.org/download/61#TOC-Migration-Issues + CPPFLAGS+=' -DU_USING_ICU_NAMESPACE=1' + ./autogen.sh \ + --with-vendor="Hyperbola" \ + --with-extra-buildid=${pkgver}-${pkgrel} \ + --prefix=/usr \ + --exec-prefix=/usr \ + --sysconfdir=/etc \ + --libdir=/usr/lib \ + --mandir=/usr/share/man \ + --enable-release-build \ + --enable-split-app-modules \ + --disable-fetch-external \ + --disable-dependency-tracking \ + --disable-report-builder \ + --with-external-tar=${srcdir}/ext_sources \ + --with-external-dict-dir=/usr/share/hunspell \ + --with-external-hyph-dir=/usr/share/hyphen \ + --with-external-thes-dir=/usr/share/mythes \ + --with-parallelism=${_MAKEFLAGS/-j/} \ + --enable-odk \ + --enable-qt5 \ + --enable-python=system \ + --enable-gio \ + --enable-openssl \ + --enable-scripting-javascript \ + --enable-ext-nlpsolver \ + --enable-ext-wiki-publisher \ + --disable-avahi \ + --disable-dbus \ + --disable-dconf \ + --disable-gtk3 \ + --with-system-headers \ + --with-system-libs \ + --with-system-icu \ + --with-system-boost \ + --with-system-cairo \ + --with-system-dicts \ + --with-system-gpgmepp \ + --with-help=html \ + --with-lang="" \ + --without-system-coinmp \ + --without-system-firebird \ + --without-system-qrcodegen \ + --without-system-clucene \ + --without-system-serf \ + --without-system-libatomic-ops \ + --without-system-libabw \ + --without-system-libcmis \ + --without-system-mariadb \ + --without-system-liblangtag \ + --without-system-librevenge \ + --without-system-libepubgen \ + --without-system-libodfgen \ + --without-system-libebook \ + --without-system-libcdr \ + --without-system-libfreehand \ + --without-system-libpagemaker \ + --without-system-orcus \ + --without-system-libvisio \ + --without-system-libwpd \ + --without-system-libwpg \ + --without-system-libwps \ + --without-system-libmspub \ + --without-system-libetonyek \ + --without-system-libmwaw \ + --without-system-libqxp \ + --without-system-libstaroffice \ + --without-system-libzmf \ + --without-system-mdds \ + --without-system-libexttextcat \ + --without-system-libnumbertext \ + --without-system-mythes \ + --without-system-libtommath \ + --without-system-redland \ + --without-fonts \ + --without-java \ + --without-myspell-dicts + + touch src.downloaded + make build-nocheck + install -d ../fakeinstall + make DESTDIR=${srcdir}/fakeinstall distro-pack-install +} + +package_libreoffice-sdk-legacy() { + pkgdesc="Software Development Kit for LibreOffice (legacy version)" + depends=('libreoffice' 'gcc-libs' 'zip') + + for dir in $(grep -h ^%dir ${_pkgname}-${_pkgver}/file-lists/sdk{,_doc}_list.txt); do + install -dm755 ${pkgdir}/${dir/\%dir/} + done + for file in $(grep -h -v ^%dir ${_pkgname}-${_pkgver}/file-lists/sdk{,_doc}_list.txt); do + dirname=$(dirname $file) + [[ -d ${pkgdir}/${dirname} ]] || install -dm755 ${pkgdir}/${dirname} + mv -v fakeinstall/${file} ${pkgdir}/${file} + done + + # fix file permissions + find ${pkgdir}/usr/lib/${_pkgname}/sdk/examples -type f | xargs chmod -v -x + + # install LibreOfficeKit headers + install -Dm644 ${_pkgname}-${_pkgver}/include/LibreOfficeKit/* -t ${pkgdir}/usr/include/LibreOfficeKit + + # remove all source files related to Java due to freedom issues + find ${pkgdir}/usr/lib/${_pkgname} -name java | xargs rm -frv + + # licenses + install -Dm644 ${_pkgname}-${_pkgver}/COPYING{,.LGPL,.MPL} -t ${pkgdir}/usr/share/licenses/${pkgname} +} + +package_libreoffice-legacy() { + pkgdesc="A complete free and libre office productivity application suite (legacy version)" + depends=('curl' 'desktop-file-utils' 'gcc-libs' 'gpgme' 'graphite' 'harfbuzz-icu' + 'hicolor-icon-theme' 'hunspell' 'hyphen' 'icu' 'lcms2' 'lpsolve' 'neon' + 'nspr' 'nss' 'pango' 'poppler' 'python' 'shared-mime-info' 'xdg-utils' + 'xmlsec' 'libcups' 'libepoxy' 'libjpeg-turbo' 'libxinerama' 'libxrandr' 'libxslt' + 'qt-base' 'qt-x11extras') + optdepends=('sane: for scanner access' + 'unixodbc: adds ODBC database support' + 'gst-plugins-base-libs: for multimedia content' + 'libpaper: takes care of paper size' + 'postgresql-libs: for postgresql-connector') + backup=('etc/libreoffice/sofficerc' + 'etc/libreoffice/bootstraprc' + 'etc/libreoffice/psprint.conf' + 'etc/profile.d/libreoffice.sh' + 'etc/profile.d/libreoffice.csh') + + mv fakeinstall/* ${pkgdir} + + # remove the LibreOffice SDK directory + rm -fr ${pkgdir}/usr/share/libreoffice/sdk + + # install config files to /etc/libreoffice directory and link them found by LibreOffice + install -Dm644 ${pkgdir}/usr/lib/${_pkgname}/program/{bootstraprc,sofficerc} -t ${pkgdir}/etc/${_pkgname} + install -Dm644 ${pkgdir}/usr/lib/${_pkgname}/share/psprint/psprint.conf -t ${pkgdir}/etc/${_pkgname} + for cfgfile in {bootstrap,soffice}rc; do + ln -fs {/etc/${_pkgname},${pkgdir}/usr/lib/${_pkgname}/program}/${cfgfile} + done; + ln -fs {/etc/${_pkgname},${pkgdir}/usr/lib/${_pkgname}/share/psprint}/psprint.conf + + # allow to preset desired VLC + install -Dm644 ${_pkgname}.{sh,csh} -t ${pkgdir}/etc/profile.d + + # link pyuno to find its modules + install -d ${pkgdir}/usr/lib/python3.8/site-packages + for pyuno in uno{,helper}.py; do + ln -fs {/usr/lib/${_pkgname}/program,${pkgdir}/usr/lib/python3.8/site-packages}/${pyuno} + done; + + # make all language packages with help section ('1') available to + # fix F1 key not opening translated offline help opening in browser + install -Dm644 {help-${_pkgname}-,${pkgdir}/usr/lib/${_pkgname}/help/}languages.js + + # install shortcut and metadata + install -d ${pkgdir}/usr/share/templates + cat template-soffice.desktop.in | sed -e 's#@APP@#Calc#' | sed -e 's#@EXT@#ods#' | sed -e 's#@TYPE@#spreadsheet#' > ${pkgdir}/usr/share/templates/soffice.ods.desktop + cat template-soffice.desktop.in | sed -e 's#@APP@#Draw#' | sed -e 's#@EXT@#odg#' | sed -e 's#@TYPE@#drawing#' > ${pkgdir}/usr/share/templates/soffice.odg.desktop + cat template-soffice.desktop.in | sed -e 's#@APP@#Impress#' | sed -e 's#@EXT@#odp#' | sed -e 's#@TYPE@#presentation#' > ${pkgdir}/usr/share/templates/soffice.odp.desktop + cat template-soffice.desktop.in | sed -e 's#@APP@#Writer#' | sed -e 's#@EXT@#odt#' | sed -e 's#@TYPE@#text#' > ${pkgdir}/usr/share/templates/soffice.odt.desktop + install -Dm644 ${_pkgname}-${_pkgver}/sysui/desktop/appstream-appdata/*.xml -t ${pkgdir}/usr/share/metainfo + + # licenses + install -Dm644 ${_pkgname}-${_pkgver}/COPYING{,.LGPL,.MPL} -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/libreoffice-legacy/help-libreoffice-languages.js b/libreoffice-legacy/help-libreoffice-languages.js new file mode 100644 index 0000000..9f5ca12 --- /dev/null +++ b/libreoffice-legacy/help-libreoffice-languages.js @@ -0,0 +1 @@ +var languagesSet = new Set(['en-US','am','ar','ast','bg','bn','bn-IN','bo','bs','ca','ca-valencia','cs','da','de','dz','el','en-GB','en-ZA','eo','es','et','eu','fi','fr','gl','gu','he','hi','hr','hu','id','is','it','ja','ka','km','ko','lo','lt','lv','mk','nb','ne','nl','nn','om','pl','pt','pt-BR','ro','ru','si','sid','sk','sl','sq','sv','ta','tg','tr','ug','uk','vi','zh-CN','zh-TW']) diff --git a/libreoffice-legacy/libreoffice.csh b/libreoffice-legacy/libreoffice.csh new file mode 100644 index 0000000..224e372 --- /dev/null +++ b/libreoffice-legacy/libreoffice.csh @@ -0,0 +1,4 @@ +# To force a certain look-and-feel. + +#setenv SAL_USE_VCLPLUGIN gen +#setenv SAL_USE_VCLPLUGIN qt5 diff --git a/libreoffice-legacy/libreoffice.sh b/libreoffice-legacy/libreoffice.sh new file mode 100644 index 0000000..83cbea4 --- /dev/null +++ b/libreoffice-legacy/libreoffice.sh @@ -0,0 +1,4 @@ +# To force a certain look-and-feel. + +#export SAL_USE_VCLPLUGIN=gen +#export SAL_USE_VCLPLUGIN=qt5 diff --git a/libreoffice-legacy/template-soffice.desktop.in b/libreoffice-legacy/template-soffice.desktop.in new file mode 100644 index 0000000..32a28ef --- /dev/null +++ b/libreoffice-legacy/template-soffice.desktop.in @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=LibreOffice @APP@ ... +Comment=Enter LibreOffice @APP@ filename: +Comment[de]=Name der LibreOffice @APP@-Datei eingeben: +Type=Link +URL=.source/soffice.@EXT@ +Icon=libreoffice-oasis-@TYPE@ diff --git a/librep/PKGBUILD b/librep/PKGBUILD new file mode 100644 index 0000000..e44503e --- /dev/null +++ b/librep/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=librep +pkgver=0.92.5 +_debver=$pkgver +_debrel=3.1 +pkgrel=2 +pkgdesc="Lisp system for Sawfish" +license=('GPL-2') +arch=('i686' 'x86_64') +url='https://sawfish.fandom.com/wiki/Librep' +depends=('gmp' 'gdbm' 'libffi') +makedepends=('quilt') +options=('!emptydirs' '!libtool') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/libr/librep/librep_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/libr/$pkgname/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('210fa3daac876dba68084f9e27996354e054ef0993d8d8a4a0498d742285b97f21eaaec218ba6439464c908f24cd8318f0d3edbab5a373b7c8057c8fc910ca55' + 'c4fd88eb4a6a488cae9b2f2d5e917d5ad6317baf5c04a7bcb490b7ef6cb982b4bcf60b226e8a5399a37e0de63afefd974432a12126d3fc785a198172eebf5dba') + +prepare() { + cd "$srcdir"/${pkgname}_${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + cp -r "$srcdir"/debian . + + quilt push -av + fi + ./autogen.sh +} + +build() { + cd "$srcdir"/${pkgname}_${pkgver} + ./configure \ + --disable-static \ + --prefix=/usr \ + --libexecdir="/usr/libexec/$pkgname" \ + --with-readline \ + --with-ffi + make +} + +package() { + cd "$srcdir"/${pkgname}_${pkgver} + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libreplaygain/LICENSE b/libreplaygain/LICENSE new file mode 100644 index 0000000..4362b49 --- /dev/null +++ b/libreplaygain/LICENSE @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/libreplaygain/PKGBUILD b/libreplaygain/PKGBUILD new file mode 100644 index 0000000..78517b3 --- /dev/null +++ b/libreplaygain/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=libreplaygain +pkgver=475 +_debver=475 +_debrel=1 +pkgrel=3 +pkgdesc="A library to adjust audio gain" +arch=('i686' 'x86_64') +url="https://www.musepack.net/index.php?pg=src" +license=('LGPL-2.1') +depends=('glibc') +makedepends=('cmake' 'quilt') +source=("https://files.musepack.net/source/${pkgname}_r${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libr/libreplaygain/libreplaygain_1.0~r$_debver-$_debrel.debian.tar.gz" + 'LICENSE') +sha512sums=('b5fce8daf6aa8c8e0adb4c80089b43824b6503cb7d11e0c47c779c57a933b32f0c24722ca3fcf49711199fddcbb92c3fc13876f22418ca1521c7b8e27ba9d409' + 'eb293a29db2961a3715fb66d7388e5cbe01a201321fe18860a35a26fbe5d7bac6f3929dc18aed97cb53f45893cfa4706300aca11c5c4c278b3ebaed1f9c83f0a' + '1bca76c9f2f559a7851c278650125cd4f44a7ae4a96ceee6a6ba81d34d28fe7d6125c5ee459fef729b6a2a0eba3075c0841c8a156b3a26f66194f77f7d49151c') + +prepare() { + cd ${pkgname}_r${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}" + + mkdir build + cd build + cmake ../${pkgname}_r${pkgver}/ \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release + make +} + +package() { + cd "${srcdir}"/build + + make DESTDIR="${pkgdir}" install + + install -d "${pkgdir}"/usr/include/replaygain/ + install -Dm644 "${srcdir}"/${pkgname}_r${pkgver}/include/replaygain/* \ + "${pkgdir}"/usr/include/replaygain/ + + install -Dm644 "${srcdir}"/LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/libretools/PKGBUILD b/libretools/PKGBUILD new file mode 100644 index 0000000..f02f42d --- /dev/null +++ b/libretools/PKGBUILD @@ -0,0 +1,129 @@ +# Maintainer: Jesus E. + +pkgbase=libretools +pkgname=(libretools librelib gitget xbs) +pkgdesc="Programs for Hyperbola development" +url="https://git.parabola.nu/packages/libretools.git/" +license=('GPL-3' 'GPL-2') + +pkgver=20170505 +source=(https://repo.parabola.nu/other/$pkgname/$pkgname-$pkgver.tar.gz{,.sig} + hyperbola.patch + doas.patch + gettext-tiny.patch + remove-systemd_stdin_hack.patch) +sha512sums=('7034e12c6a3425b5c9eb05f2250397a5bb6ed89fda7129fcbc8ab2d56d6afa63dbd11c95dc0921cd087121b4c0168890136571a568b9fa89d9b4945a62cd3509' + 'SKIP' + '5d702bf29ab9b0a607c6f45ec5641759150f2a3eb674bc55036bbac56dbd13e8f66fc2bda2ee4a722084e56b567861da092b364512ae30345fb0fa025a26abbd' + '399866ab03c8cf923ff31aa71ae033d1732c5652fb67ff7c8882a786913361d3f0058f338bc726fa2d547c2ed4142999841e7886357cb4b46e5120342cbce241' + '5e3b286c067bca460eab27915af9e98dbd6e9bd16e4cb0ccf7988870617f0d6b380d406519fad3ce13c45a3098e1a7f033ee14ad111abec16d614630479d86f7' + '3d1223a3f8c2257de17c514eb0b68d32c188a42d332106a264be686e7735a2e2ec41cb062a0ec367dfb5846614983a0dc6c860a7d74dbc40e2d9ce146c284d1c') +validpgpkeys=('99195DD3BB6FE10A2F36ED8445698744D4FFBFC9') # Luke Shumaker + +pkgrel=6 +arch=('any') +makedepends=(ruby-ronn-ng gettext-tiny) +checkdepends=(sh-roundup git expac tokyocabinet) + +prepare() { + cd "$srcdir/$pkgbase-$pkgver" + patch -p1 -i ../hyperbola.patch + patch -p1 -i ../doas.patch + patch -p1 -i ../gettext-tiny.patch + mv test/libredbdiff.d/statedir/pacman.arch{linux,} + mv test/libredbdiff.d/statedir/pacman.{para,hyper}bola + mv test/libredbdiff.d/statedir/pacman.hyperbola/sync/{libre,core}.db + mv src/abslibre-tools/diff-{un,non}free + sed -i '\|extra/devtools| s|devtools|libretools|' src/chroot-tools/arch-nspawn.in + sed -i '\|CHROOT_VERSION|,+2 c echo "$CHROOT_VERSION" > "$working_dir/.arch-chroot"' src/chroot-tools/mkarchroot.in + sed -i 's|/usr/bin/false|/bin/false|' test/librefetch-test.sh + sed -i 's|/usr/bin/sed|/bin/sed|' src/librefetch/librefetchdir/{libmakepkg/source.sh.gen,makepkg.gen} +} + +build() { + cd "$srcdir/$pkgbase-$pkgver" + make +} + +check() { + cd "$srcdir/$pkgbase-$pkgver" + + DOAS_USER= make check TESTENVFLAGS='--no-network --no-doas' +} + +package_librelib() { + pkgdesc="The shell library portion of libretools (adapted for Hyperbola)" + license=(GPL-2) + optdepends=( + 'libretools: for libreblacklist/blacklist.sh' + 'wget: for libreblacklist/blacklist.sh' + ) + + cd "$srcdir/$pkgbase-$pkgver" + make install-librelib DESTDIR="$pkgdir" + install -Dm644 COPYING-GPLv2 "$pkgdir/usr/share/licenses/$pkgname/COPYING-GPLv2" +} + +package_gitget() { + pkgdesc="A simple to use downloader for git URLs (adapted for Hyperbola)" + license=(GPL-2) + depends=("librelib=$pkgver" git) + + provides=("libregit=$pkgver") + conflicts=("libregit") + replaces=("libregit") + + cd "$srcdir/$pkgbase-$pkgver" + make install-gitget DESTDIR="$pkgdir" + install -Dm644 COPYING-GPLv2 "$pkgdir/usr/share/licenses/$pkgname/COPYING-GPLv2" +} + +package_xbs() { + pkgdesc='A tool for working with arbitrary ABS-like build systems (adapted for Hyperbola)' + backup=(etc/xbs/xbs.conf + etc/xbs/xbs-abs.conf) + license=(GPL-2) + depends=( + "gitget=$pkgver" # `helper-abslibre` + "librelib=$pkgver" + subversion # `helper-abs` + ) + + cd "$srcdir/$pkgbase-$pkgver" + make install-xbs DESTDIR="$pkgdir" + install -Dm644 COPYING-GPLv2 "$pkgdir/usr/share/licenses/$pkgname/COPYING-GPLv2" +} + +package_libretools() { + backup=(etc/libretools.conf + etc/libretools.d/chroot.conf + etc/libretools.d/libredbdiff.conf + etc/libretools.d/librefetch.conf) + install=libretools.install + conflicts=(devtools libretools-mips64el) + replaces=(libretools-mips64el) + + depends=( + "librelib=$pkgver" + "xbs=$pkgver" # `createworkdir`, `librestage` + 'pacman>=5.0.1' 'pacman<5.1' + arch-install-scripts # `mkarchroot` uses `pacstrap` + expac # `libredbdiff` + make # `librefetch` + openssh # `librerelease` + rsync # `librerelease` and `makechrootpkg.sh` + chroot-nspawn # systemd-nspawn wrapper for chroot + tokyocabinet # `toru` + #namcap # Namcap is currently disabled in libremakepkg :-( + #subversion # `diff-nonfree` # ignore because of xbs + wget # `aur`, optdepend for librelib:`blacklist` + opendoas # portable version of doas to run some commands as root + binutils + ) + + cd "$srcdir/$pkgbase-$pkgver" + make install-libretools DESTDIR="$pkgdir" + for i in COPYING{,-GPLv2,-GPLv3}; do + install -Dm644 $i "$pkgdir/usr/share/licenses/$pkgname/$i" + done +} diff --git a/libretools/doas.patch b/libretools/doas.patch new file mode 100644 index 0000000..f95603b --- /dev/null +++ b/libretools/doas.patch @@ -0,0 +1,853 @@ +diff --git a/HACKING/testing.md b/HACKING/testing.md +index 8dee4853..3946f0ef 100644 +--- a/HACKING/testing.md ++++ b/HACKING/testing.md +@@ -5,7 +5,7 @@ Please write unit tests for new things. Tests can be run with `make + check`, which just runs `./testenv roundup` in the `test/` directory. + Relatedly, you need the `roundup` (the `sh-roundup` package on + Parabola) tool to run the tests. `./testenv` can be given +-`--no-network` and/or `--no-sudo` to dissable tests that require those ++`--no-network` and/or `--no-doas` to dissable tests that require those + things. Make can be made to pass those things in by setting + `TESTENVFLAGS`. If you don't dissable either, I *strongly* recommend + setting TMPDIR to somewhere on a btrfs partition before running the +diff --git a/src/abslibre-tools/libredbdiff b/src/abslibre-tools/libredbdiff +index a01c32fb..22d27a77 100755 +--- a/src/abslibre-tools/libredbdiff ++++ b/src/abslibre-tools/libredbdiff +@@ -3,6 +3,8 @@ + # + # Copyright (C) 2014 Esteban Carnevale + # Copyright (C) 2014, 2017 Luke Shumaker ++# Copyright (C) 2020 AndrĂ© Silva ++# Copyright (C) 2020 Márcio Silva + # + # License: GNU GPLv3+ + # +@@ -131,7 +133,7 @@ print_cmp() { + } + + usage() { +- print "Usage: sudo %q" "$cmd" ++ print "Usage: doas %q" "$cmd" + print " or: %q -n [REPO]" "$cmd" + print " or: %q -h" "$cmd" + print 'Show packages that need to be updated from Arch repositories.' +diff --git a/src/chroot-tools/hooks-check.sh b/src/chroot-tools/hooks-check.sh +index 2bf3fff4..de18c452 100644 +--- a/src/chroot-tools/hooks-check.sh ++++ b/src/chroot-tools/hooks-check.sh +@@ -1,5 +1,7 @@ + #!/hint/bash -euE -o pipefail + # Copyright (C) 2013, 2017 Luke Shumaker ++# Copyright (C) 2020 AndrĂ© Silva ++# Copyright (C) 2020 Márcio Silva + # + # License: GNU GPLv2+ + # +@@ -19,13 +21,21 @@ + hook_check_pkgbuild+=("check_pkgbuild_nonfree") + check_pkgbuild_nonfree() { + local s=0 +- sudo -EH -u "$LIBREUSER" pkgbuild-check-nonfree -f || s=$? ++ if [ $(doas grep -qs 'permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER /etc/doas.conf; echo $?) != 0 ]; then ++ echo 'permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER >> "$copydir/etc/doas.conf" ++ fi ++ doas -u "$LIBREUSER" bash -c "DOAS_USER="$DOAS_USER" pkgbuild-check-nonfree -f || s=$?" ++ sed -i '\|permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER'|d' "$copydir/etc/doas.conf" + pkgbuild-summarize-nonfree $s + } + + #hook_check_pkgbuild+=("check_pkgbuild_namcap") + check_pkgbuild_namcap() { +- sudo -EH -u "$LIBREUSER" namcap PKGBUILD ++ if [ $(doas grep -qs 'permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER /etc/doas.conf; echo $?) != 0 ]; then ++ echo 'permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER >> "$copydir/etc/doas.conf" ++ fi ++ doas -u "$LIBREUSER" bash -c "DOAS_USER="$DOAS_USER" namcap PKGBUILD" ++ sed -i '\|permit nopass keepenv setenv { HOME='$LIBREHOME' } '$LIBREUSER'|d' "$copydir/etc/doas.conf" + } + + #hook_check_pkg+=("check_pkg") +diff --git a/src/chroot-tools/librechroot b/src/chroot-tools/librechroot +index 7b1c8c2c..f9bbc463 100755 +--- a/src/chroot-tools/librechroot ++++ b/src/chroot-tools/librechroot +@@ -206,7 +206,7 @@ usage() { + echo + prose 'Each named chroot has a master clean copy (named `root`), and any + number of other named copies; the copy used by default is the +- current username (or $SUDO_USER, or `copy` if root).' ++ current username (or $DOAS_USER, or `copy` if root).' + echo + prose 'The full path to the chroot copy is "$CHROOTDIR/$CHROOT/$COPY", + unless the copy name is manually specified as an absolute path, +diff --git a/src/chroot-tools/libremakepkg b/src/chroot-tools/libremakepkg +index d4e5b8a0..b6e7ff92 100755 +--- a/src/chroot-tools/libremakepkg ++++ b/src/chroot-tools/libremakepkg +@@ -6,6 +6,8 @@ set -euE + # Copyright (C) 2010-2012 Joshua Ismael Haase Hernández (xihh) + # Copyright (C) 2012 MichaĹ‚ MasĹ‚owski + # Copyright (C) 2012-2015, 2017 Luke Shumaker ++# Copyright (C) 2020 AndrĂ© Silva ++# Copyright (C) 2020 Márcio Silva + # + # License: GNU GPLv2+ + # +@@ -144,8 +146,8 @@ usage() { + bullet 'set `MAKEFLAGS` and `PACKAGER` in `/etc/makepkg.conf` to reflect + the value outside of the chroot.' + bullet 'create a `builduser` with the same numeric UID as the +- invoking $SUDO_USER.' +- bullet 'lets this `builduser` call `sudo pacman` without a password.' ++ invoking $DOAS_USER.' ++ bullet 'lets this `builduser` call `doas pacman` without a password.' + bullet 'adds a pacman repositoriy of locally built packages' + echo + prose 'This command is configured both with `chroot.conf` (either in +diff --git a/src/chroot-tools/makechrootpkg.in b/src/chroot-tools/makechrootpkg.in +index f97b329b..370d672f 100644 +--- a/src/chroot-tools/makechrootpkg.in ++++ b/src/chroot-tools/makechrootpkg.in +@@ -33,9 +33,9 @@ init_variables() { + bindmounts_rw=() + + copy=$USER +- [[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER ++ [[ -n ${DOAS_USER:-} ]] && copy=$DOAS_USER + [[ -z "$copy" || $copy = root ]] && copy=copy +- src_owner=${SUDO_USER:-$USER} ++ src_owner=${DOAS_USER:-$USER} + } + + usage() { +@@ -191,7 +191,7 @@ prepare_chroot() { + $repack || rm -rf "$copydir/build" + + local builduser_uid builduser_gid +- builduser_uid="${SUDO_UID:-$UID}" ++ builduser_uid="$(id -u ${DOAS_USER:-$USER})" + builduser_gid="$(id -g "$builduser_uid")" + local install="install -o $builduser_uid -g $builduser_gid" + local x +@@ -222,10 +222,12 @@ prepare_chroot() { + echo "$x" >>"$copydir/etc/makepkg.conf" + done + +- cat > "$copydir/etc/sudoers.d/builduser-pacman" < "$copydir/etc/doas.conf" <> "$copydir/etc/doas.conf" ++ fi ++ doas -u builduser bash -c 'cd $HOME; cd /startdir; DOAS_USER='$DOAS_USER' makepkg "$@" --nobuild' -bash "$@" ++ sed -i '\|permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl" _="/bin/bash" } builduser|d' "$copydir/etc/doas.conf" + } + + _chrootbuild() { + # shellcheck source=/dev/null + . /etc/profile +- # Beware, there are some stupid arbitrary rules on how you can +- # use "$" in arguments to commands with "sudo -i". ${foo} or +- # ${1} is OK, but $foo or $1 isn't. +- # https://bugzilla.sudo.ws/show_bug.cgi?id=765 +- sudo -iu builduser bash -c 'cd /startdir; makepkg "${@:2}" --allsource' -bash ".src.tar.gz" "$@" || return +- sudo -iu builduser bash -c 'cd /startdir; makepkg "$@" --noextract --noprepare' -bash "$@" ++ if [ $(doas grep -qs 'permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser' /etc/doas.conf; echo $?) != 0 ]; then ++ echo 'permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser' >> "$copydir/etc/doas.conf" ++ fi ++ doas -u builduser bash -c 'cd $HOME; cd /startdir; DOAS_USER='$DOAS_USER' makepkg "${@:2}" --allsource' -bash ".src.tar.gz" "$@" || return ++ sed -i '\|permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin:" _="/bin/bash" } builduser|d' "$copydir/etc/doas.conf" ++ if [ $(doas grep -qs 'permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser' /etc/doas.conf; echo $?) != 0 ]; then ++ echo 'permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser' >> "$copydir/etc/doas.conf" ++ fi ++ doas -u builduser bash -c 'cd $HOME; cd /startdir; DOAS_USER='$DOAS_USER' makepkg "$@" --noextract --noprepare' -bash "$@" ++ sed -i '\|permit nopass setenv { HOME="/build" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin" _="/bin/bash" } builduser|d' "$copydir/etc/doas.conf" + } + + _chrootnamcap() { + pacman -S --needed --noconfirm namcap + for pkgfile in /startdir/PKGBUILD /pkgdest/*; do + echo "Checking ${pkgfile##*/}" +- sudo -u builduser namcap "$pkgfile" 2>&1 | tee "/logdest/${pkgfile##*/}-namcap.log" ++ doas -u builduser namcap "$pkgfile" 2>&1 | tee "/logdest/${pkgfile##*/}-namcap.log" + done + } + +@@ -306,7 +312,7 @@ download_sources() { + + # Ensure sources are downloaded + if [[ "$(id -u "$makepkg_user")" != 0 ]]; then +- sudo -u "$makepkg_user" env SRCDEST="$SRCDEST" BUILDDIR="$builddir" \ ++ doas -u "$makepkg_user" env SRCDEST="$SRCDEST" BUILDDIR="$builddir" \ + makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o || + die "Could not download sources." + else +@@ -372,7 +378,7 @@ main() { + + [[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.' + [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' +- makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} ++ makepkg_user=${makepkg_user:-${DOAS_USER:-$USER}} + + check_root + +@@ -400,8 +406,8 @@ main() { + esac + done + +- if [[ -n $SUDO_USER ]]; then +- eval "USER_HOME=~$SUDO_USER" ++ if [[ -n $DOAS_USER ]]; then ++ eval "USER_HOME=~$DOAS_USER" + else + USER_HOME=$HOME + fi +diff --git a/src/dagpkg b/src/dagpkg +index d6f7ccaa..38c6844d 100755 +--- a/src/dagpkg ++++ b/src/dagpkg +@@ -1,11 +1,13 @@ + #!/usr/bin/env bash +-# ++# + # dagpkg - create a directed graph of package dependencies and build + # them in topological order + + # Copyright (C) 2014 Nicolás Reynolds + # Copyright (C) 2014 MichaĹ‚ MasĹ‚owski + # Copyright (C) 2017 Luke Shumaker ++# Copyright (C) 2020 AndrĂ© Silva ++# Copyright (C) 2020 Márcio Silva + # + # License: GNU GPLv3+ + # +@@ -196,7 +198,11 @@ main() { + # upgrade the system + # this would probably have to go on HOOKPREBUILD if you're working + # outside chroots +- sudo -E pacman -Syu --noconfirm ++ if [ $(doas grep -qs 'permit nopass keepenv '$LIBREUSER /etc/doas.conf; echo $?) != 0 ]; then ++ echo 'permit nopass keepenv '$LIBREUSER >> "$copydir/etc/doas.conf" ++ fi ++ doas pacman -Syu --noconfirm ++ sed -i '\|permit nopass keepenv '$LIBREUSER'|d' "$copydir/etc/doas.conf" + + # run the pre build command from libretools.conf + if [[ -n "$HOOKPREBUILD" ]]; then +diff --git a/src/lib/archroot.sh.in b/src/lib/archroot.sh.in +index 98fd2cfb..e449499d 100644 +--- a/src/lib/archroot.sh.in ++++ b/src/lib/archroot.sh.in +@@ -11,8 +11,8 @@ CHROOT_VERSION='v4' + orig_argv=("$0" "$@") + check_root() { + (( EUID == 0 )) && return +- if type -P sudo >/dev/null; then +- exec sudo -- "${orig_argv[@]}" ++ if type -P doas >/dev/null; then ++ exec doas -- "${orig_argv[@]}" + else + exec su root -c "$(printf ' %q' "${orig_argv[@]}")" + fi +diff --git a/src/lib/conf.sh.3.ronn b/src/lib/conf.sh.3.ronn +index 949ce3e9..93bf3d08 100644 +--- a/src/lib/conf.sh.3.ronn ++++ b/src/lib/conf.sh.3.ronn +@@ -12,15 +12,15 @@ files related to Arch/Hyperbola(7) and libretools(7). + + ### VARIABLES + +-When loading configuration files in a program run with `sudo`(8), it ++When loading configuration files in a program run with `doas`(1), it + is often desirable to load the configuration files from the home +-directory of the user who called `sudo`, instead of from /root. ++directory of the user who called `doas`, instead of from /root. + + To accommodate this, instead of using the usual $ and $, + `conf.sh` sets $ and $, which it then uses. + + * : +- If $ is set, then $ is set to ++ If $ is set, then $ is set to + that. Otherwise, $ is set to the value of $. + * : + If $ == $, then $ is set to the value +diff --git a/src/lib/conf.sh.in b/src/lib/conf.sh.in +index 942484ef..e28febf6 100644 +--- a/src/lib/conf.sh.in ++++ b/src/lib/conf.sh.in +@@ -19,8 +19,7 @@ + # along with this program. If not, see . + + SNAPSHOT=2020-05-08 +- +-LIBREUSER="${SUDO_USER:-$USER}" ++LIBREUSER="${DOAS_USER:-$USER}" + if [[ $LIBREUSER == "$USER" ]]; then + LIBREHOME=$HOME + else +diff --git a/src/librefetch/librefetch.conf.5.ronn b/src/librefetch/librefetch.conf.5.ronn +index 29df4d2d..9325b0bc 100644 +--- a/src/librefetch/librefetch.conf.5.ronn ++++ b/src/librefetch/librefetch.conf.5.ronn +@@ -19,7 +19,7 @@ to override. + + If `$XDG_CONFIG_HOME` is not set, a default value is set: + +- * if `$SUDO_USER` is set: `$(eval echo ~$SUDO_USER)/.config` ++ * if `$DOAS_USER` is set: `$(eval echo ~$DOAS_USER)/.config` + * else: `$HOME/.config` + + ## OPTIONS +diff --git a/src/libretools.conf b/src/libretools.conf +index 7ecad428..ab7e3c95 100644 +--- a/src/libretools.conf ++++ b/src/libretools.conf +@@ -35,7 +35,7 @@ REPODEST=staging@dusseldorf.hyperbola.info:$LIBREUSER + + ## These are run before and after uploading packages + HOOKPRERELEASE="ssh -p 51011 -fN ${REPODEST%%:*}" +-HOOKPOSTRELEASE="sudo librechroot clean-repo" # && sudo librechroot -n i686 clean-repo" ++HOOKPOSTRELEASE="doas librechroot clean-repo" # && doas librechroot -n i686 clean-repo" + + ################################################################################ + # dagpkg # +@@ -48,9 +48,9 @@ HOOKPREBUILD="" + + ## Uncomment one of those or make one of your choice + # Normal +-FULLBUILDCMD="sudo libremakepkg" ++FULLBUILDCMD="doas libremakepkg" + # Cross compiling +-#FULLBUILDCMD="sudo libremakepkg -n cross-compile-chroot" ++#FULLBUILDCMD="doas libremakepkg -n cross-compile-chroot" + # Don't use a chroot + #FULLBUILDCMD="makepkg -sL --noconfirm" + +diff --git a/src/workflows.md b/src/workflows.md +index 03dca4f6..c7c85052 100644 +--- a/src/workflows.md ++++ b/src/workflows.md +@@ -22,7 +22,7 @@ This is how the chroot is configured: + * Create the same user (with same uid) on the chroot that the one I use + regularly. + +-* Give it password-less sudo on the chroot. ++* Give it password-less doas on the chroot. + + * Bind mount `/home` to `/chroot/home`, where I have the abslibre-mips64el + clone. +diff --git a/src/xbs-abs/helper-abs b/src/xbs-abs/helper-abs +index e8f41de9..0d2e6cdc 100755 +--- a/src/xbs-abs/helper-abs ++++ b/src/xbs-abs/helper-abs +@@ -1,6 +1,8 @@ + #!/usr/bin/env bash + + # Copyright (C) 2013-2014, 2017 Luke Shumaker ++# Copyright (C) 2020 AndrĂ© Silva ++# Copyright (C) 2020 Márcio Silva + # + # For code from db-functions (arch_svn): + # Copyright (C) 2012 Pierre Schmitz +@@ -43,7 +45,7 @@ arch_svn() { + if [[ -z "${SVNUSER}" ]]; then + /usr/bin/svn "${@}" + else +- sudo -u "${SVNUSER}" -- /usr/bin/svn --username "${USER}" "${@}" ++ doas -u "${SVNUSER}" -- /usr/bin/svn --username "${USER}" "${@}" + fi + } + +diff --git a/test/lib-conf-test.sh b/test/lib-conf-test.sh +index d79c5f2a..1cf5d6f1 100644 +--- a/test/lib-conf-test.sh ++++ b/test/lib-conf-test.sh +@@ -13,13 +13,13 @@ it_sets_makepkg_vars_in_custom_file() { + } + + it_figures_out_HOME_when_root() { +- require sudo || return 0 ++ require doas || return 0 + # This one is tricky, because it does the job too well, it will find + # the actual HOME, instead of the test environment HOME. Therefore, we + # will just check that [[ $HOME != /root ]] + cd "$tmpdir" + echo '. $(librelib conf.sh); echo "$LIBREHOME"' > test.sh +- LIBREHOME=$(testsudo bash ./test.sh) ++ LIBREHOME=$(testdoas bash ./test.sh) + [[ $LIBREHOME != /root ]] + } + +diff --git a/test/librechroot-test.sh b/test/librechroot-test.sh +index 2aad0c60..172b9462 100644 +--- a/test/librechroot-test.sh ++++ b/test/librechroot-test.sh +@@ -6,56 +6,56 @@ describe librechroot + setup_chrootdir + + it_creates_repo_for_new_chroots() { +- require network sudo || return 0 ++ require network doas || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo librechroot -l "$roundup_test_name" run test -r /repo/repo.db ++ testdoas librechroot -l "$roundup_test_name" run test -r /repo/repo.db + } + + it_cleans_the_local_repo_correctly() { +- require network sudo || return 0 ++ require network doas || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo librechroot -l "$roundup_test_name" make +- testsudo librechroot -l "$roundup_test_name" clean-repo +- testsudo librechroot -l "$roundup_test_name" run test -r /repo/repo.db ++ testdoas librechroot -l "$roundup_test_name" make ++ testdoas librechroot -l "$roundup_test_name" clean-repo ++ testdoas librechroot -l "$roundup_test_name" run test -r /repo/repo.db + # TODO: inspect /repo/* more + } + + it_respects_exit_status_if_out_isnt_a_tty() ( +- require network sudo || return 0 ++ require network doas || return 0 + set -o pipefail + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty + r=0 +- { testsudo librechroot -l "$roundup_test_name" run bash -c 'exit 3' | cat; } || r=$? ++ { testdoas librechroot -l "$roundup_test_name" run bash -c 'exit 3' | cat; } || r=$? + + [[ $r == 3 ]] + ) + + it_creates_ca_certificates() { +- require network sudo || return 0 ++ require network doas || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo librechroot -l "$roundup_test_name" run test -r /etc/ssl/certs/ca-certificates.crt ++ testdoas librechroot -l "$roundup_test_name" run test -r /etc/ssl/certs/ca-certificates.crt + } + + it_disables_networking_when_requested() { +- require network sudo || return 0 ++ require network doas || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty + +- testsudo librechroot -l "$roundup_test_name" run curl https://repo.hyperbola.info:50011/ >/dev/null +- not testsudo librechroot -l "$roundup_test_name" -N run curl https://repo.hyperbola.info:50011/ >/dev/null ++ testdoas librechroot -l "$roundup_test_name" run curl https://repo.hyperbola.info:50011/ >/dev/null ++ not testdoas librechroot -l "$roundup_test_name" -N run curl https://repo.hyperbola.info:50011/ >/dev/null + } + + it_handles_CHROOTEXTRAPKG_correctly() { +- requuire network sudo || return 0 ++ requuire network doas || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty + +- not testsudo librechroot -l "$roundup_test_name" run lsof ++ not testdoas librechroot -l "$roundup_test_name" run lsof + echo "CHROOTEXTRAPKG=(lsof)" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf +- testsudo librechroot -l "$roundup_test_name" install-name lsof +- testsudo librechroot -l "$roundup_test_name" clean-pkgs +- testsudo librechroot -l "$roundup_test_name" run lsof ++ testdoas librechroot -l "$roundup_test_name" install-name lsof ++ testdoas librechroot -l "$roundup_test_name" clean-pkgs ++ testdoas librechroot -l "$roundup_test_name" run lsof + echo "CHROOTEXTRAPKG=()" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf +- testsudo librechroot -l "$roundup_test_name" clean-pkgs +- not testsudo librechroot -l "$roundup_test_name" run lsof ++ testdoas librechroot -l "$roundup_test_name" clean-pkgs ++ not testdoas librechroot -l "$roundup_test_name" run lsof + } + + it_displays_help_as_normal_user() { +@@ -82,20 +82,20 @@ it_displays_help_and_fails_with_0_args() { + [[ "$(sed -n 2p $tmpdir/stderr)" =~ Usage:.* ]] + } + +-# requires sudo so we know it's not failing because it needs root ++# requires doas so we know it's not failing because it needs root + it_fails_for_unknown_commands() { +- require sudo || return 0 +- testsudo librechroot phony >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? ++ require doas || return 0 ++ testdoas librechroot phony >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr + } + +-# requires sudo so we know it's not failing because it needs root ++# requires doas so we know it's not failing because it needs root + it_fails_for_unknown_flags() { +- require sudo || return 0 +- testsudo librechroot -q >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? ++ require doas || return 0 ++ testdoas librechroot -q >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + empty $tmpdir/stdout +@@ -103,8 +103,8 @@ it_fails_for_unknown_flags() { + } + + it_fails_when_syncing_a_copy_with_itself() { +- require sudo || return 0 +- testsudo timeout 5 librechroot -l root sync || stat=$? ++ require doas || return 0 ++ testdoas timeout 5 librechroot -l root sync || stat=$? + case $stat in + 0|124|137) # success|timeout+TERM|timeout+KILL + false;; +@@ -114,23 +114,23 @@ it_fails_when_syncing_a_copy_with_itself() { + } + + it_deletes_copies() { +- require network sudo || return 0 ++ require network doas || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo librechroot -l "$roundup_test_name" make ++ testdoas librechroot -l "$roundup_test_name" make + test -d "$chrootdir/default/$roundup_test_name" +- testsudo librechroot -l "$roundup_test_name" delete ++ testdoas librechroot -l "$roundup_test_name" delete + not test -e "$chrootdir/default/$roundup_test_name" + } + + it_deletes_subvolumes_recursively() { +- require network sudo btrfs || return 0 ++ require network doas btrfs || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo librechroot -l "$roundup_test_name" make +- testsudo librechroot -l "$roundup_test_name" run pacman -S --noconfirm btrfs-progs ++ testdoas librechroot -l "$roundup_test_name" make ++ testdoas librechroot -l "$roundup_test_name" run pacman -S --noconfirm btrfs-progs + test -d "$chrootdir/default/$roundup_test_name" + not test -e "$chrootdir/default/$roundup_test_name/var/subvolume" +- testsudo librechroot -l "$roundup_test_name" run btrfs subvolume create /var/subvolume ++ testdoas librechroot -l "$roundup_test_name" run btrfs subvolume create /var/subvolume + test -d "$chrootdir/default/$roundup_test_name/var/subvolume" +- testsudo librechroot -l "$roundup_test_name" delete ++ testdoas librechroot -l "$roundup_test_name" delete + not test -e "$chrootdir/default/$roundup_test_name" + } +diff --git a/test/libremakepkg-test.sh b/test/libremakepkg-test.sh +index 3609cb63..b0f0d977 100644 +--- a/test/libremakepkg-test.sh ++++ b/test/libremakepkg-test.sh +@@ -6,52 +6,52 @@ describe libremakepkg + setup_chrootdir + + it_builds_a_trivial_package() { +- require network sudo || return 0 ++ require network doas || return 0 + cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD" + cd "$tmpdir" + + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo libremakepkg -l "$roundup_test_name" ++ testdoas libremakepkg -l "$roundup_test_name" + + [[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]] + } + + it_enables_networking_during_prepare() { +- require network sudo || return 0 ++ require network doas || return 0 + cp libremakepkg.d/PKGBUILD-netprepare "$tmpdir/PKGBUILD" + cd "$tmpdir" + + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo libremakepkg -l "$roundup_test_name" ++ testdoas libremakepkg -l "$roundup_test_name" + [[ -f $(echo libretools-netprepare-1.0-1-any.pkg.tar.?z) ]] + } + + it_disables_networking_during_build() { +- require network sudo || return 0 ++ require network doas || return 0 + cp libremakepkg.d/PKGBUILD-netbuild "$tmpdir/PKGBUILD" + cd "$tmpdir" + + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- not testsudo libremakepkg -l "$roundup_test_name" ++ not testdoas libremakepkg -l "$roundup_test_name" + not [[ -f $(echo libretools-netbuild-1.0-1-any.pkg.tar.?z) ]] +- testsudo libremakepkg -l "$roundup_test_name" -N ++ testdoas libremakepkg -l "$roundup_test_name" -N + [[ -f $(echo libretools-netbuild-1.0-1-any.pkg.tar.?z) ]] + } + + it_disables_networking_during_package() { +- require network sudo || return 0 ++ require network doas || return 0 + cp libremakepkg.d/PKGBUILD-netpackage "$tmpdir/PKGBUILD" + cd "$tmpdir" + + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- not testsudo libremakepkg -l "$roundup_test_name" ++ not testdoas libremakepkg -l "$roundup_test_name" + not [[ -f $(echo libretools-netpackage-1.0-1-any.pkg.tar.?z) ]] +- testsudo libremakepkg -l "$roundup_test_name" -N ++ testdoas libremakepkg -l "$roundup_test_name" -N + [[ -f $(echo libretools-netpackage-1.0-1-any.pkg.tar.?z) ]] + } + + it_cleans_the_chroot_before_building() { +- require network sudo || return 0 ++ require network doas || return 0 + # 1. First, we build testpkg1 + # 2. Then, we build testpkg2, which depends on testpkg1 + # Therefore, testpkg1 will be installed after testpkg2 is built, we +@@ -70,28 +70,28 @@ it_cleans_the_chroot_before_building() { + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty + + cd "$tmpdir/1" +- testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } ++ testdoas libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } + + cd "$tmpdir/2" +- testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } +- testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'first time, pass' ++ testdoas libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } ++ testdoas librechroot -l "$roundup_test_name" run libretools-testpkg1 'first time, pass' + + # This next line is actually a separate test, but it fits in well with this test, and chroot tests are slow.. + # it_doesnt_cache_local_packages() { +- not testsudo librechroot -l "$roundup_test_name" run test -e /var/cache/pacman/pkg/libretools-testpkg1-1.0-1-any.pkg.tar.?z ++ not testdoas librechroot -l "$roundup_test_name" run test -e /var/cache/pacman/pkg/libretools-testpkg1-1.0-1-any.pkg.tar.?z + + cd "$tmpdir/3" +- testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } +- not testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'second time, fail' ++ testdoas libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } ++ not testdoas librechroot -l "$roundup_test_name" run libretools-testpkg1 'second time, fail' + } + + it_handles_PKGDEST_not_existing() { +- require network sudo || return 0 ++ require network doas || return 0 + cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD" + cd "$tmpdir" + + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo env PKGDEST="$tmpdir/dest/pkgdest" libremakepkg -l "$roundup_test_name" ++ testdoas env PKGDEST="$tmpdir/dest/pkgdest" libremakepkg -l "$roundup_test_name" + + [[ -f $(echo dest/pkgdest/libretools-hello-1.0-1-any.pkg.tar.?z) ]] + } +@@ -118,7 +118,7 @@ it_otherwise_fails_as_normal_user() { + } + + it_fails_if_a_hook_fails() { +- require network sudo || return 0 ++ require network doas || return 0 + cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD" + cd "$tmpdir" + local stat=0 +@@ -127,30 +127,30 @@ it_fails_if_a_hook_fails() { + trap 'sed -i s/-bogus// "$XDG_CONFIG_HOME"/libretools/libretools.conf' RETURN + + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo libremakepkg -l "$roundup_test_name" >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? ++ testdoas libremakepkg -l "$roundup_test_name" >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + tail -n1 $tmpdir/stderr | grep -qF '==> ERROR: Failure(s) in check_pkgbuild: check_pkgbuild_nonfree' + } + + it_detects_distcc_files() { +- require network sudo || return 0 ++ require network doas || return 0 + cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD" + cd "$tmpdir" + + echo "CHROOTEXTRAPKG+=(distcc-nozeroconf socat)" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf + trap 'sed -i /CHROOTEXTRAPKGs+=/d "$XDG_CONFIG_HOME"/libretools/chroot.conf' RETURN + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty +- testsudo librechroot -l "$roundup_test_name" run pacman -S --noconfirm distcc-nozeroconf socat ++ testdoas librechroot -l "$roundup_test_name" run pacman -S --noconfirm distcc-nozeroconf socat + + # first make sure that the engine works +- testsudo libremakepkg -l "$roundup_test_name" ++ testdoas libremakepkg -l "$roundup_test_name" + [[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]] + rm -f -- libretools-hello-1.0-1-any.pkg.tar.?z + # now throw a wrench in it +- testsudo librechroot -l "$roundup_test_name" run touch /bin/distcc-tool ++ testdoas librechroot -l "$roundup_test_name" run touch /bin/distcc-tool + # and make sure that the engine broke +- testsudo libremakepkg -l "$roundup_test_name" || stat=$? ++ testdoas libremakepkg -l "$roundup_test_name" || stat=$? + [[ $stat != 0 ]] + not [[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]] + } +diff --git a/test/librestage-test.sh b/test/librestage-test.sh +index 75450aec..7169df0d 100644 +--- a/test/librestage-test.sh ++++ b/test/librestage-test.sh +@@ -45,7 +45,7 @@ it_fails_with_invalid_args() { + } + + it_guesses_the_repo() { +- nochroot=false; require network sudo || nochroot=true ++ nochroot=false; require network doas || nochroot=true + mkdir -p -- "$tmpdir/reponame/libretools-hello" + cp librestage.d/PKGBUILD-hello "$tmpdir/reponame/libretools-hello/PKGBUILD" + cd "$tmpdir/reponame/libretools-hello" +@@ -53,7 +53,7 @@ it_guesses_the_repo() { + if $nochroot; then + makepkg + else +- testsudo libremakepkg -l "$roundup_test_name" ++ testdoas libremakepkg -l "$roundup_test_name" + fi + librestage + +@@ -63,7 +63,7 @@ it_guesses_the_repo() { + } + + it_stages_packages_without_PKGDEST() { +- nochroot=false; require network sudo || nochroot=true ++ nochroot=false; require network doas || nochroot=true + + echo "PKGDEST=''" >> $XDG_CONFIG_HOME/pacman/makepkg.conf + echo "SRCPKGDEST=''" >> $XDG_CONFIG_HOME/pacman/makepkg.conf +@@ -74,7 +74,7 @@ it_stages_packages_without_PKGDEST() { + if $nochroot; then + makepkg + else +- testsudo libremakepkg -l "$roundup_test_name" ++ testdoas libremakepkg -l "$roundup_test_name" + fi + librestage repo1 + +diff --git a/test/test-common.sh b/test/test-common.sh +index 3f3763cb..e46872fd 100644 +--- a/test/test-common.sh ++++ b/test/test-common.sh +@@ -36,8 +36,8 @@ before() { + after() { + common_after + killall gpg-agent &>/dev/null || true +- if [[ -f "$tmpdir/.used-sudo" ]]; then +- sudo rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" ++ if [[ -f "$tmpdir/.used-doas" ]]; then ++ doas rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" + else + rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" + fi +@@ -62,12 +62,12 @@ setup_chrootdir() { + _cleanup_chrootdir() ( + chrootdir=$1 + shopt -s nullglob +- if [[ $SUDO ]]; then ++ if [[ $DOAS ]]; then + if [[ "$(stat -f -c %T "$chrootdir")" == btrfs ]]; then +- sudo find "$chrootdir" -depth -inum 256 -exec \ ++ doas find "$chrootdir" -depth -inum 256 -exec \ + btrfs subvolume delete {} \; &>/dev/null + fi +- sudo rm -rf -- "$chrootdir" ++ doas rm -rf -- "$chrootdir" + else + rm -rf -- "$chrootdir" + fi +@@ -79,8 +79,8 @@ require() ( + if libremessages in_array "network" "$@" && ! [[ $NETWORK ]]; then + missing+=('networking') + fi +- if libremessages in_array "sudo" "$@" && ! [[ $SUDO ]]; then +- missing+=('sudo') ++ if libremessages in_array "doas" "$@" && ! [[ $DOAS ]]; then ++ missing+=('doas') + fi + if libremessages in_array "btrfs" "$@" && ! [[ "$(stat -f -c %T "$chrootdir" 2>/dev/null || true)" == 'btrfs' ]]; then + missing+=('btrfs') +@@ -89,8 +89,8 @@ require() ( + libremessages warning "Next test requires %s; Skipping (passing)..." "$(echo "${missing[*]}"|sed 's/ /, /g')" &>/dev/tty + return 1 + fi +- if libremessages in_array "sudo" "$@"; then +- touch "$tmpdir/.used-sudo" ++ if libremessages in_array "doas" "$@"; then ++ touch "$tmpdir/.used-doas" + fi + return 0 + ) +diff --git a/test/testenv b/test/testenv +index 7072326b..6c8860a2 100755 +--- a/test/testenv ++++ b/test/testenv +@@ -2,18 +2,18 @@ + + # Parse the arguments + NETWORK=true +-SUDO=true ++DOAS=true + while [[ $# -gt 0 ]]; do + case "$1" in + --no-network) shift; unset NETWORK;; + --network) shift; NETWORK=true;; +- --no-sudo) shift; unset SUDO;; +- --sudo) shift; SUDO=true;; ++ --no-doas) shift; unset DOAS;; ++ --doas) shift; DOAS=true;; + --) shift; break;; + *) break;; + esac + done +-export NETWORK SUDO ++export NETWORK DOAS + + if [[ $# == 0 ]]; then + echo 'You need to run testenv with arguments!' >&2 +@@ -48,22 +48,22 @@ export XDG_CONFIG_HOME="$HOME/.config" + export _librelib_conf_sh_sysconfdir="$destdir/etc" + export _librelib_conf_sh_pkgconfdir="$destdir/etc/libretools.d" + +-# Hack to respect our variables in sudo +-_sudo() { ++# Hack to respect our variables in doas ++_doas() { + local vars=(TMPDIR PATH LIBRETOOLS_LIBDIR XDG_CACHE_HOME XDG_CONFIG_HOME _librelib_conf_sh_sysconfdir) + local args=() + local var + for var in "${vars[@]}"; do + args+=("$var=${!var}") + done +- sudo env "${args[@]}" "$@" ++ doas env "${args[@]}" "$@" + } + printf '%s\n' \ + '#!/bin/bash' \ +- "$(declare -f _sudo)" \ +- '_sudo "$@"' \ +- > "$destdir/usr/bin/testsudo" +-chmod 755 "$destdir/usr/bin/testsudo" ++ "$(declare -f _doas)" \ ++ '_doas "$@"' \ ++ > "$destdir/usr/bin/testdoas" ++chmod 755 "$destdir/usr/bin/testdoas" + + # Run the tests + eval "$@" diff --git a/libretools/gettext-tiny.patch b/libretools/gettext-tiny.patch new file mode 100644 index 0000000..72cb0ac --- /dev/null +++ b/libretools/gettext-tiny.patch @@ -0,0 +1,54 @@ +diff --git a/INSTALL b/INSTALL +index e91f1ea2..f81f5772 100644 +--- a/INSTALL ++++ b/INSTALL +@@ -33,7 +33,7 @@ documentation; ronn is required. + + Additionally, other usual "core utilities" are required: + +- cat, chmod, cp, echo, false, find, install, ln, msguniq, rm, tr, ++ cat, chmod, cp, echo, false, find, install, ln, rm, tr, + xgettext + + Also, `/bin/sh` must support `{brace,expansion}`. If it doesn't, find +diff --git a/Makefile b/Makefile +index e7b35e41..c656a88d 100644 +--- a/Makefile ++++ b/Makefile +@@ -41,7 +41,7 @@ $(outdir)/shellcheck: + + _po_rule = \ + po/%(pkg).pot: $(addsuffix /everything.pot,$(pkg.%(pkg))); \ +- cat $^ | msguniq -Fi --to-code=UTF-8 > '$@' ++ cat $^ + $(eval $(foreach pkg,$(pkgs),\ + $(subst %(pkg),$(pkg),$(value _po_rule))$(at.nl))) + +diff --git a/build-aux/Makefile.once.head/00-libretools.mk b/build-aux/Makefile.once.head/00-libretools.mk +index 1f2957d2..38813112 100644 +--- a/build-aux/Makefile.once.head/00-libretools.mk ++++ b/build-aux/Makefile.once.head/00-libretools.mk +@@ -92,10 +92,6 @@ libretools.edit = sed \ + -e 's|m4_include(lib/\(.*\))|. "$$(librelib \1)"|' \ + $(foreach v,$(patsubst $(var.)%,%,$(filter $(var.)%,$^)), -e 's|@$(v)@|$($(v))|g' ) + +-# Usage OUTPUT +-# Normalize a .po(t) file +-libretools.pofmt = msguniq -Fi --to-code=UTF-8 +- + # Auto-detect ######################################################## + + # It's easy to think of these as "each" variables, but because they +diff --git a/src/lib/librexgettext b/src/lib/librexgettext +index a4f2eb99..8b008764 100755 +--- a/src/lib/librexgettext ++++ b/src/lib/librexgettext +@@ -220,7 +220,7 @@ main() { + xgettext-sh "${simple[@]}" -- "${files[@]}" + xgettext-sh "${prose[@]}" -- "${files[@]}" | whitespace-collapse + xgettext-flag -- "${files[@]}" +- } | sed '/^\#, sh-format/d' | msguniq -Fi --to-code=UTF-8 ++ } | sed '/^\#, sh-format/d' + } + + main "$@" diff --git a/libretools/hyperbola.patch b/libretools/hyperbola.patch new file mode 100644 index 0000000..a4693a8 --- /dev/null +++ b/libretools/hyperbola.patch @@ -0,0 +1,1118 @@ +diff --git a/.srcfiles.mk b/.srcfiles.mk +index 70a37544..039bcb59 100644 +--- a/.srcfiles.mk ++++ b/.srcfiles.mk +@@ -58,7 +58,7 @@ _gitfiles.all+=src/abslibre-tools/GNUmakefile + _gitfiles.all+=src/abslibre-tools/Makefile + _gitfiles.all+=src/abslibre-tools/createworkdir + _gitfiles.all+=src/abslibre-tools/createworkdir.md +-_gitfiles.all+=src/abslibre-tools/diff-unfree ++_gitfiles.all+=src/abslibre-tools/diff-nonfree + _gitfiles.all+=src/abslibre-tools/libreaddiff + _gitfiles.all+=src/abslibre-tools/libredbdiff + _gitfiles.all+=src/abslibre-tools/libredbdiff.conf +@@ -155,12 +155,12 @@ _gitfiles.all+=test/librechroot-test.sh + _gitfiles.all+=test/libredbdiff-test.sh + _gitfiles.all+=test/libredbdiff.d/expected-explicit.txt + _gitfiles.all+=test/libredbdiff.d/expected-implicit.txt +-_gitfiles.all+=test/libredbdiff.d/statedir/pacman.archlinux/local/ALPM_DB_VERSION +-_gitfiles.all+=test/libredbdiff.d/statedir/pacman.archlinux/sync/core.db +-_gitfiles.all+=test/libredbdiff.d/statedir/pacman.conf.archlinux +-_gitfiles.all+=test/libredbdiff.d/statedir/pacman.conf.parabola +-_gitfiles.all+=test/libredbdiff.d/statedir/pacman.parabola/local/ALPM_DB_VERSION +-_gitfiles.all+=test/libredbdiff.d/statedir/pacman.parabola/sync/libre.db ++_gitfiles.all+=test/libredbdiff.d/statedir/pacman.arch/local/ALPM_DB_VERSION ++_gitfiles.all+=test/libredbdiff.d/statedir/pacman.arch/sync/core.db ++_gitfiles.all+=test/libredbdiff.d/statedir/pacman.conf.arch ++_gitfiles.all+=test/libredbdiff.d/statedir/pacman.conf.hyperbola ++_gitfiles.all+=test/libredbdiff.d/statedir/pacman.hyperbola/local/ALPM_DB_VERSION ++_gitfiles.all+=test/libredbdiff.d/statedir/pacman.hyperbola/sync/core.db + _gitfiles.all+=test/librefetch-test.sh + _gitfiles.all+=test/librefetch.d/PKGBUILD-mksource + _gitfiles.all+=test/librefetch.d/PKGBUILD-recurse +diff --git a/config.mk b/config.mk +index 0d564e0c..a3143471 100644 +--- a/config.mk ++++ b/config.mk +@@ -30,7 +30,7 @@ docdir = $(datarootdir)/doc + mandir = $(datarootdir)/man + + devtoolsdir = $(call abspath,$(topsrcdir)/../devtools-par) +-RONNFLAGS = --manual='libretools Manual' --organization='Parabola' ++RONNFLAGS = --manual='libretools Manual' --organization='Hyperbola Project' + + TESTENVFLAGS ?= + +diff --git a/src/abslibre-tools/diff-unfree b/src/abslibre-tools/diff-unfree +index 2d543798..579de1f5 100755 +--- a/src/abslibre-tools/diff-unfree ++++ b/src/abslibre-tools/diff-unfree +@@ -1,5 +1,5 @@ + #!/usr/bin/env bash +-# This script will help you diff a *-libre PKGBUILD against the unfree one ++# This script will help you diff a PKGBUILD against the nonfree one + # to check for updates. + + # Copyright (C) 2010-2011 Nicolás Reynolds +@@ -27,9 +27,9 @@ + . "$(librelib conf)" + + usage() { +- print "Usage: %s [community|packages] [unfree-package] [repo]" "${0##*/}" ++ print "Usage: %s [community|packages] [nonfree-package] [repo]" "${0##*/}" + print "Usage: %s --help" "${0##*/}" +- prose "Helps you diff build scripts from ABSLibre against (Unfree) ABS." ++ prose "Helps you diff a PKGBUILD against the nonfree one to check for updates." + echo + prose "Package name and repo will we guessed if you don't specify them." + } +@@ -46,7 +46,7 @@ main() { + local package_guess=${PWD##*/} + local repo=${1:-$(basename "${PWD%/*}")} + local package=${2:-${package_guess%-libre}} +- local trunk=${3:-trunk} ++ local repos=${3:-repos} + + svnrepo="packages" + case $repo in +@@ -66,7 +66,6 @@ main() { + error "Can't create temp dir" + return 1 + fi +- unfree_dir="${tmp_dir}/${svnrepo}/${package}/${trunk}" + + pushd "${tmp_dir}" &>/dev/null + +@@ -75,14 +74,20 @@ main() { + svn checkout --depth=empty "svn://svn.archlinux.org/$svnrepo" &>/dev/null + + cd "${svnrepo}" +- svn update "${package}" ++ svn update -r {${SNAPSHOT}} "${package}" + + # Back to start dir + popd &>/dev/null + ++ if [[ -d "${tmp_dir}/${svnrepo}/${package}/${repos}/${repo}-any" ]]; then ++ nonfree_dir="${tmp_dir}/${svnrepo}/${package}/${repos}/${repo}-any" ++ else ++ nonfree_dir="${tmp_dir}/${svnrepo}/${package}/${repos}/${repo}-x86_64" ++ fi ++ + msg "Diffing files" + +- for _file in "${unfree_dir}"/*; do ++ for _file in "${nonfree_dir}"/*; do + msg2 "%s" "$(basename "${_file}")" + "${DIFFPROG}" "$PWD/$(basename "${_file}")" "${_file}" + done +diff --git a/src/abslibre-tools/libredbdiff b/src/abslibre-tools/libredbdiff +index 1903c8c2..a01c32fb 100755 +--- a/src/abslibre-tools/libredbdiff ++++ b/src/abslibre-tools/libredbdiff +@@ -28,20 +28,20 @@ setup_traps + declare -r name="Libredbdiff" + declare -r cmd="${0##*/}" + +-declare -r conffile_prbl="$statedir/pacman.conf.parabola" +-declare -r conffile_arch="$statedir/pacman.conf.archlinux" ++declare -r conffile_hyper="$statedir/pacman.conf.hyperbola" ++declare -r conffile_arch="$statedir/pacman.conf.arch" + +-declare -r dbpath_prbl="$statedir/pacman.parabola" +-declare -r dbpath_arch="$statedir/pacman.archlinux" ++declare -r dbpath_hyper="$statedir/pacman.hyperbola" ++declare -r dbpath_arch="$statedir/pacman.arch" + +-declare -r mirrorlist_prbl="$statedir/mirrorlist.parabola" +-declare -r mirrorlist_arch="$statedir/mirrorlist.archlinux" ++declare -r mirrorlist_hyper="$statedir/mirrorlist.hyperbola" ++declare -r mirrorlist_arch="$statedir/mirrorlist.arch" + +-declare -r field_pkgname_prbl=30 ++declare -r field_pkgname_hyper=30 + declare -r field_pkgname_arch=30 +-declare -r field_pkgname_total="$((field_pkgname_prbl + field_pkgname_arch))" ++declare -r field_pkgname_total="$((field_pkgname_hyper + field_pkgname_arch))" + +-declare -r printf_format="%s %-${field_pkgname_prbl}s%-${field_pkgname_arch}s %s | %s\n" ++declare -r printf_format="%s %-${field_pkgname_hyper}s%-${field_pkgname_arch}s %s | %s\n" + declare -r printf_format_noarch="%s %-${field_pkgname_total}s %s\n" + + enablerepo() { +@@ -76,18 +76,18 @@ createdir() { + } + + # Globals: +-# - pkgname : the Parabola pkgname +-# - ver_prbl : a map of pkgname->arch_pkgver +-# - ver_arch : a map of pkgname->prbl_pkgver ++# - pkgname : the Hyperbola pkgname ++# - ver_hyper : a map of pkgname->arch_pkgver ++# - ver_arch : a map of pkgname->hyper_pkgver + # - provides : a map of pkgname->provides + compare_pkgs() { + if [[ -n "${ver_arch[$pkgname]:-}" ]]; then +- if {{ "${ver_prbl[$pkgname]}" -lt "${ver_arch[$pkgname]}" }}; then ++ if {{ "${ver_hyper[$pkgname]}" -lt "${ver_arch[$pkgname]}" }}; then + printf "$printf_format" \ + '=' \ + "$pkgname" \ + "" \ +- "${ver_prbl[$pkgname]}" \ ++ "${ver_hyper[$pkgname]}" \ + "${ver_arch[$pkgname]}" + fi + elif [[ -n "${provides[$pkgname]:-}" ]]; then +@@ -95,12 +95,12 @@ compare_pkgs() { + read -r -a _provides <<<"${provides[$pkgname]}" + for provide in "${_provides[@]}"; do + if [[ -n "${ver_arch[$provide]:-}" ]]; then +- if {{ "${ver_prbl[$pkgname]}" -lt "${ver_arch[$provide]}" }}; then ++ if {{ "${ver_hyper[$pkgname]}" -lt "${ver_arch[$provide]}" }}; then + printf "$printf_format" \ + 'p' \ + "$pkgname" \ + "$provide" \ +- "${ver_prbl[$pkgname]}" \ ++ "${ver_hyper[$pkgname]}" \ + "${ver_arch[$provide]}" + fi + fi +@@ -109,22 +109,22 @@ compare_pkgs() { + printf "$printf_format_noarch" \ + 'o' \ + "$pkgname" \ +- "${ver_prbl[$pkgname]}" ++ "${ver_hyper[$pkgname]}" + fi + } + + # Globals: +-# - prbl_packages_tmp +-# - ver_prbl ++# - hyper_packages_tmp ++# - ver_hyper + # - ver_arch (transitively through compare_pkgs) + # - provides + print_cmp() { + local repo="$1" + +- < "$prbl_packages_tmp" \ ++ < "$hyper_packages_tmp" \ + awk -F/ -v repo="$repo" '$1 == repo {print $2}' | + while read -r pkgname _pkgver _provides ; do +- ver_prbl["$pkgname"]="$_pkgver" ++ ver_hyper["$pkgname"]="$_pkgver" + provides["$pkgname"]="$_provides" + compare_pkgs + done +@@ -136,8 +136,8 @@ usage() { + print " or: %q -h" "$cmd" + print 'Show packages that need to be updated from Arch repositories.' + echo +- prose "Compares packages in Parabola repositories. Packages from +- all configured Parabola repositories are compared. A Parabola ++ prose "Compares packages in Hyperbola repositories. Packages from ++ all configured Hyperbola repositories are compared. A Hyperbola + repository name can be specified as argument to compare only + packages in that repository." + echo +@@ -168,24 +168,24 @@ usage() { + print '\tpkgline' + print '\t...' + echo +- prose "That is, the output is organized by Parabola repository, and ++ prose "That is, the output is organized by Hyperbola repository, and + within each repository section, there is one line for each +- package in that Parabola repo that seems to be behind the ++ package in that Hyperbola repo that seems to be behind the + equivalent package in Arch." + echo + print "The line-format for packages is:" + printf "\t$printf_format" \ +- status parabola_pkgname '[arch_pkgname]' parabola_pkgver arch_pkgver ++ status hyperbola_pkgname '[arch_pkgname]' hyperbola_pkgver arch_pkgver + echo + print "Where 'status' is one of the characters:" +- flag '=' "An Arch package with the same pkgname as a Parabola package +- was found, and Arch has a higher pkgver than Parabola. In ++ flag '=' "An Arch package with the same pkgname as a Hyperbola package ++ was found, and Arch has a higher pkgver than Hyperbola. In + this case, arch_pkgname is not present (as it is the same as +- the parabola_pkgname)." +- flag 'p' "An Arch package with a pkgname that is provide'd by a Parabola ++ the hyperbola_pkgname)." ++ flag 'p' "An Arch package with a pkgname that is provide'd by a Hyperbola + package was found, and the pkgver of the Arch package is +- higher than the pkgver of the parabola package." +- flag 'o' "It appears that this Parabola package is not a replacement for ++ higher than the pkgver of the hyperbola package." ++ flag 'o' "It appears that this Hyperbola package is not a replacement for + an Arch package." + } + +@@ -231,7 +231,7 @@ main() { + fi + if [[ $# = 1 ]]; then + if ! in_array "$1" "${repos[@]}"; then +- die "The specified Parabola repo \"%s\" cannot be compared. It's not in the list of repos in the configuration variable \"repos\"." "$1" ++ die "The specified Hyperbola repo \"%s\" cannot be compared. It's not in the list of repos in the configuration variable \"repos\"." "$1" + fi + fi + main_compare "$@" +@@ -245,20 +245,20 @@ main_update() { + usage >&2 + exit 1 + fi +- check_vars libredbdiff statedir mirror_prbl mirror_arch || exit 1 ++ check_vars libredbdiff statedir mirror_hyper mirror_arch || exit 1 + + createdir "$statedir" + { +- msg "Generating %s %q" Parabola pacman.conf +- cp -T /usr/share/pacman/defaults/pacman.conf.x86_64 "$conffile_prbl" ++ msg "Generating %s %q" Hyperbola pacman.conf ++ cp -T /usr/share/pacman/defaults/pacman.conf.x86_64 "$conffile_hyper" + sed -r \ +- -e "s|/etc/pacman\.d/mirrorlist$|$mirrorlist_prbl|" \ +- -e "s|^#?DBPath\s*=.*|DBPath = $dbpath_prbl|" \ ++ -e "s|/etc/pacman\.d/mirrorlist$|$mirrorlist_hyper|" \ ++ -e "s|^#?DBPath\s*=.*|DBPath = $dbpath_hyper|" \ + -e "s|^#?Architecture\s*=.*|Architecture = x86_64|" \ +- -i "$conffile_prbl" ++ -i "$conffile_hyper" + local repo +- for repo in multilib {libre,pcr,nonprism}{,-multilib}; do +- enablerepo "$repo" "$conffile_prbl" ++ for repo in multilib; do ++ enablerepo "$repo" "$conffile_hyper" + done + + msg "Generating %s %q" Arch pacman.conf +@@ -273,16 +273,16 @@ main_update() { + -i "$conffile_arch" + enablerepo multilib "$conffile_arch" + +- printf 'Server = %s\n' "$mirror_prbl" > "$mirrorlist_prbl" ++ printf 'Server = %s\n' "$mirror_hyper" > "$mirrorlist_hyper" + +- printf 'Server = %s\n' "$mirror_arch" > "$mirrorlist_arch" ++ printf 'Server = %s\n' "${mirror_arch/SNAPSHOT/${SNAPSHOT//-//}}" > "$mirrorlist_arch" + } + +- createdir "$dbpath_prbl" ++ createdir "$dbpath_hyper" + { +- msg "Synchronizing %s pacman databases for %s" "$name" "Parabola" +- pacman --config "$conffile_prbl" -Sy || +- die "Failed to synchronize pacman database for %s. Exiting." Parabola ++ msg "Synchronizing %s pacman databases for %s" "$name" "Hyperbola" ++ pacman --config "$conffile_hyper" -Sy || ++ die "Failed to synchronize pacman database for %s. Exiting." Hyperbola + } + + createdir "$dbpath_arch" +@@ -299,9 +299,9 @@ main_update() { + main_compare() { + check_vars libredbdiff statedir repos || exit 1 + +- if ! [[ -f "$conffile_prbl" && \ ++ if ! [[ -f "$conffile_hyper" && \ + -f "$conffile_arch" && \ +- -f "$dbpath_prbl/sync/libre.db" && \ ++ -f "$dbpath_hyper/sync/core.db" && \ + -f "$dbpath_arch/sync/core.db" ]] + then + error "You must run %q with out arguments as root to initialize." "$cmd" +@@ -313,10 +313,10 @@ main_compare() { + tmpdir="$(mktemp --tmpdir -d "$cmd.XXXXXXXXXX")" || die "Could not create temporary working directory" + trap "rm -rf -- $(printf %q "$tmpdir")" RETURN + local arch_packages_tmp="$tmpdir/arch-packages" +- local prbl_packages_tmp="$tmpdir/parabola-packages" ++ local hyper_packages_tmp="$tmpdir/hyperbola-packages" + +- unset provides ver_prbl ver_arch +- declare -gA provides ver_prbl ver_arch ++ unset provides ver_hyper ver_arch ++ declare -gA provides ver_hyper ver_arch + + expac --config "$conffile_arch" -S '%n %v' \ + > "$arch_packages_tmp" || \ +@@ -327,9 +327,9 @@ main_compare() { + ver_arch["$pkgname"]="$pkgver" + done < "$arch_packages_tmp" + +- expac --config "$conffile_prbl" -S '%r/%n %v %S' \ +- > "$prbl_packages_tmp" || \ +- die "expac command to get %s package data has failed. Exiting." Parabola ++ expac --config "$conffile_hyper" -S '%r/%n %v %S' \ ++ > "$hyper_packages_tmp" || \ ++ die "expac command to get %s package data has failed. Exiting." Hyperbola + + if [[ $# == 1 ]]; then + print_cmp "$1" +diff --git a/src/abslibre-tools/libredbdiff.conf b/src/abslibre-tools/libredbdiff.conf +index d92a8322..9d31e906 100644 +--- a/src/abslibre-tools/libredbdiff.conf ++++ b/src/abslibre-tools/libredbdiff.conf +@@ -3,7 +3,7 @@ + + statedir='/var/lib/libredbdiff' + +-mirror_prbl='https://repomirror.parabola.nu/$repo/os/$arch' +-mirror_arch='https://mirrors.kernel.org/archlinux/$repo/os/$arch' ++mirror_hyper='https://repo.hyperbola.info:50011/gnu-plus-linux-libre/testing/$repo/os/$arch' ++mirror_arch='https://archive.archlinux.org/repos/SNAPSHOT/$repo/os/$arch' + +-repos=(libre{,-multilib} pcr{,-multilib} nonprism{,-multilib}) ++repos=(core extra community multilib) +diff --git a/src/abslibre-tools/librerelease b/src/abslibre-tools/librerelease +index b8eb0e32..51739256 100755 +--- a/src/abslibre-tools/librerelease ++++ b/src/abslibre-tools/librerelease +@@ -40,7 +40,6 @@ + . "$(librelib conf)" + + dryrun="" +-upload_only=false + readonly rsync_flags=( + --no-group + --no-perms +@@ -49,7 +48,7 @@ readonly rsync_flags=( + --partial + --human-readable + --progress +- -e ssh ++ -e "ssh -p 51011" + ) + + # Functions #################################################################### +@@ -125,12 +124,11 @@ usage() { + print "Usage: %s [OPTIONS]" "${0##*/}" + echo + prose 'This script uploads packages on $WORKDIR/staging +- to the Parabola server.' ++ to the Hyperbola server.' + echo + print "Options:" + flag '-c' 'Clean; delete packages in $WORKDIR/staging' + flag '-l' "List; list packages but not upload them" +- flag '-u' "Upload-only; do not run db-update on the server" + + flag '-n' "Dry-run; don't actually do anything" + flag '-h' "Show this message" +@@ -148,7 +146,6 @@ main() { + case $arg in + c) mode=clean ;; + l) mode=pretty_print_packages ;; +- u) upload_only=true ;; + n) dryrun="--dry-run" ;; + h) mode=usage ;; + *) usage >&2; return 1 ;; +@@ -227,7 +224,7 @@ release_packages() { + + msg "%s to upload" "$(cd "${WORKDIR}/staging" && du -hc --files0-from="$file_list" | sed -n '$s/\t.*//p')" + msg "Uploading packages..." +- xargs -0r -a "$file_list" dirname -z | ssh "${REPODEST%%:*}" "$(printf 'mkdir -p -- %q && cd %q && xargs -0r mkdir -pv --' "${REPODEST#*:}"{,})" ++ xargs -0r -a "$file_list" dirname -z | ssh -p 51011 "${REPODEST%%:*}" "$(printf 'mkdir -p -- %q && cd %q && xargs -0r mkdir -pv --' "${REPODEST#*:}"{,})" + if ! rsync ${dryrun} "${rsync_flags[@]}" \ + -0 --files-from="$file_list" \ + "${WORKDIR}/staging" \ +@@ -239,13 +236,6 @@ release_packages() { + + clean_files "$file_list" + +- if $upload_only; then +- return 0 +- fi +- +- msg "Running db-update on repos" +- ssh "${REPODEST%%:*}" "$(printf 'STAGING=%q db-update' "${REPODEST#*:}")" +- + if [[ -n $HOOKPOSTRELEASE ]]; then + msg "Running HOOKPOSTRELEASE..." + plain '%s' "${HOOKPOSTRELEASE}" +diff --git a/src/abslibre-tools/librestage b/src/abslibre-tools/librestage +index 74de8fb3..34a34779 100755 +--- a/src/abslibre-tools/librestage ++++ b/src/abslibre-tools/librestage +@@ -64,7 +64,7 @@ main() { + check_vars libretools WORKDIR || return 1 + load_files makepkg # for PKGDEST, SRCDEST, and SRCPKGDEST, which are optional + load_files librefetch # for MIRRORS, which is optional +- SRCPKGPOOL="$WORKDIR/staging/sources/parabola" ++ SRCPKGPOOL="$WORKDIR/staging/sources/hyperbola" + + # Load the PKGBUILD + load_PKGBUILD +@@ -102,19 +102,19 @@ main() { + return 1 + fi + done +- if pkgfile=$(find_cached_srcpackage "$pkgbase" "$(get_full_version)" "$CARCH"); then +- msg 'Found source package: %s' "${pkgfile##*/}" +- +- mkdir -p "$SRCPKGPOOL" +- if cp "$pkgfile" "$SRCPKGPOOL/${pkgfile##*/}"; then +- msg2 "%s staged on [%s]" "$pkgbase" sources +- staged=true +- else +- error "Can't put %s on [%s]" "$pkgbase" sources +- return 1 +- fi +- fi + done ++ if pkgfile=$(find_cached_srcpackage "$pkgbase" "$(get_full_version)"); then ++ msg 'Found source package: %s' "${pkgfile##*/}" ++ ++ mkdir -p "$SRCPKGPOOL" ++ if cp "$pkgfile" "$SRCPKGPOOL/${pkgfile##*/}"; then ++ msg2 "%s staged on [%s]" "$pkgbase" sources ++ staged=true ++ else ++ error "Can't put %s on [%s]" "$pkgbase" sources ++ return 1 ++ fi ++ fi + + # Look for librefetch output + local netfile mirror path +@@ -138,13 +138,13 @@ main() { + done + if [[ -n "$srcpath" ]]; then + msg "Found generated source file: %s" "$srcname" +- local dest="${WORKDIR}/staging/other/${srcurl##"$mirror"}" ++ local dest="${WORKDIR}/staging/sources/${srcurl##"$mirror"}" + mkdir -p -- "${dest%/*}" + if cp "$srcpath" "$dest"; then +- msg2 "%s staged on [%s]" "$srcname" other ++ msg2 "%s staged on [%s]" "$srcname" sources + staged=true + else +- error "Can't put %s on [%s]" "$srcname" other ++ error "Can't put %s on [%s]" "$srcname" sources + return 1 + fi + fi +diff --git a/src/aur b/src/aur +index 8f69505b..295e0fc7 100755 +--- a/src/aur ++++ b/src/aur +@@ -29,7 +29,7 @@ usage() { + prose "This script will download packages from AUR to the current + directory and check their license for nonfree issues. This does + not mean that they are free; they may be incorrectly labeled, or +- have other freedom issues. It's a tool to help Parabola ++ have other freedom issues. It's a tool to help Hyperbola + packagers, not to help users install things directly from AUR." + } + +diff --git a/src/chroot-tools/libremakepkg b/src/chroot-tools/libremakepkg +index 019bae11..d4e5b8a0 100755 +--- a/src/chroot-tools/libremakepkg ++++ b/src/chroot-tools/libremakepkg +@@ -167,7 +167,7 @@ usage() { + flag '-N' "Don't disable networking during build() and + package(). PLEASE don't use this unless you + have a special reason, its use is a violation +- of Parabola policy." ++ of Hyperbola policy." + flag '-R' 'Repackage contents of the package without rebuilding' + flag '-h' 'Show this message' + } +diff --git a/src/chroot-tools/makechrootpkg.in b/src/chroot-tools/makechrootpkg.in +index 7589737c..f97b329b 100644 +--- a/src/chroot-tools/makechrootpkg.in ++++ b/src/chroot-tools/makechrootpkg.in +@@ -199,9 +199,13 @@ prepare_chroot() { + # We can't use useradd without chrooting, otherwise it invokes PAM modules + # which we might not be able to load (i.e. when building i686 packages on + # an x86_64 host). +- sed -e '/^builduser:/d' -i "$copydir"/etc/{passwd,group} +- printf >>"$copydir/etc/group" 'builduser:x:%d:\n' "$builduser_gid" +- printf >>"$copydir/etc/passwd" 'builduser:x:%d:%d:builduser:/build:/bin/bash\n' "$builduser_uid" "$builduser_gid" ++ sed -e '\/adm:/ s/,builduser//g' -i "$copydir"/etc/{group,gshadow} ++ sed -e '/^builduser:/d' -i "$copydir"/etc/{passwd,group,gshadow,shadow} ++ printf >>"$copydir/etc/passwd" 'builduser:x:%d:%d:builduser:/build:/bin/bash\n' "$builduser_uid" "$builduser_gid" ++ printf >>"$copydir/etc/shadow" 'builduser:x:14871::::::\n' ++ printf >>"$copydir/etc/group" 'builduser:x:%d:\n' "$builduser_gid" ++ printf >>"$copydir/etc/gshadow" 'builduser:x::\n' ++ sed -e '\/adm:/ s/root,daemon/root,daemon,builduser/' -i "$copydir"/etc/{group,gshadow} + + $install -d "$copydir"/{build,build/.gnupg,startdir,{pkg,srcpkg,src,log}dest} + +@@ -272,24 +276,11 @@ _chrootprepare() { + _chrootbuild() { + # shellcheck source=/dev/null + . /etc/profile +- local srcext +- srcext="$( +- # shellcheck source=makepkg-x86_64.conf +- . /etc/makepkg.conf || exit +- # shellcheck source=PKGBUILD.proto +- . /startdir/PKGBUILD || exit +- if [ "$arch" = any ]; then +- pkgarch=any +- else +- pkgarch=$CARCH +- fi +- printf '%s\n' "-$pkgarch$SRCEXT" +- )" || return + # Beware, there are some stupid arbitrary rules on how you can + # use "$" in arguments to commands with "sudo -i". ${foo} or + # ${1} is OK, but $foo or $1 isn't. + # https://bugzilla.sudo.ws/show_bug.cgi?id=765 +- sudo -iu builduser bash -c 'cd /startdir; SRCEXT="${1}" makepkg "${@:2}" --allsource' -bash "$srcext" "$@" || return ++ sudo -iu builduser bash -c 'cd /startdir; makepkg "${@:2}" --allsource' -bash ".src.tar.gz" "$@" || return + sudo -iu builduser bash -c 'cd /startdir; makepkg "$@" --noextract --noprepare' -bash "$@" + } + +diff --git a/src/gitget/gitget b/src/gitget/gitget +index 6a4b9d17..f652e479 100755 +--- a/src/gitget/gitget ++++ b/src/gitget/gitget +@@ -48,7 +48,7 @@ download_git_checkout() { + + if [[ ! -d "$dir/.git" ]] ; then + msg2 "Cloning %s %s repo..." "${name}" "git" +- if ! git clone "$url" "$dir"; then ++ if ! git clone --recursive "$url" "$dir"; then + error "Failure while downloading %s %s repo" "${name}" "git" + plain "Aborting..." + exit 1 +diff --git a/src/lib/common.sh.in b/src/lib/common.sh.in +index 118a06c8..ccc19b75 100644 +--- a/src/lib/common.sh.in ++++ b/src/lib/common.sh.in +@@ -283,7 +283,7 @@ find_cached_package() { + } + + ## +-# usage: find_cached_srcpackage( $pkgname, $pkgver, $arch ) ++# usage: find_cached_srcpackage( $pkgname, $pkgver) + # + # $pkgver can be supplied with or without a pkgrel appended. + # If not supplied, any pkgrel will be matched. +@@ -291,7 +291,7 @@ find_cached_package() { + find_cached_srcpackage() { + local searchdirs=("$PWD" "$SRCPKGDEST") results=() + local targetname=$1 targetver=$2 targetarch=$3 +- local dir pkg pkgbasename name ver rel arch r results ++ local dir pkg pkgbasename name ver rel r results + + for dir in "${searchdirs[@]}"; do + [[ -d $dir ]] || continue +@@ -308,16 +308,13 @@ find_cached_srcpackage() { + pkgbasename=${pkg##*/} + pkgbasename=${pkgbasename%.src.tar?(.?z)} + +- arch=${pkgbasename##*-} +- pkgbasename=${pkgbasename%-"$arch"} +- + rel=${pkgbasename##*-} + pkgbasename=${pkgbasename%-"$rel"} + + ver=${pkgbasename##*-} + name=${pkgbasename%-"$ver"} + +- if [[ $targetname = "$name" && $targetarch = "$arch" ]] && ++ if [[ $targetname = "$name" ]] && + pkgver_equal "$targetver" "$ver-$rel"; then + results+=("$pkg") + fi +diff --git a/src/lib/conf.sh.3.ronn b/src/lib/conf.sh.3.ronn +index 0974bdb4..949ce3e9 100644 +--- a/src/lib/conf.sh.3.ronn ++++ b/src/lib/conf.sh.3.ronn +@@ -8,7 +8,7 @@ conf.sh(3) -- easy loading of configuration files + ## DESCRIPTION + + `conf.sh` is a Bash(1) library to easily load various configuration +-files related to Arch Linux/Parabola(7) and libretools(7). ++files related to Arch/Hyperbola(7) and libretools(7). + + ### VARIABLES + +diff --git a/src/lib/conf.sh.in b/src/lib/conf.sh.in +index 1e4acd92..942484ef 100644 +--- a/src/lib/conf.sh.in ++++ b/src/lib/conf.sh.in +@@ -18,6 +18,8 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see . + ++SNAPSHOT=2020-05-08 ++ + LIBREUSER="${SUDO_USER:-$USER}" + if [[ $LIBREUSER == "$USER" ]]; then + LIBREHOME=$HOME +diff --git a/src/lib/libremessages.1.ronn b/src/lib/libremessages.1.ronn +index 4af446e1..2abdd987 100644 +--- a/src/lib/libremessages.1.ronn ++++ b/src/lib/libremessages.1.ronn +@@ -217,7 +217,7 @@ These routines relate to `makepkg`(8). + found (not counting duplicate links), then an error is printed to + stderr and nothing is printed to stdout. + +- * `find_cached_srcpackage` [-: ++ * `find_cached_srcpackage` [- for + source packages produced by libremakepkg. + +diff --git a/src/lib/messages.sh.3.ronn b/src/lib/messages.sh.3.ronn +index 4af446e1..2abdd987 100644 +--- a/src/lib/messages.sh.3.ronn ++++ b/src/lib/messages.sh.3.ronn +@@ -217,7 +217,7 @@ These routines relate to `makepkg`(8). + found (not counting duplicate links), then an error is printed to + stderr and nothing is printed to stdout. + +- * `find_cached_srcpackage` [-: ++ * `find_cached_srcpackage` [- for + source packages produced by libremakepkg. + +diff --git a/src/librefetch/librefetch b/src/librefetch/librefetch +index 807fe9be..fb032bc4 100755 +--- a/src/librefetch/librefetch ++++ b/src/librefetch/librefetch +@@ -75,7 +75,7 @@ usage() { + straight to makepkg." + echo + print "Example usage:" +- print ' $ %s https://repo.parabola.nu/other/mypackage/mypackage-1.0.tar.gz' "$cmd" ++ print ' $ %s https://repo.hyperbola.info:50000/sources/mypackage/mypackage-1.0.tar.gz' "$cmd" + echo + print "Options:" + flag 'Settings:' \ +diff --git a/src/librefetch/librefetch.8.ronn b/src/librefetch/librefetch.8.ronn +index fa7aaceb..9b30d5f7 100644 +--- a/src/librefetch/librefetch.8.ronn ++++ b/src/librefetch/librefetch.8.ronn +@@ -12,7 +12,7 @@ librefetch(8) -- downloads or creates a liberated source tarball + tarballs for `PKGBUILD(5)` files. + + If a URL mentioned in the array in a `PKGBUILD` is in a +-location that Parabola uploads "custom" source tarballs to (or ++location that Hyperbola uploads "custom" source tarballs to (or + configured locations), and no file is at that URL, librefetch will + automatically create it for you. + +diff --git a/src/librefetch/librefetch.conf b/src/librefetch/librefetch.conf +index d92683f8..a013acf6 100644 +--- a/src/librefetch/librefetch.conf ++++ b/src/librefetch/librefetch.conf +@@ -2,9 +2,6 @@ + # shellcheck disable=2034 + + MIRRORS=( +- 'https://repo.parabola.nu/sources/' +- 'https://repo.parabola.nu/other/' +- 'https://repo.parabolagnulinux.org/sources/' +- 'https://repo.parabolagnulinux.org/other/' ++ 'https://repo.hyperbola.info:50000/sources/' + ) + DOWNLOADER='/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u' +diff --git a/src/libretools.conf b/src/libretools.conf +index f909c367..7ecad428 100644 +--- a/src/libretools.conf ++++ b/src/libretools.conf +@@ -6,21 +6,23 @@ + ################################################################################ + + # The dir where you work on +-WORKDIR="$LIBREHOME/packages" ++WORKDIR="$LIBREHOME/hyperbola" + + ## Blacklist URL +-BLACKLIST=https://git.parabola.nu/blacklist.git/plain/blacklist.txt ++BLACKLIST=https://git.hyperbola.info:50100/software/blacklist.git/plain/blacklist.txt ++#BLACKLIST=$WORKDIR/blacklist/blacklist.txt + + ## Diff tool (vimdiff, gvimdiff, meld, etc) +-## Used by `aur`, `diff-unfree` ++## Used by `aur`, `diff-nonfree` + # shellcheck disable=2046 +-DIFFPROG=$(which $([ -z "${DISPLAY:-}" ]||echo kdiff3 meld gvimdiff) vimdiff colordiff diff 2>/dev/null|sed 's/\s.*//;1q') ++#DIFFPROG=$(which $([ -z "${DISPLAY:-}" ]||echo kdiff3 meld gvimdiff) vimdiff colordiff diff 2>/dev/null|sed 's/\s.*//;1q') ++DIFFPROG=vimdiff + +-## ABSLibre ++## Packages + ## Used by xbs-abslibre +-ABSLIBRERECV=git://git.parabola.nu/abslibre/abslibre.git +-ABSLIBRESEND=ssh://git@git.parabola.nu/srv/git/abslibre/abslibre.git +-ABSLIBREDEST="$WORKDIR/staging/abslibre" ++ABSLIBRERECV=https://git.hyperbola.info:50100/packages/packages.git ++ABSLIBRESEND=ssh://git@git.hyperbola.info:51100/srv/git/packages/packages.git ++ABSLIBREDEST="$WORKDIR/staging/packages" + ## ARCHES is the list of ARCHES to look for under ABSLIBREDEST + ARCHES=($(printf '%s\n' /usr/share/pacman/defaults/pacman.conf.*|sed 's|.*\.||')) + +@@ -29,12 +31,11 @@ ARCHES=($(printf '%s\n' /usr/share/pacman/defaults/pacman.conf.*|sed 's|.*\.||') + ################################################################################ + + ## Where to upload packages to +-# '/staging/' is appended; this is for compatibility with previous versions. +-REPODEST=repo@repo.parabola.nu:staging/$LIBREUSER ++REPODEST=staging@dusseldorf.hyperbola.info:$LIBREUSER + + ## These are run before and after uploading packages +-HOOKPRERELEASE="ssh -fN ${REPODEST%%:*}" +-HOOKPOSTRELEASE="sudo librechroot clean-repo" ++HOOKPRERELEASE="ssh -p 51011 -fN ${REPODEST%%:*}" ++HOOKPOSTRELEASE="sudo librechroot clean-repo" # && sudo librechroot -n i686 clean-repo" + + ################################################################################ + # dagpkg # +@@ -69,4 +70,4 @@ TORUPATH=/var/lib/libretools/toru + # inverted order of precedence. Put testing repos first so dagpkg will find new + # PKGBUILDs first, for instance. `toru-path` uses reverse order to enforce repo + # precedence on the path cache (the last path added replaces the rest) +-REPOS=('core' 'libre' 'extra' 'community' 'libre-testing' 'social' 'sugar' 'pcr' 'java') ++REPOS=('core' 'extra' 'community' 'multilib') +diff --git a/src/repo-diff b/src/repo-diff +index df5e49be..651bb399 100755 +--- a/src/repo-diff ++++ b/src/repo-diff +@@ -22,12 +22,12 @@ + . "$(librelib messages)" + + usage() { +- print "Usage: %s arch/core/i686 parabola/core/i686" "${0##*/}" ++ print "Usage: %s arch/core/i686 hyperbola/core/i686" "${0##*/}" + print "Compares two repo databases using distro/repo/architecture format." + echo + print 'Shortcuts:' +- flag 'arch' 'expands to Arch Linux repo url' +- flag 'parabola' 'expands to Parabola GNU/Linux-libre repo url' ++ flag 'arch' 'expands to Arch GNU/Linux repo url' ++ flag 'hyperbola' 'expands to Hyperbola GNU/Linux-libre repo url' + } + + b() { +@@ -38,13 +38,13 @@ n() { + } + + # hopefully simple way to convert +-# parabola/libre/i686 ++# hyperbola/core/i686 + # to +-# http://repo.parabola.nu/libre/os/i686/libre.db ++# https://repo.hyperbola.info:50011/gnu-plus-linux-libre/testing/core/os/i686/core.db + # add more distros here + g() { + echo "$1" | sed -e "s,^\([^/]\+\)/\([^/]\+\)/\([^/]\+\)$,\1/\2/os/\3/\2.db," \ +- -e "s,^parabola/,http://repo.parabola.nu/," \ ++ -e "s,^hyperbola/,https://repo.hyperbola.info:50011/gnu-plus-linux-libre/testing/," \ + -e "s,^arch\(linux\)\?/,http://mirrors.kernel.org/archlinux/," + } + +diff --git a/test/lib-blacklist-test.sh b/test/lib-blacklist-test.sh +index 49c756ec..49ee3488 100644 +--- a/test/lib-blacklist-test.sh ++++ b/test/lib-blacklist-test.sh +@@ -3,7 +3,7 @@ + describe libreblacklist + . ./test-common.sh + +-_blacklist_url=https://projects.parabola.nu/blacklist.git/plain/blacklist.txt ++_blacklist_url=https://git.hyperbola.info:50100/software/blacklist.git/plain/blacklist.txt + + it_works_with_just_pkgname() { + v="$(libreblacklist normalize <</dev/tty + +- testsudo librechroot -l "$roundup_test_name" run curl https://repo.parabola.nu/ >/dev/null +- not testsudo librechroot -l "$roundup_test_name" -N run curl https://repo.parabola.nu/ >/dev/null ++ testsudo librechroot -l "$roundup_test_name" run curl https://repo.hyperbola.info:50011/ >/dev/null ++ not testsudo librechroot -l "$roundup_test_name" -N run curl https://repo.hyperbola.info:50011/ >/dev/null + } + + it_handles_CHROOTEXTRAPKG_correctly() { +diff --git a/test/libredbdiff-test.sh b/test/libredbdiff-test.sh +index fe73074c..d2ca50b0 100644 +--- a/test/libredbdiff-test.sh ++++ b/test/libredbdiff-test.sh +@@ -7,9 +7,9 @@ common_before() { + mkdir -p "$XDG_CONFIG_HOME/libretools" + printf '%s\n' \ + 'statedir="$PWD"' \ +- "mirror_prbl='https://repo.parabola.nu/\$repo/os/\$arch'" \ ++ "mirror_hyper='https://repo.hyperbola.info:50011/gnu-plus-linux-libre/testing/\$repo/os/\$arch'" \ + "mirror_arch='https://mirrors.kernel.org/archlinux/\$repo/os/\$arch'" \ +- 'repos=(libre)' \ ++ 'repos=(core)' \ + > $XDG_CONFIG_HOME/libretools/libredbdiff.conf + } + +@@ -23,7 +23,7 @@ it_displays_help() { + it_handles_packages_with_multiple_provides_explicit() { + cd libredbdiff.d/statedir + +- libredbdiff -n libre >$tmpdir/stdout 2>$tmpdir/stderr ++ libredbdiff -n core >$tmpdir/stdout 2>$tmpdir/stderr + + empty $tmpdir/stderr + diff -w ../expected-explicit.txt $tmpdir/stdout +diff --git a/test/libredbdiff.d/expected-implicit.txt b/test/libredbdiff.d/expected-implicit.txt +index afc2689a..c1523bb4 100644 +--- a/test/libredbdiff.d/expected-implicit.txt ++++ b/test/libredbdiff.d/expected-implicit.txt +@@ -1,2 +1,2 @@ +-[libre] ++[core] + p linux-libre linux 4.10.12_gnu-2 | 4.10.13-1 +diff --git b/test/libredbdiff.d/statedir/pacman.conf.arch b/test/libredbdiff.d/statedir/pacman.conf.arch +new file mode 100644 +index 00000000..d527c954 +--- /dev/null ++++ b/test/libredbdiff.d/statedir/pacman.conf.arch +@@ -0,0 +1,6 @@ ++[options] ++DBPath = ./pacman.arch ++Architecture = x86_64 ++ ++[core] ++Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch +diff --git a/test/libredbdiff.d/statedir/pacman.conf.archlinux a/test/libredbdiff.d/statedir/pacman.conf.archlinux +deleted file mode 100644 +index d4a9c8da..00000000 +--- a/test/libredbdiff.d/statedir/pacman.conf.archlinux ++++ /dev/null +@@ -1,6 +0,0 @@ +-[options] +-DBPath = ./pacman.archlinux +-Architecture = x86_64 +- +-[core] +-Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch +diff --git b/test/libredbdiff.d/statedir/pacman.conf.hyperbola b/test/libredbdiff.d/statedir/pacman.conf.hyperbola +new file mode 100644 +index 00000000..aaf5c9c6 +--- /dev/null ++++ b/test/libredbdiff.d/statedir/pacman.conf.hyperbola +@@ -0,0 +1,6 @@ ++[options] ++DBPath = ./pacman.hyperbola ++Architecture = x86_64 ++ ++[core] ++Server = https://repo.hyperbola.info:50011/gnu-plus-linux-libre/testing/$repo/os/$arch +diff --git a/test/libredbdiff.d/statedir/pacman.conf.parabola a/test/libredbdiff.d/statedir/pacman.conf.parabola +deleted file mode 100644 +index 7b553dd4..00000000 +--- a/test/libredbdiff.d/statedir/pacman.conf.parabola ++++ /dev/null +@@ -1,6 +0,0 @@ +-[options] +-DBPath = ./pacman.parabola +-Architecture = x86_64 +- +-[libre] +-Server = https://repomirror.parabola.nu/$repo/os/$arch +diff --git a/test/libremakepkg.d/PKGBUILD-hello b/test/libremakepkg.d/PKGBUILD-hello +index 5f320fe3..b29f7475 100644 +--- a/test/libremakepkg.d/PKGBUILD-hello ++++ b/test/libremakepkg.d/PKGBUILD-hello +@@ -1,7 +1,7 @@ + pkgname='libretools-hello' + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) +diff --git a/test/libremakepkg.d/PKGBUILD-netbuild b/test/libremakepkg.d/PKGBUILD-netbuild +index 4db1274a..231d1728 100644 +--- a/test/libremakepkg.d/PKGBUILD-netbuild ++++ b/test/libremakepkg.d/PKGBUILD-netbuild +@@ -1,14 +1,14 @@ + pkgname='libretools-netbuild' + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) + + build() { + cd "$srcdir" +- curl https://repo.parabola.nu/ > index.html ++ curl https://repo.hyperbola.info:50000/ > index.html + } + + package() { +diff --git a/test/libremakepkg.d/PKGBUILD-netpackage b/test/libremakepkg.d/PKGBUILD-netpackage +index 6cadcf8d..94c63bf0 100644 +--- a/test/libremakepkg.d/PKGBUILD-netpackage ++++ b/test/libremakepkg.d/PKGBUILD-netpackage +@@ -1,12 +1,12 @@ + pkgname='libretools-netpackage' + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) + + package() { + install -d "$pkgdir"/usr/share/$pkgname +- curl https://repo.parabola.nu/ > "$pkgdir"/usr/share/$pkgname/index.html ++ curl https://repo.hyperbola.info:50000/ > "$pkgdir"/usr/share/$pkgname/index.html + } +diff --git a/test/libremakepkg.d/PKGBUILD-netprepare b/test/libremakepkg.d/PKGBUILD-netprepare +index efb7a435..0b024b95 100644 +--- a/test/libremakepkg.d/PKGBUILD-netprepare ++++ b/test/libremakepkg.d/PKGBUILD-netprepare +@@ -1,14 +1,14 @@ + pkgname='libretools-netprepare' + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) + + prepare() { + cd "$srcdir" +- curl https://repo.parabola.nu/ > index.html ++ curl https://repo.hyperbola.info:50000/ > index.html + } + + package() { +diff --git a/test/libremakepkg.d/PKGBUILD-testpkg1 b/test/libremakepkg.d/PKGBUILD-testpkg1 +index 8da1f14c..267e84e8 100644 +--- a/test/libremakepkg.d/PKGBUILD-testpkg1 ++++ b/test/libremakepkg.d/PKGBUILD-testpkg1 +@@ -1,7 +1,7 @@ + pkgname='libretools-testpkg1' + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) +diff --git a/test/libremakepkg.d/PKGBUILD-testpkg2 b/test/libremakepkg.d/PKGBUILD-testpkg2 +index 65d558ed..0d39e394 100644 +--- a/test/libremakepkg.d/PKGBUILD-testpkg2 ++++ b/test/libremakepkg.d/PKGBUILD-testpkg2 +@@ -1,7 +1,7 @@ + pkgname='libretools-testpkg2' + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) +diff --git a/test/librerelease-test.sh b/test/librerelease-test.sh +index 1c864f7d..2f554309 100644 +--- a/test/librerelease-test.sh ++++ b/test/librerelease-test.sh +@@ -7,7 +7,7 @@ common_before() { + mkdir -p $XDG_CONFIG_HOME/libretools + { + echo "WORKDIR='$tmpdir/workdir'" +- echo 'REPODEST=repo@repo:/srv/http/repo/staging-$LIBREUSER' ++ echo 'REPODEST=staging@repo.hyperbola.info:/srv/staging/$LIBREUSER' + } >$XDG_CONFIG_HOME/libretools/libretools.conf + mkdir -p $XDG_CONFIG_HOME/pacman + { +diff --git a/test/librestage-test.sh b/test/librestage-test.sh +index 153e1a42..75450aec 100644 +--- a/test/librestage-test.sh ++++ b/test/librestage-test.sh +@@ -59,7 +59,7 @@ it_guesses_the_repo() { + + find "$tmpdir" -not -type d -exec ls -ld -- {} + + [[ -f $(echo $tmpdir/workdir/staging/reponame/libretools-hello-1.0-1-any.pkg.tar.?z) ]] +- $nochroot || [[ -f $(echo $tmpdir/workdir/staging/sources/parabola/libretools-hello-1.0-1-any.src.tar.?z) ]] ++ $nochroot || [[ -f $(echo $tmpdir/workdir/staging/sources/hyperbola/libretools-hello-1.0-1-any.src.tar.?z) ]] + } + + it_stages_packages_without_PKGDEST() { +@@ -80,5 +80,5 @@ it_stages_packages_without_PKGDEST() { + + find "$tmpdir" -not -type d -exec ls -ld -- {} + + [[ -f $(echo $tmpdir/workdir/staging/repo1/libretools-hello-1.0-1-any.pkg.tar.?z) ]] +- $nochroot || [[ -f $(echo $tmpdir/workdir/staging/sources/parabola/libretools-hello-1.0-1-any.src.tar.?z) ]] ++ $nochroot || [[ -f $(echo $tmpdir/workdir/staging/sources/hyperbola/libretools-hello-1.0-1-any.src.tar.?z) ]] + } +diff --git a/test/librestage.d/PKGBUILD-hello b/test/librestage.d/PKGBUILD-hello +index 5f320fe3..b29f7475 100644 +--- a/test/librestage.d/PKGBUILD-hello ++++ b/test/librestage.d/PKGBUILD-hello +@@ -1,7 +1,7 @@ + pkgname='libretools-hello' + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) +diff --git a/test/test-common.sh b/test/test-common.sh +index 5c238e18..3f3763cb 100644 +--- a/test/test-common.sh ++++ b/test/test-common.sh +@@ -51,7 +51,7 @@ setup_chrootdir() { + _common_before() { + mkdir -p "$XDG_CONFIG_HOME"/libretools + +- echo "BLACKLIST=https://git.parabola.nu/blacklist.git/plain/blacklist.txt" >"$XDG_CONFIG_HOME"/libretools/libretools.conf ++ echo "BLACKLIST=https://git.hyperbola.info:50100/software/blacklist.git/plain/blacklist.txt" >"$XDG_CONFIG_HOME"/libretools/libretools.conf + + printf 'CHROOTDIR=%q\n' "${chrootdir}" > "$XDG_CONFIG_HOME"/libretools/chroot.conf + printf 'CHROOT=%q\n' default >> "$XDG_CONFIG_HOME"/libretools/chroot.conf +diff --git a/test/toru.d/libre/simple/PKGBUILD b/test/toru.d/libre/simple/PKGBUILD +index e2d44d1a..b61be460 100644 +--- a/test/toru.d/libre/simple/PKGBUILD ++++ b/test/toru.d/libre/simple/PKGBUILD +@@ -1,7 +1,7 @@ + pkgname='simple' + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) +diff --git a/test/toru.d/libre/split/PKGBUILD b/test/toru.d/libre/split/PKGBUILD +index fe25a944..b29e9ed2 100644 +--- a/test/toru.d/libre/split/PKGBUILD ++++ b/test/toru.d/libre/split/PKGBUILD +@@ -1,7 +1,7 @@ + pkgname=(foo bar baz) + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) +diff --git a/test/toru.d/libre/split-base/PKGBUILD b/test/toru.d/libre/split-base/PKGBUILD +index ce547c5f..20a798ea 100644 +--- a/test/toru.d/libre/split-base/PKGBUILD ++++ b/test/toru.d/libre/split-base/PKGBUILD +@@ -2,7 +2,7 @@ pkgbase=split-base + pkgname=(FOO BAR BAZ) + pkgver=1.0 + license=('GPL') +-url='https://parabola.nu' ++url='https://www.hyperbola.info' + + pkgrel=1 + arch=(any) diff --git a/libretools/libretools.install b/libretools/libretools.install new file mode 100644 index 0000000..ea50e77 --- /dev/null +++ b/libretools/libretools.install @@ -0,0 +1,20 @@ +#!/bin/sh + +# arg 1: the new package version +post_install() { + librefetch-install install etc/makepkg.conf +} + +## arg 1: the new package version +## arg 2: the old package version +post_upgrade() { + if [[ "$(vercmp 20170505 "$2")" -eq 1 ]]; then + echo ":: The archroot format has changed from v3 to v4;" + echo " you will need delete and re-create your chroots." + fi + librefetch-install install etc/makepkg.conf +} + +pre_remove() { + librefetch-install remove etc/makepkg.conf +} diff --git a/libretools/remove-systemd_stdin_hack.patch b/libretools/remove-systemd_stdin_hack.patch new file mode 100644 index 0000000..a975a31 --- /dev/null +++ b/libretools/remove-systemd_stdin_hack.patch @@ -0,0 +1,30 @@ +diff --git b/remove-systemd_stdin_hack.patch b/remove-systemd_stdin_hack.patch +new file mode 100644 +index 00000000..e69de29b +diff --git a/src/chroot-tools/librechroot b/src/chroot-tools/librechroot +index 7b1c8c2c..783d3e57 100755 +--- a/src/chroot-tools/librechroot ++++ b/src/chroot-tools/librechroot +@@ -398,14 +398,14 @@ main() { + umask 0022 + + # XXX: SYSTEMD-STDIN HACK +- if ! [[ -t 0 ]]; then +- error "Input is not a TTY" +- plain "https://labs.parabola.nu/issues/431" +- plain "https://bugs.freedesktop.org/show_bug.cgi?id=70290" +- prose "Due to a bug in systemd-nspawn, redirecting stdin is not +- supported." >&2 +- return 1 +- fi ++ #if ! [[ -t 0 ]]; then ++ # error "Input is not a TTY" ++ # plain "https://labs.parabola.nu/issues/431" ++ # plain "https://bugs.freedesktop.org/show_bug.cgi?id=70290" ++ # prose "Due to a bug in systemd-nspawn, redirecting stdin is not ++ # supported." >&2 ++ # return 1 ++ #fi + + # Keep this lock for as long as we are running + # Note that '9' is the same FD number as in mkarchroot et al. diff --git a/librsvg-legacy/PKGBUILD b/librsvg-legacy/PKGBUILD new file mode 100644 index 0000000..3425ea3 --- /dev/null +++ b/librsvg-legacy/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +# Based on librsvg package + +_pkgname=librsvg +pkgname=librsvg-legacy +pkgver=2.40.21 +_debver=$pkgver +_debrel=0 +pkgrel=3 +pkgdesc="SVG rendering library" +url='https://wiki.gnome.org/Projects/LibRsvg' +arch=(i686 x86_64) +license=(LGPL-2) +replaces=(librsvg) +conflicts=(librsvg) +provides=(librsvg) +depends=(gdk-pixbuf2 pango libcroco) +makedepends=(intltool gobject-introspection vala tauthon quilt) +source=(https://download.gnome.org/sources/$_pkgname/${pkgver:0:4}/$_pkgname-$pkgver.tar.xz + https://snapshot.debian.org/archive/debian-security/20200722T102253Z/pool/updates/main/libr/librsvg/librsvg_${_debver}-${_debrel}+deb9u1.debian.tar.xz) +sha512sums=('db0563d8e0edaae642a6b2bcd239cf54191495058ac8c7ff614ebaf88c0e30bd58dbcd41f58d82a9d5ed200ced45fc5bae22f2ed3cf3826e9348a497009e1280' + 'f3c8c1f889c7a930e8858ed87b30dac4faaa94c5ffd55bb65f3f88768ad20a80348b8b5617e433b9a12235a27a8bad7886dd9528cfca8e980e54bffad3ba5572') + +prepare() { + cd $_pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $_pkgname-$pkgver + ./configure --prefix=/usr --disable-static --enable-vala --disable-gtk-doc + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' libtool + make +} + +package() { + cd $_pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + install -Dm644 COPYING.LIB $pkgdir/usr/share/licenses/$pkgname/COPYING.LIB +} diff --git a/librsync/PKGBUILD b/librsync/PKGBUILD new file mode 100644 index 0000000..9ae56ec --- /dev/null +++ b/librsync/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=librsync +pkgver=2.3.1 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Free and libre library for calculating and applying network deltas" +arch=('i686' 'x86_64') +url='http://librsync.sourcefrog.net/' +license=('LGPL-2.1') +depends=('popt' 'bzip2' 'zlib' 'libb2') +makedepends=('cmake' 'doxygen' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/$pkgname/$pkgname/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libr/librsync/librsync_$_debver-$_debrel.debian.tar.xz") +sha512sums=('89e5b5ad960b8036acce41df09f5e50601d7eb57d48a2bd21c4ee54a3a375f62ee514036b9a562277b5656735b84cadf6f54cbf48c364bbf0c04f2d95ae3b5a6' + '9c9b77d36ffa5bfaf6d6d480a64e4c97c9d077718aa40348ba6dc0f7de0b69e40bd14f510311b4c17629da31a602c18e4368ed7889288ff8837c9e60d8e22cf2') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + cmake \ + -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib + make -C build +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make -C build DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libsamplerate/PKGBUILD b/libsamplerate/PKGBUILD new file mode 100644 index 0000000..cbf1764 --- /dev/null +++ b/libsamplerate/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=libsamplerate +pkgver=0.2.1 +pkgrel=1 +pkgdesc="An audio sample rate conversion library" +arch=('i686' 'x86_64') +url="https://libsndfile.github.io/libsamplerate/" +license=('Simplified-BSD') +depends=('glibc') +makedepends=('alsa-lib' 'cmake' 'libsndfile' 'opus' 'flac' 'libvorbis') +checkdepends=('fftw') +source=("https://github.com/libsndfile/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.bz2"{,.sig}) +sha512sums=('f54f7f12c9536868d7a11fc9cbb86857505e7b75fe34cedaf0b9bfc864da6037296b3eae303a33d4c87b7fd20d96933b91ef59c8cc3d1313b9fc21654e5daa2d' + 'SKIP') +validpgpkeys=('31D95CAB6D80D262244A1750A47620E801E47E95') # David Seifert soap@gentoo.org + +build() { + cd "${pkgname}-${pkgver}" + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE='None' \ + -DBUILD_SHARED_LIBS=ON \ + -Wno-dev \ + -B build \ + -S . + make VERBOSE=1 -C build +} + +check() { + cd "${pkgname}-${pkgver}" + make test -C build +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install -C build + install -vDm 644 {AUTHORS,NEWS,README.md,ChangeLog} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libsass/PKGBUILD b/libsass/PKGBUILD new file mode 100644 index 0000000..52b6662 --- /dev/null +++ b/libsass/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=libsass +pkgver=3.6.4 +pkgrel=1 +pkgdesc="C implementation of Sass CSS preprocessor (library)." +arch=(i686 x86_64) +url="https://sass-lang.com/libsass" +license=(Expat) +source=($pkgname-$pkgver.tar.gz::https://github.com/sass/$pkgname/archive/$pkgver.tar.gz) +sha512sums=('1f79553be31949d45adf440dcbcf4b828a7e4f71c6f63f288f99451fccc490ebf0c68c58d91deabede37962e35a8cf9af8b0d60d89349fd0adea1ac061c8c2c8') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + autoreconf -i +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + export LIBSASS_VERSION="$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir/" install + install -D -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/libsbsms/PKGBUILD b/libsbsms/PKGBUILD new file mode 100644 index 0000000..03ef221 --- /dev/null +++ b/libsbsms/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=libsbsms +pkgver=2.0.2 +_debver=2.0.2 +_debrel=2 +pkgrel=1 +pkgdesc='C++ library for high quality time stretching and pitch scaling of audio.' +arch=('i686' 'x86_64') +url='http://sbsms.sourceforge.net/' +license=('GPL-2') +depends=('gcc-libs' 'glibc') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/libs/libsbsms/${pkgname}_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/libs/libsbsms/libsbsms_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('361efc5e9712ad95b3d5c9e2cce717387776a6d948bb03b7983153d78d91d1cb01806f69c7992089823f69fd4273fee914fc5ced29de6f232c23272f6caa34fc' + '1d7293647ffe578c9ba72bf2841cbee06726298e186c1c436d1d76671652796ff251f766286784155c57995fcca651abf65f7a7892f53b02aa92f8630ebc2566') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr \ + --libdir=/usr/lib + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libsidplay/PKGBUILD b/libsidplay/PKGBUILD new file mode 100644 index 0000000..b518e5a --- /dev/null +++ b/libsidplay/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libsidplay +pkgver=1.36.60 +_debver=1.36.60 +_debrel=1 +pkgrel=1 +pkgdesc="A library for playing SID music files." +arch=('i686' 'x86_64') +url="https://critical.ch/distfiles/" +license=('GPL-2') +depends=('gcc-libs') +makedepends=('quilt') +source=(https://deb.debian.org/debian/pool/main/libs/libsidplay/libsidplay_$pkgver.orig.tar.bz2 + https://deb.debian.org/debian/pool/main/libs/libsidplay/libsidplay_$_debver-$_debrel.debian.tar.xz + libsidplay-1.36.59-gcc43.patch + g++-6_build.patch) +sha512sums=('51433057a910e99c6e888ad5f07c19721605565db6eb3ded7a13f90a4fe4e467f20e0b7ad15a4662d091bcaac3da4064d27dd7a73715b8012f1b1067cd3e38d6' + '016ef548fd01031c5c6a5cbdbdad1f1d7947d57b25a727258a358229bce9a7d5e48e85493f723d733810530661b7451bd5e91eeaf56956112a588bc7101efb8d' + '8ea90b2daffa1240729477f115bc57703c04bf4e44b7e1085b48a546d78886b61e514a5fc2d99906dca208baf364f8c4ba3e8f09774700ecd04ca47c7a8bea9e' + 'd7b2f77ef755b4c69eb05ba4292ba2371dcac4aa8f1a67819816031ab2ddc1e869677b9b40e0792921c009b8c7df1df508e2ba5a79c466565b40cc9fc33e2423') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -Np1 -i ../libsidplay-1.36.59-gcc43.patch + patch -Np1 -i ../g++-6_build.patch + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/libsidplay/g++-6_build.patch b/libsidplay/g++-6_build.patch new file mode 100644 index 0000000..91e2064 --- /dev/null +++ b/libsidplay/g++-6_build.patch @@ -0,0 +1,28 @@ +Description: use unsigned char to keep int value + Use unsigned char to keep all bits of int values in the array. +Author: Laszlo Boszormenyi (GCS) +Bug-Debian: https://bugs.debian.org/811762 +Last-Update: 2016-07-16 + +--- + +--- libsidplay-1.36.59.orig/src/samples.cpp ++++ libsidplay-1.36.59/src/samples.cpp +@@ -75,7 +75,7 @@ struct sampleChannel + sampleChannel ch4, ch5; + + +-const sbyte galwayNoiseTab1[16] = ++const ubyte galwayNoiseTab1[16] = + { + 0x80,0x91,0xa2,0xb3,0xc4,0xd5,0xe6,0xf7, + 0x08,0x19,0x2a,0x3b,0x4c,0x5d,0x6e,0x7f +@@ -84,7 +84,7 @@ const sbyte galwayNoiseTab1[16] = + ubyte galwayNoiseVolTab[16]; + sbyte galwayNoiseSamTab[16]; + +-const sbyte sampleConvertTab[16] = ++const ubyte sampleConvertTab[16] = + { + // 0x81,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff, + // 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x7f diff --git a/libsidplay/libsidplay-1.36.59-gcc43.patch b/libsidplay/libsidplay-1.36.59-gcc43.patch new file mode 100644 index 0000000..5beef46 --- /dev/null +++ b/libsidplay/libsidplay-1.36.59-gcc43.patch @@ -0,0 +1,40 @@ +diff --git a/src/sidtune.cpp b/src/sidtune.cpp +index 4d1d33b..6fbae80 100644 +--- a/src/sidtune.cpp ++++ b/src/sidtune.cpp +@@ -306,11 +306,7 @@ udword sidTune::loadFile(const char* fileName, ubyte** bufferRef) + return 0; + } + // Open binary input file stream at end of file. +-#if defined(SID_HAVE_IOS_BIN) +- ifstream myIn( fileName, ios::in|ios::bin|ios::ate ); +-#else + ifstream myIn( fileName, ios::in|ios::binary|ios::ate ); +-#endif + // As a replacement for !is_open(), bad() and the NOT-operator + // don't seem to work on all systems. + #if defined(SID_DONT_HAVE_IS_OPEN) +@@ -972,11 +968,7 @@ bool sidTune::saveC64dataFile( const char* fileName, bool overWriteFlag ) + } + // Open binary output file stream. + else +-#if defined(SID_HAVE_IOS_BIN) +- fMyOut.open( fileName, ios::out|ios::bin|ios::trunc ); +-#else + fMyOut.open( fileName, ios::out|ios::binary|ios::trunc ); +-#endif + if ( !fMyOut ) + { + info.statusString = text_cantCreateFile; +@@ -1061,11 +1053,7 @@ bool sidTune::savePSIDfile( const char* fileName, bool overWriteFlag ) + } + // Open binary output file stream. + else +-#if defined(SID_HAVE_IOS_BIN) +- fMyOut.open( fileName, ios::out|ios::bin|ios::trunc ); +-#else + fMyOut.open( fileName, ios::out|ios::binary|ios::trunc ); +-#endif + if ( !fMyOut ) + { + info.statusString = text_cantCreateFile; diff --git a/libsidplayfp/PKGBUILD b/libsidplayfp/PKGBUILD new file mode 100644 index 0000000..b39aeab --- /dev/null +++ b/libsidplayfp/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=libsidplayfp +pkgver=2.3.0 +pkgrel=1 +pkgdesc="Library to play Commodore 64 music, derived from libsidplay2" +url='https://github.com/libsidplayfp/libsidplayfp' +arch=('i686' 'x86_64') +license=('GPL-2') +makedepends=('xa') +source=("https://downloads.sourceforge.net/project/sidplay-residfp/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('2141bc9768353fadbb8c6f4ba6904388048d4d1432424b87fe60162135059d5c9312f7bf01c67a75eda8b4697d801bc2020f88b696794311eef88864ae65d974') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + DESTDIR="$pkgdir" make -C $pkgname-$pkgver install + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libsigc++/PKGBUILD b/libsigc++/PKGBUILD new file mode 100644 index 0000000..e873711 --- /dev/null +++ b/libsigc++/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=libsigc++ +pkgver=2.10.4 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Callback Framework for C++" +url='https://libsigcplusplus.github.io/libsigcplusplus/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('gcc-libs' 'libxslt') +makedepends=('mm-common' 'meson' 'quilt') +options=(!emptydirs) +source=("https://download.gnome.org/sources/libsigc++/${pkgver:0:4}/libsigc++-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/libs/libsigc++-2.0/libsigc++-2.0_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ced303312339b4598e57dcd4325c310cf96f907ff3de3ac3c03ba7849ef4c7e988896aab300252ec6b6af054eed092fdbe516aa8413d1569503ef1a67ab9b711' + '7e9d22bfde3325b07dc7d8f01f1c77063edc314a22bfafc322c805d2fdbbbed7e72ad75e7743d571f52c060a338d4104dad48d9f7d5555b05413833b87642120') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgname-$pkgver build -D maintainer-mode=true -D build-documentation=false + ninja -C build +} + +package() { + provides=("libsigc++2.0=${pkgver}") + replaces=('libsigc++2.0') + conflicts=('libsigc++2.0') + + DESTDIR="$pkgdir" meson install -C build + + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libsigsev/PKGBUILD b/libsigsev/PKGBUILD new file mode 100644 index 0000000..82f18f0 --- /dev/null +++ b/libsigsev/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=libsigsegv +pkgver=2.13 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc='Page fault detection library' +url='https://www.gnu.org/software/libsigsegv/' +license=('GPL-2') +depends=('glibc') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('9c0cf01ee2a39f77f2e42eb06a2aa60644e10fe2cd39089de58f6206baf7fe7d61fe0ec6bf187276fcfccf61585154ce904fe374b474b7ba9fa050a61a2f3918' + 'SKIP') +validpgpkeys=('68D94D8AAEEAD48AE7DC5B904F494A942E4616C2' + '9001B85AF9E1B83DF1BDA942F5BE8B267C6A406D') # Bruno Haible (Open Source Development) + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --enable-shared + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libslirp/PKGBUILD b/libslirp/PKGBUILD new file mode 100644 index 0000000..a4eb166 --- /dev/null +++ b/libslirp/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=libslirp +pkgver=4.4.0 +pkgrel=1 +pkgdesc='General purpose TCP-IP emulator' +arch=(i686 x86_64) +url='https://gitlab.freedesktop.org/slirp/libslirp' +license=(Modified-BSD) +depends=(glib2) +makedepends=(meson) +source=("https://gitlab.freedesktop.org/slirp/$pkgname/-/archive/v$pkgver/$pkgname-v$pkgver.tar.bz2") +sha512sums=('ee65e56eac3689109a58a94af1edf9a54ad238ec42d8eb72f69d04749593b5f20190abda8ea3fb3863b24936813764804155787d3370141b1322d07950a89e89') + +build() { + hyperbola-meson $pkgname-v$pkgver build + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-v$pkgver/COPYRIGHT "$pkgdir/usr/share/licenses/$pkgname/COPYRIGHT" +} diff --git a/libsm/PKGBUILD b/libsm/PKGBUILD new file mode 100644 index 0000000..8d554db --- /dev/null +++ b/libsm/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libsm +_openbsdver=6.9 +pkgver=1.2.3 +pkgrel=3 +pkgdesc="X11 Session Management library, provided by Xenocara" +arch=('i686' 'x86_64') +license=('X11') +url="https://www.xenocara.org" +depends=('libice' 'libutil-linux') +makedepends=('xenocara-util-macros' 'libxtrans') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libsm-$pkgver.tar.lz{,.sig}) +sha512sums=('7e4099e66a308957c95e38a99c575315777685da5dd124fada807e3c810a60a4e9a51944a998d31a64ad3646c482beb21d81ccaa66bf781c5f4cd73176791718' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libSM" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libSM" + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libSM" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libsndfile/PKGBUILD b/libsndfile/PKGBUILD new file mode 100644 index 0000000..6df8eda --- /dev/null +++ b/libsndfile/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. +# Contribute: Márcio Silva + +pkgname=libsndfile +pkgver=1.0.31 +_debver=1.0.31 +_debrel=1 +pkgrel=2 +pkgdesc="A C library for reading and writing files containing sampled audio data" +arch=('i686' 'x86_64') +url="https://libsndfile.github.io/libsndfile/" +license=('LGPL-2.1') +depends=('flac' 'glibc' 'libogg' 'libvorbis' 'opus' 'speex') +makedepends=('alsa-lib' 'cmake' 'libsndio' 'python' 'sqlite' 'quilt') +source=(https://github.com/${pkgname}/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.bz2{,.sig} + https://deb.debian.org/debian/pool/main/libs/libsndfile/libsndfile_$_debver-$_debrel.debian.tar.xz + sndio.patch) +sha512sums=('62202092e5cac6346fd3c0a977380e9bf888fc59d08c9c9707dc254a8ef6ed6356da2ab0430bb970c7b06ba5bb1dafa5d7b0fe13898834c1fe4acb16f409f0e1' + 'SKIP' + '253bce54391694671d724333cbbeba1ef22ce724557ff3f622014d33ca22dfd51e6b9d2248b75f025a2ed78def8f38ffbb53bd7ade6e8f2d3f1b7e3689a7c7a7' + '051dfa1e1d6fdd3de0c2a847c8131aeb31fae5fe9705af13c3e52a3d7b7df50a8b5c8843c0f803486e254c734cc05ecef68bc01a4b5163be8a48dd33d86af1b5') +validpgpkeys=('6A91A5CF22C24C99A35E013FCFDCF91FB242ACED' # Erik de Castro Lopo + '9B1CFD2E92239C4B288E025F9D0D1F1CCB35FF8C' # evpobr evpobr@gmail.com + '31D95CAB6D80D262244A1750A47620E801E47E95' # David Seifert soap@gentoo.org +) + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -p1 -i ../sndio.patch + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + # tests can only be built with static libs + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE='None' \ + -Wno-dev \ + -B build-test \ + -S . + make VERBOSE=1 -C build-test + + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE='None' \ + -DBUILD_SHARED_LIBS=ON \ + -Wno-dev \ + -B build \ + -S . + make VERBOSE=1 -C build +} + +check() { + cd "$pkgname-$pkgver" + make test -C build-test +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install -C build + install -vDm 644 {AUTHORS,ChangeLog,NEWS,README} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libsndfile/sndio.patch b/libsndfile/sndio.patch new file mode 100644 index 0000000..6584c4a --- /dev/null +++ b/libsndfile/sndio.patch @@ -0,0 +1,51 @@ +diff --git a/configure.ac b/configure.ac +index 78a79da..3892bd3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -491,7 +491,7 @@ dnl Check for OpenBSD's sndio. + SNDIO_LIBS="" + HAVE_SNDIO_H=0 + AS_CASE([$host_os], +- [openbsd*], [ ++ [openbsd*|linux*], [ + AC_CHECK_HEADERS(sndio.h) + AS_IF([test "x$ac_cv_header_sndio_h" = "xyes"], [ + SNDIO_LIBS="-lsndio" +diff --git a/man/sndfile-play.1 b/man/sndfile-play.1 +index f36d131..3252889 100644 +--- a/man/sndfile-play.1 ++++ b/man/sndfile-play.1 +@@ -14,7 +14,7 @@ output APIs. The following table summarizes which audio API is used where: + .Pp + .Bl -tag -width MacOSX10XXX -compact + .It Linux +-ALSA or OSS ++ALSA, OSS or sndio + .It OpenBSD + sndio + .It FreeBSD +diff --git a/programs/sndfile-play.c b/programs/sndfile-play.c +index cd5cc27..be4eaef 100644 +--- a/programs/sndfile-play.c ++++ b/programs/sndfile-play.c +@@ -54,6 +54,10 @@ + #include + #endif + ++#if HAVE_SNDIO_H ++ #include ++#endif ++ + #if defined (__ANDROID__) + + #elif defined (__linux__) || defined (__FreeBSD_kernel__) || defined (__FreeBSD__) +@@ -61,9 +65,6 @@ + #include + #include + +-#elif HAVE_SNDIO_H +- #include +- + #elif (defined (sun) && defined (unix)) + #include + #include diff --git a/libsodium/PKGBUILD b/libsodium/PKGBUILD new file mode 100644 index 0000000..78c08f0 --- /dev/null +++ b/libsodium/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=libsodium +pkgver=1.0.18 +pkgrel=1 +pkgdesc="P(ortable|ackageable) NaCl-based crypto library" +arch=('i686' 'x86_64') +url="https://github.com/jedisct1/libsodium" +license=('ISC') +depends=('glibc') +makedepends=('minisign') +source=("https://download.libsodium.org/libsodium/releases/libsodium-$pkgver.tar.gz"{,.minisig}) +sha512sums=('17e8638e46d8f6f7d024fe5559eccf2b8baf23e143fadd472a7d29d228b186d86686a5e6920385fe2020729119a5f12f989c3a782afbd05a8db4819bb18666ef' + 'e0cf76872079c295d71cf60d7bf95dc67d2285f4786b8bc47bbc6c0adbef05f6e0cb14a5100b8a1b7115eeed70cfd2f6574e198df620bbe60cf884187e6a903f') +_validminisignkey='RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' + +prepare() { + minisign -Vm $pkgname-$pkgver.tar.gz -P $_validminisignkey +} + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +check() { + cd "$pkgname-$pkgver" + make check +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # install license + install -d -m 755 "$pkgdir/usr/share/licenses/$pkgname" + install -m 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/libsoup/CVE-2024-52531-1.patch b/libsoup/CVE-2024-52531-1.patch new file mode 100644 index 0000000..7ccfba1 --- /dev/null +++ b/libsoup/CVE-2024-52531-1.patch @@ -0,0 +1,39 @@ +From: Patrick Griffis +Date: Mon, 16 Sep 2024 13:56:09 -0500 +Subject: Define GLIB_VERSION_MAX_ALLOWED and GLIB_VERSION_MIN_REQUIRED + +(cherry picked from commit 3c54033634ae537b52582900a7ba432c52ae8174) +--- + meson.build | 3 +++ + tests/hsts-db-test.c | 3 ++- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index 130f813..459eccc 100644 +--- a/meson.build ++++ b/meson.build +@@ -125,6 +125,9 @@ endif + + cdata = configuration_data() + ++cdata.set('GLIB_VERSION_MAX_ALLOWED', 'GLIB_VERSION_2_66') ++cdata.set('GLIB_VERSION_MIN_REQUIRED', 'GLIB_VERSION_2_66') ++ + brotlidec_dep = dependency('libbrotlidec', required : get_option('brotli')) + if brotlidec_dep.found() + cdata.set('WITH_BROTLI', true) +diff --git a/tests/hsts-db-test.c b/tests/hsts-db-test.c +index 9f007fa..121a4a1 100644 +--- a/tests/hsts-db-test.c ++++ b/tests/hsts-db-test.c +@@ -1,8 +1,9 @@ ++#include "test-utils.h" ++ + #include + #include + + #include +-#include "test-utils.h" + + #define DB_FILE "hsts-db.sqlite" + diff --git a/libsoup/PKGBUILD b/libsoup/PKGBUILD new file mode 100644 index 0000000..1b31fb1 --- /dev/null +++ b/libsoup/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=libsoup +pkgver=2.74.3 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="HTTP client/server library" +url='https://wiki.gnome.org/Projects/libsoup' +arch=('i686' 'x86_64') +license=('LGPL-2') +depends=('glib2' 'libxml2' 'glib-networking' 'sqlite' 'krb5' 'libpsl') +makedepends=('gobject-introspection' 'python' 'vala' 'meson' 'quilt') +source=("https://download.gnome.org/sources/${pkgname}/${pkgver:0:4}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4_${_debver}-${_debrel}+deb12u1.debian.tar.xz" + "CVE-2024-52531-1.patch") +sha512sums=('72f8a055df984cb35105fe67f4ca67d3fb110d40a9cacb660fccd89f93b06bc32e25d94375dcc76608a245f7c5e081d968d7aaf5952eb16013d81c741247cb4c' + '411ac63e5ed7a62083d1a33e67887f96fccc30ed14c01e9a6e5c1b09a8b532e04d0594926ec143d10f02398bc894465bbad375aa16f56942b097cfa6d25a2172' + '145e32799a1e9e2d3e97ecc605507ea7ca6d7191e155900ba156b1bedb518ea8e642399a91d39471eb2088e5316096a9d1a5bb2ddb51b912f1a0e46274289319') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/CVE-2024-52531-1.patch || true + + quilt push -av + fi + patch -Np1 -i ${srcdir}/CVE-2024-52531-1.patch +} + +build() { + hyperbola-meson $pkgname-$pkgver build -D gtk_doc=false -D ntlm=disabled -D sysprof=disabled -D brotli=disabled + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libsoxr/PKGBUILD b/libsoxr/PKGBUILD new file mode 100644 index 0000000..1019f57 --- /dev/null +++ b/libsoxr/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=libsoxr +pkgver=0.1.3 +_debver=0.1.3 +_debrel=4 +pkgrel=1 +pkgdesc='The SoX Resampler library that aims to give fast and high quality results for any constant resampling ratio' +arch=('i686' 'x86_64') +url='https://sourceforge.net/p/soxr/wiki/Home/' +license=('LGPL-2.1') +depends=('gcc-libs') +makedepends=('cmake' 'quilt') +source=("https://downloads.sourceforge.net/project/soxr/soxr-$pkgver-Source.tar.xz" + "https://deb.debian.org/debian/pool/main/libs/libsoxr/libsoxr_$_debver-$_debrel.debian.tar.xz") +sha512sums=('f4883ed298d5650399283238aac3dbe78d605b988246bea51fa343d4a8ce5ce97c6e143f6c3f50a3ff81795d9c19e7a07217c586d4020f6ced102aceac46aaa8' + 'd1ee99c364a94032a187930e41abd12d86f1c9767cb42f54d8468e31cf6f04861ce29e307d2719a3080de94fe0f64d049f30afe3745e67a43da8f85c4227f0f2') + +prepare() { + if [[ -d build ]]; then + rm -rf build + fi + mkdir build + + cd soxr-${pkgver}-Source + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + + cmake ../soxr-${pkgver}-Source \ + -DCMAKE_BUILD_TYPE='Release' \ + -DCMAKE_INSTALL_PREFIX='/usr' \ + -DBUILD_EXAMPLES='OFF' \ + -DBUILD_SHARED_LIBS='ON' \ + -DWITH_AVFFT='ON' \ + -DWITH_LSR_BINDINGS='ON' \ + -DWITH_OPENMP='ON' \ + -DWITH_PFFFT='ON' + make +} + +check() { + cd build + + make test +} + +package() { + cd build + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/share/doc + install -Dm644 ../soxr-${pkgver}-Source/LICENCE -t "${pkgdir}"/usr/share/licenses/libsoxr/ +} + +# vim: ts=2 sw=2 et: diff --git a/libspectre/PKGBUILD b/libspectre/PKGBUILD new file mode 100644 index 0000000..370f501 --- /dev/null +++ b/libspectre/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=libspectre +pkgver=0.2.9 +pkgrel=1 +pkgdesc="Small library for rendering Postscript documents" +arch=('i686' 'x86_64') +license=('GPL-2') +url="https://www.freedesktop.org/wiki/Software/libspectre" +depends=('ghostscript>=9.00') +source=(https://libspectre.freedesktop.org/releases/${pkgname}-${pkgver}.tar.gz) +sha512sums=('7c24b5c83c6d356c89417d09dc76566afbe886ec189fe80d030a239c23ad25b061db071768117fa06805aa3d86f749fb232b7491bd7d467f26a40e348e74d5d2') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/libspf2/PKGBUILD b/libspf2/PKGBUILD new file mode 100644 index 0000000..7bff29a --- /dev/null +++ b/libspf2/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=libspf2 +pkgver=1.2.10 +_debver=$pkgver +_debrel=7.1 +pkgrel=1 +pkgdesc="Sender Policy Framework record checking library" +arch=('i686' 'x86_64') +url='https://www.libspf2.org/' +license=('LGPL-2.1') +depends=('glibc' 'libnsl') +makedepends=('libmilter' 'quilt') +source=("https://www.libspf2.org/spf/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libs/libspf2/libspf2_${_debver}-${_debrel}~deb11u1.debian.tar.xz") +sha512sums=('162ce382628c6fcadac3e11f5a12442db622bb23f7ec503e16f5ba7fc88afdd777bce6b093c12a58210355985fd11b74b140f08fab347334d82d953dd183b130' + 'ce2ad5f3cf12ad7740fc84d51a3230e1f63ce7a3c937b73e6e8b7e4cc84b241a4afd99eec4c0fe62fad45612c4d30d29ff412e1543ec0c5b31ab06d7b7c3163f') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix='/usr' + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # remove unused binaries + rm -v "${pkgdir}"/usr/bin/*_static "${pkgdir}/usr/bin/spfd" "${pkgdir}/usr/bin/spf_example" "${pkgdir}/usr/bin/spftest" + + # license + install -Dm644 LICENSES -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libspiro/PKGBUILD b/libspiro/PKGBUILD new file mode 100644 index 0000000..de0c6fb --- /dev/null +++ b/libspiro/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=libspiro +epoch=1 +pkgver=20200505 +pkgrel=1 +pkgdesc='Simplifies the drawing of beautiful curves' +url='https://github.com/fontforge/libspiro' +license=('GPL-3') +arch=('i686' 'x86_64') +source=("https://github.com/fontforge/libspiro/releases/download/${pkgver}/libspiro-dist-${pkgver}.tar.gz") +sha512sums=('84627e8925bd6090cd7d234a0b5f3ee109d3341d24c038a0fb1ce4c09ab97fe8fc7eb92bc5df040d559c5ebe3b4fc8f51652a2538e155be9b2f3c78b96b706ee') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + autoreconf -i + automake --foreign -Wall +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + export LDFLAGS= + ./configure --prefix=/usr + make +} + +check() { + cd "${srcdir}/${pkgname}-${pkgver}" + make check +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 libspiro.pc "${pkgdir}"/usr/lib/pkgconfig/libspiro.pc + install -Dm644 COPYING "${pkgdir}"/usr/share/licenses/${pkgname}/COPYING +} diff --git a/libsquish/PKGBUILD b/libsquish/PKGBUILD new file mode 100644 index 0000000..64a055e --- /dev/null +++ b/libsquish/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=libsquish +pkgver=1.15 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="Free and libre DXT compression library" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/libsquish' +license=('Expat') +makedepends=('cmake' 'ninja' 'doxygen' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/libs/libsquish/libsquish_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/libs/libsquish/libsquish_${_debver}-${_debrel}.debian.tar.xz" + "${pkgname}-pkgconfig.pc") +sha512sums=('5b569b7023874c7a43063107e2e428ea19e6eb00de045a4a13fafe852ed5402093db4b65d540b5971ec2be0d21cb97dfad9161ebfe6cf6e5376174ff6c6c3e7a' + '53b9934e152c6bfe15eba159b5d76c7f504cb9471405ba61772ad885e386b79b8ba88b64dfbc93906b0cebae610b3398c5a64cc78180ffce1ff25d4d1301fea6' + 'f71808820673e725cee112d1b139d4e4ab5110590b2f3a5bd3cac0cbcc90fc297496a442ffc9bc1c829d06e0ccad71baf9c2651eb9d0c2acb556a9ec85e72602') + +prepare() { + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + quilt push -av + fi +} + +build() { + cmake \ + -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D BUILD_SHARED_LIBS=ON \ + -D BUILD_SQUISH_WITH_OPENMP=OFF \ + -G Ninja \ + -S . + ninja -C build +} + +package() { + (cd build; cmake -D CMAKE_INSTALL_PREFIX="$pkgdir/usr" -P cmake_install.cmake) + install -Dm644 CMakeModules/FindlibSquish.cmake "$pkgdir/usr/share/cmake/Modules/FindlibSquish.cmake" + install -Dm644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" + INSTALL_DIR="$pkgdir" LIB_PATH=usr/lib make uninstall install + + # cleanup and fixing + rm -frv "$pkgdir/include" + rm -rf "$pkgdir/usr/lib/pkgconfig" + install -Dm644 "$srcdir/${pkgname}-pkgconfig.pc" "$pkgdir/usr/lib/pkgconfig/${pkgname}.pc" +} diff --git a/libsquish/libsquish-pkgconfig.pc b/libsquish/libsquish-pkgconfig.pc new file mode 100644 index 0000000..c8f6d5c --- /dev/null +++ b/libsquish/libsquish-pkgconfig.pc @@ -0,0 +1,13 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +sharedlibdir=${libdir} +includedir=${prefix}/include + +Name: libsquish +Description: squish DXT library +Version: 1.15 + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lsquish +Cflags: -I${includedir} diff --git a/libssh/PKGBUILD b/libssh/PKGBUILD new file mode 100644 index 0000000..972c085 --- /dev/null +++ b/libssh/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=libssh +pkgver=0.9.8 +_debver=$pkgver +_debrel=0 +pkgrel=1 +pkgdesc="Library for accessing ssh client services through C libraries" +url='https://www.libssh.org/' +license=('LGPL-2.1') +arch=('i686' 'x86_64') +depends=('zlib' 'libressl') +makedepends=('cmake' 'doxygen' 'python' 'quilt') +source=("https://www.libssh.org/files/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/libs/libssh/libssh_${_debver}-${_debrel}+deb11u1.debian.tar.xz") +sha512sums=('d7a1687d1e47a0a2b99c2a43fcfbf39c549b368711ad407a66257e8c2c258163c63dae5896d1c6918ade297f639d08c7948e7e4e9345cb9097e0aa5390154218' + '847d44c1aa175fe117afa4d1ead1d6523343a8f52700281b2002ffe795bc8ae74fdc6b77ca2987765e1e5af1fab7c7180124e1ec9485c4c582c878643fbcdbca') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # disable the test. It is confused by our clean container setup. + # 'extra-x86-build' uses user 'nobody' that has a record in /etc/passwd file + # but $HOME envvar is set to '/build'. The test expects that $HOME corresponds to passwd file. + sed 's/cmocka_unit_test(torture_path_expand_tilde_unix),//' -i tests/unittests/torture_misc.c +} + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DWITH_GSSAPI=OFF \ + -DUNIT_TESTING=OFF + make -C build + make -C build docs +} + +package() { + make DESTDIR="$pkgdir" -C build install + mkdir -p "$pkgdir"/usr/share/doc/$pkgname + cp -r build/doc/html "$pkgdir"/usr/share/doc/$pkgname + install -Dm644 "$srcdir"/$pkgname-$pkgver/COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libstrophe/PKGBUILD b/libstrophe/PKGBUILD new file mode 100644 index 0000000..942d381 --- /dev/null +++ b/libstrophe/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libstrophe +pkgver=0.12.3 +pkgrel=1 +pkgdesc="Simple, lightweight C library for writing XMPP clients" +url='https://strophe.im/libstrophe/' +arch=('i686' 'x86_64') +license=('GPL-3' 'Expat') +depends=('glibc' 'libressl' 'expat') +makedepends=('doxygen') +source=("https://github.com/strophe/libstrophe/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('da4597faa3d277d4cf557e07a10d8974239de38a0396a545f98ea5f8c39c1e00b0de9cde56a2a438115ad07c98658859c8b623273f083ce1f642a000ecc4efde') + +prepare() { + cd ${pkgbase}-${pkgver} + autoreconf -fiv +} + +build() { + cd ${pkgbase}-${pkgver} + ./configure \ + --prefix=/usr + make + doxygen +} + +package() { + cd ${pkgbase}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 docs/html/* -t "${pkgdir}/usr/share/doc/${pkgname}/html" + install -Dm 644 examples/{README.md,*.c} -t "${pkgdir}/usr/share/doc/${pkgname}/examples" + install -Dm 644 {MIT,GPL}-LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libtar/PKGBUILD b/libtar/PKGBUILD new file mode 100644 index 0000000..b04f956 --- /dev/null +++ b/libtar/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=libtar +pkgver=1.2.20 +_debver=1.2.20 +_debrel=8 +pkgrel=1 +pkgdesc='C library for manipulating POSIX tar files' +arch=('i686' 'x86_64') +url='https://github.com/tklauser/libtar' +license=('Modified-BSD') +depends=('zlib') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/tklauser/libtar/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libt/libtar/libtar_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('11a12695abf4f9668801d24b7b552daed1219b2f395c09818d15e16721f7136d63aa0c09e442401e4fedbf7335748f0dc46f8da21b94b36595910b2fe44d4aea' + 'db2e29c89e77ae77429b0506adbd7b8191eadbf3a3a1328508c04f5b0dc68552084edc3abe0f24689baa02ca05f65dc8698f557031a3377fe384bad4e95b7f4d') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -vfi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --disable-static \ + --disable-encap \ + --disable-epkg-install + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYRIGHT -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/libtermkey/PKGBUILD b/libtermkey/PKGBUILD new file mode 100644 index 0000000..585f176 --- /dev/null +++ b/libtermkey/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=libtermkey +pkgver=0.22 +pkgrel=1 +pkgdesc='Library for easy processing of keyboard entry from terminal-based programs' +arch=('i686' 'x86_64') +url='http://www.leonerd.org.uk/code/libtermkey' +license=('Expat') +depends=('unibilium') +source=("http://www.leonerd.org.uk/code/${pkgname}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('2e8242cd1e6acb8900125dcee9fd47f7554c359363f760b88858c82667e1f3871bdd87358b14c8a133ef3cd2699947a5045477e64cdf7f96d4ead1723e73a219') + +build() { + cd "${pkgname}-${pkgver}/" + make PREFIX=/usr +} + +package() { + cd "${pkgname}-${pkgver}/" + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libthai/PKGBUILD b/libthai/PKGBUILD new file mode 100644 index 0000000..244e9c4 --- /dev/null +++ b/libthai/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=libthai +pkgver=0.1.28 +pkgrel=1 +pkgdesc="Thai language support routines" +url="https://linux.thai.net/projects/libthai" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('libdatrie') +makedepends=('pkg-config') +options=('!emptydirs') +source=(https://linux.thai.net/pub/thailinux/software/${pkgname}/${pkgname}-${pkgver}.tar.xz) +sha512sums=('925be8367ae0cba026e602f1f60c813306e9051e22fe722afba496b6e493f8c1f3eb56abb77ca663f53678b14ad793daf3269b32d32720c0d869b906cdf15f4e') + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/libtheora/PKGBUILD b/libtheora/PKGBUILD new file mode 100644 index 0000000..d5db635 --- /dev/null +++ b/libtheora/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=libtheora +pkgver=1.1.1 +_debver=1.1.1+dfsg.1 +_debrel=15 +pkgrel=4 +pkgdesc="A free video codec developed by the Xiph.org" +arch=('i686' 'x86_64') +url="https://www.theora.org/" +license=('Modified-BSD') +depends=('libogg') +makedepends=('libvorbis' 'quilt') +source=(https://downloads.xiph.org/releases/theora/libtheora-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/libt/libtheora/libtheora_$_debver-$_debrel.debian.tar.xz + libtheora-1.1.1-libpng16.patch) +sha512sums=('9ab9b3af1c35d16a7d6d84f61f59ef3180132e30c27bdd7c0fa2683e0d00e2c791accbc7fd2c90718cc947d8bd10ee4a5940fb55f90f1fd7b0ed30583a47dbbd' + 'ebee94506621c7220bb2febb63f5444a65d7c8b49d611058799dc51504f3152b49313542b0007b225d0fe94ed3d2a6fc0db51b344844e25a0496e547e1be1d40' + '856da5da7788863c59c9cb6c4fa102d250e60d6b302a5c118799169bcbc5350ab0bf6798f2ae2586f1d361ff9030d1d715214d8df900d7e1aa4a4e1d58f44276') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -Np0 -i ../libtheora-1.1.1-libpng16.patch + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --enable-shared --disable-static + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 LICENSE COPYING "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/libtheora/libtheora-1.1.1-libpng16.patch b/libtheora/libtheora-1.1.1-libpng16.patch new file mode 100644 index 0000000..93da700 --- /dev/null +++ b/libtheora/libtheora-1.1.1-libpng16.patch @@ -0,0 +1,17 @@ +http://bugs.gentoo.org/465450 +http://trac.xiph.org/ticket/1947 + +--- examples/png2theora.c ++++ examples/png2theora.c +@@ -462,9 +462,9 @@ + png_set_strip_alpha(png_ptr); + + row_data = (png_bytep)png_malloc(png_ptr, +- 3*height*width*png_sizeof(*row_data)); ++ 3*height*width*sizeof(*row_data)); + row_pointers = (png_bytep *)png_malloc(png_ptr, +- height*png_sizeof(*row_pointers)); ++ height*sizeof(*row_pointers)); + for(y = 0; y < height; y++) { + row_pointers[y] = row_data + y*(3*width); + } diff --git a/libtiff/PKGBUILD b/libtiff/PKGBUILD new file mode 100644 index 0000000..3c36a04 --- /dev/null +++ b/libtiff/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=libtiff +pkgver=4.2.0 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="Library for manipulation of TIFF images" +url='http://www.simplesystems.org/libtiff/' +arch=('i686' 'x86_64') +license=('custom:Hylafax') +depends=('libjpeg-turbo' 'zlib' 'xz') +makedepends=('freeglut' 'glu' 'mesa' 'jbigkit' 'quilt') +optdepends=('freeglut: for using tiffgt') +source=("https://download.osgeo.org/libtiff/tiff-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/t/tiff/tiff_${_debver}-${_debrel}+deb11u4.debian.tar.xz") +sha512sums=('d7d42e6e6dbda9604c638f28e6cfa4705191a4e8ea276d18031d50dbab0931ac91141e57a2cf294124487f1a2e6dfcb9be62431c1b69de5acf4d0e632f3322e5' + 'SKIP' + 'a0a647e7daba4239210e8d9487c49a0ccc2af4c6072e91d2f74f18d985798e3694522199cc6ae4ccec629ff497d516d5a2fa9f0d9e8035dc322f563f8c9bfb4e') +validpgpkeys=('EBDFDB21B020EE8FD151A88DE301047DE1198975') # Bob Friesenhahn + +prepare() { + cd tiff-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + quilt push -av + fi +} + +build() { + cd tiff-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --disable-zstd \ + --with-docdir=/usr/share/doc/${pkgname} + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd tiff-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 COPYRIGHT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libtiger/PKGBUILD b/libtiger/PKGBUILD new file mode 100644 index 0000000..c25632e --- /dev/null +++ b/libtiger/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=libtiger +pkgver=0.3.4 +pkgrel=2 +pkgdesc="A rendering library for Kate streams using Pango and Cairo" +license=('LGPL-2.1') +arch=('i686' 'x86_64') +depends=('pango' 'libkate') +makedepends=('pkg-config') +source=("https://download.videolan.org/contrib/tiger/$pkgname-$pkgver.tar.gz") +sha512sums=('559e522b5127f32fdd08d62c40dfb493dc2db1efd1e21707d723ef27cbe03e7e38fb04d40856d824ed0c3c94a223ed1a0358fc11ecb30446b5ee5c7a3b802e6d') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --enable-static=no \ + --disable-doc + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/libtorrent/PKGBUILD b/libtorrent/PKGBUILD new file mode 100644 index 0000000..7f3d25b --- /dev/null +++ b/libtorrent/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=libtorrent +pkgver=0.13.8 +pkgrel=1 +pkgdesc="BitTorrent library with a focus on high performance and good code" +url='https://rakshasa.github.io/rtorrent/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libressl') +source=("https://github.com/rakshasa/rtorrent/releases/download/v0.9.${pkgver##*.}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('417177df5b27cd8c6a6317063b0846da2690de4633836466728605c2edad2de407d29d321cc481b8d1352dd0ff6dd89f4566a830424a8cf986f2fddb04704da4') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + export CXXFLAGS+=' -fno-strict-aliasing' + ./configure \ + --prefix=/usr \ + --disable-debug + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libunibreak/PKGBUILD b/libunibreak/PKGBUILD new file mode 100644 index 0000000..869e2fd --- /dev/null +++ b/libunibreak/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libunibreak +pkgver=5.0 +pkgrel=1 +pkgdesc="An implementation of the line breaking algorithm as described in Unicode 5.2.0 Standard Annex 14, Revision 24" +arch=('i686' 'x86_64') +url='https://github.com/adah1972/libunibreak/' +license=('zlib') +source=("$pkgname-$pkgver.tar.gz::https://github.com/adah1972/libunibreak/archive/libunibreak_${pkgver//./_}.tar.gz") +sha512sums=('909c12cf5df92f0374050fc7a0ef9e91bc1efe6a5dc5a80f4e2c81a507f1228ecaba417c3ee001e11b2422024bea68cc14eb66e08360ae69f830cdaa18764484') + +build() { + cd "$srcdir/libunibreak-libunibreak_${pkgver//./_}" + ./bootstrap + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/libunibreak-libunibreak_${pkgver//./_}" + make DESTDIR="$pkgdir" install + rm -f "$pkgdir"/usr/lib/*.a + install -Dm644 LICENCE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libuninameslist/PKGBUILD b/libuninameslist/PKGBUILD new file mode 100644 index 0000000..177deda --- /dev/null +++ b/libuninameslist/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=libuninameslist +pkgver=20200413 +pkgrel=1 +pkgdesc='Large, sparse array mapping each unicode code point to the annotation data for it' +url='https://github.com/fontforge/libuninameslist' +license=('Modified-BSD') +arch=('i686' 'x86_64') +source=("https://github.com/fontforge/${pkgname}/releases/download/${pkgver}/${pkgname}-dist-${pkgver}.tar.gz") +sha512sums=('88befff4bf7efed149b4e3a5d58a733b2cb6477e103ec34529ff02a88f8c72a6fc9d7b0be9e97cd539a75c8ebe5e4127cdf03a568da2f219157174b9b585b2a3') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + autoreconf -i + automake --foreign -Wall +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/libunwind/PKGBUILD b/libunwind/PKGBUILD new file mode 100644 index 0000000..6584679 --- /dev/null +++ b/libunwind/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=libunwind +pkgver=1.3.2 +_debver=1.3.2 +_debrel=2 +pkgrel=1 +pkgdesc='Portable and efficient C programming interface (API) to determine the call-chain of a program' +arch=('i686' 'x86_64') +url='https://www.nongnu.org/libunwind/' +license=('Expat') +depends=('glibc' 'xz') +makedepends=('quilt') +source=("https://download.savannah.gnu.org/releases/$pkgname/$pkgname-$pkgver.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/libu/libunwind/libunwind_$_debver-$_debrel.debian.tar.xz") +sha512sums=('221864eae6bf0fde281d9551662af1e539ce919fbb7050947e60dbcc09efed4f5d34574dbce11792513e63151e0af72f02801b7bcd37a6a519e6d868abb8b509' + 'SKIP' + '48dcc63be16ea1ca11dc2d05e0b33746385b19cb453ed7a1e967b32ae5906e1f851ef67d7a341522372f38ec296ffea107f58830c0690ba934824cc75500c768') +validpgpkeys=('75D2CFC56CC2E935A4143297015A268A17D55FA4') # Dave Watson + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +check() { + cd $pkgname-$pkgver + # This function is ``supposed'' to fail. Upstream know, but haven't fixed it. + make check || : +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} + +# vim:set ts=2 sw=2 et: diff --git a/libupnp/PKGBUILD b/libupnp/PKGBUILD new file mode 100644 index 0000000..ca6030b --- /dev/null +++ b/libupnp/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +_name=pupnp +pkgname=libupnp +pkgver=1.14.7 +pkgrel=2 +pkgdesc="Portable Free UPnP Development Kit" +url='https://pupnp.sourceforge.io/' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('glibc') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/${_name}/${_name}/archive/release-${pkgver}.tar.gz") +sha512sums=('92dd80d1bbaa64e6d3909c5bce73d0340fcd3a3c1d247a634bd48ec077ba0ce0b8224d1a670a66f6a8c591e31a54f15526071d62ae5460e85d582d7b6b67c674') + +prepare() { + mv -v ${_name}-release-${pkgver} ${pkgname}-${pkgver} + cd ${pkgname}-${pkgver} + autoreconf -fiv +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --enable-reuseaddr \ + --disable-blocking-tcp-connections + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + install -vDm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 {ChangeLog,README.md} -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/libusb-compat/PKGBUILD b/libusb-compat/PKGBUILD new file mode 100644 index 0000000..4c90119 --- /dev/null +++ b/libusb-compat/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=libusb-compat +pkgver=0.1.7 +pkgrel=1 +pkgdesc="A compatibility layer allowing applications written for libusb-0.1 to work with libusb-1.0" +arch=('i686' 'x86_64') +url="https://libusb.info/" +license=('LGPL-2') +depends=('libusb' 'sh') +source=("https://github.com/libusb/libusb-compat-0.1/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz") +sha512sums=('8f3b2f9a275987b13278215b28950f9bc4c4cd30d3dc08ff5141ed6486d484981d059588533857eb521a5362ce2eb74c9f9c98f3d0c59d9a288debf9fc95a882') + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE +} diff --git a/libutempter/PKGBUILD b/libutempter/PKGBUILD new file mode 100644 index 0000000..3854f83 --- /dev/null +++ b/libutempter/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libutempter +pkgver=1.2.1 +_debver=1.2.1 +_debrel=2 +pkgrel=1 +pkgdesc="Interface for terminal emulators such as screen and xterm to record user sessions to utmp and wtmp files" +arch=('i686' 'x86_64') +url="http://git.altlinux.org/people/ldv/packages/?p=libutempter.git" +license=('LGPL-2.1') +depends=('glibc') +makedepends=('quilt') +source=(http://ftp.altlinux.org/pub/people/ldv/utempter/$pkgname-$pkgver.tar.gz{,.asc} + https://deb.debian.org/debian/pool/main/libu/libutempter/libutempter_$_debver-$_debrel.debian.tar.xz) +sha512sums=('d3a3bab7d2c2a68534c5ad41dd02bde849eb08df5dbb895a79b50b74d269c48c4cfcd12c4654941ccb7cdd43f486cfdc19148fa470870562f5cd324ce9782429' + 'SKIP' + '6a6141d1f7d113d89d3ea24b2d18ac11cae2d938bccf0dd07ed815935068310bb14d7f53de2bf788de0386167f322cd6b558d8534085d66d85e53255a8555c52') +validpgpkeys=('296D6F29A020808E8717A8842DB5BD89A340AEB7') # Dmitry V. Levin + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/multiarch-location.diff || true + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + RPM_OPT_FLAGS="$CFLAGS" make + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + chown root:utmp "$pkgdir/usr/lib/utempter/utempter" + chmod 2755 "$pkgdir/usr/lib/utempter/utempter" + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libutf8proc/PKGBUILD b/libutf8proc/PKGBUILD new file mode 100644 index 0000000..5cdfc41 --- /dev/null +++ b/libutf8proc/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=libutf8proc +pkgver=2.5.0 +_sover=2.3.2 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="C library for processing UTF-8 encoded Unicode strings" +arch=('i686' 'x86_64') +url='https://github.com/JuliaStrings/utf8proc' +license=('Expat' 'Unicode') +makedepends=('cmake' 'ninja' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/JuliaStrings/utf8proc/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/u/utf8proc/utf8proc_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('0c553faf4f3841c17c7aa4cce1e917b1585c430ac3f7f240ab98cbe01b9743f2074532e6f71faf3df030f5af00e483a3faf9716a67e6a4b1bb66a3de48308014' + '0a32ae86570560b98eb174b33ff819cc07ad945466527def0567e729436491aab410b9d239597d5484c0b07d4dae676f2ebc2ffb09a2bd6ef455abb08e6cd94b') + +prepare() { + cd utf8proc-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd utf8proc-$pkgver + cmake \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -G Ninja + ninja -C build + find . +} + +package() { + cd utf8proc-$pkgver + install -Dm644 utf8proc.h "$pkgdir/usr/include/utf8proc.h" + install -Dm644 LICENSE.md "$pkgdir/usr/share/licenses/$pkgname/LICENSE.md" + install -Dm644 "libutf8proc.pc.in" "$pkgdir/usr/lib/pkgconfig/libutf8proc.pc" + install -Dm644 build/libutf8proc.so.$_sover "$pkgdir/usr/lib/libutf8proc.so.$_sover" + ln -s /usr/lib/libutf8proc.so.$_sover "$pkgdir/usr/lib/libutf8proc.so" +} diff --git a/libuv/PKGBUILD b/libuv/PKGBUILD new file mode 100644 index 0000000..0854867 --- /dev/null +++ b/libuv/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=libuv +pkgver=1.48.0 +pkgrel=1 +pkgdesc="Multi-platform support library with a focus on asynchronous I/O" +arch=('i686' 'x86_64') +url="https://github.com/libuv/libuv" +license=('Expat') +depends=('glibc' 'libnsl') +makedepends=('python-sphinx') +source=("https://github.com/libuv/libuv/archive/v$pkgver/$pkgname-$pkgver.tar.gz") +sha512sums=('81a9580bc51c22385de4dab748968477b5e552aa25f901c376e3ffac624e0e05362b48239222e826cad900329f9a7cbdb080794fb4ada9ca14196efc2969cc57') + +prepare() { + cd $pkgname-$pkgver + ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make + make man -C docs +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm644 AUTHORS -t "$pkgdir/usr/share/doc/$pkgname" + install -Dm644 README.md -t "$pkgdir/usr/share/doc/$pkgname" + install -Dm644 ChangeLog -t "$pkgdir/usr/share/doc/$pkgname" + install -Dm644 docs/build/man/libuv.1 -t "$pkgdir/usr/share/man/man1" +} diff --git a/libvisual/PKGBUILD b/libvisual/PKGBUILD new file mode 100644 index 0000000..eef65f8 --- /dev/null +++ b/libvisual/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libvisual +pkgver=0.4.0 +_debver=0.4.0 +_debrel=17 +pkgrel=7 +pkgdesc="Abstraction library that comes between applications and audio visualisation plugins" +arch=('i686' 'x86_64') +url="https://sourceforge.net/projects/libvisual/" +license=('LGPL-2.1') +depends=('glibc') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/sourceforge/libvisual/libvisual-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libv/libvisual/libvisual_$_debver-$_debrel.debian.tar.xz" + "libvisual-0.4.0-inlinedefineconflict.patch") +sha512sums=('ab2286de30d33582a92f16e46436fcbc44b74649952df6e94d96aedc2cabb18d3361496c0b8ab6f52f7178214bf735673c8f1820c3d149304787ba8407201b95' + 'bb36c664ee0575475dfcee8c64e9930f1850a00f670a44fc7ce8fd0bb0b0980828bca5096bfe12e0f208d3a0c7e81374362115a965e36f4f063a39d4b2d88dec' + '13872adb2f99bd989b954499f80d2bd2646369d3fdb190a07e02cada1c42de7a7c36ca368b70f024484eb621f4320649a83107d4874a01f37ab2e10806dca89d') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + # libvisual's definition of "inline" causes issues when compiling with the + # new C++11 ABI (patch from Fedora) + patch -Np1 -i ../libvisual-0.4.0-inlinedefineconflict.patch + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/libvisual/libvisual-0.4.0-inlinedefineconflict.patch b/libvisual/libvisual-0.4.0-inlinedefineconflict.patch new file mode 100644 index 0000000..11ce334 --- /dev/null +++ b/libvisual/libvisual-0.4.0-inlinedefineconflict.patch @@ -0,0 +1,61 @@ +diff -ru libvisual-0.4.0.orig/libvisual/lv_cache.c libvisual-0.4.0/libvisual/lv_cache.c +--- libvisual-0.4.0.orig/libvisual/lv_cache.c 2009-03-07 17:17:38.000000000 +0000 ++++ libvisual-0.4.0/libvisual/lv_cache.c 2009-03-07 17:25:26.000000000 +0000 +@@ -32,7 +32,7 @@ + static int cache_dtor (VisObject *object); + static int cache_remove_list_entry (VisCache *cache, VisListEntry **le); + +-static inline void handle_request_reset (VisCache *cache, VisListEntry *le); ++static lv_inline void handle_request_reset (VisCache *cache, VisListEntry *le); + + static int cache_dtor (VisObject *object) + { +@@ -74,7 +74,7 @@ + } + + +-static inline void handle_request_reset (VisCache *cache, VisListEntry *le) ++static lv_inline void handle_request_reset (VisCache *cache, VisListEntry *le) + { + VisCacheEntry *centry; + +diff -ru libvisual-0.4.0.orig/libvisual/lv_defines.h libvisual-0.4.0/libvisual/lv_defines.h +--- libvisual-0.4.0.orig/libvisual/lv_defines.h 2009-03-07 17:17:38.000000000 +0000 ++++ libvisual-0.4.0/libvisual/lv_defines.h 2009-03-07 17:24:17.000000000 +0000 +@@ -63,13 +63,13 @@ + + /* Compiler specific optimalization macros */ + #if __GNUC__ >= 3 +-# define inline inline __attribute__ ((always_inline)) ++# define lv_inline inline __attribute__ ((always_inline)) + # define __malloc __attribute__ ((malloc)) + # define __packed __attribute__ ((packed)) + # define VIS_LIKELY(x) __builtin_expect (!!(x), 1) + # define VIS_UNLIKELY(x) __builtin_expect (!!(x), 0) + #else +-# define inline /* no inline */ ++# define lv_inline /* no inline */ + # define __malloc /* no malloc */ + # define __packed /* no packed */ + # define VIS_LIKELY(x) (x) +diff -ru libvisual-0.4.0.orig/libvisual/lv_time.h libvisual-0.4.0/libvisual/lv_time.h +--- libvisual-0.4.0.orig/libvisual/lv_time.h 2009-03-07 17:17:38.000000000 +0000 ++++ libvisual-0.4.0/libvisual/lv_time.h 2009-03-07 17:25:15.000000000 +0000 +@@ -101,7 +101,7 @@ + * + * @return Nothing. + */ +-static inline void visual_timer_tsc_get (uint32_t *lo, uint32_t *hi) ++static lv_inline void visual_timer_tsc_get (uint32_t *lo, uint32_t *hi) + { + #if defined(VISUAL_ARCH_X86) || defined(VISUAL_ARCH_X86_64) + __asm __volatile +@@ -115,7 +115,7 @@ + } + + /* FIXME use uint64_t here, make sure type exists */ +-static inline unsigned long long visual_timer_tsc_get_returned () ++static lv_inline unsigned long long visual_timer_tsc_get_returned () + { + uint32_t lo, hi; + diff --git a/libvncserver/PKGBUILD b/libvncserver/PKGBUILD new file mode 100644 index 0000000..bf196f9 --- /dev/null +++ b/libvncserver/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=libvncserver +pkgver=0.9.13 +_debver=0.9.13+dfsg +_debrel=2 +pkgrel=1 +pkgdesc='Cross-platform C libraries that allow you to easily implement VNC server or client functionality' +arch=('i686' 'x86_64') +url="https://libvnc.github.io/" +license=('GPL-2') +depends=('libpng' 'libjpeg' 'gnutls' 'libgcrypt' 'libressl' 'libnsl') +makedepends=('sdl2' 'cmake' 'quilt') +source=("https://github.com/LibVNC/libvncserver/archive/LibVNCServer-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libv/libvncserver/libvncserver_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('18b0a1698d32bbdbfe6f65f76130b2a95860e3cc76e8adb904269663698c7c0ae982f451fda1f25e5461f096045d40a89d9014258f439366d5b4feaa4999d643' + 'f807045647ae4219e997ec82439ad676c8080f5bf0e5c6adffac0a89866d88603df9aef71cfc72e60e8328e99151eac0a8924a74ae7010b4cdcd4991e41c47fd') + +prepare() { + cd $pkgname-LibVNCServer-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-LibVNCServer-$pkgver + cmake -DCMAKE_INSTALL_PREFIX=/usr . + make +} + +package() { + cd $pkgname-LibVNCServer-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/libvoikko/PKGBUILD b/libvoikko/PKGBUILD new file mode 100644 index 0000000..1395d48 --- /dev/null +++ b/libvoikko/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libvoikko +pkgver=4.3.1 +pkgrel=3 +_pyver=3.8 +pkgdesc="A spelling and grammar checker, hyphenator and collection of related linguistic data for Finnish language" +arch=('i686' 'x86_64') +url='https://voikko.sourceforge.net' +license=('GPL-2') +depends=('gcc-libs') +makedepends=('python') +source=("https://www.puimula.org/voikko-sources/libvoikko/$pkgname-$pkgver.tar.gz") +sha512sums=('6677fac7c0cba1289dda23b0c0a4bbe44480ce747189d40634ac57811728c1942a795efd50270e933373fabab9c54e82a8f9fde06d936442820e3f8019574f08') + +build() { + cd $pkgname-$pkgver + + # Workaround encoding error + export LANG=en_US.UTF-8 + ./configure \ + --prefix=/usr \ + --enable-hfst=false \ + --with-dictionary-path=/usr/share/voikko + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 python/libvoikko.py -t "$pkgdir"/usr/lib/python${_pyver}/site-packages + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libvorbis/PKGBUILD b/libvorbis/PKGBUILD new file mode 100644 index 0000000..bc69208 --- /dev/null +++ b/libvorbis/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=libvorbis +pkgver=1.3.7 +_debver=1.3.7 +_debrel=1 +pkgrel=1 +pkgdesc='Vorbis codec library' +arch=('i686' 'x86_64') +url='https://www.xiph.org/vorbis/' +license=('BSD') +depends=('libogg') +makedepends=('quilt') +source=(https://downloads.xiph.org/releases/vorbis/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libv/libvorbis/libvorbis_$_debver-$_debrel.debian.tar.xz) +sha512sums=('8a83ac9e9197f32fad4430946dba3927921320492f9e96cda546e8eb3981e2664da97f77e43cb197577ec056437785168ca7c4138f8bf7f2ba93899846932eb2' + '2bd8195afb8df90dc76d8cebda9c5ec9aa06180e3bcc28f13714e098b31288f77670c9ed16f69697bb190791ea15a876cb165947da6e82e0c6105f665ee2fa8b') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix='/usr' \ + --disable-static + make +} + +check() { + cd $pkgname-$pkgver + + make -j1 check +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libvterm/PKGBUILD b/libvterm/PKGBUILD new file mode 100644 index 0000000..3892995 --- /dev/null +++ b/libvterm/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=libvterm +pkgver=0.1.4 +pkgrel=1 +pkgdesc="Abstract library implementation of a VT220/xterm/ECMA-48 terminal emulator" +arch=('i686' 'x86_64') +url='https://github.com/neovim/libvterm' +license=('Expat') +depends=('glibc') +source=("https://deb.debian.org/debian/pool/main/libv/libvterm/libvterm_${pkgver}.orig.tar.gz") +sha512sums=('90b5d47417e3f469df5c6574a27d12bd6bd1571d17cab7c4ac0ee61b1dbcb6361987f6fdfd11e314ea32f8958ec165c319a34d0f77288947c7cbc11de697d524') + +build() { + cd "${pkgname}-${pkgver}" + make PREFIX=/usr +} + +package() { + cd "${pkgname}-${pkgver}" + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libwapcaplet/PKGBUILD b/libwapcaplet/PKGBUILD new file mode 100644 index 0000000..0c5570e --- /dev/null +++ b/libwapcaplet/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=libwapcaplet +pkgver=0.4.3 +pkgrel=1 +pkgdesc='String internment library with rapid string comparison' +arch=('i686' 'x86_64') +url='https://www.netsurf-browser.org/projects/libwapcaplet/' +license=('Expat') +makedepends=('netsurf-buildsystem') +source=("https://download.netsurf-browser.org/libs/releases/$pkgname-$pkgver-src.tar.gz") +sha512sums=('b4cc8b0dac86c87b1806acfcf5c4734955eb797cb04ea67f764bae32fdecfd3ee4d8ad0f2f3f0a1813c9684b7120dbb97ecf11f29de0d60a7bd45d96c1a451cb') + +prepare() { + sed -i 's:_BSD_SOURCE:_DEFAULT_SOURCE:;s:rns:rns -w:' \ + $pkgname-$pkgver/Makefile +} + +build() { + make -C $pkgname-$pkgver PREFIX=/usr COMPONENT_TYPE=lib-shared +} + +package() { + make -C $pkgname-$pkgver \ + INCLUDEDIR=include \ + LIBDIR=lib \ + PREFIX=/usr \ + DESTDIR="$pkgdir" \ + COMPONENT_TYPE=lib-shared \ + install + install -Dm644 $pkgname-$pkgver/COPYING \ + "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libwnck3/PKGBUILD b/libwnck3/PKGBUILD new file mode 100644 index 0000000..83948f1 --- /dev/null +++ b/libwnck3/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=libwnck3 +_pkgname=libwnck +pkgver=3.36.0 +pkgrel=2 +pkgdesc="Library to manage X windows and workspaces (via pagers, tasklists, etc.)" +url='https://gitlab.gnome.org/GNOME/libwnck' +arch=('i686' 'x86_64') +license=('LGPL-2') +depends=('gtk' 'startup-notification' 'libxres' 'mesa-libgl') +makedepends=('gobject-introspection' 'meson' 'gettext-tiny') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/libw/libwnck3/libwnck3_${pkgver}.orig.tar.xz") +sha512sums=('b7bf5d935327f61634a898594cf20a270e1b403c8df6c74e6ac20e22eea2845ac8c3007b31994728b74953e40c1015373efe10ed64243cf5e85fd210654aecb3') + +build() { + hyperbola-meson ${_pkgname}-${pkgver} build -D gtk_doc=false + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 "${_pkgname}-${pkgver}"/COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libx11/PKGBUILD b/libx11/PKGBUILD new file mode 100644 index 0000000..d219367 --- /dev/null +++ b/libx11/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=libx11 +_openbsdver=6.9 +pkgver=1.7.0 +pkgrel=1 +pkgdesc="X11 client-side library, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +depends=('libxcb' 'xenocara-proto') +makedepends=('xenocara-util-macros' 'libxtrans') +license=('X11') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libx11-$pkgver.tar.lz{,.sig}) +sha512sums=('aa4dd261ed67db481b67e02b0e2325713f701a6eee301356a8c90e609eb113b6c802adef301749f49681d2a95b09d6d419acad4911c8095a0e2011c7bff628d5' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libX11" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libX11" + ./configure --prefix=/usr --disable-static --disable-xf86bigfont + make +} + +check() { + cd "xenocara-$_openbsdver/lib/libX11" + make check +} + +package() { + cd "xenocara-$_openbsdver/lib/libX11" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxau/PKGBUILD b/libxau/PKGBUILD new file mode 100644 index 0000000..e7c7c07 --- /dev/null +++ b/libxau/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxau +_openbsdver=6.9 +pkgver=1.0.9 +pkgrel=3 +pkgdesc="X11 authorisation library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +depends=('glibc' 'xenocara-proto') +makedepends=('pkg-config' 'xenocara-util-macros') +license=('X11') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxau-$pkgver.tar.lz{,.sig}) +sha512sums=('51d643507584a54dbe0fa2e4bd5b65ae2c845242a310776807aa48dfe61986e659fb6fe4618567cd12ab23617dfb65f53203e1517ba24ce4364df8692fd7b368' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXau" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXau" + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXau" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxaw/PKGBUILD b/libxaw/PKGBUILD new file mode 100644 index 0000000..3f00194 --- /dev/null +++ b/libxaw/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=libxaw +_openbsdver=6.9 +pkgver=1.0.13 +pkgrel=3 +pkgdesc="X11 Athena Widget library, provided by Xenocara" +arch=('i686' 'x86_64') +license=('X11') +url="https://www.xenocara.org" +depends=('libxmu' 'libxpm') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxaw-$pkgver.tar.lz{,.sig}) +sha512sums=('2f992f0d96f1082e4b0bacddc0e6f8a8a94a4bc90847ab4b5b7660a7906fae0265e0c712ed3e835b055660ab2fa327e125a7390158fee5fab0bf659f367475bf' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXaw" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXaw" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXaw" + make DESTDIR="$pkgdir" install + + ln -sf libXaw7.so "$pkgdir/usr/lib/libXaw.so" + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxaw3d/PKGBUILD b/libxaw3d/PKGBUILD new file mode 100644 index 0000000..e578fba --- /dev/null +++ b/libxaw3d/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +# Based on xaw3d package + +pkgname=libxaw3d +pkgver=1.6.3 +pkgrel=3 +pkgdesc="Three-D Athena widgets" +arch=('i686' 'x86_64') +url='https://xorg.freedesktop.org/' +license=('X11') +depends=('libxmu') +makedepends=('xenocara-util-macros') +source=("https://xorg.freedesktop.org/archive/individual/lib/libXaw3d-${pkgver}.tar.bz2") +sha512sums=('f79f997ff8442563c74f38c7d76fab2c9253691743ca3143047ce698adb4c126d02dc968be7bdc79ab3052b785fd705375d2f01171e3a3266736beb531c91424') + +prepare() { + cd "libXaw3d-$pkgver" + autoreconf -vfi +} + +build() { + cd "libXaw3d-$pkgver" + ./configure \ + --prefix=/usr \ + --disable-static + make +} + +package() { + cd "libXaw3d-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libxcb/PKGBUILD b/libxcb/PKGBUILD new file mode 100644 index 0000000..a7ae0ae --- /dev/null +++ b/libxcb/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=libxcb +_openbsdver=6.9 +pkgver=1.14 +pkgrel=2 +pkgdesc="X11 client-side library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +depends=('xcb-proto>=1.14' 'libxdmcp' 'libxau') +makedepends=('libxslt' 'python' 'xenocara-util-macros') +license=('X11') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/dist/libxcb-$pkgver.tar.lz{,.sig} + libxcb-1.14-no-missing-man-subdir.patch) +sha512sums=('a36234ce994690a0c41e9717bd222c16345548ba541bd4e64a782aabf9979967223af16a7103f80ae820b250141f11aa558f95f6f20a942aefcc244ee9646a22' + 'SKIP' + 'da2cb08143759db2097390429dceb5e0bdbc346b8106cb6c333661bd99b776a61ba48f50ec123bba4de606feca93b15aef2b7349dba43a996c8083708562126e') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/dist/libxcb" + patch -Np1 -i "$srcdir/libxcb-1.14-no-missing-man-subdir.patch" + chmod +x check-pc-requires + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/dist/libxcb" + ./configure --prefix=/usr \ + --enable-xinput \ + --enable-xkb \ + --disable-static + make -j1 +} + +check() { + cd "xenocara-$_openbsdver/dist/libxcb" + make -k check +} + +package() { + cd "xenocara-$_openbsdver/dist/libxcb" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxcb/libxcb-1.14-no-missing-man-subdir.patch b/libxcb/libxcb-1.14-no-missing-man-subdir.patch new file mode 100644 index 0000000..a982265 --- /dev/null +++ b/libxcb/libxcb-1.14-no-missing-man-subdir.patch @@ -0,0 +1,24 @@ +diff --git a/Makefile.am b/Makefile.am +index fbf6e04..cc2744f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,6 +1,6 @@ + ACLOCAL_AMFLAGS=-I m4 + +-SUBDIRS=src tests doc man ++SUBDIRS=src tests doc + + pkgconfigdir = $(libdir)/pkgconfig + +diff --git a/configure.ac b/configure.ac +index adb48e7..5a7e469 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -264,7 +264,6 @@ AM_CONDITIONAL(XCB_SERVERSIDE_SUPPORT, test "x$XCB_SERVERSIDE_SUPPORT" = "xyes") + AC_CONFIG_FILES([ + Makefile + doc/Makefile +-man/Makefile + src/Makefile + tests/Makefile + ]) diff --git a/libxcomposite/PKGBUILD b/libxcomposite/PKGBUILD new file mode 100644 index 0000000..74ab54c --- /dev/null +++ b/libxcomposite/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxcomposite +_openbsdver=6.9 +pkgver=0.4.5 +pkgrel=2 +pkgdesc="X11 Composite extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libxfixes' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxcomposite-$pkgver.tar.lz{,.sig}) +sha512sums=('017f02689a5dc2d241e82c5535e352d6a47aa35374977dbf6fc14344128cd4dc3f8d62ca163c288ad99cf72fde0ee311f980401ce6a3c5c14216f8321663f8c1' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXcomposite" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXcomposite" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXcomposite" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxcursor/PKGBUILD b/libxcursor/PKGBUILD new file mode 100644 index 0000000..ef27aac --- /dev/null +++ b/libxcursor/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=libxcursor +_openbsdver=6.9 +pkgver=1.2.0 +pkgrel=2 +pkgdesc="X cursor management library, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('libxfixes' 'libxrender') +optdepends=('gnome-themes-standard: fallback icon theme') +makedepends=('xenocara-util-macros') +backup=(usr/share/icons/default/index.theme) +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxcursor-$pkgver.tar.lz{,.sig} + index.theme) +sha512sums=('e50d118c7f07977c3f4cf03b4a562e5e4e1ac0081e721861503ed435723f28a15b6def1ba62f0bfce06a851895208eb54639a05778f9ce32c52f2a154151eab7' + 'SKIP' + '489a07b5c9c50b9ddbd10093c79a07d34f2f1c9b4f053ecd68a9f300e201f7b92890b92f0bb4963dfeaa1b158f43149d615b07d1e70523de41565eff7dd5fccb') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXcursor" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXcursor" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXcursor" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/index.theme" "$pkgdir/usr/share/icons/default/index.theme" + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxcursor/index.theme b/libxcursor/index.theme new file mode 100644 index 0000000..cda0b19 --- /dev/null +++ b/libxcursor/index.theme @@ -0,0 +1,2 @@ +[Icon Theme] +Inherits=Adwaita diff --git a/libxdamage/PKGBUILD b/libxdamage/PKGBUILD new file mode 100644 index 0000000..a8be1b8 --- /dev/null +++ b/libxdamage/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxdamage +_openbsdver=6.9 +pkgver=1.1.5 +pkgrel=2 +pkgdesc="X11 damaged region extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libxfixes>=5.0.3' 'xenocara-proto') +makedepends=('pkg-config' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxdamage-$pkgver.tar.lz{,.sig}) +sha512sums=('7f65057af38f8a5bf9d488382ba461d24a2a556221e2325efd4efef913b098a58ea5bba72489041946e33c1b52622567af0503db19181faa4d237fd47510a276' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXdamage" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXdamage" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXdamage" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxdg-basedir/PKGBUILD b/libxdg-basedir/PKGBUILD new file mode 100644 index 0000000..5a3d5aa --- /dev/null +++ b/libxdg-basedir/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=libxdg-basedir +pkgver=1.2.3 +pkgrel=2 +pkgdesc="An implementation of the XDG Base Directory specifications." +arch=('i686' 'x86_64') +url='https://github.com/devnev/libxdg-basedir' +license=('Expat') +depends=('glibc') +source=("https://github.com/devnev/$pkgname/archive/$pkgname-$pkgver.tar.gz") +sha512sums=('e672da0d9cd3c27c9113f6053b79127e615e5d84bde81305242f506e930869d8492304aac26a0296528d5a32530e4a743acecb6a25f58372ac597af284429f7c') + +build() { + cd ${pkgname}-${pkgname}-${pkgver} + ./autogen.sh + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/libxdmcp/PKGBUILD b/libxdmcp/PKGBUILD new file mode 100644 index 0000000..88ec36f --- /dev/null +++ b/libxdmcp/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxdmcp +_openbsdver=6.9 +pkgver=1.1.3 +pkgrel=2 +pkgdesc="X11 Display Manager Control Protocol library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('xenocara-proto' 'glibc') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxdmcp-$pkgver.tar.lz{,.sig}) +sha512sums=('0c16a0643ed340f11d151fa354d2b4b5b8cc48b849c5111f76600c877c9da5d18a9158e6006cdb04cacc4e67cd0b3d46f099367642281261f6e5518a715d31f5' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXdmcp" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXdmcp" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXdmcp" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxext/PKGBUILD b/libxext/PKGBUILD new file mode 100644 index 0000000..651e7d2 --- /dev/null +++ b/libxext/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxext +_openbsdver=6.9 +pkgver=1.3.4 +pkgrel=2 +pkgdesc="X11 miscellaneous extensions library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxext-$pkgver.tar.lz{,.sig}) +sha512sums=('d14aca6c99823536ce41857592099c551502a52ff526e7c8ef7448f9451ae50c0609810af348502585ce935de809624cfe1aea4cd12dfa24d9767fb8ebf4eb13' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXext" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXext" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXext" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxfixes/PKGBUILD b/libxfixes/PKGBUILD new file mode 100644 index 0000000..701c685 --- /dev/null +++ b/libxfixes/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxfixes +_openbsdver=6.9 +pkgver=5.0.3 +pkgrel=3 +pkgdesc="X11 miscellaneous 'fixes' extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libx11' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxfixes-$pkgver.tar.lz{,.sig}) +sha512sums=('c541496d0a08761b6b519b5ed43929fe453c53c283b99e564a8ab5081841c1ae69554155193cbfc032c6dd1bbda7d131458938e47c6a6a6635ea20e0651975c1' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXfixes" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXfixes" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXfixes" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxfont2/PKGBUILD b/libxfont2/PKGBUILD new file mode 100644 index 0000000..97220a6 --- /dev/null +++ b/libxfont2/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=libxfont2 +_openbsdver=6.9 +pkgver=2.0.4 +pkgrel=2 +pkgdesc="X11 font rasterisation library, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('freetype2' 'libfontenc' 'xenocara-proto') +makedepends=('xenocara-util-macros' 'libxtrans') +provides=('libxfont') +conflicts=('libxfont') +replaces=('libxfont') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxfont2-$pkgver.tar.lz{,.sig}) +sha512sums=('3ae1bbbb699da49fd9f4c43bf5bff2501edce8c6625d85ad761bb2889869296ec3a66b6648ae550e0f1f7c6cbd524eee55253db692393de959d293b97b8d33f8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXfont2" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXfont2" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXfont2" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxft/PKGBUILD b/libxft/PKGBUILD new file mode 100644 index 0000000..a62fdf5 --- /dev/null +++ b/libxft/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=libxft +_openbsdver=6.9 +pkgver=2.3.3 +pkgrel=2 +pkgdesc="FreeType-based font drawing library for X, provided by Xenocara" +arch=('i686' 'x86_64') +license=('Expat') +url="https://www.xenocara.org" +depends=('fontconfig' 'libxrender' 'libbsd') +makedepends=('pkg-config' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxft-$pkgver.tar.lz{,.sig} + add-libbsd-support.patch) +sha512sums=('b7e66b19f7f4a4aefb62ce3c5842dc59d4f6d0d806f23d45e4ea9de98de7dd433a13f01e46240d8b4b33df5fb9e546697fc18e18edf3ae7e9bfa8e8e2c3971be' + 'SKIP' + 'd7a1909d318780337b8957f373a7ef2cb11edab9243f957e6ff544792d7e17a74d50bdb7fa0ad4d417d999ca5494bb2ee6015f5dd3755014845f07d2664dbaee') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXft" + patch -p1 -i "$srcdir/add-libbsd-support.patch" + autoreconf -vfi +} + +build() { + export LDFLAGS="$LDFLAGS -lbsd" + + cd "xenocara-$_openbsdver/lib/libXft" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXft" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxft/add-libbsd-support.patch b/libxft/add-libbsd-support.patch new file mode 100644 index 0000000..52802f2 --- /dev/null +++ b/libxft/add-libbsd-support.patch @@ -0,0 +1,48 @@ +diff --git a/src/xftdpy.c b/src/xftdpy.c +index b8f02e0..4b6b592 100644 +--- a/src/xftdpy.c ++++ b/src/xftdpy.c +@@ -21,6 +21,7 @@ + */ + + #include "xftint.h" ++#include + + _X_HIDDEN XftDisplayInfo *_XftDisplayInfo; + +diff --git a/src/xftdraw.c b/src/xftdraw.c +index 5cc4d69..7e8c2ce 100644 +--- a/src/xftdraw.c ++++ b/src/xftdraw.c +@@ -21,6 +21,7 @@ + */ + + #include "xftint.h" ++#include + + /* + * Ok, this is a pain. To share source pictures across multiple destinations, +diff --git a/src/xftfreetype.c b/src/xftfreetype.c +index 6ed17ce..cc23c61 100644 +--- a/src/xftfreetype.c ++++ b/src/xftfreetype.c +@@ -21,6 +21,7 @@ + */ + + #include "xftint.h" ++#include + + _X_HIDDEN FT_Library _XftFTlibrary; + +diff --git a/src/xftglyphs.c b/src/xftglyphs.c +index f75a636..73eccbc 100644 +--- a/src/xftglyphs.c ++++ b/src/xftglyphs.c +@@ -21,6 +21,7 @@ + */ + + #include "xftint.h" ++#include + #include FT_OUTLINE_H + #include FT_LCD_FILTER_H + diff --git a/libxi/PKGBUILD b/libxi/PKGBUILD new file mode 100644 index 0000000..d225859 --- /dev/null +++ b/libxi/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxi +_openbsdver=6.9 +pkgver=1.7.10 +pkgrel=2 +pkgdesc="X11 Input extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +depends=('libxext' 'xenocara-proto') +makedepends=('pkg-config' 'xenocara-util-macros' 'libxfixes' 'automake') +license=('X11') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxi-$pkgver.tar.lz{,.sig}) +sha512sums=('b2963f79fcbcadf5bd0c17f408832b5fd4d12e1ef29e89514b958038c47deeb823cfbbd8bed2751c1d4e4ea0c9c7ddb0a1839ffeba4a071fe4551c67fc912abc' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXi" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXi" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXi" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxinerama/PKGBUILD b/libxinerama/PKGBUILD new file mode 100644 index 0000000..dbde3bb --- /dev/null +++ b/libxinerama/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxinerama +_openbsdver=6.9 +pkgver=1.1.4 +pkgrel=3 +pkgdesc="X11 Xinerama extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxext' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxinerama-$pkgver.tar.lz{,.sig}) +sha512sums=('8c2df627d2a2141f5c6c9401be52aa429608898fbd2fc20cd7ab83f2e31be82dfc86d073f1c02a49538748b0980e71b5a795d1d1d9e441e27af3fd8cd3db5c7d' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXinerama" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXinerama" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXinerama" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxkbcommon/PKGBUILD b/libxkbcommon/PKGBUILD new file mode 100644 index 0000000..e3d28d5 --- /dev/null +++ b/libxkbcommon/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgbase=libxkbcommon +pkgname=(libxkbcommon libxkbcommon-doc libxkbcommon-x11) +pkgver=1.0.3 +pkgrel=1 +pkgdesc="Keymap handling library for toolkits and window systems" +url="https://xkbcommon.org/" +arch=(i686 x86_64) +license=(Expat) +makedepends=(xkeyboard-config libxml2 libxcb doxygen meson) +source=("https://xkbcommon.org/download/$pkgname-$pkgver.tar.xz") +sha512sums=('b05a2db0acd6628427baad1967979a161019dec90a078a926d41f4dfeffb84eab63e627803df1a401e42c8e48953d6c434ce08d7206eae21e890890f29b03d3c') + +prepare() { + mkdir -p doc/usr/share + mkdir -p x11/usr/{include/xkbcommon,lib/pkgconfig,libexec/xkbcommon,share/man/man1} +} + +build() { + hyperbola-meson $pkgbase-$pkgver build \ + -D enable-wayland=false + meson compile -C build +} + +package_libxkbcommon() { + depends=(xkeyboard-config libxml2) + optdepends=('libxkbcommon-x11: xkbcli interactive-x11') + + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgbase-$pkgver/LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + +### Split libxkbcommon-doc + mv "$pkgdir"/usr/share/doc "$srcdir/doc/usr/share" + +### Split libxkbcommon-x11 + mv "$pkgdir"/usr/lib/*x11* "$srcdir/x11/usr/lib" + mv "$pkgdir"/usr/lib/pkgconfig/*x11* "$srcdir/x11/usr/lib/pkgconfig" + mv "$pkgdir"/usr/libexec/xkbcommon/*x11* "$srcdir/x11/usr/libexec/xkbcommon" + mv "$pkgdir"/usr/include/xkbcommon/*x11* "$srcdir/x11/usr/include/xkbcommon" + mv "$pkgdir"/usr/share/man/man1/*x11* "$srcdir/x11/usr/share/man/man1" +} + +package_libxkbcommon-doc() { + pkgdesc="API documentation for libxkbcommon" + + mv doc/* "$pkgdir" + install -Dm644 $pkgbase-$pkgver/LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_libxkbcommon-x11() { + pkgdesc="Keyboard handling library using XKB data for X11 XCB clients" + depends=(libxkbcommon libxcb) + + mv x11/* "$pkgdir" + install -Dm644 $pkgbase-$pkgver/LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/libxkbfile/PKGBUILD b/libxkbfile/PKGBUILD new file mode 100644 index 0000000..5bb080f --- /dev/null +++ b/libxkbfile/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxkbfile +_openbsdver=6.9 +pkgver=1.1.0 +pkgrel=2 +pkgdesc="X11 keyboard file manipulation library, provided by Xenocara" +arch=('i686' 'x86_64') +license=('X11') +url="https://www.xenocara.org" +depends=('libx11') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxkbfile-$pkgver.tar.lz{,.sig}) +sha512sums=('9679aad885560144cc7bd3ee527c784f99a0b68e87e33b8b1b1a0c1f4377c704a4b7bd02d406c05c1b6ceab0f9c7d27cebb2549cfad7ef49a2ef0f7156d786d4' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libxkbfile" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libxkbfile" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libxkbfile" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxkbui/COPYING b/libxkbui/COPYING new file mode 100644 index 0000000..afca262 --- /dev/null +++ b/libxkbui/COPYING @@ -0,0 +1,25 @@ +/************************************************************ + Copyright (c) 1996 by Silicon Graphics Computer Systems, Inc. + + Permission to use, copy, modify, and distribute this + software and its documentation for any purpose and without + fee is hereby granted, provided that the above copyright + notice appear in all copies and that both that copyright + notice and this permission notice appear in supporting + documentation, and that the name of Silicon Graphics not be + used in advertising or publicity pertaining to distribution + of the software without specific prior written permission. + Silicon Graphics makes no representation about the suitability + of this software for any purpose. It is provided "as is" + without any express or implied warranty. + + SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON + GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL + DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH + THE USE OR PERFORMANCE OF THIS SOFTWARE. + + ********************************************************/ diff --git a/libxkbui/PKGBUILD b/libxkbui/PKGBUILD new file mode 100644 index 0000000..5ccb653 --- /dev/null +++ b/libxkbui/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=libxkbui +_openbsdver=6.9 +pkgver=1.0.2 +pkgrel=7 +pkgdesc="X11 keyboard UI presentation library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libxt' 'libxkbfile') +makedepends=('pkg-config' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxkbui-$pkgver.tar.lz{,.sig} + COPYING) +sha512sums=('e45bd2f533e1d4e11e15c5cdc42f2a0d229104ecbe0a2cf4da719519b4444452311e82737870e6536002f235098ff3627033c316c1034fe755c49dc0c439d746' + 'SKIP' + 'fa3dc67cc668c866de3ab216da674456d764cb1524aefa8cbd9c0824caef3269d3d1a31a77f74ad42a0109cf4ead6c87b4743a5e54a00887f6208134009760bd') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libxkbui" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libxkbui" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libxkbui" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxklavier/PKGBUILD b/libxklavier/PKGBUILD new file mode 100644 index 0000000..fe42687 --- /dev/null +++ b/libxklavier/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=libxklavier +pkgver=5.4 +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="High-level API for X Keyboard Extension" +url='https://www.freedesktop.org/wiki/Software/LibXklavier/' +arch=('i686' 'x86_64') +license=('LGPL-2') +depends=('glib2' 'libxkbfile' 'libxml2' 'xkeyboard-config' 'libxi' 'iso-codes') +makedepends=('gobject-introspection' 'intltool' 'quilt' 'libxfixes') +options=('!emptydirs') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/libx/libxklavier/libxklavier_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/libx/libxklavier/libxklavier_${_debver}-${_debrel}.debian.tar.xz" + "remove-gtk-doc.patch") +sha512sums=('d5ebcaca76b47651e2f64a8e3aa1b186da81d88aa471293823827e397b17d5851489417574609bcded6bd8cfc0a1967d933e8b6a53fe61054dd891c3b695a1f0' + '594c2263daa33d357d28a5123c32cd79293cbed6e190944c37af0f91fb7e92c6315b812622bb2758f5027aaf76ed02baff43ef59a1b0ee8babb8063faa75d005' + '5073c9650fb1b3f7c74e9f5da5f1b320d6afedaed8520354ae2ad097cf636147de8ee76713b8df602c72897ce6600b20a6522a5c2fcb0323547694b81eed1ac3') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + rm -rf ./doc + patch -Np1 -i ${srcdir}/remove-gtk-doc.patch + autoreconf -vi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --with-xkb-bin-base=/usr/bin \ + --with-xkb-base=/usr/share/X11/xkb \ + --disable-static \ + --disable-gtk-doc + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING.LIB -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/libxklavier/remove-gtk-doc.patch b/libxklavier/remove-gtk-doc.patch new file mode 100644 index 0000000..5942ae8 --- /dev/null +++ b/libxklavier/remove-gtk-doc.patch @@ -0,0 +1,30 @@ +--- a/configure.ac 2013-04-24 01:06:51.000000000 +0200 ++++ b/configure.ac 2023-01-04 14:58:07.182597482 +0100 +@@ -196,8 +196,6 @@ + Makefile + libxklavier/Makefile + libxklavier.spec +-doc/Makefile +-doc/reference/Makefile + tests/Makefile + libxklavier.pc + ]) +--- a/Makefile.am 2013-04-24 01:06:51.000000000 +0200 ++++ b/Makefile.am 2023-01-04 15:02:35.630468379 +0100 +@@ -1,6 +1,6 @@ + ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} + +-SUBDIRS = libxklavier doc tests ++SUBDIRS = libxklavier tests + + EXTRA_DIST = libxklavier.spec libxklavier.spec.in \ + autogen.sh \ +@@ -8,7 +8,7 @@ + m4/introspection.m4 \ + $(config_xml_DATA) + +-DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc --enable-introspection ++DISTCHECK_CONFIGURE_FLAGS=--disable-gtk-doc --enable-introspection + + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = libxklavier.pc diff --git a/libxml++/PKGBUILD b/libxml++/PKGBUILD new file mode 100644 index 0000000..6378760 --- /dev/null +++ b/libxml++/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxml++ +pkgver=3.2.2 +pkgrel=3 +pkgdesc="C++ bindings to libxml2" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url='https://libxmlplusplus.sourceforge.net/' +depends=('libxml2' 'glibmm') +makedepends=('mm-common' 'docbook-xsl') +options=('!emptydirs') +source=("https://github.com/libxmlplusplus/libxmlplusplus/releases/download/$pkgver/$pkgname-$pkgver.tar.xz") +sha512sums=('c000d438aae487b92de2a1c60277d5e3ad3bf93824fc8fa99684778ea2334a45bf621f8d253190bdadedc591772d9beee53a98ebc3e20015d2ca68e097c0a253') + +prepare() { + cd $pkgname-$pkgver + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install doc_subdirs= + make DESTDIR="${pkgdir}" -C docs install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/libxml2/CVE-2025-32414.patch b/libxml2/CVE-2025-32414.patch new file mode 100644 index 0000000..7df81bd --- /dev/null +++ b/libxml2/CVE-2025-32414.patch @@ -0,0 +1,58 @@ +--- a/python/libxml.c 2025-04-26 02:57:30.000000000 +0200 ++++ b/python/libxml.c 2025-04-26 03:45:26.710195828 +0200 +@@ -286,7 +286,9 @@ + #endif + file = (PyObject *) context; + if (file == NULL) return(-1); +- ret = PyEval_CallMethod(file, (char *) "read", (char *) "(i)", len); ++ /* When read() returns a string, the length is in characters not bytes, so ++ request at most len / 4 characters to leave space for UTF-8 encoding. */ ++ ret = PyObject_CallMethod(file, (char *) "read", (char *) "(i)", len / 4); + if (ret == NULL) { + printf("xmlPythonFileReadRaw: result is NULL\n"); + return(-1); +@@ -321,10 +323,12 @@ + Py_DECREF(ret); + return(-1); + } +- if (lenread > len) +- memcpy(buffer, data, len); +- else +- memcpy(buffer, data, lenread); ++ if (lenread < 0 || lenread > len) { ++ printf("xmlPythonFileReadRaw: invalid lenread\n"); ++ Py_DECREF(ret); ++ return(-1); ++ } ++ memcpy(buffer, data, lenread); + Py_DECREF(ret); + return(lenread); + } +@@ -351,7 +355,9 @@ + #endif + file = (PyObject *) context; + if (file == NULL) return(-1); +- ret = PyEval_CallMethod(file, (char *) "io_read", (char *) "(i)", len); ++ /* When io_read() returns a string, the length is in characters not bytes, so ++ request at most len / 4 characters to leave space for UTF-8 encoding. */ ++ ret = PyObject_CallMethod(file, (char *) "io_read", (char *) "(i)", len / 4); + if (ret == NULL) { + printf("xmlPythonFileRead: result is NULL\n"); + return(-1); +@@ -386,10 +392,12 @@ + Py_DECREF(ret); + return(-1); + } +- if (lenread > len) +- memcpy(buffer, data, len); +- else +- memcpy(buffer, data, lenread); ++ if (lenread < 0 || lenread > len) { ++ printf("xmlPythonFileRead: invalid lenread\n"); ++ Py_DECREF(ret); ++ return(-1); ++ } ++ memcpy(buffer, data, lenread); + Py_DECREF(ret); + return(lenread); + } diff --git a/libxml2/CVE-2025-32415.patch b/libxml2/CVE-2025-32415.patch new file mode 100644 index 0000000..ccc5fef --- /dev/null +++ b/libxml2/CVE-2025-32415.patch @@ -0,0 +1,20 @@ +--- a/xmlschemas.c 2025-04-26 02:57:30.000000000 +0200 ++++ b/xmlschemas.c 2025-04-26 02:58:52.454003744 +0200 +@@ -23439,7 +23439,7 @@ + j++; + } while (j < nbDupls); + } +- if (nbNodeTable) { ++ if (bind->nbNodes) { + j = 0; + do { + if (nbFields == 1) { +@@ -23490,7 +23490,7 @@ + + next_node_table_entry: + j++; +- } while (j < nbNodeTable); ++ } while (j < bind->nbNodes); + } + /* + * If everything is fine, then add the IDC target-node to diff --git a/libxml2/PKGBUILD b/libxml2/PKGBUILD new file mode 100644 index 0000000..f1d7cdf --- /dev/null +++ b/libxml2/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Jesus E. + +pkgname=libxml2 +pkgver=2.9.10 +_debver=$pkgver +_debrel=6.7 +pkgrel=6 +pkgdesc="XML parsing library, version 2" +url='http://www.xmlsoft.org/' +arch=('i686' 'x86_64') +license=('Expat') +depends=('zlib' 'readline' 'ncurses' 'xz' 'icu') +makedepends=('tauthon' 'python' 'quilt') +source=("ftp://xmlsoft.org/libxml2/libxml2-$pkgver.tar.gz" + "https://security.debian.org/debian-security/pool/updates/main/libx/libxml2/libxml2_${_debver}+dfsg-${_debrel}+deb11u6.debian.tar.xz" + "libxml2-2.9.8-python3-unicode-errors.patch" + "https://www.w3.org/XML/Test/xmlts20130923.tar.gz" + "CVE-2025-32414.patch" + "CVE-2025-32415.patch") +sha512sums=('0adfd12bfde89cbd6296ba6e66b6bed4edb814a74b4265bda34d95c41d9d92c696ee7adb0c737aaf9cc6e10426a31a35079b2a23d26c074e299858da12c072ed' + '718386dd78d7136ff4aff605a92b2277b9ebd199b02345bb19ec48e3ecd97f634e1a213fdd9c2ac84695bb4052ff2515ffb46032a270163b4782d5af3b4187af' + 'a205c97fa1488fb8907cfa08b5f82e2055c80b86213dc3cc5c4b526fe6aa786bcc4e4eeb226c44635a1d021307b39e3940f706c42fb60e9e3e9b490a84164df7' + 'd5c4d26b324ed21f4e0641cd7f8b76dbf9de80df8b519982e44d41c960df29fd03618e02e9693b2d11ad06d19c4a965274c95a048ec3b9653eacb919a7f8b733' + 'ce5b43520617b62353a4b3550d266a3fd230163cd0ee2ba105b083f633d52560c187fdf08cb75a5c4b4ed6f6a4d41790b45b7b4d9c186260d2adecdcbaeb0241' + '0e033851bab1cf27a2aa73a5f785fc9ebba73d17c887edbb30734784401cae14f7c412052dcf5289d1de1773b520df866288215b38db5c341fbd9aa7124ee6e5') + +prepare() { + mkdir build-{tauthon,python} + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + # from https://src.fedoraproject.org/rpms/libxml2/tree/master + patch -Np1 -i $srcdir/libxml2-2.9.8-python3-unicode-errors.patch + fi + + patch -Np1 -i "$srcdir"/CVE-2025-32414.patch + patch -Np1 -i "$srcdir"/CVE-2025-32415.patch + + NOCONFIGURE=1 ./autogen.sh +} + +_build() ( + cd build-$1 + ../$pkgname-$pkgver/configure \ + --prefix=/usr \ + --with-threads \ + --with-history \ + --with-python=/usr/bin/$1 \ + --with-icu + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' libtool + PYTHONHASHSEED=0 make + find doc -type f -exec chmod 0644 {} + +) + +build() { + _build tauthon + _build python +} + +package() { + make -C build-tauthon DESTDIR="$pkgdir" install + make -C build-python/python DESTDIR="$pkgdir" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + install -Dm 644 build-tauthon/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libxml2/libxml2-2.9.8-python3-unicode-errors.patch b/libxml2/libxml2-2.9.8-python3-unicode-errors.patch new file mode 100644 index 0000000..e87dcde --- /dev/null +++ b/libxml2/libxml2-2.9.8-python3-unicode-errors.patch @@ -0,0 +1,34 @@ +Index: libxml2-2.9.5/python/libxml.c +=================================================================== +--- libxml2-2.9.5.orig/python/libxml.c ++++ libxml2-2.9.5/python/libxml.c +@@ -1620,6 +1620,7 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU + PyObject *message; + PyObject *result; + char str[1000]; ++ unsigned char *ptr = (unsigned char *)str; + + #ifdef DEBUG_ERROR + printf("libxml_xmlErrorFuncHandler(%p, %s, ...) called\n", ctx, msg); +@@ -1636,12 +1637,20 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU + str[999] = 0; + va_end(ap); + ++#if PY_MAJOR_VERSION >= 3 ++ /* Ensure the error string doesn't start at UTF8 continuation. */ ++ while (*ptr && (*ptr & 0xc0) == 0x80) ++ ptr++; ++#endif ++ + list = PyTuple_New(2); + PyTuple_SetItem(list, 0, libxml_xmlPythonErrorFuncCtxt); + Py_XINCREF(libxml_xmlPythonErrorFuncCtxt); +- message = libxml_charPtrConstWrap(str); ++ message = libxml_charPtrConstWrap(ptr); + PyTuple_SetItem(list, 1, message); + result = PyEval_CallObject(libxml_xmlPythonErrorFuncHandler, list); ++ /* Forget any errors caused in the error handler. */ ++ PyErr_Clear(); + Py_XDECREF(list); + Py_XDECREF(result); + } diff --git a/libxmlrpc/PKGBUILD b/libxmlrpc/PKGBUILD new file mode 100644 index 0000000..3110201 --- /dev/null +++ b/libxmlrpc/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=libxmlrpc +pkgver=1.51.08 +pkgrel=1 +epoch=1 +pkgdesc="XML-RPC for C and C++" +arch=('i686' 'x86_64') +url='http://xmlrpc-c.sourceforge.net/' +license=('Modified-BSD' 'Expat' 'GPL-1' 'Python-CWI') +depends=('curl') +makedepends=('libtool' 'setconf') +conflicts=('xmlrpc-c') +provides=('xmlrpc-c') +replaces=('xmlrpc-c') +options=(!emptydirs) +source=("https://downloads.sourceforge.net/project/xmlrpc-c/Xmlrpc-c%20Super%20Stable/$pkgver/xmlrpc-$pkgver.tgz") +sha512sums=('df0d8e3730b529fb10fb2cf9511dc55143ad3c7b4cce5522b61ed0d212080f3ebf4b6aa8a28911ddbe90029fce6bea7df28ee51f36196900a855beff5bd3a1cd') + +build() { + cd xmlrpc-$pkgver + + ./configure \ + --disable-cgi-server \ + --disable-libwww-client \ + --disable-libxml2-backend \ + --disable-wininet-client \ + --enable-cplusplus \ + --mandir=/usr/share/man \ + --prefix=/usr + + mkdir -p include/curl + touch include/curl/types.h + + make CFLAGS_PERSONAL="$CFLAGS -fPIC -w" CXXFLAGS_PERSONAL="$CXXFLAGS -fPIC -w" + make -C tools CFLAGS_PERSONAL="$CFLAGS -fPIC -w" CXXFLAGS_PERSONAL="$CXXFLAGS -fPIC -w" +} + +package() { + cd xmlrpc-$pkgver + + make DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" -C tools install + + # remove references to build directory + setconf "$pkgdir/usr/bin/xmlrpc-c-config" BLDDIR '' + setconf "$pkgdir/usr/bin/xmlrpc-c-config" ABS_SRCDIR '' + + # license + install -Dm644 doc/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/libxmp/PKGBUILD b/libxmp/PKGBUILD new file mode 100644 index 0000000..c1ebef9 --- /dev/null +++ b/libxmp/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=libxmp +pkgver=4.4.1 +_debver=4.4.1 +_debrel=3 +pkgrel=1 +pkgdesc='Library that supports many module-formats' +arch=('i686' 'x86_64') +url='https://xmp.sourceforge.net/' +license=('LGPL-2.1') +depends=('glibc') +makedepends=('quilt') +options=(!emptydirs) +source=("https://download.sourceforge.net/project/xmp/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libx/libxmp/libxmp_$_debver-$_debrel.debian.tar.xz") +sha512sums=('81608b60f9b952ae4899854235c99493f0acb9e79254143037f7f5b8d368a0149d52e5c32cd4fd07882d02897f801bac3f7e27d6dd20ba9f6106534f54ab1cf6' + '35f8651ea61dca0792b92eed13dcb5e7c0def4279557da0501b9cf0b6bd4c7b4eca1c59249a9fb28dba38d45378f8260540e36cd994f32dee7c7a98765a18270') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + CFLAGS="$CFLAGS -fno-lto" + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir/" install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/docs/COPYING.LIB" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/libxmu/PKGBUILD b/libxmu/PKGBUILD new file mode 100644 index 0000000..8326211 --- /dev/null +++ b/libxmu/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxmu +_openbsdver=6.9 +pkgver=1.1.3 +pkgrel=2 +pkgdesc="X11 miscellaneous micro-utility library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +depends=('libxext' 'libxt') +makedepends=('xenocara-util-macros') +license=('X11') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxmu-$pkgver.tar.lz{,.sig}) +sha512sums=('d0bef32ba96d67f6d0fea5268d59f966032591f684e2d5f45377cc52f1d27f557406a7078f95ec8f5ea7926113f335d7426981866a120491fa4449ec6f6ec6ba' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXmu" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXmu" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXmu" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxp/PKGBUILD b/libxp/PKGBUILD new file mode 100644 index 0000000..0986e5a --- /dev/null +++ b/libxp/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=libxp +pkgver=1.0.3 +pkgrel=2 +pkgdesc="X11 X Print Library" +arch=('i686' 'x86_64') +license=('X11') +url="https://xorg.freedesktop.org/" +depends=('libxext' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://xorg.freedesktop.org/releases/individual/lib/libXp-$pkgver.tar.bz2{,.sig} + add-proto-files.patch) +sha512sums=('502a2500ec0f519dae69ac035bf93c65c47e3bc301604aacb350e90043455f3485626194db45208e5521300b282843825e08b7f7c412a7497ffa02f5f1560c8d' + 'SKIP' + 'e2b1bf1d132f2a219901feb8bf4eaf08cd795521bb6175627a82d745d422ad189c6d24ad221d5804b5e32f5798ad75bc733bb94b3505453fa57c5b7951bdece8') +validpgpkeys=('3BB639E56F861FA2E86505690FDD682D974CA72A') # "Matt Turner " + +prepare() { + cd "libXp-$pkgver" + patch -Np1 -i ../add-proto-files.patch + autoreconf -vfi +} + +build() { + cd "libXp-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "libXp-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxp/add-proto-files.patch b/libxp/add-proto-files.patch new file mode 100644 index 0000000..0d8552c --- /dev/null +++ b/libxp/add-proto-files.patch @@ -0,0 +1,1408 @@ +diff -up libXp-1.0.3/configure.ac.jx libXp-1.0.3/configure.ac +--- libXp-1.0.3/configure.ac.jx 2015-02-21 17:04:36.000000000 -0500 ++++ libXp-1.0.3/configure.ac 2018-07-05 12:11:30.955684590 -0400 +@@ -42,11 +42,12 @@ XORG_DEFAULT_OPTIONS + AC_PROG_LIBTOOL + + # Check for X and print proto +-PKG_CHECK_MODULES(XPRINT, [x11 >= 1.6] xext xextproto xau printproto) ++PKG_CHECK_MODULES(XPRINT, [x11 >= 1.6] xext xextproto xau) + + AC_CONFIG_FILES([Makefile + src/Makefile + man/Makefile ++ printproto.pc + xp.pc]) + AC_OUTPUT + +diff -up libXp-1.0.3/include/X11/extensions/Print.h.jx libXp-1.0.3/include/X11/extensions/Print.h +--- libXp-1.0.3/include/X11/extensions/Print.h.jx 2018-07-05 12:11:12.281385412 -0400 ++++ libXp-1.0.3/include/X11/extensions/Print.h 2018-07-05 12:11:12.281385412 -0400 +@@ -0,0 +1,552 @@ ++/* $Xorg: Print.h,v 1.3 2000/08/18 04:05:44 coskrey Exp $ */ ++/****************************************************************************** ++ ****************************************************************************** ++ ** ++ ** File: Print.h ++ ** ++ ** Description: Definitions needed by the server, library, and ++ ** clients. Subportion restricted to library and ++ ** clients. ++ ** ++ ** Server, Library, Client portion has: ++ ** o All sz_* defines ++ ** o Revision and Name defines ++ ** o Common defines and constants (e.g. Keywords, Masks) ++ ** o Extension version structure ++ ** ++ ** Library and client subportion has: ++ ** o Convience Marcos ++ ** o Client side data structures ++ ** o Client side event structures (non wire) ++ ** o Library function prototypes ++ ** o some private stuff denoted with _whatever ++ ** ++ ** Printstr.h for server and library, but NOT clients. ++ ** ++ ****************************************************************************** ++ ** ++ ** (c) Copyright 1996 Hewlett-Packard Company ++ ** (c) Copyright 1996 International Business Machines Corp. ++ ** (c) Copyright 1996 Sun Microsystems, Inc. ++ ** (c) Copyright 1996 Novell, Inc. ++ ** (c) Copyright 1996 Digital Equipment Corp. ++ ** (c) Copyright 1996 Fujitsu Limited ++ ** (c) Copyright 1996 Hitachi, Ltd. ++ ** ++ ** Permission is hereby granted, free of charge, to any person obtaining a copy ++ ** of this software and associated documentation files (the "Software"), to deal ++ ** in the Software without restriction, including without limitation the rights ++ ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ ** copies of the Software, and to permit persons to whom the Software is ++ ** furnished to do so, subject to the following conditions: ++ ** ++ ** The above copyright notice and this permission notice shall be included in ++ ** all copies or substantial portions of the Software. ++ ** ++ ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++ ** COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER ++ ** IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ ** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ** ++ ** Except as contained in this notice, the names of the copyright holders shall ++ ** not be used in advertising or otherwise to promote the sale, use or other ++ ** dealings in this Software without prior written authorization from said ++ ** copyright holders. ++ ** ++ ****************************************************************************** ++ *****************************************************************************/ ++/* $XFree86: xc/include/extensions/Print.h,v 1.4 2000/01/25 18:37:31 dawes Exp $ */ ++ ++#ifndef _XpPrint_H_ ++#define _XpPrint_H_ ++ ++#ifndef _XP_PRINT_SERVER_ ++#include ++#include ++#include ++#endif /* _XP_PRINT_SERVER_ */ ++ ++#include ++ ++_XFUNCPROTOBEGIN ++ ++/****************************************************************************** ++ * ++ * Definitions used by the server, library and client. ++ */ ++ ++/******************************************************************** ++ * ++ * Naming and versioning information. ++ */ ++#define XP_PRINTNAME "XpExtension" ++ ++/* ++ * Add a define below for each major extension release. ++ */ ++#define XP_DONT_CHECK 0 ++#define XP_INITIAL_RELEASE 1 ++ ++/* ++ * For each single entry above, create one major/minor pair. ++ */ ++#define XP_PROTO_MAJOR 1 ++#define XP_PROTO_MINOR 0 ++ ++/* ++ * Identify current version. ++ */ ++#define XP_MAJOR_VERSION XP_PROTO_MAJOR ++#define XP_MINOR_VERSION XP_PROTO_MINOR ++ ++/* ++ * Misc version defines. ++ */ ++#define XP_ABSENT 0 /* Prior to XP Print support */ ++#define XP_PRESENT 1 /* With XP Print support */ ++ ++/******************************************************************** ++ * ++ * Xp Print Error codes. ++ */ ++#define XP_ERRORS 3 /* number of error types */ ++ ++#define XPBadContext 0 /* Print Context invalid or missing */ ++#define XPBadSequence 1 /* Illegal sequence of XP operations */ ++#define XPBadResourceID 2 /* X-resource not valid */ ++ ++/******************************************************************** ++ * ++ * Xp Print Event masks and codes. ++ * ++ */ ++#define XP_EVENTS 2 /* number of event types */ ++ ++#define XPNoEventMask 0 /* not an event - just a null mask */ ++#define XPPrintMask (1L<<0) ++#define XPAttributeMask (1L<<1) ++ ++#define XPPrintNotify 0 /* contains "detail" - see below */ ++#define XPAttributeNotify 1 /* contains "detail" - see below */ ++ ++#define XPStartJobNotify 0 /* value for "detail" in XPPrintNotify*/ ++#define XPEndJobNotify 1 ++#define XPStartDocNotify 2 ++#define XPEndDocNotify 3 ++#define XPStartPageNotify 4 ++#define XPEndPageNotify 5 ++ ++/******************************************************************** ++ * ++ * Xp Print Attribute Object codes (subset of ISO DPA 10175). The ++ * Xp Server can get and set any of the values, while the Xp Library ++ * may only be able to set a subset of the attribute objects. ++ * ++ * note: the codes are also used as "detail" for XPAttributeNotify ++ * ++ * note: XPPageAttr is not defined in ISO DPA 10175. It is unique ++ * to Xp, and its attributes are a proper subset of XPDocAttr. ++ */ ++typedef unsigned char XPAttributes; /* type of Xp*Attr codes */ ++ ++#define XP_ATTRIBUTES 5 /* those attrs currently supported */ ++ ++#define XPJobAttr 1 /* get/set */ ++#define XPDocAttr 2 /* get/set */ ++#define XPPageAttr 3 /* get/set - subset of XPDocAttr */ ++#define XPPrinterAttr 4 /* get only (library) */ ++#define XPServerAttr 5 /* get only (library), no ++ context needed */ ++ ++/* ++ * note: ISO DPA 10175 defines a number of "attribute objects", of ++ * which POSIX 1387.4 and the SI Xp will only support a ++ * subset. ++ */ ++#define XPMediumAttr 6 /* DPA-Object Medium */ ++#define XPFontAttr 7 /* DPA-Object Font */ ++#define XPResAttr 8 /* DPA-Object Resource */ ++#define XPTransAttr 9 /* DPA-Object Transfer method */ ++#define XPDelAttr 10 /* DPA-Object Delivery method */ ++#define XPAuxSPkg 11 /* DPA-Object Auxiliary sheet package */ ++#define XPAuxS 12 /* DPA-Object Auxiliary sheet */ ++#define XPFinishAttr 13 /* DPA-Object Finishing */ ++#define XPOutputAttr 14 /* DPA-Object Output method */ ++#define XPImpAttr 15 /* DPA-Object Imposition */ ++#define XPSchedAttr 16 /* DPA-Object Scheduler */ ++#define XPIntJobAttr 17 /* DPA-Object Initial value job */ ++#define XPIntDocAttr 18 /* DPA-Object Initial value document */ ++#define XPResConAttr 19 /* DPA-Object Resource context */ ++ ++ ++/* ++ * Replacement rules for XpSetAttributes ++ */ ++typedef unsigned char XPAttrReplacement; ++#define XPAttrReplace 1 ++#define XPAttrMerge 2 ++ ++ ++/* ++ * Return codes for XpGetDocumentData ++ */ ++typedef unsigned char XPGetDocStatus; ++#define XPGetDocFinished 0 /* normal termination */ ++#define XPGetDocSecondConsumer 1 /* setup error */ ++#define XPGetDocError 2 /* runtime error, see generated error */ ++ ++ ++/* ++ * Save data types for XpStartJob. ++ */ ++typedef unsigned char XPSaveData; ++#define XPSpool 1 /* Job data sent to spooler */ ++#define XPGetData 2 /* Job data via XpGetDocumentData */ ++ ++ ++/* ++ * Document types for XpStartDoc. ++ */ ++typedef unsigned char XPDocumentType; ++#define XPDocNormal 1 /* Doc data handled by Xserver */ ++#define XPDocRaw 2 /* Doc data passed through Xserver */ ++ ++ ++/******************************************************************** ++ * ++ * Xp Print Property Names ++ */ ++ ++ ++#ifndef _XP_PRINT_SERVER_ ++ ++/****************************************************************************** ++ * ++ * Definitions used by the library and clients only. ++ */ ++ ++/******************************************************************* ++ * ++ * General API defines and such. ++ */ ++ ++/* ++ * Print Context for XpInitContext and related calls. ++ */ ++typedef XID XPContext; ++ ++/* ++ * Struct for XpGetPrinterList. ++ */ ++typedef struct { ++ char *name; /* name */ ++ char *desc; /* localized description */ ++} XPPrinterRec, *XPPrinterList; ++ ++/* ++ * Typedefs for XpGetDocumentData ++ */ ++typedef void (*XPSaveProc)( Display *display, ++ XPContext context, ++ unsigned char *data, ++ unsigned int data_len, ++ XPointer client_data); ++ ++typedef void (*XPFinishProc)( Display *display, ++ XPContext context, ++ XPGetDocStatus status, ++ XPointer client_data); ++ ++/* ++ * Typedefs for XpSetLocaleHinter and XpGetLocaleHinter ++ */ ++typedef char * (*XPHinterProc)(void); ++ ++#if 0 ++/******************************************************************* ++ * ++ * Extension version structures. ++ * ++ **** this structure is now defined localy in the one file that uses it ++ **** in order to avoid clashes with its definition in XI.h ++ */ ++typedef struct { ++ int present; ++ short major_version; ++ short minor_version; ++} XExtensionVersion; ++#endif ++ ++/******************************************************************** ++ * ++ * Event structs for clients. ++ * ++ * note: these events are relative to a print context, and ++ * not to a window as in core X. ++ */ ++typedef struct { ++ int type; /* base + XPPrintNotify */ ++ unsigned long serial; /* # of last request processed by server */ ++ Bool send_event; /* true if from a SendEvent request */ ++ Display *display; /* Display the event was read from */ ++ XPContext context; /* print context where operation was requested */ ++ Bool cancel; /* was detailed event canceled */ ++ int detail; /* XPStartJobNotify, XPEndJobNotify, ++ XPStartDocNotify, XPEndDocNotify, ++ XPStartPageNotify, XPEndPageNotify */ ++} XPPrintEvent; ++ ++typedef struct { ++ int type; /* base + XPAttributeNotify */ ++ unsigned long serial; /* # of last request processed by server */ ++ Bool send_event; /* true if from a SendEvent request */ ++ Display *display; /* Display the event was read from */ ++ XPContext context; /* print context where operation was requested */ ++ int detail; /* XPJobAttr, XPDocAttr, XPPageAttr, ++ XPPrinterAttr, XPSpoolerAttr, ++ XPMediumAttr, XPServerAttr */ ++} XPAttributeEvent; ++ ++typedef struct { ++ int type; /* base + XPDataReadyNotify */ ++ unsigned long serial; /* # of last request processed by server */ ++ Bool send_event; /* true if from a SendEvent request */ ++ Display *display; /* Display the event was read from */ ++ XPContext context; /* print context where operation was requested */ ++ unsigned long available; /* bytes available for retrieval */ ++} XPDataReadyEvent; ++ ++ ++/********************************************************** ++ * ++ * Function prototypes for library side. ++ */ ++ ++extern XPContext XpCreateContext ( ++ Display *display, ++ char *printer_name ++); ++ ++extern void XpSetContext ( ++ Display *display, ++ XPContext print_context ++); ++ ++extern XPContext XpGetContext ( ++ Display *display ++); ++ ++extern void XpDestroyContext ( ++ Display *display, ++ XPContext print_context ++); ++ ++extern Screen *XpGetScreenOfContext ( ++ Display *display, ++ XPContext print_context ++); ++ ++extern Status XpGetPageDimensions ( ++ Display *display, ++ XPContext print_context, ++ unsigned short *width, /* return value */ ++ unsigned short *height, /* return value */ ++ XRectangle *reproducible_area /* return value */ ++); ++ ++extern void XpStartJob ( ++ Display *display, ++ XPSaveData save_data ++); ++ ++extern void XpEndJob ( ++ Display *display ++); ++ ++extern void XpCancelJob ( ++ Display *display, ++ Bool discard ++); ++ ++extern void XpStartDoc ( ++ Display *display, ++ XPDocumentType type ++); ++ ++extern void XpEndDoc ( ++ Display *display ++); ++ ++extern void XpCancelDoc ( ++ Display *display, ++ Bool discard ++); ++ ++extern void XpPutDocumentData ( ++ Display *display, ++ Drawable drawable, ++ unsigned char *data, ++ int data_len, ++ char *doc_fmt, ++ char *options ++); ++ ++extern Status XpGetDocumentData ( ++ Display *display, ++ XPContext context, ++ XPSaveProc save_proc, ++ XPFinishProc finish_proc, ++ XPointer client_data ++); ++ ++extern void XpStartPage ( ++ Display *display, ++ Window window ++); ++ ++extern void XpEndPage ( ++ Display *display ++); ++ ++extern void XpCancelPage ( ++ Display *display, ++ Bool discard ++); ++ ++extern void XpSelectInput ( ++ Display *display, ++ XPContext print_context, ++ unsigned long event_mask ++); ++ ++extern unsigned long XpInputSelected ( ++ Display *display, ++ XPContext print_context, ++ unsigned long *all_events_mask ++); ++ ++extern Bool XpSetImageResolution ( ++ Display *display, ++ XPContext print_context, ++ int image_res, ++ int *prev_res ++); ++ ++extern int XpGetImageResolution ( ++ Display *display, ++ XPContext print_context ++); ++ ++extern char *XpGetAttributes ( ++ Display *display, ++ XPContext print_context, ++ XPAttributes type ++); ++ ++extern void XpSetAttributes ( ++ Display *display, ++ XPContext print_context, ++ XPAttributes type, ++ char *pool, ++ XPAttrReplacement replacement_rule ++); ++ ++extern char *XpGetOneAttribute ( ++ Display *display, ++ XPContext print_context, ++ XPAttributes type, ++ char *attribute_name ++); ++ ++extern XPPrinterList XpGetPrinterList ( ++ Display *display, ++ char *printer_name, ++ int *list_count /* return value */ ++); ++ ++extern void XpFreePrinterList ( ++ XPPrinterList printer_list ++); ++ ++extern void XpRehashPrinterList ( ++ Display *display ++); ++ ++extern Status XpQueryVersion ( ++ Display *display, ++ short *major_version, /* return value */ ++ short *minor_version /* return value */ ++); ++ ++extern Bool XpQueryExtension ( ++ Display *display, ++ int *event_base_return, /* return value */ ++ int *error_base_return /* return value */ ++); ++ ++extern Screen **XpQueryScreens ( ++ Display *display, ++ int *list_count /* return value */ ++); ++ ++extern Status XpGetPdmStartParams ( ++ Display *print_display, ++ Window print_window, ++ XPContext print_context, ++ Display *video_display, ++ Window video_window, ++ Display **selection_display, /* return value */ ++ Atom *selection, /* return value */ ++ Atom *type, /* return value */ ++ int *format, /* return value */ ++ unsigned char **data, /* return value */ ++ int *nelements /* return value */ ++); ++ ++extern Status XpGetAuthParams ( ++ Display *print_display, ++ Display *video_display, ++ Display **selection_display, /* return value */ ++ Atom *selection, /* return value */ ++ Atom *target /* return value */ ++); ++ ++extern Status XpSendAuth ( ++ Display *display, ++ Window window ++); ++ ++extern Status XpSendOneTicket ( ++ Display *display, ++ Window window, ++ Xauth *ticket, ++ Bool more ++); ++ ++extern void XpSetLocaleHinter ( ++ XPHinterProc hinter_proc, ++ char *hinter_desc ++); ++ ++extern char *XpGetLocaleHinter ( ++ XPHinterProc *hinter_proc ++); ++ ++extern char *XpGetLocaleNetString(void); ++ ++extern char *XpNotifyPdm ( ++ Display *print_display, ++ Window print_window, ++ XPContext print_context, ++ Display *video_display, ++ Window video_window, ++ Bool auth_flag ++); ++ ++#endif /* _XP_PRINT_SERVER_ */ ++ ++_XFUNCPROTOEND ++ ++#endif /* _XpPrint_H_ */ +diff -up libXp-1.0.3/include/X11/extensions/Printstr.h.jx libXp-1.0.3/include/X11/extensions/Printstr.h +--- libXp-1.0.3/include/X11/extensions/Printstr.h.jx 2018-07-05 12:11:12.282385427 -0400 ++++ libXp-1.0.3/include/X11/extensions/Printstr.h 2018-07-05 12:11:12.282385427 -0400 +@@ -0,0 +1,783 @@ ++/* $Xorg: Printstr.h,v 1.3 2000/08/18 04:05:44 coskrey Exp $ */ ++/****************************************************************************** ++ ****************************************************************************** ++ ** ++ ** File: Printstr.h ++ ** ++ ** Description: Definitions needed by the server and library, but ++ ** not clients. ++ ** ++ ** Print.h for server, library and clients. ++ ** ++ ****************************************************************************** ++ ** ++ ** (c) Copyright 1996 Hewlett-Packard Company ++ ** (c) Copyright 1996 International Business Machines Corp. ++ ** (c) Copyright 1996 Sun Microsystems, Inc. ++ ** (c) Copyright 1996 Novell, Inc. ++ ** (c) Copyright 1996 Digital Equipment Corp. ++ ** (c) Copyright 1996 Fujitsu Limited ++ ** (c) Copyright 1996 Hitachi, Ltd. ++ ** ++ ** Permission is hereby granted, free of charge, to any person obtaining a copy ++ ** of this software and associated documentation files (the "Software"), to deal ++ ** in the Software without restriction, including without limitation the rights ++ ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ ** copies of the Software, and to permit persons to whom the Software is ++ ** furnished to do so, subject to the following conditions: ++ ** ++ ** The above copyright notice and this permission notice shall be included in ++ ** all copies or substantial portions of the Software. ++ ** ++ ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++ ** COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER ++ ** IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ ** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ** ++ ** Except as contained in this notice, the names of the copyright holders shall ++ ** not be used in advertising or otherwise to promote the sale, use or other ++ ** dealings in this Software without prior written authorization from said ++ ** copyright holders. ++ ** ++ ****************************************************************************** ++ *****************************************************************************/ ++/* $XFree86: xc/include/extensions/Printstr.h,v 1.5 2001/08/01 00:44:35 tsi Exp $ */ ++ ++ ++#ifndef _XpPrintstr_H_ ++#define _XpPrintstr_H_ ++ ++/* ++ * NEED_EVENTS and NEED_REPLIES are hacks to limit the linker symbol-table ++ * size. When function prototypes are needed from Print.h, this sets up ++ * a cascading dependency on Printstr.h and eventually Xproto.h to provide ++ * the event and reply struct definitions. ++ */ ++#ifndef NEED_EVENTS ++#define NEED_EVENTS ++#endif /* NEED_EVENTS */ ++ ++#define NEED_REPLIES ++ ++#include ++#ifndef _XP_PRINT_SERVER_ ++#include ++#endif /* _XP_PRINT_SERVER_ */ ++ ++/* ++ * Pull in other definitions. Print.h will hide some things if we're ++ * doing server side work. ++ */ ++#include ++ ++#include ++ ++_XFUNCPROTOBEGIN ++ ++/****************************************************************************** ++ * ++ * Protocol requests constants and alignment values ++ * ++ * Note: Xlib macro's expect X_ABC where ABC is the name of the ++ * protocol request. ++ */ ++#define X_PrintQueryVersion 0 ++#define X_PrintGetPrinterList 1 ++#define X_PrintCreateContext 2 ++#define X_PrintSetContext 3 ++#define X_PrintGetContext 4 ++#define X_PrintDestroyContext 5 ++#define X_PrintGetContextScreen 6 ++#define X_PrintStartJob 7 ++#define X_PrintEndJob 8 ++#define X_PrintStartDoc 9 ++#define X_PrintEndDoc 10 ++#define X_PrintPutDocumentData 11 ++#define X_PrintGetDocumentData 12 ++#define X_PrintStartPage 13 ++#define X_PrintEndPage 14 ++#define X_PrintSelectInput 15 ++#define X_PrintInputSelected 16 ++#define X_PrintGetAttributes 17 ++#define X_PrintSetAttributes 18 ++#define X_PrintGetOneAttribute 19 ++#define X_PrintRehashPrinterList 20 ++#define X_PrintGetPageDimensions 21 ++#define X_PrintQueryScreens 22 ++#define X_PrintSetImageResolution 23 ++#define X_PrintGetImageResolution 24 ++ ++/******************************************************************** ++ * ++ * Protocol data types ++ */ ++#define PCONTEXT CARD32 ++#define WINDOW CARD32 ++#define DRAWABLE CARD32 ++#define BITMASK CARD32 ++ ++/****************************************************************************** ++ * ++ * Event wire struct definitions ++ * ++ * Note: Xlib macro's expect xABC struct names and sz_xABC size ++ * constants where ABC is the name of the protocol request. ++ */ ++ ++ ++/********************************************************************* ++ * ++ * Events. ++ * ++ * See Print.h for the protocol "type" values. ++ */ ++typedef struct _xPrintPrintEvent { ++ BYTE type; /* XPPrintNotify + extEntry->eventBase */ ++ BYTE detail; /* XPStartJobNotify, XPEndJobNotify, ++ XPStartDocNotify, XPEndDocNotify, ++ XPStartPageNotify, XPEndPageNotify */ ++ CARD16 sequenceNumber B16; ++ PCONTEXT printContext B32; /* print context */ ++ BOOL cancel; /* canceled flag */ ++ CARD8 pad1; /* rest is unused */ ++ CARD16 pad2 B16; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++ CARD32 pad6 B32; ++ CARD32 pad7 B32; ++} xPrintPrintEvent; ++#define sz_xPrintPrintEvent 32; ++ ++typedef struct _xPrintAttributeEvent { ++ BYTE type; /* XPAttributeNotify + extEntry->eventBase */ ++ BYTE detail; /* XPJobAttr, XPDocAttr, XPPageAttr, ++ XPPrinterAttr, XPSpoolerAttr, ++ XPMediumAttr, XPServerAttr */ ++ CARD16 sequenceNumber B16; ++ PCONTEXT printContext B32; /* print context */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++ CARD32 pad6 B32; ++} xPrintAttributeEvent; ++#define sz_xPrintAttributeEvent 32; ++ ++ ++/********************************************************************* ++ * ++ * Requests ++ */ ++typedef struct _PrintQueryVersion { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintQueryVersion */ ++ CARD16 length B16; ++} xPrintQueryVersionReq; ++#define sz_xPrintQueryVersionReq 4 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD16 majorVersion B16; /* major version of Xp protocol */ ++ CARD16 minorVersion B16; /* minor version of Xp protocol */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++} xPrintQueryVersionReply; ++#define sz_xPrintQueryVersionReply 32 ++ ++ ++typedef struct _PrintGetPrinterList { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintGetPrinterList */ ++ CARD16 length B16; ++ CARD32 printerNameLen B32; /* length of printer name */ ++ CARD32 localeLen B32; /* length of locale string */ ++ ++ /* variable portion ***************************************** ++ STRING8 printerName; * printer name * ++ BYTE pad(printerNameLen) * unused * ++ STRING8 locale; * locale * ++ BYTE pad(localeLen) * unused * ++ ************************************************************/ ++} xPrintGetPrinterListReq; ++#define sz_xPrintGetPrinterListReq 12 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD32 listCount B32; /* of PRINTER recs below */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++ ++ /* variable portion ***************************************** ++ CARD32 nameLen B32; * length of name in bytes * ++ STRING8 name; * name * ++ BYTE pad(nameLen) * unused * ++ ++ CARD32 descLen B32; * length of desc in bytes * ++ STRING8 desc; * localized description * ++ BYTE pad(descLen) * unused * ++ ************************************************************/ ++} xPrintGetPrinterListReply; ++#define sz_xPrintGetPrinterListReply 32 ++ ++ ++typedef struct _PrintRehashPrinterList { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintRehashPrinterList */ ++ CARD16 length B16; ++} xPrintRehashPrinterListReq; ++#define sz_xPrintRehashPrinterListReq 4 ++ ++ ++typedef struct _PrintCreateContext { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintInitSetContext */ ++ CARD16 length B16; ++ CARD32 contextID B32; /* ID for context */ ++ CARD32 printerNameLen B32; /* length of printerName in bytes */ ++ CARD32 localeLen B32; /* length of locale in bytes */ ++ ++ /* variable portion ***************************************** ++ STRING8 printerName * printer name * ++ BYTE pad(printerNameLen) * unused * ++ STRING8 locale * locale * ++ BYTE pad(locale) * unused * ++ ************************************************************/ ++} xPrintCreateContextReq; ++#define sz_xPrintCreateContextReq 16 ++ ++ ++typedef struct _PrintSetContext { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintSetContext */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++} xPrintSetContextReq; ++#define sz_xPrintSetContextReq 8 ++ ++ ++typedef struct _PrintGetContext { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintGetContext */ ++ CARD16 length B16; ++} xPrintGetContextReq; ++#define sz_xPrintGetContextReq 4 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ PCONTEXT printContext B32; /* print context */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++} xPrintGetContextReply; ++#define sz_xPrintGetContextReply 32 ++ ++ ++typedef struct _PrintDestroyContext { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintDestroyContext */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++} xPrintDestroyContextReq; ++#define sz_xPrintDestroyContextReq 8 ++ ++ ++typedef struct _PrintGetContextScreen { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintGetContextScreen */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++} xPrintGetContextScreenReq; ++#define sz_xPrintGetContextScreenReq 8 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ WINDOW rootWindow; /* screenPtr represented as rootWin */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++} xPrintGetContextScreenReply; ++#define sz_xPrintGetContextScreenReply 32 ++ ++ ++typedef struct _PrintStartJob { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintStartJob */ ++ CARD16 length B16; ++ CARD8 saveData; /* save data boolean */ ++ CARD8 pad1; ++ CARD16 pad2 B16; ++} xPrintStartJobReq; ++#define sz_xPrintStartJobReq 8 ++ ++typedef struct _PrintEndJob { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintEndJob */ ++ CARD16 length B16; ++ BOOL cancel; /* cancel boolean */ ++ CARD8 pad1; ++ CARD16 pad2 B16; ++} xPrintEndJobReq; ++#define sz_xPrintEndJobReq 8 ++ ++ ++typedef struct _PrintStartDoc { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintStartDoc */ ++ CARD16 length B16; ++ CARD8 type; /* type for document */ ++ CARD8 pad1; ++ CARD16 pad2 B16; ++} xPrintStartDocReq; ++#define sz_xPrintStartDocReq 8 ++ ++typedef struct _PrintEndDoc { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintEndDoc */ ++ CARD16 length B16; ++ BOOL cancel; /* cancel boolean */ ++ CARD8 pad1; ++ CARD16 pad2 B16; ++} xPrintEndDocReq; ++#define sz_xPrintEndDocReq 8 ++ ++ ++typedef struct _PrintPutDocumentData { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintPutDocumentData */ ++ CARD16 length B16; ++ DRAWABLE drawable B32; /* target drawable */ ++ CARD32 len_data B32; /* big len in bytes */ ++ CARD16 len_fmt; /* len in bytes */ ++ CARD16 len_options; /* len in bytes */ ++ ++ /* variable portion ***************************************** ++ LISTofBYTE data; * data * ++ BYTE pad(len_data) * unused * ++ STRING8 doc_fmt; * ISO compliant desc of data type * ++ BYTE pad(len_fmt) * unused * ++ STRING8 options; * additional device-dependent desc * ++ BYTE pad(len_options) * unused * ++ ************************************************************/ ++} xPrintPutDocumentDataReq; ++#define sz_xPrintPutDocumentDataReq 16 ++ ++ ++typedef struct _PrintGetDocumentData { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintGetDocumentData */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++ CARD32 maxBufferSize B32; /* maximum buffer size requested */ ++} xPrintGetDocumentDataReq; ++#define sz_xPrintGetDocumentDataReq 12 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD32 statusCode B32; /* status code for reply */ ++ CARD32 finishedFlag B32; /* is this the last reply */ ++ CARD32 dataLen B32; /* data length */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ ++ /* variable portion ***************************************** ++ LISTofBYTE data; * data * ++ BYTE pad(count) * unused * ++ ************************************************************/ ++} xPrintGetDocumentDataReply; ++#define sz_xPrintGetDocumentDataReply 32 ++ ++ ++typedef struct _PrintStartPage { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintStartPage */ ++ CARD16 length B16; ++ WINDOW window B32; /* window */ ++} xPrintStartPageReq; ++#define sz_xPrintStartPageReq 8 ++ ++typedef struct _PrintEndPage { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintEndPage */ ++ CARD16 length B16; ++ BOOL cancel; /* cancel boolean */ ++ CARD8 pad1; ++ CARD16 pad2 B16; ++} xPrintEndPageReq; ++#define sz_xPrintEndPageReq 8 ++ ++ ++typedef struct _PrintSelectInput { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintSelectInput */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++ BITMASK eventMask B32; ++} xPrintSelectInputReq; ++#define sz_xPrintSelectInputReq 12 ++ ++ ++typedef struct _PrintInputSelected { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintInputSelected */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++} xPrintInputSelectedReq; ++#define sz_xPrintInputSelectedReq 8 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ BITMASK eventMask B32; /* your event mask */ ++ BITMASK allEventsMask B32; /* all event mask */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++} xPrintInputSelectedReply; ++#define sz_xPrintInputSelectedReply 32 ++ ++typedef struct _PrintGetAttributes { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintGetAttributes */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++ CARD8 type; /* type */ ++ CARD8 pad1; /* unused */ ++ CARD16 pad2 B16; /* unused */ ++} xPrintGetAttributesReq; ++#define sz_xPrintGetAttributesReq 12 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD32 stringLen B32; /* length of xrm db string */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++ ++ /* variable portion ***************************************** ++ STRING8 string; * xrm db as a string * ++ BYTE pad(stringLen) * unused * ++ ************************************************************/ ++} xPrintGetAttributesReply; ++#define sz_xPrintGetAttributesReply 32 ++ ++ ++typedef struct _PrintSetAttributes { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintSetAttributes */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++ CARD32 stringLen B32; /* length of xrm db string */ ++ CARD8 type; /* type */ ++ CARD8 rule; /* replacement rule */ ++ CARD16 pad1 B16; /* unused */ ++ ++ /* variable portion ***************************************** ++ STRING8 string; * xrm db as a string * ++ BYTE pad(stringLen) * unused * ++ ************************************************************/ ++} xPrintSetAttributesReq; ++#define sz_xPrintSetAttributesReq 16 ++ ++ ++typedef struct _PrintGetOneAttribute { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintGetOneAttribute */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++ CARD32 nameLen; /* length of name string */ ++ CARD8 type; /* type */ ++ CARD8 pad1; /* unused */ ++ CARD16 pad2 B16; /* unused */ ++ ++ /* variable portion ***************************************** ++ STRING8 name; * name as a string * ++ BYTE pad(name) * unused * ++ ************************************************************/ ++} xPrintGetOneAttributeReq; ++#define sz_xPrintGetOneAttributeReq 16 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD32 valueLen B32; /* length of value string */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++ ++ /* variable portion ***************************************** ++ STRING8 value; * value as a string * ++ BYTE pad(value) * unused * ++ ************************************************************/ ++} xPrintGetOneAttributeReply; ++#define sz_xPrintGetOneAttributeReply 32 ++ ++ ++typedef struct _PrintGetPageDimensions { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintGetPageDimensions */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++} xPrintGetPageDimensionsReq; ++#define sz_xPrintGetPageDimensionsReq 8 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD16 width; /* total pixel width */ ++ CARD16 height; /* total pixel height */ ++ CARD16 rx; /* reproducable x pixel offset */ ++ CARD16 ry; /* reproducable y pixel offset */ ++ CARD16 rwidth; /* reproducable x pixel width */ ++ CARD16 rheight; /* reproducable y pixel width */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++} xPrintGetPageDimensionsReply; ++#define sz_xPrintGetPageDimensionsReply 32 ++ ++ ++typedef struct _PrintQueryScreens { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintQueryScreens */ ++ CARD16 length B16; ++} xPrintQueryScreensReq; ++#define sz_xPrintQueryScreensReq 4 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; /* not used */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD32 listCount; /* number of screens following */ ++ CARD32 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++ ++ /* variable portion ***************************************** ++ WINDOW rootWindow; * root window of screen * ++ ************************************************************/ ++} xPrintQueryScreensReply; ++#define sz_xPrintQueryScreensReply 32 ++ ++typedef struct _PrintSetImageResolution { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintSetImageResolution */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++ CARD16 imageRes B16; /* image resolution */ ++ CARD16 pad1 B16; ++} xPrintSetImageResolutionReq; ++#define sz_xPrintSetImageResolutionReq 12 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ BOOL status; /* accepted or not */ ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD16 prevRes B16; /* previous resolution */ ++ CARD16 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++ CARD32 pad6 B32; ++} xPrintSetImageResolutionReply; ++#define sz_xPrintSetImageResolutionReply 32 ++ ++typedef struct _PrintGetImageResolution { ++ CARD8 reqType; /* always PrintReqCode */ ++ CARD8 printReqType; /* always X_PrintGetImageResolution */ ++ CARD16 length B16; ++ PCONTEXT printContext B32; /* print context */ ++} xPrintGetImageResolutionReq; ++#define sz_xPrintGetImageResolutionReq 8 ++ ++typedef struct { ++ BYTE type; /* X_Reply */ ++ CARD8 unused; ++ CARD16 sequenceNumber B16; ++ CARD32 length B32; ++ CARD16 imageRes B16; /* image resolution */ ++ CARD16 pad1 B32; ++ CARD32 pad2 B32; ++ CARD32 pad3 B32; ++ CARD32 pad4 B32; ++ CARD32 pad5 B32; ++ CARD32 pad6 B32; ++} xPrintGetImageResolutionReply; ++#define sz_xPrintGetImageResolutionReply 32 ++ ++#ifndef _XP_PRINT_SERVER_ ++/*********************************************************************** ++ * ++ * Library-only definitions. ++ */ ++extern XPHinterProc _xp_hinter_proc; ++extern char *_xp_hinter_desc; ++extern int _xp_hinter_init; ++ ++#else /* _XP_PRINT_SERVER_ */ ++ ++/*********************************************************************** ++ * ++ * Server-only definitions shared between the extension and DDX layers. ++ * ++ */ ++ ++/* ++ * Internal return code used to indicate that the requesting ++ * client has been suspended. ++ */ ++#define Suspended 84 ++ ++struct _XpContext; ++ ++extern void XpRegisterPrinterScreen( ++ ScreenPtr pScreen, ++ int (*CreateContext)(struct _XpContext *)); ++ ++typedef struct _xpprintFuncs { ++ int (*StartJob)( ++ struct _XpContext * /* pContext */, ++ Bool /* sendClientData */, ++ ClientPtr /* client */); ++ int (*EndJob)(struct _XpContext *, int); ++ int (*StartDoc)( ++ struct _XpContext * /* pContext */, ++ XPDocumentType /* type */); ++ int (*EndDoc)(struct _XpContext *, int); ++ int (*StartPage)( ++ struct _XpContext * /* pContext */, ++ WindowPtr /* pWin */); ++ int (*EndPage)( ++ struct _XpContext * /* pContext */, ++ WindowPtr /* pWin */); ++ int (*PutDocumentData)( ++ struct _XpContext * /* pContext */, ++ DrawablePtr /* pDraw */, ++ char * /* pData */, ++ int /* len_data */, ++ char * /* pDoc_fmt */, ++ int /* len_fmt */, ++ char * /* pOptions */, ++ int /* len_options */, ++ ClientPtr /* client */); ++ int (*GetDocumentData)( ++ struct _XpContext * /* pContext */, ++ ClientPtr /* client */, ++ int /* maxBufferSize */); ++ int (*DestroyContext)( ++ struct _XpContext *); /* pContext */ ++ char *(*GetAttributes)( ++ struct _XpContext *, ++ XPAttributes /* pool */); ++ char *(*GetOneAttribute)( ++ struct _XpContext * /* pContext */, ++ XPAttributes /* pool */, ++ char * /* attrs */); ++ int (*SetAttributes)( ++ struct _XpContext * /* pContext */, ++ XPAttributes /* pool */, ++ char * /* attrs */); ++ int (*AugmentAttributes)( ++ struct _XpContext * /* pContext */, ++ XPAttributes /* pool */, ++ char * /* attrs */); ++ int (*GetMediumDimensions)( ++ struct _XpContext * /* pPrintContext */, ++ CARD16 * /* pWidth */, ++ CARD16 * /* pHeight */); ++ int (*GetReproducibleArea)( ++ struct _XpContext * /* pPrintContext */, ++ xRectangle * /* pRect */); ++ int (*SetImageResolution)( ++ struct _XpContext * /* pPrintContext */, ++ int /* imageRes */, ++ Bool * /* pStatus */); ++} XpDriverFuncs, *XpDriverFuncsPtr; ++ ++/* ++ * Each print context is represented by one of the following structs ++ * associated with a resource ID of type RTcontext . A pointer to ++ * the context is placed in the Xp extension's devPrivates ++ * element in each client * which establishes a context via ++ * either initContext or setContext. ++ * The context pointer is also placed in the struct indicated by the ++ * RTpage resource associated with each StartPage'd window. ++ */ ++typedef struct _XpContext { ++ XID contextID; ++ char *printerName; ++ int screenNum; /* screen containing the printer */ ++ struct _XpClient *clientHead; /* list of clients */ ++ CARD32 state; ++ VisualID pageWin; ++ DevUnion *devPrivates; ++ XpDriverFuncs funcs; ++ ClientPtr clientSlept; ++ int imageRes; ++} XpContextRec, *XpContextPtr; ++ ++#include /* FontResolutionPtr */ ++ ++extern Bool XpAllocateContextPrivate(int, unsigned); ++extern FontResolutionPtr XpGetClientResolutions(ClientPtr, int *); ++extern XpContextPtr XpContextOfClient(ClientPtr); ++extern XpContextPtr XpGetPrintContext(ClientPtr); ++extern int XpAllocateContextPrivateIndex(void); ++extern int XpRehashPrinterList(void); ++extern void XpSetFontResFunc(ClientPtr); ++extern void XpUnsetFontResFunc(ClientPtr); ++extern void XpRegisterInitFunc(ScreenPtr, char *, int (*)(struct _XpContext *)); ++ ++#endif /* _XP_PRINT_SERVER_ */ ++ ++_XFUNCPROTOEND ++ ++#endif /* _XpPrintstr_H_ */ +diff -up libXp-1.0.3/Makefile.am.jx libXp-1.0.3/Makefile.am +--- libXp-1.0.3/Makefile.am.jx 2015-02-21 17:02:53.000000000 -0500 ++++ libXp-1.0.3/Makefile.am 2018-07-05 12:11:12.279385380 -0400 +@@ -23,10 +23,15 @@ AM_CFLAGS = $(XPRINT_CFLAGS) + + SUBDIRS = src man + ++printdir = $(includedir)/X11/extensions ++print_HEADERS = \ ++ $(top_srcdir)/include/X11/extensions/Print.h \ ++ $(top_srcdir)/include/X11/extensions/Printstr.h ++ + pkgconfigdir = $(libdir)/pkgconfig +-pkgconfig_DATA = xp.pc ++pkgconfig_DATA = xp.pc printproto.pc + +-EXTRA_DIST = xp.pc.in ChangeLog ++EXTRA_DIST = xp.pc.in printproto.pc.in ChangeLog + MAINTAINERCLEANFILES = ChangeLog + + .PHONY: ChangeLog +diff -up libXp-1.0.3/printproto.pc.in.jx libXp-1.0.3/printproto.pc.in +--- libXp-1.0.3/printproto.pc.in.jx 2018-07-05 12:11:12.283385443 -0400 ++++ libXp-1.0.3/printproto.pc.in 2018-07-05 12:11:12.282385427 -0400 +@@ -0,0 +1,10 @@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: PrintProto ++Description: Print extension headers ++Version: @PACKAGE_VERSION@ ++Requires: xau ++Cflags: -I${includedir} +diff -up libXp-1.0.3/src/Makefile.am.jx libXp-1.0.3/src/Makefile.am +--- libXp-1.0.3/src/Makefile.am.jx 2015-02-21 17:02:53.000000000 -0500 ++++ libXp-1.0.3/src/Makefile.am 2018-07-05 12:11:12.283385443 -0400 +@@ -24,7 +24,7 @@ libXp_la_LIBADD = $(XPRINT_LIBS) + + AM_CFLAGS = $(CWARNFLAGS) $(XPRINT_CFLAGS) $(MALLOC_ZERO_CFLAGS) + +-AM_CPPFLAGS = -I$(top_srcdir)/include/X11/extensions ++AM_CPPFLAGS = -I$(top_srcdir)/include/ + + # + # Library version number. This must match old versions on + diff --git a/libxpm/PKGBUILD b/libxpm/PKGBUILD new file mode 100644 index 0000000..459f8d4 --- /dev/null +++ b/libxpm/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxpm +_openbsdver=6.9 +pkgver=3.5.13 +pkgrel=2 +pkgdesc="X11 pixmap library, provided by Xenocara" +arch=('i686' 'x86_64') +license=('X11') +url="https://www.xenocara.org" +depends=('libxt' 'libxext') +makedepends=('xenocara-util-macros' 'gettext-tiny') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxpm-$pkgver.tar.lz{,.sig}) +sha512sums=('c7f9f5ae9dbca2150f1466b98bc1c36a9c7be39fcb6c7c23a129a648a44bcdf04db83342dec991f7cce2d0344c4085fa4e99a87dcc86b5c3a2d918d3bf74de57' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXpm" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXpm" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXpm" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxpresent/PKGBUILD b/libxpresent/PKGBUILD new file mode 100644 index 0000000..93c6a03 --- /dev/null +++ b/libxpresent/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=libxpresent +_openbsdver=6.9 +pkgver=1.0.0 +pkgrel=1 +pkgdesc='X Present Extension library, provided by Xenocara' +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +depends=('libxfixes' 'libxrandr') +makedepends=('xenocara-util-macros') +license=('Expat') +source=("https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxpresent-$pkgver.tar.lz"{,.sig}) +sha512sums=('e74924c405744ad2a3f25cdab8e86c2cb87d8101c47554f71cd91c37f9964b19af04eaf3123c557a3dd2681bcb110b996ac885b2012f426126b4f3cee099b60c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXpresent" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXpresent" + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/lib/libXpresent" + make check +} + +package() { + cd "xenocara-$_openbsdver/lib/libXpresent" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxrandr/PKGBUILD b/libxrandr/PKGBUILD new file mode 100644 index 0000000..194f8ee --- /dev/null +++ b/libxrandr/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxrandr +_openbsdver=6.9 +pkgver=1.5.2 +pkgrel=2 +pkgdesc="X11 RandR extension library, provided by Xenocara" +arch=('i686' 'x86_64') +license=('Expat') +url="https://www.xenocara.org" +depends=('libxext' 'libxrender' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxrandr-$pkgver.tar.lz{,.sig}) +sha512sums=('98f37c92a1f88c7817494d5f3008e61b2bebe8dee8b51a9b182ecee44a5e8bf9e18811ffa1f1caa9e6fa23427e847eaec0b58872c83c2822a26f748a693a4010' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXrandr" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXrandr" + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXrandr" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxrender/PKGBUILD b/libxrender/PKGBUILD new file mode 100644 index 0000000..30276f8 --- /dev/null +++ b/libxrender/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxrender +_openbsdver=6.9 +pkgver=0.9.10 +pkgrel=3 +pkgdesc="X Rendering Extension client library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libx11>=1.3.4' 'xenocara-proto') +makedepends=('pkg-config' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxrender-$pkgver.tar.lz{,.sig}) +sha512sums=('490bc5873d4d9ae74c901c56fee5a8ebb2cd5020a1c1edad527bf0415dd0ba3b8d5405b67e2cc04bd155be7c4cda1c7e5bc201a1586266ce6475d3edcd85bd89' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXrender" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXrender" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXrender" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxres/PKGBUILD b/libxres/PKGBUILD new file mode 100644 index 0000000..e9882d1 --- /dev/null +++ b/libxres/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxres +_openbsdver=6.9 +pkgver=1.2.0 +pkgrel=3 +pkgdesc="X11 Resource extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxext') +makedepends=('xenocara-proto' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxres-$pkgver.tar.lz{,.sig}) +sha512sums=('d8340c953860b74085d1d34baf2a8bb8cb597f68fa4c34549e8c39ef7e4a55067e955cce9be19653dc8a548300be3f958f5b7ab708151c48bd522a9cff44476c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXRes" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXRes" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXRes" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxshmfence/PKGBUILD b/libxshmfence/PKGBUILD new file mode 100644 index 0000000..a5652a2 --- /dev/null +++ b/libxshmfence/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=libxshmfence +_openbsdver=6.9 +pkgver=1.3 +pkgrel=3 +pkgdesc="a library that exposes an event API on top of Linux kernel futexes, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('glibc') +makedepends=('xenocara-util-macros' 'xenocara-proto') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxshmfence-$pkgver.tar.lz{,.sig} + remove-forced-openbsd-futex-support.patch) +sha512sums=('5b717aafa3b2443f60c75d20d534abf6b52a10a8de7520e04290eede6ad41cede44872ddf23739f464b9e30029341454e7c5c8e717859899cbe94cb9a66f186c' + 'SKIP' + 'f32ed726960475fba1c2c253f2f9d9e8d65bc562410c9db26c79f4645f70a32eeb1c5f5e6a0f270364cb1e79819cca99a9ffac6383e4c86fc298081442defc81') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libxshmfence" + patch -p1 -i "$srcdir/remove-forced-openbsd-futex-support.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libxshmfence" + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/lib/libxshmfence" + make -k check +} + +package() { + cd "xenocara-$_openbsdver/lib/libxshmfence" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxshmfence/remove-forced-openbsd-futex-support.patch b/libxshmfence/remove-forced-openbsd-futex-support.patch new file mode 100644 index 0000000..1cbb516 --- /dev/null +++ b/libxshmfence/remove-forced-openbsd-futex-support.patch @@ -0,0 +1,27 @@ +diff --git a/src/xshmfence_futex.h b/src/xshmfence_futex.h +index 8a6dae0..673ac0e 100644 +--- a/src/xshmfence_futex.h ++++ b/src/xshmfence_futex.h +@@ -26,21 +26,7 @@ + + #include + +-#ifdef HAVE_FUTEX +- +-#include +-#include +-#include +- +-static inline int futex_wake(int32_t *addr) { +- return futex(addr, FUTEX_WAKE, INT_MAX, NULL, NULL); +-} +- +-static inline int futex_wait(int32_t *addr, int32_t value) { +- return futex(addr, FUTEX_WAIT, value, NULL, NULL); +-} +- +-#elif HAVE_UMTX ++#ifdef HAVE_UMTX + + #include + #include diff --git a/libxslt/PKGBUILD b/libxslt/PKGBUILD new file mode 100644 index 0000000..8155576 --- /dev/null +++ b/libxslt/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=libxslt +pkgver=1.1.34 +_debver=1.1.34 +_debrel=4 +pkgrel=2 +pkgdesc="XML stylesheet transformation library" +url="http://xmlsoft.org/XSLT/" +arch=(i686 x86_64) +license=(Expat) +depends=(libxml2 libgcrypt) +makedepends=(tauthon quilt) +checkdepends=(docbook-xml python) +source=(ftp://xmlsoft.org/libxslt/libxslt-$pkgver.tar.gz{,.asc} + https://deb.debian.org/debian/pool/main/libx/libxslt/libxslt_$_debver-$_debrel.debian.tar.xz) +validpgpkeys=('C74415BA7C9C7F78F02E1DC34606B8A5DE95BC1F') # Daniel Veillard +sha512sums=('1516a11ad608b04740674060d2c5d733b88889de5e413b9a4e8bf8d1a90d712149df6d2b1345b615f529d7c7d3fa6dae12e544da828b39c7d415e54c0ee0776b' + 'SKIP' + 'dbd4104503a3eee856bf42c0a55e78de3687578498c4ab6dac889e787997a1a2fc9d95a0ea7acee37fa6e31e3f79bd791a176eb2f616fa5a8886008fe87b53ce') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0003-remove-plugin-in-xslt-config.patch || true + rm -v debian/patches/0004-do-not-clean-manpage.patch || true + + quilt push -av + fi + + sed -e 's|/usr/bin/python -u|/usr/bin/tauthon -u|g' \ + -e 's|/usr/bin/python$|/usr/bin/tauthon|g' \ + -i python/tests/*.py + + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --with-python=/usr/bin/tauthon + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +check() { + cd $pkgname-$pkgver + make check +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + find "$pkgdir" -name '*.a' -print -delete +} diff --git a/libxss/PKGBUILD b/libxss/PKGBUILD new file mode 100644 index 0000000..522390e --- /dev/null +++ b/libxss/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=libxss # libxscrnsaver +_openbsdver=6.9 +pkgver=1.2.3 +pkgrel=2 +pkgdesc="X11 Screen Saver extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +provides=('libxscrnsaver') +depends=('libxext' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxscrnsaver-$pkgver.tar.lz{,.sig}) +sha512sums=('4792ad355dbb86e19a3a60cf3b33e238fee89e9f84247d9320fa7009bd921734cf9c44311155953884ddaf29cee016eb831dadbb4e532ab7f5094c539cfd56d8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXScrnSaver" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXScrnSaver" + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXScrnSaver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxt/PKGBUILD b/libxt/PKGBUILD new file mode 100644 index 0000000..41f02de --- /dev/null +++ b/libxt/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxt +_openbsdver=6.9 +pkgver=1.2.0 +pkgrel=2 +pkgdesc="X11 toolkit intrinsics library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libsm' 'libx11') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxt-$pkgver.tar.lz{,.sig}) +sha512sums=('763908a2ecc0b1b8bf6cc9766c2c56aaa78bfe826dfca53d118a7fc602027c025375789ad7681fe0f2854d84d58894b9f425463b2a246b1ad15e62155e60c09e' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXt" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXt" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXt" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxtrans/PKGBUILD b/libxtrans/PKGBUILD new file mode 100644 index 0000000..b6fc5e7 --- /dev/null +++ b/libxtrans/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +# Based on xtrans package + +pkgname=libxtrans +_openbsdver=6.9 +pkgver=1.4.0 +pkgrel=2 +pkgdesc="X transport library, provided by Xenocara" +arch=('any') +license=('X11') +url="https://www.xenocara.org" +makedepends=('xenocara-util-macros') +provides=('xtrans') +conflicts=('xtrans') +replaces=('xtrans') +options=(!emptydirs) +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxtrans-$pkgver.tar.lz{,.sig}) +sha512sums=('e4e187c56772138d2bb0ee6c23aee3836333b5471e0fa72673079b129c72b7eaab1712dbb683821d4fa5df0327953d8361a268b0866043d426d82a71f57694d4' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libxtrans" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libxtrans" + ./configure --prefix=/usr +} + +package() { + cd "xenocara-$_openbsdver/lib/libxtrans" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxtst/PKGBUILD b/libxtst/PKGBUILD new file mode 100644 index 0000000..bc3ad8f --- /dev/null +++ b/libxtst/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxtst +_openbsdver=6.9 +pkgver=1.2.2 +pkgrel=3 +pkgdesc="X11 Testing -- Resource extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxext' 'libxi' 'xenocara-proto' 'libxfixes') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxtst-$pkgver.tar.lz{,.sig}) +sha512sums=('ba41a16d03c5b6be43bc462475194b5a652eafe52463bdb078731fbedb496d0e25fc127e164e4efe3dc1d0c319cd660b127c1463af556a78722d942b2e8b70d1' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXtst" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXtst" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXtst" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxv/PKGBUILD b/libxv/PKGBUILD new file mode 100644 index 0000000..7f03531 --- /dev/null +++ b/libxv/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxv +_openbsdver=6.9 +pkgver=1.0.11 +pkgrel=3 +pkgdesc="X11 Video extension library, provided by Xenocara" +arch=('i686' 'x86_64') +license=('Expat') +url="https://www.xenocara.org" +depends=('libxext' 'xenocara-proto') +makedepends=('pkg-config' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxv-$pkgver.tar.lz{,.sig}) +sha512sums=('be3ad0df635f55b5c7eaeb4d6d8d49f30bc3fb6ccf8867948bc16fc80718b58fd914684e8e62f46074f3a2b68b82e7b824635a713236f4d74740abed5ba391d1' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXv" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXv" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXv" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxvmc/PKGBUILD b/libxvmc/PKGBUILD new file mode 100644 index 0000000..cb40fc2 --- /dev/null +++ b/libxvmc/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxvmc +_openbsdver=6.9 +pkgver=1.0.12 +pkgrel=2 +pkgdesc="X11 Video Motion Compensation extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libxv') +makedepends=('pkg-config' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxvmc-$pkgver.tar.lz{,.sig}) +sha512sums=('3e4b98844d836dfeb43a12fa8663bb3bd4db94fc6189a49a83f440b58608d79b74c8a4d80dd1cef10f59ddbaf0b37cedaf6a113d6e2b95074e3abcb5800d59c3' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXvMC" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXvMC" + ./configure --prefix=/usr --sysconfdir=/etc --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXvMC" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxxf86dga/PKGBUILD b/libxxf86dga/PKGBUILD new file mode 100644 index 0000000..0e26e98 --- /dev/null +++ b/libxxf86dga/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxxf86dga +_openbsdver=6.9 +pkgver=1.1.5 +pkgrel=2 +pkgdesc="X11 Direct Graphics Access extension library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxext' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxxf86dga-$pkgver.tar.lz{,.sig}) +sha512sums=('6a1ec65981aa38de21533af012c4a3a7814fd4b85b256e6872169a84ef3941ebc6c4d840b64eb4c1fb64f7baec64ae419c6acd5bab5dbd3c50a4062ca8be09cf' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXxf86dga" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXxf86dga" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXxf86dga" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libxxf86vm/PKGBUILD b/libxxf86vm/PKGBUILD new file mode 100644 index 0000000..f93557a --- /dev/null +++ b/libxxf86vm/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=libxxf86vm +_openbsdver=6.9 +pkgver=1.1.4 +pkgrel=3 +pkgdesc="X11 XFree86 video mode extension library, provided by Xenocara" +arch=('x86_64' 'i686') +license=('X11') +url="https://www.xenocara.org" +depends=('libxext' 'xenocara-proto') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/libxxf86vm-$pkgver.tar.lz{,.sig}) +sha512sums=('b55ea7ce7bdd856c094b25773f5f2b6c1ac525c04a6b1e1e9b23703687a06a54dc4ec5409db8f238613a10fe456b2de9e5ee6f8a253d281d683da5bc9fbab7db' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/libXxf86vm" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/libXxf86vm" + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd "xenocara-$_openbsdver/lib/libXxf86vm" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/libyaml/PKGBUILD b/libyaml/PKGBUILD new file mode 100644 index 0000000..d74ec7e --- /dev/null +++ b/libyaml/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=libyaml +pkgver=0.2.2 +pkgrel=1 +pkgdesc="YAML 1.1 library" +arch=('i686' 'x86_64') +url="https://pyyaml.org/wiki/LibYAML" +license=('Expat') +source=("https://pyyaml.org/download/libyaml/yaml-$pkgver.tar.gz") +sha512sums=('13d2197135946204323dbfccafa0ac7b3d05437e920545a56f46811fd7319c01419a58083090ce85fccd4d6901a620ceb9f1190078cc0830bc0ce769bb024f51') + +build() { + cd "$srcdir/yaml-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/yaml-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/libytnef/PKGBUILD b/libytnef/PKGBUILD new file mode 100644 index 0000000..2f4474f --- /dev/null +++ b/libytnef/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=libytnef +pkgver=1.9.3 +_debver=1.9.3 +_debrel=3 +pkgrel=1 +epoch=1 +pkgdesc="Yerase's TNEF Stream Reader library (decodes winmail.dat)" +url='https://github.com/Yeraze/ytnef' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('glibc') +makedepends=('perl' 'quilt') +optdepends=('perl: ytnefprocess') +source=("https://deb.debian.org/debian/pool/main/liby/libytnef/${pkgname}_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/liby/libytnef/libytnef_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('be0a46e79561a5ff34f812b892a781809606cc7e38c6bfed15bae7773f952b4b55aed0fa784922e72839121672c540496db1bac602630c5a83141f8517a4a543' + '2a50ed17f5d05c4c033f87e9dc84ebac201fc83502f6ead87a1b16c39c37504026d8132e856ef9f5c60f53b9a06da58a49be2207436ebac68fb0eaa163b771b5') + +prepare() { + cd ytnef-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + ./autogen.sh +} + +build() { + cd ytnef-${pkgver} + + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd ytnef-${pkgver} + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/libzip/PKGBUILD b/libzip/PKGBUILD new file mode 100644 index 0000000..f755823 --- /dev/null +++ b/libzip/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=libzip +pkgver=1.7.3 +_debver=$pkgver +_debrel=1.1 +pkgrel=2 +pkgdesc='A C library for reading, creating, and modifying zip archives' +url='https://libzip.org' +license=('Modified-BSD') +arch=('i686' 'x86_64') +depends=('zlib' 'bzip2' 'libressl' 'gnutls') +makedepends=('cmake' 'quilt') +source=("https://libzip.org/download/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/libz/libzip/libzip_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('488866348a0c859f6f995c50e956bd51b4105278f07b63fe019cb44ab36c09ef958cc0684fd5444c474d83874b999e8ed1aa9b2da51b74caa37bbe7934b9c870' + 'ca39b499e3a4af5ac61f0113bb0a611b9bfe79339de8aff83b7056543db3f4b3f5b178f58dd76de2f3f4888c619defbf5f5ec85126049d4eaf2ee8b775e340f3') + +prepare() { + cd "${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + + cmake -Bbuild -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + . + make -C build +} + +package() { + cd "${pkgname}-${pkgver}" + + make -C build DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + diff --git a/lighttpd/PKGBUILD b/lighttpd/PKGBUILD new file mode 100644 index 0000000..3c8658c --- /dev/null +++ b/lighttpd/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgname=lighttpd +pkgver=1.4.69 +pkgrel=2 +pkgdesc="A secure, fast, compliant and very flexible web-server" +license=('Modified-BSD') +arch=('i686' 'x86_64') +url='https://www.lighttpd.net/' +depends=('pcre' 'util-linux' 'libressl' 'pcre2' 'gawk') +makedepends=('lua' 'libxml2' 'e2fsprogs' 'sqlite' 'gdbm' 'pkgconfig') +optdepends=('libxml2: mod_webdav' + 'lua: mod_cml/mod_magnet' + 'sqlite: mod_webdav') +backup=('etc/lighttpd/lighttpd.conf' + 'etc/logrotate.d/lighttpd') +options=('emptydirs') +source=("https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${pkgver}.tar.xz" + "lighttpd.conf" + "lighttpd.logrotate.d" + "lighttpd.confd" + "lighttpd.initd" + "lighttpd.run") +sha512sums=('9d174c8e0a192b4eb8218a9f76b0bd42f90030228600bb7bbe35ebb9e7bbaea36ee2732535c5cc6dab171294817837bfa26074ff84a37832dd89f57488b4071f' + '7f832b5ec2171943624c6e592499b019e5425662fdb3e1b7418643bffdadb5245fbb9002063207413c53bd3f104b0d819565669c6911fd94e2727dd126382cdb' + '92d0465ac8f459443226a086fa70fdce64fed6bfdab8b7d2f90b4c9db0a1af6d038906819ba8596fb4eb2dbfb165dfc1a170f37505c09f581493c1ea789029ee' + 'dd722c15230df734d7151bcb9cfc66d6d54aac5dcdca5f50eb33979d3a2443ba3a9ef3d7cb35e6dbd3d39fce09da15ab0029b1399bf1b1e4f4ef20d40f70a416' + 'd5fc03ded923d2aeea19fefdf658ed793114867dd0b50be6836d767108c98fb7de56011f00ea63220c4b198cff45d98fdc8a649efae90673536e03f786219485' + '00e77e6cefd201de6c745547eecc9be6f3181331073921982f5d400139f2c1afe0dffc42a78082283cfdd21c79d59ec18ca5ce606f442b90b5c532cf62985e50') + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr \ + --libdir=/usr/lib/lighttpd/ \ + --sysconfdir=/etc/lighttpd \ + --without-mysql \ + --with-ldap \ + --with-attr \ + --with-openssl \ + --with-kerberos5 \ + --without-fam \ + --with-webdav-props \ + --with-webdav-locks \ + --with-gdbm \ + --with-lua + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + install -D -m644 "$srcdir/lighttpd.logrotate.d" "$pkgdir/etc/logrotate.d/lighttpd" + install -D -m644 "$srcdir/lighttpd.conf" "$pkgdir/etc/lighttpd/lighttpd.conf" + + install -d -m700 -o http -g http "$pkgdir"/var/{log,cache}/lighttpd/ + install -d -m700 -o http -g http "$pkgdir"/srv/http/ + + install -Dm 644 "${srcdir}/lighttpd.confd" "${pkgdir}/etc/conf.d/lighttpd" + install -Dm 755 "${srcdir}/lighttpd.initd" "${pkgdir}/etc/init.d/lighttpd" + install -Dm 755 "$srcdir/lighttpd.run" "$pkgdir/etc/sv/lighttpd/run" + + pushd doc/config >/dev/null + find . -type f ! -name 'Makefile*' -exec install -D -m644 {} "${pkgdir}"/usr/share/doc/lighttpd/config/{} \; + popd >/dev/null + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/lighttpd/lighttpd.conf b/lighttpd/lighttpd.conf new file mode 100644 index 0000000..efe4761 --- /dev/null +++ b/lighttpd/lighttpd.conf @@ -0,0 +1,23 @@ +# This is a minimal example config +# See /usr/share/doc/lighttpd +# and http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions + +server.port = 80 +server.username = "http" +server.groupname = "http" +server.document-root = "/srv/http" +server.pid-file = "/run/lighttpd.pid" +server.errorlog = "/var/log/lighttpd/error.log" +dir-listing.activate = "enable" +index-file.names = ( "index.html" ) +mimetype.assign = ( + ".html" => "text/html", + ".txt" => "text/plain", + ".css" => "text/css", + ".js" => "application/x-javascript", + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".gif" => "image/gif", + ".png" => "image/png", + "" => "application/octet-stream" + ) diff --git a/lighttpd/lighttpd.confd b/lighttpd/lighttpd.confd new file mode 100644 index 0000000..c7733de --- /dev/null +++ b/lighttpd/lighttpd.confd @@ -0,0 +1,8 @@ +# /etc/conf.d/lighttpd + +# Location of a shell used by the 'include_shell' directive +# in the lighttpd's configuration file +#export SHELL="/bin/bash" + +# Location of the lighttpd configuration file +LIGHTTPD_CONF="/etc/lighttpd/lighttpd.conf" diff --git a/lighttpd/lighttpd.initd b/lighttpd/lighttpd.initd new file mode 100644 index 0000000..190cd14 --- /dev/null +++ b/lighttpd/lighttpd.initd @@ -0,0 +1,79 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload graceful" + +LIGHTTPD_PID="$(grep pid ${LIGHTTPD_CONF} | cut -d '=' -f 2 | tr -d \\\" | tr -d [:space:])" + +depend() { + need net + use mysql logger spawn-fcgi ldap slapd netmount dns + after famd + after sshd +} + +checkconfig() { + if [ ! -f "${LIGHTTPD_CONF}" ] ; then + ewarn "${LIGHTTPD_CONF} does not exist." + return 1 + fi + + if [ -z "${LIGHTTPD_PID}" ] ; then + eerror "server.pid-file variable in ${LIGHTTPD_CONF}" + eerror "is not set. Please set this variable properly" + eerror "and try again" + return 1 + fi + /usr/sbin/lighttpd -t -f ${LIGHTTPD_CONF} >/dev/null +} + +start() { + checkconfig || return 1 + # Glean lighttpd's credentials from the configuration file + # Fixes bug 454366 + LIGHTTPD_USER="$(awk '/^server.username/{s=$3};{sub("\"","",s)};END{print s}' ${LIGHTTPD_CONF})" + LIGHTTPD_GROUP="$(awk '/^server.groupname/{s=$3};{sub("\"","",s)};END{print s}' ${LIGHTTPD_CONF})" + checkpath -d -q -m 0750 -o "${LIGHTTPD_USER}":"${LIGHTTPD_GROUP}" /run/lighttpd/ + + ebegin "Starting lighttpd" + start-stop-daemon --start --quiet --exec /usr/sbin/lighttpd \ + --pidfile "${LIGHTTPD_PID}" -- -f "${LIGHTTPD_CONF}" + eend $? +} + +stop() { + local rv=0 + ebegin "Stopping lighttpd" + start-stop-daemon --stop --quiet --pidfile "${LIGHTTPD_PID}" + eend $? +} + +reload() { + if ! service_started "${SVCNAME}" ; then + eerror "${SVCNAME} isn't running" + return 1 + fi + checkconfig || return 1 + + ebegin "Re-opening lighttpd log files" + start-stop-daemon --quiet --pidfile "${LIGHTTPD_PID}" \ + --signal HUP + eend $? +} + +graceful() { + if ! service_started "${SVCNAME}" ; then + eerror "${SVCNAME} isn't running" + return 1 + fi + checkconfig || return 1 + + ebegin "Gracefully stopping lighttpd" + start-stop-daemon --quiet --pidfile "${LIGHTTPD_PID}" \ + --signal INT + if eend $? ; then + rm -f "${LIGHTTPD_PID}" + start + fi +} diff --git a/lighttpd/lighttpd.logrotate.d b/lighttpd/lighttpd.logrotate.d new file mode 100644 index 0000000..0d79edb --- /dev/null +++ b/lighttpd/lighttpd.logrotate.d @@ -0,0 +1,14 @@ +# lighttpd logrotate script + +/var/log/lighttpd/*.log { + daily + missingok + copytruncate + rotate 7 + compress + notifempty + sharedscripts + postrotate + test -e /run/openrc/softlevel && /etc/init.d/lighttpd reload 1>/dev/null || true + endscript +} diff --git a/lighttpd/lighttpd.run b/lighttpd/lighttpd.run new file mode 100644 index 0000000..936152b --- /dev/null +++ b/lighttpd/lighttpd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/lighttpd-angel -D -f /etc/lighttpd/lighttpd.conf diff --git a/lilv/PKGBUILD b/lilv/PKGBUILD new file mode 100644 index 0000000..48eaeb3 --- /dev/null +++ b/lilv/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +pkgname=lilv +pkgver=0.24.12 +_debver=0.24.12 +_debrel=2 +pkgrel=1 +pkgdesc="A C library interface to the LV2 plug-in standard" +arch=('i686' 'x86_64') +url="https://drobilla.net/software/lilv/" +license=('ISC') +depends=('glibc') +makedepends=('libsndfile' 'lv2' 'python' 'serd' 'sord' 'sratom' 'swig' 'waf' 'quilt') +optdepends=('bash-completion: completion for bash' + 'libsndfile: for lv2apply' + 'python: for Python bindings') +source=("https://download.drobilla.net/${pkgname}-${pkgver}.tar.bz2"{,.asc} + "https://deb.debian.org/debian/pool/main/l/lilv/lilv_$_debver-$_debrel.debian.tar.xz") +sha512sums=('ea22db4e995792b62d60d793169c792549b8fb0255c2cf7a85780dd149811921e2fae5eaea0fb83465f01b14dfa66361af3be40bf7cb3733e98655b943f4faee' + 'SKIP' + 'f1e76e512a8eb318dbfa12f18b55863b4e6c7e2e1ae03a7bf7fb7e1ba39bd01a7c18e2b87d0e9678f3af257b568d98cfe11f58b2b68b2a4fd801f4e9d9453869') +validpgpkeys=('907D226E7E13FA337F014A083672782A9BF368F3') # David Robillard + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + # let wscript(s) find the custom waf scripts + mkdir -pv tools + touch __init__.py + cp -v waflib/extras/{autoship,autowaf,lv2}.py tools/ + mkdir -pv plugins/tools/ + cp -v waflib/extras/{autoship,autowaf,lv2}.py plugins/tools/ + rm -rv waflib + sed -e 's/waflib.extras/tools/g' \ + -e "s/load('autowaf'/load('autowaf', tooldir='tools'/g" \ + -e "s/load('lv2'/load('lv2', tooldir='tools'/g" \ + -i wscript +} + +build() { + cd "${pkgname}-${pkgver}" + waf configure --prefix=/usr \ + --no-bash-completion \ + --dyn-manifest \ + --test + waf -v build +} + +check() { + cd "${pkgname}-${pkgver}" + waf test +} + +package() { + cd "${pkgname}-${pkgver}" + waf install --destdir="${pkgdir}" + # license + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" + # bash completion + install -vDm 644 utils/lilv.bash_completion\ + "${pkgdir}/usr/share/bash-completion/completions/${pkgname}" +} +# vim:set ts=2 sw=2 et: diff --git a/link-grammar/PKGBUILD b/link-grammar/PKGBUILD new file mode 100644 index 0000000..322d7dc --- /dev/null +++ b/link-grammar/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=link-grammar +pkgver=5.12.5 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A Grammar Checking library" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('hunspell' 'sqlite' 'libedit' 'pcre2') +makedepends=('python' 'swig' 'autoconf-archive' 'quilt') +options=('!makeflags') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/l/link-grammar/link-grammar_${pkgver}~dfsg.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/l/link-grammar/link-grammar_5.12.0~dfsg-2.debian.tar.xz") +sha512sums=('ca018d135d123f9bedf4f2f58b36b2ef2c76cee5dd6273052faf489438ba05e2b32d4f66be52cffd5416f8eaa0f4456d1124e86a7252d8a36cc8cd36cbbe19fe' + '91c647d581dcb0b955901853c7f3f457ea38ed28908ddb22a25133e7fd924e306051fd7aa07b035ea990f2213a9a274ecce776f0f00807908e919bc05cb29cab') + +prepare() { + mv "${srcdir}/${pkgname}-${pkgname}-${pkgver}" "${srcdir}/${pkgname}-${pkgver}" + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/020220112~91a4a18.patch || true + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr + + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + # license + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lirc/PKGBUILD b/lirc/PKGBUILD new file mode 100644 index 0000000..00fda62 --- /dev/null +++ b/lirc/PKGBUILD @@ -0,0 +1,99 @@ +# Maintainer: Jesus E. + +pkgname=lirc +pkgver=0.10.1 +_debver=0.10.1 +_debrel=6.3 +pkgrel=2 +epoch=1 +pkgdesc='Linux Infrared Remote Control utilities' +arch=('i686' 'x86_64') +url="https://www.lirc.org/" +license=('GPL-2') +depends=('alsa-lib' 'libx11' 'libftdi' 'libusb-compat') +makedepends=('help2man' 'alsa-lib' 'libx11' 'libxslt' 'python' 'python-setuptools' 'quilt') +optdepends=('python: for lirc-setup, irdb-get and pronto2lirc') +provides=('lirc-utils') +conflicts=('lirc-utils') +replaces=('lirc-utils') +backup=('etc/lirc/lirc_options.conf' 'etc/lirc/lircd.conf' 'etc/lirc/lircmd.conf') +source=("https://prdownloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/l/lirc/lirc_$_debver-$_debrel.debian.tar.xz" + lirc.logrotate + lircd.confd + irexec.confd + lircd.initd + irexec.initd + lircmd.initd + lircd.conf + lircd.run + irexec.conf + irexec.run + lircmd.run) +sha512sums=('31c0b6ee169b302b99994a2a3fa0ebcae0e01cb83c02fe02acf1de5ba8cf77a091a0221c7d8104448c30930adafe654cd08afb7d0df6b5b7ec2d47df26e5df9d' + '9dad10a2e3628b066ce07cfdb5a945cf5be6f8ab3908f3db235d6ff0c502c43eeacbd89ecd484983c3bfce06f2f63dcdf82248d9e8d854e6c0c102dd0875c015' + '1a6f31df677c27fde6bebe2b4f1eec44bf4ee4ef0cd69d870c661fe1880e48b9fb0fc812fec6c99a7bb92fca8969e0a8170f9fd5dcff1ff1cf0bfa48170dc1a1' + '1fb1778f4cc72fc9c11b13a704b3abe80bcce5b3770b69b6b6bea8571e5293adad8c6968779b812e611b67734462c9a577cc71c6b16da3a5bfe31b8007300a62' + '2b33e1044086d11fd6e1f9a204ce925182a3a2b92ef4399610e01702f9c2c8fbc87cae52961123297171eef3d40468ac17437b4281b26a5f3b256c9cebc612ac' + '482fccd204671f6258822029b9eb9a1e22abf02e382b3814f924f171fd1168d46560f52a90727f3de60c27a78158173a4e0c3e848d45e489471c27851c907c05' + '2d06c0bedbd2af9120caa54c049815a2bd920054afbcbd6b0bc1a48dab479527aea5e4fc7065428742f8d46032476ee37fb075669e93e16b2df5bfb8b572f86a' + '2f4aae24982a51c54fa59ddd8a48190c11f86ac67fc25bbb599f750be5b91e457c2f779e915943803bde2ec3e5e8988f3c0ffb9d1ea4a08c2e7f05cd3e8b75a5' + '1fb1778f4cc72fc9c11b13a704b3abe80bcce5b3770b69b6b6bea8571e5293adad8c6968779b812e611b67734462c9a577cc71c6b16da3a5bfe31b8007300a62' + 'ae2ebcbdc957067ae142c193f7e47402fb23e78b25495bab23e052f67d19d9d104d7ac40360e2e56914b99b54205704410a113e36c53c609aff1f5b3a8704e18' + '2b33e1044086d11fd6e1f9a204ce925182a3a2b92ef4399610e01702f9c2c8fbc87cae52961123297171eef3d40468ac17437b4281b26a5f3b256c9cebc612ac' + '9eef38ca376dc06dc35e0216b5566f72d137ef1e3457cc5a3659e4bf5b0fdb77f2b5b93e8e82ef935847b2d5472c7fbc1cc7b8bcf12d2cf8fb824556a9d8cdd5' + '0713cd6fa80fafbd297bf4f210543a46e61b5955e2e4aadd8d66cb9976b44e521bcd463152dd4e793f2d6a1b06a05a62eb4f5994b84f47aea362a9c3ecd497d6') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0005-systemd-support-Notify-systemd-on-successful-startup.patch || true + + quilt push -av + fi + + autoreconf -fi + automake -ac +} + +build() { + cd $pkgname-$pkgver + + HAVE_UINPUT=1 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --without-systemdsystemunitdir + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="${pkgdir}" -j1 install + + install -Dm644 "${srcdir}"/lirc.logrotate "${pkgdir}"/etc/logrotate.d/lirc + + for f in lircd irexec; do + install -Dm644 "${srcdir}"/$f.confd "${pkgdir}"/etc/conf.d/$f + install -Dm755 "${srcdir}"/$f.initd "${pkgdir}"/etc/init.d/$f + sed -i 's|/var/run|/run|g' "${pkgdir}"/etc/init.d/$f + done + install -Dm755 "${srcdir}"/lircmd.initd "${pkgdir}"/etc/init.d/lircmd + sed -i 's|/var/run|/run|g' "${pkgdir}"/etc/init.d/lircmd + + install -Dm 755 "$srcdir/lircd.run" "$pkgdir/etc/sv/lircd/run" + install -Dm 755 "$srcdir/irexec.run" "$pkgdir/etc/sv/irexec/run" + install -Dm 755 "$srcdir/lircmd.run" "$pkgdir/etc/sv/lircmd/run" + install -Dm 644 "$srcdir/lircd.conf" "$pkgdir/etc/sv/lircd/conf" + install -Dm 644 "$srcdir/irexec.conf" "$pkgdir/etc/sv/irexec/conf" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + rmdir "${pkgdir}"/var/{run/lirc/,run/} +} diff --git a/lirc/irexec.conf b/lirc/irexec.conf new file mode 100644 index 0000000..48eb8dd --- /dev/null +++ b/lirc/irexec.conf @@ -0,0 +1,9 @@ +# Options to pass to the irexec process +IREXEC_OPTS="/etc/lircrc" + +# User to execute irexec as. +# Warning: Running irexec as root can open security holes +#IREXEC_USER="root" + +# Use this to disable the warning printed when starting irexec as root +# IREXEC_DISABLE_ROOT_WARNING=yes diff --git a/lirc/irexec.confd b/lirc/irexec.confd new file mode 100644 index 0000000..48eb8dd --- /dev/null +++ b/lirc/irexec.confd @@ -0,0 +1,9 @@ +# Options to pass to the irexec process +IREXEC_OPTS="/etc/lircrc" + +# User to execute irexec as. +# Warning: Running irexec as root can open security holes +#IREXEC_USER="root" + +# Use this to disable the warning printed when starting irexec as root +# IREXEC_DISABLE_ROOT_WARNING=yes diff --git a/lirc/irexec.initd b/lirc/irexec.initd new file mode 100644 index 0000000..e624973 --- /dev/null +++ b/lirc/irexec.initd @@ -0,0 +1,27 @@ +#!/sbin/openrc-run +# Copyright 2003 Martin Hierling +# Distributed under the terms of the GNU General Public License v2 + +: ${IREXEC_USER:=root} + +depend() { + need lirc +} + +start() { + if [ "x${IREXEC_USER}" = "xroot" -a "x${IREXEC_DISABLE_ROOT_WARNING}" != "xyes" ]; then + ewarn "Warning: Running irexec as root can open security holes" + fi + + ebegin "Starting irexec" + start-stop-daemon --start --chuid ${IREXEC_USER} --user ${IREXEC_USER} --chdir / \ + --exec /usr/bin/irexec -- --daemon ${IREXEC_OPTS} + eend $? "Failed to start irexec." +} + +stop() { + ebegin "Stopping irexec" + start-stop-daemon --stop --exec /usr/bin/irexec --user ${IREXEC_USER} + eend $? "Failed to stop irexec." +} + diff --git a/lirc/irexec.run b/lirc/irexec.run new file mode 100644 index 0000000..9975620 --- /dev/null +++ b/lirc/irexec.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r conf ] && . ./conf +exec /usr/bin/irexec -- --daemon ${IREXEC_OPTS} 2>&1 diff --git a/lirc/lirc.logrotate b/lirc/lirc.logrotate new file mode 100644 index 0000000..623c4f3 --- /dev/null +++ b/lirc/lirc.logrotate @@ -0,0 +1,5 @@ +/var/log/lircd { + missingok + notifempty + delaycompress +} diff --git a/lirc/lircd.conf b/lirc/lircd.conf new file mode 100644 index 0000000..f59c5f2 --- /dev/null +++ b/lirc/lircd.conf @@ -0,0 +1,22 @@ +# Options to pass to the lircd process + +# for devices with lirc-kernel-module +#LIRCD_OPTS="-d /dev/lirc0" +#LIRCD_OPTS="-d /dev/lirc" + +# for devices using the input-layer +#LIRCD_OPTS="-H devinput -d /dev/input/by-path/pci-0000:00:0a.0--event-ir" +# This should work, Bug #235107 +#LIRCD_OPTS="-H devinput -d name=*DVB*" + +# set default protocol to 'lirc' for in-kernel IR decoding +# for the following entries in /sys/class/rc/ +# (space-separated list if there is more than one) +LIRCD_SET_SYSCLASSRCS="rc0" + +# If running mulitple instances of lircd, the following +# can be used to override the default socket path and +# socket symlink +#LIRCD_SOCKET="/var/run/lirc/lircd" +#LIRCD_SYMLINKFILE="/dev/lircd" + diff --git a/lirc/lircd.confd b/lirc/lircd.confd new file mode 100644 index 0000000..f59c5f2 --- /dev/null +++ b/lirc/lircd.confd @@ -0,0 +1,22 @@ +# Options to pass to the lircd process + +# for devices with lirc-kernel-module +#LIRCD_OPTS="-d /dev/lirc0" +#LIRCD_OPTS="-d /dev/lirc" + +# for devices using the input-layer +#LIRCD_OPTS="-H devinput -d /dev/input/by-path/pci-0000:00:0a.0--event-ir" +# This should work, Bug #235107 +#LIRCD_OPTS="-H devinput -d name=*DVB*" + +# set default protocol to 'lirc' for in-kernel IR decoding +# for the following entries in /sys/class/rc/ +# (space-separated list if there is more than one) +LIRCD_SET_SYSCLASSRCS="rc0" + +# If running mulitple instances of lircd, the following +# can be used to override the default socket path and +# socket symlink +#LIRCD_SOCKET="/var/run/lirc/lircd" +#LIRCD_SYMLINKFILE="/dev/lircd" + diff --git a/lirc/lircd.initd b/lirc/lircd.initd new file mode 100644 index 0000000..757d4e6 --- /dev/null +++ b/lirc/lircd.initd @@ -0,0 +1,51 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +PIDFILE=/var/run/lirc/${SVCNAME}.pid +: ${LIRCD_SYMLINKFILE:=/dev/lircd} +: ${LIRCD_SOCKET:=/var/run/lirc/lircd} + +depend() { + need localmount + use modules + provide lirc +} + +start() { + local retval + + ebegin "Starting lircd" + + for retval in ${LIRCD_SET_SYSCLASSRCS} ; do + if [ -e /sys/class/rc/${retval}/protocols ] && \ + grep -qs 'lirc' /sys/class/rc/${retval}/protocols ; then + einfo "Setting lirc protocol active for ${retval}" + echo lirc >/sys/class/rc/${retval}/protocols + fi + done + + checkpath -q -d -m 0755 -o root:root /var/run/lirc + rm -Rf ${LIRCD_SOCKET} && ln -s ${LIRCD_SOCKET} ${LIRCD_SYMLINKFILE} + if [ $? -ne 0 ]; then + eend $? "Unable to create symbolic link ${LIRCD_SYMLINKFILE}" + return 1 + fi + + start-stop-daemon --start --quiet --pidfile "${PIDFILE}" --exec /usr/sbin/lircd -- \ + -P "${PIDFILE}" ${LIRCD_OPTS} + retval=$? + + if [ ${retval} -ne 0 ]; then + rm -Rf ${LIRCD_SOCKET} + fi + + eend ${retval} +} + +stop() { + ebegin "Stopping lircd" + rm -f ${LIRCD_SYMLINKFILE} + start-stop-daemon --stop --quiet --pidfile "${PIDFILE}" --exec /usr/sbin/lircd + eend $? +} diff --git a/lirc/lircd.run b/lirc/lircd.run new file mode 100644 index 0000000..08c94bc --- /dev/null +++ b/lirc/lircd.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r conf ] && . ./conf +exec /usr/sbin/lircd ${LIRCD_OPTS} 2>&1 diff --git a/lirc/lircmd.initd b/lirc/lircmd.initd new file mode 100644 index 0000000..e979f74 --- /dev/null +++ b/lirc/lircmd.initd @@ -0,0 +1,19 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + need lircd +} + +start() { + ebegin "Starting lircmd" + start-stop-daemon --start --quiet --exec /usr/sbin/lircmd + eend $? +} + +stop() { + ebegin "Stopping lircmd" + start-stop-daemon --stop --quiet --exec /usr/sbin/lircmd + eend $? +} diff --git a/lirc/lircmd.run b/lirc/lircmd.run new file mode 100644 index 0000000..9664114 --- /dev/null +++ b/lirc/lircmd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/lircmd 2>&1 diff --git a/lite/PKGBUILD b/lite/PKGBUILD new file mode 100644 index 0000000..3a6176d --- /dev/null +++ b/lite/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=lite +pkgver=1.11 +pkgrel=2 +pkgdesc="A lightweight text editor written in Lua" +arch=('i686' 'x86_64') +url='https://github.com/rxi/lite' +license=('Expat') +depends=('sdl2') +source=("$pkgname-$pkgver.tar.gz::https://github.com/rxi/lite/archive/v$pkgver.tar.gz" + "$pkgname-path-fix.patch") +sha512sums=('2fe3a651cc3ddedd67d8b8f2b53b262eed8a64295d65d31b17ff80f787cfe53fd82c8e69aaaada7806c08f9814eb4a576668dc5614de43ddf2caa6d5aae338f0' + '6db0ea772befa653a962e6d28311b3485f983e6dcbb29514a771222fc2d68d282306571b1afe3284881a85ffd77e7d31323d0c5c3631c0bdea8aa6220d90cc40') + +prepare() { + cd "$pkgname-$pkgver" + patch -p1 < "$srcdir/$pkgname-path-fix.patch" + sed -i -e '/^cflags=/s/"/"$CFLAGS /' \ + -e '/^lflags=/s/"/"$LDFLAGS /' build.sh +} + +build() { + cd "$pkgname-$pkgver" + ./build.sh +} + +package() { + cd "$pkgname-$pkgver" + install -Dm755 -t "$pkgdir/usr/bin/" $pkgname + install -d "$pkgdir/usr/share/$pkgname" + cp -a data/* "$pkgdir/usr/share/$pkgname/" + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/lite/lite-path-fix.patch b/lite/lite-path-fix.patch new file mode 100644 index 0000000..5087bc2 --- /dev/null +++ b/lite/lite-path-fix.patch @@ -0,0 +1,73 @@ +Upstream Issue: https://github.com/rxi/lite/issues/49 + +(Patch adapted from Alpine Linux, updated for 1.06) + +diff --git a/data/core/commands/core.lua b/data/core/commands/core.lua +index 5c9d622..568f0ef 100644 +--- a/data/core/commands/core.lua ++++ b/data/core/commands/core.lua +@@ -85,7 +85,7 @@ command.add(nil, { + end, + + ["core:open-user-module"] = function() +- core.root_view:open_doc(core.open_doc(EXEDIR .. "/data/user/init.lua")) ++ core.root_view:open_doc(core.open_doc("/usr/share/lite/user/init.lua")) + end, + + ["core:open-project-module"] = function() +diff --git a/data/core/init.lua b/data/core/init.lua +index a25cdb5..3bea486 100644 +--- a/data/core/init.lua ++++ b/data/core/init.lua +@@ -150,7 +150,7 @@ end + + function core.load_plugins() + local no_errors = true +- local files = system.list_dir(EXEDIR .. "/data/plugins") ++ local files = system.list_dir("/usr/share/lite/plugins") + for _, filename in ipairs(files) do + local modname = "plugins." .. filename:gsub(".lua$", "") + local ok = core.try(require, modname) +@@ -421,7 +421,7 @@ end + + function core.on_error(err) + -- write error to file +- local fp = io.open(EXEDIR .. "/error.txt", "wb") ++ local fp = io.open("/tmp/lite-editor-error.txt", "wb") + fp:write("Error: " .. tostring(err) .. "\n") + fp:write(debug.traceback(nil, 4)) + fp:close() +diff --git a/data/core/style.lua b/data/core/style.lua +index ab597c2..23b551f 100644 +--- a/data/core/style.lua ++++ b/data/core/style.lua +@@ -7,10 +7,10 @@ style.scrollbar_size = common.round(4 * SCALE) + style.caret_width = common.round(2 * SCALE) + style.tab_width = common.round(170 * SCALE) + +-style.font = renderer.font.load(EXEDIR .. "/data/fonts/font.ttf", 14 * SCALE) +-style.big_font = renderer.font.load(EXEDIR .. "/data/fonts/font.ttf", 34 * SCALE) +-style.icon_font = renderer.font.load(EXEDIR .. "/data/fonts/icons.ttf", 14 * SCALE) +-style.code_font = renderer.font.load(EXEDIR .. "/data/fonts/monospace.ttf", 13.5 * SCALE) ++style.font = renderer.font.load("/usr/share/lite/fonts/font.ttf", 14 * SCALE) ++style.big_font = renderer.font.load("/usr/share/lite/fonts/font.ttf", 34 * SCALE) ++style.icon_font = renderer.font.load("/usr/share/lite/fonts/icons.ttf", 14 * SCALE) ++style.code_font = renderer.font.load("/usr/share/lite/fonts/monospace.ttf", 13.5 * SCALE) + + style.background = { common.color "#2e2e32" } + style.background2 = { common.color "#252529" } +diff --git a/src/main.c b/src/main.c +index c739f5f..0b796fa 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -119,8 +119,8 @@ int main(int argc, char **argv) { + " SCALE = tonumber(os.getenv(\"LITE_SCALE\")) or SCALE\n" + " PATHSEP = package.config:sub(1, 1)\n" + " EXEDIR = EXEFILE:match(\"^(.+)[/\\\\].*$\")\n" +- " package.path = EXEDIR .. '/data/?.lua;' .. package.path\n" +- " package.path = EXEDIR .. '/data/?/init.lua;' .. package.path\n" ++ " package.path = '/usr/share/lite/?.lua;' .. package.path\n" ++ " package.path = '/usr/share/lite/?/init.lua;' .. package.path\n" + " core = require('core')\n" + " core.init()\n" + " core.run()\n" diff --git a/llvm/PKGBUILD b/llvm/PKGBUILD new file mode 100644 index 0000000..0b46894 --- /dev/null +++ b/llvm/PKGBUILD @@ -0,0 +1,96 @@ +# Maintainer: Jesus E. + +pkgname=('llvm' 'llvm-libs') +pkgver=11.0.0 +pkgrel=3 +arch=('i686' 'x86_64') +url="https://llvm.org/" +license=('custom:Apache-2.0+LLVM-Exceptions') +makedepends=('cmake' 'ninja' 'libffi' 'libedit' 'ncurses' 'libxml2' + 'python-setuptools' 'python-psutil' 'python-sphinx' + 'python-recommonmark') +options=('staticlibs') +_source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($_source_base/$pkgname-$pkgver.src.tar.xz + stack-clash-fixes.patch + llvm-config.h) +sha512sums=('b3e92091ac48772edc0c30801218ce646ef374e1968baab91df9005f58e11c3ce149b2c4c655c7001f8554fd337caa02c08783bc736153bf58f35fe008e624a4' + 'ca5722fd3170a693c712d65b589db9efcd0874886f21e692e15a39fe038eb4ac42060ce382fa069ebe986c77edfe5de953616a194f638850d759dcb74f87956a' + '75e743dea28b280943b3cc7f8bbb871b57d110a7f2b9da2e6845c1c36bf170dd883fca54e463f5f49e0c3effe07fbd0db0f8cf5a12a2469d3f792af21a73fcdd') + +prepare() { + cd "$srcdir/llvm-$pkgver.src" + mkdir build + + # https://bugs.llvm.org/show_bug.cgi?id=48007 + patch -Np2 -i $srcdir/stack-clash-fixes.patch +} + +build() { + cd "$srcdir/llvm-$pkgver.src/build" + + cmake .. -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_HOST_TRIPLE=$CHOST \ + -DLLVM_BUILD_LLVM_DYLIB=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_INSTALL_UTILS=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_ENABLE_FFI=ON \ + -DLLVM_BUILD_TESTS=ON \ + -DLLVM_BUILD_DOCS=ON \ + -DLLVM_ENABLE_SPHINX=ON \ + -DLLVM_ENABLE_DOXYGEN=OFF \ + -DSPHINX_WARNINGS_AS_ERRORS=OFF \ + -DLLVM_BINUTILS_INCDIR=/usr/include \ + -Wno-dev + ninja all +} + +package_llvm() { + pkgdesc="Collection of modular and reusable compiler and toolchain technologies" + depends=('llvm-libs' 'perl') + + cd "$srcdir/llvm-$pkgver.src/build" + + DESTDIR="$pkgdir" ninja install + + # Include lit for running lit-based tests in other projects + pushd ../utils/lit + python setup.py install --root="$pkgdir" -O1 + popd + + # Remove documentation sources + rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo} + + # The runtime libraries go into llvm-libs + mv -f "$pkgdir"/usr/lib/lib{LLVM,LTO,Remarks}*.so* "$srcdir" + mv -f "$pkgdir"/usr/lib/LLVMgold.so "$srcdir" + + if [[ $CARCH == x86_64 ]]; then + mv "$pkgdir/usr/include/llvm/Config/llvm-config"{,-64}.h + install -Dm644 "$srcdir/llvm-config.h" -t "$pkgdir/usr/include/llvm/Config" + fi + + install -Dm644 ../LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE.TXT" +} + +package_llvm-libs() { + pkgdesc="LLVM runtime libraries" + depends=('gcc-libs' 'zlib' 'libffi' 'libedit' 'ncurses' 'libxml2') + + install -d "$pkgdir/usr/lib" + cp -P \ + "$srcdir"/lib{LLVM,LTO,Remarks}*.so* \ + "$srcdir"/LLVMgold.so \ + "$pkgdir/usr/lib/" + + # Symlink LLVMgold.so from /usr/lib/bfd-plugins + # https://bugs.archlinux.org/task/28479 + install -d "$pkgdir/usr/lib/bfd-plugins" + ln -s ../LLVMgold.so "$pkgdir/usr/lib/bfd-plugins/LLVMgold.so" + + install -Dm644 "$srcdir/llvm-$pkgver.src/LICENSE.TXT" \ + "$pkgdir/usr/share/licenses/$pkgname/LICENSE.TXT" +} diff --git a/llvm/llvm-config.h b/llvm/llvm-config.h new file mode 100644 index 0000000..2fa08c9 --- /dev/null +++ b/llvm/llvm-config.h @@ -0,0 +1,9 @@ +#include + +#if __WORDSIZE == 32 +#include "llvm-config-32.h" +#elif __WORDSIZE == 64 +#include "llvm-config-64.h" +#else +#error "Unknown word size" +#endif diff --git a/llvm/stack-clash-fixes.patch b/llvm/stack-clash-fixes.patch new file mode 100644 index 0000000..ca5a623 --- /dev/null +++ b/llvm/stack-clash-fixes.patch @@ -0,0 +1,870 @@ +From a1e0363c7402f7aa58e24e0e6dfa447ebabc1910 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Wed, 30 Sep 2020 11:35:00 +0200 +Subject: [PATCH 1/3] Fix limit behavior of dynamic alloca + +When the allocation size is 0, we shouldn't probe. Within [1, PAGE_SIZE], we +should probe once etc. + +This fixes https://bugs.llvm.org/show_bug.cgi?id=47657 + +Differential Revision: https://reviews.llvm.org/D88548 + +(cherry picked from commit 9573c9f2a363da71b2c07a3add4e52721e6028a0) +--- + llvm/lib/Target/X86/X86ISelLowering.cpp | 2 +- + llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp +index fd1e6517dfac..f68ae4461fe3 100644 +--- a/llvm/lib/Target/X86/X86ISelLowering.cpp ++++ b/llvm/lib/Target/X86/X86ISelLowering.cpp +@@ -31876,7 +31876,7 @@ X86TargetLowering::EmitLoweredProbedAlloca(MachineInstr &MI, + + BuildMI(testMBB, DL, TII->get(X86::JCC_1)) + .addMBB(tailMBB) +- .addImm(X86::COND_L); ++ .addImm(X86::COND_LE); + testMBB->addSuccessor(blockMBB); + testMBB->addSuccessor(tailMBB); + +diff --git a/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll b/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll +index bc4678564083..82fd67842c8a 100644 +--- a/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll ++++ b/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll +@@ -24,12 +24,12 @@ attributes #0 = {"probe-stack"="inline-asm"} + ; CHECK-X86-64-NEXT: andq $-16, %rcx + ; CHECK-X86-64-NEXT: subq %rcx, %rax + ; CHECK-X86-64-NEXT: cmpq %rsp, %rax +-; CHECK-X86-64-NEXT: jl .LBB0_3 ++; CHECK-X86-64-NEXT: jle .LBB0_3 + ; CHECK-X86-64-NEXT: .LBB0_2: # =>This Inner Loop Header: Depth=1 + ; CHECK-X86-64-NEXT: movq $0, (%rsp) + ; CHECK-X86-64-NEXT: subq $4096, %rsp # imm = 0x1000 + ; CHECK-X86-64-NEXT: cmpq %rsp, %rax +-; CHECK-X86-64-NEXT: jge .LBB0_2 ++; CHECK-X86-64-NEXT: jg .LBB0_2 + ; CHECK-X86-64-NEXT: .LBB0_3: + ; CHECK-X86-64-NEXT: movq %rax, %rsp + ; CHECK-X86-64-NEXT: movl $1, 4792(%rax) +@@ -54,12 +54,12 @@ attributes #0 = {"probe-stack"="inline-asm"} + ; CHECK-X86-32-NEXT: andl $-16, %ecx + ; CHECK-X86-32-NEXT: subl %ecx, %eax + ; CHECK-X86-32-NEXT: cmpl %esp, %eax +-; CHECK-X86-32-NEXT: jl .LBB0_3 ++; CHECK-X86-32-NEXT: jle .LBB0_3 + ; CHECK-X86-32-NEXT: .LBB0_2: # =>This Inner Loop Header: Depth=1 + ; CHECK-X86-32-NEXT: movl $0, (%esp) + ; CHECK-X86-32-NEXT: subl $4096, %esp # imm = 0x1000 + ; CHECK-X86-32-NEXT: cmpl %esp, %eax +-; CHECK-X86-32-NEXT: jge .LBB0_2 ++; CHECK-X86-32-NEXT: jg .LBB0_2 + ; CHECK-X86-32-NEXT: .LBB0_3: + ; CHECK-X86-32-NEXT: movl %eax, %esp + ; CHECK-X86-32-NEXT: movl $1, 4792(%eax) + +From aac36687f7978f33751daf2870b5c812124ebfaf Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Thu, 23 Jul 2020 16:22:48 +0200 +Subject: [PATCH 2/3] Fix interaction between stack alignment and inline-asm + stack clash protection + +As reported in https://github.com/rust-lang/rust/issues/70143 alignment is not +taken into account when doing the probing. Fix that by adjusting the first probe +if the stack align is small, or by extending the dynamic probing if the +alignment is large. + +Differential Revision: https://reviews.llvm.org/D84419 + +(cherry picked from commit f2c6bfa350de142e4d63808d03335f69bd136d6a) +--- + llvm/lib/Target/X86/X86FrameLowering.cpp | 222 ++++++++++++++++-- + llvm/lib/Target/X86/X86FrameLowering.h | 8 +- + .../X86/stack-clash-large-large-align.ll | 88 +++++++ + .../CodeGen/X86/stack-clash-no-free-probe.ll | 27 --- + .../stack-clash-small-alloc-medium-align.ll | 135 +++++++++++ + .../X86/stack-clash-small-large-align.ll | 83 +++++++ + 6 files changed, 512 insertions(+), 51 deletions(-) + create mode 100644 llvm/test/CodeGen/X86/stack-clash-large-large-align.ll + delete mode 100644 llvm/test/CodeGen/X86/stack-clash-no-free-probe.ll + create mode 100644 llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll + create mode 100644 llvm/test/CodeGen/X86/stack-clash-small-large-align.ll + +diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp +index c7ca6fb2a4fc..db6b68659493 100644 +--- a/llvm/lib/Target/X86/X86FrameLowering.cpp ++++ b/llvm/lib/Target/X86/X86FrameLowering.cpp +@@ -586,29 +586,55 @@ void X86FrameLowering::emitStackProbeInlineGeneric( + const uint64_t StackProbeSize = TLI.getStackProbeSize(MF); + uint64_t ProbeChunk = StackProbeSize * 8; + ++ uint64_t MaxAlign = ++ TRI->needsStackRealignment(MF) ? calculateMaxStackAlign(MF) : 0; ++ + // Synthesize a loop or unroll it, depending on the number of iterations. ++ // BuildStackAlignAND ensures that only MaxAlign % StackProbeSize bits left ++ // between the unaligned rsp and current rsp. + if (Offset > ProbeChunk) { +- emitStackProbeInlineGenericLoop(MF, MBB, MBBI, DL, Offset); ++ emitStackProbeInlineGenericLoop(MF, MBB, MBBI, DL, Offset, ++ MaxAlign % StackProbeSize); + } else { +- emitStackProbeInlineGenericBlock(MF, MBB, MBBI, DL, Offset); ++ emitStackProbeInlineGenericBlock(MF, MBB, MBBI, DL, Offset, ++ MaxAlign % StackProbeSize); + } + } + + void X86FrameLowering::emitStackProbeInlineGenericBlock( + MachineFunction &MF, MachineBasicBlock &MBB, +- MachineBasicBlock::iterator MBBI, const DebugLoc &DL, +- uint64_t Offset) const { ++ MachineBasicBlock::iterator MBBI, const DebugLoc &DL, uint64_t Offset, ++ uint64_t AlignOffset) const { + + const X86Subtarget &STI = MF.getSubtarget(); + const X86TargetLowering &TLI = *STI.getTargetLowering(); + const unsigned Opc = getSUBriOpcode(Uses64BitFramePtr, Offset); + const unsigned MovMIOpc = Is64Bit ? X86::MOV64mi32 : X86::MOV32mi; + const uint64_t StackProbeSize = TLI.getStackProbeSize(MF); ++ + uint64_t CurrentOffset = 0; +- // 0 Thanks to return address being saved on the stack +- uint64_t CurrentProbeOffset = 0; + +- // For the first N - 1 pages, just probe. I tried to take advantage of ++ assert(AlignOffset < StackProbeSize); ++ ++ // If the offset is so small it fits within a page, there's nothing to do. ++ if (StackProbeSize < Offset + AlignOffset) { ++ ++ MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(Opc), StackPtr) ++ .addReg(StackPtr) ++ .addImm(StackProbeSize - AlignOffset) ++ .setMIFlag(MachineInstr::FrameSetup); ++ MI->getOperand(3).setIsDead(); // The EFLAGS implicit def is dead. ++ ++ addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(MovMIOpc)) ++ .setMIFlag(MachineInstr::FrameSetup), ++ StackPtr, false, 0) ++ .addImm(0) ++ .setMIFlag(MachineInstr::FrameSetup); ++ NumFrameExtraProbe++; ++ CurrentOffset = StackProbeSize - AlignOffset; ++ } ++ ++ // For the next N - 1 pages, just probe. I tried to take advantage of + // natural probes but it implies much more logic and there was very few + // interesting natural probes to interleave. + while (CurrentOffset + StackProbeSize < Offset) { +@@ -626,9 +652,9 @@ void X86FrameLowering::emitStackProbeInlineGenericBlock( + .setMIFlag(MachineInstr::FrameSetup); + NumFrameExtraProbe++; + CurrentOffset += StackProbeSize; +- CurrentProbeOffset += StackProbeSize; + } + ++ // No need to probe the tail, it is smaller than a Page. + uint64_t ChunkSize = Offset - CurrentOffset; + MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(Opc), StackPtr) + .addReg(StackPtr) +@@ -639,8 +665,8 @@ void X86FrameLowering::emitStackProbeInlineGenericBlock( + + void X86FrameLowering::emitStackProbeInlineGenericLoop( + MachineFunction &MF, MachineBasicBlock &MBB, +- MachineBasicBlock::iterator MBBI, const DebugLoc &DL, +- uint64_t Offset) const { ++ MachineBasicBlock::iterator MBBI, const DebugLoc &DL, uint64_t Offset, ++ uint64_t AlignOffset) const { + assert(Offset && "null offset"); + + const X86Subtarget &STI = MF.getSubtarget(); +@@ -648,6 +674,26 @@ void X86FrameLowering::emitStackProbeInlineGenericLoop( + const unsigned MovMIOpc = Is64Bit ? X86::MOV64mi32 : X86::MOV32mi; + const uint64_t StackProbeSize = TLI.getStackProbeSize(MF); + ++ if (AlignOffset) { ++ if (AlignOffset < StackProbeSize) { ++ // Perform a first smaller allocation followed by a probe. ++ const unsigned SUBOpc = getSUBriOpcode(Uses64BitFramePtr, AlignOffset); ++ MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(SUBOpc), StackPtr) ++ .addReg(StackPtr) ++ .addImm(AlignOffset) ++ .setMIFlag(MachineInstr::FrameSetup); ++ MI->getOperand(3).setIsDead(); // The EFLAGS implicit def is dead. ++ ++ addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(MovMIOpc)) ++ .setMIFlag(MachineInstr::FrameSetup), ++ StackPtr, false, 0) ++ .addImm(0) ++ .setMIFlag(MachineInstr::FrameSetup); ++ NumFrameExtraProbe++; ++ Offset -= AlignOffset; ++ } ++ } ++ + // Synthesize a loop + NumFrameLoopProbe++; + const BasicBlock *LLVM_BB = MBB.getBasicBlock(); +@@ -666,8 +712,8 @@ void X86FrameLowering::emitStackProbeInlineGenericLoop( + + // save loop bound + { +- const unsigned Opc = getSUBriOpcode(Uses64BitFramePtr, Offset); +- BuildMI(MBB, MBBI, DL, TII.get(Opc), FinalStackProbed) ++ const unsigned SUBOpc = getSUBriOpcode(Uses64BitFramePtr, Offset); ++ BuildMI(MBB, MBBI, DL, TII.get(SUBOpc), FinalStackProbed) + .addReg(FinalStackProbed) + .addImm(Offset / StackProbeSize * StackProbeSize) + .setMIFlag(MachineInstr::FrameSetup); +@@ -675,8 +721,8 @@ void X86FrameLowering::emitStackProbeInlineGenericLoop( + + // allocate a page + { +- const unsigned Opc = getSUBriOpcode(Uses64BitFramePtr, StackProbeSize); +- BuildMI(testMBB, DL, TII.get(Opc), StackPtr) ++ const unsigned SUBOpc = getSUBriOpcode(Uses64BitFramePtr, StackProbeSize); ++ BuildMI(testMBB, DL, TII.get(SUBOpc), StackPtr) + .addReg(StackPtr) + .addImm(StackProbeSize) + .setMIFlag(MachineInstr::FrameSetup); +@@ -1052,13 +1098,149 @@ void X86FrameLowering::BuildStackAlignAND(MachineBasicBlock &MBB, + uint64_t MaxAlign) const { + uint64_t Val = -MaxAlign; + unsigned AndOp = getANDriOpcode(Uses64BitFramePtr, Val); +- MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(AndOp), Reg) +- .addReg(Reg) +- .addImm(Val) +- .setMIFlag(MachineInstr::FrameSetup); + +- // The EFLAGS implicit def is dead. +- MI->getOperand(3).setIsDead(); ++ MachineFunction &MF = *MBB.getParent(); ++ const X86Subtarget &STI = MF.getSubtarget(); ++ const X86TargetLowering &TLI = *STI.getTargetLowering(); ++ const uint64_t StackProbeSize = TLI.getStackProbeSize(MF); ++ const bool EmitInlineStackProbe = TLI.hasInlineStackProbe(MF); ++ ++ // We want to make sure that (in worst case) less than StackProbeSize bytes ++ // are not probed after the AND. This assumption is used in ++ // emitStackProbeInlineGeneric. ++ if (Reg == StackPtr && EmitInlineStackProbe && MaxAlign >= StackProbeSize) { ++ { ++ NumFrameLoopProbe++; ++ MachineBasicBlock *entryMBB = ++ MF.CreateMachineBasicBlock(MBB.getBasicBlock()); ++ MachineBasicBlock *headMBB = ++ MF.CreateMachineBasicBlock(MBB.getBasicBlock()); ++ MachineBasicBlock *bodyMBB = ++ MF.CreateMachineBasicBlock(MBB.getBasicBlock()); ++ MachineBasicBlock *footMBB = ++ MF.CreateMachineBasicBlock(MBB.getBasicBlock()); ++ ++ MachineFunction::iterator MBBIter = MBB.getIterator(); ++ MF.insert(MBBIter, entryMBB); ++ MF.insert(MBBIter, headMBB); ++ MF.insert(MBBIter, bodyMBB); ++ MF.insert(MBBIter, footMBB); ++ const unsigned MovMIOpc = Is64Bit ? X86::MOV64mi32 : X86::MOV32mi; ++ Register FinalStackProbed = Uses64BitFramePtr ? X86::R11 : X86::R11D; ++ ++ // Setup entry block ++ { ++ ++ entryMBB->splice(entryMBB->end(), &MBB, MBB.begin(), MBBI); ++ BuildMI(entryMBB, DL, TII.get(TargetOpcode::COPY), FinalStackProbed) ++ .addReg(StackPtr) ++ .setMIFlag(MachineInstr::FrameSetup); ++ MachineInstr *MI = ++ BuildMI(entryMBB, DL, TII.get(AndOp), FinalStackProbed) ++ .addReg(FinalStackProbed) ++ .addImm(Val) ++ .setMIFlag(MachineInstr::FrameSetup); ++ ++ // The EFLAGS implicit def is dead. ++ MI->getOperand(3).setIsDead(); ++ ++ BuildMI(entryMBB, DL, ++ TII.get(Uses64BitFramePtr ? X86::CMP64rr : X86::CMP32rr)) ++ .addReg(FinalStackProbed) ++ .addReg(StackPtr) ++ .setMIFlag(MachineInstr::FrameSetup); ++ BuildMI(entryMBB, DL, TII.get(X86::JCC_1)) ++ .addMBB(&MBB) ++ .addImm(X86::COND_E) ++ .setMIFlag(MachineInstr::FrameSetup); ++ entryMBB->addSuccessor(headMBB); ++ entryMBB->addSuccessor(&MBB); ++ } ++ ++ // Loop entry block ++ ++ { ++ const unsigned SUBOpc = ++ getSUBriOpcode(Uses64BitFramePtr, StackProbeSize); ++ BuildMI(headMBB, DL, TII.get(SUBOpc), StackPtr) ++ .addReg(StackPtr) ++ .addImm(StackProbeSize) ++ .setMIFlag(MachineInstr::FrameSetup); ++ ++ BuildMI(headMBB, DL, ++ TII.get(Uses64BitFramePtr ? X86::CMP64rr : X86::CMP32rr)) ++ .addReg(FinalStackProbed) ++ .addReg(StackPtr) ++ .setMIFlag(MachineInstr::FrameSetup); ++ ++ // jump ++ BuildMI(headMBB, DL, TII.get(X86::JCC_1)) ++ .addMBB(footMBB) ++ .addImm(X86::COND_B) ++ .setMIFlag(MachineInstr::FrameSetup); ++ ++ headMBB->addSuccessor(bodyMBB); ++ headMBB->addSuccessor(footMBB); ++ } ++ ++ // setup loop body ++ { ++ addRegOffset(BuildMI(bodyMBB, DL, TII.get(MovMIOpc)) ++ .setMIFlag(MachineInstr::FrameSetup), ++ StackPtr, false, 0) ++ .addImm(0) ++ .setMIFlag(MachineInstr::FrameSetup); ++ ++ const unsigned SUBOpc = ++ getSUBriOpcode(Uses64BitFramePtr, StackProbeSize); ++ BuildMI(bodyMBB, DL, TII.get(SUBOpc), StackPtr) ++ .addReg(StackPtr) ++ .addImm(StackProbeSize) ++ .setMIFlag(MachineInstr::FrameSetup); ++ ++ // cmp with stack pointer bound ++ BuildMI(bodyMBB, DL, ++ TII.get(Uses64BitFramePtr ? X86::CMP64rr : X86::CMP32rr)) ++ .addReg(FinalStackProbed) ++ .addReg(StackPtr) ++ .setMIFlag(MachineInstr::FrameSetup); ++ ++ // jump ++ BuildMI(bodyMBB, DL, TII.get(X86::JCC_1)) ++ .addMBB(bodyMBB) ++ .addImm(X86::COND_B) ++ .setMIFlag(MachineInstr::FrameSetup); ++ bodyMBB->addSuccessor(bodyMBB); ++ bodyMBB->addSuccessor(footMBB); ++ } ++ ++ // setup loop footer ++ { ++ BuildMI(footMBB, DL, TII.get(TargetOpcode::COPY), StackPtr) ++ .addReg(FinalStackProbed) ++ .setMIFlag(MachineInstr::FrameSetup); ++ addRegOffset(BuildMI(footMBB, DL, TII.get(MovMIOpc)) ++ .setMIFlag(MachineInstr::FrameSetup), ++ StackPtr, false, 0) ++ .addImm(0) ++ .setMIFlag(MachineInstr::FrameSetup); ++ footMBB->addSuccessor(&MBB); ++ } ++ ++ recomputeLiveIns(*headMBB); ++ recomputeLiveIns(*bodyMBB); ++ recomputeLiveIns(*footMBB); ++ recomputeLiveIns(MBB); ++ } ++ } else { ++ MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(AndOp), Reg) ++ .addReg(Reg) ++ .addImm(Val) ++ .setMIFlag(MachineInstr::FrameSetup); ++ ++ // The EFLAGS implicit def is dead. ++ MI->getOperand(3).setIsDead(); ++ } + } + + bool X86FrameLowering::has128ByteRedZone(const MachineFunction& MF) const { +diff --git a/llvm/lib/Target/X86/X86FrameLowering.h b/llvm/lib/Target/X86/X86FrameLowering.h +index c0b4be95f88d..bb2e83205e71 100644 +--- a/llvm/lib/Target/X86/X86FrameLowering.h ++++ b/llvm/lib/Target/X86/X86FrameLowering.h +@@ -213,14 +213,14 @@ private: + void emitStackProbeInlineGenericBlock(MachineFunction &MF, + MachineBasicBlock &MBB, + MachineBasicBlock::iterator MBBI, +- const DebugLoc &DL, +- uint64_t Offset) const; ++ const DebugLoc &DL, uint64_t Offset, ++ uint64_t Align) const; + + void emitStackProbeInlineGenericLoop(MachineFunction &MF, + MachineBasicBlock &MBB, + MachineBasicBlock::iterator MBBI, +- const DebugLoc &DL, +- uint64_t Offset) const; ++ const DebugLoc &DL, uint64_t Offset, ++ uint64_t Align) const; + + /// Emit a stub to later inline the target stack probe. + MachineInstr *emitStackProbeInlineStub(MachineFunction &MF, +diff --git a/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll b/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll +new file mode 100644 +index 000000000000..6c981cb4ac91 +--- /dev/null ++++ b/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll +@@ -0,0 +1,88 @@ ++; RUN: llc < %s | FileCheck %s ++ ++ ++target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" ++target triple = "x86_64-unknown-linux-gnu" ++ ++define i32 @foo_noprotect() local_unnamed_addr { ++; CHECK-LABEL: foo_noprotect: ++; CHECK: # %bb.0: ++; CHECK-NEXT: pushq %rbp ++; CHECK-NEXT: .cfi_def_cfa_offset 16 ++; CHECK-NEXT: .cfi_offset %rbp, -16 ++; CHECK-NEXT: movq %rsp, %rbp ++; CHECK-NEXT: .cfi_def_cfa_register %rbp ++; CHECK-NEXT: andq $-4096, %rsp # imm = 0xF000 ++; CHECK-NEXT: subq $73728, %rsp # imm = 0x12000 ++; CHECK-NEXT: movl $1, 392(%rsp) ++; CHECK-NEXT: movl $1, 28792(%rsp) ++; CHECK-NEXT: movl (%rsp), %eax ++; CHECK-NEXT: movq %rbp, %rsp ++; CHECK-NEXT: popq %rbp ++; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ++; CHECK-NEXT: retq ++ ++ ++ %a = alloca i32, i64 18000, align 4096 ++ %b0 = getelementptr inbounds i32, i32* %a, i64 98 ++ %b1 = getelementptr inbounds i32, i32* %a, i64 7198 ++ store volatile i32 1, i32* %b0 ++ store volatile i32 1, i32* %b1 ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++define i32 @foo_protect() local_unnamed_addr #0 { ++; CHECK-LABEL: foo_protect: ++; CHECK: # %bb.0: ++; CHECK-NEXT: pushq %rbp ++; CHECK-NEXT: .cfi_def_cfa_offset 16 ++; CHECK-NEXT: .cfi_offset %rbp, -16 ++; CHECK-NEXT: movq %rsp, %rbp ++; CHECK-NEXT: .cfi_def_cfa_register %rbp ++; CHECK-NEXT: movq %rsp, %r11 ++; CHECK-NEXT: andq $-4096, %r11 # imm = 0xF000 ++; CHECK-NEXT: cmpq %rsp, %r11 ++; CHECK-NEXT: je .LBB1_4 ++; CHECK-NEXT:# %bb.1: ++; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 ++; CHECK-NEXT: cmpq %rsp, %r11 ++; CHECK-NEXT: jb .LBB1_3 ++; CHECK-NEXT:.LBB1_2: # =>This Inner Loop Header: Depth=1 ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 ++; CHECK-NEXT: cmpq %rsp, %r11 ++; CHECK-NEXT: jb .LBB1_2 ++; CHECK-NEXT:.LBB1_3: ++; CHECK-NEXT: movq %r11, %rsp ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT:.LBB1_4: ++; CHECK-NEXT: movq %rsp, %r11 ++; CHECK-NEXT: subq $73728, %r11 # imm = 0x12000 ++; CHECK-NEXT:.LBB1_5: # =>This Inner Loop Header: Depth=1 ++; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: cmpq %r11, %rsp ++; CHECK-NEXT: jne .LBB1_5 ++; CHECK-NEXT:# %bb.6: ++; CHECK-NEXT: movl $1, 392(%rsp) ++; CHECK-NEXT: movl $1, 28792(%rsp) ++; CHECK-NEXT: movl (%rsp), %eax ++; CHECK-NEXT: movq %rbp, %rsp ++; CHECK-NEXT: popq %rbp ++; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ++; CHECK-NEXT: retq ++ ++ ++ ++ ++ %a = alloca i32, i64 18000, align 4096 ++ %b0 = getelementptr inbounds i32, i32* %a, i64 98 ++ %b1 = getelementptr inbounds i32, i32* %a, i64 7198 ++ store volatile i32 1, i32* %b0 ++ store volatile i32 1, i32* %b1 ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++attributes #0 = {"probe-stack"="inline-asm"} +diff --git a/llvm/test/CodeGen/X86/stack-clash-no-free-probe.ll b/llvm/test/CodeGen/X86/stack-clash-no-free-probe.ll +deleted file mode 100644 +index 652acbdf00ba..000000000000 +--- a/llvm/test/CodeGen/X86/stack-clash-no-free-probe.ll ++++ /dev/null +@@ -1,27 +0,0 @@ +-; RUN: llc < %s | FileCheck %s +- +-target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +-target triple = "x86_64-unknown-linux-gnu" +- +-define i32 @foo(i64 %i) local_unnamed_addr #0 { +-; CHECK-LABEL: foo: +-; CHECK: # %bb.0: +-; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 +-; CHECK-NEXT: movq $0, (%rsp) +-; CHECK-NEXT: subq $3784, %rsp # imm = 0xEC8 +-; CHECK-NEXT: .cfi_def_cfa_offset 7888 +-; CHECK-NEXT: movl $1, -128(%rsp,%rdi,4) +-; CHECK-NEXT: movl -128(%rsp), %eax +-; CHECK-NEXT: addq $7880, %rsp # imm = 0x1EC8 +-; CHECK-NEXT: .cfi_def_cfa_offset 8 +-; CHECK-NEXT: retq +- +- %a = alloca i32, i32 2000, align 16 +- %b = getelementptr inbounds i32, i32* %a, i64 %i +- store volatile i32 1, i32* %b +- %c = load volatile i32, i32* %a +- ret i32 %c +-} +- +-attributes #0 = {"probe-stack"="inline-asm"} +- +diff --git a/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll b/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll +new file mode 100644 +index 000000000000..eafa86f1eba9 +--- /dev/null ++++ b/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll +@@ -0,0 +1,135 @@ ++; RUN: llc < %s | FileCheck %s ++ ++target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" ++target triple = "x86_64-unknown-linux-gnu" ++ ++; | case1 | alloca + align < probe_size ++define i32 @foo1(i64 %i) local_unnamed_addr #0 { ++; CHECK-LABEL: foo1: ++; CHECK: # %bb.0: ++; CHECK-NEXT: pushq %rbp ++; CHECK-NEXT: .cfi_def_cfa_offset 16 ++; CHECK-NEXT: .cfi_offset %rbp, -16 ++; CHECK-NEXT: movq %rsp, %rbp ++; CHECK-NEXT: .cfi_def_cfa_register %rbp ++; CHECK-NEXT: andq $-64, %rsp ++; CHECK-NEXT: subq $832, %rsp # imm = 0x340 ++; CHECK-NEXT: movl $1, (%rsp,%rdi,4) ++; CHECK-NEXT: movl (%rsp), %eax ++; CHECK-NEXT: movq %rbp, %rsp ++; CHECK-NEXT: popq %rbp ++; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ++; CHECK-NEXT: retq ++ ++ %a = alloca i32, i32 200, align 64 ++ %b = getelementptr inbounds i32, i32* %a, i64 %i ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++; | case2 | alloca > probe_size, align > probe_size ++define i32 @foo2(i64 %i) local_unnamed_addr #0 { ++; CHECK-LABEL: foo2: ++; CHECK: # %bb.0: ++; CHECK-NEXT: pushq %rbp ++; CHECK-NEXT: .cfi_def_cfa_offset 16 ++; CHECK-NEXT: .cfi_offset %rbp, -16 ++; CHECK-NEXT: movq %rsp, %rbp ++; CHECK-NEXT: .cfi_def_cfa_register %rbp ++; CHECK-NEXT: andq $-2048, %rsp # imm = 0xF800 ++; CHECK-NEXT: subq $2048, %rsp # imm = 0x800 ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: subq $2048, %rsp # imm = 0x800 ++; CHECK-NEXT: movl $1, (%rsp,%rdi,4) ++; CHECK-NEXT: movl (%rsp), %eax ++; CHECK-NEXT: movq %rbp, %rsp ++; CHECK-NEXT: popq %rbp ++; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ++; CHECK-NEXT: retq ++ ++ %a = alloca i32, i32 2000, align 2048 ++ %b = getelementptr inbounds i32, i32* %a, i64 %i ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++; | case3 | alloca < probe_size, align < probe_size, alloca + align > probe_size ++define i32 @foo3(i64 %i) local_unnamed_addr #0 { ++; CHECK-LABEL: foo3: ++; CHECK: # %bb.0: ++; CHECK-NEXT: pushq %rbp ++; CHECK-NEXT: .cfi_def_cfa_offset 16 ++; CHECK-NEXT: .cfi_offset %rbp, -16 ++; CHECK-NEXT: movq %rsp, %rbp ++; CHECK-NEXT: .cfi_def_cfa_register %rbp ++; CHECK-NEXT: andq $-1024, %rsp # imm = 0xFC00 ++; CHECK-NEXT: subq $3072, %rsp # imm = 0xC00 ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: subq $1024, %rsp # imm = 0x400 ++; CHECK-NEXT: movl $1, (%rsp,%rdi,4) ++; CHECK-NEXT: movl (%rsp), %eax ++; CHECK-NEXT: movq %rbp, %rsp ++; CHECK-NEXT: popq %rbp ++; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ++; CHECK-NEXT: retq ++ ++ ++ %a = alloca i32, i32 1000, align 1024 ++ %b = getelementptr inbounds i32, i32* %a, i64 %i ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++; | case4 | alloca + probe_size < probe_size, followed by dynamic alloca ++define i32 @foo4(i64 %i) local_unnamed_addr #0 { ++; CHECK-LABEL: foo4: ++; CHECK: # %bb.0: ++; CHECK-NEXT: pushq %rbp ++; CHECK-NEXT: .cfi_def_cfa_offset 16 ++; CHECK-NEXT: .cfi_offset %rbp, -16 ++; CHECK-NEXT: movq %rsp, %rbp ++; CHECK-NEXT: .cfi_def_cfa_register %rbp ++; CHECK-NEXT: pushq %rbx ++; CHECK-NEXT: andq $-64, %rsp ++; CHECK-NEXT: subq $896, %rsp # imm = 0x380 ++; CHECK-NEXT: movq %rsp, %rbx ++; CHECK-NEXT: .cfi_offset %rbx, -24 ++; CHECK-NEXT: movl $1, (%rbx,%rdi,4) ++; CHECK-NEXT: movl (%rbx), %ecx ++; CHECK-NEXT: movq %rsp, %rax ++; CHECK-NEXT: leaq 15(,%rcx,4), %rcx ++; CHECK-NEXT: andq $-16, %rcx ++; CHECK-NEXT: subq %rcx, %rax ++; CHECK-NEXT: cmpq %rsp, %rax ++; CHECK-NEXT: jle .LBB3_3 ++; CHECK-NEXT:.LBB3_2: # =>This Inner Loop Header: Depth=1 ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 ++; CHECK-NEXT: cmpq %rsp, %rax ++; CHECK-NEXT: jg .LBB3_2 ++; CHECK-NEXT:.LBB3_3: ++; CHECK-NEXT: andq $-64, %rax ++; CHECK-NEXT: movq %rax, %rsp ++; CHECK-NEXT: movl (%rax), %eax ++; CHECK-NEXT: leaq -8(%rbp), %rsp ++; CHECK-NEXT: popq %rbx ++; CHECK-NEXT: popq %rbp ++; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ++; CHECK-NEXT: retq ++ ++ %a = alloca i32, i32 200, align 64 ++ %b = getelementptr inbounds i32, i32* %a, i64 %i ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ %d = alloca i32, i32 %c, align 64 ++ %e = load volatile i32, i32* %d ++ ret i32 %e ++} ++ ++attributes #0 = {"probe-stack"="inline-asm"} ++ +diff --git a/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll b/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll +new file mode 100644 +index 000000000000..e608bab90415 +--- /dev/null ++++ b/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll +@@ -0,0 +1,83 @@ ++; RUN: llc < %s | FileCheck %s ++ ++ ++target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" ++target triple = "x86_64-unknown-linux-gnu" ++ ++define i32 @foo_noprotect() local_unnamed_addr { ++; CHECK-LABEL: foo_noprotect: ++; CHECK: # %bb.0: ++; CHECK-NEXT: pushq %rbp ++; CHECK-NEXT: .cfi_def_cfa_offset 16 ++; CHECK-NEXT: .cfi_offset %rbp, -16 ++; CHECK-NEXT: movq %rsp, %rbp ++; CHECK-NEXT: .cfi_def_cfa_register %rbp ++; CHECK-NEXT: andq $-65536, %rsp ++; CHECK-NEXT: subq $65536, %rsp ++; CHECK-NEXT: movl $1, 392(%rsp) ++; CHECK-NEXT: movl (%rsp), %eax ++; CHECK-NEXT: movq %rbp, %rsp ++; CHECK-NEXT: popq %rbp ++; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ++; CHECK-NEXT: retq ++ ++ ++ ++ %a = alloca i32, i64 100, align 65536 ++ %b = getelementptr inbounds i32, i32* %a, i64 98 ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++define i32 @foo_protect() local_unnamed_addr #0 { ++; CHECK-LABEL: foo_protect: ++; CHECK: # %bb.0: ++; CHECK-NEXT: pushq %rbp ++; CHECK-NEXT: .cfi_def_cfa_offset 16 ++; CHECK-NEXT: .cfi_offset %rbp, -16 ++; CHECK-NEXT: movq %rsp, %rbp ++; CHECK-NEXT: .cfi_def_cfa_register %rbp ++; CHECK-NEXT: movq %rsp, %r11 ++; CHECK-NEXT: andq $-65536, %r11 # imm = 0xFFFF0000 ++; CHECK-NEXT: cmpq %rsp, %r11 ++; CHECK-NEXT: je .LBB1_4 ++; CHECK-NEXT:# %bb.1: ++; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 ++; CHECK-NEXT: cmpq %rsp, %r11 ++; CHECK-NEXT: jb .LBB1_3 ++; CHECK-NEXT:.LBB1_2: # =>This Inner Loop Header: Depth=1 ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 ++; CHECK-NEXT: cmpq %rsp, %r11 ++; CHECK-NEXT: jb .LBB1_2 ++; CHECK-NEXT:.LBB1_3: ++; CHECK-NEXT: movq %r11, %rsp ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT:.LBB1_4: ++; CHECK-NEXT: movq %rsp, %r11 ++; CHECK-NEXT: subq $65536, %r11 # imm = 0x10000 ++; CHECK-NEXT:.LBB1_5: # =>This Inner Loop Header: Depth=1 ++; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 ++; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: cmpq %r11, %rsp ++; CHECK-NEXT: jne .LBB1_5 ++; CHECK-NEXT:# %bb.6: ++; CHECK-NEXT: movl $1, 392(%rsp) ++; CHECK-NEXT: movl (%rsp), %eax ++; CHECK-NEXT: movq %rbp, %rsp ++; CHECK-NEXT: popq %rbp ++; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ++; CHECK-NEXT: retq ++ ++ ++ ++ ++ %a = alloca i32, i64 100, align 65536 ++ %b = getelementptr inbounds i32, i32* %a, i64 98 ++ store volatile i32 1, i32* %b ++ %c = load volatile i32, i32* %a ++ ret i32 %c ++} ++ ++attributes #0 = {"probe-stack"="inline-asm"} + +From bbe6cbbed8c7460a7e8477373b9250543362e771 Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Tue, 27 Oct 2020 10:59:42 +0100 +Subject: [PATCH 3/3] [stack-clash] Fix probing of dynamic alloca + +- Perform the probing in the correct direction. + Related to https://github.com/rust-lang/rust/pull/77885#issuecomment-711062924 + +- The first touch on a dynamic alloca cannot use a mov because it clobbers + existing space. Use a xor 0 instead + +Differential Revision: https://reviews.llvm.org/D90216 + +(cherry picked from commit 0f60bcc36c34522618bd1425a45f8c6006568fb6) +--- + llvm/lib/Target/X86/X86ISelLowering.cpp | 8 ++++---- + llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll | 12 ++++++------ + .../X86/stack-clash-small-alloc-medium-align.ll | 6 +++--- + 3 files changed, 13 insertions(+), 13 deletions(-) + +diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp +index f68ae4461fe3..afe470cc6e0b 100644 +--- a/llvm/lib/Target/X86/X86ISelLowering.cpp ++++ b/llvm/lib/Target/X86/X86ISelLowering.cpp +@@ -31876,7 +31876,7 @@ X86TargetLowering::EmitLoweredProbedAlloca(MachineInstr &MI, + + BuildMI(testMBB, DL, TII->get(X86::JCC_1)) + .addMBB(tailMBB) +- .addImm(X86::COND_LE); ++ .addImm(X86::COND_GE); + testMBB->addSuccessor(blockMBB); + testMBB->addSuccessor(tailMBB); + +@@ -31892,9 +31892,9 @@ X86TargetLowering::EmitLoweredProbedAlloca(MachineInstr &MI, + // + // The property we want to enforce is to never have more than [page alloc] between two probes. + +- const unsigned MovMIOpc = +- TFI.Uses64BitFramePtr ? X86::MOV64mi32 : X86::MOV32mi; +- addRegOffset(BuildMI(blockMBB, DL, TII->get(MovMIOpc)), physSPReg, false, 0) ++ const unsigned XORMIOpc = ++ TFI.Uses64BitFramePtr ? X86::XOR64mi8 : X86::XOR32mi8; ++ addRegOffset(BuildMI(blockMBB, DL, TII->get(XORMIOpc)), physSPReg, false, 0) + .addImm(0); + + BuildMI(blockMBB, DL, +diff --git a/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll b/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll +index 82fd67842c8a..6dd8b6ab5897 100644 +--- a/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll ++++ b/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll +@@ -24,12 +24,12 @@ attributes #0 = {"probe-stack"="inline-asm"} + ; CHECK-X86-64-NEXT: andq $-16, %rcx + ; CHECK-X86-64-NEXT: subq %rcx, %rax + ; CHECK-X86-64-NEXT: cmpq %rsp, %rax +-; CHECK-X86-64-NEXT: jle .LBB0_3 ++; CHECK-X86-64-NEXT: jge .LBB0_3 + ; CHECK-X86-64-NEXT: .LBB0_2: # =>This Inner Loop Header: Depth=1 +-; CHECK-X86-64-NEXT: movq $0, (%rsp) ++; CHECK-X86-64-NEXT: xorq $0, (%rsp) + ; CHECK-X86-64-NEXT: subq $4096, %rsp # imm = 0x1000 + ; CHECK-X86-64-NEXT: cmpq %rsp, %rax +-; CHECK-X86-64-NEXT: jg .LBB0_2 ++; CHECK-X86-64-NEXT: jl .LBB0_2 + ; CHECK-X86-64-NEXT: .LBB0_3: + ; CHECK-X86-64-NEXT: movq %rax, %rsp + ; CHECK-X86-64-NEXT: movl $1, 4792(%rax) +@@ -54,12 +54,12 @@ attributes #0 = {"probe-stack"="inline-asm"} + ; CHECK-X86-32-NEXT: andl $-16, %ecx + ; CHECK-X86-32-NEXT: subl %ecx, %eax + ; CHECK-X86-32-NEXT: cmpl %esp, %eax +-; CHECK-X86-32-NEXT: jle .LBB0_3 ++; CHECK-X86-32-NEXT: jge .LBB0_3 + ; CHECK-X86-32-NEXT: .LBB0_2: # =>This Inner Loop Header: Depth=1 +-; CHECK-X86-32-NEXT: movl $0, (%esp) ++; CHECK-X86-32-NEXT: xorl $0, (%esp) + ; CHECK-X86-32-NEXT: subl $4096, %esp # imm = 0x1000 + ; CHECK-X86-32-NEXT: cmpl %esp, %eax +-; CHECK-X86-32-NEXT: jg .LBB0_2 ++; CHECK-X86-32-NEXT: jl .LBB0_2 + ; CHECK-X86-32-NEXT: .LBB0_3: + ; CHECK-X86-32-NEXT: movl %eax, %esp + ; CHECK-X86-32-NEXT: movl $1, 4792(%eax) +diff --git a/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll b/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll +index eafa86f1eba9..39b6c3640a60 100644 +--- a/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll ++++ b/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll +@@ -106,12 +106,12 @@ define i32 @foo4(i64 %i) local_unnamed_addr #0 { + ; CHECK-NEXT: andq $-16, %rcx + ; CHECK-NEXT: subq %rcx, %rax + ; CHECK-NEXT: cmpq %rsp, %rax +-; CHECK-NEXT: jle .LBB3_3 ++; CHECK-NEXT: jge .LBB3_3 + ; CHECK-NEXT:.LBB3_2: # =>This Inner Loop Header: Depth=1 +-; CHECK-NEXT: movq $0, (%rsp) ++; CHECK-NEXT: xorq $0, (%rsp) + ; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 + ; CHECK-NEXT: cmpq %rsp, %rax +-; CHECK-NEXT: jg .LBB3_2 ++; CHECK-NEXT: jl .LBB3_2 + ; CHECK-NEXT:.LBB3_3: + ; CHECK-NEXT: andq $-64, %rax + ; CHECK-NEXT: movq %rax, %rsp diff --git a/lmarbles/PKGBUILD b/lmarbles/PKGBUILD new file mode 100644 index 0000000..9f35b1a --- /dev/null +++ b/lmarbles/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=lmarbles +pkgver=1.0.8 +_debver=$pkgver +_debrel=0.2 +pkgrel=3 +pkgdesc="A game where you build figures out of colored marbles" +arch=('i686' 'x86_64') +url='https://lgames.sourceforge.net/index.php?project=LMarbles' +license=('GPL-2') +depends=('sdl_mixer') +makedepends=('quilt') +groups=('games') +source=("https://downloads.sourceforge.net/sourceforge/lgames/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/l/lmarbles/lmarbles_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('d765b669a1b0039a0af8b28ede8209e9736c2f967b21d9f8372d1fc5475d49a766bef297615bff090532ade41fe44e084a458227b443566a54afebc3e989b57a' + '6a4a554460bc8a64a2b9b12449186b7ff7612ae240f640ab8d7abf9ba1ce0b332f5f8869bd8287a3e8e75034bea08c2ea764882af21836bc95c31210ddafb1aa') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --localstatedir=/var \ + --bindir=/usr/games \ + --datarootdir=/usr/share/games + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + mv "${pkgdir}"/usr/share/games/{applications,icons,man} "${pkgdir}"/usr/share + rm "${pkgdir}"/usr/share/icons/* + install -Dm644 debian/$pkgname.png -t "${pkgdir}"/usr/share/icons/ + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/lmdb/PKGBUILD b/lmdb/PKGBUILD new file mode 100644 index 0000000..fe70707 --- /dev/null +++ b/lmdb/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=lmdb +pkgver=0.9.24 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc='Symas Lightning Memory-Mapped Database' +arch=('i686' 'x86_64') +url='https://symas.com/mdb' +license=('OpenLDAP-2.8') +depends=('glibc') +makedepends=('quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/LMDB/$pkgname/archive/LMDB_$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/l/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz" + "$pkgname.pc") +sha512sums=('c3a96c27f13c072ef5861bcea045d82f0a220dbd938579411ea6c38ac0696b3620c71f1e2cc56d31db5105f3533da95aba1ac34653d8bdcfa4f2f1fb831cccb1' + '045aaa45f2a8a3cd4a5ed3ebf4de80eab05eb0bff2f8add01f6662d53ff6823a16cb9ea9ccf66540cc60030bf14d2e4bb53b9e5a92a877e3f5651f38ee63bcb9' + '0349d4b08a1f93fe338d8f8e3e5a83e24211a46f999fe529bc1ac49c8c4975559d95a548c203d9427e3f82d62e934ba3cd1be6f734f9b9405b2a26477be4ed33') + +prepare() { + sed -e "s|@PKGVER@|$pkgver|" -i "$pkgname.pc" + + cd "$srcdir"/lmdb-LMDB_$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/lmdb-LMDB_$pkgver/libraries/liblmdb + make prefix=/usr +} + +package() { + cd "$srcdir"/lmdb-LMDB_$pkgver/libraries/liblmdb + make DESTDIR="$pkgdir" prefix=/usr install + + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname + install -Dm644 "$srcdir"/"$pkgname.pc" -t "$pkgdir"/usr/lib/pkgconfig +} diff --git a/lmdb/lmdb.pc b/lmdb/lmdb.pc new file mode 100644 index 0000000..de30061 --- /dev/null +++ b/lmdb/lmdb.pc @@ -0,0 +1,10 @@ +prefix=/usr +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: liblmdb +Description: Lightning Memory-Mapped Database +URL: https://symas.com/products/lightning-memory-mapped-database/ +Version: @PKGVER@ +Libs: -L${libdir} -llmdb +Cflags: -I${includedir} diff --git a/lmms/PKGBUILD b/lmms/PKGBUILD new file mode 100644 index 0000000..b81323e --- /dev/null +++ b/lmms/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgname=lmms +pkgver=1.2.2 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="Free, libre and sophisticated digital audio workstation" +arch=('i686' 'x86_64') +url='https://lmms.io/' +license=('GPL-2') +depends=('alsa-lib' 'fftw' 'fltk' 'fluidsynth' 'freetype2' 'jack' 'ladspa' 'lame' 'libgig' 'libogg' 'libsamplerate' + 'libsndfile' 'libsndio' 'libvorbis' 'libx11' 'libxcb' 'portaudio' 'qt-x11extras' 'sdl' 'sndio' 'stk' 'zlib') +makedepends=('doxygen' 'extra-cmake-modules' 'qt-tools' 'quilt') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/l/${pkgname}/${pkgname}_${_debver}+dfsg1.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/l/${pkgname}/${pkgname}_${_debver}+dfsg1-${_debrel}.debian.tar.xz" + "remove_leftover_entries_containing_nonlibre_demo_files.patch") +sha512sums=('fbb8cc46c5a0c167beb1e0eabb2790cf4d466349ef3ebf2463f99dd57b0cf0a0c73e354a8ef68bfbac4112875148495f53b4d388c2846065c35ed0dc0a4f4cac' + '2ba45643cf41eff1da741c5ddb1edc8532247587c6d32dfa986ac0a290a9ad55217b95d0391868356c9fab10aa878cd40b8ecf7dc1ef75c277c254c99d85ab74' + 'f955f8434d099af32af827dac1e52f9cfebda99ae2abaee765d1301a3222b68b02da1dc6f1ffeeb44038a0a32b2124a67862a3e6822ac2c148f3de932528265a') + +prepare() { + mv -v ${pkgname}{,-${pkgver}} + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index" + export QUILT_DIFF_ARGS="--no-timestamps" + + # remove old Debian source directory + rm -frv debian || true + + cp -rv ${srcdir}/debian . + + # Doesn't apply + rm -v debian/patches/add_keywords_to_the_desktop_file.patch || true + + quilt push -av + fi + + # add keywords into a desktop shortcut file + echo "Keywords=Audio;MIDI;Multitrack;Sequencer;DAW;ALSA;JACK;LADSPA;VST;Qt;" >> cmake/linux/lmms.desktop + + # apply patch removing few leftover entries containing project files under non-libre licenses from the licenses list + patch -p1 -i ${srcdir}/remove_leftover_entries_containing_nonlibre_demo_files.patch + + # disable ZynAddSubFX plugin due to building issue + sed -ie 'N;s#^\t*zynaddsubfx\n##' plugins/CMakeLists.txt +} + +build() { + cmake \ + -S ${pkgname}-${pkgver} \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DCONTRIBUTORS="${PWD}/doc/CONTRIBUTORS" \ + -DCMAKE_MODULE_PATH=/usr/share/ECM/find-modules \ + -DCMAKE_BUILD_TYPE='None' \ + -DWANT_QT5=ON \ + -DWANT_PULSEAUDIO=OFF \ + -DWANT_SOUNDIO=OFF \ + -DWANT_SNDIO=ON \ + -DWANT_CARLA=OFF \ + -DOpenGL_GL_PREFERENCE=GLVND \ + -Wno-dev + CXXFLAGS="${CXXFLAGS} -flto" LDFLAGS="${CXXFLAGS} ${LDFLAGS}" make -C build +} + +package() { + make DESTDIR=${pkgdir} install -C build + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/lmms/remove_leftover_entries_containing_nonlibre_demo_files.patch b/lmms/remove_leftover_entries_containing_nonlibre_demo_files.patch new file mode 100644 index 0000000..122787c --- /dev/null +++ b/lmms/remove_leftover_entries_containing_nonlibre_demo_files.patch @@ -0,0 +1,62 @@ +Summary: Remove leftover entries containing project files under + non-libre licenses from licences lists. +Author: Jayvee Enaguas +Date: 2021-07-23 05:47:53.000000000 +0000 + +--- a/data/projects/demos/LICENSES.TXT 2020-07-04 11:58:46.000000000 +0000 ++++ b/data/projects/demos/LICENSES.TXT 2021-07-23 05:47:53.000000000 +0000 +@@ -26,10 +26,6 @@ + - Artistic 2.0 + - https://lmms.io/lsp/index.php?action=show&file=1534 + +-* Namitryus-K-Project.mmpz +- - CC (by-nc) +- - https://lmms.io/lsp/index.php?action=show&file=1138 +- + * Oglsdl-Dr8v2.mmpz + - Artistic 2.0 + - https://lmms.io/lsp/index.php?action=show&file=1124 +@@ -38,14 +34,6 @@ + - Artistic 2.0 + - https://lmms.io/lsp/index.php?action=show&file=1156 + +-* Popsip-Electric Dancer.mmpz +- - Creative Commons (by-nc) +- - https://lmms.io/lsp/?action=show&file=5414 +- +-* Root84-Initialize.mmpz +- - Yellow openmusic +- - https://lmms.io/lsp/index.php?action=show&file=628 +- + * Saber-FinalStep.mmpz + - BSD + - https://lmms.io/lsp/index.php?action=show&file=721 +@@ -62,14 +50,6 @@ + - Artistic 2.0 + - https://lmms.io/lsp/index.php?action=show&file=1060 + +-* Thaledric-Armageddon.mmpz +- - Creative Commons (by-nc-sa) +- - https://lmms.io/lsp/?action=show&file=1947 +- + * Thomasso-AxeFromThe80s.mmpz + - Artistic 2.0 + - https://lmms.io/lsp/index.php?action=show&file=474 +- +-* unfa-Spoken.mmpz +- - CC (by-nc) +- - https://lmms.io/lsp/index.php?action=show&file=4929 + +--- a/data/projects/shorties/LICENSES.TXT 2020-07-04 11:58:46.000000000 +0000 ++++ b/data/projects/shorties/LICENSES.TXT 2021-07-23 05:47:53.000000000 +0000 +@@ -10,10 +10,6 @@ + - Artistic 2.0 + - https://lmms.io/lsp/index.php?action=show&file=1170 + +-* Root84-TrancyLoop.mmpz +- - Yellow openmusic +- - https://lmms.io/lsp/index.php?action=show&file=246 +- + * Skiessi-222.mmpz + - CC (by-sa) + - https://lmms.io/lsp/index.php?action=show&file=543 diff --git a/lockdev/PKGBUILD b/lockdev/PKGBUILD new file mode 100644 index 0000000..d732ac2 --- /dev/null +++ b/lockdev/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=lockdev +pkgver=1.0.3_1.6 +_pkgver=1.0.3 +pkgrel=5 +pkgdesc="Run-time shared library for locking devices, using _both_ FSSTND and SVr4 methods" +url='https://packages.qa.debian.org/l/lockdev.html' +license=("LGPL-2.1") +arch=('i686' 'x86_64') +depends=('glibc') +install=lockdev.install +source=("https://deb.debian.org/debian/pool/main/l/${pkgname}/${pkgname}_${_pkgver}.orig.tar.gz" + 'build.patch' + 'gcc-4.7.patch') +sha512sums=('4066985059add674ef8a9195e611db8ead89ca6191c04b7f29243b12a3448c82a3d0ea852bf99e26e1c71f163891acd198867650a5c4843f787e1944a8bc7f2b' + '79ff3c22fbf38966310de99eefbc897c4f78b05c42d830ef3fc5ecb4234d81e58655bb2ab4564d7da0dbe04348ec496468b840a9992abe6b95b8b423916430ae' + 'c97ea9e3974d4eccc30472605a24f4393c60ada66ae5a0ad30502e3f939fb191a2772686241f0d12e417b33350edc015ec2d0238873031773ed6c39dbace0429') + +prepare() { + cd "${pkgname}-${_pkgver}" + sed -i "s|CFLAGS = -g|CFLAGS = -g -fPIC|" Makefile + patch -p1 -i $srcdir/build.patch + patch -p1 -i $srcdir/gcc-4.7.patch +} + +build() { + cd "${pkgname}-${_pkgver}" + make CFLAGS="${CFLAGS} -fPIC" +} + +package() { + cd "${pkgname}-${_pkgver}" + make basedir="${pkgdir}/usr" install + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/lockdev/build.patch b/lockdev/build.patch new file mode 100644 index 0000000..f1053d0 --- /dev/null +++ b/lockdev/build.patch @@ -0,0 +1,30 @@ +commit 0dd47123655c52d68185f06b9da8fb0e1b925400 +Author: Ludwig Nussel +Date: Tue Feb 9 14:56:23 2010 +0100 + + RedHat patch 2 + + - change library file name + - install devel symlink + +diff --git a/Makefile b/Makefile +index b7b4d1f..3b351dd 100644 +--- a/Makefile ++++ b/Makefile +@@ -11,7 +11,7 @@ VER = $(shell expr `pwd` : '.*-\([0-9.]*\)') + MVER = ${shell expr `pwd` : '.*-\([0-9]*\).[0-9]*'} + + static = ${libname}.a +-shared = ${libname}.${VER}.so ++shared = ${libname}.so.${VER} + soname = ${libname}.so.${MVER} + + # overwritten by caller (e.g.: debian/rules) +@@ -76,6 +76,7 @@ install_doc: docs/lockdev.3 + install_run: ${shared} + install -m755 -d ${libdir} + install -m644 ${shared} ${libdir} ++ ln -s ${shared} ${libdir}/liblockdev.so + + .PHONY: clean distclean perl-clean mostyclean + perl-clean: clean diff --git a/lockdev/gcc-4.7.patch b/lockdev/gcc-4.7.patch new file mode 100644 index 0000000..3b11e0b --- /dev/null +++ b/lockdev/gcc-4.7.patch @@ -0,0 +1,18 @@ +diff -Naur lockdev-1.0.3.orig/src/ttylock.h lockdev-1.0.3/src/ttylock.h +--- lockdev-1.0.3.orig/src/ttylock.h 2013-12-13 15:34:52.195877321 +0000 ++++ lockdev-1.0.3/src/ttylock.h 2013-12-13 15:38:16.131190480 +0000 +@@ -36,10 +36,10 @@ + + /* API of the library */ + +-int ttylock (char * devname); +-int ttywait (char * devname); +-int ttyunlock (char * devname); +-int ttylocked (char * devname); ++static inline int ttylock (char * devname); ++static inline int ttywait (char * devname); ++static inline int ttyunlock (char * devname); ++static inline int ttylocked (char * devname); + + + static inline int diff --git a/lockdev/lockdev.install b/lockdev/lockdev.install new file mode 100644 index 0000000..a7c588d --- /dev/null +++ b/lockdev/lockdev.install @@ -0,0 +1,9 @@ +post_install() { + echo ">>> WARNING: Your user need to be in 'lock' and 'uucp' groups to connect to devices:" + echo ">>> # gpasswd -a lock" + echo ">>> # gpasswd -a uucp" +} + +post_upgrade() { + post_install +} diff --git a/lockfile-progs/PKGBUILD b/lockfile-progs/PKGBUILD new file mode 100644 index 0000000..acd4a5a --- /dev/null +++ b/lockfile-progs/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=lockfile-progs +pkgver=0.1.18 +pkgrel=1 +pkgdesc="Free and libre programs for locking and unlocking files and mailboxes" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://packages.debian.org/unstable/misc/lockfile-progs' +depends=('glibc' 'liblockfile') +makedepends=('liblockfile') +source=("https://deb.debian.org/debian/pool/main/l/lockfile-progs/${pkgname}_${pkgver}.tar.gz") +sha512sums=('08ef12fd6d586a43b390ead013aa7401beeda68e1d681b3d168d36530e383de8f10c8f9f53fec281f02ef39290b64b0abb9f543fde7b30061204523e6e8ec6e3') + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + mkdir -p "$pkgdir"/usr/bin + install -s bin/* "$pkgdir"/usr/bin + mkdir -p "$pkgdir"/usr/share/man/man1 + install man/*.1 "$pkgdir"/usr/share/man/man1 + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/loudmouth/PKGBUILD b/loudmouth/PKGBUILD new file mode 100644 index 0000000..02f281b --- /dev/null +++ b/loudmouth/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=loudmouth +pkgver=1.5.3 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc='A lightweight Jabber client library written in C/Glib' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url='https://mcabber.com/' +depends=('glib2' 'gnutls' 'libidn' 'krb5') +makedepends=('intltool' 'pkgconfig' 'quilt') +source=(https://mcabber.com/files/loudmouth/${pkgname}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/l/loudmouth/loudmouth_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('ab6b16b4e644b69cdb7d8df1753d1bb5b43c2f1e76944e639339169b332e1b5c6a4246053c5b8a579ee9b53c845cef610b0040dfdffeb857180b6bab71adfcce' + '2bb1ae8ec0079ec84f7e243e7b6e86ad09975a3fdee76d93024c8e4862c397ab6a7c16f9b4010fa75be269f235ef66633c9b455e690a1665f5e69510324e9ff4') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --disable-static --disable-gtk-doc + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lpsolve/PKGBUILD b/lpsolve/PKGBUILD new file mode 100644 index 0000000..5b16c2f --- /dev/null +++ b/lpsolve/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=lpsolve +_pkgname=lp_solve +pkgver=5.5.2.5 +pkgrel=1 +pkgdesc="a Mixed Integer Linear Programming (MILP) solver" +arch=('x86_64' 'i686') +url="http://lpsolve.sourceforge.net/" +license=('LGPL-2.1') +depends=('glibc') +source=("https://downloads.sourceforge.net/${pkgname}/${_pkgname}_${pkgver}_source.tar.gz" + "flags.patch" + "${pkgname}.1") +sha512sums=('6ae78b01bf50990b8141dfe3c1994bb9e7632db6a200c7900ac44de592b3ac1e21063f7b4554d4960af01538d89e937fc25da14f67156d12464e8cfdf0f86c46' + 'ff4231d9a0b92d137936d060d0203cc811f8bcb77da3d246a54799542923efad08a67dc21fbcd9c574c505c1f2e71699936500e376008fe6cd7482a10ff80f22' + '55a90605129b058175712ec60e7d85bd88871a44bfc5e2a0277d1452acfa7e272872fb7ec8f6af6a92b720c449fc46d2d16d0f9ce7e326d0466490e825edffee') + +prepare() { + cd ${_pkgname}_${pkgver/.2.5/} + + patch --verbose -p1 -i ../flags.patch + # Fix Bug#1584534 (Launchpad). + sed -i 's#isnan(0#&.#' {${pkgname}55,${_pkgname}}/ccc +} + +build() { + cd ${_pkgname}_${pkgver/.2.5/} + + pushd ${pkgname}55 + chmod +x ccc && ./ccc + popd + pushd ${_pkgname} + chmod +x ccc && ./ccc + popd + # Copy manual file and compress into gzip. + cp -v ../${pkgname}.1 . && gzip -v9 ${pkgname}.1 +} + +package() { + cd ${_pkgname}_${pkgver/.2.5/} + + install -Dvm755 ${_pkgname}/bin/ux*/lp_solve -t ${pkgdir}/usr/bin + install -Dvm755 ${pkgname}55/bin/ux*/lib${pkgname}55.so -t ${pkgdir}/usr/lib + install -Dvm644 lp*.h -t ${pkgdir}/usr/include/${pkgname} + install -Dvm644 lpsolve.1.gz -t ${pkgdir}/usr/share/man/man1/ + install -Dvm644 bfp/bfp_LUSOL/LUSOL/LUSOL_LGPL.txt -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/lpsolve/flags.patch b/lpsolve/flags.patch new file mode 100644 index 0000000..16b1082 --- /dev/null +++ b/lpsolve/flags.patch @@ -0,0 +1,45 @@ +diff -ru lp_solve_5.5.orig/lp_solve/ccc lp_solve_5.5/lp_solve/ccc +--- lp_solve_5.5.orig/lp_solve/ccc 2009-02-23 16:31:18.000000000 +0000 ++++ lp_solve_5.5/lp_solve/ccc 2009-02-23 16:31:29.000000000 +0000 +@@ -28,7 +28,7 @@ + fi + rm /tmp/isnan.c /tmp/isnan >/dev/null 2>&1 + +-opts='-O3' ++opts=$CFLAGS + + def= + if [ "$PLATFORM" = "SCO_UNIX" ] +--- lp_solve_5.5/lp_solve/ccc 2021-05-16 11:21:48.000000000 +0200 ++++ lp_solve_5.5/lp_solve/ccc.new 2021-05-16 11:24:49.707197134 +0200 +@@ -42,4 +42,4 @@ + else dl=-ldl + fi + +-$c -I.. -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd -I../shared $opts $def $NOISNAN -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src -o bin/$PLATFORM/lp_solve $math $dl ++$c -I.. -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd -I../shared $opts $def $NOISNAN -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src $LDFLAGS -o bin/$PLATFORM/lp_solve $math $dl + +diff -ru lp_solve_5.5.orig/lpsolve55/ccc lp_solve_5.5/lpsolve55/ccc +--- lp_solve_5.5.orig/lpsolve55/ccc 2009-02-23 16:31:18.000000000 +0000 ++++ lp_solve_5.5/lpsolve55/ccc 2009-02-23 16:31:29.000000000 +0000 +@@ -35,7 +35,7 @@ + so=y + fi + +-opts='-O3' ++opts=$CFLAGS + + $c -s -c -I.. -I../shared -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd $opts $def $NOISNAN -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src + ar rv bin/$PLATFORM/liblpsolve55.a `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'` + +--- lp_solve_5.5/lpsolve55/ccc 2021-05-16 11:11:40.000000000 +0200 ++++ lp_solve_5.5/lpsolve55/ccc.new 2021-05-16 11:19:13.556599115 +0200 +@@ -48,7 +48,7 @@ + if [ "$so" != "" ] + then + $c -fpic -s -c -I.. -I../shared -I../bfp -I../bfp/bfp_LUSOL -I../bfp/bfp_LUSOL/LUSOL -I../colamd -I. $opts $NOISNAN -DYY_NEVER_INTERACTIVE -DPARSER_LP -DINVERSE_ACTIVE=INVERSE_LUSOL -DRoleIsExternalInvEngine $src +- $c -shared -Wl,-Bsymbolic -Wl,-soname,liblpsolve55.so -o bin/$PLATFORM/liblpsolve55.so `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'` -lc -lm -ldl ++ $c -shared -Wl,-Bsymbolic -Wl,-soname,liblpsolve55.so $LDFLAGS -o bin/$PLATFORM/liblpsolve55.so `echo $src|sed s/[.]c/.o/g|sed 's/[^ ]*\///g'` -lc -lm -ldl + fi + + rm *.o 2>/dev/null diff --git a/lrzip/PKGBUILD b/lrzip/PKGBUILD new file mode 100644 index 0000000..ca6d197 --- /dev/null +++ b/lrzip/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=lrzip +pkgver=0.641 +pkgrel=1 +pkgdesc='Multi-threaded compression with rzip/lzma, lzo, and zpaq' +url='https://github.com/ckolivas/lrzip' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('lzo') +makedepends=('nasm') +source=("https://github.com/ckolivas/lrzip/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('cb14dda15485faa24cb840dd94ecd4741bd47464770ae8b27f97b5c263d8a32e40ceb17b288f0f70426598ef2acf84b091593fc8cf7a0f2db0abde88d09a301f') + +build() { + cd ${pkgname}-${pkgver} + + CFLAGS="$CFLAGS -fomit-frame-pointer" + CXXFLAGS="$CXXFLAGS -fomit-frame-pointer" + + ./autogen.sh --prefix=/usr "$flags" + make +} + +check() { + make -C "${pkgname}-${pkgver}" -k check +} + +package() { + make -C "${pkgname}-${pkgver}" DESTDIR="$pkgdir" install-strip + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lsdvd/PKGBUILD b/lsdvd/PKGBUILD new file mode 100644 index 0000000..d3324b8 --- /dev/null +++ b/lsdvd/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=lsdvd +pkgver=0.17 +pkgrel=1 +pkgdesc="Console application that displays the content of a DVD" +arch=('i686' 'x86_64') +url="https://sourceforge.net/projects/lsdvd/" +license=('GPL-2') +depends=('libdvdread') +source=(https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz) +sha512sums=('d217ebe063c9d4c1584abe99cba5c5d09e1d600d26c58f90d542235f9a629433aa24f24fd8399c639e21391e7a5e8bdf54a9c85083aed63eae1090f4c23677e0') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lsof/PKGBUILD b/lsof/PKGBUILD new file mode 100644 index 0000000..63ed63e --- /dev/null +++ b/lsof/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=lsof +pkgver=4.93.2 +_debver=4.93.2 +_debrel=dfsg-1.1 +pkgrel=1 +pkgdesc='Lists open files for running Unix processes' +url='https://github.com/lsof-org/lsof' +arch=('i686' 'x86_64') +license=('zlib') +depends=('glibc' 'libtirpc') +makedepends=('quilt') +source=(https://github.com/lsof-org/lsof/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/l/lsof/lsof_$_debver+$_debrel.debian.tar.xz + license.txt) +sha512sums=('3c4a4d503391b1a648a08a4947c2e72a9629b169eddf50738b16a16a82f2a26967e4db2902e4a9157de5a73ae638db48e392117ffbd591e9fafd6b1725cd01a0' + '9106067582de54d7dda83a72fc58fd98efeecd35ed938682d4b92341593e6fda7c7d4fe73ba4d5dbdf2077b3e8de52528cb64760d2813fc839edfc8b6b2227d4' + '3bdbc8f213e9bdba946636498d21486e2b79d8ae44a45b284b4dff8875e76f992ab0977e3ed510525a8f74203028acb6b15315fda963666012874be4ce4fdd93') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -i 's|/\* #define\tHASSECURITY\t1 \*/|#define\tHASSECURITY\t1|' dialects/linux/machine.h + sed -i "s|.so ./version|.ds VN ${pkgver}|" -i Lsof.8 +} + +build() { + cd ${pkgname}-${pkgver} + + ./Configure -n linux + make CC="cc ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" +} + +package() { + cd ${pkgname}-${pkgver} + + install -Dm 755 lsof -t "${pkgdir}"/usr/bin + install -Dm 644 Lsof.8 "${pkgdir}"/usr/share/man/man8/lsof.8 + install -Dm 644 "${srcdir}"/license.txt \ + "${pkgdir}"/usr/share/licenses/lsof/license.txt +} + diff --git a/lsof/license.txt b/lsof/license.txt new file mode 100644 index 0000000..30d3a3c --- /dev/null +++ b/lsof/license.txt @@ -0,0 +1,27 @@ +Copyright 2002 Purdue Research Foundation, West Lafayette, +Indiana 47907. All rights reserved. + +Written by Victor A. Abell + +This software is not subject to any license of the American +Telephone and Telegraph Company or the Regents of the +University of California. + +Permission is granted to anyone to use this software for +any purpose on any computer system, and to alter it and +redistribute it freely, subject to the following +restrictions: + +1. Neither the authors nor Purdue University are responsible + for any consequences of the use of this software. + +2. The origin of this software must not be misrepresented, + either by explicit claim or by omission. Credit to the + authors and Purdue University must appear in documentation + and sources. + +3. Altered versions must be plainly marked as such, and must + not be misrepresented as being the original software. + +4. This notice may not be removed or altered. + diff --git a/ltris/PKGBUILD b/ltris/PKGBUILD new file mode 100644 index 0000000..27b59e9 --- /dev/null +++ b/ltris/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=ltris +pkgver=1.3.2 +pkgrel=2 +pkgdesc="A puzzle game where you have a bowl with blocks falling down" +arch=('i686' 'x86_64') +url='https://lgames.sourceforge.net/index.php?project=LTris' +license=('GPL-2') +depends=('sdl_mixer') +makedepends=('gettext-tiny') +backup=('var/games/ltris.hscr') +install=$pkgname.install +groups=('games') +source=("https://downloads.sourceforge.net/lgames/${pkgname}-${pkgver}.tar.gz" + "$pkgname.desktop") +sha512sums=('537d75f34b6cb19f340277f3cc0b4a9a8ad39cd8704ac82c31a768d8c16331846513856421a1e1f1fc82a0b2b83ba6bb096bc5269a8b2eca891faaf9a07c9fef' + '90a207067270c341d47fcb861fa880d1a1a336d84089e1a918e4cac45e7b74ab408c63dd94f7c79f9c85a57e626f20bfb4a3b62f7347fc737234e20bab39bba2') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + autoreconf -vfi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datarootdir=/usr/share/games \ + --localstatedir=/var/games + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR=${pkgdir} install + + mv "${pkgdir}"/usr/share/games/{applications,icons,locale} "${pkgdir}"/usr/share + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname + + rm "${pkgdir}"/usr/share/applications/* + install -Dm644 "${srcdir}"/$pkgname.desktop "${pkgdir}"/usr/share/applications/$pkgname.desktop + + rm -rf "${pkgdir}"/usr/share/icons + install -d ${pkgdir}/usr/share/pixmaps + install -m644 icons/ltris48.xpm ${pkgdir}/usr/share/pixmaps/${pkgname}.xpm + chmod 775 ${pkgdir}/var/games +} diff --git a/ltris/ltris.desktop b/ltris/ltris.desktop new file mode 100644 index 0000000..54f9be2 --- /dev/null +++ b/ltris/ltris.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=LTris +Comment=A tetris clone with nice graphics. +Exec=ltris +Icon=ltris +Type=Application +Categories=Game; diff --git a/ltris/ltris.install b/ltris/ltris.install new file mode 100644 index 0000000..7a32b53 --- /dev/null +++ b/ltris/ltris.install @@ -0,0 +1,4 @@ +post_install() { + chown root:games /var/games/ltris.hscr + chmod -R 775 /var/games/ltris.hscr +} diff --git a/ltris2/PKGBUILD b/ltris2/PKGBUILD new file mode 100644 index 0000000..1aac0d4 --- /dev/null +++ b/ltris2/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=ltris2 +pkgver=2.0.3 +pkgrel=1 +pkgdesc="Scalable 16:9 remake of LTris" +arch=('i686' 'x86_64') +url='https://lgames.sourceforge.net/index.php?project=LTris' +license=('GPL-3') +depends=('sdl2_mixer' 'sdl2_image' 'sdl2_ttf') +backup=('var/games/ltris2.hscr') +install=$pkgname.install +groups=('games') +source=("https://downloads.sourceforge.net/lgames/${pkgname}-${pkgver}.tar.gz") +sha512sums=('db5e478d16b40103ae5beda8ce88f7b0aa36d4d67c57e3149a96a07b8d885deff03a8f91c964f4fb0c557224c0abcfaa7a36a2d3cde04b6f4a115df4a3d5991f') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datarootdir=/usr/share/games \ + --localstatedir=/var/games + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR=${pkgdir} install + mv "${pkgdir}"/usr/share/games/{applications,icons,locale} "${pkgdir}"/usr/share + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/ltris2/ltris2.install b/ltris2/ltris2.install new file mode 100644 index 0000000..beb874f --- /dev/null +++ b/ltris2/ltris2.install @@ -0,0 +1,4 @@ +post_install() { + chown root:games /var/games/ltris2.hscr + chmod -R 775 /var/games/ltris2.hscr +} diff --git a/lua-dbi/PKGBUILD b/lua-dbi/PKGBUILD new file mode 100644 index 0000000..7ec8976 --- /dev/null +++ b/lua-dbi/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgbase=lua-dbi +_realpkgname=luadbi +pkgname=('lua51-dbi' 'lua52-dbi' 'lua-dbi') +pkgver=0.7.2 +pkgrel=2 +pkgdesc="Database interface library for Lua" +arch=('i686' 'x86_64') +url='https://github.com/mwild1/luadbi' +license=('Expat') +makedepends=('sqlite3' 'postgresql' 'lua' 'lua51' 'lua52') +optdepends=('sqlite3: sqlite3 Support' + 'postgresql-libs: postgresql Support') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/mwild1/luadbi/archive/v$pkgver.tar.gz" + "remove-mariadb.patch") +sha512sums=('891f99cbc8f1b5327ef820641a1608abf41410f2f28584b975cc3cf65154b9bebf6f1b9ca7d1818b9c965738ad700dd17ae042dfd2a7146cf755871ebae535b9' + '53811c430a647228981fcc07e02c79bf122824d4db61543b5add7893e5b9b24e2abc55a23d0e825d97ac952a57b15de6e80328795a9b1735e65633f1baf32e85') + +prepare() { + mv "$srcdir"/$_realpkgname-$pkgver "$srcdir"/$_realpkgname + cd "$srcdir"/$_realpkgname + patch -Np1 -i ${srcdir}/remove-mariadb.patch + + cp -r "$srcdir"/$_realpkgname "$srcdir"/$_realpkgname-51 + cp -r "$srcdir"/$_realpkgname "$srcdir"/$_realpkgname-52 +} + +build() { + cd "$srcdir/$_realpkgname-51" + make free LUA_V=5.1 + + cd "$srcdir/$_realpkgname-52" + make free LUA_V=5.2 + + cd "$srcdir/$_realpkgname" + make free LUA_V=5.3 +} + +package_lua51-dbi() { + cd "$srcdir/$_realpkgname-51" + make install_free DESTDIR="$pkgdir" LUA_V=5.1 + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_lua52-dbi() { + cd "$srcdir/$_realpkgname-52" + make install_free DESTDIR="$pkgdir" LUA_V=5.2 + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_lua-dbi() { + cd "$srcdir/$_realpkgname" + make install_free DESTDIR="$pkgdir" LUA_V=5.3 + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/lua-dbi/remove-mariadb.patch b/lua-dbi/remove-mariadb.patch new file mode 100644 index 0000000..128843c --- /dev/null +++ b/lua-dbi/remove-mariadb.patch @@ -0,0 +1,19 @@ +--- a/Makefile 2019-01-14 10:39:17.000000000 +0100 ++++ b/Makefile 2024-09-18 02:36:47.369633397 +0200 +@@ -49,7 +49,7 @@ + DB2_OBJS = $(OBJS) build/dbd_db2_main.o build/dbd_db2_connection.o build/dbd_db2_statement.o + ORACLE_OBJS = $(OBJS) build/dbd_oracle_main.o build/dbd_oracle_connection.o build/dbd_oracle_statement.o + +-free: mysql psql sqlite3 ++free: psql sqlite3 + + all: mysql psql sqlite3 db2 oracle + +@@ -130,6 +130,6 @@ + install_oracle: oracle install_lua + $(INSTALL_PROGRAM) -D $(DBDORACLE) $(DESTDIR)$(LUA_CDIR)/$(DBDORACLE) + +-install_free: install_lua install_mysql install_psql install_sqlite3 ++install_free: install_lua install_psql install_sqlite3 + + install_all: install_lua install_mysql install_psql install_sqlite3 install_db2 install_oracle diff --git a/lua-expat/PKGBUILD b/lua-expat/PKGBUILD new file mode 100644 index 0000000..065351d --- /dev/null +++ b/lua-expat/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgbase=luaexpat +pkgname=('lua-expat' 'lua51-expat' 'lua52-expat') +pkgver=1.3.0 +_debver=1.3.0 +_debrel=4 +pkgrel=1 +pkgdesc='SAX XML parser based on the Expat library' +arch=('i686' 'x86_64') +url='http://matthewwild.co.uk/projects/luaexpat/' +license=('Expat') +depends=('expat') +makedepends=('gcc' 'lua' 'lua51' 'lua52' 'quilt') +source=("https://deb.debian.org/debian/pool/main/l/lua-expat/lua-expat_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/l/lua-expat/lua-expat_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('4fe2455dfe73fca6b94e3e52e602980b44a44c30054fa4d830fe5627fb8dc23a887e21055e3db7c026366fae3b8240242f74ed9775bf6da212be5f752bf0caf8' + 'a03a1c6cf94bd40359bef8f15a2b5cbae31e3381bf75f181db22bcba58baa8160182fc642c068884001cd6ab548cece0cbf023d81f1ec6161159a83737ef9d93') + +prepare() { + mv lua-expat-$pkgver $pkgbase-$pkgver + cd "$srcdir"/$pkgbase-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd .. + cp -a $pkgbase-$pkgver $pkgbase-$pkgver-51 + cp -a $pkgbase-$pkgver $pkgbase-$pkgver-52 +} + +build() { + # 5.1 + cd "$srcdir"/$pkgbase-$pkgver-51 + make LUA_V=5.1 COMMON_CFLAGS="$CPPFLAGS -fPIC" + + # 5.2 + cd "$srcdir"/$pkgbase-$pkgver-52 + make LUA_V=5.2 COMMON_CFLAGS="$CPPFLAGS -fPIC" + + # 5.3 + cd "$srcdir"/$pkgbase-$pkgver + make LUA_V=5.3 COMMON_CFLAGS="$CPPFLAGS -fPIC" +} + +package_lua51-expat() { + replaces=('luaexpat') + conflicts=('luaexpat') + + cd $pkgbase-$pkgver-51 + make LUA_V=5.1 DESTDIR="$pkgdir" install + install -Dm0644 doc/us/license.html "$pkgdir/usr/share/licenses/$pkgname/license.html" +} + +package_lua52-expat() { + cd $pkgbase-$pkgver-52 + make LUA_V=5.2 DESTDIR="$pkgdir" install + install -Dm0644 doc/us/license.html "$pkgdir/usr/share/licenses/$pkgname/license.html" +} + +package_lua-expat() { + cd $pkgbase-$pkgver + make LUA_V=5.3 DESTDIR="$pkgdir" install + install -Dm0644 doc/us/license.html "$pkgdir/usr/share/licenses/$pkgname/license.html" +} diff --git a/lua-filesystem/LICENSE b/lua-filesystem/LICENSE new file mode 100644 index 0000000..53f2abe --- /dev/null +++ b/lua-filesystem/LICENSE @@ -0,0 +1,22 @@ +Copyright (C) 2004-2007 The Kepler Project. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/lua-filesystem/PKGBUILD b/lua-filesystem/PKGBUILD new file mode 100644 index 0000000..48116be --- /dev/null +++ b/lua-filesystem/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgbase=lua-filesystem +pkgname=(lua-filesystem lua51-filesystem lua52-filesystem) +pkgver=1.8.0 +_tag=${pkgver//./_} +pkgrel=1 +pkgdesc='File System Library for the Lua Programming Language' +arch=('i686' 'x86_64') +url='http://keplerproject.github.io/luafilesystem/' +license=('Expat') +makedepends=('lua' 'lua51' 'lua52') +source=("$pkgbase-${_tag}.tar.gz::https://github.com/keplerproject/luafilesystem/archive/v${_tag}.tar.gz") +sha512sums=('79d964f13ae43716281dc8521d2f128b22f2261234c443e242b857cfdf621e208bdf4512f8ba710baa113e9b3b71e2544609de65e2c483f569c243a5cf058247') + +build() { + cp -a luafilesystem-${_tag} luafilesystem-${_tag}-51 + make -C luafilesystem-${_tag}-51 PREFIX=/usr LIB_OPTION="-shared ${LDFLAGS}" LUA_VERSION=5.1 + + cp -a luafilesystem-${_tag} luafilesystem-${_tag}-52 + make -C luafilesystem-${_tag}-52 PREFIX=/usr LIB_OPTION="-shared ${LDFLAGS}" LUA_VERSION=5.2 + + make -C luafilesystem-${_tag} PREFIX=/usr LIB_OPTION="-shared ${LDFLAGS}" LUA_VERSION=5.3 +} + +package_lua-filesystem() { + cd luafilesystem-${_tag} + make DESTDIR="$pkgdir" PREFIX=/usr LUA_VERSION=5.3 install + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} + +package_lua51-filesystem() { + cd luafilesystem-${_tag}-51 + make DESTDIR="$pkgdir" PREFIX=/usr LUA_VERSION=5.1 install + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} + +package_lua52-filesystem() { + cd luafilesystem-${_tag}-52 + make DESTDIR="$pkgdir" PREFIX=/usr LUA_VERSION=5.2 install + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/lua-lgi/PKGBUILD b/lua-lgi/PKGBUILD new file mode 100644 index 0000000..7604234 --- /dev/null +++ b/lua-lgi/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=lua-lgi +pkgbasename=lgi +pkgver=0.9.2 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Lua bindings for gobject using gobject-introspection library" +url='https://github.com/pavouk/lgi' +arch=('i686' 'x86_64') +license=('Expat') +depends=('glibc' 'glib2' 'libffi' 'lua' 'gobject-introspection-runtime') +makedepends=('gobject-introspection' 'quilt') +source=("${pkgbasename}-${pkgver}.tar.gz::https://github.com/pavouk/lgi/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/l/lua-lgi/lua-lgi_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('755a96b78530f42da6d4e2664f8e37cb07a356419e7e6448003c3f841c9d98ad18b851715d9eb203ea7eb27b13ec46223fa8a1c90a99fd12960ce85b0a695335' + 'bbdd2828ad5ffe27002dc07c472710b9978f3c2df3619c75b219f970b6a6d1a3e0d497e0162c18dcae263a4fc664b5de16511133398ca0ada37b4180447cf4cd') + +prepare() { + cd ${pkgbasename}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgbasename}-${pkgver} + CFLAGS="$CFLAGS -I/usr/include/lua5.3" make +} + +package() { + cd ${pkgbasename}-${pkgver} + make \ + LUA_LIBDIR=/usr/lib/lua/5.3 \ + LUA_SHAREDIR=/usr/share/lua/5.3 \ + DESTDIR="${pkgdir}/" install + + install -Dm 755 tools/dump-typelib.lua "${pkgdir}/usr/bin/dump-typelib" + + install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 docs/* -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 samples/*.lua -t "${pkgdir}/usr/share/${pkgname}/samples" + install -Dm 644 samples/gtk-demo/* -t "${pkgdir}/usr/share/${pkgname}/samples/gtk-demo" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/lua-lpeg/LICENSE b/lua-lpeg/LICENSE new file mode 100644 index 0000000..2c50ef1 --- /dev/null +++ b/lua-lpeg/LICENSE @@ -0,0 +1,7 @@ +Copyright © 2008 Lua.org, PUC-Rio. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/lua-lpeg/PKGBUILD b/lua-lpeg/PKGBUILD new file mode 100644 index 0000000..473b410 --- /dev/null +++ b/lua-lpeg/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgbase=lpeg +pkgname=(lua-lpeg lua51-lpeg lua52-lpeg) +pkgver=1.0.2 +pkgrel=1 +arch=('i686' 'x86_64') +url='http://www.inf.puc-rio.br/~roberto/lpeg' +license=('Expat') +makedepends=('lua' 'lua51' 'lua52') +source=("http://www.inf.puc-rio.br/~roberto/$pkgbase/$pkgbase-$pkgver.tar.gz" + 'LICENSE') +sha512sums=('110527ddf9f8e5e8a80ef0ae8847c8ba8cd2597dba3bfe2865cba9af60daafbb885f21e74231952f5ab793d021e050b482066a821c6954d52090a5eae77e9814' + 'f4c04e8a6bdbc737e04672f7751fcfb709e34c87df69ddfada0b0e22480f5ffd7daf21f266699e5b2955ff781f5a4aa574a614646896d12c994bc7b9282b0f67') + +prepare() { + sed 's/^CFLAGS =/CFLAGS +=/' -i $pkgbase-$pkgver/makefile + sed 's/^COPT =/# COPT =/' -i $pkgbase-$pkgver/makefile + + cp -r $pkgbase-$pkgver $pkgbase-$pkgver-51 + cp -r $pkgbase-$pkgver $pkgbase-$pkgver-52 +} + +build() { + cd $pkgbase-$pkgver + make LUADIR=/usr/include + + cd "$srcdir"/$pkgbase-$pkgver-51 + make LUADIR=/usr/include/lua5.1 + + cd "$srcdir"/$pkgbase-$pkgver-52 + make LUADIR=/usr/include/lua5.2 +} + +package_lua51-lpeg() { + pkgdesc='Pattern-matching library for Lua 5.1' + depends=('lua51') + + cd $pkgbase-$pkgver-51 + install -Dm755 $pkgbase.so "$pkgdir"/usr/lib/lua/5.1/$pkgbase.so + install -Dm644 re.lua "$pkgdir"/usr/share/lua/5.1/re.lua + install -Dm644 ../LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} + +package_lua52-lpeg() { + pkgdesc='Pattern-matching library for Lua 5.2' + depends=('lua52') + + cd $pkgbase-$pkgver-52 + install -Dm755 $pkgbase.so "$pkgdir"/usr/lib/lua/5.2/$pkgbase.so + install -Dm644 re.lua "$pkgdir"/usr/share/lua/5.2/re.lua + install -Dm644 ../LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} + +package_lua-lpeg() { + pkgdesc='Pattern-matching library for Lua 5.3' + depends=('lua') + + cd $pkgbase-$pkgver + install -Dm755 $pkgbase.so "$pkgdir"/usr/lib/lua/5.3/$pkgbase.so + install -Dm644 re.lua "$pkgdir"/usr/share/lua/5.3/re.lua + install -Dm644 ../LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/lua-mpack/PKGBUILD b/lua-mpack/PKGBUILD new file mode 100644 index 0000000..ab010c3 --- /dev/null +++ b/lua-mpack/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgbase=lua-mpack +pkgname=(lua51-mpack lua52-mpack lua-mpack) +pkgver=1.0.7 +pkgrel=1 +pkgdesc="libmpack lua binding" +arch=('i686' 'x86_64') +url='https://github.com/libmpack/libmpack-lua' +license=('Expat') +depends=('libmpack') +makedepends=('lua51' 'lua52' 'lua') +source=("libmpack-lua-${pkgver}.tar.gz::https://github.com/libmpack/libmpack-lua/archive/${pkgver}.tar.gz") +sha512sums=('301eb78ca22a75bcabc61eebf6d67f6e5a2d3535d34c0ab6e034495e5bdd0571842397a8f36d42abbdfacf240860f807c93e3ace8ed42543e2322914d84c1a36') + +build() { + cd "libmpack-lua-${pkgver}" + + gcc -O2 -fPIC -DMPACK_USE_SYSTEM -I/usr/include/lua5.1 -c lmpack.c -o lmpack.o + gcc -shared -lmpack -o mpack.so.5.1 lmpack.o + + gcc -O2 -fPIC -DMPACK_USE_SYSTEM -I/usr/include/lua5.2 -c lmpack.c -o lmpack.o + gcc -shared -lmpack -o mpack.so.5.2 lmpack.o + + gcc -O2 -fPIC -DMPACK_USE_SYSTEM -I/usr/include -c lmpack.c -o lmpack.o + gcc -shared -lmpack -o mpack.so.5.3 lmpack.o +} + +package_lua51-mpack() { + pkgdesc='Simple implementation of msgpack in C Lua 5.1' + depends+=('lua51') + + cd "libmpack-lua-${pkgver}" + install -Dm755 mpack.so.5.1 "${pkgdir}/usr/lib/lua/5.1/mpack.so" + install -Dm644 LICENSE-MIT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_lua52-mpack() { + pkgdesc='Simple implementation of msgpack in C Lua 5.2' + depends+=('lua52') + + cd "libmpack-lua-${pkgver}" + install -Dm755 mpack.so.5.2 "${pkgdir}/usr/lib/lua/5.2/mpack.so" + install -Dm644 LICENSE-MIT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_lua-mpack() { + pkgdesc='Simple implementation of msgpack in C Lua 5.3' + depends+=('lua') + + cd "libmpack-lua-${pkgver}" + install -Dm755 mpack.so.5.3 "${pkgdir}/usr/lib/lua/5.3/mpack.so" + install -Dm644 LICENSE-MIT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/lua-penlight/PKGBUILD b/lua-penlight/PKGBUILD new file mode 100644 index 0000000..fccfb7c --- /dev/null +++ b/lua-penlight/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgbase=penlight +pkgname=('lua-penlight') +pkgver=1.3.2 +pkgrel=1 +pkgdesc='Lua libraries focusing on input data handling' +arch=('any') +url='https://github.com/stevedonovan/penlight' +license=('Expat') +depends=('lua' 'lua-filesystem') +source=("$pkgname-$pkgver.tar.gz::https://github.com/stevedonovan/penlight/archive/$pkgver.tar.gz") +sha512sums=('2d9ded6c8d29385ddebbb712626c6ee2989e6a0228e02a33eb1be663e916004e50b08933a25798f3e153dc0d0f4feddce9c397e6b6b86198a11d0b169ac3afae') + +check() { + cd Penlight-$pkgver + export LUA_PATH="$PWD/lua/?/init.lua;$PWD/lua/?.lua;$(lua -e 'print(package.path)')" + lua run.lua +} + +package_lua-penlight() { + cd Penlight-$pkgver + install -dm755 "$pkgdir/usr/share/lua/5.3/pl" + install -m644 lua/pl/* "$pkgdir/usr/share/lua/5.3/pl" + # copy docs + install -dm755 "$pkgdir/usr/share/doc/$pkgname/"{,manual,examples} + install -m644 CONTRIBUTING.md CHANGES.md README.md "$pkgdir/usr/share/doc/$pkgname" + install -m644 doc/manual/* "$pkgdir/usr/share/doc/$pkgname/manual" + install -m644 examples/* "$pkgdir/usr/share/doc/$pkgname/examples" + # copy license + install -Dm644 LICENSE.md -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/lua-sec/PKGBUILD b/lua-sec/PKGBUILD new file mode 100644 index 0000000..5f255b1 --- /dev/null +++ b/lua-sec/PKGBUILD @@ -0,0 +1,82 @@ +# Maintainer: Jesus E. + +pkgbase=luasec +pkgname=('lua-sec' 'lua51-sec' 'lua52-sec') +epoch=1 +pkgver=1.0 +_debver=1.0 +_debrel=1 +pkgrel=1 +pkgdesc='Lua bindings to provide TLS/SSL communication' +arch=('i686' 'x86_64') +url='https://github.com/brunoos/luasec/wiki' +license=('Expat') +makedepends=('lua51' 'lua51-socket' 'lua52' 'lua52-socket' 'lua' 'lua-socket' 'quilt') +depends=('libressl') +source=("https://deb.debian.org/debian/pool/main/l/lua-sec/lua-sec_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/l/lua-sec/lua-sec_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('70e81291b71111fb4976477d1c8ddbdaace17f017476b4e74b0ed88498e9e016d4ece1658f7fcce30f21aecab8dcf3734ce620940f61f2c70efb911c09a95bb9' + '5691f5bd75320e77cc3d27f512c09bc69a71289c7227d21af87dac9d7c854cf556f78a2465cdfa1269f63bf43fe9032ae62c209687af873bd93d5c3f2893dacd') + +prepare() { + mv ${pkgbase}-${pkgver} ${pkgbase} + cd ${pkgbase} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd .. + cp -a ${pkgbase} ${pkgbase}-51 + cp -a ${pkgbase} ${pkgbase}-52 +} + +build() { + cd "$srcdir"/${pkgbase}-51 + MYCFLAGS="$CFLAGS -fPIC" MYLDFLAGS="$LDFLAGS -shared" \ + make linux INC_PATH=-I/usr/include/lua5.1 + + cd "$srcdir"/${pkgbase}-52 + MYCFLAGS="$CFLAGS -fPIC" MYLDFLAGS="$LDFLAGS -shared" \ + make linux INC_PATH=-I/usr/include/lua5.2 + + cd "$srcdir"/${pkgbase} + MYCFLAGS="$CFLAGS -fPIC" MYLDFLAGS="$LDFLAGS -shared" \ + make linux +} + +package_lua51-sec() { + pkgdesc="$pkgdesc for Lua 5.1" + depends+=('lua51-socket') + conflicts=('luasec') + replaces=('luasec') + + cd ${pkgbase}-51 + make LUACPATH="$pkgdir/usr/lib/lua/5.1" LUAPATH="$pkgdir/usr/share/lua/5.1" install + install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_lua52-sec() { + pkgdesc="$pkgdesc for Lua 5.2" + depends+=('lua52-socket') + + cd ${pkgbase}-52 + make LUACPATH="$pkgdir/usr/lib/lua/5.2" LUAPATH="$pkgdir/usr/share/lua/5.2" install + install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_lua-sec() { + pkgdesc="$pkgdesc for Lua 5.3" + depends+=('lua-socket') + + cd ${pkgbase} + make LUACPATH="$pkgdir/usr/lib/lua/5.3" LUAPATH="$pkgdir/usr/share/lua/5.3" install + install -Dm644 "LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/lua-socket/PKGBUILD b/lua-socket/PKGBUILD new file mode 100644 index 0000000..3a9c7dd --- /dev/null +++ b/lua-socket/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgbase=luasocket +pkgname=('lua-socket' 'lua51-socket' 'lua52-socket') +pkgver=3.0~rc1+git+ac3201d +_debver=3.0~rc1+git+ac3201d +_debrel=4 +pkgrel=1 +pkgdesc='Networking support library for the Lua language' +arch=('i686' 'x86_64') +url='https://github.com/diegonehab/luasocket' +license=('Expat') +makedepends=('lua' 'lua51' 'lua52' 'quilt') +source=("https://deb.debian.org/debian/pool/main/l/luasocket/luasocket_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/l/luasocket/luasocket_${_debver}-${_debrel}.debian.tar.xz" + "fix-library.patch") +sha512sums=('c34848f35c605cea700d67f2ebc4447deb58262090891651ff5793db6278152d6b902d6c1860f747d6380d3ecf365f1df6809f6b0e364257b93decbd3533462c' + 'a5c78dd5189086b431bd13f04980fd9e5c39524455b84817c5193a8cc8af0352b468a70912cbfe8998b7b6a8756056675b2fd262a001dcf2443d23a033370b0f' + 'b9bc7860dccaf6a5baf47e7b35a15071649c0b103f39ca83664631af4c811e5d381c02cfb3284c1c5619ba420126724609a4317161855381d3d969790bbdf0de') + +prepare() { + mv ${pkgbase}-${pkgver} ${pkgbase} + cd ${pkgbase} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # additional fixes + patch -Np1 -i ../fix-library.patch + + cd .. + cp -a ${pkgbase} ${pkgbase}-51 + cp -a ${pkgbase} ${pkgbase}-52 +} + +build() { + cd "$srcdir"/${pkgbase}-51 + MYCFLAGS="$CFLAGS" MYLDFLAGS=$LDFLAGS make LUAV=5.1 linux + + cd "$srcdir"/${pkgbase}-52 + MYCFLAGS="$CFLAGS" MYLDFLAGS=$LDFLAGS make LUAV=5.2 linux + + cd "$srcdir"/${pkgbase} + MYCFLAGS="$CFLAGS" MYLDFLAGS=$LDFLAGS make LUAV=5.3 linux +} + +package_lua51-socket() { + replaces=('luasocket') + conflicts=('luasocket') + + cd ${pkgbase}-51 + make DESTDIR="$pkgdir" LUAV=5.1 prefix=/usr install-unix + install -D -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_lua52-socket() { + cd ${pkgbase}-52 + make DESTDIR="$pkgdir" LUAV=5.2 prefix=/usr install-unix + install -D -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_lua-socket() { + cd ${pkgbase} + make DESTDIR="$pkgdir" LUAV=5.3 prefix=/usr install-unix + install -D -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/lua-socket/fix-library.patch b/lua-socket/fix-library.patch new file mode 100644 index 0000000..bd24d74 --- /dev/null +++ b/lua-socket/fix-library.patch @@ -0,0 +1,133 @@ +--- a/src/makefile 2016-12-18 22:18:47.000000000 +0100 ++++ b/src/makefile 2021-08-28 12:17:53.127463418 +0200 +@@ -35,7 +35,7 @@ + # LUAINC_macosx: + # /opt/local/include + LUAINC_macosx_base?=/opt/local/include +-LUAINC_macosx?=$(LUAINC_macosx_base)/lua/$(LUAV) ++LUAINC_macosx?=$(LUAINC_macosx_base)/lua/$(LUAV) $(LUAINC_macosx_base)/lua$(LUAV) + # FIXME default should this default to fink or to macports? + # What happens when more than one Lua version is installed? + LUAPREFIX_macosx?=/opt/local +@@ -48,7 +48,7 @@ + # /usr/local/include/lua$(LUAV) + # where lua headers are found for linux builds + LUAINC_linux_base?=/usr/include +-LUAINC_linux?=$(LUAINC_linux_base)/lua/$(LUAV) ++LUAINC_linux?=$(LUAINC_linux_base)/lua/$(LUAV) $(LUAINC_linux_base)/lua$(LUAV) + LUAPREFIX_linux?=/usr/local + CDIR_linux?=lib/lua/$(LUAV) + LDIR_linux?=share/lua/$(LUAV) +@@ -57,7 +57,7 @@ + # /usr/local/include/lua$(LUAV) + # where lua headers are found for freebsd builds + LUAINC_freebsd_base?=/usr/local/include/ +-LUAINC_freebsd?=$(LUAINC_freebsd_base)/lua$(LUAV) ++LUAINC_freebsd?=$(LUAINC_freebsd_base)/lua/$(LUAV) $(LUAINC_freebsd_base)/lua$(LUAV) + LUAPREFIX_freebsd?=/usr/local/ + CDIR_freebsd?=lib/lua/$(LUAV) + LDIR_freebsd?=share/lua/$(LUAV) +@@ -66,7 +66,7 @@ + # LUAINC_mingw: + # /opt/local/include + LUAINC_mingw_base?=/usr/include +-LUAINC_mingw?=$(LUAINC_mingw_base)/lua/$(LUAV) ++LUAINC_mingw?=$(LUAINC_mingw_base)/lua/$(LUAV) $(LUAINC_mingw_base)/lua$(LUAV) + LUALIB_mingw_base?=/usr/bin + LUALIB_mingw?=$(LUALIB_mingw_base)/lua/$(LUAV)/lua$(subst .,,$(LUAV)).dll + LUAPREFIX_mingw?=/usr +@@ -78,7 +78,7 @@ + # LUALIB_win32: + # where lua headers and libraries are found for win32 builds + LUAPREFIX_win32?= +-LUAINC_win32?=$(LUAPREFIX_win32)/include/lua/$(LUAV) ++LUAINC_win32?=$(LUAPREFIX_win32)/include/lua/$(LUAV) $(LUAPREFIX_win32)/include/lua$(LUAV) + PLATFORM_win32?=Release + CDIR_win32?=bin/lua/$(LUAV)/$(PLATFORM_win32) + LDIR_win32?=bin/lua/$(LUAV)/$(PLATFORM_win32)/lua +@@ -88,7 +88,7 @@ + + # LUAINC_solaris: + LUAINC_solaris_base?=/usr/include +-LUAINC_solaris?=$(LUAINC_solaris_base)/lua/$(LUAV) ++LUAINC_solaris?=$(LUAINC_solaris_base)/lua/$(LUAV) $(LUAINC_solaris_base)/lua$(LUAV) + LUAPREFIX_solaris?=/usr/local + CDIR_solaris?=lib/lua/$(LUAV) + LDIR_solaris?=share/lua/$(LUAV) +@@ -153,7 +153,7 @@ + -DLUASOCKET_API='__attribute__((visibility("default")))' \ + -DUNIX_API='__attribute__((visibility("default")))' \ + -DMIME_API='__attribute__((visibility("default")))' +-CFLAGS_macosx= -I$(LUAINC) $(DEF) -Wall -O2 -fno-common \ ++CFLAGS_macosx=$(LUAINC:%=-I%) $(DEF) -Wall -O2 -fno-common \ + -fvisibility=hidden + LDFLAGS_macosx= -bundle -undefined dynamic_lookup -o + LD_macosx= export MACOSX_DEPLOYMENT_TARGET="10.3"; gcc +@@ -169,7 +169,7 @@ + -DLUASOCKET_API='__attribute__((visibility("default")))' \ + -DUNIX_API='__attribute__((visibility("default")))' \ + -DMIME_API='__attribute__((visibility("default")))' +-CFLAGS_linux= -I$(LUAINC) $(DEF) -Wall -Wshadow -Wextra \ ++CFLAGS_linux=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra \ + -Wimplicit -O2 -ggdb3 -fpic -fvisibility=hidden + LDFLAGS_linux=-O -shared -fpic -o + LD_linux=gcc +@@ -181,11 +181,11 @@ + SO_freebsd=so + O_freebsd=o + CC_freebsd=gcc +-DEF_freebsd=-DLUASOCKET_$(DEBUG) \ ++DEF_freebsd=-DLUASOCKET_$(DEBUG) -DUNIX_HAS_SUN_LEN \ + -DLUASOCKET_API='__attribute__((visibility("default")))' \ + -DUNIX_API='__attribute__((visibility("default")))' \ + -DMIME_API='__attribute__((visibility("default")))' +-CFLAGS_freebsd= -I$(LUAINC) $(DEF) -Wall -Wshadow -Wextra \ ++CFLAGS_freebsd=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra \ + -Wimplicit -O2 -ggdb3 -fpic -fvisibility=hidden + LDFLAGS_freebsd=-O -shared -fpic -o + LD_freebsd=gcc +@@ -201,7 +201,7 @@ + -DLUASOCKET_API='__attribute__((visibility("default")))' \ + -DUNIX_API='__attribute__((visibility("default")))' \ + -DMIME_API='__attribute__((visibility("default")))' +-CFLAGS_solaris=-I$(LUAINC) $(DEF) -Wall -Wshadow -Wextra \ ++CFLAGS_solaris=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra \ + -Wimplicit -O2 -ggdb3 -fpic -fvisibility=hidden + LDFLAGS_solaris=-lnsl -lsocket -lresolv -O -shared -fpic -o + LD_solaris=gcc +@@ -216,7 +216,7 @@ + DEF_mingw= -DLUASOCKET_INET_PTON -DLUASOCKET_$(DEBUG) \ + -DWINVER=0x0501 -DLUASOCKET_API='__declspec(dllexport)' \ + -DMIME_API='__declspec(dllexport)' +-CFLAGS_mingw= -I$(LUAINC) $(DEF) -Wall -O2 -fno-common \ ++CFLAGS_mingw=$(LUAINC:%=-I%) $(DEF) -Wall -O2 -fno-common \ + -fvisibility=hidden + LDFLAGS_mingw= $(LUALIB) -shared -Wl,-s -lws2_32 -o + LD_mingw=gcc +@@ -233,7 +233,7 @@ + //D "LUASOCKET_API=__declspec(dllexport)" //D "_CRT_SECURE_NO_WARNINGS" \ + //D "_WINDLL" //D "MIME_API=__declspec(dllexport)" \ + //D "LUASOCKET_$(DEBUG)" +-CFLAGS_win32=//I "$(LUAINC)" $(DEF) //O2 //Ot //MD //W3 //nologo ++CFLAGS_win32=$(LUAINC:%=//I "%") $(DEF) //O2 //Ot //MD //W3 //nologo + LDFLAGS_win32= //nologo //link //NOLOGO //DLL //INCREMENTAL:NO \ + //MANIFEST //MANIFESTFILE:"intermediate.manifest" \ + //MANIFESTUAC:"level='asInvoker' uiAccess='false'" \ +@@ -360,7 +360,7 @@ + + mingw: + $(MAKE) all PLAT=mingw +- ++ + solaris: + $(MAKE) all-unix PLAT=solaris + +@@ -386,7 +386,7 @@ + $(SERIAL_SO): $(SERIAL_OBJS) + $(LD) $(SERIAL_OBJS) $(LDFLAGS)$@ + +-install: ++install: + $(INSTALL_DIR) $(INSTALL_TOP_LDIR) + $(INSTALL_DATA) $(TO_TOP_LDIR) $(INSTALL_TOP_LDIR) + $(INSTALL_DIR) $(INSTALL_SOCKET_LDIR) diff --git a/lua/LICENSE b/lua/LICENSE new file mode 100644 index 0000000..c575433 --- /dev/null +++ b/lua/LICENSE @@ -0,0 +1,30 @@ +License + +Lua is free software distributed under the terms of the MIT license +reproduced below; it may be used for any purpose, including commercial +purposes, at absolutely no cost without having to ask us. The only +requirement is that if you do use Lua, then you should give us credit +by including the appropriate copyright notice somewhere in your +product or its documentation. + + Copyright © 1994–2015 Lua.org, PUC-Rio. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. diff --git a/lua/PKGBUILD b/lua/PKGBUILD new file mode 100644 index 0000000..2dd069f --- /dev/null +++ b/lua/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=lua +pkgver=5.3.5 +_majorver=${pkgver%.*} +pkgrel=1 +pkgdesc='Powerful lightweight programming language designed for extending applications' +arch=('i686' 'x86_64') +url='https://www.lua.org/' +depends=('readline') +license=('Expat') +options=('!emptydirs') +source=(https://www.lua.org/ftp/lua-$pkgver.tar.gz + liblua.so.patch + lua.pc + LICENSE) +sha512sums=('4f9516acc4659dfd0a9e911bfa00c0788f0ad9348e5724fe8fb17aac59e9c0060a64378f82be86f8534e49c6c013e7488ad17321bafcc787831d3d67406bd0f4' + '38fb153c0a12c2f6e93b728072d7c99f1776b9c25e48a06e3b6757a18fd7040002a935db2079723faa5eff86e50e15870257b1c3e69a9443001ac1d200d3d228' + 'a3ae5f5c63a27956a2c69464cf966512be7404aef72d49b0b3b17e35999ceed04ec7be12ef19269f4cac908141b98dd5d16df9c238823fe0c1e068212914657a' + '7177faeef3d7699748d3523d7884f8037fc04be02a51bd3f0590de6ef074f723f2462a6fcc23c7625a7d8667247d62fa2b41cf94d0a8fd3f0df1e4a1b9ed336f') + +prepare() { + cd lua-$pkgver + patch -p1 -i ../liblua.so.patch + + sed "s/%VER%/$_majorver/g;s/%REL%/$pkgver/g" ../lua.pc > lua.pc + + # Lua 5.3.4 has wrong release version in its Makefile. Fix it. + sed "s/^R= \$V.4/R= \$V.5/" -i Makefile +} + +build() { + cd lua-$pkgver + + # quite a lot of packages still use lua 5.1 API, enable 5.1 compat mode + make MYCFLAGS="$CFLAGS -fPIC -DLUA_COMPAT_5_2 -DLUA_COMPAT_5_1" MYLDFLAGS="$LDFLAGS" linux +} + +package() { + cd lua-$pkgver + + make \ + TO_LIB="liblua.a liblua.so liblua.so.$_majorver liblua.so.$pkgver" \ + INSTALL_DATA='cp -d' \ + INSTALL_TOP="$pkgdir"/usr \ + INSTALL_MAN="$pkgdir"/usr/share/man/man1 \ + install + ln -sf /usr/bin/lua "$pkgdir"/usr/bin/lua$_majorver + ln -sf /usr/bin/luac "$pkgdir"/usr/bin/luac$_majorver + ln -sf /usr/lib/liblua.so.$pkgver "$pkgdir"/usr/lib/liblua$_majorver.so + + install -Dm644 lua.pc "$pkgdir"/usr/lib/pkgconfig/${pkgname}53.pc + ln -sf ${pkgname}53.pc "$pkgdir"/usr/lib/pkgconfig/${pkgname}.pc + ln -sf ${pkgname}53.pc "$pkgdir"/usr/lib/pkgconfig/${pkgname}5.3.pc + ln -sf ${pkgname}53.pc "$pkgdir"/usr/lib/pkgconfig/${pkgname}-5.3.pc + + install -d "$pkgdir"/usr/share/doc/$pkgname + install -m644 doc/*.{gif,png,css,html} "$pkgdir"/usr/share/doc/$pkgname + install -Dm644 ../LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/lua/liblua.so.patch b/lua/liblua.so.patch new file mode 100644 index 0000000..f9e24f3 --- /dev/null +++ b/lua/liblua.so.patch @@ -0,0 +1,60 @@ +diff --git a/Makefile b/Makefile +index 7fa91c8..dccf485 100644 +--- a/Makefile ++++ b/Makefile +@@ -52,7 +52,7 @@ R= $V.0 + all: $(PLAT) + + $(PLATS) clean: +- cd src && $(MAKE) $@ ++ cd src && $(MAKE) $@ V=$(V) R=$(R) + + test: dummy + src/lua -v +diff --git a/src/Makefile b/src/Makefile +index 2e7a412..fa5769f 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -29,6 +29,7 @@ MYOBJS= + PLATS= aix bsd c89 freebsd generic linux macosx mingw posix solaris + + LUA_A= liblua.a ++LUA_SO= liblua.so + CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \ + lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \ + ltm.o lundump.o lvm.o lzio.o +@@ -43,7 +44,7 @@ LUAC_T= luac + LUAC_O= luac.o + + ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O) +-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) ++ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO) + ALL_A= $(LUA_A) + + # Targets start here. +@@ -59,6 +60,12 @@ $(LUA_A): $(BASE_O) + $(AR) $@ $(BASE_O) + $(RANLIB) $@ + ++$(LUA_SO): $(CORE_O) $(LIB_O) ++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS) ++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V) ++ ln -sf $(LUA_SO).$(R) $(LUA_SO) ++ ++ + $(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) + +diff --git a/src/luaconf.h b/src/luaconf.h +index fd28d21..e2662cc 100644 +--- a/src/luaconf.h ++++ b/src/luaconf.h +@@ -175,7 +175,7 @@ + + #else /* }{ */ + +-#define LUA_ROOT "/usr/local/" ++#define LUA_ROOT "/usr/" + #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" + #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" + #define LUA_PATH_DEFAULT \ diff --git a/lua/lua.pc b/lua/lua.pc new file mode 100644 index 0000000..388708a --- /dev/null +++ b/lua/lua.pc @@ -0,0 +1,20 @@ +V=%VER% +R=%REL% + +prefix=/usr +INSTALL_BIN=${prefix}/bin +INSTALL_INC=${prefix}/include +INSTALL_LIB=${prefix}/lib +INSTALL_MAN=${prefix}/man/man1 +INSTALL_LMOD=${prefix}/share/lua/${V} +INSTALL_CMOD=${prefix}/lib/lua/${V} +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: Lua +Description: An Extensible Extension Language +Version: ${R} +Requires: +Libs: -L${libdir} -llua -lm +Cflags: -I${includedir} diff --git a/lua51/PKGBUILD b/lua51/PKGBUILD new file mode 100644 index 0000000..fbf4d0c --- /dev/null +++ b/lua51/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=lua51 +pkgver=5.1.5 +pkgrel=1 +pkgdesc='Powerful lightweight programming language designed for extending applications' +arch=('i686' 'x86_64') +url='https://www.lua.org/' +depends=('readline') +license=('Expat') +options=('!makeflags' '!emptydirs') +source=(https://www.lua.org/ftp/lua-$pkgver.tar.gz + lua-arch.patch + lua-5.1-cflags.diff) +sha512sums=('0142fefcbd13afcd9b201403592aa60620011cc8e8559d4d2db2f92739d18186860989f48caa45830ff4f99bfc7483287fd3ff3a16d4dec928e2767ce4d542a9' + '7678986a9c5310a81c260cde0124d14f5c2dffebf0bc61a257ec1e39f63b5ec0bc2a6adf5c39cdbc45ba4594487f46bfafd20cb334ae965f3379c244b338fa00' + 'cd135a2e6583ec0b059133b4383ccecb4d8c7ac668fc22be0ef37dc7ac55e82e9afe52bc7c0aa39f40fdbf30a1657d7426fce0418d0a26d22f1058c2647d1a67') + +prepare() { + cd lua-$pkgver + + patch -p1 -i ../lua-arch.patch + patch -p1 -i ../lua-5.1-cflags.diff + + sed -e 's:llua:llua5.1:' -e 's:/include:/include/lua5.1:' -i etc/lua.pc + sed -r -e '/^LUA_(SO|A|T)=/ s/lua/lua5.1/' -e '/^LUAC_T=/ s/luac/luac5.1/' -i src/Makefile +} + +build() { + cd lua-$pkgver + + export CFLAGS="$CFLAGS -fPIC" + make MYCFLAGS="$CFLAGS" MYLDFLAGS="$LDFLAGS" linux +} + +package() { + cd lua-$pkgver + + make \ + TO_BIN='lua5.1 luac5.1' \ + TO_LIB="liblua5.1.a liblua5.1.so liblua5.1.so.5.1 liblua5.1.so.$pkgver" \ + INSTALL_DATA='cp -d' \ + INSTALL_TOP="$pkgdir"/usr \ + INSTALL_INC="$pkgdir"/usr/include/lua5.1 \ + INSTALL_MAN="$pkgdir"/usr/share/man/man1 \ + install + + install -Dm644 etc/lua.pc "$pkgdir"/usr/lib/pkgconfig/lua51.pc + ln -sf lua51.pc "$pkgdir"/usr/lib/pkgconfig/lua5.1.pc + ln -sf lua51.pc "$pkgdir"/usr/lib/pkgconfig/lua-5.1.pc + + install -d "$pkgdir"/usr/share/doc/$pkgname + install -m644 doc/*.{gif,png,css,html} "$pkgdir"/usr/share/doc/$pkgname + install -Dm644 COPYRIGHT -t "$pkgdir"/usr/share/licenses/$pkgname + + ln -s liblua5.1.so "$pkgdir"/usr/lib/liblua.so.5.1 + ln -s liblua5.1.so "$pkgdir"/usr/lib/liblua.so.$pkgver + + cd "$pkgdir"/usr/share/man/man1 + mv lua.1 lua5.1.1 + mv luac.1 luac5.1.1 +} diff --git a/lua51/lua-arch.patch b/lua51/lua-arch.patch new file mode 100644 index 0000000..d8650c3 --- /dev/null +++ b/lua51/lua-arch.patch @@ -0,0 +1,66 @@ +diff -ur lua-5.1.4/etc/lua.pc lua-5.1.4-new/etc/lua.pc +--- lua-5.1.4/etc/lua.pc 2008-08-08 14:46:11.000000000 +0200 ++++ lua-5.1.4-new/etc/lua.pc 2012-02-23 18:25:34.000000000 +0100 +@@ -8,6 +8,6 @@ + + # grep '^INSTALL_.*=' ../Makefile | sed 's/INSTALL_TOP/prefix/' +-prefix= /usr/local ++prefix= /usr + INSTALL_BIN= ${prefix}/bin + INSTALL_INC= ${prefix}/include + INSTALL_LIB= ${prefix}/lib +diff -ur lua-5.1.4/src/luaconf.h lua-5.1.4-new/src/luaconf.h +--- lua-5.1.4/src/luaconf.h 2008-02-11 17:25:08.000000000 +0100 ++++ lua-5.1.4-new/src/luaconf.h 2012-02-23 18:25:34.000000000 +0100 +@@ -94,7 +94,7 @@ + ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" + + #else +-#define LUA_ROOT "/usr/local/" ++#define LUA_ROOT "/usr/" + #define LUA_LDIR LUA_ROOT "share/lua/5.1/" + #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" + #define LUA_PATH_DEFAULT \ +diff -ur lua-5.1.4/src/Makefile lua-5.1.4-new/src/Makefile +--- lua-5.1.4/src/Makefile 2008-01-19 20:37:58.000000000 +0100 ++++ lua-5.1.4-new/src/Makefile 2012-02-23 18:26:43.000000000 +0100 +@@ -23,6 +23,7 @@ + PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris + + LUA_A= liblua.a ++LUA_SO= liblua.so + CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \ + lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \ + lundump.o lvm.o lzio.o +@@ -36,7 +37,7 @@ + LUAC_O= luac.o print.o + + ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O) +-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) ++ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T) + ALL_A= $(LUA_A) + + default: $(PLAT) +@@ -51,6 +52,11 @@ + $(AR) $@ $? + $(RANLIB) $@ + ++$(LUA_SO): $(CORE_O) $(LIB_O) ++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS) ++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V) ++ ln -sf $(LUA_SO).$(R) $(LUA_SO) ++ + $(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) + +--- lua-5.1.4/Makefile 2008-08-12 02:40:48.000000000 +0200 ++++ lua-5.1.4-new/Makefile 2012-02-23 19:06:32.000000000 +0100 +@@ -53,7 +53,7 @@ + all: $(PLAT) + + $(PLATS) clean: +- cd src && $(MAKE) $@ ++ cd src && $(MAKE) $@ V=$(V) R=$(R) + + test: dummy + src/lua test/hello.lua diff --git a/lua52/LICENSE b/lua52/LICENSE new file mode 100644 index 0000000..3cb20c8 --- /dev/null +++ b/lua52/LICENSE @@ -0,0 +1,30 @@ +License + +Lua is free software distributed under the terms of the MIT license +reproduced below; it may be used for any purpose, including commercial +purposes, at absolutely no cost without having to ask us. The only +requirement is that if you do use Lua, then you should give us credit +by including the appropriate copyright notice somewhere in your +product or its documentation. + + Copyright © 1994–2012 Lua.org, PUC-Rio. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. diff --git a/lua52/PKGBUILD b/lua52/PKGBUILD new file mode 100644 index 0000000..bb2efc0 --- /dev/null +++ b/lua52/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=lua52 +pkgver=5.2.4 +pkgrel=1 +pkgdesc='Powerful lightweight programming language designed for extending applications' +arch=('i686' 'x86_64') +url='https://www.lua.org/' +depends=('readline') +license=('Expat') +options=('!emptydirs') +source=(https://www.lua.org/ftp/lua-$pkgver.tar.gz + liblua.so.patch + lua.pc + LICENSE) +sha512sums=('cd77148aba4b707b6c159758b5e8444e04f968092eb98f6b4c405b2fb647e709370d5a8dcf604176101d3407e196a7433b5dcdce4fe9605c76191d3649d61a8c' + 'c764337befe23f98f46252055d7aa67acdbab8831e894962ea0650a1865a9a128058af67bce6b751baf2a499c530129a01a111fafee4a6bdcdaec9bbfc416585' + 'a3ae5f5c63a27956a2c69464cf966512be7404aef72d49b0b3b17e35999ceed04ec7be12ef19269f4cac908141b98dd5d16df9c238823fe0c1e068212914657a' + 'bef221ae96e72d11785ec608ce96fa688ce4e12fecaaadc8c3e38d7d153922f4fdd2cf06a47e9f8840a165d42d9aa31f44c322f5c6c8402e8e31475de4e5893b') + +prepare() { + cd lua-$pkgver + patch -p1 -i ../liblua.so.patch + + sed "s/%VER%/${pkgver%.*}/g;s/%REL%/$pkgver/g" ../lua.pc > lua.pc + sed -e 's:llua:llua5.2:' -e 's:/include:/include/lua5.2:' -i lua.pc + sed -r -e '/^LUA_(SO|A|T)=/ s/lua/lua5.2/' -e '/^LUAC_T=/ s/luac/luac5.2/' -i src/Makefile +} + +build() { + cd lua-$pkgver + make MYCFLAGS="$CFLAGS -fPIC" MYLDFLAGS="$LDFLAGS" linux +} + +package() { + cd lua-$pkgver + + make \ + TO_BIN='lua5.2 luac5.2' \ + TO_LIB="liblua5.2.a liblua5.2.so liblua5.2.so.5.2 liblua5.2.so.$pkgver" \ + INSTALL_DATA='cp -d' \ + INSTALL_TOP="$pkgdir"/usr \ + INSTALL_INC="$pkgdir"/usr/include/lua5.2 \ + INSTALL_MAN="$pkgdir"/usr/share/man/man1 \ + install + + install -Dm644 lua.pc "$pkgdir"/usr/lib/pkgconfig/lua52.pc + ln -sf lua52.pc "$pkgdir"/usr/lib/pkgconfig/lua5.2.pc + ln -sf lua52.pc "$pkgdir"/usr/lib/pkgconfig/lua-5.2.pc + + install -d "$pkgdir"/usr/share/doc/$pkgname + install -m644 doc/*.{gif,png,css,html} "$pkgdir"/usr/share/doc/$pkgname + install -Dm644 ../LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE + + ln -s liblua5.2.so "$pkgdir"/usr/lib/liblua.so.5.2 + ln -s liblua5.2.so "$pkgdir"/usr/lib/liblua.so.$pkgver + + cd "$pkgdir"/usr/share/man/man1 + mv lua.1 lua5.2.1 + mv luac.1 luac5.2.1 +} diff --git a/lua52/liblua.so.patch b/lua52/liblua.so.patch new file mode 100644 index 0000000..92c1f3a --- /dev/null +++ b/lua52/liblua.so.patch @@ -0,0 +1,57 @@ +diff -ru lua-5.2.1/Makefile lua-5.2.1.new/Makefile +--- lua-5.2.1/Makefile 2012-05-17 16:05:54.000000000 +0200 ++++ lua-5.2.1.new/Makefile 2012-09-12 22:39:07.162748096 +0200 +@@ -52,7 +52,7 @@ + all: $(PLAT) + + $(PLATS) clean: +- cd src && $(MAKE) $@ ++ cd src && $(MAKE) $@ V=$(V) R=$(R) + + test: dummy + src/lua -v +diff -ru lua-5.2.1/src/luaconf.h lua-5.2.1.new/src/luaconf.h +--- lua-5.2.1/src/luaconf.h 2012-05-11 16:14:42.000000000 +0200 ++++ lua-5.2.1.new/src/luaconf.h 2012-09-12 22:40:27.986622772 +0200 +@@ -100,7 +100,7 @@ + #else /* }{ */ + + #define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR "/" +-#define LUA_ROOT "/usr/local/" ++#define LUA_ROOT "/usr/" + #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR + #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR + #define LUA_PATH_DEFAULT \ +diff -ru lua-5.2.1/src/Makefile lua-5.2.1.new/src/Makefile +--- lua-5.2.1/src/Makefile 2012-03-09 17:32:16.000000000 +0100 ++++ lua-5.2.1.new/src/Makefile 2012-09-12 22:38:08.591386896 +0200 +@@ -29,6 +29,7 @@ + PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris + + LUA_A= liblua.a ++LUA_SO= liblua.so + CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \ + lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \ + ltm.o lundump.o lvm.o lzio.o +@@ -43,7 +44,7 @@ + LUAC_O= luac.o + + ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O) +-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) ++ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO) + ALL_A= $(LUA_A) + + # Targets start here. +@@ -59,6 +60,12 @@ + $(AR) $@ $(BASE_O) + $(RANLIB) $@ + ++$(LUA_SO): $(CORE_O) $(LIB_O) ++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS) ++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V) ++ ln -sf $(LUA_SO).$(R) $(LUA_SO) ++ ++ + $(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) + diff --git a/lua52/lua.pc b/lua52/lua.pc new file mode 100644 index 0000000..388708a --- /dev/null +++ b/lua52/lua.pc @@ -0,0 +1,20 @@ +V=%VER% +R=%REL% + +prefix=/usr +INSTALL_BIN=${prefix}/bin +INSTALL_INC=${prefix}/include +INSTALL_LIB=${prefix}/lib +INSTALL_MAN=${prefix}/man/man1 +INSTALL_LMOD=${prefix}/share/lua/${V} +INSTALL_CMOD=${prefix}/lib/lua/${V} +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: Lua +Description: An Extensible Extension Language +Version: ${R} +Requires: +Libs: -L${libdir} -llua -lm +Cflags: -I${includedir} diff --git a/luajit-openresty/PKGBUILD b/luajit-openresty/PKGBUILD new file mode 100644 index 0000000..f3ca0b3 --- /dev/null +++ b/luajit-openresty/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=luajit-openresty +_pkgver=2.1-20230410 +pkgver=${_pkgver//-/.} +pkgrel=1 +pkgdesc="Just-in-time compiler for Lua, OpenResty fork" +arch=('i686' 'x86_64') +url='https://github.com/openresty/luajit2' +license=('Expat') +depends=('gcc-libs') +conflicts=('luajit') +provides=("luajit=$pkgver") +_archive="${pkgname}-${pkgver}" +source=("https://github.com/openresty/luajit2/archive/refs/tags/v${_pkgver}/${_archive}.tar.gz") +sha512sums=('b861b4182f4e6814878a9de84ed5a864429a8b9a29f8d1b20b2ec5f42e8883214f3d04ee0e8d7f80e3e58debfedff7a8b6363310b74d926f5cfe7be13ce0892c') + +build() { + cd "luajit2-$_pkgver" + # avoid early stripping + make amalg PREFIX=/usr BUILDMODE=dynamic TARGET_STRIP=" @:" +} + +package() { + cd "luajit2-$_pkgver" + make install DESTDIR="$pkgdir" PREFIX=/usr + install -Dm644 COPYRIGHT -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/luajit/PKGBUILD b/luajit/PKGBUILD new file mode 100644 index 0000000..6292c93 --- /dev/null +++ b/luajit/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=luajit +_pkgname=LuaJIT +pkgver=2.1.0.beta3 +_pkgver=2.1.0-beta3 +pkgrel=1 +_debver=2.1.0~beta3+dfsg +__debver=2.1.0-beta3 +_debrel=5.3 +pkgdesc='Just-in-time compiler and drop-in replacement for Lua 5.1' +arch=(i686 x86_64) +url="https://$pkgname.org/" +license=(Expat) +depends=(gcc-libs) +makedepends=(quilt) +source=(https://$pkgname.org/download/$_pkgname-$_pkgver.tar.gz + https://deb.debian.org/debian/pool/main/l/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('c44e967a0f671ed32b55aee810bc8b3b63737a2d7363b8984ae1949b24f98dbb3f9be7c1e10239fdeb96a3e3c836f606342cbd61838cf9bcadb077443eb5bc12' + '0035b4ec06d75eda6699c56a5a4564504fe3d4d239432b7b4a60373de251f89099cff376d292ba3674d3bfe8faf5395bd152d2158d825d0167434e4024d464e6') + +prepare() { + cd $_pkgname-$_pkgver + if [[ ${_pkgver%.*} = ${__debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $_pkgname-$_pkgver + make amalg PREFIX=/usr +} + +package() { + cd $_pkgname-$_pkgver + + make install DESTDIR="$pkgdir" PREFIX=/usr + + ln -vs $pkgname-$_pkgver $pkgdir/usr/bin/$pkgname + + install -Dm644 COPYRIGHT "$pkgdir/usr/share/licenses/$pkgname/COPYRIGHT" +} + +# vim:set sw=2 et: diff --git a/luakit/PKGBUILD b/luakit/PKGBUILD new file mode 100644 index 0000000..ca4675e --- /dev/null +++ b/luakit/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=luakit +pkgver=2.2.1 +_debver=2.2.1 +_debrel=1 +pkgrel=1 +pkgdesc="Fast, small, webkit based browser framework extensible by Lua" +arch=('i686' 'x86_64') +url='https://luakit.github.io/' +license=('GPL-3') +depends=('lua51-filesystem' 'luajit' 'webkitgtk') +makedepends=('quilt' 'help2man') +backup=('etc/xdg/luakit/rc.lua' + 'etc/xdg/luakit/theme.lua') +source=(https://deb.debian.org/debian/pool/main/l/luakit/${pkgname}_${pkgver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/l/luakit/luakit_${_debver}-${_debrel}.debian.tar.xz + libre.patch) +sha512sums=('9a055c1541f31027805d3da2604d98c0193a9c2874099fc3ab3ef08c645a8e91b8504d1162e86cbd29a5e5e0a3c54b3154299708f864d135d8640bcc3866674b' + '886bd4eab3e5e841534518113824f0a18ddfcdd27f31652d1f926dd5acf864d1e28b40cc7bf219dd92a331983925b9d4ab733a1625ce5daad4d2988331526be1' + '8c72a05473daa8a989fa2367d98112298e895f476bcf1538f97b9b9787e686bcba7b9f0e162ba400e2e10093475a09bfc869e5de52d5a0f55e290bdcb363420c') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # additional fixes to remove unfree references and content + patch -Np1 -i ${srcdir}/libre.patch +} + +build() { + make DEVELOPMENT_PATHS=0 PREFIX=/usr USE_LUAJIT=1 -C ${pkgname}-${pkgver} +} + +package() { + make DESTDIR="${pkgdir}" PREFIX=/usr -C ${pkgname}-${pkgver} install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING.GPLv3" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/luakit/libre.patch b/luakit/libre.patch new file mode 100644 index 0000000..6f1370a --- /dev/null +++ b/luakit/libre.patch @@ -0,0 +1,76 @@ +--- a/doc/luadoc/pages/02-faq.md 2020-09-19 12:55:41.000000000 +0200 ++++ b/doc/luadoc/pages/02-faq.md 2021-11-17 19:00:11.372561403 +0100 +@@ -123,15 +123,6 @@ + + Here are some examples: + +-#### Opening `mailto:` links using GMail +- +- if string.match(string.lower(uri), "^mailto:") then +- local mailto = "https://mail.google.com/mail/?extsrc=mailto&url=%s" +- local w = window.ancestor(v) +- w:new_tab(string.format(mailto, uri)) +- return false +- end +- + #### Opening `mailto:` links using Mutt in `urxvt` + + if string.match(string.lower(uri), "^mailto:") then +--- a/tests/async/test_clib_sqlite3.lua 2020-09-19 12:55:41.000000000 +0200 ++++ b/tests/async/test_clib_sqlite3.lua 2021-11-17 18:56:05.511182595 +0100 +@@ -40,7 +40,7 @@ + assert.is_table(ret) + assert.is_equal(0, #ret) + +- ret = db:exec([[INSERT INTO test VALUES(NULL, "google.com", 1234.45)]]) ++ ret = db:exec([[INSERT INTO test VALUES(NULL, "duckduckgo.com", 1234.45)]]) + assert.is_nil(ret) + + ret = db:exec([[SELECT * FROM test;]]) +--- a/lib/quickmarks.lua 2020-09-19 12:55:41.000000000 +0200 ++++ b/lib/quickmarks.lua 2021-11-17 18:57:29.945090314 +0100 +@@ -107,7 +107,7 @@ + -- Load quickmarks from other sessions + if not qmarks or load_file ~= false then _M.load() end + +- -- Parse uris: "http://forum1.com, google.com, imdb some artist" ++ -- Parse uris: "http://forum1.com, duckduckgo.com, some artist" + if uris and type(uris) == "string" then + uris = lousy.util.string.split(uris, ",%s+") + elseif uris and type(uris) ~= "table" then +--- a/lib/markdown.lua 2020-09-19 12:55:41.000000000 +0200 ++++ b/lib/markdown.lua 2021-11-17 18:58:09.526922217 +0100 +@@ -952,7 +952,7 @@ + return text + end + +--- Handle auto links, i.e. . ++-- Handle auto links, i.e. . + function auto_links(text) + local function link(s) + return add_escape("") .. s .. "" +--- ./lib/window.lua 2021-11-17 19:10:58.902529996 +0100 ++++ ./lib/window.lua 2021-11-17 19:12:46.188808613 +0100 +@@ -832,11 +832,7 @@ + type = "string:", + default = { + duckduckgo = "https://duckduckgo.com/?q=%s", +- github = "https://github.com/search?q=%s", +- google = "https://google.com/search?q=%s", +- imdb = "https://www.imdb.com/find?s=all&q=%s", + wikipedia = "https://en.wikipedia.org/wiki/Special:Search?search=%s", +- debbugs = "https://bugs.debian.org/%s", + default = "https://duckduckgo.com/?q=%s", + }, + desc = "The set of search engine shortcuts.", +--- a/lib/referer_control_wm.lua 2020-09-19 12:55:41.000000000 +0200 ++++ b/lib/referer_control_wm.lua 2021-11-17 18:58:43.588498634 +0100 +@@ -8,7 +8,7 @@ + -- To help mitigate this concern, this module prevents this information + -- from being sent whenever you navigate between two different domains. + -- For example, if you navigate from `https://example.com/test/` to +--- `https://google.com`, no Referer hreader will be sent. If you navigate ++-- `https://duckduckgo.com`, no Referer hreader will be sent. If you navigate + -- from `https://example.com/test/` to `https://example.com/`, however, the + -- Referer header will be sent. This is because some websites depend on + -- this functionality. diff --git a/lugaru/PKGBUILD b/lugaru/PKGBUILD new file mode 100644 index 0000000..e5066d4 --- /dev/null +++ b/lugaru/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=lugaru +pkgver=1.2 +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="A third-person action game featuring a unique close-range combat system" +url='https://osslugaru.gitlab.io' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('sdl2' 'glu' 'libjpeg-turbo' 'libpng' 'openal' 'libvorbis' 'zlib') +makedepends=('cmake' 'quilt') +groups=('games') +source=("https://gitlab.com/osslugaru/lugaru/-/archive/${pkgver}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/l/lugaru/lugaru_${_debver}-${_debrel}.debian.tar.xz" + "$pkgname.png" + "$pkgname.desktop") +sha512sums=('091f588523721617b973d72a26c0cfbeb75fe519707faefd00652cfd770b3be463b61b5c2be3721c644aac2337fa8f8455bc43a461b5a19b4c0e9741b517b9a4' + 'f4b84e7deb50524472e4aef887e4d984e763b2cb8b714408d65d74a5bcab15e989ddac23cb9b1784f4fc5ceb6510cddecb747236bc0ceff12d1ea16676539956' + 'd7dd014e9239473dfffc5c698d29fd515f0e026b75f37febbe9cf1373ea77d6928efe35252667663f43e1eaf0e529941f9d37ba72088fbd1ce76550bd77afdc8' + '5df2da5ddd13d51626797d687ebb92ecc6f5981527342c7d21a8bae6458fcc7f7e360cf3492e18775e30d4f95c55d5be21363a4ba93d9fda3b02ab5482b14fcd') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -S ${pkgname}-${pkgver} \ + -B build \ + -DSYSTEM_INSTALL=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_BINDIR=games \ + -DCMAKE_INSTALL_DATADIR=share/games \ + -DCMAKE_INSTALL_MANDIR=share/man + make -C build +} + +package() { + make -C build DESTDIR="$pkgdir/" install + rm -rf "$pkgdir/usr/share/icons" + + # install pixmap and desktop file + install -Dm644 ${srcdir}/$pkgname.png "$pkgdir"/usr/share/pixmaps/$pkgname.png + install -Dm644 ${srcdir}/$pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop + + # install license + install -Dm644 ${srcdir}/${pkgname}-${pkgver}/COPYING.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/lugaru/lugaru.desktop b/lugaru/lugaru.desktop new file mode 100644 index 0000000..130bbf0 --- /dev/null +++ b/lugaru/lugaru.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Lugaru +GenericName=Lugaru +Comment=Lugaru +Exec=lugaru +Icon=lugaru +StartupNotify=true +Terminal=false +Type=Application +Categories=Application;Game; diff --git a/lugaru/lugaru.png b/lugaru/lugaru.png new file mode 100644 index 0000000000000000000000000000000000000000..f990163ad0d28911f2fbec0a84f986dbaa536e05 GIT binary patch literal 27946 zcmV)aK&roqP)$C z$5y0B0X`T4L`uE{qJ)S96e1A^MDig~5`sy11S3UQCZHG*+HSk6+vTcT_iV^3wfCB1j`1J=|9^}tANt6*$i?L~_93WdjvuOrPul1D z%-0oFMeMWoH9@t$_j`~3y!k!)p07Xq-vyz=Ne{9Bt-v1D86_hmMAm=IK%~<1jI!`jNm{-2wg&=qaQkkWk+)0UEySXhvX}l7jLu8f_D*WM$(F!GfroG z8i;YQ_n{EH#|2N#nQ^;AYazuRsEm2fIFG1;Y9*JI zCsa3xWJH#TED(A`BYL>aB*b+HzEgG`_%oPLtyC@FAVokj&V}rq{PcsDf6phu{as4_ z37_JRzxA_!;pyjly%&(_0#1N?hm?q}$nAkV-54SDOQ|Ng%a z8K56N@(L2a5z21?{brQ+D}s{hP?HuU%LU&4If;KEWZu) zzYX{fsIMXd2eAFi8!}x0Wc#{4Bv=H#G}kW z#vT8?AVfk~;bMmb!LNE^OyukRr**&oU#oLJk{0F1d;RPi>-hLTzJF`+4fpQc#Y?5{ z6KA*X@%Gzq|IxqjKm1RB^2-(gAO8aq>|y@e`$+wR*TMe|NdFqTe?ugoh#jmZkVDL7 z&H_)+@sZR0|Rbz>EUUMMR=yniMR+=FvJ5%`LEIYMl`EP?cOA&U?Dyg0+9M z4|@HrDMkcgnlsm%E#sW&0{EEd`xQw3;qU+5->ZN2Fa4E2{w2o%qJ&>72OqmzZ$S71 zBK~`X#TnAsVQD)+i3mO5Q623j)8X72=zxsYrzks+Xf2^ekl`5Z76_BwV7+d?Cjk>8 zimFFM>}x8mWu0MC5C=L^bq5@R#Zk55@F)rAmF4Ow%kFJ-x+ElT4QtM1tz2$)jC0}E z>5BD<&><8YQ_g?v4}9P6lz;lExBtWc^T+;n{Zc)1p%UcFoB?8Y`T@lKA#mRZ+%Y<# zBII_XtKD*ZOV-uWK6x^{?Ls%}7ML|nW5J9{7k5G^Z6 zL3M+wwC}TQqRfZ{oD2;!B&vF%FPxlymOfsQcNb_WI24y)KW9pkYM7DXO(H&J%Mk6oov`lv406@a~hRlv?OQB*w^gKNF+>{_ptaZ~l?L z@nb)>{ZgDk@O*hPKR$2`wet*9!wRH{O))?I9OJI>F~5n#Ps;C35oRTjhW(L1;9yaD{3F9`-v zzO)!1rjxsf`$1LxLxMX+dZ0t_sP3&kvq0#MfKKEDII-T{d9-B2_sGf8Zf&k;8IXNK z>vik-9U`gK_!-670oSqB?gJq`{?RSV9!^rb@g zUnjEuDGUfMRjaMk8jzf{r|)xIBWYP*=?7`Bj}9Qxs`^ATDL4#7d*HxB)4UIb;Wjj zP0`9UPwe-5=3L0NkaM;SP-^4sl~OCa{mAuZ!^Pzl+i~J*vthg4;+%f(cYXVB`S_RQ zOhUjp6GMKL8N3hvK9S*n6L<1$PHy4k4#G)0WH}-dA%XTF10riXc&Z(k6g$*KLY4{f z9tjRa(d`IxwN62LMEYm&#MBNyH%w40cn+u*{0Y?k+alhJlg6~gb^}ubS;Y=b8{${r4#69` z*No=Tf~8N!(mBBi)QcU=8A3obA)KMiDAx#uN(6Q-09-2p{+KD0(ptX=&YPOao~jm_ zPP!H-#s#36VVGGh6OSM5xxBm}PkX9D(TbM(jF@_J`0_b~n^q;4%x)a5&+#4~0{dyE zi{YMg`M-GniwcU>}{iR=l0(g z?ZH=5Y%8FNilF-m=J9wi2#Bl@3W}iB;bcbD1N&pmN3gPkH&ib@LbR_lnZzs#x(64V zJRKWO*brhS_`B3Hqh+G1Qc9)PV#1PG7BM>caQJc~om*H_t1@T9I@viw2$VVFyB=Zk z)cyxh_r4ci{?;FS>ob4*Q@_#y;3W`Jc<@F4z-uqueen9r5B{q@@*x$5yk7g~ZguZ| z_ji29-_IpKEGp-l-R{CUzkK5(ANj4S^3|v76~oZ;^m4<+#fGYm{eH)8cgb$d?6#iW z9&+A*H&xELuC;z6;upwbjns-}P*K7VNsFEdMWaWnqT5}oBMm&#p>9HSY8pU#CIggK z0=lN{H{z&$-H}kIH@d$>Kq-0+%=jQ^opE)>drvOKGKYv!&d=B!tk)OoB#~!47FG*t zt<3XGagLG;J_OvM^R0?fzgx@r+=ExX{rA7~=Kt{zer4OhK(L4Xg+IRWjc@$=54?2u zPoj&~kC=Hlw=Ue^uZwO+3YF>wFR2~sP0&PYt$yL*S_Fp#xyz1a|*aDH*g zu=oHHd#*M!4Yc{-UotrOuGwG48$0j z<_YKIh%1c4P@Hp!Yg)v6cnliWFgQ|brIbock(44XdSVFHsUoQ8Zxq!ZdH%KU{JlT_ zvw!XH{mLD{rzOTOfzUNmz^c64O{&$0y$^}o}eZU8GAL?>>4LL0BvXLQF*OnWhPm$RM7jpZLi8Px!z~zm8A6`H-La>|@?~ z>j{|^&Mncpr;anZ?^*VNK1HJQTwm|l?=o5ynKL3YRrWU?fY#qzo3}-EZ=3-}?}{F3 zvTMO0?Ps(JO_sjVLeZ;+-`W9}j8rAXfQaG*4!(+754wWjoV%gfM2`o0;Fb=rp|Tc{mj$Js?UY_&^m0Y8l}2a?ADg4yFqG8J$hPw|d((%2ykO8*nP* z`V@52sALNRL9C0=5v5q$*FdRRs7y8%J(L3hMoJcfUsGm9YQ?+I(z#jW4DfsVM2p?} zT5p2taQ}}Tm;u^8MN;Z1dDq%bd(Tycnm177RfYfd^tq3I-^JTM@z?)(1E7>j&@T`G z7w6|cH-rVXR=T=mz3w3h({{&ZyJbHWR0Q#kX_}a(3FnOo0}QP@PtJB*Qwp44Uh?+C zhpbjh?%lb=XFl^b&cS-w@zR4+=B!-&)I*$KadP`bQczF>Q@IvY0;gvuOuLa?u8_R} zJ@GA-H)_`%xR)g!r78&f#^0CLCQ4(Q1(ka6f51^iq@{7!6tq3j_Y8evzq>Xh9R;%a z6GgyDXePY&Yg(Wk-owE%DPlod0p}cD@+^m*%Zp9xj51mSMU`^&KDhgW{JGQTKl-~b ze*PzZ?4OGV@ExJn&u>k8>)j{+SMc+jL!VyRj1!yfhOSHOc6%N@e$2)7mO0PVs+4MV zQ?lSCH_T&iQdP;hFz1N#j+_hoairwTZntOXduk~xmv>opft257+GrRqsoM$6MO67WU&6B53dGhoL4}bnG z>U70=v8R(Oc9%bM%qB%Ec`A(inak@P<2W1GQV`$a!wTnnd+3raV8kI(a8As@<4zFQ zfoqJP3rD=*T*SG6a~!Y==*^f0}jQD!+Vc&f_IJhIb@?l zhj4J^$^iy8n~V1(FVs8|y9M3}KB(ylb#A}Pw{ArMK8*5bZ@u`j*Zx@pAkP!-i{XLJ zudn}mMfU5(fKa)*-m=+^lw6J}^T2bcTK}um_W8j!&JplvwScHvSuU2`y>*8WBAeaF z#npy!%G^0w&~t(AKg&2ip$e2aQ;SlnQdDp$;QN4d0l!}0)(f2P@vg_Y11ky$MNjZT9yd5qaArHNqEt#NAJ2A>6+}KJ`2XzIi{G^PX9Ix~ z?hADR0Nb7Z!>ir+cNRm(&~@ZIlkWKL<rj^!$G>vX}blYwE~6K<_Yrwd$ixZv=9 ziFX4c6>+n*XgF){oZ?-F^8?~yOUv$9rnG7PwJDR%2MZD^RJ;9sY?(qTS|*%SQjB&*4VyUg=Mtrcp9T5m4VVJ@MuiCXKws+#|! zvlqVpm(A&mI9w^aFZhk){z-Y~(bK=E3U^P}#Ndqlpry5As?#RdI-CzU=Nl4#)`DQY zu($5Z%E7$lWZ~(fW6qWBeq_uu(I>hX$lG_B_ScASAWuDuK5}|8aQpU}JGWOXhlKAF ze$nGnkN1fK^^8>PW!4rH4(}4dFU{radqS|ELEQ2ER5Ds8YsW+p2Yny8b-Ex1Pw1u6@lNGD8cG7!xT5^DNC1XhpQxB@#heW;K_RwmBR} zwE+HuPW&f+*@h7HxKcJ>)Hh#T?f;j}K7aD`WW~K(rvx8vz|H4Gm9}XudpXj6KbhV&6c<9C%7aTEo()@GG+jptnG#rFcr{T;ln@3|I-^f_N%0it2P+@GZ*@PSA{6q`fh6Ktq{!)Vpo`Y> zcF7Jdcxms+c#7y9-aE?%&OUc?$P9AC3C;^%AO?>M0q5*V#o%#H8%6=G`I%a)H#Jv; z_Dz5M_KV;AwZAMaz=5-N=nH>rHcu{o?%j*OR8_ct`;6NsE5hL#H_rPRAaFx@ivB_) zlByx-7^tPP+wa)#XPoy8eNXhE^~S=YPxKMW_HB087o^TJEF&VqG-dYVM5&d&kDM%e z*2|vL+iMngPf4pYy8bRH-XX>nJ`6Y)@IK(fK$mW@7@nu=ZWF?S7#4)M!1)ew5$CLz zuOf)39dhu5;PGAv!INU7i=Gr5F+@`I_+Vf#c#n4;?;XJj-nWb(?wLQ9A)>o^bO6CQ zGqJnWddbqVscRaB%{)*mS_@U{b1MAlTQ7anoiExCP%A-e{-Pu1>Gk&H;(FxH>53N~ z++{nCoL^lZU$twu{~0PAQMEeDdqIpS#NbecaU2mXco$jp25`nPQ>)T<9br3CuixTI zo}(KUJh;6ggut}VT<=B{B?JRw_1R)`HsGfOyNNPysdb{(J<5!82_Ni`gGQ7@tp_Wb zYd79%w5w2=@!kln&@AFU2z?jGC6aT8bA?Hk_1)L*9j~A## z(Q2N7TxvV~gVY@w$@QL;`>e$9El&Io0e|$1C4;|cIatEo-!$~{d!JnIxqtT-&)t8( z)n>PMb2ptZCI!Z^>Al8Jtx2&@)DsXMeP!Fv{6Vl!@- zrYp`LZ5X=9-P?&_h#!nlF{mF5Zv+FUFtI~A?&p)`&*~uF3q_J!_B8Rq&;0|)A*uyydyNHn51NF|a8z*k9 zJ48Ie2bO(Lmm-QV3_ZgT@b!XxzTxS+8?LT*lon*p8~dlVGR>8o)oQJRQzax%T=%5Y z6=}61#2#@<(TU333?kO9hL}icX`nD9oKJ{Pco#WYc09PVX6O?>c)An`&H^QP&yWIL z3ZxjU1O$68eV6FF#L#z^sk~_>2fe_1f5bitl-BA}EADW{;*Z^xO(q-RbaV3#e{>D{ zC-1)c?WbP^3Luy+{sqvY=c-QwSa0ia3zBC9xt5{Or_d^yJ+oK$*4Gd^N>1C^r^5M zI-GX|QBv?+D^!ITOfn9|lWH`QONt$Cij-21fnRH3oHBDZGm38|fObJDjZu|~ch$hN zd!|Ft8xYr~SdQt}N?83S7vk>${>5Et+g z%{UP{g14acK^h2jl;!|R(Z1##bjdUH9etNrbRDPb1&g6$(Ixt>qf3bpJkB{|0E0hD z-QKs>&^a7}Xg#u)<}9+?Z_oKK+3Z?5Xgdq6bNHd>-v6(>_W4VI!@(CCM3Ena`WjTk z*=>FM-A7z)FWK+6ELNwy^1=(;zkNb*a^wLT&TMZ+jxX4YwM!{_f(XGmk{8q1%S;T8 zK1FJ2X|;TfP_qeIMz&j-l^JA>zc7 zlC_OUYYAI>7-O&wLG?z+;;@9H+Tr_fw3SJ_JbFk2Vt>5zgwPRVM+n_(G4wz9`FQ}v z9W?G={Pw^9Yi(l38x@Hm)1W8X64Apla0HjP$W{XbgDFdWi0k{mmM_U{L7Kw5S% z7BU*q6}s>H;79(=ul=Q&Kyb$q>R)j9uL?{*0QI)<`QB(t=h%<%GoO9Pe!pcLx8$On zoveBB{vG-*nvFqj*sen$*qb#}f4Ur4^p@7VSZn2|crslIoUDhYtifv8*+U%?UD$vd zQK^W_IB)--GH0Y#LhuYj;_PI}uZ7wy)2b3;34t7*hFwev_e1I}u@k9Z$%i^L!Js*irZ{Ni%~m4Jp{ zB09Q{sBXXKW)G0GZ5owY;QS)6-DSFTNzDV^N1nfTi>u9+pMUpBGgKI7O=G>h76H{O= zCJhJgtnEYEPNi1sgC`WTy4MQZ{mf!0ZH!Eb!4bSbNX#rC=VR%pQjDvp^++Z;=bOJI zAWrZ;90KfnoDcsg@DG16PgwXRn^0WkM(j{uzvzV zy--z6^RLZYq=nR4vRYxvH-~eB&ReSX4lRlk-)M4Sx1X4%f>vRgYO|9$(#! zpqt3iW9VJPHy^{n|KMCJHQukCkDma3;1`-g69MuslKwyZ6~OO=p-t(IhknCMlmaCS zSKE>Ooas|w+E+Bf>3Ye7+h_dT!^cNk^g$B!&XZE03!a0A(qT4n*AO(Ak6`GmG-$E? zA6<;(Tv-ksn{mTDZxJ_uFW|JLMn&sPos>CG%wh&}n%Wj)Lh*!Jj~l&Gnwaz4USG3d zq2w~78GLaRQSioBSl3m_Q>Ka;~IjD+<9S2VE&#JH9Iti1olW7k)1G32PeBZ9#-6tb1oBl3MZY z01xb&>Wu^)Lp%b?X)a82rSGh3s8!irKcUPU#D^wLw>I!V47HZfxkyYyQzbp#b>{eS z9^k%+eD5zv^0na1Ve%~N_tB-W{+{E(%d*YrMN7-X)`E=8b7q_kwR$HbiMmz84k?k}x=8-CuEY+-BZFaA!8i4hY7&=y~1&hUk=#-iZ z^PIWd%{Vb>J0*wrR_D8D*`SmriZyGTRwcH%fm{seg+>WiwF^+SvY#^ZTq!v-&3jzv zkNXJ4r`Dndq`kH-E$Grf3_URk z=shNNlyS~1JJS!gW1;H;$@`<%Kl*3{kx+D#aFmVnae6w7;BmIiF zM)nx6wLV@55-4Ev{3Sm_6e;4NsFKG$3#T|L*E`En$=xvWUchOk^Up456iPL!yq40$ zB$KuKF5tXx?qEyx)12AwM>e~Cn=wrIxM(YDETxN&jk}2Lz>U)|A4VdCHasiZGC~BA zuTd?(`4^JGd~N_Nemi(?hrY8doI18~?e}i|oTrHT&Opt9k!-!OcY*bC!J<#ik<&N< zf77t=3|;I*%pZ_#z2(Uwu$!CZtg(l|IlAbLS5J;*HzVcJ4pnES?T%@?WzG{tXG%4* zrY#2v#`?9EEQH3{2j31sTB$HZ-9_u;0mMi4n@eKZ5WM5@RbjiI={@w(+FVrubu2p9 zf=Ze40nF7S*qd`bg5x1Nv{bXWRTF@;LaxeoKUzk_qdp)Z9MgRWftWf{Fe6LwH-RJ~ zZ7)G>d`vK_8sb&;x4*XukoU4csrzj&0^gz9HeoS0J6E}JvEtjpgvdNs9zDHcH~TgT zYu{CyYh^j~oUWIq`iUGpf`@@wCynlGV8J&|doxZ9$?EEEpDD#W3)3`HRT;XD)8)W2 zRf4bJEp?95p8dFIoOkTU9pgN=B@)V1=C+}$B0eT{Ewu$75wWH!4;vGdRwPcEBaD2xb-}3Lj_&IIhvxboJaVRg_ zy^L*4s;yNanKMQ!h}zgyt^E934_Ob-^I#3p%aOrzA_N~eTd$d>nQaG~u18h#@8$ziOje zK7_``H5}rteauA}>wJ?X#8GNS^Oi1dxp(&#)hkm`I;WIkqvTZ~IH6Bw53B9Tj>T|~ zYe#s@g2tv$RoPF)N|QIbn&y!h$3m&a)Vl7h$-x0HjuZo3=nOB^3{t7bc_TS;0^SE| z$<)U9H&*dwt@Y!;Up7O?Ot7KJ!^iYnA&AJzHf`z7)};{Puv16owtB@#huzlk`23nh z>^U3E{i4-Cjzk#x#A-QEN^W>a2(8b)aWu)%o~#&n+K-t<8wDHZV&i3fV%Ho%sxTzb zl$kD5gm@*fGQOgH+Te5g$0aMJD?2be(NCs<}z`#m!$4HZ>i4T1Oe&J zkmU);3eka^PN8kpAR%;k*P#fHA8)zbRd#c=g$PYspJqF#Mc>n>bd&0v5@r@@XKq?= zgBAx_bDU>(Qz1sja!BNSP~8GC+Ur?F&oViNeo5$hVp9)O*BwXH4$N9groo{K-3x3cwXNNN zDZZ99oO7J6I#Mw5DTY7{p6l(7i|cEql5ugsrzO74Cn%QE=TdB}{6LhovRm4c3Z;_E zOi?2stm|qs4$gnmZ~WH(;Fir~O~kqB$E`qWhT`3bU$FzG8<|=1Pd3 zn5_R!RN~6Bos!A1UT$2pBFv?j?K%d$3oU!7;gSIJT$m>Vg?*n0;+S%_b#5qidP?12 z65W!!CxK;vf4bSSA2VmGo@MXJ)lh#54prfNGZMtw!m5WZKyBq*OVu$tmR;mxlZnw- zyIf{2uCCaRqxJdSZ3qJ{#AXZgwhX`6I38{8axQwLg@X?UNDrHkisHQD5A!c7A5_&h zfFIRbpJf8$MqxL^v!$!9>FMAwE>IHvmGny3bhuZ4@|WfS)!G>R-~HhhE}4^s6Ha4*HDF+Zm4F} z$~2dTiotmZDVjLtTk><>hQq5#*I8|7Q|k`q4Z&675P9Xc=k7Z2=EEJIes_bSEQY{7 zL&?hRmA7(IGATI5tfbHk9&PWxnw$pWI9(+A7`WsR_%qva$5k7e^*$0-&l9^R-a3-|EhIm9j5?@rk6E!`Du5#Rd#S|P>AYB8`Fx+Vkr=CE}{?^-G} zAmxK2S7jV0go-~5+Nwd!g9cv}k|=fmkdu{By@F7S{r3>8T!at~>rjkCNCpJ;nMDcS z-$<(};9Mdt@3LMlxPR*uB=VWZm7jWR$96xFqDR%S8k zEY8&~UJM2v%{0=;x>`Q|>%acrk*fKi2Ku#9Uq`QCJKC-9I_LtD3p$r3MYdE_vz3JE z5E=09jLL?KOIR;6oxhPA%^>2fP4b=?Yz!(oV-FAZFxOV5SP;NC!_|Jmg^m;w`>8a+ zruhbn_1ZClD?5^0P`W#I0N&wan<+?vX|C4e*PF5MQq&eZ9Xj0R!l7~XAqIjk3|_d~ zFS#1GFlEMZ3(dhi7bQhu*++5_%UsRVKQ^H11*57FwsXdb?{s3?4{Y~Oxbh?G&Th74fok1> zLiC{xYTnq!d~?C%HUYcnJQo{bH)T?qaV{LhuVZS@*;1kRmE;TKgR(=@Xm=SI4i>Ufygu|2_h7{5L;Xi_hD{LZJj{~$6mQRY4Kv}=LnC@P#R?fqPA zGehSI4lZ}umO6-~{1{B@7aX@w601ex@;ciTP|jRlU$fgyO!JI5#|!WK8szp@aXqT- zIBHu|z4Of|>JX>LE$6kUO%dtM^wD9yx!6iF+i+5?y{xsqTJrQtuKp(jI)mn~7JLW8 zjcI?LU?;GOFgV-9g+OOnKubl&g3brUX+~@1^0FuTiO7uWyQ2UyB;RK5Fht+X5{LfS zixAaHND5+1;50MknU(9!R;CWoR;#mtyZu-Qp)$>H6V^|N@c}C4zByn48{hK8Xy(jZ zD^=}5#Wv9cHtsf;LRE7WU%mT~$b=S{b>{ryipS@>wg6H{!ErJ~He)4M;cOYW+!m^~ zArK%%&zvh+g*zu5_fC7BUd=qYvI9TAzT#qY&3>H7HFN)k*I7OPwLIQOR7V@JYh&)- z8`UfgJlA47530^a+aGP`jhPf%LX~M4svi6grK?)Mx~luhU}CGhZhXMOT;6p5X@-)J zWkf@ZzF=d@k^+7etZCcN=*CgY1>^3Nd}{_jw!RdmxspO& zv+ef3wM;y^Fpb;}1ga>(-zaA>1m;{@s@wDQ;ZJermHYS*DK#_A7F4uANL^?K6vwKR z#tm4VtZK~LT&j^Q^OkMC;Q4!Nylfb^J9gv9cFYtt5Ib~%tFbZ_$Eq_U#%`{hE)r8~ z3FoX#3a87SduKhHUE$Hi$Zl`TAwHEw5n}9YXd8XxdT;wz1oVH5KwtPE} zlC}{euwHhohJ-`7+)rFyov?kPPak7j&x)`me4xVW)W&t~B_X5ES+c6`O+3Y{V`u-zMZ@Zyp zhYx*o3R&Hrb44liA&_(B@uPR}Y*;7773Il(L+l^N}y0wZHR21($UMrPqcDHKG zk4_es0?VP}^dxb*?u@YL0;^_ojseE1jAQ2Ve9dP*lbFjH`|@cfEktLl)KapEol=_2 ziZYc-(Lm>0t!&F)r@7*saryFyr&N~_djLj@%hMhKQWG0+O|8}t|C6Nxcgz&&;JJc zeqilv4l%SjLc{=Ep6yU;uBeKYcJl`v-NAx3QO*R0oZEU@J_{Eu~b} zgVpiWc`mOi4^BH`aO`)LJ_tD~mpfDZmc4Nf<6L=kx#w!TXPhRcdF08(IhWTP#5?-M zJzn|HZ|0>}UnPYDxKr~;R%Nb*xtOj{bv|wzGhi5OcHp1~sJ1Rm8zE%QD)DmEDV#){ z$nBx`cSBtEx7VV}VTknJ=vlBdd;BE_X00k!95E)kWPd|OXroH%1xfIHcbht1lXDN{ zD>#4aAK@7p{h=o}Fu3SEQ&w_?>z%bzT@t3fc?$aIxU-5}UI+G5<vyu@8x!wH}l!1?V0rMlZINtG%)sB2$K`fJd40 zVM^N8$A}6S*Lybm<~#K8^zw=)=NE_sQ%~cX*S_)_xPR{yPcgEn>3iNe`sm56g|=Nt z_ACy|B1D_;gndpmIhY0jYi$#|)l-_)PHP3t3s>bV)Xi=^&3Q3Th3$|yJB8C#TW$~n zDVSn4^pTL7&tGlYHL0_~%wS8CqKbLyn^R>`B47DcU&l}WgA4Y%hlra%;B;vc?QY7% zg=YwktFiFTg>ZlEdHyW&AQtE zl4@ldGuvHewTP@z&yWJ%H}$T~*(Gn=Fl+~6#RX6F9_Q>9h}bl4h>?irZnxy+*FVOm ze)4azpElG|Nx|Bp{jRnVa3OhNvoCBq$GR8ptvye#l&5*7s-xDiEpZO^W>ksZG1dCa zB$1;_k#Rq<-#jLl={O7`0#W3+%+V&2ye(nUN}em1PapB*olkLV897<^Tx>R6TyN-N zqU&y^m{y&UOo*eZFwPYpge0E1O$P}=(Q3;w`^d%B6^}12ao&@Lf&G3<>TmJ>ul#xz z!$7TOL+fI&y@-c(^J;&YL@kx-tk+*Hl|>(^H8aoIyobeZw`JjgI5j*WLd}YVgO%Mb zLCGbBP!<7U0bayALg$DSi3FmKsva|3I`BDH}{OZ_3bwhqN2OjJl-+Ysf7sGiq8 z@HISn^bU{S{0T~)IKPBG+63*KP0h+}FJsQ|?p4N#aJuw7*?9KZT(qSa=@YzXnyVd3 zP_DN(olEc@>Yn}8Bj#}jLyyolbOdQz#;hDzOJ%L#v>*BG&-^5z?l>I+DLUSK>oMar zbGBaD4nHw)m9&KXL3u==;F+(=CtAFDRwb^-IQiqN?Ym z4}6T5U;7GD^3bq|pmx~J8dlnd(R`3)ng@Yen2Ixsmx?+eXEA4X2zY_eW(i8Iwq~Nq z-+3(Ld6uem5rD*8kYM|1yAzn=@kw z?PkJqx#EK#{uukKci26BlX1>Gx!SQ>45%8Lx6igJbvv08=;6f-B%@coV?UYAJElq> zQ+qJN*@;=TFE=BL!R+8e8rfbxqL#Vcq=Kp^XC?pt)xCMJXJ>ie`F)qO{Fb|P_w80| z>DJQP&|*Lqo7fZE@x+daiH+kWE|2YU#uKne)g)6HyIh`{l#^7Z3XHLxxCUozHbVji z40d3!4Yq(7gk%I}(bnp2wbb3W@Amus&h~E4{P8^J{I0OX4#uZS1xO&S?t9MrKJW8< zzn`yE)=Bdh<2-YN_jb?Y%tL>TwIX13Ws39LdwBff4l-*oF8f#;vA5;DUiM0lB_u!2d!7$AC{ zHa1=0^WJK}6HsIbip9ER!L9bLbA0>BWp)!4$g^TQ_<+y_1Rr2j$SooaUn2zHqxc_) z0G1~wwu0qyg^B?PF`|G)k+YyuX~CW)Zsg=Li0KimN&{$v)c=iv*VTA-Pq2bAL5 zgq3}UjIiqz>Xy|&yOoDA{9?Ee(6$aCMre%zQk97N_C=PU5<{w|u|&PtVR)m~NJwxY zB88=qGev?65it=`ba?3gzd~E>;Oc`1p@?w$v2Apn$NK67<54d78;wz6F)9qQT*D}X z>7;-b?Ss~qZEUqe-FZ~4$L_r1u*lIE&^emL9!ObSa{Lw?yXrW`rA1*d;BA7?L=tgN zjzlMD3yly0jEsgEf?=Q#1~;|>A(PuyjI0U{fo}()V!3AaV*j7j zypzNv;*Lll!ygt=f--5KksGT)iV#DBGK5T9K%kn`xA(1P{7nLMW}wA^Y(Y(gPk=4~ z#aqO#uTd4uyeo4HXFX!f5JCi{G$?wYG)Rk&-)7K-5IdlT?O!V(g$S(z%Cf-9`eEdw zRk&scuBwq)U}dxdNm7~$8he^2VuzL@{K7X0gs;FMca8y$0f>K z;$xLUnHw0zZQml->=Kf~l87BlO&8Gmh^lI_sA|MS$jd2Q1lp!WB8w}oycsv#cpb*M zL7DL}LW11W#J&Gkvj8?J9-f61F%n^H3<)|$bSc7Q4A4w5A*r-4riNu`+GyAwJ7Y8w z85jV8r=igTog+$69e|KQWfmZdpe%}!LSAqOPiut`32hfKE+c$QFqS)3NvIk+S$5(` z;{`&-&MY%_x-Q__8=nb_77u*(>yc*;(|m+n8SxTkL&|5Oh&)p`^Wdj&__7l?aOA4NgAgepCei3=jT8emH_u^x zoT1D#w)Pg-+}VTD3gb~BVop95vrMBbxT9zV2EpoD*5kEZK-YQHb%#aW!gT>zF+ork zT{DO49E#B@o_5RaxOC$HvP`=8TCS*pV0xdUumfC3P@*d^hSz{J?`WB&fw%1Ae*AnI zcmdD=1sc4)N~>j%6_L|WsDVI)8Wa~G*8-J?_JrUFO&#DIFL)QY+0nU(x@E>qiUc3h z05#}A34Dd=b#Q<(3MN;WOvczadNqz;e>?K&K{Q>5i@Ob+=gFLp0bO8LZrwU~pI~I9 zJDo5iz{iNrd3eu9MUN%SGmTMcFe)>QM+MHDIfeT^@j)zhFG|h8Wi&gDGZclzVz!Ie zEpTupLx_aOH+N7q4aQ~8O)F8=j0=k_d%?1G9hXjz_&ZFA$+o*9)|5 zg9L@cmmbGWH$M&IamKZhh)R2XdQo zm?B2$<{E?a0lGHh$xYX_UH3Aj$SS3v!Au^wfK++-)}s@oX`VBpHO~z49+8@9WR}lH zn`KPDl6*WGKqrZXo+35K%PF#A3g5Mu?QLRSHR8r$Uw!8ZE7K7Uu8x*pmX8<-biw(+ zPFk%oDstqx!J_dZ{^T#S$TJ?e%ywZdkQFNcvD~}JEHbOGbMXQ`f8WP&$*RV|vBvrB z8BRaGiIfr!tWJ?<8Ol7zWSsFopW^@hxXh8~GCPQX4+))*a4w+f0;;BgBZDph)jpcK z$wzqB9p8 zofH@NA@cl$6uI2$w^<@L2bvm`6;OuzjUZ5RP!yo^F(AeYA{Ic##4{+>OS-g%)t0ML zA`VPUvK46_1*a%NQKNw@$AJS!aN=pt!eVwFkDvMiE^N;cBd|7|z{QA1FYMvi(RCcV zY!w%_Tb$dPp>+YPlN_Bdu(`89>pD~|U(xxkO%~xySuywop|yo_5uxn9b)nx3!J!*&d3_qLkWWTxKW=u4yu3P?mgb zWJa?Hh1j<4L&Dyo#n}s6*r`}F;(RB02?@UIFq&@QIWPDgTyy1BU~P>;Ow4&R3P_s0 zg`~tgD8DCm6tl=PrNnJ`QbS+gXx2CO*$hdM{7f`R;FVIm@JR{*3s4tpN^#c$*j6g5 zR3DHChm-(gCeY&%vh@+xR!dCF9LB1l@snqo$HbPWU@0Yd(ey1jcD)^n-^LhO#Hg+4 zW|hLRYi`9Yx1GbsKm0D#ZG)n)hz((i5~FDe9};%wEe@=WkQvQP;gQB+J4M?COh!2h zF=%?R7&pxYsb$AQA*wyP#+x&kp&*xsAr^y3%de88c#736t_vas@{ zGsACE=E$v;!IJdT6ELqF9>1`KGv_a2uj<$YLX5d35S(+EP7mSvFaC#k=}W&0WswOA z9&!!k4xiNuo&bYB(w+tY1Y1NkSMj0=t)^G;n#`amSrx;LBR-=dMVUEkp@;Tn5I%!Q zahJ;s0Okz0e&7~E^ec79;B>nxBPX+NH~1tO8ou*>4)&* zm;8N9CL>Nc>DL8Xl+%psQjuB2fav`+r=}wEPN0>B)-s0Htox@F*fw#U<$@g*>!k~*|+f*E&irxniS46Zv4AnFN2q{8qgTn_`F&P(dPCA2$68*X|!zW)b*95>za9mos^XBpuq zb65rq#a&a*TmzJN{sJ$HD$~v$I4#=0!9aq<#dz=uif}(j z?OLTKN>RtLq&fbR$s_k%KeH}I{gvCc#G%faK4Z0999%bC}6vmE7 zmq0EIgAc0}LKHp#ahHw~1XaTV36kVaqZKBj9Fr06T&?4lsnxt8_jJ>y@p$~=3@6WC zz^TX1V_w%x8_x>1YLP6e&hd=zyaPY{V?T|{FF%G90%8c#tW86xB!T-H*dHe;4j2Mo z<@!ZL;@ec;cJHNL!6$Um_2a%lgb1Dle#I{1-~ys&IT;U|=wYQ5tj5@DrSFI2Rfg_uZKIg+DixSK|a zO;gw3{48u=IE(x4{t&k2HEfna5#YiCyNen`gtckGgA=9D`M^hx;;$kmE&zKyW26M5 zG<;%=d&X%D+|fjjWC=ntk`>^hgPXu_%m1+eMswd8a24@(9tY6}27F%M@KE~z z+)(>tdsrtBxjF{LgqDOC5EGK;NnmslF@*c0^~{J<+I$*Hb&7NWXy`1%c)}vkwP}e- znX%C^655vEsL_aRU1Ft!go4TNf(sYuC8aBh$gRup*di@qPbJ6pK_ zvv(u74&yS%ysA+Y7Kab4Vr^Wa%q%(|;6i}41~CMYJJS=wG*TjHO`?kvgd6b}q9K(v zSca}ajE+l$B<3zHlfEuQoZZ~R{ihzo*>e}*oMV=8ULwm!!yqjxixVeq#>;=?Cvfc8 zl?YvLs^#k<#DLP*2U^Z<7H%lH{`K3wg7-97zk4QelpV2G0BK<_h7boAk+Fu4WFpDX zWcgck35n@uT?*;bQ72fj7oXNjol=^vPq6{ba@2;+8sl+>NCs^iK&gfI5z`pOIn1_h zEs370R}}01C=iUiqJat62QkQfk((W|YB2^(S6A`e7k?i%&p(F8&Yeb#4l9!pE<1cF zHrB={N`o#2bRn=}Mns-UdYywRR=|vd093k@f&duQ!5T_>6iMm`9*mice~I(PV_vm5 zd3F<<+q-a%vxynLWCsRdhzT2)9K%2S$FIQES6>U~I!^Kc@e8NbP+#=XaU?VP6p6#G zB;1N*UIFw!x8^ISsCrrIg&}hg0^&*ny6}Pf4uMi1gvu|Hq>&-gsYK~CCBRHqZd0xc zPAUC8N~!CiI97)`7HPD^66YjVmr=v)^zCj z{EvZ1#Izmh_`-C*Zpg+=YqIi7aS>JE#_W6|); zd(paqzmw1pi1>$3z0h2~!v3qLv<#B!T`S4AaP=PQ*(Qoi;pmY|aLWx>;hHNB$($g< z`-r{=#Wt>Gn@kN~KK7+@@=M#Nb}0ci_LEAZAlXM!kwanDH1ILNSdGlE3A4y7CgTx< zr8VzrB)q^xz_m9%19!aO#mKS@J_NZNiF}**%ug{fm?Fxb?=kvd-JkOjE+qJVW-p81 zD|z~t$ca9(cOJz^L#H+Y2p;IV$P3>__%FB!oq;;Wu~!66RQj4ukKQp;dyt(J`AKC+dRTysex<(4hh zp7GZsYqF-uM0^95{FouJc1+wwHEokHzEv z$?_hr0Ld8Y4I64`4$+WAP6%On?mHh5dhuxBKb((form`#`HDgbNeL;k96SW(4*K9z zi18l&fIKt}v2Xrvkb8h2+VK>CR;VDEg-;5L#-r^x%_34l=OS7k;ax)4MKp~^=OSXD zWgbqCYt{Wr!Jq~`m^%m*15$M8+8Whj3tJb@VRz>OEQ+$95HSnL#;L(~sdd?bXR;5`PVQA!Fi02(a+h9K8ciiptz zP`LK`XW))I?m(WgScOTWB&nZr1=d4i;(*EPS%SLvDM*i?|2?u`mWw$bBkLGM#zu)j z6h8LHz_K_DKEQV#u?+~dNA!aB)cisl*pJ@-seix2GCcc5X%Sk#AIgws3ovKux&(9# zi6F5a_ms`NVBbI{q6sAdPR6RfHv=dkbPi-nRt@oj5K{7p!NGSmLbr#l?ejQ&`Xt6y zp(rfYrlrWBzH9^*U>NzXNDV=zQJPUb-&kwzBzhnD3TRj(Fub%xu-d{Zi?;2sJ#WzY zFql!f+ZGYM$AN=~@!j9|a%^lILI`f?c=knQzYS6!^SbXH?XUH0PQ_rG??PYg^P+ms z-N_h8WNpjb<(P)s=+HHQ z7)&2Nc@nvaxZ>y<3Tx1Gez1stspJc#G&AvxeC_?rJQ0*35nU!Bb!kKml-BahA^}P# zkmoPOh|0NcJmz%(p~Y-bA%wuA8NS=%(8guB^7wJt($g>+PXd@?4$<-pM4uffUw!XU zAV8*j61FW{en^az2?4`MIfUgOysb;2C?oe6F#LSV$o1SBXiG2#XH;qLT2kS&Cw!ck zZ@>90D19)I1HnV7#2~`p5E}=o0+eSReb))vRP0K5#{K#{)58p434N2Uun0u@0SKkY ze{bI*1c!6y&ms60&%N~;96B(DwFW8iR`^u;hD-b`4L1#Ao_NJf(ml(KL6PybbUfyy zQFbmHjEe$AmJLwr5DBdhXj+fGS&hBLVi>JTm4}_(ZJa!Hiiu)FTU)N5S`B<8CHHhz z7K=ecaIWl8WUpT@_~?tdPN2~}^dUsRyNJ$7p(ll-P->YCU^Pr(p>oYe62r+PnKj5q z*#|%Q{(p6LcmY;M(99a$|2d_1K_My)B()4x5#%Y< z{s{R#HYJ9Dz|0z4+ zGG{Nts4$om875_pvB0P&qa33$V+S(obKDiG9py8I~+1P0$G`u~vPtnBm-GCxPT~`Qa6ebBm_)m{r{{9eeU^ zU-W=O1f5=H6iFhImQkzGEL)2yVN_&D zV|`^6ZRb!m4bK|9!|wJ4p@3&Rzwhxa34=_%PXSB9@{97K@L9iP{YF8)aDzugwbCgJ z`+5U?{&I|L_E>hfSbM1@L9MWgQSl1!o<8M6`qL*w16U54dtyrX#owunDc%9aBo9&v zDLGcDWElq>65GX^mRqG&8_={7F>-G^L=p?Lc+vJLRwxp8tU8Af9D;8#-`&LC-Y!lY zJA`9LS5TIA_+s-+53HZ%;;W&H)?25tOd-#BYzs;-8n9xx7>x{yT%*i1R;DFJMTSYi z0@KO3#AK8U5R;QWT<5T;I_%6UKKo-7A%(`MEICp}bOyUSn+VB^CxUArO7sL8w-NX= zUrG5zAk{0F1*EdII8=y^nn4^#l_a8I;Xg18i#>j*UKL zMRrvhdL$g73la5%Kv2Mi%$T?Tjl>YGV4o~E@Z#Cuc<{*afAKbudX-kpvLz^l2zxUNz9ghs9SS)MUj_e+;sESK`q#aqwgu=bmYeqBKAxG|pjjbA|^Vxqzy2=mKGP z-e9($k zZxR9%%7m-OHNsFI3oF-nskeRT_y5-izj&QHp8SGVP!ml(FRRqUt)|&vI;qfVRdbdX`pge zlT`ctT$<^e+{o$w8c8ogNlyf-=PB|qtIuZ9qN3*3E|0b?crvJ>B$vtr5c2;W5?kF} zfMDX|oRWIOldZ8~6Tnm5t<8N3>K#z{DK>fbi=w5F5eb;*1!uMh|VW;O@)JNhY>b8dvpe|A1COC20 z^?~H&YQ6#Fa^;zn?2t7Um`rj^#yN^yL1!BCxyNU}a1QVO(|hpepZIHBcl9wGK6)9P z^G_%;N23yx@kp4!0U^fWx~4Q2!g*d`{op#AM+MLfA%ge%Jf7O|b$V#)`XDA({`+!L zC?wQc$uY;bt0X&tQlfW^gqXDSJeUG*#7xq)5nUGsrg8{zI}u*@;kUi=N$=5-60FwQ zQ+C)Md+0Uy9>4KlzfnQoskIq8eT*hCGT`YQ3tX*+7-5ngnlD3kE- z_F3F;S%yFnuI6(#fh*w7`Jn+swCwKn5v*FsA6lYd`&hcZAXFgn4sfqyXV&8LCokYH zKlLC!bN^|y&f!h({vbjGs)`Hb$#{h0M=!zQgKM1Ui+-Y)M5NIJr4=TVH5@*;!FfHb z!5*%EM7`LPglwAn&lr753nfCNAPQ>vU80Y8oGx*kI&dRRZLEE;NEezC{shGU|>wTdIw49vDeTqYwt$g{s;6-U+ ztb%tDKpO7CL<)N|hsV#&u(iDht2M5@@(9+~rZ~H~i=;FPV{mY##LJA&wU}rlL=Cc!=myPRS&VQ{H5|2-#L#I6O6U!hD0>> zTu?7zlPey#z?W%aNv3|@1-T`$F&C22tc^vEgrqsGED^ot6YswBkuSBj^V-2$Q{c-z ziPG;X(m$e8xU z4E--P3ENH!1~tzu%EHJws8JLaqf&S{B40DY6rMK`ySokMvjr5flgMTk2i8|{?eR;H zBIJt}kR@sO7~ouox~b8&4O-{mTmbR5f~;J_RVQx64cA`}qZBWuysX2=E_*YJIQaqL`o%uYf z*(NqtM@-sufd?msx7Y+GZ1oBwrCIGdDH&Q}t(H5!!RoZYs9=bb7QSALKvhR9>JC-o z*ep64V`VZ%SrjM>i}5JK$|%G7YL4-U-9LHGyU^aeLe+NYTo~pNOy<^DJA4ec-Tr)x z$`U??L4%Nb9e`YwiAXRnd|vl4bO2*sNbyVWeH42+H*UD+5aGJWPF{g@`4EQO!5#|} zV?x^mv`v5u5v`B&*2Q1^)E~ck@5`+#MS?9>$M{N~Q}_K}AG+$cUw)l}`o(3khD4x1 zBY;DblJYE9B89B5ph$3@iydp&LDTH*Vf*}992jR%Dxq##5D`{aM%+D=22W-+oDYK{ zXjEjFj0+g8P-F&5B3Uv4G+C`N8f6HH(9A`*PlUo6nAItCVpkF&fs&R!`ck^oxq!M3 z*sW^J8z(O`w`xgjae29hW7ph>r`>oROUAn}Gbf;#|tSF(h$i@&hT)&5q9SmZv;7VY=2KDZ|BC)xxw2>(j|#G|^fkw;7U(&{1PL zDnKC44iqNNxXfU4gVqN)7Z9{!!kIFtTMlE0;6h3nL8usF51rCtbQNtv0_wKIxr;MA z{OAR2@6HDbnK2ec&MDx|dyK{_c=|JL$7H&~GkFnXE`?>hAY8zvf$-h$4kL>Z+gu(Ugnbo!()RMM)CiT;A1Uh|c%rk}O2{7d-Co=5Kam8}!c z`PDm>#vduAj}Efh zUN6`*9WGql!=vZ6u(>_s0PC_qSrnK~rZ72SR?R^KTz17ZxZ%2MxrlWhl+?0OB`sh6 z+GRu>$+|9-=`MhZia(esNTvBHH&^0zpS0D#aXz5armQb0N{4pZvo+ zx4zQ#Og_Nog~C_!JoK0U$Gz7-|KIU3)_3xnN{dIFBtg@HnYe_V`w`; zwYvk?b{J0&;5je+Zmg{z6m8(XD<5H4$P}0J`{fJ(Lq@Pxee0Naj6Sz8lH?Zj=FZ4R zhZi(Y2tf4Ww~QnWwFK`|aGrkop7;L3yGX$(2zXa{CBjM;D-o0~}+FXj;cAn;6ix9&-lE2AUh@ms z2Qz0DMY)Q6w1%o_P**jGfNP(2J8r)DW)8M=VK8yB*O3*;G#Ekn3fOmXXdlzphd#E3 zf7V_JL_;57IpKRkxK(2PzYh_e4+w#H2TJ%&B6`DDy^cylw^jJ6Uw|+C#lKEU>wlxP zelL`P(MAAOB9asWqRaO$zg zusJ)8>12$R^%Yz?UPE0Ih&*!3_|~=ytVLKh4&Yrv>piN*p|07l-~*#!+m7}0b;FJ( zk|;K1EP#l%YvKI`gpg1*4SY;^`n6BPbtjI&>V#xD2a%G8(uO5mE+Pi;6>5Hwlra5b z5Kf=8HCa|Jh7Z{dVg!Pd9sn_HGRX}j%F*VNpl+qR8a#bG#PF(n-}mbJYgxk-TiDKj zZ7%=-eCC69KJp#^;PpSR6y6L?H}<`MEfmqdn$=M7GOV{D!4jZshLw%0P>fg6xte!^ zF2Ll0zaE=mG+D#ZBMF~>=rs1~gqsg-z+}1T-&>*s~5TrvG z=<_k*=kI;rs~`DV*DsQT4Iq3y&wcNID1KP%c@|@=dAtKL4IIy-3N&&NZjn&l_2c~0qr?`6t zaP&;=P_-SrXXo(VyusGq98KHty;|&3b=#rsq!tKF`ZkJ!xDx7`r9u!%DJm({VnZpUQszKAV$cuu5GsL~)lYx=Eg_VutP@@fKTOuhVH=GPG zB@cqM<}e5!xbxR3_!LpKUhM@qesppQ@lbS9LmUZ$aXjI2f^57%`liUP&qo6w#5Ys{(|2iyv*$#`0plvMWI z6*I}BZ9KY;P-kH{7omWv?l7-8cXz&M&~#k+S9QY~Jt0cP92lNV%VJGS*iw>yts;fs z96BGczBqs;9P{x6wE{;GlsKz;0L;B z>mn!u6o9i|cnpnC$cqB`Xa&2wGnl-@;iFdp#UVsBf-(g%RY2z!a~}~sAtr^Ubx1KW z?}u<9g!FUw{r5XR^7XEp0-jnB^3^_{e9zB);P!v~|NJC~{xh_?vaf`d66~c?1O1A` z=oq1Zm8(%6ybjgg=P<8ZrTRU^qO~-|jb4cLoeo?om+7^2= z-uCOJMe9654AN}j>luBKs(84$P!z!m+rUIyoc5uGJg_E0bJ|WAeFvS?kj*w3dL8&P+ zbpYdh72aoPx(+_XQ$*^Y-}ixE_`o-2)fB9LGEwN)_}u-jpMC$cU;aBkrnLGU05=$I z20B;|tEB{3TSDuST{w1%jcZ?sGoLt#-9-muY82MMhk&MSQMVnMrUfCPjfAS>;AX8^ zIHDu~Wl^=*omZ%u22JO=Z|)^3m6m2z>^G^2x;KfMC&q{(&vC`k!?@|1%kdpI9+T|h zfZjk=H=JYWT;L|S;p1avQXrPu&;<;VK&l794J(%cLXjJ+O__Gy_x%~bSz})BV0Y^z z9OWohHZVDKJ?!KX?5g|=TYK)OKmEtA`sg=my@>QTZU^X}kH7P$Kl{vo%aLPJfYZkYJ;CDy4`JJThzX%$u&kbDn-Z)>lTL6w$SQa10w` zFdY}%Gms!BN;DL9S;oIkn;CSDcLXC)s^EKfFhi$RZ%Q=^MP>)#>tvkckSm$H&}<@Z zcNkB$K9P^E_~#$`{a?KI8@X0Wsi%;If1S_&_-{XT@AF>qd;gRYy*5GpBV`CkODYI= z$F#tO7~6jI+83c*y9O6eehe2M{~st+iy||F!ge|?VYNm~0rSRTQ8l8k=c8s+GV9M; zg{tY`T-+xnr9oeyjhIyxBw;(E>l~~xxc>S_6i!5VxPKYRSaDs@|JhmQapL%H2 zu)|mnBAFnrA4-H|mbxKD10PxlCM>uS$8aoi^BdOcU;4G*d(ZrvvPjB2xi8=w^?dYg zKQRYz=L>%HEq_gff2)DROV^Cd%q1X6+X$r-*47W=!1KNjC$l}wAN?3Ezw}aUtd$t& z8OCJ>BEpe_s}h4wa6Vwsc1ST|UdMr*)B6c~T#W9ARUMh^A@G9X$@_Hl3b?!1SFmMdWzLbM|>45L4fxNm_0r*DNv zsFm3?IezI^|I<5v8{fo7LBlGAZ~AlBTYv1gpZ{ZT{bVBiM;+;&hS$>^k)LU6(pv1vYy);?%2=)|&`J<5=3m>`b zxE~KQy!?Z*S)nJ@Ft8#arSxY?tAF*nH@@eS-|TfsDZv6Qz7@|$-twcLe8G?Z{wqk~ z)s*l`t<)MMy;Ffe!6PY!tuvoNyzntxeF(VuX;v$i&?$7@EdMVz=Lhm_i@(sKROS$h{RnnpxeqTuNPLwGk=42V6*S6!hTvUuq7jJsSpS<}TtgPok(MQIk!M(2nc~R7H57S< zx@|cd*(i+1MkHuX44LdsBE_!bA{SCxTDpJHV_F118^p*-(tBXbH!F*@M97;+AZq}X zpa>6X(yz}l^M=>G`Q7tx^*Rs~?3ah{d~=>Z|Giht0lfD4Kk_?&Snoab%6jMIKg-;? zLq}FRtgRdzGb>a*MtkP)$9;Dw(F0hkmt)+}JAC)~7!~_Q zlw$D*g|MZyd1IdG*Z7#@E=C^f_SwWf^gyRLsDFCtdS(oa(Ys2kcjVUo zr~mTKKf3#G`*$z50K&J!^Vz%KeK&xg{onrQm%qOA>1Sd}KdhlI2}ID85FDXuI;2Fn z^0K2?pH6XcXAiTghL2&`mSapj{*_7JaKlKftT8^oT8|>Lj8e4@DaGMqts8!qLQF$0 zpmPDn7?edWyG+jpP(x}c&+gM8LfQXEO6h#k`oCscz2PnI{gc1Kx67jdn?U$>dj9YK z^3J~k@Txoi*~@=DM*L7p=?B{`-5w*idv|A*^wo1*cH}UQ86^>^Nx+E?n>)L>xUxBnz}c_SUeBmvXbuz58~ouOnm(29}wN@2()j(u(b z)ZNCYKNuDHe|yIVK72pE%^n5y&20pIJdH&tJWmN#Pcv6bq#X7&rIy4qemNj< zEqxbH3$5H3?Ts-H8?8T*=h+9!BLCQb|BJsojlT;IC0P1)e*^YC@A$xnPXjm&;B7B? z_A?Lc?9FeVRrPJohZn>YuL~ibh$-2WdclYE-^Jpc5yw|}!QZh*YYW?J*#E9QANu&cI{^Ma`Qtx4`_`M* z=T&{hqG@h%&fnleJdskmjx-Js(G;KwK%V%O`GSo z%B`K*% + +pkgbase=lumina +pkgname=(lumina-core lumina-core-utils + lumina-archiver lumina-fileinfo lumina-fm + lumina-photo lumina-screenshot + lumina-textedit lumina-calculator) +pkgver=1.6.0 +pkgrel=8 +pkgdesc="Lumina Desktop Environment" +arch=('i686' 'x86_64') +url='https://lumina-desktop.org/' +license=('Modified-BSD') +makedepends=(libxcb libxcursor libxdamage qt-base qt-multimedia qt-svg qt-x11extras qt-xcb-private-headers xcb-util xcb-util-image xcb-util-wm) +source=($pkgbase-$pkgver.tar.gz::https://github.com/lumina-desktop/lumina/archive/refs/tags/v$pkgver.tar.gz + $pkgbase-calculator-$pkgver.tar.gz::https://github.com/lumina-desktop/lumina-calculator/archive/refs/tags/v$pkgver.tar.gz + distributor-logo-dark.svg + distributor-logo-light.svg + libre.patch + boot-splash.patch + remove-xscreensaver-support.patch) +sha512sums=('e923961568ab9cc32206386066daef8cd1fd2db2d5c3e260e5c1da1dcda39a516576418f607cefbe5a1c47d8684591d0e595fb344e7d6aa2859fc3b326e73e30' + 'e4005a3b17ff46a90b07f6dd22c7b2c6156c9c26396aefd33394fa5bbb434437e5361a276868b8e2b8753a17b13604b448094b1c04a34e3360fae4f78a271e37' + '58646a70b7a7586662592e7adafed30a679d5a9b06d3f7e0936b7bab9012cde6d92f413019cbff2e90f1864cc484d5b322c57ec4fb978bfc2a7f304fedbe1d74' + '73220ecc0a67e91dca646a81b34351c1933b110aecc34abe0901b37c525bcfc1cc23f395958308fd88074d43926ebb674de6c2007df1db0e1f3aeb4fe80158ae' + '7f8a7ee6613405a9141d891acf4223b01c2584305f193e5897907c149c8e6f50a414f0b95842a0ef8634c7a20cf8881f86e943af587f92a8e9196904f69e482e' + '3e03896bcd450cfd6077526de93ede976170fee71935e43f88687fdd18d2a6f04111e291adcb134f745002366c6169f7c44fb7123ffdbac9e585599c4952419b' + '0bc569cf61b20251d1480631d6eaaa0f8d1f348aa8ea6ad41400b3984625aec6f2b4a0401d8ad5d064ee99edf6bd7e0a9f3746be54098dc0e30ec27ad7658fe0') + +prepare() { + cd $pkgbase-$pkgver + + # remove non-free data + patch -p1 -i ${srcdir}/libre.patch + + # remove unneeded messages within boot-splash + # we want to provide a clean and fitting experience + patch -Np1 -i ${srcdir}/boot-splash.patch + + # remove xscreensaver-support + # we do not want further work with this project + patch -Np1 -i ${srcdir}/remove-xscreensaver-support.patch + + # array declaration for removals in icon-sets + # we do not want to provide non-free data + declare -a non_free=( + # icons that have problematic issues + 'nodejs' + 'npm' + 'umbraco' + + # icons that are related to non-free applications + 'apple-finder' + 'apple-safari' + 'edge' + 'emby' + 'evernote' + 'google-chrome' + 'google-earth' + 'internet-explorer' + 'itunes' + 'jira' + 'opera' + 'plex' + 'quicktime' + 'skype' + 'slack' + 'steam' + 'teamviewer' + 'unity' + 'visualstudio' + 'whatsapp' + + # icons that are related to non-free games + 'black-mesa' + 'minecraft' + + # icons that are related to non-free network services + 'amazon' + 'appnet' + 'basecamp' + 'bing' + 'bitbucket' + 'blogger' + 'deviantart' + 'disqus' + 'dribbble' + 'dropbox' + 'ebay' + 'etsy' + 'facebook' + 'flattr' + 'foursquare' + 'github' + 'gmail' + 'google-drive' + 'google-maps' + 'google-photos' + 'google-play' + 'google-plus' + 'google-translate' + 'google-wallet' + 'instagram' + 'jsfiddle' + 'lastfm' + 'linkedin' + 'linode' + 'mixcloud' + 'onedrive' + 'pandora' + 'pinterest' + 'rdio' + 'reddit' + 'soundcloud' + 'spotify' + 'stackexchange' + 'stackoverflow' + 'telegram' + 'tumblr' + 'twitch' + 'twitter' + 'vimeo' + 'vine' + 'vk' + 'wechat' + 'xing' + 'yelp' + 'youtube' + + # icons that are related to non-FSDG operating systems + 'android' + 'ubuntu' + + # icons that are related to non-free operating systems + 'apple-ios' + + # icons that are trademarked brands and products + 'apple' + 'beats' + 'blackberry' + 'dolby' + 'google' + 'google-cardboard' + 'google-glass' + 'microsoft' + 'playstation' + 'wii' + 'wiiu' + + # icons that are trademarked characters + 'clippy' + ) + + for i in "${non_free[@]}"; + do + rm -rf icon-theme/material-design-{dark,light}/applications/$i.svg + done + + unset non_free +} + +build() { + cd $srcdir/$pkgbase-$pkgver + qmake CONFIG+=nostrip L_ETCDIR=/etc PREFIX=/usr L_MANDIR=/usr/share/man DEFINES=QT_NO_DBUS + make + + cd $srcdir/$pkgbase-calculator-$pkgver/src-qt5 + qmake L_ETCDIR=/etc PREFIX=/usr L_MANDIR=/usr/share/man + make +} + +package_lumina-core() { + pkgdesc+=" - Core Components" + depends=(fluxbox libxcursor libxdamage libxcb qt-base qt-multimedia qt-svg qt-x11extras xcb-util xcb-util-image xcb-util-wm xenocara-xinit) + optdepends=('alsa-utils: audio mixer control using amixer' + 'numlockx: used to toggle the numlock key on session start' + 'xenocara-xbacklight: screen brightness control' + 'xterm: XDG standards require the availability of a graphical terminal to launch particular types of applications' + 'xenocara-xcompmgr: compositor to provide cross-application transparency effects and graphical smoothing' + 'picom: compositor to provide cross-application transparency effects and graphical smoothing') + groups=(lumina) + backup=(etc/luminaDesktop.conf) + + cd $pkgbase-$pkgver/src-qt5/core + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../../LICENSE -t $pkgdir/usr/share/licenses/$pkgname + mv -v $pkgdir/etc/luminaDesktop.conf{.dist,} + + # Set distributor logo + dirdark='usr/share/icons/material-design-dark/scalable/places' + dirlight='usr/share/icons/material-design-light/scalable/places' + + install -Dm644 "$srcdir/distributor-logo-dark.svg" $pkgdir/$dirdark/distributor-logo.svg + install -Dm644 "$srcdir/distributor-logo-light.svg" $pkgdir/$dirlight/distributor-logo.svg + + # symlinks logo + for i in /usr/share/icons/material-design-{dark,light}/scalable/places + do + ln -sv "$i/distributor-logo.svg" "$pkgdir/${i/\/}/distributor-logo-hyperbola.svg" + done + + declare -a _distributor=('hyperbola' 'lumina') + for i in "${_distributor[@]}" + do + ln -sv "/$dirdark/distributor-logo.svg" "$pkgdir/$dirdark/start-here-$i.svg" + ln -sv "/$dirlight/distributor-logo.svg" "$pkgdir/$dirlight/start-here-$i.svg" + done + unset _distributor +} + +package_lumina-core-utils() { + pkgdesc+=" - Core Utilities" + depends=(qt-base qt-multimedia qt-svg qt-x11extras xenocara-xrandr) + groups=(lumina) + + cd $pkgbase-$pkgver/src-qt5/core-utils + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_lumina-archiver() { + pkgdesc+=" - Archive Manager" + depends=(coreutils qt-base qt-multimedia qt-svg tar) + groups=(lumina-extra) + + cd $pkgbase-$pkgver/src-qt5/desktop-utils/$pkgname + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../../../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_lumina-fileinfo() { + pkgdesc+=" - File Information Utility" + depends=(qt-base qt-multimedia qt-svg) + groups=(lumina-extra) + + cd $pkgbase-$pkgver/src-qt5/desktop-utils/$pkgname + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../../../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_lumina-fm() { + pkgdesc+=" - File Manager" + depends=(lumina-archiver lumina-core lumina-fileinfo qt-base qt-multimedia qt-svg) + groups=(lumina-extra) + + cd $pkgbase-$pkgver/src-qt5/desktop-utils/$pkgname + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../../../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_lumina-photo() { + pkgdesc+=" - Image Viewer" + depends=(qt-base qt-multimedia qt-svg) + groups=(lumina-extra) + + cd $pkgbase-$pkgver/src-qt5/desktop-utils/$pkgname + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../../../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_lumina-screenshot() { + pkgdesc+=" - Screenshot Utility" + depends=(libxcb libxdamage qt-base qt-multimedia qt-svg qt-x11extras xcb-util xcb-util-image xcb-util-wm) + groups=(lumina-extra) + + cd $pkgbase-$pkgver/src-qt5/desktop-utils/$pkgname + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../../../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_lumina-textedit() { + pkgdesc+=" - Plaintext Editor" + depends=(qt-base qt-multimedia qt-svg) + groups=(lumina-extra) + + cd $pkgbase-$pkgver/src-qt5/desktop-utils/$pkgname + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../../../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_lumina-calculator() { + pkgdesc+=" - Calculator" + depends=(qt-base qt-multimedia qt-svg) + groups=(lumina-extra) + + cd $pkgbase-calculator-$pkgver/src-qt5 + make INSTALL_ROOT=$pkgdir install + install -Dm644 ../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/lumina/boot-splash.patch b/lumina/boot-splash.patch new file mode 100644 index 0000000..1f8131a --- /dev/null +++ b/lumina/boot-splash.patch @@ -0,0 +1,19830 @@ +--- a/src-qt5/core/lumina-desktop/BootSplash.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/BootSplash.cpp 2023-08-07 23:15:33.295605715 +0200 +@@ -42,100 +42,20 @@ + tip = LUtils::readFile(sysMOTD).join("\n"); + + }else{ +- int index = qrand()%46; //Make sure this number matches the length of the case below (max value +1) ++ int index = qrand()%6; //Make sure this number matches the length of the case below (max value +1) + switch(index){ + case 0: +- tip = tr("This desktop is powered by coffee, coffee, and more coffee."); break; +- case 1: + tip = tr("Keep up with desktop news!")+"\n\nwww.lumina-desktop.org"; break; +- case 2: ++ case 1: + tip = tr("There is a full handbook of information about the desktop available online.")+"\n\nwww.lumina-desktop.org/handbook"; break; +- case 3: ++ case 2: + tip = tr("Want to change the interface? Everything is customizable in the desktop configuration!"); break; +- case 4: ++ case 3: + tip = tr("Lumina can easily reproduce the interface from most other desktop environments."); break; ++ case 4: ++ tip = "\""+tr("Keeping up freedom, privacy and security for technical emancipation of the users!")+"\"\n\n- Hyperbola-project -"; break; + case 5: +- tip = tr("This desktop is generously sponsored by iXsystems")+"\n\nwww.ixsystems.com"; break; +- case 6: +- tip = "\""+tr("I have never been hurt by what I have not said")+"\"\n\n- Calvin Coolidge -"; break; +- case 7: +- tip = "\""+tr("Gotta have more cowbell!")+"\"\n\n- Christopher Walken (SNL) -"; break; +- case 8: +- tip = "\""+tr("Everything has its beauty but not everyone sees it.")+"\"\n\n- Confucius -"; break; +- case 9: +- tip = "\""+tr("Before God we are all equally wise - and equally foolish.")+"\"\n\n- Albert Einstein -"; break; +- case 10: +- tip = "\""+tr("We cannot do everything at once, but we can do something at once.")+"\"\n\n- Calvin Coolidge -"; break; +- case 11: +- tip = "\""+tr("One with the law is a majority.")+"\"\n\n- Calvin Coolidge -"; break; +- case 12: +- tip = "\""+tr("Don't expect to build up the weak by pulling down the strong.")+"\"\n\n- Calvin Coolidge -"; break; +- case 13: +- tip = "\""+tr("You can't know too much, but you can say too much.")+"\"\n\n- Calvin Coolidge -"; break; +- case 14: +- tip = "\""+tr("Duty is not collective; it is personal.")+"\"\n\n- Calvin Coolidge -"; break; +- case 15: +- tip = "\""+tr("Any society that would give up a little liberty to gain a little security will deserve neither and lose both.")+"\"\n\n- Benjamin Franklin -"; break; +- case 16: +- tip = "\""+tr("Never trust a computer you can’t throw out a window.")+"\"\n\n- Steve Wozniak -"; break; +- case 17: +- tip = "\""+tr("Study the past if you would define the future.")+"\"\n\n- Confucius -"; break; +- case 18: +- tip = "\""+tr("The way to get started is to quit talking and begin doing.")+"\"\n\n- Walt Disney -"; break; +- case 19: +- tip = "\""+tr("Ask and it will be given to you; search, and you will find; knock and the door will be opened for you.")+"\"\n\n- Jesus Christ -"; break; +- case 20: +- tip = "\""+tr("Start where you are. Use what you have. Do what you can.")+"\"\n\n- Arthur Ashe -"; break; +- case 21: +- tip = "\""+tr("A person who never made a mistake never tried anything new.")+"\"\n\n- Albert Einstein -"; break; +- case 22: +- tip = "\""+tr("It does not matter how slowly you go as long as you do not stop.")+"\"\n\n- Confucius -"; break; +- case 23: +- tip = "\""+tr("Do what you can, where you are, with what you have.")+"\"\n\n- Theodore Roosevelt -"; break; +- case 24: +- tip = "\""+tr("Remember no one can make you feel inferior without your consent.")+"\"\n\n- Eleanor Roosevelt -"; break; +- case 25: +- tip = "\""+tr("It’s not the years in your life that count. It’s the life in your years.")+"\"\n\n- Abraham Lincoln -"; break; +- case 26: +- tip = "\""+tr("Either write something worth reading or do something worth writing.")+"\"\n\n- Benjamin Franklin -"; break; +- case 27: +- tip = "\""+tr("The only way to do great work is to love what you do.")+"\"\n\n- Steve Jobs -"; break; +- case 28: +- tip = "\""+tr("Political correctness is tyranny with manners.")+"\"\n\n- Charlton Heston -"; break; +- case 29: +- tip = "\""+tr("Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.")+"\"\n\n- Albert Einstein -"; break; +- case 30: +- tip = "\""+tr("I find that the harder I work, the more luck I seem to have.")+"\"\n\n- Thomas Jefferson -"; break; +- case 31: +- tip = "\""+tr("Do, or do not. There is no 'try'.")+"\"\n\n- Yoda -"; break; +- case 32: +- tip = "\""+tr("A mathematician is a device for turning coffee into theorems.")+"\"\n\n- Paul Erdos -"; break; +- case 33: +- tip = "\""+tr("Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws.")+"\"\n\n- Plato -"; break; +- case 34: +- tip = "\""+tr("Black holes are where God divided by zero.")+"\"\n\n- Steven Wright -"; break; +- case 35: +- tip = "\""+tr("It's kind of fun to do the impossible.")+"\"\n\n- Walt Disney -"; break; +- case 36: +- tip = "\""+tr("Knowledge speaks, but wisdom listens.")+"\"\n\n- Jimi Hendrix -"; break; +- case 37: +- tip = "\""+tr("A witty saying proves nothing.")+"\"\n\n- Voltaire -"; break; +- case 38: +- tip = "\""+tr("Success usually comes to those who are too busy to be looking for it.")+"\"\n\n- Henry David Thoreau -"; break; +- case 39: +- tip = "\""+tr("Well-timed silence hath more eloquence than speech.")+"\"\n\n- Martin Fraquhar Tupper -"; break; +- case 40: +- tip = "\""+tr("I have never let my schooling interfere with my education.")+"\"\n\n- Mark Twain -"; break; +- case 41: +- tip = "\""+tr("The best way to predict the future is to invent it.")+"\"\n\n- Alan Kay -"; break; +- case 42: +- tip = "\""+tr("Well done is better than well said.")+"\"\n\n- Benjamin Franklin -"; break; +- case 43: +- tip = "\""+tr("Sometimes it is not enough that we do our best; we must do what is required.")+"\"\n\n- Sir Winston Churchill -"; break; +- case 44: +- tip = "\""+tr("The truth is more important than the facts.")+"\"\n\n- Frank Lloyd Wright -"; break; +- case 45: +- tip = "\""+tr("Better to remain silent and be thought a fool than to speak out and remove all doubt.")+"\"\n\n- Abraham Lincoln -"; break; ++ tip = "\""+tr("Everyone can admire complexity, while only some admire simplicity and minimalism.")+"\"\n\n- Hyperbola-project -"; break; + } //end of switch for tips + } //end of fallback tip generation + ui->label_welcome->setText( tip); +--- a/src-qt5/core/lumina-desktop-unified/BootSplash.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop-unified/BootSplash.cpp 2023-08-07 23:15:44.065599500 +0200 +@@ -34,100 +34,20 @@ + tip = LUtils::readFile(sysMOTD).join("\n"); + + }else{ +- int index = qrand()%46; //Make sure this number matches the length of the case below (max value +1) ++ int index = qrand()%6; //Make sure this number matches the length of the case below (max value +1) + switch(index){ + case 0: +- tip = tr("This desktop is powered by coffee, coffee, and more coffee."); break; +- case 1: + tip = tr("Keep up with desktop news!")+"\n\nwww.lumina-desktop.org"; break; +- case 2: ++ case 1: + tip = tr("There is a full handbook of information about the desktop available online.")+"\n\nwww.lumina-desktop.org/handbook"; break; +- case 3: ++ case 2: + tip = tr("Want to change the interface? Everything is customizable in the desktop configuration!"); break; +- case 4: ++ case 3: + tip = tr("Lumina can easily reproduce the interface from most other desktop environments."); break; ++ case 4: ++ tip = "\""+tr("Keeping up freedom, privacy and security for technical emancipation of the users!")+"\"\n\n- Hyperbola-project -"; break; + case 5: +- tip = tr("This desktop is generously sponsored by iXsystems")+"\n\nwww.ixsystems.com"; break; +- case 6: +- tip = "\""+tr("I have never been hurt by what I have not said")+"\"\n\n- Calvin Coolidge -"; break; +- case 7: +- tip = "\""+tr("Gotta have more cowbell!")+"\"\n\n- Christopher Walken (SNL) -"; break; +- case 8: +- tip = "\""+tr("Everything has its beauty but not everyone sees it.")+"\"\n\n- Confucius -"; break; +- case 9: +- tip = "\""+tr("Before God we are all equally wise - and equally foolish.")+"\"\n\n- Albert Einstein -"; break; +- case 10: +- tip = "\""+tr("We cannot do everything at once, but we can do something at once.")+"\"\n\n- Calvin Coolidge -"; break; +- case 11: +- tip = "\""+tr("One with the law is a majority.")+"\"\n\n- Calvin Coolidge -"; break; +- case 12: +- tip = "\""+tr("Don't expect to build up the weak by pulling down the strong.")+"\"\n\n- Calvin Coolidge -"; break; +- case 13: +- tip = "\""+tr("You can't know too much, but you can say too much.")+"\"\n\n- Calvin Coolidge -"; break; +- case 14: +- tip = "\""+tr("Duty is not collective; it is personal.")+"\"\n\n- Calvin Coolidge -"; break; +- case 15: +- tip = "\""+tr("Any society that would give up a little liberty to gain a little security will deserve neither and lose both.")+"\"\n\n- Benjamin Franklin -"; break; +- case 16: +- tip = "\""+tr("Never trust a computer you can’t throw out a window.")+"\"\n\n- Steve Wozniak -"; break; +- case 17: +- tip = "\""+tr("Study the past if you would define the future.")+"\"\n\n- Confucius -"; break; +- case 18: +- tip = "\""+tr("The way to get started is to quit talking and begin doing.")+"\"\n\n- Walt Disney -"; break; +- case 19: +- tip = "\""+tr("Ask and it will be given to you; search, and you will find; knock and the door will be opened for you.")+"\"\n\n- Jesus Christ -"; break; +- case 20: +- tip = "\""+tr("Start where you are. Use what you have. Do what you can.")+"\"\n\n- Arthur Ashe -"; break; +- case 21: +- tip = "\""+tr("A person who never made a mistake never tried anything new.")+"\"\n\n- Albert Einstein -"; break; +- case 22: +- tip = "\""+tr("It does not matter how slowly you go as long as you do not stop.")+"\"\n\n- Confucius -"; break; +- case 23: +- tip = "\""+tr("Do what you can, where you are, with what you have.")+"\"\n\n- Theodore Roosevelt -"; break; +- case 24: +- tip = "\""+tr("Remember no one can make you feel inferior without your consent.")+"\"\n\n- Eleanor Roosevelt -"; break; +- case 25: +- tip = "\""+tr("It’s not the years in your life that count. It’s the life in your years.")+"\"\n\n- Abraham Lincoln -"; break; +- case 26: +- tip = "\""+tr("Either write something worth reading or do something worth writing.")+"\"\n\n- Benjamin Franklin -"; break; +- case 27: +- tip = "\""+tr("The only way to do great work is to love what you do.")+"\"\n\n- Steve Jobs -"; break; +- case 28: +- tip = "\""+tr("Political correctness is tyranny with manners.")+"\"\n\n- Charlton Heston -"; break; +- case 29: +- tip = "\""+tr("Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.")+"\"\n\n- Albert Einstein -"; break; +- case 30: +- tip = "\""+tr("I find that the harder I work, the more luck I seem to have.")+"\"\n\n- Thomas Jefferson -"; break; +- case 31: +- tip = "\""+tr("Do, or do not. There is no 'try'.")+"\"\n\n- Yoda -"; break; +- case 32: +- tip = "\""+tr("A mathematician is a device for turning coffee into theorems.")+"\"\n\n- Paul Erdos -"; break; +- case 33: +- tip = "\""+tr("Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws.")+"\"\n\n- Plato -"; break; +- case 34: +- tip = "\""+tr("Black holes are where God divided by zero.")+"\"\n\n- Steven Wright -"; break; +- case 35: +- tip = "\""+tr("It's kind of fun to do the impossible.")+"\"\n\n- Walt Disney -"; break; +- case 36: +- tip = "\""+tr("Knowledge speaks, but wisdom listens.")+"\"\n\n- Jimi Hendrix -"; break; +- case 37: +- tip = "\""+tr("A witty saying proves nothing.")+"\"\n\n- Voltaire -"; break; +- case 38: +- tip = "\""+tr("Success usually comes to those who are too busy to be looking for it.")+"\"\n\n- Henry David Thoreau -"; break; +- case 39: +- tip = "\""+tr("Well-timed silence hath more eloquence than speech.")+"\"\n\n- Martin Fraquhar Tupper -"; break; +- case 40: +- tip = "\""+tr("I have never let my schooling interfere with my education.")+"\"\n\n- Mark Twain -"; break; +- case 41: +- tip = "\""+tr("The best way to predict the future is to invent it.")+"\"\n\n- Alan Kay -"; break; +- case 42: +- tip = "\""+tr("Well done is better than well said.")+"\"\n\n- Benjamin Franklin -"; break; +- case 43: +- tip = "\""+tr("Sometimes it is not enough that we do our best; we must do what is required.")+"\"\n\n- Sir Winston Churchill -"; break; +- case 44: +- tip = "\""+tr("The truth is more important than the facts.")+"\"\n\n- Frank Lloyd Wright -"; break; +- case 45: +- tip = "\""+tr("Better to remain silent and be thought a fool than to speak out and remove all doubt.")+"\"\n\n- Abraham Lincoln -"; break; ++ tip = "\""+tr("Everyone can admire complexity, while only some admire simplicity and minimalism.")+"\"\n\n- Hyperbola-project -"; break; + } //end of switch for tips + + } //end of fallback tip generation +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_af.ts 2023-08-07 22:09:27.367728883 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ar.ts 2023-08-07 22:10:25.337695390 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_az.ts 2023-08-07 22:10:42.127685690 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bg.ts 2023-08-07 22:11:02.847673722 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- ФормŃляр +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Подготовка на ŃеŃията … +- +- +- +- Loading System Settings … +- Зареждане на ŃиŃтемните наŃтройки … +- +- +- +- Loading User Preferences … +- Зареждане на потребителŃките наŃтройки … +- +- +- +- Preparing System Tray … +- Подготовка на ŃиŃтемния жлеб … +- +- +- +- Starting Window Manager … +- Стартиране на мениджъра на прозорци … +- +- +- +- Detecting Applications … +- Откриване на програми … +- +- +- +- Preparing Menus … +- Подготовка на менюта … +- +- +- +- Preparing Workspace … +- Подготовка на работния плот … +- +- +- +- Finalizing … +- ДовърŃване … +- +- +- +- Starting App: %1 +- Стартиране на програма: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bn.ts 2023-08-07 22:11:25.777660471 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_bs.ts 2023-08-07 22:16:13.117494490 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ca.ts 2023-08-07 22:17:46.447440568 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulari +- +- +- +- Starting the Lumina Desktop... +- S'inicia l'escriptori Lumina... +- +- +- +- Version %1 +- VersiĂł %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Aquest escriptori Ă©s alimentat per cafè, cafè i mĂ©s cafè. +- +- +- +- Keep up with desktop news! +- Mantingueu-vos al dia de les notĂ­cies de l'escriptori! +- +- +- +- There is a full handbook of information about the desktop available online. +- Hi ha un manual ple d'informaciĂł de l'escriptori disponible en lĂ­nia. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Voleu canviar-ne la interfĂ­cie? Tot Ă©s personalitzable des de la configuraciĂł de l'escriptori! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- El Lumina pot reproduir fĂ cilment la interfĂ­cie de la majoria d'altres entorns d'escriptori. +- +- +- +- This desktop is generously sponsored by iXsystems +- Aquest escriptori estĂ  generosament patrocinat per iXsystems. +- +- +- +- I have never been hurt by what I have not said +- Mai no m'ha fet mal el que no he dit. +- +- +- +- Gotta have more cowbell! +- He de tenir mĂ©s esquella! +- +- +- +- Everything has its beauty but not everyone sees it. +- Tot tĂ© la seva bellesa, però no tothom ho veu. +- +- +- +- Before God we are all equally wise - and equally foolish. +- Davant DĂ©u tots som igual de savis - i igual de ximples. +- +- +- +- We cannot do everything at once, but we can do something at once. +- No podem fer-ho tot alhora, però podem fer alguna cosa cada vegada. +- +- +- +- One with the law is a majority. +- Un amb la llei Ă©s una majoria. +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- No espereu fer forts els febles enfonsant forts. +- +- +- +- You can't know too much, but you can say too much. +- No es pot saber massa, però es pot dir massa. +- +- +- +- Duty is not collective; it is personal. +- El deure no Ă©s col·lectiu, Ă©s personal. +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- Qualsevol societat que deixi de banda una mica de llibertat per guanyar una mica de seguretat no en mereixerĂ  ni una ni l'altra i les perdrĂ  totes dues. +- +- +- +- Never trust a computer you can’t throw out a window. +- Mai no confieu en un ordinador que no pugueu llençar per una finestra. +- +- +- +- Study the past if you would define the future. +- Estudieu el passat si voleu definir el futur. +- +- +- +- The way to get started is to quit talking and begin doing. +- La manera de començar Ă©s deixar de parlar i començar a fer-ho. +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- Demaneu i se us donarĂ ; cerqueu i trobareu; truqueu i se us obrirĂ  la porta. +- +- +- +- Start where you are. Use what you have. Do what you can. +- Comenceu on sou. Useu el que teniu. Feu el que pugueu. +- +- +- +- A person who never made a mistake never tried anything new. +- Una persona que mai no ha comès un error mai no ha intentat res de nou. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- No importa la lentitud amb què aneu, sempre que no us atureu. +- +- +- +- Do what you can, where you are, with what you have. +- Feu el que pugueu, on sigueu, amb el que tingueu. +- +- +- +- Remember no one can make you feel inferior without your consent. +- Recordeu que ningĂş us pot fer sentir inferiors sense el vostre consentiment. +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- No sĂłn els anys de la vostra vida que compten, Ă©s la vida als vostres anys. +- +- +- +- Either write something worth reading or do something worth writing. +- O bĂ© feu alguna cosa que pagui la pena de llegir o bĂ© feu alguna cosa que pagui la pena escriure. +- +- +- +- The only way to do great work is to love what you do. +- L'Ăşnica manera de fer una bona feina Ă©s que us agradi el que feu. +- +- +- +- Political correctness is tyranny with manners. +- La correcciĂł polĂ­tica Ă©s tirania amb educaciĂł. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- NomĂ©s hi ha dues coses infinites: l'univers i l'estupidesa humana, i no estic segur de la primera. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- Trobo que com mĂ©s durament treballo, mĂ©s sort sembla que tinc. +- +- +- +- Do, or do not. There is no 'try'. +- Fes-ho o no. No hi ha un "intent". +- +- +- +- A mathematician is a device for turning coffee into theorems. +- Un matemĂ tic Ă©s un dispositiu per convertir cafè en teoremes. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- La gent bona no necessita lleis que els diguin d'actuar responsablement, mentre que la mala gent trobarĂ  una manera d'evitar les lleis. +- +- +- +- Black holes are where God divided by zero. +- Els forats negres sĂłn el lloc on dĂ©u va dividir per zero. +- +- +- +- It's kind of fun to do the impossible. +- És bastant divertit fer l'impossible. +- +- +- +- Knowledge speaks, but wisdom listens. +- El coneixement parla, però la saviesa escolta. +- +- +- +- A witty saying proves nothing. +- Una dita enginyosa no prova res. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- L'èxit normalment arriba als que estan massa enfeinats per buscar-lo. +- +- +- +- Well-timed silence hath more eloquence than speech. +- Un silenci al moment oportĂş tĂ© mĂ©s eloqüència que un discurs. +- +- +- +- I have never let my schooling interfere with my education. +- Mai he deixat que els meus estudis interfereixin en la meva educaciĂł. +- +- +- +- The best way to predict the future is to invent it. +- La millor manera de predir el futur Ă©s inventar-lo. +- +- +- +- Well done is better than well said. +- Ben fet Ă©s millor que ben dit. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- Algunes vegades no n'hi ha prou amb fer-ho el millor que podem, hem de fer el que cal. +- +- +- +- The truth is more important than the facts. +- La veritat Ă©s mĂ©s important que els fets. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- És millor romandre en silenci i ser pres per ximple que parlar i eliminar-ne tots els dubtes. +- +- +- +- Initializing Session … +- Iniciant la sessió… +- +- +- +- Loading System Settings … +- Carregant la configuraciĂł del sistema… +- +- +- +- Loading User Preferences … +- Carregant les preferències de l'usuari… +- +- +- +- Preparing System Tray … +- Preparant la safata de sistema… +- +- +- +- Starting Window Manager … +- Iniciant el gestor de finestres… +- +- +- +- Detecting Applications … +- Detectant les aplicacions… +- +- +- +- Preparing Menus … +- Preparant els menĂşs… +- +- +- +- Preparing Workspace … +- Preparant l'espai de treball… +- +- +- +- Finalizing … +- Acabant… +- +- +- +- Starting App: %1 +- Iniciant l'aplicaciĂł: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cs.ts 2023-08-07 22:18:04.787429976 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulář +- +- +- +- Starting the Lumina Desktop... +- SpouštĂ­ se prostĹ™edĂ­ Lumina… +- +- +- +- Version %1 +- Verze %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Toto prostĹ™edĂ­ je pohánÄ›no kávou, kávou a ještÄ› další kávou. +- +- +- +- Keep up with desktop news! +- BuÄŹte v obraze ohlednÄ› novinek v prostĹ™edĂ­! +- +- +- +- There is a full handbook of information about the desktop available online. +- Na webovĂ˝ch stránkách projektu je k dispozici podrobná příruÄŤka se spoustou informacĂ­ o prostĹ™edĂ­. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Chcete zmÄ›nit rozhranĂ­? Všechno se dá pĹ™izpĹŻsobit v nastavenĂ­ prostĹ™edĂ­! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- Lumina lehce dokáže napodobit vzhled rozhranĂ­ vÄ›tšiny ostatnĂ­ch pracovnĂ­ch prostĹ™edĂ­. +- +- +- +- This desktop is generously sponsored by iXsystems +- Toto prostĹ™edĂ­ je štÄ›dĹ™e podporováno spoleÄŤnostĂ­ iXsystems +- +- +- +- I have never been hurt by what I have not said +- Nikdy mi neublĂ­Ĺľilo to, co jsem nemusel říct +- +- +- +- Gotta have more cowbell! +- MusĂ­m si pořídit vĂ­ce zvoneÄŤkĹŻ! +- +- +- +- Everything has its beauty but not everyone sees it. +- Vše je krásnĂ©, ale ne kaĹľdĂ˝ to vidĂ­. +- +- +- +- Before God we are all equally wise - and equally foolish. +- PĹ™ed Bohem jsme všichni stejnÄ› moudří – a stejnÄ› hloupĂ­. +- +- +- +- We cannot do everything at once, but we can do something at once. +- NemĹŻĹľeme udÄ›lat všechno najednou, najednou však mĹŻĹľeme nÄ›co udÄ›lat. +- +- +- +- One with the law is a majority. +- Zákony vytváří vÄ›tšina. +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- NeoÄŤekávejte Ĺľe povzbudĂ­te slabĂ© tĂ­m Ĺľe stáhnete dolĹŻ silnĂ©. +- +- +- +- You can't know too much, but you can say too much. +- NemĹŻĹľete vÄ›dÄ›t příliš mnoho, ale mĹŻĹľete toho říct pĹ™espříliš. +- +- +- +- Duty is not collective; it is personal. +- Povinnost nenĂ­ spoleÄŤná, je osobnĂ­. +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- Jakákoli spoleÄŤnost, která se vzdá kousku svobody, aby zĂ­skala trošku bezpeÄŤnosti, si nezaslouží ani jedno a ztratĂ­ obojĂ­. +- +- +- +- Never trust a computer you can’t throw out a window. +- Nikdy nevěřte poÄŤĂ­taÄŤi, kterĂ˝ nemĹŻĹľete vyhodit z okna. +- +- +- +- Study the past if you would define the future. +- UÄŤte se z minulosti, pokud chcete urÄŤovat budoucnost. +- +- +- +- The way to get started is to quit talking and begin doing. +- Cestou jak zaÄŤĂ­t je pĹ™estat mluvit a zaÄŤĂ­t dÄ›lat. +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- Požádejte a bude vám dáno; hledejte a naleznete; zaklepej a dveĹ™e vám budou otevĹ™eny. +- +- +- +- Start where you are. Use what you have. Do what you can. +- ZaÄŤnÄ›te tam, kde jste. Používejte to, co máte. UdÄ›lejte, co mĹŻĹľete. +- +- +- +- A person who never made a mistake never tried anything new. +- Osoba, která se nikdy nezmĂ˝lila, nikdy nezkusila nÄ›co novĂ©ho. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- Nezáleží na tom jak pomalu jdete – dĹŻleĹľitĂ© je, Ĺľe se nezastavĂ­te. +- +- +- +- Do what you can, where you are, with what you have. +- DÄ›lejte, co mĹŻĹľete, tam kde jste, s tĂ­m, co máte. +- +- +- +- Remember no one can make you feel inferior without your consent. +- Pamatujte, Ĺľe se nikomu nepodaří, aby se cĂ­til bĂ˝t menším, bez jeho souhlasu. +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- V ĹľivotÄ› nejsou roky to, co se poÄŤĂ­tá. PoÄŤĂ­tá se Ĺľivot v rocĂ­ch. +- +- +- +- Either write something worth reading or do something worth writing. +- BuÄŹ napište nÄ›co, co stojĂ­ za pĹ™eÄŤtenĂ­, nebo udÄ›lejte nÄ›co, o ÄŤem má smysl napsat. +- +- +- +- The only way to do great work is to love what you do. +- JedinĂ˝m zpĹŻsobem jak odvádÄ›t skvÄ›lou práci je milovat to, co dÄ›láte. +- +- +- +- Political correctness is tyranny with manners. +- Politická korektnost je Ăştlak honosĂ­cĂ­ se vybranĂ˝mi zpĹŻsoby. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- Jen dvÄ› vÄ›ci jsou nekoneÄŤnĂ© – vesmĂ­r a lidská hloupost. TĂ­m prvnĂ­m si vlastnÄ› nejsem tak ĂşplnÄ› jistĂ˝. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- Zjistil jsem, Ĺľe ÄŤĂ­m jsem pilnÄ›jší, tĂ­m vĂ­ce mám štÄ›stĂ­. +- +- +- +- Do, or do not. There is no 'try'. +- UdÄ›lejte to, nebo to nedÄ›lejte vĹŻbec. Nejde o to to jen zkoušet. +- +- +- +- A mathematician is a device for turning coffee into theorems. +- Matematik je prostĹ™edek, kterĂ˝m se promÄ›Ĺuje káva na pouÄŤky. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- Dobří lidĂ© nepotĹ™ebujĂ­ zákony k tomu, aby jim říkaly, aby jednali zodpovÄ›dnÄ›, zatĂ­mco špatnĂ­ lidĂ© si vĹľdy najdou kliÄŤku k obejitĂ­ zákonĹŻ. +- +- +- +- Black holes are where God divided by zero. +- ÄŚernĂ© dĂ­ry jsou prĂ˝ mĂ­stem, kde BĹŻh dÄ›lil nulou. +- +- +- +- It's kind of fun to do the impossible. +- DÄ›lat nemoĹľnĂ© je zábava. +- +- +- +- Knowledge speaks, but wisdom listens. +- VÄ›domost hovoří, ale moudrost naslouchá. +- +- +- +- A witty saying proves nothing. +- VtipnĂ© poĹ™ekadlo ještÄ› nic nedokazuje. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- ĂšspÄ›ch obyÄŤejnÄ› pĹ™ijde k tÄ›m, kteří jsou příliš zaneprázdnÄ›ni na to, aby ho hledali. +- +- +- +- Well-timed silence hath more eloquence than speech. +- DobĹ™e naÄŤasovanĂ© ticho je vĂ˝mluvnÄ›jší neĹľ mluvenĂ­. +- +- +- +- I have never let my schooling interfere with my education. +- Nikdy jsem nenechal školy plĂ©st se do mĂ©ho vzdÄ›lánĂ­. +- +- +- +- The best way to predict the future is to invent it. +- Nejlepší cestou, jak pĹ™edpovÄ›dÄ›t budoucnost, je ji vymyslet. +- +- +- +- Well done is better than well said. +- PořádnÄ› udÄ›láno je lepší neĹľ dobĹ™e Ĺ™eÄŤeno. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- NÄ›kdy nestaÄŤĂ­, Ĺľe dÄ›láme jak nejlĂ©pe umĂ­me. MusĂ­me dÄ›lat, co se od nás žádá. +- +- +- +- The truth is more important than the facts. +- Pravda je dĹŻleĹľitÄ›jší neĹľ fakta. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- LĂ©pe zĹŻstat zticha a bĂ˝t povaĹľován za hlupáka, neĹľ promluvit a tĂ­m to potvrdit. +- +- +- +- Initializing Session … +- SpouštÄ›nĂ­ sezení… +- +- +- +- Loading System Settings … +- NaÄŤĂ­tánĂ­ nastavenĂ­ systĂ©mu… +- +- +- +- Loading User Preferences … +- NaÄŤĂ­tánĂ­ nastavenĂ­ uĹľivatele… +- +- +- +- Preparing System Tray … +- Příprava oznamovacĂ­ oblasti systĂ©movĂ©ho panelu… +- +- +- +- Starting Window Manager … +- SpouštÄ›nĂ­ správce oken… +- +- +- +- Detecting Applications … +- ZjišťovánĂ­ aplikací… +- +- +- +- Preparing Menus … +- Příprava nabĂ­dek… +- +- +- +- Preparing Workspace … +- Příprava pracovnĂ­ plochy… +- +- +- +- Finalizing … +- DokonÄŤování… +- +- +- +- Starting App: %1 +- SpouštÄ›nĂ­ aplikace: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_cy.ts 2023-08-07 22:18:22.817419560 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_da.ts 2023-08-07 22:18:44.387407095 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formular +- +- +- +- Starting the Lumina Desktop... +- Starter Lumina-skrivebordet... +- +- +- +- Version %1 +- Version %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Dette skrivebord er drevet af kaffe, kaffe og mere kaffe. +- +- +- +- Keep up with desktop news! +- Hold dig opdateret med skrivebordsnyheder! +- +- +- +- There is a full handbook of information about the desktop available online. +- Der er en hel hĂĄndbog af information om skrivebordet online. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Vil du ændre brugerfladen? Alt kan tilpasses i skrivebordskonfigurationen! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- Lumina kan nemt efterligne brugerfladen fra de fleste andre skrivebordsmiljøer. +- +- +- +- This desktop is generously sponsored by iXsystems +- Dette skrivebord er generøst sponsoreret af iXsystems +- +- +- +- I have never been hurt by what I have not said +- Jeg har aldrig taget skade af det jeg aldrig har sagt +- +- +- +- Gotta have more cowbell! +- Mere koklokke tak! +- +- +- +- Everything has its beauty but not everyone sees it. +- Alt har sin skønhed, ikke alle ser det. +- +- +- +- Before God we are all equally wise - and equally foolish. +- Før gud er vi alle lige kloge - og lige dumme. +- +- +- +- We cannot do everything at once, but we can do something at once. +- Vi kan ikke gøre alt pĂĄ samme tid, men vi kan gøre noget pĂĄ en gang. +- +- +- +- One with the law is a majority. +- En med loven er et flertal. +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- Forvent ikke at opbygge det svage ved at nedrive det stærke. +- +- +- +- You can't know too much, but you can say too much. +- Du kan ikke vide for meget, men du kan sige for meget. +- +- +- +- Duty is not collective; it is personal. +- Pligt er ikke kollektivt; det er personligt. +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- Et samfund som ville opgive en smule frihed for at opnĂĄ en smule sikkerhed vil ikke gøre sig fortjent til noget af det og miste begge. +- +- +- +- Never trust a computer you can’t throw out a window. +- Stol aldrig pĂĄ en computer du ikke kan smide ud af et vindue. +- +- +- +- Study the past if you would define the future. +- Lær fortiden at kende hvis du vil definere fremtiden. +- +- +- +- The way to get started is to quit talking and begin doing. +- MĂĄden at komme i gang er at holde op med at snakke og begynde at gøre. +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- Spørg, og det vil blive givet til dig; søg, og du vil finde; bank pĂĄ, og døren vil blive ĂĄbnet for dig. +- +- +- +- Start where you are. Use what you have. Do what you can. +- Start hvor du er. Brug hvad du har. Gør hvad du kan. +- +- +- +- A person who never made a mistake never tried anything new. +- En person der aldrig har lavet fejl, har aldrig prøvet noget nyt. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- Det har ikke betydning hvor langsom du er, sĂĄ længe du ikke stopper. +- +- +- +- Do what you can, where you are, with what you have. +- Gør hvad du kan, der hvor du er, med det du har. +- +- +- +- Remember no one can make you feel inferior without your consent. +- Husk, at ingen kan fĂĄ dig til at føle dig underlegen, uden dit samtykke. +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- Det er ikke ĂĄrene i dit liv der tæller. Det er livet i dine ĂĄr. +- +- +- +- Either write something worth reading or do something worth writing. +- Skriv enten noget som er værd at læse, eller noget som er værd at skrive. +- +- +- +- The only way to do great work is to love what you do. +- Den eneste mĂĄde at udføre godt arbejde er ved at elske det, du gør. +- +- +- +- Political correctness is tyranny with manners. +- Politisk korrekthed er tyranni med manerer. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- Kun to ting er uendelige, universet og menneskelig dumhed, og jeg er ikke sikker pĂĄ det første. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- Jeg oplever at jo hĂĄrdere jeg arbejder, jo mere held lader jeg til at have. +- +- +- +- Do, or do not. There is no 'try'. +- Gør eller lad være. Der er ikke noget "prøv". +- +- +- +- A mathematician is a device for turning coffee into theorems. +- En matematiker er en enhed som omdanner kaffe til matematiske sætninger. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- Gode mennesker behøver ikke love til at fortælle dem at de skal opføre sig ordentligt, mens dĂĄrlige mennesker vil finde en vej uden om lovene. +- +- +- +- Black holes are where God divided by zero. +- Sorte huller er hvor gud dividere med nul. +- +- +- +- It's kind of fun to do the impossible. +- Det er egentligt sjovt at gøre det umulige. +- +- +- +- Knowledge speaks, but wisdom listens. +- Viden taler, men klogskab lytter. +- +- +- +- A witty saying proves nothing. +- En vittig talemĂĄde beviser intet. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- Succes kommer typisk til dem der har for travlt til at lede efter den. +- +- +- +- Well-timed silence hath more eloquence than speech. +- Godt timet stilhed havde mere elokvens end tale. +- +- +- +- I have never let my schooling interfere with my education. +- Jeg har aldrig ladet min skolegang forstyrre min uddannelse. +- +- +- +- The best way to predict the future is to invent it. +- Den bedste mĂĄde at forudse fremtiden er ved at opfinde den. +- +- +- +- Well done is better than well said. +- Vel gjort eller bedre end vel sagt. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- Nogen gange er det ikke nok at gøre vores bedst; vi mĂĄ gøre hvad der er krævet. +- +- +- +- The truth is more important than the facts. +- Sandheden er vigtigere end fakta. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- Bedre at forblive stille og blive anset for at være et fjols end at tale og fjerne al tvivl. +- +- +- +- Initializing Session … +- Initialiserer session … +- +- +- +- Loading System Settings … +- Indlæser systemindstillinger … +- +- +- +- Loading User Preferences … +- Indlæser brugerpræferencer … +- +- +- +- Preparing System Tray … +- Forbereder systembakke … +- +- +- +- Starting Window Manager … +- Starter vindueshĂĄndteringen … +- +- +- +- Detecting Applications … +- Finder programmer … +- +- +- +- Preparing Menus … +- Forbereder menuer … +- +- +- +- Preparing Workspace … +- Forbereder arbejdsomrĂĄde … +- +- +- +- Finalizing … +- Afslutter … +- +- +- +- Starting App: %1 +- Starter program: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_de.ts 2023-08-07 22:26:22.827142214 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formular +- +- +- +- Starting the Lumina Desktop... +- Lumina-Arbeitsfläche wird gestartet... +- +- +- +- Version %1 +- Version %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Diese Arbeitsfläche wird durch Kaffee, Kaffee und mehr Kaffee angetrieben. +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- Diese Arbeitsfläche wird groĂźzĂĽgig von iXsystems gesponsert +- +- +- +- I have never been hurt by what I have not said +- Ich bin niemals durch das verletzt worden, was ich nicht gesagt habe +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- Alles hat seine Schönheit, aber nicht jeder sieht es. +- +- +- +- Before God we are all equally wise - and equally foolish. +- Vor Gott sind wir alle gleich weise - und gleich dumm. +- +- +- +- We cannot do everything at once, but we can do something at once. +- Wir können nicht alles auf einmal machen, aber wir können etwas auf einmal machen. +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- Sie können nicht zu viel wissen, aber Sie können zu viel sagen. +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- Trauen Sie niemals einem Computer, den Sie nicht aus einem Fenster werfen können. +- +- +- +- Study the past if you would define the future. +- Studieren Sie die Vergangenheit, wenn Sie die Zukunft bestimmen wĂĽrden. +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- Eine Person, die nie einen Fehler gemacht hat, hat nie etwas Neues versucht. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- Es spielt keine Rolle, wie langsam Sie gehen, solange Sie nicht aufhören. +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- Der einzige Weg groĂźartige Arbeit zu verrichten, ist zu lieben, was Sie machen. +- +- +- +- Political correctness is tyranny with manners. +- Politische Korrektheit ist Tyrannei mit Manieren. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- Nur zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim ersten bin ich mir nicht sicher. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- Machen oder nicht machen. Es gibt kein "Versuchen". +- +- +- +- A mathematician is a device for turning coffee into theorems. +- Ein Mathematiker ist ein Gerät, um Kaffee in Theoreme umzuwandeln. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- Schwarze Löcher sind, wo Gott durch Null geteilt hat. +- +- +- +- It's kind of fun to do the impossible. +- Es macht SpaĂź, das Unmögliche zu tun. +- +- +- +- Knowledge speaks, but wisdom listens. +- Wissen spricht, aber Weisheit hört zu. +- +- +- +- A witty saying proves nothing. +- Ein witziges Sprichwort beweist nichts. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- Zeitlich gut angesetzte Stille hat mehr Sprachfertigkeit als eine Rede. +- +- +- +- I have never let my schooling interfere with my education. +- Ich habe meine Ausbildung niemals durch meine Schulzeit beeinträchtigen lassen. +- +- +- +- The best way to predict the future is to invent it. +- Der beste Weg, die Zukunft vorauszusagen, ist, sie zu erfinden. +- +- +- +- Well done is better than well said. +- Gut gemacht ist besser als gut gesagt. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- Die Wahrheit ist wichtiger als die Fakten. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Sitzung wird initialisiert … +- +- +- +- Loading System Settings … +- Systemeinstellungen werden geladen … +- +- +- +- Loading User Preferences … +- Benutzereinstellungen werden geladen … +- +- +- +- Preparing System Tray … +- Benachrichtigungsfeld wird vorbereitet … +- +- +- +- Starting Window Manager … +- Fenstermanager wird gestartet … +- +- +- +- Detecting Applications … +- Anwendungen werden erkannt … +- +- +- +- Preparing Menus … +- MenĂĽs werden vorbereitet … +- +- +- +- Preparing Workspace … +- Arbeitsfläche wird vorbereitet … +- +- +- +- Finalizing … +- Finalisieren … +- +- +- +- Starting App: %1 +- Anwendung wird gestartet: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_el.ts 2023-08-07 22:26:47.407128019 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_AU.ts 2023-08-07 22:27:04.367118211 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Form +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Initialising Session … +- +- +- +- Loading System Settings … +- Loading System Settings … +- +- +- +- Loading User Preferences … +- Loading User Preferences … +- +- +- +- Preparing System Tray … +- Preparing System Tray … +- +- +- +- Starting Window Manager … +- Starting Window Manager ... +- +- +- +- Detecting Applications … +- Detecting Applications ... +- +- +- +- Preparing Menus … +- Preparing Menus ... +- +- +- +- Preparing Workspace … +- Preparing Workspace ... +- +- +- +- Finalizing … +- Finalising ... +- +- +- +- Starting App: %1 +- Starting App: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_GB.ts 2023-08-07 22:27:22.897107501 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Form +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Initialising Session … +- +- +- +- Loading System Settings … +- Loading System Settings … +- +- +- +- Loading User Preferences … +- Loading User Preferences … +- +- +- +- Preparing System Tray … +- Preparing System Tray … +- +- +- +- Starting Window Manager … +- Starting Window Manager ... +- +- +- +- Detecting Applications … +- Detecting Applications ... +- +- +- +- Preparing Menus … +- Preparing Menus ... +- +- +- +- Preparing Workspace … +- Preparing Workspace ... +- +- +- +- Finalizing … +- Finalising ... +- +- +- +- Starting App: %1 +- Starting App: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_en_ZA.ts 2023-08-07 22:27:40.527097321 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_es.ts 2023-08-07 22:27:59.447086386 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulario +- +- +- +- Starting the Lumina Desktop... +- Iniciando el Escritorio Lumina... +- +- +- +- Version %1 +- VersiĂłn %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Este escritorio es potenciado por cafĂ©, cafĂ© y más cafĂ©. +- +- +- +- Keep up with desktop news! +- MantĂ©ngase al dĂ­a con las noticias del escritorio! +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- Este escritorio es generosamente patrocinado por iXsystems +- +- +- +- I have never been hurt by what I have not said +- Nunca he sido herido por algo que no he dicho +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- Todo tiene su belleza, pero no todos la ven. +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- No puedes saber demasiado, pero puedes decir demasiado. +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- Comienza donde estĂ©s. Usa lo que tienes. Haz lo que puedas. +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- La Ăşnica manera de hacer un gran trabajo es amar lo que haces. +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- La mejor manera de predecir el futuro es inventarlo. +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- Es mejor estar callado y parecer tonto, que hablar y despejar las dudas. +- +- +- +- Initializing Session … +- Iniciando SesiĂłn … +- +- +- +- Loading System Settings … +- Cargando ConfiguraciĂłn del Sistema… +- +- +- +- Loading User Preferences … +- Cargando Preferencias de Usuario … +- +- +- +- Preparing System Tray … +- Preparando Bandeja del Sistema ... +- +- +- +- Starting Window Manager … +- Iniciando Gestor de Ventanas ... +- +- +- +- Detecting Applications … +- Detectando Aplicaciones ... +- +- +- +- Preparing Menus … +- Preparando Menus ... +- +- +- +- Preparing Workspace … +- Preparando Area de Trabajo ... +- +- +- +- Finalizing … +- Finalizando ... +- +- +- +- Starting App: %1 +- Iniciando AplicaciĂłn: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_et.ts 2023-08-07 22:28:18.877075159 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Vorm +- +- +- +- Starting the Lumina Desktop... +- Lumina Töölaua käivitumine... +- +- +- +- Version %1 +- Versioon %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Töölaua valmimist on toetanud kohvi, kohvi ja veel rohkem kohvi. +- +- +- +- Keep up with desktop news! +- Pea silm peal töölaua uudistel! +- +- +- +- There is a full handbook of information about the desktop available online. +- Võrgus on Töölaua kohta olemas täiemahuline käsiraamat (ingl.k) +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Soovid muuta kasutajaliidest? Kõik töölaua konfiguratsioonis on muudetav! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- Lumina võimaldab kergesti taasluua kasutajaliideseid enamikest muudest töölauakeskkondadest +- +- +- +- This desktop is generously sponsored by iXsystems +- Selle töölaua valmimist on heldelt toetanud iXsystems +- +- +- +- I have never been hurt by what I have not said +- Mulle ei ole kunagi haiget teenud ĂĽtlemata jäänud asjad +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- Kõigel on oma ilu kuid mitte kõik ei oska seda näha +- +- +- +- Before God we are all equally wise - and equally foolish. +- Jumala ees oleme kõik võrdselt targad - ja võrdselt lollid. +- +- +- +- We cannot do everything at once, but we can do something at once. +- Me ei saa teha kõike ĂĽhekorraga, kuid me saame teha midagi kohe. +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- Sa ei saa kunagi teada liiga palju, kuid saad öelda. +- +- +- +- Duty is not collective; it is personal. +- Kohusetunne ei ole kollektiivne, see on isiklik +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- Ăśhiskond, mis annab ära veidikene vabadust et lisada veidikene turvalisust, ei vääri kumbagi ning kaotab mõlemad. +- +- +- +- Never trust a computer you can’t throw out a window. +- Ă„ra kunagi usalda kompuutrit, mida ei ole võimalik aknast välja visata. +- +- +- +- Study the past if you would define the future. +- Tuleviku ennustamiseks õpi minevikku. +- +- +- +- The way to get started is to quit talking and begin doing. +- Meetod alustamiseks: lõpeta seletamine ja hakka tegema. +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- KĂĽsi, ja sulle antakse; Otsi, ning sa leiad; Koputa, ning uks avatakse sulle. +- +- +- +- Start where you are. Use what you have. Do what you can. +- Alusta, sealt kus sa oled. Kasuta, mis sul on. Tee, mis saad. +- +- +- +- A person who never made a mistake never tried anything new. +- Inimene, kes kunagi pole eksinud, ei ole kunagi proovinud teha midagi uut. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- Pole oluline kui aeglaselt sa kulged, kuni sa ei peatu. +- +- +- +- Do what you can, where you are, with what you have. +- Tee mis saad, kus parajasti oled, mis käepärast on. +- +- +- +- Remember no one can make you feel inferior without your consent. +- Pea meeles et mitte keegi ei saa sind panna tundma alaväärtuslikuna ilma su enda nõusolekuta +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- Olulised pole elatud aastad. Oluline on elada igas aastas. +- +- +- +- Either write something worth reading or do something worth writing. +- Kirjuta midagi väärt lugemist või tee midagi väärt kirjutamist. +- +- +- +- The only way to do great work is to love what you do. +- Ainus valem heaks tööks on armastada seda. +- +- +- +- Political correctness is tyranny with manners. +- Poliitkorrektsus on kommetega tĂĽrannia. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- Ainult kaks asja on lõputud. Universum ja inimese lollus. Ma ei ole kusjuures esimeses kindel. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- Olen avastanud et mida rohkem ma tööd raban, seda rohkem õnne näib mul olevat. +- +- +- +- Do, or do not. There is no 'try'. +- Tee, või ära tee. Lihtsalt proovimine ei ole variant. +- +- +- +- A mathematician is a device for turning coffee into theorems. +- Matemaatik on seade, mis muudab kohvi teoreemideks. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- Head inimesed ei vaja seadusi käitumaks vastutustundlikult, sellal kui halvad inimesed leiavad tee seadustest möödahiilimiseks. +- +- +- +- Black holes are where God divided by zero. +- Mustad augud Universumis on kohad, kus Jumal jagas nulliga. +- +- +- +- It's kind of fun to do the impossible. +- On omamoodi lõbus saata korda võimatut. +- +- +- +- Knowledge speaks, but wisdom listens. +- Teadmised räägivad, tarkus kuulab. +- +- +- +- A witty saying proves nothing. +- Kaval ĂĽtlus ei tõesta midagi. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- Edu tuleb tavaliselt nende juurde, kel on liiga kiire, selleks et seda otsida. +- +- +- +- Well-timed silence hath more eloquence than speech. +- Hästiajastatud vaikus on väljendusrikkam kui kõne +- +- +- +- I have never let my schooling interfere with my education. +- Ma ei ole kunagi lasknud koolil segada enda harimist. +- +- +- +- The best way to predict the future is to invent it. +- Parim meetod tuleviku ennustamiseks on see leiutada +- +- +- +- Well done is better than well said. +- Hästitehtu on parem kui hästiöeldu. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- Vahel ei piisa meie parimast; Peame tegema seda, mis on vaja. +- +- +- +- The truth is more important than the facts. +- Tõde on olulisem kui faktid. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- Parem olla vait ja lasta endast mõelda kui lollist kui teha suu lahti ja eemaldada kõik kahtlused. +- +- +- +- Initializing Session … +- Seansi käivitumine... +- +- +- +- Loading System Settings … +- SĂĽsteemi Seadete laadimine... +- +- +- +- Loading User Preferences … +- Kasutajaeelistuste laadimine... +- +- +- +- Preparing System Tray … +- SĂĽsteemi tööriba ettevalimistamine... +- +- +- +- Starting Window Manager … +- Aknahalduri käivitumine... +- +- +- +- Detecting Applications … +- Olemasolevate programmide tuvastamine... +- +- +- +- Preparing Menus … +- KasutajamenĂĽĂĽde ettevalmistamine... +- +- +- +- Preparing Workspace … +- Töölaua ettevalmistamine... +- +- +- +- Finalizing … +- Viimased liigutused... +- +- +- +- Starting App: %1 +- Käivitan rakenduse: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_eu.ts 2023-08-07 22:28:37.937064149 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Inprimakia +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fa.ts 2023-08-07 22:28:57.387052907 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fi.ts 2023-08-07 22:29:15.687042339 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Lomake +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Alustetaan istuntoa… +- +- +- +- Loading System Settings … +- Ladataan järjestelmäasetuksia… +- +- +- +- Loading User Preferences … +- Ladataan käyttäjän asetuksia… +- +- +- +- Preparing System Tray … +- Valmistellaan ilmoitusaluetta… +- +- +- +- Starting Window Manager … +- Käynnistetään ikkunaohjelmaa… +- +- +- +- Detecting Applications … +- Tunnistetaan sovelluksia… +- +- +- +- Preparing Menus … +- Valmistellaan valikoita… +- +- +- +- Preparing Workspace … +- Valmistellaan työtilaa… +- +- +- +- Finalizing … +- Viimeistellään… +- +- +- +- Starting App: %1 +- Käynnistetään sovellusta: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr.ts 2023-08-07 22:29:35.017031170 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulaire +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Initialisation de la Session … +- +- +- +- Loading System Settings … +- Chargement des Paramètres du Système … +- +- +- +- Loading User Preferences … +- Chargement des PrĂ©fĂ©rences d'Utilisateur … +- +- +- +- Preparing System Tray … +- PrĂ©paration de la Zone de Notification … +- +- +- +- Starting Window Manager … +- DĂ©marrage du Gestionnaire de FenĂŞtres … +- +- +- +- Detecting Applications … +- DĂ©tection des Programmes … +- +- +- +- Preparing Menus … +- PrĂ©paration des Menus … +- +- +- +- Preparing Workspace … +- PrĂ©paration de l'Espace de Travail … +- +- +- +- Finalizing … +- Finalisation en cours … +- +- +- +- Starting App: %1 +- DĂ©marrage App : %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fr_CA.ts 2023-08-07 22:29:52.877020846 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fur.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_fur.ts 2023-08-07 22:30:09.547011217 +0200 +@@ -137,64 +137,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_gl.ts 2023-08-07 22:30:27.037001113 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_he.ts 2023-08-07 22:30:54.226985405 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- ×ופס +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hi.ts 2023-08-07 22:31:12.696974734 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- फॉर्म +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- कार्यकाल शŕĄŕ¤°ŕĄ‚ हो रहा हŕĄ.... +- +- +- +- Loading System Settings … +- उपकरण की सेटिंग लोड हो रही हŕĄŕ¤‚... +- +- +- +- Loading User Preferences … +- उपयोगकर्ता की प्राथमिकताएं लोड हो रही हŕĄŕ¤‚... +- +- +- +- Preparing System Tray … +- उपकरण ट्रे तŕĄŕ¤Żŕ¤ľŕ¤° हो रही हŕĄ.. +- +- +- +- Starting Window Manager … +- विंडो प्रबंधक चालू हो रहा हŕĄ... +- +- +- +- Detecting Applications … +- एप्लीकेशन्स खोजी जा रही हŕĄŕ¤‚... +- +- +- +- Preparing Menus … +- मेन्यू तŕĄŕ¤Żŕ¤ľŕ¤° किए जा रहे हŕĄŕ¤‚... +- +- +- +- Preparing Workspace … +- कार्यस्थल तŕĄŕ¤Żŕ¤ľŕ¤° किये जा रहे हŕĄŕ¤‚... +- +- +- +- Finalizing … +- अंतिम रूप दिया जा रहा हŕĄ.. +- +- +- +- Starting App: %1 +- एप्प प्रारंभ: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hr.ts 2023-08-07 22:31:36.926960738 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_hu.ts 2023-08-07 22:32:04.746944663 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Űrlap +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Munkamenet indĂ­tása … +- +- +- +- Loading System Settings … +- RendszerbeállĂ­tások betöltĂ©se … +- +- +- +- Loading User Preferences … +- FelhasználĂłi beállĂ­tások betöltĂ©se … +- +- +- +- Preparing System Tray … +- Rendszertálca elĹ‘kĂ©szĂ­tĂ©se … +- +- +- +- Starting Window Manager … +- AblakkezelĹ‘ indĂ­tása … +- +- +- +- Detecting Applications … +- Alkalmazások keresĂ©se … +- +- +- +- Preparing Menus … +- MenĂĽk elĹ‘kĂ©szĂ­tĂ©se … +- +- +- +- Preparing Workspace … +- MunkaterĂĽlet elĹ‘kĂ©szĂ­tĂ©se … +- +- +- +- Finalizing … +- BefejezĂ©s … +- +- +- +- Starting App: %1 +- Alkalmazás indĂ­tása: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_id.ts 2023-08-07 22:32:23.906933595 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Membentuk +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Initializing Sesi ... +- +- +- +- Loading System Settings … +- Pemuatan Sistem Pengaturan … +- +- +- +- Loading User Preferences … +- Pemuatan Preferensi pengguna … +- +- +- +- Preparing System Tray … +- Mempersiapkan Sistem Tray … +- +- +- +- Starting Window Manager … +- Memulai Manajer Jendela ... +- +- +- +- Detecting Applications … +- Mendeteksi Aplikasi ... +- +- +- +- Preparing Menus … +- Mempersiapkan Menu ... +- +- +- +- Preparing Workspace … +- Mempersiapkan Workspace ... +- +- +- +- Finalizing … +- Menyelesaikan ... +- +- +- +- Starting App: %1 +- Mulai App:% 1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_is.ts 2023-08-07 22:32:42.816922672 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_it.ts 2023-08-07 22:33:02.536911286 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Modulo +- +- +- +- Starting the Lumina Desktop... +- Si sta avviando Lumina Desktop... +- +- +- +- Version %1 +- Versione %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Questo tema desktop è alimentato da caffè, caffè, e ancora caffè. +- +- +- +- Keep up with desktop news! +- Tieniti informato con le novitĂ  sul desktop! +- +- +- +- There is a full handbook of information about the desktop available online. +- C'è un manuale ricco di informazioni su Lunina desktop disponibile in rete. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Vuoi cambiare l'interfaccia? Tutto è personalizzabile nella configurazione del desktop! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- Lumina può facilmente riprodurre l'interfaccia dalla maggior parte degli altri ambienti desktop. +- +- +- +- This desktop is generously sponsored by iXsystems +- Questo desktop è sponsorizzato da iXsystems +- +- +- +- I have never been hurt by what I have not said +- Non sono mai stato ferito da ciò che non ho detto +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- Ogni cosa ha la sua bellezza, ma non tutti la vedono. +- +- +- +- Before God we are all equally wise - and equally foolish. +- Davanti a Dio siamo tutti ugualmente saggi - ed altrettanto scioccchi. +- +- +- +- We cannot do everything at once, but we can do something at once. +- Non possiamo fare tutto in una volta, ma possiamo fare una cosa una volta sola. +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- Non puoi sapere troppo, ma puoi dire troppo. +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Inizializzazione Sessione +- +- +- +- Loading System Settings … +- Caricamento Impostazioni Sistema ... +- +- +- +- Loading User Preferences … +- Caricamento Preferenza Utente ,,, +- +- +- +- Preparing System Tray … +- Preparazione Tray Sistema ... +- +- +- +- Starting Window Manager … +- Avvio Gestore Finestre +- +- +- +- Detecting Applications … +- Individuazione Applicazioni ... +- +- +- +- Preparing Menus … +- Preparazione Menu ... +- +- +- +- Preparing Workspace … +- Preparazione Spazio Lavoro ... +- +- +- +- Finalizing … +- Finalizzazione ... +- +- +- +- Starting App: %1 +- Avvio App: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ja.ts 2023-08-07 22:33:22.916899506 +0200 +@@ -190,305 +190,6 @@ + + + +- BootSplash +- +- +- Form +- ă•ă‚©ăĽă  +- +- +- +- Starting the Lumina Desktop... +- Lumina ă‡ă‚ąă‚Żăăă—ă‚’čµ·ĺ‹•ă—ă¦ă„ăľă™... +- +- +- +- Version %1 +- ăăĽă‚¸ă§ăł %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- ă“ă®ă‡ă‚ąă‚Żăăă—ăŻă‚łăĽă’ăĽă¨ă‚łăĽă’ăĽă¨ă‚‚ă†ä¸€ćťŻă®ă‚łăĽă’ăĽă§ĺ‹•ă„ă¦ă„ăľă™ă€‚ +- +- +- +- Keep up with desktop news! +- ă‡ă‚ąă‚Żăăă—ă®ă‹ăĄăĽă‚ąă‚’ăă‚§ăクă—ă‚ă†! +- +- +- +- There is a full handbook of information about the desktop available online. +- ă‡ă‚ąă‚Żăăă—ă®ć…ĺ ±ăŻă‚Şăłă©ă‚¤ăłă®ăŹăłă‰ă–ăクă«ă‚りăľă™ă€‚ +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- イăłă‚żăĽă•ェイスを変更ă—ăźă„ă§ă™ă‹? ă‡ă‚ąă‚Żăăă—設定ă§ă„ろă„ろ変更ă§ăŤăľă™! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- Lumina ăŻä»–ă®ă‡ă‚ąă‚Żăăă—ç’°ĺ˘ă®č¨­ĺ®šă‚’ç°ˇĺŤă«ĺ†ŤçŹľă§ăŤăľă™ă€‚ +- +- +- +- This desktop is generously sponsored by iXsystems +- ă“ă®ă‡ă‚ąă‚Żăăă—ăŻĺŻ›ĺ¤§ăŞă‚‹ iXsystems ă«ć”ŻćŹ´ă•れă¦ă„ăľă™ +- +- +- +- I have never been hurt by what I have not said +- ç§ăŚä˝•も言わăŞă‘れă°čްă‹ă‚’ĺ‚·ă¤ă‘ă‚‹ă“ă¨ăŻăŞă„ +- +- +- +- Gotta have more cowbell! +- Gotta have more cowbell! +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- 神ă®ĺ‰Ťă§ăŻć‘々ăŻç­‰ă—ăŹčł˘ăŹâ€•―等ă—ăŹć„šă‹ă§ă‚‚ă‚る。 +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- ă‚»ăă‚·ă§ăłă‚’ĺťćśźĺŚ–ă—ă¦ă„ăľă™... +- +- +- +- Loading System Settings … +- シスă†ă č¨­ĺ®šă‚’ă­ăĽă‰ă—ă¦ă„ăľă™... +- +- +- +- Loading User Preferences … +- ă¦ăĽă‚¶ăĽč¨­ĺ®šă‚’ă­ăĽă‰ă—ă¦ă„ăľă™... +- +- +- +- Preparing System Tray … +- シスă†ă ăă¬ă‚¤ă‚’ćş–ĺ‚™ă—ă¦ă„ăľă™... +- +- +- +- Starting Window Manager … +- ウィăłă‰ă‚¦ăžăŤăĽă‚¸ăŁăĽă‚’čµ·ĺ‹•ă—ă¦ă„ăľă™... +- +- +- +- Detecting Applications … +- アă—ăŞă‚±ăĽă‚·ă§ăłă‚’検出ă—ă¦ă„ăľă™... +- +- +- +- Preparing Menus … +- ăˇă‹ăĄăĽă®ćş–備をă—ă¦ă„ăľă™... +- +- +- +- Preparing Workspace … +- ăŻăĽă‚Żă‚ąăšăĽă‚ąă®ćş–備をă—ă¦ă„ăľă™... +- +- +- +- Finalizing … +- 仕上ă’処ç†ă‚’実行ă—ă¦ă„ăľă™... +- +- +- +- Starting App: %1 +- スă—ă©ăă‚·ăĄç”»éť˘ă®ă†ă‚­ă‚ąă +- アă—ăŞă‚±ăĽă‚·ă§ăłă‚’čµ·ĺ‹•ă—ă¦ă„ăľă™: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ka.ts 2023-08-07 22:33:43.396887681 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ko.ts 2023-08-07 22:34:02.276876778 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- 양식 +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- ě„¸ě… ě´ę¸°í™” 중 ... +- +- +- +- Loading System Settings … +- 시스템 설정 읽는 중 ... +- +- +- +- Loading User Preferences … +- ě‚¬ěš©ěž ě„¤ě • 읽는 중 ... +- +- +- +- Preparing System Tray … +- 시스템 트ë ěť´ 준비 중 ... +- +- +- +- Starting Window Manager … +- ě°˝ ę´€ë¦¬ěž ě‹śěž‘ 중 ... +- +- +- +- Detecting Applications … +- 프로그램 찾는 중 ... +- +- +- +- Preparing Menus … +- 메뉴 준비 중 ... +- +- +- +- Preparing Workspace … +- 작업 공간 준비중 ... +- +- +- +- Finalizing … +- ë§ěąëŠ” 중 ... +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lt.ts 2023-08-07 22:34:19.696866717 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Forma +- +- +- +- Starting the Lumina Desktop... +- PaleidĹľiamas Lumina darbalaukis... +- +- +- +- Version %1 +- Versija %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Ĺ is darbalaukis veikia su kava, kava ir dar daugiau kavos. +- +- +- +- Keep up with desktop news! +- Sekite darbalaukio naujienas! +- +- +- +- There is a full handbook of information about the desktop available online. +- Internete yra prieinamas visas vadovÄ—lis informacijos apie darbalaukÄŻ. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Norite pakeisti sÄ…sajÄ…? Viskas yra tinkinama darbalaukio konfigĹ«racijoje! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- Lumina gali lengvai atkartoti daugelio kitĹł darbalaukiĹł aplinkĹł sÄ…sajÄ…. +- +- +- +- This desktop is generously sponsored by iXsystems +- Ĺ ÄŻ darbalaukÄŻ dosniai remia iXsystems +- +- +- +- I have never been hurt by what I have not said +- Man niekada nepakenkÄ— tai, ko aš nesakiau +- +- +- +- Gotta have more cowbell! +- Reikia daugiau varpeliĹł! +- +- +- +- Everything has its beauty but not everyone sees it. +- Viskas turi savo grožį, taÄŤiau ne visi jÄŻ mato. +- +- +- +- Before God we are all equally wise - and equally foolish. +- Prieš DievÄ… mes visi esame vienodai išmintingi - ir vienodai kvaili. +- +- +- +- We cannot do everything at once, but we can do something at once. +- Mes negalime visko daryti vienu metu, taÄŤiau galime vienu metu daryti kÄ… nors. +- +- +- +- One with the law is a majority. +- Ĺ˝mogus su ÄŻstatymu yra dauguma. +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- NesitikÄ—k padrÄ…sinti silpnus, Ĺľemindamas stiprius. +- +- +- +- You can't know too much, but you can say too much. +- Negali per daug Ĺľinoti, taÄŤiau gali per daug pasakyti. +- +- +- +- Duty is not collective; it is personal. +- Pareiga nÄ—ra kolektyvinis dalykas, tai yra asmeninis dalykas. +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- Bet kuri visuomenÄ—, kuri paaukos truputÄŻ laisvÄ—s tam, kad ÄŻgautĹł truputÄŻ saugumo, nepelnys nei vieno ir praras abu. +- +- +- +- Never trust a computer you can’t throw out a window. +- Niekada nepasitikÄ—k kompiuteriu, kurio negali išmesti pro langÄ…. +- +- +- +- Study the past if you would define the future. +- NagrinÄ—k praeitÄŻ, jeigu nori apibrÄ—Ĺľti ateitÄŻ. +- +- +- +- The way to get started is to quit talking and begin doing. +- Darbo pradĹľios paslaptis yra nustoti kalbÄ—ti ir pradÄ—ti daryti. +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- Prašykite, ir jums bus duota; ieškokite, ir rasite; belskite, ir jums bus atidaryta. +- +- +- +- Start where you are. Use what you have. Do what you can. +- PradÄ—k ten, kur esi. Naudok tai, kÄ… turi. Daryk tai, kÄ… gali. +- +- +- +- A person who never made a mistake never tried anything new. +- Asmuo, kuris niekada neklydo, niekada nebandÄ— kaĹľkÄ… naujo. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- NÄ—ra svarbu kaip lÄ—tai judi tol, kol nenustoji judÄ—jÄ™s. +- +- +- +- Do what you can, where you are, with what you have. +- Daryk tai, kÄ… gali, ten, kur esi, tuo, kÄ… turi. +- +- +- +- Remember no one can make you feel inferior without your consent. +- Prisimink, niekas be tavo paties sutikimo negali priversti tavÄ™s jaustis menkesniu. +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- Svarbu ne nugyventĹł gyvenimo metĹł skaiÄŤius, o gyvenimas nugyventuose metuose. +- +- +- +- Either write something worth reading or do something worth writing. +- Arba parašyk kÄ… nors apie kÄ… verta skaityti, arba padaryk kÄ… nors apie kÄ… verta rašyti. +- +- +- +- The only way to do great work is to love what you do. +- Vienintelis bĹ«das gerai atlikti savo darbÄ… yra mÄ—gti tai kÄ… darai. +- +- +- +- Political correctness is tyranny with manners. +- Politinis korektiškumas - tai tironija su manieromis. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- Tik du dalykai yra beribiai: visata ir Ĺľmogaus kvailumas; taÄŤiau dÄ—l visatos aš nesu tikras. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- Aš suprantu, kad kuo daugiau aš dirbu, tuo labiau man sekasi. +- +- +- +- Do, or do not. There is no 'try'. +- Daryti arba nedaryti. NÄ—ra "bandyti". +- +- +- +- A mathematician is a device for turning coffee into theorems. +- Matematikas yra ÄŻrenginys, skirtas paversti kavÄ… ÄŻ teoremas. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- Geriems ĹľmonÄ—ms nereikia ÄŻstatymĹł, kad elgtĹłsi atsakingai, tuo tarpu blogi ĹľmonÄ—s ras bĹ«dus kaip apeiti ÄŻstatymus. +- +- +- +- Black holes are where God divided by zero. +- Juodosios skylÄ—s yra ten, kur Dievas padalijo iš nulio. +- +- +- +- It's kind of fun to do the impossible. +- Smagu yra daryti tai, kas neÄŻmanoma. +- +- +- +- Knowledge speaks, but wisdom listens. +- Ĺ˝inios kalba, taÄŤiau išmintis klauso. +- +- +- +- A witty saying proves nothing. +- SÄ…mojingas pasakymas nieko neÄŻrodo. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- SÄ—kmÄ—, daĹľniausiai, nusišypso tiems, kas yra pernelyg uĹľsiÄ—mÄ™, kad jos ieškotĹł. +- +- +- +- Well-timed silence hath more eloquence than speech. +- SavalaikÄ— tyla yra iškalbingesnÄ— uĹľ kalbÄ…. +- +- +- +- I have never let my schooling interfere with my education. +- Aš niekada neleidau, kad mano mokslai trukdytĹł mano išsilavinimui. +- +- +- +- The best way to predict the future is to invent it. +- Geriausiai bĹ«das išpranašauti ateitÄŻ yra jÄ… išrasti. +- +- +- +- Well done is better than well said. +- Puikiai atlikta yra geriau nei puikiai pasakyta. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- Kartais, mums nepakanka daryti tai, kas geriausia; privalome daryti tai, kas reikalinga. +- +- +- +- The truth is more important than the facts. +- Tiesa yra svarbesnÄ— nei faktai. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- Geriau tylÄ—ti ir bĹ«ti palaikytu kvailiu, negu prakalbÄ—ti ir išsklaidyti visas abejones. +- +- +- +- Initializing Session … +- Inicijuojamas seansas … +- +- +- +- Loading System Settings … +- Ä®keliami sistemos nustatymai … +- +- +- +- Loading User Preferences … +- Ä®keliamos naudotojo nuostatos … +- +- +- +- Preparing System Tray … +- Paruošiamas sistemos dÄ—klas … +- +- +- +- Starting Window Manager … +- PaleidĹľiama langĹł tvarkytuvÄ— … +- +- +- +- Detecting Applications … +- Aptinkamos programos … +- +- +- +- Preparing Menus … +- Paruošiami meniu … +- +- +- +- Preparing Workspace … +- Paruošiama darbo sritis … +- +- +- +- Finalizing … +- UĹľbaigiama … +- +- +- +- Starting App: %1 +- PaleidĹľiama programa: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_lv.ts 2023-08-07 22:34:42.206853716 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Forma +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- InicializÄ“ sesiju … +- +- +- +- Loading System Settings … +- IelÄdÄ“ sistÄ“mas iestatÄ«jumus … +- +- +- +- Loading User Preferences … +- IelÄdÄ“ lietotÄja preferences … +- +- +- +- Preparing System Tray … +- Sagatavo sistÄ“mas ikonjoslu … +- +- +- +- Starting Window Manager … +- StartÄ“ logu pÄrvaldnieku … +- +- +- +- Detecting Applications … +- DetektÄ“ lietojumprogrammas … +- +- +- +- Preparing Menus … +- Sagatavo izvÄ“lnes … +- +- +- +- Preparing Workspace … +- Sagatavo darbvirsmu … +- +- +- +- Finalizing … +- Pabeidz … +- +- +- +- Starting App: %1 +- StartÄ“ lietotni: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mk.ts 2023-08-07 22:35:03.386841471 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mn.ts 2023-08-07 22:35:25.546828664 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ms.ts 2023-08-07 22:35:45.886816906 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_mt.ts 2023-08-07 22:36:16.286799347 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nb.ts 2023-08-07 22:36:34.676788728 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ne.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ne.ts 2023-08-07 22:36:53.666777755 +0200 +@@ -137,64 +137,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_nl.ts 2023-08-07 22:37:13.006766581 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulier +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Bezig met initialiseren van sessie... +- +- +- +- Loading System Settings … +- Bezig met laden van systeeminstellingen... +- +- +- +- Loading User Preferences … +- Bezig met laden van gebruikersvoorkeuren... +- +- +- +- Preparing System Tray … +- Bezig met voorbereiden van systeemvak... +- +- +- +- Starting Window Manager … +- Bezig met starten van vensterbeheerder... +- +- +- +- Detecting Applications … +- Bezig met analyseren van applicaties... +- +- +- +- Preparing Menus … +- Bezig met voorbereiden van menu's... +- +- +- +- Preparing Workspace … +- Bezig met voorbereiden van werkruimte... +- +- +- +- Finalizing … +- Bezig met voltooien... +- +- +- +- Starting App: %1 +- Bezig met starten van app: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pa.ts 2023-08-07 22:37:34.526754146 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pl.ts 2023-08-07 22:38:11.816732606 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formularz +- +- +- +- Starting the Lumina Desktop... +- Uruchamianie pulpitu Lumina... +- +- +- +- Version %1 +- Wersja %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Ten pulpit zasilany jest przez kawÄ™ , kawÄ™, i jeszcze raz kawÄ™. +- +- +- +- Keep up with desktop news! +- BÄ…dĹş na bieĹĽÄ…cÄ… z wiadomoĹ›ciami! +- +- +- +- There is a full handbook of information about the desktop available online. +- PodrÄ™cznik uĹĽytkownika pulpitu jest dostÄ™pny online. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Chcesz zmienić interfejs? Wszystkie konfigurowalne elementy znajdujÄ… siÄ™ w konfiguracji pulpitu! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- Lumina potrafi w Ĺ‚atwy sposĂłb odtworzyć interfejsy innych Ĺ›rodowisk graficznych. +- +- +- +- This desktop is generously sponsored by iXsystems +- Ten pulpit jest szczodrze sponsorowany przez iXsystems +- +- +- +- I have never been hurt by what I have not said +- Nigdy nie zostaĹ‚em zraniony przez to, czego nie wypowiedziaĹ‚em +- +- +- +- Gotta have more cowbell! +- Gotta have more cowbell! +- +- +- +- Everything has its beauty but not everyone sees it. +- Wszystko ma swoje piÄ™kno, ale nie kaĹĽdy jest w stanie to piÄ™kno dostrzec. +- +- +- +- Before God we are all equally wise - and equally foolish. +- Przed Bogiem wszyscy jesteĹ›my rĂłwnie mÄ…drzy, co rĂłwnie gĹ‚upi. +- +- +- +- We cannot do everything at once, but we can do something at once. +- Nie moĹĽemy robić wszystkiego naraz, ale moĹĽemy robić coĹ› na raz. +- +- +- +- One with the law is a majority. +- Ten po ktĂłrego stronie stoi prawo, ten jest wiÄ™kszoĹ›ciÄ…. +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- Nie oczekuje wzmacniania sĹ‚abych osĹ‚abianiem silnych. +- +- +- +- You can't know too much, but you can say too much. +- Nie moĹĽesz wiedzieć za duĹĽo, ale moĹĽesz powiedzieć za duĹĽo. +- +- +- +- Duty is not collective; it is personal. +- ObowiÄ…zek to nie kolektyw, to sprawa osobista. +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- Never trust a computer you can’t throw out a window. +- Never trust a computer you can’t throw out a window. +- +- +- +- Study the past if you would define the future. +- Study the past if you would define the future. +- +- +- +- The way to get started is to quit talking and begin doing. +- The way to get started is to quit talking and begin doing. +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- Start where you are. Use what you have. Do what you can. +- Start where you are. Use what you have. Do what you can. +- +- +- +- A person who never made a mistake never tried anything new. +- A person who never made a mistake never tried anything new. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- Do what you can, where you are, with what you have. +- Do what you can, where you are, with what you have. +- +- +- +- Remember no one can make you feel inferior without your consent. +- Remember no one can make you feel inferior without your consent. +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- Either write something worth reading or do something worth writing. +- Either write something worth reading or do something worth writing. +- +- +- +- The only way to do great work is to love what you do. +- The only way to do great work is to love what you do. +- +- +- +- Political correctness is tyranny with manners. +- Political correctness is tyranny with manners. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- I find that the harder I work, the more luck I seem to have. +- +- +- +- Do, or do not. There is no 'try'. +- Do, or do not. There is no 'try'. +- +- +- +- A mathematician is a device for turning coffee into theorems. +- A mathematician is a device for turning coffee into theorems. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- Black holes are where God divided by zero. +- Black holes are where God divided by zero. +- +- +- +- It's kind of fun to do the impossible. +- It's kind of fun to do the impossible. +- +- +- +- Knowledge speaks, but wisdom listens. +- Knowledge speaks, but wisdom listens. +- +- +- +- A witty saying proves nothing. +- A witty saying proves nothing. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- Well-timed silence hath more eloquence than speech. +- Well-timed silence hath more eloquence than speech. +- +- +- +- I have never let my schooling interfere with my education. +- I have never let my schooling interfere with my education. +- +- +- +- The best way to predict the future is to invent it. +- The best way to predict the future is to invent it. +- +- +- +- Well done is better than well said. +- Well done is better than well said. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- The truth is more important than the facts. +- The truth is more important than the facts. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- Initializing Session … +- Inicjowanie sesji … +- +- +- +- Loading System Settings … +- Wczytywanie ustawieĹ„ systemowych … +- +- +- +- Loading User Preferences … +- Wczytywanie ustawieĹ„ uĹĽytkownika … +- +- +- +- Preparing System Tray … +- Przygotowywanie zasobnika systemowego … +- +- +- +- Starting Window Manager … +- Uruchamianie menedĹĽera okien … +- +- +- +- Detecting Applications … +- Wykrywanie aplikacji … +- +- +- +- Preparing Menus … +- Przygotowywanie menu … +- +- +- +- Preparing Workspace … +- Przygotowywanie obszaru roboczego … +- +- +- +- Finalizing … +- KoĹ„czenie … +- +- +- +- Starting App: %1 +- Uruchamianie: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt.ts 2023-08-07 22:38:35.466718952 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulário +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_pt_BR.ts 2023-08-07 22:38:52.586709063 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulário +- +- +- +- Starting the Lumina Desktop... +- Iniciando o ambiente de trabalho do Lumina... +- +- +- +- Version %1 +- VersĂŁo %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Este ambiente de trabalho Ă© alimentado por cafĂ©, cafĂ© e mais cafĂ©. +- +- +- +- Keep up with desktop news! +- Mantenha-se informado com notĂ­cias do ambiente de trabalho! +- +- +- +- There is a full handbook of information about the desktop available online. +- Existe um manual completo de informações sobre o ambiente de trabalho disponĂ­vel on-line. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Quer mudar a interface? Tudo Ă© personalizável na configuração do ambiente de trabalho! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- A Lumina pode facilmente reproduzir a interface da maioria dos outros ambientes de trabalho. +- +- +- +- This desktop is generously sponsored by iXsystems +- Este ambiente de trabalho Ă© generosamente patrocinado pela iXsystems +- +- +- +- I have never been hurt by what I have not said +- Eu nunca fui ferido pelo o que eu nĂŁo disse +- +- +- +- Gotta have more cowbell! +- Tenho que ter mais sinos tocando! +- +- +- +- Everything has its beauty but not everyone sees it. +- Há beleza em tudo, mas nem todos a vĂŞem. +- +- +- +- Before God we are all equally wise - and equally foolish. +- Diante de Deus, todos somos igualmente sábios - e igualmente tolos. +- +- +- +- We cannot do everything at once, but we can do something at once. +- NĂŁo podemos fazer tudo de uma vez, mas podemos fazer algo de uma vez. +- +- +- +- One with the law is a majority. +- Um seguindo a lei Ă© uma maioria. +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- NĂŁo espere fortalecer o fraco puxando para baixo o forte. +- +- +- +- You can't know too much, but you can say too much. +- VocĂŞ nĂŁo pode saber muito, mas pode dizer demais. +- +- +- +- Duty is not collective; it is personal. +- O dever nĂŁo Ă© coletivo; Ă© pessoal. +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- Qualquer sociedade que daria um pouco de liberdade para ganhar um pouco de segurança nĂŁo merecerá nenhum e perderá ambos. +- +- +- +- Never trust a computer you can’t throw out a window. +- Nunca confie em um computador que vocĂŞ nĂŁo pode jogar para fora de uma janela. +- +- +- +- Study the past if you would define the future. +- Estude o passado se vocĂŞ for definir o futuro. +- +- +- +- The way to get started is to quit talking and begin doing. +- A maneira de começar Ă© parar de falar e começar a fazer. +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- Peça e lhe será dado; procure, e vocĂŞ encontrará; bata e a porta será aberta para vocĂŞ. +- +- +- +- Start where you are. Use what you have. Do what you can. +- Comece onde está. Use o que vocĂŞ tem. Faça o que possa. +- +- +- +- A person who never made a mistake never tried anything new. +- Uma pessoa que nunca cometeu um erro nunca tentou algo novo. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- NĂŁo importa como lentamente vocĂŞ vai, contanto que vocĂŞ nĂŁo pare. +- +- +- +- Do what you can, where you are, with what you have. +- Faça o que puder, onde estiver, com o que tem. +- +- +- +- Remember no one can make you feel inferior without your consent. +- Lembre-se que ninguĂ©m pode fazer vocĂŞ se sentir inferior sem o seu consentimento. +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- NĂŁo sĂŁo os anos em sua vida que contam. É a vida em seus anos. +- +- +- +- Either write something worth reading or do something worth writing. +- Ou escreva algo que vale a pena ler, ou façar algo que vale a pena escrever. +- +- +- +- The only way to do great work is to love what you do. +- A Ăşnica maneira de fazer um excelente trabalho Ă© amar o que vocĂŞ faz. +- +- +- +- Political correctness is tyranny with manners. +- Politicamente correto Ă© tirania com maneiras. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- SĂł duas coisas sĂŁo infinitas, o universo e a estupidez humana, e eu nĂŁo tenho certeza sobre o primeiro. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- Acho que quanto mais trabalho duro, mais sorte tenho. +- +- +- +- Do, or do not. There is no 'try'. +- Faça, ou nĂŁo. NĂŁo há 'tentativa'. +- +- +- +- A mathematician is a device for turning coffee into theorems. +- Um matemático Ă© um dispositivo para transformar cafĂ© em teoremas. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- As pessoas boas nĂŁo precisam de leis para dizer como agir com responsabilidade, enquanto as pessoas más vĂŁo encontrar uma maneira de contornar as leis. +- +- +- +- Black holes are where God divided by zero. +- Buracos negros sĂŁo onde Deus Ă© dividido por zero. +- +- +- +- It's kind of fun to do the impossible. +- É meio divertido fazer o impossĂ­vel. +- +- +- +- Knowledge speaks, but wisdom listens. +- O conhecimento fala, mas a sabedoria ouve. +- +- +- +- A witty saying proves nothing. +- Um ditado espirituoso nĂŁo prova nada. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- Sucesso geralmente vem para aqueles que estĂŁo muito ocupados para estar procurando por ele. +- +- +- +- Well-timed silence hath more eloquence than speech. +- O silĂŞncio bem medido tem mais eloquĂŞncia do que o discurso. +- +- +- +- I have never let my schooling interfere with my education. +- Eu nunca deixei minha instrução interferir com minha educação. +- +- +- +- The best way to predict the future is to invent it. +- A melhor maneira de prever o futuro Ă© inventá-lo. +- +- +- +- Well done is better than well said. +- Bem feito Ă© melhor do que bem dito. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- Ă€s vezes nĂŁo Ă© suficiente que façamos o nosso melhor; devemos fazer o que Ă© necessário. +- +- +- +- The truth is more important than the facts. +- A verdade Ă© mais importante do que os fatos. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- É melhor ficar em silĂŞncio e ser pensado um tolo do que falar e remover todas as dĂşvidas. +- +- +- +- Initializing Session … +- Inicializando sessĂŁo… +- +- +- +- Loading System Settings … +- Carregando configurações do sistema… +- +- +- +- Loading User Preferences … +- Carregando preferĂŞncias do usuário… +- +- +- +- Preparing System Tray … +- Preparando bandeja do sistema… +- +- +- +- Starting Window Manager … +- Iniciando gerenciador de janelas … +- +- +- +- Detecting Applications … +- Detectando aplicativos… +- +- +- +- Preparing Menus … +- Preparando menus… +- +- +- +- Preparing Workspace … +- Preparando o espaço de trabalho… +- +- +- +- Finalizing … +- Finalizando… +- +- +- +- Starting App: %1 +- Iniciando aplicativo: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ro.ts 2023-08-07 22:39:11.506698139 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ru.ts 2023-08-07 22:39:34.326684952 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- ЗагрŃзка +- +- +- +- Starting the Lumina Desktop... +- ЗапŃŃĐş рабочего Ńтола Lumina... +- +- +- +- Version %1 +- ВерŃия %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Рабочий Ńтол заряжаетŃŃŹ от кофе, кофе и еще раз кофе. +- +- +- +- Keep up with desktop news! +- Следите за новоŃтями рабочего Ńтола! +- +- +- +- There is a full handbook of information about the desktop available online. +- Полный Ńправочник информации Đľ рабочем Ńтоле Đ´ĐľŃŃ‚Ńпен в Đнтернете. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- Хотите изменить интерфейŃ? Đ’Ńе наŃтраиваетŃŃŹ в конфигŃрации рабочего Ńтола! +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- Lumina может легко воŃпроизвеŃти Đ¸Đ˝Ń‚ĐµŃ€Ń„ĐµĐąŃ Đ±ĐľĐ»ŃŚŃинŃтва Đ´Ń€Ńгих наŃтольных Ńред. +- +- +- +- This desktop is generously sponsored by iXsystems +- Этот рабочий Ńтол щедро ŃпонŃирŃетŃŃŹ iXsystems +- +- +- +- I have never been hurt by what I have not said +- ĐŻ никогда не Ńтрадал из-за того, что ŃŹ не Ńказал +- +- +- +- Gotta have more cowbell! +- ĐŁ Готты больŃе колокольчиков! +- +- +- +- Everything has its beauty but not everyone sees it. +- Đ’Ńе имеет Ńвою краŃотŃ, но не каждый видит ее. +- +- +- +- Before God we are all equally wise - and equally foolish. +- Перед Богом ĐĽŃ‹ вŃе одинаково ĐĽŃдрый - и Ńтоль же глŃпы. +- +- +- +- We cannot do everything at once, but we can do something at once. +- Мы не можем Ńделать вŃе ŃразŃ, но ĐĽŃ‹ можем Ńделать что-то ŃразŃ. +- +- +- +- One with the law is a majority. +- Один Ń Đ·Đ°ĐşĐľĐ˝ĐľĐĽ являетŃŃŹ больŃинŃтвом. +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- Не ждите, чтобы Ńоздать Ńлабое, потянŃв вниз Ńильное. +- +- +- +- You can't know too much, but you can say too much. +- Đ’Ń‹ не можете знать ŃлиŃком много, но вы можете Ńказать ŃлиŃком много. +- +- +- +- Duty is not collective; it is personal. +- ОбязанноŃть не коллективная; это личное. +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- Любое общеŃтво, которое дало бы немного Ńвободы, чтобы полŃчить немного безопаŃноŃти, бŃдет не заŃĐ»Ńживать их и потеряет обоих. +- +- +- +- Never trust a computer you can’t throw out a window. +- Никогда не доверяй компьютерŃ, вы не можете броŃить окна. +- +- +- +- Study the past if you would define the future. +- ĐĐ·Ńчите проŃлое, еŃли вы хотите определить бŃĐ´Ńщее. +- +- +- +- The way to get started is to quit talking and begin doing. +- СпоŃоб начать - это броŃить говорить и начать делать. +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- ПроŃите и дано бŃдет вам; ищите и найдете; ŃŃ‚Ńчите и откроют вам. +- +- +- +- Start where you are. Use what you have. Do what you can. +- Начните, где вы находитеŃŃŚ. ĐŃпользŃйте то, что Ń Đ˛Đ°Ń ĐµŃть. Делать то, что вы можете. +- +- +- +- A person who never made a mistake never tried anything new. +- Человек, который никогда не Ńделал ĐľŃĐ¸Đ±ĐşŃ - никогда не пробовал ничего нового. +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- Не важно, как медленно вы идете Đ´Đľ тех пор, пока вы не ĐľŃтановить. +- +- +- +- Do what you can, where you are, with what you have. +- Делайте то, что вы можете, где вы находитеŃŃŚ, Ń Ń‚ĐµĐĽ, что Ń Đ˛Đ°Ń ĐµŃть. +- +- +- +- Remember no one can make you feel inferior without your consent. +- Помните, что никто не может заŃтавить Đ˛Đ°Ń Ń‡ŃвŃтвовать Ńебя Ń…Ńже без ваŃего ŃоглаŃия. +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- Это не годы в ваŃей жизни. Это жизнь в ваŃих годах. +- +- +- +- Either write something worth reading or do something worth writing. +- Что бы напиŃать что-то - Ńтоит прочитать, что бы Ńделать что-то - Ńтоит напиŃать. +- +- +- +- The only way to do great work is to love what you do. +- ЕдинŃтвенный ŃпоŃоб Ńделать больŃŃŃŽ Ń€Đ°Đ±ĐľŃ‚Ń Đ»ŃŽĐ±Đ¸Ń‚ŃŚ то, что вы делаете. +- +- +- +- Political correctness is tyranny with manners. +- ПолиткорректноŃть - тирания Ń ĐĽĐ°Đ˝ĐµŃ€Đ°ĐĽĐ¸. +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- Только две вещи беŃконечны, вŃеленная и человечеŃкая глŃпоŃть. +- +- +- +- I find that the harder I work, the more luck I seem to have. +- ĐŻ Ńчитаю, что чем больŃе ŃŹ работаю, тем больŃе Ńдачи Ń ĐĽĐµĐ˝ŃŹ. +- +- +- +- Do, or do not. There is no 'try'. +- Делай, или не делай. Не пробŃĐą. +- +- +- +- A mathematician is a device for turning coffee into theorems. +- Математик предŃтавляет Ńобой ŃŃтройŃтво для превращения кофе в теоремы. +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- ХороŃим людям не Đ˝Ńжны законы, чтобы Ńказать им дейŃтвовать ответŃтвенно, в то время как плохие люди найдŃŃ‚ ŃпоŃоб обойти законы. +- +- +- +- Black holes are where God divided by zero. +- Черные дыры - это где Бог делен на ноль. +- +- +- +- It's kind of fun to do the impossible. +- Это Ńвоего рода забава - Ńделать невозможное. +- +- +- +- Knowledge speaks, but wisdom listens. +- Знание говорит, но ĐĽŃдроŃть ŃĐ»ŃŃает. +- +- +- +- A witty saying proves nothing. +- ĐžŃтроŃмное выŃказывание ничего не доказывает. +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- ĐŁŃпех обычно приходит Đş тем, кто ŃлиŃком занят, чтобы иŃкать его. +- +- +- +- Well-timed silence hath more eloquence than speech. +- Своевременное молчание более краŃноречиво, чем Ńлова. +- +- +- +- I have never let my schooling interfere with my education. +- ĐŻ никогда не позволял ĐĽĐľĐµĐĽŃ ŃĐşĐľĐ»ŃŚĐ˝ĐľĐĽŃ ĐľĐ±Ńчению вмеŃиватьŃŃŹ в мое образование. +- +- +- +- The best way to predict the future is to invent it. +- Đ›ŃчŃий ŃпоŃоб предŃказать бŃĐ´Ńщее это Ńоздать его. +- +- +- +- Well done is better than well said. +- МеньŃе болтай, больŃе делай. +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- Đногда не Đ´ĐľŃтаточно того, что ĐĽŃ‹ делаем вŃе возможное; ĐĽŃ‹ должны делать то, что требŃетŃŃŹ. +- +- +- +- The truth is more important than the facts. +- Правда важнее фактов. +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- Đ›ŃчŃе молчать и Ńлыть Đ´Ńраком, чем говорить и Ńдалить вŃе Ńомнения. +- +- +- +- Initializing Session … +- Đнициализация ŃеŃŃии … +- +- +- +- Loading System Settings … +- ЗагрŃзка параметров ŃиŃтемы … +- +- +- +- Loading User Preferences … +- ЗагрŃзка пользовательŃких наŃтроек … +- +- +- +- Preparing System Tray … +- Подготовка СиŃтемного лотка … +- +- +- +- Starting Window Manager … +- ЗапŃŃĐş Менеджера окон … +- +- +- +- Detecting Applications … +- ОбнарŃжение Приложений … +- +- +- +- Preparing Menus … +- Подготовка Меню … +- +- +- +- Preparing Workspace … +- Подготовка Рабочей облаŃти … +- +- +- +- Finalizing … +- ЗаверŃение … +- +- +- +- Starting App: %1 +- ЗапŃŃĐş приложения: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sa.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sa.ts 2023-08-07 22:39:53.676673772 +0200 +@@ -137,64 +137,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sk.ts 2023-08-07 22:40:15.296661281 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulár +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Inicializácia Session +- +- +- +- Loading System Settings … +- Spúšťanie nastavenia systĂ©mu +- +- +- +- Loading User Preferences … +- Spustenie užívateÄľskĂ˝ch nastavenĂ­ +- +- +- +- Preparing System Tray … +- PrĂ­prava System Tray +- +- +- +- Starting Window Manager … +- Spúšťa sa Správca okien +- +- +- +- Detecting Applications … +- Detekcia aplikáciĂ­ +- +- +- +- Preparing Menus … +- PrĂ­prava ponĂşk +- +- +- +- Preparing Workspace … +- PrĂ­prava pracovnej plochy +- +- +- +- Finalizing … +- DokonÄŤenie +- +- +- +- Starting App: %1 +- Spustenie aplikácie %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sl.ts 2023-08-07 22:40:43.496644992 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sr.ts 2023-08-07 22:41:03.376633508 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sv.ts 2023-08-07 22:41:28.886618771 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Formulär +- +- +- +- Starting the Lumina Desktop... +- Startar Lumina-skrivbordet... +- +- +- +- Version %1 +- Version %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- Detta skrivbord drivs av kaffe, kaffe och mer kaffe. +- +- +- +- Keep up with desktop news! +- HĂĄll dig uppdaterad med skrivbordsnyheterna! +- +- +- +- There is a full handbook of information about the desktop available online. +- Det finns en handbok full av information om skrivbordet tillgängligt online. +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Initierar session … +- +- +- +- Loading System Settings … +- Laddar systeminställningar ... +- +- +- +- Loading User Preferences … +- Laddar användarinställningar … +- +- +- +- Preparing System Tray … +- Förbereder System bricka… +- +- +- +- Starting Window Manager … +- Startar fönsterhanterare … +- +- +- +- Detecting Applications … +- Upptäcker program… +- +- +- +- Preparing Menus … +- Förbereder menyer… +- +- +- +- Preparing Workspace … +- Förbereder arbetsytor… +- +- +- +- Finalizing … +- Slutför… +- +- +- +- Starting App: %1 +- Startar program: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_sw.ts 2023-08-07 22:41:46.846608405 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ta.ts 2023-08-07 22:42:06.876596829 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tg.ts 2023-08-07 22:42:22.846587600 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_th.ts 2023-08-07 22:42:40.766577251 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_tr.ts 2023-08-07 22:42:57.096567816 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Form +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Oturum BaĹźlatılıyor … +- +- +- +- Loading System Settings … +- Sistem Ayarları YĂĽkleniyor … +- +- +- +- Loading User Preferences … +- Kullanıcı Tercihleri YĂĽkleniyor … +- +- +- +- Preparing System Tray … +- Bildirim Alanı Hazırlanıyor … +- +- +- +- Starting Window Manager … +- Pencere Yöneticisi BaĹźlatılıyor … +- +- +- +- Detecting Applications … +- Uygulamalar Algılanıyor … +- +- +- +- Preparing Menus … +- MenĂĽler Hazırlanıyor … +- +- +- +- Preparing Workspace … +- Çalışma Alanı Hazırlanıyor … +- +- +- +- Finalizing … +- Tamamlanıyor … +- +- +- +- Starting App: %1 +- Uygulama BaĹźlatılıyor: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uk.ts 2023-08-07 22:43:22.676553035 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- Форма +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- Ініціалізація ŃеанŃŃ... +- +- +- +- Loading System Settings … +- Читання параметрів ŃиŃтеми... +- +- +- +- Loading User Preferences … +- Читання налаŃŃ‚Ńвань кориŃŃ‚Ńвача… +- +- +- +- Preparing System Tray … +- Підготовка ŃиŃтемного лотка... +- +- +- +- Starting Window Manager … +- ЗапŃŃĐş віконного менеджера... +- +- +- +- Detecting Applications … +- Виявлення додатків... +- +- +- +- Preparing Menus … +- Підготовка меню... +- +- +- +- Preparing Workspace … +- Підготовка робочої облаŃті... +- +- +- +- Finalizing … +- ЗаверŃення... +- +- +- +- Starting App: %1 +- ЗапŃŃĐş: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ur.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_ur.ts 2023-08-07 22:43:40.876542519 +0200 +@@ -137,64 +137,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_uz.ts 2023-08-07 22:43:58.486532349 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_vi.ts 2023-08-07 22:44:16.776521795 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_CN.ts 2023-08-07 22:44:35.256511104 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- 表单 +- +- +- +- Starting the Lumina Desktop... +- 正在ĺŻĺЍ Lumina 桌面... +- +- +- +- Version %1 +- ç‰ćś¬ %1 +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- äżťćŚćˇŚéť˘ćś€ć–°ďĽ +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- ćłć”ąĺŹç•Śéť˘ďĽźćˇŚéť˘é…Ťç˝®ä¸­çš„一ĺ‡é˝ćŻĺŹŻĺ®šĺ¶çš„ďĽ +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- 这个桌面ćŻç”± iXsystems 慷慨赞助 +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- 万物皆有动人之处,然非众人皆č˝ć´žć‚‰ă€‚ +- +- +- +- Before God we are all equally wise - and equally foolish. +- 在上帝面前,ć‘们é˝ĺŚć ·čŞćŽďĽŚĺŚć ·ć„šč ˘ă€‚ +- +- +- +- We cannot do everything at once, but we can do something at once. +- ć‘们不č˝é©¬ä¸ŠĺšćŻŹä»¶äş‹ďĽŚä˝†ć‘们可以马上ĺšćźäş‹ă€‚ +- +- +- +- One with the law is a majority. +- č°ć‹Ąćś‰ćł•律,č°ĺ°±ćŻĺ¤§ĺ¤šć•°ă€‚ +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- 永远不č¦äżˇä»»é‚Łäş›ä˝ ć— ćł•将其抛出窗外的电脑。 +- +- +- +- Study the past if you would define the future. +- 如果你ćłĺ®šäą‰ćśŞćťĄďĽŚĺ°±čŻ·ç ”ç©¶čż‡ĺŽ»ă€‚ +- +- +- +- The way to get started is to quit talking and begin doing. +- 开始的方法ćŻć”ľĺĽčŻ´ďĽŚĺĽ€ĺ§‹ĺšă€‚ +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- 你们çĄć±‚,就给你们;寻找,就寻č§ďĽ›ĺŹ©é—¨ďĽŚĺ°±ç»™ä˝ ĺĽ€é—¨ă€‚ +- +- +- +- Start where you are. Use what you have. Do what you can. +- 从哪跌倒,从哪ç¬čµ·ćťĄďĽŚçŹŤćśä˝ ć‰€ć‹Ąćś‰çš„。ĺšä˝ č˝ĺšçš„。 +- +- +- +- A person who never made a mistake never tried anything new. +- 从不犯错的人也从不尝试新的事物。 +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- 无论你走得多慢,只č¦ä˝ ä¸Ťĺść­˘ă€‚ +- +- +- +- Do what you can, where you are, with what you have. +- 无论身处何ĺ˘,倾你所有,尽你所č˝ă€‚ +- +- +- +- Remember no one can make you feel inferior without your consent. +- 不č¦ĺ¦„自菲薄。 +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- 重č¦çš„不ćŻä˝ ć´»äş†ĺ¤šäą…,而ćŻć€Žäąć´»ă€‚ +- +- +- +- Either write something worth reading or do something worth writing. +- č¦äąĺ†™ä¸€äş›ĺ€Ľĺľ—读的,č¦äąĺšä¸€äş›ĺ€Ľĺľ—写的。 +- +- +- +- The only way to do great work is to love what you do. +- ć大事的唯一途径就ćŻĺšč‡Şĺ·±ĺ–ść¬˘ĺšçš„äş‹ć…。 +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- 有两件事ćŻć— é™çš„,宇宙和人类的愚蠢,而ć‘对前者不确定。 +- +- +- +- I find that the harder I work, the more luck I seem to have. +- ć‘发现,ć‘č¶ŠćŻĺŠŞĺŠ›ďĽŚĺ°±č¶ŠĺŹ‘ĺą¸čżă€‚ +- +- +- +- Do, or do not. There is no 'try'. +- ĺšďĽŚć–不ĺšă€‚没有“尝试”。 +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- 好人不需č¦ćł•律告知他们负起责任,ć¶äşşć€»ćŻç»•法律边çĽč€ŚčˇŚă€‚ +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- äąĺś¨ä¸şä¸ŤĺŹŻä¸şäą‹äş‹ă€‚ +- +- +- +- Knowledge speaks, but wisdom listens. +- 知识ćŻĺ€ľčŻ‰ďĽŚä˝†ć™şć…§ćŻĺ€ľĺ¬ă€‚ +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- ć功往往青çťé‚Łäş›ĺŠŞĺŠ›ä¸şĺ®ĺĄ‹ć–—的人们。 +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- 预测未来最好的方法就ćŻĺŹ‘ćŽćśŞćťĄă€‚ +- +- +- +- Well done is better than well said. +- 说的好不如ĺšçš„好。 +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- ä»…ä»…ĺšĺ°ć‘们的最好ćŻä¸Ťĺ¤źçš„,有时候ć‘们得达ĺ°č¦ć±‚。 +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- ĺšä¸€ä¸Şć¶é™¤ä¸€ĺ‡ç–‘虑的出头鸟,čżä¸Ťĺ¦‚äżťćŚć˛‰é»č˘«ĺ˝“ćĺ‚»ĺ­ă€‚ +- +- +- +- Initializing Session … +- 正在ĺťĺ§‹ĺŚ–äĽščŻťâ€¦ +- +- +- +- Loading System Settings … +- 载入系统设置… +- +- +- +- Loading User Preferences … +- 载入用ć·č®ľç˝®â€¦ +- +- +- +- Preparing System Tray … +- 准备系统ć‰ç›â€¦ +- +- +- +- Starting Window Manager … +- ĺŻĺŠ¨çŞ—ĺŹŁç®ˇç†ĺ™¨â€¦ +- +- +- +- Detecting Applications … +- 扫描应用程序… +- +- +- +- Preparing Menus … +- 准备菜单… +- +- +- +- Preparing Workspace … +- 准备工作区… +- +- +- +- Finalizing … +- 收尾… +- +- +- +- Starting App: %1 +- ĺŻĺŠ¨ç¨‹ĺşŹä¸­: %1 +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_HK.ts 2023-08-07 22:44:54.086500234 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zh_TW.ts 2023-08-07 22:45:16.206487452 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + +--- a/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/i18n/lumina-desktop_zu.ts 2023-08-07 22:45:33.166477654 +0200 +@@ -187,304 +187,6 @@ + + + +- BootSplash +- +- +- Form +- +- +- +- +- Starting the Lumina Desktop... +- +- +- +- +- Version %1 +- +- +- +- +- This desktop is powered by coffee, coffee, and more coffee. +- +- +- +- +- Keep up with desktop news! +- +- +- +- +- There is a full handbook of information about the desktop available online. +- +- +- +- +- Want to change the interface? Everything is customizable in the desktop configuration! +- +- +- +- +- Lumina can easily reproduce the interface from most other desktop environments. +- +- +- +- +- This desktop is generously sponsored by iXsystems +- +- +- +- +- I have never been hurt by what I have not said +- +- +- +- +- Gotta have more cowbell! +- +- +- +- +- Everything has its beauty but not everyone sees it. +- +- +- +- +- Before God we are all equally wise - and equally foolish. +- +- +- +- +- We cannot do everything at once, but we can do something at once. +- +- +- +- +- One with the law is a majority. +- +- +- +- +- Don't expect to build up the weak by pulling down the strong. +- +- +- +- +- You can't know too much, but you can say too much. +- +- +- +- +- Duty is not collective; it is personal. +- +- +- +- +- Any society that would give up a little liberty to gain a little security will deserve neither and lose both. +- +- +- +- +- Never trust a computer you can’t throw out a window. +- +- +- +- +- Study the past if you would define the future. +- +- +- +- +- The way to get started is to quit talking and begin doing. +- +- +- +- +- Ask and it will be given to you; search, and you will find; knock and the door will be opened for you. +- +- +- +- +- Start where you are. Use what you have. Do what you can. +- +- +- +- +- A person who never made a mistake never tried anything new. +- +- +- +- +- It does not matter how slowly you go as long as you do not stop. +- +- +- +- +- Do what you can, where you are, with what you have. +- +- +- +- +- Remember no one can make you feel inferior without your consent. +- +- +- +- +- It’s not the years in your life that count. It’s the life in your years. +- +- +- +- +- Either write something worth reading or do something worth writing. +- +- +- +- +- The only way to do great work is to love what you do. +- +- +- +- +- Political correctness is tyranny with manners. +- +- +- +- +- Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. +- +- +- +- +- I find that the harder I work, the more luck I seem to have. +- +- +- +- +- Do, or do not. There is no 'try'. +- +- +- +- +- A mathematician is a device for turning coffee into theorems. +- +- +- +- +- Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws. +- +- +- +- +- Black holes are where God divided by zero. +- +- +- +- +- It's kind of fun to do the impossible. +- +- +- +- +- Knowledge speaks, but wisdom listens. +- +- +- +- +- A witty saying proves nothing. +- +- +- +- +- Success usually comes to those who are too busy to be looking for it. +- +- +- +- +- Well-timed silence hath more eloquence than speech. +- +- +- +- +- I have never let my schooling interfere with my education. +- +- +- +- +- The best way to predict the future is to invent it. +- +- +- +- +- Well done is better than well said. +- +- +- +- +- Sometimes it is not enough that we do our best; we must do what is required. +- +- +- +- +- The truth is more important than the facts. +- +- +- +- +- Better to remain silent and be thought a fool than to speak out and remove all doubt. +- +- +- +- +- Initializing Session … +- +- +- +- +- Loading System Settings … +- +- +- +- +- Loading User Preferences … +- +- +- +- +- Preparing System Tray … +- +- +- +- +- Starting Window Manager … +- +- +- +- +- Detecting Applications … +- +- +- +- +- Preparing Menus … +- +- +- +- +- Preparing Workspace … +- +- +- +- +- Finalizing … +- +- +- +- +- Starting App: %1 +- +- +- +- + DesktopViewPlugin + + diff --git a/lumina/distributor-logo-dark.svg b/lumina/distributor-logo-dark.svg new file mode 100644 index 0000000..a266d18 --- /dev/null +++ b/lumina/distributor-logo-dark.svg @@ -0,0 +1,7 @@ + + + + diff --git a/lumina/distributor-logo-light.svg b/lumina/distributor-logo-light.svg new file mode 100644 index 0000000..1001dbe --- /dev/null +++ b/lumina/distributor-logo-light.svg @@ -0,0 +1,7 @@ + + + + diff --git a/lumina/libre.patch b/lumina/libre.patch new file mode 100644 index 0000000..e62a9e4 --- /dev/null +++ b/lumina/libre.patch @@ -0,0 +1,268 @@ +diff --git a/port-files/FreeBSD/x11/lumina-core/pkg-plist b/port-files/FreeBSD/x11/lumina-core/pkg-plist +index 391d18ec..61885b29 100644 +--- a/port-files/FreeBSD/x11/lumina-core/pkg-plist ++++ b/port-files/FreeBSD/x11/lumina-core/pkg-plist +@@ -371,79 +371,18 @@ share/icons/material-design-dark/scalable/applications/accessories-calculator.sv + share/icons/material-design-dark/scalable/applications/accessories-character-map.svg + share/icons/material-design-dark/scalable/applications/accessories-dictionary.svg + share/icons/material-design-dark/scalable/applications/accessories-text-editor.svg +-share/icons/material-design-dark/scalable/applications/amazon.svg +-share/icons/material-design-dark/scalable/applications/android.svg + share/icons/material-design-dark/scalable/applications/angular.svg +-share/icons/material-design-dark/scalable/applications/apple-finder.svg +-share/icons/material-design-dark/scalable/applications/apple-ios.svg +-share/icons/material-design-dark/scalable/applications/apple-safari.svg +-share/icons/material-design-dark/scalable/applications/apple.svg +-share/icons/material-design-dark/scalable/applications/appnet.svg +-share/icons/material-design-dark/scalable/applications/basecamp.svg +-share/icons/material-design-dark/scalable/applications/beats.svg +-share/icons/material-design-dark/scalable/applications/bing.svg +-share/icons/material-design-dark/scalable/applications/bitbucket.svg +-share/icons/material-design-dark/scalable/applications/black-mesa.svg +-share/icons/material-design-dark/scalable/applications/blackberry.svg + share/icons/material-design-dark/scalable/applications/blender.svg +-share/icons/material-design-dark/scalable/applications/blogger.svg +-share/icons/material-design-dark/scalable/applications/clippy.svg +-share/icons/material-design-dark/scalable/applications/deviantart.svg +-share/icons/material-design-dark/scalable/applications/disqus.svg +-share/icons/material-design-dark/scalable/applications/dolby.svg +-share/icons/material-design-dark/scalable/applications/dribbble.svg +-share/icons/material-design-dark/scalable/applications/dropbox.svg + share/icons/material-design-dark/scalable/applications/drupal.svg +-share/icons/material-design-dark/scalable/applications/ebay.svg +-share/icons/material-design-dark/scalable/applications/edge.svg +-share/icons/material-design-dark/scalable/applications/emby.svg +-share/icons/material-design-dark/scalable/applications/etsy.svg +-share/icons/material-design-dark/scalable/applications/evernote.svg +-share/icons/material-design-dark/scalable/applications/facebook.svg +-share/icons/material-design-dark/scalable/applications/flattr.svg +-share/icons/material-design-dark/scalable/applications/foursquare.svg + share/icons/material-design-dark/scalable/applications/git.svg +-share/icons/material-design-dark/scalable/applications/github.svg +-share/icons/material-design-dark/scalable/applications/gmail.svg + share/icons/material-design-dark/scalable/applications/gnome.svg +-share/icons/material-design-dark/scalable/applications/google-cardboard.svg +-share/icons/material-design-dark/scalable/applications/google-chrome.svg +-share/icons/material-design-dark/scalable/applications/google-drive.svg +-share/icons/material-design-dark/scalable/applications/google-earth.svg +-share/icons/material-design-dark/scalable/applications/google-glass.svg +-share/icons/material-design-dark/scalable/applications/google-maps.svg +-share/icons/material-design-dark/scalable/applications/google-photos.svg +-share/icons/material-design-dark/scalable/applications/google-play.svg +-share/icons/material-design-dark/scalable/applications/google-plus.svg +-share/icons/material-design-dark/scalable/applications/google-translate.svg +-share/icons/material-design-dark/scalable/applications/google-wallet.svg +-share/icons/material-design-dark/scalable/applications/google.svg + share/icons/material-design-dark/scalable/applications/help-browser.svg +-share/icons/material-design-dark/scalable/applications/instagram.svg +-share/icons/material-design-dark/scalable/applications/internet-explorer.svg +-share/icons/material-design-dark/scalable/applications/itunes.svg +-share/icons/material-design-dark/scalable/applications/jira.svg +-share/icons/material-design-dark/scalable/applications/jsfiddle.svg + share/icons/material-design-dark/scalable/applications/kodi.svg +-share/icons/material-design-dark/scalable/applications/lastfm.svg +-share/icons/material-design-dark/scalable/applications/linkedin.svg +-share/icons/material-design-dark/scalable/applications/linode.svg + share/icons/material-design-dark/scalable/applications/linux.svg + share/icons/material-design-dark/scalable/applications/lumx.svg + share/icons/material-design-dark/scalable/applications/material-ui.svg + share/icons/material-design-dark/scalable/applications/meteor.svg +-share/icons/material-design-dark/scalable/applications/microsoft.svg +-share/icons/material-design-dark/scalable/applications/minecraft.svg +-share/icons/material-design-dark/scalable/applications/mixcloud.svg + share/icons/material-design-dark/scalable/applications/multimedia-volume-control.svg +-share/icons/material-design-dark/scalable/applications/nodejs.svg +-share/icons/material-design-dark/scalable/applications/npm.svg +-share/icons/material-design-dark/scalable/applications/onedrive.svg +-share/icons/material-design-dark/scalable/applications/opera.svg +-share/icons/material-design-dark/scalable/applications/pandora.svg +-share/icons/material-design-dark/scalable/applications/pinterest.svg +-share/icons/material-design-dark/scalable/applications/playstation.svg +-share/icons/material-design-dark/scalable/applications/plex.svg + share/icons/material-design-dark/scalable/applications/preferences-desktop-accessibility.svg + share/icons/material-design-dark/scalable/applications/preferences-desktop-brightness.svg + share/icons/material-design-dark/scalable/applications/preferences-desktop-color.svg +@@ -475,51 +414,22 @@ share/icons/material-design-dark/scalable/applications/preferences-system-time.s + share/icons/material-design-dark/scalable/applications/preferences-system-windows-actions.svg + share/icons/material-design-dark/scalable/applications/preferences-system-windows.svg + share/icons/material-design-dark/scalable/applications/preferences-system.svg +-share/icons/material-design-dark/scalable/applications/quicktime.svg +-share/icons/material-design-dark/scalable/applications/rdio.svg +-share/icons/material-design-dark/scalable/applications/reddit.svg + share/icons/material-design-dark/scalable/applications/roomba.svg + share/icons/material-design-dark/scalable/applications/rss.svg +-share/icons/material-design-dark/scalable/applications/skype.svg +-share/icons/material-design-dark/scalable/applications/slack.svg +-share/icons/material-design-dark/scalable/applications/soundcloud.svg +-share/icons/material-design-dark/scalable/applications/spotify.svg +-share/icons/material-design-dark/scalable/applications/stackexchange.svg +-share/icons/material-design-dark/scalable/applications/stackoverflow.svg +-share/icons/material-design-dark/scalable/applications/steam.svg + share/icons/material-design-dark/scalable/applications/system-file-manager.svg + share/icons/material-design-dark/scalable/applications/system-help.svg + share/icons/material-design-dark/scalable/applications/system-software-install.svg + share/icons/material-design-dark/scalable/applications/system-software-update.svg +-share/icons/material-design-dark/scalable/applications/teamviewer.svg +-share/icons/material-design-dark/scalable/applications/telegram.svg + share/icons/material-design-dark/scalable/applications/tor.svg +-share/icons/material-design-dark/scalable/applications/tumblr.svg +-share/icons/material-design-dark/scalable/applications/twitch.svg +-share/icons/material-design-dark/scalable/applications/twitter.svg +-share/icons/material-design-dark/scalable/applications/ubuntu.svg +-share/icons/material-design-dark/scalable/applications/umbraco.svg +-share/icons/material-design-dark/scalable/applications/unity.svg + share/icons/material-design-dark/scalable/applications/utilities-file-archiver.svg + share/icons/material-design-dark/scalable/applications/utilities-system-monitor.svg + share/icons/material-design-dark/scalable/applications/utilities-terminal.svg +-share/icons/material-design-dark/scalable/applications/vimeo.svg +-share/icons/material-design-dark/scalable/applications/vine.svg +-share/icons/material-design-dark/scalable/applications/visualstudio.svg +-share/icons/material-design-dark/scalable/applications/vk.svg + share/icons/material-design-dark/scalable/applications/vlc.svg + share/icons/material-design-dark/scalable/applications/voicemail.svg +-share/icons/material-design-dark/scalable/applications/wechat.svg +-share/icons/material-design-dark/scalable/applications/whatsapp.svg +-share/icons/material-design-dark/scalable/applications/wii.svg +-share/icons/material-design-dark/scalable/applications/wiiu.svg + share/icons/material-design-dark/scalable/applications/wikipedia.svg + share/icons/material-design-dark/scalable/applications/wordpress.svg + share/icons/material-design-dark/scalable/applications/wine.svg + share/icons/material-design-dark/scalable/applications/xbox.svg +-share/icons/material-design-dark/scalable/applications/xing.svg +-share/icons/material-design-dark/scalable/applications/yelp.svg +-share/icons/material-design-dark/scalable/applications/youtube.svg + share/icons/material-design-dark/scalable/categories/applications-accessories.svg + share/icons/material-design-dark/scalable/categories/applications-development.svg + share/icons/material-design-dark/scalable/categories/applications-education.svg +@@ -1191,79 +1101,18 @@ share/icons/material-design-light/scalable/applications/accessories-calculator.s + share/icons/material-design-light/scalable/applications/accessories-character-map.svg + share/icons/material-design-light/scalable/applications/accessories-dictionary.svg + share/icons/material-design-light/scalable/applications/accessories-text-editor.svg +-share/icons/material-design-light/scalable/applications/amazon.svg +-share/icons/material-design-light/scalable/applications/android.svg + share/icons/material-design-light/scalable/applications/angular.svg +-share/icons/material-design-light/scalable/applications/apple-finder.svg +-share/icons/material-design-light/scalable/applications/apple-ios.svg +-share/icons/material-design-light/scalable/applications/apple-safari.svg +-share/icons/material-design-light/scalable/applications/apple.svg +-share/icons/material-design-light/scalable/applications/appnet.svg +-share/icons/material-design-light/scalable/applications/basecamp.svg +-share/icons/material-design-light/scalable/applications/beats.svg +-share/icons/material-design-light/scalable/applications/bing.svg +-share/icons/material-design-light/scalable/applications/bitbucket.svg +-share/icons/material-design-light/scalable/applications/black-mesa.svg +-share/icons/material-design-light/scalable/applications/blackberry.svg + share/icons/material-design-light/scalable/applications/blender.svg +-share/icons/material-design-light/scalable/applications/blogger.svg +-share/icons/material-design-light/scalable/applications/clippy.svg +-share/icons/material-design-light/scalable/applications/deviantart.svg +-share/icons/material-design-light/scalable/applications/disqus.svg +-share/icons/material-design-light/scalable/applications/dolby.svg +-share/icons/material-design-light/scalable/applications/dribbble.svg +-share/icons/material-design-light/scalable/applications/dropbox.svg + share/icons/material-design-light/scalable/applications/drupal.svg +-share/icons/material-design-light/scalable/applications/ebay.svg +-share/icons/material-design-light/scalable/applications/edge.svg +-share/icons/material-design-light/scalable/applications/emby.svg +-share/icons/material-design-light/scalable/applications/etsy.svg +-share/icons/material-design-light/scalable/applications/evernote.svg +-share/icons/material-design-light/scalable/applications/facebook.svg +-share/icons/material-design-light/scalable/applications/flattr.svg +-share/icons/material-design-light/scalable/applications/foursquare.svg + share/icons/material-design-light/scalable/applications/git.svg +-share/icons/material-design-light/scalable/applications/github.svg +-share/icons/material-design-light/scalable/applications/gmail.svg + share/icons/material-design-light/scalable/applications/gnome.svg +-share/icons/material-design-light/scalable/applications/google-cardboard.svg +-share/icons/material-design-light/scalable/applications/google-chrome.svg +-share/icons/material-design-light/scalable/applications/google-drive.svg +-share/icons/material-design-light/scalable/applications/google-earth.svg +-share/icons/material-design-light/scalable/applications/google-glass.svg +-share/icons/material-design-light/scalable/applications/google-maps.svg +-share/icons/material-design-light/scalable/applications/google-photos.svg +-share/icons/material-design-light/scalable/applications/google-play.svg +-share/icons/material-design-light/scalable/applications/google-plus.svg +-share/icons/material-design-light/scalable/applications/google-translate.svg +-share/icons/material-design-light/scalable/applications/google-wallet.svg +-share/icons/material-design-light/scalable/applications/google.svg + share/icons/material-design-light/scalable/applications/help-browser.svg +-share/icons/material-design-light/scalable/applications/instagram.svg +-share/icons/material-design-light/scalable/applications/internet-explorer.svg +-share/icons/material-design-light/scalable/applications/itunes.svg +-share/icons/material-design-light/scalable/applications/jira.svg +-share/icons/material-design-light/scalable/applications/jsfiddle.svg + share/icons/material-design-light/scalable/applications/kodi.svg +-share/icons/material-design-light/scalable/applications/lastfm.svg +-share/icons/material-design-light/scalable/applications/linkedin.svg +-share/icons/material-design-light/scalable/applications/linode.svg + share/icons/material-design-light/scalable/applications/linux.svg + share/icons/material-design-light/scalable/applications/lumx.svg + share/icons/material-design-light/scalable/applications/material-ui.svg + share/icons/material-design-light/scalable/applications/meteor.svg +-share/icons/material-design-light/scalable/applications/microsoft.svg +-share/icons/material-design-light/scalable/applications/minecraft.svg +-share/icons/material-design-light/scalable/applications/mixcloud.svg + share/icons/material-design-light/scalable/applications/multimedia-volume-control.svg +-share/icons/material-design-light/scalable/applications/nodejs.svg +-share/icons/material-design-light/scalable/applications/npm.svg +-share/icons/material-design-light/scalable/applications/onedrive.svg +-share/icons/material-design-light/scalable/applications/opera.svg +-share/icons/material-design-light/scalable/applications/pandora.svg +-share/icons/material-design-light/scalable/applications/pinterest.svg +-share/icons/material-design-light/scalable/applications/playstation.svg +-share/icons/material-design-light/scalable/applications/plex.svg + share/icons/material-design-light/scalable/applications/preferences-desktop-accessibility.svg + share/icons/material-design-light/scalable/applications/preferences-desktop-brightness.svg + share/icons/material-design-light/scalable/applications/preferences-desktop-color.svg +@@ -1295,51 +1144,22 @@ share/icons/material-design-light/scalable/applications/preferences-system-sessi + share/icons/material-design-light/scalable/applications/preferences-system-windows-actions.svg + share/icons/material-design-light/scalable/applications/preferences-system-windows.svg + share/icons/material-design-light/scalable/applications/preferences-system.svg +-share/icons/material-design-light/scalable/applications/quicktime.svg +-share/icons/material-design-light/scalable/applications/rdio.svg +-share/icons/material-design-light/scalable/applications/reddit.svg + share/icons/material-design-light/scalable/applications/roomba.svg + share/icons/material-design-light/scalable/applications/rss.svg +-share/icons/material-design-light/scalable/applications/skype.svg +-share/icons/material-design-light/scalable/applications/slack.svg +-share/icons/material-design-light/scalable/applications/soundcloud.svg +-share/icons/material-design-light/scalable/applications/spotify.svg +-share/icons/material-design-light/scalable/applications/stackexchange.svg +-share/icons/material-design-light/scalable/applications/stackoverflow.svg +-share/icons/material-design-light/scalable/applications/steam.svg + share/icons/material-design-light/scalable/applications/system-file-manager.svg + share/icons/material-design-light/scalable/applications/system-help.svg + share/icons/material-design-light/scalable/applications/system-software-install.svg + share/icons/material-design-light/scalable/applications/system-software-update.svg +-share/icons/material-design-light/scalable/applications/teamviewer.svg +-share/icons/material-design-light/scalable/applications/telegram.svg + share/icons/material-design-light/scalable/applications/tor.svg +-share/icons/material-design-light/scalable/applications/tumblr.svg +-share/icons/material-design-light/scalable/applications/twitch.svg +-share/icons/material-design-light/scalable/applications/twitter.svg +-share/icons/material-design-light/scalable/applications/ubuntu.svg +-share/icons/material-design-light/scalable/applications/umbraco.svg +-share/icons/material-design-light/scalable/applications/unity.svg + share/icons/material-design-light/scalable/applications/utilities-file-archiver.svg + share/icons/material-design-light/scalable/applications/utilities-system-monitor.svg + share/icons/material-design-light/scalable/applications/utilities-terminal.svg +-share/icons/material-design-light/scalable/applications/vimeo.svg +-share/icons/material-design-light/scalable/applications/vine.svg +-share/icons/material-design-light/scalable/applications/visualstudio.svg +-share/icons/material-design-light/scalable/applications/vk.svg + share/icons/material-design-light/scalable/applications/vlc.svg + share/icons/material-design-light/scalable/applications/voicemail.svg +-share/icons/material-design-light/scalable/applications/wechat.svg +-share/icons/material-design-light/scalable/applications/whatsapp.svg +-share/icons/material-design-light/scalable/applications/wii.svg +-share/icons/material-design-light/scalable/applications/wiiu.svg + share/icons/material-design-light/scalable/applications/wikipedia.svg + share/icons/material-design-light/scalable/applications/wordpress.svg + share/icons/material-design-light/scalable/applications/wine.svg + share/icons/material-design-light/scalable/applications/xbox.svg +-share/icons/material-design-light/scalable/applications/xing.svg +-share/icons/material-design-light/scalable/applications/yelp.svg +-share/icons/material-design-light/scalable/applications/youtube.svg + share/icons/material-design-light/scalable/categories/applications-accessories.svg + share/icons/material-design-light/scalable/categories/applications-development.svg + share/icons/material-design-light/scalable/categories/applications-education.svg diff --git a/lumina/remove-xscreensaver-support.patch b/lumina/remove-xscreensaver-support.patch new file mode 100644 index 0000000..34caec4 --- /dev/null +++ b/lumina/remove-xscreensaver-support.patch @@ -0,0 +1,220 @@ +--- a/src-qt5/core/README.md 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/README.md 2025-02-09 01:04:46.905428077 +0100 +@@ -45,7 +45,6 @@ + 1. Required Utilities + * `xinit`: Used by `start-lumina-desktop` for launching an X11 session if needed. + * `fluxbox`: Used for window management within the desktop session +- * `xscreensaver`: Screensaver/locker for the desktop session + 2. Optional (but recommended) Utilities + * `numlockx`: Used to toggle the numlock key on session start + * `compton` *or* `xcompmgr`: Compositor to provide cross-application transparency effects and graphical smoothing +--- a/src-qt5/core/lumina-session/session.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-session/session.cpp 2025-02-09 00:42:16.969058145 +0100 +@@ -200,8 +200,6 @@ + //Desktop Next + LSingleApplication::removeLocks("lumina-desktop"); + startProcess("runtime","lumina-desktop"); +- //ScreenSaver +- if(LUtils::isValidBinary("xscreensaver")){ startProcess("screensaver","xscreensaver -no-splash"); } + }else{ + //unified process + setupCompositor(true); //required for Lumina 2 +--- a/src-qt5/core/lumina-desktop/WMProcess.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/WMProcess.cpp 2025-02-09 00:55:36.202829483 +0100 +@@ -13,7 +13,6 @@ + QString log = QString(getenv("XDG_CONFIG_HOME"))+"/lumina-desktop/logs/wm.log"; + if(QFile::exists(log)){ QFile::remove(log); } + this->setStandardOutputFile(log); +- //ssaver = new QProcess(0); + inShutdown = false; + } + +@@ -28,17 +27,12 @@ + inShutdown = false; + QString cmd = setupWM(); + if(!isRunning()){this->start(cmd); } +- /*if(ssaver->state() == QProcess::NotRunning \ +- && LSession::handle()->sessionSettings()->value("WindowManager", "fluxbox").toString() != "lumina-wm"){ +- ssaver->start("xscreensaver -no-splash"); +- }*/ + } + + void WMProcess::stopWM(){ + if(isRunning()){ + inShutdown = true; + //QProcess::startDetached("fluxbox-remote closeallwindows"); +- //ssaver->kill(); + this->kill(); + if(!this->waitForFinished(10000)){ this->terminate(); }; + }else{ +--- a/src-qt5/core/lumina-desktop/WMProcess.h 2025-02-09 00:55:54.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/WMProcess.h 2025-02-09 00:56:09.532986757 +0100 +@@ -34,7 +34,6 @@ + bool isRunning(); + QString setupWM(); + void cleanupConfig(); +- //QProcess *ssaver; + + private slots: + void processFinished(int exitcode, QProcess::ExitStatus status); +--- a/src-qt5/core/lumina-desktop/SystemWindow.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/SystemWindow.cpp 2025-02-09 00:52:18.141894895 +0100 +@@ -104,8 +104,6 @@ + void SystemWindow::sysSuspend(){ + this->hide(); + LSession::processEvents(); +- //Make sure to lock the system first (otherwise anybody can access it again) +- LUtils::runCmd("xscreensaver-command -lock"); + //Now suspend the system + LOS::systemSuspend(); + } +@@ -113,6 +111,5 @@ + void SystemWindow::sysLock(){ + this->hide(); + LSession::processEvents(); +- qDebug() << "Locking the desktop..."; +- QProcess::startDetached("xscreensaver-command -lock"); ++ qDebug() << "Locking the desktop disabled..."; + } +--- a/src-qt5/core/lumina-desktop/LDesktop.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/LDesktop.cpp 2025-02-09 00:52:42.552010079 +0100 +@@ -109,7 +109,6 @@ + } + + void LDesktop::SystemLock(){ +- QProcess::startDetached("xscreensaver-command -lock"); + } + + void LDesktop::SystemLogout(){ +--- a/src-qt5/core/lumina-desktop/SettingsMenu.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/SettingsMenu.cpp 2025-02-09 00:49:51.281201905 +0100 +@@ -27,10 +27,7 @@ + this->setIcon( LXDG::findIcon("configure","") ); + this->clear(); + //Now setup the possible configuration options +- QAction *act = new QAction(LXDG::findIcon("preferences-desktop-screensaver",""), tr("Screensaver"), this); +- act->setWhatsThis("xscreensaver-demo"); +- this->addAction(act); +- act = new QAction( LXDG::findIcon("preferences-desktop-wallpaper",""), tr("Wallpaper"), this); ++ QAction *act = new QAction( LXDG::findIcon("preferences-desktop-wallpaper",""), tr("Wallpaper"), this); + act->setWhatsThis("lumina-config --page wallpaper"); + this->addAction(act); + act = new QAction( LXDG::findIcon("preferences-other",""), tr("Display"), this); +--- a/src-qt5/core/lumina-desktop/fluxboxconf/fluxbox-keys 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/fluxboxconf/fluxbox-keys 2025-02-09 00:51:00.461528345 +0100 +@@ -129,8 +129,6 @@ + + #Lumina Specific defaults + Print :Exec lumina-screenshot +-Pause :Exec xscreensaver-command -lock +-Mod1 L :Exec xscreensaver-command -lock + Mod1 space :Exec lumina-search + XF86AudioRaiseVolume :Exec lumina-open -volumeup + XF86AudioLowerVolume :Exec lumina-open -volumedown +@@ -143,4 +141,3 @@ + Print :Exec lumina-screenshot + Mod1 Home :Exec lumina-open -brightnessup + Mod1 End :Exec lumina-open -brightnessdown +-Pause :Exec xscreensaver-command -lock +--- a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp 2025-02-09 00:57:39.363410638 +0100 +@@ -18,7 +18,6 @@ + + //Connect the signals/slots + connect(ui->tool_desktopsettings, SIGNAL(clicked()), this, SLOT(openDeskSettings()) ); +- connect(ui->tool_config_screensaver, SIGNAL(clicked()), this, SLOT(openScreenSaverConfig()) ); + connect(ui->tool_config_screensettings, SIGNAL(clicked()), this, SLOT(openScreenConfig()) ); + connect(ui->tool_fav_apps, SIGNAL(clicked()), this, SLOT(FavChanged()) ); + connect(ui->tool_fav_files, SIGNAL(clicked()), this, SLOT(FavChanged()) ); +@@ -119,7 +118,6 @@ + ui->tool_fav_dirs->setIcon( LXDG::findIcon("folder","") ); + ui->tool_fav_files->setIcon( LXDG::findIcon("document-multiple","") ); + ui->tool_desktopsettings->setIcon( LXDG::findIcon("preferences-desktop","") ); +- ui->tool_config_screensaver->setIcon( LXDG::findIcon("preferences-desktop-screensaver","") ); + ui->tool_config_screensettings->setIcon( LXDG::findIcon("preferences-other","") ); + ui->tool_home_gohome->setIcon( LXDG::findIcon("go-home","") ); + ui->tool_home_browse->setIcon( LXDG::findIcon("document-open","") ); +--- a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h 2025-02-09 00:56:50.203178668 +0100 +@@ -24,8 +24,6 @@ + #include + #include "UserItemWidget.h" + +-#define SSAVER QString("xscreensaver-demo") +- + namespace Ui{ + class UserWidget; + }; +@@ -80,9 +78,6 @@ + void openDeskSettings(){ + LaunchItem("lumina-config", false); + } +- void openScreenSaverConfig(){ +- LaunchItem(SSAVER, false); +- } + void openScreenConfig(){ + LaunchItem("lumina-xconfig",false); + } +--- a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp 2025-02-09 01:01:26.664483203 +0100 +@@ -12,7 +12,6 @@ + #include + + #include "ItemWidget.h" +-//#define SSAVER QString("xscreensaver-demo") + + StartMenu::StartMenu(QWidget *parent) : QWidget(parent), ui(new Ui::StartMenu){ + ui->setupUi(this); //load the designer file +@@ -577,8 +576,6 @@ + + //Logout Buttons + void StartMenu::on_tool_lock_clicked(){ +- //QProcess::startDetached("xscreensaver-command -lock"); +- LaunchItem("xscreensaver-command -lock",false); + } + + void StartMenu::on_tool_logout_clicked(){ +@@ -613,7 +610,6 @@ + void StartMenu::on_tool_suspend_clicked(){ + //Make sure to lock the system first (otherwise anybody can access it again) + emit CloseMenu(); +- LUtils::runCmd("xscreensaver-command -lock"); + LOS::systemSuspend(); + } + +--- a/src-qt5/core-utils/lumina-config/lumina-config.1 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core-utils/lumina-config/lumina-config.1 2025-02-09 01:03:00.374925394 +0100 +@@ -70,10 +70,6 @@ + Check and apply updates or change update settings. + .It Ic User Configuration + Change user details and groups. +-.It Ic XScreenSaver Lock +-Lock the screen with XScreenSaver. +-.It Ic XScreenSaver Stop +-Stop XscreenSaver daemon. + .It Ic Device Manager + Manage devices connected to the system. + .It Ic PulseAudio Preferences +@@ -82,10 +78,6 @@ + Run or enable start on boot for various services. + .It Ic Task Manager + View or stop a currently running process. +-.It Ic XScreenSaver Blank +-Blank the screen with (activate) XScreenSaver. +-.It Ic XScreenSaver Start +-Start XScreenSaver daemon. + .El + .Pp + .Sy User Settings: +--- a/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.cpp 2020-01-31 21:25:37.000000000 +0100 ++++ b/src-qt5/core-utils/lumina-config/pages/page_fluxbox_keys.cpp 2025-02-09 01:02:30.164782840 +0100 +@@ -79,8 +79,7 @@ + << "Exec lumina-open -volumedown::::"+tr("Audio Volume Down") \ + << "Exec lumina-open -brightnessup::::"+tr("Screen Brightness Up") \ + << "Exec lumina-open -brightnessdown::::"+tr("Screen Brightness Down") \ +- << "Exec lumina-screenshot::::"+tr("Take Screenshot") \ +- << "Exec xscreensaver-command -lock::::"+tr("Lock Screen"); ++ << "Exec lumina-screenshot::::"+tr("Take Screenshot"); + for(int i=0; i + +pkgname=lv2 +pkgver=1.18.0 +pkgrel=1 +pkgdesc="Plugin standard for audio systems" +url="https://lv2plug.in/" +license=('ISC') +arch=('i686' 'x86_64') +makedepends=('asciidoc' 'doxygen' 'gtk2' 'libsndfile' 'pygmentize' +'python-markdown' 'python-pygments' 'python-rdflib' 'waf') +optdepends=('sord: for lv2_validate' + 'libsndfile: for eg-sampler.lv2' + 'atk: for eg-sampler.lv2 and eg-scope.lv2' + 'cairo: for eg-sampler.lv2 and eg-scope.lv2' + 'fontconfig: for eg-sampler.lv2 and eg-scope.lv2' + 'freetype2: for eg-sampler.lv2 and eg-scope.lv2' + 'glib2: for eg-sampler.lv2 and eg-scope.lv2' + 'gtk2: for eg-sampler.lv2 and eg-scope.lv2' + 'harfbuzz: for eg-sampler.lv2 and eg-scope.lv2' + 'pango: for eg-sampler.lv2 and eg-scope.lv2' + 'python-pygments: for lv2specgen.py' + 'python-rdflib: for lv2specgen.py') +source=("https://lv2plug.in/spec/${pkgname}-${pkgver}.tar.bz2"{,.sig}) +sha512sums=('9e8dd9c1f30371260d21efc105b1d4d4ad03d9e332d4d3877d873f20b9527bcd0e917ff23fc6e0a9cc4337bda85882c742f225f7cf4fbc8a8a0964565c91f9d9' + 'SKIP') +validpgpkeys=('907D226E7E13FA337F014A083672782A9BF368F3') # David Robillard + +prepare() { + cd "${pkgname}-${pkgver}" + # let wscript(s) find the custom waf scripts + mkdir -pv tools + touch __init__.py + cp -v waflib/extras/{autowaf,lv2}.py tools/ + mkdir -pv plugins/tools/ + cp -v waflib/extras/{autowaf,lv2}.py plugins/tools/ + rm -rv waflib + sed -e 's/waflib.extras/tools/g' \ + -e "s/load('autowaf'/load('autowaf', tooldir='tools'/g" \ + -e "s/load('lv2'/load('lv2', tooldir='tools'/g" \ + -i {,plugins/,plugins/*/}wscript +} + +build() { + cd "${pkgname}-${pkgver}" + waf configure --prefix=/usr \ + --libdir=/usr/lib \ + --docs \ + --test + waf -v build $MAKEFLAGS +} + +check() { + cd "${pkgname}-${pkgver}" + waf test +} + +package() { + cd "${pkgname}-${pkgver}" + waf install --destdir="${pkgdir}" + # license + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}/" + # docs + install -vDm 644 {NEWS,README.md} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" +} +# vim:set ts=2 sw=2 et: diff --git a/lxappearance-obconf-gtk2/PKGBUILD b/lxappearance-obconf-gtk2/PKGBUILD new file mode 100644 index 0000000..d0fdfd2 --- /dev/null +++ b/lxappearance-obconf-gtk2/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=lxappearance-obconf-gtk2 +_pkgname=lxappearance-obconf +pkgver=0.2.3 +pkgrel=1 +pkgdesc="Plugin for LXAppearance to configure Openbox (GTK+ 2 version)" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://lxde.org/' +conflicts=('lxappearance-obconf') +depends=('lxappearance-gtk2' 'openbox') +makedepends=('intltool' 'gettext-tiny') +source=("https://downloads.sourceforge.net/lxde/$_pkgname-$pkgver.tar.xz") +sha512sums=('cec56238b2b8ea86ab310fdf3d9d43ef665aac7762018a296803ef7caccb6a5a7854c4b17e0028152b379a373602ede30edb02811a9a370ba369b62bb3caee09') + +build() { + cd $_pkgname-$pkgver + ./configure \ + --prefix=/usr + + # https://bugzilla.gnome.org/show_bug.cgi?id=656231 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + + make +} + +package() { + cd $_pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/lxappearance-obconf/PKGBUILD b/lxappearance-obconf/PKGBUILD new file mode 100644 index 0000000..5f785ee --- /dev/null +++ b/lxappearance-obconf/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=lxappearance-obconf +pkgver=0.2.3 +pkgrel=1 +pkgdesc="Plugin for LXAppearance to configure Openbox (GTK+ 3 version)" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://lxde.org/' +conflicts=('lxappearance-obconf-gtk2') +depends=('lxappearance' 'openbox') +makedepends=('intltool' 'gettext-tiny') +source=("https://downloads.sourceforge.net/lxde/$pkgname-$pkgver.tar.xz") +sha512sums=('cec56238b2b8ea86ab310fdf3d9d43ef665aac7762018a296803ef7caccb6a5a7854c4b17e0028152b379a373602ede30edb02811a9a370ba369b62bb3caee09') + +prepare() { + cd $pkgname-$pkgver + + # hide theme preview as it's broken with GTK+ 3 + # https://sourceforge.net/p/lxde/bugs/768/ + sed -i /frame1/,+19d src/obconf.glade +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-gtk3 + + # https://bugzilla.gnome.org/show_bug.cgi?id=656231 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/lxappearance/PKGBUILD b/lxappearance/PKGBUILD new file mode 100644 index 0000000..6487495 --- /dev/null +++ b/lxappearance/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgbase=lxappearance +pkgname=(lxappearance-gtk2 lxappearance) +pkgver=0.6.3 +pkgrel=1 +pkgdesc='Feature-rich GTK+ theme switcher' +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://wiki.lxde.org/en/LXAppearance' +makedepends=('gtk2' 'gtk' 'intltool' 'gettext-tiny') +source=(https://downloads.sourceforge.net/lxde/$pkgbase-$pkgver.tar.xz) +sha512sums=('035cc952a33ac25408a4158cb4e745b17af3f29b5ceedfbe6b37235d16c801658403e862cd35ad7c8ca20fe6186fab1dce74a6e8d3b2eec12a30d532fc21662c') + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + ./configure --sysconfdir=/etc --prefix=/usr --disable-dbus + make + + cd "$srcdir" + # GTK+ 3 version + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + ./configure --sysconfdir=/etc --prefix=/usr --disable-dbus --enable-gtk3 + make +} + +package_lxappearance-gtk2() { + depends=('gtk2') + conflicts=('lxappearance') + + cd gtk2 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_lxappearance() { + pkgdesc+=' (GTK+ 3 version)' + depends=('gtk') + conflicts=('lxappearance-gtk2') + + cd gtk3 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lxdm-theme-hyperbola/PKGBUILD b/lxdm-theme-hyperbola/PKGBUILD new file mode 100644 index 0000000..68878ac --- /dev/null +++ b/lxdm-theme-hyperbola/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=lxdm-theme-hyperbola +pkgver=1.0 +pkgrel=1 +pkgdesc="LXDM theme for Hyperbola" +arch=('any') +url='https://git.hyperbola.info:50100/~team/software/lxdm-theme-hyperbola.git/' +license=('GPL-2') +depends=('lxdm-service' 'dialog') +install=$pkgname.install +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('c21872c44619e4baac6bf6b3abd020f4662b1628f8c5388b032a4fbb34a6f15059695ffd417d9f94b11546ff1d4308b583d4af32857f6799adcc049cdf19da42' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +package() { + cd "$srcdir/$pkgname-$pkgver" + + # data + install -m 644 -D ./Images/hyperbola_background_{1024x768,1280x720,1280x800,1360x768,1366x768,1440x900,1600x900,1680x1050,1920x1080,1920x1200}.png -t "${pkgdir}"/usr/share/lxdm/backgrounds/ + install -d "${pkgdir}"/usr/share/lxdm/themes/ + cp -r ./Hyperbola "${pkgdir}"/usr/share/lxdm/themes/ + + # license + install -m 644 -D COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/lxdm-theme-hyperbola/lxdm-theme-hyperbola.install b/lxdm-theme-hyperbola/lxdm-theme-hyperbola.install new file mode 100644 index 0000000..e099295 --- /dev/null +++ b/lxdm-theme-hyperbola/lxdm-theme-hyperbola.install @@ -0,0 +1,20 @@ +post_install() { + /usr/share/lxdm/themes/Hyperbola/setup.sh + lxdmConf="/etc/lxdm/lxdm.conf" + if [[ -e "$lxdmConf" ]]; then + mv "/etc/lxdm/lxdm.conf" "/etc/lxdm/lxdm.conf.bak" + fi + cp "/usr/share/lxdm/themes/Hyperbola/lxdm.conf" "/etc/lxdm/" +} + +post_upgrade() { + post_install +} + +post_remove() { + echo '>>> !!!ATTENTION!!!' + echo '>>> =================================================================================' + echo '>>> Please take a look at your local configuration for LXDM:' + echo '>>> The original file (/etc/lxdm/lxdm.conf) was saved as a backup!' + echo '>>> =================================================================================' +} diff --git a/lxdm/PKGBUILD b/lxdm/PKGBUILD new file mode 100644 index 0000000..9f10b27 --- /dev/null +++ b/lxdm/PKGBUILD @@ -0,0 +1,106 @@ +# Maintainer: Jesus E. + +pkgbase=lxdm +pkgname=('lxdm-gtk2' 'lxdm') +pkgver=0.5.3 +pkgrel=2 +pkgdesc="Lightweight X11 Display Manager" +arch=('i686' 'x86_64') +url='https://lxde.org/' +license=('GPL-2') +makedepends=('intltool' 'iso-codes' 'gtk2' 'gtk' 'xenocara-server' 'gettext-tiny') +optdepends=('iso-codes: for showing language names in language chooser') +backup=('etc/lxdm/lxdm.conf' + 'etc/lxdm/Xsession' + 'etc/lxdm/PreLogin' + 'etc/lxdm/LoginReady' + 'etc/lxdm/PostLogin' + 'etc/lxdm/PostLogout' + 'etc/lxdm/PreReboot' + 'etc/lxdm/PreShutdown') +source=("https://downloads.sourceforge.net/lxde/${pkgbase}-${pkgver}.tar.xz" + "set-path.patch" + "git-fixes.patch" + "lxdm.initd" + "lxdm.run") +sha512sums=('0e3539c595a71cb850c1756dd075b8d477a4e111a4167714057cac06650e9587f338f797f14122e7b2a2f4ad35b38cd7172b83e996758abeeaf0146d65bbc26f' + '31458f9cbf2eefa863ea7b8b26778b8738311a16ff0e41d21e431dca94165fa0dab3274679504d4d2b964ce473ce2de5a692376393abeba000e19ae675813bf8' + '3ac6601dafe36cfe95a7895b3e138d184b2098a58b2e93fbb168e91cd51ffef5cbc55403138b326f68b85f8d4bb3c303dc734378dca808432edf5cf85e93afd5' + '918a51293384f0aae69afb0fb1d25a1120d663cc7473b0796aaaf727a989290a1730c2415d90d04d7ad7d3691ca1d2ca77d9754ac6f5f0aa9574581841b51293' + '35b640d1cc9d745076d0d25cf3dda0dbe1ffc7d8a0a10a98637e102bf6fe61a6d3992d406512d63e520ea45186e3e66d5ffa232fda4d41ab3a5c688de33a3c2d') + +prepare(){ + cd $pkgbase-$pkgver + + # don't overwrite PATH if already defined + patch -Np1 -i $srcdir/set-path.patch + + # apply fixes from git + patch -Np1 -i $srcdir/git-fixes.patch + + autoreconf -vfi +} + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib/lxdm \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --without-pam \ + --with-xconn=xcb + make + + cd "$srcdir" + # GTK+ 3 version + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib/lxdm \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --enable-gtk3 \ + --without-pam \ + --with-xconn=xcb + make +} + +package_lxdm-gtk2() { + depends=('gtk2' 'xenocara-server') + optdepends+=('gnome-themes-extra: default GTK+ theme') + conflicts=('lxdm') + provides=('lxdm-service') + + cd gtk2 + make DESTDIR="$pkgdir" install + chmod 644 "$pkgdir/etc/lxdm/lxdm.conf" + + # install services + install -Dm755 "$srcdir/lxdm.initd" "$pkgdir/etc/init.d/lxdm" + install -Dm755 "$srcdir/lxdm.run" "$pkgdir/etc/sv/lxdm/run" + + # install license + install -Dm644 gpl-2.0.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_lxdm() { + pkgdesc+=' (GTK+ 3 version)' + depends=('gtk' 'xenocara-server') + conflicts=('lxdm-gtk2') + provides=('lxdm-service') + + cd gtk3 + make DESTDIR="$pkgdir" install + chmod 644 "$pkgdir/etc/lxdm/lxdm.conf" + + # install services + install -Dm755 "$srcdir/lxdm.initd" "$pkgdir/etc/init.d/lxdm" + install -Dm755 "$srcdir/lxdm.run" "$pkgdir/etc/sv/lxdm/run" + + # install license + install -Dm644 gpl-2.0.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/lxdm/git-fixes.patch b/lxdm/git-fixes.patch new file mode 100644 index 0000000..ee4f214 --- /dev/null +++ b/lxdm/git-fixes.patch @@ -0,0 +1,93 @@ +diff --git a/data/themes/Industrial/gtk.css b/data/themes/Industrial/gtk.css +index 179f0d6..f8e6432 100644 +--- a/data/themes/Industrial/gtk.css ++++ b/data/themes/Industrial/gtk.css +@@ -17,6 +17,7 @@ + color: #000000; + } + ++#bottom_pane label, + #bottom_pane GtkLabel { + font: Sans 12; + color: #9E9D9B; +diff --git a/src/greeter-gdk.c b/src/greeter-gdk.c +index 1abbefa..ad3267a 100644 +--- a/src/greeter-gdk.c ++++ b/src/greeter-gdk.c +@@ -22,6 +22,7 @@ + + #define XLIB_ILLEGAL_ACCESS + ++#include + #include + #include + #include +@@ -88,12 +89,14 @@ static void on_ui_expose(void) + } + + cr=gdk_cairo_create(win); ++#if GTK_CHECK_VERSION(3,0,0) + cairo_pattern_t *pattern=gdk_window_get_background_pattern(win); + if(pattern) + { + cairo_set_source(cr,pattern); + cairo_paint(cr); + } ++#endif + + gdk_cairo_set_source_color(cr, &bg); + cairo_rectangle(cr, rc.x, rc.y, rc.width, rc.height); +diff --git a/src/greeter.c b/src/greeter.c +index 10b7f3f..03503b6 100644 +--- a/src/greeter.c ++++ b/src/greeter.c +@@ -146,7 +146,7 @@ static void switch_to_input_user(void) + if(user_list_scrolled) + gtk_widget_show(user_list_scrolled); + else +- gtk_widget_hide(user_list); ++ gtk_widget_show(user_list); + gtk_widget_grab_focus(user_list); + } + else +diff --git a/src/lxdm.c b/src/lxdm.c +index a37f051..722936f 100644 +--- a/src/lxdm.c ++++ b/src/lxdm.c +@@ -488,6 +490,9 @@ static char *lxsession_xserver_command(LXSession *s) + { + arg[arc++] = g_strdup("-nolisten"); + arg[arc++] = g_strdup("tcp"); ++ } else { ++ arg[arc++] = g_strdup("-listen"); ++ arg[arc++] = g_strdup("tcp"); + } + if(!novtswitch) + { +@@ -750,7 +755,13 @@ static char ** create_client_auth(struct passwd *pw,char **env) + if(xauth_write_file(authfile,s->display,s->mcookie)==-1) + { + g_free(authfile); +- authfile = g_strdup_printf("/var/run/lxdm/.Xauth%d",pw->pw_uid); ++ ++ gchar *authdir = g_strdup_printf("/var/run/lxdm/%d", pw->pw_uid); ++ g_mkdir_with_parents(authdir, S_IRWXU); ++ chown(authdir, pw->pw_uid, pw->pw_gid); ++ ++ authfile = g_strdup_printf("%s/.Xauthority", authdir); ++ g_free(authdir); + remove(authfile); + xauth_write_file(authfile,s->display,s->mcookie); + } +@@ -956,6 +967,11 @@ static void on_xserver_stop(void *data,int pid, int status) + s->dpy=NULL; + ui_drop(); + lxdm_startx(s); ++ #ifndef DISABLE_XAUTH ++ char temp[256]; ++ sprintf(temp,"/var/run/lxdm/lxdm-:%d.auth",s->display); ++ setenv("XAUTHORITY",temp,1); ++ #endif + ui_prepare(); + lxsession_set_active(s); + } diff --git a/lxdm/lxdm.initd b/lxdm/lxdm.initd new file mode 100644 index 0000000..3462784 --- /dev/null +++ b/lxdm/lxdm.initd @@ -0,0 +1,19 @@ +#!/sbin/openrc-run +# Copyright 2025 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="Lightweight Display Manager from LXDM" + +command="/usr/sbin/lxdm-binary" +command_args="-d" +pidfile="/var/run/lxdm.pid" + +depend() { + need localmount + after bootmisc consolefont modules netmount + after readahead-list ypbind autofs gpm lircmd + after quota keymaps + after acpid openvpn + before alsasound + use xfs +} diff --git a/lxdm/lxdm.run b/lxdm/lxdm.run new file mode 100644 index 0000000..c186b21 --- /dev/null +++ b/lxdm/lxdm.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/lxdm-binary -d diff --git a/lxdm/set-path.patch b/lxdm/set-path.patch new file mode 100644 index 0000000..d464115 --- /dev/null +++ b/lxdm/set-path.patch @@ -0,0 +1,13 @@ +--- a/src/lxdm.c 2015-11-23 12:15:52.000000000 +0100 ++++ b/src/lxdm.c 2025-03-26 01:20:33.915624039 +0100 +@@ -1398,8 +1398,8 @@ + path = g_key_file_get_string(config, "base", "path", 0); + if( G_UNLIKELY(path) && path[0] ) /* if PATH is specified in config file */ + env=g_environ_setenv(env, "PATH", path, TRUE); /* override current $PATH with config value */ +- else /* don't use the global env, they are bad for user */ +- env=g_environ_setenv(env, "PATH", "/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin", TRUE); /* set proper default */ ++ else if(!getenv("PATH")) /* if PATH is not set */ ++ env=g_environ_setenv(env, "PATH", "/usr/local/bin:/bin:/usr/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin", TRUE); /* set proper default */ + g_free(path); + /* optionally override $LANG, $LC_MESSAGES, and $LANGUAGE */ + if( lang && lang[0] ) diff --git a/lxmusic/PKGBUILD b/lxmusic/PKGBUILD new file mode 100644 index 0000000..97b2e85 --- /dev/null +++ b/lxmusic/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgbase=lxmusic +pkgname=('lxmusic' 'lxmusic-gtk2') +pkgver=0.4.7 +pkgrel=1 +pkgdesc='Lightweight XMMS2 client' +arch=('i686' 'x86_64') +url="https://lxde.org/" +license=('Expat' 'GPL-2') +depends=('gtk2' 'gtk' 'xmms2') +makedepends=('intltool' 'gettext-tiny') +source=(https://downloads.sourceforge.net/lxde/$pkgbase-$pkgver.tar.xz) +sha512sums=('e1e6a7e2306b24dfd5864df88db47c07656d43a1901212b1d6b6edec8addf866b31ebae46bca572e88801620016c6fab9860f5ed44d6086f24494e2eb2737216') + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + ./configure --prefix=/usr + make + + cd "$srcdir" + # GTK+ 3 version + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + ./configure --prefix=/usr --enable-gtk3 + make +} + +package_lxmusic-gtk2() { + depends=('gtk2' 'xmms2') + + cd gtk2 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_lxmusic() { + pkgdesc+=' (GTK+ 3 version)' + depends=('gtk' 'xmms2') + conflicts=('lxmusic') + + cd gtk3 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lxrandr/PKGBUILD b/lxrandr/PKGBUILD new file mode 100644 index 0000000..687c3cc --- /dev/null +++ b/lxrandr/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgbase=lxrandr +pkgname=(lxrandr-gtk2 lxrandr) +pkgver=0.3.2 +pkgrel=1 +pkgdesc='Monitor configuration tool' +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://lxde.org/' +makedepends=('gtk2' 'gtk' 'intltool' 'gettext-tiny') +source=("https://downloads.sourceforge.net/lxde/$pkgbase-$pkgver.tar.xz") +sha512sums=('9f00f885e4af3544d9bf8a7581d5b9e3049c1fac174c119dda8c85f2f94aa7be241b6e06e5fe86596a0fb65a38bfe1983ced91c064339a60b19f506ed337ee4f') + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + ./configure --sysconfdir=/etc --prefix=/usr + make + + cd "$srcdir" + # GTK+ 3 version + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + ./configure --sysconfdir=/etc --prefix=/usr --enable-gtk3 + make +} + +package_lxrandr-gtk2() { + depends=('gtk2' 'xenocara-xrandr') + conflicts=('lxrandr') + + cd gtk2 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_lxrandr() { + pkgdesc+=' (GTK+ 3 version)' + depends=('gtk' 'xenocara-xrandr') + conflicts=('lxrandr-gtk2') + + cd gtk3 + make DESTDIR="$pkgdir" install + + # Ignore package by AppStream to avoid duplicated IDs + echo 'X-AppStream-Ignore=true' >> "$pkgdir/usr/share/applications/$pkgbase.desktop" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lxtask/PKGBUILD b/lxtask/PKGBUILD new file mode 100644 index 0000000..0943099 --- /dev/null +++ b/lxtask/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgbase=lxtask +pkgname=('lxtask' 'lxtask-gtk2') +pkgver=0.1.10 +pkgrel=3 +pkgdesc="Graphical Taskmanager" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://lxde.org/' +depends=('gtk2' 'gtk') +makedepends=('intltool' 'gettext-tiny' 'mesa-libgl') +source=("https://downloads.sourceforge.net/lxde/$pkgbase-$pkgver.tar.xz" + "$pkgbase.desktop" + "$pkgbase.png") +sha512sums=('21f3a145939b53136be11892d183f3549b1a736070bb0c69e0932009d46abfd4956d1ec1d904e58bd6fca0a30fa0cca0cce897a83113c3fe1591300cfddae99a' + 'e90af3af94bbf4e1da3be6caf501260ab8baf0ff73f4001225f66832227113f7b32092a348570275233eccd497191b682e697097ece583ba1dea3680a788ebaf' + '35bf1aeffb41c2372fe7ce6afcb09040efe2731e7f0c1358ffb52ccbb4021cc4a1eefe36fd32a1fd9d58066088541c014b0b531545574852f47cd1339e39b437') + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + ./configure --sysconfdir=/etc --prefix=/usr + make + + cd "$srcdir" + # GTK+ 3 version + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + ./configure --sysconfdir=/etc --prefix=/usr --enable-gtk3 + make +} + +package_lxtask-gtk2() { + depends=('gtk2') + conflicts=('lxtask') + + cd gtk2 + make DESTDIR="$pkgdir" install + + # Correct desktop-file + rm "${pkgdir}/usr/share/applications/$pkgbase.desktop" + install -Dm644 "${srcdir}/$pkgbase.desktop" "${pkgdir}/usr/share/applications/$pkgbase.desktop" + install -Dm644 "${srcdir}/$pkgbase.png" "${pkgdir}/usr/share/pixmaps/$pkgbase.png" + + # License + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_lxtask() { + pkgdesc+=' (GTK+ 3 version)' + depends=('gtk') + conflicts=('lxtask-gtk2') + + cd gtk3 + make DESTDIR="$pkgdir" install + + # Correct desktop-file + rm "${pkgdir}/usr/share/applications/$pkgbase.desktop" + install -Dm644 "${srcdir}/$pkgbase.desktop" "${pkgdir}/usr/share/applications/$pkgbase.desktop" + install -Dm644 "${srcdir}/$pkgbase.png" "${pkgdir}/usr/share/pixmaps/$pkgbase.png" + + # License + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + + # Ignore package by AppStream to avoid duplicated IDs + echo 'X-AppStream-Ignore=true' >> "${pkgdir}/usr/share/applications/$pkgbase.desktop" +} diff --git a/lxtask/lxtask.desktop b/lxtask/lxtask.desktop new file mode 100644 index 0000000..5a20b17 --- /dev/null +++ b/lxtask/lxtask.desktop @@ -0,0 +1,207 @@ +[Desktop Entry] +Name=Task Manager +Name[af]=Taakbestuurder +Name[ar]=مدير المهام +Name[ast]=Alministrador de xeres +Name[be]=Менеджар задач +Name[bg]=ДиŃпечер на задачи +Name[bn]=টাস্ক ম্যানেজার +Name[ca]=Gestor de tasques +Name[cs]=Správce Ăşloh +Name[da]=OpgavehĂĄndtering +Name[de]=Taskmanager +Name[el]=ΔιαχειĎÎąĎτής εĎγαĎιών +Name[en_GB]=Task Manager +Name[es]=Gestor de tareas +Name[et]=Protsessihaldur +Name[eu]=Ataza-kudeatzailea +Name[fa]=مدیر ŮظیŮه +Name[fi]=Tehtävienhallinta +Name[fo]=Koyrslu fyrisiting +Name[fr]=Gestionnaire des tâches +Name[frp]=ΔιαχειĎÎąĎτής εĎγαĎιών +Name[gl]=Xestor de tarefas +Name[he]=מנהל המשימות +Name[hr]=Upravitelj Zadacima +Name[hu]=FeladatkezelĹ‘ +Name[id]=Manajer Tugas +Name[is]=VerkefnastjĂłri +Name[it]=Gestore processi +Name[ja]=タスクăžăŤăĽă‚¸ăŁ +Name[kk]=ТапŃырмалар баŃқарŃŃŃ‹ŃŃ‹ +Name[ko]=작업 ę´€ë¦¬ěž +Name[lg]=Kiteekateekamirimu +Name[lt]=UĹľduoÄŤiĹł tvarkytuvÄ— +Name[lv]=Procesu pÄrvaldnieks +Name[ms]=Pengurus Tugas +Name[nb]=Oppgavebehandler +Name[nl]=Taakbeheerder +Name[nn]=OppgĂĄvestyring +Name[pa]=ਟਾਸਕ ਮŕ©ŕ¨¨ŕ©‡ŕ¨śŕ¨° +Name[pl]=MenedĹĽer zadaĹ„ +Name[pt]=Gestor de tarefas +Name[pt_BR]=Gerenciador de tarefas +Name[ro]=Manager de programe +Name[ru]=ДиŃпетчер задач +Name[sk]=Správca Ăşloh +Name[sl]=Upravljalnik opravil +Name[sr]=Праћење ŃиŃтема +Name[sr@latin]=Praćenje sistema +Name[sv]=Aktivitetshanterare +Name[te]=కార్య నిర్వాహకం +Name[tr]=Görev Yönetici +Name[tt_RU]=ĐśÓ™Ńьәлә диŃпетчеры +Name[ug]=ۋەزىپە باشقۇرغۇچ +Name[uk]=ДиŃпетчер задач +Name[ur]=ٹاسک منیجر +Name[ur_PK]=ٹاسک منیجر +Name[vi]=Quản lĂ˝ tác vụ +Name[zh_CN]=任务管ç†ĺ™¨ +Name[zh_TW]=工作管ç†ĺ“ˇ +Comment=Manage running processes +Comment[af]=Bestuur prosesse wat uitvoer +Comment[ar]=إدارة العمليات الجارية +Comment[ast]=Alministrar procesos n'execuciĂłn +Comment[be]=Кіраванне бягŃчымі працэŃамі +Comment[bg]=Управлявай изпълняваните процеŃи +Comment[bn]=চলমান প্রসেস ব্যবস্থাপনা +Comment[ca]=Gestioneu els processos en execuciĂł +Comment[cs]=Správa spuštÄ›nĂ˝ch procesĹŻ +Comment[da]=HĂĄndter kørende processer +Comment[de]=Verwaltung laufender Prozesse +Comment[el]=ΔιαχείĎÎąĎη Ď„ĎεχουĎών διεĎγαĎιών +Comment[en_GB]=Manage running processes +Comment[es]=Gestione los procesos en ejecuciĂłn +Comment[et]=Töötavate protsesside haldamine +Comment[eu]=Kudeatu martxan dauden prozesuak +Comment[fa]=مدیریت Ůرآیندهای درحال اجرا +Comment[fi]=Hallitse käynnissä olevia prosesseja +Comment[fo]=Umsit koyrandi tilgongdir +Comment[fr]=Administre les processus en cours +Comment[frp]=ΔιαχείĎÎąĎη Ď„ĎεχουĎών διεĎγαĎιών +Comment[gl]=Xestionar os procesos en execuciĂłn +Comment[he]=ניהול התהליכים הפעילים +Comment[hr]=Upravljaj pokrenutim procesima +Comment[hu]=FutĂł folyamatok kezelĂ©se +Comment[id]=Mengelola proses yang berjalan +Comment[is]=SĂ˝sla með keyrandi ferli +Comment[it]=Gestisce i processi attivi +Comment[ja]=実行中ă®ă—ă­ă‚»ă‚ąă‚’管ç†ă—ăľă™ +Comment[kk]=Орындалып жатқан үрдіŃтерді баŃŇ›Đ°Ń€Ń +Comment[ko]=실행중인 프로세스를 관리합ë‹ë‹¤ +Comment[lg]=Teekateeka emirimu egibindabinda +Comment[lt]=Tvarkyti vykdomus procesus +Comment[lv]=PÄrvaldÄ«t aktÄ«vos procesus +Comment[nb]=HĂĄndter kjørende prosesser +Comment[nl]=Beheer lopende processen +Comment[nn]=Handsam prosessar som køyrer +Comment[pa]=ਚੱਲ ਰਹੇ ਪਰੋਸŕ©ŕ¨¸ ਦਾ ਪਰਬੰਧ +Comment[pl]=ZarzÄ…dza uruchomionymi procesami +Comment[pt]=GestĂŁo dos processos em execução +Comment[pt_BR]=Gerencie processos em execução +Comment[ro]=GestionaČ›i programele pornite +Comment[ru]=Управлять запŃщенными приложениями и процеŃŃами +Comment[sk]=SpravovaĹĄ beĹľiace procesy +Comment[sl]=Upravljajte zagnana opravila +Comment[sr]=Управљање покренŃтим процеŃима +Comment[sr@latin]=Upravljanje pokrenutim procesima +Comment[sv]=Hantera processer som kör +Comment[te]=నడŕ±ŕ°¸ŕ±Ťŕ°¤ŕ±ŕ°¨ŕ±Ťŕ°¨ ప్రక్రియలనౠనిర్వహించౠ+Comment[tr]=Çalışan sĂĽreçleri yönet +Comment[tt_RU]=Җибәрелгән ĐşŃĐĽŃ‹Ńталар һәм процеŃŃлар белән идарә итү +Comment[ug]=ئىجرا بŮلۇۋاتقان ئىجرالارنى باشقۇرۇش +Comment[uk]=КерŃвання запŃщеними процеŃами +Comment[vi]=Quản lĂ˝ các tiáşżn trình Ä‘ang chạy +Comment[zh_CN]=管ç†čżčˇŚä¸­çš„进程 +Comment[zh_TW]=管ç†ĺź·čˇŚä¸­çš„程式 +GenericName=Process manager +GenericName[af]=Prosesbestuurder +GenericName[ar]=إدارة العملية +GenericName[ast]=Alministrador de procesos +GenericName[be]=Менеджар працэŃаў +GenericName[bg]=ПроцеŃов мениджър +GenericName[bn]=প্রসেস ম্যানেজার +GenericName[ca]=Gestor de processos +GenericName[cs]=Správce procesĹŻ +GenericName[da]=ProceshĂĄndtering +GenericName[de]=Prozessverwaltung +GenericName[el]=ΔιαχειĎÎąĎτής διεĎγαĎιών +GenericName[en_GB]=Process manager +GenericName[es]=Gestor de procesos +GenericName[et]=Protsesside haldamine +GenericName[eu]=Prozesu-kudeatzailea +GenericName[fa]=مدیر Ůرآیند +GenericName[fi]=Prosessien käsittelijä +GenericName[fo]=Tilgongdar fyrisiting +GenericName[fr]=Gestionnaire des tâches +GenericName[frp]=ΔιαχειĎÎąĎτής διεĎγαĎιών +GenericName[gl]=Xestor de procesos +GenericName[he]=מנהל התהליכים +GenericName[hr]=Upravitelj procesa +GenericName[hu]=FolyamatkezelĹ‘ +GenericName[id]=Pengelola proses +GenericName[is]=FerlastjĂłrnun +GenericName[it]=Gestore processi +GenericName[ja]=ă—ă­ă‚»ă‚ąăžăŤăĽă‚¸ăŁ +GenericName[kk]=ҮрдіŃтерді баŃқарŃŃŃ‹ŃŃ‹ +GenericName[ko]=프로세스 ę´€ë¦¬ěž +GenericName[lg]=Ekiteekateeka emirimu +GenericName[lt]=ProcesĹł tvarkytuvÄ— +GenericName[lv]=Procesu pÄrvaldnieks +GenericName[nb]=ProsesshĂĄndtering +GenericName[nl]=Procesbeheerder +GenericName[nn]=Prosesshandsamar +GenericName[pa]=ਪਰੋਸŕ©ŕ¨¸ ਮŕ©ŕ¨¨ŕ©‡ŕ¨śŕ¨° +GenericName[pl]=MenedĹĽer procesĂłw +GenericName[pt]=GestĂŁo de processos +GenericName[pt_BR]=Gerenciador de processos +GenericName[ro]=Manager de procese +GenericName[ru]=ДиŃпетчер процеŃŃов +GenericName[sk]=Správca procesov +GenericName[sl]=Upravljalnik opravil +GenericName[sr]=Управљач процеŃа +GenericName[sr@latin]=UpravljaÄŤ procesa +GenericName[sv]=Processhanterare +GenericName[te]=ప్రక్రియ నిర్వాహకం +GenericName[tr]=SĂĽreç yönetici +GenericName[tt_RU]=ПроцеŃŃлар диŃпетчеры +GenericName[ug]=ئىجرا باشقۇرغۇ +GenericName[uk]=Менеджер процеŃів +GenericName[vi]=Quản lĂ˝ tiáşżn trình +GenericName[zh_CN]=进程管ç†ĺ™¨ +GenericName[zh_TW]=程式管ç†ĺ“ˇ +Keywords=task;kill;suspend;processor;memory;monitoring;performance; +Keywords[ca]=tasca;mata;suspèn;processador;memòria;monitoratge;rendiment; +Keywords[cs]=Ăškol;kill;uspat;procesor;paměť;sledovánĂ­;vĂ˝kon; +Keywords[da]=task;kill;suspend;processor;memory;monitoring;performance;opgave;dræb;hukommelse;overvĂĄgning;ydelse; +Keywords[de]=Task;Prozess;Anwendung;abbrechen;kill;beenden;aussetzen;Prozessor;Speicher;Ăśberwachung;Leistung; +Keywords[es]=tarea;finalizar;suspender;procesador;memoria;monitorizaciĂłn;desempeño; +Keywords[et]=tegum;seiska;peata;protsessor;mälu;monitoorimine;jõudlus; +Keywords[eu]=ataza;hil;eseki;prozesadorea;memoria;monitorizazioa;errendimendua; +Keywords[gl]=tarefa;matar;suspender;procesador;memoria;monitorizaciĂłn;rendemento; +Keywords[he]=משימה;תהליך;השהיה;מעבד;עיבוד;זיכרון;× ×™×ור;מעקב;מוני×ור;ביצועים; +Keywords[hu]=feladat;kilövĂ©s;kĂ©szenlĂ©t;processzor;memĂłria;megfigyelĂ©s;teljesĂ­tmĂ©ny; +Keywords[id]=tugas;bunuh;suspensi;prosesor;memori;pemantauan;kinerja; +Keywords[ja]=タスク;強ĺ¶çµ‚了;サスăšăłă‰;ă—ă­ă‚»ăサ;ăˇă˘ăŞ;監視;ă‘ă•ă‚©ăĽăžăłă‚ą; +Keywords[kk]=task;kill;suspend;processor;memory;monitoring;performance;тапŃырма;үрдіŃ;қолданба;бағдарлама;өлтірŃ;тоқтатŃ;ұйықтатŃ;процеŃŃор;жады;бақылаŃ;өнімділік; +Keywords[ko]=task;작업;kill;ę°•ě ś 종료;suspend;대기;processor;프로세서;memory;메모리;monitoring;모ë‹í„°ë§;performance;성능; +Keywords[lg]=mulimu;komya mbagirawo;guyimirire kulinda kiragiro;kitundu ekibazi;gwanika;kulabiriza;kukuluusana; +Keywords[lt]=uĹľduotis;nutraukti;pristabdyti;procesorius;atmintis;stebÄ—jimas;našumas; +Keywords[nl]=taak;afbreken;pauzestand;processor;geheugen;bewaken;prestatievermogen; +Keywords[pl]=zadanie;zabij;wstrzymanie;procesor;pamięć;monitorowanie;wydajność; +Keywords[pt]=tarefa;terminar;suspender;processador;memĂłria;monitorização;desempenho; +Keywords[pt_BR]=tarefa;finalizar;suspender;processador;memĂłria;monitoração;performance; +Keywords[ru]=процеŃŃ;задача;программа;приложение;Ńбить;ĐľŃтановить;процеŃŃор;память;отŃлеживать;производительноŃть; +Keywords[sr]=task;kill;suspend;processor;memory;monitoring;performance; +Keywords[sv]=task;kill;suspend;processor;memory;monitoring;performance; +Keywords[te]=పని;అంతంచేయి;అర్థంతరంగానిలŕ±ŕ°Şŕ±;ప్రాసెసర్;మెమొరి;పర్యవేక్షణ;పనితనం; +Keywords[tr]=görev;öldĂĽr;durdur;iĹźlemci;hafıza;gözlemek;performans; +Keywords[uk]=процеŃ;задача;програма;вбити;Đ·Ńпинити;процеŃор;пам'ять;ŃлідкŃвати;продŃктивніŃть;Ńвидкодія; +Keywords[zh_CN]=task;kill;suspend;processor;memory;monitoring;performance;任务;ç»ć­˘;杀死;挂起;进程;内ĺ­;监视;性č˝; +Exec=lxtask +Icon=lxtask +Terminal=false +StartupNotify=true +Type=Application +Categories=GTK;System;Monitor; +X-AppStream-Ignore=true diff --git a/lxtask/lxtask.png b/lxtask/lxtask.png new file mode 100644 index 0000000000000000000000000000000000000000..7e173bda41514b288ab5ed45f24521c04515559b GIT binary patch literal 9055 zcmV-lBcR-gP)V0hs{Xu>VQwnPb3 zw`@O(WOHir4Sak zV|VP1-LX4%$L`o2yJL6kj@_|4cE|469lK+9?2g^BJ9fwJ*d4p$Z{a~*2EFmd8~=Q7 zZ|^^(X{y$_2s49-DnD=gU6;?@`K!h^U1Qbns;;}qJ+C^Z>-DtOdN!N=iy!^yNB^;n zHfa|Ejz*(DyL$C%B@x$QhE2zHo#b^s-zMR=LG-R;N=NeG!Gk~RvcS`>VuG1#S8{ok z$2ZuO;PDD}f19L6yz0x>E&smi^YT4*9b5HWT_jN5cUAY&Rk}4DN_7*~ofzP~_x~DK zo_)6Qq(oF8NSSy|L|sdFtuZNe_tJ$ptFF{GqP8(fmuIURqqW96@BU_c3^19T;KL6; z!e}(CC2ZTOTUXaz^mk3aF~+n?wWi;!^ZQlrv+DhPKF6a+kG97EN+~Esl@g%KN`D%d zV4dG6r8-G~_->Hl=}`Vo=#_L+6g5zZGTtyzU%qc zxlY&LuX_D1=TeHc#{g9)i6;$iyZ}#Vkp{(wVjPT)!0aBj$wDnMQsKKWpzt0546}!{ zioaohI*vUM`dv%i}1z zD1pIHq+m?(Jj7v++;De3faDu4U!UZCLNJ<_&QTsqO2(Z|=lJ*k=D%Qic6#v=ASQm* zF&+a~Z;p^J46?ayJjLjsC*#g_VFI``;Yp&ox`!XF2kW(Wu(oxCMK4Qbl|K$TOMPCgKA?z5u|c zk@#R>KGVpvY6;-SGBBU&=sBo{7rZK@pGED?&vY|~h(7+di?Rqx}mTM_{sB>;In;OHGJ?p1H3?m?;cp}Ff=bRd3( zitRSGg`nKxi&q$kUFU??MR~S~1a8c4YjHoVMttr@&?>RrNPO-_e6A4jjl|~_h|l%X z>B1SHU=XbXWK>PS+63L4_*^xK73bx;32!4l+U~b)Y=hd{vJ_Cb=%dbmUqv0X5_FZZ zRHIw#2wFAaEyU*ri@(K&SlQ;e3=M{+0O~h|@_qwUQ zOOya@*HlS2f-0hB>o!smA*5Ny{S>av5#1})0maEI4FpvQb+Y(XLY;{3=B17JZS&`^ ztLXAo0CS*&vkwF^y`gz6x476sDB`B4J00WCz z3AwAW_!m91g#kg%6|rqgakJrcNG@@5~5jSAhscQ?%4wp*lh3? z7f+oXBgkSGpPbD$B>hF)YIYyvWwL>qE{<|9iU1kW0&vdbbTUh@Rc7NfsJ4j$_fIuk4AMY%N>aK zG`V|q5cj1Rfu(m&8ZdJuq4@&1-w{+PS>dGYdj@|0pIrqEgH)s%$Vq}Y0@xhjd1~Fg zHHhCeL8KD{7-L}AL|H#oG;NOVtwnq%!I=W_A*);^fFgw#UOPZ1awxb`O!bOfP@;2s&dN-53B$$#;rN zQh=5)f~PvbQ)L`i&I#4u;5H?I%R`H+RLTh<-MODukM3Fe*~JYa1(gs6dkL<;GJ-LT z@%28G60blxhVfni)f;_JTY#s7I_QGVZ8a@i2wpF4B=?Ov5!7>ShX9YDUL-CpIWAD1 z&@X-G5GIp*JG|DnSxaH8!v#P*gR!4v(DgE74ug$HoopQQUW?N z0M!^7?(bmakicf{7bGxg4ce$wR=7$iTK%%JNfAuWc)TAC7_$g&;NT!Z zI#8|AJ%<>E1n24m&A~xxk-%ovF*r!j8z#+akAUHULT{*=RisA(RqYaQTBvK|0068J zSXa2{kU&&`C`FE5$_cCq+USfihvfRH#9ID<7w^wJKfwNR4~sL6q(>NE?O9Jifrz0% z&T(C0jXs|fc&Tn6 zb7STYEg^yRdas-lSm}OQQEnV+$f5>F1!L~TZ;zpK#)ofBzzp<933_{p_57@n#6eW* zjOF(&?p~fZ5I@rI9+7Kt_lgK){aA-Awq-QwQsV8ZT~XEqf~2sbTp&?21}`9=&xvyi zsc57KY#1-RHb&ATeDZ&$m_E#4G~@7UPxNGz`pe{C(F=6OJJe}U=a43h^L*f7S=4hk3Li+1;{aY7uR>DXSW zJarf1w^;n_gI+bwI--iDi-&@n9%>chb4epdfgG7os~-*H#cz+n%=q{(Pm%T%PCw7U z3>;idmvlQt@c`PEyXPDd@1X<)5>5q0f^nPfUYyj@To|%NBhVNL%~r2`ZYJo8`FugY z*_E$?m}LTbg9O*VIs$9pZ+I-)92GrNzp#b)Dix1}5<%yT z2EO&90}Kw70B}!aB0Jpv?;{T(!CP>l*#!kp!Kf(0#9L50St9_7z@gj$LxSv`iuwmtsMFK5y zx8%aPm9H4Xaf<%Xbx$L_@cVu2J(FPnN&+Mjj{p%yV?u8fBY_p}9s$FHq<{ogsz?Hc zhk_W!Oup1JVe7%5(uyzU1IUxj&vGgGZn16`Q-ejJq#8v%Y4yI&7>hGo^-BcSjF-MW zM%q{S;Fl90oXY1?YX0QjTqMBt)MpNnOJoIMG1JJ-OtXPw1i4$-aa>R)&Lffg$<8(O zf+aiHFkbzq2hbT~@0mox)>Z<{X9n5KIG>@qB+U@!Q+wSe70JMSVz8Jowu1t!R2R?? z402Vq9sJ$Aj2M<|1n);Hdrl>c^rdg?gB0QM-8m+oWiUnn9){%8i6KZBU+cpdhVuGa zCSH(AYKho|YTo5+M2gDf0oD?)AVqlb2P5?NWo7SQNo+(i#4Hpspz1}uNBG)|J^(sH zYYG0v7=d+dRw`XXS`X=pqyRJd0HD!~Ti-ndGw{JLCQzvo*N*K(8N!qM8B_usUhBbS zu~W(ZUUCCF7-1B95f+P3HY3SFw_p1QdxADHFg#Yik~*ZRlWz}0>stIZ=-;Mo<+^1A zaS+){s-UyQk6P|8%Ufo$>0Rr%32fI3 z=ycTN^EDx0-ailS9#K?!PQc6GIYgcr+_^m!-`|RU)VBVWq6jJhzVe47Bnj}&pUD;{UJw(H_9S!;f;@{l5#40!Bwlq=AF33lfLwQ_xqaaCYjAx1b6(M*^v- zR*foEd;#N+03eD3Yc{?6*%yX5xY9#DH@Nfm%(sJM;}`)p4}dVapMf`P{y8ou6M_ZjM;tIJqJ}3#39K zrzC#J?_PR+jI^il{+lN@G%eh1*y=&UP$bge6^iM_U> z0Qb84RC3FsqXaL!K7{HKe)Hp*Fb5INo-o)jMn?%8YsO4eE?f=CD+mxap|}_d3xbfO z6~(W-?6ht-9L&wkK?Dp(p<0&N64%|R3dI`3v5cc=#mS4Ul$8fhdI~Rp?@)aIJ9C_T zmU&l;8Qu+4DWSh7;LFLq94Zk8U@HNXoy@_33e~|jvgm9Mu{#8D9E}t7M+(Z`50R4l zvwUj|@b!PP51lbS{nZ@jr^a_k^%CGHz}>^KLT{LOP|DRU$eajAks_Iwk+O?H1^3bC z6_7^)2Np5Bv_65ZJiOdP*RT=Tm4W%0hRy@KQizVmvJQ(gL6VXc>kOEXsG83KA`O!ZUT}7jV{njQ|Ct2m6JynYk*eQ$NV{_4JYjFF!S5JU`L!Nlx3 zj>1r8SP*}9Pq%wmTkS|re=g^_j9E2E9uEe~IgFUf@i7aAS!Az;O+U2uw>PcHg1 zNkx>CiY1;c`XmKKK)RRU#w$Yse||X;Y8mnW14D|s&Nkll{UaP{`dfT0etwgb18F2NI{=IG9V>j5F2Z$XL3GR zdj*L%M#BA&%%4&!m_;VYazX%+v<|>hY~ohbZ*PwQS_=>;#>(R?o=~DCh8TNXKq(Y3 zO)2}5${v7l>wAaDGsfND%%C$-(#%%zvoMfXc5InP0h9YVu6&tsc&(2I@6D^dm4t;U zRe*R@BpImiJi(~F`eF}PUhF~V2JgOc7PV`Yzh{qy0mKNjNTK&4;{BAUVB`@6ru2!d z3ClR6UU5Q+FBKrb|2 zw!Z)SKc7grHRk{T8S+6CC`tSz>k6LS&p-eUuczL%QbaJ0St6oCDSwYljKo)zQz89F zVhO-E|9BrpGv0aQ42GTI7`l3#JMu z$j%sl{nIlj1sE2+=4^@cC$L2*${UT|s{vp%g^njBzn)@`nqj>d_E-m55y9R&Xj$Xi zv;h!>e#weGvbVsN3rG7Yj-MOi_~sDDHwQSnA+N!H6bmox2TMG{^4avy*HPp(R@Vc2U#J`_hF zgU;moxBuHz0()jT9g+c@pBM}d750t^^NC#3p~267HNg-6k)1KpK4Ey6ct(M>=*8^MAU23B6P)kex9;{Moq;MT=Kr z3`>0;NEgN+qy|STQvghcW09vXOk)Jygd!3 zZJa4v@qkpqxjj8u5WlpqWYv50FRFbbfQ&6l4eA|=#144og+30i_wexJh3#>~KoT}> z7(J8X#@7Zgn(?3h^*xwHQ3U&mHj%1fM$%KB_`#P9yQQ8#GT`SEjGjsGw znnGcR4~ZMu;KA6AUR)Ag%t7q3onST$qsi;Vf-y?U2I(k3!Uk5Z(4 z0*nxf88C)m48v%aZBrQN4Hc49L2HJ|jdUL|23i}LcrD{ekyOD#1%}|rQnD*crIHh< zl=#{NkpK+f;6^AFbA9;8b{Bc^`+G?Hgm?d9YMETrOmC>5dI}~N+rwx9n2csX!+RtB zQ6dt`-;cEc9$TB}SiT#K71BO%^IMXra_3h$RBDN?snyK7dk3uV1#pyp?2s&*7DgmlvR;4scmi-f(S=P9f>9Xu&fxCb_j`|oF%exA#|K30#U5IJoCmzYO}x|3aU@PJ!fsuzJskr$ zdlJAP*mSm=-;#orhaYI!?+36eA7Hz}O|++wvxA%)=xPYqUbkHTNT7>00=ZEYaJ)sA z129zVMp=k8<{SzSx|A_vBBqF3M?V=9%D)5*vgo2C!Xt@G3=S0f1FOpuF&b~aHbieo zID4#d?>BRSr8Pp5sR@K<4hbBd+1>VTL?9zJPaIvGJ+i^EBbf(dfahN80VJ!R6hr62 zIPSVG#SO8GZK$|iTxs_*MziSOdTCf)dAP^cQS#@V4s!&J5;)k|2|E1GI+|dPEkYak z<0uir#92he)xuy42}|bi_(snIRyt>V^$!og47~F{rbv3^?G;4CXC@fuavJiUh$wCp zpP4zzWt8VwOl8~n(U{O15}vsw;{Wcib1~kWv~fU^bt|1Da{As~vmhl+MM3TcNYHAP zL0B#ik5{#cxYjd50p5ztd=uA@M~*!gvviE-fU2^tFg}1d5>=es&!uO;_0-4fkDu@1 z_<4bdKl;U)C2(=&8;%IhQQ~W~>SEUpk?Y1bz;pIk49ej#;knmR=#25%+u9n!E~Zf= zez*V?j7kG|kEHCT*4G?fKtf0xpT+tyj@$dxt!M&eZmF=)y>#H>3pLFhiW@B2Mi9Q$ zxWeRq1~71NE%kQPSN~uPodNIv&zUts*`}2{#wL&n5ibAMMC!~er(aljRiEEkyc1$zL5TWaR}8aVuq*yl}OVF zqk)%yxCfmv?%h6@5;4E}5W>sG62D7@E)^M(8P+IdoLfWiORx8!7mR!VFSk;N!b&bM zULEn<7Q`j(8^|@~;gXwYY-F`L{o4`0*blFn_^MRVTb;%onm;*4AO=n!d3!Iz>HpJVyiLN#wOh{HzEKo?^e z@Z{4Bk3Y$+S5kT|`z!<3uP^d6P*Kf0useao_N$9ooISMJN05!9AAf9oFe|p=z+q1^+7Y%#!#@wH03`}ixFqVnoQo-|u z!F;A9_OIXrC`6(LhKCBbzBdAtxPB^80ztclZy3g|L}nHwa9-8gEe;S#HLuQG*D@FD zkfe?2=f+AU#@%0QWasw2Y#AF2!x##B!~o}~A!o5xMcSOe>b;0BPzA*9UtNQU`n`FJ zgs$70w=DXkMBFS*K-oYdQnI}aBDmImcXBWH_mIsPpZwLi5J5*PmILuaf=GkW=StBs zF1Wki+tG}L-PR@P0U!RaxvUY*9{&h#ZBRXa2a*>1DDSvq$R$dEipi=Wew~WixE;Gq zs&LUfwrvWY+!NOe26*=;Qz&JFFAPAlO)yc_4Yu2Q8u?NqaqFPOw>S0%&mJ12L&C!k zOd+X7l0%hW`P|9kubC6Nv{*ne1gX@Sf|=`$z6);0F2y$Np<0SU$(k4^pJtLz2*!Iq znT6nshhVAb-mcW5EoAR9NmdfG4PF|;^r6AYC+y=84(Tf-wZvIRl|6}@JtMk22@r=o z%e#1e!TasnI0Gx`323y>_`;JmP!ijqB6arZio{bE%>1@W;0@f)Q;gYO%6-SR6?I)vz4!n?PBd>X|eEc~h| z0)8sa-GTVbROmovK!EL2c=y*iPChkAdI4wP2(IK-6-nJx94S;P!t##p&l7O2yem6zc1_xaH0A^ECrq9*82Fwg&M8K7A_#rIHZi z?Tm=o3c;;5$#+59#%@;vG#V`zv;k8bszrqD`=S)a+kbxQ4MSJA=t8gseY;A3zW8%f z#Dm1uiST<9mHHN%J9H#In(&BALISIzfN{Wq9fH=u;-_*Sz6R0Pz6%Kz_Za37A(V_= zvCxf{+J5=JNc_S|L~)0Yrq=C+oke0e*P?tb(O;$H4O4C)zS|J1ZBF7nh8xM>kvUe* z39P~ZfM^Ge7NgJi;cMZ3m6GifNNC!9E9nsi2Z`?`2!wDhS^pah4EH7HF7{fg>=miz zRnqYqRFo}@B8YxM@@Q~0O(bjaqR#X7neEj0xyw!SN z_V7jH-n_2$n;?N`+=3=sFc`*H+!XqPm;lzC+nqLiHW^ooctHZuxDz={ymLo|nlK@{ zH$O3@okgm*pqZbtM<8oeB(Jb{@V4E+CL@r5ik&g4^}g?O$IW`rowIHCEh0cKOts-? zqm}FsG{pFOwSLbRsNVRY^gQBLQmesR+*zdF;MI#3;v+^3UFf;3Vc@pBfF@N_+5NJk z(RT^^?eYpcmaNvF51q&2Lfk#tiV{$r#x(S$S({p&4gbr9WRMh`ZC+ zP29as0U@;|70|F%3@*Xl+va||8}{d01>){Hw$0lHn~w_?BD&HMAMhH|d2 z4z@&p+EfBqbAxNQjB$k#zZLuKqS{92Iu^CNcGO9}RmQFk^HTR=ys-q}+MK{>UVh8= z+il&3rPJ6o2ztScRy)K100Q$#L_t&mo>h3H8v}6LC8$29twdyppm7I_zi}6m=rfhH z*a*NoQ`pA+KMh9&K&dv)P8*1CyBQ;?YY=f+#NL#! zzbk~VV1vZc(3BK&CkfygVAED4Zh~D$jcqbXm-GE@5x(e5!FA}VQ3G9UfYfWs4JWK^ z^>$^DO~?EW5I&|aH5oQ(jrdp5tAA0GR+nP7TkYF15-sgw382f&kTxg~F9B9Dirq@y zWb(fVHSxF30ua}BWeHGq=%4@W=YRU@t6%? + +pkgname=lxterminal-gtk2 +_pkgbase=lxterminal +pkgver=0.4.0 +pkgrel=1 +pkgdesc="VTE-based terminal emulator for GTK2" +arch=('i686' 'x86_64') +url='https://lxde.org/' +license=('GPL-2') +conflicts=('lxterminal') +depends=('vte-legacy') +makedepends=('intltool' 'gettext-tiny') +source=("https://downloads.sourceforge.net/lxde/${_pkgbase}-${pkgver}.tar.xz") +sha512sums=('d1462bf9739c5e9022cbabe9f9c8f70bbb882c0aba7a39d1f87d804f4002056151165d7555cace6f439c0acfbdcd3c959a420993379f646d066f5d30af71232e') + +build() { + cd ${_pkgbase}-${pkgver} + ./configure \ + --sysconfdir=/etc \ + --prefix=/usr \ + --disable-gtk3 + make +} + +package() { + cd ${_pkgbase}-${pkgver} + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lxterminal/PKGBUILD b/lxterminal/PKGBUILD new file mode 100644 index 0000000..c041356 --- /dev/null +++ b/lxterminal/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=lxterminal +pkgver=0.4.0 +pkgrel=1 +pkgdesc="VTE-based terminal emulator" +arch=('i686' 'x86_64') +url='https://lxde.org/' +license=('GPL-2') +conflicts=('lxterminal-gtk2') +depends=('vte' 'mesa-libgl') +makedepends=('intltool' 'gettext-tiny') +source=("https://downloads.sourceforge.net/lxde/${pkgname}-${pkgver}.tar.xz") +sha512sums=('d1462bf9739c5e9022cbabe9f9c8f70bbb882c0aba7a39d1f87d804f4002056151165d7555cace6f439c0acfbdcd3c959a420993379f646d066f5d30af71232e') + +build() { + cd $pkgname-$pkgver + ./configure \ + --sysconfdir=/etc \ + --prefix=/usr \ + --enable-gtk3 + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/lynx/PKGBUILD b/lynx/PKGBUILD new file mode 100644 index 0000000..ee39a74 --- /dev/null +++ b/lynx/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=lynx +pkgver=2.9.0 +_relver=${pkgver}dev.6 +_debver=2.9.0dev.6 +_debrel=1 +pkgrel=1 +pkgdesc="A text browser for the World Wide Web" +url="https://lynx.browser.org/" +arch=('i686' 'x86_64') +license=('custom:GPL-2+Lynx-Special-Exception') +depends=('libressl' 'libidn') +makedepends=('quilt') +backup=('etc/lynx.cfg') +source=(https://invisible-mirror.net/archives/lynx/tarballs/${pkgname}${_relver}.tar.bz2{,.asc} + https://deb.debian.org/debian/pool/main/l/lynx/lynx_$_debver-$_debrel.debian.tar.xz) +sha512sums=('0c15e00a8e36e43671a093182c69593d50bc5c51a4acd92faa59416055bf4a1fd9ecde903a0209963f1f55d1fd85136e8448ca7867e198100ff749c53e1e1531' + 'SKIP' + 'b3742e155d6107925fdb6b06c45dc1a54de9f043721f641cf11ccfbac46812c61c3cf33a516edad68a0f1ae74e256bfeed83bdd0797fcadf707ca5236f3b3f9c') +validpgpkeys=('C52048C0C0748FEE227D47A2702353E0F7E48EDB') + +prepare() { + cd ${srcdir}/${pkgname}${_relver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/lynxcfg.patch || true + rm -v debian/patches/nested_tables.patch || true + + quilt push -av + fi +} + +build() { + cd ${srcdir}/${pkgname}${_relver} + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --with-ssl=/usr \ + --enable-nls \ + --enable-ipv6 \ + --mandir=/usr/share/man + make +} + +package() { + cd ${srcdir}/${pkgname}${_relver} + make DESTDIR=${pkgdir} install + + # FS#20404 - points to local help + sed -i -e "s|^HELPFILE.*$|HELPFILE:file:///usr/share/doc/lynx/lynx_help/lynx_help_main.html|" ${pkgdir}/etc/lynx.cfg + + install -d ${pkgdir}/usr/share/doc/lynx + cp -rf lynx_help ${pkgdir}/usr/share/doc/lynx + + for i in COPYHEADER COPYING; do + install -Dm644 ${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/lzop/PKGBUILD b/lzop/PKGBUILD new file mode 100644 index 0000000..340b213 --- /dev/null +++ b/lzop/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=lzop +pkgver=1.04 +pkgrel=1 +pkgdesc="File compressor using lzo lib" +url='https://www.lzop.org/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('lzo') +source=(https://www.lzop.org/download/${pkgname}-${pkgver}.tar.gz) +sha512sums=('5829b4495ffefab549aa697a05c536ce593c572c9eee6004460583a0090abcd317c6074c4f981dfee6be61ac8d127f02dd37053b6cb782af64db41586a8bbb6e') + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/macchanger/PKGBUILD b/macchanger/PKGBUILD new file mode 100644 index 0000000..68f433b --- /dev/null +++ b/macchanger/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=macchanger +pkgver=1.7.0 +_debver=1.7.0 +_debrel=5.4 +pkgrel=1 +pkgdesc="A small utility to change your NIC's MAC address" +arch=('i686' 'x86_64') +url="https://github.com/alobbs/macchanger" +license=('GPL-3') +depends=('glibc') +makedepends=('quilt') +source=("https://github.com/alobbs/macchanger/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/m/macchanger/macchanger_$_debver-$_debrel.debian.tar.xz") +sha512sums=('55fbfe4f4e94f0822e7a71b8c7052ed6c3a05066859044498bd68d068c33902b5718e92c8e00b73af71b57ce825644e1f81eb4dd7ef11701f197b953d7853aff' + 'b50b52532fc987f443088f2a4d0f2327dac972e69bc4c0bc0a94de4583df76c7d32c40a143d24b7fa6e066fc36b89c4b160c02b26860c484aab5054a4032f0cc') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --bindir=/sbin \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/mailcap/PKGBUILD b/mailcap/PKGBUILD new file mode 100644 index 0000000..a6fad05 --- /dev/null +++ b/mailcap/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=mailcap +pkgver=2.1.53 +pkgrel=1 +pkgdesc='Helper application and MIME type associations for file types' +url='https://pagure.io/mailcap' +arch=('any') +license=('Expat') +makedepends=('python') +provides=(mime-types) +conflicts=(mime-types) +replaces=(mime-types) +backup=('etc/mailcap' + 'etc/mime.types' + 'etc/nginx/mime.types') +source=("${pkgname}-${pkgver}.tar.gz::https://pagure.io/mailcap/archive/r2-1-53/mailcap-r2-1-53.tar.gz") +sha512sums=('3f952a031f9e86321a4583dba42fa7778a2821c55fc42b6096cc56c531bc957e50c545ab0d470ab72782eb3815e8278df122e20c1ae532b7bbb55db12e00cb77') + +prepare() { + mv ${pkgname}-r2-1-53 ${pkgname}-${pkgver} +} + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING +} diff --git a/mailgraph/PKGBUILD b/mailgraph/PKGBUILD new file mode 100644 index 0000000..cbd3ad8 --- /dev/null +++ b/mailgraph/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=mailgraph +pkgver=1.14 +_debver=$pkgver +_debrel=17 +pkgrel=1 +pkgdesc="A very simple, free and libre mail statistics RRDtool frontend for Postfix and Sendmail" +url='https://mailgraph.schweikert.ch/' +arch=('any') +license=('GPL-2') +options=(emptydirs) +install=$pkgname.install +depends=('rrdtool' 'perl-file-tail') +makedepends=('quilt') +source=("https://mailgraph.schweikert.ch/pub/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mailgraph/mailgraph_${_debver}-${_debrel}.debian.tar.xz" + "$pkgname.initd" + "$pkgname.confd") +sha512sums=('3df0dae010ad166a157eb34a8b1fcf837ab42445d417855ea58937a75b74ca55c06044eefb6077a6117073c39a087bcdf5f58fe35c0e4d9c7d6b18bded7a0193' + '8056d3e0209a1bd2e638030cf170197613081242b952fb04bc37382459f2a92ce60e1ec266762e170f6c9194dec76acd5c689b1fcdc7ffba0224b17fdab3d886' + 'cd72766b972a13266ef03ada96dfd2aa5f49d95cc357d5683a860c6a10dfc318569a6547086861cd9448b5caf687fd9e0669e4a461d0ad13f1a71c2e8868c032' + '35efe24ea8f21b966fc50fe352f0f002a5cb9bacf7b5a6ddc653faf0bda97f1bc5b56ccf80ed6ac7ef2b6f67f7a18ad7a88862d44bd1607a9a8cc220f5feb7d2') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -i "s:mailgraph.rrd:/var/lib/mailgraph/mailgraph.rrd:" mailgraph.cgi + sed -i "s:mailgraph_virus.rrd:/var/lib/mailgraph/mailgraph_virus.rrd:" mailgraph.cgi +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + #CGI_DIR=`grep 'ScriptAlias /cgi-bin/' /etc/httpd/conf/httpd.conf | awk '{print $3}' | sed 's|"||g'` + CGI_DIR="/usr/share/webapps/mailgraph" + + install -D -m755 mailgraph.pl "$pkgdir/usr/sbin/mailgraph" + install -D -m755 mailgraph.cgi "$pkgdir/$CGI_DIR/mailgraph.cgi" + install -D -m755 mailgraph.css "$pkgdir/$CGI_DIR/mailgraph.css" + + install -Dm 644 "$srcdir/$pkgname.confd" "$pkgdir/etc/conf.d/$pkgname" + install -Dm 755 "$srcdir/$pkgname.initd" "$pkgdir/etc/init.d/$pkgname" + + install -d -m755 "$pkgdir/var/"{lib/,log/}mailgraph + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mailgraph/mailgraph.confd b/mailgraph/mailgraph.confd new file mode 100644 index 0000000..bcefa6c --- /dev/null +++ b/mailgraph/mailgraph.confd @@ -0,0 +1,18 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# Location of logfile that all (!) mail software (MTA, spamfilter etc.) logs to. +# mailgraph defaults to /var/log/syslog if unspecified +MG_LOGFILE="/var/log/messages" + +# Required daemon settings +MG_DAEMON_UID="mgraph" +MG_DAEMON_GID="adm" +MG_DAEMON_UMASK="0022" +MG_DAEMON_LOG="/var/log/mailgraph/mailgraph.log" +MG_DAEMON_PID="/run/mailgraph/mailgraph.pid" +MG_DAEMON_RRD="/var/lib/mailgraph" + +# Specify any extra options here. +# If MG_LOGFILE is in metalog format, add "-t metalog" to MG_DAEMON_OPTS +MG_DAEMON_OPTS="--ignore-localhost" diff --git a/mailgraph/mailgraph.initd b/mailgraph/mailgraph.initd new file mode 100644 index 0000000..18a2f9b --- /dev/null +++ b/mailgraph/mailgraph.initd @@ -0,0 +1,35 @@ +#!/sbin/openrc-run +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +start() { + ebegin "Starting mailgraph" + + # read mail log messages somewhere other than /var/log/syslog? + [[ -n "${MG_LOGFILE}" ]] && MG_DAEMON_OPTS="${MG_DAEMON_OPTS} -l ${MG_LOGFILE}" + + # create /run/mailgraph if necessary + if [ ! -d /run/mailgraph ] ; then + checkpath -q -d -o mgraph:adm -m 0775 /run/mailgraph || return 1 + fi + + UMASK=$(umask) + umask ${MG_DAEMON_UMASK:-0077} + start-stop-daemon --start \ + --name mailgraph \ + --user "${MG_DAEMON_UID}:${MG_DAEMON_GID}" \ + --name mailgraph \ + --pidfile ${MG_DAEMON_PID} \ + --exec /usr/sbin/mailgraph -- -v --daemon \ + --daemon-log="${MG_DAEMON_LOG}" \ + --daemon-pid="${MG_DAEMON_PID}" \ + --daemon-rrd=/var/lib/mailgraph ${MG_DAEMON_OPTS} + eend $? + umask "${UMASK}" +} + +stop() { + ebegin "Shutting down mailgraph" + start-stop-daemon --stop --quiet --pidfile "${MG_DAEMON_PID}" + eend $? +} diff --git a/mailgraph/mailgraph.install b/mailgraph/mailgraph.install new file mode 100644 index 0000000..eebfcb1 --- /dev/null +++ b/mailgraph/mailgraph.install @@ -0,0 +1,18 @@ +post_install() { + if ! getent passwd mgraph &>/dev/null; then + useradd -r -d /var/lib/mailgraph -g adm -s /bin/false mgraph + fi + + chown -R mgraph:adm /var/lib/mailgraph + chown -R mgraph:adm /var/log/mailgraph +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + if getent passwd mgraph &>/dev/null; then + userdel mgraph >/dev/null + fi +} diff --git a/mailutils/PKGBUILD b/mailutils/PKGBUILD new file mode 100644 index 0000000..7b061e5 --- /dev/null +++ b/mailutils/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=mailutils +pkgver=3.10 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="MUA command line tool (mailx)" +arch=('i686' 'x86_64') +url="https://www.gnu.org/software/mailutils/" +license=('GPL-3') +depends=('libldap' 'gnutls' 'gsasl') +makedepends=('quilt' 'automake-1.15') +options=(!emptydirs) +source=("https://ftp.gnu.org/gnu/mailutils/mailutils-${pkgver}.tar.bz2"{,.sig} + "https://deb.debian.org/debian/pool/main/m/mailutils/mailutils_${_debver}-${_debrel}.debian.tar.xz" + "fix-build-mb-len-max.patch") +sha512sums=('012fd10d580cf5f90365f92f9bf5a8d8f587d0eb34dda86561298ec38cb942b05bf53a364bf3f51687f35aa611baf9364349aeacd81ac2f278bb56498e99aadc' + 'SKIP' + '53f5bc9a266fe2f6074003c6c2ac89a80d130eadea7923a1632237066ba8100ce7c004f27ec07e8794bdc2e45775f2aa4999b1488b98cdc991fe2b3ee21613e0' + '48248bfae1cc3b80c3decfcb99f803b65fd0d068f6c09625eb5e3763b3184090d7bd97fa3bc916b3e2e8c737b2bd501aa25482a96aceb555c08307b54c2a24a8') +validpgpkeys=('325F650C4C2B6AD58807327A3602B07F55D0C732') + +prepare() { + cd "$srcdir/mailutils-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # additional fixes + patch -Np1 -i $srcdir/fix-build-mb-len-max.patch + + autoreconf -vfi +} + +build() { + cd "$srcdir/mailutils-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-gdbm \ + --with-gnutls \ + --disable-python \ + --disable-pam \ + --without-guile + make CFLAGS="$CFLAGS -O2" || make CFLAGS="$CFLAGS -O2" LDFLAGS="-L`pwd`/lib -lmutcpwrap -ltinfo" +} + +package() { + cd "$srcdir/mailutils-$pkgver" + make -j1 DESTDIR="$pkgdir" install + rm -f "$pkgdir"/usr/share/info/dir + mv "$pkgdir"/usr/bin/mail "$pkgdir"/usr/bin/gnu-mail + mv "$pkgdir"/usr/share/man/man1/mail.1 "$pkgdir"/usr/share/man/man1/gnu-mail.1 + chown -R root:root "$pkgdir" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mailutils/fix-build-mb-len-max.patch b/mailutils/fix-build-mb-len-max.patch new file mode 100644 index 0000000..b28dfc5 --- /dev/null +++ b/mailutils/fix-build-mb-len-max.patch @@ -0,0 +1,14 @@ +diff --git a/frm/frm.h b/frm/frm.h +index 178b87d54..7931faada 100644 +--- a/frm/frm.h ++++ b/frm/frm.h +@@ -34,6 +34,9 @@ + #ifdef HAVE_ICONV_H + # include + #endif ++#ifdef HAVE_LIMITS_H ++# include ++#endif + #ifndef MB_LEN_MAX + # define MB_LEN_MAX 4 + #endif diff --git a/maim/PKGBUILD b/maim/PKGBUILD new file mode 100644 index 0000000..b19863a --- /dev/null +++ b/maim/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=maim +pkgver=5.8.0 +pkgrel=1 +pkgdesc="Utility to take a screenshot" +arch=('i686' 'x86_64') +url='https://github.com/naelstrof/maim' +license=('GPL-3') +depends=('freetype2' 'libpng' 'libjpeg-turbo' 'libx11' 'libxcomposite' 'libxext' 'libxfixes' 'libxrandr' 'slop') +makedepends=('cmake' 'glm') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/naelstrof/maim/archive/v${pkgver}.tar.gz" + "fix-build-without-libwebp.patch") +sha512sums=('418725b1950f9374c2ff7508e1c52f6986b253ea1c155ef28604e514f1cf0753185eea43cde76a65b9de80bb8dd65ced48b49ce5dfccaf20f5caa49f41743f5b' + 'ac5c1799edf9fa69fcde81a8a3797b7d31f75c5113ba347004aef600b076b2be446779692ab8e7f98daf95c233145ca292b39a7235408ef169085c840b31dc9d') + +prepare() { + cd "$pkgname-$pkgver" + patch -Np1 -i ${srcdir}/fix-build-without-libwebp.patch +} + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "${srcdir}/$pkgname-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/maim/fix-build-without-libwebp.patch b/maim/fix-build-without-libwebp.patch new file mode 100644 index 0000000..29bf6b1 --- /dev/null +++ b/maim/fix-build-without-libwebp.patch @@ -0,0 +1,171 @@ +--- a/CMakeLists.txt 2024-04-10 02:30:19.000000000 +0200 ++++ b/CMakeLists.txt 2024-11-09 02:42:08.105959204 +0100 +@@ -27,7 +27,6 @@ + set( CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/modules" ) + find_package( PNG REQUIRED ) + find_package( JPEG REQUIRED ) +-find_package( WebP REQUIRED ) + find_package( XRandr REQUIRED ) + find_package( XRender REQUIRED ) + find_package( XFixes REQUIRED ) +@@ -51,8 +50,7 @@ + ${JPEG_INCLUDE_DIR} + ${XRANDR_INCLUDE_DIR} + ${XRENDER_INCLUDE_DIR} +- ${PNG_INCLUDE_DIRS} +- ${WEBP_INCLUDE_DIR} ) ++ ${PNG_INCLUDE_DIRS} ) + + # Libraries + target_link_libraries( ${BIN_TARGET} +@@ -64,8 +62,7 @@ + ${XRANDR_LIBRARY} + ${JPEG_LIBRARIES} + ${XRENDER_LIBRARY} +- ${SLOP_LIBRARIES} +- ${WEBP_LIBRARY} ) ++ ${SLOP_LIBRARIES} ) + + if( ${CMAKE_VERSION} VERSION_LESS 3.7 ) + message( WARNING "CMake version is below 3.7, CMake version >= 3.7 is required for unicode support." ) +--- a/src/image.cpp 2024-04-10 02:30:19.000000000 +0200 ++++ b/src/image.cpp 2024-11-09 02:46:22.827983861 +0100 +@@ -271,32 +271,6 @@ + delete[] imageData; + } + +-void ARGBImage::writeWEBP( std::ostream& streamout, int quality ) { +- // assume 4 channels +- if (channels != 4) { +- throw new std::runtime_error("WebP tried to save image with more than 4 channels"); +- } +- +- size_t size; +- uint8_t* out; +- if (quality == 10) { +- // encode lossless at highest quality +- size = WebPEncodeLosslessRGBA(data, width, height, width * 4, &out); +- } +- else { +- // otherwise, encode lossy +- size = WebPEncodeRGBA(data, width, height, width * 4, quality * 10.0f, &out); +- } +- +- if (size == 0) { +- throw new std::runtime_error("Failed to encode webp image"); +- } +- else { +- streamout.write((const char*)out, size); +- WebPFree(out); +- } +-} +- + bool ARGBImage::intersect( XRRCrtcInfo* a, glm::vec4 b ) { + if (a->x < b.x + b.z && + a->x + a->width > b.x && +--- a/src/image.hpp 2024-04-10 02:30:19.000000000 +0200 ++++ b/src/image.hpp 2024-11-09 02:46:50.178009792 +0100 +@@ -25,7 +25,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -92,7 +91,6 @@ + void writePNG( std::ostream& streamout, int quality ); + void writeJPEG( std::ostream& streamout, int quality ); + void writeBMP( std::ostream& streamout ); +- void writeWEBP( std::ostream& streamout, int quality ); + }; + + #endif +--- a/src/main.cpp 2024-04-10 02:30:19.000000000 +0200 ++++ b/src/main.cpp 2024-11-09 02:50:50.208237301 +0100 +@@ -185,7 +185,7 @@ + foo->formatGiven = options.count("format") > 0; + if ( foo->formatGiven ) { + foo->format = options["format"].as(); +- if ( foo->format != "png" && foo->format != "jpg" && foo->format != "jpeg" && foo->format != "bmp" && foo->format != "webp" ) { ++ if ( foo->format != "png" && foo->format != "jpg" && foo->format != "jpeg" && foo->format != "bmp" ) { + throw new std::invalid_argument("Unknown format type: `" + foo->format + "`, only `png`, `jpg`, or `bmp` is allowed." ); + } + } +@@ -272,7 +272,7 @@ + + DESCRIPTION + maim (make image) is an utility that takes a screenshot of your desktop, +- and encodes a png, jpg, bmp or webp image of it. By default it outputs ++ and encodes a png, jpg or bmp image of it. By default it outputs + the encoded image data directly to standard output. + + OPTIONS +@@ -289,7 +289,7 @@ + Sets the desired output format, by default maim will attempt to + determine the desired output format automatically from the output + file. If that fails it defaults to a lossless png format. Cur†+- rently supports `png`, `jpg`, `bmp` and `webp`. ++ rently supports `png`, `jpg` and `bmp`. + + -i, --window=INT + Sets the desired window to capture, defaults to the root window. +@@ -311,10 +311,9 @@ + + -m, --quality + An integer from 1 to 10 that determines the compression quality. +- For lossy formats (jpg and webp), lower settings will produce ++ For lossy formats (e.g. jpg), lower settings will produce + smaller files with lower quality, while higher settings will inc- +- rease quality at the cost of higher file size. A quality of 10 is +- lossless for webp. ++ rease quality at the cost of higher file size. + For png, lower settings will compress faster and produce larger + files, while higher settings will compress slower, but produce + smaller files. No effect on bmp images. +@@ -411,14 +410,14 @@ + ("h,help", "Print help and exit.") + ("v,version", "Print version and exit.") + ("x,xdisplay", "Sets the xdisplay to use", cxxopts::value()) +- ("f,format", "Sets the desired output format, by default maim will attempt to determine the desired output format automatically from the output file. If that fails it defaults to a lossless png format. Supports `png`, `jpg`, `bmp` and `webp`.", cxxopts::value()) ++ ("f,format", "Sets the desired output format, by default maim will attempt to determine the desired output format automatically from the output file. If that fails it defaults to a lossless png format. Supports `png`, `jpg` and `bmp`.", cxxopts::value()) + ("i,window", "Sets the desired window to capture, defaults to the root window. Allows for an integer, hex, or `root` for input.", cxxopts::value()) + ("g,geometry", "Sets the region to capture, uses local coordinates from the given window. So -g10x30-5+0 would represent the rectangle wxh+x+y where w=10, h=30, x=-5, and y=0. x and y are the upper left location of this rectangle.", cxxopts::value()) + ("w,parent", "By default, maim assumes the --geometry values are in respect to the provided --window (or root if not provided). This parameter overrides this behavior by making the geometry be in respect to whatever window you provide to --parent. Allows for an integer, hex, or `root` for input.", cxxopts::value()) + ("B,capturebackground", "By default, when capturing a window, maim will ignore anything beneath the specified window. This parameter overrides this and also captures elements underneath the window.") + ("d,delay", "Sets the time in seconds to wait before taking a screenshot. Prints a simple message to show how many seconds are left before a screenshot is taken. See --quiet for muting this message.", cxxopts::value()->implicit_value("5")) + ("u,hidecursor", "By default maim super-imposes the cursor onto the image, you can disable that behavior with this flag.") +- ("m,quality", "An integer from 1 to 10 that determines the compression quality. For lossy formats (jpg and webp), lower settings will produce smaller files with lower quality, while higher settings will increase quality at the cost of higher file size. A quality of 10 is lossless for webp. For png, lower settings will compress faster and produce larger files, while higher settings will compress slower, but produce smaller files. No effect on bmp images.", cxxopts::value()) ++ ("m,quality", "An integer from 1 to 10 that determines the compression quality. For lossy formats (e.g. jpg), lower settings will produce smaller files with lower quality, while higher settings will increase quality at the cost of higher file size. For png, lower settings will compress faster and produce larger files, while higher settings will compress slower, but produce smaller files. No effect on bmp images.", cxxopts::value()) + ("s,select", "Enables an interactive selection mode where you may select the desired region or window before a screenshot is captured. Uses the settings below to determine the visuals and settings of slop.") + ("b,bordersize", "Sets the selection rectangle's thickness.", cxxopts::value()) + ("p,padding", "Sets the padding size for the selection, this can be negative.", cxxopts::value()) +@@ -476,8 +475,8 @@ + + if ( !maimOptions->formatGiven && maimOptions->savepathGiven && maimOptions->savepath.find_last_of(".") != std::string::npos ) { + maimOptions->format = maimOptions->savepath.substr(maimOptions->savepath.find_last_of(".")+1); +- if ( maimOptions->format != "png" && maimOptions->format != "jpg" && maimOptions->format != "jpeg" && maimOptions->format != "bmp" && maimOptions->format != "webp") { +- throw new std::invalid_argument("Unknown format type: `" + maimOptions->format + "`, only `png`, `jpg`, `bmp` or `webp` is allowed." ); ++ if ( maimOptions->format != "png" && maimOptions->format != "jpg" && maimOptions->format != "jpeg" && maimOptions->format != "bmp") { ++ throw new std::invalid_argument("Unknown format type: `" + maimOptions->format + "`, only `png`, `jpg` or `bmp` is allowed." ); + } + } + if ( !maimOptions->windowGiven ) { +@@ -562,7 +561,7 @@ + XImage* image = x11->getImage( selection.id, px, py, selection.w, selection.h, imageloc); + + int num_channels; +- if ( maimOptions->format == "png" || maimOptions->format == "webp" ) { ++ if ( maimOptions->format == "png" ) { + // Convert it to an ARGB format, clipping it to the selection + num_channels = 4; + } else { +@@ -587,8 +586,6 @@ + convert.writeJPEG(*out, maimOptions->quality ); + } else if ( maimOptions->format == "bmp" ) { + convert.writeBMP(*out); +- } else if ( maimOptions->format == "webp" ) { +- convert.writeWEBP(*out, maimOptions->quality); + } + + XDestroyImage( image ); diff --git a/mallard-ducktype/PKGBUILD b/mallard-ducktype/PKGBUILD new file mode 100644 index 0000000..a5437f8 --- /dev/null +++ b/mallard-ducktype/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=mallard-ducktype +pkgver=1.0.2 +pkgrel=1 +pkgdesc='Parser for the lightweight Ducktype syntax for Mallard' +url="http://projectmallard.org" +arch=('any') +license=('Expat') +depends=('python') +makedepends=('python-setuptools') +source=("https://github.com/projectmallard/mallard-ducktype/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('7491d5bb3a0f7aeae73a9ecffdda7aac1ae3a9ab4595c8704913858a12309c890c7036b9b427fae816a62b598886d51679169648b64602c268dbf3eddf18587e') + +build() { + cd $pkgname-$pkgver + python setup.py build +} + +package() { + cd $pkgname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING +} diff --git a/markmywords/PKGBUILD b/markmywords/PKGBUILD new file mode 100644 index 0000000..fddea1c --- /dev/null +++ b/markmywords/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=markmywords +pkgver=0.1.3 +pkgrel=1 +pkgdesc="Minimal, free and libre markdown editor" +arch=('i686' 'x86_64') +url="https://github.com/voldyman/MarkMyWords" +license=('Expat') +depends=('discount' 'gtksourceview3' 'webkitgtk') +makedepends=('cmake' 'vala') +source=("https://github.com/voldyman/MarkMyWords/archive/v$pkgver/MarkMyWords-$pkgver.tar.gz" + "discount.patch" + "appdata.patch") +sha512sums=('5c3177841df6729c56196a124e13965e64d2027759f299e8caa6f91fc67156d866f37d8766ae6bcabecc79a61f88b06f8af06230f1a78f7957e69699f1be9586' + '2e8088e156fccce56e626d707cc2635b2e0aa732cc6d8948fd291e99c7dd9aaeda3b7ed15ec11a0b0f8f7f6887d6e4afdf3a8c918be5ac389bf7c4aa1b4b0b5e' + 'fb0e06a19464841ad81dacee3a4965dcdb053ee2b950688013751b9640eb2d5357e92f2d47d4a33c552d7ca8f9ac50413d4412d6bebd96f8ee8b1ce991023795') + +prepare() { + cd MarkMyWords-$pkgver + patch -Np1 -i ${srcdir}/discount.patch + patch -Np1 -i ${srcdir}/appdata.patch + sed -i 's/string args\[\]/string[] args/' src/Main.vala + sed -i 's|pixmaps|icons/hicolor/scalable/apps|' CMakeLists.txt + sed -i 's/document-export/document-revert/' resources/toolbar.ui resources/headerbar.ui +} + +build() { + cmake -B build -G "Unix Makefiles" ${srcdir}/MarkMyWords-$pkgver/ \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DGSETTINGS_LOCALINSTALL=OFF + make -C build +} + +package() { + make -C build DESTDIR="$pkgdir" install + install -Dm644 ${srcdir}/MarkMyWords-$pkgver/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/markmywords/appdata.patch b/markmywords/appdata.patch new file mode 100644 index 0000000..b06c0ae --- /dev/null +++ b/markmywords/appdata.patch @@ -0,0 +1,37 @@ +From 263c64e70fe2a2c2866f680f9b8b3c776d7e0e65 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= +Date: Wed, 22 Jul 2020 20:08:57 +0200 +Subject: [PATCH] Update appdata.xml to follow the current standard + +--- + data/com.github.voldyman.markmywords.appdata.xml | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +diff --git a/data/com.github.voldyman.markmywords.appdata.xml b/data/com.github.voldyman.markmywords.appdata.xml +index fa58148..f2a6c06 100644 +--- a/data/com.github.voldyman.markmywords.appdata.xml ++++ b/data/com.github.voldyman.markmywords.appdata.xml +@@ -1,11 +1,20 @@ + +- +- ++ + com.github.voldyman.markmywords.desktop +- MIT ++ mark-my-words.desktop ++ CC0-1.0 ++ MIT + Mark My Words + A clean markdown editor + +

Create and edit files in markdown format with live preview.

+
++ ++ ++ https://github.com/voldyman/MarkMyWords/raw/master/screenshots/screenshot-2015-1-29.png ++ ++ ++ Akshay Shekher ++ https://github.com/voldyman/MarkMyWords ++ https://github.com/voldyman/MarkMyWords/issues +
diff --git a/markmywords/discount.patch b/markmywords/discount.patch new file mode 100644 index 0000000..945b8a2 --- /dev/null +++ b/markmywords/discount.patch @@ -0,0 +1,53 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4a7131e..87d2386 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -2,26 +2,6 @@ project(MarkMyWords) + + cmake_minimum_required(VERSION 2.6) + +-# build the markdown lib +-include(ExternalProject) +-set(DISCOUNT_DEP_PATH ${CMAKE_SOURCE_DIR}/deps/discount) +-set(DISCOUNT_LIB_PATH ${CMAKE_BINARY_DIR}/libmarkdown.a) +-set(DISCOUNT_INCLUDE_PATH ${DISCOUNT_DEP_PATH}) +- +-ExternalProject_Add(discount +- PREFIX ${DISCOUNT_DEP_PATH} +- SOURCE_DIR ${DISCOUNT_DEP_PATH} +- CONFIGURE_COMMAND +- ${DISCOUNT_DEP_PATH}/configure.sh --src=${DISCOUNT_DEP_PATH} +- --prefix=${CMAKE_BINARY_DIR} +- --libdir=${CMAKE_BINARY_DIR} +- --with-fenced-code +- BUILD_COMMAND make install +- BUILD_IN_SOURCE 1 +-) +- +-include_directories(${DISCOUNT_INCLUDE_PATH}) +- + # build UI lib + list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +@@ -39,6 +19,7 @@ pkg_check_modules(DEPS REQUIRED + gtksourceview-3.0>=3.10 + gthread-2.0 + gtk+-3.0>=3.9.10 ++ libmarkdown + ) + + add_definitions(${DEPS_CFLAGS}) +@@ -115,13 +96,6 @@ OPTIONS + + add_executable(mark-my-words ${VALA_C} ${generated_resources}) + +-target_link_libraries(mark-my-words +- ${DISCOUNT_LIB_PATH}) +- +-add_dependencies(mark-my-words +- discount +-) +- + install(TARGETS mark-my-words RUNTIME + DESTINATION bin) + diff --git a/materia-gtk-theme/PKGBUILD b/materia-gtk-theme/PKGBUILD new file mode 100644 index 0000000..37c307c --- /dev/null +++ b/materia-gtk-theme/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=materia-gtk-theme +_pkgbasename=materia-theme +pkgver=20210322 +pkgrel=1 +pkgdesc="A Material Design theme for GTK+ based environments" +arch=('any') +url='https://github.com/nana-4/materia-theme' +license=('GPL-2') +depends=('gtk') +makedepends=('meson' 'sassc') +source=("https://github.com/nana-4/materia-theme/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('c384a1afd5cf72f7ccfc0d1af8fd7efbe66027aa6e293899d57e46d8e572822ec6070785e957b07464cf0b3b73a302b9344920af361a9e8ab582565b7cedba71') + +build() { + hyperbola-meson ${pkgname/gtk-/}-${pkgver} build + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 "$srcdir/$_pkgbasename-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" + + # remove unwanted / unsupported data + rm -rf "$pkgdir/usr/share/themes/"Materia{,-compact,-dark,-dark-compact,-light,-light-compact}/{chrome,cinnamon,gnome-shell,gtk-4.0,metacity-1,plank,unity,xfwm4} + rm -rf "$pkgdir/usr/share/themes/"Materia{,-compact,-dark,-dark-compact,-light,-light-compact}/INSTALL_GDM_THEME.md +} diff --git a/mc/PKGBUILD b/mc/PKGBUILD new file mode 100644 index 0000000..32767f6 --- /dev/null +++ b/mc/PKGBUILD @@ -0,0 +1,78 @@ +# Maintainer: Jesus E. + +pkgname=mc +pkgver=4.8.31 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A file manager for the console" +arch=('i686' 'x86_64') +url='https://midnight-commander.org/' +license=('GPL-3') +depends=('e2fsprogs' 'glib2' 'gpm' 'libssh2' 'slang' 'which') +makedepends=('libxt' 'libx11' 'unzip' 'quilt') +optdepends=('aspell: spelling corrections' + 'cabextract: ucab extfs' + 'cdparanoia: audio extfs' + 'libisoburn: iso9660 extfs' + 'cvs: CVS support' + 'gawk: hp48+ extfs' + 'mtools: a+ extfs' + 'p7zip: support for 7zip archives' + 'perl: needed by several extfs scripts' + 'unar: urar extfs' + 'unzip: open zip archives' + 'zip: uzip extfs') +backup=('etc/mc/edit.indent.rc' + 'etc/mc/filehighlight.ini' + 'etc/mc/mc.ext' + 'etc/mc/mc.keymap' + 'etc/mc/mc.menu' + 'etc/mc/mcedit.menu' + 'etc/mc/sfs.ini') +options=('!emptydirs') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/m/mc/${pkgname}_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/m/mc/mc_${_debver}-${_debrel}~bpo12+1.debian.tar.xz") +sha512sums=('dc2272a0016ed782eafc78efda575b04d064ffa7984a146f3389dea81f4c7886647e7d1f097b547f7ae00190c10e35979a24400a6bb936c023f190a82934c12d' + '6b5defa3cd71234be6a258e96654a328bde749969955243336d4f963634ff5ca6bca85209a3159c7577d1a365f9e48393a2af0dd2542dd7453bb4adedbec6f0e') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/disable_internal_editor.patch || true + rm -v debian/patches/ext_run-mailcap.patch || true + rm -v debian/patches/ext_use_default_editor.patch || true + rm -v debian/patches/use_sensible-editor.patch || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ + --with-screen=slang \ + --with-x + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + # Replace mc.keymap symlink with target file to fix backup mechanism + rm "${pkgdir}"/etc/mc/mc.keymap && cp "${pkgdir}"/etc/mc/mc{.default,}.keymap + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/mcabber/PKGBUILD b/mcabber/PKGBUILD new file mode 100644 index 0000000..b0650d7 --- /dev/null +++ b/mcabber/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=mcabber +pkgver=1.1.2 +_debver=1.1.2 +_debrel=1 +pkgrel=1 +pkgdesc='A small Jabber console client, includes features: SSL, PGP, MUC, UTF8' +arch=('i686' 'x86_64') +url='https://www.lilotux.net/~mikael/mcabber/' +license=('GPL-2') +depends=('ncurses' 'glib2' 'loudmouth' 'gpgme' 'libotr' 'aspell') +makedepends=('pkg-config' 'quilt') +validpgpkeys=('EACADFF156849BC89653139E3C2900DEACB7FC95') +source=(https://www.lilotux.net/~mikael/mcabber/files/$pkgname-${pkgver/_/-}.tar.bz2{,.asc} + https://deb.debian.org/debian/pool/main/m/mcabber/mcabber_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('bf53d593e84a4b4b2cf0230a4d94ea75f55008e3c2a839af5839519151209a61cce1685f9db14b65f5c4fa438bfabfeb25eb8e78e666b092c5c66af249788106' + 'SKIP' + 'b149dde679d8c5f2ad47da5b1a214839adb41704e38a98a236723694b2fc7f23d495cd12fa1ac466307c82e33121664799760ff5391254b23d89ef63aafb7340') + +prepare() { + cd "${srcdir}"/$pkgname-${pkgver/_/-} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}"/$pkgname-${pkgver/_/-} + + CFLAGS+=' -fcommon' + ./configure --prefix=/usr --enable-hgcset \ + --mandir=/usr/share/man \ + --enable-aspell --enable-otr + make +} + +package() { + cd "${srcdir}"/$pkgname-${pkgver/_/-} + + make DESTDIR="${pkgdir}" install + mkdir -p "${pkgdir}"/usr/share/mcabber/example + cp -a "${srcdir}"/$pkgname-${pkgver/_/-}/mcabberrc.example \ + "${pkgdir}"/usr/share/mcabber/example/mcabberrc + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mcpp/PKGBUILD b/mcpp/PKGBUILD new file mode 100644 index 0000000..169fdbd --- /dev/null +++ b/mcpp/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=mcpp +pkgver=2.7.2 +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="Alternative C/C++ preprocessor" +arch=('i686' 'x86_64') +license=('Simplified-BSD') +url='http://mcpp.sourceforge.net' +depends=('glibc') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mcpp/mcpp_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('1ca885cb13fdb684de9d0595a9215b52f48a93a69077d82cdcacafe40d9a61fb77b00a3ff2b8890e7bc0a0fcc0c8d70d4093c00c280351cd4459aba67c573235' + '08509945048ccc4525ecd61d3f901a4d81fe73c1db84c26b76664d5127970af45662a168b99836b58467afc7202a1a20e0dfe8954a87e4cd1368f2136d7955be') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --enable-mcpplib \ + --disable-static + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/md4c/PKGBUILD b/md4c/PKGBUILD new file mode 100644 index 0000000..0ce7074 --- /dev/null +++ b/md4c/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=md4c +pkgver=0.4.7 +_debver=0.4.7 +_debrel=1 +pkgrel=1 +pkgdesc="C Markdown parser" +arch=(i686 x86_64) +url="https://github.com/mity/md4c" +license=(Expat) +depends=(glibc) +makedepends=(cmake quilt) +source=($pkgname-$pkgver.tar.gz::"https://github.com/mity/md4c/archive/release-$pkgver.tar.gz" + https://deb.debian.org/debian/pool/main/m/md4c/md4c_$_debver-$_debrel.debian.tar.xz) +sha512sums=('90e6f4c91ff5a0faafcea3e50f6a3f3ed6ba9a42cb779b373e82b8a6a09ed4b19ed7221036a4a32171aa5ef19ee6824d3830fb9ab613bd59174b7db51bd1099b' + '2a1515dda2cedab2c3b34998728607a635a048b8ebc4db852e4d8be42b752a926fe3125e3931c4b256290dc52c6d154ebd725d7138e70f7665fb27db23764a3c') + +prepare() { + mkdir -p build + + cd $pkgname-release-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + cmake ../$pkgname-release-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr + make +} + +package() { + cd build + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir"/$pkgname-release-$pkgver/LICENSE.md -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/meandmyshadow/PKGBUILD b/meandmyshadow/PKGBUILD new file mode 100644 index 0000000..29bbef0 --- /dev/null +++ b/meandmyshadow/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=meandmyshadow +pkgver=0.5a +pkgrel=1 +pkgdesc="Free and libre puzzle / platform game in which you try to reach the exit by solving tasks" +arch=('i686' 'x86_64') +url='https://meandmyshadow.sourceforge.net/' +license=('GPL-3') +depends=('sdl2_gfx' 'sdl2_image' 'sdl2_ttf' 'sdl2_mixer' 'curl' 'libarchive' 'hicolor-icon-theme' 'mesa-libgl' 'lua') +makedepends=('cmake' 'gettext-tiny') +groups=('games') +source=("https://sourceforge.net/projects/${pkgname}/files/${pkgver}/${pkgname}-${pkgver}-src.tar.gz") +sha512sums=('c9e6de9c9b47af3839b6830faa3619ddc69b2c2cabf4d90f4c1393758805acf9835abcba45d79037766b4b6e5f006e6f880eba593d1142b0e829a887eb844f27') + +build() { + cmake \ + -S "$pkgname-$pkgver" \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBINDIR=games \ + -DDATAROOTDIR=/usr/share/games + make -C build +} + +package() { + make DESTDIR="${pkgdir}" -C build install + + # correct package-structure + mv "$pkgdir/usr/share/games/"{applications,icons} "$pkgdir/usr/share/" + + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mednafen/PKGBUILD b/mednafen/PKGBUILD new file mode 100644 index 0000000..78805f2 --- /dev/null +++ b/mednafen/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=mednafen +pkgver=1.29.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Command-line multi-system gaming emulator" +url='https://mednafen.github.io' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('libsndfile' 'sdl2' 'zlib' 'alsa-lib') +makedepends=('mesa' 'glu' 'quilt') +source=("https://mednafen.github.io/releases/files/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/m/mednafen/mednafen_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('375f0fb4f12907faf56b4e9ecdc44c1655b0660a3773240fe3118f2b261e171479b8eb254299f899fc442b54041c941eab2a5f343aec559d9731c3e92cde0569' + '60c70984f8225267b3938558de46c2929c383a9d247518a288378c0b40e47b3c6ac22710999ea8670e03d72dee3125a92bb8bb0500492e966e3a4dc3fe789e9b') + +prepare() { + cd $pkgname + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname + + make DESTDIR="$pkgdir" install + + for i in ABOUT-NLS AUTHORS ChangeLog COPYING INSTALL NEWS \ + README{,.DOS,.PORTING} TODO; do + install -Dm644 $i "$pkgdir"/usr/share/doc/$pkgname/$i + done + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mednaffe/PKGBUILD b/mednaffe/PKGBUILD new file mode 100644 index 0000000..cf8739d --- /dev/null +++ b/mednaffe/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=mednaffe +pkgver=0.9.3 +pkgrel=1 +pkgdesc="Frontend (GUI) for mednafen emulator" +arch=('i686' 'x86_64') +url='https://github.com/AmatCoder/mednaffe' +license=('GPL-3') +depends=('mednafen' 'gtk') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/AmatCoder/mednaffe/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('6d331869b2bded1f48d6f86baddc03e3a411dcbe2c8e18c0c1dc0da8f0b2f95840cb3b305c9ffa1478f6d5176b4b503770146bcadba85c60b0b7b1fc1de810f6') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make prefix="$pkgdir"/usr install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/megaglest/PKGBUILD b/megaglest/PKGBUILD new file mode 100644 index 0000000..637967e --- /dev/null +++ b/megaglest/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Jesus E. + +pkgname=megaglest +pkgver=3.13.0 +pkgrel=4 +pkgdesc="A free and libre 3D real-time strategy game in a fantastic world" +arch=('i686' 'x86_64') +url='https://megaglest.org' +license=('GPL-3' 'CC-BY-SA-3.0') +provides=('megaglest' 'megaglest-data') +conflicts=('megaglest' 'megaglest-data') +depends=('curl' 'sdl2' 'libvorbis' 'openal' 'mesa-libgl' + 'lua' 'icu' 'ftgl' 'glew' 'libircclient' 'miniupnpc' 'wxgtk3' + 'glu' 'libx11' 'xz') +makedepends=('ftjam' 'cmake' 'mesa') +groups=('games') +source=("https://github.com/MegaGlest/megaglest-source/releases/download/${pkgver}/megaglest-source-${pkgver}.tar.xz" + "https://github.com/MegaGlest/megaglest-data/releases/download/${pkgver}/megaglest-data-${pkgver}.tar.xz" + "remove-xvfb-run.patch") +sha512sums=('5ae74efce55d7ec9f38d7701da9c865458e15223b5a3c5ac829e09dc81e63fbea2a235cae99450ea7333044c5166af82a762a29c5793c75711d1200688518b5c' + 'ac6a6dd85ec2e45d3107549199251b504f128b8fc254b683c7d9c0841b86cd4c32cd45c9d3cbddc3f989bd965d61ef5a0dca9212431876c00a13f8398ff45f4c' + 'c5dba27d9521c567ae14e1cc372f14154719ea54aaa13d6bab04d20242b9bde5502a63f87de1b8e8069da64c4174c7ce5f37d6562ac8dd36f65c22ad7737c2a8') +noextract=("megaglest-data-${pkgver}.tar.xz") + +prepare() { + mkdir -p megaglest-data-${pkgver} + tar -xf "megaglest-data-${pkgver}.tar.xz" --strip 1 \ + -C "megaglest-data-${pkgver}" + + cd $srcdir/megaglest-${pkgver} + + # remove unneeded call + patch -p1 -i ${srcdir}/remove-xvfb-run.patch +} + +build() { + cd $srcdir/megaglest-${pkgver} + + [[ -d build ]] && rm -r build + mkdir build && cd build + + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_FLAGS="-lX11 ${CXXFLAGS}" \ + -DWANT_GIT_STAMP=0 \ + -DMEGAGLEST_BIN_INSTALL_PATH=games \ + -DMEGAGLEST_DATA_INSTALL_PATH=share/games/megaglest \ + -DwxWidgets_CONFIG_EXECUTABLE=/usr/bin/wx-config-gtk3 \ + -Wno-dev + make + + cd $srcdir/megaglest-data-${pkgver} + + [[ -d build ]] && rm -r build + mkdir build && cd build + + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DMEGAGLEST_BIN_INSTALL_PATH=games \ + -DMEGAGLEST_DATA_INSTALL_PATH=share/games/megaglest \ + -Wno-dev +} + +package() { + cd $srcdir/megaglest-${pkgver}/build + + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/megaglest-${pkgver}/docs/gnu_gpl_3.0.txt" -t "${pkgdir}"/usr/share/licenses/${pkgname} + + cd $srcdir/megaglest-data-${pkgver}/build + + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/megaglest-data-${pkgver}/docs/cc-by-sa-3.0-unported.txt" -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/megaglest/remove-xvfb-run.patch b/megaglest/remove-xvfb-run.patch new file mode 100644 index 0000000..0d642ae --- /dev/null +++ b/megaglest/remove-xvfb-run.patch @@ -0,0 +1,18 @@ +--- a/CMakeLists.txt 2017-03-08 22:46:57.000000000 +0100 ++++ b/CMakeLists.txt 2021-05-31 20:33:09.078963028 +0200 +@@ -45,14 +45,7 @@ + OPTION(WANT_USE_XercesC "Enable libXercesC support." OFF) + + FIND_PROGRAM(HELP2MAN "help2man") +- +-set(XVFB_EXEC "") +-find_program(XVFB_RUN NAMES "xvfb-run") +-if (NOT ${XVFB_RUN} MATCHES "XVFB_RUN-NOTFOUND") +- set(XVFB_EXEC ${XVFB_RUN}) +- message(STATUS "Using xvfb-run to run man2help.") +-endif() +-MARK_AS_ADVANCED(HELP2MAN XVFB_RUN) ++MARK_AS_ADVANCED(HELP2MAN) + + include(${CMAKE_SOURCE_DIR}/mk/cmake/Modules/SpecialMacros.cmake) + include(${CMAKE_SOURCE_DIR}/mk/cmake/Modules/ReqVersAndStaticConf.cmake) diff --git a/meld/PKGBUILD b/meld/PKGBUILD new file mode 100644 index 0000000..8914865 --- /dev/null +++ b/meld/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=meld +pkgver=3.20.2 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="Compare files, directories and working copies" +url='https://meldmerge.org/' +license=('GPL-2') +arch=('any') +depends=('python-pygobject' 'python-pycairo' 'gtksourceview3' 'gsettings-desktop-schemas') +makedepends=('intltool' 'yelp-tools' 'quilt') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/m/meld/meld_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/m/meld/meld_$_debver-$_debrel.debian.tar.xz") +sha512sums=('9c9074cb879e3574eb9a1025eb1212771419ab0d8e92bf8a99f38e70ca583ff5c8cbeaccb87b414e6ff73a61afa08e10742991d574b810cc90e8c4a5ac82ddaa' + 'd6bc340b582047f615b752250c832f94fc790ae6443908feb038911524e13d4d56cb4502f2f846cb6fe894d52f5b55da5635b692797b7a0c54698694caef2ba4') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + python setup.py build +} + +package() { + cd $pkgname-$pkgver + + # using --skip-build breaks install + python setup.py --no-update-icon-cache --no-compile-schemas \ + install --prefix=/usr --root="$pkgdir" --optimize=1 + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mercurial/PKGBUILD b/mercurial/PKGBUILD new file mode 100644 index 0000000..de58757 --- /dev/null +++ b/mercurial/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=mercurial +pkgver=5.6.1 +pkgrel=1 +pkgdesc="A scalable distributed SCM tool" +arch=('i686' 'x86_64') +url='https://www.mercurial-scm.org/' +license=('GPL-2') +depends=('python') +makedepends=('python-docutils') +optdepends=('tk: for the hgk GUI') +backup=(etc/mercurial/hgrc) +validpgpkeys=(2BCCE14F5C6725AA2EA8AEB7B9C9DC824AA5BDD5 + 3A8155163D0E20A530FCB78647A67FFAA346AACE + EB851395B4223EE2F7BA0B28DA54740BF08732BA) # Pulkit Goyal <7895pulkit@gmail.com> +source=(https://www.mercurial-scm.org/release/${pkgname}-${pkgver}.tar.gz{,.asc} + mercurial.profile) +sha512sums=('d84d7d9ae4c738e3cb62b26c4dc7f3943abc1b1a55ccc46a4e3435896f715efb30d4d6ff4df6d02a8bef7bd6ead2d21a44342fb8a2101e8fe04211d21efc13b1' + 'SKIP' + '710dcddb24d928efc97370e869d9caa083107929ed9a1086dd2a3ae0caaf2c71e2f29060597e29315b6b15b1616251c42412e268ce737109c48ae4d7aa1b9555') + +build() { + cd $pkgname-$pkgver + make + make -C contrib/chg +} + +package() { + cd $pkgname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + make DESTDIR="${pkgdir}" PREFIX=/usr install + + install -m644 -D contrib/zsh_completion "$pkgdir/usr/share/zsh/site-functions/_hg" + install -m644 -D contrib/bash_completion "$pkgdir/usr/share/bash-completion/completions/hg" + + make -C contrib/chg DESTDIR="$pkgdir" PREFIX=/usr install + install -m755 contrib/hg-ssh "$pkgdir/usr/bin" + install -m755 contrib/hgk "$pkgdir/usr/bin" + + install -d "$pkgdir/usr/share/emacs/site-lisp" + install -m644 contrib/{mq.el,mercurial.el} "$pkgdir/usr/share/emacs/site-lisp" + + install -Dm644 contrib/vim/HGAnnotate.vim \ + "$pkgdir/usr/share/vim/vimfiles/syntax/HGAnnotate.vim" + + # set some variables + install -m755 -d "$pkgdir/etc/profile.d" + install -m755 "$srcdir/mercurial.profile" "$pkgdir/etc/profile.d/mercurial.sh" + + # add certs config to package + install -m755 -d "$pkgdir/etc/mercurial" + cat <<-EOF > "$pkgdir/etc/mercurial/hgrc" + [web] + cacerts = /etc/ssl/certs/ca-certificates.crt + EOF + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mercurial/mercurial.profile b/mercurial/mercurial.profile new file mode 100644 index 0000000..fc96182 --- /dev/null +++ b/mercurial/mercurial.profile @@ -0,0 +1 @@ +export HG=/usr/bin/hg diff --git a/mesa-demos/LICENSE b/mesa-demos/LICENSE new file mode 100644 index 0000000..ae33d27 --- /dev/null +++ b/mesa-demos/LICENSE @@ -0,0 +1,82 @@ +Disclaimer + +Mesa is a 3-D graphics library with an API which is very similar to +that of OpenGL* +To the extent that Mesa utilizes the OpenGL command syntax or state +machine, it is being used with authorization from Silicon Graphics, +Inc.(SGI). However, the author does not possess an OpenGL license +from SGI, and makes no claim that Mesa is in any way a compatible +replacement for OpenGL or associated with SGI. Those who want a +licensed implementation of OpenGL should contact a licensed +vendor. + +Please do not refer to the library as MesaGL (for legal +reasons). It's just Mesa or The Mesa 3-D graphics +library + +* OpenGL is a trademark of Silicon Graphics Incorporated. + +License / Copyright Information + +The Mesa distribution consists of several components. Different copyrights +and licenses apply to different components. For example, GLUT is copyrighted +by Mark Kilgard, some demo programs are copyrighted by SGI, some of the Mesa +device drivers are copyrighted by their authors. See below for a list of +Mesa's main components and the license for each. + +The core Mesa library is licensed according to the terms of the MIT license. +This allows integration with the XFree86, Xorg and DRI projects. + +The default Mesa license is as follows: + +Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Attention, Contributors + +When contributing to the Mesa project you must agree to the licensing terms +of the component to which you're contributing. +The following section lists the primary components of the Mesa distribution +and their respective licenses. + + +Mesa Component Licenses + +Component Location Primary Author License +---------------------------------------------------------------------------- +Main Mesa code src/mesa/ Brian Paul Mesa (MIT) + +Device drivers src/mesa/drivers/* See drivers See drivers + +Ext headers include/GL/glext.h SGI SGI Free B + include/GL/glxext.h + +GLUT src/glut/ Mark Kilgard Mark's copyright + +Mesa GLU library src/glu/mesa/ Brian Paul GNU-LGPL + +SGI GLU library src/glu/sgi/ SGI SGI Free B + +demo programs progs/demos/ various see source files + +X demos progs/xdemos/ Brian Paul see source files + +SGI demos progs/samples/ SGI SGI copyright + +RedBook demos progs/redbook/ SGI SGI copyright diff --git a/mesa-demos/PKGBUILD b/mesa-demos/PKGBUILD new file mode 100644 index 0000000..43b5797 --- /dev/null +++ b/mesa-demos/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname='mesa-demos' +pkgver=8.4.0 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc="Mesa demos and tools incl. glxinfo + glxgears" +url="https://www.mesa3d.org/" +license=('Expat') +depends=('mesa-libgl' 'glew' 'freeglut') +mksource=("https://mesa.freedesktop.org/archive/demos/mesa-demos-${pkgver}.tar.bz2"{,.sig}) +source=("https://repo.hyperbola.info:50000/sources/mesa-demos-libre/mesa-demos-libre-${pkgver}.tar.lz"{,.sig} + 'LICENSE' + 'libre.patch') +mksha512sums=('b72d03cad36e0535ff18dcfb222ec4200064b9264f6da51a6e5f03b0dd912abe188bc1d600b6698de3ce6f63b28d2ce01565886ca8e7079edc4967fbf2fb0957' + 'SKIP') +sha512sums=('51cd024ccc289ff135508af1a94b41f2eb5f696401a52ee6a5f759e078af2324ea4958a41672612cf1fd5adfa1713d74885bb029a0d943f0e4be5c0edcf99403' + 'SKIP' + '25da77914dded10c1f432ebcbf29941124138824ceecaf1367b3deedafaecabc082d463abcfa3d15abff59f177491472b505bcb5ba0c4a51bb6b93b4721a23c2' + '22adbecafe2a822357bf1b266ba090d97ca5d0e80698aa0650df66a0026861ff3ba5404a7345e4cf5e5ff1e308774e363bff5248cb177548ee098a5347b6c92c') +validpgpkeys=('E390B9700582FAEA959ACAD41EEF53D38A3A9C67' # Andreas Boll + 'C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + cd mesa-demos-$pkgver + + # remove nonfree demos (dinoshade, pointblast and spriteblast) + rm -v src/demos/{dinoshade,pointblast,spriteblast}.c +} + +prepare() { + cd mesa-demos-$pkgver + + # remove nonfree demos references (pointblast and spriteblast) + patch -Np1 -i ../libre.patch +} + +build() { + cd mesa-demos-$pkgver + ./configure --prefix=/usr \ + --with-system-data-files=/usr/share/mesa-demos + make +} + +package() { + cd mesa-demos-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/mesa-demos/LICENSE" +} diff --git a/mesa-demos/libre.patch b/mesa-demos/libre.patch new file mode 100644 index 0000000..854037a --- /dev/null +++ b/mesa-demos/libre.patch @@ -0,0 +1,172 @@ +diff --git a/src/demos/Makefile.am b/src/demos/Makefile.am +index 41603fa..b86558a 100644 +--- a/src/demos/Makefile.am ++++ b/src/demos/Makefile.am +@@ -41,7 +41,6 @@ bin_PROGRAMS = \ + copypix \ + cubemap \ + cuberender \ +- dinoshade \ + dissolve \ + drawpix \ + engine \ +@@ -65,7 +64,6 @@ bin_PROGRAMS = \ + multiarb \ + paltex \ + pixeltest \ +- pointblast \ + projtex \ + ray \ + readpix \ +@@ -74,7 +72,6 @@ bin_PROGRAMS = \ + shadowtex \ + singlebuffer \ + spectex \ +- spriteblast \ + stex3d \ + teapot \ + terrain \ +diff --git a/src/demos/Makefile.in b/src/demos/Makefile.in +index 6dc4e0a..a0c94db 100644 +--- a/src/demos/Makefile.in ++++ b/src/demos/Makefile.in +@@ -116,7 +116,7 @@ host_triplet = @host@ + @HAVE_GLUT_TRUE@ arbocclude$(EXEEXT) arbocclude2$(EXEEXT) \ + @HAVE_GLUT_TRUE@ bounce$(EXEEXT) clearspd$(EXEEXT) \ + @HAVE_GLUT_TRUE@ copypix$(EXEEXT) cubemap$(EXEEXT) \ +-@HAVE_GLUT_TRUE@ cuberender$(EXEEXT) dinoshade$(EXEEXT) \ ++@HAVE_GLUT_TRUE@ cuberender$(EXEEXT) \ + @HAVE_GLUT_TRUE@ dissolve$(EXEEXT) drawpix$(EXEEXT) \ + @HAVE_GLUT_TRUE@ engine$(EXEEXT) fbo_firecube$(EXEEXT) \ + @HAVE_GLUT_TRUE@ fbotexture$(EXEEXT) fire$(EXEEXT) \ +@@ -128,11 +128,11 @@ host_triplet = @host@ + @HAVE_GLUT_TRUE@ ipers$(EXEEXT) isosurf$(EXEEXT) \ + @HAVE_GLUT_TRUE@ lodbias$(EXEEXT) morph3d$(EXEEXT) \ + @HAVE_GLUT_TRUE@ multiarb$(EXEEXT) paltex$(EXEEXT) \ +-@HAVE_GLUT_TRUE@ pixeltest$(EXEEXT) pointblast$(EXEEXT) \ ++@HAVE_GLUT_TRUE@ pixeltest$(EXEEXT) \ + @HAVE_GLUT_TRUE@ projtex$(EXEEXT) ray$(EXEEXT) readpix$(EXEEXT) \ + @HAVE_GLUT_TRUE@ reflect$(EXEEXT) renormal$(EXEEXT) \ + @HAVE_GLUT_TRUE@ shadowtex$(EXEEXT) singlebuffer$(EXEEXT) \ +-@HAVE_GLUT_TRUE@ spectex$(EXEEXT) spriteblast$(EXEEXT) \ ++@HAVE_GLUT_TRUE@ spectex$(EXEEXT) \ + @HAVE_GLUT_TRUE@ stex3d$(EXEEXT) teapot$(EXEEXT) \ + @HAVE_GLUT_TRUE@ terrain$(EXEEXT) tessdemo$(EXEEXT) \ + @HAVE_GLUT_TRUE@ texcyl$(EXEEXT) texenv$(EXEEXT) \ +@@ -184,9 +184,6 @@ cubemap_DEPENDENCIES = ../util/libutil.la + cuberender_SOURCES = cuberender.c + cuberender_OBJECTS = cuberender.$(OBJEXT) + cuberender_DEPENDENCIES = ../util/libutil.la +-dinoshade_SOURCES = dinoshade.c +-dinoshade_OBJECTS = dinoshade.$(OBJEXT) +-dinoshade_LDADD = $(LDADD) + dissolve_SOURCES = dissolve.c + dissolve_OBJECTS = dissolve.$(OBJEXT) + dissolve_DEPENDENCIES = ../util/libutil.la +@@ -256,9 +253,6 @@ paltex_LDADD = $(LDADD) + pixeltest_SOURCES = pixeltest.c + pixeltest_OBJECTS = pixeltest.$(OBJEXT) + pixeltest_LDADD = $(LDADD) +-pointblast_SOURCES = pointblast.c +-pointblast_OBJECTS = pointblast.$(OBJEXT) +-pointblast_LDADD = $(LDADD) + projtex_SOURCES = projtex.c + projtex_OBJECTS = projtex.$(OBJEXT) + projtex_DEPENDENCIES = ../util/libutil.la +@@ -283,9 +277,6 @@ singlebuffer_LDADD = $(LDADD) + spectex_SOURCES = spectex.c + spectex_OBJECTS = spectex.$(OBJEXT) + spectex_LDADD = $(LDADD) +-spriteblast_SOURCES = spriteblast.c +-spriteblast_OBJECTS = spriteblast.$(OBJEXT) +-spriteblast_LDADD = $(LDADD) + stex3d_SOURCES = stex3d.c + stex3d_OBJECTS = stex3d.$(OBJEXT) + stex3d_LDADD = $(LDADD) +@@ -358,23 +349,23 @@ am__v_CCLD_0 = @echo " CCLD " $@; + am__v_CCLD_1 = + SOURCES = arbfplight.c arbfslight.c arbocclude.c arbocclude2.c \ + bounce.c clearspd.c copypix.c cubemap.c cuberender.c \ +- dinoshade.c dissolve.c drawpix.c engine.c fbo_firecube.c \ ++ dissolve.c drawpix.c engine.c fbo_firecube.c \ + fbotexture.c fire.c fogcoord.c fplight.c fslight.c gamma.c \ + gearbox.c gears.c geartrain.c glinfo.c gloss.c gltestperf.c \ + ipers.c isosurf.c lodbias.c morph3d.c multiarb.c paltex.c \ +- pixeltest.c pointblast.c projtex.c ray.c readpix.c reflect.c \ +- renormal.c shadowtex.c singlebuffer.c spectex.c spriteblast.c \ ++ pixeltest.c projtex.c ray.c readpix.c reflect.c \ ++ renormal.c shadowtex.c singlebuffer.c spectex.c \ + stex3d.c teapot.c terrain.c tessdemo.c texcyl.c texenv.c \ + textures.c trispd.c $(tunnel_SOURCES) tunnel2.c vao_demo.c \ + winpos.c + DIST_SOURCES = arbfplight.c arbfslight.c arbocclude.c arbocclude2.c \ + bounce.c clearspd.c copypix.c cubemap.c cuberender.c \ +- dinoshade.c dissolve.c drawpix.c engine.c fbo_firecube.c \ ++ dissolve.c drawpix.c engine.c fbo_firecube.c \ + fbotexture.c fire.c fogcoord.c fplight.c fslight.c gamma.c \ + gearbox.c gears.c geartrain.c glinfo.c gloss.c gltestperf.c \ + ipers.c isosurf.c lodbias.c morph3d.c multiarb.c paltex.c \ +- pixeltest.c pointblast.c projtex.c ray.c readpix.c reflect.c \ +- renormal.c shadowtex.c singlebuffer.c spectex.c spriteblast.c \ ++ pixeltest.c projtex.c ray.c readpix.c reflect.c \ ++ renormal.c shadowtex.c singlebuffer.c spectex.c \ + stex3d.c teapot.c terrain.c tessdemo.c texcyl.c texenv.c \ + textures.c trispd.c $(tunnel_SOURCES) tunnel2.c vao_demo.c \ + winpos.c +@@ -719,10 +710,6 @@ cuberender$(EXEEXT): $(cuberender_OBJECTS) $(cuberender_DEPENDENCIES) $(EXTRA_cu + @rm -f cuberender$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cuberender_OBJECTS) $(cuberender_LDADD) $(LIBS) + +-dinoshade$(EXEEXT): $(dinoshade_OBJECTS) $(dinoshade_DEPENDENCIES) $(EXTRA_dinoshade_DEPENDENCIES) +- @rm -f dinoshade$(EXEEXT) +- $(AM_V_CCLD)$(LINK) $(dinoshade_OBJECTS) $(dinoshade_LDADD) $(LIBS) +- + dissolve$(EXEEXT): $(dissolve_OBJECTS) $(dissolve_DEPENDENCIES) $(EXTRA_dissolve_DEPENDENCIES) + @rm -f dissolve$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dissolve_OBJECTS) $(dissolve_LDADD) $(LIBS) +@@ -815,10 +802,6 @@ pixeltest$(EXEEXT): $(pixeltest_OBJECTS) $(pixeltest_DEPENDENCIES) $(EXTRA_pixel + @rm -f pixeltest$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pixeltest_OBJECTS) $(pixeltest_LDADD) $(LIBS) + +-pointblast$(EXEEXT): $(pointblast_OBJECTS) $(pointblast_DEPENDENCIES) $(EXTRA_pointblast_DEPENDENCIES) +- @rm -f pointblast$(EXEEXT) +- $(AM_V_CCLD)$(LINK) $(pointblast_OBJECTS) $(pointblast_LDADD) $(LIBS) +- + projtex$(EXEEXT): $(projtex_OBJECTS) $(projtex_DEPENDENCIES) $(EXTRA_projtex_DEPENDENCIES) + @rm -f projtex$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(projtex_OBJECTS) $(projtex_LDADD) $(LIBS) +@@ -851,10 +834,6 @@ spectex$(EXEEXT): $(spectex_OBJECTS) $(spectex_DEPENDENCIES) $(EXTRA_spectex_DEP + @rm -f spectex$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(spectex_OBJECTS) $(spectex_LDADD) $(LIBS) + +-spriteblast$(EXEEXT): $(spriteblast_OBJECTS) $(spriteblast_DEPENDENCIES) $(EXTRA_spriteblast_DEPENDENCIES) +- @rm -f spriteblast$(EXEEXT) +- $(AM_V_CCLD)$(LINK) $(spriteblast_OBJECTS) $(spriteblast_LDADD) $(LIBS) +- + stex3d$(EXEEXT): $(stex3d_OBJECTS) $(stex3d_DEPENDENCIES) $(EXTRA_stex3d_DEPENDENCIES) + @rm -f stex3d$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(stex3d_OBJECTS) $(stex3d_LDADD) $(LIBS) +@@ -918,7 +897,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copypix.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubemap.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cuberender.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dinoshade.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dissolve.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawpix.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/engine.Po@am__quote@ +@@ -942,7 +920,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiarb.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paltex.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixeltest.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pointblast.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/projtex.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ray.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readpix.Po@am__quote@ +@@ -951,7 +928,6 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shadowtex.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/singlebuffer.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spectex.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spriteblast.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stex3d.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/teapot.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terrain.Po@am__quote@ diff --git a/mesa/LICENSE b/mesa/LICENSE new file mode 100644 index 0000000..060f4a9 --- /dev/null +++ b/mesa/LICENSE @@ -0,0 +1,83 @@ +The Mesa 3D Graphics Library + +Disclaimer + + Mesa is a 3-D graphics library with an API which is very similar to + that of [1]OpenGL.* To the extent that Mesa utilizes the OpenGL command + syntax or state machine, it is being used with authorization from + [2]Silicon Graphics, Inc.(SGI). However, the author does not possess an + OpenGL license from SGI, and makes no claim that Mesa is in any way a + compatible replacement for OpenGL or associated with SGI. Those who + want a licensed implementation of OpenGL should contact a licensed + vendor. + + Please do not refer to the library as MesaGL (for legal reasons). It's + just Mesa or The Mesa 3-D graphics library. + + * OpenGL is a trademark of [3]Silicon Graphics Incorporated. + +License / Copyright Information + + The Mesa distribution consists of several components. Different + copyrights and licenses apply to different components. For example, the + GLX client code uses the SGI Free Software License B, and some of the + Mesa device drivers are copyrighted by their authors. See below for a + list of Mesa's main components and the license for each. + + The core Mesa library is licensed according to the terms of the MIT + license. This allows integration with the XFree86, Xorg and DRI + projects. + + The default Mesa license is as follows: + +Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Attention, Contributors + + When contributing to the Mesa project you must agree to the licensing + terms of the component to which you're contributing. The following + section lists the primary components of the Mesa distribution and their + respective licenses. + +Mesa Component Licenses + +Component Location License +------------------------------------------------------------------ +Main Mesa code src/mesa/ MIT + +Device drivers src/mesa/drivers/* MIT, generally + +Gallium code src/gallium/ MIT + +Ext headers include/GL/glext.h Khronos + include/GL/glxext.h + +GLX client code src/glx/ SGI Free Software License B + +C11 thread include/c11/threads*.h Boost (permissive) emulation + + In general, consult the source files for license terms. + +References + + 1. https://www.opengl.org/ + 2. https://www.sgi.com/ + 3. https://www.sgi.com/ diff --git a/mesa/PKGBUILD b/mesa/PKGBUILD new file mode 100644 index 0000000..25eaa8a --- /dev/null +++ b/mesa/PKGBUILD @@ -0,0 +1,178 @@ +# Maintainer: Jesus E. + +# Based on mesa package + +pkgbase=mesa +pkgname=('mesa' 'mesa-libgl') +pkgdesc="A free software implementation for graphics drivers and rendering specifications" +pkgver=20.3.5 +_debver=$pkgver +_debrel=1 +pkgrel=10 +arch=('i686' 'x86_64') +makedepends=('python-mako' 'libxml2' 'libx11' 'xenocara-proto' 'libdrm' 'libxshmfence' 'libxxf86vm' + 'libxdamage' 'elfutils' 'llvm' 'clang' 'libunwind' 'libxrandr' 'glslang' 'meson' 'quilt') +url='https://www.mesa3d.org/' +license=('Expat') +source=("https://archive.mesa3d.org//older-versions/20.x/mesa-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/m/mesa/mesa_${_debver}-${_debrel}.diff.gz" + "LICENSE" + "drirc") +sha512sums=('481e710ed80d8f215a8d541cfe51b960862c2403c2b9e7e6932c8236b8decb5d478871d6c73559d6d795ada143803764f3a93b2329588c80f62e2e5ec98c78a9' + '68f030adedc00fd1b607055e3b99cfa855062c43310d326c838d16515c2f652b3b2b1cdb62bdecf5bf067a583d8cdcfc2f46083db614c22585e23ff416ac07d0' + 'f9f0d0ccf166fe6cb684478b6f1e1ab1f2850431c06aa041738563eb1808a004e52cdec823c103c9e180f03ffc083e95974d291353f0220fe52ae6d4897fecc7' + '03438356f152cbfede359314c100f4a93c04a856a12a6daafe3bdbf749661bdc8a28f11c92b73c317cfccf5c1f022f80434cd918a53ebe2c3df1fe1504164bee') + +prepare() { + cd $srcdir/mesa-$pkgver + + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + patch -p1 -i "$srcdir"/mesa_$_debver-$_debrel.diff + + # Doesn't apply + rm -v debian/patches/fix-python-shebang.diff || true + + quilt push -av + fi +} + +build() { + DRI=i915,i965,r100,r200,nouveau + GALLIUM=iris,r300,r600,radeonsi,nouveau,lima,panfrost,etnaviv,kmsro,virgl,svga,swrast,swr + SWR_ARCHES=avx,avx2,knl,skx + + # Configure + hyperbola-meson mesa-$pkgver build \ + -D b_lto=true \ + -D b_ndebug=true \ + -D platforms=x11 \ + -D dri-drivers=$DRI \ + -D gallium-drivers=$GALLIUM \ + -D swr-arches=$SWR_ARCHES \ + -D zstd=disabled \ + -D dri3=enabled \ + -D egl=enabled \ + -D gallium-extra-hud=true \ + -D gallium-nine=true \ + -D gallium-omx=disabled \ + -D gallium-opencl=disabled \ + -D gallium-va=disabled \ + -D gallium-vdpau=disabled \ + -D gallium-xa=enabled \ + -D gallium-xvmc=disabled \ + -D gbm=enabled \ + -D gles1=enabled \ + -D gles2=enabled \ + -D glvnd=false \ + -D glx=dri \ + -D libunwind=enabled \ + -D llvm=enabled \ + -D lmsensors=disabled \ + -D opencl-spirv=false \ + -D osmesa=gallium \ + -D shared-glapi=enabled \ + -D shared-llvm=enabled \ + -D valgrind=disabled + + # Print configuration + meson configure build + + # Build + ninja -C build + meson compile -C build +} + +package_mesa() { + depends=('libdrm' 'libxxf86vm' 'libxdamage' 'libxshmfence' 'libelf' 'libunwind' 'llvm-libs') + provides=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' + 'swrast-dri' 'virgl-dri' 'swr-dri' 'mesa-dri' 'opengl-driver') + conflicts=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' + 'swrast-dri' 'virgl-dri' 'swr-dri' 'mesa-dri' + 'nvidia-'{,{390,340,304,173,96}xx-}'utils' 'catalyst-utils' + 'libtxc_dxtn') + replaces=('ati-dri' 'intel-dri' 'nouveau-dri' 'svga-dri' + 'swrast-dri' 'virgl-dri' 'swr-dri' 'mesa-dri' + 'nvidia-'{,{390,340,304,173,96}xx-}'utils' 'catalyst-utils' + 'libtxc_dxtn') + backups=('etc/drirc') + + # Fake installation to be seperated into packages + # outside of fakeroot but mesa does not need to chown and chmod + DESTDIR=$srcdir/fakeinstall meson install -C build + + # Copy drirc + install -Dm 644 $srcdir/drirc -t $pkgdir/etc + + # Move usr/include/d3dadapter and usr/include/*.h + install -dm 755 $pkgdir/usr/include + mv -v $srcdir/fakeinstall/usr/include/d3dadapter $pkgdir/usr/include + mv -v $srcdir/fakeinstall/usr/include/*.h $pkgdir/usr/include + + # Move usr/lib/d3d + install -dm 755 $pkgdir/usr/lib + for i in d3d; do + mv -v $srcdir/fakeinstall/usr/lib/${i} $pkgdir/usr/lib + done + unset i + + # Move usr/lib/dri/*_dri.so + install -dm 755 $pkgdir/usr/lib/dri + mv -v $srcdir/fakeinstall/usr/lib/dri/*_dri.so $pkgdir/usr/lib/dri + + # Move usr/lib/pkgconfig/{d3d,dri,gbm,osmesa,xatracker}.pc + install -dm 755 $pkgdir/usr/lib/pkgconfig + for i in d3d dri gbm osmesa xatracker; do + mv -v $srcdir/fakeinstall/usr/lib/pkgconfig/${i}.pc \ + $pkgdir/usr/lib/pkgconfig + done + unset i + + # Move usr/lib/lib{OS,gbm,glapi,swr,xatracker}*.so* + for i in OS gbm glapi swr xatracker; do + mv -v $srcdir/fakeinstall/usr/lib/lib${i}*.so* $pkgdir/usr/lib + done + unset i + + # Copy LICENSE + install -Dm 644 $srcdir/LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_mesa-libgl() { + pkgdesc="Mesa 3D graphics library" + depends=('mesa') + provides=('libgl' 'libegl' 'libgles') + conflicts=('nvidia-libgl' 'nvidia-340xx-libgl' 'nvidia-304xx-libgl' 'nvidia-cg-toolkit' 'catalyst-libgl') + replaces=('nvidia-libgl' 'nvidia-340xx-libgl' 'nvidia-304xx-libgl' 'nvidia-cg-toolkit' 'catalyst-libgl') + + # Move usr/include/{EGL,GL,GLES2,GLES3,KHR} + install -dm 755 $pkgdir/usr/include + for i in EGL GL GLES GLES2 GLES3 KHR; do + mv -v $srcdir/fakeinstall/usr/include/${i} $pkgdir/usr/include + done + unset i + + # Move usr/lib/pkgconfig/{egl,gl,glesv1_cm,glesv2}.pc + install -dm 755 $pkgdir/usr/lib/pkgconfig + for i in egl gl glesv1_cm glesv2; do + mv -v $srcdir/fakeinstall/usr/lib/pkgconfig/${i}.pc \ + $pkgdir/usr/lib/pkgconfig + done + unset i + + # Move usr/lib/lib{EGL,GL,GLESv1_CM,GLES2}.so + for i in EGL GL GLESv1_CM GLESv2; do + mv -v $srcdir/fakeinstall/usr/lib/lib${i}.so* $pkgdir/usr/lib + done + unset i + + # Make sure there are no files left to install + find fakeinstall -depth -print0 | xargs -0 rm -rf + + # Copy LICENSE + install -Dm 644 $srcdir/LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/mesa/drirc b/mesa/drirc new file mode 100644 index 0000000..fbc9da4 --- /dev/null +++ b/mesa/drirc @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/meson/PKGBUILD b/meson/PKGBUILD new file mode 100644 index 0000000..427a75c --- /dev/null +++ b/meson/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=meson +pkgver=0.56.2 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="High productivity build system" +url='https://mesonbuild.com/' +arch=('any') +license=('Apache-2.0') +depends=('python-setuptools' 'ninja') +makedepends=('quilt') +source=("https://github.com/mesonbuild/meson/releases/download/${pkgver}/meson-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/meson/meson_${_debver}-${_debrel}.debian.tar.xz" + "hyperbola-meson") +sha512sums=('3b6cc5cae31d756b251ecde3483d3710bceff50cfd03ef6cf6f939d9e599998e61fcb03a2ee09d6a6f9bfa2198f43e7f20447359de3bff1055febcf03e82e514' + '1a9ddb7d8e78a6b12e2e842f99afafd4b1f0c25abe2f8d3635c4cb4aba4480c0fb46f019363d62bc9ac2a6f71c8320daa21b2281b866b47121c8b9a4960e98de' + '71da41c3d16d14f0aabda58ece4d0e235191f086cc8a2e2ad73a405cf4402335930949b4103cf728b21c8a5fa71248f461ca064f012f6598affba4aec4a4d2ab') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + python setup.py build +} + +package() { + cd ${pkgname}-${pkgver} + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + + install -d "${pkgdir}/usr/share/vim/vimfiles" + cp -rt "${pkgdir}/usr/share/vim/vimfiles" data/syntax-highlighting/vim/* + + install -Dt "${pkgdir}/usr/share/emacs/site-lisp" -m644 data/syntax-highlighting/emacs/* + install -Dt "${pkgdir}/usr/share/zsh/site-functions" -m644 data/shell-completions/zsh/* + + # Hyperbola packaging helper + install -D ../hyperbola-meson -t "${pkgdir}/usr/bin" + + # install license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/meson/hyperbola-meson b/meson/hyperbola-meson new file mode 100644 index 0000000..f481d3f --- /dev/null +++ b/meson/hyperbola-meson @@ -0,0 +1,10 @@ +#!/bin/bash -ex +# Meson wrapper for Hyperbola packaging + +exec meson setup \ + --prefix /usr \ + --buildtype release \ + --auto-features enabled \ + --wrap-mode nofallback \ + -D b_lto=true \ + "$@" diff --git a/metalog/PKGBUILD b/metalog/PKGBUILD new file mode 100644 index 0000000..0d37c8d --- /dev/null +++ b/metalog/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=metalog +pkgver=20230719 +pkgrel=1 +pkgdesc="A modern, free and libre syslog daemon" +url='https://metalog.sourceforge.net' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('pcre2') +makedepends=('autoconf-archive') +conflicts=('logger') +replaces=('logger') +provides=('logger') +backup=('etc/metalog.conf' + 'etc/conf.d/metalog') +source=("https://github.com/hvisage/metalog/archive/${pkgname}-${pkgver}.tar.gz" + "$pkgname.confd" + "$pkgname.initd" + "$pkgname.run") +sha512sums=('a717dca5e00e9e66b97a84c3dbb0cdda522cbe628fad4cfbcb5256ee69659c63149bbb1e8797028bbab55d97787661c1d7316c7c2cbfe3b65932f84d64af15f6' + '4fea6b7f48e55d5f69a9c9a69f54623bb9d515e2fd2eda6829f8b769eec85e3de448eb42feb6bf65645400480169b3d70d56dff090103cfc95a3810515c42b2e' + '45eb2f4c5a99723ac24bdb90726a81efef422aab7c991d1502a0bb728a4138cda74b2f8efb4cc70f1375b21b92039639e8bd5ab01af310991a81fce668f6f096' + '58e698951af620dbc5cc2734e45bcc5a57b7d85babe3056f6925003bc0ca89fbb4fc87db0afd2dbf052edeccb94aa631f65be818cceca65f756b35cfd2dcb136') + +build() { + cd $pkgname-$pkgname-${pkgver} + ./autogen.sh + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd $pkgname-$pkgname-${pkgver} + make DESTDIR="$pkgdir" install + + install -Dm644 $pkgname.conf "$pkgdir/etc/$pkgname.conf" + + install -Dm644 "$srcdir/$pkgname.confd" "$pkgdir/etc/conf.d/$pkgname" + install -Dm755 "$srcdir/$pkgname.initd" "$pkgdir/etc/init.d/$pkgname" + install -Dm755 "$srcdir/$pkgname.run" "${pkgdir}/etc/sv/$pkgname/run" + + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/metalog/metalog.confd b/metalog/metalog.confd new file mode 100644 index 0000000..ec7e64e --- /dev/null +++ b/metalog/metalog.confd @@ -0,0 +1,18 @@ +# /etc/conf.d/metalog + +# Some useful options: +# -a Log with buffering +# -s Log without buffering +# See `metalog --help` for more + +METALOG_OPTS="" + + +# Options used by /usr/sbin/consolelog.sh + +# Space delimited list of devices to write "console" messages to +#CONSOLE="/dev/console /dev/tty10" +CONSOLE="/dev/tty10" + +# Format of logging (make sure you use single quotes) +FORMAT='$1 [$2] $3' diff --git a/metalog/metalog.initd b/metalog/metalog.initd new file mode 100644 index 0000000..f81e9ee --- /dev/null +++ b/metalog/metalog.initd @@ -0,0 +1,41 @@ +#!/sbin/openrc-run +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="buffer unbuffer" + +PIDFILE=/var/run/metalog.pid + +depend() { + need localmount + use clock hostname + after bootmisc + provide logger +} + +ssd() { start-stop-daemon --exec /usr/sbin/metalog --pidfile "${PIDFILE}" "$@" ; } + +start() { + ebegin "Starting metalog" + ssd --start -- \ + --daemonize --pidfile="${PIDFILE}" ${METALOG_OPTS} + eend $? +} + +stop() { + ebegin "Stopping metalog" + ssd --stop + eend $? +} + +buffer() { + ebegin "Enabling log buffering" + ssd --signal USR2 + eend $? +} + +unbuffer() { + ebegin "Disabling log buffering" + ssd --signal USR1 + eend $? +} diff --git a/metalog/metalog.run b/metalog/metalog.run new file mode 100644 index 0000000..18d1dc3 --- /dev/null +++ b/metalog/metalog.run @@ -0,0 +1,3 @@ +#!/bin/sh +exec 1>&2 +exec metalog ${OPTS=-v} diff --git a/metis/PKGBUILD b/metis/PKGBUILD new file mode 100644 index 0000000..2c96bdd --- /dev/null +++ b/metis/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=metis +pkgver=5.1.0 +_debver=$pkgver +_debrel=7 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc="A set of serial programs for partitioning graphs, partitioning finite element meshes, and producing fill reducing orderings for sparse matrices" +url='http://glaros.dtc.umn.edu/gkhome/metis/metis/overview' +license=('Apache-2.0') +depends=('glibc') +makedepends=('quilt' 'cmake') +options=(docs) +source=("https://deb.debian.org/debian/pool/main/m/metis/metis_${pkgver}.dfsg.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/m/metis/metis_${_debver}.dfsg-${_debrel}.debian.tar.xz") +sha512sums=('77d662dfade6131e17b934ba1b7f02e41dec701cfb0e0f0afce420e3a02489611200e323e288d88cd8de004b4d491c6a115ce0a9f9a0df1caba9f5682c67f2f0' + '40763674ec320a4cfd21ea2eb0d2432cd6f1846d3fbe83a24c74c654d0cdda12d6494f6249d3e0bf03be6f688b78b0c660f2c0a276f51819d9c2aaab700fa37e') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DSHARED=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -m644 -D $pkgname-$pkgver/LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/mg/PKGBUILD b/mg/PKGBUILD new file mode 100644 index 0000000..b042fff --- /dev/null +++ b/mg/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=mg +pkgver=3.7 +pkgrel=1 +pkgdesc="Micro Emacs" +arch=('i686' 'x86_64') +license=('Unlicense') +url='https://github.com/troglobit/mg' +depends=('ncurses') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/troglobit/mg/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('482a13b3eafed7249d544fcb0c4aa4a93bd7fc079deef60b8aaca90a690cc1287b9b3e0376947ac6fac35118dd01087f5a16b049725e13a5e84dcc216aaa74fb') + +prepare() { + cd "$pkgname-$pkgver" + ./autogen.sh +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 UNLICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mgba/PKGBUILD b/mgba/PKGBUILD new file mode 100644 index 0000000..769cc95 --- /dev/null +++ b/mgba/PKGBUILD @@ -0,0 +1,91 @@ +# Maintainer: Jesus E. + +pkgbase=mgba +pkgname=('libmgba' 'mgba-sdl' 'mgba-qt') +pkgver=0.10.1 +_debver=$pkgver +_debrel=1 +pkgrel=2 +arch=('i686' 'x86_64') +url='https://mgba.io' +license=('MPL-2.0') +makedepends=('cmake' 'qt-multimedia' 'sdl2' 'zlib' 'libpng' 'libzip' 'libedit' + 'ffmpeg' 'qt-tools' 'quilt') +source=("${pkgbase}-${pkgver}.tar.gz::https://github.com/mgba-emu/mgba/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mgba/mgba_${_debver}+dfsg-${_debrel}+deb12u1.debian.tar.xz" + "$pkgbase.desktop") +sha512sums=('bb79d2380a4708b70daf95c9b403427f77254391b1e11d68411384f265a670907e64b842c9978c9be558ffad337b738d9d83988d52890f08aed7e7fc124f19d4' + '2cbbb59acd5ce1d3d0f29b87687448fed157282a7d51729878b75876c9126fdef1878a00808cc8f2e8ff89b9f6e2a7768a6445842adb3d85184f4f79c8535f74' + '2949dae0522390cc9b0bbae8cfdcd70905d2c7f029ca171bf641913164090f423dbec542d0aa11adb11baed299a5ca679ced85f8e594f83adfe4c9a0380a14bf') + +prepare() { + [[ ! -d build ]] && mkdir build || rm -rf build + cd mgba-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/exclude-inih.patch || true + + quilt push -av + fi + + # remove non-free parts before further processing + rm -rf ./src/third-party/discord-rpc +} + +build() { + cd build + cmake \ + "$srcdir"/mgba-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DUSE_MINIZIP=OFF \ + -DUSE_EPOXY=OFF \ + -DUSE_LUA=OFF \ + -DUSE_DISCORD_RPC=OFF + make +} + +package_libmgba() { + pkgdesc="Shared library of mGBA" + depends=('zlib' 'libpng' 'libzip' 'libedit' 'ffmpeg') + + cmake -DCOMPONENT=libmgba mgba-$pkgver -DCMAKE_INSTALL_PREFIX="$pkgdir/usr" \ + -P build/cmake_install.cmake + + # license + install -Dm644 mgba-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_mgba-sdl() { + pkgdesc="An Emulator focusing on both speed and accuracy (SDL)" + depends=('libmgba' 'sdl2') + + cmake -DCOMPONENT=mgba-sdl mgba-$pkgver -DCMAKE_INSTALL_PREFIX="$pkgdir/usr" \ + -P build/cmake_install.cmake + + # license + install -Dm644 mgba-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_mgba-qt() { + pkgdesc="An Emulator focusing on both speed and accuracy (Qt UI)" + depends=('libmgba' 'qt-multimedia' 'sdl2') + + cmake -DCOMPONENT=mgba-qt mgba-$pkgver -DCMAKE_INSTALL_PREFIX="$pkgdir/usr" \ + -P build/cmake_install.cmake + + # desktop-shortcut and icon + rm -rf "$pkgdir"/usr/share/applications + install -Dm644 mgba-$pkgver/res/mgba-256.png "$pkgdir"/usr/share/pixmaps/mgba.png + install -Dm644 $srcdir/$pkgbase.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop + + # license + install -Dm644 mgba-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/mgba/mgba.desktop b/mgba/mgba.desktop new file mode 100644 index 0000000..0c50b20 --- /dev/null +++ b/mgba/mgba.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Icon=mgba +Exec=mgba-qt %f +Terminal=false +Type=Application +Name=mGBA +GenericName=Game Boy Advance Emulator +Comment=Game Boy Advance Emulator +Categories=Game;Emulator; +MimeType=application/x-gameboy-advance-rom;application/x-agb-rom;application/x-gba-rom; +Keywords=emulator;advance;gba;Game Boy Advance; diff --git a/mhash/PKGBUILD b/mhash/PKGBUILD new file mode 100644 index 0000000..f53ff90 --- /dev/null +++ b/mhash/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=mhash +pkgver=0.9.9.9 +_debver=0.9.9.9 +_debrel=9 +pkgrel=1 +pkgdesc="A thread-safe hash library which provides a uniform interface to hash algorithms (MD5, SHA1, HAVAL, etc)" +arch=('i686' 'x86_64') +url="http://mhash.sourceforge.net/" +license=('LGPL-2') +depends=('glibc') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/sourceforge/mhash/${pkgname}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/m/mhash/mhash_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('3b063d258cb0e7c2fa21ed30abae97bd6f3630ecd1cb4698afb826aa747555f3cf884828f24ac5e2b203730d0c7c0ecc9ef1e724ad9d85769a2f66128f3072eb' + '0cf2458e58a9cc0c274c29ce48f40f66fd557286675b477a885295628358bb1ceb0796f24920764c3cd5dd0b5bbb5808c913a07042dedc33a8415c471b36bc6c') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/micropolis/PKGBUILD b/micropolis/PKGBUILD new file mode 100644 index 0000000..11563dd --- /dev/null +++ b/micropolis/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=micropolis +pkgver=0.0.20071228 +_debver=$pkgver +_debrel=10 +pkgrel=2 +pkgdesc="Real-time, free and libre city management simulator" +arch=('i686' 'x86_64') +url='http://www.donhopkins.com/home/micropolis/' +license=('GPL-3') +depends=('sdl' 'sdl_mixer' 'libxpm' 'libxext') +makedepends=('quilt') +options=(!makeflags) +groups=('games') +source=("https://deb.debian.org/debian/pool/main/m/micropolis-activity/micropolis-activity_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/m/micropolis-activity/micropolis-activity_${_debver}-${_debrel}.debian.tar.xz" + "fhs-compliant.patch" + "fix-hostname.patch") +sha512sums=('fe65966c43d044e01a63a3cfe3cad48466eb1e5ec8b13c03abb52d582395a8ab527332d4d04454a4f32e85b65e55d72fe5e4d53a3f37b422d90e9208f00d9976' + 'e58af94fa421801a6657b9a074dc4ed4bd9a06001dd1cc8c5a2b5bf9be546b14f1ce8c257b667f6652736e0b19ba1bd567eb792b05a720bbde57e06579f77bd6' + '91d1ca40cc7bd9b093f2b1cf33172901695ab627338ea9ca4900f9d582f31d9dbc893af9ae81968b6c319f90eb1d8d847450a0066a241e4127701d55680799dd' + 'd3e1a4753a8076d0a0b03c3e97d1497a9eeb68069904d20be4d5ce42683e563e63ef04299f3f58fe794332f65f8f4971ba4d525c0f40433799b880629fb9e7e6') + +prepare() { + mv -v "$pkgname-activity" "$pkgname-$pkgver" + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/makefile.patch || true + + quilt push -av + patch -Np1 -i ${srcdir}/fhs-compliant.patch + patch -Np1 -i ${srcdir}/fix-hostname.patch + fi +} + +build() { + cd "$pkgname-$pkgver" + make +} + +package() { + cd "$pkgname-$pkgver" + make PREFIX="/usr" DESTDIR="$pkgdir" install + + # documentation and license + install -Dm644 debian/$pkgname.6 -t "$pkgdir"/usr/share/man/man6 + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/micropolis/fhs-compliant.patch b/micropolis/fhs-compliant.patch new file mode 100644 index 0000000..d7472d7 --- /dev/null +++ b/micropolis/fhs-compliant.patch @@ -0,0 +1,14 @@ +--- a/Makefile 2022-10-21 13:19:39.000000000 +0200 ++++ b/Makefile 2022-10-21 13:20:33.880959827 +0200 +@@ -1,7 +1,7 @@ +-PREFIX=/usr/local +-DATADIR=$(PREFIX)/share/micropolis +-LIBEXECDIR=$(PREFIX)/libexec +-BINDIR=$(PREFIX)/bin ++PREFIX=/usr ++DATADIR=$(PREFIX)/share/games/micropolis ++LIBEXECDIR=$(PREFIX)/lib/games/micropolis ++BINDIR=$(PREFIX)/games + DOCDIR=$(PREFIX)/share/doc/micropolis + PIXMAPDIR=$(PREFIX)/share/pixmaps + APPLICATIONSDIR=$(PREFIX)/share/applications diff --git a/micropolis/fix-hostname.patch b/micropolis/fix-hostname.patch new file mode 100644 index 0000000..e2f2823 --- /dev/null +++ b/micropolis/fix-hostname.patch @@ -0,0 +1,11 @@ +--- a/res/micropolis.tcl 2022-11-16 12:20:32.000000000 +0100 ++++ b/res/micropolis.tcl 2022-11-16 12:38:17.261086729 +0100 +@@ -128,7 +128,7 @@ + set HomeDir "" + set ResourceDir "" + set HostName "" +-set LocalHostName "[exec hostname]" ++set LocalHostName "" + set SaveCityWin "" + set MapHistory {} + set MapHistoryNum -1 diff --git a/minimodem/PKGBUILD b/minimodem/PKGBUILD new file mode 100644 index 0000000..9dbb88a --- /dev/null +++ b/minimodem/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=minimodem +pkgver=0.24 +pkgrel=1 +pkgdesc="A tool to (de)code modem audio" +arch=('i686' 'x86_64') +url='http://www.whence.com/minimodem/' +license=('GPL-3') +depends=('fftw' 'libsndfile') +makedepends=('alsa-lib') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/m/${pkgname}/${pkgname}_${pkgver}.orig.tar.gz") +sha512sums=('5c3a5e6f185d4b09c5f24d776393f2e2d5d787c097c44490905119513b9b39db53b7f2f7e624a4b527e8e8e827a5b99af6b0df5ca525046f60b49fe9ba2b0ceb') + +build() { + cd ${srcdir}/${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --without-pulseaudio + make +} + +package() { + cd ${srcdir}/${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/minisign/PKGBUILD b/minisign/PKGBUILD new file mode 100644 index 0000000..d2a5032 --- /dev/null +++ b/minisign/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=minisign +pkgver=0.8 +pkgrel=1 +pkgdesc="A dead simple tool to sign files and verify digital signatures." +arch=('i686' 'x86_64') +url="https://github.com/jedisct1/minisign" +license=('ISC') +depends=('libsodium') +makedepends=('cmake') +source=("$pkgname-$pkgver.tar.gz::https://github.com/jedisct1/minisign/archive/$pkgver.tar.gz") +sha512sums=('79bf626d0c15e39ce3bdf53600038028c0b22904b648074bf516a9ea6962c9486c41244e80637a5fbac090cce1ed9b4b3d57b8a02632646e01b43aa413cd8bd9') + +prepare() { + mkdir -p build +} + +build() { + cd build + + cmake ../minisign-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release + make +} + +package() { + make -C build DESTDIR="$pkgdir" install + + install -Dm644 minisign-$pkgver/LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/miniupnpc/PKGBUILD b/miniupnpc/PKGBUILD new file mode 100644 index 0000000..74e12b5 --- /dev/null +++ b/miniupnpc/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgbase=miniupnpc +pkgname=(miniupnpc python-miniupnpc) +pkgver=2.2.1 +_debver=2.2.1 +_debrel=1 +pkgrel=1 +pkgdesc='Small UPnP client library/tool to access Internet Gateway Devices' +url='https://miniupnp.tuxfamily.org/' +arch=('i686' 'x86_64') +license=('Modified-BSD') +makedepends=('sh' 'glibc' 'lsb-release' 'python' 'python-setuptools' 'quilt') +source=(https://miniupnp.tuxfamily.org/files/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/m/miniupnpc/miniupnpc_$_debver-$_debrel.debian.tar.xz) +sha512sums=('62fc0098890980028199dd16e87b13ce23e78b2cc996433799792dc2a4fa9b5e230139593bde5c721f649c14fcee2e4d8a0558976c5506c21ff26deff6c7c907' + 'c3895fe2e13e8a19552d4d6aa1723785ec191c49258ceb0caa03bbbbb6b684190233c3ab1c993756650395bc812800366e1bf5f93a1205fd67d4d689f4fdd83d') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + make + python setup.py build +} + +check() { + cd ${pkgname}-${pkgver} + make test +} + +package_miniupnpc() { + depends=('sh' 'glibc') + + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 man3/miniupnpc.3 -t "${pkgdir}/usr/share/man/man3" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_python-miniupnpc() { + pkgdesc='Python bindings for miniupnpc' + depends=('python' 'glibc') + + cd ${pkgbase}-${pkgver} + python setup.py install --optimize=1 --skip-build --root="$pkgdir" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/mirage/PKGBUILD b/mirage/PKGBUILD new file mode 100644 index 0000000..6555492 --- /dev/null +++ b/mirage/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=mirage +pkgver=1.0_pre2 +pkgrel=2 +pkgdesc="A simple GTK+ Image Viewer" +url='https://sourceforge.net/projects/mirageiv.berlios/' +license=('GPL-3') +arch=('i686' 'x86_64') +depends=('tauthon-pygtk' 'libexif') +makedepends=('tauthon' 'gettext-tiny') +source=(http://downloads.sourceforge.net/project/mirageiv.berlios/${pkgname}-${pkgver}.tar.bz2 + exif.patch + exif.c) +sha512sums=('90050376461e5e6b28cdaeaee9da21b168231dc10a1f6551e841742a8fd5b0c34c8ac58e02c76fcb1c628d6205d5c20655e31daa2a06372cf354ff8956479846' + '22d508994144f93a4cf9a4129da6f9689e10fb5de1c6a4e6f59ff5adde1b59be157122e8bd13ab6e15ce1d2fa4011e15d6b4239ad6ce3e6f6cdea0b983f3c25a' + '019c4e60155d373f11fb13156c509ef6c9f6e18a05c9b76af06ed649604ee7f703c9913a51960d3dedb6226279ec7f261e48e1599ca0dd76433bd73d053a2040') + +prepare() { + cd "${pkgname}-${pkgver}" + patch --forward --strip=1 --input="${srcdir}/exif.patch" + cp "${srcdir}/exif.c" . +} + +build() { + cd "${pkgname}-${pkgver}" + tauthon setup.py build +} + +package() { + cd "${pkgname}-${pkgver}" + tauthon setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mirage/exif.c b/mirage/exif.c new file mode 100644 index 0000000..841c168 --- /dev/null +++ b/mirage/exif.c @@ -0,0 +1,206 @@ +// This module is a replacement for pyexiv2 in the mirage image viewer. +// +// pyexiv2 is a Python 2 binding to the exiv2, a popular library for reading +// EXIF, IPTC and XMP metadata from image files. mirage 1.0_pre1 and later uses +// it to get some basic metadata like image orientation, camera model and some +// other tags related to picture-taking. This library is not required, but is +// nice to have. The problem is that pyexiv2 depends on an outdated version of +// exiv2, so it can't be compiled with the latest one (0.27.2). I had the +// following choices: +// +// 1. Use libgexiv2, it provides Python bindings through PyGObject. The problem +// is that PyGObject uses GTK3 and mirage is written with GTK2 (PyGTK), this +// would require porting the entire application to GTK3 and this is not a +// very straigh-forward solution. +// 2. Use py3exiv2 which supports only Python 3. But PyGTK does not support +// Python 3. So again, I'd need to port mirage to GTK3 and this has the +// exact same problems that solution #1 has. +// 3. Use GObject 2 which works on Python 2. However, libgexiv2 doesn't provide +// bindings for GObject 2. +// 4. Patch pyexiv2 so that it can be compiled with modern exiv2. This is a +// very hard task for me since I don't have much experience with C/C++, +// Boost.Python and Python internals. And nobody needs this binding nowadays +// anyway. +// 5. Create a replacement bindings for exiv2 just for this application. I +// tried to do this, but quickly abandoned this idea because C++ is just too +// hard for me. +// +// Then I examined the source code of mirage and noticed that it only uses EXIF +// metadata and ignores IPTC and XMP. I quickly found a popular C library for +// parsing EXIF called libexif. "Why not use a Python library?" you might ask. +// Well, for two reasons: +// +// a) I was packaging mirage for latest version of mirage (1.0_pre2) for AUR +// (Arch User Repository) and decided to use a well-known library which can +// be found in official Arch Linux repositories and is used by other popular +// applications. libexif is a perfect candidate because it is in the 'extra' +// repo and is used by GIMP, PCManFM, Thunar, Ristretto and (indirectly) +// Mono. +// b) libexif is written in C and I wrote C for Arduino in the past, plus I +// have a lot of experience with Rust. It ain't much, but I wanted to learn +// something new. +// +// So, I decided to write a Python extension in C that is a binding to libexif +// that allows you only to read metadata of an image file (because that's the +// only feature mirage needs). + +// Useful Links: +// https://libexif.github.io/api/index.html +// https://github.com/libexif/libexif +// https://docs.python.org/2/extending/extending.html +// https://docs.python.org/2/c-api/concrete.html +// https://pythonextensionpatterns.readthedocs.io/en/latest/refcount.html +// https://www.exif.org/Exif2-2.PDF + +#include +#include + +// Converts a numeric value stored in an EXIF entry to a Python object. Returns +// NULL If a non-numeric format is provided. +PyObject* mirage_exif_number_to_py(const unsigned char* ptr, ExifFormat format, ExifByteOrder bo) { + PyObject* py_num = NULL; + switch (format) { + // Size of all EXIF integers is <= 32 bits, so they can be safely stored in + // PyInt. All numeric types are signed by default and 'S' in type names + // means 'signed'. + // 8-bit + case EXIF_FORMAT_BYTE: + case EXIF_FORMAT_SBYTE: + py_num = PyInt_FromLong(*ptr); + break; + // 16-bit + case EXIF_FORMAT_SHORT: + py_num = PyInt_FromLong(exif_get_short(ptr, bo)); + break; + case EXIF_FORMAT_SSHORT: + py_num = PyInt_FromLong(exif_get_sshort(ptr, bo)); + break; + // 32-bit + case EXIF_FORMAT_LONG: + py_num = PyInt_FromLong(exif_get_long(ptr, bo)); + break; + case EXIF_FORMAT_SLONG: + py_num = PyInt_FromLong(exif_get_slong(ptr, bo)); + break; + // rational numbers consist of two LONGs, they are represented as a PyTuple + // with two PyInts + // TODO: can code duplication be reduced here? + case EXIF_FORMAT_RATIONAL: { + ExifRational r = exif_get_rational(ptr, bo); + PyObject* n = PyInt_FromLong(r.numerator); + PyObject* d = PyInt_FromLong(r.denominator); + py_num = PyTuple_Pack(2, n, d); + Py_DECREF(n); + Py_DECREF(d); + } break; + case EXIF_FORMAT_SRATIONAL: { + ExifSRational r = exif_get_srational(ptr, bo); + PyObject* n = PyInt_FromLong(r.numerator); + PyObject* d = PyInt_FromLong(r.denominator); + py_num = PyTuple_Pack(2, n, d); + Py_DECREF(n); + Py_DECREF(d); + } break; + } + return py_num; +} + +// Converts contents of an EXIF entry to a Python object. +PyObject* mirage_exif_entry_to_py(ExifEntry* e, ExifByteOrder byte_order) { + PyObject* py_value = NULL; + switch (e->format) { + case EXIF_FORMAT_BYTE: + case EXIF_FORMAT_SBYTE: + case EXIF_FORMAT_SHORT: + case EXIF_FORMAT_SSHORT: + case EXIF_FORMAT_LONG: + case EXIF_FORMAT_SLONG: + case EXIF_FORMAT_RATIONAL: + case EXIF_FORMAT_SRATIONAL: + // numeric values are stored in a PyList even if e->components == 1 to + // reduce code complexity + py_value = PyList_New(e->components); + unsigned char format_size = exif_format_get_size(e->format); + for (Py_ssize_t i = 0; i < e->components; i++) { + const unsigned char* ptr = e->data + i*format_size; + PyObject* py_num = mirage_exif_number_to_py(ptr, e->format, byte_order); + // Note that PyList_SetItem does not increase refcount of added item + // (py_num in this case), documentation says that it "steals" a + // reference to it, so refcount shouldn't be decremented here. + PyList_SetItem(py_value, i, py_num); + } + break; + + case EXIF_FORMAT_ASCII: + // ASCII entries contain a null-terminated string of bytes with 7-bit + // ASCII codes. 1 is subtracted here to chop off the last null ('\0') + // byte. + py_value = PyString_FromStringAndSize(e->data, e->size ? e->size - 1 : 0); + break; + + default: + // Content of an entry with an unknown format (including + // EXIF_FORMAT_UNDEFINED) is simply converted to a PyByteArray. + py_value = PyByteArray_FromStringAndSize(e->data, e->size); + } + return py_value; +} + +// Converts all entries inside an IFD (image file directory) to a PyDict with +// EXIF tag names as keys and entry values (see mirage_exif_entry_to_py) as +// values. +PyObject* mirage_exif_ifd_entries_to_py(ExifContent* c, ExifIfd ifd, ExifByteOrder byte_order) { + PyObject* py_entries = PyDict_New(); + + for (Py_ssize_t i = 0; i < c->count; i++) { + ExifEntry* entry = c->entries[i]; + if (!entry) continue; + + const char* tag_name = exif_tag_get_name_in_ifd(entry->tag, ifd); + PyObject* py_entry_value = mirage_exif_entry_to_py(entry, byte_order); + PyDict_SetItemString(py_entries, tag_name, py_entry_value); + Py_DECREF(py_entry_value); + } + + return py_entries; +} + +// Reads EXIF metadata from a file and returns a PyDict with IFD names ('EXIF', +// '0', '1', 'GPS' etc, see EXIF specification) as keys and PyDicts of IFD +// entries (see mirage_exif_ifd_entries_to_py) as values. +PyObject* mirage_exif_read_metadata(PyObject* self, PyObject* args) { + const char* filename; + int filename_len; + if (!PyArg_ParseTuple(args, "s#", &filename, &filename_len)) + return NULL; + + ExifData* data = exif_data_new_from_file(filename); + if (!data) Py_RETURN_NONE; + + ExifByteOrder byte_order = exif_data_get_byte_order(data); + + PyObject* py_dict = PyDict_New(); + + for (ExifIfd ifd = 0; ifd < EXIF_IFD_COUNT; ifd++) { + ExifContent* content = data->ifd[ifd]; + if (!content) continue; + + const char* ifd_name = exif_ifd_get_name(ifd); + PyObject* py_entries = mirage_exif_ifd_entries_to_py(content, ifd, byte_order); + PyDict_SetItemString(py_dict, ifd_name, py_entries); + Py_DECREF(py_entries); + } + + exif_data_unref(data); + + return py_dict; +} + +PyMethodDef methods[] = { + {"read_metadata", mirage_exif_read_metadata, METH_VARARGS}, + {NULL, NULL, 0}, +}; + +void initexif(void) { + Py_InitModule("exif", methods); +} diff --git a/mirage/exif.patch b/mirage/exif.patch new file mode 100644 index 0000000..43a1945 --- /dev/null +++ b/mirage/exif.patch @@ -0,0 +1,289 @@ +diff --recursive --unified mirage-1.0_pre2.orig/mirage.py mirage-1.0_pre2/mirage.py +--- mirage-1.0_pre2/mirage.py.orig 2012-12-10 13:28:48.000000000 +0200 ++++ mirage-1.0_pre2/mirage.py 2019-08-24 15:01:22.110133416 +0300 +@@ -64,11 +64,11 @@ + print _("xmouse.so module not found, some screenshot capabilities will be disabled.") + + try: +- import pyexiv2 ++ import exif + HAS_EXIF = True + except: + HAS_EXIF = False +- print _("pyexiv2 module not found, exifdata reading/writing are disabled") ++ print _("exif.so module not found, exifdata reading/writing are disabled") + + try: + import gconf +@@ -2337,9 +2337,8 @@ + hbox.pack_start(vbox_right, False, False, 3) + includes_exif = False + if HAS_EXIF: +- exifd = pyexiv2.ImageMetadata(self.currimg.name) +- exifd.read() +- if ([x for x in exifd.exif_keys if "Exif.Photo" in x]): ++ metadata = self.currimg.exif_metadata ++ if metadata is not None: + includes_exif = True + # The exif data + exif_lbox = gtk.VBox() +@@ -2349,13 +2348,13 @@ + exif_vbox = gtk.VBox() + exif_empty = gtk.Label(" ") + +- expo_l, expo_v = self.exif_return_label(exifd, _("Exposure time:"), _("%s sec"),"Exif.Photo.ExposureTime", "rat_frac") +- aperture_l, aperture_v = self.exif_return_label(exifd, _("Aperture:"), _("%s"),"Exif.Photo.FNumber", "rat_float") +- focal_l, focal_v = self.exif_return_label(exifd, _("Focal length:"), _("%s mm"),"Exif.Photo.FocalLength", "rat_int") +- date_l, date_v = self.exif_return_label(exifd, _("Time taken:"), _("%s"),"Exif.Photo.DateTimeOriginal", "str") +- ISO_l, ISO_v = self.exif_return_label(exifd, _("ISO Speed:"), _("%s"),"Exif.Photo.ISOSpeedRatings", "int") +- bias_l, bias_v = self.exif_return_label(exifd, _("Exposure bias:"), _("%s"),"Exif.Photo.ExposureBiasValue", "rat_frac") +- model_l, model_v = self.exif_return_label(exifd, _("Camera:"), _("%s"),"Exif.Image.Model", "str") ++ expo_l, expo_v = self.exif_return_label(metadata, _("Exposure time:"), _("%s sec"),'EXIF',"ExposureTime", "rat_frac") ++ aperture_l, aperture_v = self.exif_return_label(metadata, _("Aperture:"), _("%s"),'EXIF',"FNumber", "rat_float") ++ focal_l, focal_v = self.exif_return_label(metadata, _("Focal length:"), _("%s mm"),'EXIF',"FocalLength", "rat_int") ++ date_l, date_v = self.exif_return_label(metadata, _("Time taken:"), _("%s"),'EXIF',"DateTimeOriginal", "str") ++ ISO_l, ISO_v = self.exif_return_label(metadata, _("ISO Speed:"), _("%s"),'EXIF',"ISOSpeedRatings", "int") ++ bias_l, bias_v = self.exif_return_label(metadata, _("Exposure bias:"), _("%s"),'EXIF',"ExposureBiasValue", "rat_frac") ++ model_l, model_v = self.exif_return_label(metadata, _("Camera:"), _("%s"),'0',"Model", "str") + exif_lbox.pack_start(exif_title, False, False, 2) + exif_lbox.pack_start(aperture_l, False, False, 2) + exif_lbox.pack_start(focal_l, False, False, 2) +@@ -2390,19 +2389,19 @@ + show_props.run() + show_props.destroy() + +- def exif_return_label(self, exif, label_v, format, tag, type="str"): ++ def exif_return_label(self, metadata, label_v, format, ifd, tag, type="str"): + label = gtk.Label(label_v) + label.set_alignment(1, 1) +- if tag in exif.exif_keys: +- raw = exif[tag].value ++ if ifd in metadata and tag in metadata[ifd]: ++ raw = metadata[ifd][tag] + if type == "rat_frac": +- val = Fraction(str(raw)) ++ val = Fraction(raw[0][0], raw[0][1]) + elif type == "rat_float": +- val = float(raw) ++ val = float(raw[0][0]) / float(raw[0][1]) + elif type == "rat_int": +- val = int(raw) ++ val = int(round(float(raw[0][0]) / float(raw[0][1]))) + elif type == "int": +- val = int(raw) ++ val = int(raw[0]) + else: + val = raw + value = gtk.Label(format % str(val)) +@@ -4629,16 +4628,20 @@ + self.height_original = self.height + self.orientation = ImageData.ORIENT_NORMAL + if HAS_EXIF : +- exifd = pyexiv2.ImageMetadata(self.name) +- exifd.read() +- if "Exif.Image.Orientation" in exifd.exif_keys : +- self.orientation = exifd["Exif.Image.Orientation"].value +- if self.orientation == ImageData.ORIENT_LEFT : +- self.rotate_pixbuf(90) +- elif self.orientation == ImageData.ORIENT_MIRROR : +- self.rotate_pixbuf(180) +- elif self.orientation == ImageData.ORIENT_RIGHT : +- self.rotate_pixbuf(270) ++ self.exif_metadata = exif.read_metadata(self.name) ++ if self.exif_metadata is not None: ++ try: ++ orientation = self.exif_metadata['1']['Orientation'][0] ++ except KeyError: ++ orientation = None ++ if orientation is not None : ++ self.orientation = orientation ++ if self.orientation == ImageData.ORIENT_LEFT : ++ self.rotate_pixbuf(90) ++ elif self.orientation == ImageData.ORIENT_MIRROR : ++ self.rotate_pixbuf(180) ++ elif self.orientation == ImageData.ORIENT_RIGHT : ++ self.rotate_pixbuf(270) + self.zoomratio = 1 + self.isloaded = True + self.fileinfo = gtk.gdk.pixbuf_get_file_info(self.name)[0] +diff --recursive --unified mirage-1.0_pre2.orig/po/cs.po mirage-1.0_pre2/po/cs.po +--- mirage-1.0_pre2.orig/po/cs.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/cs.po 2019-08-22 15:18:10.630214010 +0300 +@@ -31,7 +31,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/de.po mirage-1.0_pre2/po/de.po +--- mirage-1.0_pre2.orig/po/de.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/de.po 2019-08-22 15:18:10.600214010 +0300 +@@ -32,7 +32,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/es.po mirage-1.0_pre2/po/es.po +--- mirage-1.0_pre2.orig/po/es.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/es.po 2019-08-22 15:18:10.640214010 +0300 +@@ -32,7 +32,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/fr.po mirage-1.0_pre2/po/fr.po +--- mirage-1.0_pre2.orig/po/fr.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/fr.po 2019-08-22 15:18:10.630214010 +0300 +@@ -34,7 +34,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/he.po mirage-1.0_pre2/po/he.po +--- mirage-1.0_pre2.orig/po/he.po 2012-12-10 12:49:54.000000000 +0200 ++++ mirage-1.0_pre2/po/he.po 2019-08-22 15:18:10.620214010 +0300 +@@ -32,7 +32,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/hu.po mirage-1.0_pre2/po/hu.po +--- mirage-1.0_pre2.orig/po/hu.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/hu.po 2019-08-22 15:18:10.610214010 +0300 +@@ -36,7 +36,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/it.po mirage-1.0_pre2/po/it.po +--- mirage-1.0_pre2.orig/po/it.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/it.po 2019-08-22 15:18:10.620214010 +0300 +@@ -33,7 +33,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/messages.po mirage-1.0_pre2/po/messages.po +--- mirage-1.0_pre2.orig/po/messages.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/messages.po 2019-08-22 15:18:10.630214010 +0300 +@@ -32,7 +32,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/nl.po mirage-1.0_pre2/po/nl.po +--- mirage-1.0_pre2.orig/po/nl.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/nl.po 2019-08-22 15:18:10.620214010 +0300 +@@ -31,7 +31,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/pl.po mirage-1.0_pre2/po/pl.po +--- mirage-1.0_pre2.orig/po/pl.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/pl.po 2019-08-22 15:18:10.640214010 +0300 +@@ -36,7 +36,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/pt_BR.po mirage-1.0_pre2/po/pt_BR.po +--- mirage-1.0_pre2.orig/po/pt_BR.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/pt_BR.po 2019-08-22 15:18:10.610214010 +0300 +@@ -33,7 +33,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/ru.po mirage-1.0_pre2/po/ru.po +--- mirage-1.0_pre2.orig/po/ru.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/ru.po 2019-08-22 15:18:10.630214010 +0300 +@@ -31,7 +31,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/po/uk.po mirage-1.0_pre2/po/uk.po +--- mirage-1.0_pre2.orig/po/uk.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/uk.po 2019-08-22 15:18:10.620214010 +0300 +@@ -38,8 +38,8 @@ + "бŃде відключено." + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" +-msgstr "МодŃль pyexiv2 не знайдено, читання/Đ·Đ°ĐżĐ¸Ń exifdata бŃде відключено." ++msgid "exif.so module not found, exifdata reading/writing are disabled" ++msgstr "МодŃль exif.so не знайдено, читання/Đ·Đ°ĐżĐ¸Ń exifdata бŃде відключено." + + #: mirage.py:79 + #, python-format +diff --recursive --unified mirage-1.0_pre2.orig/po/zh_CN.po mirage-1.0_pre2/po/zh_CN.po +--- mirage-1.0_pre2.orig/po/zh_CN.po 2012-12-10 12:43:02.000000000 +0200 ++++ mirage-1.0_pre2/po/zh_CN.po 2019-08-22 15:18:10.610214010 +0300 +@@ -34,7 +34,7 @@ + msgstr "" + + #: mirage.py:71 +-msgid "pyexiv2 module not found, exifdata reading/writing are disabled" ++msgid "exif.so module not found, exifdata reading/writing are disabled" + msgstr "" + + #: mirage.py:79 +diff --recursive --unified mirage-1.0_pre2.orig/setup.py mirage-1.0_pre2/setup.py +--- mirage-1.0_pre2.orig/setup.py 2012-12-10 13:28:31.000000000 +0200 ++++ mirage-1.0_pre2/setup.py 2019-08-22 15:07:14.900205205 +0300 +@@ -37,6 +37,7 @@ + py_modules = ['mirage'], + ext_modules = [Extension(name='imgfuncs', sources=['imgfuncs.c']), + Extension(name='xmouse', sources=['xmouse.c'], libraries=['X11']), ++ Extension(name='exif', sources=['exif.c'], libraries=['exif']), + Extension(name='mirage_numacomp', sources=['mirage_numacomp.c'])], + scripts = ['mirage'], + data_files=[('share/mirage', ['README', 'COPYING', 'CHANGELOG', 'TODO', 'TRANSLATORS', 'stock_shuffle.png', 'stock_leave-fullscreen.png', 'stock_fullscreen.png', 'mirage_blank.png']), diff --git a/mjpegtools/PKGBUILD b/mjpegtools/PKGBUILD new file mode 100644 index 0000000..188410b --- /dev/null +++ b/mjpegtools/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=mjpegtools +pkgver=2.1.0 +_debver=$pkgver +_debrel=6 +pkgrel=5 +pkgdesc="Set of tools that can do recording of videos and playback, simple cut-and-paste editing and the MPEG compression of audio and video" +arch=('i686' 'x86_64') +license=('GPL-2') +url="http://mjpeg.sourceforge.net/" +depends=('libjpeg-turbo' 'libpng' 'sdl' 'gcc-libs') +makedepends=('gtk2' 'v4l-utils' 'quilt') +optdepends=('gtk2: glav GUI') +options=('!makeflags') +source=(https://downloads.sourceforge.net/sourceforge/mjpeg/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/m/mjpegtools/mjpegtools_${_debver}+debian-${_debrel}.debian.tar.xz) +sha512sums=('10d3288f47d7cc4de87fa63f65e0fd4bd0a9af95db77155eecccecae7a7e60ebab83eaec44cf7a2c3d9e627f0cc086eda208abee1a7a74cbf3f85e87bb979ac5' + '5a5be6550548ba572fd984d0b48c81359cf17fca3a7aabd862fecb3bafc50305a24b733e505b147c631df361c324ca7d1eff75dde7c823b2b7b13c60550dd77e') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches debian + + # Doesn't apply + rm -v debian/patches/17_hurd.patch || true + + quilt push -av + fi + sed -i -e '/ARCHFLAGS=/s:=.*:=:' configure +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --enable-largefile + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -m644 mpeg2enc/mpeg2syntaxcodes.h "${pkgdir}/usr/include/mjpegtools/mpeg2enc/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/mk-configure/PKGBUILD b/mk-configure/PKGBUILD new file mode 100644 index 0000000..3e2c2b3 --- /dev/null +++ b/mk-configure/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=mk-configure +pkgver=0.37.0 +pkgrel=1 +pkgdesc="Lightweight replacement for GNU autotools" +arch=('any') +url='https://github.com/cheusov/mk-configure' +license=('Simplified-BSD' 'Modified-BSD' 'Expat') +depends=('bash' 'gawk') +makedepends=('bmake' 'bmkdep') +source=("https://github.com/cheusov/$pkgname/archive/$pkgname-$pkgver.tar.gz") +sha512sums=('53908709c478aa60ad9fc4ca5ef2c4249b243fd398735ad6f601864715b582b8abbd710a43d81d86a36864bf6e60e64304ddf014ddce0b1ae6c08a6a2a4e1cef') + +build() { + cd $pkgname-$pkgname-$pkgver + export USE_AWK=/usr/bin/gawk + export USE_INSTALL=/usr/bin/install + export PREFIX=/usr SYSCONFDIR=/etc MANDIR=/usr/share/man + bmake CUSTOM.prog_nbmkdep=/usr/bin/bmkdep all +} + +package() { + cd $pkgname-$pkgname-$pkgver + export PREFIX=/usr SYSCONFDIR=/etc MANDIR=/usr/share/man + bmake CUSTOM.prog_nbmkdep=/usr/bin/bmkdep DESTDIR="$pkgdir" install + install -Dm644 doc/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/mkclean/PKGBUILD b/mkclean/PKGBUILD new file mode 100644 index 0000000..0f80522 --- /dev/null +++ b/mkclean/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=mkclean +pkgver=0.9.0 +pkgrel=1 +pkgdesc="Cleanup and optimize MKV files" +arch=('i686' 'x86_64') +url='http://www.matroska.org/downloads/mkclean.html' +license=('Original-BSD') +depends=('glibc') +makedepends=('cmake') +source=("http://sourceforge.net/projects/matroska/files/mkclean/mkclean-${pkgver}.tar.bz2") +sha512sums=('8be41b144ca4c3d4073624b35e3b9127ece441aa6527e3ce96e65b2feb918960b516317a3ce277413cf2e13db407728f0a1c7102cbacda5a5d6896cd770cb455') + +prepare(){ + mkdir -p build +} + +build(){ + cd build + cmake "../${pkgname}-${pkgver}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr + + make +} + +package(){ + install -Dm755 build/mkclean/mkclean "${pkgdir}/usr/bin/mkclean" + install -Dm644 "${pkgname}-${pkgver}/ReadMe.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/mkisolinux/LICENSE b/mkisolinux/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/mkisolinux/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/mkisolinux/PKGBUILD b/mkisolinux/PKGBUILD new file mode 100644 index 0000000..b8c8251 --- /dev/null +++ b/mkisolinux/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=mkisolinux +pkgver=2013.05 +pkgrel=1 +pkgdesc="Advanced, modular isolinux bootcd image creation utility (Hyperbola rebranded)" +arch=(any) +license=('GPL-2') +url="https://www.hyperbola.info/" +depends=('mkinitcpio' 'libisoburn' 'syslinux' 'pciutils') +replaces=('mkbootcd') +backup=(etc/mkisolinux.conf) +source=('boot.msg' 'mkisolinux' 'mkisolinux.conf' 'options.msg' 'LICENSE') + +sha512sums=('cdd952dbd3c9ac6640c2df601808aa3526945175ceb778616fad100c0947460c0e77e767294e5b844bbb74830b47da8e630f1f35b16c78873dc726d31a32228d' + 'd1e3eaf488a9fa8ab1697e380054328de204369647656d251ce9fe1cc9bdea2a0a5958e6ffd6d72ab9267e26a681071954db0d4babb22b1fc513f8efcbbeac8e' + 'fda59b72a0b6638dcef595f1f4c265c7165bad47cbc4e8dc83804c78d7f6b532ceaf27a578d86b6661006e9b623fb99ba517ad19e9f8b3bfc6c550b0829b6f1f' + 'c717359bcf0e246981d7f36313ca838a34ea54ace21f4fb96158a44f39486baf32778e326e66d8d645d3e54debde12826b685691d2b9dea82e61bd1181635f61' + 'aee80b1f9f7f4a8a00dcf6e6ce6c41988dcaedc4de19d9d04460cbfb05d99829ffe8f9d038468eabbfba4d65b38e8dbef5ecf5eb8a1b891d9839cda6c48ee957') + +package() { + cd "$srcdir/" + install -D -m755 mkisolinux "$pkgdir/usr/bin/mkisolinux" + install -D -m644 mkisolinux.conf "$pkgdir/etc/mkisolinux.conf" + install -D -m644 boot.msg "$pkgdir/usr/share/mkisolinux/boot.msg" + install -D -m644 options.msg "$pkgdir/usr/share/mkisolinux/options.msg" + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/mkisolinux/boot.msg b/mkisolinux/boot.msg new file mode 100644 index 0000000..0e1658a --- /dev/null +++ b/mkisolinux/boot.msg @@ -0,0 +1,15 @@ + + +------------------------------------------------------------------------------ +Hyperbola GNU/Linux-libre +ISOLINUX BOOT +created with 'mkisolinux' written by Tobias Powalowski +rebranded for Hyperbola by AndrĂ© Silva + +Press ENTER or type 'parabola' to boot the CD. + +If you wish to change your defaults to boot into your existing system, +type 'vmlinuz initrd=initrd.img ' +Use the F2 key for troubleshooting and options. +------------------------------------------------------------------------------ + diff --git a/mkisolinux/mkisolinux b/mkisolinux/mkisolinux new file mode 100755 index 0000000..22f433a --- /dev/null +++ b/mkisolinux/mkisolinux @@ -0,0 +1,116 @@ +#! /bin/sh +# Created by Tobias Powalowski +# Rebranded for Hyperbola by AndrĂ© Silva +# Settings +APPNAME=$(basename "${0}") +CONFIG="/etc/mkisolinux.conf" +GENIMG="" +BURN="0" +BLANK="0" +TARNAME="" +export TEMPDIR=$(mktemp -d /tmp/mkisolinux.XXXX) +usage () +{ + echo "${APPNAME}: usage" + echo " -g=IMAGE Generate a ISO image as IMAGE" + echo " -c=CONFIG Use CONFIG file. default: /etc/mkisolinux.conf" + echo " -B Burn the ISO image after creation" + echo " -b Blanking media first" + echo " -h This message." + exit 1 +} + +[ "$1" == "" ] && usage + +while [ $# -gt 0 ]; do + case $1 in + -c=*|--c=*) CONFIG="$(echo $1 | awk -F= '{print $2;}')" ;; + -g=*|--g=*) GENIMG="$(echo $1 | awk -F= '{print $2;}')" ;; + -B|--B) BURN="1" ;; + -b|--b) BLANK="1" ;; + -t=*|--t=*) TARNAME="$(echo $1 | awk -F= '{print $2;}')" ;; + -h|--h|?) usage ;; + *) usage ;; + esac + shift +done + +if [ "${TARNAME}" = "" -a "${GENIMG}" = "" ]; then + echo "ERROR: No image name specified, please use the -g option" + exit 1 +fi + +if [ ! -f "${CONFIG}" ]; then + echo "config file '${CONFIG}' cannot be found, aborting..." + exit 1 +fi + +. "${CONFIG}" +# export for mkinitcpio +[ -n "${APPENDBOOTMESSAGE}" ] && export APPENDBOOTMESSAGE +[ -n "${APPENDOPTIONSBOOTMESSAGE}" ] && export APPENDOPTIONSBOOTMESSAGE + +export RUNPROGRAM="${APPNAME}" +export BOOTDIRNAME="boot/syslinux" + +[ "${BOOTMESSAGE}" = "" ] && export BOOTMESSAGE=$(mktemp /tmp/bootmessage.XXXX) +[ "${OPTIONSBOOTMESSAGE}" = "" ] && export OPTIONSBOOTMESSAGE=$(mktemp /tmp/optionsbootmessage.XXXX) +[ "${ISONAME}" = "" ] && export ISONAME=$(mktemp /tmp/isoname.XXXX) +export USEKERNEL=${VERSION} + +# begin script +mkdir -p ${TEMPDIR}/${BOOTDIRNAME}/ +# prepare syslinux +install -m755 /usr/lib/syslinux/isolinux.bin ${TEMPDIR}/${BOOTDIRNAME}/isolinux.bin +for i in /usr/lib/syslinux/*.c32; do + install -m644 $i ${TEMPDIR}/${BOOTDIRNAME}/$(basename $i) +done +install -m644 /usr/share/hwdata/pci.ids ${TEMPDIR}/${BOOTDIRNAME}/pci.ids +# create syslinux.cfg +echo ":: Creating syslinux.cfg ..." +if [ "${ISOLINUXCFG}" = "" ]; then + [ -e ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg ] && rm ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "prompt ${PROMPT}" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "timeout ${TIMEOUT}" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "display boot.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "F1 boot.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "F2 options.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "default hyperbola" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "label hyperbola" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "kernel /boot/vmlinuz" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "append initrd=/boot/initrd.img ${KERNEL_BOOT_OPTIONS}" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg +else + sed "s|@@PROMPT@@|${PROMPT}|g;s|@@TIMEOUT@@|${TIMEOUT}|g;s|@@KERNEL_BOOT_OPTIONS@@|${KERNEL_BOOT_OPTIONS}|g" \ + ${ISOLINUXCFG} > ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg +fi +[ ! -s ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg ] && echo "No syslinux.cfg found" && exit 1 + +echo ":: Calling mkinitcpio CONFIG=${MKINITCPIO_CONFIG} KERNEL=${VERSION} ..." +# generate initramdisk +echo ":: Creating initramdisk ..." + mkinitcpio -c ${MKINITCPIO_CONFIG} -k ${VERSION} -g ${TEMPDIR}/boot/initrd.img +echo ":: Using ${KERNEL} as image kernel ..." + install -m644 ${KERNEL} ${TEMPDIR}/boot/vmlinuz + install -m644 ${BOOTMESSAGE} ${TEMPDIR}/${BOOTDIRNAME}/boot.msg + install -m644 ${OPTIONSBOOTMESSAGE} ${TEMPDIR}/${BOOTDIRNAME}/options.msg + [ ! -s ${TEMPDIR}/${BOOTDIRNAME}/boot.msg ] && echo 'ERROR:no boot.msg found, aborting!' && exit 1 + [ ! -s ${TEMPDIR}/${BOOTDIRNAME}/options.msg ] && echo 'ERROR:no options.msg found, aborting!' && exit 1 +# create image +echo ":: Creating ISO image ..." + [ -e ${GENIMG} ] && rm ${GENIMG} + [ -s "${ISONAME}" ] && ISONAME=$(cat $ISONAME) || ISONAME="Hyperbola GNU/Linux-libre" + mkisofs -RlDJLV "${ISONAME}" -b boot/syslinux/isolinux.bin -c boot/syslinux/boot.cat \ + -no-emul-boot -boot-load-size 4 -boot-info-table -o ${GENIMG} ${TEMPDIR}/ > /dev/null 2>&1 \ + && echo ":: ISO Image succesfull created at ${GENIMG}" + # burning/blanking image + if [ "$BLANK" = "1" ]; then + echo ":: Blanking media DEVICE=${DEVICE}, BLANKMODE=${BLANKMODE}, SPEED=${SPEED} ..." + cdrecord dev=${DEVICE} speed=${SPEED} blank=${BLANKMODE} > /dev/null 2>&1 && echo ":: Successfull." + fi + if [ "$BURN" = "1" ]; then + echo ":: Burning ISO image DEVICE=${DEVICE}, SPEED=${SPEED} ..." + cdrecord dev=${DEVICE} speed=${SPEED} -eject ${GENIMG} > /dev/null 2>&1 && echo ":: Successfull." + fi + +# clean /tmp +rm -r ${TEMPDIR} diff --git a/mkisolinux/mkisolinux.conf b/mkisolinux/mkisolinux.conf new file mode 100644 index 0000000..ee35a47 --- /dev/null +++ b/mkisolinux/mkisolinux.conf @@ -0,0 +1,39 @@ +# Created by Tobias Powalowski +# Rebranded for Hyperbola by AndrĂ© Silva +# config file of mkisolinux + +# DEFAULT kernel boot options like root=/dev/sda3 etc. +# add your root= option, if you boot from a disk device +# and don't want to add it by hand on each boot +KERNEL_BOOT_OPTIONS="" + +# mkinitcpio config file, defaulted to stock config file +MKINITCPIO_CONFIG="/etc/mkinitcpio.conf" + +# kernel version, defaulted to build for runtime kernel +VERSION="$(uname -r)" + +# kernel image, defaulted to stock libre kernel +KERNEL="/boot/vmlinuz-linux-libre" + +# boot message files +BOOTMESSAGE="/usr/share/mkisolinux/boot.msg" +OPTIONSBOOTMESSAGE="/usr/share/mkisolinux/options.msg" + +# syslinux.cfg file to use +SYSLINUXCFG="" + +# Prompt on boot, 1=yes 0=no +PROMPT="1" + +# Name of the ISO, if empty Hyperbola GNU/Linux-libre is used if not set by a HOOK later +ISONAME="" + +# Timeout, 30 seconds to fix usb keyboard issues +# 0 means wait for prompt +TIMEOUT="300" + +# Setting cdrecord options +DEVICE="" +SPEED="" +BLANKMODE="" diff --git a/mkisolinux/options.msg b/mkisolinux/options.msg new file mode 100644 index 0000000..f3ef839 --- /dev/null +++ b/mkisolinux/options.msg @@ -0,0 +1,6 @@ +------------------------------------------------------------------------------ +Hyperbola GNU/Linux-libre options and troubleshooting: + +- If your system hangs during the boot process, any combinations of the + boot options noapic acpi=off pci=routeirq nosmp nomsi may be useful. +------------------------------------------------------------------------------ diff --git a/mkpxelinux/LICENSE b/mkpxelinux/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/mkpxelinux/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/mkpxelinux/PKGBUILD b/mkpxelinux/PKGBUILD new file mode 100644 index 0000000..068c10b --- /dev/null +++ b/mkpxelinux/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=mkpxelinux +pkgver=2013.10 +pkgrel=1 +pkgdesc="Advanced, modular network pxe boot image creation utility (Hyperbola rebranded)" +arch=(any) +license=('GPL-2') +url="https://www.hyperbola.info/" +depends=('mkinitcpio' 'tftp-hpa' 'syslinux') +backup=(etc/mkpxelinux.conf) +optdepends=('dhcp: for dhcp server usage') +source=('boot.msg' 'mkpxelinux' 'mkpxelinux.conf' 'options.msg' 'LICENSE') +sha512sums=('d08b615271463dd771f3e0a50306221ffbda800ea912cbecfd5fd737e76eb56353a62cf83c79f9699c2bae0146fbe126e383bc4510b50a30ebc5fb2e74e2daef' + 'cf600f5867e9a209f3afcb4b8d7a90d13af4151bbe9079d5b652badfa14dd44108b226f6215cf1bad2230ecc5f16e92aa18e722f77ebddfaa1a7f1ed2b22b608' + '1dd28f681fa2dbe559eaa9f4273597d2975d0427c7627b86893fda8ad6544365f8029cd4f0b0302775421c29353a689732d1518c722dd95f653bc2c449266e02' + 'c717359bcf0e246981d7f36313ca838a34ea54ace21f4fb96158a44f39486baf32778e326e66d8d645d3e54debde12826b685691d2b9dea82e61bd1181635f61' + 'aee80b1f9f7f4a8a00dcf6e6ce6c41988dcaedc4de19d9d04460cbfb05d99829ffe8f9d038468eabbfba4d65b38e8dbef5ecf5eb8a1b891d9839cda6c48ee957') + +package() { + cd "$srcdir/" + install -D -m755 mkpxelinux "$pkgdir/usr/bin/mkpxelinux" + install -D -m644 mkpxelinux.conf "$pkgdir/etc/mkpxelinux.conf" + install -D -m644 boot.msg "$pkgdir/usr/share/mkpxelinux/boot.msg" + install -D -m644 options.msg "$pkgdir/usr/share/mkpxelinux/options.msg" + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/mkpxelinux/boot.msg b/mkpxelinux/boot.msg new file mode 100644 index 0000000..16d7dca --- /dev/null +++ b/mkpxelinux/boot.msg @@ -0,0 +1,15 @@ + + +------------------------------------------------------------------------------ +Hyperbola GNU/Linux-libre +PXELINUX BOOT +created with 'mkpxelinux' written by Tobias Powalowski +rebranded for Hyperbola by AndrĂ© Silva + +Press ENTER or type 'hyperbola' to boot image. + +If you wish to change your defaults to boot into your existing system, +type 'vmlinuz initrd=initrd.img ' +Use the F2 key for troubleshooting and options. +------------------------------------------------------------------------------ + diff --git a/mkpxelinux/mkpxelinux b/mkpxelinux/mkpxelinux new file mode 100755 index 0000000..bd31572 --- /dev/null +++ b/mkpxelinux/mkpxelinux @@ -0,0 +1,91 @@ +#! /bin/sh +# Created by Tobias Powalowski +# Rebranded for Hyperbola by AndrĂ© Silva +# Settings +APPNAME=$(basename "${0}") +CONFIG="/etc/mkpxelinux.conf" + +usage () +{ + echo "${APPNAME}: usage" + echo"" + echo " -d=INSTALLDIR Your INSTALLDIR overwrites config default" + echo " -c=CONFIG Use CONFIG file. default: /etc/mkpxelinux.conf" + echo " -h This message." + exit 1 +} + +[ "$1" == "" ] && usage && exit 1 + +while [ $# -gt 0 ]; do + case $1 in + -c=*|--c=*) CONFIG="$(echo $1 | awk -F= '{print $2;}')" ;; + -d=*|--d=*) CUSTOMINSTALLDIR="$(echo $1 | awk -F= '{print $2;}')" ;; + -h|--h|?) usage ;; + *) usage ;; + esac + shift +done + +if [ ! -f "${CONFIG}" ]; then + echo "config file '${CONFIG}' cannot be found, aborting..." + exit 1 +fi + +. "${CONFIG}" +# export for mkinitcpio +[ -n "${APPENDBOOTMESSAGE}" ] && export APPENDBOOTMESSAGE +[ -n "${APPENDOPTIONSBOOTMESSAGE}" ] && export APPENDOPTIONSBOOTMESSAGE + +! [ "${CUSTOMINSTALLDIR}" = "" ] && INSTALLDIR=${CUSTOMINSTALLDIR} + +if [ "${INSTALLDIR}" = "" ]; then + echo "ERROR: No INSTALLDIR name specified, please use the -d option" + exit 1 +fi + +if ! [ $UID -eq 0 ]; then + echo "ERROR: only works when run as root!" + exit 1 +fi + +! [ -e ${INSTALLDIR} ] && echo "No ${INSTALLDIR} found!" && exit 1 +export TEMPDIR=${NFSROOTDIR} +export INSTALLDIR=${INSTALLDIR} +export RUNPROGRAM="${APPNAME}" +[ "${BOOTMESSAGE}" = "" ] && export BOOTMESSAGE=$(mktemp /tmp/bootmessage.XXXX) +[ "${OPTIONSBOOTMESSAGE}" = "" ] && export OPTIONSBOOTMESSAGE=$(mktemp /tmp/optionsbootmessage.XXXX) +export USEKERNEL=${VERSION} +# begin script +# create default +echo ":: Creating pxelinux default config file ..." +mkdir -p ${INSTALLDIR}/pxelinux.cfg +if [ "${PXELINUX_DEFAULT}" = "" ]; then + [ -e ${INSTALLDIR}/pxelinux.cfg/default ] && rm ${INSTALLDIR}/pxelinux.cfg/default + echo "prompt ${PROMPT}" >> ${INSTALLDIR}/pxelinux.cfg/default + echo "timeout ${TIMEOUT}" >> ${INSTALLDIR}/pxelinux.cfg/default + echo "display boot.msg" >> ${INSTALLDIR}/pxelinux.cfg/default + echo "F1 boot.msg" >> ${INSTALLDIR}/pxelinux.cfg/default + echo "F2 options.msg" >> ${INSTALLDIR}/pxelinux.cfg/default + echo "default hyperbola" >> ${INSTALLDIR}/pxelinux.cfg/default + echo "label hyperbola" >> ${INSTALLDIR}/pxelinux.cfg/default + echo "kernel vmlinuz" >> ${INSTALLDIR}/pxelinux.cfg/default + echo "append initrd=initrd.img ${KERNEL_BOOT_OPTIONS}" >> ${INSTALLDIR}/pxelinux.cfg/default +else + sed "s|@@PROMPT@@|${PROMPT}|g;s|@@TIMEOUT@@|${TIMEOUT}|g;s|@@KERNEL_BOOT_OPTIONS@@|${KERNEL_BOOT_OPTIONS}|g" \ + ${PXELINUX_DEFAULT} > ${INSTALLDIR}/pxelinux.cfg/default +fi +[ ! -s ${INSTALLDIR}/pxelinux.cfg/default ] && echo "No pxelinux default config found" && exit 1 +echo ":: Calling mkinitcpio CONFIG=${MKINITCPIO_CONFIG} KERNEL=${VERSION} ..." +# generate initramdisk +echo ":: Creating initramdisk ..." + mkinitcpio -c ${MKINITCPIO_CONFIG} -k ${VERSION} -g ${INSTALLDIR}/initrd.img +echo ":: Using ${KERNEL} as image kernel ..." + install -m644 ${KERNEL} ${INSTALLDIR}/vmlinuz +echo ":: Installing message files to ${INSTALLDIR} ..." + install -m644 ${BOOTMESSAGE} ${INSTALLDIR}/boot.msg + install -m644 ${OPTIONSBOOTMESSAGE} ${INSTALLDIR}/options.msg + [ ! -s ${INSTALLDIR}/boot.msg ] && echo 'ERROR:no boot.msg found, aborting!' && exit 1 + [ ! -s ${INSTALLDIR}/options.msg ] && echo 'ERROR:no options.msg found, aborting!' && exit 1 +echo ":: Installing PXELINUX to ${INSTALLDIR} ..." + install -m644 /usr/lib/syslinux/bios/pxelinux.0 ${INSTALLDIR}/pxelinux.0 && echo "Installation completed." diff --git a/mkpxelinux/mkpxelinux.conf b/mkpxelinux/mkpxelinux.conf new file mode 100644 index 0000000..872a062 --- /dev/null +++ b/mkpxelinux/mkpxelinux.conf @@ -0,0 +1,37 @@ +# Created by Tobias Powalowski +# Rebranded for Hyperbola by AndrĂ© Silva +# config file of mkpxelinux + +# DEFAULT kernel boot options like ip=:::::eth0:dhcp etc. +# add your root= option, if you boot from a disk device +# and don't want to add it by hand on each boot +KERNEL_BOOT_OPTIONS="" + +# mkinitcpio config file, defaulted to stock config file +MKINITCPIO_CONFIG="/etc/mkinitcpio.conf" + +# kernel version, defaulted to build for runtime kernel +VERSION="$(uname -r)" + +# kernel image, defaulted to stock libre kernel +KERNEL="/boot/vmlinuz-linux-libre" + +# boot message files +BOOTMESSAGE="/usr/share/mkpxelinux/boot.msg" +OPTIONSBOOTMESSAGE="/usr/share/mkpxelinux/options.msg" + +#pxelinux default config file to use +PXELINUX_DEFAULT="" + +# Prompt on boot, 1=yes 0=no +PROMPT="1" + +# Timeout, 30 seconds to fix usb keyboard issues +# 0 means wait for prompt +TIMEOUT="300" + +# Installdir of tftp, default location +INSTALLDIR="/var/tftpboot" + +# Nfsrootdir, for hooks that might need it +NFSROOTDIR="" diff --git a/mkpxelinux/options.msg b/mkpxelinux/options.msg new file mode 100644 index 0000000..f3ef839 --- /dev/null +++ b/mkpxelinux/options.msg @@ -0,0 +1,6 @@ +------------------------------------------------------------------------------ +Hyperbola GNU/Linux-libre options and troubleshooting: + +- If your system hangs during the boot process, any combinations of the + boot options noapic acpi=off pci=routeirq nosmp nomsi may be useful. +------------------------------------------------------------------------------ diff --git a/mksyslinux/LICENSE b/mksyslinux/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/mksyslinux/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/mksyslinux/PKGBUILD b/mksyslinux/PKGBUILD new file mode 100644 index 0000000..53f49c2 --- /dev/null +++ b/mksyslinux/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=mksyslinux +pkgver=2013.06 +pkgrel=1 +pkgdesc="Advanced, modular syslinux boot image creation utility (Hyperbola rebranded)" +arch=(any) +license=('GPL-2') +url="https://www.hyperbola.info/" +depends=('mkinitcpio' 'syslinux' 'pciutils') +backup=(etc/mksyslinux.conf) +source=('boot.msg' 'mksyslinux' 'mksyslinux.conf' 'options.msg' 'LICENSE') +sha512sums=('28ec5f0bbf4be2eccdb0e5e706bcf61617218a45294e1ba7071f802aca8ce43be65764465190d2bbf6c4ae167a78dcdee0ec71944d0c321d04ea92982a443b93' + 'c7ba307508f5c7ecf0ade35fbcd7611c9175fc12ca6b8d4665211d286b3d861e9b2240f767960318c244e409b37bc0b1488bc41a2674047be96402b754615fd3' + 'cbb89c2068c16c463ea75a6c79c90e8c4498185b514f8712790641a2a8273cda86a98b29d1447107d06b3df9a6fd6bfcb66deab501ec5006f5d4bd06e3887af1' + 'c717359bcf0e246981d7f36313ca838a34ea54ace21f4fb96158a44f39486baf32778e326e66d8d645d3e54debde12826b685691d2b9dea82e61bd1181635f61' + 'aee80b1f9f7f4a8a00dcf6e6ce6c41988dcaedc4de19d9d04460cbfb05d99829ffe8f9d038468eabbfba4d65b38e8dbef5ecf5eb8a1b891d9839cda6c48ee957') + +package() { + cd "$srcdir/" + install -D -m755 mksyslinux "$pkgdir/usr/bin/mksyslinux" + install -D -m644 mksyslinux.conf "$pkgdir/etc/mksyslinux.conf" + install -D -m644 boot.msg "$pkgdir/usr/share/mksyslinux/boot.msg" + install -D -m644 options.msg "$pkgdir/usr/share/mksyslinux/options.msg" + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/mksyslinux/boot.msg b/mksyslinux/boot.msg new file mode 100644 index 0000000..0bd6fdf --- /dev/null +++ b/mksyslinux/boot.msg @@ -0,0 +1,15 @@ + + +------------------------------------------------------------------------------ +Hyperbola GNU/Linux-libre +SYSLINUX BOOT +created with 'mksyslinux' by Tobias Powalowski +rebranded for Hyperbola by AndrĂ© Silva + +Press ENTER or type 'hyperbola' to boot image. + +If you wish to change your defaults to boot into your existing system, +type 'vmlinuz initrd=initrd.img ' +Use the F2 key for troubleshooting and options. +------------------------------------------------------------------------------ + diff --git a/mksyslinux/mksyslinux b/mksyslinux/mksyslinux new file mode 100755 index 0000000..ecff867 --- /dev/null +++ b/mksyslinux/mksyslinux @@ -0,0 +1,145 @@ +#! /bin/sh +# Created by Tobias Powalowski +# Rebranded for Hyperbola by AndrĂ© Silva +# Settings +APPNAME=$(basename "${0}") +CONFIG="/etc/mksyslinux.conf" +export TEMPDIR=$(mktemp /tmp/mksyslinux.XXX) +TMPDIR=$(mktemp -d /tmp/mksyslinux-image.XXX) +BOOTDIRNAME=boot/syslinux + +usage () +{ + echo "${APPNAME}: usage" + echo "WRITING TO DEVICE:" + echo "- PREPARATION: Your device must have a bootable first partition in FAT16 format!" + echo "- ATTENTION: The MBR of your DEVICE will be overwritten! You have been warned!" + echo "" + echo "CREATING AN IMAGE FILE:" + echo "- For creating an image file use the -i=IMAGEFILE switch" + echo "- use 'dd if= of=' to write to your device afterwards." + echo "" + echo "PARAMETERS:" + echo " -d=DEVICE Your DEVICE first partition from /dev/xxx tree to install" + echo " -i=IMAGENAME Your IMAGENAME" + echo " -c=CONFIG Use CONFIG file. default: /etc/mksyslinux.conf" + echo " -h This message." + exit 1 +} + +[ "$1" == "" ] && usage && exit 1 + + +while [ $# -gt 0 ]; do + case $1 in + -c=*|--c=*) CONFIG="$(echo $1 | awk -F= '{print $2;}')" ;; + -d=*|--d=*) DEVICE="$(echo $1 | awk -F= '{print $2;}')" ;; + -i=*|--i=*) IMAGENAME="$(echo $1 | awk -F= '{print $2;}')" ;; + -h|--h|?) usage ;; + *) usage ;; + esac + shift +done + +if [ ! -f "${CONFIG}" ]; then + echo "config file '${CONFIG}' cannot be found, aborting..." + exit 1 +fi + +if [ "${IMAGENAME}" = "" ]; then + if [ "${DEVICE}" = "" ]; then + echo "ERROR: No DEVICE name specified, please use the -d option" + exit 1 + fi +fi + +if ! [ $UID -eq 0 ]; then + echo "ERROR: only works when run as root!" + exit 1 +fi + +. "${CONFIG}" +# export for mkinitcpio +[ -n "${APPENDBOOTMESSAGE}" ] && export APPENDBOOTMESSAGE +[ -n "${APPENDBOOTMESSAGE_SYSLINUX}" ] && export APPENDBOOTMESSAGE_SYSLINUX +[ -n "${APPENDOPTIONSBOOTMESSAGE}" ] && export APPENDOPTIONSBOOTMESSAGE + +MBRDEVICE="$(echo ${DEVICE} | sed -e 's/[0-9]//g')" + +export RUNPROGRAM="${APPNAME}" +[ "${BOOTMESSAGE}" = "" ] && export BOOTMESSAGE=$(mktemp /tmp/bootmessage.XXXX) +[ "${OPTIONSBOOTMESSAGE}" = "" ] && export OPTIONSBOOTMESSAGE=$(mktemp /tmp/optionsbootmessage.XXXX) +export USEKERNEL=${VERSION} +# begin script +[ -e ${TEMPDIR} ] && rm -r ${TEMPDIR} +mkdir -p ${TEMPDIR} +echo ":: Mounting ${DEVICE} ..." +if ! [ "${IMAGENAME}" = "" ]; then + modprobe loop +else + mount ${DEVICE} ${TEMPDIR} || exit 1 +fi +mkdir -p ${TEMPDIR}/${BOOTDIRNAME} +# prepare syslinux bootloader +install -m755 /usr/lib/syslinux/isolinux.bin ${TEMPDIR}/${BOOTDIRNAME}/isolinux.bin +for i in /usr/lib/syslinux/*.c32; do + install -m644 $i ${TEMPDIR}/${BOOTDIRNAME}/$(basename $i) +done +install -m644 /usr/share/hwdata/pci.ids ${TEMPDIR}/${BOOTDIRNAME}/pci.ids + +# create syslinux.cfg +echo ":: Creating syslinux.cfg ..." +if [ "${SYSLINUXCFG}" = "" ]; then + [ -e ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg ] && rm ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "prompt ${PROMPT}" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "timeout ${TIMEOUT}" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "display boot.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "F1 boot.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "F2 options.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "default hyperbola" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "label hyperbola" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "kernel /boot/vmlinuz" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg + echo "append initrd=/boot/initrd.img ${KERNEL_BOOT_OPTIONS}" >> ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg +else + sed "s|@@PROMPT@@|${PROMPT}|g;s|@@TIMEOUT@@|${TIMEOUT}|g;s|@@KERNEL_BOOT_OPTIONS@@|${KERNEL_BOOT_OPTIONS}|g" \ + ${SYSLINUXCFG} > ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg +fi +[ ! -s ${TEMPDIR}/${BOOTDIRNAME}/syslinux.cfg ] && echo "No syslinux.cfg found" && exit 1 +echo ":: Calling mkinitcpio CONFIG=${MKINITCPIO_CONFIG} KERNEL=${VERSION} ..." +# generate initramdisk +echo ":: Creating initramdisk ..." + mkinitcpio -c ${MKINITCPIO_CONFIG} -k ${VERSION} -g ${TEMPDIR}/boot/initrd.img +echo ":: Using ${KERNEL} as image kernel ..." + install -m644 ${KERNEL} ${TEMPDIR}/boot/vmlinuz + install -m644 ${BOOTMESSAGE} ${TEMPDIR}/${BOOTDIRNAME}/boot.msg + install -m644 ${OPTIONSBOOTMESSAGE} ${TEMPDIR}/${BOOTDIRNAME}/options.msg + [ ! -s ${TEMPDIR}/${BOOTDIRNAME}/boot.msg ] && echo 'ERROR:no boot.msg found, aborting!' && exit 1 + [ ! -s ${TEMPDIR}/${BOOTDIRNAME}/options.msg ] && echo 'ERROR:no options.msg found, aborting!' && exit 1 +if ! [ "${IMAGENAME}" = "" ]; then + # ext2 overhead's upper bound is 6% + # empirically tested up to 1GB + rootsize=$(du -bs ${TEMPDIR}|cut -f1) + IMGSZ=$(( (${rootsize}*106)/100/512 + 1)) # image size in sectors + # create the filesystem image file + dd if=/dev/zero of="${IMAGENAME}" bs=512 count="${IMGSZ}" + # create a filesystem on the image + mkfs.vfat "${IMAGENAME}" + mount -o loop ${IMAGENAME} ${TMPDIR} || exit 1 + cp -r "${TEMPDIR}"/* "$TMPDIR" + umount ${TMPDIR} +else + echo ":: Unmounting ${DEVICE} ..." + umount ${TEMPDIR} || exit 1 +fi +if ! [ "${IMAGENAME}" = "" ]; then + echo ":: Installing SYSLINUX on ${IMAGENAME} ..." + syslinux ${IMAGENAME} && echo "Installation completed." +else + echo ":: Installing MBR on ${MBRDEVICE} ..." + cat ${MBR} > ${MBRDEVICE} + echo ":: Installing SYSLINUX on ${DEVICE} ..." + syslinux -t offset ${DEVICE} && echo "Installation completed." +fi +# clean /tmp +rm -r ${TEMPDIR} +! [ ${IMAGENAME} = "" ] && rm -r ${TMPDIR} diff --git a/mksyslinux/mksyslinux.conf b/mksyslinux/mksyslinux.conf new file mode 100644 index 0000000..763aa56 --- /dev/null +++ b/mksyslinux/mksyslinux.conf @@ -0,0 +1,34 @@ +# Created by Tobias Powalowski +# Rebranded for Hyperbola by AndrĂ© Silva +# config file of mksyslinux + +# DEFAULT kernel boot options like root=/dev/sda3 etc. +# add your root= option, if you boot from a disk device +# and don't want to add it by hand on each boot +KERNEL_BOOT_OPTIONS="" + +# mkinitcpio config file, defaulted to stock config file +MKINITCPIO_CONFIG="/etc/mkinitcpio.conf" + +# kernel version, defaulted to build for runtime kernel +VERSION="$(uname -r)" + +# kernel image, defaulted to stock libre kernel +KERNEL="/boot/vmlinuz-linux-libre" + +# boot message files +BOOTMESSAGE="/usr/share/mksyslinux/boot.msg" +OPTIONSBOOTMESSAGE="/usr/share/mksyslinux/options.msg" + +# syslinux.cfg file to use +SYSLINUXCFG="" + +# Prompt on boot, 1=yes 0=no +PROMPT="1" + +# Timeout, 30 seconds to fix usb keyboard issues +# 0 means wait for prompt +TIMEOUT="300" + +# default MBR +MBR="/usr/lib/syslinux/mbr.bin" diff --git a/mksyslinux/options.msg b/mksyslinux/options.msg new file mode 100644 index 0000000..f3ef839 --- /dev/null +++ b/mksyslinux/options.msg @@ -0,0 +1,6 @@ +------------------------------------------------------------------------------ +Hyperbola GNU/Linux-libre options and troubleshooting: + +- If your system hangs during the boot process, any combinations of the + boot options noapic acpi=off pci=routeirq nosmp nomsi may be useful. +------------------------------------------------------------------------------ diff --git a/mktorrent/PKGBUILD b/mktorrent/PKGBUILD new file mode 100644 index 0000000..f9b7c92 --- /dev/null +++ b/mktorrent/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=mktorrent +pkgver=1.1 +pkgrel=1 +pkgdesc="Simple command line utility to create BitTorrent metainfo files" +arch=('i686' 'x86_64') +url='https://github.com/pobrn/mktorrent' +license=('GPL-2') +depends=('libressl') +source=("https://github.com/pobrn/mktorrent/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('2a7ce83950711cf5be098693ad79273b29bcd8a5ef345ea296c7b6b83c532dd3463b347c7137234f1890cb4ea663ee5a5b1878591bc8fb4386d94e4f65410859') + +build() { + cd ${pkgname}-${pkgver} + make PREFIX=/usr USE_PTHREADS=1 USE_OPENSSL=1 USE_LONG_OPTIONS=1 +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" USE_PTHREADS=1 USE_OPENSSL=1 PREFIX=/usr install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/mkvalidator/PKGBUILD b/mkvalidator/PKGBUILD new file mode 100644 index 0000000..1eb6358 --- /dev/null +++ b/mkvalidator/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=mkvalidator +pkgver=0.6.0 +pkgrel=1 +pkgdesc="Validator for MKV-files" +arch=('i686' 'x86_64') +url='http://www.matroska.org/downloads/mkvalidator.html' +license=('Original-BSD') +depends=('glibc') +makedepends=('cmake') +source=("http://sourceforge.net/projects/matroska/files/${pkgname}/${pkgname}-${pkgver}.tar.bz2") +sha512sums=('b8ef7721ea4c2c9d3cbc2d813d2f0476ba36270080e636fe0be40319569b4a32beac6a9a4b0a9f56c6c700d5cba5927e77f93a4498d8bf1037720506c7676b7a') + +prepare(){ + mkdir -p build +} + +build(){ + cd build + cmake "../${pkgname}-${pkgver}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr + make +} + +package(){ + install -Dm755 build/mkvalidator/mkvalidator "${pkgdir}/usr/bin/mkvalidator" + install -Dm644 "mkvalidator-${pkgver}/ReadMe.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/mkvtoolnix/PKGBUILD b/mkvtoolnix/PKGBUILD new file mode 100644 index 0000000..311822c --- /dev/null +++ b/mkvtoolnix/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgbase=mkvtoolnix +pkgname=('mkvtoolnix-cli' 'mkvtoolnix-gui') +pkgver=54.0.0 +pkgrel=3 +pkgdesc='Set of tools to create, edit and inspect Matroska files' +arch=('i686' 'x86_64') +url='https://mkvtoolnix.download/' +license=('GPL-2') +depends=('gcc-libs' 'glibc' 'pcre2' 'pugixml' 'boost-libs' 'libmatroska' 'libebml') +makedepends=('boost' 'cmark' 'docbook-xsl' 'flac' 'libdvdread' + 'libvorbis' 'qt-multimedia' 'qt-tools' 'zlib' 'ruby' + 'gettext-tiny' 'intltool') +source=("https://mkvtoolnix.download/sources/mkvtoolnix-${pkgver}.tar.xz") +sha512sums=('b055748fe3c417a1e1a95091080e5dddb3f6e8670157cbb0f8764297de04d785c2d8edcb42d14ec022593574e12baf0832915473d7502a39c0966fd6e5f15971') + +prepare() { + cd ${pkgbase}-${pkgver} + ./autogen.sh +} + +build() { + cd ${pkgbase}-${pkgver} + ./configure \ + --prefix=/usr \ + --disable-update-check + rake $MAKEFLAGS +} + +package_mkvtoolnix-cli() { + depends+=('libdvdread' 'zlib' 'flac' 'libvorbis' 'libogg') + + cd ${pkgbase}-${pkgver} + rake DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/share/{applications,icons,metainfo,mime,mkvtoolnix} + find "${pkgdir}" -name mkvtoolnix-gui* -delete + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_mkvtoolnix-gui() { + depends=('cmark' 'hicolor-icon-theme' 'mkvtoolnix-cli' 'qt-base' 'qt-multimedia') + + cd ${pkgbase}-${pkgver} + rake DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/share/locale + for t in mkv{extract,info,merge,propedit}; do + find "${pkgdir}" -name $t* -delete + done + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mlmmj/PKGBUILD b/mlmmj/PKGBUILD new file mode 100644 index 0000000..6d44f2f --- /dev/null +++ b/mlmmj/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=mlmmj +pkgver=1.5.0 +_pkgver=1_5_0 +pkgrel=1 +pkgdesc="Simple, free and libre mailing list manager" +arch=('i686' 'x86_64') +url='https://codeberg.org/mlmmj/mlmmj' +license=('Expat') +depends=('bash' 'glibc' 'smtp-server') +optdepends=('perl: for running contributed scripts' + 'python: for running contributed scripts') +source=("https://codeberg.org/mlmmj/mlmmj/releases/download/RELEASE_$_pkgver/$pkgname-$pkgver.tar.xz") +sha512sums=('8084854bfebbff22b57e5cdcb31371500397694b3179f27efe46e80f2322b9bedd7e22975fa0886a16e9fd1a306d699b643236648c8ede762d5bd971fae3852d') + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --disable-tests + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 ChangeLog FAQ README.* TODO TUNABLES.md UPGRADE -t "$pkgdir/usr/share/doc/$pkgname" + cp -fa contrib "$pkgdir/usr/share/doc/$pkgname/" + + # remove unwanted data + rm -rf "$pkgdir/usr/share/doc/$pkgname/contrib/web/"php-{admin,moderation,user} + + install -Dm644 COPYING LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mm-common/PKGBUILD b/mm-common/PKGBUILD new file mode 100644 index 0000000..48be6e8 --- /dev/null +++ b/mm-common/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=mm-common +pkgver=1.0.2 +pkgrel=1 +pkgdesc="Common build files of the C++ bindings" +url="https://www.gtkmm.org/" +arch=(any) +depends=(graphviz doxygen perl-xml-parser) +makedepends=(libsigc++ meson) +license=(GPL-2) +source=(https://download.gnome.org/sources/mm-common/${pkgver:0:3}/$pkgname-$pkgver.tar.xz) +sha512sums=('106f3aae8bb836386148098037c52fef19c3779f5e8cfbafcbe52eca17340a6e2fb7e5c57154cc0a90b75c0bb23900a4274591a71d85f81391be780c53238de0') + +build() { + hyperbola-meson $pkgname-$pkgver build + ninja -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} + +# vim:set ts=2 sw=2 et: diff --git a/mmv/PKGBUILD b/mmv/PKGBUILD new file mode 100644 index 0000000..076d6da --- /dev/null +++ b/mmv/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=mmv +pkgver=1.01b +_debver=$pkgver +_debrel=19 +pkgrel=2 +pkgdesc="Move/Copy/Append/Link multiple files" +license=('GPL-2') +makedepends=('quilt') +arch=('i686' 'x86_64') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/m/mmv/mmv_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mmv/mmv_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('4bf4e096b930bdde225ba5de761e968af3aed33dc13194b1a1a79078cd27e158b04aae131b5167cf5f844e35355d67359443cd598db22da15a5af06752438917' + '86fb93180a8645a40f45d0b9331693f6a86fbe1a378857350c9573e45261e008ab2154836df09a4f569bc35b6601d0317a0f1f1a901530e26e391c3a25c666f5') + +prepare() { + mv "${pkgname}-${pkgver}.orig" "$pkgname-$pkgver" + cd "${srcdir}/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i -e "s/LDFLAGS.\s=-s -N/LDFLAGS =-s/g" Makefile + sed -i 's!/usr/man!/usr/share/man!' Makefile +} + +build() { + cd "${srcdir}/$pkgname-$pkgver" + make +} + +package(){ + cd "${srcdir}/$pkgname-$pkgver" + mkdir -p "${pkgdir}/usr/bin" + mkdir -p "${pkgdir}/usr/share/man/man1" + make DESTDIR="${pkgdir}" install + chmod 644 "${pkgdir}/usr/share/man/man1/mmv.1" + + cd "${pkgdir}/usr/bin" + ln -s mmv mcp + ln -s mmv mad + ln -s mmv mln + + cd "${pkgdir}/usr/share/man/man1/" + ln -s mmv.1 mcp.1 + ln -s mmv.1 mad.1 + ln -s mmv.1 mln.1 + + install -Dm644 "${srcdir}/$pkgname-$pkgver/debian/copyright" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/moc/PKGBUILD b/moc/PKGBUILD new file mode 100644 index 0000000..bc929a9 --- /dev/null +++ b/moc/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=moc +pkgver=2.6.0 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="An ncurses console audio player designed to be powerful and easy to use" +arch=('i686' 'x86_64') +url='https://moc.daper.net/' +license=('GPL-2') +depends=('libmad' 'libid3tag' 'jack' 'curl' 'libltdl' 'file' 'sndio' 'alsa-lib' 'jack' 'popt') +makedepends=('speex' 'ffmpeg' 'taglib' 'libmpcdec' 'wavpack' 'libmodplug' 'faad2' 'libsndio' 'quilt') +optdepends=('speex: for using the speex plugin' + 'ffmpeg: for using the ffmpeg plugin' + 'taglib: for using the musepack plugin' + 'libmpcdec: for using the musepack plugin' + 'wavpack: for using the wavpack plugin' + 'faad2: for using the aac plugin' + 'libmodplug: for using the modplug plugin') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/m/moc/moc_${pkgver}~svn-r3005.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/m/moc/moc_${_debver}~svn-r3005-${_debrel}.debian.tar.xz") +sha512sums=('97107410cad347e3ee747533aaad16300e906fbde033fa693a73a93e5042c4e7e42e35d0b914d1ed1a3e22576690d22abee66e0a82f703b224ba3402d1d020d2' + 'd2e01d7b3b65b0e3a4100dfcec3c8a810c4778ef90b767f096761394f98d4d4af922f7f7bafd109b23aed1f28912653678c7804ec42181ce0d6037c19b624ef9') + +prepare() { + mv "$pkgname-$pkgver~svn-r3005" "$pkgname-$pkgver" + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --without-rcc \ + --without-oss \ + --with-sndio \ + --with-alsa \ + --with-jack \ + --with-aac \ + --with-mp3 \ + --with-musepack \ + --with-vorbis \ + --with-flac \ + --with-wavpack \ + --with-sndfile \ + --with-modplug \ + --with-ffmpeg \ + --with-speex \ + --with-samplerate \ + --with-curl \ + --disable-cache \ + --disable-debug + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mocicon/LICENSE b/mocicon/LICENSE new file mode 100644 index 0000000..4cb9d54 --- /dev/null +++ b/mocicon/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) , +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/mocicon/PKGBUILD b/mocicon/PKGBUILD new file mode 100644 index 0000000..1a1b39c --- /dev/null +++ b/mocicon/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=mocicon +pkgver=0.1.4 +pkgrel=2 +pkgdesc="GTK2+ panel applet that lets you control MOC (Music On Console)" +url='https://mocicon.sourceforge.net' +license=('Simplified-BSD') +arch=('i686' 'x86_64') +depends=('moc' 'gtk2') +source=("https://downloads.sourceforge.net/sourceforge/mocicon/mocicon-${pkgver}.tar.bz2" + "LICENSE") +sha512sums=('61beb8652076d1d11221291e12a3b1b4444f04b090509ac23cf0d27d3f648593d08751ef485ef1013f59c9527a7f169e903bd07b45002aaffa29370417cbb618' + 'e485bbbd6005d7aab810220a9267759f4fb899294b31fabc203a438bd0204ac13697e4ab66bee7fc64367832c97fc86e661e5b40dea6bbf9120ff3ec89f1b50a') + +build() { + cd ${srcdir}/${pkgname}-${pkgver} + make +} + +package() { + cd ${srcdir}/${pkgname}-${pkgver} + make PREFIX=/usr DESTDIR=${pkgdir} install + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/monit/PKGBUILD b/monit/PKGBUILD new file mode 100644 index 0000000..bbb4adf --- /dev/null +++ b/monit/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Jesus E. + +pkgname=monit +pkgver=5.32.0 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Utility for managing and monitoring processes, files, directories and devices on a UNIX system" +arch=('i686' 'x86_64') +url='https://mmonit.com/monit/' +license=('custom:AGPL-3+OpenSSL-Linking-Exception') +depends=('libressl') +makedepends=('quilt') +backup=('etc/monit/monitrc') +source=("https://mmonit.com/$pkgname/dist/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/monit/monit_${_debver}-${_debrel}~bpo11+1.debian.tar.xz" + "fix-invalid-use-of-vfork.patch" + "fix-monitrc.patch" + "fix-webinterface.patch" + "$pkgname.initd" + "$pkgname.run") +sha512sums=('dcb56bee23c5fef4abe08a2b1633e58b60c8863b335d651d26e87f5306b4f98bd4887d2bf6311c2fc11c9b99eb853226d836b9d212ab65c0f150872c7297e005' + '83b2fbb0b3b741454fdadd02c1eb6ff162e7a1c1c989dfb6316bcfe33f55b43d58570617f542bed329dd32936271098fabfaa7411e4306814f04a875d7acf4b5' + '549fda6dc92c2630152a29f5bb94d29a59abb06300e55eb93ed729758d73ed7dceaa2e9f491c9d33419920aef24c0360f865753be28af13a11216129529611ae' + '89ea3b9405f9cbd1f6b28e2d97bc187ad32c8a8cd16d13ccfa6ecb3700272c936c5289bcba08e2b88035fe621c2b30e94cf8dfff1af94b13f8dbdf944790760f' + 'e6537bb48b8ec2e52203727c7483a020c1940ee649ac5a187914da1b72c174b01b8751565f22dbc47fe8f4c068d4c795d14af3056f1e7ff221a460d4cb33a9bd' + 'cd44fad84f65071e9f5f1d40c0169bae6fbe245aa106bbfe519f200971e2e7e2b868046ad2e603024d3ed264e45e98d93172f58c390aed883a729984458eb898' + '5086acb1d1171540941219da87af2cd6072281111cddc4077b4ba1a33ee83e0e161adb9b1cc426257ab647fa32580da26b41a3e33eface8e93415410031156aa') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/010_monitrc.patch || true + rm -v debian/patches/020_enable-hurd.patch || true + + quilt push -av + fi + patch -Np1 -i ${srcdir}/fix-invalid-use-of-vfork.patch + patch -Np1 -i ${srcdir}/fix-monitrc.patch + patch -Np1 -i ${srcdir}/fix-webinterface.patch +} + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --without-pam + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + + # initial configuration and data + install -Dm700 monitrc "${pkgdir}"/etc/$pkgname/monitrc + install -d "${pkgdir}"/var/lib/$pkgname + + # services + install -Dm755 "${srcdir}"/$pkgname.initd "${pkgdir}"/etc/init.d/$pkgname + install -Dm755 "${srcdir}"/$pkgname.run "${pkgdir}"/etc/sv/$pkgname/run + + # license + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/monit/fix-invalid-use-of-vfork.patch b/monit/fix-invalid-use-of-vfork.patch new file mode 100644 index 0000000..b5c26a2 --- /dev/null +++ b/monit/fix-invalid-use-of-vfork.patch @@ -0,0 +1,15 @@ +Upstream report: https://bitbucket.org/tildeslash/monit/issues/867/invalid-use-of-vfork-in-command_execute + +diff --git a/libmonit/src/system/Command.c b/libmonit/src/system/Command.c +index a17fde4..2c75fe4 100644 +--- a/libmonit/src/system/Command.c ++++ b/libmonit/src/system/Command.c +@@ -497,7 +497,7 @@ Process_T Command_execute(T C) { + Process_T P = _Process_new(); + int descriptors = System_getDescriptorsGuarded(); + _createPipes(P); +- if ((P->pid = vfork()) < 0) { ++ if ((P->pid = fork()) < 0) { + ERROR("Command: fork failed -- %s\n", System_getLastError()); + Process_free(&P); + return NULL; diff --git a/monit/fix-monitrc.patch b/monit/fix-monitrc.patch new file mode 100644 index 0000000..1c35dcb --- /dev/null +++ b/monit/fix-monitrc.patch @@ -0,0 +1,88 @@ +--- a/monitrc 2022-03-23 18:43:07.000000000 +0100 ++++ b/monitrc 2024-03-26 16:17:32.926620113 +0100 +@@ -16,7 +16,7 @@ + ## + ## Start Monit in the background (run as a daemon): + # +-set daemon 30 # check services at 30 seconds intervals ++set daemon 120 # check services at 120 seconds intervals + # with start delay 240 # optional: delay the first check by 4-minutes (by + # # default Monit check immediately after Monit start) + # +@@ -24,7 +24,7 @@ + ## Set syslog logging. If you want to log to a standalone log file instead, + ## specify the full path to the log file + # +-set log syslog ++set log /var/log/monit.log + + # + # +@@ -37,7 +37,7 @@ + ## Monit instance. The id is generated and stored on first Monit start. By + ## default the file is placed in $HOME/.monit.id. + # +-# set idfile /var/.monit.id ++set idfile /var/lib/monit/id + # + ## Set the location of the Monit state file which saves monitoring states + ## on each cycle. By default the file is placed in $HOME/.monit.state. If +@@ -45,7 +45,7 @@ + ## the monitoring state across reboots. If it is on temporary filesystem, the + ## state will be lost on reboot which may be convenient in some situations. + # +-# set statefile /var/.monit.state ++set statefile /var/lib/monit/state + # + # + +@@ -89,25 +89,9 @@ + ## by using the SLOTS option (if omitted, the queue is limited by space + ## available in the back end filesystem). + # +-# set eventqueue +-# basedir /var/monit # set the base directory where events will be stored +-# slots 100 # optionally limit the queue size +-# +-# +-## Send status and events to M/Monit (for more information about M/Monit +-## see https://mmonit.com/). By default Monit registers credentials with +-## M/Monit so M/Monit can smoothly communicate back to Monit and you don't +-## have to register Monit credentials manually in M/Monit. It is possible to +-## disable credential registration using the commented out option below. +-## Though, if safety is a concern we recommend instead using https when +-## communicating with M/Monit and send credentials encrypted. The password +-## should be URL encoded if it contains URL-significant characters like +-## ":", "?", "@". Default timeout is 5 seconds, you can customize it by +-## adding the timeout option. +-# +-# set mmonit http://monit:monit@192.168.1.10:8080/collector +-# # with timeout 30 seconds # Default timeout is 5 seconds +-# # and register without credentials # Don't register credentials ++ set eventqueue ++ basedir /var/lib/monit/events # set the base directory where events will be stored ++ slots 100 # optionally limit the queue size + # + # + ## Monit by default uses the following format for alerts if the mail-format +@@ -154,13 +138,13 @@ + ## commands to a running Monit daemon. See the Monit Wiki if you want to + ## enable SSL for the HTTP interface. + # +-set httpd port 2812 and +- use address localhost # only accept connection from localhost (drop if you use M/Monit) +- allow localhost # allow localhost to connect to the server and +- allow admin:monit # require user 'admin' with password 'monit' +- #with ssl { # enable SSL/TLS and set path to server certificate +- # pemfile: /etc/ssl/certs/monit.pem +- #} ++#set httpd port 2812 and ++# use address localhost # only accept connection from localhost ++# allow localhost # allow localhost to connect to the server and ++# allow admin:monit # require user 'admin' with password 'monit' ++# #with ssl { # enable SSL/TLS and set path to server certificate ++# # pemfile: /etc/ssl/certs/monit.pem ++# #} + # + ## Monit can perform act differently regarding services previous state when + ## going back in duty. By default, Monit will 'start' all services. Monit can diff --git a/monit/fix-webinterface.patch b/monit/fix-webinterface.patch new file mode 100644 index 0000000..2b18121 --- /dev/null +++ b/monit/fix-webinterface.patch @@ -0,0 +1,37 @@ +--- a/src/http/cervlet.c 2022-03-23 18:43:07.000000000 +0100 ++++ b/src/http/cervlet.c 2024-03-26 16:12:22.978986766 +0100 +@@ -833,7 +833,7 @@ + ""\ + " "\ + " "\ +- " "\ ++ " "\ + " "\ + " "\ + ""\ +@@ -847,11 +847,7 @@ + StringBuffer_append(res->outputbuffer, + "
" + ""); + } + +@@ -891,12 +887,6 @@ + "

" + "monit " VERSION "

"); + StringBuffer_append(res->outputbuffer, +- ""); +- StringBuffer_append(res->outputbuffer, "
"); +- StringBuffer_append(res->outputbuffer, + "

This program is free software; you can redistribute it and/or " + "modify it under the terms of the GNU Affero General Public License version 3

" + "

This program is distributed in the hope that it will be useful, but " diff --git a/monit/monit.initd b/monit/monit.initd new file mode 100644 index 0000000..b94ada6 --- /dev/null +++ b/monit/monit.initd @@ -0,0 +1,35 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 or later + +name="monit" +description="Monit service supervisor" + +: ${monit_config:=${CONF:-/etc/monit/monitrc}} + +command="/usr/bin/monit" +command_args="-c ${monit_config}" +pidfile="/run/${RC_SVCNAME}.pid" + +extra_commands="configtest" +extra_started_commands="reload" + +depend() { + use net +} + +configtest() { + /usr/bin/monit -t -c "${monit_config}" 1>/dev/null 2>&1 + ret=$? + if [ $ret -ne 0 ]; then + eerror "${RC_SVCNAME} has detected an error in your setup:" + /usr/bin/monit -t "${monit_config}" + fi + return $ret +} + +reload() { + ebegin "Reloading monit" + $command -c "${monit_config}" reload >/dev/null 2>&1 + eend $? +} diff --git a/monit/monit.run b/monit/monit.run new file mode 100644 index 0000000..f80af51 --- /dev/null +++ b/monit/monit.run @@ -0,0 +1,5 @@ +#!/bin/sh +if [ -f /etc/monit/monitrc ]; then + CONF="-c /etc/monit/monitrc" +fi +exec monit -I ${CONF} 2>&1 diff --git a/monit/monitrc.patch b/monit/monitrc.patch new file mode 100644 index 0000000..5875605 --- /dev/null +++ b/monit/monitrc.patch @@ -0,0 +1,9 @@ +--- a/monitrc 2022-11-05 02:30:22.067568680 +0100 ++++ b/monitrc 2022-11-05 02:31:25.537959598 +0100 +@@ -310,6 +310,4 @@ + ## directories. + # + # include /etc/monit.d/* +-include /etc/monit/conf.d/* +-include /etc/monit/conf-enabled/* + # diff --git a/moreutils/PKGBUILD b/moreutils/PKGBUILD new file mode 100644 index 0000000..14aa7fc --- /dev/null +++ b/moreutils/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=moreutils +pkgver=0.65 +pkgrel=1 +pkgdesc="A growing collection of the unix tools that nobody thought to write thirty years ago" +arch=('i686' 'x86_64') +url='https://joeyh.name/code/moreutils/' +license=('GPL-2') +depends=('perl' 'perl-ipc-run' 'perl-timedate' 'perl-time-duration') +makedepends=('docbook2x' 'docbook-xml' 'perl-xml-sax') +options=('!emptydirs' 'zipman') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/m/moreutils/moreutils_${pkgver}.orig.tar.xz") +sha512sums=('0a0b0d828671c45b9e62c045fac19ad2660b2469d0b7a4e203bd2567b0ec89e54d82d9a93a759fa4f8550eb72912fd12ef351bd5ea584b0a4c8f1c9cbc02ee9d') + +build() { + cd $pkgname-$pkgver + make DOCBOOK2XMAN=db2x_docbook2man +} + +package() { + cd $pkgname-$pkgver + make PREFIX="$pkgdir"/usr install + chmod 0644 "$pkgdir"/usr/share/man/man1/* + mv "$pkgdir"/usr/share/man/man1/ts.1 "$pkgdir"/usr/share/man/man1/ts.1moreutils + mv "$pkgdir"/usr/share/man/man1/parallel.1 "$pkgdir"/usr/share/man/man1/parallel-moreutils.1 + mv "$pkgdir"/usr/bin/parallel "$pkgdir"/usr/bin/parallel-moreutils + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mp3gain/PKGBUILD b/mp3gain/PKGBUILD new file mode 100644 index 0000000..c2a5372 --- /dev/null +++ b/mp3gain/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=mp3gain +pkgver=1.6.2 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Free and libre, lossless mp3 normalizer with statistical analysis" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/mp3gain/' +license=('LGPL-2.1') +depends=('mpg123') +makedepends=('quilt') +source=("https://deb.debian.org/debian/pool/main/m/mp3gain/${pkgname}_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mp3gain/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('2afec934d6edb97528c30313231833c5e9d397ee47e81abe8ba068439d883d3ef052a6cfffd7ed6cc212acf4be3463f486212709a15c41b389c05a415d4cd9c3' + 'db45e1c6b48a7ba3132ad3f669a9ba6b24e1bd189c4823b4a3a1cff1f00483cada7fcfbde150a7afd1d6bbf3e2dfa6f2a0d43012076214cf573bddc88e1fa6e4') +noextract=("${pkgname}_${pkgver}.orig.tar.gz") + +prepare() { + mkdir -p "${pkgname}-${pkgver}" + tar -xzf "${pkgname}_${pkgver}.orig.tar.gz" \ + -C "${srcdir}/${pkgname}-${pkgver}/" + + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + make OSTYPE=linux +} + +package() { + cd $pkgname-$pkgver + install -d "$pkgdir"/usr/bin + make OSTYPE=linux INSTALL_PATH="$pkgdir"/usr/bin install + install -Dm644 lgpl.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} + diff --git a/mp3info/PKGBUILD b/mp3info/PKGBUILD new file mode 100644 index 0000000..8812e48 --- /dev/null +++ b/mp3info/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=mp3info +pkgver=0.8.5a +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="An MP3 technical info viewer and ID3 1.x tag editor" +arch=('i686' 'x86_64') +url='https://ibiblio.org/mp3info/' +license=('GPL-2') +depends=('ncurses' 'gtk2') +makedepends=('quilt') +source=("https://ibiblio.org/pub/linux/apps/sound/mp3-utils/${pkgname}/${pkgname}-${pkgver}.tgz" + "https://deb.debian.org/debian/pool/main/m/mp3info/mp3info_${_debver}-${_debrel}.debian.tar.xz" + "gmp3info.desktop" + "gmp3info.png") +sha512sums=('30e0ef62deaa090fc115317f6c372f408077dfceed7e05faa6744b8516291e38d21f1742732f6532585f0c3d8c705d8c7026c2bed84c97e1f497d433637affd2' + '6a153c9bf208570f6009d96f7302ac514626bb94b5ae42948377ff74725a9d23e5ded32d4549550e920ad80b76065888138aee02e094f91d9011418d41dfc3af' + 'dc2b5c451f23b3c28c82146aed53f676e0cd84825f798cf4d45e7a04ab67380e760a41fa023519129ed8adc5937bc7c3a3b86700966b596886cc727c5219d785' + '2b12c605d6de45d5edff1c9a388752e53a9a7231fc09a78ecf30c34353f9f66ecb9bc5dbf1992966ded5e65b74f4922d29fffdb6fa004627622d2261b14cb12a') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i "s:-O2:${CFLAGS}:" Makefile +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + install -d "$pkgdir"/usr/bin "$pkgdir"/usr/share/man/man1 + make prefix="$pkgdir"/usr mandir="$pkgdir"/usr/share/man/man1 install + install -Dm644 "$srcdir"/gmp3info.desktop -t "$pkgdir"/usr/share/applications + install -Dm644 "$srcdir"/gmp3info.png -t "$pkgdir"/usr/share/pixmaps + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/mp3info/gmp3info.desktop b/mp3info/gmp3info.desktop new file mode 100644 index 0000000..a66af72 --- /dev/null +++ b/mp3info/gmp3info.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=MP3info +Comment=Utility for MP3 information and tag modification +Exec=gmp3info %f +Icon=gmp3info +Terminal=false +Type=Application +Categories=Audio;AudioVideo;AudioVideoEditing; +MimeType=audio/mpeg; diff --git a/mp3info/gmp3info.png b/mp3info/gmp3info.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cc7a6bbd8abc5adc9b0bc5032f2e3d6f8f2e29 GIT binary patch literal 14095 zcmeHubx>T-()QvWf(3VXcXyZI3A(@ni@UoMEVxS`xCRaGPJrO-}}$4 z`riNUsXcpUrhA_5ex_$?PgQTYijp)6A|4_D06>wIkx+eoiu}Iep@4128B=kr?~q+1{_-)hjm`gChzR1 z*RIF#S8wC)z~1X(hm*V)XOo@}c*y>b6otEsWh18_@4RY!d7sl&y_)(_;C!%5@4cSg zmikts+hIARdsefK`gaH031WutR+BHE8*Ug(Po1@9#l*hu*A?BUj&d^{g)L<-qWiMH zkgZD=ic&+x0ZE8g4#!`?N)eX>_v~y@7W2aC++dRVxN|6U`Cmf4uJ+Msz$}ZzBCnv)~Bay1Y;OamfiF z+nA3X)Q*A8GV!h*6q;|eVsv2GD`Zva1nWw}a7l5e<|D08Cj|DNS)C02(ml*=4((*X zM6)l5v?#INqXSsYDZhcixA@ur)>whHAKlVwu<)~y94)oK!LU#$f#VQwvaTb2TM)WD zT_dKN1$bHmm8UPwq9T800T0zWa_M`sy{P4~^Qw4^;PsMxWh=^vSrD2uo;xP{f%&AO zaA$a`X%=W^K1nZS0+GI=_JXdoqMo(x*mcgnFw=G3xglnztkL3W^R&H^^I;~9KW!rT zE|1gZ$DLphR))kra#W+?Pq!pk7IW%M!QPOyNcGnzR?6j1)?u1$1^TEjomFKKi#|>_ z`Hcowree3!9*(v@aEnjczwnYzKS?_J9vs7!D@vxHyE$@Da3`n`w>#H1PUzZ>Io!~b z+zR`o`Fi^!d0Ex6go#=9&ADMt;xgSextcdO3s|lUPc>N{3!1UaC(XO2^Y(!HSKuve zzm)p)y}Q96zahDse;9Sn*FF5i_rQ?XysIzN=jT*oP{c5GoNGWElo&cJnLH!#t<%9K zy)lYS9Cc{`iZIWmMs?xwg5{dcVby!*#B1}*d^D%&G6+<;sAc(MCyfnqW!X}WHE*Z) z(TmgbYTp7mKRNgVOY)a^`eZEY44W$uziPGT^hn;XD_8BT0XALh!Rfc@jYj491p8b+ zV_x0xw}{i@+7-7&?dWU@}MJT@K)f|yK~8qtTQ4ZN8++-*3N5z z+BhpZ#DAsW0IEGWaJ@j=gB-fql+r~IW+mZsaLSU9y_@UEIP}9MnZRFhJeP(9Z8}l! zQ>a}saX^VYNs8+GcJsB9ZT6fo;*B@P*CiCwjB%H7>+{GQe+!!55sn|oj^KJpm3Y>zzZ;{t zC=?m-rHXB~g4~5X8s#lo{q`ZiDQk&p9RDd5i})>Bz$1?cGsdrPDO=&xJ%w4L$IB4! z2B}(nT^h9d!AUhXg)H@-JevM(E4myC%C!2TV~mg5Q=#feAwS&SU5fPRsbk~8e#gC*f2BlLB$P%S{n(8{Arh5 z$Wj@R4W~t-K=1@fM~mvAW6BU6z{JS=N6-28VKCC1ivRl7noA5MFBnA@&0~iu)Ts9z z4gsrKx>_CVxIN?5f^L!rV^FzfSg64e$2eLF>Q?q1pQSjXOi`g8BZ+jFE$hQz-A-YI z8gVDuV>th5DTYa(G2fP^pB>Z_LQom0!RGQ0g@ESm0@x1ZBkyApTr-g(x?#WDc(tEA zxDJ^2Bz(gu$1%I(vM;-gfiSpuxbD1Zc8_s`3*zsj{Dx(Oqu)1CAU;H`ea!xRX7?#< znzk2h8bJ8H0N2PkUNRyh(hBu_1RO~+hH|^#Gi^bMxrif`Ol8jv$tlo`vAN;l)?`c7 zftMtMQtKm<^6M;=@GcD+U)(<7Q1-MJo7!|wcDsQDD&#CkFIA{Ll}I{KbEP}@`ZMmp zSTJ!88ZM$$ph-|=e4_jMJN?q4R{rSv#JKo~HND7z`1aie1v+3t4EOl=g~(5H2`e7Is1>66H(0OO!3+9xq2kPCM^;b{8<0!YOt6@xi?FN-q>f)|trXX*;lWpmtS!Tpd@Lj9Dn2pgbb zkf)@0!9Y__sOw3R0^J@pAcT73zV_I^@k1$Ey89s~&}YkWXWRO{WxM>U#Gn+coXarnyW$e^kC_TfCLHZ?X!$bfl96c)3_m0< z)Sy!s{Nt{u0TI?S7RsL~Zytk)v+88DZjtsO>7ljV78JA2$UO5d4fS$h31E3xvH4~2 ztBE+)=%OWeH^TAqv~*S6?-x0Rvt%h?6AhVVi{9;U_yKkl#&I{9-ylNpk|vN8dRQeS zB4;#JY?$&cB#Sa#!8xZ;(|vW>iOl`VNVxUc^sa$KVrF(@ovMJ&ou2zHNDwW8x9Vij z*SJU@3#{Ebzh2PlvTQ}P7;(Z7;e|N3<(M?pbgQiWLfOF{+Vl8BV0vn7yMxKnMOz-891>}bH^4zgtw!eE zo=*4XauvHSpGgL~L%F>AY1yxs-i;<<)%0Yilk1&kr<`W)*~bPGDAMsnGpdn2_7O|I zF-M}aw9U-O>bM)HmDP4Cr&E?w9sMD`Nm1jpaWg(>;H`5* zjL+U0RClDl8cL51jlE)L$7YNtJ#7j+h&`Kd=45RTsv_$rq`5{sLHc1;IgBFVd^ut` zV|zD58A>o5=K{BfY%{K^G|aY65pSc?u_ZO#d@{6EHb#oArZ2Y{loGMvb69eBTn_Da z0G@l9G-Y0UJ9u|NOsO5`qUbm&u4L!}ZC7gAgBzn4-sLhaT^Sog1BFdSTIu=L0^Fv1 zZBtuc%A2ZgdOnIY(`u1Ws>T{2U`h5`53%@u$1i$wgyA5gKcMbMvzLm};RwypX{7}4 zxg=vkt1&RNaYIpn%Th%aNs^s{6gx69TB_DAF?hP?sactHLHkIgx=33qLZPK4h!c!e zohFd$PNFvs2Y8_IM4=%_{-ozlJyd%p=LfwPk+nVV6_-$1wz);%gG1vlC`PXtfT6<^ zbcOUmnUO(B_hnE6_tTC)eI+KuvAzl)X~*ZGFWkM0PBKwOhk24RlVW<{CkW+6PF6_$_JDvF3b=VhctHdbtbz%MoMK20kO6kH6z0 zL~l1gzj3b~7l+=A=@va4FpQU}maD+cN=Mnz`o^_zxF1<->?z}9rL{hI`C)gy_KC(c&Xh%0G4@bA1#T=Pq`c& zNhJ~YWd?^q|H(mU=#+1jKEds0YF&6%if2sKms=n&3i~kRG89xXiEB6yiL@aUZ^dvw z4dCHCxhQ_#k#}iXEGS=thie2_tvSuiHaH^&H6)cnFTAkO(}bX`;L4*xNd|^Cszk&r zEAD92*d?-N3N(uIPVg=6!O#4aEk{KglE(I(K+0>MvQd0C2TiXou}N3`JI^Q9?YXjx znb@_+V)&1fa*>)jYbM*b3o)EqJ~z#FUC7F;mvIB|g)jRT;b#>{r!h#gG?2WcpMk?} z(buIr!g5bWpS!F9SeK5>d@@AM-}1RnJ-tg~WG>o}{j}jD8LB6-`T1gvL!Bv9%YE$w z6ha<$$e+Yxc1X4NN6bB}t1@C&rgo@2&C1v()@5ES%4RbnPYoPDrSwcS^(w1(sCozK zimnA?{(P{EoU`a&ku6gS=+pkm5!X;;B&oTKekk`f7fwL=C>hir#LT-ImPSW|iOej2 zpe%E|i~EE@D;o2{ugd26?7Cy}wdtiVV}!G?k{5)X>>GU|aCeind6vg`OzSW2cAb)q z>=`bjQHhy*GEDWpo31%W1Bu>W;_@47|G1Aq6 z1$WhHc<2z&F@_6_Cj#n4+R}-~$%nR`O4TmQO8~=au7KD~w``qRp;ua|N4cUb;&UQY zIAseyPvBwU0Q$*e9|_n%QdUt|p(R+SBMX@y)gKg~n8^F$JbCp4b}w(p_9aH#6 zx+eYAO0*hpNufi6vUi2pK?$4|)Jz%5{;?=bP8I`D9gUH)3s8I5TyB~o%n+||V=s}; zYMB18r&;__7_{>i)}*2HuICY8+4$)Iv5?1wt7ej|-+qm7FY-_?aQ*)Ft;`zZgpu7^ z4cU--_nh((t6xDgzJj4Z19JU~Dr{*Xq_oh*irmo_#DbjeJUxD&GrhZT5du}@b~~0s zn=iHV(v}k)3Fh|7I@*o(HO{tL$4}gV35J_3od!hZnCJ6syy@8ncT=qZs->Wg>+=T8 zsS~0Y&yq%bWx3C`0;ET!KKd--kAwIIt4xM_^}?rYKl_E0P;mA$;GK#3yVc+O+}}u6 z#QSJ!q?Tu#!NLWj-r!U!()i9tCsMJ<-Ug+>#JOQ1EzMsDHp}{b%Ye2Nbf?hA7g;w; zt*{9&=JLB@O-D8<>k-vKh5lYs>@dW3x1&mI{b8mj3Z96+>6Xo)Xr=CPQHd3XfsAhg zw#g72)BoJiaPoj?C#n&AhW-~!1M%g1 zkH8mTge!I-twj4MjuMt8>*JW(Lxj{Zv)YXPCAJ2tbrs2YNh`c;YaarPq{n_@(6#MF zL~mNKrC_e*LiNEzKG^r#k>fa~V3p$-dcU4-1QlQj-L zF3^b;nX5R++?ncpBSowsbxi^gSs=OZ1M;76w%D#m#7jw{YA?3YvxQCGiK{}KT-v$s zHKcWi`S+U@3PuqUF8O~}aTd#fntzy#Hcau#6q`RuM~rckaJSX!u{Nuwi#zS+mJ^7$3nDN)mJ)Fz5Qn zYVq{G_U8#K>-mwt$?TY>8M@hpkpY_A=kb7GN8^Zo&KAMx6D`HTo{R~eA5wk_PY^5b zrxc(y;paR(OG_M~37Gq7Chx#;^qS-_LWg!GJ=ZpVv1YYjJAlEjFjOYui8Q2Q8QwlSBHj|$5Q zJMOPr4*n7tZh2Qv&><3VzIiV^{DK|NCN12qL{}omnHlK|;bw6hGO)x%>+sgZji^Y_ zYIg-cdk2J9g_ig>4=1q!YMw@&id0^$G~KP^)9w9yi0DOOjmV-MpIUr|w4mr={_Q+*;E zS5eg}&m*AQYID|JoVzl20N!gh{9%W*Wecf0OK1g4Wg6ZoimevZ8Js*D=EFM1ZmGjs-Ey<-BAV09`$;2Z?dX`nC^iZv2<_p)J0x!n#@G_c81B9 zzKO5vF*{oCQFqo?d3VwA#*D3f>}L>llIl+3;##e6bjd-BaK_UXL}5sRFFuaf}7%eg;z>cBBH%8fk7+lHGyg5P|*lEO2s zo~ZDW?>Jxx5QENdGtov|ARbUS(5bZ<74OeRN;fmR=qiBVPPD(&(=Auv-GEcoI_JT+ zGi|*Nusw%99?3LO9hOobgj6Xp%NE4yCCdNkmtu~CjkImEBkM7*O2)ZtMs1s!R-jfN#Kwk|J z!g1};Yk+{MuEb1BaB6I7DZWh9Gws*ONiTFFavfpCibW5Nl(PHUAQ_O~fc67elnT(Y zSnoqAsQ0a|H1tV%NaEx2AV=sG?({t*%;Y<*aV{kDH_Q`0UX>-;-!0=73ZE8^TKk=^ zwo6jf_EBZAXT~)jfm(NmpYQ6QjzWGA^*vlyt-?MD1=?cpjIjv|A0aOx;F&j;91^D8 zABeSi&dIK?$v&7e>#$Gg`)Cq$`Kv3GRw0aRd( zx}3yZmp1r033ATC{@wA^NONV91Vl?p;IR1l<<|}*rGfy>BTd*tRA1F*cZQ$J$E=u~ zPrarpDyo+;E(D2cw%qsgDk{W0or3i`P0}Ib|h4kerF z0ptvNlx{=~iK|7K)vRc(QYzzbAqu2p^elmRgJ_luUU+#6sE~l{Gm~hF2;qjHF$$zN--cjkpr7=V1 z@3o~|@Ns&wZm|?wS6@=dCVgE5_-xbd&0-Mz{jE)EupP&uO0iMey9rCnwf8T@_1K@# zH_t4hRS(xg*RPon_X^sd-jfUU3`@0bh3r3FxgNBpQxhS(KTGDBO)N?+NC`SJXoAMk zff?$QzZE5_pD!hD<+Lom0dn|vx>B#*=OTD<3&8zn6$ zh3%hgyAd3)wuR{#wtrZL|Go$?X~>Qq-?sCpEr?6KXPjJ~751kx9SB!#FMgL-OeKC! z2hR&#l)c828mB5!hZw!c?U0V#$;m)$Sv8@p*`JJfn7bn{2o(;OJ-W9{aL^!m>hwhk zhqv*TA}}&1t(3@Rt7<|f?%d)lo<&5a;;Cx!YP=)R!>qAABdN&MQ_o6P&$wU8ALP9M z6i2ghINg^oa=%yiWm0xlfTDSO5(3YbyXx%$T4=`em9u?7zhZ%W+i<|+pd>v4U@mVI zwRW{+JTHUEA>eYP5Xq*mP(jUMe8uJL?H8YVyM&(^7s}!pO0-M*Gsyvy!%@zI+$=9?uTaW73ZQ`EcLz<-#+n$4l}NbJ`8oviBGHTcomG=U*=umM*!kgqVWSf8%1f<1(S>e**3ZhAvYcF4n`zxnb4@qZZ?J|z8k9IEn_ zw;zdakc0lDJCwU$nX|mRm5A`-CUCCZ8urX-d+ELL&4n}m`oUvR*Jvf!a6E};AX(^& zO{OW)cu_x%O*m653x(K%1;$?q{jE!9)?Q3yq$kB)M8OZ8XRcjqc9LB~0ISaK&&BOHL>n@$nH2Z0f@=OKlCB}WB+NY!(q$N(Nnm53;%kqPA zaT&`=DRe0`4vT3d({eDq^p9_}eHABJ#V1xp&wi1`m4h)V!|sFC9pq7znC*dZ2Y!OO zex$0Vg&XZv<;9D%6ypQHmNJYMT5!v+3touJQ|PNI!oY0f_pFh!I(wVJ~LZD|T=gSba=fNPKbb=(X;D8HM9wxb0vF*M4oQ7MgG{}45+lig$f z7dG?DX35e$>4Kf~gKp!7!g;eyE!3G}Uf&^+_RhG}@i$b~(+xi4KIU?(yFRUg4-@aI zr-l5RdqZ?g(aHhvnp6Bflx6pw<&W-98oha6TUWi-_F4=vFoDPO*;6`RoGU0rg?os{ zVgqu(@df&WA(9-zGl7X#vwq_Ja?+KIuBotU^T3Nho$ka- zE}jy0@(9INK6WKb)^ma~%|U*Pbp6a2l?0)^?(qD{)BKQY$*U z8cf%908%*2da8u^-f_M4%GO1TJW?2|Udk__Q_rKfwX6kRvHh8sD0HzqvIB7|U=69A zgoAXokI@KlFi6`YasmNz{gfY&i1ZXN|MDMJoI5D z8zKD6a{ZV0LQ|)fW@*Su3pc#U>SSNW>AQ;Upq1DNr`IIBGY+nr+dRHZ-HZhMSgw*> zeCFD|8lILB$CQC@m94vW?zWkJa6WLW9-@6<-Eueh#%&uGtW~LbT#Iyc+T9)50i$5= zZjCX=pIq+Hud3b!HE`cDKtv`$xM`C)t0jaIn1&`{BB&#XIdZ+CYZJv5BLA+txc*4% zrC{Ye!ca+Fi-jv@wkhq1?CaiB@g>a59SXXIUFbzIEy?o+~j)5DuJ<4h>IhB^bC z6}dcz1Ag4LKd;ha@|khI5Z^|bPMn)N(f|MuL11xl6Zlif%Qp+bPBPYFGcsBlmjfIs!ISf8xTkwp#g_&rbnm?BYFna zGu`^32pSEsWKIN^YoqqytG3LfPglS2-aVxQ?bZT-ykCHBoTS<3O!#)WTq6bNCXNgt zXS3H{D8&DaX}pMc^yb?phmzkKyIp?6Vfue8#rcOh6M`BM_6DwcTqO2ml};>}Cfvwgfqm7=g^dHiBfQ z&Fy3)U=u+yElx!iMLThjIatQS0i@=kq;BkCY0PUvCM<*~;Kug~U=4BtlDJu0**NmK z36lN6<$G=a9%d#Z`J>`wDM+TRs6rxc>i{C*VB%n6VU%b<6~xab#-NOWoNQ=Fk@!r<>h5&VPj@vV|>+Mbac0I0=hBUIFkQ{_#1`< z$kEsVZ07{FwITV92{f{Gb`m5bdzF*?-9KwPMa6%>+c^Hk!Yd!lZa_O`Rwfo^Yis6z zo#E&t>GBHlmqY*S3`h0XY8hr#kfW`$gE2_b1!Uty{;v?yvWhDIK=>V!8Q9wHPf)Mq z{hKip9$$Z~}pxuNNZ+kcE|zgWZ^yk=F=l z!f0&7&TDGQ%frsXY5Xq`$`0VytOQ#9t5?6FOkSb5*jP+~?54bo>?}YKBZny$8zYeW z6_nG2o0FXl^a{(x_6O?sI`E0A$O@9NF|qt}M8yi|WNPbREl8#SwsCg*r$8NS4N`Lg z{w9r;i-(tshlhuqo124&n}z+KN}3=C$Jd1WjmgTw#K!SQVq(lE^@<35O&qW_&ZTW!4e>36;bOD+CG4wj`Zz5xJpp6;mb$|br zP=6l>|1XQh3Nqnl<25#Af{P^ z0EwEtM*14fYXbd=hJ@x1$F%>h?P?DCO&|*!J0lA>BP)+OD;FON3m-c-Jqz1wgN*sF zfSG^q>c2-U!2JJkBJfAyUygy-d4C&wJzic#w!=KeX@){a+*h z5x@VX>%VmUM-2Q&%Ky!-|I+mzG4LNL|2Mn-ztM&G&let$&Filq*VosXiWppO001&p zML}Ki^_55gZ2$7|($>+L`6VwWzo4eRp{KX6vbrWcJw30mI6Wu#dsB0BTU-CYU|RN< z!jdx9=tU~Sf!_XpO5JW~Xz03z@8wnBI=g$MWaWp3hf6D~O3EvXtLj)H7AW=l9-p4} zcXw&bM-GmUX)Q;oK||yk9dx#1%pr5I2*|K7FjaN+!y_Z3Q?o^76*sqcj1J?BE)z@v zGm-JhOg_^^Wo74=SE14IXTzG6d$@Ua0u8v zrqq&`nf#Uo;)j*8#>qd{vxKZ?=YEw=nCDJhVvXD~b8r*MT2n3AoSL1ZwV#wt9~TZ9 zxA6>U@9JWY-BBw(qH~@R_%y9wc?<&sLk;RSuRG>)9^+2hwW!+Q_M4UedZ2IP!W;F2 zKX^_ncUm%ZTDxpZAZ=gr%X&!vrR>)Y#exkOcqBouG4bqu`^FPkctnHBEsgADx3*IT zs{y~RGs(nJ`J^$fz{#?iOGdLMov(9V4O`QvkIGRC9N`o7tzAj!St1b&Uy3WDx)0+= zE;$`KVPRpVolE31)@s-95s^{$cD4;7+iAg*`d?R!iZ+5;ce6%L;o%W`cJH&Megy>u z3s~d`$4>}*_cnI)AmTC+tCrx)XYfR=izRHX&QC^!1tukYcJ~kU4UPJk_%kOn73uZD zAj07HR1O;~E6l~0PDJN*RMiFAe3>pB+DhnLa1BpjcI;I6Jmj5L+C6(1UOt0HqYxYw z7f{&7t>c48siYCzh{5OfhE~?w)0JF6eRk_SvTm5)z9_S@EB2(qe6w?!jOUb4=MRl2=bOAP3JE=`Qbf!{w4D9j({%j(H6w+{8icsx zd@aZ7rQh{KfB(}L(OTTn!hpUse}Dh9v@{4ee{4ADGosO4q*a>BVb?hzyW!j_Dl&#V zum1RyY}FSy`8~{uEaLq$JeE+^f|CgLSW+tTx08+ga{hCGJ?+uj_= zu5ryE6%R$1IZYnq&RGP90DT8m1w#)-lptXoNKxij>>A$dCFnSR5?nCH`4y9{=7vo{ zp+bT-5qJEAj!1E>UP=Q%=~lo*=uwSBE`lol>~A%@fte?i5UuJF3(wGHm;?3wvxTf7 z=``Z}fU&>o8yN48mA>s2dW$pFKZA^U1O}6rpOlupX?jPDH?SvK}&8IsBDb|LB=#djHlL0XOnr{$P7YtcsVCC{yRODjKVsm&bBm-p2 z2TeAhB&8r>*hta!$H#-9)kLa7VLq9nCOtH|ks$ z!NM$?Q!L0a5@TIUrhxsev+{=0PGB3frWN|M&jXCxx$7)M8`Z_ z^do82nn*3v=o0Z)b4z>qK$(0F$xHLq$pCC?)g%fD!yUwN2^k(RbcMG3L6^GxA*}Wd ztX$^jv?Hgo?np>VaUo(3O(=^}cZ*UWY2xUa)z-J1cUY>$ei#^2-6Cj6#S78_xheG6 zk4St^KRr8st_JUG&-o<5C1dTaVj~iBIW{iYo;#o6Uwj$P_tx)(j+IbL zC)!7{4#PxY??5vS{u=?K>d15a^>OU%$|UUU4RPUNf_Q?^nZ*irqGoikxmG6TT&XQE zvQ%amLQ#PTXPMzN6qE>Q1kP_&xc_;M7cW*B~?1`@BeFe3AxlaX|Z&~Lrg&b`pW z_%iS`dUo;g@GkDi&=Tb~ukiLTVxAqG?Y^3}yo-{<5-kGYAz5-4e81ou(51*hk+BPb z^#N?M7NP55oPS^O5elX4>-6C;=Xh5*J0c+rXZz&dxY>zk{ELqfk0>G-#y7iU&yN+% z!mnKjvu@Jr5-6y#js|j=I6A8?n;fjx5A}AiDc=xR;`3?7XT^%?pFFLwQ@D4w=6*&Y r$$DO2>o3i!d-Ke9yV>qV_5w$3{LH + +pkgname=mp3splt-gtk +pkgver=0.9.2 +pkgrel=1 +pkgdesc="Split mp3 and ogg files without decoding" +arch=('i686' 'x86_64') +url='http://mp3splt.sourceforge.net/' +license=('GPL-2') +depends=('desktop-file-utils' 'gtk' 'libmp3splt' 'gst-plugins-good' 'gst-plugins-ugly') +source=(https://downloads.sourceforge.net/sourceforge/mp3splt/$pkgname-$pkgver.tar.gz) +sha512sums=('e837cbc0759cd6535fc466099a170d066ab72b4854f8546f524261fe660887f5d2add60d9fa1e19d68d811004c682a324b5bcba86aa8cb89ae1ad2bc2f9b1d9d') + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --disable-gnome \ + --disable-mp3splttest \ + --disable-audacious + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mp3splt/PKGBUILD b/mp3splt/PKGBUILD new file mode 100644 index 0000000..a8fb2ee --- /dev/null +++ b/mp3splt/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=mp3splt +pkgver=2.6.2 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc="Commandline tool for splitting mp3 and ogg files without decoding" +license=('GPL-2') +url='http://mp3splt.sourceforge.net' +depends=('libmp3splt') +source=("https://downloads.sourceforge.net/sourceforge/mp3splt/$pkgname-$pkgver.tar.gz") +sha512sums=('c1cbdc905d4f19e8e20afeadf02a2967049d86e69613312c8855e03afc5b190a569ac63f970171384853961cbe6bf248fae47e5116c4fe9deb7a0787f299918b') + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --with-mp3splt-includes=/usr/include/libmp3splt \ + --enable-oggsplt_symlink + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mp3wrap/PKGBUILD b/mp3wrap/PKGBUILD new file mode 100644 index 0000000..7c3c03f --- /dev/null +++ b/mp3wrap/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=mp3wrap +pkgver=0.5 +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="Commandline tool for wrapping mp3 files" +arch=('i686' 'x86_64') +url="http://mp3wrap.sourceforge.net" +license=('LGPL-2') +depends=('glibc') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver-src.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mp3wrap/mp3wrap_$_debver-$_debrel.debian.tar.xz") +sha512sums=('2dc7a72a12b9245956000443a51cd5341e1d48795b629f6277f9dd26ac9b3ab2511a119478a10daa9516cb2526073956af42f83410aff1e4eae0c972fdd8b0f1' + 'a5f515492fb22ea21cfd822f1c4db1060619d83f97a81e640a7f102461267a8c0e8b18a9dc57c52446c2ccc76a764dcc2ef99c1dbabc4c3c7b714f047fee1d3b') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mpd/PKGBUILD b/mpd/PKGBUILD new file mode 100644 index 0000000..addd0ea --- /dev/null +++ b/mpd/PKGBUILD @@ -0,0 +1,118 @@ +# Maintainer: Jesus E. + +pkgname=mpd +pkgver=0.22.6 +pkgrel=6 +pkgdesc="Flexible, powerful, server-side application for playing music" +url='https://www.musicpd.org/' +license=('Simplified-BSD' 'GPL-2' 'ISC' 'LGPL-2.1') +arch=('i686' 'x86_64') +depends=('bzip2' 'gcc-libs' 'glibc' 'lame' 'libcdio' + 'libcdio-paranoia' 'libgcrypt' 'libmad' 'libmms' 'libmodplug' + 'libmpcdec' 'libnfs' 'libsidplayfp' 'libsoxr' 'openal' 'opus' + 'sqlite' 'wavpack' 'wildmidi' 'zlib' 'zziplib' 'sndio' 'alsa-utils') +makedepends=('libsndio' 'audiofile' 'boost' 'curl' 'expat' 'alsa-lib' + 'faad2' 'ffmpeg' 'flac' 'fluidsynth' 'icu' 'libao' 'libid3tag' + 'libmikmod' 'libmpdclient' 'libogg' 'libsamplerate' 'libsndfile' + 'libupnp' 'libvorbis' 'meson' 'mpg123' 'python-sphinx' + 'twolame' 'yajl' 'libopenmpt' 'quilt') +optdepends=('timidity++: for usage of the wildmidi-plugin') +install="${pkgname}.install" +backup=("etc/${pkgname}.conf") +source=("https://www.musicpd.org/download/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz"{,.sig} + "${pkgname}.conf" + "${pkgname}.initd" + "${pkgname}.run") +sha512sums=('5e417204e24d11fa609740ae92bc1d796aad2d63537655f655074d829cd79cadaf1ca025171dcf5486c1e557cc946152c21e299286b1cb74cc342da2b1f41343' + 'SKIP' + '12dbd10135674a6c9c535802d79f4a79fa9c01820e673f606e059d04cf83ec53a35cd03cbf84981742cb8725ff1c56625186c76eae696f0ad7756f6890b6a620' + '19841dd5e3201ee94d396f4e9d446120ed998a925addb29fbbf09e4d717cf43d9ddc3a59dc099111b984ec3caab23572de89d5fe7ec7b877ead47019bc49a6fc' + 'fb4d21a38fa276aed941c95878a844011cf0417fa60d7e17e4e097cb860565f83ca342eb5c291af5fba3fa741307e2fa9f9a823287de33dbc58f171e54401217') +validpgpkeys=('0392335A78083894A4301C43236E8A58C6DB4512') # Max Kellermann + +build() { + cd "${pkgname}-${pkgver}" + meson --prefix /usr \ + --libexecdir libexec \ + --sbindir sbin \ + --buildtype plain \ + --auto-features disabled \ + --wrap-mode nodownload \ + -D b_lto=true \ + -D b_pie=true \ + -D documentation=enabled \ + -D icu=enabled \ + -D zlib=enabled \ + -D curl=enabled \ + -D expat=enabled \ + -D ffmpeg=enabled \ + -D qobuz=enabled \ + -D nfs=enabled \ + -D pcre=enabled \ + -D sndio=enabled \ + -D alsa=enabled \ + -D sqlite=enabled \ + -D upnp=enabled \ + -D yajl=enabled \ + -D id3tag=enabled\ + -D libsamplerate=enabled \ + -D soxr=enabled \ + -D cdio_paranoia=enabled \ + -D mms=enabled \ + -D iso9660=enabled \ + -D bzip2=enabled \ + -D ao=enabled \ + -D flac=enabled \ + -D opus=enabled \ + -D vorbis=enabled \ + -D tremor=enabled \ + -D fluidsynth=enabled \ + -D audiofile=enabled \ + -D faad=enabled \ + -D mad=enabled \ + -D mikmod=enabled \ + -D modplug=enabled \ + -D mpcdec=enabled \ + -D mpg123=enabled \ + -D sndfile=enabled \ + -D wavpack=enabled \ + -D wildmidi=enabled \ + -D lame=enabled \ + -D libmpdclient=enabled \ + -D twolame=enabled \ + -D sidplay=enabled \ + -D smbclient=disabled \ + -D jack=disabled \ + -D pulse=disabled \ + -D dbus=disabled \ + -D adplug=disabled \ + -D shine=disabled \ + -D tremor=disabled \ + -D io_uring=disabled \ + -D shout=disabled \ + -D gme=disabled \ + -D chromaprint=disabled \ + -D zzip=disabled \ + build + ninja -C build +} + +package() { + depends+=('flac' 'libao' 'audiofile' 'ffmpeg' 'curl' 'expat' + 'faad2' 'fluidsynth' 'icu' 'libid3tag' + 'libmikmod' 'libmpdclient' 'mpg123' 'libogg' 'libopenmpt' + 'libsamplerate' 'libsndfile' 'twolame' 'libupnp' + 'libvorbis' 'yajl' 'alsa-lib') + + cd "${pkgname}-${pkgver}" + DESTDIR="${pkgdir}" ninja -C build install + install -vDm644 "doc/${pkgname}conf.example" -t "${pkgdir}/usr/share/doc/${pkgname}/" + install -vDm644 "${srcdir}/${pkgname}.conf" -t "${pkgdir}/etc/" + + # services + install -Dm755 "${srcdir}/${pkgname}.initd" "${pkgdir}"/etc/init.d/${pkgname} + install -Dm755 "${srcdir}/${pkgname}.run" "${pkgdir}/etc/sv/${pkgname}/run" + + # license + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/mpd/mpd.conf b/mpd/mpd.conf new file mode 100644 index 0000000..5bab9ff --- /dev/null +++ b/mpd/mpd.conf @@ -0,0 +1,25 @@ +# See: /usr/share/doc/mpd/mpdconf.example + +pid_file "/run/mpd/mpd.pid" +db_file "/var/lib/mpd/mpd.db" +state_file "/var/lib/mpd/mpdstate" +playlist_directory "/var/lib/mpd/playlists" +log_file "/var/log/mpd/mpd.log" + +# example for ALSA-configuration +#audio_output { +# type "alsa" +# name "My ALSA Device" +# device "hw:0,0" # optional +# mixer_type "hardware" # optional +# mixer_device "default" # optional +# mixer_control "PCM" # optional +# mixer_index "0" # optional +#} + +# example for sndio-configuration +#audio_output { +# type "sndio" +# name "sndio output" +# mixer_type "hardware" +#} diff --git a/mpd/mpd.initd b/mpd/mpd.initd new file mode 100644 index 0000000..6be921b --- /dev/null +++ b/mpd/mpd.initd @@ -0,0 +1,17 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="Music Player Daemon service" + +command="/usr/bin/mpd" +command_user="mpd" + +depend() { + need localmount + use net netmount nfsmount alsasound sndiod +} + +start_pre() { + checkpath --directory --owner mpd:mpd --mode 0755 /var/run/mpd +} diff --git a/mpd/mpd.install b/mpd/mpd.install new file mode 100644 index 0000000..251fec0 --- /dev/null +++ b/mpd/mpd.install @@ -0,0 +1,31 @@ +post_install() { + if ! getent group mpd &>/dev/null; then + groupadd -r -g 45 mpd >/dev/null + fi + if ! getent passwd mpd &>/dev/null; then + useradd -r -u 45 -g mpd -d /var/lib/mpd -s /bin/nologin -G audio mpd >/dev/null + fi + mpd_shell=$(getent passwd mpd | cut -d: -f7) + if [ "$mpd_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin mpd &>/dev/null + fi + + install -d -m750 /var/log/mpd + chown mpd:mpd /var/log/mpd + + install -d -m750 /var/lib/mpd + chown mpd:mpd /var/lib/mpd +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd mpd &>/dev/null; then + userdel mpd >/dev/null + fi + if getent group mpd &>/dev/null; then + groupdel mpd >/dev/null + fi +} diff --git a/mpd/mpd.run b/mpd/mpd.run new file mode 100644 index 0000000..bde3c86 --- /dev/null +++ b/mpd/mpd.run @@ -0,0 +1,3 @@ +#!/bin/sh +install -d -m 0755 -o mpd -g mpd /run/mpd +exec mpd --no-daemon diff --git a/mpdecimal/PKGBUILD b/mpdecimal/PKGBUILD new file mode 100644 index 0000000..2e92412 --- /dev/null +++ b/mpdecimal/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=mpdecimal +pkgver=2.5.1 +pkgrel=1 +pkgdesc="Package for correctly-rounded arbitrary precision decimal floating point arithmetic" +arch=('i686' 'x86_64') +url="https://www.bytereef.org/mpdecimal/index.html" +license=('Simplified-BSD') +depends=('gcc-libs') +source=("https://www.bytereef.org/software/$pkgname/releases/$pkgname-$pkgver.tar.gz") +sha512sums=('710cb5cb71dbcf3e170ca15869c148df0547b848400c6b6dd70c67d9961dbe1190af8fb4d1623bfb0ca2afe44f369a42e311ab5225ed89d4031cb49a3bd70f30') +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE.txt "$pkgdir"/usr/share/licenses/$pkgname/LICENSE.txt +} diff --git a/mpg123/PKGBUILD b/mpg123/PKGBUILD new file mode 100644 index 0000000..706fbbe --- /dev/null +++ b/mpg123/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=mpg123 +pkgver=1.26.4 +_debver=1.26.4 +_debrel=1 +pkgrel=1 +pkgdesc='Console based real time MPEG Audio Player for Layer 1, 2 and 3' +url="https://sourceforge.net/projects/mpg123" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('libltdl' 'alsa-lib') +makedepends=('sdl2' 'jack' 'libsndio' 'quilt') +optdepends=('sdl2: for sdl2 audio support' + 'jack: for jack audio support' + 'sndio: for sndio audio support' + 'perl: for conplay') +source=(https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2{,.sig} + https://deb.debian.org/debian/pool/main/m/mpg123/mpg123_$_debver-$_debrel.debian.tar.xz) +sha512sums=('425162227aafb99b8723428fe9bd403739a2dd68828b86a2cff7f9928a9f0ab3f67420e56c0abe7c9deeb94bce6c6acd59acaa0606ce24c01716465640564785' + 'SKIP' + '9f932bda4271ab859e9df075acb0000d29e3773f2368a155717da1ff4d3236199db3a012ec8278de3be3b9631ff73af13bf0e47a645ba78a99971e82a0f610f0') +validpgpkeys=('D021FF8ECF4BE09719D61A27231C4CBC60D5CAFE') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --enable-int-quality \ + --with-module-suffix=.so \ + --with-audio="alsa oss sdl jack sndio" + # https://bugzilla.gnome.org/show_bug.cgi?id=655517 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 755 scripts/conplay "${pkgdir}/usr/bin/conplay" + install -Dm 644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/mplayer/PKGBUILD b/mplayer/PKGBUILD new file mode 100644 index 0000000..ace8791 --- /dev/null +++ b/mplayer/PKGBUILD @@ -0,0 +1,119 @@ +# Maintainer: Jesus E. + +pkgbase=mplayer +pkgname=('mplayer' 'mencoder') +pkgver=1.4 +_debver=$pkgver +_debrel=1 +pkgrel=8 +pkgdesc="Free and libre media player" +url='http://www.mplayerhq.hu/' +arch=('i686' 'x86_64') +license=('GPL-2') +makedepends=('libxxf86dga' 'libmad' 'libxinerama' 'libmng' 'libxss' 'aalib' 'jack' + 'libcaca' 'faad2' 'libxvmc' 'enca' 'libdca' 'a52dec' 'unzip' + 'mesa' 'yasm' 'mpg123' 'ladspa' 'libcdio-paranoia' 'x264' 'libdvdcss' + 'libdvdread' 'libdvdnav' 'ffmpeg' 'quilt') +options=('!buildflags' '!emptydirs') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/m/mplayer/mplayer_${pkgver}+ds1.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/m/mplayer/mplayer_${_debver}+ds1-${_debrel}+deb11u1.debian.tar.xz" + "mplayer.desktop" + "revert-icl-fixes.patch" + "fix-libmpcodecs-ad_spdif_ffmpeg44.patch") +sha512sums=('23f7ed12fb40bd126524c523ee1c655fb1ebbda3f3a8506da67a0c39bf8c34a04b6f2183ae680ae6237a74934f28fbc725625af8301da09fd369fe52f7e0b077' + '9ca1906bbe619cc3a2ff9f10b687d829255ca911f3d273cee34e53d8772ecdd2316d24b48a1a09c9ba4cad34c15b384577070aea833bd7402c86505115b6387d' + 'd3c5cbf0035279c6f307e4e225473d7b77f9b56566537a26aa694e68446b9e3240333296da627ad5af83b04cc8f476d1a3f8c05e4cf81cd6e77153feb4ed74bc' + '0cae0b26d3d97fd4c962962c43a481de20335369cbca406cadfc9bda1a0608b32f5374e76c477cb9a85bda83a568a1ed17126df224ae61579d0a402c1824aea8' + 'b866f0cf9ef3009e3d16ccbe64600a485968e288e6b0965dcb443f6867e353e01f4f5de86eea637e0a3b98d8177c6c50d0f8e74ca21a99649a5b3716ca402c2b') + +prepare() { + cd MPlayer-${pkgver} + + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001_version.patch || true + rm -v debian/patches/0002_mplayer_debug_printf.patch || true + rm -v debian/patches/0201_PATH_MAX_HURD.patch || true + rm -v debian/patches/0203_generic arch fallback.patch || true + + quilt push -av + fi + + patch -p0 < "$srcdir/revert-icl-fixes.patch" + patch -Np1 -i "$srcdir/fix-libmpcodecs-ad_spdif_ffmpeg44.patch" + ./version.sh +} + +build() { + cd MPlayer-${pkgver} + + ./configure --prefix=/usr \ + --disable-gui \ + --disable-arts \ + --disable-liblzo \ + --disable-speex \ + --disable-openal \ + --disable-libdv \ + --disable-musepack \ + --disable-esd \ + --disable-mga \ + --disable-ass-internal \ + --disable-faac \ + --disable-unrarexec \ + --disable-cdparanoia \ + --disable-ffmpeg_a \ + --disable-smb \ + --disable-vdpau \ + --disable-librtmp \ + --disable-libvpx-lavc \ + --disable-apple-remote \ + --disable-apple-ir \ + --disable-lirc \ + --disable-lircc \ + --enable-runtime-cpudetection \ + --enable-xvmc \ + --enable-radio \ + --enable-radio-capture \ + --language=all \ + --confdir=/etc/mplayer \ + $extra + [[ "${CARCH}" = "i686" ]] && sed 's|-march=i486|-march=i686|g' -i config.mak + make +} + +package_mplayer() { + pkgdesc="Free and libre media player" + backup=('etc/mplayer/codecs.conf' 'etc/mplayer/input.conf') + depends=('desktop-file-utils' 'ttf-font' 'enca' 'libxss' 'a52dec' + 'x264' 'libmng' 'libdca' 'aalib' 'libxinerama' + 'jack' 'libmad' 'libcaca' 'libxxf86dga' 'faad2' 'libxvmc' 'mpg123' + 'libcdio-paranoia' 'libdvdnav' 'ffmpeg') + + cd MPlayer-${pkgver} + make DESTDIR="${pkgdir}" install-mplayer install-mplayer-man + + install -Dm 644 etc/{codecs.conf,input.conf,example.conf} "${pkgdir}/etc/mplayer" + install -Dm 644 "${srcdir}/mplayer.desktop" -t "${pkgdir}/usr/share/applications" + install -Dm 644 etc/mplayer256x256.png "${pkgdir}/usr/share/pixmaps/mplayer.png" + + install -Dm644 "${srcdir}/MPlayer-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_mencoder() { + pkgdesc="Free and libre command line video decoding, encoding and filtering tool" + depends=('enca' 'a52dec' 'x264' 'libmng' 'libdca' 'libmad' + 'faad2' 'mpg123' 'libcdio-paranoia' 'libdvdnav' 'ffmpeg') + + make -C MPlayer-${pkgver} DESTDIR="${pkgdir}" install-mencoder install-mencoder-man + find "${pkgdir}/usr/share/man" -name mplayer.1 -exec rename mplayer.1 mencoder.1 {} + + + install -Dm644 "${srcdir}/MPlayer-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mplayer/fix-libmpcodecs-ad_spdif_ffmpeg44.patch b/mplayer/fix-libmpcodecs-ad_spdif_ffmpeg44.patch new file mode 100644 index 0000000..02d3ad7 --- /dev/null +++ b/mplayer/fix-libmpcodecs-ad_spdif_ffmpeg44.patch @@ -0,0 +1,19 @@ +--- a/libmpcodecs/ad_spdif.c 2016-03-06 08:00:49.000000000 -0500 ++++ b/libmpcodecs/ad_spdif.c 2021-09-09 10:22:49.000000000 -0400 +@@ -298,14 +298,8 @@ + if (spdif_ctx->header_written) + av_write_trailer(lavf_ctx); + av_freep(&lavf_ctx->pb); +- if (lavf_ctx->streams) { +- av_freep(&lavf_ctx->streams[0]->codec); +- av_freep(&lavf_ctx->streams[0]->info); +- av_freep(&lavf_ctx->streams[0]); +- } +- av_freep(&lavf_ctx->streams); +- av_freep(&lavf_ctx->priv_data); ++ avformat_free_context(lavf_ctx); ++ lavf_ctx = NULL; + } +- av_freep(&lavf_ctx); + av_freep(&spdif_ctx); + } diff --git a/mplayer/mplayer.desktop b/mplayer/mplayer.desktop new file mode 100644 index 0000000..71bcc25 --- /dev/null +++ b/mplayer/mplayer.desktop @@ -0,0 +1,22 @@ +[Desktop Entry] +Type=Application +Name=MPlayer Media Player +Name[ca]=Reproductor multimèdia MPlayer +Name[pl]=MPlayer odtwarzacz multimedialny +GenericName=Multimedia player +Comment=Play movies and songs +Comment[ca]=Reproduïu vídeos i cançons +Comment[de]=Filme und Musik abspielen +Comment[es]=Reproduzca vídeos y canciones +Comment[fr]=Lecteur multimédia +Comment[it]=Lettore multimediale +Comment[zh]=多媒体播放器 +Comment[pl]=Odtwarzaj filmy i muzykę +Icon=mplayer +TryExec=mplayer +Exec=mplayer %F +Terminal=false +NoDisplay=true +Categories=GTK;AudioVideo;Audio;Video;Player;TV; +MimeType=application/ogg;application/x-ogg;application/sdp;application/smil;application/x-smil;application/streamingmedia;application/x-streamingmedia;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/aac;audio/x-aac;audio/m4a;audio/x-m4a;audio/mp1;audio/x-mp1;audio/mp2;audio/x-mp2;audio/mp3;audio/x-mp3;audio/mpeg;audio/x-mpeg;audio/mpegurl;audio/x-mpegurl;audio/mpg;audio/x-mpg;audio/rn-mpeg;audio/scpls;audio/x-scpls;audio/vnd.rn-realaudio;audio/wav;audio/x-pn-windows-pcm;audio/x-realaudio;audio/x-pn-realaudio;audio/x-ms-wma;audio/x-pls;audio/x-wav;video/mpeg;video/x-mpeg;video/x-mpeg2;video/mp4;video/msvideo;video/x-msvideo;video/quicktime;video/vnd.rn-realvideo;video/x-ms-afs;video/x-ms-asf;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvxvideo;video/x-avi;video/x-fli;video/x-flv;video/x-theora;video/x-matroska; +X-KDE-Protocols=http,ftp,smb diff --git a/mplayer/revert-icl-fixes.patch b/mplayer/revert-icl-fixes.patch new file mode 100644 index 0000000..e5f049f --- /dev/null +++ b/mplayer/revert-icl-fixes.patch @@ -0,0 +1,66 @@ +Index: libmpcodecs/vf_fspp.c +=================================================================== +--- libmpcodecs/vf_fspp.c (revision 37183) ++++ libmpcodecs/vf_fspp.c (revision 37181) +@@ -1598,10 +1598,6 @@ + + : "+S"(data), "+D"(output), "+c"(cnt), "=o"(temps) + : "d"(thr_adr) +- NAMED_CONSTRAINTS_ADD(ff_MM_FIX_0_707106781,MM_2,MM_FIX_1_414213562_A,MM_FIX_1_414213562,MM_FIX_0_382683433, +- ff_MM_FIX_0_541196100,MM_FIX_1_306562965,MM_FIX_0_847759065) +- NAMED_CONSTRAINTS_ADD(MM_FIX_0_566454497,MM_FIX_0_198912367,MM_FIX_2_613125930,MM_FIX_1_847759065, +- MM_FIX_1_082392200) + : "%"REG_a + ); + } +@@ -1871,8 +1867,6 @@ + + : "+S"(workspace), "+D"(output_adr), "+c"(cnt), "=o"(temps) + : "a"(output_stride*sizeof(short)) +- NAMED_CONSTRAINTS_ADD(MM_FIX_1_414213562_A,MM_FIX_2_613125930,MM_FIX_1_847759065,MM_FIX_1_082392200, +- MM_FIX_1_414213562,MM_DESCALE_RND) + : "%"REG_d + ); + } +@@ -1980,10 +1974,10 @@ + "movd (%%"REG_S",%%"REG_a",2), %%mm3 \n\t" //5 + "paddw %%mm4, %%mm1 \n\t" + +- "movq %%mm5, %3 \n\t" //t7 ++ "movq %%mm5, 0*8+%3 \n\t" //t7 + "punpcklbw %%mm7, %%mm3 \n\t" + +- "movq %%mm6, %4 \n\t" //t6 ++ "movq %%mm6, 1*8+%3 \n\t" //t6 + "movq %%mm2, %%mm4 \n\t" + + "movd (%%"REG_S"), %%mm5 \n\t" //3 +@@ -2029,7 +2023,7 @@ + "psubw %%mm1, %%mm5 \n\t" //d1 + "movq %%mm0, %%mm6 \n\t" + +- "movq %4, %%mm1 \n\t" ++ "movq 1*8+%3, %%mm1 \n\t" + "punpcklwd %%mm5, %%mm0 \n\t" + + "punpckhwd %%mm5, %%mm6 \n\t" +@@ -2053,7 +2047,7 @@ + "movq %%mm7, "DCTSIZE_S"*3*2(%%"REG_D") \n\t" + "psllw $2, %%mm3 \n\t" //t10 + +- "movq %3, %%mm2 \n\t" ++ "movq 0*8+%3, %%mm2 \n\t" + "psllw $2, %%mm4 \n\t" //t11 + + "pmulhw "MANGLE(MM_FIX_0_707106781)", %%mm4 \n\t" //z3 +@@ -2116,9 +2110,8 @@ + "dec %%"REG_c" \n\t" + "jnz 6b \n\t" + +- : "+S"(pixels), "+D"(data), "+c"(cnt), "=o"(temps), "=o"(temps[1]) ++ : "+S"(pixels), "+D"(data), "+c"(cnt), "=o"(temps) + : "a"(line_size) +- NAMED_CONSTRAINTS_ADD(ff_MM_FIX_0_707106781,ff_MM_FIX_0_541196100,MM_FIX_0_382683433,MM_FIX_1_306562965) + : "%"REG_d); + } + diff --git a/mpop/PKGBUILD b/mpop/PKGBUILD new file mode 100644 index 0000000..1e0f622 --- /dev/null +++ b/mpop/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=mpop +pkgver=1.4.18 +pkgrel=1 +pkgdesc="A small, fast POP3 client suitable as a fetchmail replacement" +arch=('i686' 'x86_64') +url='https://marlam.de/mpop/' +license=('GPL-3') +depends=('gnutls' 'libidn') +install=$pkgname.install +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/m/mpop/mpop_${pkgver}.orig.tar.xz") +sha512sums=('4f20d3653c99361269011162df6a5d2b2f73d7e3e4bb62fc24c301a5d12f0e911ff432b2e786d2f49088cb96c273a4961ee514ba48465c0c455937559d2b2cff') + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 scripts/vim/mpop.vim -t "$pkgdir/usr/share/vim/vimfiles/syntax" + install -Dm644 doc/mpoprc.example -t "$pkgdir/usr/share/doc/mpop" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mpop/mpop.install b/mpop/mpop.install new file mode 100644 index 0000000..a059493 --- /dev/null +++ b/mpop/mpop.install @@ -0,0 +1,8 @@ +post_install() { + echo "==> Sample config: /usr/share/doc/mpop/mpoprc.example" + echo "==> Copy it to your home folder as ~/.mpoprc." +} + +post_upgrade() { + post_install $1 +} diff --git a/mpv-legacy/PKGBUILD b/mpv-legacy/PKGBUILD new file mode 100644 index 0000000..a2d318e --- /dev/null +++ b/mpv-legacy/PKGBUILD @@ -0,0 +1,84 @@ +# Maintainer: Jesus E. + +_realpkgname=mpv +pkgname=$_realpkgname-legacy +pkgver=0.32.0 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="A free and libre cross-platform media player (legacy version)" +arch=('i686' 'x86_64') +license=('GPL-2' 'LGPL-2.1') +url='https://mpv.io/' +depends=('alsa-utils' 'jack' 'desktop-file-utils' 'ffmpeg' 'glibc' + 'hicolor-icon-theme' 'lcms2' 'libarchive' 'libass' + 'libcaca' 'libcdio' 'libcdio-paranoia' 'libdrm' 'libdvdnav' 'libdvdread' 'mesa' + 'libjpeg-turbo' 'libplacebo' 'libx11' 'libxext' 'libxinerama' 'libxkbcommon' 'libxrandr' 'libxss' + 'libxv' 'lua' 'lua52' 'uchardet' 'xdg-utils' 'zlib' 'sdl2') +makedepends=('mesa' 'python-docutils' 'ladspa' 'waf' 'quilt' 'libsndio' + 'lua52' 'alsa-lib' 'libjack') +optdepends=('sndio: sndio audio driver') +provides=('mpv') +options=('!emptydirs') +source=($_realpkgname-$pkgver.tar.gz::https://github.com/mpv-player/mpv/archive/refs/tags/v${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/m/mpv/mpv_$_debver-$_debrel.debian.tar.xz + remove-ytdl.patch) +sha512sums=('f6426c0254ec0bf2f120e2196904f1e15fe17032b06764abca1d5e074f0cabb452eaf1cd09f8fd9b25b591accee7b881bfc3b06c19d5c98980305c4712486bd6' + '513821281e28a07e8915172752577d387a95623cb97476156ef7a762ce0b97a21a122b5b994920a3be2af33bcf35e9e54d8bb2f2a2df1988b89126bfd141490a' + 'e54066ddbd3aba0bef45392a7ac591789341c7866aa1b2639072fb13e1c96c369dbcff571d5fc2ac8e3871db0d13af6e0eac03e4414586339a116a46c4f7502b') + +prepare() { + cd $_realpkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/03_waf.patch || true + + quilt push -av + fi + + # remove ytdl complete + patch -Np1 -i $srcdir/remove-ytdl.patch +} + +build() { + cd $_realpkgname-$pkgver + + waf configure --prefix=/usr \ + --confdir=/etc/mpv \ + --enable-cdda \ + --enable-dvb \ + --enable-dvdnav \ + --enable-libarchive \ + --enable-libmpv-shared \ + --enable-sdl2 \ + --enable-sndio \ + --enable-jack \ + --enable-alsa \ + --enable-lua \ + --disable-javascript \ + --disable-libsmbclient \ + --disable-rubberband \ + --disable-pulse \ + --disable-vulkan \ + --disable-build-date + + waf build +} + +package() { + cd $_realpkgname-$pkgver + + waf install --destdir="$pkgdir" + + install -Dm644 DOCS/{encoding.rst,tech-overview.txt} "$pkgdir"/usr/share/doc/mpv + install -Dm644 TOOLS/lua/* -t "$pkgdir"/usr/share/mpv/scripts + install -Dm644 LICENSE.{LGPL,GPL} -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/mpv-legacy/remove-ytdl.patch b/mpv-legacy/remove-ytdl.patch new file mode 100644 index 0000000..75e8f99 --- /dev/null +++ b/mpv-legacy/remove-ytdl.patch @@ -0,0 +1,1038 @@ +--- a/player/lua/ytdl_hook.lua 2020-01-26 21:31:54.000000000 +0100 ++++ /dev/null 2023-02-08 11:37:05.880016690 +0100 +@@ -1,735 +0,0 @@ +-local utils = require 'mp.utils' +-local msg = require 'mp.msg' +-local options = require 'mp.options' +- +-local o = { +- exclude = "", +- try_ytdl_first = false, +- use_manifests = false +-} +-options.read_options(o) +- +-local ytdl = { +- path = "youtube-dl", +- searched = false, +- blacklisted = {} +-} +- +-local chapter_list = {} +- +-function Set (t) +- local set = {} +- for _, v in pairs(t) do set[v] = true end +- return set +-end +- +-local safe_protos = Set { +- "http", "https", "ftp", "ftps", +- "rtmp", "rtmps", "rtmpe", "rtmpt", "rtmpts", "rtmpte", +- "data" +-} +- +-local function exec(args) +- local ret = mp.command_native({name = "subprocess", +- args = args, +- capture_stdout = true, +- capture_stderr = true}) +- return ret.status, ret.stdout, ret, ret.killed_by_us +-end +- +--- return true if it was explicitly set on the command line +-local function option_was_set(name) +- return mp.get_property_bool("option-info/" ..name.. "/set-from-commandline", +- false) +-end +- +--- return true if the option was set locally +-local function option_was_set_locally(name) +- return mp.get_property_bool("option-info/" ..name.. "/set-locally", false) +-end +- +--- youtube-dl may set special http headers for some sites (user-agent, cookies) +-local function set_http_headers(http_headers) +- if not http_headers then +- return +- end +- local headers = {} +- local useragent = http_headers["User-Agent"] +- if useragent and not option_was_set("user-agent") then +- mp.set_property("file-local-options/user-agent", useragent) +- end +- local additional_fields = {"Cookie", "Referer", "X-Forwarded-For"} +- for idx, item in pairs(additional_fields) do +- local field_value = http_headers[item] +- if field_value then +- headers[#headers + 1] = item .. ": " .. field_value +- end +- end +- if #headers > 0 and not option_was_set("http-header-fields") then +- mp.set_property_native("file-local-options/http-header-fields", headers) +- end +-end +- +-local function append_libav_opt(props, name, value) +- if not props then +- props = {} +- end +- +- if name and value and not props[name] then +- props[name] = value +- end +- +- return props +-end +- +-local function edl_escape(url) +- return "%" .. string.len(url) .. "%" .. url +-end +- +-local function url_is_safe(url) +- local proto = type(url) == "string" and url:match("^(.+)://") or nil +- local safe = proto and safe_protos[proto] +- if not safe then +- msg.error(("Ignoring potentially unsafe url: '%s'"):format(url)) +- end +- return safe +-end +- +-local function time_to_secs(time_string) +- local ret +- +- local a, b, c = time_string:match("(%d+):(%d%d?):(%d%d)") +- if a ~= nil then +- ret = (a*3600 + b*60 + c) +- else +- a, b = time_string:match("(%d%d?):(%d%d)") +- if a ~= nil then +- ret = (a*60 + b) +- end +- end +- +- return ret +-end +- +-local function extract_chapters(data, video_length) +- local ret = {} +- +- for line in data:gmatch("[^\r\n]+") do +- local time = time_to_secs(line) +- if time and (time < video_length) then +- table.insert(ret, {time = time, title = line}) +- end +- end +- table.sort(ret, function(a, b) return a.time < b.time end) +- return ret +-end +- +-local function is_blacklisted(url) +- if o.exclude == "" then return false end +- if #ytdl.blacklisted == 0 then +- local joined = o.exclude +- while joined:match('%|?[^|]+') do +- local _, e, substring = joined:find('%|?([^|]+)') +- table.insert(ytdl.blacklisted, substring) +- joined = joined:sub(e+1) +- end +- end +- if #ytdl.blacklisted > 0 then +- url = url:match('https?://(.+)') +- for _, exclude in ipairs(ytdl.blacklisted) do +- if url:match(exclude) then +- msg.verbose('URL matches excluded substring. Skipping.') +- return true +- end +- end +- end +- return false +-end +- +-local function parse_yt_playlist(url, json) +- -- return 0-based index to use with --playlist-start +- +- if not json.extractor or json.extractor ~= "youtube:playlist" then +- return nil +- end +- +- local query = url:match("%?.+") +- if not query then return nil end +- +- local args = {} +- for arg, param in query:gmatch("(%a+)=([^&?]+)") do +- if arg and param then +- args[arg] = param +- end +- end +- +- local maybe_idx = tonumber(args["index"]) +- +- -- if index matches v param it's probably the requested item +- if maybe_idx and #json.entries >= maybe_idx and +- json.entries[maybe_idx].id == args["v"] then +- msg.debug("index matches requested video") +- return maybe_idx - 1 +- end +- +- -- if there's no index or it doesn't match, look for video +- for i = 1, #json.entries do +- if json.entries[i] == args["v"] then +- msg.debug("found requested video in index " .. (i - 1)) +- return i - 1 +- end +- end +- +- msg.debug("requested video not found in playlist") +- -- if item isn't on the playlist, give up +- return nil +-end +- +-local function make_absolute_url(base_url, url) +- if url:find("https?://") == 1 then return url end +- +- local proto, domain, rest = +- base_url:match("(https?://)([^/]+/)(.*)/?") +- local segs = {} +- rest:gsub("([^/]+)", function(c) table.insert(segs, c) end) +- url:gsub("([^/]+)", function(c) table.insert(segs, c) end) +- local resolved_url = {} +- for i, v in ipairs(segs) do +- if v == ".." then +- table.remove(resolved_url) +- elseif v ~= "." then +- table.insert(resolved_url, v) +- end +- end +- return proto .. domain .. +- table.concat(resolved_url, "/") +-end +- +-local function join_url(base_url, fragment) +- local res = "" +- if base_url and fragment.path then +- res = make_absolute_url(base_url, fragment.path) +- elseif fragment.url then +- res = fragment.url +- end +- return res +-end +- +-local function edl_track_joined(fragments, protocol, is_live, base) +- if not (type(fragments) == "table") or not fragments[1] then +- msg.debug("No fragments to join into EDL") +- return nil +- end +- +- local edl = "edl://" +- local offset = 1 +- local parts = {} +- +- if (protocol == "http_dash_segments") and not is_live then +- msg.debug("Using dash") +- local args = "" +- +- -- assume MP4 DASH initialization segment +- if not fragments[1].duration then +- msg.debug("Using init segment") +- args = args .. ",init=" .. edl_escape(join_url(base, fragments[1])) +- offset = 2 +- end +- +- table.insert(parts, "!mp4_dash" .. args) +- +- -- Check remaining fragments for duration; +- -- if not available in all, give up. +- for i = offset, #fragments do +- if not fragments[i].duration then +- msg.error("EDL doesn't support fragments" .. +- "without duration with MP4 DASH") +- return nil +- end +- end +- end +- +- for i = offset, #fragments do +- local fragment = fragments[i] +- if not url_is_safe(join_url(base, fragment)) then +- return nil +- end +- table.insert(parts, edl_escape(join_url(base, fragment))) +- if fragment.duration then +- parts[#parts] = +- parts[#parts] .. ",length="..fragment.duration +- end +- end +- return edl .. table.concat(parts, ";") .. ";" +-end +- +-local function has_native_dash_demuxer() +- local demuxers = mp.get_property_native("demuxer-lavf-list", {}) +- for _, v in ipairs(demuxers) do +- if v == "dash" then +- return true +- end +- end +- return false +-end +- +-local function valid_manifest(json) +- local reqfmt = json["requested_formats"] and json["requested_formats"][1] or {} +- if not reqfmt["manifest_url"] and not json["manifest_url"] then +- return false +- end +- local proto = reqfmt["protocol"] or json["protocol"] or "" +- return (proto == "http_dash_segments" and has_native_dash_demuxer()) or +- proto:find("^m3u8") +-end +- +-local function add_single_video(json) +- local streamurl = "" +- local max_bitrate = 0 +- local reqfmts = json["requested_formats"] +- +- -- prefer manifest_url if present +- if o.use_manifests and valid_manifest(json) then +- local mpd_url = reqfmts and reqfmts[1]["manifest_url"] or +- json["manifest_url"] +- if not mpd_url then +- msg.error("No manifest URL found in JSON data.") +- return +- elseif not url_is_safe(mpd_url) then +- return +- end +- +- streamurl = mpd_url +- +- if reqfmts then +- for _, track in pairs(reqfmts) do +- max_bitrate = track.tbr > max_bitrate and +- track.tbr or max_bitrate +- end +- elseif json.tbr then +- max_bitrate = json.tbr > max_bitrate and json.tbr or max_bitrate +- end +- +- -- DASH/split tracks +- elseif reqfmts then +- local streams = {} +- +- for _, track in pairs(reqfmts) do +- local edl_track = nil +- edl_track = edl_track_joined(track.fragments, +- track.protocol, json.is_live, +- track.fragment_base_url) +- if not edl_track and not url_is_safe(track.url) then +- return +- end +- if track.vcodec and track.vcodec ~= "none" then +- -- video track +- streams[#streams + 1] = edl_track or track.url +- elseif track.vcodec == "none" then +- -- audio track +- streams[#streams + 1] = edl_track or track.url +- end +- end +- +- if #streams > 1 then +- -- merge them via EDL +- for i = 1, #streams do +- streams[i] = "!no_clip;!no_chapters;" .. edl_escape(streams[i]) +- end +- streamurl = "edl://" .. +- table.concat(streams, ";!new_stream;") .. ";" +- else +- streamurl = streams[1] +- end +- +- elseif not (json.url == nil) then +- local edl_track = nil +- edl_track = edl_track_joined(json.fragments, json.protocol, +- json.is_live, json.fragment_base_url) +- +- if not edl_track and not url_is_safe(json.url) then +- return +- end +- -- normal video or single track +- streamurl = edl_track or json.url +- set_http_headers(json.http_headers) +- else +- msg.error("No URL found in JSON data.") +- return +- end +- +- msg.debug("streamurl: " .. streamurl) +- +- mp.set_property("stream-open-filename", streamurl:gsub("^data:", "data://", 1)) +- +- mp.set_property("file-local-options/force-media-title", json.title) +- +- -- set hls-bitrate for dash track selection +- if max_bitrate > 0 and +- not option_was_set("hls-bitrate") and +- not option_was_set_locally("hls-bitrate") then +- mp.set_property_native('file-local-options/hls-bitrate', max_bitrate*1000) +- end +- +- -- add subtitles +- if not (json.requested_subtitles == nil) then +- for lang, sub_info in pairs(json.requested_subtitles) do +- msg.verbose("adding subtitle ["..lang.."]") +- +- local sub = nil +- +- if not (sub_info.data == nil) then +- sub = "memory://"..sub_info.data +- elseif not (sub_info.url == nil) and +- url_is_safe(sub_info.url) then +- sub = sub_info.url +- end +- +- if not (sub == nil) then +- mp.commandv("sub-add", sub, +- "auto", sub_info.ext, lang) +- else +- msg.verbose("No subtitle data/url for ["..lang.."]") +- end +- end +- end +- +- -- add chapters +- if json.chapters then +- msg.debug("Adding pre-parsed chapters") +- for i = 1, #json.chapters do +- local chapter = json.chapters[i] +- local title = chapter.title or "" +- if title == "" then +- title = string.format('Chapter %02d', i) +- end +- table.insert(chapter_list, {time=chapter.start_time, title=title}) +- end +- elseif not (json.description == nil) and not (json.duration == nil) then +- chapter_list = extract_chapters(json.description, json.duration) +- end +- +- -- set start time +- if not (json.start_time == nil) and +- not option_was_set("start") and +- not option_was_set_locally("start") then +- msg.debug("Setting start to: " .. json.start_time .. " secs") +- mp.set_property("file-local-options/start", json.start_time) +- end +- +- -- set aspect ratio for anamorphic video +- if not (json.stretched_ratio == nil) and +- not option_was_set("video-aspect-override") then +- mp.set_property('file-local-options/video-aspect-override', json.stretched_ratio) +- end +- +- local stream_opts = mp.get_property_native("file-local-options/stream-lavf-o", {}) +- +- -- for rtmp +- if (json.protocol == "rtmp") then +- stream_opts = append_libav_opt(stream_opts, +- "rtmp_tcurl", streamurl) +- stream_opts = append_libav_opt(stream_opts, +- "rtmp_pageurl", json.page_url) +- stream_opts = append_libav_opt(stream_opts, +- "rtmp_playpath", json.play_path) +- stream_opts = append_libav_opt(stream_opts, +- "rtmp_swfverify", json.player_url) +- stream_opts = append_libav_opt(stream_opts, +- "rtmp_swfurl", json.player_url) +- stream_opts = append_libav_opt(stream_opts, +- "rtmp_app", json.app) +- end +- +- if json.proxy and json.proxy ~= "" then +- stream_opts = append_libav_opt(stream_opts, +- "http_proxy", json.proxy) +- end +- +- mp.set_property_native("file-local-options/stream-lavf-o", stream_opts) +-end +- +-local function check_version(ytdl_path) +- local command = { +- name = "subprocess", +- capture_stdout = true, +- args = {ytdl_path, "--version"} +- } +- local version_string = mp.command_native(command).stdout +- local year, month, day = string.match(version_string, "(%d+).(%d+).(%d+)") +- +- -- sanity check +- if (tonumber(year) < 2000) or (tonumber(month) > 12) or +- (tonumber(day) > 31) then +- return +- end +- local version_ts = os.time{year=year, month=month, day=day} +- if (os.difftime(os.time(), version_ts) > 60*60*24*90) then +- msg.warn("It appears that your youtube-dl version is severely out of date.") +- end +-end +- +-function run_ytdl_hook(url) +- local start_time = os.clock() +- +- -- check for youtube-dl in mpv's config dir +- if not (ytdl.searched) then +- local exesuf = (package.config:sub(1,1) == '\\') and '.exe' or '' +- local ytdl_mcd = mp.find_config_file("youtube-dl" .. exesuf) +- if not (ytdl_mcd == nil) then +- msg.verbose("found youtube-dl at: " .. ytdl_mcd) +- ytdl.path = ytdl_mcd +- end +- ytdl.searched = true +- end +- +- -- strip ytdl:// +- if (url:find("ytdl://") == 1) then +- url = url:sub(8) +- end +- +- local format = mp.get_property("options/ytdl-format") +- local raw_options = mp.get_property_native("options/ytdl-raw-options") +- local allsubs = true +- local proxy = nil +- local use_playlist = false +- +- local command = { +- ytdl.path, "--no-warnings", "-J", "--flat-playlist", +- "--sub-format", "ass/srt/best" +- } +- +- -- Checks if video option is "no", change format accordingly, +- -- but only if user didn't explicitly set one +- if (mp.get_property("options/vid") == "no") and (#format == 0) then +- format = "bestaudio/best" +- msg.verbose("Video disabled. Only using audio") +- end +- +- if (format == "") then +- format = "bestvideo+bestaudio/best" +- end +- table.insert(command, "--format") +- table.insert(command, format) +- +- for param, arg in pairs(raw_options) do +- table.insert(command, "--" .. param) +- if (arg ~= "") then +- table.insert(command, arg) +- end +- if (param == "sub-lang") and (arg ~= "") then +- allsubs = false +- elseif (param == "proxy") and (arg ~= "") then +- proxy = arg +- elseif (param == "yes-playlist") then +- use_playlist = true +- end +- end +- +- if (allsubs == true) then +- table.insert(command, "--all-subs") +- end +- if not use_playlist then +- table.insert(command, "--no-playlist") +- end +- table.insert(command, "--") +- table.insert(command, url) +- msg.debug("Running: " .. table.concat(command,' ')) +- local es, json, result, aborted = exec(command) +- +- if aborted then +- return +- end +- +- if (es < 0) or (json == nil) or (json == "") then +- -- trim our stderr to avoid spurious newlines +- ytdl_err = result.stderr:gsub("^%s*(.-)%s*$", "%1") +- msg.error(ytdl_err) +- local err = "youtube-dl failed: " +- if result.error_string and result.error_string == "init" then +- err = err .. "not found or not enough permissions" +- elseif not result.killed_by_us then +- err = err .. "unexpected error ocurred" +- else +- err = string.format("%s returned '%d'", err, es) +- end +- msg.error(err) +- if string.find(ytdl_err, "yt%-dl%.org/bug") then +- check_version(ytdl.path) +- end +- return +- end +- +- local json, err = utils.parse_json(json) +- +- if (json == nil) then +- msg.error("failed to parse JSON data: " .. err) +- check_version(ytdl.path) +- return +- end +- +- msg.verbose("youtube-dl succeeded!") +- msg.debug('ytdl parsing took '..os.clock()-start_time..' seconds') +- +- json["proxy"] = json["proxy"] or proxy +- +- -- what did we get? +- if json["direct"] then +- -- direct URL, nothing to do +- msg.verbose("Got direct URL") +- return +- elseif (json["_type"] == "playlist") +- or (json["_type"] == "multi_video") then +- -- a playlist +- +- if (#json.entries == 0) then +- msg.warn("Got empty playlist, nothing to play.") +- return +- end +- +- local self_redirecting_url = +- json.entries[1]["_type"] ~= "url_transparent" and +- json.entries[1]["webpage_url"] and +- json.entries[1]["webpage_url"] == json["webpage_url"] +- +- +- -- some funky guessing to detect multi-arc videos +- if self_redirecting_url and #json.entries > 1 +- and json.entries[1].protocol == "m3u8_native" +- and json.entries[1].url then +- msg.verbose("multi-arc video detected, building EDL") +- +- local playlist = edl_track_joined(json.entries) +- +- msg.debug("EDL: " .. playlist) +- +- if not playlist then +- return +- end +- +- -- can't change the http headers for each entry, so use the 1st +- set_http_headers(json.entries[1].http_headers) +- +- mp.set_property("stream-open-filename", playlist) +- if not (json.title == nil) then +- mp.set_property("file-local-options/force-media-title", +- json.title) +- end +- +- -- there might not be subs for the first segment +- local entry_wsubs = nil +- for i, entry in pairs(json.entries) do +- if not (entry.requested_subtitles == nil) then +- entry_wsubs = i +- break +- end +- end +- +- if not (entry_wsubs == nil) and +- not (json.entries[entry_wsubs].duration == nil) then +- for j, req in pairs(json.entries[entry_wsubs].requested_subtitles) do +- local subfile = "edl://" +- for i, entry in pairs(json.entries) do +- if not (entry.requested_subtitles == nil) and +- not (entry.requested_subtitles[j] == nil) and +- url_is_safe(entry.requested_subtitles[j].url) then +- subfile = subfile..edl_escape(entry.requested_subtitles[j].url) +- else +- subfile = subfile..edl_escape("memory://WEBVTT") +- end +- subfile = subfile..",length="..entry.duration..";" +- end +- msg.debug(j.." sub EDL: "..subfile) +- mp.commandv("sub-add", subfile, "auto", req.ext, j) +- end +- end +- +- elseif self_redirecting_url and #json.entries == 1 then +- msg.verbose("Playlist with single entry detected.") +- add_single_video(json.entries[1]) +- else +- local playlist_index = parse_yt_playlist(url, json) +- local playlist = {"#EXTM3U"} +- for i, entry in pairs(json.entries) do +- local site = entry.url +- local title = entry.title +- +- if not (title == nil) then +- title = string.gsub(title, '%s+', ' ') +- table.insert(playlist, "#EXTINF:0," .. title) +- end +- +- --[[ some extractors will still return the full info for +- all clips in the playlist and the URL will point +- directly to the file in that case, which we don't +- want so get the webpage URL instead, which is what +- we want, but only if we aren't going to trigger an +- infinite loop +- --]] +- if entry["webpage_url"] and not self_redirecting_url then +- site = entry["webpage_url"] +- end +- +- -- links without protocol as returned by --flat-playlist +- if not site:find("://") then +- -- youtube extractor provides only IDs, +- -- others come prefixed with the extractor name and ":" +- local prefix = site:find(":") and "ytdl://" or +- "https://youtu.be/" +- table.insert(playlist, prefix .. site) +- elseif url_is_safe(site) then +- table.insert(playlist, site) +- end +- +- end +- +- if use_playlist and +- not option_was_set("playlist-start") and playlist_index then +- mp.set_property_number("playlist-start", playlist_index) +- end +- +- mp.set_property("stream-open-filename", "memory://" .. table.concat(playlist, "\n")) +- +- -- This disables mpv's mushy playlist security code, which will +- -- break links that will be resolved to EDL later (because EDL is +- -- not considered "safe", and the playlist entries got tagged as +- -- network originating due to the playlist redirection). +- mp.set_property_native("file-local-options/load-unsafe-playlists", true) +- end +- +- else -- probably a video +- add_single_video(json) +- end +- msg.debug('script running time: '..os.clock()-start_time..' seconds') +-end +- +-if (not o.try_ytdl_first) then +- mp.add_hook("on_load", 10, function () +- msg.verbose('ytdl:// hook') +- local url = mp.get_property("stream-open-filename", "") +- if not (url:find("ytdl://") == 1) then +- msg.verbose('not a ytdl:// url') +- return +- end +- run_ytdl_hook(url) +- end) +-end +- +-mp.add_hook(o.try_ytdl_first and "on_load" or "on_load_fail", 10, function() +- msg.verbose('full hook') +- local url = mp.get_property("stream-open-filename", "") +- if not (url:find("ytdl://") == 1) and +- not ((url:find("https?://") == 1) and not is_blacklisted(url)) then +- return +- end +- run_ytdl_hook(url) +-end) +- +-mp.add_hook("on_preloaded", 10, function () +- if next(chapter_list) ~= nil then +- msg.verbose("Setting chapters") +- +- mp.set_property_native("chapter-list", chapter_list) +- chapter_list = {} +- end +-end) +--- a/player/lua.c 2023-02-23 11:26:34.000000000 +0100 ++++ b/player/lua.c 2023-02-23 11:29:02.217705575 +0100 +@@ -67,9 +67,6 @@ + {"@osc.lua", + # include "player/lua/osc.inc" + }, +- {"@ytdl_hook.lua", +-# include "player/lua/ytdl_hook.inc" +- }, + {"@stats.lua", + # include "player/lua/stats.inc" + }, +--- a/player/scripting.c 2020-01-26 21:31:54.000000000 +0100 ++++ b/player/scripting.c 2023-02-23 11:31:42.691479373 +0100 +@@ -209,7 +209,6 @@ + void mp_load_builtin_scripts(struct MPContext *mpctx) + { + load_builtin_script(mpctx, mpctx->opts->lua_load_osc, "@osc.lua"); +- load_builtin_script(mpctx, mpctx->opts->lua_load_ytdl, "@ytdl_hook.lua"); + load_builtin_script(mpctx, mpctx->opts->lua_load_stats, "@stats.lua"); + load_builtin_script(mpctx, mpctx->opts->lua_load_console, "@console.lua"); + } +--- a/libmpv/client.h 2020-01-26 21:31:54.000000000 +0100 ++++ b/libmpv/client.h 2023-02-23 11:30:05.579195622 +0100 +@@ -138,8 +138,7 @@ + * - The FPU precision must be set at least to double precision. + * - On Windows, mpv will call timeBeginPeriod(1). + * - On memory exhaustion, mpv will kill the process. +- * - In certain cases, mpv may start sub processes (such as with the ytdl +- * wrapper script). ++ * - In certain cases, mpv may start sub processes. + * - Using UNIX IPC (off by default) will override the SIGPIPE signal handler, + * and set it to SIG_IGN. + * - mpv will reseed the legacy C random number generator by calling srand() at +--- a/options/m_option.h 2020-01-26 21:31:54.000000000 +0100 ++++ b/options/m_option.h 2023-02-23 11:38:21.710862952 +0100 +@@ -418,7 +418,7 @@ + #define UPDATE_OPT_FIRST (1 << 8) + #define UPDATE_TERM (1 << 8) // terminal options + #define UPDATE_OSD (1 << 10) // related to OSD rendering +-#define UPDATE_BUILTIN_SCRIPTS (1 << 11) // osc/ytdl/stats ++#define UPDATE_BUILTIN_SCRIPTS (1 << 11) // osc/stats + #define UPDATE_IMGPAR (1 << 12) // video image params overrides + #define UPDATE_INPUT (1 << 13) // mostly --input-* options + #define UPDATE_AUDIO (1 << 14) // --audio-channels etc. +--- a/options/options.h 2020-01-26 21:31:54.000000000 +0100 ++++ b/options/options.h 2023-02-23 11:37:14.879291301 +0100 +@@ -132,9 +132,6 @@ + char **script_files; + char **script_opts; + int lua_load_osc; +- int lua_load_ytdl; +- char *lua_ytdl_format; +- char **lua_ytdl_raw_options; + int lua_load_stats; + int lua_load_console; + +--- a/options/options.c 2020-01-26 21:31:54.000000000 +0100 ++++ b/options/options.c 2023-02-23 11:37:57.970304655 +0100 +@@ -392,9 +392,6 @@ + #endif + #if HAVE_LUA + OPT_FLAG("osc", lua_load_osc, UPDATE_BUILTIN_SCRIPTS), +- OPT_FLAG("ytdl", lua_load_ytdl, UPDATE_BUILTIN_SCRIPTS), +- OPT_STRING("ytdl-format", lua_ytdl_format, 0), +- OPT_KEYVALUELIST("ytdl-raw-options", lua_ytdl_raw_options, 0), + OPT_FLAG("load-stats-overlay", lua_load_stats, UPDATE_BUILTIN_SCRIPTS), + OPT_FLAG("load-osd-console", lua_load_console, UPDATE_BUILTIN_SCRIPTS), + #endif +@@ -916,9 +913,6 @@ + .osd_duration = 1000, + #if HAVE_LUA + .lua_load_osc = 1, +- .lua_load_ytdl = 1, +- .lua_ytdl_format = NULL, +- .lua_ytdl_raw_options = NULL, + .lua_load_stats = 1, + .lua_load_console = 1, + #endif +--- a/wscript_build.py 2020-01-26 21:31:54.000000000 +0100 ++++ b/wscript_build.py 2023-02-23 11:41:25.935195282 +0100 +@@ -100,7 +100,7 @@ + ) + + lua_files = ["defaults.lua", "assdraw.lua", "options.lua", "osc.lua", +- "ytdl_hook.lua", "stats.lua", "console.lua"] ++ "stats.lua", "console.lua"] + + for fn in lua_files: + fn = "player/lua/" + fn +--- a/DOCS/edl-mpv.rst 2020-01-26 21:31:54.000000000 +0100 ++++ b/DOCS/edl-mpv.rst 2023-02-23 11:49:35.806715395 +0100 +@@ -112,46 +112,6 @@ + !no_chapters + + +-MP4 DASH +-======== +- +-This is a header that helps implementing DASH, although it only provides a low +-level mechanism. +- +-If this header is set, the given url designates an mp4 init fragment. It's +-downloaded, and every URL in the EDL is prefixed with the init fragment on the +-byte stream level. This is mostly for use by mpv's internal ytdl support. The +-ytdl script will call youtube-dl, which in turn actually processes DASH +-manifests. It may work only for this very specific purpose and fail to be +-useful in other scenarios. It can be removed or changed in incompatible ways +-at any times. +- +-Example:: +- +- !mp4_dash,init=url +- +-The ``url`` is encoded as parameter value as defined in the general EDL syntax. +-It's expected to point to an "initialization fragment", which will be prefixed +-to every entry in the EDL on the byte stream level. +- +-The current implementation will +- +-- ignore stream start times +-- use durations as hint for seeking only +-- not adjust source timestamps +-- open and close segments (i.e. fragments) as needed +-- not add segment boundaries as chapter points +-- require full compatibility between all segments (same codec etc.) +- +-Another header part of this mechanism is ``no_clip``. This header is similar +-to ``mp4_dash``, but does not include on-demand opening/closing of segments, +-and does not support init segments. It also exists solely to support internal +-ytdl requirements. +- +-The ``mp4_dash`` and ``no_clip`` headers are not part of the core EDL format. +-They may be changed or removed at any time, depending on mpv's internal +-requirements. +- + Separate files for tracks + ========================= + +--- a/DOCS/man/input.rst 2020-01-26 21:31:54.000000000 +0100 ++++ b/DOCS/man/input.rst 2023-02-23 11:50:49.908458016 +0100 +@@ -1493,11 +1493,7 @@ + + ``stream-open-filename`` + The full path to the currently played media. This is different only from +- ``path`` in special cases. In particular, if ``--ytdl=yes`` is used, and +- the URL is detected by ``youtube-dl``, then the script will set this +- property to the actual media URL. This property should be set only during +- the ``on_load`` or ``on_load_fail`` hooks, otherwise it will have no effect +- (or may do something implementation defined in the future). The property is ++ ``path`` in special cases. The property is + reset if playback of the current media ends. + + ``media-title`` +--- a/DOCS/man/mpv.rst 2020-01-26 21:31:54.000000000 +0100 ++++ b/DOCS/man/mpv.rst 2023-02-23 11:55:29.105023770 +0100 +@@ -879,16 +879,6 @@ + format ``data://``. This is done to avoid ambiguity with filenames. You + can also prefix it with ``lavf://`` or ``ffmpeg://``. + +-``ytdl://...`` +- +- By default, the youtube-dl hook script only looks at http(s) URLs. Prefixing +- an URL with ``ytdl://`` forces it to be always processed by the script. This +- can also be used to invoke special youtube-dl functionality like playing a +- video by ID or invoking search. +- +- Keep in mind that you can't pass youtube-dl command line options by this, +- and you have to use ``--ytdl-raw-options`` instead. +- + ``-`` + + Play data from stdin. +--- a/DOCS/man/options.rst 2020-01-26 21:31:54.000000000 +0100 ++++ b/DOCS/man/options.rst 2023-02-23 11:54:53.714191498 +0100 +@@ -66,10 +66,6 @@ + ``--vid=no`` or ``--video=no`` or ``--no-video`` disables video playback. + (The latter variant does not work with the client API.) + +- If video is disabled, mpv will try to download the audio only if media is +- streamed with youtube-dl, because it saves bandwidth. This is done by +- setting the ytdl_format to "bestaudio/best" in the ytdl_hook.lua script. +- + ``--edition=`` + (Matroska files only) + Specify the edition (set of chapters) to use, where 0 is the first. If set +@@ -791,71 +787,6 @@ + + May be dangerous if playing from untrusted media. + +-``--ytdl``, ``--no-ytdl`` +- Enable the youtube-dl hook-script. It will look at the input URL, and will +- play the video located on the website. This works with many streaming sites, +- not just the one that the script is named after. This requires a recent +- version of youtube-dl to be installed on the system. (Enabled by default.) +- +- If the script can't do anything with an URL, it will do nothing. +- +- The ``try_ytdl_first`` script option accepts a boolean 'yes' or 'no', and if +- 'yes' will try parsing the URL with youtube-dl first, instead of the default +- where it's only after mpv failed to open it. This mostly depends on whether +- most of your URLs need youtube-dl parsing. +- +- The ``exclude`` script option accepts a ``|``-separated list of URL patterns +- which mpv should not use with youtube-dl. The patterns are matched after +- the ``http(s)://`` part of the URL. +- +- ``^`` matches the beginning of the URL, ``$`` matches its end, and you +- should use ``%`` before any of the characters ``^$()%|,.[]*+-?`` to match +- that character. +- +- .. admonition:: Examples +- +- - ``--script-opts=ytdl_hook-exclude='^youtube%.com'`` +- will exclude any URL that starts with ``http://youtube.com`` or +- ``https://youtube.com``. +- - ``--script-opts=ytdl_hook-exclude='%.mkv$|%.mp4$'`` +- will exclude any URL that ends with ``.mkv`` or ``.mp4``. +- +- See more lua patterns here: https://www.lua.org/manual/5.1/manual.html#5.4.1 +- +- The ``use_manifests`` script option makes mpv use the master manifest URL for +- formats like HLS and DASH, if available, allowing for video/audio selection +- in runtime. It's disabled ("no") by default for performance reasons. +- +-``--ytdl-format=`` +- Video format/quality that is directly passed to youtube-dl. The possible +- values are specific to the website and the video, for a given url the +- available formats can be found with the command +- ``youtube-dl --list-formats URL``. See youtube-dl's documentation for +- available aliases. +- (Default: youtube-dl's default, currently ``bestvideo+bestaudio/best``) +- +-``--ytdl-raw-options==[,=[,...]]`` +- Pass arbitrary options to youtube-dl. Parameter and argument should be +- passed as a key-value pair. Options without argument must include ``=``. +- +- There is no sanity checking so it's possible to break things (i.e. +- passing invalid parameters to youtube-dl). +- +- A proxy URL can be passed for youtube-dl to use it in parsing the website. +- This is useful for geo-restricted URLs. After youtube-dl parsing, some +- URLs also require a proxy for playback, so this can pass that proxy +- information to mpv. Take note that SOCKS proxies aren't supported and +- https URLs also bypass the proxy. This is a limitation in FFmpeg. +- +- This is a key/value list option. See `List Options`_ for details. +- +- .. admonition:: Example +- +- - ``--ytdl-raw-options=username=user,password=pass`` +- - ``--ytdl-raw-options=force-ipv6=`` +- - ``--ytdl-raw-options=proxy=[http://127.0.0.1:3128]`` +- - ``--ytdl-raw-options-append=proxy=http://127.0.0.1:3128`` +- + ``--load-stats-overlay=`` + Enable the builtin script that shows useful playback information on a key + binding (default: yes). By default, the ``i`` key is used (``I`` to make +@@ -4374,8 +4305,7 @@ + URL of the HTTP/HTTPS proxy. If this is set, the ``http_proxy`` environment + is ignored. The ``no_proxy`` environment variable is still respected. This + option is silently ignored if it does not start with ``http://``. Proxies +- are not used for https URLs. Setting this option does not try to make the +- ytdl script use the proxy. ++ are not used for https URLs. + + ``--tls-ca-file=`` + Certificate authority database file for use with TLS. (Silently fails with +--- a/DOCS/interface-changes.rst 2020-01-26 21:31:54.000000000 +0100 ++++ b/DOCS/interface-changes.rst 2023-02-23 12:01:57.044146779 +0100 +@@ -177,7 +177,6 @@ + --ad-spdif-dtshd, --softvol options + - fix --external-files: strictly never select any tracks from them, unless + explicitly selected (this may or may not be expected) +- - --ytdl is now always enabled, even for libmpv + - add a number of --audio-resample-* options, which should from now on be + used instead of --af-defaults=lavrresample:... + - deprecate --vf-defaults and --af-defaults. These didn't work with the +@@ -552,7 +551,7 @@ + between options and properties) + - implement changing sub-speed during playback + - make many previously fixed options changeable at runtime (for example +- --terminal, --osc, --ytdl, can all be enable/disabled after ++ --terminal, --osc, can all be enable/disabled after + mpv_initialize() - this can be extended to other still fixed options + on user requests) + --- mpv 0.20.0 --- +--- a/DOCS/mplayer-changes.rst 2020-01-26 21:31:54.000000000 +0100 ++++ b/DOCS/mplayer-changes.rst 2023-02-23 12:01:17.673220909 +0100 +@@ -128,10 +128,6 @@ + + * Better MKV support (e.g. ordered chapters, 3D metadata). + * Matroska edition switching at runtime. +-* Support for playing URLs of popular streaming sites directly. +- (e.g. ``mpv https://www.youtube.com/watch?v=...``). +- Requires a recent version of ``youtube-dl`` to be installed. Can be +- disabled with ``ytdl=no`` in the mpv config file. + * Support for precise scrolling which scales the parameter of commands. If the + input doesn't support precise scrolling the scale factor stays 1. + * Allow changing/adjusting video filters at runtime. (This is also used to make diff --git a/mscgen/PKGBUILD b/mscgen/PKGBUILD new file mode 100644 index 0000000..f218ab2 --- /dev/null +++ b/mscgen/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=mscgen +pkgver=0.20 +_debver=0.20 +_debrel=14 +pkgrel=1 +pkgdesc='Message Sequence Chart Generator' +arch=('i686' 'x86_64') +url='http://www.mcternan.me.uk/mscgen/' +license=('GPL-2') +depends=('gd') +makedepends=('quilt') +source=("https://www.mcternan.me.uk/mscgen/software/$pkgname-src-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mscgen/mscgen_$_debver-$_debrel.debian.tar.xz") +sha512sums=('12fdea38633a42d6d235520550b16bea0cd3fb67d198b1f956845f4057239d7f80fa961e37f6f8bad9fb03f29ff8c6ffab4f4ae7402eea3083dfddeaf39687e3' + 'ff401339039a384be38fe1897300bdd6641b9963ff8c2094e8871ae64b2ff5841f177bb0e74b2248716853b107e7ba2ecac465efb33d021d12c8b9df5d67381e') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --with-freetype + make all +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/msgpack-c/PKGBUILD b/msgpack-c/PKGBUILD new file mode 100644 index 0000000..9e30a3e --- /dev/null +++ b/msgpack-c/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=msgpack-c +pkgver=3.3.0 +_debver=3.3.0 +_debrel=4 +pkgrel=1 +pkgdesc='An efficient object serialization library' +arch=('i686' 'x86_64') +url='https://msgpack.org/' +license=('Boost-1.0') +depends=('glibc') +makedepends=('cmake' 'quilt') +source=("https://github.com/msgpack/msgpack-c/releases/download/cpp-${pkgver}/msgpack-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/msgpack-c/msgpack-c_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ad3e32edc8c6afd70282b3d4b493c2ffe74a697c41bd1f39030c5b4752cccefaa965bc049d4c2e63103a210bf714dc3bddd474691bc067d1475ae017593f55e6' + '6fddd15b681a5f10d3013122e5dc3b8f33bf6756cc77fa9a9d10e66a3d47136acb38158daf6d4d4e06cb7f4054109c2b2c3f2e89a4a237c577e17433120e5862') + +prepare() { + cd "msgpack-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "msgpack-${pkgver}" + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DBUILD_SHARED_LIBS=ON \ + -DMSGPACK_ENABLE_STATIC=OFF \ + -DMSGPACK_CXX11=ON \ + -DMSGPACK_BUILD_EXAMPLES=OFF \ + . + make +} + +package() { + cd "msgpack-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE_1_0.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/msmtp/PKGBUILD b/msmtp/PKGBUILD new file mode 100644 index 0000000..228e38b --- /dev/null +++ b/msmtp/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Jesus E. + +pkgbase=msmtp +pkgname=('msmtp' 'msmtp-mta') +pkgver=1.8.11 +_debver=$pkgver +_debrel=2.1 +pkgrel=2 +pkgdesc="A mini smtp client" +arch=('i686' 'x86_64') +url='https://marlam.de/msmtp/' +license=('GPL-3') +makedepends=('gsasl' 'quilt') +source=("https://marlam.de/msmtp/releases/${pkgbase}-${pkgver}.tar.xz"{,.sig} + "https://deb.debian.org/debian/pool/main/m/msmtp/msmtp_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('77595ca3d06781aa908677edae08bef92840e69dde5db8eedb555327b671d87cde441181fa17342f5b9492e76f0520a49bfa86dafce9d93844137ae7f96eac16' + 'SKIP' + '789b3ba7431df96ed5012c03261efc96eabd23914731c74bdec732c16c5fe627f323be03eb723d877193f2f0f5431a7680abe480c9848764fc0dec9e85e0db1c') +validpgpkeys=('2F61B4828BBA779AECB3F32703A2A4AB1E32FD34') # Martin Lambers + +prepare() { + cd $pkgbase-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgbase-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-libgsasl + make +} + +package_msmtp() { + pkgdesc="A mini smtp client" + depends=('gsasl') + + cd $pkgbase-$pkgver + make DESTDIR="$pkgdir" install + + # Installing example configs and scripts to /usr/share/doc/msmtp + # as they are not installed by default (Debian and Gentoo do it this way) + install -d "$pkgdir"/usr/share/doc/msmtp + cp -r scripts/{find_alias,msmtpqueue,msmtpq,set_sendmail} "$pkgdir"/usr/share/doc/msmtp/ + install -D -m644 doc/*.example "$pkgdir"/usr/share/doc/msmtp/ + + install -D -m644 scripts/vim/msmtp.vim "$pkgdir"/usr/share/vim/vimfiles/syntax/msmtp.vim + + chmod 755 "$pkgdir"/usr/share/doc/msmtp/{find_alias,msmtpqueue,set_sendmail}/*.sh + chmod 755 "$pkgdir"/usr/share/doc/msmtp/msmtpq/msmtp* + + install -D -m644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_msmtp-mta() { + pkgdesc="A mini smtp client - the regular MTA" + depends=('msmtp') + provides=('smtp-forwarder') + conflicts=('smtp-forwarder') + + install -d "$pkgdir"/usr/bin + ln -s msmtp "$pkgdir"/usr/bin/sendmail + + install -D -m644 "$pkgbase-$pkgver/COPYING" -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/mtdev/PKGBUILD b/mtdev/PKGBUILD new file mode 100644 index 0000000..938df2d --- /dev/null +++ b/mtdev/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=mtdev +pkgver=1.1.6 +pkgrel=1 +pkgdesc="A stand-alone library which transforms all variants of kernel MT events to the slotted type B protocol" +arch=('i686' 'x86_64') +url="https://bitmath.org/code/mtdev/" +license=('Expat') +depends=('glibc') +source=("https://bitmath.org/code/mtdev/$pkgname-$pkgver.tar.bz2") +sha512sums=('859fb0803f330ecaae69f80713ff5a5235c0cb00de6d5ac2717ad82cea856a92b866f0c272ecfe743186abcf925f95585149ba4828b4c91555cfeb2f2a1c98f1') + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd "$pkgname-$pkgver" + make -k check +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + + # license + install -Dm644 COPYING \ + "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/mtools/PKGBUILD b/mtools/PKGBUILD new file mode 100644 index 0000000..e3f58b5 --- /dev/null +++ b/mtools/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=mtools +pkgver=4.0.32 +pkgrel=1 +pkgdesc="A collection of utilities to access MS-DOS disks" +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/mtools/' +license=('GPL-3') +depends=('sh' 'glibc') +makedepends=('libx11' 'texinfo') +optdepends=('libx11: required by floppyd' + 'libxau: required by floppyd') +backup=('etc/mtools.conf') +source=("https://ftp.gnu.org/gnu/mtools/${pkgname}-${pkgver}.tar.bz2") +sha512sums=('a66e7483c422abdaddbe9e6b2cd0ecc2f87b0bc4f40929ac2e4db8b8d88cfacf118b126cba3207307bff376d5572170a1ee5803618de0544f68d420ed06bcab9') + +prepare() { + cd "${pkgname}-${pkgver}" + # comment entry in default config + sed -e '/^SAMPLE FILE$/s:^:# :' -i mtools.conf +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --sysconfdir=/etc + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -vDm 644 mtools.conf -t "${pkgdir}/etc/" + install -vDm 644 {README,NEWS} -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/mupdf/PKGBUILD b/mupdf/PKGBUILD new file mode 100644 index 0000000..8470988 --- /dev/null +++ b/mupdf/PKGBUILD @@ -0,0 +1,130 @@ +# Maintainer: Jesus E. + +pkgbase=mupdf +pkgname=('libmupdf' 'mupdf' 'mupdf-gl' 'mupdf-tools') +pkgver=1.17.0 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc='Lightweight PDF and XPS viewer' +arch=('i686' 'x86_64') +url='https://mupdf.com/' +license=('AGPL-3') +makedepends=('desktop-file-utils' 'freetype2' 'freeglut' 'glu' 'harfbuzz' + 'jbig2dec' 'libjpeg-turbo' 'mesa-libgl' 'openjpeg2' 'libxext' 'quilt') +# we need static libs for zathura-pdf-mupdf +options=('staticlibs') +source=("https://mupdf.com/downloads/archive/mupdf-${pkgver/_/}-source.tar.xz" + "https://deb.debian.org/debian/pool/main/m/mupdf/mupdf_${_debver}+ds1-${_debrel}.debian.tar.xz") +sha512sums=('39188e6ce3eaefb525b2c32767c4bf52ed881b41889edef086aa64bfe1c38e6f3cb853450c8284d175ef8854f32e9bc67415a692048ead26cf31c35645f9e0e5' + 'af31334b22e30b5d91329c277c1f5a865393700eea7fc7a9651c7291c3a7f65485d0c1f67f4262b03e55cf1035d4e204e24f19969566b374195ad2021c7e94f5') + +prepare() { + cd $pkgbase-${pkgver/_/}-source + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0003-use-debian-flavor-build-options.patch || true + rm -v debian/patches/0010-Prevent-thirdparty-archive-build.patch || true + + quilt push -av + fi + + # remove bundled packages, we want our system libraries + rm -rf thirdparty/{freeglut,freetype,harfbuzz,jbig2dec,libjpeg,openjpeg,zlib} +} + +build() { + CFLAGS+=' -fPIC' + CXXFLAGS+=' -fPIC' + export CFLAGS CXXFLAGS + + USE_SYSTEM_LIBS='yes' + export USE_SYSTEM_LIBS + + cd $pkgbase-${pkgver/_/}-source + make build=release libs apps +} + +package_libmupdf() { + pkgdesc='Library for Lightweight PDF and XPS viewer' + + cd $pkgbase-${pkgver/_/}-source + + make build=release prefix="$pkgdir"/usr install + + install -D -m0644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING + + rm -rf "$pkgdir"/usr/{bin,share/man} + mv "$pkgdir"/usr/share/doc/mupdf "$pkgdir"/usr/share/doc/libmupdf + + find "$pkgdir"/usr/include "$pkgdir"/usr/share "$pkgdir"/usr/lib \ + -type f -exec chmod 0644 {} + +} + +package_mupdf() { + pkgdesc='Lightweight PDF and XPS viewer' + depends=('desktop-file-utils' 'freetype2' 'harfbuzz' 'jbig2dec' + 'libjpeg-turbo' 'openjpeg2' 'libressl' 'libxext') + + cd $pkgbase-${pkgver/_/}-source + + install -D -m0644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING + + install -D -m0755 build/release/mupdf-x11 "$pkgdir"/usr/bin/mupdf + + install -D -m0644 docs/man/mupdf.1 "$pkgdir"/usr/share/man/man1/mupdf.1 + + install -d "$pkgdir"/usr/share/doc/mupdf + install -m0644 README CHANGES "$pkgdir"/usr/share/doc/mupdf + + install -D -m0644 debian/mupdf.desktop -t "$pkgdir"/usr/share/applications + install -D -m0644 debian/mupdf.png -t "$pkgdir"/usr/share/pixmaps +} + +package_mupdf-gl() { + pkgdesc='Lightweight PDF and XPS viewer with OpenGL backend' + conflicts=('mupdf') + provides=("mupdf=${pkgver}") + depends=('desktop-file-utils' 'freetype2' 'freeglut' 'glu' 'harfbuzz' 'jbig2dec' + 'libjpeg-turbo' 'openjpeg2' 'libressl') + + cd $pkgbase-${pkgver/_/}-source + + install -D -m0644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING + + install -D -m0755 build/release/mupdf-gl "$pkgdir"/usr/bin/mupdf + + install -D -m0644 docs/man/mupdf.1 "$pkgdir"/usr/share/man/man1/mupdf.1 + + install -d "$pkgdir"/usr/share/doc/mupdf + install -m0644 README CHANGES "$pkgdir"/usr/share/doc/mupdf + + install -D -m0644 debian/mupdf.desktop -t "$pkgdir"/usr/share/applications + install -D -m0644 debian/mupdf.png -t "$pkgdir"/usr/share/pixmaps +} + +package_mupdf-tools() { + pkgdesc='Tools for Lightweight PDF and XPS viewer' + depends=('mupdf') + depends=('freetype2' 'jbig2dec' 'libjpeg-turbo' 'openjpeg2' 'harfbuzz' 'libressl') + + cd $pkgbase-${pkgver/_/}-source + + install -D -m0644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING + + install -D -m0755 build/release/mutool "$pkgdir"/usr/bin/mutool + install -D -m0755 build/release/muraster "$pkgdir"/usr/bin/muraster + + install -D -m0644 docs/man/mutool.1 "$pkgdir"/usr/share/man/man1/mutool.1 + + install -d "$pkgdir"/usr/share/doc/mupdf-tools + install -m0644 README CHANGES "$pkgdir"/usr/share/doc/mupdf-tools +} diff --git a/muse/PKGBUILD b/muse/PKGBUILD new file mode 100644 index 0000000..d4ab2de --- /dev/null +++ b/muse/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=muse +pkgver=3.1.1 +pkgrel=1 +_debver=3.1.1 +_debrel=1 +pkgdesc="A digital audio workstation with support for both Audio and MIDI" +arch=('x86_64' 'i686') +url="https://github.com/muse-sequencer/muse/" +license=('GPL-2') +depends=('qt-base' 'qt-svg' 'python' 'python-pyqt' 'gtkmm' 'alsa-lib' 'jack' 'rtaudio' 'libsamplerate' 'libsndfile' + 'libinstpatch' 'liblrdf' 'sord' 'lv2' 'lilv' 'fluidsynth' 'rubberband' 'dssi') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/muse-sequencer/${pkgname}/archive/${pkgname}_${pkgver//./_}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('a452bef94fb722f9a02c9450e9eb82f5667f4df0593a4f6b7f490c7ed77d7d6d1fde35d1e81e5493838fde0d7cdfaff523bd747ed16999b32d2fdef724f0b16c' + 'a6364a9b6884723c1988afe7e565363e3d96fc254686a4db75a2cf33823b351a1df41477ead989b342cd9c4cf2a0c4865e8dfb64b77cba1faa308402a631ebbb') + +prepare() { + mv -v ${pkgname}-{${pkgname}_${pkgver//./_},${pkgver}} && cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index" + export QUILT_DIFF_ARGS="--no-timestamps" + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant. + rm -v debian/patches/0005-Python-3-porting.patch || true + rm -v debian/patches/0007-Add-keywords-to-desktop-file.patch || true + + quilt push -av + fi + # Add keywords into a desktop shortcut file. + echo "Keywords=audio;sound;jackd,DAW,multitrack,ladspa,lv2,midi" >> muse3/packaging/org.musesequencer.Muse3.desktop.in +} + +build() { + cd ${pkgname}-${pkgver}/muse3 + + cmake \ + -DCMAKE_BUILD_TYPE='None' \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_LASH=OFF \ + -DENABLE_PYTHON=ON \ + -DENABLE_LV2_GTK2=OFF \ + -Wno-dev -B build + make VERBOSE=1 -C build +} + +package() { + cd ${pkgname}-${pkgver}/muse3 + + make DESTDIR=${pkgdir} VERBOSE=1 install -C build + install -dv ${pkgdir}/usr/share/licenses/${pkgname} + mv -v ${pkgdir}/usr/share/{doc/${pkgname}/COPYING,licenses/${pkgname}} + mv -v ${pkgdir}/usr/share/{doc/${pkgname}/*LICENSE,licenses/${pkgname}} +} diff --git a/musepack/PKGBUILD b/musepack/PKGBUILD new file mode 100644 index 0000000..b5b5eeb --- /dev/null +++ b/musepack/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgbase=musepack +pkgname=('musepack-tools' 'libmpcdec') +pkgver=0.1~r495 +_debver=$pkgver +_debrel=2 +pkgrel=2 +epoch=1 +_rel=495 +pkgdesc="MusePack commandline utilities and decoder library" +arch=('i686' 'x86_64') +url='https://musepack.net/' +license=('LGPL-2.1' 'Modified-BSD' 'GPL-2') +depends=('glibc') +makedepends=('libreplaygain' 'libcue' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/libm/libmpc/libmpc_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/libm/libmpc/libmpc_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('89fa7729c469873a1839c6e6c8c2d994af5acd7170f8bf11f8c55e09700f64fe6476b189f9842d4c8cc575370dc4b0eb13e9c1495195e03906dab476fff7b047' + '9398122cba3a884752007a8aeb845cd8f944e475486b2ed1829ddc91f1b32f458d756392d16cc7e07f72fdb27ebbf3313db0a03aca859598f5789977077226c4') + +prepare() { + cd musepack_src_r${_rel} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + mv configure.in configure.ac + autoreconf -fi +} + +build() { + cd musepack_src_r${_rel} + ./configure \ + --prefix=/usr \ + --enable-mpcchap + make +} + +package_libmpcdec() { + pkgdesc="MusePack decoding library" + + cd musepack_src_r${_rel} + make -C include DESTDIR="${pkgdir}" install + make -C libmpcdec DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t ${pkgdir}/usr/share/licenses/${pkgname} +} + +package_musepack-tools() { + depends=('libcue' 'libreplaygain' "libmpcdec>=$epoch:$pkgver") + pkgdesc="MusePack commandline tools" + options=(!emptydirs) + + cd musepack_src_r${_rel} + make DESTDIR="${pkgdir}" install + make -C libmpcdec DESTDIR="${pkgdir}" uninstall + make -C include DESTDIR="${pkgdir}" uninstall + install -Dm644 debian/copyright -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/mustach/PKGBUILD b/mustach/PKGBUILD new file mode 100644 index 0000000..278ed1d --- /dev/null +++ b/mustach/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=mustach +pkgver=1.2.10 +pkgrel=1 +pkgdesc="A C implementation of the {{mustache}} template specification" +arch=('i686' 'x86_64') +url='https://gitlab.com/jobol/mustach/' +license=('ISC') +depends=('json-c') +source=("https://gitlab.com/jobol/mustach/-/archive/$pkgver/$pkgname-$pkgver.zip") +sha512sums=('f5d70b54bc0d9518f8126e209c466d7476f4a0865d52cc20356ef16fff8e4b403ec14a88c7be23e56230b42b129c4204cc89f0e1d8477f2457696d5d14a1e1f0') + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" PREFIX=/usr install + install -Dm644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname/" +} diff --git a/mustpl/PKGBUILD b/mustpl/PKGBUILD new file mode 100644 index 0000000..0e71ffc --- /dev/null +++ b/mustpl/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=mustpl +pkgver=0.1.1 +pkgrel=1 +pkgdesc="Logic-less templating tool for the commandline" +arch=('i686' 'x86_64') +url='https://github.com/tarampampam/mustpl' +license=('Expat') +depends=('mustach') +options=('strip') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/tarampampam/mustpl/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('f8a734ad056dda4aecea344d532c36394b2bdfed4e03e71f3773efed576c2189ae0719d14182b1887da9b589d6eb8f958a317fecca994e8848f588bc599b3934') + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + install -Dm755 $pkgname -t "$pkgdir/usr/bin" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mutt/PKGBUILD b/mutt/PKGBUILD new file mode 100644 index 0000000..6fd434f --- /dev/null +++ b/mutt/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Jesus E. + +pkgname=mutt +pkgver=2.0.5 +_debver=$pkgver +_debrel=4.1 +pkgrel=2 +pkgdesc="Small but very powerful text-based mail client" +url='http://www.mutt.org/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('gdbm' 'glibc' 'libgpg-error' 'libressl' 'libsasl' 'mime-types' 'krb5' 'sqlite' 'zlib') +makedepends=('docbook-xml' 'docbook-xsl' 'elinks' 'git-legacy' 'gpgme' 'libidn2' 'lynx' 'ncurses' 'libxslt' 'quilt') +optdepends=('perl: for smime_keys' + 'python: for experimental mutt_oath2.py' + 'smtp-forwarder: to send mail') +backup=('etc/Muttrc') +source=("https://deb.debian.org/debian/pool/main/m/mutt/mutt_${pkgver}.orig.tar.gz"{,.asc} + "https://deb.debian.org/debian/pool/main/m/mutt/mutt_${_debver}-${_debrel}+deb11u3.debian.tar.xz") +sha512sums=('41849d700b88e1b28b51fb90be2a9f6b639e8b111dce914073b66327e4655b5d4ca04dc3aedf2d44a0aa1a80ac3c4fcca6058eae7fb4f71f6b506fbe00a2a740' + 'SKIP' + 'b964776220d12a5cbf56336543f36afa385ca43d276741b73a4cceef0cd3552bfceb5c2bbf8885070f04ab8be55754eb4d7538972d85989deb6dbeb403b5c1e2') +validpgpkeys=('8975A9B33AA37910385C5308ADEF768480316BDA') # Kevin J. McCarthy + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/debian-specific/467432-write_bcc.patch || true + rm -v debian/patches/debian-specific/566076-build_doc_adjustments.patch || true + rm -v debian/patches/debian-specific/document_debian_defaults.patch || true + rm -v debian/patches/debian-specific/use_usr_bin_editor.patch || true + rm -v debian/patches/debian-specific/Muttrc.patch || true + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --enable-debug \ + --enable-gpgme \ + --enable-pop \ + --enable-imap \ + --enable-smtp \ + --enable-hcache \ + --enable-sidebar \ + --enable-autocrypt \ + --with-curses=/usr \ + --with-gss=/usr \ + --with-ssl=/usr \ + --with-sqlite3 \ + --with-sasl \ + --with-idn2 + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -vDm 644 contrib/gpg.rc "${pkgdir}/etc/Muttrc.gpg.dist" + + # /etc/mime.types is provided by mailcap + rm "${pkgdir}"/etc/mime.types{,.dist} + + install -vDm 644 GPL -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/mxml/PKGBUILD b/mxml/PKGBUILD new file mode 100644 index 0000000..40b8ba6 --- /dev/null +++ b/mxml/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=mxml +pkgver=3.2 +_debver=3.2 +_debrel=1 +pkgrel=1 +pkgdesc='A small XML parsing library' +arch=('i686' 'x86_64') +url='https://www.msweet.org/mxml' +license=('Apache-2.0') +depends=('glibc') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/michaelrsweet/${pkgname}/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mxml/mxml_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ed3f2b361394ef225a708b0032976a3d191d5eaea3022e190b29e0ee140e8f998f1d65c64e4898872b169516cee44f4f5f18401c6410c3b5aa1e9680b23e8675' + '47005138b24060bc914b1f28e6ce88962e8842c6aebd99b40dde06e030dcd33cc2a309af948c6cfe3ebb0c0d4c7520c288f9d03337d4bfe5a49334a58593c2fa') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --enable-shared + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DSTROOT="${pkgdir}" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/mygui/PKGBUILD b/mygui/PKGBUILD new file mode 100644 index 0000000..c8d6f03 --- /dev/null +++ b/mygui/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=mygui +pkgver=3.4.1 +pkgrel=1 +pkgdesc="A multilayer and overlappable GUI System" +arch=('i686' 'x86_64') +url='http://mygui.info/' +license=('Expat') +depends=('sdl2' 'sdl2_image' 'glu') +makedepends=('cmake' 'doxygen' 'graphviz' 'ttf-dejavu') +install=$pkgname.install +source=("https://github.com/MyGUI/mygui/archive/MyGUI${pkgver}.tar.gz") +sha512sums=('9d36272345b1a755db88848c8a0919feb6f8ae09d048efa3b8ed833bb5ddb9c65e1e7e0d26ad39eecd2a4de53fb654f4099c555e9ebd21ce9541a1a74580ef05') + +build() { + cd mygui-MyGUI${pkgver} + + # change CMake config so demos install to /opt + sed -i 's:"bin:"../opt/MYGUI:' ./CMake/Utils/MyGUIConfigTargets.cmake + sed -i -e 's:../share:/usr/share:' \ + -e 's:"bin":"../opt/MYGUI":' \ + ./CMake/InstallResources.cmake + + # generate CMake Makefile + cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DMYGUI_INSTALL_TOOLS=TRUE \ + -DMYGUI_INSTALL_DOCS=TRUE \ + -DMYGUI_INSTALL_MEDIA=TRUE \ + -DMYGUI_BUILD_DEMOS=TRUE \ + -DMYGUI_BUILD_TOOLS=TRUE \ + -DCMAKE_BUILD_TYPE=Release \ + -DMYGUI_RENDERSYSTEM=7 \ + -DBUILD_SHARED_LIBS=TRUE + + make -C build + make -C build api-docs +} + +package() { + cd mygui-MyGUI${pkgver} + + make -C build DESTDIR="$pkgdir" install + + # install license + install -Dm644 COPYING.MIT -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/mygui/mygui.install b/mygui/mygui.install new file mode 100644 index 0000000..8db799a --- /dev/null +++ b/mygui/mygui.install @@ -0,0 +1,3 @@ +post_install() { + echo "To view the MyGUI samples, go to /opt/MYGUI/ and run the samples individually" +} diff --git a/mypaint-brushes/PKGBUILD b/mypaint-brushes/PKGBUILD new file mode 100644 index 0000000..64c3a6a --- /dev/null +++ b/mypaint-brushes/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=mypaint-brushes +pkgver=2.0.2 +pkgrel=1 +pkgdesc='Brushes used by MyPaint and other software using libmypaint' +url="https://github.com/mypaint/$pkgname" +arch=(any) +license=(CC0-1.0) +depends=(libmypaint) +source=(https://github.com/mypaint/$pkgname/archive/v$pkgver/$pkgname-$pkgver.tar.gz) +sha512sums=('89cecd9d78f4de84ada97a3e33fd67b86dfd259880da15c0ecbfad0fceb8c3b0e93790f3c0bff0cc375959bdf6921b01d1f3646e27c3f961715219a349017556') + +prepare() { + cd $pkgname-$pkgver + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/mypaint-brushes1/PKGBUILD b/mypaint-brushes1/PKGBUILD new file mode 100644 index 0000000..c5f3012 --- /dev/null +++ b/mypaint-brushes1/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +_pkgname=mypaint-brushes +pkgname=${_pkgname}1 +# this version is a 1.3.0 with fixes and minor artwork changes, doen't need debian patches (package revised) +pkgver=1.3.1 +pkgrel=1 +pkgdesc='Brushes used by MyPaint and other software using libmypaint' +url="https://github.com/mypaint/$_pkgname" +arch=(any) +license=(CC0-1.0) +depends=(libmypaint) +source=(https://github.com/mypaint/$_pkgname/archive/v$pkgver/$_pkgname-$pkgver.tar.gz) +sha512sums=('3e65619ae9a042cd6314396a826a2b63a72066e761244dc8763910555715b1dff6aa4395b5322510b114d61bb486f909fe505a564c89a2a5e1e5087ed298d08b') + +prepare() { + cd $_pkgname-$pkgver + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $_pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $_pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/mypaint/PKGBUILD b/mypaint/PKGBUILD new file mode 100644 index 0000000..7d17dc9 --- /dev/null +++ b/mypaint/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=mypaint +pkgver=2.0.1 +pkgrel=3 +pkgdesc='Fast and easy painting application for digital painters, with brush dynamics' +arch=(i686 x86_64) +url="http://$pkgname.org/" +license=(GPL-2) +# use runtime dependencies like: desktop-file-utils and gtk-update-icon-cache +depends=(desktop-file-utils gtk-update-icon-cache mypaint-brushes python-numpy python-pycairo python-pygobject) +makedepends=(python-setuptools swig) +source=(https://github.com/mypaint/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.xz) +sha512sums=('449beddcc6da5d720c9efbeac94a466ed0057bd1962d42ebb419190e8b7fd8ffd341327408467fc5da47920f9d0da1fd6d78233a0dda88de5f5d52d53d9ab562') + +build() { + cd $pkgname-$pkgver + python setup.py build +} + +package() { + cd $pkgname-$pkgver + python setup.py install --root=$pkgdir --optimize=1 --skip-build + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/mypy/PKGBUILD b/mypy/PKGBUILD new file mode 100644 index 0000000..e3a0566 --- /dev/null +++ b/mypy/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=mypy +pkgver=0.812 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="Optional static typing for Python (PEP484)" +url='https://www.mypy-lang.org/' +arch=('any') +license=('Expat' 'Python') +depends=('python-psutil' 'python-typed-ast' 'python-mypy_extensions' 'python-typing_extensions' 'python-toml') +makedepends=('python-setuptools' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/python/mypy/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/$pkgname/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ee89f56a7a01214540f9b727f153a075a097b161b7f654d926d1080ae540ec68303629a4fe691fcb53d37c3eb08924bf01d22cdf1c3761b414a3bc40af3363e6' + '271cd28953813926d9d2e703f2d3ac6ba75251e4b27087004529adadddbdde8a72031d8808afe6b10b7cb16c405611e4c45af0819427ea1c483aa048ba2a3e36') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + export PYTHONHASHSEED=0 + python setup.py build +} + +package() { + cd "$pkgname-$pkgver" + python setup.py install --prefix="/usr" --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/naev/PKGBUILD b/naev/PKGBUILD new file mode 100644 index 0000000..964dda4 --- /dev/null +++ b/naev/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=naev +pkgver=0.8.2 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="2D action/rpg space game" +arch=('i686' 'x86_64') +url='https://github.com/naev/naev' +license=('GPL-3') +depends=('glu' 'openal' 'libvorbis' 'sdl2' 'sdl2_image' 'sdl2_mixer' 'mesa-libgl' + 'libxml2' 'freetype2' 'libpng' 'libzip' 'luajit' 'suitesparse') +makedepends=('freeglut' 'zip' 'meson' 'quilt') +groups=('games') +source=("$pkgname-$pkgver.tar.gz::https://github.com/naev/naev/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/n/naev/naev_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('c37a514dbe7ed1bca21563d20a4bb05892a07ee437eeaddefe00b5abe7009c2671da3c587db19bc8f1407db4ff3518f0cf5b28cb095778ba61946dcf87f61e5e' + '45ca8729d7931bc732852429d6f8b8a5356d8ffad0b5a7e33bd93a490412dc6f82dc92f4d2b91393ab1597736831e6c2338480490304ed8a17074277b51445f9') + +prepare() { + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + + meson setup -Dprefix=/usr -Dbindir=/usr/games -Dndata_path=/usr/share/games/naev/ndata build . + cd build + meson compile +} + +package() { + cd "$pkgname-$pkgver/build" + + DESTDIR="$pkgdir" meson install + + # correct folder-structure within package + cp "$pkgdir/usr/share/$pkgname/"{$pkgname.png,$pkgname-confupdate.sh} "$pkgdir/usr/share/games/$pkgname/" + rm -rf "$pkgdir/usr/share/$pkgname/" + + # license + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/nasm/PKGBUILD b/nasm/PKGBUILD new file mode 100644 index 0000000..ff7049a --- /dev/null +++ b/nasm/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=nasm +pkgver=2.15.05 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc='80x86 assembler designed for portability and modularity' +url='https://www.nasm.us' +arch=('i686' 'x86_64') +license=('Simplified-BSD') +depends=('glibc') +makedepends=('perl-font-ttf' 'perl-sort-versions' 'fontconfig' 'ttf-liberation' 'ghostscript' 'xmlto' 'asciidoc' 'quilt') +source=(https://www.nasm.us/pub/nasm/releasebuilds/${pkgver}/${pkgname}-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/n/nasm/nasm_$_debver-$_debrel.debian.tar.xz) +sha512sums=('512f90a2584f1c5811429274b97c64a2cedf37b9fdeffb1bcd0ea64afd9ecc19a2d7877ca8f1e05393aa324153fc9f39ea51dacbf8d25a7d5a2d7728c925dba7' + '79895abded2a366ce5e051b2a9e8538758380e300bb2c1a6c8d72dbfdd2924c23850cc9a08b73ca6955a2b05ebd919af1264eb59f8b41ecbabe53ac4914986a2') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make + make -C doc +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install install_rdf + install -Dm 644 LICENSE -t "${pkgdir}"/usr/share/licenses/nasm +} diff --git a/nbd/PKGBUILD b/nbd/PKGBUILD new file mode 100644 index 0000000..450ee00 --- /dev/null +++ b/nbd/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + + +pkgname='nbd' +pkgver='3.21' +pkgrel='1' +pkgdesc='Tools for network block devices' +pkgdesc+=', allowing you to use remote block devices over TCP/IP' +arch=('i686' 'x86_64') +url='https://nbd.sourceforge.io/' +license=('GPL-2') +depends=('glib2' 'gnutls' 'libnl') +backup=('etc/nbd-server/config') +source=("https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.xz" + 'config' 'nbd-client.confd' 'nbd-client.initd' + 'nbd-server.confd' 'nbd-server.initd') +install="${pkgname}.install" +sha512sums=('5dc238e6f45eb230a6f92493a8c3b4891dee98fc47e120e59c3ca31c0a698537ca03f78e43c5e7089d93d548a22b5e3853ba228536d2fc688c3edf4a590fdb3f' + 'e9247fcf12d477ffda2eadbb5217daab13051adc727eb5a8bccb284306d57d50e68dedcd812925f305136c76326d2f3b8066f0bb57492e62113ec0d73ff08fc1' + '5c7a15ed23fee269f51a32213b93c23d9deb26091f4ec31920db0c315097a74538ace0d9ab547e8bedeaa751e86364645518d83002cb665685953e486e18545d' + '00d46669ca9ffcd43eb79641743ec4313143347ab1bb6a608f6bf005dcb916ebf69010b34a6c958462e424427581e222ae839d6a9256358c427c48dbaab14c71' + '4d04962035e50a1e561fc29b8853675db5b28e830ef62b5e3328f79ef8c7d9ecd34196518cd78e2b3244fb895ae93d0ff779d9955cb58ed0370ac89d019cbadc' + '19074b4d83f7201324549b1eaa35f0af96656eae4ec8010a84b30db97d601c51ef4a56576d30181ef6ae2a92c47fd1e3ae38e53d51655d9eeebe6c1c6b8ec962') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix='/usr' \ + --sysconfdir='/etc' \ + --enable-syslog + + make V='1' +} + +# checks still fail... +#check() { +# cd "${srcdir}/${pkgname}-${pkgver}" +# +# make 'check' +#} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" 'install' + + install -Dm '644' "${srcdir}/config" -t "${pkgdir}/etc/nbd-server" + for i in "${pkgname}-client.confd" "${pkgname}-server.confd"; do + install -Dm '644' "${srcdir}/${i}" -t "${pkgdir}/etc/conf.d" + done + for i in "${pkgname}-client.initd" "${pkgname}-server.initd"; do + install -Dm '644' "${srcdir}/${i}" -t "${pkgdir}/etc/init.d" + done + unset i + + install -Dm '644' 'doc/README' -t "${pkgdir}/usr/share/doc/${pkgname}/" + install -Dm '644' 'COPYING' -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/nbd/config b/nbd/config new file mode 100644 index 0000000..d0c6eda --- /dev/null +++ b/nbd/config @@ -0,0 +1,21 @@ +[generic] + # The [generic] section is required, even if nothing is specified + # there. + # When either of these options are specified, nbd-server drops + # privileges to the given user and group after opening ports, but + # _before_ opening files. + user = nbd + group = nbd +[export1] + exportname = /export/nbd/export1-file + authfile = /export/nbd/export1-authfile + timeout = 30 + filesize = 10000000 + readonly = false + multifile = false + copyonwrite = false + prerun = dd if=/dev/zero of=%s bs=1k count=500 + postrun = rm -f %s +[otherexport] + exportname = /export/nbd/experiment + # The other options are all optional. diff --git a/nbd/nbd-client.confd b/nbd/nbd-client.confd new file mode 100644 index 0000000..a4d76e1 --- /dev/null +++ b/nbd/nbd-client.confd @@ -0,0 +1,10 @@ +# /etc/conf.d/nbd-client + +# Options to pass to the above command +# This default setting should work fine. +NBDCLIENT_OPTS="" + +# If you use hostnames above, then you should depend on dns +# being up & running before we try to run. Otherwise, you +# can disable this. +rc_use="dns" diff --git a/nbd/nbd-client.initd b/nbd/nbd-client.initd new file mode 100644 index 0000000..6931685 --- /dev/null +++ b/nbd/nbd-client.initd @@ -0,0 +1,31 @@ +#!/sbin/openrc-run +# Copyright 2022 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +depend() { + before 'cron' 'portmap' + after 'net' 'openvpn' + use 'dns' 'logger' +} + +checkconfig() { + if ! type nbd-client > '/dev/null' 2>&1; then + eerror 'Please edit /etc/conf.d/nbd-client' + eerror "Unable to locate the client command ${NBDCLIENT_CMD}!" + return '1' + fi + if [ -z "${NBDCLIENT_OPTS}" ]; then + eerror 'Please edit /etc/conf.d/nbd-client' + eerror 'I need to know what server/options to use!' + return '1' + fi + return '0' +} + +start() { + checkconfig || return "${?}" + + ebegin "Setting the NBD client '${NBDCLIENT_CMD}'" + nbd-client "${NBDCLIENT_OPTS}" + eend "${?}" 'Failed to setup' +} diff --git a/nbd/nbd-server.confd b/nbd/nbd-server.confd new file mode 100644 index 0000000..d4ab6ff --- /dev/null +++ b/nbd/nbd-server.confd @@ -0,0 +1,6 @@ +# /etc/conf.d/nbd-server + +# Options to pass to the nbd-server process +# Most people should leave this line alone ... +# however, if you know what you're doing, feel free to tweak +NBD_OPTS="" diff --git a/nbd/nbd-server.initd b/nbd/nbd-server.initd new file mode 100644 index 0000000..274dd48 --- /dev/null +++ b/nbd/nbd-server.initd @@ -0,0 +1,21 @@ +#!/sbin/openrc-run +# Copyright 2022 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description='nbd - the network block devices server' +pidfile='/run/nbd-server.pid' +command='/usr/bin/nbd-server' +command_args="${NBD_OPTS}" +start_stop_daemon_args="--pidfile ${pidfile}" + +depend() { + use net dns logger +} + +start_pre() { + if [ ! -f /etc/nbd-server/config ]; then + eerror 'Please create /etc/nbd-server/config' + return '1' + fi + return '0' +} diff --git a/nbd/nbd.install b/nbd/nbd.install new file mode 100644 index 0000000..311098f --- /dev/null +++ b/nbd/nbd.install @@ -0,0 +1,15 @@ +#!/bin/sh + +post_install() { + getent group 'nbd' &> '/dev/null' || groupadd 'nbd' > '/dev/null' + getent passwd 'nbd' &> '/dev/null' || useradd -g 'nbd' -d '/var/empty' \ + -c 'Network Block Devices' -s '/bin/nologin' 'nbd' > '/dev/null' + nbd_shell="$(getent passwd 'ntp' | cut -d: -f7)" + if [ "${nbd_shell}" != '/bin/nologin' ]; then + chsh -s '/bin/nologin' 'nbd' &> '/dev/null' + fi +} + +post_upgrade(){ + post_install +} diff --git a/ncdu/PKGBUILD b/ncdu/PKGBUILD new file mode 100644 index 0000000..8082306 --- /dev/null +++ b/ncdu/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=ncdu +pkgver=1.16 +pkgrel=1 +pkgdesc="Disk usage analyzer with an ncurses interface" +arch=('i686' 'x86_64') +url="https://dev.yorhel.nl/ncdu" +license=('Expat') +depends=('ncurses') +source=("https://dev.yorhel.nl/download/${pkgname}-${pkgver}.tar.gz"{,.asc}) +sha512sums=('ac8b7e573332e4e006bf743224096b697517b6899744f189ea5a31665c1ef5e50c7fdaaa0a50a8d7bc3d471656f1f1c6681c21368bdaf983257d8cc311a0dfd0' + 'SKIP') +validpgpkeys=('74460D32B80810EBA9AFA2E962394C698C2739FA') + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/ncmpc-legacy/PKGBUILD b/ncmpc-legacy/PKGBUILD new file mode 100644 index 0000000..7729099 --- /dev/null +++ b/ncmpc-legacy/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +_realpkgname=ncmpc +pkgname=$_realpkgname-legacy +pkgver=0.47 +pkgrel=1 +pkgdesc="Fully featured MPD client which runs in a terminal (legacy version)" +arch=('i686' 'x86_64') +url='https://www.musicpd.org/clients/ncmpc/' +license=('GPL-2') +depends=('gcc-libs' 'glibc' 'pcre2' 'libmpdclient' 'ncurses') +makedepends=('boost' 'libmpdclient' 'meson' 'ncurses' 'python-sphinx' 'intltool' 'gettext-tiny') +optdepends=('python-requests: for lyrics script') +source=("https://www.musicpd.org/download/${_realpkgname}/${pkgver%.*}/${_realpkgname}-${pkgver}.tar.xz") +sha512sums=('6c9990ca9a0781eef67fae8b20ceec5fc00177b1db2b08cfdf122dd1f61f87a92030baadcaac154d73ddee622c963481d4e37d46f76a4ef21e51d4f18a6f3e6a') + +build() { + cd "${_realpkgname}-${pkgver}" + hyperbola-meson -D lyrics_screen=true -D chat_screen=true -D lirc=disabled build + ninja -C build +} + +package() { + cd "${_realpkgname}-${pkgver}" + DESTDIR="${pkgdir}" ninja -C build install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ncmpcpp/PKGBUILD b/ncmpcpp/PKGBUILD new file mode 100644 index 0000000..4a04670 --- /dev/null +++ b/ncmpcpp/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=ncmpcpp +pkgver=0.9.2 +pkgrel=2 +pkgdesc='Almost exact clone of ncmpc with some new features' +url='https://ncmpcpp.rybczak.net/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('curl' 'libmpdclient' 'fftw' 'boost-libs' 'icu' 'glibc' + 'gcc-libs' 'ncurses' 'readline' 'taglib') +makedepends=('boost') +source=(https://rybczak.net/ncmpcpp/stable/${pkgname}-${pkgver}.tar.bz2) +sha512sums=('bbcb3b50233e363412af3c1cf1c0118122733dc376759cd35dee79950f42e098a0402ff670684df91847b990b26022630c9a71192e462bd46e70628e31489742') + +prepare() { + cd ${pkgname}-${pkgver} + autoreconf -fiv + sed -e 's/CXXFLAGS=/CXXFLAGS+=/' \ + -e 's/CPPFLAGS=/CPPFLAGS+=/' \ + -e 's/LDFLAGS=/LDFLAGS+=/' \ + -i extras/Makefile +} + +build() { + cd ${pkgname}-${pkgver} + + # http://site.icu-project.org/download/61#TOC-Migration-Issues + export CPPFLAGS+=' -DU_USING_ICU_NAMESPACE=1' + + # Work around deprecated TagLib::String::null from TagLib 1.12 + CXXFLAGS+=' -Wno-error=deprecated-declarations' + + BOOST_LIB_SUFFIX='' ./configure \ + --prefix=/usr \ + --enable-clock \ + --enable-outputs \ + --enable-visualizer \ + --with-fftw \ + --with-taglib + make + make -C extras +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 755 extras/artist_to_albumartist -t "${pkgdir}/usr/bin" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ncompress/PKGBUILD b/ncompress/PKGBUILD new file mode 100644 index 0000000..b2a68b5 --- /dev/null +++ b/ncompress/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=ncompress +pkgver=4.2.4.6 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="A fast, simple, free and libre LZW file compressor" +arch=('i686' 'x86_64') +url='https://github.com/vapier/ncompress' +license=('Unlicense') +provides=('compress') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/n/ncompress/ncompress_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/n/ncompress/ncompress_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('03dd9670c48548d6f7a028dd307758ce7ac61997297c1075d65457ac849e8f2d710bc38fa9eb42e4b2cac163c1b93b7cf7eb197e90cbd689a1274df3de2a3ed8' + '71e4a439a7309707b3f892d575318e8d449c032dd64f0a21f117c3e133a05b7ac626dcf2d98ede0b72ca8359194d559b32ff0d58933f940f48d0de32374d9904') + +prepare() { + cd "${srcdir}"/${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + + make +} + +package() { + cd "${srcdir}"/${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" PREFIX=/usr install_core + rm -rf "${pkgdir}/usr/bin/" + install -Dm755 compress -t "${pkgdir}/usr/bin/" + ln -s compress "${pkgdir}/usr/bin/"uncompress.real + + install -Dm644 -t "${pkgdir}/usr/share/licenses/${pkgname}/" LZW.INFO UNLICENSE +} diff --git a/nedit/PKGBUILD b/nedit/PKGBUILD new file mode 100644 index 0000000..b2518c3 --- /dev/null +++ b/nedit/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=nedit +pkgver=5.7 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="A free software text editor for programmers and general users" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/nedit/' +license=('GPL-2') +depends=('openmotif') +makedepends=('quilt') +options=('!makeflags') +source=("https://sourceforge.net/projects/nedit/files/nedit-source/${pkgname}-${pkgver}-src.tar.gz" + "https://deb.debian.org/debian/pool/main/n/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('cf242d2f8eea4c78649dbeb741f545a3dc8ffaf5bb36239794a4b2635420e5445fa1c77472add79c05ec081d71a0b9df4431f48db365a71692e43869fd4e7932' + '6573ce8e5f610ed8482fe48e9c69fdb768365c9e0c246b15aee114608f0984c3ca4c782de71dd1e33746449b660bb4fa656dea995c557790638652c06a4f262f') + +prepare() { + cd ${pkgname}-${pkgver/a/} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i 's|"/bin/csh"|"/bin/sh"|' source/preferences.c +} + +build() { + cd ${pkgname}-${pkgver/a/} + make CFLAGS+="${CFLAGS} -DBUILD_UNTESTED_NEDIT" linux docs +} + +package() { + cd ${pkgname}-${pkgver/a/} + install -Dm755 source/$pkgname "${pkgdir}/usr/bin/$pkgname" + install -Dm755 source/nc "${pkgdir}/usr/bin/$pkgname-client" + install -Dm644 doc/$pkgname.man "${pkgdir}/usr/share/man/man1/$pkgname.1" + install -Dm644 doc/nc.man "${pkgdir}/usr/share/man/man1/$pkgname-client.1" + install -Dm644 doc/$pkgname.html -t "${pkgdir}/usr/share/doc/$pkgname" + install -Dm644 debian/$pkgname.desktop -t "${pkgdir}/usr/share/applications" + install -Dm644 COPYRIGHT -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/neomutt/PKGBUILD b/neomutt/PKGBUILD new file mode 100644 index 0000000..e662291 --- /dev/null +++ b/neomutt/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +pkgname=neomutt +pkgver=20220429 +_debver=$pkgver +_debrel=4.1 +pkgrel=1 +pkgdesc="A version of mutt with added features" +arch=('i686' 'x86_64') +url='https://neomutt.org/' +license=('GPL-2') +depends=('glibc' 'gpgme' 'lua' 'notmuch-runtime' 'krb5' 'gnutls' 'sqlite' + 'libsasl' 'ncurses' 'libidn2' 'lmdb' 'gdbm' 'kyotocabinet' + 'lz4' 'zlib' 'db') +makedepends=('gnupg-stable' 'libxslt' 'docbook-xsl' 'quilt') +optdepends=('python: keybase.py' + 'perl: smime_keys' + 'ca-certificates: default CA certificates') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/neomutt/neomutt/archive/refs/tags/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/n/neomutt/neomutt_${_debver}+dfsg1-${_debrel}.debian.tar.xz") +sha512sums=('ce151cabe9fe0c45f379dd7a71790f600faa9283c79a486c1421b5fe3b19b7f12d71dc36ec330e1b28b26ed83bf4c47b656ca823c484105ea3f80ef9166e7f0b' + 'f1f462a6dc2169a18d32bcad74fe6b7a7fd00ef11816a885500646896a7d797715f8f678cbd54d1ff0582718092e86bfd645eb40ad9d0a2deb47bb2b3bfbdaf9') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/debian-specific/document_debian_defaults.patch || true + rm -v debian/patches/debian-specific/neomuttrc.patch || true + rm -v debian/patches/debian-specific/use_usr_bin_editor.patch || true + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --gpgme \ + --sqlite \ + --autocrypt \ + --lua \ + --notmuch \ + --gss \ + --gnutls \ + --sasl \ + --with-idn2=/usr \ + --idn2 \ + --bdb \ + --lmdb \ + --gdbm \ + --lz4 \ + --zlib \ + --kyotocabinet \ + --disable-idn \ + --disable-zstd + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE.md -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/neon/PKGBUILD b/neon/PKGBUILD new file mode 100644 index 0000000..5d20004 --- /dev/null +++ b/neon/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=neon +pkgver=0.31.2 +_debver=0.31.2 +_debrel=1 +pkgrel=1 +pkgdesc="HTTP and WebDAV client library with a C interface" +arch=('i686' 'x86_64') +url="https://notroj.github.io/neon/" +license=('LGPL-2' 'GPL-2') +depends=('krb5' 'expat' 'ca-certificates' 'zlib') +makedepends=('quilt') +options=('libtool') # FS#16067 +source=(https://notroj.github.io/neon/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/n/neon27/neon27_$_debver-$_debrel.debian.tar.xz) +sha512sums=('1e402b40a0445f68ed24d2697ee60d21636f61ebc98edcde37ff9e26c54430acabf3969ac22a942d1dd51bddee0f312c04073b423b0af3a3e7c9bf60cd53e48c' + 'ead1c73f7c765398caa2320fdae70e698a06a5d52233a108f285f039a1309cfdcb6413f61ee7edd9e3ef764f3c984284cfa10d75da663c60f0670a442a9e131a') +validpgpkeys=('190555472DCC589BEF01609C608A86DF9833CC49') # Joe Orton + +prepare() { + cd "${srcdir}"/${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --with-expat \ + --enable-shared \ + --disable-static \ + --with-ssl=openssl \ + --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${srcdir}"/${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -d -m755 "${pkgdir}"/usr/share/licenses/${pkgname} + install -Dm644 src/COPYING.LIB test/COPYING "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/nestopia/PKGBUILD b/nestopia/PKGBUILD new file mode 100644 index 0000000..f582aed --- /dev/null +++ b/nestopia/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=nestopia +pkgver=1.52.0 +pkgrel=1 +pkgdesc="An NES emulator featuring cycle exact emulation, a ridiculous number of mappers, and lots of custom sound chips." +url='http://0ldsk00l.ca/nestopia/' +license=('GPL-2' 'zlib') +arch=('i686' 'x86_64') +depends=('sdl2' 'fltk' 'zlib' 'libarchive' 'glu') +makedepends=('mesa' 'autoconf-archive') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/0ldsk00l/nestopia/archive/${pkgver}.tar.gz") +sha512sums=('d7b36a07c1def146b3596124d3d084c39865916069092eceb3c1a22a030573c94fff7f3525e161d671fedd672f81ef536a42b4d0b37779c5993ffc158cdd3c0b') + +build() { + cd $pkgname-$pkgver + + # build system normally disables this warning + export CXXFLAGS="$CXXFLAGS -Wno-narrowing" + + autoreconf -vfi + ./configure \ + --prefix=/usr + make +} + +package() { + make -C $pkgname-$pkgver install DESTDIR="$pkgdir" + install -Dm644 "$srcdir/$pkgname-$pkgver/"{COPYING,COPYRIGHT} -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/net-snmp/PKGBUILD b/net-snmp/PKGBUILD new file mode 100644 index 0000000..7259c30 --- /dev/null +++ b/net-snmp/PKGBUILD @@ -0,0 +1,79 @@ +# Maintainer: Jesus E. + +pkgname=net-snmp +pkgver=5.9.3 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="A suite of applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both IPv4 and IPv6" +arch=('i686' 'x86_64') +url='http://www.net-snmp.org/' +license=('Expat' 'ISC' 'Modified-BSD') +depends=('libnsl' 'libpcap' 'pciutils' 'pcre') +makedepends=('python-setuptools' 'quilt') +optdepends=('perl-term-readkey: for snmpcheck application' + 'perl-tk: for snmpcheck and tkmib applications' + 'python: for the python modules' + 'logger: message logging support') +options=('!emptydirs' '!makeflags') +source=(https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/n/net-snmp/net-snmp_${_debver}+dfsg-${_debrel}.debian.tar.xz + snmpd.initd + snmpd.confd + snmptrapd.initd + snmptrapd.confd) +sha512sums=('a476df4967029a2eb03d27b0e250170785d0a8c143d49b900ee958c3cbdfaccd415b70af40f6fbed9cb8819d522c35a6073a431091d908ccc7c018fa0aaa2abc' + '6fdefc9f42c55a23cfbb7066dda98eff78f0f918934489b5dcd182bac5bf5622168dd7b9349343cd77e7a9bb20138c0359d8991ac9cf20274c898db384b482fb' + '10394f04dee23537a195f5aed63a3e758ca90227e269076ae9d13f883c7bd666c1c43823d1b869c43f232e97dc4138e52648cae995327f7a7f676ba416ee6fff' + 'e64f93631e5cb2160d3fb26abb84fc74f5632d8875227d5c8dfa24809b25e8202dcf23251ea8f296aedf16298c31ce49b8e64fb6325c18775d8899a50b853bbc' + '316964703559082b1626280bd0532a32533185741d1919f255473ae6bfe30f82b71bee79093cb0b341c99427e14a5ed201b6aa2886a9123c89d5f5f78496f706' + '283d1503ebca55046cc273f693a257be3e8e6f26b5db10a3b64a5455079a41568eb40c1a3f5dbc698b822502d5e8120ea80b9e2c3ac4aa1d830d318228c0beca') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/26_kfreebsd.patch || true + rm -v debian/patches/27_kfreebsd.patch || true + + quilt push -av + fi + + autoreconf -vi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --enable-ucd-snmp-compatibility \ + --enable-ipv6 \ + --with-python-modules \ + --with-default-snmp-version="3" \ + --with-sys-contact="root@localhost" \ + --with-sys-location="Unknown" \ + --with-logfile="/var/log/snmpd.log" \ + --with-mib-modules="host misc/ipfwacc ucd-snmp/diskio tunnel ucd-snmp/dlmod" \ + --with-persistent-directory="/var/net-snmp" + make NETSNMP_DONT_CHECK_VERSION=1 +} + +package() { + cd ${pkgname}-${pkgver} + sed -i -e "s:install --basedir=\$\$dir:install --basedir=\$\$dir --root=${pkgdir}:" Makefile + make DESTDIR="${pkgdir}" INSTALL_PREFIX="${pkgdir}" INSTALLDIRS=vendor install + install -D -m644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + for f in snmpd snmptrapd; do + install -D -m644 "${srcdir}/$f.confd" "${pkgdir}/etc/conf.d/$f" + install -D -m755 "${srcdir}/$f.initd" "${pkgdir}/etc/init.d/$f" + done +} diff --git a/net-snmp/snmpd.confd b/net-snmp/snmpd.confd new file mode 100644 index 0000000..a3f8824 --- /dev/null +++ b/net-snmp/snmpd.confd @@ -0,0 +1,19 @@ +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# Initial (empty) options. +SNMPD_FLAGS="" + +# Disable smux by default +SNMPD_FLAGS="${SNMPD_FLAGS} -I -smux" + +# Enable connection logging. +#SNMPD_FLAGS="${SNMPD_FLAGS} -a" + +# Enable syslog and disable file log. +#SNMPD_FLAGS="${SNMPD_FLAGS} -Lsd -Lf /dev/null" + +# Enable agentx socket as /var/agentx/master +# *NOTE* Before uncommenting this, make sure +# the /var/agentx directory exists. +#SNMPD_FLAGS="${SNMPD_FLAGS} -x /var/agentx/master" diff --git a/net-snmp/snmpd.initd b/net-snmp/snmpd.initd new file mode 100644 index 0000000..288fea0 --- /dev/null +++ b/net-snmp/snmpd.initd @@ -0,0 +1,34 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +SNMPD_PIDFILE="${SNMPD_PIDFILE:-/var/run/snmpd.pid}" + +extra_started_commands="reload" + +command="/usr/sbin/snmpd" +command_args="-p ${SNMPD_PIDFILE} ${SNMPD_FLAGS}" +pidfile="${SNMPD_PIDFILE}" + +depend() { + use logger +} + +checkconfig() { + if [ ! -e /etc/snmp/snmpd.conf ] ; then + eerror "${SVCNAME} requires an /etc/snmp/snmpd.conf configuration file" + return 1 + fi +} + +start_pre() { + checkconfig || return 1 +} + +reload() { + checkconfig || return 1 + + ebegin "Reloading ${SVCNAME} configuration" + kill -HUP $(cat ${SNMPD_PIDFILE}) 2>&1 > /dev/null + eend $? +} diff --git a/net-snmp/snmptrapd.confd b/net-snmp/snmptrapd.confd new file mode 100644 index 0000000..bca2a5f --- /dev/null +++ b/net-snmp/snmptrapd.confd @@ -0,0 +1,15 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# extra flags to pass to snmptrapd +SNMPTRAPD_FLAGS="" + +# ignore authentication failure traps +#SNMPTRAPD_FLAGS="${SNMPTRAPD_FLAGS} -a" + +# log messages to specified file +#SNMPTRAPD_FLAGS="${SNMPTRAPD_FLAGS} -Lf /var/log/snmptrapd.log" + +# log messages to syslog with the specified facility +# where facility is: 'd' = LOG_DAEMON, 'u' = LOG_USER, [0-7] = LOG_LOCAL[0-7] +#SNMPTRAPD_FLAGS="${SNMPTRAPD_FLAGS} -Ls d" diff --git a/net-snmp/snmptrapd.initd b/net-snmp/snmptrapd.initd new file mode 100644 index 0000000..9787d6f --- /dev/null +++ b/net-snmp/snmptrapd.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +SNMPTRAPD_PIDFILE="${SNMPTRAPD_PIDFILE:-/var/run/snmptrapd.pid}" + +command="/usr/sbin/snmptrapd" +command_args="-p ${SNMPTRAPD_PIDFILE} ${SNMPTRAPD_FLAGS}" +pidfile="${SNMPTRAPD_PIDFILE}" + +depend() { + use logger +} diff --git a/nethogs/PKGBUILD b/nethogs/PKGBUILD new file mode 100644 index 0000000..934b5c3 --- /dev/null +++ b/nethogs/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=nethogs +pkgver=0.8.5 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A net top tool which displays traffic used per process instead of per IP or interface" +url='https://github.com/raboof/nethogs' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('libpcap' 'ncurses' 'gcc-libs') +makedepends=('quilt') +source=("$pkgname-$pkgver.tgz::https://github.com/raboof/nethogs/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/n/nethogs/nethogs_$_debver-$_debrel.debian.tar.xz") +sha512sums=('a2be81fcebc9925dd8a0fd9f71c6e790206819e0cc5efeeeb0c741baa9fd25ec685a1784b6d331d938cf14381403f9c13d619509d0ffe713ce8786a83a380908' + '50bb385331f79c39f3c86705f3e9d5fcdcd0060ff3334eff3fea73af2f1a0020092c620bdbb185534bbb573685bb6b98d7886968b453302ab9ecaa87eb16de37') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ $CARCH = "i686" ]]; then + export CXXFLAGS="-Og" + export CFLAGS="-Og" + fi + + make prefix="/usr" + make prefix="/usr" libnethogs +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make prefix="/usr" DESTDIR="$pkgdir" install + make prefix="/usr" DESTDIR="$pkgdir" install_lib + + install -Dm755 src/libnethogs.h "$pkgdir/usr/include/libnethogs.h" + ln -s "/usr/lib/libnethogs.so.$pkgver" "$pkgdir/usr/lib/libnethogs.so" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/netpbm/PKGBUILD b/netpbm/PKGBUILD new file mode 100644 index 0000000..cf2f3a3 --- /dev/null +++ b/netpbm/PKGBUILD @@ -0,0 +1,151 @@ +# Maintainer: Jesus E. + +_pkgname=netpbm-libre +pkgname=netpbm +pkgver=10.73.31 +pkgrel=2 +pkgdesc="A toolkit for manipulation of graphic images" +arch=('i686' 'x86_64') +license=('custom:Netpbm') +url="http://netpbm.sourceforge.net/" +depends=('perl' 'libpng' 'libtiff' 'libjpeg-turbo' 'libxml2') +makedepends=('tauthon' 'jbigkit' 'libx11') +options=('!makeflags') +# Get docs with: wget --recursive --relative -nH http://netpbm.sourceforge.net/doc/ +mksource=(https://downloads.sourceforge.net/project/netpbm/super_stable/$pkgver/netpbm-$pkgver.tgz) +source=(https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}-${pkgver}.tar.gz{,.sig} + https://sources.archlinux.org/other/packages/netpbm/netpbm-doc-31Jan2014.tar.xz{,.sig} + netpbm-CAN-2005-2471.patch netpbm-libre-security-code.patch netpbm-security-scripts.patch) +mksha512sums=('22db95133809fce7e1e2a57b488e62d385e819228856471bc6fa4d0c0f95d77679f35226a20a8bccad64399cc83502ce5a2d7544730847e5ff92c563a19887f5') +sha512sums=('7e779585597896207123c9f1f01de784c4177ac56470107c2e202f7260dc0c49ccc07789c679d7ecd7a56c84bf7f8615c0cada2665bb2111faa9af8bc37bc5e6' + 'SKIP' + 'ef3c889d30fd1c1422e0a05c19b5e875a33fbcd737ffdd10f56b23a42e74e0bb33134e859f7330d2ab35488b95eb487d5cc15b0f253a220b09082c294713d25b' + 'SKIP' + 'a0d96195cfeeca818cf10a9f8b292eba7213f93f78dd7d0f1da6bd9e448bfa6cb8fdc8d4378defda1425a8ebbadb84655f5a9269eb3e0ea230170fd640236c8c' + '1cb28573ff5678040c08e4aa9d87fd421329155ecf9e876d04cd5632cd15e83b0f5e71ffcfa033a2bc639857e57a8ee5913658473136b16040e162e9de6fb24f' + '4b0d7603a4176ad97b325535f4f2ceafdd2edf5e2ddfca054aadff923245a35009ebb58191488ab677b48480b7f082ca1d81262c60e038347a117e46b882da4d') +validpgpkeys=('5357F3B111688D88C1D88119FCF2CB179205AC90' # Eric Belanger + 'C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +mksource() { + cd $pkgname-$pkgver + + # Removing hpcdtoppm/pcdindex (non comercial) + rm -rv converter/ppm/hpcdtoppm + + # Removing ppmtogif/giftopnm (patent restriction) + rm -v converter/other/giftopnm.c converter/ppm/ppmtogif.c + rm -v test/gif-quant-roundtrip.test test/gif-roundtrip.test test/all-in-place.ok + + # Removing programs without license information + rm -v other/pamchannel.c test/pamchannel.ok + rm -v converter/other/pamtopnm.c + rm -v converter/pbm/pbmto4425.c + rm -v converter/pbm/pbmtoln03.c + rm -v converter/pbm/pbmtolps.c + rm -v converter/pbm/pbmtopk.c + rm -v converter/pbm/pktopbm.c + rm -v converter/ppm/ppmtopjxl.c + rm -v converter/pgm/spottopgm.c + + rm -v test/avs-roundtrip.test test/facesaver-roundtrip.test test/ilbm-roundtrip.test test/pamchannel.test \ + test/pamditherbw.test test/pamenlarge.test test/pamfile.test test/pfm-roundtrip.test \ + test/pgmtoppm.test test/pict-roundtrip.test test/pnminvert.test test/pnmremap1.test \ + test/pnmremap2.test test/pnmtopnm-plain.test test/pnm-pam-roundtrip.test test/pnm-plain-roundtrip.test \ + test/ps-alt-roundtrip.test test/ps-roundtrip.test test/sbig-roundtrip.test test/st4-roundtrip.test \ + test/targa-roundtrip.test test/utahrle-roundtrip.test test/winicon-roundtrip.test test/xwd-roundtrip.test +} + +prepare() { + cd $pkgname-$pkgver + + # Removing references about hpcdtoppm/pcdindex (non comercial) + sed -i 's/hpcdtoppm//g' converter/ppm/Makefile + sed -i 's/hpcdtoppm\.1//g' buildtools/manpage.mk + sed -i 's/pcdindex\.1//g' buildtools/manpage.mk + + # Removing references about ppmtogif/giftopnm (patent restriction) + sed -i 's/ppmtogif//g' converter/ppm/Makefile test/all-in-place.test + sed -i 's/ppmtogif\.1//g' buildtools/manpage.mk + sed -i 's/giftopnm//g' converter/other/Makefile test/all-in-place.test + sed -i 's/giftopnm\.1//g' buildtools/manpage.mk + sed -i '/giftopnm/d' converter/other/pnmtopalm/README + + # Removing references about programs without license information + sed -i 's/pamchannel//g' other/Makefile test/all-in-place.test + sed -i 's/pamchannel\.1//g' buildtools/manpage.mk + sed -i 's/pamchannel\.test//g' test/Test-Order + + sed -i 's/pamtopnm//g' converter/other/Makefile test/all-in-place.test + sed -i 's/pamtopnm\.1//g' buildtools/manpage.mk + sed -i '/pnmtopnm/d' netpbm.c + + sed -i 's/pbmto4425//g' converter/pbm/Makefile test/all-in-place.test + sed -i 's/pbmto4425\.1//g' buildtools/manpage.mk + + sed -i 's/pbmtoln03//g' converter/pbm/Makefile test/all-in-place.test + sed -i 's/pbmtoln03\.1//g' buildtools/manpage.mk + + sed -i 's/pbmtolps//g' converter/pbm/Makefile test/all-in-place.test + sed -i 's/pbmtolps\.1//g' buildtools/manpage.mk + + sed -i 's/pbmtopk//g' converter/pbm/Makefile test/all-in-place.test + sed -i 's/pbmtopk\.1//g' buildtools/manpage.mk + + sed -i 's/pktopbm//g' converter/pbm/Makefile test/all-in-place.test + sed -i 's/pktopbm\.1//g' buildtools/manpage.mk + + sed -i 's/ppmtopjxl//g' converter/ppm/Makefile test/all-in-place.test + sed -i 's/ppmtopjxl\.1//g' buildtools/manpage.mk + + sed -i 's/spottopgm//g' converter/pgm/Makefile test/all-in-place.test + sed -i 's/spottopgm\.1//g' buildtools/manpage.mk + + # Removing references about nonfree licenses part + sed -i '338,383d' doc/copyright_summary + + patch -p1 < ../netpbm-CAN-2005-2471.patch + patch -p1 < ../netpbm-libre-security-code.patch + patch -p1 < ../netpbm-security-scripts.patch + sed -i 's|#!/usr/bin/python|#!/usr/bin/tauthon|' buildtools/makeman + sed -i 's|@python|@tauthon|' buildtools/manpage.mk + + cp config.mk.in config.mk + echo 'CFLAGS_SHLIB = -fPIC' >> config.mk + echo "NETPBM_DOCURL = file://${srcdir}/doc" >> config.mk + echo 'TIFFLIB = libtiff.so' >> config.mk + echo 'JPEGLIB = libjpeg.so' >> config.mk + echo 'PNGLIB = libpng.so' >> config.mk + echo 'ZLIB = libz.so' >> config.mk + echo 'JBIGLIB = /usr/lib/libjbig.a' >> config.mk + + sed -i 's|misc|share/netpbm|' common.mk + sed -i 's|/link|/lib|' lib/Makefile + sed -i 's|install.manwebmain install.manweb install.man|install.man|' GNUmakefile +} + +build() { + cd $pkgname-$pkgver + make + # Generating useful man pages with html doc + make MAKEMAN="${srcdir}/$pkgname-$pkgver/buildtools/makeman" USERGUIDE=. \ + -C ../doc -f "${srcdir}/$pkgname-$pkgver/buildtools/manpage.mk" manpages +} + +package() { + cd $pkgname-$pkgver + make pkgdir="${pkgdir}/usr" PKGMANDIR=share/man install-run install-dev + + # Removing dummy man pages + rm "${pkgdir}"/usr/share/man/man{1,3,5}/* + + make MAKEMAN="${srcdir}/$pkgname-$pkgver/buildtools/makeman" MANDIR="${pkgdir}/usr/share/man" \ + -C ../doc -f "${srcdir}/$pkgname-$pkgver/buildtools/manpage.mk" installman + + # Replace obsolete utility + echo -e '#!/bin/sh\npamditherbw $@ | pamtopnm\n' > "${pkgdir}/usr/bin/pgmtopbm" + + # Licensing. Note that each program in the package has a separate license. + install -D -m644 "${srcdir}/$pkgname-$pkgver/doc/copyright_summary" \ + "${pkgdir}/usr/share/licenses/${pkgname}/copyright_summary.txt" +} diff --git a/netpbm/netpbm-CAN-2005-2471.patch b/netpbm/netpbm-CAN-2005-2471.patch new file mode 100644 index 0000000..e4e9373 --- /dev/null +++ b/netpbm/netpbm-CAN-2005-2471.patch @@ -0,0 +1,16 @@ +--- netpbm-10.29/converter/other/pstopnm.c.CAN-2005-2471 2005-08-15 02:39:46.000000000 +0200 ++++ netpbm-10.29/converter/other/pstopnm.c 2005-08-16 15:38:15.000000000 +0200 +@@ -818,11 +818,11 @@ + ghostscriptProg, arg0, + deviceopt, outfileopt, gopt, ropt, textalphabitsopt, + "-q", "-dNOPAUSE", +- "-dSAFER", "-"); ++ "-dPARANOIDSAFER", "-"); + } + + execl(ghostscriptProg, arg0, deviceopt, outfileopt, gopt, ropt, +- textalphabitsopt, "-q", "-dNOPAUSE", "-dSAFER", "-", NULL); ++ textalphabitsopt, "-q", "-dNOPAUSE", "-dPARANOIDSAFER", "-", NULL); + + pm_error("execl() of Ghostscript ('%s') failed, errno=%d (%s)", + ghostscriptProg, errno, strerror(errno)); diff --git a/netpbm/netpbm-libre-security-code.patch b/netpbm/netpbm-libre-security-code.patch new file mode 100644 index 0000000..18f7bd7 --- /dev/null +++ b/netpbm/netpbm-libre-security-code.patch @@ -0,0 +1,1386 @@ +diff --git a/analyzer/pgmtexture.c b/analyzer/pgmtexture.c +index 0731733..635c58b 100644 +--- a/analyzer/pgmtexture.c ++++ b/analyzer/pgmtexture.c +@@ -98,6 +98,8 @@ vector(unsigned int const nl, + + assert(nh >= nl); + ++ overflow_add(nh - nl, 1); ++ + MALLOCARRAY(v, (unsigned) (nh - nl + 1)); + + if (v == NULL) +@@ -129,6 +131,7 @@ matrix (unsigned int const nrl, + assert(nrh >= nrl); + + /* allocate pointers to rows */ ++ overflow_add(nrh - nrl, 1); + MALLOCARRAY(m, (unsigned) (nrh - nrl + 1)); + if (m == NULL) + pm_error("Unable to allocate memory for a matrix."); +@@ -137,6 +140,7 @@ matrix (unsigned int const nrl, + + assert (nch >= ncl); + ++ overflow_add(nch - ncl, 1); + /* allocate rows and set pointers to them */ + for (i = nrl; i <= nrh; ++i) { + MALLOCARRAY(m[i], (unsigned) (nch - ncl + 1)); +diff --git a/converter/other/gemtopnm.c b/converter/other/gemtopnm.c +index aac7479..5f1a51a 100644 +--- a/converter/other/gemtopnm.c ++++ b/converter/other/gemtopnm.c +@@ -106,6 +106,7 @@ main(argc, argv) + + pnm_writepnminit( stdout, cols, rows, MAXVAL, type, 0 ); + ++ overflow_add(cols, padright); + { + /* allocate input row data structure */ + int plane; +diff --git a/converter/other/jpegtopnm.c b/converter/other/jpegtopnm.c +index ab3b18e..c324b86 100644 +--- a/converter/other/jpegtopnm.c ++++ b/converter/other/jpegtopnm.c +@@ -861,6 +861,8 @@ convertImage(FILE * const ofP, + /* Calculate output image dimensions so we can allocate space */ + jpeg_calc_output_dimensions(cinfoP); + ++ overflow2(cinfoP->output_width, cinfoP->output_components); ++ + /* Start decompressor */ + jpeg_start_decompress(cinfoP); + +diff --git a/converter/other/pbmtopgm.c b/converter/other/pbmtopgm.c +index 69b20fb..382a487 100644 +--- a/converter/other/pbmtopgm.c ++++ b/converter/other/pbmtopgm.c +@@ -47,6 +47,7 @@ main(int argc, char *argv[]) { + "than the image height (%u rows)", height, rows); + + outrow = pgm_allocrow(cols) ; ++ overflow2(width, height); + maxval = MIN(PGM_OVERALLMAXVAL, width*height); + pgm_writepgminit(stdout, cols, rows, maxval, 0) ; + +diff --git a/converter/other/pnmtoddif.c b/converter/other/pnmtoddif.c +index ae8c852..9ee037b 100644 +--- a/converter/other/pnmtoddif.c ++++ b/converter/other/pnmtoddif.c +@@ -632,6 +632,7 @@ main(int argc, char *argv[]) { + switch (PNM_FORMAT_TYPE(format)) { + case PBM_TYPE: + ip.bits_per_pixel = 1; ++ overflow_add(cols, 7); + ip.bytes_per_line = (cols + 7) / 8; + ip.spectral = 2; + ip.components = 1; +@@ -647,6 +648,7 @@ main(int argc, char *argv[]) { + ip.polarity = 2; + break; + case PPM_TYPE: ++ overflow2(cols, 3); + ip.bytes_per_line = 3 * cols; + ip.bits_per_pixel = 24; + ip.spectral = 5; +diff --git a/converter/other/pnmtojpeg.c b/converter/other/pnmtojpeg.c +index ce231c9..1279040 100644 +--- a/converter/other/pnmtojpeg.c ++++ b/converter/other/pnmtojpeg.c +@@ -605,7 +605,11 @@ read_scan_script(j_compress_ptr const cinfo, + want JPOOL_PERMANENT. + */ + const unsigned int scan_info_size = nscans * sizeof(jpeg_scan_info); +- jpeg_scan_info * const scan_info = ++ const jpeg_scan_info * scan_info; ++ ++ overflow2(nscans, sizeof(jpeg_scan_info)); ++ ++ scan_info = + (jpeg_scan_info *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + scan_info_size); +@@ -937,6 +941,8 @@ compute_rescaling_array(JSAMPLE ** const rescale_p, const pixval maxval, + const long half_maxval = maxval / 2; + long val; + ++ overflow_add(maxval, 1); ++ overflow2(maxval+1, sizeof(JSAMPLE)); + *rescale_p = (JSAMPLE *) + (cinfo.mem->alloc_small) ((j_common_ptr) &cinfo, JPOOL_IMAGE, + (size_t) (((long) maxval + 1L) * +@@ -1015,6 +1021,7 @@ convert_scanlines(struct jpeg_compress_struct * const cinfo_p, + */ + + /* Allocate the libpnm output and compressor input buffers */ ++ overflow2(cinfo_p->image_width, cinfo_p->input_components); + buffer = (*cinfo_p->mem->alloc_sarray) + ((j_common_ptr) cinfo_p, JPOOL_IMAGE, + (unsigned int) cinfo_p->image_width * cinfo_p->input_components, +diff --git a/converter/other/pnmtops.c b/converter/other/pnmtops.c +index 6cd6be9..8a7d25a 100644 +--- a/converter/other/pnmtops.c ++++ b/converter/other/pnmtops.c +@@ -292,17 +292,21 @@ parseCommandLine(int argc, const char ** argv, + validateCompDimension(width, 72, "-width value"); + validateCompDimension(height, 72, "-height value"); + ++ overflow2(width, 72); + cmdlineP->width = width * 72; ++ overflow2(height, 72); + cmdlineP->height = height * 72; + + if (imagewidthSpec) { + validateCompDimension(imagewidth, 72, "-imagewidth value"); ++ overflow2(imagewidth, 72); + cmdlineP->imagewidth = imagewidth * 72; + } + else + cmdlineP->imagewidth = 0; + if (imageheightSpec) { +- validateCompDimension(imagewidth, 72, "-imageheight value"); ++ validateCompDimension(imageheight, 72, "-imageheight value"); ++ overflow2(imageheight, 72); + cmdlineP->imageheight = imageheight * 72; + } + else +diff --git a/converter/other/rletopnm.c b/converter/other/rletopnm.c +index 9995914..058278c 100644 +--- a/converter/other/rletopnm.c ++++ b/converter/other/rletopnm.c +@@ -19,6 +19,8 @@ + * If you modify this software, you should include a notice giving the + * name of the person performing the modification, the date of modification, + * and the reason for such modification. ++ * ++ * 2002-12-19: Fix maths wrapping bugs. Alan Cox + */ + /* + * rletopnm - A conversion program to convert from Utah's "rle" image format +diff --git a/converter/other/sirtopnm.c b/converter/other/sirtopnm.c +index fafcc91..9fe49d0 100644 +--- a/converter/other/sirtopnm.c ++++ b/converter/other/sirtopnm.c +@@ -69,6 +69,7 @@ char* argv[]; + } + break; + case PPM_TYPE: ++ overflow3(cols, rows, 3); + picsize = cols * rows * 3; + planesize = cols * rows; + if ( !( sirarray = (unsigned char*) malloc( picsize ) ) ) +diff --git a/converter/other/tifftopnm.c b/converter/other/tifftopnm.c +index 0d6494f..19e9e38 100644 +--- a/converter/other/tifftopnm.c ++++ b/converter/other/tifftopnm.c +@@ -1309,7 +1309,9 @@ convertRasterByRows(pnmOut * const pnmOutP, + if (scanbuf == NULL) + pm_error("can't allocate memory for scanline buffer"); + +- MALLOCARRAY(samplebuf, cols * spp); ++ /* samplebuf is unsigned int * !!! */ ++ samplebuf = (unsigned int *) malloc3(cols , sizeof(unsigned int) , spp); ++ + if (samplebuf == NULL) + pm_error("can't allocate memory for row buffer"); + +diff --git a/converter/other/xwdtopnm.c b/converter/other/xwdtopnm.c +index 45d66b4..c914481 100644 +--- a/converter/other/xwdtopnm.c ++++ b/converter/other/xwdtopnm.c +@@ -209,6 +209,10 @@ processX10Header(X10WDFileHeader * const h10P, + *colorsP = pnm_allocrow(2); + PNM_ASSIGN1((*colorsP)[0], 0); + PNM_ASSIGN1((*colorsP)[1], *maxvalP); ++ overflow_add(h10P->pixmap_width, 15); ++ if(h10P->pixmap_width < 0) ++ pm_error("assert: negative width"); ++ overflow2((((h10P->pixmap_width + 15) / 16) * 16 - h10P->pixmap_width), 8); + *padrightP = + (((h10P->pixmap_width + 15) / 16) * 16 - h10P->pixmap_width) * 8; + *bits_per_itemP = 16; +@@ -634,6 +638,7 @@ processX11Header(X11WDFileHeader * const h11P, + + *colsP = h11FixedP->pixmap_width; + *rowsP = h11FixedP->pixmap_height; ++ overflow2(h11FixedP->bytes_per_line, 8); + *padrightP = + h11FixedP->bytes_per_line * 8 - + h11FixedP->pixmap_width * h11FixedP->bits_per_pixel; +diff --git a/converter/pbm/mdatopbm.c b/converter/pbm/mdatopbm.c +index d8e0657..12c7468 100644 +--- a/converter/pbm/mdatopbm.c ++++ b/converter/pbm/mdatopbm.c +@@ -245,10 +245,13 @@ main(int argc, char **argv) { + pm_readlittleshort(infile, &yy); nInCols = yy; + } + ++ overflow2(nOutCols, 8); + nOutCols = 8 * nInCols; + nOutRows = nInRows; +- if (bScale) ++ if (bScale) { ++ overflow2(nOutRows, 2); + nOutRows *= 2; ++ } + + data = pbm_allocarray(nOutCols, nOutRows); + +diff --git a/converter/pbm/mgrtopbm.c b/converter/pbm/mgrtopbm.c +index 9f7004a..60e8477 100644 +--- a/converter/pbm/mgrtopbm.c ++++ b/converter/pbm/mgrtopbm.c +@@ -65,6 +65,8 @@ readMgrHeader(FILE * const ifP, + if (head.h_high < ' ' || head.l_high < ' ') + pm_error("Invalid width field in MGR header"); + ++ overflow_add(*colsP, pad); ++ + *colsP = (((int)head.h_wide - ' ') << 6) + ((int)head.l_wide - ' '); + *rowsP = (((int)head.h_high - ' ') << 6) + ((int) head.l_high - ' '); + *padrightP = ( ( *colsP + pad - 1 ) / pad ) * pad - *colsP; +diff --git a/converter/pbm/pbmtogem.c b/converter/pbm/pbmtogem.c +index 9eab041..13b0257 100644 +--- a/converter/pbm/pbmtogem.c ++++ b/converter/pbm/pbmtogem.c +@@ -79,6 +79,7 @@ putinit (int const rows, int const cols) + bitsperitem = 0; + bitshift = 7; + outcol = 0; ++ overflow_add(cols, 7); + outmax = (cols + 7) / 8; + outrow = (unsigned char *) pm_allocrow (outmax, sizeof (unsigned char)); + lastrow = (unsigned char *) pm_allocrow (outmax, sizeof (unsigned char)); +diff --git a/converter/pbm/pbmtogo.c b/converter/pbm/pbmtogo.c +index 23b2ee9..d2ee91f 100644 +--- a/converter/pbm/pbmtogo.c ++++ b/converter/pbm/pbmtogo.c +@@ -158,6 +158,7 @@ main(int argc, + bitrow = pbm_allocrow(cols); + + /* Round cols up to the nearest multiple of 8. */ ++ overflow_add(cols, 7); + rucols = ( cols + 7 ) / 8; + bytesperrow = rucols; /* GraphOn uses bytes */ + rucols = rucols * 8; +diff --git a/converter/pbm/pbmtolj.c b/converter/pbm/pbmtolj.c +index 0cceb4f..fdab6df 100644 +--- a/converter/pbm/pbmtolj.c ++++ b/converter/pbm/pbmtolj.c +@@ -120,7 +120,11 @@ parseCommandLine(int argc, char ** argv, + static void + allocateBuffers(unsigned int const cols) { + ++ overflow_add(cols, 8); + rowBufferSize = (cols + 7) / 8; ++ overflow_add(rowBufferSize, 128); ++ overflow_add(rowBufferSize, rowBufferSize+128); ++ overflow_add(rowBufferSize+10, rowBufferSize/8); + packBufferSize = rowBufferSize + (rowBufferSize + 127) / 128 + 1; + deltaBufferSize = rowBufferSize + rowBufferSize / 8 + 10; + +diff --git a/converter/pbm/pbmtomda.c b/converter/pbm/pbmtomda.c +index 3ad5149..9efe5cf 100644 +--- a/converter/pbm/pbmtomda.c ++++ b/converter/pbm/pbmtomda.c +@@ -179,6 +179,7 @@ int main(int argc, char **argv) + + nOutRowsUnrounded = bScale ? nInRows/2 : nInRows; + ++ overflow_add(nOutRowsUnrounded, 3); + nOutRows = ((nOutRowsUnrounded + 3) / 4) * 4; + /* MDA wants rows a multiple of 4 */ + nOutCols = nInCols / 8; +diff --git a/converter/pbm/pbmtoppa/pbm.c b/converter/pbm/pbmtoppa/pbm.c +index 2f8a42b..1c8d236 100644 +--- a/converter/pbm/pbmtoppa/pbm.c ++++ b/converter/pbm/pbmtoppa/pbm.c +@@ -106,6 +106,7 @@ int pbm_readline(pbm_stat* pbm,unsigned char* data) + return 0; + + case P4: ++ overflow_add(pbm->width, 7); + tmp=(pbm->width+7)/8; + tmp2=fread(data,1,tmp,pbm->fptr); + if(tmp2 == tmp) +@@ -130,6 +131,7 @@ void pbm_unreadline (pbm_stat *pbm, void *data) + return; + + pbm->unread = 1; ++ overflow_add(pbm->width, 7); + pbm->revdata = malloc ((pbm->width+7)/8); + memcpy (pbm->revdata, data, (pbm->width+7)/8); + pbm->current_line--; +diff --git a/converter/pbm/pbmtoppa/pbmtoppa.c b/converter/pbm/pbmtoppa/pbmtoppa.c +index f43c08a..98e0284 100644 +--- a/converter/pbm/pbmtoppa/pbmtoppa.c ++++ b/converter/pbm/pbmtoppa/pbmtoppa.c +@@ -452,6 +452,7 @@ main(int argc, char *argv[]) { + pm_error("main(): unrecognized parameter '%s'", argv[argn]); + } + ++ overflow_add(Width, 7); + Pwidth=(Width+7)/8; + printer.fptr=out; + +diff --git a/converter/pbm/pbmtoxbm.c b/converter/pbm/pbmtoxbm.c +index 14c6b85..362b70e 100644 +--- a/converter/pbm/pbmtoxbm.c ++++ b/converter/pbm/pbmtoxbm.c +@@ -351,6 +351,8 @@ convertRaster(FILE * const ifP, + + unsigned char * bitrow; + unsigned int row; ++ ++ overflow_add(cols, padright); + + putinit(xbmVersion); + +diff --git a/converter/pbm/thinkjettopbm.l b/converter/pbm/thinkjettopbm.l +index 5de4f2b..7f31de5 100644 +--- a/converter/pbm/thinkjettopbm.l ++++ b/converter/pbm/thinkjettopbm.l +@@ -114,7 +114,9 @@ DIG [0-9] + \033\*b{DIG}+W { + int l; + if (rowCount >= rowCapacity) { +- rowCapacity += 100; ++ overflow_add(rowCapacity, 100); ++ rowCapacity += 100; ++ overflow2(rowCapacity, sizeof *rows); + rows = realloc (rows, rowCapacity * sizeof *rows); + if (rows == NULL) + pm_error ("Out of memory."); +@@ -226,6 +228,8 @@ yywrap (void) + /* + * Quite simple since ThinkJet bit arrangement matches PBM + */ ++ ++ overflow2(maxRowLength, 8); + pbm_writepbminit(stdout, maxRowLength*8, rowCount, 0); + + packed_bitrow = malloc(maxRowLength); +diff --git a/converter/pbm/ybmtopbm.c b/converter/pbm/ybmtopbm.c +index 2a42908..cf1ff03 100644 +--- a/converter/pbm/ybmtopbm.c ++++ b/converter/pbm/ybmtopbm.c +@@ -43,6 +43,7 @@ getinit(FILE * const ifP, + pm_error("EOF / read error"); + + *depthP = 1; ++ overflow_add(*colsP, 15); + } + + +diff --git a/converter/pgm/lispmtopgm.c b/converter/pgm/lispmtopgm.c +index 40dd3fb..b5469f7 100644 +--- a/converter/pgm/lispmtopgm.c ++++ b/converter/pgm/lispmtopgm.c +@@ -58,6 +58,7 @@ main( argc, argv ) + pm_error( "depth (%d bits) is too large", depth); + + pgm_writepgminit( stdout, cols, rows, (gray) maxval, 0 ); ++ overflow_add(cols, 7); + grayrow = pgm_allocrow( ( cols + 7 ) / 8 * 8 ); + + for ( row = 0; row < rows; ++row ) +@@ -102,6 +103,8 @@ getinit( file, colsP, rowsP, depthP, padrightP ) + + if ( *depthP == 0 ) + *depthP = 1; /* very old file */ ++ ++ overflow_add((int)colsP, 31); + + *padrightP = ( ( *colsP + 31 ) / 32 ) * 32 - *colsP; + +diff --git a/converter/pgm/psidtopgm.c b/converter/pgm/psidtopgm.c +index 07417d1..25bb311 100644 +--- a/converter/pgm/psidtopgm.c ++++ b/converter/pgm/psidtopgm.c +@@ -78,6 +78,7 @@ main(int argc, + pm_error("bits/sample (%d) is too large.", bitspersample); + + pgm_writepgminit(stdout, cols, rows, maxval, 0); ++ overflow_add(cols, 7); + grayrow = pgm_allocrow((cols + 7) / 8 * 8); + for (row = 0; row < rows; ++row) { + unsigned int col; +diff --git a/converter/ppm/Makefile b/converter/ppm/Makefile +index 09f05cd..f68170f 100644 +--- a/converter/ppm/Makefile ++++ b/converter/ppm/Makefile +@@ -11,7 +11,7 @@ SUBDIRS = hpcdtoppm + + PORTBINARIES = 411toppm eyuvtoppm gouldtoppm ilbmtoppm imgtoppm \ + leaftoppm mtvtoppm neotoppm \ +- pcxtoppm pc1toppm pi1toppm picttoppm pjtoppm \ ++ pcxtoppm pc1toppm pi1toppm pjtoppm \ + ppmtoacad ppmtoapplevol ppmtoarbtxt ppmtoascii \ + ppmtobmp ppmtoeyuv ppmtogif ppmtoicr ppmtoilbm \ + ppmtoleaf ppmtolj ppmtomitsu ppmtoneo \ +diff --git a/converter/ppm/ilbmtoppm.c b/converter/ppm/ilbmtoppm.c +index 662be0b..2a86efc 100644 +--- a/converter/ppm/ilbmtoppm.c ++++ b/converter/ppm/ilbmtoppm.c +@@ -606,6 +606,7 @@ decode_row(FILE * const ifP, + rawtype *chp; + + cols = bmhdP->w; ++ overflow_add(cols, 15); + bytes = RowBytes(cols); + for( plane = 0; plane < nPlanes; plane++ ) { + int mask; +@@ -693,6 +694,23 @@ decode_mask(FILE * const ifP, + Multipalette handling + ****************************************************************************/ + ++static void * ++xmalloc2(x, y) ++ int x; ++ int y; ++{ ++ void *mem; ++ ++ overflow2(x,y); ++ if( x * y == 0 ) ++ return NULL; ++ ++ mem = malloc2(x,y); ++ if( mem == NULL ) ++ pm_error("out of memory allocating %d bytes", x * y); ++ return mem; ++} ++ + + static void + multi_adjust(cmap, row, palchange) +@@ -1355,6 +1373,9 @@ dcol_to_ppm(FILE * const ifP, + if( redmaxval != maxval || greenmaxval != maxval || bluemaxval != maxval ) + pm_message("scaling colors to %d bits", pm_maxvaltobits(maxval)); + ++ overflow_add(redmaxval, 1); ++ overflow_add(greenmaxval, 1); ++ overflow_add(bluemaxval, 1); + MALLOCARRAY_NOFAIL(redtable, redmaxval +1); + MALLOCARRAY_NOFAIL(greentable, greenmaxval +1); + MALLOCARRAY_NOFAIL(bluetable, bluemaxval +1); +@@ -1784,7 +1805,9 @@ PCHG_ConvertSmall(PCHG, cmap, mask, datasize) + ChangeCount32 = *data++; + datasize -= 2; + ++ overflow_add(ChangeCount16, ChangeCount32); + changes = ChangeCount16 + ChangeCount32; ++ overflow_add(changes, 1); + for( i = 0; i < changes; i++ ) { + if( totalchanges >= PCHG->TotalChanges ) goto fail; + if( datasize < 2 ) goto fail; +@@ -2049,6 +2072,9 @@ read_pchg(FILE * const ifP, + cmap->mp_change[i] = NULL; + if( PCHG.StartLine < 0 ) { + int nch; ++ if(PCHG.MaxReg < PCHG.MinReg) ++ pm_error("assert: MinReg > MaxReg"); ++ overflow_add(PCHG.MaxReg-PCHG.MinReg, 2); + nch = PCHG.MaxReg - PCHG.MinReg +1; + MALLOCARRAY_NOFAIL(cmap->mp_init, nch + 1); + for( i = 0; i < nch; i++ ) +@@ -2125,6 +2151,7 @@ process_body( FILE * const ifP, + if (typeid == ID_ILBM) { + int isdeep; + ++ overflow_add(bmhdP->w, 15); + MALLOCARRAY_NOFAIL(ilbmrow, RowBytes(bmhdP->w)); + *viewportmodesP |= fakeviewport; /* -isham/-isehb */ + +diff --git a/converter/ppm/imgtoppm.c b/converter/ppm/imgtoppm.c +index 7078b88..eb8509e 100644 +--- a/converter/ppm/imgtoppm.c ++++ b/converter/ppm/imgtoppm.c +@@ -84,6 +84,7 @@ main(int argc, char ** argv) { + len = atoi((char*) buf ); + if ( fread( buf, len, 1, ifp ) != 1 ) + pm_error( "bad colormap buf" ); ++ overflow2(cmaplen, 3); + if ( cmaplen * 3 != len ) + { + pm_message( +@@ -105,6 +106,7 @@ main(int argc, char ** argv) { + pm_error( "bad pixel data header" ); + buf[8] = '\0'; + len = atoi((char*) buf ); ++ overflow2(cols, rows); + if ( len != cols * rows ) + pm_message( + "pixel data length (%d) does not match image size (%d)", +diff --git a/converter/ppm/pcxtoppm.c b/converter/ppm/pcxtoppm.c +index e252ba2..270ae3b 100644 +--- a/converter/ppm/pcxtoppm.c ++++ b/converter/ppm/pcxtoppm.c +@@ -409,6 +409,7 @@ pcx_planes_to_pixels(pixels, bitplanes, bytesperline, planes, bitsperpixel) + /* + * clear the pixel buffer + */ ++ overflow2(bytesperline, 8); + npixels = (bytesperline * 8) / bitsperpixel; + p = pixels; + while (--npixels >= 0) +@@ -470,6 +471,7 @@ pcx_16col_to_ppm(FILE * const ifP, + } + + /* BytesPerLine should be >= BitsPerPixel * cols / 8 */ ++ overflow2(BytesPerLine, 8); + rawcols = BytesPerLine * 8 / BitsPerPixel; + if (headerCols > rawcols) { + pm_message("warning - BytesPerLine = %d, " +diff --git a/converter/ppm/picttoppm.c b/converter/ppm/picttoppm.c +index 828d527..8cdb7b3 100644 +--- a/converter/ppm/picttoppm.c ++++ b/converter/ppm/picttoppm.c +@@ -1,3 +1,4 @@ ++#error "Unfixable. Don't ship me" + /* + * picttoppm.c -- convert a MacIntosh PICT file to PPM format. + * +diff --git a/converter/ppm/pjtoppm.c b/converter/ppm/pjtoppm.c +index 7b694fb..62ce77e 100644 +--- a/converter/ppm/pjtoppm.c ++++ b/converter/ppm/pjtoppm.c +@@ -127,20 +127,22 @@ main(argc, argv) + case 'V': /* send plane */ + case 'W': /* send last plane */ + if (rows == -1 || r >= rows || image == NULL) { +- if (rows == -1 || r >= rows) ++ if (rows == -1 || r >= rows) { ++ overflow_add(rows, 100); + rows += 100; ++ } ++ + if (image == NULL) { +- MALLOCARRAY(image, rows * planes); +- MALLOCARRAY(imlen, rows * planes); ++ image = (unsigned char **) ++ malloc3(rows , planes , sizeof(unsigned char *)); ++ imlen = (int *) malloc3(rows , planes, sizeof(int)); + } + else { +- image = (unsigned char **) +- realloc(image, +- rows * planes * +- sizeof(unsigned char *)); +- imlen = (int *) +- realloc(imlen, rows * planes * sizeof(int)); +- } ++ overflow2(rows,planes); ++ image = (unsigned char **) ++ realloc2(image, rows * planes, ++ sizeof(unsigned char *)); ++ imlen = (int *) realloc2(imlen, rows * planes, sizeof(int)); } + } + if (image == NULL || imlen == NULL) + pm_error("out of memory"); +@@ -212,8 +214,10 @@ main(argc, argv) + for (i = 0, c = 0; c < imlen[p + r * planes]; c += 2) + for (cmd = image[p + r * planes][c], + val = image[p + r * planes][c+1]; +- cmd >= 0 && i < newcols; cmd--, i++) ++ cmd >= 0 && i < newcols; cmd--, i++) { + buf[i] = val; ++ overflow_add(i, 1); ++ } + cols = cols > i ? cols : i; + free(image[p + r * planes]); + /* +@@ -224,6 +228,7 @@ main(argc, argv) + image[p + r * planes] = (unsigned char *) realloc(buf, i); + } + } ++ overflow2(cols, 8); + cols *= 8; + } + +diff --git a/converter/ppm/ppmtoeyuv.c b/converter/ppm/ppmtoeyuv.c +index f5ce115..6f072be 100644 +--- a/converter/ppm/ppmtoeyuv.c ++++ b/converter/ppm/ppmtoeyuv.c +@@ -114,6 +114,7 @@ create_multiplication_tables(const pixval maxval) { + + int index; + ++ overflow_add(maxval, 1); + MALLOCARRAY_NOFAIL(mult299 , maxval+1); + MALLOCARRAY_NOFAIL(mult587 , maxval+1); + MALLOCARRAY_NOFAIL(mult114 , maxval+1); +diff --git a/converter/ppm/ppmtolj.c b/converter/ppm/ppmtolj.c +index 7ed814e..b4e7db1 100644 +--- a/converter/ppm/ppmtolj.c ++++ b/converter/ppm/ppmtolj.c +@@ -182,6 +182,7 @@ int main(int argc, char *argv[]) { + ppm_readppminit( ifp, &cols, &rows, &maxval, &format ); + pixelrow = ppm_allocrow( cols ); + ++ overflow2(cols, 6); + obuf = (unsigned char *) pm_allocrow(cols * 3, sizeof(unsigned char)); + cbuf = (unsigned char *) pm_allocrow(cols * 6, sizeof(unsigned char)); + if (mode == C_TRANS_MODE_DELTA) +diff --git a/converter/ppm/ppmtomitsu.c b/converter/ppm/ppmtomitsu.c +index e59f09b..1d2be20 100644 +--- a/converter/ppm/ppmtomitsu.c ++++ b/converter/ppm/ppmtomitsu.c +@@ -685,6 +685,8 @@ main(int argc, char * argv[]) { + medias = MSize_User; + + if (dpi300) { ++ overflow2(medias.maxcols, 2); ++ overflow2(medias.maxrows, 2); + medias.maxcols *= 2; + medias.maxrows *= 2; + } +diff --git a/converter/ppm/ppmtopcx.c b/converter/ppm/ppmtopcx.c +index fa68edc..97dfb2b 100644 +--- a/converter/ppm/ppmtopcx.c ++++ b/converter/ppm/ppmtopcx.c +@@ -425,6 +425,8 @@ ppmTo16ColorPcx(pixel ** const pixels, + else Planes = 1; + } + } ++ overflow2(BitsPerPixel, cols); ++ overflow_add(BitsPerPixel * cols, 7); + BytesPerLine = ((cols * BitsPerPixel) + 7) / 8; + MALLOCARRAY_NOFAIL(indexRow, cols); + MALLOCARRAY_NOFAIL(planesrow, BytesPerLine); +diff --git a/converter/ppm/ppmtopict.c b/converter/ppm/ppmtopict.c +index 034e705..4541387 100644 +--- a/converter/ppm/ppmtopict.c ++++ b/converter/ppm/ppmtopict.c +@@ -450,6 +450,8 @@ main(int argc, const char ** argv) { + putShort(stdout, 0); /* mode */ + + /* Finally, write out the data. */ ++ overflow_add(cols/MAX_COUNT, 1); ++ overflow_add(cols, cols/MAX_COUNT+1); + outBuf = malloc((unsigned)(cols+cols/MAX_COUNT+1)); + for (row = 0, oc = 0; row < rows; ++row) { + unsigned int rowSize; +diff --git a/converter/ppm/ppmtopj.c b/converter/ppm/ppmtopj.c +index d116773..fc84cac 100644 +--- a/converter/ppm/ppmtopj.c ++++ b/converter/ppm/ppmtopj.c +@@ -179,6 +179,7 @@ char *argv[]; + pixels = ppm_readppm( ifp, &cols, &rows, &maxval ); + + pm_close( ifp ); ++ overflow2(cols,2); + obuf = (unsigned char *) pm_allocrow(cols, sizeof(unsigned char)); + cbuf = (unsigned char *) pm_allocrow(cols * 2, sizeof(unsigned char)); + +diff --git a/converter/ppm/ppmtowinicon.c b/converter/ppm/ppmtowinicon.c +index c673798..af2b445 100644 +--- a/converter/ppm/ppmtowinicon.c ++++ b/converter/ppm/ppmtowinicon.c +@@ -12,6 +12,7 @@ + + #include + #include ++#include + + #include "pm_c_util.h" + #include "winico.h" +@@ -214,6 +215,7 @@ createAndBitmap (gray ** const ba, int const cols, int const rows, + MALLOCARRAY_NOFAIL(rowData, rows); + icBitmap->xBytes = xBytes; + icBitmap->data = rowData; ++ overflow2(xBytes, rows); + icBitmap->size = xBytes * rows; + for (y=0;yxBytes = xBytes; + icBitmap->data = rowData; ++ overflow2(xBytes, rows); + icBitmap->size = xBytes * rows; + + for (y=0;yxBytes = xBytes; + icBitmap->data = rowData; ++ overflow2(xBytes, rows); + icBitmap->size = xBytes * rows; + + for (y=0;ybitcount = bpp; + entry->ih = createInfoHeader(entry, xorBitmap, andBitmap); + entry->colors = palette->colors; +- entry->size_in_bytes = ++ overflow2(4, entry->color_count); ++ overflow_add(xorBitmap->size, andBitmap->size); ++ overflow_add(xorBitmap->size + andBitmap->size, 40); ++ overflow_add(xorBitmap->size + andBitmap->size + 40, 4 * entry->color_count); ++ entry->size_in_bytes = + xorBitmap->size + andBitmap->size + 40 + (4 * entry->color_count); + if (verbose) + pm_message("entry->size_in_bytes = %d + %d + %d = %d", +diff --git a/converter/ppm/ppmtoxpm.c b/converter/ppm/ppmtoxpm.c +index 38d9997..904c98d 100644 +--- a/converter/ppm/ppmtoxpm.c ++++ b/converter/ppm/ppmtoxpm.c +@@ -197,6 +197,7 @@ genNumstr(unsigned int const input, int const digits) { + unsigned int i; + + /* Allocate memory for printed number. Abort if error. */ ++ overflow_add(digits, 1); + if (!(str = (char *) malloc(digits + 1))) + pm_error("out of memory"); + +@@ -314,6 +315,7 @@ genCmap(colorhist_vector const chv, + unsigned int charsPerPixel; + unsigned int xpmMaxval; + ++ if (includeTransparent) overflow_add(ncolors, 1); + MALLOCARRAY(cmap, cmapSize); + if (cmapP == NULL) + pm_error("Out of memory allocating %u bytes for a color map.", +diff --git a/converter/ppm/qrttoppm.c b/converter/ppm/qrttoppm.c +index 935463e..653084c 100644 +--- a/converter/ppm/qrttoppm.c ++++ b/converter/ppm/qrttoppm.c +@@ -46,7 +46,7 @@ main( argc, argv ) + + ppm_writeppminit( stdout, cols, rows, maxval, 0 ); + pixelrow = ppm_allocrow( cols ); +- buf = (unsigned char *) malloc( 3 * cols ); ++ buf = (unsigned char *) malloc2( 3 , cols ); + if ( buf == (unsigned char *) 0 ) + pm_error( "out of memory" ); + +diff --git a/converter/ppm/sldtoppm.c b/converter/ppm/sldtoppm.c +index 6ba4cb4..fc6a498 100644 +--- a/converter/ppm/sldtoppm.c ++++ b/converter/ppm/sldtoppm.c +@@ -464,6 +464,8 @@ slider(slvecfn slvec, + + /* Allocate image buffer and clear it to black. */ + ++ overflow_add(ixdots, 1); ++ overflow_add(iydots, 1); + pixels = ppm_allocarray(pixcols = ixdots + 1, pixrows = iydots + 1); + PPM_ASSIGN(rgbcolor, 0, 0, 0); + ppmd_filledrectangle(pixels, pixcols, pixrows, pixmaxval, 0, 0, +diff --git a/converter/ppm/ximtoppm.c b/converter/ppm/ximtoppm.c +index ce5e639..a39b689 100644 +--- a/converter/ppm/ximtoppm.c ++++ b/converter/ppm/ximtoppm.c +@@ -117,6 +117,7 @@ ReadXimHeader(FILE * const in_fp, + header->bits_channel = atoi(a_head.bits_per_channel); + header->alpha_flag = atoi(a_head.alpha_channel); + if (strlen(a_head.author)) { ++ overflow_add(strlen(a_head.author),1); + if (!(header->author = calloc((unsigned int)strlen(a_head.author)+1, + 1))) { + pm_message("ReadXimHeader: can't calloc author string" ); +@@ -126,6 +127,7 @@ ReadXimHeader(FILE * const in_fp, + strncpy(header->author, a_head.author, strlen(a_head.author)); + } + if (strlen(a_head.date)) { ++ overflow_add(strlen(a_head.date),1); + if (!(header->date =calloc((unsigned int)strlen(a_head.date)+1,1))){ + pm_message("ReadXimHeader: can't calloc date string" ); + return(0); +@@ -134,6 +136,7 @@ ReadXimHeader(FILE * const in_fp, + strncpy(header->date, a_head.date, strlen(a_head.date)); + } + if (strlen(a_head.program)) { ++ overflow_add(strlen(a_head.program),1); + if (!(header->program = calloc( + (unsigned int)strlen(a_head.program) + 1, 1))) { + pm_message("ReadXimHeader: can't calloc program string" ); +@@ -160,6 +163,7 @@ ReadXimHeader(FILE * const in_fp, + if (header->nchannels == 3 && header->bits_channel == 8) + header->ncolors = 0; + else if (header->nchannels == 1 && header->bits_channel == 8) { ++ overflow2(header->ncolors, sizeof(Color)); + header->colors = (Color *)calloc((unsigned int)header->ncolors, + sizeof(Color)); + if (header->colors == NULL) { +diff --git a/editor/pamcut.c b/editor/pamcut.c +index 7c41af3..72df687 100644 +--- a/editor/pamcut.c ++++ b/editor/pamcut.c +@@ -655,6 +655,8 @@ cutOneImage(FILE * const ifP, + + outpam = inpam; /* Initial value -- most fields should be same */ + outpam.file = ofP; ++ overflow_add(rightcol, 1); ++ overflow_add(bottomrow, 1); + outpam.width = rightcol - leftcol + 1; + outpam.height = bottomrow - toprow + 1; + +diff --git a/editor/pbmreduce.c b/editor/pbmreduce.c +index f49c8d9..580e5e0 100644 +--- a/editor/pbmreduce.c ++++ b/editor/pbmreduce.c +@@ -94,6 +94,7 @@ main( argc, argv ) + if (halftone == QT_FS) { + unsigned int col; + /* Initialize Floyd-Steinberg. */ ++ overflow_add(newcols, 2); + MALLOCARRAY(thiserr, newcols + 2); + MALLOCARRAY(nexterr, newcols + 2); + if (thiserr == NULL || nexterr == NULL) +diff --git a/editor/pnmgamma.c b/editor/pnmgamma.c +index b357b0d..ec612d3 100644 +--- a/editor/pnmgamma.c ++++ b/editor/pnmgamma.c +@@ -596,6 +596,7 @@ createGammaTables(enum transferFunction const transferFunction, + xelval ** const btableP) { + + /* Allocate space for the tables. */ ++ overflow_add(maxval, 1); + MALLOCARRAY(*rtableP, maxval+1); + MALLOCARRAY(*gtableP, maxval+1); + MALLOCARRAY(*btableP, maxval+1); +diff --git a/editor/pnmhisteq.c b/editor/pnmhisteq.c +index 8af4201..0c8d6e5 100644 +--- a/editor/pnmhisteq.c ++++ b/editor/pnmhisteq.c +@@ -107,6 +107,7 @@ computeLuminosityHistogram(xel * const * const xels, + unsigned int pixelCount; + unsigned int * lumahist; + ++ overflow_add(maxval, 1); + MALLOCARRAY(lumahist, maxval + 1); + if (lumahist == NULL) + pm_error("Out of storage allocating array for %u histogram elements", +diff --git a/editor/pnmindex.csh b/editor/pnmindex.csh +index c6f1e84..c513a84 100755 +--- a/editor/pnmindex.csh ++++ b/editor/pnmindex.csh +@@ -1,5 +1,7 @@ + #!/bin/csh -f + # ++echo "Unsafe code, needs debugging, do not ship" ++exit 1 + # pnmindex - build a visual index of a bunch of anymaps + # + # Copyright (C) 1991 by Jef Poskanzer. +diff --git a/editor/pnmpad.c b/editor/pnmpad.c +index 1904b68..0797cf1 100644 +--- a/editor/pnmpad.c ++++ b/editor/pnmpad.c +@@ -527,6 +527,8 @@ main(int argc, const char ** argv) { + + computePadSizes(cmdline, cols, rows, &lpad, &rpad, &tpad, &bpad); + ++ overflow_add(cols, lpad); ++ overflow_add(cols + lpad, rpad); + newcols = cols + lpad + rpad; + + if (PNM_FORMAT_TYPE(format) == PBM_TYPE) +diff --git a/editor/pnmremap.c b/editor/pnmremap.c +index b2448cb..b924120 100644 +--- a/editor/pnmremap.c ++++ b/editor/pnmremap.c +@@ -428,6 +428,7 @@ initFserr(struct pam * const pamP, + + unsigned int const fserrSize = pamP->width + 2; + ++ overflow_add(pamP->width, 2); + fserrP->width = pamP->width; + + MALLOCARRAY(fserrP->thiserr, pamP->depth); +@@ -465,6 +466,7 @@ floydInitRow(struct pam * const pamP, struct fserr * const fserrP) { + + int col; + ++ overflow_add(pamP->width, 2); + for (col = 0; col < pamP->width + 2; ++col) { + unsigned int plane; + for (plane = 0; plane < pamP->depth; ++plane) +diff --git a/editor/pnmscalefixed.c b/editor/pnmscalefixed.c +index 884ca31..747cd8f 100644 +--- a/editor/pnmscalefixed.c ++++ b/editor/pnmscalefixed.c +@@ -214,6 +214,7 @@ compute_output_dimensions(const struct cmdline_info cmdline, + const int rows, const int cols, + int * newrowsP, int * newcolsP) { + ++ overflow2(rows, cols); + if (cmdline.pixels) { + if (rows * cols <= cmdline.pixels) { + *newrowsP = rows; +@@ -265,6 +266,8 @@ compute_output_dimensions(const struct cmdline_info cmdline, + + if (*newcolsP < 1) *newcolsP = 1; + if (*newrowsP < 1) *newrowsP = 1; ++ ++ overflow2(*newcolsP, *newrowsP); + } + + +@@ -446,6 +449,9 @@ main(int argc, char **argv ) { + unfilled. We can address that by stretching, whereas the other + case would require throwing away some of the input. + */ ++ ++ overflow2(newcols, SCALE); ++ overflow2(newrows, SCALE); + sxscale = SCALE * newcols / cols; + syscale = SCALE * newrows / rows; + +diff --git a/editor/ppmdither.c b/editor/ppmdither.c +index ec1b977..e701e09 100644 +--- a/editor/ppmdither.c ++++ b/editor/ppmdither.c +@@ -356,6 +356,11 @@ dithMatrix(unsigned int const dithPower) { + (dithDim * sizeof(*dithMat)) + /* pointers */ + (dithDim * dithDim * sizeof(**dithMat)); /* data */ + ++ ++ overflow2(dithDim, sizeof(*dithMat)); ++ overflow3(dithDim, dithDim, sizeof(**dithMat)); ++ overflow_add(dithDim * sizeof(*dithMat), dithDim * dithDim * sizeof(**dithMat)); ++ + dithMat = malloc(dithMatSize); + + if (dithMat == NULL) +diff --git a/editor/specialty/pamoil.c b/editor/specialty/pamoil.c +index 6cb8d3a..6f4bde9 100644 +--- a/editor/specialty/pamoil.c ++++ b/editor/specialty/pamoil.c +@@ -112,6 +112,7 @@ main(int argc, char *argv[] ) { + tuples = pnm_readpam(ifp, &inpam, PAM_STRUCT_SIZE(tuple_type)); + pm_close(ifp); + ++ overflow_add(inpam.maxval, 1); + MALLOCARRAY(hist, inpam.maxval + 1); + if (hist == NULL) + pm_error("Unable to allocate memory for histogram."); +diff --git a/generator/pbmtext.c b/generator/pbmtext.c +index 9f4366d..445d718 100644 +--- a/generator/pbmtext.c ++++ b/generator/pbmtext.c +@@ -96,12 +96,14 @@ parseCommandLine(int argc, const char ** argv, + + for (i = 1; i < argc; ++i) { + if (i > 1) { ++ overflow_add(totaltextsize, 1); + totaltextsize += 1; + text = realloc(text, totaltextsize); + if (text == NULL) + pm_error("out of memory allocating space for input text"); + strcat(text, " "); +- } ++ } ++ overflow_add(totaltextsize, strlen(argv[i])); + totaltextsize += strlen(argv[i]); + text = realloc(text, totaltextsize); + if (text == NULL) +@@ -712,6 +714,7 @@ getText(const char cmdline_text[], + pm_error("A line of input text is longer than %u characters." + "Cannot process.", (unsigned)sizeof(buf)-1); + if (lineCount >= maxlines) { ++ overflow2(maxlines, 2); + maxlines *= 2; + REALLOCARRAY(text_array, maxlines); + if (text_array == NULL) +@@ -832,6 +835,7 @@ main(int argc, const char *argv[]) { + hmargin = fontP->maxwidth; + } else { + vmargin = fontP->maxheight; ++ overflow2(2, fontP->maxwidth); + hmargin = 2 * fontP->maxwidth; + } + } +diff --git a/lib/libpam.c b/lib/libpam.c +index cc6368e..4e10572 100644 +--- a/lib/libpam.c ++++ b/lib/libpam.c +@@ -224,8 +224,9 @@ allocPamRow(const struct pam * const pamP) { + unsigned int const bytesPerTuple = allocationDepth(pamP) * sizeof(sample); + tuple * tuplerow; + +- tuplerow = malloc(pamP->width * (sizeof(tuple *) + bytesPerTuple)); +- ++ overflow_add(sizeof(tuple *), bytesPerTuple); ++ tuplerow = malloc2(pamP->width, (sizeof(tuple *) + bytesPerTuple)); ++ + if (tuplerow != NULL) { + /* Now we initialize the pointers to the individual tuples + to make this a regulation C two dimensional array. +diff --git a/lib/libpammap.c b/lib/libpammap.c +index 55e1d3f..04b1ba3 100644 +--- a/lib/libpammap.c ++++ b/lib/libpammap.c +@@ -108,7 +108,9 @@ allocTupleIntListItem(struct pam * const pamP) { + */ + struct tupleint_list_item * retval; + +- unsigned int const size = ++ overflow2(pamP->depth, sizeof(sample)); ++ overflow_add(sizeof(*retval)-sizeof(retval->tupleint.tuple), pamP->depth*sizeof(sample)); ++ unsigned int const size = + sizeof(*retval) - sizeof(retval->tupleint.tuple) + + pamP->depth * sizeof(sample); + +diff --git a/lib/libpm.c b/lib/libpm.c +index 4374bbe..5ab7f83 100644 +--- a/lib/libpm.c ++++ b/lib/libpm.c +@@ -841,5 +841,53 @@ pm_parse_height(const char * const arg) { + return height; + } + ++/* ++ * Maths wrapping ++ */ + ++void __overflow2(int a, int b) ++{ ++ if(a < 0 || b < 0) ++ pm_error("object too large"); ++ if(b == 0) ++ return; ++ if(a > INT_MAX / b) ++ pm_error("object too large"); ++} ++ ++void overflow3(int a, int b, int c) ++{ ++ overflow2(a,b); ++ overflow2(a*b, c); ++} ++ ++void overflow_add(int a, int b) ++{ ++ if( a > INT_MAX - b) ++ pm_error("object too large"); ++} ++ ++void *malloc2(int a, int b) ++{ ++ overflow2(a, b); ++ if(a*b == 0) ++ pm_error("Zero byte allocation"); ++ return malloc(a*b); ++} ++ ++void *malloc3(int a, int b, int c) ++{ ++ overflow3(a, b, c); ++ if(a*b*c == 0) ++ pm_error("Zero byte allocation"); ++ return malloc(a*b*c); ++} ++ ++void *realloc2(void * a, int b, int c) ++{ ++ overflow2(b, c); ++ if(b*c == 0) ++ pm_error("Zero byte allocation"); ++ return realloc(a, b*c); ++} + +diff --git a/lib/pm.h b/lib/pm.h +index e9f1405..da54391 100644 +--- a/lib/pm.h ++++ b/lib/pm.h +@@ -435,5 +435,12 @@ pm_parse_height(const char * const arg); + } + #endif + ++void *malloc2(int, int); ++void *malloc3(int, int, int); ++#define overflow2(a,b) __overflow2(a,b) ++void __overflow2(int, int); ++void overflow3(int, int, int); ++void overflow_add(int, int); ++ + + #endif +diff --git a/other/pnmcolormap.c b/other/pnmcolormap.c +index 57db432..7195295 100644 +--- a/other/pnmcolormap.c ++++ b/other/pnmcolormap.c +@@ -840,6 +840,7 @@ colormapToSquare(struct pam * const pamP, + pamP->width = intsqrt; + else + pamP->width = intsqrt + 1; ++ overflow_add(intsqrt, 1); + } + { + unsigned int const intQuotient = colormap.size / pamP->width; +diff --git a/urt/Runput.c b/urt/Runput.c +index 3bc562a..645a376 100644 +--- a/urt/Runput.c ++++ b/urt/Runput.c +@@ -202,10 +202,11 @@ RunSetup(rle_hdr * the_hdr) + if ( the_hdr->background != 0 ) + { + register int i; +- register rle_pixel *background = +- (rle_pixel *)malloc( (unsigned)(the_hdr->ncolors + 1) ); +- register int *bg_color; +- /* ++ register rle_pixel *background; ++ register int *bg_color; ++ ++ overflow_add(the_hdr->ncolors,1); ++ background = (rle_pixel *)malloc( (unsigned)(the_hdr->ncolors + 1) ); /* + * If even number of bg color bytes, put out one more to get to + * 16 bit boundary. + */ +@@ -224,7 +225,7 @@ RunSetup(rle_hdr * the_hdr) + /* Big-endian machines are harder */ + register int i, nmap = (1 << the_hdr->cmaplen) * + the_hdr->ncmap; +- register char *h_cmap = (char *)malloc( nmap * 2 ); ++ register char *h_cmap = (char *)malloc2( nmap, 2 ); + if ( h_cmap == NULL ) + { + fprintf( stderr, +diff --git a/urt/rle.h b/urt/rle.h +index 8d72cb9..ac65b94 100644 +--- a/urt/rle.h ++++ b/urt/rle.h +@@ -161,6 +161,17 @@ rle_hdr /* End of typedef. */ + */ + extern rle_hdr rle_dflt_hdr; + ++/* ++ * Provided by pm library ++ */ ++ ++extern void overflow_add(int, int); ++#define overflow2(a,b) __overflow2(a,b) ++extern void __overflow2(int, int); ++extern void overflow3(int, int, int); ++extern void *malloc2(int, int); ++extern void *malloc3(int, int, int); ++extern void *realloc2(void *, int, int); + + /* Declare RLE library routines. */ + +diff --git a/urt/rle_addhist.c b/urt/rle_addhist.c +index b165175..e09ed94 100644 +--- a/urt/rle_addhist.c ++++ b/urt/rle_addhist.c +@@ -70,13 +70,18 @@ rle_addhist(char * argv[], + return; + + length = 0; +- for (i = 0; argv[i]; ++i) ++ for (i = 0; argv[i]; ++i) { ++ overflow_add(length, strlen(argv[i])); ++ overflow_add(length+1, strlen(argv[i])); + length += strlen(argv[i]) +1; /* length of each arg plus space. */ ++ } + + time(&temp); + timedate = ctime(&temp); + length += strlen(timedate); /* length of date and time in ASCII. */ +- ++ overflow_add(strlen(padding), 4); ++ overflow_add(strlen(histoire), strlen(padding) + 4); ++ overflow_add(length, strlen(histoire) + strlen(padding) + 4); + length += strlen(padding) + 3 + strlen(histoire) + 1; + /* length of padding, "on " and length of history name plus "="*/ + if (in_hdr) /* if we are interested in the old comments... */ +@@ -84,8 +89,10 @@ rle_addhist(char * argv[], + else + old = NULL; + +- if (old && *old) ++ if (old && *old) { ++ overflow_add(length, strlen(old)); + length += strlen(old); /* add length if there. */ ++ } + + ++length; /*Cater for the null. */ + +diff --git a/urt/rle_getrow.c b/urt/rle_getrow.c +index bd7d1c8..bd05698 100644 +--- a/urt/rle_getrow.c ++++ b/urt/rle_getrow.c +@@ -168,6 +168,7 @@ rle_get_setup(rle_hdr * const the_hdr) { + char * cp; + + VAXSHORT(comlen, infile); /* get comment length */ ++ overflow_add(comlen, 1); + evenlen = (comlen + 1) & ~1; /* make it even */ + if (evenlen) { + MALLOCARRAY(comment_buf, evenlen); +diff --git a/urt/rle_hdr.c b/urt/rle_hdr.c +index 1611324..7c9c010 100644 +--- a/urt/rle_hdr.c ++++ b/urt/rle_hdr.c +@@ -80,7 +80,10 @@ int img_num; + /* Fill in with copies of the strings. */ + if ( the_hdr->cmd != pgmname ) + { +- char *tmp = (char *)malloc( strlen( pgmname ) + 1 ); ++ char *tmp; ++ ++ overflow_add(strlen(pgmname), 1); ++ tmp = malloc( strlen(pgmname) + 1 ); + RLE_CHECK_ALLOC( pgmname, tmp, 0 ); + strcpy( tmp, pgmname ); + the_hdr->cmd = tmp; +@@ -88,8 +91,10 @@ int img_num; + + if ( the_hdr->file_name != fname ) + { +- char *tmp = (char *)malloc( strlen( fname ) + 1 ); +- RLE_CHECK_ALLOC( pgmname, tmp, 0 ); ++ char *tmp; ++ overflow_add(strlen(fname), 1); ++ tmp = malloc( strlen( fname ) + 1 ); ++ RLE_CHECK_ALLOC( pgmname, tmp, 0 ); + strcpy( tmp, fname ); + the_hdr->file_name = tmp; + } +@@ -153,6 +158,7 @@ rle_hdr *from_hdr, *to_hdr; + if ( to_hdr->bg_color ) + { + int size = to_hdr->ncolors * sizeof(int); ++ overflow2(to_hdr->ncolors, sizeof(int)); + to_hdr->bg_color = (int *)malloc( size ); + RLE_CHECK_ALLOC( to_hdr->cmd, to_hdr->bg_color, "background color" ); + memcpy( to_hdr->bg_color, from_hdr->bg_color, size ); +@@ -161,7 +167,7 @@ rle_hdr *from_hdr, *to_hdr; + if ( to_hdr->cmap ) + { + int size = to_hdr->ncmap * (1 << to_hdr->cmaplen) * sizeof(rle_map); +- to_hdr->cmap = (rle_map *)malloc( size ); ++ to_hdr->cmap = (rle_map *)malloc3( to_hdr->ncmap, 1<cmaplen, sizeof(rle_map)); + RLE_CHECK_ALLOC( to_hdr->cmd, to_hdr->cmap, "color map" ); + memcpy( to_hdr->cmap, from_hdr->cmap, size ); + } +@@ -173,12 +179,17 @@ rle_hdr *from_hdr, *to_hdr; + { + int size = 0; + CONST_DECL char **cp; +- for ( cp=to_hdr->comments; *cp; cp++ ) ++ for ( cp=to_hdr->comments; *cp; cp++ ) ++ { ++ overflow_add(size, 1); + size++; /* Count the comments. */ ++ } + /* Check if there are really any comments. */ + if ( size ) + { ++ overflow_add(size, 1); + size++; /* Copy the NULL pointer, too. */ ++ overflow2(size, sizeof(char *)); + size *= sizeof(char *); + to_hdr->comments = (CONST_DECL char **)malloc( size ); + RLE_CHECK_ALLOC( to_hdr->cmd, to_hdr->comments, "comments" ); +diff --git a/urt/rle_open_f.c b/urt/rle_open_f.c +index ae8548b..c2ef37d 100644 +--- a/urt/rle_open_f.c ++++ b/urt/rle_open_f.c +@@ -163,65 +163,7 @@ dealWithSubprocess(const char * const file_name, + FILE ** const fpP, + bool * const noSubprocessP, + const char ** const errorP) { +- +-#ifdef NO_OPEN_PIPES + *noSubprocessP = TRUE; +-#else +- const char *cp; +- +- reapChildren(catchingChildrenP, pids); +- +- /* Real file, not stdin or stdout. If name ends in ".Z", +- * pipe from/to un/compress (depending on r/w mode). +- * +- * If it starts with "|", popen that command. +- */ +- +- cp = file_name + strlen(file_name) - 2; +- /* Pipe case. */ +- if (file_name[0] == '|') { +- pid_t thepid; /* PID from my_popen */ +- +- *noSubprocessP = FALSE; +- +- *fpP = my_popen(file_name + 1, mode, &thepid); +- if (*fpP == NULL) +- *errorP = "%s: can't invoke <<%s>> for %s: "; +- else { +- /* One more child to catch, eventually. */ +- if (*catchingChildrenP < MAX_CHILDREN) +- pids[(*catchingChildrenP)++] = thepid; +- } +- } else if (cp > file_name && *cp == '.' && *(cp + 1) == 'Z' ) { +- /* Compress case. */ +- pid_t thepid; /* PID from my_popen. */ +- const char * command; +- +- *noSubprocessP = FALSE; +- +- if (*mode == 'w') +- pm_asprintf(&command, "compress > %s", file_name); +- else if (*mode == 'a') +- pm_asprintf(&command, "compress >> %s", file_name); +- else +- pm_asprintf(&command, "compress -d < %s", file_name); +- +- *fpP = my_popen(command, mode, &thepid); +- +- if (*fpP == NULL) +- *errorP = "%s: can't invoke 'compress' program, " +- "trying to open %s for %s"; +- else { +- /* One more child to catch, eventually. */ +- if (*catchingChildrenP < MAX_CHILDREN) +- pids[(*catchingChildrenP)++] = thepid; +- } +- pm_strfree(command); +- } else { +- *noSubprocessP = TRUE; +- *errorP = NULL; +- } +-#endif + } + + +diff --git a/urt/rle_putcom.c b/urt/rle_putcom.c +index ab2eb20..f6a6ff7 100644 +--- a/urt/rle_putcom.c ++++ b/urt/rle_putcom.c +@@ -98,12 +98,14 @@ rle_putcom(const char * const value, + const char * v; + const char ** old_comments; + int i; +- for (i = 2, cp = the_hdr->comments; *cp != NULL; ++i, ++cp) ++ for (i = 2, cp = the_hdr->comments; *cp != NULL; ++i, ++cp) { ++ overflow_add(i, 1); + if (match(value, *cp) != NULL) { + v = *cp; + *cp = value; + return v; + } ++ } + /* Not found */ + /* Can't realloc because somebody else might be pointing to this + * comments block. Of course, if this were true, then the +diff --git a/urt/scanargs.c b/urt/scanargs.c +index f3af334..5e114bb 100644 +--- a/urt/scanargs.c ++++ b/urt/scanargs.c +@@ -62,9 +62,8 @@ typedef int *ptr; + /* + * Storage allocation macros + */ +-#define NEW( type, cnt ) (type *) malloc( (cnt) * sizeof( type ) ) +-#define RENEW( type, ptr, cnt ) (type *) realloc( ptr, (cnt) * sizeof( type ) ) +- ++#define NEW( type, cnt ) (type *) malloc2( (cnt) , sizeof( type ) ) ++#define RENEW( type, ptr, cnt ) (type *) realloc2( ptr, (cnt), sizeof( type ) ) + static CONST_DECL char * prformat( CONST_DECL char *, int ); + static int isnum( CONST_DECL char *, int, int ); + static int _do_scanargs( int argc, char **argv, CONST_DECL char *format, + diff --git a/netpbm/netpbm-security-scripts.patch b/netpbm/netpbm-security-scripts.patch new file mode 100644 index 0000000..0dfe84f --- /dev/null +++ b/netpbm/netpbm-security-scripts.patch @@ -0,0 +1,369 @@ +diff --git a/converter/other/anytopnm b/converter/other/anytopnm +index acf8813..335312a 100755 +--- a/converter/other/anytopnm ++++ b/converter/other/anytopnm +@@ -511,10 +511,7 @@ else + inputFile="-" + fi + +-tempdir="${TMPDIR-/tmp}/anytopnm.$$" +-mkdir -m 0700 $tempdir || \ +- { echo "Could not create temporary file. Exiting."; exit 1;} +-trap 'rm -rf $tempdir' 0 ++tempdir=$(mktemp -d -t anytopnm.XXXXXXXXXX) || exit 1 + + # Take out all spaces + # Find the filename extension for last-ditch efforts later +@@ -537,12 +534,17 @@ typeDescription=`file "$file" | cut -d: -f2- | cut -c2-` + determineType "$file" "$mimeType" "$typeDescription" "$fileExtension" + + if [ "$filetype" = "unknown" ]; then +- echo "$progname: unknown file type. " \ +- "'file' says mime type is '$mimeType', " 1>&2 +- echo "type description is '$typeDescription'" 1>&2 ++ if [ -d "$tempdir" ] ; then ++ rm -rf "$tempdir" ++ fi ++ + exit 1 + fi + + convertIt $file $filetype + ++if [ -d "$tempdir" ] ; then ++ rm -rf "$tempdir" ++fi ++ + exit 0 +diff --git a/editor/pamstretch-gen b/editor/pamstretch-gen +index ba0e818..250fca0 100755 +--- a/editor/pamstretch-gen ++++ b/editor/pamstretch-gen +@@ -31,9 +31,7 @@ if [ "$1" = "" ]; then + exit 1 + fi + +-tempdir="${TMPDIR-/tmp}/pamstretch-gen.$$" +-mkdir -m 0700 $tempdir || \ +- { echo "Could not create temporary file. Exiting."; exit 1;} ++tempfile=$(mktemp /tmp/pnmig.XXXXXXXXXX) || exit 1 + trap 'rm -rf $tempdir' 0 1 3 15 + + tempfile=$tempdir/pnmig +diff --git a/editor/pnmmargin b/editor/pnmmargin +index 0f57d1d..e0d3625 100755 +--- a/editor/pnmmargin ++++ b/editor/pnmmargin +@@ -11,11 +11,7 @@ + # documentation. This software is provided "as is" without express or + # implied warranty. + +-tempdir="${TMPDIR-/tmp}/pnmmargin.$$" +-mkdir -m 0700 $tempdir || \ +- { echo "Could not create temporary file. Exiting." 1>&2; exit 1;} +-trap 'rm -rf $tempdir' 0 1 3 15 +- ++tempdir=$(mktemp -d -t ppmmargin.XXXXXXX) || exit 1 + tmp1=$tempdir/pnmm1 + tmp2=$tempdir/pnmm2 + tmp3=$tempdir/pnmm3 +@@ -90,6 +86,7 @@ else + -white | -black ) + pnmpad $plainopt $color \ + -left=$size -right=$size -top=$size -bottom=$size $tmp1 ++ rm -rf "$tempdir" + exit + ;; + * ) +@@ -103,4 +100,4 @@ else + pnmcat -tb $plainopt $tmp3 $tmp4 $tmp3 + fi + +- ++rm -rf "$tempdir" +diff --git a/editor/ppmfade b/editor/ppmfade +index 027fc79..8eb094f 100755 +--- a/editor/ppmfade ++++ b/editor/ppmfade +@@ -40,6 +40,7 @@ exec perl -w -x -S -- "$0" "$@" + # + ############################################################################## + use strict; ++use File::Temp "tempdir"; + + my $SPREAD = 1; + my $SHIFT = 2; +@@ -137,20 +138,26 @@ if ($first_file ne "undefined") { + + print("Frames are " . $width . "W x " . $height . "H\n"); + ++# ++# We create a tmp-directory right here ++# ++my $tmpdir = tempdir("ppmfade.XXXXXX", CLEANUP => 1); ++ ++ + if ($first_file eq "undefined") { + print "Fading from black to "; +- system("ppmmake \\#000 $width $height >junk1$$.ppm"); ++ system("ppmmake \\#000 $width $height >$tmpdir/junk1$$.ppm"); + } else { + print "Fading from $first_file to "; +- system("cp", $first_file, "junk1$$.ppm"); ++ system("cp", $first_file, "$tmpdir/junk1$$.ppm"); + } + + if ($last_file eq "undefined") { + print "black.\n"; +- system("ppmmake \\#000 $width $height >junk2$$.ppm"); ++ system("ppmmake \\#000 $width $height >$tmpdir/junk2$$.ppm"); + } else { + print "$last_file\n"; +- system("cp", $last_file, "junk2$$.ppm"); ++ system("cp", $last_file, "$tmpdir/junk2$$.ppm"); + } + + # +@@ -158,14 +165,14 @@ if ($last_file eq "undefined") { + # + + # Here's what our temporary files are: +-# junk1$$.ppm: The original (fade-from) image +-# junk2$$.ppm: The target (fade-from) image +-# junk3$$.ppm: The frame of the fade for the current iteration of the +-# the for loop. +-# junk1a$$.ppm: If the fade involves a ppmmix sequence from one intermediate +-# image to another, this is the first frame of that +-# sequence. +-# junk2a$$.ppm: This is the last frame of the above-mentioned ppmmix sequence ++# $tmpdir/junk1$$.ppm: The original (fade-from) image ++# $tmpdir/junk2$$.ppm: The target (fade-from) image ++# $tmpdir/junk3$$.ppm: The frame of the fade for the current iteration of the ++# the for loop. ++# $tmpdir/junk1a$$.ppm: If the fade involves a ppmmix sequence from one intermediate ++# image to another, this is the first frame of that ++# sequence. ++# $tmpdir/junk2a$$.ppm: This is the last frame of the above-mentioned ppmmix sequence + + my $i; # Frame number + for ($i = 1; $i <= $nframes; $i++) { +@@ -173,147 +180,147 @@ for ($i = 1; $i <= $nframes; $i++) { + if ($mode eq $SPREAD) { + if ($i <= 10) { + my $n = $spline20[$i] * 100; +- system("ppmspread $n junk1$$.ppm >junk3$$.ppm"); ++ system("ppmspread $n $tmpdir/junk1$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n; + $n = $spline20[$i] * 100; +- system("ppmspread $n junk1$$.ppm >junk1a$$.ppm"); ++ system("ppmspread $n $tmpdir/junk1$$.ppm >$tmpdir/junk1a$$.ppm"); + $n = (1-$spline20[$i-10]) * 100; +- system("ppmspread $n junk2$$.ppm >junk2a$$.ppm"); ++ system("ppmspread $n $tmpdir/junk2$$.ppm >$tmpdir/junk2a$$.ppm"); + $n = $spline10[$i-10]; +- system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = (1-$spline20[$i-10])*100; +- system("ppmspread $n junk2$$.ppm >junk3$$.ppm"); ++ system("ppmspread $n $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + } elsif ($mode eq $SHIFT) { + if ($i <= 10) { + my $n = $spline20[$i] * 100; +- system("ppmshift $n junk1$$.ppm >junk3$$.ppm"); ++ system("ppmshift $n $tmpdir/junk1$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n; + $n = $spline20[$i] * 100; +- system("ppmshift $n junk1$$.ppm >junk1a$$.ppm"); ++ system("ppmshift $n $tmpdir/junk1$$.ppm >$tmpdir/junk1a$$.ppm"); + $n = (1-$spline20[$i-10])*100; +- system("ppmshift $n junk2$$.ppm >junk2a$$.ppm"); ++ system("ppmshift $n $tmpdir/junk2$$.ppm >$tmpdir/junk2a$$.ppm"); + $n = $spline10[$i-10]; +- system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = (1-$spline20[$i-10]) * 100; +- system("ppmshift $n junk2$$.ppm >junk3$$.ppm"); ++ system("ppmshift $n $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + } elsif ($mode eq $RELIEF) { + if ($i == 1) { +- system("ppmrelief junk1$$.ppm >junk1r$$.ppm"); ++ system("ppmrelief $tmpdir/junk1$$.ppm >$tmpdir/junk1r$$.ppm"); + } + if ($i <= 10) { + my $n = $spline10[$i]; +- system("ppmmix $n junk1$$.ppm junk1r$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1r$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1r$$.ppm junk2r$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1r$$.ppm $tmpdir/junk2r$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = $spline10[$i-20]; +- system("ppmmix $n junk2r$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk2r$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("ppmrelief junk2$$.ppm >junk2r$$.ppm"); ++ system("ppmrelief $tmpdir/junk2$$.ppm >$tmpdir/junk2r$$.ppm"); + } + } elsif ($mode eq $OIL) { + if ($i == 1) { +- system("ppmtopgm junk1$$.ppm | pgmoil >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk1o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk1$$.ppm | pgmoil >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk1o$$.ppm"); + } + if ($i <= 10) { + my $n = $spline10[$i]; +- system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = $spline10[$i-20]; +- system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("ppmtopgm junk2$$.ppm | pgmoil >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk2o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk2$$.ppm | pgmoil >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk2o$$.ppm"); + } + } elsif ($mode eq $EDGE) { + if ($i == 1) { +- system("ppmtopgm junk1$$.ppm | pgmedge >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk1o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk1$$.ppm | pgmedge >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk1o$$.ppm"); + } + if ($i <= 10) { + my $n = $spline10[$i]; +- system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = $spline10[$i-20]; +- system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("ppmtopgm junk2$$.ppm | pgmedge >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk2o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk2$$.ppm | pgmedge >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk2o$$.ppm"); + } + } elsif ($mode eq $BENTLEY) { + if ($i == 1) { +- system("ppmtopgm junk1$$.ppm | pgmbentley >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk1o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk1$$.ppm | pgmbentley >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk1o$$.ppm"); + } + if ($i <= 10) { + my $n = $spline10[$i]; +- system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = $spline10[$i-20]; +- system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("ppmtopgm junk2$$.ppm | pgmbentley >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk2o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk2$$.ppm | pgmbentley >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk2o$$.ppm"); + } + } elsif ($mode eq $BLOCK) { + if ($i <= 10) { + my $n = 1 - 1.9*$spline20[$i]; +- system("pamscale $n junk1$$.ppm | " . +- "pamscale -width $width -height $height >junk3$$.ppm"); ++ system("pamscale $n $tmpdir/junk1$$.ppm | " . ++ "pamscale -width $width -height $height >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = 1 - 1.9*$spline20[31-$i]; +- system("pamscale $n junk2$$.ppm | " . +- "pamscale -width $width -height $height >junk3$$.ppm"); ++ system("pamscale $n $tmpdir/junk2$$.ppm | " . ++ "pamscale -width $width -height $height >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("cp", "junk3$$.ppm", "junk1a$$.ppm"); +- system("pamscale $n junk2$$.ppm | " . +- "pamscale -width $width -height $height >junk2a$$.ppm"); ++ system("cp", "$tmpdir/junk3$$.ppm", "$tmpdir/junk1a$$.ppm"); ++ system("pamscale $n $tmpdir/junk2$$.ppm | " . ++ "pamscale -width $width -height $height >$tmpdir/junk2a$$.ppm"); + } + } elsif ($mode eq $MIX) { + my $fade_factor = sqrt(1/($nframes-$i+1)); +- system("ppmmix $fade_factor junk1$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $fade_factor $tmpdir/junk1$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + print("Internal error: impossible mode value '$mode'\n"); + } + + my $outfile = sprintf("%s.%04d.ppm", $base_name, $i); +- system("cp", "junk3$$.ppm", $outfile); ++ system("cp", "$tmpdir/junk3$$.ppm", $outfile); + } + + # + # Clean up shop. + # +-system("rm junk*$$.ppm"); ++system("rm $tmpdir/junk*$$.ppm"); + + exit(0); +diff --git a/editor/ppmshadow b/editor/ppmshadow +index 62cdf8b..72e1b22 100755 +--- a/editor/ppmshadow ++++ b/editor/ppmshadow +@@ -97,9 +97,10 @@ sub makeConvolutionKernel($$) { + + + my $tmpdir = $ENV{TMPDIR} || "/tmp"; +-my $ourtmp = "$tmpdir/ppmshadow$$"; +-mkdir($ourtmp, 0777) or +- die("Unable to create directory for temporary files '$ourtmp"); ++my $ourtmp; chomp($ourtmp = `mktemp -d -t PPMshadow.XXXXXX`); ++if ($? >> 8) { ++ die "Can't create directory for temporary files"; ++} + + # Process command line options + + diff --git a/netsurf-buildsystem/PKGBUILD b/netsurf-buildsystem/PKGBUILD new file mode 100644 index 0000000..f186daa --- /dev/null +++ b/netsurf-buildsystem/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=netsurf-buildsystem +pkgver=1.9 +pkgrel=1 +pkgdesc='The Netsurf buildsystem' +arch=(any) +url='https://source.netsurf-browser.org/buildsystem.git' +license=(Expat) +source=("$pkgname-$pkgver.tar.bz2::https://source.netsurf-browser.org/buildsystem.git/snapshot/buildsystem-release/$pkgver.tar.bz2") +sha512sums=('f0f4afa32e18d2b00bffa112f926ee4d2ceb17afa3f1727c5a8601e8db64fd46c5626ed0c38650089bfd962b0eefe885cac9618504b6f96a9f849aa0f0cfc20c') + +package() { + cd "buildsystem-release/$pkgver" + make install PREFIX=/usr DESTDIR="$pkgdir" + + msg 'Remove useless files' + rm -v $pkgdir/usr/share/$pkgname/citools/jenkins-build.sh + rmdir -v $pkgdir/usr/share/$pkgname/citools + rm -v $pkgdir/usr/share/$pkgname/makefiles/Makefile.norcroft + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +# vim:set sw=2 et: diff --git a/netsurf/PKGBUILD b/netsurf/PKGBUILD new file mode 100644 index 0000000..dc10ece --- /dev/null +++ b/netsurf/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=netsurf +pkgver=3.10 +pkgrel=5 +pkgdesc="Lightweight and fast web browser" +arch=('i686' 'x86_64') +url='https://www.netsurf-browser.org/' +license=('Expat' 'GPL-2') +depends=('bash' 'curl' 'gtk' 'libhubbub' 'libjpeg-turbo' 'libnsutils' + 'libnsgif' 'libutf8proc' 'libwapcaplet' 'libdom') +makedepends=('check' 'net-tools' 'libcss' 'libnsbmp' + 'libnsgif' 'nsgenbind' 'perl-html-parser' 'setconf' 'vim') +source=("https://download.netsurf-browser.org/netsurf/releases/source-full/netsurf-all-$pkgver.tar.gz" + "netsurf.sh" + "libre.patch") +sha512sums=('fc4c300eef07c540a7e07f8034db25b7e5fb731b5956029af2220f8638802aa38c055ad54b5683c14501aef9c22fb781b96613c16ae9a6996c3833ceede6f9bf' + '00f284e48c2a73600aa8428bf8283df086d020fcb175aae68201decd9a3043d3803bf0f05130c6fac5cbb046fecc6289c7e4396a7e6d75e46ffa09238e768248' + '0494589bcbfc2613fd83d4aed151515afdcc2433e3bccfdd10a15ee9d159e6a613f84440420ec1cbac5b8613ae479438af18c11ea0f9f45bb93c6dac9e024ee1') + +prepare() { + cd "$pkgname-all-$pkgver" + # Remove nonfree engines + patch -Np1 -i "${srcdir}/libre.patch" + # Fix compilation issues + sed -i 's:libutf8proc/::;s:UTF8PROC_CCC_VIRAMA:UTF8PROC_BIDI_CLASS_EN:' netsurf/utils/idna.c + # Use "netsurf" as the name of the executable in /usr/bin + setconf netsurf/frontends/gtk/res/netsurf-gtk.desktop 'Exec=netsurf %u' +} + +build() { + CFLAGS="$CFLAGS -w -Os -funroll-loops" \ + make -C "$pkgname-all-$pkgver/$pkgname" \ + NETSURF_UA_FORMAT_STRING='"NetSurf/%d.%d (%s; Hyperbola GNU/Linux-libre)"' \ + TARGET=gtk3 \ + LIBDIR=lib \ + INCLUDEDIR=include \ + PREFIX=/usr +} + +package() { + make -C "$pkgname-all-$pkgver/$pkgname" \ + TARGET=gtk3 \ + LIBDIR=lib \ + INCLUDEDIR=include \ + DESTDIR="$pkgdir" \ + PREFIX=/usr \ + install + install -Dm755 $pkgname.sh "$pkgdir/usr/bin/$pkgname" + cd "$pkgname-all-$pkgver/$pkgname" + install -Dm644 frontends/gtk/res/$pkgname.xpm \ + "$pkgdir/usr/share/pixmaps/$pkgname.xpm" + install -Dm644 frontends/gtk/res/$pkgname-gtk.desktop \ + "$pkgdir/usr/share/applications/$pkgname.desktop" + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/netsurf/libre.patch b/netsurf/libre.patch new file mode 100644 index 0000000..cd402e2 --- /dev/null +++ b/netsurf/libre.patch @@ -0,0 +1,145 @@ +diff --git a/netsurf/desktop/searchweb.c b/netsurf/desktop/searchweb.c +index 2c0873de..fabbb3e2 100644 +--- a/netsurf/desktop/searchweb.c ++++ b/netsurf/desktop/searchweb.c +@@ -34,9 +34,9 @@ + #include "desktop/gui_internal.h" + + struct search_provider { +- char *name; /**< readable name such as 'google', 'yahoo', etc */ +- char *hostname; /**< host address such as www.google.com */ +- char *searchstring; /** < such as "www.google.com?search=%s" */ ++ char *name; /**< readable name such as 'searx', 'invidious', etc */ ++ char *hostname; /**< host address such as searx.prvcy.eu */ ++ char *searchstring; /** < such as "searx.prvcy.eu?search=%s" */ + char *ico; /** < location of domain's favicon */ + hlcache_handle *ico_handle; + }; +@@ -52,7 +52,7 @@ static struct search_web_ctx_s { + } search_web_ctx; + + +-static const char *default_providers = "Google|www.google.com|http://www.google.com/search?q=%s|http://www.google.com/favicon.ico|\n"; ++static const char *default_providers = "Searx|searx.prvcy.eu|https://searx.prvcy.eu/search?q=%s|https://searx.prvcy.eu/favicon.ico|\n"; + + static const char *default_search_icon_url = "resource:icons/search.png"; + +diff --git a/netsurf/frontends/riscos/appdir/Resources/SearchEngines b/netsurf/frontends/riscos/appdir/Resources/SearchEngines +index e7fd7cb6..7e0a3782 100644 +--- a/netsurf/frontends/riscos/appdir/Resources/SearchEngines ++++ b/netsurf/frontends/riscos/appdir/Resources/SearchEngines +@@ -1,22 +1,2 @@ +-Google|www.google.com|http://www.google.com/search?q=%s|http://www.google.com/favicon.ico| +-Yahoo|search.yahoo.com|http://search.yahoo.com/search?p=%s|http://www.yahoo.com/favicon.ico| +-Bing|www.bing.com|http://www.bing.com/search?q=%s|http://www.bing.com/favicon.ico| +-Business.com|www.business.com|http://www.business.com/search/rslt_default.asp?query=%s|http://www.business.com/favicon.ico| +-Omgili|www.omgili.com|http://www.omgili.com/AAAAA/%s.html|http://www.omgili.com/favicon.ico| +-BBC News|search.bbc.co.uk|http://search.bbc.co.uk/search?q=%s&tab=ns|http://news.bbc.co.uk/favicon.ico| +-Ubuntu Packages|packages.ubuntu.com|http://packages.ubuntu.com/search?keywords=%s|http://packages.ubuntu.com/favicon.ico| +-Creative Commons|creativecommons.org|http://creativecommons.org/?s=%s|http://creativecommons.org/favicon.ico| +-Ask.com|www.ask.com|http://www.ask.com/web?q=%s|http://www.ask.com/favicon.ico| +-Answers.com|www.answers.com|http://www.answers.com/%s|http://www.answers.com/favicon.ico| +-Dictionary.com|dictionary.reference.com|http://dictionary.reference.com/browse/%s?jss=0|http://dictionary.reference.com/favicon.ico| +-Youtube|www.youtube.com|http://www.youtube.com/results?search_query=%s|http://www.youtube.com/favicon.ico| +-AeroMp3|www.aeromp3.com|http://www.aeromp3.com/search?q=%s|http://www.aeromp3.com/favicon.ico| +-AOL|search.aol.com|http://search.aol.com/aol/search?query=%s|http://www.aol.com/favicon.ico| +-Baidu|www.baidu.com|http://www.baidu.com/s?wd=%s|http://www.baidu.com/favicon.ico| +-Amazon|www.amazon.com|http://www.amazon.com/s/ref=nb_ss_gw?field-keywords=%s|http://www.amazon.com/favicon.ico| +-Ebay|shop.ebay.com|http://shop.ebay.com/items/%s|http://www.ebay.com/favicon.ico| +-IMDB|www.imdb.com|http://www.imdb.com/find?q=%s|http://www.imdb.com/favicon.ico| +-ESPN|search.espn.go.com|http://search.espn.go.com/%s/|http://www.espn.go.com/favicon.ico| +-Wikipedia|en.wikipedia.org|http://en.wikipedia.org/w/index.php?title=Special%%3ASearch&search=%s|http://en.wikipedia.org/favicon.ico| +-DuckDuckGo|www.duckduckgo.com|http://www.duckduckgo.com/?q=%s|http://www.duckduckgo.com/favicon.ico| +-Seeks|www.seeks-project.info|https://www.seeks-project.info/search.php/search?q=%s|http://www.seeks-project.info/search.php/public/images/seek_icon_32x32_transparent.png| ++Searx|searx.prvcy.eu|https://searx.prvcy.eu/search?q=%s|%s|https://searx.prvcy.eu/favicon.ico| ++Invidious|invidious.namazso.eu|https://invidious.namazso.eu/results?search_query=%s|http://invidious.namazso.eu/favicon.ico| +diff --git a/netsurf/resources/SearchEngines b/netsurf/resources/SearchEngines +index 38e77957..7e0a3782 100644 +--- a/netsurf/resources/SearchEngines ++++ b/netsurf/resources/SearchEngines +@@ -1,20 +1,2 @@ +-Google|www.google.com|http://www.google.com/search?q=%s|http://www.google.com/favicon.ico| +-Yahoo|search.yahoo.com|http://search.yahoo.com/search?p=%s|http://www.yahoo.com/favicon.ico| +-Bing|www.bing.com|http://www.bing.com/search?q=%s|http://www.bing.com/favicon.ico| +-Business.com|www.business.com|http://www.business.com/search/rslt_default.asp?query=%s|http://www.business.com/favicon.ico| +-Omgili|www.omgili.com|http://www.omgili.com/AAAAA/%s.html|http://omgili.com/public/images/favicon.ico| +-BBC News|search.bbc.co.uk|http://search.bbc.co.uk/search?q=%s&tab=ns|http://www.bbc.co.uk/favicon.ico| +-Ubuntu Packages|packages.ubuntu.com|http://packages.ubuntu.com/search?keywords=%s|http://packages.ubuntu.com/favicon.ico| +-Creative Commons|creativecommons.org|http://creativecommons.org/?s=%s|http://creativecommons.org/favicon.ico|fixme:favicon does not work as it is served as x-icon and is a png +-Ask.com|www.ask.com|http://www.ask.com/web?q=%s|http://sp.uk.ask.com/sh/i/a14/favicon/favicon.ico|fixme:favicon is served as text/plain +-Dictionary.com|dictionary.reference.com|http://dictionary.reference.com/browse/%s?jss=0|http://dictionary.reference.com/favicon.ico| +-Youtube|www.youtube.com|http://www.youtube.com/results?search_query=%s|http://www.youtube.com/favicon.ico| +-AOL|search.aol.com|http://search.aol.com/aol/search?query=%s|http://www.aol.com/favicon.ico| +-Baidu|www.baidu.com|http://www.baidu.com/s?wd=%s|http://www.baidu.com/favicon.ico| +-Amazon|www.amazon.com|http://www.amazon.com/s/ref=nb_ss_gw?field-keywords=%s|http://www.amazon.com/favicon.ico| +-Ebay|shop.ebay.com|http://shop.ebay.com/items/%s|http://www.ebay.com/favicon.ico| +-IMDB|www.imdb.com|http://www.imdb.com/find?q=%s|http://www.imdb.com/favicon.ico| +-ESPN|search.espn.go.com|http://search.espn.go.com/%s/|http://www.espn.go.com/favicon.ico| +-Wikipedia|en.wikipedia.org|http://en.wikipedia.org/w/index.php?title=Special%%3ASearch&search=%s|http://en.wikipedia.org/favicon.ico| +-DuckDuckGo|www.duckduckgo.com|http://www.duckduckgo.com/html/?q=%s|http://www.duckduckgo.com/favicon.ico|fixme:Their ico upsets the current implementation +-Seeks|www.seeks-project.info|https://www.seeks-project.info/search.php/search?q=%s|http://www.seeks-project.info/search.php/public/images/seek_icon_32x32_transparent.png|fixme:they have no icon ++Searx|searx.prvcy.eu|https://searx.prvcy.eu/search?q=%s|%s|https://searx.prvcy.eu/favicon.ico| ++Invidious|invidious.namazso.eu|https://invidious.namazso.eu/results?search_query=%s|http://invidious.namazso.eu/favicon.ico| +diff --git a/netsurf/resources/en/welcome.html b/netsurf/resources/en/welcome.html +index d1073588..04e3c299 100644 +--- a/netsurf/resources/en/welcome.html ++++ b/netsurf/resources/en/welcome.html +@@ -20,38 +20,35 @@ + +

NetSurf is a small, fast open source web browser. We are always keen to improve our browser, so get in touch if you run into any problems. Thanks for choosing NetSurf!

+ +-
++ +
+ +- ++ +
+
+ + + +@@ -61,4 +58,4 @@ + + + +- +\ No newline at end of file ++ diff --git a/netsurf/netsurf.sh b/netsurf/netsurf.sh new file mode 100644 index 0000000..1a153a5 --- /dev/null +++ b/netsurf/netsurf.sh @@ -0,0 +1,4 @@ +#!/bin/bash +# Use English if a directory for the current language does not exist +test -d "/usr/share/netsurf/${LANG:0:2}" || export LANG=en_US.UTF-8 +/usr/bin/netsurf-gtk3 "$@" diff --git a/neverball/PKGBUILD b/neverball/PKGBUILD new file mode 100644 index 0000000..4ad652a --- /dev/null +++ b/neverball/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Jesus E. + +_pkgname=neverball-libre +pkgname=neverball +pkgver=1.6.0 +_debver=$pkgver +_debrel=3 +pkgrel=3 +pkgdesc="Free and libre 3D floor-tilting game" +arch=('i686' 'x86_64') +url='https://neverball.org/' +license=('GPL-3') +depends=('sdl2_ttf' 'libgl' 'libpng' 'libjpeg' 'libvorbis' 'physfs' 'hicolor-icon-theme' 'xdg-utils') +makedepends=('mesa' 'quilt') +groups=('games') +mksource=("https://neverball.org/${pkgname}-${pkgver}.tar.gz") +source=("https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/n/neverball/neverball_${_debver}+git20180603-${_debrel}.debian.tar.xz") +mksha512sums=('174d05308aee3a5e693782c54dd389439752b3597f28193771041d30f6c4236a5d055b2fcca9460b1005e9f000ddb3cbc01b86ea15c2abbf6e5a7996e836f787') +sha512sums=('5ceb145ac54ed8cbce93bafa05a3fcc39068fdd54bac6d0942505d24441f31ccae697dc509f473b082a2d0543d39ffae25277a9e207491a2eb17b3499b4720b4' + 'SKIP' + 'c0da341e66c78f01b57449993a675c2050757cbca6f91a9bf58b323954b6ebb807f4508ff4753eb66939569c4037ee47e8e502f5a74104d980b0f5bce46906e2') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + cd ${pkgname}-${pkgver} + + # remove non-free data + rm -rf data/ball/{blinky,octocat,rift} +} + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + + make DATADIR=/usr/share/games/neverball LOCALEDIR=/usr/share/locale \ + CPPFLAGS="$CPPFLAGS -DNDEBUG" CFLAGS="$CFLAGS" +} + +package(){ + cd ${pkgname}-${pkgver} + + install -d "${pkgdir}/usr/games" + install -d "${pkgdir}"/usr/share/{games/neverball,locale,applications,doc/neverball} + install -d "${pkgdir}"/usr/share/man/man{1,6} + + install -m755 neverball neverputt mapc "${pkgdir}/usr/games" + cp -r locale/* "${pkgdir}/usr/share/locale/" + cp -r data/* "${pkgdir}/usr/share/games/neverball/" + cp -r doc/* "${pkgdir}/usr/share/doc/neverball/" + install -m644 dist/*.desktop "${pkgdir}/usr/share/applications/" + install -m644 dist/mapc.1 "${pkgdir}/usr/share/man/man1" + install -m644 dist/{neverball.6,neverputt.6} "${pkgdir}/usr/share/man/man6" + + for i in 16 24 32 48 64 128 256 512; do + install -D -m644 dist/neverball_$i.png "${pkgdir}/usr/share/icons/hicolor/${i}x$i/apps/neverball.png" + install -D -m644 dist/neverputt_$i.png "${pkgdir}/usr/share/icons/hicolor/${i}x$i/apps/neverputt.png" + done + + chmod -R u=rwX,go=rX "${pkgdir}/usr/share/games/neverball" + + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/doc/legal/license-GPL-3.0.txt" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/nexuiz-classic/PKGBUILD b/nexuiz-classic/PKGBUILD new file mode 100644 index 0000000..07954f9 --- /dev/null +++ b/nexuiz-classic/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=nexuiz-classic +_realpkgname=nexuiz +pkgver=2.5.2 +_debver=$pkgver +_debrel=9 +_debreldata=12 +pkgrel=1 +pkgdesc="Fast-paced, free and libre 3D first-person shooter" +arch=('any') +license=('GPL-2') +depends=('darkplaces') +makedepends=('quilt' 'p7zip' 'fteqcc' 'xz') +groups=('games') +source=("${_realpkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/n/nexuiz/nexuiz_${pkgver}+dp.orig.tar.gz" + "${_realpkgname}-data-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/n/nexuiz-data/nexuiz-data_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/n/nexuiz/nexuiz_${_debver}+dp-${_debrel}.debian.tar.xz" + "https://deb.debian.org/debian/pool/main/n/nexuiz-data/nexuiz-data_${_debver}-${_debreldata}.debian.tar.xz" + "nexuiz" + "nexuiz-server") +sha512sums=('9082040dc0704f6f226eba967d36a7f0ef75cb85819455a621544ef766904fe0a5b211667f2fa9d8c039969467ce9cc3c7cd14e990aa47a60a48532eb5619995' + '195a6c87770db7c12155013b6b183d69111b34769ce61295b5b5f56c014e0d16c7364a4f153780f5fc89d2ea0c62b60040cd53d89dfb4ac0bf18e380ab57e66a' + 'a33c317228f4c34ba23025ec61eedb854a92c1361847f23380d0c1dc718d7f621458897a5efc7b76b7cde3e489081ff8e026282984d8d24c06ac5c5568aab5b2' + '321dde73c655b44a8b18950c761d903253069f5832d7dfd20688907c35b8987052c73f042b8db305beb8ae7953239b63f78b0a177e4eb7a71db337d2a0de10d3' + '69158e3b22fce7a2a11b188af66352423672d33d977733de47608e0e6294333566a1ce3466d8348565cd515f2f99f8103c84c95a37c745f44f0f333c1f7f1172' + '2036db1bdf274b39683f031473a07dc0f56dd5a0628815b72728d576e418c2551fea3da9598e2f53e07556f9de2da48198d02d573f47b65b077793460279b50a') +noextract=("nexuiz_${_debver}+dp-${_debrel}.debian.tar.xz") + +prepare() { + mv "${_realpkgname}-${pkgver}+dp.orig" "${_realpkgname}-${pkgver}" + mkdir -p "${_realpkgname}-${pkgver}/debian" + tar -xf "nexuiz_${_debver}+dp-${_debrel}.debian.tar.xz" --strip 1 \ + -C "${_realpkgname}-${pkgver}/debian" + + cd "${_realpkgname}-data-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/04_exclude_music_in_datapk3.diff || true + rm -v debian/patches/exclude_textures_from_data.pk3.diff || true + + quilt push -av + fi +} + +build() { + cd "${_realpkgname}-data-${pkgver}" + make -C data pk3here +} + +package() { + cd "${_realpkgname}-data-${pkgver}" + install -Dm755 $srcdir/nexuiz{,-server} -t "$pkgdir/usr/games" + install -Dm644 data/data.pk3 -t "$pkgdir/usr/share/games/nexuiz/data" + + # server documentation files + install -d "$pkgdir/usr/share/doc/$pkgname/examples" + cp -R server/* "$pkgdir/usr/share/doc/$pkgname/examples" + + # metadata for package: manpages, license and desktop-file + install -Dm644 $srcdir/$_realpkgname-$pkgver/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm644 $srcdir/$_realpkgname-$pkgver/nexuiz.xpm -t "$pkgdir/usr/share/pixmaps" + install -Dm644 $srcdir/$_realpkgname-$pkgver/debian/nexuiz.desktop -t "$pkgdir/usr/share/applications" + install -Dm644 $srcdir/$_realpkgname-$pkgver/debian/nexuiz{,-server}.6 -t "$pkgdir/usr/share/man/man6" +} diff --git a/nexuiz-classic/nexuiz b/nexuiz-classic/nexuiz new file mode 100755 index 0000000..376aec5 --- /dev/null +++ b/nexuiz-classic/nexuiz @@ -0,0 +1,47 @@ +#!/bin/sh + +DPSELF=nexuiz +# "server" or "client" +DPROLE=client +# darkplaces or darkplaces-server +DPBINARY=darkplaces-sdl + +ENGINE="/usr/games/${DPBINARY}" + +DEBUGGER="$NEXUIZ_DEBUGGER" + +OPTIONS="-nexuiz -basedir /usr/share/games/nexuiz" + +QUIET=0 + +EXCUSE="\ +Nexuiz Classic ${DPROLE} wrapper\n\ +\n\ +Usage: ${DPSELF} [OPTION]...\n\ +\n\ + -h, --help\t\tDisplay this help\n\ + \tPass options to the engine\n\ + +\tPass commands to the engine\n" + +while [ "$1" != "" ]; do + case "$1" in + -h|--help) + echo ${EXCUSE} + exit 0 + ;; + *) + break + ;; + esac + shift +done + +if test "z$QUIET" = z1; then + exec >/dev/null 2>&1; +fi + +if test -n "$NEXUIZ_BACKTRACE"; then + exec gdb -return-child-result -batch -ex run -ex 'thread apply all bt full' -ex kill -ex quit --args ${ENGINE} ${OPTIONS} "$@" +else + exec ${DEBUGGER} ${ENGINE} ${OPTIONS} "$@" +fi diff --git a/nexuiz-classic/nexuiz-server b/nexuiz-classic/nexuiz-server new file mode 100755 index 0000000..cc5b968 --- /dev/null +++ b/nexuiz-classic/nexuiz-server @@ -0,0 +1,47 @@ +#!/bin/sh + +DPSELF=nexuiz-server +# "server" or "client" +DPROLE=server +# darkplaces or darkplaces-server +DPBINARY=darkplaces-dedicated + +ENGINE="/usr/games/${DPBINARY}" + +DEBUGGER="$NEXUIZ_DEBUGGER" + +OPTIONS="-nexuiz -basedir /usr/share/games/nexuiz" + +QUIET=0 + +EXCUSE="\ +Nexuiz Classic ${DPROLE} wrapper\n\ +\n\ +Usage: ${DPSELF} [OPTION]...\n\ +\n\ + -h, --help\t\tDisplay this help\n\ + \tPass options to the engine\n\ + +\tPass commands to the engine\n" + +while [ "$1" != "" ]; do + case "$1" in + -h|--help) + echo ${EXCUSE} + exit 0 + ;; + *) + break + ;; + esac + shift +done + +if test "z$QUIET" = z1; then + exec >/dev/null 2>&1; +fi + +if test -n "$NEXUIZ_BACKTRACE"; then + exec gdb -return-child-result -batch -ex run -ex 'thread apply all bt full' -ex kill -ex quit --args ${ENGINE} ${OPTIONS} "$@" +else + exec ${DEBUGGER} ${ENGINE} ${OPTIONS} "$@" +fi diff --git a/nghttp2/PKGBUILD b/nghttp2/PKGBUILD new file mode 100644 index 0000000..8ff637f --- /dev/null +++ b/nghttp2/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=nghttp2 +pkgver=1.43.0 +_debver=$pkgver +_debrel=1 +pkgrel=4 +pkgdesc="Framing layer of HTTP/2 is implemented as a reusable C library" +arch=('i686' 'x86_64') +url='https://nghttp2.org/' +license=('Expat') +depends=('libressl' 'libev' 'zlib' 'libxml2' 'jansson' 'jemalloc' 'c-ares' 'libnghttp2') +makedepends=('quilt') +options=(!emptydirs) +source=("https://github.com/nghttp2/nghttp2/releases/download/v$pkgver/nghttp2-$pkgver.tar.xz" + "https://deb.debian.org/debian/pool/main/n/$pkgname/${pkgname}_${_debver}-${_debrel}+deb11u1.debian.tar.xz" + "nghttpx.initd" + "nghttpx.run") +backup=("etc/nghttpx/nghttpx.conf" + "etc/logrotate.d/nghttpx") +sha512sums=('eac69ba356870a1cba420a06771082897be8dd40a68f4e04223f41f3d22626e4f5b3766d3dbcc496dd212be01f64c3ac280a2ebddd31dd88f7350c20f56e5d39' + 'e280509589588df21250da192c327f86b77af289b8b4c67c23545635f3a50032ff63f511dd4271883d12afca2aa5d4e4d9d6f358ed15340c8051c67064f5862d' + '959e39f0f26c7f92bd572c31eef901c271f528371b8b7df74b4cd213cdf303524a328809d7891d9c0892b4e2b4823b497624b06eec3b42b8a60a23cbe1421e07' + 'a28acfa333b09fde6f06966c0984d85f3a6b2dd50cff7faf42da749bb59ed9f7eab857a35286a059baf6c98d8e845300a8b23daea0a55eb572716b548e8e85af') + +prepare() { + cd nghttp2-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-Make-fetch-ocsp-response-use-python3.patch + + quilt push -av + fi + autoreconf -vi +} + +build() { + cd nghttp2-$pkgver + + ./configure \ + --prefix=/usr \ + --disable-examples \ + --disable-python-bindings + make +} + +package() { + cd nghttp2-$pkgver + + make DESTDIR="$pkgdir" install + make -C lib DESTDIR="$pkgdir" uninstall + + install -Dm0755 "$srcdir/nghttpx.initd" "${pkgdir}/etc/init.d/nghttpx" + install -Dm0755 "$srcdir/nghttpx.run" "${pkgdir}/etc/sv/nghttpx/run" + + install -Dm644 contrib/nghttpx-logrotate "$pkgdir/etc/logrotate.d/nghttpx" + install -Dm644 nghttpx.conf.sample "$pkgdir/etc/nghttpx/nghttpx.conf" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/nghttp2/nghttpx.initd b/nghttp2/nghttpx.initd new file mode 100644 index 0000000..7665fe7 --- /dev/null +++ b/nghttp2/nghttpx.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="HTTP/2 reverse proxy service" + +command="/usr/sbin/nghttpx" +command_args="--conf /etc/nghttpx/nghttpx.conf --daemon" +pidfile="/var/run/nghttpx.pid" + +depend() { + use dns net +} diff --git a/nghttp2/nghttpx.run b/nghttp2/nghttpx.run new file mode 100644 index 0000000..5484b15 --- /dev/null +++ b/nghttp2/nghttpx.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec nghttpx --conf /etc/nghttpx/nghttpx.conf --daemon diff --git a/ngircd/PKGBUILD b/ngircd/PKGBUILD new file mode 100644 index 0000000..ae5a99c --- /dev/null +++ b/ngircd/PKGBUILD @@ -0,0 +1,84 @@ +# Maintainer: Jesus E. + +pkgname=ngircd +pkgver=26.1 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Next Generation IRC Daemon" +arch=('i686' 'x86_64') +backup=('etc/ngircd.conf') +url='https://ngircd.barton.de/' +license=('GPL-2') +depends=('libressl' 'libident' 'zlib') +makedepends=('quilt') +source=("https://ngircd.barton.de/pub/ngircd/ngircd-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/n/ngircd/ngircd_${_debver}-${_debrel}+deb11u1.debian.tar.xz" + "ngircd.initd" + "ngircd.run") +sha512sums=('4a3ee379dd8d8655a71134c745f750359ceb0512e184db555f65f2bcab68087480365a35680a9ec75b1e6eb0fef23e1cbe0a0e13c3c58d211e5a520a8eeaa71c' + '05632606c36d3e7e1fe1d0ce2dba1c4de7e3ea4f7dff40b3b487bf2fce382c34dab6142bba002c8d90444d7665339690e73b1cc68565740402880b8025edfca5' + '016389f74d3bab61ca3a88c989a92fd4c30293395df2733343fdc91ab71d48a27769ffdbe79fa582ebb9a0d7da5194f7c58a201b62d0040f6c885c3bef48c8c8' + '35909cb2706b09617365746486f9f9475ecf20f11298464e3e3680a755886ce7ed64bc93e87207adf082f686b19397f73b8952a978094bcacc325691bb963f97') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-Respect-SSLConnect-option-for-incoming-connections.patch || true + rm -v debian/patches/0001-S2S-SSL-GnuTLS-Enable-CRL-verification_26.1.patch || true + rm -v debian/patches/0002-Support-for-server-certificate-validation-on-server-.patch || true + rm -v debian/patches/0003-S2S-TLS-Add-missing-CAFile-and-CRLFile-options-to-co.patch || true + rm -v debian/patches/0004-S2S-TLS-Remove-leftover-debug-messages.patch || true + rm -v debian/patches/0005-S2S-TLS-OpenSSL-Always-setup-host-name-verification.patch || true + rm -v debian/patches/0006-S2S-TLS-OpenSSL-Set-the-verification-flags-only-once.patch || true + rm -v debian/patches/0007-S2S-TLS-OpenSSL-Fix-handling-of-certificate-informat.patch || true + rm -v debian/patches/0008-S2S-TLS-OpenSSL-Postpone-verification-of-TLS-session.patch || true + rm -v debian/patches/0009-S2S-TLS-OpenSSL-Streamline-logging.patch || true + rm -v debian/patches/0010-S2S-TLS-Fix-formatting-and-sort-new-SSL-options-in-n.patch || true + rm -v debian/patches/0011-S2S-TLS-MAX_CERT_CHAIN_LENGTH-is-only-used-by-OpenSS.patch || true + rm -v debian/patches/0012-S2S-TLS-GnuTLS-Update-SSL-code-for-GnuTLS-certificat.patch || true + rm -v debian/patches/0013-S2S-TLS-GnuTLS-Fix-handling-of-certificate-informati.patch || true + rm -v debian/patches/0014-S2S-TLS-GnuTLS-Streamline-logging.patch || true + rm -v debian/patches/0015-S2S-TLS-Verify-the-TLS-certificates-by-default.patch || true + rm -v debian/patches/0016-S2S-TLS-GnuTLS-Fix-handling-of-connections-without-p.patch || true + rm -v debian/patches/0017-S2S-TLS-Convert-SSL.txt-to-Markdown-and-update-infor.patch || true + rm -v debian/patches/0018-S2S-TLS-Add-notice-to-INSTALL.md.patch || true + rm -v debian/patches/0019-S2S-TLS-Fix-make-check-in-separate-build-directory.patch || true + rm -v debian/patches/0020-METADATA-Fix-unsetting-cloakhost.patch || true + rm -v debian/patches/1713563399.rel-27-rc1-6-g3e3f6cbe.clarify-that-cafile-is-not-set-by-default.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --with-ident \ + --with-openssl \ + --with-pam=no \ + --enable-ipv6 + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + install -Dm755 "${srcdir}/ngircd.initd" "${pkgdir}/etc/init.d/ngircd" + install -Dm755 "${srcdir}/ngircd.run" "${pkgdir}/etc/sv/ngircd/run" +} diff --git a/ngircd/ngircd.initd b/ngircd/ngircd.initd new file mode 100644 index 0000000..b97d1bd --- /dev/null +++ b/ngircd/ngircd.initd @@ -0,0 +1,30 @@ +#!/sbin/openrc-run +# Copyright 2020-2021 Hyperbola +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload" + +depend() { + need net + after firewall + provide ircd +} + +start() { + ebegin "Starting ngIRCd" + start-stop-daemon --start --quiet --exec /usr/sbin/ngircd + eend $? "Failed to start ngIRCd" +} + +stop() { + ebegin "Stopping ngIRCd" + start-stop-daemon --stop --quiet --exec /usr/sbin/ngircd + eend $? "Failed to stop ngIRCd" +} + +reload() { + ebegin "Reloading ngIRCd" + start-stop-daemon --stop --signal HUP --quiet --oknodo \ + --exec /usr/sbin/ngircd + eend $? "Failed to reload ngIRCd" +} diff --git a/ngircd/ngircd.run b/ngircd/ngircd.run new file mode 100644 index 0000000..82d4191 --- /dev/null +++ b/ngircd/ngircd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec ngircd -n 2>&1 diff --git a/nift/PKGBUILD b/nift/PKGBUILD new file mode 100644 index 0000000..a72ea0f --- /dev/null +++ b/nift/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=nift +_pkgname=nsm +pkgver=3.0.3 +pkgrel=1 +pkgdesc="Fast, free and libre cross-platform website generator" +arch=('i686' 'x86_64') +url='https://nift.dev' +license=('Expat') +depends=('gcc-libs' 'glibc') +source=("${_pkgname}-${pkgver}.tar.gz::https://github.com/nifty-site-manager/${_pkgname}/archive/v${pkgver}.tar.gz" + "libre.patch") +sha512sums=('75aa7681b9c239852ebab0f9580d6adf7f220cf0478e473167b7ff174635deab2de3c471e207a5478f2def5b30dfd94524f440e9898ba0cc027d8ffbe4163bd1' + '0300bf81e400822a46713c93af7e996b5b0d078c2dd04421a13c04b75857c90f92f72aa2823e29129b18f0838055eb96da0e65782266c1475362dc2ae628a5ac') + +prepare() { + cd "${_pkgname}-${pkgver}" + patch -Np1 -i ${srcdir}/libre.patch + sed -i 's|PREFIX?=/usr/local|PREFIX?=/usr|g; s|cp nsm nift|cp -l nsm nift|g' Makefile +} + +build() { + cd "${_pkgname}-${pkgver}" + make -j1 all +} + +package() { + cd "${_pkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/nift/libre.patch b/nift/libre.patch new file mode 100644 index 0000000..d55416a --- /dev/null +++ b/nift/libre.patch @@ -0,0 +1,11 @@ +--- a/nsm.cpp 2024-01-13 13:54:06.000000000 +0100 ++++ b/nsm.cpp 2024-05-30 17:05:50.200098668 +0200 +@@ -240,7 +240,7 @@ + asciiNift(); + + std::cout << "Nift (aka nifty-site-manager or nsm) (c)" << DateTimeInfo().currentYYYY(); +- std::cout << " is a cross-platform open source website and project generator" << std::endl; ++ std::cout << " is a free and libre website and project generator" << std::endl; + std::cout << "Official Website: " << c_blue << "https://nift.dev/" << c_white << std::endl; + std::cout << "Source: " << c_blue << "https://github.com/nifty-site-manager/nsm" << c_white << std::endl; + std::cout << "Installed: " << c_gold << "v" << NSM_VERSION << c_white << std::endl; diff --git a/ninja/PKGBUILD b/ninja/PKGBUILD new file mode 100644 index 0000000..fe4ecfc --- /dev/null +++ b/ninja/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=ninja +pkgver=1.10.1 +pkgrel=3 +pkgdesc="Small build system with a focus on speed" +arch=('i686' 'x86_64') +url='https://ninja-build.org/' +license=('Apache-2.0') +makedepends=('python' 're2c') +source=("${pkgname}-${pkgver}.zip::https://github.com/martine/ninja/archive/v${pkgver}.zip") +sha512sums=('7287fb4cfa0d30732e492eb4746358281965fef516fe316aef307c16ab801b431031a62fda29820e87af7973f4cded0454cd1e1c59e33b661e12d069d0738dc8') + +build() { + cd "$pkgname-$pkgver" + + python configure.py --bootstrap +} + +package() { + cd "$pkgname-$pkgver" + + install -m755 -D ninja "$pkgdir/usr/bin/ninja" + install -m644 -D doc/manual.asciidoc "$pkgdir/usr/share/doc/ninja/manual.asciidoc" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + + install -m644 -D misc/ninja.vim "$pkgdir/usr/share/vim/vimfiles/syntax/ninja.vim" + + install -m644 -D misc/bash-completion "$pkgdir/usr/share/bash-completion/completions/ninja" + install -m644 -D misc/zsh-completion "$pkgdir/usr/share/zsh/site-functions/_ninja" +} diff --git a/nitrogen/PKGBUILD b/nitrogen/PKGBUILD new file mode 100644 index 0000000..88e0cee --- /dev/null +++ b/nitrogen/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=nitrogen +pkgver=1.6.1 +pkgrel=1 +pkgdesc='Background browser and setter for X windows' +arch=('i686' 'x86_64') +url='http://projects.l3ib.org/nitrogen/' +license=('GPL-2') +depends=('gtk2mm' 'hicolor-icon-theme' 'librsvg-legacy') +validpgpkeys=('5B8B00633A07437835C80B7F1E39A08EDAB8F316') # keybase.io/daf ') +source=("https://github.com/l3ib/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz"{,.asc}) +sha512sums=('125bb62162da95c3aab8c146f93113162c171512ffd3e8e6011fff22f1a1b841d1ffc9b4df4fd1b0b62a3731c68cd30c8448dbc836e9861216f50068d8b08c9c' + 'SKIP') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + CXXFLAGS+=' -std=c++11' + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/nload/PKGBUILD b/nload/PKGBUILD new file mode 100644 index 0000000..845e3b9 --- /dev/null +++ b/nload/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=nload +pkgver=0.7.4 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Monitors network traffic and bandwidth usage" +url='http://www.roland-riegel.de/nload' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('gcc-libs' 'ncurses') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::http://deb.debian.org/debian/pool/main/n/nload/nload_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/n/nload/nload_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ca3e36d3f77c5a7994a3261042fb65a1458a29c769e6bebbe3b8e49b3045aca6f4d047065d11431b28368e0d881c24c92533fa24f0e54ac270f1f5bccfb5c0af' + 'a0f49ca6197215b7f5de83fb755b6f098d585713b16ffea3ca2ad193f23d5d0b86c34b405953769a2021cba725183bab02568ba1efddcd4a3ef1269f5d5d0d2a') + +prepare() { + cd $pkgname-$pkgver + + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # make gzip reproducible by not embedding timestamps + sed -i 's/gzip -f/gzip -nf'/ docs/Makefile.am docs/Makefile.in +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/nlohmann-json/PKGBUILD b/nlohmann-json/PKGBUILD new file mode 100644 index 0000000..a07b9d0 --- /dev/null +++ b/nlohmann-json/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=nlohmann-json +_pkgbase=json +pkgver=3.9.1 +pkgrel=1 +pkgdesc="JSON for Modern C++" +arch=('any') +url='https://github.com/nlohmann/json' +license=('Expat') +makedepends=('cmake') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/nlohmann/json/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('e0eb4727bea993af984f832e069d03a21219befae0f24ee49e67a1144cf1e8428dcf2e37f683aedb8d14118545d5087f2b7d822a576944cef3e590a12be51642') + +build() { + cmake -DCMAKE_INSTALL_PREFIX='/usr' \ + -DCMAKE_INSTALL_LIBDIR='/usr/lib' \ + -DCMAKE_BUILD_TYPE='None' \ + -DJSON_MultipleHeaders=ON \ + -Wno-dev \ + -B "$_pkgbase-$pkgver/build" \ + -S "$_pkgbase-$pkgver" + make VERBOSE=1 -C "$_pkgbase-$pkgver/build" +} + +package() { + cd $_pkgbase-$pkgver + make DESTDIR="${pkgdir}" install -C build + install -vDm644 {CODE_OF_CONDUCT,README}.md -t "${pkgdir}/usr/share/doc/$pkgname" + install -vDm644 LICENSE.MIT -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/nmap-legacy/PKGBUILD b/nmap-legacy/PKGBUILD new file mode 100644 index 0000000..f6d26b9 --- /dev/null +++ b/nmap-legacy/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgname=nmap-legacy +_pkgname=nmap +pkgver=7.80 +_debver=7.91 +_debrel=2 +pkgrel=5 +pkgdesc="Utility for network discovery and security auditing (legacy version)" +url='https://nmap.org/' +arch=('i686' 'x86_64') +license=('custom:BSD-like-SVN' 'GPL-2' 'Modified-BSD' 'Original-BSD' 'Expat' 'ISC') +replaces=('nmap') +conflicts=('nmap') +provides=('nmap') +depends=('glibc' 'pcre' 'libressl' 'lua' 'libpcap' 'libssh2' 'zlib' 'gcc-libs' 'python-lxml') +makedepends=('quilt') +source=("https://nmap.org/dist/${_pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/n/nmap/nmap_${_debver}+dfsg1+really7.80+dfsg1-${_debrel}.debian.tar.xz") +sha512sums=('d4384d3ebf4f3abf3588eed5433f733874ecdceb9342a718dc36db19634b0cc819d73399974eb0a9a9c9dd9e5c88473e07644ec91db28b0c072552b54430be6b' + '943f703b6758acd5ef20243569add268b980d2967f5846464cce0c34c6443790ad66945cfdae8f71bb553a84920cf14012c68884a2c5001bbc7ec88fbca181aa') + +prepare() { + cd "${srcdir}/${_pkgname}-${pkgver}" + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0003-Link-against-lua-lpeg.patch || true + + quilt push -av +} + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + export PYTHON=python + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --with-libpcap=/usr \ + --with-libpcre=/usr \ + --with-zlib=/usr \ + --with-libssh2=/usr \ + --with-liblua=/usr \ + --with-liblinear \ + --without-ndiff \ + --without-zenmap \ + --enable-ipv6 + make -j1 +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + # adding ndiff + cd ndiff + python setup.py install --root="${pkgdir}" + cd .. + + # cleanup package from unwanted data + rm "${pkgdir}/usr/share/nmap/nselib/jdwp.lua" + rm "${pkgdir}/usr/share/nmap/scripts/"jdwp-{exec,info,inject,version}.nse + rm -rf "${pkgdir}/usr/share/nmap/nselib/data/jdwp-class" + rm "${pkgdir}/usr/bin/uninstall_ndiff" + + # further documentation and licenses + install -Dm644 README.md docs/nmap.usage.txt -t "${pkgdir}/usr/share/doc/${_pkgname}" + install -Dm644 COPYING docs/3rd-party-licenses.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/nml/PKGBUILD b/nml/PKGBUILD new file mode 100644 index 0000000..af390e6 --- /dev/null +++ b/nml/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=nml +pkgver=0.7.4 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="OpenTTD newgrf meta language compiler" +arch=('i686' 'x86_64') +url='https://github.com/OpenTTD/nml' +license=('GPL-2') +depends=('python-ply' 'python-pillow' 'python-setuptools') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/n/nml/nml_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/n/nml/nml_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('78a0961db3a56684fbc999f69bc5e02b9f002ba7b7a2afd39c7d4c9695b3306339ee55c4b9d711d85ca7c4c0e4d53abc71c9e0720904d44a0c388a793a28fc4b' + 'b9328faabcd5d305a32dc5521f4f8d83d81d58eb2d260102d9531f378356b974be67b12e426d0d5316becb10d80fb61f4456db11da1975152312c5c405c5eff2') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + python setup.py build +} + +package() { + cd "${pkgname}-${pkgver}" + python setup.py install --root="${pkgdir}/" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/nnn/PKGBUILD b/nnn/PKGBUILD new file mode 100644 index 0000000..01143fd --- /dev/null +++ b/nnn/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=nnn +pkgver=5.1 +pkgrel=1 +pkgdesc="Fast terminal file manager" +url='https://github.com/jarun/nnn' +arch=('i686' 'x86_64') +license=('Expat' 'Simplified-BSD') +depends=('bash' 'sed') +optdepends=('libarchive: for more archive formats' + 'zip: for zip archive format' + 'unzip: for zip archive format' + 'sshfs: mount remotes' + 'fuse2: unmount remotes' + 'xdg-utils: desktop opener') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/jarun/nnn/archive/v${pkgver}.tar.gz") +sha512sums=('6b20f14a937c232b072c90e81d49dc2d4c422918d7a5fdca6502dbc0c75ec73850f31fa9eccbc31b4773e700b255b4800baa5fe2f920b3c4c430151b53d4c33f') + +prepare() { + sed -i 's/install: all/install:/' "${pkgname}-${pkgver}/Makefile" +} + +build() { + cd "${pkgname}-${pkgver}" + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" PREFIX=/usr install + make DESTDIR="${pkgdir}" PREFIX=/usr install-desktop + + install -Dm644 misc/auto-completion/bash/nnn-completion.bash "${pkgdir}/usr/share/bash-completion/completions/nnn" + install -Dm644 misc/auto-completion/zsh/_nnn "${pkgdir}/usr/share/zsh/site-functions/_nnn" + + install -Dm644 -t "${pkgdir}/usr/share/nnn/quitcd/" misc/quitcd/* + + # handle plugins + cp -a plugins "${pkgdir}/usr/share/nnn/plugins/" + rm "${pkgdir}/usr/share/nnn/plugins/"{boom,getplugs,gsconnect,imgur,imgresize,kdeconnect,moclyrics,mtpmount,upload} + rm "${pkgdir}/usr/share/nnn/quitcd/"quitcd.fish + + install -Dm644 -t "${pkgdir}/usr/share/licenses/${pkgname}/" LICENSE +} diff --git a/normalize/PKGBUILD b/normalize/PKGBUILD new file mode 100644 index 0000000..9ec263c --- /dev/null +++ b/normalize/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=normalize +pkgver=0.7.7 +_debver=$pkgver +_debrel=17 +pkgrel=1 +pkgdesc="A tool for adjusting the volume of audio-files to a standard level" +arch=('i686' 'x86_64') +url='https://normalize.nongnu.org' +license=('GPL-2') +depends=('audiofile' 'libmad' 'vorbis-tools' 'lame' 'flac' 'mpg123') +makedepends=('pkg-config' 'intltool' 'quilt') +source=("https://download.savannah.gnu.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/n/normalize-audio/normalize-audio_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5fb2265eac93b243682cedb955d2ddfe05f55cafdeb1d757aaef0afb36bc9907ea3321b8554e128f6228bdeeaeef96e3e9ba000d0ad84282cc76a50b3e460ce4' + '5ae26ebcb58e29acef21ff5df1cb21384550d6fd65728d0cc66d4798aab8e7610c8b1d72eaa6380a862884a99928c402bd917b6dba763a0ae22468af1e03c335') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + touch AUTHORS NEWS ChangeLog + autoreconf -vi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --with-audiofile \ + --with-mad + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/notion/PKGBUILD b/notion/PKGBUILD new file mode 100644 index 0000000..a9190c7 --- /dev/null +++ b/notion/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=notion +pkgver=4.0.2 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc="Tabbed and tiling window manager" +arch=('i686' 'x86_64') +url='http://notion.sourceforge.net/' +license=('LGPL-2.1') +depends=('glib2' 'lua' 'libxext' 'libsm' 'libxinerama' 'libxrandr') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/raboof/notion/archive/refs/tags/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/n/notion/notion_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('ac764d7f754407b315660e33eb6a561f9c003c353e8710df25858c461b8e1b6a1ecc1f5f9091cf85195ca4b146936c586287c47ffe98f37a89889034c1b932a7' + '28664928dda05ef8b382434e728bcca1b152de403b2a9d5617618addbeff65fbdbf9905e9c71690f7ba9d55d75eca95d0319de45c4713edafe366babbe9d033a') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-201_build-config.patch || true + rm -v debian/patches/0002-206_use-x-terminal-emulator.patch || true + rm -v debian/patches/0003-209_use-etc-default.patch || true + rm -v debian/patches/0004-210_use-cfg_debian_ext.patch || true + rm -v debian/patches/0005-211_add-debian-menu.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + export PREFIX=/usr + export ETCDIR=/etc/notion + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir/" install + cp -R contrib "$pkgdir/usr/share/" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/notmuch/PKGBUILD b/notmuch/PKGBUILD new file mode 100644 index 0000000..cf5bc93 --- /dev/null +++ b/notmuch/PKGBUILD @@ -0,0 +1,90 @@ +# Maintainer: Jesus E. + +pkgbase=notmuch +pkgname=('notmuch' 'notmuch-vim' 'notmuch-runtime') +pkgver=0.37 +pkgrel=2 +arch=('i686' 'x86_64') +url="https://notmuchmail.org/" +license=('GPL-3') +makedepends=('python' 'python-setuptools' 'python-sphinx' 'python-cffi' + 'gnupg-stable' 'ruby' 'pkgconfig' 'xapian-core' 'gmime3' 'talloc' 'sfsexp') +options=(!makeflags) +source=("https://notmuchmail.org/releases/${pkgname}-${pkgver}.tar.xz") +sha512sums=('31cac1ff03b139b18a4fec5e29907ba0e3a965f0a7bf5f2f2b0f75980f9663173745be854e83943f344a09cdb7f5615fa48218e327c4ade7a55b3a22b2a9c45e') + +build() { + cd "$srcdir/$pkgbase-$pkgver" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --includedir=/usr/include \ + --zshcompletiondir=/usr/share/zsh/site-functions + make + + make -C "contrib/${pkgbase}-mutt" + + make ruby-bindings + + cd "$srcdir/$pkgbase-$pkgver/bindings/python" + python setup.py build + + cd "$srcdir/$pkgbase-$pkgver/bindings/python-cffi" + python setup.py build +} + +package_notmuch-runtime(){ + pkgdesc="Runtime for notmuch and notmuch-mutt" + depends=('xapian-core' 'gmime3' 'talloc' 'sfsexp') + + cd "$srcdir/$pkgbase-$pkgver" + + make DESTDIR="$pkgdir/" LIBDIR_IN_LDCONFIG=0 WITH_EMACS=0 install + make DESTDIR="$pkgdir/" WITH_BASH=1 install-completion + + # install manpages + make DESTDIR="$pkgdir" install-man + + # this is provided both with and without a statically included library + install -Dm755 notmuch-shared "$pkgdir/usr/bin/notmuch" + + # license + install -Dm644 "$srcdir/$pkgbase-$pkgver/COPYING-GPL-3" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_notmuch-vim(){ + pkgdesc="Vim plugins for notmuch" + depends=('notmuch-runtime' 'ruby') + optdepends=('elinks: for previewing html mail') + + make -C "$srcdir/$pkgbase-$pkgver/vim" DESTDIR="$pkgdir" prefix="/usr/share/vim/vimfiles" install + + # license + install -Dm644 "$srcdir/$pkgbase-$pkgver/COPYING-GPL-3" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_notmuch(){ + pkgdesc="Notmuch is not much of an email program" + depends=('notmuch-runtime') + optdepends=('vim: for using the vim interface' + 'python-cffi: for using the python-cffi bindings' + 'ruby: for using the ruby bindings' + 'gnupg-stable: for email encryption') + + cd "$srcdir/$pkgbase-$pkgver" + + # install ruby bindings + sed -i 's:INSTALL = .*[^D]$:& -D:' bindings/ruby/Makefile + make -C bindings/ruby exec_prefix="$pkgdir"/usr install + + # install python bindings + cd "$srcdir/$pkgbase-$pkgver/bindings/python" + python setup.py install --root="$pkgdir" --optimize=1 + + cd "$srcdir/$pkgbase-$pkgver/bindings/python-cffi" + python setup.py install --root="$pkgdir" --optimize=1 + + # license + install -Dm644 "$srcdir/$pkgbase-$pkgver/COPYING-GPL-3" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/notmuch/notmuch.install b/notmuch/notmuch.install new file mode 100644 index 0000000..a683eed --- /dev/null +++ b/notmuch/notmuch.install @@ -0,0 +1,8 @@ +post_upgrade() { + if (( $(vercmp $2 0.20) < 0 )); then + cat <<"EOF" +==> notmuch-deliver was removed in notmuch 0.20. +==> Please use `notmuch insert` instead. +EOF + fi +} diff --git a/nq/PKGBUILD b/nq/PKGBUILD new file mode 100644 index 0000000..ce1c508 --- /dev/null +++ b/nq/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=nq +pkgver=0.3.1 +pkgrel=1 +pkgdesc="Lightweight job queue" +license=('CC0-1.0') +depends=('glibc') +arch=('i686' 'x86_64') +url='https://git.vuxu.org/nq/about/' +options=('strip') +source=("https://git.vuxu.org/nq/snapshot/$pkgname-$pkgver.tar.gz") +sha512sums=('42a43eb90488e17439d12740268b66cf6ed6f255ee0377f2df02f97fe2cdd562726e06909fb8efa26e3740e885088083f0880d986bf3f58615a21f1ea4c11d87') + +build() { + cd "$pkgname-$pkgver" + make PREFIX=/usr +} + +package() { + cd "$pkgname-$pkgver" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 "COPYING" -t "$pkgdir/usr/share/licenses/nq" +} diff --git a/nsgenbind/PKGBUILD b/nsgenbind/PKGBUILD new file mode 100644 index 0000000..d8f0760 --- /dev/null +++ b/nsgenbind/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=nsgenbind +pkgver=0.8 +pkgrel=1 +pkgdesc='NetSurf JavaScript binding generator' +arch=('i686' 'x86_64') +url='https://git.netsurf-browser.org/nsgenbind.git' +license=('Expat') +makedepends=('netsurf-buildsystem') +source=("${pkgname}-${pkgver}.tar.gz::https://git.netsurf-browser.org/nsgenbind.git/snapshot/nsgenbind-release/${pkgver}.tar.gz") +sha512sums=('058fc4b27361eb07089dcb04f86787a83e30172d2c8581ef710273efd666807e081c8a0f11847b5a92fc5e8983404914072b190e8e7b86b95e158135c7ef2f41') + +prepare() { + mv ${pkgname}-release/${pkgver} ${pkgname}-${pkgver} + rm -rf ${pkgname}-release +} + +build() { + make -C ${pkgname}-${pkgver} PREFIX=/usr +} + +package() { + make -C ${pkgname}-${pkgver} install PREFIX=/usr DESTDIR="$pkgdir" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/nsxiv/PKGBUILD b/nsxiv/PKGBUILD new file mode 100644 index 0000000..8d57516 --- /dev/null +++ b/nsxiv/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=nsxiv +pkgver=31 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Neo (or New or Not) Simple (or Small or Suckless) X Image Viewer" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://nsxiv.codeberg.page/' +provides=('sxiv') +conflicts=('sxiv') +replaces=('sxiv') +depends=('imlib2' 'libx11' 'libxft' 'fontconfig' 'freetype2' 'libexif' 'hicolor-icon-theme') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://codeberg.org/nsxiv/nsxiv/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/n/nsxiv/nsxiv_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('64139d3a0c74a96eb01f21689a5d9af64012dd02d85ab6984eb4881218eb095f05134bbd91da5ff6fe8246782121a90f6b3524f5a51296de0dfbe852f600cfaa' + 'd2001a12ac676fe069aca233db1d50c777dddcd9a0781e15324b86a9000a5eb0fdcbb26d8e494f3bd8764d06f28ae8975f52bad514890daa8f974afad653c2ba') + +prepare() { + cd "$pkgname" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + [ ! -f config.h ] && cp config.def.h config.h + + # make install currently also runs make all + # see https://codeberg.org/nsxiv/nsxiv-record/issues/237 + sed -i -e '/^install: / s|: all|:|' Makefile +} + +build() { + make -C "$pkgname" HAVE_LIBGIF=0 HAVE_LIBWEBP=0 HAVE_INOTIFY=0 HAVE_LIBFONT=1 HAVE_LIBEXIF=1 +} + +package() { + make -C "$pkgname" PREFIX=/usr DESTDIR="$pkgdir" install-all + install -Dm644 "$srcdir/$pkgname/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ntfs-3g/CVE-2023-52890.patch b/ntfs-3g/CVE-2023-52890.patch new file mode 100644 index 0000000..bf26dbf --- /dev/null +++ b/ntfs-3g/CVE-2023-52890.patch @@ -0,0 +1,34 @@ +From 75dcdc2cf37478fad6c0e3427403d198b554951d Mon Sep 17 00:00:00 2001 +From: Erik Larsson +Date: Tue, 13 Jun 2023 17:47:15 +0300 +Subject: [PATCH] unistr.c: Fix use-after-free in 'ntfs_uppercase_mbs'. + +If 'utf8_to_unicode' throws an error due to an invalid UTF-8 sequence, +then 'n' will be less than 0 and the loop will terminate without storing +anything in '*t'. After the loop the uppercase string's allocation is +freed, however after it is freed it is unconditionally accessed through +'*t', which points into the freed allocation, for the purpose of NULL- +terminating the string. This leads to a use-after-free. +Fixed by only NULL-terminating the string when no error has been thrown. + +Thanks for Jeffrey Bencteux for reporting this issue: +https://github.com/tuxera/ntfs-3g/issues/84 +--- + libntfs-3g/unistr.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/libntfs-3g/unistr.c b/libntfs-3g/unistr.c +index 5854b3b7..db8ddf42 100644 +--- a/libntfs-3g/unistr.c ++++ b/libntfs-3g/unistr.c +@@ -1189,8 +1189,9 @@ char *ntfs_uppercase_mbs(const char *low, + free(upp); + upp = (char*)NULL; + errno = EILSEQ; ++ } else { ++ *t = 0; + } +- *t = 0; + } + return (upp); + } diff --git a/ntfs-3g/PKGBUILD b/ntfs-3g/PKGBUILD new file mode 100644 index 0000000..4511837 --- /dev/null +++ b/ntfs-3g/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgname=ntfs-3g +pkgver=2021.8.22 +_debver=$pkgver +_debrel=3 +pkgrel=3 +pkgdesc="NTFS filesystem driver and utilities" +url='https://www.tuxera.com/community/open-source-ntfs-3g/' +arch=('i686' 'x86_64') +license=('GPL-2' 'LGPL-2') +depends=('util-linux' 'fuse2') +makedepends=('quilt') +conflicts=('ntfsprogs') +provides=('ntfsprogs') +replaces=('ntfsprogs') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig} + "https://repo.hyperbola.info:50000/sources/${pkgname}/ntfs-3g_${_debver}-${_debrel}.debian.tar.xz"{,.sig} + "CVE-2023-52890.patch") +sha512sums=('5cacdbda89e64b61f190fa10b571641c51ca048971ad26ec3484964a4b3281297478da9df3810fa75e4f6d3404d39bdf54dbb3f9a30180018e9512510cad2ded' + 'SKIP' + '982bba7545e069e2338942d44f0a08a9a1b7532e6568c1acb4b765372bcb3d4d511cf7fae74bb71a4d13a734da19737cf930b5c4307991726c1efbf0d0a585dc' + 'SKIP' + '3906eea1dd20a3f4f071bbc8f1b508c27a1204985719f0e10b1da241ca4ce9d48a3d829303cb48913e56041b900045c3bdb4b96c92f96ee66cd53344605512c7') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/CVE-2023-52890.patch + autoreconf -vfi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --exec-prefix=/usr \ + --mandir=/usr/share/man \ + --disable-ldconfig \ + --disable-static \ + --with-fuse=external \ + --enable-posix-acls \ + --enable-extras + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -d -m755 "${pkgdir}/usr/share/licenses/$pkgname" + for i in COPYING{,.LIB}; do + install -m644 "$i" "${pkgdir}/usr/share/licenses/${pkgname}/$i" + done + + ln -s /usr/bin/ntfs-3g "${pkgdir}/sbin/mount.ntfs" +} diff --git a/ntp/PKGBUILD b/ntp/PKGBUILD new file mode 100644 index 0000000..d21a4e4 --- /dev/null +++ b/ntp/PKGBUILD @@ -0,0 +1,90 @@ +# Maintainer: Jesus E. + +pkgname=ntp +_pkgname=ntp #-dev +_pkgver=4.2.8p15 +pkgver=${_pkgver/p/.p} +_debver=4.2.8p15 +_debrel=1 +pkgrel=1 +pkgdesc='Network Time Protocol reference implementation' +url='http://www.ntp.org/' +license=('Simplified-BSD') +arch=('i686' 'x86_64') +depends=('libressl' 'perl' 'libcap' 'libedit') +makedepends=('quilt') +optdepends=('logger: message logging support') +backup=('etc/ntp.conf' + 'etc/conf.d/ntpd' + 'etc/conf.d/ntp-client' + 'etc/init.d/sntp') +source=("https://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/${_pkgname}-${_pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/n/ntp/ntp_$_debver+dfsg-$_debrel.debian.tar.xz" + 'ntp.conf' + 'libressl-2.8.patch' + 'ntpd.confd' + 'ntp-client.confd' + 'sntp.confd' + 'ntpd.initd' + 'ntp-client.initd' + 'sntp.initd') +sha512sums=('f5ad765e45fc302263dd40e94c287698fd235b94f3684e49f1d5d09d7d8bdd6b8c0fb96ecdabffea3d233e1e79b3c9687b76dc204ba76bad3f554682f4a97794' + '6fe6603f2c699d65ffa4e49f1c406af9d8b50a97154b157e5111d332ea2d25374fb15813fbbc0d9788b7fa93469c6b768d1371ebc5b6235dd47bbb408b6b55af' + '94e801d7a04620bc473f387e20a250b53e7788e287e42081812d47ea47be21a17edd2d3471bd0ad416ce80dccf3788cf93025ced37a1c5984fe072662f427855' + '00ff0ce8e824190b12d914518be9653c79d72137e45e10e5e62f835e8d38c7cbb740acc669a0062e9d300f18257169823acd535023f524d77a147a73b5c284ca' + 'a9e96a214d3c21a3f4863709c48a11f9dedc73e2d83a9b20761021df44a9acb56757e77f113aa0314f5f3923e9cb26bc6e0147658d20e8a74d078d415a171d91' + '2d6b9d96c55787cf4556332054a61399368dcf37cf76a14aaba3f8e2e4fdd47ce25808f9babda2ca1f2a6e7387c043e023251ba2b99786426c875bd7cb6592a6' + '28c8f1fd3a69bbdfacc2379a3ce01f254ae21fd8b91d893600086d27e5fb9cccf05d1bf62022ab26fcb53fa2080d4178961619811fd7a56f4e7502893f8ea13b' + 'd51856ebff9160a01e1331114c5a8ea7337f9c8b570da75f36bbb29dcaf1924a40cdbbbf56e03148fc0f540103846e58d15175acf2e9d83c6b68d55c1e199734' + '37f4937423cf3f39e7e801bd794ffb6f2a52e995a104e8969a6c373414c05aa31aaa59c2f4d181a4ef00cb22115584131c6e0dce4385b7b652f9e002c585e9fb' + '8359d290b90fe9797a15305947a47e1a7731eb30f0d353bc2199c971ccdb190ed5a990df5c04263229791763d4a9e029ebb5af3a19cd8de21c13a67b2ecd9ac1') + +options=('!emptydirs') +install=ntp.install + +prepare() { + cd "${srcdir}/${_pkgname}-${_pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/debian-locfile.patch || true + rm -v debian/patches/reproducible-build.patch || true + + quilt push -av + fi + + patch -p1 -i ../libressl-2.8.patch +} + +build() { + cd "${srcdir}/${_pkgname}-${_pkgver}" + + ./configure --prefix=/usr --enable-linuxcaps --enable-ntp-signd + make +} + +package() { + cd "${srcdir}/${_pkgname}-${_pkgver}" + + make DESTDIR="${pkgdir}" install + + install -d -m755 "${pkgdir}"/usr/sbin + mv "${pkgdir}"/usr/bin/{ntp-keygen,ntp-wait,ntpd,ntpdate,ntptime} "${pkgdir}"/usr/sbin + + install -Dm644 ../ntp.conf "${pkgdir}"/etc/ntp.conf + for f in ntpd ntp-client sntp; do + install -Dm644 ../$f.confd "${pkgdir}"/etc/conf.d/$f + install -Dm755 ../$f.initd "${pkgdir}"/etc/init.d/$f + done + install -Dm644 COPYRIGHT "${pkgdir}/usr/share/licenses/${pkgname}/COPYRIGHT" + + install -d -o 87 "${pkgdir}"/var/lib/ntp + echo > "${pkgdir}/var/lib/ntp/.placeholder" +} diff --git a/ntp/libressl-2.8.patch b/ntp/libressl-2.8.patch new file mode 100644 index 0000000..6dcd22f --- /dev/null +++ b/ntp/libressl-2.8.patch @@ -0,0 +1,40 @@ +diff --git a/include/libssl_compat.h b/include/libssl_compat.h +index 2a3697c..eeb83d9 100644 +--- a/include/libssl_compat.h ++++ b/include/libssl_compat.h +@@ -37,7 +37,7 @@ + #endif + + /* ----------------------------------------------------------------- */ +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + /* ----------------------------------------------------------------- */ + + # include +@@ -107,10 +107,13 @@ extern int sslshim_X509_get_signature_nid(const X509 *x); + + #define OpenSSL_version_num SSLeay + #define OpenSSL_version SSLeay_version ++ ++# if !defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x20800000L + #define X509_get0_notBefore X509_get_notBefore + #define X509_getm_notBefore X509_get_notBefore + #define X509_get0_notAfter X509_get_notAfter + #define X509_getm_notAfter X509_get_notAfter ++#endif /* !defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x20800000L */ + + /* ----------------------------------------------------------------- */ + #endif /* OPENSSL_VERSION_NUMBER < v1.1.0 */ +diff --git a/libntp/libssl_compat.c b/libntp/libssl_compat.c +index 5527682..88a3870 100644 +--- a/libntp/libssl_compat.c ++++ b/libntp/libssl_compat.c +@@ -26,7 +26,7 @@ + /* ----------------------------------------------------------------- */ + + /* ----------------------------------------------------------------- */ +-#if defined(OPENSSL) && OPENSSL_VERSION_NUMBER < 0x10100000L ++#if defined(OPENSSL) && (OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)) + /* ----------------------------------------------------------------- */ + + #include "libssl_compat.h" diff --git a/ntp/ntp-client.confd b/ntp/ntp-client.confd new file mode 100644 index 0000000..786004d --- /dev/null +++ b/ntp/ntp-client.confd @@ -0,0 +1,21 @@ +# /etc/conf.d/ntp-client + +# Command to run to set the clock initially +# Most people should just leave this line alone ... +# however, if you know what you're doing, and you +# want to use ntpd to set the clock, change this to 'ntpd' +NTPCLIENT_CMD="ntpdate" + +# Options to pass to the above command +# This default setting should work fine but you should +# change the default 'pool.ntp.org' to something closer +# to your machine. See http://www.pool.ntp.org/ or +# try running `netselect -s 3 pool.ntp.org`. +NTPCLIENT_OPTS="-s -b -u \ + 0.gentoo.pool.ntp.org 1.gentoo.pool.ntp.org \ + 2.gentoo.pool.ntp.org 3.gentoo.pool.ntp.org" + +# If you use hostnames above, then you should depend on dns +# being up & running before we try to run. Otherwise, you +# can disable this. +rc_use="dns" diff --git a/ntp/ntp-client.initd b/ntp/ntp-client.initd new file mode 100644 index 0000000..7946588 --- /dev/null +++ b/ntp/ntp-client.initd @@ -0,0 +1,32 @@ +#!/sbin/openrc-run +# Copyright 1999-2013 Gentoo Foundation +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +depend() { + before cron portmap + after net openvpn + use dns logger +} + +checkconfig() { + if ! type "${NTPCLIENT_CMD}" >/dev/null 2>&1 ; then + eerror "Please edit /etc/conf.d/ntp-client" + eerror "Unable to locate the client command ${NTPCLIENT_CMD}!" + return 1 + fi + if [ -z "${NTPCLIENT_OPTS}" ] ; then + eerror "Please edit /etc/conf.d/ntp-client" + eerror "I need to know what server/options to use!" + return 1 + fi + return 0 +} + +start() { + checkconfig || return $? + + ebegin "Setting clock via the NTP client '${NTPCLIENT_CMD}'" + "${NTPCLIENT_CMD}" ${NTPCLIENT_OPTS} + eend $? "Failed to set clock" +} diff --git a/ntp/ntp.conf b/ntp/ntp.conf new file mode 100644 index 0000000..1b23d6b --- /dev/null +++ b/ntp/ntp.conf @@ -0,0 +1,23 @@ +# Please consider joining the pool: +# +# http://www.pool.ntp.org/join.html +# +# For additional information see: +# - http://support.ntp.org/bin/view/Support/GettingStarted +# - the ntp.conf man page + +# Associate to Arch's NTP pool +server 0.pool.ntp.org +server 1.pool.ntp.org +server 2.pool.ntp.org +server 3.pool.ntp.org + +# By default, the server allows: +# - all queries from the local host +# - only time queries from remote hosts, protected by rate limiting and kod +restrict default kod limited nomodify nopeer noquery notrap +restrict 127.0.0.1 +restrict ::1 + +# Location of drift file +driftfile /var/lib/ntp/ntp.drift diff --git a/ntp/ntp.install b/ntp/ntp.install new file mode 100644 index 0000000..183407e --- /dev/null +++ b/ntp/ntp.install @@ -0,0 +1,28 @@ +post_install() { + if ! getent group ntp &>/dev/null; then + groupadd -g 87 ntp >/dev/null + fi + if ! getent passwd ntp &>/dev/null; then + useradd -u 87 -g ntp -G adm -d /var/lib/ntp -c 'Network Time Protocol' -s /bin/nologin ntp >/dev/null + fi + if ! groups ntp | grep adm &>/dev/null; then + gpasswd -a ntp adm >/dev/null + fi + ntp_shell=$(getent passwd ntp | cut -d: -f7) + if [ "$ntp_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin ntp &>/dev/null + fi +} + +post_upgrade(){ + post_install +} + +post_remove(){ + if getent passwd ntp &>/dev/null; then + userdel ntp >/dev/null + fi + if getent group ntp &>/dev/null; then + groupdel ntp >/dev/null + fi +} diff --git a/ntp/ntpd.confd b/ntp/ntpd.confd new file mode 100644 index 0000000..2b74282 --- /dev/null +++ b/ntp/ntpd.confd @@ -0,0 +1,6 @@ +# /etc/conf.d/ntpd + +# Options to pass to the ntpd process +# Most people should leave this line alone ... +# however, if you know what you're doing, feel free to tweak +NTPD_OPTS="-g -u ntp:ntp" diff --git a/ntp/ntpd.initd b/ntp/ntpd.initd new file mode 100644 index 0000000..7573411 --- /dev/null +++ b/ntp/ntpd.initd @@ -0,0 +1,22 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +description="ntpd - the network time protocol daemon" +pidfile="/var/run/ntpd.pid" +command="/usr/sbin/ntpd" +command_args="-p ${pidfile} ${NTPD_OPTS}" +start_stop_daemon_args="--pidfile ${pidfile}" + +depend() { + use net dns logger + after ntp-client +} + +start_pre() { + if [ ! -f /etc/ntp.conf ] ; then + eerror "Please create /etc/ntp.conf" + return 1 + fi + return 0 +} diff --git a/ntp/sntp.confd b/ntp/sntp.confd new file mode 100644 index 0000000..d11983a --- /dev/null +++ b/ntp/sntp.confd @@ -0,0 +1,4 @@ +# /etc/conf.d/sntp + +# Options to pass to sntp +SNTP_OPTS="-s 0.gentoo.pool.ntp.org 1.gentoo.pool.ntp.org 2.gentoo.pool.ntp.org 3.gentoo.pool.ntp.org" diff --git a/ntp/sntp.initd b/ntp/sntp.initd new file mode 100644 index 0000000..bc299bb --- /dev/null +++ b/ntp/sntp.initd @@ -0,0 +1,27 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +command="/usr/bin/sntp" + +depend() { + before cron portmap + after net openvpn + use dns logger +} + +start_pre() { + if [ -z "${SNTP_OPTS}" ] ; then + eerror "Please edit /etc/conf.d/sntp" + eerror "I need to know what server/options to use!" + return 1 + fi + return 0 +} + +start() { + ebegin "Setting clock via SNTP" + ${command} ${SNTP_OPTS} + eend $? "Failed to set clock" +} diff --git a/numactl/PKGBUILD b/numactl/PKGBUILD new file mode 100644 index 0000000..bb6bb37 --- /dev/null +++ b/numactl/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=numactl +pkgver=2.0.12 +pkgrel=1 +pkgdesc="Simple NUMA policy support" +arch=('i686' 'x86_64') +url="https://github.com/numactl/numactl" +license=('GPL-2') +depends=('glibc') +source=("https://github.com/numactl/numactl/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('316b10f50e6eee4cee9cf191f19381ec4a61980354eec3f9fe43fef21465bee28a82adeb9c235d4877e82950ccd14c9473b79fd1e2f5a7f598ec2fac230780ff') + +prepare(){ + cd "${pkgname}-${pkgver}" + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +check() { + cd "${pkgname}-${pkgver}" + make -k test || echo "Tests known to fail depending on system load." +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + # move_pages(2) is provided by man-pages and is more up-to-date there anyway + rm -rf "$pkgdir/usr/share/man/man2" + install -vDm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 README.md -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/numlockx/PKGBUILD b/numlockx/PKGBUILD new file mode 100644 index 0000000..c76742c --- /dev/null +++ b/numlockx/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=numlockx +pkgver=1.2 +_debver=1.2 +_debrel=8 +pkgrel=4 +pkgdesc='Turns on the numlock key in X11.' +arch=('i686' 'x86_64') +url='https://github.com/rg3/numlockx' +license=('Expat') +depends=('libxtst') +makedepends=('quilt') +source=(https://github.com/rg3/numlockx/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/n/numlockx/numlockx_$_debver-$_debrel.debian.tar.xz) +sha512sums=('efaaa67e8b2723cb1e8461dde664f1f8e9b21f34edfe2e1135a6b756fa2843aed1a386f2f9d70bd62ddae9aedfeeff856a18da8b542f2cff440f93b38e5a853e' + 'aa849a9f89d88137c5066144f69be90c45003031b2d6fb59c48c6265b71a4d519d51bc8c964a832fa4fb12e83442d435235765f2a6b622947e2107604c7a4fc9') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix=/usr x_includes=/usr/include/X11 x_libraries=/usr/lib + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make prefix="${pkgdir}/usr" install + + # Install license + install -Dm0644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/numptyphysics/PKGBUILD b/numptyphysics/PKGBUILD new file mode 100644 index 0000000..dedae65 --- /dev/null +++ b/numptyphysics/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=numptyphysics +pkgver=0.3.10 +pkgrel=2 +pkgdesc="Harness gravity with your crayon and set about creating blocks, ramps, levers, pulleys and whatever else" +url='https://gitlab.com/thp/numptyphysics' +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('sdl2' 'sdl2_ttf' 'sdl2_image') +makedepends=('graphicsmagick') +groups=('games') +source=("https://gitlab.com/thp/${pkgname}/-/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "numptyphysics" + "fhs-compliant.patch") +sha512sums=('5c74eaad0388b6689982d7566cafffb486240541969eed370d22b9ca5c882dc6d672e52adf254f5adf4c25e4992f141a91ce3f9392d1d86ab05cefa815c757bd' + 'ad79de488bda606d100f75fba81a07923cdeae2e6c9a4c77e86eebaefa0a85993e9d0f685001fb10e9566379c6042c93acfadb7addfa5e02367b387274267f1e' + '1387408b1c209f219242a5603b2eb396f8346e748826151f83258cd153f0d7437e0ec13a148a06eb9a1028dd9cd7767b1e187cf9f6bca5239f0de45ef2eb8638') + +prepare() { + cd ${pkgname}-${pkgver} + patch -Np1 -i ${srcdir}/fhs-compliant.patch +} + +build() { + cd ${pkgname}-${pkgver} + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + # add missing icons + for SIZE in 16 24 32 48 64 96 128; do + # set modify/create for reproducible builds + gm convert -scale ${SIZE} +set date:create +set date:modify \ + platform/freedesktop/$pkgname.png \ + "${srcdir}"/$pkgname.png + install -Dm644 "${srcdir}"/$pkgname.png "${pkgdir}/usr/share/icons/hicolor/${SIZE}x${SIZE}/apps/$pkgname.png" + done + + # correcting binary-location + mv "${pkgdir}/usr/bin/$pkgname" "${pkgdir}/usr/share/games/$pkgname/$pkgname.bin" + rm -rf "${pkgdir}/usr/bin" + install -Dm755 ${srcdir}/$pkgname "${pkgdir}/usr/games/$pkgname" + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/numptyphysics/fhs-compliant.patch b/numptyphysics/fhs-compliant.patch new file mode 100644 index 0000000..1f1b55a --- /dev/null +++ b/numptyphysics/fhs-compliant.patch @@ -0,0 +1,22 @@ +--- a/mk/install.mk 2021-06-06 14:12:47.000000000 +0200 ++++ b/mk/install.mk 2021-09-06 23:06:08.074445745 +0200 +@@ -2,8 +2,8 @@ + PREFIX ?= /usr + + install: $(APP) $(ADDITIONAL_INSTALL_TARGETS) + install -D -m 755 $(APP) $(DESTDIR)/$(PREFIX)/bin/$(APP) +- mkdir -p $(DESTDIR)/$(PREFIX)/share/$(APP) +- cp -rpv data $(DESTDIR)/$(PREFIX)/share/$(APP)/ ++ mkdir -p $(DESTDIR)/$(PREFIX)/share/games/$(APP) ++ cp -rpv data $(DESTDIR)/$(PREFIX)/share/games/$(APP)/ + + .PHONY: install +--- a/src/Os.cpp 2021-06-06 14:12:47.000000000 +0200 ++++ b/src/Os.cpp 2021-09-06 23:23:48.202432437 +0200 +@@ -302,5 +302,5 @@ + } + + // System-wide installation +- return thp::format("%s/../share/%s/data", g_appDir.c_str(), appName().c_str()); ++ return thp::format("%s/../share/games/%s/data", g_appDir.c_str(), appName().c_str()); + } diff --git a/numptyphysics/numptyphysics b/numptyphysics/numptyphysics new file mode 100644 index 0000000..3c68d74 --- /dev/null +++ b/numptyphysics/numptyphysics @@ -0,0 +1,2 @@ +#!/bin/sh +exec "/usr/share/games/numptyphysics/numptyphysics.bin" diff --git a/nuovext-icon-theme/PKGBUILD b/nuovext-icon-theme/PKGBUILD new file mode 100644 index 0000000..1dfa0cf --- /dev/null +++ b/nuovext-icon-theme/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +_pkgname=icon-theme-nuovext +pkgname=nuovext-icon-theme +pkgver=0.1.1 +pkgrel=1 +pkgdesc="nuoveXT2 icon theme" +arch=('any') +url='https://github.com/redtide/icon-theme-nuovext' +license=('LGPL-3') +depends=('gnome-icon-theme') +install=$pkgname.install +source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/$pkgver.tar.gz") +sha512sums=('58a0be8ec24d4e3a72f347c25d0fda425389bb8d7228a6786d60cf00aa7ac29e567116ce328cf773c7454f7c1eaee8de32271dcc3326ce61f1523d4ff4d4b8b0') + +prepare() { + # add fallback themes + cd "$_pkgname-$pkgver" + sed -i "s/Inherits=.*/Inherits=gnome,hicolor/" nuoveXT23/index.theme +} + +build() { + cd "$_pkgname-$pkgver" + ./autogen.sh + ./configure --prefix=/usr + make +} + +package() { + cd "$_pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # remove questionable data + rm -rf "$pkgdir/usr/share/icons/nuoveXT23/extra/" + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/nuovext-icon-theme/nuovext-icon-theme.install b/nuovext-icon-theme/nuovext-icon-theme.install new file mode 100644 index 0000000..b53df2c --- /dev/null +++ b/nuovext-icon-theme/nuovext-icon-theme.install @@ -0,0 +1,11 @@ +post_install() { + gtk-update-icon-cache -q -t -f usr/share/icons/nuoveXT23 +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} diff --git a/nyx/PKGBUILD b/nyx/PKGBUILD new file mode 100644 index 0000000..a068908 --- /dev/null +++ b/nyx/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=nyx +pkgver=2.1.0 +_debver=$pkgver +_debrel=2.2 +pkgrel=3 +pkgdesc="Command-line status monitor for tor" +url='https://nyx.torproject.org/' +arch=('any') +license=('GPL-3') +depends=('python' 'python-stem' 'procps-ng' 'lsof') +makedepends=('python-setuptools' 'quilt') +optdepends=('tor: tor-server to talk to') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/n/nyx/nyx_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/n/nyx/nyx_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('d91322219ba9b2a24eae8bb148b72f0f8cd9dd1f00b2fd64ed44101387fef0df52825eb169ddb6f350a95d1f4c760977af0aa3a0fe17be9c1fb5df32b7dfbb5c' + '4495cf36de5e6d4d649c2bd6f35e967663af0df8a26496eedf083e89383844f2e83a8e0cb578e94089b0ab1c3d444b5886913a867bffabc25b565f2fdc6182c9') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # remove tests requiring full terminal + rm -r test/{panel,{popups,subwindow,installation}.py} + + # make test exit on error + sed -E 's|(test_runner.run\(tests\))|__import__("sys").exit(0 if \1.wasSuccessful() else 1)|' -i run_tests.py +} + +build() { + cd ${pkgname}-${pkgver} + python setup.py build +} + +package() { + cd ${pkgname}-${pkgver} + python setup.py install --optimize=1 --root="${pkgdir}" --skip-build + install -Dm 644 nyx.1 -t "${pkgdir}/usr/share/man/man1" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/oath-toolkit/PKGBUILD b/oath-toolkit/PKGBUILD new file mode 100644 index 0000000..dae103f --- /dev/null +++ b/oath-toolkit/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + + +pkgname=oath-toolkit +pkgver=2.6.7 +pkgrel=3 +pkgdesc="OATH one-time password toolkit" +arch=('i686' 'x86_64') +url='https://www.nongnu.org/oath-toolkit/' +license=('GPL-3') +depends=('glibc' 'xmlsec') +source=("https://download.savannah.nongnu.org/releases/$pkgname/$pkgname-$pkgver.tar.gz") +sha512sums=('50edff75c8366887d69cf4740c4cc3bdfc3e43cbd4910ff40f735bca489f0953d7e5a21130f12782ac7a1f2fb00f0db313aff139085f23daba78a69bc7b2eb12') + +prepare() { + cd $pkgname-$pkgver + export GTKDOCIZE=echo + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-pam + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + # remove gtk-doc, not supported + rm -rf "$pkgdir/usr/share/gtk-doc/" + + # install basic docs + install -Dm644 README -t "$pkgdir/usr/share/doc/$pkgname" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/obconf/02-update-russian-translate.patch b/obconf/02-update-russian-translate.patch new file mode 100644 index 0000000..c884ae0 --- /dev/null +++ b/obconf/02-update-russian-translate.patch @@ -0,0 +1,286 @@ +Description: Update russian translate +Author: Mateusz Ĺukasik +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1408694 + +--- a/po/ru.po ++++ b/po/ru.po +@@ -8,14 +8,14 @@ msgstr "" + "Project-Id-Version: ObConf-2.0.4\n" + "Report-Msgid-Bugs-To: http://bugzilla.icculus.org/\n" + "POT-Creation-Date: 2013-08-11 20:49-0400\n" +-"PO-Revision-Date: 2008-05-03 10:45+0700\n" +-"Last-Translator: Anton Dobkin \n" ++"PO-Revision-Date: 2015-01-08 19:08+0300\n" ++"Last-Translator: peregrine \n" + "Language-Team: Russian \n" + "Language: ru\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"X-Generator: KBabel 1.11.4\n" ++"X-Generator: Poedit 1.5.4\n" + + #: src/strings.c:7 + msgid "Openbox Configuration Manager" +@@ -53,7 +53,7 @@ msgstr "ОкнаWindow Titles" +-msgstr "Название Окна" ++msgstr "Название окна" + + #: src/strings.c:19 + msgid "_Button order:" +@@ -77,13 +77,13 @@ msgid "" + "M - The maximize button\n" + "C - The close button" + msgstr "" +-"N - Значек окна \n" +-" D - Đ’Ńе-рабочие Ńтолы (липкая) кнопка \n" +-"S - The shade (roll up) button\n" ++"N - Значок окна \n" ++"D - Đ’Ńе-рабочие Ńтолы (липкая) кнопка \n" ++"S - Кнопка Ńворачивания в заголовок\n" + "L - Метка (название окна) \n" +-" I - Кнопка Ńворачивания \n" ++"I - Кнопка Ńворачивания \n" + "Đś - Кнопка воŃŃтановления \n" +-" C - Кнопка закрытия" ++"C - Кнопка закрытия" + + #: src/strings.c:28 + msgid "" +@@ -104,7 +104,7 @@ msgid "" + "Iconify (Minimize)\n" + "Maximize" + msgstr "" +-"Значек окна\n" ++"Значок окна\n" + "Метка окна (Название)\n" + "Сворачивание\n" + "Đ’ĐľŃŃтановление" +@@ -126,7 +126,7 @@ msgid "" + "Omnipresent (On all desktops)" + msgstr "" + "Закрыть\n" +-"Shade (Roll up)\n" ++"СвернŃть в заголовок\n" + "ВездеŃŃщий (На вŃех рабочих Ńтолах)" + + #: src/strings.c:42 +@@ -171,7 +171,7 @@ msgstr "ФокŃŃ Đ˝Đ° _новые ок + + #: src/strings.c:54 + msgid "Placing Windows" +-msgstr "Размещение Окон" ++msgstr "Размещение окон" + + #: src/strings.c:56 + msgid "_Place new windows under the mouse pointer" +@@ -191,7 +191,7 @@ msgstr "Đ’Ńе мониторы" + + #: src/strings.c:60 + msgid "The active monitor" +-msgstr "Đктивный манитор" ++msgstr "Đктивный монитор" + + #: src/strings.c:61 + msgid "The monitor with the mouse" +@@ -199,33 +199,36 @@ msgstr "Монитор Ń ĐĽŃ‹ŃŃŚŃŽ" + + #: src/strings.c:62 + msgid "Primary Monitor" +-msgstr "" ++msgstr "ĐžŃновной монитор" + + #: src/strings.c:64 ++#, fuzzy + msgid "" + "The primary monitor is where Openbox will place dialogs, such as the one " + "used for cycling windows." + msgstr "" ++"ĐžŃновной монитор тот, на котором Openbox бŃдет размещать диалоги, такие как " ++"тот, который иŃпользŃетŃŃŹ для цикличеŃких окон." + + #: src/strings.c:65 + msgid "Primary _monitor:" +-msgstr "" ++msgstr "ĐžŃновной _монитор" + + #: src/strings.c:66 + msgid "Fixed Monitor" +-msgstr "" ++msgstr "ЗафикŃированный монитор" + + #: src/strings.c:67 + msgid "Active Monitor" +-msgstr "" ++msgstr "Đктивный монитор" + + #: src/strings.c:68 + msgid "Monitor With Mouse Pointer" +-msgstr "" ++msgstr "Монитор Ń Ńказателем ĐĽŃ‹Ńи" + + #: src/strings.c:70 + msgid "_Fixed monitor:" +-msgstr "" ++msgstr "_ЗафикŃированный монитор:" + + #: src/strings.c:71 + msgid "Windows" +@@ -233,7 +236,7 @@ msgstr "Окна" + + #: src/strings.c:72 + msgid "Moving and Resizing Windows" +-msgstr "Перемещение и Đзменение размера Окон" ++msgstr "Перемещение и изменение размера окон" + + #: src/strings.c:74 + msgid "Update the window contents while _resizing" +@@ -255,11 +258,11 @@ msgstr "ОтŃŃ‚ŃĐż от Đ´Ń€Ńгих _ + + #: src/strings.c:79 + msgid "Amount of resistance against screen _edges:" +-msgstr "ОтŃŃ‚ŃĐż от краев _экрана: " ++msgstr "ОтŃŃ‚ŃĐż от краёв _экрана: " + + #: src/strings.c:81 + msgid "_Switch desktops when moving a window past the screen edge" +-msgstr "_Переключать рабочии Ńтолы, когда окно перемещаетŃŃŹ на край экрана" ++msgstr "_Переключать рабочие Ńтолы, когда окно перемещаетŃŃŹ на край экрана" + + #: src/strings.c:83 + msgid "_Amount of time to wait before switching:" +@@ -272,7 +275,7 @@ msgstr "ĐĽŃ" + + #: src/strings.c:85 + msgid "Information Dialog" +-msgstr "Đнформационный Диалог" ++msgstr "Đнформационный диалог" + + #: src/strings.c:86 + msgid "Show _information dialog:" +@@ -328,15 +331,15 @@ msgstr "ФикŃированная поР+ + #: src/strings.c:103 + msgid "From top edge" +-msgstr "" ++msgstr "По Đ˛ĐµŃ€Ń…Đ˝ĐµĐĽŃ ĐşŃ€Đ°ŃŽ" + + #: src/strings.c:104 + msgid "From bottom edge" +-msgstr "" ++msgstr "По Đ˝Đ¸Đ¶Đ˝ĐµĐĽŃ ĐşŃ€Đ°ŃŽ" + + #: src/strings.c:106 + msgid "Move & Resize" +-msgstr "Перемещение & Đзмение размера" ++msgstr "Перемещение и измение размера" + + #: src/strings.c:109 + msgid "_Focus windows when the mouse pointer moves over them" +@@ -384,7 +387,7 @@ msgstr "МыŃŃŚ" + + #: src/strings.c:125 + msgid "Desktops" +-msgstr "Рабочии Ńтолы" ++msgstr "Рабочие Ńтолы" + + #: src/strings.c:127 + msgid "_Show a notification when switching desktops" +@@ -404,7 +407,7 @@ msgstr "_Названия Ń€Đ°Đ±ĐľŃ‡Đ¸Ń + + #: src/strings.c:133 + msgid "Desktops" +-msgstr "Рабочии Ńтолы" ++msgstr "Рабочие Ńтолы" + + #: src/strings.c:134 + msgid "Desktop Margins" +@@ -442,7 +445,7 @@ msgstr "ОтŃŃ‚Ńпы" + + #: src/strings.c:146 + msgid "Dock" +-msgstr "" ++msgstr "Док" + + #: src/strings.c:148 + msgid "" +@@ -591,7 +594,7 @@ msgstr "" + + #: src/main.c:62 + msgid "ObConf Error" +-msgstr "" ++msgstr "ĐžŃибка ObConf" + + #: src/main.c:76 src/main.c:78 src/main.c:80 + msgid "Copyright (c)" +@@ -611,32 +614,32 @@ msgstr "" + + #: src/main.c:93 + msgid " --help Display this help and exit\n" +-msgstr " --help Показать ŃĐżŃ€Đ°Đ˛ĐşŃ Đ¸ выйти\n" ++msgstr " --help Показать ŃĐżŃ€Đ°Đ˛ĐşŃ Đ¸ выйти\n" + + #: src/main.c:94 + msgid " --version Display the version and exit\n" +-msgstr " --version Показать верŃию и выйти\n" ++msgstr " --version Показать верŃию и выйти\n" + + #: src/main.c:95 + msgid " --install ARCHIVE.obt Install the given theme archive and select it\n" +-msgstr "" +-" --install ĐĐ ĐĄĐĐ’.obt ĐŁŃтановить данный архив темы и выбрать его\n" ++msgstr " --install ĐĐ ĐĄĐĐ’.obt ĐŁŃтановить данный архив темы и выбрать его\n" + + #: src/main.c:96 + msgid "" + " --archive THEME Create a theme archive from the given theme " + "directory\n" +-msgstr " --archive ТЕМРСоздать архив темы из данного каталога\n" ++msgstr " --archive ТЕМРСоздать архив темы из данного каталога\n" + + #: src/main.c:97 + msgid " --config-file FILE Specify the path to the config file to use\n" + msgstr "" +-" --config-file ФĐЙЛ СпецифичеŃкий ĐżŃть Đş конфигŃŃ€Đ°Ń†Đ¸ĐľĐ˝Đ˝ĐľĐĽŃ Ń„Đ°ĐąĐ»Ń, " +-"который бŃдет иŃпользован\n" ++" --config-file ФĐЙЛ СпецифичеŃкий ĐżŃть Đş конфигŃŃ€Đ°Ń†Đ¸ĐľĐ˝Đ˝ĐľĐĽŃ Ń„Đ°ĐąĐ»Ń, который " ++"бŃдет иŃпользован\n" + + #: src/main.c:98 + msgid " --tab NUMBER Switch to tab number NUMBER on startup\n" + msgstr "" ++" --tab НОМЕР ПереключитьŃŃŹ на Đ˛ĐşĐ»Đ°Đ´ĐşŃ Đ˝ĐľĐĽĐµŃ€ НОМЕР при Ńтарте\n" + + #: src/main.c:99 + #, c-format +@@ -663,15 +666,15 @@ msgstr "--config-file требŃетŃŃŹ + + #: src/main.c:133 + msgid "--tab requires an argument\n" +-msgstr "" ++msgstr "--tab требŃет аргŃмент\n" + + #: src/main.c:225 + msgid "" + "Failed to load the obconf.glade interface file. You have probably failed to " + "install ObConf properly." + msgstr "" +-"ĐžŃибка загрŃзки файла интерфейŃа obconf. Вероятно, Openbox был ŃŃтановлен не " +-"правильно." ++"ĐžŃибка загрŃзки файла .glade интерфейŃа obconf. Вероятно, Openbox был " ++"ŃŃтановлен не правильно." + + #: src/main.c:251 + msgid "" diff --git a/obconf/PKGBUILD b/obconf/PKGBUILD new file mode 100644 index 0000000..83ec207 --- /dev/null +++ b/obconf/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=obconf +pkgver=2.0.4 +pkgrel=1 +pkgdesc="A GTK+ based configuration tool for Openbox" +arch=('x86_64' 'i686') +url="http://openbox.org/wiki/ObConf:About" +license=('GPL-2') +depends=('gtk' 'openbox') +makedepends=('intltool' 'gettext-tiny') +source=("http://openbox.org/dist/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.asc} + "${pkgname}.1" + "02-update-russian-translate.patch" + "add-missing-keywords-and-translations.patch" + "stop-using-libglade.patch" + "switch-to-gtk3.patch") +sha512sums=('b8cf6f363fa8c2f1d21142a3f79687a72f683f564285b05751c822ddf7a421b09c3440cbc5b08eb09d151601c6ada835ff5cc940bf5abeec2210cca26b552294' + 'SKIP' + 'ad4676f8e5e4918680c20634bc8e3918f764cbc1eeb051dd638ca6e03cda95a00cbc284929c9875f2e85b0014b877d1bb186a8418896037c511f91f4bcefeadd' + 'fb99344da7ff3f424167d46a505f953147c2077371bbd1f8e81e247df4731ef8ec63da2faf755fd8147807b5eed9b75b7b986be60bd24649627344ca12cf184b' + 'a5e349ab368c58b4fc512840417719ff0a6554bdf762f02b7a40280ad030e23eabedf50a79f2fad38d6dff5a09ff3fb41abf3ae2b8dd664e957a13544ec70cb6' + 'ea181c2be8873794ed6cb6d4b8834100c4b81f5c5bf7cbb53aa83a91f2135ad30174c0bcd6aea3c2269aa655a13f2ffb2a010f9d70fc2ab8394dd79f759e9b33' + '5371f622aa8e1ed21454873bc1b055534edaa289c98303a4090cc90407413ed0ed394167758b2a0c7bf309b15480d2ccd6f1d683778a5a562095e224f892c9b4') +validpgpkeys=('1FEECBB03AB7D3216B5E0AC9274E52855D203EC3') # Dana Jansens + +prepare() { + cd ${pkgname}-${pkgver} + + # Stop using libglade, and switch to GTK3. + patch --verbose -p1 -i ../stop-using-libglade.patch + patch --verbose -p1 -i ../switch-to-gtk3.patch + # Apply patch adding missing keywords and translated names and + # comments into the app shortcut. + patch --verbose -p1 -i ../add-missing-keywords-and-translations.patch + # Apply patch updating Russian translation. + patch --verbose -p1 -i ../02-update-russian-translate.patch + # Apply patch fixing minor typo. + sed -i 's#occured#occurred#' src/tree.c + autoreconf -fiv +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr + make VERBOSE=1 + # Compress manual file into gzip. + cp -v ../${pkgname}.1 . && gzip -v9 ${pkgname}.1 +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR=${pkgdir} VERBOSE=1 install + install -Dvm644 ${pkgname}.1.gz -t ${pkgdir}/usr/share/man/man1 + install -Dvm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/obconf/add-missing-keywords-and-translations.patch b/obconf/add-missing-keywords-and-translations.patch new file mode 100644 index 0000000..ed9a0a7 --- /dev/null +++ b/obconf/add-missing-keywords-and-translations.patch @@ -0,0 +1,34 @@ +Summary: Add missing keywords and translated names and comments + into the app shortcut. +Authors: Jayvee Enaguas + Nico Golde + Siegfried-Angel Gevatter + (a patch based on Debian and Ubuntu) +Date: 2021-10-16 12:15:53.000000000 +0000 + +--- a/obconf.desktop 2013-08-12 00:45:05.000000000 +0000 ++++ b/obconf.desktop 2021-10-16 12:15:53.000000000 +0000 +@@ -1,7 +1,11 @@ + [Desktop Entry] +-Encoding=UTF-8 + Type=Application + Name=Openbox Configuration Manager ++Keywords=openbox;settings;configurations;themes ++Name[ca]=Gestor de configuraciĂł de l'Openbox ++Name[de]=Openbox Konfiguration Manager ++Name[es]=Gestor de configuraciĂłn de Openbox ++Name[pt]=Gestor de configurações do openbox + Name[pt_BR]=Gerenciador de configurações do Openbox + Name[ru]=Менеджер наŃтройки Openbox + Name[zh_TW]=Openbox 組態管ç†ĺ™¨ +@@ -10,6 +14,10 @@ GenericName[pt_BR]=Gerenciador de configurações + GenericName[ru]=Менеджер наŃтройки Openbox + GenericName[zh_TW]=Openbox 組態管ç†ĺ™¨ + Comment=Tweak settings for Openbox ++Comment[ca]=Configureu i personalitzeu el gestor de finestres Openbox ++Comment[de]=Konfiguriert den Openbox Window Manager ++Comment[es]=Configura i personaliza el gestor de ventanas Openbox ++Comment[pt]=Ajustar definições do Openbox + Comment[pt_BR]=Configure as opções do Openbox + Comment[ru]=НаŃтройка Openbox + Comment[zh_TW]=ç®ˇç† Openbox 組態設定 diff --git a/obconf/stop-using-libglade.patch b/obconf/stop-using-libglade.patch new file mode 100644 index 0000000..0696239 --- /dev/null +++ b/obconf/stop-using-libglade.patch @@ -0,0 +1,6908 @@ +From 976d073496cd1bed1283b18947b8d303eb678f25 Mon Sep 17 00:00:00 2001 +From: galtgendo +Date: Sat, 17 Aug 2013 20:25:07 +0200 +Subject: [PATCH] Stop using libglade + +GtkOptionMenu -> GtkComboBoxText move is to make porting +to gtk3 easier (this needs gtk+ 2.24), most of the pixbuf +changes in src/preview.c for the same reason. Other changes +should not go beyond 2.18. + +The changes in packing in glade file are also for the sake +of gtk3 - they shouldn't affect gtk2 (hbox51 removal was +mostly to make things cleaner - there didn't seem to be a +reason for extra container there). + +The added catch is that http://savannah.gnu.org/bugs/?34506 +was only fixed in gettext 0.18.3 (just a few weeks old) and +there's a little problem with gtk2 version of glade +(http://bugzilla.gnome.org/show_bug.cgi?id=689667). The ui +file itself nevertheless works. +--- + .gitignore | 1 + + Makefile.am | 14 +- + NEWS | 0 + TODO | 0 + configure.ac | 9 +- + src/about.c | 3 +- + src/desktops.c | 6 +- + src/dock.c | 120 +-- + src/main.c | 32 +- + src/main.h | 5 +- + src/mouse.c | 43 +- + src/moveresize.c | 114 +-- + src/obconf.gladep | 13 - + src/{obconf.glade => obconf.ui} | 2153 ++++++++++++++++++--------------------- + src/preview.c | 136 ++- + src/preview_update.c | 4 +- + src/tree.c | 4 +- + src/windows.c | 92 +- + 18 files changed, 1227 insertions(+), 1522 deletions(-) + delete mode 100644 NEWS + delete mode 100644 TODO + delete mode 100644 src/obconf.gladep + rename src/{obconf.glade => obconf.ui} (75%) + +diff --git a/Makefile.am b/Makefile.am +index 369ec3d..61c3805 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,7 +1,7 @@ + SUBDIRS = po + + localedir = $(datadir)/locale +-gladedir = $(datadir)/obconf ++resourcedir = $(datadir)/obconf + pixmapdir = $(datadir)/pixmaps + themedir = $(datadir)/openbox/themes + desktopdir = $(datadir)/applications +@@ -19,12 +19,11 @@ src_obconf_CPPFLAGS = \ + $(OPENBOX_CFLAGS) \ + $(LIBSTARTUPNOTIFICATION_CFLAGS) \ + $(GTK_CFLAGS) \ +- $(GLADE_CFLAGS) \ + $(GDK_PIXBUF_CFLAGS) \ + $(XML_CFLAGS) \ + -DLOCALEDIR=\"$(localedir)\" \ + -DPIXMAPDIR=\"$(pixmapdir)\" \ +- -DGLADEDIR=\"$(gladedir)\" \ ++ -DRESOURCEDIR=\"$(resourcedir)\" \ + -DTHEMEDIR=\"$(themedir)\" \ + -DG_LOG_DOMAIN=\"Obconf\" + src_obconf_LDADD = \ +@@ -31,7 +30,6 @@ src_obconf_LDADD = \ + $(OPENBOX_LIBS) \ + $(LIBSTARTUPNOTIFICATION_LIBS) \ + $(GTK_LIBS) \ +- $(GLADE_LIBS) \ + $(GDK_PIXBUF_LIBS) \ + $(LIBINTL) \ + $(ZLIB_LIBS) \ +@@ -66,13 +64,10 @@ src_obconf_SOURCES = \ + src/tree.c \ + src/tree.h + +-dist_glade_DATA = \ +- src/obconf.glade \ ++dist_resource_DATA = \ ++ src/obconf.ui \ + pixmaps/video-display.png + +-dist_noinst_DATA = \ +- src/obconf.gladep +- + dist_desktop_DATA = \ + obconf.desktop + +@@ -121,8 +116,7 @@ EXTRA_DIST = \ + m4/wchar_t.m4 \ + m4/wint_t.m4 \ + m4/xsize.m4 \ +- data/video-display.svg \ +- config.rpath ++ data/video-display.svg + + # Packages need to run these... + +diff --git a/NEWS b/NEWS +deleted file mode 100644 +index e69de29..0000000 +diff --git a/TODO b/TODO +deleted file mode 100644 +index e69de29..0000000 +diff --git a/configure.ac b/configure.ac +index f9b0775..b99620f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,6 +1,6 @@ + AC_PREREQ([2.54]) + AC_INIT([obconf], [2.0.4], [http://bugzilla.icculus.org]) +-AM_INIT_AUTOMAKE ++AM_INIT_AUTOMAKE([subdir-objects foreign dist-xz]) + AC_CONFIG_SRCDIR([src/main.c]) + + AC_PREFIX_DEFAULT([/usr/local]) +@@ -16,7 +16,6 @@ AC_PROG_INSTALL + CHECK_EXPORT_DYNAMIC + LDFLAGS="$LDFLAGS $EXPORT_DYNAMIC_FLAGS" + +-ALL_LINGUAS="" + AM_GNU_GETTEXT_VERSION(0.15) + AM_GNU_GETTEXT([external]) + +@@ -28,7 +27,7 @@ PKG_CHECK_MODULES(LIBSTARTUPNOTIFICATION, [libstartup-notification-1.0]) + AC_SUBST(LIBSTARTUPNOTIFICATION_CFLAGS) + AC_SUBST(LIBSTARTUPNOTIFICATION_LIBS) + +-PKG_CHECK_MODULES(GTK, [gtk+-2.0]) ++PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.24.0]) + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + +@@ -36,10 +35,6 @@ PKG_CHECK_MODULES(GDK_PIXBUF, [gdk-pixbuf-2.0]) + AC_SUBST(GDK_PIXBUF_CFLAGS) + AC_SUBST(GDK_PIXBUF_LIBS) + +-PKG_CHECK_MODULES(GLADE, [libglade-2.0]) +-AC_SUBST(GLADE_CFLAGS) +-AC_SUBST(GLADE_LIBS) +- + AC_CHECK_PROG(TAR, [tar], [yes], [no]) + if test "$TAR" = "no"; then + AC_MSG_ERROR([Unable to find the tar command.]) +diff --git a/src/about.c b/src/about.c +index c56eb26..5fed1a9 100644 +--- a/src/about.c ++++ b/src/about.c +@@ -10,7 +10,8 @@ void on_about_close_clicked() + gtk_widget_hide(get_widget("about_window")); + } + +-void on_about_window_delete_event() ++gboolean on_about_window_delete_event() + { + gtk_widget_hide(get_widget("about_window")); ++ return TRUE; + } +diff --git a/src/desktops.c b/src/desktops.c +index 6f205c4..8297f00 100644 +--- a/src/desktops.c ++++ b/src/desktops.c +@@ -212,7 +212,7 @@ static void desktops_write_names() + tree_apply(); + + /* make openbox re-set the property */ +- XDeleteProperty(GDK_DISPLAY(), GDK_ROOT_WINDOW(), ++ XDeleteProperty(gdk_x11_get_default_xdisplay(), GDK_ROOT_WINDOW(), + gdk_x11_get_xatom_by_name("_NET_DESKTOP_NAMES")); + } + +@@ -225,7 +225,7 @@ static void desktops_write_number() + ce.xclient.type = ClientMessage; + ce.xclient.message_type = + gdk_x11_get_xatom_by_name("_NET_NUMBER_OF_DESKTOPS"); +- ce.xclient.display = GDK_DISPLAY(); ++ ce.xclient.display = gdk_x11_get_default_xdisplay(); + ce.xclient.window = GDK_ROOT_WINDOW(); + ce.xclient.format = 32; + ce.xclient.data.l[0] = num_desktops; +@@ -233,7 +233,7 @@ static void desktops_write_number() + ce.xclient.data.l[2] = 0; + ce.xclient.data.l[3] = 0; + ce.xclient.data.l[4] = 0; +- XSendEvent(GDK_DISPLAY(), GDK_ROOT_WINDOW(), FALSE, ++ XSendEvent(gdk_x11_get_default_xdisplay(), GDK_ROOT_WINDOW(), FALSE, + SubstructureNotifyMask | SubstructureRedirectMask, + &ce); + } +diff --git a/src/dock.c b/src/dock.c +index c1b8d54..4055524 100644 +--- a/src/dock.c ++++ b/src/dock.c +@@ -82,7 +82,7 @@ void dock_setup_tab() + else if (!strcasecmp(s, "Floating")) pos = POSITION_FLOATING; + else pos = POSITION_TOPLEFT; + g_free(s); +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), pos); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), pos); + + w = get_widget("dock_float_x"); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), +@@ -107,7 +107,7 @@ void dock_setup_tab() + if (!strcasecmp(s, "Horizontal")) pos = DIRECTION_HORIZONTAL; + else pos = DIRECTION_VERTICAL; + g_free(s); +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), pos); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), pos); + + w = get_widget("dock_nostrut"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), +@@ -136,7 +136,7 @@ static void dock_enable_stuff() + gboolean b; + + w = get_widget("dock_position"); +- b = gtk_option_menu_get_history(GTK_OPTION_MENU(w)) == POSITION_FLOATING; ++ b = gtk_combo_box_get_active(GTK_COMBO_BOX(w)) == POSITION_FLOATING; + + s = get_widget("dock_float_x"); + gtk_widget_set_sensitive(s, b); +@@ -166,75 +166,39 @@ static void dock_enable_stuff() + gtk_widget_set_sensitive(s, b); + } + +-void on_dock_top_left_activate(GtkMenuItem *w, gpointer data) ++void on_dock_position_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +- tree_set_string("dock/position", "TopLeft"); +- dock_enable_stuff(); +-} +- +-void on_dock_top_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/position", "Top"); +- dock_enable_stuff(); +-} +- +-void on_dock_top_right_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/position", "TopRight"); +- dock_enable_stuff(); +-} +- +-void on_dock_left_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/position", "Left"); +- dock_enable_stuff(); +-} +- +-void on_dock_right_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/position", "Right"); +- dock_enable_stuff(); +-} +- +-void on_dock_bottom_left_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/position", "BottomLeft"); +- dock_enable_stuff(); +-} +- +-void on_dock_bottom_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/position", "Bottom"); +- dock_enable_stuff(); +-} +- +-void on_dock_bottom_right_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/position", "BottomRight"); +- dock_enable_stuff(); +-} +- +-void on_dock_floating_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/position", "Floating"); ++ switch (gtk_combo_box_get_active(w)) { ++ case 0: ++ tree_set_string("dock/position", "TopLeft"); ++ break; ++ case 1: ++ tree_set_string("dock/position", "Top"); ++ break; ++ case 2: ++ tree_set_string("dock/position", "TopRight"); ++ break; ++ case 3: ++ tree_set_string("dock/position", "Left"); ++ break; ++ case 4: ++ tree_set_string("dock/position", "Right"); ++ break; ++ case 5: ++ tree_set_string("dock/position", "BottomLeft"); ++ break; ++ case 6: ++ tree_set_string("dock/position", "Bottom"); ++ break; ++ case 7: ++ tree_set_string("dock/position", "BottomRight"); ++ break; ++ case 8: ++ tree_set_string("dock/position", "Floating"); ++ break; ++ } + dock_enable_stuff(); + } + +@@ -276,18 +240,18 @@ void on_dock_stacking_bottom_toggled(GtkToggleButton *w, gpointer data) + tree_set_string("dock/stacking", "Below"); + } + +-void on_dock_horizontal_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("dock/direction", "Horizontal"); +-} +- +-void on_dock_vertical_activate(GtkMenuItem *w, gpointer data) ++void on_dock_direction_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +- tree_set_string("dock/direction", "Vertical"); ++ switch (gtk_combo_box_get_active(w)) { ++ case 0: ++ tree_set_string("dock/direction", "Vertical"); ++ break; ++ case 1: ++ tree_set_string("dock/direction", "Horizontal"); ++ break; ++ } + } + + void on_dock_nostrut_toggled(GtkToggleButton *w, gpointer data) +diff --git a/src/main.c b/src/main.c +index 7acc3ec..ff11ef9 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -38,7 +38,7 @@ + GtkWidget *mainwin = NULL; + GtkWidget *tabstrip = NULL; + +-GladeXML *glade; ++GtkBuilder *builder; + xmlDocPtr doc; + xmlNodePtr root; + RrInstance *rrinst; +@@ -63,9 +63,9 @@ void obconf_error(gchar *msg, gboolean modal) + if (modal) + gtk_dialog_run(GTK_DIALOG(d)); + else { +- g_signal_connect_swapped(GTK_OBJECT(d), "response", ++ g_signal_connect_swapped(G_OBJECT(d), "response", + G_CALLBACK(gtk_widget_destroy), +- GTK_OBJECT(d)); ++ G_OBJECT(d)); + gtk_widget_show(d); + } + } +@@ -149,7 +149,7 @@ static gboolean get_all(Window win, Atom prop, Atom type, gint size, + gint ret_size; + gulong ret_items, bytes_left; + +- res = XGetWindowProperty(GDK_DISPLAY(), win, prop, 0l, G_MAXLONG, ++ res = XGetWindowProperty(gdk_x11_get_default_xdisplay(), win, prop, 0l, G_MAXLONG, + FALSE, type, &ret_type, &ret_size, + &ret_items, &bytes_left, &xdata); + if (res == Success) { +@@ -203,6 +203,7 @@ static gboolean prop_get_string_utf8(Window win, Atom prop, gchar **ret) + int main(int argc, char **argv) + { + gchar *p; ++ GError *error = NULL; + gboolean exit_with_error = FALSE; + + bindtextdomain(PACKAGE_NAME, LOCALEDIR); +@@ -217,18 +218,21 @@ int main(int argc, char **argv) + return 0; + } + +- p = g_build_filename(GLADEDIR, "obconf.glade", NULL); +- glade = glade_xml_new(p, NULL, NULL); ++ p = g_build_filename(RESOURCEDIR, "obconf.ui", NULL); ++ builder = gtk_builder_new(); ++ gtk_builder_add_from_file(builder, p, &error); + g_free(p); + +- if (!glade) { +- obconf_error(_("Failed to load the obconf.glade interface file. You have probably failed to install ObConf properly."), TRUE); ++ if (error) { ++ obconf_error(_("Failed to load the obconf.ui interface file. You have probably failed to install ObConf properly."), TRUE); ++ g_printerr("%s\n", error->message); ++ g_error_free(error); + exit_with_error = TRUE; + } + + paths = obt_paths_new(); + parse_i = obt_xml_instance_new(); +- rrinst = RrInstanceNew(GDK_DISPLAY(), gdk_x11_get_default_screen()); ++ rrinst = RrInstanceNew(gdk_x11_get_default_xdisplay(), gdk_x11_get_default_screen()); + + if (!obc_config_file) { + gchar *p; +@@ -270,14 +274,14 @@ int main(int argc, char **argv) + } + + if (!exit_with_error) { +- glade_xml_signal_autoconnect(glade); ++ gtk_builder_connect_signals(builder, NULL); + + { + gchar *s = g_strdup_printf + ("ObConf %s", + PACKAGE_VERSION); + gtk_label_set_markup(GTK_LABEL +- (glade_xml_get_widget(glade, "title_label")), ++ (gtk_builder_get_object(builder, "title_label")), + s); + g_free(s); + } +@@ -292,7 +296,7 @@ int main(int argc, char **argv) + dock_setup_tab(); + + mainwin = get_widget("main_window"); +- tabstrip = glade_xml_get_widget(glade, "tabstrip"); ++ tabstrip = get_widget("tabstrip"); + + if (obc_theme_install) + theme_install(obc_theme_install); +@@ -336,7 +340,7 @@ void obconf_show_main() + SnDisplay *sn_d; + SnLauncheeContext *sn_cx; + +- if (GTK_WIDGET_VISIBLE(mainwin)) return; ++ if (gtk_widget_get_visible(mainwin)) return; + + gtk_widget_show_all(mainwin); + +@@ -354,7 +358,7 @@ void obconf_show_main() + + if (sn_cx) + sn_launchee_context_setup_window +- (sn_cx, GDK_WINDOW_XWINDOW(GDK_WINDOW(mainwin->window))); ++ (sn_cx, GDK_WINDOW_XID(gtk_widget_get_window(mainwin))); + + if (sn_cx) + sn_launchee_context_complete(sn_cx); +diff --git a/src/main.h b/src/main.h +index 4f3213b..23852d3 100644 +--- a/src/main.h ++++ b/src/main.h +@@ -25,16 +25,15 @@ + #include + + #include +-#include + +-extern GladeXML *glade; ++extern GtkBuilder *builder; + extern RrInstance *rrinst; + extern GtkWidget *mainwin; + extern gchar *obc_config_file; + extern ObtPaths *paths; + extern ObtXmlInst *parse_i; + +-#define get_widget(s) glade_xml_get_widget(glade, s) ++#define get_widget(s) GTK_WIDGET(gtk_builder_get_object(builder, s)) + + void obconf_error(gchar *msg, gboolean model); + void obconf_show_main(); +diff --git a/src/mouse.c b/src/mouse.c +index 88f13d9..ce9059a 100644 +--- a/src/mouse.c ++++ b/src/mouse.c +@@ -30,8 +30,6 @@ static xmlNodePtr saved_custom = NULL; + + static gint read_doubleclick_action(); + static void write_doubleclick_action(gint a); +-static void on_titlebar_doubleclick_custom_activate(GtkMenuItem *w, +- gpointer data); + static void enable_stuff(); + + void mouse_setup_tab() +@@ -69,16 +67,10 @@ void mouse_setup_tab() + w = get_widget("titlebar_doubleclick"); + a = read_doubleclick_action(); + if (a == TITLEBAR_CUSTOM) { +- GtkWidget *i = gtk_menu_item_new_with_label(_("Custom actions")); +- g_signal_connect(i, "activate", +- G_CALLBACK (on_titlebar_doubleclick_custom_activate), +- NULL); +- gtk_menu_shell_append +- (GTK_MENU_SHELL +- (gtk_option_menu_get_menu +- (GTK_OPTION_MENU(w))), i); ++ gtk_combo_box_text_append_text ++ (GTK_COMBO_BOX_TEXT(w), _("Custom actions")); + } +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), a); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), a); + + enable_stuff(); + +@@ -147,26 +139,21 @@ void on_focus_under_mouse_toggled(GtkToggleButton *w, gpointer data) + tree_set_bool("focus/underMouse", gtk_toggle_button_get_active(w)); + } + +-void on_titlebar_doubleclick_maximize_activate(GtkMenuItem *w, gpointer data) ++void on_titlebar_doubleclick_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +- write_doubleclick_action(TITLEBAR_MAXIMIZE); +-} +- +-void on_titlebar_doubleclick_shade_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- write_doubleclick_action(TITLEBAR_SHADE); +-} +- +-static void on_titlebar_doubleclick_custom_activate(GtkMenuItem *w, +- gpointer data) +-{ +- if (mapping) return; +- +- write_doubleclick_action(TITLEBAR_CUSTOM); ++ switch (gtk_combo_box_get_active(w)) { ++ case 0: ++ write_doubleclick_action(TITLEBAR_MAXIMIZE); ++ break; ++ case 1: ++ write_doubleclick_action(TITLEBAR_SHADE); ++ break; ++ case 2: ++ write_doubleclick_action(TITLEBAR_CUSTOM); ++ break; ++ } + } + + void on_doubleclick_time_value_changed(GtkSpinButton *w, gpointer data) +diff --git a/src/moveresize.c b/src/moveresize.c +index 6048a37..c6fb3dd 100644 +--- a/src/moveresize.c ++++ b/src/moveresize.c +@@ -82,7 +82,7 @@ void moveresize_setup_tab() + else if (!strcasecmp(s, "Never")) pos = POPUP_NEVER; + else pos = POPUP_NONPIXEL; + g_free(s); +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), pos); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), pos); + + w = get_widget("drag_threshold"); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), +@@ -94,7 +94,7 @@ void moveresize_setup_tab() + if (!strcasecmp(s, "Fixed")) pos = POSITION_FIXED; + else pos = POSITION_CENTER; + g_free(s); +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), pos); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), pos); + + w = get_widget("fixed_x_popup"); + s = tree_get_string("resize/popupFixedPosition/x", "0"); +@@ -103,7 +103,7 @@ void moveresize_setup_tab() + if (!strcasecmp(s, "Center")) pos = EDGE_CENTER; + else if (opp) pos = EDGE_RIGHT; + else pos = EDGE_LEFT; +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), pos); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), pos); + + w = get_widget("fixed_x_pos"); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), MAX(atoi(s), 0)); +@@ -115,7 +115,7 @@ void moveresize_setup_tab() + if (!strcasecmp(s, "Center")) pos = EDGE_CENTER; + else if (opp) pos = EDGE_RIGHT; + else pos = EDGE_LEFT; +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), pos); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), pos); + + w = get_widget("fixed_y_pos"); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), MAX(atoi(s), 0)); +@@ -140,7 +140,7 @@ static void enable_stuff() + gboolean b; + + w = get_widget("resize_popup"); +- b = gtk_option_menu_get_history(GTK_OPTION_MENU(w)) != POPUP_NEVER; ++ b = gtk_combo_box_get_active(GTK_COMBO_BOX(w)) != POPUP_NEVER; + w = get_widget("resize_position"); + gtk_widget_set_sensitive(w, b); + +@@ -150,7 +150,7 @@ static void enable_stuff() + gtk_widget_set_sensitive(w, b); + + w = get_widget("resize_position"); +- b = gtk_option_menu_get_history(GTK_OPTION_MENU(w)) == POSITION_FIXED; ++ b = gtk_combo_box_get_active(GTK_COMBO_BOX(w)) == POSITION_FIXED; + w = get_widget("fixed_x_popup"); + gtk_widget_set_sensitive(w, b); + w = get_widget("fixed_y_popup"); +@@ -163,12 +163,12 @@ static void enable_stuff() + } + else { + w = get_widget("fixed_x_popup"); +- b = gtk_option_menu_get_history(GTK_OPTION_MENU(w)) != EDGE_CENTER; ++ b = gtk_combo_box_get_active(GTK_COMBO_BOX(w)) != EDGE_CENTER; + w = get_widget("fixed_x_pos"); + gtk_widget_set_sensitive(w, b); + + w = get_widget("fixed_y_popup"); +- b = gtk_option_menu_get_history(GTK_OPTION_MENU(w)) != EDGE_CENTER; ++ b = gtk_combo_box_get_active(GTK_COMBO_BOX(w)) != EDGE_CENTER; + w = get_widget("fixed_y_pos"); + gtk_widget_set_sensitive(w, b); + } +@@ -196,27 +196,21 @@ void on_resize_contents_toggled(GtkToggleButton *w, gpointer data) + tree_set_bool("resize/drawContents", gtk_toggle_button_get_active(w)); + } + +-void on_resize_popup_nonpixel_activate(GtkMenuItem *w, gpointer data) ++void on_resize_popup_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +- tree_set_string("resize/popupShow", "NonPixel"); +- enable_stuff(); +-} +- +-void on_resize_popup_always_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("resize/popupShow", "Always"); +- enable_stuff(); +-} +- +-void on_resize_popup_never_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("resize/popupShow", "Never"); ++ switch(gtk_combo_box_get_active(w)) { ++ case 0: ++ tree_set_string("resize/popupShow", "NonPixel"); ++ break; ++ case 1: ++ tree_set_string("resize/popupShow", "Always"); ++ break; ++ case 2: ++ tree_set_string("resize/popupShow", "Never"); ++ break; ++ } + enable_stuff(); + } + +@@ -228,27 +222,21 @@ void on_drag_threshold_value_changed(GtkSpinButton *w, gpointer data) + gtk_spin_button_get_value_as_int(w)); + } + +-void on_resize_position_center_activate(GtkMenuItem *w, gpointer data) ++void on_resize_position_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +- tree_set_string("resize/popupPosition", "Center"); +- enable_stuff(); +-} +- +-void on_resize_position_top_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("resize/popupPosition", "Top"); +- enable_stuff(); +-} +- +-void on_resize_position_fixed_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("resize/popupPosition", "Fixed"); ++ switch(gtk_combo_box_get_active(w)) { ++ case 0: ++ tree_set_string("resize/popupPosition", "Center"); ++ break; ++ case 1: ++ tree_set_string("resize/popupPosition", "Top"); ++ break; ++ case 2: ++ tree_set_string("resize/popupPosition", "Fixed"); ++ break; ++ } + enable_stuff(); + } + +@@ -266,7 +254,7 @@ static void write_fixed_position(const gchar *coord) + popup = get_widget(popupname); + g_free(popupname); + +- edge = gtk_option_menu_get_history(GTK_OPTION_MENU(popup)); ++ edge = gtk_combo_box_get_active(GTK_COMBO_BOX(popup)); + g_assert(edge == EDGE_CENTER || edge == EDGE_LEFT || edge == EDGE_RIGHT); + + if (edge == EDGE_CENTER) +@@ -295,23 +283,7 @@ static void write_fixed_position(const gchar *coord) + } + + +-void on_fixed_x_position_left_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- write_fixed_position("x"); +- enable_stuff(); +-} +- +-void on_fixed_x_position_right_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- write_fixed_position("x"); +- enable_stuff(); +-} +- +-void on_fixed_x_position_center_activate(GtkMenuItem *w, gpointer data) ++void on_fixed_x_position_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +@@ -319,23 +291,7 @@ void on_fixed_x_position_center_activate(GtkMenuItem *w, gpointer data) + enable_stuff(); + } + +-void on_fixed_y_position_top_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- write_fixed_position("y"); +- enable_stuff(); +-} +- +-void on_fixed_y_position_bottom_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- write_fixed_position("y"); +- enable_stuff(); +-} +- +-void on_fixed_y_position_center_activate(GtkMenuItem *w, gpointer data) ++void on_fixed_y_position_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +diff --git a/src/obconf.gladep b/src/obconf.gladep +deleted file mode 100644 +index 5bcc940..0000000 +--- a/src/obconf.gladep ++++ /dev/null +@@ -1,13 +0,0 @@ +- +- +- +- +- ObConf +- obconf +- ../ +- +- ../pixmaps +- FALSE +- TRUE +- strings.c +- +diff --git a/src/obconf.glade b/src/obconf.ui +similarity index 75% +rename from src/obconf.glade +rename to src/obconf.ui +index faf98e0..b2efefb 100644 +--- a/src/obconf.glade ++++ b/src/obconf.ui +@@ -1,31 +1,182 @@ +- +- ++ ++ ++ ++ 100 ++ 1 ++ 10 ++ 1 ++ 0 ++ 1 ++ ++ ++ 10000 ++ 1 ++ 10 ++ 10 ++ 0 ++ 1 ++ ++ ++ 100 ++ 1 ++ 10 ++ 1 ++ 0 ++ 1 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 1 ++ 0 ++ 20 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 1 ++ 0 ++ 20 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 1 ++ 0 ++ 20 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 1 ++ 0 ++ 20 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 1 ++ 0 ++ 1 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 1 ++ 0 ++ 1 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 10 ++ 0 ++ 300 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 10 ++ 0 ++ 300 ++ ++ ++ 100 ++ 1 ++ 10 ++ 1 ++ 0 ++ 1 ++ ++ ++ 100 ++ 0 ++ 10 ++ 1 ++ 0 ++ 20 ++ ++ ++ 100 ++ 0 ++ 10 ++ 1 ++ 0 ++ 1 ++ ++ ++ 10000 ++ 100 ++ 10 ++ 10 ++ 0 ++ 100 ++ ++ ++ 1000 ++ 0 ++ 10 ++ 1 ++ 0 ++ 1 ++ ++ ++ 1000 ++ 0 ++ 10 ++ 1 ++ 0 ++ 1 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 10 ++ 0 ++ 0 ++ ++ ++ 10000 ++ 0 ++ 10 ++ 10 ++ 0 ++ 0 ++ + + +- ++ + False + About ObConf +- dialog +- +- +- ++ ++ ++ + True + False + 12 + 12 + +- ++ + True + False + 6 + +- ++ + True + True + <span weight="bold" size="xx-large">ObConf VERSION</span> + True + True +- ++ + + False + False +@@ -33,12 +184,12 @@ + + + +- ++ + True + True + A preferences manager for Openbox + True +- ++ + + False + False +@@ -46,7 +197,7 @@ + + + +- ++ + True + True + Copyright (c) 2003-2008 +@@ -55,27 +206,27 @@ Tim Riley <tr@slackzone.org> + Javeed Shaikh <syscrash2k@gmail.com> + center + True +- ++ + + False + False + 2 + + +- ++ + + True + True + 0 + + +- +- ++ ++ + True + False + end + +- ++ + gtk-close + True + True +@@ -85,41 +236,39 @@ Javeed Shaikh <syscrash2k@gmail.com> + False + False + True +- +- ++ ++ + + False + False + 0 + + +- +- +- True +- True +- 1 +- ++ + +- ++ + +- +- ++ ++ about_close ++ ++ ++ + False + window1 + +- ++ + True + False + 12 + 18 + +- ++ + True + False + 0 + <span weight="bold">Press the key you wish to bind...</span> + True +- ++ + + False + False +@@ -127,61 +276,61 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + True + True +- â—Ź ++ + False + False + True + True +- ++ + + False + False + 1 + + +- ++ + +- +- ++ ++ + False + 6 + Openbox Configuration Manager + preferences-system-windows +- ++ + +- ++ + True + False + 6 + +- ++ + True + True + left + True + +- ++ + True + False + 12 + 6 + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Theme</span> + True +- ++ + + False + False +@@ -189,15 +338,15 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -205,46 +354,46 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + 6 + +- ++ + True + True + never + automatic + in + +- ++ + True + True + False +- ++ + +- ++ + + True + True + 0 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + True + True +@@ -252,34 +401,34 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + +- ++ + True + True + False + False +- ++ + +- ++ + True + False + 0 + 0 + 0 + +- ++ + True + False + 2 + +- ++ + True + False + gtk-open +- ++ + + False + False +@@ -287,30 +436,30 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + _Install a new theme... + True +- ++ + + False + False + 1 + + +- ++ + +- ++ + +- ++ + + False + False + 0 + + +- ++ + + False + True +@@ -318,34 +467,34 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + +- ++ + True + True + False + False +- ++ + +- ++ + True + False + 0 + 0 + 0 + +- ++ + True + False + 2 + +- ++ + True + False + gtk-save +- ++ + + False + False +@@ -353,71 +502,70 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + Create a theme _archive (.obt)... + True +- ++ + + False + False + 1 + + +- ++ + +- ++ + +- ++ + + False + False + 0 + + +- ++ + + False + True + 2 + + +- ++ + +- +- ++ ++ + True + False + 0 + 6 + 8 + Theme +- ++ + + False +- tab + + + +- ++ + True + False + 12 + 18 + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Windows</span> + True +- ++ + + False + False +@@ -425,23 +573,23 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + +- ++ + True + False + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -449,40 +597,29 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + 6 + +- ++ ++ _Windows retain a border when undecorated + True +- False +- +- +- _Windows retain a border when undecorated +- True +- True +- False +- False +- True +- True +- +- +- +- False +- False +- 0 +- +- +- ++ True ++ False ++ False ++ True ++ True ++ ++ + +- True +- True ++ False ++ False + 0 + + + +- ++ + A_nimate iconify and restore + True + True +@@ -490,43 +627,43 @@ Javeed Shaikh <syscrash2k@gmail.com> + False + True + True +- +- ++ ++ + + False + False + 1 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 0 + + +- ++ + + True + True + 0 + + +- ++ + + False + True + 1 + + +- ++ + + False + True +@@ -534,18 +671,18 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Window Titles</span> + True +- ++ + + False + False +@@ -553,15 +690,15 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -569,23 +706,23 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + False + 6 + +- ++ + True + False + 6 + +- ++ + True + False + _Button order: + True + title_layout +- ++ + + False + False +@@ -593,10 +730,10 @@ Javeed Shaikh <syscrash2k@gmail.com> + + + +- ++ + True + True +- N - The window's icon ++ N - The window's icon + D - The all-desktops (sticky) button + S - The shade (roll up) button + L - The label (window title) +@@ -607,15 +744,15 @@ C - The close button + False + True + True +- +- ++ ++ + + False + True + 1 + + +- ++ + + True + True +@@ -623,16 +760,16 @@ C - The close button + + + +- ++ + True + False + 6 + +- ++ + True + False + +- ++ + + False + False +@@ -640,12 +777,12 @@ C - The close button + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 +@@ -654,7 +791,7 @@ C - The close button + L: + I: + M: +- ++ + + False + False +@@ -662,7 +799,7 @@ M: + + + +- ++ + True + False + 0 +@@ -671,7 +808,7 @@ M: + Window label (Title) + Iconify (Minimize) + Maximize +- ++ + + False + False +@@ -679,10 +816,10 @@ Maximize + + + +- ++ + True + False +- ++ + + False + False +@@ -690,7 +827,7 @@ Maximize + + + +- ++ + True + False + 0 +@@ -698,7 +835,7 @@ Maximize + C: + S: + D: +- ++ + + False + False +@@ -706,7 +843,7 @@ D: + + + +- ++ + True + False + 0 +@@ -714,42 +851,42 @@ D: + Close + Shade (Roll up) + Omnipresent (On all desktops) +- ++ + + False + False + 4 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + False + True +@@ -757,18 +894,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Fonts</span> + True +- ++ + + False + False +@@ -776,15 +913,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -792,21 +929,21 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + 2 + 3 + +- ++ + True + True + False + False + True +- +- ++ ++ + + 1 + 2 +@@ -817,14 +954,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True +- +- ++ ++ + + 1 + 2 +@@ -835,14 +972,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True +- +- ++ ++ + + 1 + 2 +@@ -853,28 +990,28 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 1 + _Active window title: + True + font_active +- ++ + + GTK_FILL + + + + +- ++ + True + False + 1 + _Inactive window title: + True + font_inactive +- ++ + + 1 + 2 +@@ -883,14 +1020,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 1 + Menu _header: + True + font_menu_header +- ++ + + 2 + 3 +@@ -899,14 +1036,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 1 + _Menu Item: + True + font_menu_item +- ++ + + 3 + 4 +@@ -915,13 +1052,13 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 1 + Active _On-screen display: + True +- ++ + + 4 + 5 +@@ -930,14 +1067,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True +- +- ++ ++ + + 1 + 2 +@@ -945,13 +1082,13 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 1 + Inactive O_n-screen display: + True +- ++ + + 5 + 6 +@@ -960,14 +1097,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True +- +- ++ ++ + + 1 + 2 +@@ -978,14 +1115,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True +- +- ++ ++ + + 1 + 2 +@@ -995,66 +1132,62 @@ Omnipresent (On all desktops) + + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + False + True + 2 + + +- +- +- 1 +- ++ + +- +- ++ ++ + True + False + 0 + 6 + 8 + Appearance +- ++ + + 1 + False +- tab + + + +- ++ + True + False + 12 + 18 + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Focusing Windows</span> + True +- ++ + + False + False +@@ -1062,15 +1195,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -1078,12 +1211,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + Focus _new windows when they appear + True + True +@@ -1091,29 +1224,29 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False + 0 + + +- ++ + + True + True + 1 + + +- ++ + +- True ++ False + True + 1 + + +- ++ + + False + True +@@ -1121,18 +1254,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Placing Windows</span> + True +- ++ + + False + False +@@ -1140,15 +1273,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -1156,12 +1289,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + _Place new windows under the mouse pointer + True + True +@@ -1169,8 +1302,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -1181,19 +1314,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 12 + +- ++ + True + False + 0 + Prefer to place new windows _on: + True + place_active_popup +- ++ + + False + False +@@ -1201,84 +1334,46 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- The primary monitor +- True +- +- +- +- +- +- True +- False +- False +- The active monitor +- True +- +- +- +- +- +- True +- False +- False +- The monitor with the mouse +- True +- +- +- +- +- +- True +- False +- False +- All monitors +- True +- +- +- +- +- +- ++ ++ The primary monitor ++ The active monitor ++ The monitor with the mouse ++ All monitors ++ ++ ++ + + False + False + 1 + + +- ++ + +- True ++ False + True + 2 + + +- ++ + + True + True + 1 + + +- ++ + +- True ++ False + True + 1 + + +- ++ + + False + True +@@ -1286,18 +1381,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Primary Monitor</span> + True +- ++ + + False + False +@@ -1305,15 +1400,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -1321,16 +1416,16 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + +- ++ + True + False + 0 +@@ -1338,14 +1433,14 @@ Omnipresent (On all desktops) + The primary monitor is where Openbox will place dialogs, such as the one used for cycling windows. + True + 0 +- ++ + + False + False + 0 + + +- ++ + + False + False +@@ -1353,19 +1448,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + Primary _monitor: + True + primary_monitor_popup +- ++ + + False + False +@@ -1373,70 +1468,41 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- Fixed Monitor +- True +- +- +- +- +- +- True +- False +- False +- Active Monitor +- True +- +- +- +- +- +- True +- False +- False +- Monitor With Mouse Pointer +- True +- +- +- +- +- +- ++ ++ Fixed Monitor ++ Active Monitor ++ Monitor With Mouse Pointer ++ ++ ++ + + False + False + 1 + + +- ++ + +- True ++ False + True + 1 + + + +- ++ + True + False + 6 + +- ++ + True + False + +- ++ + + False + False +@@ -1444,14 +1510,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 0 + _Fixed monitor: + True + fixed_monitor +- ++ + + False + False +@@ -1459,90 +1525,86 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 1 1 100 1 10 0 ++ adjustment1 + 1 +- +- ++ ++ + + False + False + 2 + + +- ++ + +- True ++ False + True + 2 + + +- ++ + + True + True + 1 + + +- ++ + + False + True + 1 + + +- ++ + + False + True + 2 + + +- +- +- 2 +- ++ + +- +- ++ ++ + True + False + 0 + 6 + 8 + Windows +- ++ + + 2 + False +- tab + + + +- ++ + True + False + 12 + 18 + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Moving and Resizing Windows</span> + True +- ++ + + False + False +@@ -1550,15 +1612,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -1566,12 +1628,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + Update the window contents while _resizing + True + True +@@ -1579,8 +1641,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -1588,19 +1650,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + Drag _threshold distance: + True + drag_threshold +- ++ + + False + False +@@ -1608,18 +1670,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 1 1 100 1 10 0 ++ adjustment2 + 1 + True +- +- ++ ++ + + False + True +@@ -1627,38 +1689,38 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False + 2 + + +- ++ + +- True ++ False + True + 1 + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + Amount of resistance against other _windows: + True + resist_window +- ++ + + False + False +@@ -1666,18 +1728,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 20 0 100 1 10 0 ++ adjustment3 + 1 + True +- +- ++ ++ + + False + True +@@ -1685,18 +1747,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False + 2 + + +- ++ + + False + True +@@ -1704,19 +1766,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + Amount of resistance against screen _edges: + True + resist_edge +- ++ + + False + False +@@ -1724,18 +1786,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 1 0 100 1 10 0 ++ adjustment4 + 1 + True +- +- ++ ++ + + False + True +@@ -1743,18 +1805,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False + 2 + + +- ++ + + False + True +@@ -1762,7 +1824,7 @@ Omnipresent (On all desktops) + + + +- ++ + _Switch desktops when moving a window past the screen edge + True + True +@@ -1770,8 +1832,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -1779,15 +1841,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -1795,19 +1857,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + _Amount of time to wait before switching: + True + warp_edge_time +- ++ + + False + False +@@ -1815,18 +1877,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 100 100 10000 10 10 0 ++ adjustment5 + 1 + True +- +- ++ ++ + + False + True +@@ -1834,46 +1896,46 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + ms +- ++ + + False + False + 2 + + +- ++ + + True + True + 1 + + +- ++ + + False + True + 5 + + +- ++ + + True + True + 1 + + +- ++ + + False + True + 1 + + +- ++ + + False + True +@@ -1881,18 +1943,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Information Dialog</span> + True +- ++ + + False + False +@@ -1900,24 +1962,24 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 12 + +- ++ + True + False + 0 + Show _information dialog: + True + resize_popup +- ++ + + False + False +@@ -1925,69 +1987,40 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- When resizing terminal windows +- True +- +- +- +- +- +- True +- False +- False +- Always +- True +- +- +- +- +- +- True +- False +- False +- Never +- True +- +- +- +- +- +- ++ ++ When resizing terminal windows ++ Always ++ Never ++ ++ ++ + + False + False + 1 + + +- ++ + +- True ++ False + True + 0 + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -1995,24 +2028,24 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 12 + +- ++ + True + False + 0 + Information dialog's _position: + True + resize_position +- ++ + + False + False +@@ -2020,69 +2053,40 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- Centered on the window +- True +- +- +- +- +- +- True +- False +- False +- Above the window +- True +- +- +- +- +- +- True +- False +- False +- Fixed position on screen +- True +- +- +- +- +- +- ++ ++ Centered on the window ++ Above the window ++ Fixed position on screen ++ ++ ++ + + False + False + 1 + + +- ++ + +- True ++ False + True + 0 + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -2090,24 +2094,24 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 12 + +- ++ + True + False + 0 + Fixed _x position: + True + fixed_x_popup +- ++ + + False + False +@@ -2115,46 +2119,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- Centered +- True +- +- +- +- +- +- True +- False +- False +- From left edge +- True +- +- +- +- +- +- True +- False +- False +- From right edge +- True +- +- +- +- +- +- ++ ++ Centered ++ From left edge ++ From right edge ++ ++ ++ + + False + False +@@ -2162,23 +2137,23 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + True + False + False + True + True +- 1 0 1000 1 10 0 ++ adjustment6 + 1 + True +- +- ++ ++ + + False + True +@@ -2186,45 +2161,45 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False + 1 + + +- ++ + + True + True + 2 + + +- ++ + +- True ++ False + True + 0 + + + +- ++ + True + False + 12 + +- ++ + True + False + 0 + Fixed _y position: + True + fixed_y_popup +- ++ + + False + False +@@ -2232,46 +2207,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- Centered +- True +- +- +- +- +- +- True +- False +- False +- From top edge +- True +- +- +- +- +- +- True +- False +- False +- From bottom edge +- True +- +- +- +- +- +- ++ ++ Centered ++ From top edge ++ From bottom edge ++ ++ ++ + + False + False +@@ -2279,23 +2225,23 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + True + False + False + True + True +- 1 0 1000 1 10 0 ++ adjustment7 + 1 + True +- +- ++ ++ + + False + True +@@ -2303,112 +2249,108 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False + 1 + + +- ++ + + True + True + 2 + + +- ++ + +- True ++ False + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + False + True + 1 + + +- ++ + + False + True + 1 + + +- +- +- 3 +- ++ + +- +- ++ ++ + True + False + 0 + 6 + 8 + Move & Resize +- ++ + + 3 + False +- tab + + + +- ++ + True + False + 12 + 18 + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Focusing Windows</span> + True +- ++ + + False + False +@@ -2416,15 +2358,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -2432,12 +2374,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + _Focus windows when the mouse pointer moves over them + True + True +@@ -2445,8 +2387,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -2454,15 +2396,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -2470,12 +2412,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + Move focus under the mouse when _switching desktops + True + True +@@ -2483,8 +2425,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -2492,7 +2434,7 @@ Omnipresent (On all desktops) + + + +- ++ + Move focus _under the mouse when the mouse is not moving + True + True +@@ -2500,8 +2442,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -2509,7 +2451,7 @@ Omnipresent (On all desktops) + + + +- ++ + _Raise windows when the mouse pointer moves over them + True + True +@@ -2517,8 +2459,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -2526,18 +2468,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + _Delay before focusing and raising windows: + True + focus_delay +- ++ + + False + False +@@ -2545,18 +2487,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 0 0 10000 10 10 0 ++ adjustment8 + 1 + True +- +- ++ ++ + + False + True +@@ -2564,53 +2506,53 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + ms +- ++ + + False + False + 2 + + +- ++ + +- True ++ False + True + 3 + + +- ++ + + True + True + 1 + + +- ++ + + False +- False ++ True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + False + True + 1 + + +- ++ + + False + True +@@ -2618,18 +2560,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Titlebar</span> + True +- ++ + + False + False +@@ -2637,15 +2579,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -2653,24 +2595,24 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 12 + +- ++ + True + False + 0 + Double click on the _titlebar: + True + titlebar_doubleclick +- ++ + + False + False +@@ -2678,63 +2620,43 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- Maximizes the window +- True +- +- +- +- +- +- True +- False +- False +- Shades the window +- True +- +- +- +- +- +- ++ ++ Maximizes the window ++ Shades the window ++ ++ ++ + + False + False + 1 + + +- ++ + +- True ++ False + True + 0 + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + Double click ti_me: + True + doubleclick_time +- ++ + + False + False +@@ -2742,18 +2664,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 0 0 10000 10 10 0 ++ adjustment9 + 1 + True +- +- ++ ++ + + False + True +@@ -2761,39 +2683,39 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + ms +- ++ + + False + False + 2 + + +- ++ + +- True ++ False + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + False + True +@@ -2801,73 +2723,69 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False + 0 + + +- ++ + +- True ++ False + True + 0 + + +- ++ + + False + True + 2 + + +- +- +- 4 +- ++ + +- +- ++ ++ + True + False + 0 + 6 + 8 + Mouse +- ++ + + 4 + False +- tab + + + +- ++ + True + False + 12 + 6 + +- ++ + True + False + 0 + <span weight="bold">Desktops</span> + True +- ++ + + False + False +@@ -2875,15 +2793,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -2891,12 +2809,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + _Show a notification when switching desktops + True + True +@@ -2904,8 +2822,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -2913,15 +2831,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -2929,19 +2847,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + _Amount of time to show the notification for: + True + desktop_popup_time +- ++ + + False + False +@@ -2949,18 +2867,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 1 1 10000 10 10 0 ++ adjustment10 + 1 + True +- +- ++ ++ + + False + True +@@ -2968,25 +2886,25 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + ms +- ++ + + False + False + 2 + + +- ++ + + True + True + 1 + + +- ++ + + False + True +@@ -2994,18 +2912,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + _Number of desktops: + True + desktop_num +- ++ + + False + False +@@ -3013,25 +2931,25 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 1 1 100 1 10 0 ++ adjustment11 + 1 + True +- +- ++ ++ + + False + True + 1 + + +- ++ + + False + True +@@ -3039,14 +2957,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 0 + _Desktop names: + True + desktop_names +- ++ + + False + False +@@ -3054,74 +2972,70 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + never + automatic + in + +- ++ + True + True + False +- ++ + +- ++ + + True + True + 4 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- +- +- 5 +- ++ + +- +- ++ ++ + True + False + 0 + 6 + 8 + Desktops +- ++ + + 5 + False +- tab + + + +- ++ + True + False + 12 + 6 + +- ++ + True + False + 0 + <span weight="bold">Desktop Margins</span> + True +- ++ + + False + False +@@ -3129,15 +3043,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -3145,19 +3059,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + 0 + Desktop margins are reserved areas on the edge of your screen. New windows will not be placed within a margin, and maximized windows will not cover them. + True +- ++ + + False + False +@@ -3165,14 +3079,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False +- ++ + + True + True +@@ -3180,14 +3094,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False +- ++ + + True + True +@@ -3195,18 +3109,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + 4 + _Top + True + margins_top +- ++ + + False + True +@@ -3214,15 +3128,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False +- ++ + + True + True +@@ -3230,18 +3144,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 20 0 10000 1 10 0 ++ adjustment12 + 1 + True +- +- ++ ++ + + False + False +@@ -3249,11 +3163,11 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False +@@ -3261,31 +3175,31 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 3 + + +- ++ + + False + True + 1 + + +- ++ + + False + True + 1 + + +- ++ + + True + True +@@ -3293,17 +3207,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 2 + + +- ++ + + True + True +@@ -3311,14 +3225,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False +- ++ + + True + True +@@ -3326,14 +3240,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False +- ++ + + True + True +@@ -3341,14 +3255,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 4 + _Left + True + margins_left +- ++ + + False + True +@@ -3356,15 +3270,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False +- ++ + + True + True +@@ -3372,18 +3286,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 20 0 10000 1 10 0 ++ adjustment13 + 1 + True +- +- ++ ++ + + False + False +@@ -3391,11 +3305,11 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False +@@ -3403,17 +3317,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 3 + + +- ++ + + False + True +@@ -3421,17 +3335,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 3 + + +- ++ + + False + True +@@ -3439,12 +3353,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 150 + video-display +- ++ + + False + False +@@ -3452,14 +3366,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False +- ++ + + True + True +@@ -3467,14 +3381,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 4 + _Right + True + margins_right +- ++ + + False + True +@@ -3482,15 +3396,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False +- ++ + + True + True +@@ -3498,18 +3412,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 20 0 10000 1 10 0 ++ adjustment14 + 1 + True +- +- ++ ++ + + False + False +@@ -3517,11 +3431,11 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False +@@ -3529,17 +3443,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 3 + + +- ++ + + False + True +@@ -3547,17 +3461,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 3 + + +- ++ + + False + True +@@ -3565,17 +3479,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 4 + + +- ++ + + True + True +@@ -3583,14 +3497,14 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False +- ++ + + True + True +@@ -3598,18 +3512,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + 4 + _Bottom + True + margins_bottom +- ++ + + False + True +@@ -3617,15 +3531,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False +- ++ + + True + True +@@ -3633,18 +3547,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 20 0 10000 1 10 0 ++ adjustment15 + 1 + True +- +- ++ ++ + + False + False +@@ -3652,11 +3566,11 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + px +- ++ + + False + False +@@ -3664,17 +3578,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 3 + + +- ++ + + False + True +@@ -3682,17 +3596,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 2 + + +- ++ + + False + True +@@ -3700,17 +3614,17 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 2 + + +- ++ + + True + True +@@ -3718,69 +3632,65 @@ Omnipresent (On all desktops) + + + +- ++ + True + False +- ++ + + True + True + 4 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- +- +- 6 +- ++ + +- +- ++ ++ + True + False + 0 + 6 + 8 + Margins +- ++ + + 6 + False +- tab + + + +- ++ + True + False + 12 + 18 + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Dock</span> + True +- ++ + + False + False +@@ -3788,15 +3698,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -3804,7 +3714,7 @@ Omnipresent (On all desktops) + + + +- ++ + 490 + True + False +@@ -3812,21 +3722,21 @@ Omnipresent (On all desktops) + 0 + The dock is a special container for "dockapps", or dock applications. It is not visible on screen until a dockapp is run. Dockapps can be used to show things like a clock, or to provide you with a system tray. + True +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + False + True +@@ -3834,18 +3744,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Position</span> + True +- ++ + + False + False +@@ -3853,15 +3763,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -3869,24 +3779,24 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 12 + +- ++ + True + False + 0 + _Position: + True + dock_position +- ++ + + False + False +@@ -3894,113 +3804,30 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- Top Left +- True +- +- +- +- +- +- True +- False +- False +- Top +- True +- +- +- +- +- +- True +- False +- False +- Top Right +- True +- +- +- +- +- +- True +- False +- False +- Left +- True +- +- +- +- +- +- True +- False +- False +- Right +- True +- +- +- +- +- +- True +- False +- False +- Bottom Left +- True +- +- +- +- +- +- True +- False +- False +- Bottom +- True +- +- +- +- +- +- True +- False +- False +- Bottom Right +- True +- +- +- +- +- +- True +- False +- False +- Floating +- True +- +- +- +- +- +- ++ ++ Top Left ++ Top ++ Top Right ++ Left ++ Right ++ Bottom Left ++ Bottom ++ Bottom Right ++ Floating ++ ++ ++ + + False + False + 1 + + +- ++ + + False + False +@@ -4008,15 +3835,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -4024,18 +3851,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + _Floating position: + True + dock_float_x +- ++ + + False + False +@@ -4043,18 +3870,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 1 0 10000 1 10 0 ++ adjustment16 + 1 + True +- +- ++ ++ + + False + True +@@ -4062,11 +3889,11 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + x +- ++ + + False + False +@@ -4074,32 +3901,32 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 1 0 10000 1 10 0 ++ adjustment17 + 1 + True +- +- ++ ++ + + False + True + 3 + + +- ++ + + True + True + 1 + + +- ++ + + False + False +@@ -4107,15 +3934,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -4123,7 +3950,7 @@ Omnipresent (On all desktops) + + + +- ++ + Allow _windows to be placed within the dock's area + True + True +@@ -4131,15 +3958,15 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False + 1 + + +- ++ + + True + True +@@ -4147,19 +3974,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 12 + +- ++ + True + False + 0 + _Orientation: + True + dock_direction +- ++ + + False + False +@@ -4167,64 +3994,44 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False +- +- +- False +- +- +- True +- False +- False +- Vertical +- True +- +- +- +- +- +- True +- False +- False +- Horizontal +- True +- +- +- +- +- +- ++ ++ Vertical ++ Horizontal ++ ++ ++ + + False + False + 1 + + +- ++ + + True + True + 3 + + +- ++ + + True + True + 1 + + +- ++ + + False + False + 1 + + +- ++ + + False + False +@@ -4232,18 +4039,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Stacking</span> + True +- ++ + + False + False +@@ -4251,15 +4058,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -4267,12 +4074,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + Keep dock _above other windows + True + True +@@ -4280,8 +4087,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -4289,7 +4096,7 @@ Omnipresent (On all desktops) + + + +- ++ + A_llow dock to be both above and below windows + True + True +@@ -4298,8 +4105,8 @@ Omnipresent (On all desktops) + True + True + dock_stack_top +- +- ++ ++ + + False + False +@@ -4307,7 +4114,7 @@ Omnipresent (On all desktops) + + + +- ++ + Keep dock _below other windows + True + True +@@ -4316,29 +4123,29 @@ Omnipresent (On all desktops) + True + True + dock_stack_top +- +- ++ ++ + + False + False + 2 + + +- ++ + + False + False + 1 + + +- ++ + + False + False + 1 + + +- ++ + + False + False +@@ -4346,18 +4153,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + <span weight="bold">Hiding</span> + True +- ++ + + False + False +@@ -4365,15 +4172,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -4381,12 +4188,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + _Hide off screen + True + True +@@ -4394,8 +4201,8 @@ Omnipresent (On all desktops) + False + True + True +- +- ++ ++ + + False + False +@@ -4403,15 +4210,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -4419,19 +4226,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + _Delay before hiding: + True + dock_hide_delay +- ++ + + False + False +@@ -4439,18 +4246,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 300 0 10000 10 10 0 ++ adjustment18 + 1 + True +- +- ++ ++ + + False + True +@@ -4458,25 +4265,25 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + ms +- ++ + + False + False + 2 + + +- ++ + + True + True + 1 + + +- ++ + + True + True +@@ -4484,15 +4291,15 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + +- ++ + + False + False +@@ -4500,19 +4307,19 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + 6 + +- ++ + True + False + 0 + Delay before _showing: + True + dock_show_delay +- ++ + + False + False +@@ -4520,18 +4327,18 @@ Omnipresent (On all desktops) + + + +- ++ + True + True + False + False + True + True +- 300 0 10000 10 10 0 ++ adjustment19 + 1 + True +- +- ++ ++ + + False + True +@@ -4539,73 +4346,69 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + ms +- ++ + + False + False + 2 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 2 + + +- ++ + + True + True + 1 + + +- ++ + + True + True + 1 + + +- ++ + + False + False + 3 + + +- +- +- 7 +- ++ + +- +- ++ ++ + True + False + 0 + 6 + 8 + Dock +- ++ + + 7 + False +- tab + + +- ++ + + True + True +@@ -4613,16 +4416,16 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + +- ++ + True + False + start + +- ++ + Abo_ut + True + True +@@ -4630,15 +4433,15 @@ Omnipresent (On all desktops) + False + False + True +- +- ++ ++ + + False + False + 0 + + +- ++ + + True + True +@@ -4646,12 +4449,12 @@ Omnipresent (On all desktops) + + + +- ++ + True + False + end + +- ++ + gtk-close + True + True +@@ -4659,29 +4462,29 @@ Omnipresent (On all desktops) + False + False + True +- +- ++ ++ + + False + False + 0 + + +- ++ + + True + True + 1 + + +- ++ + + False + False + 1 + + +- ++ + +- +- ++ ++ +diff --git a/src/preview.c b/src/preview.c +index 36fc94a..f52bb32 100644 +--- a/src/preview.c ++++ b/src/preview.c +@@ -54,7 +54,7 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + RrAppearance *bullet; /* for submenu */ + + GdkPixmap *pixmap; +- GdkPixbuf *pixbuf; ++ GdkPixbuf *pixbuf, *tmp_pixbuf; + + /* width and height of the whole menu */ + gint width, height; +@@ -104,6 +104,7 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + /* set border */ + pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height); + gdk_pixbuf_fill(pixbuf, rr_color_pixel(theme->menu_border_color)); ++ tmp_pixbuf = gdk_pixbuf_copy(pixbuf); + + /* menu appears after inside the border */ + x = y = theme->mbwidth; +@@ -126,9 +127,11 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + theme_pixmap_paint(title_text, bw, title_h); + + pixmap = gdk_pixmap_foreign_new(title_text->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, bw, title_h); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, ++ bw, title_h); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, bw, title_h, pixbuf, x, y); + + y += title_h + theme->mbwidth; + +@@ -141,9 +144,11 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + /* draw background for normal entry */ + theme_pixmap_paint(background, bw, bh); + pixmap = gdk_pixmap_foreign_new(background->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, bw, bh); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, ++ bw, bh); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, bw, bh, pixbuf, x, y); + + /* draw normal entry */ + normal->surface.parent = background; +@@ -152,10 +157,12 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + RrMinSize(normal, &tw, &th); + theme_pixmap_paint(normal, tw, th); + pixmap = gdk_pixmap_foreign_new(normal->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x + PADDING, y + PADDING, +- tw, th); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, ++ tw, th); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, tw, th, pixbuf, ++ x + PADDING, y + PADDING); + + /* draw bullet */ + RrMinSize(normal, &tw, &th); +@@ -164,12 +171,12 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + bullet->surface.parenty = PADDING; + theme_pixmap_paint(bullet, th, th); + pixmap = gdk_pixmap_foreign_new(bullet->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, +- width - theme->mbwidth - th, +- y + PADDING, +- th, th); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, ++ th, th); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, th, th, pixbuf, ++ width - theme->mbwidth - th, y + PADDING); + + y += th + 2*PADDING; + +@@ -179,10 +186,11 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + background->surface.parenty = y - theme->mbwidth; + theme_pixmap_paint(background, bw, bh); + pixmap = gdk_pixmap_foreign_new(background->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, +- bw, bh); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, ++ bw, bh); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, bw, bh, pixbuf, x, y); + + /* draw disabled entry */ + RrMinSize(disabled, &tw, &th); +@@ -191,10 +199,12 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + disabled->surface.parenty = PADDING; + theme_pixmap_paint(disabled, tw, th); + pixmap = gdk_pixmap_foreign_new(disabled->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x + PADDING, y + PADDING, +- tw, th); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, ++ tw, th); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, tw, th, pixbuf, ++ x + PADDING, y + PADDING); + + y += th + 2*PADDING; + +@@ -206,10 +216,11 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + + theme_pixmap_paint(background, bw, bh); + pixmap = gdk_pixmap_foreign_new(background->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, +- bw, bh); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, ++ bw, bh); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, bw, bh, pixbuf, x, y); + + /* draw selected entry */ + RrMinSize(selected, &tw, &th); +@@ -218,10 +229,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + selected->surface.parenty = PADDING; + theme_pixmap_paint(selected, tw, th); + pixmap = gdk_pixmap_foreign_new(selected->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x + PADDING, y + PADDING, +- tw, th); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, ++ tw, th); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, tw, th, pixbuf, ++ x + PADDING, y + PADDING); ++ g_object_unref(tmp_pixbuf); + + return pixbuf; + } +@@ -234,7 +248,7 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + RrAppearance *a; + + GdkPixmap *pixmap; +- GdkPixbuf *pixbuf = NULL; ++ GdkPixbuf *pixbuf = NULL, *tmp_pixbuf = NULL; + GdkPixbuf *scratch; + + gint w, label_w, h, x, y; +@@ -249,6 +263,7 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + rr_color_pixel(focus ? + theme->frame_focused_border_color : + theme->frame_unfocused_border_color)); ++ tmp_pixbuf = gdk_pixbuf_copy(pixbuf); + + /* title */ + w = width - 2*theme->fbwidth; +@@ -257,9 +272,10 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + + x = y = theme->fbwidth; + pixmap = gdk_pixmap_foreign_new(title->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, w, h); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + /* calculate label width */ + label_w = width - (theme->paddingx + theme->fbwidth + 1) * 2; +@@ -302,9 +318,10 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + + theme_pixmap_paint(a, w, h); + pixmap = gdk_pixmap_foreign_new(a->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, w, h); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + x += theme->button_size + 2 + theme->paddingx + 1; + } else if (*layout == 'L') { /* label */ +@@ -319,9 +336,10 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + + theme_pixmap_paint(a, w, h); + pixmap = gdk_pixmap_foreign_new(a->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, w, h); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + x += w + theme->paddingx + 1; + } else { +@@ -367,9 +385,10 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + pixmap = gdk_pixmap_foreign_new(a->pixmap); + /* use y + 1 because these buttons should be centered wrt the label + */ +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y + 1, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, w, h); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y + 1); + + x += theme->button_size + theme->paddingx + 1; + } +@@ -385,9 +404,10 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + + theme_pixmap_paint(handle, w, h); + pixmap = gdk_pixmap_foreign_new(handle->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, w, h); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + /* openbox handles this drawing stuff differently (it fills the bottom + * of the window with the handle), so it avoids this bug where +@@ -406,15 +426,17 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + + theme_pixmap_paint(a, w, h); + pixmap = gdk_pixmap_foreign_new(a->pixmap); +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, w, h); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + /* right grip */ + x = width - theme->fbwidth - theme->grip_width; +- pixbuf = gdk_pixbuf_get_from_drawable(pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, x, y, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, ++ gdk_colormap_get_system(), ++ 0, 0, 0, 0, w, h); ++ gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + } + + /* title separator colour */ +@@ -452,6 +474,7 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + pixbuf, + x + theme->cbwidthx, + y + theme->cbwidthy); ++ g_object_unref(scratch); + + return pixbuf; + } +@@ -531,13 +554,16 @@ GdkPixbuf *preview_theme(const gchar *name, const gchar *titlelayout, + + window = preview_window(theme, titlelayout, FALSE, window_w, h); + gdk_pixbuf_copy_area(window, 0, 0, window_w, h, preview, 20, 0); ++ g_object_unref(window); + + window = preview_window(theme, titlelayout, TRUE, window_w, h); + gdk_pixbuf_copy_area(window, 0, 0, window_w, h, + preview, 10, theme->title_height + 5); ++ g_object_unref(window); + + gdk_pixbuf_copy_area(menu, 0, 0, menu_w, h, + preview, 0, 2 * (theme->title_height + 5)); ++ g_object_unref(menu); + + RrThemeFree(theme); + +diff --git a/src/preview_update.c b/src/preview_update.c +index 638f364..965431e 100644 +--- a/src/preview_update.c ++++ b/src/preview_update.c +@@ -136,8 +136,10 @@ static gboolean update_theme_preview_iterate(gpointer data) + inactive_window_font, menu_title_font, + menu_item_font, osd_active_font, + osd_inactive_font); +- if (preview) ++ if (preview) { + gtk_list_store_set(GTK_LIST_STORE(ls), &iter, 1, preview, -1); ++ g_object_unref(preview); ++ } + + return TRUE; + } +diff --git a/src/tree.c b/src/tree.c +index cbe9b90..4ad4a38 100644 +--- a/src/tree.c ++++ b/src/tree.c +@@ -114,7 +114,7 @@ void tree_apply() + + ce.xclient.type = ClientMessage; + ce.xclient.message_type = gdk_x11_get_xatom_by_name("_OB_CONTROL"); +- ce.xclient.display = GDK_DISPLAY(); ++ ce.xclient.display = gdk_x11_get_default_xdisplay(); + ce.xclient.window = GDK_ROOT_WINDOW(); + ce.xclient.format = 32; + ce.xclient.data.l[0] = 1; /* reconfigure */ +@@ -122,7 +122,7 @@ void tree_apply() + ce.xclient.data.l[2] = 0; + ce.xclient.data.l[3] = 0; + ce.xclient.data.l[4] = 0; +- XSendEvent(GDK_DISPLAY(), GDK_ROOT_WINDOW(), FALSE, ++ XSendEvent(gdk_x11_get_default_xdisplay(), GDK_ROOT_WINDOW(), FALSE, + SubstructureNotifyMask | SubstructureRedirectMask, + &ce); + } +diff --git a/src/windows.c b/src/windows.c +index 146a99d..ed289b7 100644 +--- a/src/windows.c ++++ b/src/windows.c +@@ -50,23 +50,23 @@ void windows_setup_tab() + w = get_widget("place_active_popup"); + s = tree_get_string("placement/monitor", "Any"); + if (!g_ascii_strcasecmp(s, "Active")) +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_ACTIVE); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), PLACE_ON_ACTIVE); + else if (!g_ascii_strcasecmp(s, "Mouse")) +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_MOUSE); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), PLACE_ON_MOUSE); + else if (!g_ascii_strcasecmp(s, "Primary")) +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_PRIMARY); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), PLACE_ON_PRIMARY); + else +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_ALL); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), PLACE_ON_ALL); + g_free(s); + + w = get_widget("primary_monitor_popup"); + s = tree_get_string("placement/primaryMonitor", ""); + if (!g_ascii_strcasecmp(s, "Active")) +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_ACTIVE); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), PLACE_ON_ACTIVE); + else if (!g_ascii_strcasecmp(s, "Mouse")) +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_MOUSE); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), PLACE_ON_MOUSE); + else { +- gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_FIXED); ++ gtk_combo_box_set_active(GTK_COMBO_BOX(w), PLACE_ON_FIXED); + + w = get_widget("fixed_monitor"); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), +@@ -88,36 +88,30 @@ static void enable_stuff() + b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)); + + w = get_widget("primary_monitor_popup"); +- b = gtk_option_menu_get_history(GTK_OPTION_MENU(w)) == PLACE_ON_FIXED; ++ b = gtk_combo_box_get_active(GTK_COMBO_BOX(w)) == PLACE_ON_FIXED; + w = get_widget("fixed_monitor"); + gtk_widget_set_sensitive(w, b); + } + +-void on_primary_monitor_active_activate(GtkMenuItem *w, gpointer data) ++void on_primary_monitor_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +- tree_set_string("placement/primaryMonitor", "Active"); +- enable_stuff(); +-} +- +-void on_primary_monitor_mouse_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("placement/primaryMonitor", "Mouse"); +- enable_stuff(); +-} +- +-void on_primary_monitor_fixed_activate(GtkMenuItem *w, gpointer data) +-{ +- GtkWidget *w2; +- +- if (mapping) return; +- +- w2 = get_widget("fixed_monitor"); +- tree_set_int("placement/primaryMonitor", +- gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w2))); ++ switch (gtk_combo_box_get_active(w)) { ++ case 0: ++ { ++ GtkWidget *w2 = get_widget("fixed_monitor"); ++ tree_set_int("placement/primaryMonitor", ++ gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w2))); ++ break; ++ } ++ break; ++ case 1: ++ tree_set_string("placement/primaryMonitor", "Active"); ++ break; ++ case 2: ++ tree_set_string("placement/primaryMonitor", "Mouse"); ++ } + enable_stuff(); + } + +@@ -146,30 +140,22 @@ void on_place_mouse_toggled(GtkToggleButton *w, gpointer data) + enable_stuff(); + } + +-void on_place_active_popup_all_activate(GtkMenuItem *w, gpointer data) ++void on_place_active_popup_changed(GtkComboBox *w, gpointer data) + { + if (mapping) return; + +- tree_set_string("placement/monitor", "Any"); +-} +- +-void on_place_active_popup_active_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("placement/monitor", "Active"); +-} +- +-void on_place_active_popup_mouse_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("placement/monitor", "Mouse"); +-} +- +-void on_place_active_popup_primary_activate(GtkMenuItem *w, gpointer data) +-{ +- if (mapping) return; +- +- tree_set_string("placement/monitor", "Primary"); ++ switch (gtk_combo_box_get_active(w)) { ++ case 0: ++ tree_set_string("placement/monitor", "Primary"); ++ break; ++ case 1: ++ tree_set_string("placement/monitor", "Active"); ++ break; ++ case 2: ++ tree_set_string("placement/monitor", "Mouse"); ++ break; ++ case 3: ++ tree_set_string("placement/monitor", "Any"); ++ break; ++ } + } +-- +1.9.1 + diff --git a/obconf/switch-to-gtk3.patch b/obconf/switch-to-gtk3.patch new file mode 100644 index 0000000..510435a --- /dev/null +++ b/obconf/switch-to-gtk3.patch @@ -0,0 +1,349 @@ +From b2d08e79f8499723ae4dffe8068381dd108898cb Mon Sep 17 00:00:00 2001 +From: galtgendo +Date: Sat, 17 Aug 2013 20:55:04 +0200 +Subject: [PATCH] Switch to GTK+ 3 + +--- + configure.ac | 2 +- + src/preview.c | 180 ++++++++++++++++++++++++++++++++++++---------------------- + 2 files changed, 112 insertions(+), 70 deletions(-) + +diff --git a/configure.ac b/configure.ac +index b99620f..86df550 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -27,7 +27,7 @@ PKG_CHECK_MODULES(LIBSTARTUPNOTIFICATION, [libstartup-notification-1.0]) + AC_SUBST(LIBSTARTUPNOTIFICATION_CFLAGS) + AC_SUBST(LIBSTARTUPNOTIFICATION_LIBS) + +-PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.24.0]) ++PKG_CHECK_MODULES(GTK, [gtk+-3.0]) + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + +diff --git a/src/preview.c b/src/preview.c +index f52bb32..c00c3c0 100644 +--- a/src/preview.c ++++ b/src/preview.c +@@ -24,6 +24,8 @@ + #include + + #include ++#include ++#include + + #define PADDING 2 /* openbox does it :/ */ + +@@ -53,7 +55,10 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + RrAppearance *selected; + RrAppearance *bullet; /* for submenu */ + +- GdkPixmap *pixmap; ++ cairo_surface_t *surface; ++ GdkScreen *screen; ++ Display *xdisplay; ++ Visual *xvisual; + GdkPixbuf *pixbuf, *tmp_pixbuf; + + /* width and height of the whole menu */ +@@ -64,6 +69,10 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + gint bw, bh; + gint unused; + ++ screen = gdk_screen_get_default(); ++ xdisplay = gdk_x11_get_default_xdisplay(); ++ xvisual = gdk_x11_visual_get_xvisual(gdk_screen_get_system_visual(screen)); ++ + /* set up appearances */ + title = theme->a_menu_title; + +@@ -126,11 +135,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + + theme_pixmap_paint(title_text, bw, title_h); + +- pixmap = gdk_pixmap_foreign_new(title_text->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, +- bw, title_h); ++ surface = cairo_xlib_surface_create(xdisplay, title_text->pixmap, ++ xvisual, ++ bw, title_h); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, ++ bw, title_h); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, bw, title_h, pixbuf, x, y); + + y += title_h + theme->mbwidth; +@@ -143,11 +154,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + + /* draw background for normal entry */ + theme_pixmap_paint(background, bw, bh); +- pixmap = gdk_pixmap_foreign_new(background->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, +- bw, bh); ++ surface = cairo_xlib_surface_create(xdisplay, background->pixmap, ++ xvisual, ++ bw, bh); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, ++ bw, bh); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, bw, bh, pixbuf, x, y); + + /* draw normal entry */ +@@ -156,11 +169,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + normal->surface.parenty = PADDING; + RrMinSize(normal, &tw, &th); + theme_pixmap_paint(normal, tw, th); +- pixmap = gdk_pixmap_foreign_new(normal->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, +- tw, th); ++ surface = cairo_xlib_surface_create(xdisplay, normal->pixmap, ++ xvisual, ++ tw, th); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, ++ tw, th); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, tw, th, pixbuf, + x + PADDING, y + PADDING); + +@@ -170,11 +185,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + bullet->surface.parentx = bw - th; + bullet->surface.parenty = PADDING; + theme_pixmap_paint(bullet, th, th); +- pixmap = gdk_pixmap_foreign_new(bullet->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, +- th, th); ++ surface = cairo_xlib_surface_create(xdisplay, bullet->pixmap, ++ xvisual, ++ th, th); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, ++ th, th); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, th, th, pixbuf, + width - theme->mbwidth - th, y + PADDING); + +@@ -185,11 +202,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + background->surface.parentx = x - theme->mbwidth; + background->surface.parenty = y - theme->mbwidth; + theme_pixmap_paint(background, bw, bh); +- pixmap = gdk_pixmap_foreign_new(background->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, +- bw, bh); ++ surface = cairo_xlib_surface_create(xdisplay, background->pixmap, ++ xvisual, ++ bw, bh); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, ++ bw, bh); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, bw, bh, pixbuf, x, y); + + /* draw disabled entry */ +@@ -198,11 +217,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + disabled->surface.parentx = PADDING; + disabled->surface.parenty = PADDING; + theme_pixmap_paint(disabled, tw, th); +- pixmap = gdk_pixmap_foreign_new(disabled->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, +- tw, th); ++ surface = cairo_xlib_surface_create(xdisplay, disabled->pixmap, ++ xvisual, ++ tw, th); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, ++ tw, th); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, tw, th, pixbuf, + x + PADDING, y + PADDING); + +@@ -215,11 +236,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + background->surface.parenty = y - theme->mbwidth; + + theme_pixmap_paint(background, bw, bh); +- pixmap = gdk_pixmap_foreign_new(background->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, +- bw, bh); ++ surface = cairo_xlib_surface_create(xdisplay, background->pixmap, ++ xvisual, ++ bw, bh); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, ++ bw, bh); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, bw, bh, pixbuf, x, y); + + /* draw selected entry */ +@@ -228,11 +251,13 @@ static GdkPixbuf* preview_menu(RrTheme *theme) + selected->surface.parentx = PADDING; + selected->surface.parenty = PADDING; + theme_pixmap_paint(selected, tw, th); +- pixmap = gdk_pixmap_foreign_new(selected->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, +- tw, th); ++ surface = cairo_xlib_surface_create(xdisplay, selected->pixmap, ++ xvisual, ++ tw, th); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, ++ tw, th); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, tw, th, pixbuf, + x + PADDING, y + PADDING); + g_object_unref(tmp_pixbuf); +@@ -247,7 +272,10 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + RrAppearance *handle; + RrAppearance *a; + +- GdkPixmap *pixmap; ++ cairo_surface_t *surface; ++ GdkScreen *screen; ++ Display *xdisplay; ++ Visual *xvisual; + GdkPixbuf *pixbuf = NULL, *tmp_pixbuf = NULL; + GdkPixbuf *scratch; + +@@ -255,6 +283,10 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + + const gchar *layout; + ++ screen = gdk_screen_get_default(); ++ xdisplay = gdk_x11_get_default_xdisplay(); ++ xvisual = gdk_x11_visual_get_xvisual(gdk_screen_get_system_visual(screen)); ++ + title = focus ? theme->a_focused_title : theme->a_unfocused_title; + + /* set border */ +@@ -271,10 +303,12 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + theme_pixmap_paint(title, w, h); + + x = y = theme->fbwidth; +- pixmap = gdk_pixmap_foreign_new(title->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, w, h); ++ surface = cairo_xlib_surface_create(xdisplay, title->pixmap, ++ xvisual, ++ w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, w, h); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + /* calculate label width */ +@@ -317,10 +351,12 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + w = h = theme->button_size + 2; + + theme_pixmap_paint(a, w, h); +- pixmap = gdk_pixmap_foreign_new(a->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, w, h); ++ surface = cairo_xlib_surface_create(xdisplay, a->pixmap, ++ xvisual, ++ w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, w, h); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + x += theme->button_size + 2 + theme->paddingx + 1; +@@ -335,10 +371,12 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + h = theme->label_height; + + theme_pixmap_paint(a, w, h); +- pixmap = gdk_pixmap_foreign_new(a->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, w, h); ++ surface = cairo_xlib_surface_create(xdisplay, a->pixmap, ++ xvisual, ++ w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, w, h); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + x += w + theme->paddingx + 1; +@@ -382,12 +420,14 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + h = theme->button_size; + + theme_pixmap_paint(a, w, h); +- pixmap = gdk_pixmap_foreign_new(a->pixmap); ++ surface = cairo_xlib_surface_create(xdisplay, a->pixmap, ++ xvisual, ++ w, h); + /* use y + 1 because these buttons should be centered wrt the label + */ +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, w, h); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y + 1); + + x += theme->button_size + theme->paddingx + 1; +@@ -403,10 +443,12 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + h = theme->handle_height; + + theme_pixmap_paint(handle, w, h); +- pixmap = gdk_pixmap_foreign_new(handle->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, w, h); ++ surface = cairo_xlib_surface_create(xdisplay, handle->pixmap, ++ xvisual, ++ w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, w, h); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + /* openbox handles this drawing stuff differently (it fills the bottom +@@ -425,17 +467,17 @@ static GdkPixbuf* preview_window(RrTheme *theme, const gchar *titlelayout, + w = theme->grip_width; + + theme_pixmap_paint(a, w, h); +- pixmap = gdk_pixmap_foreign_new(a->pixmap); +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, w, h); ++ surface = cairo_xlib_surface_create(xdisplay, a->pixmap, ++ xvisual, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, w, h); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + + /* right grip */ + x = width - theme->fbwidth - theme->grip_width; +- tmp_pixbuf = gdk_pixbuf_get_from_drawable(tmp_pixbuf, pixmap, +- gdk_colormap_get_system(), +- 0, 0, 0, 0, w, h); ++ tmp_pixbuf = gdk_pixbuf_get_from_surface(surface, ++ 0, 0, w, h); ++ cairo_surface_destroy(surface); + gdk_pixbuf_copy_area(tmp_pixbuf, 0, 0, w, h, pixbuf, x, y); + } + +-- +1.9.1 + diff --git a/obmenu-generator/PKGBUILD b/obmenu-generator/PKGBUILD new file mode 100644 index 0000000..03a3ca0 --- /dev/null +++ b/obmenu-generator/PKGBUILD @@ -0,0 +1,21 @@ +# Maintainer: Jesus E. + +pkgname=obmenu-generator +pkgver=0.91 +pkgrel=1 +pkgdesc="A fast pipe/static menu generator for the Openbox Window Manager (with icons support)." +url='https://github.com/trizen/obmenu-generator' +arch=('any') +license=('GPL-3') +install=$pkgname.install +depends=('perl>=5.14.0' 'openbox' 'perl-data-dump' 'perl-gtk' 'perl-linux-desktopfiles>=0.25') +optdepends=('perl-file-desktopentry: locale support') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/trizen/${pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('9829b8cac6464eabec197d9c9c51beefad3619d42e602181d6873ddd1ed1c848a8eeed6ca6495c332fe97e82a55a05e34c42cc3a95b4ff22c9481470a9ea6ef5') + +package() { + cd "$pkgname-$pkgver" + install -Dm755 "$pkgname" "$pkgdir/usr/bin/$pkgname" + install -Dm644 "schema.pl" "$pkgdir/etc/xdg/$pkgname/schema.pl" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/obmenu-generator/obmenu-generator.install b/obmenu-generator/obmenu-generator.install new file mode 100644 index 0000000..65a80e9 --- /dev/null +++ b/obmenu-generator/obmenu-generator.install @@ -0,0 +1,7 @@ +post_install() { + echo -e "\n:: The schema file has been installed as: /etc/xdg/obmenu-generator/schema.pl\n" +} + +post_upgrade() { + post_install +} diff --git a/obmenu/PKGBUILD b/obmenu/PKGBUILD new file mode 100644 index 0000000..3abc357 --- /dev/null +++ b/obmenu/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=obmenu +pkgver=1.1.1 +pkgrel=1 +pkgdesc="Openbox menu editor" +arch=('any') +url='https://github.com/keithbowes/obmenu' +license=('GPL-2') +depends=('python' 'python-gobject' 'gtk') +makedepends=('gettext-tiny') +provides=('obmenu') +conflicts=('obmenu2') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/keithbowes/obmenu/archive/refs/tags/${pkgver}.tar.gz" + "fix-build.patch") +sha512sums=('638f4cd40b9969bca958976b3935d9f92374cb4eae28300e8a989e21162a9966d26b83b093dc7bd1e47f28a8a160dafa0f1bba0853d504e7e11f983e096dc7ec' + '7872502023ee732c8529689b8ff20c5e93f64e26a03858795165a0562ec63e1f7310110e00caaec6cc7277c8b5ed534f7b0662ebde142a72886ca5301422fec0') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make PREFIX="${pkgdir}/usr" install + + # fixing package-conflicts + rm "${pkgdir}/usr/share/glib-2.0/schemas/gschemas.compiled" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/obmenu/fix-build.patch b/obmenu/fix-build.patch new file mode 100644 index 0000000..186b6e9 --- /dev/null +++ b/obmenu/fix-build.patch @@ -0,0 +1,9 @@ +--- a/setup.py 2022-11-08 00:00:05.827519781 +0100 ++++ b/setup.py 2022-11-08 00:00:45.157751608 +0100 +@@ -18,5 +18,5 @@ + download_url='https://sourceforge.net/projects/obmenu/files/', + scripts=['obmenu', 'pipes/obm-xdg','pipes/obm-dir','pipes/obm-nav'], + py_modules=['obxml'], +- data_files=[(libdir, ['window.glade']), ("%s/icons" % libdir, ['icons/mnu16.png','icons/mnu48.png'])], ++ data_files=[(libdir, ['obmenu.glade']), ("%s/icons" % libdir, ['icons/mnu16.png','icons/mnu48.png'])], + ) diff --git a/obmenu2/PKGBUILD b/obmenu2/PKGBUILD new file mode 100644 index 0000000..28e68dc --- /dev/null +++ b/obmenu2/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=obmenu2 +pkgver=1.1 +pkgrel=1 +pkgdesc="Openbox menu editor, written in Python and GTK+3" +arch=('any') +url='https://github.com/0x10/obmenu2' +license=('Expat') +depends=('python' 'python-gobject' 'gtk') +provides=('obmenu2') +conflicts=('obmenu') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/0x10/obmenu2/archive/refs/tags/Version1_1.tar.gz" + "$pkgname.desktop" + "$pkgname.png") +sha512sums=('1c9719fcdbc6931333f68970972296b441570786e492569e660ee5a1e61692cd4de3feb7b1935a2caf72537b2cace404393f7d048733c91ba1f2f19bc7946642' + 'a2ce450718057603ab1af8c619fb9694127ec97c6c5224f91f32713274e1ef4fae60aa82798e7a079691e20da039cc75de8dab10168c7b1be9883bdcf0218455' + 'a139566db41002e57caad14aa9fcc07e9580e0f918a3a92b3672a9a237543f6a9085d9acea68ca602447e5ecb540c3bb7e0b825bd1d920eed951efa50832e11d') + +prepare() { + mv "$pkgname-Version1_1" "$pkgname-$pkgver" +} + +package() { + cd "$pkgname-$pkgver" + install -Dm755 $pkgname -t "${pkgdir}"/usr/bin + sed -i 's/python3.7/python3/g' "${pkgdir}/usr/bin/$pkgname" + + install -Dm644 ${srcdir}/$pkgname.desktop -t "${pkgdir}"/usr/share/applications + install -Dm644 ${srcdir}/$pkgname.png -t "${pkgdir}"/usr/share/pixmaps + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/obmenu2/obmenu2.desktop b/obmenu2/obmenu2.desktop new file mode 100644 index 0000000..0537e31 --- /dev/null +++ b/obmenu2/obmenu2.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Openbox Menu Manager +Keywords=openbox;menu; +Comment=Tweak Openbox Menu +Icon=obmenu2 +Exec=obmenu2 %f +Categories=Settings;DesktopSettings;GTK; +StartupNotify=true +Terminal=false + diff --git a/obmenu2/obmenu2.png b/obmenu2/obmenu2.png new file mode 100644 index 0000000000000000000000000000000000000000..1b74dcdf3b032e95007368a6e51f8b5a3f3ad2cf GIT binary patch literal 7021 zcmWkz2{csi8@_`WniyM_?8a7;T}`$a>xgWPCB`mIvXy0Q8B1izmh4L#ZCR~_mK3!BxR8B8oNQY;_>D(kpy%rW|B4RTbo=J?CnDu@UzD_~6 z7|8toxL0yHWiZ;n?)GgXX&DsZtH@kKptFo~9EX(}bBu~wWDJs|Uu?VGaeW($6qrwQ zo6U49+Q~D$d4F^vG{R$B<4BZOU73a416+hKK!(0}0C(xBfZ>y(>yWx|c_fQW<6i-m z7c69D!17%H15p9^B(UQSnPGI&AU1!weeMM}Ia8ETnl+b^sthy&`C{bl1bfIgD?kl0 z1I$6>e}=NWpd->z0U!=qn%4GqIRqG|C$N(nqhw-vUkDE|Ib9+C1;&`&zRt5&+Pj}wKQ=V+_0WvUiZM-B=4YEl`b+;FWw4Nnf z1IC+!KaJtz_AJ!Co33*b1F8?9q@|BgfC3PtT>bcnS-`Or@rM|{CpS?zK|InuX6Nz`h4G$p?bM%Nwghse4IE ze$^i~m@XAa-si^WtOeHVyJIGSj?0pH40Q|(bxJcB2u;v;#O-!~dQHBhArNK_4H6<^ zb$*z&4E9#?MbU!H7`t*sh)jxOhjyv$mUraSSg7A%v(!inO^$)c`Be>|hz=DBU9MV3 z*54_#>GLbO68Wr0P`(hg9|seDJ9z-hS?A11^>LPMU7w_<@e)7l*nBhL22POEiV$kP zi!e=(uXo8y+Jw`)p8X7M1NNEr%0=)lgJ9tCg;?K9sDD>gk)@wqE-W0wXc3Ar*rJck zE>8u4EUu9k-(K{kJzRwAhu^%;hwetuThq^Y+xp$e^e6z=Xh7*)bHb7dq;E}~k?QPdLEbd~2F?P9TNIclHFICGI<6LoZ1Fm>25y>^SQHBmzAU6fDu^_p#ee!>ACeGab6Wim8}-KV>SS}$$V^xcu=~6Qgyu_ z?B%s(B3*1BV~A)NB5h%Z-F~I-?d>U$ydofB08O1Od4;SzYF@Y&oK!Ex@|(b;r9m+J zF^tA;W(kV0P&Ivbri_2XIfdhOzbOvna>VzG0xv4=wU4ib7Qhv|%ggbm<#gA5meiM@ zu#0a8;r2hdDF%}tIbty`ky>E-y=|+hm81EV(h>N`@{v!MvS9K;>Zz`+AC6oXA7GSK z-|u#?&CSi}hdYnF{KU*ax1%&L=2-9Yj!B|*HN{_G?dPqFDpL)}%V%i?S|W90q^)Z| z3CE3^O+CuYFMU-Bh3M%uL)pQ1MG#|1od9_}^l&9JGxHV}JM|K%u%}>^NV@mt_oR!) ztu1l5&idx&fBETX8rR2g{WY$Dk>(SlcX)nm7fPSngX}a5*+&DzqDPo zb5`QvqaLBxPN8J%Y?$+}ufx_yVOOhj8UcIUcX29|=3faApp=KRnlDOA@3bN?m9W0- z54Ku#L~ws;3W3JgFI#l^oZt)B7K;oK1O6&;V_)}=_RA^`XZqtgH!_j7y@!5fjS%&7 z-r0GQystzIw8ROLV~Vua<|_PXu1Yz6vQ(qI;s@P4=~DXv=jhsQ_}s+AuUZ#|>jJE% z^t8LI)Ex^h_s2CG)>Zaz8@ji|Hr|b>(yI@V%Hc3y2;q1s(AV^qBE`Jgp)({@nrlu= zreFm%#v^9W>za-nkpg|&*%|WZ$14t&jg1X9mn02O-hr31#M+9A>WUxN{c*LzWan;x z$|4HuIwRzo-2xMd&J%=eKbc9}Df7prTuR`u#HxJ!8x-rD1o_bF`?>d30)Kxj zwaog>KtDZm&FZqUGGVH-504FGLA~~OECfuNsu?d31B>zjB_jH9~iSk?jb&FzXYy=xYdRDjo!dD4~d%$$${NXq~jY4;1AnQPz88qGV9Kd$l072SbBrB+fEJd^%gSto6W<(Qs z^oAHj2W-ad-majYC)HPoDY?JKjZ^$3b_3o44*`KoRfZAkwdUtJIpJu1_u~DadU_x{ zn__Ke7wRD77^=nlq@o9RaO6(Z`?7oUH+4#>+Ts z_d2SjCLU1CxG-%XfR+M1Uz$IO_XLE5IA zJo#F$O&y2&Th8d`%wK*Ucw|^8nKGvGx}Gim`2C!UipsTlj`MO3RniH+p19k3*k)os zK8{V_`S?lpzUoCqi$6+>J(Q?+xDUPAt**b*)6-WgDl3DA8p0lws?CzNSZp)LVUN+3 zc6N5la%G|-T)C@l+f8AgwC73mg=?c`T&tB+Q&WkRm6aaWSgary%i|$tsrE-VH*BOqNZzE8;_e`Ui9%pxOZ>ACm@6fpXzD(fOMYX3 z+K|GQcm*px=-+01u4{YZ)eQI9DdjDF9A)=hv6_X`5wq^KuHWqP=EUwUo1UGW6(YO= zlero-qis)l>~5Qm&lTs4@9**Q@-pCy^>a|n>6mJ$io;RDX9IAH@=3)ZELZ;g4J#UM z2=kDO{l!i^N4LS81CzfI)a1{#w?R%j60pd09>>vnj(?oWKbA z!$lAqX}BR1-dtbr_fSswA6oL8#2^qp$^h<67ck|I^&<#vQ#D1=P!JKW*k;Pfk+&vz zi}Hs7$MZ#UFLlf0vR~BHc(b~0viqgH%Bd{H7by*NEzQid76UDz3Y-tclp|vfs@VjhnQ(Y1kO0r@6u;DRX#&+ zGNc*4&Qu5ts*kM2&w)#KE{Yrga<~48whkW}vJ~1wX>FYnm`>*?L&PsEB_LvQY3Y$! zeWV;_V!{Tw7p>X)kN;;dOwZu?c92^LRES5Gj&gV+G5bNipFe(a%Ze}3XC2n z%h?Yp>{|3PycR}sO~^_T+^P#*5dxBP`zvXRoMTrQUikX93(a_kn@iB^hNgConW|OS_A5oP4YZ!t>{I+>JDUo2`>E6whbNNYL)JY5YRkXku-*+5-FM zK8`Y3PtO*A7R+a+iV9V%c?NUMhLvHua=Jy^>~6gEG?DnGgm!~C-Ygfuv}+`-8ecInQviL!Zeq6xw*O5bYHuH?Ho% zs?nR6tRVsfJmxw-uRIaTi| zYS{`xnwy(fWJ*qzVXk38Z~x88Ym2~%_*{_~Epsk7I`Cowhv&U}Z4Cmt#lP9Ll+Hw1 z6k$;Ug=lE-n0%6W=*3MZTdTvTC%vaq&oI&n4Lo53ywWA92pMge&T3;alj;K=i(9_v zVI^|!yz4!9fdSq0Fxl zZ*getygqUmic^u=>DP%Ky00X&L?oEcQ34(*^4`Z0gWU5ighi409ULCPCRKCKVAxfa@brP@B zB|U>T@%0i-TM;P=dlB)vE^a>C#dv=w4cxEz9fAW z=V|tBG3x32fJNc|C!CK?t3^52Ev%jhTuYwUKdOhC;3R(_RIVISE2)2!^-5g5>^q-`0PAVW3Tjyqwn9WNn7VBeGA2wiCWhN;C>-dqDdp1W~*nzxXAN%;3FY1_S(C<8#VyaH2dntZyFsa@$ zFE4NZ3a+BI_O!ukJ^~Y@x}J={JOC@(6pIimP%V^lG(ehkVjjO?>u3RD$n)e*bK~Ob z^71q;y|>E^RgJ1^|Lt>x8B8_>fTWcC&SkzGb&p?Q@NGcEx^oPiA-d;jOlo2PE~1)& zmr4L?nct_F6gkT!j@#-nc3m9#wS0L*^$nRi|ERnBIb5;v5)Gn7`J)eF;oje{_RzL0 zI4he+k_N|9eK}bOWA^j-;9Q7<^cBYJt3HLM<{47Rk=*A-B~g#tYF|mqbT4=R=a>I% zpVDeX`Ln^L7i@3NrF2#j)lb?|>-$U#kmv>E{NDj@&JX7~D!BANSu>ebm&qG2o=t~- zB?MDya1U30609VgE?&A+tXZ^EJ?7=pHVMB!-z6!)x@_0a-#eU>?QyZwj%*UcNuKOy zG#XVS?{;`R8~&Q%FJcf$_Syd%cB$q5>;u1=NP&-c{drwCr*y>>WJU(qnXy>M@~WzQ zN5tyNq<;oEu!xQwpt1c7J^?C%U4f1aW63w?Il{ml%&+ZgDB~wypWTiBg1>ifZY6l> zT91?bB@F277x>)9{mt3Ni~LW|Ka1R=`}wvd+VdN09Y8K3+w~Nx06r(|g=^KyCJ*h` zqzji)OYv&%w%*eL|MEIJt#x$z{?FzMMIqVcq6~DACJjhO!gBb2rvn3w#zjb+?Zjy1 zz|0^^-Z6B%=aypX9LqrNYuIQ5c~XIt8vIwReJ>D4iLlqwuLebCRw+LDeIzr}aYOl$|V$DG5A%RiV;9|j4S67d-!RhT8sTQ=0brB1m?|^sqkMV zX41-A6F20-?*g~~`^V8?G&8Q~xIN~vMepK?q9=b2hn?7u?+Sq;ERKsXf0|?wf(5JX zoudcGpjI%)VjC^kCNqpm^ldVmsf$6&;jfCqp{_lZWRlJ&rp;ssM-;O(!Sh!a-D$7A zs^2%-H=kz+d|J)MXn5zV8(Ff=G9?~o9kr&H8@<%-=6>5Gkw{rQmv4V^RN!@FZ$J9? z9ST`6IBPhG2MQszd??77Z9WidpY!)TJqPIt zvT24%qtVV+LHC;rdqP==`;a91tG_jtCs_enNP`ctMWnNdOpVA=*h@r53&R*&f(wJR zBcj;=&{M)U(wjthVcw&wp?Kk_6;w)W-{-_bn}Z8X+rXRwuqB&yP1OILI0Shaen3$g zsJY~($BIdZLm93>P{nWG{;iIjsJ(srHYo=E(iDNo-9p{G>Cx^r|GWWNq!51S59-DV zo&f$GNXucku-1mAnmOD2KpdKY66~1O^7(x{f*ffR&oMp^3o|O`0gVnds0aQ1wJOXV zopTw?G^hE!=jFF9u4SJA)4?+RwZR+XoQ5)@;GikbK+#jG%8RZ0L4ag(T;pSbRG)x* zNQVv^1(RKcK6%z{w9Dzj&c4qsh#kzLLsqrtBL#%PeJ9jx=vmH}H8=k$dTI6@1#t4Z zUdw3^9Q+6v&vb_FFXSkBXwv39Yq`ZX4m4km{^MG_6}g28`&UiPw;ifAVZMHYBVI{x zkZugdN~t$+6!LND?pfk6(2;eOlUHJSi~9H*HIoiC7oMQTDHt zP6YhBf=MUsOOIVlsK(!}bhlk(d;n8^x8j#&5z@81Gmg=CKf}z`Cyy>%>-_ZLgRf1O z)NAZ|SQ3}%5;Id3UC-tmH>xW&}8GXrWH|fYGL&XyO zqHdQ1m-{XMx=B!46phppgH(f8^NY6&jfKm(nhQqfl<7`(s4lGr4Pt z;>E>8YguJ}@@Ya*?QD^tRG!8UXIk4;amYgcpso-W8&K2&*82)EsS%I+J}(=HrCkRI zk~zlP;?jphWNEGcUht%(KwMD^H*{DP3@FJ&bN_zFn9s`zmcliqMo zM+{@ZLUz5T{w0VixxDt_qe90E7#aMC9lCw?PoNR7{LI5qG&JDQ``1BB6coSTgY9&Ec?T3cTQ3*}wVCWvY`G3kXfP58-4 z35QU*O9}eLQeb;9rs9qKz>~G$bOeT#D434W7~{1&pZIQ%(&x-Yw1y<{WdEK|D~AS? zbqv%dME`qs@7}#w3WXwU>*!c?gE0d}EuxEFW2B2tqYCM;sXt0()t>dy1r{z(pSaS{ z%k=2U$7bJ||2=$i823nYI_ymmuMgd;B<0k=$Kn!=x&_u)oRNtjph9LqWth|L&g~liP!g zGu9cv4t%KB@H!d7SYqfOby1H3>_z$_h)}}UNP|~GDlzV3{>p^pQmN?&`sF50NFvsS zt_Xq(f=*Vg+tZA_OshW6SQHonWEKT>MygeYwqukgqUgiV9Gk|Ycl?m zjE>EYj%EMc>&Klw&+{Y$U<9wWri%|JKX?PgBW%qmL3^4GMY5NwgdC_4UbuubG%_h1 zyoqdiuul#@Xc29Zevw|nM`bR<&r%`&P4&VsWj-zSm8ytFu9D-WbQtv>jjYF}?&Bq+ zIyajoE-3l!ZsN5a2-{+&!V~=KRHg|JCl;`GsA%-|14Di11wO?O1=1g{XoTw-5P9Sp z6q92I$(*-tC`=Qh?6!qQXMS9!4K0etQnw3P8QHW??UA`mPK|_Uw1oVLAG+dH-t{=N z|6uT3PoBm(dYbTe`MAM#)xcr&qSj=II3 zqcT@nLv@TIcyB%-Omlyk-B5dqkK^5lFR805xr4VL7dw4R-1vU8ds+6=hzcLY03eC( zyI8M(eJ|eg)MkAHwV8)Ff)EY*{~%fHZ9Jbq+TO_YW-FfU;O&j^J{jXQt~JRQ>)H+KTU2J%9$~16HCQc4yjDkPL0F2&E-5Ru0)c*i6I}W)3 literal 0 HcmV?d00001 diff --git a/ocaml/PKGBUILD b/ocaml/PKGBUILD new file mode 100644 index 0000000..5fe82a6 --- /dev/null +++ b/ocaml/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +pkgbase=ocaml +pkgname=('ocaml' 'ocaml-compiler-libs') +pkgver=4.11.1 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="A functional language with OO extensions" +arch=('i686' 'x86_64') +license=('custom:LGPL-2.1+OCaml-Special-Exception') +url="https://caml.inria.fr/" +makedepends=('ncurses') +optdepends=('ncurses: advanced ncurses features' + 'tk: advanced tk features') +source=(https://caml.inria.fr/distrib/ocaml-${pkgver%.*}/${pkgname}-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/o/ocaml/ocaml_$_debver-$_debrel.debian.tar.xz) +sha512sums=('ca34655dc22257aa48aeb48a9cf56bde177aa0f0e7f3965f334939934801a206ed5667b7ab0cc291df9e6bf1bb3251f7384f078ea5562e647fde93167ecb1e84' + '2f1a0422bc135d72a75b4830ccc0cd34736c1375c7d7d1c7375347bde3684cf2735082e364e5c02117c489296868337bc2af43e2dc849afb1eced34048be0a89') +options=('!makeflags' '!emptydirs' 'staticlibs') + +prepare() { + cd "${srcdir}/${pkgbase}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-Don-t-use-rpath.patch || true + rm -v debian/patches/0003-Use-CCLINKFLAGS-for-linking-all-executables-and-shar.patch || true + rm -v debian/patches/0008-Statically-link-lib-bfd-iberty.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgbase}-${pkgver}" + ./configure --prefix /usr --mandir /usr/share/man --disable-force-safe-string + make --debug=v world.opt +} + +package_ocaml() { + cd "${srcdir}/${pkgbase}-${pkgver}" + make DESTDIR="${pkgdir}" install + + # install license + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/" + + # remove compiler libs + rm -rf "${pkgdir}/usr/lib/ocaml/compiler-libs" +} + +package_ocaml-compiler-libs() { + pkgdesc="Several modules used internally by the OCaml compiler" + depends=('ocaml') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make DESTDIR="${pkgdir}" install + # Remove non-compiler-libs + rm -rf "${pkgdir}/usr/bin" "${pkgdir}/usr/lib/ocaml/caml" \ + "${pkgdir}/usr/lib/ocaml/ocamldoc" "${pkgdir}/usr/lib/ocaml/stublibs" \ + "${pkgdir}/usr/lib/ocaml/threads" "${pkgdir}/usr/share" + find "${pkgdir}/usr/lib/ocaml/" -maxdepth 1 -type f -delete + + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/ocrad/PKGBUILD b/ocrad/PKGBUILD new file mode 100644 index 0000000..1356e29 --- /dev/null +++ b/ocrad/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=ocrad +pkgver=0.27 +pkgrel=1 +pkgdesc='OCR (Optical Character Recognition) program based on a feature extraction method' +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/ocrad/' +license=('GPL-2') +depends=('gcc-libs') +source=("https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.lz") +sha512sums=('2a4731e0e26eefe6d37b08859c4d3cc2b54180411b0f846f7b7e873b9da5b4596ca3c6042ee42284a07aadfeb96d953dce3e95ce2410e48624d1b6020750539c') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr CXXFLAGS="$CXXFLAGS" LDFLAGS="$LDFLAGS" + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ode/PKGBUILD b/ode/PKGBUILD new file mode 100644 index 0000000..987204a --- /dev/null +++ b/ode/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=ode +pkgver=0.16.2 +pkgrel=1 +pkgdesc='High performance library for simulating rigid body dynamics' +arch=('i686' 'x86_64') +url='https://bitbucket.org/odedevs/ode/' +license=('Original-BSD') +source=("https://bitbucket.org/odedevs/$pkgname/downloads/$pkgname-$pkgver.tar.gz") +sha512sums=('801bc80c3e14e82c355316071d130dea2eb30428a957fcc1e3e2702e974387b327621a6f9349b72ed2f84b0e20426756b34d41c94b63a1b6b8e690c5de598911') + +prepare() { + cd $pkgname-$pkgver + ./bootstrap +} + +build() { + cd $pkgname-$pkgver + export CXXFLAGS='-w -Ofast -fpermissive' + ./configure \ + --prefix=/usr \ + --enable-shared \ + --enable-double-precision \ + --enable-libccd \ + --enable-ou \ + --enable-silent-rules + make +} + +package() { + cd $pkgname-$pkgver + DESTDIR="$pkgdir" make install + install -Dm644 LICENSE-BSD.TXT -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ogmtools/PKGBUILD b/ogmtools/PKGBUILD new file mode 100644 index 0000000..f593b11 --- /dev/null +++ b/ogmtools/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=ogmtools +pkgver=1.5 +_debver=1.5 +_debrel=4 +pkgrel=1 +pkgdesc="Information, extraction or creation for OGG media streams" +arch=('i686' 'x86_64') +url='https://www.bunkus.org/videotools/ogmtools' +license=('GPL-2') +depends=('libvorbis' 'libdvdread' 'gcc-libs') +makedepends=('quilt') +source=("https://www.bunkus.org/videotools/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/o/ogmtools/ogmtools_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('1ed573531f9783c491a01e419667229b28540ad48c08b46131ae09ce3a4d771e3a54cde5dd09c585c0b85952e82abb3d1353864dc5223736f6eb6480158badee' + '5e78395c1109db927fbe04b70e4b693ef907a78cd8eea4b80c0a31c047b8dd5b4142597b4d64e95b4d891a5603faa3636e36cc4c7a0b04a6e71ecd38e895b26d') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/oksh/PKGBUILD b/oksh/PKGBUILD new file mode 100644 index 0000000..0970961 --- /dev/null +++ b/oksh/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=oksh +pkgver=7.3 +pkgrel=1 +pkgdesc="Ported version of ksh from OpenBSD" +url='https://github.com/ibara/oksh/' +license=('Public-Domain' 'ISC' 'Modified-BSD') +arch=('i686' 'x86_64') +backup=(etc/ksh.kshrc) +install=$pkgname.install +depends=('glibc' 'ncurses') +source=(https://github.com/ibara/oksh/releases/download/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz) +sha512sums=('4e7cf2914ed16d14edbff4ba1a96db196ecde34171e77603e68ae8a81b3675ac61c2ae95da85c017566655b6a5a7ad38191526e5bcedf927cdbdc1f6bc76c967') + +build() { +cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --bindir=/bin + sed -n '/Copyright/,/PERFORMANCE/p' strtonum.c > ISC-LICENSE + sed -n '/Copyright/,/SUCH DAMAGE./p' vis.c > BSD-LICENSE + cat LEGAL > PUBLIC_DOMAIN-LICENSE + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" install + install -Dm644 ksh.kshrc "${pkgdir}/etc/ksh.kshrc" + install -Dm644 PUBLIC_DOMAIN-LICENSE ISC-LICENSE BSD-LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/oksh/oksh.install b/oksh/oksh.install new file mode 100644 index 0000000..af87700 --- /dev/null +++ b/oksh/oksh.install @@ -0,0 +1,13 @@ +post_install() { + echo "Adding '/bin/oksh' to '/etc/shells'..." + grep -qe '^/bin/oksh$' etc/shells || echo '/bin/oksh' >> etc/shells +} + +post_upgrade() { + post_install +} + +pre_remove() { + echo "Removing '/bin/oksh' from '/etc/shells'..." + sed -i '\|^/bin/oksh$|d' etc/shells +} diff --git a/onak/PKGBUILD b/onak/PKGBUILD new file mode 100644 index 0000000..c1df308 --- /dev/null +++ b/onak/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=onak +pkgver=0.6.3 +pkgrel=1 +pkgdesc="Minimalistic, free and libre OpenPGP Key Server" +arch=('i686' 'x86_64') +url='https://www.earth.li/projectpurple/progs/onak.html' +license=('GPL-2') +depends=('gmp' 'db' 'nettle' 'curl' 'postgresql-libs') +makedepends=('cmake') +optdepends=('postgresql: alternative database-backend') +backup=('etc/onak.ini') +install=$pkgname.install +source=("https://github.com/u1f35c/onak/archive/refs/tags/${pkgname}-${pkgver}.tar.gz" + "fix-postgresql-build.patch" + "$pkgname.logrotate.d" + "onak-keyd.initd" + "onak-keyd.confd" + "onak-keyd.run" + "onak-keyd.conf") +sha512sums=('3f7c0c10637dfcb731c4f974821956732eb225c154cd2dca636c35a7b435415ae960c74308708732bb2253602778aee76d98b5883804aed131ffc97af7ad1994' + 'be2e64f7de41e69c68620df90c2bead13e7c51addb614c9192e5f6215c68b762d6a50245defdff2ac6c8c46a35adb66c083a80a817f143055ef34d8446656c23' + '65d8ba25ce7b83f903ce868fc0e0e0b0a4e0940a80c90ca95b290c5b9468db52907a1a65c72f20da6c54713ea4017570bcb94012286a1d1a0de475b065f128a4' + '22a2ff82c813e42bc78e48b96c512e26e470ff7ffe4a82b9cfbb2f24d794e267ae38497e86406735badffd415d563d5f1865bdbdc76052e23ab518c2aec3caa3' + '1d9643c18fc4fef811efdc49a357b5ee3b10fe7addf24bd63dfc7818bda310adacfc9455d42bca1c53bac1f5b7a1a2bf0698e89d1d69864ea9456abd95b86a61' + 'c4761aed6c71f18591239824fa75178a61ff99ec4da3c6696c8d65270abfc6db2be5d51862730aa2e6a9c9bb9dfcba6315f66deb0c986d9d8ed1b5f5d273bc1e' + '24479ccebb13774adf6c16bc5ccd989a93bd4e25aa0f20e852b89785b4eaf9a3d73902ac1898665c9d2c297f141ee7c164303451c154c84f605958bd778bf588') + +prepare() { + mv "${pkgname}-${pkgname}-${pkgver}" "${pkgname}-${pkgver}" + cd "$pkgname-$pkgver" + patch -Np1 -i ${srcdir}/fix-postgresql-build.patch +} + +build() { + cmake \ + -S "$pkgname-$pkgver" \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_SYSCONFDIR=/etc + make -C build +} + +package() { + make DESTDIR="$pkgdir/" -C build install + + # further data and binaries + install -Dm644 "$srcdir/$pkgname.logrotate.d" "$pkgdir/etc/logrotate.d/$pkgname" + install -Dm755 "$srcdir/build/cgi/"{add,gpgwww,hashquery,lookup} -t "${pkgdir}/usr/lib/cgi-bin/pks/" + + # initial empty folder for database-storage + install -d "$pkgdir/var/lib/$pkgname" + + # services + install -Dm755 "$srcdir"/onak-keyd.initd "$pkgdir"/etc/init.d/onak-keyd + install -Dm644 "$srcdir"/onak-keyd.confd "$pkgdir"/etc/conf.d/onak-keyd + install -Dm755 "$srcdir"/onak-keyd.run "$pkgdir"/etc/sv/onak-keyd/run + install -Dm644 "$srcdir"/onak-keyd.conf "$pkgdir"/etc/sv/onak-keyd/conf + + # license + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/onak/fix-postgresql-build.patch b/onak/fix-postgresql-build.patch new file mode 100644 index 0000000..28e1aad --- /dev/null +++ b/onak/fix-postgresql-build.patch @@ -0,0 +1,13 @@ +--- a/keydb/keydb_pg.c 2023-09-26 21:52:47.000000000 +0200 ++++ b/keydb/keydb_pg.c 2023-10-26 02:12:48.150006544 +0200 +@@ -16,8 +16,8 @@ + * this program. If not, see . + */ + +-#include +-#include ++#include ++#include + + #include + #include diff --git a/onak/onak-keyd.conf b/onak/onak-keyd.conf new file mode 100644 index 0000000..e61326f --- /dev/null +++ b/onak/onak-keyd.conf @@ -0,0 +1,9 @@ +# Copyright 2023 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +# Required daemon settings +ONAKKEYD_DAEMON_CMD="/usr/sbin/keyd" +ONAKKEYD_SOCKDIR="/var/run/onak" +ONAKKEYD_DBDIR="/var/lib/onak" +ONAKKEYD_DAEMON_UID="onak" +ONAKKEYD_DAEMON_GID="adm" diff --git a/onak/onak-keyd.confd b/onak/onak-keyd.confd new file mode 100644 index 0000000..30f4989 --- /dev/null +++ b/onak/onak-keyd.confd @@ -0,0 +1,8 @@ +# Copyright 2023 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +# Required daemon settings +ONAKKEYD_DAEMON_CMD="/usr/sbin/keyd" +ONAKKEYD_SOCKDIR="/var/run/onak" +ONAKKEYD_DAEMON_UID="onak" +ONAKKEYD_DAEMON_GID="adm" diff --git a/onak/onak-keyd.initd b/onak/onak-keyd.initd new file mode 100644 index 0000000..7ad5f79 --- /dev/null +++ b/onak/onak-keyd.initd @@ -0,0 +1,39 @@ +#!/sbin/openrc-run +# Copyright 2023 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +depend() { + need net localmount + after logger firewall postgresql +} + +checkconfig() { + if ! grep -q -E '^use_keyd=*(true|yes|1)$' /etc/onak.ini; then + eerror "You need a to enable keyd-support within your configuration" + return 1 + fi +} + +start_pre() { + checkconfig || return 1 + + # create needed directory if necessary + if [ ! -d ${ONAKKEYD_SOCKDIR} ] ; then + checkpath -q -d -o ${ONAKKEYD_DAEMON_UID}:${ONAKKEYD_DAEMON_GID} -m 0775 ${ONAKKEYD_SOCKDIR} || return 1 + fi +} + +start() { + ebegin "Starting onak-keyserver" + start-stop-daemon \ + --start \ + --user "${ONAKKEYD_DAEMON_UID}:${ONAKKEYD_DAEMON_GID}" \ + --exec ${ONAKKEYD_DAEMON_CMD} + eend $? +} + +stop() { + ebegin "Stopping onak-keyserver" + keydctl quit + eend $? +} diff --git a/onak/onak-keyd.run b/onak/onak-keyd.run new file mode 100644 index 0000000..e0bfdd8 --- /dev/null +++ b/onak/onak-keyd.run @@ -0,0 +1,11 @@ +#!/bin/sh +[ -r conf ] && . ./conf +if ! grep -q -E '^use_keyd=*(true|yes|1)$' /etc/onak.ini; then + exit 1 +else + mkdir -p ${ONAKKEYD_SOCKDIR} + chown ${ONAKKEYD_DAEMON_UID}:${ONAKKEYD_DAEMON_GID} ${ONAKKEYD_SOCKDIR} + chown ${ONAKKEYD_DAEMON_UID}:${ONAKKEYD_DAEMON_GID} ${ONAKKEYD_DBDIR} + chpst -u ${ONAKKEYD_DAEMON_UID}:${ONAKKEYD_DAEMON_GID} ${ONAKKEYD_DAEMON_CMD} + exec pause +fi diff --git a/onak/onak.install b/onak/onak.install new file mode 100644 index 0000000..11558d4 --- /dev/null +++ b/onak/onak.install @@ -0,0 +1,19 @@ +post_install() { + if ! getent passwd onak &>/dev/null; then + useradd -r -d /var/lib/onak -g adm -s /bin/false onak + fi + + chown onak:adm /var/lib/onak +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + if getent passwd onak &>/dev/null; then + userdel onak >/dev/null + fi + + rm -rf /var/lib/onak +} diff --git a/onak/onak.logrotate.d b/onak/onak.logrotate.d new file mode 100644 index 0000000..7c7a96a --- /dev/null +++ b/onak/onak.logrotate.d @@ -0,0 +1,10 @@ +/var/log/onak.log +{ + create 644 onak adm + missingok + notifempty + rotate 4 + weekly + compress + delaycompress +} diff --git a/oniguruma/PKGBUILD b/oniguruma/PKGBUILD new file mode 100644 index 0000000..04ac486 --- /dev/null +++ b/oniguruma/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=oniguruma +pkgver=6.9.6 +_debver=$pkgver +_debrel=1.1 +pkgrel=2 +pkgdesc="A regular expressions library" +arch=('i686' 'x86_64') +url='https://github.com/kkos/oniguruma' +license=('Simplified-BSD') +makedepends=('quilt') +source=("https://github.com/kkos/oniguruma/releases/download/v$pkgver/onig-${pkgver/_/-}.tar.gz" + "https://deb.debian.org/debian/pool/main/libo/libonig/libonig_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('eb44f70347f49945fe054ad65370dbfd6b30b2e8442fb90b6c72413b7f9a8cb77ca98d1a4714d1d32b763551430436cc0175c0efaf2c73268363a9b6ecb5e3bc' + 'a42e3bc6cc9ae061817553b659a2acbbdd98a424240f2d685cbc9b3300083765b69c003cc2ca65f7edde830f512d4c09ffc45239ddc9b22a74caf2ec837a97cf') + +prepare() { + cd "$srcdir"/onig-${pkgver%_rev1} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/onig-${pkgver%_rev1} + + ./configure \ + --prefix=/usr \ + --enable-posix-api + make +} + +package() { + cd "$srcdir"/onig-${pkgver%_rev1} + + make DESTDIR="$pkgdir" install + install -dm755 "$pkgdir"/usr/share/doc + cp -r doc "$pkgdir"/usr/share/doc/$pkgname + for licfile in COPYING INSTALL; do + install -Dm644 $licfile "$pkgdir"/usr/share/licenses/$pkgname/$licfile + done +} diff --git a/onioncat/PKGBUILD b/onioncat/PKGBUILD new file mode 100644 index 0000000..e7f21b2 --- /dev/null +++ b/onioncat/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=onioncat +pkgver=4.11.0 +pkgrel=1 +pkgdesc="OnionCat is a VPN-adapter, which uses Tor or I2P as its transport." +arch=('i686' 'x86_64') +url='https://github.com/rahra/onioncat' +license=('GPL-3') +depends=('tor' 'net-tools') +optdepends=('i2pd: alternative transport-layer') +install=$pkgname.install +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/rahra/onioncat/archive/refs/tags/v${pkgver}.tar.gz" + "ocat.initd" + "ocat.confd") +sha512sums=('5dc6538f343749530cbd2f29bdd6ba6bc1e921a4fae6f5c783dd2bc1d045ce304639acc5cea6c1946b7c938ce58b732c01ae1a00998f5438a414b4c623dfd0bf' + 'b1e4149cbebfb2dfde552cd736ac2998f8b40ca1275cc81ea70c7f69843398073ab8e3bcefdd21545b96997544f0f0f148bd448600c01528172ed274b6742189' + '360132797747900b2560a987a0d032045d8e2f1482bb1f74fb3a7a0219654cb5695afda2cfc4862d10d9f879417044a1f795284f3e1b865e6ba158519a71e9c2') + +prepare() { + cd "${pkgname}-${pkgver}" + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir/" install + + # services + install -Dm644 $srcdir/ocat.confd "$pkgdir"/etc/conf.d/ocat + install -Dm755 $srcdir/ocat.initd "$pkgdir"/etc/init.d/ocat + + # license + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/onioncat/ocat.confd b/onioncat/ocat.confd new file mode 100644 index 0000000..4ced74a --- /dev/null +++ b/onioncat/ocat.confd @@ -0,0 +1,11 @@ +# pid file destination +PIDFILE=/var/run/ocat.pid + +# log file destination +LOGFILE=/var/log/ocatd.log + +# onioncat hidden service hostname file +OCAT_HOSTNAME_FILE=/var/lib/tor/onioncat/hostname + +# options +OCAT_OPTS="-C -4 -L \"${LOGFILE}\" $(cat ${OCAT_HOSTNAME_FILE})" diff --git a/onioncat/ocat.initd b/onioncat/ocat.initd new file mode 100644 index 0000000..cbf78fb --- /dev/null +++ b/onioncat/ocat.initd @@ -0,0 +1,25 @@ +#!/sbin/openrc-run + +depend() { + need net tor +} + +start() { + ebegin "Starting Ocat daemon..." + start-stop-daemon \ + --start \ + --pidfile "${PIDFILE}" \ + --quiet \ + --exec /usr/bin/ocat -- -P "${PIDFILE}" ${OCAT_OPTS} >/dev/null 2>&1 + eend $? +} + +stop() { + ebegin "Stopping Ocat daemon..." + start-stop-daemon \ + --stop \ + --quiet \ + --pidfile "${PIDFILE}" + eend $? +} + diff --git a/onioncat/onioncat.install b/onioncat/onioncat.install new file mode 100644 index 0000000..66cd005 --- /dev/null +++ b/onioncat/onioncat.install @@ -0,0 +1,19 @@ +post_install() { + # working on folders + if [ ! -d '/var/lib/tor/onioncat' ]; then + mkdir -p /var/lib/tor/onioncat + fi + + # show message + echo "See https://github.com/rahra/onioncat" + echo "for configuration guide." +} + +post_upgrade() { + post_install +} + +post_remove() { + # working on folders + rm -rf /var/lib/tor/onioncat +} diff --git a/oolite/PKGBUILD b/oolite/PKGBUILD new file mode 100644 index 0000000..9b5bc54 --- /dev/null +++ b/oolite/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=oolite +pkgver=1.90 +pkgrel=2 +pkgdesc="A free and libre space-sim for travellers, traders, pirates and more" +arch=('i686' 'x86_64') +url='https://github.com/OoliteProject/oolite' +license=('GPL-2' 'Modified-BSD' 'zlib' 'CC-BY-SA-3.0') +depends=('espeak' 'gnustep-base' 'sdl_mixer' 'sdl_image' 'glu' 'nspr' 'openal') +makedepends=('gnustep-make' 'curl' 'zip' 'mesa' 'gcc-objc') +groups=('games') +source=("https://github.com/OoliteProject/oolite/releases/download/$pkgver/oolite-source-$pkgver.tar.bz2" + "oolite") +sha512sums=('8a4900087d43a9e7b0b061096c5981cc1d9de65a70ed16d6b33cd1a5a56e2f6b043a10a1e2088013da6352778617273134f324f825ae98c23f73bfb15cea7dab' + 'e94bef74f1d8192a7b0fb9dc1c3ce17f1b0772ecce2ac1d77452efa7fb894eea83f95ef65154efc2a73eefc8bc0298c91cb609d1b587507decaae20e3411c3a6') + +prepare() { + cd "oolite-source-$pkgver" + + # workaround for missing textures and fonts + rm deps/Linux-deps/include/png.h + rm deps/Linux-deps/include/pngconf.h +} + +build() { + cd "oolite-source-$pkgver" + source /usr/share/GNUstep/Makefiles/GNUstep.sh + make -f Makefile release +} + +package() { + cd "oolite-source-$pkgver" + + mkdir -p ${pkgdir}/usr/games + mkdir -p ${pkgdir}/usr/share/{games/oolite,applications,pixmaps,doc/oolite} + + cp -r oolite.app/* ${pkgdir}/usr/share/games/oolite/ + + install -Dm755 ${srcdir}/oolite ${pkgdir}/usr/games/oolite + install -Dm644 installers/FreeDesktop/oolite-icon.png ${pkgdir}/usr/share/pixmaps/oolite-icon.png + install -Dm644 installers/FreeDesktop/oolite.desktop ${pkgdir}/usr/share/applications/oolite.desktop + install -Dm644 Doc/AdviceForNewCommanders.pdf Doc/OoliteReadMe.pdf Doc/OoliteRS.pdf ${pkgdir}/usr/share/doc/oolite/ + + install -Dm644 Doc/LICENSE.TXT -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/oolite/oolite b/oolite/oolite new file mode 100644 index 0000000..2462ad0 --- /dev/null +++ b/oolite/oolite @@ -0,0 +1,9 @@ +#!/bin/bash +source /usr/share/GNUstep/Makefiles/GNUstep.sh +if [ ! -d ~/.Oolite/AddOns ]; then + mkdir -p ~/.Oolite/AddOns +fi +if [ ! -d ~/~/GNUstep/Library/ApplicationSupport/Oolite/ManagedAddOns ]; then + mkdir -p ~/GNUstep/Library/ApplicationSupport/Oolite/ManagedAddOns +fi +/usr/share/games/oolite/oolite "$@" diff --git a/openal/PKGBUILD b/openal/PKGBUILD new file mode 100644 index 0000000..c458785 --- /dev/null +++ b/openal/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgbase=openal +pkgname=(openal openal-examples) +pkgver=1.19.1 +pkgrel=6 +pkgdesc="Cross-platform 3D audio library, software implementation" +arch=(i686 x86_64) +url="https://github.com/kcat/openal-soft" +license=(LGPL-2) +makedepends=(libsndio fluidsynth qt-base sdl2 sdl_sound ffmpeg + cmake ninja) +source=("https://github.com/kcat/openal-soft/archive/refs/tags/openal-soft-$pkgver.tar.gz" + 'alsoft_hyperbolabsd.conf' 'alsoft_gnu+linux.conf') +sha512sums=('4a64cc90ddeaa3773610b0bc8023d231100f3396f3fc5bd079db81600f80a789c75e6af03391bfc78a903c96bb71f8052a9ae802ea81422028e5b12b7eb6c47b' + '8f4dfe426317003313a925ec2de095b01685d926bd333da5e5b3bb305c9ccc7b838ffe40646c83f7b4e5abd9d9f67165c488fc3bf9b106784dbb8e6c270ff00d' + 'a55c887d380f80f8fed67862f3c46cd395a6415ba3d1153b5d82e8b367848670a80925fbb1b301588baffc9620de00b6d52d08f2228527ad094ca453062b82b2') + +prepare() { + mkdir build examples +} + +build() { + cd build + cmake ../$pkgbase-soft-$pkgbase-soft-$pkgver -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DALSOFT_REQUIRE_SNDIO=On + ninja +} + +package_openal() { + depends=(libsndio) + optdepends=('qt-base: alsoft-config GUI Configurator' + 'fluidsynth: MIDI rendering' + 'sndio: sndio audio backend') + install=openal.install + backup=(etc/openal/alsoft.conf) + + DESTDIR="$pkgdir" ninja -C build install + install -dm755 "$pkgdir/usr/share/doc/openal" + install -Dm644 $pkgbase-soft-$pkgbase-soft-$pkgver/docs/* "$pkgdir/usr/share/doc/openal" + install -Dm644 $pkgbase-soft-$pkgbase-soft-$pkgver/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + + if [ "$(uname -s)" = 'HyperbolaBSD' ]; then + install -Dm644 "$srcdir/alsoft_hyperbolabsd.conf" "$pkgdir/etc/openal/alsoft.conf" + elif [ "$(uname -o)" = 'GNU/Linux' ]; then + install -Dm644 "$srcdir/alsoft_gnu+linux.conf" "$pkgdir/etc/openal/alsoft.conf" + fi + + ### Split openal-examples + mv "$pkgdir"/usr/bin/al{ffplay,hrtf,latency,loopback,multireverb,play,record,reverb,stream,tonegen} examples/ +} + +package_openal-examples() { + pkgdesc+=" (example programs)" + depends=("openal=$pkgver-$pkgrel" sdl2 sdl_sound ffmpeg) + + mkdir -p "$pkgdir/usr/bin" + mv examples/* "$pkgdir/usr/bin/" + install -Dm644 $pkgbase-soft-$pkgbase-soft-$pkgver/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/openal/alsoft_gnu+linux.conf b/openal/alsoft_gnu+linux.conf new file mode 100644 index 0000000..42fce0b --- /dev/null +++ b/openal/alsoft_gnu+linux.conf @@ -0,0 +1,11 @@ +# For more information, read the /usr/share/openal/alsoftrc.sample file +[general] +drivers = sndio,alsa + +[alsa] +device = hw:0 +capture = hw:0 + +[sndio] +device = snd/0 +capture = snd/0 diff --git a/openal/alsoft_hyperbolabsd.conf b/openal/alsoft_hyperbolabsd.conf new file mode 100644 index 0000000..abbac8c --- /dev/null +++ b/openal/alsoft_hyperbolabsd.conf @@ -0,0 +1,10 @@ +# For more information, read the /usr/share/openal/alsoftrc.sample file +[general] +drivers = sndio,solaris + +[solaris] +device = /dev/audio0 + +[sndio] +device = snd/0 +capture = snd/0 diff --git a/openal/openal.install b/openal/openal.install new file mode 100644 index 0000000..1172618 --- /dev/null +++ b/openal/openal.install @@ -0,0 +1,8 @@ +post_install() { + echo ">> Please adjust the drivers within the configuration when you have issues." + echo ">> You can find the corresponding file under: /etc/openal/alsoft.conf" +} + +post_upgrade() { + post_install +} diff --git a/openarena/PKGBUILD b/openarena/PKGBUILD new file mode 100644 index 0000000..2a20e43 --- /dev/null +++ b/openarena/PKGBUILD @@ -0,0 +1,84 @@ +# Maintainer: Jesus E. + +pkgname=openarena +pkgver=0.8.8 +pkgrel=3 +pkgdesc="A free and libre multiplayer first person shooter" +arch=('i686' 'x86_64') +url='https://openarena.ws/' +license=('GPL-2') +depends=('sdl' 'libvorbis' 'curl' 'libxmp' 'glu' 'openal') +makedepends=('make' 'grep' 'zip') +groups=('games') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-engine-${pkgver}.tar.gz"{,.sig} + "https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-gamecode-${pkgver}.tar.gz"{,.sig} + "https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-data.7z"{,.sig} + "openarena-runner.sh" + "openarena.png" + "openarena-server.png" + "openarena.desktop" + "openarena-server.desktop") +sha512sums=('921893aa253a86074a7a2ee9ea525535fde9cd865be9c02f784dce59bf591aa0c6abdf8d6f13e87b922b1b470d8c801fdc7893ff194e547f4a72cc8b75c2f679' + 'SKIP' + '77b9661ba0275eb8eebbfd762b2248fe00454abb62f7b369bea841a0fc08854d0d1e334e7671479005fa61c0d2fb4ad2065b561b4aff47b451e12cd562fb5c48' + 'SKIP' + 'a33131e31e2cc63e424806d32bba0a65058911c028cdd350daa39ae0de1d8e9f1f98bde40e2c25b435e51f56cb673e64404341a4de04004d0d6c517ef8bf6af8' + 'SKIP' + '43d0db8024b23d873894aaab0f299f796655576d978e4682debdf62a7aeee12291171d39f1343ef0ce7a4284b671e97b5c134815ce2f7ac224a52be2797726c0' + 'ef68f8eb6251c3424464702ff894a6b88b473a3f4c1512af613125f5e5a7124f268490a9f6042095ff5bb807817e1f302c80d21987a2ed178e680f993d70b6f1' + '9e8c860fe8e9a6fefa9839907df6e74f11564daaa2bf12b4c261dec34d65917e7110a41aa7777f16d3842c8371b9e960468d75c439d8b815454feeb8c01ed6e6' + '5acd934f451559ad68b76a4de4b132b9ead9542dd078df7c7489ce2b2774557d81c6405622e8090ced2ace5f05165af1ed5dee8674d3fef725cd633727c92538' + '426734a1517802b00b062006fcac4e321b4bf2fa8f3a3f7670a11ae62cf6cdd417bd158d0d613c0017e44e5a9528d72ef77e383a4fda2b230f0cc0f8ef9185d1') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +# enumerate build-architecture +buildarch=$(uname -m) +if [[ $CARCH = "i686" ]]; then + buildarch="x86" +fi + +build() { + cd "${srcdir}/${pkgname}-engine-${pkgver}" + make USE_MUMBLE=0 USE_VOIP=0 + + cd "${srcdir}/${pkgname}-gamecode-${pkgver}" + make USE_MUMBLE=0 USE_VOIP=0 + cp "./build/release-linux-$buildarch/oax/vm/"{cgame,qagame,ui}.qvm "${srcdir}/${pkgname}-data/pak0/vm" + cp "./build/release-linux-$buildarch/missionpack/vm/"{cgame,qagame,ui}.qvm "${srcdir}/${pkgname}-data/mp-pak0/vm" + + cd "${srcdir}/${pkgname}-data" + ./buildpk3nix.sh + ./buildmppk3nx.sh +} + +package() { + # create directories + install -dm755 "${pkgdir}/usr/games" "${pkgdir}/usr/share/games/" "$pkgdir"/usr/share/pixmaps/ "$pkgdir"/usr/share/applications/ + + # copy data + install -d "${pkgdir}/usr/share/games/openarena" + install -d "${pkgdir}/usr/share/games/openarena/"{baseoa,missionpack} + cp "${srcdir}/${pkgname}-data/"pak*.pk3 "${pkgdir}/usr/share/games/openarena/baseoa" + cp "${srcdir}/${pkgname}-data/"mp-pak*.pk3 "${pkgdir}/usr/share/games/openarena/missionpack" + find "${pkgdir}/usr/share/games/openarena" -type f -exec chmod 644 {} \; + find "${pkgdir}/usr/share/games/openarena" -type d -exec chmod 755 {} \; + + # copy compiled executables + install -Dm 755 "${srcdir}"/${pkgname}-engine-${pkgver}/build/release-linux-$buildarch/o*.$buildarch "${pkgdir}/usr/share/games/openarena" + + # create application-shortcuts + install -Dm 644 "${srcdir}"/openarena{,-server}.png "$pkgdir"/usr/share/pixmaps/ + install -Dm 644 "${srcdir}"/openarena{,-server}.desktop "$pkgdir"/usr/share/applications/ + + # create bash-script for symbolic links + install -Dm 755 "${srcdir}"/openarena-runner.sh "$pkgdir"/usr/share/games/openarena/openarena-runner.sh + + # create symbolic links + ln -s /usr/share/games/openarena/openarena-runner.sh "${pkgdir}/usr/games/openarena" + ln -s /usr/share/games/openarena/openarena-runner.sh "${pkgdir}/usr/games/openarena-server" + ln -s /usr/share/games/openarena/openarena-runner.sh "${pkgdir}/usr/games/oa_ded" + + # licenses + install -Dm 644 "${srcdir}/${pkgname}-engine-${pkgver}/COPYING.txt" -t "${pkgdir}/usr/share/licenses/$pkgname" + install -Dm 644 "${srcdir}/${pkgname}-data/COPYING" "${pkgdir}/usr/share/licenses/$pkgname/COPYING-data" +} diff --git a/openarena/openarena-runner.sh b/openarena/openarena-runner.sh new file mode 100644 index 0000000..06f3222 --- /dev/null +++ b/openarena/openarena-runner.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +arch=$(uname -m) +if [[ $arch = "i686" ]]; then + arch="x86" +fi +file=`basename "$0"` +if [ "$file" == 'openarena' ]; then + file='openarena' +else + file='oa_ded' +fi +cd '/usr/share/games/openarena' +"./${file}.${arch}" $@ diff --git a/openarena/openarena-server.desktop b/openarena/openarena-server.desktop new file mode 100644 index 0000000..47bc786 --- /dev/null +++ b/openarena/openarena-server.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=OpenArena Server +Exec=openarena-server +Icon=openarena-server +Type=Application +Terminal=true +Comment=Run an OpenArena server +Categories=Network; diff --git a/openarena/openarena-server.png b/openarena/openarena-server.png new file mode 100644 index 0000000000000000000000000000000000000000..55c5177f51340d8ea01d3e6f1981331188fb45db GIT binary patch literal 2302 zcmV5|Ch^U?bXb&_NwrALF~W9UoLm z>(s|gYwMu2ii+A&ZELF{!y}PE5KRbRf&qElgv1b%aPz*ouXFbP`Xd5PYAbocIFmJV z{+x5x`qp>$UVD9eA3+k|XVdUKw;=*U1cnFgkK8i#GcK3Q`*b+B*- zVhRlh5QUb{V$s z3xKZ6Qv;NtXg`{S)|M&oA4q{GEE4Vt8%%b>a!oZR#hyT9N)v9%s|28&%ku7PNlxs9 zq*m?sCPlAVvkrg`_o*@PRE84x}BP#;eeJd^#FRXTn=G0l|}9h@D!D=(J)4hkpe?T`B=9&V70v z8n@m8SOc)lD8krej5wm*rbD_n>t3*b|zb|=a zn5`2~vnLCl&$9qS$Ef9RV&t41|CPfx3c^bF$G5WXu@C6l^aPb>bYBZgKKkRoGbYll z>TA=?lV46_RA?7BKKpW?i&c4Id2Z8Mo_Xwjb`{-B(sKUU*Dtj>=wAC5dfr@1<&Np+ z$`HbwaF<$;UP&^TWDr+oSMt`WRo?{e8xeO5-ETfc_v3Got+8JdP$;p6o3boXpog@N=z>pptfk!OLk^sLW)a_Nj!96 zRY*uFL&D@n9(*r%pyZ1XsRb}gr)lV_8>1O=#DL`A(Kuc-97<-&lyU@zHeFoTY|UzF zdYRsEcq;s@qXz`bkYVsP#%a{YJ5m1NuVHqD_dDo`!lf|Vh6OTLZ12$@q@4D{?P#wF zM{8aG)v5GEpyJ{6)W$j?%~P4&GP+B?nzviE)uoZt`dD0oZ{1eFm5?+8le_QvBP9JJ zNJ3FgtFZN{odUd2tK{=C|^vgQl!0?iR=E871?UTLtD5iypxX% zQ^v_B-zKSdzaZTs`BCm(E{9@@AmfCRH_WdNYUwmMbnV)f* z@j`L3AoHQPYsJTs-l%UhGJ?_*8Te%VX5M1=a-vWwRL~nD=#8=}|D?D!=1p>%>+jm( zdH0#;cy#ye{OWWTTkFRwvol6YUs&LYpKM`PkYstuDw0qY#WyoulboxYM&-U$B*EGv zOL)D_@NRzLH%j`#l-U_0+v+E%y3^UJV#ghxcb|RU{N)`xRbGlSFv-#GiLxkfh@i3y zGEperZugp{&%7d~C!$9uzBp87%aL69_UdBh2?8WgyKtg?IbBkM)St_dX+q?*_c1Q zO3q1cWU}37MhMkDT<~;|;6Yt%o1!>Brxq;$G zUgf&Y>1=F>U&qdpDa2ac6x~9Vf#^r#LA>>jltxS@*==rn)rd*!+Qa z<~k+);XRht*`%D&Q>~f>*B;{S2`+lt9sR}c_qmYf+L4QSw2Ilw_G<`g>+!S%&<^!* z@oKYf+Krh_k%s%=qAPu{C9KB5rAV>~-I4Kag791CrwF^Y0BLridkXWfC;=i~FPeD?-2ohKr`H*THU+u%;CDdh{$wdog0TU)2{a zQ7|GdI{^!v3sGAaCZool3*hR*z4Z?$$1&3ue@3f1H;gD-ars9eP_!I%CiLM`4hF&E z>aBl}2DcV9tpp8Tp?7S*zOT9T$w@&)imvT>h*VHfGmH8>fkPG-!l5X;_T>1Ld)(zB zFh-!^Sv?{)4oep(X>nu`NbQymy~2&tEMYT|lS_Tnlu)av-w5EEUdHLQ7778dz@!-g zG#M6Q8bCAvn+L!FbnCiHF&lsxKp+xub!$e91Yq$2DCtF9Yh#mY)MjexL{o8GKola8h`6$EDuM!!^}&O;+;jQ|!Hi3k$AdW2;rsKP z`F+c|zjxp79$*Y(7{eI;e<7+}AZawCDM3dyKx}#nVqZ!cO$l*S1Ef8dNq~NS38zO@ zXH*~xF64Y+IZhXp08l?`I}U@48#g7G0nEQARR#VyS+b#$WRLKA>?0KGp=03zt1pAZRmLkyIO z&qLE?fG$=8k(gk=Sda3iDzsO$;L!0>04zNF_)0@%wFv^Dp-Oe6ao@fV0SM4V1VIz# zhvc_YAWa zmHP5hk25Ft`n|FEH+|rw<>0}OdXkeD@}i<6L+%XGJq#f!snEoy0+N7x$392vwc~G>cz4T{x)1b5Vb!%v(~|X z%TZ`j-o&G=uMdEB!$GK*t^?6}4_jyeYUFkp$+@CZ07?J~963{p&#%q2G`A!-ifWapXmpBvFZv5fIS8v{le9oXY#EgiBn6v=OUB>|E z0Fts8!n~CuLJUBBZOwM%aYiC0y)w8aMJ3EdHfJ<>$=Z?9AwuSAki-QPLUb(Umvcsl zRwGZForby!BX6iK8CXQ<-Q5y zNyYW6u=KRtU$>dt=+*CvW#370P`VHM~<}v5T1<1O}+Hj*?B}C5R2iD*aS=d znS&!-h9FHGSW>uCC|n0NX*hOUZDiJ;_B&ynDm;QG;hpS!EV$J}srPgM5a{z;|BW5} z42Rmf>GJId6hRYH0SFFq2jI{3t@umP?fbQwS64y%i{Zt+@JO{@n0q20|K$wjjH7`u`k#V&X~m8`%9!*;1nTGTl#y5! zJ?AYPmYMRMb$bASiYh%_RaA;)`Bwxg=>S0W+WL>Nv)e+wB9otDSOcPsR8D;P4PoVu zPldx5ZlazsTxT4IIm4`@XDC!24;`S|Aic0|ANF_mp@uPHVq9frTxGN}MOi~9vde0P zb-PchUtjYPqEdf_z>rk9`Gpce=S`_nFKzn!7s#{7h@H9+07%TtH&GmY##g;I)i2-QM5t0v1f4h4`-PE!kTeoAJ4^lg2U~?detL>zm)A;Vce>O@8&jDX zC*6#riZOiF-6tfj*+Z$?{YM{_;65>fzIC7gxlC3zG8SZ$c_Np2GL!jaJLAC?#$9?D zr)`X(($p^%R@^h3FR7*VcYBc6&<0Tz0zeSfA3uj`#!$`}-rIc&19O)r4%Ii2io0!M zK}j7gtY}6>cfZiim}?K?Ar{6H>})`b%RJB~b7doA$YHXuc<(v5MbE+zf1^a8UN1;9 zxBUa_i|TNi%bHt^hjqw2$t?5vHkoH}nSaP+zK6+t7n6CgiE+h->~r561)aWP2aa%t z!<=F2imijhiuZONb#0aT7AEt*vH^}PKERn|mU&o*%r&> znViYff&h{m)sK%SY0Z zzA-%Qn?lYljOL|GV>V+203afDIXQV|S5_#99YDSXXsou$)>@+(rLCRx#UT}0Aui%w3=0zdy3 z04s3xZ4A!yD(@(4EiF;ZXz7&q?b;{S+_|f|+F0Fnx1yHto+b{MhT&=WPTU}mre(0!b2r$A^lVdKC3oD?Hb^$zSH+Y%rhec=ZVBGWEV16J0IFD0$9mI zC4H>;P#!LM8zkN2^k*G_*rdsss4^3|vFLFF;bVK3cb(3`H4~9F=?k0<;1nbnLTTc6 z?IfYnCIEpBlXts>XadYio}AKkqc z>YqBBLUMPs-su2#gr^`lP%pIIZdIV{vZM71+E^}{Z#J?pFBQR*pZ(+kL`CX61d5P* zuV1plZgjNX%Fx5wt`xynO=Q>1SBL9mm_^jUwV89#PC?r)ogMBWpf4vEjg$-8l$VrL z7cv|Q2R~W>06~D?Ce|O9g1R<{EXT%q!!-JM + +pkgname=openblas +_pkgname=OpenBLAS +pkgver=0.3.13 +pkgrel=1 +pkgdesc="An optimized BLAS library based on GotoBLAS2 1.13 BSD" +arch=('i686' 'x86_64') +url="https://www.openblas.net/" +license=('Modified-BSD') +depends=('gcc-libs') +makedepends=('perl' 'gcc-fortran') +provides=('blas=3.8.0') +conflicts=('blas') +source=(${_pkgname}-v${pkgver}.tar.gz::https://github.com/xianyi/OpenBLAS/archive/v${pkgver}.tar.gz) +sha512sums=('86e7f496587cc35d7feede99cbe3cf627ef690dd7489bb03b95f7d15ed758e32baf17d79f17b1de187184394233f60a8249a64dd53c3d59a9540db92269b7ee4') + +build() { + cd "$srcdir/$_pkgname-$pkgver" + + make NO_STATIC=1 NO_LAPACK=1 NO_LAPACKE=1 NO_CBLAS=1 NO_AFFINITY=1 USE_OPENMP=1 \ + CFLAGS="$CPPFLAGS $CFLAGS" TARGET=CORE2 DYNAMIC_ARCH=1 \ + NUM_THREADS=64 MAJOR_VERSION=3 libs shared +} + +package() { + cd "$srcdir/$_pkgname-$pkgver" + + make PREFIX="$pkgdir"/usr NUM_THREADS=64 MAJOR_VERSION=3 install + rm -f "$pkgdir"/usr/include/cblas.h "$pkgdir"/usr/include/lapack* + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname + + cd "$pkgdir"/usr/lib/ + ln -s libopenblasp-r$pkgver.so libblas.so + ln -s libopenblasp-r$pkgver.so libblas.so.3 + sed -i -e "s%$pkgdir%%" "$pkgdir"/usr/lib/cmake/openblas/OpenBLASConfig.cmake + sed -i -e "s%$pkgdir%%" "$pkgdir"/usr/lib/pkgconfig/openblas.pc + ln -s openblas.pc "$pkgdir"/usr/lib/pkgconfig/blas.pc + + rmdir "$pkgdir"/usr/bin +} diff --git a/openbox/PKGBUILD b/openbox/PKGBUILD new file mode 100644 index 0000000..9550b4e --- /dev/null +++ b/openbox/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgname=openbox +pkgver=3.6.1 +_debver=$pkgver +_debrel=10 +pkgrel=5 +pkgdesc="Highly configurable and lightweight X11 window manager" +arch=('i686' 'x86_64') +url='https://openbox.org' +license=('GPL-2') +depends=('startup-notification' 'libxml2' 'libxinerama' 'libxrandr' + 'libxcursor' 'pango' 'imlib2' 'librsvg-legacy' 'libsm' 'libxi') +makedepends=('python' 'quilt') +optdepends=('python-pyxdg: for the openbox-xdg-autostart script') +backup=('etc/xdg/openbox/menu.xml' + 'etc/xdg/openbox/rc.xml' + 'etc/xdg/openbox/autostart' + 'etc/xdg/openbox/environment') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/o/openbox/openbox_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/o/openbox/openbox_${_debver}-${_debrel}.debian.tar.xz" + "libre.patch") +sha512sums=('5e6f4a214005bea8b26bc8959fe5bb67356a387ddd317e014f43cb5b5bf263ec617a5973e2982eb76a08dc7d3ca5ec9e72e64c9b5efd751001a8999b420b1ad0' + '91eae46531a66554d57db3411414e5320a309f5ef75a14722b83f298b5bff3c1af2016df834b7ee6bb8937410da7b532ddfc29b670f03f73ffe6500b88216d87' + 'ffa2673a49b48dc41a6323667668ad5ecb4c08ba2355f3654e52957c15fb0144c633874fe338fd7085e587979bba210a34ee562e6ba175988729ece4139932d5') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # remove non-free and not supported applications + patch -Np1 -i "${srcdir}/libre.patch" + + autoreconf -ifv +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --with-x \ + --enable-startup-notification \ + --sysconfdir=/etc \ + --libexecdir=/usr/libexec/openbox + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # remove gnome and included parts as being not part of Hyperbola + rm -r "$pkgdir"/usr/bin/{gdm-control,gnome-panel-control,openbox-gnome-session} \ + "$pkgdir"/usr/share/gnome{,-session} \ + "$pkgdir"/usr/share/man/man1/openbox-gnome-session.1 \ + "$pkgdir"/usr/share/xsessions/openbox-gnome.desktop + + # remove kde and included parts as being not part of Hyperbola + rm -rf "$pkgdir"/usr/bin/openbox-kde-session \ + "$pkgdir"/usr/share/man/man1/openbox-kde-session.1 \ + "$pkgdir"/usr/share/xsessions/openbox-kde.desktop + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/openbox/libre.patch b/openbox/libre.patch new file mode 100644 index 0000000..670bc5e --- /dev/null +++ b/openbox/libre.patch @@ -0,0 +1,362 @@ +diff --git a/data/menu.xml b/data/menu.xml +index 39da04d..31a9f08 100644 +--- a/data/menu.xml ++++ b/data/menu.xml +@@ -5,23 +5,15 @@ + + + +- gnome-calculator ++ galculator + + yes + + + +- ++ + +- gnome-character-map +- +- yes +- +- +- +- +- +- ark ++ xarchiver + + yes + +@@ -48,25 +40,9 @@ + + + +- ++ + +- gedit +- +- yes +- +- +- +- +- +- kate +- +- yes +- +- +- +- +- +- kwrite ++ l3afpad + + yes + +@@ -80,25 +56,17 @@ + urxvt + + +- +- +- gnome-terminal +- +- yes +- +- +- +- ++ + +- xfce4-terminal ++ sakura + + yes + + + +- ++ + +- konsole ++ st + + yes + +@@ -110,35 +78,27 @@ + + + +- ++ + +- firefox ++ iceweasel-uxp + + yes +- Firefox ++ Iceweasel-UXP + + + +- ++ + +- opera ++ surf + + yes +- Opera ++ otter-browser + + + +- ++ + +- konqueror +- +- yes +- +- +- +- +- +- epiphany ++ badwolf + + yes + +@@ -152,17 +112,17 @@ + + + +- ++ + +- kopete ++ pidgin + + yes + + + +- ++ + +- xchat ++ hexchat + + yes + +@@ -171,80 +131,75 @@ + + + +- +- +- ooffice -base +- +- +- ++ + +- ooffice -calc ++ loffice --base + + +- ++ + +- ooffice -draw ++ loffice --calc + + +- ++ + +- ooffice -impress ++ loffice --draw + + +- ++ + +- ooffice -math ++ loffice --impress + + +- ++ + +- ooffice-printeradmin ++ loffice --math + + +- ++ + +- ooffice -writer ++ loffice --writer + + + + + +- ++ + +- amarok ++ audacious + + yes + + + +- ++ + +- rhythmbox ++ deadbeef + + yes + + + +- ++ + +- k3b ++ mplayer + + yes ++ MPlayer + + + +- ++ + +- gmplayer ++ mpv + + yes +- MPlayer + + + +- ++ + +- totem ++ smplayer + + yes + +@@ -253,25 +208,25 @@ + + + +- ++ + +- nautilus --no-desktop --browser ++ xfe + + yes + + + +- ++ + +- Thunar ++ spacefm + + yes + + + +- ++ + +- kfmclient openURL ~ ++ mc + + yes + +@@ -286,9 +241,9 @@ + + + +- ++ + +- pcmanfm ++ clifm + + yes + +@@ -305,9 +260,9 @@ + + + +- ++ + +- gwenview ++ krita + + yes + +@@ -338,24 +293,6 @@ + yes + + +- +- +- gnome-control-center +- yes +- +- +- +- +- kcontrol +- yes +- +- +- +- +- xfce-setting-show +- yes +- +- + + + xdg-open http://localhost:631/ +diff --git a/openbox/session.c b/openbox/session.c +index d6c6f76..8cc54d8 100644 +--- a/openbox/session.c ++++ b/openbox/session.c +@@ -659,7 +659,7 @@ static gboolean session_state_cmp(ObSessionState *s, ObClient *c) + !strcmp(s->class, c->class) && + !strcmp(s->role, c->role) && + /* the check for type is to catch broken clients, like +- firefox, which open a different window on startup ++ iceweasel-uxp, which open a different window on startup + with the same info as the one we saved. only do this + check for old windows that dont use xsmp, others should + know better ! */ +@@ -800,7 +800,7 @@ static void session_load_file(const gchar *path) + + /* Remove any duplicates. This means that if two windows (or more) are + saved with the same session state, we won't restore a session for any +- of them because we don't know what window to put what on. AHEM FIREFOX. ++ of them because we don't know what window to put what on. AHEM ICEWEASEL-UXP. + + This is going to be an O(2^n) kind of operation unfortunately. + */ diff --git a/openbsd-netcat/PKGBUILD b/openbsd-netcat/PKGBUILD new file mode 100644 index 0000000..0b8b779 --- /dev/null +++ b/openbsd-netcat/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=openbsd-netcat +pkgver=1.219 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="TCP/IP swiss army knife, OpenBSD variant" +arch=('i686' 'x86_64') +url='https://packages.debian.org/sid/netcat-openbsd' +license=('Modified-BSD') +depends=('libbsd') +makedepends=('gcc' 'make' 'quilt') +provides=('netcat') +conflicts=('gnu-netcat') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/n/netcat-openbsd/netcat-openbsd_${pkgver%_*}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/n/netcat-openbsd/netcat-openbsd_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('9f6d531d33410457b8f1e6a3eb0d105dbd819d5e4fe9753d32d7fd4583680ceba102a60307a8b5ef26b47047492b207388742b725da3708d30d360d4a196f115' + 'badc1afbe8a467c068fa1d3bf12817d568eae5bb9774f9f11d3b30c065eb3a8b39724bb456329d7153ea3160cd10fab159a6756f7eeafd9bfc8c5d78114f7da6') + +prepare() { + cd "$srcdir"/netcat-openbsd-${pkgver%_*} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/netcat-openbsd-${pkgver%_*} + make \ + CFLAGS="$CFLAGS -DDEBIAN_VERSION=\"\\\"${pkgrel}\\\"\" -I/usr/include/libbsd" \ + LDFLAGS="$LDFLAGS -lbsd" +} + +package() { + cd "$srcdir"/netcat-openbsd-${pkgver%_*} + install -Dm0755 nc "$pkgdir"/usr/bin/nc + ln -s nc "$pkgdir"/usr/bin/netcat + install -Dm0644 nc.1 "$pkgdir"/usr/share/man/man1/nc.1 + install -dm0755 "$pkgdir"/usr/share/licenses/$pkgname/ + head -n28 netcat.c | tail -n+2 >"$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/openbsd-telnet/PKGBUILD b/openbsd-telnet/PKGBUILD new file mode 100644 index 0000000..49876c2 --- /dev/null +++ b/openbsd-telnet/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=openbsd-telnet +pkgver=1.2 +pkgrel=1 +pkgdesc="Telnet and telnetd, ported from OpenBSD" +arch=('i686' 'x86_64') +url='ftp://ftp.suse.com/pub/people/kukuk/ipv6/' +license=('Modified-BSD') +depends=('ncurses') +source=("https://dev.gentoo.org/~mschiff/distfiles/telnet-bsd-${pkgver}.tar.bz2") +sha512sums=('e3867362e1a2bc46779bcbc7631ccf08a0bfae84b71653e39099dc2db42995e5fcd39a978595006053e688430445db7ebb7a7bfbbb02a8e4dba209acbf66a69d') + +build() { + cd telnet-bsd-$pkgver + ./configure \ + --prefix=/usr + make +} + +package() { + cd telnet-bsd-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/opendbx/PKGBUILD b/opendbx/PKGBUILD new file mode 100644 index 0000000..8b2b3fd --- /dev/null +++ b/opendbx/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=opendbx +pkgver=1.4.6 +_debver=$pkgver +_debrel=15 +pkgrel=4 +pkgdesc="Extremely lightweight but extensible database access library written in C" +arch=('i686' 'x86_64') +url='https://www.linuxnetworks.de/doc/index.php/OpenDBX' +license=('LGPL-2.1') +depends=('postgresql-libs' 'sqlite') +makedepends=('quilt') +source=("https://linuxnetworks.de/opendbx/download/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libo/libopendbx/libopendbx_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('dd6d53d29157057dbf4e273fd82c7694e8bc626d3409d6ab9c25627a0fec96418326550fa8004b5341facdc4cd8aae12516224e8bb84e2562482885780ff0e55' + '65c76ead971a3276bf3f1e3c197b3337073d66278bbb283373fd3d34a35e4e9d4435ebb3e8ea52fde6f3d0664f8e437969014e24901bbde5a9e0f59c15150de7') + +prepare() { + cd "${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + CPPFLAGS=${CPPFLAGS}" -I/usr/include/mysql"\ + ./configure \ + --with-backends="pgsql sqlite3" \ + --prefix=/usr + make all +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/opendkim/PKGBUILD b/opendkim/PKGBUILD new file mode 100644 index 0000000..c2bfc63 --- /dev/null +++ b/opendkim/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: Jesus E. + +pkgname=opendkim +pkgver=2.10.3 +pkgrel=6 +pkgdesc='A free and libre implementation of the DKIM sender authentication system, based on a fork of dkim-milter.' +arch=('i686' 'x86_64') +url='http://www.opendkim.org/' +license=('Modified-BSD' 'custom:Sendmail') +depends=('db' 'libressl' 'libbsd' 'opendbx' 'libldap') +optdepends=('perl: for opendkim-genkey') +makedepends=('libmilter') +backup=(etc/conf.d/opendkim) +options=(!emptydirs) +install=$pkgname.install +source=("https://downloads.sourceforge.net/project/$pkgname/$pkgname-$pkgver.tar.gz" + "$pkgname.initd" + "$pkgname.confd" + "$pkgname.run" + "$pkgname.conf") +sha512sums=('97923e533d072c07ae4d16a46cbed95ee799aa50f19468d8bc6d1dc534025a8616c3b4b68b5842bc899b509349a2c9a67312d574a726b048c0ea46dd4fcc45d8' + '220ba494b83189aceba304534d1538cc38414c82a522a9fa8211f9277bf22ae8787581b3913e2a267b766ad33bfa4ee005780ee744633f2c765d15696f5bd0cb' + 'db103c23d03bcc5919e795cd0bb6e9cfa6a0b8b65c55476fce8aaedfa539a707f0e2b7e10fc493e8a18ef9743b1f80bb97c1b3aaa8b6dc51646898ffdc0fff65' + 'c2799e2c879505cb4c06062b8e8277982f9a83125bef3aa12ddf52b839e7752a5fb1b2252cf397093ac51237896d3d29b46789406e033eee4a7362f4f5f93867' + '7d4dc6862c40efa7fd3d235d00c9c0e4a76113232993c694866ac7af5c63ae6e0374a9e2728ea9b1eef81b102f4ff47aa2201bd9020db01fc4ad7399a400fbef') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + autoreconf -vi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-db \ + --with-odbx \ + --with-sql-backend \ + --with-openldap \ + --disable-live-testing + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir/" install + + # remove remnants from systemd within documentation + rm "$pkgdir/usr/share/doc/$pkgname/$pkgname.service" + + # sample configuration + mkdir -p "$pkgdir/etc/$pkgname" + mv "$pkgdir/usr/share/doc/$pkgname/$pkgname.conf.sample" "$pkgdir/etc/$pkgname/$pkgname.conf.sample" + chmod 0700 "$pkgdir/etc/$pkgname" + chmod 0600 "$pkgdir/etc/$pkgname/$pkgname.conf.sample" + + # services + install -Dm644 "$srcdir/$pkgname.confd" "$pkgdir/etc/conf.d/$pkgname" + install -Dm755 "$srcdir/$pkgname.initd" "$pkgdir/etc/init.d/$pkgname" + install -Dm644 "$srcdir/$pkgname.conf" "$pkgdir/etc/sv/$pkgname/conf" + install -Dm755 "$srcdir/$pkgname.run" "$pkgdir/etc/sv/$pkgname/run" + + # create default configuration + + # Some MTAs are known to break DKIM signatures with "simple" + # canonicalization [1], so we choose the "relaxed" policy + # over OpenDKIM's current default settings. + # [1] https://wordtothewise.com/2016/12/dkim-canonicalization-or-why-microsoft-breaks-your-mail/ + sed -E -e 's:^(Canonicalization)[[:space:]]+.*:\1\trelaxed/relaxed:' \ + "$srcdir/$pkgname-$pkgver/$pkgname/$pkgname.conf.simple" > "$pkgdir"/etc/$pkgname/$pkgname.conf + + # move tools to /usr/bin for FHS compliance + install -dm755 "$pkgdir/usr/bin" + for b in opendkim-{genkey,genzone,testkey,testmsg}; do + mv "$pkgdir/usr/sbin/$b" "$pkgdir/usr/bin/$b" + done + + # licenses + install -Dm644 LICENSE LICENSE.Sendmail -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/opendkim/opendkim.conf b/opendkim/opendkim.conf new file mode 100644 index 0000000..8aa0e8e --- /dev/null +++ b/opendkim/opendkim.conf @@ -0,0 +1,20 @@ +# This overrides the "Socket" line in your opendkim.conf configuration +# file, and is required (so that we don't have to try to parse the +# configuration file in an init script). The default below listens +# on the network. +# +# If you would rather use a local (UNIX) socket, try the following: +# +# WARNING: The directory containing this socket will have its owner +# changed to "opendkim". +# +#OPENDKIM_SOCKET="local:/run/opendkim/opendkim.sock" +# +# More examples of valid socket syntax can be found in the opendkim(8) +# man page, under the "-p socketspec" option. However -- contrary to +# what that man page says -- if you want to use a local socket, the +# "local:" prefix is not optional here. +# +OPENDKIM_SOCKET="inet:8891@localhost" +OPENDKIM_CONFFILE="/etc/opendkim/opendkim.conf" +OPENDKIM_PIDFILE="/run/opendkim.pid" diff --git a/opendkim/opendkim.confd b/opendkim/opendkim.confd new file mode 100644 index 0000000..03bb8d8 --- /dev/null +++ b/opendkim/opendkim.confd @@ -0,0 +1,18 @@ +# This overrides the "Socket" line in your opendkim.conf configuration +# file, and is required (so that we don't have to try to parse the +# configuration file in an init script). The default below listens +# on the network. +# +# If you would rather use a local (UNIX) socket, try the following: +# +# WARNING: The directory containing this socket will have its owner +# changed to "opendkim". +# +#OPENDKIM_SOCKET="local:/run/opendkim/opendkim.sock" +# +# More examples of valid socket syntax can be found in the opendkim(8) +# man page, under the "-p socketspec" option. However -- contrary to +# what that man page says -- if you want to use a local socket, the +# "local:" prefix is not optional here. +# +OPENDKIM_SOCKET="inet:8891@localhost" diff --git a/opendkim/opendkim.initd b/opendkim/opendkim.initd new file mode 100644 index 0000000..ad45f42 --- /dev/null +++ b/opendkim/opendkim.initd @@ -0,0 +1,73 @@ +#!/sbin/openrc-run +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +CONFFILE="/etc/opendkim/${RC_SVCNAME}.conf" +required_files="${CONFFILE}" + +command="/usr/sbin/opendkim" +pidfile="/run/${RC_SVCNAME}.pid" +command_args="-P ${pidfile} -x ${CONFFILE} -p ${OPENDKIM_SOCKET}" + +depend() { + use dns logger net + before mta +} + +check_cfg() { + # + # The opendkim.conf man page says, + # + # For parameters that are Boolean in nature, only the first byte + # of the value is processed... For negative values, the following + # are accepted: "F", "f", "N", "n", "0".' + # + if grep --quiet '^[[:space:]]*Background[[:space:]]\+[FfNn0]' \ + "${CONFFILE}"; then + eerror "${RC_SVCNAME} cannot run in the foreground!" + return 1 + fi +} + +start_pre() { + # If this isn't a restart, make sure that the user's config isn't + # busted before we try to start the daemon (this will produce + # better error messages than if we just try to start it blindly). + # + # If, on the other hand, this *is* a restart, then the stop_pre + # action will have ensured that the config is usable and we don't + # need to do that again. + if [ "${RC_CMD}" != "restart" ]; then + check_cfg || return $? + fi + + if [ -S "${OPENDKIM_SOCKET}" ] && ! fuser -s "${OPENDKIM_SOCKET}"; then + # Remove stalled Unix socket if no other process is + # using it + if ! rm "${UNIX_SOCKET}"; then + eerror "failed to remove stale unix socket ${OPENDKIM_SOCKET}" + return 2 + fi + fi + + # This relies on the "local:" prefix being there, but the conf.d + # file explicitly states that it's not optional (contrary to what + # the opendkim(8) man page says). + if [ "${OPENDKIM_SOCKET#local:}" != "${OPENDKIM_SOCKET}" ]; then + # The socket begins with "local:" + OPENDKIM_SOCKET_PATH="${OPENDKIM_SOCKET#local:}" + OPENDKIM_SOCKET_DIR="${OPENDKIM_SOCKET_PATH%/*}" + + # This is dangerous, but there's a big warning about it + # in the conf.d file. + checkpath --directory --owner opendkim "${OPENDKIM_SOCKET_DIR}" + fi +} + +stop_pre() { + # If this is a restart, check to make sure the user's config + # isn't busted before we stop the running daemon. + if [ "${RC_CMD}" = "restart" ]; then + check_cfg || return $? + fi +} diff --git a/opendkim/opendkim.install b/opendkim/opendkim.install new file mode 100644 index 0000000..7862d3c --- /dev/null +++ b/opendkim/opendkim.install @@ -0,0 +1,26 @@ +post_upgrade() { + if ! getent passwd opendkim &>/dev/null; then + useradd -r -g mail -G adm -d / -s /bin/nologin opendkim >/dev/null + fi + if ! groups opendkim | grep adm &>/dev/null; then + gpasswd -a opendkim adm >/dev/null + fi + opendkim_shell=$(getent passwd opendkim | cut -d: -f7) + if [ "$opendkim_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin opendkim &>/dev/null + fi +} + +post_install() { + post_upgrade + chown -R opendkim:mail etc/opendkim + cat <>> Check and modify /etc/opendkim/opendkim.conf before starting +EOF +} + +post_remove() { + if getent passwd opendkim &>/dev/null; then + userdel opendkim >/dev/null + fi +} diff --git a/opendkim/opendkim.run b/opendkim/opendkim.run new file mode 100644 index 0000000..55348b0 --- /dev/null +++ b/opendkim/opendkim.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r ./conf ] && . ./conf +exec chpst -U opendkim /usr/sbin/opendkim -P ${OPENDKIM_PIDFILE} -x ${OPENDKIM_CONFFILE} -p ${OPENDKIM_SOCKET} diff --git a/openjade/PKGBUILD b/openjade/PKGBUILD new file mode 100644 index 0000000..9df7334 --- /dev/null +++ b/openjade/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=openjade +pkgver=1.3.2 +pkgrel=1 +_debpatch=13 +pkgdesc='Implementation of the DSSSL language' +arch=('i686' 'x86_64') +url='http://openjade.sourceforge.net/' # no https +license=('Expat') +depends=('opensp' 'sgml-common') +makedepends=('perl-perl4-corelibs') +install=${pkgname}.install +conflicts=('jade') +provides=('jade') +source=(https://downloads.sourceforge.net/project/${pkgname}/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/o/${pkgname}1.3/${pkgname}1.3_${pkgver}-${_debpatch}.diff.gz) +sha512sums=('c39f70ec8020bd7a2b3e125cbd146b49ddb57910a042bd212da02722617ed5681f32dab60acc26ab89ac658997c6f604911d7be3be391d6278267481f3bcf2f1' + '9f9d9da2c64a4656ea0ead38b6fa614907e6c759394ec4a5f7235c0a51f733fe1c4417d78f01d146a4d353896f2935ccb509a48f3fbe48f29e223f3d17bb71a4') + +prepare() { + cd ${pkgname}-$pkgver + patch -Np1 -i "$srcdir"/${pkgname}1.3_${pkgver}-${_debpatch}.diff + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69534#c9 + export CXXFLAGS+=' -fno-lifetime-dse' +} + +build() { + cd ${pkgname}-$pkgver + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --enable-default-catalog=/etc/sgml/catalog \ + --datadir=/usr/share/sgml/openjade-${pkgver} \ + --enable-html \ + --enable-http \ + --enable-mif + make +} + +package() { + cd ${pkgname}-$pkgver + make DESTDIR="$pkgdir/" install install-man + + # add unversioned symlink + ln -svf openjade-${pkgver} "${pkgdir}"/usr/share/sgml/openjade + + # openjade -> jade compat symlinks + ln -svf /usr/bin/openjade "$pkgdir"/usr/bin/jade + ln -svf /usr/lib/libogrove.so "$pkgdir"/usr/lib/libgrove.so + ln -svf /usr/lib/libospgrove.so "$pkgdir"/usr/lib/libspgrove.so + ln -svf /usr/lib/libostyle.so "$pkgdir"/usr/lib/libstyle.so + ln -svf /usr/share/man/man1/openjade.1.gz "$pkgdir"/usr/share/man/man1/jade.1.gz + + # license + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/" + + install -dm755 "$pkgdir"/usr/share/sgml/openjade-${pkgver} + install -m644 dsssl/builtins.dsl dsssl/dsssl.dtd \ + dsssl/style-sheet.dtd dsssl/fot.dtd \ + dsssl/catalog "$pkgdir"/usr/share/sgml/openjade-${pkgver} +} diff --git a/openjade/openjade.install b/openjade/openjade.install new file mode 100644 index 0000000..d54e137 --- /dev/null +++ b/openjade/openjade.install @@ -0,0 +1,23 @@ +post_install() { + /usr/bin/install-catalog --add \ + /etc/sgml/openjade-1.3.2.cat \ + /usr/share/sgml/openjade-1.3.2/catalog > /dev/null 2>&1 + + /usr/bin/install-catalog --add \ + /etc/sgml/openjade.cat \ + /etc/sgml/openjade-1.3.2.cat > /dev/null 2>&1 +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + /usr/bin/install-catalog --remove \ + /etc/sgml/openjade-1.3.2.cat \ + /usr/share/sgml/openjade-1.3.2/catalog > /dev/null 2>&1 + + /usr/bin/install-catalog --remove \ + /etc/sgml/openjade.cat \ + /etc/sgml/openjade-1.3.2.cat > /dev/null 2>&1 +} diff --git a/openjpeg2/PKGBUILD b/openjpeg2/PKGBUILD new file mode 100644 index 0000000..7011ce6 --- /dev/null +++ b/openjpeg2/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=openjpeg2 +pkgver=2.3.1 +_debver=2.3.1 +_debrel=1 +pkgrel=2 +pkgdesc="A free JPEG 2000 codec" +arch=(i686 x86_64) +license=('Simplified-BSD') +url="https://github.com/uclouvain/openjpeg" +makedepends=('cmake' 'doxygen' 'quilt') +depends=('zlib' 'libpng' 'libtiff' 'lcms2') +source=("$pkgname-$pkgver.tar.gz::https://github.com/uclouvain/openjpeg/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/o/openjpeg2/openjpeg2_$_debver-$_debrel.debian.tar.xz") +sha512sums=('339fbc899bddf2393d214df71ed5d6070a3a76b933b1e75576c8a0ae9dfcc4adec40bdc544f599e4b8d0bc173e4e9e7352408497b5b3c9356985605830c26c03' + 'a57c4c8ad8d049dc8ebe9ea79d4f4dc97af580d873b72aed4dc2c2260a320c933f8cca80913a8642172d4659092e98db5ae6287e1c480f217af16b80289636da') + +prepare() { + cd ${srcdir} + mkdir build + + cd "${srcdir}/openjpeg-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/java9.patch || true + + quilt push -av + fi + + # Install doxygen docs to the right directory + sed -i -e "s:DESTINATION\ share/doc:DESTINATION\ share/doc/${pkgname}:" doc/CMakeLists.txt +} + +build() { + cd "${srcdir}/build" + + cmake "../openjpeg-${pkgver}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=OFF \ + -DBUILD_DOC=on + + make +} + +package() { + cd "${srcdir}/build" + make DESTDIR="${pkgdir}" install + + install -m755 -d "${pkgdir}/usr/share/licenses/openjpeg2" + mv ${pkgdir}/usr/share/doc/openjpeg-*/LICENSE ${pkgdir}/usr/share/licenses/openjpeg2 + rmdir ${pkgdir}/usr/share/doc/openjpeg-* +} diff --git a/openmotif/PKGBUILD b/openmotif/PKGBUILD new file mode 100644 index 0000000..3717dca --- /dev/null +++ b/openmotif/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=openmotif +pkgver=2.3.8 +_debver=2.3.8 +_debrel=3 +pkgrel=1 +pkgdesc='Open Motif: GUI component toolkit' +arch=('i686' 'x86_64') +url='https://motif.ics.com/' +license=('LGPL-2.1') +depends=('libxp' 'libxft' 'libxmu' 'libpng' 'libjpeg') +makedepends=('xenocara-xbitmaps' 'xenocara-proto' 'quilt') +source=("https://downloads.sourceforge.net/project/motif/Motif%20$pkgver%20Source%20Code/motif-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/m/motif/motif_$_debver-$_debrel.debian.tar.xz") +sha512sums=('1ab8e8eece25ef97e948592b5fa3e19d98e932695290a18b7a8e90f1aa2766bc4f082bdbc3999dff5660e684821178a149040f76bb477163e53ca06474d02b55' + 'b8ae864d791d96ecd8b146c8e065090154a17c7e7b972fea38e60828811fe80ffc2e87f95679191db1d884e96a523730b8f3d1b26d6d1e72799c9130a9f3e480') + +prepare() { + cd motif-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + touch NEWS AUTHORS + autoreconf -if +} + +build() { + cd motif-$pkgver + ./configure --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd motif-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/openmpi/PKGBUILD b/openmpi/PKGBUILD new file mode 100644 index 0000000..b1b105c --- /dev/null +++ b/openmpi/PKGBUILD @@ -0,0 +1,86 @@ +# Maintainer: Jesus E. + +pkgname=openmpi +pkgver=4.0.5 +_debver=4.0.5 +_debrel=7 +pkgrel=1 +pkgdesc='High performance message passing library (MPI)' +url='https://www.open-mpi.org' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('libtool' 'hwloc' 'openssh' 'zlib' 'libnl' 'perl') +makedepends=('gcc-fortran' 'quilt') +optdepends=('gcc-fortran: fortran support') +options=('staticlibs') +source=(https://www.open-mpi.org/software/ompi/v${pkgver%.*}/downloads/${pkgname}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/o/openmpi/openmpi_$_debver-$_debrel.debian.tar.xz) +sha512sums=('b7a1a5ccfc0eaa0f0504ff770b550480f7ae6727fa891e3310d9340a0d844a2ceddf62c2e59efd047ab9416b24c829919bbccd29606ca0e0d7a0569dad800011' + 'ef33613aab252a33f85421be0edb1a5096c86d8d9eeffc4c7127d939cf37568d9871e886bc9acf63e3c902c184cbbee757c1bf69cc0924a9b6c598951c34766d') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/build_hurd || true + rm -v debian/patches/hppa.patch || true + rm -v debian/patches/ia64.patch || true + rm -v debian/patches/libdir.patch || true + rm -v debian/patches/mpifort.patch || true + rm -v debian/patches/opal_fifo.patch || true + rm -v debian/patches/pkg-config.patch || true + rm -v debian/patches/use-openib.patch || true + rm -v debian/patches/version-script.patch || true + + quilt push -av + fi + + ./autogen.pl --force +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --sysconfdir=/etc/${pkgname} \ + --enable-mpi-fortran=all \ + --libdir=/usr/lib/${pkgname} \ + --enable-builtin-atomics \ + --enable-mpi-cxx \ + --disable-memchecker \ + --enable-pretty-print-stacktrace \ + --without-slurm \ + --with-hwloc=/usr \ + --with-libltdl=/usr \ + FC=/usr/bin/gfortran \ + LDFLAGS="${LDFLAGS} -Wl,-z,noexecstack" + make +} + +check() { + cd ${pkgname}-${pkgver} + make check +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + # FS#28583 + install -dm 755 "${pkgdir}/usr/lib/pkgconfig" + for i in ompi-c.pc ompi-cxx.pc ompi-f77.pc ompi-f90.pc ompi.pc; do + ln -sf "/usr/lib/openmpi/pkgconfig/${i}" "${pkgdir}/usr/lib/pkgconfig/" + done + + install -dm 755 "${pkgdir}/etc/ld.so.conf.d" + echo "/usr/lib/${pkgname}" > "${pkgdir}"/etc/ld.so.conf.d/${pkgname}.conf + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim: ts=2 sw=2 et: diff --git a/openntpd/PKGBUILD b/openntpd/PKGBUILD new file mode 100644 index 0000000..e2826ab --- /dev/null +++ b/openntpd/PKGBUILD @@ -0,0 +1,89 @@ +# Maintainer: Jesus E. + +pkgname=openntpd +pkgver=6.2p3 +_debver=$pkgver +_debrel=4.2 +pkgrel=5 +pkgdesc="Free and libre, easy to use implementation of the Network Time Protocol" +url='http://www.openntpd.org/' +arch=('i686' 'x86_64') +license=('ISC') +depends=('libressl') +makedepends=('quilt') +conflicts=('ntp') +backup=('etc/ntpd.conf' + 'etc/conf.d/ntpd') +install=${pkgname}.install +source=(https://ftp.openbsd.org/pub/OpenBSD/OpenNTPD/${pkgname}-${pkgver}.tar.gz{,.asc} + https://deb.debian.org/debian/pool/main/o/openntpd/openntpd_$_debver-$_debrel.debian.tar.xz + ntpd.confd + ntpd.initd + ntpd.conf + ntpd.run + ntpd.conf.libre + ntp-user.patch) +sha512sums=('56a04bfd8b161b365607673ac80086ff53ae943938fa49bf52edbc541432eca30730a46a4af581fe26ce3bbceb144cb25982a38959b7a3f9304c727fe60f9f50' + 'SKIP' + 'a973a440c9b8273c472e3c88775b22eb5cb4e2ecf4ccfd1a23b44a6d853ffcd903e6eb636125acee4a43ab24c9b3d65d8d596df66833718f97422eff9c61b97c' + '016094e0ac80817c8c1eb8a52a527c8a673b3ee904f2c04bef0304b5dfe1c778a34a2d5321cc5540a1dfe2e14dc878c44a1e54fd0263aca3917600827c6d9059' + 'b13a2ac8f89b14ca3db03809ebb8b90662e1473dc26f4dca05047238030983e94409d18c6743c74c85e1d839b8270a4af176f5d2436fb22c6355994d8dee5a6c' + 'ba479ae90dd8853ae7a2d18728322524c3af1cc0d2728c21e63c866e330d00dbee34c06ee6348c8422bd10f886bd20781d147e640807fa23aad9ed8d4b6b3bb3' + '8fdd6707ba72c289de129e406cbeecc05959786bd0e83e7489006189be16a9258a74395aaf62c0c748d4cf5ada95f99c9210615ef5d10ef1fdf4534a6f7e3d71' + '257d5047ac2d831225359fc7b05c9cf8d9efc58eb0273bf74ad5d5c1bec409abe5999db48305c3bac516cc03e0180afcd4b555bf9388231c0de8f86e68ec9070' + 'cade7fcc50a77a4e28e8442f6426e959722a2b4fd2a5411d2baa9efe8956f902e789376544c3185368f845dfc69719808cb948193a6584c95ce0be31c21779fe') +validpgpkeys=('A1EB079B8D3EB92B4EBD3139663AF51BD5E4D8D5') # Brent Cook + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/01-use-debian-ntp-pool.patch || true + rm -v debian/patches/03-kfreebsd.patch || true + rm -v debian/patches/04-ntpd-manpage.patch || true + rm -v debian/patches/fix_gcc-10.patch || true + + quilt push -av + fi + patch -Np1 -i $srcdir/ntp-user.patch + autoreconf -vif +} + +build() { + cd ${pkgname}-${pkgver} + autoreconf -fi + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-privsep-user=ntp \ + --localstatedir=/var \ + --with-adjtimex + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + install -d "$pkgdir"/var/empty + + rm "${pkgdir}/etc/ntpd.conf" + install -Dm 644 "${srcdir}/ntpd.conf.libre" "${pkgdir}/etc/ntpd.conf" + + rmdir "${pkgdir}/var/run" + install -d "${pkgdir}/var/lib/ntp" + install -Dm 644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" + + install -Dm 644 "${srcdir}/ntpd.confd" "${pkgdir}/etc/conf.d/ntpd" + install -Dm 755 "${srcdir}/ntpd.initd" "${pkgdir}/etc/init.d/ntpd" + + install -D -m 755 "$srcdir/ntpd.run" "$pkgdir/etc/sv/ntpd/run" + install -D -m 644 "$srcdir/ntpd.conf" "$pkgdir/etc/sv/ntpd/conf" +} diff --git a/openntpd/ntp-user.patch b/openntpd/ntp-user.patch new file mode 100644 index 0000000..fcaf2f2 --- /dev/null +++ b/openntpd/ntp-user.patch @@ -0,0 +1,13 @@ +diff --git a/src/ntpd.h b/src/ntpd.h +index 39b8e7bf..8c271e82 100644 +--- a/src/ntpd.h ++++ b/src/ntpd.h +@@ -36,7 +36,7 @@ + #define MAXIMUM(a, b) ((a) > (b) ? (a) : (b)) + + #ifndef NTPD_USER +-#define NTPD_USER "_ntp" ++#define NTPD_USER "ntp" + #endif + + #ifndef SYSCONFDIR diff --git a/openntpd/ntpd.conf b/openntpd/ntpd.conf new file mode 100644 index 0000000..35c03b9 --- /dev/null +++ b/openntpd/ntpd.conf @@ -0,0 +1,5 @@ +# See ntpd(8) man page ... some popular options: +# -s Set the time immediately at startup +# (Note: may cause up to a 15 second startup delay +# if ntp servers not reachable) +NTPD_OPTS="-d -s" diff --git a/openntpd/ntpd.conf.libre b/openntpd/ntpd.conf.libre new file mode 100644 index 0000000..8810032 --- /dev/null +++ b/openntpd/ntpd.conf.libre @@ -0,0 +1,6 @@ +# $OpenBSD: ntpd.conf,v 1.14 2015/07/15 20:28:37 ajacoutot Exp $ +# +# See ntpd.conf(5) and /etc/examples/ntpd.conf + +servers pool.ntp.org +sensor * diff --git a/openntpd/ntpd.confd b/openntpd/ntpd.confd new file mode 100644 index 0000000..ccd4545 --- /dev/null +++ b/openntpd/ntpd.confd @@ -0,0 +1,7 @@ +# /etc/conf.d/ntpd: config file for openntpd's ntpd + +# See ntpd(8) man page ... some popular options: +# -s Set the time immediately at startup +# (Note: may cause up to a 15 second startup delay +# if ntp servers not reachable) +NTPD_OPTS="" diff --git a/openntpd/ntpd.initd b/openntpd/ntpd.initd new file mode 100644 index 0000000..5baa644 --- /dev/null +++ b/openntpd/ntpd.initd @@ -0,0 +1,18 @@ +#!/sbin/openrc-run +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +name="OpenNTPD" +command="/usr/sbin/ntpd" +pidfile="/run/ntpd.pid" +command_args="-p ${pidfile} ${NTPD_OPTS}" + +depend() { + need net + after ntp-client + use dns logger +} + +start_pre() { + checkpath --directory --owner root:ntp --mode 0755 /var/lib/ntp +} diff --git a/openntpd/ntpd.run b/openntpd/ntpd.run new file mode 100644 index 0000000..b8e38e5 --- /dev/null +++ b/openntpd/ntpd.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r conf ] && . ./conf +exec ntpd ${NTPD_OPTS} 2>&1 diff --git a/openntpd/openntpd.install b/openntpd/openntpd.install new file mode 100644 index 0000000..49cb19c --- /dev/null +++ b/openntpd/openntpd.install @@ -0,0 +1,15 @@ +post_install() { + getent group ntp &>/dev/null || groupadd -g 87 ntp >/dev/null + getent passwd ntp &>/dev/null || useradd -u 87 -g ntp -d /var/lib/ntp \ + -c 'Network Time Protocol' -s /bin/nologin ntp >/dev/null + ntp_shell=$(getent passwd ntp | cut -d: -f7) + if [ "$ntp_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin ntp &>/dev/null + fi + # fix /var/db/ntpd.drift is empty + echo "0.0" > /var/db/ntpd.drift +} + +post_upgrade(){ + post_install +} diff --git a/openrsync/PKGBUILD b/openrsync/PKGBUILD new file mode 100644 index 0000000..ed973f4 --- /dev/null +++ b/openrsync/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=openrsync +pkgver=0.5.0 +pkgrel=1 +pkgdesc="OpenBSD implementation of rsync" +arch=('i686' 'x86_64') +url='https://github.com/kristapsdz/openrsync' +license=('ISC') +depends=('glibc') +source=("${pkgname}-${pkgver}.zip::https://github.com/kristapsdz/openrsync/archive/refs/heads/master.zip") +sha512sums=('022dc0d558e06dfacdc64a6f4a9497d159fae2560fa908d333ba6de979cffa6bbec75f5f189084333a6a55a826dd40b2b0b7dc5304f486576324b60b75e4052d') + +prepare() { + mv "${pkgname}-master" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + + # Remove forced debug + sed -i 's/CFLAGS="${CFLAGS} -g /CFLAGS="${CFLAGS} /' configure + + # LDFLAGS + sed -i 's/$(CC) -o $@ /$(CC) $(LDFLAGS) -o $@ /' Makefile + + # Fix install permissions + sed -i 's/"${INSTALL} -m 0555"/"${INSTALL} -m755"/' configure + sed -i 's/"${INSTALL} -m 0444"/"${INSTALL} -m644"/' configure +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure LDFLAGS="$LDFLAGS" MANDIR=/usr/share/man PREFIX=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE.md -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/openscenegraph/PKGBUILD b/openscenegraph/PKGBUILD new file mode 100644 index 0000000..5a1f846 --- /dev/null +++ b/openscenegraph/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=openscenegraph +pkgver=3.6.5 +_debver=$pkgver +_debrel=7 +pkgrel=3 +pkgdesc="Free software high performance real-time graphics toolkit" +url='http://www.openscenegraph.org' +arch=('i686' 'x86_64') +license=('custom:OSGPL' 'wxWindows-Library-3.1' 'LGPL-2.1') +depends=('fontconfig' 'mesa-libgl' 'libxinerama') +makedepends=('cmake' 'ffmpeg' 'gst-plugins-base-libs' 'jasper' 'librsvg-legacy' 'libvncserver' 'poppler-glib' 'quilt') +optdepends=('ffmpeg' 'gst-plugins-base-libs' 'jasper' 'librsvg-legacy' 'libvncserver' 'poppler-glib') +source=("https://github.com/openscenegraph/OpenSceneGraph/archive/OpenSceneGraph-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/o/openscenegraph/openscenegraph_${_debver}+dfsg1-${_debrel}.debian.tar.xz") +sha512sums=('7002fa30a3bcf6551d2e1050b4ca75a3736013fd190e4f50953717406864da1952deb09f530bc8c5ddf6e4b90204baec7dbc283f497829846d46d561f66feb4b' + 'bf327b992897034fc0697d56118ec82ccf89ccc6dff8ad23718d9c47b70b7d3e87c28536b5e6e6b1919ac2ec563eceac4952c4a1775b00107b6b64594c3dbbb8') + +prepare() { + mv "OpenSceneGraph-OpenSceneGraph-${pkgver}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -S ${pkgname}-${pkgver} \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_LIBDIR=lib + make -C build +} + +package() { + make -C build DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/openslp/PKGBUILD b/openslp/PKGBUILD new file mode 100644 index 0000000..bf55fff --- /dev/null +++ b/openslp/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=openslp +pkgver=2.0.0 +pkgrel=2 +pkgdesc="Free-software implementation of Service Location Protocol" +arch=('i686' 'x86_64') +url="http://www.openslp.org" +license=('Modified-BSD') +depends=('bash' 'libressl') +makedepends=('doxygen') +backup=('etc/slp.conf' 'etc/slp.reg' 'etc/slp.spi') +options=(!makeflags) +source=(https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz + openslp-2.0.0-null-pointer-deref.patch + openslp-2.0.0-openssl-1.1-fix.patch + slpd.initd + slpd.run) +sha512sums=('e7627417d45d5d0cc83d6e13d62fe192702ce7b763f1b4fb51aa5da8285405b16a34c3ac4f0a1ecffdf59557b29ec7d24925941e56ddee277c8897162f597ade' + 'aee5a5f0b65d423b30675ba13042e38261e15151ee31accc84b170c44a90293be5e8253a3cd7c0d8f94039988a303574e59c290ee07e0bc778ad856df5978451' + 'd8053b242d79a15bffac137518ef9a3fd39b43335089b29f49b05d5edde95f9f06b73245f5688fd199fcd9e81ef66ac9151e8ef5882a05988c4c12b6c1240ab1' + 'f76e98cfd48303d3095f2c9af0e81da7fd2def6d62fcadb881e64dd565af354cff65325d678c6d78cb62fffab67723513c1818a5f5c7606f21aa3a651bd8722b' + '1c4660857bed0872411052a467398a28e012d6303d365f9fa278bdb07a6e4c98ae0b07abfff6f809f15e4ecdc120d3d57c79585f69df3fa5cfac1386810b77e6') + +prepare() { + cd $pkgname-$pkgver + sed -i 's|$(datadir)/doc|$(docdir)|' doc/Makefile.in + patch -Np1 -i ${srcdir}/openslp-2.0.0-null-pointer-deref.patch + patch -Np1 -i ${srcdir}/openslp-2.0.0-openssl-1.1-fix.patch +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --docdir=/usr/share/doc/openslp-${pkgver} \ + --enable-slpv1 \ + --enable-slpv2-security # service would fail to start without this + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + make DESTDIR="${pkgdir}" INSTALL_DATA="cp -r" install-docs + rm "${pkgdir}/usr/share/doc/openslp-${pkgver}/openslp-doxy-${pkgver}.tar.gz" + + # license + install -Dm0644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + + # services + install -Dm0755 "${srcdir}/slpd.initd" "${pkgdir}/etc/init.d/slpd" + install -Dm0755 "$srcdir/slpd.run" "${pkgdir}/etc/sv/slpd/run" +} diff --git a/openslp/openslp-2.0.0-null-pointer-deref.patch b/openslp/openslp-2.0.0-null-pointer-deref.patch new file mode 100644 index 0000000..3c07d6e --- /dev/null +++ b/openslp/openslp-2.0.0-null-pointer-deref.patch @@ -0,0 +1,12 @@ +diff -up openslp-2.0.0/common/slp_xmalloc.c.orig openslp-2.0.0/common/slp_xmalloc.c +--- openslp-2.0.0/common/slp_xmalloc.c.orig 2012-12-07 01:52:08.000000000 +0100 ++++ openslp-2.0.0/common/slp_xmalloc.c 2016-05-23 12:58:57.953532979 +0200 +@@ -203,6 +203,8 @@ void * _xrealloc(const char * file, int + if (x->size != size) + { + newptr = _xmalloc(file, line, size); ++ if (newptr == 0) ++ return 0; + memcpy(newptr, ptr, x->size); + _xfree(file, line, x); + } diff --git a/openslp/openslp-2.0.0-openssl-1.1-fix.patch b/openslp/openslp-2.0.0-openssl-1.1-fix.patch new file mode 100644 index 0000000..78dc6c5 --- /dev/null +++ b/openslp/openslp-2.0.0-openssl-1.1-fix.patch @@ -0,0 +1,25 @@ +diff -up openslp-2.0.0/common/slp_crypto.c.orig openslp-2.0.0/common/slp_crypto.c +--- openslp-2.0.0/common/slp_crypto.c.orig 2012-12-07 21:13:28.000000000 +0100 ++++ openslp-2.0.0/common/slp_crypto.c 2017-02-22 11:16:11.620835724 +0100 +@@ -88,11 +88,16 @@ SLPCryptoDSAKey * SLPCryptoDSAKeyDup(SLP + result = DSA_new(); + if (result) + { +- result->p = BN_dup(dsa->p); +- result->q = BN_dup(dsa->q); +- result->g = BN_dup(dsa->g); +- result->priv_key = BN_dup(dsa->priv_key); +- result->pub_key = BN_dup(dsa->pub_key); ++ const BIGNUM *p, *q, *g; ++ const BIGNUM *priv_key, *pub_key; ++ ++ DSA_get0_pqg(dsa, &p, &q, &g); ++ DSA_get0_key(dsa, &pub_key, &priv_key); ++ ++ /* would be nice to check return values, ++ * but original code didn't do that either... */ ++ DSA_set0_pqg(result, BN_dup(p), BN_dup(q), BN_dup(g)); ++ DSA_set0_key(result, BN_dup(pub_key), BN_dup(priv_key)); + } + return result; + } diff --git a/openslp/slpd.initd b/openslp/slpd.initd new file mode 100644 index 0000000..1bbd075 --- /dev/null +++ b/openslp/slpd.initd @@ -0,0 +1,88 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + need net +} + +# +# Does nothing if a route exists that supports multicast traffic. +# If no routes supporting multicast traffic exists, the function +# tries to add one. A 0 is returned on success and a 1 on failure. +# One parameter must be passed in. This variable determins verbosity. +# If parameter is non-zero debugging will appear. +# +multicast_route_set() { + PING_OPTIONS_1='-c1 -w1' + PING_OPTIONS_2='-c1 -i1' + MULTICAST_ADDRESS='239.255.255.253' + TMP_FILE=/tmp/route.check + PING_ERROR_NO_ROUTE='unreachable' + + MSG_FAILED_TO_FIND='Failed to Detect Multicast Route' + MSG_SUCCESS_ON_FIND='Multicast Route Enabled' + MSG_ADDING_ROUTE='Attempting to Add Multicast Route ...' + MSG_FAILED_TO_ADD=' FAILED - Route NOT Added.' + MSG_SUCCES_ON_ADD=' SUCCESS - Route Added.' + + CMD_GET_INTERFACE="netstat -i | awk 'BEGIN{}(NR>2)&&(!/^lo*/){print \$1;exit}'" + CMD_ADD_ROUTE="route add -net 224.0.0.0 netmask 240.0.0.0" + + ping $PING_OPTIONS_1 $MULTICAST_ADDRESS 2> $TMP_FILE 1> /dev/null + if [ $? = 2 ]; then + ping $PING_OPTIONS_2 $MULTICAST_ADDRESS 2> $TMP_FILE 1> /dev/null + fi + + grep $PING_ERROR_NO_ROUTE $TMP_FILE > /dev/null 2>&1 + err_unreachable_found=$? + + #If errors, add route. Otherwise, do nothing + if [ -s $TMP_FILE ] && [ $err_unreachable_found = 0 ]; then + + if [ $1 != 0 ]; then + echo $MSG_FAILED_TO_FIND + echo $MSG_ADDING_ROUTE + fi + + $CMD_ADD_ROUTE `eval $CMD_GET_INTERFACE` > /dev/null 2>&1 + retval=$? + if [ $1 != 0 ]; then + + if [ $retval = 0 ]; then + echo $MSG_SUCCES_ON_ADD + else + echo $MSG_FAILED_TO_ADD + fi + fi + else + if [ $1 != 0 ]; then + echo -n $MSG_SUCCESS_ON_FIND + fi + retval=0 + fi + + rm -f $TMP_FILE # Clean up + return $retval +} + +checkconfig() { + multicast_route_set 0 + if [ $? -ne 0 ]; then + eerror "No route available for multicast traffic!" + return 1 + fi +} + +start() { + checkconfig || return 1 + ebegin "Starting slpd" + start-stop-daemon --start --quiet --exec /usr/sbin/slpd --pidfile /var/run/slpd.pid + eend $? +} + +stop() { + ebegin "Stopping slpd" + start-stop-daemon --stop --quiet --pidfile /var/run/slpd.pid + eend $? +} diff --git a/openslp/slpd.run b/openslp/slpd.run new file mode 100644 index 0000000..076010b --- /dev/null +++ b/openslp/slpd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/slpd diff --git a/opensmtpd-filter-rspamd/PKGBUILD b/opensmtpd-filter-rspamd/PKGBUILD new file mode 100644 index 0000000..d1d29dc --- /dev/null +++ b/opensmtpd-filter-rspamd/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +_pkgname=filter-rspamd +pkgname=opensmtpd-$_pkgname +pkgver=0.1.8 +pkgrel=1 +pkgdesc="OpenSMTPD filter integration for Rspamd" +arch=('i686' 'x86_64') +url='https://github.com/poolpOrg/filter-rspamd' +license=('ISC') +depends=('glibc') +makedepends=('gcc-go') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/poolpOrg/filter-rspamd/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('54dc5ec496251e6a223ac05909f4d940c79ce2487e40e30a430da24fcc211983c40355fd91a609e7bb109be49051ca81f092e297f5c8c1e5a3e91a188b948f04') + +export GOOS=linux +case "$CARCH" in + x86_64) export GOARCH=amd64 ;; + i686) export GOARCH=386 GO386=387 ;; +esac + +build() { + cd $_pkgname-$pkgver + export CGO_CPPFLAGS="${CPPFLAGS}" + export CGO_CFLAGS="${CFLAGS}" + export CGO_CXXFLAGS="${CXXFLAGS}" + export CGO_LDFLAGS="${LDFLAGS}" + export GOFLAGS="-buildmode=pie -trimpath -ldflags \"-extldflags $LDFLAGS\"" + go build +} + +package() { + cd $_pkgname-$pkgver + mv "$_pkgname-$pkgver" "$_pkgname" + install -D filter-rspamd -t "$pkgdir"/usr/lib/smtpd/opensmtpd + install -Dm644 README.md -t "$pkgdir"/usr/share/doc/${pkgname} + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/${pkgname} +} diff --git a/opensmtpd-filter-senderscore/PKGBUILD b/opensmtpd-filter-senderscore/PKGBUILD new file mode 100644 index 0000000..e48bd12 --- /dev/null +++ b/opensmtpd-filter-senderscore/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +_pkgname=filter-senderscore +pkgname=opensmtpd-$_pkgname +pkgver=0.1.2 +pkgrel=1 +pkgdesc="OpenSMTPD filter integration for Sender Score" +arch=('i686' 'x86_64') +url='https://github.com/poolpOrg/filter-senderscore' +license=('ISC') +depends=('glibc') +makedepends=('gcc-go') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/poolpOrg/filter-senderscore/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('92c5e87eb3cd5fdcd1e54e46887ba14e331f665d4edbefc27ce6f0c93f58a60b1e525b696653274cfdd14eaaff4d1e034f92368d5e4a27ecec28ddd951882867') + +export GOOS=linux +case "$CARCH" in + x86_64) export GOARCH=amd64 ;; + i686) export GOARCH=386 GO386=387 ;; +esac + +build() { + cd $_pkgname-$pkgver + export CGO_CPPFLAGS="${CPPFLAGS}" + export CGO_CFLAGS="${CFLAGS}" + export CGO_CXXFLAGS="${CXXFLAGS}" + export CGO_LDFLAGS="${LDFLAGS}" + export GOFLAGS="-buildmode=pie -trimpath -ldflags \"-extldflags $LDFLAGS\"" + go build $_pkgname.go +} + +package() { + cd $_pkgname-$pkgver + install -D $_pkgname -t "$pkgdir"/usr/lib/smtpd/opensmtpd + install -Dm644 README.md -t "$pkgdir"/usr/share/doc/${pkgname} + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/${pkgname} +} diff --git a/opensmtpd/PKGBUILD b/opensmtpd/PKGBUILD new file mode 100644 index 0000000..96a4106 --- /dev/null +++ b/opensmtpd/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=opensmtpd +pkgver=6.8.0p2 +pkgrel=3 +pkgdesc="Free and libre implementation of the server-side SMTP protocol" +arch=('i686' 'x86_64') +url='https://www.opensmtpd.org/' +license=('Original-BSD' 'Modified-BSD' 'Simplified-BSD' 'ISC' 'Public-Domain') +depends=('libevent' 'libressl' 'libxcrypt' 'zlib') +optdepends=('opensmtpd-filter-rspamd: rspamd integration' + 'opensmtpd-filter-senderscore: senderscore integration') +provides=('smtp-server' 'smtp-forwarder') +conflicts=('smtp-server' 'smtp-forwarder') +install=${pkgname}.install +backup=('etc/smtpd/smtpd.conf' + 'etc/smtpd/aliases') +options=(emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/o/opensmtpd/${pkgname}_${pkgver}.orig.tar.gz" + "smtpd.initd" + "smtpd.run") +sha512sums=('48f152b75575146fdd09bdf47123041ea62fefb6e5de33a69826bf91a2126a918f8db1caffadb2f142a1a21de8126d492de88cb65bdf169e61c0b22d3e78d290' + 'be4f146ba35d5a362d946a5e96817675316a2f5f8b80ee88ca77cc239c8d9c9c11839c88dae41eee9fd32b6b3813e90feb90727fb2b1650b005ea53c6adf3658' + 'a360b44d60538c3c73fad575cb6cbbc23720f402c97071da443c6a6c0d780290f594584fa59576473aa5bf77dc01b3e91835345e62bb68f3894beeb742efb4bd') + +prepare() { + sed -ri 's,/etc/mail,/etc/smtpd,g' ${pkgname}-${pkgver}/usr.sbin/smtpd/smtpd.conf +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc/smtpd \ + --libexecdir=/usr/libexec/smtpd \ + --with-path-mbox=/var/mail \ + --with-path-empty=/var/empty \ + --with-path-socket=/run \ + --with-path-CAfile=/etc/ssl/certs/ca-certificates.crt \ + --with-user-smtpd=smtpd \ + --with-user-queue=smtpq \ + --with-group-queue=smtpq \ + --with-cflags='-I/usr/include/libressl -L/usr/lib/libressl -Wl,-rpath=/usr/lib/libressl' + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install SMTPD_QUEUE_USER=92 + + ln -s /usr/bin/smtpctl "${pkgdir}"/usr/bin/sendmail + ln -s /usr/bin/smtpctl "${pkgdir}"/usr/bin/mailq + ln -s /usr/bin/smtpctl "${pkgdir}"/usr/bin/newaliases + ln -s /usr/bin/smtpctl "${pkgdir}"/usr/bin/makemap + + install -Dm644 etc/aliases -t "${pkgdir}"/etc/smtpd/ + + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname}/ + + install -Dm 755 "${srcdir}/smtpd.initd" "${pkgdir}/etc/init.d/smtpd" + install -Dm 755 "${srcdir}/smtpd.run" "${pkgdir}/etc/sv/smtpd/run" +} diff --git a/opensmtpd/opensmtpd.install b/opensmtpd/opensmtpd.install new file mode 100644 index 0000000..b496814 --- /dev/null +++ b/opensmtpd/opensmtpd.install @@ -0,0 +1,49 @@ +post_install() { + # create users + if ! getent group smtpd &>/dev/null; then + groupadd -r smtpd >/dev/null + fi + if ! getent group smtpq &>/dev/null; then + groupadd -r smtpq >/dev/null + fi + if ! getent passwd smtpd &>/dev/null; then + useradd -r -c "SMTP Daemon" -d /var/empty --uid 91 --gid smtpd --shell /bin/nologin smtpd >/dev/null + fi + if ! getent passwd smtpq &>/dev/null; then + useradd -r -c "SMTP Queue" -d /var/empty --uid 92 --gid smtpq --shell /bin/nologin smtpq >/dev/null + fi + # Fix ownership of smtpctl + chown smtpd:smtpq /usr/sbin/smtpctl + chmod 2555 /usr/sbin/smtpctl +} + +post_upgrade() { + if (( $(vercmp $2 6.0.3p1-2.hyperbola3) < 0 )); then + post_remove + fi + post_install + if (( $(vercmp $2 5.3.3p1-1) < 0 )); then + echo 'Configuration files have been moved to /etc/smtpd.' + echo 'New users have been added.' + echo 'Check your configuration!' + elif (( $(vercmp $2 5.4) < 0 )); then + echo 'User smtpf is no more required. It will be removed!' + echo 'Check your configuration!' + userdel -f smtpf >/dev/null + fi +} + +post_remove() { + if getent passwd smtpd &>/dev/null; then + userdel smtpd >/dev/null + fi + if getent passwd smtpq &>/dev/null; then + userdel smtpq >/dev/null + fi + if getent group smtpd &>/dev/null; then + groupdel smtpd >/dev/null + fi + if getent group smtpq &>/dev/null; then + groupdel smtpq >/dev/null + fi +} diff --git a/opensmtpd/smtpd.initd b/opensmtpd/smtpd.initd new file mode 100644 index 0000000..8bb8758 --- /dev/null +++ b/opensmtpd/smtpd.initd @@ -0,0 +1,11 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/usr/sbin/smtpd" +pidfile="/run/smtpd.pid" +description="SMTP daemon from OpenBSD" + +depend() { + need net +} diff --git a/opensmtpd/smtpd.run b/opensmtpd/smtpd.run new file mode 100644 index 0000000..ee79de9 --- /dev/null +++ b/opensmtpd/smtpd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/smtpd -F 2>&1 diff --git a/opensp/PKGBUILD b/opensp/PKGBUILD new file mode 100644 index 0000000..ab96fbf --- /dev/null +++ b/opensp/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=opensp +pkgver=1.5.2 +pkgrel=1 +pkgdesc="A library and a set of tools for validating, parsing and manipulating SGML and XML documents" +arch=('i686' 'x86_64') +url="http://openjade.sourceforge.net/" +license=('Expat') +depends=('sgml-common' 'perl') +makedepends=('xmlto' 'docbook-xsl') +source=("https://downloads.sourceforge.net/project/openjade/opensp/$pkgver/OpenSP-$pkgver.tar.gz") +sha512sums=('a7dcc246ba7f58969ecd6d107c7b82dede811e65f375b7aa3e683621f2c6ff3e7dccefdd79098fcadad6cca8bb94c2933c63f4701be2c002f9a56f1bbe6b047e') + +build() { + cd OpenSP-$pkgver + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --disable-nls \ + --enable-http \ + --enable-default-catalog=/etc/sgml/catalog \ + --enable-default-search-path=/usr/share/sgml:/usr/share/xml \ + --enable-xml-messages + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +check() { + cd OpenSP-$pkgver + make check || /bin/true +} + +package() { + cd OpenSP-$pkgver + make DESTDIR="${pkgdir}" install + + # add symlinks for compatibility with jade, see FS#49775 + for file in nsgmls sgmlnorm spam spcat spent sx ; do + ln -s o$file "$pkgdir"/usr/bin/$file + echo ".so man1/o${file}.1" > "$pkgdir"/usr/share/man/man1/${file}.1 + done + ln -v -sf libosp.so "$pkgdir"/usr/lib/libsp.so + + # Rename sx to sgml2xml + mv "$pkgdir"/usr/bin/sx "$pkgdir"/usr/bin/sgml2xml + mv "$pkgdir"/usr/share/man/man1/{sx,sgml2xml}.1 + + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/openttd-legacy/PKGBUILD b/openttd-legacy/PKGBUILD new file mode 100644 index 0000000..72820b6 --- /dev/null +++ b/openttd-legacy/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +_realpkgname=openttd +pkgname=$_realpkgname-legacy +pkgver=13.4 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A free and libre transport-simulation game (legacy version)" +arch=('i686' 'x86_64') +url='https://github.com/OpenTTD/OpenTTD' +license=('GPL-2') +provides=('openttd') +conflicts=('openttd') +depends=('libpng' 'sdl2' 'icu' 'fontconfig' 'lzo' + 'hicolor-icon-theme' 'desktop-file-utils' 'xz' 'fluidsynth' + 'openttd-opengfx' 'openttd-opensfx' 'openttd-openmsx') +makedepends=('quilt' 'cmake' 'ninja') +groups=('games') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/o/openttd/openttd_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/o/openttd/openttd_${_debver}-${_debrel}.debian.tar.xz" + "remove-online-content.patch") +sha512sums=('84f57a39c0dade44f0e6153dff7a40eec0da8e2f892ce870d5f9e037f80daa5c7c46ff786fa51c3671366dd5056504cd7ccbc1c4e5bce8b2c5575533b454c001' + '05918ada5220187783e5d9cfc0b4dfba049acbd45cc0420c1b09c8274b685c989886f84a950e1f5689e67aa0fa3f46da63f1a2b91f1f48943ef3af346a26f404' + '93b25dae84f04253da81e01b11de513244e794a8d102b1546d48bcb277be53f9b070039df0da4dd82c48bb1c3800d94447a20497261a59a2f79196013d022a0f') + +prepare() { + cd ${_realpkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/remove-online-content.patch +} + +build() { + cmake \ + -B build \ + -S $_realpkgname-$pkgver \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_BINDIR=games \ + -D CMAKE_INSTALL_DATADIR=/usr/share/games \ + -G Ninja + ninja -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 $srcdir/$_realpkgname-$pkgver/COPYING.md -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/openttd-legacy/remove-online-content.patch b/openttd-legacy/remove-online-content.patch new file mode 100644 index 0000000..dd0c437 --- /dev/null +++ b/openttd-legacy/remove-online-content.patch @@ -0,0 +1,175 @@ +--- a/src/intro_gui.cpp 2023-07-30 01:01:44.000000000 +0200 ++++ b/src/intro_gui.cpp 2024-01-18 02:55:03.474253466 +0100 +@@ -459,12 +459,10 @@ + + NWidget(NWID_SPACER), SetMinimalSize(0, 6), + +- /* 'Check Online Content' and 'NewGRF Settings' buttons */ +- NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), +- NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_CONTENT_DOWNLOAD), SetMinimalSize(158, 12), +- SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), SetPadding(0, 0, 0, 10), SetFill(1, 0), +- NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GRF_SETTINGS), SetMinimalSize(158, 12), +- SetDataTip(STR_INTRO_NEWGRF_SETTINGS, STR_INTRO_TOOLTIP_NEWGRF_SETTINGS), SetPadding(0, 10, 0, 0), SetFill(1, 0), ++ /* 'NewGRF Settings' button */ ++ NWidget(NWID_HORIZONTAL), ++ NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_SGI_GRF_SETTINGS), SetMinimalSize(316, 12), ++ SetDataTip(STR_INTRO_NEWGRF_SETTINGS, STR_INTRO_TOOLTIP_NEWGRF_SETTINGS), SetPadding(0, 10, 0, 10), SetFill(1, 0), + EndContainer(), + + NWidget(NWID_SPACER), SetMinimalSize(0, 6), +--- a/src/network/core/config.cpp 2023-07-30 01:01:44.000000000 +0200 ++++ b/src/network/core/config.cpp 2024-01-18 13:07:41.058571120 +0100 +@@ -55,7 +55,7 @@ + */ + const char *NetworkContentServerConnectionString() + { +- return GetEnv("OTTD_CONTENT_SERVER_CS", "content.openttd.org"); ++ return GetEnv("OTTD_CONTENT_SERVER_CS", ""); + } + + /** +--- a/src/network/core/config.h 2023-07-30 01:01:44.000000000 +0200 ++++ b/src/network/core/config.h 2024-01-18 10:48:04.285056804 +0100 +@@ -18,13 +18,13 @@ + const char *NetworkContentMirrorConnectionString(); + + /** URL of the HTTP mirror system */ +-static const char * const NETWORK_CONTENT_MIRROR_URL = "/bananas"; ++static const char * const NETWORK_CONTENT_MIRROR_URL = ""; + + static const uint16 NETWORK_COORDINATOR_SERVER_PORT = 3976; ///< The default port of the Game Coordinator server (TCP) + static const uint16 NETWORK_STUN_SERVER_PORT = 3975; ///< The default port of the STUN server (TCP) + static const uint16 NETWORK_TURN_SERVER_PORT = 3974; ///< The default port of the TURN server (TCP) +-static const uint16 NETWORK_CONTENT_SERVER_PORT = 3978; ///< The default port of the content server (TCP) +-static const uint16 NETWORK_CONTENT_MIRROR_PORT = 80; ///< The default port of the content mirror (TCP) ++static const uint16 NETWORK_CONTENT_SERVER_PORT = 0; ///< The default port of the content server (TCP) ++static const uint16 NETWORK_CONTENT_MIRROR_PORT = 0; ///< The default port of the content mirror (TCP) + static const uint16 NETWORK_DEFAULT_PORT = 3979; ///< The default port of the game server (TCP & UDP) + static const uint16 NETWORK_ADMIN_PORT = 3977; ///< The default port for admin network + static const uint16 NETWORK_DEFAULT_DEBUGLOG_PORT = 3982; ///< The default port debug-log is sent to (TCP) +--- a/src/newgrf_gui.cpp 2023-07-30 01:01:44.000000000 +0200 ++++ b/src/newgrf_gui.cpp 2024-01-20 03:46:25.387026148 +0100 +@@ -763,15 +763,6 @@ + *size = maxdim(d, *size); + break; + } +- +- case WID_NS_CONTENT_DOWNLOAD: +- case WID_NS_CONTENT_DOWNLOAD2: { +- Dimension d = GetStringBoundingBox(STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON); +- *size = maxdim(d, GetStringBoundingBox(STR_INTRO_ONLINE_CONTENT)); +- size->width += padding.width; +- size->height += padding.height; +- break; +- } + } + } + +@@ -1131,17 +1122,6 @@ + } + break; + +- case WID_NS_CONTENT_DOWNLOAD: +- case WID_NS_CONTENT_DOWNLOAD2: +- if (!_network_available) { +- ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR); +- } else { +- this->CloseChildWindows(WC_QUERY_STRING); // Remove the parameter query window +- +- ShowMissingContentWindow(this->actives); +- } +- break; +- + case WID_NS_RESCAN_FILES: + case WID_NS_RESCAN_FILES2: + RequestNewGRFScan(this); +@@ -1315,14 +1295,7 @@ + if (has_missing || has_compatible) { + widget_data = STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON; + tool_tip = STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP; +- } else { +- widget_data = STR_INTRO_ONLINE_CONTENT; +- tool_tip = STR_INTRO_TOOLTIP_ONLINE_CONTENT; + } +- this->GetWidget(WID_NS_CONTENT_DOWNLOAD)->widget_data = widget_data; +- this->GetWidget(WID_NS_CONTENT_DOWNLOAD)->tool_tip = tool_tip; +- this->GetWidget(WID_NS_CONTENT_DOWNLOAD2)->widget_data = widget_data; +- this->GetWidget(WID_NS_CONTENT_DOWNLOAD2)->tool_tip = tool_tip; + + this->SetWidgetDisabledState(WID_NS_PRESET_SAVE, has_missing); + } +@@ -1832,12 +1805,8 @@ + SetDataTip(STR_NEWGRF_SETTINGS_UPGRADE, STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP), + EndContainer(), + +- NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPadding(2, 2, 2, 2), +- NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_RESCAN_FILES2), SetFill(1, 0), SetResize(1, 0), +- SetDataTip(STR_NEWGRF_SETTINGS_RESCAN_FILES, STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP), +- NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_CONTENT_DOWNLOAD2), SetFill(1, 0), SetResize(1, 0), +- SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), +- EndContainer(), ++ NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_RESCAN_FILES2), SetFill(1, 0), SetResize(1, 0), ++ SetDataTip(STR_NEWGRF_SETTINGS_RESCAN_FILES, STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP), + EndContainer(), + EndContainer(), + }; +@@ -1866,11 +1835,8 @@ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPadding(2, 2, 2, 2), SetPIP(0, NWidgetNewGRFDisplay::INTER_COLUMN_SPACING, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_ADD), SetFill(1, 0), SetResize(1, 0), + SetDataTip(STR_NEWGRF_SETTINGS_ADD, STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP), +- NWidget(NWID_VERTICAL), +- NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_RESCAN_FILES), SetFill(1, 0), SetResize(1, 0), +- SetDataTip(STR_NEWGRF_SETTINGS_RESCAN_FILES, STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP), +- NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_CONTENT_DOWNLOAD), SetFill(1, 0), SetResize(1, 0), +- SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), ++ NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NS_RESCAN_FILES), SetFill(1, 0), SetResize(1, 0), ++ SetDataTip(STR_NEWGRF_SETTINGS_RESCAN_FILES, STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP), + EndContainer(), + EndContainer(), + EndContainer(), +--- a/src/ai/ai_gui.cpp 2023-07-30 01:01:44.000000000 +0200 ++++ b/src/ai/ai_gui.cpp 2024-01-20 04:26:25.040964928 +0100 +@@ -705,7 +705,6 @@ + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + EndContainer(), +- NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_AIC_CONTENT_DOWNLOAD), SetFill(1, 0), SetMinimalSize(279, 0), SetPadding(0, 7, 9, 7), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), + EndContainer(), + }; + +--- a/src/fios_gui.cpp 2023-07-30 01:01:44.000000000 +0200 ++++ b/src/fios_gui.cpp 2024-01-20 04:29:24.551228214 +0100 +@@ -106,11 +106,6 @@ + EndContainer(), + NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SL_SCROLLBAR), + EndContainer(), +- /* Online Content button */ +- NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SL_CONTENT_DOWNLOAD_SEL), +- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_CONTENT_DOWNLOAD), SetResize(1, 0), +- SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), +- EndContainer(), + EndContainer(), + + /* Right side : game details */ +@@ -164,10 +159,8 @@ + EndContainer(), + NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SL_SCROLLBAR), + EndContainer(), +- /* Online Content and Load button */ ++ /* Load button */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), +- NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_CONTENT_DOWNLOAD), SetResize(1, 0), SetFill(1, 0), +- SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_LOAD_BUTTON), SetResize(1, 0), SetFill(1, 0), + SetDataTip(STR_SAVELOAD_LOAD_BUTTON, STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP), + NWidget(WWT_RESIZEBOX, COLOUR_GREY), +--- a/src/game/game_gui.cpp 2023-07-30 01:01:44.000000000 +0200 ++++ b/src/game/game_gui.cpp 2024-01-20 04:31:11.861385605 +0100 +@@ -72,7 +72,6 @@ + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + EndContainer(), +- NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_GSC_CONTENT_DOWNLOAD), SetFill(1, 0), SetResize(1, 0), SetMinimalSize(279, 0), SetPadding(0, 7, 9, 7), SetDataTip(STR_INTRO_ONLINE_CONTENT, STR_INTRO_TOOLTIP_ONLINE_CONTENT), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), diff --git a/openttd-opengfx/PKGBUILD b/openttd-opengfx/PKGBUILD new file mode 100644 index 0000000..53cdfbb --- /dev/null +++ b/openttd-opengfx/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=openttd-opengfx +pkgver=7.1 +pkgrel=4 +pkgdesc="A free and libre graphics set for OpenTTD" +arch=('any') +url='https://github.com/OpenTTD/OpenGFX' +license=('GPL-2') +makedepends=('nml' 'grfcodec') +groups=('games') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/o/openttd-opengfx/openttd-opengfx_${pkgver}.orig.tar.xz") +sha512sums=('55079babcd78d4a36279cb7610b6800308aca8409ed3b9fa33cd4993b0c1f988d7afe270b17930b97609c4fdf8cf4e362e17c11bd85d2ef136d042256c98483f') + +prepare() { + mv "opengfx-$pkgver-source" "$pkgname-$pkgver" +} + +build() { + cd "$pkgname-$pkgver" + make grf INSTALL_DIR="$pkgdir/usr/share/games/openttd/data" _V= PYTHON=python3 +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" INSTALL_DIR="$pkgdir/usr/share/games/openttd/data" install + + # cleaning structure + rm "$pkgdir/usr/share/games/openttd/data/"{changelog,license,readme}.txt + + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/openttd-openmsx/PKGBUILD b/openttd-openmsx/PKGBUILD new file mode 100644 index 0000000..c4f2182 --- /dev/null +++ b/openttd-openmsx/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=openttd-openmsx +pkgver=0.4.2 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="A free and libre music set for OpenTTD" +arch=('any') +url='https://github.com/OpenTTD/OpenMSX' +license=('GPL-2') +depends=('timidity++' 'freepats') +makedepends=('quilt' 'python') +groups=('games') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/o/openttd-openmsx/openttd-openmsx_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/o/openttd-openmsx/openttd-openmsx_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('65a06792032d0a7f6db5c9495bf5b382fdc29ca84db0535b61ea95b57e8ef961820e75dad2f8dc74de0608502839bea7af28fd342756ebfcc12ee8ac1f5553ab' + '8c6a9ece0bbc05c0d1b727b9d81d397e97bb30ec8ff5b730ef831b5d2a7d37d8254e5568303ee18ebb359489f5cacdc39ad35653b51fc291f94ebf684eab156d') + +prepare() { + mv "openmsx-$pkgver-source" "$pkgname-$pkgver" + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + make INSTALL_DIR="$pkgdir/usr/share/games/openttd/gm" +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" INSTALL_DIR="$pkgdir/usr/share/games/openttd/gm" install + + # cleaning structure + mv "$pkgdir/usr/share/games/openttd/gm/openmsx-$pkgver/"* "$pkgdir/usr/share/games/openttd/gm" + rm -rf "$pkgdir/usr/share/games/openttd/gm/openmsx-$pkgver/" + rm "$pkgdir/usr/share/games/openttd/gm/"{changelog,license,readme}.txt + + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/openttd-opensfx/PKGBUILD b/openttd-opensfx/PKGBUILD new file mode 100644 index 0000000..2b6776f --- /dev/null +++ b/openttd-opensfx/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=openttd-opensfx +pkgver=1.0.3 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="A free and libre sound set for OpenTTD" +arch=('any') +url='https://github.com/OpenTTD/OpenSFX' +license=('GPL-2' 'CC-BY-SA-3.0') +makedepends=('catcodec' 'quilt') +groups=('games') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/o/openttd-opensfx/openttd-opensfx_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/o/openttd-opensfx/openttd-opensfx_1.0.3-2.debian.tar.xz") +sha512sums=('a077fcb1676ba17aa5e9e2df32c2d69452fe54895e3ac64a80c2a6247aa3ea2ef37443e2391f88117768eeb3f808793c78c11727c69bb3df2fde57f67964dbff' + '2b3bade253e84ab9ff21de6630c7b7e8fa393b6b0012f10a2a7dce467f38ff707610419477ad875519f0589b2808f0385f9ff37e27a391ec349cc3b7551ff563') + +prepare() { + mv "opensfx-$pkgver-source" "$pkgname-$pkgver" + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + make INSTALL_DIR="$pkgdir/usr/share/games/openttd/data" +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" INSTALL_DIR="$pkgdir/usr/share/games/openttd/data" install + + # cleaning structure + mv "$pkgdir/usr/share/games/openttd/data/opensfx-$pkgver/"opensfx.{obs,cat} "$pkgdir/usr/share/games/openttd/data" + rm -rf "$pkgdir/usr/share/games/openttd/data/opensfx-$pkgver/" + + install -Dm644 docs/license.txt debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/openvi/PKGBUILD b/openvi/PKGBUILD new file mode 100644 index 0000000..ceb2436 --- /dev/null +++ b/openvi/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=openvi +pkgver=7.5.29 +pkgrel=1 +pkgdesc="Portable OpenBSD vi" +url='https://github.com/johnsonjh/OpenVi' +license=('Modified-BSD' 'Simplified-BSD' 'ISC') +arch=('i686' 'x86_64') +depends=('ncurses' 'gawk') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/johnsonjh/OpenVi/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('6c11cf0651cc3ba21669e4f7f660411299cac4de53659ab58bae9c0fdb2453282dc0f8a0e346279021509a83df86cc1db09b079b2b3e9880eaf722b3d3cf9a8a') + +build() { + cd OpenVi-${pkgver} + make PREFIX="/usr" +} + +package() { + cd OpenVi-${pkgver} + make PREFIX="$pkgdir/usr" install + + # licenses + install -Dm644 LICENSES/{BSD-2-Clause,BSD-3-Clause,ISC}.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/opmsg/PKGBUILD b/opmsg/PKGBUILD new file mode 100644 index 0000000..b01559f --- /dev/null +++ b/opmsg/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=opmsg +pkgver=1.77s +pkgrel=1 +pkgdesc="opmsg message encryption" +arch=('i686' 'x86_64') +url="https://github.com/stealth/opmsg" +license=('GPL-3') +depends=('libressl') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/stealth/${pkgname}/archive/tags/rel-${pkgver}.tar.gz") +sha512sums=('a369d276777959c981f169ca51d7b95bc96406018ef9e42b35643bc26efa1b883c37c1d87aea2c07eff572c9139bb67c09477d884e842d2a687ee0c4caac820a') + +prepare() { + mv ${pkgname}-tags-rel-${pkgver} ${pkgname}-${pkgver} +} + +build() { + cd $pkgname-$pkgver/src + make + make contrib +} + +package() { + cd $pkgname-$pkgver + + mkdir -p "$pkgdir/usr/share/opmsg" + install -D -m644 sample.config "$pkgdir/usr/share/opmsg" + + cd "${srcdir}/$pkgname-$pkgver/src" + install -D -m755 opmsg "$pkgdir/usr/bin/opmsg" + install -D -m755 opmux "$pkgdir/usr/bin/opmux" + install -D -m755 opcoin "$pkgdir/usr/bin/opcoin" + + install -D -m644 "${srcdir}/$pkgname-$pkgver/"{GPL3,LICENSE} -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/optipng/PKGBUILD b/optipng/PKGBUILD new file mode 100644 index 0000000..1d77ae3 --- /dev/null +++ b/optipng/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=optipng +pkgver=0.7.7 +_debver=0.7.7 +_debrel=1 +pkgrel=1 +pkgdesc='Compresses PNG files to a smaller size, without losing any information.' +arch=('i686' 'x86_64') +url='http://optipng.sourceforge.net/' +license=('zlib') +depends=('glibc' 'libpng' 'zlib') +source=("https://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/o/optipng/optipng_$_debver-$_debrel.debian.tar.xz") +sha512sums=('c33b7650143ab39944d2c066e07e10273c37024c5bfe7c00475bfb513af96afa081ff388164845d426d3bce624c0282dee574fa150e963f18d3683d821030280' + 'b3f13fb81e3bc26e77c1024436996ac5da8b8a62069e8d0458a2e05c90cf9f25df5fffd2269901a78065cdd06022f33c7104b852c60d31d7d59a4164f5ee76f6') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" configure +} + + +build() { + cd "$srcdir/$pkgname-$pkgver" + + ./configure --prefix=/usr --mandir=/usr/share/man --with-system-libs + make +} +package() { + cd "$srcdir/$pkgname-$pkgver" + + make prefix="$pkgdir/usr" mandir="$pkgdir/usr/share/man" install + + # install license + install -Dm0644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} + diff --git a/opus-tools/PKGBUILD b/opus-tools/PKGBUILD new file mode 100644 index 0000000..9d7eb3a --- /dev/null +++ b/opus-tools/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=opus-tools +pkgver=0.2 +pkgrel=1 +pkgdesc="Collection of tools for Opus audio codec" +arch=('i686' 'x86_64') +url='https://wiki.xiph.org/Opus-tools' +license=('Simplified-BSD') +depends=('flac' 'libogg' 'opus' "opusfile>=0.12" 'libopusenc') +source=("https://downloads.xiph.org/releases/opus/$pkgname-$pkgver.tar.gz") +sha512sums=('6fdde8d938e8fadc9391b5d188883dab0aecf8b27d40d00b5d67d8fac9cfd9d5107b1934bfe6310587400f277c99d1db5cabf3d26f340ce2141873dec238e5ce') + +build(){ + cd "$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/opus/PKGBUILD b/opus/PKGBUILD new file mode 100644 index 0000000..e237bc7 --- /dev/null +++ b/opus/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=opus +pkgver=1.3.1 +pkgrel=1 +pkgdesc="Totally free, royalty-free, highly versatile audio codec" +arch=(i686 x86_64) +url="https://www.opus-codec.org/" +license=(Modified-BSD) +depends=(glibc) +makedepends=(doxygen) +source=(https://archive.mozilla.org/pub/$pkgname/$pkgname-$pkgver.tar.gz) +sha512sums=('6cd5e4d8a0551ed5fb59488c07a5cc18a241d1fde5f9eb9f16cd4e77abcdb4134dd51ad1d737be1e6039bfa56912510b8648152f2478a1f21c7c1d9ce32933cd') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --disable-static --enable-custom-modes + make +} + +check() { + cd $pkgname-$pkgver + make check +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING +} diff --git a/opusfile/PKGBUILD b/opusfile/PKGBUILD new file mode 100644 index 0000000..690cc3a --- /dev/null +++ b/opusfile/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=opusfile +pkgver=0.12 +pkgrel=1 +pkgdesc='Library for opening, seeking, and decoding .opus files' +arch=('i686' 'x86_64') +url='https://opus-codec.org/' +license=('Modified-BSD') +depends=('libogg' 'libressl' 'opus') +source=(https://downloads.xiph.org/releases/opus/$pkgname-$pkgver.tar.gz) +sha512sums=('e25e6968a3183ac0628ce1000840fd6f9f636e92ba984d6a72b76fb2a98ec632d2de4c66a8e4c05ef30655c2a4a13ab35f89606fa7d79a54cfa8506543ca57af') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/${pkgname}" +} diff --git a/orc/PKGBUILD b/orc/PKGBUILD new file mode 100644 index 0000000..003f86b --- /dev/null +++ b/orc/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=orc +pkgver=0.4.32 +pkgrel=1 +pkgdesc="Optimized Inner Loop Runtime Compiler" +url="https://gitlab.freedesktop.org/gstreamer/orc" +arch=(i686 x86_64) +license=(Modified-BSD) +depends=(glibc) +makedepends=(meson) +source=(https://gstreamer.freedesktop.org/data/src/orc/orc-${pkgver}.tar.xz{,.asc}) +validpgpkeys=('D637032E45B8C6585B9456565D2EEE6F6F349D7C') # Tim MĂĽller +sha512sums=('63e2ab05bc23e07cd5c1ed3192515ec3b1f666abb4f9ea5de4bd72461f3a5d7066860e2ad38f35d0acd81fadfa06f2a18d61838eae89c74dec6a78099a343567' + 'SKIP') + +build() { + hyperbola-meson $pkgname-$pkgver build -D gtk_doc=disabled + ninja -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 $pkgname-$pkgver/COPYING +} diff --git a/os-prober/PKGBUILD b/os-prober/PKGBUILD new file mode 100644 index 0000000..135f400 --- /dev/null +++ b/os-prober/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=os-prober +pkgver=1.79 +pkgrel=1 +pkgdesc='Utility to detect other operating-systems on a set of drives' +url='https://joeyh.name/code/os-prober/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('sh') +source=("https://deb.debian.org/debian/pool/main/o/${pkgname}/${pkgname}_${pkgver}.tar.xz") +sha512sums=('89b827b9b90a1d3bc11e0090ec04d808502cc1883ab10997b6d9edbe6005dcf8a0acdd7d200102c9dccde56297bda6087d68fb6dec419f0920090c2655c9c7d8') + +prepare() { + cd ${pkgname} + # adjust lib dir to allow detection of 64-bit distros + sed -i -e "s:/lib/ld\*\.so\*:/lib*/ld*.so*:g" os-probes/mounted/common/90linux-distro + rm -f Makefile +} + +build() { + cd ${pkgname} + make newns +} + +package() { + cd ${pkgname} + + install -Dm 755 os-prober linux-boot-prober -t "${pkgdir}/usr/bin" + install -Dm 755 newns -t "${pkgdir}/usr/lib/os-prober" + install -Dm 755 common.sh -t "${pkgdir}/usr/share/os-prober" + + for dir in os-probes os-probes/mounted os-probes/init linux-boot-probes linux-boot-probes/mounted; do + install -dm 755 "${pkgdir}/usr/lib/${dir}" + install -m 755 -t "${pkgdir}/usr/lib/${dir}" "${dir}"/common/* + [[ -d "${dir}"/x86 ]] && cp -r "${dir}"/x86/* "${pkgdir}/usr/lib/${dir}" + done + + install -Dm 755 os-probes/mounted/powerpc/20macosx "${pkgdir}"/usr/lib/os-probes/mounted/20macosx + install -dm 755 "${pkgdir}"/var/lib/os-prober + + install -Dm644 debian/copyright -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/ossp/PKGBUILD b/ossp/PKGBUILD new file mode 100644 index 0000000..c2274f9 --- /dev/null +++ b/ossp/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=ossp +pkgver=1.3.2 +_debver=1.3.2 +_debrel=7 +pkgrel=15.hyperbola3 +pkgdesc="Emulate OSS device using CUSE, without libpulse support and with OpenRC support" +arch=('i686' 'x86_64') +url="https://sourceforge.net/projects/osspd/" +license=('GPL-2') +depends=('fuse>=2.8.0') +makedepends=('alsa-lib' 'quilt') +optdepends=("alsa-lib: ALSA backend") +backup=('etc/conf.d/osspd') +source=("https://downloads.sourceforge.net/project/osspd/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/o/osspd/osspd_$_debver-$_debrel.debian.tar.xz" + 'remove-pulseaudio-support.patch' + 'osspd.confd' + 'osspd.initd' + 'osspd.modulesd') +sha512sums=('672643187ec58bbfdd0f3207fd68037405bf86647c040a09d5db485754d82203a60e703b01bbbd6fd9698a689a63384876caf5a171229585f35ca73c44d708d2' + '43f4c9b4ae824495c9fb74941d31b58c84184e2dcf76c556cba5034eebb19c0367c4a160f3a0ae4254ec38d973ff619df05ce8d56b492c474bd5a2d81df86237' + 'c1d1b4357943f8eb25b389f628981a25928c3bb92ed8cf69ee2df1ac28b81ee7b7392650b3bd2a45e67c87e8e2245fdc2076c61f163fed8e94aad61406dbccb7' + 'b6bab8acd08583ddff1123077d013c8e12278485bb5aeceb64e14fae124ce940e83025e1d59e1c46ddf37a1add210220213b0b2cc0b4a393a84963f3d0c31efa' + 'eee9ecff5b5f50c173a4aec4c0a9e908dadd10272dc8a64af8410f13b8190fc176dab93a35ba75694433393ca62cf7eff220d53cdc09654e97b74d9d3dc0bc34' + 'cb1a9669b7906f3b408648e41b08251ecceb9743437726fb060ca1f9d2469be16b14243c08456352bb39e5bbab9f696fb375526fb5e442e040be9bcc0b117172') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0003-PA-recommends-users-not-to-be-in-the-audio-group-so-.patch || true + + quilt push -av + else + sed -i 's|GROUP="audio"|SUBSYSTEM=="cuse", MODE="0666"|' 98-osscuse.rules + fi + patch -p1 -i ../remove-pulseaudio-support.patch +} + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" prefix=/usr UDEVDIR=/lib/udev/rules.d install + + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + install -Dm644 "$srcdir/osspd.confd" "$pkgdir/etc/conf.d/osspd" + install -Dm755 "$srcdir/osspd.initd" "$pkgdir/etc/init.d/osspd" + install -Dm644 "$srcdir/osspd.modulesd" "$pkgdir/etc/modules.d/osspd" + + install -Dm644 README "$pkgdir/usr/share/doc/$pkgname/README" +} diff --git a/ossp/osspd.confd b/ossp/osspd.confd new file mode 100644 index 0000000..730da54 --- /dev/null +++ b/ossp/osspd.confd @@ -0,0 +1,6 @@ +# Here you can choose the backend which osspd should use during operation. +# You can choose from the following backends: +# ossp-alsap - ALSA backend +# ossp-padsp - Pulseaudio backend + +OSSPD_BACKEND="%OSSPD_BACKEND%" diff --git a/ossp/osspd.initd b/ossp/osspd.initd new file mode 100644 index 0000000..3656a4d --- /dev/null +++ b/ossp/osspd.initd @@ -0,0 +1,40 @@ +#!/sbin/openrc-run +# Copyright 1999-2010 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +OSSPD="/usr/sbin/osspd" + +check_prerequisites() { + if [ ! -c /dev/cuse ] ; then + eerror "Cannot find /dev/cuse character device!" + return 1 + fi + + if [ -x "/usr/sbin/${OSSPD_BACKEND}" ] ; then + CHOSEN_BACKEND="/usr/sbin/${OSSPD_BACKEND}" + else + eerror "Cannot find backend!" + return 1 + fi + return 0 +} + +depend() { + need fuse + after alsasound pulseaudio +} + +start() { + check_prerequisites || return 1 + ebegin "Starting osspd with ${OSSPD_BACKEND} backend" + start-stop-daemon --start --quiet --exec ${OSSPD} \ + -- --dsp-slave=${CHOSEN_BACKEND} + eend $? +} + +stop() { + ebegin "Shutting down osspd" + start-stop-daemon --stop --quiet --exec ${OSSPD} + eend $? +} diff --git a/ossp/osspd.modulesd b/ossp/osspd.modulesd new file mode 100644 index 0000000..3557831 --- /dev/null +++ b/ossp/osspd.modulesd @@ -0,0 +1,2 @@ +cuse +snd-seq-oss diff --git a/ossp/remove-pulseaudio-support.patch b/ossp/remove-pulseaudio-support.patch new file mode 100644 index 0000000..6beb5e1 --- /dev/null +++ b/ossp/remove-pulseaudio-support.patch @@ -0,0 +1,96 @@ +diff --git a/.gitignore b/.gitignore +index b578114..47597d1 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -1,6 +1,5 @@ + *.[oa] + *~ + ossp-alsap +-ossp-padsp + osspd + osstest +diff --git a/Makefile b/Makefile +index 11f2836..43d559c 100644 +--- a/Makefile ++++ b/Makefile +@@ -18,14 +18,6 @@ ifeq "$(origin OSSPD_LDFLAGS)" "undefined" + OSSPD_LDFLAGS := $(shell pkg-config --libs fuse) + endif + +-ifeq "$(origin OSSP_PADSP_CFLAGS)" "undefined" +-OSSP_PADSP_CFLAGS := $(shell pkg-config --cflags libpulse) +-endif +- +-ifeq "$(origin OSSP_PADSP_LDFLAGS)" "undefined" +-OSSP_PADSP_LDFLAGS := $(shell pkg-config --libs libpulse) +-endif +- + ifeq "$(origin OSSP_ALSAP_CFLAGS)" "undefined" + OSSP_ALSAP_CFLAGS := $(shell pkg-config --libs alsa) + endif +@@ -36,12 +28,12 @@ endif + + headers := ossp.h ossp-util.h ossp-slave.h + +-all: osspd ossp-padsp ossp-alsap ++all: osspd ossp-alsap + + install: + mkdir -p $(DESTDIR)$(prefix)/sbin $(DESTDIR)$(SLAVESDIR) + install -m755 osspd $(DESTDIR)$(prefix)/sbin +- install -m755 ossp-padsp ossp-alsap $(DESTDIR)$(SLAVESDIR) ++ install -m755 ossp-alsap $(DESTDIR)$(SLAVESDIR) + mkdir -p $(DESTDIR)$(UDEVDIR) + install -m644 98-osscuse.rules $(DESTDIR)$(UDEVDIR) + +@@ -54,9 +46,6 @@ libossp.a: ossp.c ossp.h ossp-util.c ossp-util.h ossp-slave.c ossp-slave.h + osspd: osspd.c libossp.a $(headers) + $(CC) $(CFLAGS) $(OSSPD_CFLAGS) -DSLAVE_DEFAULT_PATH=\"$(SLAVESDIR)\" -o $@ $< $(OSSPD_LDFLAGS) $(LDFLAGS) + +-ossp-padsp: ossp-padsp.c libossp.a $(headers) +- $(CC) $(CFLAGS) $(OSSP_PADSP_CFLAGS) -o $@ $< $(OSSP_PADSP_LDFLAGS) $(LDFLAGS) +- + ossp-alsap: ossp-alsap.c libossp.a $(headers) + $(CC) $(CFLAGS) $(OSSP_ALSAP_CFLAGS) -o $@ $< $(OSSP_ALSAP_LDFLAGS) $(LDFLAGS) + +@@ -67,4 +56,4 @@ test: osstest + @./osstest + + clean: +- rm -f *.o *.a osspd ossp-padsp ossp-alsap osstest ++ rm -f *.o *.a osspd ossp-alsap osstest +diff --git a/ossp-slave.c b/ossp-slave.c +index a290636..eb1791f 100644 +--- a/ossp-slave.c ++++ b/ossp-slave.c +@@ -98,7 +98,7 @@ void ossp_slave_init(int argc, char **argv) + snprintf(ossp_user_name, sizeof(ossp_user_name), "%s", + pw->pw_name); + +- snprintf(ossp_log_name, sizeof(ossp_log_name), "ossp-padsp[%s:%d]", ++ snprintf(ossp_log_name, sizeof(ossp_log_name), "ossp-alsap[%s:%d]", + ossp_user_name, getpid()); + + if (mmap_fd >= 0) { +diff --git a/osspd.c b/osspd.c +index 6b63c07..20c60ad 100644 +--- a/osspd.c ++++ b/osspd.c +@@ -2005,7 +2005,7 @@ static const char *usage = + " --max=MAX maximum number of open streams (default 256)\n" + " --umax=MAX maximum number of open streams per UID (default --max)\n" + " --exit-on-idle exit if idle\n" +-" --dsp-slave=PATH DSP slave (default: " SLAVE_DEFAULT_PATH "/ossp-padsp)\n" ++" --dsp-slave=PATH DSP slave (default: " SLAVE_DEFAULT_PATH "/ossp-alsap)\n" + " --log=LEVEL log level (0..6)\n" + " --timestamp timestamp log messages\n" + " -v increase verbosity, can be specified multiple times\n" +@@ -2179,7 +2179,7 @@ int main(int argc, char **argv) + dsp_slave_path[PATH_MAX - 1] = '\0'; + } else { + ret = snprintf(dsp_slave_path, PATH_MAX, "%s/%s", +- SLAVE_DEFAULT_PATH, "ossp-padsp"); ++ SLAVE_DEFAULT_PATH, "ossp-alsap"); + if (ret >= PATH_MAX) + fatal("dsp slave pathname too long"); + } diff --git a/p7zip/PKGBUILD b/p7zip/PKGBUILD new file mode 100644 index 0000000..6c6ee1d --- /dev/null +++ b/p7zip/PKGBUILD @@ -0,0 +1,101 @@ +# Maintainer: Jesus E. + +pkgname=p7zip +_pkgname=p7zip-libre +pkgver=16.02 +_debver=16.02+dfsg +_debrel=8 +pkgrel=1 +pkgdesc='Command-line file archiver with high compression ratio' +arch=('i686' 'x86_64') +url='http://p7zip.sourceforge.net/' +license=('LGPL-2') +depends=('gcc-libs' 'sh' 'yasm') +makedepends=('quilt' 'dos2unix') +install=$pkgname.install +mksource=(https://downloads.sourceforge.net/project/$pkgname/$pkgname/$pkgver/${pkgname}_${pkgver}_src_all.tar.bz2) +source=(https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}_${pkgver}_src_all.tar.bz2{,.sig} + https://deb.debian.org/debian/pool/main/p/p7zip/p7zip_${_debver}-${_debrel}.debian.tar.xz + libre.patch + libre_doc.patch) +mksha512sums=('d2c4d53817f96bb4c7683f42045198d4cd509cfc9c3e2cb85c8d9dc4ab6dfa7496449edeac4e300ecf986a9cbbc90bd8f8feef8156895d94617c04e507add55f') +sha512sums=('0be4658dc52ffaee886d16e1cd8379c533e6a2920d4053f7d2f07e89fddc65ef8ee24e136364decd232879eedfa4972f25629ffc043175298cf88779bc70012f' + 'SKIP' + '8f8a3c1ea81803f1231b7365776c12a8804736cab31ca9dbef317ae889f4c485b177b2b209c3d3012f407e49755bbffc58a8ec63f8ce2f87bac9a4a40d9a72b8' + '00d39615b5de639432d016cd7132c7e3657becd6853e76d788b4f86cec20a2257caeb4f6d2559ede074ffba9427d3822f8d1dac53ab14d381edfcfd97b473f02' + 'd67f6f18d901b067b6914652b368ee0f27c873bf11904d5f7f43028736a3cf336635522550269d3da3d1cf2e5955855fc09d9f57ff3d5224c29b18dc0651e5c1') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + cd "${srcdir}/${pkgname}_${pkgver}" + + # Remove nonfree unRAR utility files from the source + rm -rv CPP/7zip/{Archive,Compress}/Rar + rm -v CPP/7zip/Compress/{Rar{1,2,3}Decoder.{cpp,h},Rar3Vm.{cpp,h},RarCodecsRegister.cpp} + rm -v CPP/7zip/Crypto/{Rar20Crypto,Rar{,5}Aes}.{cpp,h} + rm -v Utils/file_Codecs_Rar_so.py + rm -v DOC/unRarLicense.txt + + # Remove nonfree parent folder icon + rm CPP/7zip/UI/FileManager/res/ParentFolder.h +} + +prepare() { + cd "$srcdir/${pkgname}_$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/01-makefile.patch || true + rm -v debian/patches/02-man.patch || true + rm -v debian/patches/09-man-update.patch || true + rm -v debian/patches/10-drop-fm-doc.patch || true + rm -v debian/patches/11-README-no-instructions.patch || true + + quilt push -av + fi + + if [[ $CARCH = x86_64 ]]; then + cp makefile.linux_amd64_asm makefile.machine + elif [[ $CARCH = i686 ]]; then + cp makefile.linux_x86_asm_gcc_4.X makefile.machine + else + cp makefile.linux_any_cpu_gcc_4.X makefile.machine + fi + + # Remove RAR and parent folder icon references + patch -Np1 -i ${srcdir}/libre.patch + + # Remove RAR from further inline-documentation + dos2unix ./DOC/MANUAL/cmdline/switches/update.htm + dos2unix ./DOC/MANUAL/general/formats.htm + patch -Np1 -i ${srcdir}/libre_doc.patch +} + +build() { + cd "$srcdir/${pkgname}_$pkgver" + + make all3 OPTFLAGS="$CFLAGS" +} + +package() { + cd "$srcdir/${pkgname}_$pkgver" + + make install \ + DEST_DIR="$pkgdir" \ + DEST_HOME=/usr \ + DEST_MAN=/usr/share/man + + # Remove documentation for the GUI file manager + rm -r "$pkgdir/usr/share/doc/p7zip/DOC/MANUAL/fm" + + install -d "${pkgdir}"/usr/share/licenses/p7zip + ln -s -t "$pkgdir/usr/share/licenses/p7zip/" \ + /usr/share/doc/p7zip/DOC/License.txt +} diff --git a/p7zip/libre.patch b/p7zip/libre.patch new file mode 100644 index 0000000..5182740 --- /dev/null +++ b/p7zip/libre.patch @@ -0,0 +1,934 @@ +diff --git a/C/Sha1.c b/C/Sha1.c +index 55c1c63..48b4c5d 100644 +--- a/C/Sha1.c ++++ b/C/Sha1.c +@@ -104,39 +104,6 @@ void Sha1_GetBlockDigest(CSha1 *p, const UInt32 *data, UInt32 *destDigest) + destDigest[4] = p->state[4] + e; + } + +-void Sha1_UpdateBlock_Rar(CSha1 *p, UInt32 *data, int returnRes) +-{ +- UInt32 a, b, c, d, e; +- UInt32 W[kNumW]; +- +- a = p->state[0]; +- b = p->state[1]; +- c = p->state[2]; +- d = p->state[3]; +- e = p->state[4]; +- +- RX_15 +- +- RX_1_4(R0, R1, 15); +- +- RX_20(R2, 20); +- RX_20(R3, 40); +- RX_20(R4, 60); +- +- p->state[0] += a; +- p->state[1] += b; +- p->state[2] += c; +- p->state[3] += d; +- p->state[4] += e; +- +- if (returnRes) +- { +- unsigned i; +- for (i = 0 ; i < SHA1_NUM_BLOCK_WORDS; i++) +- data[i] = W[kNumW - SHA1_NUM_BLOCK_WORDS + i]; +- } +-} +- + #define Sha1_UpdateBlock(p) Sha1_GetBlockDigest(p, p->buffer, p->state) + + void Sha1_Update(CSha1 *p, const Byte *data, size_t size) +@@ -212,46 +179,6 @@ void Sha1_Update(CSha1 *p, const Byte *data, size_t size) + } + } + +-void Sha1_Update_Rar(CSha1 *p, Byte *data, size_t size /* , int rar350Mode */) +-{ +- int returnRes = False; +- +- unsigned pos = (unsigned)p->count & 0x3F; +- p->count += size; +- +- while (size--) +- { +- unsigned pos2 = (pos & 3); +- UInt32 v = ((UInt32)*data++) << (8 * (3 - pos2)); +- UInt32 *ref = &(p->buffer[pos >> 2]); +- pos++; +- if (pos2 == 0) +- { +- *ref = v; +- continue; +- } +- *ref |= v; +- +- if (pos == SHA1_BLOCK_SIZE) +- { +- pos = 0; +- Sha1_UpdateBlock_Rar(p, p->buffer, returnRes); +- if (returnRes) +- { +- unsigned i; +- for (i = 0; i < SHA1_NUM_BLOCK_WORDS; i++) +- { +- UInt32 d = p->buffer[i]; +- Byte *prev = data + i * 4 - SHA1_BLOCK_SIZE; +- SetUi32(prev, d); +- } +- } +- // returnRes = rar350Mode; +- returnRes = True; +- } +- } +-} +- + void Sha1_Final(CSha1 *p, Byte *digest) + { + unsigned pos = (unsigned)p->count & 0x3F; +diff --git a/C/Sha1.h b/C/Sha1.h +index aa22ec3..9c45653 100644 +--- a/C/Sha1.h ++++ b/C/Sha1.h +@@ -27,8 +27,6 @@ void Sha1_GetBlockDigest(CSha1 *p, const UInt32 *data, UInt32 *destDigest); + void Sha1_Update(CSha1 *p, const Byte *data, size_t size); + void Sha1_Final(CSha1 *p, Byte *digest); + +-void Sha1_Update_Rar(CSha1 *p, Byte *data, size_t size /* , int rar350Mode */); +- + void Sha1_32_PrepareBlock(const CSha1 *p, UInt32 *block, unsigned size); + void Sha1_32_Update(CSha1 *p, const UInt32 *data, size_t size); + void Sha1_32_Final(CSha1 *p, UInt32 *digest); +diff --git a/CPP/7zip/Archive/7z/7zUpdate.cpp b/CPP/7zip/Archive/7z/7zUpdate.cpp +index a0571e7..43ad3e9 100644 +--- a/CPP/7zip/Archive/7z/7zUpdate.cpp ++++ b/CPP/7zip/Archive/7z/7zUpdate.cpp +@@ -562,7 +562,7 @@ static int CompareEmptyItems(const unsigned *p1, const unsigned *p2, void *param + } + + static const char *g_Exts = +- " 7z xz lzma ace arc arj bz tbz bz2 tbz2 cab deb gz tgz ha lha lzh lzo lzx pak rar rpm sit zoo" ++ " 7z xz lzma ace arc arj bz tbz bz2 tbz2 cab deb gz tgz ha lha lzh lzo lzx pak rpm sit zoo" + " zip jar ear war msi" + " 3gp avi mov mpeg mpg mpe wmv" + " aac ape fla flac la mp3 m4a mp4 ofr ogg pac ra rm rka shn swa tta wv wma wav" +diff --git a/CPP/7zip/Bundles/Format7zFree/makefile.list b/CPP/7zip/Bundles/Format7zFree/makefile.list +index da2056b..1dcf1a5 100644 +--- a/CPP/7zip/Bundles/Format7zFree/makefile.list ++++ b/CPP/7zip/Bundles/Format7zFree/makefile.list +@@ -87,8 +87,6 @@ SRCS=\ + ../../../../CPP/7zip/Archive/PeHandler.cpp \ + ../../../../CPP/7zip/Archive/PpmdHandler.cpp \ + ../../../../CPP/7zip/Archive/QcowHandler.cpp \ +- ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp \ +- ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp \ + ../../../../CPP/7zip/Archive/RpmHandler.cpp \ + ../../../../CPP/7zip/Archive/SplitHandler.cpp \ + ../../../../CPP/7zip/Archive/SquashfsHandler.cpp \ +@@ -191,9 +189,6 @@ SRCS=\ + ../../../../CPP/7zip/Crypto/MyAesReg.cpp \ + ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp \ + ../../../../CPP/7zip/Crypto/RandGen.cpp \ +- ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp \ +- ../../../../CPP/7zip/Crypto/Rar5Aes.cpp \ +- ../../../../CPP/7zip/Crypto/RarAes.cpp \ + ../../../../CPP/7zip/Crypto/WzAes.cpp \ + ../../../../CPP/7zip/Crypto/ZipCrypto.cpp \ + ../../../../CPP/7zip/Crypto/ZipStrong.cpp \ +@@ -485,10 +480,6 @@ PpmdHandler.o : ../../../../CPP/7zip/Archive/PpmdHandler.cpp + $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/PpmdHandler.cpp + QcowHandler.o : ../../../../CPP/7zip/Archive/QcowHandler.cpp + $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/QcowHandler.cpp +-RarHandler.o : ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp +- $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp +-Rar5Handler.o : ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp +- $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp + RpmHandler.o : ../../../../CPP/7zip/Archive/RpmHandler.cpp + $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/RpmHandler.cpp + SplitHandler.o : ../../../../CPP/7zip/Archive/SplitHandler.cpp +@@ -693,12 +684,6 @@ Pbkdf2HmacSha1.o : ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp + $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp + RandGen.o : ../../../../CPP/7zip/Crypto/RandGen.cpp + $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/RandGen.cpp +-Rar20Crypto.o : ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp +- $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp +-Rar5Aes.o : ../../../../CPP/7zip/Crypto/Rar5Aes.cpp +- $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/Rar5Aes.cpp +-RarAes.o : ../../../../CPP/7zip/Crypto/RarAes.cpp +- $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/RarAes.cpp + WzAes.o : ../../../../CPP/7zip/Crypto/WzAes.cpp + $(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/WzAes.cpp + ZipCrypto.o : ../../../../CPP/7zip/Crypto/ZipCrypto.cpp +@@ -869,8 +854,6 @@ OBJS=\ + PeHandler.o \ + PpmdHandler.o \ + QcowHandler.o \ +- RarHandler.o \ +- Rar5Handler.o \ + RpmHandler.o \ + SplitHandler.o \ + SquashfsHandler.o \ +@@ -973,9 +956,6 @@ OBJS=\ + MyAesReg.o \ + Pbkdf2HmacSha1.o \ + RandGen.o \ +- Rar20Crypto.o \ +- Rar5Aes.o \ +- RarAes.o \ + WzAes.o \ + ZipCrypto.o \ + ZipStrong.o \ +diff --git a/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt b/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt +index 61f41f9..adc7117 100644 +--- a/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt ++++ b/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt +@@ -126,8 +126,6 @@ add_library(7z MODULE + "../../../../CPP/7zip/Archive/PeHandler.cpp" + "../../../../CPP/7zip/Archive/PpmdHandler.cpp" + "../../../../CPP/7zip/Archive/QcowHandler.cpp" +- "../../../../CPP/7zip/Archive/Rar/RarHandler.cpp" +- "../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp" + "../../../../CPP/7zip/Archive/RpmHandler.cpp" + "../../../../CPP/7zip/Archive/SplitHandler.cpp" + "../../../../CPP/7zip/Archive/SquashfsHandler.cpp" +@@ -230,9 +228,6 @@ add_library(7z MODULE + "../../../../CPP/7zip/Crypto/MyAesReg.cpp" + "../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp" + "../../../../CPP/7zip/Crypto/RandGen.cpp" +- "../../../../CPP/7zip/Crypto/Rar20Crypto.cpp" +- "../../../../CPP/7zip/Crypto/Rar5Aes.cpp" +- "../../../../CPP/7zip/Crypto/RarAes.cpp" + "../../../../CPP/7zip/Crypto/WzAes.cpp" + "../../../../CPP/7zip/Crypto/ZipCrypto.cpp" + "../../../../CPP/7zip/Crypto/ZipStrong.cpp" +diff --git a/CPP/7zip/Crypto/Sha1Cls.h b/CPP/7zip/Crypto/Sha1Cls.h +index 71acbde..cde4a57 100644 +--- a/CPP/7zip/Crypto/Sha1Cls.h ++++ b/CPP/7zip/Crypto/Sha1Cls.h +@@ -28,7 +28,6 @@ class CContext: public CContextBase + { + public: + void Update(const Byte *data, size_t size) throw() { Sha1_Update(&_s, data, size); } +- void UpdateRar(Byte *data, size_t size /* , bool rar350Mode */) throw() { Sha1_Update_Rar(&_s, data, size /* , rar350Mode ? 1 : 0 */); } + void Final(Byte *digest) throw() { Sha1_Final(&_s, digest); } + }; + +diff --git a/CPP/7zip/Guid.txt b/CPP/7zip/Guid.txt +index 7edab6e..cc22992 100644 +--- a/CPP/7zip/Guid.txt ++++ b/CPP/7zip/Guid.txt +@@ -151,7 +151,6 @@ Handler GUIDs: + + 01 Zip + 02 BZip2 +- 03 Rar + 04 Arj + 05 Z + 06 Lzh +@@ -168,7 +167,6 @@ Handler GUIDs: + C9 VDI + CA Qcow + CB GPT +- CC Rar5 + CD IHex + CE Hxs + CF TE +diff --git a/CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro b/CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro +index afa36d4..93c45c7 100644 +--- a/CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro ++++ b/CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro +@@ -137,8 +137,6 @@ SOURCES += \ + ../../../../CPP/7zip/Archive/PeHandler.cpp \ + ../../../../CPP/7zip/Archive/PpmdHandler.cpp \ + ../../../../CPP/7zip/Archive/QcowHandler.cpp \ +- ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp \ +- ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp \ + ../../../../CPP/7zip/Archive/RpmHandler.cpp \ + ../../../../CPP/7zip/Archive/SplitHandler.cpp \ + ../../../../CPP/7zip/Archive/SquashfsHandler.cpp \ +@@ -241,9 +239,6 @@ SOURCES += \ + ../../../../CPP/7zip/Crypto/MyAesReg.cpp \ + ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp \ + ../../../../CPP/7zip/Crypto/RandGen.cpp \ +- ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp \ +- ../../../../CPP/7zip/Crypto/Rar5Aes.cpp \ +- ../../../../CPP/7zip/Crypto/RarAes.cpp \ + ../../../../CPP/7zip/Crypto/WzAes.cpp \ + ../../../../CPP/7zip/Crypto/ZipCrypto.cpp \ + ../../../../CPP/7zip/Crypto/ZipStrong.cpp \ +diff --git a/CPP/7zip/QMAKE/all.pro b/CPP/7zip/QMAKE/all.pro +index a565ba8..6668619 100644 +--- a/CPP/7zip/QMAKE/all.pro ++++ b/CPP/7zip/QMAKE/all.pro +@@ -4,7 +4,6 @@ SUBDIRS = 7za \ + 7zr \ + 7z_ \ + Format7zFree \ +- Rar \ + Lzham \ + test_lib + +diff --git a/CPP/7zip/UI/Client7z/Client7z.cpp b/CPP/7zip/UI/Client7z/Client7z.cpp +index d0eca6d..7f4e6e2 100644 +--- a/CPP/7zip/UI/Client7z/Client7z.cpp ++++ b/CPP/7zip/UI/Client7z/Client7z.cpp +@@ -32,7 +32,7 @@ HINSTANCE g_hInstance = 0; + #endif + + // Tou can find the list of all GUIDs in Guid.txt file. +-// use another CLSIDs, if you want to support other formats (zip, rar, ...). ++// use another CLSIDs, if you want to support other formats (zip, ...). + // {23170F69-40C1-278A-1000-000110070000} + + DEFINE_GUID(CLSID_CFormat7z, +diff --git a/CPP/7zip/UI/Common/LoadCodecs.h b/CPP/7zip/UI/Common/LoadCodecs.h +index ac9eeac..076bd1c 100644 +--- a/CPP/7zip/UI/Common/LoadCodecs.h ++++ b/CPP/7zip/UI/Common/LoadCodecs.h +@@ -158,7 +158,6 @@ struct CArcInfoEx + void AddExts(const UString &ext, const UString &addExt); + + bool IsSplit() const { return StringsAreEqualNoCase_Ascii(Name, "Split"); } +- // bool IsRar() const { return StringsAreEqualNoCase_Ascii(Name, "Rar"); } + + CArcInfoEx(): + Flags(0), +diff --git a/CPP/7zip/UI/Common/OpenArchive.cpp b/CPP/7zip/UI/Common/OpenArchive.cpp +index 7d5b0c4..88ea5ab 100644 +--- a/CPP/7zip/UI/Common/OpenArchive.cpp ++++ b/CPP/7zip/UI/Common/OpenArchive.cpp +@@ -1063,7 +1063,6 @@ static const char * const k_Formats_with_simple_signuature[] = + { + "7z" + , "xz" +- , "rar" + , "bzip2" + , "gzip" + , "cab" +@@ -1720,29 +1719,6 @@ HRESULT CArc::OpenStream2(const COpenOptions &op) + { + // signature search was here + } +- else if (extension.IsEqualTo("000") || extension.IsEqualTo("001")) +- { +- int i = FindFormatForArchiveType(op.codecs, orderIndices, "rar"); +- if (i >= 0) +- { +- const size_t kBufSize = (1 << 10); +- byteBuffer.Alloc(kBufSize); +- size_t processedSize = kBufSize; +- RINOK(ReadStream(op.stream, byteBuffer, &processedSize)); +- if (processedSize >= 16) +- { +- const Byte *buf = byteBuffer; +- const Byte kRarHeader[] = { 0x52 , 0x61, 0x72, 0x21, 0x1a, 0x07, 0x00 }; +- if (TestSignature(buf, kRarHeader, 7) && buf[9] == 0x73 && (buf[10] & 1) != 0) +- { +- orderIndices2.Add(orderIndices[i]); +- orderIndices[i] = -1; +- if (i >= (int)numFinded) +- numFinded++; +- } +- } +- } +- } + else + { + const size_t kBufSize = (1 << 10); +diff --git a/CPP/7zip/UI/FileManager/FM_rc.cpp b/CPP/7zip/UI/FileManager/FM_rc.cpp +index 83578ed..034feed 100644 +--- a/CPP/7zip/UI/FileManager/FM_rc.cpp ++++ b/CPP/7zip/UI/FileManager/FM_rc.cpp +@@ -821,8 +821,6 @@ REGISTER_STRINGTABLE(g_stringTable) + + ///////////////////////////////////////////////////// + +-#include "res/ParentFolder.h" +- + SevenZipPanel::SevenZipPanel(MyFrame *frame, wxWindow *parent,int id,int panelIndex) : + wxPanel(parent,id) , m_frame(frame), _wList(0) + { +@@ -840,7 +838,7 @@ REGISTER_STRINGTABLE(g_stringTable) + int sizes[] = {150, 250, 350, -1}; + wxArrayString pathArray; + wxBoxSizer *pPathSizer = new wxBoxSizer(wxHORIZONTAL); +- m_pBmpButtonParentFolder = new wxBitmapButton(this, kParentFolderID, wxGetBitmapFromMemory(PARENT_FOLDER), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW); ++ m_pBmpButtonParentFolder = new wxBitmapButton(this, kParentFolderID, wxArtProvider::GetBitmap(wxART_GO_DIR_UP, wxART_TOOLBAR, wxDefaultSize), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW); + m_pComboBoxPath = new wxComboBox(this, _comboBoxID, wxEmptyString, wxDefaultPosition, wxSize(300,-1), pathArray, wxCB_DROPDOWN | wxCB_SORT ); + pPathSizer->Add(m_pBmpButtonParentFolder, 0, wxALL|wxEXPAND, 0); + pPathSizer->Add(m_pComboBoxPath, 1, wxALL|wxEXPAND, 5); +diff --git a/CPP/ANDROID/Format7zFree/jni/Android.mk b/CPP/ANDROID/Format7zFree/jni/Android.mk +index 7c74e73..48cb4fa 100644 +--- a/CPP/ANDROID/Format7zFree/jni/Android.mk ++++ b/CPP/ANDROID/Format7zFree/jni/Android.mk +@@ -91,8 +91,6 @@ LOCAL_SRC_FILES := \ + ../../../../CPP/7zip/Archive/PeHandler.cpp \ + ../../../../CPP/7zip/Archive/PpmdHandler.cpp \ + ../../../../CPP/7zip/Archive/QcowHandler.cpp \ +- ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp \ +- ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp \ + ../../../../CPP/7zip/Archive/RpmHandler.cpp \ + ../../../../CPP/7zip/Archive/SplitHandler.cpp \ + ../../../../CPP/7zip/Archive/SquashfsHandler.cpp \ +@@ -195,9 +193,6 @@ LOCAL_SRC_FILES := \ + ../../../../CPP/7zip/Crypto/MyAesReg.cpp \ + ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp \ + ../../../../CPP/7zip/Crypto/RandGen.cpp \ +- ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp \ +- ../../../../CPP/7zip/Crypto/Rar5Aes.cpp \ +- ../../../../CPP/7zip/Crypto/RarAes.cpp \ + ../../../../CPP/7zip/Crypto/WzAes.cpp \ + ../../../../CPP/7zip/Crypto/ZipCrypto.cpp \ + ../../../../CPP/7zip/Crypto/ZipStrong.cpp \ +diff --git a/ChangeLog b/ChangeLog +index daabd8e..f2a01d6 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -28,7 +28,6 @@ Version 16.00 (never published) + - 7z update bcj bugs were fixed. + - split (aaa.001) fixed + - iso loop fix +- - rar4 multivol -stdin kpidSize + - drag and drop 1<2.txt + - memory access violation fix + +@@ -80,11 +79,6 @@ Version 15.12 (never published) + - "There are no errors" string after "Test" operation inside archive. + - The bugs in LZMA SDK were fixed (but these bugs are not related directly to 7-Zip's code). + +- +- - From Windows version of 7-Zip 15.11 : +- - Some bugs were fixed. +- - 7-Zip 15.10 showed incorrect error message about missing volume for multivolume RAR archives. +- + - ..../LZHAM added + + +@@ -104,9 +98,6 @@ Version 15.10 beta + version (-m switch). + - Some bugs were fixed. + - extracting from solid wim archives worked incorrectly in some cases, +- - Also there are some minor changes. +- - 7-Zip can show the name of missing volume for multivolume RAR and VMDK archives. +- - Some internal changes with 7-Zip Benchmark. + + Version 15.09 beta + ================== +@@ -128,8 +119,6 @@ Version 15.08 beta + Version 15.07 beta + ================== + +- - "bin/Codecs/Rar29.so" renamed to "bin/Codecs/Rar.so" +- + - support for cygwin 64 bits + + - support for cygwin 64 bits with asm +@@ -153,15 +142,12 @@ Version 15.07 beta + + - From Windows version of 7-zip 15.06 beta: + +- - 7-Zip now can extract RAR5 archives. + - 7-Zip now doesn't sort files by type while adding to solid 7z archive. + new -mqs switch to sort files by type while adding to solid 7z archive. + - The BUG in 7-Zip File Manager was fixed: + The "Move" operation to open 7z archive didn't delete empty files. + - The BUG in 15.05 was fixed: + console version added some text to the end of stdout stream, is -so switch was used. +- - The BUG in 9.30 - 15.05 was fixed: +- 7-Zip could not open multivolume sfx RAR archive. + - Some bugs were fixed. + + - From Windows version of 7-zip 15.05 beta: +@@ -214,9 +200,6 @@ Version 9.38 + - bug #139 "password from commanline is visible in processes list" + Now the characters of the password are replaced with *. + +- - From Windows version of 7-zip +- - bug#138 If you extract the password with # program crashes +- 7z now supports long password in RAR 3 and 4. + + + +@@ -247,12 +230,6 @@ Version 9.22 + - #3283518 : Asm/x{32,64}/7zCrcT8U.asm introduces executable stack + + +-Version 9.20.1 +-============== +- +- - #3211479 "p7zip 9.20 - "unsupported method" with RAR files - " fixed +- "install.sh" installs again "bin/Codecs/Rar29.so" +- + Version 9.20 + ============ + +@@ -325,8 +302,6 @@ Version 9.13 + - Some bugs were fixed. + + +- - #2863580 "Crash in Rar decoder on a corrupted file" fixed +- + - #2860898 "Dereferencing a zero pointer in cab handler" fixed + + - #2860679 "Division by zero in cab decoder" fixed +@@ -455,7 +430,7 @@ Version 4.59 (never published) + - It's allowed to use -t switch for "list" and "extract" commands. + - Some bugs were fixed. + +- - Bug : wrong timestamp for files extracted from .zip or .rar archives ++ - Bug : wrong timestamp for files extracted from .zip archives + + + Version 4.58 +@@ -468,8 +443,6 @@ Version 4.58 + 2) -mcu switch: 7-Zip uses UTF-8, if there are non-ASCII symbols. + 3) -mcl switch: 7-Zip uses local code page. + - Now it's possible to store file creation time in 7z and ZIP archives (-mtc switch). +- - 7-Zip now can unpack multivolume RAR archives created with +- "old style volume names" scheme and names *.001, *.002, ... + - Now it's possible to use -mSW- and -mSW+ switches instead of -mSW=off and -mSW=on + - Some bugs were fixed. + +@@ -685,7 +658,7 @@ Version 4.44 + + - From Windows version of 7-zip 4.44 : + - 7za : Cab support +- - Speed optimizations for LZMA, Deflate, BZip2 and unRAR. ++ - Speed optimizations for LZMA, Deflate and BZip2. + - fix : now, updating a crypted header archive keeps the crypted header + + - fixes in the help displayed by 7za/7z/7zr. +@@ -805,8 +778,6 @@ Version 4.38 + + - patch #1465026 - Patch for install.sh for packagers + +- - DosDateTimeToFileTime fixed (rar format) +- + - contrib/VirtualFileSystemForMidnightCommander/u7z updated + (thank sgh_punk) + +@@ -923,8 +894,6 @@ Version 4.25 + - Some bugs were fixed + - DOCS/MANUAL/exit_codes.htm added + +- - new plugin for 7z : RAR format support (extracting only) +- + - better dependencies in makefile + + Version 4.23 +@@ -1112,9 +1081,6 @@ Version 4.10 + - new port of 7za from the source of 7za 4.10Beta for Windows + => p7zip now work on big endian CPU. + +- - 7z for Unix is not maintain anymore (because as the source of unrar plugin for 7z +- is not available, 7z is unless on Unix). +- + Version 0.91 + ============ + - add support for FreeBSD 5.2.1 +diff --git a/DOC/License.txt b/DOC/License.txt +index 0bcbe26..5b0dfaa 100644 +--- a/DOC/License.txt ++++ b/DOC/License.txt +@@ -5,15 +5,6 @@ + + 7-Zip Copyright (C) 1999-2016 Igor Pavlov. + +- Licenses for files are: +- +- 1) CPP/7zip/Compress/Rar* files: GNU LGPL + unRAR restriction +- 2) All other files: GNU LGPL +- +- The GNU LGPL + unRAR restriction means that you must follow both +- GNU LGPL rules and unRAR restriction rules. +- +- + GNU LGPL information + -------------------- + +@@ -33,21 +24,5 @@ + USA + + +- unRAR restriction +- ----------------- +- +- The decompression engine for RAR archives was developed using source +- code of unRAR program. +- All copyrights to original unRAR code are owned by Alexander Roshal. +- +- The license for original unRAR code has the following restriction: +- +- The unRAR sources cannot be used to re-create the RAR compression algorithm, +- which is proprietary. Distribution of modified unRAR sources in separate form +- or as a part of other software is permitted, provided that it is clearly +- stated in the documentation and source comments that the code may +- not be used to develop a RAR (WinRAR) compatible archiver. +- +- + -- + Igor Pavlov +diff --git a/DOC/Methods.txt b/DOC/Methods.txt +index 1a1c54c..daa94e2 100644 +--- a/DOC/Methods.txt ++++ b/DOC/Methods.txt +@@ -97,12 +97,6 @@ List of defined IDs + 02 - + 02 - BZip2 + +- 03 - [Rar] +- 01 - Rar1 +- 02 - Rar2 +- 03 - Rar3 +- 05 - Rar5 +- + 04 - [Arj] + 01 - Arj(1,2,3) + 02 - Arj4 +@@ -146,10 +140,6 @@ List of defined IDs + 01 - [Zip] + 01 - ZipCrypto (Main Zip crypto algo) + +- 03 - [RAR] +- 02 - +- 03 - Rar29AES (AES-128 + modified SHA-1) +- + 07 - [7z] + 01 - 7zAES (AES-256 + SHA-256) + +diff --git a/DOC/readme.txt b/DOC/readme.txt +index 4a6998c..00591d4 100644 +--- a/DOC/readme.txt ++++ b/DOC/readme.txt +@@ -9,30 +9,9 @@ + License Info + ------------ + +-7-Zip is free software distributed under the GNU LGPL +-(except for unRar code). ++7-Zip is free software distributed under the GNU LGPL. + read License.txt for more infomation about license. + +-Notes about unRAR license: +- +-Please check main restriction from unRar license: +- +- 2. The unRAR sources may be used in any software to handle RAR +- archives without limitations free of charge, but cannot be used +- to re-create the RAR compression algorithm, which is proprietary. +- Distribution of modified unRAR sources in separate form or as a +- part of other software is permitted, provided that it is clearly +- stated in the documentation and source comments that the code may +- not be used to develop a RAR (WinRAR) compatible archiver. +- +-In brief it means: +-1) You can compile and use compiled files under GNU LGPL rules, since +- unRAR license almost has no restrictions for compiled files. +- You can link these compiled files to LGPL programs. +-2) You can fix bugs in source code and use compiled fixed version. +-3) You can not use unRAR sources to re-create the RAR compression algorithm. +- +- + LZMA SDK + -------- + +@@ -96,7 +75,6 @@ DOC Documentation + --- + 7zFormat.txt - 7z format description + copying.txt - GNU LGPL license +- unRarLicense.txt - License for unRAR part of source code + src-history.txt - Sources history + Methods.txt - Compression method IDs + readme.txt - Readme file +diff --git a/DOC/src-history.txt b/DOC/src-history.txt +index 6b48c80..dda8057 100644 +--- a/DOC/src-history.txt ++++ b/DOC/src-history.txt +@@ -188,8 +188,6 @@ HISTORY of the 7-Zip source code + - 7-Zip now has 128 MB dictionary limit for 32-bit version: + It's for speed optimization: kNumLogBits = 9 + sizeof(size_t) / 2; + - TAR: 'D' link flag support. +-- 7-Zip now can unpack multivolume RAR archives created with +- "old style volume names" scheme (-vn switch) and names *.001, *.002, ... + - Fixed bugs: + - 7-Zip FM could not copy / move files to root network folders like \\COMPNAME\FOLDERNAME\ + In case of move it removed original files. +@@ -200,8 +198,6 @@ HISTORY of the 7-Zip source code + 7-zip tries to delete all extra fileds (except for WzAES). + And that code could hang. + - 7-Zip GUI didn't suggest BZip2 dictionary size used in previous run. +- - If creation time stamp was included in .RAR archive, 7-zip used creation time stamp +- as modification time stamp. + + 4.58 alpha 2 2007-12-31 + ------------------------- +@@ -251,7 +247,6 @@ HISTORY of the 7-Zip source code + stratup code, or you must add CPP/Common/CRC.cpp to your project. + - Method ID in .7z now is 63-bit integer (UInt64). + - Open error messages +-- unRar 1.5 fixed + - unShrink fixed + - BUG of 4.43 beta and 4.44 beta was fixed. + 7-Zip compressing to .zip in multi-threading mode didn't work in some cases. +@@ -433,11 +428,6 @@ HISTORY of the 7-Zip source code + contains common resurces + + +-2.30 Beta 19 2002-04-11 +-------------------------- +-- SDK/Archive/Rar/Handler.cpp +- supporting RAR29 +- + 2.30 Beta 18 2002-03-25 + ------------------------- + - SDK/Archive/Cab/MSZipDecoder.cpp +diff --git a/GUI/Contents/Info.plist b/GUI/Contents/Info.plist +index 71650e1..d60b262 100644 +--- a/GUI/Contents/Info.plist ++++ b/GUI/Contents/Info.plist +@@ -311,24 +311,6 @@ + + CFBundleTypeExtensions + +- rar +- RAR +- .r00 +- +- CFBundleTypeIconFile +- p7zip +- CFBundleTypeName +- Rar +- CFBundleTypeRole +- Viewer +- LSTypeIsPackage +- +- NSPersistentStoreTypeKey +- XML +- +- +- CFBundleTypeExtensions +- + ace + ACE + .c00 +diff --git a/README b/README +index b76407f..c03917b 100644 +--- a/README ++++ b/README +@@ -8,7 +8,7 @@ p7zip is a port of the Windows programs 7z.exe and 7za.exe provided by 7-zip. + 7-zip is a file archiver with the highest compression ratio. + Homepage : www.7-zip.org + +- 7z uses plugins (7z.so and Codecs/Rar.so) to handle archives. ++ 7z uses plugins (7z.so) to handle archives. + 7za is a stand-alone executable (7za handles less archive formats than 7z). + 7zr is a light stand-alone executable that supports only 7z/LZMA/BCJ/BCJ2. + +@@ -63,7 +63,6 @@ BUILD : + make sfx : to build bin/7zCon.sfx (7za can now create SFX archive) + make 7z : to build bin/7z and its plugins : + - "bin/7z.so" (GNU LGPL + AES code license) +- - "bin/Codecs/Rar.so" (GNU LGPL + unRAR restriction) + make 7zr : to build bin/7zr + make all : to build bin/7za and bin/7zCon.sfx + make all2 : to build bin/7za, bin/7z (with its plugins) and bin/7zCon.sfx +@@ -74,7 +73,6 @@ BUILD : + + make 7zG : to build bin/7zG and its plugins : + - "bin/7z.so" (GNU LGPL + AES code license) +- - "bin/Codecs/Rar.so" (GNU LGPL + unRAR restriction) + make test_7zG : to test bin/7zG (extracting, archiving, ...) + + +diff --git a/Utils/bin_to_sources.py b/Utils/bin_to_sources.py +index 1be72ec..7da359a 100644 +--- a/Utils/bin_to_sources.py ++++ b/Utils/bin_to_sources.py +@@ -13,9 +13,6 @@ file0='Utils/file_7zCon_sfx.py' + dir0='CPP/7zip/UI/Console' + file0='Utils/file_7z.py' + +-dir0='CPP/7zip/Compress/Rar' +-file0='Utils/file_Codecs_Rar_so.py' +- + dir0='CPP/7zip/Bundles/Format7zFree' + file0='Utils/file_7z_so.py' + +diff --git a/Utils/file_7z_so.py b/Utils/file_7z_so.py +index 7ca9fff..43edb87 100644 +--- a/Utils/file_7z_so.py ++++ b/Utils/file_7z_so.py +@@ -111,8 +111,6 @@ files_cpp=[ + 'CPP/7zip/Archive/PeHandler.cpp', + 'CPP/7zip/Archive/PpmdHandler.cpp', + 'CPP/7zip/Archive/QcowHandler.cpp', +- 'CPP/7zip/Archive/Rar/RarHandler.cpp', +- 'CPP/7zip/Archive/Rar/Rar5Handler.cpp', + 'CPP/7zip/Archive/RpmHandler.cpp', + 'CPP/7zip/Archive/SplitHandler.cpp', + 'CPP/7zip/Archive/SquashfsHandler.cpp', +@@ -215,9 +213,6 @@ files_cpp=[ + 'CPP/7zip/Crypto/MyAesReg.cpp', + 'CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp', + 'CPP/7zip/Crypto/RandGen.cpp', +- 'CPP/7zip/Crypto/Rar20Crypto.cpp', +- 'CPP/7zip/Crypto/Rar5Aes.cpp', +- 'CPP/7zip/Crypto/RarAes.cpp', + 'CPP/7zip/Crypto/WzAes.cpp', + 'CPP/7zip/Crypto/ZipCrypto.cpp', + 'CPP/7zip/Crypto/ZipStrong.cpp', +diff --git a/Utils/generate.py b/Utils/generate.py +index 132024a..62c0456 100755 +--- a/Utils/generate.py ++++ b/Utils/generate.py +@@ -281,7 +281,6 @@ import file_7zr + import file_7zG + import file_7zFM + import file_7z_so +-import file_Codecs_Rar_so + import file_Codecs_Lzham_so + import file_LzmaCon + import file_Client7z +@@ -440,43 +439,6 @@ LOCAL_CFLAGS := -DANDROID_NDK -fexceptions \ + -I../../../include_windows + ''') + +-project_Codecs_Rar=Structure(name="Rar",name2="Rar", +- type=TYPE_DLL, +- need_AES=False, +- includedirs=includedirs_7za, +- defines=[ "EXTERNAL_CODECS", "_FILE_OFFSET_BITS=64", "_LARGEFILE_SOURCE", "_REENTRANT", "ENV_UNIX", "BREAK_HANDLER", "UNICODE", "_UNICODE", "UNIX_USE_WIN_FILE" ], +- files_c=file_Codecs_Rar_so.files_c, +- files_cpp=file_Codecs_Rar_so.files_cpp, +- cmake_end=''' +- +-find_library(DL_LIB dl) +- +-link_directories(${DL_LIB_PATH}) +- +-IF(APPLE) +- TARGET_LINK_LIBRARIES(Rar ${COREFOUNDATION_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) +-ELSE(APPLE) +- IF(HAVE_PTHREADS) +- TARGET_LINK_LIBRARIES(Rar ${CMAKE_THREAD_LIBS_INIT} dl) +- ENDIF(HAVE_PTHREADS) +-ENDIF(APPLE) +- +-''', +-android_header=r''' +-LOCAL_CFLAGS := -DANDROID_NDK -fexceptions \ +- -DNDEBUG -D_REENTRANT -DENV_UNIX \ +- -DEXTERNAL_CODECS \ +- -DBREAK_HANDLER \ +- -DUNICODE -D_UNICODE -DUNIX_USE_WIN_FILE \ +- -I../../../Windows \ +- -I../../../Common \ +- -I../../../../C \ +--I../../../myWindows \ +--I../../../ \ +--I../../../include_windows +-''') +- +- + + project_Codecs_Lzham=Structure(name="Lzham",name2="Lzham", + type=TYPE_DLL, +@@ -762,7 +724,6 @@ generate_makefile_list('../CPP/7zip/Bundles/Alone/makefile.list',project_7za) + generate_makefile_list('../CPP/7zip/Bundles/Alone7z/makefile.list',project_7zr) + generate_makefile_list('../CPP/7zip/UI/Console/makefile.list',project_7z) + generate_makefile_list('../CPP/7zip/Bundles/Format7zFree/makefile.list',project_Format7zFree) +-generate_makefile_list('../CPP/7zip/Compress/Rar/makefile.list',project_Codecs_Rar,'../../../../bin/Codecs') + generate_makefile_list('../CPP/7zip/Compress/Lzham/makefile.list',project_Codecs_Lzham,'../../../../bin/Codecs') + generate_makefile_list('../CPP/7zip/Bundles/SFXCon/makefile.list',project_7zCon_sfx) + generate_makefile_list('../CPP/7zip/UI/GUI/makefile.list',project_7zG) +@@ -776,7 +737,6 @@ generate_pro('../CPP/7zip/QMAKE/7za/7za.pro',project_7za) + generate_pro('../CPP/7zip/QMAKE/7zr/7zr.pro',project_7zr) + generate_pro('../CPP/7zip/QMAKE/7z_/7z_.pro',project_7z) + generate_pro('../CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro',project_Format7zFree) +-generate_pro('../CPP/7zip/QMAKE/Rar/Rar.pro',project_Codecs_Rar) + generate_pro('../CPP/7zip/QMAKE/Lzham/Lzham.pro',project_Codecs_Lzham) + + generate_premake4('../CPP/7zip/PREMAKE/premake4.lua',project_7za) +diff --git a/contrib/qnx630sp3/qnx630sp3-shared b/contrib/qnx630sp3/qnx630sp3-shared +index 6f5481f..ea07114 100644 +--- a/contrib/qnx630sp3/qnx630sp3-shared ++++ b/contrib/qnx630sp3/qnx630sp3-shared +@@ -8,7 +8,7 @@ mv ./bin/7z ../${BIN} && mv ./bin/7za ../${BIN} && mv ./bin/7zr ../${BIN} && mv + make clean && \ + cp makefile.qnx_shared.so makefile.machine && \ + make 7z && \ +-mv ./bin/7z.so ../${BIN} && mv ./bin/Codecs/Rar.so ../${BIN}/Codecs && \ ++mv ./bin/7z.so ../${BIN} && \ + make clean && \ + mv makefile.machine.bak makefile.machine + echo "All done - look for binaries in ../${BIN}" +diff --git a/makefile b/makefile +index 745c8ed..f8e8e33 100644 +--- a/makefile ++++ b/makefile +@@ -31,7 +31,6 @@ depend: + $(MAKE) -C CPP/7zip/UI/Client7z depend + $(MAKE) -C CPP/7zip/UI/Console depend + $(MAKE) -C CPP/7zip/Bundles/Format7zFree depend +- $(MAKE) -C CPP/7zip/Compress/Rar depend + $(MAKE) -C CPP/7zip/UI/GUI depend + $(MAKE) -C CPP/7zip/UI/FileManager depend + +@@ -42,7 +41,6 @@ sfx: common + common7z:common + $(MKDIR) bin/Codecs + $(MAKE) -C CPP/7zip/Bundles/Format7zFree all +- $(MAKE) -C CPP/7zip/Compress/Rar all + + lzham:common + $(MKDIR) bin/Codecs +@@ -67,7 +65,6 @@ clean_C: + $(MAKE) -C CPP/7zip/UI/FileManager clean + $(MAKE) -C CPP/7zip/UI/GUI clean + $(MAKE) -C CPP/7zip/Bundles/Format7zFree clean +- $(MAKE) -C CPP/7zip/Compress/Rar clean + $(MAKE) -C CPP/7zip/Compress/Lzham clean + $(MAKE) -C CPP/7zip/Bundles/LzmaCon clean2 + $(MAKE) -C CPP/7zip/Bundles/AloneGCOV clean +diff --git a/makefile.oldmake b/makefile.oldmake +index afc681c..690af08 100644 +--- a/makefile.oldmake ++++ b/makefile.oldmake +@@ -31,7 +31,6 @@ depend: + cd CPP/7zip/UI/Client7z ; $(MAKE) depend + cd CPP/7zip/UI/Console ; $(MAKE) depend + cd CPP/7zip/Bundles/Format7zFree ; $(MAKE) depend +- cd CPP/7zip/Compress/Rar ; $(MAKE) depend + cd CPP/7zip/UI/GUI ; $(MAKE) depend + cd CPP/7zip/UI/FileManager ; $(MAKE) depend + +@@ -42,7 +41,6 @@ sfx: common + common7z:common + $(MKDIR) bin/Codecs + cd CPP/7zip/Bundles/Format7zFree ; $(MAKE) all +- cd CPP/7zip/Compress/Rar ; $(MAKE) all + + lzham:common + $(MKDIR) bin/Codecs +@@ -67,7 +65,6 @@ clean_C: + cd CPP/7zip/UI/FileManager ; $(MAKE) clean + cd CPP/7zip/UI/GUI ; $(MAKE) clean + cd CPP/7zip/Bundles/Format7zFree ; $(MAKE) clean +- cd CPP/7zip/Compress/Rar ; $(MAKE) clean + cd CPP/7zip/Compress/Lzham ; $(MAKE) clean + cd CPP/7zip/Bundles/LzmaCon ; $(MAKE) clean2 + cd CPP/7zip/Bundles/AloneGCOV ; $(MAKE) clean +diff --git a/makefile.qnx_shared.so b/makefile.qnx_shared.so +index abd1caf..cff5485 100644 +--- a/makefile.qnx_shared.so ++++ b/makefile.qnx_shared.so +@@ -1,5 +1,5 @@ + ################################################### +-# makefile.machine for "7z.so , Codecs/Rar.so" : ++# makefile.machine for "7z.so" : + # tested with p7zip-4.47_beta on qnx-6.3.0 sp3 x86 target + + OPTFLAGS=-O -s diff --git a/p7zip/libre_doc.patch b/p7zip/libre_doc.patch new file mode 100644 index 0000000..c1ab5b4 --- /dev/null +++ b/p7zip/libre_doc.patch @@ -0,0 +1,22 @@ +--- a/DOC/MANUAL/cmdline/switches/update.htm 1990-01-01 01:00:00.000000000 +0100 ++++ b/DOC/MANUAL/cmdline/switches/update.htm 2021-06-01 14:01:08.876467652 +0200 +@@ -139,7 +139,7 @@ +
  • UTC file systems: NTFS +
  • UTC archive formats: .zip with -mtc switch, 7z, tar, gzip2, iso, wim +
  • Local time file systems : FAT, FAT32 +-
  • Local time archive formats : rar, zip, cab ++
  • Local time archive formats : zip, cab + + +

    Examples

    + +--- a/DOC/MANUAL/general/formats.htm 1990-01-01 01:00:00.000000000 +0100 ++++ b/DOC/MANUAL/general/formats.htm 2021-06-01 14:04:07.844809568 +0200 +@@ -47,7 +47,6 @@ + NSIS nsis + NTFS ntfs img + MBR mbr +- RAR rar r00 + RPM rpm + PPMD ppmd + QCOW2 qcow qcow2 qcow2c diff --git a/p7zip/p7zip.install b/p7zip/p7zip.install new file mode 100644 index 0000000..ee6c086 --- /dev/null +++ b/p7zip/p7zip.install @@ -0,0 +1,6 @@ +post_upgrade() { + if (($(vercmp $2 9.38.1-3) < 0)); then + echo ':: The 7zFM graphical frontend is no longer included in this package.' + echo ' If you used it, consider installing xarchiver.' + fi +} diff --git a/pango/PKGBUILD b/pango/PKGBUILD new file mode 100644 index 0000000..516e501 --- /dev/null +++ b/pango/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=pango +pkgver=1.46.2 +_debver=1.46.2 +_debrel=3 +pkgrel=2 +epoch=1 +pkgdesc="A library for layout and rendering of text" +url="https://www.pango.org/" +arch=(i686 x86_64) +license=(LGPL-2) +depends=(libthai cairo libxft harfbuzz fribidi) +makedepends=(gobject-introspection help2man meson quilt) +source=(https://download.gnome.org/sources/${pkgname}/${pkgver:0:4}/${pkgname}-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/p/pango1.0/pango1.0_$_debver-$_debrel.debian.tar.xz) +sha512sums=('84308b217e5e0f80d7342b95fba0591788177b5954634aaaf92779a30d2f76dc757ba99607d951bf01478d2564a6480ecaa3f50853320d3a6b1f1145200d275e' + 'c72f642423a5d367a09df48572da691b740e252391d9b56623ff5677f5d35fe8d68cce8a07c45a270142a2af43049384d3677baf99141a6bf77080be8ca1a6d7') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgname-$pkgver build -D gtk_doc=false + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/pangomm/PKGBUILD b/pangomm/PKGBUILD new file mode 100644 index 0000000..f0884e0 --- /dev/null +++ b/pangomm/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=pangomm +pkgver=2.46.1 +pkgrel=3 +pkgdesc="C++ bindings for Pango" +url='https://www.gtkmm.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1' 'GPL-2') +depends=('pango' 'glibmm' 'cairomm' 'libsigc++') +makedepends=('meson' 'mm-common' 'glibmm' 'cairomm') +options=(!emptydirs) +source=("https://ftp.gnome.org/pub/GNOME/sources/$pkgname/${pkgver:0:4}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('cb375af9422d8fa7683fcdd4dc9b9179b48dcfd2278a587fcfc86a04c5c0bbd5feb348a2b45c7bf233a3ad68a9614c66c8300fd4d287b5e144d336441f5aa46a') + +build() { + hyperbola-meson $pkgname-$pkgver build -D maintainer-mode=true + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/pangox-compat/PKGBUILD b/pangox-compat/PKGBUILD new file mode 100644 index 0000000..d1eba4a --- /dev/null +++ b/pangox-compat/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=pangox-compat +pkgver=0.0.2 +pkgrel=1 +pkgdesc="X Window System font support for Pango" +arch=('i686' 'x86_64') +url='http://www.pango.org/' +license=('LGPL-2') +depends=('pango') +source=("https://gitlab.gnome.org/Archive/pangox-compat/-/archive/${pkgver}/pangox-compat-${pkgver}.tar.gz" + "disable-shaper.patch") +sha512sums=('8e7ccec3a84fcc91400f5f42da3e39967bb9592078e69674cfc9d2686d03925be2b9a6f77a8a44395dc68b4b987ae0d27f12556f9e7d31b9bdffd4969a36ea42' + 'f8533aad00e912f4db4732d78ad93c79d460df75777a6ae1e907b177af4cb178e672a4968b333d68af053c50f2b1bbe5fae8c5387f7daccb2b2e6224e3121d46') + +prepare() { + cd ${pkgname}-${pkgver} + patch -Nup1 -i '../disable-shaper.patch' +} + +build() { + cd ${pkgname}-${pkgver} + + if [ ! -s 'Makefile' ]; then + NOCONFIGURE=1 ./autogen.sh + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + fi + make +} + +package() { + cd ${pkgname}-${pkgver} + make -j1 DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/pangox-compat/disable-shaper.patch b/pangox-compat/disable-shaper.patch new file mode 100644 index 0000000..87f4598 --- /dev/null +++ b/pangox-compat/disable-shaper.patch @@ -0,0 +1,15 @@ +--- pangox-compat/pangox.c.orig 2020-05-04 18:31:53.421197064 -0400 ++++ pangox-compat/pangox.c 2020-05-04 18:32:41.251146923 -0400 +@@ -277,11 +277,11 @@ pango_x_font_class_init (PangoXFontClass + object_class->finalize = pango_x_font_finalize; + object_class->dispose = pango_x_font_dispose; + + font_class->describe = pango_x_font_describe; + font_class->get_coverage = pango_x_font_get_coverage; +- font_class->find_shaper = pango_x_font_find_shaper; ++ /* font_class->find_shaper = pango_x_font_find_shaper; */ + font_class->get_glyph_extents = pango_x_font_get_glyph_extents; + font_class->get_metrics = pango_x_font_get_metrics; + font_class->get_font_map = pango_x_font_get_font_map; + } + diff --git a/par2cmdline/PKGBUILD b/par2cmdline/PKGBUILD new file mode 100644 index 0000000..e845462 --- /dev/null +++ b/par2cmdline/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=par2cmdline +pkgver=0.8.1 +pkgrel=1 +pkgdesc='A PAR 2.0 compatible file verification and repair tool' +url='https://github.com/BlackIkeEagle/par2cmdline' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('gcc-libs') +source=("https://github.com/Parchive/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz" + "https://github.com/Parchive/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz.sig") +sha512sums=('b0032639353d869ffa449c8b5f27fe1deec0e5e4326ba90aae5c8a03f82441c69ba40f2032c4cbda98f415c3d100136beed8285d099ffbf32329451e719478d9' + 'SKIP') +validpgpkeys=('DB2277BCD500AA3825610BDDDB323392796CA067') + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/parallel/PKGBUILD b/parallel/PKGBUILD new file mode 100644 index 0000000..7fe1d09 --- /dev/null +++ b/parallel/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=parallel +pkgver=20161222 +pkgrel=1 +pkgdesc="Build and execute command lines from standard input in parallel" +license=('GPL-3') +arch=('any') +url='https://www.gnu.org/software/parallel/' +depends=('perl') +source=("https://mirrors.sarata.com/gnu/$pkgname/$pkgname-$pkgver.tar.bz2") +sha512sums=('19040dd3939a22c6a7023d540b71cb7b08ae74e59925cad0cf31383417b183321aea23ac6959416b67ea0acf62ecab6b07312dbe7cf9fa6230e883713cefea56') + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/parcellite/PKGBUILD b/parcellite/PKGBUILD new file mode 100644 index 0000000..05357ed --- /dev/null +++ b/parcellite/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=parcellite +pkgver=1.2.1 +pkgrel=2 +pkgdesc="Lightweight GTK+ clipboard manager" +arch=('i686' 'x86_64') +url='https://parcellite.sourceforge.net/' +license=('GPL-3') +depends=('gtk2' 'xdotool') +makedepends=('intltool' 'gettext-tiny') +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "fix-crash.patch" + "remove-unused-des-and-add-missing-keywords.patch") +sha512sums=('14b513e760e205666e00893dffb75ef3d42994aaeca3238b5adbed4af7495a7ed67cfabdcb163024fb9b0a7e832599bb31c54201217ac3fca88e0a4a22deb53d' + '3cfbf5e22ff33d4c33696fb2a8e4c24b91ded0a36b30188e47f56532e315184eed69e66f3dc4dd9cd1dcaa1310d9343e79d19238012acf76fb36418766e007c9' + 'dd7d8f99c6154d6ed159d425060bc25573fc67750e2e581217ac1042a6b780dfc22c4bda195c5456a46823eda6f49491d72a5d69f7b72ebc074a14b4a5b5f9da') + +prepare() { + cd ${pkgname}-${pkgver} + + # apply patch fixing crash on the preferences dialogue + patch --verbose -p1 -i ../fix-crash.patch + + # apply patch removing other desktop environments that are unused + # and adding missing keywords in the application shortcut + patch --verbose -p1 -i ../remove-unused-des-and-add-missing-keywords.patch + sed -i '8d' data/${pkgname}-startup.desktop.in +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR=${pkgdir} install + install -Dvm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/parcellite/fix-crash.patch b/parcellite/fix-crash.patch new file mode 100644 index 0000000..a8ce712 --- /dev/null +++ b/parcellite/fix-crash.patch @@ -0,0 +1,11 @@ +--- a/src/preferences.c.orig 2013-11-11 14:39:32.000000000 +0400 ++++ b/src/preferences.c 2013-11-11 14:40:03.970776522 +0400 +@@ -381,7 +381,7 @@ + } + /**now go through and make sure we have no duplicates */ + for (i=0;NULL != keylist[i].name; ++i){ +- if(0 != keylist[i].keyval[0]){ ++ if(NULL != keylist[i].keyval && 0 != keylist[i].keyval[0]){ + /**see if it exists elsewhere */ + for (l=0;NULL != keylist[l].name; ++l){ + if(l!=i && 0 != keylist[l].keyval[0]){ diff --git a/parcellite/remove-unused-des-and-add-missing-keywords.patch b/parcellite/remove-unused-des-and-add-missing-keywords.patch new file mode 100644 index 0000000..2368906 --- /dev/null +++ b/parcellite/remove-unused-des-and-add-missing-keywords.patch @@ -0,0 +1,17 @@ +Summary: Remove other desktop environments that are unused, and + add missing keywords in the app shortcut. +Authors: Jayvee Enaguas + Hugo Lufeuvre (a patch based on Debian) +Date: 2021-10-08 23:20:30.000000000 +0000 + +--- a/data/parcellite.desktop.in 2017-01-24 07:48:57.000000000 +0000 ++++ a/data/parcellite.desktop.in 2021-10-08 23:20:30.000000000 +0000 +@@ -6,5 +6,6 @@ + Exec=parcellite + Terminal=false + Type=Application +-Categories=GTK;GNOME;Application;Utility; +-OnlyShowIn=GNOME;KDE;LXDE;MATE;Razor;ROX;TDE;Unity;XFCE;Old; ++Keywords=clipboard;copy;manager;paste; ++Categories=GTK;Application;Utility; ++OnlyShowIn=Lumina;Old;ROX; diff --git a/parted/PKGBUILD b/parted/PKGBUILD new file mode 100644 index 0000000..931f9fd --- /dev/null +++ b/parted/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=parted +pkgver=3.5 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="A program for creating, destroying, resizing, checking and copying partitions" +arch=('i686' 'x86_64') +license=('GPL-3') +url='https://www.gnu.org/software/parted/parted.html' +depends=('device-mapper' 'libutil-linux') +makedepends=('pkg-config' 'quilt') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/p/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('87fc69e947de5f0b670ee5373a7cdf86180cd782f6d7280f970f217f73f55ee1b1b018563f48954f3a54fdde5974b33e07eee68c9ccdf08e621d3dc0e3ce126a' + '2308e3f954219dafa08517860d62b24d4059bd6c549a4042f089a3c9009e8a558ff551b1b29cfcc0dca063774e4d8a201450bfb74e3fc3e288d8f5f152d09a61') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + # Do *not* add --disable-debug, it prevents building fatresize + # https://github.com/ya-mouse/fatresize/issues/9 + ./configure \ + --prefix=/usr \ + --disable-rpath + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/partimage/PKGBUILD b/partimage/PKGBUILD new file mode 100644 index 0000000..ea2d51d --- /dev/null +++ b/partimage/PKGBUILD @@ -0,0 +1,76 @@ +# Maintainer: Jesus E. + +pkgname=partimage +pkgver=0.6.9 +_debver=$pkgver +_debrel=8 +pkgrel=12 +pkgdesc="Partition Image saves partitions in many formats to an image file." +arch=('i686' 'x86_64') +url='https://www.partimage.org/' +license=('GPL-2') +depends=('libnewt' 'bzip2' 'libressl') +makedepends=('quilt') +backup=('etc/partimaged/partimagedusers' + 'etc/conf.d/partimaged') +install='partimage.install' +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/p/partimage/partimage_${_debver}-${_debrel}.debian.tar.xz" + "partimage-0.6.9-zlib-1.2.6.patch" + "use-SSLv3-by-default.patch" + "partimaged-gencrt" + "partimaged.confd" + "partimaged.initd") +sha512sums=('252885921b23933fdcdf0bb6efa4b82066b08ca95cc653296912d384ae875b421c1d39f347a90115315139176d4eab4a930c24919c2d38cf00ed29c764cd14d9' + '9a3e77425f7482e0e08225af27d6c2375317c377a9c81710ea246c5f621076cb6c608b4c78875c4bbbacdbdb8855a8f89afa4561172b72f112bae84f7b05432c' + '257354c109fda489ad1aa30da19d3bc5189d6098bd5641aa079a3319201e30fc8501fef7952cb9ae59eca8760b18f94fc5570a0a27773b595cabea2815156c27' + '580d9ef868b423fd77282839f619239f92789e202fc25cb2ee409ecc43424f89bd5d31314a6aba183ef36a61b427cb24a0ca1f62f53235b5bc60f574c5469a1b' + '3b8085ca27d550c00312a5059daceae10d33a863a15883181182eaf5f3ffac2e60b802cacb20f56a40388f97d85769549e408dbe4b387ad332786c04e9dfdc75' + '1be320a8dceb3076e6aa2d8b1a8a4d01a380ad1209133997fd0d87cf1d0974fc4877c3c8b41c07fbb99249c8a00132f2c5fa7ffadf26f4e41cc2abfcd6b62116' + '59165d373271b3f47d21217891cc5f5b37d9c57ae667c4a763aedd69cbcb54d2da190d67da0e08a161f91e5d99461dde7e142378d7a9c91968d7eb765555ba95') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -Np1 -i "${srcdir}/partimage-0.6.9-zlib-1.2.6.patch" + patch -Np1 -i "${srcdir}/use-SSLv3-by-default.patch" + + sed -e 's/CRYPTO_lock/X509_new/g' -i configure + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + install -Dm0644 COPYING "${pkgdir}/usr/share/licenses/partimage/COPYING" + + install -Dm0755 "${srcdir}/partimaged-gencrt" "${pkgdir}/usr/sbin/partimaged-gencrt" + + chmod 644 "${pkgdir}/etc/partimaged/partimagedusers" + chown 110:110 "${pkgdir}/etc/partimaged/partimagedusers" + + install -Dm0644 "${srcdir}/partimaged.confd" "${pkgdir}/etc/conf.d/partimaged" + install -Dm0755 "${srcdir}/partimaged.initd" "${pkgdir}/etc/init.d/partimaged" +} diff --git a/partimage/partimage-0.6.9-zlib-1.2.6.patch b/partimage/partimage-0.6.9-zlib-1.2.6.patch new file mode 100644 index 0000000..0f311d2 --- /dev/null +++ b/partimage/partimage-0.6.9-zlib-1.2.6.patch @@ -0,0 +1,35 @@ +diff --git a/src/client/imagefile.cpp b/src/client/imagefile.cpp +index dd83411..62d0f72 100644 +--- a/src/client/imagefile.cpp ++++ b/src/client/imagefile.cpp +@@ -783,7 +783,7 @@ void CImage::openWriting() + else if (m_options.dwCompression == COMPRESS_GZIP) // Gzip compression + { + showDebug(1, "open gzip\n"); +- m_gzImageFile = (gzFile *) gzdopen(m_nFdImage, "wb"); //"wb1h"); ++ m_gzImageFile = gzdopen(m_nFdImage, "wb"); //"wb1h"); + if (m_gzImageFile == NULL) + { + showDebug(1, "error:%d %s\n", errno, strerror(errno)); +@@ -1098,7 +1098,7 @@ void CImage::openReading(CVolumeHeader *vh /* = NULL */) + } + else if (m_options.dwCompression == COMPRESS_GZIP) // Gzip compression + { +- m_gzImageFile = (gzFile *) gzdopen(m_nFdImage, "rb"); ++ m_gzImageFile = gzdopen(m_nFdImage, "rb"); + if (m_gzImageFile == NULL) + THROW(ERR_ERRNO, errno); + else +diff --git a/src/client/imagefile.h b/src/client/imagefile.h +index 4ba8910..6adb098 100644 +--- a/src/client/imagefile.h ++++ b/src/client/imagefile.h +@@ -41,7 +41,7 @@ class CImage + COptions m_options; + + FILE *m_fImageFile; +- gzFile *m_gzImageFile; ++ gzFile m_gzImageFile; + BZFILE *m_bzImageFile; + + int m_nFdImage; diff --git a/partimage/partimage.install b/partimage/partimage.install new file mode 100644 index 0000000..7a580b6 --- /dev/null +++ b/partimage/partimage.install @@ -0,0 +1,28 @@ +post_install() { + if ! getent group partimag &>/dev/null; then + groupadd -g 110 partimag >/dev/null + fi + if ! getent passwd partimag &>/dev/null; then + useradd -u 110 -g partimag -G adm -c "Partimage user" -d /dev/null -s /bin/nologin partimag >/dev/null + fi + if ! groups partimag | grep adm &>/dev/null; then + gpasswd -a partimag adm >/dev/null + fi + partimag_shell=$(getent passwd partimag | cut -d: -f7) + if [ "$partimag_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin partimag &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd partimag &>/dev/null; then + userdel partimag >/dev/null + fi + if getent group partimag &>/dev/null; then + groupdel partimag >/dev/null + fi +} diff --git a/partimage/partimaged-gencrt b/partimage/partimaged-gencrt new file mode 100644 index 0000000..16fe5ff --- /dev/null +++ b/partimage/partimaged-gencrt @@ -0,0 +1,18 @@ +#!/bin/sh + +if [ `whoami` != "root" ]; then + echo "You must be root to generate certificates." + exit +fi + +echo -n "==> Generating certificate for Partimage/PartimageD SSL... " +cd /etc/partimaged +openssl req -new -x509 -outform PEM > partimaged.csr +openssl rsa -in privkey.pem -out partimaged.key +rm privkey.pem +openssl x509 -in partimaged.csr -out partimaged.cert -signkey partimaged.key +rm partimaged.csr +chmod 600 partimaged.key +chmod 600 partimaged.cert +chown partimag:partimag partimaged.key +chown partimag:partimag partimaged.cert diff --git a/partimage/partimaged.confd b/partimage/partimaged.confd new file mode 100644 index 0000000..0f4301b --- /dev/null +++ b/partimage/partimaged.confd @@ -0,0 +1,9 @@ +# Copyright 2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# You can define the following optional arguments: +# -d Destination directory for the backup images +# -pX Server port +# -r Chroot directory for improved security + +#PARTIMAGED_OPTS="" diff --git a/partimage/partimaged.initd b/partimage/partimaged.initd new file mode 100644 index 0000000..77ee8ba --- /dev/null +++ b/partimage/partimaged.initd @@ -0,0 +1,23 @@ +#!/sbin/openrc-run +# Copyright 2005-2010 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License, v2 or later + +PARTIMAGED="/usr/sbin/partimaged" + +depend() { + need net +} + +start() { + ebegin "Starting partimaged" + start-stop-daemon --start --exec ${PARTIMAGED} \ + -- ${PARTIMAGED_OPTS} --daemon + eend $? +} + +stop() { + ebegin "Stopping partimaged" + start-stop-daemon --stop --exec ${PARTIMAGED} + eend $? +} diff --git a/partimage/use-SSLv3-by-default.patch b/partimage/use-SSLv3-by-default.patch new file mode 100644 index 0000000..cf21995 --- /dev/null +++ b/partimage/use-SSLv3-by-default.patch @@ -0,0 +1,80 @@ +From 8b05af027723ff3a64040275d4050ff0e992d629 Mon Sep 17 00:00:00 2001 +From: Marko Kohtala +Date: Sun, 9 Feb 2014 22:54:11 +0200 +Subject: [PATCH] Use SSLv3 by default + +SSLv2_client_method may be hidden. Use the SSLv23_client_method instead. + +This is a fix from Debian package partimage-0.6.8-2.2. + +Signed-off-by: Marko Kohtala +--- + src/client/netclient.cpp | 3 +-- + src/client/netclient.h | 6 ------ + src/server/netserver.cpp | 3 +-- + src/server/netserver.h | 6 ------ + 4 files changed, 2 insertions(+), 16 deletions(-) + +diff --git a/src/client/netclient.cpp b/src/client/netclient.cpp +index 30b8d5c..43b2672 100644 +--- a/src/client/netclient.cpp ++++ b/src/client/netclient.cpp +@@ -43,9 +43,8 @@ CNetClient::CNetClient(bool bMustLogin, bool bUseSSL):CNet() + { + showDebug(3, "initializing client ssl\n"); + SSLeay_add_ssl_algorithms(); +- meth = SSLv2_client_method(); + SSL_load_error_strings(); +- ctx = SSL_CTX_new(meth); ++ ctx = SSL_CTX_new(SSLv23_client_method()); + if (!ctx) + THROW(ERR_SSL_CTX); + m_bUseSSL = (ctx != NULL); +diff --git a/src/client/netclient.h b/src/client/netclient.h +index 8423798..9d98b39 100644 +--- a/src/client/netclient.h ++++ b/src/client/netclient.h +@@ -35,12 +35,6 @@ class CNetClient : public CNet + #ifdef HAVE_SSL + SSL_CTX * ctx; + X509 * server_cert; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L +- SSL_METHOD const * meth; +-#else +- SSL_METHOD * meth; +-#endif // OPENSSL_VERSION_NUMBER +- + #endif + bool m_bUseSSL; + bool m_bMustLogin; +diff --git a/src/server/netserver.cpp b/src/server/netserver.cpp +index a542760..28c43cc 100644 +--- a/src/server/netserver.cpp ++++ b/src/server/netserver.cpp +@@ -39,8 +39,7 @@ CNetServer::CNetServer( uint32_t ip4_addr, unsigned short int port):CNet() + { + SSL_load_error_strings(); + SSLeay_add_ssl_algorithms(); +- meth = SSLv23_server_method(); +- ctx = SSL_CTX_new(meth); ++ ctx = SSL_CTX_new(SSLv23_server_method()); + if (!ctx) + { + ERR_print_errors_fp(stderr); +diff --git a/src/server/netserver.h b/src/server/netserver.h +index 01f6b6c..29d2a32 100644 +--- a/src/server/netserver.h ++++ b/src/server/netserver.h +@@ -41,12 +41,6 @@ class CNetServer : public CNet + #ifdef HAVE_SSL + SSL_CTX * ctx; + X509 * client_cert; +-#if OPENSSL_VERSION_NUMBER >= 0x10000000L +- SSL_METHOD const * meth; +-#else +- SSL_METHOD * meth; +-#endif // OPENSSL_VERSION_NUMBER +- + int err; + #endif + diff --git a/pass-otp/PKGBUILD b/pass-otp/PKGBUILD new file mode 100644 index 0000000..bc7b749 --- /dev/null +++ b/pass-otp/PKGBUILD @@ -0,0 +1,19 @@ +# Maintainer: Jesus E. +# Contibutor (Arch): Alexandre Pujol + +pkgname=pass-otp +pkgver=1.2.0 +pkgrel=4 +pkgdesc="A password-store extension for managing one-time-password (OTP) tokens" +arch=('i686' 'x86_64') +url='https://github.com/tadfisher/pass-otp' +license=('GPL-3') +depends=('password-store' 'oath-toolkit' 'qrencode') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/tadfisher/pass-otp/archive/v${pkgver}.tar.gz") +sha512sums=('3d1417462998750ef1580169ed0e4b721b5f430cd86a678d1b6bc7b2ac123879902f7d22c28dc21e8a171ec80dfc51b6465d0dcc78cb009eb731651f2cb152f5') + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/password-store/PKGBUILD b/password-store/PKGBUILD new file mode 100644 index 0000000..4ed214f --- /dev/null +++ b/password-store/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=password-store +pkgver=1.7.4 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="Stores, retrieves, generates and synchronizes passwords securely" +arch=('i686' 'x86_64') +url='https://www.passwordstore.org/' +license=('GPL-2') +depends=('bash' 'gnupg-stable' 'tree') +makedepends=('quilt') +optdepends=('git-legacy: for Git support' + 'dmenu: for passmenu' + 'xdotool: to type passwords with passmenu' + 'qrencode: for QR code support' + 'vim-plugin-runtime: for redact_pass.vim' + 'xclip: for clipboard support on X11') +source=("https://git.zx2c4.com/${pkgname}/snapshot/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/p/password-store/password-store_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('1fe108895b224451b54e545d399b6a97040e094049448509f92ae33164a5cf9044a91f52edfc705fcf333f6526df1a478deeebc4df109764d58100f9e3e22681' + 'a8f89a7116a402f18ddc42e26df8b0f5ca3bb448b53093cf319a4db074c2d6b05c1c087d0531b20a7562c8451b9cb599dd46e32a7436dd7a7f10a4711db563f2') + +prepare() { + cd "${srcdir}/$pkgname-$pkgver/" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd "${srcdir}/$pkgname-$pkgver/" + make DESTDIR="${pkgdir}" WITH_ALLCOMP=yes install + + install -Dm755 -t "${pkgdir}/usr/bin" contrib/dmenu/passmenu + install -Dm644 -t "${pkgdir}/usr/share/vim/vimfiles/plugin" contrib/vim/redact_pass.vim + + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/patchutils/PKGBUILD b/patchutils/PKGBUILD new file mode 100644 index 0000000..6651102 --- /dev/null +++ b/patchutils/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=patchutils +pkgver=0.4.2 +_debver=0.4.2 +_debrel=1 +pkgrel=1 +pkgdesc="A small collection of programs that operate on patch files" +arch=('i686' 'x86_64') +license=('GPL-2') +url='http://cyberelk.net/tim/patchutils/' +depends=('python' 'pcre2') +makedepends=('xmlto' 'docbook-xsl' 'quilt') +source=("https://deb.debian.org/debian/pool/main/p/patchutils/patchutils_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/p/patchutils/patchutils_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('6740c3a6feefc1e41f112a3b126ac6369f8dcc938ae8b7dcd6e368a5b3a23b37a7db42edcd63ff2f2a61c083d24c8205d9a460ef8f8983ccb8188d6e374477e3' + 'd3c5ff6d0a6b50b24b6bfde37123966c064259310db1841091894fcc8618d5b6be14e894683225765dcc2e5d64ce1557a5f06735532771044a78db940e3eb41c') + +prepare() { + cd "${srcdir}"/${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}"/${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/pax/PKGBUILD b/pax/PKGBUILD new file mode 100644 index 0000000..3d31c6b --- /dev/null +++ b/pax/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=pax +pkgver=20201030 +pkgrel=1 +pkgdesc="Portable Archive Interchange - the POSIX standard archive tool for cpio and tar formats" +arch=('i686' 'x86_64') +url='https://www.mirbsd.org/pax.htm' +license=('Modified-BSD') +depends=('glibc') +source=("https://www.mirbsd.org/MirOS/dist/mir/cpio/paxmirabilis-${pkgver}.cpio.gz") +sha512sums=('14c913db49c05b92f3448b7ae2e11b4fdb86c2daa5f269d86e044e8779eec7ea19b41534fbd8ebfe31cffe6b50e51c0460c3994307ba2cfa07029602604882de') +noextract=("paxmirabilis-${pkgver}.cpio.gz") + +prepare() { + mkdir -p "${pkgname}-${pkgver}/build" + bsdtar -x -f "paxmirabilis-${pkgver}.cpio.gz" -C "$pkgname-${pkgver}" --strip-components='1' +} + +build() { + cd "${pkgname}-${pkgver}/build" + sh ../Build.sh -r -tpax + + # license + sed -n '5,36p' ../pax.h > LICENSE # create file + sed -i '1,32s/^.\{,3\}//' LICENSE # erase C comments +} + +package(){ + # executables + install -D -m755 "${pkgname}-${pkgver}/build/pax" -t "${pkgdir}/usr/bin" + ln -s pax "${pkgdir}/usr/bin/paxcpio" + ln -s pax "${pkgdir}/usr/bin/paxtar" + + # man pages + install -D -m644 "${pkgname}-${pkgver}/build/mans/"*.1 -t "${pkgdir}/usr/share/man/man1" + + # license + install -D -m644 "${pkgname}-${pkgver}/build/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pbzip2/PKGBUILD b/pbzip2/PKGBUILD new file mode 100644 index 0000000..305019a --- /dev/null +++ b/pbzip2/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=pbzip2 +pkgver=1.1.13 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Parallel implementation of the bzip2 block-sorting file compressor" +arch=('i686' 'x86_64') +url="http://compression.ca/pbzip2/" +license=('Original-BSD') +depends=('bzip2' 'gcc-libs') +makedepends=('quilt') +source=(https://launchpad.net/$pkgname/1.1/$pkgver/+download/$pkgname-$pkgver.tar.gz{,.asc} + https://deb.debian.org/debian/pool/main/p/pbzip2/pbzip2_$_debver-$_debrel.debian.tar.xz) +sha512sums=('a150e476a85b2ae71c244561380f8f113072ef712173afaa0bdace5845d5f81a15b135258cb01376156b69a5085b02b7ab866cfab5713aa773b251b203c087b8' + 'SKIP' + 'd4daeb8d0fb8d78245e93b99bc151b71fbfbdc1fa82b9556624cf901cd8c7410f0e5bae368f7fc734a20c380bc923cadf58feb28af24a91f8f856b3770914747') +validpgpkeys=('F3D99FF0F0AA96A659AD61A9D332F1B09A0D9836') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # Use our CXXFLAGS and LDFLAGS + sed -i '/^\(CXX\|LD\)FLAGS =/d' Makefile +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/pcc/PKGBUILD b/pcc/PKGBUILD new file mode 100644 index 0000000..d22e15f --- /dev/null +++ b/pcc/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=pcc +pkgver=1.2.0 +_debver=$pkgver +_debadd=20220331 +_debrel=1 +pkgrel=1 +pkgdesc="A Portable C Compiler" +arch=('i686' 'x86_64') +license=('Modified-BSD' 'Simplified-BSD' 'GPL-3' 'ISC') +makedepends=('quilt') +options=('!strip' '!emptydirs') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/p/pcc/pcc_${pkgver}~DEVEL+${_debadd}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/p/pcc/pcc_${_debver}~DEVEL+${_debadd}-${_debrel}.debian.tar.xz") +sha512sums=('ca18a7b2d29e55c6be071bc3bad7cd13b2f2a9352aa93407d1d2f146c6a1fe557a08ef3ce1de780e6e56d817c702fabec65228e12a2143111726eaef7c8dc5c6' + 'f7c5044d6aec7b17e0847d86de3b8772e836c2c2f0d8fa53effac3fee8f1ccaa80c7c85a7cecd6d475e6ad8a124e9b70b87766ca80a5faad57f2a67a36fc37bd') + +prepare() { + mv "${pkgname}-${_debadd}" "${pkgname}-${pkgver}" + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + export CFLAGS+=" -fcommon " + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib/ \ + --with-libdir=/usr/lib/ \ + --libexecdir=/usr/bin/ \ + --with-incdir=/usr/include/ \ + --enable-native=no \ + --disable-stripping + make +} + +package(){ + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pcmemtest/60_pcmemtest b/pcmemtest/60_pcmemtest new file mode 100644 index 0000000..058fc27 --- /dev/null +++ b/pcmemtest/60_pcmemtest @@ -0,0 +1,32 @@ +#!/usr/bin/env sh +####################################################### +# This script generates a PCMemTest entry on grub.cfg # +# if memtest is installed on the system. # +####################################################### + +prefix="/usr" +exec_prefix="${prefix}" + +datarootdir="/usr/share" +datadir="${datarootdir}" + +. "${datadir}/grub/grub-mkconfig_lib" + +MEMTEST_IMAGE="/boot/pcmemtest/memtest.bin" +CLASS="--class pcmemtest --class pcmemtest --class tool" + +if [ -e "${MEMTEST_IMAGE}" ] && is_path_readable_by_grub "${MEMTEST_IMAGE}"; then + ## image exists, create menu entry + echo "Found PCMemTest image: ${MEMTEST_IMAGE}" >&2 + _GRUB_MEMTEST_HINTS_STRING="$(${grub_probe} --target=hints_string ${MEMTEST_IMAGE})" + _GRUB_MEMTEST_FS_UUID="$(${grub_probe} --target=fs_uuid ${MEMTEST_IMAGE})" + _GRUB_MEMTEST_REL_PATH="$(make_system_path_relative_to_its_root ${MEMTEST_IMAGE})" + cat << EOF +if [ "\${grub_platform}" == "pc" ]; then + menuentry "Memory Tester (PCMemTest)" ${CLASS} { + search --fs-uuid --no-floppy --set=root ${_GRUB_MEMTEST_HINTS_STRING} ${_GRUB_MEMTEST_FS_UUID} + linux16 ${_GRUB_MEMTEST_REL_PATH} ${GRUB_CMDLINE_PCMEMTEST} + } +fi +EOF +fi diff --git a/pcmemtest/PKGBUILD b/pcmemtest/PKGBUILD new file mode 100644 index 0000000..fd9aab0 --- /dev/null +++ b/pcmemtest/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +# Based of memtest86+ package + +pkgname='pcmemtest' +pkgver='1.5' +pkgrel='1' +pkgdesc="Advanced memory diagnostic tool" +arch=('i686' 'x86_64') +url="https://github.com/martinwhitaker/${pkgname}" +license=('GPL-2') +depends=('efibootmgr' 'sh' 'util-linux') +optdepends=('grub: for Grub support') +provides=('memtest86+' 'memtest86') +conflicts=('memtest86+' 'memtest86') +replaces=('memtest86+' 'memtest86') +_source=("https://github.com/martinwhitaker/${pkgname}") +source=("${_source[0]}/archive/refs/tags/v${pkgver}.tar.gz" + "60_${pkgname}" "${pkgname}-install") +sha512sums=('12db2504fef23d62b2246fb638e6f50cd2634ce54629467686b565512e866a51e0b6bcb4b0ad89b08e824b76841568b01ec151a86c50c6c14b4ef433c342068e' + '5c00475f87ca5b6a588a6d864545d0277e1108a41e8525dbd360491c066e34bbece2ebf42111870e9dc3cc83de96bba80c22672083d4d0090b5db4292d583220' + '02e7583e986756894bbe11200d583a2f80f711d3f6c1ca7b383c88e9ad46cb73df43b0c841c767470c560fdc9bb3ba9f0c6bd8e4110b216217837546f933bd2e') +if [ "${CARCH}" = 'i686' ]; then + _arch='32' + _uefi="ia${_arch}" +elif [ "${CARCH}" = 'x86_64' ]; then + _arch='64' + _uefi="x${_arch}" +fi + +build() { + cd "${pkgname}-${pkgver}/build${_arch}" + make V='1' +} + +package() { + cd "${pkgname}-${pkgver}/build${_arch}" + + install -Dm '644' "${srcdir}/${pkgname}-install" -t "${pkgdir}/usr/sbin" + + install -Dm '644' "${pkgname/pc}.bin" -t "${pkgdir}/usr/share/${pkgname}" + install -Dm '644' "${pkgname/pc}.efi" \ + "${pkgdir}/usr/share/${pkgname}/boot${_uefi}.efi" + install -Dm '755' "${srcdir}/60_${pkgname}" -t "${pkgdir}/etc/grub.d" + + install -Dm '644' '../LICENSE' -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pcmemtest/pcmemtest-install b/pcmemtest/pcmemtest-install new file mode 100644 index 0000000..75fe7b5 --- /dev/null +++ b/pcmemtest/pcmemtest-install @@ -0,0 +1,89 @@ +#!/bin/sh + +# pcmemtest-install - Script to install PCMemTest +# +# Written in 2022 by Márcio Silva +# +# To the extent possible under law, the author(s) have dedicated all copyright +# and related and neighboring rights to this software to the public domain +# worldwide. This software is distributed without any warranty. +# +# You should have received a copy of the CC0 Public Domain Dedication along +# with this software. If not, see +# . + +if [ "${UID}" != '0' ] || [ "${USER}" != 'root' ]; then + printf 'Only "root" user can install PCMemTest.\n' + return 1 +fi + +case "${1}" in +'bios') + install -Dm '644' '/usr/share/pcmemtest/memtest.bin' -t \ + '/boot/pcmemtest' + ;; +'uefi') + _SOURCE="$(findmnt -n -o 'source' '/boot/efi')" + if [ -f '/usr/share/pcmemtest/bootia32.efi' ]; then + install -Dm '644' '/usr/share/pcmemtest/bootia32.efi' -t \ + '/boot/efi/efi/PCMemTest' + efibootmgr -c -d "${_SOURCE}" \ + -l '\\efi\PCMemTest\bootia32.efi' -L 'PCMemTest (IA32)' -v + fi + if [ -f '/usr/share/pcmemtest/bootx64.efi' ]; then + install -Dm '644' '/usr/share/pcmemtest/bootx64.efi' -t \ + '/boot/efi/efi/PCMemTest' + efibootmgr -c -d "${_SOURCE}" \ + -l '\\efi\PCMemTest\bootx64.efi' -L 'PCMemTest' -v + fi + ;; +'uefi-in-boot') + _SOURCE="$(findmnt -n -o 'source' '/boot/efi')" + if [ -f '/usr/share/pcmemtest/bootia32.efi' ]; then + install -Dm '644' '/usr/share/pcmemtest/bootia32.efi' -t \ + '/boot/efi/PCMemTest' + efibootmgr -c -d "${_SOURCE}" \ + -l '\\efi\PCMemTest\bootia32.efi' -L 'PCMemTest (IA32)' -v + fi + if [ -f '/usr/share/pcmemtest/bootx64.efi' ]; then + install -Dm '644' '/usr/share/pcmemtest/bootx64.efi' -t \ + '/boot/efi/PCMemTest' + efibootmgr -c -d "${_SOURCE}" \ + -l '\\efi\PCMemTest\bootx64.efi' -L 'PCMemTest' -v + fi + ;; +'both-in-boot') + install -Dm '644' '/usr/share/pcmemtest/memtest.bin' -t \ + '/boot/pcmemtest' + _SOURCE="$(findmnt -n -o 'source' '/boot/efi')" + if [ -f '/usr/share/pcmemtest/bootia32.efi' ]; then + install -Dm '644' '/usr/share/pcmemtest/bootia32.efi' -t \ + '/boot/efi/PCMemTest' + efibootmgr -c -d "${_SOURCE}" \ + -l '\\efi\PCMemTest\bootia32.efi' -L 'PCMemTest (IA32)' -v + fi + if [ -f '/usr/share/pcmemtest/bootx64.efi' ]; then + install -Dm '644' '/usr/share/pcmemtest/bootx64.efi' -t \ + '/boot/efi/PCMemTest' + efibootmgr -c -d "${_SOURCE}" \ + -l '\\efi\PCMemTest\bootx64.efi' -L 'PCMemTest' -v + fi + ;; +*|'both') + install -Dm '644' '/usr/share/pcmemtest/memtest.bin' -t \ + '/boot/pcmemtest' + _SOURCE="$(findmnt -n -o 'source' '/boot/efi')" + if [ -f '/usr/share/pcmemtest/bootia32.efi' ]; then + install -Dm '644' '/usr/share/pcmemtest/bootia32.efi' -t \ + '/boot/efi/efi/PCMemTest' + efibootmgr -c -d "${_SOURCE}" \ + -l '\\efi\PCMemTest\bootia32.efi' -L 'PCMemTest (IA32)' -v + fi + if [ -f '/usr/share/pcmemtest/bootx64.efi' ]; then + install -Dm '644' '/usr/share/pcmemtest/bootx64.efi' -t \ + '/boot/efi/efi/PCMemTest' + efibootmgr -c -d "${_SOURCE}" \ + -l '\\efi\PCMemTest\bootx64.efi' -L 'PCMemTest' -v + fi + ;; +esac diff --git a/pcsxr-pgxp/PKGBUILD b/pcsxr-pgxp/PKGBUILD new file mode 100644 index 0000000..64fde7d --- /dev/null +++ b/pcsxr-pgxp/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=pcsxr-pgxp +pkgbasename=pcsxr +pkgver=1.9.94 +pkgrel=3 +pkgdesc="A PSX emulator with Parallel/Precision Geometry Transform Pipeline" +arch=('i686' 'x86_64') +url='https://github.com/iCatButler/pcsxr' +license=('GPL-3') +depends=('ffmpeg' 'gtk' 'mesa-libgl' 'libarchive' 'libcdio' 'libxv' 'sdl2') +makedepends=('cmake' 'intltool' 'pango' 'gettext-tiny' 'libxtst') +source=("${pkgname}-${pkgver}.zip::https://github.com/iCatButler/pcsxr/archive/refs/heads/master.zip" + "fix-pango.patch") +sha512sums=('eb7a4917990424351d397f162e13c32f993c919f55a42bd1c3786b66693fa07056ea30da504c9c110c239f257e5692f8d7bebdc9d23398d89704368205853290' + '0fb9005bfd5854da3a778aeef3d787b9092d897ff73ea0b203e4241944fb9ffaa5a6e289c7135ea21e739c947fe4ca206d17b6ee5b6fd2bc46ef02f1102b7ddb') + +prepare() { + mv ${pkgbasename}-master ${pkgname}-${pkgver} + cd "${pkgname}-${pkgver}" + patch -p1 -i "$srcdir"/fix-pango.patch +} + +build() { + cmake \ + -S ${pkgname}-${pkgver} \ + -B build \ + -DCMAKE_BUILD_TYPE='Release' \ + -DCMAKE_INSTALL_PREFIX='/usr' \ + -DCMAKE_INSTALL_LIBDIR='/usr/lib' \ + -DSND_BACKEND='sdl' \ + -DENABLE_CCDDA='ON' \ + -DUSE_LIBARCHIVE='ON' \ + -DUSE_LIBCDIO='ON' + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/pcsxr-pgxp/fix-pango.patch b/pcsxr-pgxp/fix-pango.patch new file mode 100644 index 0000000..1d16328 --- /dev/null +++ b/pcsxr-pgxp/fix-pango.patch @@ -0,0 +1,24 @@ +diff --git a/cmake/FindGTK3.cmake b/cmake/FindGTK3.cmake +index 049a276f..9e75806c 100644 +--- a/cmake/FindGTK3.cmake ++++ b/cmake/FindGTK3.cmake +@@ -50,6 +50,7 @@ if(GTK3_LIBRARY) + set_property(TARGET ${GTK3} PROPERTY INTERFACE_COMPILE_OPTIONS "${GTK3_PKG_CFLAGS_OTHER}") + + set(GTK3_INCLUDE_DIRS) ++ include_directories(/usr/include/harfbuzz) + + find_path(GTK3_INCLUDE_DIR "gtk/gtk.h" + HINTS ${GTK3_PKG_INCLUDE_DIRS}) +diff --git a/plugins/peopsxgl/CMakeLists.txt b/plugins/peopsxgl/CMakeLists.txt +index 907009ce..850da301 100644 +--- a/plugins/peopsxgl/CMakeLists.txt ++++ b/plugins/peopsxgl/CMakeLists.txt +@@ -18,6 +18,7 @@ set(GTK_LIBRARIES ${GTK3_LIBRARY} ${GDK3_LIBRARY} ${GDKPixbuf_LIBRARY} ${Pango_L + + find_package(X11 REQUIRED) + ++set(OpenGL_GL_PREFERENCE LEGACY) + find_package(OpenGL REQUIRED) + if(NOT OPENGL_FOUND) + message(FATAL_ERROR "GL library not found") diff --git a/pdfmixtool/PKGBUILD b/pdfmixtool/PKGBUILD new file mode 100644 index 0000000..bec3a14 --- /dev/null +++ b/pdfmixtool/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=pdfmixtool +pkgver=0.6 +pkgrel=1 +pkgdesc="Free and libre application to split, merge, rotate and mix PDF files" +arch=('i686' 'x86_64') +url='https://scarpetta.eu/pdfmixtool/' +license=('GPL-3') +depends=('hicolor-icon-theme' 'qpdf' 'qt-base') +makedepends=('cmake' 'ninja' 'qt-tools') +source=("https://gitlab.com/scarpetta/pdfmixtool/-/archive/v$pkgver/$pkgname-v$pkgver.tar.gz") +sha512sums=('8e8f5fe85553b3f947db773844aaac8bcd4a8b212a8651c81a38ce56ed3467603ec235d50352f1213dfc0ac7e0500a78bc5343099fbec72856db844d90829fa9') + +prepare() { + # Update URL + sed -i 's/scarpetta.gitlab.io/scarpetta.eu/' $pkgname-v$pkgver/resources/eu.scarpetta.PDFMixTool.appdata.xml +} + +build() { + cmake -S $pkgname-v$pkgver -B build -G Ninja -DCMAKE_INSTALL_PREFIX='/usr' + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -Dm644 "$srcdir/$pkgname-v$pkgver/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/peek/PKGBUILD b/peek/PKGBUILD new file mode 100644 index 0000000..092020e --- /dev/null +++ b/peek/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=peek +pkgver=1.5.1 +pkgrel=3 +pkgdesc="Free and libre screen recorder with an easy to use interface" +arch=('i686' 'x86_64') +url='https://github.com/phw/peek' +license=('GPL-3') +depends=('gtk' 'libkeybinder3' 'ffmpeg' 'which') +makedepends=('meson' 'vala' 'txt2man' 'gst-plugin-gtk' 'gst-plugins-ugly' 'gettext-tiny') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/phw/peek/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('dc25f24b1f5954ff26f399f86bf0a2a9b90c4d63c9cd33fcd44f16e447d23070c04e760c57bdc8a946e699c3038b8ee7afc44ce6daa7030e2f9e6f071be6eae4') + +build() { + mkdir $pkgname-$pkgver/build + cd $pkgname-$pkgver/build + hyperbola-meson .. + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR="$pkgdir" ninja install + + # remove unneeded parts from package, we don't support D-Bus and its interfaces + rm -rf "$pkgdir"/usr/share/dbus-1 + + install -Dm644 $srcdir/$pkgname-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + diff --git a/pekka-kana-2/PKGBUILD b/pekka-kana-2/PKGBUILD new file mode 100644 index 0000000..5e8183c --- /dev/null +++ b/pekka-kana-2/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=pekka-kana-2 +pkgver=1.2.7 +pkgrel=2 +pkgdesc='An oldschool 2D platformer where you control a rooster called Pekka' +arch=('i686' 'x86_64') +url='https://pistegamez.net/game_pk2.html' +license=(Simplified-BSD) +depends=('sdl2' 'sdl2_image' 'sdl2_mixer') +groups=('games') +source=("${pkgname}-${pkgver}.tar.bz2::https://gitlab.com/coringao/${pkgname}/-/archive/${pkgver}/${pkgname}-${pkgver}.tar.bz2") +sha512sums=('19bfdf3ff24d363971ae4a1efe04fb59b6f62d8b17bd5059680655d11ac3b4a6db477254561e88566b3bfef66b49a5b5c5e7ceec62715407e4b96774216bcd32') + +build() { + cd ${pkgname}-${pkgver} + make +} + +package() { + cd ${pkgname}-${pkgver} + install -Dm755 bin/pekka-kana-2 "${pkgdir}/usr/games/pekka-kana-2" + install -vDm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" + install -vDm 644 data/pekka-kana-2.desktop "${pkgdir}/usr/share/applications/pekka-kana-2.desktop" + install -vDm 644 data/pekka-kana-2.png "${pkgdir}/usr/share/pixmaps/pekka-kana-2.png" + + mkdir -p "${pkgdir}/usr/share/games/${pkgname}" + cp -a data "${pkgdir}/usr/share/games/${pkgname}/" +} diff --git a/perl-algorithm-diff/LICENSE b/perl-algorithm-diff/LICENSE new file mode 100644 index 0000000..44b5972 --- /dev/null +++ b/perl-algorithm-diff/LICENSE @@ -0,0 +1,43 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Algorithm-Diff +Upstream-Contact: Ricardo Signes +Source: https://metacpan.org/release/Algorithm-Diff + +Files: * +Copyright: 2000-2004, Ned Konz + Tye McQueen + Mark-Jason Dominus +License: Artistic or GPL-1+ +Comment: The upstream distribution does not contain an explicit statement of + copyright ownership. Pursuant to the Berne Convention for the Protection of + Literary and Artistic Works, it is assumed that all content is copyright by + its respective authors unless otherwise stated. + +Files: bin/cdiff.pl bin/diff.pl bin/diffnew.pl +Copyright: 1998, M-J. Dominus +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2000, 2001, 2002, 2003, Michael Alan Dorman + 2004, 2005, Florian Weimer + 2008-2020, gregor herrmann + 2009, Jonathan Yu + 2010-2015, Salvatore Bonaccorso + 2012-2018, Xavier Guimard +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian GNU/Linux systems, the complete text of the Artistic License + can be found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian GNU/Linux systems, the complete text of version 1 of the + General Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-algorithm-diff/PKGBUILD b/perl-algorithm-diff/PKGBUILD new file mode 100644 index 0000000..b6afd7b --- /dev/null +++ b/perl-algorithm-diff/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-algorithm-diff +pkgver=1.201 +pkgrel=1 +pkgdesc="Perl/CPAN Module Algorithm::Diff : Diff also Longest Common Subsequence" +arch=('any') +url='https://search.cpan.org/dist/Algorithm-Diff' +license=('GPL-1') +depends=('perl') +source=("https://cpan.metacpan.org/authors/id/R/RJ/RJBS/Algorithm-Diff-$pkgver.tar.gz" + "LICENSE") +sha512sums=('b22b55f4e45748da0e8aca556dc2155ef2dbcfe42ac5cbe4aa59e4cc13c95a141e6324a9ab0acd7fbc3d97e761e0778176df0f7e726af837a7b7d075106ad8d0' + '94e0bd439e390c1a969ab028919c203a263316a5f57f7d80f68099bc4fda635a10fd3f36af9db466747f842722185c522f4c7b1dd6ecf32d089b6adac6eec5e3') + +build() { + cd "$srcdir"/Algorithm-Diff-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Algorithm-Diff-$pkgver + make pure_install doc_install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 $srcdir/LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/perl-alien-sdl/PKGBUILD b/perl-alien-sdl/PKGBUILD new file mode 100644 index 0000000..267a3aa --- /dev/null +++ b/perl-alien-sdl/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +# This package must not be "any" arch. +# The Build.PL script's '--with-sdl-config' acquires arch-specific library paths +# from the installed SDL instance, and puts that into the created package. +# Requires rebuild with every arch/config change in the provided SDL package. + +pkgname=perl-alien-sdl +_realname=Alien-SDL +pkgver=1.446 +_debver=$pkgver +_debrel=3.1 +pkgrel=1 +pkgdesc="Build, find and use SDL binaries" +arch=('i686' 'x86_64') +license=('GPL-1') +url='https://metacpan.org/dist/$_realname' +depends=('perl>=5.008' 'perl-capture-tiny' + 'perl-file-sharedir>=1.00' 'perl-file-temp' 'perl-pathtools' + 'sdl') +makedepends=('perl-archive-extract' 'perl-archive-tar' 'perl-archive-zip' + 'perl-digest-sha' 'perl-file-fetch>=0.24' 'perl-file-path>=2.08' + 'perl-file-which' 'perl-module-build>=0.36' 'perl-text-patch>=1.4' + 'quilt') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/F/FR/FROGGS/${_realname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/liba/libalien-sdl-perl/libalien-sdl-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('dfb5f104f449857b9567ca93a0c3b15aed2618e27019569c95c4b7469e1f7d5cc390fe2dda9c6add41e9648c1f6efe053d08a4bd0fcc5bc546a217721bea824c' + '4d562c955aaf09c1e01bedd2de2d40c58854aa1fcce1f5f115f01782774a4a88d6d21b1b56f9ada64f3753c28512910983568dd3932ee4aa105e706f891c6ae3') + +prepare() { + cd "$_realname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # Workaround bug with --with-sdl-config + sed -i '/^GetOptions/d' Build.PL +} + +build() { + cd "$_realname-$pkgver" + + # install module in vendor directories + perl Build.PL --with-sdl-config + perl Build +} + +package() { + cd "$_realname-$pkgver" + perl Build install installdirs=vendor destdir="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-anyevent-i3/PKGBUILD b/perl-anyevent-i3/PKGBUILD new file mode 100644 index 0000000..cf21def --- /dev/null +++ b/perl-anyevent-i3/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-anyevent-i3 +pkgver=0.17 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Communicate with the i3 window manager" +arch=('any') +url='https://search.cpan.org/~mstplbg/AnyEvent-I3/' +license=('GPL-1') +depends=('perl' 'perl-anyevent' 'perl-json-xs') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/M/MS/MSTPLBG/AnyEvent-I3-${pkgver}.tar.gz" + "LICENSE::https://metadata.ftp-master.debian.org/changelogs//main/liba/libanyevent-i3-perl/libanyevent-i3-perl_${_debver}-${_debrel}_copyright") +sha512sums=('e8b0ccb89be27d5e952e5cb819e1f462ad5c558879a88fb5087d72517424316c0053b081ed9763d701a017c1d838fa694b49f40886335a23a68ebb091714b259' + '6784f472eaae9f69a47b7553d7b0becf67f637ebd44dceb4cd4cd9319cd831dfca3f8322be2f869e1c6c7af43e723d73feee560342d9285e21245935006706a1') + +build() { + cd AnyEvent-I3-${pkgver} + PERL_USE_UNSAFE_INC=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd AnyEvent-I3-${pkgver} + make install DESTDIR="${pkgdir}" + install -Dm644 $srcdir/LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/perl-anyevent/PKGBUILD b/perl-anyevent/PKGBUILD new file mode 100644 index 0000000..d0adcbe --- /dev/null +++ b/perl-anyevent/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=perl-anyevent +pkgver=7.17 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="The DBI of event loop programming" +arch=('any') +url='https://metacpan.org/release/AnyEvent' +license=('GPL-1') +depends=('perl') +makedepends=('quilt') +optdepends=('perl-guard: to speed up guards' + 'perl-json: send or receive JSON with AnyEvent::Handle' + 'perl-json-xs: send or receive JSON with AnyEvent::Handle' + 'perl-net-ssleay: TLS/SSL connections with AnyEvent::Handle') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/AnyEvent-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/liba/libanyevent-perl/libanyevent-perl_${_debver}0-${_debrel}.debian.tar.xz") +sha512sums=('c553cce80fa14e2f91031c569d1c30acf470871ddd1c122fa3dd36cd1ba5b7002e7ba1dea4c950d889c7c661b81042dd97975e195a5325190ad644babff81e0a' + 'e3d43b9210cb92c6ed50ce9232140fd3c54607e7a38bdeb244bb37d03e51971f974e829e949bb4b6b38c839bec9b59c0bac4e78e607c40692935f70621c99dd2') + +prepare() { + cd AnyEvent-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd AnyEvent-$pkgver + PERL_CANARY_STABILITY_NOPROMPT=1 \ + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd AnyEvent-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/perl-archive-cpio/LICENSE b/perl-archive-cpio/LICENSE new file mode 100644 index 0000000..0bb6c52 --- /dev/null +++ b/perl-archive-cpio/LICENSE @@ -0,0 +1,51 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Source: https://metacpan.org/release/Archive-Cpio +Upstream-Contact: Pascal Rigaux +Upstream-Name: Archive-Cpio + +Files: * +Copyright: Pascal Rigaux +License: Artistic or GPL-1+ +Comment: + 0) Ad copyright: + . + The upstream distribution does not contain an explicit statement of + copyright ownership. Pursuant to the Berne Convention for the Protection of + Literary and Artistic Works, it is assumed that all content is copyright by + its respective authors unless otherwise stated. + . + 1) Ad license: + . + The licensing terms are taken from the upstream author's statement at + https://rt.cpan.org/Public/Bug/Display.html?id=43597 : + . + Wed Feb 25 04:21:29 2009 tmp [...] merd.net - Correspondence added + On Wed Feb 25 04:08:03 2009, RSRCHBOY wrote: + > I'm looking to package Archive::Cpio for Fedora, but I can't seem to + > find the license for this package. + > + > Did you intend to license this package "under the same terms as Perl + > itself", that is, GPL v1+ and the Artistic License? (or maybe the LGPL + > v2+...? :)) + . + yeah, same as Perl. I'll try to add a mention of it in next release. thanks + +Files: debian/* +Copyright: 2017, gregor herrmann +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-archive-cpio/PKGBUILD b/perl-archive-cpio/PKGBUILD new file mode 100644 index 0000000..d40bae8 --- /dev/null +++ b/perl-archive-cpio/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-archive-cpio +_cpanname=Archive-Cpio +pkgver=0.10 +pkgrel=1 +pkgdesc="Module for manipulations of cpio archives" +url='https://metacpan.org/pod/Archive::Cpio' +arch=('any') +license=('GPL-1') +depends=('perl>=5.10.0') +options=('!emptydirs') +source=(${pkgname}-${pkgver}.tar.gz::https://cpan.metacpan.org/authors/id/P/PI/PIXEL/${_cpanname}-${pkgver}.tar.gz + LICENSE) +sha512sums=('c828f6f199de0efd7c7fbe2c3d4c5304df3c714720d91dd9a7d76e2c8d16bab1b92fc93a0b8afe78bd89b043ce7684c31d54b13c4e840f68ee040ca7bff43c3d' + '519a28a039257bcb29ccaa4ddd26c2ad28278bfbc0d0fc3a6ec3d9e4a7fd18fb86ca5aaeca1e350537f796914949fccecf816c2fe9a0892f7a26137f4bbb1fc1') + +build() { + cd ${_cpanname}-${pkgver} + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ${_cpanname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 Changes -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-archive-extract/LICENSE b/perl-archive-extract/LICENSE new file mode 100644 index 0000000..21cf70e --- /dev/null +++ b/perl-archive-extract/LICENSE @@ -0,0 +1,28 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Archive-Extract +Source: https://metacpan.org/release/Archive-Extract +Upstream-Contact: Chris Williams + +Files: * +Copyright: 2002, Jos Boumans +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2013-2019, gregor herrmann +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-archive-extract/PKGBUILD b/perl-archive-extract/PKGBUILD new file mode 100644 index 0000000..5be7b57 --- /dev/null +++ b/perl-archive-extract/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-archive-extract +pkgver=0.86 +_ddir=Archive-Extract-$pkgver +pkgrel=1 +pkgdesc="Generic archive extracting mechanism" +arch=('any') +url='https://metacpan.org/release/Archive-Extract' +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +source=("https://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/Archive-Extract-$pkgver.tar.gz" + "LICENSE") +sha512sums=('a091b8c489275b8dd3d38e52e983bef7cab7d642e0dc8f6e95f1d8d006d769857b4e5950778bddd3044d6f11b3563c7796361e88869f60a9875529b78c9d1c76' + 'a8b62430ea09d6165e4601c78b3e09317ebf50aae5b5feccdcf69acf306b4037d74177180db2f3018db1217cf447ae0c1accdfd62a5f612fad9dfcdb063b455e') + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +) diff --git a/perl-archive-zip/LICENSE b/perl-archive-zip/LICENSE new file mode 100644 index 0000000..fd97e86 --- /dev/null +++ b/perl-archive-zip/LICENSE @@ -0,0 +1,103 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Archive-Zip +Upstream-Contact: Adam Kennedy +Source: https://metacpan.org/release/Archive-Zip + +Files: * +Copyright: 2000-2004, Ned Konz + 2005, Steve Peters + 2006-2009, Adam Kennedy +License: Artistic or GPL-1+ + +Files: lib/Archive/Zip/Member.pm +Copyright: 2000-2004, Ned Konz + 2005, Steve Peters + 2006-2009, Adam Kennedy + 1990-2007, Info-ZIP +License: Artistic and Info-ZIP +Comment: This file contains code that was derived from an Info-ZIP product. + The additional restrictions on the Info-ZIP license likely make it + incompatible with GPL-1+, so only the Artistic side of the Perl license + is listed here. + +Files: debian/* +Copyright: 2001-2003, Ivo Timmermans + 2004, Matthias Klose + 2005, 2007, Ben Burton + 2009-2019, Salvatore Bonaccorso + 2009-2011, Ernesto Hernández-Novich (USB) + 2010-2020, gregor herrmann +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. + +License: Info-ZIP + This is version 2005-Feb-10 of the Info-ZIP copyright and license. + The definitive version of this document should be available at + ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely. + . + . + Copyright (c) 1990-2005 Info-ZIP. All rights reserved. + . + For the purposes of this copyright and license, "Info-ZIP" is defined as + the following set of individuals: + . + Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, + Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth, + Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, + David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, + Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, + Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda, + Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren, + Rich Wales, Mike White + . + This software is provided "as is," without warranty of any kind, express + or implied. In no event shall Info-ZIP or its contributors be held liable + for any direct, indirect, incidental, special or consequential damages + arising out of the use of or inability to use this software. + . + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + . + 1. Redistributions of source code must retain the above copyright notice, + definition, disclaimer, and this list of conditions. + . + 2. Redistributions in binary form (compiled executables) must reproduce + the above copyright notice, definition, disclaimer, and this list of + conditions in documentation and/or other materials provided with the + distribution. The sole exception to this condition is redistribution + of a standard UnZipSFX binary (including SFXWiz) as part of a + self-extracting archive; that is permitted without inclusion of this + license, as long as the normal SFX banner has not been removed from + the binary or disabled. + . + 3. Altered versions--including, but not limited to, ports to new operating + systems, existing ports with new graphical interfaces, and dynamic, + shared, or static library versions--must be plainly marked as such + and must not be misrepresented as being the original source. Such + altered versions also must not be misrepresented as being Info-ZIP + releases--including, but not limited to, labeling of the altered + versions with the names "Info-ZIP" (or any variation thereof, including, + but not limited to, different capitalizations), "Pocket UnZip," "WiZ" + or "MacZip" without the explicit permission of Info-ZIP. Such altered + versions are further prohibited from misrepresentative use of the + Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s). + . + 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," + "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its + own source and binary releases. diff --git a/perl-archive-zip/PKGBUILD b/perl-archive-zip/PKGBUILD new file mode 100644 index 0000000..3665859 --- /dev/null +++ b/perl-archive-zip/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=perl-archive-zip +pkgver=1.68 +_debver=1.68 +_debrel=1 +pkgrel=2 +pkgdesc='Provide a perl interface to ZIP archive files' +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/Archive-Zip/" +depends=('perl') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/P/PH/PHRED/Archive-Zip-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/liba/libarchive-zip-perl/libarchive-zip-perl_$_debver-$_debrel.debian.tar.xz + "LICENSE::https://metadata.ftp-master.debian.org/changelogs//main/liba/libarchive-zip-perl/libarchive-zip-perl_1.68-1_copyright") +sha512sums=('40c3ba26b1c27a8b15b919934e7fcd531f208bec73de3454e123ac1fb771831e287b8fade421be40e243498beb6dad9b6133ef07d2e5d407afbd1f3d6a30b916' + '9d9b739878b0c1f38c61aed85ad0349824ef23ea43dfa40e4835857e788b53696cbcd6f5906b0991f8bddf1a20f3c25fff87c0c18d20c29c7b98ac78b648b03d' + 'c308a43dc7c647e0e035efda4a16cad9223042289b328281af701a990105516ea4821307e8b8728c1540e6b05fb06413eb485b16ec76bc4793c4a5eecff9c728') + +prepare() { + cd Archive-Zip-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd Archive-Zip-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Archive-Zip-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-berkeleydb/PKGBUILD b/perl-berkeleydb/PKGBUILD new file mode 100644 index 0000000..fc51970 --- /dev/null +++ b/perl-berkeleydb/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=perl-berkeleydb +pkgver=0.64 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Interface to Berkeley DB version 2, 3 or 4" +arch=('i686' 'x86_64') +url="https://search.cpan.org/dist/BerkeleyDB/" +license=('GPL-1') +depends=('perl' 'db') +makedepends=('quilt') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/P/PM/PMQS/BerkeleyDB-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libb/libberkeleydb-perl/libberkeleydb-perl_$_debver-$_debrel.debian.tar.xz) +sha512sums=('368f89bb12e209ed6f0d1367875739813bfec85f4c10f0ffd7260d5be97bbd758af517133977f1e8f43c1d9b04d6b5dd9696ae1de1d544d9682b1f6bacfe3e85' + '8b8f0a824a48f38052cae95b3deae2e44cd09a09c9ee086ad7a1b5b932e49cfc9c41ea2a66b75d942213f56f94e7c473bfc2ca7fb32db775b21d2ca528df4012') + +prepare() { + cd "$srcdir"/BerkeleyDB-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/BerkeleyDB-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + _dbver1=`pacman -Q db | cut -d\ -f2 | cut -d- -f1 | cut -f1 -d.` + _dbver2=`pacman -Q db | cut -d\ -f2 | cut -d- -f1 | cut -f2 -d.` + depends=('perl' "db>=${_dbver1}.${_dbver2}" "db<${_dbver1}.$(expr $_dbver2 + 1)") + + cd "$srcdir"/BerkeleyDB-$pkgver + make pure_install doc_install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-bit-vector/PKGBUILD b/perl-bit-vector/PKGBUILD new file mode 100644 index 0000000..c87a323 --- /dev/null +++ b/perl-bit-vector/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=perl-bit-vector +pkgver=7.4 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc='Efficient bit vector, set of integers and "big int" math library' +arch=('i686' 'x86_64') +license=('GPL-1') +url='https://search.cpan.org/dist/Bit-Vector/' +depends=('perl-carp-clan') +makedepends=('quilt') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/S/ST/STBEY/Bit-Vector-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libb/libbit-vector-perl/libbit-vector-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('80aa49aea8c31c60c14161198eab9d620d738530c3c209104b8ad8f1144822f80c3effb3303c569fc556b2457328659ae5d1aaf511d714c835618b84c722abc5' + '026e1dac01e3476c824a5aa55e5ae26c7dfc81677730a663636b4a5e863fb0893f0497b1f4d0098d646eeb3cd553d7a6b15d01e9893a0969c2817ed62ced2bce') + +prepare() { + cd Bit-Vector-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd Bit-Vector-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Bit-Vector-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 GNU_GPL.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-bytes-random-secure/LICENSE b/perl-bytes-random-secure/LICENSE new file mode 100644 index 0000000..b049c71 --- /dev/null +++ b/perl-bytes-random-secure/LICENSE @@ -0,0 +1,28 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Bytes-Random-Secure +Source: https://metacpan.org/release/Bytes-Random-Secure +Upstream-Contact: David Oswald + +Files: * +Copyright: 2012, David Oswald +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2013-2018, gregor herrmann +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-bytes-random-secure/PKGBUILD b/perl-bytes-random-secure/PKGBUILD new file mode 100644 index 0000000..e126178 --- /dev/null +++ b/perl-bytes-random-secure/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-bytes-random-secure +pkgver=0.29 +pkgrel=1 +pkgdesc='Perl extension to generate cryptographically-secure random bytes.' +arch=('any') +license=('GPL-1') +options=(!emptydirs) +depends=('perl' 'perl-crypt-random-seed' 'perl-math-random-isaac') +url='https://metacpan.org/release/Bytes-Random-Secure' +source=("https://cpan.metacpan.org/authors/id/D/DA/DAVIDO/Bytes-Random-Secure-$pkgver.tar.gz" + "LICENSE") +sha512sums=('72faf9e9fff1cc9641845d47b8dd1efb39861b4015246b169167d4f6050998e91d30b53d6a3e08daf91a838fcf29a05042073064204270de05b2f2ca9990fe64' + '727d3270c7edc0d1b9e54b041d1fec3bc5f7144765103b3dc0c2b2afce696c32bd63c9ff6adf4b50767f4f3ac9532a069c0ae04b78ccec621f3d4780c026ed3a') +_ddir="Bytes-Random-Secure-$pkgver" + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +) diff --git a/perl-cairo-gobject/PKGBUILD b/perl-cairo-gobject/PKGBUILD new file mode 100644 index 0000000..c363852 --- /dev/null +++ b/perl-cairo-gobject/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=perl-cairo-gobject +pkgver=1.005 +_debver=1.005 +_debrel=2 +pkgrel=2 +pkgdesc="Integrate Cairo into the Glib type system" +arch=('i686' 'x86_64') +url="https://metacpan.org/release/Cairo-GObject" +license=('LGPL-2.1') +makedepends=('perl-extutils-depends' 'perl-extutils-pkgconfig' 'quilt' 'gettext-tiny') +depends=('glib-perl' 'cairo-perl') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/X/XA/XAOC/Cairo-GObject-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libc/libcairo-gobject-perl/libcairo-gobject-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('45f1e3ff6f8a90347175c66e5a854acd22285cd48a9aa07344c046add283892d6188e88f69d64798dc5323cb17aa442853915ed2081b5ec4e2a735b89cd11b1e' + 'c3e4cc14c9e4b575dd348a38f33b65ab75ced0ec6c56491e37d3a8ee48129b6e9a18feeaf277d6a785e31c0808a3a51210da20c7ce64598d697eb58ff29d6058') + +prepare() { + cd "Cairo-GObject-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "Cairo-GObject-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL + make +} + +check() { + cd "Cairo-GObject-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 + make test +} + +package() { + cd "Cairo-GObject-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + make pure_install INSTALLDIRS=vendor DESTDIR="${pkgdir}" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-canary-stability/PKGBUILD b/perl-canary-stability/PKGBUILD new file mode 100644 index 0000000..2d18977 --- /dev/null +++ b/perl-canary-stability/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-canary-stability +_realname=Canary-Stability +pkgver=2013 +pkgrel=3 +pkgdesc="CPAN/Canary-Stability - canary to check perl compatibility for schmorp's modules" +arch=('i686' 'x86_64') +license=('GPL-1') +url='https://metacpan.org/release/Canary-Stability' +options=('!emptydirs') +depends=('perl') +source=("https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/${_realname}-${pkgver}.tar.gz") +sha512sums=('9dfb0e6d136048050aac7c29e1fc79dc2a7703c8800582aa837c5d9b9934c48bfcb0a9ef1c6b5bb7e71a10a709e7f7431b3c79ea12b8d9f374b33bfd4a3e468d') + +build() { + cd "$srcdir/$_realname-$pkgver" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir/$_realname-$pkgver" + make install DESTDIR="$pkgdir" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-capture-tiny/PKGBUILD b/perl-capture-tiny/PKGBUILD new file mode 100644 index 0000000..114052c --- /dev/null +++ b/perl-capture-tiny/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=perl-capture-tiny +_realname=Capture-Tiny +pkgver=0.48 +pkgrel=1 +pkgdesc="Capture STDOUT and STDERR from Perl, XS or external programs" +arch=(any) +license=(Apache-2.0) +depends=(perl) +url="https://metacpan.org/release/Capture-Tiny" +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/$_realname-$pkgver.tar.gz") +sha512sums=('96d140b33a5ee147804925353ec5b49b806fa9c98b4ac23ec9c9494828f52ac72fd6f69c08e14ada18e5187dc4cece3d72901ce07b12eef20595322161a98437') + +build() { + cd $_realname-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd $_realname-$pkgver + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 + make test +} + +package() { + cd $_realname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +# vim:set sw=2 et: diff --git a/perl-carp-clan/PKGBUILD b/perl-carp-clan/PKGBUILD new file mode 100644 index 0000000..0370e8a --- /dev/null +++ b/perl-carp-clan/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-carp-clan +_realname=Carp-Clan +pkgver=6.08 +pkgrel=1 +pkgdesc='Report errors from perspective of caller of a "clan" of modules' +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/$_realname/" +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/E/ET/ETHER/$_realname-$pkgver.tar.gz") +sha512sums=('bc7f74d75e1eae0f528d530b47f1841493aae7eecdeeb58f85f5d8ef7a5b4d92c479b45468d0e7175f228056295d3d7159a7b404fecd542cf04c75ddc3a9886f') + +build() { + cd $_realname-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd $_realname-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-cgi/LICENSE b/perl-cgi/LICENSE new file mode 100644 index 0000000..7fc4a35 --- /dev/null +++ b/perl-cgi/LICENSE @@ -0,0 +1,230 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: CGI.pm +Upstream-Contact: Lee Johnson +Source: https://metacpan.org/release/CGI + +Files: * +Copyright: 1995-2007, Lincoln D. Stein +License: Artistic-2.0 + +Files: lib/CGI/Pretty.pm +Copyright: 1999, Brian Paulsen +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: + 2008-2009, Ansgar Burchardt + 2008-2021, gregor herrmann + 2008, AGOSTINI Yves + 2008, Damyan Ivanov + 2010-2011, Nicholas Bamber + 2010, Jonathan Yu + 2011, Niko Tyni +License: Artistic-2.0 or Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: Artistic-2.0 + Copyright (c) 2000-2006, The Perl Foundation. + . + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + . + Preamble + . + This license establishes the terms under which a given free software + Package may be copied, modified, distributed, and/or redistributed. + The intent is that the Copyright Holder maintains some artistic + control over the development of that Package while still keeping the + Package available as open source and free software. + . + You are always permitted to make arrangements wholly outside of this + license directly with the Copyright Holder of a given Package. If the + terms of this license do not permit the full use that you propose to + make of the Package, you should contact the Copyright Holder and seek + a different licensing arrangement. + . + Definitions + . + "Copyright Holder" means the individual(s) or organization(s) named in + the copyright notice for the entire Package. + . + "Contributor" means any party that has contributed code or other + material to the Package, in accordance with the Copyright Holder's + procedures. + . + "You" and "your" means any person who would like to copy, distribute, + or modify the Package. + . + "Package" means the collection of files distributed by the Copyright + Holder, and derivatives of that collection and/or of those files. A + given Package may consist of either the Standard Version, or a + Modified Version. + . + "Distribute" means providing a copy of the Package or making it + accessible to anyone else, or in the case of a company or + organization, to others outside of your company or organization. + . + "Distributor Fee" means any fee that you charge for Distributing this + Package or providing support for this Package to another party. It + does not mean licensing fees. + . + "Standard Version" refers to the Package if it has not been modified, + or has been modified only in ways explicitly requested by the + Copyright Holder. + . + "Modified Version" means the Package, if it has been changed, and such + changes were not explicitly requested by the Copyright Holder. + . + "Original License" means this Artistic License as Distributed with the + Standard Version of the Package, in its current version or as it may + be modified by The Perl Foundation in the future. + . + "Source" form means the source code, documentation source, and + configuration files for the Package. + . + "Compiled" form means the compiled bytecode, object code, binary, or + any other form resulting from mechanical transformation or translation + of the Source form. + . + Permission for Use and Modification Without Distribution + . + (1) You are permitted to use the Standard Version and create and use + Modified Versions for any purpose without restriction, provided + that you do not Distribute the Modified Version. + . + Permissions for Redistribution of the Standard Version + . + (2) You may Distribute verbatim copies of the Source form of the + Standard Version of this Package in any medium without + restriction, either gratis or for a Distributor Fee, provided + that you duplicate all of the original copyright notices and + associated disclaimers. At your discretion, such verbatim copies + may or may not include a Compiled form of the Package. + . + (3) You may apply any bug fixes, portability changes, and other + modifications made available from the Copyright Holder. The + resulting Package will still be considered the Standard Version, + and as such will be subject to the Original License. + . + Distribution of Modified Versions of the Package as Source + . + (4) You may Distribute your Modified Version as Source (either gratis + or for a Distributor Fee, and with or without a Compiled form of + the Modified Version) provided that you clearly document how it + differs from the Standard Version, including, but not limited to, + documenting any non-standard features, executables, or modules, + and provided that you do at least ONE of the following: + . + (a) make the Modified Version available to the Copyright Holder + of the Standard Version, under the Original License, so that + the Copyright Holder may include your modifications in the + Standard Version. + (b) ensure that installation of your Modified Version does not + prevent the user installing or running the Standard Version. + In addition, the Modified Version must bear a name that is + different from the name of the Standard Version. + (c) allow anyone who receives a copy of the Modified Version to + make the Source form of the Modified Version available to + others under + (i) the Original License or + (ii) a license that permits the licensee to freely copy, + modify and redistribute the Modified Version using the + same licensing terms that apply to the copy that the + licensee received, and requires that the Source form of + the Modified Version, and of any works derived from it, + be made freely available in that license fees are + prohibited but Distributor Fees are allowed. + . + Distribution of Compiled Forms of the Standard Version or Modified + Versions without the Source + . + (5) You may Distribute Compiled forms of the Standard Version without + the Source, provided that you include complete instructions on + how to get the Source of the Standard Version. Such instructions + must be valid at the time of your distribution. If these + instructions, at any time while you are carrying out such + distribution, become invalid, you must provide new instructions + on demand or cease further distribution. If you provide valid + instructions or cease distribution within thirty days after you + become aware that the instructions are invalid, then you do not + forfeit any of your rights under this license. + . + (6) You may Distribute a Modified Version in Compiled form without + the Source, provided that you comply with Section 4 with respect + to the Source of the Modified Version. + . + Aggregating or Linking the Package + . + (7) You may aggregate the Package (either the Standard Version or + Modified Version) with other packages and Distribute the + resulting aggregation provided that you do not charge a licensing + fee for the Package. Distributor Fees are permitted, and licensing + fees for other components in the aggregation are permitted. The + terms of this license apply to the use and Distribution of the + Standard or Modified Versions as included in the aggregation. + . + (8) You are permitted to link Modified and Standard Versions with + other works, to embed the Package in a larger work of your own, + or to build stand-alone binary or bytecode versions of + applications that include the Package, and Distribute the result + without restriction, provided the result does not expose a direct + interface to the Package. + . + Items That are Not Considered Part of a Modified Version + . + (9) Works (including, but not limited to, modules and scripts) that + merely extend or make use of the Package, do not, by themselves, + cause the Package to be a Modified Version. In addition, such + works are not considered parts of the Package itself, and are + not subject to the terms of this license. + . + General Provisions + . + (10) Any use, modification, and distribution of the Standard or + Modified Versions is governed by this Artistic License. By + using, modifying or distributing the Package, you accept this + license. Do not use, modify, or distribute the Package, if you + do not accept this license. + . + (11) If your Modified Version has been derived from a Modified + Version made by someone other than you, you are nevertheless + required to ensure that your Modified Version complies with + the requirements of this license. + . + (12) This license does not grant you the right to use any trademark, + service mark, tradename, or logo of the Copyright Holder. + . + (13) This license includes the non-exclusive, worldwide, + free-of-charge patent license to make, have made, use, offer to + sell, import and otherwise transfer the Package with respect to + any patent claims licensable by the Copyright Holder that are + necessarily infringed by the Package. If you institute patent + litigation (including a cross-claim or counterclaim) against + any party alleging that the Package constitutes direct or + contributory patent infringement, then this Artistic License to + you shall terminate on the date that such litigation is filed. + . + (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT + HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE + DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS + REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-cgi/PKGBUILD b/perl-cgi/PKGBUILD new file mode 100644 index 0000000..6091359 --- /dev/null +++ b/perl-cgi/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-cgi +pkgver=4.53 +pkgrel=1 +pkgdesc='Handle Common Gateway Interface requests and responses' +arch=('any') +license=('GPL-1') +options=(!emptydirs) +depends=('perl' 'perl-html-parser') +url='https://metacpan.org/release/CGI' +source=("https://cpan.metacpan.org/authors/id/L/LE/LEEJO/CGI-$pkgver.tar.gz" + "LICENSE") +sha512sums=('8b037d4c3240dd87ab888245b604efb43d25e155e3e7e4068b373ef73d7dc2d6361d83819733f62a5c138003290d5195ec8cfaa1a5e8ca6356e6e9aa52813567' + '280aca4392dac81bee0dc555c3f147e0038faea1b97af6e37d761ac715ff1d9c306e12078bda300f5cab651a131bb5ffb3c0010aed5a0c2ed3fca5a0f1bd2b20') +_ddir="CGI-$pkgver" + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dvm644 "${srcdir}/LICENSE" -t ${pkgdir}/usr/share/licenses/${pkgname} +) diff --git a/perl-class-data-inheritable/LICENSE b/perl-class-data-inheritable/LICENSE new file mode 100644 index 0000000..cd89438 --- /dev/null +++ b/perl-class-data-inheritable/LICENSE @@ -0,0 +1,32 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Class-Data-Inheritable +Source: https://metacpan.org/release/Class-Data-Inheritable +Upstream-Contact: Tony Bowden + +Files: * +Copyright: 2000-2005, Damian Conway + 2000-2005, Michael G Schwern +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2002-2007, Ivan Kohler + 2008, Damyan Ivanov + 2008, gregor herrmann + 2013-2018, Xavier Guimard +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-class-data-inheritable/PKGBUILD b/perl-class-data-inheritable/PKGBUILD new file mode 100644 index 0000000..c718ebe --- /dev/null +++ b/perl-class-data-inheritable/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-class-data-inheritable +pkgver=0.08 +pkgrel=1 +pkgdesc="Inheritable, overridable class data" +arch=('i686' 'x86_64') +url='https://search.cpan.org/dist/Class-Data-Inheritable' +license=('GPL-1') +depends=('perl>=5.10.0') +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-$pkgver.tar.gz + LICENSE) +sha512sums=('bddc61096158b21d4cfa69538d5db0f53617a66c71447ee193141064f4f58194462b21e0a849510e24e4c263b13be3ee1bc6bb8504320e0a86c02b67ad1652c8' + '1a9916157b9314eb2f0ba09027834eaddf899d4341970238ced32cbe1cd09f8ed5330b773ce0546c575a42acf19ae789cbcdd5f9b55bfcb88033cf08d0015437') + +build() { + cd Class-Data-Inheritable-${pkgver} + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Class-Data-Inheritable-${pkgver} + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-class-inspector/PKGBUILD b/perl-class-inspector/PKGBUILD new file mode 100644 index 0000000..785640e --- /dev/null +++ b/perl-class-inspector/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-class-inspector +pkgver=1.36 +pkgrel=1 +pkgdesc="Get information about a class and its structure" +arch=('any') +url="https://search.cpan.org/dist/Class-Inspector" +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/P/PL/PLICEASE/Class-Inspector-${pkgver}.tar.gz") +sha512sums=('488fcdbc9d135ed833331b0d5feb452997f35400b185341be69996438c278961eeb543648a629940765e779ca5cc87c5c3aa2c61a7fac12d2ecf6c599b68715a') + +build() { + cd "Class-Inspector-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd "Class-Inspector-${pkgver}" + make test +} + +package() { + cd "Class-Inspector-${pkgver}" + make DESTDIR="$pkgdir" install + install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-clone/LICENSE b/perl-clone/LICENSE new file mode 100644 index 0000000..2b171a2 --- /dev/null +++ b/perl-clone/LICENSE @@ -0,0 +1,39 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Clone +Source: https://metacpan.org/release/Clone +Upstream-Contact: Ray Finch + +Files: * +Copyright: 2001-2019, Ray Finch +License: Artistic or GPL-1+ + +Files: t/dclone.t + t/dump.pl + t/tied.pl +Copyright: 1995-2000, Raphael Manfredi +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2004-2007, Bastian Blank + 2008, Brian Cassidy + 2008, Gunnar Wolf + 2008-2011, Ansgar Burchardt + 2008-2020, gregor herrmann + 2012-2018, Xavier Guimard +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-clone/PKGBUILD b/perl-clone/PKGBUILD new file mode 100644 index 0000000..e44803b --- /dev/null +++ b/perl-clone/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-clone +pkgver=0.45 +pkgrel=1 +pkgdesc='Recursive copy of nested objects.' +arch=('i686' 'x86_64') +url='https://search.cpan.org/~RDF/Clone' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/A/AT/ATOOMIC/Clone-$pkgver.tar.gz" + "LICENSE") +sha512sums=('4d91580fb60876cca7670411748e42e6af0eaba8fac25d60e7a50685ae7b1e697e12c8a2835693e3e4abf3c13c060a2740344eb804ec26ed274b895f599340af' + '681147cef480fdd05b2702ed8bc3291c47c9cc9b7e6eada74d509c9eaede94f109a7a3692db58d6fe3f098e7013cfc7013b339ee43becedb0232c08cc797cce0') + +build() { + cd Clone-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Clone-$pkgver + make DESTDIR="$pkgdir" install + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-common-sense/PKGBUILD b/perl-common-sense/PKGBUILD new file mode 100644 index 0000000..8c44f5c --- /dev/null +++ b/perl-common-sense/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=perl-common-sense +pkgver=3.75 +pkgrel=2 +pkgdesc="Implements some sane defaults for Perl programs" +arch=('i686' 'x86_64') +url='https://search.cpan.org/dist/common-sense' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/common-sense-$pkgver.tar.gz") +sha512sums=('cb6034d9ff721a4122e0215db8ad5279ec4b189c3364593d427d70a1e84a1583a0e1447e276aa9a4fcaeb2f9d47a465a5bc4c0f842c803d3ddf91755311f4af4') + +build() { + cd common-sense-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd common-sense-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-compress-bzip2/PKGBUILD b/perl-compress-bzip2/PKGBUILD new file mode 100644 index 0000000..9553759 --- /dev/null +++ b/perl-compress-bzip2/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-compress-bzip2 +_realname=Compress-Bzip2 +pkgver=2.28 +pkgrel=1 +pkgdesc="Interface to Bzip2 compression library" +arch=('i686' 'x86_64') +url='https://metacpan.org/release/Compress-Bzip2' +license=('GPL-2') +depends=('perl' 'bzip2') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/R/RU/RURBAN/${_realname}-${pkgver}.tar.gz") +sha512sums=('3b00eab4cec4ec62c2b590dc63e92b4f167407edcee3bdb6581d570bc82c47b6152eb0f21a8b748ac49e87c89a1b99358785609e8f832da16107b6cdc4d9e852') + +build() { + cd $_realname-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd $_realname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/perl-crypt-libressl-bignum/PKGBUILD b/perl-crypt-libressl-bignum/PKGBUILD new file mode 100644 index 0000000..8411ea2 --- /dev/null +++ b/perl-crypt-libressl-bignum/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=perl-crypt-libressl-bignum +pkgver=0.09 +_debver=0.09 +_debrel=1 +pkgrel=2 +pkgdesc="Multiprecision integer arithmetic for LibreSSL" +arch=('i686' 'x86_64') +license=('GPL-2') +options=(!emptydirs) +depends=('perl' 'libressl') +makedepends=('quilt') +url='https://metacpan.org/release/Crypt-OpenSSL-Bignum' +source=("https://cpan.metacpan.org/authors/id/K/KM/KMX/Crypt-OpenSSL-Bignum-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libc/libcrypt-openssl-bignum-perl/libcrypt-openssl-bignum-perl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('3480a64e35e158a7a7c75c0e57ac0f578ddcb901a14f80a58ffabd1f318a68a83b411a72c22c53650273507198907b1d62c88fddbf5587885f6fe1a75deff3ed' + 'da681bb24fae71ba85deab1c3d50702d65cb08c9126fd5b2d3d50b8ddbefe7511ed6697bcd97765c56e8261cc16189d08faac43e6a176fb0203631e805ad022d') +_ddir="Crypt-OpenSSL-Bignum-$pkgver" + +prepare() { + cd "$srcdir/$_ddir" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +} + +package() { + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-crypt-libressl-guess/PKGBUILD b/perl-crypt-libressl-guess/PKGBUILD new file mode 100644 index 0000000..439fa7f --- /dev/null +++ b/perl-crypt-libressl-guess/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-crypt-libressl-guess +pkgver=0.14 +pkgrel=1 +pkgdesc='Guess LibreSSL include path' +arch=(any) +license=('GPL-1') +options=(!emptydirs) +depends=('perl') +url=https://metacpan.org/release/Crypt-OpenSSL-Guess +source=("https://cpan.metacpan.org/authors/id/A/AK/AKIYM/Crypt-OpenSSL-Guess-$pkgver.tar.gz") +sha512sums=(cf15b8775bf3279063c4b9e6865abbc28cef2d02b1b38fd4f4b5098eb19ef10905bd69dc1814d4122e274e4b04fd16697e17f18f0b5db15cd695befff2cef2fd) +_ddir="Crypt-OpenSSL-Guess-$pkgver" + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +) diff --git a/perl-crypt-libressl-random/PKGBUILD b/perl-crypt-libressl-random/PKGBUILD new file mode 100644 index 0000000..e2790fa --- /dev/null +++ b/perl-crypt-libressl-random/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-crypt-libressl-random +pkgver=0.15 +pkgrel=1 +pkgdesc='Routines for accessing the LibreSSL pseudo-random number generator' +arch=('i686' 'x86_64') +license=('GPL-1') +options=(!emptydirs) +makedepends=('perl-crypt-libressl-guess') +depends=('perl' 'libressl') +url=https://metacpan.org/release/Crypt-OpenSSL-Random +source=("https://search.cpan.org/CPAN/authors/id/R/RU/RURBAN/Crypt-OpenSSL-Random-$pkgver.tar.gz") +sha512sums=(bba8ce86b97ce2d6271be503efff6e6e0ff60a797282a2b7cb9c6c0592b69cc43344f9738b4790e5fc165a7273ff01e35ada481cf8c4dfde38cb7ad741d97530) +_ddir="Crypt-OpenSSL-Random-$pkgver" + +build() { + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +} + +package() { + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-crypt-libressl-rsa/PKGBUILD b/perl-crypt-libressl-rsa/PKGBUILD new file mode 100644 index 0000000..08cf123 --- /dev/null +++ b/perl-crypt-libressl-rsa/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-crypt-libressl-rsa +pkgver=0.32 +pkgrel=1 +pkgdesc='RSA encoding and decoding, using the LibreSSL libraries' +arch=('i686' 'x86_64') +license=('GPL-2') +options=(!emptydirs) +depends=('perl' 'perl-crypt-libressl-random') +makedepends=('perl-crypt-libressl-guess') +url='https://metacpan.org/release/Crypt-OpenSSL-RSA' +source=("https://search.cpan.org/CPAN/authors/id/T/TO/TODDR/Crypt-OpenSSL-RSA-$pkgver.tar.gz") +sha512sums=('2972611a8fa4e9c44fd09c9e7fa32f0abd377230f14dcdfa99edab87bba2199c6a0cab4d1e08bdf3057959c0efd3343eb989e46f4befd572b15540e59f1e3c64') +_ddir="Crypt-OpenSSL-RSA-$pkgver" + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +) diff --git a/perl-crypt-passwdmd5/PKGBUILD b/perl-crypt-passwdmd5/PKGBUILD new file mode 100644 index 0000000..34b317b --- /dev/null +++ b/perl-crypt-passwdmd5/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-crypt-passwdmd5 +pkgver=1.41 +pkgrel=1 +pkgdesc="Provides a crypt()-compatible interface to new MD5-based crypt()" +arch=('any') +url="https://search.cpan.org/dist/Crypt-PasswdMD5" +license=('GPL-1') +depends=('perl') +provides=('perl-passwd-md5') +replaces=('perl-passwd-md5') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/R/RS/RSAVAGE/Crypt-PasswdMD5-$pkgver.tgz) +sha512sums=('eee16e08f5cdca4d5bc2056e39e18bbbeb5e8bcf403fb44eb632a9a09496fc8b34ede4b2feaffacceafef99be390e44ca49767d98c05a62a2208e1c7e7ff5430') + +build() { + cd Crypt-PasswdMD5-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Crypt-PasswdMD5-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-crypt-random-seed/PKGBUILD b/perl-crypt-random-seed/PKGBUILD new file mode 100644 index 0000000..5ddfcad --- /dev/null +++ b/perl-crypt-random-seed/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-crypt-random-seed +pkgver=0.03 +pkgrel=1 +pkgdesc='Provide strong randomness for seeding' +arch=('any') +license=('GPL-1') +options=(!emptydirs) +depends=('perl' 'perl-crypt-random-tesha2') +url='https://metacpan.org/release/Crypt-Random-Seed' +source=("https://cpan.metacpan.org/authors/id/D/DA/DANAJ/Crypt-Random-Seed-$pkgver.tar.gz") +sha512sums=('5ee6ea67c325aa9693c96ef650e3888a599d3d7e25316f869808dc6e06b9dd86f1c200c9097939f74511e2ed59e48df1b28cc96e5f7988076d9f7f5d840a894e') +_ddir="Crypt-Random-Seed-$pkgver" + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +) diff --git a/perl-crypt-random-tesha2/PKGBUILD b/perl-crypt-random-tesha2/PKGBUILD new file mode 100644 index 0000000..6606add --- /dev/null +++ b/perl-crypt-random-tesha2/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-crypt-random-tesha2 +pkgver=0.01 +pkgrel=1 +pkgdesc='Random numbers using timer/schedule entropy, aka userspace voodoo entropy' +arch=('any') +license=('GPL-1') +options=(!emptydirs) +depends=('perl') +url='https://metacpan.org/release/Crypt-Random-TESHA2' +source=("https://cpan.metacpan.org/authors/id/D/DA/DANAJ/Crypt-Random-TESHA2-$pkgver.tar.gz") +sha512sums=('afc95d73481cb6aa06b939ef51b5ddc14e7aaee296d08779f79313000188d7c2e5e88ddf2048dd45b9dd96420cdd7f65f0a98c8bcb4c5be77709043d558ec4ba') +_ddir="Crypt-Random-TESHA2-$pkgver" + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +) diff --git a/perl-curses/PKGBUILD b/perl-curses/PKGBUILD new file mode 100644 index 0000000..096d2f4 --- /dev/null +++ b/perl-curses/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=perl-curses +pkgver=1.37 +_debver=1.37 +_debrel=1 +pkgrel=1 +pkgdesc='Character screen handling and windowing' +arch=('i686' 'x86_64') +url='https://search.cpan.org/dist/Curses' +license=('GPL-1') +depends=('perl' 'ncurses') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/G/GI/GIRAFFED/Curses-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libc/libcurses-perl/libcurses-perl_$_debver-$_debrel.debian.tar.xz) +sha512sums=('10886e725b174fdabc0c9b86a9ef9b717949f0fb03561bfc315e8503be689be7945d1ceeea2f950628ce480c2cc8081736d3b8f28042ea677b252298a9eb4827' + '2696627a6b97155d6ff4774d8c17573c107b78277c512ecd58301fbc0d6dbffae210774c2c18a06c4509e01260de1a993fe809a39b635132a5a7a9caa7c798a3') + +prepare() { + cd "$srcdir"/Curses-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/Curses-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Curses-$pkgver + make pure_install doc_install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 Copying -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-data-dump/COPYING b/perl-data-dump/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-data-dump/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-data-dump/PKGBUILD b/perl-data-dump/PKGBUILD new file mode 100644 index 0000000..148d98e --- /dev/null +++ b/perl-data-dump/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=perl-data-dump +pkgver=1.23 +pkgrel=1 +pkgdesc="Pretty printing of data structures" +arch=(any) +url="https://metacpan.org/release/Data-Dump" +license=('GPL-1') +depends=('perl') +options=(!emptydirs) +source=("https://cpan.metacpan.org/authors/id/G/GA/GAAS/Data-Dump-${pkgver}.tar.gz" + 'COPYING') +sha512sums=('6fd6c23bb6df7f7396219149dbfd23132fc2ea1dd344c32f62fc27a1afeeb28d7ebf2d429184bb6d1189f412e218f9e62a966b49fdd9ad5564e5152d67a02b96' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "Data-Dump-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd "Data-Dump-${pkgver}" + make test +} + +package() { + cd "Data-Dump-${pkgver}" + make DESTDIR="${pkgdir}" install + install -D -m644 "${srcdir}/COPYING" "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-data-optlist/PKGBUILD b/perl-data-optlist/PKGBUILD new file mode 100644 index 0000000..a9fa6aa --- /dev/null +++ b/perl-data-optlist/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=perl-data-optlist +pkgver=0.110 +pkgrel=1 +pkgdesc="Parse and validate simple name/value option pairs" +arch=('any') +url='https://metacpan.org/release/Data-OptList' +license=('GPL-1') +options=('!emptydirs') +depends=('perl-params-util' 'perl-sub-install') +source=(https://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Data-OptList-$pkgver.tar.gz) +sha512sums=('68393958a38f509a71cfba61f6dff8303821918ba29ad8492af0c23cfd4f741c6ce98c4f68ad295f27e166287fc546229c430816f0bdd6009d4f60860c967b76') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor" \ + PERL_MB_OPT="--installdirs vendor" \ + MODULEBUILDRC=/dev/null + cd "$srcdir"/Data-OptList-$pkgver + + /usr/bin/perl Makefile.PL + make + ) +} + +package() { + cd "$srcdir"/Data-OptList-$pkgver + + make DESTDIR="$pkgdir"/ install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-date-calc/PKGBUILD b/perl-date-calc/PKGBUILD new file mode 100644 index 0000000..3a8ae3e --- /dev/null +++ b/perl-date-calc/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=perl-date-calc +_realname=Date-Calc +pkgver=6.4 +_debver=$pkgver +_debrel=1.1 +pkgrel=1 +pkgdesc="Perl module for Gregorian calendar date calculations" +arch=('any') +license=('GPL-1') +url='https://search.cpan.org/dist/Date-Calc/' +depends=('perl-bit-vector' 'perl') +makedepends=('quilt') +options=(!emptydirs) +source=("https://search.cpan.org/CPAN/authors/id/S/ST/STBEY/Date-Calc-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libd/libdate-calc-perl/libdate-calc-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e2d0cb2b041afedb10033700e27075f01987abc763a59034a10a9fc0bb059706cc959f6d76fe1fc21ced4b547475f62a8c37ad38e8e49f7453d78b17082c0671' + '441cc555052c1b0effe18868719140bfb0c7283bbfe2e7feb652644518bf9611d65861cf04c58727e22f58f381cd1f51c6725d80edf701c1bb8084c79edb98ce') + +prepare() { + cd Date-Calc-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd Date-Calc-$pkgver + # install module in vendor directories. + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Date-Calc-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-datetime-locale/PKGBUILD b/perl-datetime-locale/PKGBUILD new file mode 100644 index 0000000..ff8782d --- /dev/null +++ b/perl-datetime-locale/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-datetime-locale +pkgver=1.31 +pkgrel=1 +pkgdesc="Localization support for DateTime.pm " +arch=('any') +url='https://search.cpan.org/dist/DateTime-Locale' +license=('GPL-1' 'Expat') +depends=('perl-params-validate' 'perl-list-moreutils' + 'perl-file-sharedir' 'perl-file-sharedir-install') +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-Locale-$pkgver.tar.gz) +sha512sums=('2ac1dc90f43fd3676d5e953531976880cc9b83988c402a6ca3ab68b31c73ab499440c29a6a3cffba8f208c6aacc6718571effd9abcc7a1fccc563e3c665924c1') + +build() { + cd "$srcdir"/DateTime-Locale-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/DateTime-Locale-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 LICENSE LICENSE.cldr -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-dbi/PKGBUILD b/perl-dbi/PKGBUILD new file mode 100644 index 0000000..881b992 --- /dev/null +++ b/perl-dbi/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=perl-dbi +pkgver=1.643 +_debver=1.643 +_debrel=3 +pkgrel=1 +pkgdesc="Database independent interface for Perl" +arch=('i686' 'x86_64') +url="https://metacpan.org/release/DBI" +license=('GPL-1') +depends=('perl') +makedepends=('quilt') +checkdepends=('perl-test-pod' 'perl-test-pod-coverage') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/T/TI/TIMB/DBI-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libd/libdbi-perl/libdbi-perl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('03812f3eb1e43c8290dadb8cb14bbced9ec6e237228ea2a2ba91f22e52143906a91a7e82945dab30b1d1b9fc925073721111adafd9a09fac070808ab88f908b8' + 'b57a0a78a8bcf3e6eb8c122f34e399913b928db8004de982bd2fd8809462b77e51d20923ca6f20b60bb31a6397c58799a6130bda17a392c29b4d6e9d6c00fa43') + +prepare() { + cd DBI-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd DBI-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd DBI-$pkgver + make test +} + +package() { + cd DBI-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-devel-checklib/COPYING b/perl-devel-checklib/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-devel-checklib/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-devel-checklib/PKGBUILD b/perl-devel-checklib/PKGBUILD new file mode 100644 index 0000000..a6e6c08 --- /dev/null +++ b/perl-devel-checklib/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=perl-devel-checklib +pkgver=1.14 +pkgrel=1 +pkgdesc="Module to check if other perl modules are installed" +arch=('any') +url='https://search.cpan.org/dist/Devel-CheckLib/' +license=('GPL-1') +depends=('perl') +makedepends=('perl-capture-tiny') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/M/MA/MATTN/Devel-CheckLib-${pkgver}.tar.gz" + 'COPYING') +sha512sums=('a5a310cd20e7bfa3c28718b0cba997e029ae0a422ed355d70774691521a3f5c2942eb39269dec1b09e706c1d124559313ab79e787430e0bb3ad43d8aa937539c' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd Devel-CheckLib-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd Devel-CheckLib-$pkgver + make test +} + +package() { + cd Devel-CheckLib-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 ../COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-devel-stacktrace/PKGBUILD b/perl-devel-stacktrace/PKGBUILD new file mode 100644 index 0000000..bcf98d6 --- /dev/null +++ b/perl-devel-stacktrace/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-devel-stacktrace +pkgver=2.04 +pkgrel=1 +pkgdesc="An object representing a stack trace" +arch=('any') +url="https://metacpan.org/release/Devel-StackTrace" +license=('Artistic-2.0') +depends=('perl>=5.6') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Devel-StackTrace-$pkgver.tar.gz) +sha512sums=('2330c1d8619cdcb42b5919090e6eaabbe34ab26b50d5c09c4cfd7ed099829817a50ffe582bd1f2a19a7d5be050819796f22dee32b10e175259e6df177ce6d0a9') + +build() { + cd "${srcdir}"/Devel-StackTrace-$pkgver + + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + perl Makefile.PL + make +} + +package() { + cd "${srcdir}"/Devel-StackTrace-$pkgver + + make install INSTALLDIRS=vendor DESTDIR="${pkgdir}" + + find "${pkgdir}" -name .packlist -o -name perllocal.pod -delete + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-devel-symdump/COPYING b/perl-devel-symdump/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-devel-symdump/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-devel-symdump/PKGBUILD b/perl-devel-symdump/PKGBUILD new file mode 100644 index 0000000..1f6b0c2 --- /dev/null +++ b/perl-devel-symdump/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-devel-symdump +pkgver=2.18 +pkgrel=2 +pkgdesc="Perl symbol table access and dumping" +arch=('any') +url="https://search.cpan.org/dist/Devel-Symdump" +license=('GPL-1') +depends=('perl>=5.10.0') +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/A/AN/ANDK/Devel-Symdump-$pkgver.tar.gz + COPYING) +sha512sums=('4e8e1ee723e3e02d2f0c100dace40d7722f6366402cff24fb50c8616a863628bc2faa02210754132afa7cbebbd90c75ea6f173e15bbcfaa5158dfcfdfd03da73' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "$srcdir"/Devel-Symdump-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Devel-Symdump-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 ../COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-digest-hmac/PKGBUILD b/perl-digest-hmac/PKGBUILD new file mode 100644 index 0000000..7a85fc2 --- /dev/null +++ b/perl-digest-hmac/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-digest-hmac +_realname=Digest-HMAC +pkgver=1.04 +pkgrel=1 +pkgdesc="Perl Module: Keyed-Hashing for Message Authentication." +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/Digest-HMAC/" +depends=('perl-digest-sha1' 'perl') +options=(!emptydirs) +source=("https://www.cpan.org/authors/id/A/AR/ARODLAND/Digest-HMAC-$pkgver.tar.gz") +sha512sums=('d30b62e60bfa9f6c0f0c058e190938f13a08a70a816771a0641226c24045cb6dbd622756f1f88593fd3690442a45636bdcaf35457e9dfea6de5f8a342a538a6d') + +build() { + cd Digest-HMAC-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Digest-HMAC-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-digest-nilsimsa/PKGBUILD b/perl-digest-nilsimsa/PKGBUILD new file mode 100644 index 0000000..555c917 --- /dev/null +++ b/perl-digest-nilsimsa/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=perl-digest-nilsimsa +pkgver=0.06 +pkgrel=1 +pkgdesc="Perl version of Nilsimsa code" +arch=('i686' 'x86_64') +license=('LGPL-2') +url="https://search.cpan.org/dist/Digest-Nilsimsa/" +depends=('perl') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/V/VI/VIPUL/Digest-Nilsimsa-$pkgver.tar.gz") +sha512sums=('c91a4587e61306e22680575d26e17d4c255c3830f833debf9ef9e7fdcf709dc07584e028d0e3d4e81761c05da3a47ef58652dae2b36e48fa55341825eb891bc6') + +build() { + cd Digest-Nilsimsa-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Digest-Nilsimsa-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-digest-sha1/LICENSE b/perl-digest-sha1/LICENSE new file mode 100644 index 0000000..a3016cf --- /dev/null +++ b/perl-digest-sha1/LICENSE @@ -0,0 +1,33 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Digest-SHA +Upstream-Contact: Mark Shelor +Source: https://metacpan.org/release/Digest-SHA + +Files: * +Copyright: 2003-2018, Mark Shelor +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2005, 2006, Gunnar Wolf + 2005, Allard Hoeve + 2006, 2007, 2008, gregor herrmann + 2006, Niko Tyni + 2008, Damyan Ivanov + 2010-2018, Salvatore Bonaccorso +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-digest-sha1/PKGBUILD b/perl-digest-sha1/PKGBUILD new file mode 100644 index 0000000..d63d841 --- /dev/null +++ b/perl-digest-sha1/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-digest-sha1 +pkgver=2.13 +pkgrel=1 +pkgdesc="Perl interface to the SHA-1 Algorithm" +arch=('i686' 'x86_64') +license=('GPL-1') +url="https://search.cpan.org/dist/Digest-SHA1/" +depends=('perl') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/G/GA/GAAS/Digest-SHA1-$pkgver.tar.gz" + "LICENSE") +sha512sums=('44d0c57ecc7d2126a0387552e76c9204e45fba174af6ff7abc1c9ae00d549eb7370ee20948caf12fafefedec0098b8231249d14b109c53470ee1d5bf3de3305d' + '58491f57867c78fa8d6cc4abb910d3176f0027556eb33358b2ece695de42ea729a4bfa039e705786bd2c122241792373d6de8acd8e13de8d69cd43c02fc3731f') + +build() { + cd Digest-SHA1-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Digest-SHA1-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-encode-locale/COPYING b/perl-encode-locale/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-encode-locale/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-encode-locale/PKGBUILD b/perl-encode-locale/PKGBUILD new file mode 100644 index 0000000..449163c --- /dev/null +++ b/perl-encode-locale/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-encode-locale +pkgver=1.05 +pkgrel=2 +pkgdesc="Determine the locale encoding" +arch=('any') +url="https://search.cpan.org/dist/Encode-Locale" +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Encode-Locale-$pkgver.tar.gz + COPYING) +sha512sums=('68ed5732fd3645eca2ea54080067677a48f90fc5a594a1b453a322f3127e67a984d539cb5fd41ac63a03b9dab693c070b65e3c70a2a677dc61b4634f3e212d06' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd Encode-Locale-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd Encode-Locale-$pkgver + make test +} + +package() { + cd Encode-Locale-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 $srcdir/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-error/PKGBUILD b/perl-error/PKGBUILD new file mode 100644 index 0000000..2ff5b4b --- /dev/null +++ b/perl-error/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-error +pkgver=0.17029 +pkgrel=1 +pkgdesc="Perl/CPAN Error module - Error/exception handling in an OO-ish way" +url="https://search.cpan.org/dist/Error/" +arch=('any') +license=('GPL-2') +depends=('perl') +checkdepends=('perl-test-pod' 'perl-test-pod-coverage') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/Error-${pkgver}.tar.gz) +sha512sums=('266ba1feff897c1d162e69a83e595cb40da9a6e1d8b10cc5531626eff392c6da94be03ba722c74827fc2ea0d9d1c1e62e824d9021e098b700db65dd0b3acbd0a') + +build() { + cd Error-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd Error-${pkgver} + make test +} + +package() { + cd Error-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE +} diff --git a/perl-eval-closure/PKGBUILD b/perl-eval-closure/PKGBUILD new file mode 100644 index 0000000..68a30a8 --- /dev/null +++ b/perl-eval-closure/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. +# Montainer (Arch): 3ED + +pkgname=perl-eval-closure +_lastauthor=D/DO/DOY +_pkgname=Eval-Closure +pkgver=0.14 +pkgrel=1 +pkgdesc="Safely and cleanly create closures via string eval" +arch=('any') +license=('GPL-1') +url='https://metacpan.org/release/Eval-Closure' +options=('!emptydirs') +depends=('perl-try-tiny' 'perl-sub-exporter') +source=(https://cpan.metacpan.org/authors/id/${_lastauthor}/${_pkgname}-${pkgver}.tar.gz) +sha512sums=('fc55206bd39c4cb39360d06b6f39a65743f34b5e59d1a1ce99bf5831b9d88a03fb6dadf32fa9f0868e140fce719d53a7b13027f397cdd7f6ca05cc81277bdc08') + +build() { + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL="--skipdeps" \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null + + cd "${srcdir}/${_pkgname}-${pkgver}" + perl Makefile.PL + make +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-event-execflow/LICENSE b/perl-event-execflow/LICENSE new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-event-execflow/LICENSE @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-event-execflow/PKGBUILD b/perl-event-execflow/PKGBUILD new file mode 100644 index 0000000..6afa58c --- /dev/null +++ b/perl-event-execflow/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=perl-event-execflow +_realname=Event-ExecFlow +pkgver=0.64 +pkgrel=1 +pkgdesc="Framework for perl-events" +arch=('any') +license=('GPL-1') +url='https://www.exit1.org/Event-ExecFlow/' +depends=('perl-anyevent' 'perl-libintl-perl' 'perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/J/JR/JRED/${_realname}-${pkgver}.tar.gz" + "LICENSE") +sha512sums=('dab795481e3f85ecde70e330eda10c8d09eb310d3325945364eebc1d70521f094b1f6afc311aff4b662cbefd96e0170bfb72f284296654088b747a139bfe7b5d' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "${srcdir}/${_realname}-${pkgver}" + # install module in vendor directories. + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}/${_realname}-${pkgver}" + make install DESTDIR="${pkgdir}/" + + # remove perllocal.pod and .packlist + find "${pkgdir}" -name perllocal.pod -delete + find "${pkgdir}" -name .packlist -delete + + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-exception-class/PKGBUILD b/perl-exception-class/PKGBUILD new file mode 100644 index 0000000..d254f31 --- /dev/null +++ b/perl-exception-class/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-exception-class +pkgver=1.44 +pkgrel=1 +pkgdesc='A module that allows you to declare real exception classes in Perl' +arch=('any') +url="https://metacpan.org/release/Exception-Class" +license=('GPL-1') +depends=('perl>=5.8.1' 'perl-class-data-inheritable>=0.02' 'perl-devel-stacktrace>=2.00') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Exception-Class-$pkgver.tar.gz) +sha512sums=('7ce1e488505dc3d1c6d6365b5ed523b204b93d89d205ad4cdf6c9ee9dbad1a6edc257251a365275f067479e734def56b3b21d588e978822e7714bd8a49ba6bb2') + +build() { + cd "${srcdir}"/Exception-Class-$pkgver + + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}"/Exception-Class-$pkgver + + make install INSTALLDIRS=vendor DESTDIR="${pkgdir}" + + find "${pkgdir}" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-exporter-tiny/PKGBUILD b/perl-exporter-tiny/PKGBUILD new file mode 100644 index 0000000..16f0bac --- /dev/null +++ b/perl-exporter-tiny/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=perl-exporter-tiny +pkgver=1.002002 +pkgrel=1 +pkgdesc="An exporter with the features of Sub::Exporter but only core dependencies" +arch=('any') +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +url='https://search.cpan.org/dist/Exporter-Tiny' +source=("https://search.cpan.org/CPAN/authors/id/T/TO/TOBYINK/Exporter-Tiny-$pkgver.tar.gz") +sha512sums=('b6d39ba1824f6c9d68cf75e7f28fd896c2c475e419f0b1aadec58d4e7e5c8d3fd7bf85d841758772055470de56ad7a3ad6787cfd9d6c5d61d8449cf8f40bda8d') +_distdir="Exporter-Tiny-$pkgver" + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd "$srcdir/$_distdir" + /usr/bin/perl Makefile.PL + make + ) +} + +package() { + cd "$srcdir/$_distdir" + make install + + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-extutils-config/PKGBUILD b/perl-extutils-config/PKGBUILD new file mode 100644 index 0000000..20c82fd --- /dev/null +++ b/perl-extutils-config/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=perl-extutils-config +_pkgname=ExtUtils-Config +pkgver=0.008 +pkgrel=2 +pkgdesc="ExtUtils::Config - A wrapper for perl's configuration" +arch=('any') +license=('GPL-1') +url='https://search.cpan.org/dist/ExtUtils-Config/' +options=(!emptydirs) +depends=('perl') +source=("https://search.cpan.org/CPAN/authors/id/L/LE/LEONT/${_pkgname}-${pkgver}.tar.gz") +sha512sums=('7775e2212b4605e60559c7e63604b8f2b4c56f4846e64f9f4454f3f5d0a7a21f618143e6c61eafabf5d9ee9bca8f722c04aedeaf9c51f59924de68c272b86db2') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd "${srcdir}/${_pkgname}-${pkgver}" + /usr/bin/perl Makefile.PL + make + ) +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/perl-extutils-depends/PKGBUILD b/perl-extutils-depends/PKGBUILD new file mode 100644 index 0000000..bd78cbd --- /dev/null +++ b/perl-extutils-depends/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-extutils-depends +pkgver=0.8001 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="The Perl depends module" +arch=(i686 x86_64) +url='https://search.cpan.org/dist/ExtUtils-Depends/' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/X/XA/XAOC/ExtUtils-Depends-${pkgver}.tar.gz" + "COPYING::https://metadata.ftp-master.debian.org/changelogs//main/libe/libextutils-depends-perl/libextutils-depends-perl_${_debver}-${_debrel}_copyright") +sha512sums=('80141f90fbde7c62b192a55d40d26ce4e442150287ae6fe200388dc84cedba5f5210ee6cd9a40b1a9cda0cc49815b1ba1ab35e75afaa7440de3c3577d01bb733' + '631b13740a45ba146ca36b1e276ec38e27209331385e3fdbc6924493215d70189014742818dbd7eb3d212cdadf87b883634e00fb7a9374b81a8acd28a51cabc6') + +build() { + cd ExtUtils-Depends-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ExtUtils-Depends-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 $srcdir/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/perl-extutils-helpers/PKGBUILD b/perl-extutils-helpers/PKGBUILD new file mode 100644 index 0000000..a865c18 --- /dev/null +++ b/perl-extutils-helpers/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=perl-extutils-helpers +_pkgname=ExtUtils-Helpers +pkgver=0.026 +pkgrel=2 +pkgdesc='ExtUtils::Helpers - Various portability utilities for module builders' +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/ExtUtils-Helpers/" +options=('!emptydirs') +depends=('perl') +source=("https://search.cpan.org/CPAN/authors/id/L/LE/LEONT/${_pkgname}-${pkgver}.tar.gz") +sha512sums=('372d801f43003c571758823a84bfe418876f1b48e3d8c35f888ca41469f6771a33aa30cf893a4c4a68ea62c6e8c8c6ab2ef44ee783dbf9f25e18bc0389359399') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd "${srcdir}/${_pkgname}-${pkgver}" + /usr/bin/perl Makefile.PL + make + ) +} + +check() { + cd "${srcdir}/${_pkgname}-${pkgver}" + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" + make test + ) +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-extutils-installpaths/PKGBUILD b/perl-extutils-installpaths/PKGBUILD new file mode 100644 index 0000000..9087f87 --- /dev/null +++ b/perl-extutils-installpaths/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=perl-extutils-installpaths +_pkgname=ExtUtils-InstallPaths +pkgver=0.012 +pkgrel=1 +pkgdesc="ExtUtils::InstallPaths - Build.PL install path logic made easy" +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/ExtUtils-InstallPaths/" +options=('!emptydirs') +depends=('perl' 'perl-extutils-config') +source=("https://search.cpan.org/CPAN/authors/id/L/LE/LEONT/${_pkgname}-${pkgver}.tar.gz") +sha512sums=('92a4e9ebb387d330ae67b0716b96b27165d08503d2915d8301b3a6aa185f962940e761d21fd400033e6a814e276918e0662da3740ca2852a53cf0fe54f3d7660') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd "${srcdir}/${_pkgname}-${pkgver}" + /usr/bin/perl Makefile.PL + make + ) +} + +check() { + cd "${srcdir}/${_pkgname}-${pkgver}" + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" + make test + ) +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-extutils-pkgconfig/PKGBUILD b/perl-extutils-pkgconfig/PKGBUILD new file mode 100644 index 0000000..2d3ed24 --- /dev/null +++ b/perl-extutils-pkgconfig/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-extutils-pkgconfig +pkgver=1.16 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="The Perl Pkgconfig module" +arch=(i686 x86_64) +url='https://gtk2-perl.sourceforge.net/' +license=('LGPL-3') +depends=('perl') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/X/XA/XAOC/ExtUtils-PkgConfig-${pkgver}.tar.gz" + "COPYING::https://metadata.ftp-master.debian.org/changelogs//main/libe/libextutils-pkgconfig-perl/libextutils-pkgconfig-perl_${_debver}-${_debrel}_copyright") +sha512sums=('a872fd54aa5bf3137ace9c44457dfc047ea6d283accc453e824b609b6996a8e2fab685459f38a8236419155df01a18421671426a7237639a47ab32e18c9b4191' + '5b97afbbb8e87de19189e4c11211465f24a60de499ed66c439fd48d7c09f6d0184b8cc476e329395a056ef6cf91396f2829ca23493d1b94b637ddffae0dbc1b8') + +build() { + cd ExtUtils-PkgConfig-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ExtUtils-PkgConfig-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 $srcdir/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/perl-file-basedir/LICENSE b/perl-file-basedir/LICENSE new file mode 100644 index 0000000..e7a7040 --- /dev/null +++ b/perl-file-basedir/LICENSE @@ -0,0 +1,31 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: File-BaseDir +Upstream-Contact: Kim Ryan +Source: https://metacpan.org/release/File-BaseDir + +Files: * +Copyright: © 2003-2007, Jaap G Karssenberg +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: + © 2005, Florian Ragwitz + © 2007, Raphael Hertzog + © 2010, Ansgar Burchardt +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-file-basedir/PKGBUILD b/perl-file-basedir/PKGBUILD new file mode 100644 index 0000000..08ddbf0 --- /dev/null +++ b/perl-file-basedir/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-basedir +pkgver=0.08 +pkgrel=1 +pkgdesc="Use the Freedesktop.org base directory specification" +arch=('any') +license=('GPL-1') +url='https://search.cpan.org/dist/File-BaseDir/' +depends=('perl-ipc-system-simple' 'perl-file-which') +makedepends=('perl-module-build>0.4205') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/K/KI/KIMRYAN/File-BaseDir-$pkgver.tar.gz" + "LICENSE") +sha512sums=('6b44edca34906c34d574933c21c0e3a1a236a431a3ac12caeabcc2638688dfe1c02efc9a1e75a2c2cd522de0dca00df0620cd262c184ec938cc97766d1121f99' + '8a0014f4937fc9dd440eccb60e4ceb13893d390e6388dfb866ecbd2e86b898febc2f494f650df8a708c2befd86310cb00e9945f22c626047416db6651b0d8d67') + +build() { + cd File-BaseDir-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd File-BaseDir-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-file-desktopentry/PKGBUILD b/perl-file-desktopentry/PKGBUILD new file mode 100644 index 0000000..edf2b79 --- /dev/null +++ b/perl-file-desktopentry/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-desktopentry +pkgver=0.22 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Object to handle .desktop files" +arch=('any') +license=('GPL-1') +url='https://search.cpan.org/dist/File-DesktopEntry/' +depends=('perl-file-basedir' 'perl-uri') +makedepends=('quilt') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/M/MI/MICHIELB/File-DesktopEntry-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libf/libfile-desktopentry-perl/libfile-desktopentry-perl_0.22-2.debian.tar.xz") +sha512sums=('f6a0f2a91c66ea3e5ebac1e66f82317c4109d8d3e2211b4e84cd870b9df07320c03ee0d026e89f788338a1c02152c77e36402684da4f5a7093eb3ac21ff584a7' + 'f3f18248b03b8486427cbda8b55cf2cd9abc12e7acdd07ded6b8f5a294b8ee98a219f84ffcd3758e99e445526b1668f422743000701caec484c551492a05a1c3') + +prepare() { + cd File-DesktopEntry-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd File-DesktopEntry-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd File-DesktopEntry-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-file-listing/COPYING b/perl-file-listing/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-file-listing/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-file-listing/PKGBUILD b/perl-file-listing/PKGBUILD new file mode 100644 index 0000000..1dcb55a --- /dev/null +++ b/perl-file-listing/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-listing +pkgver=6.04 +pkgrel=3 +pkgdesc="parse directory listing" +arch=('any') +url="https://search.cpan.org/dist/File-Listing" +license=('GPL-1') +depends=('perl' 'perl-http-date') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/G/GA/GAAS/File-Listing-${pkgver}.tar.gz" + 'COPYING') +sha512sums=('a84198bc82003daaf88ed23218e34a7a1552dcd2855a9563e9609ce5df167a8295043501534c31614854fc8dd9c04b4af27b4d7320112c613914f94c86c2eeb2' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd File-Listing-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd File-Listing-${pkgver} + make test +} + +package() { + cd File-Listing-${pkgver} + make DESTDIR="$pkgdir" install + install -Dm644 ${srcdir}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/perl-file-mimetype/PKGBUILD b/perl-file-mimetype/PKGBUILD new file mode 100644 index 0000000..b6b309b --- /dev/null +++ b/perl-file-mimetype/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-mimeinfo +pkgver=0.33 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Determine file type, includes mimeopen and mimetype" +arch=('any') +url='https://metacpan.org/release/File-MimeInfo' +license=('GPL-1') +depends=('perl-encode-locale' 'perl-file-basedir' 'perl-file-desktopentry' 'shared-mime-info') +makedepends=('quilt') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/M/MI/MICHIELB/File-MimeInfo-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libf/libfile-mimeinfo-perl/libfile-mimeinfo-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5fbba13775079da56928175f48db1c1ab8ac4d7fa3e85bdb5384c4021cab7cf8c363a3d8219cf34318136b1470e32163abae7c37a119416a5e510d8d07848c9d' + '127ae9df84f6b4e634bc1a00be0ee0c06b97ac86b2aeaa03b7f183cfb8ada5ee34eb84a8925c98441af3f423d6132fb3f4d11f6f69b88da7fbf6b74492cb7a0a') + +prepare() { + cd File-MimeInfo-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd File-MimeInfo-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd File-MimeInfo-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-file-sharedir-install/PKGBUILD b/perl-file-sharedir-install/PKGBUILD new file mode 100644 index 0000000..a5a144e --- /dev/null +++ b/perl-file-sharedir-install/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-sharedir-install +pkgver=0.13 +pkgrel=1 +pkgdesc="File::ShareDir::Install - Install read-only data files from a distribution" +arch=('any') +url="https://search.cpan.org/dist/File-ShareDir-Install" +license=('GPL-1') +options=('!emptydirs') +source=("https://cpan.org/modules/by-module/File/File-ShareDir-Install-${pkgver}.tar.gz") +sha512sums=('a119e38491fad8ae0ebd95913e3b608e09a2b99376a5160e75083a28abe4f83c4f6a36df216365527ff87bf8ec095254b16a2f6d2515c69f34609df8672605ca') + +build() { + cd "File-ShareDir-Install-${pkgver}" + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "File-ShareDir-Install-${pkgver}" + make install DESTDIR="${pkgdir}" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-file-sharedir/PKGBUILD b/perl-file-sharedir/PKGBUILD new file mode 100644 index 0000000..9c1bfcc --- /dev/null +++ b/perl-file-sharedir/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-sharedir +pkgver=1.118 +pkgrel=1 +pkgdesc="Locate per-dist and per-module shared files" +arch=('any') +url="https://metacpan.org/release/File-ShareDir" +license=('GPL-1') +depends=('perl-class-inspector') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/R/RE/REHSACK/File-ShareDir-${pkgver}.tar.gz") +sha512sums=('890f33e96333f7b07707d722e59e7da9a287112062814ef294594ac67f2f7349f905c009e6cd70d3af3a4de85335b074ec5a61194f9b0495f3e793d6ca635853') + +build() { + cd "File-ShareDir-${pkgver}" + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "File-ShareDir-${pkgver}" + make DESTDIR="${pkgdir}" install + install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-file-slurp-tiny/PKGBUILD b/perl-file-slurp-tiny/PKGBUILD new file mode 100644 index 0000000..89e5250 --- /dev/null +++ b/perl-file-slurp-tiny/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-slurp-tiny +pkgver=0.004 +pkgrel=1 +pkgdesc="A simple, sane and efficient file slurper" +arch=('any') +url='https://search.cpan.org/dist/File-Slurp-Tiny' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/L/LE/LEONT/File-Slurp-Tiny-$pkgver.tar.gz") +sha512sums=('916af1da5375ced4ebc00cb2b908e53b027e7b4fcad9069d5109eb2c0623faaa1d2d4fc8aeefb22861c7304ec913696cec85c280a82fd9aa7236c902427bc5cf') + +build() { + cd "$srcdir/File-Slurp-Tiny-$pkgver" + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir/File-Slurp-Tiny-$pkgver" + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -o -name '*.pod' -delete + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-file-slurp/LICENSE b/perl-file-slurp/LICENSE new file mode 100644 index 0000000..cb5af76 --- /dev/null +++ b/perl-file-slurp/LICENSE @@ -0,0 +1,15 @@ +This package was debianized by Alexander Zangerl . +It was downloaded from http://www.cpan.org/authors/id/U/UR/URI/ + +Upstream Author: Uri Guttman + +Copyright: + +"Copyright (C) 2003 Uri Guttman + +Licensed the same as Perl." + +Perl is distributed under your choice of the GNU General Public License or +the Artistic License. On Debian GNU/Linux systems, the complete text of the +GNU General Public License can be found in `/usr/share/common-licenses/GPL' +and the Artistic Licence in `/usr/share/common-licenses/Artistic'. diff --git a/perl-file-slurp/PKGBUILD b/perl-file-slurp/PKGBUILD new file mode 100644 index 0000000..3004955 --- /dev/null +++ b/perl-file-slurp/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-slurp +pkgver=9999.32 +_debver=9999.32 +_debrel=1 +pkgrel=1 +pkgdesc="Read/write/append files quickly" +arch=('any') +url="https://search.cpan.org/dist/File-Slurp" +license=('GPL-1') +depends=('perl') +makedepends=('quilt') +options=('!emptydirs') +source=(https://cpan.metacpan.org/authors/id/C/CA/CAPOEIRAB/File-Slurp-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libf/libfile-slurp-perl/libfile-slurp-perl_$_debver-$_debrel.debian.tar.xz + LICENSE) +sha512sums=('413337e0257e95e8e8d2aabf684bec81e746000a741809935b058490b8c42b494064f724e618b250330d8bb67a0a7a2a5adad17e3e6c96d4b193531a192a4d56' + '5526b7c958e4cea0d36c2baf674ef89d2f4ba97810e617940db0c7f657638e806bbad6e338f26505781e02d31375718fd23ee82da87898e0a1c5df49cc79b325' + 'b3fe26789164a5133857733d2a5a28c2af3995accb50c147b6158f90efd7c9e35793b21d71b165445d734e281ba5d036d4799a65a4ebc468d49cbcd368d66aac') + +prepare() { + cd "$srcdir"/File-Slurp-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/File-Slurp-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/File-Slurp-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-file-tail/PKGBUILD b/perl-file-tail/PKGBUILD new file mode 100644 index 0000000..18ddb73 --- /dev/null +++ b/perl-file-tail/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-tail +pkgver=1.3 +_debver=$pkgver +_debrel=6 +_ddir=File-Tail-$pkgver +pkgrel=1 +pkgdesc="Perl extension for reading from continously updated files" +arch=('any') +license=('GPL-1') +url='https://metacpan.org/release/File-Tail' +options=(!emptydirs) +depends=('perl') +makedepends=('quilt') +source=("https://search.cpan.org/CPAN/authors/id/M/MG/MGRABNAR/File-Tail-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libf/libfile-tail-perl/libfile-tail-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('942f87880d0d8b79c521248cdbc449daafbd117a2a3700e2dbcc7fe7a6046e5783e8616b6c32de513f85a56663b63c4dde217e9e124216ba6a605c645db2bde9' + '681a614a8b6ced5dc1de591e912da04974d2aa2d2dedc3adbfbc30abbe3398ca189f28fec878af11dd222b87335b2f6ff474b2311cc090c3cad8c41702131241') + +prepare() { + cd "$srcdir/$_ddir" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +) diff --git a/perl-file-which/PKGBUILD b/perl-file-which/PKGBUILD new file mode 100644 index 0000000..24fd003 --- /dev/null +++ b/perl-file-which/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-file-which +_realname=File-Which +pkgver=1.27 +pkgrel=1 +pkgdesc="Portable implementation of which" +arch=('any') +url='https://metacpan.org/dist/$_realname' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/$_realname-$pkgver.tar.gz") +sha512sums=('8a6164c4af915e93924b1d62864e492b1c5067856e505c50b9a5cce0600d73bdcda5f7e35a9f37134d9e89949b45bbd0a5426cb56121604aea1a3cfe48d55e5c') + +build() { + cd $_realname-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd $_realname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-font-ttf/PKGBUILD b/perl-font-ttf/PKGBUILD new file mode 100644 index 0000000..7698541 --- /dev/null +++ b/perl-font-ttf/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-font-ttf +pkgver=1.06 +pkgrel=2 +pkgdesc="Font::TTF - Perl module for TrueType font hacking" +arch=(any) +url='https://metacpan.org/release/Font-TTF' +license=(Artistic-2.0) +depends=(perl-io-string) +options=(!emptydirs) +source=(https://cpan.metacpan.org/authors/id/B/BH/BHALLISSY/Font-TTF-$pkgver.tar.gz) +sha512sums=('2995544511e4cf9b1aa9a900b2272bf63a137fbbb752f2501d66c057b8272f7eb6f84326ed6121ffcbeb210f8f38b9219f59420a5a4b6664ce07aecc758ea029') + +build() { + cd Font-TTF-$pkgver + # Install module in vendor directories. + PERL_MM_USE_DEFAULT=1 perl 'Makefile.PL' INSTALLDIRS='vendor' + make +} + +check() { + cd Font-TTF-$pkgver + make test +} + +package() { + cd Font-TTF-$pkgver + make install DESTDIR=$pkgdir + rm -r $pkgdir/usr/lib + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-glib-object-introspection/PKGBUILD b/perl-glib-object-introspection/PKGBUILD new file mode 100644 index 0000000..a0648af --- /dev/null +++ b/perl-glib-object-introspection/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=perl-glib-object-introspection +pkgver=0.049 +pkgrel=2 +pkgdesc="Dynamically create Perl language bindings" +arch=('i686' 'x86_64') +url="https://metacpan.org/release/Glib-Object-Introspection" +license=('LGPL-2.1') +makedepends=('gobject-introspection' 'perl-extutils-depends' 'perl-extutils-pkgconfig' 'perl-cairo-gobject') +depends=('glib-perl' 'gobject-introspection-runtime') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/X/XA/XAOC/Glib-Object-Introspection-${pkgver}.tar.gz") +sha512sums=('fa927661dc761bfae9dba87e1e2d519b10c3aac4d6dcea37764972a0413a4f5025a12df640d66928b631c2933d4b0e6d02b559ea2c1eaa38fae6f7a9d98fe322') + +build() { + cd "Glib-Object-Introspection-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL + make +} + +check() { + cd "Glib-Object-Introspection-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 + make test +} + +package() { + cd "Glib-Object-Introspection-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + make pure_install INSTALLDIRS=vendor DESTDIR="${pkgdir}" + # Delete unuseful files + find "${pkgdir}" -name '.packlist' -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-gtk/PKGBUILD b/perl-gtk/PKGBUILD new file mode 100644 index 0000000..77d94a3 --- /dev/null +++ b/perl-gtk/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=perl-gtk +pkgver=0.038 +pkgrel=1 +pkgdesc="Perl interface to the 3.x series of the GTK+ toolkit" +arch=('any') +url="https://metacpan.org/release/Gtk3" +license=('LGPL-2.1') +checkdepends=('ttf-dejavu' 'xenocara-server-xvfb') +depends=('gtk' 'perl-cairo-gobject' 'perl-glib-object-introspection') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/X/XA/XAOC/Gtk3-${pkgver}.tar.gz") +sha512sums=('2289184a25deec342b9519028cc5ebb3a66137d7891366485e4b6a1ef52a4a28b5ba8083a317a56664d4ea6eb1bc0619477d1ca169baf79b868467fba27f82bf') + +build() { + cd "Gtk3-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL + make +} + +check() { + cd "Gtk3-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 + xvfb-run -a -s "-extension GLX -screen 0 1280x1024x24" make test +} + +package() { + cd "Gtk3-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + make pure_install INSTALLDIRS=vendor DESTDIR="${pkgdir}" + # Delete unuseful files + find "${pkgdir}" -name '.packlist' -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-guard/LICENSE b/perl-guard/LICENSE new file mode 100644 index 0000000..ffec677 --- /dev/null +++ b/perl-guard/LICENSE @@ -0,0 +1,91 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Guard +Upstream-Contact: Marc Lehmann +Source: https://metacpan.org/release/Guard + +Files: * +Copyright: 2008-2009, Marc Lehmann +License: Artistic or GPL-1+ +Comment: Because the upstream Guard package does not include a proper + copyright statement, the upstream author was contacted via private e-mail. + . + Delivered-To: jonathan.i.yu@gmail.com + Received: by 10.204.79.82 with SMTP id o18cs454176bkk; + Sat, 11 Jul 2009 07:41:29 -0700 (PDT) + Received: by 10.204.57.13 with SMTP id a13mr3083366bkh.205.1247323289167; + Sat, 11 Jul 2009 07:41:29 -0700 (PDT) + Return-Path: + Received: from mail.nethype.de (mail.nethype.de [78.47.73.129]) + by mx.google.com with ESMTP id 26si4485612fxm.94.2009.07.11.07.41.28; + Sat, 11 Jul 2009 07:41:29 -0700 (PDT) + Received-SPF: pass (google.com: domain of root@schmorp.de designates 78.47.73.129 + as permitted sender) client-ip=78.47.73.129; + Authentication-Results: mx.google.com; spf=pass (google.com: domain of root@schmorp.de + designates 78.47.73.129 as permitted sender) smtp.mail=root@schmorp.de + Received: from [10.0.0.5] (helo=doom.schmorp.de) + by mail.nethype.de with esmtp (Exim 4.69) + (envelope-from ) + id 1MPdlY-00067t-Ck; Sat, 11 Jul 2009 14:41:28 +0000 + Received: from [10.0.0.1] (helo=cerebro.laendle) + by doom.schmorp.de with esmtp (Exim 4.69) + (envelope-from ) + id 1MPdlY-0007MR-2u; Sat, 11 Jul 2009 14:41:28 +0000 + Received: from root by cerebro.laendle with local (Exim 4.69) + (envelope-from ) + id 1MPdlY-0001ot-1c; Sat, 11 Jul 2009 16:41:28 +0200 + Date: Sat, 11 Jul 2009 16:41:28 +0200 + From: Marc Lehmann + To: Jonathan Yu + Cc: Debian Perl List + Subject: Re: Coro and Guard Copyright Information + Message-ID: <20090711144127.GC5477@schmorp.de> + References: + MIME-Version: 1.0 + Content-Type: text/plain; charset=us-ascii + Content-Disposition: inline + In-Reply-To: + X-PGP: "1024D/DA743396 1999-01-26 Marc Alexander Lehmann + Key fingerprint = 475A FE9B D1D4 039E + 01AC C217 A1E8 0270 DA74 3396" + . + On Fri, Jul 10, 2009 at 11:54:36PM -0400, Jonathan Yu wrote: + > I'm packaging your Perl modules Coro (and thus Guard) for Debian and + . + Fascinating! + . + > was wondering if you could give us a copyright statement for both of + > these. As you might remember from my previous bug reports (don't + > worry, I won't bother you with one this time), Debian needs both a + > copyright and license statement to redistribute modules. + . + To the best of my knowledge, and unless otherwise stated, all the files + are Copyright Marc Alexander Lehmann , + 2001-2009 for Coro, 2008-2009 for Guard. + . + (see also conftest.c, which is lgpl 2.1 or later) + . + > I have noted libcoro's copyright (per Coro/libcoro/LICENSE), but Coro + . + The actual files have been under a slightly different license for a while + - I updated the LICENSE file to be consistent, thanks for reminding me :) + +Files: debian/* +Copyright: 2009, Jonathan Yu + 2011, Fabrizio Regalli +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-guard/PKGBUILD b/perl-guard/PKGBUILD new file mode 100644 index 0000000..03785cc --- /dev/null +++ b/perl-guard/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=perl-guard +pkgver=1.023 +pkgrel=1 +pkgdesc="Perl module for safe cleanup blocks" +arch=('i686' 'x86_64') +url='https://metacpan.org/release/Guard' +license=('GPL-1') +makedepends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/Guard-${pkgver}.tar.gz" + "LICENSE") +sha512sums=('a991d6f9ebfadffbcabaccc45d964c40c46c7212c6de089f0c496040e151236c59cc7dd7076464f0ef96936f2c4cd462fbedf8e729d522f1090682eda976676f' + 'c7e16e72ddf0df73ab28fd393f2e32c56a9a96938ee9ed302ab10870ce3e95d848b7cc93a894277a417a532937a6613a1174841f4904aac7c83828fd77daa2dc') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor" \ + PERL_MB_OPT="--installdirs vendor" \ + MODULEBUILDRC=/dev/null + + cd "${srcdir}/Guard-${pkgver}" + /usr/bin/perl Makefile.PL + make + ) +} + +package() { + cd "${srcdir}/Guard-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-html-parser/COPYING b/perl-html-parser/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-html-parser/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-html-parser/PKGBUILD b/perl-html-parser/PKGBUILD new file mode 100644 index 0000000..94ba576 --- /dev/null +++ b/perl-html-parser/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=perl-html-parser +pkgver=3.72 +_debver=3.72 +_debrel=5 +pkgrel=3 +pkgdesc="Perl HTML parser class" +arch=('i686' 'x86_64') +license=('GPL-1') +url="https://search.cpan.org/dist/HTML-Parser/" +depends=('perl-html-tagset') +makedepends=('quilt') +checkdepends=('perl-test-pod') +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/G/GA/GAAS/HTML-Parser-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libh/libhtml-parser-perl/libhtml-parser-perl_$_debver-$_debrel.debian.tar.xz + COPYING) +sha512sums=('9fded69219791af085018ffbe6737e74e370c543af52aa221aec174daf52d1b8d3cdd07f025176c0212ae572a924555262f2eefc73781f82cdb7d9cff58ae716' + 'f29914c9e20b3844af4a5e46e9a4a8788bc38bab86368697207dc6f94ec647e04527c206233d0d6bf62403859e25a20f048105fbb6cdf13d980c7cd41855be42' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +prepare() { + cd HTML-Parser-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/debian_examples_location.patch || true + + quilt push -av + fi +} + +build() { + cd HTML-Parser-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd HTML-Parser-${pkgver} + make test +} + +package() { + cd HTML-Parser-${pkgver} + make install DESTDIR="${pkgdir}" + install -Dm644 ${srcdir}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/perl-html-tagset/COPYING b/perl-html-tagset/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-html-tagset/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-html-tagset/PKGBUILD b/perl-html-tagset/PKGBUILD new file mode 100644 index 0000000..5695ee6 --- /dev/null +++ b/perl-html-tagset/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. +# Conributor (Arch): kevin + +pkgname=perl-html-tagset +_realname=HTML-Tagset +pkgver=3.20 +_debver=3.20 +_debrel=4 +pkgrel=5 +pkgdesc="Data tables useful in parsing HTML" +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/${_realname}/" +depends=('perl>=5.10.0') +makedepends=('quilt') +replaces=('html-tagset') +provides=('html-tagset') +options=(!emptydirs) +source=(https://www.cpan.org/authors/id/P/PE/PETDANCE/${_realname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libh/libhtml-tagset-perl/libhtml-tagset-perl_$_debver-$_debrel.debian.tar.xz + COPYING) +sha512sums=('b53c099a96b493c3d03c51fcf3d58dd3b830069583f2d07477175ea234c43e91a0b380c82a71126f971faf2768e832af34967d08d899db7653d65613d6530072' + '1525bc428150c3503a2a78f4ace395e16abe2c024e799ae9dcc80c3aad7168b2c7b66f69e12a18632295002668fb2d97846db4c3958ef01061c7708f4ea447b4' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +prepare() { + cd ${srcdir}/${_realname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${srcdir}/${_realname}-${pkgver} + # install module in vendor directories. + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd ${srcdir}/${_realname}-${pkgver} + make test +} + +package() { + cd ${srcdir}/${_realname}-${pkgver} + make install DESTDIR=${pkgdir} + install -Dm644 ${srcdir}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} + +# vim: ts=2 sw=2 et ft=sh diff --git a/perl-http-cookies/PKGBUILD b/perl-http-cookies/PKGBUILD new file mode 100644 index 0000000..e0822a9 --- /dev/null +++ b/perl-http-cookies/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-http-cookies +pkgver=6.08 +pkgrel=1 +pkgdesc="HTTP cookie jars" +arch=('any') +url="https://search.cpan.org/dist/HTTP-Cookies" +license=('GPL-1') +depends=('perl' 'perl-http-date' 'perl-http-message') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/HTTP-Cookies-$pkgver.tar.gz) +sha512sums=('ddcbe61df3e419c3e29ee60a360d5d622f49281db612cfdb586508f50351cdfa3042c5b56e29648a776cd636919b5a4e26d5f9176a2d09a76c23b5acdef5bba9') + +build() { + cd HTTP-Cookies-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd HTTP-Cookies-$pkgver + make test +} + +package() { + cd HTTP-Cookies-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-http-daemon/PKGBUILD b/perl-http-daemon/PKGBUILD new file mode 100644 index 0000000..a35f096 --- /dev/null +++ b/perl-http-daemon/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=perl-http-daemon +pkgver=6.12 +pkgrel=1 +pkgdesc="Simple http server class" +arch=('any') +url='https://metacpan.org/pod/HTTP::Daemon' +license=('GPL-1') +depends=('perl' 'perl-http-date' 'perl-http-message' 'perl-lwp-mediatypes') +makedepends=('perl-module-build-tiny') +checkdepends=('perl-test-needs') +options=('!emptydirs') +source=(https://cpan.metacpan.org/authors/id/O/OA/OALDERS/HTTP-Daemon-${pkgver}.tar.gz) +sha512sums=('83a8b868162dfa1be66d4267e99af1111d28122c793e89d905243c175617c22ceb66f88b6ea54c29e7b131c26668776ab24cf671c4cc6c1c8810505e0f072596') + +build() { + cd "${srcdir}/HTTP-Daemon-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd "${srcdir}/HTTP-Daemon-${pkgver}" + make test +} + +package() { + cd "${srcdir}/HTTP-Daemon-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 LICENCE ${pkgdir}/usr/share/licenses/${pkgname}/LICENCE +} + +# vim: ts=2 sw=2 et: diff --git a/perl-http-date/PKGBUILD b/perl-http-date/PKGBUILD new file mode 100644 index 0000000..7579cff --- /dev/null +++ b/perl-http-date/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-http-date +pkgver=6.05 +pkgrel=1 +pkgdesc="Date conversion routines" +arch=('any') +url="https://search.cpan.org/dist/HTTP-Date" +license=('GPL-1') +depends=('perl-timedate') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/HTTP-Date-$pkgver.tar.gz) +sha512sums=('08a427a860161cd0d7a34a4fa3eb6bf6439c2504478a308ff560de0e6620c20df46f004cfcb719e3d19e35fdb650728d6983ffce1423f4d9da06f91d85c7b927') + +build() { + cd HTTP-Date-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd HTTP-Date-$pkgver + make test +} + +package() { + cd HTTP-Date-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-http-message/PKGBUILD b/perl-http-message/PKGBUILD new file mode 100644 index 0000000..08bf452 --- /dev/null +++ b/perl-http-message/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=perl-http-message +pkgver=6.24 +pkgrel=1 +pkgdesc="HTTP style messages" +arch=('any') +url='https://search.cpan.org/dist/HTTP-Message' +license=('GPL-1') +options=('!emptydirs') +depends=('perl' 'perl-encode-locale' 'perl-http-date' 'perl-lwp-mediatypes' 'perl-uri' + 'perl-io-html') +makedepends=('perl-try-tiny') +conflicts=('perl-libwww<6') +source=("https://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/HTTP-Message-$pkgver.tar.gz") +sha512sums=('c01625a7736f64fbed2da6482c5be74bbc85d4cd41de26b893f59dfb9e9f5a9b11c87ecc0290766d8ffa8c74969e9fea182a1b7f2760ec63e7f6e1e63f183cda') + +build() { + cd HTTP-Message-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd HTTP-Message-$pkgver + make test +} + +package() { + cd HTTP-Message-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-http-negotiate/COPYING b/perl-http-negotiate/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-http-negotiate/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-http-negotiate/PKGBUILD b/perl-http-negotiate/PKGBUILD new file mode 100644 index 0000000..807ee42 --- /dev/null +++ b/perl-http-negotiate/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-http-negotiate +pkgver=6.01 +pkgrel=3 +pkgdesc="Choose a variant to serve" +arch=('any') +url="https://search.cpan.org/dist/HTTP-Negotiate" +license=('GPL-1') +depends=('perl' 'perl-http-message') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Negotiate-$pkgver.tar.gz + COPYING) +sha512sums=('2651010f0d989fb255d37a0e4585de4779edcccd59fcad7d7f5ccc7d2c2ec420060324beebc880664d6c0d29193ce62f2d21cb6332bbfa0a3adacfa632876617' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd HTTP-Negotiate-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd HTTP-Negotiate-$pkgver + make test +} + +package() { + cd HTTP-Negotiate-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 $srcdir/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-image-exiftool/LICENSE b/perl-image-exiftool/LICENSE new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-image-exiftool/LICENSE @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-image-exiftool/PKGBUILD b/perl-image-exiftool/PKGBUILD new file mode 100644 index 0000000..9d0dc62 --- /dev/null +++ b/perl-image-exiftool/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-image-exiftool +_srcname=Image-ExifTool +pkgver=12.29 +pkgrel=1 +pkgdesc='Reader and rewriter of EXIF informations that supports raw files' +arch=('any') +url='https://search.cpan.org/perldoc?exiftool' +license=('GPL-1') +depends=('perl') +optdepends=('perl-archive-zip: Support for ZIP-files, including EPUB') +options=('!emptydirs') +source=(https://exiftool.org/${_srcname}-$pkgver.tar.gz + LICENSE) +sha512sums=('a885848eee4322d9b03c6c03a428c44cd0607f256657652fd7ea2940999216c0b20f3e5170d33cc62da55ccc01ade7b4deb81b871eda70c73f598536b5fe0ff9' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "${srcdir}/${_srcname}-${pkgver}" + # install module in vendor directories. + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}/${_srcname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -dm755 "$pkgdir/usr/share/$pkgname" + cp -r fmt_files config_files arg_files "$pkgdir/usr/share/$pkgname" + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-inc-latest/PKGBUILD b/perl-inc-latest/PKGBUILD new file mode 100644 index 0000000..bdc87b9 --- /dev/null +++ b/perl-inc-latest/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=perl-inc-latest +pkgver=0.500 +pkgrel=2 +pkgdesc="Use modules bundled in inc/ if they are newer than installed ones" +arch=('any') +url='https://metacpan.org/pod/inc::latest' +license=('Apache-2.0') +depends=('perl') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN/inc-latest-${pkgver}.tar.gz") +sha512sums=('b312d1dfce963322796bc0127f0ecd82c12baacf9e5df40d9acc093221edd80f3696ce6d9f185ed24b21983147363d1d0ff3e273b8b5ce7559a6f16983a1385c') + +build() { + cd "inc-latest-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "inc-latest-${pkgver}" + make install DESTDIR="${pkgdir}" + install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-io-dirent/LICENSE b/perl-io-dirent/LICENSE new file mode 100644 index 0000000..c6de6c8 --- /dev/null +++ b/perl-io-dirent/LICENSE @@ -0,0 +1,16 @@ +This is the debian package for the IO-Dirent module. +It was created by Ludovic Drolez using dh-make-perl. + +It was downloaded from http://search.cpan.org/~scottw/IO-Dirent-0.04/ + +The upstream author is: Scott Wiersdorf, + +Copyright: + + Copyright 2002 Scott Wiersdorf. + + This library is free software; you can redistribute it and/or modify + it under the terms of the Perl Artistic License. + +On Debian GNU/Linux systems, the complete text of the Artistic +License can be found in `/usr/share/common-licenses/Artistic'. diff --git a/perl-io-dirent/PKGBUILD b/perl-io-dirent/PKGBUILD new file mode 100644 index 0000000..31557fc --- /dev/null +++ b/perl-io-dirent/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-io-dirent +pkgver=0.05 +pkgrel=1 +pkgdesc='Perl IO::Dirent module - Access to dirent structs returned by readdir' +arch=('i686' 'x86_64') +license=('GPL-1') +url='https://search.cpan.org/~scottw/IO-Dirent/' +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/S/SC/SCOTTW/IO-Dirent-$pkgver.tar.gz" + "LICENSE") +sha512sums=('62db71138390f30d619ccbff7bcd16abce79b7b08fe50b5252b951d2291e5ea65f8c293286394cf091ded172331a5a7ec62344efa3d4ebcd1312804e09625be1' + '9c4db4094b9ae4597182a41a07071e482c41216a270df47757e4bebadde2dd5e034d722275d640709995b9b3c6643d6f70a61ab0d5d7b23521f668c46b38d3bc') + +build() { + cd IO-Dirent-$pkgver + USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd IO-Dirent-$pkgver + make install DESTDIR="$pkgdir/" + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-io-html/PKGBUILD b/perl-io-html/PKGBUILD new file mode 100644 index 0000000..117db66 --- /dev/null +++ b/perl-io-html/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-io-html +pkgver=1.001 +pkgrel=2 +pkgdesc="Open an HTML file with automatic charset detection" +arch=('any') +url='https://search.cpan.org/dist/IO-HTML' +depends=('perl') +license=('GPL-1') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/C/CJ/CJM/IO-HTML-$pkgver.tar.gz) +sha512sums=('fd3780c854e2e4003c80d2399987bbde2ebcc8f110915a74326660036d0860f79123f924c3200bcfa163363d74f53ca742bde973549e5a554e63648ed55dac52') + +build() { + export PERL_MM_USE_DEFAULT=1 PERL_MM_OPT="INSTALLDIRS=vendor" \ + PERL_MB_OPT="--installdirs vendor" + cd IO-HTML-$pkgver + perl Makefile.PL + make +} + +check() { + cd IO-HTML-$pkgver + make test +} + +package() { + cd IO-HTML-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/$pkgname/LICENSE +} diff --git a/perl-io-multiplex/LICENSE b/perl-io-multiplex/LICENSE new file mode 100644 index 0000000..715e8fe --- /dev/null +++ b/perl-io-multiplex/LICENSE @@ -0,0 +1,34 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: IO-Multiplex +Upstream-Contact: Rob Brown +Source: https://metacpan.org/release/IO-Multiplex + +Files: * +Copyright: 1999, Bruce J Keeler + 2011-2008, Rob Brown +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2003, Luca Filipozzi + 2004, Gunnar Wolf + 2006, 2007, 2008, gregor herrmann + 2006, Russ Allbery + 2008, Ansgar Burchardt + 2011-2015, Salvatore Bonaccorso +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-io-multiplex/PKGBUILD b/perl-io-multiplex/PKGBUILD new file mode 100644 index 0000000..c22f799 --- /dev/null +++ b/perl-io-multiplex/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-io-multiplex +pkgver=1.16 +pkgrel=1 +pkgdesc="Perl/CPAN Module IO::Multiplex : Manage Input Output on many file handles" +arch=('any') +url="https://search.cpan.org/dist/IO-Multiplex/" +license=('GPL-1') +source=("https://search.cpan.org/CPAN/authors/id/B/BB/BBB/IO-Multiplex-$pkgver.tar.gz" + "LICENSE") +sha512sums=('695462be217a107f734e214d2f0a00800962abac24cf4e30272376f5effa25584bc458377feed16b5cc7bab5858c00e547dc97d02962e57b2b8fa6e55df20fa6' + '9bb81a136f803ba39a64fce9c7a2393575460d32a80db86a7b2085fbba6a9f0df41b1a2c180a2c32f9081b903cf0c7f2c1d4b5e0f3bde2a372d9eebc6a2dd9a8') + +build() { + cd "$srcdir"/IO-Multiplex-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/IO-Multiplex-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-io-socket-inet6/COPYING b/perl-io-socket-inet6/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-io-socket-inet6/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-io-socket-inet6/PKGBUILD b/perl-io-socket-inet6/PKGBUILD new file mode 100644 index 0000000..a4cc408 --- /dev/null +++ b/perl-io-socket-inet6/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname='perl-io-socket-inet6' +pkgver=2.72 +pkgrel=2 +pkgdesc="Object interface for AF_INET|AF_INET6 domain sockets" +arch=('any') +license=('GPL-1') +options=('!emptydirs') +depends=('perl-socket6>=0.12') +makedepends=() +url='https://search.cpan.org/dist/IO-Socket-INET6' +source=("https://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/IO-Socket-INET6-$pkgver.tar.gz" + 'COPYING') +sha512sums=('c6dc0bbcc81682d317597de26d5023de84781e4bd2af224145cc4980db7fcbc93295a7d0a80c1eaa649c6aebf4057d0b0159f47e6a6379d4b545b49305f28a37' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') +_distdir="IO-Socket-INET6-$pkgver" + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor" \ + PERL_MB_OPT="--installdirs vendor" \ + MODULEBUILDRC=/dev/null + + cd "$_distdir" + /usr/bin/perl Makefile.PL + make + ) +} + +check() { + cd "$_distdir" + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" + make test + ) +} + +package() { + cd "$_distdir" + make DESTDIR="$pkgdir" install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 $srcdir/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +# Local Variables: +# mode: shell-script +# sh-basic-offset: 2 +# End: +# vim:set ts=2 sw=2 et: diff --git a/perl-io-socket-ssl/COPYING b/perl-io-socket-ssl/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-io-socket-ssl/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-io-socket-ssl/PKGBUILD b/perl-io-socket-ssl/PKGBUILD new file mode 100644 index 0000000..b273225 --- /dev/null +++ b/perl-io-socket-ssl/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=perl-io-socket-ssl +pkgver=2.067 +pkgrel=1 +pkgdesc="Nearly transparent SSL encapsulation for IO::Socket::INET" +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/IO-Socket-SSL/" +depends=('perl-net-ssleay' 'perl' 'perl-uri') +checkdepends=('perl-io-socket-inet6') +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/S/SU/SULLR/IO-Socket-SSL-${pkgver}.tar.gz + COPYING) +sha512sums=('b7b9edc470f2283c363a6296d3ce23f8754cc1b1a763329ccc8a0bc81dca7ffbaf9a833fc8ac31e62f5f72cab7c689ea0d4d0e293f75fe176d1b5c71ed723516' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd IO-Socket-SSL-${pkgver} + yes | perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd IO-Socket-SSL-${pkgver} + make test || warning "TLS 1.3 related errors" +} + +package() { + cd IO-Socket-SSL-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 ${srcdir}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/perl-io-string/COPYING b/perl-io-string/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-io-string/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-io-string/PKGBUILD b/perl-io-string/PKGBUILD new file mode 100644 index 0000000..cb9ad22 --- /dev/null +++ b/perl-io-string/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-io-string +pkgver=1.08 +pkgrel=10 +pkgdesc="IO::File interface for in-core strings" +arch=(i686 x86_64) +url='https://search.cpan.org/dist/IO-String' +license=(GPL-1) +depends=(perl) +options=(!emptydirs) +source=(https://www.cpan.org/authors/id/G/GA/GAAS/IO-String-$pkgver.tar.gz + COPYING) +sha512sums=('0aae1711a2bad2a239d90ca7ceb685938e509dbefb05d6c6717796a04ce1956006f67a7a203eaa9d9718b77b5cea9b7d493091b88d9542068f0829aae3a37376' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd IO-String-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd IO-String-$pkgver + make install DESTDIR=$pkgdir + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 ../COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-io-stringy/PKGBUILD b/perl-io-stringy/PKGBUILD new file mode 100644 index 0000000..b5ce86a --- /dev/null +++ b/perl-io-stringy/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=perl-io-stringy +pkgver=2.111 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="I/O on in-core objects like strings/arrays" +arch=('any') +url='https://metacpan.org/pod/IO::Stringy' +license=('GPL-1') +depends=('perl') +makedepends=('quilt') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/D/DS/DSKOLL/IO-stringy-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/i/io-stringy/io-stringy_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('9da8fb03945bc4a59cea3b3b2e22b15d56b133470e581d1cb03920bda2b4953e3c9e4a25d095ed8a384efb5a4c58db437c92cca6a81d583791191f1a37691a4a' + '1aeb1a7adcdcf36caa237cea5f1834434f1518ed4c231500d3eb0b8b2b6b8580743dcdbc545e5ce9ef187a0ce85034f632e96f61657f520575b52d783e79ee11') + +prepare() { + cd "${srcdir}/IO-stringy-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/IO-stringy-${pkgver}" + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}/IO-stringy-${pkgver}" + make install DESTDIR="${pkgdir}" + + find "${pkgdir}" -name '.packlist' -delete + find "${pkgdir}" -name '*.pod' -delete + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-io-tty/PKGBUILD b/perl-io-tty/PKGBUILD new file mode 100644 index 0000000..c525d5d --- /dev/null +++ b/perl-io-tty/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=perl-io-tty +pkgver=1.15 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Provide an interface to TTYs and PTYs" +arch=('i686' 'x86_64') +url='https://search.cpan.org/dist/IO-Tty/' +license=('GPL-1') +depends=('glibc') +makedepends=('quilt') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/T/TO/TODDR/IO-Tty-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libi/libio-pty-perl/libio-pty-perl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('55329833d2e5ac426c0b69224e0af41d86c8dfd935c3698eb15800f0b7f48610651403ea54d9c7cad2f71b7c1080e957fa3706912680204f9b83c801095d2648' + '3bb8061f5dfe6018d8c4da7710ae6d4b6977f365dc17a1bb65713658d2a32fa0a638ef15a5b17f01e7d75635d04a6238989d6545c02cff965b41003a8e546109') + +prepare() { + cd "$srcdir"/IO-Tty-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/IO-Tty-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/IO-Tty-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-ipc-run/PKGBUILD b/perl-ipc-run/PKGBUILD new file mode 100644 index 0000000..a9e05ca --- /dev/null +++ b/perl-ipc-run/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=perl-ipc-run +pkgver=20200505.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="IPC::Run - system() and background procs w/ piping, redirs, ptys" +arch=('any') +url='https://search.cpan.org/dist/IPC-Run' +license=('GPL-2') +# IPC::Run depends on IO::Pty which is provided by perl-io-tty +depends=('perl' 'perl-io-tty') +makedepends=('quilt') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/T/TO/TODDR/IPC-Run-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libi/libipc-run-perl/libipc-run-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('6f2e0cdbd66741a5185aa6f79c5d23189f6527e319ead385a033e482abed439a7e7fb1bbb7fa83c91c7b2971b31313a99b2b6510cc6aad3516ae6524a196d57c' + '8958d2e36d41c419ae978e9cb5429855f370bbed8de8d840940b29fa86c34b8fd7a64904e68700f8e9dff92ef422a05a0223620aec8e62bf94474e5f598acc21') + +prepare() { + cd "$srcdir"/IPC-Run-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/IPC-Run-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/IPC-Run-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name perllocal.pod -delete + find "$pkgdir" -name .packlist -delete + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-ipc-run3/PKGBUILD b/perl-ipc-run3/PKGBUILD new file mode 100644 index 0000000..1360d04 --- /dev/null +++ b/perl-ipc-run3/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. +# Generator (Arch): CPANPLUS::Dist::Arch 1.27 + +pkgname='perl-ipc-run3' +_dist=IPC-Run3 +pkgver=0.048 +pkgrel=1 +pkgdesc="run a subprocess with input/ouput redirection" +arch=('any') +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +url='https://search.cpan.org/dist/IPC-Run3' +source=("https://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/${_dist}-${pkgver}.tar.gz") +sha512sums=('50432850d8dccd2e59aa6684d34f3e3242fd7df3eb4d9a5eb02dae389aa46b5fd68cc54114a157c3fe99956e68e74d575ab3db5009b7bf7d5c325f1f109b1262') + +build() { + cd "${srcdir}/${_dist}-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL + make +} + +package() { + cd "${srcdir}/${_dist}-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-ipc-system-simple/PKGBUILD b/perl-ipc-system-simple/PKGBUILD new file mode 100644 index 0000000..5a4bd4f --- /dev/null +++ b/perl-ipc-system-simple/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=perl-ipc-system-simple +pkgver=1.25 +pkgrel=1 +pkgdesc="Run commands simply, with detailed diagnostics" +arch=('any') +url='https://search.cpan.org/dist/IPC-System-Simple' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/P/PJ/PJF/IPC-System-Simple-$pkgver.tar.gz") +sha512sums=('fda275786605eb80acaa6062cc51c32aa0e84f150e7ca7afcfe874f088ce7b8f9a97669e91bec24fdb05426db8b0f05552aa8853e44b08996e625281d1892f72') + +build() { + cd IPC-System-Simple-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd IPC-System-Simple-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-json-xs/PKGBUILD b/perl-json-xs/PKGBUILD new file mode 100644 index 0000000..52ad008 --- /dev/null +++ b/perl-json-xs/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-json-xs +pkgver=4.0 +pkgrel=4 +pkgdesc="JSON::XS - JSON serialising/deserialising, done correctly and fast" +url='https://search.cpan.org/dist/JSON-XS/' +license=('GPL-1') +arch=('i686' 'x86_64') +depends=('perl' 'perl-common-sense' 'perl-types-serialiser') +makedepends=('perl-canary-stability') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/JSON-XS-$pkgver.tar.gz) +sha512sums=('83b8163ee0fa18e4f768de2dc16c66bd31f9e969917c852b66d7a8d630432792f6a3b4cbbd9d72b593b3b146c593344612cf3d5e58797f6f27f79160f3e9aea1') + +build() { + cd "$srcdir"/JSON-XS-$pkgver + PERL_CANARY_STABILITY_NOPROMPT=1 \ + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/JSON-XS-$pkgver + make DESTDIR="$pkgdir" install + + find "$pkgdir" -name '.packlist' -delete && \ + find "$pkgdir" -name '*.pod' -delete + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-json/COPYING b/perl-json/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-json/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-json/PKGBUILD b/perl-json/PKGBUILD new file mode 100644 index 0000000..daa9f64 --- /dev/null +++ b/perl-json/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-json +pkgver=4.03 +pkgrel=1 +pkgdesc="JSON (JavaScript Object Notation) encoder/decoder" +arch=('any') +url="https://metacpan.org/pod/JSON" +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI/JSON-${pkgver}.tar.gz" + 'COPYING') +sha512sums=('5910818d3a866a50ea655da7d9ae617f21d3bc7e8511d35cff96ec4ea04fe553638c7843422cf2d00c37835a6d9f931b1defd224f57c40a3e52d7cef4684ef8c' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "${srcdir}/JSON-$pkgver" + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}/JSON-$pkgver" + make install DESTDIR="${pkgdir}" + find "${pkgdir}" -name '.packlist' -delete + find "${pkgdir}" -name '*.pod' -delete + install -D -m644 "${srcdir}/COPYING" "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-lchown/PKGBUILD b/perl-lchown/PKGBUILD new file mode 100644 index 0000000..aa1f362 --- /dev/null +++ b/perl-lchown/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=perl-lchown +pkgver=1.01 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="Library for using the lchown(2) system-call from Perl" +arch=('i686' 'x86_64') +license=('GPL-1') +options=(!emptydirs) +depends=('perl') +makedepends=('perl-module-build') +url='https://metacpan.org/release/Lchown' +source=("https://cpan.metacpan.org/authors/id/N/NC/NCLEATON/Lchown-${pkgver}.tar.gz" + "COPYING::https://metadata.ftp-master.debian.org/changelogs//main/libl/liblchown-perl/liblchown-perl_${_debver}-${_debrel}_copyright") +sha512sums=('f3b7bf7b3b71a7d92449d4ae8249d76b456869e48105db401a49f39f687ee5d97e079485fb2bbaae991a3a27d408959fc132b843c6f69487eeb2958c85f683a8' + '5492d14a0a5a5756a38151b0add341bf69adf2a09b5852bd29eb41c439e5a7d390e32a0d4948b3cb3f88753e9f4249fb54bb994ca04bde8fa80375beb42885f5') + +build() { + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null + cd "${srcdir}/Lchown-${pkgver}" + /usr/bin/perl Build.PL + ./Build +} + +package() { + cd "${srcdir}/Lchown-${pkgver}" + ./Build install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 "${srcdir}/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-libwww/PKGBUILD b/perl-libwww/PKGBUILD new file mode 100644 index 0000000..3df550c --- /dev/null +++ b/perl-libwww/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=perl-libwww +pkgver=6.46 +pkgrel=1 +pkgdesc="The World-Wide Web library for Perl" +arch=('any') +url="https://metacpan.org/release/libwww-perl" +license=('GPL-1') +depends=('perl' 'perl-encode-locale' 'perl-file-listing' + 'perl-html-parser' 'perl-http-cookies' 'perl-http-daemon' + 'perl-http-date' 'perl-http-negotiate' 'perl-lwp-mediatypes' + 'perl-net-http' 'perl-try-tiny' 'perl-uri' 'perl-www-robotrules') +optdepends=('perl-lwp-protocol-https: for https:// url schemes') +checkdepends=('perl-test-fatal' 'perl-test-needs' 'perl-test-requiresinternet') +options=('!emptydirs') +source=(https://cpan.metacpan.org/authors/id/O/OA/OALDERS/libwww-perl-$pkgver.tar.gz) +sha512sums=('ff4b77b3287e17f22ebe8364a7645fec99cfc181a96fb62b63b425c01d5e84e369a12a2c9741cb3ecb612514e873cc2c1af432d7a7feb4dc1ed114eb8f8e033f') + +build() { + cd libwww-perl-$pkgver + perl Makefile.PL --aliases INSTALLDIRS=vendor + make +} + +check() { + cd libwww-perl-$pkgver + make test +} + +package() { + cd libwww-perl-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-linux-desktopfiles/PKGBUILD b/perl-linux-desktopfiles/PKGBUILD new file mode 100644 index 0000000..155f65e --- /dev/null +++ b/perl-linux-desktopfiles/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=perl-linux-desktopfiles +pkgver=0.25 +pkgrel=1 +pkgdesc="Linux::DesktopFiles - a very fast Perl module for parsing the Linux desktop files." +arch=('any') +license=('Artistic-2.0') +options=('!emptydirs') +depends=('perl>=5.14.0') +url='https://metacpan.org/release/Linux-DesktopFiles' +source=("https://cpan.metacpan.org/authors/id/T/TR/TRIZEN/Linux-DesktopFiles-$pkgver.tar.gz") +sha512sums=('a825b014e85e53cf0a142c7d239948f288930627a517444d21a81b8ee898ab3bc1b7dc8864df7b76b2f3a982280ffcb09325f492d0d83950c682110999d5e107') +_distdir="Linux-DesktopFiles-${pkgver}" + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd "$srcdir/$_distdir" + /usr/bin/perl Makefile.PL + make + ) +} + +package() { + cd "$srcdir/$_distdir" + make install + + rm -r "$pkgdir/usr/lib" + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-list-allutils/PKGBUILD b/perl-list-allutils/PKGBUILD new file mode 100644 index 0000000..62c2617 --- /dev/null +++ b/perl-list-allutils/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-list-allutils +pkgver=0.18 +pkgrel=1 +pkgdesc='Perl package that combines List::Util and List::MoreUtils in one bite-sized package' +arch=('any') +url='https://search.cpan.org/dist/List-AllUtils' +license=('Artistic-2.0') +depends=("perl>=5.19.3" "perl-list-moreutils>=0.28" 'perl-list-someutils' 'perl-list-utilsby') +source=(https://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/List-AllUtils-$pkgver.tar.gz) +options=(!emptydirs) +sha512sums=('b2cc560a070f36c339c12c17a17a958f3e9ad40b1981a2631c56c838703c9a9b06fd8bf02ced797cf581215b321faf6c281e5b87368a25515855327bd92db08f') + +build() { + cd List-AllUtils-$pkgver + unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + /usr/bin/perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd List-AllUtils-$pkgver + unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT + make install DESTDIR="$pkgdir" + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-list-moreutils-xs/PKGBUILD b/perl-list-moreutils-xs/PKGBUILD new file mode 100644 index 0000000..2e4982c --- /dev/null +++ b/perl-list-moreutils-xs/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=perl-list-moreutils-xs +pkgver=0.430 +pkgrel=1 +pkgdesc="Provide the stuff missing in List::Util" +url='https://search.cpan.org/dist/List-MoreUtils-XS' +arch=('i686' 'x86_64') +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +source=("https://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/List-MoreUtils-XS-${pkgver}.tar.gz") +sha512sums=('98260b81f03a425bf8c2e0b63bc3a8d360a0aa2e198b2b7faaeaa48684936183018afdd1e6a04bd7e99a7e728d809709c6206ea578dfe7d8d40c5a4e3e4bb405') + +build() { + cd "${srcdir}/List-MoreUtils-XS-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}/List-MoreUtils-XS-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 GPL-1 -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-list-moreutils/PKGBUILD b/perl-list-moreutils/PKGBUILD new file mode 100644 index 0000000..6b02dfc --- /dev/null +++ b/perl-list-moreutils/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=perl-list-moreutils +pkgver=0.430 +pkgrel=1 +pkgdesc="Provide the stuff missing in List::Util" +arch=('any') +license=('GPL-1') +options=('!emptydirs') +depends=('perl-exporter-tiny' 'perl-list-moreutils-xs') +url=https://search.cpan.org/dist/List-MoreUtils +source=("https://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/List-MoreUtils-${pkgver}.tar.gz") +sha512sums=('bc9ff033c12251a6f0899a96da0ec8fc314ddb8d6cdf18c37fe1fdcfc38a4c95ed6f8e006bb124e77d07241ae6754f429bc2041f7772b4acfce9378a21283469') + +build() { + cd "${srcdir}/List-MoreUtils-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}/List-MoreUtils-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 GPL-1 -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-list-someutils/PKGBUILD b/perl-list-someutils/PKGBUILD new file mode 100644 index 0000000..5da7401 --- /dev/null +++ b/perl-list-someutils/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-list-someutils +pkgver=0.58 +pkgrel=1 +pkgdesc="Perl package that combines List::Util and List::MoreUtils in one bite-sized package" +arch=('any') +url='https://search.cpan.org/dist/List-SomeUtils' +license=('GPL-1') +depends=('perl' 'perl-module-implementation') +source=(https://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/List-SomeUtils-$pkgver.tar.gz) +options=(!emptydirs) +sha512sums=('e45f05dbd82914bf804cc1ee00c808b6f8b4f2c80f852db55b3efb13cfe1601c34926e4c7966887a75ef49fd0fb2bd43adf48d12c72687464ece4e2b5a697ff4') + +build() { + cd List-SomeUtils-$pkgver + unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd List-SomeUtils-$pkgver + unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT + make install DESTDIR="$pkgdir" + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-list-utilsby/PKGBUILD b/perl-list-utilsby/PKGBUILD new file mode 100644 index 0000000..ab09a06 --- /dev/null +++ b/perl-list-utilsby/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=perl-list-utilsby +_cpanname=List-UtilsBy +pkgver=0.11 +pkgrel=1 +pkgdesc="Higher-order list utility functions" +arch=('any') +url="https://search.cpan.org/~pevans/$_cpanname" +license=('GPL-1') +depends=("perl>=5.5.0") +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/P/PE/PEVANS/$_cpanname-$pkgver.tar.gz") +sha512sums=('7c912b805e1e21d5d683224b63125bc8385d79c7115d88c08ca28fc1778ec8d22ad4aaf366731df438365a5233108926cbffee284c2e2d37346b47984dbbd4c9') + +# Function to change to the working directory and set +# environment variables to override undesired options. +prepareEnvironment() { + cd "$srcdir/$_cpanname-$pkgver" + export \ + PERL_MM_USE_DEFAULT=1 \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null +} + +build() { + prepareEnvironment + /usr/bin/perl Makefile.PL + make +} + +package() { + prepareEnvironment + make install + + # Remove "perllocal.pod" and ".packlist". + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-locale-gettext/COPYING b/perl-locale-gettext/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-locale-gettext/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-locale-gettext/PKGBUILD b/perl-locale-gettext/PKGBUILD new file mode 100644 index 0000000..15276ce --- /dev/null +++ b/perl-locale-gettext/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=perl-locale-gettext +_realname=Locale-gettext +pkgver=1.07 +pkgrel=3 +pkgdesc="Permits access from Perl to the gettext() family of functions" +arch=('i686' 'x86_64') +license=('GPL-1') +url="https://search.cpan.org/dist/${_realname}/" +depends=('gettext-tiny' 'perl') +options=(!emptydirs) +source=("https://search.cpan.org/CPAN/authors/id/P/PV/PVANDRY/${_realname}-${pkgver}.tar.gz" + 'COPYING') +sha512sums=('d3716a597d586ee2ff29472ca7b13aaf67770299de31e5f12abafebc879bbe4a1e1dbc0025cf4f3dc29992955f26cffc3be387d974c3911af095d5b49e67a1c6' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "${srcdir}/${_realname}-${pkgver}" + + # install module in vendor directories. + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd "${srcdir}/${_realname}-${pkgver}" + + make test +} + +package() { + cd "${srcdir}/${_realname}-${pkgver}" + make install DESTDIR="${pkgdir}" + + install -Dm644 "${srcdir}/COPYING" "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" + + # remove perllocal.pod and .packlist + find "${pkgdir}" -name perllocal.pod -delete + find "${pkgdir}" -name .packlist -delete +} diff --git a/perl-locale-maketext-lexicon/PKGBUILD b/perl-locale-maketext-lexicon/PKGBUILD new file mode 100644 index 0000000..bbe5e51 --- /dev/null +++ b/perl-locale-maketext-lexicon/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-locale-maketext-lexicon +pkgver=1.00 +pkgrel=1 +pkgdesc="Perl/CPAN Module Locale::Maketext::Lexicon : Use other catalog formats in Maketext" +arch=('any') +url='https://search.cpan.org/dist/Locale-Maketext-Lexicon' +license=('Expat') +depends=('perl') +options=(!emptydirs) +source=("https://search.cpan.org/CPAN/authors/id/D/DR/DRTECH/Locale-Maketext-Lexicon-$pkgver.tar.gz") +sha512sums=('b16a4296048aa77809780f6f55e944a67ce3287708bff4fc88d8ee487a6493580a7129a740ee65c6c74fa27e4343964fa8a5269f66fffc308354e723ed4afa60') + +build() { + cd "$srcdir"/Locale-Maketext-Lexicon-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Locale-Maketext-Lexicon-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-lockfile-simple/PKGBUILD b/perl-lockfile-simple/PKGBUILD new file mode 100644 index 0000000..3b14baf --- /dev/null +++ b/perl-lockfile-simple/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=perl-lockfile-simple +_realname=LockFile-Simple +pkgver=0.208 +_debver=$pkgver +_debrel=1.1 +pkgrel=1 +pkgdesc="Perl module for simple advisory file locking" +arch=('any') +license=('GPL-2') +url='https://metacpan.org/dist/LockFile-Simple' +depends=('perl-log-agent' 'perl') +makedepends=('quilt') +options=(!emptydirs) +source=("https://cpan.metacpan.org/authors/id/S/SC/SCHWIGON/lockfile-simple/${_realname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libl/liblockfile-simple-perl/liblockfile-simple-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('a1234d11cdb7bb98bd3d6c2504697187f2f7979c7acd7cfb0398f358f390af7b5eb7d834e83c83b0515199ac8d9a306d7fcdc96df04b0513f821887ad49fd67e' + '40cf7c585bd91fca55e1a29aaa0e488fb2b7c795e51a334968845fa2915a3e86fe7e7f750573c123ed60c07ea9e2b32c6a7ac98b985e36cd9f13a48c1fdf3678') + +prepare() { + cd ${_realname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${_realname}-${pkgver} + # install module in vendor directories. + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ${_realname}-${pkgver} + make install DESTDIR="$pkgdir" + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-log-agent/LICENSE b/perl-log-agent/LICENSE new file mode 100644 index 0000000..1349ef5 --- /dev/null +++ b/perl-log-agent/LICENSE @@ -0,0 +1,226 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Log-Agent +Upstream-Contact: Mark Rogaski +Source: https://metacpan.org/release/Log-Agent + +Files: * +Copyright: + © 1999-2000, Raphael Manfredi + © 2002-2017, Mark Rogaski +License: Artistic-2.0 + +Files: debian/* +Copyright: + © 2001-2003, tony mancill + © 2003-2005, Jay Bonci + © 2009, Ansgar Burchardt + © 2013-2017, Florian Schlichting + © 2015, Lucas Kanashiro +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: Artistic-2.0 + Copyright (c) 2000-2006, The Perl Foundation. + . + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + . + Preamble + . + This license establishes the terms under which a given free software + Package may be copied, modified, distributed, and/or redistributed. + The intent is that the Copyright Holder maintains some artistic + control over the development of that Package while still keeping the + Package available as open source and free software. + . + You are always permitted to make arrangements wholly outside of this + license directly with the Copyright Holder of a given Package. If the + terms of this license do not permit the full use that you propose to + make of the Package, you should contact the Copyright Holder and seek + a different licensing arrangement. + . + Definitions + . + "Copyright Holder" means the individual(s) or organization(s) named in + the copyright notice for the entire Package. + . + "Contributor" means any party that has contributed code or other + material to the Package, in accordance with the Copyright Holder's + procedures. + . + "You" and "your" means any person who would like to copy, distribute, + or modify the Package. + . + "Package" means the collection of files distributed by the Copyright + Holder, and derivatives of that collection and/or of those files. A + given Package may consist of either the Standard Version, or a + Modified Version. + . + "Distribute" means providing a copy of the Package or making it + accessible to anyone else, or in the case of a company or + organization, to others outside of your company or organization. + . + "Distributor Fee" means any fee that you charge for Distributing this + Package or providing support for this Package to another party. It + does not mean licensing fees. + . + "Standard Version" refers to the Package if it has not been modified, + or has been modified only in ways explicitly requested by the + Copyright Holder. + . + "Modified Version" means the Package, if it has been changed, and such + changes were not explicitly requested by the Copyright Holder. + . + "Original License" means this Artistic License as Distributed with the + Standard Version of the Package, in its current version or as it may + be modified by The Perl Foundation in the future. + . + "Source" form means the source code, documentation source, and + configuration files for the Package. + . + "Compiled" form means the compiled bytecode, object code, binary, or + any other form resulting from mechanical transformation or translation + of the Source form. + . + Permission for Use and Modification Without Distribution + . + (1) You are permitted to use the Standard Version and create and use + Modified Versions for any purpose without restriction, provided + that you do not Distribute the Modified Version. + . + Permissions for Redistribution of the Standard Version + . + (2) You may Distribute verbatim copies of the Source form of the + Standard Version of this Package in any medium without + restriction, either gratis or for a Distributor Fee, provided + that you duplicate all of the original copyright notices and + associated disclaimers. At your discretion, such verbatim copies + may or may not include a Compiled form of the Package. + . + (3) You may apply any bug fixes, portability changes, and other + modifications made available from the Copyright Holder. The + resulting Package will still be considered the Standard Version, + and as such will be subject to the Original License. + . + Distribution of Modified Versions of the Package as Source + . + (4) You may Distribute your Modified Version as Source (either gratis + or for a Distributor Fee, and with or without a Compiled form of + the Modified Version) provided that you clearly document how it + differs from the Standard Version, including, but not limited to, + documenting any non-standard features, executables, or modules, + and provided that you do at least ONE of the following: + . + (a) make the Modified Version available to the Copyright Holder + of the Standard Version, under the Original License, so that + the Copyright Holder may include your modifications in the + Standard Version. + (b) ensure that installation of your Modified Version does not + prevent the user installing or running the Standard Version. + In addition, the Modified Version must bear a name that is + different from the name of the Standard Version. + (c) allow anyone who receives a copy of the Modified Version to + make the Source form of the Modified Version available to + others under + (i) the Original License or + (ii) a license that permits the licensee to freely copy, + modify and redistribute the Modified Version using the + same licensing terms that apply to the copy that the + licensee received, and requires that the Source form of + the Modified Version, and of any works derived from it, + be made freely available in that license fees are + prohibited but Distributor Fees are allowed. + . + Distribution of Compiled Forms of the Standard Version or Modified + Versions without the Source + . + (5) You may Distribute Compiled forms of the Standard Version without + the Source, provided that you include complete instructions on + how to get the Source of the Standard Version. Such instructions + must be valid at the time of your distribution. If these + instructions, at any time while you are carrying out such + distribution, become invalid, you must provide new instructions + on demand or cease further distribution. If you provide valid + instructions or cease distribution within thirty days after you + become aware that the instructions are invalid, then you do not + forfeit any of your rights under this license. + . + (6) You may Distribute a Modified Version in Compiled form without + the Source, provided that you comply with Section 4 with respect + to the Source of the Modified Version. + . + Aggregating or Linking the Package + . + (7) You may aggregate the Package (either the Standard Version or + Modified Version) with other packages and Distribute the + resulting aggregation provided that you do not charge a licensing + fee for the Package. Distributor Fees are permitted, and licensing + fees for other components in the aggregation are permitted. The + terms of this license apply to the use and Distribution of the + Standard or Modified Versions as included in the aggregation. + . + (8) You are permitted to link Modified and Standard Versions with + other works, to embed the Package in a larger work of your own, + or to build stand-alone binary or bytecode versions of + applications that include the Package, and Distribute the result + without restriction, provided the result does not expose a direct + interface to the Package. + . + Items That are Not Considered Part of a Modified Version + . + (9) Works (including, but not limited to, modules and scripts) that + merely extend or make use of the Package, do not, by themselves, + cause the Package to be a Modified Version. In addition, such + works are not considered parts of the Package itself, and are + not subject to the terms of this license. + . + General Provisions + . + (10) Any use, modification, and distribution of the Standard or + Modified Versions is governed by this Artistic License. By + using, modifying or distributing the Package, you accept this + license. Do not use, modify, or distribute the Package, if you + do not accept this license. + . + (11) If your Modified Version has been derived from a Modified + Version made by someone other than you, you are nevertheless + required to ensure that your Modified Version complies with + the requirements of this license. + . + (12) This license does not grant you the right to use any trademark, + service mark, tradename, or logo of the Copyright Holder. + . + (13) This license includes the non-exclusive, worldwide, + free-of-charge patent license to make, have made, use, offer to + sell, import and otherwise transfer the Package with respect to + any patent claims licensable by the Copyright Holder that are + necessarily infringed by the Package. If you institute patent + litigation (including a cross-claim or counterclaim) against + any party alleging that the Package constitutes direct or + contributory patent infringement, then this Artistic License to + you shall terminate on the date that such litigation is filed. + . + (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT + HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE + DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS + REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-log-agent/PKGBUILD b/perl-log-agent/PKGBUILD new file mode 100644 index 0000000..cbdc656 --- /dev/null +++ b/perl-log-agent/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-log-agent +_realname=Log-Agent +pkgver=1.004 +pkgrel=1 +pkgdesc="Perl module providing helper logging routines" +arch=('any') +license=('GPL-1' 'Artistic-2.0') +url='https://metacpan.org/release/Log-Agent' +depends=('perl-mailtools' 'perl') +options=(!emptydirs) +source=("https://cpan.metacpan.org/authors/id/M/MR/MROGASKI/${_realname}-${pkgver}.tar.gz" + "LICENSE") +sha512sums=('88724637484127934b10f508a66ed1b3edd7254e398788a8d0706e72e6ed0c4d120452bf1c6b4f8cce8eb5730b13402cb688a83123bdee0f0f8d66ef93a6aa80' + 'c527bdebaf3baea4b74954e873a6bbef2d21bc79d8301386572402745fdb9b7d7eda09b078a2d34338256dc122b61e20ffe5494081606e2aac41997afb5c8aed') + +build() { + cd Log-Agent-$pkgver + # install module in vendor directories. + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Log-Agent-$pkgver + make install DESTDIR="$pkgdir" + install -Dm 644 "${srcdir}/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-lwp-mediatypes/COPYING b/perl-lwp-mediatypes/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-lwp-mediatypes/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-lwp-mediatypes/PKGBUILD b/perl-lwp-mediatypes/PKGBUILD new file mode 100644 index 0000000..f82c2b9 --- /dev/null +++ b/perl-lwp-mediatypes/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-lwp-mediatypes +pkgver=6.02 +pkgrel=3 +pkgdesc="Guess the media type of a file or a URL" +arch=('any') +url="https://metacpan.org/release/LWP-MediaTypes" +depends=('perl') +license=('GPL-1') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/G/GA/GAAS/LWP-MediaTypes-${pkgver}.tar.gz + COPYING) +sha512sums=('b2ad33fb2c6dd7afaa9b8dd2ed6a15b2ecc35d13bcdf5297ce1632ea77406def0840a24c5213187707b665f28cc9bbea5774bfd1a4070d1f6192e904f707b94e' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "${srcdir}/LWP-MediaTypes-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd "${srcdir}/LWP-MediaTypes-${pkgver}" + make test +} + +package() { + cd "${srcdir}/LWP-MediaTypes-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/COPYING" "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/perl-lwp-protocol-https/PKGBUILD b/perl-lwp-protocol-https/PKGBUILD new file mode 100644 index 0000000..5201db5 --- /dev/null +++ b/perl-lwp-protocol-https/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=perl-lwp-protocol-https +pkgver=6.09 +_debver=6.09 +_debrel=1 +pkgrel=1 +pkgdesc="Provide https support for LWP::UserAgent" +arch=('any') +url="https://metacpan.org/release/LWP-Protocol-https" +license=('GPL-1') +depends=('ca-certificates' 'perl-io-socket-ssl' 'perl-net-http' 'perl-libwww') +makedepends=('quilt') +checkdepends=('perl-test-requiresinternet') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/LWP-Protocol-https-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libl/liblwp-protocol-https-perl/liblwp-protocol-https-perl_$_debver-$_debrel.debian.tar.xz" + 'certs.patch') +sha512sums=('53e1ec7dec04988c3c7fa70a5f0ed60c38270bbbb9fe99a7cfeb84db0c40f5ff6f6f94aa4aa639498af6d0bc201dcb7e6e3491bae96411250ef50b010d32add1' + '314aec7517573c283842f38f6d19dd9f6541f20a951e711e590b7c3db3d4bd55d58cfa6bade2097ab4f7d300943c43c1053286c6ffdbcae3f6c8bc6a05d2c8dd' + '96f401471199c368895eb9b0e819a7287ed9e25953f756585ef7e809010e5d19c8b0614f3cd99cad0c33ca7c9a609ceea4b90569d3f7dec546cc8eeecd810d26') + +prepare() { + cd LWP-Protocol-https-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/cert.patch || true + + quilt push -av + fi + patch -p1 -i ../certs.patch +} + +build() { + cd LWP-Protocol-https-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd LWP-Protocol-https-${pkgver} + make test +} + +package() { + cd LWP-Protocol-https-${pkgver} + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-lwp-protocol-https/certs.patch b/perl-lwp-protocol-https/certs.patch new file mode 100644 index 0000000..2575680 --- /dev/null +++ b/perl-lwp-protocol-https/certs.patch @@ -0,0 +1,43 @@ +diff --git a/Makefile.PL.orig b/Makefile.PL +index fc8ef4a..26313e2 100644 +--- a/Makefile.PL.orig ++++ b/Makefile.PL +@@ -26,7 +26,6 @@ my %WriteMakefileArgs = ( + "IO::Socket::SSL" => "1.54", + "LWP::Protocol::http" => 0, + "LWP::UserAgent" => "6.06", +- "Mozilla::CA" => 20180117, + "Net::HTTPS" => 6, + "base" => 0, + "strict" => 0 +diff --git a/lib/LWP/Protocol/https.pm.orig b/lib/LWP/Protocol/https.pm +index ed4d832..b8667cf 100644 +--- a/lib/LWP/Protocol/https.pm.orig ++++ b/lib/LWP/Protocol/https.pm +@@ -25,25 +25,7 @@ sub _extra_sock_opts + } + if ($ssl_opts{SSL_verify_mode}) { + unless (exists $ssl_opts{SSL_ca_file} || exists $ssl_opts{SSL_ca_path}) { +- eval { +- require Mozilla::CA; +- }; +- if ($@) { +- if ($@ =~ /^Can't locate Mozilla\/CA\.pm/) { +- $@ = <<'EOT'; +-Can't verify SSL peers without knowing which Certificate Authorities to trust +- +-This problem can be fixed by either setting the PERL_LWP_SSL_CA_FILE +-environment variable or by installing the Mozilla::CA module. +- +-To disable verification of SSL peers set the PERL_LWP_SSL_VERIFY_HOSTNAME +-environment variable to 0. If you do this you can't be sure that you +-communicate with the expected peer. +-EOT +- } +- die $@; +- } +- $ssl_opts{SSL_ca_file} = Mozilla::CA::SSL_ca_file(); ++ $ssl_opts{SSL_ca_file} = '/etc/ssl/certs/ca-certificates.crt'; + } + } + $self->{ssl_opts} = \%ssl_opts; diff --git a/perl-mail-authenticationresults/PKGBUILD b/perl-mail-authenticationresults/PKGBUILD new file mode 100644 index 0000000..d4015d4 --- /dev/null +++ b/perl-mail-authenticationresults/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-mail-authenticationresults +pkgver=2.20210915 +pkgrel=1 +pkgdesc='Object Oriented Authentication-Results Headers' +arch=(any) +license=('GPL-1') +options=(!emptydirs) +depends=('perl' 'perl-clone' 'perl-json') +url=https://metacpan.org/release/Mail-AuthenticationResults +source=("https://cpan.metacpan.org/authors/id/M/MB/MBRADSHAW/Mail-AuthenticationResults-$pkgver.tar.gz") +sha512sums=(c1f1149853fd2a30116f70f126bc9822f4d085b030c5e09aec273792888c67ae141dff8c9c2368d21d692b3ca409bab89fef44d6ba0a40c9fe34b845568c570b) +_ddir="Mail-AuthenticationResults-$pkgver" + +build() ( + cd "$srcdir/$_ddir" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +) + +package() ( + cd "$srcdir/$_ddir" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +) diff --git a/perl-mail-message/LICENSE b/perl-mail-message/LICENSE new file mode 100644 index 0000000..846022f --- /dev/null +++ b/perl-mail-message/LICENSE @@ -0,0 +1,28 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Source: https://metacpan.org/release/Mail-Message +Upstream-Contact: Mark Overmeer +Upstream-Name: Mail-Message + +Files: * +Copyright: 2001-2020, Mark Overmeer +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2018, Damyan Ivanov +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-mail-message/PKGBUILD b/perl-mail-message/PKGBUILD new file mode 100644 index 0000000..d61505b --- /dev/null +++ b/perl-mail-message/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=perl-mail-message +pkgver=3.010 +pkgrel=1 +pkgdesc="container for MIME-encoded message information" +arch=('any') +url='https://search.mcpan.org/dist/Mail-Message' +license=('GPL-1') +options=('!emptydirs') +depends=('perl' 'perl-user-identity' 'perl-mailtools' 'perl-mime-types' + 'perl-io-stringy' 'perl-uri') +source=("https://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/Mail-Message-$pkgver.tar.gz" + "LICENSE") +sha512sums=('aa2d38968cfe55a5688a1aaa3442fd87bc7b216ab43db40053f65f5d9bc6b397427a56662062c5a17dd6e62d86aa56c217a6394298e78fc64377feeeeef03771' + 'ca775813e9b1fb6578907587682a2662e94e4a23da888763dd29f0a38b6fb71c8dbf7f7a1a138f612602cbf4253b964b5fe2989cf50b5477347d012171270a3d') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd "$srcdir/Mail-Message-$pkgver" + /usr/bin/perl Makefile.PL + make + ) +} + +package() { + cd "$srcdir/Mail-Message-$pkgver" + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-mail-spf-query/PKGBUILD b/perl-mail-spf-query/PKGBUILD new file mode 100644 index 0000000..9ac2e29 --- /dev/null +++ b/perl-mail-spf-query/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-mail-spf-query +_realname=Mail-SPF-Query +pkgver=1.999.1 +pkgrel=1 +pkgdesc="Perl module that provides SPF support" +arch=('any') +license=('GPL-2') +url="https://search.cpan.org/dist/Mail-SPF-Query/" +depends=('perl-net-cidr-lite' 'perl-net-dns' 'perl-sys-hostname-long' 'perl-uri' 'perl') +options=(!emptydirs) +source=("https://search.cpan.org/CPAN/authors/id/J/JM/JMEHNLE/mail-spf-query/${_realname}-${pkgver}.tar.gz") +sha512sums=('bb7c30832ae46416dbc6e2387dfeb13ce707022566536802c3548b318bc42f4d68e887f38e5e56bb845f0bd68a003f43157f4ce0f7b94521508bcb3654d2162d') + +build() { + cd "$srcdir"/${_realname}-${pkgver} + # install module in vendor directories + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/${_realname}-${pkgver} + make install DESTDIR="$pkgdir" + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-mail-spf/PKGBUILD b/perl-mail-spf/PKGBUILD new file mode 100644 index 0000000..095bf96 --- /dev/null +++ b/perl-mail-spf/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-mail-spf +pkgver=2.9.0 +pkgrel=1 +pkgdesc="Perl module that provides SPF support" +arch=('any') +license=('Modified-BSD') +url="https://search.cpan.org/dist/Mail-SPF/" +depends=('perl-error' 'perl-netaddr-ip' 'perl-uri' 'perl-net-dns' 'perl') +makedepends=('perl-module-build' 'perl-net-dns-resolver-programmable') +conflicts=('perl-mail-spf-query') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/J/JM/JMEHNLE/mail-spf/Mail-SPF-v${pkgver}.tar.gz") +sha512sums=('22bf98c4981f121ed85bb5cbc1ebcb2607ada5052bcea0dd8de692e3473a2ebdd3066acd944bb12f0efe64605e4bf7dc695a1549b7608239d0efc059339df60b') + +build() { + cd Mail-SPF-v${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Mail-SPF-v${pkgver} + make DESTDIR="${pkgdir}" install + install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-mailtools/COPYING b/perl-mailtools/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-mailtools/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-mailtools/PKGBUILD b/perl-mailtools/PKGBUILD new file mode 100644 index 0000000..31f77c8 --- /dev/null +++ b/perl-mailtools/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=perl-mailtools +pkgver=2.21 +_debver=2.21 +_debrel=1 +pkgrel=1 +pkgdesc="Various email related modules" +arch=('any') +url="https://metacpan.org/release/MailTools" +license=('GPL-1') +depends=('perl-timedate') +makedepends=('quilt') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/MailTools-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libm/libmailtools-perl/libmailtools-perl_$_debver-$_debrel.debian.tar.xz" + 'COPYING') +sha512sums=('70c7e5760691a1fc0a2812c48a632896db9bf719d3cb07a63c3a4456c5a365855c7f71c7436c84e5085374628f26ad31fcf13e74b3b7242911da59b7916065a0' + 'b29a897bcd7982945f8f08f1469f223ed406464b97952134fd969c8f02167a111f021e3b35384a7ad8aa3ab1d33e7bd83e96a2548e8a69abd4fb4450573f1da6' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +prepare() { + cd MailTools-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd MailTools-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd MailTools-$pkgver + make test +} + +package() { + cd MailTools-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 ../COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-math-random-isaac/PKGBUILD b/perl-math-random-isaac/PKGBUILD new file mode 100644 index 0000000..8b8df5f --- /dev/null +++ b/perl-math-random-isaac/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-math-random-isaac +pkgver=1.004 +pkgrel=1 +pkgdesc='Perl interface to the ISAAC PRNG algorithm' +arch=('any') +url='https://search.cpan.org/dist/Math-Random-ISAAC/' +license=('Public-Domain') +depends=('perl') +makedepends=('perl-test-nowarnings') +options=(!emptydirs) +source=("https://search.cpan.org/CPAN/authors/id/J/JA/JAWNSY/Math-Random-ISAAC-$pkgver.tar.gz") +sha512sums=('98fdfb28b207b4afe72ab82a2b564b06c5daaac15cdab2ce2ef698b16c0dcf5b23ac28fbebe170d2c6c7239fe6c97f634e5c03a8f2bd0aeb8369d0008b9ae0a2') + +build() { + cd "$srcdir/Math-Random-ISAAC-$pkgver" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null + perl Makefile.PL + make +} + +package() { + cd "$srcdir/Math-Random-ISAAC-$pkgver" + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-mime-charset/PKGBUILD b/perl-mime-charset/PKGBUILD new file mode 100644 index 0000000..d5c2c79 --- /dev/null +++ b/perl-mime-charset/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=perl-mime-charset +pkgver=1.012.2 +pkgrel=1 +pkgdesc="Charset Information for MIME" +arch=('any') +url='https://metacpan.org/release/MIME-Charset' +license=('GPL-2') +options=('!emptydirs') +depends=('perl') +checkdepends=('perl-test-pod') +source=("https://cpan.metacpan.org/authors/id/N/NE/NEZUMI/MIME-Charset-${pkgver}.tar.gz") +sha512sums=('2273bf0b86eb042e5aa8bcf958eefefde7dce6701eea5ae8c0fe9997e7d3e90d837a7791ade30f84536a15116175c796daee60da6625f409d214844dfedfde4d') + +build() { + cd "MIME-Charset-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL + make +} + +check() { + cd "MIME-Charset-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 + make test +} + +package() { + cd "MIME-Charset-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + make install INSTALLDIRS=vendor DESTDIR="${pkgdir}" + install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-mime-types/LICENSE b/perl-mime-types/LICENSE new file mode 100644 index 0000000..92970ca --- /dev/null +++ b/perl-mime-types/LICENSE @@ -0,0 +1,35 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: MIME-Types +Upstream-Contact: Mark Overmeer +Source: https://metacpan.org/release/MIME-Types + +Files: * +Copyright: 1999-2020, Mark Overmeer +License: Artistic + +Files: debian/* +Copyright: 2000, Brian M. Almeida + 2002-2004, Stephen Zander + 2004-2007, Gunnar Wolf + 2006-2020, gregor herrmann + 2007-2008, Damyan Ivanov + 2009-2011, Ansgar Burchardt + 2010, Jonathan Yu + 2010-2016, Salvatore Bonaccorso +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic' + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of the GNU General Public + License can be found in `/usr/share/common-licenses/GPL-1' diff --git a/perl-mime-types/PKGBUILD b/perl-mime-types/PKGBUILD new file mode 100644 index 0000000..1005d34 --- /dev/null +++ b/perl-mime-types/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-mime-types +pkgver=2.18 +pkgrel=1 +pkgdesc="Perl/CPAN Module MIME::Types : Information and processing MIME types" +arch=('any') +url='https://search.cpan.org/dist/MIME-Types/' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://deb.debian.org/debian/pool/main/libm/libmime-types-perl/libmime-types-perl_${pkgver}.orig.tar.gz" + "LICENSE") +sha512sums=('770e63a48b40c94f1728e67f6a69029f51e125562d11008f26a5e1a6b85d30fb45bcbd1f8e080f664542b81de94695972012815e07f0ecd007a11efb32005df1' + 'b05b7df55cf869ebd8eafed458f6c9a56396dd80aa9409e8b5d30c56d9fe94cffe3a926f751319174692ad8ea62d3fee4c7f9f289732d8b40b0cb41fa6bc0d5e') + +build() { + cd MIME-Types-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd MIME-Types-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-module-build-tiny/PKGBUILD b/perl-module-build-tiny/PKGBUILD new file mode 100644 index 0000000..16fc21d --- /dev/null +++ b/perl-module-build-tiny/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=perl-module-build-tiny +_pkgname=Module-Build-Tiny +pkgver=0.039 +pkgrel=2 +pkgdesc="A tiny replacement for Module::Build" +arch=('any') +license=('GPL-1') +options=('!emptydirs') +depends=('perl' 'perl-extutils-config' 'perl-extutils-helpers' 'perl-extutils-installpaths') +url="https://search.cpan.org/dist/Module-Build-Tiny" +source=("https://search.cpan.org/CPAN/authors/id/L/LE/LEONT/${_pkgname}-${pkgver}.tar.gz") +sha512sums=('26ca6fe4c1792b26bb2b4711035847f4215ea7c37234fbe24fc07432682fd9d3b6016dbdb2ecb455a7b13f6bea13994826c7f84f21075f0a6e575fa74672903a') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd "${srcdir}/${_pkgname}-${pkgver}" + /usr/bin/perl Build.PL + ./Build + ) +} + +check() { + cd "${srcdir}/${_pkgname}-${pkgver}" + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" + ./Build test + ) +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + ( export PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" + ./Build install + ) + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +# Local Variables: +# mode: shell-script +# sh-basic-offset: 2 +# End: +# vim:set ts=2 sw=2 et: diff --git a/perl-module-build/COPYING b/perl-module-build/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-module-build/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-module-build/PKGBUILD b/perl-module-build/PKGBUILD new file mode 100644 index 0000000..1915eba --- /dev/null +++ b/perl-module-build/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-module-build +pkgver=0.4231 +pkgrel=2 +pkgdesc="Build and install Perl modules" +arch=('any') +url='https://metacpan.org/pod/Module::Build' +license=('GPL-1') +depends=('perl' 'perl-inc-latest') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/L/LE/LEONT/Module-Build-${pkgver}.tar.gz" + 'COPYING') +sha512sums=('ee1dc18a7df3fe67e7f954d5e1e071aa0a6f5bce6783b768bceb01f071e64ac8be63f410c932c7c16764e5d4f52fc664ce11a12f26f6afc75a26f79883efad70' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "Module-Build-${pkgver}" + perl Build.PL installdirs=vendor + perl Build +} + +package() { + cd "Module-Build-${pkgver}" + perl Build install destdir="${pkgdir}" + find "${pkgdir}" \( -name perllocal.pod -o -name .packlist \) -delete + install -D -m644 "${srcdir}/COPYING" "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/perl-module-implementation/PKGBUILD b/perl-module-implementation/PKGBUILD new file mode 100644 index 0000000..5c1b47f --- /dev/null +++ b/perl-module-implementation/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-module-implementation +pkgver=0.09 +pkgrel=1 +pkgdesc="Loads one of several alternate underlying implementations for a module" +arch=('any') +url='https://search.cpan.org/dist/Module-Implementation/' +license=('Artistic-2.0') +options=('!emptydirs') +depends=('perl-module-runtime>=0.012' 'perl-try-tiny') +source=(https://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Module-Implementation-$pkgver.tar.gz) +sha512sums=('049f967ba1bd8a3914968b34006030ae318d99ac629a0f34736f1c2b5392490c30aa0914e777eaefda7f0f58755d2d3363a266b90db59b53fe145ef68e1d953c') + +build() { + cd "${srcdir}/Module-Implementation-${pkgver}" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL="--skipdeps" \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null + perl Makefile.PL + make +} + +package() { + cd "${srcdir}/Module-Implementation-${pkgver}" + make install + find "${pkgdir}" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-module-runtime/LICENSE b/perl-module-runtime/LICENSE new file mode 100644 index 0000000..f0e63a6 --- /dev/null +++ b/perl-module-runtime/LICENSE @@ -0,0 +1,33 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Module-Runtime +Upstream-Contact: Andrew Main (Zefram) +Source: https://metacpan.org/release/Module-Runtime + +Files: * +Copyright: 2004-2017, Andrew Main (Zefram) +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2007, 2008, 2010, Ivan Kohler + 2011-2017, Angel Abad + 2011, Alessandro Ghedini + 2011, Ansgar Burchardt + 2011, Salvatore Bonaccorso + 2014-2018, gregor herrmann +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-module-runtime/PKGBUILD b/perl-module-runtime/PKGBUILD new file mode 100644 index 0000000..eab5e77 --- /dev/null +++ b/perl-module-runtime/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-module-runtime +pkgver=0.016 +pkgrel=1 +pkgdesc="runtime module handling" +arch=('any') +url="https://search.cpan.org/dist/Module-Runtime/" +license=('GPL-1') +depends=('perl' 'perl-module-build') +options=(!emptydirs) +source=("https://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Module-Runtime-$pkgver.tar.gz" + "LICENSE") +sha512sums=('64a362ee897646173dbbdd8794f863d93379d45d7ac20d3ae890d77b4ec3f5e36aaff66c41b4a6a33b28bf492216283528755550ab09e466ceafb4f0cfbaeb9e' + '4ea2e2c2462c078bf4fd42fb68ff08a5251015fdc2fad58f7e24933ad99f22062635c70e57786dfbb8dc5930f2bcacde5a85c87576cee755bcc0ce609c68255d') + +build() { + cd "$srcdir"/Module-Runtime-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Module-Runtime-$pkgver + make install DESTDIR="${pkgdir}" + find "$pkgdir" -name perllocal.pod -delete + find "$pkgdir" -name .packlist -delete + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-net-cidr-lite/PKGBUILD b/perl-net-cidr-lite/PKGBUILD new file mode 100644 index 0000000..78fc2f0 --- /dev/null +++ b/perl-net-cidr-lite/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=perl-net-cidr-lite +_realname=Net-CIDR-Lite +pkgver=0.22 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Perl extension for merging IPv4 or IPv6 CIDR addresses" +arch=('any') +license=('GPL-1') +url='https://search.cpan.org/dist/Net-CIDR-Lite/' +depends=('perl') +makedepends=('quilt') +options=(!emptydirs) +source=("https://search.cpan.org/CPAN/authors/id/S/ST/STIGTSP/${_realname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libn/libnet-cidr-lite-perl/libnet-cidr-lite-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5d89c0b6d950e5cb4c7eb9639829d76a67373865f5582f61d3e384636b176ac08335a9210d05a53c54105fecfb8ec98ae115cba3d181aed3032370d50f3aec9f' + 'd90e86d7dcb9284cceed46f4c284a4cb8d865847beb54feae9f10a78c61f0a040aa90fc731e6f35fa1224fff45fa29eb6c9a2824d6128b63e7c98440ddae9fd1') + +prepare() { + cd ${_realname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${_realname}-${pkgver} + # install module in vendor directories. + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ${_realname}-${pkgver} + make install DESTDIR="${pkgdir}" + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-net-dns-resolver-programmable/PKGBUILD b/perl-net-dns-resolver-programmable/PKGBUILD new file mode 100644 index 0000000..8ff3494 --- /dev/null +++ b/perl-net-dns-resolver-programmable/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-net-dns-resolver-programmable +_realname=Net-DNS-Resolver-Programmable +pkgver=0.009 +pkgrel=1 +pkgdesc="A Net::DNS::Resolver descendant class for offline emulation of DNS" +arch=('any') +license=('GPL-2') +url="https://search.cpan.org/dist/${_realname}/" +depends=('perl-net-dns' 'perl') +makedepends=('perl-module-build') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/B/BI/BIGPRESH/${_realname}-${pkgver}.tar.gz) +sha512sums=('a9a239ff454ba186e2a00e578615d6b25075f4e1fde548893681c169d04571c1621b023ecd2ccbb95a8fff50d8b811c410212db31a1b78f2d62977a45e90a735') + +build() { + cd ${_realname}-${pkgver} + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ${_realname}-${pkgver} + make install DESTDIR="${pkgdir}" || return 1 + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-net-dns/LICENSE b/perl-net-dns/LICENSE new file mode 100644 index 0000000..df36fe8 --- /dev/null +++ b/perl-net-dns/LICENSE @@ -0,0 +1,34 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Contact: net-dns-users@nlnetlabs.nl +Source: https://metacpan.org/release/Net-DNS +Upstream-Name: Net-DNS + +Files: * +Copyright: Willem Toorop + Olaf Kolkman + Michael Fuhr + Chris Reinhardt + Dick Franks +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 1998-2000, 2002-2010, Florian Hinzmann + 2012, Florian Roscher + 2014, Ondřej Surý +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-net-dns/PKGBUILD b/perl-net-dns/PKGBUILD new file mode 100644 index 0000000..0ed103b --- /dev/null +++ b/perl-net-dns/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-net-dns +pkgver=1.29 +pkgrel=1 +pkgdesc="Perl Module: Interface to the DNS resolver" +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/Net-DNS/" +depends=('perl-digest-hmac' 'perl-net-ip') +optdepends=('perl-io-socket-inet6: IPv6 support' + 'perl-socket6: IPv6 support' + 'perl-net-libidn2: non-ASCII domain support') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/N/NL/NLNETLABS/Net-DNS-$pkgver.tar.gz" + "LICENSE") +sha512sums=('6568ee2ff0cb931a648c36fe7812cde623fa8dadcd7c9401b397188c197a5c0e567ca56ae021147bedbe4a57d45055f36af043c771ee8a08476298855447775f' + '0697f920d60e5c708ad534f513c3b90a317641e17dc51a982e45303316fdbc99f82a386643deca5c3843744021b536a4a879f28b28b8373f9324ee0c832ef7fb') + +build() { + cd Net-DNS-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Net-DNS-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-net-http/PKGBUILD b/perl-net-http/PKGBUILD new file mode 100644 index 0000000..5bc7fd1 --- /dev/null +++ b/perl-net-http/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=perl-net-http +pkgver=6.19 +pkgrel=1 +pkgdesc="Low-level HTTP connection (client)" +arch=('any') +url=https://search.cpan.org/dist/Net-HTTP +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +checkdepends=('perl-uri') +conflicts=('perl-libwww<6') +source=("https://cpan.metacpan.org/authors/id/O/OA/OALDERS/Net-HTTP-$pkgver.tar.gz") +sha512sums=('85b139150d8608f7439ef2f975afe884c1f5220726d45603427510e39ad2003e20ea30ed1326b4ff20527c4e625262769a5abaa5ef320f1c26bf3f8eafc9cd1b') + +build() { + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor" \ + PERL_MB_OPT="--installdirs vendor" \ + MODULEBUILDRC=/dev/null + + cd Net-HTTP-${pkgver} + /usr/bin/perl Makefile.PL + make +} + +check() { + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" + cd Net-HTTP-${pkgver} + make test +} + +package() { + cd Net-HTTP-${pkgver} + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +# Local Variables: +# mode: shell-script +# sh-basic-offset: 2 +# End: +# vim:set ts=2 sw=2 et: diff --git a/perl-net-ip/LICENSE b/perl-net-ip/LICENSE new file mode 100644 index 0000000..80140ee --- /dev/null +++ b/perl-net-ip/LICENSE @@ -0,0 +1,56 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Net-IP +Upstream-Contact: Manuel Valente +Source: https://metacpan.org/release/Net-IP + +Files: * +Copyright: 1999-2000, RIPE NCC +License: Artistic or GPL-1+ + +Files: ipcount +Copyright: 2000, RIPE NCC +License: Expat + +Files: IP.pm +Copyright: 1999-2002, RIPE NCC +License: Expat + +Files: debian/* +Copyright: 2003-2006, Frederic Schutz + 2011, Nicholas Bamber + 2012, Xavier Guimard +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: Expat + All Rights Reserved + . + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of the author not be + used in advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + . + THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL + AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY + DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-net-ip/PKGBUILD b/perl-net-ip/PKGBUILD new file mode 100644 index 0000000..5e2a58e --- /dev/null +++ b/perl-net-ip/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=perl-net-ip +_realname=Net-IP +pkgver=1.26 +_debver=1.26 +_debrel=2 +pkgrel=1 +pkgdesc="Perl Module: Easy manipulation of IPv4 and IPv6 addresses" +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/Net-IP/" +depends=('perl') +makedepends=('quilt') +options=(!emptydirs) +source=("https://www.cpan.org/authors/id/M/MA/MANU/Net-IP-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libn/libnet-ip-perl/libnet-ip-perl_$_debver-$_debrel.debian.tar.xz" + "LICENSE") +sha512sums=('c561f32b6ca5dc082e2bc6c47000a2ca0f5ee7abb47105f5b1bf98cb76723287416de0a767ea63c18f87964df7f3982c7258fe1208afa22cff0378ae3509d9eb' + '8e7fd1de846224225126f6ade4a5d0374b5632f14a9a3f3264836eb1b6821164b02e10e9146a4f687bdc004f41eda18edc8258c49400fe6b314e0db8847b4a02' + '5fa545bcf154a2ca1c258dc85cc0ab185a98f7ca57b845ccc38b943080cbd6019da962c2d39e5297c782f96b083b18d87d893367cbb34439a8e1cfa8e3a32398') + +prepare() { + cd Net-IP-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd Net-IP-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Net-IP-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-net-libidn2/PKGBUILD b/perl-net-libidn2/PKGBUILD new file mode 100644 index 0000000..f8dd8e9 --- /dev/null +++ b/perl-net-libidn2/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. +# Generator (Arch): CPANPLUS::Dist::Arch 1.28 + +pkgname=perl-net-libidn2 +pkgver=1.01 +pkgrel=1 +pkgdesc='Perl bindings for GNU Libidn2' +arch=('i686' 'x86_64') +url='https://search.cpan.org/dist/Net-LibIDN2' +license=('GPL-1') +options=('!emptydirs') +depends=('libidn2' 'perl') +makedepends=('perl-module-build') +source=("https://search.cpan.org/CPAN/authors/id/T/TH/THOR/Net-LibIDN2-$pkgver.tar.gz") +sha512sums=('b3eb430c99a458e9e5fbd16fb6b059bd660a995be7ebe806b44b46160db7a5502806d503ec03667ef9865634f403db2e665c3dcad58f4e221e918ef4d78eabd0') + +build() { + cd Net-LibIDN2-$pkgver + perl Build.PL installdirs=vendor + perl Build +} + +package() { + cd Net-LibIDN2-$pkgver + perl Build install destdir="$pkgdir" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-net-server/PKGBUILD b/perl-net-server/PKGBUILD new file mode 100644 index 0000000..59c2d6d --- /dev/null +++ b/perl-net-server/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=perl-net-server +pkgver=2.009 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc='Extensible, general Perl server engine' +arch=('any') +url="https://metacpan.org/release/Net-Server" +license=('GPL-1') +depends=('perl') +makedepends=('quilt') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/R/RH/RHANDOM/Net-Server-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libn/libnet-server-perl/libnet-server-perl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('36409f8d2478877c68cbfcbe9c08045b0c24a926b64f022faf3de8f4b4369ff417d5c41ff1e9800553c38da29c6d72ef301119c956cb26439f6b6366ff4b459c' + '20bbb982a6ca9ba7c34fe1b483f23f3467d8d1097e01c8f2aaf4c5095837a1ae20499832ab5a6684b944d609a2d08cc9a87e6c83969365cbe3c04b26b47705fe') + +prepare() { + cd Net-Server-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd Net-Server-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Net-Server-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-net-ssleay/PKGBUILD b/perl-net-ssleay/PKGBUILD new file mode 100644 index 0000000..1336a01 --- /dev/null +++ b/perl-net-ssleay/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=perl-net-ssleay +_cpanname=Net-SSLeay +pkgver=1.88 +_debver=1.88 +_debrel=3 +pkgrel=1 +pkgdesc='Perl extension for using LibreSSL' +url='https://search.cpan.org/dist/Net-SSLeay/' +arch=('i686' 'x86_64') +license=('Artistic-2.0') +depends=('libressl') +makedepends=('chrpath' 'quilt') +replaces=('net-ssleay') +provides=('net-ssleay') +options=('!emptydirs') +source=(https://cpan.metacpan.org/authors/id/C/CH/CHRISN/${_cpanname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libn/libnet-ssleay-perl/libnet-ssleay-perl_$_debver-$_debrel.debian.tar.xz) +sha512sums=('37fc32ec003337f3dc18bf928139079a3127628c6fa0fccaed0c27b6bf3b216c2c5338ed1aaf9408b0add3be549df3218d3c5a6d6299793c1329d8a0813a1682' + '7edb53484a8b51b2a39bcf02e2053f970d78176bf87809f8a217ade9a2e77d79d0dba469128bd8e6d7ddab6a6aa6c907da07de5d8e8e3ce5fb290bb53162afec') + +prepare() { + cd ${srcdir}/${_cpanname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${_cpanname}-${pkgver} + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ${_cpanname}-${pkgver} + + make install DESTDIR="${pkgdir}" + install -Dm 644 README -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + + # strip rpath + find "${pkgdir}" -name '*.so' -exec chrpath -d '{}' \; +} diff --git a/perl-netaddr-ip/PKGBUILD b/perl-netaddr-ip/PKGBUILD new file mode 100644 index 0000000..48d277c --- /dev/null +++ b/perl-netaddr-ip/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=perl-netaddr-ip +pkgver=4.079 +_debver=4.079+dfsg +_debrel=1 +pkgrel=1 +pkgdesc="Perl module to manage IP addresses and subnets" +arch=('i686' 'x86_64') +url="https://search.cpan.org/dist/NetAddr-IP/" +license=('GPL-2') +depends=('perl') +makedepends=('quilt') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/M/MI/MIKER/NetAddr-IP-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libn/libnetaddr-ip-perl/libnetaddr-ip-perl_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('8ebc8ffb914cf72c041441f96de0e9c982eebdb8c26dbf15f885d0113b3634e4851d81f13f555c14d1fdf0ab95ae2ce880ed124e6c200e391adae3b1d6d3eb65' + '1a4e593bd4916f9caf93dbc24a83d7684c638249b6e5de1c482198242dd085bd205a47b1c61bdc01427e3b75a87a9f3809b31b4ce53d0e2677a731c39efbce04') + +prepare() { + cd NetAddr-IP-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd NetAddr-IP-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd NetAddr-IP-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 Copying -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-par-dist/PKGBUILD b/perl-par-dist/PKGBUILD new file mode 100644 index 0000000..66a54f9 --- /dev/null +++ b/perl-par-dist/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-par-dist +pkgver=0.51 +pkgrel=1 +pkgdesc="Create and manipulate PAR distributions" +arch=('any') +url="https://metacpan.org/pod/PAR::Dist" +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/R/RS/RSCHUPP/PAR-Dist-${pkgver}.tar.gz") +sha512sums=('4c06ff54dfa8f3dc4766b60c45337b3cf80b32ec6bcc49d7e5a4786e0533e495f6215b257100fa5aae50f12e01a8b3d7144254d8706019c50ff115915f0fcb41') + +build() { + cd "$srcdir/PAR-Dist-${pkgver}" + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd "$srcdir/PAR-Dist-${pkgver}" + make test +} + +package() { + cd "$srcdir/PAR-Dist-${pkgver}" + make install DESTDIR="${pkgdir}" + install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-params-util/PKGBUILD b/perl-params-util/PKGBUILD new file mode 100644 index 0000000..db573dc --- /dev/null +++ b/perl-params-util/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-params-util +pkgver=1.102 +pkgrel=1 +pkgdesc="Simple, compact and correct param-checking functions" +arch=('i686' 'x86_64') +url='https://metacpan.org/release/Params-Util' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/R/RE/REHSACK/Params-Util-$pkgver.tar.gz") +sha512sums=('e2587b62545cf0572cc8f719ea8e5411d710789c3cbcab4038c5b01f86073a010d32191551f6aeea1bdae22d49e7d34358250b4e7ece9f261a598854af187194') + +build() { + cd "$srcdir/Params-Util-$pkgver" + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + unset PERL5LIB PERL_MM_OPT + /usr/bin/perl Makefile.PL + make +} + +package() { + cd "$srcdir/Params-Util-$pkgver" + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 GPL-1 -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-params-validate/PKGBUILD b/perl-params-validate/PKGBUILD new file mode 100644 index 0000000..48b94c3 --- /dev/null +++ b/perl-params-validate/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-params-validate +pkgver=1.30 +pkgrel=1 +pkgdesc="Validate sub params against a spec" +arch=('i686' 'x86_64') +license=('Artistic-2.0') +url='https://search.cpan.org/dist/Params-Validate' +depends=('perl' 'perl-module-implementation') +makedepends=('perl-module-build') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/D/DR/DROLSKY/Params-Validate-${pkgver}.tar.gz") +sha512sums=('ca6b54a55dc003be6933ad5a9353abf96f2decfc681354fabc974e9666b89b3afe8394cd0a13ec91a5f84c825cbc0b4697a4977bf773feabfefab57006c9f20e') + +build() { + cd Params-Validate-${pkgver} + perl ./Build.PL --installdirs=vendor + ./Build +} + +package() { + cd Params-Validate-${pkgver} + ./Build install --destdir="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-parse-yapp/LICENSE b/perl-parse-yapp/LICENSE new file mode 100644 index 0000000..47a6dd5 --- /dev/null +++ b/perl-parse-yapp/LICENSE @@ -0,0 +1,35 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Parse-Yapp +Upstream-Contact: William N. Braswell, Jr. +Source: https://metacpan.org/release/Parse-Yapp + +Files: * +Copyright: © 1998-2001, Francois Desarmenien + © 2017 William N. Braswell, Jr. +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: + © 1999-2003, Ardo van Rangelrooij + © 2003, Jaldhar H. Vyas + © 2004, Luk Claes + © 2005-2007, Jay Bonci + © 2010, Ansgar Burchardt + © 2017, gregor herrmann +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-parse-yapp/PKGBUILD b/perl-parse-yapp/PKGBUILD new file mode 100644 index 0000000..4dcee92 --- /dev/null +++ b/perl-parse-yapp/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=perl-parse-yapp +pkgver=1.21 +_debver=1.21 +_debrel=2 +pkgrel=1 +pkgdesc='Perl/CPAN Module Parse::Yapp : Generates OO LALR parser modules' +arch=('any') +url='https://search.cpan.org/dist/Parse-Yapp' +license=('GPL-1') +depends=('perl') +makedepends=('quilt') +source=("https://cpan.metacpan.org/authors/id/W/WB/WBRASWELL/Parse-Yapp-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libp/libparse-yapp-perl/libparse-yapp-perl_$_debver-$_debrel.debian.tar.xz" + "LICENSE") +sha512sums=('dbf6182d4813ff7e355ea1713c748bfdf8290040a93f123acec645c7a1733fe457ab6e0ab51c4ec83cf82bc43d7fb35cbf89875df7b5c2ffc9635e85458cfeee' + 'ca94d2c46469eafc27e8a03cdb03aa19ab1e86841ba2dd05c75633e7f96f563337304a0f88bc3cada50743f1f69334e1103bd5c85cf3f2a311350aa2f4ad5d32' + 'd93491d6be05ecb4ccd27ae56915562d81ba436486a36c7b4e4d48608db98f9be1bb5f795cac9ba9ad9e9789c28b48d92373f3dc18a23e087149f0a6f04b67d9') + +prepare() { + cd "$srcdir"/Parse-Yapp-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/Parse-Yapp-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Parse-Yapp-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-path-class/PKGBUILD b/perl-path-class/PKGBUILD new file mode 100644 index 0000000..406376c --- /dev/null +++ b/perl-path-class/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. +# Packager (Arch): Justin "juster" Davis + +pkgname=perl-path-class +pkgver=0.37 +pkgrel=1 +pkgdesc="Cross-platform path specification manipulation" +arch=('any') +license=('GPL-1') +options=(!emptydirs) +depends=('perl') +makedepends=('perl-module-build') +url="https://search.cpan.org/dist/Path-Class" +source=("https://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Path-Class-${pkgver}.tar.gz") +sha512sums=('044d86f85eebff96bdff8fc11e97884eb4e06d56ecd2d3bfdc045135da6f08c40e644e0e5c1a779a8ef5d6c7c04e159e47721b4e637a92fed7d298b5f798ef83') + +build() +( + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor" \ + PERL_MB_OPT="--installdirs vendor" \ + MODULEBUILDRC=/dev/null + cd Path-Class-${pkgver} + /usr/bin/perl Build.PL + ./Build +) + +package() { + export PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" + + cd Path-Class-${pkgver} + ./Build install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-perl4-corelibs/LICENSE b/perl-perl4-corelibs/LICENSE new file mode 100644 index 0000000..1fee836 --- /dev/null +++ b/perl-perl4-corelibs/LICENSE @@ -0,0 +1,29 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Perl4-CoreLibs +Upstream-Contact: Andrew Main (Zefram) +Source: https://metacpan.org/release/Perl4-CoreLibs + +Files: * +Copyright: 1987-2009 Larry Wall et al + 2010, 2011, 2017 Andrew Main (Zefram) +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2011, Dominic Hargreaves +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-perl4-corelibs/PKGBUILD b/perl-perl4-corelibs/PKGBUILD new file mode 100644 index 0000000..9c282ef --- /dev/null +++ b/perl-perl4-corelibs/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=perl-perl4-corelibs +pkgver=0.004 +pkgrel=1 +pkgdesc='Libraries historically supplied with Perl 4' +arch=('any') +url='https://metacpan.org/release/Perl4-CoreLibs' +license=('GPL-1') +depends=('perl') +makedepends=('perl-module-build') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-$pkgver.tar.gz" + "LICENSE") +sha512sums=('71083f1640e95559ee4bc5a7f1bbe6beacec048a073e211ab7f6ee4de26463f6ae3d87e99e00a41ea8f2f93a5e96367bafe907ef3367e400de35123c22eb7b88' + '0ee4b8096f61df4a35d239d8140b4f795715cd3d4e3a2a250046a3677d83080ebeb09d6905091431b390d94a226328a23cbdc3180dfbec7890168a02b9408143') + +prepare() { + cd Perl4-CoreLibs-$pkgver + + # issue in testsuite - delay issue until 2040 + # https://rt.cpan.org/Public/Bug/Display.html?id=131341 + sed -i "s#< 70#< 90#" t/timelocal.t +} + +build() { + cd Perl4-CoreLibs-$pkgver + perl Build.PL + ./Build +} + +package() { + cd Perl4-CoreLibs-$pkgver + ./Build install installdirs=vendor destdir="$pkgdir" + install -Dm644 "$srcdir"/LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-pod-coverage/COPYING b/perl-pod-coverage/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-pod-coverage/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-pod-coverage/PKGBUILD b/perl-pod-coverage/PKGBUILD new file mode 100644 index 0000000..51ff0d9 --- /dev/null +++ b/perl-pod-coverage/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-pod-coverage +pkgver=0.23 +pkgrel=2 +pkgdesc="Checks if the documentation of a module is comprehensive" +arch=('any') +url="http://search.cpan.org/dist/Pod-Coverage" +license=('GPL-1') +depends=('perl-devel-symdump>=2.01') +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/R/RC/RCLAMP/Pod-Coverage-$pkgver.tar.gz + COPYING) +sha512sums=('64760bcaf37b22a1308b665bcccb9273e3f7d12c9a96e4a2c4a0fddd4b528e2b476dcfeb654dc52ef3f40f64f2e7a1e860647f139dc53909c7696f406b7a312e' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "$srcdir"/Pod-Coverage-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Pod-Coverage-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 ../COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-role-tiny/PKGBUILD b/perl-role-tiny/PKGBUILD new file mode 100644 index 0000000..420fb29 --- /dev/null +++ b/perl-role-tiny/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname='perl-role-tiny' +pkgver=2.002004 +pkgrel=1 +pkgdesc="Roles. Like a nouvelle cuisine portion size slice of Moose." +arch=('any') +license=('GPL-1') +url='https://search.cpan.org/dist/Role-Tiny/' +options=('!emptydirs') +depends=('perl') +source=("https://search.cpan.org/CPAN/authors/id/H/HA/HAARG/Role-Tiny-$pkgver.tar.gz") +sha512sums=('f66a799a0cd4e989adc173f6d913967df7aa6b9ffda934c2a80c0a91dcfe4edce606bd27cf1b4d857d52d0aa770224315ae4e915e4e735c6a9483a6cf5ce02f1') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null + + cd "$srcdir/Role-Tiny-$pkgver" + perl Makefile.PL + make + ) +} + +package() { + cd "$srcdir/Role-Tiny-$pkgver" + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-sdl/PKGBUILD b/perl-sdl/PKGBUILD new file mode 100644 index 0000000..5d133aa --- /dev/null +++ b/perl-sdl/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=perl-sdl +pkgver=2.548 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Simple DirectMedia Layer for Perl" +arch=('i686' 'x86_64') +license=('GPL-1' 'GPL-2') +url='https://metacpan.org/dist/SDL' +depends=('perl>=5.008' 'perl-alien-sdl>=1.446' 'perl-cpan>=1.92' + 'perl-file-sharedir>=1.00' 'perl-tie-simple' + 'sdl_net' 'sdl_ttf' 'sdl_image' 'sdl_mixer' 'sdl_gfx' + 'sdl_pango' 'smpeg') +makedepends=('perl-capture-tiny' 'perl-extutils-cbuilder' + 'perl-module-build>=0.40' 'perl-test-most>=0.21' + 'quilt') +options=('!emptydirs') +_cpan_author='FROGGS' +source=("https://cpan.metacpan.org/authors/id/${_cpan_author::1}/${_cpan_author::2}/$_cpan_author/SDL-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libs/libsdl-perl/libsdl-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('bafc49dddb7e592861f822920915c73bf0c5eea3a6c567623b48a2332c7644caf1451e457545e6666adea5e314b23bcd85a3f3a52c770abfd498c0e4c0feae85' + '9e6a7938ed50bc0d35bca55d2b30627e16651d927a4d1f3d7785e9aee26320a812b509a325016914acd8ebfe23f6f2f785e81a6c8cac84d6aa46ef00982f6126') + +prepare() { + cd SDL-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd SDL-$pkgver + # Perl selects the proper CFLAGS set for binary modules + unset CFLAGS + # install module in vendor directories + perl Build.PL installdirs=vendor + perl Build +} + +package() { + cd SDL-$pkgver + perl Build install destdir="$pkgdir" + install -Dm644 COPYING debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-sgmls/PKGBUILD b/perl-sgmls/PKGBUILD new file mode 100644 index 0000000..acc1368 --- /dev/null +++ b/perl-sgmls/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +_cpanname=SGMLSpm +pkgname=perl-sgmls +epoch=1 +pkgver=1.1 +_debver=1.03ii +_debrel=36 +pkgrel=3 +pkgdesc="A Post-Processor for SGMLS and NSGMLS" +arch=('any') +url="https://search.cpan.org/dist/SGMLSpm" +license=('GPL-2') +depends=('perl') +makedepends=('quilt') +options=('!emptydirs' 'docs') +source=(https://search.cpan.org/CPAN/authors/id/R/RA/RAAB/SGMLSpm-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libs/libsgmls-perl/libsgmls-perl_$_debver-$_debrel.debian.tar.xz) +sha512sums=('0ca3f0f3265f20661ae88ad4764fbf82f226382f79f62c01653265cc7372524dfdf30ce5abffc0344624f5e6138e483952471f8c18d59794b40035af0b7526bc' + '1cbaff68aaafbb057455cb032845afd73be35d789e4199d7cc7d34ea4604f00906b8adec0bfd3e139bc227c06cf047e1de9bdfc8cdfcbd28d08cd04b92c3136f') + +prepare() { + cd "$srcdir/$_cpanname-$pkgver" + find . -type f -exec chmod 0644 {} \; + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +prepareEnvironment() { + cd "$srcdir/$_cpanname-$pkgver" + export \ + PERL_MM_USE_DEFAULT=1 \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null +} + +build() { + prepareEnvironment + /usr/bin/perl Makefile.PL + make +} + +check() { + prepareEnvironment + make test +} + +package() { + prepareEnvironment + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + + # FS#51874 + ln -sv /usr/bin/vendor_perl/sgmlspl.pl $pkgdir/usr/bin/sgmlspl + + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-socket6/LICENSE.BSD3 b/perl-socket6/LICENSE.BSD3 new file mode 100644 index 0000000..cefd62e --- /dev/null +++ b/perl-socket6/LICENSE.BSD3 @@ -0,0 +1,32 @@ +Copyright (C) 2000-2018 Hajimu UMEMOTO . +All rights reserved. + +This module is based on perl5.005_55-v6-19990721 written by KAME +Project. + +Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/perl-socket6/LICENSE.ISC b/perl-socket6/LICENSE.ISC new file mode 100644 index 0000000..8a9945b --- /dev/null +++ b/perl-socket6/LICENSE.ISC @@ -0,0 +1,14 @@ +Copyright (C) 1996-2001 Internet Software Consortium. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM +DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/perl-socket6/PKGBUILD b/perl-socket6/PKGBUILD new file mode 100644 index 0000000..6675f65 --- /dev/null +++ b/perl-socket6/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=perl-socket6 +pkgver=0.29 +_debver=0.29 +_debrel=1 +pkgrel=1 +pkgdesc="A getaddrinfo/getnameinfo support module" +arch=('i686' 'x86_64') +url='http://search.cpan.org/dist/Socket6' +license=('Modified-BSD' 'ISC') +depends=('perl') +makedepends=('quilt') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/U/UM/UMEMOTO/Socket6-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libs/libsocket6-perl/libsocket6-perl_$_debver-$_debrel.debian.tar.gz + LICENSE.BSD3 + LICENSE.ISC) +sha512sums=('51d05a04563519010f515a50fb1082c4e72eb4537137ad55f117458c71ec8429a5674083bd68adcbbf2e57632a1cb1bf60693ea98364e7f96c826ff8c9655b33' + '7a673a47b1ff380c4a8f8c292000704f304e52daa4cc2d066eb69d19742ce194b7169be0d2da75c1eefefd0ffbbcebdcce0db29cefef2a1f042e21fadb6f2b04' + 'daba6aae06f47ca935da7a9fb9385c5da24dfcb17772393cb55460db5e19c1c3f981599087b134410ef85cf14c67d01c9b256223a564e4621da050d8aa043044' + '46dfd9cc6642b7049c1643aca7b47b0c26af2e9018e18c946e0898c113bd952fb3148497a73403e84a7d01ab25c99ed4732ddbca64c781033d8dd02169db6876') + +prepare() { + cd Socket6-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd Socket6-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd Socket6-$pkgver + make test +} + +package() { + cd Socket6-$pkgver + make DESTDIR="$pkgdir" install + for i in BSD3 ISC; do + install -Dm644 $srcdir/LICENSE.$i $pkgdir/usr/share/licenses/$pkgname/LICENSE.$i + done +} diff --git a/perl-sort-versions/PKGBUILD b/perl-sort-versions/PKGBUILD new file mode 100644 index 0000000..01b0328 --- /dev/null +++ b/perl-sort-versions/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=perl-sort-versions +pkgver=1.62 +pkgrel=2 +pkgdesc="Sort::Versions - a perl 5 module for sorting of revision-like numbers" +arch=('any') +url='https://search.cpan.org/dist/Sort-Versions/' +license=(GPL-1) +depends=(perl) +options=(!emptydirs) +source=(https://search.cpan.org/CPAN/authors/id/N/NE/NEILB/Sort-Versions-$pkgver.tar.gz) +sha512sums=('b30dab96a5a31023af3ecee1857ae7bf5abc45b266294b47abb4f03c332b27825c1139d1a56bf0cfbd538487d28b3be167d83f9f5a93f079717b40157abe4d96') +unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT +export PERL_MM_USE_DEFAULT=1 + +build(){ + cd "$srcdir/Sort-Versions-$pkgver" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd Sort-Versions-$pkgver + make test +} + +package() { + cd Sort-Versions-$pkgver + make install DESTDIR="$pkgdir/" + # remove perllocal.pod and .packlist + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-sub-exporter/PKGBUILD b/perl-sub-exporter/PKGBUILD new file mode 100644 index 0000000..19c2c66 --- /dev/null +++ b/perl-sub-exporter/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=perl-sub-exporter +pkgver=0.987 +pkgrel=1 +pkgdesc="A sophisticated exporter for custom-built routines" +arch=('any') +license=('GPL-1') +url='https://metacpan.org/release/Sub-Exporter' +options=('!emptydirs') +depends=('perl' 'perl-data-optlist' 'perl-params-util' 'perl-sub-install') +source=(https://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Sub-Exporter-$pkgver.tar.gz) +sha512sums=('6b682d27a0df8ce971ea48aeca5162e1c70929c51cf27119b30361477876b0b86ecb15ab13a6c3cbe5bb85be9e600589fb9e3c9c4e94bad3fc05b675d293adad') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL="--skipdeps" \ + PERL_MM_OPT="INSTALLDIRS=vendor" \ + PERL_MB_OPT="--installdirs vendor" \ + MODULEBUILDRC=/dev/null + + cd "$srcdir"/Sub-Exporter-$pkgver + + /usr/bin/perl Makefile.PL + make + ) +} + +package() { + cd "$srcdir"/Sub-Exporter-$pkgver + + make DESTDIR="$pkgdir"/ install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-sub-install/PKGBUILD b/perl-sub-install/PKGBUILD new file mode 100644 index 0000000..4b83522 --- /dev/null +++ b/perl-sub-install/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. +# Maintainter: Tobias Dausend + +pkgname=perl-sub-install +pkgver=0.928 +pkgrel=1 +pkgdesc="Install subroutines into packages easily" +arch=('any') +url="https://metacpan.org/release/Sub-Install" +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Sub-Install-$pkgver.tar.gz) +sha512sums=('3f25df9f5992075968830d4235e9f6520c526331b9180391e41483241d43253a61ad8dc381d77aaeb6c6fb841cfc5c097598e62abb46208894275c393a133ade') + +build() { + cd Sub-Install-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Sub-Install-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/perl-sub-override/LICENSE b/perl-sub-override/LICENSE new file mode 100644 index 0000000..e12eedf --- /dev/null +++ b/perl-sub-override/LICENSE @@ -0,0 +1,32 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Sub-Override +Upstream-Contact: Curtis "Ovid" Poe +Source: https://metacpan.org/release/Sub-Override + +Files: * +Copyright: © 2004-2005, Curtis "Ovid" Poe +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: + © 2004-2005, Kenneth J. Pronovici + © 2006, Víctor Pérez Pereira + © 2010, Ansgar Burchardt + © 2013, Florian Schlichting +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-sub-override/PKGBUILD b/perl-sub-override/PKGBUILD new file mode 100644 index 0000000..2ebec1d --- /dev/null +++ b/perl-sub-override/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-sub-override +_cpanname=Sub-Override +pkgver=0.09 +pkgrel=1 +pkgdesc="Perl extension for easily overriding subroutines" +url='https://search.cpan.org/dist/Term-ExtendedColor' +arch=('any') +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/O/OV/OVID/${_cpanname}-${pkgver}.tar.gz + LICENSE) +sha512sums=('35000e8cabb6ca4cc0cac53af99fc9cb8ac14b1e71dbfa27dc58a339cb1b54e439064f2241798e351cc5ad297a2f9e4fde870ca97e2eb09a2430c11af589d412' + 'b931d1b781ebffe7e69fd935051687607b20efd0311e41006dad114593cd8e4ac05f600acbe414a80ccaa1cb1301f419c2a887329e1e5afe796a0a0d55249b02') + +build() { + cd ${_cpanname}-${pkgver} + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ${_cpanname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 README* -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-sub-uplevel/PKGBUILD b/perl-sub-uplevel/PKGBUILD new file mode 100644 index 0000000..96d49e1 --- /dev/null +++ b/perl-sub-uplevel/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-sub-uplevel +pkgver=0.2800 +pkgrel=1 +pkgdesc="apparently run a function in a higher stack frame" +arch=('any') +url='https://search.cpan.org/dist/Sub-Uplevel' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/D/DA/DAGOLDEN/Sub-Uplevel-$pkgver.tar.gz) +sha512sums=('655bab9441bc81e4002db2e715b5c1f771ee35a03bc643a44d4a279aca55431fe17e64332919311a51db2dc02c16b5f97c5751595e61ad0ab96cd0a10ac2d230') + +build() { + cd "$srcdir"/Sub-Uplevel-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Sub-Uplevel-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-sys-hostname-long/PKGBUILD b/perl-sys-hostname-long/PKGBUILD new file mode 100644 index 0000000..d15bf92 --- /dev/null +++ b/perl-sys-hostname-long/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=perl-sys-hostname-long +_realname=Sys-Hostname-Long +pkgver=1.5 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Perl module getting a full hostname" +arch=('any') +license=('GPL-1') +url='https://search.cpan.org/dist/Sys-Hostname-Long/' +depends=('perl') +makedepends=('quilt') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/S/SC/SCOTT/${_realname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libs/libsys-hostname-long-perl/libsys-hostname-long-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e34a5f17e65eb9c8d3aa213a6d930be4d0b6981dae3bf600e782b0e9863e6584061285a894f9f54daff7520bcadbb3e8cd6b1f9f973ad1c1b72c79e9f588133b' + '60f860d6d2fd0fac137452e9c9f9ee2c6459737bf0dcb04b6af0a4000cb29daa9e3d7adf1c41ea8b978579573430005526b1e557b88eef7619913773ffee2670') + +prepare() { + cd "${srcdir}/${_realname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${_realname}-${pkgver}" + # install module in vendor directories. + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}/${_realname}-${pkgver}" + make install DESTDIR="${pkgdir}" + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-term-animation/LICENSE b/perl-term-animation/LICENSE new file mode 100644 index 0000000..89629e6 --- /dev/null +++ b/perl-term-animation/LICENSE @@ -0,0 +1,379 @@ +This software is copyright (c) 2014 by chromatic@wgz.org. + +This is free software; you can redistribute it and/or modify it under +the same terms as the Perl 5 programming language system itself. + +Terms of the Perl programming language system itself + +a) the GNU General Public License as published by the Free + Software Foundation; either version 1, or (at your option) any + later version, or +b) the "Artistic License" + +--- The GNU General Public License, Version 1, February 1989 --- + +This software is Copyright (c) 2014 by chromatic@wgz.org. + +This is free software, licensed under: + + The GNU General Public License, Version 1, February 1989 + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! + + +--- The Artistic License 1.0 --- + +This software is Copyright (c) 2014 by chromatic@wgz.org. + +This is free software, licensed under: + + The Artistic License 1.0 + +The Artistic License + +Preamble + +The intent of this document is to state the conditions under which a Package +may be copied, such that the Copyright Holder maintains some semblance of +artistic control over the development of the package, while giving the users of +the package the right to use and distribute the Package in a more-or-less +customary fashion, plus the right to make reasonable modifications. + +Definitions: + + - "Package" refers to the collection of files distributed by the Copyright + Holder, and derivatives of that collection of files created through + textual modification. + - "Standard Version" refers to such a Package if it has not been modified, + or has been modified in accordance with the wishes of the Copyright + Holder. + - "Copyright Holder" is whoever is named in the copyright or copyrights for + the package. + - "You" is you, if you're thinking about copying or distributing this Package. + - "Reasonable copying fee" is whatever you can justify on the basis of media + cost, duplication charges, time of people involved, and so on. (You will + not be required to justify it to the Copyright Holder, but only to the + computing community at large as a market that must bear the fee.) + - "Freely Available" means that no fee is charged for the item itself, though + there may be fees involved in handling the item. It also means that + recipients of the item may redistribute it under the same conditions they + received it. + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you +duplicate all of the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications derived +from the Public Domain or from the Copyright Holder. A Package modified in such +a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided that +you insert a prominent notice in each changed file stating how and when you +changed that file, and provided that you do at least ONE of the following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or an + equivalent medium, or placing the modifications on a major archive site + such as ftp.uu.net, or by allowing the Copyright Holder to include your + modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict with + standard executables, which must also be provided, and provide a separate + manual page for each non-standard executable that clearly documents how it + differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or executable +form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where to + get the Standard Version. + + b) accompany the distribution with the machine-readable source of the Package + with your modifications. + + c) accompany any non-standard executables with their corresponding Standard + Version executables, giving the non-standard executables non-standard + names, and clearly documenting the differences in manual pages (or + equivalent), together with instructions on where to get the Standard + Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this +Package. You may charge any fee you choose for support of this Package. You +may not charge a fee for this Package itself. However, you may distribute this +Package in aggregate with other (possibly commercial) programs as part of a +larger (possibly commercial) software distribution provided that you do not +advertise this Package as a product of your own. + +6. The scripts and library files supplied as input to or produced as output +from the programs of this Package do not automatically fall under the copyright +of this Package, but belong to whomever generated them, and may be sold +commercially, and may be aggregated with this Package. + +7. C or perl subroutines supplied by you and linked into this Package shall not +be considered part of this Package. + +8. The name of the Copyright Holder may not be used to endorse or promote +products derived from this software without specific prior written permission. + +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF +MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The End + diff --git a/perl-term-animation/PKGBUILD b/perl-term-animation/PKGBUILD new file mode 100644 index 0000000..62f822e --- /dev/null +++ b/perl-term-animation/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-term-animation +pkgver=2.6 +pkgrel=1 +pkgdesc='Perl/CPAN Module Term::Animation' +arch=('any') +url='https://search.cpan.org/dist/Term-Animation' +license=('GPL-1') +depends=('perl-curses') +source=("https://www.cpan.org/authors/id/K/KB/KBAUCOM/Term-Animation-$pkgver.tar.gz" + "LICENSE") +sha512sums=('5d2c3e18e70d19fead2a2ad2d09bfb03f3f3d569f472ea43449799c089254a14ee9c4e695d5c93bda2a30d6e7538566c16a522ceac3c747a5cf0e522f21f1e18' + '69a4fcc25a2b6e2dfe09d4c075529e93c83937c6ae65933528620e33e4983391ba32f3a135747a8395d6e6f17898560257e800cbea9076a66d8bdf90fb15aa07') + +build() { + cd "$srcdir"/Term-Animation-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Term-Animation-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "${srcdir}"/LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-term-readkey/COPYING b/perl-term-readkey/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-term-readkey/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-term-readkey/PKGBUILD b/perl-term-readkey/PKGBUILD new file mode 100644 index 0000000..4fe302b --- /dev/null +++ b/perl-term-readkey/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=perl-term-readkey +_realname=TermReadKey +pkgver=2.38 +pkgrel=1 +pkgdesc="Provides simple control over terminal driver modes" +arch=('i686' 'x86_64') +license=('GPL-1') +depends=('perl' 'glibc') +url="https://search.cpan.org/~jstowe/${_realname}/" +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/${_realname}-$pkgver.tar.gz + COPYING) +sha512sums=('fb09f013f9f0d8a4397e39f6f3db7a6d023259219af8f76744094e396437a01b19141b3cdb39a158d3b518903fb010088bc37406763bfbeb3fcab810bb0bb157' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "${srcdir}/TermReadKey-$pkgver" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd "${srcdir}/TermReadKey-$pkgver" + make test +} + +package() { + cd "${srcdir}/TermReadKey-$pkgver" + make DESTDIR="${pkgdir}" install + install -d "${pkgdir}/usr/share/licenses/$pkgname/" + head -7 README > "${pkgdir}/usr/share/licenses/$pkgname/README" + install -m644 ../COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/perl-term-readline-gnu/COPYING b/perl-term-readline-gnu/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-term-readline-gnu/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-term-readline-gnu/PKGBUILD b/perl-term-readline-gnu/PKGBUILD new file mode 100644 index 0000000..98a27f3 --- /dev/null +++ b/perl-term-readline-gnu/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=perl-term-readline-gnu +pkgver=1.37 +pkgrel=2 +_debver=1.37 +_debrel=1 +pkgdesc="GNU Readline XS library wrapper" +arch=('i686' 'x86_64') +url='https://search.cpan.org/dist/Term-ReadLine-Gnu' +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +makedepends=('quilt' 'gettext-tiny') +source=("https://search.cpan.org/CPAN/authors/id/H/HA/HAYASHI/Term-ReadLine-Gnu-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libt/libterm-readline-gnu-perl/libterm-readline-gnu-perl_${_debver}-${_debrel}.debian.tar.xz" + 'COPYING') +sha512sums=('e2ada2104a9efef56dcda9999348674e0ba72bb5ece74961342a8d00fd66990fb471ef2f2af75cddce4c1d0210f9e219f017de08c1cc2c4ade7878b25b8c5915' + '11b668e688a08e2c6849bb83a416dc0d9d4c425656564ca153fa99a3cdd83962a6e8a18c62e704b58a140b740fc2f62a36c7c64a6b1ef2698123776c009f7ebe' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +prepare() { + cd "Term-ReadLine-Gnu-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor" \ + PERL_MB_OPT="--installdirs vendor" \ + MODULEBUILDRC=/dev/null + + cd "Term-ReadLine-Gnu-${pkgver}" + perl Makefile.PL + make +} + +check() { + cd "Term-ReadLine-Gnu-${pkgver}" + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" + make test +} + +package() { + cd "Term-ReadLine-Gnu-${pkgver}" + make pure_install PERL_INSTALL_ROOT="${pkgdir}" + find "${pkgdir}" -name .packlist -o -name perllocal.pod -delete + install -D -m644 "${srcdir}/COPYING" "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-test-deep/COPYING b/perl-test-deep/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-test-deep/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-test-deep/PKGBUILD b/perl-test-deep/PKGBUILD new file mode 100644 index 0000000..7f5e472 --- /dev/null +++ b/perl-test-deep/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-deep +pkgver=1.130 +pkgrel=2 +pkgdesc="Extremely flexible deep comparison" +arch=('any') +url='https://search.cpan.org/dist/Test-Deep' +license=('GPL-1') +depends=('perl-test-nowarnings') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Test-Deep-$pkgver.tar.gz + COPYING) +sha512sums=('de34197c97d44c68dd43372fa5a4d905a2ad636b5503c5f1443476a85b921f42cd07d475af8901dfee9deff1f29deef440c1783cdcc7f93c5f5030c4548ff9cf' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "$srcdir"/Test-Deep-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Test-Deep-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 ../COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-test-differences/LICENSE b/perl-test-differences/LICENSE new file mode 100644 index 0000000..7138a2b --- /dev/null +++ b/perl-test-differences/LICENSE @@ -0,0 +1,34 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Test-Differences +Upstream-Contact: David Cantrell +Source: https://metacpan.org/release/Test-Differences + +Files: * +Copyright: 2001-2008, Barrie Slaymaker + 2008, Curtis "Ovid" Poe + 2014-2019, David Cantrell +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2003-2004, Jay Bonci + 2008, Damyan Ivanov + 2009, Ignace Mouzannar + 2011, Nicholas Bamber + 2011-2019, gregor herrmann +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-test-differences/PKGBUILD b/perl-test-differences/PKGBUILD new file mode 100644 index 0000000..e761152 --- /dev/null +++ b/perl-test-differences/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-differences +_realpkgname=Test-Differences +pkgver=0.67 +pkgrel=1 +pkgdesc="Perl/CPAN Module Test::Differences" +license=('GPL-1') +url='https://search.cpan.org/dist/Test-Differences' +arch=('any') +depends=('perl-text-diff') +source=("https://search.cpan.org/CPAN/authors/id/D/DC/DCANTRELL/${_realpkgname}-${pkgver}.tar.gz" + "LICENSE") +sha512sums=('72f5e70d5ed953f50e7fff36645612b8e531354a217de5e7780ee76d72c95e1aed1f1f23a1aaf447b2893246d0c8d0452f2946afa820966d85b2c99dcf9b5ed9' + 'b51433787beee8ea7f6a6da3262e0bd5a5427ffc8b0d115a106b32cd2fb1566258f2d5400f9cffaf58460972ed673a8ff92bd314f6d684a3fdb9f93ef0aeb201') + +build() { + cd "$srcdir"/$_realpkgname-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/$_realpkgname-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-test-exception/LICENSE b/perl-test-exception/LICENSE new file mode 100644 index 0000000..c6adc10 --- /dev/null +++ b/perl-test-exception/LICENSE @@ -0,0 +1,32 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Test-Exception +Upstream-Contact: Adrian Howard +Source: https://metacpan.org/release/Test-Exception + +Files: * +Copyright: 2002-2007, Adrian Howard +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2003-2007, Jay Bonci + 2008-2016, gregor herrmann + 2010, Jonathan Yu + 2013, Florian Schlichting + 2015, Lucas Kanashiro +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-test-exception/PKGBUILD b/perl-test-exception/PKGBUILD new file mode 100644 index 0000000..0522e55 --- /dev/null +++ b/perl-test-exception/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-exception +_realpkgname=Test-Exception +pkgver=0.43 +pkgrel=1 +pkgdesc="Perl/CPAN Module Test::Exception : Functions for testing exceptionbased code" +arch=('any') +url='https://search.cpan.org/dist/Test-Exception/' +license=('GPL-1') +depends=("perl-sub-uplevel") +source=("https://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/${_realpkgname}-${pkgver}.tar.gz" + "LICENSE") +sha512sums=('f5ab65ce7b142ab7a96b0075838826a7f6b975a151a285e00d99db307bea07b359d5ca44eb678ba93d97b2ae37a112f0002ae1c06bb6e5654b80ce8c5473aa20' + '93aafec318a59929dd3a54a402497ac8fbe0ed9a60ba031124ebb8f37efa27e8066cb8b1593e492252c7bf416cc7a8e7696b3f5bac4df7c556b168bdfaa52d86') + +build() { + cd "$srcdir"/$_realpkgname-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/$_realpkgname-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-test-fatal/PKGBUILD b/perl-test-fatal/PKGBUILD new file mode 100644 index 0000000..e13570d --- /dev/null +++ b/perl-test-fatal/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-fatal +pkgver=0.014 +pkgrel=2 +pkgdesc="Incredibly simple helpers for testing code with exceptions" +arch=('any') +url="https://metacpan.org/release/Test-Fatal" +license=('GPL-1') +depends=('perl-try-tiny') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Test-Fatal-$pkgver.tar.gz) +sha512sums=('339d9b33231f8c8d93c0f9374a51458d004568a2f3e28471976e954c35d27efd348f68fb56e3cabd11dc47d37e7ce46282eba967c156ba5081811d221c6a7523') + +build() { + cd "$srcdir/Test-Fatal-$pkgver" + perl Makefile.PL + make +} + +check() { + cd "$srcdir/Test-Fatal-$pkgver" + make test +} + +package() { + cd "$srcdir/Test-Fatal-$pkgver" + make INSTALLDIRS=vendor DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-test-most/LICENSE b/perl-test-most/LICENSE new file mode 100644 index 0000000..60ec3d5 --- /dev/null +++ b/perl-test-most/LICENSE @@ -0,0 +1,30 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Test-Most +Upstream-Contact: Curtis Poe +Source: https://metacpan.org/release/Test-Most + +Files: * +Copyright: 2008, Curtis Poe +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2009, Damyan Ivanov + 2010-2012, Salvatore Bonaccorso + 2012-2014, Florian Schlichting +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-test-most/PKGBUILD b/perl-test-most/PKGBUILD new file mode 100644 index 0000000..585c0e9 --- /dev/null +++ b/perl-test-most/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-most +_realpkgname=Test-Most +pkgver=0.37 +pkgrel=1 +pkgdesc="Most commonly needed test functions and features" +arch=('any') +url='https://metacpan.org/release/Test-Most' +license=('GPL-1') +depends=('perl' 'perl-exception-class' 'perl-test-deep' 'perl-test-differences' + 'perl-test-exception' 'perl-test-warn') +options=(!emptydirs) +_archive="$_realpkgname-$pkgver" +source=("https://cpan.perl.org/modules/by-module/${_realpkgname%-*}/$_archive.tar.gz" + "LICENSE") +sha512sums=('133dbb9815884fbecd65520dd2f2d43a761439c33f7d32ffdfc80ed3d3e05fb563dca420cf5445e61382735a048c467b35b5c160b1013b5f5c7616be00aa328d' + 'e8457ed83eec98751713ffe6b8edf64bd0fb0959065184f7de6230495a9e3c66b137ae3e3164d7c81d98e979c1d2bc63b8b8d1106d15816d26e9f0582688b6ae') + +build() { + cd "$_archive" + unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL + make +} + +package() { + cd "$_archive" + unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-test-needs/PKGBUILD b/perl-test-needs/PKGBUILD new file mode 100644 index 0000000..fc51b0f --- /dev/null +++ b/perl-test-needs/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-needs +pkgver=0.002006 +pkgrel=1 +pkgdesc="Skip tests when modules not available" +arch=('any') +license=('GPL-1') +url="https://metacpan.org/release/Test-Needs" +depends=('perl') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/H/HA/HAARG/Test-Needs-$pkgver.tar.gz") +sha512sums=('d0c1c527f486250a5c1e4b6e34e4ddcb1e7ab9233f9535b877cc36c8577592be28bf5f78567f45ec0388b276333742d1d15d7841827b64a8d170f475bd4488b7') + +build() { + cd Test-Needs-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd Test-Needs-$pkgver + make test +} + +package() { + cd Test-Needs-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-test-nowarnings/PKGBUILD b/perl-test-nowarnings/PKGBUILD new file mode 100644 index 0000000..0a5e2ea --- /dev/null +++ b/perl-test-nowarnings/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-nowarnings +pkgver=1.04 +pkgrel=5 +pkgdesc="Make sure you didn't emit any warnings while testing" +arch=('any') +url='https://search.cpan.org/dist/Test-NoWarnings' +license=('LGPL-2.1') +depends=('perl') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Test-NoWarnings-$pkgver.tar.gz) +sha512sums=('48126d2385e6f7863067f541763f64bc72132f6093f316f75d15ad7dca9b863dc469dff18c6e3f93105647844acb5cd10e4d056d3aa19217cb9588eb8a5f0d7a') + +build() { + cd "$srcdir"/Test-NoWarnings-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Test-NoWarnings-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/perl-test-pod-coverage/COPYING b/perl-test-pod-coverage/COPYING new file mode 100644 index 0000000..9d00de5 --- /dev/null +++ b/perl-test-pod-coverage/COPYING @@ -0,0 +1,201 @@ + The Artistic License 2.0 + + Copyright (c) 2000-2006, The Perl Foundation. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + +This license establishes the terms under which a given free software +Package may be copied, modified, distributed, and/or redistributed. +The intent is that the Copyright Holder maintains some artistic +control over the development of that Package while still keeping the +Package available as open source and free software. + +You are always permitted to make arrangements wholly outside of this +license directly with the Copyright Holder of a given Package. If the +terms of this license do not permit the full use that you propose to +make of the Package, you should contact the Copyright Holder and seek +a different licensing arrangement. + +Definitions + + "Copyright Holder" means the individual(s) or organization(s) + named in the copyright notice for the entire Package. + + "Contributor" means any party that has contributed code or other + material to the Package, in accordance with the Copyright Holder's + procedures. + + "You" and "your" means any person who would like to copy, + distribute, or modify the Package. + + "Package" means the collection of files distributed by the + Copyright Holder, and derivatives of that collection and/or of + those files. A given Package may consist of either the Standard + Version, or a Modified Version. + + "Distribute" means providing a copy of the Package or making it + accessible to anyone else, or in the case of a company or + organization, to others outside of your company or organization. + + "Distributor Fee" means any fee that you charge for Distributing + this Package or providing support for this Package to another + party. It does not mean licensing fees. + + "Standard Version" refers to the Package if it has not been + modified, or has been modified only in ways explicitly requested + by the Copyright Holder. + + "Modified Version" means the Package, if it has been changed, and + such changes were not explicitly requested by the Copyright + Holder. + + "Original License" means this Artistic License as Distributed with + the Standard Version of the Package, in its current version or as + it may be modified by The Perl Foundation in the future. + + "Source" form means the source code, documentation source, and + configuration files for the Package. + + "Compiled" form means the compiled bytecode, object code, binary, + or any other form resulting from mechanical transformation or + translation of the Source form. + + +Permission for Use and Modification Without Distribution + +(1) You are permitted to use the Standard Version and create and use +Modified Versions for any purpose without restriction, provided that +you do not Distribute the Modified Version. + + +Permissions for Redistribution of the Standard Version + +(2) You may Distribute verbatim copies of the Source form of the +Standard Version of this Package in any medium without restriction, +either gratis or for a Distributor Fee, provided that you duplicate +all of the original copyright notices and associated disclaimers. At +your discretion, such verbatim copies may or may not include a +Compiled form of the Package. + +(3) You may apply any bug fixes, portability changes, and other +modifications made available from the Copyright Holder. The resulting +Package will still be considered the Standard Version, and as such +will be subject to the Original License. + + +Distribution of Modified Versions of the Package as Source + +(4) You may Distribute your Modified Version as Source (either gratis +or for a Distributor Fee, and with or without a Compiled form of the +Modified Version) provided that you clearly document how it differs +from the Standard Version, including, but not limited to, documenting +any non-standard features, executables, or modules, and provided that +you do at least ONE of the following: + + (a) make the Modified Version available to the Copyright Holder + of the Standard Version, under the Original License, so that the + Copyright Holder may include your modifications in the Standard + Version. + + (b) ensure that installation of your Modified Version does not + prevent the user installing or running the Standard Version. In + addition, the Modified Version must bear a name that is different + from the name of the Standard Version. + + (c) allow anyone who receives a copy of the Modified Version to + make the Source form of the Modified Version available to others + under + + (i) the Original License or + + (ii) a license that permits the licensee to freely copy, + modify and redistribute the Modified Version using the same + licensing terms that apply to the copy that the licensee + received, and requires that the Source form of the Modified + Version, and of any works derived from it, be made freely + available in that license fees are prohibited but Distributor + Fees are allowed. + + +Distribution of Compiled Forms of the Standard Version +or Modified Versions without the Source + +(5) You may Distribute Compiled forms of the Standard Version without +the Source, provided that you include complete instructions on how to +get the Source of the Standard Version. Such instructions must be +valid at the time of your distribution. If these instructions, at any +time while you are carrying out such distribution, become invalid, you +must provide new instructions on demand or cease further distribution. +If you provide valid instructions or cease distribution within thirty +days after you become aware that the instructions are invalid, then +you do not forfeit any of your rights under this license. + +(6) You may Distribute a Modified Version in Compiled form without +the Source, provided that you comply with Section 4 with respect to +the Source of the Modified Version. + + +Aggregating or Linking the Package + +(7) You may aggregate the Package (either the Standard Version or +Modified Version) with other packages and Distribute the resulting +aggregation provided that you do not charge a licensing fee for the +Package. Distributor Fees are permitted, and licensing fees for other +components in the aggregation are permitted. The terms of this license +apply to the use and Distribution of the Standard or Modified Versions +as included in the aggregation. + +(8) You are permitted to link Modified and Standard Versions with +other works, to embed the Package in a larger work of your own, or to +build stand-alone binary or bytecode versions of applications that +include the Package, and Distribute the result without restriction, +provided the result does not expose a direct interface to the Package. + + +Items That are Not Considered Part of a Modified Version + +(9) Works (including, but not limited to, modules and scripts) that +merely extend or make use of the Package, do not, by themselves, cause +the Package to be a Modified Version. In addition, such works are not +considered parts of the Package itself, and are not subject to the +terms of this license. + + +General Provisions + +(10) Any use, modification, and distribution of the Standard or +Modified Versions is governed by this Artistic License. By using, +modifying or distributing the Package, you accept this license. Do not +use, modify, or distribute the Package, if you do not accept this +license. + +(11) If your Modified Version has been derived from a Modified +Version made by someone other than you, you are nevertheless required +to ensure that your Modified Version complies with the requirements of +this license. + +(12) This license does not grant you the right to use any trademark, +service mark, tradename, or logo of the Copyright Holder. + +(13) This license includes the non-exclusive, worldwide, +free-of-charge patent license to make, have made, use, offer to sell, +sell, import and otherwise transfer the Package with respect to any +patent claims licensable by the Copyright Holder that are necessarily +infringed by the Package. If you institute patent litigation +(including a cross-claim or counterclaim) against any party alleging +that the Package constitutes direct or contributory patent +infringement, then this Artistic License to you shall terminate on the +date that such litigation is filed. + +(14) Disclaimer of Warranty: +THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS +IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR +NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL +LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/perl-test-pod-coverage/PKGBUILD b/perl-test-pod-coverage/PKGBUILD new file mode 100644 index 0000000..170ab95 --- /dev/null +++ b/perl-test-pod-coverage/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-pod-coverage +pkgver=1.10 +pkgrel=2 +pkgdesc="CPAN Test::Pod::Coverage module" +arch=('any') +url="https://search.cpan.org/dist/Test-Pod-Coverage/" +license=('Artistic-2.0') +depends=('perl-pod-coverage') +options=(!emptydirs) +source=("https://search.cpan.org/CPAN/authors/id/N/NE/NEILB/Test-Pod-Coverage-$pkgver.tar.gz" + 'COPYING') +sha512sums=('ebcebb900f4367984245d1915937200e2de8586a6e6ea9c9b71588e56caf68808ee73c21e633434ab5c43b80b42dd56cb0cbd4e67519e928270e1eda06c1d02c' + 'c5dfd6df4c51d80bfc9e9c51d536d60dc13e3150b1d9176b80dde53bbcba2e8f35fc22f2b61664744f725eb1db990f833bf0f9c33a9df7e43ee209447b6bd4bc') + +build() { + cd "$srcdir"/Test-Pod-Coverage-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Test-Pod-Coverage-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 ../COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-test-pod/COPYING b/perl-test-pod/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-test-pod/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-test-pod/PKGBUILD b/perl-test-pod/PKGBUILD new file mode 100644 index 0000000..2b0ceb6 --- /dev/null +++ b/perl-test-pod/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-pod +pkgver=1.52 +pkgrel=1 +pkgdesc="Check for POD errors in files" +arch=('any') +url="https://search.cpan.org/dist/Test-Pod/" +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Test-Pod-${pkgver}.tar.gz + COPYING) +sha512sums=('9b078488e1da8b907f5f3a46452aa9bfd49db61f1539d076dccebf9a8b476eaf0f539f00badc9c500b1e732a8827331b2286375924986efb990367767eeb8365' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd Test-Pod-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd Test-Pod-${pkgver} + make test +} + +package() { + cd Test-Pod-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 ${srcdir}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/perl-test-requiresinternet/PKGBUILD b/perl-test-requiresinternet/PKGBUILD new file mode 100644 index 0000000..a17dadb --- /dev/null +++ b/perl-test-requiresinternet/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-requiresinternet +pkgver=0.05 +pkgrel=2 +pkgdesc="Easily test network connectivity" +arch=(any) +license=(GPL-1) +options=(!emptydirs) +depends=(perl) +url='https://search.mcpan.org/dist/Test-RequiresInternet' +source=("https://search.mcpan.org/CPAN/authors/id/M/MA/MALLEN/Test-RequiresInternet-$pkgver.tar.gz") +sha512sums=('572af3e6fdfb90df3a58ba6eaf571717b294a54fff4b3f597fd177f1eb91fb1c929cb808f8d219f692314a944cf41dc1afab41f5a0dd2185054c08fec69e66c3') +_distdir="Test-RequiresInternet-$pkgver" + +build() { + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd $_distdir + /usr/bin/perl Makefile.PL + make +} + +check() { + cd $_distdir + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" + make test +} + +package() { + cd $_distdir + make install + + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/perl-test-warn/LICENSE b/perl-test-warn/LICENSE new file mode 100644 index 0000000..1f9328a --- /dev/null +++ b/perl-test-warn/LICENSE @@ -0,0 +1,34 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Test-Warn +Upstream-Contact: Janek Schleicher +Source: https://metacpan.org/release/Test-Warn + +Files: * +Copyright: + 2002, 2015-2018, Janek Schleicher + 2007-2016, Alexandr Ciornii +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2003, 2004, 2007, Jay Bonci + 2006, Marc 'HE' Brockschmidt + 2008-2018, gregor herrmann + 2009, Damyan Ivanov + 2010-2011, Nicholas Bamber +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License + can be found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the + General Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-test-warn/PKGBUILD b/perl-test-warn/PKGBUILD new file mode 100644 index 0000000..668c604 --- /dev/null +++ b/perl-test-warn/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-test-warn +_realpkgname=Test-Warn +pkgver=0.36 +pkgrel=1 +pkgdesc="Perl extension to test methods for warnings " +arch=('any') +url='https://search.cpan.org/dist/Test-Warn/' +license=('GPL-1') +depends=('perl-tree-dag-node' 'perl-sub-uplevel>=0.12' 'perl>=5.10.0') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/B/BI/BIGJ/${_realpkgname}-${pkgver}.tar.gz" + "LICENSE") +sha512sums=('f1f671d740267f8f360011ae1f2fede9894ad02e099f8fc9707d39a1bfec5507b113bb630e4dfeb56113e121b3ffeef8c7f112be5b201995fc21b3c2efdad2d2' + 'abe4a28a0e5b3c5aff89539e5c0bfdccb1d9548c4fa649c0a7856408c3d6cfea42e7837815ea2803450de6b5a22601928c999689f4956d8c47c9972b7846e49b') + +build() { + cd "$srcdir"/$_realpkgname-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/$_realpkgname-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-text-charwidth/COPYING.GPLv1 b/perl-text-charwidth/COPYING.GPLv1 new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-text-charwidth/COPYING.GPLv1 @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-text-charwidth/PKGBUILD b/perl-text-charwidth/PKGBUILD new file mode 100644 index 0000000..4e9183d --- /dev/null +++ b/perl-text-charwidth/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-text-charwidth +pkgver=0.04 +pkgrel=2 +pkgdesc="Perl/CPAN Module Text::CharWidth" +arch=('i686' 'x86_64') +url="https://search.cpan.org/dist/Text-CharWidth" +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +source=("https://www.cpan.org/authors/id/K/KU/KUBOTA/Text-CharWidth-${pkgver}.tar.gz" + 'COPYING.GPLv1') +sha512sums=('8ec7898fcd4a3bb6e9e36fbd50c28e023298f830fce33dafd1445de97732b337d3a6f9a075059a56592d0f118ba83c45e61fa4fd4a6d3bfbb2cd25215a061e1c' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "Text-CharWidth-${pkgver}" + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "Text-CharWidth-${pkgver}" + make install DESTDIR="${pkgdir}" + find "${pkgdir}" -name '.packlist' -delete + find "${pkgdir}" -name '*.pod' -delete + install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 "${srcdir}/COPYING.GPLv1" "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-text-charwidth/artistic-1.0.txt b/perl-text-charwidth/artistic-1.0.txt new file mode 100644 index 0000000..fa9e976 --- /dev/null +++ b/perl-text-charwidth/artistic-1.0.txt @@ -0,0 +1,110 @@ +The Artistic License + +Preamble + +The intent of this document is to state the conditions under which a +Package may be copied, such that the Copyright Holder maintains some +semblance of artistic control over the development of the package, +while giving the users of the package the right to use and distribute +the Package in a more-or-less customary fashion, plus the right to +make reasonable modifications. + +Definitions: + + "Package" refers to the collection of files distributed by the + Copyright Holder, and derivatives of that collection of files + created through textual modification. + + "Standard Version" refers to such a Package if it has not been + modified, or has been modified in accordance with the wishes of + the Copyright Holder. + + "Copyright Holder" is whoever is named in the copyright or + copyrights for the package. + + "You" is you, if you're thinking about copying or distributing + this Package. "Reasonable copying fee" is whatever you can + justify on the basis of media cost, duplication charges, time of + people involved, and so on. (You will not be required to justify + it to the Copyright Holder, but only to the computing community at + large as a market that must bear the fee.) + + "Freely Available" means that no fee is charged for the item + itself, though there may be fees involved in handling the item. It + also means that recipients of the item may redistribute it under + the same conditions they received it. + +1. You may make and give away verbatim copies of the source form of + the Standard Version of this Package without restriction, provided + that you duplicate all of the original copyright notices and + associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications + derived from the Public Domain or from the Copyright Holder. A + Package modified in such a way shall still be considered the + Standard Version. + +3. You may otherwise modify your copy of this Package in any way, + provided that you insert a prominent notice in each changed file + stating how and when you changed that file, and provided that you + do at least ONE of the following: + + a) place your modifications in the Public Domain or otherwise make + them Freely Available, such as by posting said modifications to + Usenet or an equivalent medium, or placing the modifications on + a major archive site such as ftp.uu.net, or by allowing the + Copyright Holder to include your modifications in the Standard + Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not + conflict with standard executables, which must also be + provided, and provide a separate manual page for each + non-standard executable that clearly documents how it differs + from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or +executable form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library + files, together with instructions (in the manual page or + equivalent) on where to get the Standard Version. + + b) accompany the distribution with the machine-readable source of + the Package with your modifications. + + c) accompany any non-standard executables with their corresponding + Standard Version executables, giving the non-standard + executables non-standard names, and clearly documenting the + differences in manual pages (or equivalent), together with + instructions on where to get the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of + this Package. You may charge any fee you choose for support of this + Package. You may not charge a fee for this Package itself. However, + you may distribute this Package in aggregate with other (possibly + commercial) programs as part of a larger (possibly commercial) + software distribution provided that you do not advertise this + Package as a product of your own. + +6. The scripts and library files supplied as input to or produced as + output from the programs of this Package do not automatically fall + under the copyright of this Package, but belong to whomever + generated them, and may be sold commercially, and may be aggregated + with this Package. + +7. C or perl subroutines supplied by you and linked into this Package + shall not be considered part of this Package. + +8. The name of the Copyright Holder may not be used to endorse or + promote products derived from this software without specific prior + written permission. + +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES + OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. diff --git a/perl-text-csv/LICENSE b/perl-text-csv/LICENSE new file mode 100644 index 0000000..91c77ce --- /dev/null +++ b/perl-text-csv/LICENSE @@ -0,0 +1,41 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Text-CSV +Upstream-Contact: Makamaka Hannyaharamitu +Source: https://metacpan.org/release/Text-CSV + +Files: * +Copyright: 2007-2015, Makamaka Hannyaharamitu + 1997, Alan Citterman + 2017, Kenichi Ishigaki +License: Artistic or GPL-1+ + +Files: lib/Text/CSV_PP.pm +Copyright: 2005-2015, Makamaka Hannyaharamitu + 2017, Kenichi Ishigaki +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2008, 2009, Ansgar Burchardt + 2008, Vincent Danjean + 2008-2019, gregor herrmann + 2009, Brian Cassidy + 2009, Jonathan Yu + 2010, Franck Joncourt + 2010-2017, Salvatore Bonaccorso +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-text-csv/PKGBUILD b/perl-text-csv/PKGBUILD new file mode 100644 index 0000000..7601609 --- /dev/null +++ b/perl-text-csv/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname='perl-text-csv' +_dist='Text-CSV' +pkgver=2.00 +pkgrel=1 +pkgdesc='Comma-separated values manipulator' +arch=('any') +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +url="https://metacpan.org/release/Text-CSV" +source=("https://cpan.metacpan.org/authors/id/I/IS/ISHIGAKI/${_dist}-${pkgver}.tar.gz" + "LICENSE") +sha512sums=('ac41e8e1a56f30eac9076e8c53584186df83e4b1bf32ac52aef862ff7a02ada2801df2eac710b89e06901342c8513844d3dbbc86fc53d7a3d3da5f91f69dd88f' + '80930dc0a906b3f10b160b6e4cfb163bffb48efad8d1ab996444f7b99ddc3dad6a496470a2725bff857b1ededf21a353a7125708a53ac31fccf0a1680e85df69') + +unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + +build() { + cd $_dist-$pkgver + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL + make +} + +package() { + cd $_dist-$pkgver + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + install -Dm644 "${srcdir}/LICENSE" -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/perl-text-diff/PKGBUILD b/perl-text-diff/PKGBUILD new file mode 100644 index 0000000..b0e638c --- /dev/null +++ b/perl-text-diff/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=perl-text-diff +_realpkgname=Text-Diff +pkgver=1.45 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Perform diffs on files and record sets " +arch=('any') +url='https://search.cpan.org/dist/Text-Diff' +license=('GPL-1') +depends=('perl-algorithm-diff') +makedepends=('quilt') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/N/NE/NEILB/${_realpkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libt/libtext-diff-perl/libtext-diff-perl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('569370707bf30d60d12df6389594bcdba050805005916ac3a485c2226e528891b0af9ecfcc13d20e4f377d2c36a7ff67e51de5ca409c647aa8a36b7a87eab367' + '4a309ee643038e715f6afba460490a8d656379773b03c89b7bc70bd2a1896738de5b4a09f9a73e29791c5ec22363c317187a7f45db409bfd865e048e7d737889') + +prepare() { + cd "$srcdir"/${_realpkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/${_realpkgname}-${pkgver} + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/${_realpkgname}-${pkgver} + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-text-patch/PKGBUILD b/perl-text-patch/PKGBUILD new file mode 100644 index 0000000..1d99989 --- /dev/null +++ b/perl-text-patch/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=perl-text-patch +pkgver=1.8 +pkgrel=1 +pkgdesc="Patches text with given patch" +arch=('any') +license=('GPL-2') +url='https://search.cpan.org/dist/Text-Patch' +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/C/CA/CADE/Text-Patch-$pkgver.tar.gz") +sha512sums=('582f4972d1374d9f010d2bfeb00b857391eb78744899fd0583cee65bb321c48c1c8ea0d77c0a6bcebf73f4b7f1fa3f05a3bad9be71210b06ca4e8f31f2017d32') + +build() { + cd Text-Patch-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Text-Patch-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-tie-simple/PKGBUILD b/perl-tie-simple/PKGBUILD new file mode 100644 index 0000000..9db4c8f --- /dev/null +++ b/perl-tie-simple/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-tie-simple +_realname=Tie-Simple +pkgver=1.04 +pkgrel=1 +pkgdesc="Variable ties made easier" +url='https://metacpan.org/release/Tie-Simple' +arch=('any') +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/H/HA/HANENKAMP/$_realname-$pkgver.tar.gz") +sha512sums=('24843a02565b525ff5ffbd362b1b746a3c576569c3e5c5fff5a0d543c2fbdbb4e1d6a6c45faeaff0a2721f2525996f21d46b7db88a40b49bc2541d0f99806ef2') + +build() { + cd $_realname-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd $_realname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-time-duration/PKGBUILD b/perl-time-duration/PKGBUILD new file mode 100644 index 0000000..f35e5b5 --- /dev/null +++ b/perl-time-duration/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=perl-time-duration +pkgver=1.21 +pkgrel=1 +pkgdesc="Rounded or exact English expression of durations" +arch=('any') +url="https://search.cpan.org/dist/Time-Duration" +license=('GPL-1') +depends=('perl') +makedepends=('perl-test-pod-coverage' 'perl-test-pod') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/N/NE/NEILB/Time-Duration-$pkgver.tar.gz) +sha512sums=('2d03d73096967265f16f4ebde2d9fbb83fce591e15fa01f5f4f750123f27a4571bbd01d5d93f785f78ee8810aca9d945241e6a767b65f45abb4608d321108020') + +build() { + cd "$srcdir"/Time-Duration-${pkgver} + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Time-Duration-${pkgver} + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-time-modules/LICENSE b/perl-time-modules/LICENSE new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-time-modules/LICENSE @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-time-modules/PKGBUILD b/perl-time-modules/PKGBUILD new file mode 100644 index 0000000..dc18765 --- /dev/null +++ b/perl-time-modules/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-time-modules +pkgver=2013.0912 +pkgrel=1 +pkgdesc='Perl time related modules' +url='https://search.cpan.org/~muir/Time-modules/' +license=('GPL-1') +options=('!emptydirs') +arch=('any') +source=("https://search.cpan.org/CPAN/authors/id/M/MU/MUIR/modules/Time-modules-$pkgver.tar.gz" + "LICENSE") +sha512sums=('610cc454c83d1486fbb327e0a6f44d32f2dc4b8ac09643c145489b5135a718d730a14c311823904b6832a1606d49bec0cd80f8286e8892fa8d52294b16041cd3' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd Time-modules-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd Time-modules-$pkgver + make install DESTDIR="$pkgdir/" + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-timedate/COPYING b/perl-timedate/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-timedate/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-timedate/PKGBUILD b/perl-timedate/PKGBUILD new file mode 100644 index 0000000..fe619d3 --- /dev/null +++ b/perl-timedate/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=perl-timedate +pkgver=2.33 +_debver=2.3300 +_debrel=1 +pkgrel=1 +pkgdesc="Date formating subroutines" +arch=('any') +license=('GPL-1') +url="https://search.cpan.org/dist/TimeDate/" +depends=('perl') +makedepends=('quilt') +replaces=('timedate') +provides=('timedate') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/A/AT/ATOOMIC/TimeDate-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/libt/libtimedate-perl/libtimedate-perl_$_debver-$_debrel.debian.tar.xz" + 'COPYING') +sha512sums=('a3a20a0d9439e68bf621c66fad0598e6257345727be79c87c7cc99994b3a58eb738787fedb720beb069e9758ad1347c15313f64411806dd0f4dfbcca5061c820' + 'd8c8e4529f4e093a0e802180dd706fe17fa814ab53793066dcf0c7e2f273b8c4e0c0d1f077bf3c72e46f50a091fef9c63262f7cb4037e1cb47ac126538cb80c4' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +prepare() { + cd TimeDate-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd TimeDate-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd TimeDate-$pkgver + make test +} + +package() { + cd TimeDate-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 $srcdir/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/perl-tk/PKGBUILD b/perl-tk/PKGBUILD new file mode 100644 index 0000000..f26c859 --- /dev/null +++ b/perl-tk/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=perl-tk +pkgver=804.036 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A graphical user interface toolkit for Perl" +arch=('i686' 'x86_64') +url='https://search.cpan.org/dist/Tk' +license=('GPL-2' 'custom:Tk' 'custom:Tix') +depends=('libpng' 'libjpeg-turbo' 'libx11' 'perl') +makedepends=('quilt') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/S/SR/SREZIC/Tk-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/perl-tk/perl-tk_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('7d8b82127a5fdbb2f0387f541af8844a09f1230f377b92d511ecb12e81bfd5ef56d4fe925cac064a798a96a003bb8465b6df37cff18a960f3631bb3a214cd812' + '751bead14ee3b8eb81412b37e022a4a8a8d6db683074475e8b6155ef9de8da7c27de366ac3eeb9e543f3f1ef995fe933236a67f10ba4d4e43fea099b72c930fd') + +prepare() { + cd Tk-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd Tk-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + sed -E 's|(^OPTIMIZE.*)|\1 -Wno-incompatible-pointer-types -Wno-implicit-int|' -i Makefile + make +} + +package() { + cd Tk-$pkgver + make install DESTDIR="$pkgdir" + + # license + install -Dm644 pTk/{license.terms,Tix.license} -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/perl-tree-dag-node/PKGBUILD b/perl-tree-dag-node/PKGBUILD new file mode 100644 index 0000000..9256c49 --- /dev/null +++ b/perl-tree-dag-node/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-tree-dag-node +pkgver=1.32 +pkgrel=1 +pkgdesc="base class for trees" +arch=('any') +url="https://search.cpan.org/dist/Tree-DAG_Node" +license=('GPL-1') +depends=('perl-file-slurp-tiny') +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/R/RS/RSAVAGE/Tree-DAG_Node-$pkgver.tgz) +sha512sums=('3ab6b48495abd09643555cf0160d00db39dc7ce576299b24eb4bc39e799ba478d88f863d8b2ec95853dc173e97c6efc3faff14e1d7c080f5166150f6fce2f817') + +build() { + cd "$srcdir"/Tree-DAG_Node-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/Tree-DAG_Node-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/perl-try-tiny/PKGBUILD b/perl-try-tiny/PKGBUILD new file mode 100644 index 0000000..797d4fc --- /dev/null +++ b/perl-try-tiny/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-try-tiny +pkgver=0.30 +pkgrel=1 +pkgdesc="Minimal try/catch with proper localization of \$@" +arch=('any') +url="https://search.cpan.org/dist/Try-Tiny" +license=('Expat') +depends=('perl') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Try-Tiny-${pkgver}.tar.gz") +sha512sums=('f523736ab0504ca0f7150be312e62988c4b9473a9e8469b0746dc8364945e2922c64c92e95e6c2b5792c5d6399dabea3d00aa45c065155b95519d5658a07216c') + +build() { + cd Try-Tiny-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd Try-Tiny-${pkgver} + make test +} + +package() { + cd Try-Tiny-${pkgver} + make DESTDIR="$pkgdir" install + install -D -m644 LICENCE "${pkgdir}/usr/share/licenses/${pkgname}/LICENCE" +} diff --git a/perl-types-serialiser/PKGBUILD b/perl-types-serialiser/PKGBUILD new file mode 100644 index 0000000..ed9c0cd --- /dev/null +++ b/perl-types-serialiser/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-types-serialiser +pkgver=1.0 +pkgrel=6 +pkgdesc="Simple data types for common serialisation formats" +arch=('i686' 'x86_64') +license=('GPL-1') +url='https://search.cpan.org/dist/Types-Serialiser' +depends=('perl-common-sense') +source=("https://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/Types-Serialiser-$pkgver.tar.gz") +sha512sums=('b786bcd3ee976a6ad948cc98a9c71d2cdcd30f485528eff059091f6d86ae7078c10ba2dc2982326fcf0184dbfbdddea84daff324c6ec6a129fe6aac01253c8fb') + +build() { + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null + + cd "$srcdir/Types-Serialiser-$pkgver" + perl Makefile.PL + make +} + +package() { + cd "$srcdir/Types-Serialiser-$pkgver" + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-unicode-linebreak/PKGBUILD b/perl-unicode-linebreak/PKGBUILD new file mode 100644 index 0000000..48c9eb2 --- /dev/null +++ b/perl-unicode-linebreak/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=perl-unicode-linebreak +pkgver=2019.001 +pkgrel=2 +_debver=0.0.20190101 +_debrel=1 +pkgdesc="UAX #14 Unicode Line Breaking Algorithm" +arch=('i686' 'x86_64') +url="https://metacpan.org/release/Unicode-LineBreak" +license=('GPL-2') +depends=('perl' 'perl-mime-charset' 'libthai') +checkdepends=('perl-test-pod') +makedepends=('quilt' 'gettext-tiny') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/N/NE/NEZUMI/Unicode-LineBreak-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libu/libunicode-linebreak-perl/libunicode-linebreak-perl_${_debver}-${_debrel}.debian.tar.xz" + 'LineBreakTest-8.0.0.txt::https://www.unicode.org/Public/8.0.0/ucd/auxiliary/LineBreakTest.txt' + 'GraphemeBreakTest-8.0.0.txt::https://www.unicode.org/Public/8.0.0/ucd/auxiliary/GraphemeBreakTest.txt') +sha512sums=('2d285f928db2ed32aefa741629ce9f9bee82e69c247eaa2c9145fdb4e9bae4441bf822e108cbffc3955369539474c3299f0a8f69026a5f9686aa8458a1d87f27' + '53c026f9395a5705518b3cdc9077ed7fdebc6e9c202ff6061e348c4626b6a156d5881daa80e7cb3374a58f00dc6d6d56279a17c09431c433eba8d4edbd02e1b2' + 'd2ffb02fb4d402e6a90937743721692c008b78045e295bd77bcdfcabc99fb1fdbfb0b4679b410bce4487eba115a7ef2e6d6bb03b0a47a7220fa4308eafbac74e' + 'cc5a4fa7d53c127f749d0c45582f55f391ffdcfa2f2c91c41cb0a4f71e566f1657d4653a6a251c6ae4f769420701df6e0cf184e55413c602cbc5191f9dc99201') + +prepare() { + # Copy Unicode 8.0 test files. Later versions do not pass. + cp -av "${srcdir}/LineBreakTest-8.0.0.txt" "${srcdir}/Unicode-LineBreak-${pkgver}/test-data/LineBreakTest.txt" + cp -av "${srcdir}/GraphemeBreakTest-8.0.0.txt" "${srcdir}/Unicode-LineBreak-${pkgver}/test-data/GraphemeBreakTest.txt" + cd "Unicode-LineBreak-${pkgver}" + if [[ ${pkgver%.*} = ${_debver:4:4} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/add_testsuite_data || true + + quilt push -av + fi +} + +build() { + cd "Unicode-LineBreak-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps + perl Makefile.PL + make +} + +check() { + cd "Unicode-LineBreak-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + export PERL_MM_USE_DEFAULT=1 + make test +} + +package() { + cd "Unicode-LineBreak-${pkgver}" + unset PERL5LIB PERL_MM_OPT PERL_MB_OPT PERL_LOCAL_LIB_ROOT + make install INSTALLDIRS=vendor DESTDIR="${pkgdir}" + install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 GPL "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/perl-uri/PKGBUILD b/perl-uri/PKGBUILD new file mode 100644 index 0000000..24a5016 --- /dev/null +++ b/perl-uri/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=perl-uri +pkgver=1.76 +pkgrel=1 +pkgdesc="Uniform Resource Identifiers (absolute and relative)" +arch=('any') +url="https://search.cpan.org/dist/URI/" +license=('GPL-1') +depends=('perl') +checkdepends=('perl-test-needs') +provides=('perl-uri-escape=3.30') +options=('!emptydirs') +source=("https://cpan.metacpan.org/authors/id/O/OA/OALDERS/URI-$pkgver.tar.gz") +sha512sums=('1fcb02692bdf5f223c2878569615d153b3c4c5adc04c33aee23f3f015e08b4895b03536ef3a8c7cb7a334c2faa056e5e46c805d56d810704cba63d96136e0a83') + +build() { + cd URI-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd URI-$pkgver + make test +} + +package() { + cd URI-$pkgver + make install DESTDIR="$pkgdir" + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} +# vim: ts=2 sw=2 et ft=sh diff --git a/perl-user-identity/LICENSE b/perl-user-identity/LICENSE new file mode 100644 index 0000000..9b2b891 --- /dev/null +++ b/perl-user-identity/LICENSE @@ -0,0 +1,33 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: User-Identity +Upstream-Contact: Mark Overmeer +Source: https://metacpan.org/release/User-Identity + +Files: * +Copyright: 2003-2020, Mark Overmeer +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: 2005-2007, Gunnar Wolf + 2007, Damyan Ivanov + 2009, Jonathan Yu + 2014, Salvatore Bonaccorso + 2008-2020, gregor herrmann + 2016-2017, Angel Abad +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-user-identity/PKGBUILD b/perl-user-identity/PKGBUILD new file mode 100644 index 0000000..3e4035e --- /dev/null +++ b/perl-user-identity/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=perl-user-identity +pkgver=1.00 +pkgrel=1 +pkgdesc="Perl/CPAN Module User::Identity : Define a person" +arch=('any') +url='https://search.cpan.org/~markov/User-Identity/' +license=('GPL-1') +source=("https://www.cpan.org/authors/id/M/MA/MARKOV/User-Identity-$pkgver.tar.gz" + "LICENSE") +sha512sums=('b39315050aed9064f606d6fb167e42fb55bd411f1573215b544c9f2833c0d39f12700a4fec701317e31d614c55825f250b0b5ce7b3355fb63bc953d07d8fc744' + '4cc74433e37b0d2e53197f9336849da65d988974d66ca05708720cc5677695483896307f1fefd7e11683f4ba038a18364a9617abc31c8a6e174336aeaf0306f5') + +build() { + cd "$srcdir"/User-Identity-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/User-Identity-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-www-robotrules/COPYING b/perl-www-robotrules/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-www-robotrules/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-www-robotrules/PKGBUILD b/perl-www-robotrules/PKGBUILD new file mode 100644 index 0000000..3766346 --- /dev/null +++ b/perl-www-robotrules/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-www-robotrules +pkgver=6.02 +pkgrel=3 +pkgdesc="Database of robots.txt-derived permissions" +arch=('any') +url="https://metacpan.org/release/WWW-RobotRules" +license=('GPL-1') +depends=('perl' 'perl-uri') +options=('!emptydirs') +source=(https://search.cpan.org/CPAN/authors/id/G/GA/GAAS/WWW-RobotRules-${pkgver}.tar.gz + COPYING) +sha512sums=('781a2fc90e4efed901a91ecf4f2aaac2684409c6a75a8434ff140654838bb05d11f8fa760642e20eee96450d3ced6815a4dab11a4245bc8120c69ca68ab49e44' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd "${srcdir}/WWW-RobotRules-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd "${srcdir}/WWW-RobotRules-${pkgver}" + make test +} + +package() { + cd "${srcdir}/WWW-RobotRules-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/COPYING" "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/perl-x11-protocol/PKGBUILD b/perl-x11-protocol/PKGBUILD new file mode 100644 index 0000000..f713caa --- /dev/null +++ b/perl-x11-protocol/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-x11-protocol +pkgver=0.56 +_debver=$pkgver +_debrel=9 +pkgrel=2 +pkgdesc="Perl/CPAN Module X11::Protocol : Raw interface to X Window System servers" +arch=('any') +url='https://search.cpan.org/dist/X11-Protocol' +license=('GPL-1') +depends=('perl') +source=("https://www.cpan.org/authors/id/S/SM/SMCCAM/X11-Protocol-$pkgver.tar.gz" + "COPYING::https://metadata.ftp-master.debian.org/changelogs//main/libx/libx11-protocol-perl/libx11-protocol-perl_${_debver}-${_debrel}_copyright") +sha512sums=('1c1a6ed15ceff77e8be29ac32a0e72aa2d0a1e62b5e19af2e34055aa001ee281ab584d993ace82f46f00d4da2e7bd4c60e4e31876a43c6c64c3e216beb13fe5f' + '7bd8895a32a9f2c80bcecdfd826629f08d94ef989521d87348ae93fd3d676728a988dd258be80284da2e9e7b6c322301f65d3cce1a6ac564dff379bdf7feaf09') + +build() { + cd "$srcdir"/X11-Protocol-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "$srcdir"/X11-Protocol-$pkgver + make install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "${srcdir}/COPYING" -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/perl-xml-libxml/PKGBUILD b/perl-xml-libxml/PKGBUILD new file mode 100644 index 0000000..a6eed0a --- /dev/null +++ b/perl-xml-libxml/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=perl-xml-libxml +pkgver=2.0134 +_debver=2.0134 +_debrel=2 +pkgrel=1 +pkgdesc='Interface to the libxml library' +arch=('i686' 'x86_64') +url='http://search.cpan.org/dist/XML-LibXML' +license=('GPL-1') +depends=('libxml2' 'perl-xml-sax' 'perl-xml-namespacesupport') +makedepends=('quilt') +provides=('perl-libxml' 'perl-xml-libxml-common') +replaces=('perl-libxml' 'perl-xml-libxml-common') +options=('!emptydirs') +install=perl-xml-libxml.install +source=(https://www.cpan.org/authors/id/S/SH/SHLOMIF/XML-LibXML-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/libx/libxml-libxml-perl/libxml-libxml-perl_${_debver}+dfsg-${_debrel}.debian.tar.xz) +sha512sums=('ecd39b8c268ab339d1363333feb4dcde2ec761fb29bc732625e8149ecb6f1c68eea8b76bfccb02df527518650cb3d1b8f14ae2fcd8255f117b5df68912ba2a08' + '9fd4daca38992d1fb1a665b3b04777658a9f64ce00d374ec8836c7b6938c7f922bfe699f1ec6bd11049a9f5a9a98552d89a99cc7a66653f656b23f2b035f7731') + +prepare() { + cd XML-LibXML-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd XML-LibXML-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd XML-LibXML-$pkgver + make pure_install doc_install DESTDIR="$pkgdir"/ + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-xml-libxml/perl-xml-libxml.install b/perl-xml-libxml/perl-xml-libxml.install new file mode 100644 index 0000000..3a8eb1e --- /dev/null +++ b/perl-xml-libxml/perl-xml-libxml.install @@ -0,0 +1,23 @@ +post_install() { + echo ":: Installing SAX XML Parsers" + perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX::Parser))->save_parsers()" + perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX))->save_parsers()" +} + +post_upgrade() { + if [[ ! -f /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]]; then + post_install + else + libxmlcount=`grep -c XML::LibXML::SAX /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini` + if [[ $libxmlcount == 0 ]]; then + post_install + fi + fi +} + +pre_remove() { + if [[ -f /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]]; then + perl -MXML::SAX -e "XML::SAX->remove_parser(q(XML::LibXML::SAX::Parser))->save_parsers()" + perl -MXML::SAX -e "XML::SAX->remove_parser(q(XML::LibXML::SAX))->save_parsers()" + fi +} diff --git a/perl-xml-namespacesupport/PKGBUILD b/perl-xml-namespacesupport/PKGBUILD new file mode 100644 index 0000000..edac197 --- /dev/null +++ b/perl-xml-namespacesupport/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-xml-namespacesupport +pkgver=1.12 +pkgrel=1 +pkgdesc='Generic namespace helpers (ported from SAX2)' +arch=('any') +url='https://search.cpan.org/dist/XML-NamespaceSupport' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/P/PE/PERIGRIN/XML-NamespaceSupport-${pkgver}.tar.gz") +sha512sums=('8a29698acc152888b3abd53b277f89209252830cc3b57d587a5b66e5019445d7c1858a08fa548d42387c1143b726da1440e36eb0c69b0b59c3770b5f528f38b2') + +build() { + cd XML-NamespaceSupport-$pkgver + + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd XML-NamespaceSupport-$pkgver + + make install DESTDIR="$pkgdir" + + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-xml-parser/COPYING b/perl-xml-parser/COPYING new file mode 100644 index 0000000..8de98af --- /dev/null +++ b/perl-xml-parser/COPYING @@ -0,0 +1,251 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/perl-xml-parser/PKGBUILD b/perl-xml-parser/PKGBUILD new file mode 100644 index 0000000..a8078a3 --- /dev/null +++ b/perl-xml-parser/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=perl-xml-parser +pkgver=2.46 +pkgrel=1 +pkgdesc="Expat-based XML parser module for perl" +arch=('i686' 'x86_64') +license=('GPL-1') +url="https://search.cpan.org/dist/XML-Parser/" +depends=('perl-libwww' 'expat') +options=('!emptydirs') +source=("https://search.cpan.org/CPAN/authors/id/T/TO/TODDR/XML-Parser-${pkgver}.tar.gz" + 'COPYING') +sha512sums=('c4609495cc5ca34952f61876a690ef76d42eee6689d1bedb8036c9eab918525ec5213f1639c7178c029ee0f8765a2ca5eb0197f6e39b8be6d5dbc3f3c1d0b389' + 'e239b539f2c46c1ae3da87c4983a0fda67dc8ae622d607b507b5c523af3bdf99e7bea8931e3a7c6007910bfe9e21a761e03e8203de95b5aceea425a97d0a84c9') + +build() { + cd XML-Parser-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +check() { + cd XML-Parser-${pkgver} + make test +} + +package() { + cd XML-Parser-${pkgver} + make DESTDIR="${pkgdir}" install + install -D -m644 ${srcdir}/COPYING $pkgdir/usr/share/licenses/${pkgname}/COPYING +} diff --git a/perl-xml-sax-base/LICENSE b/perl-xml-sax-base/LICENSE new file mode 100644 index 0000000..75e7e8f --- /dev/null +++ b/perl-xml-sax-base/LICENSE @@ -0,0 +1,35 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: XML-SAX-Base +Upstream-Contact: Grant McLean +Source: https://metacpan.org/release/XML-SAX-Base + +Files: * +Copyright: 2001, Kip Hampton + 2001, Robin Berjon + 2001, Matt Sergeant + 2011, Grant McLean +License: Artistic or GPL-1+ +Comment: The upstream distribution does not contain an explicit statement of + copyright ownership. Pursuant to the Berne Convention for the Protection of + Literary and Artistic Works, it is assumed that all content is copyright by + its respective authors unless otherwise stated. + +Files: debian/* +Copyright: 2011-2017, Florian Schlichting +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-xml-sax-base/PKGBUILD b/perl-xml-sax-base/PKGBUILD new file mode 100644 index 0000000..a651812 --- /dev/null +++ b/perl-xml-sax-base/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=perl-xml-sax-base +pkgver=1.09 +pkgrel=1 +pkgdesc='Base class SAX Drivers and Filters' +arch=('any') +url='https://search.cpan.org/dist/XML-SAX-Base' +license=('GPL-1') +depends=('perl') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/G/GR/GRANTM/XML-SAX-Base-$pkgver.tar.gz" + "LICENSE") +sha512sums=('72a34fd2b0375222cad3a42a0e2d92f793d7a2ac27d831a8a8d3322fdc75ba246ca53c33cdc0fbade81f3a96ad977ebf5d4cddc6d75d76be79b2e655f316d532' + 'b4b66f12f3fe1b9456863118fbd51815c6373649780f84a2732a726bb63702942d17ee9b53b32845eef2e3b181f9d2f2b6dd75f79f8f7338cfe9829874c5640a') + +build() { + cd XML-SAX-Base-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd XML-SAX-Base-$pkgver + make install DESTDIR="$pkgdir" + + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + + install -Dm644 "${srcdir}"/LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-xml-sax-expat/LICENSE b/perl-xml-sax-expat/LICENSE new file mode 100644 index 0000000..315203b --- /dev/null +++ b/perl-xml-sax-expat/LICENSE @@ -0,0 +1,33 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: XML-SAX-Expat +Upstream-Contact: Robin Berjon +Source: https://metacpan.org/release/XML-SAX-Expat + +Files: * +Copyright: 2001-2008, Robin Berjon +License: Artistic or GPL-1+ + +Files: debian/* +Copyright: + 2001-2003, Ardo van Rangelrooij + 2004, Jay Bonci + 2008, Niko Tyni + 2008-2018, gregor herrmann + 2011, Ansgar Burchardt +License: Artistic or GPL-1+ + +License: Artistic + This program is free software; you can redistribute it and/or modify + it under the terms of the Artistic License, which comes with Perl. + . + On Debian systems, the complete text of the Artistic License can be + found in `/usr/share/common-licenses/Artistic'. + +License: GPL-1+ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + . + On Debian systems, the complete text of version 1 of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-1'. diff --git a/perl-xml-sax-expat/PKGBUILD b/perl-xml-sax-expat/PKGBUILD new file mode 100644 index 0000000..5c75cad --- /dev/null +++ b/perl-xml-sax-expat/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-xml-sax-expat +pkgver=0.51 +pkgrel=1 +pkgdesc="SAX2 Driver for Expat (XML::Parser)" +arch=('any') +url='https://search.cpan.org/dist/XML-SAX-Expat' +license=('GPL-1') +depends=('perl-xml-namespacesupport' 'perl-xml-parser' 'perl-xml-sax') +install=perl-xml-sax-expat.install +options=('!emptydirs') +source=(https://www.cpan.org/authors/id/B/BJ/BJOERN/XML-SAX-Expat-$pkgver.tar.gz + LICENSE) +sha512sums=('9cd3c7a1cdf0b0a49ea9f871095984fb67ff54c9e5ed49884c591a450c2662acbd6d0f5232a5720663bcab09ff4f41093d414daa0b72457dc98eea5001270478' + '0c62babc1ca9911fdb09b7026d3162cab14d4e79ceaf9bf84efec07a238da72df5d6f851974d6d64254bcb08c4721c4d9505464e9a426a93b6882a81d095b526') + +build() { + cd "$srcdir"/XML-SAX-Expat-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package(){ + cd "$srcdir"/XML-SAX-Expat-$pkgver + make pure_install doc_install DESTDIR="$pkgdir" + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + install -Dm644 "$srcdir"/LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-xml-sax-expat/perl-xml-sax-expat.install b/perl-xml-sax-expat/perl-xml-sax-expat.install new file mode 100644 index 0000000..0decc3a --- /dev/null +++ b/perl-xml-sax-expat/perl-xml-sax-expat.install @@ -0,0 +1,17 @@ +post_install() { +if [ ! -r /usr/lib/perl5/site_perl/current/XML/SAX/ParserDetails.ini ]; then + perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::Expat))->save_parsers()" +fi +} + +post_upgrade() { +if [ ! -r /usr/lib/perl5/site_perl/current/XML/SAX/ParserDetails.ini ]; then + perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::Expat))->save_parsers()" +fi +} + +pre_remove() { + if [[ -f /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]]; then + perl -MXML::SAX -e "XML::SAX->remove_parser(q(XML::SAX::Expat))->save_parsers()" + fi +} diff --git a/perl-xml-sax/PKGBUILD b/perl-xml-sax/PKGBUILD new file mode 100644 index 0000000..bda7dfc --- /dev/null +++ b/perl-xml-sax/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=perl-xml-sax +pkgver=1.02 +pkgrel=1 +pkgdesc='Simple API for XML' +arch=('any') +url='https://search.cpan.org/dist/XML-SAX' +license=('GPL-1') +depends=('perl' 'perl-xml-sax-base' 'perl-xml-namespacesupport') +options=('!emptydirs') +install=perl-xml-sax.install +source=("https://www.cpan.org/authors/id/G/GR/GRANTM/XML-SAX-$pkgver.tar.gz") +sha512sums=('bb30ddbbcf27803825d2f0936257e102999a197cb14bd77fa8b7a469f3a24fb7d861ef4eb03230e5581e4ed88beb8676cbb907b2cb63e9ef1a64b2c211ebdc5a') + +build() { + cd XML-SAX-$pkgver + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd XML-SAX-$pkgver + PERLLIB=blib/lib make install DESTDIR="$pkgdir" + + find "$pkgdir" -name '.packlist' -delete + find "$pkgdir" -name '*.pod' -delete + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-xml-sax/perl-xml-sax.install b/perl-xml-sax/perl-xml-sax.install new file mode 100644 index 0000000..560b6bf --- /dev/null +++ b/perl-xml-sax/perl-xml-sax.install @@ -0,0 +1,11 @@ +post_install() { +if [ ! -r /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]; then + perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()" &>/dev/null +fi +} + +post_upgrade() { +if [ ! -r /usr/share/perl5/vendor_perl/XML/SAX/ParserDetails.ini ]; then + perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::PurePerl))->save_parsers()" &>/dev/null +fi +} diff --git a/perl-xml-simple/PKGBUILD b/perl-xml-simple/PKGBUILD new file mode 100644 index 0000000..8c925f3 --- /dev/null +++ b/perl-xml-simple/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=perl-xml-simple +_realname=XML-Simple +pkgver=2.25 +pkgrel=1 +pkgdesc="Simple XML parser for Perl" +arch=('any') +license=('GPL-1') +url='https://search.cpan.org/dist/XML-Simple/' +depends=('perl-xml-sax-expat') +options=('!emptydirs') +source=("https://www.cpan.org/authors/id/G/GR/GRANTM/${_realname}-${pkgver}.tar.gz") +sha512sums=('0f1a6a1bdb8f6ac6fa4deef33d09930eb4758b4a3ed4431624004ffa2b1eb02f0d6ce14cb4942162cb76f7aa39fea4ec6a71e1eb9ebd464b710db7024bdd990c') + +build() { + cd "${srcdir}/${_realname}-${pkgver}" + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd "${srcdir}/${_realname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/perl-yaml-libyaml/PKGBUILD b/perl-yaml-libyaml/PKGBUILD new file mode 100644 index 0000000..6f651f6 --- /dev/null +++ b/perl-yaml-libyaml/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. +# Generator (Arch): CPANPLUS::Dist::Arch 1.32 + +pkgname='perl-yaml-libyaml' +pkgver=0.83 +pkgrel=1 +pkgdesc="Perl YAML Serialization using XS and libyaml" +arch=('i686' 'x86_64') +license=('GPL-1') +options=('!emptydirs') +depends=('perl') +url='https://search.cpan.org/dist/YAML-LibYAML/' +source=("https://cpan.metacpan.org/authors/id/T/TI/TINITA/YAML-LibYAML-$pkgver.tar.gz") +sha512sums=('4d70846dae3f5e18e96da786037a6cf09cf06ebdc472243406bf828021071ebaf6f9ac0bab6a88c5208ffeb72c7012cbc054ebf5d6be0f562084db68d3de7451') + +build() { + ( export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='"$pkgdir"'" \ + PERL_MB_OPT="--installdirs vendor --destdir '"$pkgdir"'" \ + MODULEBUILDRC=/dev/null + cd "$srcdir/YAML-LibYAML-$pkgver" + /usr/bin/perl Makefile.PL + make + ) +} + +package() { + cd "$srcdir/YAML-LibYAML-$pkgver" + make install + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/perl-yaml-syck/PKGBUILD b/perl-yaml-syck/PKGBUILD new file mode 100644 index 0000000..bf892f6 --- /dev/null +++ b/perl-yaml-syck/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=perl-yaml-syck +pkgver=1.34 +_debver=1.34 +_debrel=1 +pkgrel=1 +pkgdesc="Fast, lightweight YAML loader and dumper" +arch=('i686' 'x86_64') +url="https://metacpan.org/release/YAML-Syck" +license=('Expat') +depends=('perl') +makedepends=('quilt') +options=('!emptydirs') +source=(https://cpan.metacpan.org/authors/id/T/TO/TODDR/YAML-Syck-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/liby/libyaml-syck-perl/libyaml-syck-perl_$_debver-$_debrel.debian.tar.xz) +sha512sums=('18288f54026823e84b2d642d880d7758c5d95ba4b56d3fcf758efe59303ea71a49822d7c000b4c7b0629eccd4dcf3c940bc1c26f2b2ef89e4fdba78a35c04760' + '9d7174060adcbea759473c408fa20adbb74909e40bc7066cdedb9e71f7c0b7c1406588a8e44288bbeee7f010c3736db3feee72c2ad779383b428dfbd8403fd04') + +prepare() { + cd YAML-Syck-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd YAML-Syck-$pkgver + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd YAML-Syck-$pkgver + make install DESTDIR="${pkgdir}" + install -D -m644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pflogsumm/PKGBUILD b/pflogsumm/PKGBUILD new file mode 100644 index 0000000..ae6da8b --- /dev/null +++ b/pflogsumm/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=pflogsumm +pkgver=1.1.5 +_debver=$pkgver +_debrel=7 +pkgrel=1 +pkgdesc="Postfix log entry summarizer" +url='https://jimsun.linxnet.com/postfix_contrib.html' +license=('GPL-2') +arch=('any') +depends=('perl-date-calc') +makedepends=('quilt') +source=("https://jimsun.linxnet.com/downloads/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/pflogsumm/pflogsumm_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('994d660692dfea38a1dd9866d15f15035657e85131c1f5a2cd82baa5bd4ad987a00939cb5233f316d2090014c52ae68ef20db0c893f8634969484e0e74678f4d' + '39c014d2a2185ae3c42efaa06ce253af6d5ccec390ddd4b296695b119199e105b9543235c5ed6d6a94aa81a16532367dc5b258c2afda8caaec801edc6b195c8e') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd $pkgname-$pkgver + + install -D -m755 pflogsumm.pl "$pkgdir/usr/bin/pflogsumm" + install -D -m644 pflogsumm.1 "$pkgdir/usr/share/man/man1/pflogsumm.1" + install -D -m644 pflogsumm-faq.txt "$pkgdir/usr/share/doc/$pkgname/FAQ" + install -D -m644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/pgbouncer/PKGBUILD b/pgbouncer/PKGBUILD new file mode 100644 index 0000000..c4fa3dd --- /dev/null +++ b/pgbouncer/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=pgbouncer +pkgver=1.15.0 +pkgrel=1 +pkgdesc="A lightweight connection pooler for PostgreSQL" +arch=('i686' 'x86_64') +url="https://wiki.postgresql.org/wiki/PgBouncer" +license=('ISC') +depends=('glibc' 'libevent' 'c-ares' 'libressl') +makedepends=('asciidoc' 'xmlto') +backup=('etc/pgbouncer/pgbouncer.ini' + 'etc/logrotate.d/pgbouncer' + 'etc/conf.d/pgbouncer') +install=$pkgname.install +source=("https://pgbouncer.github.io/downloads/files/$pkgver/$pkgname-$pkgver.tar.gz" + "pgbouncer.ini" + "pgbouncer.logrotate" + "patch-lib_usual_tls_tls_c.patch" + "pgbouncer.confd" + "pgbouncer.initd") +sha512sums=('5f78018ab80ab8d81f20ef3df1314ffc9557f1c6469d485d11ac822f596e3d4b554743fd9e9fe19b008a8aaf93bcf3673b42a8fb82bbd9611bd735cd2cbb98c6' + '39abc7b11c9d7a2593941b4d2a82db998ac1b1e3da131ae276da73c7afc4eda7b69bbfd0acd39f7bce20ecb911baf0adba341ff58dcab1a57e419708e7c8d26f' + '1dc86704fce211b23afe7962c947c7de80a15bef219928acbf486b915d80d44a6590fbc509fe650c97b694a508bcf95d2152663863f0c372323286e644c6d60a' + 'e4a12313d535b84ce1f9db077d2a4cc818356540cb0f35b7374fdde5c69861ccbb0ce437e8cda943cdd16bca9179c6c862891a2ff6f0b998b7618ac91adb93b2' + 'dbcd7f5860b7f1ec6b6372b718678ba74c5268e89eed0fe291cd292a50460f0e81876367cb86e97f1cfefc0ace8d698c41a313642ec64d2de0747c348665afba' + 'ecd34f017316b2c0aad172e5bf5393137da5ab841f4d6de93eb82a07abe9f234a2426ca7dada2dc047c33ea4c7dc0af3040b249ec1f9d7e0c1782fb0463a7293') + +prepare() { + cd "$srcdir/$pkgname-$pkgver/lib" + patch -Np1 -i $srcdir/patch-lib_usual_tls_tls_c.patch +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --disable-debug + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -D -m644 COPYRIGHT -t "$pkgdir/usr/share/licenses/$pkgname" + install -D -m644 $srcdir/pgbouncer.ini "$pkgdir/etc/pgbouncer/pgbouncer.ini" + install -D -m644 $srcdir/pgbouncer.logrotate "$pkgdir/etc/logrotate.d/pgbouncer" + install -D -m644 $srcdir/pgbouncer.confd "$pkgdir/etc/conf.d/pgbouncer" + install -D -m755 $srcdir/pgbouncer.initd "$pkgdir/etc/init.d/pgbouncer" + mkdir -p "$pkgdir/var/log/pgbouncer" +} diff --git a/pgbouncer/patch-lib_usual_tls_tls_c.patch b/pgbouncer/patch-lib_usual_tls_tls_c.patch new file mode 100644 index 0000000..63ee8d1 --- /dev/null +++ b/pgbouncer/patch-lib_usual_tls_tls_c.patch @@ -0,0 +1,14 @@ +$OpenBSD: patch-lib_usual_tls_tls_c,v 1.2 2018/01/22 10:57:29 landry Exp $ + +Index: lib/usual/tls/tls.c +--- lib/usual/tls/tls.c.orig ++++ lib/usual/tls/tls.c +@@ -350,7 +350,7 @@ tls_info_callback(const SSL *ssl, int where, int rc) + { + struct tls *ctx = SSL_get_app_data(ssl); + +-#ifdef USE_LIBSSL_INTERNALS ++#if defined(USE_LIBSSL_INTERNALS) && (!defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x2050100fL) + if (!(ctx->state & TLS_HANDSHAKE_COMPLETE) && ssl->s3) { + /* steal info about used DH key */ + if (ssl->s3->tmp.dh && !ctx->used_dh_bits) { diff --git a/pgbouncer/pgbouncer.confd b/pgbouncer/pgbouncer.confd new file mode 100644 index 0000000..84961a8 --- /dev/null +++ b/pgbouncer/pgbouncer.confd @@ -0,0 +1,12 @@ +# Location of configuration file for PgBouncer. +INIFILE="/etc/pgbouncer/pgbouncer.ini" + +# How long to wait in seconds for a safe shutdown. Equivalent to +# issuing 'PAUSE;' and 'SHUTDOWN;' on psql console. (See 'man 1 pgbouncer'.) +NICE_TIMEOUT=60 + +# Set to 'YES' to perform an immediate shutdown if the nice shutdown +# doesn't work. Same as issuing 'SHUTDOWN;' on console. (See 'man 1 +# pgbouncer'.) +FORCE_QUIT="no" +FORCE_QUIT_TIMEOUT=2 diff --git a/pgbouncer/pgbouncer.ini b/pgbouncer/pgbouncer.ini new file mode 100644 index 0000000..183c9c3 --- /dev/null +++ b/pgbouncer/pgbouncer.ini @@ -0,0 +1,52 @@ +[pgbouncer] +logfile = /var/log/pgbouncer/pgbouncer.log +pidfile = /run/pgbouncer/pgbouncer.pid + +;; ip address or * which means all ip-s +;listen_addr = 127.0.0.1 +;listen_port = 6432 + +unix_socket_dir = /run/postgresql +unix_socket_mode = 0777 + +; any, trust, plain, crypt, md5 +auth_type = trust +auth_file = /etc/pgbouncer/userlist.txt + +; comma-separated list of users, who are allowed to change settings +admin_users = postgres + +; comma-separated list of users who are just allowed to use SHOW command +stats_users = stats, postgres + +; total number of clients that can connect +max_client_conn = 100 + +; default pool size. 20 is good number when transaction pooling +; is in use, in session pooling it needs to be the number of +; max clients you want to handle at any moment +default_pool_size = 20 + + +;; database name = connect string +;; +;; connect string params: +;; dbname= host= port= user= password= +;; client_encoding= datestyle= timezone= +;; pool_size= connect_query= +[databases] + +; foodb over unix socket +;foodb = + +; redirect bardb to bazdb on localhost +;bardb = host=localhost dbname=bazdb + +; acceess to dest database will go with single user +;forcedb = host=127.0.0.1 port=300 user=baz password=foo client_encoding=UNICODE datestyle=ISO connect_query='SELECT 1' + +; use custom pool sizes +;nondefaultdb = pool_size=50 reserve_pool=10 + +; fallback connect string +;* = host=testserver diff --git a/pgbouncer/pgbouncer.initd b/pgbouncer/pgbouncer.initd new file mode 100644 index 0000000..20479dc --- /dev/null +++ b/pgbouncer/pgbouncer.initd @@ -0,0 +1,88 @@ +#!/sbin/openrc-run + +extra_started_commands="reload" + +depend() { + use net + after postgresql +} + +get_config() { + [ -f "${INIFILE}" ] || eend 1 "'${INIFILE}' not found" + + eval echo $(sed -e 's:;.*::' "${INIFILE}" | \ + awk '$1 == "'$1'" { print ($2 == "=" ? $3 : $2) }') +} + +PIDFILE="$(get_config pidfile)" +UNIX_SOCKET_DIR="$(get_config unix_socket_dir)" + +prep() { + if [ -n "${UNIX_SOCKET_DIR}" ] ; then + checkpath -o postgres:postgres -m 0775 -d "${UNIX_SOCKET_DIR}" \ + || return 1 + fi + checkpath -o pgbouncer:postgres -m 0755 -d "$(dirname ${PIDFILE})" \ + || return 1 + checkpath -o pgbouncer:postgres -m 0644 -f "${PIDFILE}" \ + || return 1 + checkpath -o pgbouncer:postgres -m 0755 -d "$(dirname $(get_config logfile))" \ + || return 1 + checkpath -o pgbouncer:postgres -m 0640 -f "$(get_config logfile)" \ + || return 1 + + return 0 +} + +start() { + ebegin "Starting PgBouncer" + prep + local ret=$? + if [ $ret -ne 0 ] ; then + eend $ret + exit $ret + fi + start-stop-daemon --start \ + --pidfile ${PIDFILE} \ + --user pgbouncer \ + --exec /usr/bin/pgbouncer -- -q -d "${INIFILE}" + eend $? +} + +stop() { + local seconds=$(( ${NICE_TIMEOUT} + ${FORCE_QUIT_TIMEOUT} )) + ebegin "Stopping PgBouncer (this can take up to ${seconds} seconds)" + + local retries=SIGINT/${NICE_TIMEOUT} + + if [ "${FORCE_QUIT}" = "YES" ] ; then + einfo "FORCE_QUIT enabled." + retries="${retries}/SIGTERM/${FORCE_QUIT_TIMEOUT}" + fi + + # Loops through nice and force quit in one go. + start-stop-daemon --stop \ + --pidfile ${PIDFILE} \ + --retry ${retries} + + eend $? +} + +restart() { + if [ -n "${UNIX_SOCKET_DIR}" ] ; then + ebegin "Performing online restart of PgBouncer" + start-stop-daemon --start \ + --pidfile ${PIDFILE} \ + --user pgbouncer \ + --exec /usr/bin/pgbouncer -- -q -d -R "${INIFILE}" + eend $? + else + stop && start + fi +} + +reload() { + ebegin "Reloading PgBouncer configuration from '${INIFILE}'" + start-stop-daemon --signal HUP --pidfile ${PIDFILE} + eend $? +} diff --git a/pgbouncer/pgbouncer.install b/pgbouncer/pgbouncer.install new file mode 100644 index 0000000..29b42cc --- /dev/null +++ b/pgbouncer/pgbouncer.install @@ -0,0 +1,34 @@ +post_install() { + if [ ! -d '/var/lib/postgres' ]; then + mkdir -p '/var/lib/postgres' + fi + if ! getent group postgres &>/dev/null; then + groupadd -g 88 postgres + fi + if ! getent passwd postgres &>/dev/null; then + useradd -c 'PostgreSQL user' -u 88 -g postgres -d '/var/lib/postgres' -s /bin/bash postgres + passwd -l postgres >/dev/null + fi + if ! getent group pgbouncer &>/dev/null; then + groupadd -r pgbouncer + fi + if ! getent passwd pgbouncer &>/dev/null; then + useradd -c 'PGBouncer user' -r -g pgbouncer -d '/etc/pgbouncer' -s /bin/bash pgbouncer + passwd -l pgbouncer >/dev/null + fi + chown pgbouncer:pgbouncer /var/log/pgbouncer + gpasswd -a pgbouncer postgres +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd pgbouncer &>/dev/null; then + userdel pgbouncer >/dev/null + fi + if getent group pgbouncer &>/dev/null; then + groupdel pgbouncer >/dev/null + fi +} diff --git a/pgbouncer/pgbouncer.logrotate b/pgbouncer/pgbouncer.logrotate new file mode 100644 index 0000000..2037875 --- /dev/null +++ b/pgbouncer/pgbouncer.logrotate @@ -0,0 +1,8 @@ +/var/log/pgbouncer/pgbouncer.log { + copytruncate + missingok + notifempty + postrotate + /bin/kill -HUP $(cat /run/pgbouncer/pgbouncer.pid 2>/dev/null) 2> /dev/null || true + endscript +} diff --git a/phonon-gstreamer/PKGBUILD b/phonon-gstreamer/PKGBUILD new file mode 100644 index 0000000..03c28e6 --- /dev/null +++ b/phonon-gstreamer/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgbase=phonon-gstreamer +pkgname=('phonon-qt4-gstreamer' 'phonon-qt5-gstreamer') +pkgver=4.9.0 +pkgrel=2.hyperbola1 +arch=('i686' 'x86_64') +url='https://phonon.kde.org/' +license=('LGPL-2.1') +optdepends=('gst-plugins-good: good codecs' + 'gst-plugins-bad: additional codecs' + 'gst-plugins-ugly: additional codecs' + 'gst-libav: libav codec') +makedepends=('gst-plugins-base' 'extra-cmake-modules' 'automoc4' 'phonon-qt4' 'phonon-qt5' 'qt5-x11extras') +source=("https://download.kde.org/stable/phonon/phonon-backend-gstreamer/${pkgver}/phonon-backend-gstreamer-${pkgver}.tar.xz") +sha512sums=('9c13d37c6c7070c2bd8fcc562f743ac2f55289bc7cc82147ef0ae990e5d380d541cc1d9ce61e6ad1549ed1935d41faafaeeb0cd5463e4c656ea8fee636ff4dfe') + +prepare() { + mkdir build-qt4 + mkdir build-qt5 +} + +build() { + cd build-qt4 + cmake ../${pkgbase}-${pkgver} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_SKIP_RPATH=ON \ + -D__KDE_HAVE_GCC_VISIBILITY=NO \ + -DCMAKE_INSTALL_LIBDIR=lib + make + + cd ../build-qt5 + cmake ../${pkgbase}-${pkgver} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_SKIP_RPATH=ON \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -D__KDE_HAVE_GCC_VISIBILITY=NO \ + -DPHONON_BUILD_PHONON4QT5=ON + make +} + +package_phonon-qt4-gstreamer() { + pkgdesc="Phonon GStreamer backend for Qt4, without pulseaudio recommendation" + depends=(gst-plugins-base phonon-qt4) + + cd build-qt4 + make DESTDIR="${pkgdir}" install + +# Conflict with -qt5 + rm -r "$pkgdir"/usr/share/icons +} + +package_phonon-qt5-gstreamer() { + pkgdesc="Phonon GStreamer backend for Qt5, without pulseaudio recommendation" + depends=(gst-plugins-base qt5-x11extras phonon-qt5) + + cd build-qt5 + make DESTDIR="${pkgdir}" install +} diff --git a/phonon-qt-gstreamer/PKGBUILD b/phonon-qt-gstreamer/PKGBUILD new file mode 100644 index 0000000..1387ec6 --- /dev/null +++ b/phonon-qt-gstreamer/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=phonon-qt-gstreamer +pkgver=4.10.0 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc='Phonon GStreamer backend for Qt' +url='https://community.kde.org/Phonon' +license=('LGPL-2.1') +depends=('gst-plugins-base' 'qt-x11extras' 'phonon-qt' 'alsa-lib') +optdepends=('gst-plugins-good: additional codecs' + 'gst-plugins-bad: additional codecs' + 'gst-plugins-ugly: additional codecs' + 'gst-libav: libav codec') +makedepends=('extra-cmake-modules' 'qt-tools') +provides=('phonon-qt-backend') +source=("https://download.kde.org/stable/phonon/phonon-backend-gstreamer/$pkgver/phonon-backend-gstreamer-$pkgver.tar.xz"{,.sig}) +sha512sums=('3beaba9ea3a332a6908ebdaa966958e8e8056d79cfb210e82a8edaf08f0a8bacbf8094e91b1b1b936406aa634dabb962e6c1468e4dde3febd9efac1a63ea70a4' + 'SKIP') +validpgpkeys=(CB9387521E1EE0127DA804843FDBB55084CC5D84) # Harald Sitter + +prepare() { + mkdir -p build +} + +build() { + cd build + cmake ../phonon-backend-gstreamer-$pkgver + make +} + +package() { + cd build + make DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/phonon-backend-gstreamer-${pkgver}/COPYING.LIB" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/phonon-qt/PKGBUILD b/phonon-qt/PKGBUILD new file mode 100644 index 0000000..56fb261 --- /dev/null +++ b/phonon-qt/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=phonon-qt +pkgbasename=phonon +pkgdesc='Multimedia framework' +pkgver=4.11.1 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://community.kde.org/Phonon' +license=('LGPL-2.1') +depends=('alsa-lib' 'qt-base') +optdepends=('qt-tools: Designer plugin') +makedepends=('extra-cmake-modules' 'qt-tools') +source=("https://download.kde.org/stable/$pkgbasename/$pkgver/$pkgbasename-$pkgver.tar.xz"{,.sig}) +sha512sums=('858b2b0d7b0336af76d226b30f3acd1914e7297e0879d5a417fa1b87b13c812f9aab7e20adcad33ce1a03624ce78323dd9968b4b277caf85f800ca60aa134f74' + 'SKIP') +validpgpkeys=(CB9387521E1EE0127DA804843FDBB55084CC5D84) # Harald Sitter + +prepare() { + mkdir -p build +} + +build() { + cd build + cmake ../$pkgbasename-$pkgver + make +} + +package(){ + depends+=(phonon-qt-backend) + cd build + make DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/${pkgbasename}-${pkgver}/COPYING.LIB" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/phonon/PKGBUILD b/phonon/PKGBUILD new file mode 100644 index 0000000..dcc41d0 --- /dev/null +++ b/phonon/PKGBUILD @@ -0,0 +1,88 @@ +# Maintainer: Jesus E. + +pkgbase=phonon +pkgname=('phonon-qt4' 'phonon-qt5') +pkgver=4.9.1 +_debver=4.9.1 +_debrel=1 +pkgrel=2.hyperbola2 +arch=('i686' 'x86_64') +url='https://phonon.kde.org/' +license=('LGPL-2.1') +makedepends=('extra-cmake-modules' 'automoc4' 'qt5-base' 'qt5-tools' 'quilt') +source=("https://download.kde.org/stable/${pkgbase}/${pkgver}/${pkgbase}-${pkgver}.tar.xz"{,.sig} + "https://deb.debian.org/debian/pool/main/p/phonon/phonon_$_debver-$_debrel.debian.tar.xz") +sha512sums=('a1741765071a625d9b9073d9ad1571b91cf5bfce2223bd1b034828d02dc52624587a6ec5352f3702df79f6e4201007596843fbcb9f15c9b489a858200787d728' + 'SKIP' + 'd8957a031d75966c1b08edc5c881d6c0f8812652fc5ec452127862ef254372852e7ea83e64c23f9b7c3e6f363fd34fea444e5ae32c0c1a2c6b99f49a122640e2') +validpgpkeys=(CB9387521E1EE0127DA804843FDBB55084CC5D84) # Harald Sitter + +prepare() { + mkdir build + mkdir build-qt5 + + cd ${pkgbase}-${pkgver} + + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + cmake ../${pkgbase}-${pkgver} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_SKIP_RPATH=ON \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DPHONON_INSTALL_QT_EXTENSIONS_INTO_SYSTEM_QT=ON \ + -DQT_QMAKE_EXECUTABLE=/usr/bin/qmake-qt4 \ + -D__KDE_HAVE_GCC_VISIBILITY=NO \ + -DCMAKE_INSTALL_LIBDIR=lib + make + + cd ../build-qt5 + cmake ../${pkgbase}-${pkgver} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_SKIP_RPATH=ON \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DPHONON_INSTALL_QT_EXTENSIONS_INTO_SYSTEM_QT=ON \ + -DPHONON_BUILD_PHONON4QT5=ON \ + -D__KDE_HAVE_GCC_VISIBILITY=NO \ + -DCMAKE_INSTALL_LIBDIR=lib + make +} + +package_phonon-qt4(){ + pkgdesc="The multimedia framework for KDE4, without pulseaudio recommendation and without libpulse and libqzeitgeist support" + optdepends=('phonon-qt4-vlc: VLC backend' 'phonon-qt4-gstreamer: GStreamer backend') + + cd build + make DESTDIR="${pkgdir}" install + + # Install headers into the Qt4 dir + install -d "${pkgdir}"/usr/include/qt4 + mv "${pkgdir}"/usr/include/{phonon,KDE} "${pkgdir}"/usr/include/qt4/ + + sed -i 's#includedir=/usr/include#includedir=/usr/include/qt4#' \ + "${pkgdir}/usr/lib/pkgconfig/phonon.pc" + + install -Dm644 ../${pkgbase}-${pkgver}/COPYING.LIB "${pkgdir}"/usr/share/licenses/${pkgname}/COPYING.LIB +} + +package_phonon-qt5(){ + pkgdesc="The multimedia framework for KF5, without pulseaudio recommendation and without libpulse support" + depends=('qt5-base') + optdepends=('phonon-qt5-vlc: VLC backend' 'phonon-qt5-gstreamer: GStreamer backend') + + cd build-qt5 + make DESTDIR="${pkgdir}" install + + install -Dm644 ../${pkgbase}-${pkgver}/COPYING.LIB "${pkgdir}"/usr/share/licenses/${pkgname}/COPYING.LIB +} diff --git a/phonon/qt-5.4.2.patch b/phonon/qt-5.4.2.patch new file mode 100644 index 0000000..f4231e3 --- /dev/null +++ b/phonon/qt-5.4.2.patch @@ -0,0 +1,23 @@ +From: Hrvoje Senjan +Date: Thu, 28 May 2015 15:56:47 +0000 +Subject: Yet another _include_dirs fix +X-Git-Url: http://quickgit.kde.org/?p=phonon.git&a=commitdiff&h=635b65fa417f49ac4ae189e926bf138efc6544d6 +--- +Yet another _include_dirs fix + +The variable is set as a definition, so mark it as such +--- + + +--- a/cmake/FindPhononInternal.cmake ++++ b/cmake/FindPhononInternal.cmake +@@ -409,7 +409,7 @@ + file(WRITE "${_source_file}" "${_source}") + set(_include_dirs "-DINCLUDE_DIRECTORIES:STRING=${QT_INCLUDES}") + +- try_compile(_compile_result ${CMAKE_BINARY_DIR} ${_source_file} CMAKE_FLAGS "${_include_dirs}" OUTPUT_VARIABLE _compile_output_var) ++ try_compile(_compile_result ${CMAKE_BINARY_DIR} ${_source_file} CMAKE_FLAGS "${CMAKE_CXX_FLAGS}" COMPILE_DEFINITIONS "${_include_dirs}" OUTPUT_VARIABLE _compile_output_var) + + if(NOT _compile_result) + message("${_compile_output_var}") + diff --git a/physfs/PKGBUILD b/physfs/PKGBUILD new file mode 100644 index 0000000..9feb358 --- /dev/null +++ b/physfs/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=physfs +pkgver=3.0.2 +pkgrel=1 +pkgdesc='A library to provide abstract access to various archives' +arch=('i686' 'x86_64') +url='https://icculus.org/physfs/' +license=('zlib') +depends=('zlib') +makedepends=('cmake' 'doxygen' 'quilt') +source=(https://icculus.org/physfs/downloads/${pkgname}-${pkgver}.tar.bz2) +sha512sums=('4024b6c3348e0b6fc1036aac330192112dfe17de3e3d14773be9f06e9a062df5a1006869f21162b4e0b584989f463788a35e64186b1913225c073fea62754472') + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DPHYSFS_BUILD_TEST=OFF + make -C build all docs +} + +package() { + make DESTDIR="${pkgdir}" install -C build + install -d "${pkgdir}"/usr/share/{doc/physfs,man/man3} + install -m644 build/docs/html/* "${pkgdir}/usr/share/doc/physfs" + install -m644 build/docs/man/man3/* "${pkgdir}/usr/share/man/man3" + + for i in author Deinit deprecated description extension Free Init major Malloc minor opaque patch Realloc remove url ; do + mv "${pkgdir}"/usr/share/man/man3/{,PHYSFS_}$i.3 + done + + install -D -m644 ${pkgname}-${pkgver}/LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/picom/PKGBUILD b/picom/PKGBUILD new file mode 100644 index 0000000..1b5955c --- /dev/null +++ b/picom/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=picom +pkgver=8.2 +_debver=8.2 +_debrel=1 +pkgrel=1 +pkgdesc='X compositor that may fix tearing issues' +arch=('i686' 'x86_64') +url='https://github.com/yshui/picom' +license=('MPL-2.0') +provides=('compton') +makedepends=('asciidoc' 'mesa' 'meson' 'ninja' 'uthash' 'quilt') +depends=('hicolor-icon-theme' 'libconfig' 'libev' 'libgl' 'pcre' 'pixman' + 'xcb-util-image' 'xcb-util-renderutil') +backup=('etc/xdg/picom.conf') +optdepends=('python: For running picom-convgen.py' + 'xenocara-xwininfo: For picom-trans' + 'xenocara-xprop: For picom-trans') +source=("$pkgname-$pkgver.tar.gz::https://github.com/yshui/picom/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/picom/picom_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('bdc6675e73a211075ee0df2b056342cabb19ad27fd73586f5216886f503cd994536845eb866f371e07a8dc0404346c67b899a14830e9b7cbc9c01cbd782f36b1' + '2d1c06ff09d3a83b0ed07035100ef8f385c0cab8c685a8ba6ea7fd41352823d2541bf202d53cd54129bdfadc76994d7cb09f4fe4607bda35415d7c9e7757c2d7') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + mkdir -p build + hyperbola-meson build $pkgname-$pkgver -D b_ndebug=true -D with_docs=true -D dbus=false + ninja -v -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + + # The config that comes with picom + install -Dm644 $pkgname-$pkgver/picom.sample.conf "$pkgdir/etc/xdg/picom.conf" + install -Dm644 $pkgname-$pkgver/picom.sample.conf "$pkgdir/usr/share/doc/picom/picom.conf.example" + + # Man pages and license file + install -Dm644 build/man/picom.1 "$pkgdir/usr/share/man/man1/picom.1" + install -Dm644 build/man/picom-trans.1 "$pkgdir/usr/share/man/man1/picom-trans.1" + install -Dm644 $pkgname-$pkgver/LICENSES/MPL-2.0 -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/pidgin-otr/PKGBUILD b/pidgin-otr/PKGBUILD new file mode 100644 index 0000000..f40ec1e --- /dev/null +++ b/pidgin-otr/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=pidgin-otr +pkgver=4.0.2 +pkgrel=1 +pkgdesc="Off-the-Record Messaging plugin for Pidgin" +arch=('i686' 'x86_64') +license=('GPL-2' 'FDL-1.3') +url='https://www.cypherpunks.ca/otr/' +depends=('libotr' 'pidgin' 'perl-xml-parser') +makedepends=('intltool' 'gettext-tiny') +source=("https://www.cypherpunks.ca/otr/${pkgname}-${pkgver}.tar.gz"{,.asc}) +sha512sums=('6815f1d2be5786726602a924ae6ead5371543a53bd36231dc3239fa580f73a6136836df0c1beb64d83b76e6bd0d80ffe6750ca6e9ddd2a6a94841a9a678925ad' + 'SKIP') +validpgpkeys=('22DF3305DF56667CE15784FCF24DE08F42C2ABAD') # OTR Dev Team (Signing Key) + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/pidgin/PKGBUILD b/pidgin/PKGBUILD new file mode 100644 index 0000000..1b28b05 --- /dev/null +++ b/pidgin/PKGBUILD @@ -0,0 +1,100 @@ +# Maintainer: Jesus E. + +pkgbase=pidgin +pkgname=('pidgin' 'libpurple') +pkgver=2.14.1 +_debver=$pkgver +_debrel=1 +pkgrel=4 +arch=('i686' 'x86_64') +url='https://pidgin.im/' +license=('GPL-2') +makedepends=('startup-notification' 'gtkspell2' 'libxss' 'nss' 'libsasl' 'libsm' + 'libidn' 'python' 'hicolor-icon-theme' 'tk' 'libnsl' 'ca-certificates' + 'intltool' 'gettext-tiny' 'libxcrypt' 'gtk2' 'perl' 'quilt') +source=(https://downloads.sourceforge.net/project/pidgin/Pidgin/$pkgver/$pkgname-$pkgver.tar.bz2{,.asc} + https://deb.debian.org/debian/pool/main/p/pidgin/pidgin_${_debver}-${_debrel}.debian.tar.xz + privacy.patch) +sha512sums=('6ce5c58f32fa680d7f67e37a42b0f77c8253018cee21df2895d52166d9eb6ecaf0458b1610adbd46f337d00e75933db7578c2f9808654bd22838ba5db0a13030' + 'SKIP' + 'e39a8d1848e9e4438ec5c1bda5d42ac614fbb20fd6a4b88554ea1a338919d785cb3783894c13e093676df6bb30e8dc4adb6254a80cae00432c57109ab4bb4b13' + '36ffb6ca6e5feb86583af0679cb47a4a36cfdcf2e30dfa8b02fd316c4fc6daf7d5c008109a3af426f62f18d9af58122b9d61c32ee324d52309dbaef14247f453') +validpgpkeys=('40DE1DC7288FE3F50AB938C548F66AFFD9BDB729') # Gary Kramlich + +prepare() { + cd $pkgbase-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # additional fixes + patch -Np1 -i $srcdir/privacy.patch +} + +build() { + cd $pkgbase-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-cyrus-sasl \ + --enable-gtkspell \ + --disable-schemas-install \ + --disable-meanwhile \ + --disable-gnutls \ + --disable-doxygen \ + --disable-nm \ + --disable-avahi \ + --disable-dbus \ + --disable-farstream \ + --disable-vv \ + --disable-gstreamer \ + --disable-gstreamer-video \ + --disable-gstreamer-interfaces \ + --with-system-ssl-certs=/etc/ssl/certs \ + --with-dynamic-prpls=irc,jabber,silc,simple,zephyr + make +} + +package_pidgin(){ + pkgdesc="Multi-protocol instant messaging client" + depends=('libpurple' 'startup-notification' 'gtkspell2' 'libxss' 'libsm' 'hicolor-icon-theme') + optdepends=('aspell: for spelling correction' + 'pidgin-otr: for Off-the-Record Messaging support') + + cd $pkgbase-$pkgver + + # For linking + make -C libpurple DESTDIR="$pkgdir" install-libLTLIBRARIES + + make -C pidgin DESTDIR="$pkgdir" install + make -C doc DESTDIR="$pkgdir" install + + # Remove files that are packaged in libpurle + make -C libpurple DESTDIR="$pkgdir" uninstall-libLTLIBRARIES + + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_libpurple(){ + pkgdesc="IM library extracted from Pidgin" + depends=('libsasl' 'libidn' 'libnsl' 'nss' 'libxcrypt') + optdepends=('ca-certificates: SSL CA certificates' + 'tk: Tcl/Tk scripting support') + + cd $pkgbase-$pkgver + + for _dir in libpurple share/sounds share/ca-certs m4macros po; do + make -C "$_dir" DESTDIR="$pkgdir" install + done + + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pidgin/privacy.patch b/pidgin/privacy.patch new file mode 100644 index 0000000..ee36f57 --- /dev/null +++ b/pidgin/privacy.patch @@ -0,0 +1,50 @@ +--- a/pidgin/gtkutils.c 2020-06-10 04:41:32.000000000 +0200 ++++ b/pidgin/gtkutils.c 2021-08-24 21:56:32.802231832 +0200 +@@ -677,7 +677,6 @@ + GdkPixbuf *pixbuf = NULL; + GtkSizeGroup *sg; + GList *p; +- const char *gtalk_name = NULL; + int i; + + aop_menu = g_malloc0(sizeof(AopMenu)); +@@ -686,39 +685,12 @@ + gtk_widget_show(aop_menu->menu); + sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); + +- if (purple_find_prpl("prpl-jabber")) { +- gtalk_name = _("Google Talk"); +- } +- + for (p = purple_plugins_get_protocols(), i = 0; + p != NULL; + p = p->next, i++) { + + plugin = (PurplePlugin *)p->data; + +- if (gtalk_name && strcmp(gtalk_name, plugin->info->name) < 0) { +- char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", +- "16", "google-talk.png", NULL); +- GtkWidget *item; +- +- pixbuf = pidgin_pixbuf_new_from_file(filename); +- g_free(filename); +- +- gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), +- item = aop_menu_item_new(sg, pixbuf, gtalk_name, "prpl-jabber", "protocol")); +- g_object_set_data(G_OBJECT(item), "fakegoogle", GINT_TO_POINTER(1)); +- +- if (pixbuf) +- g_object_unref(pixbuf); +- +- /* libpurple3 compatibility */ +- if (purple_strequal(default_proto_id, "prpl-gtalk")) +- aop_menu->default_item = i; +- +- gtalk_name = NULL; +- i++; +- } +- + pixbuf = pidgin_create_prpl_icon_from_prpl(plugin, PIDGIN_PRPL_ICON_SMALL, NULL); + + gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), diff --git a/pigeonhole/PKGBUILD b/pigeonhole/PKGBUILD new file mode 100644 index 0000000..b2f2b47 --- /dev/null +++ b/pigeonhole/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# This must be built against the version of dovecot being used, +# else mail delivery will fail. +# Specify the version of dovecot to be used here: +_dcpkgver=2.3.13 +_dcmajor=2.3 +# Make sure to bump pkgrel if changing this. + +pkgname=pigeonhole +pkgver=0.5.13 +pkgrel=1 +pkgdesc='Sieve implementation for Dovecot' +url='https://pigeonhole.dovecot.org/' +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=("dovecot=${_dcpkgver}") +conflicts=('dovecot-sieve' 'pigeonhole-hg') +source=("https://pigeonhole.dovecot.org/releases/2.3/dovecot-${_dcmajor}-pigeonhole-${pkgver}.tar.gz"{,.sig}) +sha512sums=('fcbc13d71af4e6dd4e34192484e203d755e5015da76a4774b11a79182b2baad36cab5a471346093111ace36a7775dfe8294555f8b777786dde386820b3ec5cd3' + 'SKIP') +validpgpkeys=( + '42F3CD50D4F25A41833BEE3704D62B1E3DFBB4F4' # Stephan Bosch + '2BE74AAB3EE754DFB9C80D3318A348AEED409DA1' + ) + +prepare() { + cd "dovecot-${_dcmajor}-pigeonhole-${pkgver}" + + local filename + for filename in "${source[@]}"; do + if [[ "$filename" =~ \.patch$ ]]; then + patch -p1 -N -l -i "$srcdir/${filename##*/}" + fi + done +} + +build() { + cd "dovecot-${_dcmajor}-pigeonhole-${pkgver}" + + ./configure \ + --prefix=/usr \ + --with-dovecot=/usr/lib/dovecot \ + --with-moduledir=/usr/lib/dovecot/modules \ + --disable-static + make +} + +package() { + cd "dovecot-${_dcmajor}-pigeonhole-${pkgver}" + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING* -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/pigz/PKGBUILD b/pigz/PKGBUILD new file mode 100644 index 0000000..0eb5091 --- /dev/null +++ b/pigz/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=pigz +pkgver=2.6 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Parallel implementation of the gzip file compressor" +arch=('i686' 'x86_64') +url='https://www.zlib.net/pigz' +license=('zlib') +depends=('zlib') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/p/pigz/pigz_${pkgver}.orig.tar.xz" + "LICENSE::https://metadata.ftp-master.debian.org/changelogs/main/p/pigz/pigz_${_debver}-${_debrel}_copyright") +sha512sums=('4384210fd6e48e407502b00654ec1cf713b44727d4020c1c1bbed117ecfd45169b4a8a94e6a7adbd7d55f85690ececf299c5ca3d5d4eabfea0844ebdc0e67577' + '617e7e4ed247ae224bd782dda4b565c4cc2e8d4deb52a5f357b4533e6bdd077d4d5c00baeec05f9ff30f523e742cf8164ea528b34ff6d2b3868235592894cc6d') + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + + install -Dm755 "$srcdir"/$pkgname-$pkgver/$pkgname "$pkgdir"/usr/bin/$pkgname + + pushd "$pkgdir"/usr/bin + ln -s pigz unpigz + popd + + install -Dm644 "$srcdir"/$pkgname-$pkgver/$pkgname.1 -t "$pkgdir"/usr/share/man/man1 + install -Dm644 "$srcdir"/$pkgname-$pkgver/$pkgname.pdf -t "$pkgdir"/usr/share/doc/$pkgname + install -Dm644 "$srcdir"/$pkgname-$pkgver/README -t "$pkgdir"/usr/share/licenses/$pkgname + + install -Dm644 "$srcdir"/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/pinentry-bemenu/PKGBUILD b/pinentry-bemenu/PKGBUILD new file mode 100644 index 0000000..c1202dd --- /dev/null +++ b/pinentry-bemenu/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=pinentry-bemenu +pkgver=0.12.0 +pkgrel=1 +pkgdesc="bemenu-based PIN or pass-phrase entry dialog for GnuPG" +arch=('i686' 'x86_64') +url='https://github.com/t-8ch/pinentry-bemenu' +license=('GPL-3') +depends=('bemenu' 'libassuan' 'libgpg-error' 'popt') +makedepends=('meson' 'ninja' 'cmake' 'pkg-config') +groups=('pinentry-extra') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/t-8ch/${pkgname}/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('243b0572ae80f9fe95269545f13f71a85a84afd75f212872ccb7f34c078b86ba92faca2cdf772e333390bd1367b9e5272247ba1dfb40fc86a1bbd0efb5da2991') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + hyperbola-meson build + cd build + ninja +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}/build" + DESTDIR="$pkgdir" ninja install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/pinentry-extra/PKGBUILD b/pinentry-extra/PKGBUILD new file mode 100644 index 0000000..25816a4 --- /dev/null +++ b/pinentry-extra/PKGBUILD @@ -0,0 +1,107 @@ +# Maintainer: Jesus E. + +# Based on pinentry package + +pkgbase=pinentry-extra +_realpkgname=pinentry +pkgname=('pinentry-curses' 'pinentry-gtk' 'pinentry-gtk2' 'pinentry-qt' 'pinentry-fltk') +pkgver=1.1.0 +_debver=$pkgver +_debrel=4 +pkgrel=8 +url='https://gnupg.org/related_software/pinentry/' +arch=('i686' 'x86_64') +license=('GPL-2') +makedepends=('libassuan' 'libcap' 'gcr' 'gtk2' 'qt-base' 'fltk' 'quilt') +source=("https://gnupg.org/ftp/gcrypt/pinentry/pinentry-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/p/pinentry/pinentry_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5012672925bcb5f683358c259e55e4b87c67cf063ad52c759308933733025c33f7ce08e5b8019ffc101cbf7ef30499040ef2fd34a7611698e65e1593f80948cd' + '0797c9a317a31d2a1b9c6dd5f89c1af41c8c126f33c5606be26683f8b1870f50b0e2875f601a38a0a36d351a1f0b772dbc499bb078fd37a39c3b1972098dd66d') + +prepare() { + cd "${srcdir}/pinentry-${pkgver}" + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES='debian/patches' + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/pinentry-${pkgver}" + ./configure \ + --prefix=/usr \ + --enable-pinentry-curses \ + --enable-pinentry-gtk2 \ + --enable-pinentry-gnome3 \ + --enable-pinentry-qt \ + --enable-pinentry-qt5 \ + --enable-pinentry-fltk \ + --enable-fallback-curses \ + --disable-pinentry-tty \ + --disable-pinentry-tqt \ + --disable-pinentry-emacs \ + --disable-inside-emacs \ + --disable-libsecret + make V=1 +} + +package_pinentry-curses() { + pkgdesc='Curses-based PIN or pass-phrase entry dialog for GnuPG' + depends=('libassuan' 'libcap' 'ncurses') + groups=('pinentry-extra') + + cd "${srcdir}/${_realpkgname}-${pkgver}" + + install -Dm755 curses/${pkgname} -t "${pkgdir}/usr/bin" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_pinentry-gtk() { + pkgdesc='GTK-based PIN or pass-phrase entry dialog for GnuPG' + depends=('libassuan' 'libcap' 'gcr') + groups=('pinentry-extra') + + cd "${srcdir}/${_realpkgname}-${pkgver}" + + install -Dm755 gnome3/${_realpkgname}-gnome3 "${pkgdir}/usr/bin/${pkgname}" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_pinentry-gtk2() { + pkgdesc='GTK+2-based PIN or pass-phrase entry dialog for GnuPG' + depends=('libassuan' 'libcap' 'gtk') + groups=('pinentry-extra') + + cd "${srcdir}/${_realpkgname}-${pkgver}" + + install -Dm755 gtk+-2/${_realpkgname}-gtk-2 "${pkgdir}/usr/bin/${pkgname}" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_pinentry-qt() { + pkgdesc='Qt-based PIN or pass-phrase entry dialog for GnuPG' + depends=('libassuan' 'libcap' 'qt-base') + groups=('pinentry-extra') + + cd "${srcdir}/${_realpkgname}-${pkgver}" + + install -Dm755 qt/${pkgname} -t "${pkgdir}/usr/bin" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_pinentry-fltk() { + pkgdesc='FLTK-based PIN or pass-phrase entry dialog for GnuPG' + depends=('libassuan' 'libcap' 'fltk') + groups=('pinentry-extra') + + cd "${srcdir}/${_realpkgname}-${pkgver}" + + install -Dm755 fltk/${pkgname} -t "${pkgdir}/usr/bin" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pingus/PKGBUILD b/pingus/PKGBUILD new file mode 100644 index 0000000..7b8c3aa --- /dev/null +++ b/pingus/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=pingus +pkgver=0.7.6 +_debver=$pkgver +_debrel=5.1 +pkgrel=3 +pkgdesc="A level-based puzzle game." +arch=('i686' 'x86_64') +url='https://pingus.seul.org' +license=('GPL-3') +depends=('sdl_image' 'sdl_mixer' 'libgl' 'boost-libs') +makedepends=('scons' 'python-setuptools' 'boost' 'mesa' 'glu' 'quilt') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Pingus/pingus/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/pingus/pingus_${_debver}-${_debrel}.debian.tar.xz" + "pingus.desktop") +sha512sums=('ea0e7fd2cc1f6c23e62e222dffa1eb4764313ccecd716083c516fa4720c19562c9940da1dae4cbc527b85de9c0094f482e4f907212226b39ad044222b477769b' + 'c67fbb8ad55d7e4d75e5aa8ceccb6b660f145448af999205f6915e8492f0468e2dbf0670978b9dcfd1c41b81aa22115dec30dbc5385119cf10794658c050df50' + '77afaa7e979329f0f79aa7810354a5b609465c60b8f23321c657437e3381440465c3bf04db2c1be8445541bfae17222f12cf02310724c25cf9f7a4118955d529') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + scons prefix=/usr bindir=/usr/games datadir=/usr/share/games/pingus +} + +package() { + cd ${pkgname}-${pkgver} + + make install DESTDIR="${pkgdir}" PREFIX="/usr" BINDIR="/usr/games" DATADIR="/usr/share/games/pingus" + + install -D -m644 "${srcdir}"/pingus.desktop -t "${pkgdir}"/usr/share/applications + install -D -m644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/pingus/pingus.desktop b/pingus/pingus.desktop new file mode 100644 index 0000000..22fdba7 --- /dev/null +++ b/pingus/pingus.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Pingus +Comment=A level-based puzzle game. +Exec=pingus +Terminal=false +Type=Application +Categories=Application;Game;LogicGame +Icon=/usr/share/games/pingus/images/core/editor/actions.png diff --git a/pioneer/PKGBUILD b/pioneer/PKGBUILD new file mode 100644 index 0000000..dc5ef0f --- /dev/null +++ b/pioneer/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=pioneer +pkgver=20240203 +pkgrel=1 +pkgdesc="A game of lonely space adventure" +arch=('i686' 'x86_64') +url='https://github.com/pioneerspacesim/pioneer' +license=('Apache-2.0' 'Boost-1.0' 'Modified-BSD' 'CC-BY-SA-3.0' 'GPL-3' 'custom:Bitstream-Vera') +depends=('assimp' 'curl' 'freetype2' 'glew' 'hicolor-icon-theme' 'libpng' 'libsigc++' 'libvorbis' 'lua52' 'mesa' 'sdl2' 'sdl2_image') +makedepends=('cmake' 'ninja' 'pkg-config') +groups=('games') +source=("$pkgname-$pkgver.tar.gz::https://github.com/pioneerspacesim/pioneer/archive/$pkgver.tar.gz" + "fix-build.patch") +sha512sums=('644f70dbb83f351b9cba46c95ef4d8dafdb0dce04e01981176425e4088a1c2f5ccb3df9b88128db2f940e8703347c289fc6cc9103b5b23cc1f3f7ef0efd49fa8' + '2eb1ace3c623e848b7b5387c199561ebc571b13bfa6fe31d523821782b58ba3fca85134a6985cd9b7457df0bbc5d9bb91d59022eeb6a4aced27b2a55d481c8cc') + +prepare() { + cd "$pkgname-$pkgver" + + # fix version string, don't use the build date + sed -i 's|PROJECT_VERSION "%Y%m%d"|PROJECT_VERSION "'$pkgver'"|' CMakeLists.txt + + # fix build + patch -Np1 -i ${srcdir}/fix-build.patch +} + +build() { + cmake -S "$pkgname-$pkgver" -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX:PATH=/usr \ + -D CMAKE_INSTALL_BINDIR:PATH=/usr/games/ \ + -D PIONEER_INSTALL_DATADIR:PATH=/usr/share/games/pioneer \ + -D PIONEER_DATA_DIR:PATH=/usr/share/games/pioneer/data \ + -D USE_SYSTEM_LIBGLEW:BOOL=ON \ + -D USE_SYSTEM_LIBLUA:BOOL=ON \ + -D CMAKE_EXPORT_COMPILE_COMMANDS=1 \ + -Wno-dev + + cmake --build build --target all build-data +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # remove empty directories + rmdir "$pkgdir"/usr/share/games/$pkgname/data/music/core/{{un,}docked,near-planet} + + # move internal structure + rm -rf "$pkgdir"/usr/share/games/$pkgname/licenses + + # licenses + install -Dm644 "$pkgname-$pkgver"/licenses/{Apache-2.0.txt,Boost-1.0.txt,BSD-3-Clause.txt,CC-BY-SA-3.0.txt,DejaVu-license.txt,GLEW.txt,GPL-3.txt,LZ4.txt,SIL-1.1.txt} \ + -t "$pkgdir"/usr/share/licenses/$pkgname + install -Dm644 "$pkgname-$pkgver/licenses/Image Use Policy - NASA Spitzer Space Telescope.html" \ + -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/pioneer/fix-build.patch b/pioneer/fix-build.patch new file mode 100644 index 0000000..c9861eb --- /dev/null +++ b/pioneer/fix-build.patch @@ -0,0 +1,20 @@ +--- a/src/Aabb.h 2024-02-03 06:06:54.000000000 +0100 ++++ b/src/Aabb.h 2024-02-04 19:26:31.960033267 +0100 +@@ -4,6 +4,7 @@ + #ifndef _AABB_H + #define _AABB_H + ++#include "libs.h" + #include "vector3.h" + + #include // for std::min / std::max +--- a/src/GeoPatch.h 2024-02-03 06:06:54.000000000 +0100 ++++ b/src/GeoPatch.h 2024-02-04 19:27:21.310033422 +0100 +@@ -6,6 +6,7 @@ + + #include + ++#include "libs.h" + #include "Color.h" + #include "GeoPatchID.h" + #include "JobQueue.h" diff --git a/pitivi/PKGBUILD b/pitivi/PKGBUILD new file mode 100644 index 0000000..fef0a0c --- /dev/null +++ b/pitivi/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=pitivi +pkgver=2022.06 +pkgrel=1 +pkgdesc="Free and libre editor for audio / video projects using the multimedia graph framework" +arch=('i686' 'x86_64') +url='https://pitivi.org/' +license=('LGPL-2.1') +depends=('gst-editing-services' 'gst-plugin-gtk' 'gst-plugins-bad' 'gst-plugins-good' 'gst-python' + 'gtk' 'python-pycairo' 'python-pygobject' 'python-matplotlib' 'python-numpy') +makedepends=('intltool' 'itstool' 'meson' 'quilt') +optdepends=('gst-libav: additional multimedia codecs' + 'gst-plugins-ugly: additional multimedia codecs') +source=("https://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz" + "remove-warning-soft-deps.patch") +sha512sums=('649c8e61d9545cbf35a0a0c8f648490c14c8bfb6c6637794887c03bffd6998c63cb2cc22102cd2f7a59974f79488a13f29beceadab29ddd1c1c01abff33a85fa' + '87be36c0ed0048848a8522c033f9154cbf7941fcd6e41671483eee8cc77fab3be08d2834c789482745ab56489d721264200b2f8217fb8dc10655af88fa1f667e') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i "$srcdir"/remove-warning-soft-deps.patch +} + +build() { + hyperbola-meson $pkgname-$pkgver build + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/pitivi/remove-warning-soft-deps.patch b/pitivi/remove-warning-soft-deps.patch new file mode 100644 index 0000000..28f3aab --- /dev/null +++ b/pitivi/remove-warning-soft-deps.patch @@ -0,0 +1,84 @@ +--- a/pitivi/greeterperspective.py 2022-06-25 01:30:31.000000000 +0200 ++++ b/pitivi/greeterperspective.py 2024-10-31 01:15:29.520315368 +0100 +@@ -108,7 +108,6 @@ + self.__cancel_button = None + self.__new_project_button = None + self.__open_project_button = None +- self.__warnings_button = None + + # Projects selected for removal. + self.__selected_projects = [] +@@ -241,10 +240,6 @@ + self.__cancel_button = Gtk.Button.new_with_label(_("Cancel")) + self.__cancel_button.connect("clicked", self.__cancel_clicked_cb) + +- self.__warnings_button = Gtk.MenuButton.new() +- self.__warnings_button.props.image = Gtk.Image.new_from_icon_name("warning-symbolic", Gtk.IconSize.BUTTON) +- self.__warnings_button.set_popover(self.__create_warnings_popover()) +- + self.menu_button = self.__create_menu() + + headerbar.pack_start(self.__new_project_button) +@@ -252,7 +247,6 @@ + headerbar.pack_end(self.menu_button) + headerbar.pack_end(self.__selection_button) + headerbar.pack_end(self.__cancel_button) +- headerbar.pack_end(self.__warnings_button) + headerbar.show() + + return headerbar +@@ -265,7 +259,6 @@ + self.__selection_button.set_visible(projects) + self.menu_button.set_visible(welcome or projects) + self.headerbar.set_show_close_button(welcome or projects) +- self.__warnings_button.set_visible((welcome or projects) and MISSING_SOFT_DEPS) + + if selection: + self.headerbar.get_style_context().add_class("selection-mode") +@@ -433,46 +426,3 @@ + for project in self.__selected_projects: + self.app.recent_manager.remove_item(project.uri) + self.refresh() +- +- def __create_warnings_popover(self): +- """Creates a popover listing missing soft dependencies.""" +- popover = Gtk.Popover() +- box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, margin=PADDING * 3) +- +- label = Gtk.Label(_("To enable additional features, please install the following packages and restart Pitivi:")) +- label.props.halign = Gtk.Align.START +- label.props.wrap = True +- label.props.xalign = 0 +- box.pack_start(label, False, False, 0) +- +- grid = Gtk.Grid() +- grid.props.row_spacing = SPACING +- grid.props.column_spacing = PADDING +- grid.props.margin_start = SPACING +- grid.props.margin_top = SPACING * 2 +- +- for row_index, dep in enumerate(MISSING_SOFT_DEPS.values()): +- name_label = Gtk.Label(dep.modulename) +- name_label.props.selectable = True +- name_label.props.can_focus = False +- name_label.props.xalign = 0 +- name_label.props.valign = Gtk.Align.START +- grid.attach(name_label, 0, row_index, 1, 1) +- +- mdash_label = Gtk.Label("―") +- mdash_label.props.xalign = 0 +- mdash_label.props.valign = Gtk.Align.START +- grid.attach(mdash_label, 1, row_index, 1, 1) +- +- description_label = Gtk.Label(dep.additional_message) +- description_label.props.wrap = True +- description_label.props.xalign = 0 +- description_label.props.yalign = Gtk.Align.START +- grid.attach(description_label, 2, row_index, 1, 1) +- +- box.pack_start(grid, False, False, 0) +- +- wrapper_bin = BinWithNaturalWidth(box, width=500) +- wrapper_bin.show_all() +- popover.add(wrapper_bin) +- return popover diff --git a/pixman/PKGBUILD b/pixman/PKGBUILD new file mode 100644 index 0000000..d706667 --- /dev/null +++ b/pixman/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=pixman +_openbsdver=6.9 +pkgver=0.38.4 +pkgrel=2 +pkgdesc="The pixel-manipulation library for X and cairo, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('glibc') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/pixman-$pkgver.tar.lz{,.sig}) +sha512sums=('13c4ae06cb1a343e2f6eff5dc6c175bf36bce09a0774d608499e42d524e7e0e3cad4702dd5b9d37c423f7b37d0a548e3e970055529ea3aeb547009c3b56ce5d6' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/pixman" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/pixman" + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd "xenocara-$_openbsdver/lib/pixman" + make check +} + +package() { + cd "xenocara-$_openbsdver/lib/pixman" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/pixz/PKGBUILD b/pixz/PKGBUILD new file mode 100644 index 0000000..7de91d7 --- /dev/null +++ b/pixz/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=pixz +pkgver=1.0.7 +pkgrel=1 +pkgdesc="Parallel, indexed xz compressor" +arch=('i686' 'x86_64') +url="https://github.com/vasi/pixz" +license=('Simplified-BSD') +depends=('libarchive') +makedepends=('asciidoc') +source=(https://github.com/vasi/pixz/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz) +sha512sums=('4811da538931620bf05499912c98a501c2c879f3086cd59c4c67b302ded3547a9d246e7fd01ad36512e361c6c4e206e23f2aaf028b25ad44b74b529547a7f5ab') + +build() { + cd $pkgname-$pkgver + + manpage=true ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir"/$pkgname-$pkgver/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/pkgfile/PKGBUILD b/pkgfile/PKGBUILD new file mode 100644 index 0000000..fe8769a --- /dev/null +++ b/pkgfile/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=pkgfile +pkgver=21 +pkgrel=1 +pkgdesc="A pacman .files metadata explorer" +arch=('i686' 'x86_64') +url="https://github.com/falconindy/pkgfile" +license=('Expat') +depends=('libarchive' 'curl' 'pcre' 'pacman') +makedepends=('meson') +optdepends=('cron: to execute scheduled jobs') +backup=('etc/cron.daily/pkgfile') +source=("$pkgname-$pkgver.tar.gz::https://github.com/falconindy/pkgfile/archive/refs/tags/v$pkgver.tar.gz" + "pkgfile.cron.daily") +install=pkgfile.install +sha512sums=('657222f530b110185bc8343d54e1e236bd9ef8aac0e07cb444e304b92e91897fae4f5784a5a48ce8dc6bcae74401c83d12ec93eaa91ce026f4185071e30015b7' + 'bcb8487d76f893a0b039adeb2d29e5bc5905c8d7cab170c5abdcbad8c2d2744eb865aa78e1cdb5c755b81616041249ec7c5b3029b8c525c31c80424de119cfa6') + +build() { + cd "$pkgname-$pkgver" + + hyperbola-meson build -D systemd_units=false + ninja -v -C build +} + +package() { + cd "$pkgname-$pkgver" + + DESTDIR=$pkgdir ninja -C build install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm744 "$srcdir/pkgfile.cron.daily" "$pkgdir/etc/cron.daily/pkgfile" +} diff --git a/pkgfile/pkgfile.cron.daily b/pkgfile/pkgfile.cron.daily new file mode 100644 index 0000000..c47470c --- /dev/null +++ b/pkgfile/pkgfile.cron.daily @@ -0,0 +1,24 @@ +#!/bin/sh + +# nicenesses range from -20 (most favorable scheduling) to 19 (least favorable) +NICE=19 + +# 0 for none, 1 for real time, 2 for best-effort, 3 for idle +IONICE_CLASS=2 + +# 0-7 (for IONICE_CLASS 1 and 2 only), 0=highest, 7=lowest +IONICE_PRIORITY=7 + +CMD_LOGROTATE="/usr/bin/pkgfile -u" + +if [ -x /usr/bin/nice ]; then + CMD_LOGROTATE="/usr/bin/nice -n ${NICE:-19} ${CMD_LOGROTATE}" +fi + +if [ -x /usr/bin/ionice ]; then + CMD_LOGROTATE="/usr/bin/ionice -c ${IONICE_CLASS:-2} -n ${IONICE_PRIORITY:-7} ${CMD_LOGROTATE}" +fi + +${CMD_LOGROTATE} + +exit 0 diff --git a/pkgfile/pkgfile.install b/pkgfile/pkgfile.install new file mode 100644 index 0000000..5545a3d --- /dev/null +++ b/pkgfile/pkgfile.install @@ -0,0 +1,18 @@ +#!/bin/sh + +post_install() { + printf "==> Run 'pkgfile --update' to initialize the database\n" +} + +post_remove() { + # the cache dir might not be removed, notify the user + if [ -d var/cache/pkgfile ]; then + printf "==> /var/cache/pkgfile has not been removed\n" + fi +} + +post_upgrade() { + if [ "$(vercmp 5 "$2")" -eq 1 ]; then + printf "==> DB format has changed. Please run pkgfile -uu\n" + fi +} diff --git a/plib/PKGBUILD b/plib/PKGBUILD new file mode 100644 index 0000000..2027dd0 --- /dev/null +++ b/plib/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=plib +pkgver=1.8.5 +pkgrel=1 +pkgdesc='Set of libraries to write games and other realtime interactive applications' +arch=('i686' 'x86_64') +url="http://plib.sourceforge.net/" +license=('GPL-2') +makedepends=('mesa-libgl' 'libxi' 'libxmu') +source=(http://plib.sourceforge.net/dist/$pkgname-$pkgver.tar.gz + 'config.guess::https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' + 'config.sub::https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD') +options=('staticlibs') +sha512sums=('17154cc77243fe576c2bcbcb0285b98aef1a0634658f5473e95fe0ac8fa3ed477dbe5620e44ccf0b7cc616f812af0cd44d6fcbba0c563180d3b61c9d6f158e1d' + 'SKIP' + 'SKIP') + +prepare() { + cd ${srcdir}/$pkgname-$pkgver + + cp ../config.guess . + cp ../config.sub . +} + +build() { + cd ${srcdir}/$pkgname-$pkgver + + CXXFLAGS=-fPIC CFLAGS=-fPIC LDFLAGS=-fPIC ./configure --prefix=/usr + make +} + +package() { + cd ${srcdir}/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + install -D -m644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/plotutils/PKGBUILD b/plotutils/PKGBUILD new file mode 100644 index 0000000..351a2e4 --- /dev/null +++ b/plotutils/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. +# Packager (Arch): Maksim Sipos (maxsipos at gmail dot com) + +pkgname=plotutils +pkgver=2.6 +_debver=2.6 +_debrel=11 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc='Set of utilities and libraries for plotting.' +url='https://directory.fsf.org/graphics/plotutils.html' +license=('GPL-3') +depends=('libpng' 'gcc-libs' 'libxaw') +makedepends=('quilt') +source=(https://ftp.gnu.org/pub/gnu/plotutils/$pkgname-$pkgver.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/p/plotutils/plotutils_$_debver-$_debrel.debian.tar.xz) +sha512sums=('4e5982605e5c1fbdb7325069c3ab2edd736e37a2eb30a1ec01fdc3541fcee6ed49937d4814c6baf79dab5b6fa42f909e4800c851d0ace3c7cf6d5a8681d0f0e7' + 'SKIP' + 'f9a3c495a9c7e443cb088b8a4383c4c7570a2652f73abbe833a62fdf4373a608498b1a4c2f20e3e027f48ec80114456e17261e967ccb33d6e0131e6ffe82910d') +validpgpkeys=('C7823604DFEA27BC29DD4F179DEB46C0D679F6CF') # Karl Berry + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --with-gnu-ld \ + --with-x \ + --enable-libplotter + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pmount-safe-removal/PKGBUILD b/pmount-safe-removal/PKGBUILD new file mode 100644 index 0000000..c650352 --- /dev/null +++ b/pmount-safe-removal/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +_pkgname=pmount +pkgname=$_pkgname-safe-removal +pkgver=0.9.23 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc="Mount removable devices as normal user, with safe removal of device" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://salsa.debian.org/debian/pmount' +backup=('etc/pmount.allow') +depends=('sysfsutils' 'bash' 'util-linux') +makedepends=('intltool' 'gettext-tiny') +provides=('pmount') +conflicts=('pmount') +source=(${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/p/pmount/pmount_${pkgver}.orig.tar.bz2 + fix-package.patch) +sha512sums=('a9d762fb9bd3f525d52b29a33c09c10a09f90fabdeed8f3658cb3fe8cbdbf237b2c9165b7c93a7170b9de5c65c513c1629b1fca638563a66d091c518782db92d' + '9dd33f1bd0eaaefc087801ecd31b7f8b89a92b1e9ea806c145c9911caa09b753caaf85e2ff0887dd0ba6829518f90ec785b2dce7dfb68b9db30538b51e284142') + +prepare() { + cd "${srcdir}/${_pkgname}-${pkgver}" + patch -p1 -i ${srcdir}/fix-package.patch +} + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + ./configure --prefix=/usr --disable-hal \ + --with-cryptsetup-prog=/usr/bin/cryptsetup + make +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -dm755 "$pkgdir"/media + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/pmount-safe-removal/fix-package.patch b/pmount-safe-removal/fix-package.patch new file mode 100644 index 0000000..e7a4a8f --- /dev/null +++ b/pmount-safe-removal/fix-package.patch @@ -0,0 +1,1320 @@ +diff -r 97fe1772e5c4 src/Makefile.am +--- a/src/Makefile.am Sun Nov 20 20:46:53 2011 +0100 ++++ b/src/Makefile.am Mon Nov 21 15:00:50 2011 +0100 +@@ -2,11 +2,12 @@ + + noinst_LIBRARIES = libpmount-util.a + libpmount_util_a_SOURCES = \ +- fs.c \ +- luks.c \ +- policy.c \ +- utils.c \ +- realpath.c ++ fs.c \ ++ luks.c \ ++ policy.c \ ++ utils.c \ ++ realpath.c \ ++ conf.c + + if PMOUNT_HAL + EXTRABIN=pmount-hal +@@ -25,11 +26,12 @@ + pumount_LDADD = libpmount-util.a + + EXTRA_DIST = \ +- fs.h \ +- luks.h \ +- policy.h \ +- utils.h \ +- realpath.h ++ fs.h \ ++ luks.h \ ++ policy.h \ ++ utils.h \ ++ realpath.h \ ++ conf.h + + INSTALL_DIR = $(DESTDIR)/$(prefix)/bin + INSTALL_SRC = $(top_builddir)/src +diff -r 97fe1772e5c4 src/Makefile.in +--- a/src/Makefile.in Sun Nov 20 20:46:53 2011 +0100 ++++ b/src/Makefile.in Mon Nov 21 15:00:50 2011 +0100 +@@ -52,7 +52,8 @@ + libpmount_util_a_AR = $(AR) $(ARFLAGS) + libpmount_util_a_LIBADD = + am_libpmount_util_a_OBJECTS = fs.$(OBJEXT) luks.$(OBJEXT) \ +- policy.$(OBJEXT) utils.$(OBJEXT) realpath.$(OBJEXT) ++ policy.$(OBJEXT) utils.$(OBJEXT) realpath.$(OBJEXT) \ ++ conf.$(OBJEXT) + libpmount_util_a_OBJECTS = $(am_libpmount_util_a_OBJECTS) + @PMOUNT_HAL_TRUE@am__EXEEXT_1 = pmount-hal$(EXEEXT) + am__installdirs = "$(DESTDIR)$(bindir)" +@@ -106,6 +107,7 @@ + DATADIRNAME = @DATADIRNAME@ + DEFS = @DEFS@ + DEPDIR = @DEPDIR@ ++DLLTOOL = @DLLTOOL@ + DSYMUTIL = @DSYMUTIL@ + DUMPBIN = @DUMPBIN@ + ECHO_C = @ECHO_C@ +@@ -141,6 +143,7 @@ + LTLIBOBJS = @LTLIBOBJS@ + MAINT = @MAINT@ + MAKEINFO = @MAKEINFO@ ++MANIFEST_TOOL = @MANIFEST_TOOL@ + MKDIR_P = @MKDIR_P@ + MKINSTALLDIRS = @MKINSTALLDIRS@ + MSGFMT = @MSGFMT@ +@@ -179,6 +182,7 @@ + abs_srcdir = @abs_srcdir@ + abs_top_builddir = @abs_top_builddir@ + abs_top_srcdir = @abs_top_srcdir@ ++ac_ct_AR = @ac_ct_AR@ + ac_ct_CC = @ac_ct_CC@ + ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ + am__include = @am__include@ +@@ -211,7 +215,6 @@ + libexecdir = @libexecdir@ + localedir = @localedir@ + localstatedir = @localstatedir@ +-lt_ECHO = @lt_ECHO@ + mandir = @mandir@ + mkdir_p = @mkdir_p@ + oldincludedir = @oldincludedir@ +@@ -230,11 +233,12 @@ + INCLUDES = $(HAL_CFLAGS) + noinst_LIBRARIES = libpmount-util.a + libpmount_util_a_SOURCES = \ +- fs.c \ +- luks.c \ +- policy.c \ +- utils.c \ +- realpath.c ++ fs.c \ ++ luks.c \ ++ policy.c \ ++ utils.c \ ++ realpath.c \ ++ conf.c + + @PMOUNT_HAL_TRUE@EXTRABIN = pmount-hal + pmount_SOURCES = pmount.c +@@ -244,11 +248,12 @@ + pumount_SOURCES = pumount.c + pumount_LDADD = libpmount-util.a + EXTRA_DIST = \ +- fs.h \ +- luks.h \ +- policy.h \ +- utils.h \ +- realpath.h ++ fs.h \ ++ luks.h \ ++ policy.h \ ++ utils.h \ ++ realpath.h \ ++ conf.h + + INSTALL_DIR = $(DESTDIR)/$(prefix)/bin + INSTALL_SRC = $(top_builddir)/src +@@ -361,6 +366,7 @@ + distclean-compile: + -rm -f *.tab.c + ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conf.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/luks.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmount-hal.Po@am__quote@ +diff -r 97fe1772e5c4 src/conf.c +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/src/conf.c Mon Nov 21 15:00:50 2011 +0100 +@@ -0,0 +1,137 @@ ++ ++#include ++#include ++#include ++#include ++ ++#include "conf.h" ++#include "utils.h" ++#include "realpath.h" ++ ++#define BUFLEN 1024 ++ ++int ++get_conf_for_device(const char *device, char **fs, char **charset, ++ char **passphrase, char **mntpt, char **options) ++{ ++ FILE *f; ++ char buffer[BUFLEN], section[PATH_MAX]; ++ char *buf, *sec, *s; ++ int skip_section = 0; ++ int in_section = 0; ++ int len; ++ ++ if( NULL == ( f = fopen( CONF_FILE, "r" ) ) ) { ++ debug( "unable to open conf file %s\n", CONF_FILE ); ++ return 1; ++ } ++ sec = NULL; ++ while( !feof( f ) ) { ++ if( fgets( buffer, BUFLEN, f ) ) { ++ /* skip spaces & tabs */ ++ for ( buf = buffer; *buf == ' ' || *buf == '\t'; ++buf ) ++ ; ++ /* ignore commented & empty lines */ ++ if( *buf == ';' || *buf == '#' || *buf == '\n' ) { ++ continue; ++ } ++ /* new section? */ ++ if( *buf == '[' ) { ++ /* if we were in section, we're done */ ++ if( in_section ) { ++ break; ++ } ++ ++buf; ++ if( NULL == ( s = strchr( buf, ']' ) ) ) { ++ fclose( f ); ++ fprintf( stderr, "invalid syntax in %s: %s\n", CONF_FILE, buf ); ++ return 2; ++ } ++ if( s - buf >= PATH_MAX ) { ++ fclose( f ); ++ fprintf( stderr, "invalid section name in %s: %s\n", CONF_FILE, buf ); ++ return 3; ++ } ++ strncpy( section, buf, s - buf ); ++ /* NULL-terminate the string */ ++ s = section + (s - buf); ++ *s = 0; ++ debug( "found section for %s\n", section ); ++ /* try to resolve, might be e.g. a /dev/disk/by-uuid/... */ ++ if( !realpath( section, section ) ) { ++ if( !is_block( section ) ) { ++ /* probably section for a device not plugged in */ ++ debug( "unable to resolve, not a block, skipping section\n" ); ++ skip_section = 1; ++ continue; ++ } ++ } else { ++ debug( "resolved to %s\n", section ); ++ } ++ /* is this the device we're looking for? */ ++ if( strcmp( device, section ) ) { ++ debug( "no match, skipping section\n" ); ++ skip_section = 1; ++ continue; ++ } ++ debug( "match found!\n" ); ++ sec = section; ++ skip_section = 0; ++ in_section = 1; ++ continue; ++ } else if( skip_section ) { ++ continue; ++ } else if( NULL == sec ) { ++ fclose( f ); ++ debug( "no matching section found\n" ); ++ return -1; ++ } ++ /* we're in a section, must be a name=value */ ++ if ( NULL == ( s = strchr( buf, '=' ) ) ) { ++ fprintf( stderr, "invalid syntax in %s: %s\n", CONF_FILE, buf ); ++ continue; ++ } ++ /* ignore spaces & tabs */ ++ for ( --s; *s == ' ' || *s == '\t'; --s ) ++ ; ++ ++s; ++ len = s - buf; ++ if( NULL != fs && !strncmp( buf, "fs", len ) ) { ++ conf_set_value( buf, fs ); ++ debug( "file system set to %s\n", *fs ); ++ } else if( NULL != charset && !strncmp( buf, "charset", len )) { ++ conf_set_value( buf, charset ); ++ debug( "charset set to %s\n", *charset ); ++ } else if( NULL != passphrase && !strncmp( buf, "passphrase", len )) { ++ conf_set_value( buf, passphrase ); ++ debug( "passphrase set to %s\n", *passphrase ); ++ } else if( NULL != mntpt && !strncmp( buf, "mntpt", len )) { ++ conf_set_value( buf, mntpt ); ++ debug( "mount point set to %s\n", *mntpt ); ++ } else if( NULL != options && !strncmp( buf, "options", len )) { ++ conf_set_value( buf, options ); ++ debug( "options set to %s\n", *options ); ++ } else { ++ debug( "ignoring: %s", buf ); ++ } ++ } ++ } ++ fclose( f ); ++ return !in_section; ++} ++ ++void ++conf_set_value( char *buf, char **dest ) ++{ ++ char *s; ++ /* position to beginning of value */ ++ buf = strchr( buf, '=' ); ++ /* skip spaces & tabs */ ++ for( ++buf; *buf == ' ' || *buf == '\t'; ++buf) ++ ; ++ /* find end position */ ++ for( s = buf; *s != ' ' && *s != ';' && *s != '#' && *s != '\n' && *s != 0; ++s) ++ ; ++ /* set value */ ++ *dest = strndup( buf, s - buf ); ++} +diff -r 97fe1772e5c4 src/conf.h +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/src/conf.h Mon Nov 21 15:00:50 2011 +0100 +@@ -0,0 +1,17 @@ ++ ++#ifndef CONF_H ++#define CONF_H ++ ++#define CONF_FILE "/etc/pmount.conf" ++ ++ ++int ++get_conf_for_device(const char *device, char **fs, char **charset, ++ char **passphrase, char **mntpt, char **options); ++ ++void ++conf_set_value( char *buf, char **dest ); ++ ++ ++#endif /* CONF_H */ ++ +diff -r 97fe1772e5c4 src/luks.c +--- a/src/luks.c Sun Nov 20 20:46:53 2011 +0100 ++++ b/src/luks.c Mon Nov 21 15:00:50 2011 +0100 +@@ -82,7 +82,7 @@ + else if( status == 1 ) + result = DECRYPT_FAILED; + else { +- fprintf( stderr, "Internal error: cryptsetup luksOpen failed" ); ++ fprintf( stderr, "Internal error: cryptsetup luksOpen failed\n" ); + exit( 100 ); + } + +diff -r 97fe1772e5c4 src/pmount.c +--- a/src/pmount.c Sun Nov 20 20:46:53 2011 +0100 ++++ b/src/pmount.c Mon Nov 21 15:00:50 2011 +0100 +@@ -28,6 +28,7 @@ + #include "policy.h" + #include "utils.h" + #include "luks.h" ++#include "conf.h" + #include "config.h" + + /* Enable autodetection if possible */ +@@ -82,6 +83,7 @@ + " -s, --sync : mount with the 'sync' option (default: 'async')\n" + " -A, --noatime\n" + " mount with the 'noatime' option (default: 'atime')\n" ++ " -D : mount all partitions of (or its parent, if a partition)\n" + " -e, --exec : mount with the 'exec' option (default: 'noexec')\n" + " -t : mount as file system type (default: autodetected)\n" + " -c : use given I/O character set (default: 'utf8' if called\n" +@@ -223,6 +225,7 @@ + * @param fmask User specified fmask (NULL for umask) + * @param dmask User specified dmask (NULL for umask) + * @param suppress_errors: if true, stderr is redirected to /dev/null ++ * @param fs_options Options to use instead of the default from FS (if not NULL) + * @return exit status of mount, or -1 on failure. + */ + int +@@ -230,7 +233,8 @@ + int noatime, int exec, int force_write, const char* iocharset, + int utf8, + const char* umask, const char *fmask, const char *dmask, +- int suppress_errors ) ++ int suppress_errors, ++ const char *fs_options ) + { + const struct FS* fs; + char ugid_opt[100]; +@@ -370,9 +374,13 @@ + snprintf( iocharset_opt, sizeof( iocharset_opt ), + fs->iocharset_format, "iso8859-1"); + } ++ ++ if( NULL == fs_options ) { ++ fs_options = fs->options; ++ } + + snprintf( options, sizeof( options ), "%s%s%s%s%s%s%s%s%s", +- fs->options, sync_opt, atime_opt, exec_opt, access_opt, ugid_opt, ++ fs_options, sync_opt, atime_opt, exec_opt, access_opt, ugid_opt, + umask_opt, fdmask_opt, iocharset_opt ); + + /* go for it */ +@@ -397,13 +405,15 @@ + * @param umask User specified umask (NULL for default) + * @param fmask User specified fmask (NULL for umask) + * @param dmask User specified dmask (NULL for umask) ++ * @param fs_options Options to use instead of the default from FS (if not NULL) + * @return last return value of do_mount (i. e. 0 on success, != 0 on error) + */ + int + do_mount_auto( const char* device, const char* mntpt, int async, + int noatime, int exec, int force_write, const char* iocharset, + int utf8, +- const char* umask, const char *fmask, const char *dmask ) ++ const char* umask, const char *fmask, const char *dmask, ++ const char *fs_options ) + { + const struct FS* fs; + int nostderr = 1; +@@ -424,7 +434,7 @@ + } + result = do_mount( device, mntpt, tp, async, noatime, exec, + force_write, iocharset, utf8, umask, fmask, +- dmask, nostderr ); ++ dmask, nostderr, fs_options ); + if(result == 0) + return result; + debug("blkid-detected FS failed, trying manually \n"); +@@ -445,14 +455,16 @@ + if( (fs+1)->fsname == NULL ) + nostderr = 0; + result = do_mount( device, mntpt, fs->fsname, async, noatime, exec, +- force_write, iocharset, utf8, umask, fmask, dmask, nostderr ); ++ force_write, iocharset, utf8, umask, fmask, dmask, nostderr, ++ fs_options ); + if( result == 0 ) + break; + + /* sometimes VFAT fails when using iocharset; try again without */ + if( iocharset ) + result = do_mount( device, mntpt, fs->fsname, async, noatime, exec, +- force_write, NULL, utf8, umask, fmask, dmask, nostderr ); ++ force_write, NULL, utf8, umask, fmask, dmask, nostderr, ++ fs_options ); + if( result <= 0 ) + break; + } +@@ -602,33 +614,207 @@ + drop_root(); + } + ++ ++static char *devarg = NULL, *arg2 = NULL; ++static char mntpt[MEDIA_STRING_SIZE]; ++static char device[PATH_MAX], mntptdev[PATH_MAX]; ++static int async = 1; ++static int noatime = 0; ++static int exec = 0; ++static int force_write = -1; /* 0: ro, 1: rw, -1: default */ ++static const char* use_fstype = NULL; ++static const char* iocharset = NULL; ++static const char* _umask = NULL; ++static const char* _fmask = NULL; ++static const char* _dmask = NULL; ++static const char* passphrase = NULL; ++ ++static enum { MOUNT, LOCK, UNLOCK } mode = MOUNT; ++ ++int ++mount_device( void ) ++{ ++ char decrypted_device[PATH_MAX]; ++ int utf8 = -1; /* Whether we live in a UTF-8 world or not */ ++ int result; ++ ++ static const char *l_use_fstype; ++ static const char *l_iocharset; ++ static const char *l_passphrase; ++ ++ char *o_fs = NULL; ++ char *o_charset = NULL; ++ char *o_passphrase = NULL; ++ char *o_mntpt = NULL; ++ char *o_options = NULL; ++ ++ l_use_fstype = use_fstype; ++ l_iocharset = iocharset; ++ l_passphrase = passphrase; ++ ++ switch( mode ) { ++ case MOUNT: ++ /* let's see if there are options in CONF_FILE */ ++ if( !get_conf_for_device( device, &o_fs, &o_charset, &o_passphrase, ++ &o_mntpt, &o_options ) ) { ++ if( NULL != o_fs ) { ++ l_use_fstype = (const char *) o_fs; ++ } ++ if( NULL != o_charset ) { ++ l_iocharset = (const char *) o_charset; ++ } ++ if( NULL != o_passphrase ) { ++ l_passphrase = (const char *) o_passphrase; ++ } ++ if( NULL != o_mntpt ) { ++ snprintf( mntpt, sizeof (mntpt ), "%s", o_mntpt ); ++ } ++ } ++ ++ /* determine mount point name; note that we use devarg instead of ++ * device to preserve symlink names (like '/dev/usbflash' instead ++ * of '/dev/sda1') */ ++ if( NULL == o_mntpt && make_mountpoint_name( devarg, arg2, mntpt, ++ sizeof( mntpt ) ) ) ++ return E_MNTPT; ++ ++ /* if no charset was set explicitly, autodetect UTF-8 */ ++ if( !l_iocharset ) { ++ const char* codeset; ++ codeset = nl_langinfo( CODESET ); ++ ++ debug( "no iocharset given, current locale encoding is %s\n", codeset ); ++ ++ if( codeset && !strcmp( codeset, "UTF-8" ) ) { ++ debug( "locale encoding uses UTF-8, setting iocharset to 'utf8'\n" ); ++ l_iocharset = "utf8"; ++ } ++ } ++ /* If user did not choose explicitly for or against utf8 */ ++ if( utf8 == -1 ) { ++ const char* codeset; ++ codeset = nl_langinfo( CODESET ); ++ if( codeset && !strcmp( codeset, "UTF-8" ) ) { ++ debug( "locale encoding uses UTF-8: will mount FAT with utf8 option" ); ++ utf8 = 1; ++ } else { ++ utf8 = 0; ++ } ++ } ++ ++ /* clean stale locks */ ++ clean_lock_dir( device ); ++ ++ if( check_mount_policy( device, mntpt ) ) ++ return E_POLICY; ++ ++ /* check for encrypted device */ ++ enum decrypt_status decrypt = luks_decrypt( device, ++ decrypted_device, sizeof( decrypted_device ), l_passphrase, ++ force_write == 0 ? 1 : 0 ); ++ ++ switch (decrypt) { ++ case DECRYPT_FAILED: ++ fprintf( stderr, _("Error: could not decrypt device (wrong passphrase?)\n") ); ++ return E_POLICY; ++ case DECRYPT_EXISTS: ++ fprintf( stderr, _("Error: mapped device already exists\n") ); ++ return E_POLICY; ++ case DECRYPT_OK: ++ /* We create a luks lockfile _on the decrypted device !_*/ ++ if(! luks_create_lockfile(decrypted_device)) ++ fprintf(stderr, _("Warning: could not create luks lockfile\n")); ++ case DECRYPT_NOTENCRYPTED: ++ break; ++ default: ++ fprintf( stderr, "Internal error: unhandled decrypt_status %i\n", ++ (int) decrypt); ++ return E_INTERNAL; ++ } ++ ++ /* lock the mount directory */ ++ debug( "locking mount point directory\n" ); ++ if( lock_dir( mntpt ) < 0) { ++ fprintf( stderr, _("Error: could not lock the mount directory. Another pmount is probably running for this mount point.\n")); ++ return E_LOCKED; ++ } ++ debug( "mount point directory locked\n" ); ++ ++ /* off we go */ ++ if( l_use_fstype ) ++ result = do_mount( decrypted_device, mntpt, l_use_fstype, async, noatime, ++ exec, force_write, l_iocharset, utf8, _umask, _fmask, _dmask, 0, ++ o_options); ++ else ++ result = do_mount_auto( decrypted_device, mntpt, async, noatime, exec, ++ force_write, l_iocharset, utf8, _umask, _fmask, _dmask, o_options ); ++ ++ /* unlock the mount point again */ ++ debug( "unlocking mount point directory\n" ); ++ unlock_dir( mntpt ); ++ debug( "mount point directory unlocked\n" ); ++ ++ if( NULL != o_fs ) { ++ free( o_fs ); ++ } ++ if( NULL != o_charset ) { ++ free( o_charset ); ++ } ++ if( NULL != o_passphrase ) { ++ free( o_passphrase ); ++ } ++ if( NULL != o_mntpt ) { ++ free( o_mntpt ); ++ } ++ if( NULL != o_options ) { ++ free( o_options ); ++ } ++ ++ if( result ) { ++ if( decrypt == DECRYPT_OK ) ++ luks_release( decrypted_device, 0 ); ++ ++ /* mount failed, delete the mount point again */ ++ if( remove_pmount_mntpt( mntpt ) ) { ++ perror( _("Error: could not delete mount point") ); ++ return -1; ++ } ++ return E_EXECMOUNT; ++ } ++ ++ return 0; ++ ++ case LOCK: ++ if( device_valid( device ) ) ++ if( do_lock( device, parse_unsigned( arg2, E_PID ) ) ) ++ return E_INTERNAL; ++ return 0; ++ ++ case UNLOCK: ++ if( device_valid( device ) ) ++ if( do_unlock( device, parse_unsigned( arg2, E_PID ) ) ) ++ return E_UNLOCK; ++ return 0; ++ } ++ ++ fprintf( stderr, _("Internal error: mode %i not handled.\n"), (int) mode ); ++ return E_INTERNAL; ++} ++ ++ ++ + /** + * Entry point. + */ + int + main( int argc, char** argv ) + { +- char *devarg = NULL, *arg2 = NULL; +- char mntpt[MEDIA_STRING_SIZE]; +- char device[PATH_MAX], mntptdev[PATH_MAX]; +- char decrypted_device[PATH_MAX]; + const char* fstab_device; + int is_real_path = 0; +- int async = 1; +- int noatime = 0; +- int exec = 0; +- int force_write = -1; /* 0: ro, 1: rw, -1: default */ +- const char* use_fstype = NULL; +- const char* iocharset = NULL; +- const char* umask = NULL; +- const char* fmask = NULL; +- const char* dmask = NULL; +- const char* passphrase = NULL; +- int utf8 = -1; /* Whether we live in a UTF-8 world or not */ +- int result; ++ int full_device = 0; + +- enum { MOUNT, LOCK, UNLOCK } mode = MOUNT; +- ++ int result, error_occurred = 0; ++ + int option; + static struct option long_opts[] = { + { "help", 0, NULL, 'h'}, +@@ -647,6 +833,7 @@ + { "read-only", 0, NULL, 'r' }, + { "read-write", 0, NULL, 'w' }, + { "version", 0, NULL, 'V' }, ++ { "full-device", 0, NULL, 'D' }, + { NULL, 0, NULL, 0} + }; + +@@ -678,7 +865,7 @@ + + /* parse command line options */ + do { +- switch( option = getopt_long( argc, argv, "+hdelLsArwp:t:c:u:V", long_opts, NULL ) ) { ++ switch( option = getopt_long( argc, argv, "+hdelLsArwp:t:c:u:DV", long_opts, NULL ) ) { + case -1: break; /* end of arguments */ + case ':': + case '?': return E_ARGS; /* unknown argument */ +@@ -701,17 +888,19 @@ + + case 'c': iocharset = optarg; break; + +- case 'u': umask = optarg; break; ++ case 'u': _umask = optarg; break; + +- case OPT_FMASK: fmask = optarg; break; ++ case OPT_FMASK: _fmask = optarg; break; + +- case OPT_DMASK: dmask = optarg; break; ++ case OPT_DMASK: _dmask = optarg; break; + + case 'p': passphrase = optarg; break; + + case 'r': force_write = 0; break; + + case 'w': force_write = 1; break; ++ ++ case 'D': full_device = 1; break; + + case 'V': puts(VERSION); return 0; + +@@ -793,117 +982,76 @@ + fprintf( stderr, _("Error: invalid device %s (must be in /dev/)\n"), device ); + return E_DEVICE; + } ++ ++ /* we need to get the full device name (e.g. /dev/sde), get list of all its ++ partitions, and try to mount them all... */ ++ if( full_device ) { ++ char devdirname[MEDIA_STRING_SIZE]; ++ if( !find_sysfs_device( device, devdirname, MEDIA_STRING_SIZE) ) { ++ fprintf( stderr, _("Warning: unable to find device path for %s," ++ " full-device mode disabled\n"), device ); ++ full_device = 0; ++ } else { ++ debug( "device path for %s is %s\n", device, devdirname ); ++ ++ DIR *partdir; ++ struct dirent *partdirent; ++ char partdirname[MEDIA_STRING_SIZE]; ++ struct stat stat_info; ++ ++ partdir = opendir( devdirname ); ++ if( !partdir ) { ++ perror( _("Error: could not open /block//") ); ++ exit( -1 ); ++ } ++ while( ( partdirent = readdir( partdir ) ) != NULL ) { ++ if( partdirent->d_type != DT_DIR ++ || !strcmp( partdirent->d_name, "." ) ++ || !strcmp( partdirent->d_name, ".." ) ) ++ continue; ++ ++ /* construct /sys/block///dev */ ++ snprintf( partdirname, sizeof( partdirname ), "%s/%s/%s", ++ devdirname, partdirent->d_name, "dev" ); + +- switch( mode ) { +- case MOUNT: +- /* determine mount point name; note that we use devarg instead of +- * device to preserve symlink names (like '/dev/usbflash' instead +- * of '/dev/sda1') */ +- if( make_mountpoint_name( devarg, arg2, mntpt, sizeof( mntpt ) ) ) +- return E_MNTPT; ++ /* make sure it is a device, i.e has a file dev */ ++ if( 0 != stat( partdirname, &stat_info ) ) { ++ /* ENOENT (does not exist) is "okay" we just ignore this one */ ++ if( ENOENT != errno ) { ++ perror( _("Error: could not stat /block///dev") ); ++ exit( -1 ); ++ } ++ continue; ++ } ++ /* must be a file */ ++ if( !S_ISREG( stat_info.st_mode ) ) { ++ continue; ++ } + +- /* if no charset was set explicitly, autodetect UTF-8 */ +- if( !iocharset ) { +- const char* codeset; +- codeset = nl_langinfo( CODESET ); +- +- debug( "no iocharset given, current locale encoding is %s\n", codeset ); +- +- if( codeset && !strcmp( codeset, "UTF-8" ) ) { +- debug( "locale encoding uses UTF-8, setting iocharset to 'utf8'\n" ); +- iocharset = "utf8"; ++ /* construct /dev/ */ ++ snprintf( device, sizeof( device ), "%s%s", DEVDIR, partdirent->d_name ); ++ debug( "processing found partition: %s\n", device ); ++ ++ /* We need to lookup again in fstab: */ ++ fstab_device = fstab_has_device( "/etc/fstab", device, NULL, NULL ); ++ if( mode == MOUNT && fstab_device ) { ++ fprintf( stderr, _("Error: device %s handled by fstab\n"), fstab_device ); ++ exit( -1 ); ++ } ++ ++ devarg = device; ++ result = mount_device(); ++ if( result != 0 ) { ++ fprintf( stderr, _("Failed to mount device %s : error %d\n"), device, result ); ++ error_occurred = -1; ++ } else { ++ printf( _("Device %s mounted\n"), device ); + } + } +- /* If user did not choose explicitly for or against utf8 */ +- if( utf8 == -1 ) { +- const char* codeset; +- codeset = nl_langinfo( CODESET ); +- if( codeset && !strcmp( codeset, "UTF-8" ) ) { +- debug( "locale encoding uses UTF-8: will mount FAT with utf8 option" ); +- utf8 = 1; +- } else { +- utf8 = 0; +- } +- } +- +- /* clean stale locks */ +- clean_lock_dir( device ); +- +- if( check_mount_policy( device, mntpt ) ) +- return E_POLICY; +- +- /* check for encrypted device */ +- enum decrypt_status decrypt = luks_decrypt( device, +- decrypted_device, sizeof( decrypted_device ), passphrase, +- force_write == 0 ? 1 : 0 ); +- +- switch (decrypt) { +- case DECRYPT_FAILED: +- fprintf( stderr, _("Error: could not decrypt device (wrong passphrase?)\n") ); +- exit( E_POLICY ); +- case DECRYPT_EXISTS: +- fprintf( stderr, _("Error: mapped device already exists\n") ); +- exit( E_POLICY ); +- case DECRYPT_OK: +- /* We create a luks lockfile _on the decrypted device !_*/ +- if(! luks_create_lockfile(decrypted_device)) +- fprintf(stderr, _("Warning: could not create luks lockfile\n")); +- case DECRYPT_NOTENCRYPTED: +- break; +- default: +- fprintf( stderr, "Internal error: unhandled decrypt_status %i\n", +- (int) decrypt); +- exit( E_INTERNAL ); +- } +- +- /* lock the mount directory */ +- debug( "locking mount point directory\n" ); +- if( lock_dir( mntpt ) < 0) { +- fprintf( stderr, _("Error: could not lock the mount directory. Another pmount is probably running for this mount point.\n")); +- exit( E_LOCKED ); +- } +- debug( "mount point directory locked\n" ); +- +- /* off we go */ +- if( use_fstype ) +- result = do_mount( decrypted_device, mntpt, use_fstype, async, noatime, +- exec, force_write, iocharset, utf8, umask, fmask, dmask, 0 ); +- else +- result = do_mount_auto( decrypted_device, mntpt, async, noatime, exec, +- force_write, iocharset, utf8, umask, fmask, dmask ); +- +- /* unlock the mount point again */ +- debug( "unlocking mount point directory\n" ); +- unlock_dir( mntpt ); +- debug( "mount point directory unlocked\n" ); +- +- if( result ) { +- if( decrypt == DECRYPT_OK ) +- luks_release( decrypted_device, 0 ); +- +- /* mount failed, delete the mount point again */ +- if( remove_pmount_mntpt( mntpt ) ) { +- perror( _("Error: could not delete mount point") ); +- return -1; +- } +- return E_EXECMOUNT; +- } +- +- return 0; +- +- case LOCK: +- if( device_valid( device ) ) +- if( do_lock( device, parse_unsigned( arg2, E_PID ) ) ) +- return E_INTERNAL; +- return 0; +- +- case UNLOCK: +- if( device_valid( device ) ) +- if( do_unlock( device, parse_unsigned( arg2, E_PID ) ) ) +- return E_UNLOCK; +- return 0; ++ closedir( partdir ); ++ return error_occurred; ++ } + } +- +- fprintf( stderr, _("Internal error: mode %i not handled.\n"), (int) mode ); +- return E_INTERNAL; ++ ++ return mount_device(); + } +diff -r 97fe1772e5c4 src/policy.c +--- a/src/policy.c Sun Nov 20 20:46:53 2011 +0100 ++++ b/src/policy.c Mon Nov 21 15:00:50 2011 +0100 +@@ -164,7 +164,9 @@ + exit( -1 ); + } + while( ( partdirent = readdir( partdir ) ) != NULL ) { +- if( partdirent->d_type != DT_DIR ) ++ if( partdirent->d_type != DT_DIR ++ || !strcmp( partdirent->d_name, "." ) ++ || !strcmp( partdirent->d_name, ".." ) ) + continue; + + /* construct /sys/block///dev */ +@@ -549,7 +551,7 @@ + blockdevpath, whitelisted_bus); + } + else +- debug("Device %s does not belong to any whitelisted bus\n"); ++ debug("Device %s does not belong to any whitelisted bus\n", blockdevpath); + } + return removable; + } +diff -r 97fe1772e5c4 src/pumount.c +--- a/src/pumount.c Sun Nov 20 20:46:53 2011 +0100 ++++ b/src/pumount.c Mon Nov 21 15:00:50 2011 +0100 +@@ -19,10 +19,14 @@ + #include + #include + #include ++#include ++#include ++#include + + #include "policy.h" + #include "utils.h" + #include "luks.h" ++#include "conf.h" + #include "config.h" + + /* error codes */ +@@ -46,11 +50,12 @@ + " are met (see pumount(1) for details). The mount point directory is removed\n" + " afterwards.\n\n" + "Options:\n" +- " -l, --lazy : umount lazily, see umount(8)\n" +- " --luks-force : luksClose devices pmount didn't open\n" +- " -d, --debug : enable debug output (very verbose)\n" +- " -h, --help : print help message and exit successfuly\n" +- " --version : print version number and exit successfully\n"), ++ " -l, --lazy : umount lazily, see umount(8)\n" ++ " --luks-force : luksClose devices pmount didn't open\n" ++ " -D : umount all partitions of the device, then stops it for safe removal\n" ++ " -d, --debug : enable debug output (very verbose)\n" ++ " -h, --help : print help message and exit successfuly\n" ++ " -V, --version : print version number and exit successfully\n"), + exename, MEDIADIR ); + } + +@@ -88,9 +93,23 @@ + + /* mount point must be below MEDIADIR */ + if( strncmp( mntpt, mediadir, strlen( mediadir ) ) ) { +- fprintf( stderr, _("Error: mount point %s is not below %s\n"), mntpt, +- MEDIADIR ); +- return -1; ++ /* check CONF_FILE, it might be okay */ ++ char *o_mntpt = NULL; ++ int passed = 0; ++ if( !get_conf_for_device( device, NULL, NULL, NULL, &o_mntpt, NULL ) ) { ++ if( NULL != o_mntpt ) { ++ if( !strcmp( mntpt, o_mntpt ) ) { ++ debug( "mount point allowed from config: %s\n", mntpt ); ++ passed = 1; ++ } ++ free( o_mntpt ); ++ } ++ } ++ if( !passed ) { ++ fprintf( stderr, _("Error: mount point %s is not below %s\n"), mntpt, ++ MEDIADIR ); ++ return -1; ++ } + } + + debug( "policy check passed\n" ); +@@ -98,13 +117,15 @@ + } + + /** +- * Drop all privileges and exec 'umount device'. Does not return on success, if +- * it returns, UMOUNTPROG could not be executed. ++ * Drop all privileges and exec 'umount device'. + * @param lazy 0 for normal umount, 1 for lazy umount ++ * @return 0 on success, E_EXECUMOUNT if UMOUNTPROG could not be executed. + */ +-void ++int + do_umount_fstab( const char* device, int lazy, const char * fstab_mntpt ) + { ++ int status; ++ + /* drop all privileges */ + get_root(); + if( setuid( getuid() ) ) { +@@ -120,10 +141,16 @@ + } + + if( lazy ) +- execl( UMOUNTPROG, UMOUNTPROG, "-l", device, NULL ); ++ status = spawnl( 0, UMOUNTPROG, UMOUNTPROG, "-l", device, NULL ); + else +- execl( UMOUNTPROG, UMOUNTPROG, device, NULL ); +- perror( _("Error: could not execute umount") ); ++ status = spawnl( 0, UMOUNTPROG, UMOUNTPROG, device, NULL ); ++ ++ if( status != 0 ) { ++ perror( _("Error: could not execute umount") ); ++ return E_EXECUMOUNT; ++ } ++ ++ return 0; + } + + /** +@@ -152,6 +179,41 @@ + return 0; + } + ++int ++umount_device( const char* device, size_t devicesize, const char* mntpt, ++ int do_lazy, int full_device ) ++{ ++ const char* fstab_device; ++ char fstab_mntpt[MEDIA_STRING_SIZE]; ++ ++ /* in full device mode, we need to check is the device is handled by fstab */ ++ if( full_device ) { ++ fstab_device = fstab_has_device( "/etc/fstab", device, fstab_mntpt, NULL ); ++ if( fstab_device && device_mounted( device, 1, NULL ) ) { ++ return do_umount_fstab( fstab_device, do_lazy, fstab_mntpt ); ++ } ++ /* in regular mode, we check if we have a dmcrypt device */ ++ } else if( luks_get_mapped_device( device, (char *) device, devicesize ) ) { ++ debug( "Unmounting mapped device %s instead.\n", device ); ++ } ++ ++ /* Now, we accept when devices have gone missing */ ++ if( check_umount_policy( device, 1 ) ) ++ return E_POLICY; ++ ++ /* go for it */ ++ if( do_umount( device, do_lazy ) ) ++ return E_EXECUMOUNT; ++ ++ /* release LUKS device, if appropriate */ ++ luks_release( device, 1 ); ++ ++ /* delete mount point */ ++ remove_pmount_mntpt( mntpt ); ++ ++ return 0; ++} ++ + /** + * Entry point. + * +@@ -165,6 +227,10 @@ + int is_real_path = 0; + int do_lazy = 0; + int luks_force = 0; ++ int full_device = 0; ++ ++ int error_occurred = 0; ++ int result; + + int option; + static struct option long_opts[] = { +@@ -173,6 +239,7 @@ + { "lazy", 0, NULL, 'l'}, + { "yes-I-really-want-lazy-unmount", 0, NULL, 'R'}, + { "luks-force", 0, NULL, 'L'}, ++ { "full-device", 0, NULL, 'D'}, + { "version", 0, NULL, 'V' }, + { NULL, 0, NULL, 0} + }; +@@ -193,7 +260,7 @@ + + /* parse command line options */ + do { +- switch( option = getopt_long( argc, argv, "+hdluV", long_opts, NULL ) ) { ++ switch( option = getopt_long( argc, argv, "+hdluDV", long_opts, NULL ) ) { + case -1: break; /* end of arguments */ + case '?': return E_ARGS; /* unknown argument */ + +@@ -212,6 +279,8 @@ + do_lazy = 1; break; + + case 'L': luks_force = 1; break; ++ ++ case 'D': full_device = 1; break; + + case 'V': puts(VERSION); return 0; + +@@ -251,11 +320,17 @@ + snprintf( device, sizeof( device ), "%s", argv[optind] ); + } + +- /* is the device already handled by fstab? */ +- fstab_device = fstab_has_device( "/etc/fstab", device, fstab_mntpt, NULL ); +- if( fstab_device ) { +- do_umount_fstab( fstab_device, do_lazy, fstab_mntpt ); +- return E_EXECUMOUNT; ++ /* in full_device mode, we'll deal with all partitions anyways */ ++ if( !full_device ) { ++ /* is the device already handled by fstab? */ ++ fstab_device = fstab_has_device( "/etc/fstab", device, fstab_mntpt, NULL ); ++ if( fstab_device ) { ++ if( device_mounted( device, 1, NULL ) ) { ++ return do_umount_fstab( fstab_device, do_lazy, fstab_mntpt ); ++ } else { ++ return 0; ++ } ++ } + } + + /* we cannot really check the real path when unmounting lazily since the +@@ -271,13 +346,18 @@ + } + debug( "trying to prepend '" DEVDIR + "' to device argument, now '%s'\n", device ); +- /* We need to lookup again in fstab: */ +- fstab_device = fstab_has_device( "/etc/fstab", device, +- fstab_mntpt, NULL ); +- if( fstab_device ) { +- do_umount_fstab( fstab_device, do_lazy, fstab_mntpt ); +- return E_EXECUMOUNT; +- } ++ if( !full_device ) { ++ /* We need to lookup again in fstab: */ ++ fstab_device = fstab_has_device( "/etc/fstab", device, ++ fstab_mntpt, NULL ); ++ if( fstab_device ) { ++ if( device_mounted( device, 1, NULL ) ) { ++ return do_umount_fstab( fstab_device, do_lazy, fstab_mntpt ); ++ } else { ++ return 0; ++ } ++ } ++ } + } + } + +@@ -286,24 +366,151 @@ + fprintf( stderr, _("Error: invalid device %s (must be in /dev/)\n"), device ); + return E_DEVICE; + } ++ ++ /* we need to get the full device name (e.g. /dev/sde), get list of all its ++ partitions, and try to unmount them all... */ ++ if( full_device ) { ++ char devdirname[MEDIA_STRING_SIZE]; ++ if( !find_sysfs_device( device, devdirname, MEDIA_STRING_SIZE) ) { ++ fprintf( stderr, _("Warning: unable to find device path for %s, " ++ "full-device mode disabled\n"), ++ device ); ++ full_device = 0; ++ } else { ++ debug( "device path for %s is %s\n", device, devdirname ); ++ ++ DIR *partdir; ++ struct dirent *partdirent; ++ char partdirname[MEDIA_STRING_SIZE]; ++ struct stat stat_info; ++ ++ partdir = opendir( devdirname ); ++ if( !partdir ) { ++ perror( _("Error: could not open /block//") ); ++ exit( -1 ); ++ } ++ while( ( partdirent = readdir( partdir ) ) != NULL ) { ++ if( partdirent->d_type != DT_DIR ++ || !strcmp( partdirent->d_name, "." ) ++ || !strcmp( partdirent->d_name, ".." ) ) ++ continue; ++ ++ /* construct /sys/block///dev */ ++ snprintf( partdirname, sizeof( partdirname ), "%s/%s/%s", ++ devdirname, partdirent->d_name, "dev" ); + +- /* check if we have a dmcrypt device */ +- if( luks_get_mapped_device( device, device, sizeof( device ) ) ) +- debug( "Unmounting mapped device %s instead.\n", device ); ++ /* make sure it is a device, i.e has a file dev */ ++ if( 0 != stat( partdirname, &stat_info ) ) { ++ /* ENOENT (does not exist) is "okay" we just ignore this one */ ++ if( ENOENT != errno ) { ++ perror( _("Error: could not stat /block///dev") ); ++ exit( -1 ); ++ } ++ continue; ++ } ++ /* must be a file */ ++ if( !S_ISREG( stat_info.st_mode ) ) { ++ continue; ++ } + +- /* Now, we accept when devices have gone missing */ +- if( check_umount_policy( device, 1 ) ) +- return E_POLICY; ++ /* construct /dev/ */ ++ snprintf( device, sizeof( device ), "%s%s", DEVDIR, partdirent->d_name ); ++ debug( "processing found partition: %s\n", device ); ++ ++ /* check if we have a dmcrypt device */ ++ if( luks_get_mapped_device( device, device, sizeof( device ) ) ) ++ debug( "Using mapped device %s instead.\n", device ); + +- /* go for it */ +- if( do_umount( device, do_lazy ) ) +- return E_EXECUMOUNT; ++ if( device_mounted( device, 1, mntpt ) ) { ++ debug( "device %s mounted, unmounting\n", device ); ++ result = umount_device( device, sizeof( device ), mntpt, ++ do_lazy, full_device ); ++ if( result != 0 ) { ++ fprintf( stderr, _("Failed to umount device %s : error %d\n"), ++ device, result ); ++ error_occurred = -1; ++ } else { ++ printf( _("Device %s umounted\n"), device ); ++ } ++ } ++ } ++ closedir( partdir ); ++ ++ /* no errors: let's stop the device completely, for safe removal */ ++ if ( !error_occurred ) { ++ char *c; ++ FILE *f; + +- /* release LUKS device, if appropriate */ +- luks_release( device, 1 ); ++ /* flush buffers */ ++ sync(); ++ ++ /* resolve devdirname (/block/ to something like: ++ * /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2/1-2:1.0/host5/target5:0:0/5:0:0:0/block/sdd */ ++ if( !realpath( devdirname, device ) ) { ++ debug( "unable to resolve %s\n", device ); ++ goto err_stop; ++ } ++ debug( "device %s resolved to %s\n", devdirname, device ); ++ ++ /* now extract the part we want, up to the grand-parent of the host ++ e.g: /sys/devices/pci0000:00/0000:00:06.0/usb1/1-2 */ ++ while( c = strrchr( device, '/' ) ) { ++ /* end the string there, to move back */ ++ *c = 0; ++ /* found the host part? */ ++ if( !strncmp( c + 1, "host", 4 ) ) { ++ break; ++ } ++ } ++ if( c == NULL ) { ++ debug( "unable to find host for %s\n", device ); ++ goto err_stop; ++ } ++ /* we need to move back one more time */ ++ if( NULL == ( c = strrchr( device, '/' ) ) ) { ++ debug( "cannot move back one last time in %s\n", device ); ++ goto err_stop; ++ } ++ /* end the string there */ ++ *c = 0; ++ debug( "full name is %s\n", device ); ++ /* now we need the last component, aka the bus id */ ++ if( NULL == ( c = strrchr( device, '/' ) ) ) { ++ debug( "cannot extract last component of %s\n", device ); ++ goto err_stop; ++ } ++ /* move up, so this points to the name only, e.g. 1-2 */ ++ ++c; ++ ++ /* unbind driver: write the bus id to /driver/unbind */ ++ snprintf( path, sizeof( path ), "%s/driver/unbind", device ); ++ if ( root_write_to_file( path, c ) ) { ++ goto err_stop; ++ } ++ ++ /* suspend device. step 1: write "0" to /power/autosuspend */ ++ snprintf( path, sizeof( path ), "%s/power/autosuspend", device ); ++ if ( root_write_to_file( path, "0" ) ) { ++ goto err_stop; ++ } ++ /* step 2: write "auto" to /power/control */ ++ snprintf( path, sizeof( path ), "%s/power/control", device ); ++ if ( root_write_to_file( path, "auto" ) ) { ++ goto err_stop; ++ } ++ ++ c = strrchr( devdirname, '/' ); ++ printf( _("Device %s%s stopped, you should now be able to safely unplug it\n"), ++ DEVDIR, c + 1); ++ } ++ ++ return error_occurred; + +- /* delete mount point */ +- remove_pmount_mntpt( mntpt ); ++err_stop: ++ fputs( _("Error: Unable to stop device\n"), stderr ); ++ return -1; ++ } ++ } + +- return 0; ++ return umount_device( device, sizeof( device ), mntpt, do_lazy, full_device ); + } +diff -r 97fe1772e5c4 src/utils.c +--- a/src/utils.c Sun Nov 20 20:46:53 2011 +0100 ++++ b/src/utils.c Mon Nov 21 15:00:50 2011 +0100 +@@ -439,3 +439,27 @@ + drop_root(); + } + ++int ++root_write_to_file( const char* path, const char* data ) ++{ ++ FILE *f; ++ size_t expected, actual; ++ ++ get_root(); ++ f = fopen( path, "w" ); ++ drop_root(); ++ if( !f ) { ++ debug( "could not open %s\n", path ); ++ return -1; ++ } ++ expected = sizeof( char ) * strlen( data ); ++ actual = fwrite( data, sizeof( char ), strlen( data ), f ); ++ if( actual != expected ) { ++ fclose( f ); ++ debug( "error when writing to %s; expected %d bytes, only %d written\n", ++ path, expected, actual ); ++ return -1; ++ } ++ fclose( f ); ++ return 0; ++} +diff -r 97fe1772e5c4 src/utils.h +--- a/src/utils.h Sun Nov 20 20:46:53 2011 +0100 ++++ b/src/utils.h Mon Nov 21 15:00:50 2011 +0100 +@@ -90,6 +90,16 @@ + int read_number_colon_number( const char* file, unsigned char* first, unsigned char* second ); + + /** ++ * Writes given data to the specified, opening it as root ++ * (this is used to unbind driver, etc) ++ * @param path path/file to write to ++ * @param data data to write ++ * @return 0 on success, else -1 ++ */ ++int ++root_write_to_file( const char* path, const char* data ); ++ ++/** + * Parse s as nonnegative number. Exits the program immediately if s cannot be + * parsed as a number. + * @param s string to parse as a number diff --git a/pmount/PKGBUILD b/pmount/PKGBUILD new file mode 100644 index 0000000..1e3c0e7 --- /dev/null +++ b/pmount/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=pmount +pkgver=0.9.23 +_debver=$pkgver +_debrel=6 +pkgrel=3 +pkgdesc="Mount removable devices as normal user" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://salsa.debian.org/debian/pmount' +backup=('etc/pmount.allow') +depends=('sysfsutils' 'util-linux') +makedepends=('intltool' 'gettext-tiny' 'quilt') +provides=('pmount') +conflicts=('pmount') +source=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/p/pmount/pmount_${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/p/pmount/pmount_${_debver}-${_debrel}.debian.tar.xz" + "pmount-bash-completion" + "pmount_fix-a-careless-segfault-in-debug-mode.patch" + "pmount_exfat.patch") +sha512sums=('a9d762fb9bd3f525d52b29a33c09c10a09f90fabdeed8f3658cb3fe8cbdbf237b2c9165b7c93a7170b9de5c65c513c1629b1fca638563a66d091c518782db92d' + '97cfd97fded1ffa1d88973b2fe40899ed0659910a30f7b04cac8eb739ac549976582f6cddc555e61dad1f0267aa0c60502c80ab1015960a6ccd8599ad8a67680' + 'a78b2432c9e629856ff6eec0c396f7affd9837c4deabe3058d2caaf09179dc4c670f691ace460ffb1708b8a6233990c51e0425ac998551f5cd6343ebf65513cc' + '90f49eaf2efef522b3a634ccc99776bbf3e9a953115153714903de85a1a6b06554bfbec62665dade986f7837a83301525f81b522a7001eada98044f67a546cc0' + 'a582ef694cde15f737e968dcbaa5efe75870de3feccd53e48e25e0f3edcf6aca6f2b4fc01399f88cbb681fb7811bf9e06b926fae0f3c0c7c766627840f5bf403') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -p1 < "${srcdir}/pmount_fix-a-careless-segfault-in-debug-mode.patch" + patch -p1 < "${srcdir}/pmount_exfat.patch" +} + +build() { + # commented out in order to avoid *** Error in `/usr/bin/ld': corrupted double-linked list: 0x09e43ce8 *** + #export CFLAGS="${CFLAGS} -fPIE -pie" + #export CXXFLAGS="${CXXFLAGS} -fPIE -pie" + + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --disable-hal \ + --with-cryptsetup-prog=/usr/bin/cryptsetup + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 ${srcdir}/pmount-bash-completion ${pkgdir}/usr/share/bash-completion/completions/pmount + mkdir -p ${pkgdir}/media + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/pmount/pmount-bash-completion b/pmount/pmount-bash-completion new file mode 100644 index 0000000..728e9b2 --- /dev/null +++ b/pmount/pmount-bash-completion @@ -0,0 +1,96 @@ +#-*- mode: shell-script;-*- +# +# Bash Completion snippet for the pmount command +# Copyright (c) Eduard Bloch, 2009-2011 +# +# Supports most (all?) of the possible option sets of version 0.9.18 except of +# too many device/directory arguments, the charset search can also be improved +# +# Inputs: +# $1 -- name of the command whose arguments are being completed +# $2 -- word being completed +# $3 -- word preceding the word being completed +# $COMP_LINE -- current command line +# $COMP_PONT -- cursor position +# $COMP_WORDS -- array containing individual words in the current +# command line +# $COMP_CWORD -- index into ${COMP_WORDS} of the word containing the +# current cursor position +# Output: +# COMPREPLY array variable contains possible completions + +have pmount && +_pmount() { + + local cur prev options devices fslist + + options=' -r --read-only -w --read-write -s --sync -A --noatime -e --exec \ + -t filesystem --type filesystem -c charset --charset charset -u umask \ + --umask umask --dmask dmask --fmask fmask -p file --passphrase file \ + -h --help -d --debug -V --version' + fslist=' ascii cp1250 cp1251 cp1255 cp437 cp737 cp775 cp850 cp852 cp855 cp857 cp860 cp861 cp862 cp863 cp864 cp865 cp866 cp869 cp874 cp932 cp936 cp949 cp950 euc-jp iso8859-1 iso8859-13 iso8859-14 iso8859-15 iso8859-2 iso8859-3 iso8859-4 iso8859-5 iso8859-6 iso8859-7 iso8859-9 koi8-r koi8-ru koi8-u utf8' + + COMPREPLY=() + cur=${COMP_WORDS[COMP_CWORD]} + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(t|-type)) + COMPREPLY=( $( grep "^[[:space:]]$cur" /proc/filesystems ) ) + return 0 + ;; + + -@(c|-charset)) + COMPREPLY=( $( compgen -W "$fslist" -- $cur ) ) + return 0 + ;; + -@(u|d|-umask|-dmask)) + COMPREPLY=( ${cur}0 ${cur}1 ${cur}2 ${cur}3 ${cur}4 ${cur}5 ${cur}6 ${cur}7 ) + return 0 + ;; + + -@(p|-passphrase)) + _filedir + return 0 + ;; + + esac + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$options" -- $cur ) ) + else + devices="$( command ls $(grep -v '^[[:space:]]*#' /etc/pmount.allow ) $(grep 1 /sys/block/*/removable | sed -e 's,/sys/block/,/dev/,;s,/removable:1,*,') 2>/dev/null | sort -u | sed -e 's,\(^/dev/\)\(.*\),\1\2 \2,' )" + COMPREPLY=( $( compgen -W "$devices" -- $cur ) ) + fi + + return 0 +} + + +have pumount && +_pumount() { + + local cur prev options devices mdir + + mdir="$(readlink -f /media)" + + options=' -l --luks-force -h --help -d --debug --version' + + COMPREPLY=() + cur=${COMP_WORDS[COMP_CWORD]} + prev=${COMP_WORDS[COMP_CWORD-1]} + + + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$options" -- $cur ) ) + else + devices="$( grep $mdir /proc/mounts | sed -e 's,.*/$mdir/,,;s,\ .*,,;s,\(.*\),\1\n/dev/\1,;s,/dev//dev,/dev,' )" + COMPREPLY=( $( compgen -W "$devices" -- $cur ) ) + fi + + return 0 +} + +[ "$have" ] && complete -F _pmount $filenames pmount +[ "$have" ] && complete -F _pumount $filenames pumount + diff --git a/pmount/pmount_exfat.patch b/pmount/pmount_exfat.patch new file mode 100644 index 0000000..6825726 --- /dev/null +++ b/pmount/pmount_exfat.patch @@ -0,0 +1,13 @@ +diff --git a/src/fs.c b/src/fs.c +index 65ea0c7..dc41395 100644 +--- a/src/fs.c ++++ b/src/fs.c +@@ -23,6 +23,8 @@ static struct FS supported_fs[] = { + { "iso9660", "nosuid,nodev,user", 1, NULL, ",iocharset=%s" }, + { "vfat", "nosuid,nodev,user,quiet,shortname=mixed", 1, "077", + ",iocharset=%s",",fmask=%04o,dmask=%04o"}, ++ { "exfat", "nosuid,nodev,user,quiet,nonempty", 1, "077", ++ ",iocharset=%s",",fmask=%04o,dmask=%04o"}, + { "hfsplus", "nosuid,nodev,user", 1, NULL, 0 }, + { "hfs", "nosuid,nodev,user", 1, "077", NULL, + ",file_umask=%04o,dir_umask=%04o"}, diff --git a/pmount/pmount_fix-a-careless-segfault-in-debug-mode.patch b/pmount/pmount_fix-a-careless-segfault-in-debug-mode.patch new file mode 100644 index 0000000..c140d13 --- /dev/null +++ b/pmount/pmount_fix-a-careless-segfault-in-debug-mode.patch @@ -0,0 +1,25 @@ +From b0cee6ea01d5e63016cd1f384c3b86f86af736af Mon Sep 17 00:00:00 2001 +From: Vincent Fourmond +Date: Sun, 18 Mar 2012 02:26:19 +0100 +Subject: [PATCH] Fix a careless segfault in debug mode + +--- + src/policy.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/policy.c b/src/policy.c +index 74afc28..2163c48 100644 +--- a/src/policy.c ++++ b/src/policy.c +@@ -554,7 +554,7 @@ int device_removable_silent(const char * device) + blockdevpath, whitelisted_bus); + } + else +- debug("Device %s does not belong to any whitelisted bus\n"); ++ debug("Device %s does not belong to any whitelisted bus\n", device); + } + return removable; + } +-- +2.17.1 + diff --git a/pnmixer/PKGBUILD b/pnmixer/PKGBUILD new file mode 100644 index 0000000..52a3ebd --- /dev/null +++ b/pnmixer/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgbase=pnmixer +pkgname=('pnmixer-gtk2' 'pnmixer') +pkgver=0.7.2 +pkgrel=1 +pkgdesc="A free, libre and simple mixer application designed to run in your system tray" +arch=('i686' 'x86_64') +license=('GPL-3') +url='https://github.com/nicklan/pnmixer' +makedepends=('gtk' 'gtk2' 'alsa-lib' 'cmake' 'pkg-config' 'libx11' 'intltool' 'gettext-tiny' 'mesa-libgl') +source=("${pkgbase}-${pkgver}.tar.gz::https://github.com/nicklan/pnmixer/archive/v${pkgver}.tar.gz" + "fix-build.patch") +sha512sums=('0d3991a470817458089039586ab55889abfc0c9d44d1009ab00ab0755932ec0697543a7a744ffd83ea834b8ceb27e111b314cdafdb97f1c687b5f2f974996437' + '7591fb48075878843af3c6e78fd53c6efce9853211d62dc31f4123870bbdb1112e7f3b1d6983689c06f015aef324f98305e3949f94f0b20a59e3e401dd778fc5') + +prepare() { + cd $pkgbase-$pkgver + patch -Np1 -i $srcdir/fix-build.patch +} + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_SKIP_RPATH=ON \ + -DWITH_LIBNOTIFY=OFF \ + -DWITH_GTK3=OFF + make + + cd "$srcdir" + # GTK+ 3 version + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_SKIP_RPATH=ON \ + -DWITH_LIBNOTIFY=OFF \ + -DWITH_GTK3=ON + make +} + +package_pnmixer-gtk2() { + pkgdesc+=" (GTK+2)" + depends=('gtk2' 'alsa-lib') + + cd gtk2 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_pnmixer() { + pkgdesc+=" (GTK+3)" + depends=('gtk' 'alsa-lib' 'libx11' 'mesa-libgl') + + cd gtk3 + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/pnmixer/fix-build.patch b/pnmixer/fix-build.patch new file mode 100644 index 0000000..6fb22b1 --- /dev/null +++ b/pnmixer/fix-build.patch @@ -0,0 +1,10 @@ +--- a/po/CMakeLists.txt 2017-06-02 16:55:02.000000000 +0200 ++++ b/po/CMakeLists.txt 2022-07-31 16:22:11.349026579 +0200 +@@ -50,7 +50,6 @@ + add_custom_command(OUTPUT ${lang}.gmo + COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} + -c +- --directory="${CMAKE_SOURCE_DIR}" + -o "${lang}.gmo" + "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.po" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${lang}.po") diff --git a/podofo/PKGBUILD b/podofo/PKGBUILD new file mode 100644 index 0000000..1dbe569 --- /dev/null +++ b/podofo/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=podofo +pkgver=0.9.7 +pkgrel=1 +pkgdesc='A C++ library to work with the PDF file format' +arch=('i686' 'x86_64') +url='http://podofo.sourceforge.net' +license=('GPL-2' 'LGPL-2') +depends=('lua' 'libressl' 'fontconfig' 'libtiff' 'libidn' 'libjpeg-turbo') +makedepends=('cmake') +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('0e699739c2fb7d4d02ffca371504bb19f3a8a97ddcbfc06f8d9636db9e73064b4f633f7f09bce92140bb2174610ad68c1e5f8460d474d176ab803ed28295251b') + +build() { + cd ${pkgname}-${pkgver} + + mkdir -p "test/TokenizerTest/objects" + + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=/usr .. \ + -DFREETYPE_INCLUDE_DIR=/usr/include/freetype2 \ + -DPODOFO_BUILD_SHARED=1 \ + -DPODOFO_HAVE_JPEG_LIB=1 \ + -DPODOFO_HAVE_PNG_LIB=1 \ + -DPODOFO_HAVE_TIFF_LIB=1 \ + -Wno-dev + make +} + +package() { + cd ${pkgname}-${pkgver}/build + make DESTDIR="${pkgdir}" install + install -Dvm644 ${srcdir}/${pkgname}-${pkgver}/COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} + install -Dvm644 ${srcdir}/${pkgname}-${pkgver}/COPYING.LIB -t ${pkgdir}/usr/share/licenses/${pkgname} + install -Dvm644 ${srcdir}/${pkgname}-${pkgver}/COPYING.exception -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/poly2tri-c/PKGBUILD b/poly2tri-c/PKGBUILD new file mode 100644 index 0000000..1be35b9 --- /dev/null +++ b/poly2tri-c/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=poly2tri-c +pkgver=0.1.0 +pkgrel=1 +pkgdesc='C+GLib port of poly2tri - A 2D constrained Delaunay triangulation library' +depends=(glib2) +arch=(i686 x86_64) +url="https://code.google.com/archive/p/$pkgname/" +license=(Modified-BSD) +source=($pkgname-$pkgver.zip::https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/$pkgname/source-archive.zip) +sha512sums=('c7b332402c8014cd03b1d6908224e9f3bb54676e01bceb9bd559bdab4e7632db16ea688b847f19cbcb5fa5177f3979a5653dc85def957aff0ec79d5ac8e903bf') + +prepare() { + cd $pkgname + + msg 'Remove pedantic errors' + sed -i '\|CFLAGS| s|[ ][-]pedantic||' configure.ac + + msg "fix 'rcdt.lo' and 'rutils.lo' errors in $pkgname/refine/Makefile.am" + sed -i 's|[ ]cdt.c| rcdt.c|; s|[ ]cdt.h| rcdt.h|' \ + $pkgname/refine/Makefile.am + sed -i 's|[ ]utils.c| rutils.c|; s|[ ]utils.h| rutils.h|' \ + $pkgname/refine/Makefile.am +} + +build() { + cd $pkgname + + NOCONFIGURE=1 ./autogen.sh + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 LICENSE-Poly2Tri.txt -t $pkgdir/usr/share/licenses/$pkgname + install -Dm644 LICENSE-Poly2Tri-C.txt -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/poppler-data/PKGBUILD b/poppler-data/PKGBUILD new file mode 100644 index 0000000..e48ca67 --- /dev/null +++ b/poppler-data/PKGBUILD @@ -0,0 +1,21 @@ +# Maintainer: Jesus E. + +pkgname=poppler-data +pkgver=0.4.10 +pkgrel=1 +pkgdesc="Encoding data for the poppler PDF rendering library" +arch=('any') +license=('Modified-BSD' 'GPL-2') +conflicts=('poppler<0.10.5') +url="https://poppler.freedesktop.org/" +source=(https://poppler.freedesktop.org/${pkgname}-${pkgver}.tar.gz) +sha512sums=('4bebad0791b55b5e2805cf864393d1f777a7996c962398fc178211d2abbf110f75ef2fa6699e275b126aca0540eabb89542a672e0587248db9414e357a32bfd3') + +package() { + cd ${pkgname}-${pkgver} + make prefix=/usr DESTDIR="${pkgdir}" install + + for i in COPYING COPYING.adobe COPYING.gpl2; do + install -Dm644 ${i} "${pkgdir}/usr/share/licenses/${pkgname}/${i}" + done +} diff --git a/poppler/PKGBUILD b/poppler/PKGBUILD new file mode 100644 index 0000000..6907005 --- /dev/null +++ b/poppler/PKGBUILD @@ -0,0 +1,107 @@ +# Maintainer: Jesus E. + +pkgbase=poppler +pkgname=('poppler' 'poppler-glib' 'poppler-qt') +pkgver=20.09.0 +_debver=$pkgver +_debrel=3.1 +pkgrel=6 +arch=('i686' 'x86_64') +license=('GPL-3') +makedepends=('libjpeg-turbo' 'gcc-libs' 'cairo' 'fontconfig' 'openjpeg2' 'pkgconfig' 'lcms2' + 'gobject-introspection' 'icu' 'qt-base' 'nss' 'curl' 'poppler-data' + 'cmake' 'python' 'boost' 'quilt') +options=('!emptydirs') +url='https://poppler.freedesktop.org/' +source=(https://poppler.freedesktop.org/${pkgbase}-${pkgver}.tar.xz{,.sig} + https://security.debian.org/debian-security/pool/updates/main/p/poppler/poppler_${_debver}-${_debrel}+deb11u2.debian.tar.xz) +sha512sums=('fbd57dd0754279d4b0a20ccbdbfb06abc5a5d84e63915676353fd42d5b80318904cf7e6ae462db445ed6c6e011fc24675dccbb8bd3597fc6532657a4ea23406a' + 'SKIP' + 'e810915535397d70215bfb4943717d30d3c5460c74465ca54d301bdadf6d05edc0dfca6ce5f50ea1f4b713fb78499049b22387bc12c1897c7e0ddb4446498902') +validpgpkeys=('CA262C6C83DE4D2FB28A332A3A6A4DB839EAA6D7') # "Albert Astals Cid " + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DENABLE_UNSTABLE_API_ABI_HEADERS=ON \ + -DENABLE_GTK_DOC=OFF \ + -DENABLE_ZLIB_UNCOMPRESS=ON \ + -DBUILD_GTK_TESTS=OFF \ + -DBUILD_QT5_TESTS=OFF \ + -DBUILD_CPP_TESTS=OFF \ + -Wno-dev + make -C build +} + +package_poppler() { + pkgdesc="PDF rendering library based on xpdf 3.0" + depends=('libjpeg-turbo' 'gcc-libs' 'cairo' 'fontconfig' 'openjpeg2' 'lcms2' 'nss' 'curl') + optdepends=('poppler-data: encoding data to display PDF documents containing CJK characters') + conflicts=("poppler-qt3<${pkgver}" "poppler-qt4<${pkgver}") + + make DESTDIR="${pkgdir}" -C build install + + # license + install -Dm644 ${srcdir}/${pkgbase}-${pkgver}/COPYING3 -t ${pkgdir}/usr/share/licenses/${pkgname} + + # cleanup for splitted build + rm -vrf "${pkgdir}"/usr/include/poppler/{glib,qt5} + rm -vf "${pkgdir}"//usr/lib/libpoppler-{glib,qt5}.* + rm -vf "${pkgdir}"/usr/lib/pkgconfig/poppler-{glib,qt5}.pc + rm -vrf "${pkgdir}"/usr/{lib,share}/gir* +} + +package_poppler-glib() { + pkgdesc="Poppler glib bindings" + depends=("poppler=${pkgver}" 'glib2') + + make -C build/glib DESTDIR="${pkgdir}" install + install -m755 -d "${pkgdir}/usr/lib/pkgconfig" + install -m644 build/poppler-glib.pc "${pkgdir}/usr/lib/pkgconfig/" + rm -vf "${pkgdir}"/usr/lib/libpoppler.* + rm -vf "${pkgdir}/usr/bin/poppler-glib-demo" + + # license + install -Dm644 ${srcdir}/${pkgbase}-${pkgver}/COPYING3 -t ${pkgdir}/usr/share/licenses/${pkgname} +} + +package_poppler-qt() { + pkgdesc="Poppler Qt bindings" + depends=("poppler=${pkgver}" 'qt-base') + + make -C build/qt5 DESTDIR="${pkgdir}" install + install -m755 -d "${pkgdir}/usr/lib/pkgconfig" + install -m644 build/poppler-qt5.pc "${pkgdir}/usr/lib/pkgconfig/" + + # license + install -Dm644 ${srcdir}/${pkgbase}-${pkgver}/COPYING3 -t ${pkgdir}/usr/share/licenses/${pkgname} +} + +package_poppler-qt() { + pkgdesc="Poppler Qt bindings" + depends=("poppler=${pkgver}" 'qt-base') + + cd build + make -C qt5 DESTDIR="${pkgdir}" install + install -m755 -d "${pkgdir}/usr/lib/pkgconfig" + install -m644 poppler-qt5.pc "${pkgdir}/usr/lib/pkgconfig/" + + # license + install -Dm644 ${srcdir}/${pkgbase}-${pkgver}/COPYING3 ${pkgdir}/usr/share/licenses/${pkgname}/COPYING3 +} diff --git a/portaudio/PKGBUILD b/portaudio/PKGBUILD new file mode 100644 index 0000000..b811d24 --- /dev/null +++ b/portaudio/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=portaudio +# versioning is very bizarre: +# https://app.assembla.com/wiki/show/portaudio/ReleaseNotes +_version=190600_20161030 +pkgver=19.6.0 +_debver=$pkgver +_debrel=1.1 +pkgrel=4 +epoch=1 +pkgdesc='A free, cross-platform, audio I/O library.' +arch=('i686' 'x86_64') +url="http://www.portaudio.com/" +license=('Expat') +depends=('gcc-libs') +makedepends=('jack' 'alsa-lib' 'libsndio' 'quilt') +source=("${pkgname}-${pkgver}.tgz::http://www.portaudio.com/archives/pa_stable_v${_version}.tgz" + "https://deb.debian.org/debian/pool/main/p/portaudio19/portaudio19_$_debver-$_debrel.debian.tar.xz" + "sndio.patch") +sha512sums=('7ec692cbd8c23878b029fad9d9fd63a021f57e60c4921f602995a2fca070c29f17a280c7f2da5966c4aad29d28434538452f4c822eacf3a60af59a6dc8e9704c' + 'a0c49f92be9a41fec1e58f78b8fbbdb77ce35cfb283628b4518670ddefa7c5304554858d9895c9124c97993d76446013ac9a27270d8e15bf99125ecfb4a470c5' + 'da0aa902e0895d68236811b470832e5a38d0d41967fcff6c1ca4b916ff1fb84dad936518f1337200732075b66ecc5c9ff2368f75fde9ee8c66ee37964a6953aa') + +prepare() { + mv -v "${pkgname}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + patch -p0 -i "${srcdir}/sndio.patch" + + # depcomp is required when building the bindings/cpp extension + # but will be removed by autoreconf + libtool >= 2.4.6 + # Protect it from removal + mv depcomp{,~} + autoreconf -fi + # Restore depcomp + mv depcomp{~,} +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --enable-cxx \ + --with-alsa \ + --with-sndio \ + --with-jack + + # build crashes somewhere above > 8 jobs + make -j1 +} + +package() { + depends+=('jack' 'alsa-lib' 'libsndio') + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -vDm 644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 README.txt -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/portaudio/sndio.patch b/portaudio/sndio.patch new file mode 100644 index 0000000..7e43e3f --- /dev/null +++ b/portaudio/sndio.patch @@ -0,0 +1,883 @@ +diff --git Makefile.in Makefile.in +index 5e1a764..2747f73 100644 +--- Makefile.in ++++ Makefile.in +@@ -44,7 +44,7 @@ PALIB = libportaudio.la + PAINC = include/portaudio.h + + PA_LDFLAGS = $(LDFLAGS) $(SHARED_FLAGS) -rpath $(libdir) -no-undefined \ +- -export-symbols-regex "(Pa|PaMacCore|PaJack|PaAlsa|PaAsio|PaOSS)_.*" \ ++ -export-symbols-regex "(Pa|PaMacCore|PaJack|PaAlsa|PaAsio|PaOSS|PaSndio)_.*" \ + -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) + + COMMON_OBJS = \ +@@ -146,6 +146,7 @@ SRC_DIRS = \ + src/hostapi/dsound \ + src/hostapi/jack \ + src/hostapi/oss \ ++ src/hostapi/sndio \ + src/hostapi/wasapi \ + src/hostapi/wdmks \ + src/hostapi/wmme \ +diff --git configure.in configure.in +index 83c239a..db11d65 100644 +--- configure.in ++++ configure.in +@@ -24,6 +24,10 @@ AC_ARG_WITH(alsa, + AS_HELP_STRING([--with-alsa], [Enable support for ALSA @<:@autodetect@:>@]), + [with_alsa=$withval]) + ++AC_ARG_WITH(sndio, ++ AS_HELP_STRING([--with-sndio], [Enable support for sndio @<:@autodetect@:>@]), ++ [with_sndio=$withval]) ++ + AC_ARG_WITH(jack, + AS_HELP_STRING([--with-jack], [Enable support for JACK @<:@autodetect@:>@]), + [with_jack=$withval]) +@@ -120,6 +124,10 @@ have_alsa=no + if test "x$with_alsa" != "xno"; then + AC_CHECK_LIB(asound, snd_pcm_open, have_alsa=yes, have_alsa=no) + fi ++have_sndio=no ++if test "x$with_sndio" != "xno"; then ++ AC_CHECK_LIB(sndio, sio_open, have_sndio=yes, have_sndio=no) ++fi + have_asihpi=no + if test "x$with_asihpi" != "xno"; then + AC_CHECK_LIB(hpi, HPI_SubSysCreate, have_asihpi=yes, have_asihpi=no, -lm) +@@ -406,6 +414,13 @@ case "${host_os}" in + AC_DEFINE(PA_USE_ALSA,1) + fi + ++ if [[ "$have_sndio" = "yes" -a "$with_sndio" != "no" ]] ; then ++ DLL_LIBS="$DLL_LIBS -lsndio" ++ LIBS="$LIBS -lsndio" ++ OTHER_OBJS="$OTHER_OBJS src/hostapi/sndio/pa_sndio.o" ++ AC_DEFINE(PA_USE_SNDIO,1) ++ fi ++ + if [[ "$have_jack" = "yes" ] && [ "$with_jack" != "no" ]] ; then + DLL_LIBS="$DLL_LIBS $JACK_LIBS" + CFLAGS="$CFLAGS $JACK_CFLAGS" +@@ -510,6 +525,7 @@ case "$target_os" in + ;; + *) + AC_MSG_RESULT([ ++ Sndio ....................... $have_sndio + OSS ......................... $have_oss + JACK ........................ $have_jack + ]) +diff --git include/portaudio.h include/portaudio.h +index 9c8a295..e535a02 100644 +--- include/portaudio.h ++++ include/portaudio.h +@@ -287,7 +287,8 @@ typedef enum PaHostApiTypeId + paWDMKS=11, + paJACK=12, + paWASAPI=13, +- paAudioScienceHPI=14 ++ paAudioScienceHPI=14, ++ paSndio=15 + } PaHostApiTypeId; + + +diff --git src/hostapi/sndio/pa_sndio.c src/hostapi/sndio/pa_sndio.c +new file mode 100644 +index 0000000..725ef47 +--- /dev/null ++++ src/hostapi/sndio/pa_sndio.c +@@ -0,0 +1,768 @@ ++/* ++ * Copyright (c) 2009 Alexandre Ratchov ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "pa_util.h" ++#include "pa_hostapi.h" ++#include "pa_stream.h" ++#include "pa_process.h" ++#include "pa_allocation.h" ++ ++#if 0 ++#define DPR(...) do { fprintf(stderr, __VA_ARGS__); } while (0) ++#else ++#define DPR(...) do {} while (0) ++#endif ++ ++/* ++ * per-stream data ++ */ ++typedef struct PaSndioStream ++{ ++ PaUtilStreamRepresentation base; ++ PaUtilBufferProcessor bufproc; /* format conversion */ ++ struct sio_hdl *hdl; /* handle for device i/o */ ++ struct sio_par par; /* current device parameters */ ++ unsigned mode; /* SIO_PLAY, SIO_REC or both */ ++ int stopped; /* stop requested or not started */ ++ int active; /* thread is running */ ++ unsigned long long realpos; /* frame number h/w is processing */ ++ char *rbuf, *wbuf; /* bounce buffers for conversions */ ++ unsigned long long rpos, wpos; /* bytes read/written */ ++ pthread_t thread; /* thread of the callback interface */ ++} PaSndioStream; ++ ++/* ++ * api "class" data, common to all streams ++ */ ++typedef struct PaSndioHostApiRepresentation ++{ ++ PaUtilHostApiRepresentation base; ++ PaUtilStreamInterface callback; ++ PaUtilStreamInterface blocking; ++ /* ++ * sndio has no device discovery mechanism and PortAudio has ++ * no way of accepting raw device strings from users. ++ * Normally we just expose the default device, which can be ++ * changed via the AUDIODEVICE environment variable, but we ++ * also allow specifying a list of up to 16 devices via the ++ * PA_SNDIO_AUDIODEVICES environment variable. ++ * ++ * Example: ++ * PA_SNDIO_AUDIODEVICES=default:snd/0.monitor:snd@remote/0 ++ */ ++#define PA_SNDIO_AUDIODEVICES_MAX 16 ++ PaDeviceInfo device_info[PA_SNDIO_AUDIODEVICES_MAX]; ++ PaDeviceInfo *infos[PA_SNDIO_AUDIODEVICES_MAX]; ++ char *audiodevices; ++} PaSndioHostApiRepresentation; ++ ++/* ++ * callback invoked when blocks are processed by the hardware ++ */ ++static void ++sndioOnMove(void *addr, int delta) ++{ ++ PaSndioStream *s = (PaSndioStream *)addr; ++ ++ s->realpos += delta; ++} ++ ++/* ++ * convert PA encoding to sndio encoding, return true on success ++ */ ++static int ++sndioSetFmt(struct sio_par *sio, PaSampleFormat fmt) ++{ ++ switch (fmt & ~paNonInterleaved) { ++ case paInt32: ++ sio->sig = 1; ++ sio->bits = 32; ++ break; ++ case paInt24: ++ sio->sig = 1; ++ sio->bits = 24; ++ sio->bps = 3; /* paInt24 is packed format */ ++ break; ++ case paInt16: ++ case paFloat32: ++ sio->sig = 1; ++ sio->bits = 16; ++ break; ++ case paInt8: ++ sio->sig = 1; ++ sio->bits = 8; ++ break; ++ case paUInt8: ++ sio->sig = 0; ++ sio->bits = 8; ++ break; ++ default: ++ DPR("sndioSetFmt: %x: unsupported\n", fmt); ++ return 0; ++ } ++ sio->le = SIO_LE_NATIVE; ++ return 1; ++} ++ ++/* ++ * convert sndio encoding to PA encoding, return true on success ++ */ ++static int ++sndioGetFmt(struct sio_par *sio, PaSampleFormat *fmt) ++{ ++ if ((sio->bps * 8 != sio->bits && !sio->msb) || ++ (sio->bps > 1 && sio->le != SIO_LE_NATIVE)) { ++ DPR("sndioGetFmt: bits = %u, le = %u, msb = %u, bps = %u\n", ++ sio->bits, sio->le, sio->msb, sio->bps); ++ return 0; ++ } ++ ++ switch (sio->bits) { ++ case 32: ++ if (!sio->sig) ++ return 0; ++ *fmt = paInt32; ++ break; ++ case 24: ++ if (!sio->sig) ++ return 0; ++ *fmt = (sio->bps == 3) ? paInt24 : paInt32; ++ break; ++ case 16: ++ if (!sio->sig) ++ return 0; ++ *fmt = paInt16; ++ break; ++ case 8: ++ *fmt = sio->sig ? paInt8 : paUInt8; ++ break; ++ default: ++ DPR("sndioGetFmt: %u: unsupported\n", sio->bits); ++ return 0; ++ } ++ return 1; ++} ++ ++/* ++ * I/O loop for callback interface ++ */ ++static void * ++sndioThread(void *arg) ++{ ++ PaSndioStream *s = (PaSndioStream *)arg; ++ PaStreamCallbackTimeInfo ti; ++ unsigned char *data; ++ unsigned todo, rblksz, wblksz; ++ int n, result; ++ ++ rblksz = s->par.round * s->par.rchan * s->par.bps; ++ wblksz = s->par.round * s->par.pchan * s->par.bps; ++ ++ DPR("sndioThread: mode = %x, round = %u, rblksz = %u, wblksz = %u\n", ++ s->mode, s->par.round, rblksz, wblksz); ++ ++ while (!s->stopped) { ++ if (s->mode & SIO_REC) { ++ todo = rblksz; ++ data = s->rbuf; ++ while (todo > 0) { ++ n = sio_read(s->hdl, data, todo); ++ if (n == 0) { ++ DPR("sndioThread: sio_read failed\n"); ++ goto failed; ++ } ++ todo -= n; ++ data += n; ++ } ++ s->rpos += s->par.round; ++ ti.inputBufferAdcTime = ++ (double)s->realpos / s->par.rate; ++ } ++ if (s->mode & SIO_PLAY) { ++ ti.outputBufferDacTime = ++ (double)(s->realpos + s->par.bufsz) / s->par.rate; ++ } ++ ti.currentTime = s->realpos / (double)s->par.rate; ++ PaUtil_BeginBufferProcessing(&s->bufproc, &ti, 0); ++ if (s->mode & SIO_PLAY) { ++ PaUtil_SetOutputFrameCount(&s->bufproc, s->par.round); ++ PaUtil_SetInterleavedOutputChannels(&s->bufproc, ++ 0, s->wbuf, s->par.pchan); ++ } ++ if (s->mode & SIO_REC) { ++ PaUtil_SetInputFrameCount(&s->bufproc, s->par.round); ++ PaUtil_SetInterleavedInputChannels(&s->bufproc, ++ 0, s->rbuf, s->par.rchan); ++ } ++ result = paContinue; ++ n = PaUtil_EndBufferProcessing(&s->bufproc, &result); ++ if (n != s->par.round) { ++ DPR("sndioThread: %d < %u frames, result = %d\n", ++ n, s->par.round, result); ++ } ++ if (result != paContinue) { ++ break; ++ } ++ if (s->mode & SIO_PLAY) { ++ n = sio_write(s->hdl, s->wbuf, wblksz); ++ if (n < wblksz) { ++ DPR("sndioThread: sio_write failed\n"); ++ goto failed; ++ } ++ s->wpos += s->par.round; ++ } ++ } ++ failed: ++ s->active = 0; ++ DPR("sndioThread: done\n"); ++} ++ ++static PaError ++OpenStream(struct PaUtilHostApiRepresentation *hostApi, ++ PaStream **stream, ++ const PaStreamParameters *inputPar, ++ const PaStreamParameters *outputPar, ++ double sampleRate, ++ unsigned long framesPerBuffer, ++ PaStreamFlags streamFlags, ++ PaStreamCallback *streamCallback, ++ void *userData) ++{ ++ PaSndioHostApiRepresentation *sndioHostApi = (PaSndioHostApiRepresentation *)hostApi; ++ PaSndioStream *s; ++ PaError err; ++ struct sio_hdl *hdl; ++ struct sio_par par; ++ unsigned mode; ++ int inch, onch; ++ PaSampleFormat ifmt, ofmt, siofmt; ++ const char *dev; ++ ++ DPR("OpenStream:\n"); ++ ++ mode = 0; ++ inch = onch = 0; ++ ifmt = ofmt = 0; ++ sio_initpar(&par); ++ ++ if (outputPar && outputPar->channelCount > 0) { ++ if (outputPar->device >= sndioHostApi->base.info.deviceCount) { ++ DPR("OpenStream: %d: bad output device\n", outputPar->device); ++ return paInvalidDevice; ++ } ++ if (outputPar->hostApiSpecificStreamInfo) { ++ DPR("OpenStream: output specific info\n"); ++ return paIncompatibleHostApiSpecificStreamInfo; ++ } ++ if (!sndioSetFmt(&par, outputPar->sampleFormat)) { ++ return paSampleFormatNotSupported; ++ } ++ ofmt = outputPar->sampleFormat; ++ onch = par.pchan = outputPar->channelCount; ++ mode |= SIO_PLAY; ++ } ++ if (inputPar && inputPar->channelCount > 0) { ++ if (inputPar->device >= sndioHostApi->base.info.deviceCount) { ++ DPR("OpenStream: %d: bad input device\n", inputPar->device); ++ return paInvalidDevice; ++ } ++ if (inputPar->hostApiSpecificStreamInfo) { ++ DPR("OpenStream: input specific info\n"); ++ return paIncompatibleHostApiSpecificStreamInfo; ++ } ++ if (!sndioSetFmt(&par, inputPar->sampleFormat)) { ++ return paSampleFormatNotSupported; ++ } ++ ifmt = inputPar->sampleFormat; ++ inch = par.rchan = inputPar->channelCount; ++ mode |= SIO_REC; ++ } ++ par.rate = sampleRate; ++ if (framesPerBuffer != paFramesPerBufferUnspecified) ++ par.round = framesPerBuffer; ++ ++ DPR("OpenStream: mode = %x, trying rate = %u\n", mode, par.rate); ++ ++ if (outputPar) { ++ dev = sndioHostApi->device_info[outputPar->device].name; ++ } else if (inputPar) { ++ dev = sndioHostApi->device_info[inputPar->device].name; ++ } else { ++ return paUnanticipatedHostError; ++ } ++ hdl = sio_open(dev, mode, 0); ++ if (hdl == NULL) ++ return paUnanticipatedHostError; ++ if (!sio_setpar(hdl, &par)) { ++ sio_close(hdl); ++ return paUnanticipatedHostError; ++ } ++ if (!sio_getpar(hdl, &par)) { ++ sio_close(hdl); ++ return paUnanticipatedHostError; ++ } ++ if (!sndioGetFmt(&par, &siofmt)) { ++ sio_close(hdl); ++ return paSampleFormatNotSupported; ++ } ++ if ((mode & SIO_REC) && par.rchan != inputPar->channelCount) { ++ DPR("OpenStream: rchan(%u) != %d\n", par.rchan, inputPar->channelCount); ++ sio_close(hdl); ++ return paInvalidChannelCount; ++ } ++ if ((mode & SIO_PLAY) && par.pchan != outputPar->channelCount) { ++ DPR("OpenStream: pchan(%u) != %d\n", par.pchan, outputPar->channelCount); ++ sio_close(hdl); ++ return paInvalidChannelCount; ++ } ++ if ((double)par.rate < sampleRate * 0.995 || ++ (double)par.rate > sampleRate * 1.005) { ++ DPR("OpenStream: rate(%u) != %g\n", par.rate, sampleRate); ++ sio_close(hdl); ++ return paInvalidSampleRate; ++ } ++ ++ s = (PaSndioStream *)PaUtil_AllocateMemory(sizeof(PaSndioStream)); ++ if (s == NULL) { ++ sio_close(hdl); ++ return paInsufficientMemory; ++ } ++ PaUtil_InitializeStreamRepresentation(&s->base, ++ streamCallback ? &sndioHostApi->callback : &sndioHostApi->blocking, ++ streamCallback, userData); ++ DPR("inch = %d, onch = %d, ifmt = %x, ofmt = %x\n", ++ inch, onch, ifmt, ofmt); ++ err = PaUtil_InitializeBufferProcessor(&s->bufproc, ++ inch, ifmt, siofmt, ++ onch, ofmt, siofmt, ++ sampleRate, ++ streamFlags, ++ framesPerBuffer, ++ par.round, ++ paUtilFixedHostBufferSize, ++ streamCallback, userData); ++ if (err) { ++ DPR("OpenStream: PaUtil_InitializeBufferProcessor failed\n"); ++ PaUtil_FreeMemory(s); ++ sio_close(hdl); ++ return err; ++ } ++ if (mode & SIO_REC) { ++ s->rbuf = malloc(par.round * par.rchan * par.bps); ++ if (s->rbuf == NULL) { ++ DPR("OpenStream: failed to allocate rbuf\n"); ++ PaUtil_FreeMemory(s); ++ sio_close(hdl); ++ return paInsufficientMemory; ++ } ++ } ++ if (mode & SIO_PLAY) { ++ s->wbuf = malloc(par.round * par.pchan * par.bps); ++ if (s->wbuf == NULL) { ++ DPR("OpenStream: failed to allocate wbuf\n"); ++ free(s->rbuf); ++ PaUtil_FreeMemory(s); ++ sio_close(hdl); ++ return paInsufficientMemory; ++ } ++ } ++ s->base.streamInfo.inputLatency = 0; ++ s->base.streamInfo.outputLatency = (mode & SIO_PLAY) ? ++ (double)(par.bufsz + PaUtil_GetBufferProcessorOutputLatencyFrames(&s->bufproc)) / (double)par.rate : 0; ++ s->base.streamInfo.sampleRate = par.rate; ++ s->active = 0; ++ s->stopped = 1; ++ s->mode = mode; ++ s->hdl = hdl; ++ s->par = par; ++ *stream = s; ++ DPR("OpenStream: done\n"); ++ return paNoError; ++} ++ ++static PaError ++BlockingReadStream(PaStream *stream, void *data, unsigned long numFrames) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ unsigned n, res, todo; ++ void *buf; ++ ++ while (numFrames > 0) { ++ n = s->par.round; ++ if (n > numFrames) ++ n = numFrames; ++ buf = s->rbuf; ++ todo = n * s->par.rchan * s->par.bps; ++ while (todo > 0) { ++ res = sio_read(s->hdl, buf, todo); ++ if (res == 0) ++ return paUnanticipatedHostError; ++ buf = (char *)buf + res; ++ todo -= res; ++ } ++ s->rpos += n; ++ PaUtil_SetInputFrameCount(&s->bufproc, n); ++ PaUtil_SetInterleavedInputChannels(&s->bufproc, 0, s->rbuf, s->par.rchan); ++ res = PaUtil_CopyInput(&s->bufproc, &data, n); ++ if (res != n) { ++ DPR("BlockingReadStream: copyInput: %u != %u\n"); ++ return paUnanticipatedHostError; ++ } ++ numFrames -= n; ++ } ++ return paNoError; ++} ++ ++static PaError ++BlockingWriteStream(PaStream* stream, const void *data, unsigned long numFrames) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ unsigned n, res; ++ ++ while (numFrames > 0) { ++ n = s->par.round; ++ if (n > numFrames) ++ n = numFrames; ++ PaUtil_SetOutputFrameCount(&s->bufproc, n); ++ PaUtil_SetInterleavedOutputChannels(&s->bufproc, 0, s->wbuf, s->par.pchan); ++ res = PaUtil_CopyOutput(&s->bufproc, &data, n); ++ if (res != n) { ++ DPR("BlockingWriteStream: copyOutput: %u != %u\n"); ++ return paUnanticipatedHostError; ++ } ++ res = sio_write(s->hdl, s->wbuf, n * s->par.pchan * s->par.bps); ++ if (res == 0) ++ return paUnanticipatedHostError; ++ s->wpos += n; ++ numFrames -= n; ++ } ++ return paNoError; ++} ++ ++static signed long ++BlockingGetStreamReadAvailable(PaStream *stream) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ struct pollfd pfd; ++ int n, events; ++ ++ n = sio_pollfd(s->hdl, &pfd, POLLIN); ++ while (poll(&pfd, n, 0) < 0) { ++ if (errno == EINTR) ++ continue; ++ perror("poll"); ++ abort(); ++ } ++ events = sio_revents(s->hdl, &pfd); ++ if (!(events & POLLIN)) ++ return 0; ++ ++ return s->realpos - s->rpos; ++} ++ ++static signed long ++BlockingGetStreamWriteAvailable(PaStream *stream) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ struct pollfd pfd; ++ int n, events; ++ ++ n = sio_pollfd(s->hdl, &pfd, POLLOUT); ++ while (poll(&pfd, n, 0) < 0) { ++ if (errno == EINTR) ++ continue; ++ perror("poll"); ++ abort(); ++ } ++ events = sio_revents(s->hdl, &pfd); ++ if (!(events & POLLOUT)) ++ return 0; ++ ++ return s->par.bufsz - (s->wpos - s->realpos); ++} ++ ++static PaError ++BlockingWaitEmpty( PaStream *stream ) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ ++ /* ++ * drain playback buffers; sndio always does it in background ++ * and there is no way to wait for completion ++ */ ++ DPR("BlockingWaitEmpty: s=%d, a=%d\n", s->stopped, s->active); ++ ++ return paNoError; ++} ++ ++static PaError ++StartStream(PaStream *stream) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ unsigned primes, wblksz; ++ int err; ++ ++ DPR("StartStream: s=%d, a=%d\n", s->stopped, s->active); ++ ++ if (!s->stopped) { ++ DPR("StartStream: already started\n"); ++ return paNoError; ++ } ++ s->stopped = 0; ++ s->active = 1; ++ s->realpos = 0; ++ s->wpos = 0; ++ s->rpos = 0; ++ PaUtil_ResetBufferProcessor(&s->bufproc); ++ if (!sio_start(s->hdl)) ++ return paUnanticipatedHostError; ++ ++ /* ++ * send a complete buffer of silence ++ */ ++ if (s->mode & SIO_PLAY) { ++ wblksz = s->par.round * s->par.pchan * s->par.bps; ++ memset(s->wbuf, 0, wblksz); ++ for (primes = s->par.bufsz / s->par.round; primes > 0; primes--) ++ s->wpos += sio_write(s->hdl, s->wbuf, wblksz); ++ } ++ if (s->base.streamCallback) { ++ err = pthread_create(&s->thread, NULL, sndioThread, s); ++ if (err) { ++ DPR("SndioStartStream: couldn't create thread\n"); ++ return paUnanticipatedHostError; ++ } ++ DPR("StartStream: started...\n"); ++ } ++ return paNoError; ++} ++ ++static PaError ++StopStream(PaStream *stream) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ void *ret; ++ int err; ++ ++ DPR("StopStream: s=%d, a=%d\n", s->stopped, s->active); ++ ++ if (s->stopped) { ++ DPR("StartStream: already started\n"); ++ return paNoError; ++ } ++ s->stopped = 1; ++ if (s->base.streamCallback) { ++ err = pthread_join(s->thread, &ret); ++ if (err) { ++ DPR("SndioStop: couldn't join thread\n"); ++ return paUnanticipatedHostError; ++ } ++ } ++ if (!sio_stop(s->hdl)) ++ return paUnanticipatedHostError; ++ return paNoError; ++} ++ ++static PaError ++CloseStream(PaStream *stream) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ ++ DPR("CloseStream:\n"); ++ ++ if (!s->stopped) ++ StopStream(stream); ++ ++ if (s->mode & SIO_REC) ++ free(s->rbuf); ++ if (s->mode & SIO_PLAY) ++ free(s->wbuf); ++ sio_close(s->hdl); ++ PaUtil_TerminateStreamRepresentation(&s->base); ++ PaUtil_TerminateBufferProcessor(&s->bufproc); ++ PaUtil_FreeMemory(s); ++ return paNoError; ++} ++ ++static PaError ++AbortStream(PaStream *stream) ++{ ++ DPR("AbortStream:\n"); ++ ++ return StopStream(stream); ++} ++ ++static PaError ++IsStreamStopped(PaStream *stream) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ ++ //DPR("IsStreamStopped: s=%d, a=%d\n", s->stopped, s->active); ++ ++ return s->stopped; ++} ++ ++static PaError ++IsStreamActive(PaStream *stream) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ ++ //DPR("IsStreamActive: s=%d, a=%d\n", s->stopped, s->active); ++ ++ return s->active; ++} ++ ++static PaTime ++GetStreamTime(PaStream *stream) ++{ ++ PaSndioStream *s = (PaSndioStream *)stream; ++ ++ return (double)s->realpos / s->base.streamInfo.sampleRate; ++} ++ ++static PaError ++IsFormatSupported(struct PaUtilHostApiRepresentation *hostApi, ++ const PaStreamParameters *inputPar, ++ const PaStreamParameters *outputPar, ++ double sampleRate) ++{ ++ return paFormatIsSupported; ++} ++ ++static void ++Terminate(struct PaUtilHostApiRepresentation *hostApi) ++{ ++ PaSndioHostApiRepresentation *sndioHostApi; ++ sndioHostApi = (PaSndioHostApiRepresentation *)hostApi; ++ free(sndioHostApi->audiodevices); ++ PaUtil_FreeMemory(hostApi); ++} ++ ++static void ++InitDeviceInfo(PaDeviceInfo *info, PaHostApiIndex hostApiIndex, const char *name) ++{ ++ info->structVersion = 2; ++ info->name = name; ++ info->hostApi = hostApiIndex; ++ info->maxInputChannels = 128; ++ info->maxOutputChannels = 128; ++ info->defaultLowInputLatency = 0.01; ++ info->defaultLowOutputLatency = 0.01; ++ info->defaultHighInputLatency = 0.5; ++ info->defaultHighOutputLatency = 0.5; ++ info->defaultSampleRate = 48000; ++} ++ ++PaError ++PaSndio_Initialize(PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex) ++{ ++ PaSndioHostApiRepresentation *sndioHostApi; ++ PaDeviceInfo *info; ++ struct sio_hdl *hdl; ++ char *audiodevices; ++ char *device; ++ size_t deviceCount; ++ ++ DPR("PaSndio_Initialize: initializing...\n"); ++ ++ if ((hdl=sio_open(SIO_DEVANY, SIO_PLAY, 1)) == NULL) ++ return paNoError; ++ sio_close(hdl); ++ /* unusable APIs should return paNoError and a NULL hostApi */ ++ *hostApi = NULL; ++ ++ sndioHostApi = PaUtil_AllocateMemory(sizeof(PaSndioHostApiRepresentation)); ++ if (sndioHostApi == NULL) ++ return paNoError; ++ ++ // Add default device ++ info = &sndioHostApi->device_info[0]; ++ InitDeviceInfo(info, hostApiIndex, SIO_DEVANY); ++ sndioHostApi->infos[0] = info; ++ deviceCount = 1; ++ ++ // Add additional devices as specified in the PA_SNDIO_AUDIODEVICES ++ // environment variable as a colon separated list ++ sndioHostApi->audiodevices = NULL; ++ audiodevices = getenv("PA_SNDIO_AUDIODEVICES"); ++ if (audiodevices != NULL) { ++ sndioHostApi->audiodevices = strdup(audiodevices); ++ if (sndioHostApi->audiodevices == NULL) ++ return paNoError; ++ ++ audiodevices = sndioHostApi->audiodevices; ++ while ((device = strsep(&audiodevices, ":")) != NULL && ++ deviceCount < PA_SNDIO_AUDIODEVICES_MAX) { ++ if (*device == '\0') ++ continue; ++ info = &sndioHostApi->device_info[deviceCount]; ++ InitDeviceInfo(info, hostApiIndex, device); ++ sndioHostApi->infos[deviceCount] = info; ++ deviceCount++; ++ } ++ } ++ ++ *hostApi = &sndioHostApi->base; ++ (*hostApi)->info.structVersion = 1; ++ (*hostApi)->info.type = paSndio; ++ (*hostApi)->info.name = "sndio"; ++ (*hostApi)->info.deviceCount = deviceCount; ++ (*hostApi)->info.defaultInputDevice = 0; ++ (*hostApi)->info.defaultOutputDevice = 0; ++ (*hostApi)->deviceInfos = sndioHostApi->infos; ++ (*hostApi)->Terminate = Terminate; ++ (*hostApi)->OpenStream = OpenStream; ++ (*hostApi)->IsFormatSupported = IsFormatSupported; ++ ++ PaUtil_InitializeStreamInterface(&sndioHostApi->blocking, ++ CloseStream, ++ StartStream, ++ StopStream, ++ AbortStream, ++ IsStreamStopped, ++ IsStreamActive, ++ GetStreamTime, ++ PaUtil_DummyGetCpuLoad, ++ BlockingReadStream, ++ BlockingWriteStream, ++ BlockingGetStreamReadAvailable, ++ BlockingGetStreamWriteAvailable); ++ ++ PaUtil_InitializeStreamInterface(&sndioHostApi->callback, ++ CloseStream, ++ StartStream, ++ StopStream, ++ AbortStream, ++ IsStreamStopped, ++ IsStreamActive, ++ GetStreamTime, ++ PaUtil_DummyGetCpuLoad, ++ PaUtil_DummyRead, ++ PaUtil_DummyWrite, ++ PaUtil_DummyGetReadAvailable, ++ PaUtil_DummyGetWriteAvailable); ++ ++ DPR("PaSndio_Initialize: done\n"); ++ return paNoError; ++} +diff --git src/os/unix/pa_unix_hostapis.c src/os/unix/pa_unix_hostapis.c +index a9b4a05..f10ced1 100644 +--- src/os/unix/pa_unix_hostapis.c ++++ src/os/unix/pa_unix_hostapis.c +@@ -44,6 +44,7 @@ + + PaError PaJack_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + PaError PaAlsa_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); ++PaError PaSndio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + PaError PaOSS_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); + /* Added for IRIX, Pieter, oct 2, 2003: */ + PaError PaSGI_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index ); +@@ -57,6 +58,10 @@ PaError PaSkeleton_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiI + + PaUtilHostApiInitializer *paHostApiInitializers[] = + { ++#ifdef PA_USE_SNDIO ++ PaSndio_Initialize, ++#endif ++ + #ifdef __linux__ + + #if PA_USE_ALSA +-- +2.27.0 + diff --git a/portmidi/PKGBUILD b/portmidi/PKGBUILD new file mode 100644 index 0000000..3556b07 --- /dev/null +++ b/portmidi/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=portmidi +pkgver=217 +_debver=217 +_debrel=6 +pkgrel=2 +pkgdesc="Platform independent library for real-time MIDI input/output" +arch=('i686' 'x86_64') +url="http://portmedia.sourceforge.net/" +license=('Expat') +depends=('alsa-lib' 'libsndio') +makedepends=('cmake' 'quilt') +optdepends=('sndio: audio and MIDI server') +options=('!makeflags') +source=(https://deb.debian.org/debian/pool/main/p/portmidi/portmidi_$pkgver.orig.tar.gz + https://deb.debian.org/debian/pool/main/p/portmidi/portmidi_$_debver-$_debrel.debian.tar.xz + remove-java-support.patch + sndio.patch) +sha512sums=('ae534b5e9128b586044ce4ac2625d1763fa5abacacac7eb36ba050309c282de453ab403499ca13fd02e1e2fff18f1a3932b78063bc28c37c69f2b45905b4c78e' + '0fedc8115e42954eff090ba545903070188adbb882e7d3ef9c4918ca8daef19292419f970cb35e52530b79cea1e00a73a99d9ed0a78dcd673307511be4891f48' + '75219a938ecabc03999af4639bce4b8ded77d267cbb08fa308f74d684047445b27e1c30e1fd96038df1ad6768ad36530b15415bf41603bb9f92921ae1bb05122' + 'a6ec49a1dd472d3cbfe00a5606744e4c2a7d05c0b17f65af6724bd303acbe405b8db38c51fb95feb459de839f6584c97e9c24536f1e01472fff35836764c7bfc') + +prepare() { + cd ${pkgname} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/13-disablejni.patch || true + + quilt push -av + fi + patch -p1 -i ../remove-java-support.patch + patch -p1 -i ../sndio.patch +} + +build() { + cd ${pkgname} + cmake . -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=Release \ + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=Release \ + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=Release + make +} + +package() { + cd ${pkgname} + make DESTDIR="${pkgdir}" install + + install -Dm644 license.txt "${pkgdir}/usr/lib/licenses/${pkgname}/license.txt" +} diff --git a/portmidi/remove-java-support.patch b/portmidi/remove-java-support.patch new file mode 100644 index 0000000..8859bcd --- /dev/null +++ b/portmidi/remove-java-support.patch @@ -0,0 +1,87 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4919b78..d4b5ec2 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -72,6 +72,3 @@ add_subdirectory(pm_test) + + add_subdirectory(pm_dylib) + +-# Cannot figure out how to make an xcode Java application with CMake +-add_subdirectory(pm_java) +- +diff --git a/pm_common/CMakeLists.txt b/pm_common/CMakeLists.txt +index e171047..421a68c 100644 +--- a/pm_common/CMakeLists.txt ++++ b/pm_common/CMakeLists.txt +@@ -66,15 +66,6 @@ if(UNIX) + set(JAVA_INCLUDE_PATHS ${JAVAVM_LIB}/Headers) + message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT}) + else(APPLE) +- # LINUX settings... +- include(FindJNI) +- message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH}) +- message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH}) +- message(STATUS "JAVA_INCLUDE_PATH2 is " ${JAVA_INCLUDE_PATH2}) +- message(STATUS "JAVA_JVM_LIBRARY is " ${JAVA_JVM_LIBRARY}) +- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2}) +- # libjvm.so is found relative to JAVA_INCLUDE_PATH: +- set(JAVAVM_LIB ${JAVA_JVM_LIBRARY}/libjvm.so) + + set(LINUXSRC pmlinuxalsa pmlinux finddefault) + prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC}) +@@ -99,7 +90,6 @@ else(UNIX) + set(PM_NEEDED_LIBS winmm.lib) + endif(WIN32) + endif(UNIX) +-set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVA_JVM_LIBRARY}) + + # this completes the list of library sources by adding shared code + list(APPEND LIBSRC pmutil portmidi) +@@ -109,17 +99,10 @@ add_library(portmidi-static ${LIBSRC}) + set_target_properties(portmidi-static PROPERTIES OUTPUT_NAME "portmidi_s") + target_link_libraries(portmidi-static ${PM_NEEDED_LIBS}) + +-# define the jni library +-include_directories(${JAVA_INCLUDE_PATHS}) +- +-set(JNISRC ${LIBSRC} ../pm_java/pmjni/pmjni.c) +-add_library(pmjni SHARED ${JNISRC}) +-target_link_libraries(pmjni ${JNI_EXTRA_LIBS}) +-set_target_properties(pmjni PROPERTIES EXECUTABLE_EXTENSION "jnilib") + + # install the libraries (Linux and Mac OS X command line) + if(UNIX) +- INSTALL(TARGETS portmidi-static pmjni ++ INSTALL(TARGETS portmidi-static + LIBRARY DESTINATION /usr/local/lib + ARCHIVE DESTINATION /usr/local/lib) + # .h files installed by pm_dylib/CMakeLists.txt, so don't need them here +diff --git a/pm_dylib/CMakeLists.txt b/pm_dylib/CMakeLists.txt +index f693dd6..fcadf1d 100644 +--- a/pm_dylib/CMakeLists.txt ++++ b/pm_dylib/CMakeLists.txt +@@ -63,24 +63,6 @@ if(UNIX) + message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT}) + else(APPLE) + # LINUX settings... +- include(FindJNI) +- # message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH}) +- # message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH}) +- # note: should use JAVA_JVM_LIB_PATH, but it is not set properly +- # note: user might need to set JAVA_INCLUDE_PATH manually +- # +- # this will probably break on BSD and other Unix systems; the fix +- # depends on whether FindJNI can find Java or not. If yes, then +- # we should try to rely on automatically set JAVA_INCLUDE_PATH and +- # JAVA_INCLUDE_PATH2; if no, then we need to make both JAVA_INCLUDE_PATH +- # and JAVA_INCLUDE_PATH2 set by user (will need clear documentation +- # because JAVA_INCLUDE_PATH2 is pretty obscure) +- set(JAVA_INCLUDE_PATH ${JAVA_INCLUDE_PATH-UNKNOWN} +- CACHE STRING "where to find Java SDK include directory") +- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/linux) +- # libjvm.so is found relative to JAVA_INCLUDE_PATH: +- set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../jre/lib/i386/client/libjvm.so) +- + set(LINUXSRC pmlinuxalsa pmlinux finddefault) + prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC}) + list(APPEND LIBSRC ../porttime/ptlinux) diff --git a/portmidi/sndio.patch b/portmidi/sndio.patch new file mode 100644 index 0000000..b39e4ef --- /dev/null +++ b/portmidi/sndio.patch @@ -0,0 +1,419 @@ +diff --git a/pm_common/CMakeLists.txt b/pm_common/CMakeLists.txt +index 421a68c..c7d1636 100644 +--- a/pm_common/CMakeLists.txt ++++ b/pm_common/CMakeLists.txt +@@ -70,8 +70,11 @@ if(UNIX) + set(LINUXSRC pmlinuxalsa pmlinux finddefault) + prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC}) + list(APPEND LIBSRC ../porttime/ptlinux) ++ set(SNDIOSRC pmsndio) ++ prepend_path(LIBSRC ../pm_sndio/ ${SNDIOSRC}) ++ list(APPEND LIBSRC ../porttime/ptlinux) + +- set(PM_NEEDED_LIBS pthread asound) ++ set(PM_NEEDED_LIBS pthread asound sndio) + endif(APPLE) + else(UNIX) + if(WIN32) +diff --git a/pm_dylib/CMakeLists.txt b/pm_dylib/CMakeLists.txt +index fcadf1d..79ecb82 100644 +--- a/pm_dylib/CMakeLists.txt ++++ b/pm_dylib/CMakeLists.txt +@@ -66,8 +66,11 @@ if(UNIX) + set(LINUXSRC pmlinuxalsa pmlinux finddefault) + prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC}) + list(APPEND LIBSRC ../porttime/ptlinux) ++ set(SNDIOSRC pmsndio) ++ prepend_path(LIBSRC ../pm_sndio/ ${SNDIOSRC}) ++ list(APPEND LIBSRC ../porttime/ptlinux) + +- set(PM_NEEDED_LIBS pthread asound) ++ set(PM_NEEDED_LIBS pthread asound sndio) + endif(APPLE) + else(UNIX) + if(WIN32) +diff --git b/pm_sndio/pmsndio.c b/pm_sndio/pmsndio.c +new file mode 100644 +index 0000000..7cfb330 +--- /dev/null ++++ b/pm_sndio/pmsndio.c +@@ -0,0 +1,368 @@ ++/* pmsndio.c -- PortMidi os-dependent code */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "portmidi.h" ++#include "pmutil.h" ++#include "pminternal.h" ++#include "porttime.h" ++ ++#define NDEVS 9 ++#define SYSEX_MAXLEN 1024 ++ ++#define SYSEX_START 0xf0 ++#define SYSEX_END 0xf7 ++ ++PmDeviceID pm_default_input_device_id = -1; ++PmDeviceID pm_default_output_device_id = -1; ++ ++extern pm_fns_node pm_sndio_in_dictionary; ++extern pm_fns_node pm_sndio_out_dictionary; ++ ++/* length of voice and common messages (status byte included) */ ++unsigned int voice_len[] = { 3, 3, 3, 3, 2, 2, 3 }; ++unsigned int common_len[] = { 0, 2, 3, 2, 0, 0, 1, 1 }; ++ ++struct mio_dev { ++ char name[16]; ++ struct mio_hdl *hdl; ++ int mode; ++ char errmsg[PM_HOST_ERROR_MSG_LEN]; ++ pthread_t thread; ++} devs[NDEVS]; ++ ++static void set_mode(struct mio_dev *, unsigned int); ++ ++void pm_init() ++{ ++ int i, j, k = 0; ++ char devices[][16] = {"midithru", "rmidi", "midi", "snd"}; ++ ++ /* default */ ++ strcpy(devs[0].name, MIO_PORTANY); ++ pm_add_device("SNDIO", devs[k].name, TRUE, (void *) &devs[k], ++ &pm_sndio_in_dictionary); ++ pm_add_device("SNDIO", devs[k].name, FALSE, (void *) &devs[k], ++ &pm_sndio_out_dictionary); ++ k++; ++ ++ for (i = 0; i < 4; i++) { ++ for (j = 0; j < 2; j++) { ++ sprintf(devs[k].name, "%s/%d", devices[i], j); ++ pm_add_device("SNDIO", devs[k].name, TRUE, (void *) &devs[k], ++ &pm_sndio_in_dictionary); ++ pm_add_device("SNDIO", devs[k].name, FALSE, (void *) &devs[k], ++ &pm_sndio_out_dictionary); ++ k++; ++ } ++ } ++ ++ // this is set when we return to Pm_Initialize, but we need it ++ // now in order to (successfully) call Pm_CountDevices() ++ pm_initialized = TRUE; ++ pm_default_input_device_id = 0; ++ pm_default_output_device_id = 1; ++} ++ ++void pm_term(void) ++{ ++ int i; ++ for(i = 0; i < NDEVS; i++) { ++ if (devs[i].mode != 0) { ++ set_mode(&devs[i], 0); ++ if (devs[i].thread) { ++ pthread_join(devs[i].thread, NULL); ++ devs[i].thread = NULL; ++ } ++ } ++ } ++} ++ ++PmDeviceID Pm_GetDefaultInputDeviceID() { ++ Pm_Initialize(); ++ return pm_default_input_device_id; ++} ++ ++PmDeviceID Pm_GetDefaultOutputDeviceID() { ++ Pm_Initialize(); ++ return pm_default_output_device_id; ++} ++ ++void *pm_alloc(size_t s) { return malloc(s); } ++ ++void pm_free(void *ptr) { free(ptr); } ++ ++/* midi_message_length -- how many bytes in a message? */ ++static int midi_message_length(PmMessage message) ++{ ++ unsigned char st = message & 0xff; ++ if (st >= 0xf8) ++ return 1; ++ else if (st >= 0xf0) ++ return common_len[st & 7]; ++ else if (st >= 0x80) ++ return voice_len[(st >> 4) & 7]; ++ else ++ return 0; ++} ++ ++void* input_thread(void *param) ++{ ++ PmInternal *midi = (PmInternal*)param; ++ struct mio_dev *dev = (struct mio_dev *) midi->descriptor; ++ struct pollfd pfd[1]; ++ nfds_t nfds; ++ unsigned char st = 0, c = 0; ++ int rc, revents, idx = 0, len = 0; ++ size_t todo = 0; ++ unsigned char buf[0x200], *p; ++ PmEvent pm_ev, pm_ev_rt; ++ unsigned char sysex_data[SYSEX_MAXLEN]; ++ ++ while(dev->mode & MIO_IN) { ++ if (todo == 0) { ++ nfds = mio_pollfd(dev->hdl, pfd, POLLIN); ++ rc = poll(pfd, nfds, 100); ++ if (rc < 0) { ++ if (errno == EINTR) ++ continue; ++ break; ++ } ++ revents = mio_revents(dev->hdl, pfd); ++ if (!(revents & POLLIN)) ++ continue; ++ ++ todo = mio_read(dev->hdl, buf, sizeof(buf)); ++ if (todo == 0) ++ continue; ++ p = buf; ++ } ++ c = *p++; ++ todo--; ++ ++ if (c >= 0xf8) { ++ pm_ev_rt.message = c; ++ pm_ev_rt.timestamp = Pt_Time(); ++ pm_read_short(midi, &pm_ev_rt); ++ } else if (c == SYSEX_END) { ++ if (st == SYSEX_START) { ++ sysex_data[idx++] = c; ++ pm_read_bytes(midi, sysex_data, idx, Pt_Time()); ++ } ++ st = 0; ++ idx = 0; ++ } else if (c == SYSEX_START) { ++ st = c; ++ idx = 0; ++ sysex_data[idx++] = c; ++ } else if (c >= 0xf0) { ++ pm_ev.message = c; ++ len = common_len[c & 7]; ++ st = c; ++ idx = 1; ++ } else if (c >= 0x80) { ++ pm_ev.message = c; ++ len = voice_len[(c >> 4) & 7]; ++ st = c; ++ idx = 1; ++ } else if (st == SYSEX_START) { ++ if (idx == SYSEX_MAXLEN) { ++ fprintf(stderr, "the message is too long\n"); ++ idx = st = 0; ++ } else { ++ sysex_data[idx++] = c; ++ } ++ } else if (st) { ++ if (idx == 0 && st != SYSEX_START) ++ pm_ev.message |= (c << (8 * idx++)); ++ pm_ev.message |= (c << (8 * idx++)); ++ if (idx == len) { ++ pm_read_short(midi, &pm_ev); ++ if (st >= 0xf0) ++ st = 0; ++ idx = 0; ++ } ++ } ++ } ++ ++ pthread_exit(NULL); ++ return NULL; ++} ++ ++static void set_mode(struct mio_dev *dev, unsigned int mode) { ++ if (dev->mode != 0) ++ mio_close(dev->hdl); ++ dev->mode = 0; ++ if (mode != 0) ++ dev->hdl = mio_open(dev->name, mode, 0); ++ if (dev->hdl) ++ dev->mode = mode; ++} ++ ++static PmError sndio_out_open(PmInternal *midi, void *driverInfo) ++{ ++ descriptor_type desc = &descriptors[midi->device_id]; ++ struct mio_dev *dev = (struct mio_dev *) desc->descriptor; ++ ++ if (dev->mode & MIO_OUT) ++ return pmNoError; ++ ++ set_mode(dev, dev->mode | MIO_OUT); ++ if (!(dev->mode & MIO_OUT)) { ++ snprintf(dev->errmsg, PM_HOST_ERROR_MSG_LEN, ++ "mio_open (output) failed: %s\n", dev->name); ++ return pmHostError; ++ } ++ ++ midi->descriptor = (void *)dev; ++ return pmNoError; ++} ++ ++static PmError sndio_in_open(PmInternal *midi, void *driverInfo) ++{ ++ descriptor_type desc = &descriptors[midi->device_id]; ++ struct mio_dev *dev = (struct mio_dev *) desc->descriptor; ++ ++ if (dev->mode & MIO_IN) ++ return pmNoError; ++ ++ set_mode(dev, dev->mode | MIO_IN); ++ if (!(dev->mode & MIO_IN)) { ++ snprintf(dev->errmsg, PM_HOST_ERROR_MSG_LEN, ++ "mio_open (input) failed: %s\n", dev->name); ++ return pmHostError; ++ } ++ midi->descriptor = (void *)dev; ++ pthread_attr_t attr; ++ pthread_attr_init(&attr); ++ pthread_create(&dev->thread, &attr, input_thread, ( void* )midi); ++ return pmNoError; ++} ++ ++static PmError sndio_out_close(PmInternal *midi) ++{ ++ struct mio_dev *dev = (struct mio_dev *) midi->descriptor; ++ ++ if (dev->mode & MIO_OUT) ++ set_mode(dev, dev->mode & ~MIO_OUT); ++ return pmNoError; ++} ++ ++static PmError sndio_in_close(PmInternal *midi) ++{ ++ struct mio_dev *dev = (struct mio_dev *) midi->descriptor; ++ ++ if (dev->mode & MIO_IN) { ++ set_mode(dev, dev->mode & ~MIO_IN); ++ pthread_join(dev->thread, NULL); ++ dev->thread = NULL; ++ } ++ return pmNoError; ++} ++ ++static PmError sndio_abort(PmInternal *midi) ++{ ++ return pmNoError; ++} ++ ++static PmTimestamp sndio_synchronize(PmInternal *midi) ++{ ++ return 0; ++} ++ ++static PmError do_write(struct mio_dev *dev, const void *addr, size_t nbytes) ++{ ++ size_t w = mio_write(dev->hdl, addr, nbytes); ++ ++ if (w != nbytes) { ++ snprintf(dev->errmsg, PM_HOST_ERROR_MSG_LEN, ++ "mio_write failed, bytes written:%zu\n", w); ++ return pmHostError; ++ } ++ return pmNoError; ++} ++ ++static PmError sndio_write_byte(PmInternal *midi, unsigned char byte, ++ PmTimestamp timestamp) ++{ ++ struct mio_dev *dev = (struct mio_dev *) midi->descriptor; ++ ++ return do_write(dev, &byte, 1); ++} ++ ++static PmError sndio_write_short(PmInternal *midi, PmEvent *event) ++{ ++ struct mio_dev *dev = (struct mio_dev *) midi->descriptor; ++ int nbytes = midi_message_length(event->message); ++ ++ if (midi->latency > 0) { ++ /* XXX the event should be queued for later playback */ ++ return do_write(dev, &event->message, nbytes); ++ } else { ++ return do_write(dev, &event->message, nbytes); ++ } ++ return pmNoError; ++} ++ ++static PmError sndio_write_flush(PmInternal *midi, PmTimestamp timestamp) ++{ ++ return pmNoError; ++} ++ ++PmError sndio_sysex(PmInternal *midi, PmTimestamp timestamp) ++{ ++ return pmNoError; ++} ++ ++static unsigned int sndio_has_host_error(PmInternal *midi) ++{ ++ struct mio_dev *dev = (struct mio_dev *) midi->descriptor; ++ ++ return (dev->errmsg[0] != '\0'); ++} ++ ++static void sndio_get_host_error(PmInternal *midi, char *msg, unsigned int len) ++{ ++ struct mio_dev *dev = (struct mio_dev *) midi->descriptor; ++ ++ strlcpy(msg, dev->errmsg, len); ++ dev->errmsg[0] = '\0'; ++} ++ ++pm_fns_node pm_sndio_in_dictionary = { ++ none_write_short, ++ none_sysex, ++ none_sysex, ++ none_write_byte, ++ none_write_short, ++ none_write_flush, ++ sndio_synchronize, ++ sndio_in_open, ++ sndio_abort, ++ sndio_in_close, ++ success_poll, ++ sndio_has_host_error, ++ sndio_get_host_error ++}; ++ ++pm_fns_node pm_sndio_out_dictionary = { ++ sndio_write_short, ++ sndio_sysex, ++ sndio_sysex, ++ sndio_write_byte, ++ sndio_write_short, ++ sndio_write_flush, ++ sndio_synchronize, ++ sndio_out_open, ++ sndio_abort, ++ sndio_out_close, ++ none_poll, ++ sndio_has_host_error, ++ sndio_get_host_error ++}; ++ +diff --git b/pm_sndio/pmsndio.h b/pm_sndio/pmsndio.h +new file mode 100644 +index 0000000..4096d9b +--- /dev/null ++++ b/pm_sndio/pmsndio.h +@@ -0,0 +1,5 @@ ++/* pmsndio.h */ ++ ++extern PmDeviceID pm_default_input_device_id; ++extern PmDeviceID pm_default_output_device_id; ++ diff --git a/portsmf/PKGBUILD b/portsmf/PKGBUILD new file mode 100644 index 0000000..5f70ff8 --- /dev/null +++ b/portsmf/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=portsmf +pkgver=0.1 +_debver=0.1 +_debpkg=~svn20101010 +_debrel=5 +pkgrel=1 +pkgdesc='Portable library for reading/writing Standard MIDI Files' +arch=('i686' 'x86_64') +url='https://sourceforge.net/p/portmedia/wiki/portsmf/' +license=('Expat') +depends=('gcc-libs' 'glibc') +makedepends=('quilt') +options=('!staticlibs') +source=("https://deb.debian.org/debian/pool/main/p/portsmf/${pkgname}_${pkgver}${_debpkg}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/p/portsmf/portsmf_${_debver}${_debpkg}-${_debrel}.debian.tar.xz") +sha512sums=('51d27c238241de19cfb4f3230dacaee8335b77b7b7a48f8a68f85edddcf2da94bd64e3a122487ae50ed9113e14f9db1df43482758a4814c8ddd1c79d38f1666d' + 'c65b8b0d8ac0666b2c1784ce8d4e05f0d129d0cef2b7171a6cf4263c419ccf81f99b0b7c8998c1217549e3eff37bd81fea0b498945ca3e7c1a4934f99c75a2ff') + +prepare() { + mv ${pkgname}-${pkgver}${_debpkg} ${pkgname}-${pkgver} + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + autoreconf -vfi + chmod 755 configure +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --libdir=/usr/lib \ + --includedir=/usr/include/portsmf + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" includedir=/usr/include/portsmf install + install -vDm 644 portSMF.pc -t "${pkgdir}/usr/lib/pkgconfig/" + install -vDm 644 license.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 README.txt -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/postfix-policyd-spf-perl/PKGBUILD b/postfix-policyd-spf-perl/PKGBUILD new file mode 100644 index 0000000..419d317 --- /dev/null +++ b/postfix-policyd-spf-perl/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=postfix-policyd-spf-perl +pkgver=2.011 +pkgrel=1 +pkgdesc="Postfix SPF policy engine, written in Perl" +arch=('i686' 'x86_64') +url='https://launchpad.net/postfix-policyd-spf-perl/' +license=('GPL-2') +depends=('perl-mail-spf' 'perl-netaddr-ip' 'perl-sys-hostname-long') +source=("https://launchpad.net/postfix-policyd-spf-perl/trunk/${pkgver}/+download/${pkgname}-${pkgver}.tar.gz"{,.asc}) +sha512sums=('22fc00bf74912056a67e937a460ac1fd878f1cb1a3bfa7b19bc5f1e6bc1c36d815dcf8c945e818d242ed5e72a6295bb0e1569446e06b09aefb2842993b8016ba' + 'SKIP') +validpgpkeys=(E7729BFFBE85400FEEEE23B178D7DEFB9AD59AF1) # Scott Kitterman + +package() { + cd "${pkgname}-${pkgver}" + + install -Dm755 "${pkgname}" "${pkgdir}/usr/libexec/postfix/${pkgname}" + install -Dm644 CHANGES INSTALL README -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/postfix/PKGBUILD b/postfix/PKGBUILD new file mode 100644 index 0000000..46fad5c --- /dev/null +++ b/postfix/PKGBUILD @@ -0,0 +1,137 @@ +# Maintainer: Jesus E. + +pkgname=postfix +pkgver=3.5.13 +_debver=$pkgver +_debrel=0 +pkgrel=3 +pkgdesc="Fast, easy to administer, secure mail server" +license=('IPL-1.0') +arch=('i686' 'x86_64') +url='http://www.postfix.org/' +depends=('libressl' 'pcre' 'icu' 'libsasl' 'libldap' 'db' 'libnsl' 'postgresql-libs' 'sqlite' 'tinycdb') +makedepends=('quilt') +optdepends=('logger: message logging support') +source=("https://archive.mgm51.com/mirrors/postfix-source/official/${pkgname}-${pkgver}.tar.gz" + "https://repo.hyperbola.info:50000/sources/${pkgname}/postfix_${_debver}-${_debrel}+deb11u1.debian.tar.xz"{,.sig} + "aliases.patch" + "libressl.patch" + "postfix.initd" + "postfix.run") +sha512sums=('47aee05f92fca387533132f5227b82fbab4700f9bc3512a17abee1c3aeb2e54ce5a964189774c14489a99c5b53ef606d8d3f5aac44f32739265c1be47bd4a24c' + 'bac745840ce5cffe9243aba71df4506e54910377025aeeb29db9c6b32ff88cee96caeace110c1eb69859c4888865929b73f11416227abf08c546bcc48945f7c4' + 'SKIP' + '630cd85be341fbd82c5202fdfd6c3b1df906c0b77cff43ae44f665451d7ddc99e6a20a755ed970fff60d93ccbb3139ea28495f0b281232e8a97218319156a57f' + '1acedf7558b39f78943368c88ae551988a228ded81d37fd58160b6cbe665e1cc94a2abebad80fb0f15ca4a9cbbb8a5e0d880e36103a400789586095855a96b0c' + '2ad1b053bbb51d4f480dbf5a01252e8e99a82ec14a75ff49336b2b190ea55bc02400542b109fa0cc4ebfe6b42eaabbc45f70f2ea581f1eb9c4189c439b825592' + '8a7afca85aa864eeff052751a72cd81e094db188c689f5361d6acbf429bdbb2fbdcec95a743de9054dbe13e101b66e5d1047e6393bd3bafcbd40a4cffaa30563') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +backup=('etc/postfix/'{access,aliases,canonical,generic,header_checks,main.cf,master.cf,relocated,transport,virtual}) + +conflicts=('smtp-server' 'smtp-forwarder' 'postfix-tools') +provides=('smtp-server' 'smtp-forwarder' 'postfix-tools') +replaces=('postfix-tools') + +install=postfix.install + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/02_kfreebsd_support.diff || true + rm -v debian/patches/03_ldap3_by_default.diff || true + rm -v debian/patches/05_debian_defaults.diff || true + rm -v debian/patches/05_debian_manpage_differences.diff || true + rm -v debian/patches/05_debian_readme_differences.diff || true + rm -v debian/patches/06_debian_paths.diff || true + rm -v debian/patches/07_sasl_config.diff || true + rm -v debian/patches/10_openssl_version_check.diff || true + rm -v debian/patches/30_shared_libs.diff || true + + quilt push -av + fi + + patch -Np1 -i "${srcdir}/libressl.patch" +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + CCARGS=' + -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl + -DHAS_LDAP + -DUSE_TLS + -DHAS_PGSQL -I/usr/include/postgresql + -DHAS_SQLITE + -DHAS_CDB + -DDEF_COMMAND_DIR=\"/usr/sbin\" + -DDEF_DAEMON_DIR=\"/usr/libexec/postfix\" + -DDEF_SENDMAIL_PATH=\"/usr/sbin/sendmail\" + -DDEF_README_DIR=\"/usr/share/doc/postfix\" + -DDEF_MANPAGE_DIR=\"/usr/share/man\" + ' + AUXLIBS=' + -lsasl2 + -lldap -llber + -lssl -lcrypto + -lz -lm + -lpq + -lsqlite3 -lpthread + -lcdb + ' + make makefiles \ + DEBUG='' \ + pie=yes \ + shared=yes \ + CCARGS="${CCARGS//$'\n'/}" \ + AUXLIBS="${AUXLIBS//$'\n'/}" \ + OPT="${CFLAGS} ${LDFLAGS}" + + make +} + +package() { + cd "${srcdir}/postfix-${pkgver}" + + sed 's:bin/postconf -dhx:bin/postconf -c conf -dhx:g' -i postfix-install + LD_LIBRARY_PATH=lib:$LD_LIBRARY_PATH \ + sh postfix-install -non-interactive install_root="${pkgdir}" + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm755 "${srcdir}/${pkgname}.initd" "${pkgdir}/etc/init.d/${pkgname}" + install -Dm755 "${srcdir}/${pkgname}.run" "${pkgdir}/etc/sv/${pkgname}/run" + + for name in posttls-finger {smtp,qmqp}-{sink,source}; do + install -Dm644 "man/man1/${name}.1" "${pkgdir}/usr/share/man/man1/${name}.1" + install -Dm755 "bin/${name}" "${pkgdir}/usr/sbin/${name}" + done + + # now set permissions right + sed -r \ + -e '/override=1/d' \ + -e '/absolute path name/d' \ + -e 's/\$POSTCONF -/$POSTCONF -c .\/etc\/postfix -/g' \ + -e '/(if \[|chmod|chown|find|mkdir|test)/s/\$path/.\/$path/g' \ + libexec/post-install > ../hyperbola-post-install + cd "${pkgdir}" + LD_LIBRARY_PATH=usr/lib/postfix:$LD_LIBRARY_PATH \ + sh "${srcdir}/hyperbola-post-install" \ + command_directory=usr/sbin \ + config_directory=etc/postfix \ + meta_directory=etc/postfix \ + setgid_group=75 \ + mail_owner=73 \ + set-permissions + + patch --no-backup-if-mismatch -p1 -i "${srcdir}"/aliases.patch + sed 's/^\(\$manpage[^:]*\):/\1.gz:/' -i "etc/postfix/postfix-files" +} diff --git a/postfix/aliases.patch b/postfix/aliases.patch new file mode 100644 index 0000000..80e7fa7 --- /dev/null +++ b/postfix/aliases.patch @@ -0,0 +1,20 @@ +diff --git a/etc/postfix/main.cf b/etc/postfix/main.cf +index 60f33af8..f0f53b61 100644 +--- a/etc/postfix/main.cf ++++ b/etc/postfix/main.cf +@@ -401,6 +401,7 @@ unknown_local_recipient_reject_code = 550 + #alias_maps = hash:/etc/aliases + #alias_maps = hash:/etc/aliases, nis:mail.aliases + #alias_maps = netinfo:/aliases ++alias_maps = hash:/etc/postfix/aliases + + # The alias_database parameter specifies the alias database(s) that + # are built with "newaliases" or "sendmail -bi". This is a separate +@@ -411,6 +412,7 @@ unknown_local_recipient_reject_code = 550 + #alias_database = dbm:/etc/mail/aliases + #alias_database = hash:/etc/aliases + #alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases ++alias_database = $alias_maps + + # ADDRESS EXTENSIONS (e.g., user+foo) + # diff --git a/postfix/libressl.patch b/postfix/libressl.patch new file mode 100644 index 0000000..cafb11f --- /dev/null +++ b/postfix/libressl.patch @@ -0,0 +1,233 @@ +diff --git a/src/global/mail_params.h b/src/global/mail_params.h +index a6119f1b..e437b9cd 100644 +--- a/src/global/mail_params.h ++++ b/src/global/mail_params.h +@@ -19,7 +19,7 @@ typedef int bool; + #ifdef USE_TLS + #include /* OPENSSL_VERSION_NUMBER */ + #include /* SN_* and NID_* macros */ +-#if OPENSSL_VERSION_NUMBER < 0x1000200fUL ++#if OPENSSL_VERSION_NUMBER < 0x1010101fUL && !defined(LIBRESSL_VERSION_NUMBER) + #error "OpenSSL releases prior to 1.0.2 are no longer supported" + #endif + #endif +diff --git a/src/posttls-finger/posttls-finger.c b/src/posttls-finger/posttls-finger.c +index c142d43f..ee894327 100644 +--- a/src/posttls-finger/posttls-finger.c ++++ b/src/posttls-finger/posttls-finger.c +@@ -1673,7 +1673,8 @@ static int finger(STATE *state) + return (0); + } + +-#if defined(USE_TLS) && OPENSSL_VERSION_NUMBER < 0x10100000L ++#if defined(USE_TLS) && \ ++ ( OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) ) + + /* ssl_cleanup - free memory allocated in the OpenSSL library */ + +@@ -2156,7 +2157,8 @@ int main(int argc, char *argv[]) + cleanup(&state); + + /* OpenSSL 1.1.0 and later (de)initialization is implicit */ +-#if defined(USE_TLS) && OPENSSL_VERSION_NUMBER < 0x10100000L ++#if defined(USE_TLS) && \ ++ ( OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) ) + ssl_cleanup(); + #endif + +diff --git a/src/tls/tls.h b/src/tls/tls.h +index 2a8cc119..4c8dff11 100644 +--- a/src/tls/tls.h ++++ b/src/tls/tls.h +@@ -84,12 +84,12 @@ extern const char *str_tls_level(int); + #define ssl_cipher_stack_t STACK_OF(SSL_CIPHER) + #define ssl_comp_stack_t STACK_OF(SSL_COMP) + +-#if (OPENSSL_VERSION_NUMBER < 0x1000200fUL) ++#if (OPENSSL_VERSION_NUMBER < 0x1000200fUL && !defined(LIBRESSL_VERSION_NUMBER)) + #error "OpenSSL releases prior to 1.0.2 are no longer supported" + #endif + + /* Backwards compatibility with OpenSSL < 1.1.0 */ +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + #define OpenSSL_version_num SSLeay + #define OpenSSL_version SSLeay_version + #define OPENSSL_VERSION SSLEAY_VERSION +@@ -106,13 +106,16 @@ extern const char *str_tls_level(int); + #define ASN1_STRING_get0_data ASN1_STRING_data + #define X509_getm_notBefore X509_get_notBefore + #define X509_getm_notAfter X509_get_notAfter ++#endif ++ ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + #define TLS_method SSLv23_method + #define TLS_client_method SSLv23_client_method + #define TLS_server_method SSLv23_server_method + #endif + + /* Backwards compatibility with OpenSSL < 1.1.1 */ +-#if OPENSSL_VERSION_NUMBER < 0x1010100fUL ++#if OPENSSL_VERSION_NUMBER < 0x1010100fUL || defined(LIBRESSL_VERSION_NUMBER) + #define SSL_CTX_set_num_tickets(ctx, num) ((void)0) + #endif + +@@ -124,7 +127,7 @@ extern const char *str_tls_level(int); + * SSL_get_peer_tmp_key(), with the original name left behind as an alias. We + * use the new name when available. + */ +-#if OPENSSL_VERSION_NUMBER < 0x1010101fUL ++#if OPENSSL_VERSION_NUMBER < 0x1010101fUL || defined(LIBRESSL_VERSION_NUMBER) + #undef SSL_get_signature_nid + #define SSL_get_signature_nid(ssl, pnid) (NID_undef) + #define tls_get_peer_dh_pubkey SSL_get_server_tmp_key +diff --git a/src/tls/tls_certkey.c b/src/tls/tls_certkey.c +index be8d4700..27a039c0 100644 +--- a/src/tls/tls_certkey.c ++++ b/src/tls/tls_certkey.c +@@ -149,7 +149,7 @@ static void init_pem_load_state(pem_load_state_t *st, SSL_CTX *ctx, SSL *ssl, + + /* use_chain - load cert, key and chain into ctx or ssl */ + +-#if OPENSSL_VERSION_NUMBER >= 0x1010100fUL ++#if OPENSSL_VERSION_NUMBER >= 0x1010100fUL && !defined(LIBRESSL_VERSION_NUMBER) + static int use_chain(pem_load_state_t *st) + { + int ret; +@@ -697,7 +697,7 @@ int main(int argc, char *argv[]) + char *key_file = 0; + SSL_CTX *ctx; + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + /* + * Initialize the OpenSSL library by the book! To start with, we must +diff --git a/src/tls/tls_client.c b/src/tls/tls_client.c +index 135cea4b..955c5340 100644 +--- a/src/tls/tls_client.c ++++ b/src/tls/tls_client.c +@@ -333,7 +333,7 @@ TLS_APPL_STATE *tls_client_init(const TLS_CLIENT_INIT_PROPS *props) + */ + tls_check_version(); + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + /* + * Initialize the OpenSSL library by the book! To start with, we must +@@ -410,7 +410,7 @@ TLS_APPL_STATE *tls_client_init(const TLS_CLIENT_INIT_PROPS *props) + SSL_CTX_set_options(client_ctx, off); + + /* Enable all supported protocols */ +-#if OPENSSL_VERSION_NUMBER >= 0x1010000fUL ++#if OPENSSL_VERSION_NUMBER >= 0x1010000fUL && !defined(LIBRESSL_VERSION_NUMBER) + SSL_CTX_set_min_proto_version(client_ctx, 0); + #endif + +@@ -473,7 +473,7 @@ TLS_APPL_STATE *tls_client_init(const TLS_CLIENT_INIT_PROPS *props) + /* + * 2015-12-05: Ephemeral RSA removed from OpenSSL 1.1.0-dev + */ +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + /* + * According to the OpenSSL documentation, temporary RSA key is needed +diff --git a/src/tls/tls_dane.c b/src/tls/tls_dane.c +index 013426b1..5cbb74e3 100644 +--- a/src/tls/tls_dane.c ++++ b/src/tls/tls_dane.c +@@ -2006,7 +2006,7 @@ static SSL_CTX *ctx_init(const char *CAfile) + tls_param_init(); + tls_check_version(); + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + SSL_load_error_strings(); + SSL_library_init(); + #endif +diff --git a/src/tls/tls_dh.c b/src/tls/tls_dh.c +index 70db8e9d..727e3a80 100644 +--- a/src/tls/tls_dh.c ++++ b/src/tls/tls_dh.c +@@ -314,7 +314,7 @@ void tls_auto_eecdh_curves(SSL_CTX *ctx, const char *configured) + * This is a NOP in OpenSSL 1.1.0 and later, where curves are always + * auto-negotiated. + */ +-#if OPENSSL_VERSION_NUMBER < 0x10100000UL ++#if OPENSSL_VERSION_NUMBER < 0x10100000UL || defined(LIBRESSL_VERSION_NUMBER) + if (SSL_CTX_set_ecdh_auto(ctx, 1) <= 0) { + msg_warn("failed to enable automatic ECDHE curve selection"); + tls_print_errors(); +diff --git a/src/tls/tls_rsa.c b/src/tls/tls_rsa.c +index 67f2a2ee..c6a759e8 100644 +--- a/src/tls/tls_rsa.c ++++ b/src/tls/tls_rsa.c +@@ -57,7 +57,7 @@ + /* + * 2015-12-05: Ephemeral RSA removed from OpenSSL 1.1.0-dev + */ +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + /* tls_tmp_rsa_cb - call-back to generate ephemeral RSA key */ + +@@ -103,7 +103,7 @@ int main(int unused_argc, char *const argv[]) + /* + * 2015-12-05: Ephemeral RSA removed from OpenSSL 1.1.0-dev + */ +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + RSA *rsa; + + msg_vstream_init(argv[0], VSTREAM_ERR); +diff --git a/src/tls/tls_server.c b/src/tls/tls_server.c +index 25d85ec7..b134d50d 100644 +--- a/src/tls/tls_server.c ++++ b/src/tls/tls_server.c +@@ -167,7 +167,7 @@ static const char server_session_id_context[] = "Postfix/TLS"; + #define GET_SID(s, v, lptr) ((v) = SSL_SESSION_get_id((s), (lptr))) + + /* OpenSSL 1.1.0 bitrot */ +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + typedef const unsigned char *session_id_t; + + #else +@@ -370,7 +370,7 @@ TLS_APPL_STATE *tls_server_init(const TLS_SERVER_INIT_PROPS *props) + */ + tls_check_version(); + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + /* + * Initialize the OpenSSL library by the book! To start with, we must +@@ -487,7 +487,7 @@ TLS_APPL_STATE *tls_server_init(const TLS_SERVER_INIT_PROPS *props) + * incomplete. + */ + #ifdef SSL_OP_NO_TICKET +-#ifndef OPENSSL_NO_TLSEXT ++#if !defined(OPENSSL_NO_TLSEXT) && OPENSSL_VERSION_NUMBER >= 0x0090808fL && !defined(LIBRESSL_VERSION_NUMBER) + ticketable = (*var_tls_tkt_cipher && scache_timeout > 0 + && !(off & SSL_OP_NO_TICKET)); + if (ticketable) { +@@ -528,7 +528,7 @@ TLS_APPL_STATE *tls_server_init(const TLS_SERVER_INIT_PROPS *props) + SSL_CTX_set_options(server_ctx, off); + + /* Enable all supported protocols */ +-#if OPENSSL_VERSION_NUMBER >= 0x1010000fUL ++#if OPENSSL_VERSION_NUMBER >= 0x1010000fUL && !defined(LIBRESSL_VERSION_NUMBER) + SSL_CTX_set_min_proto_version(server_ctx, 0); + SSL_CTX_set_min_proto_version(sni_ctx, 0); + #endif +@@ -616,7 +616,7 @@ TLS_APPL_STATE *tls_server_init(const TLS_SERVER_INIT_PROPS *props) + /* + * 2015-12-05: Ephemeral RSA removed from OpenSSL 1.1.0-dev + */ +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + /* + * According to OpenSSL documentation, a temporary RSA key is needed when diff --git a/postfix/postfix.initd b/postfix/postfix.initd new file mode 100644 index 0000000..9a1c1e2 --- /dev/null +++ b/postfix/postfix.initd @@ -0,0 +1,85 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload abort flush" + +description_reload="Re-read configuration files. Running processes terminate at their earliest convenience." +description_abort="Stop the Postfix mail system abruptly. Running processes are signaled to stop immediately." +description_flush="Force delivery: attempt to deliver every message in the deferred mail queue." + +# Please read http://www.postfix.org/MULTI_INSTANCE_README.html for multi instance support +CONF_DIR="/etc/postfix" +CONF_OPT="${SVCNAME##*.}" +if [ -n ${CONF_OPT} -a ${SVCNAME} != "postfix" ]; then + CONF_DIR="${CONF_DIR}.${CONF_OPT}" +fi +if [ "${CONF_DIR}" = "/etc/postfix" ]; then + CONF_PARAM="" + CONF_MESSAGE="" +else + CONF_PARAM="-c ${CONF_DIR}" + CONF_MESSAGE="(${CONF_DIR})" +fi + +depend() { + use logger dns ypbind amavisd antivirus postfix_greylist net saslauthd + if [ "${SVCNAME}" = "postfix" ]; then + provide mta + fi +} + +start() { + if [ ! -z "${CONF_PARAM}" ]; then + einfo "Please consider updating your config for postmulti support." + fi + ebegin "Starting postfix ${CONF_MESSAGE}" + if [ ! -d ${CONF_DIR} ]; then + eend 1 "${CONF_DIR} does not exist" + return 1 + fi + /usr/sbin/postfix ${CONF_PARAM} start >/dev/null 2>&1 + eend $? +} + +stop() { + ebegin "Stopping postfix ${CONF_MESSAGE}" + /usr/sbin/postfix ${CONF_PARAM} stop >/dev/null 2>&1 + eend +} + +status() { + local _retval + einfon "" + /usr/sbin/postfix ${CONF_PARAM} status + _retval=$? + if [ x${_retval} = 'x0' ]; then + mark_service_started "${SVCNAME}" + eend 0 + else + mark_service_stopped "${SVCNAME}" + eend 3 + fi +} + +reload() { + ebegin "Reloading postfix ${CONF_MESSAGE}" + /usr/sbin/postfix ${CONF_PARAM} reload >/dev/null 2>&1 + eend $? +} + +abort() { + ebegin "Aborting postfix ${CONF_MESSAGE}" + + if service_started "${SVCNAME}"; then + mark_service_stopped "${SVCNAME}" + fi + /usr/sbin/postfix ${CONF_PARAM} abort >/dev/null 2>&1 + eend $? +} + +flush() { + ebegin "Flushing postfix ${CONF_MESSAGE}" + /usr/sbin/postfix ${CONF_PARAM} flush >/dev/null 2>&1 + eend $? +} diff --git a/postfix/postfix.install b/postfix/postfix.install new file mode 100644 index 0000000..930d6aa --- /dev/null +++ b/postfix/postfix.install @@ -0,0 +1,44 @@ +post_install() { + if ! getent group postdrop &>/dev/null; then + groupadd -g 75 postdrop >/dev/null + fi + if ! getent group postfix &>/dev/null; then + groupadd -g 73 postfix >/dev/null + fi + if ! getent passwd postfix &>/dev/null; then + useradd -u 73 -d /var/spool/postfix -g postfix -G adm -s /bin/nologin postfix >/dev/null + fi + if ! groups postfix | grep adm &>/dev/null; then + gpasswd -a postfix adm >/dev/null + fi + postfix_shell=$(getent passwd postfix | cut -d: -f7) + if [ "$postfix_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin postfix &>/dev/null + fi + if [ ! -d /var/spool/postfix/public/pickup ]; then + mkfifo /var/spool/postfix/public/pickup + fi +} + +post_upgrade() { + post_install + if [[ $(vercmp $2 3.0.0-3) -eq -1 ]]; then + echo '==> The postfix daemon binaries have moved.' + echo '==> Please restart postfix as soon as possible.' + elif [[ $(vercmp $2 3.0.1-1) -eq -1 ]]; then + echo '==> Several Postfix-internal protocols have changed.' + echo '==> Please restart postfix as soon as possible.' + fi +} + +post_remove() { + if getent passwd postfix &>/dev/null; then + userdel postfix >/dev/null + fi + if getent group postfix &>/dev/null; then + groupdel postfix >/dev/null + fi + if getent group postdrop &>/dev/null; then + groupdel postdrop >/dev/null + fi +} diff --git a/postfix/postfix.run b/postfix/postfix.run new file mode 100644 index 0000000..38688bb --- /dev/null +++ b/postfix/postfix.run @@ -0,0 +1,3 @@ +#!/bin/sh +postfix check || exit 1 +exec /usr/libexec/postfix/master -d diff --git a/postgresql-old-upgrade/PKGBUILD b/postgresql-old-upgrade/PKGBUILD new file mode 100644 index 0000000..5d07fee --- /dev/null +++ b/postgresql-old-upgrade/PKGBUILD @@ -0,0 +1,78 @@ +# Maintainer: Jesus E. + +pkgname=postgresql-old-upgrade +pkgver=12.4 +_majorver=${pkgver%.*} +pkgrel=1 +pkgdesc="PostgreSQL build for migrating between major versions with pg_upgrade" +url='https://www.postgresql.org/' +arch=('i686' 'x86_64') +license=('custom:PostgreSQL') +depends=("postgresql-libs>=${_majorver}" 'libxml2' 'libressl' 'zlib' 'icu' 'llvm-libs' 'krb5') +makedepends=('python' 'tauthon' 'perl' 'tcl>=8.6.0' 'llvm' 'clang') +optdepends=('tauthon: for PL/Python 2 support' + 'python: for PL/Python 3 support' + 'perl: for PL/Perl support' + 'tcl: for PL/Tcl support') +source=(https://ftp.postgresql.org/pub/source/v${pkgver}/postgresql-${pkgver}.tar.bz2) +sha512sums=('36daf10878ca153370829178786dd6ee366ab4d4d6dc9c527536740fdb14b688ae4c33f850eb4243a7667d23f87e4bfd1ddee0755447ad4f3996e423e391c2f3') + +build() { + cd postgresql-${pkgver} + + local options=( + --prefix=/opt/pgsql-${_majorver} + --with-gssapi + --with-libxml + --with-openssl + --with-perl + --with-python + --with-tcl + --without-pam + --without-readline + --with-system-tzdata=/usr/share/zoneinfo + --with-uuid=e2fs + --with-icu + --without-systemd + --with-ldap + --with-llvm + --disable-nls + --enable-thread-safety + ) + + # only build plpython3 for now + ./configure "${options[@]}" \ + PYTHON=/usr/bin/python + make -C src/pl/plpython all + make -C contrib/hstore_plpython all + make -C contrib/ltree_plpython all + + # save plpython3 build and Makefile.global + cp -a src/pl/plpython{,3} + cp -a contrib/hstore_plpython{,3} + cp -a contrib/ltree_plpython{,3} + cp -a src/Makefile.global{,.python3} + make distclean + + # regular build with everything + ./configure "${options[@]}" \ + PYTHON=/usr/bin/tauthon + make -C src all + make -C contrib all +} + +package() { + cd postgresql-${pkgver} + make -C src DESTDIR="${pkgdir}" install + make -C contrib DESTDIR="${pkgdir}" install + + # install plpython3 + mv src/Makefile.global src/Makefile.global.save + cp src/Makefile.global.python3 src/Makefile.global + touch -r src/Makefile.global.save src/Makefile.global + make -C src/pl/plpython3 DESTDIR="${pkgdir}" install + make -C contrib/hstore_plpython3 DESTDIR="${pkgdir}" install + make -C contrib/ltree_plpython3 DESTDIR="${pkgdir}" install + + install -Dm 644 COPYRIGHT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/postgresql/PKGBUILD b/postgresql/PKGBUILD new file mode 100644 index 0000000..782a4e7 --- /dev/null +++ b/postgresql/PKGBUILD @@ -0,0 +1,218 @@ +# Maintainer: Jesus E. + +pkgbase=postgresql +pkgname=('postgresql-libs' 'postgresql') +pkgver=12.4 +_debver=$pkgver +_debrel=1 +_majorver=${pkgver%.*} +pkgrel=3 +url="https://www.postgresql.org/" +arch=('i686' 'x86_64') +license=('custom:PostgreSQL') +makedepends=('krb5' 'libxml2' 'python' 'tauthon' 'perl' 'tcl>=8.6.0' 'libressl' 'zlib' 'icu' 'libldap' 'quilt') +source=(https://ftp.postgresql.org/pub/source/v${pkgver}/postgresql-${pkgver}.tar.bz2 + https://repo.hyperbola.info:50000/sources/${pkgbase}/postgresql-12_${_debver}-${_debrel}.debian.tar.xz{,.sig} + postgresql-run-socket.patch + postgresql-perl-rpath.patch + postgresql.logrotate + postgresql-check-db-dir + postgresql.confd + postgresql.initd + postgresql.conf + postgresql.run + postgresql_log.run) +sha512sums=('36daf10878ca153370829178786dd6ee366ab4d4d6dc9c527536740fdb14b688ae4c33f850eb4243a7667d23f87e4bfd1ddee0755447ad4f3996e423e391c2f3' + 'e53b2af1b8f904efcc28c6723d9752f97079959fb2306f01d777af02ed105967c4b3c89dfa6069daae37830ce77e2db3271bd3c5b75fb85bda76a9b52e2394c3' + 'SKIP' + '031efe12d18ce386989062327cdbbe611c5ef1f94e4e1bead502304cb3e2d410af533d3c7f1109d24f9da9708214fe32f9a10ba373a3ca8d507bdb521fbb75f7' + '38302242b30c01c7981574ed28d9cbd9dc73bf6b56ba3a032afb5d0885ae83e5aa72ce578bf2422214dfa6c46f09d0bdd7cccaeb3c25d58754eb1a34f8bf5615' + '9ab4da01337ffbab8faec0e220aaa2a642dbfeccf7232ef2645bdc2177a953f17ee3cc14a4d8f8ebd064e1dae8b3dba6029adbffb8afaabea383963213941ba8' + 'eaaccae8dabad67d2bc54f74ec8d3ddb46257369b90080a2860b65d500053db6ace608be4c1b6baaeab4a03245dcbb5215eb41e468acc2304c037f094c2e7819' + '839aa9714c8b968d19b1cbeb19a3c561d588d7e6572fc501895423e369ec004256720390760b29347c85de71dccc67596072060975f7af60239b8565068fa2bf' + 'd901e05ac8c965c5f8d12e143b94a49b69e941d392a5210df88df6ef0b8fbb02c48e6fb6e68262b1286ef96c5fa0c6a36e0d26cd707475389495a9fc2a6be28d' + '7a0cb0f0caeba4f7def60581bdfcb1c852f06512dcd24f1a454e71d7e88596639c004cfe70bf362750715f3d49d3c7f1fb6e59d897eab75566d6e8652ad3c835' + 'bb7c35db229d6f7133e8463ebc3fe4f43ddffd5ba0ed89aaecd50e0e28a6f168a0433c5dc3f6a3e22480090c9e304e234b8cad2a51d946533eb6bbfbc64c39fe' + 'a0bda24ba021c0a351c8b109651b64b8542236d49b0a19693c0e61d7a33e3eff61297d50639663e212789d1bfeed026b0da3d0db35c89b871746d5ef76670357') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +prepare() { + cd postgresql-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/50-per-version-dirs.patch || true + rm -v debian/patches/51-default-sockets-in-var.patch || true + rm -v debian/patches/52-tutorial-README.patch || true + rm -v debian/patches/53-pg_service.conf_directory_doc.patch || true + rm -v debian/patches/54-debian-alternatives-for-external-tools.patch || true + rm -v debian/patches/70-history || true + rm -v debian/patches/initdb-startup-message || true + rm -v debian/patches/libpgport-pkglibdir || true + + quilt push -av + fi + + patch -Np1 < $srcdir/postgresql-run-socket.patch + patch -p1 < $srcdir/postgresql-perl-rpath.patch +} + +build() { + cd postgresql-${pkgver} + local options=( + --prefix=/usr + --mandir=/usr/share/man + --datadir=/usr/share/postgresql + --sysconfdir=/etc + --with-gssapi + --with-libxml + --with-openssl + --with-perl + --with-python + --with-tcl + --without-pam + --with-system-tzdata=/usr/share/zoneinfo + --with-uuid=e2fs + --with-icu + --with-ldap + --enable-nls + --enable-thread-safety + --disable-rpath + ) + + # only build plpython3 for now + ./configure ${options[@]} \ + PYTHON=/usr/bin/python + make -C src/pl/plpython all + make -C contrib/hstore_plpython all + make -C contrib/ltree_plpython all + + # save plpython3 build and Makefile.global + cp -a src/pl/plpython{,3} + cp -a contrib/hstore_plpython{,3} + cp -a contrib/ltree_plpython{,3} + cp -a src/Makefile.global{,.python3} + make distclean + + # regular build with everything + ./configure ${options[@]} \ + PYTHON=/usr/bin/tauthon + make world +} + +package_postgresql-libs() { + pkgdesc="Libraries for use with PostgreSQL" + depends=('krb5' 'libressl' 'readline>=6.0' 'zlib' 'libldap') + provides=('postgresql-client') + conflicts=('postgresql-client') + + cd postgresql-${pkgver} + + # install license + install -Dm 644 COPYRIGHT "${pkgdir}/usr/share/licenses/postgresql-libs/COPYRIGHT" + + # install libs and non-server binaries + for dir in src/interfaces src/bin/pg_config src/bin/pg_dump src/bin/psql src/bin/scripts; do + make -C ${dir} DESTDIR="${pkgdir}" install + done + + for util in pg_config pg_dump pg_dumpall pg_restore psql \ + clusterdb createdb createuser dropdb dropuser pg_isready reindexdb vacuumdb; do + install -Dm 644 doc/src/sgml/man1/${util}.1 "${pkgdir}"/usr/share/man/man1/${util}.1 + done + + cd src/include + + install -d "${pkgdir}"/usr/include/{libpq,postgresql/internal/libpq} + + # these headers are needed by the public headers of the interfaces + install -m 644 pg_config.h "${pkgdir}/usr/include" + install -m 644 pg_config_os.h "${pkgdir}/usr/include" + install -m 644 pg_config_ext.h "${pkgdir}/usr/include" + install -m 644 postgres_ext.h "${pkgdir}/usr/include" + install -m 644 libpq/libpq-fs.h "${pkgdir}/usr/include/libpq" + install -m 644 pg_config_manual.h "${pkgdir}/usr/include" + + # these he aders are needed by the not-so-public headers of the interfaces + install -m 644 c.h "${pkgdir}/usr/include/postgresql/internal" + install -m 644 port.h "${pkgdir}/usr/include/postgresql/internal" + install -m 644 postgres_fe.h "${pkgdir}/usr/include/postgresql/internal" + install -m 644 libpq/pqcomm.h "${pkgdir}/usr/include/postgresql/internal/libpq" +} + +package_postgresql() { + pkgdesc="Sophisticated object-relational DBMS" + backup=('etc/logrotate.d/postgresql' 'etc/conf.d/postgresql' 'etc/sv/postgresql/conf') + depends=("postgresql-libs>=${pkgver}" 'krb5' 'libxml2' 'readline>=6.0' 'libressl' 'icu' 'libldap') + optdepends=('tauthon: for PL/Tauthon support' + 'python: for PL/Python support' + 'perl: for PL/Perl support' + 'tcl: for PL/Tcl support' + 'postgresql-old-upgrade: upgrade from previous major version using pg_upgrade' + 'logger: message logging support') + options=('staticlibs') + install=postgresql.install + + cd postgresql-${pkgver} + + # install + make DESTDIR="${pkgdir}" install + make -C contrib DESTDIR="${pkgdir}" install + make -C doc/src/sgml DESTDIR="${pkgdir}" install-man + + # install docs + make -C doc/src/sgml DESTDIR="${pkgdir}" install-html + chown -R root:root "${pkgdir}/usr/share/doc/postgresql/html" + + # install plpython3 + mv src/Makefile.global src/Makefile.global.save + cp src/Makefile.global.python3 src/Makefile.global + touch -r src/Makefile.global.save src/Makefile.global + make -C src/pl/plpython3 DESTDIR="${pkgdir}" install + make -C contrib/hstore_plpython3 DESTDIR="${pkgdir}" install + make -C contrib/ltree_plpython3 DESTDIR="${pkgdir}" install + + # we don't want these, they are in the -libs package + for dir in src/interfaces src/bin/pg_config src/bin/pg_dump src/bin/psql src/bin/scripts; do + make -C ${dir} DESTDIR="${pkgdir}" uninstall + done + for util in pg_config pg_dump pg_dumpall pg_restore psql \ + clusterdb createdb createuser dropdb dropuser pg_isready reindexdb vacuumdb; do + rm "${pkgdir}"/usr/share/man/man1/${util}.1 + done + + # install license + install -Dm 644 COPYRIGHT "${pkgdir}/usr/share/licenses/${pkgbase}/COPYRIGHT" + + # clean up unneeded installed items + rm -rf "${pkgdir}/usr/include/postgresql/internal" + rm -rf "${pkgdir}/usr/include/libpq" + find "${pkgdir}/usr/include" -maxdepth 1 -type f -execdir rm {} + + + install -Dm 755 "${srcdir}/postgresql-check-db-dir" \ + "${pkgdir}/usr/bin/postgresql-check-db-dir" + + install -Dm 644 "${srcdir}/postgresql.logrotate" \ + "${pkgdir}/etc/logrotate.d/postgresql" + + # install OpenRC files + install -Dm 644 "${srcdir}/postgresql.confd" \ + "${pkgdir}/etc/conf.d/postgresql" + install -Dm 755 "${srcdir}/postgresql.initd" \ + "${pkgdir}/etc/init.d/postgresql" + + # install runit files + install -Dm 644 "${srcdir}/postgresql.conf" \ + "${pkgdir}/etc/sv/postgresql/conf" + install -Dm 755 "${srcdir}/postgresql.run" \ + "${pkgdir}/etc/sv/postgresql/run" + install -Dm 755 "${srcdir}/postgresql_log.run" \ + "${pkgdir}/etc/sv/postgresql/log/run" +} diff --git a/postgresql/postgresql-check-db-dir b/postgresql/postgresql-check-db-dir new file mode 100644 index 0000000..00d20b7 --- /dev/null +++ b/postgresql/postgresql-check-db-dir @@ -0,0 +1,49 @@ +#!/bin/sh + +# This script verifies that the postgresql data directory has been correctly +# initialized. We do not want to automatically initdb it, because that has +# a risk of catastrophic failure (ie, overwriting a valuable database) in +# corner cases, such as a remotely mounted database on a volume that's a +# bit slow to mount. But we can at least emit a message advising newbies +# what to do. + +PGDATA="$1" + +if [ -z "$PGDATA" ] +then + echo "Usage: $0 database-path" + exit 1 +fi + +# PGMAJORVERSION is major version +PGMAJORVERSION=12 +# PREVMAJORVERSION is the previous major version +PREVMAJORVERSION=11 + +# Check for the PGDATA structure +if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base" ] +then + # Check version of existing PGDATA + if [ x`cat "$PGDATA/PG_VERSION"` = x"$PGMAJORVERSION" ] + then + : A-OK + elif [ x`cat "$PGDATA/PG_VERSION"` = x"$PREVMAJORVERSION" ] + then + echo $"An old version of the database format was found." + echo $"See https://wiki.archlinux.org/index.php/PostgreSQL#Upgrading_PostgreSQL" + exit 1 + else + echo $"An old version of the database format was found." + echo $"You need to dump and reload before using PostgreSQL $PGMAJORVERSION." + echo $"See http://www.postgresql.org/docs/$PGMAJORVERSION/static/upgrading.html" + exit 1 + fi +else + # No existing PGDATA! Warn the user to initdb it. + echo $"\"$PGDATA\" is missing or empty. Use a command like" + echo $" su - postgres -c \"initdb --locale en_US.UTF-8 -D '$PGDATA'\"" + echo $"with relevant options, to initialize the database cluster." + exit 1 +fi + +exit 0 diff --git a/postgresql/postgresql-perl-rpath.patch b/postgresql/postgresql-perl-rpath.patch new file mode 100644 index 0000000..c4c4fda --- /dev/null +++ b/postgresql/postgresql-perl-rpath.patch @@ -0,0 +1,13 @@ +diff -Naur postgresql-9.1.5.orig/src/pl/plperl/GNUmakefile postgresql-9.1.5/src/pl/plperl/GNUmakefile +--- postgresql-9.1.5.orig/src/pl/plperl/GNUmakefile 2012-08-14 18:41:04.000000000 -0400 ++++ postgresql-9.1.5/src/pl/plperl/GNUmakefile 2012-08-17 11:15:09.457116708 -0400 +@@ -43,6 +43,9 @@ + + SHLIB_LINK = $(perl_embed_ldflags) + ++# Force rpath to be used even though we disable it everywhere else ++SHLIB_LINK += $(rpath) ++ + REGRESS_OPTS = --dbname=$(PL_TESTDB) --load-extension=plperl --load-extension=plperlu + REGRESS = plperl plperl_lc plperl_trigger plperl_shared plperl_elog plperl_util plperl_init plperlu plperl_array + # if Perl can support two interpreters in one backend, diff --git a/postgresql/postgresql-run-socket.patch b/postgresql/postgresql-run-socket.patch new file mode 100644 index 0000000..b558c7b --- /dev/null +++ b/postgresql/postgresql-run-socket.patch @@ -0,0 +1,12 @@ +diff -Naur postgresql-9.2.0.sockets/src/include/pg_config_manual.h postgresql-9.2.0/src/include/pg_config_manual.h +--- postgresql-9.2.0.sockets/src/include/pg_config_manual.h 2012-09-06 17:26:17.000000000 -0400 ++++ postgresql-9.2.0/src/include/pg_config_manual.h 2012-09-06 18:13:18.183092471 -0400 +@@ -144,7 +144,7 @@ + * here's where to twiddle it. You can also override this at runtime + * with the postmaster's -k switch. + */ +-#define DEFAULT_PGSOCKET_DIR "/tmp" ++#define DEFAULT_PGSOCKET_DIR "/run/postgresql" + + /* + * The random() function is expected to yield values between 0 and diff --git a/postgresql/postgresql.conf b/postgresql/postgresql.conf new file mode 100644 index 0000000..2a3cd14 --- /dev/null +++ b/postgresql/postgresql.conf @@ -0,0 +1,17 @@ +# Configuration file for the PostgreSQL server. + +# PostgreSQL's database directory +PGROOT="/var/lib/postgresql" + +# PostgreSQL's log file. +PGLOG="/var/log/postgresql.log" + +# Passed to initdb if necessary +INITOPTS="-A peer --auth-host=md5 --auth-local=peer --locale en_US.UTF-8" + +# Extra options to run postmaster with, e.g.: +# -N is the maximal number of client connections +# -B is the number of shared buffers and has to be at least 2x the value for -N +# Please read the man-page to postmaster for more options. Many of these options +# can be set directly in the configuration-file. +#PGOPTS="-N 512 -B 1024" diff --git a/postgresql/postgresql.confd b/postgresql/postgresql.confd new file mode 100644 index 0000000..85c6775 --- /dev/null +++ b/postgresql/postgresql.confd @@ -0,0 +1,58 @@ +# Which port and socket to bind PostgreSQL +PGPORT="5432" + +# How long to wait for server to start in seconds +START_TIMEOUT=10 + +# NICE_QUIT ignores new connections and wait for clients to disconnect from +# server before shutting down. NICE_TIMEOUT in seconds determines how long to +# wait for this to succeed. +NICE_TIMEOUT=60 + +# Forecfully disconnect clients from server and shut down. This is performed +# after NICE_QUIT. Terminated client connections have their open transactions +# rolled back. +# Set RUDE_QUIT to "NO" to disable. RUDE_TIMEOUT in seconds. +RUDE_QUIT="YES" +RUDE_TIMEOUT=30 + +# If the server still fails to shutdown, you can force it to quit by setting +# this to YES and a recover-run will execute on the next startup. +# Set FORCE_QUIT to "YES" to enable. FORCE_TIMEOUT in seconds. +FORCE_QUIT="NO" +FORCE_TIMEOUT=2 + +# Extra options to run postmaster with, e.g.: +# -N is the maximal number of client connections +# -B is the number of shared buffers and has to be at least 2x the value for -N +# Please read the man-page to postmaster for more options. Many of these +# options can be set directly in the configuration file. +#PGOPTS="-N 512 -B 1024" + +# Pass extra environment variables. If you have to export environment variables +# for the database process, this can be done here. +# Don't forget to escape quotes. +#PG_EXTRA_ENV="PGPASSFILE=\"/path/to/.pgpass\"" + +############################################################################## +# +# The following values should not be arbitrarily changed. +# +# `emerge --config dev-db/postgresql:@SLOT@' uses these values to +# determine where to create the data directory, where to place the +# configuration files, and any additional options to pass to initdb. +# +# The initscript also uses these variables to inform PostgreSQL where to find +# its data directory and configuration files. +# +############################################################################## + +# Location of configuration files +PGDATA="/var/lib/postgres/data/" + +# Where the data directory is located/to be created +DATA_DIR="/var/lib/postgres/data" + +# Additional options to pass to initdb. +# See `man initdb' for available options. +PG_INITDB_OPTS="--encoding=UTF8" diff --git a/postgresql/postgresql.initd b/postgresql/postgresql.initd new file mode 100644 index 0000000..46de480 --- /dev/null +++ b/postgresql/postgresql.initd @@ -0,0 +1,143 @@ +#!/sbin/openrc-run +# Copyright 1999-2015 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload" + +get_config() { + [ -f ${PGDATA%/}/postgresql.conf ] || return 1 + + eval echo $(sed -e 's:#.*::' ${PGDATA%/}/postgresql.conf \ + | awk '$1 == "'$1'" { print ($2 == "=" ? $3 : $2) }') +} + +depend() { + use net + provide postgresql + + if [ "$(get_config log_destination)" = "syslog" ]; then + use logger + fi +} + +configured_port=$(get_config port) +: ${configured_port:=${PGPORT}} +socket_paths=$(get_config unix_socket_directories) +: ${socket_paths:=/run/postgresql} + +checkconfig() { + # Check that DATA_DIR has been set + if [ -z ${DATA_DIR} ] ; then + eerror "DATA_DIR not set" + eerror "HINT: Perhaps you need to update /etc/conf.d/postgresql" + return 1 + fi + + # Check that DATA_DIR exists + if [ ! -d ${DATA_DIR} ] ; then + eerror "Directory not found: ${DATA_DIR}" + eerror "HINT: Ensure that DATA_DIR points to the right path." + eerror "HINT: Or perhaps you need to create the database cluster:" + eerror " emerge --config dev-db/postgresql:@SLOT@" + return 1 + fi + + # Check for the existence of PostgreSQL's config files, and set the + # proper mode and ownership. + # Only three files should be checked as potentially other files + # may be in PGDATA that should not be touched. + local file + for file in postgresql pg_hba pg_ident ; do + file="${PGDATA%/}/${file}.conf" + if [ -f ${file} ] ; then + checkpath -f -m 0600 -o postgres:postgres ${file} + else + eerror "${file} not found" + eerror "HINT: mv ${DATA_DIR%/}/*.conf ${PGDATA}" + return 1 + fi + done + + # Set the proper permission for the socket paths and create it if + # it doesn't exist. + set -f; IFS=',' + local s + for s in ${socket_paths}; do + checkpath -d -m 1775 -o postgres:postgres ${s} + if [ -e ${s%/}/.s.PGSQL.${configured_port} ] ; then + eerror "Socket conflict." + eerror "A server is already listening on:" + eerror " ${s%/}/.s.PGSQL.${configured_port}" + eerror "HINT: Change PGPORT to listen on a different socket." + return 1 + fi + done + set +f; unset IFS +} + +start() { + checkconfig || return 1 + + ebegin "Starting PostgreSQL" + + rm -f ${DATA_DIR%/}/postmaster.pid + + local extraenv + local x + for x in ${PG_EXTRA_ENV} ; do + extraenv="${extraenv} --env ${x}" + done + + start-stop-daemon --start \ + --user postgres \ + --env "PGPORT=${configured_port}" \ + ${extraenv} \ + --pidfile ${DATA_DIR%/}/postmaster.pid \ + --exec /usr/bin/pg_ctl \ + -- start -s -w -t ${START_TIMEOUT} -l ${DATA_DIR%/}/postmaster.log \ + -D ${PGDATA} -o "--data-directory=${DATA_DIR} ${PGOPTS}" + local retval=$? + + if [ $retval -ne 0 ] ; then + eerror "Check the log for a possible explanation of the above error. The log may be" + eerror " ${DATA_DIR%/}/postmaster.log" + eerror "Or wherever you configured PostgreSQL @SLOT@ log messages to be sent." + eend $retval + return $retval + fi + + eend $retval +} + +stop() { + local seconds=$(( ${NICE_TIMEOUT} + ${RUDE_TIMEOUT} + ${FORCE_TIMEOUT} )) + ebegin "Stopping PostgreSQL (this can take up to ${seconds} seconds)" + + local retval + local retries=SIGTERM/${NICE_TIMEOUT} + + if [ "${RUDE_QUIT}" != "NO" ] ; then + einfo "RUDE_QUIT enabled." + retries="${retries}/SIGINT/${RUDE_TIMEOUT}" + fi + if [ "${FORCE_QUIT}" = "YES" ] ; then + einfo "FORCE_QUIT enabled." + ewarn "A recover-run might be executed on next startup." + retries="${retries}/SIGQUIT/${FORCE_TIMEOUT}" + fi + + # Loops through nice, rude, and force quit in one go. + start-stop-daemon --stop \ + --exec /usr/bin/postgres \ + --retry ${retries} \ + --pidfile ${DATA_DIR%/}/postmaster.pid + + eend +} + +reload() { + ebegin "Reloading PostgreSQL configuration" + kill -HUP $(head -n1 ${DATA_DIR%/}/postmaster.pid) + eend $? +} diff --git a/postgresql/postgresql.install b/postgresql/postgresql.install new file mode 100644 index 0000000..38cc9be --- /dev/null +++ b/postgresql/postgresql.install @@ -0,0 +1,28 @@ +post_install() { + if [ ! -d '/var/lib/postgres' ]; then + mkdir -p '/var/lib/postgres' + fi + if ! getent group postgres >/dev/null; then + groupadd -g 88 postgres + fi + if ! getent passwd postgres >/dev/null; then + useradd -c 'PostgreSQL user' -u 88 -g postgres -d '/var/lib/postgres' -s /bin/bash postgres + passwd -l postgres >/dev/null + fi + if [ ! -d '/var/lib/postgres/data' ]; then + mkdir -p '/var/lib/postgres/data' + chown postgres:postgres '/var/lib/postgres/data' + fi + local datadir="/var/lib/postgres/data" + echo " ==> requires datadir $datadir" + echo " ==> run as user postgres: 'initdb -D $datadir'" + + postgres_shell=$(getent passwd postgres | cut -d: -f7) + if [ "$postgres_shell" != '/bin/bash' ]; then + chsh -s /bin/bash postgres &>/dev/null + fi +} + +post_upgrade() { + post_install $1 +} diff --git a/postgresql/postgresql.logrotate b/postgresql/postgresql.logrotate new file mode 100644 index 0000000..9c36918 --- /dev/null +++ b/postgresql/postgresql.logrotate @@ -0,0 +1,4 @@ +/var/log/postgresql.log { + copytruncate + missingok +} diff --git a/postgresql/postgresql.run b/postgresql/postgresql.run new file mode 100644 index 0000000..6b57970 --- /dev/null +++ b/postgresql/postgresql.run @@ -0,0 +1,30 @@ +#!/bin/sh +[ -r conf ] && . ./conf +: ${PGDATA:="$PGROOT/data"} + +if [ "$PGROOT" != "/var/lib/postgresql" ]; then + echo "Creating symlink /var/lib/postgresql -> $PGROOT" + + # Remove /var/lib/postgres if empty dir, but not if symlink + if [ ! -L /var/lib/postgres ] && [ -d /var/lib/postgres ]; then + rmdir /var/lib/postgres + fi + + ln -sf "$PGROOT" /var/lib/postgresql +fi + + +if [ ! -d "$PGDATA" ]; then + echo "Initializing database in $PGDATA" + + mkdir -p "$PGDATA" + chown -R postgres:postgres "$PGDATA" + chmod 0700 "$PGDATA" + su - postgres -m -c "/usr/bin/initdb $INITOPTS -D '$PGDATA'" >/dev/null + + if [ -f /etc/postgresql/postgresql.conf ]; then + ln -sf /etc/postgresql/postgresql.conf "$PGDATA/postgresql.conf" + fi +fi + +exec chpst -u postgres:postgres postgres -D "$PGDATA" $PGOPTS 2>&1 diff --git a/postgresql/postgresql_log.run b/postgresql/postgresql_log.run new file mode 100644 index 0000000..e564447 --- /dev/null +++ b/postgresql/postgresql_log.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec logger -p daemon.info -t postgres diff --git a/postgrey/PKGBUILD b/postgrey/PKGBUILD new file mode 100644 index 0000000..f795416 --- /dev/null +++ b/postgrey/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=postgrey +pkgver=1.36 +_debver=$pkgver +_debrel=5.2 +pkgrel=2 +pkgdesc="A postfix policy server implementing greylisting" +arch=('any') +url="https://postgrey.schweikert.ch/" +options=(emptydirs) +license=('GPL-2') +depends=('perl-net-server' 'perl' 'perl-berkeleydb' 'perl-io-multiplex' + "db>=4.1" 'perl-netaddr-ip') +makedepends=('quilt') +optdepends=('postfix: the recommended MTA for use with postgrey' + 'exim: an alternative MTA' + 'perl-net-dns: for postgreyreport tool') +backup=(etc/postgrey/whitelist_recipients + etc/postgrey/whitelist_clients) +install=$pkgname.install +source=("https://postgrey.schweikert.ch/pub/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/postgrey/postgrey_$_debver-$_debrel.debian.tar.xz" + "$pkgname.initd" + "$pkgname.confd" + "$pkgname.run") +sha512sums=('9b2502b873658c1ef8a86bff091d61b8dc8d66f7395bc0a869f9e6ec60b691a317c084ae326f49ce8dd926f0fa2620a58f3ad76c25e1b1c9606557d2802d1395' + '00bd8410b343db2697298dcbe81869d481854d2480cf63ad09c7514e9e44ef8564f578dd3616970c07444454f8c484c226bade3f39c3354c180c3f941bbe5de5' + '9e2b76272d2ac780ec1c43486504c7ebe62ca9bf90fb5f6f6bc938a108bd10b6ca515a81648619ecdce8976aec9ff5f498be9f3894fd05787cc6c7d14624fa84' + '75341bf097eda87427a91bf9243229a2f7dc330f97a739042e7b9ce85be3ca7cba86c59fd8f9ba2ce5532e850cb80a51febad0ce58a2c92253e2a3fabd2185ad' + '2393192cb60aecc730ff43791e81dfffa4be90d399f53216b22ac3cf006d88fe3f4a82300a9e310f88e4efec0694c4dec299560fa5749bf1b2df12bd73783e68') + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + + # folder structure + mkdir -p "$pkgdir"/var/lib/$pkgname + chmod 770 "$pkgdir"/var/lib/$pkgname + + # binary data + install -D -m 0755 postgrey "$pkgdir"/usr/sbin/postgrey + install -D -m 0755 policy-test "$pkgdir"/usr/sbin/policy-test + install -D -m 0755 contrib/postgreyreport "$pkgdir"/usr/bin/postgreyreport + install -D -m 0644 postgrey_whitelist_recipients "$pkgdir"/etc/postgrey/whitelist_recipients + install -D -m 0644 postgrey_whitelist_clients "$pkgdir"/etc/postgrey/whitelist_clients + + # services + install -Dm 644 "$srcdir/$pkgname.confd" "$pkgdir/etc/conf.d/$pkgname" + install -Dm 755 "$srcdir/$pkgname.initd" "$pkgdir/etc/init.d/$pkgname" + install -Dm 755 "$srcdir/$pkgname.run" "$pkgdir/etc/sv/$pkgname/run" + + # license + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/postgrey/postgrey.confd b/postgrey/postgrey.confd new file mode 100644 index 0000000..161953c --- /dev/null +++ b/postgrey/postgrey.confd @@ -0,0 +1,55 @@ +# Config file for /etc/init.d/postgrey + +# LISTEN TYPE +# Set to 'inet' if you want to use a TCP socket. +# Set to 'unix' if you want to use a UNIX socket. +POSTGREY_TYPE="inet" + +# HOST +# What IP should postgrey bind to? +# Leave unchanged unless you know what you are doing. +# (ignored if POSTGREY_TYPE is set to 'unix') +POSTGREY_HOST="127.0.0.1" + +# PORT +# What TCP port should postgrey listen on? +# (ignored if POSTGREY_TYPE is set to 'unix') +POSTGREY_PORT="10023" + +# SOCKET +# Unix socket to listen on, if POSTGREY_TYPE is set to 'unix'. +# Leave unchanged unless you know what you are doing. +# (ignored if POSTGREY_TYPE is set to 'inet') +POSTGREY_SOCKET="/var/lib/postgrey" + +# PID +# Postgrey pid file. +# Do not change, if you don't know what this is! +POSTGREY_PID="/var/run/postgrey.pid" + +# DELAY +# How long to delay mail that is greylisted in seconds. +POSTGREY_DELAY=300 + +# TEXT +# The response we'll send back with delayed mail. +POSTGREY_TEXT="Greylisted for %s seconds" + +# Additional Postgrey options +# +# -v, --verbose increase verbosity level +# --max-age=N delete entries older than N days since the last time +# that they have been seen (default: 30) +# --retry-window=N allow only N days for the first retrial (default: 2) +# append 'h' if you want to specify it in hours +# --greylist-action=A if greylisted, return A to Postfix (default: DEFER_IF_PERMIT) +# --lookup-by-subnet strip the last 8 bits from IP addresses (default) +# --lookup-by-host do not strip the last 8 bits from IP addresses +# --whitelist-clients=FILE default: /etc/postfix/postgrey_whitelist_clients +# --whitelist-recipients=FILE default: /etc/postfix/postgrey_whitelist_recipients +# +# Note that the --whitelist-x options can be specified multiple times, and that +# per default /etc/postfix/postgrey_whitelist_clients.local is also read, so +# that you can put there local entries. +# +POSTGREY_OPTS="" diff --git a/postgrey/postgrey.initd b/postgrey/postgrey.initd new file mode 100644 index 0000000..9f4f977 --- /dev/null +++ b/postgrey/postgrey.initd @@ -0,0 +1,100 @@ +#!/sbin/openrc-run +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +conf="/etc/conf.d/postgrey" + +extra_started_commands="reload" + +depend() { + need net + before postfix + provide postfix_greylist +} + +conf_error() { + eerror "You need to setup ${conf} first" + return 1 +} + +checkconfig() { + if [ -z "${POSTGREY_TYPE}" ] + then + einfo "You need to choose the server type you want" + einfo "by setting the POSTGREY_TYPE variable in ${conf}." + else + if [ "x${POSTGREY_TYPE}" = "xinet" ] + then + if [ -z "${POSTGREY_PORT}" ] || [ -z "${POSTGREY_HOST}" ] + then + einfo "The following entries are missing in ${conf}:" + [ -z "${POSTGREY_HOST}" ] && einfo " - POSTGREY_HOST" + [ -z "${POSTGREY_PORT}" ] && einfo " - POSTGREY_PORT" + conf_error + fi + POSTGREY_ADDR="${POSTGREY_TYPE}=${POSTGREY_HOST}:${POSTGREY_PORT}" + else + if [ -z "${POSTGREY_SOCKET}" ] + then + einfo "The following entries are missing in ${conf}:" + [ -z "${POSTGREY_SOCKET}" ] && einfo " - POSTGREY_SOCKET" + conf_error + fi + POSTGREY_ADDR="${POSTGREY_TYPE}=${POSTGREY_SOCKET}" + fi + fi + + if [ -z "${POSTGREY_PID}" ] + then + einfo "The following entries are missing in ${conf}:" + [ -z "${POSTGREY_PID}" ] && einfo " - POSTGREY_PID" + conf_error + fi +} + +start() { + checkconfig || return 1 + ebegin "Starting Postgrey" + + # HACK -- start a subshell and corrects perms on the socket... + ( if [ "x${POSTGREY_TYPE}" = "xunix" ]; then + rm -f ${POSTGREY_SOCKET}; + while ! test -S ${POSTGREY_SOCKET}; do sleep 1; done; + chmod a+rw,a-x ${POSTGREY_SOCKET}; fi ) & + + if [ -z ${POSTGREY_DELAY} ] ; then + POSTGREY_DELAY_ARG="" + else + POSTGREY_DELAY_ARG="--delay=${POSTGREY_DELAY}" + fi + + if [ -z "${POSTGREY_TEXT}" ] ; then + POSTGREY_TEXT_ARG="" + else + POSTGREY_TEXT_ARG="--greylist-text=${POSTGREY_TEXT}" + fi + + start-stop-daemon --start --quiet --background \ + --pidfile=${POSTGREY_PID} \ + --name postgrey \ + --exec /usr/sbin/postgrey -- \ + --${POSTGREY_ADDR} \ + --daemonize \ + --pidfile=${POSTGREY_PID} \ + ${POSTGREY_DELAY_ARG} \ + ${POSTGREY_OPTS} \ + "${POSTGREY_TEXT_ARG}" + eend ${?} +} + +stop() { + ebegin "Stopping Postgrey" + start-stop-daemon --stop --quiet --pidfile ${POSTGREY_PID} + eend ${?} +} + +reload() { + ebegin "Reloading Postgrey" + start-stop-daemon --stop --signal HUP --oknodo --pidfile ${POSTGREY_PID} + eend $? +} diff --git a/postgrey/postgrey.install b/postgrey/postgrey.install new file mode 100644 index 0000000..a9ee83e --- /dev/null +++ b/postgrey/postgrey.install @@ -0,0 +1,23 @@ +post_install() { + if ! getent group postgrey &>/dev/null; then + groupadd -r postgrey >& /dev/null + fi + if ! getent passwd postgrey &>/dev/null; then + useradd -r -d /var/spool/postfix/postgrey -g postgrey -s /bin/false postgrey + fi + + chown postgrey:postgrey /var/lib/postgrey +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + if getent passwd postgrey &>/dev/null; then + userdel postgrey >/dev/null + fi + if getent group postgrey &>/dev/null; then + groupdel postgrey >/dev/null + fi +} diff --git a/postgrey/postgrey.run b/postgrey/postgrey.run new file mode 100644 index 0000000..cd0a280 --- /dev/null +++ b/postgrey/postgrey.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/postgrey --inet=127.0.0.1:10030 --user=postgrey --group=postgrey --greylist-text="Greylisted for %%s seconds" diff --git a/potrace/PKGBUILD b/potrace/PKGBUILD new file mode 100644 index 0000000..262cdf4 --- /dev/null +++ b/potrace/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=potrace +pkgver=1.16 +_debver=1.16 +_debrel=2 +pkgrel=1 +pkgdesc='Utility for tracing a bitmap (input: PBM,PGM,PPM,BMP; output: EPS,PS,PDF,SVG,DXF,PGM,Gimppath,XFig)' +url='http://potrace.sourceforge.net/' +arch=('i686' 'x86_64') +license=('GPL-2') +source=("http://potrace.sourceforge.net/download/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('10d85ed3fada80951223c65e923b5e6ee3e76e071575971d5b09b996b477ec5ff2403e0337c44963c6b441cc3ba6c4f7009541124a25c16b7721fdebd1f774b9') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --with-libpotrace \ + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} diff --git a/povray/PKGBUILD b/povray/PKGBUILD new file mode 100644 index 0000000..35ebde8 --- /dev/null +++ b/povray/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=povray +pkgver=3.7.0.10 +_debver=$pkgver +_debrel=2 +pkgrel=2 +_v=${pkgver%.*.*} # 3.7 +pkgdesc="Script based raytracer for creating 3D graphics" +arch=('i686' 'x86_64') +license=('AGPL-3') +url='http://povray.org/' +depends=('boost-libs' 'libpng' 'libtiff') +makedepends=('boost' 'glu' 'quilt') +backup=(etc/povray/$_v/povray.conf + etc/povray/$_v/povray.ini) +source=("$pkgname-$pkgver.tar.gz::https://github.com/POV-Ray/povray/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/povray/povray_$_debver-$_debrel.debian.tar.xz") +sha512sums=('fb947f2231f44c548b53ad27008e6a53909b375970c504938d7d7ea5dd336672891b50d3b41076598d8d025db5bcee01880d399094b4727d942d1c02a3594c47' + '44df398d87074ac4e47ffd6f5880dfd2c4e7eeffa09db5694002c58a158fa19492bd47ff10eacdabcaa1d781ad6a905032bb8b5058f311a7833e6f9ab0f0a017') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd ./unix + sed 's/automake --w/automake --add-missing --w/g' -i prebuild.sh + sed 's/dist-bzip2/dist-bzip2 subdir-objects/g' -i configure.ac + ./prebuild.sh + cd .. + ./bootstrap +} + +build() { + cd $pkgname-$pkgver + ./configure \ + LIBS="-lboost_system -lboost_thread" \ + COMPILED_BY='Hyperbola GNU/Linux-libre' \ + --prefix=/usr \ + --sysconfdir=/etc + make CXXFLAGS+='-std=c++11 -lboost_system -lboost_thread -DBOOST_BIND_GLOBAL_PLACEHOLDERS=1 -w' +} + +package() { + cd $pkgname-$pkgver + install -d "$pkgdir"/usr/share/{doc/,}"$pkgname-$_v" + cp -r icons include ini scenes scripts "$pkgdir/usr/share/$pkgname-$_v" + cp -r doc "$pkgdir/usr/share/doc/$pkgname-$_v" + install -Dm755 unix/povray "$pkgdir/usr/bin/povray" + install -Dm644 povray.conf "$pkgdir/etc/povray/$_v/povray.conf" + install -Dm644 povray.ini "$pkgdir/etc/povray/$_v/povray.ini" + install -Dm644 povray.1 "$pkgdir/usr/share/man/man1/povray.1" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pqiv/PKGBUILD b/pqiv/PKGBUILD new file mode 100644 index 0000000..da703f5 --- /dev/null +++ b/pqiv/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=pqiv +pkgver=2.12 +pkgrel=2 +pkgdesc="Powerful image viewer with minimal UI" +arch=('i686' 'x86_64') +url='https://github.com/phillipberndt/pqiv' +license=('GPL-3') +depends=('gtk' 'gdk-pixbuf2' 'glib2' 'cairo') +optdepends=('ffmpeg: rudimentary video support' + 'libarchive: archives and cbX comic book support' + 'libspectre: PS/EPS support' + 'poppler-glib: rudimentary PDF support') +makedepends=('ffmpeg' 'libarchive' 'libspectre' 'poppler-glib') +source=("https://github.com/phillipberndt/pqiv/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('f921d7949c9d229536188e9652cc687dcc55127875f329d0a64e6e2a55ea1a6827c0df6925685ae923ba1a000fbf2d2dc1dd825e67a12815a49b2cb703ea2e2f') + +build() { + cd ${pkgname}-${pkgver} + ./configure --backends-build=shared + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/pragha/PKGBUILD b/pragha/PKGBUILD new file mode 100644 index 0000000..87b870f --- /dev/null +++ b/pragha/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=pragha +pkgver=1.3.4 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Lightweight GTK music player and manager" +arch=('i686' 'x86_64') +url='https://pragha-music-player.github.io/' +license=('GPL-3') +depends=('gst-plugins-base' 'gst-plugins-good' 'gtk' 'libpeas' 'taglib' 'totem-pl-parser') +optdepends=('gst-libav: Extra media codecs' + 'gst-plugins-bad: Extra media codecs' + 'gst-plugins-ugly: Extra media codecs' + 'libcdio-paranoia: Play cdrom plugin' + 'libkeybinder3: Global Hotkeys plugin' + 'libmtp: MTP Devices plugin') +makedepends=('intltool' 'gobject-introspection' 'libcdio-paranoia' 'libkeybinder3' 'libmtp' 'quilt' 'mesa-libgl') +source=("https://github.com/pragha-music-player/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/p/pragha/pragha_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('65aadf68f427f03ea7ca07d2002806eb94019c8091a80320da7d8ff4c2f0cd912e9c346956188b42d2b7a68c56c79ee5af8e8327c69ad69f4a1fa5b9e3b3ca58' + 'd7b30cf9f0afca0a60e3396eba5ddb7500c38adb25cf440ff8041db19ce9952a4517412f03ed70c23de13741317b2216d0ec1ecacf244f3b4675378dd3dd2423') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -i 's|(datadir)/appdata|(datadir)/metainfo|' data/Makefile.{am,in} +} + +build() { + cd $pkgname-$pkgver + CFLAGS="$CFLAGS -I/usr/include/gupnp-1.2 -I/usr/include/gssdp-1.2 -I/usr/include/libsoup-2.4" + ./configure --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/prboom-plus/PKGBUILD b/prboom-plus/PKGBUILD new file mode 100644 index 0000000..35c8b5b --- /dev/null +++ b/prboom-plus/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=prboom-plus +pkgver=2.6um +pkgrel=1 +pkgdesc="An advanced, vanilla-compatible Doom engine based on PrBoom" +url='https://sourceforge.net/projects/prboom-plus/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('fluidsynth' 'glu' 'libmad' 'portmidi' 'sdl_image' 'sdl_mixer' 'sdl_net') +makedepends=('cmake') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/coelckers/prboom-plus/archive/refs/tags/v$pkgver.tar.gz") +sha512sums=('c2f8c6895683ee22d729ad2c9dc10bd821e5bdb55d75b88b4c6db25b8f3604370d18285677660c82761912a159b0c1068a6fcf1c8333e20d849fa1087a74800f') + +_rootdir="${pkgname}-${pkgver}/prboom2" + +prepare() { + cd "${srcdir}" + sed -i -E 's/mktemp/mkstemp/g' $(find "${_rootdir}" -type f -name r_demo.c) +} + +build() { + cd "${srcdir}" + cmake \ + -B build \ + -S ${_rootdir} \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release + make -C build +} + +package() { + cd "${srcdir}" + make -C build DESTDIR="${pkgdir}" install + + # correct folder-structure + install -d "${pkgdir}/usr/games" + cp -R "${pkgdir}/usr/bin/"* "${pkgdir}/usr/games" + rm -rf "${pkgdir}/usr/bin" + + install -Dm644 "${_rootdir}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/prboom/PKGBUILD b/prboom/PKGBUILD new file mode 100644 index 0000000..95f9a7d --- /dev/null +++ b/prboom/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=prboom +pkgver=2.5.0 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc="A free and libre game engine which provides a program to play Doom levels." +url='http://prboom.sourceforge.net/' +license=('GPL-2') +depends=('libpng' 'sdl_mixer' 'sdl_net' 'glu') +makedepends=('mesa') +groups=('games') +source=("https://downloads.sourceforge.net/prboom/$pkgname-$pkgver.tar.gz" + "fix-libpng.patch") +sha512sums=('9e25b55047c66931ea010751fb64484e466395b04dfb738ed9dc515bd8b78e1124a337da33bf7be6e97280016ed1f01c852d8bc12704bdb82074488d7b5d2894' + '40e55394b065c6cc383d331343a6a372413e6a1cd7c5cc463a53e4cbe440f7e2e9d0ff4ceff63fafcef534fb7f2ef1eb3531438de457134c3fcc8201f442b390') + +prepare() { + cd $pkgname-$pkgver + + # allow building with newer libpng + patch -p1 < $srcdir/fix-libpng.patch +} + +build() { + cd $pkgname-$pkgver + + CFLAGS="$CFLAGS -fcommon" \ + ./configure \ + --prefix=/usr \ + --disable-i386-asm \ + --disable-cpu-opt + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/prboom/fix-libpng.patch b/prboom/fix-libpng.patch new file mode 100644 index 0000000..a2215e3 --- /dev/null +++ b/prboom/fix-libpng.patch @@ -0,0 +1,21 @@ +diff -Naur prboom-2.5.0-orig/src/SDL/i_sshot.c prboom-2.5.0/src/SDL/i_sshot.c +--- prboom-2.5.0-orig/src/SDL/i_sshot.c 2010-01-24 23:26:03.000000000 -0500 ++++ prboom-2.5.0/src/SDL/i_sshot.c 2010-01-24 23:28:42.000000000 -0500 +@@ -231,7 +231,7 @@ + if (fp) + { + png_struct *png_ptr = png_create_write_struct( +- PNG_LIBPNG_VER_STRING, png_error_ptr_NULL, error_fn, warning_fn); ++ PNG_LIBPNG_VER_STRING, NULL, error_fn, warning_fn); + + if (png_ptr) + { +@@ -279,7 +279,7 @@ + break; + } + } +- png_destroy_write_struct(&png_ptr, png_infopp_NULL); ++ png_destroy_write_struct(&png_ptr, NULL); + } + fclose(fp); + } diff --git a/premake/PKGBUILD b/premake/PKGBUILD new file mode 100644 index 0000000..a263a10 --- /dev/null +++ b/premake/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=premake +pkgver=5.0beta1 +_pkgver=5.0.0-beta1 +pkgrel=1 +pkgdesc="A simple build configuration and project generation tool" +arch=('i686' 'x86_64') +url='https://premake.github.io/' +license=('Modified-BSD') +depends=('glibc') +source=("https://github.com/premake/premake-core/releases/download/v${_pkgver}/premake-${_pkgver}-src.zip") +sha512sums=('4745cfa796f3f7616b96c2541bca54ba91ef53310cd3a8b9891fcb22170b1b68ebe245471aa63d82fbd94a50643ddf468b66c85e32c1ce214cf5c65b5da27e62') + +build() { + cd "premake-$_pkgver-src/build/gmake2.unix" + + make config=release +} + +package() { + cd "premake-$_pkgver-src" + + install -Dm755 "bin/release/premake5" "${pkgdir}/usr/bin/premake5" + install -Dm644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/privoxy/PKGBUILD b/privoxy/PKGBUILD new file mode 100644 index 0000000..b36d65c --- /dev/null +++ b/privoxy/PKGBUILD @@ -0,0 +1,86 @@ +# Maintainer: Jesus E. + +pkgname=privoxy +pkgver=3.0.34 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Web proxy with advanced filtering capabilities" +arch=('i686' 'x86_64') +url='https://www.privoxy.org/' +license=('GPL-2' 'ISC') +depends=('pcre' 'zlib') +makedepends=('autoconf' 'quilt') +install='privoxy.install' +backup=('etc/privoxy/'{config,trust,match-all.action,{default,user}.{action,filter}} + 'etc/logrotate.d/privoxy') +source=("https://downloads.sourceforge.net/ijbswa/${pkgname}-${pkgver}-stable-src.tar.gz" + "https://deb.debian.org/debian/pool/main/p/$pkgname/${pkgname}_${_debver}-${_debrel}.debian.tar.xz" + "$pkgname.logrotate.d" + "$pkgname.initd" + "$pkgname.run") +sha512sums=('f963419ae2cb6dd72cd892fa043768d99a4118792833de2e666d6a800fbe9a7fcb0641f15e3211e0b01a74609c65aeb60af1051f1a19daa1048314599679b685' + '7024eae35f3026c8c8fbe13a42968a26bd7847d0bce30ea9d6154ea995835936aa606cd5080c33a5f7f50c19cd9f47457e1c37e6b0368b649cf29f456ce2d82b' + 'ca2cb0f06b723386166a916404f021f05544f96a359d94bac6e13c35da06216dde9d873fe4211e6bc267927aefbed0d812db1eb7901781a0f9c3afbf69a87b81' + '43e9cd8c11a309d975bdc8e0cc644c0738e7c135629b364b04d0c5f7eef400e65e87cb7fe3848117166c38745b809ed4b848259987bf8ef56403cab0978c7b6c' + '18299bef7311ab5cfc5c76eb7ac0142d95d34d2ef6b8ac6e62b9fdb1420d830487489097915bfa1ea6b2d33b5fb7a7f75d8cf7344bbf3d0f52f3672c9ab4407a') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}-stable" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/14_config.patch || true + rm -v debian/patches/34_system-docbook2man.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}-stable" + + autoheader + autoconf + ./configure --prefix=/usr \ + --sysconfdir=/etc/privoxy \ + --enable-compression + make + sed -i ' + s+^confdir \.+confdir /etc/privoxy+ + s+^logdir \.+logdir /var/log/privoxy+ + s+^#\?user-manual .*+user-manual /usr/share/doc/privoxy/user-manual/+' config +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}-stable" + + install -Dm755 "$srcdir/privoxy.run" "${pkgdir}/etc/sv/privoxy/run" + install -Dm755 "$srcdir/privoxy.initd" "$pkgdir/etc/init.d/privoxy" + install -Dm644 "$srcdir/privoxy.logrotate.d" "$pkgdir/etc/logrotate.d/privoxy" + + install -Dm755 {,"$pkgdir"/usr/sbin/}privoxy + install -Dm644 {,"$pkgdir"/usr/share/man/man8/}privoxy.8 + install -d -o42 -g42 "$pkgdir"/var/log/privoxy + + install -d "$pkgdir"/etc/privoxy/ + install -m644 config trust *.{action,filter} "$pkgdir"/etc/privoxy/ # -m0660 upstream + find templates -type f -exec install -Dm644 '{}' "$pkgdir"/etc/privoxy/'{}' \; + + (d="$pkgdir"/usr/share/doc/privoxy + cd doc/webserver + install -Dm644 {privoxy-,"$d"/}index.html + install -m644 p_doc.css ../../{AUTHORS,README,ChangeLog} "$d"/ + install -Dm644 {,"$d"/user-manual/}p_doc.css + find user-manual developer-manual faq man-page \( -name '*.html' -o -name '*.jpg' \) \ + -exec install -Dm644 '{}' "$d"/'{}' \;) + + install -Dm644 debian/copyright LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/privoxy/privoxy.initd b/privoxy/privoxy.initd new file mode 100644 index 0000000..767f878 --- /dev/null +++ b/privoxy/privoxy.initd @@ -0,0 +1,34 @@ +#!/sbin/openrc-run +# Copyright 2021 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="Privoxy service" + +command_background="yes" +pidfile="/var/run/privoxy.pid" +conffile="/etc/privoxy/config" + +depend() { + need net +} + +start() { + if [ ! -f "${conffile}" ]; then + eerror "Configuration file ${conffile} not found!" + return 1 + fi + + ebegin "Starting privoxy" + start-stop-daemon --start --quiet --exec /usr/sbin/privoxy \ + --pidfile "${pidfile}" \ + -- \ + --pidfile "${pidfile}" \ + --user privoxy.privoxy "${conffile}" + eend $? +} + +stop() { + ebegin "Stopping privoxy" + start-stop-daemon --stop --quiet --pidfile "${pidfile}" + eend $? +} diff --git a/privoxy/privoxy.install b/privoxy/privoxy.install new file mode 100644 index 0000000..b1c14a2 --- /dev/null +++ b/privoxy/privoxy.install @@ -0,0 +1,33 @@ +post_install() { + if ! getent group privoxy &>/dev/null; then + groupadd -g 42 privoxy >/dev/null + fi + if ! getent passwd privoxy &>/dev/null; then + useradd -c "Privoxy" -u 42 -g privoxy -G adm -d /var/spool/privoxy -s /bin/nologin privoxy >/dev/null + fi + chown -R privoxy:privoxy /etc/privoxy /var/log/privoxy + if [ ! -d /var/spool/privoxy ]; then + install -dm0770 -o privoxy -g privoxy /var/spool/privoxy + fi + if ! groups privoxy | grep adm &>/dev/null; then + gpasswd -a privoxy adm >/dev/null + fi + privoxy_shell=$(getent passwd privoxy | cut -d: -f7) + if [ "$privoxy_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin privoxy &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd privoxy &>/dev/null; then + userdel privoxy >/dev/null + fi + if getent group privoxy &>/dev/null; then + groupdel privoxy >/dev/null + fi + rm -rf var/spool/privoxy +} diff --git a/privoxy/privoxy.logrotate.d b/privoxy/privoxy.logrotate.d new file mode 100644 index 0000000..3f31b17 --- /dev/null +++ b/privoxy/privoxy.logrotate.d @@ -0,0 +1,9 @@ +/var/log/privoxy/logfile { + missingok + create 660 root privoxy + notifempty + compress + postrotate + /bin/kill -HUP `cat /var/run/privoxy.pid 2>/dev/null` 2> /dev/null || true + endscript +} diff --git a/privoxy/privoxy.run b/privoxy/privoxy.run new file mode 100644 index 0000000..b0fd2b3 --- /dev/null +++ b/privoxy/privoxy.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec chpst -U privoxy:privoxy /usr/sbin/privoxy --no-daemon /etc/privoxy/config 2>&1 diff --git a/profanity/PKGBUILD b/profanity/PKGBUILD new file mode 100644 index 0000000..5f3be83 --- /dev/null +++ b/profanity/PKGBUILD @@ -0,0 +1,91 @@ +# Maintainer: Jesus E. + +pkgbase=profanity +pkgname=('profanity' 'profanity-gtk') +pkgver=0.14.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Console based XMPP client" +arch=('i686' 'x86_64') +url='https://profanity-im.github.io/' +license=('GPL-3') +makedepends=('curl' 'ncurses' 'expat' 'glib2' 'libotr' 'gpgme' 'python' + 'gtk' 'autoconf-archive' 'libgcrypt' 'libx11' 'libxss' 'libxcrypt' 'glibc' + 'freetype2' 'readline' 'libassuan' 'harfbuzz' 'pango' 'gdk-pixbuf2' 'atk' + 'cairo' 'libgpg-error' 'libstrophe' 'quilt') +source=("https://github.com/profanity-im/profanity/archive/${pkgver}/${pkgbase}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/profanity/profanity_${_debver}-${_debrel}~bpo12+1.debian.tar.xz") +sha512sums=('a1715e755f879e386fd1a9bf00ad241930b4010c38dc05e5bd6ba81ca0f2b8d3e6a564f9a7f839a6a2112513d7fc664d2f16ec3b844de7b7cf83cdd26d4f076d' + 'd34efaba9b6698afad2bdce224ae3d7e278a8d7eceb43ad48ada76887df62b7a1c9a1b9b9a6831cfcb5f322812eced3a39bdb6d5177bb05621db871aab3d16b1') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + mkdir -p m4 + autoreconf -fiv + cp -a "${srcdir}"/${pkgname}-${pkgver}{,-gtk} +} + +build() { + echo "Building non-gtk variant..." + (cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --disable-icons-and-clipboard \ + --without-xscreensaver \ + --disable-notifications \ + --enable-python-plugins \ + --enable-c-plugins \ + --enable-plugins \ + --enable-otr \ + --disable-omemo \ + --enable-pgp + make + ) + echo "Building gtk variant..." + (cd ${pkgname}-${pkgver}-gtk + ./configure \ + --prefix=/usr \ + --enable-icons-and-clipboard \ + --with-xscreensaver \ + --disable-notifications \ + --enable-python-plugins \ + --enable-c-plugins \ + --enable-plugins \ + --enable-otr \ + --disable-omemo \ + --enable-pgp + make + ) +} + +package_profanity() { + depends=('curl' 'ncurses' 'expat' 'glib2' 'libotr' + 'libxcrypt' 'gpgme' 'python' 'libgcrypt' 'libstrophe' + 'glibc' 'readline' 'libassuan' 'libgpg-error') + cd ${pkgbase}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/$pkgname +} + +package_profanity-gtk() { + pkgdesc+=" (gtk support)" + depends=('curl' 'ncurses' 'expat' 'glib2' 'libotr' 'libxcrypt' 'gpgme' 'python' + 'libgcrypt' 'glibc' 'readline' 'libassuan' 'libgpg-error' 'libstrophe' + 'gtk' 'libxss' 'libx11' 'pango' 'freetype2' 'harfbuzz' 'gdk-pixbuf2' 'atk' 'cairo') + provides=('profanity') + conflicts=('profanity') + cd ${pkgbase}-${pkgver}-gtk + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/$pkgname +} diff --git a/proftpd/PKGBUILD b/proftpd/PKGBUILD new file mode 100644 index 0000000..75ebe65 --- /dev/null +++ b/proftpd/PKGBUILD @@ -0,0 +1,84 @@ +# Maintainer: Jesus E. + +pkgname=proftpd +pkgver=1.3.7a +_debver=$pkgver +_debrel=12 +pkgrel=2 +pkgdesc="High-performance, scalable FTP server" +arch=('i686' 'x86_64') +url='http://www.proftpd.org/' +license=('GPL-2') +depends=('postgresql-libs' 'libcap') +makedepends=('quilt') +backup=('etc/proftpd.conf') +install=$pkgname.install +options=('emptydirs') +source=("https://deb.debian.org/debian/pool/main/p/proftpd-dfsg/proftpd-dfsg_${pkgver}+dfsg.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/p/proftpd-dfsg/proftpd-dfsg_${_debver}+dfsg-${_debrel}+deb11u2.debian.tar.xz" + "$pkgname.initd" + "$pkgname.run" + "$pkgname.logrotate") +sha512sums=('ec230e5c2f9d0bdfb800c9f9fea0f978a6a23ba87428104bded9d48327645059a416db81185e80c12c8c6f2d3749a24129df9e86c33ce899cee8f6370adb9bd6' + 'f6febe2f09d908e12603f1224de3e8c7b608104d7131dc0f98b239dc88559281bd518c12d326d9ee30c0a81e9cb3fe167e71df5735f5d7b6844e7bc168133ce1' + 'cc09e01fab3e978ffb64d16dd0d4c991646c706046cba4669825067c8186db3199388bea129622dc2e92f3db8d3465489f7fe46a0e64f3f2e79c542e2d4bb6e0' + '6472e06cfb728270f147551c49ed18c5830528d053788b08ca7061bd8de02fcc6c2d3d511c661fd6c301418a486d1a92856536fa61f562b05ff471e1d6470c01' + '142f8ba096844eb48883cdd3890fa3c0c4c8f73f7ce4f2acd5fb742053f8a3605b3f6ca5d5ab6c62c673d76eb60885d796af55bd7b53950794c4e7e2837973b8') + +prepare() { + mv "${pkgname}-dfsg-${pkgver}+dfsg" "${pkgname}-${pkgver}" + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/autotools || true + rm -v debian/patches/change_pam_name || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --disable-pam \ + --disable-redis \ + --with-modules=mod_sftp:mod_quotatab:mod_quotatab_sql:mod_quotatab_file:mod_tls:mod_tls_shmcache:mod_ldap:mod_sql:mod_sql_postgres:mod_facl:mod_dynmasq \ + --sysconfdir=/etc \ + --localstatedir=/run/proftpd \ + --enable-ctrls \ + --enable-ipv6 \ + --with-includes=/usr/include/postgresql \ + --with-libraries=/usr/lib/postgresql \ + --enable-nls \ + --enable-facl + + make CFLAGS="$CFLAGS -fcommon" +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + sed -i 's|nogroup|nobody|g' "${pkgdir}/etc/proftpd.conf" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + + install -Dm644 ${srcdir}/$pkgname.logrotate "${pkgdir}/etc/logrotate.d/$pkgname" + install -Dm755 ${srcdir}/$pkgname.initd "${pkgdir}/etc/init.d/$pkgname" + install -Dm755 ${srcdir}/$pkgname.run "${pkgdir}/etc/sv/$pkgname/run" + install -Dm755 contrib/xferstats.holger-preiss "${pkgdir}/usr/bin/ftpstats" + install -d "${pkgdir}/var/lib/ftp" + + # cleanup + rmdir "${pkgdir}"/run/{proftpd,} +} diff --git a/proftpd/proftpd.initd b/proftpd/proftpd.initd new file mode 100644 index 0000000..a784cde --- /dev/null +++ b/proftpd/proftpd.initd @@ -0,0 +1,35 @@ +#!/sbin/openrc-run + +name="ProFTPD" +description="ProFTPD FTP Server" + +pidfile="/run/proftpd/proftpd.pid" +command="/usr/sbin/proftpd" +command_args="-n" +command_background="yes" +required_files="/etc/proftpd.conf" +extra_commands="checkconfig" +extra_started_commands="reload" +description_checkconfig="Check configuration" +description_reload="Reload configuration" + +depend() { + need net + use logger dns + after firewall +} + +checkconfig() { + $command -t +} + +start_pre() { + checkpath --directory ${pidfile%/*} + checkconfig >/dev/null 2>&1 +} + +reload() { + ebegin "Reloading ${name:-$RC_SVCNAME}" + checkconfig >/dev/null 2>&1 && start-stop-daemon --signal HUP --pidfile $pidfile + eend $? +} diff --git a/proftpd/proftpd.install b/proftpd/proftpd.install new file mode 100644 index 0000000..58a6343 --- /dev/null +++ b/proftpd/proftpd.install @@ -0,0 +1,24 @@ +post_install() { + if ! getent group proftpd &>/dev/null; then + groupadd -r proftpd >& /dev/null + fi + if ! getent passwd proftpd &>/dev/null; then + useradd -r -d /var/lib/ftp -g proftpd -s /bin/false proftpd + usermod -aG ftp proftpd + fi + + chown proftpd:proftpd /var/lib/ftp +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + if getent passwd proftpd &>/dev/null; then + userdel proftpd >/dev/null + fi + if getent group proftpd &>/dev/null; then + groupdel proftpd >/dev/null + fi +} diff --git a/proftpd/proftpd.logrotate b/proftpd/proftpd.logrotate new file mode 100644 index 0000000..6bc5056 --- /dev/null +++ b/proftpd/proftpd.logrotate @@ -0,0 +1,9 @@ +/var/log/proftpd/*.log /var/log/xferlog { + compress + missingok + notifempty + sharedscripts + postrotate + /etc/init.d/proftpd --ifstarted --quiet reload + endscript +} diff --git a/proftpd/proftpd.run b/proftpd/proftpd.run new file mode 100644 index 0000000..d543306 --- /dev/null +++ b/proftpd/proftpd.run @@ -0,0 +1,3 @@ +#!/bin/sh -e +/usr/sbin/proftpd -n +exec pause 2>&1 diff --git a/proj/PKGBUILD b/proj/PKGBUILD new file mode 100644 index 0000000..d2e0d08 --- /dev/null +++ b/proj/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=proj +pkgver=7.2.1 +pkgrel=1 +_gridver=1.8 +pkgdesc='Cartographic Projections library' +arch=('i686' 'x86_64') +url="https://trac.osgeo.org/proj/" +license=('Expat') +depends=('libtiff') +makedepends=('autoconf' 'sqlite') +source=(https://github.com/OSGeo/PROJ/releases/download/$pkgver/$pkgname-$pkgver.tar.gz + https://download.osgeo.org/$pkgname/$pkgname-datumgrid-$_gridver.zip) +noextract=("$pkgname-datumgrid-$_gridver.zip") +sha512sums=('59b9b31b0183e620a2f4a25a08620c170773fe4f99e8eca59e9ed6815f43bb379ea21ef71e8f759dbd747855b982657d7503bac3acc542218e0d862105f25324' + '991206f17348b3de484eb5364d773cd06577057228c2d1a0a1c1658308e2596ca13338a666fa71ddd76d538f23dd5bf21e178fd26a785717edd847a17e5c0cd1') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + + autoreconf -vfi +} + +build(){ + cd "${srcdir}"/$pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname + bsdtar --no-same-owner -xzvf "${srcdir}"/$pkgname-datumgrid-$_gridver.zip -C "${pkgdir}"/usr/share/$pkgname +} diff --git a/prosody/PKGBUILD b/prosody/PKGBUILD new file mode 100644 index 0000000..766cb13 --- /dev/null +++ b/prosody/PKGBUILD @@ -0,0 +1,93 @@ +# Maintainer: Jesus E. +# Old Maintainer (Arch): Dwayne Bent +# Old Maintainer (Arch): Tilman Vatteroth + +pkgname=prosody +epoch=1 +pkgver=0.11.9 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc='Lightweight and extensible Jabber/XMPP server written in Lua' +arch=('i686' 'x86_64') +url='https://prosody.im/' +license=('Expat') +depends=('lua52' 'lua52-socket' 'lua52-expat' 'lua52-filesystem' 'lua52-sec' + 'libidn' 'libressl') +makedepends=('quilt') +conflicts=('prosody') +provides=('prosody') +optdepends=('lua52-dbi: SQL storage support') +install=prosody.install +backup=('etc/prosody/prosody.cfg.lua') +source=("https://prosody.im/downloads/source/prosody-${pkgver}.tar.gz"{,.asc} + "https://deb.debian.org/debian/pool/main/p/prosody/prosody_${_debver}-${_debrel}+deb11u2.debian.tar.xz" + "prosody.initd" + "prosody.run" + "prosody.logrotated") +sha512sums=('fabbbbb1acb3de4ff01e3e8c6e9e4dc37cb161259f1649683a1f9d925ed9f1709e052bfc831cba3f1861a9cca599f2b725ee739bfcb57164d6f50ac07011b52a' + 'SKIP' + '3b398abcc82be9461064cbf0c2ab6f895dd0b7810ce1fa0f8b1a7f02f5211ddc95ee0c0d7c40abda5e1b0229486671b837a760da674a2eacec7e4138d558cc48' + '06fd900a06536ba334580dd49539b0ca8f9fb4f5706bf39d4acfd3266d265d404554cddc5e0378be2b650ecf6277d4852ea7f25cccc66f158646ad7cd1f71e57' + '6ba1aeeab49aa64401e45f969fac6eca3dbc36dd74e4c1bf03aed315399bf086c14c3d2f10f269a7e8cffbe48a789b4fdaddb65961698d20c89b3b5f3d91ecf3' + '7867ac1303c09ed50c8b3f9a204fd7a970ba063e39a2bcdc95925a2192240b3000461d054f3d162b4cfd66de90c291af754df8945cdf257b058f998bca5c4c4f') +validpgpkeys=('32A9EDDE3609931EB98CEAC315907E8E7BDD6BFE' + '3E52119EF853C59678DBBF6BADED9A77B67AD329' + 'C01A477A8F69E6E57F5C54CDE7AB958013F1F1D5') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-conf.patch || true + + quilt push -av + fi + + # disable logging to output and activate syslog + sed -i s/"info = "/"-- info = "/g prosody.cfg.lua.dist + sed -i s/"error = "/"-- error = "/g prosody.cfg.lua.dist + sed -i s/"--\ \"\*syslog\"\;"/"info = \"*syslog\"\;"/g prosody.cfg.lua.dist + +} + +build() { + cd prosody-$pkgver + ./configure \ + --ostype=linux \ + --prefix=/usr \ + --sysconfdir=/etc/prosody \ + --datadir=/var/lib/prosody \ + --with-lua-include=/usr/include/lua5.2 \ + --cflags="${CPPFLAGS} ${CFLAGS} -fPIC -D_GNU_SOURCE" \ + --ldflags="${LDFLAGS} -shared" \ + --no-example-certs \ + --runwith=lua5.2 + make +} + +package() { + cd prosody-$pkgver + make DESTDIR="${pkgdir}" install + make DESTDIR="${pkgdir}" install -C tools/migration + + # services + install -Dm755 "${srcdir}"/${pkgname}.initd "${pkgdir}"/etc/init.d/${pkgname} + install -Dm755 "${srcdir}/${pkgname}.run" "${pkgdir}/etc/sv/${pkgname}/run" + + for i in tools/*.lua; do + install -Dm 0644 ${i} "${pkgdir}"/usr/share/prosody/${i} + done + + install -Dm 0644 COPYING "${pkgdir}"/usr/share/licenses/prosody/COPYING + install -Dm 0644 "$srcdir"/prosody.logrotated "${pkgdir}"/etc/logrotate.d/prosody + rm "${pkgdir}"/etc/prosody/certs/* +} diff --git a/prosody/prosody.initd b/prosody/prosody.initd new file mode 100644 index 0000000..c7ccec4 --- /dev/null +++ b/prosody/prosody.initd @@ -0,0 +1,47 @@ +#!/sbin/openrc-run +# Copyright 1999-2014 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="Prosody is a server for Jabber/XMPP written in Lua." +description_reload="Reload configuration and reopen log files." +extra_started_commands="reload" +pidfile="/var/run/prosody/prosody.pid" + +depend() { + use dns + need net + provide jabber-server +} + +checkconfig() { + if [ ! -e /etc/prosody/prosody.cfg.lua ] ; then + eerror "You need a /etc/prosody/prosody.cfg.lua file to run prosody" + return 1 + fi + luac5.2 -p /etc/prosody/prosody.cfg.lua + return $? +} + +start() { + checkconfig || return 1 + checkpath -q -d -m 0770 -o prosody:prosody "$(dirname ${pidfile})" + checkpath -q -f -m 0770 -o prosody:prosody "${pidfile}" + checkpath -q -d -m 0750 -o prosody:prosody /var/log/prosody + ebegin "Starting Prosody XMPP Server" + prosodyctl start + eend $? +} + +stop() { + ebegin "Stopping Prosody XMPP Server" + prosodyctl stop + eend $? +} + +reload() { + checkconfig || return 1 + ebegin "Reloading configuration of Prosody XMPP Server" + prosodyctl reload + eend $? +} diff --git a/prosody/prosody.install b/prosody/prosody.install new file mode 100644 index 0000000..af9e2d0 --- /dev/null +++ b/prosody/prosody.install @@ -0,0 +1,48 @@ +post_install() { + if ! getent group prosody &>/dev/null; then + groupadd -g 412 prosody >/dev/null + fi + if ! getent passwd prosody &>/dev/null; then + useradd -u 412 -d /var/lib/prosody -g prosody -s /bin/nologin prosody >/dev/null + fi + + chown prosody:prosody /var/lib/prosody + + install -d -m750 /var/log/prosody + chown prosody:prosody /var/log/prosody + + prosody_shell=$(getent passwd prosody | cut -d: -f7) + if [ "$prosody_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin prosody &>/dev/null + fi + + echo ">> Documentation: http://wiki.archlinux.org/index.php/Prosody" + echo ">> gpasswd -a prosody" +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd prosody &>/dev/null; then + userdel prosody >/dev/null + fi + if getent group prosody &>/dev/null; then + groupdel prosody >/dev/null + fi + + paths=(/etc/prosody /var/lib/prosody /var/log/prosody + /var/log/old/prosody) + + first=true + for path in ${paths[@]}; do + if [ -d $path ]; then + if $first; then + first=false + echo "==> Leftover Paths:" + fi + echo "==> $path" + fi + done +} diff --git a/prosody/prosody.logrotated b/prosody/prosody.logrotated new file mode 100644 index 0000000..1387623 --- /dev/null +++ b/prosody/prosody.logrotated @@ -0,0 +1,9 @@ +/var/log/prosody/prosody.log /var/log/prosody/prosody.err { + # olddir /var/log/old/prosody + create 644 prosody prosody + sharedscripts + missingok + postrotate + /bin/kill -HUP `cat /run/prosody/prosody.pid 2> /dev/null` 2> /dev/null || true + endscript +} diff --git a/prosody/prosody.run b/prosody/prosody.run new file mode 100644 index 0000000..8db85df --- /dev/null +++ b/prosody/prosody.run @@ -0,0 +1,7 @@ +#!/bin/sh +mkdir -p /run/prosody +chown prosody:prosody /run/prosody +chown prosody:prosody /var/lib/prosody +sed -i 's/daemonize = true/daemonize = false/' /etc/prosody/prosody.cfg.lua +chpst -u prosody:prosody prosody +exec pause diff --git a/proxychains/PKGBUILD b/proxychains/PKGBUILD new file mode 100644 index 0000000..59e4836 --- /dev/null +++ b/proxychains/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=proxychains +_realpkgname=proxychains-ng +pkgver=4.16 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A hook preloader that allows to redirect TCP traffic of existing dynamically linked programs through one or more SOCKS or HTTP proxies" +arch=('i686' 'x86_64') +url='https://github.com/rofl0r/proxychains-ng' +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +backup=('etc/proxychains.conf') +source=("https://github.com/rofl0r/proxychains-ng/archive/v${pkgver}/${_realpkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/proxychains-ng/proxychains-ng_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('a929a6caa0e648e23eadb393ef7d0930ff92a84d77a8eff940b83e45f9410dc6bf6be225554254f63bc215bb043a024d4e82274eb17330cae41985d64be1050e' + '5ae78cdb9dc2f4a0740f42fc62fee5a6595876f7d64aba39c21858be7e456350fa2be6866f85e411309898eed4d61baaef010b77e235be0b3dd295ee9a258e09') + +prepare() { + cd proxychains-ng-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd proxychains-ng-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd proxychains-ng-$pkgver + make DESTDIR="$pkgdir/" install install-config + ln -s proxychains4 "$pkgdir/usr/bin/proxychains" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/pstoedit/PKGBUILD b/pstoedit/PKGBUILD new file mode 100644 index 0000000..4b1fbec --- /dev/null +++ b/pstoedit/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=pstoedit +pkgver=3.75 +pkgrel=1 +pkgdesc='Translates PostScript and PDF graphics into other vector formats' +arch=('i686' 'x86_64') +url='http://www.pstoedit.net/' +license=('GPL-2') +depends=('gcc-libs' 'plotutils' 'gd') +makedepends=('ghostscript') +source=("https://downloads.sourceforge.net/sourceforge/pstoedit/pstoedit-${pkgver}.tar.gz") +sha512sums=('54b8cf7e78e52027d45e7550821476d9a9c4df4f63af83792b6a2909bc62236450ba6b619f95eede9f61a715f4937f1fbaf2ce4ae4b486daa0294c396a882a28') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + autoreconf -vi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr --without-magick + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 copying -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/pstotext/PKGBUILD b/pstotext/PKGBUILD new file mode 100644 index 0000000..e96c39d --- /dev/null +++ b/pstotext/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=pstotext +pkgver=1.9 +_debver=1.9 +_debrel=6 +pkgrel=1 +pkgdesc='Converts Postscript to text' +arch=('i686' 'x86_64') +url='https://www.cs.wisc.edu/~ghost/doc/pstotext.htm' +license=('Modified-BSD') +depends=('ghostscript') +makedepends=('quilt') +source=(https://deb.debian.org/debian/pool/main/p/pstotext/pstotext_${pkgver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/p/pstotext/pstotext_${_debver}-${_debrel}.debian.tar.gz + copyright) +sha512sums=('a8148e94d635544a7dfa8c96ff6071717388e4dc6c3db36f2c50939dce96c1f824ee423b1622af9111fffc60cb298215a6ee85d956c81873d71ceac804ee48ca' + 'cf06c5da84ffea9f21897787d453bd7dbbff4ac787f0a05c85eab1187f3e2f3d8d22baf11a4facb28b06041aaa23ed018edfe4e0e22b8096121d86c964f1e9a8' + 'd0bb3f7946f9dc8042d480afe3f333a873bf8a47a20f4eddf6285490819683b6040b77c727ac39ee13f26d14004dd538fbd802a47ba8f15a1b1612394d9b7ca9') + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/doc-path.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir"/$pkgname-$pkgver + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + install -Dm755 pstotext "$pkgdir"/usr/bin/pstotext + install -Dm644 pstotext.1 "$pkgdir"/usr/share/man/man1/pstotext.1 + install -Dm644 $srcdir/copyright -t "${pkgdir}"/usr/share/licenses/${pkgname} +} + diff --git a/pstotext/copyright b/pstotext/copyright new file mode 100644 index 0000000..97562e4 --- /dev/null +++ b/pstotext/copyright @@ -0,0 +1,160 @@ +=================================================================== +pstotext.txt 9 Jan 2004 +=================================================================== +pstotext 1.9 - PostScript text extractor. Requires Ghostscript. + +The files pstotxt1.dll (Win16), pstotxt2.dll (OS/2) pstotxt3.dll (Win32), and +pstotext.zip (sources) constitute the pstotext package, which was written by +Paul McJones and Andrew Birrell of Digital Equipment Corporation's Systems +Research Center. These files are copyright by Digital Equipment Corporation. +You may use them subject to the attached END USER LICENSE AGREEMENT. + +The source files are available in the GSview source distribution, +or directly from the authors: + http://www.research.digital.com/SRC/virtualpaper/pstotext.html + +You can build DLL and command-line versions of pstotext for various +platforms from the sources: + PLATFORM BUILD FILE + Unix Makefile + Win16 pstotxt1.mak + OS/2 pstotxt2.mak + Win32 pstotxt3.mak (Borland C++ 4.5) + Win32 pstotxtv.mak (Microsoft Visual Studio) + VMS descrip.mms + +pstotext was developed as a part of the Virtual Paper system, which is +a high-quality viewer for computer-generated or scanned documents. +See: + http://www.research.digital.com/SRC/virtualpaper/ + +We appreciate Russell Lang's willingness to incorporate pstotext in +GSview, and his help in redesigning the API to the DLL module and in +debugging the final version. We thank Hunter Goatley for the VMS +port. + +You can contact the authors at and +. +For Windows and OS, contact gsview@ghostgum.com.au; +for VMS, contact . + +Version 1.9 is a modification of 1.8h to recognise excessive space in +"ashow" as being a word separator, as found output from groff 1.08. +Also fixed widthshow, awidthshow and added xshow, yshow and xyshow. +Uses ANSI prototypes. These are now required, not optional. +Fixes a number of compiler warnings. +Note that neither of the original authors still work at DEC/Compaq/HP. +2004-01-09 by Russell Lang at Ghostgum Software Pty Ltd. + +Version 1.8h is a modification of the original 1.8 to allow +operation with Aladdin Ghostscript 6.0, to add -output to +Windows and OS/2 executables, and to insert line breaks +and form feeds is pstotext output. Modifications made +2000-07-15 by Russell Lang at Ghostgum Software Pty Ltd. +main.c changed to use mkstemp not tempnam for Unix, +2000-06-02 by Russell Lang at Ghostgum Software Pty Ltd. + + + ========================== + END USER LICENSE AGREEMENT + ========================== + +GRANT. Subject to the provisions contained herein, Digital Equipment +Corporation ("Digital") hereby grants you a non-exclusive license to +use its accompanying proprietary software product and associated +documentation ("Software") free of charge pursuant to the terms and +conditions of this Agreement. + +You are not entitled to support or telephone assistance in connection +with your use of the Software. + +SOFTWARE AND DOCUMENTATION. Digital shall furnish the Software to you +electronically or on media in source code form. This license does not +grant you any right to any enhancement or update to the Software and +Documentation. + +USE RESTRICTIONS. You may use, copy, modify, and distribute the +Software in source code or object code form, subject to the following +conditions: + + (1) If the Software is modified, any Software containing +modifications must prominently state in the modified product or +documentation (i) that it has been modified, (ii) the identity of the +person or entity that made the modifications, and (iii) the date the +modifications were made. + + (2) Each copy of the Software made by you shall be subject to +the terms of this Agreement and shall contain all of Digital's notices +regarding copyrights, trademarks and other proprietary rights as +contained in the Software originally provided to you. + + (3) The Software may not be transferred to any third party +unless such third party receives a copy of this Agreement and agrees +to be bound by all of its terms and conditions. + +TITLE. Title, ownership rights, and intellectual property rights in +and to the Software shall remain in Digital and/or its suppliers. The +Software is protected by the copyright laws of the United States and +international copyright treaties. + +CONTENT. Title, ownership rights, and intellectual property rights in +and to the content accessed through the Software is the property of +the applicable content owner and may be protected by applicable +copyright or other law. This License gives you no rights to such +content. + +DISCLAIMER OF WARRANTY. Since the Software is provided free of +charge, the Software is provided on an "AS IS" basis, without warranty +of any kind, including without limitation the warranties of +merchantability, fitness for a particular purpose and +non-infringement. The entire risk as to the quality and performance +of the Software is borne by you. Should the Software prove defective, +you, and not Digital assume the entire cost of any service and repair. +This disclaimer of warranty constitutes an essential part of the +agreement. + +LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL +THEORY, TORT, CONTRACT, OR OTHERWISE, SHALL DIGITAL OR ITS SUPPLIERS +RESELLERS, OR LICENSEES BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY +CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, +STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER +COMMERCIAL DAMAGES OR LOSSES, EVEN IF DIGITAL SHALL HAVE BEEN INFORMED +OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER +PARTY. + +EXPORT CONTROLS. You may not download or otherwise export or reexport +the Software or any underlying information or technology except in +full compliance with all United States and other applicable laws and +regulations. By downloading or using the Software, you are agreeing +to the foregoing. + +TERMINATION. This Agreement shall automatically terminate upon +failure by you to comply with its terms, in which case you shall +immediately discontinue the use of the Software and shall within ten +(10) days return to Digital or destroy all copies of the Software. +You may also terminate this Agreement at any time by destroying the +Software and all copies thereof. + +MISCELLANEOUS. This Agreement represents the complete and exclusive +statement of the agreements concerning this license between the +parties. It may be amended only by a writing executed by both +parties. If any provision of this Agreement is held to be +unenforceable for any reason, such provision shall be reformed only to +the extent necessary to make it enforceable, and such decision shall +not affect the enforceability (i) of such provision under other +circumstances or (ii) of the remaining provisions hereof under all +circumstances. Headings shall not be considered in interpreting this +Agreement. This Agreement shall be governed by and construed under +the laws of the Commonwealth of Massachusetts, except as governed by +Federal law. This Agreement will not be governed by the United +Nations Convention of Contracts for the International Sale of Goods, +the application of which is hereby expressly excluded. + +U.S. Government Restricted Rights. Use, duplication or disclosure by +the Government is subject to restrictions set forth in subparagraphs +(a) through (d) of the Commercial Computer-Restricted Rights clause at +FAR 52 227-19 when applicable, or in subparagraph (c) (1) (ii) of the +Rights in Technical Data and Computer Software clause at DFARS +252.227-7013, and in similar clauses in the NASA FAR Supplement. +Contractor/manufacturer is Digital Equipment Corporation. diff --git a/psutils/PKGBUILD b/psutils/PKGBUILD new file mode 100644 index 0000000..004e0bd --- /dev/null +++ b/psutils/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=psutils +pkgver=2.05 +pkgrel=1 +arch=('any') +pkgdesc='A set of postscript utilities' +url='https://github.com/rrthomas/psutils' +license=('GPL-3') +depends=('glibc' 'ghostscript' 'perl' 'perl-ipc-run3' 'libpaper') +options=('!makeflags') +source=("https://github.com/rrthomas/psutils/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('6d32653af67466daaae8b640e047ea19f07fa678b2a416fc82b3c83b9961ea6a3f298ec84154033e4ab0cca990d63c44f286eaedb6df6a5022a985491b8c18b0') + +build() { + cd ${pkgname}-${pkgver} + + export CFLAGS="$CFLAGS -DPAPER=\\\"letter\\\" -DUNIX -Wall" \ + export CCFLAGS="$LDFLAGS" + + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ptlib/MPL-1.0.txt b/ptlib/MPL-1.0.txt new file mode 100644 index 0000000..f7f2ff1 --- /dev/null +++ b/ptlib/MPL-1.0.txt @@ -0,0 +1,360 @@ + MOZILLA PUBLIC LICENSE + Version 1.0 + + ---------------- + +1. Definitions. + + 1.1. ``Contributor'' means each entity that creates or contributes to + the creation of Modifications. + + 1.2. ``Contributor Version'' means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. ``Covered Code'' means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. ``Electronic Distribution Mechanism'' means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. ``Executable'' means Covered Code in any form other than Source + Code. + + 1.6. ``Initial Developer'' means the individual or entity identified as + the Initial Developer in the Source Code notice required by Exhibit A. + + 1.7. ``Larger Work'' means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. ``License'' means this document. + + 1.9. ``Modifications'' means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. ``Original Code'' means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this License + is not already Covered Code governed by this License. + + 1.11. ``Source Code'' means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus any + associated interface definition files, scripts used to control + compilation and installation of an Executable, or a list of source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. ``You'' means an individual or a legal entity exercising rights + under, and complying with all of the terms of, this License or a future + version of this License issued under Section 6.1. For legal entities, + ``You'' includes any entity which controls, is controlled by, or is + under common control with You. For purposes of this definition, + ``control'' means (a) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (b) ownership of fifty percent (50%) or more of the + outstanding shares or beneficial ownership of such entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + + (a) to use, reproduce, modify, display, perform, sublicense and + distribute the Original Code (or portions thereof) with or without + Modifications, or as part of a Larger Work; and + + (b) under patents now or hereafter owned or controlled by Initial + Developer, to make, have made, use and sell (``Utilize'') the + Original Code (or portions thereof), but solely to the extent that + any such patent is reasonably necessary to enable You to Utilize + the Original Code (or portions thereof) and not to any greater + extent that may be necessary to Utilize further Modifications or + combinations. + + 2.2. Contributor Grant. + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + + (a) to use, reproduce, modify, display, perform, sublicense and + distribute the Modifications created by such Contributor (or + portions thereof) either on an unmodified basis, with other + Modifications, as Covered Code or as part of a Larger Work; and + + (b) under patents now or hereafter owned or controlled by + Contributor, to Utilize the Contributor Version (or portions + thereof), but solely to the extent that any such patent is + reasonably necessary to enable You to Utilize the Contributor + Version (or portions thereof), and not to any greater extent that + may be necessary to Utilize further Modifications or combinations. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be distributed + only under the terms of this License or a future version of this + License released under Section 6.1, and You must include a copy of this + License with every copy of the Source Code You distribute. You may not + offer or impose any terms on any Source Code version that alters or + restricts the applicable version of this License or the recipients' + rights hereunder. However, You may include an additional document + offering the additional rights described in Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which you contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that the + Modification is derived, directly or indirectly, from Original Code + provided by the Initial Developer and including the name of the Initial + Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + + (a) Third Party Claims. + If You have knowledge that a party claims an intellectual property + right in particular functionality or code (or its utilization + under this License), you must include a text file with the source + code distribution titled ``LEGAL'' which describes the claim and + the party making the claim in sufficient detail that a recipient + will know whom to contact. If you obtain such knowledge after You + make Your Modification available as described in Section 3.2, You + shall promptly modify the LEGAL file in all copies You make + available thereafter and shall take other steps (such as notifying + appropriate mailing lists or newsgroups) reasonably calculated to + inform those who received the Covered Code that new knowledge has + been obtained. + + (b) Contributor APIs. + If Your Modification is an application programming interface and + You own or control patents which are reasonably necessary to + implement that API, you must also include this information in the + LEGAL file. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code, and this License in any documentation for the Source Code, where + You describe recipients' rights relating to Covered Code. If You + created one or more Modification(s), You may add your name as a + Contributor to the notice described in Exhibit A. If it is not possible + to put such notice in a particular Source Code file due to its + structure, then you must include such notice in a location (such as a + relevant directory file) where a user would be likely to look for such + a notice. You may choose to offer, and to charge a fee for, warranty, + support, indemnity or liability obligations to one or more recipients + of Covered Code. However, You may do so only on Your own behalf, and + not on behalf of the Initial Developer or any Contributor. You must + make it absolutely clear than any such warranty, support, indemnity or + liability obligation is offered by You alone, and You hereby agree to + indemnify the Initial Developer and every Contributor for any liability + incurred by the Initial Developer or such Contributor as a result of + warranty, support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of the + Covered Code is available under the terms of this License, including a + description of how and where You have fulfilled the obligations of + Section 3.2. The notice must be conspicuously included in any notice in + an Executable version, related documentation or collateral in which You + describe recipients' rights relating to the Covered Code. You may + distribute the Executable version of Covered Code under a license of + Your choice, which may contain terms different from this License, + provided that You are in compliance with the terms of this License and + that the license for the Executable version does not attempt to limit + or alter the recipient's rights in the Source Code version from the + rights set forth in this License. If You distribute the Executable + version under a different license You must make it absolutely clear + that any terms which differ from this License are offered by You alone, + not by the Initial Developer or any Contributor. You hereby agree to + indemnify the Initial Developer and every Contributor for any liability + incurred by the Initial Developer or such Contributor as a result of + any such terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to statute + or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and + the code they affect. Such description must be included in the LEGAL + file described in Section 3.4 and must be included with all + distributions of the Source Code. Except to the extent prohibited by + statute or regulation, such description must be sufficiently detailed + for a recipient of ordinary skill to be able to understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A, and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation (``Netscape'') may publish revised + and/or new versions of the License from time to time. Each version will + be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If you create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), you must (a) rename Your license so that the + phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL'' or + any confusingly similar phrase do not appear anywhere in your license + and (b) otherwise make it clear that your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial Developer, + Original Code or Contributor in the notice described in Exhibit A shall + not of themselves be deemed to be modifications of this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER + PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF + GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND + ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE + BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT + EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a ``commercial item,'' as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer + software'' and ``commercial computer software documentation,'' as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if any, + provides otherwise), excluding its conflict-of-law provisions. With + respect to disputes in which at least one party is a citizen of, or an + entity chartered or registered to do business in, the United States of + America: (a) unless otherwise agreed in writing, all disputes relating + to this License (excepting any dispute relating to intellectual + property rights) shall be subject to final and binding arbitration, + with the losing party paying all costs of arbitration; (b) any + arbitration relating to this Agreement shall be held in Santa Clara + County, California, under the auspices of JAMS/EndDispute; and (c) any + litigation relating to this Agreement shall be subject to the + jurisdiction of the Federal Courts of the Northern District of + California, with venue lying in Santa Clara County, California, with + the losing party responsible for costs, including without limitation, + court costs and reasonable attorneys fees and expenses. The application + of the United Nations Convention on Contracts for the International + Sale of Goods is expressly excluded. Any law or regulation which + provides that the language of a contract shall be construed against the + drafter shall not apply to this License. + +12. RESPONSIBILITY FOR CLAIMS. + + Except in cases where another Contributor has failed to comply with + Section 3.4, You are responsible for damages arising, directly or + indirectly, out of Your utilization of rights under this License, based + on the number of copies of Covered Code you made available, the + revenues you received from utilizing such rights, and other relevant + factors. You agree to work with affected parties to distribute + responsibility on an equitable basis. + +EXHIBIT A. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.0 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________.'' diff --git a/ptlib/PKGBUILD b/ptlib/PKGBUILD new file mode 100644 index 0000000..2733964 --- /dev/null +++ b/ptlib/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=ptlib +pkgver=2.10.11 +_debver=2.10.11~dfsg +_debrel=2.1 +pkgrel=6.hyperbola3 +pkgdesc="Portable Windows Library, with libsndio recommendation and with libsndio and LibreSSL support" +arch=('i686' 'x86_64') +url="http://www.opalvoip.org" +license=('MPL-1.0') +depends=('sdl' 'libsndio' 'v4l-utils' 'libldap') +makedepends=('quilt') +optdepends=('sndio: audio and MIDI server') +replaces=('pwlib') +conflicts=('pwlib') +source=(https://downloads.sourceforge.net/opalvoip/ptlib-$pkgver.tar.bz2 + https://deb.debian.org/debian/pool/main/p/ptlib/ptlib_$_debver-$_debrel.debian.tar.xz + ptlib-2.10.11-bison_fixes-2.patch + patch-src_ptclib_pssl_cxx.patch + sndio.patch + MPL-1.0.txt) +sha512sums=('ac8af8962330abf11986ccb863be0990c2e78ae611666d17c68068b72c4a5ea523ba74c55566284c3549e2346e407ccfffb5cc509fbf6ef19f1eb51dcb8b5f15' + 'b0eec5a458e4b4e464e7864c3c22a54c92b5640855c8881bf7a7a031780df15a8f7cdd3c4f3a0799ed7daaa12abbc6c3c384486537cd46e8c24dde629f53dd5e' + 'd02ee95f98082ab6a6f317d4e78b5a2dd7de2d5491aa55dad1ccbb0d93542744b48ccfdf7b4702dc8fd76848da2f43f189f530fc511eec20198b83bd413dd0d0' + 'b2db3cac3678cd030cc345693f9b93e23b6c4ad7399dbb188dd721859c287b8e2e3af04ddcd3628352c90d676eaa0b2c310f8f8569e1b74df4ea36af4b70596b' + 'e5a9e62ddb6e81f0b6ff34e32df90dc0ac182378190fa615cf515836773b6f63d9c33d020cf7700a28238090aea45a266ffddf881f425746ffe872575cf6ef7c' + 'ff62561d65d0b269b9a289f964a73099cc4456cb25927fc19734b0896735054a5023b6b44d4ddda17ece0a1f42050581f66ba0b9afaffa52538ec143bc908cf7') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/bison-fix || true + rm -v debian/patches/gcc-5_support || true + rm -v debian/patches/hurd-fix || true + rm -v debian/patches/no-sslv3 || true + rm -v debian/patches/ppc64el-arm64-mips64.diff || true + + quilt push -av + fi + patch -Np1 -i ../ptlib-2.10.11-bison_fixes-2.patch + patch -Np0 -i ../patch-src_ptclib_pssl_cxx.patch + patch -Np1 -i ../sndio.patch +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --libdir=/usr/lib \ + --sysconfdir=/etc --localstatedir=/var \ + --enable-opal --enable-plugins \ + --enable-oss --enable-v4l2 \ + --disable-avc --enable-sdl \ + --enable-ipv6 --enable-v4l \ + --disable-dc --disable-odbc \ + --enable-expat --enable-httpforms \ + --disable-pulse --enable-sndio + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 $srcdir/MPL-1.0.txt $pkgdir/usr/share/licenses/$pkgname/MPL-1.0.txt +} diff --git a/ptlib/patch-src_ptclib_pssl_cxx.patch b/ptlib/patch-src_ptclib_pssl_cxx.patch new file mode 100644 index 0000000..1d25af8 --- /dev/null +++ b/ptlib/patch-src_ptclib_pssl_cxx.patch @@ -0,0 +1,26 @@ +$OpenBSD: patch-src_ptclib_pssl_cxx,v 1.4 2018/05/30 00:23:12 tb Exp $ +Index: src/ptclib/pssl.cxx +--- src/ptclib/pssl.cxx.orig ++++ src/ptclib/pssl.cxx +@@ -145,7 +145,7 @@ PFACTORY_CREATE_SINGLETON(PProcessStartupFactory, PSSL + class PSSL_BIO + { + public: +- PSSL_BIO(BIO_METHOD *method = BIO_s_file_internal()) ++ PSSL_BIO(const BIO_METHOD *method = BIO_s_file_internal()) + { bio = BIO_new(method); } + + ~PSSL_BIO() +@@ -1189,9 +1189,12 @@ void PSSLContext::Construct(Method method, const void + SSL_METHOD * meth; + + switch (method) { ++#ifndef OPENSSL_NO_SSL3 ++/* fall through to SSLv23_method if unsupported */ + case SSLv3: + meth = SSLv3_method(); + break; ++#endif + case TLSv1: + meth = TLSv1_method(); + break; diff --git a/ptlib/ptlib-2.10.11-bison_fixes-2.patch b/ptlib/ptlib-2.10.11-bison_fixes-2.patch new file mode 100644 index 0000000..7f5d66c --- /dev/null +++ b/ptlib/ptlib-2.10.11-bison_fixes-2.patch @@ -0,0 +1,2951 @@ +Submitted By: Armin K. +Updated By: Bruce Dubbs +Date: 2013-08-20 + 2016-05-04 +Initial Package Version: 2.10.10 +Upstream Status: Reported +Origin: Self +Description: Adds pregenerated C file which isn't generated correctly + with Bison 3.0. +Update: Add fixes for gcc-6 + +diff -Naur ptlib-2.10.11.orig/include/ptlib/critsec.h ptlib-2.10.11/include/ptlib/critsec.h +--- ptlib-2.10.11.orig/include/ptlib/critsec.h 2013-08-14 18:20:32.000000000 -0500 ++++ ptlib-2.10.11/include/ptlib/critsec.h 2016-05-04 19:40:01.626203961 -0500 +@@ -40,7 +40,7 @@ + #if P_HAS_ATOMIC_INT + + #if defined(__GNUC__) +-# if __GNUC__ >= 4 && __GNUC_MINOR__ >= 2 ++# if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 2) || __GNUC__ >= 5 + # include + # else + # include +diff -Naur ptlib-2.10.11.orig/make/unix.mak ptlib-2.10.11/make/unix.mak +--- ptlib-2.10.11.orig/make/unix.mak 2013-08-14 18:20:27.000000000 -0500 ++++ ptlib-2.10.11/make/unix.mak 2016-05-04 19:38:50.921583820 -0500 +@@ -729,4 +729,6 @@ + + LDLIBS += -l$(PTLIB_BASE)$(LIB_TYPE) + ++STDCCFLAGS += -Wno-deprecated-declarations ++ + # End of unix.mak +diff -Naur ptlib-2.10.11.orig/src/ptlib/common/getdate.tab.c ptlib-2.10.11/src/ptlib/common/getdate.tab.c +--- ptlib-2.10.11.orig/src/ptlib/common/getdate.tab.c 1969-12-31 18:00:00.000000000 -0600 ++++ ptlib-2.10.11/src/ptlib/common/getdate.tab.c 2016-05-04 19:38:59.892281859 -0500 +@@ -0,0 +1,2884 @@ ++/* A Bison parser, made by GNU Bison 2.7.12-4996. */ ++ ++/* Bison implementation for Yacc-like parsers in C ++ ++ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. ++ ++ This program is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . */ ++ ++/* As a special exception, you may create a larger work that contains ++ part or all of the Bison parser skeleton and distribute that work ++ under terms of your choice, so long as that work isn't itself a ++ parser generator using the skeleton or a modified version thereof ++ as a parser skeleton. Alternatively, if you modify or redistribute ++ the parser skeleton itself, you may (at your option) remove this ++ special exception, which will cause the skeleton and the resulting ++ Bison output files to be licensed under the GNU General Public ++ License without this special exception. ++ ++ This special exception was added by the Free Software Foundation in ++ version 2.2 of Bison. */ ++ ++/* C LALR(1) parser skeleton written by Richard Stallman, by ++ simplifying the original so-called "semantic" parser. */ ++ ++/* All symbols defined below should begin with yy or YY, to avoid ++ infringing on user name space. This should be done even for local ++ variables, as they might otherwise be expanded by user macros. ++ There are some unavoidable exceptions within include files to ++ define necessary library symbols; they are noted "INFRINGES ON ++ USER NAME SPACE" below. */ ++ ++/* Identify Bison output. */ ++#define YYBISON 1 ++ ++/* Bison version. */ ++#define YYBISON_VERSION "2.7.12-4996" ++ ++/* Skeleton name. */ ++#define YYSKELETON_NAME "yacc.c" ++ ++/* Pure parsers. */ ++#define YYPURE 1 ++ ++/* Push parsers. */ ++#define YYPUSH 0 ++ ++/* Pull parsers. */ ++#define YYPULL 1 ++ ++ ++ ++ ++/* Copy the first part of user declarations. */ ++/* Line 371 of yacc.c */ ++#line 1 "ptlib/common/getdate.y" ++ ++/* ++** Originally written by Steven M. Bellovin while ++** at the University of North Carolina at Chapel Hill. Later tweaked by ++** a couple of people on Usenet. Completely overhauled by Rich $alz ++** and Jim Berets in August, 1990; ++** ++** Major hack to coerce it into use with the Equivalence Portable ++** Windows Library. ++** ++** This grammar has 10 shift/reduce conflicts. ++** ++** This code is in the public domain and has no copyright. ++*/ ++/* SUPPRESS 287 on yaccpar_sccsid *//* Unused static variable */ ++/* SUPPRESS 288 on yyerrlab *//* Label unused */ ++ ++ ++#include ++#include ++#include ++#include ++ ++#ifndef EOF ++#include ++#endif ++ ++ ++#ifdef _WIN32 ++#ifdef _MSC_VER ++#pragma warning(disable:4131 4701 4996) ++#endif ++#define STDAPICALLTYPE __stdcall ++#define MSDOS ++#else ++#define STDAPICALLTYPE ++#endif ++ ++ ++extern int STDAPICALLTYPE PTimeGetChar(void * stream); ++extern void STDAPICALLTYPE PTimeUngetChar(void * stream, int c); ++int STDAPICALLTYPE PTimeGetDateOrder(); ++int STDAPICALLTYPE PTimeIsMonthName(const char *, int, int); ++int STDAPICALLTYPE PTimeIsDayName(const char *, int, int); ++ ++ ++#define EPOCH 1970 ++#define HOUR(x) ((time_t)(x) * 60) ++#define SECSPERDAY (24L * 60L * 60L) ++ ++ ++/* ++** An entry in the lexical lookup table. ++*/ ++typedef struct _TABLE { ++ char *name; ++ int type; ++ time_t value; ++} TABLE; ++ ++ ++/* ++** Daylight-savings mode: on, off, or not yet known. ++*/ ++typedef enum _DSTMODE { ++ DSTon, DSToff, DSTmaybe ++} DSTMODE; ++ ++/* ++** Meridian: am, pm, or 24-hour style. ++*/ ++typedef enum _MERIDIAN { ++ MERam, MERpm, MER24 ++} MERIDIAN; ++ ++ ++/* ++** Global variables. We could get rid of most of these by using a good ++** union as the yacc stack. (This routine was originally written before ++** yacc had the %union construct.) Maybe someday; right now we only use ++** the %union very rarely. ++*/ ++struct Variables { ++ void *yyInput; ++ DSTMODE yyDSTmode; ++ time_t yyDayOrdinal; ++ time_t yyDayNumber; ++ int yyHaveDate; ++ int yyHaveDay; ++ int yyHaveRel; ++ int yyHaveTime; ++ int yyHaveZone; ++ time_t yyTimezone; ++ time_t yyDay; ++ time_t yyHour; ++ time_t yyMinutes; ++ time_t yyMonth; ++ time_t yySeconds; ++ time_t yyYear; ++ MERIDIAN yyMeridian; ++ time_t yyRelMonth; ++ time_t yyRelSeconds; ++}; ++ ++#define VARIABLE ((struct Variables*)parseParam) ++ ++ ++#define YYPURE 1 ++#define YYLEX_PARAM VARIABLE ++#define YYPARSE_PARAM parseParam ++ ++#define yyparse PTime_yyparse ++#define yylex PTime_yylex ++#define yyerror PTime_yyerror ++ ++#define GCC_VERSION (__GNUC__ * 10000 \ ++ + __GNUC_MINOR__ * 100 \ ++ + __GNUC_PATCHLEVEL__) ++ ++static int yyparse(void *); ++static int yylex(); ++ ++#ifdef __GNUC__ ++static int yyerror(char const *msg); ++#else ++static void yyerror(char const *msg); ++#endif ++ ++ ++static void SetPossibleDate(struct Variables*, time_t, time_t, time_t); ++ ++ ++ ++/* Line 371 of yacc.c */ ++#line 202 "ptlib/common/getdate.tab.c" ++ ++# ifndef YY_NULL ++# if defined __cplusplus && 201103L <= __cplusplus ++# define YY_NULL nullptr ++# else ++# define YY_NULL 0 ++# endif ++# endif ++ ++/* Enabling verbose error messages. */ ++#ifdef YYERROR_VERBOSE ++# undef YYERROR_VERBOSE ++# define YYERROR_VERBOSE 1 ++#else ++# define YYERROR_VERBOSE 0 ++#endif ++ ++ ++/* Enabling traces. */ ++#ifndef YYDEBUG ++# define YYDEBUG 0 ++#endif ++#if YYDEBUG ++extern int yydebug; ++#endif ++ ++/* Tokens. */ ++#ifndef YYTOKENTYPE ++# define YYTOKENTYPE ++ /* Put the tokens into the symbol table, so that GDB and other debuggers ++ know about them. */ ++ enum yytokentype { ++ tAGO = 258, ++ tDAY = 259, ++ tDAYZONE = 260, ++ tID = 261, ++ tMERIDIAN = 262, ++ tMINUTE_UNIT = 263, ++ tMONTH = 264, ++ tMONTH_UNIT = 265, ++ tSNUMBER = 266, ++ tS4DIGITNUMBER = 267, ++ tUNUMBER = 268, ++ t4DIGITNUMBER = 269, ++ t6DIGITNUMBER = 270, ++ t8DIGITNUMBER = 271, ++ tSEC_UNIT = 272, ++ tZONE = 273, ++ tMILZONE = 274, ++ tRFC3339 = 275, ++ tDST = 276 ++ }; ++#endif ++ ++ ++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED ++typedef union YYSTYPE ++{ ++/* Line 387 of yacc.c */ ++#line 137 "ptlib/common/getdate.y" ++ ++ time_t Number; ++ enum _MERIDIAN Meridian; ++ ++ ++/* Line 387 of yacc.c */ ++#line 269 "ptlib/common/getdate.tab.c" ++} YYSTYPE; ++# define YYSTYPE_IS_TRIVIAL 1 ++# define yystype YYSTYPE /* obsolescent; will be withdrawn */ ++# define YYSTYPE_IS_DECLARED 1 ++#endif ++ ++ ++#ifdef YYPARSE_PARAM ++#if defined __STDC__ || defined __cplusplus ++int yyparse (void *YYPARSE_PARAM); ++#else ++int yyparse (); ++#endif ++#else /* ! YYPARSE_PARAM */ ++#if defined __STDC__ || defined __cplusplus ++int yyparse (void); ++#else ++int yyparse (); ++#endif ++#endif /* ! YYPARSE_PARAM */ ++ ++ ++ ++/* Copy the second part of user declarations. */ ++ ++/* Line 390 of yacc.c */ ++#line 296 "ptlib/common/getdate.tab.c" ++ ++#ifdef short ++# undef short ++#endif ++ ++#ifdef YYTYPE_UINT8 ++typedef YYTYPE_UINT8 yytype_uint8; ++#else ++typedef unsigned char yytype_uint8; ++#endif ++ ++#ifdef YYTYPE_INT8 ++typedef YYTYPE_INT8 yytype_int8; ++#elif (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++typedef signed char yytype_int8; ++#else ++typedef short int yytype_int8; ++#endif ++ ++#ifdef YYTYPE_UINT16 ++typedef YYTYPE_UINT16 yytype_uint16; ++#else ++typedef unsigned short int yytype_uint16; ++#endif ++ ++#ifdef YYTYPE_INT16 ++typedef YYTYPE_INT16 yytype_int16; ++#else ++typedef short int yytype_int16; ++#endif ++ ++#ifndef YYSIZE_T ++# ifdef __SIZE_TYPE__ ++# define YYSIZE_T __SIZE_TYPE__ ++# elif defined size_t ++# define YYSIZE_T size_t ++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++# include /* INFRINGES ON USER NAME SPACE */ ++# define YYSIZE_T size_t ++# else ++# define YYSIZE_T unsigned int ++# endif ++#endif ++ ++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) ++ ++#ifndef YY_ ++# if defined YYENABLE_NLS && YYENABLE_NLS ++# if ENABLE_NLS ++# include /* INFRINGES ON USER NAME SPACE */ ++# define YY_(Msgid) dgettext ("bison-runtime", Msgid) ++# endif ++# endif ++# ifndef YY_ ++# define YY_(Msgid) Msgid ++# endif ++#endif ++ ++#ifndef __attribute__ ++/* This feature is available in gcc versions 2.5 and later. */ ++# if (! defined __GNUC__ || __GNUC__ < 2 \ ++ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) ++# define __attribute__(Spec) /* empty */ ++# endif ++#endif ++ ++/* Suppress unused-variable warnings by "using" E. */ ++#if ! defined lint || defined __GNUC__ ++# define YYUSE(E) ((void) (E)) ++#else ++# define YYUSE(E) /* empty */ ++#endif ++ ++ ++/* Identity function, used to suppress warnings about constant conditions. */ ++#ifndef lint ++# define YYID(N) (N) ++#else ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static int ++YYID (int yyi) ++#else ++static int ++YYID (yyi) ++ int yyi; ++#endif ++{ ++ return yyi; ++} ++#endif ++ ++#if ! defined yyoverflow || YYERROR_VERBOSE ++ ++/* The parser invokes alloca or malloc; define the necessary symbols. */ ++ ++# ifdef YYSTACK_USE_ALLOCA ++# if YYSTACK_USE_ALLOCA ++# ifdef __GNUC__ ++# define YYSTACK_ALLOC __builtin_alloca ++# elif defined __BUILTIN_VA_ARG_INCR ++# include /* INFRINGES ON USER NAME SPACE */ ++# elif defined _AIX ++# define YYSTACK_ALLOC __alloca ++# elif defined _MSC_VER ++# include /* INFRINGES ON USER NAME SPACE */ ++# define alloca _alloca ++# else ++# define YYSTACK_ALLOC alloca ++# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++# include /* INFRINGES ON USER NAME SPACE */ ++ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ ++# ifndef EXIT_SUCCESS ++# define EXIT_SUCCESS 0 ++# endif ++# endif ++# endif ++# endif ++# endif ++ ++# ifdef YYSTACK_ALLOC ++ /* Pacify GCC's `empty if-body' warning. */ ++# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) ++# ifndef YYSTACK_ALLOC_MAXIMUM ++ /* The OS might guarantee only one guard page at the bottom of the stack, ++ and a page size can be as small as 4096 bytes. So we cannot safely ++ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number ++ to allow for a few compiler-allocated temporary stack slots. */ ++# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ ++# endif ++# else ++# define YYSTACK_ALLOC YYMALLOC ++# define YYSTACK_FREE YYFREE ++# ifndef YYSTACK_ALLOC_MAXIMUM ++# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM ++# endif ++# if (defined __cplusplus && ! defined EXIT_SUCCESS \ ++ && ! ((defined YYMALLOC || defined malloc) \ ++ && (defined YYFREE || defined free))) ++# include /* INFRINGES ON USER NAME SPACE */ ++# ifndef EXIT_SUCCESS ++# define EXIT_SUCCESS 0 ++# endif ++# endif ++# ifndef YYMALLOC ++# define YYMALLOC malloc ++# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ ++# endif ++# endif ++# ifndef YYFREE ++# define YYFREE free ++# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++void free (void *); /* INFRINGES ON USER NAME SPACE */ ++# endif ++# endif ++# endif ++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ ++ ++ ++#if (! defined yyoverflow \ ++ && (! defined __cplusplus \ ++ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) ++ ++/* A type that is properly aligned for any stack member. */ ++union yyalloc ++{ ++ yytype_int16 yyss_alloc; ++ YYSTYPE yyvs_alloc; ++}; ++ ++/* The size of the maximum gap between one aligned stack and the next. */ ++# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) ++ ++/* The size of an array large to enough to hold all stacks, each with ++ N elements. */ ++# define YYSTACK_BYTES(N) \ ++ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ ++ + YYSTACK_GAP_MAXIMUM) ++ ++# define YYCOPY_NEEDED 1 ++ ++/* Relocate STACK from its old location to the new one. The ++ local variables YYSIZE and YYSTACKSIZE give the old and new number of ++ elements in the stack, and YYPTR gives the new location of the ++ stack. Advance YYPTR to a properly aligned location for the next ++ stack. */ ++# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ ++ do \ ++ { \ ++ YYSIZE_T yynewbytes; \ ++ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ ++ Stack = &yyptr->Stack_alloc; \ ++ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ ++ yyptr += yynewbytes / sizeof (*yyptr); \ ++ } \ ++ while (YYID (0)) ++ ++#endif ++ ++#if defined YYCOPY_NEEDED && YYCOPY_NEEDED ++/* Copy COUNT objects from SRC to DST. The source and destination do ++ not overlap. */ ++# ifndef YYCOPY ++# if defined __GNUC__ && 1 < __GNUC__ ++# define YYCOPY(Dst, Src, Count) \ ++ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) ++# else ++# define YYCOPY(Dst, Src, Count) \ ++ do \ ++ { \ ++ YYSIZE_T yyi; \ ++ for (yyi = 0; yyi < (Count); yyi++) \ ++ (Dst)[yyi] = (Src)[yyi]; \ ++ } \ ++ while (YYID (0)) ++# endif ++# endif ++#endif /* !YYCOPY_NEEDED */ ++ ++/* YYFINAL -- State number of the termination state. */ ++#define YYFINAL 2 ++/* YYLAST -- Last index in YYTABLE. */ ++#define YYLAST 105 ++ ++/* YYNTOKENS -- Number of terminals. */ ++#define YYNTOKENS 25 ++/* YYNNTS -- Number of nonterminals. */ ++#define YYNNTS 12 ++/* YYNRULES -- Number of rules. */ ++#define YYNRULES 51 ++/* YYNRULES -- Number of states. */ ++#define YYNSTATES 63 ++ ++/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ ++#define YYUNDEFTOK 2 ++#define YYMAXUTOK 276 ++ ++#define YYTRANSLATE(YYX) \ ++ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) ++ ++/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ ++static const yytype_uint8 yytranslate[] = ++{ ++ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 23, 2, 2, 24, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 22, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ++ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, ++ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ++ 15, 16, 17, 18, 19, 20, 21 ++}; ++ ++#if YYDEBUG ++/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in ++ YYRHS. */ ++static const yytype_uint8 yyprhs[] = ++{ ++ 0, 0, 3, 4, 7, 9, 11, 13, 15, 17, ++ 19, 22, 25, 28, 33, 38, 45, 52, 54, 56, ++ 59, 61, 63, 66, 69, 73, 79, 84, 86, 90, ++ 93, 98, 101, 105, 108, 110, 113, 116, 118, 121, ++ 124, 126, 129, 132, 134, 136, 138, 140, 142, 144, ++ 146, 147 ++}; ++ ++/* YYRHS -- A `-1'-separated list of the rules' RHS. */ ++static const yytype_int8 yyrhs[] = ++{ ++ 26, 0, -1, -1, 26, 27, -1, 28, -1, 29, ++ -1, 31, -1, 30, -1, 32, -1, 35, -1, 13, ++ 7, -1, 14, 12, -1, 15, 12, -1, 34, 22, ++ 34, 36, -1, 34, 22, 34, 12, -1, 34, 22, ++ 34, 22, 34, 36, -1, 34, 22, 34, 22, 34, ++ 12, -1, 18, -1, 5, -1, 18, 21, -1, 19, ++ -1, 4, -1, 4, 23, -1, 34, 4, -1, 34, ++ 24, 34, -1, 34, 24, 34, 24, 34, -1, 34, ++ 11, 11, 20, -1, 16, -1, 34, 9, 11, -1, ++ 9, 34, -1, 9, 34, 23, 34, -1, 34, 9, ++ -1, 34, 9, 34, -1, 33, 3, -1, 33, -1, ++ 34, 8, -1, 11, 8, -1, 8, -1, 11, 17, ++ -1, 34, 17, -1, 17, -1, 11, 10, -1, 34, ++ 10, -1, 10, -1, 13, -1, 14, -1, 15, -1, ++ 13, -1, 14, -1, 15, -1, -1, 7, -1 ++}; ++ ++/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ ++static const yytype_uint16 yyrline[] = ++{ ++ 0, 153, 153, 154, 157, 160, 163, 166, 169, 172, ++ 175, 181, 189, 197, 203, 210, 216, 226, 230, 235, ++ 239, 249, 253, 257, 263, 266, 269, 273, 278, 282, ++ 289, 294, 301, 306, 310, 313, 316, 319, 322, 325, ++ 328, 331, 334, 337, 342, 345, 348, 353, 379, 390, ++ 407, 410 ++}; ++#endif ++ ++#if YYDEBUG || YYERROR_VERBOSE || 0 ++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. ++ First, the terminals, then, starting at YYNTOKENS, nonterminals. */ ++static const char *const yytname[] = ++{ ++ "$end", "error", "$undefined", "tAGO", "tDAY", "tDAYZONE", "tID", ++ "tMERIDIAN", "tMINUTE_UNIT", "tMONTH", "tMONTH_UNIT", "tSNUMBER", ++ "tS4DIGITNUMBER", "tUNUMBER", "t4DIGITNUMBER", "t6DIGITNUMBER", ++ "t8DIGITNUMBER", "tSEC_UNIT", "tZONE", "tMILZONE", "tRFC3339", "tDST", ++ "':'", "','", "'/'", "$accept", "spec", "item", "time", "zone", "day", ++ "date", "rel", "relunit", "unumber", "number", "o_merid", YY_NULL ++}; ++#endif ++ ++# ifdef YYPRINT ++/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to ++ token YYLEX-NUM. */ ++static const yytype_uint16 yytoknum[] = ++{ ++ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, ++ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, ++ 275, 276, 58, 44, 47 ++}; ++# endif ++ ++/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ ++static const yytype_uint8 yyr1[] = ++{ ++ 0, 25, 26, 26, 27, 27, 27, 27, 27, 27, ++ 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, ++ 29, 30, 30, 30, 31, 31, 31, 31, 31, 31, ++ 31, 31, 31, 32, 32, 33, 33, 33, 33, 33, ++ 33, 33, 33, 33, 34, 34, 34, 35, 35, 35, ++ 36, 36 ++}; ++ ++/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ ++static const yytype_uint8 yyr2[] = ++{ ++ 0, 2, 0, 2, 1, 1, 1, 1, 1, 1, ++ 2, 2, 2, 4, 4, 6, 6, 1, 1, 2, ++ 1, 1, 2, 2, 3, 5, 4, 1, 3, 2, ++ 4, 2, 3, 2, 1, 2, 2, 1, 2, 2, ++ 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, ++ 0, 1 ++}; ++ ++/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. ++ Performed when YYTABLE doesn't specify something else to do. Zero ++ means the default is an error. */ ++static const yytype_uint8 yydefact[] = ++{ ++ 2, 0, 1, 21, 18, 37, 0, 43, 0, 44, ++ 45, 46, 27, 40, 17, 20, 3, 4, 5, 7, ++ 6, 8, 34, 0, 9, 22, 44, 45, 46, 29, ++ 36, 41, 38, 10, 11, 12, 19, 33, 23, 35, ++ 31, 42, 0, 39, 0, 0, 0, 28, 32, 0, ++ 50, 24, 30, 26, 51, 14, 0, 13, 0, 50, ++ 25, 16, 15 ++}; ++ ++/* YYDEFGOTO[NTERM-NUM]. */ ++static const yytype_int8 yydefgoto[] = ++{ ++ -1, 1, 16, 17, 18, 19, 20, 21, 22, 23, ++ 24, 57 ++}; ++ ++/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing ++ STATE-NUM. */ ++#define YYPACT_NINF -27 ++static const yytype_int8 yypact[] = ++{ ++ -27, 49, -27, -10, -27, -27, -11, -27, 1, 10, ++ 69, 86, -27, -27, -9, -27, -27, -27, -27, -27, ++ -27, -27, 13, -3, -27, -27, -27, -27, -27, 8, ++ -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, ++ 30, -27, 9, -27, -11, -11, -11, -27, -27, 12, ++ 15, 18, -27, -27, -27, -27, -11, -27, -11, 23, ++ -27, -27, -27 ++}; ++ ++/* YYPGOTO[NTERM-NUM]. */ ++static const yytype_int8 yypgoto[] = ++{ ++ -27, -27, -27, -27, -27, -27, -27, -27, -27, -6, ++ -27, -26 ++}; ++ ++/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If ++ positive, shift that token. If negative, reduce the rule which ++ number is the opposite. If YYTABLE_NINF, syntax error. */ ++#define YYTABLE_NINF -50 ++static const yytype_int8 yytable[] = ++{ ++ 29, 38, 26, 27, 28, 39, 40, 41, 42, 30, ++ -47, 31, 36, 25, 43, -47, 37, 33, 32, 44, ++ 49, 45, 54, -47, -47, -47, -47, 55, -47, -47, ++ 54, 46, 53, 62, 48, 61, 0, 56, 50, 51, ++ 52, 47, 58, 26, 27, 28, 0, 0, 0, 2, ++ 59, 0, 60, 3, 4, 0, 0, 5, 6, 7, ++ 8, 0, 9, 10, 11, 12, 13, 14, 15, -48, ++ 0, 0, 0, 0, -48, 0, 0, 0, 0, 0, ++ 0, 34, -48, -48, -48, -48, -49, -48, -48, 0, ++ 0, -49, 0, 0, 0, 0, 0, 0, 35, -49, ++ -49, -49, -49, 0, -49, -49 ++}; ++ ++#define yypact_value_is_default(Yystate) \ ++ (!!((Yystate) == (-27))) ++ ++#define yytable_value_is_error(Yytable_value) \ ++ YYID (0) ++ ++static const yytype_int8 yycheck[] = ++{ ++ 6, 4, 13, 14, 15, 8, 9, 10, 11, 8, ++ 0, 10, 21, 23, 17, 5, 3, 7, 17, 22, ++ 11, 24, 7, 13, 14, 15, 16, 12, 18, 19, ++ 7, 23, 20, 59, 40, 12, -1, 22, 44, 45, ++ 46, 11, 24, 13, 14, 15, -1, -1, -1, 0, ++ 56, -1, 58, 4, 5, -1, -1, 8, 9, 10, ++ 11, -1, 13, 14, 15, 16, 17, 18, 19, 0, ++ -1, -1, -1, -1, 5, -1, -1, -1, -1, -1, ++ -1, 12, 13, 14, 15, 16, 0, 18, 19, -1, ++ -1, 5, -1, -1, -1, -1, -1, -1, 12, 13, ++ 14, 15, 16, -1, 18, 19 ++}; ++ ++/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing ++ symbol of state STATE-NUM. */ ++static const yytype_uint8 yystos[] = ++{ ++ 0, 26, 0, 4, 5, 8, 9, 10, 11, 13, ++ 14, 15, 16, 17, 18, 19, 27, 28, 29, 30, ++ 31, 32, 33, 34, 35, 23, 13, 14, 15, 34, ++ 8, 10, 17, 7, 12, 12, 21, 3, 4, 8, ++ 9, 10, 11, 17, 22, 24, 23, 11, 34, 11, ++ 34, 34, 34, 20, 7, 12, 22, 36, 24, 34, ++ 34, 12, 36 ++}; ++ ++#define yyerrok (yyerrstatus = 0) ++#define yyclearin (yychar = YYEMPTY) ++#define YYEMPTY (-2) ++#define YYEOF 0 ++ ++#define YYACCEPT goto yyacceptlab ++#define YYABORT goto yyabortlab ++#define YYERROR goto yyerrorlab ++ ++ ++/* Like YYERROR except do call yyerror. This remains here temporarily ++ to ease the transition to the new meaning of YYERROR, for GCC. ++ Once GCC version 2 has supplanted version 1, this can go. However, ++ YYFAIL appears to be in use. Nevertheless, it is formally deprecated ++ in Bison 2.4.2's NEWS entry, where a plan to phase it out is ++ discussed. */ ++ ++#define YYFAIL goto yyerrlab ++#if defined YYFAIL ++ /* This is here to suppress warnings from the GCC cpp's ++ -Wunused-macros. Normally we don't worry about that warning, but ++ some users do, and we want to make it easy for users to remove ++ YYFAIL uses, which will produce warnings from Bison 2.5. */ ++#endif ++ ++#define YYRECOVERING() (!!yyerrstatus) ++ ++#define YYBACKUP(Token, Value) \ ++do \ ++ if (yychar == YYEMPTY) \ ++ { \ ++ yychar = (Token); \ ++ yylval = (Value); \ ++ YYPOPSTACK (yylen); \ ++ yystate = *yyssp; \ ++ goto yybackup; \ ++ } \ ++ else \ ++ { \ ++ yyerror (YY_("syntax error: cannot back up")); \ ++ YYERROR; \ ++ } \ ++while (YYID (0)) ++ ++/* Error token number */ ++#define YYTERROR 1 ++#define YYERRCODE 256 ++ ++ ++/* This macro is provided for backward compatibility. */ ++#ifndef YY_LOCATION_PRINT ++# define YY_LOCATION_PRINT(File, Loc) ((void) 0) ++#endif ++ ++ ++/* YYLEX -- calling `yylex' with the right arguments. */ ++#ifdef YYLEX_PARAM ++# define YYLEX yylex (&yylval, YYLEX_PARAM) ++#else ++# define YYLEX yylex (&yylval) ++#endif ++ ++/* Enable debugging if requested. */ ++#if YYDEBUG ++ ++# ifndef YYFPRINTF ++# include /* INFRINGES ON USER NAME SPACE */ ++# define YYFPRINTF fprintf ++# endif ++ ++# define YYDPRINTF(Args) \ ++do { \ ++ if (yydebug) \ ++ YYFPRINTF Args; \ ++} while (YYID (0)) ++ ++# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ ++do { \ ++ if (yydebug) \ ++ { \ ++ YYFPRINTF (stderr, "%s ", Title); \ ++ yy_symbol_print (stderr, \ ++ Type, Value); \ ++ YYFPRINTF (stderr, "\n"); \ ++ } \ ++} while (YYID (0)) ++ ++ ++/*--------------------------------. ++| Print this symbol on YYOUTPUT. | ++`--------------------------------*/ ++ ++/*ARGSUSED*/ ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static void ++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) ++#else ++static void ++yy_symbol_value_print (yyoutput, yytype, yyvaluep) ++ FILE *yyoutput; ++ int yytype; ++ YYSTYPE const * const yyvaluep; ++#endif ++{ ++ FILE *yyo = yyoutput; ++ YYUSE (yyo); ++ if (!yyvaluep) ++ return; ++# ifdef YYPRINT ++ if (yytype < YYNTOKENS) ++ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); ++# else ++ YYUSE (yyoutput); ++# endif ++ YYUSE (yytype); ++} ++ ++ ++/*--------------------------------. ++| Print this symbol on YYOUTPUT. | ++`--------------------------------*/ ++ ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static void ++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) ++#else ++static void ++yy_symbol_print (yyoutput, yytype, yyvaluep) ++ FILE *yyoutput; ++ int yytype; ++ YYSTYPE const * const yyvaluep; ++#endif ++{ ++ if (yytype < YYNTOKENS) ++ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); ++ else ++ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); ++ ++ yy_symbol_value_print (yyoutput, yytype, yyvaluep); ++ YYFPRINTF (yyoutput, ")"); ++} ++ ++/*------------------------------------------------------------------. ++| yy_stack_print -- Print the state stack from its BOTTOM up to its | ++| TOP (included). | ++`------------------------------------------------------------------*/ ++ ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static void ++yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) ++#else ++static void ++yy_stack_print (yybottom, yytop) ++ yytype_int16 *yybottom; ++ yytype_int16 *yytop; ++#endif ++{ ++ YYFPRINTF (stderr, "Stack now"); ++ for (; yybottom <= yytop; yybottom++) ++ { ++ int yybot = *yybottom; ++ YYFPRINTF (stderr, " %d", yybot); ++ } ++ YYFPRINTF (stderr, "\n"); ++} ++ ++# define YY_STACK_PRINT(Bottom, Top) \ ++do { \ ++ if (yydebug) \ ++ yy_stack_print ((Bottom), (Top)); \ ++} while (YYID (0)) ++ ++ ++/*------------------------------------------------. ++| Report that the YYRULE is going to be reduced. | ++`------------------------------------------------*/ ++ ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static void ++yy_reduce_print (YYSTYPE *yyvsp, int yyrule) ++#else ++static void ++yy_reduce_print (yyvsp, yyrule) ++ YYSTYPE *yyvsp; ++ int yyrule; ++#endif ++{ ++ int yynrhs = yyr2[yyrule]; ++ int yyi; ++ unsigned long int yylno = yyrline[yyrule]; ++ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", ++ yyrule - 1, yylno); ++ /* The symbols being reduced. */ ++ for (yyi = 0; yyi < yynrhs; yyi++) ++ { ++ YYFPRINTF (stderr, " $%d = ", yyi + 1); ++ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], ++ &(yyvsp[(yyi + 1) - (yynrhs)]) ++ ); ++ YYFPRINTF (stderr, "\n"); ++ } ++} ++ ++# define YY_REDUCE_PRINT(Rule) \ ++do { \ ++ if (yydebug) \ ++ yy_reduce_print (yyvsp, Rule); \ ++} while (YYID (0)) ++ ++/* Nonzero means print parse trace. It is left uninitialized so that ++ multiple parsers can coexist. */ ++int yydebug; ++#else /* !YYDEBUG */ ++# define YYDPRINTF(Args) ++# define YY_SYMBOL_PRINT(Title, Type, Value, Location) ++# define YY_STACK_PRINT(Bottom, Top) ++# define YY_REDUCE_PRINT(Rule) ++#endif /* !YYDEBUG */ ++ ++ ++/* YYINITDEPTH -- initial size of the parser's stacks. */ ++#ifndef YYINITDEPTH ++# define YYINITDEPTH 200 ++#endif ++ ++/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only ++ if the built-in stack extension method is used). ++ ++ Do not make this value too large; the results are undefined if ++ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) ++ evaluated with infinite-precision integer arithmetic. */ ++ ++#ifndef YYMAXDEPTH ++# define YYMAXDEPTH 10000 ++#endif ++ ++ ++#if YYERROR_VERBOSE ++ ++# ifndef yystrlen ++# if defined __GLIBC__ && defined _STRING_H ++# define yystrlen strlen ++# else ++/* Return the length of YYSTR. */ ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static YYSIZE_T ++yystrlen (const char *yystr) ++#else ++static YYSIZE_T ++yystrlen (yystr) ++ const char *yystr; ++#endif ++{ ++ YYSIZE_T yylen; ++ for (yylen = 0; yystr[yylen]; yylen++) ++ continue; ++ return yylen; ++} ++# endif ++# endif ++ ++# ifndef yystpcpy ++# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE ++# define yystpcpy stpcpy ++# else ++/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in ++ YYDEST. */ ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static char * ++yystpcpy (char *yydest, const char *yysrc) ++#else ++static char * ++yystpcpy (yydest, yysrc) ++ char *yydest; ++ const char *yysrc; ++#endif ++{ ++ char *yyd = yydest; ++ const char *yys = yysrc; ++ ++ while ((*yyd++ = *yys++) != '\0') ++ continue; ++ ++ return yyd - 1; ++} ++# endif ++# endif ++ ++# ifndef yytnamerr ++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary ++ quotes and backslashes, so that it's suitable for yyerror. The ++ heuristic is that double-quoting is unnecessary unless the string ++ contains an apostrophe, a comma, or backslash (other than ++ backslash-backslash). YYSTR is taken from yytname. If YYRES is ++ null, do not copy; instead, return the length of what the result ++ would have been. */ ++static YYSIZE_T ++yytnamerr (char *yyres, const char *yystr) ++{ ++ if (*yystr == '"') ++ { ++ YYSIZE_T yyn = 0; ++ char const *yyp = yystr; ++ ++ for (;;) ++ switch (*++yyp) ++ { ++ case '\'': ++ case ',': ++ goto do_not_strip_quotes; ++ ++ case '\\': ++ if (*++yyp != '\\') ++ goto do_not_strip_quotes; ++ /* Fall through. */ ++ default: ++ if (yyres) ++ yyres[yyn] = *yyp; ++ yyn++; ++ break; ++ ++ case '"': ++ if (yyres) ++ yyres[yyn] = '\0'; ++ return yyn; ++ } ++ do_not_strip_quotes: ; ++ } ++ ++ if (! yyres) ++ return yystrlen (yystr); ++ ++ return yystpcpy (yyres, yystr) - yyres; ++} ++# endif ++ ++/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message ++ about the unexpected token YYTOKEN for the state stack whose top is ++ YYSSP. ++ ++ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is ++ not large enough to hold the message. In that case, also set ++ *YYMSG_ALLOC to the required number of bytes. Return 2 if the ++ required number of bytes is too large to store. */ ++static int ++yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, ++ yytype_int16 *yyssp, int yytoken) ++{ ++ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); ++ YYSIZE_T yysize = yysize0; ++ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; ++ /* Internationalized format string. */ ++ const char *yyformat = YY_NULL; ++ /* Arguments of yyformat. */ ++ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; ++ /* Number of reported tokens (one for the "unexpected", one per ++ "expected"). */ ++ int yycount = 0; ++ ++ /* There are many possibilities here to consider: ++ - Assume YYFAIL is not used. It's too flawed to consider. See ++ ++ for details. YYERROR is fine as it does not invoke this ++ function. ++ - If this state is a consistent state with a default action, then ++ the only way this function was invoked is if the default action ++ is an error action. In that case, don't check for expected ++ tokens because there are none. ++ - The only way there can be no lookahead present (in yychar) is if ++ this state is a consistent state with a default action. Thus, ++ detecting the absence of a lookahead is sufficient to determine ++ that there is no unexpected or expected token to report. In that ++ case, just report a simple "syntax error". ++ - Don't assume there isn't a lookahead just because this state is a ++ consistent state with a default action. There might have been a ++ previous inconsistent state, consistent state with a non-default ++ action, or user semantic action that manipulated yychar. ++ - Of course, the expected token list depends on states to have ++ correct lookahead information, and it depends on the parser not ++ to perform extra reductions after fetching a lookahead from the ++ scanner and before detecting a syntax error. Thus, state merging ++ (from LALR or IELR) and default reductions corrupt the expected ++ token list. However, the list is correct for canonical LR with ++ one exception: it will still contain any token that will not be ++ accepted due to an error action in a later state. ++ */ ++ if (yytoken != YYEMPTY) ++ { ++ int yyn = yypact[*yyssp]; ++ yyarg[yycount++] = yytname[yytoken]; ++ if (!yypact_value_is_default (yyn)) ++ { ++ /* Start YYX at -YYN if negative to avoid negative indexes in ++ YYCHECK. In other words, skip the first -YYN actions for ++ this state because they are default actions. */ ++ int yyxbegin = yyn < 0 ? -yyn : 0; ++ /* Stay within bounds of both yycheck and yytname. */ ++ int yychecklim = YYLAST - yyn + 1; ++ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; ++ int yyx; ++ ++ for (yyx = yyxbegin; yyx < yyxend; ++yyx) ++ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR ++ && !yytable_value_is_error (yytable[yyx + yyn])) ++ { ++ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) ++ { ++ yycount = 1; ++ yysize = yysize0; ++ break; ++ } ++ yyarg[yycount++] = yytname[yyx]; ++ { ++ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); ++ if (! (yysize <= yysize1 ++ && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) ++ return 2; ++ yysize = yysize1; ++ } ++ } ++ } ++ } ++ ++ switch (yycount) ++ { ++# define YYCASE_(N, S) \ ++ case N: \ ++ yyformat = S; \ ++ break ++ YYCASE_(0, YY_("syntax error")); ++ YYCASE_(1, YY_("syntax error, unexpected %s")); ++ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); ++ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); ++ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); ++ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); ++# undef YYCASE_ ++ } ++ ++ { ++ YYSIZE_T yysize1 = yysize + yystrlen (yyformat); ++ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) ++ return 2; ++ yysize = yysize1; ++ } ++ ++ if (*yymsg_alloc < yysize) ++ { ++ *yymsg_alloc = 2 * yysize; ++ if (! (yysize <= *yymsg_alloc ++ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) ++ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; ++ return 1; ++ } ++ ++ /* Avoid sprintf, as that infringes on the user's name space. ++ Don't have undefined behavior even if the translation ++ produced a string with the wrong number of "%s"s. */ ++ { ++ char *yyp = *yymsg; ++ int yyi = 0; ++ while ((*yyp = *yyformat) != '\0') ++ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) ++ { ++ yyp += yytnamerr (yyp, yyarg[yyi++]); ++ yyformat += 2; ++ } ++ else ++ { ++ yyp++; ++ yyformat++; ++ } ++ } ++ return 0; ++} ++#endif /* YYERROR_VERBOSE */ ++ ++/*-----------------------------------------------. ++| Release the memory associated to this symbol. | ++`-----------------------------------------------*/ ++ ++/*ARGSUSED*/ ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++static void ++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) ++#else ++static void ++yydestruct (yymsg, yytype, yyvaluep) ++ const char *yymsg; ++ int yytype; ++ YYSTYPE *yyvaluep; ++#endif ++{ ++ YYUSE (yyvaluep); ++ ++ if (!yymsg) ++ yymsg = "Deleting"; ++ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); ++ ++ YYUSE (yytype); ++} ++ ++ ++ ++ ++/*----------. ++| yyparse. | ++`----------*/ ++ ++#ifdef YYPARSE_PARAM ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++int ++yyparse (void *YYPARSE_PARAM) ++#else ++int ++yyparse (YYPARSE_PARAM) ++ void *YYPARSE_PARAM; ++#endif ++#else /* ! YYPARSE_PARAM */ ++#if (defined __STDC__ || defined __C99__FUNC__ \ ++ || defined __cplusplus || defined _MSC_VER) ++int ++yyparse (void) ++#else ++int ++yyparse () ++ ++#endif ++#endif ++{ ++/* The lookahead symbol. */ ++int yychar; ++ ++ ++#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ ++/* Suppress an incorrect diagnostic about yylval being uninitialized. */ ++# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ ++ _Pragma ("GCC diagnostic push") \ ++ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ ++ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") ++# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ ++ _Pragma ("GCC diagnostic pop") ++#else ++/* Default value used for initialization, for pacifying older GCCs ++ or non-GCC compilers. */ ++static YYSTYPE yyval_default; ++# define YY_INITIAL_VALUE(Value) = Value ++#endif ++#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN ++# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN ++# define YY_IGNORE_MAYBE_UNINITIALIZED_END ++#endif ++#ifndef YY_INITIAL_VALUE ++# define YY_INITIAL_VALUE(Value) /* Nothing. */ ++#endif ++ ++/* The semantic value of the lookahead symbol. */ ++YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); ++ ++ /* Number of syntax errors so far. */ ++ int yynerrs; ++ ++ int yystate; ++ /* Number of tokens to shift before error messages enabled. */ ++ int yyerrstatus; ++ ++ /* The stacks and their tools: ++ `yyss': related to states. ++ `yyvs': related to semantic values. ++ ++ Refer to the stacks through separate pointers, to allow yyoverflow ++ to reallocate them elsewhere. */ ++ ++ /* The state stack. */ ++ yytype_int16 yyssa[YYINITDEPTH]; ++ yytype_int16 *yyss; ++ yytype_int16 *yyssp; ++ ++ /* The semantic value stack. */ ++ YYSTYPE yyvsa[YYINITDEPTH]; ++ YYSTYPE *yyvs; ++ YYSTYPE *yyvsp; ++ ++ YYSIZE_T yystacksize; ++ ++ int yyn; ++ int yyresult; ++ /* Lookahead token as an internal (translated) token number. */ ++ int yytoken = 0; ++ /* The variables used to return semantic value and location from the ++ action routines. */ ++ YYSTYPE yyval; ++ ++#if YYERROR_VERBOSE ++ /* Buffer for error messages, and its allocated size. */ ++ char yymsgbuf[128]; ++ char *yymsg = yymsgbuf; ++ YYSIZE_T yymsg_alloc = sizeof yymsgbuf; ++#endif ++ ++#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) ++ ++ /* The number of symbols on the RHS of the reduced rule. ++ Keep to zero when no symbol should be popped. */ ++ int yylen = 0; ++ ++ yyssp = yyss = yyssa; ++ yyvsp = yyvs = yyvsa; ++ yystacksize = YYINITDEPTH; ++ ++ YYDPRINTF ((stderr, "Starting parse\n")); ++ ++ yystate = 0; ++ yyerrstatus = 0; ++ yynerrs = 0; ++ yychar = YYEMPTY; /* Cause a token to be read. */ ++ goto yysetstate; ++ ++/*------------------------------------------------------------. ++| yynewstate -- Push a new state, which is found in yystate. | ++`------------------------------------------------------------*/ ++ yynewstate: ++ /* In all cases, when you get here, the value and location stacks ++ have just been pushed. So pushing a state here evens the stacks. */ ++ yyssp++; ++ ++ yysetstate: ++ *yyssp = yystate; ++ ++ if (yyss + yystacksize - 1 <= yyssp) ++ { ++ /* Get the current used size of the three stacks, in elements. */ ++ YYSIZE_T yysize = yyssp - yyss + 1; ++ ++#ifdef yyoverflow ++ { ++ /* Give user a chance to reallocate the stack. Use copies of ++ these so that the &'s don't force the real ones into ++ memory. */ ++ YYSTYPE *yyvs1 = yyvs; ++ yytype_int16 *yyss1 = yyss; ++ ++ /* Each stack pointer address is followed by the size of the ++ data in use in that stack, in bytes. This used to be a ++ conditional around just the two extra args, but that might ++ be undefined if yyoverflow is a macro. */ ++ yyoverflow (YY_("memory exhausted"), ++ &yyss1, yysize * sizeof (*yyssp), ++ &yyvs1, yysize * sizeof (*yyvsp), ++ &yystacksize); ++ ++ yyss = yyss1; ++ yyvs = yyvs1; ++ } ++#else /* no yyoverflow */ ++# ifndef YYSTACK_RELOCATE ++ goto yyexhaustedlab; ++# else ++ /* Extend the stack our own way. */ ++ if (YYMAXDEPTH <= yystacksize) ++ goto yyexhaustedlab; ++ yystacksize *= 2; ++ if (YYMAXDEPTH < yystacksize) ++ yystacksize = YYMAXDEPTH; ++ ++ { ++ yytype_int16 *yyss1 = yyss; ++ union yyalloc *yyptr = ++ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); ++ if (! yyptr) ++ goto yyexhaustedlab; ++ YYSTACK_RELOCATE (yyss_alloc, yyss); ++ YYSTACK_RELOCATE (yyvs_alloc, yyvs); ++# undef YYSTACK_RELOCATE ++ if (yyss1 != yyssa) ++ YYSTACK_FREE (yyss1); ++ } ++# endif ++#endif /* no yyoverflow */ ++ ++ yyssp = yyss + yysize - 1; ++ yyvsp = yyvs + yysize - 1; ++ ++ YYDPRINTF ((stderr, "Stack size increased to %lu\n", ++ (unsigned long int) yystacksize)); ++ ++ if (yyss + yystacksize - 1 <= yyssp) ++ YYABORT; ++ } ++ ++ YYDPRINTF ((stderr, "Entering state %d\n", yystate)); ++ ++ if (yystate == YYFINAL) ++ YYACCEPT; ++ ++ goto yybackup; ++ ++/*-----------. ++| yybackup. | ++`-----------*/ ++yybackup: ++ ++ /* Do appropriate processing given the current state. Read a ++ lookahead token if we need one and don't already have one. */ ++ ++ /* First try to decide what to do without reference to lookahead token. */ ++ yyn = yypact[yystate]; ++ if (yypact_value_is_default (yyn)) ++ goto yydefault; ++ ++ /* Not known => get a lookahead token if don't already have one. */ ++ ++ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ ++ if (yychar == YYEMPTY) ++ { ++ YYDPRINTF ((stderr, "Reading a token: ")); ++ yychar = YYLEX; ++ } ++ ++ if (yychar <= YYEOF) ++ { ++ yychar = yytoken = YYEOF; ++ YYDPRINTF ((stderr, "Now at end of input.\n")); ++ } ++ else ++ { ++ yytoken = YYTRANSLATE (yychar); ++ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); ++ } ++ ++ /* If the proper action on seeing token YYTOKEN is to reduce or to ++ detect an error, take that action. */ ++ yyn += yytoken; ++ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) ++ goto yydefault; ++ yyn = yytable[yyn]; ++ if (yyn <= 0) ++ { ++ if (yytable_value_is_error (yyn)) ++ goto yyerrlab; ++ yyn = -yyn; ++ goto yyreduce; ++ } ++ ++ /* Count tokens shifted since error; after three, turn off error ++ status. */ ++ if (yyerrstatus) ++ yyerrstatus--; ++ ++ /* Shift the lookahead token. */ ++ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); ++ ++ /* Discard the shifted token. */ ++ yychar = YYEMPTY; ++ ++ yystate = yyn; ++ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN ++ *++yyvsp = yylval; ++ YY_IGNORE_MAYBE_UNINITIALIZED_END ++ ++ goto yynewstate; ++ ++ ++/*-----------------------------------------------------------. ++| yydefault -- do the default action for the current state. | ++`-----------------------------------------------------------*/ ++yydefault: ++ yyn = yydefact[yystate]; ++ if (yyn == 0) ++ goto yyerrlab; ++ goto yyreduce; ++ ++ ++/*-----------------------------. ++| yyreduce -- Do a reduction. | ++`-----------------------------*/ ++yyreduce: ++ /* yyn is the number of a rule to reduce with. */ ++ yylen = yyr2[yyn]; ++ ++ /* If YYLEN is nonzero, implement the default value of the action: ++ `$$ = $1'. ++ ++ Otherwise, the following line sets YYVAL to garbage. ++ This behavior is undocumented and Bison ++ users should not rely upon it. Assigning to YYVAL ++ unconditionally makes the parser a bit smaller, and it avoids a ++ GCC warning that YYVAL may be used uninitialized. */ ++ yyval = yyvsp[1-yylen]; ++ ++ ++ YY_REDUCE_PRINT (yyn); ++ switch (yyn) ++ { ++ case 4: ++/* Line 1787 of yacc.c */ ++#line 157 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHaveTime++; ++ } ++ break; ++ ++ case 5: ++/* Line 1787 of yacc.c */ ++#line 160 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHaveZone++; ++ } ++ break; ++ ++ case 6: ++/* Line 1787 of yacc.c */ ++#line 163 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHaveDate++; ++ } ++ break; ++ ++ case 7: ++/* Line 1787 of yacc.c */ ++#line 166 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHaveDay++; ++ } ++ break; ++ ++ case 8: ++/* Line 1787 of yacc.c */ ++#line 169 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHaveRel++; ++ } ++ break; ++ ++ case 10: ++/* Line 1787 of yacc.c */ ++#line 175 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHour = (yyvsp[(1) - (2)].Number); ++ VARIABLE->yyMinutes = 0; ++ VARIABLE->yySeconds = 0; ++ VARIABLE->yyMeridian = (yyvsp[(2) - (2)].Meridian); ++ } ++ break; ++ ++ case 11: ++/* Line 1787 of yacc.c */ ++#line 181 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHour = (yyvsp[(1) - (2)].Number)/100; ++ VARIABLE->yyMinutes = (yyvsp[(1) - (2)].Number)%100; ++ VARIABLE->yySeconds = 0; ++ VARIABLE->yyMeridian = MER24; ++ VARIABLE->yyDSTmode = DSToff; ++ VARIABLE->yyTimezone = - ((yyvsp[(2) - (2)].Number) % 100 + ((yyvsp[(2) - (2)].Number) / 100) * 60); ++ } ++ break; ++ ++ case 12: ++/* Line 1787 of yacc.c */ ++#line 189 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHour = (yyvsp[(1) - (2)].Number)/10000; ++ VARIABLE->yyMinutes = ((yyvsp[(1) - (2)].Number)/100)%100; ++ VARIABLE->yySeconds = (yyvsp[(1) - (2)].Number) % 100; ++ VARIABLE->yyMeridian = MER24; ++ VARIABLE->yyDSTmode = DSToff; ++ VARIABLE->yyTimezone = - ((yyvsp[(2) - (2)].Number) % 100 + ((yyvsp[(2) - (2)].Number) / 100) * 60); ++ } ++ break; ++ ++ case 13: ++/* Line 1787 of yacc.c */ ++#line 197 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHour = (yyvsp[(1) - (4)].Number); ++ VARIABLE->yyMinutes = (yyvsp[(3) - (4)].Number); ++ VARIABLE->yySeconds = 0; ++ VARIABLE->yyMeridian = (yyvsp[(4) - (4)].Meridian); ++ } ++ break; ++ ++ case 14: ++/* Line 1787 of yacc.c */ ++#line 203 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHour = (yyvsp[(1) - (4)].Number); ++ VARIABLE->yyMinutes = (yyvsp[(3) - (4)].Number); ++ VARIABLE->yyMeridian = MER24; ++ VARIABLE->yyDSTmode = DSToff; ++ VARIABLE->yyTimezone = - ((yyvsp[(4) - (4)].Number) % 100 + ((yyvsp[(4) - (4)].Number) / 100) * 60); ++ } ++ break; ++ ++ case 15: ++/* Line 1787 of yacc.c */ ++#line 210 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHour = (yyvsp[(1) - (6)].Number); ++ VARIABLE->yyMinutes = (yyvsp[(3) - (6)].Number); ++ VARIABLE->yySeconds = (yyvsp[(5) - (6)].Number); ++ VARIABLE->yyMeridian = (yyvsp[(6) - (6)].Meridian); ++ } ++ break; ++ ++ case 16: ++/* Line 1787 of yacc.c */ ++#line 216 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyHour = (yyvsp[(1) - (6)].Number); ++ VARIABLE->yyMinutes = (yyvsp[(3) - (6)].Number); ++ VARIABLE->yySeconds = (yyvsp[(5) - (6)].Number); ++ VARIABLE->yyMeridian = MER24; ++ VARIABLE->yyDSTmode = DSToff; ++ VARIABLE->yyTimezone = - ((yyvsp[(6) - (6)].Number) % 100 + ((yyvsp[(6) - (6)].Number) / 100) * 60); ++ } ++ break; ++ ++ case 17: ++/* Line 1787 of yacc.c */ ++#line 226 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyTimezone = (yyvsp[(1) - (1)].Number); ++ VARIABLE->yyDSTmode = DSToff; ++ } ++ break; ++ ++ case 18: ++/* Line 1787 of yacc.c */ ++#line 230 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyTimezone = (yyvsp[(1) - (1)].Number); ++ VARIABLE->yyDSTmode = DSTon; ++ } ++ break; ++ ++ case 19: ++/* Line 1787 of yacc.c */ ++#line 235 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyTimezone = (yyvsp[(1) - (2)].Number); ++ VARIABLE->yyDSTmode = DSTon; ++ } ++ break; ++ ++ case 20: ++/* Line 1787 of yacc.c */ ++#line 239 "ptlib/common/getdate.y" ++ { ++ if (VARIABLE->yyHaveTime > 0) { ++ VARIABLE->yyTimezone = (yyvsp[(1) - (1)].Number); ++ VARIABLE->yyDSTmode = DSToff; ++ } ++ else ++ VARIABLE->yyHaveZone--; ++ } ++ break; ++ ++ case 21: ++/* Line 1787 of yacc.c */ ++#line 249 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyDayOrdinal = 1; ++ VARIABLE->yyDayNumber = (yyvsp[(1) - (1)].Number); ++ } ++ break; ++ ++ case 22: ++/* Line 1787 of yacc.c */ ++#line 253 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyDayOrdinal = 1; ++ VARIABLE->yyDayNumber = (yyvsp[(1) - (2)].Number); ++ } ++ break; ++ ++ case 23: ++/* Line 1787 of yacc.c */ ++#line 257 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyDayOrdinal = (yyvsp[(1) - (2)].Number); ++ VARIABLE->yyDayNumber = (yyvsp[(2) - (2)].Number); ++ } ++ break; ++ ++ case 24: ++/* Line 1787 of yacc.c */ ++#line 263 "ptlib/common/getdate.y" ++ { ++ SetPossibleDate(VARIABLE, (yyvsp[(1) - (3)].Number), (yyvsp[(3) - (3)].Number), VARIABLE->yyYear); ++ } ++ break; ++ ++ case 25: ++/* Line 1787 of yacc.c */ ++#line 266 "ptlib/common/getdate.y" ++ { ++ SetPossibleDate(VARIABLE, (yyvsp[(1) - (5)].Number), (yyvsp[(3) - (5)].Number), (yyvsp[(5) - (5)].Number)); ++ } ++ break; ++ ++ case 26: ++/* Line 1787 of yacc.c */ ++#line 269 "ptlib/common/getdate.y" ++ { ++ /* ISO 8601 format. yyyy-mm-dd. */ ++ SetPossibleDate(VARIABLE, (yyvsp[(1) - (4)].Number), -(yyvsp[(2) - (4)].Number), -(yyvsp[(3) - (4)].Number)); ++ } ++ break; ++ ++ case 27: ++/* Line 1787 of yacc.c */ ++#line 273 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyDay= ((yyvsp[(1) - (1)].Number))%100; ++ VARIABLE->yyMonth= ((yyvsp[(1) - (1)].Number)/100)%100; ++ VARIABLE->yyYear = (yyvsp[(1) - (1)].Number)/10000; ++ } ++ break; ++ ++ case 28: ++/* Line 1787 of yacc.c */ ++#line 278 "ptlib/common/getdate.y" ++ { ++ /* e.g. 17-JUN-1992. */ ++ SetPossibleDate(VARIABLE, (yyvsp[(1) - (3)].Number), (yyvsp[(2) - (3)].Number), -(yyvsp[(3) - (3)].Number)); ++ } ++ break; ++ ++ case 29: ++/* Line 1787 of yacc.c */ ++#line 282 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyMonth = (yyvsp[(1) - (2)].Number); ++ if ((yyvsp[(2) - (2)].Number) > 31) ++ VARIABLE->yyYear = (yyvsp[(2) - (2)].Number); ++ else ++ VARIABLE->yyDay = (yyvsp[(2) - (2)].Number); ++ } ++ break; ++ ++ case 30: ++/* Line 1787 of yacc.c */ ++#line 289 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyMonth = (yyvsp[(1) - (4)].Number); ++ VARIABLE->yyDay = (yyvsp[(2) - (4)].Number); ++ VARIABLE->yyYear = (yyvsp[(4) - (4)].Number); ++ } ++ break; ++ ++ case 31: ++/* Line 1787 of yacc.c */ ++#line 294 "ptlib/common/getdate.y" ++ { ++ if ((yyvsp[(1) - (2)].Number) > 31) ++ VARIABLE->yyYear = (yyvsp[(1) - (2)].Number); ++ else ++ VARIABLE->yyDay = (yyvsp[(1) - (2)].Number); ++ VARIABLE->yyMonth = (yyvsp[(2) - (2)].Number); ++ } ++ break; ++ ++ case 32: ++/* Line 1787 of yacc.c */ ++#line 301 "ptlib/common/getdate.y" ++ { ++ SetPossibleDate(VARIABLE, (yyvsp[(1) - (3)].Number), (yyvsp[(2) - (3)].Number), (yyvsp[(3) - (3)].Number)); ++ } ++ break; ++ ++ case 33: ++/* Line 1787 of yacc.c */ ++#line 306 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelSeconds = -VARIABLE->yyRelSeconds; ++ VARIABLE->yyRelMonth = -VARIABLE->yyRelMonth; ++ } ++ break; ++ ++ case 35: ++/* Line 1787 of yacc.c */ ++#line 313 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelSeconds += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number) * 60L; ++ } ++ break; ++ ++ case 36: ++/* Line 1787 of yacc.c */ ++#line 316 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelSeconds += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number) * 60L; ++ } ++ break; ++ ++ case 37: ++/* Line 1787 of yacc.c */ ++#line 319 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelSeconds += (yyvsp[(1) - (1)].Number) * 60L; ++ } ++ break; ++ ++ case 38: ++/* Line 1787 of yacc.c */ ++#line 322 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelSeconds += (yyvsp[(1) - (2)].Number); ++ } ++ break; ++ ++ case 39: ++/* Line 1787 of yacc.c */ ++#line 325 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelSeconds += (yyvsp[(1) - (2)].Number); ++ } ++ break; ++ ++ case 40: ++/* Line 1787 of yacc.c */ ++#line 328 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelSeconds++; ++ } ++ break; ++ ++ case 41: ++/* Line 1787 of yacc.c */ ++#line 331 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelMonth += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number); ++ } ++ break; ++ ++ case 42: ++/* Line 1787 of yacc.c */ ++#line 334 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelMonth += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number); ++ } ++ break; ++ ++ case 43: ++/* Line 1787 of yacc.c */ ++#line 337 "ptlib/common/getdate.y" ++ { ++ VARIABLE->yyRelMonth += (yyvsp[(1) - (1)].Number); ++ } ++ break; ++ ++ case 44: ++/* Line 1787 of yacc.c */ ++#line 342 "ptlib/common/getdate.y" ++ { ++ (yyval.Number) = (yyvsp[(1) - (1)].Number); ++ } ++ break; ++ ++ case 45: ++/* Line 1787 of yacc.c */ ++#line 345 "ptlib/common/getdate.y" ++ { ++ (yyval.Number) = (yyvsp[(1) - (1)].Number); ++ } ++ break; ++ ++ case 46: ++/* Line 1787 of yacc.c */ ++#line 348 "ptlib/common/getdate.y" ++ { ++ (yyval.Number) = (yyvsp[(1) - (1)].Number); ++ } ++ break; ++ ++ case 47: ++/* Line 1787 of yacc.c */ ++#line 353 "ptlib/common/getdate.y" ++ { ++ if (VARIABLE->yyHaveTime && VARIABLE->yyHaveDate && !VARIABLE->yyHaveRel) ++ VARIABLE->yyYear = (yyvsp[(1) - (1)].Number); ++ else { ++ if((yyvsp[(1) - (1)].Number)>240000) { ++ VARIABLE->yyHaveDate++; ++ VARIABLE->yyDay= ((yyvsp[(1) - (1)].Number))%100; ++ VARIABLE->yyMonth= ((yyvsp[(1) - (1)].Number)/100)%100; ++ VARIABLE->yyYear = (yyvsp[(1) - (1)].Number)/10000; ++ } ++ else { ++ VARIABLE->yyHaveTime++; ++ if ((yyvsp[(1) - (1)].Number) < 10000) { ++ VARIABLE->yyHour = (yyvsp[(1) - (1)].Number) / 100; ++ VARIABLE->yyMinutes = (yyvsp[(1) - (1)].Number) % 100; ++ VARIABLE->yySeconds = 0; ++ } ++ else { ++ VARIABLE->yyHour = (yyvsp[(1) - (1)].Number)/10000; ++ VARIABLE->yyMinutes = ((yyvsp[(1) - (1)].Number)/100)%100; ++ VARIABLE->yySeconds = (yyvsp[(1) - (1)].Number) % 100; ++ } ++ VARIABLE->yyMeridian = MER24; ++ } ++ } ++ } ++ break; ++ ++ case 48: ++/* Line 1787 of yacc.c */ ++#line 379 "ptlib/common/getdate.y" ++ { ++ if (VARIABLE->yyHaveTime && VARIABLE->yyHaveDate && !VARIABLE->yyHaveRel) ++ VARIABLE->yyYear = (yyvsp[(1) - (1)].Number); ++ else { ++ VARIABLE->yyHaveTime++; ++ VARIABLE->yyHour = (yyvsp[(1) - (1)].Number)/100; ++ VARIABLE->yyMinutes = (yyvsp[(1) - (1)].Number)%100; ++ VARIABLE->yySeconds = 0; ++ VARIABLE->yyMeridian = MER24; ++ } ++ } ++ break; ++ ++ case 49: ++/* Line 1787 of yacc.c */ ++#line 390 "ptlib/common/getdate.y" ++ { ++ if (!VARIABLE->yyHaveDate && (yyvsp[(1) - (1)].Number)>240000) { ++ VARIABLE->yyHaveDate++; ++ VARIABLE->yyDay= ((yyvsp[(1) - (1)].Number))%100; ++ VARIABLE->yyMonth= ((yyvsp[(1) - (1)].Number)/100)%100; ++ VARIABLE->yyYear = (yyvsp[(1) - (1)].Number)/10000; ++ } ++ else if (!VARIABLE->yyHaveTime) { ++ VARIABLE->yyHaveTime++; ++ VARIABLE->yyHour = (yyvsp[(1) - (1)].Number)/10000; ++ VARIABLE->yyMinutes = ((yyvsp[(1) - (1)].Number)/100)%100; ++ VARIABLE->yySeconds = (yyvsp[(1) - (1)].Number) % 100; ++ VARIABLE->yyMeridian = MER24; ++ } ++ } ++ break; ++ ++ case 50: ++/* Line 1787 of yacc.c */ ++#line 407 "ptlib/common/getdate.y" ++ { ++ (yyval.Meridian) = MER24; ++ } ++ break; ++ ++ case 51: ++/* Line 1787 of yacc.c */ ++#line 410 "ptlib/common/getdate.y" ++ { ++ (yyval.Meridian) = (yyvsp[(1) - (1)].Meridian); ++ } ++ break; ++ ++ ++/* Line 1787 of yacc.c */ ++#line 2031 "ptlib/common/getdate.tab.c" ++ default: break; ++ } ++ /* User semantic actions sometimes alter yychar, and that requires ++ that yytoken be updated with the new translation. We take the ++ approach of translating immediately before every use of yytoken. ++ One alternative is translating here after every semantic action, ++ but that translation would be missed if the semantic action invokes ++ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or ++ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an ++ incorrect destructor might then be invoked immediately. In the ++ case of YYERROR or YYBACKUP, subsequent parser actions might lead ++ to an incorrect destructor call or verbose syntax error message ++ before the lookahead is translated. */ ++ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); ++ ++ YYPOPSTACK (yylen); ++ yylen = 0; ++ YY_STACK_PRINT (yyss, yyssp); ++ ++ *++yyvsp = yyval; ++ ++ /* Now `shift' the result of the reduction. Determine what state ++ that goes to, based on the state we popped back to and the rule ++ number reduced by. */ ++ ++ yyn = yyr1[yyn]; ++ ++ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; ++ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) ++ yystate = yytable[yystate]; ++ else ++ yystate = yydefgoto[yyn - YYNTOKENS]; ++ ++ goto yynewstate; ++ ++ ++/*------------------------------------. ++| yyerrlab -- here on detecting error | ++`------------------------------------*/ ++yyerrlab: ++ /* Make sure we have latest lookahead translation. See comments at ++ user semantic actions for why this is necessary. */ ++ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); ++ ++ /* If not already recovering from an error, report this error. */ ++ if (!yyerrstatus) ++ { ++ ++yynerrs; ++#if ! YYERROR_VERBOSE ++ yyerror (YY_("syntax error")); ++#else ++# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ ++ yyssp, yytoken) ++ { ++ char const *yymsgp = YY_("syntax error"); ++ int yysyntax_error_status; ++ yysyntax_error_status = YYSYNTAX_ERROR; ++ if (yysyntax_error_status == 0) ++ yymsgp = yymsg; ++ else if (yysyntax_error_status == 1) ++ { ++ if (yymsg != yymsgbuf) ++ YYSTACK_FREE (yymsg); ++ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); ++ if (!yymsg) ++ { ++ yymsg = yymsgbuf; ++ yymsg_alloc = sizeof yymsgbuf; ++ yysyntax_error_status = 2; ++ } ++ else ++ { ++ yysyntax_error_status = YYSYNTAX_ERROR; ++ yymsgp = yymsg; ++ } ++ } ++ yyerror (yymsgp); ++ if (yysyntax_error_status == 2) ++ goto yyexhaustedlab; ++ } ++# undef YYSYNTAX_ERROR ++#endif ++ } ++ ++ ++ ++ if (yyerrstatus == 3) ++ { ++ /* If just tried and failed to reuse lookahead token after an ++ error, discard it. */ ++ ++ if (yychar <= YYEOF) ++ { ++ /* Return failure if at end of input. */ ++ if (yychar == YYEOF) ++ YYABORT; ++ } ++ else ++ { ++ yydestruct ("Error: discarding", ++ yytoken, &yylval); ++ yychar = YYEMPTY; ++ } ++ } ++ ++ /* Else will try to reuse lookahead token after shifting the error ++ token. */ ++ goto yyerrlab1; ++ ++ ++/*---------------------------------------------------. ++| yyerrorlab -- error raised explicitly by YYERROR. | ++`---------------------------------------------------*/ ++yyerrorlab: ++ ++ /* Pacify compilers like GCC when the user code never invokes ++ YYERROR and the label yyerrorlab therefore never appears in user ++ code. */ ++ if (/*CONSTCOND*/ 0) ++ goto yyerrorlab; ++ ++ /* Do not reclaim the symbols of the rule which action triggered ++ this YYERROR. */ ++ YYPOPSTACK (yylen); ++ yylen = 0; ++ YY_STACK_PRINT (yyss, yyssp); ++ yystate = *yyssp; ++ goto yyerrlab1; ++ ++ ++/*-------------------------------------------------------------. ++| yyerrlab1 -- common code for both syntax error and YYERROR. | ++`-------------------------------------------------------------*/ ++yyerrlab1: ++ yyerrstatus = 3; /* Each real token shifted decrements this. */ ++ ++ for (;;) ++ { ++ yyn = yypact[yystate]; ++ if (!yypact_value_is_default (yyn)) ++ { ++ yyn += YYTERROR; ++ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) ++ { ++ yyn = yytable[yyn]; ++ if (0 < yyn) ++ break; ++ } ++ } ++ ++ /* Pop the current state because it cannot handle the error token. */ ++ if (yyssp == yyss) ++ YYABORT; ++ ++ ++ yydestruct ("Error: popping", ++ yystos[yystate], yyvsp); ++ YYPOPSTACK (1); ++ yystate = *yyssp; ++ YY_STACK_PRINT (yyss, yyssp); ++ } ++ ++ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN ++ *++yyvsp = yylval; ++ YY_IGNORE_MAYBE_UNINITIALIZED_END ++ ++ ++ /* Shift the error token. */ ++ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); ++ ++ yystate = yyn; ++ goto yynewstate; ++ ++ ++/*-------------------------------------. ++| yyacceptlab -- YYACCEPT comes here. | ++`-------------------------------------*/ ++yyacceptlab: ++ yyresult = 0; ++ goto yyreturn; ++ ++/*-----------------------------------. ++| yyabortlab -- YYABORT comes here. | ++`-----------------------------------*/ ++yyabortlab: ++ yyresult = 1; ++ goto yyreturn; ++ ++#if !defined yyoverflow || YYERROR_VERBOSE ++/*-------------------------------------------------. ++| yyexhaustedlab -- memory exhaustion comes here. | ++`-------------------------------------------------*/ ++yyexhaustedlab: ++ yyerror (YY_("memory exhausted")); ++ yyresult = 2; ++ /* Fall through. */ ++#endif ++ ++yyreturn: ++ if (yychar != YYEMPTY) ++ { ++ /* Make sure we have latest lookahead translation. See comments at ++ user semantic actions for why this is necessary. */ ++ yytoken = YYTRANSLATE (yychar); ++ yydestruct ("Cleanup: discarding lookahead", ++ yytoken, &yylval); ++ } ++ /* Do not reclaim the symbols of the rule which action triggered ++ this YYABORT or YYACCEPT. */ ++ YYPOPSTACK (yylen); ++ YY_STACK_PRINT (yyss, yyssp); ++ while (yyssp != yyss) ++ { ++ yydestruct ("Cleanup: popping", ++ yystos[*yyssp], yyvsp); ++ YYPOPSTACK (1); ++ } ++#ifndef yyoverflow ++ if (yyss != yyssa) ++ YYSTACK_FREE (yyss); ++#endif ++#if YYERROR_VERBOSE ++ if (yymsg != yymsgbuf) ++ YYSTACK_FREE (yymsg); ++#endif ++ /* Make sure YYID is used. */ ++ return YYID (yyresult); ++} ++ ++ ++/* Line 2050 of yacc.c */ ++#line 415 "ptlib/common/getdate.y" ++ ++ ++/* Month and day table. */ ++static TABLE const MonthDayTable[] = { ++ { "january", tMONTH, 1 }, ++ { "february", tMONTH, 2 }, ++ { "march", tMONTH, 3 }, ++ { "april", tMONTH, 4 }, ++ { "may", tMONTH, 5 }, ++ { "june", tMONTH, 6 }, ++ { "july", tMONTH, 7 }, ++ { "august", tMONTH, 8 }, ++ { "september", tMONTH, 9 }, ++ { "sept", tMONTH, 9 }, ++ { "october", tMONTH, 10 }, ++ { "november", tMONTH, 11 }, ++ { "december", tMONTH, 12 }, ++ { "sunday", tDAY, 0 }, ++ { "monday", tDAY, 1 }, ++ { "tuesday", tDAY, 2 }, ++ { "tues", tDAY, 2 }, ++ { "wednesday", tDAY, 3 }, ++ { "wednes", tDAY, 3 }, ++ { "thursday", tDAY, 4 }, ++ { "thur", tDAY, 4 }, ++ { "thurs", tDAY, 4 }, ++ { "friday", tDAY, 5 }, ++ { "saturday", tDAY, 6 }, ++ { NULL } ++}; ++ ++/* Time units table. */ ++static TABLE const UnitsTable[] = { ++ { "year", tMONTH_UNIT, 12 }, ++ { "month", tMONTH_UNIT, 1 }, ++ { "fortnight", tMINUTE_UNIT, 14 * 24 * 60 }, ++ { "week", tMINUTE_UNIT, 7 * 24 * 60 }, ++ { "day", tMINUTE_UNIT, 1 * 24 * 60 }, ++ { "hour", tMINUTE_UNIT, 60 }, ++ { "minute", tMINUTE_UNIT, 1 }, ++ { "min", tMINUTE_UNIT, 1 }, ++ { "second", tSEC_UNIT, 1 }, ++ { "sec", tSEC_UNIT, 1 }, ++ { NULL } ++}; ++ ++/* Assorted relative-time words. */ ++static TABLE const OtherTable[] = { ++ { "tomorrow", tMINUTE_UNIT, 1 * 24 * 60 }, ++ { "yesterday", tMINUTE_UNIT, -1 * 24 * 60 }, ++ { "today", tMINUTE_UNIT, 0 }, ++ { "now", tMINUTE_UNIT, 0 }, ++ { "last", tUNUMBER, -1 }, ++ { "this", tMINUTE_UNIT, 0 }, ++ { "next", tUNUMBER, 2 }, ++ { "first", tUNUMBER, 1 }, ++/* { "second", tUNUMBER, 2 }, */ ++ { "third", tUNUMBER, 3 }, ++ { "fourth", tUNUMBER, 4 }, ++ { "fifth", tUNUMBER, 5 }, ++ { "sixth", tUNUMBER, 6 }, ++ { "seventh", tUNUMBER, 7 }, ++ { "eighth", tUNUMBER, 8 }, ++ { "ninth", tUNUMBER, 9 }, ++ { "tenth", tUNUMBER, 10 }, ++ { "eleventh", tUNUMBER, 11 }, ++ { "twelfth", tUNUMBER, 12 }, ++ { "ago", tAGO, 1 }, ++ { NULL } ++}; ++ ++/* The timezone table. */ ++/* Some of these are commented out because a time_t can't store a float. */ ++static TABLE const TimezoneTable[] = { ++ { "gmt", tZONE, HOUR( 0) }, /* Greenwich Mean */ ++ { "ut", tZONE, HOUR( 0) }, /* Universal (Coordinated) */ ++ { "utc", tZONE, HOUR( 0) }, ++ { "wet", tZONE, HOUR( 0) }, /* Western European */ ++ { "bst", tDAYZONE, HOUR( 0) }, /* British Summer */ ++ { "wat", tZONE, HOUR( 1) }, /* West Africa */ ++ { "at", tZONE, HOUR( 2) }, /* Azores */ ++#if 0 ++ /* For completeness. BST is also British Summer, and GST is ++ * also Guam Standard. */ ++ { "bst", tZONE, HOUR( 3) }, /* Brazil Standard */ ++ { "gst", tZONE, HOUR( 3) }, /* Greenland Standard */ ++#endif ++#if 0 ++ { "nft", tZONE, HOUR(3.5) }, /* Newfoundland */ ++ { "nst", tZONE, HOUR(3.5) }, /* Newfoundland Standard */ ++ { "ndt", tDAYZONE, HOUR(3.5) }, /* Newfoundland Daylight */ ++#endif ++ { "ast", tZONE, HOUR( 4) }, /* Atlantic Standard */ ++ { "adt", tDAYZONE, HOUR( 4) }, /* Atlantic Daylight */ ++ { "est", tZONE, HOUR( 5) }, /* Eastern Standard */ ++ { "edt", tDAYZONE, HOUR( 5) }, /* Eastern Daylight */ ++ { "cst", tZONE, HOUR( 6) }, /* Central Standard */ ++ { "cdt", tDAYZONE, HOUR( 6) }, /* Central Daylight */ ++ { "mst", tZONE, HOUR( 7) }, /* Mountain Standard */ ++ { "mdt", tDAYZONE, HOUR( 7) }, /* Mountain Daylight */ ++ { "pst", tZONE, HOUR( 8) }, /* Pacific Standard */ ++ { "pdt", tDAYZONE, HOUR( 8) }, /* Pacific Daylight */ ++ { "yst", tZONE, HOUR( 9) }, /* Yukon Standard */ ++ { "ydt", tDAYZONE, HOUR( 9) }, /* Yukon Daylight */ ++ { "hst", tZONE, HOUR(10) }, /* Hawaii Standard */ ++ { "hdt", tDAYZONE, HOUR(10) }, /* Hawaii Daylight */ ++ { "cat", tZONE, HOUR(10) }, /* Central Alaska */ ++ { "ahst", tZONE, HOUR(10) }, /* Alaska-Hawaii Standard */ ++ { "nt", tZONE, HOUR(11) }, /* Nome */ ++ { "idlw", tZONE, HOUR(12) }, /* International Date Line West */ ++ { "cet", tZONE, -HOUR(1) }, /* Central European */ ++ { "met", tZONE, -HOUR(1) }, /* Middle European */ ++ { "mewt", tZONE, -HOUR(1) }, /* Middle European Winter */ ++ { "mest", tDAYZONE, -HOUR(1) }, /* Middle European Summer */ ++ { "swt", tZONE, -HOUR(1) }, /* Swedish Winter */ ++ { "sst", tDAYZONE, -HOUR(1) }, /* Swedish Summer */ ++ { "fwt", tZONE, -HOUR(1) }, /* French Winter */ ++ { "fst", tDAYZONE, -HOUR(1) }, /* French Summer */ ++ { "eet", tZONE, -HOUR(2) }, /* Eastern Europe, USSR Zone 1 */ ++ { "bt", tZONE, -HOUR(3) }, /* Baghdad, USSR Zone 2 */ ++#if 0 ++ { "it", tZONE, -HOUR(3.5) },/* Iran */ ++#endif ++ { "zp4", tZONE, -HOUR(4) }, /* USSR Zone 3 */ ++ { "zp5", tZONE, -HOUR(5) }, /* USSR Zone 4 */ ++#if 0 ++ { "ist", tZONE, -HOUR(5.5) },/* Indian Standard */ ++#endif ++ { "zp6", tZONE, -HOUR(6) }, /* USSR Zone 5 */ ++#if 0 ++ /* For completeness. NST is also Newfoundland Stanard, and SST is ++ * also Swedish Summer. */ ++ { "nst", tZONE, -HOUR(6.5) },/* North Sumatra */ ++ { "sst", tZONE, -HOUR(7) }, /* South Sumatra, USSR Zone 6 */ ++#endif /* 0 */ ++ { "wast", tZONE, -HOUR(7) }, /* West Australian Standard */ ++ { "wadt", tDAYZONE, -HOUR(7) }, /* West Australian Daylight */ ++#if 0 ++ { "jt", tZONE, -HOUR(7.5) },/* Java (3pm in Cronusland!) */ ++#endif ++ { "cct", tZONE, -HOUR(8) }, /* China Coast, USSR Zone 7 */ ++ { "jst", tZONE, -HOUR(9) }, /* Japan Standard, USSR Zone 8 */ ++#if 0 ++ { "cast", tZONE, -HOUR(9.5) },/* Central Australian Standard */ ++ { "cadt", tDAYZONE, -HOUR(9.5) },/* Central Australian Daylight */ ++#endif ++ { "east", tZONE, -HOUR(10) }, /* Eastern Australian Standard */ ++ { "eadt", tDAYZONE, -HOUR(10) }, /* Eastern Australian Daylight */ ++ { "gst", tZONE, -HOUR(10) }, /* Guam Standard, USSR Zone 9 */ ++ { "nzt", tZONE, -HOUR(12) }, /* New Zealand */ ++ { "nzst", tZONE, -HOUR(12) }, /* New Zealand Standard */ ++ { "nzdt", tDAYZONE, -HOUR(12) }, /* New Zealand Daylight */ ++ { "idle", tZONE, -HOUR(12) }, /* International Date Line East */ ++ { NULL } ++}; ++ ++/* Military timezone table. */ ++static TABLE const MilitaryTable[] = { ++ { "a", tMILZONE, HOUR( 1) }, ++ { "b", tMILZONE, HOUR( 2) }, ++ { "c", tMILZONE, HOUR( 3) }, ++ { "d", tMILZONE, HOUR( 4) }, ++ { "e", tMILZONE, HOUR( 5) }, ++ { "f", tMILZONE, HOUR( 6) }, ++ { "g", tMILZONE, HOUR( 7) }, ++ { "h", tMILZONE, HOUR( 8) }, ++ { "i", tMILZONE, HOUR( 9) }, ++ { "k", tMILZONE, HOUR( 10) }, ++ { "l", tMILZONE, HOUR( 11) }, ++ { "m", tMILZONE, HOUR( 12) }, ++ { "n", tMILZONE, HOUR(- 1) }, ++ { "o", tMILZONE, HOUR(- 2) }, ++ { "p", tMILZONE, HOUR(- 3) }, ++ { "q", tMILZONE, HOUR(- 4) }, ++ { "r", tMILZONE, HOUR(- 5) }, ++ { "s", tMILZONE, HOUR(- 6) }, ++ { "t", tMILZONE, HOUR(- 7) }, ++ { "u", tMILZONE, HOUR(- 8) }, ++ { "v", tMILZONE, HOUR(- 9) }, ++ { "w", tMILZONE, HOUR(-10) }, ++ { "x", tMILZONE, HOUR(-11) }, ++ { "y", tMILZONE, HOUR(-12) }, ++ { "z", tZONE, HOUR( 0) }, /* Deliberately tZONE */ ++ { NULL } ++}; ++ ++static int LookupWord(char * buff, YYSTYPE * yylval, struct Variables * vars) ++{ ++ register char *p; ++ register char *q; ++ register const TABLE *tp; ++ int i; ++ int abbrev; ++ ++ /* Make it lowercase. */ ++ for (p = buff; *p != '\0'; p++) ++ *p = (char)tolower(*p); ++ ++ if (strcmp(buff, "am") == 0 || strcmp(buff, "a.m.") == 0) { ++ yylval->Meridian = MERam; ++ return tMERIDIAN; ++ } ++ if (strcmp(buff, "pm") == 0 || strcmp(buff, "p.m.") == 0) { ++ yylval->Meridian = MERpm; ++ return tMERIDIAN; ++ } ++ ++ /* See if we have an abbreviation for a month. */ ++ if (strlen(buff) == 3) ++ abbrev = 1; ++ else if (strlen(buff) == 4 && buff[3] == '.') { ++ abbrev = 1; ++ buff[3] = '\0'; ++ } ++ else ++ abbrev = 0; ++ ++ for (tp = MonthDayTable; tp->name; tp++) { ++ if (abbrev) { ++ if (strncmp(buff, tp->name, 3) == 0) { ++ yylval->Number = tp->value; ++ return tp->type; ++ } ++ } ++ else if (strcmp(buff, tp->name) == 0) { ++ yylval->Number = tp->value; ++ return tp->type; ++ } ++ } ++ ++ for (tp = TimezoneTable; tp->name; tp++) ++ if (strcmp(buff, tp->name) == 0) { ++ yylval->Number = tp->value; ++ return tp->type; ++ } ++ ++ if (strcmp(buff, "dst") == 0) ++ return tDST; ++ ++ for (tp = UnitsTable; tp->name; tp++) ++ if (strcmp(buff, tp->name) == 0) { ++ yylval->Number = tp->value; ++ return tp->type; ++ } ++ ++ /* Strip off any plural and try the units table again. */ ++ i = strlen(buff) - 1; ++ if (buff[i] == 's') { ++ buff[i] = '\0'; ++ for (tp = UnitsTable; tp->name; tp++) ++ if (strcmp(buff, tp->name) == 0) { ++ yylval->Number = tp->value; ++ return tp->type; ++ } ++ buff[i] = 's'; /* Put back for "this" in OtherTable. */ ++ } ++ ++ for (tp = OtherTable; tp->name; tp++) ++ if (strcmp(buff, tp->name) == 0) { ++ yylval->Number = tp->value; ++ return tp->type; ++ } ++ ++ /* Avoid confusion with 'T' in RFC3339 and 't' in Military timezones */ ++ if (!vars->yyHaveTime && strcmp(buff, "t") == 0) ++ return tRFC3339; ++ ++ /* Military timezones. */ ++ if (buff[1] == '\0' && isalpha(*buff)) { ++ for (tp = MilitaryTable; tp->name; tp++) ++ if (strcmp(buff, tp->name) == 0) { ++ yylval->Number = tp->value; ++ return tp->type; ++ } ++ } ++ ++ /* Drop out any periods and try the timezone table again. */ ++ for (i = 0, p = q = buff; *q; q++) ++ if (*q != '.') ++ *p++ = *q; ++ else ++ i++; ++ *p = '\0'; ++ if (i) ++ for (tp = TimezoneTable; tp->name; tp++) ++ if (strcmp(buff, tp->name) == 0) { ++ yylval->Number = tp->value; ++ return tp->type; ++ } ++ ++ for (i = 1; i <= 12; i++) ++ for (abbrev = 0; abbrev < 2; abbrev++) ++ if (PTimeIsMonthName(buff, i, abbrev)) { ++ yylval->Number = i; ++ return tMONTH; ++ } ++ ++ for (i = 1; i <= 7; i++) ++ for (abbrev = 0; abbrev < 2; abbrev++) ++ if (PTimeIsDayName(buff, i, abbrev)) { ++ yylval->Number = i; ++ return tDAY; ++ } ++ ++ return tID; ++} ++ ++ ++#ifdef _MSC_VER ++#pragma warning(disable:4211) ++#endif ++ ++#ifndef __GNUC__ ++static ++#endif ++int yylex(YYSTYPE * yylval, struct Variables * vars) ++{ ++ register char *p; ++ char buff[20]; ++ int Count; ++ int sign; ++ register int c = PTimeGetChar(vars->yyInput); ++ ++ while (c != EOF && c != '\0' && c != '\n') { ++ while (isspace(c)) ++ c = PTimeGetChar(vars->yyInput); ++ ++ if (isdigit(c) || c == '-' || c == '+') { ++ if (c == '-' || c == '+') { ++ sign = c == '-' ? -1 : 1; ++ if (!isdigit(c = PTimeGetChar(vars->yyInput))) ++ /* skip the '-' sign */ ++ continue; ++ } ++ else ++ sign = 0; ++ yylval->Number = 0; ++ Count = 0; /* Count number of digits */ ++ while (isdigit(c)) { ++ yylval->Number = 10 * yylval->Number + c - '0'; ++ c = PTimeGetChar(vars->yyInput); ++ Count++; ++ } ++ PTimeUngetChar(vars->yyInput, c); ++ if (sign < 0) ++ yylval->Number = -yylval->Number; ++ if (Count == 4) ++ return sign ? tS4DIGITNUMBER : t4DIGITNUMBER; ++ if (sign) ++ return tSNUMBER; ++ if (Count == 6) ++ return t6DIGITNUMBER; ++ if (Count == 8) ++ return t8DIGITNUMBER; ++ return tUNUMBER; ++ } ++ ++ if (isalpha(c)) { ++ for (p = buff; isalpha(c) || c == '.'; c = PTimeGetChar(vars->yyInput)) { ++ if (p < &buff[sizeof(buff)-1]) ++ *p++ = (char)c; ++ } ++ *p = '\0'; ++ PTimeUngetChar(vars->yyInput, c); ++ return LookupWord(buff, yylval, vars); ++ } ++ ++ if (c != '(') ++ return c; ++ ++ Count = 0; ++ do { ++ c = PTimeGetChar(vars->yyInput); ++ if (c == '\0' || c == EOF) ++ return c; ++ if (c == '(') ++ Count++; ++ else if (c == ')') ++ Count--; ++ } while (Count > 0); ++ } ++ ++ if (c == '\n') ++ PTimeUngetChar(vars->yyInput, c); ++ ++ return EOF; ++} ++ ++#ifdef _MSC_VER ++#pragma warning(default:4211) ++#endif ++ ++ ++static time_t ToSeconds(time_t Hours, time_t Minutes, time_t Seconds, ++ MERIDIAN Meridian) ++{ ++ if (Minutes < 0 || Minutes > 59 || Seconds < 0 || Seconds > 59) ++ return -1; ++ switch (Meridian) { ++ case MER24: ++ if (Hours < 0 || Hours > 23) ++ return -1; ++ return (Hours * 60L + Minutes) * 60L + Seconds; ++ case MERam: ++ if (Hours < 1 || Hours > 12) ++ return -1; ++ if (Hours == 12) ++ Hours = 0; ++ return (Hours * 60L + Minutes) * 60L + Seconds; ++ case MERpm: ++ if (Hours < 1 || Hours > 12) ++ return -1; ++ if (Hours == 12) ++ Hours = 0; ++ return ((Hours + 12) * 60L + Minutes) * 60L + Seconds; ++ } ++ ++ return -1; ++} ++ ++ ++static time_t Convert(time_t Month, time_t Day, time_t Year, ++ time_t Hours, time_t Minutes, time_t Seconds, ++ MERIDIAN Meridian, DSTMODE DSTmode, time_t yyTimezone) ++{ ++ static int DaysInMonth[12] = { ++ 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ++ }; ++ time_t tod; ++ time_t Julian; ++ int i; ++ ++ if (Year < 0) ++ Year = -Year; ++ if (Year < 70) ++ Year += 2000; ++ else if (Year < 100) ++ Year += 1900; ++ DaysInMonth[1] = Year % 4 == 0 && (Year % 100 != 0 || Year % 400 == 0) ++ ? 29 : 28; ++ /* Checking for 2038 bogusly assumes that time_t is 32 bits. But ++ I'm too lazy to try to check for time_t overflow in another way. */ ++ if (Year < EPOCH || Year > 2038 ++ || Month < 1 || Month > 12 ++ /* Lint fluff: "conversion from long may lose accuracy" */ ++ || Day < 1 || Day > DaysInMonth[(int)--Month]) ++ return -1; ++ ++ for (Julian = Day - 1, i = 0; i < Month; i++) ++ Julian += DaysInMonth[i]; ++ for (i = EPOCH; i < Year; i++) ++ Julian += 365 + (i % 4 == 0); ++ Julian *= SECSPERDAY; ++ Julian += yyTimezone * 60L; ++ if ((tod = ToSeconds(Hours, Minutes, Seconds, Meridian)) < 0) ++ return -1; ++ Julian += tod; ++ if (DSTmode == DSTon ++ || (DSTmode == DSTmaybe && localtime(&Julian)->tm_isdst)) ++ Julian -= 60 * 60; ++ return Julian; ++} ++ ++ ++static time_t DSTcorrect(time_t Start, time_t Future) ++{ ++ time_t StartDay; ++ time_t FutureDay; ++ ++ StartDay = (localtime(&Start)->tm_hour + 1) % 24; ++ FutureDay = (localtime(&Future)->tm_hour + 1) % 24; ++ return (Future - Start) + (StartDay - FutureDay) * 60L * 60L; ++} ++ ++ ++static time_t RelativeDate(time_t Start, time_t DayOrdinal, time_t DayNumber) ++{ ++ struct tm *tm; ++ time_t now; ++ ++ now = Start; ++ tm = localtime(&now); ++ now += SECSPERDAY * ((DayNumber - tm->tm_wday + 7) % 7); ++ now += 7 * SECSPERDAY * (DayOrdinal <= 0 ? DayOrdinal : DayOrdinal - 1); ++ return DSTcorrect(Start, now); ++} ++ ++ ++static time_t RelativeMonth(time_t Start, time_t RelMonth, time_t yyTimezone) ++{ ++ struct tm *tm; ++ time_t Month; ++ time_t Year; ++ ++ if (RelMonth == 0) ++ return 0; ++ tm = localtime(&Start); ++ Month = 12 * tm->tm_year + tm->tm_mon + RelMonth; ++ Year = Month / 12 + 1900; ++ Month = Month % 12 + 1; ++ return DSTcorrect(Start, ++ Convert(Month, (time_t)tm->tm_mday, Year, ++ (time_t)tm->tm_hour, (time_t)tm->tm_min, (time_t)tm->tm_sec, ++ MER24, DSTmaybe, yyTimezone)); ++} ++ ++ ++static void SetPossibleDate(struct Variables * var, ++ time_t possible_day, ++ time_t possible_month, ++ time_t possible_year) ++{ ++ int date_order; ++ ++ if (possible_day > 31) /* test for ymd */ ++ date_order = 2; ++ else if (possible_day > 12) /* test for dmy */ ++ date_order = 1; ++ else if (possible_month > 12) /* test for mdy */ ++ date_order = 0; ++ else ++ date_order = PTimeGetDateOrder(); ++ ++ switch (date_order) { ++ case 0 : ++ var->yyDay = possible_month; ++ var->yyMonth = possible_day; ++ var->yyYear = possible_year; ++ break; ++ case 1 : ++ var->yyDay = possible_day; ++ var->yyMonth = possible_month; ++ var->yyYear = possible_year; ++ break; ++ default : ++ var->yyDay = possible_year; ++ var->yyMonth = possible_month; ++ var->yyYear = possible_day; ++ } ++} ++ ++ ++time_t STDAPICALLTYPE PTimeParse(void * inputStream, struct tm * now, int timezone) ++{ ++ time_t Start; ++ struct Variables var; ++ ++ ++ var.yyInput = inputStream; ++ var.yyYear = now->tm_year + 1900; ++ var.yyMonth = now->tm_mon + 1; ++ var.yyDay = now->tm_mday; ++ var.yyTimezone = -timezone; ++ var.yyDSTmode = DSTmaybe; ++ var.yyHour = 0; ++ var.yyMinutes = 0; ++ var.yySeconds = 0; ++ var.yyMeridian = MER24; ++ var.yyRelSeconds = 0; ++ var.yyRelMonth = 0; ++ var.yyHaveDate = 0; ++ var.yyHaveDay = 0; ++ var.yyHaveRel = 0; ++ var.yyHaveTime = 0; ++ var.yyHaveZone = 0; ++ ++ yyparse(&var); ++ ++ if (var.yyHaveTime > 1 || var.yyHaveZone > 1 || ++ var.yyHaveDate > 1 || var.yyHaveDay > 1) ++ return -1; ++ ++ if (var.yyHaveTime == 0 && var.yyHaveZone == 0 && ++ var.yyHaveDate == 0 && var.yyHaveDay == 0 && var.yyHaveRel == 0) ++ return -1; ++ ++ if (var.yyHaveDate || var.yyHaveTime || var.yyHaveDay) { ++ Start = Convert(var.yyMonth, var.yyDay, var.yyYear, ++ var.yyHour, var.yyMinutes, var.yySeconds, ++ var.yyMeridian, var.yyDSTmode, var.yyTimezone); ++ if (Start < 0) ++ return -1; ++ } ++ else { ++ time(&Start); ++ if (!var.yyHaveRel) ++ Start -= ((now->tm_hour * 60L + now->tm_min) * 60L) + now->tm_sec; ++ } ++ ++ Start += var.yyRelSeconds; ++ Start += RelativeMonth(Start, var.yyRelMonth, var.yyTimezone); ++ ++ if (var.yyHaveDay && !var.yyHaveDate) ++ Start += RelativeDate(Start, var.yyDayOrdinal, var.yyDayNumber); ++ ++ /* Have to do *something* with a legitimate -1 so it's distinguishable ++ * from the error return value. (Alternately could set errno on error.) */ ++ return Start == -1 ? 0 : Start; ++} ++ ++ ++#ifdef _MSC_VER ++#pragma warning(disable:4028 4100 4211) ++#endif ++ ++#ifdef __GNUC__ ++int yyerror(const char * s) ++{ ++ return 0; ++} ++#else ++static void yyerror(const char * s) ++{ ++} ++#endif ++ ++#ifdef _MSC_VER ++#pragma warning(default:4028 4100 4211) ++#endif ++ ++ ++/* End of file ***************************************************************/ +diff -Naur ptlib-2.10.11.orig/src/ptlib/unix/svcproc.cxx ptlib-2.10.11/src/ptlib/unix/svcproc.cxx +--- ptlib-2.10.11.orig/src/ptlib/unix/svcproc.cxx 2013-08-14 18:20:26.000000000 -0500 ++++ ptlib-2.10.11/src/ptlib/unix/svcproc.cxx 2016-05-04 19:42:20.526529457 -0500 +@@ -217,7 +217,7 @@ + pid_t pid; + + { +- ifstream pidfile(pidfilename); ++ ifstream pidfile((std::string&)pidfilename); + if (!pidfile.is_open()) { + cout << "Could not open pid file: \"" << pidfilename << "\"" + " - " << strerror(errno) << endl; +@@ -384,7 +384,7 @@ + // Run as a daemon, ie fork + + if (!pidfilename) { +- ifstream pidfile(pidfilename); ++ ifstream pidfile((std::string&)pidfilename); + if (pidfile.is_open()) { + pid_t pid; + pidfile >> pid; +@@ -412,7 +412,7 @@ + cout << "Daemon started with pid " << pid << endl; + if (!pidfilename) { + // Write out the child pid to magic file in /var/run (at least for linux) +- ofstream pidfile(pidfilename); ++ ofstream pidfile((std::string&)pidfilename); + if (pidfile.is_open()) + pidfile << pid; + else diff --git a/ptlib/sndio.patch b/ptlib/sndio.patch new file mode 100644 index 0000000..8019b78 --- /dev/null +++ b/ptlib/sndio.patch @@ -0,0 +1,926 @@ +diff --git a/configure b/configure +index 4c68d59..a872544 100755 +--- a/configure ++++ b/configure +@@ -852,6 +852,7 @@ enable_dc + enable_vfw + enable_alsa + enable_oss ++enable_sndio + enable_pulse + enable_memcheck + enable_odbc +@@ -1548,6 +1549,7 @@ Optional Features: + --enable-vfw enable video for windows capture + --enable-alsa enable ALSA audio support + --enable-oss enable OSS audio support ++ --enable-sndio enable SNDIO audio support + --enable-pulse enable PULSE audio support + --enable-memcheck enable leak testing code (off by default) + --disable-odbc disable ODBC support +@@ -10253,6 +10255,11 @@ if test "${enable_oss+set}" = set; then : + enableval=$enable_oss; enable_oss=$enableval + fi + ++ # Check whether --enable-sndio was given. ++if test "${enable_sndio+set}" = set; then : ++ enableval=$enable_sndio; enable_sndio=$enableval ++fi ++ + # Check whether --enable-pulse was given. + if test "${enable_pulse+set}" = set; then : + enableval=$enable_pulse; enable_pulse=$enableval +diff --git a/configure.ac b/configure.ac +index 74d5921..222021e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1623,6 +1623,7 @@ if test "x${HAS_AUDIO}" = "x1" ; then + dnl these are needed to pass through to the plugin configure program + AC_ARG_ENABLE(alsa, [ --enable-alsa enable ALSA audio support],enable_alsa=$enableval) + AC_ARG_ENABLE(oss, [ --enable-oss enable OSS audio support],enable_oss=$enableval) ++ AC_ARG_ENABLE(sndio, [ --enable-sndio enable SNDIO audio support],enable_sndio=$enableval) + AC_ARG_ENABLE(pulse, [ --enable-pulse enable PULSE audio support],enable_pulse=$enableval) + fi + +diff --git a/plugins/Makefile.in b/plugins/Makefile.in +index d613f36..c679671 100644 +--- a/plugins/Makefile.in ++++ b/plugins/Makefile.in +@@ -51,6 +51,16 @@ DEFAULT_SOUND = sound_esd + endif + endif + ++###################################SNDIO ++HAS_SNDIO = @HAS_SNDIO@ ++ ++ifeq (1,$(HAS_SNDIO)) ++SUBDIRS += sound_sndio ++ifeq (,$(DEFAULT_SOUND)) ++DEFAULT_SOUND = sound_sndio ++endif ++endif ++ + #################################SundAudio + HAS_SUNAUDIO = @HAS_SUNAUDIO@ + +diff --git a/plugins/configure b/plugins/configure +index da4858b..c47a09d 100644 +--- a/plugins/configure ++++ b/plugins/configure +@@ -648,6 +648,7 @@ HAS_V4L + HAS_AUDIOSHM + HAS_SUNAUDIO + HAS_PULSE ++HAS_SNDIO + HAS_OSS + HAS_ESD + HAS_ALSA +@@ -723,6 +724,7 @@ enable_audio + enable_alsa + enable_esd + enable_oss ++enable_sndio + enable_pulse + enable_sunaudio + enable_shmaudio +@@ -1374,6 +1376,7 @@ disable plugin support] + --enable-alsa enable ALSA audio support + --enable-esd enable ESD audio support + --enable-oss enable OSS audio support ++ --enable-sndio enable sndio audio support + --enable-pulse enable Pulse audio support + --enable-sunaudio enable Sun audio support + --enable-shmaudio enable shm audio support +@@ -4425,6 +4428,161 @@ $as_echo "no" >&6; } + fi + + ++# Check whether --enable-sndio was given. ++if test "${enable_sndio+set}" = set; then ++ enableval=$enable_sndio; ++else ++ enable_sndio=yes ++fi ++ ++ ++if test "${enable_sndio}z" = "yesz" ; then ++ if test "${ac_cv_header_sndio_h+set}" = set; then ++ { $as_echo "$as_me:$LINENO: checking for sndio.h" >&5 ++$as_echo_n "checking for sndio.h... " >&6; } ++if test "${ac_cv_header_sndio_h+set}" = set; then ++ $as_echo_n "(cached) " >&6 ++fi ++{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sndio_h" >&5 ++$as_echo "$ac_cv_header_sndio_h" >&6; } ++else ++ # Is the header compilable? ++{ $as_echo "$as_me:$LINENO: checking sndio.h usability" >&5 ++$as_echo_n "checking sndio.h usability... " >&6; } ++cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++$ac_includes_default ++#include ++_ACEOF ++rm -f conftest.$ac_objext ++if { (ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" ++$as_echo "$ac_try_echo") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_header_compiler=yes ++else ++ $as_echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_header_compiler=no ++fi ++ ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++$as_echo "$ac_header_compiler" >&6; } ++ ++# Is the header present? ++{ $as_echo "$as_me:$LINENO: checking sndio.h presence" >&5 ++$as_echo_n "checking sndio.h presence... " >&6; } ++cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++#include ++_ACEOF ++if { (ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" ++$as_echo "$ac_try_echo") >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } >/dev/null && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then ++ ac_header_preproc=yes ++else ++ $as_echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_header_preproc=no ++fi ++ ++rm -f conftest.err conftest.$ac_ext ++{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++$as_echo "$ac_header_preproc" >&6; } ++ ++# So? What about this header? ++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in ++ yes:no: ) ++ { $as_echo "$as_me:$LINENO: WARNING: sndio.h: accepted by the compiler, rejected by the preprocessor!" >&5 ++$as_echo "$as_me: WARNING: sndio.h: accepted by the compiler, rejected by the preprocessor!" >&2;} ++ { $as_echo "$as_me:$LINENO: WARNING: sndio.h: proceeding with the compiler's result" >&5 ++$as_echo "$as_me: WARNING: sndio.h: proceeding with the compiler's result" >&2;} ++ ac_header_preproc=yes ++ ;; ++ no:yes:* ) ++ { $as_echo "$as_me:$LINENO: WARNING: sndio.h: present but cannot be compiled" >&5 ++$as_echo "$as_me: WARNING: sndio.h: present but cannot be compiled" >&2;} ++ { $as_echo "$as_me:$LINENO: WARNING: sndio.h: check for missing prerequisite headers?" >&5 ++$as_echo "$as_me: WARNING: sndio.h: check for missing prerequisite headers?" >&2;} ++ { $as_echo "$as_me:$LINENO: WARNING: sndio.h: see the Autoconf documentation" >&5 ++$as_echo "$as_me: WARNING: sndio.h: see the Autoconf documentation" >&2;} ++ { $as_echo "$as_me:$LINENO: WARNING: sndio.h: section \"Present But Cannot Be Compiled\"" >&5 ++$as_echo "$as_me: WARNING: sndio.h: section \"Present But Cannot Be Compiled\"" >&2;} ++ { $as_echo "$as_me:$LINENO: WARNING: sndio.h: proceeding with the preprocessor's result" >&5 ++$as_echo "$as_me: WARNING: sndio.h: proceeding with the preprocessor's result" >&2;} ++ { $as_echo "$as_me:$LINENO: WARNING: sndio.h: in the future, the compiler will take precedence" >&5 ++$as_echo "$as_me: WARNING: sndio.h: in the future, the compiler will take precedence" >&2;} ++ ++ ;; ++esac ++{ $as_echo "$as_me:$LINENO: checking for sndio.h" >&5 ++$as_echo_n "checking for sndio.h... " >&6; } ++if test "${ac_cv_header_sndio_h+set}" = set; then ++ $as_echo_n "(cached) " >&6 ++else ++ ac_cv_header_sndio_h=$ac_header_preproc ++fi ++{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sndio_h" >&5 ++$as_echo "$ac_cv_header_sndio_h" >&6; } ++ ++fi ++if test "x$ac_cv_header_sndio_h" = x""yes; then ++ SNDCARDHDR=1 ++fi ++ ++ ++ { $as_echo "$as_me:$LINENO: checking for sndio sound support" >&5 ++$as_echo_n "checking for sndio sound support... " >&6; } ++ if test "${SNDCARDHDR}z" != "z"; then ++ HAS_SNDIO=1 ++ ++ { $as_echo "$as_me:$LINENO: result: yes" >&5 ++$as_echo "yes" >&6; } ++ else ++ { $as_echo "$as_me:$LINENO: result: no" >&5 ++$as_echo "no" >&6; } ++ fi ++fi ++ ++ + # Check whether --enable-pulse was given. + if test "${enable_pulse+set}" = set; then + enableval=$enable_pulse; +diff --git a/plugins/configure.in b/plugins/configure.in +index 47a16bf..681043c 100644 +--- a/plugins/configure.in ++++ b/plugins/configure.in +@@ -107,6 +107,23 @@ if test "${enable_pulse}z" = "yesz" ; then + fi + + dnl ######################################################################### ++dnl check for sndio sound support ++dnl ######################################################################## ++ ++AC_ARG_ENABLE(sndio, [ --enable-sndio enable sndio audio support],,enable_sndio=no) ++ ++if test "${enable_sndio}z" = "yesz" ; then ++ AC_CHECK_HEADER(sndio.h, SNDCARDHDR=1) ++ AC_MSG_CHECKING(for sndio sound support) ++ if test "${SNDCARDHDR}z" != "z"; then ++ AC_SUBST(HAS_SNDIO, 1) ++ AC_MSG_RESULT(yes) ++ else ++ AC_MSG_RESULT(no) ++ fi ++fi ++ ++dnl ######################################################################### + dnl check for sunaudio sound support + dnl ######################################################################## + +diff --git b/plugins/sound_sndio/Makefile b/plugins/sound_sndio/Makefile +new file mode 100644 +index 0000000..fd15500 +--- /dev/null ++++ b/plugins/sound_sndio/Makefile +@@ -0,0 +1,7 @@ ++ ++PLUGIN_NAME = sndio ++PLUGIN_FAMILY = device/sound ++PLUGIN_LIBS = -lsndio ++PLUGIN_SOURCES = sound_sndio.cxx ++ ++include ../../make/plugins.mak +diff --git b/plugins/sound_sndio/sound_sndio.cxx b/plugins/sound_sndio/sound_sndio.cxx +new file mode 100644 +index 0000000..a581033 +--- /dev/null ++++ b/plugins/sound_sndio/sound_sndio.cxx +@@ -0,0 +1,534 @@ ++/* ++ * sound_sndio.cxx ++ * ++ * Sound driver implementation. ++ * ++ * Portable Windows Library ++ * ++ * Copyright (c) 1993-1998 Equivalence Pty. Ltd. ++ * ++ * The contents of this file are subject to the Mozilla Public License ++ * Version 1.0 (the "License"); you may not use this file except in ++ * compliance with the License. You may obtain a copy of the License at ++ * http://www.mozilla.org/MPL/ ++ * ++ * Software distributed under the License is distributed on an "AS IS" ++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See ++ * the License for the specific language governing rights and limitations ++ * under the License. ++ * ++ * The Original Code is Portable Windows Library. ++ * ++ * The Initial Developer of the Original Code is Equivalence Pty. Ltd. ++ * ++ * Portions are Copyright (C) 1993 Free Software Foundation, Inc. ++ * All Rights Reserved. ++ * ++ * $Log: sound_sndio.cxx,v $ ++ * Revision 1.2 2010/05/11 07:23:23 espie ++ * make it compile on gcc4, by making the relevant patch dependent on ++ * compiler version. ++ * also removes lvalue cast, that's not ansi. ++ * ++ * Revision 1.1.1.1 2010/03/23 21:10:17 ajacoutot ++ * Import ptlib-2.6.5 ++ * ++ * PTLib is a moderately large C++ class library that originated many years ++ * ago as a method to produce applications that run on both Microsoft ++ * Windows and Unix X-Windows systems. It also was to have a Macintosh port ++ * as well, but this never eventuated. In those days it was called the ++ * PWLib the Portable Windows Library. ++ * ++ * Since then, the availability of multi-platform GUI toolkits such as KDE ++ * and wxWindows, and the development of the OpenH323 and OPAL projects as ++ * primary user of the library, has emphasised the focus on networking, I/O ++ * portability, multi-threading and protocol portability. Mostly, the ++ * library is used to create high performance and highly portable ++ * network-centric applications. So all the GUI abstractions ahave been ++ * dropped and it was renamed the Portable Tools Library that you see ++ * today. ++ * ++ * Revision 1.3 2009/06/01 22:19:23 ajacoutot ++ * - aucat.sock is no more ++ * ++ * spotted by robert@ on ekiga ++ * ++ * Revision 1.2 2009/01/19 09:42:21 ajacoutot ++ * - s/SNDIO/SNDIO for consistency ++ * discussed with naddy@ ++ * ++ * "sure" jakemsr@ ++ * ++ * Revision 1.1 2009/01/17 12:30:08 jakemsr ++ * - add sndio backend ++ * - remove OSS and esd support ++ * ok ajacoutot@ (MAINTAINER) ++ * ++ */ ++ ++#pragma implementation "sound_sndio.h" ++ ++#include "sound_sndio.h" ++ ++#include ++ ++PCREATE_SOUND_PLUGIN(SNDIO, PSoundChannelSNDIO); ++ ++PSoundChannelSNDIO::PSoundChannelSNDIO() ++{ ++ PSoundChannelSNDIO::Construct(); ++} ++ ++ ++PSoundChannelSNDIO::PSoundChannelSNDIO(const PString & device, ++ Directions dir, ++ unsigned numChannels, ++ unsigned sampleRate, ++ unsigned bitsPerSample) ++{ ++ Construct(); ++ Open(device, dir, numChannels, sampleRate, bitsPerSample); ++} ++ ++ ++void PSoundChannelSNDIO::Construct() ++{ ++ os_handle = -1; ++ hdl = NULL; ++} ++ ++ ++PSoundChannelSNDIO::~PSoundChannelSNDIO() ++{ ++ Close(); ++} ++ ++ ++PStringArray PSoundChannelSNDIO::GetDeviceNames(Directions) ++{ ++ static const char * const devices[] = { ++ "default", ++ "/dev/audio0", ++ "/dev/audio1", ++ "/dev/audio2" ++ }; ++ ++ return PStringArray(PARRAYSIZE(devices), devices); ++} ++ ++ ++PString PSoundChannelSNDIO::GetDefaultDevice(Directions dir) ++{ ++ return "default"; ++} ++ ++PBoolean PSoundChannelSNDIO::Open(const PString & device, ++ Directions dir, ++ unsigned numChannels, ++ unsigned sampleRate, ++ unsigned bitsPerSample) ++{ ++ uint mode; ++ char sio_device[32]; ++ ++ Close(); ++ ++ if (dir == Recorder) ++ mode = SIO_REC; ++ else ++ mode = SIO_PLAY; ++ ++ snprintf(sio_device, 32, "%s", (const char *)device); ++ ++ if (strncmp(sio_device, "default", 7) == 0) ++ hdl = sio_open(NULL, mode, 0); ++ else ++ hdl = sio_open(sio_device, mode, 0); ++ ++ if (hdl == NULL) { ++ printf("sio_open failed\n"); ++ return FALSE; ++ } ++ ++ mDirection = dir; ++ mDevice = device; ++ mSampleRate = sampleRate; ++ mNumChannels = numChannels; ++ mBitsPerSample = bitsPerSample; ++ mBytesPerFrame = (bitsPerSample / 8) * numChannels; ++ ++ isInitialised = FALSE; ++ ++ return TRUE; ++} ++ ++PBoolean PSoundChannelSNDIO::Setup() ++{ ++ if (!hdl) { ++ PTRACE(6, "SNDIO\tSkipping setup of " << mDevice << " as not open"); ++ return FALSE; ++ } ++ ++ if (isInitialised) { ++ PTRACE(6, "SNDIO\tSkipping setup of " << mDevice << " as instance already initialised"); ++ return TRUE; ++ } ++ ++ PTRACE(6, "SNDIO\tInitialising " << mDevice); ++ ++ sio_initpar(&par); ++ ++ int framesPerFrag = mFragSize / mBytesPerFrame; ++ par.bufsz = mFragCount * framesPerFrag; ++ par.round = framesPerFrag; ++ ++ par.bits = mBitsPerSample; ++ par.sig = 1; ++#if PBYTE_ORDER == PLITTLE_ENDIAN ++ par.le = 1; ++#else ++ par.le = 0; ++#endif ++ ++ if (mDirection == Recorder) ++ par.rchan = mNumChannels; ++ else ++ par.pchan = mNumChannels; ++ ++ par.rate = mSampleRate; ++ ++ if (!sio_setpar(hdl, &par)) { ++ printf("sio_setpar failed\n"); ++ return FALSE; ++ } ++ ++ if (!sio_getpar(hdl, &par)) { ++ printf("sio_getpar failed\n"); ++ return FALSE; ++ } ++ ++ mFragSize = par.round * mBytesPerFrame; ++ mFragCount = par.bufsz / par.round; ++ ++ if (!sio_start(hdl)) { ++ printf("sio_start failed\n"); ++ return FALSE; ++ } ++ ++ isInitialised = TRUE; ++ ++ return TRUE; ++} ++ ++PBoolean PSoundChannelSNDIO::Close() ++{ ++ if (!hdl) ++ return TRUE; ++ ++ sio_close(hdl); ++ hdl = NULL; ++ return PChannel::Close(); ++} ++ ++PBoolean PSoundChannelSNDIO::IsOpen() const ++{ ++ return (hdl != NULL); ++} ++ ++PBoolean PSoundChannelSNDIO::Write(const void * buf, PINDEX len) ++{ ++ lastWriteCount = 0; ++ ++ if (!Setup() || !hdl) ++ return FALSE; ++ ++ int did, tot = 0; ++ ++ while (len > 0) { ++ did = sio_write(hdl, (void *)buf, len); ++ if (did == 0) { ++ printf("sio_write failed\n"); ++ return FALSE; ++ } ++ len -= did; ++ buf = (char*)buf + did; ++ tot += did; ++ } ++ lastWriteCount += tot; ++ ++ return TRUE; ++} ++ ++PBoolean PSoundChannelSNDIO::Read(void * buf, PINDEX len) ++{ ++ lastReadCount = 0; ++ ++ if (!Setup() || !hdl) ++ return FALSE; ++ ++ int did, tot = 0; ++ ++ while (len > 0) { ++ did = sio_read(hdl, buf, len); ++ if (did == 0) { ++ printf("sio_read failed\n"); ++ return FALSE; ++ } ++ len -= did; ++ buf = (char*)buf + did; ++ tot += did; ++ } ++ lastReadCount += tot; ++ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::SetFormat(unsigned numChannels, ++ unsigned sampleRate, ++ unsigned bitsPerSample) ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ PAssert((bitsPerSample == 8) || (bitsPerSample == 16), PInvalidParameter); ++ PAssert(numChannels >= 1 && numChannels <= 2, PInvalidParameter); ++ ++ if (isInitialised) { ++ if ((numChannels != mNumChannels) || ++ (sampleRate != mSampleRate) || ++ (bitsPerSample != mBitsPerSample)) { ++ PTRACE(6, "SNDIO\tTried to change read/write format without stopping"); ++ return FALSE; ++ } ++ return TRUE; ++ } ++ ++ mNumChannels = numChannels; ++ mSampleRate = sampleRate; ++ mBitsPerSample = bitsPerSample; ++ isInitialised = FALSE; ++ ++ return TRUE; ++} ++ ++ ++unsigned PSoundChannelSNDIO::GetChannels() const ++{ ++ return mNumChannels; ++} ++ ++ ++unsigned PSoundChannelSNDIO::GetSampleRate() const ++{ ++ return mSampleRate; ++} ++ ++ ++unsigned PSoundChannelSNDIO::GetSampleSize() const ++{ ++ return mBitsPerSample; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::SetBuffers(PINDEX size, PINDEX count) ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ PAssert(size > 0 && count > 0 && count < 65536, PInvalidParameter); ++ ++ if (isInitialised) { ++ if (mFragSize != (unsigned)size || mFragCount != (unsigned)count) { ++ PTRACE(6, "SNDIO\tTried to change buffers without stopping"); ++ return FALSE; ++ } ++ return TRUE; ++ } ++ ++ mFragSize = size; ++ mFragCount = count; ++ isInitialised = FALSE; ++ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::GetBuffers(PINDEX & size, PINDEX & count) ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ count = mFragCount; ++ size = mFragSize; ++ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::PlaySound(const PSound & sound, PBoolean wait) ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ if (!Write((const BYTE *)sound, sound.GetSize())) ++ return FALSE; ++ ++ if (wait) ++ return WaitForPlayCompletion(); ++ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::PlayFile(const PFilePath & filename, PBoolean wait) ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ PFile file(filename, PFile::ReadOnly); ++ if (!file.IsOpen()) ++ return FALSE; ++ ++ for (;;) { ++ BYTE buffer[256]; ++ if (!file.Read(buffer, 256)) ++ break; ++ PINDEX len = file.GetLastReadCount(); ++ if (len == 0) ++ break; ++ if (!Write(buffer, len)) ++ break; ++ } ++ ++ file.Close(); ++ ++ if (wait) ++ return WaitForPlayCompletion(); ++ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::HasPlayCompleted() ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::WaitForPlayCompletion() ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::RecordSound(PSound & sound) ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ return FALSE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::RecordFile(const PFilePath & filename) ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ return FALSE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::StartRecording() ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::IsRecordBufferFull() ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ struct pollfd pfd; ++ int events = POLLIN; ++ sio_pollfd(hdl, &pfd, events); ++ return ConvertOSError(::poll(&pfd, 1, 0)); ++} ++ ++ ++PBoolean PSoundChannelSNDIO::AreAllRecordBuffersFull() ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ struct pollfd pfd; ++ int events = POLLIN; ++ sio_pollfd(hdl, &pfd, events); ++ return ConvertOSError(::poll(&pfd, 1, 0)); ++} ++ ++ ++PBoolean PSoundChannelSNDIO::WaitForRecordBufferFull() ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ // return PXSetIOBlock(PXReadBlock, readTimeout); ++ ++ struct pollfd pfd; ++ int events = POLLIN; ++ sio_pollfd(hdl, &pfd, events); ++ return ConvertOSError(::poll(&pfd, 1, 1000)); ++} ++ ++ ++PBoolean PSoundChannelSNDIO::WaitForAllRecordBuffersFull() ++{ ++ if (!hdl) ++ return SetErrorValues(NotOpen, EBADF); ++ ++ struct pollfd pfd; ++ int events = POLLIN; ++ sio_pollfd(hdl, &pfd, events); ++ return ConvertOSError(::poll(&pfd, 1, 1000)); ++} ++ ++ ++PBoolean PSoundChannelSNDIO::Abort() ++{ ++ return TRUE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::SetVolume(unsigned newVal) ++{ ++ if (!hdl) ++ return FALSE; ++ ++ return FALSE; ++} ++ ++ ++PBoolean PSoundChannelSNDIO::GetVolume(unsigned &devVol) ++{ ++ if (!hdl) ++ return FALSE; ++ ++ devVol = 0; ++ return FALSE; ++} ++ ++ ++ ++// End of file +diff --git b/plugins/sound_sndio/sound_sndio.h b/plugins/sound_sndio/sound_sndio.h +new file mode 100644 +index 0000000..6fc8325 +--- /dev/null ++++ b/plugins/sound_sndio/sound_sndio.h +@@ -0,0 +1,66 @@ ++ ++#include ++#include ++#include ++ ++#include ++ ++class PSoundChannelSNDIO: public PSoundChannel ++{ ++ public: ++ PSoundChannelSNDIO(); ++ void Construct(); ++ PSoundChannelSNDIO(const PString &device, ++ PSoundChannel::Directions dir, ++ unsigned numChannels, ++ unsigned sampleRate, ++ unsigned bitsPerSample); ++ ~PSoundChannelSNDIO(); ++ static PStringArray GetDeviceNames(PSoundChannel::Directions = Player); ++ static PString GetDefaultDevice(PSoundChannel::Directions); ++ PBoolean Open(const PString & _device, ++ Directions _dir, ++ unsigned _numChannels, ++ unsigned _sampleRate, ++ unsigned _bitsPerSample); ++ PBoolean Setup(); ++ PBoolean Close(); ++ PBoolean IsOpen() const; ++ PBoolean Write(const void * buf, PINDEX len); ++ PBoolean Read(void * buf, PINDEX len); ++ PBoolean SetFormat(unsigned numChannels, ++ unsigned sampleRate, ++ unsigned bitsPerSample); ++ unsigned GetChannels() const; ++ unsigned GetSampleRate() const; ++ unsigned GetSampleSize() const; ++ PBoolean SetBuffers(PINDEX size, PINDEX count); ++ PBoolean GetBuffers(PINDEX & size, PINDEX & count); ++ PBoolean PlaySound(const PSound & sound, PBoolean wait); ++ PBoolean PlayFile(const PFilePath & filename, PBoolean wait); ++ PBoolean HasPlayCompleted(); ++ PBoolean WaitForPlayCompletion(); ++ PBoolean RecordSound(PSound & sound); ++ PBoolean RecordFile(const PFilePath & filename); ++ PBoolean StartRecording(); ++ PBoolean IsRecordBufferFull(); ++ PBoolean AreAllRecordBuffersFull(); ++ PBoolean WaitForRecordBufferFull(); ++ PBoolean WaitForAllRecordBuffersFull(); ++ PBoolean Abort(); ++ PBoolean SetVolume(unsigned newVal); ++ PBoolean GetVolume(unsigned &devVol); ++ ++ protected: ++ struct sio_hdl *hdl; ++ struct sio_par par; ++ unsigned mNumChannels; ++ unsigned mSampleRate; ++ unsigned mBitsPerSample; ++ unsigned mFragCount; ++ unsigned mFragSize; ++ unsigned mBytesPerFrame; ++ Directions mDirection; ++ PString mDevice; ++ PBoolean isInitialised; ++}; +diff --git a/src/Makefile b/src/Makefile +index 0ac1c3b..99b66c2 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -151,7 +151,12 @@ endif # linux + ifdef HAS_ALSA + VPATH_CXX += $(PLUGIN_DIR)/sound_alsa + SOURCES += $(PLUGIN_DIR)/sound_alsa/sound_alsa.cxx +-endif # HAS_ALSA ++ ++endif # HAS_SNDIO ++ifdef HAS_SNDIO ++VPATH_CXX += $(PLUGIN_DIR)/sound_sndio ++SOURCES += $(PLUGIN_DIR)/sound_sndio/sound_sndio.cxx ++endif # HAS_SNDIO + + ifeq ($(OSTYPE),beos) + SOURCES += $(PLATFORM_SRC_DIR)/beaudio.cxx diff --git a/publicsuffix/PKGBUILD b/publicsuffix/PKGBUILD new file mode 100644 index 0000000..6701945 --- /dev/null +++ b/publicsuffix/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +# Based on publicsuffix-list + +pkgname=publicsuffix +pkgver=20200627.1701 +_debver=20200627.1701 +_debrel=1 +pkgrel=2 +pkgdesc='Cross-supplier public domain suffix database' +url='https://publicsuffix.org/' +arch=('any') +license=('MPL-2.0') +makedepends=('quilt') +replaces=('publicsuffix-list') +conflicts=('publicsuffix-list') +provides=('publicsuffix-list') +source=(https://deb.debian.org/debian/pool/main/p/publicsuffix/publicsuffix_$pkgver.orig.tar.gz + https://deb.debian.org/debian/pool/main/p/publicsuffix/publicsuffix_$_debver-$_debrel.debian.tar.xz) +sha512sums=('d36609a8fa3af120bcbcad2e895b048a6f9081ef2dd96521d67801cd5036b650ae770eb5af683d24be0a4657a7cdfd394d21856e206d903ae6349f31624b9d6d' + 'b88bb5a3f997bdf5341fa4cb529765bcd79ed046cc0c9e42306cd2775faf76102d2d88b6f0b81bfb6dbf45ab18daba999398494553b7c6124504e1c507dbdd36') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd $pkgname-$pkgver + + install -Dm 644 public_suffix_list.dat tests/test_psl.txt -t $pkgdir/usr/share/$pkgname + ln -s public_suffix_list.dat $pkgdir/usr/share/$pkgname/effective_tld_names.dat + + install -Dm 644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/pugixml/PKGBUILD b/pugixml/PKGBUILD new file mode 100644 index 0000000..30f81b9 --- /dev/null +++ b/pugixml/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=pugixml +pkgver=1.11.4 +_debver=1.11.4 +_debrel=1 +pkgrel=1 +pkgdesc='Light-weight, simple and fast XML parser for C++ with XPath support' +arch=('i686' 'x86_64') +url='https://pugixml.org' +license=('Expat') +depends=('gcc-libs') +makedepends=('cmake' 'quilt') +source=(https://github.com/zeux/pugixml/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/p/pugixml/pugixml_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('c83f57ef2492eee359d979597fb5089b8eca547bb9d41cfbb6bcf43d59fe75e6780b0f31dd593145ec9888c065153aba52702667e2de213fa080cd51e9e13a38' + 'b8aaf152ece26f6bc1786379e13ac41e47f769e7b93c3e43dd8204d80626a38fba346718769db02eb63f33a5cc3a65917cb7dbbc6aa505d6242e6a76a9ffa152') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S ${pkgname}-${pkgver} \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON + make -C build +} + +package() { + make -C build DESTDIR="${pkgdir}" install + install -Dm644 ${pkgname}-${pkgver}/readme.txt -t "${pkgdir}"/usr/share/licenses/${pkgname}/ +} diff --git a/putty/PKGBUILD b/putty/PKGBUILD new file mode 100644 index 0000000..6d8e618 --- /dev/null +++ b/putty/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=putty +pkgver=0.81 +pkgrel=1 +pkgdesc="A terminal integrated, free and libre SSH client" +arch=('i686' 'x86_64') +url='https://www.chiark.greenend.org.uk/~sgtatham/putty/' +license=('Expat') +depends=('gtk') +makedepends=('cmake') +source=("https://the.earth.li/~sgtatham/putty/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "putty-${pkgver}.tar.gz.sig::https://the.earth.li/~sgtatham/putty/${pkgver}/putty-${pkgver}.tar.gz.gpg" + "putty.desktop" + "putty.png" + "putty.xpm") +sha512sums=('d86f2fd0e126b18275d58cf64334b3b27c450899a1c2be2502de9faa2ef58f7fc8efc5d45f25c8395623f1e21917aa02407343bb2fee44c4c00b9f81267d5ecd' + 'SKIP' + 'fba973f8969ef21b371bfbd773a1992e8b24c047104d10d52e3c246e734fff2e70764e59aa07339671ba3ff513c710f12c6bde3e38a23f153300e521fc827c39' + '9ba8f29da3f1933b7c2be56dae56ae6d7b0c922cd4eacc21e6408edf3630158868b7dd26e5f74b3dac2e5ea568bb7e4258b3a0582ec372f537cf6162e19ce592' + 'd9e01f3c13c82b1700c048010e7102602b9943426f5890c0a30c8cf410255e44ec87cf513388f096a58dbb41eeaacc3740a1e670a807261a3e07b0ff625ff912') +validpgpkeys=('F412BA3AA30FDC0E77B4E3871993D21BCAD1AA77') # PuTTY Releases + +build() { + cmake -B build -S ${pkgname}-${pkgver} \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -Wno-dev + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + install -D -m644 "${srcdir}"/${pkgname}-${pkgver}/LICENCE -t "${pkgdir}"/usr/share/licenses/${pkgname} + install -D -m0644 "${srcdir}"/putty.desktop "${pkgdir}"/usr/share/applications/putty.desktop + install -D -m0644 "${srcdir}"/putty.png "${pkgdir}"/usr/share/pixmaps/putty.png + install -D -m0644 "${srcdir}"/putty.xpm "${pkgdir}"/usr/share/pixmaps/putty.xpm +} diff --git a/putty/putty.desktop b/putty/putty.desktop new file mode 100644 index 0000000..f716864 --- /dev/null +++ b/putty/putty.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=PuTTY +GenericName=SSH/Telnet/Serial Client +Exec=putty %u +Terminal=false +Icon=putty +Type=Application +Categories=Application;Network;Remote +Comment=A highly configurable ssh/telnet/serial console program diff --git a/putty/putty.png b/putty/putty.png new file mode 100644 index 0000000000000000000000000000000000000000..f364d5004ab5acaab3dc46725bbd76489be45968 GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeE3?v1%WpM*3mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5l#mGU32_C|Kycu|frf^L z|Ns93l`}AaXr42o7l0CsB|(0{3=Yq3q=7g|-tI0e{TVj{fgJV{PhVH|2OP4ZLRudU z*V+T6&wIK!hD02GJKeCT*+9VcEboLhAFsvLFt!Rylr)N1Hb{M6_3vx2Mc>3DTxQ08 zPw&q%m!A+}E6U+c1Ajb`Qs8656&Y?b}y~azri1H$+qN(C+iXSgK-UVtk#VjvI3l*TQ7alxxwmU z!)?}h&NrMX#?DlV`Q|PMhf~LUo_c?{bf-9+q0Cal{k%+?K5v+_!zs1b89#+up1+vE zdB9LQb)MxJri7n73Qsqm|D?*1zv{6uqXwVOGXw4h?v^*AxxNMEtkbeLSRU++*}x}I zH~+x1^b1xO9?smtzToKB(8H(VjJlalpE-O!`>z1s!dGoZ3&cg61K#rf?A~Bg#bEIC zYqCC5$or+o)UQi6SLut+kN(HaXuwr&$?PFz`OCZU>)!O7 z{W5|Hrt3a)N=%gzoaEQXp*}UjMPhDeK+r4>KQCd!^`;YNUvtTO_I6JGf(eVKGVj!N zH@z@z@yb8qI~Cov9isd01jzdNS|&x$O#_na{5LO?;gp=xu%p6HZvsQy*&q52`+0Lt z21>tBEfrKcJ#j)Dr^%BHTc?BO8@5VG3)i0X0mim!iEBhjN@7W>RdP`(kYX@0Ff`LO zu+TNK3^6jaGPJNVG14_KwlXj<{1*NmMMG|WN@iLmZVe8r-v + +pkgname=pwgen +pkgver=2.08 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc='Password generator for creating easily memorable passwords' +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/pwgen/' +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/pwgen/pwgen_$_debver-$_debrel.debian.tar.xz") +sha512sums=('4a930dc7d4c58a4434209db30c54629d76fce57d0fd5767cd7894168bb1a5b85eaae6734a982b0f4e0640540c366ce27ad84860ff2c406dea3f5902b5bb54255' + '7671297990f0af3dfd6aba6e39e358e4e747d1eadcf54010f66d657b8988a383b0e9887ca3edeffc09c5af097383d8f2110b21b0d356ef869166d0358f8c36e5') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi + autoconf +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + make -C "$pkgname-$pkgver" DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/$pkgname-$pkgver/debian/copyright" -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/pyqt-builder/PKGBUILD b/pyqt-builder/PKGBUILD new file mode 100644 index 0000000..eac6a44 --- /dev/null +++ b/pyqt-builder/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=pyqt-builder +_pkgname=PyQt-builder +pkgver=1.7.0 +pkgrel=1 +pkgdesc='The PEP 517 compliant PyQt build system' +arch=(any) +url="https://pypi.org/project/$_pkgname/" +license=('custom:SIP') +depends=(python) +makedepends=(python-setuptools) +source=(https://pypi.io/packages/source/${_pkgname::1}/$_pkgname/$_pkgname-$pkgver.tar.gz) +sha512sums=('00733b41853d691c2d42f88f8174c7390dbb35bd396ca74762355c43aac2a9f1efd6c345cd4b4941b1c76d1b23b11b1fd719759fe25caf8a10e67298463f2067') + +build() { + cd $_pkgname-$pkgver + python setup.py build +} + +package() { + cd $_pkgname-$pkgver + python setup.py install --root="$pkgdir" + + # license + install -Dm644 LICENSE -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/python-acme/PKGBUILD b/python-acme/PKGBUILD new file mode 100644 index 0000000..ed9bba2 --- /dev/null +++ b/python-acme/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=python-acme +pkgver=1.12.0 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="ACME protocol implementation in Python" +arch=('any') +license=('Apache-2.0') +url="https://github.com/certbot/certbot" +makedepends=('quilt') +depends=('python-setuptools' 'python-pyopenssl' 'python-pyrfc3339' 'python-pytz' 'python-requests' + 'python-six' 'python-josepy' 'python-requests-toolbelt') +source=("https://pypi.io/packages/source/a/acme/acme-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-acme/python-acme_${_debver}-${_debrel}+deb11u1.debian.tar.xz") +sha512sums=('1503fd1c1fb021520f1d2f35416f1cde0c7fc84fb52e808a127aea2260d1e4c1ec6427deb2384e726d18b1f9bed786100db4b45184a2de116cd35bc698e38336' + 'c72107d8140826f651ae07d58222139cf3f5426aaa20ecb3555f235edb9215bf86b837babcc2d050ea32c9195f1b30cf12b43ff5517aa995ff6740a43cd67a51') + +prepare() { + cd acme-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "${srcdir}"/debian . + + quilt push -av + fi +} + +build() { + cd acme-$pkgver + python setup.py build +} + +package() { + cd acme-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -D -m644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-appdirs/PKGBUILD b/python-appdirs/PKGBUILD new file mode 100644 index 0000000..7cdbac9 --- /dev/null +++ b/python-appdirs/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgbase=python-appdirs +pkgname=('python-appdirs' 'tauthon-appdirs') +pkgver=1.4.4 +pkgrel=3 +arch=('any') +url='https://github.com/ActiveState/appdirs' +license=('Expat') +makedepends=('python' 'tauthon') +source=("https://pypi.io/packages/source/a/appdirs/appdirs-$pkgver.tar.gz") +sha512sums=('8b0cdd9fd471d45b186aa47607691cf378dabd3edc7b7026a57bd6d6f57698e86f440818a5e23ba4288b35d6bb8cb6eb0106eae8aab09d8863ee15025d300883') + +prepare() { + cp -a appdirs-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/appdirs-$pkgver + python setup.py build + + cd "$srcdir"/appdirs-$pkgver-tauthon + tauthon setup.py build +} + +package_python-appdirs() { + pkgdesc='A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".' + depends=('python') + + cd appdirs-$pkgver + python setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-appdirs() { + pkgdesc='A small Tauthon module for determining appropriate platform-specific dirs, e.g. a "user data dir".' + depends=('tauthon') + + cd appdirs-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-asn1crypto/PKGBUILD b/python-asn1crypto/PKGBUILD new file mode 100644 index 0000000..d88a44e --- /dev/null +++ b/python-asn1crypto/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgbase=python-asn1crypto +pkgname=('python-asn1crypto' 'tauthon-asn1crypto') +pkgver=1.4.0 +pkgrel=2 +arch=('any') +license=('Expat') +url="https://github.com/wbond/asn1crypto" +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/wbond/asn1crypto/archive/$pkgver.tar.gz") +sha512sums=('989e4e0650252c29477d71263549b99f2c51c87f0768c20264b3de65f32edd8e7922e8af23bb1a7e29567a4ad8c4c5d596cdf7db3c766352c7f19d4f93361cd0') + +prepare() { + cp -a asn1crypto-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/asn1crypto-$pkgver + python setup.py build + + cd "$srcdir"/asn1crypto-$pkgver-tauthon + tauthon setup.py build +} + +package_python-asn1crypto() { + pkgdesc="Python ASN.1 library with a focus on performance and a pythonic API" + depends=('python') + + cd asn1crypto-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -D -m644 LICENSE "$pkgdir"/usr/share/licenses/python-asn1crypto/LICENSE +} + +package_tauthon-asn1crypto() { + pkgdesc="Tauthon ASN.1 library with a focus on performance and a pythonic API" + depends=('tauthon') + + cd asn1crypto-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 + install -D -m644 LICENSE "$pkgdir"/usr/share/licenses/tauthon-asn1crypto/LICENSE +} diff --git a/python-attrs/PKGBUILD b/python-attrs/PKGBUILD new file mode 100644 index 0000000..2563d8f --- /dev/null +++ b/python-attrs/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=python-attrs +pkgver=20.3.0 +_debver=20.3.0 +_debrel=1 +pkgrel=1 +pkgdesc="Attributes without boilerplate." +arch=('any') +license=('Expat') +url='https://attrs.readthedocs.org/' +makedepends=('python-setuptools' 'quilt') +source=("https://pypi.io/packages/source/a/attrs/attrs-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-attrs/python-attrs_$_debver-$_debrel.debian.tar.xz") +sha512sums=('640532c6b763fd96572e5d85e93c111bebc4c5e0ff9419fe92fb51280f03acb5f9f43339f57d30659e777d5578460675c60ec0a362f9ad433893e3624ce6a931' + '890fbd75373e4198ad69f4c75a8c248977368146baf729da8da2cfe2991c9505c451d074272c01b7c0c9d8669555fe346cdd1af2136b6f67e814516883c65c5e') + +prepare() { + cd "$srcdir"/attrs-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/attrs-$pkgver + python setup.py build +} + +package() { + depends=('python') + + cd attrs-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-babel/PKGBUILD b/python-babel/PKGBUILD new file mode 100644 index 0000000..896e63c --- /dev/null +++ b/python-babel/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgbase=python-babel +pkgname=('python-babel' 'tauthon-babel') +pkgver=2.8.0 +_core=36 +_debver=$pkgver +_debrel=7 +pkgrel=2 +url='https://babel.pocoo.org/' +license=('Modified-BSD') +arch=('any') +makedepends=('python' 'tauthon' 'python-setuptools' 'tauthon-setuptools' 'python-pytz' 'tauthon-pytz' 'quilt') +noextract=("cldr-core-$_core.zip") +source=("$pkgbase-$pkgver.tar.gz::https://github.com/python-babel/babel/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-babel/python-babel_$_debver+dfsg.1-$_debrel.debian.tar.xz" + "cldr-core-$_core.zip::https://unicode.org/Public/cldr/$_core/core.zip") +sha512sums=('e4ad388dde6e388d8ac0772f1931724fd37a371f440595aeac0a2809f4753387775774ecc7c402fb3636e1765fe1297e3629e7a9162506d8f433ada06795b181' + '2d5fb5b14fdc43a7ae52aa9fdaf13ed4c6829030fac74c32a5e988a1c79c17c2817627fc2127cd8d426a57250e3cbc4df9d957d659ff339974c5ba5a34aaf3e7' + '773aa51fe86485a92208ba0ce348761cc31f800f2d5d559799c4a9a2069086ef7796bca3936229d4263e56acee749a29eb6f535e35a68c73436a237c6d1b163e') + +prepare() { + cd "$srcdir/babel-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cp -a "$srcdir"/babel-$pkgver{,-tauthon} + cp "$srcdir"/cldr-core-$_core.zip "$srcdir"/babel-$pkgver-tauthon/cldr/cldr-core-$_core.zip + cp "$srcdir"/cldr-core-$_core.zip "$srcdir"/babel-$pkgver/cldr/cldr-core-$_core.zip +} + +build(){ + cd "$srcdir/babel-$pkgver" + python setup.py import_cldr + python setup.py build + + cd "$srcdir/babel-$pkgver-tauthon" + tauthon setup.py import_cldr + tauthon setup.py build +} + +package_python-babel() { + pkgdesc="A collection of tools for internationalizing Python applications" + depends=('python' 'python-pytz') + + cd "$srcdir/babel-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -D -m0644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} + +package_tauthon-babel() { + pkgdesc="A collection of tools for internationalizing Tauthon applications" + depends=('tauthon' 'tauthon-pytz') + + cd "$srcdir/babel-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + mv "$pkgdir"/usr/bin/pybabel "$pkgdir"/usr/bin/pybabel-tauthon + install -D -m0644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/python-bcrypt/PKGBUILD b/python-bcrypt/PKGBUILD new file mode 100644 index 0000000..64c5784 --- /dev/null +++ b/python-bcrypt/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgbase=python-bcrypt +pkgname=('python-bcrypt' 'tauthon-bcrypt') +pkgver=3.1.7 +_debver=3.1.7 +_debrel=4 +pkgrel=1 +pkgdesc='Modern password hashing for your software and your servers' +arch=('i686' 'x86_64') +url='https://github.com/pyca/bcrypt' +license=('Apache-2.0') +makedepends=('python-setuptools' 'tauthon-setuptools' 'python-cffi' 'tauthon-cffi' + 'python-six' 'tauthon-six' 'quilt') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/pyca/bcrypt/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-bcrypt/python-bcrypt_$_debver-$_debrel.debian.tar.xz") +sha512sums=('bfe487ac43aa5081a16c7f67787c2aec777a9c42f3f0f64d4dd238e6cf135e248e806a675ecdc5240066e2b5a31773f9c5dd939479e96ec25357e27bced01409' + '04cbf69c18fc23d7164faf5641737943308b13d78a071447f007c3c32883e4f78a478117aa7498fbb7c8a301dee3ddebbd56b2436b7921dcb0f915122a602f0f') + +prepare() { + cd "$srcdir"/bcrypt-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cp -a "$srcdir"/bcrypt-$pkgver{,-py2} + export LC_CTYPE=en_US.UTF-8 +} + +build() { + cd "$srcdir"/bcrypt-$pkgver + python setup.py build + + cd "$srcdir"/bcrypt-$pkgver-py2 + tauthon setup.py build +} + +package_python-bcrypt() { + depends=('python-cffi' 'python-six') + + cd bcrypt-$pkgver + python setup.py install --prefix=/usr --root="$pkgdir" + install -d "$pkgdir"/usr/share/licenses/$pkgname + install -m 644 "$srcdir"/bcrypt-$pkgver/LICENSE "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-bcrypt() { + depends=('tauthon-cffi' 'tauthon-six') + + cd bcrypt-$pkgver-py2 + tauthon setup.py install --prefix=/usr --root="$pkgdir" + install -d "$pkgdir"/usr/share/licenses/$pkgname + install -m 644 "$srcdir"/bcrypt-$pkgver/LICENSE "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-beaker/PKGBUILD b/python-beaker/PKGBUILD new file mode 100644 index 0000000..cc34389 --- /dev/null +++ b/python-beaker/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgbase=python-beaker +pkgname=('python-beaker' 'tauthon-beaker') +pkgver=1.10.0 +pkgrel=2 +arch=('any') +license=('Modified-BSD') +url="https://beaker.readthedocs.io/" +makedepends=('python-setuptools' 'tauthon-setuptools' 'tauthon-funcsigs') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/bbangert/beaker/archive/$pkgver.tar.gz") +sha512sums=('2a8a6e10f771aaa33190598a52bf1110f1ae1116828c1e9cd42aeceb3dc7a9af896f20c809f165c50940de44d48628d6cacb6f2b480a128bae05f902898ed2b5') + +prepare() { + # Use a fake for tests + sed -e '/class TestMongoDB/i import mongomock' \ + -e "s|'mongodb://localhost:27017/beaker_testdb'|mongomock.MongoClient('mongodb://localhost:27017/beaker_testdb')|" \ + -i beaker-$pkgver/tests/test_managers/test_ext_mongodb.py + + cp -a beaker-$pkgver{,-tauthon} + + sed -i "s#/usr/bin/python#/usr/bin/tauthon#" beaker-$pkgver-tauthon/beaker/crypto/pbkdf2.py +} + +build() { + cd "$srcdir"/beaker-$pkgver + python setup.py build + + cd "$srcdir"/beaker-$pkgver-tauthon + tauthon setup.py build +} + +package_python-beaker() { + pkgdesc="Caching and sessions WSGI middleware for use with web applications and stand-alone Python scripts and applications" + depends=('python') + + cd beaker-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -D -m644 LICENSE -t "$pkgdir"/usr/share/licenses/python-beaker +} + +package_tauthon-beaker() { + pkgdesc="Caching and sessions WSGI middleware for use with web applications and stand-alone Tauthon scripts and applications" + depends=('tauthon-funcsigs') + + cd beaker-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 + install -D -m644 LICENSE -t "$pkgdir"/usr/share/licenses/tauthon-beaker +} diff --git a/python-beautifulsoup4/PKGBUILD b/python-beautifulsoup4/PKGBUILD new file mode 100644 index 0000000..125ea01 --- /dev/null +++ b/python-beautifulsoup4/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgbase=python-beautifulsoup4 +pkgname=('python-beautifulsoup4' 'tauthon-beautifulsoup4') +pkgver=4.9.3 +pkgrel=2 +arch=('any') +url='https://www.crummy.com/software/BeautifulSoup/index.html' +license=('Expat') +makedepends=('python-soupsieve' 'tauthon-soupsieve' 'python-setuptools' 'tauthon-setuptools') +source=("https://pypi.io/packages/source/b/beautifulsoup4/beautifulsoup4-$pkgver.tar.gz") +sha512sums=('e3cb6258bd7c51f12128fa8ee5948fb3566163ae233fac2dda21bab7772ab8dbb384d920b0ea138ef9921307b48f89cee3a9bf6111dfc8903d917ee7af365f34') + +prepare() { + cp -a beautifulsoup4-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/beautifulsoup4-$pkgver + python setup.py build + + cd "$srcdir"/beautifulsoup4-$pkgver-tauthon + tauthon setup.py build +} + +package_python-beautifulsoup4() { + pkgdesc="A Python HTML/XML parser designed for quick turnaround projects like screen-scraping" + depends=('python-soupsieve') + optdepends=('python-chardet: to autodetect character encodings' + 'python-lxml: alternative HTML parser') + + cd beautifulsoup4-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_tauthon-beautifulsoup4() { + pkgdesc="A Tauthon HTML/XML parser designed for quick turnaround projects like screen-scraping" + depends=('tauthon-soupsieve') + optdepends=('tauthon-chardet: to autodetect character encodings' + 'tauthon-lxml: alternative HTML parser') + + cd beautifulsoup4-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-bencode/PKGBUILD b/python-bencode/PKGBUILD new file mode 100644 index 0000000..111e0da --- /dev/null +++ b/python-bencode/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +_pkgname=bencode +pkgbase=python-$_pkgname +pkgname=(python-$_pkgname tauthon-$_pkgname) +pkgver=1.0 +pkgrel=1 +pkgdesc="The BitTorrent bencode-module as a light-weight, standalone package" +url='https://pypi.python.org/pypi/BitTorrent-bencode' +arch=('i686' 'x86_64') +license=('BitTorrent-1.0') +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("https://pypi.python.org/packages/source/b/bencode/$_pkgname-$pkgver.tar.gz") +sha512sums=('873bc7da16729a49033709f0663ef6d58076d0c5e1b31624e72a3eb35af7fa52af7ed42407b68995387ea9d6e2c009836f764c6a45b4e3b905d962110cf01ee8') + +prepare() { + cp -rf "$_pkgname-$pkgver" "$_pkgname-$pkgver-tauthon" + cd "$srcdir/$_pkgname-$pkgver-tauthon" + + # tauthon fix + for file in $(find . -name '*.py' -print); do + sed -i 's_#!.*/usr/bin/python_#!/usr/bin/tauthon_' $file + sed -i 's_#!.*/usr/bin/env.*python_#!/usr/bin/env tauthon_' $file + done +} + +package_python-bencode(){ + pkgdesc+=" for Python" + depends=('python') + + cd "$srcdir/$_pkgname-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 PKG-INFO -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_tauthon-bencode(){ + pkgdesc+=" for Tauthon" + depends=('tauthon') + + cd "$srcdir/$_pkgname-$pkgver" + tauthon setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 PKG-INFO -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-black/PKGBUILD b/python-black/PKGBUILD new file mode 100644 index 0000000..128ff1a --- /dev/null +++ b/python-black/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=python-black +pkgver=20.8b1 +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="Uncompromising Python code formatter" +arch=('any') +url='https://github.com/psf/black' +license=('Expat') +depends=('python' 'python-appdirs' 'python-click' 'python-mypy_extensions' + 'python-pathspec' 'python-regex' 'python-toml') +makedepends=('python-setuptools-scm' 'quilt') +source=("https://files.pythonhosted.org/packages/source/b/black/black-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/b/black/black_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('f047c2a1ce759a8e19eed2e1869752bb8a63bf17a554aff5d9e834a48cd390b23918b78e01d5c36c0fb7599439d7e422847bde504ff698d53df5c5939a8870d2' + '6c4acb2c203b9f9ad098679554c418f38e13333c4a083ab37df76eb807eb18cdea8fd35027cedaa365313f474c024bad38796762fe496586800caca01183b34f') + +prepare() { + cd "black-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/version-declaration.diff || true + + quilt push -av + fi +} + +build() { + cd "black-$pkgver" + python setup.py build +} + +package() { + cd "black-$pkgver" + export PYTHONHASHSEED=0 + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + + # https://github.com/FFY00/python-install/issues/7 + sed -i 's/patched_main \[d]/patched_main/' "$pkgdir"/usr/bin/blackd + + # https://github.com/FFY00/python-install/pull/6 + chmod +x "$pkgdir"/usr/bin/* + + # license file + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-bleach/PKGBUILD b/python-bleach/PKGBUILD new file mode 100644 index 0000000..0f3930d --- /dev/null +++ b/python-bleach/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=python-bleach +pkgver=5.0.1 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="An easy whitelist-based HTML-sanitizing tool" +url="https://pypi.org/project/bleach/" +arch=('any') +license=('Apache-2.0') +depends=('python-packaging' 'python-six' 'python-webencodings') +makedepends=('python' 'python-setuptools' 'quilt') +source=("https://pypi.org/packages/source/b/bleach/bleach-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-bleach/python-bleach_$_debver-$_debrel.debian.tar.xz") +sha512sums=('6c8e80eaf6db6f0e6d9066f3443192f44c489e079945b6d11b11e7eb270ea865011019e05d43c7896262dc11ca168e697630d9da8dca9f5bb48f0e2161fda6c8' + '4c92afcc7fb3c09f8e72e24ffd38015fdd1827cfc59f984c12886bbc17e5b6efc2bc0756d25df899221188281557612fce3d3e762a18c15ee5857a9b2e1a89e5') + +prepare() { + cd "$srcdir"/bleach-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/bleach-$pkgver + python setup.py build +} + +package() { + cd "$srcdir"/bleach-$pkgver + python setup.py install --skip-build --optimize=1 --root="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-bottle/PKGBUILD b/python-bottle/PKGBUILD new file mode 100644 index 0000000..a99e83e --- /dev/null +++ b/python-bottle/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=python-bottle +pkgver=0.13.2 +_debver=$pkgver +_debrel=1.1 +pkgrel=1 +pkgdesc="A fast and simple micro-framework for small web-applications" +arch=('any') +url='https://bottlepy.org' +license=('Expat') +options=(!emptydirs) +depends=('python') +makedepends=('python-setuptools' 'quilt' 'python-wheel') +source=("$pkgname-$pkgver.tar.gz::https://github.com/defnull/bottle/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-bottle/python-bottle_$_debver-$_debrel.debian.tar.xz") +sha512sums=('ee9f9d90b124c0ebbfa60d0b262f2564daa485b39396cbb978d5381b7957ac09e663a0a8eb8c9d9212e3887a25502a4948c22eda1d90e1449f2e3d120d8fc833' + '893e674ba34ac70a5c054cc0bcc301b6f687db5388920b666bb4fedbcf24aa2575a1fb0891491d4b0487e809e2cb5b9d6acc8a74d2396901550b5a89bb3a5616') + +prepare() { + cd "$srcdir"/bottle-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/bottle-$pkgver + python setup.py build +} + +package() { + cd bottle-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-captcha/PKGBUILD b/python-captcha/PKGBUILD new file mode 100644 index 0000000..ce8cffe --- /dev/null +++ b/python-captcha/PKGBUILD @@ -0,0 +1,18 @@ +# Maintainer: Jesus E. + +pkgname=python-captcha +pkgver=0.3 +pkgrel=1 +pkgdesc="Python library that generates audio and image CAPTCHAs." +arch=('any') +url='https://github.com/lepture/captcha' +license=('Modified-BSD') +makedepends=('python-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/lepture/captcha/archive/v$pkgver.tar.gz") +sha512sums=('650b8e885ac67804474745e7b24e89b717ce124664632b44d3c23b8e56f9e17087077e4ab5874029183896bb63401685b06b6187c0cdd5f8936c44e7883db540') + +package() { + cd "$srcdir/captcha-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-certifi/PKGBUILD b/python-certifi/PKGBUILD new file mode 100644 index 0000000..a31d594 --- /dev/null +++ b/python-certifi/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-certifi +_libname=${pkgname/python-/} +pkgver=2020.6.20 +pkgrel=1 +pkgdesc="Python package for providing Mozilla's CA Bundle" +arch=(any) +url="https://pypi.python.org/pypi/certifi" +license=('MPL-2.0') +depends=('python') +makedepends=('python-setuptools') +source=("https://pypi.io/packages/source/${_libname:0:1}/$_libname/$_libname-$pkgver.tar.gz") +sha512sums=('a0f22aec563636c270607ce1a27c9996b09f30cf7601b4ed7d7bc20572c411032134c92645f26962331936035cb7016d79b36680c71b7521e00dd0288827a0dc') + +build() { + cd "$srcdir/$_libname-$pkgver" + python setup.py build +} + +package() { + cd "$srcdir/$_libname-$pkgver" + python setup.py install --skip-build -O1 --root="$pkgdir" + install -m0644 -D "LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-cffi/PKGBUILD b/python-cffi/PKGBUILD new file mode 100644 index 0000000..b053034 --- /dev/null +++ b/python-cffi/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgbase=python-cffi +pkgname=(python-cffi tauthon-cffi) +pkgver=1.14.3 +pkgrel=2 +arch=('i686' 'x86_64') +url="https://cffi.readthedocs.org/" +license=('Expat') +makedepends=('python-setuptools' 'tauthon-setuptools' 'python-pycparser' 'tauthon-pycparser') +source=("${pkgname}-${pkgver}.tar.bz2::https://foss.heptapod.net/pypy/cffi/-/archive/v$pkgver/cffi-v${pkgver}.tar.bz2") +sha512sums=('987fb818e945d77f03921a60b71ebb0cf93989a6f322be39f710f32f5faaf5406f70c203a004527bbf49e26220cfacaedc2ad4949f08b8218a1a90dcc6c73b17') + +prepare() { + mv cffi-v$pkgver cffi-$pkgver + cp -a cffi-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/cffi-$pkgver + python setup.py build + + cd "$srcdir"/cffi-$pkgver-tauthon + tauthon setup.py build +} + +package_python-cffi() { + pkgdesc="Foreign Function Interface for Python calling C code" + depends=('python-pycparser') + + cd cffi-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-cffi() { + pkgdesc="Foreign Function Interface for Tauthon calling C code" + depends=('tauthon-pycparser') + + cd cffi-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-chardet/000-support-pytest-4.patch b/python-chardet/000-support-pytest-4.patch new file mode 100644 index 0000000..039816b --- /dev/null +++ b/python-chardet/000-support-pytest-4.patch @@ -0,0 +1,24 @@ +From 440828f8faafdb58700c64a9ea8f6a30b154c08b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= +Date: Mon, 11 Nov 2019 21:02:51 +0100 +Subject: [PATCH] Support pytest 4, don't apply marks directly to parameters + (#174) + +Fixes https://github.com/chardet/chardet/issues/173 +--- + test.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test.py b/test.py +index 9833307..ad2b753 100644 +--- a/test.py ++++ b/test.py +@@ -59,7 +59,7 @@ def gen_test_params(): + full_path = join(path, file_name) + test_case = full_path, encoding + if full_path in EXPECTED_FAILURES: +- test_case = pytest.mark.xfail(test_case) ++ test_case = pytest.param(*test_case, marks=pytest.mark.xfail) + yield test_case + + diff --git a/python-chardet/PKGBUILD b/python-chardet/PKGBUILD new file mode 100644 index 0000000..cfcaa0f --- /dev/null +++ b/python-chardet/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgbase=python-chardet +pkgname=('python-chardet' 'tauthon-chardet') +pkgver=3.0.4 +pkgrel=1 +arch=('any') +url='https://github.com/chardet/chardet' +license=('LGPL-2.1') +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/c/chardet/chardet-$pkgver.tar.gz" + '000-support-pytest-4.patch') +sha512sums=('61a03b23447a2bfe52ceed4dd1b9afdb5784da1933a623776883ee9f297e341f633e27f0ce0230bd5fdc5fdb5382105ab42736a74a417ddeb9f83af57455dba5' + '57bfeb5752123fbf9f9f61386039b7ceb9255290225f73453d2d52f2366e1949ed92692912571c8b451b521aedfa8b605879b2742aec7f1fdce4db10705cbe53') + +prepare() { + pushd "$srcdir/chardet-$pkgver" + patch -Np1 -i "$srcdir/000-support-pytest-4.patch" + popd + + cp -a chardet-$pkgver{,-tauthon} +} + +package_python-chardet() { + depends=('python-setuptools') + pkgdesc="Python module for character encoding auto-detection" + + cd chardet-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + + # License + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_tauthon-chardet() { + depends=('tauthon-setuptools') + pkgdesc="Tauthon module for character encoding auto-detection" + + cd chardet-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 + + # To avoid file conflict with the python version + mv "$pkgdir"/usr/bin/chardetect{,-tauthon} + + # License + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/python-click/PKGBUILD b/python-click/PKGBUILD new file mode 100644 index 0000000..51ca7bb --- /dev/null +++ b/python-click/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=python-click +_realname=click +pkgver=8.0.1 +pkgrel=2 +pkgdesc="A simple wrapper around optparse for powerful command line utilities" +arch=('any') +url='http://click.pocoo.org/' +license=('Modified-BSD') +depends=('python') +makedepends=('python-setuptools') +source=("https://github.com/pallets/click/archive/${pkgver}/$pkgname-$pkgver.tar.gz") +sha512sums=('d93ec1d070dfa306733ee79893c64de9afcb0c7bf03d3f543dd697ef195f3a750828f77842a22886960a938740b92f0122962076ea52b911b87f7f75941a9032') + +build() { + cd "${srcdir}/${_realname}-${pkgver}" + python setup.py build +} + +package() { + cd "${srcdir}/${_realname}-${pkgver}" + export PYTHONHASHSEED=0 + python setup.py install --skip-build --root="${pkgdir}" --optimize=1 + install -Dm644 "LICENSE.rst" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-commonmark/PKGBUILD b/python-commonmark/PKGBUILD new file mode 100644 index 0000000..a4c12f1 --- /dev/null +++ b/python-commonmark/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=python-commonmark +pkgver=0.9.1 +pkgrel=1 +pkgdesc='Python parser for the CommonMark Markdown spec' +url='https://pypi.org/project/commonmark/' +arch=('any') +license=('Modified-BSD') +depends=('python-docutils' 'python-future') +makedepends=('python-setuptools' 'python-sphinx' 'python-sphinx_rtd_theme') +options=('!makeflags') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/readthedocs/commonmark.py/archive/${pkgver}.tar.gz) +sha512sums=('a6de0b384247ff79fe326012bd1fc71135e6ae5bc7b6a15d5402969a94f81fdd802f1a9d557c504eb74bfb3fea68f55355a70a6e0112a620cc285cf9039892e4') + +build() { + cd commonmark.py-${pkgver} + python setup.py build + make -C docs man text SPHINXBUILD=sphinx-build +} + +package() { + cd commonmark.py-${pkgver} + python setup.py install --root="${pkgdir}" -O1 --skip-build + install -Dm 644 README.rst CHANGELOG.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm 644 docs/_build/text/* -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 docs/_build/man/commonmark-py.1 "${pkgdir}/usr/share/man/man1/${pkgname}.1" + mv "${pkgdir}/usr/bin/cmark"{,-py3} +} diff --git a/python-configargparse/PKGBUILD b/python-configargparse/PKGBUILD new file mode 100644 index 0000000..c564f6b --- /dev/null +++ b/python-configargparse/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-configargparse +pkgver=1.2.3 +pkgrel=2 +pkgdesc='A drop-in replacement for argparse that allows options to also be set via config files and/or environment variables' +arch=('any') +url='https://github.com/bw2/ConfigArgParse' +license=('Expat') +depends=('python') +makedepends=('python-setuptools') +optdepends=('python-yaml: for YAML support') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/bw2/ConfigArgParse/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('bfa8f9ca8ab5c6d4cdf2a7e7c577c99fafdf7f743c81057bebbb6045c45de2cdbf5d738f7765e5dcac5a45baa92e2a8bc7ad3879776b9cf4862e3da94e78c4cc') + +build() { + cd ConfigArgParse-$pkgver + python setup.py build +} + +package() { + cd ConfigArgParse-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-configobj/PKGBUILD b/python-configobj/PKGBUILD new file mode 100644 index 0000000..ecdc599 --- /dev/null +++ b/python-configobj/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=python-configobj +pkgver=5.0.6 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="Config file reading, writing and validation." +arch=('any') +url='https://github.com/DiffSK/configobj' +license=('Modified-BSD') +depends=('python' 'python-six') +makedepends=('python-setuptools' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/DiffSK/configobj/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/configobj/configobj_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('326eb86e362f281ebf07abcb1cf7616abb270c482eafe842371cda8708245ca5e8262f1644b7164664ecc10e9004ed061c9de18cd233a657d4697dbc3ba3c59d' + 'e13cedfc9c016ead9de97a44890cdc51cfc85662fae4e05b35f5a68b1d9ec420930771eb8b4f7528b09c274b551802389faad642207786382e2d5633cd50f8ed') + +prepare() { + cd configobj-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "${srcdir}"/debian . + + quilt push -av + fi +} + +build() { + cd configobj-${pkgver} + python setup.py build +} + +package() { + cd configobj-${pkgver} + python setup.py install --prefix=/usr --root="${pkgdir}" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-cppy/PKGBUILD b/python-cppy/PKGBUILD new file mode 100644 index 0000000..d67449b --- /dev/null +++ b/python-cppy/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=python-cppy +pkgver=1.1.0 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A collection of C++ headers which make it easier to write Python C extension modules" +url='https://github.com/nucleic/cppy' +license=('Modified-BSD') +arch=('any') +depends=('python') +makedepends=('python-setuptools' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/nucleic/cppy/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/c/cppy/cppy_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('b745b6fe1d02f87b8c257a73792ed583ca6e709943af567105f6ccfcf9c5eb99e9dcaaad42b0b4d6f90de2b4398bf8e5bb042798cd98e376c90e9b54ea24a212' + 'ca4418648ee55a89a111943435e28be0607470959353c264eb409fbd7c35747d5710105327dc8c44ab2206e3c6fee863ff907415994e0a84dbb9c08bec144fde') + +prepare() { + cd cppy-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd cppy-$pkgver + python setup.py build +} + +package() { + cd cppy-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/python-cryptography/PKGBUILD b/python-cryptography/PKGBUILD new file mode 100644 index 0000000..f4070e1 --- /dev/null +++ b/python-cryptography/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgbase=python-cryptography +pkgname=('python-cryptography' 'tauthon-cryptography') +pkgver=3.1 +pkgrel=2 +arch=('i686' 'x86_64') +license=('Apache-2.0') +url='https://pypi.python.org/pypi/cryptography' +makedepends=('python-setuptools' 'tauthon-setuptools' 'python-six' 'tauthon-six' 'python-cffi' + 'tauthon-cffi' 'tauthon-enum34' 'python-pyasn1' 'tauthon-pyasn1' 'python-idna' + 'tauthon-idna' 'tauthon-ipaddress' 'python-asn1crypto' 'tauthon-asn1crypto' 'quilt') +source=("https://pypi.io/packages/source/c/cryptography/cryptography-${pkgver}.tar.gz") +sha512sums=('c015df3a71e4c274b2fb8fd954d264c8b56443644048139113f548c69cf83798b73c9f0993609f338044df92b609723b0281ce61ed2751309a122de22060037e') + +prepare() { + cp -a cryptography-${pkgver}{,-tauthon} +} + +build() { + cd "$srcdir"/cryptography-$pkgver + python setup.py build + + cd "$srcdir"/cryptography-$pkgver-tauthon + tauthon setup.py build +} + +package_python-cryptography() { + pkgdesc="A package designed to expose cryptographic recipes and primitives to Python developers" + depends=('python-six' 'python-cffi' 'python-idna' 'python-setuptools' 'python-asn1crypto') + + cd cryptography-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.APACHE $pkgdir/usr/share/licenses/$pkgname/LICENSE.APACHE +} + +package_tauthon-cryptography() { + pkgdesc="A package designed to expose cryptographic recipes and primitives to Tauthon developers" + depends=('tauthon-six' 'tauthon-cffi' 'tauthon-enum34' 'tauthon-idna' 'tauthon-ipaddress' + 'tauthon-setuptools' 'tauthon-asn1crypto') + + cd cryptography-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.APACHE $pkgdir/usr/share/licenses/$pkgname/LICENSE.APACHE +} diff --git a/python-cycler/PKGBUILD b/python-cycler/PKGBUILD new file mode 100644 index 0000000..a5b3682 --- /dev/null +++ b/python-cycler/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=python-cycler +pkgver=0.10.0 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Composable style cycles" +arch=('any') +license=('Modified-BSD') +url='https://github.com/matplotlib/cycler' +depends=('python-six' 'python-nose') +makedepends=('python-setuptools' 'quilt') +source=("https://github.com/matplotlib/cycler/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-cycler/python-cycler_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('685231d455dfdde70eb71415dfe561e07c34579d7b31ef7197f4c1441301635b387fec903d610b35406b619264f4c0cc616562de8f02b8192414c29274b63c01' + '7bc152c9c6cd33fdacd90b20bc05b3f5ab0b5f32a02687d1d92dfdf785170ad5f9b94e96040120ca716893ca077d2f37271bc2ea5f9a34c9b1ea3821a09d0de1') + +prepare() { + cd cycler-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd cycler-$pkgver + python setup.py build +} + +package() { + cd cycler-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-cython/PKGBUILD b/python-cython/PKGBUILD new file mode 100644 index 0000000..52eda55 --- /dev/null +++ b/python-cython/PKGBUILD @@ -0,0 +1,80 @@ +# Maintainer: Jesus E. + +pkgbase=python-cython +pkgname=(python-cython tauthon-cython) +pkgver=0.29.21 +_debver=0.29.21 +_debrel=3 +pkgrel=1 +arch=(i686 x86_64) +url="https://cython.org" +license=(Apache-2.0) +makedepends=(python-setuptools tauthon-setuptools quilt) +source=($pkgbase-$pkgver.tar.gz::"https://github.com/cython/cython/archive/$pkgver.tar.gz" + https://deb.debian.org/debian/pool/main/c/cython/cython_$_debver-$_debrel.debian.tar.xz + cython-hash-int-conversion.patch::"https://github.com/cython/cython/commit/28251032.patch") +sha512sums=('2c0c3e3fff07106eb98862f71cd5dec9ff29460cf9b9e4de74537ca5e033f7523989beb5fbdc14723beaf94a535976f75c803e791b87e017961d9694b8c37679' + 'e6e897a8d54693843d7a9ef18919c5ae483488103fa472bbd088be288a454d070cc365e8a8d4610a62b43bb65cbf4fdc902558abef4326074668c15c8d394d56' + '2c1808e73a1b520460c33bcd6b60d9a5995b72f7bb2af76d687f8a67061b8cb494bae967a79310d5917c2fb1e784a56c53becedd6639a0e44cc635063120fe48') + +prepare() { + cd cython-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + patch -p1 -i ../cython-hash-int-conversion.patch + + cp -r $srcdir/cython-$pkgver $srcdir/cython-$pkgver-tauthon + find $srcdir/cython-$pkgver-tauthon -name '*.py' | xargs sed -e 's|/usr/bin/env python|/usr/bin/env tauthon|' -e 's|/usr/bin/python|/usr/bin/tauthon|' -i +} + +build() { + cd cython-$pkgver + python setup.py build + + cd ../cython-$pkgver-tauthon + tauthon setup.py build +} + +package_python-cython() { + pkgdesc="C-Extensions for Python" + depends=(python-setuptools) + replaces=(cython) + conflicts=(cython) + provides=(cython) + + cd cython-$pkgver + python setup.py install --root="$pkgdir" --skip-build + + for f in cygdb cython cythonize; do + mv "$pkgdir"/usr/bin/$f "$pkgdir"/usr/bin/${f}3 + ln -s ${f}3 "$pkgdir"/usr/bin/$f + done + + install -Dm644 LICENSE.txt $pkgdir/usr/share/licenses/$pkgname/LICENSE.txt +} + +package_tauthon-cython() { + pkgdesc="C-Extensions for Tauthon" + depends=(tauthon-setuptools) + replaces=(cython2) + conflicts=(cython2) + provides=(cython2) + + cd cython-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --skip-build + + for f in cygdb cython cythonize; do + mv "$pkgdir"/usr/bin/$f "$pkgdir"/usr/bin/${f}-tauthon + done + + install -Dm644 LICENSE.txt $pkgdir/usr/share/licenses/$pkgname/LICENSE.txt +} diff --git a/python-cython/cython-hash-int-conversion.patch b/python-cython/cython-hash-int-conversion.patch new file mode 100644 index 0000000..f84b8a4 --- /dev/null +++ b/python-cython/cython-hash-int-conversion.patch @@ -0,0 +1,106 @@ +From 28251032f86c266065e4976080230481b1a1bb29 Mon Sep 17 00:00:00 2001 +From: Robert Bradshaw +Date: Mon, 10 Dec 2018 11:54:20 +0100 +Subject: [PATCH] Non-int conversion to Py_hash_t. + +Still requires the more conservative __index__ here rather than a possibly +truncating __int__ because this is used in a context where floating point +values should probably be treated specially. + +This fixes Github issue #2752. +--- + Cython/Utility/ModuleSetupCode.c | 4 ++-- + Cython/Utility/TypeConversion.c | 20 ++++++++++++++++++++ + tests/run/py_hash_t.pyx | 18 ++++++++++++++++++ + 3 files changed, 40 insertions(+), 2 deletions(-) + +diff --git a/Cython/Utility/ModuleSetupCode.c b/Cython/Utility/ModuleSetupCode.c +index 1f2e4bfae0..f2f62f98bc 100644 +--- a/Cython/Utility/ModuleSetupCode.c ++++ b/Cython/Utility/ModuleSetupCode.c +@@ -651,10 +651,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + #if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong +- #define __Pyx_PyInt_AsHash_t PyInt_AsLong ++ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t + #else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t +- #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t ++ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t + #endif + + #if PY_MAJOR_VERSION >= 3 +diff --git a/Cython/Utility/TypeConversion.c b/Cython/Utility/TypeConversion.c +index 796c8bed9b..5938d2d78a 100644 +--- a/Cython/Utility/TypeConversion.c ++++ b/Cython/Utility/TypeConversion.c +@@ -102,6 +102,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); + + static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); + static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); ++static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); + + #if CYTHON_ASSUME_SAFE_MACROS + #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +@@ -420,6 +421,25 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + } + + ++static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { ++ if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { ++ return __Pyx_PyIndex_AsSsize_t(o); ++#if PY_MAJOR_VERSION < 3 ++ } else if (likely(PyInt_CheckExact(o))) { ++ return PyInt_AS_LONG(o); ++#endif ++ } else { ++ Py_ssize_t ival; ++ PyObject *x; ++ x = PyNumber_Index(o); ++ if (!x) return -1; ++ ival = PyInt_AsLong(x); ++ Py_DECREF(x); ++ return ival; ++ } ++} ++ ++ + static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); + } +diff --git a/tests/run/py_hash_t.pyx b/tests/run/py_hash_t.pyx +index f18a8c3acc..ccdcd82e61 100644 +--- a/tests/run/py_hash_t.pyx ++++ b/tests/run/py_hash_t.pyx +@@ -2,12 +2,30 @@ + cimport cython + + ++class IntLike(object): ++ def __init__(self, value): ++ self.value = value ++ def __index__(self): ++ return self.value ++ ++ + def assign_py_hash_t(x): + """ + >>> assign_py_hash_t(12) + 12 + >>> assign_py_hash_t(-12) + -12 ++ ++ >>> assign_py_hash_t(IntLike(-3)) ++ -3 ++ >>> assign_py_hash_t(IntLike(1 << 100)) # doctest: +ELLIPSIS ++ Traceback (most recent call last): ++ ... ++ OverflowError: ... ++ >>> assign_py_hash_t(IntLike(1.5)) # doctest: +ELLIPSIS ++ Traceback (most recent call last): ++ ... ++ TypeError: __index__ ... (type float) + """ + cdef Py_hash_t h = x + return h diff --git a/python-dateutil/PKGBUILD b/python-dateutil/PKGBUILD new file mode 100644 index 0000000..d0506c9 --- /dev/null +++ b/python-dateutil/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=python-dateutil +pkgver=2.8.1 +_debver=2.8.1 +_debrel=6 +pkgrel=1 +pkgdesc='Provides powerful extensions to the standard datetime module' +arch=('any') +license=('Apache-2.0' 'Modified-BSD') +url='https://github.com/dateutil/dateutil' +depends=('python-six') +makedepends=('python-setuptools-scm' 'python-six' 'quilt') +source=("https://files.pythonhosted.org/packages/source/${pkgname:0:1}/$pkgname/$pkgname-$pkgver.tar.gz"{,.asc} + "https://deb.debian.org/debian/pool/main/p/python-dateutil/python-dateutil_$_debver-$_debrel.debian.tar.xz") +sha512sums=('337000216e0f8ce32d6363768444144183ab9268f69082f20858f2b3322b1c449e53b2f2b5dcb3645be22294659ce7838f74ace2fd7a7c4f2adc6cf806a9fa2c' + 'SKIP' + 'f376c089d6f43f21d4cf602e251ba4537a23fb995d47b200b00158ff4c2396230fc36983e8bde1a2c5af97c1f69e769252467273a6552506832ccfcac80ffb55') +validpgpkeys=('6B49ACBADCF6BD1CA20667ABCD54FCE3D964BEFB') # Paul Ganssle + +prepare() { + cd "$srcdir"/python-dateutil-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/python-dateutil-$pkgver + export PYTHONHASHSEED=0 + python setup.py build +} + +package() { + cd "$srcdir"/python-dateutil-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/python-defusedxml/PKGBUILD b/python-defusedxml/PKGBUILD new file mode 100644 index 0000000..c3f7547 --- /dev/null +++ b/python-defusedxml/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +_name=defusedxml +pkgname=python-defusedxml +pkgver=0.6.0 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="XML bomb protection for Python stdlib modules" +arch=('any') +url='https://bitbucket.org/tiran/defusedxml' +license=('Python') +depends=('python') +makedepends=('python-setuptools' 'quilt') +source=("https://pypi.io/packages/source/d/${_name}/${_name}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/d/${_name}/${_name}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('dd1313802cf8565fd319ef10af04075019d00cba557e6414b2a2762bd4302437a32c05cd8c9e4cec5310c68c6a95d2951acf1360244e7974d40bb3fe963b7226' + '4a3959996c0da19a0926ee0161d6a0920a8359796b3c5ba69b5182b998b4e1705ca26ba94547ebe7c7e4199e1cf1356f546441381290c88cf4ff99b5cbf8d6ba') + +prepare() { + cd $_name-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $_name-$pkgver + python setup.py build +} + +package() { + cd $_name-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/python-distro/PKGBUILD b/python-distro/PKGBUILD new file mode 100644 index 0000000..adc5196 --- /dev/null +++ b/python-distro/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=python-distro +pkgver=1.5.0 +pkgrel=1 +pkgdesc="OS platform information API" +url='https://github.com/nir0s/distro' +arch=('any') +license=('Apache-2.0') +depends=('python' 'python-setuptools' 'mypy' 'python-black') +makedepends=('python-sphinx') +options=('!makeflags') +source=("https://github.com/nir0s/distro/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('35933ded65f99a86f9077af2d01528af337cda7b100f622fdcb0eaccd42baf7e4de77908870bfb1f575326cde85d6abc5a66f28a017c9813eb216dc55f3d94dd') + +build() { + cd distro-${pkgver} + python setup.py build + make man SPHINXBUILD=sphinx-build +} + +package_python-distro() { + cd distro-${pkgver} + python setup.py install -O1 --root="${pkgdir}" --skip-build + install -Dm 644 README.md CHANGELOG.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-distutils-extra/PKGBUILD b/python-distutils-extra/PKGBUILD new file mode 100644 index 0000000..ff173c7 --- /dev/null +++ b/python-distutils-extra/PKGBUILD @@ -0,0 +1,21 @@ +# Maintainer: Jesus E. + +pkgname=python-distutils-extra +pkgver=2.39 +pkgrel=1 +pkgdesc='Enhancements to the Python build system' +arch=('any') +license=('GPL-2') +url='https://launchpad.net/python-distutils-extra' +depends=('intltool' 'python') +makedepends=('python-setuptools' 'intltool') +source=(https://launchpad.net/$pkgname/trunk/$pkgver/+download/$pkgname-$pkgver.tar.gz{,.asc}) +validpgpkeys=('3DB46B55EFA59D40E6232148D14EF15DAFE11347') +sha512sums=('e3b4d1ed22767fb4c6dbbdccef960865b6fda01d18dc38cb8f9357c09c7eabb78466fce053e407a196eca257d07d57c5c1ef47f358a5979c7f22e4b11775124e' + 'SKIP') + +package() { + cd "${srcdir}/$pkgname-$pkgver" + python3 setup.py install --root="${pkgdir}" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-dnspython/PKGBUILD b/python-dnspython/PKGBUILD new file mode 100644 index 0000000..0392853 --- /dev/null +++ b/python-dnspython/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +_name=dnspython +pkgname=python-dnspython +pkgver=2.0.0 +pkgrel=1 +pkgdesc="A DNS toolkit for Python" +arch=('any') +url='http://www.dnspython.org' +license=('ISC') +depends=('python') +makedepends=('python-setuptools') +optdepends=('python-pycryptodome: DNSSEC support' + 'python-idna: support for updated IDNA 2008') +source=("https://deb.debian.org/debian/pool/main/d/${_name}/${_name}_${pkgver}.orig.tar.gz") +sha512sums=('3b38850fcacb0dd25ac0345201474f297c402617e8d706f3061c42172d697103075098e62ca0ac4e0e29967e00407f32f41789ac7bf070fba5aec0af9882e0fb') + +build() { + cd ${_name}-${pkgver} + python setup.py build +} + +package() { + cd ${_name}-${pkgver} + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/python-docopt/PKGBUILD b/python-docopt/PKGBUILD new file mode 100644 index 0000000..0f69e11 --- /dev/null +++ b/python-docopt/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-docopt +_pkgname=docopt +pkgver=0.6.2 +pkgrel=1 +pkgdesc='Pythonic argument parser, that will make you smile' +arch=('any') +url='https://github.com/docopt/docopt' +license=('Expat') +depends=('python') +makedepends=('python-setuptools') +source=("https://pypi.python.org/packages/source/${_pkgname:0:1}/${_pkgname}/${_pkgname}-${pkgver}.tar.gz") +sha512sums=('af138feccf8c37b374ee44fcda4938a88107d434df13c173214021b1a3348b152a595095a86982b66ac03a11db8e0f1e9e6a3a65c98deea92330311daeb831a3') + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + python setup.py build +} + +package() { + cd "${_pkgname}-${pkgver}" + python setup.py install --skip-build --optimize=1 --root="${pkgdir}" + install -D -m 0644 "LICENSE-MIT" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-docutils/PKGBUILD b/python-docutils/PKGBUILD new file mode 100644 index 0000000..36310b3 --- /dev/null +++ b/python-docutils/PKGBUILD @@ -0,0 +1,97 @@ +# Maintainer: Jesus E. + +pkgbase=docutils +pkgname=('python-docutils' 'tauthon-docutils') +pkgver=0.16 +_debver=0.16+dfsg +_debrel=4 +pkgrel=2 +pkgdesc='Set of tools for processing plaintext docs into formats such as HTML or XML' +arch=('any') +url='https://docutils.sourceforge.io/' +license=('GPL-3') +makedepends=('python' 'tauthon' 'quilt') +source=("https://downloads.sourceforge.net/$pkgbase/$pkgbase-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz") +sha512sums=('1a4e1bdedc79388e73dd438ae6d4d2ba67a005c745613452e027c0f6b378058b528f3329d650454fc0d3dd5253a1eb95dc52b35846cbfb4d8618d9bd4c3ad934' + 'f90aaaeec788b60dfbb41b5df24491f8950e2eef7499a16ded2714b6b5a7d9ea21f49e95b5ccbbc632901b281b6b8c2dbeacf988bcbb5f0dd747cf9670530541') + +prepare() { + cd $pkgbase-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/doc-debian-paths.diff || true + rm -v debian/patches/no-local-roman.diff || true + + quilt push -av + fi +} + +build() { + cd $pkgbase-$pkgver + msg2 python + python setup.py build --build-lib=build/python + find build/python -type f -exec \ + sed -i '1s,^#! \?/usr/bin/\(env \|\)python$,#!/usr/bin/python,' {} \; + msg2 tauthon + tauthon setup.py build --build-lib=build/tauthon + find build/tauthon -type f -exec \ + sed -i '1s,^#! \?/usr/bin/\(env \|\)python$,#!/usr/bin/tauthon,' {} \; +} + +check() { + cd $pkgbase-$pkgver + # we need utf locale to valid utf8 tests + export LANG=en_US.UTF-8 + # Disable python check + #msg2 'python checks' + #PYTHONPATH="$PWD/build/python/" python test3/alltests.py + msg2 'tauthon checks' + PYTHONPATH="$PWD/build/tauthon/" tauthon test/alltests.py +} + +package_python-docutils() { + depends=('python') + + cd $pkgbase-$pkgver + python setup.py build --build-lib=build/python \ + install --root="$pkgdir" --optimize=1 + # symlink without .py + for f in "$pkgdir"/usr/bin/*.py; do + ln -s "$(basename $f)" "$pkgdir/usr/bin/$(basename $f .py)" + done + # setup license + install -D -m644 COPYING.txt "$pkgdir/usr/share/licenses/$pkgname/COPYING.txt" + install -D -m644 licenses/python* "$pkgdir/usr/share/licenses/$pkgname/" +} + +package_tauthon-docutils() { + depends=('tauthon') + provides=("$pkgbase=$pkgver") + replaces=("pkgbase") + install=tauthon-$pkgbase.install + + cd $pkgbase-$pkgver + tauthon setup.py build --build-lib=build/tauthon \ + install --root="$pkgdir" --optimize=1 + # fix python-docutils conflict + for _f in "$pkgdir"/usr/bin/*.py; do + mv -v "$_f" "${_f%.py}tauthon.py" + done + # symlink without .py + for _f in "$pkgdir"/usr/bin/*.py; do + ln -s "$(basename $_f)" "$pkgdir/usr/bin/$(basename $_f .py)" + done + # setup license + install -D -m644 COPYING.txt "$pkgdir/usr/share/licenses/$pkgname/COPYING.txt" + install -D -m644 licenses/python* "$pkgdir/usr/share/licenses/$pkgname/" +} + +# vim:set ts=2 sw=2 et: diff --git a/python-docutils/tauthon-docutils.install b/python-docutils/tauthon-docutils.install new file mode 100644 index 0000000..b3bced5 --- /dev/null +++ b/python-docutils/tauthon-docutils.install @@ -0,0 +1,9 @@ +post_upgrade() { + [ $(vercmp '0.13.1-2' "$2") -gt 0 ] && cat < + +_name=dulwich +pkgname=python-dulwich +pkgver=0.20.15 +pkgrel=2 +pkgdesc="Python implementation of the Git file formats and protocols" +arch=('i686' 'x86_64') +url=https://www.dulwich.io +license=('Apache-2.0') +depends=('python-certifi' 'python-setuptools' 'python-urllib3') +source=("https://files.pythonhosted.org/packages/source/${_name::1}/$_name/$_name-$pkgver.tar.gz") +sha512sums=('a4e746099a90ea2d7eb5f0309508a4f625d41732bdda78997fab07b38ea2ecbd2c2aed08c8ef05b1b73fe3e2ba9b8c8cbf02270f8edbc6235d66cdee0317365c') + +build() { + cd $_name-$pkgver + python setup.py build +} + +package() { + cd $_name-$pkgver + export PYTHONHASHSEED=0 + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-eventlet/PKGBUILD b/python-eventlet/PKGBUILD new file mode 100644 index 0000000..3b877f5 --- /dev/null +++ b/python-eventlet/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=python-eventlet +_pyname=eventlet +pkgver=0.26.1 +_debver=$pkgver +_debrel=7 +pkgrel=3 +pkgdesc="Highly concurrent networking library" +url='https://eventlet.net' +arch=('any') +license=('Expat') +depends=('python' 'python-greenlet' 'python-monotonic' 'python-dnspython') +makedepends=('python-setuptools' 'python-sphinx' 'quilt') +optdepends=('python-psycopg2: non-blocking PostgreSQL support' + 'python-pyopenssl: non-blocking SSL support' + 'python-httplib2: non-blocking HTTP support' + 'python-dnspython: non-blocking DNS support') +options=('!makeflags') +source=("https://github.com/eventlet/eventlet/archive/v${pkgver}/${_pyname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-eventlet/python-eventlet_${_debver}-${_debrel}+deb11u1.debian.tar.xz") +sha512sums=('78dddbbc51827bebc331afa5eaade27a65e1f95b0a68ec57c4ad4f83ab7c90bffea4bd866718f3d0bef45794ccae1883fc046b4c92f05cb320e3ffb172e0d9a1' + '3958c5379a507d102f7c05e34ef2b9410248c1f6ff3e2b90549cbe700d83f2b802617de5cc390c319115e1023e67c9e5424107f931023671f6f640a27f45d31b') + +prepare() { + cd ${_pyname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed -r 's|(check_idle_cpu_usage\(.*,) .*\)|\1 0.8\)|g' -i ./tests/*_test.py +} + +build() { + cd ${_pyname}-${pkgver} + python setup.py build + make -C doc text +} + +package() { + cd ${_pyname}-${pkgver} + python setup.py install --prefix=/usr --root="${pkgdir}" -O1 + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -d "${pkgdir}/usr/share/doc/${pkgname}" + cp -r doc/_build/text "${pkgdir}/usr/share/doc/${pkgname}" + cp -r examples "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/python-fastecdsa/PKGBUILD b/python-fastecdsa/PKGBUILD new file mode 100644 index 0000000..e636b51 --- /dev/null +++ b/python-fastecdsa/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=python-fastecdsa +pkgver=2.2.3 +pkgrel=1 +pkgdesc="Python library for fast elliptic curve crypto" +arch=('i686' 'x86_64') +url="https://github.com/antonkueltz/fastecdsa" +license=('custom:Unlicense') +depends=('python' 'gmp') +makedepends=('python-setuptools' 'python-sphinx') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/AntonKueltz/fastecdsa/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('aa7b0b323e7eff4b9ce04633b102f36c825dfdc4d0f200539b42d726c492d5225ddd051bc86ecc302460726e4c789e9a6bea7907adb42729ecf9fbfc3cc646af') + +prepare() { + cd "fastecdsa-$pkgver" + sed -i '/packages=/s/find_packages()/find_packages(exclude=["fastecdsa.tests*"])/' setup.py +} + +build() { + cd "fastecdsa-$pkgver" + python setup.py build +} + +package() { + cd "fastecdsa-$pkgver" + PYTHONHASHSEED=0 python setup.py install --root="$pkgdir/" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname/" + install -Dm644 README.rst -t "$pkgdir/usr/share/doc/$pkgname/" +} diff --git a/python-fastimport/PKGBUILD b/python-fastimport/PKGBUILD new file mode 100644 index 0000000..c2eadc6 --- /dev/null +++ b/python-fastimport/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-fastimport +pkgver=0.9.8 +pkgrel=2 +pkgdesc="VCS fastimport / fastexport parser" +arch=('any') +url=https://github.com/jelmer/python-fastimport +license=('GPL-2') +depends=('python') +makedepends=('git-legacy' 'python-setuptools') +source=("http://deb.debian.org/debian/pool/main/p/python-fastimport/python-fastimport_${pkgver}.orig.tar.gz") +sha512sums=('5d195b641cf6138fdbc6c75781a4a6d3699e3ada9743bbe4c4264879b2da2f8a2e995e7cc3955a5241e9c7a7f24f8114474a0a30907f86e2e335e2be4669f588') + +build() { + cd fastimport-${pkgver} + python setup.py build +} + +package() { + cd fastimport-${pkgver} + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-fonttools/PKGBUILD b/python-fonttools/PKGBUILD new file mode 100644 index 0000000..462b743 --- /dev/null +++ b/python-fonttools/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=python-fonttools +pkgver=4.19.1 +pkgrel=1 +pkgdesc="A library to manipulate font files from Python" +url='https://github.com/fonttools/fonttools' +license=('Expat') +arch=('i686' 'x86_64') +depends=('python') +makedepends=('python-cython') +optdepends=('python-lxml: faster backend for XML files reading/writing' + 'python-matplotlib: for visualizing DesignSpaceDocument and resulting VariationModel' + 'python-pyqt: for drawing glyphs with Qts QPainterPath' + 'python-reportlab: to drawing glyphs as PNG images') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/f/fonttools/fonttools_${pkgver}.orig.tar.xz") +sha512sums=('418b02fcf653baf8ffa4ef0d5cb102b7dd02ef78ceca2a106ab54f521f603525cbf8754efa9c494c314529f862b468aee187785f2ec24f0ae4a575dad452e521') + +build() { + cd "$srcdir"/fonttools-${pkgver} + python setup.py build_ext --inplace + python setup.py build +} + +package() { + cd "$srcdir"/fonttools-${pkgver} + python setup.py install --skip-build --root="$pkgdir" --optimize=1 + install -D -m755 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-future/PKGBUILD b/python-future/PKGBUILD new file mode 100644 index 0000000..42960a2 --- /dev/null +++ b/python-future/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgbase=python-future +pkgname=('python-future' 'tauthon-future') +pkgver=0.18.2 +_debver=$pkgver +_debrel=5 +pkgrel=2 +url='https://python-future.org/' +arch=('any') +license=('Expat') +makedepends=('python-setuptools' 'tauthon-setuptools' 'quilt') +options=('!emptydirs') +source=("https://pypi.io/packages/source/f/future/future-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-future/python-future_$_debver-$_debrel.debian.tar.xz") +sha512sums=('91c025f7d94bcdf93df838fab67053165a414fc84e8496f92ecbb910dd55f6b6af5e360bbd051444066880c5a6877e75157bd95e150ead46e5c605930dfc50f2' + '683a7697bfb755cba48a9a3cf8628baf4f5c253f16f2166a6059ac78fabc5fd57a45c9103029195d85b6a044a4301a91f6db4150807d4f39c67d6077aac43c56') + +prepare() { + cd "$srcdir"/future-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cp -a "$srcdir"/future-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/future-$pkgver + python setup.py build + + cd "$srcdir"/future-$pkgver-tauthon + tauthon setup.py build +} + +package_python-future() { + pkgdesc="Clean single-source support for Python" + depends=('python') + optdepends=('python-setuptools: futurize and pasteurize scripts') + provides=('futurize' 'pasteurize') + + cd future-$pkgver + + python setup.py install --root="$pkgdir" --optimize=1 + install -D -m644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-future() { + pkgdesc="Clean single-source support for Tauthon" + depends=('tauthon') + optdepends=('tauthon-setuptools: futurize2 and pasteurize2 scripts') + + cd future-$pkgver-tauthon + + tauthon setup.py install --root="$pkgdir" --optimize=1 + + mv "$pkgdir"/usr/bin/futurize{,-tauthon} + mv "$pkgdir"/usr/bin/pasteurize{,-tauthon} + + install -D -m644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-gevent/PKGBUILD b/python-gevent/PKGBUILD new file mode 100644 index 0000000..9547da8 --- /dev/null +++ b/python-gevent/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgbase=python-gevent +pkgname=('tauthon-gevent' 'python-gevent') +pkgver=20.9.0 +_debver=$pkgver +_debrel=2 +pkgrel=3 +arch=('i686' 'x86_64') +license=('Apache-2.0' 'Expat' 'Modified-BSD' 'GPL-3') +url='https://www.gevent.org/' +makedepends=('python-cython' 'c-ares' 'libev' 'python-greenlet' 'python-setuptools' + 'python-zope-event' 'python-zope-interface' 'tauthon-greenlet' 'tauthon-setuptools' + 'tauthon-zope-event' 'tauthon-zope-interface' 'tauthon-cython' 'quilt') +source=("${pkgbase}-${pkgver}.tar.gz::https://github.com/gevent/gevent/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/$pkgbase/${pkgbase}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('3a94cf3a3606cbf7f38930ec03112bcce430334bcea47c1cfb565715111f3ef4d9ca52d668eacb6ea99c911fc6f70cbb8ff8f313f4bf13e66b733385f675344f' + '173af612ebc0d6b83baa270fef3782931d78d94e95116ca500908af1ead8f6023c1c7d3b4c088bea4e63aef70d994421985043d99fc50ae4096c4fe1e48736fa') + +export EMBED=0 + +prepare() { + cd "$srcdir/gevent-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd "$srcdir" + cp -rf "gevent-$pkgver" "gevent-$pkgver-tauthon" +} + +build() { + cd "$srcdir/gevent-$pkgver" + + CYTHON=cython \ + PYTHON=python \ + python setup.py build + + cd "$srcdir/gevent-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-gevent() { + pkgdesc="Python network library that uses greenlet and libev for easy and scalable concurrency" + depends=('c-ares' 'libev' 'python-greenlet' 'python-setuptools' 'python-zope-event' 'python-zope-interface') + cd "$srcdir/gevent-$pkgver" + python setup.py install -O1 --root="$pkgdir" + install -Dm644 debian/copyright LICENSE -t $pkgdir/usr/share/licenses/$pkgname/ +} + +package_tauthon-gevent() { + pkgdesc="Coroutine-based network library for Tauthon" + depends=('tauthon-greenlet' 'tauthon-setuptools' 'tauthon-zope-event' 'tauthon-zope-interface') + cd "$srcdir/gevent-$pkgver-tauthon" + tauthon setup.py install -O1 --root="$pkgdir" + install -Dm644 debian/copyright LICENSE -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/python-greenlet/PKGBUILD b/python-greenlet/PKGBUILD new file mode 100644 index 0000000..bd7c317 --- /dev/null +++ b/python-greenlet/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-greenlet +pkgver=1.1.1 +pkgrel=2 +pkgdesc="Lightweight in-process concurrent programming" +license=('Expat' 'Python') +arch=('i686' 'x86_64') +url='https://pypi.org/project/greenlet/' +depends=('python') +makedepends=('python-setuptools') +source=("https://files.pythonhosted.org/packages/source/g/greenlet/greenlet-${pkgver}.tar.gz") +sha512sums=('156ad7dfcb73764818d5f6176b5c80dc5a3ac532db5af5ffe654033a5e336d35a9e9edadb3b37fa9bf5fc338f706baf3693dcfb550598d8f17f042f5a27b86f9') + +build() { + cd greenlet-$pkgver + python setup.py build +} + +package() { + cd greenlet-$pkgver + python setup.py install -O1 --root="$pkgdir" + install -Dm0644 LICENSE.PSF -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-html5lib/PKGBUILD b/python-html5lib/PKGBUILD new file mode 100644 index 0000000..84bb327 --- /dev/null +++ b/python-html5lib/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-html5lib +pkgver=1.1 +pkgrel=1 +arch=('any') +pkgdesc="A Python HTML parser/tokenizer based on the WHATWG HTML5 spec" +url='https://github.com/html5lib' +license=('Expat') +depends=('python-six' 'python-webencodings') +makedepends=('python-setuptools') +optdepends=('python-lxml: lxml treebuilder') +source=("$pkgname-$pkgver.tar.gz::https://github.com/html5lib/html5lib-python/archive/${pkgver}.tar.gz") +sha512sums=('2a9bd43e7d69a846978ebcaba1f9682ba63ebb72dbd8b2efdb24c9976330c1d78e8efcfafc3f59c7b416316d81dc453222686eb3d73fda7b5a65f4df59944bd7') + +build() { + cd html5lib-python-${pkgver} + python setup.py build +} + +package() { + cd html5lib-python-${pkgver} + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/python-httplib2/PKGBUILD b/python-httplib2/PKGBUILD new file mode 100644 index 0000000..7c7ff0d --- /dev/null +++ b/python-httplib2/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=python-httplib2 +pkgver=0.18.1 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc='Comprehensive HTTP client library, supporting many features' +url='https://github.com/httplib2/httplib2' +license=('Expat') +arch=('any') +depends=('python' 'ca-certificates') +makedepends=('python-setuptools' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/httplib2/httplib2/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-httplib2/python-httplib2_$_debver-$_debrel.debian.tar.xz") +sha512sums=('fd40417607afc4f2b225cf50a7e3f6d437ba97445e03b1568508d31228dccb8e0bc1ea82b0d8727a2df60c6b389726d22d24646660ee1359f9b50b3c5009c2f5' + '8f1e7f76a90c67c41d8ba5af16bd79a85002c9caedcb7d236d52c0c4793c07de0ecf0fd034d53f548a6fbaaa8151af268e96dd6406374f7b719ecf1e2a85865c') + +prepare() { + cd httplib2-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/disable-pytest-cov.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir"/httplib2-$pkgver + python setup.py build +} + +package() { + cd httplib2-$pkgver + python setup.py install -O1 --root="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-idna/PKGBUILD b/python-idna/PKGBUILD new file mode 100644 index 0000000..0abd723 --- /dev/null +++ b/python-idna/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgbase=python-idna +pkgname=('python-idna' 'tauthon-idna') +pkgver=2.10 +pkgrel=1 +pkgdesc="Internationalized Domain Names in Applications (IDNA)" +arch=('any') +license=('Modified-BSD') +url='https://github.com/kjd/idna' +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("https://pypi.io/packages/source/i/idna/idna-$pkgver.tar.gz") +sha512sums=('83b412de2f79a4bc86fb4bdac7252521b9d84f0be54f4fb1bde1ee13a210bbfa4b1a98247affbc7921046fb117a591316c12694c1be72865767646554c5207ac') + +prepare() { + rm -r idna-$pkgver/*.egg-info + cp -a idna-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/idna-$pkgver + python setup.py build + + cd "$srcdir"/idna-$pkgver-tauthon + tauthon setup.py build +} + +check() { + cd "$srcdir"/idna-$pkgver + python setup.py test + + cd "$srcdir"/idna-$pkgver-tauthon + tauthon setup.py test +} + +package_python-idna() { + depends=('python') + + cd idna-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.rst "$pkgdir"/usr/share/licenses/$pkgname/LICENSE.rst +} + +package_tauthon-idna() { + depends=('tauthon') + + cd idna-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.rst "$pkgdir"/usr/share/licenses/$pkgname/LICENSE.rst +} + +# vim:set ts=2 sw=2 et: diff --git a/python-imagesize/PKGBUILD b/python-imagesize/PKGBUILD new file mode 100644 index 0000000..dd96202 --- /dev/null +++ b/python-imagesize/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgbase=python-imagesize +pkgname=('python-imagesize' 'tauthon-imagesize') +pkgver=1.2.0 +pkgrel=2 +pkgdesc="Getting image size from png/jpeg/jpeg2000/gif file" +url='https://github.com/shibukawa/imagesize_py' +arch=('any') +license=('Expat') +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("https://files.pythonhosted.org/packages/source/i/imagesize/imagesize-$pkgver.tar.gz") +sha512sums=('c82a7fe433064c3a60ed664bad8ce4e602c527bcf2f7c9ab9be6ed650654626d9e0907028b2b0c5a484712bc989335b2b4f66494c8d445f5043ed4c2bc519700') + +build() { + cp -r imagesize-$pkgver imagesize-$pkgver-tauthon + + cd "$srcdir"/imagesize-$pkgver + python setup.py build + + cd "$srcdir"/imagesize-$pkgver-tauthon + tauthon setup.py build +} + +package_python-imagesize() { + depends=('python') + + cd imagesize-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.rst -t $pkgdir/usr/share/licenses/$pkgname +} + +package_tauthon-imagesize() { + depends=('tauthon') + + cd imagesize-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.rst -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-ipy/PKGBUILD b/python-ipy/PKGBUILD new file mode 100644 index 0000000..a2e27e3 --- /dev/null +++ b/python-ipy/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +_pkgname=IPy +pkgbase=python-ipy +pkgname=('python-ipy' 'tauthon-ipy') +pkgver=0.83 +pkgrel=1 +pkgdesc="Class and tools for handling of IPv4 and IPv6 addresses and networks" +arch=('any') +url="https://github.com/autocracy/python-ipy" +license=('Modified-BSD') +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("https://files.pythonhosted.org/packages/source/${_pkgname::1}/${_pkgname}/${_pkgname}-${pkgver}.tar.gz") +sha512sums=('6bd69d96fa77dc4ceaf119b81c19a524b871badb37665a763a055e1c8b2ce3433c6e9534f03aa64d02e559dca2fac2c4e1d09b7fd78ed79c0fded88f803ad2de') + +prepare() { + cp -rf "$_pkgname-$pkgver" "$_pkgname-$pkgver-tauthon" +} + +build() { + cd "$srcdir/$_pkgname-$pkgver" + python setup.py build + + cd "$srcdir/$_pkgname-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-ipy() { + pkgdesc+=" (Python)" + depends=('python') + cd "$srcdir/$_pkgname-$pkgver" + python setup.py install --skip-build --optimize=1 --prefix=/usr --root="${pkgdir}" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm644 {AUTHORS,ChangeLog,README} -t "${pkgdir}/usr/share/doc/${pkgname}" +} + +package_tauthon-ipy() { + pkgdesc+=" (Tauthon)" + depends=('tauthon') + cd "$srcdir/$_pkgname-$pkgver-tauthon" + tauthon setup.py install --skip-build --optimize=1 --prefix=/usr --root="${pkgdir}" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm644 {AUTHORS,ChangeLog,README} -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/python-isodate/PKGBUILD b/python-isodate/PKGBUILD new file mode 100644 index 0000000..cdb5d52 --- /dev/null +++ b/python-isodate/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=python-isodate +pkgver=0.6.0 +pkgrel=4 +pkgdesc="An ISO 8601 date/time/duration parser and formatter" +arch=('any') +url="https://github.com/gweis/isodate/" +license=('Modified-BSD') +depends=('python-six') +makedepends=('python-setuptools') +source=("https://files.pythonhosted.org/packages/source/i/isodate/isodate-$pkgver.tar.gz") +sha512sums=('e977748e13ee2c94ab47bfc47113d152280e9acff6f70e773de73717392148dd2c111a7db2d9fa3679d37936c6ed9a23dc526cb00bd601df45459b6a244f9f7d') + +build() { + cd "$srcdir/isodate-$pkgver" + python setup.py build +} + +check() { + cd "$srcdir/isodate-$pkgver" + python setup.py test +} + +package_python-isodate() { + cd "$srcdir/isodate-$pkgver" + python setup.py install --root="$pkgdir/" --optimize=1 + install -d "${pkgdir}/usr/share/licenses/${pkgname}" + head -26 src/isodate/isodates.py > "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/python-jinja/PKGBUILD b/python-jinja/PKGBUILD new file mode 100644 index 0000000..9577e5f --- /dev/null +++ b/python-jinja/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgbase=python-jinja +pkgname=('python-jinja' 'tauthon-jinja') +pkgver=2.11.3 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="A simple template language" +arch=('any') +url='https://palletsprojects.com/p/jinja/' +license=('Modified-BSD') +makedepends=('python-setuptools' 'tauthon-setuptools' 'python-markupsafe' 'tauthon-markupsafe' 'quilt') +source=("https://files.pythonhosted.org/packages/source/J/Jinja2/Jinja2-${pkgver}.tar.gz" + "https://security.debian.org/debian-security/pool/updates/main/j/jinja2/jinja2_${_debver}-${_debrel}+deb11u4.debian.tar.xz") +sha512sums=('fce4f835795fe9afb622f8106f60344032a811f3f693806f31ba482f9b7c1400f93dfa1701b4db0b472cbed4b0793cb329778c8091811ef0e3b577150d28e004' + 'fcfb36c9c44bb7a1b4c31118cd6af1017d3db2b1e632c4c1bd8dfca9928052cb024f95197b0b79ef83a18ff988ddd94a9687dc19f1088561aacf614e3d2b292c') + +prepare() { + cd Jinja2-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + cd .. + cp -a Jinja2-$pkgver{,-tauthon} +} + +build() { + cd "${srcdir}/Jinja2-$pkgver" + python setup.py build + + cd "${srcdir}/Jinja2-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-jinja() { + pkgdesc+=" in Python" + depends=('python-setuptools' 'python-markupsafe') + optdepends=('python-babel: for i18n support') + + cd "${srcdir}/Jinja2-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.rst -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm644 ext/Vim/jinja.vim -t "$pkgdir/usr/share/vim/vimfiles/syntax" +} + +package_tauthon-jinja() { + pkgdesc+=" in Tauthon" + depends=('tauthon-setuptools' 'tauthon-markupsafe') + optdepends=('tauthon-babel: for i18n support') + + cd "${srcdir}/Jinja2-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-josepy/PKGBUILD b/python-josepy/PKGBUILD new file mode 100644 index 0000000..2a9259d --- /dev/null +++ b/python-josepy/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=python-josepy +pkgver=1.2.0 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="JOSE protocol implementation in Python" +arch=('any') +url="https://github.com/certbot/josepy" +license=('Apache-2.0') +makedepends=('quilt') +depends=('python-cryptography' 'python-pyopenssl' 'python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/certbot/josepy/archive/refs/tags/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-josepy/python-josepy_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('25a360b3893e1c1c524440b02e0af66c6dfefd756cebdad1c27ae8a82461200448a9c8fc835747e160cbcbb63261a4f79d7765eaae5e0b19feea5bf84d5e8896' + '9160592002caf4fee0b2fd2f5ca8e87452d8cf29f87aad531c49a12de0627054a5b36099e2b2951139066e6d0a1c6b158d0403feb7cebbaf8ac990cea034c168') + +prepare() { + cd josepy-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "${srcdir}"/debian . + + quilt push -av + fi +} + +build() { + cd josepy-$pkgver + python setup.py build +} + +package() { + cd josepy-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-jsmin/PKGBUILD b/python-jsmin/PKGBUILD new file mode 100644 index 0000000..7341cf9 --- /dev/null +++ b/python-jsmin/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +_pkgname=jsmin +pkgbase=python-$_pkgname +pkgname=(python-$_pkgname tauthon-$_pkgname) +pkgver=3.0.1 +pkgrel=1 +pkgdesc="JavaScript minifier" +arch=('any') +url='https://pypi.org/pypi/jsmin' +license=('Expat') +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("https://pypi.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz") +sha512sums=('f65ead107ffcda67bbea1aea2070d1012139043cd1094d95c0393b1370e2e11a6c6e09af2f3af6f32ab0acc35fd702431954175d930a1898a142808fc3d57b71') + +prepare() { + cp -rf "$_pkgname-$pkgver" "$_pkgname-$pkgver-tauthon" +} + +build() { + cd "$srcdir/$_pkgname-$pkgver" + python setup.py build + + cd "$srcdir/$_pkgname-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-jsmin() { + pkgdesc+=" for Python" + depends=('python') + cd "$srcdir/$_pkgname-$pkgver" + python setup.py install --root="$pkgdir/" --optimize=1 --skip-build + install -Dm644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_tauthon-jsmin() { + pkgdesc+=" for Tauthon" + depends=('tauthon') + cd "$srcdir/$_pkgname-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir/" --optimize=1 --skip-build + install -Dm644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-kiwisolver/PKGBUILD b/python-kiwisolver/PKGBUILD new file mode 100644 index 0000000..bd4022d --- /dev/null +++ b/python-kiwisolver/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-kiwisolver +pkgver=1.3.1 +pkgrel=1 +pkgdesc="A fast implementation of the Cassowary constraint solver" +url="https://github.com/nucleic/kiwi" +license=('Modified-BSD') +arch=('i686' 'x86_64') +depends=('python') +makedepends=('python-cppy' 'python-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/nucleic/kiwi/archive/$pkgver.tar.gz") +sha512sums=('0f5c1e516c334d358b8679313035dd45386381965853005271c73e3f4421fb27e3ca5a43b4f2dc85d693f4151427dae9b34d372fe72fcc1a186abd85a54a225a') + +build() { + cd kiwi-$pkgver + python setup.py build +} + +package() { + cd kiwi-$pkgver/ + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/python-lxml/PKGBUILD b/python-lxml/PKGBUILD new file mode 100644 index 0000000..1574873 --- /dev/null +++ b/python-lxml/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgbase=python-lxml +pkgname=('python-lxml' 'tauthon-lxml') +pkgver=4.6.0 +pkgrel=3 +arch=('i686' 'x86_64') +license=('Modified-BSD') +url="https://lxml.de/" +makedepends=('libxslt' 'python-setuptools' 'tauthon-setuptools' 'tauthon-pygments' 'python-cython' 'tauthon-cython') +source=("https://github.com/lxml/lxml/archive/lxml-$pkgver.tar.gz") +sha512sums=('b92403b68babac8112ec87989909eb03b75ad365bcd938daef11f4768e95d9bc7a53dae90882d22eeb51bc1a04ae47f8deac504e426b1751826575280655c19e') + +prepare() { + mv lxml-lxml-$pkgver lxml-$pkgver + cp -a lxml-$pkgver{,-tauthon} + + # Setting LC_CTYPE to workaround encoding issue + export LC_CTYPE=en_US.UTF-8 + + cd lxml-$pkgver-tauthon + sed -i 's|2, 7|2, 8|' setup.py +} + +build() { + cd "$srcdir"/lxml-$pkgver + python setup.py build + + cd "$srcdir"/lxml-$pkgver-tauthon + tauthon setup.py build +} + +package_python-lxml() { + pkgdesc="Python binding for the libxml2 and libxslt libraries" + depends=('python' 'libxslt') + optdepends=('python-beautifulsoup4: support for beautifulsoup parser to parse not well formed HTML') + + cd lxml-$pkgver + python setup.py install --root="$pkgdir" --skip-build --optimize=1 + + install -Dm644 LICENSES.txt \ + "$pkgdir"/usr/share/licenses/$pkgname/LICENSES.txt + install -Dm644 doc/licenses/BSD.txt \ + "$pkgdir"/usr/share/licenses/$pkgname/BSD.txt + install -Dm644 doc/licenses/elementtree.txt \ + "$pkgdir"/usr/share/licenses/$pkgname/elementtree.txt +} + +package_tauthon-lxml() { + pkgdesc="Tauthon binding for the libxml2 and libxslt libraries" + depends=('tauthon' 'libxslt') + optdepends=('tauthon-beautifulsoup4: support for beautifulsoup parser to parse not well formed HTML') + + cd lxml-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --skip-build --optimize=1 + + install -Dm644 LICENSES.txt \ + "$pkgdir"/usr/share/licenses/$pkgname/LICENSES.txt + install -Dm644 doc/licenses/BSD.txt \ + "$pkgdir"/usr/share/licenses/$pkgname/BSD.txt + install -Dm644 doc/licenses/elementtree.txt \ + "$pkgdir"/usr/share/licenses/$pkgname/elementtree.txt +} diff --git a/python-m2crypto/PKGBUILD b/python-m2crypto/PKGBUILD new file mode 100644 index 0000000..d54daa8 --- /dev/null +++ b/python-m2crypto/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgbase=python-m2crypto +pkgname=('python-m2crypto' 'tauthon-m2crypto') +pkgver=0.36.0 +pkgrel=2 +arch=('i686' 'x86_64') +url='https://pypi.python.org/pypi/M2Crypto' +license=('Expat') +makedepends=('python' 'python-setuptools' 'tauthon' 'tauthon-setuptools' 'swig') +source=("https://gitlab.com/m2crypto/m2crypto/-/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "libressl.patch") +sha512sums=('7bd458d068859cb122f4c9d4951ea3e8d186e22b99533c5b2d9fac6b045a603f0647a363f64aba351fc6f0fa87f4dff1536d365da9074627e124ad271e22710f' + 'cfc7c3cb007f573f10aa31dbd7cb37043b2055d925b4151a1f2dafe154097de320a848e410e7dcc122e610894e385272a547c22bdc48a62ede35ba12c9cca96e') + +prepare() { + mv m2crypto-${pkgver}-* m2crypto-${pkgver} + cd "$srcdir/m2crypto-$pkgver" + patch -p0 -i "$srcdir/libressl.patch" + cp -a "$srcdir/m2crypto-$pkgver"{,-tauthon} +} + +build(){ + cd "$srcdir/m2crypto-$pkgver" + python setup.py build + + cd "$srcdir/m2crypto-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-m2crypto() { + pkgdesc="A crypto and SSL toolkit for Python" + depends=('python' 'libressl') + + cd "${srcdir}/m2crypto-${pkgver}" + python setup.py install --root="${pkgdir}/" --optimize=1 --skip-build + install -Dm644 LICENCE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_tauthon-m2crypto() { + pkgdesc="A crypto and SSL toolkit for Tauthon" + depends=('tauthon' 'libressl' 'tauthon-typing') + + cd "${srcdir}/m2crypto-${pkgver}-tauthon" + tauthon setup.py install --root="${pkgdir}/" --optimize=1 --skip-build + install -Dm644 LICENCE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-m2crypto/libressl.patch b/python-m2crypto/libressl.patch new file mode 100644 index 0000000..d82b408 --- /dev/null +++ b/python-m2crypto/libressl.patch @@ -0,0 +1,140 @@ +--- SWIG/_bio.i.orig ++++ SWIG/_bio.i +@@ -293,8 +293,12 @@ int bio_should_write(BIO* a) { + } + + /* Macros for things not defined before 1.1.0 */ +-#if OPENSSL_VERSION_NUMBER < 0x10100000L +-static BIO_METHOD * ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) ++ ++#if !defined(LIBRESSL_VERSION_NUMBER) ++static ++#endif ++BIO_METHOD * + BIO_meth_new( int type, const char *name ) + { + BIO_METHOD *method = malloc( sizeof(BIO_METHOD) ); +@@ -306,7 +310,10 @@ BIO_meth_new( int type, const char *name ) + return method; + } + +-static void ++#if !defined(LIBRESSL_VERSION_NUMBER) ++static ++#endif ++void + BIO_meth_free( BIO_METHOD *meth ) + { + if ( meth == NULL ) { +--- SWIG/_evp.i.orig ++++ SWIG/_evp.i +@@ -19,7 +19,7 @@ Copyright (c) 2009-2010 Heikki Toivonen. All rights re + #include + #include + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + HMAC_CTX *HMAC_CTX_new(void) { + HMAC_CTX *ret = PyMem_Malloc(sizeof(HMAC_CTX)); +--- SWIG/_lib11_compat.i.orig ++++ SWIG/_lib11_compat.i +@@ -8,7 +8,7 @@ + */ + + %{ +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + + #include + #include +--- SWIG/_lib.i.orig ++++ SWIG/_lib.i +@@ -21,7 +21,7 @@ + + %{ + /* OpenSSL 1.0.2 copmatbility shim */ +-#if OPENSSL_VERSION_NUMBER < 0x10002000L ++#if OPENSSL_VERSION_NUMBER < 0x10002000L || defined(LIBRESSL_VERSION_NUMBER) + typedef void (*OPENSSL_sk_freefunc)(void *); + typedef void *(*OPENSSL_sk_copyfunc)(const void *); + typedef struct stack_st OPENSSL_STACK; +@@ -499,7 +499,7 @@ int passphrase_callback(char *buf, int num, int v, voi + %inline %{ + + void lib_init() { +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + SSLeay_add_all_algorithms(); + ERR_load_ERR_strings(); + #endif +--- SWIG/_ssl.i.orig ++++ SWIG/_ssl.i +@@ -275,7 +275,7 @@ const SSL_METHOD *sslv3_method(void) { + #endif + + const SSL_METHOD *tlsv1_method(void) { +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + PyErr_WarnEx(PyExc_DeprecationWarning, + "Function TLSv1_method has been deprecated.", 1); + #endif +--- SWIG/_threads.i.orig ++++ SWIG/_threads.i +@@ -5,7 +5,7 @@ + #include + #include + +-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L ++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + #define CRYPTO_num_locks() (CRYPTO_NUM_LOCKS) + static PyThread_type_lock lock_cs[CRYPTO_num_locks()]; + static long lock_count[CRYPTO_num_locks()]; +@@ -13,7 +13,7 @@ static int thread_mode = 0; + #endif + + void threading_locking_callback(int mode, int type, const char *file, int line) { +-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L ++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + if (mode & CRYPTO_LOCK) { + PyThread_acquire_lock(lock_cs[type], WAIT_LOCK); + lock_count[type]++; +@@ -25,7 +25,7 @@ void threading_locking_callback(int mode, int type, co + } + + unsigned long threading_id_callback(void) { +-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L ++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + return (unsigned long)PyThread_get_thread_ident(); + #else + return (unsigned long)0; +@@ -35,7 +35,7 @@ unsigned long threading_id_callback(void) { + + %inline %{ + void threading_init(void) { +-#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L ++#if defined(THREADING) && OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + int i; + if (!thread_mode) { + for (i=0; i + #include diff --git a/python-mako/PKGBUILD b/python-mako/PKGBUILD new file mode 100644 index 0000000..71592ec --- /dev/null +++ b/python-mako/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgbase=python-mako +pkgname=('python-mako' 'tauthon-mako') +pkgver=1.1.3 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="A super-fast templating language that borrows the best ideas from the existing templating languages" +arch=('any') +url='https://www.makotemplates.org/' +license=('Expat') +makedepends=('python-setuptools' 'tauthon-setuptools' 'python-markupsafe' 'tauthon-markupsafe' + 'python-beaker' 'tauthon-beaker' 'quilt') +source=("https://pypi.io/packages/source/M/Mako/Mako-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/m/mako/mako_${_debver}+ds1-${_debrel}.debian.tar.xz") +sha512sums=('a9b94fa34a61e7794b6e4549fa0bada6ff84dfb0d9edb8d5c7f9b95d12184fa4499f42303cfee720b576a9f7e986a57d91ad3aeb26c9f93154dbc08fb2975952' + '664ccd3fccc02d4470735855db3030a7cb37ad1cdf54f58a9dd5986792b51652dab2b65350e43daac254d008a7ef628d3c59d6b3d503e014a9615e72f4e3b8ab') + +prepare() { + cd "$srcdir"/Mako-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cp -a "$srcdir"/Mako-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/Mako-$pkgver + python setup.py build + + cd "$srcdir"/Mako-$pkgver-tauthon + tauthon setup.py build +} + +package_python-mako() { + depends=('python-markupsafe' 'python-beaker' 'python-setuptools') + + cd Mako-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-mako() { + depends=('tauthon-markupsafe' 'tauthon-beaker' 'tauthon-setuptools') + + cd Mako-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname + + mv "$pkgdir"/usr/bin/mako-render{,-tauthon} +} diff --git a/python-markdown/PKGBUILD b/python-markdown/PKGBUILD new file mode 100644 index 0000000..5236fbc --- /dev/null +++ b/python-markdown/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +_pkgbasename=Markdown +pkgname=python-markdown +pkgver=3.3.3 +pkgrel=2 +pkgdesc="Python implementation of John Gruber's Markdown." +arch=('any') +url='https://python-markdown.github.io/' +license=('Modified-BSD') +depends=('python' 'python-setuptools') +source=("https://files.pythonhosted.org/packages/source/M/$_pkgbasename/$_pkgbasename-$pkgver.tar.gz" + "disable_directory_urls.patch") +sha512sums=('b8e42c1471d155be6cc9aa0b6ce649454b09d36df1de51ef7e45043ae3c1c87b9b09e1fae4c680a771bee52e7fa8ea82548b78b2ffb1d38e85785f0b0de25b36' + 'a96893d2e831128e6c336e97e79cffbb1cf98de81616eec772a9b3a0dea30b88f4e12855cd65432ccf5214931bdea5eeb923ce79c9d4760d01c15c0d657604d0') + +prepare() { + cd "$srcdir/$_pkgbasename-$pkgver" + patch -Np1 -i ${srcdir}/disable_directory_urls.patch +} + +build() { + cd "$srcdir/$_pkgbasename-$pkgver" + python setup.py build +} + +package() { + cd "$srcdir/$_pkgbasename-$pkgver" + python setup.py install --root="$pkgdir" --optimize=0 + install -Dm644 LICENSE.md -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-markdown/disable_directory_urls.patch b/python-markdown/disable_directory_urls.patch new file mode 100644 index 0000000..1d439d2 --- /dev/null +++ b/python-markdown/disable_directory_urls.patch @@ -0,0 +1,11 @@ +--- a/mkdocs.yml 2020-10-25 21:21:50.000000000 +0100 ++++ b/mkdocs.yml 2025-02-06 00:00:11.199631309 +0100 +@@ -4,7 +4,7 @@ + site_author: "The Python-Markdown Project" + copyright: "Copyright © 2010-2017" + +-use_directory_urls: true ++use_directory_urls: false + + theme: + name: nature diff --git a/python-markupsafe/PKGBUILD b/python-markupsafe/PKGBUILD new file mode 100644 index 0000000..054bc5b --- /dev/null +++ b/python-markupsafe/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgbase=python-markupsafe +pkgname=('python-markupsafe' 'tauthon-markupsafe') +pkgver=1.1.1 +pkgrel=2 +arch=('i686' 'x86_64') +url='https://pypi.python.org/pypi/MarkupSafe' +license=('Modified-BSD') +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/pallets/markupsafe/archive/$pkgver.tar.gz") +sha512sums=('c2a1072c5dd0918e47f9cfbd30b79b0690a43635f7cfc3fdd27f3df52f8e20406d7e3cfadd29df8ab1d1110f50e23eb7c7272707e0739d862d4b1edb59bbc241') + +prepare() { + cp -a "$srcdir/markupsafe-$pkgver"{,-tauthon} +} + +build() { + cd "$srcdir/markupsafe-$pkgver" + python setup.py build + + cd "$srcdir/markupsafe-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-markupsafe() { + pkgdesc="Implements a XML/HTML/XHTML Markup safe string for Python" + depends=('python') + + cd "$srcdir/markupsafe-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 + + install -D -m644 LICENSE.rst "$pkgdir"/usr/share/licenses/python-markupsafe/LICENSE.rst +} + +package_tauthon-markupsafe() { + pkgdesc="Implements a XML/HTML/XHTML Markup safe string for Tauthon" + depends=('tauthon') + + cd "$srcdir/markupsafe-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir" --optimize=1 + + install -D -m644 LICENSE.rst "$pkgdir"/usr/share/licenses/tauthon-markupsafe/LICENSE.rst +} diff --git a/python-matplotlib/PKGBUILD b/python-matplotlib/PKGBUILD new file mode 100644 index 0000000..0767931 --- /dev/null +++ b/python-matplotlib/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=python-matplotlib +pkgver=3.3.4 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="A python plotting library, making publication quality plots" +arch=('i686' 'x86_64') +url='https://matplotlib.org' +license=('custom:matplotlib' 'custom:Bitstream-Vera' 'Modified-BSD' 'Expat' 'CC-BY-4.0') +depends=('freetype2' 'python-cycler' 'python-dateutil' 'python-kiwisolver' 'python-numpy' + 'python-pillow' 'python-pyparsing' 'qhull') +optdepends=('tk: Tk backends' + 'python-pyqt: Qt5 backends' + 'python-pygobject: for GTK3 backend' + 'python-wxpython: WX backend' + 'python-pycairo: {GTK3,Qt5,Tk,WX}Cairo backends' + 'ffmpeg: for saving movies' + 'ghostscript: usetex dependencies' + 'python-certifi: https support') +makedepends=('rsync' 'python-setuptools' 'tk' 'python-pyqt' 'python-pygobject' + 'python-wxpython' 'python-pycairo' 'python-certifi' + 'ghostscript' 'quilt') +source=("https://github.com/matplotlib/matplotlib/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/m/matplotlib/matplotlib_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e29bcd17ea2b65c26c75421a319d3f21c5b0148c9e61d55d719c191c07342ed19032f97cde269647bd545ed45b5e142483e50caf29ffd421acde5b0b3bfa238b' + '21a4e08c974a004db2530c40af1c502ea97bebda5bc790b81bde6410b698ec8b250d57662bb8494c7e616c847afa592873566baa934f5c540d1ba5202022a032') + +prepare() { + cd matplotlib-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/20_matplotlibrc_path_search_fix.patch || true + + quilt push -av + fi + + # use system freetype and qhull + sed -e 's|#system_freetype = False|system_freetype = True|' -e 's|#system_qhull = False|system_qhull = True|' setup.cfg.template > setup.cfg +} + +build() { + cd matplotlib-${pkgver} + python setup.py build +} + +package_python-matplotlib() { + cd matplotlib-${pkgver} + python setup.py install --root "${pkgdir}" --prefix=/usr --optimize=1 --skip-build + install -Dm644 doc/users/license.rst debian/copyright -t "${pkgdir}"/usr/share/licenses/${pkgname}/ + # needed since https://github.com/matplotlib/matplotlib/pull/14170 + rm -r "${pkgdir}"$(python -c "import site; print(site.getsitepackages()[0])")/{matplotlib,mpl_toolkits}/tests/ +} diff --git a/python-mock/PKGBUILD b/python-mock/PKGBUILD new file mode 100644 index 0000000..3f77ecb --- /dev/null +++ b/python-mock/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgbase=python-mock +pkgname=('tauthon-mock' 'python-mock') +pkgver=4.0.3 +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="Mocking and Patching Library for Testing" +url='https://github.com/testing-cabal/mock' +makedepends=('tauthon' 'python' 'python-pbr' 'tauthon-pbr' 'quilt') +license=('Simplified-BSD') +arch=('any') +source=(mock-$pkgver.tar.gz::https://github.com/testing-cabal/mock/archive/$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/p/python-mock/python-mock_$_debver-$_debrel.debian.tar.xz) +sha512sums=('adfdab253eb3bc1b6cb767c58ffa3a8a5c5f88da0f04ea6680e0d87da59177972d2d99bfe0a770ac2ed4f809ca6a090a9d0f789eea8f4365ef2c54f8e8792e89' + '4cd8cd58bf38b9253e4b45320232680cde50bf3f454142f4b67898541505af25cfcf5e91a63a7ddd7bd8b52a629bdb8300ace17ecb92c0a9a58b75e89fa20636') + +prepare() { + cd "$srcdir/mock-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # use unittest instead of unittest2 as they are the same on recent python* + sed -i 's/unittest2/unittest/g' mock/tests/*.py + + cd "$srcdir" + cp -rf "mock-$pkgver" "mock-$pkgver-tauthon" +} + +build() { + cd "$srcdir/mock-$pkgver" + python setup.py build + + cd "$srcdir/mock-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-mock() { + depends=('python' 'python-six' 'python-pbr') + + cd "$srcdir/mock-$pkgver" + python setup.py install --optimize=1 --root="$pkgdir" + install -Dm644 LICENSE.txt "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.txt +} + +package_tauthon-mock() { + depends=('tauthon' 'tauthon-six' 'tauthon-pbr') + + cd "$srcdir/mock-$pkgver-tauthon" + tauthon setup.py install --optimize=1 --root="$pkgdir" + install -Dm644 LICENSE.txt "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.txt +} diff --git a/python-monotonic/PKGBUILD b/python-monotonic/PKGBUILD new file mode 100644 index 0000000..1b3c499 --- /dev/null +++ b/python-monotonic/PKGBUILD @@ -0,0 +1,20 @@ +# Maintainer: Jesus E. + +_realpkgname=monotonic +pkgname=python-$_realpkgname +pkgver=1.5 +pkgrel=2 +pkgdesc="An implementation of time.monotonic() for Python." +url='https://pypi.python.org/pypi/monotonic' +license=('Apache-2.0') +arch=('any') +depends=('python') +makedepends=('python-setuptools') +source=("$_realpkgname-$pkgver.tar.gz::https://github.com/atdt/monotonic/archive/$pkgver.tar.gz") +sha512sums=('acee69916a82059a027e7bcc03c58deb5ce773a1aff45938699cf09c3ab49b7827c2c01b431593ed76ae49009728c3d52923267eccfc7e15390f8730351a39e2') + +package() { + cd "$srcdir/$_realpkgname-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-mutagen/PKGBUILD b/python-mutagen/PKGBUILD new file mode 100644 index 0000000..60eb075 --- /dev/null +++ b/python-mutagen/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +_name=mutagen +pkgname=python-mutagen +pkgver=1.45.1 +_debver=1.45.1 +_debrel=2 +pkgrel=1 +arch=('any') +pkgdesc='An audio metadata tag reader and writer (python library)' +url='https://github.com/quodlibet/mutagen' +license=('GPL-2') +depends=('python-setuptools') +makedepends=('quilt') +source=("https://github.com/quodlibet/${_name}/releases/download/release-$pkgver/${_name}-$pkgver.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/m/mutagen/mutagen_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('c5244efa01b9de5ec22ceca39e55f34b933ca4a5bec0f2088fd3adca657f0230cbe85cd5e156db1d90fb44d9339bc94dc3bdcd3e49f1b0d46bc3d71ece6b45d8' + 'SKIP' + '20a621ac9be007623a9996cd8f26294d6609321e631fc14facf1e21c7c0fbc2edfc5e743d34ddd37891ebb2ef5223de310a6b84d7782c32f4b0a3767d7e291b7') +validpgpkeys=('0EBF782C5D53F7E5FB02A66746BD761F7A49B0EC') # Christoph Reiter + +prepare() { + mv -v "${_name}-$pkgver" "${pkgname}-${pkgver}" + + cd "${pkgbase}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgbase}-${pkgver}" + python setup.py build +} + +package() { + cd "${pkgbase}-${pkgver}" + python setup.py install --skip-build \ + --optimize=1 \ + --prefix=/usr \ + --root="${pkgdir}" + install -vDm 644 {NEWS,README.rst} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/python-mypy_extensions/PKGBUILD b/python-mypy_extensions/PKGBUILD new file mode 100644 index 0000000..189168c --- /dev/null +++ b/python-mypy_extensions/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-mypy_extensions +pkgver=0.4.3 +pkgrel=2 +pkgdesc="Experimental type system extensions for programs checked with the mypy typechecker" +url='https://www.mypy-lang.org/' +arch=('any') +license=('Expat') +depends=('python') +makedepends=('python-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/python/mypy_extensions/archive/refs/tags/$pkgver.tar.gz") +sha512sums=('22d8dc538cf6f77d97f4113dd34fce8095dd98944c7613fab2b3e71a3e9b7df1374654af41ead5c934f789ef1b72f54d980ab06f3ca28b8b4c6bb14ba1ca3ce2') + +build() { + cd "mypy_extensions-$pkgver" + python setup.py build +} + +package() { + cd "mypy_extensions-$pkgver" + python setup.py install --prefix="/usr" --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-ndg-httpsclient/PKGBUILD b/python-ndg-httpsclient/PKGBUILD new file mode 100644 index 0000000..625300b --- /dev/null +++ b/python-ndg-httpsclient/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgbase=python-ndg-httpsclient +pkgname=(python-ndg-httpsclient tauthon-ndg-httpsclient) +_pkgname=ndg_httpsclient +pkgver=0.5.1 +pkgrel=2 +pkgdesc="Provides enhanced HTTPS support for httplib and urllib2 using PyOpenSSL" +arch=('any') +url='https://pypi.python.org/pypi/ndg-httpsclient' +license=('Modified-BSD') +makedepends=('tauthon-setuptools' 'tauthon-pyopenssl' 'tauthon-pyasn1' 'python-setuptools' 'python-pyopenssl' 'python-pyasn1') +options=(!emptydirs) +source=("https://files.pythonhosted.org/packages/source/n/ndg-httpsclient/${_pkgname}-${pkgver}.tar.gz") +sha512sums=('b2b4c1b1df87ea1a94811b9ae831e7bf32af27258f487fd5ec319e0e6e0d79dfdb1f7bfadaf397d0693a8a7f0720df170a7fc946aaf10c82e3957ac5464f672e') + +build() { + cd "$srcdir"/$_pkgname-$pkgver + + rm -rf ../buildpython; mkdir ../buildpython + python setup.py build -b ../buildpython + + rm -rf ../buildtauthon; mkdir ../buildtauthon + tauthon setup.py build -b ../buildtauthon +} + +package_python-ndg-httpsclient() { + depends=('python-pyopenssl' 'python-pyasn1') + + cd "$srcdir"/$_pkgname-$pkgver + rm -rf build; ln -s ../buildpython build + python setup.py install --skip-build -O1 --root="$pkgdir" + install -Dm0644 ndg/httpsclient/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-ndg-httpsclient() { + depends=('tauthon-pyopenssl' 'tauthon-pyasn1') + + cd "$srcdir"/$_pkgname-$pkgver + rm -rf build; ln -s ../buildtauthon build + tauthon setup.py install --skip-build -O1 --root="$pkgdir" + install -Dm0644 ndg/httpsclient/LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname + mv "$pkgdir"/usr/bin/ndg_httpclient{,-tauthon} +} diff --git a/python-nose/PKGBUILD b/python-nose/PKGBUILD new file mode 100644 index 0000000..ead86c4 --- /dev/null +++ b/python-nose/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgbase=python-nose +pkgname=('python-nose' 'tauthon-nose') +pkgver=1.3.7 +_debver=$pkgver +_debrel=9 +pkgrel=5 +pkgdesc="A discovery-based unittest extension" +arch=('any') +url='https://readthedocs.org/docs/nose/' +license=('LGPL-2.1') +makedepends=('python' 'python-setuptools' 'tauthon' 'tauthon-setuptools' 'quilt') +source=("nose-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/n/nose/nose_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/n/nose/nose_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e65c914f621f8da06b9ab11a0ff2763d6e29b82ce2aaed56da0e3773dc899d9deb1f20015789d44c65a5dad7214520f5b659b3f8d7695fb207ad3f78e5cf1b62' + '5adbd16b0a8c516c497dbc1b1f9f6b6ea24aaa067f7c8e9762d6df02e9b4f7a7721935aaf29565483a0e9013db6a1c4ed4b34baaee790523151d1ab55571a039') + +prepare() { + cd "$srcdir/nose-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/2to3-fixups.diff || true + rm -v debian/patches/docs-sys.path.diff || true + rm -v debian/patches/no-distribute_setup.diff || true + rm -v debian/patches/no-install-data.diff || true + + quilt push -av + fi +} + +build() { + cd "$srcdir/nose-$pkgver" + sed -i -e "s:man/man1:share/man/man1:g" setup.py + cp -R "$srcdir/nose-$pkgver" "$srcdir/nose-$pkgver-tauthon" +} + +package_python-nose() { + pkgdesc+=" (for Python)" + depends=('python' 'python-setuptools') + cd "$srcdir/nose-$pkgver" + python setup.py install --prefix=/usr --root="${pkgdir}" + install -Dm644 lgpl.txt -t $pkgdir/usr/share/licenses/$pkgname +} + +package_tauthon-nose() { + pkgdesc+=" (for Tauthon)" + depends=('tauthon' 'tauthon-setuptools') + cd "$srcdir/nose-$pkgver-tauthon" + tauthon setup.py install --prefix=/usr --root="${pkgdir}" + mv "$pkgdir/usr/bin/nosetests" "$pkgdir/usr/bin/nosetests-tauthon" + rm -rf "$pkgdir/usr/share" + install -Dm644 lgpl.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-numpy/PKGBUILD b/python-numpy/PKGBUILD new file mode 100644 index 0000000..602ecb2 --- /dev/null +++ b/python-numpy/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=python-numpy +pkgver=1.19.4 +_debver=1.19.4 +_debrel=1 +pkgrel=1 +pkgdesc="Scientific tools for Python" +arch=('i686' 'x86_64') +license=('Modified-BSD') +url="https://www.numpy.org/" +depends=('cblas' 'lapack' 'python') +optdepends=('python-nose: testsuite' + 'openblas: faster linear algebra') +makedepends=('python-setuptools' 'tauthon-setuptools' 'gcc-fortran' 'python-nose' 'python-cython' 'tauthon-cython') +options=('staticlibs') +source=("$pkgname-$pkgver.tar.gz::https://github.com/numpy/numpy/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/n/numpy/numpy_$_debver-$_debrel.debian.tar.xz") +sha512sums=('369790f3a2dc91156c15f3b6502615ef40a2f0973a80ffdadfcd28a6e7971997d6ba5c146299e76ee0ec1776799a03c6fa185e64b38abea9475c452aebe1e07a' + '994f40ed6045c50bc0d1a37afa47c8253c9a01b4efddc6a20a5fe667d9b0e984d72d527a3d829eb1f0c8efc3fe67b655629066ee8e52634dda5738bd4fceb27c') + +prepare() { + cd numpy-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0005-Dont-fail-if-we-cant-import-mingw32.patch || true + rm -v debian/patches/0006-disable-asserts-on-ppc-with-broken-malloc-only-longd.patch || true + rm -v debian/patches/adapt_swig_docs_to_debian.patch || true + rm -v debian/patches/debian_skip_tests.patch || true + rm -v debian/patches/python3-soabi.patch || true + rm -v debian/patches/sphinx_no_dashW.patch || true + rm -v debian/patches/use_local_object.inv_files.patch || true + + quilt push -av + fi +} + +build() { + cd numpy-$pkgver + python setup.py build +} + +package() { + cd numpy-$pkgver + python setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + + install -Dm644 LICENSE.txt $pkgdir/usr/share/licenses/$pkgname/LICENSE.txt +} diff --git a/python-packaging/PKGBUILD b/python-packaging/PKGBUILD new file mode 100644 index 0000000..dc16900 --- /dev/null +++ b/python-packaging/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgbase=python-packaging +pkgname=('python-packaging' 'tauthon-packaging') +pkgver=20.4 +pkgrel=3 +arch=('any') +url='https://github.com/pypa/packaging' +license=('Apache-2.0') +makedepends=('python-pyparsing' 'tauthon-pyparsing') +source=("https://pypi.io/packages/source/p/packaging/packaging-$pkgver.tar.gz") +sha512sums=('d53912041a9950efb5d221fc968adc328c2ef1e54ec9806d2158fd6db1b170e37afb05213f5750b10c59927504083ca3781c958caa0c802b1c7c0fe1ac1682a4') + +prepare() { + cp -a "$srcdir"/packaging-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir/packaging-$pkgver" + python setup.py build + + cd "$srcdir/packaging-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-packaging() { + pkgdesc="Core utilities for Python packages" + depends=('python-pyparsing' 'python-six') + + cd "$srcdir/packaging-$pkgver" + python setup.py install --root "$pkgdir" + + # license + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_tauthon-packaging() { + pkgdesc="Core utilities for Tauthon packages" + depends=('tauthon-pyparsing' 'tauthon-six') + + cd "$srcdir/packaging-$pkgver-tauthon" + tauthon setup.py install --root "$pkgdir" + + # license + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-paramiko/PKGBUILD b/python-paramiko/PKGBUILD new file mode 100644 index 0000000..f3e3137 --- /dev/null +++ b/python-paramiko/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=python-paramiko +pkgver=2.7.2 +pkgrel=2 +pkgdesc="Python module that implements the SSH2 protocol" +url="https://github.com/paramiko/paramiko/" +license=('LGPL-2.1') +arch=('any') +depends=('python-bcrypt' 'python-cryptography' 'python-pynacl') +makedepends=('python-setuptools' 'python-bcrypt' 'python-cryptography' 'python-pynacl') +source=("https://github.com/paramiko/paramiko/archive/$pkgver/$pkgname-$pkgver.tar.gz") +sha512sums=('c9bc569428a0a61814cb73941356de5bae7fea7891ba4fd3f5c00ff1ee5083454bfde7e969fb4aaf5254b909f7f0132f590d67803eda8a67503e5c02ec2bf01a') + +package() { + cd paramiko-$pkgver + + python setup.py install --root="$pkgdir" --optimize=1 + install -dm755 "$pkgdir"/usr/share/doc/$pkgname/demos + install -m644 demos/* "$pkgdir"/usr/share/doc/$pkgname/demos + chmod 755 "$pkgdir"/usr/share/doc/$pkgname/demos/*.py + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-parsedatetime/PKGBUILD b/python-parsedatetime/PKGBUILD new file mode 100644 index 0000000..f9298a1 --- /dev/null +++ b/python-parsedatetime/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-parsedatetime +pkgver=2.6 +pkgrel=2 +pkgdesc="Parse human-readable date/time strings" +arch=('any') +url='https://github.com/bear/parsedatetime' +license=('Apache-2.0') +depends=('python-future') +makedepends=('python-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/bear/parsedatetime/archive/v$pkgver.tar.gz") +sha512sums=('ed7649feb8773fdb33d609ef0abe4d20f555744bd70e9766aba6b9a79d8415c7e2efea1d7ef5c6b5906f3bc90bff124ef92992ce17d83fe70575da2db918e543') + +build() { + cd parsedatetime-$pkgver + python setup.py build +} + +package() { + cd parsedatetime-$pkgver + python setup.py install --prefix=/usr --root="${pkgdir}" + install -Dm644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-passlib/PKGBUILD b/python-passlib/PKGBUILD new file mode 100644 index 0000000..1ae02d7 --- /dev/null +++ b/python-passlib/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=python-passlib +pkgver=1.7.4 +pkgrel=2 +pkgdesc="A password hashing library for Python" +arch=('any') +url='https://passlib.readthedocs.io/en/stable' +license=('Modified-BSD') +depends=('python') +optdepends=('python-bcrypt: accelerate Bcrypt hashes' + 'python-scrypt: accelerate SCrypt hashes') +makedepends=('python-setuptools') +source=("https://pypi.io/packages/source/p/passlib/passlib-$pkgver.tar.gz") +sha512sums=('350bd6da5ac57e6c266ffe8bf9684c8c2cce3fc6b513eb6c7bc1b302d2d8a1b701e9c01c953782520a2ac37b7ec1f6d7bd5855f99f6ee0e2dbbf33f2d49a9530') + +build() { + cd passlib-$pkgver + python setup.py build +} + +package() { + cd passlib-$pkgver + python setup.py install -O1 --root="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-pathspec/PKGBUILD b/python-pathspec/PKGBUILD new file mode 100644 index 0000000..4316b92 --- /dev/null +++ b/python-pathspec/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-pathspec +pkgver=0.9.0 +pkgrel=2 +pkgdesc="Utility library for gitignore style pattern matching of file paths" +arch=('any') +url=https://github.com/cpburnz/python-path-specification +license=('MPL-2.0') +depends=('python') +makedepends=('python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/cpburnz/python-path-specification/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('9484322d1abed71110cbb60214636684948aa5ff393104503798807326366ea6f71f42c06d908cc12ff210e710134155fb39e9083c4f9290d1401cce0cddc67b') + +build() { + cd python-pathspec-$pkgver + python setup.py build +} + +package() { + cd python-pathspec-$pkgver + export PYTHONHASHSEED=0 + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-patiencediff/PKGBUILD b/python-patiencediff/PKGBUILD new file mode 100644 index 0000000..088e0f6 --- /dev/null +++ b/python-patiencediff/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=python-patiencediff +pkgver=0.2.1 +pkgrel=1 +pkgdesc="Patiencediff Python and C implementations" +arch=('i686' 'x86_64') +url='https://www.breezy-vcs.org/' +license=('GPL-2') +depends=('python') +makedepends=('python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/breezy-team/patiencediff/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('e810af3a6e973cd24ee713aaf55b31f5e0cc5e2f52ebca23e9a92447e565414450093f0c591a381b423902976196b126d08b42c4a94ca7463c2936691c0005f8') + +build() { + cd patiencediff-$pkgver + + python setup.py build +} + +package() { + cd patiencediff-$pkgver + + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-pbr/PKGBUILD b/python-pbr/PKGBUILD new file mode 100644 index 0000000..6e8238f --- /dev/null +++ b/python-pbr/PKGBUILD @@ -0,0 +1,66 @@ +# Maintainer: Jesus E. + +pkgbase=python-pbr +pkgname=('python-pbr' 'tauthon-pbr') +pkgver=5.5.0 +_debver=$pkgver +_debrel=2 +pkgrel=3 +arch=('any') +url='https://pypi.python.org/pypi/pbr' +license=('Apache-2.0') +makedepends=('tauthon-setuptools' 'python-setuptools' 'git-legacy' 'quilt') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/openstack-dev/pbr/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-pbr/python-pbr_$_debver-$_debrel.debian.tar.xz") +sha512sums=('26ac1e67341e1e4388e93a64fbb3c7f4d94c700ae95c265a34542e867be38c91cb07db311df637dfc6f63a660a5b49cb8ef3c1f527f851ea76127416e7224979' + 'ae4e1d7a6e1b8c96b91b8490304ef3518a96b0ff37e1f440d92a903ded875f81d9433490ca8359118e8c8a4beb93b4c15abf27c805e3e7d2cce80dac9b96de78') + +export PBR_VERSION=$pkgver + +prepare() { + cd pbr-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd $srcdir + cp -a pbr-$pkgver{,-tauthon} + + find pbr-$pkgver-tauthon -name \*.py -exec sed -i '1s/python$/tauthon/' {} + +} + +build() { + cd "$srcdir"/pbr-$pkgver + python setup.py build + + cd "$srcdir"/pbr-$pkgver-tauthon + tauthon setup.py build +} + +package_python-pbr() { + pkgdesc="Python Build Reasonableness" + depends=('python-setuptools') + + cd pbr-$pkgver + python setup.py install -O1 --root="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-pbr() { + pkgdesc="Tauthon Build Reasonableness" + depends=('tauthon-setuptools') + + cd pbr-$pkgver-tauthon + tauthon setup.py install -O1 --root="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname + + mv "$pkgdir"/usr/bin/pbr{,-tauthon} +} diff --git a/python-pgpdump/PKGBUILD b/python-pgpdump/PKGBUILD new file mode 100644 index 0000000..c8f956e --- /dev/null +++ b/python-pgpdump/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +_pkgname=pgpdump +pkgbase=python-$_pkgname +pkgname=(python-$_pkgname tauthon-$_pkgname) +pkgver=1.5 +pkgrel=1 +arch=('any') +url='https://pypi.python.org/pypi/pgpdump' +license=('Expat') +makedepends=('python' 'tauthon') +options=(!emptydirs) +source=("https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/${_pkgname}/${_pkgname}-${pkgver}.tar.gz") +sha512sums=('b9fc7f78b920296301acaad2dbbafefff7b5f1658cbb65f5892a28d0b4d5110581bba984ad5cdabde3330025e3828387d7127c689cb86a7163c0b5ac0d0d2de0') + +prepare() { + cp -rf "$_pkgname-$pkgver" "$_pkgname-$pkgver-tauthon" +} + +package_python-pgpdump() { + pkgdesc="Python replacement for java.util.Properties." + depends=('python') + cd "${srcdir}/${_pkgname}-${pkgver}" + python setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 COPYRIGHT -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_tauthon-pgpdump() { + pkgdesc="Tauthon replacement for java.util.Properties." + depends=('tauthon') + cd "${srcdir}/${_pkgname}-${pkgver}-tauthon" + tauthon setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 COPYRIGHT -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-pillow/PKGBUILD b/python-pillow/PKGBUILD new file mode 100644 index 0000000..e164e0c --- /dev/null +++ b/python-pillow/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=python-pillow +pkgver=8.1.2 +_debver=$pkgver +_debrel=0.3 +_appname=Pillow +_py3basever=3.8 +pkgrel=2 +pkgdesc='Python Imaging Library (PIL) fork.' +arch=('i686' 'x86_64') +url="https://python-pillow.github.io/" +license=('Expat') +depends=('python' 'lcms2' 'libtiff' 'openjpeg2' 'libimagequant' 'libxcb') +optdepends=('freetype2: for the ImageFont module' + 'libraqm: for complex text scripts' + 'tk: for the ImageTK module') +makedepends=('python-setuptools' 'freetype2' 'libraqm' 'tk' 'quilt') +source=("https://files.pythonhosted.org/packages/source/P/$_appname/$_appname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/pillow/pillow_${_debver}+dfsg-${_debrel}+deb11u1.debian.tar.xz") +sha512sums=('7e1c14aed7446d53fb67a1f9de283aadc6be3b16e0b56361329af1d0e1b02e4110d1d1a4eb021aada90fbab2ee67d3e582e0c1829d90af39641c5562061c9270' + '17afc0010886fadb691c6870f16af063ce8c567f34f732edaeaa3acd9800ba409adfed5b6e456de001e6dfd68a52f6149d07668fcccfb49f9a03128ec6c9f155') + +prepare() { + cd "$srcdir/$_appname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$_appname-$pkgver" + python setup.py build +} + +package() { + cd "$srcdir/$_appname-$pkgver" + python setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + + install -dm755 "$pkgdir/usr/include/python$_py3basever/" + install -m644 -t "$pkgdir/usr/include/python$_py3basever/" src/libImaging/*.h +} diff --git a/python-ply/PKGBUILD b/python-ply/PKGBUILD new file mode 100644 index 0000000..25bf939 --- /dev/null +++ b/python-ply/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgbase=python-ply +pkgname=('python-ply' 'tauthon-ply') +pkgver=3.11 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="Implementation of lex and yacc parsing tools" +arch=('any') +url='https://www.dabeaz.com/ply/' +license=('Modified-BSD') +makedepends=('python-setuptools' 'tauthon-setuptools' 'quilt') +source=("ply-$pkgver.tar.gz::https://github.com/dabeaz/ply/archive/refs/tags/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/ply/ply_$_debver-$_debrel.debian.tar.xz") +sha512sums=('c36e4ea0eb5bb7cca8cc34aa62dd711be755e44f1336a0093d7c9c1ea4d5d8cae8316416a2109ba24bb2b71f7a971b0b34a7ea45c43d4c7c63c513156945fc17' + 'ac3ac2f9fa58f74716ee3871a7998e4b76ee4542dc09774193b95a7bcd13c2520556576dc8cc1d68b215fb22fc85ae064bd5812fa6dc7514565dcf97640722d1') + +prepare() { + cd ply-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + cd $srcdir + cp -a ply-$pkgver{,-tauthon} +} + +package_python-ply() { + depends=('python') + + cd "ply-$pkgver" + python setup.py install --root="$pkgdir" + + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_tauthon-ply() { + depends=('tauthon') + + cd "ply-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir" + + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-psutil/PKGBUILD b/python-psutil/PKGBUILD new file mode 100644 index 0000000..ea9c5a9 --- /dev/null +++ b/python-psutil/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgbase=python-psutil +pkgname=('python-psutil' 'tauthon-psutil') +pkgver=5.8.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://github.com/giampaolo/psutil' +license=('Modified-BSD') +makedepends=('python' 'python-setuptools' 'tauthon' 'tauthon-setuptools' 'quilt') +source=("https://github.com/giampaolo/psutil/archive/release-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-psutil/python-psutil_$_debver-$_debrel.debian.tar.xz") +sha512sums=('156dffb660fcfb23b420d0455296c6b1ab366844390706af40788d89335eb946bb2e66f792755071c09ca282ad0d5503bb62175344753c88ba35613756e22fa3' + '327e793281bc4c29962315d6af2e272a91f2960e7dba31abac5b8a15a7f8bad9bf9bf9bb4408d5f3bff3a2f1e325d7fddfe1c2ae851dd85a0cadad361b4e2c06') + +prepare() { + cd psutil-release-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd psutil-release-$pkgver + + python setup.py build --build-lib=build/python + + tauthon setup.py build --build-lib=build/tauthon + find build/tauthon -type f -exec \ + sed -i '1s,^#! \?/usr/bin/\(env \|\)python$,#!/usr/bin/tauthon,' {} \; +} + +package_python-psutil() { + pkgdesc='A cross-platform process and system utilities module for Python' + depends=('python') + + cd psutil-release-$pkgver + python setup.py build --build-lib=build/python \ + install --root="$pkgdir" --optimize=1 + install -D -m 644 LICENSE "$pkgdir/"usr/share/licenses/$pkgname/LICENSE +} + +package_tauthon-psutil() { + pkgdesc='A cross-platform process and system utilities module for Tauthon' + depends=('tauthon') + + cd psutil-release-$pkgver + tauthon setup.py build --build-lib=build/tauthon \ + install --root="$pkgdir" --optimize=1 + install -D -m 644 LICENSE "$pkgdir/"usr/share/licenses/$pkgname/LICENSE +} diff --git a/python-psycopg2/PKGBUILD b/python-psycopg2/PKGBUILD new file mode 100644 index 0000000..3bccb5d --- /dev/null +++ b/python-psycopg2/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgbase=python-psycopg2 +pkgname=('python-psycopg2' 'tauthon-psycopg2') +pkgver=2.8.6 +pkgrel=1 +arch=('i686' 'x86_64') +url="http://initd.org/psycopg/" +license=('LGPL-3') +makedepends=('tauthon' 'tauthon-setuptools' + 'python' 'python-setuptools' 'postgresql-libs') +source=(http://initd.org/psycopg/tarballs/PSYCOPG-2-8/psycopg2-$pkgver.tar.gz{,.asc}) +sha512sums=('1e1d5d8755c6d1a153d84210bf29902afafe853659d709e13abc6bc5772def13779d2394690af1c544384c9c607edc0fe5cf2763244fb346febf9a9e0032b45f' + 'SKIP') +validpgpkeys=('8AD609956CF1899418E19A856013BD3AFCF957DE') + +build(){ + cd "$srcdir/psycopg2-$pkgver" + sed -i 's/,PSYCOPG_DEBUG$//' setup.cfg + python setup.py build + tauthon setup.py build +} + +package_python-psycopg2() { + pkgdesc="A PostgreSQL database adapter for Python." + depends=('python' 'postgresql-libs') + + cd "$srcdir/psycopg2-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 doc/COPYING.LESSER -t "$pkgdir/usr/share/licenses/$pkgname/" +} + +package_tauthon-psycopg2() { + pkgdesc="A PostgreSQL database adapter for Tauthon." + depends=('tauthon' 'postgresql-libs') + + cd "$srcdir/psycopg2-$pkgver" + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 doc/COPYING.LESSER -t "$pkgdir/usr/share/licenses/$pkgname/" +} diff --git a/python-pyasn1/PKGBUILD b/python-pyasn1/PKGBUILD new file mode 100644 index 0000000..17a18ca --- /dev/null +++ b/python-pyasn1/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +_pkgoriginalname=pyasn1 +pkgbase=python-$_pkgoriginalname +pkgname=('python-pyasn1' 'tauthon-pyasn1') +pkgver=0.4.8 +_debver=$pkgver +_debrel=1 +pkgrel=2 +arch=('any') +url="https://github.com/etingof/pyasn1" +license=('Simplified-BSD') +makedepends=('python-setuptools' 'tauthon-setuptools' 'quilt') +replaces=('pyasn1') +provides=('pyasn1') +source=("https://pypi.io/packages/source/p/${_pkgoriginalname}/${_pkgoriginalname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/${_pkgoriginalname}/${_pkgoriginalname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e64e70b325c8067f87ace7c0673149e82fe564aa4b0fa146d29b43cb588ecd6e81b1b82803b8cfa7a17d3d0489b6d88b4af5afb3aa0052bf92e8a1769fe8f7b0' + 'cb84a0a2df1efc68473f5ee226a432b60f47021ed93b306f95dfb655c8db6c7f58ace16515502e4f7f6212fb51ec5e5c730b3ef1ea0b245067e8627b3caee29d') + +prepare() { + cd "$_pkgoriginalname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package_python-pyasn1() { + pkgdesc="ASN.1 library for Python" + depends=('python') + + cd "$_pkgoriginalname-$pkgver" + python setup.py install --root="$pkgdir" + install -Dm644 LICENSE.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_tauthon-pyasn1() { + pkgdesc="ASN.1 library for Tauthon" + depends=('tauthon') + + cd "$_pkgoriginalname-$pkgver" + tauthon setup.py install --root="$pkgdir" + install -Dm644 LICENSE.rst -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-pycairo/PKGBUILD b/python-pycairo/PKGBUILD new file mode 100644 index 0000000..e7ac750 --- /dev/null +++ b/python-pycairo/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +_pkgname=pycairo +pkgname=python-$_pkgname +pkgver=1.16.2 +_debver=$pkgver +_debrel=4 +pkgrel=3 +pkgdesc='Python bindings for the cairo graphics library' +arch=(i686 x86_64) +url='https://pycairo.readthedocs.io/en/latest/' +license=('LGPL-2.1') +depends=('cairo' 'python') +makedepends=('quilt') +provides=('python-cairo') +conflicts=('python-cairo') +replaces=('python-cairo') +source=(https://github.com/pygobject/$_pkgname/releases/download/v$pkgver/$_pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/p/$_pkgname/${_pkgname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('a5ac07f96f6607b1b40912b000c8b3b2114e75a6b8b314f1b68d2f5bb408dd7823c464d096c8cc26164219a961b448a4ea90b5a76683fb1807180f83cbc3b300' + '1831bf4afd8277265e42593675833ab8da507f702be7a2da06df92d503592287d489849fbb118b65789293b115ca0012433c001717266c02444c4e9b670f5842') + +prepare() { + cd $_pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $_pkgname-$pkgver + python setup.py build +} + +package() { + cd $_pkgname-$pkgver + python setup.py install --skip-build --root="${pkgdir}" --optimize='1' + install -Dm644 COPYING-LGPL-2.1 -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-pychm/PKGBUILD b/python-pychm/PKGBUILD new file mode 100644 index 0000000..1c6d82e --- /dev/null +++ b/python-pychm/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-pychm +pkgver=0.8.6 +pkgrel=2 +pkgdesc='Python bindings for chmlib' +arch=('i686' 'x86_64') +url="https://github.com/dottedmag/pychm" +license=('GPL-2') +depends=('chmlib' 'python') +makedepends=('python-setuptools') +source=($pkgname-$pkgver.tar.gz::https://github.com/dottedmag/pychm/archive/v$pkgver.tar.gz) +sha512sums=('cc1b254b6c58aba038171ad9db1eea3212094d7fb9386b22ada67381d702b388e6a1dde0317b5724587ee135d2695c546a7c2d65af7091dafeb394647597b0ae') + +build() { + cd "$srcdir/pychm-$pkgver" + python setup.py build +} + +package() { + cd "$srcdir/pychm-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/python-pycparser/PKGBUILD b/python-pycparser/PKGBUILD new file mode 100644 index 0000000..fddb2e8 --- /dev/null +++ b/python-pycparser/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgbase=python-pycparser +pkgname=('python-pycparser' 'tauthon-pycparser') +pkgver=2.20 +_debver=$pkgver +_debrel=3 +pkgrel=3 +url='https://github.com/eliben/pycparser' +makedepends=('python-ply' 'tauthon-ply' 'python-setuptools' 'tauthon-setuptools' 'quilt') +arch=('any') +license=('Modified-BSD') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/eliben/pycparser/archive/release_v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/pycparser/pycparser_$_debver-$_debrel.debian.tar.xz") +sha512sums=('d2dc48727750ec0a80d5e3b0c9fba390c3647416a3e18cad59429edb9f55d043c7695c52301b037c93af5d96ffc85fcba7cd54d376abdb89e973759c59fa189d' + '984a8f14a48303ac140e6ad81c54cd09ef3cf4b40542605021b0278fb02110b832188955efa15431ffec674c074a036042caab975fdee6f624247dbc6d1a2b56') + +prepare() { + cd pycparser-release_v$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd $srcdir + cp -a pycparser-release_v$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/pycparser-release_v$pkgver + python setup.py build + cd pycparser + python _build_tables.py + + cd "$srcdir"/pycparser-release_v$pkgver-tauthon + tauthon setup.py build + cd pycparser + tauthon _build_tables.py +} + +package_python-pycparser() { + pkgdesc='C parser and AST generator written in Python' + depends=('python-ply') + + cd pycparser-release_v$pkgver + + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} + +package_tauthon-pycparser() { + pkgdesc='C parser and AST generator written in Tauthon' + depends=('tauthon-ply') + + cd pycparser-release_v$pkgver-tauthon + + tauthon setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/python-pycryptodome/PKGBUILD b/python-pycryptodome/PKGBUILD new file mode 100644 index 0000000..bcf1c6d --- /dev/null +++ b/python-pycryptodome/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgbase=python-pycryptodome +pkgname=('python-pycryptodome' 'tauthon-pycryptodome') +pkgver=3.9.7 +_debver=$pkgver +_debrel=1 +pkgrel=2 +license=('Simplified-BSD') +arch=('i686' 'x86_64') +url='https://www.pycryptodome.org/' +makedepends=('gmp' 'python-setuptools' 'tauthon-setuptools' 'quilt') +source=("pycryptodome-${pkgver}.tar.gz::https://github.com/Legrandin/pycryptodome/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/pycryptodome/pycryptodome_$_debver+dfsg1-$_debrel.debian.tar.xz") +sha512sums=('3b0361d7afc772d9dec068b42d6a36732faeec55b7317cbe31fa86d65069b314c735fcfce03e68381d86f64dcb7abd751b0225c05f760631266063c1664fca4c' + '16d7aca683119131afeb7947d858fdac97c4ffec6fb943deda8c62907eb4afb4292c514bf51cbfdaa418b3525c6dc81945f328b297d8f0a530df9ba470208bf3') + +prepare() { + cd "$srcdir/pycryptodome-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cp -a "$srcdir/pycryptodome-$pkgver"{,-tauthon} +} + +build() { + cd "$srcdir/pycryptodome-$pkgver" + python setup.py build + + cd "$srcdir/pycryptodome-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-pycryptodome() { + pkgdesc="Collection of cryptographic algorithms and protocols, implemented for use from Python" + depends=('python' 'gmp') + conflicts=('python-crypto') + provides=('python-crypto') + replaces=('python-crypto') + + cd "pycryptodome-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.rst -t "$pkgdir/usr/share/licenses/$pkgname" + + rm -r "$pkgdir"/usr/lib/python3.*/site-packages/Crypto/SelfTest/ +} + +package_tauthon-pycryptodome() { + pkgdesc="Collection of cryptographic algorithms and protocols, implemented for use from Tauthon" + depends=('tauthon' 'gmp') + conflicts=('tauthon-crypto') + provides=('tauthon-crypto') + replaces=('tauthon-crypto') + + cd "pycryptodome-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.rst -t "$pkgdir/usr/share/licenses/$pkgname" + + rm -r "$pkgdir"/usr/lib/tauthon2.*/site-packages/Crypto/SelfTest/ +} diff --git a/python-pygments/PKGBUILD b/python-pygments/PKGBUILD new file mode 100644 index 0000000..e68a95b --- /dev/null +++ b/python-pygments/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgbase=python-pygments +pkgname=('python-pygments' 'tauthon-pygments') +pkgver=2.3.1 +_debver=$pkgver +_debrel=1 +pkgrel=3 +arch=('any') +url='https://pygments.org/' +license=('Simplified-BSD') +makedepends=('python-setuptools' 'tauthon-setuptools' 'quilt') +source=(https://pypi.org/packages/source/P/Pygments/Pygments-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/p/pygments/pygments_$_debver+dfsg-$_debrel+deb10u2.debian.tar.xz) +sha512sums=('2c36cb42f8dd62e04b7664b5e87f951a8428ccbb6dbe5b5b43d8c7e6923ada0ab55a231bb8e9ed79eb5a85344ed64d3acc8e7bc991ab1f49c58eb612b8002c1e' + '45c2582d0800cad3f51e7dc5776c9b2cb619c8d629e73ccb9d63a9bde108cf84f2d09d9b3cc4c41ed87fa71a9d2a9a212c6cc762a01a904477510821e2d379ca') + +prepare() { + cd "$srcdir/Pygments-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0003-docs-moved-to-python-pygments-doc-binary-package.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir/Pygments-$pkgver" + make -C doc +} + +package_python-pygments() { + pkgdesc="Python syntax highlighter" + depends=('python-setuptools') + replaces=('pygmentize') + conflicts=('pygmentize') + provides=('pygmentize') + + cd "$srcdir/Pygments-$pkgver" + + python setup.py install --root="$pkgdir" -O1 + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + + mkdir -p "$pkgdir/usr/share/doc" + cp -rT doc/_build/html "$pkgdir/usr/share/doc/$pkgname" + install -Dm644 doc/pygmentize.1 -t "$pkgdir/usr/share/man/man1" + install -Dm644 external/pygments.bashcomp "$pkgdir/usr/share/bash-completion/completions/pygmentize" +} + +package_tauthon-pygments() { + pkgdesc="Tauthon syntax highlighter" + depends=('tauthon-setuptools') + + cd "$srcdir/Pygments-$pkgver" + + tauthon setup.py install --root="$pkgdir" -O1 + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + + # pygmentize is included in python-pygments + rm "$pkgdir/usr/bin/pygmentize" + rmdir "$pkgdir/usr/bin" +} diff --git a/python-pygobject/PKGBUILD b/python-pygobject/PKGBUILD new file mode 100644 index 0000000..32f9b15 --- /dev/null +++ b/python-pygobject/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +_pkgname=pygobject +pkgname=python-$_pkgname +pkgver=3.38.0 +_pkgver=3.38 +pkgrel=3 +pkgdesc='Python bindings for GObject' +arch=(i686 x86_64) +url='https://wiki.gnome.org/Projects/PyGObject' +license=(LGPL-2.1) +depends=(gobject-introspection-runtime python) +makedepends=(gobject-introspection meson python-pycairo) +optdepends=('cairo: cairo bindings' + 'gobject-introspection: gir bindings') +provides=(python-gobject "pygobject-devel=$pkgver") +conflicts=(python-gobject pygobject-devel) +replaces=(python-gobject 'pygobject-devel<=3.36.1-1') +source=(https://download.gnome.org/sources/$_pkgname/$_pkgver/$_pkgname-$pkgver.tar.xz) +sha512sums=('d63313dea2c143cf8c08a4678f1aa8e5908d503ad29c596eeb9fa1070e1231de57cf934c33031f9c4920b85e391f3b4143b46491ffd16e04e8d48871cb05e5df') + +build() { + hyperbola-meson $_pkgname-$pkgver build + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + python -m compileall -d /usr/lib "$pkgdir/usr/lib" + python -O -m compileall -d /usr/lib "$pkgdir/usr/lib" + + install -Dm644 $_pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-pyinotify/PKGBUILD b/python-pyinotify/PKGBUILD new file mode 100644 index 0000000..29b7e11 --- /dev/null +++ b/python-pyinotify/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=python-pyinotify +pkgver=0.9.6 +pkgrel=3 +pkgdesc="Python module used for monitoring filesystems events with inotify." +arch=('any') +url='https://github.com/seb-m/pyinotify' +license=('Expat') +depends=('python') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/seb-m/pyinotify/archive/${pkgver}.tar.gz") +sha512sums=('144db691c1cdfd4e52b838b8ed839b8d50d84d26a91a59b7460c3170f58a1c96b3ce4f51e6273835835291781215a87b8f2d2d87d1abf012e4c14b2cd4b3f4cf') + +build() { + cd pyinotify-${pkgver} + python setup.py build +} + +package() { + cd pyinotify-${pkgver} + python setup.py install --root="${pkgdir}" -O1 + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/python-pylibacl/PKGBUILD b/python-pylibacl/PKGBUILD new file mode 100644 index 0000000..5601b8b --- /dev/null +++ b/python-pylibacl/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +_pkgbase=pylibacl +pkgname=python-$_pkgbase +pkgver=0.6.0 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="A python extension module that allows you to manipulate the POSIX.1e ACLs." +arch=('i686' 'x86_64') +url='https://pylibacl.k1024.org/' +license=('LGPL-2.1') +depends=('python') +makedepends=('python-setuptools' 'quilt') +source=("https://pylibacl.k1024.org/downloads/${_pkgbase}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-pylibacl/python-pylibacl_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('49e491589e06460fdd89307c754b2d99533ac857b187797b10a2a5aa1692c3401400d9d6e22cdb2369e5c34d91875133cf2d094226def837c603094745cbf904' + '84fa67ee405b18169925ae5e918e170dbf256c7a35b90ba9c69cdad3064106f1f2b2cf46d0ee1671745f81ffb2599425c5c50850a4aed5d1c92ca51708c7994c') + +prepare() { + cd "${srcdir}/${_pkgbase}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/python-pylibacl_hurd.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${_pkgbase}-${pkgver}" + python setup.py build +} + +package() { + cd "${srcdir}/${_pkgbase}-${pkgver}" + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/python-pynacl/PKGBUILD b/python-pynacl/PKGBUILD new file mode 100644 index 0000000..2b36173 --- /dev/null +++ b/python-pynacl/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +_pkgname=pynacl +pkgname=python-pynacl +pkgver=1.4.0 +pkgrel=3 +pkgdesc="Python binding to the Networking and Cryptography (NaCl) library" +url='https://pypi.python.org/pypi/PyNaCl' +arch=('i686' 'x86_64') +license=('Apache-2.0') +depends=('libsodium' 'python' 'python-six' 'python-cffi' 'python-wheel') +makedepends=('python-setuptools' 'python-pycparser') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/pyca/pynacl/archive/refs/tags/$pkgver.tar.gz") +sha512sums=('2a11a623452cea60199cdff83db6f5922698237267c11f055f2fd7768e0875a819dcc08c477113ad89461797ab36d66e0b9c7700eee335eb6b16af6b378b9e88') + +build() { + export SODIUM_INSTALL=system + + cd $_pkgname-$pkgver + python setup.py build +} + +package() { + export SODIUM_INSTALL=system + + cd $_pkgname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-pyopenssl/PKGBUILD b/python-pyopenssl/PKGBUILD new file mode 100644 index 0000000..9971607 --- /dev/null +++ b/python-pyopenssl/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgbase=python-pyopenssl +pkgname=('python-pyopenssl' 'tauthon-pyopenssl') +pkgver=20.0.1 +_debver=$pkgver +_debrel=1 +pkgrel=1 +arch=('any') +url='https://github.com/pyca/pyopenssl' +license=('Apache-2.0') +makedepends=('libressl' 'python-setuptools' 'tauthon-setuptools' 'python-cryptography' + 'tauthon-cryptography' 'python-six' 'tauthon-six' 'quilt') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/pyca/pyopenssl/archive/${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/p/pyopenssl/pyopenssl_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('cfaea0ed9d98675ad263c71b0d3b1572224baecd69261653b78a1801203168f61025bce35c94606217354e3c93aea5dc77fda4410e6559fed022fec00982aac8' + '8da3ff05e3cdb49b69db0ee68bdcbb130842024427c26bd5c905b9a04e783e6858a6fc57ba40992cd4fe2e17d35e5a53f3f3891c0d3a22d934b51f82ff9caccf') + +prepare() { + cd "$srcdir"/pyopenssl-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0002-pass-PYTHONPATH-when-building-HTML-doc.patch || true + + quilt push -av + fi + cd $srcdir + cp -a pyopenssl-$pkgver{,-tauthon} + export LC_CTYPE=en_US.UTF-8 +} + +build() { + cd "$srcdir"/pyopenssl-$pkgver + python setup.py build + + cd "$srcdir"/pyopenssl-$pkgver-tauthon + tauthon setup.py build +} + +package_python-pyopenssl() { + pkgdesc="Python wrapper module around the LibreSSL library" + depends=('libressl' 'python' 'python-six' 'python-cryptography') + + cd pyopenssl-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +package_tauthon-pyopenssl() { + pkgdesc="Tauthon wrapper module around the LibreSSL library" + depends=('libressl' 'tauthon' 'tauthon-six' 'tauthon-cryptography') + + cd pyopenssl-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-pyparsing/PKGBUILD b/python-pyparsing/PKGBUILD new file mode 100644 index 0000000..6e6c246 --- /dev/null +++ b/python-pyparsing/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=python-pyparsing +pkgname=('python-pyparsing' 'tauthon-pyparsing') +pkgver=2.4.7 +pkgrel=3 +arch=('any') +license=('Expat') +url='https://github.com/pyparsing/pyparsing/' +makedepends=('python' 'tauthon') +source=("https://github.com/pyparsing/pyparsing/archive/pyparsing_$pkgver.tar.gz" + "fix-build-without-setuptools.patch") +sha512sums=('c7a546729f86a2b5176e2482b566b9fd715b03e495aaef4d720b21307bb03f385dbc849247f8d266cb3d92be0a83c34ce4995b655ce85318355d5a0d42d6991e' + '12d9a4d00e5e748147723f593e30ad03eba3351d6c6e031d315e880b63c81b87e6e39de1247855a0a2721fc68325db66464635128028fe515da7128e8aca8ac8') + +prepare() { + mv "pyparsing-pyparsing_$pkgver" "pyparsing-$pkgver" + cd "$srcdir/pyparsing-$pkgver" + patch -Np1 -i ${srcdir}/fix-build-without-setuptools.patch + cp -a "$srcdir"/pyparsing-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir/pyparsing-$pkgver" + python setup.py build + + cd "$srcdir/pyparsing-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-pyparsing() { + pkgdesc='General parsing module for Python' + depends=('python') + + cd "$srcdir/pyparsing-$pkgver" + + python setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_tauthon-pyparsing() { + pkgdesc='General parsing module for Tauthon' + depends=('tauthon') + + cd "$srcdir/pyparsing-$pkgver-tauthon" + + tauthon setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/python-pyparsing/fix-build-without-setuptools.patch b/python-pyparsing/fix-build-without-setuptools.patch new file mode 100644 index 0000000..d338218 --- /dev/null +++ b/python-pyparsing/fix-build-without-setuptools.patch @@ -0,0 +1,18 @@ +--- a/setup.py 2020-03-30 02:51:27.000000000 +0200 ++++ b/setup.py 2024-11-10 04:28:38.030413040 +0100 +@@ -2,10 +2,14 @@ + + """Setup script for the pyparsing module distribution.""" + +-from setuptools import setup + from pyparsing import __version__ as pyparsing_version + from io import open + ++try: ++ from setuptools import setup ++except ImportError: ++ from distutils.core import setup ++ + # The directory containing this file + README_name = __file__.replace("setup.py", "README.rst") + diff --git a/python-pypubsub/PKGBUILD b/python-pypubsub/PKGBUILD new file mode 100644 index 0000000..c932804 --- /dev/null +++ b/python-pypubsub/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=python-pypubsub +_pkgname=${pkgname#python-} +pkgver=4.0.3 +pkgrel=1 +pkgdesc="Python publish-subcribe library" +arch=('any') +url='https://github.com/schollii/pypubsub' +license=('Simplified-BSD') +depends=('python') +makedepends=('python-setuptools') +source=("$pkgname-$pkgver.tar.gz::$url/archive/v$pkgver.tar.gz") +sha512sums=('cf9aca44e91a5d0e5ecf6739deabf2980f9464395c89e3c5335c5248e47c570701e0534bb660c5005325a994d9f8e7f261f36bc8bea74cfc7eb760b73c572652') + +build() { + cd $_pkgname-$pkgver + + python setup.py build +} + +package() { + cd $_pkgname-$pkgver + + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + + install -Dm 644 src/pubsub/LICENSE_BSD_Simple.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-pyqt-sip/PKGBUILD b/python-pyqt-sip/PKGBUILD new file mode 100644 index 0000000..128afb9 --- /dev/null +++ b/python-pyqt-sip/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=python-pyqt-sip +_pkgname=PyQt5_sip +pkgver=12.8.1 +_debname=pyqt5-sip +_debver=$pkgver +_debrel=1 +pkgrel=2 +arch=('i686' 'x86_64') +pkgdesc='The sip module support for PyQt' +url='https://riverbankcomputing.com/software/pyqt/intro' +license=('LGPL-3') +depends=('python') +makedepends=('python-setuptools') +source=(https://pypi.python.org/packages/source/${_pkgname::1}/${_pkgname/_/-}/$_pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/${pkgname::1}/$_debname/${_debname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('42c739d602dbf7d18b4381e3dd61c72165fc49e7e8723430f452029b10a27cf04f2c2ed482fed055432bffda80f7746c6aa61ec1a0ef015661dc5575f96b3cda' + 'ecc39a48930503c73b6d280e786a73af86645d8418da78e6e7395139e723cab69296a3c19ab842136d4fe79076c20bf4468598fb6cd9169dcde7b52c6e159957') + +prepare() { + cd $_pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + mv "$srcdir"/debian . + fi +} + +build() { + cd $_pkgname-$pkgver + python setup.py build +} + +package() { + cd $_pkgname-$pkgver + python setup.py install --root="$pkgdir" + install -Dm644 debian/copyright -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/python-pyqt/PKGBUILD b/python-pyqt/PKGBUILD new file mode 100644 index 0000000..509f34a --- /dev/null +++ b/python-pyqt/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgname=python-pyqt +_pkgname=PyQt5 +pkgdesc="A set of Python bindings for the Qt5 toolkit" +pkgver=5.15.2 +pkgrel=6 +arch=('i686' 'x86_64') +url='https://riverbankcomputing.com/software/pyqt/intro' +license=('GPL-3') +depends=('python-pyqt-sip' 'qt-base') +optdepends=(#'python-opengl: enable OpenGL 3D graphics in PyQt applications' + 'qt-declarative: QtQml, qmlplugin' + 'qt-multimedia: QtMultimedia, QtMultimediaWidgets' + 'qt-sensors: QtSensors' + #'qt-serialport: QtSerialPort' + #'qt-speech: QtTextToSpeech' + 'qt-svg: QtSvg' + 'qt-tools: QtHelp, QtDesigner' + 'qt-webchannel: QtWebChannel' + 'qt-webkit: QtWebKit, QtWebKitWidgets' + 'qt-websockets: QtWebSockets' + 'qt-x11extras: QtX11Extras' + 'qt-xmlpatterns: QtXmlPatterns') +makedepends=('sip' 'pyqt-builder' 'python-setuptools' + #'qt-declarative' # already as depends + 'qt-multimedia' + #'qt-sensors' # already as depends + 'qt-svg' + 'qt-tools' + #'qt-webchannel' # already as depends + 'qt-webkit' + 'qt-websockets' + 'qt-x11extras' + 'qt-xmlpatterns') +provides=(qt-python-bindings) +conflicts=('pyqt-common') +source=("https://pypi.python.org/packages/source/${_pkgname::1}/$_pkgname/$_pkgname-$pkgver.tar.gz") +sha512sums=('6d48d2ed907b436131d46b0513d82e1069c76e873d395e4a6c0832ae3a20621b92d3abece046c5fcd14cb818d50ffb369153fca1ce9341f0db1b8c479b94e621') + +prepare() { + mkdir build +} + +build() { + cd build + msg "configure.py is running, but doesn't print anything, please see in top (or htop) command" + python -d -v $srcdir/$_pkgname-$pkgver/configure.py \ + --confirm-license \ + --debug \ + --qsci-api \ + --qsci-api-destdir /usr/share/qt/qsci/api/python \ + --verbose + make +} + +package() { + make INSTALL_ROOT="$pkgdir" -C build install -j1 + + # Remove unused py2 version of uic modules: + rm -r "$pkgdir"/usr/lib/python*/site-packages/$_pkgname/uic/port_v2 + + # Compile Python bytecode + python -m compileall -d / "$pkgdir"/usr/lib + python -O -m compileall -d / "$pkgdir"/usr/lib + + # License + install -Dm644 $_pkgname-$pkgver/LICENSE -t ${pkgdir}/usr/share/licenses/$pkgname +} diff --git a/python-pyrfc3339/PKGBUILD b/python-pyrfc3339/PKGBUILD new file mode 100644 index 0000000..07c48c2 --- /dev/null +++ b/python-pyrfc3339/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgbase=python-pyrfc3339 +pkgname=('python-pyrfc3339' 'tauthon-pyrfc3339') +pkgver=1.1 +pkgrel=3 +arch=('any') +license=('Expat') +url='https://pypi.python.org/pypi/pyRFC3339' +makedepends=('python-setuptools' 'tauthon-setuptools' 'python-pytz' 'tauthon-pytz') +source=("https://pypi.python.org/packages/source/p/pyRFC3339/pyRFC3339-${pkgver}.tar.gz") +sha512sums=('958b7761fab590aa42bb57a955c5d834441f717796a452b60df21663099dcf2fc046afe60f8157fd0f1edfd95c5e9c9c5349ab10ca4078d210fc63d848496a2f') + +prepare() { + cp -a pyRFC3339-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir/pyRFC3339-$pkgver" + python setup.py build + cd "$srcdir/pyRFC3339-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-pyrfc3339() { + pkgdesc="Parses and generates RFC 3339-compliant timestamps using Python datetime.datetime objects." + depends=('python' 'python-pytz') + cd "$srcdir/pyRFC3339-$pkgver" + python setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +package_tauthon-pyrfc3339() { + pkgdesc="Parses and generates RFC 3339-compliant timestamps using Tauthon datetime.datetime objects." + depends=('tauthon' 'tauthon-pytz') + cd "$srcdir/pyRFC3339-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-pysmi/PKGBUILD b/python-pysmi/PKGBUILD new file mode 100644 index 0000000..eccdafd --- /dev/null +++ b/python-pysmi/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=python-pysmi +_pyname="${pkgname/*-/}" +pkgver=0.3.2 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc='SNMP/SMI MIB parsing and conversion library designed to turn ASN.1 MIBs into various formats' +url='http://snmplabs.com/pysmi/' +arch=('any') +license=('Simplified-BSD') +makedepends=('python' 'python-sphinx' 'python-ply' 'quilt') +source=("${_pyname}-${pkgver}.tar.gz::https://github.com/etingof/pysmi/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/pysmi/pysmi_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('d8ee1e08a3fdd808559d11499b323783637622b3ddd4cf3351d2e6ca2ed51a1cfbd3c2ffb6f71555f244ea2da8521ea81e3daba4d97658c1e6e7322ef1a46228' + '3c1def6347db4e24994d04d97c3522db695f75a48defdecc69cad8122044096f94b1fcae98ccf0634ce7214cf721217259d532ded8662be8334b83e51951145e') + +prepare() { + cd ${_pyname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${_pyname}-${pkgver} + python setup.py build + make -C docs text man +} + +package() { + depends=('python' 'python-ply') + cd ${_pyname}-${pkgver} + python setup.py install --prefix=/usr --root="${pkgdir}" --optimize=1 --skip-build + + install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + cp -r docs/build/text "${pkgdir}/usr/share/doc/${pkgname}" + cp -r examples -t "${pkgdir}/usr/share/doc/${pkgname}" + + install -Dm 644 docs/build/man/${_pyname}.1 "${pkgdir}/usr/share/man/man1/${_pyname}.1" + install -Dm 644 docs/build/man/${_pyname}.1 "${pkgdir}/usr/share/man/man1/${pkgname}.1" + install -Dm 644 LICENSE.rst -t "${pkgdir}/usr/share/licenses/${pkgname}" + + mv "${pkgdir}/usr/bin/mibdump"{.py,} + mv "${pkgdir}/usr/bin/mibcopy"{.py,} +} diff --git a/python-pysnmp/PKGBUILD b/python-pysnmp/PKGBUILD new file mode 100644 index 0000000..10f9fd9 --- /dev/null +++ b/python-pysnmp/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=python-pysnmp +_pyname=pysnmp +pkgver=4.4.12 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Free and libre implementation of v1/v2c/v3 SNMP engine" +url='https://github.com/etingof/pysnmp' +arch=('any') +license=('Simplified-BSD') +depends=('python' 'python-pysmi' 'python-pyasn1') +makedepends=('python-setuptools' 'python-sphinx' 'quilt') +options=('!makeflags') +source=("https://github.com/etingof/pysnmp/archive/v${pkgver}/${_pyname}-v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-pysnmp4/python-pysnmp4_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('48481e219098369b09cc2ffea6cd51974b64bed0131671cc7a2213ee5eb432c62e0ff5c3700b6be515bd3e90951927e41845c98ae7a339d551f0f4ec19c5e3b1' + '6b0ca84523b016cd76c6d8ca248db02e40f7d82d178919d8e55cc5a80439e6b0cae09bc80ca9868f6682ec44bee903c0479fc4bcd735f3e6424fbedf02213840') + +prepare() { + cd ${_pyname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${_pyname}-${pkgver} + export PYTHONPATH=. + python setup.py build + make -C docs text man +} + +package() { + cd ${_pyname}-${pkgver} + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + + install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + cp -r docs/build/text "${pkgdir}/usr/share/doc/${pkgname}" + cp -r examples -t "${pkgdir}/usr/share/doc/${pkgname}" + + install -Dm 644 docs/build/man/${_pyname}.1 "${pkgdir}/usr/share/man/man1/${_pyname}.1" + install -Dm 644 docs/build/man/${_pyname}.1 "${pkgdir}/usr/share/man/man1/${pkgname}.1" + install -Dm 644 LICENSE.rst -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-pysocks/PKGBUILD b/python-pysocks/PKGBUILD new file mode 100644 index 0000000..03281d5 --- /dev/null +++ b/python-pysocks/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgbase=python-pysocks +pkgname=(python-pysocks tauthon-pysocks) +pkgver=1.7.0 +pkgrel=2 +arch=('any') +license=('Modified-BSD') +url='https://github.com/Anorov/PySocks' +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/Anorov/PySocks/archive/$pkgver.tar.gz") +sha512sums=('280c9d1f147cd665a9989dc143e0b1f43bbc0575dc0b6b92472bc4b8cf2315f37dba74c5e77ff0b3c3ede49ee5c1e53d6a330bcb3c8d822023378c1cfb8cac0f') + +prepare() { + cp -a PySocks-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/PySocks-$pkgver + python setup.py build + + cd "$srcdir"/PySocks-$pkgver-tauthon + tauthon setup.py build +} + +package_python-pysocks() { + pkgdesc="SOCKS4, SOCKS5 or HTTP proxy (Anorov fork PySocks replaces socksipy) in Python" + depends=('python') + + cd PySocks-$pkgver + python setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} + +package_tauthon-pysocks() { + pkgdesc="SOCKS4, SOCKS5 or HTTP proxy (Anorov fork PySocks replaces socksipy) in Tauthon" + depends=('tauthon') + + cd PySocks-$pkgver-tauthon + tauthon setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/python-pysqlite3/PKGBUILD b/python-pysqlite3/PKGBUILD new file mode 100644 index 0000000..efd4464 --- /dev/null +++ b/python-pysqlite3/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-pysqlite3 +_pkgname=pysqlite3 +pkgver=0.5.4 +pkgrel=1 +pkgdesc="SQLite3 DB-API 2.0 driver for Python" +arch=('i686' 'x86_64') +url='https://github.com/coleifer/pysqlite3' +license=('zlib') +depends=('python' 'sqlite') +makedepends=('python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/coleifer/pysqlite3/archive/refs/tags/0.5.4.tar.gz") +sha512sums=('59a80166b31ca6fb67b4a432fbe12e8b8edbbc54de151165ed26df81e29cf271feddc1ff1ec841579a54c7816ead08ce18aab97f451b3e6e6e29aa8035811215') + +build() { + cd "$_pkgname-$pkgver" + python setup.py build +} + +package() { + cd "$_pkgname-$pkgver" + python setup.py install --root="$pkgdir/" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname/" +} diff --git a/python-pytz/PKGBUILD b/python-pytz/PKGBUILD new file mode 100644 index 0000000..7802994 --- /dev/null +++ b/python-pytz/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=('python-pytz' 'tauthon-pytz') +pkgver=2020.1 +pkgrel=2 +arch=('any') +url='https://pypi.python.org/pypi/pytz' +license=('Expat') +makedepends=('python' 'tauthon') +source=("https://pypi.io/packages/source/p/pytz/pytz-${pkgver}.tar.gz") +sha512sums=('4f652ab400bac0bd83ed305be7540094e674029a0cbde7da280adfd911b8c0a44023799b7c61971a5a61a1d6e3992c5b621e5e95bbfe962f310d5f26d4fda3ce') + +prepare(){ + cp -rf pytz-$pkgver pytz-$pkgver-tauthon +} + +package_python-pytz(){ + pkgdesc="Cross platform time zone library for Python" + depends=('python') + + cd pytz-$pkgver + python setup.py install --root=$pkgdir/ + install -Dm644 LICENSE.txt $pkgdir/usr/share/licenses/$pkgname/LICENSE.txt +} + +package_tauthon-pytz(){ + pkgdesc="Cross platform time zone library for Tauthon" + depends=('tauthon') + + cd pytz-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir/" + install -Dm644 LICENSE.txt $pkgdir/usr/share/licenses/$pkgname/LICENSE.txt +} diff --git a/python-pyxattr/PKGBUILD b/python-pyxattr/PKGBUILD new file mode 100644 index 0000000..7ef44ea --- /dev/null +++ b/python-pyxattr/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-pyxattr +_pkgname=pyxattr +pkgver=0.7.2 +pkgrel=2 +pkgdesc="A Python extension module that allows you to manipulate the extended attributes." +arch=('i686' 'x86_64') +url='https://pyxattr.k1024.org/' +license=('LGPL-2.1') +depends=('python') +makedepends=('python' 'python-setuptools') +source=("https://pyxattr.k1024.org/downloads/$_pkgname-$pkgver.tar.gz") +sha512sums=('fb9b36d5d2fb9ab674daf40d6f5c7dbe50d847dcb6d9955d270ef3aed2d8e3540f8feebd934009f47d63f3c55882846a20f7ed733b0d0c004e7a1984e7106206') + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + python setup.py build +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + python setup.py install --root="${pkgdir}" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/python-pyxdg/PKGBUILD b/python-pyxdg/PKGBUILD new file mode 100644 index 0000000..739aab0 --- /dev/null +++ b/python-pyxdg/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +_pkgbase=pyxdg +pkgbase=python-pyxdg +pkgname=('tauthon-pyxdg' 'python-pyxdg') +pkgver=0.27 +pkgrel=3 +pkgdesc="Library to access freedesktop.org standards" +arch=('any') +url='http://freedesktop.org/Software/pyxdg' +license=('LGPL-2') +makedepends=('tauthon-setuptools' 'python-setuptools') +source=("https://files.pythonhosted.org/packages/source/${_pkgbase::1}/${_pkgbase}/${_pkgbase}-${pkgver}.tar.gz") +sha512sums=('acb24153a4e3e0d8333f1c965c024b15d44f623497b561fc0e9be60d4411441af1dc61f11dcfb22587a510451237a341440bf7ff77a6ab6446dceb83b3c380e2') + +package_tauthon-pyxdg() { + pkgdesc+=" (Tauthon)" + depends=('tauthon') + + cd "${srcdir}/${_pkgbase}-${pkgver}" + tauthon setup.py install --prefix=/usr --root="${pkgdir}" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_python-pyxdg() { + pkgdesc+=" (Python)" + depends=('python') + + cd "${srcdir}/${_pkgbase}-${pkgver}" + python setup.py install --prefix=/usr --root="${pkgdir}" --skip-build --optimize=1 + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-rdflib/PKGBUILD b/python-rdflib/PKGBUILD new file mode 100644 index 0000000..3998a81 --- /dev/null +++ b/python-rdflib/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=python-rdflib +pkgver=5.0.0 +_debver=5.0.0 +_debrel=1.1 +pkgrel=1 +pkgdesc="A Python library for working with RDF, a simple yet powerful language for representing information" +arch=('any') +url="https://github.com/RDFLib/rdflib" +license=('Modified-BSD') +depends=('python-isodate' 'python-pyparsing') +makedepends=('python-setuptools' 'quilt') +source=(rdflib-$pkgver.tar.gz::https://github.com/RDFLib/rdflib/tarball/$pkgver + https://deb.debian.org/debian/pool/main/r/rdflib/rdflib_$_debver-$_debrel.debian.tar.xz) +sha512sums=('d879c9312a5e6a69ef2edf7931f5e20f6d5c59ce6feb2397e5aeb09843f3568c284f9175b24ac4d513b720dcea82076776d33bfc4492f5d82a17c644586e7b48' + 'e8831140261b6f66ee0ceb23cb60b6b9e731835d15338562ce6fbf58de36e21afb43aa563933da9d2e88a11be7b43290b309a557f8073216ccc47248512478a9') + +prepare() { + cd RDFLib-rdflib-* + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd RDFLib-rdflib-* + python setup.py build +} + +package() { + cd RDFLib-rdflib-* + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/python-recommonmark/PKGBUILD b/python-recommonmark/PKGBUILD new file mode 100644 index 0000000..c69a1c0 --- /dev/null +++ b/python-recommonmark/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=python-recommonmark +pkgver=0.6.0 +_debver=0.6.0+ds +_debrel=1 +pkgrel=0 +pkgdesc='Markdown parser for docutils' +url='https://recommonmark.readthedocs.io/' +arch=('any') +license=('Expat') +depends=('python-docutils' 'python-commonmark' 'python-setuptools' 'python-sphinx') +makedepends=('quilt') +#checkdepends=('python-pytest') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/readthedocs/recommonmark/archive/${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/r/recommonmark/recommonmark_$_debver-$_debrel.debian.tar.xz + recommonmark-disable-math-on-builds.patch + recommonmark-sphinx-2.patch) +sha512sums=('44005b3fd0052cd8d4fce8a64f9d66a1ac75dc3041a28c115e922254956b2143296cbfbc0a2396b9f95691145645c4242e3be68e695b2c62ae37964014511679' + '59fd43653e2ccacac53b36571a6ff1e1b68862e0d024b543038ac39cfd0273c33ef501492efc849d985085a153f07256f32fddb736408a9e701c7fdbf3a5d2a0' + '66ef07ac21643b913c8ee551c7c71753fcb6442712e4fb11b84ea5f34265715471759b2c5a1badc1e299ca6aa831713b12284144801616349b2db61738607e8a' + '317b7139819bb183184e0a5abf4f74b955746779c841cf3b9e7e8032cc23ac3ce5f54a1ebd2d4c012038041c58ab849a09271d806f9fc3c5c0dadd1ad92eddae') + +prepare() { + cd recommonmark-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -p1 -i "${srcdir}/recommonmark-sphinx-2.patch" # Fix tests with Sphinx 2 + fi + patch -p1 -i "${srcdir}/recommonmark-disable-math-on-builds.patch" +} + +build() { + cd recommonmark-${pkgver} + python setup.py build + make -j1 -C docs text man SPHINXBUILD=sphinx-build +} + +#check() { +# cd recommonmark-${pkgver} +# py.test +#} + +package() { + cd recommonmark-${pkgver} + python setup.py install --root="${pkgdir}" --skip-build -O1 + install -Dm 644 license.md -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm 644 README.md CHANGELOG.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 docs/_build/text/*.txt -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 docs/_build/man/recommonmark.1 "${pkgdir}/usr/share/man/man1/recommonmark.1" +} + +# vim: ts=2 sw=2 et: diff --git a/python-recommonmark/recommonmark-disable-math-on-builds.patch b/python-recommonmark/recommonmark-disable-math-on-builds.patch new file mode 100644 index 0000000..396c677 --- /dev/null +++ b/python-recommonmark/recommonmark-disable-math-on-builds.patch @@ -0,0 +1,59 @@ +From 5a14811519a219b88c96b5b9bc3103ce5d758dc4 Mon Sep 17 00:00:00 2001 +From: Eric Holscher +Date: Fri, 9 Aug 2019 11:37:09 -0700 +Subject: [PATCH] Disable math on builds to fix doc building + +--- + docs/auto_structify.md | 6 ++++++ + docs/conf.py | 2 ++ + 2 files changed, 8 insertions(+) + +diff --git a/docs/auto_structify.md b/docs/auto_structify.md +index 52eba2e..c4d58e5 100644 +--- a/docs/auto_structify.md ++++ b/docs/auto_structify.md +@@ -134,6 +134,8 @@ def function(): + ### Math Formula + You can normally write latex math formula with `math` codeblock. See also [Inline Math](#inline-math). + ++**Warning**: Math is currently broken on some Sphinx builds ++ + Example + + ```` +@@ -149,6 +151,7 @@ E = m c^2 + ``` + + ### Embed reStructuredText ++ + Recommonmark also allows embedding reStructuredText syntax in the codeblocks. + There are two styles for embedding reStructuredText. The first is enabled by `eval_rst` codeblock. The content of codeblock will be parsed as reStructuredText and insert into the document. This can be used to quickly introduce some of reStructuredText command that not yet available in markdown. For example, + +@@ -243,11 +246,14 @@ The `
    ` line clears the sidebar for the next tit + + Inline Math + ----------- ++ + Besides the [Math Formula](#math-formula), you can also write latex math in inline codeblock text. You can do so by inserting `$` + in the beginning and end of inline codeblock. + + Example + ++**Warning**: Math is currently broken on some Sphinx builds ++ + ``` + This formula `$ y=\sum_{i=1}^n g(x_i) $` + ``` +diff --git a/docs/conf.py b/docs/conf.py +index 5c2f8c1..a67cc99 100644 +--- a/docs/conf.py ++++ b/docs/conf.py +@@ -295,6 +295,8 @@ def setup(app): + app.add_config_value('recommonmark_config', { + #'url_resolver': lambda url: github_doc_root + url, + 'auto_toc_tree_section': 'Contents', ++ 'enable_math': False, ++ 'enable_inline_math': False, + 'enable_eval_rst': True, + 'enable_auto_doc_ref': True, + }, True) diff --git a/python-recommonmark/recommonmark-sphinx-2.patch b/python-recommonmark/recommonmark-sphinx-2.patch new file mode 100644 index 0000000..06d5d86 --- /dev/null +++ b/python-recommonmark/recommonmark-sphinx-2.patch @@ -0,0 +1,49 @@ +diff --git a/tests/test_sphinx.py b/tests/test_sphinx.py +index 06078b1..201f27b 100644 +--- a/tests/test_sphinx.py ++++ b/tests/test_sphinx.py +@@ -142,17 +142,17 @@ class GenericTests(SphinxIntegrationTests): + output = self.read_file('index.html') + self.assertIn( + ('
      \n' +- '
    • Item A
    • \n' +- '
    • Item B
    • \n' +- '
    • Item C
    • \n' ++ '
    • Item A

    • \n' ++ '
    • Item B

    • \n' ++ '
    • Item C

    • \n' + '
    '), + output + ) + self.assertIn( + ('
      \n' +- '
    1. Item 1
    2. \n' +- '
    3. Item 2
    4. \n' +- '
    5. Item 3
    6. \n' ++ '
    7. Item 1

    8. \n' ++ '
    9. Item 2

    10. \n' ++ '
    11. Item 3

    12. \n' + '
    '), + output + ) +@@ -207,16 +207,16 @@ class CustomExtensionTests(SphinxIntegrationTests): + def test_integration(self): + output = self.read_file('index.html') + self.assertIn('abc', output) +- self.assertIn('', output) ++ self.assertIn('', output) ++ self.assertIn('', output) + self.assertIn('
    data

    abc

    data

    ', output) + + self.assertIn( + ('
    \n' + '

    Contents

    \n' + '
      \n' +- '
    • Header'), + output + ) diff --git a/python-regex/PKGBUILD b/python-regex/PKGBUILD new file mode 100644 index 0000000..a8b9908 --- /dev/null +++ b/python-regex/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. +# Submitter (Arch): Xiao-Long Chen + +_pkgbase=regex +pkgname=python-regex +pkgver=2021.7.6 +pkgrel=2 +pkgdesc="Alternative python regular expression module." +arch=('i686' 'x86_64') +url='https://bitbucket.org/mrabarnett/mrab-regex' +license=('Python' 'Apache-2.0') +depends=('python') +makedepends=('python-setuptools') +options=(!emptydirs) +source=("https://files.pythonhosted.org/packages/source/r/${_pkgbase}/${_pkgbase}-${pkgver}.tar.gz") +sha512sums=('0849caaafc669b6dc322dcd4d48962cefbe955c19f9ee3d657b7b8389f77ab2b2e27ec341745dff01a60dd3930904d69015a334ff748de10be2d0b7c421b0967') + +build() { + cd "${_pkgbase}-${pkgver}" + python setup.py build +} + +package() { + cd "${_pkgbase}-${pkgver}" + python setup.py install --root="${pkgdir}/" --optimize=1 --skip-build + install -Dm644 LICENSE.txt -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/python-reportlab/PKGBUILD b/python-reportlab/PKGBUILD new file mode 100644 index 0000000..7695326 --- /dev/null +++ b/python-reportlab/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +_origname=reportlab +pkgname=python-reportlab +pkgver=3.5.59 +_debver=3.5.59 +_debrel=2 +pkgrel=1 +pkgdesc='A proven industry-strength PDF generating solution' +arch=('i686' 'x86_64') +url='https://www.reportlab.com/' +depends=('freetype2' 'python' 'python-setuptools' 'python-pillow') +makedepends=('quilt') +license=('Modified-BSD') +source=(https://files.pythonhosted.org/packages/source/${_origname::1}/${_origname}/${_origname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/p/python-reportlab/python-reportlab_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('c862acb10f4eaed877321afadb52615132dcda0976e648e1767c32cd0398fc2763048f274d31da6088cb824311e8a28fee048cd6e98411e70583cfb36d0050ca' + 'd54534ec0f53bb4b556286a68b86dfaa103028a1029bbb21cc0a5b3845daa30bb5100f463fb3a7b1f65d9c756b7206affb44abc9526f1b0dc627393cc9bd8b47') + +prepare() { + cd ${_origname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${_origname}-${pkgver} + python setup.py build +} + +package() { + cd ${_origname}-${pkgver} + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-requests-toolbelt/PKGBUILD b/python-requests-toolbelt/PKGBUILD new file mode 100644 index 0000000..8847bfd --- /dev/null +++ b/python-requests-toolbelt/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=python-requests-toolbelt +pkgver=0.9.1 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="A toolbelt of useful classes and functions to be used with python-requests." +arch=('any') +url="https://github.com/requests/toolbelt" +license=('Apache-2.0') +depends=('python-requests') +makedepends=('python-setuptools' 'python-requests' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/requests/toolbelt/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-requests-toolbelt/python-requests-toolbelt_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('12667056c225ce0bc88a5959660103feed23810890abd3890ef15581aa64c09c0552c3974473e1742cbe6200bd37d6475ad34ec051e83d4fbf0a33f320dbc0cc' + 'b240ba6cb092a47e9252a9e9b86ac94240f1519c8cbf1294b42f8370f8229766251d028ed18417c535295a8cf4da2fcd0f62ae16411f691c70b1252e0dc7ea45') + +prepare() { + cd toolbelt-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "${srcdir}"/debian . + + quilt push -av + fi + # Disable some failing tests + sed -e 's:test_stream_response:_&:' \ + -i tests/test_downloadutils.py + sed -e 's:test_no_content_length_header:_&:' \ + -e 's:test_read_file:_&:' \ + -e 's:test_reads_file_from_url_wrapper:_&:' \ + -i tests/test_multipart_encoder.py + sed -e 's:test_auth_generator_is_called:_&:' \ + -e 's:test_initializer_is_called:_&:' \ + -e 's:test_number_of_processes_can_be_arbitrary:_&:' \ + -e 's:test_session_is_called:_&:' \ + -i tests/threaded/test_pool.py +} + +build() { + cd toolbelt-$pkgver + python setup.py build +} + +package() { + cd toolbelt-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -D -m644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-requests/PKGBUILD b/python-requests/PKGBUILD new file mode 100644 index 0000000..ea97287 --- /dev/null +++ b/python-requests/PKGBUILD @@ -0,0 +1,76 @@ +# Maintainer: Jesus E. + +pkgbase=python-requests +pkgname=('python-requests' 'tauthon-requests') +pkgver=2.23.0 +_debver=$pkgver +_debrel=2 +pkgrel=3 +arch=('any') +url='https://requests.readthedocs.io/' +license=('Apache-2.0') +makedepends=('python-setuptools' 'tauthon-setuptools' 'python-chardet' 'tauthon-chardet' + 'python-urllib3' 'tauthon-urllib3' 'python-idna' 'tauthon-idna' 'quilt') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/psf/requests/archive/v$pkgver.tar.gz" + "https://repo.hyperbola.info:50000/sources/${pkgbase}/requests_${_debver}+dfsg-${_debrel}.debian.tar.xz"{,.sig} + "certs.patch" + "requests-pytest-5.patch") +sha512sums=('a8e670d928fce3531629a6d73ee6b47882f3eba47684841bfce44376781b2b9c5c97186e1750ee582b0c11fa67c983f340f95eb2a4f19042f4cbc77ae090a69c' + '16f0f0ed89fa60f1307f51e949e248b9a6ea9c6f0b92e1599f53dfab4e4d9af5712641c1d5bcc18d4ad453cda9d98cf14d62fa62c1a0d2af6fa0401d7a6072e8' + 'SKIP' + '424a3bb01b23409284f6c9cd2bc22d92df31b85cfd96e1d1b16b5d68adeca670dfed4fff7977d8b10980102b0f780eacc465431021fcd661f3a17168a02a39a3' + '08dbc23289d8d8afa3e122f63a7eb6c27e9272aa2f8a1bb29896f27f0c5d51d0b6feed57c8d93bced321a0be39d2852194ff8db7ff7af58ab09e91be0ee4e556') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "$srcdir"/requests-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -p1 -i ../requests-pytest-5.patch + sed -e '/certifi/d' \ + -e "s/,<.*'/'/" \ + -i setup.py + patch -p1 -i "$srcdir"/certs.patch + + cd "$srcdir" + cp -a requests-$pkgver{,-tauthon} + find requests-$pkgver-tauthon -name \*.py -exec sed -r 's|^#!(.*)python$|#!\1tauthon|' -i {} + +} + +build() { + cd "$srcdir"/requests-$pkgver + python setup.py build + + cd "$srcdir"/requests-$pkgver-tauthon + tauthon setup.py build +} + +package_python-requests() { + pkgdesc="Python HTTP for Humans" + depends=('python-urllib3' 'python-chardet' 'python-idna') + optdepends=('python-pysocks: SOCKS proxy support') + + cd "$srcdir"/requests-$pkgver + python setup.py install --skip-build -O1 --root="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-requests() { + pkgdesc="Tauthon HTTP for Humans" + depends=('tauthon-urllib3' 'tauthon-chardet' 'tauthon-idna') + optdepends=('tauthon-ndg-httpsclient: HTTPS requests with SNI support' + 'tauthon-grequests: asynchronous requests with gevent' + 'tauthon-pysocks: SOCKS proxy support') + + cd "$srcdir"/requests-$pkgver-tauthon + tauthon setup.py install --skip-build -O1 --root="$pkgdir" + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-requests/certs.patch b/python-requests/certs.patch new file mode 100644 index 0000000..47a32f3 --- /dev/null +++ b/python-requests/certs.patch @@ -0,0 +1,14 @@ +diff --git a/requests/certs.py b/requests/certs.py +index d1a378d7..4e0bffd4 100644 +--- a/requests/certs.py ++++ b/requests/certs.py +@@ -12,7 +12,8 @@ If you are packaging Requests, e.g., for a Linux distribution or a managed + environment, you can change the definition of where() to return a separately + packaged CA bundle. + """ +-from certifi import where ++def where(): ++ return "/etc/ssl/certs/ca-certificates.crt" + + if __name__ == '__main__': + print(where()) diff --git a/python-requests/requests-pytest-5.patch b/python-requests/requests-pytest-5.patch new file mode 100644 index 0000000..72be6ec --- /dev/null +++ b/python-requests/requests-pytest-5.patch @@ -0,0 +1,33 @@ +From 29f1ce38d8b2e4c8e5e9d67fd84b8f75d507932a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= +Date: Thu, 2 Jan 2020 16:52:36 +0100 +Subject: [PATCH] Fix test_conflicting_post_params to work on pytest 5 + +The non-contextmanager form of pytest.raises was removed in pytest 5. +http://doc.pytest.org/en/latest/deprecations.html#raises-warns-with-a-string-as-the-second-argument + +It was used here to support Python < 2.7, but that is no longer needed. +https://github.com/psf/requests/pull/1503#issuecomment-22333666 + +Fixes https://github.com/psf/requests/issues/5304 +--- + tests/test_requests.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/tests/test_requests.py b/tests/test_requests.py +index 7d4a4eb510..e730f7648b 100644 +--- a/tests/test_requests.py ++++ b/tests/test_requests.py +@@ -774,8 +774,10 @@ def __len__(self): + def test_conflicting_post_params(self, httpbin): + url = httpbin('post') + with open('Pipfile') as f: +- pytest.raises(ValueError, "requests.post(url, data='[{\"some\": \"data\"}]', files={'some': f})") +- pytest.raises(ValueError, "requests.post(url, data=u('[{\"some\": \"data\"}]'), files={'some': f})") ++ with pytest.raises(ValueError): ++ requests.post(url, data='[{"some": "data"}]', files={'some': f}) ++ with pytest.raises(ValueError): ++ requests.post(url, data=u('[{"some": "data"}]'), files={'some': f}) + + def test_request_ok_set(self, httpbin): + r = requests.get(httpbin('status', '404')) diff --git a/python-scrypt/PKGBUILD b/python-scrypt/PKGBUILD new file mode 100644 index 0000000..08ded64 --- /dev/null +++ b/python-scrypt/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=python-scrypt +pkgver=0.8.19 +pkgrel=1 +pkgdesc="Bindings for the scrypt key derivation function library" +url='https://github.com/holgern/py-scrypt' +arch=('i686' 'x86_64') +license=('Simplified-BSD') +depends=('python' 'glibc' 'libressl') +makedepends=('python-setuptools') +source=("https://github.com/holgern/py-scrypt/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('a207675cfc368ed0f333af9ec6159397c2455aab58a781869d3b7ff8226ce3214465f5373b9ae21bb7b53266da651321c3d0b4618516524fd58f72c660674e15') + +build() { + cd py-scrypt-${pkgver} + python setup.py build +} + +package() { + cd py-scrypt-${pkgver} + python setup.py install --root="${pkgdir}" -O1 --skip-build + rm -r "${pkgdir}"/usr/lib/python*/site-packages/scrypt/tests + install -Dm 644 README.rst -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/python-setuptools-scm/PKGBUILD b/python-setuptools-scm/PKGBUILD new file mode 100644 index 0000000..aab90cd --- /dev/null +++ b/python-setuptools-scm/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=python-setuptools-scm +pkgver=5.0.1 +pkgrel=1 +pkgdesc='Handles managing your python package versions in scm metadata.' +arch=('any') +url='https://github.com/pypa/setuptools_scm' +license=('Expat') +depends=('python-setuptools') +makedepends=('python-setuptools') +source=("https://pypi.io/packages/source/s/setuptools_scm/setuptools_scm-$pkgver.tar.gz") +sha512sums=('055403539a26caeb119f3d6623e7b32ef52ccc11a39757fdd9b265ba191265346be5a062a5926a381ba47bbd1a666ffa632653ee6055050689cc38fe0f90cd0f') + +prepare() { + # https://github.com/pypa/setuptools/issues/2466 + sed -i 's/filterwarnings=error/filterwarnings =\n error\n ignore:Creating a LegacyVersion has been deprecated and will be removed in the next major release:DeprecationWarning/' \ + setuptools_scm-$pkgver/tox.ini + sed -i '/jaraco.windows/d' setuptools_scm-$pkgver/{setup.cfg,src/setuptools_scm.egg-info/requires.txt} +} + +build() { + cd "$srcdir"/setuptools_scm-$pkgver + python setup.py build + python setup.py egg_info +} + +package_python-setuptools-scm() { + cd "$srcdir"/setuptools_scm-$pkgver + python setup.py install --root "$pkgdir" + + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-setuptools/PKGBUILD b/python-setuptools/PKGBUILD new file mode 100644 index 0000000..cd2da9f --- /dev/null +++ b/python-setuptools/PKGBUILD @@ -0,0 +1,86 @@ +# Maintainer: Jesus E. + +pkgbase=python-setuptools +pkgname=('python-setuptools' 'tauthon-setuptools') +pkgver=44.1.1 +_debver=$pkgver +_debrel=1 +pkgrel=3 +arch=('any') +license=('Expat') +url='https://pypi.python.org/pypi/setuptools' +makedepends=('python-packaging' 'tauthon-packaging' 'python-appdirs' 'tauthon-appdirs' 'quilt') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/pypa/setuptools/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-setuptools/python-setuptools_$_debver-$_debrel.debian.tar.xz") +sha512sums=('aabddfbd62b95ce7d8e68d582362361d32b91e65e6d00c393593521a2c1c383552e324ae64974049ae9880072c8741e2393e6482cd07ff7dd30615e91e9e1450' + '24353f22c424955e593c2a7077ce930b2feeca39480bcffde57775d6720cd58e22d9111491bddcb32fa9fe8482ff99542c18ab36b85c72e0580c53058b5048fe') + +prepare() { + pushd "$srcdir"/setuptools-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/install-layout.diff || true + rm -v debian/patches/multiarch-extname.diff || true + rm -v debian/patches/no-SOURCES.txt-in-egg-ingo.diff || true + rm -v debian/patches/reproducible.diff || true + + quilt push -av + fi + popd + + # don't download and install deps + sed -i '/pip.main(args)/d' setuptools-$pkgver/bootstrap.py + + # remove post-release tag since we are using stable tags + sed -e '/tag_build = .post/d' \ + -e '/tag_date = 1/d' \ + -i setuptools-$pkgver/setup.cfg + + cp -a setuptools-$pkgver{,-tauthon} + + cd "$srcdir"/setuptools-$pkgver + sed -i -e "s|^#\!.*/usr/bin/env python|#!/usr/bin/env python3|" setuptools/command/easy_install.py + + cd "$srcdir"/setuptools-$pkgver-tauthon + sed -i -e "s|^#\!.*/usr/bin/env python|#!/usr/bin/env tauthon|" setuptools/command/easy_install.py + + export SETUPTOOLS_INSTALL_WINDOWS_SPECIFIC_FILES=0 +} + +build() { + cd "$srcdir"/setuptools-$pkgver + python bootstrap.py + python setup.py build + + cd "$srcdir"/setuptools-$pkgver-tauthon + tauthon bootstrap.py + tauthon setup.py build +} + +package_python-setuptools() { + pkgdesc="Easily download, build, install, upgrade, and uninstall Python packages" + depends=('python-packaging' 'python-appdirs') + + cd "$srcdir"/setuptools-$pkgver + python setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 --skip-build + + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-setuptools() { + pkgdesc="Easily download, build, install, upgrade, and uninstall Tauthon packages" + depends=('tauthon-packaging' 'tauthon-appdirs') + + cd "$srcdir"/setuptools-$pkgver-tauthon + tauthon setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 --skip-build + rm "$pkgdir"/usr/bin/easy_install + + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-six/PKGBUILD b/python-six/PKGBUILD new file mode 100644 index 0000000..c1fb232 --- /dev/null +++ b/python-six/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgbase=python-six +pkgname=('python-six' 'tauthon-six') +pkgver=1.15.0 +pkgrel=2 +arch=('any') +url='https://pypi.python.org/pypi/six/' +license=('Expat') +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("https://pypi.io/packages/source/s/six/six-$pkgver.tar.gz") +sha512sums=('eb840ac17f433f1fc4af56de75cfbfe0b54e6a737bb23c453bf09a4a13d768d153e46064880dc763f4c5cc2785b78ea6d3d3b4a41fed181cb9064837e3f699a9') + +build() { + cp -a six-$pkgver{,-tauthon} +} + +package_python-six() { + pkgdesc="Python compatibility utilities" + depends=('python') + + cd six-$pkgver + python setup.py install --root "$pkgdir" --optimize=1 + + # license + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_tauthon-six() { + pkgdesc="Tauthon compatibility utilities" + depends=('tauthon') + + cd six-$pkgver-tauthon + tauthon setup.py install --root "$pkgdir" --optimize=1 + + # license + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-snowballstemmer/PKGBUILD b/python-snowballstemmer/PKGBUILD new file mode 100644 index 0000000..32823b1 --- /dev/null +++ b/python-snowballstemmer/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +_pkgname=snowballstemmer +pkgbase=python-snowballstemmer +pkgname=('python-snowballstemmer' 'tauthon-snowballstemmer') +pkgver=2.0.0 +pkgrel=2 +arch=('any') +pkgdesc="Snowball stemming library collection" +url='https://snowballstem.org' +license=('Modified-BSD') +makedepends=('python-setuptools' 'tauthon-setuptools' 'quilt') +source=("https://pypi.python.org/packages/source/s/snowballstemmer/$_pkgname-$pkgver.tar.gz") +sha512sums=('d673205cacc7f6e81eaee23e6c50064af77c3c4464dbdf5dc1c3f5682dec2688fe6e7069b7ed2e59259312ba926d3be84bd846a132b6138e30b4ff2b9a9353e8') + +prepare() { + cp -av $_pkgname-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir/$_pkgname-$pkgver" + python setup.py build + + cd "$srcdir/$_pkgname-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-snowballstemmer() { + pkgdesc+=" for Python" + depends=('python') + + cd "$srcdir"/$_pkgname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_tauthon-snowballstemmer() { + pkgdesc+=" for Tauthon" + depends=('tauthon') + + cd "$srcdir"/$_pkgname-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" --optimize=1 + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/python-soupsieve/PKGBUILD b/python-soupsieve/PKGBUILD new file mode 100644 index 0000000..db55736 --- /dev/null +++ b/python-soupsieve/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-soupsieve +pkgver=2.2.1 +pkgrel=2 +pkgdesc="A CSS4 selector implementation for Beautiful Soup" +url="https://github.com/facelessuser/soupsieve" +license=('Expat') +arch=('any') +depends=('python') +makedepends=('python-setuptools') +source=("https://github.com/facelessuser/soupsieve/archive/$pkgver/$pkgname-$pkgver.tar.gz") +sha512sums=('c1339cfca237af7f8915b6d644b8271f769f9a37aa68f8acf536236551baaf9bb44a2f2a736f9168a7649cde14d37b8c24614c9491acbf81e3f4fdaea96b4928') + +build() { + cd soupsieve-$pkgver + python setup.py build +} + +package() { + cd soupsieve-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE.md -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-sphinx-alabaster-theme/PKGBUILD b/python-sphinx-alabaster-theme/PKGBUILD new file mode 100644 index 0000000..2261572 --- /dev/null +++ b/python-sphinx-alabaster-theme/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=python-sphinx-alabaster-theme +pkgver=0.7.12 +pkgrel=2 +pkgdesc='Sphinx default theme' +url='https://github.com/bitprophet/alabaster' +arch=('any') +license=('Modified-BSD') +makedepends=('python-setuptools') +source=("https://pypi.org/packages/source/a/alabaster/alabaster-$pkgver.tar.gz") +sha512sums=('e3bfd0c92ce01f08d5e6d9dc1ef0967ca1f54827e08756f4a0ba7be8d3b8bec7f2e53a169b831ff5ce2d2548f7f52c6e518bcc513e49bb3e4c38274293aebbac') + +build() { + cd alabaster-$pkgver + python setup.py build +} + +package() { + cd alabaster-"$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/python-sphinx-argparse/PKGBUILD b/python-sphinx-argparse/PKGBUILD new file mode 100644 index 0000000..bb769b4 --- /dev/null +++ b/python-sphinx-argparse/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +_name=sphinx-argparse +pkgname=python-sphinx-argparse +pkgver=0.2.5 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Sphinx extension that automatically documents argparse commands and options" +arch=('any') +url="https://github.com/ribozz/sphinx-argparse" +license=('Expat') +depends=('python-sphinx') +makedepends=('python-setuptools' 'quilt') +optdepends=('python-commonmark: markdown support') +source=("https://files.pythonhosted.org/packages/source/${_name::1}/${_name}/${_name}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/s/$_name/${_name}_$_debver-$_debrel.debian.tar.xz") +sha512sums=('785e2b1ea04b39721d28aee712b87f7fccb56a25a2d5ccf7825b27673a7e53069265c89b32f7b63d4f788127fe815595913af699dba3cd60db37a7efdef6ea55' + '7a14aa96d7f1d333ca39e455e1255383e7b2675211787319d721850bce4bd9b436287e8dd9cb9ac337158c22ac2c9da620cfd0f775b5c0e56449252ad6a559f9') + +prepare() { + mv -v "${_name}-${pkgver}" "${pkgname}-${pkgver}" + + # fix problematic file permissions: https://github.com/ribozz/sphinx-argparse/issues/117 + cd "${pkgname}-${pkgver}" + chmod 644 sphinx_argparse.egg-info/* + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0003-Remove-usage-of-Markdown-options-in-docs-markdown.rs.patch || true + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + python setup.py build +} + +package() { + cd "${pkgname}-${pkgver}" + python setup.py install --skip-build \ + --optimize=1 \ + --prefix=/usr \ + --root="${pkgdir}" + install -vDm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 debian/copyright -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/python-sphinx/PKGBUILD b/python-sphinx/PKGBUILD new file mode 100644 index 0000000..ffc7775 --- /dev/null +++ b/python-sphinx/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=python-sphinx +pkgver=3.0.3 +pkgrel=2 +pkgdesc="Python documentation generator" +arch=('any') +url='https://www.sphinx-doc.org/' +license=('Simplified-BSD') +depends=('python-babel' + 'python-docutils' + 'python-imagesize' + 'python-jinja' + 'python-pygments' + 'python-requests' + 'python-setuptools' + 'python-snowballstemmer' + 'python-sphinx-alabaster-theme' + 'python-sphinxcontrib-'{{apple,dev,html}help,jsmath,qthelp,serializinghtml}) +optdepends=('graphicsmagick: for ext.imgconverter') +source=("https://pypi.org/packages/source/S/Sphinx/Sphinx-$pkgver.tar.gz") +sha512sums=('1e37224d04f0a7836a7132cea55c67b9d15a22f941a790288438b39d455973f254205ffd1e99e6e2305430725a6a623b9a85fb95b495a9f6f912fb94825fdcd0') + +build() { + cd Sphinx-$pkgver + make build +} + +package() { + cd Sphinx-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 -t "$pkgdir"/usr/share/licenses/$pkgname LICENSE +} diff --git a/python-sphinx_rtd_theme/PKGBUILD b/python-sphinx_rtd_theme/PKGBUILD new file mode 100644 index 0000000..bd1c5c0 --- /dev/null +++ b/python-sphinx_rtd_theme/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=python-sphinx_rtd_theme +pkgver=0.5.0 +_debver=0.5.0+dfsg +_debrel=1 +pkgrel=1 +pkgdesc="Python Sphinx Read The Docs Theme" +url='https://github.com/rtfd/sphinx_rtd_theme/' +arch=('any') +license=('Expat') +makedepends=('python-setuptools' 'quilt') +source=("https://pypi.org/packages/source/s/sphinx_rtd_theme/sphinx_rtd_theme-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/s/sphinx-rtd-theme/sphinx-rtd-theme_$_debver-$_debrel.debian.tar.xz") +sha512sums=('73b32e8402be59dafb86deb679628a5b8bd0295a95dc8b67ec1990faef1faad64b67b44101c13ca058480beb0ca5c10f859ecc8ab166eabe891eee09df2fe805' + 'a67f823406f6fb54e9f3b0fbac8386eaecf20fd2f3347865d62c10a0a8fd01bdc72c396de52a4082047c313a375b1b327d70094221910bdf68e57230d54873b1') + +prepare() { + cd sphinx_rtd_theme-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/fonts-only-ttf-woff2.patch || true + rm -v debian/patches/replace-webpack-imports.patch || true + + quilt push -av + fi +} + +build() { + cd sphinx_rtd_theme-$pkgver + python setup.py build +} + +package() { + cd sphinx_rtd_theme-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/python-sphinxcontrib-applehelp/PKGBUILD b/python-sphinxcontrib-applehelp/PKGBUILD new file mode 100644 index 0000000..052421e --- /dev/null +++ b/python-sphinxcontrib-applehelp/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +_srcname=sphinxcontrib-applehelp +pkgname=python-sphinxcontrib-applehelp +pkgver=1.0.2 +pkgrel=2 +pkgdesc="Sphinx extension which outputs help books" +arch=('any') +url='https://github.com/sphinx-doc/sphinxcontrib-applehelp' +license=('Simplified-BSD') +makedepends=('python-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/sphinx-doc/sphinxcontrib-applehelp/archive/$pkgver.tar.gz") +sha512sums=('9cb746ab27909b55e211a2a8f783150218441d291dd316b0012262e5fd8dcb27d8edeacda62aafa64edea0c17b98ea46735aaedf236f612ff1582580274b8c14') + +build() { + cd "$_srcname-$pkgver" + python setup.py build +} + +package() { + cd "$_srcname-$pkgver" + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/python-sphinxcontrib-devhelp/PKGBUILD b/python-sphinxcontrib-devhelp/PKGBUILD new file mode 100644 index 0000000..775d3d6 --- /dev/null +++ b/python-sphinxcontrib-devhelp/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +_srcname=sphinxcontrib-devhelp +pkgname=python-sphinxcontrib-devhelp +pkgver=1.0.2 +pkgrel=0 +pkgdesc='Sphinx extension which outputs Devhelp document' +arch=('any') +url='https://github.com/sphinx-doc/sphinxcontrib-devhelp' +license=('Simplified-BSD') +makedepends=('python-setuptools') +# checkdepends=('python-pytest' 'python-sphinx') +source=("$pkgname-$pkgver.tar.gz::https://github.com/sphinx-doc/sphinxcontrib-devhelp/archive/$pkgver.tar.gz") +sha512sums=('c69e85aa59d1a824c191c40cf537e65627aabe46cc872baf2f4a95d1675f1efa78dceab2a167da87198f227d495934c4ced30bbd2359d08e8b26e23df6063fcf') + +build() { + cd $_srcname-$pkgver + python setup.py build +} + +# check() { +# cd $_srcname-$pkgver +# pytest +# } + +package() { + cd $_srcname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + # License + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/python-sphinxcontrib-htmlhelp/PKGBUILD b/python-sphinxcontrib-htmlhelp/PKGBUILD new file mode 100644 index 0000000..4127c96 --- /dev/null +++ b/python-sphinxcontrib-htmlhelp/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +_srcname=sphinxcontrib-htmlhelp +pkgname=python-sphinxcontrib-htmlhelp +pkgver=1.0.3 +pkgrel=0 +pkgdesc='Sphinx extension which renders HTML help files' +arch=('any') +url='https://github.com/sphinx-doc/sphinxcontrib-htmlhelp' +license=('Simplified-BSD') +makedepends=('python-setuptools') +# checkdepends=('python-html5lib' 'python-pytest' 'python-sphinx') +source=("$pkgname-$pkgver.tar.gz::https://github.com/sphinx-doc/sphinxcontrib-htmlhelp/archive/$pkgver.tar.gz") +sha512sums=('4eb59fe4d1860e313ac7d70a7197ba3de71e17b86fe4704e530fc80bdd52aeb0c85f6e0489376cc1bc8d2dcdd3a5c4b34e4f8d5274aba30055fca79b12a055fa') + +build() { + cd $_srcname-$pkgver + python setup.py build +} + +# check() { +# cd $_srcname-$pkgver +# pytest +# } + +package() { + cd $_srcname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + # License + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/python-sphinxcontrib-jsmath/000-fix-mypy-violations-1.patch b/python-sphinxcontrib-jsmath/000-fix-mypy-violations-1.patch new file mode 100644 index 0000000..bd890e7 --- /dev/null +++ b/python-sphinxcontrib-jsmath/000-fix-mypy-violations-1.patch @@ -0,0 +1,20 @@ +From f7e354798b944bc2d3abbd30cb81f7235826deb6 Mon Sep 17 00:00:00 2001 +From: Takeshi KOMIYA +Date: Sun, 6 Oct 2019 22:50:44 +0900 +Subject: [PATCH] Fix mypy-0.730 violations + +--- + sphinxcontrib/__init__.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/sphinxcontrib/__init__.py b/sphinxcontrib/__init__.py +index 68c04af..54b09d4 100644 +--- a/sphinxcontrib/__init__.py ++++ b/sphinxcontrib/__init__.py +@@ -1,2 +1,5 @@ + # -*- coding: utf-8 -*- +-__import__('pkg_resources').declare_namespace(__name__) ++import pkg_resources ++ ++ ++pkg_resources.declare_namespace(__name__) diff --git a/python-sphinxcontrib-jsmath/001-fix-mypy-violations-2.patch b/python-sphinxcontrib-jsmath/001-fix-mypy-violations-2.patch new file mode 100644 index 0000000..c89e292 --- /dev/null +++ b/python-sphinxcontrib-jsmath/001-fix-mypy-violations-2.patch @@ -0,0 +1,41 @@ +From 631ef5fb4a52129895de47711f68bf3b663a51bb Mon Sep 17 00:00:00 2001 +From: Takeshi KOMIYA +Date: Mon, 13 Jan 2020 00:52:10 +0900 +Subject: [PATCH] Fix mypy violations + +--- + setup.cfg | 1 + + sphinxcontrib/jsmath/__init__.py | 4 ++-- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/setup.cfg b/setup.cfg +index 821a6c9..2d93352 100644 +--- a/setup.cfg ++++ b/setup.cfg +@@ -27,3 +27,4 @@ exclude = .git,.tox,.venv + + [mypy] + ignore_missing_imports = True ++strict_optional = False +diff --git a/sphinxcontrib/jsmath/__init__.py b/sphinxcontrib/jsmath/__init__.py +index 1ce675d..2ffef84 100644 +--- a/sphinxcontrib/jsmath/__init__.py ++++ b/sphinxcontrib/jsmath/__init__.py +@@ -65,7 +65,7 @@ def html_visit_displaymath(self: HTMLTranslator, node: nodes.math_block) -> None + def install_jsmath(app: Sphinx, env: BuildEnvironment) -> None: + if app.builder.format != 'html' or app.builder.math_renderer_name != 'jsmath': # type: ignore # NOQA + return +- if not app.config.jsmath_path: ++ if not app.config.jsmath_path: # type: ignore + raise ExtensionError('jsmath_path config value must be set for the ' + 'jsmath extension to work') + +@@ -73,7 +73,7 @@ def install_jsmath(app: Sphinx, env: BuildEnvironment) -> None: + domain = cast(MathDomain, env.get_domain('math')) + if domain.has_equations(): + # Enable jsmath only if equations exists +- builder.add_js_file(app.config.jsmath_path) ++ builder.add_js_file(app.config.jsmath_path) # type: ignore + + + def setup(app: Sphinx) -> Dict[str, Any]: diff --git a/python-sphinxcontrib-jsmath/PKGBUILD b/python-sphinxcontrib-jsmath/PKGBUILD new file mode 100644 index 0000000..8ec89ed --- /dev/null +++ b/python-sphinxcontrib-jsmath/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +_srcname=sphinxcontrib-jsmath +pkgname=python-sphinxcontrib-jsmath +pkgver=1.0.1 +pkgrel=0 +pkgdesc='Sphinx extension which renders display math in HTML via JavaScript' +arch=('any') +url='https://github.com/sphinx-doc/sphinxcontrib-jsmath' +license=('Simplified-BSD') +makedepends=('python-setuptools') +# checkdepends=('python-pytest' 'python-sphinx') +source=("$pkgname-$pkgver.tar.gz::https://github.com/sphinx-doc/sphinxcontrib-jsmath/archive/$pkgver.tar.gz" + '000-fix-mypy-violations-1.patch' + '001-fix-mypy-violations-2.patch') +sha512sums=('7ebe70475c0a2c5f6626daf2171ccb8886fe24111988c625d16a32efc33ec62c487d8b34e6cdf4147ec0e4174db7f36c9acd8384249c85b0ef5dd8dc1b8b7a43' + 'aa5921d9d4005b57a646d7261270baf55f8c0bad51c4d3472af7e60d97d38ff075c7b5624ca3a4e401afea64ae9409accc13268ba288a8845a1555da13be9fb8' + '8c1159f7f5398c75b903bc31048e8eacc1a6ed50a1d3765bc3212ec52d23bfa2a31ccb7bbb196f3aa909afc541f00cdaf043b44d5e95d8bbc9dc3918b6fc87b3') + +prepare() { + cd $_srcname-$pkgver + patch -Np1 -i "$srcdir/000-fix-mypy-violations-1.patch" + patch -Np1 -i "$srcdir/001-fix-mypy-violations-2.patch" +} + +build() { + cd $_srcname-$pkgver + python setup.py build +} + +# check() { +# cd $_srcname-$pkgver +# pytest +# } + +package() { + cd $_srcname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + # License + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/python-sphinxcontrib-qthelp/PKGBUILD b/python-sphinxcontrib-qthelp/PKGBUILD new file mode 100644 index 0000000..2ac5507 --- /dev/null +++ b/python-sphinxcontrib-qthelp/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +_srcname=sphinxcontrib-qthelp +pkgname=python-sphinxcontrib-qthelp +pkgver=1.0.3 +pkgrel=0 +pkgdesc='Sphinx extension which outputs QtHelp document' +arch=('any') +url='https://github.com/sphinx-doc/sphinxcontrib-qthelp' +license=('Simplified-BSD') +makedepends=('python-setuptools') +# checkdepends=('python-pytest' 'python-sphinx') +source=("$pkgname-$pkgver.tar.gz::https://github.com/sphinx-doc/sphinxcontrib-qthelp/archive/$pkgver.tar.gz") +sha512sums=('ff8cc57acc5bee96fce7b1a0fae05f34622007c27d56768eec6887d4080052f73c10f112a31d544f3cf4d78e3b1403f5404602d4be89fa074c751ec7f2e0f785') + +build() { + cd $_srcname-$pkgver + python setup.py build +} + +# check() { +# cd $_srcname-$pkgver +# pytest +# } + +package() { + cd $_srcname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + # License + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/python-sphinxcontrib-serializinghtml/PKGBUILD b/python-sphinxcontrib-serializinghtml/PKGBUILD new file mode 100644 index 0000000..29710e9 --- /dev/null +++ b/python-sphinxcontrib-serializinghtml/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +_srcname=sphinxcontrib-serializinghtml +pkgname=python-sphinxcontrib-serializinghtml +pkgver=1.1.4 +pkgrel=0 +pkgdesc='Sphinx extension which outputs "serialized" HTML files (json and pickle)' +arch=('any') +url='https://github.com/sphinx-doc/sphinxcontrib-serializinghtml' +license=('Simplified-BSD') +makedepends=('python-setuptools') +# checkdepends=('python-pytest' 'python-sphinx') +source=("$pkgname-$pkgver.tar.gz::https://github.com/sphinx-doc/sphinxcontrib-serializinghtml/archive/$pkgver.tar.gz") +sha512sums=('a2db5836eb56358637c20b932856e1da133490eb6eff2cb2ad516ba58519c1f4fd20ce2890c08991311ae8a35bc7af9bcb0f77a9692fe0e30477622d22f04f62') + +build() { + cd $_srcname-$pkgver + python setup.py build +} + +# check() { +# cd $_srcname-$pkgver +# pytest +# } + +package() { + cd $_srcname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + # License + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/python-stem/PKGBUILD b/python-stem/PKGBUILD new file mode 100644 index 0000000..10ea739 --- /dev/null +++ b/python-stem/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=python-stem +_pypiname=${pkgname#*-} +pkgver=1.8.1 +_debver=$pkgver +_debrel=2.1 +pkgrel=2 +pkgdesc="Python controller library for Tor" +url='https://stem.torproject.org/' +arch=('any') +license=('GPL-3' 'Simplified-BSD' 'CC0-1.0' 'Expat' 'Public-Domain' 'GPL-2') +depends=('python' 'python-cryptography' 'python-pynacl' 'procps-ng') +makedepends=('quilt') +optdepends=('tor: tor-server to talk to') +replaces=('stem') +provides=('stem') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/p/python-stem/python-stem_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/p/$pkgname/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('bad2f4f96e37caa3ee2928bb027318c4941ca3f6c0072c5f6e87fe647d2b68400ad352d9c27fa2a35c00f4f327aa9cc00e2907b21a9cbd26fab46ec21e2a038a' + '035e8279a746b661355f87a33d8faa097c9a498d1a5c6177f9a605d29643f6f848acc9e17652862135648d37dbf1a921bfc5371a1559a65cee3b8a1da0695ff9') + +prepare() { + cd ${_pypiname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # https://github.com/torproject/stem/issues/56 + sed -i '/MOCK_VERSION/d' run_tests.py + # remove flaky integration tests + sed -i test/settings.cfg \ + -e '/|test.integ.client.connection.TestConnection/d' \ + -e '/|test.integ.process.TestProcess/d' \ + -e '/|test.integ.installation.TestInstallation/d' + rm test/integ/{client/connection,{installation,process}}.py +} + +build() { + cd ${_pypiname}-${pkgver} + python setup.py build +} + +package() { + cd ${_pypiname}-${pkgver} + python setup.py install --optimize=1 --root="${pkgdir}" --skip-build + install -Dm644 debian/copyright LICENSE -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/python-timeago/PKGBUILD b/python-timeago/PKGBUILD new file mode 100644 index 0000000..6cac0e9 --- /dev/null +++ b/python-timeago/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-timeago +_name=${pkgname#python-} +pkgver=1.0.16 +pkgrel=1 +pkgdesc="Simple library used to format datetime with \`***time ago\` statement." +arch=('any') +url='https://github.com/hustcc/timeago' +license=('Expat') +depends=('python') +makedepends=('python-setuptools' 'python-wheel') +source=("$_name-$pkgver.tar.gz::https://github.com/hustcc/timeago/archive/refs/tags/$pkgver.tar.gz") +sha512sums=('1106abe17cfb34324ee9194141598698abbe1c0ed36273d449fdc9047aa42e369845be0041bdffc4470f00602df20bf981de3ad16f10c22d65de4c0a41d65e73') + +build() { + cd "$_name-$pkgver" + python setup.py build +} + +package() { + cd "$_name-$pkgver" + python setup.py install --root="$pkgdir/" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname/" +} diff --git a/python-toml/PKGBUILD b/python-toml/PKGBUILD new file mode 100644 index 0000000..f24241a --- /dev/null +++ b/python-toml/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +_name=toml +pkgname=python-toml +pkgver=0.10.1 +pkgrel=1 +pkgdesc='A Python library for parsing and creating TOML' +arch=('any') +url="https://github.com/uiri/$_name" +license=('Expat') +depends=('python') +#checkdepends=('python-numpy' 'python-pytest') +makedepends=('python-setuptools') +source=("https://files.pythonhosted.org/packages/source/${_name::1}/${_name}/${_name}-${pkgver}.tar.gz" + "${pkgname}-0.10.1-install_type_hints.patch") +sha512sums=('9dc813f84b56bee6519c70efe49a834d6695c82d429f0b7cc6e6153a1fb14d3fb627dea24df2d2664354f27108389d51475609272d59fc7e4b64a2c17d74f33f' + '000fd1416341567a1828034f6e3844f7c5436e2b89f06b0ffa2567fc86d3b72dd4a8085d26d4366764446dfb050cfececaada4ca53f9c355c62aafb26ea87be4') + +prepare() { + cd "$_name-$pkgver" + + patch -Np1 -i ../"${pkgname}-0.10.1-install_type_hints.patch" +} + +build() { + cd "$_name-$pkgver" + python setup.py build +} + +#check() { +# cd "$_name-$pkgver" +# export PYTHONPATH="../build/lib/:${PYTHONPATH}" +# # disable useless tests +# pytest -v tests -k 'not test_invalid_tests and not test_valid_tests' +#} + +package() { + cd "$_name-$pkgver" + python setup.py install --skip-build \ + --optimize=1 \ + --prefix=/usr \ + --root="${pkgdir}" + install -vDm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 README.rst -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/python-toml/python-toml-0.10.1-install_type_hints.patch b/python-toml/python-toml-0.10.1-install_type_hints.patch new file mode 100644 index 0000000..d31f69d --- /dev/null +++ b/python-toml/python-toml-0.10.1-install_type_hints.patch @@ -0,0 +1,11 @@ +diff -ruN a/setup.py b/setup.py +--- a/setup.py 2020-01-03 20:37:49.000000000 +0000 ++++ b/setup.py 2020-09-13 17:38:30.016905954 +0000 +@@ -16,6 +16,7 @@ + author_email="uiri@xqz.ca", + url="https://github.com/uiri/toml", + packages=['toml'], ++ package_data={'toml': ['*.pyi', '**/*.pyi']}, + license="MIT", + long_description=readme_string, + python_requires=">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", diff --git a/python-typed-ast/PKGBUILD b/python-typed-ast/PKGBUILD new file mode 100644 index 0000000..5c7b12e --- /dev/null +++ b/python-typed-ast/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-typed-ast +pkgver=1.5.4 +pkgrel=1 +pkgdesc="AST with PEP 484 type comments support" +arch=('i686' 'x86_64') +url="https://github.com/python/typed_ast" +license=('Apache-2.0' 'Python') +depends=('python') +makedepends=('python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/python/typed_ast/archive/${pkgver}.tar.gz") +sha512sums=('264abb6742ff3bf5680655250fad7793dc346d70c6093d25364e01583b1962df8878cbd9ae088d5552b5b3bd5433de027f21b9db655ffaf66f6fe12a66caba40') + +build(){ + cd "typed_ast-$pkgver" + python setup.py build +} + +package(){ + cd "typed_ast-$pkgver" + python setup.py install --prefix="usr/" --root="$pkgdir/" --optimize=1 --skip-build + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-typing_extensions/PKGBUILD b/python-typing_extensions/PKGBUILD new file mode 100644 index 0000000..afd9b50 --- /dev/null +++ b/python-typing_extensions/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=python-typing_extensions +pkgver=3.10.0.0 +pkgrel=2 +pkgdesc='Backported and Experimental Type Hints for Python 3.5+' +arch=('any') +url='https://github.com/python/typing/tree/master/typing_extensions' +license=('Python') +depends=('python') +makedepends=('python-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/python/typing/archive/refs/tags/$pkgver.tar.gz") +sha512sums=('4133e9229ed42710b5b108bb7dfed5cdf00856df7f0b8fba9f4d40526ee0ac9fc2c56f7d4c9770ed6392a6aa0401cb599505124c1717e69aabf9069b71356b02') + +prepare() { + cd typing-$pkgver + sed 's/3.7.4.2/3.7.4.3/g' -i setup.py +} + +build() { + cd typing-$pkgver + python setup.py build +} + +package() { + cd typing-$pkgver + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm 644 LICENSE -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/python-urllib3/PKGBUILD b/python-urllib3/PKGBUILD new file mode 100644 index 0000000..3f77760 --- /dev/null +++ b/python-urllib3/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgbase=python-urllib3 +pkgname=('python-urllib3' 'tauthon-urllib3') +pkgver=1.25.4 +pkgrel=1 +pkgdesc="HTTP library with thread-safe connection pooling and file post support" +arch=('any') +url='https://github.com/shazow/urllib3' +license=('Expat') +makedepends=('python-setuptools' 'tauthon-setuptools' 'python-ndg-httpsclient' + 'tauthon-ndg-httpsclient' 'python-pyasn1' 'tauthon-pyasn1' 'python-pyopenssl' + 'tauthon-pyopenssl' 'python-pysocks' 'tauthon-pysocks' 'python-mock' 'tauthon-mock' + 'quilt') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/shazow/urllib3/archive/$pkgver.tar.gz") +sha512sums=('b1b598d98644d293471a92a2e7d096d19ade0dd33b43c1af9a30a713cbfefd5cfc583a4cf240725b5b5d33a1c6ad351811310209befb7460a8b6a07dc226119d') + +prepare() { + cd urllib3-$pkgver + cp -a "$srcdir"/urllib3-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir"/urllib3-$pkgver + python setup.py build + + cd "$srcdir"/urllib3-$pkgver-tauthon + tauthon setup.py build +} + +package_python-urllib3() { + depends=('python') + optdepends=('python-pysocks: SOCKS support' + 'python-pyopenssl: security support') + + cd urllib3-$pkgver + python setup.py install --root="$pkgdir" + install -Dm644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_tauthon-urllib3() { + depends=('tauthon') + optdepends=('tauthon-pysocks: SOCKS support' + 'tauthon-pyopenssl: security support') + + cd urllib3-$pkgver-tauthon + tauthon setup.py install --root="$pkgdir" + install -Dm644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-vobject/PKGBUILD b/python-vobject/PKGBUILD new file mode 100644 index 0000000..5e6e932 --- /dev/null +++ b/python-vobject/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +_name=vobject +pkgname=python-vobject +pkgver=0.9.6.1 +_debver=0.9.6.1 +_debrel=0.2 +pkgrel=1 +pkgdesc='Module for parsing and generating vCard and vCalendar files' +url='https://eventable.github.io/vobject/' +license=('Apache-2.0') +arch=('any') +depends=('python-dateutil') +makedepends=('python-setuptools' 'quilt') +source=("https://files.pythonhosted.org/packages/source/${_name::1}/${_name}/${_name}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-vobject/python-vobject_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('0b299fd4ca105a063f4ac7b03b157c54a3867d6fb798f9072897939b0ba275ba0887bb001c5ed38002a8eb1c10aee710af880413c072140b855af4b62d5aff72' + 'c422992afb8337411eb6853fe50d3ae3534dd47425ee1b7911be30490faee9d1672fa6b36a9ed95705c7fd5e2077204d01007c078bf4c31ad3423da770e3452b') + +prepare() { + cd "${_name}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${_name}-${pkgver}" + python setup.py build +} + +package() { + cd "${_name}-${pkgver}" + python setup.py install --skip-build \ + --optimize=1 \ + --prefix=/usr \ + --root="${pkgdir}" + install -vDm 644 {ACKNOWLEDGEMENTS.txt,README.md} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 LICENSE-2.0.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-webencodings/PKGBUILD b/python-webencodings/PKGBUILD new file mode 100644 index 0000000..290dda6 --- /dev/null +++ b/python-webencodings/PKGBUILD @@ -0,0 +1,19 @@ +# Maintainer: Jesus E. + +pkgname=python-webencodings +pkgver=0.5.1 +pkgrel=1 +pkgdesc="Python implementation of the WHATWG Encoding standard" +license=('Modified-BSD') +arch=('any') +url='https://github.com/gsnedders/python-webencodings' +depends=('python') +makedepends=('python-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/gsnedders/python-webencodings/archive/v${pkgver}.tar.gz") +sha512sums=('c5cb34f35fb5bc7ffb88c19eb3262dedbf6231c0ee2871dccbc0f9497193d8209fc20703d451a2bb41a5ff913e63abf7481f7a8f9886c953724e9cf71c34cb74') + +package() { + cd ${pkgname}-${pkgver} + python setup.py install --root="${pkgdir}" + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/python-wheel/PKGBUILD b/python-wheel/PKGBUILD new file mode 100644 index 0000000..d2eea0e --- /dev/null +++ b/python-wheel/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +_pypiname=wheel +pkgbase=python-wheel +pkgname=('python-wheel' 'tauthon-wheel') +pkgver=0.37.0 +pkgrel=5 +_pyver=3.8 +pkgdesc="A built-package format" +arch=(any) +url='https://pypi.python.org/pypi/wheel' +license=('Expat') +makedepends=('python-packaging' 'python-setuptools' 'tauthon-packaging' 'tauthon-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/pypa/wheel/archive/$pkgver.tar.gz") +sha512sums=('2e0eb1c5560a0229be9de450da8b2bc62153744abb6d8ab9a0625c150dc00d3fc3e24dbe37cc26f4ca6b6876b5c63298427b2076ee42b8f772c75010bfc135a8') + +prepare() { + # don't depend on python-coverage for tests + sed -i 's/--cov=wheel//' wheel-$pkgver/setup.cfg + + # https://github.com/pypa/wheel/pull/365 + rm -r wheel-$pkgver/src/wheel/vendored + sed -i 's/from .vendored.packaging import tags/from packaging import tags/' wheel-$pkgver/src/wheel/bdist_wheel.py + + cp -a wheel-$pkgver{,-tauthon} +} + +build() { + export PYTHONHASHSEED=0 + + cd "$srcdir/$_pypiname-$pkgver" + python setup.py build + + cd "$srcdir/$_pypiname-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-wheel() { + pkgdesc+=" for Python" + depends=('python-packaging') + optdepends=('python-keyring: for wheel.signatures') + optdepends=('python-pyxdg: for wheel.signatures') + + cd "$srcdir/$_pypiname-$pkgver" + python setup.py install --root="$pkgdir/" --optimize=1 --skip-build + install -D -m644 LICENSE.txt "$pkgdir/usr/share/licenses/$pkgname/LICENSE.txt" +} + +package_tauthon-wheel() { + pkgdesc+=" for Tauthon" + depends=('tauthon-packaging') + optdepends=('tauthon-keyring: for wheel.signatures') + optdepends=('tauthon-pyxdg: for wheel.signatures') + + cd "$srcdir/$_pypiname-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir/" --optimize=1 --skip-build + install -D -m644 LICENSE.txt "$pkgdir/usr/share/licenses/$pkgname/LICENSE.txt" + mv "$pkgdir/usr/bin/wheel" "$pkgdir/usr/bin/wheel2" +} diff --git a/python-wxpython/PKGBUILD b/python-wxpython/PKGBUILD new file mode 100644 index 0000000..fa1dade --- /dev/null +++ b/python-wxpython/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=python-wxpython +_pkgname=wxPython +pkgver=4.0.7.2 +_pkgver="${pkgver%.*}" +_post="${pkgver##*.}" +pkgrel=2 +pkgdesc="Cross-platform GUI toolkit" +arch=('i686' 'x86_64') +license=('wxWindows-Library-3.1') +url='https://www.wxpython.org' +depends=('wxgtk3' 'python-six') +makedepends=('mesa' 'glu' 'webkitgtk' 'python-requests' 'python-setuptools') +source=("https://files.pythonhosted.org/packages/source/w/wxPython/wxPython-$_pkgver.post$_post.tar.gz") +sha512sums=('7af89db90a0f7e6b644d61c1ede01ec36a2c295e46d44692ae9dbc4af923310c1b498a52f45b02a89e8917d844c6abe67e5f3fdd9c1d51da3312899319a349e4') + +prepare() { + sed -i "s|WX_CONFIG = 'wx-config'|WX_CONFIG = 'wx-config-gtk3'|" $_pkgname-$_pkgver.post$_post/build.py +} + +build() { + cd "$_pkgname-$_pkgver.post$_post" + + python build.py build --use_syswx --release +} + +package() { + cd "$_pkgname-$_pkgver.post$_post" + + python build.py install --destdir="$pkgdir" + + install -Dm644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname + find "$pkgdir/usr/lib" -type f | xargs chmod 644 +} diff --git a/python-xattr/PKGBUILD b/python-xattr/PKGBUILD new file mode 100644 index 0000000..a2f79d3 --- /dev/null +++ b/python-xattr/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=python-xattr +pkgver=0.9.7 +pkgrel=1 +pkgdesc='Python wrapper for extended filesystem attributes' +arch=('i686' 'x86_64') +license=('Expat') +url='https://github.com/xattr/xattr' +depends=('python-cffi' 'python-setuptools') +makedepends=('python-setuptools' 'python-cffi') +source=("$pkgname-$pkgver.tar.gz::https://github.com/xattr/xattr/archive/v$pkgver.tar.gz") +sha512sums=('4d94e929057a39c0f332e24aee1c2883580c71df94c9041313d4af2f11885803ab2c007546d5510ed647abcc70804e2fbaecf38f84d0a8457129c1336e5c8874') + +build() { + cd "$srcdir"/xattr-$pkgver + python setup.py build +} + +package() { + cd xattr-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/python-yaml/PKGBUILD b/python-yaml/PKGBUILD new file mode 100644 index 0000000..73509f2 --- /dev/null +++ b/python-yaml/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=python-yaml +pkgver=5.4.1.1 +pkgrel=2 +pkgdesc="Python bindings for YAML, using fast libYAML library" +url='https://pyyaml.org/wiki/PyYAML' +arch=('i686' 'x86_64') +license=('Expat') +depends=('python' 'libyaml') +makedepends=('python-setuptools' 'libyaml' 'python-cython') +source=("pyyaml-${pkgver}.tar.gz::https://github.com/yaml/pyyaml/archive/${pkgver}.tar.gz") +sha512sums=('bcbe911fbef7e6e8ef8a76293593d4d792dbbf0931a2d031cdeacddf7064b69f958484217bc60d1b7614dcc83ef56cd5c0cd48a0339ab9add623ef70cb2d0a20') + +build() { + cd pyyaml-$pkgver + python setup.py --with-libyaml build +} + +package() { + cd pyyaml-$pkgver + python setup.py --with-libyaml install --prefix=/usr --root="${pkgdir}" -O1 --skip-build + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} + install -Dm644 CHANGES README -t "${pkgdir}"/usr/share/doc/${pkgname} +} diff --git a/python-zope-component/PKGBUILD b/python-zope-component/PKGBUILD new file mode 100644 index 0000000..f1b3d6a --- /dev/null +++ b/python-zope-component/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgbase=python-zope-component +pkgname=('python-zope-component' 'tauthon-zope-component') +pkgver=4.3.0 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc="Represents the core of the Zope Component Architecture" +arch=('any') +url="https://github.com/zopefoundation/zope.component" +license=('Zope-2.1') +makedepends=('python-setuptools' 'tauthon-setuptools' + 'python-zope-interface' 'tauthon-zope-interface' + 'python-zope-event' 'tauthon-zope-event' + 'quilt') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/zopefoundation/zope.component/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/z/zope.component/zope.component_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ac543f4db31a39ec64588ac000fc9e9d49e1192c340e991373d84c436b6d1d39e29707d58f88aaad74e613278b124576bfc1263c21c3bda5031251f3886859d8' + '076c950e5db56661bc3ef523d498359b22f13b3fba72b0d46cfc6dcf24468f4a173d958e439bff0b46e50041c6df8cef79227b44ed2084131b53e81b1bd4d8b9') + +prepare() { + cd "$srcdir/zope.component-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + cp -a $srcdir/zope.component-$pkgver{,-tauthon} +} + +build() { + cd "$srcdir/zope.component-$pkgver" + python setup.py build + + cd "$srcdir/zope.component-$pkgver-tauthon" + tauthon setup.py build +} + +package_python-zope-component() { + depends=('python-setuptools' 'python-zope-interface' 'python-zope-event') + cd "$srcdir/zope.component-$pkgver" + python setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE.txt -t $pkgdir/usr/share/licenses/$pkgname +} + +package_tauthon-zope-component() { + depends=('tauthon-setuptools' 'tauthon-zope-interface' 'tauthon-zope-event') + cd "$srcdir/zope.component-$pkgver-tauthon" + tauthon setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-zope-event/PKGBUILD b/python-zope-event/PKGBUILD new file mode 100644 index 0000000..4da56e1 --- /dev/null +++ b/python-zope-event/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +_pkgname=zope.event +pkgbase=python-zope-event +pkgname=('python-zope-event' 'tauthon-zope-event') +pkgver=4.5.0 +pkgrel=2 +pkgdesc="Provides a simple event system" +arch=('any') +license=('Zope-2.1') +url='https://github.com/zopefoundation/zope.event' +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/zopefoundation/zope.event/archive/${pkgver}.tar.gz") +sha512sums=('2414a283988dc646e48153e389688b8eec4db528f7ac9ff45f982ce42295d390985825ac0f9db566fc5600fe4c96a8297a9c5718a16abc6d1831c72ee42c163d') + +prepare() { + cp -a ${_pkgname}-${pkgver}{,-tauthon} +} + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + python setup.py build + + cd "${srcdir}/${_pkgname}-${pkgver}-tauthon" + tauthon setup.py build +} + +package_python-zope-event() { + pkgdesc+=" for Python" + depends=('python') + + cd "$srcdir/$_pkgname-$pkgver" + python setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE.txt -t $pkgdir/usr/share/licenses/$pkgname +} + +package_tauthon-zope-event() { + pkgdesc+=" for Tauthon" + depends=('tauthon') + + cd "${srcdir}/$_pkgname-${pkgver}-tauthon" + tauthon setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python-zope-interface/PKGBUILD b/python-zope-interface/PKGBUILD new file mode 100644 index 0000000..2c507cb --- /dev/null +++ b/python-zope-interface/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgbase=python-zope-interface +pkgname=('python-zope-interface' 'tauthon-zope-interface') +pkgver=5.4.0 +pkgrel=2 +license=('Zope-2.1') +arch=('i686' 'x86_64') +url='https://pypi.python.org/pypi/zope.interface' +makedepends=('python-setuptools' 'tauthon-setuptools') +source=("https://pypi.io/packages/source/z/zope.interface/zope.interface-$pkgver.tar.gz") +sha512sums=('ef15d63397e05ad9fc44b2d5d786b0399b6973bb5f4866fab839ff612756f3157f2099d0f5c0469b574a5c8b5920a7c2a5c6eab8e8f84c24d5c43e816669bffe') + +prepare() { + cp -a zope.interface-${pkgver}{,-py2} +} + +build() { + cd "$srcdir"/zope.interface-$pkgver + python setup.py build + + cd "$srcdir"/zope.interface-$pkgver-py2 + tauthon setup.py build +} + +package_python-zope-interface() { + pkgdesc="Zope Interfaces for Python" + depends=('python') + + cd zope.interface-$pkgver + python setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE.txt -t $pkgdir/usr/share/licenses/$pkgname +} + +package_tauthon-zope-interface(){ + pkgdesc="Zope Interfaces for tauthon" + depends=('tauthon') + + cd zope.interface-$pkgver-py2 + tauthon setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE.txt -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/python/PKGBUILD b/python/PKGBUILD new file mode 100644 index 0000000..af42c49 --- /dev/null +++ b/python/PKGBUILD @@ -0,0 +1,122 @@ +# Maintainer: Jesus E. + +pkgname=python +pkgver=3.8.5 +_debver=$pkgver +_debrel=1 +pkgrel=3 +_pybasever=${pkgver%.*} +pkgdesc="Next generation of the python high-level scripting language" +arch=('i686' 'x86_64') +license=('Python') +url="https://www.python.org/" +depends=('expat' 'bzip2' 'gdbm' 'libressl' 'libffi' 'libxcrypt' 'zlib') +makedepends=('tk' 'sqlite' 'mpdecimal' 'quilt') +optdepends=('sqlite: for a default database integration' + 'mpdecimal: for decimal' + 'xz: for lzma' + 'tk: for tkinter') +provides=('python3') +replaces=('python3') +source=("https://www.python.org/ftp/python/${pkgver%rc*}/Python-${pkgver}.tar.xz"{,.asc} + "https://repo.hyperbola.info:50000/sources/${pkgname}/python3.8_$_debver-$_debrel.debian.tar.xz"{,.sig}) +sha512sums=('460cee65d7df7150694590575502d7f22e548ebfc99c8f8b363eef8bf30ee72e58d8ffacb1d607824f877f880eb9fd6775a508388029583e1e1df3380f3f9587' + 'SKIP' + '9540848f66c03c0e6ca289ca5b4aeefc41e04b199a3e073509eb23d8095814a39aa3f835d4e495656ff6fe3a6f942c44755d2d34fcd77f002a2bc13aac239125' + 'SKIP') +validpgpkeys=('0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D' # Ned Deily (Python release signing key) + 'E3FF2839C048B25C084DEBE9B26995E310250568' # Ĺukasz Langa (GPG langa.pl) + 'C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd Python-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/arm-alignment.diff || true + rm -v debian/patches/bdist-wininst-notfound.diff || true + rm -v debian/patches/ctypes-arm.diff || true + rm -v debian/patches/deb-locations.diff || true + rm -v debian/patches/deb-setup.diff || true + rm -v debian/patches/distutils-install-layout.diff || true + rm -v debian/patches/distutils-link.diff || true + rm -v debian/patches/distutils-sysconfig.diff || true + rm -v debian/patches/doc-build-texinfo.diff || true + rm -v debian/patches/ensurepip-disabled.diff || true + rm -v debian/patches/ensurepip-wheels.diff || true + rm -v debian/patches/ext-no-libpython-link.diff || true + rm -v debian/patches/gdbm-import.diff || true + rm -v debian/patches/git-updates.diff || true + rm -v debian/patches/hurd_kfreebsd_thread_native_id.diff || true + rm -v debian/patches/langpack-gettext.diff || true + rm -v debian/patches/lib-argparse.diff || true + rm -v debian/patches/lib2to3-no-pickled-grammar.diff || true + rm -v debian/patches/local-doc-references.diff || true + rm -v debian/patches/multiarch-extname.diff || true + rm -v debian/patches/multiarch.diff || true + rm -v debian/patches/pydoc-use-pager.diff || true + rm -v debian/patches/sysconfig-debian-schemes.diff || true + rm -v debian/patches/sysconfigdata-name.diff || true + rm -v debian/patches/tkinter-import.diff || true + + quilt push -av + fi + + # FS#23997 + sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python|" Lib/cgi.py + + # Ensure that we are using the system copy of various libraries (expat, libffi, and libmpdec), + # rather than copies shipped in the tarball + rm -r Modules/expat + rm -r Modules/_ctypes/{darwin,libffi}* + rm -r Modules/_decimal/libmpdec +} + +build() { + cd Python-${pkgver} + + # Disable bundled pip & setuptools + ./configure --prefix=/usr \ + --enable-shared \ + --with-computed-gotos \ + --enable-optimizations \ + --with-lto \ + --enable-ipv6 \ + --with-system-expat \ + --with-dbmliborder=gdbm:ndbm \ + --with-system-ffi \ + --with-system-libmpdec \ + --enable-loadable-sqlite-extensions \ + --without-ensurepip +} + +package() { + cd Python-${pkgver} + + # Hack to avoid building again + sed -i 's/^all:.*$/all: build_all/' Makefile + + make DESTDIR="${pkgdir}" EXTRA_CFLAGS="$CFLAGS" install + + # Why are these not done by default... + ln -s python3 "${pkgdir}"/usr/bin/python + ln -s python3-config "${pkgdir}"/usr/bin/python-config + ln -s idle3 "${pkgdir}"/usr/bin/idle + ln -s pydoc3 "${pkgdir}"/usr/bin/pydoc + ln -s python${_pybasever}.1 "${pkgdir}"/usr/share/man/man1/python.1 + + # some useful "stuff" FS#46146 + install -dm755 "${pkgdir}"/usr/lib/python${_pybasever}/Tools/{i18n,scripts} + install -m755 Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}"/usr/lib/python${_pybasever}/Tools/i18n/ + install -m755 Tools/scripts/{README,*py} "${pkgdir}"/usr/lib/python${_pybasever}/Tools/scripts/ + + # License + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/pyzor/PKGBUILD b/pyzor/PKGBUILD new file mode 100644 index 0000000..2dd23cd --- /dev/null +++ b/pyzor/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=pyzor +pkgver=1.0.0 +_taggedver=1-0-0 +pkgrel=1 +pkgdesc="Detect and block spam using identifying digests of messages." +arch=('any') +url='https://github.com/SpamExperts/pyzor' +license=('GPL-2') +depends=('python') +makedepends=('python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/SpamExperts/pyzor/archive/refs/tags/release-${_taggedver}.tar.gz") +sha512sums=('b3fb8b2c5261e187a2ab3a5a3b12d221df7de08766c6bb2ad9990c0f23517534871ecc9d5ad529e79b0d0aef8b2b800728320c57435a8c0d8c3f80a4ba0f7e4a') + +prepare() { + mv "${pkgname}-release-${_taggedver}" "${pkgname}-${pkgver}" +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + python setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/qbe/PKGBUILD b/qbe/PKGBUILD new file mode 100644 index 0000000..0cb9591 --- /dev/null +++ b/qbe/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=qbe +pkgver=1.1 +pkgrel=1 +pkgdesc="Small and free software embeddable C compiler backend" +arch=('i686' 'x86_64') +url='https://c9x.me/compile/' +license=('Expat') +depends=('glibc') +source=("https://c9x.me/compile/release/${pkgname}-${pkgver}.tar.xz") +sha512sums=('1e5d7d1df3d73849dbf19dd1d84c9bba63a5041622823a5a239496032f9d82bd1640dd2bbd03e28c8a180b8e66a1fe10deb940b5d8fde996bf593f7e8d943e8b') + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" PREFIX=/usr install + + # documentation + install -vDm644 -t "$pkgdir/usr/share/doc/$pkgname" doc/* + + # license + install -vDm644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE +} diff --git a/qbs/PKGBUILD b/qbs/PKGBUILD new file mode 100644 index 0000000..1c6b9c5 --- /dev/null +++ b/qbs/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=qbs +pkgver=1.18.0 +_debver=1.18.0 +_debrel=5 +pkgrel=1 +pkgdesc="Cross platform build tool" +arch=('i686' 'x86_64') +url='https://wiki.qt.io/Qbs' +license=('LGPL-3') +depends=('qt-script') +makedepends=('cmake' 'quilt') +source=(https://download.qt.io/official_releases/qbs/$pkgver/qbs-src-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/q/qbs/qbs_$_debver-$_debrel.debian.tar.xz) +sha512sums=('bdef30200c7e74749c363b1d68232fd90d1dfc998722bee0e058ffcaff8e003599e0404b49f86cbeae098d59ccb5663316db5094d77b50a217fcf4ab5ae64d83' + '977db7c59fdb3e56b0477b62cfeb3fc1a4dd9b6e0c7c8783594f2f29948482a608486da43cffa8c5cc67956a21153d1d71802a9989744dc81725f88cc59e9c03') + +prepare() { + cd $pkgname-src-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $pkgname-src-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DWITH_TESTS=OFF \ + -DQBS_LIBEXEC_INSTALL_DIR=lib/qbs + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -Dm644 "$srcdir/$pkgname-src-$pkgver/LICENSE.LGPLv3" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/qemu-legacy/65-kvm.rules b/qemu-legacy/65-kvm.rules new file mode 100644 index 0000000..569ded9 --- /dev/null +++ b/qemu-legacy/65-kvm.rules @@ -0,0 +1,2 @@ +KERNEL=="kvm", GROUP="kvm", MODE="0660" +KERNEL=="vhost-net", GROUP="kvm", MODE="0660", TAG+="uaccess", OPTIONS+="static_node=vhost-net" diff --git a/qemu-legacy/PKGBUILD b/qemu-legacy/PKGBUILD new file mode 100644 index 0000000..e2523b2 --- /dev/null +++ b/qemu-legacy/PKGBUILD @@ -0,0 +1,248 @@ +# Maintainer: Jesus E. + +pkgbase=qemu-legacy +pkgname=(qemu-legacy qemu-headless-legacy qemu-arch-extra-legacy qemu-headless-arch-extra-legacy + qemu-block-iscsi-legacy qemu-guest-agent-legacy) +pkgdesc="A generic and free machine emulator and virtualizer (legacy version)" +pkgver=5.2.0 +_debver=5.2 +_debrel=11 +pkgrel=1 +arch=(i686 x86_64) +license=(GPL-2 LGPL-2.1) +url='https://wiki.qemu.org/' +_headlessdeps=(seabios gnutls libpng libaio numactl libnfs + lzo snappy curl vde2 libcap-ng spice usbredir libslirp + libssh dtc libseccomp libsndio sdl2 virglrenderer) +depends=(vte "${_headlessdeps[@]}") +makedepends=(spice-protocol python libiscsi python-sphinx xfsprogs ninja quilt) +source=("https://wiki.qemu.org/download/qemu-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/q/qemu/qemu_${_debver}+dfsg-${_debrel}+deb11u3.debian.tar.xz" + "65-kvm.rules" + "sndio.patch" + "qemu-ga.initd" + "qemu-ga.conf" + "qemu-ga.run") +sha512sums=('f0c450a2a4723c33473e5af5a51b0c006fe04685758863b076f2cf11352c08a0693650579811667f6411f7e572c92892624390a0f26878b08419d79c15ff0e86' + '295be9761eb6c1aa9f2dd86eb81b53791010af41da89adf062011724b6c5ea5bcc4c5a9c7f968472e7c7d6a582e2f485663b357c0013309bd7d618165ba94ad1' + '13a097ee0ac9f740ad3de8d24c71bdb9a655dc18e3afc1bac990643a120a3ec9de45be887a89ef840e5a88c2f4dc8e3a3a435fd3185b1884d57d6c292864e7c5' + 'a42221d80b89020d0067d80908a62de0fa3ef0f012a8497b275d1bde055b4caf215b4afc17c8d8ace37a02742694a1c89873d18678e0d16e69e47840c169ace9' + '2ca4d73b79871d5f25d4630e09341847df7ed86867a0340af5d4deb88a7d653f694767acdb95a336aadd722b109f39b93e59bc268bf476748d65175c55010afb' + '00b4f6774fd6f864344bc087ff0fafdd485293527db2a4bef0ca2ba37639383f56977c794687c345b705462c2ad442062205938ec9e5e79647aeba2f9f530537' + '70654a9f14c6fec9b8a07ba26a2b0405ad560a405f4c86607e5d08a39a0395bc8f03c1d463d42bc42dca2cc95e4f0cbf34d0e4eb74717740b2679ff6cf0985f6') + +case $CARCH in + i?86) _corearch=i386 ;; + x86_64) _corearch=x86_64 ;; +esac + +prepare() { + mkdir build-{full,headless} + mkdir -p extra-arch-{full,headless}/usr/{bin,share/qemu} + + cd qemu-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%+*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/skip-meson-pc-bios.diff || true + + quilt push -av + fi + + patch -p1 < $srcdir/sndio.patch +} + +build() { + _build full \ + --audio-drv-list="sndio alsa sdl" + + _build headless \ + --audio-drv-list="sndio alsa sdl" \ + --disable-gtk \ + --disable-vte +} + +_build() ( + cd build-$1 + + ../qemu-${pkgver}/configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/libexec/qemu \ + --smbd=/usr/sbin/smbd \ + --enable-modules \ + --enable-sdl \ + --enable-slirp=system \ + --enable-xfsctl \ + --disable-smartcard \ + "${@:2}" + + ninja +) + +package_qemu-legacy() { + optdepends=('qemu-arch-extra-legacy: extra architectures support' + 'sndio: audio and MIDI server support') + provides=(qemu-headless-legacy) + conflicts=(qemu-headless-legacy) + replaces=(qemu-kvm) + + _package full + + for i in COPYING{,.LIB} LICENSE; do + install -Dm644 "$srcdir/qemu-$pkgver/$i" "$pkgdir/usr/share/licenses/$pkgname/$i" + done +} + +package_qemu-headless-legacy() { + pkgdesc="QEMU without GUI (legacy version)" + depends=("${_headlessdeps[@]}") + optdepends=('qemu-headless-arch-extra-legacy: extra architectures support' + 'sndio: audio and MIDI server support') + + _package headless + + for i in COPYING{,.LIB} LICENSE; do + install -Dm644 "$srcdir/qemu-$pkgver/$i" "$pkgdir/usr/share/licenses/$pkgname/$i" + done +} + +_package() { + optdepends+=('samba: SMB/CIFS server support' + 'qemu-block-iscsi-legacy: iSCSI block support') + install=qemu.install + options=(!strip !emptydirs) + + DESTDIR="$pkgdir" ninja -C build-$1 install "${@:2}" + + # udev rules + install -Dm644 65-kvm.rules "$pkgdir/lib/udev/rules.d/65-kvm.rules" + + # remove conflicting /var/run directory + cd "$pkgdir" + rm -r var + + cd usr/lib + + # bridge_helper needs suid + # https://bugs.archlinux.org/task/32565 + chmod u+s ../libexec/qemu/qemu-bridge-helper + + # remove split block modules + rm qemu/block-iscsi.so + + cd ../bin + + # remove extra arch + for _bin in qemu-*; do + [[ -f $_bin ]] || continue + + case ${_bin#qemu-} in + # guest agent + ga) rm "$_bin"; continue ;; + + # tools + edid|img|io|keymap|nbd|pr-helper|storage-daemon) continue ;; + + # core emu + system-${_corearch}) continue ;; + esac + + mv "$_bin" "$srcdir/extra-arch-$1/usr/bin" + done + + cd ../share/qemu + for _blob in *; do + [[ -f $_blob ]] || continue + + case $_blob in + # provided by seabios package + bios.bin|bios-256k.bin|vgabios-cirrus.bin|vgabios-qxl.bin|\ + vgabios-stdvga.bin|vgabios-vmware.bin|vgabios-virtio.bin|vgabios-bochs-display.bin|\ + vgabios-ramfb.bin) rm "$_blob"; continue ;; + + # provided by edk2-ovmf package + edk2-*) rm "$_blob"; continue ;; + + # iPXE ROMs + efi-*|pxe-*) continue ;; + + # core blobs + bios-microvm.bin|kvmvapic.bin|linuxboot*|multiboot.bin|sgabios.bin|vgabios*) continue ;; + + # Trace events definitions + trace-events*) continue ;; + esac + + mv "$_blob" "$srcdir/extra-arch-$1/usr/share/qemu" + done + + # provided by edk2-ovmf package + rm -r firmware + + cd .. + if [ "$1" = headless ]; then rm -r {applications,icons}; fi +} + +package_qemu-arch-extra-legacy() { + pkgdesc="QEMU for foreign architectures (legacy version)" + depends=(qemu-legacy) + provides=(qemu-headless-arch-extra-legacy) + conflicts=(qemu-headless-arch-extra-legacy) + options=(!strip) + + mv extra-arch-full/usr "$pkgdir" + + for i in COPYING{,.LIB} LICENSE; do + install -Dm644 "$srcdir/qemu-$pkgver/$i" "$pkgdir/usr/share/licenses/$pkgname/$i" + done +} + +package_qemu-headless-arch-extra-legacy() { + pkgdesc="QEMU without GUI, for foreign architectures (legacy version)" + depends=(qemu-headless-legacy) + options=(!strip) + + mv extra-arch-headless/usr "$pkgdir" + + for i in COPYING{,.LIB} LICENSE; do + install -Dm644 "$srcdir/qemu-$pkgver/$i" "$pkgdir/usr/share/licenses/$pkgname/$i" + done +} + +package_qemu-block-iscsi-legacy() { + pkgdesc="QEMU iSCSI block module (legacy version)" + depends=(glib2 libiscsi) + + install -D build-full/block-iscsi.so "$pkgdir/usr/lib/qemu/block-iscsi.so" + + for i in COPYING{,.LIB} LICENSE; do + install -Dm644 "$srcdir/qemu-$pkgver/$i" "$pkgdir/usr/share/licenses/$pkgname/$i" + done +} + +package_qemu-guest-agent-legacy() { + pkgdesc="QEMU Guest Agent (legacy version)" + depends=(gcc-libs glib2 libeudev) + backup=(etc/sv/qemu-ga/conf) + + install -D build-full/qga/qemu-ga "$pkgdir/usr/sbin/qemu-ga" + install -Dm755 "$srcdir/qemu-$pkgver/scripts/qemu-guest-agent/fsfreeze-hook" "$pkgdir/etc/qemu/fsfreeze-hook" + + install -Dm755 "$srcdir/qemu-ga.initd" "$pkgdir/etc/init.d/qemu-ga" + + install -Dm644 "$srcdir/qemu-ga.conf" "$pkgdir/etc/sv/qemu-ga/conf" + install -Dm755 "$srcdir/qemu-ga.run" "$pkgdir/etc/sv/qemu-ga/run" + + for i in COPYING{,.LIB} LICENSE; do + install -Dm644 "$srcdir/qemu-$pkgver/$i" "$pkgdir/usr/share/licenses/$pkgname/$i" + done +} diff --git a/qemu-legacy/qemu-ga.conf b/qemu-legacy/qemu-ga.conf new file mode 100644 index 0000000..a9605c5 --- /dev/null +++ b/qemu-legacy/qemu-ga.conf @@ -0,0 +1 @@ +OPTS="" diff --git a/qemu-legacy/qemu-ga.initd b/qemu-legacy/qemu-ga.initd new file mode 100644 index 0000000..13264d3 --- /dev/null +++ b/qemu-legacy/qemu-ga.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 2017-2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="QEMU Guest Agent service" + +command="/usr/sbin/qemu-ga" +command_args="-d" +pidfile="/var/run/qemu-ga.pid" + +depend() { + need localmount +} diff --git a/qemu-legacy/qemu-ga.run b/qemu-legacy/qemu-ga.run new file mode 100644 index 0000000..4db20bf --- /dev/null +++ b/qemu-legacy/qemu-ga.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r conf ] && . ./conf +exec qemu-ga ${OPTS} diff --git a/qemu-legacy/qemu.install b/qemu-legacy/qemu.install new file mode 100644 index 0000000..63430f3 --- /dev/null +++ b/qemu-legacy/qemu.install @@ -0,0 +1,21 @@ +post_install() { + if ! getent group kvm &>/dev/null; then + groupadd kvm -f -g 78 >/dev/null + fi + + # trigger events on modules files when already loaded + for _f in /sys/devices/virtual/misc/{kvm,vhost-net}; do + [[ -e "$_f" ]] && udevadm trigger "$_f" + done + : +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent group kvm &>/dev/null; then + groupdel kvm >/dev/null + fi +} diff --git a/qemu-legacy/sndio.patch b/qemu-legacy/sndio.patch new file mode 100644 index 0000000..aaa51be --- /dev/null +++ b/qemu-legacy/sndio.patch @@ -0,0 +1,781 @@ +diff --git a/audio/audio.c b/audio/audio.c +index 46578e4..dd38f4b 100644 +--- a/audio/audio.c ++++ b/audio/audio.c +@@ -2027,6 +2027,7 @@ void audio_create_pdos(Audiodev *dev) + CASE(OSS, oss, Oss); + CASE(PA, pa, Pa); + CASE(SDL, sdl, ); ++ CASE(SNDIO, sndio, ); + CASE(SPICE, spice, ); + CASE(WAV, wav, ); + +diff --git a/audio/audio_template.h b/audio/audio_template.h +index 8dd48ce..f2dd279 100644 +--- a/audio/audio_template.h ++++ b/audio/audio_template.h +@@ -338,6 +338,8 @@ AudiodevPerDirectionOptions *glue(audio_get_pdo_, TYPE)(Audiodev *dev) + return qapi_AudiodevPaPerDirectionOptions_base(dev->u.pa.TYPE); + case AUDIODEV_DRIVER_SDL: + return dev->u.sdl.TYPE; ++ case AUDIODEV_DRIVER_SNDIO: ++ return dev->u.sndio.TYPE; + case AUDIODEV_DRIVER_SPICE: + return dev->u.spice.TYPE; + case AUDIODEV_DRIVER_WAV: +diff --git a/audio/meson.build b/audio/meson.build +index 7d53b0f..c992d8a 100644 +--- a/audio/meson.build ++++ b/audio/meson.build +@@ -17,6 +17,7 @@ foreach m : [ + ['CONFIG_AUDIO_OSS', 'oss', oss, 'ossaudio.c'], + ['CONFIG_AUDIO_PA', 'pa', pulse, 'paaudio.c'], + ['CONFIG_AUDIO_SDL', 'sdl', sdl, 'sdlaudio.c'], ++ ['CONFIG_AUDIO_SNDIO', 'sndio', sndio, 'sndioaudio.c'], + ['CONFIG_AUDIO_JACK', 'jack', jack, 'jackaudio.c'], + ['CONFIG_SPICE', 'spice', spice, 'spiceaudio.c'] + ] +diff --git b/audio/sndioaudio.c b/audio/sndioaudio.c +new file mode 100644 +index 0000000..204af07 +--- /dev/null ++++ b/audio/sndioaudio.c +@@ -0,0 +1,555 @@ ++/* ++ * Copyright (c) 2019 Alexandre Ratchov ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++/* ++ * TODO : ++ * ++ * Use a single device and open it in full-duplex rather than ++ * opening it twice (once for playback once for recording). ++ * ++ * This is the only way to ensure that playback doesn't drift with respect ++ * to recording, which is what guest systems expect. ++ */ ++ ++#include ++#include ++#include "qemu/osdep.h" ++#include "qemu-common.h" ++#include "qemu/main-loop.h" ++#include "audio.h" ++#include "trace.h" ++ ++#define AUDIO_CAP "sndio" ++#include "audio_int.h" ++ ++/* default latency in ms if no option is set */ ++#define SNDIO_LATENCY_US 50000 ++ ++typedef struct SndioVoice { ++ union { ++ HWVoiceOut out; ++ HWVoiceIn in; ++ } hw; ++ struct sio_par par; ++ struct sio_hdl *hdl; ++ struct pollfd *pfds; ++ struct pollindex { ++ struct SndioVoice *self; ++ int index; ++ } *pindexes; ++ unsigned char *buf; ++ size_t buf_size; ++ size_t sndio_pos; ++ size_t qemu_pos; ++ unsigned int mode; ++ unsigned int nfds; ++} SndioVoice; ++ ++typedef struct SndioConf { ++ const char *devname; ++ unsigned int latency; ++} SndioConf; ++ ++/* needed for forward reference */ ++static void sndio_poll_in(void *arg); ++static void sndio_poll_out(void *arg); ++ ++/* ++ * stop polling descriptors ++ */ ++static void sndio_poll_clear(SndioVoice *self) ++{ ++ struct pollfd *pfd; ++ int i; ++ ++ for (i = 0; i < self->nfds; i++) { ++ pfd = &self->pfds[i]; ++ qemu_set_fd_handler (pfd->fd, NULL, NULL, NULL); ++ } ++ ++ self->nfds = 0; ++} ++ ++/* ++ * write data to the device until it blocks or ++ * all of our buffered data is written ++ */ ++static void sndio_write(SndioVoice *self) ++{ ++ size_t todo, n; ++ ++ todo = self->qemu_pos - self->sndio_pos; ++ ++ /* ++ * transfer data to device, until it blocks ++ */ ++ while (todo > 0) { ++ n = sio_write(self->hdl, self->buf + self->sndio_pos, todo); ++ if (n == 0) { ++ break; ++ } ++ self->sndio_pos += n; ++ todo -= n; ++ } ++ ++ if (self->sndio_pos == self->buf_size) { ++ /* ++ * we complete the block ++ */ ++ self->sndio_pos = 0; ++ self->qemu_pos = 0; ++ } ++} ++ ++/* ++ * read data from the device until it blocks or ++ * there no room any longer ++ */ ++static void sndio_read(SndioVoice *self) ++{ ++ size_t todo, n; ++ ++ todo = self->buf_size - self->sndio_pos; ++ ++ /* ++ * transfer data from the device, until it blocks ++ */ ++ while (todo > 0) { ++ n = sio_read(self->hdl, self->buf + self->sndio_pos, todo); ++ if (n == 0) { ++ break; ++ } ++ self->sndio_pos += n; ++ todo -= n; ++ } ++} ++ ++/* ++ * Set handlers for all descriptors libsndio needs to ++ * poll ++ */ ++static void sndio_poll_wait(SndioVoice *self) ++{ ++ struct pollfd *pfd; ++ int events, i; ++ ++ events = 0; ++ if (self->mode == SIO_PLAY) { ++ if (self->sndio_pos < self->qemu_pos) { ++ events |= POLLOUT; ++ } ++ } else { ++ if (self->sndio_pos < self->buf_size) { ++ events |= POLLIN; ++ } ++ } ++ ++ /* ++ * fill the given array of descriptors with the events sndio ++ * wants, they are different from our 'event' variable because ++ * sndio may use descriptors internally. ++ */ ++ self->nfds = sio_pollfd(self->hdl, self->pfds, events); ++ ++ for (i = 0; i < self->nfds; i++) { ++ pfd = &self->pfds[i]; ++ if (pfd->fd < 0) { ++ continue; ++ } ++ qemu_set_fd_handler(pfd->fd, ++ (pfd->events & POLLIN) ? sndio_poll_in : NULL, ++ (pfd->events & POLLOUT) ? sndio_poll_out : NULL, ++ &self->pindexes[i]); ++ pfd->revents = 0; ++ } ++} ++ ++/* ++ * call-back called when one of the descriptors ++ * became readable or writable ++ */ ++static void sndio_poll_event(SndioVoice *self, int index, int event) ++{ ++ int revents; ++ ++ /* ++ * ensure we're not called twice this cycle ++ */ ++ sndio_poll_clear(self); ++ ++ /* ++ * make self->pfds[] look as we're returning from poll syscal, ++ * this is how sio_revents expects events to be. ++ */ ++ self->pfds[index].revents = event; ++ ++ /* ++ * tell sndio to handle events and return whether we can read or ++ * write without blocking. ++ */ ++ revents = sio_revents(self->hdl, self->pfds); ++ if (self->mode == SIO_PLAY) { ++ if (revents & POLLOUT) { ++ sndio_write(self); ++ } ++ ++ if (self->qemu_pos < self->buf_size) { ++ audio_run(self->hw.out.s, "sndio_out"); ++ } ++ } else { ++ if (revents & POLLIN) { ++ sndio_read(self); ++ } ++ ++ if (self->qemu_pos < self->sndio_pos) { ++ audio_run(self->hw.in.s, "sndio_in"); ++ } ++ } ++ ++ sndio_poll_wait(self); ++} ++ ++/* ++ * return a buffer where data to play can be stored, ++ * its size is stored in the location pointed by the size argument. ++ */ ++static void *sndio_get_buffer_out(HWVoiceOut *hw, size_t *size) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ /* size is not set by the caller */ ++ *size = self->buf_size - self->qemu_pos; ++ return self->buf + self->qemu_pos; ++} ++ ++/* ++ * return a buffer where data to play can be stored ++ */ ++static size_t sndio_put_buffer_out(HWVoiceOut *hw, void *buf, size_t size) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ self->qemu_pos += size; ++ sndio_poll_wait(self); ++ return size; ++} ++ ++/* ++ * return a buffer from where recorded data is available, ++ * its size is stored in the location pointed by the size argument. ++ * it may not exceed the initial value of "*size". ++ */ ++static void *sndio_get_buffer_in(HWVoiceIn *hw, size_t *size) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ size_t todo, max_todo; ++ ++ /* ++ * unlike the get_buffer_out() method, get_buffer_in() ++ * must return a buffer of at most the given size, see audio.c ++ */ ++ max_todo = *size; ++ ++ todo = self->sndio_pos - self->qemu_pos; ++ if (todo > max_todo) { ++ todo = max_todo; ++ } ++ ++ *size = todo; ++ return self->buf + self->qemu_pos; ++} ++ ++/* ++ * discard the given amount of recorded data ++ */ ++static void sndio_put_buffer_in(HWVoiceIn *hw, void *buf, size_t size) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ self->qemu_pos += size; ++ if (self->qemu_pos == self->buf_size) { ++ self->qemu_pos = 0; ++ self->sndio_pos = 0; ++ } ++ sndio_poll_wait(self); ++} ++ ++/* ++ * call-back called when one of our descriptors becomes writable ++ */ ++static void sndio_poll_out(void *arg) ++{ ++ struct pollindex *pindex = (struct pollindex *) arg; ++ ++ sndio_poll_event(pindex->self, pindex->index, POLLOUT); ++} ++ ++/* ++ * call-back called when one of our descriptors becomes readable ++ */ ++static void sndio_poll_in(void *arg) ++{ ++ struct pollindex *pindex = (struct pollindex *) arg; ++ ++ sndio_poll_event(pindex->self, pindex->index, POLLIN); ++} ++ ++static void sndio_fini(SndioVoice *self) ++{ ++ if (self->hdl) { ++ sio_close(self->hdl); ++ self->hdl = NULL; ++ } ++ ++ g_free(self->pfds); ++ g_free(self->pindexes); ++ g_free(self->buf); ++} ++ ++static int sndio_init(SndioVoice *self, ++ struct audsettings *as, int mode, Audiodev *dev) ++{ ++ AudiodevSndioOptions *opts = &dev->u.sndio; ++ unsigned long long latency; ++ const char *dev_name; ++ struct sio_par req; ++ unsigned int nch; ++ int i, nfds; ++ ++ dev_name = opts->has_dev ? opts->dev : SIO_DEVANY; ++ latency = opts->has_latency ? opts->latency : SNDIO_LATENCY_US; ++ ++ /* open the device in non-blocking mode */ ++ self->hdl = sio_open(dev_name, mode, 1); ++ if (self->hdl == NULL) { ++ dolog("failed to open device\n"); ++ return -1; ++ } ++ ++ self->mode = mode; ++ ++ sio_initpar(&req); ++ ++ switch (as->fmt) { ++ case AUDIO_FORMAT_S8: ++ req.bits = 8; ++ req.sig = 1; ++ break; ++ case AUDIO_FORMAT_U8: ++ req.bits = 8; ++ req.sig = 0; ++ break; ++ case AUDIO_FORMAT_S16: ++ req.bits = 16; ++ req.sig = 1; ++ break; ++ case AUDIO_FORMAT_U16: ++ req.bits = 16; ++ req.sig = 0; ++ break; ++ case AUDIO_FORMAT_S32: ++ req.bits = 32; ++ req.sig = 1; ++ break; ++ case AUDIO_FORMAT_U32: ++ req.bits = 32; ++ req.sig = 0; ++ default: ++ dolog("unknown audio sample format\n"); ++ return -1; ++ } ++ ++ if (req.bits > 8) { ++ req.le = as->endianness ? 0 : 1; ++ } ++ ++ req.rate = as->freq; ++ if (mode == SIO_PLAY) { ++ req.pchan = as->nchannels; ++ } else { ++ req.rchan = as->nchannels; ++ } ++ ++ /* set on-device buffer size */ ++ req.appbufsz = req.rate * latency / 1000000; ++ ++ if (!sio_setpar(self->hdl, &req)) { ++ dolog("failed set audio params\n"); ++ goto fail; ++ } ++ ++ if (!sio_getpar(self->hdl, &self->par)) { ++ dolog("failed get audio params\n"); ++ goto fail; ++ } ++ ++ nch = (mode == SIO_PLAY) ? self->par.pchan : self->par.rchan; ++ ++ /* ++ * With the default setup, sndio supports any combination of parameters ++ * so these checks are mostly to catch configuration errors. ++ */ ++ if (self->par.bits != req.bits || self->par.bps != req.bits / 8 || ++ self->par.sig != req.sig || (req.bits > 8 && self->par.le != req.le) || ++ self->par.rate != as->freq || nch != as->nchannels) { ++ dolog("unsupported audio params\n"); ++ goto fail; ++ } ++ ++ /* ++ * we use one block as buffer size; this is how ++ * transfers get well aligned ++ */ ++ self->buf_size = self->par.round * self->par.bps * nch; ++ ++ self->buf = g_malloc(self->buf_size); ++ if (self->buf == NULL) { ++ dolog("failed to allocate audio buffer\n"); ++ goto fail; ++ } ++ ++ nfds = sio_nfds(self->hdl); ++ ++ self->pfds = g_malloc_n(nfds, sizeof(struct pollfd)); ++ if (self->pfds == NULL) { ++ dolog("failed to allocate pollfd structures\n"); ++ goto fail; ++ } ++ ++ self->pindexes = g_malloc_n(nfds, sizeof(struct pollindex)); ++ if (self->pindexes == NULL) { ++ dolog("failed to allocate pollindex structures\n"); ++ goto fail; ++ } ++ ++ for (i = 0; i < nfds; i++) { ++ self->pindexes[i].self = self; ++ self->pindexes[i].index = i; ++ } ++ ++ return 0; ++fail: ++ sndio_fini(self); ++ return -1; ++} ++ ++static void sndio_enable(SndioVoice *self, bool enable) ++{ ++ if (enable) { ++ sio_start(self->hdl); ++ sndio_poll_wait(self); ++ } else { ++ sndio_poll_clear(self); ++ sio_stop(self->hdl); ++ } ++} ++ ++static void sndio_enable_out(HWVoiceOut *hw, bool enable) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ return sndio_enable(self, enable); ++} ++ ++static void sndio_enable_in(HWVoiceIn *hw, bool enable) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ return sndio_enable(self, enable); ++} ++ ++static int sndio_init_out(HWVoiceOut *hw, struct audsettings *as, void *opaque) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ if (sndio_init(self, as, SIO_PLAY, opaque) == -1) { ++ return -1; ++ } ++ ++ audio_pcm_init_info(&hw->info, as); ++ hw->samples = self->par.round; ++ return 0; ++} ++ ++static int sndio_init_in(HWVoiceIn *hw, struct audsettings *as, void *opaque) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ if (sndio_init(self, as, SIO_REC, opaque) == -1) { ++ return -1; ++ } ++ ++ audio_pcm_init_info(&hw->info, as); ++ hw->samples = self->par.round; ++ return 0; ++} ++ ++static void sndio_fini_out(HWVoiceOut *hw) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ return sndio_fini(self); ++} ++ ++static void sndio_fini_in(HWVoiceIn *hw) ++{ ++ SndioVoice *self = (SndioVoice *) hw; ++ ++ return sndio_fini(self); ++} ++ ++static void *sndio_audio_init(Audiodev *dev) ++{ ++ assert(dev->driver == AUDIODEV_DRIVER_SNDIO); ++ return dev; ++} ++ ++static void sndio_audio_fini(void *opaque) ++{ ++} ++ ++static struct audio_pcm_ops sndio_pcm_ops = { ++ .init_out = sndio_init_out, ++ .fini_out = sndio_fini_out, ++ .enable_out = sndio_enable_out, ++ .get_buffer_out = sndio_get_buffer_out, ++ .put_buffer_out = sndio_put_buffer_out, ++ .init_in = sndio_init_in, ++ .fini_in = sndio_fini_in, ++ .enable_in = sndio_enable_in, ++ .get_buffer_in = sndio_get_buffer_in, ++ .put_buffer_in = sndio_put_buffer_in, ++}; ++ ++static struct audio_driver sndio_audio_driver = { ++ .name = "sndio", ++ .descr = "https://man.openbsd.org/sndio", ++ .init = sndio_audio_init, ++ .fini = sndio_audio_fini, ++ .pcm_ops = &sndio_pcm_ops, ++ .can_be_default = 1, ++ .max_voices_out = INT_MAX, ++ .max_voices_in = INT_MAX, ++ .voice_size_out = sizeof(SndioVoice), ++ .voice_size_in = sizeof(SndioVoice) ++}; ++ ++static void register_audio_sndio(void) ++{ ++ audio_driver_register(&sndio_audio_driver); ++} ++ ++type_init(register_audio_sndio); +diff --git a/configure b/configure +index 18c26e0..a06f64a 100755 +--- a/configure ++++ b/configure +@@ -756,8 +756,8 @@ NetBSD) + OpenBSD) + bsd="yes" + make="${MAKE-gmake}" +- audio_drv_list="try-sdl" +- audio_possible_drivers="sdl" ++ audio_drv_list="sndio" ++ audio_possible_drivers="sndio" + ;; + Darwin) + bsd="yes" +@@ -792,8 +792,8 @@ Haiku) + QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS" + ;; + Linux) +- audio_drv_list="try-pa oss" +- audio_possible_drivers="oss alsa sdl pa" ++ audio_drv_list="try-sndio oss" ++ audio_possible_drivers="oss alsa sdl sndio pa" + linux="yes" + linux_user="yes" + vhost_user="yes" +@@ -3381,6 +3381,24 @@ for drv in $audio_drv_list; do + fi + ;; + ++ sndio | try-sndio) ++ if $pkg_config sndio --exists; then ++ sndio=yes ++ sndio_libs=$($pkg_config sndio --libs) ++ sndio_cflags=$($pkg_config sndio --cflags) ++ if test "$drv" = "try-sndio"; then ++ audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sndio/sndio/') ++ fi ++ else ++ if test "$drv" = "try-sndio"; then ++ audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sndio//') ++ else ++ error_exit "$drv check failed" \ ++ "Make sure to have the $drv libs and headers installed." ++ fi ++ fi ++ ;; ++ + coreaudio) + coreaudio_libs="-framework CoreAudio" + ;; +@@ -5667,7 +5685,6 @@ write_c_skeleton + if test "$gcov" = "yes" ; then + : + elif test "$fortify_source" = "yes" ; then +- QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" + debug=no + fi + +@@ -6028,6 +6045,11 @@ echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak + echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak + echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak + echo "OSS_LIBS=$oss_libs" >> $config_host_mak ++if test "$sndio" = "yes" ; then ++ echo "CONFIG_SNDIO=y" >> $config_host_mak ++fi ++echo "SNDIO_LIBS=$sndio_libs" >> $config_host_mak ++echo "SNDIO_CFLAGS=$sndio_cflags" >> $config_host_mak + if test "$libjack" = "yes" ; then + echo "CONFIG_LIBJACK=y" >> $config_host_mak + fi +diff --git a/meson.build b/meson.build +index e338619..68c1320 100644 +--- a/meson.build ++++ b/meson.build +@@ -359,6 +359,11 @@ jack = not_found + if 'CONFIG_LIBJACK' in config_host + jack = declare_dependency(link_args: config_host['JACK_LIBS'].split()) + endif ++sndio = not_found ++if 'CONFIG_SNDIO' in config_host ++ sndio = declare_dependency(compile_args: config_host['SNDIO_CFLAGS'].split(), ++ link_args: config_host['SNDIO_LIBS'].split()) ++endif + spice = not_found + spice_headers = not_found + if 'CONFIG_SPICE' in config_host +@@ -509,7 +514,7 @@ if have_system and not get_option('curses').disabled() + endif + endif + if not curses.found() +- curses_compile_args = ['-DNCURSES_WIDECHAR'] ++ curses_compile_args = ['-D_XOPEN_SOURCE_EXTENDED -DNCURSES_WIDECHAR'] + has_curses_h = cc.has_header('curses.h', args: curses_compile_args) + if targetos != 'windows' and not has_curses_h + message('Trying with /usr/include/ncursesw') +@@ -2011,11 +2016,9 @@ if targetos == 'darwin' + endif + summary_info += {'ARFLAGS': config_host['ARFLAGS']} + summary_info += {'CFLAGS': ' '.join(get_option('c_args') +- + ['-O' + get_option('optimization')] + + (get_option('debug') ? ['-g'] : []))} + if link_language == 'cpp' + summary_info += {'CXXFLAGS': ' '.join(get_option('cpp_args') +- + ['-O' + get_option('optimization')] + + (get_option('debug') ? ['-g'] : []))} + endif + link_args = get_option(link_language + '_link_args') +diff --git a/qapi/audio.json b/qapi/audio.json +index 072ed79..0b3d6f3 100644 +--- a/qapi/audio.json ++++ b/qapi/audio.json +@@ -106,6 +106,28 @@ + '*threshold': 'uint32' } } + + ## ++# @AudiodevSndioOptions: ++# ++# Options of the sndio audio backend. ++# ++# @in: options of the capture stream ++# ++# @out: options of the playback stream ++# ++# @dev: the name of the sndio device to use (default 'default') ++# ++# @latency: play buffer size (in microseconds) ++# ++# Since: 5.0 ++## ++{ 'struct': 'AudiodevSndioOptions', ++ 'data': { ++ '*in': 'AudiodevPerDirectionOptions', ++ '*out': 'AudiodevPerDirectionOptions', ++ '*dev': 'str', ++ '*latency': 'uint32'} } ++ ++## + # @AudiodevCoreaudioPerDirectionOptions: + # + # Options of the Core Audio backend that are used for both playback and +@@ -356,7 +378,7 @@ + ## + { 'enum': 'AudiodevDriver', + 'data': [ 'none', 'alsa', 'coreaudio', 'dsound', 'jack', 'oss', 'pa', +- 'sdl', 'spice', 'wav' ] } ++ 'sdl', 'sndio', 'spice', 'wav' ] } + + ## + # @Audiodev: +@@ -386,5 +408,6 @@ + 'oss': 'AudiodevOssOptions', + 'pa': 'AudiodevPaOptions', + 'sdl': 'AudiodevGenericOptions', ++ 'sndio': 'AudiodevSndioOptions', + 'spice': 'AudiodevGenericOptions', + 'wav': 'AudiodevWavOptions' } } +diff --git a/qemu-options.hx b/qemu-options.hx +index 104632e..a611956 100644 +--- a/qemu-options.hx ++++ b/qemu-options.hx +@@ -582,6 +582,9 @@ DEF("audiodev", HAS_ARG, QEMU_OPTION_audiodev, + #ifdef CONFIG_AUDIO_SDL + "-audiodev sdl,id=id[,prop[=value][,...]]\n" + #endif ++#ifdef CONFIG_AUDIO_SNDIO ++ "-audiodev sndio,id=id[,prop[=value][,...]]\n" ++#endif + #ifdef CONFIG_SPICE + "-audiodev spice,id=id[,prop[=value][,...]]\n" + #endif +@@ -703,6 +706,11 @@ SRST + ``in|out.buffer-count=count`` + Sets the count of the buffers. + ++``-audiodev sndio,id=id[,prop[=value][,...]]`` ++ Creates a backend using SNDIO. This backend is available on ++ OpenBSD and most other Unix-like systems. This backend has no ++ backend specific properties. ++ + ``in|out.try-poll=on|of`` + Attempt to use poll mode with the device. Default is on. + diff --git a/qhull/PKGBUILD b/qhull/PKGBUILD new file mode 100644 index 0000000..453d0ba --- /dev/null +++ b/qhull/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=qhull +pkgver=2020.2 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="A general dimension code for computing convex hulls and related structures" +arch=('i686' 'x86_64') +url='http://www.qhull.org/' +license=('custom:Qhull') +depends=('glibc') +makedepends=('cmake' 'quilt') +source=("https://deb.debian.org/debian/pool/main/q/qhull/qhull_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/q/qhull/qhull_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('63d42442f1444ddb09a09680bfdb4d4ffd54295add31f19ec977c1a5bd02a74665f57fdb8503c882720a317cf741c8511b458dcc1ae0930cabe08069ba1496fd' + '14da9a6580bb2abc7e16cce7249f63290fd023cb93928c687ad7ded4cc0c2e9495dce51802fa5a80d5cb50f21e9d5272068144995e5b96103eb106ffff87393b') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_C_FLAGS="$CFLAGS -ffat-lto-objects" \ + -DCMAKE_CXX_FLAGS="$CXXFLAGS -ffat-lto-objects" + cmake --build build + cmake --build build --target libqhull # deprecated but nevertheless needed +} + +package() { + DESTDIR="$pkgdir" cmake --install build + cp -P build/libqhull.so* "$pkgdir"/usr/lib/ + + # license + install -Dm644 "$srcdir"/$pkgname-$pkgver/COPYING.txt -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/qiv/PKGBUILD b/qiv/PKGBUILD new file mode 100644 index 0000000..85f9590 --- /dev/null +++ b/qiv/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=qiv +pkgver=2.3.2 +_debver=2.3.2 +_debrel=2 +pkgrel=1 +pkgdesc='Quick Image Viewer (qiv) is a very small and fast GDK/Imlib image viewer' +arch=('i686' 'x86_64') +url='https://spiegl.de/qiv/' +license=('GPL-2') +depends=('file' 'gtk2' 'imlib2' 'libexif' 'lcms2' 'desktop-file-utils') +makedepends=('quilt') +source=(https://spiegl.de/qiv/download/$pkgname-$pkgver.tgz + https://deb.debian.org/debian/pool/main/q/qiv/qiv_$_debver-$_debrel.debian.tar.xz) +sha512sums=('c4636591f79e8e4c13807433a4101a461e614439e497a5637b958bd9d0937b04515854483d4060d9b1004d6c6060b437d634fdbe491eb0747a660ba65240472d' + 'c8e3540c58ac15cd262bc89e81ee63974607476fc789e7b370c8b2815f86cda14b18364d3795bfdca3b4180a785dfec0c9c5af80bad4bc497e068083b3b2777c') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + sed -i "s|^PREFIX = .*|PREFIX = /usr|" Makefile + sed -i "s|\./qiv|echo &|" Makefile # nuke test + sed -i "s|)/man/|)/share/man/|" Makefile + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + sed -i "s|^PREFIX = .*|PREFIX = $pkgdir/usr|" Makefile + make install + + install -D -m 0644 README "$pkgdir/usr/share/doc/qiv/README" + install -d "$pkgdir/usr/share/doc/qiv/contrib" + cp contrib/* "$pkgdir/usr/share/doc/qiv/contrib" + install -Dm644 README.COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/qlipper/PKGBUILD b/qlipper/PKGBUILD new file mode 100644 index 0000000..11ebec3 --- /dev/null +++ b/qlipper/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=qlipper +pkgver=5.1.2 +pkgrel=2 +pkgdesc="lightweight and cross-platform Qt clipboard manager" +arch=('x86_64' 'i686') +url='https://github.com/pvanek/qlipper/' +license=('GPL-2') +depends=('qt-base') +makedepends=('cmake' 'ninja' 'qt-tools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/pvanek/${pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('1ad49424855abf5f446026856178291b6ed8c1152338013f2228bbe5a923bc2e989754fe41e8b03f069f815c3850073eb1063842b5f40462005693a9029b187b') + +build() { + cmake \ + -B build \ + -S ${pkgname}-${pkgver} \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr + cmake --build build +} + +package() { + DESTDIR=${pkgdir} cmake --build build --target install + install -Dvm644 ${srcdir}/${pkgname}-${pkgver}/COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/qml-box2d/PKGBUILD b/qml-box2d/PKGBUILD new file mode 100644 index 0000000..ff0afad --- /dev/null +++ b/qml-box2d/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=qml-box2d +pkgver=20180406 +pkgrel=2 +pkgdesc="Box2D QML plugin" +url='https://github.com/qml-box2d/qml-box2d' +arch=('i686' 'x86_64') +license=('zlib') +depends=('qt-declarative') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.zip"{,.sig}) +sha512sums=('f93a554b37a68684837a6bb6ac5f749af236d590cc2c58aff2f24629d508bc3fce7c7f8296c9175fe70913b6ff45cd531e48c5836caf22361de99b464675fd1b' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + mv "${pkgname}-master" "${pkgname}-${pkgver}" +} + +build() { + cd "${pkgname}-${pkgver}" + qmake + make +} + +package() { + cd "${pkgname}-${pkgver}" + make INSTALL_ROOT="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/qownnotes/PKGBUILD b/qownnotes/PKGBUILD new file mode 100644 index 0000000..51341e9 --- /dev/null +++ b/qownnotes/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=qownnotes +pkgver=22.8.4 +pkgrel=1 +pkgdesc="Plain-text file markdown note" +arch=('i686' 'x86_64') +url='https://www.qownnotes.org/' +license=('GPL-2') +depends=('qt-base' 'qt-svg' 'qt-declarative' 'libressl' 'qt-xmlpatterns' 'qt-websockets' 'qt-x11extras' 'aspell') +makedepends=('qt-tools') +source=("https://download.tuxfamily.org/${pkgname}/src/${pkgname}-${pkgver}.tar.xz") +sha512sums=('57f10786a2bb107172c3797e561b0885c9a916f1a6c4233c1672929ae3438c7796b6e7b62d3e32a4c29ecd38587ac31352db872ff5c88a503b0725f04145fc64') + +prepare() { + cd "${pkgname}-${pkgver}" + echo "#define RELEASE \"Hyperbola\"" > release.h +} + +build() { + cd "${pkgname}-${pkgver}" + qmake QMAKE_CFLAGS_RELEASE="${CFLAGS}" QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}" QMAKE_LFLAGS_RELEASE="${LDFLAGS}" + make +} + +package() { + cd "${pkgname}-${pkgver}" + + # install application + install -D -m755 QOwnNotes "${pkgdir}/usr/bin/QOwnNotes" + + # install visuals + install -D -m644 PBE.QOwnNotes.desktop "${pkgdir}/usr/share/applications/PBE.QOwnNotes.desktop" + for format in {16x16,24x24,32x32,48x48,64x64,96x96,128x128,256x256,512x512}; do + install -D -m644 "images/icons/${format}/apps/QOwnNotes.png" "${pkgdir}/usr/share/icons/hicolor/$format/apps/QOwnNotes.png" + done + install -D -m644 "images/icons/scalable/apps/QOwnNotes.svg" "${pkgdir}/usr/share/icons/hicolor/scalable/apps/QOwnNotes.svg" + + # install languages + install -d "${pkgdir}/usr/share/qt5/translations/" + install -D -m644 languages/*.qm "${pkgdir}/usr/share/qt5/translations/" + + # install license + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/qpdf/PKGBUILD b/qpdf/PKGBUILD new file mode 100644 index 0000000..39f0677 --- /dev/null +++ b/qpdf/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=qpdf +pkgver=10.1.0 +pkgrel=2 +pkgdesc="A PDF Transformation System" +arch=('i686' 'x86_64') +url="https://github.com/qpdf/qpdf" +license=('Artistic-2.0' 'Apache-2.0') +depends=('libjpeg-turbo' 'zlib' 'libressl') +source=(https://github.com/qpdf/qpdf/releases/download/release-${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz{,.asc}) +sha512sums=('f9b22d89fc62e430e6232c840ad74d220ac9eb09d7f2dfe2c42c1c943d35b5fd25e2abec9970ac19ad7ad25dc3d95c74e68e50bad395abf815cf71c432233106' + 'SKIP') +validpgpkeys=('C2C96B10011FE009E6D1DF828A75D10998012C7E') # "Jay Berkenbilt " + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --disable-static \ + --disable-crypto-gnutls \ + --enable-crypto-openssl \ + --disable-implicit-crypto \ + --enable-show-failed-test-output + make +} + +check() { + cd ${pkgname}-${pkgver} + make check # passes all +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}/" install + + install -Dm644 completions/bash/qpdf "${pkgdir}/usr/share/bash-completion/completions/qpdf" + install -Dm644 completions/zsh/_qpdf "${pkgdir}/usr/share/zsh/site-functions/_qpdf" + + for i in Artistic-2.0 LICENSE.txt; do + install -Dm644 ${i} "${pkgdir}"/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/qrencode/PKGBUILD b/qrencode/PKGBUILD new file mode 100644 index 0000000..9ac44f4 --- /dev/null +++ b/qrencode/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=qrencode +pkgver=4.1.1 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="C library for encoding data in a QR Code symbol" +url='https://fukuchi.org/works/qrencode/' +license=('LGPL-2.1') +arch=('i686' 'x86_64') +depends=('libpng') +makedepends=('sdl' 'quilt') +source=("https://fukuchi.org/works/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/q/qrencode/qrencode_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('981b3242c213e1b40ac88711912dd8c27ea11f3437d1a04b6b226499a6e991a8f0b3b10f818bcc104812192a1dac4ce05f16ecd847a50cb03d4859b84bad89b8' + 'dc50409af0ddb58ef3972ad16db87ca1758d93a8d15ed06a8fe40fed6e4e7232964c4053b74ff8e77b2cc6b434d87021ec28788317bca9911a951bf8e766805a') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf +} + +build() { + cd "${srcdir}/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/$pkgname-$pkgver" + make prefix="$pkgdir/usr" install + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/qscintilla/PKGBUILD b/qscintilla/PKGBUILD new file mode 100644 index 0000000..d144a3e --- /dev/null +++ b/qscintilla/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=qscintilla +pkgver=2.11.6 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="A port to Qt of Neil Hodgson's Scintilla C++ editor class" +license=('GPL-3') +arch=('i686' 'x86_64') +url='https://www.riverbankcomputing.com/software/qscintilla/intro' +depends=('qt-base') +makedepends=('qt-tools' 'quilt') +source=("https://www.riverbankcomputing.com/static/Downloads/QScintilla/$pkgver/QScintilla-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/q/qscintilla2/qscintilla2_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('8055d72a40f9f5a7d45c6592055c1b8eb5e5c50ce9e51673babd5e567c769d60c64d244ba5a7def5731a3120099e9528d01ed94327a06bb56ae2fa2e5e37b198' + '471c8edb3630985567d55fe7975624df19942e1834a8f95d469ceb2389ad6a8af948eab09b25814f9b60c20e3c4a97bc464c0fd5378dca7f8e4d8bd2a0fced29') + +prepare() { + cd QScintilla-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + export QMAKEFEATURES=${srcdir}/QScintilla-$pkgver/Qt4Qt5/features/ + + cd QScintilla-$pkgver/Qt4Qt5 + qmake-qt5 + make + + cd ../designer-Qt4Qt5 + qmake-qt5 INCLUDEPATH+=../Qt4Qt5 QMAKE_LIBDIR+=../Qt4Qt5 + make +} + +package() { + cd QScintilla-${pkgver}/Qt4Qt5 + make DESTDIR="${pkgdir}" INSTALL_ROOT="${pkgdir}" install + + cd ../designer-Qt4Qt5 + make DESTDIR="${pkgdir}" INSTALL_ROOT="${pkgdir}" install + install -Dm644 $srcdir/QScintilla-$pkgver/LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/qt-base/CVE-2024-39936.patch b/qt-base/CVE-2024-39936.patch new file mode 100644 index 0000000..85dd6ef --- /dev/null +++ b/qt-base/CVE-2024-39936.patch @@ -0,0 +1,109 @@ +--- a/src/network/access/qhttp2protocolhandler.cpp ++++ b/src/network/access/qhttp2protocolhandler.cpp +@@ -371,12 +371,12 @@ bool QHttp2ProtocolHandler::sendRequest( + } + } + +- if (!prefaceSent && !sendClientPreface()) +- return false; +- + if (!requests.size()) + return true; + ++ if (!prefaceSent && !sendClientPreface()) ++ return false; ++ + m_channel->state = QHttpNetworkConnectionChannel::WritingState; + // Check what was promised/pushed, maybe we do not have to send a request + // and have a response already? +--- a/src/network/access/qhttpnetworkconnectionchannel.cpp 2020-10-27 09:02:11.000000000 +0100 ++++ b/src/network/access/qhttpnetworkconnectionchannel.cpp 2024-08-16 22:36:07.819945304 +0200 +@@ -255,6 +255,10 @@ + bool QHttpNetworkConnectionChannel::sendRequest() + { + Q_ASSERT(!protocolHandler.isNull()); ++ if (waitingForPotentialAbort) { ++ needInvokeSendRequest = true; ++ return false; // this return value is unused ++ } + return protocolHandler->sendRequest(); + } + +@@ -270,18 +274,27 @@ + Q_ASSERT(!protocolHandler.isNull()); + if (reply) + protocolHandler->sendRequest(); ++ sendRequest(); + }, Qt::ConnectionType::QueuedConnection); + } + + void QHttpNetworkConnectionChannel::_q_receiveReply() + { + Q_ASSERT(!protocolHandler.isNull()); ++ if (waitingForPotentialAbort) { ++ needInvokeReceiveReply = true; ++ return; ++ } + protocolHandler->_q_receiveReply(); + } + + void QHttpNetworkConnectionChannel::_q_readyRead() + { + Q_ASSERT(!protocolHandler.isNull()); ++ if (waitingForPotentialAbort) { ++ needInvokeReadyRead = true; ++ return; ++ } + protocolHandler->_q_readyRead(); + } + +@@ -1299,6 +1312,27 @@ + } + } + ++void QHttpNetworkConnectionChannel::checkAndResumeCommunication() ++{ ++ Q_ASSERT(connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 ++ || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct); ++ ++ // Because HTTP/2 requires that we send a SETTINGS frame as the first thing we do, and respond ++ // to a SETTINGS frame with an ACK, we need to delay any handling until we can ensure that any ++ // effects from emitting encrypted() have been processed. ++ // This function is called after encrypted() was emitted, so check for changes. ++ ++ if (!reply && spdyRequestsToSend.isEmpty()) ++ abort(); ++ waitingForPotentialAbort = false; ++ if (needInvokeReadyRead) ++ _q_readyRead(); ++ if (needInvokeReceiveReply) ++ _q_receiveReply(); ++ if (needInvokeSendRequest) ++ sendRequest(); ++} ++ + void QHttpNetworkConnectionChannel::requeueSpdyRequests() + { + QList spdyPairs = spdyRequestsToSend.values(); +--- a/src/network/access/qhttpnetworkconnectionchannel_p.h 2020-10-27 09:02:11.000000000 +0100 ++++ b/src/network/access/qhttpnetworkconnectionchannel_p.h 2024-08-16 22:40:50.519943219 +0200 +@@ -107,6 +107,10 @@ + QAbstractSocket *socket; + bool ssl; + bool isInitialized; ++ bool waitingForPotentialAbort = false; ++ bool needInvokeReceiveReply = false; ++ bool needInvokeReadyRead = false; ++ bool needInvokeSendRequest = false; + ChannelState state; + QHttpNetworkRequest request; // current request, only used for HTTP + QHttpNetworkReply *reply; // current reply for this request, only used for HTTP +@@ -187,6 +191,8 @@ + void closeAndResendCurrentRequest(); + void resendCurrentRequest(); + ++ void checkAndResumeCommunication(); ++ + bool isSocketBusy() const; + bool isSocketWriting() const; + bool isSocketWaiting() const; diff --git a/qt-base/PKGBUILD b/qt-base/PKGBUILD new file mode 100644 index 0000000..3d88f4e --- /dev/null +++ b/qt-base/PKGBUILD @@ -0,0 +1,152 @@ +# Maintainer: Jesus E. + +pkgbase=qt-base +pkgname=(qt-base qt-xcb-private-headers) +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=$pkgver +_debrel=9 +pkgrel=9 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc="A cross-platform application and UI framework" +depends=('libjpeg-turbo' 'xcb-util-keysyms' 'xcb-util-renderutil' 'mesa-libgl' 'fontconfig' 'xdg-utils' + 'shared-mime-info' 'xcb-util-wm' 'libxrender' 'libxi' 'sqlite' 'xcb-util-image' 'mesa' + 'tslib' 'libxkbcommon-x11' 'libproxy' 'libcups' 'md4c' 'pcre2' 'harfbuzz') +makedepends=('sqlite' 'unixodbc' 'postgresql-libs' 'alsa-lib' 'gst-plugins-base-libs' + 'gtk' 'cups' 'quilt') +optdepends=('qt-svg: to use SVG icon themes' + 'postgresql-libs: PostgreSQL driver' + 'unixodbc: ODBC driver' + 'gtk: GTK platform plugin' + 'perl: for fixqt4headers and syncqt') +replaces=('qt5-base') +conflicts=('qt5-base' 'qtchooser') +provides=('qt5-base') +groups=('qt') +_pkgfqn="${pkgbase/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtbase-opensource-src/qtbase-opensource-src_${_debver}+dfsg-${_debrel}+deb11u1.debian.tar.xz" + "qt-base-cflags.patch" + "kdebug-428095.patch" + "qtnetwork-5.15.0-libressl.patch" + "CVE-2024-39936.patch") +sha512sums=('a549bfaf867d746ff744ab224eb65ac1bdcdac7e8457dfa379941b2b225a90442fcfc1e1175b9afb1f169468f8130b7ab917c67be67156520a4bfb5c92d304f9' + 'e4d4210b222b6722c3b97d7139c6ddf812e8022454a20d677e1df60d1ec472079dfc0fc5805c81059b1bdb26e323b358ec7ec57fb24b972d2ce84e55d40b936e' + 'fa3dddfe42b7f0ade45bd0530badfc3a3800adbd3798bd814597527713c9fe360a242f7cf39312f4cc3c88e9bd7aba233bd6674c0fc78e694a1fd868474c4240' + 'afc8c44cb2fdb1b07b8e88bda102791d4f807a00acc60aad98114b5a5b78336b4e6aeff59fa2795f3f83f196635d034c571859dab7c7c0443a913012944a45a7' + '1f249256ab94f72d667bc703ae668e0e7c0671ebd464a3800c9dd2121637438de7c2cd9a72a45610ab4ad584103c7261e237facc114b142dcec0c38930ce8975' + '51f378c6751ec6b24c5afac4eaa9a6f9b54680b53610e3db14d42c931034382e875316e9c25a8b04d0e36d08deef614fd2c8dc4cabac5de9d718cf0255e3020c') + +prepare() { + cd ${_pkgfqn} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/armv4.diff || true + rm -v debian/patches/gnukfreebsd.diff || true + rm -v debian/patches/gnukfreebsd_linker_warnings.diff || true + + quilt push -av + fi + + patch -p1 -i ${srcdir}/qt-base-cflags.patch # Use system CFLAGS + patch -p1 -i ${srcdir}/kdebug-428095.patch # Fix black border on some menus with Breeze + patch -p1 -i ${srcdir}/qtnetwork-5.15.0-libressl.patch # Add LibreSSL support + patch -p1 -i ${srcdir}/CVE-2024-39936.patch # Fix CVE-2024-39936 +} + +build() { + cd ${_pkgfqn} + + # Work around SSLv3_{client,server}_method missing in LibreSSL + CFLAGS+=" -DOPENSSL_NO_PSK -DOPENSSL_NO_NEXTPROTONEG" + CXXFLAGS+=" -Wno-deprecated-declarations -Wno-class-memaccess -Wno-packed-not-aligned" + + OPENSSL_LIBS='-lssl -lcrypto' + + [[ "${CARCH}" = "i686" ]] && SSE2="-no-sse2" + + ./configure -confirm-license -opensource -v \ + -prefix /usr \ + -docdir /usr/share/doc/qt \ + -headerdir /usr/include/qt \ + -archdatadir /usr/lib/qt \ + -datadir /usr/share/qt \ + -sysconfdir /etc/xdg \ + -examplesdir /usr/share/doc/qt/examples \ + -plugin-sql-{psql,sqlite} \ + -system-sqlite \ + -openssl-linked \ + -no-dtls \ + -nomake examples \ + -no-rpath \ + -no-dbus \ + -system-harfbuzz \ + -syslog \ + -no-mimetype-database \ + -no-use-gold-linker \ + -reduce-relocations \ + -no-strip ${SSE2} \ + -no-egl \ + -no-angle \ + -no-zstd \ + -opengl desktop \ + -no-vulkan \ + -qt-doubleconversion \ + -system-libpng \ + -system-libmd4c \ + -system-libjpeg \ + -system-pcre \ + -system-zlib \ + -system-freetype + make +} + +package_qt-base() { + pkgdesc='A cross-platform application and UI framework' + + cd ${_pkgfqn} + make INSTALL_ROOT="${pkgdir}" install + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "${pkgdir}/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Fix wrong qmake path in pri file + sed -i "s|${srcdir}/${_pkgfqn}|/usr|" \ + "${pkgdir}"/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri + + # Symlinks for backwards compatibility + for b in "${pkgdir}"/usr/bin/*; do + ln -s $(basename $b) "${pkgdir}"/usr/bin/$(basename $b)-qt5 + done +} + +package_qt-xcb-private-headers() { + pkgdesc='Private headers for Qt Xcb' + depends=("qt-base=$pkgver") + optdepends=() + groups=() + replaces=('qt5-xcb-private-headers') + conflicts=('qt5-xcb-private-headers') + provides=('qt5-xcb-private-headers') + + cd ${_pkgfqn} + install -d -m755 "$pkgdir"/usr/include/qtxcb-private + cp -r src/plugins/platforms/xcb/*.h "$pkgdir"/usr/include/qtxcb-private/ + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-base/kdebug-428095.patch b/qt-base/kdebug-428095.patch new file mode 100644 index 0000000..b51a050 --- /dev/null +++ b/qt-base/kdebug-428095.patch @@ -0,0 +1,45 @@ +From c5336057301d6a62160bc672dd0ab081b3c26725 Mon Sep 17 00:00:00 2001 +From: David Redondo +Date: Tue, 3 Nov 2020 11:04:56 +0100 +Subject: Ensure that QMenu is polished before setting the screen in popup() + +Some styles alter the widget that will influence the underlying platform +window. An example is when a style would want to draw the menu with some +transparency and sets the Qt::WA_TranslucentBackground attribute. This +needs to happen before the platform window is created. However calling +QWidgetPrivate::setScreen will end up creating the window and the +surface format will be fixed at this point. + +Change-Id: I707cf1de5c1614382cffbea1aae8cdb01f7de44a +Reviewed-by: Nate Graham +Reviewed-by: Richard Moe Gustavsen +(cherry picked from commit 36b1d37cef09769eea22f78d77440ac4c5d008d8) +Reviewed-by: Qt Cherry-pick Bot +--- + src/widgets/widgets/qmenu.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp +index ab933c987f..a23d8b790d 100644 +--- a/src/widgets/widgets/qmenu.cpp ++++ b/src/widgets/widgets/qmenu.cpp +@@ -2368,6 +2368,8 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po + doChildEffects = true; + updateLayoutDirection(); + ++ q->ensurePolished(); // Get the right font ++ + // Ensure that we get correct sizeHints by placing this window on the correct screen. + // However if the QMenu was constructed with a QDesktopScreenWidget as its parent, + // then initialScreenIndex was set, so we should respect that for the lifetime of this menu. +@@ -2405,7 +2407,6 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po + q->setAttribute(Qt::WA_X11NetWmWindowTypeDropDownMenu, qobject_cast(topCausedWidget()) != nullptr); + #endif + +- q->ensurePolished(); // Get the right font + emit q->aboutToShow(); + const bool actionListChanged = itemsDirty; + +-- +cgit v1.2.1 + diff --git a/qt-base/qt-base-cflags.patch b/qt-base/qt-base-cflags.patch new file mode 100644 index 0000000..c33aa78 --- /dev/null +++ b/qt-base/qt-base-cflags.patch @@ -0,0 +1,46 @@ +diff --git a/mkspecs/common/g++-unix.conf b/mkspecs/common/g++-unix.conf +index a493cd5984..41342f5020 100644 +--- a/mkspecs/common/g++-unix.conf ++++ b/mkspecs/common/g++-unix.conf +@@ -10,5 +10,6 @@ + + include(g++-base.conf) + +-QMAKE_LFLAGS_RELEASE += -Wl,-O1 ++SYSTEM_LDFLAGS = $$(LDFLAGS) ++!isEmpty(SYSTEM_LDFLAGS) { eval(QMAKE_LFLAGS_RELEASE += $$(LDFLAGS)) } else { QMAKE_LFLAGS_RELEASE += -Wl,-O1 } + QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined +diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf +index 1f919d270a..7ef6046326 100644 +--- a/mkspecs/common/gcc-base.conf ++++ b/mkspecs/common/gcc-base.conf +@@ -40,9 +40,11 @@ QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os + QMAKE_CFLAGS_DEPS += -M + QMAKE_CFLAGS_WARN_ON += -Wall -Wextra + QMAKE_CFLAGS_WARN_OFF += -w +-QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE +-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g +-QMAKE_CFLAGS_DEBUG += -g ++SYSTEM_CFLAGS = $$(CFLAGS) ++SYSTEM_DEBUG_CFLAGS = $$(DEBUG_CFLAGS) ++!isEmpty(SYSTEM_CFLAGS) { eval(QMAKE_CFLAGS_RELEASE += $$(CPPFLAGS) $$(CFLAGS)) } else { QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE } ++!isEmpty(SYSTEM_CFLAGS) { eval(QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$(CPPFLAGS) -g $$(CFLAGS)) } else { QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g } ++!isEmpty(SYSTEM_DEBUG_CFLAGS) { eval(QMAKE_CFLAGS_DEBUG += $$(DEBUG_CFLAGS)) } else { QMAKE_CFLAGS_DEBUG += -g } + QMAKE_CFLAGS_SHLIB += $$QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_APP += $$QMAKE_CFLAGS_PIC +@@ -59,9 +61,11 @@ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS + QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS + QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON + QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF +-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE +-QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO +-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG ++SYSTEM_CXXFLAGS = $$(CXXFLAGS) ++SYSTEM_DEBUG_CXXFLAGS = $$(DEBUG_CXXFLAGS) ++!isEmpty(SYSTEM_CXXFLAGS) { eval(QMAKE_CXXFLAGS_RELEASE += $$(CPPFLAGS) $$(CXXFLAGS)) } else { QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE } ++!isEmpty(SYSTEM_CXXFLAGS) { eval(QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$(CPPFLAGS) -g $$(CXXFLAGS)) } else { QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g } ++!isEmpty(SYSTEM_DEBUG_CXXFLAGS) { eval(QMAKE_CXXFLAGS_DEBUG += $$(DEBUG_CXXFLAGS)) } else { QMAKE_CXXFLAGS_DEBUG += -g } + QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB + QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB + QMAKE_CXXFLAGS_APP += $$QMAKE_CFLAGS_APP diff --git a/qt-base/qtnetwork-5.15.0-libressl.patch b/qt-base/qtnetwork-5.15.0-libressl.patch new file mode 100644 index 0000000..af90d99 --- /dev/null +++ b/qt-base/qtnetwork-5.15.0-libressl.patch @@ -0,0 +1,590 @@ +diff --git a/src/network/ssl/qdtls_openssl.cpp b/src/network/ssl/qdtls_openssl.cpp +index 25a6c5f4..b688e9e2 100644 +--- a/src/network/ssl/qdtls_openssl.cpp ++++ b/src/network/ssl/qdtls_openssl.cpp +@@ -713,7 +713,11 @@ bool DtlsState::initCtxAndConnection(QDtlsBasePrivate *dtlsBase) + + if (dtlsBase->mode == QSslSocket::SslServerMode) { + if (dtlsBase->dtlsConfiguration.dtlsCookieEnabled) ++#ifndef LIBRESSL_VERSION_NUMBER + q_SSL_set_options(newConnection.data(), SSL_OP_COOKIE_EXCHANGE); ++#else ++ q_SSL_ctrl(newConnection.data(), SSL_CTRL_OPTIONS, SSL_OP_COOKIE_EXCHANGE, NULL); ++#endif + q_SSL_set_psk_server_callback(newConnection.data(), dtlscallbacks::q_PSK_server_callback); + } else { + q_SSL_set_psk_client_callback(newConnection.data(), dtlscallbacks::q_PSK_client_callback); +@@ -786,7 +790,11 @@ void DtlsState::setLinkMtu(QDtlsBasePrivate *dtlsBase) + } + + // For now, we disable this option. ++#ifndef LIBRESSL_VERSION_NUMBER + q_SSL_set_options(tlsConnection.data(), SSL_OP_NO_QUERY_MTU); ++#else ++ q_SSL_ctrl(tlsConnection.data(), SSL_CTRL_OPTIONS, SSL_OP_NO_QUERY_MTU, NULL); ++#endif + + q_DTLS_set_link_mtu(tlsConnection.data(), mtu); + } +diff --git a/src/network/ssl/qsslcertificate_openssl.cpp b/src/network/ssl/qsslcertificate_openssl.cpp +index ca9d61cc..19774432 100644 +--- a/src/network/ssl/qsslcertificate_openssl.cpp ++++ b/src/network/ssl/qsslcertificate_openssl.cpp +@@ -661,7 +661,7 @@ static QMultiMap _q_mapFromX509Name(X509_NAME *name) + unsigned char *data = nullptr; + int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e)); + info.insert(name, QString::fromUtf8((char*)data, size)); +-#if QT_CONFIG(opensslv11) ++#if QT_CONFIG(opensslv11) && !defined(LIBRESSL_VERSION_NUMBER) + q_CRYPTO_free(data, nullptr, 0); + #else + q_CRYPTO_free(data); +diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp +index c9f202f5..714add6b 100644 +--- a/src/network/ssl/qsslcontext_openssl.cpp ++++ b/src/network/ssl/qsslcontext_openssl.cpp +@@ -351,9 +351,11 @@ init_context: + return; + } + ++#ifndef LIBRESSL_VERSION_NUMBER + // A nasty hacked OpenSSL using a level that will make our auto-tests fail: + if (q_SSL_CTX_get_security_level(sslContext->ctx) > 1 && *forceSecurityLevel()) + q_SSL_CTX_set_security_level(sslContext->ctx, 1); ++#endif + + const long anyVersion = + #if QT_CONFIG(dtls) +@@ -408,16 +410,28 @@ init_context: + maxVersion = DTLS1_VERSION; + break; + case QSsl::DtlsV1_0OrLater: ++#ifdef DTLS_MAX_VERSION + minVersion = DTLS1_VERSION; + maxVersion = DTLS_MAX_VERSION; ++#else ++ Q_UNREACHABLE(); ++#endif // DTLS_MAX_VERSION + break; + case QSsl::DtlsV1_2: ++#ifdef DTLS1_2_VERSION + minVersion = DTLS1_2_VERSION; + maxVersion = DTLS1_2_VERSION; ++#else ++ Q_UNREACHABLE(); ++#endif // DTLS1_2_VERSION + break; + case QSsl::DtlsV1_2OrLater: ++#if defined(DTLS1_2_VERSION) && defined(DTLS_MAX_VERSION) + minVersion = DTLS1_2_VERSION; + maxVersion = DTLS_MAX_VERSION; ++#else ++ Q_UNREACHABLE(); ++#endif // DTLS1_2_VERSION && DTLS_MAX_VERSION + break; + case QSsl::TlsV1_3OrLater: + #ifdef TLS1_3_VERSION +@@ -456,7 +470,11 @@ init_context: + + // Enable bug workarounds. + long options = QSslSocketBackendPrivate::setupOpenSslOptions(configuration.protocol(), configuration.d->sslOptions); ++#ifndef LIBRESSL_VERSION_NUMBER + q_SSL_CTX_set_options(sslContext->ctx, options); ++#else ++ q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_OPTIONS, options, NULL); ++#endif + + // Tell OpenSSL to release memory early + // http://www.openssl.org/docs/ssl/SSL_CTX_set_mode.html +@@ -722,6 +740,7 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext) + } + #endif // ocsp + ++#ifndef LIBRESSL_VERSION_NUMBER + QSharedPointer cctx(q_SSL_CONF_CTX_new(), &q_SSL_CONF_CTX_free); + if (cctx) { + q_SSL_CONF_CTX_set_ssl_ctx(cctx.data(), sslContext->ctx); +@@ -768,7 +787,9 @@ void QSslContext::applyBackendConfig(QSslContext *sslContext) + sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_finish() failed")); + sslContext->errorCode = QSslError::UnspecifiedError; + } +- } else { ++ } else ++#endif // LIBRESSL_VERSION_NUMBER ++ { + sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_CTX_new() failed")); + sslContext->errorCode = QSslError::UnspecifiedError; + } +diff --git a/src/network/ssl/qsslcontext_openssl_p.h b/src/network/ssl/qsslcontext_openssl_p.h +index 70cb97aa..01a61cf5 100644 +--- a/src/network/ssl/qsslcontext_openssl_p.h ++++ b/src/network/ssl/qsslcontext_openssl_p.h +@@ -61,6 +61,13 @@ + + QT_BEGIN_NAMESPACE + ++#ifndef DTLS_ANY_VERSION ++#define DTLS_ANY_VERSION 0x1FFFF ++#endif ++#ifndef TLS_ANY_VERSION ++#define TLS_ANY_VERSION 0x10000 ++#endif ++ + #ifndef QT_NO_SSL + + class QSslContextPrivate; +diff --git a/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp b/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp +index aaf87411..a33ebc63 100644 +--- a/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp ++++ b/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp +@@ -141,7 +141,11 @@ static bool isSafeDH(DH *dh) + const BIGNUM *g = nullptr; + q_DH_get0_pqg(dh, &p, &q, &g); + ++#ifndef LIBRESSL_VERSION_NUMBER + if (q_BN_is_word(const_cast(g), DH_GENERATOR_2)) { ++#else ++ if (BN_is_word(const_cast(g), DH_GENERATOR_2)) { ++#endif + const unsigned long residue = q_BN_mod_word(p, 24); + if (residue == 11 || residue == 23) + status &= ~DH_NOT_SUITABLE_GENERATOR; +diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp +index 43cb8c6d..a27336aa 100644 +--- a/src/network/ssl/qsslkey_openssl.cpp ++++ b/src/network/ssl/qsslkey_openssl.cpp +@@ -360,7 +360,7 @@ static QByteArray doCrypt(QSslKeyPrivate::Cipher cipher, const QByteArray &data, + q_EVP_CipherUpdate(ctx, + reinterpret_cast(output.data()), &len, + reinterpret_cast(data.constData()), data.size()); +- q_EVP_CipherFinal(ctx, ++ q_EVP_CipherFinal_ex(ctx, + reinterpret_cast(output.data()) + len, &i); + len += i; + +diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp +index 277037e5..026c69a4 100644 +--- a/src/network/ssl/qsslsocket_openssl.cpp ++++ b/src/network/ssl/qsslsocket_openssl.cpp +@@ -653,7 +653,7 @@ bool QSslSocketBackendPrivate::initSslContext() + else if (mode == QSslSocket::SslServerMode) + q_SSL_set_psk_server_callback(ssl, &q_ssl_psk_server_callback); + +-#if OPENSSL_VERSION_NUMBER >= 0x10101006L ++#if OPENSSL_VERSION_NUMBER >= 0x10101006L && !defined(LIBRESSL_VERSION_NUMBER) + // Set the client callback for TLSv1.3 PSK + if (mode == QSslSocket::SslClientMode + && QSslSocket::sslLibraryBuildVersionNumber() >= 0x10101006L) { +@@ -704,7 +704,11 @@ bool QSslSocketBackendPrivate::initSslContext() + void QSslSocketBackendPrivate::destroySslContext() + { + if (ssl) { ++#ifndef LIBRESSL_VERSION_NUMBER + if (!q_SSL_in_init(ssl) && !systemOrSslErrorDetected) { ++#else ++ if (!SSL_in_init(ssl) && !systemOrSslErrorDetected) { ++#endif + // We do not send a shutdown alert here. Just mark the session as + // resumable for qhttpnetworkconnection's "optimization", otherwise + // OpenSSL won't start a session resumption. +@@ -1841,7 +1845,11 @@ bool QSslSocketBackendPrivate::checkOcspStatus() + void QSslSocketBackendPrivate::disconnectFromHost() + { + if (ssl) { ++#ifndef LIBRESSL_VERSION_NUMBER + if (!shutdown && !q_SSL_in_init(ssl) && !systemOrSslErrorDetected) { ++#else ++ if (!shutdown && !SSL_in_init(ssl) && !systemOrSslErrorDetected) { ++#endif + if (q_SSL_shutdown(ssl) != 1) { + // Some error may be queued, clear it. + const auto errors = getErrorsFromOpenSsl(); +@@ -1910,7 +1918,11 @@ void QSslSocketBackendPrivate::continueHandshake() + if (readBufferMaxSize) + plainSocket->setReadBufferSize(readBufferMaxSize); + ++#ifndef LIBRESSL_VERSION_NUMBER + if (q_SSL_session_reused(ssl)) ++#else ++ if (q_SSL_ctrl(ssl, SSL_CTRL_GET_SESSION_REUSED, 0, NULL)) ++#endif + configuration.peerSessionShared = true; + + #ifdef QT_DECRYPT_SSL_TRAFFIC +diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp +index ed80fc14..5003db41 100644 +--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp ++++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp +@@ -142,14 +142,19 @@ DEFINEFUNC2(int, OPENSSL_init_ssl, uint64_t opts, opts, const OPENSSL_INIT_SETTI + DEFINEFUNC2(int, OPENSSL_init_crypto, uint64_t opts, opts, const OPENSSL_INIT_SETTINGS *settings, settings, return 0, return) + DEFINEFUNC(BIO *, BIO_new, const BIO_METHOD *a, a, return nullptr, return) + DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return nullptr, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC2(int, BN_is_word, BIGNUM *a, a, BN_ULONG w, w, return 0, return) ++#endif + DEFINEFUNC(int, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX *c, c, return 0, return) + DEFINEFUNC(int, EVP_PKEY_up_ref, EVP_PKEY *a, a, return 0, return) + DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE *e, e, return nullptr, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(int, EVP_PKEY_param_check, EVP_PKEY_CTX *ctx, ctx, return 0, return) ++#endif + DEFINEFUNC(void, EVP_PKEY_CTX_free, EVP_PKEY_CTX *ctx, ctx, return, return) + DEFINEFUNC(int, EVP_PKEY_base_id, EVP_PKEY *a, a, return NID_undef, return) + DEFINEFUNC(int, RSA_bits, RSA *a, a, return 0, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(int, DSA_bits, DSA *a, a, return 0, return) + DEFINEFUNC(int, OPENSSL_sk_num, OPENSSL_STACK *a, a, return -1, return) + DEFINEFUNC2(void, OPENSSL_sk_pop_free, OPENSSL_STACK *a, a, void (*b)(void*), b, return, DUMMYARG) +@@ -157,10 +162,20 @@ DEFINEFUNC(OPENSSL_STACK *, OPENSSL_sk_new_null, DUMMYARG, DUMMYARG, return null + DEFINEFUNC2(void, OPENSSL_sk_push, OPENSSL_STACK *a, a, void *b, b, return, DUMMYARG) + DEFINEFUNC(void, OPENSSL_sk_free, OPENSSL_STACK *a, a, return, DUMMYARG) + DEFINEFUNC2(void *, OPENSSL_sk_value, OPENSSL_STACK *a, a, int b, b, return nullptr, return) ++#else ++DEFINEFUNC(int, sk_num, STACK *a, a, return -1, return) ++DEFINEFUNC2(void, sk_pop_free, STACK *a, a, void (*b)(void*), b, return, DUMMYARG) ++DEFINEFUNC(_STACK *, sk_new_null, DUMMYARG, DUMMYARG, return nullptr, return) ++DEFINEFUNC2(void, sk_push, _STACK *a, a, void *b, b, return, DUMMYARG) ++DEFINEFUNC(void, sk_free, _STACK *a, a, return, DUMMYARG) ++DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return nullptr, return) ++#endif // LIBRESSL_VERSION_NUMBER ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return) + DEFINEFUNC2(unsigned long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, unsigned long op, op, return 0, return) + DEFINEFUNC(int, SSL_CTX_get_security_level, const SSL_CTX *ctx, ctx, return -1, return) + DEFINEFUNC2(void, SSL_CTX_set_security_level, SSL_CTX *ctx, ctx, int level, level, return, return) ++#endif + #ifdef TLS1_3_VERSION + DEFINEFUNC2(int, SSL_CTX_set_ciphersuites, SSL_CTX *ctx, ctx, const char *str, str, return 0, return) + DEFINEFUNC2(void, SSL_set_psk_use_session_callback, SSL *ssl, ssl, q_SSL_psk_use_session_cb_func_t callback, callback, return, DUMMYARG) +@@ -170,7 +185,9 @@ DEFINEFUNC(int, SSL_SESSION_is_resumable, const SSL_SESSION *s, s, return 0, ret + DEFINEFUNC3(size_t, SSL_get_client_random, SSL *a, a, unsigned char *out, out, size_t outlen, outlen, return 0, return) + DEFINEFUNC3(size_t, SSL_SESSION_get_master_key, const SSL_SESSION *ses, ses, unsigned char *out, out, size_t outlen, outlen, return 0, return) + DEFINEFUNC6(int, CRYPTO_get_ex_new_index, int class_index, class_index, long argl, argl, void *argp, argp, CRYPTO_EX_new *new_func, new_func, CRYPTO_EX_dup *dup_func, dup_func, CRYPTO_EX_free *free_func, free_func, return -1, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC2(unsigned long, SSL_set_options, SSL *ssl, ssl, unsigned long op, op, return 0, return) ++#endif + + DEFINEFUNC(const SSL_METHOD *, TLS_method, DUMMYARG, DUMMYARG, return nullptr, return) + DEFINEFUNC(const SSL_METHOD *, TLS_client_method, DUMMYARG, DUMMYARG, return nullptr, return) +@@ -184,7 +201,11 @@ DEFINEFUNC2(void, X509_STORE_set_verify_cb, X509_STORE *a, a, X509_STORE_CTX_ver + DEFINEFUNC3(int, X509_STORE_set_ex_data, X509_STORE *a, a, int idx, idx, void *data, data, return 0, return) + DEFINEFUNC2(void *, X509_STORE_get_ex_data, X509_STORE *r, r, int idx, idx, return nullptr, return) + DEFINEFUNC(STACK_OF(X509) *, X509_STORE_CTX_get0_chain, X509_STORE_CTX *a, a, return nullptr, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC3(void, CRYPTO_free, void *str, str, const char *file, file, int line, line, return, DUMMYARG) ++#else ++DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG) ++#endif + DEFINEFUNC(long, OpenSSL_version_num, void, DUMMYARG, return 0, return) + DEFINEFUNC(const char *, OpenSSL_version, int a, a, return nullptr, return) + DEFINEFUNC(unsigned long, SSL_SESSION_get_ticket_lifetime_hint, const SSL_SESSION *session, session, return 0, return) +@@ -224,7 +245,9 @@ DEFINEFUNC5(int, OCSP_id_get0_info, ASN1_OCTET_STRING **piNameHash, piNameHash, + ASN1_OCTET_STRING **piKeyHash, piKeyHash, ASN1_INTEGER **pserial, pserial, OCSP_CERTID *cid, cid, + return 0, return) + DEFINEFUNC2(OCSP_RESPONSE *, OCSP_response_create, int status, status, OCSP_BASICRESP *bs, bs, return nullptr, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(const STACK_OF(X509) *, OCSP_resp_get0_certs, const OCSP_BASICRESP *bs, bs, return nullptr, return) ++#endif + DEFINEFUNC2(int, OCSP_id_cmp, OCSP_CERTID *a, a, OCSP_CERTID *b, b, return -1, return) + DEFINEFUNC7(OCSP_SINGLERESP *, OCSP_basic_add1_status, OCSP_BASICRESP *r, r, OCSP_CERTID *c, c, int s, s, + int re, re, ASN1_TIME *rt, rt, ASN1_TIME *t, t, ASN1_TIME *n, n, return nullptr, return) +@@ -269,7 +292,7 @@ DEFINEFUNC2(int, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX *ctx, ctx, int ke + DEFINEFUNC5(int, EVP_CipherInit, EVP_CIPHER_CTX *ctx, ctx, const EVP_CIPHER *type, type, const unsigned char *key, key, const unsigned char *iv, iv, int enc, enc, return 0, return) + DEFINEFUNC6(int, EVP_CipherInit_ex, EVP_CIPHER_CTX *ctx, ctx, const EVP_CIPHER *cipher, cipher, ENGINE *impl, impl, const unsigned char *key, key, const unsigned char *iv, iv, int enc, enc, return 0, return) + DEFINEFUNC5(int, EVP_CipherUpdate, EVP_CIPHER_CTX *ctx, ctx, unsigned char *out, out, int *outl, outl, const unsigned char *in, in, int inl, inl, return 0, return) +-DEFINEFUNC3(int, EVP_CipherFinal, EVP_CIPHER_CTX *ctx, ctx, unsigned char *out, out, int *outl, outl, return 0, return) ++DEFINEFUNC3(int, EVP_CipherFinal_ex, EVP_CIPHER_CTX *ctx, ctx, unsigned char *out, out, int *outl, outl, return 0, return) + DEFINEFUNC(const EVP_MD *, EVP_get_digestbyname, const char *name, name, return nullptr, return) + #ifndef OPENSSL_NO_DES + DEFINEFUNC(const EVP_CIPHER *, EVP_des_cbc, DUMMYARG, DUMMYARG, return nullptr, return) +@@ -356,12 +379,14 @@ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, return - + DEFINEFUNC2(int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *a, a, RSA *b, b, return -1, return) + DEFINEFUNC3(int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a, const char *b, b, int c, c, return -1, return) + DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return nullptr, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(SSL_CONF_CTX *, SSL_CONF_CTX_new, DUMMYARG, DUMMYARG, return nullptr, return); + DEFINEFUNC(void, SSL_CONF_CTX_free, SSL_CONF_CTX *a, a, return ,return); + DEFINEFUNC2(void, SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX *a, a, SSL_CTX *b, b, return, return); + DEFINEFUNC2(unsigned int, SSL_CONF_CTX_set_flags, SSL_CONF_CTX *a, a, unsigned int b, b, return 0, return); + DEFINEFUNC(int, SSL_CONF_CTX_finish, SSL_CONF_CTX *a, a, return 0, return); + DEFINEFUNC3(int, SSL_CONF_cmd, SSL_CONF_CTX *a, a, const char *b, b, const char *c, c, return 0, return); ++#endif + DEFINEFUNC(void, SSL_free, SSL *a, a, return, DUMMYARG) + DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers, const SSL *a, a, return nullptr, return) + DEFINEFUNC(const SSL_CIPHER *, SSL_get_current_cipher, SSL *a, a, return nullptr, return) +@@ -378,7 +403,9 @@ DEFINEFUNC3(void, SSL_set_bio, SSL *a, a, BIO *b, b, BIO *c, c, return, DUMMYARG + DEFINEFUNC(void, SSL_set_accept_state, SSL *a, a, return, DUMMYARG) + DEFINEFUNC(void, SSL_set_connect_state, SSL *a, a, return, DUMMYARG) + DEFINEFUNC(int, SSL_shutdown, SSL *a, a, return -1, return) ++#ifndef LIBRESSL_VERSION_NUMBER + DEFINEFUNC(int, SSL_in_init, const SSL *a, a, return 0, return) ++#endif + DEFINEFUNC(int, SSL_get_shutdown, const SSL *ssl, ssl, return 0, return) + DEFINEFUNC2(int, SSL_set_session, SSL* to, to, SSL_SESSION *session, session, return -1, return) + DEFINEFUNC(void, SSL_SESSION_free, SSL_SESSION *ses, ses, return, DUMMYARG) +@@ -846,20 +873,26 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(EVP_CIPHER_CTX_reset) + RESOLVEFUNC(EVP_PKEY_up_ref) + RESOLVEFUNC(EVP_PKEY_CTX_new) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(EVP_PKEY_param_check) ++#endif + RESOLVEFUNC(EVP_PKEY_CTX_free) + RESOLVEFUNC(EVP_PKEY_base_id) + RESOLVEFUNC(RSA_bits) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(OPENSSL_sk_new_null) + RESOLVEFUNC(OPENSSL_sk_push) + RESOLVEFUNC(OPENSSL_sk_free) + RESOLVEFUNC(OPENSSL_sk_num) + RESOLVEFUNC(OPENSSL_sk_pop_free) + RESOLVEFUNC(OPENSSL_sk_value) ++#endif + RESOLVEFUNC(DH_get0_pqg) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(SSL_CTX_set_options) + RESOLVEFUNC(SSL_CTX_get_security_level) + RESOLVEFUNC(SSL_CTX_set_security_level) ++#endif + #ifdef TLS1_3_VERSION + RESOLVEFUNC(SSL_CTX_set_ciphersuites) + RESOLVEFUNC(SSL_set_psk_use_session_callback) +@@ -869,9 +902,13 @@ bool q_resolveOpenSslSymbols() + + RESOLVEFUNC(SSL_get_client_random) + RESOLVEFUNC(SSL_SESSION_get_master_key) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(SSL_session_reused) ++#endif + RESOLVEFUNC(SSL_get_session) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(SSL_set_options) ++#endif + RESOLVEFUNC(CRYPTO_get_ex_new_index) + RESOLVEFUNC(TLS_method) + RESOLVEFUNC(TLS_client_method) +@@ -898,7 +935,9 @@ bool q_resolveOpenSslSymbols() + + RESOLVEFUNC(SSL_SESSION_get_ticket_lifetime_hint) + RESOLVEFUNC(DH_bits) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(DSA_bits) ++#endif + + #if QT_CONFIG(dtls) + RESOLVEFUNC(DTLSv1_listen) +@@ -928,7 +967,9 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(OCSP_check_validity) + RESOLVEFUNC(OCSP_cert_to_id) + RESOLVEFUNC(OCSP_id_get0_info) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(OCSP_resp_get0_certs) ++#endif + RESOLVEFUNC(OCSP_basic_sign) + RESOLVEFUNC(OCSP_response_create) + RESOLVEFUNC(i2d_OCSP_RESPONSE) +@@ -965,7 +1006,9 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(EC_GROUP_get_degree) + #endif + RESOLVEFUNC(BN_num_bits) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(BN_is_word) ++#endif + RESOLVEFUNC(BN_mod_word) + RESOLVEFUNC(DSA_new) + RESOLVEFUNC(DSA_free) +@@ -979,7 +1022,7 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(EVP_CipherInit) + RESOLVEFUNC(EVP_CipherInit_ex) + RESOLVEFUNC(EVP_CipherUpdate) +- RESOLVEFUNC(EVP_CipherFinal) ++ RESOLVEFUNC(EVP_CipherFinal_ex) + RESOLVEFUNC(EVP_get_digestbyname) + #ifndef OPENSSL_NO_DES + RESOLVEFUNC(EVP_des_cbc) +@@ -1058,12 +1101,14 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey) + RESOLVEFUNC(SSL_CTX_use_PrivateKey_file) + RESOLVEFUNC(SSL_CTX_get_cert_store); ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(SSL_CONF_CTX_new); + RESOLVEFUNC(SSL_CONF_CTX_free); + RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx); + RESOLVEFUNC(SSL_CONF_CTX_set_flags); + RESOLVEFUNC(SSL_CONF_CTX_finish); + RESOLVEFUNC(SSL_CONF_cmd); ++#endif + RESOLVEFUNC(SSL_accept) + RESOLVEFUNC(SSL_clear) + RESOLVEFUNC(SSL_connect) +@@ -1083,7 +1128,9 @@ bool q_resolveOpenSslSymbols() + RESOLVEFUNC(SSL_set_bio) + RESOLVEFUNC(SSL_set_connect_state) + RESOLVEFUNC(SSL_shutdown) ++#ifndef LIBRESSL_VERSION_NUMBER + RESOLVEFUNC(SSL_in_init) ++#endif + RESOLVEFUNC(SSL_get_shutdown) + RESOLVEFUNC(SSL_set_session) + RESOLVEFUNC(SSL_SESSION_free) +diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h +index c46afcf5..4daba4ac 100644 +--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h ++++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h +@@ -80,6 +80,13 @@ QT_BEGIN_NAMESPACE + + #define DUMMYARG + ++#ifdef LIBRESSL_VERSION_NUMBER ++typedef _STACK STACK; ++typedef STACK OPENSSL_STACK; ++typedef void OPENSSL_INIT_SETTINGS; ++typedef int (*X509_STORE_CTX_verify_cb)(int ok,X509_STORE_CTX *ctx); ++#endif ++ + #if !defined QT_LINKED_OPENSSL + // **************** Shared declarations ****************** + // ret func(arg) +@@ -230,7 +237,11 @@ const unsigned char * q_ASN1_STRING_get0_data(const ASN1_STRING *x); + Q_AUTOTEST_EXPORT BIO *q_BIO_new(const BIO_METHOD *a); + Q_AUTOTEST_EXPORT const BIO_METHOD *q_BIO_s_mem(); + ++#ifndef LIBRESSL_VERSION_NUMBER + int q_DSA_bits(DSA *a); ++#else ++#define q_DSA_bits(dsa) q_BN_num_bits((dsa)->p) ++#endif + int q_EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); + Q_AUTOTEST_EXPORT int q_EVP_PKEY_up_ref(EVP_PKEY *a); + EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); +@@ -238,14 +249,33 @@ void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); + int q_EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); + int q_EVP_PKEY_base_id(EVP_PKEY *a); + int q_RSA_bits(RSA *a); ++ ++#ifndef LIBRESSL_VERSION_NUMBER + Q_AUTOTEST_EXPORT int q_OPENSSL_sk_num(OPENSSL_STACK *a); + Q_AUTOTEST_EXPORT void q_OPENSSL_sk_pop_free(OPENSSL_STACK *a, void (*b)(void *)); + Q_AUTOTEST_EXPORT OPENSSL_STACK *q_OPENSSL_sk_new_null(); + Q_AUTOTEST_EXPORT void q_OPENSSL_sk_push(OPENSSL_STACK *st, void *data); + Q_AUTOTEST_EXPORT void q_OPENSSL_sk_free(OPENSSL_STACK *a); + Q_AUTOTEST_EXPORT void * q_OPENSSL_sk_value(OPENSSL_STACK *a, int b); ++#else // LIBRESSL_VERSION_NUMBER ++int q_sk_num(STACK *a); ++#define q_OPENSSL_sk_num(a) q_sk_num(a) ++void q_sk_pop_free(STACK *a, void (*b)(void *)); ++#define q_OPENSSL_sk_pop_free(a, b) q_sk_pop_free(a, b) ++STACK *q_sk_new_null(); ++#define q_OPENSSL_sk_new_null() q_sk_new_null() ++void q_sk_push(STACK *st, void *data); ++#define q_OPENSSL_sk_push(st, data) q_sk_push(st, data) ++void q_sk_free(STACK *a); ++#define q_OPENSSL_sk_free q_sk_free ++void *q_sk_value(STACK *a, int b); ++#define q_OPENSSL_sk_value(a, b) q_sk_value(a, b) ++#endif // LIBRESSL_VERSION_NUMBER ++ ++#ifndef LIBRESSL_VERSION_NUMBER + int q_SSL_session_reused(SSL *a); + unsigned long q_SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); ++#endif + int q_OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + size_t q_SSL_get_client_random(SSL *a, unsigned char *out, size_t outlen); + size_t q_SSL_SESSION_get_master_key(const SSL_SESSION *session, unsigned char *out, size_t outlen); +@@ -269,8 +299,13 @@ int q_DH_bits(DH *dh); + # define q_SSL_load_error_strings() q_OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) + ++#ifndef LIBRESSL_VERSION_NUMBER + #define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_OPENSSL_sk_num)(st) + #define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_OPENSSL_sk_value)(st, i) ++#else ++#define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st) ++#define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_sk_value)(st, i) ++#endif // LIBRESSL_VERSION_NUMBER + + #define q_OPENSSL_add_all_algorithms_conf() q_OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS \ +@@ -279,13 +314,19 @@ int q_DH_bits(DH *dh); + | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + + int q_OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); ++#ifndef LIBRESSL_VERSION_NUMBER + void q_CRYPTO_free(void *str, const char *file, int line); ++#else ++void q_CRYPTO_free(void *a); ++#endif + + long q_OpenSSL_version_num(); + const char *q_OpenSSL_version(int type); + + unsigned long q_SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session); ++#ifndef LIBRESSL_VERSION_NUMBER + unsigned long q_SSL_set_options(SSL *s, unsigned long op); ++#endif + + #ifdef TLS1_3_VERSION + int q_SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +@@ -374,7 +415,9 @@ BIO *q_BIO_new_mem_buf(void *a, int b); + int q_BIO_read(BIO *a, void *b, int c); + Q_AUTOTEST_EXPORT int q_BIO_write(BIO *a, const void *b, int c); + int q_BN_num_bits(const BIGNUM *a); ++#ifndef LIBRESSL_VERSION_NUMBER + int q_BN_is_word(BIGNUM *a, BN_ULONG w); ++#endif + BN_ULONG q_BN_mod_word(const BIGNUM *a, BN_ULONG w); + + #ifndef OPENSSL_NO_EC +@@ -395,7 +438,7 @@ int q_EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); + int q_EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *key, const unsigned char *iv, int enc); + int q_EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); + int q_EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); +-int q_EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); ++int q_EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + const EVP_MD *q_EVP_get_digestbyname(const char *name); + + #ifndef OPENSSL_NO_DES +@@ -497,12 +540,14 @@ int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b); + int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *b); + int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c); + X509_STORE *q_SSL_CTX_get_cert_store(const SSL_CTX *a); ++#ifndef LIBRESSL_VERSION_NUMBER + SSL_CONF_CTX *q_SSL_CONF_CTX_new(); + void q_SSL_CONF_CTX_free(SSL_CONF_CTX *a); + void q_SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *a, SSL_CTX *b); + unsigned int q_SSL_CONF_CTX_set_flags(SSL_CONF_CTX *a, unsigned int b); + int q_SSL_CONF_CTX_finish(SSL_CONF_CTX *a); + int q_SSL_CONF_cmd(SSL_CONF_CTX *a, const char *b, const char *c); ++#endif + void q_SSL_free(SSL *a); + STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a); + const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a); +@@ -513,13 +558,15 @@ X509 *q_SSL_get_peer_certificate(SSL *a); + long q_SSL_get_verify_result(const SSL *a); + SSL *q_SSL_new(SSL_CTX *a); + SSL_CTX *q_SSL_get_SSL_CTX(SSL *a); +-long q_SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg); ++long q_SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); + int q_SSL_read(SSL *a, void *b, int c); + void q_SSL_set_bio(SSL *a, BIO *b, BIO *c); + void q_SSL_set_accept_state(SSL *a); + void q_SSL_set_connect_state(SSL *a); + int q_SSL_shutdown(SSL *a); ++#ifndef LIBRESSL_VERSION_NUMBER + int q_SSL_in_init(const SSL *s); ++#endif + int q_SSL_get_shutdown(const SSL *ssl); + int q_SSL_set_session(SSL *to, SSL_SESSION *session); + void q_SSL_SESSION_free(SSL_SESSION *ses); +@@ -728,7 +775,11 @@ int q_OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, ASN1_GENERALIZEDTIME *n + int q_OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); + ++#ifndef LIBRESSL_VERSION_NUMBER + const STACK_OF(X509) *q_OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); ++#else ++#define q_OCSP_resp_get0_certs(bs) ((bs)->certs) ++#endif + Q_AUTOTEST_EXPORT OCSP_CERTID *q_OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer); + Q_AUTOTEST_EXPORT void q_OCSP_CERTID_free(OCSP_CERTID *cid); + int q_OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); diff --git a/qt-declarative/PKGBUILD b/qt-declarative/PKGBUILD new file mode 100644 index 0000000..992f2ee --- /dev/null +++ b/qt-declarative/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=qt-declarative +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=$pkgver +_debrel=6 +pkgrel=3 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Classes for QML and JavaScript languages' +depends=('qt-base') +makedepends=('python' 'quilt') +groups=('qt') +replaces=('qt5-declarative') +conflicts=('qt5-declarative' 'qtchooser') +provides=('qt5-declarative') +_pkgfqn="${pkgname/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtdeclarative-opensource-src/qtdeclarative-opensource-src_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('a084e4ace0d6868668c95f1b62598a7dd0f455bfb0943ac8956802d7041436686f20c7ccdde7d6fd6c4b8173c936dd8600cf3b87bf8575f55514edfbb51111d3' + '3616a8d70aa7e092c1f34da9bdadb9f3358451620f9b5a052c2514b644f76138fd53ea8462d832fa8389ee66c1322c73d7d85f5ff943293f7c101f986cdd48e9') + +prepare() { + mkdir -p build + + cd ${_pkgfqn} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Symlinks for backwards compatibility + for b in "$pkgdir"/usr/bin/*; do + ln -s $(basename $b) "$pkgdir"/usr/bin/$(basename $b)-qt5 + done + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-doc/PKGBUILD b/qt-doc/PKGBUILD new file mode 100644 index 0000000..b85a167 --- /dev/null +++ b/qt-doc/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Jesus E. + +pkgbase=qt-doc +pkgname=('qt-doc' 'qt-examples') +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('any') +url='https://www.qt.io' +license=('LGPL-3') +makedepends=('qt-tools' 'python' 'pciutils' 'libxtst' 'libxcursor' 'libxrandr' + 'libxss' 'libxcomposite' 'gperf' 'nss' 'clang') +groups=('qt') +_pkgfqn="qt-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/single/${_pkgfqn}.tar.xz") +sha512sums=('e7d22cf22e9baa5622f5075ec1b60536ef05c474370a410b6b0a33a4645389b46471e0a38da679e42e9b6ee750bc784f19eb166975f5e4958bc5123a571ea2f0') + +prepare() { + cd ${_pkgfqn} + + ln -s /usr/bin qttools/ + ln -s /usr/bin/{rcc,uic,moc} qtbase/bin/ +} + +build() { + cd ${_pkgfqn} + + ./configure -confirm-license -opensource \ + -prefix /usr \ + -docdir /usr/share/doc/qt \ + -headerdir /usr/include/qt \ + -archdatadir /usr/lib/qt \ + -datadir /usr/share/qt \ + -sysconfdir /etc/xdg \ + -nomake examples + make docs +} + +package_qt-doc() { + pkgdesc='A cross-platform application and UI framework (Documentation)' + depends=('qt-base') + + cd ${_pkgfqn} + make INSTALL_ROOT="$pkgdir" install_docs + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPLv3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} + +package_qt-examples() { + pkgdesc='Examples and demos from qt documentation' + depends=('qt-doc') + + _base="$pkgdir"/usr/share/doc/qt/examples + + # The various example dirs have conflicting .pro files, but + # QtCreator requires them to be in the same top-level directory. + # Matching the Qt5 installer, only the qtbase project is kept. + mkdir -p $_base + cp ${_pkgfqn}/qtbase/examples/examples.pro $_base + + _fdirs=$(find "${_pkgfqn}" -maxdepth 2 -type d -name examples) + for _dir in $_fdirs; do + _mod=$(basename ${_dir%/examples}) + + if [ -e "$_dir/README" ]; then + cp $_dir/README $_dir/README.$_mod + fi + + cp -rn $_dir/* $_base + done + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPLv3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-graphicaleffects/PKGBUILD b/qt-graphicaleffects/PKGBUILD new file mode 100644 index 0000000..c2ab533 --- /dev/null +++ b/qt-graphicaleffects/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=qt-graphicaleffects +_pkgbasename=qtgraphicaleffects +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Graphical effects for use with Qt Quick 2' +depends=('qt-declarative') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz") +sha512sums=('1620a4daa6f2afc13b84752fa92f6d603aea1f7c796a239691b271a455d6887bba87a9a07edbfe008045f051c3e71fc6e22fc337d146c1793e923cfeb20e897d') + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-imageformats/PKGBUILD b/qt-imageformats/PKGBUILD new file mode 100644 index 0000000..4c83f5b --- /dev/null +++ b/qt-imageformats/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=qt-imageformats +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=2 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Plugins for additional image formats: TIFF, MNG, TGA, WBMP' +depends=('qt-base' 'jasper' 'libmng') +groups=('qt') +replaces=('qt5-imageformats') +conflicts=('qt5-imageformats') +provides=('qt5-imageformats') +_pkgfqn="${pkgname/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz") +sha512sums=('3c821fac83b8d6177af256dc1d68aca14ae6d5cbdedb8d8665158ebcec0f6e6fb790b5d210a1aa8b0679ecff60fafd4e5d1387c6954498b41409ea44177e0d7e') + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-multimedia/PKGBUILD b/qt-multimedia/PKGBUILD new file mode 100644 index 0000000..5fb884b --- /dev/null +++ b/qt-multimedia/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=qt-multimedia +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=5.15.2 +_debrel=3 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Classes for audio, video, radio and camera functionality' +depends=('qt-base' 'gst-plugins-base' 'openal') +makedepends=('qt-declarative' 'gst-plugins-bad' 'quilt') +optdepends=('qt-declarative: QML bindings' 'gst-plugins-good: camera support, additional plugins' + 'gst-plugins-bad: camera support, additional plugins' 'gst-plugins-ugly: additional plugins' + 'gst-libav: ffmpeg plugin') +groups=('qt') +replaces=('qt5-multimedia') +conflicts=('qt5-multimedia') +provides=('qt5-multimedia') +_pkgfqn="${pkgname/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtmultimedia-opensource-src/qtmultimedia-opensource-src_$_debver-$_debrel.debian.tar.xz") +sha512sums=('be58e6934976b04707399f8525dd5d50f73e0539efd1a76c2f9868e35e6f136e0991652df5d46350a9ac39d24313353e4aa826131f268a95e458e57279f448bd' + '29f1c179bda235bbdf379f82f73ff3b570fc62ba1db1091afea7e6acbd65c5e27592be5bf0fbe7a7749082be9a55e04d74be1d396daff6cf89acfefcb67a5ca0') + +prepare() { + mkdir -p build + + cd ${_pkgfqn} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-quick3d/PKGBUILD b/qt-quick3d/PKGBUILD new file mode 100644 index 0000000..620c70b --- /dev/null +++ b/qt-quick3d/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=qt-quick3d +_pkgbasename=qtquick3d +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('GPL-3') +pkgdesc="Qt module and API for defining 3D content in Qt Quick" +depends=('qt-declarative') +makedepends=('assimp') +optdepends=('assimp: Import from assimp') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + qtquick3d-assimp.patch) +sha512sums=('2a1f10430a3e4cd91270f79ab79e3bc6fee856659902f6489f5945a167201133a9a71dcc82c97aa699f97441b377c2981b4d1a65703e469936553f5265fe55ee' + 'ef87c9f0e41930ac7a7c4b5c7c9543426e68831cfb835362a6a198e6ba8bed455d5cc0f7070cc706722801ab4da8e479938d62367d91b75ac502c3ef57553da6') + +prepare() { + mkdir -p build + + cd $_pkgfqn + patch -p1 -i ${srcdir}/qtquick3d-assimp.patch # fix build with system assimp +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.GPL3 -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/qt-quick3d/qtquick3d-assimp.patch b/qt-quick3d/qtquick3d-assimp.patch new file mode 100644 index 0000000..d70f501 --- /dev/null +++ b/qt-quick3d/qtquick3d-assimp.patch @@ -0,0 +1,13 @@ +diff --git a/src/plugins/assetimporters/assimp/assimp.pro b/src/plugins/assetimporters/assimp/assimp.pro +index ca5c499..174a075 100644 +--- a/src/plugins/assetimporters/assimp/assimp.pro ++++ b/src/plugins/assetimporters/assimp/assimp.pro +@@ -10,7 +10,7 @@ QT_FOR_CONFIG += assetimporters-private + include($$OUT_PWD/../qtassetimporters-config.pri) + + qtConfig(system-assimp):!if(cross_compile:host_build) { +- QMAKE_USE_PRIVATE += assimp ++ QMAKE_USE_PRIVATE += quick3d-assimp + } else { + include(../../../3rdparty/assimp/assimp.pri) + } diff --git a/qt-quickcontrols/PKGBUILD b/qt-quickcontrols/PKGBUILD new file mode 100644 index 0000000..4ffd967 --- /dev/null +++ b/qt-quickcontrols/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=qt-quickcontrols +_pkgbasename=qtquickcontrols +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=5.15.2 +_debrel=2 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Reusable Qt Quick based UI controls to create classic desktop-style user interfaces' +depends=('qt-declarative') +makedepends=('quilt') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtquickcontrols-opensource-src/qtquickcontrols-opensource-src_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('52839e7442f4b6b5cbbb741d29ce28e9d2d9f5573499363d17252b166c1f318f37a19ecf1bf17f5cf6940bc29cc2987180b740ce036d924ff329dee9c37823a2' + 'a07021bec3bd3193de46cbc3f0946fc6d4167d4460b615da8a5a54cb8f98368bff662902244fb35398c6dfd7dfb56da6b131802310f31b1967b2d8463e8a5c3d') + +prepare() { + cd ${_pkgfqn} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + mkdir -p ../build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-quickcontrols2/PKGBUILD b/qt-quickcontrols2/PKGBUILD new file mode 100644 index 0000000..ae6bbc6 --- /dev/null +++ b/qt-quickcontrols2/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=qt-quickcontrols2 +_pkgbasename=qtquickcontrols2 +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Next generation user interface controls based on Qt Quick' +depends=('qt-declarative') +optdepends=('qt-graphicaleffects: for the Material style') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz") +sha512sums=('5af506fd5842c505ae5fbd04fdd2a467c5b6a9547b4cea80c9cf051e9dea49bbf17843d8bc12e69e95810e70119c2843c24171c84e0f5df62dd2f59a39903c8f') + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-script/PKGBUILD b/qt-script/PKGBUILD new file mode 100644 index 0000000..af9ccd2 --- /dev/null +++ b/qt-script/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=qt-script +_pkgbasename=qtscript +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=5.15.2+dfsg +_debrel=2 +pkgrel=2 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Classes for making Qt applications scriptable. Provided for Qt 4.x compatibility' +depends=('qt-base') +makedepends=('quilt') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtscript-opensource-src/qtscript-opensource-src_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('71c70b34f7d4a0742df64d20d7e9a685cc640b9cc6a3d22847c04f45a437b3f5537f40225a522ed82787c2744d9a4949dea5b43c2ee81961d5ed175cf10deb32' + 'f18416119bb7a677537906827d36870c69a380e9dcbcadf079bc806d569c43a74e4f8b3806013338c15774e3bf989532d32383e4abac3bbb77da5880ea088f9d') + +prepare() { + cd ${_pkgfqn} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + mkdir -p ../build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-sensors/PKGBUILD b/qt-sensors/PKGBUILD new file mode 100644 index 0000000..4a634d1 --- /dev/null +++ b/qt-sensors/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=qt-sensors +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=$pkgver +_debrel=2 +pkgrel=2 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Provides access to sensor hardware and motion gesture recognition' +depends=('qt-base') +makedepends=('qt-declarative' 'quilt') +optdepends=('qt-declarative: QML bindings') +groups=('qt') +replaces=('qt5-sensors') +conflicts=('qt5-sensors') +provides=('qt5-sensors') +_pkgfqn="${pkgname/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtsensors-opensource-src/qtsensors-opensource-src_$_debver-$_debrel.debian.tar.xz") +sha512sums=('d0a34e0718cc727b1256601bc5f9a2975532d728fdf0cb7678824c7d36aa5049d9c2886053821ec93a238120441c980027306ac633677617867c7aee40bb560b' + '8a691a46206521619515369cd73fd0b6ac4c6d256032e0a4975a745019900e4866e048b068462422c028a147789284f8e3a0b94c5300710ee76590c789174dac') + +prepare() { + mkdir -p build + + cd ${_pkgfqn} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-serialport/PKGBUILD b/qt-serialport/PKGBUILD new file mode 100644 index 0000000..0745d38 --- /dev/null +++ b/qt-serialport/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=qt-serialport +_pkgbasename=qtserialport +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Provides access to hardware and virtual serial ports' +depends=('qt-base') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz") +sha256sums=('59c559d748417306bc1b2cf2315c1e63eed011ace38ad92946af71f23e2ef79d') + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-styleplugins/PKGBUILD b/qt-styleplugins/PKGBUILD new file mode 100644 index 0000000..32a15e4 --- /dev/null +++ b/qt-styleplugins/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=qt-styleplugins +pkgver=5.0.0.20170311 +_commit=335dbece103e2cbf6c7cf819ab6672c2956b17b3 +_debver=5.0.0 +_debrel=4 +pkgrel=1 +pkgdesc="Additional style plugins for Qt" +arch=('i686' 'x86_64') +url='https://github.com/qt/qtstyleplugins' +license=('GPL-3') +depends=('qt-base' 'gtk2') +groups=('qt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/qt/qtstyleplugins/archive/${_commit}.tar.gz" + "https://deb.debian.org/debian/pool/main/q/qtstyleplugins-src/qtstyleplugins-src_${_debver}+git23.g335dbec-${_debrel}.debian.tar.xz" + "fix-build-against-Qt-5.15.patch" + "fix-gtk2-background.patch" + "${pkgname}.hook") +sha512sums=('e8c2d0e9c6b0a47cab04ffd2e9384606638905b63a7c1580f9b629bbcc84ebff19743363ffee3dbd31c3de1dcda684211ad3052932b5aa0081e529afd9cbb14d' + '935d5c763671fde3120f409d6fe7b1c3aa93d21d4658422d679a9670a27451b69eef6464f744ea29c6b41d881f8ca523f3244ac53b0cb86a7c51b9164b5a56b9' + 'f5cedadceb7c4243ba69b5041c6c524223ce742ec9c2c483e706f31e32e9e03e4efb6ed54fa2aada867a7c0145a8f3ec1193377d177c6c77066b5f3ec191e9ce' + 'c39b468c93eaada7d49df9547627fbf91d50292523566ef93287ce0e958b29e6c3635f6e77ad42c4f449a062cc63b68e9f2a24c89524165649f776d205fb5382' + '5f976142d27eabacd1e1050bb39801d2e4cd68ec7459662e0352541d42d6a75740d3238b5120fb47641a125d6e3200f3a39c304497ac603457e3a97e641dabc2') + +prepare() { + cd qtstyleplugins-${_commit} + mv "$srcdir"/debian . + for p in "$srcdir"/*.patch; do + patch -p1 < "$p" + done +} + +build() { + cd qtstyleplugins-${_commit} + qmake PREFIX='/usr' \ + CONFIG+='nostrip' \ + QMAKE_CFLAGS_RELEASE="$CFLAGS" \ + QMAKE_CXXFLAGS_RELEASE="$CXXFLAGS" + make +} + +package() { + cd qtstyleplugins-${_commit} + make INSTALL_ROOT="${pkgdir}" install + install -Dm644 "$srcdir/${pkgname}.hook" "$pkgdir/usr/share/libalpm/hooks/90-${pkgname}.hook" + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/qt-styleplugins/fix-build-against-Qt-5.15.patch b/qt-styleplugins/fix-build-against-Qt-5.15.patch new file mode 100644 index 0000000..7eb7441 --- /dev/null +++ b/qt-styleplugins/fix-build-against-Qt-5.15.patch @@ -0,0 +1,44 @@ +From 335dbece103e2cbf6c7cf819ab6672c2956b17b3 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Thu, 28 May 2020 12:35:42 +0200 +Subject: [PATCH] fix build against Qt 5.15 + +With 0a93db4d82c051164923a10e4382b12de9049b45 ("Unify application +palette handling between QGuiApplication and QApplication") +QApplicationPrivate::setSystemPalette is no longer used and necessary. +--- + src/plugins/styles/gtk2/qgtkstyle.cpp | 2 ++ + src/plugins/styles/gtk2/qgtkstyle_p.cpp | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/src/plugins/styles/gtk2/qgtkstyle.cpp b/src/plugins/styles/gtk2/qgtkstyle.cpp +index 36169c9..2544593 100644 +--- a/src/plugins/styles/gtk2/qgtkstyle.cpp ++++ b/src/plugins/styles/gtk2/qgtkstyle.cpp +@@ -440,7 +440,9 @@ void QGtkStyle::polish(QApplication *app) + // not supported as these should be entirely determined by + // current Gtk settings + if (app->desktopSettingsAware() && d->isThemeAvailable()) { ++#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) + QApplicationPrivate::setSystemPalette(standardPalette()); ++#endif + QApplicationPrivate::setSystemFont(d->getThemeFont()); + d->applyCustomPaletteHash(); + if (!d->isKDE4Session()) +diff --git a/src/plugins/styles/gtk2/qgtkstyle_p.cpp b/src/plugins/styles/gtk2/qgtkstyle_p.cpp +index e57b3d8..e71beb0 100644 +--- a/src/plugins/styles/gtk2/qgtkstyle_p.cpp ++++ b/src/plugins/styles/gtk2/qgtkstyle_p.cpp +@@ -508,7 +508,9 @@ void QGtkStyleUpdateScheduler::updateTheme() + if (oldTheme != QGtkStylePrivate::getThemeName()) { + oldTheme = QGtkStylePrivate::getThemeName(); + QPalette newPalette = qApp->style()->standardPalette(); ++#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) + QApplicationPrivate::setSystemPalette(newPalette); ++#endif + QApplication::setPalette(newPalette); + if (!QGtkStylePrivate::instances.isEmpty()) { + QGtkStylePrivate::instances.last()->initGtkWidgets(); +-- +2.26.2 + diff --git a/qt-styleplugins/fix-gtk2-background.patch b/qt-styleplugins/fix-gtk2-background.patch new file mode 100644 index 0000000..888ec0b --- /dev/null +++ b/qt-styleplugins/fix-gtk2-background.patch @@ -0,0 +1,25 @@ +From 20b0985a77df913585628d49a3b541fb957ae366 Mon Sep 17 00:00:00 2001 +From: gamezelda +Date: Thu, 4 Jun 2020 00:06:50 +0200 +Subject: [PATCH] fix setting background palette + +--- + src/plugins/styles/gtk2/qgtkstyle.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/plugins/styles/gtk2/qgtkstyle.cpp b/src/plugins/styles/gtk2/qgtkstyle.cpp +index 2544593..6138bd2 100644 +--- a/src/plugins/styles/gtk2/qgtkstyle.cpp ++++ b/src/plugins/styles/gtk2/qgtkstyle.cpp +@@ -442,6 +442,8 @@ void QGtkStyle::polish(QApplication *app) + if (app->desktopSettingsAware() && d->isThemeAvailable()) { + #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) + QApplicationPrivate::setSystemPalette(standardPalette()); ++#else ++ QApplication::setPalette(standardPalette()); + #endif + QApplicationPrivate::setSystemFont(d->getThemeFont()); + d->applyCustomPaletteHash(); +-- +2.27.0 + diff --git a/qt-styleplugins/install.sh b/qt-styleplugins/install.sh new file mode 100644 index 0000000..dc88cad --- /dev/null +++ b/qt-styleplugins/install.sh @@ -0,0 +1,20 @@ +_5_0_0_2_changes() { + echo ':: Upstream added a gtk2 platform theme' + # shellcheck disable=SC2016 + echo ' unexport `QT_STYLE_OVERRIDE`' + # shellcheck disable=SC2016 + echo ' export `QT_QPA_PLATFORMTHEME=gtk2`' +} + +post_upgrade() { + local versions=( + '5.0.0-2' + ) + local version + for version in "${versions[@]}"; do + if [[ "$( vercmp "${version}" "${2}" )" -eq 1 ]]; then + # shellcheck disable=SC2091 + "$( printf '_%s_changes' "${version}" | perl -p -e 's/\.|-/_/g' )" + fi + done +} diff --git a/qt-styleplugins/qt-styleplugins.hook b/qt-styleplugins/qt-styleplugins.hook new file mode 100644 index 0000000..33abdcf --- /dev/null +++ b/qt-styleplugins/qt-styleplugins.hook @@ -0,0 +1,9 @@ +[Trigger] +Type = Package +Operation = Upgrade +Target = qt5-base + +[Action] +Description = Qt5 Upgrade Warning +When = PostTransaction +Exec = /usr/bin/echo "[WARNING] qt5-base was updated, qt5 applications will break until qt5-styleplugins is rebuilt." diff --git a/qt-svg/PKGBUILD b/qt-svg/PKGBUILD new file mode 100644 index 0000000..d82620f --- /dev/null +++ b/qt-svg/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=qt-svg +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=5.15.2 +_debrel=3 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Classes for displaying the contents of SVG files' +depends=('qt-base') +makedepends=('quilt') +groups=('qt') +replaces=('qt5-svg') +conflicts=('qt5-svg') +provides=('qt5-svg') +_pkgfqn="${pkgname/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtsvg-opensource-src/qtsvg-opensource-src_$_debver-$_debrel.debian.tar.xz") +sha512sums=('101e9c8fc05b1bb9c4e869564bff8e5723dd35f0ef557185e56e9dc12fdce74c531522c9642cdff639900eccf7ed0e04bfa48142741259697dded990fb481730' + 'a0822c389091a6464b6270bb3f1578a718c70603f66a6cdb78989e157b7fd6e412f9cb83bbaf52d43d3613f3ce9146ef84e36bf4807c54363e70824af56861cd') + +prepare() { + mkdir -p build + + cd ${_pkgfqn} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-tools/PKGBUILD b/qt-tools/PKGBUILD new file mode 100644 index 0000000..ec10f0f --- /dev/null +++ b/qt-tools/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgname=qt-tools +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=5 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc="A cross-platform application and UI framework (Development Tools, QtHelp)" +depends=('qt-base' 'hicolor-icon-theme') +makedepends=('qt-declarative' 'clang' 'qt-webkit') +optdepends=('clang: for qdoc' 'qt-webkit: for Qt Assistant') +groups=('qt') +replaces=('qt5-tools') +conflicts=('qt5-tools' 'qtchooser') +provides=('qt5-tools') +_pkgfqn="${pkgname/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + {assistant,designer,linguist}.desktop) +sha512sums=('3bd32a302af6e81cd5d4eb07d60c5ef233f1ca7af1aae180c933ac28fafffce28c6c868eb032108747937ea951d6d4f0df5516841bc65d22c529207147533a8b' + '7f2fdf6cb3faaefc92bd9489cf23a340a84b8af6aa25b23dd677e7951c125aeed23c8d2de36516ac847c057db3ed1835016b872934683abbde272718192a174d' + '7c7d3c8a8616f197c742228435a4e0bc414a79ee68481c850dbca4534e43abd85bda1053e2111a7c57fe0007e8e3d57f78c410e25517eb849032d53e1c061496' + '2ebb7c14f49b604f23335fcdc9136ae720d1981c3cb60f4197800bf2d18daee237616a192fa6ccf96afb8e1e5fe01dbb231ba4d5954b93b015e336e8da5ca0ef') + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="${pkgdir}" install + + cd ../${_pkgfqn} + # install missing icons and desktop files + for icon in src/linguist/linguist/images/icons/linguist-*-32.png ; do + size=$(echo $(basename ${icon}) | cut -d- -f2) + install -p -D -m644 ${icon} \ + "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/linguist.png" + done + + install -D -m644 src/assistant/assistant/images/assistant.png \ + "${pkgdir}/usr/share/icons/hicolor/32x32/apps/assistant.png" + install -D -m644 src/assistant/assistant/images/assistant-128.png \ + "${pkgdir}/usr/share/icons/hicolor/128x128/apps/assistant.png" + install -D -m644 src/designer/src/designer/images/designer.png \ + "${pkgdir}/usr/share/icons/hicolor/128x128/apps/QtProject-designer.png" + install -d "${pkgdir}/usr/share/applications" + install -m644 "${srcdir}"/{linguist,designer,assistant}.desktop \ + "${pkgdir}/usr/share/applications/" + + # Symlinks for backwards compatibility + for b in "${pkgdir}"/usr/bin/*; do + ln -s $(basename $b) "${pkgdir}"/usr/bin/$(basename $b)-qt5 + done + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "${pkgdir}/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-tools/assistant.desktop b/qt-tools/assistant.desktop new file mode 100644 index 0000000..c84bbd9 --- /dev/null +++ b/qt-tools/assistant.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Qt Assistant +Comment=Shows Qt documentation and examples +Exec=assistant +Icon=assistant +Terminal=false +Type=Application +Categories=Qt;Development;Documentation; diff --git a/qt-tools/designer.desktop b/qt-tools/designer.desktop new file mode 100644 index 0000000..de9272c --- /dev/null +++ b/qt-tools/designer.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt Designer +GenericName=Interface Designer +Comment=Design GUIs for Qt applications +Exec=designer %F +Icon=QtProject-designer +MimeType=application/x-designer; +Terminal=false +Type=Application +Categories=Qt;Development; diff --git a/qt-tools/linguist.desktop b/qt-tools/linguist.desktop new file mode 100644 index 0000000..cde16c2 --- /dev/null +++ b/qt-tools/linguist.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Qt Linguist +Comment=Add translations to Qt applications +Exec=linguist %F +Icon=linguist +MimeType=text/vnd.trolltech.linguist;application/x-linguist; +Terminal=false +Type=Application +Categories=Qt;Development; diff --git a/qt-translations/PKGBUILD b/qt-translations/PKGBUILD new file mode 100644 index 0000000..ee90787 --- /dev/null +++ b/qt-translations/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=qt-translations +_pkgbasename=qttranslations +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('any') +url='https://www.qt.io' +license=('custom:GPL-3+Qt-Company-GPL-Exception-1.0') +pkgdesc="A cross-platform application and UI framework (Translations)" +depends=('qt-base') +makedepends=('qt-tools') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz") +sha512sums=('483b5d919f43c96a032e610cf6316989e7b859ab177cb2f7cb9bb10ebcddf8c9be8e04ff12db38a317c618d13f88455a4d434c7a1133f453882da4e026dd8cbe') + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # remove unfree parts, we don't support webengine and websockets + rm "${pkgdir}"/usr/share/qt/translations/qtwebengine*.qm + rm "${pkgdir}"/usr/share/qt/translations/qtwebsockets*.qm + + # install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.GPL3-EXCEPT -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/qt-webchannel/PKGBUILD b/qt-webchannel/PKGBUILD new file mode 100644 index 0000000..25a05b7 --- /dev/null +++ b/qt-webchannel/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=qt-webchannel +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=5.15.2 +_debrel=2 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Provides access to QObject or QML objects from HTML clients for seamless integration of Qt applications with HTML/JavaScript clients' +depends=('qt-declarative') +makedepends=('quilt') +groups=('qt') +replaces=('qt5-webchannel') +conflicts=('qt5-webchannel') +provides=('qt5-webchannel') +_pkgfqn="${pkgname/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtwebchannel-opensource-src/qtwebchannel-opensource-src_$_debver-$_debrel.debian.tar.xz") +sha512sums=('7ac5e372695616863d247c5a61e5763a3934b58165e35c43da5ef1797d80005aa3d6eb258931ae7ee2b1f6a6fa743635ac4678c9cfe375cefa76e74cc81d095b' + 'abec8d52f735242df69c1759f5883c16d1807c7a9d78f8df392a5326d7c4061b4d6f290ea59a21f90f1a23ebe2ff34743efa0fd9d7c0a9cdb4d3a634b0cb995e') + +prepare() { + mkdir -p build + + cd ${_pkgfqn} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-webkit/0001-Let-Bison-generate-the-header-directly-to-fix-build-.patch b/qt-webkit/0001-Let-Bison-generate-the-header-directly-to-fix-build-.patch new file mode 100644 index 0000000..324fb2b --- /dev/null +++ b/qt-webkit/0001-Let-Bison-generate-the-header-directly-to-fix-build-.patch @@ -0,0 +1,49 @@ +From d92b11fea65364fefa700249bd3340e0cd4c5b31 Mon Sep 17 00:00:00 2001 +From: Dmitry Shachnev +Date: Tue, 4 Aug 2020 21:04:06 +0300 +Subject: [PATCH] Let Bison generate the header directly, to fix build with + Bison 3.7 + +Starting with Bison 3.7, the generated C++ file #include's the header +by default, instead of duplicating it. So we should not delete it. + +Remove the code to add #ifdef guards to the header, since Bison adds +them itself since version 2.6.3. +--- + Source/WebCore/css/makegrammar.pl | 21 +-------------------- + 1 file changed, 1 insertion(+), 20 deletions(-) + +diff --git a/Source/WebCore/css/makegrammar.pl b/Source/WebCore/css/makegrammar.pl +index 5d63b08102eb..9435701c7061 100644 +--- a/Source/WebCore/css/makegrammar.pl ++++ b/Source/WebCore/css/makegrammar.pl +@@ -73,25 +73,6 @@ if ($suffix eq ".y.in") { + } + + my $fileBase = File::Spec->join($outputDir, $filename); +-my @bisonCommand = ($bison, "-d", "-p", $symbolsPrefix, $grammarFilePath, "-o", "$fileBase.cpp"); ++my @bisonCommand = ($bison, "--defines=$fileBase.h", "-p", $symbolsPrefix, $grammarFilePath, "-o", "$fileBase.cpp"); + push @bisonCommand, "--no-lines" if $^O eq "MSWin32"; # Work around bug in bison >= 3.0 on Windows where it puts backslashes into #line directives. + system(@bisonCommand) == 0 or die; +- +-open HEADER, ">$fileBase.h" or die; +-print HEADER << "EOF"; +-#ifndef CSSGRAMMAR_H +-#define CSSGRAMMAR_H +-EOF +- +-open HPP, "<$fileBase.cpp.h" or open HPP, "<$fileBase.hpp" or die; +-while () { +- print HEADER; +-} +-close HPP; +- +-print HEADER "#endif\n"; +-close HEADER; +- +-unlink("$fileBase.cpp.h"); +-unlink("$fileBase.hpp"); +- +-- +2.12.2 + diff --git a/qt-webkit/PKGBUILD b/qt-webkit/PKGBUILD new file mode 100644 index 0000000..65b2c7c --- /dev/null +++ b/qt-webkit/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +pkgname=qt-webkit +_pkgver=5.212.0-alpha4 +pkgver=${_pkgver/-/} +_debver=5.212.0~alpha4 +_debrel=11 +pkgrel=6 +arch=(i686 x86_64) +url='https://www.qt.io' +license=(LGPL-2.1) +pkgdesc="Classes for a WebKit2 based implementation and a new QML API" +depends=(qt-sensors qt-webchannel libxslt libxcomposite gst-plugins-base hyphen) +makedepends=(cmake ruby gperf python qt-tools quilt) +replaces=(qt5-webkit qt5-webkit-ng) +conflicts=(qt5-webkit qt5-webkit-ng) +provides=(qt5-webkit qt5-webkit-ng) +source=("https://github.com/qtwebkit/qtwebkit/releases/download/qtwebkit-$_pkgver/qtwebkit-$_pkgver.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtwebkit-opensource-src/qtwebkit-opensource-src_$_debver-$_debrel.debian.tar.xz" + '0001-Let-Bison-generate-the-header-directly-to-fix-build-.patch') +sha512sums=('33f11270bd030599beff9c1983a6c5ff2d61f407cc8a6825f7f405d46f9184c720fc7f60c7359f08f828db96a2170092875066a0d5c0a21ff09bc48a2603fbf6' + '67ef6c01469d56f75ff813165df00656ec3893c30cbbcd027f0e2a51f017dfed9446df775080ea6dc2ff4f19b5b6a5a0c6d6c0708e147e0c1ac1282939578d6d' + '853142d8a07d387b8d2e345fd132e63f5f59a4f09641af765911a9cd54567bf9f3eb918dc22681e255e210a795e2bacc23550a0e75e0782123e90ab73723c6ba') + +prepare() { + cd qtwebkit-$_pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/bison_3.7.diff || true + + quilt push -av + fi + + # let bison generate the header directly, to fix build with bison 3.7 + patch -p1 -i $srcdir/0001-Let-Bison-generate-the-header-directly-to-fix-build-.patch +} + +build() { + mkdir -p ./build && cd build + cmake ../qtwebkit-$_pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS} -DNDEBUG" \ + -DPORT=Qt \ + -DENABLE_TOOLS=OFF \ + -DENABLE_GEOLOCATION=OFF \ + -DSKIP_DWZ=ON \ + -DUSE_WOFF2=OFF + make +} + +package() { + cd build + make DESTDIR="$pkgdir" install + + # install license + install -Dm644 $srcdir/qtwebkit-$_pkgver/LICENSE.LGPLv21 -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/qt-websockets/PKGBUILD b/qt-websockets/PKGBUILD new file mode 100644 index 0000000..081745e --- /dev/null +++ b/qt-websockets/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=qt-websockets +_pkgbasename=qtwebsockets +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Provides WebSocket communication compliant with RFC 6455' +depends=('qt-base') +makedepends=('qt-declarative') +optdepends=('qt-declarative: QML bindings') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz") +sha512sums=('1b23b79bff4289e785daf51441daaecf6de66ca5a3febfdd8fdb8ce871471bca4faf7663d68b23aaf562b1ebd6e9c8c27b3074f4b93bc9fcd3a0c54f7f79a9c4') + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-x11extras/PKGBUILD b/qt-x11extras/PKGBUILD new file mode 100644 index 0000000..6f7b3ea --- /dev/null +++ b/qt-x11extras/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=qt-x11extras +_qtver=5.15.2 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Provides platform-specific APIs for X11' +depends=('qt-base') +groups=('qt') +replaces=('qt5-x11extras') +conflicts=('qt5-x11extras') +provides=('qt5-x11extras') +_pkgfqn="${pkgname/-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz") +sha512sums=('beaefc865299f4e7c637baa96eb3a69adbe1a41fc7735b46cfec0768c9243391600e69078630fffb4aceba106b7512fd802e745abc38ddab5253233301c93ed9') + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt-xmlpatterns/PKGBUILD b/qt-xmlpatterns/PKGBUILD new file mode 100644 index 0000000..e060b36 --- /dev/null +++ b/qt-xmlpatterns/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=qt-xmlpatterns +_pkgbasename=qtxmlpatterns +_qtver=5.15.2 +pkgver=${_qtver/-/} +_debver=5.15.2 +_debrel=3 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Support for XPath, XQuery, XSLT and XML schema validation' +depends=('qt-base') +makedepends=('qt-declarative' 'quilt') +optdepends=('qt-declarative: QML bindings') +groups=('qt') +_pkgfqn="${_pkgbasename/5-/}-everywhere-src-${_qtver}" +source=("https://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/q/qtxmlpatterns-opensource-src/qtxmlpatterns-opensource-src_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5cdf51878f8bb42db57110acc0c3985a95af098da44e5dda505e0716fef5afc780419058158f7a8f9a0fe3fed83fd64abd856b4dbcdca20efa5e985fa85cc348' + '8bc2e7fa7365b94a6fd125a8ab6b1053c349f7d1dc95c5ec03d2a58a1aa40450e81d963665ed457eeed9e65f0d186b09b2b180226f5bb910a410bc8339201b72') + +prepare() { + cd ${_pkgfqn} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + mkdir -p ../build +} + +build() { + cd build + + qmake ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPL3 "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE.LGPL3 +} diff --git a/qt4/PKGBUILD b/qt4/PKGBUILD new file mode 100644 index 0000000..f7d7300 --- /dev/null +++ b/qt4/PKGBUILD @@ -0,0 +1,217 @@ +# Maintainer: Jesus E. + +pkgname=qt4 +pkgver=4.8.7 +_debver=$pkgver +_debrel=18 +pkgrel=23 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('custom:GPL-3+OpenSSL-Linking-Exception' 'LGPL-3' 'FDL-1.3' 'custom:LGPL-Exception-1.1') +pkgdesc="A cross-platform application and UI framework (legacy version)" +depends=('sqlite' 'ca-certificates' 'fontconfig' 'mesa-libgl' 'libxrandr' 'libxv' 'libxi' 'alsa-lib' + 'xdg-utils' 'hicolor-icon-theme' 'desktop-file-utils' 'libmng' 'libressl') +makedepends=('postgresql-libs' 'unixodbc' 'cups' 'gtk2' 'mesa' 'libxtst' 'quilt') +optdepends=('postgresql-libs: PostgreSQL driver' + 'unixodbc: ODBC driver' + 'libxinerama: Xinerama support' + 'libxcursor: Xcursor support' + 'libxfixes: Xfixes support' + 'icu: Unicode support') +replaces=('qt<=4.8.4') +_pkgfqn="qt-everywhere-opensource-src-${pkgver}" +source=("https://download.qt.io/archive/qt/4.8/${pkgver}/${_pkgfqn}.tar.gz" + "https://deb.debian.org/debian/pool/main/q/qt4-x11/qt4-x11_${_debver}+dfsg-${_debrel}+deb10u1.debian.tar.xz" + "qtconfig-qt4.desktop" + "assistant-qt4.desktop" + "designer-qt4.desktop" + "linguist-qt4.desktop" + "improve-cups-support.patch" + "moc-boost-workaround.patch" + "glib-honor-ExcludeSocketNotifiers-flag.diff" + "l-qclipboard_fix_recursive.patch" + "l-qclipboard_delay.patch" + "qt4-gcc6.patch" + "qt4-glibc-2.25.patch" + "qt4-icu59.patch" + "moc-syslib-workaround.patch" + "patch-src_network_ssl_qsslsocket_openssl_cpp.diff" + "patch-src_network_ssl_qsslsocket_openssl_symbols_cpp.diff" + "libressl-2.8.patch") +sha512sums=('f9f81a2e7205e1fd05c8d923dc73244f29aa33f951fa6b7c5c8193449328b37084796b9b71ad0c317e4e6fd00017c10ea5d67b1b2032551cde00548522218125' + 'e5659aeef85cd1273bf28d53011758b2ae884931884b62d89f48c3a7703276463e16da7e2a4c38a369b94a83ab7495b4e14dc3a27ea7f418dd2bddbe9afa04e0' + 'fbcc1ec9ca04b93941c37d02326f33f3a84cb7630ca83f234845eebdb1875676aa8b27553981d8d42b2d5fcf227c7423228f704efc74a5df25a9ae05c5385fda' + 'c08b74d70e557d968672ad3251c70e23d0447f30f5d62bc63f6165cbb8c372e63b96b1e61e8888e48bc4f589705c95951f9e05723cf998963ddb7585b0f2e246' + '29b3f2b05e27b2c8db3967bb426dfd2ee96e0715e284fc524d58c33fff55756bbb327ba166af943ce5e3fe825b2a3fc44f85c96d5117d25036b3606d7a49047d' + 'fbe3e343678b6cf7f94c97d5fb151028afdfa2fd27a19cbd583da999782f5a71c61a9282fb6284271290b3f5370e6b214b2edd1c05ee1e09d6345389b98be961' + '4a8f828c79bde81ab1e39c9eaba4ef553582d85b62d6d182dda02820c4c8e046de6a25cc77d228955ed37fbc5b55f697a0a464af0bb3e171849851639e9ef4ee' + 'b4eced1fe34f09baa987be59fd21a02f4209551f491ae113c9d1cc3c44b00494a909808e22db306bcae0ee4c4f996097ce2c23994b2ac067cf9f599da5a5fc71' + '6d5216e539d93352cd5f5ca98b5296feba702feba1f198f81de650c399076f0161d8ae712ecd79f1c2833b00b5ce7d4c390e33bbeb7e5542c6860a58a6785cab' + 'bd63961bcb695beebe8686142b84bff7702db4d85d737f5c2da927252b931700d03602f80048223cbbb05d85a5ddb9cb818321d756577f84843690b318f0c413' + '0215f81fd0ed3483d1f79f46a53d9378f7462901410f4bc3f235325974c155454b0e75cba5222180e5ca62099cba7b80419b5fab86380ac6d951b9ae12714444' + 'efe8e1842882b784a14ba137bc6a8a579d5133e579f98c61674f5d3d9b79ff8e895775a79fcf757f7726377cd221396a678d181fa069416b0760a5241d39845a' + 'a19e76d64bbbf148b088e3531135dc3ababd63ea8e71147dcf7d2966802abb2d83b839766882040e5c9efdea2e364d48bc38aa712dd35b850383c7747ffa9745' + '483b382da8ad57f9792df1ad0c85948992d8293819c2774a381544235d9b6a7498b12beb3f9d7d06c4a814f8ded514973453314d71381368148d2fcbbf854e65' + '087c76b5076708e9883a43f0fb7ff4016b937034823ec33edc95aab34a3d2dad7b184d8328d15f7efe6f33037e743bbee253d6c5450ee705f246ac755c9288db' + 'dd87bdb2c3e12f5247b5c36ffa9065eb0bfa9040193d48dcf87f25b808cce47aece9b9dadbc238c0aab4b6fc35aa7b6a3ee3aeb0943ee7deef8315e46c21a3af' + 'aaf3c7314c50717dce4697c69c316d516af47dff00c28355789f2e88ccdfb3d556b715a2ba5e54aae36900bb75ac03a15f2930ab4b9ee0e322326171617ac392' + '413ebafa62f7a39ad569c6ecac47ca32bfe6e87bc07bccf86a732eaf51f152311db172eb197711e0f263e47b7f2c573026b2ee69ab9393b75573c499fa1593a4') + +prepare() { + cd ${_pkgfqn} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/07_trust_dpkg-arch_over_uname-m.diff || true + rm -v debian/patches/94_armv6_uname_entry.diff || true + rm -v debian/patches/aarch64_arm64_qatomic_support.patch || true + rm -v debian/patches/kfreebsd_monotonic_clock.diff || true + rm -v debian/patches/no-ssl3.patch || true + rm -v debian/patches/parisc-atomic.patch || true + rm -v debian/patches/powerpc_designer_gstabs.diff || true + rm -v debian/patches/powerpcspe.diff || true + rm -v debian/patches/qt-everywhere-opensource-src-4.8.5-QTBUG-22829.patch || true + rm -v debian/patches/s390x_jscore.diff || true + rm -v debian/patches/sh.diff || true + rm -v debian/patches/x32.diff || true + rm -v debian/patches/openssl_1.1.patch || true + rm -v debian/patches/riscv64-support.patch || true + + quilt push -av + else + # Fix build with GCC6 (Fedora) + patch -p1 -i "$srcdir"/qt4-gcc6.patch + + # Fix build of Qt4 applications with glibc 2.25 (Fedora) + patch -p1 -i "$srcdir"/qt4-glibc-2.25.patch + fi + + # QTBUG#22829 + patch -p1 -i "${srcdir}"/moc-boost-workaround.patch + + # Workaround a bug where newer kernel headers sys/sysmacros.h define macros like major, minor (Void) + patch -p1 -i "${srcdir}"/moc-syslib-workaround.patch + + # (FS#28381) (KDEBUG#180051) + patch -p1 -i "${srcdir}"/improve-cups-support.patch + + # fixes for LibreOffice from the upstream Qt bug tracker FS#46436, FS#41648, FS#39819 + # https://bugreports.qt.io/browse/QTBUG-37380 + patch -p1 -i "${srcdir}"/glib-honor-ExcludeSocketNotifiers-flag.diff + # https://bugreports.qt.io/browse/QTBUG-34614 + patch -p0 -i "${srcdir}"/l-qclipboard_fix_recursive.patch + # https://bugreports.qt.io/browse/QTBUG-38585 + patch -p0 -i "${srcdir}"/l-qclipboard_delay.patch + + # React to OpenSSL's OPENSSL_NO_SSL3 define (OpenBSD) + patch -p1 -i "$srcdir"/patch-src_network_ssl_qsslsocket_openssl_cpp.diff + patch -p1 -i "$srcdir"/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp.diff + + sed -i "s|-O2|${CXXFLAGS}|" mkspecs/common/{g++,gcc}-base.conf + sed -i "/^QMAKE_LFLAGS_RPATH/s| -Wl,-rpath,||g" mkspecs/common/gcc-base-unix.conf + sed -i "/^QMAKE_LFLAGS\s/s|+=|+= ${LDFLAGS}|g" mkspecs/common/gcc-base.conf + + cp mkspecs/common/linux{,32}.conf + sed -i "/^QMAKE_LIBDIR\s/s|=|= /usr/lib32|g" mkspecs/common/linux32.conf + sed -i "s|common/linux.conf|common/linux32.conf|" mkspecs/linux-g++-32/qmake.conf + + # Fix build with ICU 59 (pld-linux) + patch -p1 -i "$srcdir"/qt4-icu59.patch + + # Fix build with LibreSSL 2.8 (Void) + patch -p1 -i "$srcdir"/libressl-2.8.patch +} + +build() { + export QT4DIR="${srcdir}"/${_pkgfqn} + export LD_LIBRARY_PATH=${QT4DIR}/lib:${LD_LIBRARY_PATH} + export CXXFLAGS+=" -std=gnu++98" # Fix build with GCC 6 + + cd ${_pkgfqn} + + ./configure -confirm-license -opensource \ + -prefix /usr \ + -bindir /usr/libexec/qt4/bin \ + -headerdir /usr/include/qt4 \ + -docdir /usr/share/doc/qt4 \ + -plugindir /usr/lib/qt4/plugins \ + -importdir /usr/lib/qt4/imports \ + -datadir /usr/share/qt4 \ + -translationdir /usr/share/qt4/translations \ + -sysconfdir /etc/xdg \ + -examplesdir /usr/share/doc/qt4/examples \ + -demosdir /usr/share/doc/qt4/demos \ + -plugin-sql-{psql,sqlite,odbc} \ + -system-sqlite \ + -no-phonon \ + -no-phonon-backend \ + -no-webkit \ + -graphicssystem raster \ + -openssl-linked \ + -nomake demos \ + -nomake examples \ + -nomake docs \ + -silent \ + -no-rpath \ + -optimized-qmake \ + -no-reduce-relocations \ + -no-dbus \ + -no-openvg + make +} + +package() { + cd ${_pkgfqn} + make INSTALL_ROOT="${pkgdir}" install + + # install missing icons and desktop files + install -D -m644 src/gui/dialogs/images/qtlogo-64.png \ + "${pkgdir}"/usr/share/icons/hicolor/64x64/apps/qt4logo.png + install -D -m644 tools/assistant/tools/assistant/images/assistant.png \ + "${pkgdir}"/usr/share/icons/hicolor/32x32/apps/assistant-qt4.png + install -D -m644 tools/assistant/tools/assistant/images/assistant-128.png \ + "${pkgdir}"/usr/share/icons/hicolor/128x128/apps/assistant-qt4.png + install -D -m644 tools/designer/src/designer/images/designer.png \ + "${pkgdir}"/usr/share/icons/hicolor/128x128/apps/designer-qt4.png + for icon in tools/linguist/linguist/images/icons/linguist-*-32.png ; do + size=$(echo $(basename ${icon}) | cut -d- -f2) + install -D -m644 ${icon} \ + "${pkgdir}"/usr/share/icons/hicolor/${size}x${size}/apps/linguist-qt4.png + done + install -d "${pkgdir}"/usr/share/applications + install -m644 "${srcdir}"/{assistant,designer,linguist,qtconfig}-qt4.desktop \ + "${pkgdir}"/usr/share/applications/ + + # Useful symlinks for cmake and configure scripts + install -d "${pkgdir}"/usr/bin + for b in "${pkgdir}"/usr/libexec/qt4/bin/*; do + ln -s /usr/libexec/qt4/bin/$(basename $b) "${pkgdir}"/usr/bin/$(basename $b)-qt4 + done + + # install licenses + install -d -m755 ${pkgdir}/usr/share/licenses/${pkgname} + install -D -m644 LICENSE.{FDL,GPL3,LGPLv3} LGPL_EXCEPTION.txt \ + ${pkgdir}/usr/share/licenses/${pkgname} + + # Fix wrong libs path in pkgconfig files + find "${pkgdir}/usr/lib/pkgconfig" -type f -name '*.pc' \ + -exec perl -pi -e "s, -L${srcdir}/?\S+,,g" {} \; + + # Fix wrong bins path in pkgconfig files + find "${pkgdir}/usr/lib/pkgconfig" -type f -name '*.pc' \ + -exec sed -i 's|/usr/bin/|/usr/libexec/qt4/bin/|g' {} \; + + # Fix wrong path in prl files + find "${pkgdir}/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d;s/\(QMAKE_PRL_LIBS =\).*/\1/' {} \; + + # The TGA plugin is broken (FS#33568) + rm "${pkgdir}"/usr/lib/qt4/plugins/imageformats/libqtga.so +} diff --git a/qt4/assistant-qt4.desktop b/qt4/assistant-qt4.desktop new file mode 100644 index 0000000..ccc3e85 --- /dev/null +++ b/qt4/assistant-qt4.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Qt4 Assistant +Comment=Shows Qt4 documentation and examples +Exec=assistant-qt4 +Icon=assistant-qt4 +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development;Documentation; diff --git a/qt4/designer-qt4.desktop b/qt4/designer-qt4.desktop new file mode 100644 index 0000000..86ea4ed --- /dev/null +++ b/qt4/designer-qt4.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Qt4 Designer +GenericName=Interface Designer +Comment=Design GUIs for Qt4 applications +Exec=designer-qt4 +Icon=designer-qt4 +MimeType=application/x-designer; +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development; diff --git a/qt4/improve-cups-support.patch b/qt4/improve-cups-support.patch new file mode 100644 index 0000000..e0305e1 --- /dev/null +++ b/qt4/improve-cups-support.patch @@ -0,0 +1,84 @@ +diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp +--- qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-11 16:55:22.000000000 +0100 ++++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-28 04:34:16.000000000 +0100 +@@ -569,6 +569,32 @@ + void QPrintDialogPrivate::selectPrinter(QCUPSSupport *cups) + { + options.duplex->setEnabled(cups && cups->ppdOption("Duplex")); ++ ++ if (cups) { ++ const ppd_option_t* duplex = cups->ppdOption("Duplex"); ++ if (duplex) { ++ // copy default ppd duplex to qt dialog ++ if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) ++ options.duplexShort->setChecked(true); ++ else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) ++ options.duplexLong->setChecked(true); ++ else ++ options.noDuplex->setChecked(true); ++ } ++ ++ if (cups->currentPPD()) { ++ // set default color ++ if (cups->currentPPD()->color_device) ++ options.color->setChecked(true); ++ else ++ options.grayscale->setChecked(true); ++ } ++ ++ // set collation ++ const ppd_option_t *collate = cups->ppdOption("Collate"); ++ if (collate) ++ options.collate->setChecked(qstrcmp(collate->defchoice, "True")==0); ++ } + } + #endif + +diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp +--- qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp 2010-02-11 16:55:22.000000000 +0100 ++++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp 2010-02-28 04:55:15.000000000 +0100 +@@ -627,6 +627,44 @@ + && d_ptr->paintEngine->type() != QPaintEngine::MacPrinter) { + setOutputFormat(QPrinter::PdfFormat); + } ++ ++#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) ++ // fill in defaults from ppd file ++ QCUPSSupport cups; ++ ++ int printernum = -1; ++ for (int i = 0; i < cups.availablePrintersCount(); i++) { ++ if (printerName().toLocal8Bit() == cups.availablePrinters()[i].name) ++ printernum = i; ++ } ++ if (printernum >= 0) { ++ cups.setCurrentPrinter(printernum); ++ ++ const ppd_option_t* duplex = cups.ppdOption("Duplex"); ++ if (duplex) { ++ // copy default ppd duplex to qt dialog ++ if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) ++ setDuplex(DuplexShortSide); ++ else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) ++ setDuplex(DuplexLongSide); ++ else ++ setDuplex(DuplexNone); ++ } ++ ++ if (cups.currentPPD()) { ++ // set default color ++ if (cups.currentPPD()->color_device) ++ setColorMode(Color); ++ else ++ setColorMode(GrayScale); ++ } ++ ++ // set collation ++ const ppd_option_t *collate = cups.ppdOption("Collate"); ++ if (collate) ++ setCollateCopies(qstrcmp(collate->defchoice, "True")==0); ++ } ++#endif + } + + /*! diff --git a/qt4/l-qclipboard_delay.patch b/qt4/l-qclipboard_delay.patch new file mode 100644 index 0000000..22643e8 --- /dev/null +++ b/qt4/l-qclipboard_delay.patch @@ -0,0 +1,12 @@ +--- src/gui/kernel/qclipboard_x11.cpp.sav 2014-04-25 09:52:03.855693228 +0200 ++++ src/gui/kernel/qclipboard_x11.cpp 2014-04-25 09:51:58.038693777 +0200 +@@ -548,7 +548,8 @@ bool QX11Data::clipboardWaitForEvent(Win + return false; + + XSync(X11->display, false); +- usleep(50000); ++ if (!XPending(X11->display)) ++ usleep(5000); + + now.start(); + diff --git a/qt4/l-qclipboard_fix_recursive.patch b/qt4/l-qclipboard_fix_recursive.patch new file mode 100644 index 0000000..6d3bf2f --- /dev/null +++ b/qt4/l-qclipboard_fix_recursive.patch @@ -0,0 +1,94 @@ +--- src/corelib/kernel/qeventdispatcher_glib.cpp.sav 2014-03-28 15:26:37.000000000 +0100 ++++ src/corelib/kernel/qeventdispatcher_glib.cpp 2014-04-24 09:44:09.358659204 +0200 +@@ -255,22 +255,30 @@ struct GPostEventSource + GSource source; + QAtomicInt serialNumber; + int lastSerialNumber; ++ QEventLoop::ProcessEventsFlags processEventsFlags; + QEventDispatcherGlibPrivate *d; + }; + + static gboolean postEventSourcePrepare(GSource *s, gint *timeout) + { ++ GPostEventSource *source = reinterpret_cast(s); + QThreadData *data = QThreadData::current(); + if (!data) + return false; + ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((source->processEventsFlags & excludeAllFlags) == excludeAllFlags) ++ return false; ++ + gint dummy; + if (!timeout) + timeout = &dummy; + const bool canWait = data->canWaitLocked(); + *timeout = canWait ? -1 : 0; + +- GPostEventSource *source = reinterpret_cast(s); + return (!canWait + || (source->serialNumber != source->lastSerialNumber)); + } +@@ -284,8 +292,14 @@ static gboolean postEventSourceDispatch( + { + GPostEventSource *source = reinterpret_cast(s); + source->lastSerialNumber = source->serialNumber; +- QCoreApplication::sendPostedEvents(); +- source->d->runTimersOnceWithNormalPriority(); ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((source->processEventsFlags & excludeAllFlags) != excludeAllFlags) { ++ QCoreApplication::sendPostedEvents(); ++ source->d->runTimersOnceWithNormalPriority(); ++ } + return true; // i dunno, george... + } + +@@ -329,6 +343,7 @@ QEventDispatcherGlibPrivate::QEventDispa + postEventSource = reinterpret_cast(g_source_new(&postEventSourceFuncs, + sizeof(GPostEventSource))); + postEventSource->serialNumber = 1; ++ postEventSource->processEventsFlags = QEventLoop::AllEvents; + postEventSource->d = this; + g_source_set_can_recurse(&postEventSource->source, true); + g_source_attach(&postEventSource->source, mainContext); +@@ -423,6 +438,7 @@ bool QEventDispatcherGlib::processEvents + + // tell postEventSourcePrepare() and timerSource about any new flags + QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; ++ d->postEventSource->processEventsFlags = flags; + d->timerSource->processEventsFlags = flags; + d->socketNotifierSource->processEventsFlags = flags; + +@@ -435,6 +451,7 @@ bool QEventDispatcherGlib::processEvents + while (!result && canWait) + result = g_main_context_iteration(d->mainContext, canWait); + ++ d->postEventSource->processEventsFlags = savedFlags; + d->timerSource->processEventsFlags = savedFlags; + d->socketNotifierSource->processEventsFlags = savedFlags; + +--- src/corelib/kernel/qeventdispatcher_unix.cpp.sav 2013-06-07 07:16:52.000000000 +0200 ++++ src/corelib/kernel/qeventdispatcher_unix.cpp 2014-04-24 09:43:06.927589535 +0200 +@@ -905,7 +905,15 @@ bool QEventDispatcherUNIX::processEvents + + // we are awake, broadcast it + emit awake(); +- QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); ++ ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((flags & excludeAllFlags) == excludeAllFlags) ++ return false; ++ if(( flags & excludeAllFlags ) != excludeAllFlags ) ++ QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); + + int nevents = 0; + const bool canWait = (d->threadData->canWaitLocked() diff --git a/qt4/libressl-2.8.patch b/qt4/libressl-2.8.patch new file mode 100644 index 0000000..11b1492 --- /dev/null +++ b/qt4/libressl-2.8.patch @@ -0,0 +1,31 @@ +--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp 2018-10-28 11:09:30.259495644 +0100 ++++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp 2018-10-28 11:10:29.941933269 +0100 +@@ -111,10 +111,10 @@ + DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return); + DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return) + DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return) +-DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return) ++DEFINEFUNC(BIO *, BIO_new, const BIO_METHOD *a, a, return 0, return) + DEFINEFUNC2(BIO *, BIO_new_mem_buf, void *a, a, int b, b, return 0, return) + DEFINEFUNC3(int, BIO_read, BIO *a, a, void *b, b, int c, c, return -1, return) +-DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return) ++DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return) + DEFINEFUNC3(int, BIO_write, BIO *a, a, const void *b, b, int c, c, return -1, return) + DEFINEFUNC(int, BN_num_bits, const BIGNUM *a, a, return 0, return) + DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return) + +--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h 2018-10-28 11:20:59.516033387 +0100 ++++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h 2018-10-28 11:20:31.770292922 +0100 +@@ -207,10 +207,10 @@ + int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b); + long q_BIO_ctrl(BIO *a, int b, long c, void *d); + int q_BIO_free(BIO *a); +-BIO *q_BIO_new(BIO_METHOD *a); ++BIO *q_BIO_new(const BIO_METHOD *a); + BIO *q_BIO_new_mem_buf(void *a, int b); + int q_BIO_read(BIO *a, void *b, int c); +-BIO_METHOD *q_BIO_s_mem(); ++const BIO_METHOD *q_BIO_s_mem(); + int q_BIO_write(BIO *a, const void *b, int c); + int q_BN_num_bits(const BIGNUM *a); + int q_CRYPTO_num_locks(); diff --git a/qt4/linguist-qt4.desktop b/qt4/linguist-qt4.desktop new file mode 100644 index 0000000..8231d47 --- /dev/null +++ b/qt4/linguist-qt4.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt4 Linguist +Comment=Add translations to Qt4 applications +Exec=linguist-qt4 +Icon=linguist-qt4 +MimeType=text/vnd.trolltech.linguist;application/x-linguist; +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development; diff --git a/qt4/moc-boost-workaround.patch b/qt4/moc-boost-workaround.patch new file mode 100644 index 0000000..027f806 --- /dev/null +++ b/qt4/moc-boost-workaround.patch @@ -0,0 +1,12 @@ +diff -upr qt-everywhere-opensource-src-4.8.6.orig/src/tools/moc/main.cpp qt-everywhere-opensource-src-4.8.6/src/tools/moc/main.cpp +--- qt-everywhere-opensource-src-4.8.6.orig/src/tools/moc/main.cpp 2014-04-10 21:37:12.000000000 +0300 ++++ qt-everywhere-opensource-src-4.8.6/src/tools/moc/main.cpp 2014-11-06 02:24:44.287305916 +0200 +@@ -190,6 +190,8 @@ int runMoc(int _argc, char **_argv) + + // Workaround a bug while parsing the boost/type_traits/has_operator.hpp header. See QTBUG-22829 + pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"]; ++ pp.macros["BOOST_LEXICAL_CAST_INCLUDED"]; ++ pp.macros["BOOST_NEXT_PRIOR_HPP_INCLUDED"]; + + QByteArray filename; + QByteArray output; diff --git a/qt4/moc-syslib-workaround.patch b/qt4/moc-syslib-workaround.patch new file mode 100644 index 0000000..ac7d5e6 --- /dev/null +++ b/qt4/moc-syslib-workaround.patch @@ -0,0 +1,11 @@ +--- qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp 2017-02-20 18:21:15.826212874 +0100 ++++ qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp 2017-02-20 18:23:02.448342205 +0100 +@@ -192,6 +192,8 @@ + pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"]; + pp.macros["BOOST_LEXICAL_CAST_INCLUDED"]; + pp.macros["BOOST_NEXT_PRIOR_HPP_INCLUDED"]; ++ // Workaround a bug where newer kernel-libc-headers sys/sysmacros.h define macros like major, minor ++ pp.macros["_SYS_SYSMACROS_H_OUTER"]; + + QByteArray filename; + QByteArray output; diff --git a/qt4/qt4-gcc6.patch b/qt4/qt4-gcc6.patch new file mode 100644 index 0000000..d65cd24 --- /dev/null +++ b/qt4/qt4-gcc6.patch @@ -0,0 +1,36 @@ +diff -up qt-everywhere-opensource-src-4.8.7/configure.gcc6 qt-everywhere-opensource-src-4.8.7/configure +--- qt-everywhere-opensource-src-4.8.7/configure.gcc6 2016-04-15 07:04:19.430268222 -0500 ++++ qt-everywhere-opensource-src-4.8.7/configure 2016-04-15 07:05:22.157568689 -0500 +@@ -7744,7 +7744,7 @@ case "$XPLATFORM" in + *-g++*) + # Check gcc's version + case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in +- 5*|4*|3.4*) ++ 8*|7*|6*|5*|4*|3.4*) + ;; + 3.3*) + canBuildWebKit="no" +@@ -8060,7 +8060,7 @@ g++*) + 3.*) + COMPILER_VERSION="3.*" + ;; +- 5*|4.*) ++ 8*|7*|6*|5*|4.*) + COMPILER_VERSION="4" + ;; + *) +diff -up qt-everywhere-opensource-src-4.8.7/src/xmlpatterns/api/qcoloroutput_p.h.gcc6 +qt-everywhere-opensource-src-4.8.7/src/xmlpatterns/api/qcoloroutput_p.h +--- qt-everywhere-opensource-src-4.8.7/src/xmlpatterns/api/qcoloroutput_p.h.gcc6 2015-05-07 09:14:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/xmlpatterns/api/qcoloroutput_p.h 2016-04-15 07:04:19.431268227 -0500 +@@ -70,8 +70,8 @@ namespace QPatternist + ForegroundShift = 10, + BackgroundShift = 20, + SpecialShift = 20, +- ForegroundMask = ((1 << ForegroundShift) - 1) << ForegroundShift, +- BackgroundMask = ((1 << BackgroundShift) - 1) << BackgroundShift ++ ForegroundMask = 0x1f << ForegroundShift, ++ BackgroundMask = 0x7 << BackgroundShift + }; + + public: diff --git a/qt4/qt4-glibc-2.25.patch b/qt4/qt4-glibc-2.25.patch new file mode 100644 index 0000000..ca7b98b --- /dev/null +++ b/qt4/qt4-glibc-2.25.patch @@ -0,0 +1,30 @@ +diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h.majmin +qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h +--- qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h.majmin 2015-05-07 09:14:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h 2016-12-08 12:10:29.677359701 -0600 +@@ -52,7 +52,7 @@ + /* + can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0)) + */ +-#define QT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch)) ++#define QT_VERSION_CHECK(qt_version_check_major, qt_version_check_minor, qt_version_check_patch) ((qt_version_check_major<<16)|(qt_version_check_minor<<8)|(qt_version_check_patch)) + + #define QT_PACKAGEDATE_STR "2015-05-07" + +diff -up qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp.QTBUG-22829 qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp +--- qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp.QTBUG-22829 2015-05-07 09:14:44.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/tools/moc/main.cpp 2016-12-08 12:32:46.638962448 -0600 +@@ -188,10 +188,12 @@ int runMoc(int _argc, char **_argv) + pp.macros["Q_MOC_RUN"]; + pp.macros["__cplusplus"]; + +- // Workaround a bug while parsing the boost/type_traits/has_operator.hpp header. See QTBUG-22829 ++ // Workaround a bugs while parsing some boost headers. See QTBUG-22829 + pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"]; + pp.macros["BOOST_LEXICAL_CAST_INCLUDED"]; + pp.macros["BOOST_NEXT_PRIOR_HPP_INCLUDED"]; ++ pp.macros["BOOST_TYPE_TRAITS_HPP"]; ++ pp.macros["_SYS_SYSMACROS_H_OUTER"]; + + QByteArray filename; + QByteArray output; diff --git a/qt4/qt4-icu59.patch b/qt4/qt4-icu59.patch new file mode 100644 index 0000000..ed6a8b5 --- /dev/null +++ b/qt4/qt4-icu59.patch @@ -0,0 +1,11 @@ +--- qt-everywhere-opensource-src-4.8.7/src/corelib/tools/qlocale_icu.cpp~ 2017-04-25 07:42:22.000000000 +0000 ++++ qt-everywhere-opensource-src-4.8.7/src/corelib/tools/qlocale_icu.cpp 2017-04-25 07:44:34.675363008 +0000 +@@ -43,6 +43,8 @@ + #include "qlibrary.h" + #include "qdebug.h" + ++#define UCHAR_TYPE unsigned short ++ + #include "unicode/uversion.h" + #include "unicode/ucol.h" + diff --git a/qt4/qtconfig-qt4.desktop b/qt4/qtconfig-qt4.desktop new file mode 100644 index 0000000..59c8094 --- /dev/null +++ b/qt4/qtconfig-qt4.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Qt4 Config +Comment=Configure Qt4 behavior, styles, fonts +Exec=qtconfig-qt4 +Icon=qt4logo +Terminal=false +Type=Application +Categories=Qt;Settings; +NoDisplay=true diff --git a/qtcreator/PKGBUILD b/qtcreator/PKGBUILD new file mode 100644 index 0000000..0f96698 --- /dev/null +++ b/qtcreator/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=qtcreator +pkgver=4.14.1 +_clangver=11.0.0 +pkgrel=3 +pkgdesc="Lightweight, cross-platform integrated development environment" +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('custom:GPL-3+Qt-Company-GPL-Exception-1.0') +depends=('qt-tools' 'qt-quickcontrols' 'qt-quickcontrols2' 'qt-svg' 'qt-quick3d' 'qt-serialport' + clang=$_clangver 'clazy' 'syntax-highlighting' 'yaml-cpp') +makedepends=('cmake' 'llvm' 'python') +options=(docs) +optdepends=('qt-doc: integrated Qt documentation' + 'qt-examples: welcome page examples' + 'qt-translations: for other languages' + 'gdb: debugger' + 'cmake: cmake project support' + 'qbs: QBS project support' + 'x11-ssh-askpass: ssh support' + 'git-legacy: git support' + 'mercurial: mercurial support' + 'bzr: bazaar support' + 'valgrind: analyze support') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/q/qtcreator/qtcreator_${pkgver}.orig.tar.xz") +sha512sums=('09c18776bab2958b8dd7f61fa793964d12ba54f20167277e5cbcabfc040ecc92d3ec8e96eb8e77c1899998a6c82cce6b316cc709738c6262622aa80f0f9989e8') + +prepare() { + cd qt-creator-opensource-src-$pkgver + + # use system qbs + rm -r src/shared/qbs + # fix linking to clang + sed -e 's|clangFormat|clang-cpp|' -i src/plugins/clangformat/CMakeLists.txt + # remove unfree parts + rm -rv src/plugins/help/webenginehelpviewer.{cpp,h} +} + +build() { + cmake \ + -B build \ + -S qt-creator-opensource-src-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DWITH_DOCS=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -Dm644 qt-creator-opensource-src-$pkgver/LICENSE.GPL3-EXCEPT -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/qtct/PKGBUILD b/qtct/PKGBUILD new file mode 100644 index 0000000..af391c5 --- /dev/null +++ b/qtct/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=qtct +_pkgname=qt5ct +pkgver=1.1 +_debver=1.1 +_debrel=1 +pkgrel=1 +pkgdesc='Qt Configuration Utility' +arch=('i686' 'x86_64') +url='https://qt5ct.sourceforge.io/' +license=('Simplified-BSD') +depends=('qt-svg') +makedepends=('qt-tools') +source=("https://downloads.sourceforge.net/project/${_pkgname}/${_pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/q/qt5ct/qt5ct_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('0df00c0680aefb0eada1ddb70886fd63641c403ab42843f8d209413a56895dce0a88eb88a98d09d23a30df3b15ca1d595237592958769a1be86719f2a16cbdf7' + '562b3a7c1ca9c2f394f9a2f389c82944be5a70f868ed8e035402749c0ef9634ea36ec897b57ab1e0d6c21c910d6ef1a87d09a64788d63f640a8621c18183a14b') + +build() { + cd $_pkgname-$pkgver + qmake-qt5 $_pkgname.pro + make +} + +package() { + cd $_pkgname-$pkgver + make INSTALL_ROOT="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/qtemu/PKGBUILD b/qtemu/PKGBUILD new file mode 100644 index 0000000..c42dd59 --- /dev/null +++ b/qtemu/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=qtemu +pkgver=2.1 +pkgrel=2 +pkgdesc="Graphical user interface for QEMU written in Qt" +arch=('i686' 'x86_64') +url='https://qtemu.org' +license=('GPL-2') +depends=('qemu-legacy' 'qt-base') +source=("${pkgname}-${pkgver}.tar.bz2::https://gitlab.com/qtemu/gui/-/archive/${pkgver}/gui-${pkgver}.tar.bz2" + "libre.patch") +sha512sums=('e96e5299c5c8281c4c1fc0ef08a8ca55082cfb877ea1bc1b8947bb61df78e80963f70c4e3a3ca34931a181d4daa090e9392737ee0917f6650ba87bb6dd0ea9ef' + 'c749331e87d4583c0e7e59e1fb28695abc13d3a448dd290bb76326715232acb6abde705276db51f02c586bc9c1be545d3cfe906ca2ebc642816fd2da8beb7cc3') + +prepare() { + mv "gui-${pkgver}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + patch -Np1 -i ${srcdir}/libre.patch + + if ! [ -d build ] + then + mkdir build + fi +} + +build() { + cd "${pkgname}-${pkgver}/build" + qmake-qt5 \ + QMAKE_CFLAGS="${CFLAGS}" \ + QMAKE_CXXFLAGS="${CXXFLAGS}" \ + ../qtemu.pro + make +} + +package() { + cd "${pkgname}-${pkgver}/build" + install -Dm755 qtemu -t "${pkgdir}/usr/bin" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/qtemu.desktop" -t "${pkgdir}/usr/share/applications" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/qtemu.png" -t "${pkgdir}/usr/share/pixmaps" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE.md" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/qtemu/libre.patch b/qtemu/libre.patch new file mode 100644 index 0000000..62cf550 --- /dev/null +++ b/qtemu/libre.patch @@ -0,0 +1,143 @@ +--- a/src/machine.cpp 2019-07-27 09:34:51.000000000 +0200 ++++ b/src/machine.cpp 2023-10-23 23:25:31.240013828 +0200 +@@ -99,7 +99,6 @@ + * @brief Get the operating system version of the machine + * + * Get the operating system version of the machine. +- * Ex: Debian, Mageia, Arch Linux... + */ + QString Machine::getOSVersion() const + { +@@ -110,7 +109,6 @@ + * @brief Set the operating system version of the machine + * + * Set the operating system version of the machine. +- * Ex: Debian, Mageia, Arch Linux... + */ + void Machine::setOSVersion(const QString &value) + { +@@ -145,7 +143,6 @@ + * @brief Get the machine path + * + * Get the machine path +- * Ex: /home/xexio/Vms/Debian + */ + QString Machine::getPath() const + { +@@ -156,7 +153,6 @@ + * @brief Set the machine path + * + * Set the machine path +- * Ex: /home/xexio/Vms/Debian + */ + void Machine::setPath(const QString &value) + { +@@ -951,7 +947,7 @@ + audioCards.append(audioIterator.next()); + } + +- qemuCommand << "-soundhw"; ++ qemuCommand << "-device"; + qemuCommand << audioCards; + + QString bootOrder; +--- a/src/machineconfig/machineconfiggeneraltabs.cpp 2019-07-27 09:34:51.000000000 +0200 ++++ b/src/machineconfig/machineconfiggeneraltabs.cpp 2023-10-24 10:27:39.790232094 +0200 +@@ -47,7 +47,6 @@ + m_OSType->setEnabled(enableFields); + + m_OSType->addItem("GNU/Linux"); +- m_OSType->addItem("Microsoft Windows"); + m_OSType->addItem("BSD"); + m_OSType->addItem(tr("Other")); + m_OSType->setCurrentText(machine->getOSType()); +@@ -103,32 +102,11 @@ + this->m_OSVersion->clear(); + + if (OSSelected == "GNU/Linux") { +- this->m_OSVersion->addItem(tr("Debian")); +- this->m_OSVersion->addItem(tr("Ubuntu")); +- this->m_OSVersion->addItem(tr("Fedora")); +- this->m_OSVersion->addItem(tr("OpenSuse")); +- this->m_OSVersion->addItem(tr("Mageia")); +- this->m_OSVersion->addItem(tr("Gentoo")); +- this->m_OSVersion->addItem(tr("Arch Linux")); +- this->m_OSVersion->addItem(tr("Linux")); +- } else if (OSSelected == "Microsoft Windows") { +- this->m_OSVersion->addItem(tr("Microsoft 95")); +- this->m_OSVersion->addItem(tr("Microsoft 98")); +- this->m_OSVersion->addItem(tr("Microsoft 2000")); +- this->m_OSVersion->addItem(tr("Microsoft XP")); +- this->m_OSVersion->addItem(tr("Microsoft Vista")); +- this->m_OSVersion->addItem(tr("Microsoft 7")); +- this->m_OSVersion->addItem(tr("Microsoft 8")); +- this->m_OSVersion->addItem(tr("Microsoft 10")); ++ this->m_OSVersion->addItem(tr("Generic GNU/Linux")); + } else if (OSSelected == "BSD") { +- this->m_OSVersion->addItem(tr("FreeBSD")); +- this->m_OSVersion->addItem(tr("OpenBSD")); +- this->m_OSVersion->addItem(tr("NetBSD")); ++ this->m_OSVersion->addItem(tr("HyperbolaBSD")); + } else { +- this->m_OSVersion->addItem(tr("Debian GNU Hurd")); +- this->m_OSVersion->addItem(tr("Arch Hurd")); +- this->m_OSVersion->addItem(tr("Redox")); +- this->m_OSVersion->addItem(tr("ReactOS")); ++ this->m_OSVersion->addItem(tr("Unknown")); + } + } + +@@ -193,7 +171,6 @@ + * @return version of the operating system + * + * Get the opearting system version +- * Ex: Debian, Mageia, FreeBSD, OpenBSD... + */ + QString BasicTab::getMachineVersion() const + { +--- a/src/newmachine/generalpage.cpp 2019-07-27 09:34:51.000000000 +0200 ++++ b/src/newmachine/generalpage.cpp 2023-10-24 10:36:58.970236276 +0200 +@@ -45,7 +45,6 @@ + m_OSTypeLabel = new QLabel(tr("Type") + ":", this); + m_OSType = new QComboBox(this); + m_OSType->addItem("GNU/Linux"); +- m_OSType->addItem("Microsoft Windows"); + m_OSType->addItem("BSD"); + m_OSType->addItem(tr("Other")); + +@@ -97,32 +96,11 @@ + this->m_OSVersion->clear(); + + if (OSSelected == 0) { +- this->m_OSVersion->addItem(tr("Debian")); +- this->m_OSVersion->addItem(tr("Ubuntu")); +- this->m_OSVersion->addItem(tr("Fedora")); +- this->m_OSVersion->addItem(tr("OpenSuse")); +- this->m_OSVersion->addItem(tr("Mageia")); +- this->m_OSVersion->addItem(tr("Gentoo")); +- this->m_OSVersion->addItem(tr("Arch Linux")); +- this->m_OSVersion->addItem(tr("Linux")); ++ this->m_OSVersion->addItem(tr("Generic GNU/Linux")); + } else if (OSSelected == 1) { +- this->m_OSVersion->addItem(tr("Microsoft 95")); +- this->m_OSVersion->addItem(tr("Microsoft 98")); +- this->m_OSVersion->addItem(tr("Microsoft 2000")); +- this->m_OSVersion->addItem(tr("Microsoft XP")); +- this->m_OSVersion->addItem(tr("Microsoft Vista")); +- this->m_OSVersion->addItem(tr("Microsoft 7")); +- this->m_OSVersion->addItem(tr("Microsoft 8")); +- this->m_OSVersion->addItem(tr("Microsoft 10")); ++ this->m_OSVersion->addItem(tr("HyperbolaBSD")); + } else if (OSSelected == 2) { +- this->m_OSVersion->addItem(tr("FreeBSD")); +- this->m_OSVersion->addItem(tr("OpenBSD")); +- this->m_OSVersion->addItem(tr("NetBSD")); +- } else if (OSSelected == 3) { +- this->m_OSVersion->addItem(tr("Debian GNU Hurd")); +- this->m_OSVersion->addItem(tr("Arch Hurd")); +- this->m_OSVersion->addItem(tr("Redox")); +- this->m_OSVersion->addItem(tr("ReactOS")); ++ this->m_OSVersion->addItem(tr("Unknown")); + } + } + \ No newline at end of file diff --git a/qtpass/PKGBUILD b/qtpass/PKGBUILD new file mode 100644 index 0000000..bc1746a --- /dev/null +++ b/qtpass/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=qtpass +pkgver=1.3.2 +_debver=$pkgver +_debrel=4 +pkgrel=3 +pkgdesc="A multi-platform GUI for password-store" +url='https://qtpass.org/' +license=('GPL-3') +arch=('i686' 'x86_64') +depends=('qt-base' 'password-store' 'pwgen') +makedepends=('qt-tools' 'qt-svg' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/IJHack/${pkgname}/archive/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/q/qtpass/qtpass_$_debver-$_debrel.debian.tar.xz") +sha512sums=('9026f74f6ff75fcef2f6a0862484a2a1eaed1370edd0659e8b4d20039affe846e0da3a0a26a804563813bc678638ab67fa516441208e70c7e9de9b2eda876a10' + 'cadadec78f4bc5553c2b40add8dd5bd8272f0a5edb18a904e8c84962a839c92f4f7fe59209d1a4098a10da4fa06b3b86768acd4ed14dc355c5f52269e306d151') + +prepare() { + cd "${srcdir}/QtPass-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -i 's|qtpass-icon|qtpass|' ${pkgname}.desktop +} + +build() { + cd "${srcdir}/QtPass-${pkgver}" + + qmake-qt5 + make +} + +package() { + cd "${srcdir}/QtPass-${pkgver}" + + install -Dm755 main/qtpass "${pkgdir}/usr/bin/${pkgname}" + install -Dm644 artwork/icon.png "${pkgdir}/usr/share/pixmaps/${pkgname}.png" + install -Dm644 ${pkgname}.desktop "${pkgdir}/usr/share/applications/${pkgname}.desktop" + install -Dm644 ${pkgname}.1 "${pkgdir}/usr/share/man/man1/${pkgname}.1" + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/quazip/PKGBUILD b/quazip/PKGBUILD new file mode 100644 index 0000000..47ca7e1 --- /dev/null +++ b/quazip/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=quazip +pkgver=1.1 +pkgrel=2 +pkgdesc="C++ wrapper for the Gilles Vollant's ZIP/UNZIP C package" +url='https://stachenov.github.io/quazip/' +license=('LGPL-2.1') +arch=('i686' 'x86_64') +depends=('qt-base') +makedepends=('cmake') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/stachenov/${pkgname}/archive/v${pkgver}.tar.gz") +sha512sums=('418516759e993c2e5636422c6a14e2caf95f836698b91d2188df5ef9b97879ee326255273793fc802325e14f378cbe2baad7e6ec2e1732e19bf238f70891f22c') + +build() { + cmake \ + -B build \ + -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/quesoglc/PKGBUILD b/quesoglc/PKGBUILD new file mode 100644 index 0000000..aff87c6 --- /dev/null +++ b/quesoglc/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=quesoglc +pkgver=0.7.2 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc="A free and libre implementation of the OpenGL Character Renderer (GLC)" +arch=('i686' 'x86_64') +url='https://quesoglc.sourceforge.net/' +license=('LGPL-2.1') +depends=('fontconfig' 'freeglut' 'fribidi' 'glew') +makedepends=('pkg-config' 'quilt') +source=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/q/quesoglc/quesoglc_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('f53d4c2a8c9f0cda9eecdf95087589dd893974e5059ca208909c84fb82084627398f578d428fe612e6b2b6f7e428c71de4139e41a64df063129d16003c6d9fd8' + '35fa08a81c581e7827d9eeae89edbdc47b64606a1c4ec9cf793904a0dd0a835acf144675d02216d0d3c5ce62122a306e3dfd3e825ba84f24d11005ede4a3d885') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/01_fix_glew_search.diff || true + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/quota-tools/LICENSE b/quota-tools/LICENSE new file mode 100644 index 0000000..0a5fe98 --- /dev/null +++ b/quota-tools/LICENSE @@ -0,0 +1,26 @@ +This package was debianized by Michael Meskes on +Mon, 20 Mar 2000 14:12:42 +0100. + +It was downloaded from http://www.sf.net/projects/linuxquota/ + +Upstream Authors: Marco van Wieringen + Jan Kara + +Copyright 1980-2008 by the above authors and others. + + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License (Version 2.0) can be found in /usr/share/common-licenses/GPL'. + +Exceptions: + +In quotaio_xfs.h, the license is GNU GPL version 2 only. + +For some files the license is the BSD license, with the advertising +clause removed retroactively. + diff --git a/quota-tools/PKGBUILD b/quota-tools/PKGBUILD new file mode 100644 index 0000000..d4dd04d --- /dev/null +++ b/quota-tools/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=quota-tools +pkgver=4.06 +pkgrel=4 +epoch=1 +pkgdesc="Tools to manage kernel-level quotas" +arch=('i686' 'x86_64') +url="https://linuxquota.sourceforge.io/" +license=('GPL-2' 'Modified-BSD') +depends=('e2fsprogs' 'libwrap') +makedepends=('rpcsvc-proto') +backup=('etc/warnquota.conf' + 'etc/quotatab' + 'etc/quotagrpadmins' + 'etc/conf.d/quota') +options=('!emptydirs') +source=(https://downloads.sourceforge.net/sourceforge/linuxquota/quota-${pkgver}.tar.gz + quota.confd + quota.initd + rpc-rquotad.initd + LICENSE) +sha512sums=('cece46b8e3a82e8afcf8bfc9f6b310ec91afe034102cebc031bc7d7e04287fdbffb21ab1d3e6e1825175cffa4bad0a4ecbefec0efee028d961b14ac626d5c871' + '3253b69932332eff2944753f687d780d651dc2b21b524b7055164b91292c13c346cd46443bd58267b239f72fd8918a7e113eec62871573ee94e33df5eb3c82f8' + '6a0536285bb340779cf4989060ed5a10c9c4a24a48d334174cd84cd54938d042f7a4047f837f96fc7a3c88a1d20317f662c984bd88c00b32cbf48302ba82a529' + 'c6ab8d6e0e15032bbbee523c2550e7f23d48fb45035d37181e988f2f96cd1ece316681f1b529b51fd1aeb390c5f27a6911f5de52132e90b4cbcfb4c2dfc95954' + 'ecf32a73808915c8ed7c29e0bbf195c33eedfe929752b6857cf86956cd73b512d7906b06c8ec14a6ba0dac41e4523bfecf1422d31a48567f843d869e38e164b8') + +build() { + cd quota-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-libwrap \ + --enable-rpc \ + --enable-rpcsetquota + make +} + +package() { + cd quota-$pkgver + make DESTDIR="${pkgdir}" STRIP="" install + install -Dm644 ${srcdir}/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + + install -Dm644 ${srcdir}/quota.confd ${pkgdir}/etc/conf.d/quota + for f in quota rpc-rquotad; do + install -Dm755 ${srcdir}/$f.initd ${pkgdir}/etc/init.d/$f + done + + # remove conflicts + rm -rf "${pkgdir}"/usr/include +} diff --git a/quota-tools/quota.confd b/quota-tools/quota.confd new file mode 100644 index 0000000..6e66c88 --- /dev/null +++ b/quota-tools/quota.confd @@ -0,0 +1,20 @@ +# /etc/conf.d/quota: config file for /etc/init.d/quota + +# Note: if your console is hooked up to a serial terminal, +# you prob want to drop the '-v' from the OPTS vars below. + + +# Run quotacheck ? +RUN_QUOTACHECK="yes" + + +# Options for quotacheck +QUOTACHECK_OPTS="-avug" + + +# Options for quotaon +QUOTAON_OPTS="-avug" + + +# Options for quotaoff +QUOTAOFF_OPTS="-avug" diff --git a/quota-tools/quota.initd b/quota-tools/quota.initd new file mode 100644 index 0000000..bfc0623 --- /dev/null +++ b/quota-tools/quota.initd @@ -0,0 +1,37 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 + +extra_started_commands="check" +description_check="Running quotacheck with quota being offline" + +depend() { + need localmount + use portmap +} + +start() { + if [ "${RUN_QUOTACHECK}" = "yes" ] ; then + ebegin "Checking quotas (may take a while)" + quotacheck ${QUOTACHECK_OPTS} + eend $? + fi + + ebegin "Starting quota" + quotaon ${QUOTAON_OPTS} + eend $? +} + +stop() { + ebegin "Stopping quota" + quotaoff ${QUOTAOFF_OPTS} + eend $? +} + +check() { + ebegin "Checking quota" + quotaoff ${QUOTAOFF_OPTS} && \ + quotacheck ${QUOTACHECK_OPTS} && \ + quotaon ${QUOTAON_OPTS} + eend $? +} diff --git a/quota-tools/rpc-rquotad.initd b/quota-tools/rpc-rquotad.initd new file mode 100644 index 0000000..528e46b --- /dev/null +++ b/quota-tools/rpc-rquotad.initd @@ -0,0 +1,25 @@ +#!/sbin/openrc-run +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +[ -e /etc/conf.d/nfs ] && . /etc/conf.d/nfs + +rpc_bin=/usr/sbin/rpc.rquotad + +depend() { + use ypbind net + need portmap + after quota +} + +start() { + ebegin "Starting rpc.rquotad" + ${rpc_bin} ${OPTS_RPC_RQUOTAD} + eend $? +} + +stop() { + ebegin "Stopping rpc.rquotad" + start-stop-daemon --stop --quiet --exec ${rpc_bin} + eend $? +} diff --git a/radare2/PKGBUILD b/radare2/PKGBUILD new file mode 100644 index 0000000..2c16369 --- /dev/null +++ b/radare2/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=radare2 +pkgver=5.9.4 +pkgrel=1 +pkgdesc="Free and libre tools to disasm, debug, analyze and manipulate binary files" +url='https://radare.org' +arch=('i686' 'x86_64') +license=('GPL-3' 'LGPL-3') +depends=('sh' 'capstone' 'libressl' 'libzip' 'zlib' 'lz4' 'xxhash' 'file' 'libuv') +makedepends=('meson') +options=('!emptydirs') +source=("https://github.com/radare/radare2/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('51d42b6d98027d3f3d85570e79ea18a8f220c145e3451fd10d82eea1a0542648f83447bb6cb6f5bbf76241677a2412bf064ffbade75e69b486c6148543aa4b0f') + +build() { + cd ${pkgname}-${pkgver} + touch libr/config.mk + hyperbola-meson build \ + -D use_sys_capstone=true \ + -D use_capstone_version=v5 \ + -D use_sys_magic=true \ + -D use_sys_zip=true \ + -D use_sys_zlib=true \ + -D use_sys_lz4=true \ + -D use_sys_xxhash=true \ + -D use_sys_openssl=true \ + -D use_libuv=true \ + -D use_webui=false \ + -D want_threads=false + + ninja -C build +} + +package() { + cd ${pkgname}-${pkgver} + DESTDIR="${pkgdir}" ninja -C build install + cp -r doc/* "${pkgdir}/usr/share/doc/radare2" + ln -s /usr/share/man/man1/radare2.1.gz "${pkgdir}/usr/share/man/man1/r2.1.gz" + install -Dm 644 COPYING{,.LESSER} -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/radicale/PKGBUILD b/radicale/PKGBUILD new file mode 100644 index 0000000..a5bdec4 --- /dev/null +++ b/radicale/PKGBUILD @@ -0,0 +1,76 @@ +# Maintainer: Jesus E. + +pkgname=radicale +_name=Radicale +pkgver=3.0.6 +_debver=$pkgver +_debrel=3 +pkgrel=2 +pkgdesc='Simple calendar (CalDAV) and contact (CardDAV) server' +arch=('any') +url='https://radicale.org/' +license=('GPL-3') +depends=('python-bcrypt' 'python-dateutil' 'python-defusedxml' 'python-passlib' + 'python-setuptools' 'python-vobject') +makedepends=('quilt') +backup=('etc/radicale/config' + 'etc/radicale/rights' + 'etc/radicale/users') +install="${pkgname}.install" +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Kozea/${pkgname}/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/r/radicale/radicale_${_debver}-${_debrel}.debian.tar.xz" + "${pkgname}.initd" + "${pkgname}.run") +sha512sums=('e9741547395fae8886ad84b6807422ebb196f5293d484f5f6136498058576cff697e28c117216f151d56494af83593347ceee40a6efa21272b803d0f301a396d' + '0d7652fa3c7353c058b8ecc759cd7128f5178e51a988ea1897b6818cfbe30e20342dd0b325c9d5b56d8a2c7668a861881e0f693182cacea2594fe2bac00fac22' + '61c2e8d3d4a992e2b4fba9c4c3176b052baa63fcdb643bbc82af23f6d4e6171ed23d4b819f96f9bcc660065b525678f52b3cc17b7ec1ae70ab358dd9aefd72ea' + 'fd89c84696cc54decd50d91cc9f17cdc5ffab79c0003ba943429cafd4adc9b0dcd6e6c51d606bdc7e5a915a2b3a0d657e9e90178f699013011ee00889e19558f') + +prepare() { + mv -v ${_name}-${pkgver} ${pkgname}-${pkgver} + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # removing flake8, isort and coverage + sed -e '/addopts/d' -i setup.cfg + touch "users" +} + +build() { + cd "${pkgname}-${pkgver}" + python setup.py build +} + +package() { + cd "${pkgname}-${pkgver}" + python setup.py install --skip-build \ + --optimize=1 \ + --root="${pkgdir}" + + # config + install -vDm 644 {config,rights,users} -t "${pkgdir}/etc/${pkgname}/" + install -d -m750 "$pkgdir"/var/lib/$pkgname + + # wsgi + install -vDm 644 "${pkgname}.wsgi" -t "${pkgdir}/usr/share/${pkgname}/" + + # services + install -Dm755 "${srcdir}/${pkgname}.initd" "${pkgdir}/etc/init.d/${pkgname}" + install -Dm755 "${srcdir}/${pkgname}.run" "${pkgdir}/etc/sv/${pkgname}/run" + + # docs + install -vDm 644 {NEWS,README}.md -t "${pkgdir}/usr/share/doc/${pkgname}/" + + # license + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/radicale/radicale.initd b/radicale/radicale.initd new file mode 100644 index 0000000..e9c920a --- /dev/null +++ b/radicale/radicale.initd @@ -0,0 +1,19 @@ +#!/sbin/openrc-run + +name=radicale +description="A simple CalDAV (calendar) and CardDAV (contact) server" + +pidfile="/run/${RC_SVCNAME}.pid" +command=/usr/bin/radicale +command_user=radicale:radicale +command_background=true + +depend() { + use net + need localmount +} + +start_pre() { + checkpath --directory --owner "$command_user" /var/{lib,log}/radicale + checkpath --file --owner root:radicale --mode 0640 /etc/radicale/{config,logging} +} diff --git a/radicale/radicale.install b/radicale/radicale.install new file mode 100644 index 0000000..29d7ce4 --- /dev/null +++ b/radicale/radicale.install @@ -0,0 +1,25 @@ +post_install() { + # create group and user + if ! getent group radicale &>/dev/null; then + groupadd -r radicale >/dev/null + fi + if ! getent passwd radicale &>/dev/null; then + useradd -r -c "Radicale user" -d /var/empty -g adm -s /bin/nologin radicale >/dev/null + fi +} + +post_upgrade() { + # configuration and file system storage changes with >= 3.0.0 + if [ "$(vercmp "$2" "3.0.0")" -le 0 ]; then + echo "WARNING: Major changes introduced to filesystem storage and configuration. Read /usr/share/doc/radicale/NEWS.md" + fi +} + +post_remove() { + if getent passwd radicale &>/dev/null; then + userdel radicale >/dev/null + fi + if getent group radicale &>/dev/null; then + groupdel radicale >/dev/null + fi +} diff --git a/radicale/radicale.run b/radicale/radicale.run new file mode 100644 index 0000000..9f078d2 --- /dev/null +++ b/radicale/radicale.run @@ -0,0 +1,5 @@ +#!/bin/sh +chown -R radicale:radicale /var/{lib,log}/radicale +chown -R root:radicale /etc/radicale/{config,logging} +chmod -R 0640 /etc/radicale/{config,logging} +exec chpst -u radicale:radicale radicale -C /etc/radicale/config diff --git a/radisnoir-font/PKGBUILD b/radisnoir-font/PKGBUILD new file mode 100644 index 0000000..8d696ff --- /dev/null +++ b/radisnoir-font/PKGBUILD @@ -0,0 +1,21 @@ +# Maintainer: Jesus E. + +pkgname=radisnoir-font +pkgbasename=ttf-radisnoir +pkgver=0.9b +pkgrel=2 +pkgdesc="Radis Noir is a sans serif typeface based on a regular circle and inspired by the Bauhaus movement and especially the typography of Herbert Bayer" +arch=('any') +license=('OFL-1.1') +source=("https://deb.debian.org/debian/pool/main/f/fonts-radisnoir/fonts-radisnoir_${pkgver}.orig.tar.gz") +sha512sums=('159d69769b487b7a991d69e67b2b9de934bd5cd16891db551d53c037a16ee3b5c5f459fe866e29b76e64685591b109bbcb9cd1561f92ef70b2dbef9a3ff74d0f') + +package() { + install -d ${pkgdir}/usr/share/fonts/OTF/ + install -Dm644 ${pkgbasename}-${pkgver}/RadisSans-medium.otf -t ${pkgdir}/usr/share/fonts/OTF/ + + install -d ${pkgdir}/usr/share/fonts/TTF/ + install -Dm644 ${pkgbasename}-${pkgver}/RadisSans-medium.ttf -t ${pkgdir}/usr/share/fonts/TTF/ + + install -Dm644 ${pkgbasename}-${pkgver}/LICENSE -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/ragel/PKGBUILD b/ragel/PKGBUILD new file mode 100644 index 0000000..a6eef02 --- /dev/null +++ b/ragel/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=ragel +pkgver=6.10 +pkgrel=1 +pkgdesc="Compiles finite state machines from regular languages into executable C, C++, Objective-C, or D code." +arch=('i686' 'x86_64') +url="https://www.colm.net/open-source/ragel/" +license=('GPL-2') +depends=('gcc-libs') +source=("https://www.colm.net/files/$pkgname/$pkgname-$pkgver.tar.gz"{,.asc}) +sha512sums=('6c1fe4f6fa8546ae28b92ccfbae94355ff0d3cea346b9ae8ce4cf6c2bdbeb823e0ccd355332643ea72d3befd533a8b3030ddbf82be7ffa811c2c58cbb01aaa38' + 'SKIP') +validpgpkeys=(C3260F001EE3780F1BC3D4F650FE47277DC196FB) + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr CXXFLAGS="$CXXFLAGS -std=gnu++98" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -m0644 -D ragel.vim "$pkgdir/usr/share/vim/vimfiles/syntax/ragel.vim" + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +# vim:set ts=2 sw=2 et: diff --git a/rapidjson/PKGBUILD b/rapidjson/PKGBUILD new file mode 100644 index 0000000..b2dd038 --- /dev/null +++ b/rapidjson/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=rapidjson +pkgver=1.1.0 +_debver=1.1.0+dfsg2 +_debrel=7 +pkgrel=1 +pkgdesc='Fast JSON parser/generator for C++ with both SAX/DOM style API' +arch=('any') +url='https://github.com/miloyip/rapidjson' +license=('Expat') +makedepends=('cmake' 'quilt') +source=(https://github.com/miloyip/$pkgname/archive/v$pkgver/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/r/rapidjson/rapidjson_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('2e82a4bddcd6c4669541f5945c2d240fb1b4fdd6e239200246d3dd50ce98733f0a4f6d3daa56f865d8c88779c036099c52a9ae85d47ad263686b68a88d832dff' + '701ebc1ac98a081ad2e7ccb7e350a2b27f041b5a54c7cd33f0b8d65b3a6202e2c024764e911bb8d4e99da6780dc351c7c5f378decac94b9a687ceb0f504f154e') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + find -name CMakeLists.txt | xargs sed -e 's|-Werror||' -i # Don't use -Werror +} + +build () { + cd $pkgname-$pkgver + + mkdir -p build + cd build + + cmake \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DRAPIDJSON_HAS_STDSTRING=ON \ + -DRAPIDJSON_BUILD_CXX11=ON \ + -DRAPIDJSON_ENABLE_INSTRUMENTATION_OPT=OFF \ + -DDOC_INSTALL_DIR=/usr/share/doc/${pkgname} \ + .. + + make +} + +package() { + cd $pkgname-$pkgver + + DESTDIR="$pkgdir" make -C build install + + install -Dm644 license.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/raptor/PKGBUILD b/raptor/PKGBUILD new file mode 100644 index 0000000..9f8645e --- /dev/null +++ b/raptor/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=raptor +pkgver=2.0.15 +pkgrel=8 +pkgdesc="A C library that parses RDF/XML/N-Triples into RDF triples" +arch=('i686' 'x86_64') +url='http://librdf.org/raptor' +depends=('curl' 'libxslt' 'icu') +makedepends=('quilt') +license=('LGPL-2.1') +source=("http://librdf.org/dist/source/raptor2-$pkgver.tar.gz"{,.asc}) +sha512sums=('563dd01869eb4df8524ec12e2c0a541653874dcd834bd1eb265bc2943bb616968f624121d4688579cdce11b4f00a8ab53b7099f1a0850e256bb0a2c16ba048ee' + 'SKIP') +validpgpkeys=('F879F0DEDA780198DD08DC6443EC92504F71955A') # Dave Beckett + +build() { + cd raptor2-${pkgver} + + ./configure --prefix=/usr \ + --disable-static \ + --with-yajl=no \ + --with-icu-config=/usr/bin/icu-config + make +} + +package() { + cd raptor2-${pkgver} + make prefix="${pkgdir}"/usr install + + # we don't support gtk-doc + rm -rf $pkgdir/usr/share/gtk-doc + + install -Dm644 COPYING.LIB -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/ratpoison/PKGBUILD b/ratpoison/PKGBUILD new file mode 100644 index 0000000..d7fbf69 --- /dev/null +++ b/ratpoison/PKGBUILD @@ -0,0 +1,66 @@ +# Maintainer: Jesus E. + +pkgname=ratpoison +pkgver=1.4.9 +_debver=1.4.9 +_debrel=1 +pkgrel=1 +pkgdesc='A simple keystroke-driven window manager' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libxinerama' 'readline' 'bash' 'perl' 'libxtst' 'libxft' 'texinfo' 'libxrandr') +makedepends=('automake-1.15' 'quilt') +url="https://www.nongnu.org/ratpoison/" +source=("https://savannah.nongnu.org/download/${pkgname}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/r/ratpoison/ratpoison_$_debver-$_debrel.debian.tar.xz" + "${pkgname}.desktop") +sha512sums=('97f705efd2092b8e12528496890c59f613e6fcec010aca94a5a59bd641e22dfc50dd500a4b94af7a07553a8a6359f6bec4eee0db1a7ded29d7f051904b09beef' + 'dff70e31400fdcdba32e8181cf13433544b2f9ea88c79d4d411a7d88d3e0727d09b471ca346bf450e7c6885186cdf3925808684d49aead767b510fef29cffcf2' + '0ee60c04d18c922e0f6bf80323c7ec6170521bf382e675d2c011ff3a29a12356b99fcdb5d4f072aa9e57c5472e65060a97b6c1d655dabaab15891a7d87ece31a') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + # FS#38726, v1.4.6-2 + sed -i 's|PRINT_ERROR (("XGetWMName|PRINT_DEBUG (("XGetWMName|' src/manage.c + + ./configure --prefix=/usr + make CFLAGS="$CFLAGS -DHAVE_GETLINE" +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + # fix permissions + chmod a+x "${pkgdir}/usr/share/ratpoison/"{allwindows.sh,clickframe.pl,rpshowall.sh,rpws,split.sh} + + # Not useful outside the source tree. + rm "${pkgdir}/usr/share/ratpoison/genrpbindings" + + cd contrib + ./genrpbindings + install -dm755 "${pkgdir}/usr/share/ratpoison/bindings" + install -m644 {Ratpoison.pm,ratpoison-cmd.el,ratpoison.rb,ratpoison.lisp,ratpoison.py} \ + "${pkgdir}/usr/share/ratpoison/bindings/" + + install -Dm644 "${srcdir}/${pkgname}.desktop" \ + "${pkgdir}/etc/X11/sessions/${pkgname}.desktop" + + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/"COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ratpoison/ratpoison.desktop b/ratpoison/ratpoison.desktop new file mode 100644 index 0000000..9e29bd4 --- /dev/null +++ b/ratpoison/ratpoison.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Ratpoison +Comment=The ratpoison window manager +Exec=ratpoison +# no icon yet, only the top three are currently used +Icon= +Type=Application diff --git a/rawtherapee/PKGBUILD b/rawtherapee/PKGBUILD new file mode 100644 index 0000000..5411617 --- /dev/null +++ b/rawtherapee/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=rawtherapee +pkgver=5.9 +pkgrel=1 +pkgdesc="A powerful cross-platform raw image processing program" +arch=('i686' 'x86_64') +url='https://www.rawtherapee.com/' +license=('GPL-3') +depends=('fftw' 'gtk' 'glibmm' 'gtkmm' 'lcms2' 'lensfun' 'exiv2' 'libiptcdata' 'desktop-file-utils' 'hicolor-icon-theme' + 'expat' 'glib2' 'libjpeg-turbo' 'libpng' 'librsvg-legacy' 'libsigc++' 'libtiff' 'zlib') +makedepends=('cmake' 'intltool' 'gettext-tiny') +source=("https://github.com/Beep6581/RawTherapee/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('0d848a36293eb5cac3212910eaf1d011315269c6bbe780c4c2e5f91719721e25a7d1678a7e4453fa4a9694618978b04828612dc03e1d50cb9c11ad4d238e7ca8') + +build() { + cmake \ + -B build \ + -S "$pkgname-$pkgver" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCACHE_NAME_SUFFIX="" \ + -DUSE_LIBCANBERRA=OFF + make -C build +} + +package() { + make DESTDIR="$pkgdir/" -C build install + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/razor/PKGBUILD b/razor/PKGBUILD new file mode 100644 index 0000000..60f8074 --- /dev/null +++ b/razor/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=razor +pkgver=2.85 +pkgrel=1 +pkgdesc="A distributed, collaborative, spam detection and filtering network" +arch=('i686' 'x86_64') +url="http://razor.sourceforge.net" +license=('Artistic-2.0') +depends=('perl-net-dns' 'perl-digest-sha1' 'perl-uri' 'perl-digest-nilsimsa' 'perl') +options=('!emptydirs') +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-agents-${pkgver}.tar.bz2" + razor-2.85-cosmetic-pv-fix.patch + razor-2.85-makefile-quoting-fix.patch) +sha512sums=('31dded1969dde963389a5939514c29638ad07f45dbb2f4c633cf20ebc4abab94e65e9a6d8885233cdde686ef365aab11fa5eba2ca38d79c5b8fab689143ff5db' + 'c7e7985e779185d704d88ff4c39d106df46ba20daee92c4a4410e8a1af7d4c31bdca0646018fb5d1f7d58e106036c8442a0fa2635b39a5e1df2a259f79eced91' + 'ee43993dbf4e1ed932a293636cfad98c8c4bb5b94a8df00262c39d34dd9c95143ba8dca1f088185123d352b940e0dd19d5b0a6f4afc04e63b36cc49a4963cbe4') + +prepare() { + cd ${pkgname}-agents-${pkgver} + + patch -p1 -i ../razor-2.85-cosmetic-pv-fix.patch + + # ExtUtils::MakeMaker >= 6.99_09 has quotes around paths + patch -p1 -i ../razor-2.85-makefile-quoting-fix.patch +} + +build() { + cd ${pkgname}-agents-${pkgver} + perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ${pkgname}-agents-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/razor/razor-2.85-cosmetic-pv-fix.patch b/razor/razor-2.85-cosmetic-pv-fix.patch new file mode 100644 index 0000000..c391d48 --- /dev/null +++ b/razor/razor-2.85-cosmetic-pv-fix.patch @@ -0,0 +1,22 @@ +--- a/lib/Razor2/Client/Version.pm 2007-05-10 22:32:10.000000000 +0200 ++++ b/lib/Razor2/Client/Version.pm 2010-03-25 11:11:36.911409707 +0100 +@@ -14,7 +14,7 @@ + + $PROTOCOL = 3; + +-$VERSION = '2.84'; ++$VERSION = '2.85'; + + 1; + +--- a/META.yml 2007-05-23 20:29:34.000000000 +0200 ++++ b/META.yml 2010-03-25 11:11:43.691408628 +0100 +@@ -1,7 +1,7 @@ + # http://module-build.sourceforge.net/META-spec.html + #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# + name: razor-agents +-version: 2.84 ++version: 2.85 + version_from: lib/Razor2/Client/Version.pm + installdirs: site + requires: diff --git a/razor/razor-2.85-makefile-quoting-fix.patch b/razor/razor-2.85-makefile-quoting-fix.patch new file mode 100644 index 0000000..677d5c7 --- /dev/null +++ b/razor/razor-2.85-makefile-quoting-fix.patch @@ -0,0 +1,15 @@ +diff -uprw razor-agents-2.85.orig/Makefile.PL razor-agents-2.85/Makefile.PL +--- razor-agents-2.85.orig/Makefile.PL 2007-05-09 01:47:53.000000000 +0300 ++++ razor-agents-2.85/Makefile.PL 2015-06-14 20:36:23.677213987 +0300 +@@ -140,9 +140,9 @@ sub MY::install { + my $inherited = $self->SUPER::install(@_); + + my $man5 = q{ \\ +- $(INST_MAN5DIR) $(INSTALLMAN5DIR)}; ++ "$(INST_MAN5DIR)" "$(INSTALLMAN5DIR)"}; + +- $inherited =~ s/(\$\((?:DEST)?INSTALL\w*MAN1DIR\))/$1$man5/gm; ++ $inherited =~ s/("?\$\((?:DEST)?INSTALL\w*MAN1DIR\)"?)/$1$man5/gm; + + return $inherited; + } diff --git a/rcs/PKGBUILD b/rcs/PKGBUILD new file mode 100644 index 0000000..87dc1b0 --- /dev/null +++ b/rcs/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=rcs +pkgver=5.10.1 +pkgrel=1 +pkgdesc="Revision Control System: manages multiple revisions of files" +url='https://www.gnu.org/software/rcs/' +license=('GPL-3') +arch=('i686' 'x86_64') +depends=('bash' 'diffutils' 'ed') +source=("https://ftp.gnu.org/gnu/$pkgname/${pkgname}-${pkgver}.tar.lz") +sha512sums=('4d3755d704a05da8582acb78a83845885f34b3144af6d19c568e6707831563b077ec5603a12f5d4de6ec583d0886d3a8ccc7ee0e1f10070f9e6de142198cd530') + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix /usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/rdiff-backup/PKGBUILD b/rdiff-backup/PKGBUILD new file mode 100644 index 0000000..8ed2b3d --- /dev/null +++ b/rdiff-backup/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=rdiff-backup +pkgver=2.0.5 +pkgrel=1 +pkgdesc="Free and libre utility for local/remote mirroring and incremental backups." +arch=('i686' 'x86_64') +url='https://www.nongnu.org/rdiff-backup/' +license=('GPL-2') +depends=('python-setuptools' 'librsync') +makedepends=('python-setuptools-scm') +optdepends=('python-pylibacl: access control list support' + 'python-pyxattr: extended attribute support') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/rdiff-backup/rdiff-backup/archive/refs/tags/v${pkgver}.tar.gz" + "fix-scm-version.patch") +sha512sums=('8bedb22e812bb259bf9e01c94437dd266ed849aba44a3dcddce9ef09ab6c235b28e04022b087f1ec3fc420168b502333cb3e701a2edf27a959064d73d1f6d914' + '37e518830bbd1f074c3b857f9052a888e5ce3acc7a59c30ac0a8331e259d56afe0a4317e908bc043b7b260506ffccfb1088fa0e67b7d75501a4577c0e441d4d2') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i $srcdir/fix-scm-version.patch +} + +build() { + cd $pkgname-$pkgver + python setup.py build +} + +package() { + cd $pkgname-$pkgver + python setup.py install --root="$pkgdir" -O1 + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/rdiff-backup/fix-scm-version.patch b/rdiff-backup/fix-scm-version.patch new file mode 100644 index 0000000..5cbc37f --- /dev/null +++ b/rdiff-backup/fix-scm-version.patch @@ -0,0 +1,11 @@ +--- a/setup.py 2020-07-25 10:53:18.000000000 +0200 ++++ b/setup.py 2022-08-18 12:18:54.251721393 +0200 +@@ -136,7 +136,7 @@ + + setup( + name="rdiff-backup", +- use_scm_version=True, ++ use_scm_version=False, + description="Backup and Restore utility, easy to use, efficient, locally and remotely usable", + long_description=""" + rdiff-backup is a simple backup tool which can be used locally and remotely, diff --git a/re2c/PKGBUILD b/re2c/PKGBUILD new file mode 100644 index 0000000..dab649e --- /dev/null +++ b/re2c/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=re2c +pkgver=2.0.3 +_debver=2.0.3 +_debrel=1 +pkgrel=1 +arch=(i686 x86_64) +pkgdesc='A tool for generating C-based recognizers from regular expressions' +url='https://re2c.org' +license=(Public-Domain) +depends=(gcc-libs) +makedepends=(quilt) +source=(re2c-$pkgver.tar.gz::https://github.com/skvadrik/re2c/archive/$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/r/re2c/re2c_$_debver-$_debrel.debian.tar.xz) +sha512sums=('11fe3a0a38fbc378f6c54e418c3557a9bd21dd9b693b1efbf98cb0a52683d1932bbb1e253cb048fddb0c0c9b33f58dcaa2d1294cb1bc7b6ee9e8fb9d827219c5' + '9944f0c9e9df284c858a0c8b8709cd2bf73b4a5795e6bd9ba4fe006e2b36419e10dc57b8b3f05fcda1c0e248337482d8c7d857749b13acad808aa95dfd5df52f') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +check() { + cd $pkgname-$pkgver + make tests +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/recode/PKGBUILD b/recode/PKGBUILD new file mode 100644 index 0000000..3274b31 --- /dev/null +++ b/recode/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=recode +pkgver=3.7.9 +pkgrel=1 +pkgdesc='Converts files between various character sets and usages' +arch=('i686' 'x86_64') +url='https://github.com/rrthomas/recode' +license=('LGPL-3') +depends=('glibc') +makedepends=('python') +source=("https://github.com/rrthomas/recode/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('277074dee63cdc7f1a1be2acca67481b8fb816bd4319fe8e882696e42d15309750b930fa9e8d6286e714132a976f0eaf87f718560d6cb86eeaa79b86f0700a6c') + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING-LIB -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/recoll/PKGBUILD b/recoll/PKGBUILD new file mode 100644 index 0000000..a63a483 --- /dev/null +++ b/recoll/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=recoll +pkgver=1.28.5 +pkgrel=1 +pkgdesc='Full text search tool based on Xapian backend' +arch=('i686' 'x86_64') +url='https://www.lesbonscomptes.com/recoll/' +license=('GPL-2') +depends=('xapian-core' 'qt-base' 'libressl' 'hicolor-icon-theme' 'qt-webkit' 'chmlib') +makedepends=('python' 'python-setuptools') +optdepends=('libxslt: for XML based formats (fb2,etc)' + 'unzip: for the OpenOffice.org documents' + 'poppler: for pdf' + 'pstotext: for postscipt' + 'antiword: for msword' + 'catdoc: for ms excel and powerpoint' + 'unrtf: for RTF' + 'djvulibre: for djvu' + 'id3lib: for mp3 tags support with id3info' + 'python-mutagen: Audio metadata' + 'perl-image-exiftool: EXIF data from raw files' + 'python-lxml: indexing spreadsheets' + 'python-pychm: CHM filter' + 'aspell-en: English stemming support') +source=("https://www.lesbonscomptes.com/$pkgname/$pkgname-${pkgver/_/}.tar.gz" + "remove-dbus.patch") +sha512sums=('df4c7a5e624933ccc7ce257a767a4621728a4dbcdd5b551b47845ed0fcffdd5a6f7f617a466404c5e8d8b62c81e57986e1f21e01d643899755623a2dc597d712' + '0ea49cde0c1681143bb3c2c3150b6f809668a1935cbf8a78dae1240263b84c4412b06a63285d56e44e726c3fd9f68bd8f7e767ac3d188cc673a843d3ce020fca') + +prepare() { + cd "$srcdir/$pkgname-${pkgver/_/}" + + # add patches + patch -Np1 -i $srcdir/remove-dbus.patch + + sed -i '1,1i#include ' qtgui/ssearch_w.cpp +} + +build() { + cd "$srcdir/$pkgname-${pkgver/_/}" + QMAKE=qmake-qt5 ./configure --prefix=/usr --mandir=/usr/share/man --enable-recollq + make +} + +package() { + cd "$srcdir/$pkgname-${pkgver/_/}" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/recoll/remove-dbus.patch b/recoll/remove-dbus.patch new file mode 100644 index 0000000..1a70f6c --- /dev/null +++ b/recoll/remove-dbus.patch @@ -0,0 +1,12 @@ +--- a/qtgui/recoll.pro.in 2020-12-14 11:52:59.000000000 +0100 ++++ b/qtgui/recoll.pro.in 2021-08-31 23:43:12.113257650 +0200 +@@ -14,9 +14,6 @@ + QMAKE_LFLAGS_RELEASE -= -s + QMAKE_STRIP=echo + +-@QMAKE_ENABLE_ZEITGEIST@ QT += dbus +-@QMAKE_ENABLE_ZEITGEIST@ QMAKE_CXXFLAGS += -DUSE_ZEITGEIST +- + QT += xml + greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport + diff --git a/redo-python/PKGBUILD b/redo-python/PKGBUILD new file mode 100644 index 0000000..870337b --- /dev/null +++ b/redo-python/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=redo-python +_pkgname=redo +pkgver=0.42c +pkgrel=1 +pkgdesc="Redo implementation in Python." +arch=('any') +license=('Apache-2.0') +url="https://github.com/apenwarr/redo" +depends=('python') +makedepends=('python-beautifulsoup4' 'python-markdown') +provides=('redo') +conflicts=('redo') +source=("https://github.com/apenwarr/redo/archive/redo-${pkgver}.tar.gz") +sha512sums=('764ef84cfb56d5dd883cf80f706a567491e1a679d136219c4db3c122386aad3cfbd28131dc231a91639f596d7b8819c4254e4e7fa38f917996ca8bf3e1a5dc19') + +package() { + cd "${_pkgname}-${_pkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/redshift/PKGBUILD b/redshift/PKGBUILD new file mode 100644 index 0000000..01e9d8d --- /dev/null +++ b/redshift/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=redshift +pkgver=1.12 +_debver=1.12 +_debrel=4.2 +pkgrel=1 +pkgdesc="Adjusts the color temperature of your screen according to your surroundings." +arch=('i686' 'x86_64') +url='http://jonls.dk/redshift/' +license=('GPL-3') +depends=('libdrm' 'libxcb' 'libxxf86vm') +optdepends=('python-pygobject: for redshift-gtk' + 'python-pyxdg: for redshift-gtk' + 'gtk: for redshift-gtk') +makedepends=('intltool' 'gettext-tiny' 'python' 'quilt' 'automake-1.15' 'gtk-update-icon-cache') +source=("https://github.com/jonls/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/r/redshift/redshift_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('225e222e5f2c55be4571094ccaf02a92e162dfc35fd0fe504084e21e358b888a72f9992f9f9edaf1d496eb673af74a0d825ae5cf6ef7f0f1ab51d32419722c32' + '219152ec0a1ae128a9fb0a9732e007eb96f8331fec5ea1666fd9ff2a1e9fb4b2d94d60410515db0dae664139c4f13837e1c11fb384af8f2709907d631b9beb14') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --enable-drm \ + --enable-randr \ + --enable-vidmode \ + --disable-geoclue2 + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/refind/PKGBUILD b/refind/PKGBUILD new file mode 100644 index 0000000..5947950 --- /dev/null +++ b/refind/PKGBUILD @@ -0,0 +1,106 @@ +# Maintainer: Jesus E. + +pkgname=refind +pkgver=0.12.0 +_debver=0.12.0 +_debrel=1 +pkgrel=6 +pkgdesc="An EFI boot manager" +arch=('i686' 'x86_64') +url="https://www.rodsbooks.com/refind/" +license=('GPL-3') +depends=('bash' 'dosfstools' 'efibootmgr' 'which') +makedepends=('gnu-efi-libs' 'quilt') +optdepends=('gptfdisk: for finding non-vfat ESP with refind-install' + 'graphicsmagick: for refind-mkfont' + 'libressl: for generating local certificates with refind-install' + 'python: for refind-mkdefault' + 'doas: for privilege elevation in refind-install and refind-mkdefault' + 'sbsigntools: for EFI binary signing with refind-install') +# the drivers don't build with many jobs +options=(!makeflags) +source=("https://sourceforge.net/projects/refind/files/${pkgver}/${pkgname}-src-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/r/refind/refind_$_debver-$_debrel.debian.tar.xz") +sha512sums=('3ade9642d7acf31097daa5308acb96a9fa3371314073b5a09601a886fc30444752efa08ed9fb35e421efb0b4eb9efbccd7b5c9bd6b3b9ed4af74c58f22a74729' + '2792d35cb75b42b98e0629112745f4a7833f0d19df45a90ddad6eb12ba521097086b4b9e94fd7f92116576cb2917c4f2d208f4ed2aa6477652f6016772f3c6d9') +case "${CARCH}" in + i686) _arch='ia32';; + x86_64) _arch='x64';; +esac + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches debian + + quilt push -av + fi + # removing the path prefix from the css reference, so that the css can live + # in the same directory + sed -e 's|../Styles/||g' -i "docs/${pkgname}/"*.html + # hardcode RefindDir, so that refind-install can find refind_x64.efi + sed -e 's|RefindDir=\"\$ThisDir/refind\"|RefindDir="/usr/share/refind/"|g' \ + -i refind-install +} + +build() { + cd "$pkgname-$pkgver" + make + make gptsync + make fs +} + +package() { + cd "$pkgname-$pkgver" + # the install target calls refind-install, therefore we install things + # manually + + # efi binaries + install -vDm 644 refind/*.efi -t "${pkgdir}/usr/share/${pkgname}" + install -vDm 644 drivers_*/*.efi \ + -t "${pkgdir}/usr/share/refind/drivers_${_arch}" + install -vDm 644 gptsync/*.efi \ + -t "${pkgdir}/usr/share/${pkgname}/tools_${_arch}" + # sample config + install -vDm 644 "${pkgname}.conf-sample" -t "${pkgdir}/usr/share/${pkgname}" + # keys + install -vDm 644 keys/*{cer,crt} -t "${pkgdir}/usr/share/${pkgname}/keys" + # keysdir + install -vdm 700 "${pkgdir}/etc/refind.d/keys" + # fonts + install -vDm 644 fonts/*.png \ + -t "${pkgdir}/usr/share/${pkgname}/fonts" + # icons + install -vDm 644 icons/*.png \ + -t "${pkgdir}/usr/share/${pkgname}/icons" + install -vDm 644 icons/svg/*.svg \ + -t "${pkgdir}/usr/share/${pkgname}/icons/svg" + # scripts + install -vDm 755 {refind-{install,mkdefault},mkrlconf,mvrefind} \ + -t "${pkgdir}/usr/sbin" + install -vDm 755 fonts/mkfont.sh "${pkgdir}/usr/sbin/${pkgname}-mkfont" + # man pages + install -vDm 644 docs/man/*.8 -t "${pkgdir}/usr/share/man/man8" + # docs + install -vDm 644 {CREDITS,NEWS,README}.txt \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -vDm 644 fonts/README.txt \ + "${pkgdir}/usr/share/doc/${pkgname}/README.${pkgname}-mkfont.txt" + install -vDm 644 icons/README \ + "${pkgdir}/usr/share/doc/${pkgname}/README.icons.txt" + install -vDm 644 keys/README.txt \ + "${pkgdir}/usr/share/doc/${pkgname}/README.keys.txt" + install -vDm 644 "docs/${pkgname}/"*.{html,png,svg,txt} \ + -t "${pkgdir}/usr/share/doc/${pkgname}/html" + install -vDm 644 docs/Styles/*.css \ + -t "${pkgdir}/usr/share/doc/${pkgname}/html" + install -vDm 644 images/${pkgname}-banner.{png,svg} \ + -t "${pkgdir}/usr/share/doc/${pkgname}/html" + # license + install -vDm 644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/remind/PKGBUILD b/remind/PKGBUILD new file mode 100644 index 0000000..a6a708a --- /dev/null +++ b/remind/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=remind +pkgver=4.3.7 +_pkgver=$(echo "$pkgver" | awk -F. '{ printf "%02d.%02d.%02d", $1, $2, $3 }') +pkgrel=1 +pkgdesc="A sophisticated calendar and alarm program" +arch=('i686' 'x86_64') +url='https://dianne.skoll.ca/projects/remind/' +license=('GPL-2') +depends=('tk' 'tcllib') +source=("https://dianne.skoll.ca/projects/$pkgname/download/${pkgname}-${_pkgver}.tar.gz"{,.sig}) +options=('!emptydirs') +sha512sums=('5fd875b3ca11362572be22cfedac7cdefb7e3cb68902ae726246420c8fbc8c026a9290b58b30f43ef571af7dbc079643c336776beb2a38f9dbdd54b42d0ab783' + 'SKIP') +validpgpkeys=('738E4D954052902C147D07B2685A5A5E511D30E2') # Dianne Skoll + +build() { + cd "${pkgname}-${_pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}-${_pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYRIGHT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/remmina-legacy/PKGBUILD b/remmina-legacy/PKGBUILD new file mode 100644 index 0000000..107109a --- /dev/null +++ b/remmina-legacy/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=remmina-legacy +_realpkgname=remmina +pkgver=1.4.11 +_debver=$pkgver +_debrel=3 +pkgrel=3 +pkgdesc="Free and libre remote desktop client written in GTK+ (legacy version)" +arch=(i686 x86_64) +url="https://www.remmina.org/" +license=('custom:GPL-2+OpenSSL-Linking-Exception') +conflicts=('remmina') +provides=('remmina') +depends=('libgcrypt' 'libssh' 'vte' 'libsodium' 'libxkbfile') +makedepends=('cmake' 'freerdp' 'libvncserver' 'spice-gtk' 'spice-protocol' 'xdg-utils' + 'harfbuzz' 'xenocara-proto' 'gobject-introspection' 'webkitgtk' 'gtk-vnc' 'quilt') +optdepends=('gtk-vnc: GVNC plugin' + 'libvncserver: VNC plugin' + 'spice-gtk: Spice plugin' + 'webkitgtk: WWW plugin' + 'xterm: external tools') +source=("$_realpkgname-$pkgver.tar.bz2::https://gitlab.com/Remmina/Remmina/-/archive/v${pkgver/rc/-rc}/Remmina-v${pkgver/rc/-rc}.tar.bz2" + "https://deb.debian.org/debian/pool/main/${_realpkgname::1}/$_realpkgname/${_realpkgname}_$_debver+dfsg-$_debrel.debian.tar.xz") +sha512sums=('25ca2d7ce1ae2955a4d59ce05d332894ee715aefc9bd9cb03758f45aea7edda31e7bec30bbd5ce5a893974c2d04624a209d9a7afb6e95ac9abc6b3cc71cffa31' + '6c0f306a0f5f2b9411724a8f16f1382f9d7f5aeafa9c20c9274b74e355758901476832164216e89af4f50fbc20218b49125c4cc7c6e058e8de88cacde3f97881') + +prepare() { + cd Remmina-v${pkgver/rc/-rc} + + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES='debian/patches' + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir/debian" . + + quilt push -av + fi +} + +build() { + cmake -S Remmina-v${pkgver/rc/-rc} -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DWITH_AVAHI=OFF \ + -DWITH_APPINDICATOR=OFF \ + -DWITH_FREERDP=ON \ + -DWITH_KF5WALLET=OFF \ + -DWITH_NEWS=OFF \ + -Wno-dev + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + for i in LICENSE LICENSE.OpenSSL; do + install -Dvm644 "$srcdir/Remmina-v${pkgver/rc/-rc}/$i" \ + -t "$pkgdir/usr/share/licenses/$pkgname" + done +} diff --git a/rep-gtk/PKGBUILD b/rep-gtk/PKGBUILD new file mode 100644 index 0000000..0f44f64 --- /dev/null +++ b/rep-gtk/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=rep-gtk +pkgver=0.90.8.2 +pkgrel=2 +pkgdesc="Binding of the GTK and GDK libraries for the librep Lisp environment" +arch=('i686' 'x86_64') +url='https://sawfish.fandom.com/wiki/Rep-GTK' +license=('GPL-2') +depends=('librep' 'gtk2') +options=('!libtool') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/r/rep-gtk/rep-gtk_${pkgver}.orig.tar.xz") +sha512sums=('385058b232299d9a79339b434f14c35baa79f3facb7a3a47d7fedd51ded9bd8cdd771b5959b2b348047ba268e98692db09a1e447fa541d5b0b72cff931f54df1') + +prepare() { + cd "${srcdir}/${pkgname}_${pkgver}" + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}_${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}_${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/retry/PKGBUILD b/retry/PKGBUILD new file mode 100644 index 0000000..027f2e7 --- /dev/null +++ b/retry/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=retry +pkgver=1.0.4 +pkgrel=1 +pkgdesc="Retry a command until the command succeeds" +license=('Apache-2.0') +arch=('i686' 'x86_64') +url='https://github.com/minfrin/retry' +depends=('glibc') +source=("https://deb.debian.org/debian/pool/main/r/retry/retry_${pkgver}.orig.tar.bz2") +sha512sums=('aed41e14aba1fe3963e1da43e1594d8c5b63bfac8f90cbccff56360dd04f587f567a808200e6eb790ac444b93fd27eb8049ba3ade2d79cf3015337ba52a9004f') + +prepare() { + cd ${pkgname}-${pkgver} + autoreconf -vfi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/rhash/PKGBUILD b/rhash/PKGBUILD new file mode 100644 index 0000000..243ad08 --- /dev/null +++ b/rhash/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=rhash +pkgver=1.4.1 +_debver=1.4.1 +_debrel=2 +pkgrel=1 +pkgdesc='Utility for verifying hash sums of files' +url='https://github.com/rhash/RHash' +license=('custom:BSD-Zero-Clause') +arch=('i686' 'x86_64') +depends=('glibc') +makedepends=('quilt') +backup=('etc/rhashrc') +source=(rhash-$pkgver.tar.gz::https://github.com/rhash/RHash/archive/v$pkgver.tar.gz + rhash-$pkgver.tar.gz.asc::https://github.com/rhash/RHash/releases/download/v$pkgver/v$pkgver.tar.gz.asc + https://deb.debian.org/debian/pool/main/r/rhash/rhash_$_debver-$_debrel.debian.tar.xz) +sha512sums=('30bbef7ce7815ee4ac062c537206a0b895845f61de4b1fdc0c0494f66284d9f3c1b06f812ea913fa35a3342d230d25d0986a1db644c7b4464bc1185997beb638' + 'SKIP' + '2322d426734e3359e355620bf5f74321f335c94c2786971f08bed036f46abdcaaff66bdcec7da116ecf89bfb59717bf3a322ff1eaf546b5651a5758748e59c0e') +validpgpkeys=('2875F6B1C2D27A4F0C8AF60B2A714497E37363AE') + +prepare() { + cd RHash-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd RHash-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc --extra-cflags="$CFLAGS" --extra-ldflags="$LDFLAGS" + make +} + +check() { + cd RHash-$pkgver + + make test test-lib +} + +package() { + cd RHash-$pkgver + + # program + make DESTDIR="$pkgdir" install + + # library, since the makefiles are still broken + make -C librhash DESTDIR="$pkgdir" install-lib-headers install-lib-shared install-so-link + + # license + install -Dm644 COPYING "$pkgdir"/usr/share/licenses/rhash/COPYING +} diff --git a/ri-li/PKGBUILD b/ri-li/PKGBUILD new file mode 100644 index 0000000..a2cf9da --- /dev/null +++ b/ri-li/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=ri-li +pkgver=2.0.1 +pkgrel=1 +pkgdesc="Drive a toy wood engine in many levels and collect all the coaches to win" +arch=('i686' 'x86_64') +url="http://ri-li.sourceforge.net/" +license=('GPL-2' 'GPL-3') +depends=('gcc-libs' 'sdl_mixer') +groups=('games') +source=(https://downloads.sourceforge.net/sourceforge/$pkgname/Ri-li-$pkgver.tar.bz2 + iostream.patch + ri-li.desktop) +sha512sums=('6d56c00dae90b50bca81ca739c628335b4ad7642c19a3b3c28630ddb91bd847ca6d383cace66ef436a1dda7497c9d3939de2626071bae40d423b2444fed97863' + '49fbf3a30f0ae6c47d8fcc45d72891ac199187f7615840f6eb994df998440980d7838beceec5225325c2e971c97dbc28a02ad47db03d144bb9cd90b18d4422e8' + 'cba2c93be02ad90ffda4fd637df347f3a88d43548c61d60bf06050cac5e6d9d379b6232a86925049903dbf7eabf9355977e17c568042341e1091af358932393f') + +prepare() { + mv Ri-li-$pkgver $pkgname-$pkgver + cd $pkgname-$pkgver + patch -p1 < $srcdir/iostream.patch + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games + sed -i "s/SUBDIRS = src data Sounds gentoo/SUBDIRS = src data Sounds/" Makefile + make || return 1 +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + install -m644 -D $srcdir/ri-li.desktop $pkgdir/usr/share/applications/ri-li.desktop + install -m644 -D data/Ri-li-icon-48x48.png $pkgdir/usr/share/pixmaps/ri-li.png + install -Dm644 {COPYING,COPYING.Music} -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/ri-li/iostream.patch b/ri-li/iostream.patch new file mode 100644 index 0000000..5846bb3 --- /dev/null +++ b/ri-li/iostream.patch @@ -0,0 +1,202 @@ +diff -urN Ri-li-2.0.1-orig/src//audio.cc Ri-li-2.0.1/src//audio.cc +--- Ri-li-2.0.1-orig/src//audio.cc 2007-11-02 12:48:15.000000000 +0100 ++++ Ri-li-2.0.1/src//audio.cc 2010-12-14 21:54:10.533334011 +0100 +@@ -22,13 +22,16 @@ + // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + #include +-#include ++#include + #include + + #include "audio.h" + #include "utils.h" + #include "preference.h" + ++using std::cerr; ++using std::endl; ++ + /*** Variable globales ***/ + /*************************/ + extern sPreference Pref; +diff -urN Ri-li-2.0.1-orig/src//ecran.cc Ri-li-2.0.1/src//ecran.cc +--- Ri-li-2.0.1-orig/src//ecran.cc 2007-11-02 12:48:16.000000000 +0100 ++++ Ri-li-2.0.1/src//ecran.cc 2010-12-14 21:54:50.346667343 +0100 +@@ -21,7 +21,7 @@ + // with this program; if not, write to the Free Software Foundation, Inc., + // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-#include ++#include + #include + #include + #include +diff -urN Ri-li-2.0.1-orig/src//editeur.cc Ri-li-2.0.1/src//editeur.cc +--- Ri-li-2.0.1-orig/src//editeur.cc 2007-11-02 12:48:17.000000000 +0100 ++++ Ri-li-2.0.1/src//editeur.cc 2010-12-14 21:55:25.770000677 +0100 +@@ -25,7 +25,7 @@ + #include + #endif + +-#include ++#include + #include + #include + #include +@@ -38,6 +38,9 @@ + #include "tableau.h" + #include "mouse.h" + ++using std::cerr; ++using std::endl; ++ + /*** Variables globales ***/ + /**************************/ + extern SDL_Surface *sdlVideo; +diff -urN Ri-li-2.0.1-orig/src//jeux.cc Ri-li-2.0.1/src//jeux.cc +--- Ri-li-2.0.1-orig/src//jeux.cc 2007-11-02 12:48:17.000000000 +0100 ++++ Ri-li-2.0.1/src//jeux.cc 2010-12-14 22:06:21.783334023 +0100 +@@ -25,7 +25,7 @@ + #include + #endif + +-#include ++#include + #include + #include + #include +diff -urN Ri-li-2.0.1-orig/src//loco.cc Ri-li-2.0.1/src//loco.cc +--- Ri-li-2.0.1-orig/src//loco.cc 2007-11-02 12:48:18.000000000 +0100 ++++ Ri-li-2.0.1/src//loco.cc 2010-12-14 22:06:40.183334009 +0100 +@@ -21,7 +21,7 @@ + // with this program; if not, write to the Free Software Foundation, Inc., + // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-#include ++#include + #include + #include + #include +diff -urN Ri-li-2.0.1-orig/src//main.cc Ri-li-2.0.1/src//main.cc +--- Ri-li-2.0.1-orig/src//main.cc 2007-11-02 12:48:19.000000000 +0100 ++++ Ri-li-2.0.1/src//main.cc 2010-12-14 22:07:15.993334009 +0100 +@@ -23,7 +23,7 @@ + + #include + #include +-#include ++#include + #include + #include + #include +@@ -39,6 +39,9 @@ + #include "editeur.h" + #include "utils.h" + ++using std::cerr; ++using std::endl; ++ + /*** Variables globales ***/ + /************************/ + SDL_Surface *sdlVideo; // Pointe sur l'écran video +diff -urN Ri-li-2.0.1-orig/src//menu.cc Ri-li-2.0.1/src//menu.cc +--- Ri-li-2.0.1-orig/src//menu.cc 2007-11-02 12:48:19.000000000 +0100 ++++ Ri-li-2.0.1/src//menu.cc 2010-12-14 22:07:55.990000676 +0100 +@@ -21,7 +21,7 @@ + // with this program; if not, write to the Free Software Foundation, Inc., + // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-#include ++#include + #include + #include + #include +@@ -34,6 +34,9 @@ + + #define PY 180 + ++using std::cerr; ++using std::endl; ++ + /*** Variables globales ***/ + /**************************/ + extern int Horloge; +diff -urN Ri-li-2.0.1-orig/src//mouse.cc Ri-li-2.0.1/src//mouse.cc +--- Ri-li-2.0.1-orig/src//mouse.cc 2007-11-02 12:48:20.000000000 +0100 ++++ Ri-li-2.0.1/src//mouse.cc 2010-12-14 22:08:11.696667343 +0100 +@@ -21,7 +21,7 @@ + // with this program; if not, write to the Free Software Foundation, Inc., + // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-#include ++#include + #include + #include "mouse.h" + #include "preference.h" +diff -urN Ri-li-2.0.1-orig/src//sprite.cc Ri-li-2.0.1/src//sprite.cc +--- Ri-li-2.0.1-orig/src//sprite.cc 2007-11-02 12:48:20.000000000 +0100 ++++ Ri-li-2.0.1/src//sprite.cc 2010-12-14 22:09:17.650000676 +0100 +@@ -21,7 +21,7 @@ + // with this program; if not, write to the Free Software Foundation, Inc., + // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-#include ++#include + #include + #include + #include +@@ -30,6 +30,9 @@ + #include "preference.h" + #include "utils.h" + ++using std::cerr; ++using std::endl; ++ + /*** Variables Globales ***/ + /**************************/ + extern SDL_Surface *sdlVideo; +@@ -39,8 +42,8 @@ + extern int NSprites; + extern sPreference Pref; + +-static char* OrdreTexte="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-!?*+<>%$()&;"; +-static char* OrdreTexte2="abcdefghijklmnopqrstuvwxyz0123456789,_|?*+<>%$[]&;"; ++static char* OrdreTexte=(char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-!?*+<>%$()&;"; ++static char* OrdreTexte2=(char *)"abcdefghijklmnopqrstuvwxyz0123456789,_|?*+<>%$[]&;"; + static int TableTexte[256]; + + char Langue[31][16]; // Mémorise les noms des langues +diff -urN Ri-li-2.0.1-orig/src//tableau.cc Ri-li-2.0.1/src//tableau.cc +--- Ri-li-2.0.1-orig/src//tableau.cc 2007-11-02 12:48:21.000000000 +0100 ++++ Ri-li-2.0.1/src//tableau.cc 2010-12-14 22:09:32.603334046 +0100 +@@ -21,7 +21,7 @@ + // with this program; if not, write to the Free Software Foundation, Inc., + // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-#include ++#include + #include + #include + #include "preference.h" +diff -urN Ri-li-2.0.1-orig/src//utils.cc Ri-li-2.0.1/src//utils.cc +--- Ri-li-2.0.1-orig/src//utils.cc 2007-11-02 12:48:22.000000000 +0100 ++++ Ri-li-2.0.1/src//utils.cc 2010-12-14 22:09:58.343334046 +0100 +@@ -21,7 +21,7 @@ + // with this program; if not, write to the Free Software Foundation, Inc., + // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +-#include ++#include + #include + #include + #include +@@ -36,6 +36,9 @@ + #include "preference.h" + #include "sprite.h" + ++using std::cerr; ++using std::endl; ++ + /*** Variables globales ***/ + /**************************/ + extern sPreference Pref; diff --git a/ri-li/ri-li.desktop b/ri-li/ri-li.desktop new file mode 100644 index 0000000..a286838 --- /dev/null +++ b/ri-li/ri-li.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Version=1 +Encoding=UTF-8 +Exec=Ri_li %u +Icon=ri-li.png +Type=Application +Categories=Game;ArcadeGame; +Name=Ri-li +Comment=Drive a toy wood engine +Comment[fr]=Conduire un petit train de bois +Comment[it]=Conduci un piccolo treno di legno +Terminal=false +StartupNotify=false diff --git a/rlwrap/PKGBUILD b/rlwrap/PKGBUILD new file mode 100644 index 0000000..c6945fe --- /dev/null +++ b/rlwrap/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=rlwrap +pkgver=0.46 +pkgrel=1 +pkgdesc="Adds readline-style editing and history to programs." +arch=('i686' 'x86_64') +url='https://github.com/hanslub42/rlwrap' +license=('GPL-2') +depends=('perl') +source=("$pkgname-$pkgver.tar.gz::https://github.com/hanslub42/rlwrap/archive/v$pkgver.tar.gz") +sha512sums=('407cbfae8aae6042726572e6950c8e3439ee6eaa7a909fd3a7001d3e8725461c811f670b98f11e89a932624a82ab62767867355c8161e30b852e995398d72e5c') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + autoreconf -vi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/rofi-pass/PKGBUILD b/rofi-pass/PKGBUILD new file mode 100644 index 0000000..cc2050f --- /dev/null +++ b/rofi-pass/PKGBUILD @@ -0,0 +1,19 @@ +# Maintainer: Jesus E. + +pkgname=rofi-pass +pkgver=2.0.2 +pkgrel=5 +pkgdesc="Shellscript to handle storages from password-store in a convenient way" +arch=('i686' 'x86_64') +url='https://github.com/carnager/rofi-pass' +license=('GPL-3') +depends=('xdg-utils' 'rofi' 'gawk' 'password-store' 'pwgen' 'xdotool' 'xclip') +optdepends=('pass-otp: for OTP support') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/carnager/${pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('28f59696911089c31b3f17bde281e3d79c3f757ecc4da61386719c6cff9b31c0944a2ac549d7838f06c249d4535c0dc107ba684115f15db42a24bfdb2f575437') + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" PREFIX="/usr" install + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/rofi/PKGBUILD b/rofi/PKGBUILD new file mode 100644 index 0000000..8cc9d94 --- /dev/null +++ b/rofi/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=rofi +pkgver=1.7.3 +_debver=$pkgver +_debrel=0.1 +pkgrel=2 +pkgdesc="A window switcher, application launcher and dmenu replacement" +arch=('i686' 'x86_64') +url='https://github.com/DaveDavenport/rofi' +license=('Expat') +depends=('libxdg-basedir' 'startup-notification' 'libxkbcommon-x11' + 'xcb-util-wm' 'xcb-util-xrm' 'xcb-util-cursor' 'librsvg-legacy') +makedepends=('quilt' 'check') +optdepends=('i3-wm: use as a window switcher') +source=("https://github.com/DaveDavenport/rofi/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/r/rofi/rofi_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('bba9ee25c7ff2168370ad1fd21a2286706f9db1efccdab84c55abd3bfa822ed10d23128388c69c964e81b2c51e1a95b3a3c7ca503a4564d0bdb3a993d8a9553d' + '2dafa1191a92f9c112b0906de98628332a489123a29ab75077f8faa78d366c5ec0aa8d4dd49d35680f35b6c579572ac5dab959664a0abf378ef33a1449d798b7') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -i +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd "$pkgname-$pkgver" + make install install-man DESTDIR="$pkgdir" + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + install -dm755 "$pkgdir/usr/share/doc/$pkgname/examples" + install -Dm755 Examples/*.sh "$pkgdir/usr/share/doc/$pkgname/examples" +} diff --git a/roundup/PKGBUILD b/roundup/PKGBUILD new file mode 100644 index 0000000..a5534fd --- /dev/null +++ b/roundup/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=roundup +pkgver=2.4.0 +pkgrel=1 +pkgdesc="A free software, simple-to-use and install issue-tracking system with command-line, web and e-mail interfaces" +arch=('any') +url='https://www.roundup-tracker.org' +license=('Python' 'Expat' 'Zope-2.0') +depends=('python-psycopg2') +makedepends=('python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/roundup-tracker/roundup/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('4ac289dce0c78e604226eb97245eb52c0a9b67a1254fe72609daa6786981fe9ac62d3bdb884fdac82b485b9584bb67b5c56dbc957ba2576bd8ce580e2e09b380') + +build() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py build +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py install --prefix="/usr" --root="$pkgdir" --optimize=1 + install -Dm644 COPYING.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/routersploit/PKGBUILD b/routersploit/PKGBUILD new file mode 100644 index 0000000..3b2b7fc --- /dev/null +++ b/routersploit/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=routersploit +pkgver=3.4.0 +pkgrel=1 +pkgdesc="Free and libre exploitation framework dedicated to embedded devices" +url='https://github.com/threat9/routersploit' +arch=('any') +license=('Modified-BSD') +depends=('python' 'python-future' 'python-requests' 'python-paramiko' 'python-pysnmp' 'python-pycryptodome') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/threat9/routersploit/archive/v${pkgver}.tar.gz" + "${pkgname}-py38.patch") +sha512sums=('9182598105c4d1c971dc63ac24059469dd1862af204f59994cfc85012091663a85faee4c7c04cce573eef1fa91525b44a3963b8c24460d3b31595c4ef6a6c4e5' + 'b1f81e6bd8bba0a90b3a5bfc57b5ebb690d83e1e404adc49659dffa23c7dbac902815b3a75195902fcf6a4fb7acb1db627f29533d0e8fc60caaaa76f766fb3cb') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i "${srcdir}/${pkgname}-py38.patch" +} + +package() { + cd ${pkgname}-${pkgver} + + python setup.py install --prefix=/usr --root="${pkgdir}" --optimize=1 + rm -rf "${pkgdir}"/usr/lib/python*/site-packages/tests + mv "${pkgdir}/usr/bin/rsf"{.py,} + + install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + cp -r docs/* "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/routersploit/routersploit-py38.patch b/routersploit/routersploit-py38.patch new file mode 100644 index 0000000..690c862 --- /dev/null +++ b/routersploit/routersploit-py38.patch @@ -0,0 +1,24 @@ +From 47183c74a49f641f818a157e9c5973b9eb7fa78c Mon Sep 17 00:00:00 2001 +From: Felix Yan +Date: Tue, 12 Nov 2019 15:10:58 -0600 +Subject: [PATCH] Do not update the same dict while iterating (fixes #623) + (#626) + +Fixes compatibility with Python 3.8. +--- + routersploit/core/exploit/exploit.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/routersploit/core/exploit/exploit.py b/routersploit/core/exploit/exploit.py +index f21fac7fd..535fd0967 100644 +--- a/routersploit/core/exploit/exploit.py ++++ b/routersploit/core/exploit/exploit.py +@@ -42,7 +42,7 @@ def __new__(cls, name, bases, attrs): + else: + attrs["exploit_attributes"] = {k: v for d in base_exploit_attributes for k, v in iteritems(d)} + +- for key, value in iteritems(attrs): ++ for key, value in iteritems(attrs.copy()): + if isinstance(value, Option): + value.label = key + attrs["exploit_attributes"].update({key: [value.display_value, value.description, value.advanced]}) diff --git a/rox/PKGBUILD b/rox/PKGBUILD new file mode 100644 index 0000000..dad0b43 --- /dev/null +++ b/rox/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=rox +pkgver=2.11 +_debver=2.11 +_debrel=5 +pkgrel=3 +pkgdesc='A small and fast file manager which can optionally manage the desktop background and panels' +arch=('i686' 'x86_64') +license=('GPL-2') +url='http://rox.sourceforge.net/desktop/' +depends=('sh' 'libsm' 'gtk2') +makedepends=('librsvg-legacy' 'python' 'quilt') +source=("https://downloads.sourceforge.net/${pkgname}/rox-filer-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/r/rox/rox_$_debver-$_debrel.debian.tar.xz" + rox.desktop + rox.svg + rox.sh) +sha512sums=('2ef5e7a5d6f4bbb825d6f01725ad4149b9cabfb6fe82c33631bb145f5a3c84e345c372b7698170c1ef78b30ffbc4665495cc266da4828cc8b4b256b592b2c50b' + 'f5d83b76758b04fef7c1a8b20aafa3d3191bc1a77e23e9efef463fa3c46ad95fce6a55d3bf548dd9997cdf977beb65e7bd9e7914bd0bf2cb36cdbb201b2b78e1' + '947eb72638bca26ba319ab5e63ae3729dc9b3d9d9c332e309cc6aed54fc19e2870b22eeac6906e323ba018e305850ea11e6fe1d46f132ee65650b6f090795dbe' + '8bfbac1d86079817ae107c27b4ad1af779a1bcdec7e06b0a1ad124af0883b7d2b4565b96f71edac3ba42a2a83ddac059c56d0cace4b226bb2f6b6e8cd097d375' + 'e341bb837ba34237005b2bd1851b48bff2704d39ad4ee459960915da32c05e4f269f945039377bc97bdd6dd73b5cbc163e8ccfbbe3764aa05950e68e690d9290') + +prepare() { + cd "$srcdir/rox-filer-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/global || true + + quilt push -av + fi + + 2to3 -w ROX-Filer/src/po/tips.py +} + +build() { + cd "$srcdir/rox-filer-$pkgver" + + ./ROX-Filer/AppRun --compile CFLAGS="$CFLAGS -fcommon" LIBS="-ldl -lm" + # finally we render a png as fallback for svg unaware menu applications + # Attention: always make sure you check the dimensions of the source-svg, + # you can read the dimensions via inkscape's export function + rsvg-convert -w 125 -h 100 -f png -o "$srcdir/rox.png" "$srcdir/rox.svg" +} + +package() { + cd "$srcdir/rox-filer-$pkgver" + + install -d "$pkgdir/usr/share/Choices/MIME-types" + install -m755 Choices/MIME-types/* "$pkgdir/usr/share/Choices/MIME-types/" + cp -rp ROX-Filer "$pkgdir/usr/share/" + rm -fr "$pkgdir"/usr/share/ROX-Filer/{src,build} + + install -Dm755 "$srcdir/rox.sh" "$pkgdir/usr/bin/rox" + install -Dm644 rox.1 "$pkgdir/usr/share/man/man1/rox.1" + ln -sf rox.1 "$pkgdir/usr/share/man/man1/ROX-Filer.1" + + install -Dm644 "$srcdir/rox.desktop" "$pkgdir/usr/share/applications/rox.desktop" + install -Dm644 "$srcdir/rox.svg" "$pkgdir/usr/share/pixmaps/rox.svg" + install -Dm644 "$srcdir/rox.png" "$pkgdir/usr/share/pixmaps/rox.png" + + install -Dm644 ROX-Filer/Help/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/rox/rox.desktop b/rox/rox.desktop new file mode 100644 index 0000000..3da3492 --- /dev/null +++ b/rox/rox.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=ROX Filer +Comment=File Manager +Exec=rox +Icon=rox +Terminal=false +Type=Application +Categories=System;Utility;Core;FileManager; diff --git a/rox/rox.sh b/rox/rox.sh new file mode 100644 index 0000000..f2dc449 --- /dev/null +++ b/rox/rox.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/share/ROX-Filer/AppRun "$@" diff --git a/rox/rox.svg b/rox/rox.svg new file mode 100644 index 0000000..4cbd7cc --- /dev/null +++ b/rox/rox.svg @@ -0,0 +1,493 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Created with Inkscape +http://www.inkscape.org/ + image/svg+xml + + Rox-Filer Icon for Archlinux +based on work found on the internet trying to match the original xpm + 2004-07-14 + + + Tobias Kieslich, Archlinux package maintainer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-pppoe/PKGBUILD b/rp-pppoe/PKGBUILD new file mode 100644 index 0000000..2a4b4c5 --- /dev/null +++ b/rp-pppoe/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=rp-pppoe +pkgver=3.12 +_debver=3.12 +_debrel=1.2 +pkgrel=2 +pkgdesc="Point-to-Point Protocol over Ethernet client" +arch=('i686' 'x86_64') +url='https://dianne.skoll.ca/projects/rp-pppoe/' +license=('GPL') +depends=('ppp=2.4.7' 'sh' 'net-tools') +makedepends=('quilt') +backup=(etc/ppp/pppoe.conf + etc/ppp/firewall-standalone + etc/ppp/firewall-masq + etc/ppp/pppoe-server-options) +options=('!makeflags') +install=rp-pppoe.install +source=(https://dianne.skoll.ca/projects/rp-pppoe/download/OLD/rp-pppoe-$pkgver.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/r/rp-pppoe/rp-pppoe_$_debver-$_debrel.debian.tar.xz + kmode.patch + rp-pppoe-3.12-linux-headers.patch + libre.patch + rp-pppoe.initd) +sha512sums=('1b9e4c806fcbad1bc21f7b74a780ae98682b10a69d91fb08df6dbd1fff86f6271995ebded43f926f8249a17cdddb541edccbbb3ee28e1a2dc89173ad61cd3de1' + 'SKIP' + '262b1ecb6faae457ae2e9a84ada7e91bc2abb07fce9bb367ee27e0419d89a43a0c31164a4614c4e006f6f60ebc3a3ffb3e97e655168b80c305373b6530da0bb2' + '97c4befc7374df564bc54fab2b68e692b03f22fc190b615e862448c2d11dbfda003569499f6921044c9d47c4c6bba97a9da573e099dc5b8593241da14e6f6e6b' + 'b4d25bfd060e8ab63978ac243516c92d889a2a00b1cb786c0c3bc9ca892c43e0e76c24964aa3165a5a4bb3eb56af8df20be4f99accb8bfb812a4678e8bf9980c' + 'eaaea24d2bd3f9b2a16f20e58c5751523f4c512a3f2e83277e80a2c6e6c61b1d650792b87b0d42dac1437553331fbe429f39c6e0a7fa68591f6ccc81f146996c' + '3395a7b5f7623711a8e6c9ea06eb36e0cbd3449abf755b835ef5e3428a1d508ff703e1e42837b6c61b937a6df9ca358637ac3ffd3b0c66616f165b48cef4df58') +validpgpkeys=('FC2E9B645468698FD7B21655C1842E2A126F42E0') # Dianne Skoll + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + ## remove nonfree software recommendation (ServPoET) + rm -v SERVPOET + patch -Np1 -i "$srcdir/libre.patch" + + cd "$srcdir/$pkgname-$pkgver/src" + patch -Np2 -i ../../kmode.patch + patch -Np2 -i ../../rp-pppoe-3.12-linux-headers.patch +} + +build() { + cd "$srcdir/$pkgname-$pkgver/src" + ./configure --prefix=/usr --enable-plugin + make PLUGIN_DIR="/usr/lib/rp-pppoe" all rp-pppoe.so +} + +package() { + cd "$srcdir/$pkgname-$pkgver/src" + make PLUGIN_DIR="/usr/lib/rp-pppoe" DESTDIR="$pkgdir" install + + #install -Dm755 "$srcdir/adsl" "$pkgdir/etc/rc.d/adsl" + install -Dm755 "$srcdir/rp-pppoe.initd" "$pkgdir/etc/init.d/rp-pppoe" + sed -e 's|/var/run|/run|g' \ + -i "$pkgdir/etc/init.d/rp-pppoe" +} diff --git a/rp-pppoe/kmode.patch b/rp-pppoe/kmode.patch new file mode 100644 index 0000000..4ad7440 --- /dev/null +++ b/rp-pppoe/kmode.patch @@ -0,0 +1,19 @@ +diff -up rp-pppoe-3.11/src/configure.orig rp-pppoe-3.11/src/configure +--- rp-pppoe-3.11/src/configure.orig 2012-08-17 12:31:25.000000000 -0600 ++++ rp-pppoe-3.11/src/configure 2013-02-11 14:23:05.000000000 -0700 +@@ -3709,6 +3709,7 @@ do : + #include + #include + #include ++#include + + " + if test "x$ac_cv_header_linux_if_pppox_h" = x""yes; then : +@@ -4559,6 +4559,7 @@ else + #include + #include + #include ++#include + #include + int main() + { diff --git a/rp-pppoe/libre.patch b/rp-pppoe/libre.patch new file mode 100644 index 0000000..1e305c8 --- /dev/null +++ b/rp-pppoe/libre.patch @@ -0,0 +1,88 @@ +diff -Nur rp-pppoe-3.11.orig/rp-pppoe.spec rp-pppoe-3.11/rp-pppoe.spec +--- rp-pppoe-3.11.orig/rp-pppoe.spec 2012-08-17 15:31:25.000000000 -0300 ++++ rp-pppoe-3.11/rp-pppoe.spec 2012-10-05 01:42:29.964508454 -0300 +@@ -55,7 +55,7 @@ + + %files + %defattr(-,root,root) +-%doc doc/CHANGES doc/HOW-TO-CONNECT doc/LICENSE doc/KERNEL-MODE-PPPOE README SERVPOET ++%doc doc/CHANGES doc/HOW-TO-CONNECT doc/LICENSE doc/KERNEL-MODE-PPPOE README + %config(noreplace) /etc/ppp/pppoe.conf + %config(noreplace) /etc/ppp/pppoe-server-options + %config(noreplace) /etc/ppp/firewall-masq +diff -Nur rp-pppoe-3.12.orig/src/Makefile.in rp-pppoe-3.12/src/Makefile.in +--- rp-pppoe-3.12.orig/src/Makefile.in 2015-11-11 12:10:02.000000000 -0300 ++++ rp-pppoe-3.12/src/Makefile.in 2016-01-14 15:09:01.441919395 -0300 +@@ -44,9 +44,6 @@ + PPPOE_PATH=$(sbindir)/pppoe + PPPD_PATH=@PPPD@ + +-# Include ServPoET version if we're building for ServPoET +-@LIC_MAKEFILE_INCLUDE@ +- + # Kernel-mode plugin gets installed here. + PLUGIN_DIR=/etc/ppp/plugins + PLUGIN_PATH=$(PLUGIN_DIR)/rp-pppoe.so +@@ -171,7 +168,6 @@ + $(install) -m 644 ../doc/HOW-TO-CONNECT $(DESTDIR)$(docdir) + $(install) -m 644 ../doc/LICENSE $(DESTDIR)$(docdir) + $(install) -m 644 ../README $(DESTDIR)$(docdir) +- $(install) -m 644 ../SERVPOET $(DESTDIR)$(docdir) + $(install) -m 644 ../configs/pap-secrets $(DESTDIR)$(docdir) + -mkdir -p $(DESTDIR)$(mandir)/man8 + for i in $(TARGETS) ; do \ +@@ -229,25 +225,15 @@ + @echo "" + @echo "Type 'pppoe-setup' to configure the software." + +-servpoet-tgz: distro-servpoet +- cd .. && tar cvf servpoet-$(VERSION)$(BETA).tar servpoet-$(VERSION)$(BETA) +- gzip -f -v -9 ../servpoet-$(VERSION)$(BETA).tar +- rm -rf ../servpoet-$(VERSION)$(BETA) +- + tgz: distro + cd .. && tar cvf rp-pppoe-$(VERSION)$(BETA).tar rp-pppoe-$(VERSION)$(BETA) + gzip -f -v -9 ../rp-pppoe-$(VERSION)$(BETA).tar + rm -rf ../rp-pppoe-$(VERSION)$(BETA) + +-distro-servpoet: distro +- cp ../servpoet.spec ../rp-pppoe-$(VERSION)$(BETA) +- $(MAKE) -C licensed-only distro VERSION=$(VERSION) BETA=$(BETA) +- mv ../rp-pppoe-$(VERSION)$(BETA) ../servpoet-$(VERSION)$(BETA) +- + distro: + rm -rf ../rp-pppoe-$(VERSION)$(BETA) + mkdir ../rp-pppoe-$(VERSION)$(BETA) +- for i in README SERVPOET go go-gui rp-pppoe.spec ; do \ ++ for i in README go go-gui rp-pppoe.spec ; do \ + cp ../$$i ../rp-pppoe-$(VERSION)$(BETA) || exit 1; \ + done + mkdir ../rp-pppoe-$(VERSION)$(BETA)/gui +@@ -305,10 +291,6 @@ + /usr/src/redhat/RPMS/i386/rp-pppoe-$(VERSION)-1.i386.rpm \ + /usr/src/redhat/RPMS/i386/rp-pppoe-gui-$(VERSION)-1.i386.rpm + +-servpoet-rpms: servpoet-tgz +- cp ../servpoet-$(VERSION).tar.gz /usr/src/redhat/SOURCES +- cd .. && rpm -ba servpoet.spec +- + clean: + rm -f *.o pppoe-relay pppoe pppoe-sniff pppoe-server core rp-pppoe.so plugin/*.o plugin/libplugin.a *~ + test -f licensed-only/Makefile && $(MAKE) -C licensed-only clean || true +@@ -323,15 +305,13 @@ + update-version: + sed -e 's/^Version: .*$$/Version: $(VERSION)/' ../rp-pppoe.spec > ../rp-pppoe.spec.new && mv ../rp-pppoe.spec.new ../rp-pppoe.spec + sed -e 's+^Source: .*$$+Source: http://www.roaringpenguin.com/pppoe/rp-pppoe-$(VERSION).tar.gz+' ../rp-pppoe.spec > ../rp-pppoe.spec.new && mv ../rp-pppoe.spec.new ../rp-pppoe.spec +- test -f ../servpoet.spec && sed -e 's/^Version: .*$$/Version: $(VERSION)/' ../servpoet.spec > ../servpoet.spec.new && mv ../servpoet.spec.new ../servpoet.spec || true +- test -f ../servpoet.spec && sed -e 's+^Source: .*$$+Source: http://www.roaringpenguin.com/pppoe/servpoet-$(VERSION).tar.gz+' ../servpoet.spec > ../servpoet.spec.new && mv ../servpoet.spec.new ../servpoet.spec || true + + # Convenience target for Dianne! Don't try to use this one. + km: + ./configure --enable-plugin=/home/dfs/Archive/PPP/ppp-2.4.0.pppoe4-patched-dfs + + licensed-only: +- $(MAKE) -C licensed-only all VERSION=$(VERSION) SERVPOET_VERSION=$(SERVPOET_VERSION) ++ $(MAKE) -C licensed-only all VERSION=$(VERSION) + + l2tp: libevent/libevent.a + $(MAKE) -C l2tp all diff --git a/rp-pppoe/rp-pppoe-3.12-linux-headers.patch b/rp-pppoe/rp-pppoe-3.12-linux-headers.patch new file mode 100644 index 0000000..961eba3 --- /dev/null +++ b/rp-pppoe/rp-pppoe-3.12-linux-headers.patch @@ -0,0 +1,28 @@ +the linux headers have started adding shims to not define types or structs +when C lib headers are active, but in order to work, the C lib headers have +to be included before the linux headers. + +move the netinet/in.h include up above the linux/ includes. + +Mike Frysinger + +--- a/src/pppoe.h ++++ b/src/pppoe.h +@@ -47,6 +47,8 @@ + #include + #endif + ++#include ++ + /* Ugly header files on some Linux boxes... */ + #if defined(HAVE_LINUX_IF_H) + #include +@@ -84,8 +86,6 @@ typedef unsigned long UINT32_t; + #include + #endif + +-#include +- + #ifdef HAVE_NETINET_IF_ETHER_H + #include + diff --git a/rp-pppoe/rp-pppoe.initd b/rp-pppoe/rp-pppoe.initd new file mode 100644 index 0000000..cf16d26 --- /dev/null +++ b/rp-pppoe/rp-pppoe.initd @@ -0,0 +1,28 @@ +#!/sbin/openrc-run +# Copyright 2017-2022 Hyperbola Project +# Distributed under the terms of the GNU General Public License, v2 or later + +description="RP-PPPoE service" + +depend() { + need localmount + provide net +} + +start() { + ebegin "Starting rp-pppoe" + /usr/sbin/pppoe-start + eend $? +} + +status() { + ebegin "Getting rp-pppoe status" + /usr/sbin/pppoe-status + eend $? +} + +stop() { + ebegin "Stopping rp-pppoe" + /usr/sbin/pppoe-stop + eend $? +} diff --git a/rp-pppoe/rp-pppoe.install b/rp-pppoe/rp-pppoe.install new file mode 100644 index 0000000..1d4bccc --- /dev/null +++ b/rp-pppoe/rp-pppoe.install @@ -0,0 +1,12 @@ +#arg 1: the new package version +post_install() { +echo ">>> The kernel-mode plugin has a new place." +echo ">>> It's now located under /usr/lib/rp-pppoe/rp-pppoe.so" +echo ">>> Change LINUX_PLUGIN to the new path in your /etc/ppp/pppoe.conf" +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + post_install $1 +} diff --git a/rpcsvc-proto/PKGBUILD b/rpcsvc-proto/PKGBUILD new file mode 100644 index 0000000..30a21ef --- /dev/null +++ b/rpcsvc-proto/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=rpcsvc-proto +pkgver=1.4.2 +pkgrel=1 +pkgdesc='rpcsvc protocol definitions from glibc' +arch=(i686 x86_64) +url='https://github.com/thkukuk/rpcsvc-proto' +license=(Modified-BSD) +depends=(glibc) +makedepends=(gettext-tiny) +source=($pkgname-$pkgver.tar.gz::https://github.com/thkukuk/rpcsvc-proto/archive/v$pkgver.tar.gz) +sha512sums=('6769f9439e3f187eebdeef4ee8d54f8a6fee6f410e3137d0c1b26e61b705873932890856faff55b68c39aa702e456b36fe9410b85baf1ef9b20ee97f2158971a') + +prepare() { + cd $pkgname-$pkgver + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/rrdtool/PKGBUILD b/rrdtool/PKGBUILD new file mode 100644 index 0000000..6a11d1c --- /dev/null +++ b/rrdtool/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=rrdtool +pkgver=1.7.2 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="Data logging and graphing application" +arch=('i686' 'x86_64') +url='https://www.rrdtool.org' +license=('GPL-2' 'LGPL-2.1' 'Public-Domain' 'Simplified-BSD') +depends=('libxml2' 'pango' 'ttf-dejavu') +makedepends=('intltool' 'gettext-tiny' 'ruby' 'python-setuptools' 'tcl' 'lua51' 'quilt') +optdepends=('perl: to use corresponding binding' + 'tcl: to use corresponding binding' + 'python: to use corresponding binding' + 'ruby: to use corresponding binding' + 'lua51: to use corresponding binding') +options=('!emptydirs' '!makeflags') +source=("${pkgname}-${pkgver}.tar.gz::http://deb.debian.org/debian/pool/main/r/rrdtool/rrdtool_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/r/rrdtool/rrdtool_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e4fe115037454d80f589c1cbb38c0b526f5858d67ae1feda6ddd2f2060c53865a07ced46bbef392086e821146434f62ac0f07ad5319783718013a2792bd6c93f' + '1ad5c3063b4d7d40e6264e8bfc5003d11a7f384f5d1398e90aa4944cea3eaec62a59319d6c17012233f32e2d549bc79d3f57e3fca5a2c5397bc15cc2f5c1b522') + +prepare() { + mv "${pkgname}-1.x-${pkgver}" "${pkgname}-${pkgver}" + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi + + # make ruby install to vendor_ruby instead of site_ruby + sed -e 's/$(RUBY) ${abs_srcdir}\/ruby\/extconf.rb/& --vendor/' -i bindings/Makefile.am + + # https://github.com/oetiker/rrdtool-1.x/issues/1135 + autoreconf -vi +} + +build() { + cd ${pkgname}-${pkgver} + LUA=/usr/bin/lua5.1 \ + LUA_CFLAGS="-I/usr/include/lua5.1 -llua5.1" LUA_INSTALL_CMOD="/usr/lib/lua/5.1" \ + ./configure --prefix=/usr --localstatedir=/var --disable-rpath \ + --enable-perl --enable-perl-site-install --with-perl-options='INSTALLDIRS=vendor' \ + --enable-ruby --enable-ruby-site-install --enable-python \ + --enable-lua --enable-lua-site-install --enable-tcl --disable-libwrap + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" includedir=/usr/include install + install -Dm644 COPYRIGHT -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/rsnapshot/AC_INIT-version.patch b/rsnapshot/AC_INIT-version.patch new file mode 100644 index 0000000..e57eaa7 --- /dev/null +++ b/rsnapshot/AC_INIT-version.patch @@ -0,0 +1,8 @@ +--- a/configure.ac 2022-12-27 07:33:38.000000000 +0100 ++++ b/configure.ac 2024-09-30 12:13:05.030108649 +0200 +@@ -1,4 +1,4 @@ +-AC_INIT([rsnapshot],[m4_chomp_all(m4_esyscmd([git describe --tags --always --dirty]))],[rsnapshot-discuss@lists.sourceforge.net]) ++AC_INIT([rsnapshot],[1.4.5]) + AM_INIT_AUTOMAKE([foreign]) + AC_PROG_MAKE_SET + AC_CONFIG_FILES(Makefile) diff --git a/rsnapshot/PKGBUILD b/rsnapshot/PKGBUILD new file mode 100644 index 0000000..9de74f6 --- /dev/null +++ b/rsnapshot/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=rsnapshot +pkgver=1.4.5 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="A remote filesystem snapshot utility" +arch=('any') +url='https://www.rsnapshot.org' +license=('GPL-2') +depends=('perl' 'rsync' 'openssh' 'perl-lchown') +makedepends=('quilt') +backup=('etc/rsnapshot.conf') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/r/rsnapshot/rsnapshot_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/r/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz" + "rsnapshot" + "AC_INIT-version.patch") +sha512sums=('a597fee40bc48d2f1fd2bd9db487be16a6410e55c3978e21a6e6a09aab43e7c022036d7842e833e0d9864570bf9302bc6538f1fafbb31fdafd9fc1e89e54b1c5' + 'a1608ca9a9cd9e9f5b03e58ddc39f26a9e3390855c9f66c21cd6bb4c754835a4a6b1cf110708ebe75cecbc6d061f82378659a8ff02a4bc1c52069881987dd13d' + '29bb052de02c4079367b11c9c834a176fc0534c365c8eca5ff6c498c1d6d34b25cc6baad8717c5db9224daf0ea0154752fcf98f34689213f02b5d9a85882eb08' + 'de41863eac70da5c0d535ae4a0096029e890efb4dcabcb0d1116ae1aef0fbf10f10e396488d3ea460ca97cebc318043332576799e7be05f515ad102cb105a3d1') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/00_AC_INIT-verison.diff || true + + quilt push -av + fi + patch -Np1 -i ${srcdir}/AC_INIT-version.patch +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./autogen.sh + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man + sed -i 's:/usr/bin/pod2man:/usr/bin/core_perl/pod2man:' Makefile + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR=${pkgdir} install + install -Dm755 utils/rsnapreport.pl "$pkgdir/usr/bin/rsnapreport.pl" + mv "${pkgdir}/etc/rsnapshot.conf.default" "${pkgdir}/etc/rsnapshot.conf" + install -Dm644 "${srcdir}/rsnapshot" "${pkgdir}/etc/logrotate.d/rsnapshot" + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/rsnapshot/rsnapshot b/rsnapshot/rsnapshot new file mode 100644 index 0000000..190b1f5 --- /dev/null +++ b/rsnapshot/rsnapshot @@ -0,0 +1,4 @@ +/var/log/rsnapshot { + copytruncate + missingok +} diff --git a/rspamd/PKGBUILD b/rspamd/PKGBUILD new file mode 100644 index 0000000..062a0da --- /dev/null +++ b/rspamd/PKGBUILD @@ -0,0 +1,143 @@ +# Maintainer: Jesus E. + +pkgname=rspamd +pkgver=2.7 +pkgrel=4 +pkgdesc="Fast, free and libre spam filtering system" +arch=('i686' 'x86_64') +url='https://rspamd.com' +license=('Apache-2.0') +depends=('file' 'glib2' 'glibc' 'icu' 'jemalloc' 'libsodium' 'luajit' 'openblas' + 'libressl' 'pcre' 'sqlite' 'zlib') +makedepends=('cmake' 'ninja' 'perl' 'ragel') +backup=('etc/rspamd/actions.conf' + 'etc/rspamd/cgp.inc' + 'etc/rspamd/common.conf' + 'etc/rspamd/composites.conf' + 'etc/rspamd/groups.conf' + 'etc/rspamd/logging.inc' + 'etc/rspamd/maps.d/dmarc_whitelist.inc' + 'etc/rspamd/maps.d/maillist.inc' + 'etc/rspamd/maps.d/mid.inc' + 'etc/rspamd/maps.d/mime_types.inc' + 'etc/rspamd/maps.d/redirectors.inc' + 'etc/rspamd/maps.d/spf_dkim_whitelist.inc' + 'etc/rspamd/maps.d/surbl-whitelist.inc' + 'etc/rspamd/metrics.conf' + 'etc/rspamd/modules.conf' + 'etc/rspamd/modules.d/antivirus.conf' + 'etc/rspamd/modules.d/arc.conf' + 'etc/rspamd/modules.d/asn.conf' + 'etc/rspamd/modules.d/chartable.conf' + 'etc/rspamd/modules.d/clickhouse.conf' + 'etc/rspamd/modules.d/dcc.conf' + 'etc/rspamd/modules.d/dkim.conf' + 'etc/rspamd/modules.d/dkim_signing.conf' + 'etc/rspamd/modules.d/dmarc.conf' + 'etc/rspamd/modules.d/elastic.conf' + 'etc/rspamd/modules.d/emails.conf' + 'etc/rspamd/modules.d/external_services.conf' + 'etc/rspamd/modules.d/force_actions.conf' + 'etc/rspamd/modules.d/forged_recipients.conf' + 'etc/rspamd/modules.d/fuzzy_check.conf' + 'etc/rspamd/modules.d/greylist.conf' + 'etc/rspamd/modules.d/hfilter.conf' + 'etc/rspamd/modules.d/http_headers.conf' + 'etc/rspamd/modules.d/maillist.conf' + 'etc/rspamd/modules.d/metadata_exporter.conf' + 'etc/rspamd/modules.d/metric_exporter.conf' + 'etc/rspamd/modules.d/mid.conf' + 'etc/rspamd/modules.d/milter_headers.conf' + 'etc/rspamd/modules.d/mime_types.conf' + 'etc/rspamd/modules.d/multimap.conf' + 'etc/rspamd/modules.d/mx_check.conf' + 'etc/rspamd/modules.d/neural.conf' + 'etc/rspamd/modules.d/once_received.conf' + 'etc/rspamd/modules.d/p0f.conf' + 'etc/rspamd/modules.d/phishing.conf' + 'etc/rspamd/modules.d/ratelimit.conf' + 'etc/rspamd/modules.d/rbl.conf' + 'etc/rspamd/modules.d/regexp.conf' + 'etc/rspamd/modules.d/replies.conf' + 'etc/rspamd/modules.d/reputation.conf' + 'etc/rspamd/modules.d/rspamd_update.conf' + 'etc/rspamd/modules.d/spamassassin.conf' + 'etc/rspamd/modules.d/spamtrap.conf' + 'etc/rspamd/modules.d/spf.conf' + 'etc/rspamd/modules.d/surbl.conf' + 'etc/rspamd/modules.d/trie.conf' + 'etc/rspamd/modules.d/url_redirector.conf' + 'etc/rspamd/modules.d/whitelist.conf' + 'etc/rspamd/options.inc' + 'etc/rspamd/rspamd.conf' + 'etc/rspamd/scores.d/fuzzy_group.conf' + 'etc/rspamd/scores.d/headers_group.conf' + 'etc/rspamd/scores.d/hfilter_group.conf' + 'etc/rspamd/scores.d/mime_types_group.conf' + 'etc/rspamd/scores.d/mua_group.conf' + 'etc/rspamd/scores.d/phishing_group.conf' + 'etc/rspamd/scores.d/policies_group.conf' + 'etc/rspamd/scores.d/rbl_group.conf' + 'etc/rspamd/scores.d/statistics_group.conf' + 'etc/rspamd/scores.d/subject_group.conf' + 'etc/rspamd/scores.d/surbl_group.conf' + 'etc/rspamd/scores.d/whitelist_group.conf' + 'etc/rspamd/settings.conf' + 'etc/rspamd/statistic.conf' + 'etc/rspamd/worker-controller.inc' + 'etc/rspamd/worker-fuzzy.inc' + 'etc/rspamd/worker-normal.inc' + 'etc/rspamd/worker-proxy.inc') +install=$pkgname.install +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/rspamd/rspamd/archive/refs/tags/${pkgver}.tar.gz" + "$pkgname.initd" + "$pkgname.confd" + "$pkgname.run") +sha512sums=('8779771baf85ef6ca1d7d2180429072ab1547ab834b073ee9222dcc6494efdd0a23f5e7ac52a777c23fd89296769f5b6f182593e714097c6f11ca7c9165e4ba7' + 'eb18a8d357ac17f6ef645d7856df9a6fe2d445538368671b723636e45450f98d27f29df8726627c0861be4ce74670cb0a4e101fc948ba0afa362725c9f5ac833' + '038250d7b1cf45a5bc656a8f54d7ad1bd61996eccbe2f35a5dbf3d00fb4bf3fc09e13833810fbaa40c0d9e1b00b2fccfddd7e9215fac518a1df065c7929c86b3' + '02178d47965c48e0d7b544218fb96c4511df9c76543a47cf3f55e561a9676a724403ce60c5d371419b846cc1f5910205ee2b444ee657de51e7db95607ec377e7') + +build() { + cmake -S ${pkgname}-${pkgver} \ + -B build \ + -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCONFDIR=/etc/rspamd \ + -DDBDIR=/var/lib/rspamd \ + -DLOGDIR=/var/log/rspamd \ + -DRUNDIR=/run/rspamd \ + -DRSPAMD_USER=rspamd \ + -DNO_SHARED=ON \ + -DWANT_SYSTEMD_UNITS=OFF \ + -DENABLE_HYPERSCAN=OFF \ + -DENABLE_JEMALLOC=ON \ + -DENABLE_OPTIMIZATION=ON + cmake --build build +} + +package() { + DESTDIR="${pkgdir}" cmake --build build --target install + + local path="${pkgdir}"/usr/bin + for file in rspamd rspamc rspamadm; + do + rm "$path"/$file + mv "$path"/$file-$pkgver "$path"/$file + done + + mv "$path"/rspamd_stats "$path"/rspamd-stats + install -d "${pkgdir}"/usr/sbin + mv "${pkgdir}"/usr/bin/$pkgname "${pkgdir}"/usr/sbin/ + rm "${pkgdir}"/etc/rspamd/modules.d/{history_redis,redis}.conf + + install -dm750 "${pkgdir}"/var/lib/$pkgname + install -dm750 "${pkgdir}"/var/log/$pkgname + install -dm755 "${pkgdir}"/etc/$pkgname/local.d/maps.d + + install -Dm755 "${srcdir}/$pkgname.initd" "${pkgdir}/etc/init.d/$pkgname" + install -Dm644 "${srcdir}/$pkgname.confd" "${pkgdir}/etc/conf.d/$pkgname" + install -Dm755 "${srcdir}/$pkgname.run" "${pkgdir}/etc/sv/$pkgname/run" + + install -Dm644 ${pkgname}-${pkgver}/LICENSE.md -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/rspamd/rspamd.confd b/rspamd/rspamd.confd new file mode 100644 index 0000000..ed350e1 --- /dev/null +++ b/rspamd/rspamd.confd @@ -0,0 +1,32 @@ +# /etc/conf.d/rspamd + +# specified group +RSPAMD_GROUP=rspamd + +# specified user +RSPAMD_USER=rspamd + +# Configuration file +RSPAMD_CONFIGFILE="/etc/rspamd/rspamd.conf" + +# PID file +# If you should ever change this, remember to update +# "/etc/logrotate.d/rspamd", too. +RSPAMD_PIDFILE="/run/rspamd.pid" + +# You can use this configuration option to pass additional options to the +# start-stop-daemon, see start-stop-daemon(8) for more details. +# Per default we wait 1000ms after we have started the service to ensure +# that the daemon is really up and running. +RSPAMD_SSDARGS="--wait 1000" + +# The termination timeout (start-stop-daemon parameter "retry") ensures +# that the service will be terminated within a given time (60 + 5 seconds +# per default) when you are stopping the service. +RSPAMD_TERMTIMEOUT="TERM/60/KILL/5" + +# Options to rspamd +# See rspamd(8) for more details +# Notes: +# * Do not specify another CONFIGFILE but use the variable above to change the location +RSPAMD_OPTS="" diff --git a/rspamd/rspamd.initd b/rspamd/rspamd.initd new file mode 100644 index 0000000..f5be4f4 --- /dev/null +++ b/rspamd/rspamd.initd @@ -0,0 +1,49 @@ +#!/sbin/openrc-run +# Copyright 2015-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +command="/usr/sbin/rspamd" +command_rspamadm="/usr/bin/rspamadm" +command_args="${RSPAMD_OPTS} -c \"${RSPAMD_CONFIGFILE}\" -u ${RSPAMD_USER} -g ${RSPAMD_GROUP} --pid \"${RSPAMD_PIDFILE}\"" +start_stop_daemon_args=${RSPAMD_SSDARGS} +pidfile="${RSPAMD_PIDFILE}" +retry=${RSPAMD_TERMTIMEOUT} + +required_files="${RSPAMD_CONFIGFILE}" + +description="Rapid spam filtering system" + +extra_commands="checkconfig" +extra_started_commands="reload" + +description_checkconfig="Validate rspamd's configuration" +description_reload="Sends rspamd a signal to reload its configuration" + +depend() { + before mta + use dns redis +} + +checkconfig() { + ${command_rspamadm} configtest 1>/dev/null || return 1 +} + +reload() { + checkconfig || return 1 + + ebegin "Reloading ${SVCNAME}" + start-stop-daemon --signal HUP --pidfile "${pidfile}" + eend $? +} + +start_pre() { + if [ "${RC_CMD}" != "restart" ]; then + checkconfig || return 1 + fi +} + +stop_pre() { + if [ "${RC_CMD}" = "restart" ]; then + checkconfig || return 1 + fi +} diff --git a/rspamd/rspamd.install b/rspamd/rspamd.install new file mode 100644 index 0000000..8b8ac49 --- /dev/null +++ b/rspamd/rspamd.install @@ -0,0 +1,25 @@ +post_install() { + if ! getent group rspamd &>/dev/null; then + groupadd rspamd >/dev/null + fi + if ! getent passwd rspamd &>/dev/null; then + useradd -d /var/lib/rspamd -g rspamd -s /bin/nologin rspamd >/dev/null + fi + + chown rspamd:rspamd /var/lib/rspamd + chown rspamd:rspamd /var/log/rspamd + chown rspamd:rspamd /etc/rspamd/local.d/maps.d +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd rspamd &>/dev/null; then + userdel rspamd >/dev/null + fi + if getent group rspamd &>/dev/null; then + groupdel rspamd >/dev/null + fi +} diff --git a/rspamd/rspamd.run b/rspamd/rspamd.run new file mode 100644 index 0000000..4e1456e --- /dev/null +++ b/rspamd/rspamd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/rspamd -c /etc/rspamd/rspamd.conf -f -u rspamd -g rspamd diff --git a/rsync/PKGBUILD b/rsync/PKGBUILD new file mode 100644 index 0000000..098dcab --- /dev/null +++ b/rsync/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=rsync +pkgver=3.2.7 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A file transfer program to keep remote files in sync" +arch=('i686' 'x86_64') +url='https://rsync.samba.org/' +license=('GPL-3') +depends=('acl' 'lz4' 'libressl' 'perl' 'popt' 'xxhash' 'zlib') +makedepends=('quilt') +backup=('etc/rsyncd.conf' + 'etc/conf.d/rsyncd') +source=("https://rsync.samba.org/ftp/rsync/src/${pkgname}-${pkgver}.tar.gz" + "https://security.debian.org/debian-security/pool/updates/main/r/rsync/rsync_${_debver}-${_debrel}+deb12u2.debian.tar.xz" + "rsyncd.conf" + "rsyncd.confd" + "rsyncd.initd" + "rsyncd.run") +sha512sums=('c2afba11a352fd88133f9e96e19d6df80eb864450c83eced13a7faa23df947bccf2ef093f2101df6ee30abff4cbbd39ac802e9aa5f726e42c9caff274fad8377' + 'ac0868ac9b3deb84b878b6f3306629ffdfe75b57c0923fbe7d8e97cc180ea40a11ba85f4e9d64de236b47635c43732e42a10bcea37bcbe53304e1698e1338999' + '4bf7a6c215450f9b49b242f8a14add69bff93b0269f0fcccc070ec33a1f8f5026e6c735a6f166aad724fc335943e8f911680904a87ac3a2c4caf16a72c0623a7' + '8ea9a2f1fea508fa132313fa16513eac84a9ed3ce75741c42769b56bbcd3f1bd2eb8bfdfe40a6c7f619e4281e8fc8d95d1bd84096d0b64aaacf606cd614ae5b3' + 'df2ef4d9e65fa72daa9a7d91d69a06027d0e0fbc48f9ebd485e2d51990c8d00985b7ccf41314f984975e8073e2075bbdfe5543754718381497c334dc7d96451a' + '5ef914c93b764e7dc888e0f3533f7c9239a68b44a9287e97909deac603d4deed607a0bef1561b607450a0333119b59bb2d91bfda5eee4a6f2d46e1e2a02df2f6') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/disable_reconfigure_req.diff || true + rm -v debian/patches/skip_devices_test.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --disable-debug \ + --disable-zstd \ + --with-included-popt=no \ + --with-included-zlib=no + make reconfigure +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm755 support/rrsync -t "$pkgdir/usr/libexec/$pkgname" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + + install -Dm644 "$srcdir/rsyncd.conf" "$pkgdir/etc/rsyncd.conf" + install -Dm644 "$srcdir/rsyncd.confd" "$pkgdir/etc/conf.d/rsyncd" + install -Dm755 "$srcdir/rsyncd.initd" "$pkgdir/etc/init.d/rsyncd" + install -Dm755 "$srcdir/rsyncd.run" "$pkgdir/etc/sv/rsyncd/run" +} diff --git a/rsync/rsyncd.conf b/rsync/rsyncd.conf new file mode 100644 index 0000000..1521060 --- /dev/null +++ b/rsync/rsyncd.conf @@ -0,0 +1,10 @@ +uid = nobody +gid = nobody +use chroot = no +max connections = 4 +syslog facility = local5 +pid file = /run/rsyncd.pid + +[ftp] + path = /srv/ftp + comment = ftp area diff --git a/rsync/rsyncd.confd b/rsync/rsyncd.confd new file mode 100644 index 0000000..c3d897e --- /dev/null +++ b/rsync/rsyncd.confd @@ -0,0 +1,5 @@ +# /etc/conf.d/rsyncd: config file for /etc/init.d/rsyncd + +# see man pages for rsync or run `rsync --help` +# for valid cmdline options +#RSYNC_OPTS="" diff --git a/rsync/rsyncd.initd b/rsync/rsyncd.initd new file mode 100644 index 0000000..243e107 --- /dev/null +++ b/rsync/rsyncd.initd @@ -0,0 +1,11 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/usr/bin/rsync" +command_args="--daemon ${RSYNC_OPTS}" +pidfile="/var/run/${SVCNAME}.pid" + +depend() { + use net +} diff --git a/rsync/rsyncd.run b/rsync/rsyncd.run new file mode 100644 index 0000000..5a7d495 --- /dev/null +++ b/rsync/rsyncd.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ ! -e /etc/rsyncd.conf ] && exit 1 +exec rsync --daemon --no-detach diff --git a/rtorrent/PKGBUILD b/rtorrent/PKGBUILD new file mode 100644 index 0000000..284388b --- /dev/null +++ b/rtorrent/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=rtorrent +pkgver=0.9.8 +pkgrel=1 +pkgdesc="Ncurses BitTorrent client based on libTorrent" +url='https://rakshasa.github.io/rtorrent/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('libtorrent' 'curl' 'libxmlrpc') +source=("https://github.com/rakshasa/rtorrent/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('016685948d0290694ab9635ae218c7acd876e6d45bea1bdba3a29c545e64f5d824c5e2f6693a4c2e9200196177881d54f312d72e0a19742bd74a03bd19ca05c7') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + export CXXFLAGS+=' -fno-strict-aliasing' + ./configure \ + --prefix=/usr \ + --disable-debug \ + --with-xmlrpc-c + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -D doc/rtorrent.rc "${pkgdir}"/usr/share/doc/rtorrent/rtorrent.rc + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/ruby-hpricot/PKGBUILD b/ruby-hpricot/PKGBUILD new file mode 100644 index 0000000..eea469d --- /dev/null +++ b/ruby-hpricot/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +_gemname=hpricot +pkgname=ruby-$_gemname +pkgver=0.8.6 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc="A swift, liberal HTML parser with a fantastic library" +arch=('i686' 'x86_64') +url='https://github.com/hpricot/hpricot' +license=('Expat') +depends=('ruby') +makedepends=('quilt') +options=(!emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/hpricot/hpricot/archive/refs/tags/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/r/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('0b35295745d36483fbd0c0ea7751c9e9672efdc3738145991a4799e3e2f75ec05cc833b28eacb45631a805b760b6f83a179bbbd830a3b30ea25749d243f527d7' + '2d01c9eed6d6ae6463c16fcd404528d0a80d77bc763e573a83e6bb5c958b57b64b273ab46aa9366b149780300ed77b6f4bc0751360d59fa3711dfe154a1b8d99') + +prepare() { + cd $_gemname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build () { + cd $_gemname-$pkgver + gem build +} + +package() { + cd $_gemname-$pkgver + local _gemdir="$(ruby -e'puts Gem.default_dir')" + gem install --ignore-dependencies --no-user-install --no-document -i "$pkgdir/$_gemdir" -n "$pkgdir/usr/bin" $_gemname-$pkgver.gem + rm "$pkgdir/$_gemdir/cache/$_gemname-$pkgver.gem" + rm -r "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/test" + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" + + rm -r "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/ext" +} diff --git a/ruby-kramdown/PKGBUILD b/ruby-kramdown/PKGBUILD new file mode 100644 index 0000000..3217abc --- /dev/null +++ b/ruby-kramdown/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +_gemname=kramdown +pkgname=ruby-kramdown +pkgver=2.3.0 +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="Fast, pure Ruby Markdown superset converter, using a strict syntax definition" +url='https://kramdown.gettalong.org/' +arch=('any') +license=('Expat') +depends=('ruby' 'ruby-rexml') +makedepends=('quilt') +options=('!emptydirs') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/gettalong/kramdown/archive/REL_${pkgver//./_}.tar.gz" + "https://deb.debian.org/debian/pool/main/r/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz") +sha512sums=('9bce4aae940a31e975e1582c47edce046d1fcd61e8dd4a56e5088761b2a3cf4c72cb322c55af4d9b17db14d1e0db56602f8d56e6724e2f9be36307de4249bb84' + 'c0b8e1a08365be965438ac1df31efd772cd331ffdd00df3e30511d4a9e16f1d4316f69081af7a12716d7c0b9422b3225385dfebff863dbf14e54841410db98e1') + +prepare() { + cd ${_gemname}-REL_${pkgver//./_} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + rm -v debian/patches/fix_manpage_warnings.patch || true + + quilt push -av + fi + rake gemspec + sed -r 's|~>|>=|g' -i ${_gemname}.gemspec +} + +build() { + cd ${_gemname}-REL_${pkgver//./_} + gem build ${_gemname}.gemspec +} + +package() { + cd ${_gemname}-REL_${pkgver//./_} + local _gemdir="$(gem env gemdir)" + gem install --ignore-dependencies --no-user-install -i "${pkgdir}${_gemdir}" -n "${pkgdir}/usr/bin" ${_gemname}-${pkgver}.gem + install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -d "${pkgdir}/usr/share/man/man1" + mv "${pkgdir}/${_gemdir}/gems/kramdown-${pkgver}/man/man1/kramdown.1" "${pkgdir}/usr/share/man/man1" + rm "${pkgdir}/${_gemdir}/cache/${_gemname}-${pkgver}.gem" + rm -r "${pkgdir}/${_gemdir}/gems/kramdown-${pkgver}/test" +} diff --git a/ruby-mini_portile2/PKGBUILD b/ruby-mini_portile2/PKGBUILD new file mode 100644 index 0000000..5886fcd --- /dev/null +++ b/ruby-mini_portile2/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +_gemname=mini_portile2 +pkgname=ruby-mini_portile2 +pkgver=2.8.1 +pkgrel=1 +pkgdesc="Simple autoconf builder for developers" +url='https://github.com/flavorjones/mini_portile' +arch=('any') +license=('Expat') +depends=('ruby') +options=('!emptydirs') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/flavorjones/mini_portile/archive/v${pkgver}.tar.gz) +sha512sums=('5f0b5806deae6d4b4d5c0a74dccb3fd09bad46db235ea00f288f4a493b60b78d165892b41320658961ffb382bc533c594c9435e80dcf7369d767de9829606947') + +prepare() { + cd mini_portile-${pkgver} + sed -r 's|~>|>=|g' -i ${_gemname}.gemspec # the comment say: dont care about rubys bla bla ! + sed 's|git ls-files -z|find -type f -print0|' -i ${_gemname}.gemspec +} + +build() { + cd mini_portile-${pkgver} + gem build ${_gemname}.gemspec +} + +package() { + cd mini_portile-${pkgver} + local _gemdir="$(gem env gemdir)" + gem install --ignore-dependencies --no-user-install -i "${pkgdir}${_gemdir}" -n "${pkgdir}/usr/bin" ${_gemname}-${pkgver}.gem + rm "${pkgdir}/${_gemdir}/cache/${_gemname}-${pkgver}.gem" + install -Dm 644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm 644 README.md CHANGELOG.md -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/ruby-mustache/PKGBUILD b/ruby-mustache/PKGBUILD new file mode 100644 index 0000000..f32eb73 --- /dev/null +++ b/ruby-mustache/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +_gemname=mustache +pkgname=ruby-$_gemname +pkgver=1.1.1 +_debver=$pkgver +_debrel=2 +pkgrel=2 +pkgdesc="Mustache is a framework-agnostic way to render logic-free views." +arch=('any') +url='https://github.com/defunkt/mustache' +license=('Expat') +depends=('ruby') +makedepends=('quilt') +options=(!emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/${_gemname}/${_gemname}/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/r/ruby-mustache/ruby-mustache_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('3bfe85698ffc95828cb2c6d7ee77049a7dab3a60313289cb0b19e9210d17e4de043df913784c5322a0d9d2073ee6be66f973df9b290e939a0eab153727c31fab' + '54abbc15593a1cbc95596540c03e9c89ee23fa6c2f2434e81d4c3e50fa3b703722d231270db2ecea5d6b8d1cfc70598ebd995dd2ef33d8fa6e970d3e88bf6644') + +prepare() { + cd $_gemname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build () { + cd $_gemname-$pkgver + gem build +} + +package() { + cd $_gemname-$pkgver + local _gemdir="$(ruby -e'puts Gem.default_dir')" + gem install --ignore-dependencies --no-user-install -N -i "$pkgdir/$_gemdir" -n "$pkgdir/usr/bin" $_gemname-$pkgver.gem + rm "$pkgdir/$_gemdir/cache/$_gemname-$pkgver.gem" + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ruby-nokogiri/PKGBUILD b/ruby-nokogiri/PKGBUILD new file mode 100644 index 0000000..caf9a64 --- /dev/null +++ b/ruby-nokogiri/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +_gemname=nokogiri +pkgname=ruby-$_gemname +pkgver=1.13.10 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Nokogiri is an HTML, XML, SAX and Reader parser" +arch=('i686' 'x86_64') +url='https://nokogiri.org' +license=('Expat') +depends=('ruby' 'ruby-mini_portile2' 'libxslt') +makedepends=('quilt') +options=(!emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/sparklemotion/${_gemname}/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/r/$pkgname/${pkgname}_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('c9a4b14cb92c4920872048991c958036d5f09b8e231a6f6408e5d3c5df78b70e206cc12b8ed8aaae012e51f6f87adcbe46273cd1feca082ec17f42114f5a1172' + '53626f6da49155ee3d08a4b883d38f86cf786b0aeaf98eb04d17844294241907b50bf7023aa4e0be1335639f117c118020c197b7ea50fe05e77f58f72a0ffdfd') + +prepare() { + cd $_gemname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build () { + cd $_gemname-$pkgver + gem build +} + +package() { + cd $_gemname-$pkgver + local _gemdir="$(ruby -e'puts Gem.default_dir')" + gem install --ignore-dependencies --no-user-install -i "$pkgdir/$_gemdir" -n "$pkgdir/usr/bin" $_gemname-$pkgver.gem -- --use-system-libraries + sed -r 's|~>|>=|g' -i "$pkgdir/$_gemdir/specifications/$_gemname-$pkgver.gemspec" + rm "$pkgdir/$_gemdir/cache/$_gemname-$pkgver.gem" + rm "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/ext/nokogiri"/{*.o,*.c,*.h} + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/LICENSE-DEPENDENCIES.md" -t "$pkgdir/usr/share/licenses/$pkgname" + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/LICENSE.md" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ruby-rdiscount/PKGBUILD b/ruby-rdiscount/PKGBUILD new file mode 100644 index 0000000..0ea015b --- /dev/null +++ b/ruby-rdiscount/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +_gemname=rdiscount +pkgname=ruby-$_gemname +pkgver=2.1.8 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Fast Implementation of Gruber's Markdown in C" +arch=('i686' 'x86_64') +url='https://dafoster.net/projects/rdiscount/' +license=('Modified-BSD') +depends=('ruby') +makedepends=('quilt') +options=(!emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/davidfstr/${_gemname}/archive/refs/tags/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/r/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('998beda4e8771b00c4d6795834b9de7cacffb1add3cff96c951da3aecb22c386b4eaa44b6eca744e63c2a86656916d45423f88a743313e528bdee56ad0486f4e' + 'fd5abbfad04618b1711f210773e902a2e10a8159a8d5521d5db48393850e93e0d98b8b1f7a6dd0bc47bcf6b3e3e278cee2a1c4cb3c1eb6dfe50ca2682328032f') + +prepare() { + cd $_gemname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build () { + cd $_gemname-$pkgver + gem build +} + +package() { + cd $_gemname-$pkgver + local _gemdir="$(ruby -e'puts Gem.default_dir')" + gem install --ignore-dependencies --no-user-install -i "$pkgdir/$_gemdir" -n "$pkgdir/usr/bin" $_gemname-$pkgver.gem + rm "$pkgdir/$_gemdir/cache/$_gemname-$pkgver.gem" + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + rm -rf "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/ext" +} diff --git a/ruby-rexml/PKGBUILD b/ruby-rexml/PKGBUILD new file mode 100644 index 0000000..a8862b4 --- /dev/null +++ b/ruby-rexml/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +_gemname=rexml +pkgname=ruby-$_gemname +pkgver=3.2.5 +pkgrel=2 +pkgdesc="An XML toolkit for Ruby" +arch=('any') +url='https://github.com/ruby/rexml' +license=('Simplified-BSD') +depends=('ruby') +options=(!emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/ruby/${_gemname}/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('9c62b789988b407bf4b02906768300b256734bfa342ef6b3551428ba2c1792b7e7e5a5480251d7df52318a5e5155757ab1377c0cc8d1d7c33278f33e367a5ca5') + +build () { + cd $_gemname-$pkgver + gem build +} + +package() { + cd $_gemname-$pkgver + local _gemdir="$(ruby -e'puts Gem.default_dir')" + gem install --no-document --ignore-dependencies --no-user-install -i "$pkgdir/$_gemdir" -n "$pkgdir/usr/bin" $_gemname-$pkgver.gem + rm "$pkgdir/$_gemdir/cache/$_gemname-$pkgver.gem" + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/LICENSE.txt" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ruby-ronn-ng/PKGBUILD b/ruby-ronn-ng/PKGBUILD new file mode 100644 index 0000000..afa75cc --- /dev/null +++ b/ruby-ronn-ng/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +_gemname=ronn-ng +pkgname=ruby-$_gemname +pkgver=0.9.1 +_debver=$pkgver +_debrel=3 +pkgrel=4 +pkgdesc="Manual page formatter that generates man pages from markdown" +arch=('any') +url='https://github.com/apjanke/ronn-ng' +license=('Expat') +depends=('ruby' 'ruby-hpricot' 'ruby-rdiscount' 'ruby-mustache' 'ruby-kramdown' 'ruby-nokogiri') +makedepends=('quilt') +options=(!emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/apjanke/${_gemname}/archive/refs/tags/v${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/r/ruby-ronn/ruby-ronn_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('03d6856598740ff670a500b182d0be84b584c98245e81b605de6c126b79680be48d2ed18d4cf28252c0a82883b4740ae58c584e977d3f0a9480082a9eb560a9a' + '55031716ea24109fd1b52f3f3ba308517ece73a97689d1cbd61a60e99a6ccca81c353736fb937099b7c0f4d359cf3c73bab4c334c1f3faf9c8ef9aaea673f1b5') + +prepare() { + cd $_gemname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build () { + cd $_gemname-$pkgver + gem build +} + +package() { + cd $_gemname-$pkgver + local _gemdir="$(ruby -e'puts Gem.default_dir')" + gem install --ignore-dependencies --no-user-install -i "$pkgdir/$_gemdir" -n "$pkgdir/usr/bin" $_gemname-$pkgver.gem + rm "$pkgdir/$_gemdir/cache/$_gemname-$pkgver.gem" + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/LICENSE.txt" "$pkgdir/usr/share/licenses/$pkgname/LICENSE.txt" + + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/man/ronn.1" "$pkgdir/usr/share/man/man1/ronn.1" + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/man/ronn-format.7" "$pkgdir/usr/share/man/man7/ronn-format.7" + + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/completion/bash/ronn" "$pkgdir/usr/share/bash-completion/completions/ronn" + install -D -m644 "$pkgdir/$_gemdir/gems/$_gemname-$pkgver/completion/zsh/_ronn" "$pkgdir/usr/share/zsh/site-functions/_ronn" +} diff --git a/ruby/CVE-2021-41816.patch b/ruby/CVE-2021-41816.patch new file mode 100644 index 0000000..c827e2c --- /dev/null +++ b/ruby/CVE-2021-41816.patch @@ -0,0 +1,24 @@ +From c728632c1c09d46cfd4ecbff9caaa3651dd1002a Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Fri, 3 Sep 2021 19:40:22 +0900 +Subject: [PATCH] Fix integer overflow + +Make use of the check in rb_alloc_tmp_buffer2. + +https://hackerone.com/reports/1328463 +--- + ext/cgi/escape/escape.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/ext/cgi/escape/escape.c ++++ b/ext/cgi/escape/escape.c +@@ -36,7 +36,8 @@ + optimized_escape_html(VALUE str) + { + VALUE vbuf; +- char *buf = ALLOCV_N(char, vbuf, RSTRING_LEN(str) * HTML_ESCAPE_MAX_LEN); ++ typedef char escape_buf[HTML_ESCAPE_MAX_LEN]; ++ char *buf = *ALLOCV_N(escape_buf, vbuf, RSTRING_LEN(str)); + const char *cstr = RSTRING_PTR(str); + const char *end = cstr + RSTRING_LEN(str); + diff --git a/ruby/CVE-2021-41817-1.patch b/ruby/CVE-2021-41817-1.patch new file mode 100644 index 0000000..71f1657 --- /dev/null +++ b/ruby/CVE-2021-41817-1.patch @@ -0,0 +1,917 @@ +From 3959accef8da5c128f8a8e2fd54e932a4fb253b0 Mon Sep 17 00:00:00 2001 +From: Yusuke Endoh +Date: Fri, 12 Nov 2021 12:15:25 +0900 +Subject: [PATCH] Add length limit option for methods that parses date strings + +`Date.parse` now raises an ArgumentError when a given date string is +longer than 128. You can configure the limit by giving `limit` keyword +arguments like `Date.parse(str, limit: 1000)`. If you pass `limit: nil`, +the limit is disabled. + +Not only `Date.parse` but also the following methods are changed. + +* Date._parse +* Date.parse +* DateTime.parse +* Date._iso8601 +* Date.iso8601 +* DateTime.iso8601 +* Date._rfc3339 +* Date.rfc3339 +* DateTime.rfc3339 +* Date._xmlschema +* Date.xmlschema +* DateTime.xmlschema +* Date._rfc2822 +* Date.rfc2822 +* DateTime.rfc2822 +* Date._rfc822 +* Date.rfc822 +* DateTime.rfc822 +* Date._jisx0301 +* Date.jisx0301 +* DateTime.jisx0301 +--- + date.gemspec | 2 +- + ext/date/date_core.c | 384 +++++++++++++++++++++++++++-------- + test/date/test_date_parse.rb | 29 +++ + 3 files changed, 326 insertions(+), 89 deletions(-) + +#diff --git a/date.gemspec b/date.gemspec +#index 88e5838..1a3ae81 100644 +#--- a/date.gemspec +#+++ b/date.gemspec +#@@ -1,7 +1,7 @@ +# # frozen_string_literal: true +# Gem::Specification.new do |s| +# s.name = "date" +#- s.version = '3.2.0' +#+ s.version = '3.2.1' +# s.summary = "A subclass of Object includes Comparable module for handling dates." +# s.description = "A subclass of Object includes Comparable module for handling dates." +# +--- a/ext/date/date_core.c ++++ b/ext/date/date_core.c +@@ -4321,12 +4321,37 @@ + + VALUE date__parse(VALUE str, VALUE comp); + ++static size_t ++get_limit(VALUE opt) ++{ ++ if (!NIL_P(opt)) { ++ VALUE limit = rb_hash_aref(opt, ID2SYM(rb_intern("limit"))); ++ if (NIL_P(limit)) return SIZE_MAX; ++ return NUM2SIZET(limit); ++ } ++ return 128; ++} ++ ++static void ++check_limit(VALUE str, VALUE opt) ++{ ++ StringValue(str); ++ size_t slen = RSTRING_LEN(str); ++ size_t limit = get_limit(opt); ++ if (slen > limit) { ++ rb_raise(rb_eArgError, ++ "string length (%"PRI_SIZE_PREFIX"u) exceeds the limit %"PRI_SIZE_PREFIX"u", slen, limit); ++ } ++} ++ + static VALUE + date_s__parse_internal(int argc, VALUE *argv, VALUE klass) + { +- VALUE vstr, vcomp, hash; ++ VALUE vstr, vcomp, hash, opt; + +- rb_scan_args(argc, argv, "11", &vstr, &vcomp); ++ rb_scan_args(argc, argv, "11:", &vstr, &vcomp, &opt); ++ if (!NIL_P(opt)) argc--; ++ check_limit(vstr, opt); + StringValue(vstr); + if (!rb_enc_str_asciicompat_p(vstr)) + rb_raise(rb_eArgError, +@@ -4341,7 +4366,7 @@ + + /* + * call-seq: +- * Date._parse(string[, comp=true]) -> hash ++ * Date._parse(string[, comp=true], limit: 128) -> hash + * + * Parses the given representation of date and time, and returns a + * hash of parsed elements. This method does not function as a +@@ -4352,6 +4377,10 @@ + * it full. + * + * Date._parse('2001-02-03') #=> {:year=>2001, :mon=>2, :mday=>3} ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + date_s__parse(int argc, VALUE *argv, VALUE klass) +@@ -4361,7 +4390,7 @@ + + /* + * call-seq: +- * Date.parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]]) -> date ++ * Date.parse(string='-4712-01-01'[, comp=true[, start=Date::ITALY]], limit: 128) -> date + * + * Parses the given representation of date and time, and creates a + * date object. This method does not function as a validator. +@@ -4373,13 +4402,18 @@ + * Date.parse('2001-02-03') #=> # + * Date.parse('20010203') #=> # + * Date.parse('3rd Feb 2001') #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + date_s_parse(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, comp, sg; ++ VALUE str, comp, sg, opt; + +- rb_scan_args(argc, argv, "03", &str, &comp, &sg); ++ rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -4391,11 +4425,12 @@ + } + + { +- VALUE argv2[2], hash; +- +- argv2[0] = str; +- argv2[1] = comp; +- hash = date_s__parse(2, argv2, klass); ++ int argc2 = 2; ++ VALUE argv2[3]; ++ argv2[0] = str; ++ argv2[1] = comp; ++ if (!NIL_P(opt)) argv2[argc2++] = opt; ++ VALUE hash = date_s__parse(argc2, argv2, klass); + return d_new_by_frags(klass, hash, sg); + } + } +@@ -4409,19 +4444,28 @@ + + /* + * call-seq: +- * Date._iso8601(string) -> hash ++ * Date._iso8601(string, limit: 128) -> hash + * + * Returns a hash of parsed elements. ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE +-date_s__iso8601(VALUE klass, VALUE str) ++date_s__iso8601(int argc, VALUE *argv, VALUE klass) + { ++ VALUE str, opt; ++ ++ rb_scan_args(argc, argv, "1:", &str, &opt); ++ check_limit(str, opt); ++ + return date__iso8601(str); + } + + /* + * call-seq: +- * Date.iso8601(string='-4712-01-01'[, start=Date::ITALY]) -> date ++ * Date.iso8601(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date + * + * Creates a new Date object by parsing from a string according to + * some typical ISO 8601 formats. +@@ -4429,13 +4473,18 @@ + * Date.iso8601('2001-02-03') #=> # + * Date.iso8601('20010203') #=> # + * Date.iso8601('2001-W05-6') #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + date_s_iso8601(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -4445,38 +4494,56 @@ + } + + { +- VALUE hash = date_s__iso8601(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ if (!NIL_P(opt)) argv2[argc2++] = opt; ++ VALUE hash = date_s__iso8601(argc2, argv2, klass); + return d_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * Date._rfc3339(string) -> hash ++ * Date._rfc3339(string, limit: 128) -> hash + * + * Returns a hash of parsed elements. ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE +-date_s__rfc3339(VALUE klass, VALUE str) ++date_s__rfc3339(int argc, VALUE *argv, VALUE klass) + { ++ VALUE str, opt; ++ ++ rb_scan_args(argc, argv, "1:", &str, &opt); ++ check_limit(str, opt); ++ + return date__rfc3339(str); + } + + /* + * call-seq: +- * Date.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> date ++ * Date.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> date + * + * Creates a new Date object by parsing from a string according to + * some typical RFC 3339 formats. + * + * Date.rfc3339('2001-02-03T04:05:06+07:00') #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + date_s_rfc3339(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -4486,38 +4553,56 @@ + } + + { +- VALUE hash = date_s__rfc3339(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ if (!NIL_P(opt)) argv2[argc2++] = opt; ++ VALUE hash = date_s__rfc3339(argc2, argv2, klass); + return d_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * Date._xmlschema(string) -> hash ++ * Date._xmlschema(string, limit: 128) -> hash + * + * Returns a hash of parsed elements. ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE +-date_s__xmlschema(VALUE klass, VALUE str) ++date_s__xmlschema(int argc, VALUE *argv, VALUE klass) + { ++ VALUE str, opt; ++ ++ rb_scan_args(argc, argv, "1:", &str, &opt); ++ check_limit(str, opt); ++ + return date__xmlschema(str); + } + + /* + * call-seq: +- * Date.xmlschema(string='-4712-01-01'[, start=Date::ITALY]) -> date ++ * Date.xmlschema(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date + * + * Creates a new Date object by parsing from a string according to + * some typical XML Schema formats. + * + * Date.xmlschema('2001-02-03') #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + date_s_xmlschema(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -4527,41 +4612,58 @@ + } + + { +- VALUE hash = date_s__xmlschema(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ if (!NIL_P(opt)) argv2[argc2++] = opt; ++ VALUE hash = date_s__xmlschema(argc2, argv2, klass); + return d_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * Date._rfc2822(string) -> hash +- * Date._rfc822(string) -> hash ++ * Date._rfc2822(string, limit: 128) -> hash ++ * Date._rfc822(string, limit: 128) -> hash + * + * Returns a hash of parsed elements. ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE +-date_s__rfc2822(VALUE klass, VALUE str) ++date_s__rfc2822(int argc, VALUE *argv, VALUE klass) + { ++ VALUE str, opt; ++ ++ rb_scan_args(argc, argv, "1:", &str, &opt); ++ check_limit(str, opt); ++ + return date__rfc2822(str); + } + + /* + * call-seq: +- * Date.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> date +- * Date.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> date ++ * Date.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> date ++ * Date.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> date + * + * Creates a new Date object by parsing from a string according to + * some typical RFC 2822 formats. + * + * Date.rfc2822('Sat, 3 Feb 2001 00:00:00 +0000') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + date_s_rfc2822(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + + switch (argc) { + case 0: +@@ -4571,39 +4673,56 @@ + } + + { +- VALUE hash = date_s__rfc2822(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ if (!NIL_P(opt)) argv2[argc2++] = opt; ++ VALUE hash = date_s__rfc2822(argc2, argv2, klass); + return d_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * Date._httpdate(string) -> hash ++ * Date._httpdate(string, limit: 128) -> hash + * + * Returns a hash of parsed elements. ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE +-date_s__httpdate(VALUE klass, VALUE str) ++date_s__httpdate(int argc, VALUE *argv, VALUE klass) + { ++ VALUE str, opt; ++ ++ rb_scan_args(argc, argv, "1:", &str, &opt); ++ check_limit(str, opt); ++ + return date__httpdate(str); + } + + /* + * call-seq: +- * Date.httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY]) -> date ++ * Date.httpdate(string='Mon, 01 Jan -4712 00:00:00 GMT'[, start=Date::ITALY], limit: 128) -> date + * + * Creates a new Date object by parsing from a string according to + * some RFC 2616 format. + * + * Date.httpdate('Sat, 03 Feb 2001 00:00:00 GMT') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + date_s_httpdate(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); + + switch (argc) { + case 0: +@@ -4613,26 +4732,39 @@ + } + + { +- VALUE hash = date_s__httpdate(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ if (!NIL_P(opt)) argv2[argc2++] = opt; ++ VALUE hash = date_s__httpdate(argc2, argv2, klass); + return d_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * Date._jisx0301(string) -> hash ++ * Date._jisx0301(string, limit: 128) -> hash + * + * Returns a hash of parsed elements. ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE +-date_s__jisx0301(VALUE klass, VALUE str) ++date_s__jisx0301(int argc, VALUE *argv, VALUE klass) + { ++ VALUE str, opt; ++ ++ rb_scan_args(argc, argv, "1:", &str, &opt); ++ check_limit(str, opt); ++ + return date__jisx0301(str); + } + + /* + * call-seq: +- * Date.jisx0301(string='-4712-01-01'[, start=Date::ITALY]) -> date ++ * Date.jisx0301(string='-4712-01-01'[, start=Date::ITALY], limit: 128) -> date + * + * Creates a new Date object by parsing from a string according to + * some typical JIS X 0301 formats. +@@ -4642,13 +4774,18 @@ + * For no-era year, legacy format, Heisei is assumed. + * + * Date.jisx0301('13.02.03') #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + date_s_jisx0301(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -4658,7 +4795,11 @@ + } + + { +- VALUE hash = date_s__jisx0301(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ if (!NIL_P(opt)) argv2[argc2++] = opt; ++ VALUE hash = date_s__jisx0301(argc2, argv2, klass); + return d_new_by_frags(klass, hash, sg); + } + } +@@ -7994,7 +8135,7 @@ + + /* + * call-seq: +- * DateTime.parse(string='-4712-01-01T00:00:00+00:00'[, comp=true[, start=Date::ITALY]]) -> datetime ++ * DateTime.parse(string='-4712-01-01T00:00:00+00:00'[, comp=true[, start=Date::ITALY]], limit: 128) -> datetime + * + * Parses the given representation of date and time, and creates a + * DateTime object. This method does not function as a validator. +@@ -8008,13 +8149,18 @@ + * #=> # + * DateTime.parse('3rd Feb 2001 04:05:06 PM') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + datetime_s_parse(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, comp, sg; ++ VALUE str, comp, sg, opt; + +- rb_scan_args(argc, argv, "03", &str, &comp, &sg); ++ rb_scan_args(argc, argv, "03:", &str, &comp, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -8026,18 +8172,20 @@ + } + + { +- VALUE argv2[2], hash; +- +- argv2[0] = str; +- argv2[1] = comp; +- hash = date_s__parse(2, argv2, klass); ++ int argc2 = 2; ++ VALUE argv2[3]; ++ argv2[0] = str; ++ argv2[1] = comp; ++ argv2[2] = opt; ++ if (!NIL_P(opt)) argc2++; ++ VALUE hash = date_s__parse(argc2, argv2, klass); + return dt_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * DateTime.iso8601(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime ++ * DateTime.iso8601(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime + * + * Creates a new DateTime object by parsing from a string according to + * some typical ISO 8601 formats. +@@ -8048,13 +8196,18 @@ + * #=> # + * DateTime.iso8601('2001-W05-6T04:05:06+07:00') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + datetime_s_iso8601(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -8064,27 +8217,37 @@ + } + + { +- VALUE hash = date_s__iso8601(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ argv2[1] = opt; ++ if (!NIL_P(opt)) argc2--; ++ VALUE hash = date_s__iso8601(argc2, argv2, klass); + return dt_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * DateTime.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime ++ * DateTime.rfc3339(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime + * + * Creates a new DateTime object by parsing from a string according to + * some typical RFC 3339 formats. + * + * DateTime.rfc3339('2001-02-03T04:05:06+07:00') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + datetime_s_rfc3339(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -8094,27 +8257,37 @@ + } + + { +- VALUE hash = date_s__rfc3339(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ argv2[1] = opt; ++ if (!NIL_P(opt)) argc2++; ++ VALUE hash = date_s__rfc3339(argc2, argv2, klass); + return dt_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * DateTime.xmlschema(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime ++ * DateTime.xmlschema(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime + * + * Creates a new DateTime object by parsing from a string according to + * some typical XML Schema formats. + * + * DateTime.xmlschema('2001-02-03T04:05:06+07:00') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + datetime_s_xmlschema(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -8124,28 +8297,38 @@ + } + + { +- VALUE hash = date_s__xmlschema(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ argv2[1] = opt; ++ if (!NIL_P(opt)) argc2++; ++ VALUE hash = date_s__xmlschema(argc2, argv2, klass); + return dt_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * DateTime.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> datetime +- * DateTime.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY]) -> datetime ++ * DateTime.rfc2822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> datetime ++ * DateTime.rfc822(string='Mon, 1 Jan -4712 00:00:00 +0000'[, start=Date::ITALY], limit: 128) -> datetime + * + * Creates a new DateTime object by parsing from a string according to + * some typical RFC 2822 formats. + * + * DateTime.rfc2822('Sat, 3 Feb 2001 04:05:06 +0700') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + datetime_s_rfc2822(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -8155,7 +8338,12 @@ + } + + { +- VALUE hash = date_s__rfc2822(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ argv2[1] = opt; ++ if (!NIL_P(opt)) argc2++; ++ VALUE hash = date_s__rfc2822(argc2, argv2, klass); + return dt_new_by_frags(klass, hash, sg); + } + } +@@ -8169,13 +8357,18 @@ + * + * DateTime.httpdate('Sat, 03 Feb 2001 04:05:06 GMT') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + datetime_s_httpdate(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -8185,14 +8378,19 @@ + } + + { +- VALUE hash = date_s__httpdate(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ argv2[1] = opt; ++ if (!NIL_P(opt)) argc2++; ++ VALUE hash = date_s__httpdate(argc2, argv2, klass); + return dt_new_by_frags(klass, hash, sg); + } + } + + /* + * call-seq: +- * DateTime.jisx0301(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY]) -> datetime ++ * DateTime.jisx0301(string='-4712-01-01T00:00:00+00:00'[, start=Date::ITALY], limit: 128) -> datetime + * + * Creates a new DateTime object by parsing from a string according to + * some typical JIS X 0301 formats. +@@ -8204,13 +8402,18 @@ + * + * DateTime.jisx0301('13.02.03T04:05:06+07:00') + * #=> # ++ * ++ * Raise an ArgumentError when the string length is longer than _limit_. ++ * You can stop this check by passing `limit: nil`, but note that ++ * it may take a long time to parse. + */ + static VALUE + datetime_s_jisx0301(int argc, VALUE *argv, VALUE klass) + { +- VALUE str, sg; ++ VALUE str, sg, opt; + +- rb_scan_args(argc, argv, "02", &str, &sg); ++ rb_scan_args(argc, argv, "02:", &str, &sg, &opt); ++ if (!NIL_P(opt)) argc--; + + switch (argc) { + case 0: +@@ -8220,7 +8423,12 @@ + } + + { +- VALUE hash = date_s__jisx0301(klass, str); ++ int argc2 = 1; ++ VALUE argv2[2]; ++ argv2[0] = str; ++ argv2[1] = opt; ++ if (!NIL_P(opt)) argc2++; ++ VALUE hash = date_s__jisx0301(argc2, argv2, klass); + return dt_new_by_frags(klass, hash, sg); + } + } +@@ -9379,19 +9587,19 @@ + rb_define_singleton_method(cDate, "strptime", date_s_strptime, -1); + rb_define_singleton_method(cDate, "_parse", date_s__parse, -1); + rb_define_singleton_method(cDate, "parse", date_s_parse, -1); +- rb_define_singleton_method(cDate, "_iso8601", date_s__iso8601, 1); ++ rb_define_singleton_method(cDate, "_iso8601", date_s__iso8601, -1); + rb_define_singleton_method(cDate, "iso8601", date_s_iso8601, -1); +- rb_define_singleton_method(cDate, "_rfc3339", date_s__rfc3339, 1); ++ rb_define_singleton_method(cDate, "_rfc3339", date_s__rfc3339, -1); + rb_define_singleton_method(cDate, "rfc3339", date_s_rfc3339, -1); +- rb_define_singleton_method(cDate, "_xmlschema", date_s__xmlschema, 1); ++ rb_define_singleton_method(cDate, "_xmlschema", date_s__xmlschema, -1); + rb_define_singleton_method(cDate, "xmlschema", date_s_xmlschema, -1); +- rb_define_singleton_method(cDate, "_rfc2822", date_s__rfc2822, 1); +- rb_define_singleton_method(cDate, "_rfc822", date_s__rfc2822, 1); ++ rb_define_singleton_method(cDate, "_rfc2822", date_s__rfc2822, -1); ++ rb_define_singleton_method(cDate, "_rfc822", date_s__rfc2822, -1); + rb_define_singleton_method(cDate, "rfc2822", date_s_rfc2822, -1); + rb_define_singleton_method(cDate, "rfc822", date_s_rfc2822, -1); +- rb_define_singleton_method(cDate, "_httpdate", date_s__httpdate, 1); ++ rb_define_singleton_method(cDate, "_httpdate", date_s__httpdate, -1); + rb_define_singleton_method(cDate, "httpdate", date_s_httpdate, -1); +- rb_define_singleton_method(cDate, "_jisx0301", date_s__jisx0301, 1); ++ rb_define_singleton_method(cDate, "_jisx0301", date_s__jisx0301, -1); + rb_define_singleton_method(cDate, "jisx0301", date_s_jisx0301, -1); + + rb_define_method(cDate, "initialize", date_initialize, -1); +--- a/test/date/test_date_parse.rb ++++ b/test/date/test_date_parse.rb +@@ -1,6 +1,7 @@ + # frozen_string_literal: true + require 'test/unit' + require 'date' ++require 'timeout' + + class TestDateParse < Test::Unit::TestCase + +@@ -1228,4 +1229,32 @@ + assert_equal(s0, s) + end + ++ def test_length_limit ++ assert_raise(ArgumentError) { Date._parse("1" * 1000) } ++ assert_raise(ArgumentError) { Date._iso8601("1" * 1000) } ++ assert_raise(ArgumentError) { Date._rfc3339("1" * 1000) } ++ assert_raise(ArgumentError) { Date._xmlschema("1" * 1000) } ++ assert_raise(ArgumentError) { Date._rfc2822("1" * 1000) } ++ assert_raise(ArgumentError) { Date._rfc822("1" * 1000) } ++ assert_raise(ArgumentError) { Date._jisx0301("1" * 1000) } ++ ++ assert_raise(ArgumentError) { Date.parse("1" * 1000) } ++ assert_raise(ArgumentError) { Date.iso8601("1" * 1000) } ++ assert_raise(ArgumentError) { Date.rfc3339("1" * 1000) } ++ assert_raise(ArgumentError) { Date.xmlschema("1" * 1000) } ++ assert_raise(ArgumentError) { Date.rfc2822("1" * 1000) } ++ assert_raise(ArgumentError) { Date.rfc822("1" * 1000) } ++ assert_raise(ArgumentError) { Date.jisx0301("1" * 1000) } ++ ++ assert_raise(ArgumentError) { DateTime.parse("1" * 1000) } ++ assert_raise(ArgumentError) { DateTime.iso8601("1" * 1000) } ++ assert_raise(ArgumentError) { DateTime.rfc3339("1" * 1000) } ++ assert_raise(ArgumentError) { DateTime.xmlschema("1" * 1000) } ++ assert_raise(ArgumentError) { DateTime.rfc2822("1" * 1000) } ++ assert_raise(ArgumentError) { DateTime.rfc822("1" * 1000) } ++ assert_raise(ArgumentError) { DateTime.jisx0301("1" * 1000) } ++ ++ assert_raise(ArgumentError) { Date._parse("Jan " + "9" * 1000000) } ++ assert_raise(Timeout::Error) { Timeout.timeout(1) { Date._parse("Jan " + "9" * 1000000, limit: nil) } } ++ end + end diff --git a/ruby/CVE-2021-41817-2.patch b/ruby/CVE-2021-41817-2.patch new file mode 100644 index 0000000..0f1670a --- /dev/null +++ b/ruby/CVE-2021-41817-2.patch @@ -0,0 +1,91 @@ +From 8f2d7a0c7e52cea8333824bd527822e5449ed83d Mon Sep 17 00:00:00 2001 +From: Jean Boussier +Date: Mon, 15 Nov 2021 11:37:40 +0100 +Subject: [PATCH] `Date._(nil)` should return an empty Hash + +Fix: https://github.com/ruby/date/issues/39 + +This is how versions previous to 3.2.1 behaved and Active Support +currently rely on this behavior. + +https://github.com/rails/rails/blob/90357af08048ef5076730505f6e7b14a81f33d0c/activesupport/lib/active_support/values/time_zone.rb#L383-L384 + +Any Rails application upgrading to date `3.2.1` might run into unexpected errors. +--- + ext/date/date_core.c | 2 ++ + test/date/test_date_parse.rb | 18 ++++++++++++++++++ + 2 files changed, 20 insertions(+) + +--- a/ext/date/date_core.c ++++ b/ext/date/date_core.c +@@ -4335,6 +4335,8 @@ + static void + check_limit(VALUE str, VALUE opt) + { ++ if (NIL_P(str)) return; ++ + StringValue(str); + size_t slen = RSTRING_LEN(str); + size_t limit = get_limit(opt); +--- a/test/date/test_date_parse.rb ++++ b/test/date/test_date_parse.rb +@@ -848,6 +848,9 @@ + + h = Date._iso8601('') + assert_equal({}, h) ++ ++ h = Date._iso8601(nil) ++ assert_equal({}, h) + end + + def test__rfc3339 +@@ -863,6 +866,9 @@ + + h = Date._rfc3339('') + assert_equal({}, h) ++ ++ h = Date._rfc3339(nil) ++ assert_equal({}, h) + end + + def test__xmlschema +@@ -945,6 +951,9 @@ + + h = Date._xmlschema('') + assert_equal({}, h) ++ ++ h = Date._xmlschema(nil) ++ assert_equal({}, h) + end + + def test__rfc2822 +@@ -977,6 +986,9 @@ + + h = Date._rfc2822('') + assert_equal({}, h) ++ ++ h = Date._rfc2822(nil) ++ assert_equal({}, h) + end + + def test__httpdate +@@ -997,6 +1009,9 @@ + + h = Date._httpdate('') + assert_equal({}, h) ++ ++ h = Date._httpdate(nil) ++ assert_equal({}, h) + end + + def test__jisx0301 +@@ -1073,6 +1088,9 @@ + + h = Date._jisx0301('') + assert_equal({}, h) ++ ++ h = Date._jisx0301(nil) ++ assert_equal({}, h) + end + + def test_iso8601 diff --git a/ruby/CVE-2021-41817-3.patch b/ruby/CVE-2021-41817-3.patch new file mode 100644 index 0000000..f47b0b7 --- /dev/null +++ b/ruby/CVE-2021-41817-3.patch @@ -0,0 +1,88 @@ +From 376c65942bd1d81803f14d37351737df60ec4664 Mon Sep 17 00:00:00 2001 +From: Jean Boussier +Date: Tue, 16 Nov 2021 14:03:42 +0100 +Subject: [PATCH] check_limit: also handle symbols + +--- + ext/date/date_core.c | 1 + + test/date/test_date_parse.rb | 24 ++++++++++++++++++++++++ + 2 files changed, 25 insertions(+) + +--- a/ext/date/date_core.c ++++ b/ext/date/date_core.c +@@ -4336,6 +4336,7 @@ + check_limit(VALUE str, VALUE opt) + { + if (NIL_P(str)) return; ++ if (SYMBOL_P(str)) str = rb_sym2str(str); + + StringValue(str); + size_t slen = RSTRING_LEN(str); +--- a/test/date/test_date_parse.rb ++++ b/test/date/test_date_parse.rb +@@ -851,6 +851,10 @@ + + h = Date._iso8601(nil) + assert_equal({}, h) ++ ++ h = Date._iso8601('01-02-03T04:05:06Z'.to_sym) ++ assert_equal([2001, 2, 3, 4, 5, 6, 0], ++ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + end + + def test__rfc3339 +@@ -869,6 +873,10 @@ + + h = Date._rfc3339(nil) + assert_equal({}, h) ++ ++ h = Date._rfc3339('2001-02-03T04:05:06Z'.to_sym) ++ assert_equal([2001, 2, 3, 4, 5, 6, 0], ++ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + end + + def test__xmlschema +@@ -954,6 +962,10 @@ + + h = Date._xmlschema(nil) + assert_equal({}, h) ++ ++ h = Date._xmlschema('2001-02-03'.to_sym) ++ assert_equal([2001, 2, 3, nil, nil, nil, nil], ++ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + end + + def test__rfc2822 +@@ -989,6 +1001,10 @@ + + h = Date._rfc2822(nil) + assert_equal({}, h) ++ ++ h = Date._rfc2822('Sat, 3 Feb 2001 04:05:06 UT'.to_sym) ++ assert_equal([2001, 2, 3, 4, 5, 6, 0], ++ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + end + + def test__httpdate +@@ -1012,6 +1028,10 @@ + + h = Date._httpdate(nil) + assert_equal({}, h) ++ ++ h = Date._httpdate('Sat, 03 Feb 2001 04:05:06 GMT'.to_sym) ++ assert_equal([2001, 2, 3, 4, 5, 6, 0], ++ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + end + + def test__jisx0301 +@@ -1091,6 +1111,10 @@ + + h = Date._jisx0301(nil) + assert_equal({}, h) ++ ++ h = Date._jisx0301('H13.02.03T04:05:06.07+0100'.to_sym) ++ assert_equal([2001, 2, 3, 4, 5, 6, 3600], ++ h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + end + + def test_iso8601 diff --git a/ruby/PKGBUILD b/ruby/PKGBUILD new file mode 100644 index 0000000..8402590 --- /dev/null +++ b/ruby/PKGBUILD @@ -0,0 +1,100 @@ +# Maintainer: Jesus E. + +pkgname=ruby +pkgver=2.7.2 +_jsonver=2.3.0 +pkgrel=5 +pkgdesc="An object-oriented language for quick and easy programming" +arch=(i686 x86_64) +url='https://www.ruby-lang.org/en/' +license=('Simplified-BSD') +depends=('libxcrypt' 'gdbm' 'libressl' 'libffi' 'libyaml' 'gmp' 'zlib') +makedepends=('doxygen' 'graphviz' 'ttf-dejavu' 'tk') +optdepends=('tk: for Ruby/TK') +options=(!emptydirs) +provides=(rubygems rake) +conflicts=(rake) +backup=(etc/gemrc) +install=$pkgname.install +mksource=(https://cache.ruby-lang.org/pub/ruby/${pkgver:0:3}/ruby-${pkgver}.tar.xz + https://repo.hyperbola.info:50000/sources/ruby-libre/json_pure-${_jsonver}-gem.tar.gz) +source=(https://repo.hyperbola.info:50000/sources/ruby-libre/ruby-libre-${pkgver}.tar.xz{,.sig} + patch-ext_openssl_extconf_rb.patch + patch-ext_openssl_openssl_missing_h.patch + remove-nonfree-ruby-references.patch + CVE-2021-41816.patch + CVE-2021-41817-1.patch + CVE-2021-41817-2.patch + CVE-2021-41817-3.patch + gemrc) +mksha512sums=('7972278b096aa768c7adf2befd26003e18781a29ca317640317d30d93d6e963ded197724c8e2f1dfe1e838c5647176d414a74732a62e931fb50d6f2e0f777349' + 'eeb6111f18b5cf1acafa6c532be0f58750a2976462e05cc6262baf2f3615259e4ce2ccab115b8dd2c6d37d4ecc9b23bc911efd8823c0d608cb90297a4e4a1ace') +sha512sums=('4775ccc2c1bc74ba5fee4e5a904ee2754809b14e36673389f1c6eea7b2955ef8c3ccd374681e845e2e99457a13c742e3b48142a28a1b8d25cd0f571d55be7b45' + 'SKIP' + 'ec14f367d8357409e1c5660c76758c596dac6499aa0cc79b13d36cb525d69bd708f498eb5caba098e24e4913f36d3dc2f7b36ba6410418feab7a71f920ab174a' + 'd4cf308971976c846391f84f822c12e1e005f00c6868e0a1901e82732ff85219e8c1251b56f0a8007700e97a6cd29f372ca444fd6a7aac9dafc909309e0f70b8' + '0fad188d5aecbc633418d6c563da1a208dbeaf8f9398014b42dce23be697ddfa6a9b1214bcb7701118b4878a2a0c234b722d4175efe56bda74da0685d1d89794' + '5bb4421e36ba0888076cd2b7ff577a417e5bf08de8ca13b1030befce8435057ec330f22e62d78ed13445378db75d19bd2356db4ff061c8f2f65c1a2cb07fe23a' + 'd44cd0d66e09c058256e76f5f440e73de81098f250d566cf69ed7a50a3ccea79c837f1fddad25df465918a03d2f6d3b722676ffe1efa1bd77afc8b1234438fb7' + 'b3b6e81e21b37689f23c048569ffb70c524a206f9e6c28f0bf815d2f02abb97200e37fd6a8b8d91ac9fb2a87aae158d8aca461a1c2c87ea4e90ff97b9af6eb21' + '158e0fdd44e53b5416dc70775c6ae4f6b5769459e349393e64f3b3e6540e6737a176ee8d58d24de01c0a72d8e30b89476db5798582a00717af8e8e3990e133dd' + '8cafd14d414ee3c16aa94f79072bc6c100262f925dc1300e785846c3fabbbbffc1356b8e2223af5684e3340c55032d41231179ffa948bb12e01dbae0f4131911') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + rm -rv ruby-${pkgver}/ext/json + rm -rv ruby-${pkgver}/test/json + cp json_pure-2.3.0.gem ruby-${pkgver}/ +} + +prepare() { + cd ${srcdir}/ruby-${pkgver} + + install -D -m644 json_pure-${_jsonver}.gem gems + + patch -Np1 -i ${srcdir}/remove-nonfree-ruby-references.patch + + # add LibreSSL 2.7 compatibility patch + patch -Np0 -i ${srcdir}/patch-ext_openssl_extconf_rb.patch + patch -Np0 -i ${srcdir}/patch-ext_openssl_openssl_missing_h.patch + + # CVE-2021-41816 + patch -Np1 -i ${srcdir}/CVE-2021-41816.patch + + # CVE-2021-41817 + patch -Np1 -i ${srcdir}/CVE-2021-41817-1.patch + patch -Np1 -i ${srcdir}/CVE-2021-41817-2.patch + patch -Np1 -i ${srcdir}/CVE-2021-41817-3.patch + + # extract the gem. If it isn't extract like the other bundled gems, + # the gem dir will be created with u-w permissions for some reason. + install -d -m 755 gems/json_pure-${_jsonver} + cd gems/json_pure-${_jsonver} + bsdtar xqOf ../json_pure-${_jsonver}.gem data.tar.gz | bsdtar xvzf - +} + +build() { + cd ${srcdir}/ruby-${pkgver} + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --sharedstatedir=/var/lib \ + --enable-shared \ + --disable-rpath \ + --with-dbm-type=gdbm_compat + + make +} + +package() { + cd ${srcdir}/ruby-${pkgver} + + make DESTDIR="${pkgdir}" install-nodoc + make DESTDIR="${pkgdir}" install-doc install-capi + + install -D -m644 ${srcdir}/gemrc "${pkgdir}/etc/gemrc" + + install -D -m644 BSDL "${pkgdir}/usr/share/licenses/ruby/BSDL" +} diff --git a/ruby/gemrc b/ruby/gemrc new file mode 100644 index 0000000..6516311 --- /dev/null +++ b/ruby/gemrc @@ -0,0 +1,5 @@ +# Read about the gemrc format at http://guides.rubygems.org/command-reference/#gem-environment + +# --user-install is used to install to $HOME/.gem/ by default since we want to separate +# pacman installed gems and gem installed gems +gem: --user-install diff --git a/ruby/patch-ext_openssl_extconf_rb.patch b/ruby/patch-ext_openssl_extconf_rb.patch new file mode 100644 index 0000000..d70ba51 --- /dev/null +++ b/ruby/patch-ext_openssl_extconf_rb.patch @@ -0,0 +1,13 @@ +$OpenBSD: patch-ext_openssl_extconf_rb,v 1.1 2018/02/23 09:54:25 sthen Exp $ + +Index: ext/openssl/extconf.rb +--- ext/openssl/extconf.rb.orig ++++ ext/openssl/extconf.rb +@@ -134,6 +134,7 @@ have_func("HMAC_CTX_free") + OpenSSL.check_func("RAND_pseudo_bytes", "openssl/rand.h") # deprecated + have_func("X509_STORE_get_ex_data") + have_func("X509_STORE_set_ex_data") ++have_func("X509_STORE_get_ex_new_index") + have_func("X509_CRL_get0_signature") + have_func("X509_REQ_get0_signature") + have_func("X509_REVOKED_get0_serialNumber") diff --git a/ruby/patch-ext_openssl_openssl_missing_h.patch b/ruby/patch-ext_openssl_openssl_missing_h.patch new file mode 100644 index 0000000..a06760c --- /dev/null +++ b/ruby/patch-ext_openssl_openssl_missing_h.patch @@ -0,0 +1,31 @@ +$OpenBSD: patch-ext_openssl_openssl_missing_h,v 1.4 2018/02/23 09:54:25 sthen Exp $ + +Index: ext/openssl/openssl_missing.h +--- ext/openssl/openssl_missing.h.orig ++++ ext/openssl/openssl_missing.h +@@ -72,6 +72,9 @@ void ossl_HMAC_CTX_free(HMAC_CTX *); + #if !defined(HAVE_X509_STORE_SET_EX_DATA) + # define X509_STORE_set_ex_data(x, idx, data) \ + CRYPTO_set_ex_data(&(x)->ex_data, (idx), (data)) ++#endif ++ ++#if !defined(HAVE_X509_STORE_GET_EX_NEW_INDEX) + # define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, (l), (p), \ + (newf), (dupf), (freef)) +@@ -145,6 +148,7 @@ void ossl_X509_REQ_get0_signature(const X509_REQ *, co + #endif + + #if !defined(HAVE_OPAQUE_OPENSSL) ++#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL + #define IMPL_PKEY_GETTER(_type, _name) \ + static inline _type *EVP_PKEY_get0_##_type(EVP_PKEY *pkey) { \ + return pkey->pkey._name; } +@@ -196,6 +200,7 @@ IMPL_PKEY_GETTER(EC_KEY, ec) + #undef IMPL_PKEY_GETTER + #undef IMPL_KEY_ACCESSOR2 + #undef IMPL_KEY_ACCESSOR3 ++#endif + #endif /* HAVE_OPAQUE_OPENSSL */ + + #if !defined(EVP_CTRL_AEAD_GET_TAG) diff --git a/ruby/remove-nonfree-ruby-references.patch b/ruby/remove-nonfree-ruby-references.patch new file mode 100644 index 0000000..b55b5aa --- /dev/null +++ b/ruby/remove-nonfree-ruby-references.patch @@ -0,0 +1,78 @@ +diff --git a/common.mk b/common.mk +index fd14ab6..28f2bcf 100644 +--- a/common.mk ++++ b/common.mk +@@ -36,7 +36,7 @@ UNICODE_DATA_HEADERS = \ + RUBY_RELEASE_DATE = $(RUBY_RELEASE_YEAR)-$(RUBY_RELEASE_MONTH)-$(RUBY_RELEASE_DAY) + RUBYLIB = $(PATH_SEPARATOR) + RUBYOPT = - +-RUN_OPTS = --disable-gems ++RUN_OPTS = --disable-gems -I$(srcdir)/../json-2.3.0/lib + + GITPULLOPTIONS = --rebase + +@@ -1026,8 +1026,7 @@ srcs-ext: $(EXT_SRCS) + realclean-srcs-ext:: + $(Q)$(RM) $(EXT_SRCS) + +-EXTRA_SRCS = $(srcdir)/ext/json/parser/parser.c \ +- $(srcdir)/ext/date/zonetab.h \ ++EXTRA_SRCS = $(srcdir)/ext/date/zonetab.h \ + $(empty) + + srcs-extra: $(EXTRA_SRCS) +@@ -1140,11 +1139,6 @@ $(srcdir)/ext/ripper/ripper.c: $(srcdir)/ext/ripper/tools/preproc.rb $(srcdir)/p + Q=$(Q) ECHO=$(ECHO) RM="$(RM)" BISON=$(YACC) top_srcdir=../.. srcdir=. VPATH="$${VPATH}" \ + RUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)" + +-$(srcdir)/ext/json/parser/parser.c: $(srcdir)/ext/json/parser/parser.rl $(srcdir)/ext/json/parser/prereq.mk +- $(ECHO) generating $@ +- $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f prereq.mk $(mflags) \ +- Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. BASERUBY="$(BASERUBY)" +- + $(srcdir)/ext/date/zonetab.h: $(srcdir)/ext/date/zonetab.list $(srcdir)/ext/date/prereq.mk + $(ECHO) generating $@ + $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f prereq.mk $(mflags) \ +diff --git a/ext/.document b/ext/.document +index 6a49157..97e5120 100644 +--- a/ext/.document ++++ b/ext/.document +@@ -27,9 +27,6 @@ gdbm/gdbm.c + io/console/console.c + io/nonblock/nonblock.c + io/wait/wait.c +-json/generator/generator.c +-json/lib +-json/parser/parser.c + nkf/lib + nkf/nkf.c + objspace/objspace.c +diff --git a/gems/bundled_gems b/gems/bundled_gems +index ce2dd1b..69ae0ae 100644 +--- a/gems/bundled_gems ++++ b/gems/bundled_gems +@@ -4,3 +4,4 @@ power_assert 1.1.7 https://github.com/k-tsj/power_assert + rake 13.0.1 https://github.com/ruby/rake + test-unit 3.3.4 https://github.com/test-unit/test-unit + xmlrpc 0.3.0 https://github.com/ruby/xmlrpc ++json 2.3.0 https://github.com/flori/json +diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb +index 69f03ae..2011334 100644 +--- a/test/ruby/test_module.rb ++++ b/test/ruby/test_module.rb +@@ -214,7 +214,6 @@ class TestModule < Test::Unit::TestCase + + ancestors = Object.ancestors + mixins = ancestors - [Object, Kernel, BasicObject] +- mixins << JSON::Ext::Generator::GeneratorMethods::String if defined?(JSON::Ext::Generator::GeneratorMethods::String) + assert_equal([Object, Kernel, BasicObject], ancestors - mixins) + assert_equal([String, Comparable, Object, Kernel, BasicObject], String.ancestors - mixins) + end +@@ -467,7 +466,6 @@ class TestModule < Test::Unit::TestCase + assert_equal([Mixin], User.included_modules) + + mixins = Object.included_modules - [Kernel] +- mixins << JSON::Ext::Generator::GeneratorMethods::String if defined?(JSON::Ext::Generator::GeneratorMethods::String) + assert_equal([Kernel], Object.included_modules - mixins) + assert_equal([Comparable, Kernel], String.included_modules - mixins) + end diff --git a/ruby/ruby.install b/ruby/ruby.install new file mode 100644 index 0000000..ce78e96 --- /dev/null +++ b/ruby/ruby.install @@ -0,0 +1,22 @@ +#!/bin/sh + +print_gem_default_target() { + echo 'The default location of gem installs is $HOME/.gem/ruby' + echo 'Add the following line to your PATH if you plan to install using gem' + echo '$(ruby -rubygems -e "puts Gem.user_dir")/bin' + echo 'If you want to install to the system wide location, you must either:' + echo 'edit /etc/gemrc or run gem with the --no-user-install flag.' +} + +# arg 1: the new package version +post_install() { + print_gem_default_target +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + if [ "$(vercmp $2 1.9.3_p125-4)" -lt 0 ]; then + print_gem_default_target + fi +} diff --git a/runit-init-scripts/PKGBUILD b/runit-init-scripts/PKGBUILD new file mode 100644 index 0000000..1e879ae --- /dev/null +++ b/runit-init-scripts/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=runit-init-scripts +pkgver=0.2 +pkgrel=2 +pkgdesc='runit init scripts' +arch=(i686 x86_64) +url='https://git.hyperbola.info:50100/software/runit-init-scripts.git' +license=(CC0-1.0) +depends=(procps-ng) +conflicts=(hyperrc) # conflicts with rc.conf +backup=(etc/rc.conf + etc/rc.local + etc/rc.shutdown + etc/sv/agetty-console/conf + etc/sv/agetty-serial/conf + etc/sv/agetty-tty1/conf + etc/sv/agetty-hvc0/conf + etc/sv/agetty-hvsi0/conf) +install=$pkgname.install +source=(https://repo.hyperbola.info:50000/sources/$pkgname/$pkgname-v$pkgver.tar.lz{,.sig}) +sha512sums=('ca059882568c63af7bf7f6e24316fd3a2677139d61c41ac85343ff1155892f17f1779de08c320d62a2722186a5920cf081226c994c6de1cf806318ad1df583c2' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +build() { + cd $pkgname-v$pkgver + make +} + +package() { + cd $pkgname-v$pkgver + make PREFIX=/usr DESTDIR="$pkgdir" install + + # halt and shutdown are used by runit-sysvcompat + for i in halt shutdown; do + mv "${pkgdir}/sbin/$i" "${pkgdir}/sbin/runit-$i" + mv "${pkgdir}/usr/share/man/man8/$i.8" \ + "${pkgdir}/usr/share/man/man8/runit-$i.1" + done + + # poweroff and reboot are used by runit-sysvcompat + for i in poweroff reboot; do + rm "${pkgdir}/sbin/$i" + rm "${pkgdir}/usr/share/man/man8/$i.8" + done + + # license + install -Dm644 legalcode.txt $pkgdir/usr/share/licenses/$pkgname/legalcode.txt +} diff --git a/runit-init-scripts/runit-init-scripts.install b/runit-init-scripts/runit-init-scripts.install new file mode 100644 index 0000000..8ed6092 --- /dev/null +++ b/runit-init-scripts/runit-init-scripts.install @@ -0,0 +1,12 @@ +post_install() { + runit_service_dir="/etc/runit/runsvdir/default" + runit_service_link="/var/service" + + if [ "$(readlink -- "${runit_service_link}")" = "${runit_service_dir}" ]; then + ln -s ${runit_service_dir} ${runit_service_link} + fi +} + +post_upgrade() { + post_install +} diff --git a/runit/30-sysctl.hook b/runit/30-sysctl.hook new file mode 100644 index 0000000..39f2466 --- /dev/null +++ b/runit/30-sysctl.hook @@ -0,0 +1,12 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Target = etc/sysctl.d/*.conf +Target = lib/sysctl.d/*.conf + +[Action] +Description = Applying kernel sysctl settings... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/runit-hook sysctl +NeedsTargets diff --git a/runit/PKGBUILD b/runit/PKGBUILD new file mode 100644 index 0000000..a5960d6 --- /dev/null +++ b/runit/PKGBUILD @@ -0,0 +1,105 @@ +# Maintainer: Jesus E. + +pkgbase=runit +pkgname=(runit runit-sysvcompat) +pkgver=2.1.2 +_debver=$pkgver +_debrel=41 +pkgrel=6 +pkgdesc="A UNIX init scheme with service supervision" +arch=('i686' 'x86_64') +url='http://smarden.org/runit/' +license=('Modified-BSD') +depends=('runit-init-scripts') +makedepends=('quilt') +source=(${pkgbase}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/r/runit/runit_${pkgver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/r/runit/runit_$_debver-$_debrel.debian.tar.xz + runit-hook + runit-install.hook + runit-remove.hook + 30-sysctl.hook + default-directory-for-services.patch) +sha512sums=('a18773ebf1aa22305dd89ed67363165b9fcf86c192b2be4e268d08005dd82d51265160c637abe072f2f2e378c4b315a75bd3d3e602c3e75bdd451a3b0190f8cf' + '913077c52085bdcef3d40d512f662f21c2324ad5e93e5da6c2a3ab41c2d68a277c4d1fc270290d178f0a126a213b3bfd83357b93110de6fb43ceab031b3f04a8' + '81b39ce971c5e1d23a7d6b8da9ae72553682a48a103112741ca78816776692d4db2d296c469acc786ad2eacbd4d149b5320763b35f0f0fa88c489bba08123faa' + '4bdd02170955c07db37f02ba60d6bf3ed8f19f540330ef63db27845314de244bfd56f2e2212d98a1a2d9a9f253fa3bbc99cea47f49eee11f5a5c7e1252be9ef9' + '4438c2cfa2de5ad84d3cd802a63288c43dde08c1f8f42bd92851250303fafc79ce84e1488cac76f86455e428881cf3dc47e2534f8a7e5a07e82f9a5e462c8001' + '2af8331837dd8fcf1af8ed4f97b0c0fab8df8d0eb160ca38a5a1f6f3e7b484385cdc0bb099aa8fc20731903e059d2f30d6490156ccb2fcad9d9a967b954d57c1' + 'bb27a8bdfb5e932de138a473fc998acc2cec0799df2ca1bd02e6b521d64a1bcd5dc338b742437cb875bd1ed92c9e00164551a5f80729e592fdd383c6089d8c61') + +prepare() { + cd admin + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-default-directory-for-services-on-Debian-is-etc-servi.diff || true + + quilt push -av + fi + + # set default service path to /var/service + cd $pkgbase-$pkgver + patch -p1 -i $srcdir/default-directory-for-services.patch +} + +build() { + cd admin/$pkgbase-$pkgver + package/compile +} + +package_runit() { + cd admin/$pkgbase-$pkgver + + # create folders + install -dm755 $pkgdir/sbin + + # commands + install -Dm755 command/* $pkgdir/sbin + + # man pages + install -dm755 $pkgdir/usr/share/man/man8 + install -Dm644 man/* $pkgdir/usr/share/man/man8 + + # alpm hooks + install -Dm755 $srcdir/runit-hook $pkgdir/usr/share/libalpm/scripts/runit-hook + install -Dm644 -t $pkgdir/usr/share/libalpm/hooks $srcdir/*.hook + + # license + install -Dm644 package/COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} + +package_runit-sysvcompat() { + pkgdesc='SysV-style init compatibility for runit' + depends=('runit') + provides=('sysvinit') + conflicts=('sysvinit') + + mkdir -p "${pkgdir}/sbin" + cd "${pkgdir}/sbin" + ln -s runit-init init + for i in halt shutdown; do + ln -s runit-$i $i + done + for i in poweroff reboot; do + ln -s halt $i + done + + mkdir -p "${pkgdir}/usr/share/man/man8" + cd "${pkgdir}/usr/share/man/man8" + ln -s runit.8.gz init.8.gz + for i in halt shutdown; do + ln -s runit-$i.1.gz $i.1.gz + done + for i in poweroff reboot; do + ln -s halt.1.gz $i.1.gz + done + + # license + install -Dm644 "${srcdir}/admin/${pkgbase}-${pkgver}/package/COPYING" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/runit/default-directory-for-services.patch b/runit/default-directory-for-services.patch new file mode 100644 index 0000000..beb66d7 --- /dev/null +++ b/runit/default-directory-for-services.patch @@ -0,0 +1,71 @@ +diff --git a/man/runsv.8 b/man/runsv.8 +index 7c5abfc..53f1b1b 100644 +--- a/man/runsv.8 ++++ b/man/runsv.8 +@@ -157,9 +157,9 @@ This command is ignored if it is given to + .IR service /log/supervise/control. + .P + Example: to send a TERM signal to the socklog-unix service, either do +- # sv term /service/socklog-unix ++ # sv term /var/service/socklog-unix + or +- # printf t >/service/socklog-unix/supervise/control ++ # printf t >/var/service/socklog-unix/supervise/control + .P + .BR printf (1) + usually blocks if no +diff --git a/man/runsvchdir.8 b/man/runsvchdir.8 +index f7f94dc..793d653 100644 +--- a/man/runsvchdir.8 ++++ b/man/runsvchdir.8 +@@ -27,13 +27,13 @@ with a symlink pointing to + .IR dir . + .P + Normally +-.I /service ++.I /var/service + is a symlink to + .IR current , + and + .BR runsvdir (8) + is running +-.IR /service/ . ++.IR /var/service/ . + .SH EXIT CODES + .B runsvchdir + prints an error message and exits 111 on error. +diff --git a/man/sv.8 b/man/sv.8 +index 7ed9852..58f1c07 100644 +--- a/man/sv.8 ++++ b/man/sv.8 +@@ -30,7 +30,7 @@ If + .I service + doesn't start with a dot or slash and doesn't end with a slash, it is + searched in the default services directory +-.IR /service/ , ++.IR /var/service/ , + otherwise relative to the current directory. + .P + .I command +@@ -232,7 +232,7 @@ This option implies + .TP + .B SVDIR + The environment variable $SVDIR overrides the default services directory +-.IR /service/ . ++.IR /var/service/ . + .TP + .B SVWAIT + The environment variable $SVWAIT overrides the default 7 seconds to wait +diff --git a/src/sv.c b/src/sv.c +index 0125795..7c6f6ed 100644 +--- a/src/sv.c ++++ b/src/sv.c +@@ -32,7 +32,7 @@ + char *progname; + char *action; + char *acts; +-char *varservice ="/service/"; ++char *varservice ="/var/service/"; + char **service; + char **servicex; + unsigned int services; diff --git a/runit/runit-hook b/runit/runit-hook new file mode 100644 index 0000000..e1506e7 --- /dev/null +++ b/runit/runit-hook @@ -0,0 +1,44 @@ +#!/bin/sh -e + +runit_live() { + if [ ! -L /var/service ]; then + echo >&2 " Skipped: Current root is not booted." + exit 0 + fi +} + +svc_help(){ + echo " ==> Start/stop/restart a service:" + echo " sv " +} + +svc_add_help(){ + echo " ==> Add a service:" + echo " ln -s /etc/sv/ /var/service" + svc_help +} + +svc_del_help(){ + echo " ==> Remove a service:" + echo " rm /var/service/" + svc_help +} + +each_conf() { + while read -r f; do + "$@" "/$f" + done +} + +op="$1"; shift + +case $op in + sysctl) runit_live; each_conf /sbin/sysctl -q -p ;; + # For use by other packages + reload) runit_live; /usr/bin/sv "$@" reload ;; + add) svc_add_help ;; + del) svc_del_help ;; + *) echo >&2 " Invalid operation '$op'"; exit 1 ;; +esac + +exit 0 diff --git a/runit/runit-install.hook b/runit/runit-install.hook new file mode 100644 index 0000000..fd1318c --- /dev/null +++ b/runit/runit-install.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Target = etc/sv/* + +[Action] +Description = Displaying runit service help ... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/runit-hook add +NeedsTargets diff --git a/runit/runit-remove.hook b/runit/runit-remove.hook new file mode 100644 index 0000000..f03c0b2 --- /dev/null +++ b/runit/runit-remove.hook @@ -0,0 +1,10 @@ +[Trigger] +Type = File +Operation = Remove +Target = etc/sv/* + +[Action] +Description = Displaying runit service help ... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/runit-hook del +NeedsTargets diff --git a/sakura/PKGBUILD b/sakura/PKGBUILD new file mode 100644 index 0000000..e1ff21c --- /dev/null +++ b/sakura/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=sakura +pkgver=3.8.7 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A terminal emulator based on GTK+ and VTE" +arch=('i686' 'x86_64') +url='https://www.pleyades.net/david/projects/sakura' +license=('GPL-2' 'Public-Domain') +depends=('vte' 'libxft') +makedepends=('cmake' 'quilt') +source=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/s/sakura/sakura_${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/s/sakura/sakura_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ec606af0ab808e93366a08ef36199ef7e23677e7aac4765573604230c9ea498a14d6f22983ab7285030e6d10f432b7ad924f33660bce8bc05bd76a2c31c1a76b' + 'f9e5c666c7c69bcb097ecd217aef1b24e38a5f3d3dc24ce394d4859d5c3353152f7cd01c46e00eaa8eacc5ebd5392ef863623e6b5bb9e3f73253b59e710fa548') + +prepare() { + cd "$srcdir/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # set default font size a bit smaller + sed -i 's|#define DEFAULT_FONT "Bitstream Vera Sans Mono 14"|#define DEFAULT_FONT "Bitstream Vera Sans Mono 10"|g' src/sakura.c +} + +build() { + cd "$srcdir/${pkgname}-${pkgver}" + + cmake -DCMAKE_INSTALL_PREFIX=/usr . + make +} + +package() { + cd "$srcdir/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname/" +} diff --git a/samba/PKGBUILD b/samba/PKGBUILD new file mode 100644 index 0000000..3a34448 --- /dev/null +++ b/samba/PKGBUILD @@ -0,0 +1,231 @@ +# Maintainer: Jesus E. + +pkgbase=samba +pkgname=('libwbclient' 'smbclient' 'samba') +pkgver=4.13.13 +_debver=$pkgver +_debrel=1 +pkgrel=2 +arch=(i686 x86_64) +url='https://www.samba.org' +license=('GPL-3') +makedepends=('python' 'docbook-xsl' 'pkg-config' 'libbsd' 'db' 'popt' 'libcups' + 'readline' 'tevent' 'acl' 'libldap' 'libcap' 'ldb' 'krb5' 'gnutls' + 'talloc' 'tdb' 'libaio' 'perl-parse-yapp' 'libnsl' 'libtirpc' + 'rpcsvc-proto' 'jansson' 'waf' 'quilt') +source=(https://us1.samba.org/samba/ftp/stable/${pkgbase}-${pkgver}.tar.gz + https://us1.samba.org/samba/ftp/stable/${pkgbase}-${pkgver}.tar.asc + https://deb.debian.org/debian/pool/main/s/samba/samba_${_debver}+dfsg-${_debrel}~deb11u6.debian.tar.xz + samba.logrotate + samba.conf.d + smb.confd + smb.initd + smbd.run + nmbd.run) +sha512sums=('a3368f896b9e277994129a8ab7959df945f201a742b7cd852ab733160a38032556894a9b80a4a98095b86ca9f3710564a3fd6281af75cca05a019ae6935f6fd8' + 'SKIP' + 'd961f42943272b4543e5fdb8e3a3a1ce6f2ef540c82acfbeb71f593cd76ecac97626d599d09f32d7be4a48d5eab9fda8ed46ee73e2b2c7bd08a0ce31cb41c6f1' + '4b6f1dc466e67a1acb13798e885f89214054ed5ab351b9c36fa52877479aa549601898b41680a4793543fc794c28029deba304306cc5ebc5dfb490e94acb3791' + '4a58e5e73ea99c6cfab58a4c09c68f649c0a1fd0caf97e0aee6819a3749bdf33c4ece4cde13c5119194f05b6918967d2c99818a835b1fd0180518d6761b477cf' + 'cef779ad494fc3ad67c7fafbcb16c7e489706e28f827f78e472f44954340904c6c5eb96ba03c29c474cb85498ff2617f8dee19027aba88e21c1e04c46fa55680' + 'bf1df9608bb00ef4c8304330529072ec78403a1398d98d52004428b8f32637d478fef104e0bc5af4e655f099d457d685cb77f53c0097e9c683abb0eaa579292d' + '65787161c89e543b63dad6d2f1510d2ff94c01106536834bae5db3ba1f48698901275e509db7f2134c71f3dffe11c2832e3293ae25a36dff1ca9df988a20a746' + '57103e41c644becd6fe1ea8de539b1645b140fca7eee6951ee30f468f01b337678855aad7acdaaad46c61b0a3fe3cdad64f570370eaaa88386b9d6d74d8326ce') +validpgpkeys=('81F5E2832BD2545A1897B713AA99442FB680B620') #Samba Distribution Verification Key + +prepare() { + cd samba-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/README_nosmbldap-tools.patch || true + rm -v debian/patches/VERSION.patch || true + rm -v debian/patches/add-so-version-to-private-libraries || true + rm -v debian/patches/smbd.service-Run-update-apparmor-samba-profile-befor.patch || true + + quilt push -av + fi +} + +build() { + # Use samba-pkg as a staging directory for the split packages + # (This is so RPATHS and symlinks are generated correctly via + # make install, but the otherwise unsplit pieces can be split) + _pkgsrc=${srcdir}/samba-pkg + rm -rf ${_pkgsrc} + cd ${srcdir}/samba-${pkgver} + _samba4_idmap_modules=idmap_ad,idmap_rid,idmap_adex,idmap_hash,idmap_tdb2 + _samba4_pdb_modules=pdb_tdbsam,pdb_ldap,pdb_ads,pdb_smbpasswd,pdb_wbc_sam,pdb_samba4 + _samba4_auth_modules=auth_unix,auth_wbc,auth_server,auth_netlogond,auth_script,auth_samba4 + _samba4_removed_modules=!vfs_snapper + cd ${srcdir}/samba-${pkgver} + ./configure --enable-fhs \ + --prefix=/usr \ + --libdir=/usr/lib \ + --localstatedir=/var \ + --with-configdir=/etc/samba \ + --with-lockdir=/var/cache/samba \ + --with-sockets-dir=/var/run/samba \ + --with-piddir=/var/run \ + --with-ads \ + --with-ldap \ + --with-winbind \ + --with-acl-support \ + --without-pam \ + --bundled-libraries=!tdb,!talloc,!pytalloc-util,!tevent,!popt,!ldb,!pyldb-util \ + --with-shared-modules=${_samba4_idmap_modules},${_samba4_pdb_modules},${_samba4_auth_modules},${_samba4_removed_modules} \ + --disable-rpath-install + + make + make DESTDIR="${_pkgsrc}/" install + + # This gets skipped somehow + if [ ! -e ${_pkgsrc}/usr/bin/smbtar ]; then + install -m755 ${srcdir}/samba-${pkgver}/source3/script/smbtar ${_pkgsrc}/usr/bin/ + fi +} + +package_libwbclient() { + pkgdesc="Samba winbind client library" + depends=('glibc' 'libbsd') + # Use samba-pkg as a staging directory for the split packages + # (This is so RPATHS and symlinks are generated correctly via + # make install, but the otherwise unsplit pieces can be split) + _pkgsrc=${srcdir}/samba-pkg + install -d -m755 ${pkgdir}/usr/lib + mv ${_pkgsrc}/usr/lib/libwbclient*.so* ${pkgdir}/usr/lib/ + + install -d -m755 ${pkgdir}/usr/lib/samba + mv ${_pkgsrc}/usr/lib/samba/libwinbind-client*.so* ${pkgdir}/usr/lib/samba/ + mv ${_pkgsrc}/usr/lib/samba/libreplace-samba4.so* ${pkgdir}/usr/lib/samba/ + + install -d -m755 ${pkgdir}/usr/lib/pkgconfig + mv ${_pkgsrc}/usr/lib/pkgconfig/wbclient.pc ${pkgdir}/usr/lib/pkgconfig/ + + install -d -m755 ${pkgdir}/usr/include/samba-4.0 + mv ${_pkgsrc}/usr/include/samba-4.0/wbclient.h ${pkgdir}/usr/include/samba-4.0/ + + install -Dm644 samba-${pkgver}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} + +package_smbclient() { + pkgdesc="Tools to access a server's filespace and printers via SMB" + depends=('popt' 'cifs-utils' 'tdb' "libwbclient>=$pkgver" 'ldb' + 'tevent' 'libgcrypt' 'python' 'talloc' 'readline' 'gnutls' + 'libbsd' 'libldap' 'libcups' 'libnsl' 'jansson') + _smbclient_bins=('smbclient' 'rpcclient' 'smbspool' + 'smbtree' 'smbcacls' 'smbcquotas' 'smbget' 'net' + 'nmblookup' 'smbtar') + # Use samba-pkg as a staging directory for the split packages + # (This is so RPATHS and symlinks are generated correctly via + # make install, but the otherwise unsplit pieces can be split) + _pkgsrc=${srcdir}/samba-pkg + install -d -m755 ${pkgdir}/usr/bin + for bin in ${_smbclient_bins[@]}; do + mv ${_pkgsrc}/usr/bin/${bin} ${pkgdir}/usr/bin/ + done + + # smbclient binaries link to the majority of the samba + # libs, so this is a shortcut instead of resolving the + # whole dependency tree by hand + install -d -m755 ${pkgdir}/usr/lib + for lib in ${_pkgsrc}/usr/lib/lib*.so*; do + mv ${lib} ${pkgdir}/usr/lib/ + done + + install -d -m755 ${pkgdir}/usr/lib/samba + for lib in ${_pkgsrc}/usr/lib/samba/lib*.so*; do + mv ${lib} ${pkgdir}/usr/lib/samba/ + done + + install -d -m755 ${pkgdir}/usr/lib/pkgconfig + mv ${_pkgsrc}/usr/lib/pkgconfig/smbclient.pc ${pkgdir}/usr/lib/pkgconfig/ + mv ${_pkgsrc}/usr/lib/pkgconfig/netapi.pc ${pkgdir}/usr/lib/pkgconfig/ + + mv ${_pkgsrc}/usr/libexec ${pkgdir}/usr + + install -d -m755 ${pkgdir}/usr/share/man/man1 + install -d -m755 ${pkgdir}/usr/share/man/man7 + install -d -m755 ${pkgdir}/usr/share/man/man8 + for bin in ${_smbclient_bins[@]}; do + if [ -e ${_pkgsrc}/usr/share/man/man1/${bin}.1 ]; then + mv ${_pkgsrc}/usr/share/man/man1/${bin}.1 ${pkgdir}/usr/share/man/man1/ + fi + if [ -e ${_pkgsrc}/usr/share/man/man8/${bin}.8 ]; then + mv ${_pkgsrc}/usr/share/man/man8/${bin}.8 ${pkgdir}/usr/share/man/man8/ + fi + done + mv ${_pkgsrc}/usr/share/man/man7/libsmbclient.7 ${pkgdir}/usr/share/man/man7/ + + install -d -m755 ${pkgdir}/usr/include/samba-4.0 + mv ${_pkgsrc}/usr/include/samba-4.0/libsmbclient.h ${pkgdir}/usr/include/samba-4.0/ + mv ${_pkgsrc}/usr/include/samba-4.0/netapi.h ${pkgdir}/usr/include/samba-4.0/ + + mkdir -p ${pkgdir}/usr/libexec/cups/backend + ln -sf /usr/bin/smbspool ${pkgdir}/usr/libexec/cups/backend/smb + + install -Dm644 samba-${pkgver}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} + +package_samba() { + pkgdesc="SMB Fileserver and AD Domain server" + depends=('db' 'popt' 'libcups' 'libcap' 'gnutls' + 'talloc' 'ldb' 'libbsd' 'python' 'iniparser' 'tdb' 'libaio' 'perl-parse-yapp' "smbclient>=$pkgver") + backup=(etc/logrotate.d/samba + etc/conf.d/samba + etc/conf.d/smb) + install=samba.install + # Use samba-pkg as a staging directory for the split packages + # (This is so RPATHS and symlinks are generated correctly via + # make install, but the otherwise unsplit pieces can be split) + _pkgsrc=${srcdir}/samba-pkg + # Everything that libwbclient and smbclient didn't install goes + # into the samba package... + mv ${_pkgsrc}/* ${pkgdir}/ + rmdir ${_pkgsrc} + + install -Dm644 samba-${pkgver}/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING + + # Make admin scripts look in the right place for the samba python module + for script in bin/samba-tool sbin/samba_dnsupdate sbin/samba_kcc \ + sbin/samba_spnupdate sbin/samba_upgradedns + do + sed -i "/^sys\.path\.insert/ a\ +sys.path.insert(0, '/usr/lib/python${_pyver}/site-packages')" \ + ${pkgdir}/usr/${script} + done + + # install OpenRC files + install -Dm644 ${srcdir}/smb.confd ${pkgdir}/etc/conf.d/smb + install -Dm755 ${srcdir}/smb.initd ${pkgdir}/etc/init.d/smb + + # install Runit files + install -Dm755 "$srcdir/smbd.run" "$pkgdir/etc/sv/smbd/run" + install -Dm755 "$srcdir/nmbd.run" "$pkgdir/etc/sv/nmbd/run" + + install -m644 ${srcdir}/samba.conf.d ${pkgdir}/etc/conf.d/samba + + # create config dir + install -d -m755 "${pkgdir}"/etc/samba + + mkdir -p ${pkgdir}/etc/samba/private + chmod 700 ${pkgdir}/etc/samba/private + + install -D -m644 ${srcdir}/samba.logrotate ${pkgdir}/etc/logrotate.d/samba + + # spool directory + install -d -m1777 ${pkgdir}/var/spool/samba + + rm -rf ${pkgdir}/run + rm -rf ${pkgdir}/var/run + rm -rf ${pkgdir}/etc/sysconfig + + # copy ldap example + install -D -m644 ${srcdir}/samba-${pkgver}/examples/LDAP/samba.schema ${pkgdir}/usr/share/doc/samba/examples/LDAP/samba.schema +} diff --git a/samba/nmbd.run b/samba/nmbd.run new file mode 100644 index 0000000..a55ef79 --- /dev/null +++ b/samba/nmbd.run @@ -0,0 +1,10 @@ +#!/bin/sh + +exec 2>&1 + +[ -r ./conf ] && . ./conf + +mkdir -p /run/samba +mkdir -p /run/lock/samba + +exec /usr/sbin/nmbd -F ${OPTS:--S -d1} diff --git a/samba/samba.conf.d b/samba/samba.conf.d new file mode 100644 index 0000000..7607426 --- /dev/null +++ b/samba/samba.conf.d @@ -0,0 +1,18 @@ +## Path: Network/Samba +## Description: Samba process options +## Type: string +## Default: "" +## ServiceRestart: samba +SAMBAOPTIONS="" +## Type: string +## Default: "" +## ServiceRestart: smb +SMBDOPTIONS="" +## Type: string +## Default: "" +## ServiceRestart: nmb +NMBDOPTIONS="" +## Type: string +## Default: "" +## ServiceRestart: winbind +WINBINDOPTIONS="" diff --git a/samba/samba.install b/samba/samba.install new file mode 100644 index 0000000..3435cb4 --- /dev/null +++ b/samba/samba.install @@ -0,0 +1,30 @@ +#!/bin/sh + +post_install() { + echo ">>> Don't forget to write your file in /etc/samba/smb.conf " + echo ">>> for example:" + cat <<- EOF +[example] +path = /home//shared +available = yes +browseable = yes +public = yes +writable = yes +EOF + echo ">>> " + echo ">>> You check using smb:///example in this case" + echo ">>> " + echo ">>> Set password with: smbpasswd -a " + echo ">>> or update password with: smbpasswd " + echo ">>> as root." +} + +post_upgrade() { + if [ "$(vercmp $2 4.0.4)" -lt 0 ]; then + echo "Major upgrade from samba 3.x to 4.x," + echo "please read the Samba4 migration guide:" + echo "http://wiki.samba.org/index.php/Samba4/samba3upgrade/HOWTO" + fi + post_install "$@" +} +# vim:set ts=2 sw=2 et: diff --git a/samba/samba.logrotate b/samba/samba.logrotate new file mode 100644 index 0000000..581f4c3 --- /dev/null +++ b/samba/samba.logrotate @@ -0,0 +1,9 @@ +/var/log/samba/log.smbd /var/log/samba/log.nmbd /var/log/samba/*.log { + notifempty + missingok + sharedscripts + copytruncate + postrotate + /bin/kill -HUP `cat /var/run/samba/*.pid 2>/dev/null` 2>/dev/null || true + endscript +} diff --git a/samba/smb.confd b/samba/smb.confd new file mode 100644 index 0000000..a063549 --- /dev/null +++ b/samba/smb.confd @@ -0,0 +1,38 @@ +# Add "winbind" to the daemon_list if you also want winbind to start. +# Replace "smbd nmbd" by "samba4" if you want the active directory domain controller part or the ntvfs +# file server part or the rpc proxy to start. +# Note that samba4 controls 'smbd' by itself, thus it can't be started manually. You can, however, +# tweak the behaviour of a samba4-controlled smbd by modifying your '/etc/samba/smb.conf' file +# accordingly. +daemon_list="smbd nmbd" + +#---------------------------------------------------------------------------- +# Daemons calls: _ +#---------------------------------------------------------------------------- +my_service_name="smb" +my_service_PRE="unset TMP TMPDIR" +my_service_POST="" + +#---------------------------------------------------------------------------- +# Daemons calls: _ +#---------------------------------------------------------------------------- +smbd_start_options="-D" +smbd_start="start-stop-daemon --start --exec /usr/sbin/smbd -- ${smbd_start_options}" +smbd_stop="start-stop-daemon --stop --exec /usr/sbin/smbd" +smbd_reload="killall -HUP smbd" + +nmbd_start_options="-D" +nmbd_start="start-stop-daemon --start --exec /usr/sbin/nmbd -- ${nmbd_start_options}" +nmbd_stop="start-stop-daemon --stop --exec /usr/sbin/nmbd" +nmbd_reload="killall -HUP nmbd" + +samba4_start_options="" +samba4_start="start-stop-daemon --start --exec /usr/sbin/samba -- ${samba4_start_options}" +samba4_stop="start-stop-daemon --stop --exec /usr/sbin/samba" +samba4_reload="killall -HUP samba" + +winbind_start_options="" +winbind_start="start-stop-daemon --start --exec /usr/sbin/winbindd -- ${winbind_start_options}" +winbind_stop="start-stop-daemon --stop --exec /usr/sbin/winbindd" +winbind_reload="killall -HUP winbindd" + diff --git a/samba/smb.initd b/samba/smb.initd new file mode 100644 index 0000000..d7e181e --- /dev/null +++ b/samba/smb.initd @@ -0,0 +1,56 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License, v2 or later + +extra_started_commands="reload" +piddir="/run/samba" + +depend() { + after slapd + need net + use cupsd +} + +DAEMONNAME="${SVCNAME##smb.}" +[ "${DAEMONNAME}" != "smb" ] && daemon_list=${DAEMONNAME} + +signal_do() { + local signal="$1" + [ -z "${signal}" ] && return 0 + + local result=0 last_result=0 daemon= cmd_exec= + for daemon in ${daemon_list} ; do + eval cmd_exec=\$${daemon}_${signal} + if [ -n "${cmd_exec}" ]; then + ebegin "${my_service_name} -> ${signal}: ${daemon}" + #echo ${cmd} '->' ${!cmd} + ${cmd_exec} > /dev/null + last_result=$? + eend ${last_result} + fi + result=$(( ${result} + ${last_result} )) + done + return ${result} +} + +start() { + ${my_service_PRE} + [ -d "${piddir}" ] || mkdir -p "${piddir}" + signal_do start && return 0 + + eerror "Error: starting services (see system logs)" + signal_do stop + return 1 +} +stop() { + ${my_service_PRE} + if signal_do stop ; then + ${my_service_POST} + return 0 + fi +} +reload() { + ${my_service_PRE} + signal_do reload +} diff --git a/samba/smbd.run b/samba/smbd.run new file mode 100644 index 0000000..595ab53 --- /dev/null +++ b/samba/smbd.run @@ -0,0 +1,10 @@ +#!/bin/sh + +exec 2>&1 + +[ -r ./conf ] && . ./conf + +mkdir -p /run/samba +mkdir -p /run/lock/samba + +exec /usr/sbin/smbd -F ${OPTS:--S -d1} diff --git a/samurai/PKGBUILD b/samurai/PKGBUILD new file mode 100644 index 0000000..22f5965 --- /dev/null +++ b/samurai/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=samurai +pkgver=1.2 +pkgrel=1 +pkgdesc="ninja-compatible build tool written in C" +arch=('i686' 'x86_64') +url='https://github.com/michaelforney/samurai' +license=('ISC' 'Apache-2.0' 'Expat') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/michaelforney/samurai/archive/${pkgver}.tar.gz") +sha512sums=('10dc5dc8e49b1460bfb2a84bea55b18cd5a1a5473bae0c0628b700ec1102a8ae4c529711b9c9b4654c8c6610e48a91df7a435d7ca21b504e604a2868763ee0ae') + +build() { + cd ${pkgname}-${pkgver} + make samu +} + +package() { + cd ${pkgname}-${pkgver} + make install PREFIX=/usr DESTDIR="${pkgdir}" + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/sane/PKGBUILD b/sane/PKGBUILD new file mode 100644 index 0000000..e9fab61 --- /dev/null +++ b/sane/PKGBUILD @@ -0,0 +1,98 @@ +# Maintainer: Jesus E. + +pkgname=sane +pkgver=1.0.31 +_debver=$pkgver +_debrel=4.1 +pkgrel=2 +pkgdesc='Scanner Access Now Easy' +url='http://www.sane-project.org/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('bash' 'cairo' 'gcc-libs' 'glibc' 'libgphoto2' 'libjpeg-turbo' 'libnl' + 'libpng' 'libtiff' 'libxml2' 'libieee1284' 'net-snmp' 'libressl' 'v4l-utils') +makedepends=('curl' 'glib2' 'libusb' 'poppler-glib' 'quilt' 'intltool' 'gettext-tiny' + 'autoconf-archive' 'python') +backup=(etc/sane.d/{abaton.conf,agfafocus.conf,apple.conf,artec.conf,artec_eplus48u.conf,avision.conf,bh.conf,canon.conf,canon630u.conf,canon_dr.conf,canon_pp.conf,cardscan.conf,coolscan2.conf,coolscan3.conf,coolscan.conf,dc25.conf,dc210.conf,dc240.conf,dell1600n_net.conf,dll.conf,dmc.conf,epjitsu.conf,epson.conf,epson2.conf,epsonds.conf,fujitsu.conf,genesys.conf,gphoto2.conf,gt68xx.conf,hp.conf,hp3900.conf,hp4200.conf,hp5400.conf,hpsj5s.conf,hs2p.conf,ibm.conf,kodak.conf,kodakaio.conf,leo.conf,lexmark.conf,ma1509.conf,magicolor.conf,matsushita.conf,microtek.conf,microtek2.conf,mustek.conf,mustek_pp.conf,mustek_usb.conf,nec.conf,net.conf,p5.conf,pie.conf,pieusb.conf,pixma.conf,plustek.conf,plustek_pp.conf,qcam.conf,ricoh.conf,rts8891.conf,s9036.conf,saned.conf,sceptre.conf,sharp.conf,sm3840.conf,snapscan.conf,sp15c.conf,st400.conf,stv680.conf,tamarack.conf,teco1.conf,teco2.conf,teco3.conf,test.conf,u12.conf,umax.conf,umax1220u.conf,umax_pp.conf,xerox_mfp.conf,v4l.conf}) +source=(https://deb.debian.org/debian/pool/main/s/sane-backends/sane-backends_${pkgver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/s/sane-backends/sane-backends_${_debver}-${_debrel}.debian.tar.xz + fix-build.patch + saned.confd + saned.initd + saned.run) +sha512sums=('d8ef05cc3aa9c4fa42c9241e1e61fc93e7959df3746a3a2cfaa6e4fb26dfd0911b4d3227b2da28852f8630fa17ad3432a1230a6f4425340e79a3b82ec5eaa9eb' + '9db8332f6760bf9bccbf49e0f3c290f0d6015f344a3e27ad75663541c47c11802db5dcfeb60e0236ea26a8c2cc0881148dad6b512ead7abfcbdb2d0bb29b8cc8' + '2ff3d3a4d653c0c03163d9ee6e00c94a547f91e519785548de850e638636dc559e20a764559e9bbd5682b91f13d43e40bcdec51a40382a8969ed014cbccb3cac' + '8f4a99ef24c19b3a7213b3d25ea16f5bca8623735cf25d21e3a706e9e0135ac8cce5d0b8fb8728845977f41dcefe6bd858076d755515fc91b00e05ee5817d751' + '3dca312125ecaf9da33165a978f877a43b4040638b98d029dfb59909363966e04b85effb613fc92c0e830d8d94d03898da7290303d32d5c4b2d2bfed4665b498' + 'a5e23f66031557d65e9479a4d3a62b1e7302d06291eae171aaf0262d3aaebe761ac579bc19282f3a5213cf33505f87acf476c824ba0d821f7f97f43376bae7bb') + +prepare() { + cd backends-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0125-multiarch_dll_search_path.patch || true + rm -v debian/patches/0140-avahi.patch || true + rm -v debian/patches/0145-avahi.patch || true + rm -v debian/patches/0155-hurd_PATH_MAX.patch || true + rm -v debian/patches/0705-kfreebsd.patch || true + + quilt push -av + fi + + # additional fixes + patch -Np1 -i ../fix-build.patch + + ./autogen.sh +} + +build() { + cd backends-${pkgver} + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --enable-pthread \ + --disable-rpath \ + --disable-locking + make +} + +package() { + cd backends-${pkgver} + make DESTDIR="${pkgdir}" install + + # fix hp officejets + echo "#hpaio" >> "${pkgdir}/etc/sane.d/dll.conf" + + # install udev files + install -D -m0644 tools/udev/libsane.rules \ + "${pkgdir}/lib/udev/rules.d/49-sane.rules" + + # fix udev rules + sed -i 's|NAME="%k", ||g' "${pkgdir}/lib/udev/rules.d/49-sane.rules" + + # Install the pkg-config file + install -D -m644 tools/sane-backends.pc \ + "${pkgdir}/usr/lib/pkgconfig/sane-backends.pc" + + # install services + install -D -m644 ${srcdir}/saned.confd \ + "${pkgdir}/etc/conf.d/saned" + install -D -m755 ${srcdir}/saned.initd \ + "${pkgdir}/etc/init.d/saned" + install -D -m755 ${srcdir}/saned.run \ + "${pkgdir}/etc/sv/saned/run" + + # install license file + install -D -m644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/sane/fix-build.patch b/sane/fix-build.patch new file mode 100644 index 0000000..11b5610 --- /dev/null +++ b/sane/fix-build.patch @@ -0,0 +1,15 @@ +--- a/po/LINGUAS 2020-08-23 13:25:14.000000000 +0200 ++++ b/po/LINGUAS 2021-08-17 15:29:35.254813845 +0200 +@@ -2,12 +2,9 @@ + # try to keep this list ordered + bg + ca +-ca@valencia + cs + da + de +-en@boldquot +-en@quot + en_GB + eo + es diff --git a/sane/saned.confd b/sane/saned.confd new file mode 100644 index 0000000..adb1eab --- /dev/null +++ b/sane/saned.confd @@ -0,0 +1,2 @@ +# The user saned should drop its privileges to after startup +#SANED_USER="" diff --git a/sane/saned.initd b/sane/saned.initd new file mode 100644 index 0000000..58751e9 --- /dev/null +++ b/sane/saned.initd @@ -0,0 +1,12 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +pidfile="/var/run/saned.pid" +command="/usr/sbin/saned" +command_args="-a ${SANED_USER:-root}" + +start_pre() { + checkpath -d -o ${SANED_USER:-root} ${pidfile%/*} +} diff --git a/sane/saned.run b/sane/saned.run new file mode 100644 index 0000000..7ccf2dc --- /dev/null +++ b/sane/saned.run @@ -0,0 +1,4 @@ +#!/bin/sh +#SANED_USER="" +/usr/sbin/saned -a ${SANED_USER:-root} +exec pause diff --git a/sassc/PKGBUILD b/sassc/PKGBUILD new file mode 100644 index 0000000..50f4397 --- /dev/null +++ b/sassc/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=sassc +pkgver=3.6.1 +_debver=3.6.1+20201027 +_debrel=1 +pkgrel=1 +pkgdesc="C implementation of Sass CSS preprocessor." +arch=(i686 x86_64) +url="https://github.com/sass/sassc" +license=(Expat) +depends=(libsass) +makedepends=(quilt) +source=($pkgname-$pkgver.tar.gz::https://github.com/sass/$pkgname/archive/$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/sassc/sassc_$_debver-$_debrel.debian.tar.xz) +sha512sums=('b6df8f481db0737ca08808c0849dcbd83e80799d883271d382607b7a74028153195f5f9c26768ffe1a9a92ee8c26be3c382ad7b3a5336eb6e4a0dad58132690e' + 'bc1cd309f905625a04dcb78be9db2f04365fc7ede02dc20906af7167c1dd512223895fe05c0491d74f31afaf94fd328f11010f66be832cb566fb7bcb860c4ac7') + +prepare() { + cd $pkgname-$pkgver + + if [[ $pkgver = ${_debver%+*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -i +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir/" install + install -D -m644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/sawfish-themes/PKGBUILD b/sawfish-themes/PKGBUILD new file mode 100644 index 0000000..3fd1bba --- /dev/null +++ b/sawfish-themes/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=sawfish-themes +pkgver=0.13.0 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Themes for the Sawfish window manager" +arch=('any') +license=('GPL-1') +depends=('sawfish') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/s/sawfish-themes/sawfish-themes_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/s/sawfish-themes/sawfish-themes_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('fccb1520b4b456e12fadd10cc3bcd8c4976f96b25628a7773e0aa4a1c03b67553c49822d63eea5212dbea139550c1146e9fd51444a0990ebb49387d3c352c12d' + 'ac615e6805dd9d87c5e7f53694095818436698783a121b7fa4daee5d245412375aba1dda030718dfcbb4647d9a3c285771ec36860687270197081fa00bba4bcb') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + + cp debian/copyright ./copyright + rm -rf ./debian + fi +} + +package() { + install -d "$pkgdir/usr/share/sawfish/themes/" + install -d "$pkgdir/usr/share/licenses/$pkgname" + cp -R "$srcdir/$pkgname-$pkgver/"* "$pkgdir/usr/share/sawfish/themes/" + mv "$pkgdir/usr/share/sawfish/themes/copyright" "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/sawfish/PKGBUILD b/sawfish/PKGBUILD new file mode 100644 index 0000000..98a18b8 --- /dev/null +++ b/sawfish/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=sawfish +pkgver=1.11.90 +_debver=$pkgver +_debrel=1.2 +pkgrel=3 +pkgdesc="An extensible window manager using a Lisp-based scripting language" +arch=('i686' 'x86_64') +url='https://sawfish.wikia.com/wiki/Main_Page' +license=('GPL-2' 'Artistic-2.0') +depends=('libsm' 'rep-gtk' 'hicolor-icon-theme' 'gdk-pixbuf-xlib' 'libxtst' 'slock' 'zzz') +makedepends=('quilt') +optdepends=('lumina-core: support for Lumina-desktop') +options=('!libtool') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/s/sawfish/sawfish_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/s/$pkgname/${pkgname}_${_debver}-${_debrel}.debian.tar.xz" + "commands.patch") +sha512sums=('24735438167c1146e57f82a58876b68b1126d45f237751828ae9603a8eea966058fb6d8fbfddc28e1a96ab774a044b4b9b70b1e299f958b77eb32c987684925e' + '6f49321ac85e06f3df1ff7ba1d1023dd165d6110fa33fa360bd53f99e8c0b45130392a0757fc6e2487bcb47aaee477c4d6f0ac5c081b6144c763b10844b795d8' + '5be9a64fff3fcd11436c4c32d2207c7e5fd68098034e3e6da92d29b899d04fb8138c41d6f23b1bc35cc2a9bfd0765fb843de5f3867c3ef7309b085cf3b5d9a83') + +prepare() { + cd ${pkgname}_${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + cp -r "$srcdir"/debian . + + quilt push -av + fi + patch -p1 < "$srcdir"/commands.patch + ./autogen.sh +} + +build() { + cd ${pkgname}_${pkgver} + ./configure \ + --prefix=/usr \ + --without-kde4session \ + --without-kde5session \ + --without-matesession \ + --without-xfcesession \ + --without-gnome2session + make +} + +package() { + cd ${pkgname}_${pkgver} + make DESTDIR="${pkgdir}" install + + # cleanup, deleting unneeded and unsupported parts from package + rm -rf "$pkgdir/usr/share/"{gnome,kde4,ksmserver} + + install -Dm644 sawfish.el -t "$pkgdir"/usr/share/emacs/site-lisp + install -Dm644 lisp/sawfish/wm/tile/readme.org -t "$pkgdir"/usr/share/doc/$pkgname + install -Dm644 COPYING COPYING.SOUNDS -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/sawfish/commands.patch b/sawfish/commands.patch new file mode 100644 index 0000000..215c07d --- /dev/null +++ b/sawfish/commands.patch @@ -0,0 +1,38 @@ +--- a/lisp/sawfish/wm/commands/poweroff.jl 2016-01-04 00:25:57.000000000 +0100 ++++ b/lisp/sawfish/wm/commands/poweroff.jl 2023-10-15 20:46:39.549680242 +0200 +@@ -36,22 +36,22 @@ + + (define-structure-alias poweroff sawfish.wm.commands.poweroff) + +- (defcustom reboot-command "ssd --reboot" ++ (defcustom reboot-command "doas reboot" + "The command used to reboot the computer." + :type string + :group (misc apps)) + +- (defcustom halt-command "ssd --shutdown" ++ (defcustom halt-command "doas poweroff" + "The command used to halt the computer." + :type string + :group (misc apps)) + +- (defcustom suspend-command "ssd --suspend" ++ (defcustom suspend-command "doas /usr/sbin/zzz" + "The command used to suspend the computer." + :type string + :group (misc apps)) + +- (defcustom hibernate-command "ssd --hibernate" ++ (defcustom hibernate-command "doas /usr/sbin/zzz" + "The command used to hibernate the computer." + :type string + :group (misc apps)) +@@ -61,7 +61,7 @@ + :type string + :group (misc apps)) + +- (defcustom lockdown-command "ssd --lockdown" ++ (defcustom lockdown-command "slock" + "The command used to lockdown the display." + :type string + :group (misc apps)) diff --git a/sbsigntool/PKGBUILD b/sbsigntool/PKGBUILD new file mode 100644 index 0000000..6593c98 --- /dev/null +++ b/sbsigntool/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +# Based on sbsigntools package + +pkgname=sbsigntool +pkgver=0.9.2 +_debver=0.9.2 +_debrel=2 +pkgrel=3 +pkgdesc="Tools to add signatures to EFI binaries and Drivers" +arch=('x86_64' 'i686') +url="https://tracker.debian.org/pkg/sbsigntool" +license=('custom:GPL-3+OpenSSL-Linking-Exception') +makedepends=('gnu-efi-libs' 'help2man' 'intltool' 'quilt') +depends=('libutil-linux' 'libressl') +replaces=('sbsigntools') +conflicts=('sbsigntools') +provides=('sbsigntools') +source=("https://deb.debian.org/debian/pool/main/s/sbsigntool/sbsigntool_$pkgver.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/s/sbsigntool/sbsigntool_$_debver-$_debrel.debian.tar.xz" + 'libressl.patch') +sha512sums=('5b27dea3678a41a09af3eb101c3bde2c561b25c9514dba261411f3f789ed3c998c5bc5401039717014527dd00a426d94d39b1f2c4b3cbc1a49c0067143ef0943' + 'e2fe8eca518880ddf0c85317ead1de30b87e07a7a936d19ed36c50315030a52d990bc2873cbb45a12be516d6fd5c731bbb4503e4572399edb3c238edac28d1b5' + '9602831135773b34ee9264bd94bb6491d03965ce90b808b35721dceda65af46cd9e53b1e5422fae76da07f3ec1b0a77b8bc60a019012cef7f1b8395ffe040d19') + +prepare() { + cd "${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + patch -p1 -i ${srcdir}/libressl.patch + autoreconf -fiv +} + +build() { + cd "${pkgname}-${pkgver}" + + ./configure --prefix="/usr" --mandir="/usr/share/man" --sysconfdir="/etc" + make +} + +package() { + cd "${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + install -Dm644 COPYING LICENSE.GPLv3 -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/sbsigntool/libressl.patch b/sbsigntool/libressl.patch new file mode 100644 index 0000000..226f7fd --- /dev/null +++ b/sbsigntool/libressl.patch @@ -0,0 +1,161 @@ +diff --git a/src/fileio.c b/src/fileio.c +index 032eb1e..09bc3aa 100644 +--- a/src/fileio.c ++++ b/src/fileio.c +@@ -40,6 +40,7 @@ + #include + #include + #include ++#include + + #include + #include +diff --git a/src/idc.c b/src/idc.c +index 236cefd..18c670a 100644 +--- a/src/idc.c ++++ b/src/idc.c +@@ -238,7 +238,11 @@ struct idc *IDC_get(PKCS7 *p7, BIO *bio) + + /* extract the idc from the signed PKCS7 'other' data */ + str = p7->d.sign->contents->d.other->value.asn1_string; ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + idcbuf = buf = ASN1_STRING_data(str); ++#else ++ idcbuf = buf = ASN1_STRING_get0_data(str); ++#endif + idc = d2i_IDC(NULL, &buf, ASN1_STRING_length(str)); + + /* If we were passed a BIO, write the idc data, minus type and length, +@@ -289,7 +293,11 @@ int IDC_check_hash(struct idc *idc, struct image *image) + } + + /* check hash against the one we calculated from the image */ ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + buf = ASN1_STRING_data(str); ++#else ++ buf = ASN1_STRING_get0_data(str); ++#endif + if (memcmp(buf, sha, sizeof(sha))) { + fprintf(stderr, "Hash doesn't match image\n"); + fprintf(stderr, " got: %s\n", sha256_str(buf)); +diff --git a/src/sbattach.c b/src/sbattach.c +index a0c01b8..fe5a18e 100644 +--- a/src/sbattach.c ++++ b/src/sbattach.c +@@ -231,6 +231,7 @@ int main(int argc, char **argv) + return EXIT_FAILURE; + } + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + ERR_load_crypto_strings(); + OpenSSL_add_all_digests(); + OPENSSL_config(NULL); +@@ -239,6 +240,7 @@ int main(int argc, char **argv) + * module isn't present). In either case ignore the errors + * (malloc will cause other failures out lower down */ + ERR_clear_error(); ++#endif + + image = image_load(image_filename); + if (!image) { +diff --git a/src/sbkeysync.c b/src/sbkeysync.c +index 7b17f40..753ca52 100644 +--- a/src/sbkeysync.c ++++ b/src/sbkeysync.c +@@ -208,7 +208,11 @@ static int x509_key_parse(struct key *key, uint8_t *data, size_t len) + goto out; + + key->id_len = ASN1_STRING_length(serial); ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + key->id = talloc_memdup(key, ASN1_STRING_data(serial), key->id_len); ++#else ++ key->id = talloc_memdup(key, ASN1_STRING_get0_data(serial), key->id_len); ++#endif + + key->description = talloc_array(key, char, description_len); + X509_NAME_oneline(X509_get_subject_name(x509), +@@ -927,6 +931,7 @@ int main(int argc, char **argv) + return EXIT_FAILURE; + } + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + ERR_load_crypto_strings(); + OpenSSL_add_all_digests(); + OpenSSL_add_all_ciphers(); +@@ -936,6 +941,7 @@ int main(int argc, char **argv) + * module isn't present). In either case ignore the errors + * (malloc will cause other failures out lower down */ + ERR_clear_error(); ++#endif + + ctx->filesystem_keys = init_keyset(ctx); + ctx->firmware_keys = init_keyset(ctx); +diff --git a/src/sbsign.c b/src/sbsign.c +index ff1fdfd..5754113 100644 +--- a/src/sbsign.c ++++ b/src/sbsign.c +@@ -188,6 +188,7 @@ int main(int argc, char **argv) + + talloc_steal(ctx, ctx->image); + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + ERR_load_crypto_strings(); + OpenSSL_add_all_digests(); + OpenSSL_add_all_ciphers(); +@@ -197,6 +198,7 @@ int main(int argc, char **argv) + * module isn't present). In either case ignore the errors + * (malloc will cause other failures out lower down */ + ERR_clear_error(); ++#endif + if (engine) + pkey = fileio_read_engine_key(engine, keyfilename); + else +diff --git a/src/sbvarsign.c b/src/sbvarsign.c +index ebf625c..43a1a61 100644 +--- a/src/sbvarsign.c ++++ b/src/sbvarsign.c +@@ -509,6 +509,7 @@ int main(int argc, char **argv) + return EXIT_FAILURE; + } + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + /* initialise openssl */ + OpenSSL_add_all_digests(); + OpenSSL_add_all_ciphers(); +@@ -519,6 +520,7 @@ int main(int argc, char **argv) + * module isn't present). In either case ignore the errors + * (malloc will cause other failures out lower down */ + ERR_clear_error(); ++#endif + + /* set up the variable signing context */ + varname = argv[optind]; +diff --git a/src/sbverify.c b/src/sbverify.c +index 3920d91..3d9c0a1 100644 +--- a/src/sbverify.c ++++ b/src/sbverify.c +@@ -56,7 +56,7 @@ + #include + #include + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + #define X509_OBJECT_get0_X509(obj) ((obj)->data.x509) + #define X509_OBJECT_get_type(obj) ((obj)->type) + #define X509_STORE_CTX_get0_cert(ctx) ((ctx)->cert) +@@ -250,6 +250,7 @@ int main(int argc, char **argv) + verbose = false; + detached_sig_filename = NULL; + ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + OpenSSL_add_all_digests(); + ERR_load_crypto_strings(); + OPENSSL_config(NULL); +@@ -258,6 +259,7 @@ int main(int argc, char **argv) + * module isn't present). In either case ignore the errors + * (malloc will cause other failures out lower down */ + ERR_clear_error(); ++#endif + + for (;;) { + int idx; diff --git a/sc/LICENSE b/sc/LICENSE new file mode 100644 index 0000000..68cf1a8 --- /dev/null +++ b/sc/LICENSE @@ -0,0 +1,18 @@ +Being in the public domain is not a license; rather, it means the +material is not copyrighted and no license is needed. Practically +speaking, though, if a work is in the public domain, it might as well +have an all-permissive non-copyleft free software license. Public +domain material is compatible with the GNU GPL. + +If you want to release your work to the public domain, we encourage +you to use formal tools to do so. We ask people who make small +contributions to GNU to sign a disclaimer form; that's one +solution. If you're working on a project that doesn't have formal +contribution policies like that, CC0 is a good tool that anyone can +use. It formally dedicates your work to the public domain, and +provides a fallback license for cases where that is not legally +possible. + +http://directory.fsf.org/wiki/License:CC0 + +Source: http://www.gnu.org/licenses/license-list.html#PublicDomain diff --git a/sc/PKGBUILD b/sc/PKGBUILD new file mode 100644 index 0000000..37e9f81 --- /dev/null +++ b/sc/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=sc +pkgver=7.16 +_debver=7.16 +_debrel=4 +pkgrel=1 +pkgdesc='Ncurses-based spreadsheet program' +arch=('i686' 'x86_64') +url='https://ibiblio.org/pub/linux/apps/financial/spreadsheet/!INDEX.html' +license=('Public-Domain') +depends=('ncurses') +source=(https://ibiblio.org/pub/linux/apps/financial/spreadsheet/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/sc/sc_$_debver-$_debrel.debian.tar.xz + LICENSE) +sha512sums=('efa495ba21d01b578a53f09101ccc28b564437317e0860904ad59136a24df9619dfc8715339296ae1567eaa8d620cdabc9bc2784962bc1c93e3bbd086856407b' + 'b0b2ae41bb8f86be8c13f80dd37d223185fbb8984c9aca85ba24cee30ebc1ece114f50f0a4315748a96d9b9b91a5beeea667997c012090abd609cd82e7f50361' + 'bbdb7d33e444e1f3e34d5f1c73414da3a492fee797eae80e8868d82faed02e42198e1dcea807ed1c279b47bb5a6efd2cf2ce4f4c67254eb7a7dde782d3d51d11') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + + +build() { + cd $pkgname-$pkgver + + make + make sc.1 psc.1 +} + +package() { + cd $pkgname-$pkgver + + install -d "$pkgdir"/usr/bin "$pkgdir"/usr/share/doc/$pkgname \ + "$pkgdir"/usr/share/man/man1 "$pkgdir"/usr/share/licenses/$pkgname + + make prefix="$pkgdir"/usr MANDIR="$pkgdir"/usr/share/man/man1 install + + # license + install -Dm644 "$srcdir/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/scdoc/PKGBUILD b/scdoc/PKGBUILD new file mode 100644 index 0000000..55a0280 --- /dev/null +++ b/scdoc/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=scdoc +pkgver=1.11.1 +pkgrel=1 +pkgdesc="Tool for generating roff manual pages" +license=('Expat') +arch=('i686' 'x86_64') +url='https://git.sr.ht/~sircmpwn/scdoc/' +source=("$pkgname-$pkgver.tar.gz::https://git.sr.ht/~sircmpwn/$pkgname/archive/$pkgver.tar.gz") +sha512sums=('cd6ac88fc9db48efaae0df0f6472a18e28f92fc2735fee18c07516fd358e9c0921eae9d944020eacd08285bbf59fbcc1d389a6565cef29fc50ad511ee5e7fa9f') + +build() { + cd "$pkgname-$pkgver" + # Upstream purposefully does not honor the user's LDFLAGS in order to keep + # scdoc static. As we gain no benefit to statically linking and, in fact, + # lose standard Arch practices (such as RELRO and PIE), we must override + # LDFLAGS + make PREFIX=/usr LDFLAGS="$LDFLAGS" +} + +package() { + cd "$pkgname-$pkgver" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/scons/PKGBUILD b/scons/PKGBUILD new file mode 100644 index 0000000..d5e2064 --- /dev/null +++ b/scons/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=scons +pkgver=4.0.1 +pkgrel=1 +pkgdesc="Extensible Python-based build utility" +arch=('any') +url="https://scons.org" +license=('Expat') +depends=('python') +makedepends=('python-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/${pkgname}/${pkgname}/archive/${pkgver}.tar.gz") +sha512sums=('f23c5dfd3c236e9f9f85b986ca64a36dbd85e9f3383cb3577e082a7dea4b83283020fbf064c2d919ab116195c6708fc11f906fcf3b0bc0533a4bc49a4f7371c6') + +build() { + cd "${pkgname}-${pkgver}" + python setup.py build +} + +package() { + cd "${pkgname}-${pkgver}" + python setup.py install --root="$pkgdir" --optimize=1 --skip-build + install -vDm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}/" + install -vDm 644 {CHANGES,RELEASE}.txt \ + -t "${pkgdir}/usr/share/doc/${pkgname}/" + install -vDm 644 README.rst \ + -t "${pkgdir}/usr/share/doc/${pkgname}/" +} diff --git a/scour/PKGBUILD b/scour/PKGBUILD new file mode 100644 index 0000000..3b7ee3a --- /dev/null +++ b/scour/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=scour +pkgver=0.38.2 +pkgrel=1 +pkgdesc='An SVG scrubber' +arch=('any') +url='https://github.com/scour-project/scour' +license=('Apache-2.0') +depends=('python-six') +makedepends=('python-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/scour-project/scour/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('a2c418e25283af399be032322b3af0c336c2392ba361681d4b133b64ebc441ac5beeed2b920f42316cef376c971b230681e306687786a875162d33b659d3fdeb') + +build() { + cd ${pkgname}-${pkgver} + python setup.py build +} + +package() { + cd ${pkgname}-${pkgver} + python setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/screen/PKGBUILD b/screen/PKGBUILD new file mode 100644 index 0000000..0163cd8 --- /dev/null +++ b/screen/PKGBUILD @@ -0,0 +1,90 @@ +# Maintainer: Jesus E. +# Committer (Arch): dorphell + +pkgname=screen +pkgver=4.8.0 +pkgrel=2 +_debname="${pkgname}" +_debver="${pkgver}" +_debrel=6 +pkgdesc='Full-screen window manager that multiplexes a physical terminal' +url="https://www.gnu.org/software/${pkgname}/" +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('ncurses') +makedepends=('quilt') +backup=("etc/${pkgname}rc") +options=('!makeflags') +validpgpkeys=('2EE59A5D0C50167B5535BBF1B708A383C53EF3A4') +_source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/${_debname::1}/" + "${_debname}/${_debname}_${_debver}-${_debrel}.debian.tar.xz") +source=("${_source[0]}" "${_source[0]}.sig" "${_source[1]}${_source[2]}") +sha512sums=('770ebaf6ee9be711bcb8a6104b3294f2bf4523dae6683fdc5eac4b3aff7e511be2d922b6b2ad28ec241113c2e4fe0d80f9a482ae1658adc19c8c3a3680caa25c' + 'SKIP' + 'fee65e34fa2850d752246119d3ac1c3900f406fce4893ccc7a095f516be22896633ee19389cc6477b782243d1c15ffea714b6927c95b3c7e8838f790b8eefbfd') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ "${pkgver%.*}" = "${_debver%.*}" ]]; then + # Debian patches + export QUILT_PATCHES='debian/patches' + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + QUILT_RM=('05prefer-libtinfo-over-libcurses' + '11replace_doc_paths' + '13split_info_files' + '60-screen-4.2.1-debian4.1.0-compatibility' + '80_session_creation_docs' + '81_session_creation_util' + '82_session_creation_core') + + mv "${srcdir}/debian" '.' + + # Doesn't apply and seems unimportant + for i in ${QUILT_RM[@]}; do + rm -v "${QUILT_PATCHES}/$i.patch" || true + done + unset i + + quilt push -av + + unset \ + QUILT_PATCHES \ + QUILT_REFRESH_ARGS \ + QUILT_DIFF_ARGS \ + QUILT_RM + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + _ptygroup='5' #the UID of our PTY/TTY group + + ./configure \ + --prefix="/usr" \ + --mandir="/usr/share/man" \ + --infodir="/usr/share/info" \ + --enable-colors256 \ + --disable-pam \ + --enable-rxvt_osc \ + --enable-telnet \ + --with-pty-group="${_ptygroup}" \ + --with-socket-dir="/run/${pkgname}" \ + --with-sys-screenrc="/etc/${pkgname}rc" + + unset _ptygroup + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -Dm '644' "etc/etc${pkgname}rc" "${pkgdir}/etc/${pkgname}rc" + install -Dm '644' "etc/${pkgname}rc" "${pkgdir}/etc/skel/.${pkgname}rc" + + install -Dm '644' 'COPYING' -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/scribus/PKGBUILD b/scribus/PKGBUILD new file mode 100644 index 0000000..bfd99a5 --- /dev/null +++ b/scribus/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=scribus +pkgver=1.5.8 +_debver=$pkgver +_debrel=4 +pkgrel=2 +pkgdesc="Free and libre desktop publishing software" +arch=('i686' 'x86_64') +url='https://www.scribus.net/' +license=('GPL-2') +depends=('boost-libs' 'cairo' 'fontconfig' 'freetype2' 'harfbuzz-icu' 'hunspell' 'lcms2' + 'libcups' 'libjpeg-turbo' 'libpng' 'libtiff' 'libxml2' 'openscenegraph' 'libressl' + 'podofo' 'poppler' 'python' 'qt-base' 'zlib') +makedepends=('cmake' 'boost' 'mesa' 'qt-tools' 'quilt') +optdepends=('tk: for scripts based on tkinter') +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/s/scribus/scribus_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('eb46be0165eeb0d8974aa744fc8ffac321b206ca0015da39bb2f50d9fd4a5e28300a49ada0f963b4e0cf9a3301dc746ffba74f359f5e76d308d80b71ee669c2d' + '5eb94e90988b2963263db92b408a050c351757f5d6798cff4932413d01cb6733742b7e82583bee850a7cee15f64b2bd616a28157eb2c94dcdf89f8c146e8eb72') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S ${pkgname}-${pkgver} \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_SKIP_RPATH=ON + make -C build +} + +package() { + make -C build DESTDIR="${pkgdir}" install + + cd ${pkgname}-${pkgver} + + install -Dm644 scribus.desktop -t "${pkgdir}"/usr/share/applications + + for i in 16x16 32x32 128x128 256x256 512x512 1024x1024 + do + install -Dm644 resources/iconsets/artwork/icon_${i}.png "${pkgdir}"/usr/share/icons/hicolor/${i}/apps/scribus.png + done + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/scron/PKGBUILD b/scron/PKGBUILD new file mode 100644 index 0000000..fb692b3 --- /dev/null +++ b/scron/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=scron +pkgver=0.4 +pkgrel=1 +pkgdesc="Simple cron daemon" +arch=('i686' 'x86_64') +url='https://git.2f30.org/scron/' +license=('Expat') +provides=('cron') +conflicts=('cron') +install=$pkgname.install +source=("https://dl.2f30.org/releases/${pkgname}-${pkgver}.tar.gz" + "fhs-compliant.patch" + "scrond.initd" + "scrond.run") +sha512sums=('585c8dd1acab29d37890b62b4c8de2ae6a26bc67c3e95c1c8eaefc6672b6a1b0c3432a93b34d44eb693ba322f4b8f29495e1a825e87b376edb6c5c842da26f1f' + '7df5cb4d8f984b145d449ebb5f1ed4ee7c55567be56988c6765aae85be04c19220d42bbcf780e9c368be46f938e7a1219e50529bb8af442b96ecb36aadbeef53' + '5dc464a5c990bee0440339d2dc1cea330c973564d258ce28be966e82c7dd55375436667f5e9c59bd8ae069d8c88fed60bd7cbb41861b747dfb4c1e7d74a3293d' + 'a1171a5c7d5bac1290af15f72ee9dc1dd43ced26b126478f01a517e27ef2a87e956a85466bf6d9962df700f7a66cc5d0e1ef5cf0877c76cbb2bec71e6897e7d4') + +prepare() { + cd "${pkgname}-${pkgver}" + rm crond.c + patch -Np1 -i ${srcdir}/fhs-compliant.patch +} + +build() { + cd "${pkgname}-${pkgver}" + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" PREFIX=/usr MANPREFIX=/usr/share/man install + + # services + install -Dm755 "$srcdir/scrond.initd" "$pkgdir/etc/init.d/scrond" + install -Dm755 "$srcdir/scrond.run" "$pkgdir/etc/sv/scrond/run" + + # license + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/scron/fhs-compliant.patch b/scron/fhs-compliant.patch new file mode 100644 index 0000000..d8fc64e --- /dev/null +++ b/scron/fhs-compliant.patch @@ -0,0 +1,633 @@ +--- a/Makefile 2015-02-12 16:44:53.000000000 +0100 ++++ b/Makefile 2023-04-22 03:16:43.372260703 +0200 +@@ -2,19 +2,19 @@ + PREFIX = /usr/local + MANPREFIX = $(PREFIX)/man + +-BIN = crond ++BIN = scrond + MAN = scron.1 + + all: $(BIN) + + install: all +- mkdir -p $(DESTDIR)$(PREFIX)/bin +- cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin ++ mkdir -p $(DESTDIR)$(PREFIX)/sbin ++ cp -f $(BIN) $(DESTDIR)$(PREFIX)/sbin + mkdir -p $(DESTDIR)$(MANPREFIX)/man1 + cp -f $(MAN) $(DESTDIR)$(MANPREFIX)/man1 + + uninstall: +- rm -f $(DESTDIR)$(PREFIX)/bin/$(BIN) ++ rm -f $(DESTDIR)$(PREFIX)/sbin/$(BIN) + rm -f $(DESTDIR)$(MANPREFIX)/man1/$(MAN) + + clean: +--- /dev/null 2023-04-17 02:00:25.200473975 +0200 ++++ b/scrond.c 2023-04-22 03:23:28.719671519 +0200 +@@ -0,0 +1,604 @@ ++/* See LICENSE file for copyright and license details. */ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "arg.h" ++#include "queue.h" ++ ++#define VERSION "0.4" ++ ++#define LEN(x) (sizeof (x) / sizeof *(x)) ++ ++struct field { ++ enum { ++ ERROR, ++ WILDCARD, ++ NUMBER, ++ RANGE, ++ REPEAT, ++ LIST ++ } type; ++ long *val; ++ int len; ++}; ++ ++struct ctabentry { ++ struct field min; ++ struct field hour; ++ struct field mday; ++ struct field mon; ++ struct field wday; ++ char *cmd; ++ TAILQ_ENTRY(ctabentry) entry; ++}; ++ ++struct jobentry { ++ char *cmd; ++ pid_t pid; ++ TAILQ_ENTRY(jobentry) entry; ++}; ++ ++char *argv0; ++static sig_atomic_t chldreap; ++static sig_atomic_t reload; ++static sig_atomic_t quit; ++static TAILQ_HEAD(, ctabentry) ctabhead = TAILQ_HEAD_INITIALIZER(ctabhead); ++static TAILQ_HEAD(, jobentry) jobhead = TAILQ_HEAD_INITIALIZER(jobhead); ++static char *config = "/etc/crontab"; ++static char *pidfile = "/var/run/scrond.pid"; ++static int nflag; ++ ++static void ++loginfo(const char *fmt, ...) ++{ ++ va_list ap; ++ va_start(ap, fmt); ++ if (nflag == 0) ++ vsyslog(LOG_INFO, fmt, ap); ++ else ++ vfprintf(stdout, fmt, ap); ++ fflush(stdout); ++ va_end(ap); ++} ++ ++static void ++logwarn(const char *fmt, ...) ++{ ++ va_list ap; ++ va_start(ap, fmt); ++ if (nflag == 0) ++ vsyslog(LOG_WARNING, fmt, ap); ++ else ++ vfprintf(stderr, fmt, ap); ++ va_end(ap); ++} ++ ++static void ++logerr(const char *fmt, ...) ++{ ++ va_list ap; ++ va_start(ap, fmt); ++ if (nflag == 0) ++ vsyslog(LOG_ERR, fmt, ap); ++ else ++ vfprintf(stderr, fmt, ap); ++ va_end(ap); ++} ++ ++static void * ++emalloc(size_t size) ++{ ++ void *p; ++ p = malloc(size); ++ if (!p) { ++ logerr("error: out of memory\n"); ++ if (nflag == 0) ++ unlink(pidfile); ++ exit(EXIT_FAILURE); ++ } ++ return p; ++} ++ ++static char * ++estrdup(const char *s) ++{ ++ char *p; ++ ++ p = strdup(s); ++ if (!p) { ++ logerr("error: out of memory\n"); ++ if (nflag == 0) ++ unlink(pidfile); ++ exit(EXIT_FAILURE); ++ } ++ return p; ++} ++ ++static void ++runjob(char *cmd) ++{ ++ struct jobentry *je; ++ time_t t; ++ pid_t pid; ++ ++ t = time(NULL); ++ ++ /* If command is already running, skip it */ ++ TAILQ_FOREACH(je, &jobhead, entry) { ++ if (strcmp(je->cmd, cmd) == 0) { ++ loginfo("already running %s pid: %d at %s", ++ je->cmd, je->pid, ctime(&t)); ++ return; ++ } ++ } ++ ++ pid = fork(); ++ if (pid < 0) { ++ logerr("error: failed to fork job: %s time: %s", ++ cmd, ctime(&t)); ++ return; ++ } else if (pid == 0) { ++ setsid(); ++ loginfo("run: %s pid: %d at %s", ++ cmd, getpid(), ctime(&t)); ++ execl("/bin/sh", "/bin/sh", "-c", cmd, (char *)NULL); ++ logerr("error: failed to execute job: %s time: %s", ++ cmd, ctime(&t)); ++ _exit(EXIT_FAILURE); ++ } else { ++ je = emalloc(sizeof(*je)); ++ je->cmd = estrdup(cmd); ++ je->pid = pid; ++ TAILQ_INSERT_TAIL(&jobhead, je, entry); ++ } ++} ++ ++static void ++waitjob(void) ++{ ++ struct jobentry *je, *tmp; ++ int status; ++ time_t t; ++ pid_t pid; ++ ++ t = time(NULL); ++ ++ while ((pid = waitpid(-1, &status, WNOHANG | WUNTRACED)) > 0) { ++ je = NULL; ++ TAILQ_FOREACH(tmp, &jobhead, entry) { ++ if (tmp->pid == pid) { ++ je = tmp; ++ break; ++ } ++ } ++ if (je) { ++ TAILQ_REMOVE(&jobhead, je, entry); ++ free(je->cmd); ++ free(je); ++ } ++ if (WIFEXITED(status) == 1) ++ loginfo("complete: pid: %d returned: %d time: %s", ++ pid, WEXITSTATUS(status), ctime(&t)); ++ else if (WIFSIGNALED(status) == 1) ++ loginfo("complete: pid: %d terminated by signal: %s time: %s", ++ pid, strsignal(WTERMSIG(status)), ctime(&t)); ++ else if (WIFSTOPPED(status) == 1) ++ loginfo("complete: pid: %d stopped by signal: %s time: %s", ++ pid, strsignal(WSTOPSIG(status)), ctime(&t)); ++ } ++} ++ ++static int ++isleap(int year) ++{ ++ if (year % 400 == 0) ++ return 1; ++ if (year % 100 == 0) ++ return 0; ++ return (year % 4 == 0); ++} ++ ++static int ++daysinmon(int mon, int year) ++{ ++ int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; ++ if (year < 1900) ++ year += 1900; ++ if (isleap(year)) ++ days[1] = 29; ++ return days[mon]; ++} ++ ++static int ++matchentry(struct ctabentry *cte, struct tm *tm) ++{ ++ struct { ++ struct field *f; ++ int tm; ++ int len; ++ } matchtbl[] = { ++ { .f = &cte->min, .tm = tm->tm_min, .len = 60 }, ++ { .f = &cte->hour, .tm = tm->tm_hour, .len = 24 }, ++ { .f = &cte->mday, .tm = tm->tm_mday, .len = daysinmon(tm->tm_mon, tm->tm_year) }, ++ { .f = &cte->mon, .tm = tm->tm_mon, .len = 12 }, ++ { .f = &cte->wday, .tm = tm->tm_wday, .len = 7 }, ++ }; ++ size_t i; ++ int j; ++ ++ for (i = 0; i < LEN(matchtbl); i++) { ++ switch (matchtbl[i].f->type) { ++ case WILDCARD: ++ continue; ++ case NUMBER: ++ if (matchtbl[i].f->val[0] == matchtbl[i].tm) ++ continue; ++ break; ++ case RANGE: ++ if (matchtbl[i].f->val[0] <= matchtbl[i].tm) ++ if (matchtbl[i].f->val[1] >= matchtbl[i].tm) ++ continue; ++ break; ++ case REPEAT: ++ if (matchtbl[i].tm > 0) { ++ if (matchtbl[i].tm % matchtbl[i].f->val[0] == 0) ++ continue; ++ } else { ++ if (matchtbl[i].len % matchtbl[i].f->val[0] == 0) ++ continue; ++ } ++ break; ++ case LIST: ++ for (j = 0; j < matchtbl[i].f->len; j++) ++ if (matchtbl[i].f->val[j] == matchtbl[i].tm) ++ break; ++ if (j < matchtbl[i].f->len) ++ continue; ++ break; ++ default: ++ break; ++ } ++ break; ++ } ++ if (i != LEN(matchtbl)) ++ return 0; ++ return 1; ++} ++ ++static int ++parsefield(const char *field, long low, long high, struct field *f) ++{ ++ int i; ++ char *e1, *e2; ++ const char *p; ++ ++ p = field; ++ while (isdigit(*p)) ++ p++; ++ ++ f->type = ERROR; ++ ++ switch (*p) { ++ case '*': ++ if (strcmp(field, "*") == 0) { ++ f->val = NULL; ++ f->len = 0; ++ f->type = WILDCARD; ++ } else if (strncmp(field, "*/", 2) == 0) { ++ f->val = emalloc(sizeof(*f->val)); ++ f->len = 1; ++ ++ errno = 0; ++ f->val[0] = strtol(field + 2, &e1, 10); ++ if (e1[0] != '\0' || errno != 0 || f->val[0] == 0) ++ break; ++ ++ f->type = REPEAT; ++ } ++ break; ++ case '\0': ++ f->val = emalloc(sizeof(*f->val)); ++ f->len = 1; ++ ++ errno = 0; ++ f->val[0] = strtol(field, &e1, 10); ++ if (e1[0] != '\0' || errno != 0) ++ break; ++ ++ f->type = NUMBER; ++ break; ++ case '-': ++ f->val = emalloc(2 * sizeof(*f->val)); ++ f->len = 2; ++ ++ errno = 0; ++ f->val[0] = strtol(field, &e1, 10); ++ if (e1[0] != '-' || errno != 0) ++ break; ++ ++ errno = 0; ++ f->val[1] = strtol(e1 + 1, &e2, 10); ++ if (e2[0] != '\0' || errno != 0) ++ break; ++ ++ f->type = RANGE; ++ break; ++ case ',': ++ for (i = 1; isdigit(*p) || *p == ','; p++) ++ if (*p == ',') ++ i++; ++ f->val = emalloc(i * sizeof(*f->val)); ++ f->len = i; ++ ++ errno = 0; ++ f->val[0] = strtol(field, &e1, 10); ++ if (f->val[0] < low || f->val[0] > high) ++ break; ++ ++ for (i = 1; *e1 == ',' && errno == 0; i++) { ++ errno = 0; ++ f->val[i] = strtol(e1 + 1, &e2, 10); ++ e1 = e2; ++ } ++ if (e1[0] != '\0' || errno != 0) ++ break; ++ ++ f->type = LIST; ++ break; ++ default: ++ return -1; ++ } ++ ++ for (i = 0; i < f->len; i++) ++ if (f->val[i] < low || f->val[i] > high) ++ f->type = ERROR; ++ ++ if (f->type == ERROR) { ++ free(f->val); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++static void ++freecte(struct ctabentry *cte, int nfields) ++{ ++ switch (nfields) { ++ case 6: ++ free(cte->cmd); ++ case 5: ++ free(cte->wday.val); ++ case 4: ++ free(cte->mon.val); ++ case 3: ++ free(cte->mday.val); ++ case 2: ++ free(cte->hour.val); ++ case 1: ++ free(cte->min.val); ++ } ++ free(cte); ++} ++ ++static void ++unloadentries(void) ++{ ++ struct ctabentry *cte, *tmp; ++ ++ for (cte = TAILQ_FIRST(&ctabhead); cte; cte = tmp) { ++ tmp = TAILQ_NEXT(cte, entry); ++ TAILQ_REMOVE(&ctabhead, cte, entry); ++ freecte(cte, 6); ++ } ++} ++ ++static int ++loadentries(void) ++{ ++ struct ctabentry *cte; ++ FILE *fp; ++ char *line = NULL, *p, *col; ++ int r = 0, y; ++ size_t size = 0; ++ ssize_t len; ++ struct fieldlimits { ++ char *name; ++ long min; ++ long max; ++ struct field *f; ++ } flim[] = { ++ { "min", 0, 59, NULL }, ++ { "hour", 0, 23, NULL }, ++ { "mday", 1, 31, NULL }, ++ { "mon", 1, 12, NULL }, ++ { "wday", 0, 6, NULL } ++ }; ++ size_t x; ++ ++ if ((fp = fopen(config, "r")) == NULL) { ++ logerr("error: can't open %s: %s\n", config, strerror(errno)); ++ return -1; ++ } ++ ++ for (y = 0; (len = getline(&line, &size, fp)) != -1; y++) { ++ p = line; ++ if (line[0] == '#' || line[0] == '\n' || line[0] == '\0') ++ continue; ++ ++ cte = emalloc(sizeof(*cte)); ++ flim[0].f = &cte->min; ++ flim[1].f = &cte->hour; ++ flim[2].f = &cte->mday; ++ flim[3].f = &cte->mon; ++ flim[4].f = &cte->wday; ++ ++ for (x = 0; x < LEN(flim); x++) { ++ do ++ col = strsep(&p, "\t\n "); ++ while (col && col[0] == '\0'); ++ ++ if (!col || parsefield(col, flim[x].min, flim[x].max, flim[x].f) < 0) { ++ logerr("error: failed to parse `%s' field on line %d\n", ++ flim[x].name, y + 1); ++ freecte(cte, x); ++ r = -1; ++ break; ++ } ++ } ++ ++ if (r == -1) ++ break; ++ ++ col = strsep(&p, "\n"); ++ if (col) ++ while (col[0] == '\t' || col[0] == ' ') ++ col++; ++ if (!col || col[0] == '\0') { ++ logerr("error: missing `cmd' field on line %d\n", ++ y + 1); ++ freecte(cte, 5); ++ r = -1; ++ break; ++ } ++ cte->cmd = estrdup(col); ++ ++ TAILQ_INSERT_TAIL(&ctabhead, cte, entry); ++ } ++ ++ if (r < 0) ++ unloadentries(); ++ ++ free(line); ++ fclose(fp); ++ ++ return r; ++} ++ ++static void ++reloadentries(void) ++{ ++ unloadentries(); ++ if (loadentries() < 0) ++ logwarn("warning: discarding old crontab entries\n"); ++} ++ ++static void ++sighandler(int sig) ++{ ++ switch (sig) { ++ case SIGCHLD: ++ chldreap = 1; ++ break; ++ case SIGHUP: ++ reload = 1; ++ break; ++ case SIGTERM: ++ quit = 1; ++ break; ++ } ++} ++ ++static void ++usage(void) ++{ ++ fprintf(stderr, VERSION " (c) 2014-2015\n"); ++ fprintf(stderr, "usage: %s [-f file] [-n]\n", argv0); ++ fprintf(stderr, " -f config file\n"); ++ fprintf(stderr, " -n do not daemonize\n"); ++ exit(EXIT_FAILURE); ++} ++ ++int ++main(int argc, char *argv[]) ++{ ++ FILE *fp; ++ struct ctabentry *cte; ++ time_t t; ++ struct tm *tm; ++ struct sigaction sa; ++ ++ ARGBEGIN { ++ case 'n': ++ nflag = 1; ++ break; ++ case 'f': ++ config = EARGF(usage()); ++ break; ++ default: ++ usage(); ++ } ARGEND; ++ ++ if (argc > 0) ++ usage(); ++ ++ if (nflag == 0) { ++ openlog(argv[0], LOG_CONS | LOG_PID, LOG_CRON); ++ if (daemon(1, 0) < 0) { ++ logerr("error: failed to daemonize %s\n", strerror(errno)); ++ return EXIT_FAILURE; ++ } ++ if ((fp = fopen(pidfile, "w"))) { ++ fprintf(fp, "%d\n", getpid()); ++ fclose(fp); ++ } ++ } ++ ++ sa.sa_handler = sighandler; ++ sigfillset(&sa.sa_mask); ++ sa.sa_flags = SA_RESTART; ++ sigaction(SIGCHLD, &sa, NULL); ++ sigaction(SIGHUP, &sa, NULL); ++ sigaction(SIGTERM, &sa, NULL); ++ ++ loadentries(); ++ ++ while (1) { ++ t = time(NULL); ++ sleep(60 - t % 60); ++ ++ if (quit == 1) { ++ if (nflag == 0) ++ unlink(pidfile); ++ unloadentries(); ++ /* Don't wait or kill forked processes, just exit */ ++ break; ++ } ++ ++ if (reload == 1 || chldreap == 1) { ++ if (reload == 1) { ++ reloadentries(); ++ reload = 0; ++ } ++ if (chldreap == 1) { ++ waitjob(); ++ chldreap = 0; ++ } ++ continue; ++ } ++ ++ TAILQ_FOREACH(cte, &ctabhead, entry) { ++ t = time(NULL); ++ tm = localtime(&t); ++ if (matchentry(cte, tm) == 1) ++ runjob(cte->cmd); ++ } ++ } ++ ++ if (nflag == 0) ++ closelog(); ++ ++ return EXIT_SUCCESS; ++} diff --git a/scron/scron.install b/scron/scron.install new file mode 100644 index 0000000..a2c9f76 --- /dev/null +++ b/scron/scron.install @@ -0,0 +1,9 @@ +post_install() { + cat <<- EOF + Configuration for jobs is done by creating and editing the crontab file (/etc/crontab). + EOF +} + +post_upgrade() { + post_install $1 +} diff --git a/scron/scrond.initd b/scron/scrond.initd new file mode 100644 index 0000000..96a1aea --- /dev/null +++ b/scron/scrond.initd @@ -0,0 +1,11 @@ +#!/sbin/openrc-run + +name="$SVCNAME" +command="/usr/sbin/scrond" +pidfile="/var/run/$SVCNAME.pid" +description="Simple cron daemon" + +depend() { + use logger clock hostname + provide cron +} diff --git a/scron/scrond.run b/scron/scrond.run new file mode 100644 index 0000000..428d847 --- /dev/null +++ b/scron/scrond.run @@ -0,0 +1,3 @@ +#!/bin/sh +exec 2>&1 +exec scrond -n 2>&1 diff --git a/scrot/PKGBUILD b/scrot/PKGBUILD new file mode 100644 index 0000000..192935f --- /dev/null +++ b/scrot/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. +# Maintainter: Tobias Dausend + +pkgname=scrot +pkgver=1.8.1 +pkgrel=1 +pkgdesc="Simple command-line screenshot utility for X" +url='https://github.com/resurrecting-open-source-projects/scrot' +arch=('i686' 'x86_64') +license=('Expat') +depends=('imlib2' 'libxext' 'libxinerama' 'libxfixes' 'libxcomposite' 'libbsd') +makedepends=('autoconf-archive') +source=("https://github.com/resurrecting-open-source-projects/scrot/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('9ab283c9554030250bc7f36885f1eb1ec52d3400e8e7d42b64abc2abaefc5c5073b84eaa9909ce843b5c5f0fd4e879e7f93e9ddc95d78b263abdf5d80ffb4d0d') + +prepare(){ + cd $pkgname-$pkgver + autoreconf -fiv +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm 644 README.md ChangeLog -t "${pkgdir}"/usr/share/doc/${pkgname} + install -Dm 644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/sdhcp/PKGBUILD b/sdhcp/PKGBUILD new file mode 100644 index 0000000..25c9b32 --- /dev/null +++ b/sdhcp/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=sdhcp +pkgver=0.1.1 +pkgrel=1 +pkgdesc="Simple dhcp client" +arch=('i686' 'x86_64') +url='https://git.2f30.org/sdhcp/' +license=('Expat') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('6054ee5cad36fc2b51e39cb2a573b65f8c495838ea9c8851178ae15138e82c4920399630fa06e8c79a7b9b43cdf85ef43c2a1ed7bd1b96ec621d0ff113f3279a' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +build() { + cd "$pkgname" + make +} + +package() { + cd "$pkgname" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/sdl/PKGBUILD b/sdl/PKGBUILD new file mode 100644 index 0000000..6b971dd --- /dev/null +++ b/sdl/PKGBUILD @@ -0,0 +1,148 @@ +# Maintainer: Jesus E. + +pkgname=sdl +pkgver=1.2.15 +_debver=1.2.15+dfsg2 +_debrel=6 +pkgrel=9 +pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard" +arch=('i686' 'x86_64') +url="https://www.libsdl.org/" +license=('LGPL-2.1') +depends=('glibc' 'libxext' 'libxrender' 'libx11' 'libsndio') +makedepends=('alsa-lib' 'mesa' 'glu' 'quilt') +optdepends=('alsa-lib: ALSA audio driver' + 'sndio: sndio audio driver') +options=('staticlibs') +mksource=(https://www.libsdl.org/release/SDL-${pkgver}.tar.gz) +source=(https://repo.hyperbola.info:50000/sources/${pkgname}-libre/SDL-libre-${pkgver}.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/libs/libsdl1.2/libsdl1.2_$_debver-$_debrel.debian.tar.xz + SDL-1.2.10-GrabNotViewable.patch + SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch + SDL-1.2.15-const_XData32.patch + SDL-1.2.15-ignore_insane_joystick_axis.patch + SDL-1.2.15-no-default-backing-store.patch + SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch + sdl-1.2.14-fix-mouse-clicking.patch + sdl-1.2.14-disable-mmx.patch + libsdl-1.2.15-resizing.patch + X11_KeyToUnicode.patch + SDL-1.2.15-CVE-2019-13616-validate_image_size_when_loading_BMP_files.patch + SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overread-in-IMA_ADPCM_nib.patch + SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overwrite-in-IMA_ADPCM_de.patch + SDL-1.2.15-CVE-2019-7573-CVE-2019-7576-Fix-buffer-overreads-in-.patch + SDL-1.2.15-CVE-2019-7574-Fix-a-buffer-overread-in-IMA_ADPCM_dec.patch + SDL-1.2.15-CVE-2019-7575-Fix-a-buffer-overwrite-in-MS_ADPCM_dec.patch + SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_deco.patch + SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_nibb.patch + SDL-1.2.15-CVE-2019-7578-Fix-a-buffer-overread-in-InitIMA_ADPCM.patch + SDL-1.2.15-CVE-2019-7635-Reject-BMP-images-with-pixel-colors-ou.patch + SDL-1.2.15-CVE-2019-7637-Fix-in-integer-overflow-in-SDL_Calcula.patch + SDL-1.2.15-CVE-2019-7638-CVE-2019-7636-Refuse-loading-BMP-image.patch + SDL-1.2.15-Reject-2-3-5-6-7-bpp-BMP-images.patch + sndio.patch + libre.patch) +mksha512sums=('ac392d916e6953b0925a7cbb0f232affea33339ef69b47a0a7898492afb9784b93138986df53d6da6d3e2ad79af1e9482df565ecca30f89428be0ae6851b1adc') +sha512sums=('0f43a2d7905eb7bf4e2348f9999ee6b716d08159b8418fe0f179c235034c4d20874e38055d9eb2cdbcec612e396e1c2739a4d23d7181aecb018f24ca16e27b08' + 'SKIP' + '6cca017439661e7f1a6eef2fa19ecd26de03cd4d81bf1a8117651bebd28b5ea1ae88c2149029ef27e664ec692d39d34c571811812824180a4693b94ff752da6f' + '20049408d4c00d895c39a7901d889d1874ebcd382e93b2e8df38bd3726e2236f4e9a980720724cf176a35d05fb0db5dbcabd42089423adeb404f2dba16d52b7b' + '8816d3c3767bb02007cc8617b62d21b79c5f224f77c80ebc6b2be6e817571f255ef6901ed4c7461f3d6b24f0ade315c0e07445c13acd8d8db6b01001be498ec2' + 'c414a088350e4b039edf46b109721bea01300ad959b84c313f34d5bc085cab97107abb55a71cb8343f092546e4a36c52febf029ffa7d5bacbd580aee43c07bf3' + '6fc50981ef6ae1c737afcb597241d8e89379072ed495cfcc54ee969125c2de1b1455bc3bada8c0c8c3ec13ab2d1b01bc2f7c31e88fcbc399b21754878b5c325e' + 'd21850ae37faeea3a5c57e5695773d732b0ca4452e0b3a9d35af0ec73879f6f91e98b56d9137eb18f04b5886ded2de10df6f8574f3207800275af04982ebefd1' + 'e78153051c496ad37d55137d8d9cd8782269c9be201feaeb32ed57f547d628810f1fba3d9b6c69cc37b1f9941b155cc9d37ba78b275485d129f3c8bad69d5df7' + '69ccd8122829530bbff2d056cbf2e0a172e1385c46ab666f869a2c11777a8ef458603aadd59f3a044aac429d1f1ca7b0339ea1b968347c44f784a9423aacea58' + 'b0f22c21afcc5942d5cca246875eca23ad5bf0af63b57986b70cefa297f7913dc12269e00e36b6be6b635802b86f2e1aa078c603a0f2d3531321d6a178195c31' + 'f037efd76547eb2bb02a869ca245ea682f0d3321a1dd83d4dadadbda7cd6208c31d977281361b4e683416510be117704038fa54aa9d898e6b6c1168d0b24ecbb' + 'cc9b7e6f775608caa004961805b8817e44a698aaefdc0a05a8410ce6d2e9249b7c4d4ee5c029738bf32486f3e9bb7bd18849542c830a0fb8dd4c587c6d5ac0e5' + '538910b9f74923f89b664b69d710df06280d629c912303fcd9ccca9c8e6d43c7aefd6053ffc615ec0a38d3e0b86e828df7e2ce503b2b889b9c42179453112596' + '3274f91e41b72cd98b6d7962013dd45289952b7af78cc7bc5fe99d4f143434243c8ef0743117d3ec6b090784dfcba8dd460679cc5b49f298ebd8b5afab78a108' + 'e713d0f3d24d73831d9f116d4e15e965c5f09e19b15634e8cbf92714612b0172f24a5c542b3fde09732d17b03d7dac3aaac0d8f4e359a45c1c538970413d6e7c' + '3bf62a71988feff2329e298cee8ce48c636c65100959385b73953c95eea21cb069a7ed096165c252e5ef1db133330da5d095cf5ad145d9875b1197d3b5517b81' + '8c287d6ffcc159f19d934d560e073a716325b6a62d9dea974b92b2d4a417defc4f8441769b4761c5a2600b10a45ff401b0afbab6823880e3d54eab09e22f9859' + 'abe54d9f29b5e6c1a91cba2bb44e0988b7ceb5a94c3f63569f436f49f282b80280cecd79ee48b9926fff458efbdf0fff019b0fdbf6530692a11a68dbec73e7ca' + 'f364161069ceb5d05d329ff04f6e72d2c52baff68d0d3f2203f8a7ee3ace1efe8fc63676ea7d097ccc8eb696dcc20c6b141319ddf0c2bb6efc4fd92cb1dba038' + 'd2f0664cc0388908ec621c84e7f889ef5abda31dc4e4d23e6e379e26475ed73863ad47b2f13d282c96ba269bdbc77e7effaf5f01032d0683ad991b506063ef19' + 'a31d5c685fafbca72fdc5336343b74b90b1bfd5af4b6f632b4d8271bb1a218ec6419a7994290f65e7a5fc36d921c2d3c1a25ddf0cdf29bffb7229229415eaa9f' + '60d57952fb0190e15aac85d9d7e5b589e1a6e781870c35d75327aefc21c8285dffc48aee3b458caee0e8c7704f59e8c8d2596d7126f58944878f905688267b5e' + 'e0fcbfc500f654f0791ca2d240589275e9dd8d97e76e962d0de095e1135880d3f21f5b1a851ec7cac35245d1e92f53758f88cd673e823a975a6c7c3760def24e' + 'ac5f3b731b82a6aa1b89492e8eddf48b1e927b8ec52b24cd1618417cc0edc646e8de5b9d903e965a0e10dbd830fdc3964d753274995a59865a059ce594efb56f' + '5c8210c830afc97e6401e0cda2c7372fcb3f20ed91470258c0ab168410c12664f76c5fc5e23f88c4b2c40dcee1e87e49ad41de4c8a0c409c16d269247ade105c' + '20d7200147de20a0e3a9ce7205b169b4b1a26e05f57d7d44174564e8ce8f5d9ba005b9de9c538e72d48eaac046fc22a56440f4974827c2959a88fcdb6d8355ef' + '0c8b6da6e1fb02b19062d9cde4b35ba55a522285041367d79cd3634ad2887683f27e0cb88f6e8cf044e24da41f0bdcf39d4b77758e7417c57bc4506671235ecb') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + cd SDL-$pkgver + rm -v src/video/fbcon/riva_mmio.h +} + +prepare() { + cd SDL-$pkgver + + if [[ ${pkgver} = ${_debver} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/replace-relicenced-SDL_qsort.patch || true + + quilt push -av + else + patch -Np1 -i ../SDL-1.2.15-no-default-backing-store.patch + patch -Np1 -i ../libsdl-1.2.15-resizing.patch + patch -Np1 -i ../X11_KeyToUnicode.patch + fi + + patch -Np1 -i ../SDL-1.2.10-GrabNotViewable.patch + patch -Np1 -i ../SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch + patch -Np1 -i ../SDL-1.2.15-const_XData32.patch + patch -Np1 -i ../SDL-1.2.15-ignore_insane_joystick_axis.patch + + # https://bugs.freedesktop.org/show_bug.cgi?id=27222 + patch -Np1 -i ../SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch + + patch -Np1 -i ../sdl-1.2.14-fix-mouse-clicking.patch + patch -Np1 -i ../sdl-1.2.14-disable-mmx.patch + + # bunch of CVE fixes from Fedora - Thanks! + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_deco.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7575-Fix-a-buffer-overwrite-in-MS_ADPCM_dec.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7574-Fix-a-buffer-overread-in-IMA_ADPCM_dec.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overread-in-IMA_ADPCM_nib.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overwrite-in-IMA_ADPCM_de.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7573-CVE-2019-7576-Fix-buffer-overreads-in-.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7578-Fix-a-buffer-overread-in-InitIMA_ADPCM.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7638-CVE-2019-7636-Refuse-loading-BMP-image.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7637-Fix-in-integer-overflow-in-SDL_Calcula.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7635-Reject-BMP-images-with-pixel-colors-ou.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-13616-validate_image_size_when_loading_BMP_files.patch + patch -Np1 -i ../SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_nibb.patch + patch -Np1 -i ../SDL-1.2.15-Reject-2-3-5-6-7-bpp-BMP-images.patch + + patch -Np1 -i ../sndio.patch + + patch -Np1 -i ../libre.patch + + ./autogen.sh +} + +build() { + cd SDL-$pkgver + ./configure --prefix=/usr --disable-nasm --enable-alsa \ + --with-x --disable-rpath --disable-static \ + --disable-pulseaudio --disable-pulseaudio-shared \ + --enable-sndio --enable-video-directfb + make +} + +package() { + cd SDL-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/sdl/SDL-1.2.10-GrabNotViewable.patch b/sdl/SDL-1.2.10-GrabNotViewable.patch new file mode 100644 index 0000000..128cf35 --- /dev/null +++ b/sdl/SDL-1.2.10-GrabNotViewable.patch @@ -0,0 +1,22 @@ +Makes SDL-1.2 SDL_WM_GrabInput() non-blocking in case of SDL window is not +viewable. Patch provided by . +See . + +--- ./src/video/x11/SDL_x11wm.c 2007-12-31 04:48:13.000000000 +0000 ++++ ./src/video/x11/SDL_x11wm.c 2009-01-15 10:27:14.000000000 +0000 +@@ -351,13 +351,14 @@ SDL_GrabMode X11_GrabInputNoLock(_THIS, + result = XGrabPointer(SDL_Display, SDL_Window, True, 0, + GrabModeAsync, GrabModeAsync, + SDL_Window, None, CurrentTime); +- if ( result == GrabSuccess ) { ++ if ( result == GrabSuccess || result == GrabNotViewable ) { + break; + } + SDL_Delay(100); + } + if ( result != GrabSuccess ) { + /* Uh, oh, what do we do here? */ ; ++ return(SDL_GRAB_OFF); + } + /* Now grab the keyboard */ + XGrabKeyboard(SDL_Display, WMwindow, True, diff --git a/sdl/SDL-1.2.15-CVE-2019-13616-validate_image_size_when_loading_BMP_files.patch b/sdl/SDL-1.2.15-CVE-2019-13616-validate_image_size_when_loading_BMP_files.patch new file mode 100644 index 0000000..13fa786 --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-13616-validate_image_size_when_loading_BMP_files.patch @@ -0,0 +1,23 @@ +changeset: 12960:ad1bbfbca760 +branch: SDL-1.2 +parent: 12914:87d60cae0273 +user: Ozkan Sezer +date: Tue Jul 30 21:30:24 2019 +0300 +summary: Fixed bug 4538 - validate image size when loading BMP files + +diff -r 87d60cae0273 -r ad1bbfbca760 src/video/SDL_bmp.c +--- a/src/video/SDL_bmp.c Tue Jun 18 23:31:40 2019 +0100 ++++ b/src/video/SDL_bmp.c Tue Jul 30 21:30:24 2019 +0300 +@@ -143,6 +143,11 @@ + (void) biYPelsPerMeter; + (void) biClrImportant; + ++ if (biWidth <= 0 || biHeight == 0) { ++ SDL_SetError("BMP file with bad dimensions (%dx%d)", biWidth, biHeight); ++ was_error = SDL_TRUE; ++ goto done; ++ } + if (biHeight < 0) { + topDown = SDL_TRUE; + biHeight = -biHeight; + diff --git a/sdl/SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overread-in-IMA_ADPCM_nib.patch b/sdl/SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overread-in-IMA_ADPCM_nib.patch new file mode 100644 index 0000000..0f242be --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overread-in-IMA_ADPCM_nib.patch @@ -0,0 +1,59 @@ +From bb11ffcff5ae2f25bead921c2a299e7e63d8a759 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Thu, 14 Feb 2019 16:51:54 +0100 +Subject: [PATCH] CVE-2019-7572: Fix a buffer overread in IMA_ADPCM_nibble +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If an IMA ADPCM block contained an initial index out of step table +range (loaded in IMA_ADPCM_decode()), IMA_ADPCM_nibble() blindly used +this bogus value and that lead to a buffer overread. + +This patch fixes it by moving clamping the index value at the +beginning of IMA_ADPCM_nibble() function instead of the end after +an update. + +CVE-2019-7572 +https://bugzilla.libsdl.org/show_bug.cgi?id=4495 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/audio/SDL_wave.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c +index 2968b3d..69d62dc 100644 +--- a/src/audio/SDL_wave.c ++++ b/src/audio/SDL_wave.c +@@ -275,6 +275,14 @@ static Sint32 IMA_ADPCM_nibble(struct IMA_ADPCM_decodestate *state,Uint8 nybble) + }; + Sint32 delta, step; + ++ /* Clamp index value. The inital value can be invalid. */ ++ if ( state->index > 88 ) { ++ state->index = 88; ++ } else ++ if ( state->index < 0 ) { ++ state->index = 0; ++ } ++ + /* Compute difference and new sample value */ + step = step_table[state->index]; + delta = step >> 3; +@@ -286,12 +294,6 @@ static Sint32 IMA_ADPCM_nibble(struct IMA_ADPCM_decodestate *state,Uint8 nybble) + + /* Update index value */ + state->index += index_table[nybble]; +- if ( state->index > 88 ) { +- state->index = 88; +- } else +- if ( state->index < 0 ) { +- state->index = 0; +- } + + /* Clamp output sample */ + if ( state->sample > max_audioval ) { +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overwrite-in-IMA_ADPCM_de.patch b/sdl/SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overwrite-in-IMA_ADPCM_de.patch new file mode 100644 index 0000000..2c17831 --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7572-Fix-a-buffer-overwrite-in-IMA_ADPCM_de.patch @@ -0,0 +1,64 @@ +From 6086741bda4d43cc227500bc7645a829380e6326 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Fri, 15 Feb 2019 09:21:45 +0100 +Subject: [PATCH] CVE-2019-7572: Fix a buffer overwrite in IMA_ADPCM_decode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If data chunk was longer than expected based on a WAV format +definition, IMA_ADPCM_decode() tried to write past the output +buffer. This patch fixes it. + +Based on patch from +. + +CVE-2019-7572 +https://bugzilla.libsdl.org/show_bug.cgi?id=4495 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/audio/SDL_wave.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c +index 69d62dc..91e89e8 100644 +--- a/src/audio/SDL_wave.c ++++ b/src/audio/SDL_wave.c +@@ -336,7 +336,7 @@ static void Fill_IMA_ADPCM_block(Uint8 *decoded, Uint8 *encoded, + static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + { + struct IMA_ADPCM_decodestate *state; +- Uint8 *freeable, *encoded, *encoded_end, *decoded; ++ Uint8 *freeable, *encoded, *encoded_end, *decoded, *decoded_end; + Sint32 encoded_len, samplesleft; + unsigned int c, channels; + +@@ -363,6 +363,7 @@ static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + return(-1); + } + decoded = *audio_buf; ++ decoded_end = decoded + *audio_len; + + /* Get ready... Go! */ + while ( encoded_len >= IMA_ADPCM_state.wavefmt.blockalign ) { +@@ -382,6 +383,7 @@ static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + } + + /* Store the initial sample we start with */ ++ if (decoded + 2 > decoded_end) goto invalid_size; + decoded[0] = (Uint8)(state[c].sample&0xFF); + decoded[1] = (Uint8)(state[c].sample>>8); + decoded += 2; +@@ -392,6 +394,8 @@ static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + while ( samplesleft > 0 ) { + for ( c=0; c encoded_end) goto invalid_size; ++ if (decoded + 4 * 4 * channels > decoded_end) ++ goto invalid_size; + Fill_IMA_ADPCM_block(decoded, encoded, + c, channels, &state[c]); + encoded += 4; +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7573-CVE-2019-7576-Fix-buffer-overreads-in-.patch b/sdl/SDL-1.2.15-CVE-2019-7573-CVE-2019-7576-Fix-buffer-overreads-in-.patch new file mode 100644 index 0000000..767a3b2 --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7573-CVE-2019-7576-Fix-buffer-overreads-in-.patch @@ -0,0 +1,83 @@ +From 3e2c89e516701f3586dfeadec13932f665371d2a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Fri, 15 Feb 2019 10:36:13 +0100 +Subject: [PATCH] CVE-2019-7573, CVE-2019-7576: Fix buffer overreads in + InitMS_ADPCM +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If MS ADPCM format chunk was too short, InitMS_ADPCM() parsing it +could read past the end of chunk data. This patch fixes it. + +CVE-2019-7573 +https://bugzilla.libsdl.org/show_bug.cgi?id=4491 +CVE-2019-7576 +https://bugzilla.libsdl.org/show_bug.cgi?id=4490 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/audio/SDL_wave.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c +index 91e89e8..1d446ed 100644 +--- a/src/audio/SDL_wave.c ++++ b/src/audio/SDL_wave.c +@@ -44,12 +44,13 @@ static struct MS_ADPCM_decoder { + struct MS_ADPCM_decodestate state[2]; + } MS_ADPCM_state; + +-static int InitMS_ADPCM(WaveFMT *format) ++static int InitMS_ADPCM(WaveFMT *format, int length) + { +- Uint8 *rogue_feel; ++ Uint8 *rogue_feel, *rogue_feel_end; + int i; + + /* Set the rogue pointer to the MS_ADPCM specific data */ ++ if (length < sizeof(*format)) goto too_short; + MS_ADPCM_state.wavefmt.encoding = SDL_SwapLE16(format->encoding); + MS_ADPCM_state.wavefmt.channels = SDL_SwapLE16(format->channels); + MS_ADPCM_state.wavefmt.frequency = SDL_SwapLE32(format->frequency); +@@ -58,9 +59,11 @@ static int InitMS_ADPCM(WaveFMT *format) + MS_ADPCM_state.wavefmt.bitspersample = + SDL_SwapLE16(format->bitspersample); + rogue_feel = (Uint8 *)format+sizeof(*format); ++ rogue_feel_end = (Uint8 *)format + length; + if ( sizeof(*format) == 16 ) { + rogue_feel += sizeof(Uint16); + } ++ if (rogue_feel + 4 > rogue_feel_end) goto too_short; + MS_ADPCM_state.wSamplesPerBlock = ((rogue_feel[1]<<8)|rogue_feel[0]); + rogue_feel += sizeof(Uint16); + MS_ADPCM_state.wNumCoef = ((rogue_feel[1]<<8)|rogue_feel[0]); +@@ -70,12 +73,16 @@ static int InitMS_ADPCM(WaveFMT *format) + return(-1); + } + for ( i=0; i rogue_feel_end) goto too_short; + MS_ADPCM_state.aCoeff[i][0] = ((rogue_feel[1]<<8)|rogue_feel[0]); + rogue_feel += sizeof(Uint16); + MS_ADPCM_state.aCoeff[i][1] = ((rogue_feel[1]<<8)|rogue_feel[0]); + rogue_feel += sizeof(Uint16); + } + return(0); ++too_short: ++ SDL_SetError("Unexpected length of a chunk with a MS ADPCM format"); ++ return(-1); + } + + static Sint32 MS_ADPCM_nibble(struct MS_ADPCM_decodestate *state, +@@ -485,7 +492,7 @@ SDL_AudioSpec * SDL_LoadWAV_RW (SDL_RWops *src, int freesrc, + break; + case MS_ADPCM_CODE: + /* Try to understand this */ +- if ( InitMS_ADPCM(format) < 0 ) { ++ if ( InitMS_ADPCM(format, lenread) < 0 ) { + was_error = 1; + goto done; + } +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7574-Fix-a-buffer-overread-in-IMA_ADPCM_dec.patch b/sdl/SDL-1.2.15-CVE-2019-7574-Fix-a-buffer-overread-in-IMA_ADPCM_dec.patch new file mode 100644 index 0000000..0bae80f --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7574-Fix-a-buffer-overread-in-IMA_ADPCM_dec.patch @@ -0,0 +1,71 @@ +From 9b2eee24768889378032077423cb6a3221a8ad18 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Thu, 14 Feb 2019 15:41:47 +0100 +Subject: [PATCH] CVE-2019-7574: Fix a buffer overread in IMA_ADPCM_decode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If data chunk was shorter than expected based on a WAV format +definition, IMA_ADPCM_decode() tried to read past the data chunk +buffer. This patch fixes it. + +CVE-2019-7574 +https://bugzilla.libsdl.org/show_bug.cgi?id=4496 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/audio/SDL_wave.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c +index b6c49de..2968b3d 100644 +--- a/src/audio/SDL_wave.c ++++ b/src/audio/SDL_wave.c +@@ -334,7 +334,7 @@ static void Fill_IMA_ADPCM_block(Uint8 *decoded, Uint8 *encoded, + static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + { + struct IMA_ADPCM_decodestate *state; +- Uint8 *freeable, *encoded, *decoded; ++ Uint8 *freeable, *encoded, *encoded_end, *decoded; + Sint32 encoded_len, samplesleft; + unsigned int c, channels; + +@@ -350,6 +350,7 @@ static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + /* Allocate the proper sized output buffer */ + encoded_len = *audio_len; + encoded = *audio_buf; ++ encoded_end = encoded + encoded_len; + freeable = *audio_buf; + *audio_len = (encoded_len/IMA_ADPCM_state.wavefmt.blockalign) * + IMA_ADPCM_state.wSamplesPerBlock* +@@ -365,6 +366,7 @@ static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + while ( encoded_len >= IMA_ADPCM_state.wavefmt.blockalign ) { + /* Grab the initial information for this block */ + for ( c=0; c encoded_end) goto invalid_size; + /* Fill the state information for this block */ + state[c].sample = ((encoded[1]<<8)|encoded[0]); + encoded += 2; +@@ -387,6 +389,7 @@ static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + samplesleft = (IMA_ADPCM_state.wSamplesPerBlock-1)*channels; + while ( samplesleft > 0 ) { + for ( c=0; c encoded_end) goto invalid_size; + Fill_IMA_ADPCM_block(decoded, encoded, + c, channels, &state[c]); + encoded += 4; +@@ -398,6 +401,10 @@ static int IMA_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + } + SDL_free(freeable); + return(0); ++invalid_size: ++ SDL_SetError("Unexpected chunk length for an IMA ADPCM decoder"); ++ SDL_free(freeable); ++ return(-1); + } + + SDL_AudioSpec * SDL_LoadWAV_RW (SDL_RWops *src, int freesrc, +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7575-Fix-a-buffer-overwrite-in-MS_ADPCM_dec.patch b/sdl/SDL-1.2.15-CVE-2019-7575-Fix-a-buffer-overwrite-in-MS_ADPCM_dec.patch new file mode 100644 index 0000000..53965aa --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7575-Fix-a-buffer-overwrite-in-MS_ADPCM_dec.patch @@ -0,0 +1,84 @@ +From e1f80cadb079e35103e6eebf160a818815c823df Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Thu, 14 Feb 2019 14:51:52 +0100 +Subject: [PATCH] CVE-2019-7575: Fix a buffer overwrite in MS_ADPCM_decode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If a WAV format defines shorter audio stream and decoded MS ADPCM data chunk +is longer, decoding continued past the output audio buffer. + +This fix is based on a patch from +. + +https://bugzilla.libsdl.org/show_bug.cgi?id=4493 +CVE-2019-7575 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/audio/SDL_wave.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c +index e42d01c..b6c49de 100644 +--- a/src/audio/SDL_wave.c ++++ b/src/audio/SDL_wave.c +@@ -115,7 +115,7 @@ static Sint32 MS_ADPCM_nibble(struct MS_ADPCM_decodestate *state, + static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + { + struct MS_ADPCM_decodestate *state[2]; +- Uint8 *freeable, *encoded, *encoded_end, *decoded; ++ Uint8 *freeable, *encoded, *encoded_end, *decoded, *decoded_end; + Sint32 encoded_len, samplesleft; + Sint8 nybble, stereo; + Sint16 *coeff[2]; +@@ -135,6 +135,7 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + return(-1); + } + decoded = *audio_buf; ++ decoded_end = decoded + *audio_len; + + /* Get ready... Go! */ + stereo = (MS_ADPCM_state.wavefmt.channels == 2); +@@ -142,7 +143,7 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + state[1] = &MS_ADPCM_state.state[stereo]; + while ( encoded_len >= MS_ADPCM_state.wavefmt.blockalign ) { + /* Grab the initial information for this block */ +- if (encoded + 7 + (stereo ? 7 : 0) > encoded_end) goto too_short; ++ if (encoded + 7 + (stereo ? 7 : 0) > encoded_end) goto invalid_size; + state[0]->hPredictor = *encoded++; + if ( stereo ) { + state[1]->hPredictor = *encoded++; +@@ -169,6 +170,7 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + coeff[1] = MS_ADPCM_state.aCoeff[state[1]->hPredictor]; + + /* Store the two initial samples we start with */ ++ if (decoded + 4 + (stereo ? 4 : 0) > decoded_end) goto invalid_size; + decoded[0] = state[0]->iSamp2&0xFF; + decoded[1] = state[0]->iSamp2>>8; + decoded += 2; +@@ -190,7 +192,8 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + samplesleft = (MS_ADPCM_state.wSamplesPerBlock-2)* + MS_ADPCM_state.wavefmt.channels; + while ( samplesleft > 0 ) { +- if (encoded + 1 > encoded_end) goto too_short; ++ if (encoded + 1 > encoded_end) goto invalid_size; ++ if (decoded + 4 > decoded_end) goto invalid_size; + + nybble = (*encoded)>>4; + new_sample = MS_ADPCM_nibble(state[0],nybble,coeff[0]); +@@ -213,8 +216,8 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + } + SDL_free(freeable); + return(0); +-too_short: +- SDL_SetError("Too short chunk for a MS ADPCM decoder"); ++invalid_size: ++ SDL_SetError("Unexpected chunk length for a MS ADPCM decoder"); + SDL_free(freeable); + return(-1); + } +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_deco.patch b/sdl/SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_deco.patch new file mode 100644 index 0000000..23cbf98 --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_deco.patch @@ -0,0 +1,75 @@ +From ac3d0d365b1f01a6782565feda0c7432a5795671 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Thu, 14 Feb 2019 14:12:22 +0100 +Subject: [PATCH] CVE-2019-7577: Fix a buffer overread in MS_ADPCM_decode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If RIFF/WAV data chunk length is shorter then expected for an audio +format defined in preceeding RIFF/WAV format headers, a buffer +overread can happen. + +This patch fixes it by checking a MS ADPCM data to be decoded are not +past the initialized buffer. + +CVE-2019-7577 +Reproducer: https://bugzilla.libsdl.org/show_bug.cgi?id=4492 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/audio/SDL_wave.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c +index b4ad6c7..e42d01c 100644 +--- a/src/audio/SDL_wave.c ++++ b/src/audio/SDL_wave.c +@@ -115,7 +115,7 @@ static Sint32 MS_ADPCM_nibble(struct MS_ADPCM_decodestate *state, + static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + { + struct MS_ADPCM_decodestate *state[2]; +- Uint8 *freeable, *encoded, *decoded; ++ Uint8 *freeable, *encoded, *encoded_end, *decoded; + Sint32 encoded_len, samplesleft; + Sint8 nybble, stereo; + Sint16 *coeff[2]; +@@ -124,6 +124,7 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + /* Allocate the proper sized output buffer */ + encoded_len = *audio_len; + encoded = *audio_buf; ++ encoded_end = encoded + encoded_len; + freeable = *audio_buf; + *audio_len = (encoded_len/MS_ADPCM_state.wavefmt.blockalign) * + MS_ADPCM_state.wSamplesPerBlock* +@@ -141,6 +142,7 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + state[1] = &MS_ADPCM_state.state[stereo]; + while ( encoded_len >= MS_ADPCM_state.wavefmt.blockalign ) { + /* Grab the initial information for this block */ ++ if (encoded + 7 + (stereo ? 7 : 0) > encoded_end) goto too_short; + state[0]->hPredictor = *encoded++; + if ( stereo ) { + state[1]->hPredictor = *encoded++; +@@ -188,6 +190,8 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + samplesleft = (MS_ADPCM_state.wSamplesPerBlock-2)* + MS_ADPCM_state.wavefmt.channels; + while ( samplesleft > 0 ) { ++ if (encoded + 1 > encoded_end) goto too_short; ++ + nybble = (*encoded)>>4; + new_sample = MS_ADPCM_nibble(state[0],nybble,coeff[0]); + decoded[0] = new_sample&0xFF; +@@ -209,6 +213,10 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + } + SDL_free(freeable); + return(0); ++too_short: ++ SDL_SetError("Too short chunk for a MS ADPCM decoder"); ++ SDL_free(freeable); ++ return(-1); + } + + struct IMA_ADPCM_decodestate { +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_nibb.patch b/sdl/SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_nibb.patch new file mode 100644 index 0000000..06b429c --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7577-Fix-a-buffer-overread-in-MS_ADPCM_nibb.patch @@ -0,0 +1,57 @@ +From 69cd6157644cb0a5c9edd7b5920232c2ca31c151 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 12 Mar 2019 16:21:41 +0100 +Subject: [PATCH] CVE-2019-7577: Fix a buffer overread in MS_ADPCM_nibble and + MS_ADPCM_decode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If a chunk of RIFF/WAV file with MS ADPCM encoding contains an invalid +predictor (a valid predictor's value is between 0 and 6 inclusive), +a buffer overread can happen when the predictor is used as an index +into an array of MS ADPCM coefficients. + +The overead happens when indexing MS_ADPCM_state.aCoeff[] array in +MS_ADPCM_decode() and later when dereferencing a coef pointer in +MS_ADPCM_nibble(). + +This patch fixes it by checking the MS ADPCM predictor values fit +into the valid range. + +CVE-2019-7577 +Reproducer: https://bugzilla.libsdl.org/show_bug.cgi?id=4492 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/audio/SDL_wave.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c +index 08f65cb..5f93651 100644 +--- a/src/audio/SDL_wave.c ++++ b/src/audio/SDL_wave.c +@@ -155,6 +155,9 @@ static int MS_ADPCM_decode(Uint8 **audio_buf, Uint32 *audio_len) + if ( stereo ) { + state[1]->hPredictor = *encoded++; + } ++ if (state[0]->hPredictor >= 7 || state[1]->hPredictor >= 7) { ++ goto invalid_predictor; ++ } + state[0]->iDelta = ((encoded[1]<<8)|encoded[0]); + encoded += sizeof(Sint16); + if ( stereo ) { +@@ -227,6 +230,10 @@ invalid_size: + SDL_SetError("Unexpected chunk length for a MS ADPCM decoder"); + SDL_free(freeable); + return(-1); ++invalid_predictor: ++ SDL_SetError("Invalid predictor value for a MS ADPCM decoder"); ++ SDL_free(freeable); ++ return(-1); + } + + struct IMA_ADPCM_decodestate { +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7578-Fix-a-buffer-overread-in-InitIMA_ADPCM.patch b/sdl/SDL-1.2.15-CVE-2019-7578-Fix-a-buffer-overread-in-InitIMA_ADPCM.patch new file mode 100644 index 0000000..b0a89de --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7578-Fix-a-buffer-overread-in-InitIMA_ADPCM.patch @@ -0,0 +1,67 @@ +From 0eb76f6cabcffa2104e34c26e0f41e6de95356ff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Fri, 15 Feb 2019 10:56:59 +0100 +Subject: [PATCH] CVE-2019-7578: Fix a buffer overread in InitIMA_ADPCM +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If IMA ADPCM format chunk was too short, InitIMA_ADPCM() parsing it +could read past the end of chunk data. This patch fixes it. + +CVE-2019-7578 +https://bugzilla.libsdl.org/show_bug.cgi?id=4494 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/audio/SDL_wave.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/src/audio/SDL_wave.c b/src/audio/SDL_wave.c +index 1d446ed..08f65cb 100644 +--- a/src/audio/SDL_wave.c ++++ b/src/audio/SDL_wave.c +@@ -240,11 +240,12 @@ static struct IMA_ADPCM_decoder { + struct IMA_ADPCM_decodestate state[2]; + } IMA_ADPCM_state; + +-static int InitIMA_ADPCM(WaveFMT *format) ++static int InitIMA_ADPCM(WaveFMT *format, int length) + { +- Uint8 *rogue_feel; ++ Uint8 *rogue_feel, *rogue_feel_end; + + /* Set the rogue pointer to the IMA_ADPCM specific data */ ++ if (length < sizeof(*format)) goto too_short; + IMA_ADPCM_state.wavefmt.encoding = SDL_SwapLE16(format->encoding); + IMA_ADPCM_state.wavefmt.channels = SDL_SwapLE16(format->channels); + IMA_ADPCM_state.wavefmt.frequency = SDL_SwapLE32(format->frequency); +@@ -253,11 +254,16 @@ static int InitIMA_ADPCM(WaveFMT *format) + IMA_ADPCM_state.wavefmt.bitspersample = + SDL_SwapLE16(format->bitspersample); + rogue_feel = (Uint8 *)format+sizeof(*format); ++ rogue_feel_end = (Uint8 *)format + length; + if ( sizeof(*format) == 16 ) { + rogue_feel += sizeof(Uint16); + } ++ if (rogue_feel + 2 > rogue_feel_end) goto too_short; + IMA_ADPCM_state.wSamplesPerBlock = ((rogue_feel[1]<<8)|rogue_feel[0]); + return(0); ++too_short: ++ SDL_SetError("Unexpected length of a chunk with an IMA ADPCM format"); ++ return(-1); + } + + static Sint32 IMA_ADPCM_nibble(struct IMA_ADPCM_decodestate *state,Uint8 nybble) +@@ -500,7 +506,7 @@ SDL_AudioSpec * SDL_LoadWAV_RW (SDL_RWops *src, int freesrc, + break; + case IMA_ADPCM_CODE: + /* Try to understand this */ +- if ( InitIMA_ADPCM(format) < 0 ) { ++ if ( InitIMA_ADPCM(format, lenread) < 0 ) { + was_error = 1; + goto done; + } +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7635-Reject-BMP-images-with-pixel-colors-ou.patch b/sdl/SDL-1.2.15-CVE-2019-7635-Reject-BMP-images-with-pixel-colors-ou.patch new file mode 100644 index 0000000..fb899d5 --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7635-Reject-BMP-images-with-pixel-colors-ou.patch @@ -0,0 +1,67 @@ +From beef32b0e510371f3c968d22a1e3d48abbf366c6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 19 Feb 2019 14:52:52 +0100 +Subject: [PATCH] CVE-2019-7635: Reject BMP images with pixel colors out the + palette +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If a 1-, 4-, or 8-bit per pixel BMP image declares less used colors +than the palette offers an SDL_Surface with a palette of the indicated +number of used colors is created. If some of the image's pixel +refer to a color number higher then the maximal used colors, a subsequent +bliting operation on the surface will look up a color past a blit map +(that is based on the palette) memory. I.e. passing such SDL_Surface +to e.g. an SDL_DisplayFormat() function will result in a buffer overread in +a blit function. + +This patch fixes it by validing each pixel's color to be less than the +maximal color number in the palette. A validation failure raises an +error from a SDL_LoadBMP_RW() function. + +CVE-2019-7635 +https://bugzilla.libsdl.org/show_bug.cgi?id=4498 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/video/SDL_bmp.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/src/video/SDL_bmp.c b/src/video/SDL_bmp.c +index 3accded..8eadc5f 100644 +--- a/src/video/SDL_bmp.c ++++ b/src/video/SDL_bmp.c +@@ -300,6 +300,12 @@ SDL_Surface * SDL_LoadBMP_RW (SDL_RWops *src, int freesrc) + } + *(bits+i) = (pixel>>shift); + pixel <<= ExpandBMP; ++ if ( bits[i] >= biClrUsed ) { ++ SDL_SetError( ++ "A BMP image contains a pixel with a color out of the palette"); ++ was_error = SDL_TRUE; ++ goto done; ++ } + } } + break; + +@@ -310,6 +316,16 @@ SDL_Surface * SDL_LoadBMP_RW (SDL_RWops *src, int freesrc) + was_error = SDL_TRUE; + goto done; + } ++ if ( 8 == biBitCount && palette && biClrUsed < (1 << biBitCount ) ) { ++ for ( i=0; iw; ++i ) { ++ if ( bits[i] >= biClrUsed ) { ++ SDL_SetError( ++ "A BMP image contains a pixel with a color out of the palette"); ++ was_error = SDL_TRUE; ++ goto done; ++ } ++ } ++ } + #if SDL_BYTEORDER == SDL_BIG_ENDIAN + /* Byte-swap the pixels if needed. Note that the 24bpp + case has already been taken care of above. */ +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7637-Fix-in-integer-overflow-in-SDL_Calcula.patch b/sdl/SDL-1.2.15-CVE-2019-7637-Fix-in-integer-overflow-in-SDL_Calcula.patch new file mode 100644 index 0000000..44197df --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7637-Fix-in-integer-overflow-in-SDL_Calcula.patch @@ -0,0 +1,209 @@ +From cc50d843089c8cf386c3e0f9cb2fae0b258a9b7b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 18 Feb 2019 13:53:16 +0100 +Subject: [PATCH] CVE-2019-7637: Fix in integer overflow in SDL_CalculatePitch +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If a too large width is passed to SDL_SetVideoMode() the width travels +to SDL_CalculatePitch() where the width (e.g. 65535) is multiplied by +BytesPerPixel (e.g. 4) and the result is stored into Uint16 pitch +variable. During this arithmetics an integer overflow can happen (e.g. +the value is clamped as 65532). As a result SDL_Surface with a pitch +smaller than width * BytesPerPixel is created, too small pixel buffer +is allocated and when the SDL_Surface is processed in SDL_FillRect() +a buffer overflow occurs. + +This can be reproduced with "./graywin -width 21312312313123213213213" +command. + +This patch fixes is by using a very careful arithmetics in +SDL_CalculatePitch(). If an overflow is detected, an error is reported +back as a special 0 value. We assume that 0-width surfaces do not +occur in the wild. Since SDL_CalculatePitch() is a private function, +we can change the semantics. + +CVE-2019-7637 +https://bugzilla.libsdl.org/show_bug.cgi?id=4497 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/video/SDL_pixels.c | 41 +++++++++++++++++++++++++++------ + src/video/gapi/SDL_gapivideo.c | 3 +++ + src/video/nanox/SDL_nxvideo.c | 4 ++++ + src/video/ps2gs/SDL_gsvideo.c | 3 +++ + src/video/ps3/SDL_ps3video.c | 3 +++ + src/video/windib/SDL_dibvideo.c | 3 +++ + src/video/windx5/SDL_dx5video.c | 3 +++ + src/video/x11/SDL_x11video.c | 4 ++++ + 8 files changed, 57 insertions(+), 7 deletions(-) + +diff --git a/src/video/SDL_pixels.c b/src/video/SDL_pixels.c +index 1a7fd51..44626b7 100644 +--- a/src/video/SDL_pixels.c ++++ b/src/video/SDL_pixels.c +@@ -286,26 +286,53 @@ void SDL_DitherColors(SDL_Color *colors, int bpp) + } + } + /* +- * Calculate the pad-aligned scanline width of a surface ++ * Calculate the pad-aligned scanline width of a surface. Return 0 in case of ++ * an error. + */ + Uint16 SDL_CalculatePitch(SDL_Surface *surface) + { +- Uint16 pitch; ++ unsigned int pitch = 0; + + /* Surface should be 4-byte aligned for speed */ +- pitch = surface->w*surface->format->BytesPerPixel; ++ /* The code tries to prevent from an Uint16 overflow. */; ++ for (Uint8 byte = surface->format->BytesPerPixel; byte; byte--) { ++ pitch += (unsigned int)surface->w; ++ if (pitch < surface->w) { ++ SDL_SetError("A scanline is too wide"); ++ return(0); ++ } ++ } + switch (surface->format->BitsPerPixel) { + case 1: +- pitch = (pitch+7)/8; ++ if (pitch % 8) { ++ pitch = pitch / 8 + 1; ++ } else { ++ pitch = pitch / 8; ++ } + break; + case 4: +- pitch = (pitch+1)/2; ++ if (pitch % 2) { ++ pitch = pitch / 2 + 1; ++ } else { ++ pitch = pitch / 2; ++ } + break; + default: + break; + } +- pitch = (pitch + 3) & ~3; /* 4-byte aligning */ +- return(pitch); ++ /* 4-byte aligning */ ++ if (pitch & 3) { ++ if (pitch + 3 < pitch) { ++ SDL_SetError("A scanline is too wide"); ++ return(0); ++ } ++ pitch = (pitch + 3) & ~3; ++ } ++ if (pitch > 0xFFFF) { ++ SDL_SetError("A scanline is too wide"); ++ return(0); ++ } ++ return((Uint16)pitch); + } + /* + * Match an RGB value to a particular palette index +diff --git a/src/video/gapi/SDL_gapivideo.c b/src/video/gapi/SDL_gapivideo.c +index 86deadc..8a06485 100644 +--- a/src/video/gapi/SDL_gapivideo.c ++++ b/src/video/gapi/SDL_gapivideo.c +@@ -733,6 +733,9 @@ SDL_Surface *GAPI_SetVideoMode(_THIS, SDL_Surface *current, + video->w = gapi->w = width; + video->h = gapi->h = height; + video->pitch = SDL_CalculatePitch(video); ++ if (!current->pitch) { ++ return(NULL); ++ } + + /* Small fix for WinCE/Win32 - when activating window + SDL_VideoSurface is equal to zero, so activating code +diff --git a/src/video/nanox/SDL_nxvideo.c b/src/video/nanox/SDL_nxvideo.c +index b188e09..cbdd09a 100644 +--- a/src/video/nanox/SDL_nxvideo.c ++++ b/src/video/nanox/SDL_nxvideo.c +@@ -378,6 +378,10 @@ SDL_Surface * NX_SetVideoMode (_THIS, SDL_Surface * current, + current -> w = width ; + current -> h = height ; + current -> pitch = SDL_CalculatePitch (current) ; ++ if (!current->pitch) { ++ current = NULL; ++ goto done; ++ } + NX_ResizeImage (this, current, flags) ; + } + +diff --git a/src/video/ps2gs/SDL_gsvideo.c b/src/video/ps2gs/SDL_gsvideo.c +index e172c60..3290866 100644 +--- a/src/video/ps2gs/SDL_gsvideo.c ++++ b/src/video/ps2gs/SDL_gsvideo.c +@@ -479,6 +479,9 @@ static SDL_Surface *GS_SetVideoMode(_THIS, SDL_Surface *current, + current->w = width; + current->h = height; + current->pitch = SDL_CalculatePitch(current); ++ if (!current->pitch) { ++ return(NULL); ++ } + + /* Memory map the DMA area for block memory transfer */ + if ( ! mapped_mem ) { +diff --git a/src/video/ps3/SDL_ps3video.c b/src/video/ps3/SDL_ps3video.c +index d5519e0..17848e3 100644 +--- a/src/video/ps3/SDL_ps3video.c ++++ b/src/video/ps3/SDL_ps3video.c +@@ -339,6 +339,9 @@ static SDL_Surface *PS3_SetVideoMode(_THIS, SDL_Surface * current, int width, in + current->w = width; + current->h = height; + current->pitch = SDL_CalculatePitch(current); ++ if (!current->pitch) { ++ return(NULL); ++ } + + /* Alloc aligned mem for current->pixels */ + s_pixels = memalign(16, current->h * current->pitch); +diff --git a/src/video/windib/SDL_dibvideo.c b/src/video/windib/SDL_dibvideo.c +index 6187bfc..86ebb12 100644 +--- a/src/video/windib/SDL_dibvideo.c ++++ b/src/video/windib/SDL_dibvideo.c +@@ -675,6 +675,9 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current, + video->w = width; + video->h = height; + video->pitch = SDL_CalculatePitch(video); ++ if (!current->pitch) { ++ return(NULL); ++ } + + /* Small fix for WinCE/Win32 - when activating window + SDL_VideoSurface is equal to zero, so activating code +diff --git a/src/video/windx5/SDL_dx5video.c b/src/video/windx5/SDL_dx5video.c +index f80ca97..39fc4fc 100644 +--- a/src/video/windx5/SDL_dx5video.c ++++ b/src/video/windx5/SDL_dx5video.c +@@ -1127,6 +1127,9 @@ SDL_Surface *DX5_SetVideoMode(_THIS, SDL_Surface *current, + video->w = width; + video->h = height; + video->pitch = SDL_CalculatePitch(video); ++ if (!current->pitch) { ++ return(NULL); ++ } + + #ifndef NO_CHANGEDISPLAYSETTINGS + /* Set fullscreen mode if appropriate. +diff --git a/src/video/x11/SDL_x11video.c b/src/video/x11/SDL_x11video.c +index 79e60f9..45d1f79 100644 +--- a/src/video/x11/SDL_x11video.c ++++ b/src/video/x11/SDL_x11video.c +@@ -1220,6 +1220,10 @@ SDL_Surface *X11_SetVideoMode(_THIS, SDL_Surface *current, + current->w = width; + current->h = height; + current->pitch = SDL_CalculatePitch(current); ++ if (!current->pitch) { ++ current = NULL; ++ goto done; ++ } + if (X11_ResizeImage(this, current, flags) < 0) { + current = NULL; + goto done; +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-CVE-2019-7638-CVE-2019-7636-Refuse-loading-BMP-image.patch b/sdl/SDL-1.2.15-CVE-2019-7638-CVE-2019-7636-Refuse-loading-BMP-image.patch new file mode 100644 index 0000000..34d7cc0 --- /dev/null +++ b/sdl/SDL-1.2.15-CVE-2019-7638-CVE-2019-7636-Refuse-loading-BMP-image.patch @@ -0,0 +1,56 @@ +From 28b1433b4bd7982524f2418420e8cc01786df5c4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Fri, 15 Feb 2019 16:52:27 +0100 +Subject: [PATCH] CVE-2019-7638, CVE-2019-7636: Refuse loading BMP images with + too high number of colors +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +If a BMP file that defines more colors than can fit into +a palette of color depth defined in the same BMP file is loaded by +SDL_LoadBMP_RW() function, invalid number of colors is set into +resulting SDL surface. + +Then if the SDL surface is passed to SDL_DisplayFormat() function to +convert the surface format into a native video format, a buffer +overread will happen in Map1to1() or Map1toN() function +(CVE-2019-7638). (The choice of the mapping function depends on +a actual video hardware.) + +In addition SDL_GetRGB() called indirectly from SDL_DisplayFormat() +performs the same buffer overread (CVE-2019-7636). + +There is also probably a buffer overwrite when the SDL_LoadBMP_RW() +loads colors from a file. + +This patch fixes it by refusing loading such badly damaged BMP files. + +CVE-2019-7638 +https://bugzilla.libsdl.org/show_bug.cgi?id=4500 +CVE-2019-7636 +https://bugzilla.libsdl.org/show_bug.cgi?id=4499 + +Signed-off-by: Petr PĂ­saĹ™ +--- + src/video/SDL_bmp.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/video/SDL_bmp.c b/src/video/SDL_bmp.c +index d56cfd8..3accded 100644 +--- a/src/video/SDL_bmp.c ++++ b/src/video/SDL_bmp.c +@@ -233,6 +233,10 @@ SDL_Surface * SDL_LoadBMP_RW (SDL_RWops *src, int freesrc) + if ( palette ) { + if ( biClrUsed == 0 ) { + biClrUsed = 1 << biBitCount; ++ } else if ( biClrUsed > (1 << biBitCount) ) { ++ SDL_SetError("BMP file has an invalid number of colors"); ++ was_error = SDL_TRUE; ++ goto done; + } + if ( biSize == 12 ) { + for ( i = 0; i < (int)biClrUsed; ++i ) { +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-Reject-2-3-5-6-7-bpp-BMP-images.patch b/sdl/SDL-1.2.15-Reject-2-3-5-6-7-bpp-BMP-images.patch new file mode 100644 index 0000000..a590606 --- /dev/null +++ b/sdl/SDL-1.2.15-Reject-2-3-5-6-7-bpp-BMP-images.patch @@ -0,0 +1,42 @@ +From 70c3d0e97755e1b208ceba2ae012877797f15627 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Thu, 21 Feb 2019 10:57:41 +0100 +Subject: [PATCH] Reject 2, 3, 5, 6, 7-bpp BMP images +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +BMP decoder assumes less than 8 bit depth images have 1 or 4 bits +per pixel. No other depths are correctly translated to an 8bpp +surface. + +This patch rejects loading these images. + +https://bugzilla.libsdl.org/show_bug.cgi?id=4498 +Signed-off-by: Petr PĂ­saĹ™ +--- + src/video/SDL_bmp.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/video/SDL_bmp.c b/src/video/SDL_bmp.c +index 8eadc5f..758d4bb 100644 +--- a/src/video/SDL_bmp.c ++++ b/src/video/SDL_bmp.c +@@ -163,6 +163,14 @@ SDL_Surface * SDL_LoadBMP_RW (SDL_RWops *src, int freesrc) + ExpandBMP = biBitCount; + biBitCount = 8; + break; ++ case 2: ++ case 3: ++ case 5: ++ case 6: ++ case 7: ++ SDL_SetError("%d-bpp BMP images are not supported", biBitCount); ++ was_error = SDL_TRUE; ++ goto done; + default: + ExpandBMP = 0; + break; +-- +2.20.1 + diff --git a/sdl/SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch b/sdl/SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch new file mode 100644 index 0000000..fdf910e --- /dev/null +++ b/sdl/SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch @@ -0,0 +1,73 @@ +# HG changeset patch +# User Sam Lantinga +# Date 1397799374 25200 +# Thu Apr 17 22:36:14 2014 -0700 +# Branch SDL-1.2 +# Node ID 0aade9c0203f717fe4b823a176c3c040f1a709f8 +# Parent 22a7f096bb9d4d596f35a93e33608825693462b0 +Fixed bug 2325 - SDL_EnableUNICODE sometimes drops keyboard events completely + +RafaĹ‚ MuĹĽyĹ‚o + +The most annoying part of this bug is that though I've found it in two separate apps, I don't have a trivial testcase for it. + +The problem seems to be a condition race, as it's triggered quite randomly (therefore it will be hard to tell whether it really gets fixed, if a probable fix is found). + +While it's specific to SDL 1.2, it seems quite similar to the problem described and fixed in http://forums.libsdl.org/viewtopic.php?p=40503. + +Now, I should start describing the problem. + +A game uses Escape to open menu (the exact key might not be important). Upon opening, it calls SDL_EnableUNICODE(1). Upon closing it calls SDL_EnableUNICODE(0). + +I have an IME running. + +Game uses SDL_PollEvent to get the events. + +If Escape is pressed repeatedly, menu is opened and closed, till it eventually freezes in open state. +"freezes" in this context means "app itself still runs, but no keyboard events are getting delivered (though - for example - mouse events still are)". "getting delivered" should mean "SDL_PollEvent is not receiving any". +If it matters, the last delivered keyboard event is a keypress, the release never arrives. + +It seems (no guarantees, due to random nature of the freeze) that unsetting XMODIFIERS (which - AFAIU - will disable IME as far as SDL is concerned) prevents the freeze, therefore the reference to that SDL2 thread. + +diff -r 22a7f096bb9d -r 0aade9c0203f src/video/x11/SDL_x11events.c +--- a/src/video/x11/SDL_x11events.c Sun Dec 01 00:00:17 2013 -0500 ++++ b/src/video/x11/SDL_x11events.c Thu Apr 17 22:36:14 2014 -0700 +@@ -395,6 +395,8 @@ + { + int posted; + XEvent xevent; ++ int orig_event_type; ++ KeyCode orig_keycode; + + SDL_memset(&xevent, '\0', sizeof (XEvent)); /* valgrind fix. --ryan. */ + XNextEvent(SDL_Display, &xevent); +@@ -410,9 +412,29 @@ + #ifdef X_HAVE_UTF8_STRING + /* If we are translating with IM, we need to pass all events + to XFilterEvent, and discard those filtered events immediately. */ ++ orig_event_type = xevent.type; ++ if (orig_event_type == KeyPress || orig_event_type == KeyRelease) { ++ orig_keycode = xevent.xkey.keycode; ++ } else { ++ orig_keycode = 0; ++ } + if ( SDL_TranslateUNICODE + && SDL_IM != NULL + && XFilterEvent(&xevent, None) ) { ++ if (orig_keycode) { ++ SDL_keysym keysym; ++ static XComposeStatus state; ++ char keybuf[32]; ++ ++ keysym.scancode = xevent.xkey.keycode; ++ keysym.sym = X11_TranslateKeycode(SDL_Display, xevent.xkey.keycode); ++ keysym.mod = KMOD_NONE; ++ keysym.unicode = 0; ++ if (orig_event_type == KeyPress && XLookupString(&xevent.xkey, keybuf, sizeof(keybuf), NULL, &state)) ++ keysym.unicode = (Uint8)keybuf[0]; ++ ++ SDL_PrivateKeyboard(orig_event_type == KeyPress ? SDL_PRESSED : SDL_RELEASED, &keysym); ++ } + return 0; + } + #endif diff --git a/sdl/SDL-1.2.15-const_XData32.patch b/sdl/SDL-1.2.15-const_XData32.patch new file mode 100644 index 0000000..0f1c07c --- /dev/null +++ b/sdl/SDL-1.2.15-const_XData32.patch @@ -0,0 +1,16 @@ +libX11-1.5.99.901 has changed prototype of _XData32 + + + +diff -r b6b2829cd7ef src/video/x11/SDL_x11sym.h +--- a/src/video/x11/SDL_x11sym.h Wed Feb 27 15:20:31 2013 -0800 ++++ b/src/video/x11/SDL_x11sym.h Wed Mar 27 16:07:23 2013 +0100 +@@ -165,7 +165,7 @@ + */ + #ifdef LONG64 + SDL_X11_MODULE(IO_32BIT) +-SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return) ++SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return) + SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),) + #endif + diff --git a/sdl/SDL-1.2.15-ignore_insane_joystick_axis.patch b/sdl/SDL-1.2.15-ignore_insane_joystick_axis.patch new file mode 100644 index 0000000..33340fd --- /dev/null +++ b/sdl/SDL-1.2.15-ignore_insane_joystick_axis.patch @@ -0,0 +1,20 @@ +changeset: 6324:95abff7adcc2 +branch: SDL-1.2 +parent: 6306:2b923729fd01 +user: Ryan C. Gordon +date: Sun Jun 03 04:49:25 2012 -0400 +summary: Linux evdev: ignore joystick axis events if they aren't in a sane range. + +diff -r 2b923729fd01 -r 95abff7adcc2 src/joystick/linux/SDL_sysjoystick.c +--- a/src/joystick/linux/SDL_sysjoystick.c Sat May 12 23:32:51 2012 -0700 ++++ b/src/joystick/linux/SDL_sysjoystick.c Sun Jun 03 04:49:25 2012 -0400 +@@ -1106,6 +1106,9 @@ + } + break; + case EV_ABS: ++ if (code > ABS_MISC) { ++ break; ++ } + switch (code) { + case ABS_HAT0X: + case ABS_HAT0Y: diff --git a/sdl/SDL-1.2.15-no-default-backing-store.patch b/sdl/SDL-1.2.15-no-default-backing-store.patch new file mode 100644 index 0000000..4d5209d --- /dev/null +++ b/sdl/SDL-1.2.15-no-default-backing-store.patch @@ -0,0 +1,24 @@ +Do not harness backing store by default + +xorg-server 1.15 enables backing store if composite extension is enabled +(default settings). Harnessing backing store through compositor leads to +tearing effect. + +This patch reverts default harnessing backing store to conditional use if +SDL_VIDEO_X11_BACKINGSTORE environment variable exists. + + + + +diff -up SDL-1.2.15/src/video/x11/SDL_x11video.c.jx SDL-1.2.15/src/video/x11/SDL_x11video.c +--- SDL-1.2.15/src/video/x11/SDL_x11video.c.jx 2012-01-19 01:30:06.000000000 -0500 ++++ SDL-1.2.15/src/video/x11/SDL_x11video.c 2014-03-04 14:39:34.691545549 -0500 +@@ -1088,7 +1088,7 @@ static int X11_CreateWindow(_THIS, SDL_S + } + } + +-#if 0 /* This is an experiment - are the graphics faster now? - nope. */ ++#if 1 /* This is an experiment - are the graphics faster now? - nope. */ + if ( SDL_getenv("SDL_VIDEO_X11_BACKINGSTORE") ) + #endif + /* Cache the window in the server, when possible */ diff --git a/sdl/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch b/sdl/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch new file mode 100644 index 0000000..087a134 --- /dev/null +++ b/sdl/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch @@ -0,0 +1,44 @@ +From 4b56fa058a45b7c804d1a5fcaf7a70db0bd0581c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 1 Jan 2013 21:25:15 +0100 +Subject: [PATCH] x11: Bypass SetGammaRamp when changing gamma + +Recent Xorg has broken dynamic colors setting, so calling SDL_SetGamme() +does not have any effect here. Recent means xorg-server >= 1.7, since 2010. +See . +--- + src/video/SDL_gamma.c | 15 ++------------- + 1 files changed, 2 insertions(+), 13 deletions(-) + +diff --git a/src/video/SDL_gamma.c b/src/video/SDL_gamma.c +index 4fd0370..464ab88 100644 +--- a/src/video/SDL_gamma.c ++++ b/src/video/SDL_gamma.c +@@ -92,22 +92,11 @@ static void CalculateGammaFromRamp(float *gamma, Uint16 *ramp) + + int SDL_SetGamma(float red, float green, float blue) + { +- int succeeded; ++ int succeeded = -1; + SDL_VideoDevice *video = current_video; + SDL_VideoDevice *this = current_video; + +- succeeded = -1; +- /* Prefer using SetGammaRamp(), as it's more flexible */ +- { +- Uint16 ramp[3][256]; +- +- CalculateGammaRamp(red, ramp[0]); +- CalculateGammaRamp(green, ramp[1]); +- CalculateGammaRamp(blue, ramp[2]); +- succeeded = SDL_SetGammaRamp(ramp[0], ramp[1], ramp[2]); +- } +- if ( (succeeded < 0) && video->SetGamma ) { +- SDL_ClearError(); ++ if ( video->SetGamma ) { + succeeded = video->SetGamma(this, red, green, blue); + } + return succeeded; +-- +1.7.8.6 + diff --git a/sdl/X11_KeyToUnicode.patch b/sdl/X11_KeyToUnicode.patch new file mode 100644 index 0000000..5f0f325 --- /dev/null +++ b/sdl/X11_KeyToUnicode.patch @@ -0,0 +1,52 @@ + +# HG changeset patch +# User Sam Lantinga +# Date 1327258041 18000 +# Node ID 900a0fae90ca65cff55a70a17b9ec39d2ddccbcf +# Parent 5273dfd19a5e8c5736a0d417bd441f704c5355f8 +Fixed bug 1390 - X11_KeyToUnicode + +manuel.montezelo 2012-01-22 08:56:18 PST + +We had the following bug report at Debian: +http://bugs.debian.org/376560 + +Same one in Ubuntu: +https://bugs.launchpad.net/ubuntu/+source/libsdl1.2/+bug/66217 + +We've been including a patch since then (attached) to actually export the +symbol, since 2006. In the last release the function seems to be there, alive +and kicking. + +It's affecting other people too: +http://www.garagegames.com/community/forums/viewthread/52287 + +diff -r 5273dfd19a5e -r 900a0fae90ca src/video/x11/SDL_x11events.c +--- a/src/video/x11/SDL_x11events.c Sat Jan 21 12:06:51 2012 -0500 ++++ b/src/video/x11/SDL_x11events.c Sun Jan 22 13:47:21 2012 -0500 +@@ -1246,8 +1246,11 @@ + * sequences (dead accents, compose key sequences) will not work since the + * state has been irrevocably lost. + */ ++extern DECLSPEC Uint16 SDLCALL X11_KeyToUnicode(SDLKey, SDLMod); ++ + Uint16 X11_KeyToUnicode(SDLKey keysym, SDLMod modifiers) + { ++ static int warning = 0; + struct SDL_VideoDevice *this = current_video; + char keybuf[32]; + int i; +@@ -1255,6 +1258,12 @@ + XKeyEvent xkey; + Uint16 unicode; + ++ if ( warning ) { ++ warning = 0; ++ fprintf(stderr, "WARNING: Application is using X11_KeyToUnicode().\n"); ++ fprintf(stderr, "This is not an official SDL function, please report this as a bug.\n"); ++ } ++ + if ( !this || !SDL_Display ) { + return 0; + } + diff --git a/sdl/libre.patch b/sdl/libre.patch new file mode 100644 index 0000000..dc93bfe --- /dev/null +++ b/sdl/libre.patch @@ -0,0 +1,130 @@ +diff --git a/src/video/fbcon/SDL_fbriva.c b/src/video/fbcon/SDL_fbriva.c +index eb4b71f1b..59469759c 100644 +--- a/src/video/fbcon/SDL_fbriva.c ++++ b/src/video/fbcon/SDL_fbriva.c +@@ -24,12 +24,10 @@ + #include "SDL_video.h" + #include "../SDL_blit.h" + #include "SDL_fbriva.h" +-#include "riva_mmio.h" + #include "riva_regs.h" + + + static int FifoEmptyCount = 0; +-static int FifoFreeCount = 0; + + /* Wait for vertical retrace */ + static void WaitVBL(_THIS) +@@ -41,20 +39,6 @@ static void WaitVBL(_THIS) + while ( !(*port & 0x08) ) + ; + } +-static void NV3WaitIdle(_THIS) +-{ +- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET); +- while ( (Rop->FifoFree < FifoEmptyCount) || +- (*(mapped_io + PGRAPH_OFFSET + 0x000006B0) & 0x01) ) +- ; +-} +-static void NV4WaitIdle(_THIS) +-{ +- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET); +- while ( (Rop->FifoFree < FifoEmptyCount) || +- (*(mapped_io + PGRAPH_OFFSET + 0x00000700) & 0x01) ) +- ; +-} + + #if 0 /* Not yet implemented? */ + /* Sets video mem colorkey and accelerated blit function */ +@@ -74,7 +58,6 @@ static int FillHWRect(_THIS, SDL_Surface *dst, SDL_Rect *rect, Uint32 color) + { + int dstX, dstY; + int dstW, dstH; +- RivaBitmap *Bitmap = (RivaBitmap *)(mapped_io + BITMAP_OFFSET); + + /* Don't blit to the display surface when switched away */ + if ( switched_away ) { +@@ -93,13 +76,6 @@ static int FillHWRect(_THIS, SDL_Surface *dst, SDL_Rect *rect, Uint32 color) + dstX += rect->x; + dstY += rect->y; + +- RIVA_FIFO_FREE(Bitmap, 1); +- Bitmap->Color1A = color; +- +- RIVA_FIFO_FREE(Bitmap, 2); +- Bitmap->UnclippedRectangle[0].TopLeft = (dstX << 16) | dstY; +- Bitmap->UnclippedRectangle[0].WidthHeight = (dstW << 16) | dstH; +- + FB_AddBusySurface(dst); + + if ( dst == this->screen ) { +@@ -115,7 +91,6 @@ static int HWAccelBlit(SDL_Surface *src, SDL_Rect *srcrect, + int srcX, srcY; + int dstX, dstY; + int dstW, dstH; +- RivaScreenBlt *Blt = (RivaScreenBlt *)(mapped_io + BLT_OFFSET); + + /* FIXME: For now, only blit to display surface */ + if ( dst->pitch != SDL_VideoSurface->pitch ) { +@@ -142,11 +117,6 @@ static int HWAccelBlit(SDL_Surface *src, SDL_Rect *srcrect, + dstX += dstrect->x; + dstY += dstrect->y; + +- RIVA_FIFO_FREE(Blt, 3); +- Blt->TopLeftSrc = (srcY << 16) | srcX; +- Blt->TopLeftDst = (dstY << 16) | dstX; +- Blt->WidthHeight = (dstH << 16) | dstW; +- + FB_AddBusySurface(src); + FB_AddBusySurface(dst); + +@@ -185,23 +155,15 @@ static int CheckHWBlit(_THIS, SDL_Surface *src, SDL_Surface *dst) + + void FB_RivaAccel(_THIS, __u32 card) + { +- RivaRop *Rop = (RivaRop *)(mapped_io + ROP_OFFSET); + + /* We have hardware accelerated surface functions */ + this->CheckHWBlit = CheckHWBlit; + wait_vbl = WaitVBL; + switch (card) { +- case FB_ACCEL_NV3: +- wait_idle = NV3WaitIdle; +- break; +- case FB_ACCEL_NV4: +- wait_idle = NV4WaitIdle; +- break; + default: + /* Hmm... FIXME */ + break; + } +- FifoEmptyCount = Rop->FifoFree; + + /* The Riva has an accelerated color fill */ + this->info.blit_fill = 1; +diff --git a/src/video/fbcon/SDL_fbvideo.c b/src/video/fbcon/SDL_fbvideo.c +index 5e5880908..dee999cbd 100644 +--- a/src/video/fbcon/SDL_fbvideo.c ++++ b/src/video/fbcon/SDL_fbvideo.c +@@ -46,7 +46,6 @@ + #include "SDL_fbevents_c.h" + #include "SDL_fb3dfx.h" + #include "SDL_fbmatrox.h" +-#include "SDL_fbriva.h" + + /*#define FBCON_DEBUG*/ + +@@ -769,13 +768,6 @@ static int FB_VideoInit(_THIS, SDL_PixelFormat *vformat) + #endif + FB_3DfxAccel(this, finfo.accel); + break; +- case FB_ACCEL_NV3: +- case FB_ACCEL_NV4: +-#ifdef FBACCEL_DEBUG +- printf("NVidia hardware accelerator!\n"); +-#endif +- FB_RivaAccel(this, finfo.accel); +- break; + default: + #ifdef FBACCEL_DEBUG + printf("Unknown hardware accelerator.\n"); diff --git a/sdl/libsdl-1.2.15-resizing.patch b/sdl/libsdl-1.2.15-resizing.patch new file mode 100644 index 0000000..0655a13 --- /dev/null +++ b/sdl/libsdl-1.2.15-resizing.patch @@ -0,0 +1,63 @@ +Description: Revert change that breaks window corner resizing + http://bugzilla.libsdl.org/show_bug.cgi?id=1430 +Author: Andrew Caudwell +Last-Update: 2012-04-10 +Bug-Debian: http://bugs.debian.org/665779 + +diff -r c787fb1b5699 src/video/x11/SDL_x11events.c +--- a/src/video/x11/SDL_x11events.c Mon Feb 20 23:51:08 2012 -0500 ++++ b/src/video/x11/SDL_x11events.c Mon Mar 26 12:26:52 2012 +1300 +@@ -57,12 +57,6 @@ + static SDLKey MISC_keymap[256]; + SDLKey X11_TranslateKeycode(Display *display, KeyCode kc); + +-/* +- Pending resize target for ConfigureNotify (so outdated events don't +- cause inappropriate resize events) +-*/ +-int X11_PendingConfigureNotifyWidth = -1; +-int X11_PendingConfigureNotifyHeight = -1; + + #ifdef X_HAVE_UTF8_STRING + Uint32 Utf8ToUcs4(const Uint8 *utf8) +@@ -825,16 +819,6 @@ + #ifdef DEBUG_XEVENTS + printf("ConfigureNotify! (resize: %dx%d)\n", xevent.xconfigure.width, xevent.xconfigure.height); + #endif +- if ((X11_PendingConfigureNotifyWidth != -1) && +- (X11_PendingConfigureNotifyHeight != -1)) { +- if ((xevent.xconfigure.width != X11_PendingConfigureNotifyWidth) && +- (xevent.xconfigure.height != X11_PendingConfigureNotifyHeight)) { +- /* Event is from before the resize, so ignore. */ +- break; +- } +- X11_PendingConfigureNotifyWidth = -1; +- X11_PendingConfigureNotifyHeight = -1; +- } + if ( SDL_VideoSurface ) { + if ((xevent.xconfigure.width != SDL_VideoSurface->w) || + (xevent.xconfigure.height != SDL_VideoSurface->h)) { +diff -r c787fb1b5699 src/video/x11/SDL_x11events_c.h +--- a/src/video/x11/SDL_x11events_c.h Mon Feb 20 23:51:08 2012 -0500 ++++ b/src/video/x11/SDL_x11events_c.h Mon Mar 26 12:26:52 2012 +1300 +@@ -27,8 +27,3 @@ + extern void X11_InitOSKeymap(_THIS); + extern void X11_PumpEvents(_THIS); + extern void X11_SetKeyboardState(Display *display, const char *key_vec); +- +-/* Variables to be exported */ +-extern int X11_PendingConfigureNotifyWidth; +-extern int X11_PendingConfigureNotifyHeight; +- +diff -r c787fb1b5699 src/video/x11/SDL_x11video.c +--- a/src/video/x11/SDL_x11video.c Mon Feb 20 23:51:08 2012 -0500 ++++ b/src/video/x11/SDL_x11video.c Mon Mar 26 12:26:52 2012 +1300 +@@ -1182,8 +1182,6 @@ + current = NULL; + goto done; + } +- X11_PendingConfigureNotifyWidth = width; +- X11_PendingConfigureNotifyHeight = height; + } else { + if (X11_CreateWindow(this,current,width,height,bpp,flags) < 0) { + current = NULL; diff --git a/sdl/sdl-1.2.14-disable-mmx.patch b/sdl/sdl-1.2.14-disable-mmx.patch new file mode 100644 index 0000000..1bb6e0e --- /dev/null +++ b/sdl/sdl-1.2.14-disable-mmx.patch @@ -0,0 +1,13 @@ +# and another one from FS#26020 + +--- a/src/video/SDL_yuv_sw.c 2009-10-13 06:07:15.000000000 +0700 ++++ b/src/video/SDL_yuv_sw.c 2011-09-20 19:26:30.247742620 +0700 +@@ -89,6 +89,8 @@ + #include "SDL_yuvfuncs.h" + #include "SDL_yuv_sw_c.h" + ++#undef __OPTIMIZE__ ++ + /* The functions used to manipulate software video overlays */ + static struct private_yuvhwfuncs sw_yuvfuncs = { + SDL_LockYUV_SW, diff --git a/sdl/sdl-1.2.14-fix-mouse-clicking.patch b/sdl/sdl-1.2.14-fix-mouse-clicking.patch new file mode 100644 index 0000000..7d3e5ac --- /dev/null +++ b/sdl/sdl-1.2.14-fix-mouse-clicking.patch @@ -0,0 +1,23 @@ +--- SDL-1.2.14/src/video/x11/SDL_x11events.c.orig 2010-04-08 11:57:05.003169834 -0700 ++++ SDL-1.2.14/src/video/x11/SDL_x11events.c 2010-04-08 12:33:51.690926340 -0700 +@@ -423,12 +423,15 @@ + if ( xevent.xcrossing.mode == NotifyUngrab ) + printf("Mode: NotifyUngrab\n"); + #endif +- if ( this->input_grab == SDL_GRAB_OFF ) { +- posted = SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS); ++ if ( (xevent.xcrossing.mode != NotifyGrab) && ++ (xevent.xcrossing.mode != NotifyUngrab) ) { ++ if ( this->input_grab == SDL_GRAB_OFF ) { ++ posted = SDL_PrivateAppActive(1, SDL_APPMOUSEFOCUS); ++ } ++ posted = SDL_PrivateMouseMotion(0, 0, ++ xevent.xcrossing.x, ++ xevent.xcrossing.y); + } +- posted = SDL_PrivateMouseMotion(0, 0, +- xevent.xcrossing.x, +- xevent.xcrossing.y); + } + break; + diff --git a/sdl/sndio.patch b/sdl/sndio.patch new file mode 100644 index 0000000..5d17c53 --- /dev/null +++ b/sdl/sndio.patch @@ -0,0 +1,400 @@ +diff --git a/configure.in b/configure.in +index 08c8e1e..1b6d24a 100644 +--- a/configure.in ++++ b/configure.in +@@ -486,6 +486,35 @@ AC_HELP_STRING([--enable-esd-shared], [dynamically load ESD audio support [[defa + fi + } + ++dnl Find Sndio ++CheckSndio() ++{ ++ AC_ARG_ENABLE(sndio, ++AC_HELP_STRING([--enable-sndio], [support the sndio audio API [[default=yes]]]), ++ , enable_sndio=yes) ++ if test x$enable_audio = xyes -a x$enable_sndio = xyes; then ++ AC_CHECK_HEADER(sndio.h, have_sndio_hdr=yes) ++ AC_CHECK_LIB(sndio, sio_open, have_sndio_lib=yes) ++ ++ AC_MSG_CHECKING(for sndio support) ++ have_sndio=no ++ ++ if test x$have_sndio_hdr = xyes -a x$have_sndio_lib = xyes; then ++ have_sndio=yes ++ SNDIO_LIBS="-lsndio" ++ fi ++ ++ AC_MSG_RESULT($have_sndio) ++ ++ if test x$have_sndio = xyes; then ++ AC_DEFINE(SDL_AUDIO_DRIVER_SNDIO) ++ SOURCES="$SOURCES $srcdir/src/audio/sndio/*.c" ++ EXTRA_LDFLAGS="$EXTRA_LDFLAGS $SNDIO_LIBS" ++ have_audio=yes ++ fi ++ fi ++} ++ + dnl Find PulseAudio + CheckPulseAudio() + { +@@ -2358,6 +2387,7 @@ case "$host" in + CheckALSA + CheckARTSC + CheckESD ++ CheckSndio + CheckPulseAudio + CheckNAS + CheckX11 +diff --git a/include/SDL_config.h.in b/include/SDL_config.h.in +index 8bb1773..e131a9c 100644 +--- a/include/SDL_config.h.in ++++ b/include/SDL_config.h.in +@@ -184,6 +184,7 @@ + #undef SDL_AUDIO_DRIVER_QNXNTO + #undef SDL_AUDIO_DRIVER_SNDMGR + #undef SDL_AUDIO_DRIVER_SUNAUDIO ++#undef SDL_AUDIO_DRIVER_SNDIO + #undef SDL_AUDIO_DRIVER_WAVEOUT + + /* Enable various cdrom drivers */ +diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c +index beb26e0..5f0a17d 100644 +--- a/src/audio/SDL_audio.c ++++ b/src/audio/SDL_audio.c +@@ -36,12 +36,16 @@ + + /* Available audio drivers */ + static AudioBootStrap *bootstrap[] = { ++ + #if SDL_AUDIO_DRIVER_PULSE + &PULSE_bootstrap, + #endif + #if SDL_AUDIO_DRIVER_ALSA + &ALSA_bootstrap, + #endif ++#if SDL_AUDIO_DRIVER_SNDIO ++ &SNDIO_bootstrap, ++#endif + #if SDL_AUDIO_DRIVER_BSD + &BSD_AUDIO_bootstrap, + #endif +diff --git a/src/audio/SDL_sysaudio.h b/src/audio/SDL_sysaudio.h +index 74ac21d..4a792da 100644 +--- a/src/audio/SDL_sysaudio.h ++++ b/src/audio/SDL_sysaudio.h +@@ -105,6 +105,9 @@ typedef struct AudioBootStrap { + #if SDL_AUDIO_DRIVER_BSD + extern AudioBootStrap BSD_AUDIO_bootstrap; + #endif ++#if SDL_AUDIO_DRIVER_SNDIO ++extern AudioBootStrap SNDIO_bootstrap; ++#endif + #if SDL_AUDIO_DRIVER_PULSE + extern AudioBootStrap PULSE_bootstrap; + #endif +diff --git b/src/audio/sndio/SDL_sndioaudio.c b/src/audio/sndio/SDL_sndioaudio.c +new file mode 100644 +index 0000000..fcb47e7 +--- /dev/null ++++ b/src/audio/sndio/SDL_sndioaudio.c +@@ -0,0 +1,243 @@ ++/* ++ * Copyright (c) 2008 Jacob Meuser ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#include "SDL_config.h" ++ ++/* Allow access to a raw mixing buffer */ ++ ++#ifdef HAVE_SIGNAL_H ++#include ++#endif ++#include ++ ++#include "SDL_timer.h" ++#include "SDL_audio.h" ++#include "../SDL_audiomem.h" ++#include "../SDL_audio_c.h" ++#include "../SDL_audiodev_c.h" ++#include "SDL_sndioaudio.h" ++ ++/* The tag name used by sndio audio */ ++#define SNDIO_DRIVER_NAME "sndio" ++ ++/* Audio driver functions */ ++static int SNDIO_OpenAudio(_THIS, SDL_AudioSpec *spec); ++static void SNDIO_WaitAudio(_THIS); ++static void SNDIO_PlayAudio(_THIS); ++static Uint8 *SNDIO_GetAudioBuf(_THIS); ++static void SNDIO_CloseAudio(_THIS); ++ ++/* Audio driver bootstrap functions */ ++ ++static int Audio_Available(void) ++{ ++ struct sio_hdl *this_hdl; ++ int available = 0; ++ ++ if ( (this_hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0)) != NULL ) { ++ sio_close(this_hdl); ++ available = 1; ++ } ++ ++ return available; ++} ++ ++static void Audio_DeleteDevice(SDL_AudioDevice *device) ++{ ++ SDL_free(device->hidden); ++ SDL_free(device); ++} ++ ++static SDL_AudioDevice *Audio_CreateDevice(int devindex) ++{ ++ SDL_AudioDevice *this; ++ ++ /* Initialize all variables that we clean on shutdown */ ++ this = (SDL_AudioDevice *)SDL_malloc(sizeof(SDL_AudioDevice)); ++ if ( this ) { ++ SDL_memset(this, 0, (sizeof *this)); ++ this->hidden = (struct SDL_PrivateAudioData *) ++ SDL_malloc((sizeof *this->hidden)); ++ } ++ if ( (this == NULL) || (this->hidden == NULL) ) { ++ SDL_OutOfMemory(); ++ if ( this ) { ++ SDL_free(this); ++ } ++ return(0); ++ } ++ SDL_memset(this->hidden, 0, (sizeof *this->hidden)); ++ ++ /* Set the function pointers */ ++ this->OpenAudio = SNDIO_OpenAudio; ++ this->WaitAudio = SNDIO_WaitAudio; ++ this->PlayAudio = SNDIO_PlayAudio; ++ this->GetAudioBuf = SNDIO_GetAudioBuf; ++ this->CloseAudio = SNDIO_CloseAudio; ++ ++ this->free = Audio_DeleteDevice; ++ ++ hdl = NULL; ++ ++ return this; ++} ++ ++AudioBootStrap SNDIO_bootstrap = { ++ SNDIO_DRIVER_NAME, "sndio", ++ Audio_Available, Audio_CreateDevice ++}; ++ ++ ++ ++/* This function waits until it is possible to write a full sound buffer */ ++static void SNDIO_WaitAudio(_THIS) ++{ ++ /* nothing, we're using the blocking api */ ++} ++ ++static void SNDIO_PlayAudio(_THIS) ++{ ++ int written; ++ ++ /* Write the audio data */ ++ written = sio_write(hdl, mixbuf, mixlen); ++ ++ /* If we couldn't write, assume fatal error for now */ ++ if ( written == 0 ) { ++ this->enabled = 0; ++ } ++#ifdef DEBUG_AUDIO ++ fprintf(stderr, "Wrote %d bytes of audio data\n", written); ++#endif ++} ++ ++static Uint8 *SNDIO_GetAudioBuf(_THIS) ++{ ++ return(mixbuf); ++} ++ ++static void SNDIO_CloseAudio(_THIS) ++{ ++ if ( mixbuf != NULL ) { ++ SDL_FreeAudioMem(mixbuf); ++ mixbuf = NULL; ++ } ++ if ( hdl != NULL ) { ++ sio_close(hdl); ++ hdl = NULL; ++ } ++} ++ ++static int SNDIO_OpenAudio(_THIS, SDL_AudioSpec *spec) ++{ ++ struct sio_par par; ++ ++ mixbuf = NULL; ++ ++ if ((hdl = sio_open(NULL, SIO_PLAY, 0)) == NULL) { ++ SDL_SetError("sio_open() failed"); ++ return(-1); ++ } ++ ++ sio_initpar(&par); ++ ++ switch (spec->format) { ++ case AUDIO_S16LSB: ++ par.bits = 16; ++ par.sig = 1; ++ par.le = 1; ++ break; ++ case AUDIO_S16MSB: ++ par.bits = 16; ++ par.sig = 1; ++ par.le = 0; ++ break; ++ case AUDIO_S8: ++ par.bits = 8; ++ par.sig = 1; ++ break; ++ case AUDIO_U16LSB: ++ par.bits = 16; ++ par.sig = 0; ++ par.le = 1; ++ break; ++ case AUDIO_U16MSB: ++ par.bits = 16; ++ par.sig = 0; ++ par.le = 0; ++ break; ++ case AUDIO_U8: ++ par.bits = 8; ++ par.sig = 0; ++ break; ++ default: ++ SDL_SetError("SNDIO unknown format"); ++ return(-1); ++ } ++ ++ par.rate = spec->freq; ++ par.pchan = spec->channels; ++ par.round = spec->samples; ++ par.appbufsz = par.round * 2; ++ ++ if (sio_setpar(hdl, &par) == 0) { ++ SDL_SetError("sio_setpar() failed"); ++ return(-1); ++ } ++ ++ if (sio_getpar(hdl, &par) == 0) { ++ SDL_SetError("sio_getpar() failed"); ++ return(-1); ++ } ++ ++ if (par.bits == 16) { ++ if (par.sig && par.le) { ++ spec->format = AUDIO_S16LSB; ++ } else if (par.sig && !par.le) { ++ spec->format = AUDIO_S16MSB; ++ } else if (!par.sig && par.le) { ++ spec->format = AUDIO_U16LSB; ++ } else ++ spec->format = AUDIO_U16MSB; ++ } else if (par.bits == 8) { ++ spec->format = par.sig ? AUDIO_S8 : AUDIO_U8; ++ } else { ++ SDL_SetError("SNDIO couldn't configure a suitable format"); ++ return(-1); ++ } ++ ++ spec->freq = par.rate; ++ spec->channels = par.pchan; ++ spec->samples = par.round; ++ ++ SDL_CalculateAudioSpec(spec); ++ ++ /* Allocate mixing buffer */ ++ mixlen = spec->size; ++ mixbuf = (Uint8 *)SDL_AllocAudioMem(mixlen); ++ if ( mixbuf == NULL ) { ++ return(-1); ++ } ++ SDL_memset(mixbuf, spec->silence, spec->size); ++ ++ if ( sio_start(hdl) == 0 ) { ++ SDL_SetError("sio_start() failed"); ++ return(-1); ++ } ++ ++ /* We're ready to rock and roll. :-) */ ++ return(0); ++} +diff --git b/src/audio/sndio/SDL_sndioaudio.h b/src/audio/sndio/SDL_sndioaudio.h +new file mode 100644 +index 0000000..32c566e +--- /dev/null ++++ b/src/audio/sndio/SDL_sndioaudio.h +@@ -0,0 +1,50 @@ ++/* ++ * Copyright (c) 2008 Jacob Meuser ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#include "SDL_config.h" ++ ++#ifndef _SDL_sndioaudio_h ++#define _SDL_sndioaudio_h ++ ++#include ++ ++#include "../SDL_sysaudio.h" ++ ++/* Hidden "this" pointer for the video functions */ ++#define _THIS SDL_AudioDevice *this ++ ++struct SDL_PrivateAudioData { ++ /* The stream descriptor for the audio device */ ++ struct sio_hdl *hdl; ++ ++ /* The parent process id, to detect when application quits */ ++ pid_t parent; ++ ++ /* Raw mixing buffer */ ++ Uint8 *mixbuf; ++ int mixlen; ++ ++}; ++ ++/* Old variable names */ ++#define stream (this->hidden->stream) ++#define parent (this->hidden->parent) ++#define mixbuf (this->hidden->mixbuf) ++#define mixlen (this->hidden->mixlen) ++#define hdl (this->hidden->hdl) ++ ++#endif /* _SDL_sndioaudio_h */ ++ diff --git a/sdl2/PKGBUILD b/sdl2/PKGBUILD new file mode 100644 index 0000000..be31c83 --- /dev/null +++ b/sdl2/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=sdl2 +pkgver=2.0.14 +pkgrel=1 +pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard (Version 2)" +arch=('i686' 'x86_64') +url="https://www.libsdl.org/" +license=('zlib') +depends=('glibc' 'libxext' 'libxrender' 'libx11' 'libgl' 'libxcursor' 'libusb') +makedepends=('alsa-lib' 'mesa' 'libsndio' 'libxrandr' 'libxinerama' 'libxkbcommon' + 'libxss' 'cmake' 'jack' 'ninja') +optdepends=('alsa-lib: ALSA audio driver' + 'sndio: sndio audio driver' + 'jack: JACK audio driver') +source=("https://www.libsdl.org/release/SDL2-${pkgver}.tar.gz"{,.sig}) +sha512sums=('ebc482585bd565bf3003fbcedd91058b2183e333b9ea566d2f386da0298ff970645d9d25c1aa4459c7c96e9ea839fd1c5f2da0242a56892865b2e456cdd027ee' + 'SKIP') +validpgpkeys=('1528635D8053A57F77D1E08630A59377A7763BE6') # Sam Lantinga + +build() { + cd SDL2-${pkgver} + cmake . \ + -Bbuild \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DSDL_STATIC=OFF \ + -DSDL_DLOPEN=ON \ + -DARTS=OFF \ + -DESD=OFF \ + -DNAS=OFF \ + -DALSA=ON \ + -DHIDAPI=ON \ + -DPULSEAUDIO=OFF \ + -DPULSEAUDIO_SHARED=OFF \ + -DVIDEO_WAYLAND=OFF \ + -DRPATH=OFF \ + -DCLOCK_GETTIME=ON \ + -DJACK_SHARED=ON \ + -DSNDIO_SHARED=ON + ninja -C build +} + +package() { + cd SDL2-${pkgver} + DESTDIR="${pkgdir}" ninja -C build install + + sed -i "s/libSDL2\.a/libSDL2main.a/g" "$pkgdir"/usr/lib/cmake/SDL2/SDL2Targets-noconfig.cmake + + install -Dm644 COPYING.txt "$pkgdir/usr/share/licenses/$pkgname/COPYING.txt" +} diff --git a/sdl2_gfx/PKGBUILD b/sdl2_gfx/PKGBUILD new file mode 100644 index 0000000..08feb35 --- /dev/null +++ b/sdl2_gfx/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=sdl2_gfx +epoch=1 +pkgver=1.0.4 +pkgrel=2 +pkgdesc='SDL graphics drawing primitives and other support functions (Version 2)' +url='http://www.ferzkopp.net/wordpress/2016/01/02/sdl_gfx-sdl2_gfx/' +arch=('i686' 'x86_64') +license=('zlib') +depends=('sdl2') +source=("https://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-${pkgver}.tar.gz") +sha512sums=('81a100d3c8c3a7c6bd37a23f1290ff10685f8e62fbecd83b0086aae4edc721483e2153cd4219fbd9168f115eea0ea6b25f9be375faf5761f0babdfb1b52fe482') + +build() { + cd SDL2_gfx-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd SDL2_gfx-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/${pkgname}" +} diff --git a/sdl2_image/PKGBUILD b/sdl2_image/PKGBUILD new file mode 100644 index 0000000..14bdc9c --- /dev/null +++ b/sdl2_image/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=sdl2_image +pkgver=2.6.3 +pkgrel=1 +pkgdesc="A simple library to load images of various formats as SDL surfaces (Version 2)" +arch=('i686' 'x86_64') +url='http://www.libsdl.org/projects/SDL_image' +license=('zlib') +depends=('sdl2' 'libpng' 'libtiff' 'libjpeg') +makedepends=('cmake' 'quilt') +source=("https://www.libsdl.org/projects/SDL_image/release/SDL2_image-${pkgver}.tar.gz") +sha512sums=('11f1d041a052829708560b6211a2a00b3a1ce26a6f23cb389f57fa5254372027e97d3a6ffe551134a77bc33718c3acea3df21fe8426e93a2b1955176c47c7647') + +build() { + cd "${srcdir}/SDL2_image-${pkgver}/" + ./configure --disable-static --prefix=/usr \ + --disable-jpg-shared \ + --disable-png-shared \ + --disable-tif-shared \ + --disable-webp-shared + make +} + +package() { + cd "${srcdir}/SDL2_image-${pkgver}/" + + make DESTDIR="${pkgdir}/" install + install -Dm644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/sdl2_mixer/PKGBUILD b/sdl2_mixer/PKGBUILD new file mode 100644 index 0000000..811c8e3 --- /dev/null +++ b/sdl2_mixer/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=sdl2_mixer +pkgver=2.0.4 +_debver=2.0.4+dfsg1 +_debrel=3 +pkgrel=1 +pkgdesc='A simple multi-channel audio mixer (Version 2)' +arch=('i686' 'x86_64') +url='http://www.libsdl.org/projects/SDL_mixer' +license=('zlib') +depends=('sdl2' 'libvorbis' 'libmodplug' 'mpg123' 'flac' 'opusfile') +makedepends=('fluidsynth' 'quilt') +optdepends=('fluidsynth: MIDI software synth, replaces built-in timidity') +source=("https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-${pkgver}.tar.gz" + https://deb.debian.org/debian/pool/main/libs/libsdl2-mixer/libsdl2-mixer_$_debver-$_debrel.debian.tar.xz) +sha512sums=('98c56069640668aaececa63748de21fc8f243c7d06386c45c43d0ee472bbb2595ccda644d9886ce5b95c3a3dee3c0a96903cf9a89ddc18d38f041133470699a3' + '86326996e91e5c00e19db7c4f81ca46540bb92e340432ba8b2cf9d2fae1faa901f504a9bc65ff6850795b599d5c83b29d8a70893473f3a7bcff690ca4d44561b') + +prepare() { + cd "${srcdir}/SDL2_mixer-${pkgver}/" + + sed -i "s|/etc/timidity|/etc/timidity++|g" timidity/options.h + sed -i "s|/etc/timidity++.cfg|/etc/timidity++/timidity.cfg|g" timidity/options.h + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/SDL2_mixer-${pkgver}/" + + ./configure --disable-static --prefix=/usr + make +} + +package() { + cd "${srcdir}/SDL2_mixer-${pkgver}/" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/sdl2_net/PKGBUILD b/sdl2_net/PKGBUILD new file mode 100644 index 0000000..206650f --- /dev/null +++ b/sdl2_net/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=sdl2_net +epoch=1 +pkgver=2.0.1 +pkgrel=1 +pkgdesc='A small sample cross-platform networking library (Version 2)' +arch=('i686' 'x86_64') +url='http://www.libsdl.org/projects/SDL_net' +license=('zlib') +depends=(sdl2) +source=("https://www.libsdl.org/projects/SDL_net/release/SDL2_net-${pkgver}.tar.gz") +sha512sums=('d27faee3cddc3592dae38947e6c1df0cbaa95f82fde9c87db6d11f6312d868cea74f6830ad07ceeb3d0d75e9424cebf39e54fddf9a1147e8d9e664609de92b7a') + +build() { + cd "${srcdir}/SDL2_net-${pkgver}/" + + ./configure --disable-static --prefix=/usr + make +} + +package() { + cd "${srcdir}/SDL2_net-${pkgver}/" + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/sdl2_ttf/PKGBUILD b/sdl2_ttf/PKGBUILD new file mode 100644 index 0000000..0dbf77f --- /dev/null +++ b/sdl2_ttf/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=sdl2_ttf +pkgver=2.0.15 +pkgrel=1 +pkgdesc='A library that allows you to use TrueType fonts in your SDL applications (Version 2)' +arch=('i686' 'x86_64') +url='http://www.libsdl.org/projects/SDL_ttf' +license=('zlib') +depends=('sdl2' 'freetype2') +makedepends=('cmake') +source=("https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-${pkgver}.tar.gz") +sha512sums=('30d685932c3dd6f2c94e2778357a5c502f0421374293d7102a64d92f9c7861229bf36bedf51c1a698b296a58c858ca442d97afb908b7df1592fc8d4f8ae8ddfd') + +prepare() { + cd SDL2_ttf-${pkgver} + + touch NEWS README AUTHORS ChangeLog + autoreconf -vi +} + +build() { + cd "${srcdir}/SDL2_ttf-${pkgver}/" + + ./configure --disable-static --prefix=/usr + make +} + +package() { + cd "${srcdir}/SDL2_ttf-${pkgver}/" + + make DESTDIR="${pkgdir}/" install + install -Dm644 COPYING.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/sdl_envvars/PKGBUILD b/sdl_envvars/PKGBUILD new file mode 100644 index 0000000..2746dc0 --- /dev/null +++ b/sdl_envvars/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=sdl_envvars +pkgver=1 +pkgrel=1 +pkgdesc='Environment variables to modify the behaviour of SDL' +arch=(any) +url='https://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlenvvars.html' +license=(CC0-1.0) +backup=(etc/sdl.conf) +source=(sdl.sh.profile + sdl.conf.profile + legalcode.txt) +sha512sums=('2d899b1b29e5924c00bc4433b8908988268f59024c8d587783d4e9601a5bd63d2c776b89ffc9a0933477c69900c74688f343dc24763d9ca9229af8a85f401c98' + '4aafc9a8270c1178a0afd2eab417c43ba22b906bdf44e1f5185e7d8e21a0023216005dce8371e6365e4535f5cfd6c1ff09cd47a6a24cb564f30493b0e5ae5d83' + '1eb4436f8d58766cbe99db97e5e8c0db8a706376afd291c337de1ba7a6b066d3791dc85ad034bdd54ea336bed6e6e8e7a037d8b04b2773c9c7517b9d9921d1fa') + +package() { + install -Dm755 "$srcdir/sdl.sh.profile" "$pkgdir/etc/profile.d/sdl.conf" + install -Dm644 "$srcdir/sdl.conf.profile" "$pkgdir/etc/sdl.conf" + install -Dm644 legalcode.txt "$pkgdir/usr/share/licenses/$pkgname/legalcode.txt" +} diff --git a/sdl_envvars/legalcode.txt b/sdl_envvars/legalcode.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/sdl_envvars/legalcode.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/sdl_envvars/sdl.conf.profile b/sdl_envvars/sdl.conf.profile new file mode 100644 index 0000000..4668ac3 --- /dev/null +++ b/sdl_envvars/sdl.conf.profile @@ -0,0 +1,5 @@ +AUDIODEV=hw:0 +SDL_AUDIODRIVER=alsa +#AUDIODEV=snd/0 +#SDL_AUDIODRIVER=sndio +#SDL_VIDEODRIVER=x11 diff --git a/sdl_envvars/sdl.sh.profile b/sdl_envvars/sdl.sh.profile new file mode 100644 index 0000000..f43cabd --- /dev/null +++ b/sdl_envvars/sdl.sh.profile @@ -0,0 +1,43 @@ +#!/bin/sh + +if [ -n "$XDG_CONFIG_HOME" ] && [ -r "$XDG_CONFIG_HOME/sdl.conf" ]; then + . "$XDG_CONFIG_HOME/sdl.conf" +elif [ -n "$HOME" ] && [ -r "$HOME/.config/sdl.conf" ]; then + . "$HOME/.config/sdl.conf" +elif [ -r /etc/sdl.conf ]; then + . /etc/sdl.conf +fi + +if [ $(uname -s) = Linux ]; then + [ -n "$SDL_FBACCEL" ] && export SDL_FBACCEL + [ -n "$SDL_FBDEV" ] && export SDL_FBDEV + [ -n "$SDL_JOYSTICK_DEVICE" ] && export SDL_JOYSTICK_DEVICE + [ -n "$SDL_LINUX_JOYSTICK" ] && export SDL_LINUX_JOYSTICK + [ -n "$SDL_MOUSEDEV" ] && export SDL_MOUSEDEV + [ -n "$SDL_MOUSEDEV_IMPS2" ] && export SDL_MOUSEDEV_IMPS2 + [ -n "$SDL_MOUSEDRV" ] && export SDL_MOUSEDRV + [ -n "$SDL_NO_RAWKBD" ] && export SDL_NO_RAWKBD + [ -n "$SDL_NOMOUSE" ] && export SDL_NOMOUSE +fi + +[ -n "$AUDIODEV" ] && export AUDIODEV +[ -n "$SDL_AUDIODRIVER" ] && export SDL_AUDIODRIVER +[ -n "$SDL_CDROM" ] && export SDL_CDROM +[ -n "$SDL_DEBUG" ] && export SDL_DEBUG +[ -n "$SDL_DISKAUDIODELAY" ] && export SDL_DISKAUDIODELAY +[ -n "$SDL_DISKAUDIOFILE" ] && export SDL_DISKAUDIOFILE +[ -n "$SDL_DSP_NOSELECT" ] && export SDL_DSP_NOSELECT +[ -n "$SDL_MOUSE_RELATIVE" ] && export SDL_MOUSE_RELATIVE +[ -n "$SDL_NO_LOCK_KEYS" ] && export SDL_NO_LOCK_KEYS +[ -n "$SDL_PATH_DSP_NOSELECT" ] && export SDL_PATH_DSP +[ -n "$SDL_VIDEO_ALLOW_SCREENSAVER" ] && export SDL_VIDEO_ALLOW_SCREENSAVER +[ -n "$SDL_VIDEO_CENTERED" ] && export SDL_VIDEO_CENTERED +[ -n "$SDL_VIDEO_GL_DRIVER" ] && export SDL_VIDEO_GL_DRIVER +[ -n "$SDL_VIDEO_X11_DGAMOUSE" ] && export SDL_VIDEO_X11_DGAMOUSE +[ -n "$SDL_VIDEO_X11_MOUSEACCEL" ] && export SDL_VIDEO_X11_MOUSEACCEL +[ -n "$SDL_VIDEO_X11_NODIRECTCOLOR" ] && export SDL_VIDEO_X11_NODIRECTCOLOR +[ -n "$SDL_VIDEO_X11_VISUALID" ] && export SDL_VIDEO_X11_VISUALID +[ -n "$SDL_VIDEO_X11_YUV_DIRECT" ] && export SDL_VIDEO_YUV_DIRECT +[ -n "$SDL_VIDEO_X11_YUV_HWACCEL" ] && export SDL_VIDEO_YUV_HWACCEL +[ -n "$SDL_VIDEODRIVER" ] && export SDL_VIDEODRIVER +[ -n "$SDL_WINDOWID" ] && export SDL_WINDOWID diff --git a/sdl_gfx/PKGBUILD b/sdl_gfx/PKGBUILD new file mode 100644 index 0000000..2b808bd --- /dev/null +++ b/sdl_gfx/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=sdl_gfx +pkgver=2.0.25 +_debver=2.0.25 +_debrel=11 +pkgrel=1 +pkgdesc="SDL graphics drawing primitives and other support functions" +url="https://www.ferzkopp.net/wordpress/2016/01/02/sdl_gfx-sdl2_gfx/" +arch=(i686 x86_64) +license=(zlib) +depends=(sdl) +makedepends=(quilt) +source=(https://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/s/sdlgfx/sdlgfx_$_debver-$_debrel.debian.tar.xz) +sha512sums=('42a5d78fe1a9b644d329fb688ed6c98558f8dd0aa029a1a0d99b1c59f94859269e0aef8f9e420b8018b687d8eae151652890be3994775644e1d3a80ba7b6fe8c' + '1b6ed8292858859e7f0e7687841e367b85850a6b85f2161ac161804a79e884738d619ae5b97307cd286c995aa7438641008b7e4241922e3cf9ab11253667baae') + +prepare() { + cd SDL_gfx-$pkgver + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd SDL_gfx-$pkgver + ./configure --prefix=/usr \ + $([[ $CARCH == x86_64 ]] && echo --disable-mmx) + make +} + +package() { + cd SDL_gfx-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/sdl_image/PKGBUILD b/sdl_image/PKGBUILD new file mode 100644 index 0000000..da136d1 --- /dev/null +++ b/sdl_image/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=sdl_image +pkgver=1.2.12 +_debver=1.2.12 +_debrel=12 +pkgrel=1 +pkgdesc='A simple library to load images of various formats as SDL surfaces' +url='https://www.libsdl.org/projects/SDL_image/' +arch=('i686' 'x86_64') +license=('zlib') +depends=('sdl>=1.2.13' libpng libjpeg-turbo libtiff zlib) +makedepends=('quilt') +source=(https://www.libsdl.org/projects/SDL_image/release/SDL_image-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/sdl-image1.2/sdl-image1.2_$_debver-$_debrel.debian.tar.xz) +sha512sums=('0e71b280abc2a7f15755e4480a3c1b52d41f9f8b0c9216a6f5bd9fc0e939456fb5d6c10419e1d1904785783f9a1891ead278c03e88b0466fecc6871c3ca40136' + 'cb6e8b720aa1f821ea462fa70389a43b7358b79e4df186209f1edc2857c92627f4b92321fc4445535be01affe14df0fd23cf27e7efb50531f1986e6d80913d63') + +prepare() { + cd SDL_image-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd SDL_image-$pkgver + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd SDL_image-$pkgver + make DESTDIR="$pkgdir" install + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING +} diff --git a/sdl_mixer/PKGBUILD b/sdl_mixer/PKGBUILD new file mode 100644 index 0000000..04cccee --- /dev/null +++ b/sdl_mixer/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=sdl_mixer +pkgver=1.2.12 +_debver=1.2.12 +_debrel=16 +pkgrel=1 +pkgdesc='A simple multi-channel audio mixer' +url='https://www.libsdl.org/projects/SDL_mixer/' +arch=('i686' 'x86_64') +license=('zlib') +depends=('libmikmod' 'libvorbis' 'sdl' 'smpeg') +makedepends=('fluidsynth' 'quilt') +optdepends=('fluidsynth: MIDI software synth, replaces built-in timidity') +source=(https://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/sdl-mixer1.2/sdl-mixer1.2_$_debver-$_debrel.debian.tar.xz + mikmod1.patch mikmod2.patch fluidsynth-volume.patch double-free-crash.patch) +sha512sums=('230f6c5a73f4bea364f8aa3d75f76694305571dea45f357def742b2b50849b2d896af71e08689981207edc99a9836088bee2d0bd98d92c7f4ca52b12b3d8cf96' + '33cbfe6de66b1cd2c22114f26f8e9db945ac032bfef5039d76e8c2f4d76cad439966eaf2863a4c705dbab5fb467877080dbdeb73a44ebbbd33aee2303904991a' + 'f93704b3a0e19b12801aa8542483f88c867726ab09edd74d69df794e507c579e3aef87eb659152f526d3f57c1091db5dfd0e4d1a80165b1700c9ee58fe0430f3' + '715242bc3d435e6960fcda2fa7f626f6e1c33a703183ca92c5d83b0b980d9cf5f76465241793742efe1b38566b4909154d0adaefb1f528cb7813300eb2de8631' + '259e35757c136b1546c0607d1bc03781b0066fb4cdaf337c041e3363d5fca0489f8ed4e983b89e6fdfb8ae5149663dd5fe57b3d7122bbf9fb2938d485f28f9de' + 'fa49304fcb4560d54c9fc9a10f5a80d41645f2240dc85d7d85f8af3c55a10a2d79e08a46d52594dfd9f23612e709556acf48b2fade3c8b176a71887750302912') + +prepare() { + cd SDL_mixer-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -Np1 -i ../double-free-crash.patch + fi + + patch -Np1 -i ../mikmod1.patch + patch -Np1 -i ../mikmod2.patch + patch -Np1 -i ../fluidsynth-volume.patch + + sed -e "/CONFIG_FILE_ETC/s|/etc/timidity.cfg|/etc/timidity++/timidity.cfg|" \ + -e "/DEFAULT_PATH/s|/etc/timidity|/etc/timidity++|" \ + -e "/DEFAULT_PATH2/s|/usr/local/lib/timidity|/usr/lib/timidity|" \ + -i timidity/config.h +} + +build() { + cd SDL_mixer-$pkgver + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd SDL_mixer-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/sdl_mixer/double-free-crash.patch b/sdl_mixer/double-free-crash.patch new file mode 100644 index 0000000..6f4e6a1 --- /dev/null +++ b/sdl_mixer/double-free-crash.patch @@ -0,0 +1,32 @@ + +# HG changeset patch +# User Sam Lantinga +# Date 1329087437 18000 +# Node ID 2d713670db9b832b0c5aa700824900bc1fc3c3cd +# Parent df72f22b4b411ad4b08f924329678aabd5ac97d6 +Fixed 1418 - crash on double free if loading WAV file failed + +diff -r df72f22b4b41 -r 2d713670db9b mixer.c +--- a/mixer.c Mon Jan 30 21:41:45 2012 -0500 ++++ b/mixer.c Sun Feb 12 17:57:17 2012 -0500 +@@ -610,13 +610,15 @@ + break; + default: + SDL_SetError("Unrecognized sound file type"); +- return(0); ++ if ( freesrc ) { ++ SDL_RWclose(src); ++ } ++ loaded = NULL; ++ break; + } + if ( !loaded ) { ++ /* The individual loaders have closed src if needed */ + SDL_free(chunk); +- if ( freesrc ) { +- SDL_RWclose(src); +- } + return(NULL); + } + + diff --git a/sdl_mixer/fluidsynth-volume.patch b/sdl_mixer/fluidsynth-volume.patch new file mode 100644 index 0000000..cf346ed --- /dev/null +++ b/sdl_mixer/fluidsynth-volume.patch @@ -0,0 +1,23 @@ + +# HG changeset patch +# User James Le Cuirot +# Date 1330896767 0 +# Node ID c92001a2c18f628698c58aa4e05a7335d10d0e9e +# Parent 2d713670db9b832b0c5aa700824900bc1fc3c3cd +Raise the maximum FluidSynth gain from 0.8 to 1.2 because apparently the former is too quiet in some cases. + +diff -r 2d713670db9b -r c92001a2c18f fluidsynth.c +--- a/fluidsynth.c Sun Feb 12 17:57:17 2012 -0500 ++++ b/fluidsynth.c Sun Mar 04 21:32:47 2012 +0000 +@@ -176,8 +176,8 @@ + + void fluidsynth_setvolume(FluidSynthMidiSong *song, int volume) + { +- /* FluidSynth's default is 0.2. Make 0.8 the maximum. */ +- fluidsynth.fluid_synth_set_gain(song->synth, (float) (volume * 0.00625)); ++ /* FluidSynth's default is 0.2. Make 1.2 the maximum. */ ++ fluidsynth.fluid_synth_set_gain(song->synth, (float) (volume * 1.2 / MIX_MAX_VOLUME)); + } + + int fluidsynth_playsome(FluidSynthMidiSong *song, void *dest, int dest_len) + diff --git a/sdl_mixer/mikmod1.patch b/sdl_mixer/mikmod1.patch new file mode 100644 index 0000000..b3bb829 --- /dev/null +++ b/sdl_mixer/mikmod1.patch @@ -0,0 +1,67 @@ + +# HG changeset patch +# User Sam Lantinga +# Date 1342998807 25200 +# Node ID 56cad6484b04f83c8d42428c755a046678506436 +# Parent c92001a2c18f628698c58aa4e05a7335d10d0e9e +Paul P Komkoff Jr fixed malloc/free mismatch in the MikMod driver + +diff -r c92001a2c18f -r 56cad6484b04 CHANGES +--- a/CHANGES Sun Mar 04 21:32:47 2012 +0000 ++++ b/CHANGES Sun Jul 22 16:13:27 2012 -0700 +@@ -1,3 +1,7 @@ ++1.2.13: ++Paul P Komkoff Jr - Sun Jul 22 16:12:28 PDT 2012 ++ * Fixed malloc/free mismatch in the MikMod driver ++ + 1.2.12: + Sam Lantinga - Sat Jan 14 22:00:29 2012 -0500 + * Fixed seek offset with SMPEG (was relative, should be absolute) +diff -r c92001a2c18f -r 56cad6484b04 dynamic_mod.c +--- a/dynamic_mod.c Sun Mar 04 21:32:47 2012 +0000 ++++ b/dynamic_mod.c Sun Jul 22 16:13:27 2012 -0700 +@@ -93,6 +93,13 @@ + SDL_UnloadObject(mikmod.handle); + return -1; + } ++ mikmod.MikMod_free = ++ (void (*)(void*)) ++ SDL_LoadFunction(mikmod.handle, "MikMod_free"); ++ if ( mikmod.MikMod_free == NULL ) { ++ SDL_UnloadObject(mikmod.handle); ++ return -1; ++ } + mikmod.Player_Active = + (BOOL (*)(void)) + SDL_LoadFunction(mikmod.handle, "Player_Active"); +diff -r c92001a2c18f -r 56cad6484b04 dynamic_mod.h +--- a/dynamic_mod.h Sun Mar 04 21:32:47 2012 +0000 ++++ b/dynamic_mod.h Sun Jul 22 16:13:27 2012 -0700 +@@ -35,6 +35,7 @@ + void (*MikMod_RegisterDriver)(struct MDRIVER*); + int* MikMod_errno; + char* (*MikMod_strerror)(int); ++ void (*MikMod_free)(void*); + BOOL (*Player_Active)(void); + void (*Player_Free)(MODULE*); + MODULE* (*Player_LoadGeneric)(MREADER*,int,BOOL); +diff -r c92001a2c18f -r 56cad6484b04 music_mod.c +--- a/music_mod.c Sun Mar 04 21:32:47 2012 +0000 ++++ b/music_mod.c Sun Jul 22 16:13:27 2012 -0700 +@@ -109,13 +109,13 @@ + + list = mikmod.MikMod_InfoDriver(); + if ( list ) +- free(list); ++ mikmod.MikMod_free(list); + else + mikmod.MikMod_RegisterDriver(mikmod.drv_nos); + + list = mikmod.MikMod_InfoLoader(); + if ( list ) +- free(list); ++ mikmod.MikMod_free(list); + else + mikmod.MikMod_RegisterAllLoaders(); + + diff --git a/sdl_mixer/mikmod2.patch b/sdl_mixer/mikmod2.patch new file mode 100644 index 0000000..6e89ca8 --- /dev/null +++ b/sdl_mixer/mikmod2.patch @@ -0,0 +1,35 @@ + +# HG changeset patch +# User Sam Lantinga +# Date 1343000017 25200 +# Node ID 2ebb0d016f277f7f643d8a66ed0e1099e10d1fba +# Parent 56cad6484b04f83c8d42428c755a046678506436 +Fixed normal linking with libmikmod and linking with earlier versions of libmikmod. + +diff -r 56cad6484b04 -r 2ebb0d016f27 dynamic_mod.c +--- a/dynamic_mod.c Sun Jul 22 16:13:27 2012 -0700 ++++ b/dynamic_mod.c Sun Jul 22 16:33:37 2012 -0700 +@@ -97,8 +97,8 @@ + (void (*)(void*)) + SDL_LoadFunction(mikmod.handle, "MikMod_free"); + if ( mikmod.MikMod_free == NULL ) { +- SDL_UnloadObject(mikmod.handle); +- return -1; ++ /* libmikmod 3.1 and earlier doesn't have it */ ++ mikmod.MikMod_free = free; + } + mikmod.Player_Active = + (BOOL (*)(void)) +@@ -246,6 +246,11 @@ + mikmod.MikMod_RegisterDriver = MikMod_RegisterDriver; + mikmod.MikMod_errno = &MikMod_errno; + mikmod.MikMod_strerror = MikMod_strerror; ++#if LIBMIKMOD_VERSION < ((3<<16)|(2<<8)) ++ mikmod.MikMod_free = free; ++#else ++ mikmod.MikMod_free = MikMod_free; ++#endif + mikmod.Player_Active = Player_Active; + mikmod.Player_Free = Player_Free; + mikmod.Player_LoadGeneric = Player_LoadGeneric; + diff --git a/sdl_net/PKGBUILD b/sdl_net/PKGBUILD new file mode 100644 index 0000000..0b8e45f --- /dev/null +++ b/sdl_net/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=sdl_net +pkgver=1.2.8 +_debver=1.2.8 +_debrel=6 +pkgrel=1 +pkgdesc='A small sample cross-platform networking library' +url='https://www.libsdl.org/projects/SDL_net/' +arch=('i686' 'x86_64') +license=('zlib') +depends=('sdl') +makedepends=('quilt') +source=(https://www.libsdl.org/projects/SDL_net/release/SDL_net-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/sdl-net1.2/sdl-net1.2_$_debver-$_debrel.debian.tar.xz) +sha512sums=('2766ca55343127c619958ab3a3ae3052a27a676839f10a158f7dfc071b8db38c2f1fc853e8add32b9fef94ab07eaa986f46a68e264e8087b57c990af30ea9a0b' + 'ee3d75ac7cf3002c1274210d085ada6d9722421ef65ec5ed752deb939f475493d5359158de5a4254f5810fc89314706ded79e1af7dd5d53bca210ca3a9c140d4') + +prepare() { + cd SDL_net-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd SDL_net-$pkgver + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd SDL_net-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/sdl_pango/PKGBUILD b/sdl_pango/PKGBUILD new file mode 100644 index 0000000..c777d1a --- /dev/null +++ b/sdl_pango/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=sdl_pango +pkgver=0.1.2 +_debver=0.1.2 +_debrel=8 +pkgrel=1 +pkgdesc='Pango SDL binding' +arch=('i686' 'x86_64') +url="http://sdlpango.sourceforge.net/" +license=('LGPL-2.1') +depends=('pango' 'sdl') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/sourceforge/sdlpango/SDL_Pango-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/sdlpango/sdlpango_$_debver-$_debrel.debian.tar.xz) +sha512sums=('081ec57e0f55ce541c35393d6db7ea48b662a5008760781076d70c0a645d47f7e994f695c459ed51f8cb71494911a04cd416733fb57934321b806a1ac9878440' + '645729529a3111ee07bbcabc57f150b597d3bfd106720c8634975315cd274f64e48c441874e756f8bb4c58926b7455a01bae4f5d2a833fac04e438bbd131964c') + +prepare() { + cd SDL_Pango-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd SDL_Pango-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd SDL_Pango-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/sdl_sound/PKGBUILD b/sdl_sound/PKGBUILD new file mode 100644 index 0000000..f4fbd23 --- /dev/null +++ b/sdl_sound/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=sdl_sound +pkgver=1.0.3 +_debver=1.0.3 +_debrel=9 +pkgrel=7 +pkgdesc="A library to decode several popular sound file formats, such as .WAV and .MP3" +url="https://icculus.org/SDL_sound/" +arch=(i686 x86_64) +license=(LGPL-2.1) +depends=(sdl libmikmod libvorbis flac speex smpeg) +makedepends=(quilt) +source=(https://icculus.org/SDL_sound/downloads/SDL_sound-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/sdl-sound1.2/sdl-sound1.2_$_debver-$_debrel.debian.tar.xz) +sha512sums=('3e60671777d804e6104d7d441f4a29866492c9412040eea3fd2283c0914a0a1ebc550260631c2bf500e7d982e05a6f9feeda81e9eeef8257303750c1be582824' + 'd25026dbfafb141b3322651c8617cc16fe2f702fb8560a177d2be7f9d24796a55d403f9832982d28496d5cf7f197f4af0c7833333e494a17549c25e88bcf3606') + +prepare() { + cd SDL_sound-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd SDL_sound-$pkgver + + CFLAGS+=" -I/usr/include/smpeg" + CXXFLAGS+=" -I/usr/include/smpeg" + + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd SDL_sound-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/sdl_ttf/PKGBUILD b/sdl_ttf/PKGBUILD new file mode 100644 index 0000000..3fba539 --- /dev/null +++ b/sdl_ttf/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=sdl_ttf +pkgver=2.0.11 +_debver=2.0.11 +_debrel=6 +pkgrel=1 +pkgdesc='A library that allows you to use TrueType fonts in your SDL applications' +url='https://www.libsdl.org/projects/SDL_ttf/' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('sdl' 'freetype2') +makedepends=('quilt') +source=(https://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/sdl-ttf2.0/sdl-ttf2.0_$_debver-$_debrel.debian.tar.xz) +sha512sums=('64e04d1cd77e525e0f2413ad928841e5d3d09d551c030fc577b50777116580e430cb272b2aeb6191dfcc464669cf2f7a5a50d10e7c75637a3b1e8c8fca7fc78b' + '23a5879efaf42e7aecc652a085824f32052ae2e4acb142b65d88a3c825a3d7dcd4cbd28a9daa5d4b360789bddab2fd3bcf5e2350ce66bbec4cc0ef7dbef747b6') + +prepare() { + cd SDL_ttf-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + touch NEWS README AUTHORS ChangeLog + autoreconf -vi +} + +build() { + cd SDL_ttf-$pkgver + ./configure --prefix=/usr --disable-static + make +} + +package() { + cd SDL_ttf-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/seabios/PKGBUILD b/seabios/PKGBUILD new file mode 100644 index 0000000..9a732c1 --- /dev/null +++ b/seabios/PKGBUILD @@ -0,0 +1,78 @@ +# Maintainer: Jesus E. + +pkgname=seabios +pkgver=1.14.0 +pkgrel=2 +pkgdesc="A 16-bit x86 BIOS" +arch=('any') +url='https://seabios.org/SeaBIOS' +license=('GPL-3') +makedepends=('acpica' 'python') +options=('!makeflags' '!strip') +source=(https://www.seabios.org/downloads/$pkgname-$pkgver.tar.gz + config.coreboot + config.seabios-128k + config.seabios-256k + config.vga.isavga + config.vga.stdvga + config.csm + config.vga.cirrus + config.vga.qxl + config.vga.bochs-display + config.vga.ramfb + config.vga.virtio + reproducible-version.patch) +sha512sums=('215c42f59425f8abd062be7b11fc0e39c977cee5001a2381551b0f851ac337d0dd53c065267e6dee0e710ffd700fa635f9007b89da8dfce0f47122c984ee8146' + 'dc77f693e2426a8a9b084f22d607d9bf6dfd0776cb86373a55d6e02f154f546b6fd616bb981783e914be51eb843311652a90b111fb573e32b3a8207d66aea218' + 'e91fc068680a16439b76cb1910dee9088f703ca50abda405e7277b083ff9183cccdf6b428cc18ae42dd8464fffb567e195d39ed800c68c3b7c85f92166dd2488' + '3d41739944da088edafb3ea298c0d3db59ed638b614c258209a30635caccf86a284f03492612694e3a56f40357743a0a36053e8ec11b7d93853b91ba9e5a502f' + 'aada61232f4834c1e9bec921b1e1365ce5ecb4adf42c659f34cdf051efb56f0ec2e62f0ccf66bb25d9bb0b8601e2df49b712265f19185068d45353c3aacf1cd9' + '4a1b7fcc729d78dc8fd4e73d1cb6258ed9d49f8a91e6e00cc184e07c89a304f8d38ef5446d1c4ba5e8e929c82693d82c21526e42992ad6e1a008f39bb7c90448' + 'a2238723fbbb96184bb52b018633701aeb929bfae43f50659258dee854acaf4f1bdf2c201c65fb46d2712372d11ab345eac1c41068f82d6dcbef91ef9d1d39cd' + 'e9ef2d6bec9419e69bc90adf1a4bb7c174284cd722e53903deea0411f88074cc247069116e03e124715072ec82f153cf6014168febba41369a2569983d3265b6' + '9ebcb6702cf28685daf1821be26bab8ddc791ef2c118217c984c03c5fb77c8b9691c0fa6931367a63b8d97d67c973cd4b620fe9ca9c76da51a9b2ab3b4b5653b' + 'c395975320ec9e4eabf0ef60c25122e141de0607c161e9c0ec507916297b5fc6bbf7874a1fd8c3d73ec82fb9d00b5ff8a60344cabd11c404f3de0b7b3f4ed6bf' + '00bffe38865d210c2d3473e6a6913eda51235b89c03d2c35e04b606e19f1881857ac5cfed77bd127c1fe377065fdb435342111d311d7b48ce1d21b7b863e3bf3' + '4d627be11d79f0b8bd814a49e608826375aba6b59a0189dcba9afe24a181347b92e6ab18e0d9199e2f7a78f8fb02f03dad84c63fbbc2ffe9af76777ef28c5f8a' + '53f70350678f9557c39ce12fb7dc82dbb033414abb41566fc2245ec7000a21c8ab291a97205e371888abc3123a952e7e85ab5700a7586242a7289111ec24685a') + +build_bios() { + make clean distclean + cp $1 .config + make oldnoconfig V=1 + + make V=1 $4 + + cp out/$2 binaries/$3 +} + +prepare() { + cd seabios-$pkgver + + patch -p1 < $srcdir/reproducible-version.patch + + rm -rf binaries + mkdir binaries + + echo "Hyperbola GNU/Linux-libre ${pkgver}-${pkgrel}" > .version +} + +build() { + cd seabios-$pkgver + # seabios + build_bios "${srcdir}"/config.csm Csm16.bin bios-csm.bin + build_bios "${srcdir}"/config.coreboot bios.bin.elf bios-coreboot.bin + build_bios "${srcdir}"/config.seabios-128k bios.bin bios.bin + build_bios "${srcdir}"/config.seabios-256k bios.bin bios-256k.bin + # seavgabios + for config in "${srcdir}"/{config.vga.isavga,config.vga.stdvga,config.vga.cirrus,config.vga.qxl,config.vga.ramfb,config.vga.virtio,config.vga.bochs-display}; do + name=${config#*config.vga.} + build_bios ${config} vgabios.bin vgabios-${name}.bin out/vgabios.bin + done +} + +package() { + cd seabios-$pkgver + install -Dm644 binaries/*.bin -t "${pkgdir}/usr/share/qemu" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/seabios/config.coreboot b/seabios/config.coreboot new file mode 100644 index 0000000..a0323b2 --- /dev/null +++ b/seabios/config.coreboot @@ -0,0 +1,2 @@ +CONFIG_QEMU_HARDWARE=y +CONFIG_COREBOOT=y diff --git a/seabios/config.csm b/seabios/config.csm new file mode 100644 index 0000000..c1d8df1 --- /dev/null +++ b/seabios/config.csm @@ -0,0 +1,2 @@ +CONFIG_QEMU_HARDWARE=y +CONFIG_CSM=y diff --git a/seabios/config.seabios-128k b/seabios/config.seabios-128k new file mode 100644 index 0000000..74b215d --- /dev/null +++ b/seabios/config.seabios-128k @@ -0,0 +1,14 @@ +# for qemu machine types 1.7 + older +# need to turn off features (bootsplash) to make it fit into 128k +CONFIG_QEMU=y +CONFIG_ROM_SIZE=128 +CONFIG_BOOTSPLASH=n +CONFIG_XEN=n +CONFIG_USB_OHCI=n +CONFIG_USB_XHCI=n +CONFIG_USB_UAS=n +CONFIG_SDCARD=n +CONFIG_TCGBIOS=n +CONFIG_MPT_SCSI=n +CONFIG_DEBUG_LEVEL=0 +CONFIG_DEBUG_IO=n diff --git a/seabios/config.seabios-256k b/seabios/config.seabios-256k new file mode 100644 index 0000000..65e5015 --- /dev/null +++ b/seabios/config.seabios-256k @@ -0,0 +1,3 @@ +# for qemu machine types 2.0 + newer +CONFIG_QEMU=y +CONFIG_ROM_SIZE=256 diff --git a/seabios/config.vga.bochs-display b/seabios/config.vga.bochs-display new file mode 100644 index 0000000..d2adaae --- /dev/null +++ b/seabios/config.vga.bochs-display @@ -0,0 +1,3 @@ +CONFIG_BUILD_VGABIOS=y +CONFIG_DISPLAY_BOCHS=y +CONFIG_VGA_PCI=y diff --git a/seabios/config.vga.cirrus b/seabios/config.vga.cirrus new file mode 100644 index 0000000..c8fe582 --- /dev/null +++ b/seabios/config.vga.cirrus @@ -0,0 +1,3 @@ +CONFIG_BUILD_VGABIOS=y +CONFIG_VGA_CIRRUS=y +CONFIG_VGA_PCI=y diff --git a/seabios/config.vga.isavga b/seabios/config.vga.isavga new file mode 100644 index 0000000..e55e294 --- /dev/null +++ b/seabios/config.vga.isavga @@ -0,0 +1,3 @@ +CONFIG_BUILD_VGABIOS=y +CONFIG_VGA_BOCHS=y +CONFIG_VGA_PCI=n diff --git a/seabios/config.vga.qxl b/seabios/config.vga.qxl new file mode 100644 index 0000000..d393f0c --- /dev/null +++ b/seabios/config.vga.qxl @@ -0,0 +1,6 @@ +CONFIG_BUILD_VGABIOS=y +CONFIG_VGA_BOCHS=y +CONFIG_VGA_PCI=y +CONFIG_OVERRIDE_PCI_ID=y +CONFIG_VGA_VID=0x1b36 +CONFIG_VGA_DID=0x0100 diff --git a/seabios/config.vga.ramfb b/seabios/config.vga.ramfb new file mode 100644 index 0000000..c809c79 --- /dev/null +++ b/seabios/config.vga.ramfb @@ -0,0 +1,3 @@ +CONFIG_BUILD_VGABIOS=y +CONFIG_VGA_RAMFB=y +CONFIG_VGA_PCI=n diff --git a/seabios/config.vga.stdvga b/seabios/config.vga.stdvga new file mode 100644 index 0000000..7d063b7 --- /dev/null +++ b/seabios/config.vga.stdvga @@ -0,0 +1,3 @@ +CONFIG_BUILD_VGABIOS=y +CONFIG_VGA_BOCHS=y +CONFIG_VGA_PCI=y diff --git a/seabios/config.vga.virtio b/seabios/config.vga.virtio new file mode 100644 index 0000000..aa7a15b --- /dev/null +++ b/seabios/config.vga.virtio @@ -0,0 +1,6 @@ +CONFIG_BUILD_VGABIOS=y +CONFIG_VGA_BOCHS=y +CONFIG_VGA_PCI=y +CONFIG_OVERRIDE_PCI_ID=y +CONFIG_VGA_VID=0x1af4 +CONFIG_VGA_DID=0x1050 diff --git a/seabios/reproducible-version.patch b/seabios/reproducible-version.patch new file mode 100644 index 0000000..3c3498b --- /dev/null +++ b/seabios/reproducible-version.patch @@ -0,0 +1,15 @@ +diff --git a/scripts/buildversion.py b/scripts/buildversion.py +index 8875497..a0eb646 100755 +--- a/scripts/buildversion.py ++++ b/scripts/buildversion.py +@@ -124,10 +124,6 @@ def main(): + cleanbuild = cleanbuild and ver and options.extra != "" + if not ver: + ver = "?" +- if not cleanbuild: +- btime = time.strftime("%Y%m%d_%H%M%S") +- hostname = socket.gethostname() +- ver = "%s-%s-%s" % (ver, btime, hostname) + write_version(outfile, ver + options.extra, toolstr) + + if __name__ == '__main__': diff --git a/searchmonkey/PKGBUILD b/searchmonkey/PKGBUILD new file mode 100644 index 0000000..8940d2c --- /dev/null +++ b/searchmonkey/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=searchmonkey +pkgver=0.8.3 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A powerful GUI search utility for matching regex patterns" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/searchmonkey/' +license=('LGPL-2.1') +depends=('gtk2' 'libzip' 'poppler-glib') +makedepends=('intltool' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/s/searchmonkey/searchmonkey_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/s/searchmonkey/searchmonkey_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('b6919433bde1d8c325fa6ccb7222a4fefa02dd10f9c614b92b3984a9ce4e6acbe1cce2d2caba4ee1f829e34b55e9c45c2703a5cf32d87e1dd6beaecaef82d402' + '294bfae7d19ffea3bbbbe3b817ee70e4c2cf94ae64842c9d8912dc6fc59bd88e545855ce208d20d478df97ab9e32cb6569886ee74dc8368c31a3f46d1dc9dd9c') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + CFLAGS=-Wno-error ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING.LESSER -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/serd/PKGBUILD b/serd/PKGBUILD new file mode 100644 index 0000000..685c41f --- /dev/null +++ b/serd/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Jesus E. + +pkgname=serd +pkgver=0.30.10 +_debver=0.30.10 +_debrel=1 +pkgrel=1 +pkgdesc="Lightweight C library for RDF syntax supporting reading/ writing Turtle and NTriples." +arch=('i686' 'x86_64') +url="https://drobilla.net/software/serd/" +license=('ISC') +depends=('glibc') +makedepends=('waf' 'quilt') +source=("https://download.drobilla.net/${pkgname}-${pkgver}.tar.bz2"{,.sig} + "https://deb.debian.org/debian/pool/main/s/serd/serd_$_debver-$_debrel.debian.tar.xz") +sha512sums=('ed7b49abfd3dc3a724b047f5f0cd07b811596330c96d91c0ce90540440f03260e05daee76c3ccccc3d4ca39afbbd4f3d07decbb601730e90c133a09c640c0006' + 'SKIP' + '4e5c1e3c6501b1acb96348c1f825c667b1f5e226621b7a49db2ee66cf0d043ad98baed0eaa2c6179f1cec2d3c1899cc9de9a8200be030dc60f9635d8950d0d9c') +validpgpkeys=('907D226E7E13FA337F014A083672782A9BF368F3') # David Robillard + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + # remove call to local ldconfig + sed -i "/ldconfig/d" wscript + # let wscript(s) find the custom waf scripts + mkdir -pv tools + touch __init__.py + cp -v waflib/extras/{autoship,autowaf,lv2}.py tools/ + mkdir -pv plugins/tools/ + cp -v waflib/extras/{autoship,autowaf,lv2}.py plugins/tools/ + rm -rv waflib + sed -e 's/waflib.extras/tools/g' \ + -e "s/load('autowaf'/load('autowaf', tooldir='tools'/g" \ + -e "s/load('lv2'/load('lv2', tooldir='tools'/g" \ + -i wscript +} + +build() { + cd "${pkgname}-${pkgver}" + waf configure --prefix=/usr \ + --mandir=/usr/share/man \ + --test + waf -v build +} + +check() { + cd "${pkgname}-${pkgver}" + waf test +} + +package() { + cd "${pkgname}-${pkgver}" + waf install --destdir="${pkgdir}" + # license + install -vDm 644 COPYING \ + "$pkgdir/usr/share/licenses/${pkgname}/COPYING" + # docs + install -t "$pkgdir/usr/share/doc/${pkgname}" \ + -vDm 644 {AUTHORS,NEWS,README.md} +} +# vim:set ts=2 sw=2 et: diff --git a/setconf/PKGBUILD b/setconf/PKGBUILD new file mode 100644 index 0000000..c0b0ab9 --- /dev/null +++ b/setconf/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=setconf +pkgver=0.7.7 +pkgrel=1 +pkgdesc='Utility for easily changing settings in configuration files' +arch=(any) +url='https://$pkgname.roboticoverlords.org/' +license=(GPL-2) +depends=(python) +source=(#"https://$pkgname.roboticoverlords.org/$pkgname-$pkgver.tar.xz"{,.asc} # TLS broken + "https://github.com/xyproto/$pkgname/releases/download/$pkgver/$pkgname-$pkgver.tar.xz") +sha512sums=('18105c879f5e3fa0c85d75be9e6083708807882c35c6033888ef5454822e34ec21614818239ca839b8c3306cdf000f0d955d8040e41520501e54953ef171941e') +# 'SKIP') +validpgpkeys=('962855F072C7A01846405864FCF3C8CB5CF9C8D4') + +package() { + cd "$pkgname-$pkgver" + + install -Dm755 "$pkgname.py" "$pkgdir/usr/bin/$pkgname" + install -Dm644 "$pkgname.1.gz" "$pkgdir/usr/share/man/man1/$pkgname.1.gz" + + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim: ts=2 sw=2 et: diff --git a/sfml/PKGBUILD b/sfml/PKGBUILD new file mode 100644 index 0000000..0579ecb --- /dev/null +++ b/sfml/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=sfml +pkgver=2.5.1 +_debver=2.5.1+dfsg +_debrel=1 +pkgrel=1 +pkgdesc='A simple, fast, cross-platform, and object-oriented multimedia API' +arch=('i686' 'x86_64') +url='http://www.sfml-dev.org/' +license=('zlib') +depends=('libsndfile' 'libxrandr' 'openal' 'glew' 'freetype2' 'libx11') +makedepends=('mesa' 'cmake' 'doxygen' 'quilt') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/SFML/SFML/archive/${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/libs/libsfml/libsfml_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('7aed2fc29d1da98e6c4d598d5c86cf536cb4eb5c2079cdc23bb8e502288833c052579dadbe0ce13ad6461792d959bf6d9660229f54c54cf90a541c88c6b03d59' + 'de501f924d0e075dfef92cadbf95bc255365b9bdd9bd5b5395d10a2777109347d28a7e9797fdc558ae67a87b5a1945a9a0f02d8904acb00b86757ec3610184ac') + +prepare() { + cd SFML-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd SFML-${pkgver} + + mkdir build && cd build + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DSFML_USE_SYSTEM_DEPS=ON \ + -DSFML_BUILD_EXAMPLES=1 \ + -DSFML_BUILD_DOC=1 \ + -DSFML_INSTALL_PKGCONFIG_FILES=1 + make + make doc +} + +package() { + cd SFML-${pkgver}/build + + make DESTDIR="$pkgdir/" install + + install -Dm644 ../license.md -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/sfsexp/PKGBUILD b/sfsexp/PKGBUILD new file mode 100644 index 0000000..ccf2f75 --- /dev/null +++ b/sfsexp/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=sfsexp +pkgver=1.3.1+18~git20210718 +pkgrel=1 +pkgdesc="Small Fast S-Expression Library" +arch=('i686' 'x86_64') +url="https://github.com/mjsottile/sfsexp" +license=('LGPL-2.1') +depends=('glibc') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/s/sfsexp/sfsexp_${pkgver}.orig.tar.xz") +sha512sums=('888826a243d5faee573ac9f0e226776f5b75492cd5ac3d09d53153850195244c0adbd13980c4fc36e4d1779267fc3e75b91e16b04b5292a2afb5d8bb6738a9d2') + +prepare() { + cd "$pkgname-$pkgver" + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 LICENSE_LGPL -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/sgml-common/PKGBUILD b/sgml-common/PKGBUILD new file mode 100644 index 0000000..01c71d7 --- /dev/null +++ b/sgml-common/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname='sgml-common' +pkgver=0.6.3 +pkgrel=1 +pkgdesc='Tools for maintaining centralized SGML catalogs' +arch=('any') +url='https://www.docbook.org/xml/' +license=('GPL-3') +install='sgml-common.install' +depends=('sh') +source=("https://www.sourceware.org/pub/docbook-tools/new-trials/SOURCES/sgml-common-${pkgver}.tgz" + "sgml-common-0.6.3-manpage-1.patch") +sha512sums=('3c4a55f555596b2a6bf6af66c497679226e7b40625ac16832150488311cba7f9fc523435eea5837262a5517f5c09c4c0e07fe4a2cf02184d4027609c26e4bc0c' + 'c584ff6e66e1d58456c07849bf96fedd3f1df0b93430f6301c4d4ab9906821dea0cbac82eada19197540b5e31f13febd04fadda5b6e2ba4b0b6ee8f0328292f7') + +prepare() { + cd sgml-common-${pkgver} + patch -Np1 -i ../sgml-common-0.6.3-manpage-1.patch +} + +build() { + cd sgml-common-${pkgver} + autoreconf -vfi + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package(){ + cd sgml-common-${pkgver} + make DESTDIR="$pkgdir" docdir=/usr/share/doc install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/sgml-common/sgml-common-0.6.3-manpage-1.patch b/sgml-common/sgml-common-0.6.3-manpage-1.patch new file mode 100644 index 0000000..c3773d1 --- /dev/null +++ b/sgml-common/sgml-common-0.6.3-manpage-1.patch @@ -0,0 +1,14 @@ +Submitted By: Thomas Pegg +Date: 2003-11-18 +Initial Package Version: 0.6.3 +Origin: Thomas Pegg +Description: Fixes syntax of Makefile.am for installation of man pages, +for use with current automake versions 1.7.8 and higher. + +diff -Naur sgml-common-0.6.3.orig/doc/man/Makefile.am sgml-common-0.6.3/doc/man/Makefile.am +--- sgml-common-0.6.3.orig/doc/man/Makefile.am 2001-01-30 14:42:22.000000000 +0000 ++++ sgml-common-0.6.3/doc/man/Makefile.am 2003-11-18 16:48:47.000000000 +0000 +@@ -1,2 +1 @@ +-man8dir = $(mandir)/man8 +-man8_DATA = *.8 ++man_MANS = install-catalog.8 diff --git a/sgml-common/sgml-common.install b/sgml-common/sgml-common.install new file mode 100644 index 0000000..f4bf2ae --- /dev/null +++ b/sgml-common/sgml-common.install @@ -0,0 +1,48 @@ +# arg 1: the new package version +pre_install() { + /bin/true +} + +# arg 1: the new package version +post_install() { + add_catalog "${1%-*}" +} + +# arg 1: the new package version +# arg 2: the old package version +pre_upgrade() { + remove_catalog "${2%-*}" +} + +# arg 1: the new package version +# arg 2: the old package version +post_upgrade() { + add_catalog "${1%-*}" +} + +# arg 1: the old package version +pre_remove() { + remove_catalog "${1%-*}" +} + +# arg 1: the old package version +post_remove() { + /bin/true +} + + +add_catalog() { + install-catalog --add /etc/sgml/sgml-ent.cat \ + /usr/share/sgml/sgml-iso-entities-8879.1986/catalog > /dev/null 2>&1 + + install-catalog --add /etc/sgml/sgml-docbook.cat \ + /etc/sgml/sgml-ent.cat > /dev/null 2>&1 +} + +remove_catalog() { + install-catalog --remove /etc/sgml/sgml-ent.cat \ + /usr/share/sgml/sgml-iso-entities-8879.1986/catalog > /dev/null 2>&1 + + install-catalog --remove /etc/sgml/sgml-docbook.cat \ + /etc/sgml/sgml-ent.cat > /dev/null 2>&1 +} diff --git a/sh-roundup/PKGBUILD b/sh-roundup/PKGBUILD new file mode 100644 index 0000000..f935f80 --- /dev/null +++ b/sh-roundup/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=sh-roundup +_pkgname=roundup +pkgver=0.0.6 +pkgrel=2 +pkgdesc="A unit testing framework for POSIX shell" +arch=('any') +url='https://bmizerany.github.io/roundup/' +license=('Expat') +depends=('bash') +makedepends=('ruby-ronn-ng') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/bmizerany/$_pkgname/archive/v$pkgver.tar.gz" + "makefile-fix.patch") +sha512sums=('a7a249d16467bd3835d555288ec6c3d84a36f2f7f2ae5da90e7624bc76a7741788499fd635d3001c086923914870392c23d765ca07ab7c97e58b9deec9989827' + 'f7dade356d74d66dac5ad049eaeac4c156cdedf8036f4a8b4924aeb84bb002452e79d685566da8e109857c7624a2f561885f03d3d89deeb3c39e09df3135e936') + +prepare() { + cd "$srcdir/$_pkgname-$pkgver" + patch -i $srcdir/makefile-fix.patch Makefile +} + +build() { + cd "$srcdir/$_pkgname-$pkgver" + ./configure \ + --prefix="$pkgdir"/usr + make -j1 build man +} + +package() { + cd "$srcdir/$_pkgname-$pkgver" + make -j1 install install-man + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/sh-roundup/makefile-fix.patch b/sh-roundup/makefile-fix.patch new file mode 100644 index 0000000..b97bebf --- /dev/null +++ b/sh-roundup/makefile-fix.patch @@ -0,0 +1,11 @@ +--- Makefile.orig ++++ Makefile +@@ -79,7 +79,7 @@ + chmod 0755 $(bindir)/roundup + + install-man: man +- -for i in {1..9} ; do cp *.$$i $(mandir)/man$$i 2>/dev/null ; done ++ shopt -s nullglob; for file in *.{1..9}; do install -Dm644 $$file $(mandir)/man$${file##*.}/$${file##*/}; done + + .PHONY: pages + pages : doc diff --git a/shared-mime-info/PKGBUILD b/shared-mime-info/PKGBUILD new file mode 100644 index 0000000..58a128d --- /dev/null +++ b/shared-mime-info/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=shared-mime-info +pkgver=1.15 +pkgrel=3 +pkgdesc="Freedesktop.org Shared MIME Info" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libxml2' 'glib2') +makedepends=('itstool' 'gettext-tiny' 'xmlto' 'docbook-xsl') +install=shared-mime-info.install +url="https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec" +source=("https://gitlab.freedesktop.org/xdg/shared-mime-info/uploads/b27eb88e4155d8fccb8bb3cd12025d5b/$pkgname-$pkgver.tar.xz" + update-mime-database.hook) +sha512sums=('3666aa500dfa6a28bd0524400c47fa16d90ae61f8c80f350fd895972319ec2f511618b8a7fa3cbde621edee46fde19e4506bda62f0bd2d0ede1b08d7bdb9aef2' + '365e2bca04e108a6a65c1e8a2b82efcee3916630ca522808e51074db7fb499d7f7c67bb84b304f5f398c17379ff26ec7fd1e44d56991a47581111c1c360ffdb8') +options=(!makeflags) + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + # https://bugs.archlinux.org/task/38836 + # https://bugs.freedesktop.org/show_bug.cgi?id=70366 + export ac_cv_func_fdatasync=no + ./configure \ + --prefix=/usr \ + --disable-update-mimedb + make +} + +check() { + cd "${srcdir}/${pkgname}-${pkgver}" + make -k check +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -Dm644 "$srcdir"/update-mime-database.hook "$pkgdir"/usr/share/libalpm/hooks/update-mime-database.hook +} + +# vim:set ts=2 sw=2 et: diff --git a/shared-mime-info/shared-mime-info.install b/shared-mime-info/shared-mime-info.install new file mode 100644 index 0000000..9450d6b --- /dev/null +++ b/shared-mime-info/shared-mime-info.install @@ -0,0 +1,7 @@ +post_remove() { + if [ -d usr/share/mime ]; then + rm -f usr/share/mime/{globs,globs2,icons,treemagic,generic-icons,types,magic,XMLnamespaces,subclasses,aliases,mime.cache} + rm -rf usr/share/mime/{application,audio,image,inode,message,model,multipart,text,video,x-content,x-epoc} + rmdir --ignore-fail-on-non-empty usr/share/mime + fi +} diff --git a/shared-mime-info/update-mime-database.hook b/shared-mime-info/update-mime-database.hook new file mode 100644 index 0000000..f8470fb --- /dev/null +++ b/shared-mime-info/update-mime-database.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/mime/packages/*.xml + +[Action] +Description = Updating the MIME type database... +When = PostTransaction +Exec = /usr/bin/update-mime-database /usr/share/mime diff --git a/sharutils/PKGBUILD b/sharutils/PKGBUILD new file mode 100644 index 0000000..deb5fc9 --- /dev/null +++ b/sharutils/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=sharutils +pkgver=4.15.2 +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="Makes so-called shell archives out of many files" +url='https://www.gnu.org/software/sharutils/' +license=('GPL-3') +arch=('i686' 'x86_64') +depends=('perl' 'glibc' 'texinfo') +makedepends=('quilt') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.xz"{,.sig} + "https://deb.debian.org/debian/pool/main/s/sharutils/sharutils_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('80d0b804a0617e11e5c23dc0d59b218bbf93e40aaf5e9a5401a18ef9cb700390aab711e2b2e2f26c8fd5b8ef99a91d3405e01d02cadabcba7639979314e59f8d' + 'SKIP' + '9194761e95aa7a72ace68a0a045bfa198eef2bf7195b6b99c1c852b62dec706f34a5d78ffd7777446f0b43678a478c61e734ee73dc5f19a297c03fb7e8e32581') +validpgpkeys=('1F967B15DEB2349CACDF3D71D9204CB5BFBF0221') # Bruce Korb + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + sed 's/FUNC_FFLUSH_STDIN/-1/g' -i lib/fseeko.c +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + CFLAGS+=' -fcommon' + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/shiboken/PKGBUILD b/shiboken/PKGBUILD new file mode 100644 index 0000000..3f4214a --- /dev/null +++ b/shiboken/PKGBUILD @@ -0,0 +1,117 @@ +# Maintainer: Jesus E. + +pkgbase=shiboken +pkgname=('python-shiboken' 'tauthon-shiboken' 'shiboken') +pkgver=1.2.4 +pkgrel=1 +arch=('i686' 'x86_64') +license=('GPL-2' 'LGPL-2.1') +url='http://www.pyside.org' +makedepends=('cmake' 'tauthon' 'python' 'qt4' 'libxslt') +source=("$pkgbase-$pkgver.tar.gz::https://github.com/PySide/Shiboken/archive/$pkgver.tar.gz" + "support-new-python.diff") +sha512sums=('daa3fadf3daffaec52f199c0285a37431a4b6b0d450a43a035f49e5505a35b666a1cb0b334c7267af7530841dadbf0b97296812141c93de3b7cd07c7d9016a2a' + 'e14854a6119bed1824d7e18daf235c4d000a1519abd0912fa68cd06560a60cc9b3b2c4877ace7ce6ac32f301383ae2cc047a24ad3c190aae2e2de1c01405ad46') + +prepare() { + cd "$srcdir/Shiboken-$pkgver" + patch -p1 -i "$srcdir/support-new-python.diff" +} + +build() { + cd "$srcdir/Shiboken-$pkgver" + + # build tauthon + mkdir -p build-py2 && cd build-py2 + _ver2=$(tauthon -c "import platform; print(platform.python_version())") + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTS=OFF \ + -DPYTHON_EXECUTABLE=/usr/bin/tauthon \ + -DPYTHON_INCLUDE_DIR=$(tauthon -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \ + -DPYTHON_LIBRARY=$(tauthon -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \ + -DQT_QMAKE_EXECUTABLE=qmake-qt4 + make + + # build python + cd "$srcdir/Shiboken-$pkgver" + mkdir -p build-py3 && cd build-py3 + + _ver3=$(python -c "import platform; print(platform.python_version())") + declare -a _extra_library_opt + declare -a _extra_include_opt + if [[ ${_ver3//./} -lt 380 ]]; then + _includedir=/usr/include/python${_ver3%.*}m + _library=/usr/lib/libpython${_ver3%.*}m.so + _extra_library_opt+=("-DPYTHON3_LIBRARIES=${_library}") + _extra_include_opt+=("-DPYTHON3_INCLUDE_DIRS=${_includedir}") + else + _includedir=/usr/include/python${_ver3%.*} + _library=/usr/lib/libpython${_ver3%.*}.so + _extra_library_opt+=("-DPYTHON3_LIBRARY=${_library}") + _extra_include_opt+=("-DPYTHON3_INCLUDE_DIR=${_includedir}") + fi + + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTS=OFF \ + -DUSE_PYTHON3=yes \ + "${_extra_library_opt[@]}" \ + "${_extra_include_opt[@]}" \ + -DQT_QMAKE_EXECUTABLE=qmake-qt4 + make +} + +package_shiboken() { + pkgdesc="CPython bindings generator for C++ libraries" + depends=('python' 'qt4' 'libxslt') + optdepends=('tauthon-shiboken: for compilation against tauthon' + 'python-shiboken: for compilation against python') + + # Header files, /usr/bin/shiboken, pkgconfig, man page + cd "$srcdir/Shiboken-$pkgver/build-py3" + make DESTDIR="$pkgdir" install + + cd "$srcdir/Shiboken-$pkgver/build-py2" + cd data + install -Dm 644 ShibokenConfig-python2.8.cmake "$pkgdir/usr/lib/cmake/Shiboken-$pkgver/" + install -Dm 644 shiboken.pc "$pkgdir/usr/lib/pkgconfig/shiboken-py2.pc" + + rm -rf "$pkgdir/usr/lib/python"* + rm -rf "$pkgdir/usr/lib/libshiboken"* + rm -rf "$pkgdir/usr/lib/pkgconfig/" + rm "$pkgdir"/usr/lib/cmake/Shiboken-$pkgver/ShibokenConfig*python*.cmake + + install -Dm644 "$srcdir/Shiboken-$pkgver/"COPYING{,.libsample,.libshiboken} -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_tauthon-shiboken() { + pkgdesc="Support library for Tauthon bindings" + depends=("qt4>=4.8" 'libxslt' 'tauthon' 'shiboken') + + cd "$srcdir/Shiboken-$pkgver/build-py2" + make DESTDIR="$pkgdir" install + + cd "$srcdir/Shiboken-$pkgver/build-py2" + cd data + install -Dm 644 ShibokenConfig-python2.8.cmake "$pkgdir/usr/lib/cmake/Shiboken-$pkgver/" + mv "$pkgdir"/usr/lib/pkgconfig/shiboken{,-py2}.pc + + rm -rf "$pkgdir"/usr/{include,bin,share} + rm "$pkgdir/usr/lib/cmake/Shiboken-$pkgver/ShibokenConfigVersion.cmake" + rm "$pkgdir/usr/lib/cmake/Shiboken-$pkgver/ShibokenConfig.cmake" + + install -Dm644 "$srcdir/Shiboken-$pkgver/"COPYING{,.libsample,.libshiboken} -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_python-shiboken() { + pkgdesc="Support library for Python bindings" + depends=("qt4>=4.8" 'libxslt' 'python' 'shiboken') + + cd "$srcdir/Shiboken-$pkgver/build-py3" + make DESTDIR="$pkgdir" install + + rm -rf "$pkgdir"/usr/{include,bin,share} + rm "$pkgdir/usr/lib/cmake/Shiboken-$pkgver/ShibokenConfigVersion.cmake" + rm "$pkgdir/usr/lib/cmake/Shiboken-$pkgver/ShibokenConfig.cmake" + + install -Dm644 "$srcdir/Shiboken-$pkgver/"COPYING{,.libsample,.libshiboken} -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/shiboken2/PKGBUILD b/shiboken2/PKGBUILD new file mode 100644 index 0000000..1c8dc05 --- /dev/null +++ b/shiboken2/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Jesus E. + +pkgbase=shiboken2 +pkgname=('shiboken2' 'python-shiboken2') +_qtver=5.15.2 +_clangver=11.0.0 +pkgver=${_qtver/-/} +_debver=5.15.2 +_debrel=1 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.qt.io' +license=('LGPL-3') +pkgdesc='Generates bindings for C++ libraries using CPython source code' +makedepends=('clang' 'llvm' 'cmake' 'libxslt' 'qt-xmlpatterns' 'python-sphinx' 'quilt') +_pkgfqn=pyside-setup-opensource-src-$_qtver +source=("https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-$pkgver-src/${_pkgfqn}.tar.xz" + "https://deb.debian.org/debian/pool/main/p/pyside2/pyside2_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5043c1c9db4ba0133baaabb4d4943182e9741b1007bedd992394758707a37bba0688dc6413ea46620e7c2fb09daa3c74e6a7bb2c302b9d08e5f3bb7575d02b62' + 'e83a01e3dbcbcf260f63af2854b6b69b527f286b63997191ea7325a7106c4c14ba386d4a0b9502281547e18eaa4934970c4457af5250984816a8212d4d38a7a0') + +prepare() { + cd ${_pkgfqn} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S ${_pkgfqn}/sources/shiboken2 \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTS=OFF \ + -DUSE_PYTHON_VERSION=3 + cmake --build build +} + +package_shiboken2() { + depends=("clang=${_clangver}" 'llvm' 'libxslt' 'qt-xmlpatterns') + + DESTDIR="$pkgdir" cmake --install build + # Provided in python-shiboken2 + rm -r "$pkgdir"/usr/lib/{python*,libshiboken*} + # Conflicts with shiboken6 and doesn't work anyway + rm "$pkgdir"/usr/bin/shiboken_tool.py + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPLv3 -t "${pkgdir}"/usr/share/licenses/${pkgname} +} + +package_python-shiboken2() { + depends=('python') + + DESTDIR="$pkgdir" cmake --install build + # Provided in shiboken2 + rm -r "$pkgdir"/usr/{bin,include,lib/{cmake,pkgconfig}} + + # Install egg-info + cd $_pkgfqn + python setup.py egg_info --build-type=shiboken2 + _pythonpath=`python -c "from sysconfig import get_path; print(get_path('platlib'))"` + cp -r shiboken2.egg-info "$pkgdir"/$_pythonpath + # Install license + install -D -m644 "${srcdir}"/${_pkgfqn}/LICENSE.LGPLv3 -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/shntool/PKGBUILD b/shntool/PKGBUILD new file mode 100644 index 0000000..b995984 --- /dev/null +++ b/shntool/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: Jesus E. + +_pkgname=shntool-libre +pkgname=shntool +pkgver=3.0.10 +_debver=3.0.10 +_debrel=1 +pkgrel=1 +pkgdesc="A multi-purpose WAVE data processing and reporting utility" +arch=('i686' 'x86_64') +url="http://shnutils.freeshell.org/shntool/" +license=('GPL-2') +options=(!emptydirs) +depends=('glibc') +makedepends=('quilt') +optdepends=('flac: support for flac format' + 'wavpack: support for wv format') +mksource=("https://deb.debian.org/debian/pool/main/s/shntool/shntool_${pkgver}.orig.tar.gz") +source=("https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/s/shntool/shntool_3.0.10-1.debian.tar.xz" + "libre.patch") +mksha512sums=('2150d7123860abb54a56a1615bda991ed3713d73c338723f28b7d01a63c49a47809be16dc57b5b4edeee1567b003f9a4b54945c1cd08440f9503d22b91eaa06d') +sha512sums=('dc0a8593fb570679f00fa77db8ac7e0846492995a8a1e7826b3481688c4c7ccbb33cf00c9f486ca6cff4b17c07898db768ebdda791348e5f95cfe351ae30d1e2' + 'SKIP' + '4b30c683dbe2ca202bf6673889052710e33ca5c5a74b1365cc5063f409641254021f55d55663aa15f71857c02173909ce9c60966cc696d87496db1dbd5634313' + 'e856faa83658c80199e702949211a8e2b8d1c15ea4d20ef69b13df8ea5994f44cbcbac2425a6641608c1d02e5039ba2837624bcab270cfe23c28af37de13f971') +validpgpkeys=('684D54A189305A9CC95446D36B888913DDB59515') # Márcio Silva + +mksource() { + cd "${srcdir}"/${pkgname}-${pkgver} + + # remove unfree codecs for APE, OFR and LPAC + rm "${srcdir}/${pkgname}-${pkgver}/src/"{format_ape.c,format_ofr.c,format_lpac.c} + rm "${srcdir}/${pkgname}-${pkgver}/"configure +} + +prepare() { + cd "${srcdir}"/${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # patch for libre version without unfree formats and codecs + patch -Np1 -i "${srcdir}/libre.patch" + autoreconf -vfi +} + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}"/${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/shntool/libre.patch b/shntool/libre.patch new file mode 100644 index 0000000..ebff3bf --- /dev/null +++ b/shntool/libre.patch @@ -0,0 +1,128 @@ +--- a/configure.ac 2009-03-30 07:55:33.000000000 +0200 ++++ b/configure.ac 2022-01-14 01:00:11.938929793 +0100 +@@ -27,7 +27,7 @@ + ac_build_modes="len fix hash pad join split cat cmp cue conv info strip gen trim" + + dnl default file formats - used if --with-formats is not specified +-ac_build_formats="wav aiff shn flac ape alac tak ofr tta als wv lpac la mkw bonk kxs cust term null" ++ac_build_formats="wav aiff shn flac alac tak tta als wv la mkw bonk kxs cust term null" + + ac_alternate_modes= + ac_alternate_formats= +@@ -101,10 +101,7 @@ + format_exists=true + case $format in + aiff ) format_aiff=true ;; +- ape ) format_ape=true ;; + flac ) format_flac=true ;; +- lpac ) format_lpac=true ;; +- ofr ) format_ofr=true ;; + shn ) format_shn=true ;; + wv ) format_wv=true ;; + alac ) format_alac=true ;; +@@ -152,18 +149,6 @@ + AC_CHECK_PROG([SOX],[sox],[yes],[no (install for aiff support)]) + fi + +-if test x$format_ape = xtrue; then +- AC_CHECK_PROG([MAC],[mac],[yes],[no (install for ape support)]) +-fi +- +-if test x$format_ofr = xtrue; then +- AC_CHECK_PROG([OPTIMFROG],[ofr],[yes],[no (install for ofr support)]) +-fi +- +-if test x$format_lpac = xtrue; then +- AC_CHECK_PROG([LPAC],[lpac],[yes],[no (install for lpac support)]) +-fi +- + if test x$format_wv = xtrue; then + AC_CHECK_PROG([WAVPACK],[wvunpack],[yes],[no (install for wv support)]) + fi +--- a/src/Makefile.am 2008-02-19 00:11:46.000000000 +0100 ++++ b/src/Makefile.am 2022-01-14 00:46:28.339812684 +0100 +@@ -1,7 +1,7 @@ + CORE_SOURCES = core_convert.c core_fileio.c core_format.c core_mode.c core_module.c core_output.c core_shntool.c core_wave.c + GLUE_SOURCES = glue_modes.c glue_formats.c + MODE_SOURCES_ALL = mode_cat.c mode_cmp.c mode_conv.c mode_cue.c mode_fix.c mode_gen.c mode_hash.c mode_info.c mode_join.c mode_len.c mode_pad.c mode_split.c mode_strip.c mode_trim.c +-FORMAT_SOURCES_ALL = format_aiff.c format_alac.c format_als.c format_ape.c format_bonk.c format_cust.c format_flac.c format_kxs.c format_la.c format_lpac.c format_mkw.c format_null.c format_ofr.c format_shn.c format_tak.c format_term.c format_tta.c format_wav.c format_wv.c ++FORMAT_SOURCES_ALL = format_aiff.c format_alac.c format_als.c format_bonk.c format_cust.c format_flac.c format_kxs.c format_la.c format_mkw.c format_null.c format_shn.c format_tak.c format_term.c format_tta.c format_wav.c format_wv.c + + MODE_ALIASES_ALL = $(shell echo $(MODE_SOURCES_ALL) | sed -e 's/mode_//g' -e 's/\.c//g') + MODE_ALIASES = @MODES_CONFIGURED@ +--- a/src/Makefile.in 2009-03-30 07:55:58.000000000 +0200 ++++ b/src/Makefile.in 2022-01-14 00:50:05.434851822 +0100 +@@ -103,7 +103,6 @@ + LIBOBJS = @LIBOBJS@ + LIBS = @LIBS@ + LN_S = @LN_S@ +-LPAC = @LPAC@ + LTLIBOBJS = @LTLIBOBJS@ + MAC = @MAC@ + MAKEINFO = @MAKEINFO@ +@@ -182,7 +181,7 @@ + CORE_SOURCES = core_convert.c core_fileio.c core_format.c core_mode.c core_module.c core_output.c core_shntool.c core_wave.c + GLUE_SOURCES = glue_modes.c glue_formats.c + MODE_SOURCES_ALL = mode_cat.c mode_cmp.c mode_conv.c mode_cue.c mode_fix.c mode_gen.c mode_hash.c mode_info.c mode_join.c mode_len.c mode_pad.c mode_split.c mode_strip.c mode_trim.c +-FORMAT_SOURCES_ALL = format_aiff.c format_alac.c format_als.c format_ape.c format_bonk.c format_cust.c format_flac.c format_kxs.c format_la.c format_lpac.c format_mkw.c format_null.c format_ofr.c format_shn.c format_tak.c format_term.c format_tta.c format_wav.c format_wv.c ++FORMAT_SOURCES_ALL = format_aiff.c format_alac.c format_als.c format_bonk.c format_cust.c format_flac.c format_kxs.c format_la.c format_mkw.c format_null.c format_shn.c format_tak.c format_term.c format_tta.c format_wav.c format_wv.c + MODE_ALIASES_ALL = $(shell echo $(MODE_SOURCES_ALL) | sed -e 's/mode_//g' -e 's/\.c//g') + MODE_ALIASES = @MODES_CONFIGURED@ + MODULE_OBJS = @MODE_OBJS@ @FORMAT_OBJS@ +@@ -270,16 +269,13 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_aiff.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_alac.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_als.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_ape.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_bonk.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_cust.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_flac.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_kxs.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_la.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_lpac.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_mkw.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_null.Po@am__quote@ +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_ofr.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_shn.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_tak.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format_term.Po@am__quote@ +--- a/man/shntool.1 2009-03-30 07:59:25.000000000 +0200 ++++ b/man/shntool.1 2022-01-15 00:10:14.587805825 +0100 +@@ -133,13 +133,6 @@ + .br + + .TP +-.I ape +-Monkey's Audio Compressor (via 'mac'): +-.br +- +-.br +- +-.TP + .I alac + Apple Lossless Audio Codec (via 'alac'): + .br +@@ -150,11 +143,6 @@ + .br + + .TP +-.I ofr +-OptimFROG Lossless WAVE Audio Coder (via 'ofr'): +-.br +- +-.TP + .I tta + TTA Lossless Audio Codec (via 'ttaenc'): + .br +@@ -172,11 +160,6 @@ + .br + + .TP +-.I lpac +-Lossless Predictive Audio Compression (via 'lpac'): +-.br +- +-.TP + .I la + Lossless Audio (via 'la'): + .br diff --git a/shtool/PKGBUILD b/shtool/PKGBUILD new file mode 100644 index 0000000..49a3694 --- /dev/null +++ b/shtool/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=shtool +pkgver=2.0.8 +_debver=2.0.8 +_debrel=10 +pkgrel=1 +pkgdesc="GNU shtool is a compilation of small but very stable and portable shell scripts into a single shell tool." +url="http://www.gnu.org/software/shtool/" +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('perl') +makedepends=('quilt') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/shtool/shtool_$_debver-$_debrel.debian.tar.xz) +sha512sums=('f0c9292e8d980323d587b70e582574ba1cfe3c26296a01d51a2068a7886e5b1f501e8c5dc37b5d4b0f7a34217c7ad7f6f3011969d9c2d65776fe66e8287c1758' + '5bcb6e490087d5e601e6332e62dd84b599747d4f1ca4e3f4b8020c955bd788ca5b3f97f3e2138d5d8eca9134f5ad88886e6a5382897f915957d510ba632fb6a0') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/shush/PKGBUILD b/shush/PKGBUILD new file mode 100644 index 0000000..900a1f2 --- /dev/null +++ b/shush/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=shush +pkgver=1.2.3 +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="Free and libre cron-wrapper, with multiple report formats, syslogging and more" +arch=('i686' 'x86_64') +url='http://web.taranis.org/shush/' +license=('Modified-BSD') +depends=('pcre') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/s/shush/shush_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/s/shush/shush_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('989562bc43ca486151cef0a8254a29678d6084396df04b6d4c8d4c281341aad24c2b248e3c907c3561efb6ecf39c968df1e3bf4d1c59c04390a3aaa16dc76be0' + '21984f9ae8501d03040d6ccf047ece7201d0c9426fcd0b2827e4dd2c8fd4b855c6779f77f04de6b6bd3a6cfb210ce96d7d2292e5af6cf8704c6cf51b4ae8c2c3') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + install -Dm755 src/$pkgname -t "$pkgdir/usr/bin" + install -Dm644 $pkgname.1 -t "$pkgdir/usr/share/man/man1" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/signify/PKGBUILD b/signify/PKGBUILD new file mode 100644 index 0000000..e38c68c --- /dev/null +++ b/signify/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=signify +pkgver=31 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="OpenBSD tool to signs and verify signatures on files" +url='https://github.com/aperezdc/signify' +arch=('i686' 'x86_64') +license=('ISC') +depends=('glibc') +makedepends=('quilt') +source=("https://github.com/aperezdc/signify/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/s/signify-openbsd/signify-openbsd_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('f39597ea278a7eb10b786909752fde59e16405f0bc76c9906f8014e9e7f6801b4733479eec765fb960b6062359954caf54a3460ff67258a9cff93fa978951962' + '1af3de02ad9c65338dd4ebd61ad68d53834957a7f91d17b22cc1c280cecadf5f0802f2245211add07d052551dddb44507e8d8737f398a372d9606322f97e467d') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0002-replace-signify-with-signify-openbsd.patch || true + + quilt push -av + fi + + # using O_NOFOLLOW doesn't lock anything down here, swapping files + # without symlinks is still equally open to TOCTOU and it doesn't even + # matter here. lets prefere supporting symlinked target files. + sed -E 's/\| ?O_NOFOLLOW//g' -i ./*.c +} + +build () { + cd ${pkgname}-${pkgver} + make PREFIX=/usr \ + LTO=1 \ + EXTRA_CFLAGS="${CFLAGS} ${CPPFLAGS}" \ + EXTRA_LDFLAGS="${LDFLAGS}" \ + BUNDLED_LIBBSD=1 \ + GIT_TAG='' +} + +package () { + cd ${pkgname}-${pkgver} + make PREFIX=/usr \ + DESTDIR="${pkgdir}" \ + BUNDLED_LIBBSD=1 \ + GIT_TAG='' install + install -Dm 644 README.md CHANGELOG.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/simgear/PKGBUILD b/simgear/PKGBUILD new file mode 100644 index 0000000..686ecf9 --- /dev/null +++ b/simgear/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=simgear +pkgver=2020.3.6 +_pkgver=${pkgver%.*} +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A set of free software libraries designed to be used as building blocks for quickly assembling 3d simulations, games, and visualization applications." +arch=('i686' 'x86_64') +url='https://home.flightgear.org/' +license=('LGPL-2') +depends=('glu' 'glut' 'freealut' 'plib' 'openscenegraph' 'expat' 'udns') +makedepends=('boost' 'cmake' 'mesa' 'quilt') +options=('staticlibs') +source=("https://downloads.sourceforge.net/project/flightgear/release-${_pkgver}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/s/simgear/simgear_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('eaa8e3663c5fb486ea0fdad26c490fa49472596157d8d19e60426d5a1d340dfda4e5e3d82f68542bb6d9689abb8e867dc33761ea578b9c8f6c07aeb4b942880e' + 'db9571ec7faea5d0e4866e68a7aa88fdded7484af648b221f7dc37ec1ddb801635c9bf461e6c59acb9b007f32bdf2d1beb134071f490ea15ce5a99f627e46cdc') + +prepare() { + cd "$srcdir"/simgear-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/kfreebsd.patch || true + rm -v debian/patches/hurd.patch || true + rm -v debian/patches/fix-ftbfs-on-armel-armhf.patch || true + + quilt push -av + fi +} + +build() { + cmake \ + -S simgear-${pkgver} \ + -Bbuild \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX:PATH=/usr \ + -DSIMGEAR_SHARED=OFF \ + -DSYSTEM_EXPAT=ON \ + -DSYSTEM_UDNS=ON \ + -DENABLE_DNS=ON + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "simgear-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/simple-mtpfs/PKGBUILD b/simple-mtpfs/PKGBUILD new file mode 100644 index 0000000..137b6f3 --- /dev/null +++ b/simple-mtpfs/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=simple-mtpfs +pkgver=0.4.0 +pkgrel=1 +pkgdesc="Simple MTP fuse filesystem driver" +arch=('i686' 'x86_64') +url='https://github.com/phatina/simple-mtpfs' +license=('GPL-2') +depends=('libmtp' 'fuse2' 'gcc-libs') +makedepends=('autoconf-archive') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/phatina/simple-mtpfs/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('6f213f9df792f33cd3842357aecf444cdc8030c89e4abc19b56a2c60f58213b5545b3d7857b0d46cdd237d0c24d5d6eb3cbe59ba9fc3c32f91396c5724ac86d7') + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./autogen.sh + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/simpleburn/PKGBUILD b/simpleburn/PKGBUILD new file mode 100644 index 0000000..ea399b2 --- /dev/null +++ b/simpleburn/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=simpleburn +pkgver=1.8.4 +pkgrel=2 +pkgdesc="Minimalistic application for burning and extracting CDs and DVDs" +arch=('i686' 'x86_64') +license=('CeCILL-2.0') +depends=('cdrdao' 'libdvdread' 'libcdio' 'glib2' 'gdk-pixbuf2' 'pango' 'cairo' 'gtk' 'libisoburn' 'mencoder' 'mplayer' + 'flac' 'vorbis-tools' 'mpg123') +makedepends=('cmake' 'gettext-tiny') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('9f3580aa73ab7f0311a56c3cf8d72a67d734668ad207d0234dbe1a05d827b5446d719ed262fb7e0edfd890eb0d2a550caff7362dcc90f228e87adce21dedbc5f' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +build() { + cmake \ + -B build \ + -S ${pkgname} \ + -DCMAKE_INSTALL_PREFIX="/usr" + make -C build +} + +package() { + make -C build DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/${pkgname}/doc/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/simpleini/PKGBUILD b/simpleini/PKGBUILD new file mode 100644 index 0000000..adc3a55 --- /dev/null +++ b/simpleini/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=simpleini +pkgver=4.17 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="Cross-platform, free software C++ library providing a simple API to read and write INI-style configuration files" +arch=('i686' 'x86_64') +url='https://github.com/brofield/simpleini' +license=('Expat') +depends=('glibc') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/brofield/simpleini/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/libs/libsimpleini/libsimpleini_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('3a207641093836023b61d07a9e9537035b2a91d6a5cb71edbcd6068f26916cb56f9825154b1bee2541b2471ad137afde06629300653bb3d7ffe9deb0c18bccf1' + '9ce8f9f4c368366799f0ea027051b97d741d05699f035b13d11dd0ad512f2d0e046233aeff7f81c01621d98fcacd68307cfacf3a80911dcc8220ed39521c15d5') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + export VERSION=$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENCE.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/sip/PKGBUILD b/sip/PKGBUILD new file mode 100644 index 0000000..22ea27e --- /dev/null +++ b/sip/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=sip +pkgver=4.19.25 +pkgrel=1 +epoch=1 +arch=(i686 x86_64) +pkgdesc='A tool that makes it easy to create Python bindings for C and C++ libraries' +url="https://www.riverbankcomputing.com/software/$pkgname/intro" +license=('custom:SIP') +depends=(python-toml python-packaging) +makedepends=(python-setuptools) +source=(https://www.riverbankcomputing.com/static/Downloads/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz) +sha512sums=('60fb4133c68869bf0993144978b4847d94a0f9c7b477f64a346ea133cfe35bc11820204ab327dcf9a929b6f65a26d16cc7efbce65e49967c3347b39376e57001') + +prepare() { + mkdir -p build +} + +build() { + cd build + python $srcdir/$pkgname-$pkgver/configure.py CFLAGS="$CFLAGS" LFLAGS="$LDFLAGS" + make +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 $pkgname-$pkgver/LICENSE -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/sjasmplus/PKGBUILD b/sjasmplus/PKGBUILD new file mode 100644 index 0000000..1ff1774 --- /dev/null +++ b/sjasmplus/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=sjasmplus +pkgver=20190306.1 +pkgrel=1 +pkgdesc="SJAsmPlus: Z80 cross-assembler" +arch=('i686' 'x86_64') +url='https://github.com/sjasmplus/sjasmplus' +license=('zlib') +depends=('boost-libs') +makedepends=('cmake' 'boost') +source=("$pkgname-$pkgver.tar.gz::https://github.com/$pkgname/$pkgname/archive/$pkgver.tar.gz") +sha512sums=('7a97c73661d25d96a8a0ec137f6440b640d1388e3452525219deb09c37905d2279b981016280dc11dfe014bd710581a568120475b2e286afd3f3d519134106b5') + +build() { + cmake -B build $srcdir/$pkgname-$pkgver \ + -DCMAKE_BUILD_TYPE=Release + make -C build +} + +package() { + install -Dm755 "$srcdir/build/sjasmplus" "$pkgdir/usr/bin/sjasmplus" + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/skippy-xd/PKGBUILD b/skippy-xd/PKGBUILD new file mode 100644 index 0000000..2027fd2 --- /dev/null +++ b/skippy-xd/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=skippy-xd +pkgver=2023.06.25 +pkgrel=1 +pkgdesc="A full-screen task switcher for X11" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://github.com/felixfung/skippy-xd' +depends=('giflib' 'libjpeg-turbo' 'libxcomposite' 'libxdamage' 'libxext' 'libxft' 'libxinerama') +backup=('etc/xdg/skippy-xd.rc') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/felixfung/skippy-xd/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('ea62d8c071f3fb28a5161cf944ba0a2b8b6f1da85b05d8cdf670feb1097d2e2a461207ebc530d5d58ed012bf409b8b8d2633f290c27504c1c5b4ee16bd051ab2') + +build() { + cd "$pkgname-$pkgver" + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/sl/PKGBUILD b/sl/PKGBUILD new file mode 100644 index 0000000..1978064 --- /dev/null +++ b/sl/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=sl +pkgver=5.02 +pkgrel=1 +pkgdesc='Steam Locomotive runs across your terminal when you type "sl" as you meant to type "ls".' +arch=('i686' 'x86_64') +url='http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html' +license=('Expat') +depends=('ncurses') +source=("$pkgname-$pkgver.tar.gz::https://github.com/mtoyoda/sl/archive/$pkgver.tar.gz") +sha512sums=('a4d18bc79d7e0eca7748b10226a6b2a85a7a01d636e4e9215bf524a7849bc5cb250034326e5a69f7423d79e40b92182fddc0e56e25df616edae06369c782cb26') + +build() { + cd "${pkgname}-${pkgver}" + cc $CFLAGS -o sl sl.c -lcurses + gzip -9 -f sl.1 +} + +package() { + cd "${pkgname}-${pkgver}" + install -Dm 775 sl "${pkgdir}/usr/bin/sl" + install -Dm 644 sl.1.gz "${pkgdir}/usr/share/man/man1/sl.1.gz" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/slang/PKGBUILD b/slang/PKGBUILD new file mode 100644 index 0000000..54e8079 --- /dev/null +++ b/slang/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=slang +pkgver=2.3.2 +_debver=2.3.2 +_debrel=5 +pkgrel=1 +pkgdesc='S-Lang is a powerful interpreted language' +arch=('i686' 'x86_64') +url="https://www.jedsoft.org/slang/" +license=('GPL-2') +depends=('pcre') +makedepends=('quilt') +backup=('etc/slsh.rc') +options=('!makeflags') +source=(https://www.jedsoft.org/releases/slang/${pkgname}-${pkgver}.tar.bz2{,.asc} + https://deb.debian.org/debian/pool/main/s/slang2/slang2_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('35cdfe8af66dac62ee89cca60fa87ddbd02cae63b30d5c0e3786e77b1893c45697ace4ac7e82d9832b8a9ac342560bc35997674846c5022341481013e76f74b5' + 'SKIP' + '67218b4a81cb1cd59e471eee7438e80ee5e41b4ebbca4022554cb6d1116be94b96cc8e1d3016411c80c1b503302e3187a230b55d238fa226157148bcea6d3b77') +validpgpkeys=('AE962A02D29BFE4A4BB2805FDE401E0D5873000A') # John E. Davis + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install-all + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/slim-theme-hyperbola/PKGBUILD b/slim-theme-hyperbola/PKGBUILD new file mode 100644 index 0000000..c40bcaf --- /dev/null +++ b/slim-theme-hyperbola/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=slim-theme-hyperbola +pkgver=1.0 +pkgrel=1 +pkgdesc="SLiM theme for Hyperbola" +arch=('any') +url='https://git.hyperbola.info:50100/~team/software/slim-theme-hyperbola.git/' +license=('GPL-2') +depends=('slim' 'dialog') +install=$pkgname.install +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('f2c393d55ed4990ba5de32b17b652b924b9793cc81cbb2511c1a2bb2c73719d1a5435a44db8278709e7ea146236182c25683a81e3072b134d946e2fc4b9956cc' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +package() { + cd "$srcdir/hyperbola" + + # data + install -m 644 -D background_{1024x768,1280x720,1280x800,1360x768,1366x768,1440x900,1600x900,1680x1050,1920x1080,1920x1200}.png -t "${pkgdir}"/usr/share/slim/themes/hyperbola + install -m 644 -D panel.png -t "${pkgdir}"/usr/share/slim/themes/hyperbola + install -m 644 -D slim.theme -t "${pkgdir}"/usr/share/slim/themes/hyperbola + install -m 755 -D setup.sh -t "${pkgdir}"/usr/share/slim/themes/hyperbola + + # license + install -m 644 -D COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/slim-theme-hyperbola/slim-theme-hyperbola.install b/slim-theme-hyperbola/slim-theme-hyperbola.install new file mode 100644 index 0000000..94041da --- /dev/null +++ b/slim-theme-hyperbola/slim-theme-hyperbola.install @@ -0,0 +1,12 @@ +post_install() { + /usr/share/slim/themes/hyperbola/setup.sh + sed -i 's/^current_theme.*/current_theme hyperbola/' /etc/slim.conf +} + +post_upgrade() { + post_install +} + +post_remove() { + sed -i 's/^current_theme.*/current_theme default/' /etc/slim.conf +} diff --git a/slim/PKGBUILD b/slim/PKGBUILD new file mode 100644 index 0000000..dd1d0b9 --- /dev/null +++ b/slim/PKGBUILD @@ -0,0 +1,89 @@ +# Maintainer: Jesus E. + +pkgname=slim +pkgver=1.3.6 +_debver=1.3.6 +_debrel=5.2 +pkgrel=8 +pkgdesc="Desktop-independent graphical login manager for X11" +arch=('i686' 'x86_64') +url="https://sourceforge.net/projects/slim.berlios/" +license=('GPL-2') +depends=('libxmu' 'libpng' 'libjpeg' 'libxft' 'libxrandr' 'xenocara-xauth' 'ttf-font') +makedepends=('cmake' 'freeglut' 'quilt') +backup=('etc/slim.conf' 'etc/logrotate.d/slim') +source=(https://downloads.sourceforge.net/project/slim.berlios/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/slim/slim_$_debver-$_debrel.debian.tar.xz + slim-1.3.6-fix-libslim-libraries.patch + slim-1.3.6-add-sessiondir.patch + slim.logrotate + slim-1.3.6-remove-systemd-service-file.patch + slim.initd + slim.run) +sha512sums=('345b1dee5d6f0c3716dfa7c5c16274adbf18586bdaaa6af4f310e24c5a61f79a297ffac921a5ba545523317e9fe120916df226c36b9c9b49c2ac9c1ca21dee0c' + '342757a000ba171a467cf47c4f3c30921fbba97593f40286cc4745b51e328f01f8e9e577b25721f72ea17aa84d856840571505182125a5c8e794356784695232' + '0d00362cf28fbcca5cc38e283c649b7f074b53d8b261352f3f2f9d3d730e3841e351b680101c59ef607bdd1993eb5602b0881cde77e887ce8244137372e005c4' + '5bf5862caefddb3877e5a7a11498de59c6c33797e13d205fd58eb91f1514172aa4e50ca637c15c4a8eb2e496ebad084c0f00317ab26bc41d4a7e32a162a044bc' + 'e5f398ea58adbedea7ae40c7a907d2f926148ee6f3c51fc5761b84d1d119c091fa0cf34f908cd49300fcddea71c5c9b6f2ac21731808ce5d73ea65a65b19a55b' + '089fd41b18de08acc073d83ee82ac96669ec8e10b047cb8c3c58a4fc515e49c5e62a5c315f80c8b5eca5919542744702c7cf2fe9a370a034e5dc7ef115abff1b' + '65bfe036188b1beea3604ed4aeab4263e5cd48f61619fe213de6434da690ba462c30f1dcaaed46ba3f8093d1e6b0c9451f30f42713812af160845b46540d65fc' + 'daddebf5c6c3ada543307839cae711487e3c0ded73281bd4081f214aa0b71c1ef0ea87bb582de06329527672b790e62ae75a5c5a08b1a7ebc62a181f06ac43b7') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/fix-missing-plymouth-handling.patch || true + rm -v debian/patches/fix-systemd-service.patch || true + rm -v debian/patches/libslim-cmake-fixes.patch || true + rm -v debian/patches/slim-conf.patch || true + + quilt push -av + else + patch -Np1 -i ../slim-1.3.6-add-sessiondir.patch + fi + + patch -Np1 -i ../slim-1.3.6-fix-libslim-libraries.patch + patch -Np1 -i ../slim-1.3.6-remove-systemd-service-file.patch +} + +build() { + cd $pkgname-$pkgver + + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_SKIP_RPATH=ON \ + -DUSE_PAM=no \ + -DUSE_CONSOLEKIT=no \ + -DBUILD_SLIMLOCK=no + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/slim.logrotate" "$pkgdir/etc/logrotate.d/slim" + + # Provide sane defaults + sed -i -e 's|#xserver_arguments.*|xserver_arguments -nolisten tcp vt07|' \ + -e 's|/var/run/slim.lock|/var/lock/slim.lock|' \ + "$pkgdir/etc/slim.conf" + + # Install services + install -Dm755 "$srcdir/slim.initd" "$pkgdir/etc/init.d/slim" + install -Dm755 "$srcdir/slim.run" "$pkgdir/etc/sv/slim/run" + + # License + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/slim/slim-1.3.6-add-sessiondir.patch b/slim/slim-1.3.6-add-sessiondir.patch new file mode 100644 index 0000000..f6abf0b --- /dev/null +++ b/slim/slim-1.3.6-add-sessiondir.patch @@ -0,0 +1,28 @@ +From 741e43960a4ea3a8bc230b1f599311d800c2cc83 Mon Sep 17 00:00:00 2001 +From: Nobuhiro Iwamatsu +Date: Wed, 02 Oct 2013 23:23:24 +0000 +Subject: Update slim.conf. Add sessiondir. + +Signed-off-by: Nobuhiro Iwamatsu +--- +diff --git a/slim.conf b/slim.conf +index a8e2e1c..c5f1d38 100644 +--- a/slim.conf ++++ b/slim.conf +@@ -47,11 +47,9 @@ login_cmd exec /bin/bash -login ~/.xinitrc %session + # options "-d" and "-nodaemon" + # daemon yes + +-# Available sessions (first one is the default). +-# The current chosen session name is replaced in the login_cmd +-# above, so your login command can handle different sessions. +-# see the xinitrc.sample file shipped with slim sources +-sessions xfce4,icewm-session,wmaker,blackbox ++# Set directory that contains the xsessions. ++# slim reads xsesion from this directory, and be able to select. ++sessiondir /usr/share/xsessions/ + + # Executed when pressing F11 (requires imagemagick) + screenshot_cmd import -window root /slim.png +-- +cgit v0.9.2 diff --git a/slim/slim-1.3.6-fix-libslim-libraries.patch b/slim/slim-1.3.6-fix-libslim-libraries.patch new file mode 100644 index 0000000..b6c90f9 --- /dev/null +++ b/slim/slim-1.3.6-fix-libslim-libraries.patch @@ -0,0 +1,20 @@ +diff -upr slim-1.3.6.orig/CMakeLists.txt slim-1.3.6/CMakeLists.txt +--- slim-1.3.6.orig/CMakeLists.txt 2013-10-02 16:16:22.000000000 +0300 ++++ slim-1.3.6/CMakeLists.txt 2013-10-02 16:19:57.000000000 +0300 +@@ -119,6 +119,7 @@ if(USE_PAM) + if(PAM_FOUND) + message("\tPAM Found") + set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DUSE_PAM") ++ target_link_libraries(libslim ${PAM_LIBRARY}) + target_link_libraries(${PROJECT_NAME} ${PAM_LIBRARY}) + target_link_libraries(slimlock ${PAM_LIBRARY}) + include_directories(${PAM_INCLUDE_DIR}) +@@ -178,6 +179,8 @@ include_directories( + ) + + target_link_libraries(libslim ++ ${X11_Xft_LIB} ++ ${X11_Xrandr_LIB} + ${JPEG_LIBRARIES} + ${PNG_LIBRARIES} + ) diff --git a/slim/slim-1.3.6-remove-systemd-service-file.patch b/slim/slim-1.3.6-remove-systemd-service-file.patch new file mode 100644 index 0000000..c224e9d --- /dev/null +++ b/slim/slim-1.3.6-remove-systemd-service-file.patch @@ -0,0 +1,22 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index f7256bf..b73ed45 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -24,7 +24,6 @@ set(SLIM_VERSION "${SLIM_VERSION_MAJOR}.${SLIM_VERSION_MINOR}.${SLIM_VERSION_PAT + set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation Directory") + set(PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/slim") + set(SYSCONFDIR "/etc") +-set(LIBDIR "/lib") + set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man") + + set(SLIM_DEFINITIONS) +@@ -239,9 +238,5 @@ install(FILES slim.1 DESTINATION ${MANDIR}/man1/) + install(FILES slimlock.1 DESTINATION ${MANDIR}/man1/) + # configure + install(FILES slim.conf DESTINATION ${SYSCONFDIR}) +-# systemd service file +-if (${CMAKE_SYSTEM_NAME} MATCHES "Linux") +- install(FILES slim.service DESTINATION ${LIBDIR}/systemd/system) +-endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + # themes directory + subdirs(themes) diff --git a/slim/slim.initd b/slim/slim.initd new file mode 100644 index 0000000..3548e71 --- /dev/null +++ b/slim/slim.initd @@ -0,0 +1,19 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="SLiM (Simple Login Manager) service" + +command="/usr/bin/slim" +command_args="-nodaemon" +command_background="yes" +pidfile="/var/run/slim.pid" + +depend() { + need localmount + after bootmisc consolefont modules netmount + after readahead-list ypbind autofs gpm lircmd + after acpid openvpn + before alsasound + use xfs +} diff --git a/slim/slim.logrotate b/slim/slim.logrotate new file mode 100644 index 0000000..26ec3b0 --- /dev/null +++ b/slim/slim.logrotate @@ -0,0 +1,9 @@ +/var/log/slim.log { + compress + rotate 1 + size 1024k + notifempty + missingok + copytruncate + noolddir +} diff --git a/slim/slim.run b/slim/slim.run new file mode 100644 index 0000000..765580b --- /dev/null +++ b/slim/slim.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec slim -nodaemon diff --git a/slock/PKGBUILD b/slock/PKGBUILD new file mode 100644 index 0000000..836344b --- /dev/null +++ b/slock/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=slock +pkgver=1.4 +pkgrel=8 +pkgdesc="A simple screen locker for X" +arch=('i686' 'x86_64') +url='https://tools.suckless.org/slock' +license=('X11') +depends=('libxext' 'libxrandr') +source=("https://dl.suckless.org/tools/$pkgname-$pkgver.tar.gz" + "backspace.patch") +sha512sums=('ad285360dd3f16a225159abaf2f82fabf2c675bd74478cf717f68cbe5941a6c620e3c88544ce675ce3ff19af4bb0675c9405685e0f74ee4e84f7d34c61a0532f' + 'e89764ff75a0691521ab5763b67e41df84a5c36480b3ac55f6c264d642c1bcdcf39582a7fd0fe577156a35ef21f76b973ba8923631d0b43840486e5a477a85d3') + +prepare() { + cd "$srcdir/slock-$pkgver" + sed -i 's|static const char \*group = "nogroup";|static const char *group = "nobody";|' config.def.h + sed -ri 's/((CPP|C|LD)FLAGS) =/\1 +=/g' config.mk + patch -p1 < $srcdir/backspace.patch +} + +build() { + cd "$srcdir/slock-$pkgver" + make X11INC=/usr/include/X11 X11LIB=/usr/lib/X11 +} + +package() { + cd "$srcdir/slock-$pkgver" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -m644 -D LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/slock/backspace.patch b/slock/backspace.patch new file mode 100644 index 0000000..6e2741d --- /dev/null +++ b/slock/backspace.patch @@ -0,0 +1,11 @@ +--- a/slock.c ++++ b/slock.c +@@ -177,7 +177,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, + break; + case XK_BackSpace: + if (len) +- passwd[len--] = '\0'; ++ passwd[--len] = '\0'; + break; + default: +if (num && !iscntrl((int)buf[0]) && \ No newline at end of file diff --git a/slop/PKGBUILD b/slop/PKGBUILD new file mode 100644 index 0000000..f51790b --- /dev/null +++ b/slop/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=slop +pkgver=7.6 +pkgrel=1 +pkgdesc="Utility to query the user for a selection and print the region to stdout" +arch=('i686' 'x86_64') +url='https://github.com/naelstrof/slop' +license=('GPL-3') +depends=('libxext' 'libx11' 'mesa' 'glew' 'libxrender') +makedepends=('cmake' 'glm') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/naelstrof/slop/archive/v${pkgver}.tar.gz" + "bugfix-add-missed-header.patch") +sha512sums=('d1abc50cad124cfb11e9b57c38c824efb2ece3dffce8e54e451ce4adc4a7ad441c6171b7df5d1c8dfa66c875a12cf07b206ba3b87229c0e5f2ddf744d7922fc3' + '68b9813470f3f3ec8aff8b19783ee3c00e97d55ce25f08464fbe03764e23b7cbbe31560193a255a4a84b0d760c6a6ad0eafdc20a3103f71c6a0e3ce69f7a230f') + +prepare() { + cd "$pkgname-$pkgver" + patch -Np1 -i ${srcdir}/bugfix-add-missed-header.patch +} + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "${srcdir}/$pkgname-$pkgver/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/slop/bugfix-add-missed-header.patch b/slop/bugfix-add-missed-header.patch new file mode 100644 index 0000000..612eb4d --- /dev/null +++ b/slop/bugfix-add-missed-header.patch @@ -0,0 +1,22 @@ +From 5cbcb9e389a02d6288f90a790c6b547d9f9dcac7 Mon Sep 17 00:00:00 2001 +From: Drunkard Zhang +Date: Tue, 28 Sep 2021 12:20:25 +0800 +Subject: [PATCH] bugfix: add missed header + +XDestroyImage is included in which belongs to libX11. +Build fails without include this header on Gentoo. + +Signed-off-by: Drunkard Zhang +--- + src/framebuffer.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/framebuffer.cpp b/src/framebuffer.cpp +index 20909b3..da85a25 100644 +--- a/src/framebuffer.cpp ++++ b/src/framebuffer.cpp +@@ -1,3 +1,4 @@ ++#include + #include "framebuffer.hpp" + + slop::Framebuffer::Framebuffer( int w, int h ) { diff --git a/slrn/PKGBUILD b/slrn/PKGBUILD new file mode 100644 index 0000000..fc861b3 --- /dev/null +++ b/slrn/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=slrn +pkgver=1.0.3 +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="A free and libre text-based news client" +arch=('i686' 'x86_64') +url="http://www.slrn.org/" +license=('GPL-2') +depends=('libressl' 'slang') +makedepends=('uudeview' 'quilt') +backup=('etc/slrnrc') +options=('!makeflags' 'docs' 'zipman') +source=("https://jedsoft.org/releases/slrn/slrn-${pkgver}a.tar.bz2" + "https://deb.debian.org/debian/pool/main/s/slrn/slrn_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('11cef2dfe41f441af15acc22fb675cf607e932f0dd6d4a998e51ecda05c9a50d7abf10a3e693ffc857ad77e09634f460404e4d5b289169e7bbffdaf5d6d565a3' + 'e7738777f67e7cd0fc21d2b0bdd361d61425e9186ebfc951344255ca4ab0835835ac19300ea8a08df0a7bb855ac5af0405d52ccbfef7634a952a2bd7df9c539b') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-setgid-code \ + --with-slrnpull \ + --with-ssl \ + --with-uu \ + --with-uulib=/usr/lib/uudeview \ + --with-uuinc=/usr/include/uudeview \ + --enable-spoilers + make UUDEVIEW_LIB="/usr/lib/uudeview/*.o" +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 doc/slrn.rc "$pkgdir/etc/slrnrc" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/smartmontools/PKGBUILD b/smartmontools/PKGBUILD new file mode 100644 index 0000000..a9838c5 --- /dev/null +++ b/smartmontools/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgname=smartmontools +pkgver=7.2 +_debver=7.2 +_debrel=1 +pkgrel=1 +pkgdesc="Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives" +url="https://www.smartmontools.org/" +license=('GPL-2') +arch=('i686' 'x86_64') +makedepends=('quilt') +depends=('gcc-libs' 'libcap-ng' 'bash') +optdepends=('s-nail: to get mail alerts to work') +backup=('etc/smartd.conf' + 'etc/conf.d/smartd') +validpgpkeys=('847AF8F72DF4C7B492382C94BF0B339C64BCAA8B') # Smartmontools Signing Key (through 2020) +source=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.asc} + "https://deb.debian.org/debian/pool/main/s/smartmontools/smartmontools_$_debver-$_debrel.debian.tar.xz" + 'smartd.confd' + 'smartd.initd') +sha512sums=('d7e724295b5d53797b5e4136eea5f5cc278db81e4016ba65142438b8c68c54f85a32c582c147a1590b9bc8f74a58952bcb57b9923dd69d34582530a0985799ea' + 'SKIP' + '636297b09d27993871a2c147348800998a53fe95124302c8d0a10840263526b7dfc09c6127dddef46e6dec3a0fe8e4c0190cbab69c0d034e5bf35efaf8f38ee3' + 'ff45462944f01c0e7cac99443078b253dcbaed4f99ffab85052b12361d9eec4beec81cab334fbede9148b3dd503d5205add32ef4327a788f02a8b1e37f460437' + '3f8e451abe1159ee135c33cd6e83e65c57ce53fa3a2f4bff6cb8a4b01054d333b51b9f5238ff1ffd4d07120c8192955ac62541e72dbd664e256d2020e458d5b1') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/manpage.diff || true + rm -v debian/patches/service-alias.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-drivedbdir \ + --with-libcap-ng=yes \ + --with-initscriptdir=/etc/init.d \ + --with-smartdscriptdir=/usr/share/smartmontools \ + --with-smartdplugindir=/usr/share/smartmontools/smartd_warning.d + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + rm -rf ${pkgdir}/etc/rc.d + install -Dm644 ${srcdir}/smartd.confd "${pkgdir}/etc/conf.d/smartd" + install -Dm755 ${srcdir}/smartd.initd "${pkgdir}/etc/init.d/smartd" +} + +# vim:set ts=2 sw=2 et: diff --git a/smartmontools/smartd.confd b/smartmontools/smartd.confd new file mode 100644 index 0000000..4b7db4d --- /dev/null +++ b/smartmontools/smartd.confd @@ -0,0 +1,4 @@ +# /etc/conf.d/smartd: config file for /etc/init.d/smartd + +# Insert any other options needed +SMARTD_OPTS="" diff --git a/smartmontools/smartd.initd b/smartmontools/smartd.initd new file mode 100644 index 0000000..723aa87 --- /dev/null +++ b/smartmontools/smartd.initd @@ -0,0 +1,28 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +pidfile="/run/smartd.pid" +command="/usr/sbin/smartd" +command_args="-p ${pidfile} ${SMARTD_OPTS}" +extra_started_commands="reload" + +depend() { + need localmount + after bootmisc +} + +start_pre() { + if [ ! -f "/etc/smartd.conf" ] ; then + eerror "You should setup your /etc/smartd.conf file!" + eerror "See the smartd.conf(5) manpage." + return 1 + fi + return 0 +} + +reload() { + ebegin "Reloading configuration" + start-stop-daemon --signal HUP --pidfile ${pidfile} ${command##*/} + eend $? +} diff --git a/smpeg/PKGBUILD b/smpeg/PKGBUILD new file mode 100644 index 0000000..275aa22 --- /dev/null +++ b/smpeg/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=smpeg +pkgver=0.4.5+cvs20030824 +_debver=0.4.5+cvs20030824 +_debrel=9 +pkgrel=4 +pkgdesc="SDL MPEG Player Library" +arch=(i686 x86_64) +url="https://icculus.org/smpeg/" +license=(LGPL-2) +depends=(sdl) +makedepends=(mesa glu quilt) +optdepends=('glu: to use glmovie') +source=("https://deb.debian.org/debian/pool/main/s/smpeg/smpeg_$pkgver.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/s/smpeg/smpeg_$_debver-$_debrel.debian.tar.xz") +sha512sums=('f5bdaf0adcc98210c2e47a007762f26a7c81a7f04dd52939e6d1a1b3e06ba389b41fe7a4d1ad72bf275fffe28f082560b6784a67585c607b8aae86fe163641b5' + 'd5b9d01cc8d3dc36a6fcc9b21bcd6351000a4abc981126730499378f13c1359e17fdd4118383ef91f53aefe62ede43486179e2f60ba85c50d2a8a977ef6ff0e9') + +prepare() { + cd $pkgname-$pkgver.orig + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver.orig + CFLAGS+=" -Wno-error=narrowing" + ./configure --prefix=/usr --mandir=/usr/share/man --disable-static + make +} + +package() { + cd $pkgname-$pkgver.orig + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/smplayer-legacy/PKGBUILD b/smplayer-legacy/PKGBUILD new file mode 100644 index 0000000..91205dd --- /dev/null +++ b/smplayer-legacy/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +_realpkgname=smplayer +pkgname=$_realpkgname-legacy +pkgver=20.6.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Media player with built-in codecs that can play virtually all free and libre video and audio formats (legacy version)" +url='https://www.smplayer.info/' +arch=('i686' 'x86_64') +license=('GPL-2' 'Modified-BSD' 'Simplified-BSD') +depends=('glibc' 'qt-script' 'qt-base' 'mplayer' 'libx11' 'zlib' 'gcc-libs' 'hicolor-icon-theme') +makedepends=('qt-tools' 'quilt') +optdepends=('smplayer-themes: icon themes collection' + 'smplayer-skins: skin themes collection' + 'mpv-legacy: alternative multimedia engine') +source=(https://downloads.sourceforge.net/${_realpkgname}/${_realpkgname}-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/s/smplayer/smplayer_${_debver}~ds0-${_debrel}.debian.tar.xz + libre.patch + remove-update-check.patch) +sha512sums=('2cf7b7abf44b301331a5389e1ca512bd41928724b412d8cf55d77cb5cde87a4fdb9038d77c31da14b548d38ebfadd461d588d60a6b6f13b1781b9b961e81637d' + '88c544832c2da3b0b978fa6b99ef36cf3c3746e3324a31e2510a8a7feede08d01a6b171269754cf7223c49cc6128d588c49ab3997775f5820cbbd0c3d300cdf2' + '31ff91c53b2ab7f9cee2fdd9a640b3562618986e391cefb9cc542765a0de177d64d0faad51af0967c66f7d7035fe6f468423f79191a6ec75d6d7d30aa346b3f4' + '58df298a5582b9f8bd8bb333d1a86d4239693452c67e73aa817f8e0320ad5152abc6617a237d7521f462c5b9cbf3c8f850b4f5c157be56eb58e44f1376684d78') + +prepare() { + cd ${_realpkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/05-add-debian-hardening-flags.patch || true + + quilt push -av + fi + + # make build reproducible, we compress ourselves + sed '/gzip -9/d' -i Makefile + + # additional fixes for removal of dbus and non-free components / services / platforms + patch -Np1 -i $srcdir/libre.patch + + # remove update check menu-entry + patch -Np1 -i $srcdir/remove-update-check.patch + + # fix GNU/Linux name + sed -i 's|Linux|GNU/Linux|' src/smplayer.cpp +} + +build() { + cd ${_realpkgname}-${pkgver} + export CXXFLAGS="${CXXFLAGS} ${CPPFLAGS}" + make PREFIX=/usr \ + DOC_PATH="\\\"/usr/share/doc/smplayer\\\"" \ + QMAKE_OPTS=DEFINES+=NO_DEBUG_ON_CONSOLE \ + CFLAGS_EXTRA="${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" +} + +package() { + cd ${_realpkgname}-${pkgver} + make DOC_PATH=/usr/share/doc/smplayer \ + DESTDIR="${pkgdir}" PREFIX=/usr -j1 install + + # licenses + install -Dm644 Copying{,_BSD,_libmaia}.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/smplayer-legacy/libre.patch b/smplayer-legacy/libre.patch new file mode 100644 index 0000000..da5b287 --- /dev/null +++ b/smplayer-legacy/libre.patch @@ -0,0 +1,855 @@ +--- a/src/playlist.h ++++ b/src/playlist.h +@@ -28,7 +28,7 @@ + #include "mediadata.h" + + #ifdef YOUTUBE_SUPPORT +-#define PLAYLIST_DOWNLOAD ++//#define PLAYLIST_DOWNLOAD + #define YT_PLAYLIST_SUPPORT + #endif + +--- a/src/prefnetwork.cpp 2020-05-21 17:46:29.000000000 +0200 ++++ b/src/prefnetwork.cpp 2023-02-23 15:26:47.408552324 +0100 +@@ -21,16 +21,6 @@ + #include "images.h" + #include + +-#ifdef YOUTUBE_SUPPORT +-#include "retrieveyoutubeurl.h" +-#endif +- +-#ifdef CHROMECAST_SUPPORT +-#include "chromecast.h" +-#endif +- +-//#define USE_YT_USER_AGENT +- + PrefNetwork::PrefNetwork(QWidget * parent, Qt::WindowFlags f) + : PrefWidget(parent, f ) + { +@@ -39,35 +29,6 @@ + proxy_type_combo->addItem( tr("HTTP"), QNetworkProxy::HttpProxy); + proxy_type_combo->addItem( tr("SOCKS5"), QNetworkProxy::Socks5Proxy); + +-#ifdef YOUTUBE_SUPPORT +- yt_resolution_combo->addItem( "240p", RetrieveYoutubeUrl::R240p ); +- yt_resolution_combo->addItem( "360p", RetrieveYoutubeUrl::R360p ); +- yt_resolution_combo->addItem( "480p", RetrieveYoutubeUrl::R480p ); +- yt_resolution_combo->addItem( "720p", RetrieveYoutubeUrl::R720p ); +- yt_resolution_combo->addItem( "1080p", RetrieveYoutubeUrl::R1080p ); +- yt_resolution_combo->addItem( "2K", RetrieveYoutubeUrl::R1440p ); +- yt_resolution_combo->addItem( "4K", RetrieveYoutubeUrl::R2160p ); +-#endif +- +- connect(streaming_type_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(streaming_type_combo_changed(int))); +- +-#ifndef YOUTUBE_SUPPORT +- youtube_box->hide(); +-#endif +- +-#ifndef CONVERT_TO_VTT +- subs_box->hide(); +-#endif +- +-#ifndef MPV_SUPPORT +- ytdl_quality_frame->hide(); +-#endif +- +-#ifndef USE_YT_USER_AGENT +- yt_user_agent_label->hide(); +- yt_user_agent_edit->hide(); +-#endif +- + retranslateStrings(); + } + +@@ -85,40 +46,6 @@ + + void PrefNetwork::retranslateStrings() { + retranslateUi(this); +- +- int streaming_item = streaming_type_combo->currentIndex(); +- streaming_type_combo->clear(); +- streaming_type_combo->addItem(tr("Disabled"), Preferences::NoStreaming); +- #ifdef MPV_SUPPORT +- streaming_type_combo->addItem(tr("Auto"), Preferences::StreamingAuto); +- #endif +- #ifdef YOUTUBE_SUPPORT +- streaming_type_combo->addItem("YouTube", Preferences::StreamingYT); +- #endif +- #ifdef MPV_SUPPORT +- streaming_type_combo->addItem("mpv + youtube-dl", Preferences::StreamingYTDL); +- #endif +- streaming_type_combo->setCurrentIndex(streaming_item); +- +- #ifdef MPV_SUPPORT +- int quality_item = ytdl_quality_combo->currentIndex(); +- ytdl_quality_combo->clear(); +- +- #define YTQ(QUALITY) "bestvideo[height<=?" QUALITY "]+bestaudio/best[height<=?" QUALITY "]" +- //#define YTQ(QUALITY) "[height<=?" QUALITY "]" +- ytdl_quality_combo->addItem(tr("Best video and audio"), ""); +- ytdl_quality_combo->addItem(tr("Best"), "best"); +- ytdl_quality_combo->addItem("1080p", YTQ("1080")); +- ytdl_quality_combo->addItem("720p", YTQ("720")); +- ytdl_quality_combo->addItem("480p", YTQ("480")); +- ytdl_quality_combo->addItem("360p", YTQ("360")); +- ytdl_quality_combo->addItem("240p", YTQ("240")); +- ytdl_quality_combo->addItem("144p", YTQ("144")); +- ytdl_quality_combo->addItem(tr("Worst"), "worst"); +- +- ytdl_quality_combo->setCurrentIndex(quality_item); +- #endif +- + createHelp(); + } + +@@ -130,32 +57,6 @@ + proxy_password_edit->setText(pref->proxy_password); + + setProxyType(pref->proxy_type); +- +- setStreamingType(pref->streaming_type); +-#ifdef YOUTUBE_SUPPORT +- setYTResolution( pref->yt_resolution ); +- yt_dash_check->setChecked( pref->yt_use_dash ); +- yt_use_60fps_check->setChecked( pref->yt_use_60fps ); +- yt_user_agent_edit->setText( pref->yt_user_agent ); +-#endif +- +-#ifdef MPV_SUPPORT +- setYTDLQuality(pref->ytdl_quality); +-#endif +- +-#ifdef CHROMECAST_SUPPORT +- Chromecast * cc = Chromecast::instance(); +- setLocalIP(cc->localAddress(), cc->localAddresses()); +- port_spin->setValue(cc->serverPort()); +- directory_listing_check->setChecked(cc->directoryListing()); +- +- #ifdef CONVERT_TO_VTT +- convert_subs_check->setChecked(cc->autoConvertToVTT()); +- subs_position_spin->setValue(cc->subtitlePosition()); +- overwrite_subs_check->setChecked(cc->overwriteVTT()); +- subs_filter_check->setChecked(cc->isSubtitleFilterEnabled()); +- #endif +-#endif + } + + void PrefNetwork::getData(Preferences * pref) { +@@ -168,32 +69,6 @@ + pref->proxy_password = proxy_password_edit->text(); + + pref->proxy_type = proxyType(); +- +- pref->streaming_type = streamingType(); +-#ifdef YOUTUBE_SUPPORT +- pref->yt_resolution = YTResolution(); +- pref->yt_use_dash = yt_dash_check->isChecked(); +- pref->yt_use_60fps = yt_use_60fps_check->isChecked(); +- pref->yt_user_agent = yt_user_agent_edit->text(); +-#endif +- +-#ifdef MPV_SUPPORT +- pref->ytdl_quality = YTDLQuality(); +-#endif +- +-#ifdef CHROMECAST_SUPPORT +- Chromecast * cc = Chromecast::instance(); +- cc->setLocalAddress(localIP()); +- cc->setServerPort(port_spin->value()); +- cc->setDirectoryListing(directory_listing_check->isChecked()); +- +- #ifdef CONVERT_TO_VTT +- cc->setAutoConvertToVTT(convert_subs_check->isChecked()); +- cc->setSubtitlePosition(subs_position_spin->value()); +- cc->setOverwriteVTT(overwrite_subs_check->isChecked()); +- cc->enableSubtitleFilter(subs_filter_check->isChecked()); +- #endif +-#endif + } + + void PrefNetwork::setProxyType(int type) { +@@ -207,173 +82,9 @@ + return proxy_type_combo->itemData(index).toInt(); + } + +-#ifdef YOUTUBE_SUPPORT +-void PrefNetwork::setYTResolution(int r) { +- yt_resolution_combo->setCurrentIndex(yt_resolution_combo->findData(r)); +-} +- +-int PrefNetwork::YTResolution() { +- int index = yt_resolution_combo->currentIndex(); +- return yt_resolution_combo->itemData(index).toInt(); +-} +-#endif +- +-void PrefNetwork::setStreamingType(int type) { +- int i = streaming_type_combo->findData(type); +- if (i < 0) i = 0; +- streaming_type_combo->setCurrentIndex(i); +-} +- +-int PrefNetwork::streamingType() { +- int i = streaming_type_combo->currentIndex(); +- return streaming_type_combo->itemData(i).toInt(); +-} +- +-#ifdef MPV_SUPPORT +-void PrefNetwork::setYTDLQuality(const QString & q) { +- int i = ytdl_quality_combo->findData(q); +- if (i < 0) i = 0; +- ytdl_quality_combo->setCurrentIndex(i); +-} +- +-QString PrefNetwork::YTDLQuality() { +- int i = ytdl_quality_combo->currentIndex(); +- return ytdl_quality_combo->itemData(i).toString(); +-} +-#endif +- +-void PrefNetwork::streaming_type_combo_changed(int i) { +- //qDebug() << "PrefNetwork::streaming_type_combo_changed:" << i; +- youtube_box->setEnabled(i == Preferences::StreamingYT || i == Preferences::StreamingAuto); +- +-#ifdef MPV_SUPPORT +- ytdl_quality_frame->setEnabled(i == Preferences::StreamingAuto || i == Preferences::StreamingYTDL); +-#endif +-} +- +-#ifdef CHROMECAST_SUPPORT +-void PrefNetwork::setLocalIP(const QString & ip, const QStringList & values) { +- local_ip_combo->clear(); +- local_ip_combo->addItem(tr("Auto")); +- local_ip_combo->addItems(values); +- +- if (ip.isEmpty()) { +- local_ip_combo->setCurrentIndex(0); +- } else { +- int pos = local_ip_combo->findText(ip); +- if (pos > -1) { +- local_ip_combo->setCurrentIndex(pos); +- } else { +- local_ip_combo->setEditText(ip); +- } +- } +-} +- +-QString PrefNetwork::localIP() { +- if (local_ip_combo->currentIndex() == 0) { +- return ""; +- } else { +- return local_ip_combo->currentText(); +- } +-} +-#endif +- + void PrefNetwork::createHelp() { + clearHelp(); + +- addSectionTitle(tr("YouTube")); +- +- setWhatsThis(streaming_type_combo, tr("Support for video sites"), +- "
        " +- "
      • " + tr("Disabled") +": " + tr("support for video sites is turned off") +"
      • "+ +- #ifdef MPV_SUPPORT +- "
      • " + tr("Auto") +": " + tr("it will try to use mpv + youtube-dl only for the sites that require it") +"
      • "+ +- #endif +- #ifdef YOUTUBE_SUPPORT +- "
      • YouTube: " + tr("only the internal support for YouTube will be used") +"
      • "+ +- #endif +- #ifdef MPV_SUPPORT +- "
      • mpv + youtube-dl: " +tr("uses mpv + youtube-dl for all sites") +"
      • "+ +- #endif +- "
      " +- ); +- +-#ifdef MPV_SUPPORT +- setWhatsThis(ytdl_quality_combo, tr("Preferred quality"), +- tr("This option specifies the preferred quality for the video streams handled by youtube-dl.") + +- "
        " +- "
      • " + tr("Best video and audio") +": " + tr("selects the best video and audio streams available") +"
      • " +- "
      • " + tr("Best") +": " + tr("selects the best quality format available as a single file") +"
      • " +- "
      • " + tr("1080p, 720p...") +": " + tr("will try to use the selected resolution if available") +"
      • " +- "
      • " + tr("Worst") +": " + tr("selects the worst quality format available") +"
      • " +- "
      "); +-#endif +- +- /* +- setWhatsThis(yt_support_check, tr("Enable Youtube internal support"), +- tr("If this option is checked, SMPlayer will try to play videos from Youtube URLs.") ); +- */ +- +- setWhatsThis(yt_resolution_combo, tr("Playback quality"), +- tr("Select the preferred quality for YouTube videos.") ); +- +-#ifdef YOUTUBE_SUPPORT +- setWhatsThis(yt_dash_check, tr("Use adaptive streams"), +- tr("This option enables adaptive streams which can provide videos up to 4K.") ); +- +- setWhatsThis(yt_use_60fps_check, tr("Use 60 fps if available"), +- tr("This option enables streams at 60 frames per second if available.") ); +-#endif +- +-#ifdef USE_YT_USER_AGENT +- setWhatsThis(yt_user_agent_edit, tr("User agent"), +- tr("Set the user agent that SMPlayer will use when connecting to YouTube.") ); +-#endif +- +-#ifdef MPV_SUPPORT +- /* +- setWhatsThis(streaming_check, tr("Enable mpv's support for streaming sites"), +- tr("If this option is checked, SMPlayer will try to play videos from " +- "streaming sites like Youtube, Dailymotion, Vimeo, Vevo, etc.") + "
      "+ +- tr("Requires mpv and youtube-dl.") ); +- */ +-#endif +- +-#ifdef CHROMECAST_SUPPORT +- addSectionTitle(tr("Chromecast")); +- +- setWhatsThis(local_ip_combo, tr("Local IP"), +- tr("The local IP address of this computer. It will be passed to Chromecast " +- "so that it can access the files from this computer.") ); +- +- setWhatsThis(port_spin, tr("Port"), +- tr("The port that the web server will use.") ); +- +- setWhatsThis(directory_listing_check, tr("Directory listing"), +- tr("When the web server is running, any device in your network can access the " +- "files from this computer. If this option is on, any device can get a listing " +- "of the files in this computer. " +- "If this option is off, the list won't be available.") ); +- +- #ifdef CONVERT_TO_VTT +- setWhatsThis(convert_subs_check, tr("Convert SRT subtitles to VTT"), +- tr("When this option is enabled SMPlayer will convert automatically subtitle files " +- "in SRT format to VTT format. The VTT subtitle will have the same filename but extension .vtt")); +- +- setWhatsThis(overwrite_subs_check, tr("Overwrite existing VTT files"), +- tr("If this option is enabled SMPlayer will overwrite existing VTT files.")); +- +- setWhatsThis(subs_filter_check, tr("Try to remove advertisements"), +- tr("If this option is enabled SMPlayer will try to find advertisements " +- "in the subtitles and remove them.")); +- +- setWhatsThis(subs_position_spin, tr("Position of subtitles on screen"), +- tr("This option sets the position on the screen where the subtitles are displayed.") +"
      "+ +- tr("0 is the top of the screen, 100 is the bottom of the screen.") +" "+ +- tr("The special value -1 means the default position.")); +- #endif +-#endif +- + addSectionTitle(tr("Proxy")); + + setWhatsThis(use_proxy_check, tr("Enable proxy"), +--- a/src/prefnetwork.h 2020-02-16 22:51:47.000000000 +0100 ++++ b/src/prefnetwork.h 2023-02-23 15:27:00.408858047 +0100 +@@ -48,27 +48,6 @@ + void setProxyType(int type); + int proxyType(); + +-#ifdef YOUTUBE_SUPPORT +- void setYTResolution(int r); +- int YTResolution(); +-#endif +- +- void setStreamingType(int); +- int streamingType(); +- +-#ifdef MPV_SUPPORT +- void setYTDLQuality(const QString & q); +- QString YTDLQuality(); +-#endif +- +-#ifdef CHROMECAST_SUPPORT +- void setLocalIP(const QString & ip, const QStringList & values); +- QString localIP(); +-#endif +- +-protected slots: +- void streaming_type_combo_changed(int); +- + protected: + virtual void retranslateStrings(); + }; +--- a/src/smplayer.pro ++++ b/src/smplayer.pro +@@ -18,7 +18,7 @@ + DEFINES += SINGLE_INSTANCE + DEFINES += FIND_SUBTITLES + DEFINES += VIDEOPREVIEW +-DEFINES += YOUTUBE_SUPPORT ++#DEFINES += YOUTUBE_SUPPORT + DEFINES += BLURAY_SUPPORT + DEFINES += TV_SUPPORT + DEFINES += GUI_CHANGE_ON_RUNTIME +@@ -28,17 +28,17 @@ + DEFINES += MINIGUI + DEFINES += MPCGUI + DEFINES += SKINS +-DEFINES += MPRIS2 ++#DEFINES += MPRIS2 + #DEFINES += UPDATE_CHECKER + #DEFINES += CHECK_UPGRADED +-DEFINES += AUTO_SHUTDOWN_PC ++#DEFINES += AUTO_SHUTDOWN_PC + #DEFINES += CAPTURE_STREAM + DEFINES += BOOKMARKS + DEFINES += MOUSE_GESTURES + DEFINES += GLOBALSHORTCUTS + DEFINES += ADD_BLACKBORDERS_FS + DEFINES += INITIAL_BLACKBORDERS +-DEFINES += CHROMECAST_SUPPORT ++#DEFINES += CHROMECAST_SUPPORT + DEFINES += USE_QRCODE + + DEFINES += MPV_SUPPORT +--- a/src/prefnetwork.ui 2019-01-26 21:11:22.000000000 +0100 ++++ b/src/prefnetwork.ui 2023-02-23 14:49:30.000000000 +0100 +@@ -19,443 +19,6 @@ + + 0 + +- +- +- &YouTube (and other sites) +- +- +- +- +- +- +- +- Support for &video sites: +- +- +- streaming_type_combo +- +- +- +- +- +- +- +- 0 +- 0 +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- 0 +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 20 +- +- +- +- +- +- +- +- P&referred quality: +- +- +- ytdl_quality_combo +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 221 +- 20 +- +- +- +- +- +- +- +- +- +- +- Options for YouTube +- +- +- +- +- +- +- +- Playback &quality: +- +- +- yt_resolution_combo +- +- +- +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- Use a&daptive streams (resolution up to 4K) +- +- +- +- +- +- +- false +- +- +- +- 0 +- +- +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 20 +- 20 +- +- +- +- +- +- +- +- Use &60 fps if available +- +- +- +- +- +- +- +- +- +- +- +- +- +- &User agent: +- +- +- yt_user_agent_edit +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- C&hromecast +- +- +- +- +- +- Web Server +- +- +- +- +- +- +- 75 +- true +- +- +- +- Changes in this section will be applied the next time the web server is restarted +- +- +- Qt::AlignCenter +- +- +- true +- +- +- +- +- +- +- 65535 +- +- +- +- +- +- +- &Directory listing +- +- +- +- +- +- +- Local &IP: +- +- +- local_ip_combo +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 179 +- 20 +- +- +- +- +- +- +- +- &Port: +- +- +- port_spin +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 179 +- 20 +- +- +- +- +- +- +- +- In order to serve local media from this computer to Chromecast, SMPlayer will run a tiny web server. You can adjust here some of the settings. +- +- +- true +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- +- +- +- true +- +- +- +- +- +- +- +- +- +- Subtitles +- +- +- +- +- +- Convert SRT subtitles to &VTT +- +- +- +- +- +- +- false +- +- +- +- 0 +- +- +- +- +- Qt::Horizontal +- +- +- QSizePolicy::Fixed +- +- +- +- 21 +- 61 +- +- +- +- +- +- +- +- &Overwrite existing VTT files +- +- +- +- +- +- +- Try to &remove advertisements +- +- +- +- +- +- +- +- +- Position of &subtitles on screen: +- +- +- subs_position_spin +- +- +- +- +- +- +- -1 +- +- +- 100 +- +- +- +- +- +- +- Qt::Horizontal +- +- +- +- 40 +- 20 +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- + + + &Proxy diff --git a/smplayer-legacy/remove-update-check.patch b/smplayer-legacy/remove-update-check.patch new file mode 100644 index 0000000..943731b --- /dev/null +++ b/smplayer-legacy/remove-update-check.patch @@ -0,0 +1,64 @@ +--- a/src/basegui.cpp 2020-06-01 18:01:40.000000000 +0200 ++++ b/src/basegui.cpp 2025-02-19 09:13:50.708673794 +0100 +@@ -892,21 +892,21 @@ + + + // Menu Help +- showFirstStepsAct = new MyAction( this, "first_steps" ); +- connect( showFirstStepsAct, SIGNAL(triggered()), +- this, SLOT(helpFirstSteps()) ); +- +- showFAQAct = new MyAction( this, "faq" ); +- connect( showFAQAct, SIGNAL(triggered()), +- this, SLOT(helpFAQ()) ); ++ //showFirstStepsAct = new MyAction( this, "first_steps" ); ++ //connect( showFirstStepsAct, SIGNAL(triggered()), ++ // this, SLOT(helpFirstSteps()) ); ++ ++ //showFAQAct = new MyAction( this, "faq" ); ++ //connect( showFAQAct, SIGNAL(triggered()), ++ // this, SLOT(helpFAQ()) ); + + showCLOptionsAct = new MyAction( this, "cl_options" ); + connect( showCLOptionsAct, SIGNAL(triggered()), + this, SLOT(helpCLOptions()) ); + +- showCheckUpdatesAct = new MyAction( this, "check_updates" ); +- connect( showCheckUpdatesAct, SIGNAL(triggered()), +- this, SLOT(helpCheckUpdates()) ); ++ //showCheckUpdatesAct = new MyAction( this, "check_updates" ); ++ //connect( showCheckUpdatesAct, SIGNAL(triggered()), ++ // this, SLOT(helpCheckUpdates()) ); + + #ifdef YT_CODEDOWNLOADER + updateYTAct = new MyAction( this, "update_youtube" ); +@@ -1874,10 +1874,10 @@ + tabletModeAct->change(Images::icon("tablet_mode"), tr("T&ablet mode")); + + // Menu Help +- showFirstStepsAct->change( Images::icon("guide"), tr("First Steps &Guide") ); +- showFAQAct->change( Images::icon("faq"), tr("&FAQ") ); ++ //showFirstStepsAct->change( Images::icon("guide"), tr("First Steps &Guide") ); ++ //showFAQAct->change( Images::icon("faq"), tr("&FAQ") ); + showCLOptionsAct->change( Images::icon("cl_help"), tr("&Command line options") ); +- showCheckUpdatesAct->change( Images::icon("check_updates"), tr("Check for &updates") ); ++ //showCheckUpdatesAct->change( Images::icon("check_updates"), tr("Check for &updates") ); + + #ifdef YT_CODEDOWNLOADER + #if defined(Q_OS_WIN) && !defined(PORTABLE_APP) +@@ -3032,12 +3032,12 @@ + } + #endif + if (!pref->tablet_mode) { +- helpMenu->addAction(showFirstStepsAct); +- helpMenu->addAction(showFAQAct); ++ //helpMenu->addAction(showFirstStepsAct); ++ //helpMenu->addAction(showFAQAct); + helpMenu->addAction(showCLOptionsAct); + helpMenu->addSeparator(); + } +- helpMenu->addAction(showCheckUpdatesAct); ++ //helpMenu->addAction(showCheckUpdatesAct); + #ifdef YT_CODEDOWNLOADER + helpMenu->addAction(updateYTAct); + #endif diff --git a/smplayer-skins/PKGBUILD b/smplayer-skins/PKGBUILD new file mode 100644 index 0000000..93aa75a --- /dev/null +++ b/smplayer-skins/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=smplayer-skins +pkgver=20.11.0 +pkgrel=1 +pkgdesc="Skins for SMPlayer" +arch=('any') +url='https://smplayer.info' +license=('GPL-2' 'LGPL-3' 'CC-BY-2.5' 'CC-BY-SA-2.5' 'CC-BY-SA-3.0') +depends=('smplayer-legacy') +source=("https://downloads.sourceforge.net/smplayer/${pkgname}-${pkgver}.tar.bz2") +sha512sums=('a52464b3b0aca82caf3762fde0ad7f1084e7e37b936f97d05f758554f84188cee11cb4d4630575ec10ed3970f0b77bceabb3f90fe4e43ff7d29b5c2725741a7d') + +build() { + cd "${pkgname}-${pkgver}" + make PREFIX=/usr +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" PREFIX=/usr install + + # remove questionable data, out of trademarks and copyrights + rm -rf "${pkgdir}"/usr/share/smplayer/themes/{Mac,Vista} + + install -Dm644 {README.txt,Changelog} -t "${pkgdir}/usr/share/doc/${pkgname}/" + install -Dm644 COPYING*.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/smplayer-themes/PKGBUILD b/smplayer-themes/PKGBUILD new file mode 100644 index 0000000..f6d336b --- /dev/null +++ b/smplayer-themes/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=smplayer-themes +pkgver=20.11.0 +pkgrel=1 +pkgdesc="Themes for SMPlayer" +url='https://www.smplayer.info/' +arch=('any') +license=('GPL-2' 'LGPL-3' 'CC-BY-2.5' 'CC-BY-SA-2.5' 'CC-BY-SA-3.0') +depends=('smplayer-legacy') +makedepends=('optipng') +source=(https://downloads.sourceforge.net/smplayer/${pkgname}-${pkgver}.tar.bz2) +sha512sums=('4e64c3f44fc3529d980751618cd30fcc395a21701ba7481ad0a6dffc1fa770c13a3414d0853f94cd6163738702a0a75060a92e5c1c426e79902a68d8f8336575') + +prepare() { + cd ${pkgname}-${pkgver} + # fix invalid PNG icons to work with libpng 1.6 + find -name '*.png' -exec optipng -quiet -force -fix {} + +} + +build() { + cd ${pkgname}-${pkgver} + make PREFIX=/usr +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" PREFIX=/usr install + install -Dm644 COPYING*.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/smu/PKGBUILD b/smu/PKGBUILD new file mode 100644 index 0000000..92723fe --- /dev/null +++ b/smu/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=smu +pkgver=1.6 +pkgrel=1 +pkgdesc="A simplified markdown dialect and interpreter" +url='https://github.com/karlb/smu' +arch=('i686' 'x86_64') +license=('Expat') +depends=('glibc') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('f531936d752d133c7603f8e56812abc5577454491909f396db3ed0eaa91c66136e2c18aad0b3b7e78a0e0bbe957118c67fa5728692148fa554194384013ca9ca' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +build() { + cd $pkgname-$pkgver + make PREFIX=/usr MANPREFIX=/usr/share/man DESTDIR=$pkgdir +} + +package() { + cd $pkgname-$pkgver + make PREFIX=/usr MANPREFIX=/usr/share/man DESTDIR=$pkgdir install + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/snappy/PKGBUILD b/snappy/PKGBUILD new file mode 100644 index 0000000..024c7a8 --- /dev/null +++ b/snappy/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=snappy +pkgver=1.1.8 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="A fast compressor/decompressor library" +arch=('i686' 'x86_64') +url="https://google.github.io/snappy/" +license=('Modified-BSD') +depends=('glibc' 'gcc-libs') +checkdepends=('zlib') +makedepends=('cmake' 'clang' 'quilt') +options=('staticlibs') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/google/snappy/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/s/snappy/snappy_${_debver}-${_debrel}.debian.tar.xz" + "snappy.pc") +sha512sums=('efe18ff1b3edda1b4b6cefcbc6da8119c05d63afdbf7a784f3490353c74dced76baed7b5f1aa34b99899729192b9d657c33c76de4b507a51553fa8001ae75c1c' + '753704332bfd232d8b56d6bd7e1c46eabb2ac2aa0f78803c1c606c455fe78cea5b5836fdeac1dc63ff169d12058d7cbdcf5581c2fd63f24aa140f9b2c14fb45e' + 'fceacd1173cd0ac8236a4a7eb4a5c776dcc3d39f89ab7795e1fad8f3af57f64bdd68f62d137cd7e6e619e6bebec62e8d4ee1ec95c8652ce92c920de63cda7789') + +prepare() { + cd "$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + + # compile without assertions + CXXFLAGS+=\ -DNDEBUG + + # export CXX=clang++ + + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DBUILD_SHARED_LIBS=yes \ + . + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + install -m644 -D COPYING "$pkgdir/usr/share/licenses/snappy/COPYING" + + # upstream dropped the pkgconfig file and isn't interested in adding it back. + # https://github.com/google/snappy/pull/55 + install -Dm644 "$srcdir/snappy.pc" "$pkgdir/usr/lib/pkgconfig/snappy.pc" +} diff --git a/snappy/snappy.pc b/snappy/snappy.pc new file mode 100644 index 0000000..f460d4f --- /dev/null +++ b/snappy/snappy.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: snappy +Description: A fast compression/decompression library +Version: 1.1.8 +Libs: -L${libdir} -lsnappy +Cflags: -I${includedir} diff --git a/snarf/PKGBUILD b/snarf/PKGBUILD new file mode 100644 index 0000000..ba595ba --- /dev/null +++ b/snarf/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=snarf +pkgver=7.0 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="Command-line URL retrieval tool (http/ftp/gopher)" +arch=('i686' 'x86_64') +url="https://www.xach.com/snarf/" +license=('GPL-2') +depends=('glibc') +source=("https://www.xach.com/snarf/download/source/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/s/snarf/snarf_${_debver}-${_debrel}.diff.gz") +sha512sums=('311c3e4a1b32fd024da8a5c8167888f254608d538695e30b3c632c606f67d1e3d94d8c88deb7850f782f38412f1bfd9022b0ee780c8644655f0648ccf0a0354e' + 'd3e6700de0c9a270293816f720ecd206e990f881b6726d7af97db6a006d2cac704d9f2f682735da9dd128c7a15521af44c6b5903b17c22f0a87d742f9c1eaf86') + +prepare() { + cd ${pkgname}-${pkgver} + patch -Np1 -i ${srcdir}/${pkgname}_${_debver}-${_debrel}.diff +} + +build() { + cd ${pkgname}-${pkgver} + export CPPFLAGS=${CPPFLAGS/-D_FORTIFY_SOURCE=2/} + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/sndio/PKGBUILD b/sndio/PKGBUILD new file mode 100644 index 0000000..459509a --- /dev/null +++ b/sndio/PKGBUILD @@ -0,0 +1,90 @@ +# Maintainer: Jesus E. + +pkgbase=sndio +pkgname=(sndio libsndio) +pkgver=1.8.1 +pkgrel=2 +pkgdesc="A small audio and MIDI service, part of the OpenBSD project" +arch=(i686 x86_64) +url='https://sndio.org/' +license=(ISC) +makedepends=(alsa-lib libbsd) +source=("https://sndio.org/sndio-$pkgver.tar.gz"{,.asc} + 'sndio.sh.profile' + 'sndio.conf.profile' + 'sndiod.confd' + 'sndiod.initd' + 'sndiod.conf' + 'sndiod.run' + 'sndiod_log.run') +sha512sums=('4affeac5758768f9ebf7d823b8d2287695ff02bb4a990474412ab96cb8eef3784c19436a130efb4f7a204193ad479c0086f9bff7b3ac69e6077692dffaa62658' + 'SKIP' + 'c12d2fa3b396aaab1742bc3444349f401359016f5eda89014549bba90ee3abcd76d0c8cd0a2e31009af14cd6502df65892ea79836e35695ddc65a4caec1ab0e6' + 'cb41ca7689a7948508361c2856a94c18ec999804fab2dd00c954f3c7b445853dc15eda4147e8d5c566aba3878fdf84a0cc75190692e8efd40fc196cf8d544149' + '055501c99055fb46d7f66ad8bf704c60ebe0fcb0befa5410429dcf277b6048ad505530924e53079b77a564ed6578bb676bb570c30b2b067a4bd4e3c47a51e79e' + 'd65d9ac2084f83cbbd5e4c5e20b79b61247dc5f0f63950b3d2876f689b876c3b81a66863434e73ccb19f4e2d3593774dee3aa8387284c592513478c4dc9e4c94' + '5ca5d4bf444458e99f4a42dbda5ddff8b7b8a5b2a5aa8a4b0c4556010d7311bd60e30c06b780ce7ee6b060ca750a884666a2c096e4c878b63f0df643825641e4' + 'bae139ffa72776c36932c03f024a61fee038768381ae3ad50d900ccfe56f0dac7bdd49ee90b6d67896547bec79502bcb59423a530de781615a826db69563e434' + '7c459f54b17e2b007164d6a0775d3cfdcc1109a9fbc96f6a73d2eeb37cc87a193b168353ed535c84fa510b7a2175cbda69488497f4afc09eb50823b31baba160') +validpgpkeys=('6B1A7447AAF091CCDD36BAA6015E339411694A6E') # Alexandre Ratchov + +build() { + cd sndio-$pkgver + + ./configure --prefix=/usr --enable-alsa --enable-rmidi --enable-umidi --with-libbsd + make +} + +package_sndio() { + depends=(libsndio=$pkgver) + optdepends=('aucatctl: sndio volume control') + replaces=(pulseaudio) + conflicts=(pulseaudio) + provides=(pulseaudio) + backup=(etc/sndio.conf etc/conf.d/sndiod etc/sv/sndiod/conf) + install=sndio.install + + cd sndio-$pkgver + + make DESTDIR="$pkgdir/" install + + # move sndiod to /usr/sbin for FHS compliance + install -d -m 755 "$pkgdir/usr/sbin" + mv "$pkgdir/usr/bin/sndiod" "$pkgdir/usr/sbin" + + install -D -m 755 "$srcdir/sndio.sh.profile" "$pkgdir/etc/profile.d/sndio.sh" + install -D -m 644 "$srcdir/sndio.conf.profile" "$pkgdir/etc/sndio.conf" + + install -D -m 755 "$srcdir/sndiod.initd" "$pkgdir/etc/init.d/sndiod" + install -D -m 644 "$srcdir/sndiod.confd" "$pkgdir/etc/conf.d/sndiod" + + install -D -m 755 "$srcdir/sndiod_log.run" "$pkgdir/etc/sv/sndiod/log/run" + install -D -m 755 "$srcdir/sndiod.run" "$pkgdir/etc/sv/sndiod/run" + install -D -m 644 "$srcdir/sndiod.conf" "$pkgdir/etc/sv/sndiod/conf" + + install -d "$pkgdir/usr/share/licenses/$pkgname" + # this is the most up-to-date license outside of bsd-compat, + # which isn't being used in this build + sed -n '/Copyright/,/PERFORMANCE/p' aucat/aucat.c > "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + cd libsndio + make DESTDIR="$pkgdir" uninstall + rm -r $pkgdir/usr/{include,lib,share/man/man{3,7}} +} + +package_libsndio() { + pkgdesc+=' (client library)' + depends=(alsa-lib libbsd) + replaces=(libpulse) + conflicts=(libpulse) + provides=(libpulse) + + cd sndio-$pkgver/libsndio + + make DESTDIR="$pkgdir" install + + install -d "$pkgdir/usr/share/licenses/$pkgname" + # this is the most up-to-date license outside of bsd-compat, + # which isn't being used in this build + sed -n '/Copyright/,/PERFORMANCE/p' ../aucat/aucat.c > "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/sndio/sndio.conf.profile b/sndio/sndio.conf.profile new file mode 100644 index 0000000..b17d99a --- /dev/null +++ b/sndio/sndio.conf.profile @@ -0,0 +1 @@ +AUDIODEVICE=snd/0 diff --git a/sndio/sndio.install b/sndio/sndio.install new file mode 100644 index 0000000..3fd74de --- /dev/null +++ b/sndio/sndio.install @@ -0,0 +1,63 @@ +post_install() { + if ! getent passwd sndiod &>/dev/null; then + useradd -r -g audio -G adm -d /run/sndiod -s /bin/nologin sndiod >/dev/null + fi + if ! groups sndiod | grep audio &>/dev/null; then + gpasswd -a sndiod audio >/dev/null + fi + if ! groups sndiod | grep adm &>/dev/null; then + gpasswd -a sndiod adm >/dev/null + fi + sndiod_shell=$(getent passwd sndiod | cut -d: -f7) + if [ "$sndiod_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin sndiod &>/dev/null + fi + if [[ ! -h /etc/runlevels/default/sndiod ]]; then + if [[ ! -d /etc/runlevels/default ]]; then + mkdir -p /etc/runlevels/default + fi + ln -s /etc/init.d/sndiod /etc/runlevels/default/sndiod + fi + if [[ ! -h /etc/runlevels/nonetwork/sndiod ]]; then + if [[ ! -d /etc/runlevels/nonetwork ]]; then + mkdir -p /etc/runlevels/nonetwork + fi + ln -s /etc/init.d/sndiod /etc/runlevels/nonetwork/sndiod + fi +} + +post_upgrade() { + if ! getent passwd sndiod &>/dev/null; then + useradd -r -g audio -G adm -d /run/sndiod -s /bin/nologin sndiod >/dev/null + fi + if ! groups sndiod | grep audio &>/dev/null; then + gpasswd -a sndiod audio >/dev/null + fi + if ! groups sndiod | grep adm &>/dev/null; then + gpasswd -a sndiod adm >/dev/null + fi + sndiod_shell=$(getent passwd sndiod | cut -d: -f7) + if [ "$sndiod_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin sndiod &>/dev/null + fi + if (( $(vercmp $2 1.6.0-1.hyperbola4.backports1) < 0 )); then + if [[ ! -h /etc/runlevels/default/sndiod ]]; then + if [[ ! -d /etc/runlevels/default ]]; then + mkdir -p /etc/runlevels/default + fi + ln -s /etc/init.d/sndiod /etc/runlevels/default/sndiod + fi + if [[ ! -h /etc/runlevels/nonetwork/sndiod ]]; then + if [[ ! -d /etc/runlevels/nonetwork ]]; then + mkdir -p /etc/runlevels/nonetwork + fi + ln -s /etc/init.d/sndiod /etc/runlevels/nonetwork/sndiod + fi + fi +} + +post_remove() { + if getent passwd sndiod &>/dev/null; then + userdel sndiod >/dev/null + fi +} diff --git a/sndio/sndio.sh.profile b/sndio/sndio.sh.profile new file mode 100644 index 0000000..3df034e --- /dev/null +++ b/sndio/sndio.sh.profile @@ -0,0 +1,12 @@ +#!/bin/sh + +if [ -n "$XDG_CONFIG_HOME" ] && [ -r "$XDG_CONFIG_HOME/sndio.conf" ]; then + . "$XDG_CONFIG_HOME/sndio.conf" +elif [ -n "$HOME" ] && [ -r "$HOME/.config/sndio.conf" ]; then + . "$HOME/.config/sndio.conf" +elif [ -r /etc/sndio.conf ]; then + . /etc/sndio.conf +fi + +[ -n "$AUDIODEVICE" ] && export AUDIODEVICE +[ -n "$MIDIDEVICE" ] && export MIDIDEVICE diff --git a/sndio/sndiod.conf b/sndio/sndiod.conf new file mode 100644 index 0000000..bd7dcb8 --- /dev/null +++ b/sndio/sndiod.conf @@ -0,0 +1,2 @@ +OPTS="-L localhost -j off \ + -a off -e s16 -r 48000 -f rsnd/0 -m play,rec -v 118 -s default" diff --git a/sndio/sndiod.confd b/sndio/sndiod.confd new file mode 100644 index 0000000..ec7836b --- /dev/null +++ b/sndio/sndiod.confd @@ -0,0 +1,7 @@ +# /etc/conf.d/sndiod: config file for /etc/init.d/sndiod + +# Options to pass to the sndiod service. +# See the sndiod(8) man page for more info. + +SNDIOD_ARGS="-L localhost -j off \ + -a off -e s16 -r 48000 -f rsnd/0 -m play,rec -v 118 -s default" diff --git a/sndio/sndiod.initd b/sndio/sndiod.initd new file mode 100644 index 0000000..909563b --- /dev/null +++ b/sndio/sndiod.initd @@ -0,0 +1,20 @@ +#!/sbin/openrc-run +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +description="sndio service" + +command="/usr/sbin/sndiod" +command_args="-dd $SNDIOD_ARGS" +command_background="yes" +pidfile="/run/sndiod/sndiod.pid" +retry="TERM/10/KILL/5" + +depend() { + need localmount + after bootmisc modules isapnp coldplug hotplug alsasound +} + +start_pre() { + checkpath --directory --mode 0700 /run/sndiod +} diff --git a/sndio/sndiod.run b/sndio/sndiod.run new file mode 100644 index 0000000..8b4bb8d --- /dev/null +++ b/sndio/sndiod.run @@ -0,0 +1,3 @@ +#!/bin/sh +[ -r conf ] && . ./conf +exec sndiod ${OPTS} -d 2>&1 diff --git a/sndio/sndiod_log.run b/sndio/sndiod_log.run new file mode 100644 index 0000000..4472c76 --- /dev/null +++ b/sndio/sndiod_log.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec logger -t sndiod diff --git a/snownews/PKGBUILD b/snownews/PKGBUILD new file mode 100644 index 0000000..c740813 --- /dev/null +++ b/snownews/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=snownews +pkgver=1.11 +pkgrel=1 +pkgdesc="RSS feed reader for the command-line" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/snownews/' +license=('GPL-3') +depends=('curl' 'libxml2') +makedepends=('gettext-tiny') +source=("https://sourceforge.net/projects/${pkgname}/files/${pkgname}-${pkgver}.tar.gz") +sha512sums=('ce7e282405a1c0cc5adb64906193886fc9592607f3bdce474ff8b179d23569cbd66d08c33a06290b3729bc158cd38abf0f6c6147f49937b9e4b6949bf690a1f8') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir/" install + install -D -m644 LICENSE.md -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/socat/PKGBUILD b/socat/PKGBUILD new file mode 100644 index 0000000..a241f64 --- /dev/null +++ b/socat/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=socat +pkgver=1.8.0.2 +pkgrel=1 +pkgdesc="Multipurpose relay" +url='http://www.dest-unreach.org/socat/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('readline' 'libressl') +source=("http://www.dest-unreach.org/socat/download/${pkgname}-${pkgver}.tar.gz") +sha512sums=('c0a04e697f03da35d8c630de038e837c544e4dc77dd5bfbe73198d88b2d21727d9062114c1c50925daa264178f3317bc11c5504d1358ab7b3e8bce15e3e2dff9') + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/sord/PKGBUILD b/sord/PKGBUILD new file mode 100644 index 0000000..2fff961 --- /dev/null +++ b/sord/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Jesus E. + +pkgname=sord +pkgver=0.16.8 +_debver=0.16.8 +_debrel=2 +pkgrel=2 +pkgdesc="A lightweight C library for storing RDF data in memory" +arch=('i686' 'x86_64') +url="https://drobilla.net/software/sord/" +license=('ISC') +depends=('glibc' 'serd' 'pcre') +makedepends=('waf' 'quilt') +source=("https://download.drobilla.net/${pkgname}-${pkgver}.tar.bz2"{,.asc} + "https://deb.debian.org/debian/pool/main/s/sord/sord_$_debver-$_debrel.debian.tar.xz") +sha512sums=('24ed50de8e5bb321e557bac6d3e441b2ed49adabf828bf0e1b33a080c89306dde80443dc8b563098fcc184c4d6e53b7e716b523ddccdf56d08301d1b0120f2b2' + 'SKIP' + 'e0ca78cc289e6d3758d6da394954e600a2b4ab0aa2fc6a2d73a0c339444c574b769a772f2a3d0ecb47f950949af361b047e28f5e0b823f802806e4e4a15f3292') +validpgpkeys=('907D226E7E13FA337F014A083672782A9BF368F3') # David Robillard + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + # remove local call to ldconfig + sed -i "/ldconfig/d" wscript + # let wscript(s) find the custom waf scripts + mkdir -pv tools + touch __init__.py + cp -v waflib/extras/{autoship,autowaf,lv2}.py tools/ + mkdir -pv plugins/tools/ + cp -v waflib/extras/{autoship,autowaf,lv2}.py plugins/tools/ + rm -rv waflib + sed -e 's/waflib.extras/tools/g' \ + -e "s/load('autowaf'/load('autowaf', tooldir='tools'/g" \ + -e "s/load('lv2'/load('lv2', tooldir='tools'/g" \ + -i wscript +} + +build() { + cd "${pkgname}-${pkgver}" + waf configure --prefix=/usr \ + --test + waf build +} + +check() { + cd "${pkgname}-${pkgver}" + waf test +} + +package() { + cd "${pkgname}-${pkgver}" + waf install --destdir="$pkgdir" + # license + install -vDm 644 COPYING \ + -t "$pkgdir/usr/share/licenses/$pkgname" + # docs + install -t "$pkgdir/usr/share/doc/${pkgname}" \ + -vDm 644 {AUTHORS,NEWS,README.md} +} + +# vim:set ts=2 sw=2 et: diff --git a/soundbraid/LICENSE b/soundbraid/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/soundbraid/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/soundbraid/PKGBUILD b/soundbraid/PKGBUILD new file mode 100644 index 0000000..e5fc5c1 --- /dev/null +++ b/soundbraid/PKGBUILD @@ -0,0 +1,21 @@ +# Maintainer: Jesus E. + +pkgname=soundbraid +pkgver=20231219 +pkgrel=1 +pkgdesc="A simple mixer for sndio" +arch=('any') +url='https://codeberg.org/JWMKit/soundbraid' +license=('GPL-2') +depends=('gtk' 'python-pygobject' 'sndio') +source=("${pkgname}-${pkgver}.tar.gz::https://codeberg.org/JWMKit/soundbraid/archive/${pkgver}.tar.gz") +sha512sums=('2ee32151a1d0411ddea9587dfb88575c8cce2e0eb2389fae846a2724faf29735681d89b26e0b03c4ef7cba408876fb6a860fb66f938844e3055fe30a34c92bcb') + +package() { + # copy files to the package structure + install -Dm755 ./soundbraid/PYTHON/soundbraidl -t $pkgdir/usr/bin/ + install -Dm644 ./soundbraid/freedesktop/soundbraidl.desktop -t $pkgdir/usr/share/applications/ + install -Dm644 ./soundbraid/man1/soundbraidl.1 -t $pkgdir/usr/share/man/man1/ + install -Dm644 ./soundbraid/icons/soundbraidl.svg -t $pkgdir/usr/share/pixmaps/ + install -Dm644 ./soundbraid/doc/* -t $pkgdir/usr/share/licenses/${pkgname} +} diff --git a/soundconverter/PKGBUILD b/soundconverter/PKGBUILD new file mode 100644 index 0000000..dbd9046 --- /dev/null +++ b/soundconverter/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=soundconverter +pkgver=4.0.1 +pkgrel=1 +pkgdesc='A simple sound converter application' +arch=('any') +license=('GPL-3') +url='https://soundconverter.org/' +depends=('python-gobject' 'gst-python' 'gst-plugins-ugly' 'desktop-file-utils' 'gst-plugins-good') +makedepends=('python-distutils-extra' 'gettext-tiny') +source=("https://launchpad.net/soundconverter/trunk/$pkgver/+download/soundconverter-$pkgver.tar.gz") +sha512sums=('0c146a08b49d0fc71fc402ed73a6b7fd167986c44467385ecb29b2c17b7944437e84f2f6e9146bfb812bd7aeed7e98bbb68452a57f80970fb428f7acfb17eaf0') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + python3 setup.py build +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + python3 setup.py install --prefix=${pkgdir}/usr + rm ${pkgdir}/usr/share/glib-2.0/schemas/gschemas.compiled + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/soundfont-fluid/PKGBUILD b/soundfont-fluid/PKGBUILD new file mode 100644 index 0000000..15bee20 --- /dev/null +++ b/soundfont-fluid/PKGBUILD @@ -0,0 +1,18 @@ +# Maintainer: Jesus E. + +pkgname=soundfont-fluid +pkgver=3.1 +pkgrel=1 +pkgdesc='FluidR3 soundfont' +arch=('any') +url='http://www.hammersound.net' +license=('Expat') +source=("https://deb.debian.org/debian/pool/main/f/fluid-soundfont/fluid-soundfont_$pkgver.orig.tar.gz") +sha512sums=('014394752ac50d3162c87903d9dd6b38d199ddfab10e2dea3b2a96d02ddcb876a792cc20bc0e83be5ac15eb0c7e261612eedcd792a3f0ff85a7d032a7dd24f29') + +package() { + install -Dm0644 "$srcdir/fluid-soundfont-$pkgver/FluidR3_GM.sf2" "$pkgdir/usr/share/soundfonts/FluidR3_GM.sf2" + install -Dm0644 "$srcdir/fluid-soundfont-$pkgver/FluidR3_GS.sf2" "$pkgdir/usr/share/soundfonts/FluidR3_GS.sf2" + install -Dm0644 "$srcdir/fluid-soundfont-$pkgver/README" "$pkgdir/usr/share/doc/$pkgname/README" + install -Dm0644 "$srcdir/fluid-soundfont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/soundtouch/PKGBUILD b/soundtouch/PKGBUILD new file mode 100644 index 0000000..d73cf53 --- /dev/null +++ b/soundtouch/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=soundtouch +pkgver=2.2 +pkgrel=1 +pkgdesc='An audio processing library' +arch=(i686 x86_64) +url='https://www.surina.net/soundtouch/' +license=(LGPL-2.1) +source=(https://gitlab.com/${pkgname}/${pkgname}/-/archive/${pkgver}/${pkgname}-${pkgver}.tar.bz2) +sha512sums=('8bc1b9aa60031145e8be7ab48d10d93da84b0f5032eb2d8cf46291d4267b6810513f284f6fa72dd6f343e30eeec03070a7485cd933f30bace2ebf995bc843143') + +prepare() { + cd ${pkgname}-${pkgver} + + ./bootstrap +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix='/usr' \ + --enable-shared + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" pkgdocdir='/usr/share/doc/soundtouch' install + install -Dm644 COPYING.TXT -t ${pkgdir}/usr/share/licenses/${pkgname} +} + +# vim: ts=2 sw=2 et: diff --git a/spacefm/PKGBUILD b/spacefm/PKGBUILD new file mode 100644 index 0000000..5534fed --- /dev/null +++ b/spacefm/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: Jesus E. + +pkgbase=spacefm +pkgname=('spacefm' 'spacefm-gtk2') +pkgver=1.0.6 +_debver=$pkgver +_debrel=5 +pkgrel=6 +pkgdesc="Multi-panel tabbed file manager" +arch=('i686' 'x86_64') +url='https://ignorantguru.github.io/spacefm/' +license=('GPL-3') +conflicts=('spacefm') +provides=('spacefm') +makedepends=('gtk' 'gtk2' 'startup-notification' 'intltool' 'desktop-file-utils' + 'gettext-tiny' 'ffmpegthumbnailer' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/IgnorantGuru/spacefm/archive/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/s/spacefm/spacefm_$_debver-$_debrel.debian.tar.xz" + "sysmacros.patch") +sha512sums=('37fc0dd31f02158502f592415b4c375ee49560af6f03d75b035d7c6c45bdc47064bba1ae8987b4cc8be2e02b3dfcdc17ec760411975e7b5f74343a2293fb2c8c' + 'dc2fc2a7be1478fdbefeac96c520647354d2c684be1a272022890deb72329c614bfbefffbfb1391337ffd10445371038635b485b6920d196a5d06203cda910fe' + '58b75419b067fbe6cbe251c17055540fb2973f6e33b6d48af05af5f225c7b56e7959ee20d7ff53c869d539d0fe18ff7e5f4046af4a5b7e3349b92ecb3f28375e') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + patch -Np0 -b -z .orig < ${srcdir}/sysmacros.patch + ./configure \ + --prefix=/usr \ + --with-gtk2 \ + --enable-video-thumbnails \ + --disable-pixmaps + make + + # GTK+ 3 version + cd "$srcdir" + [ -d gtk3 ] || cp -r $pkgbase-$pkgver gtk3 + cd gtk3 + ./configure \ + --prefix=/usr \ + --with-gtk3 \ + --enable-video-thumbnails + make +} + +package_spacefm() { + pkgdesc+=" (GTK+ 3 version)" + depends=('gtk' 'startup-notification' 'ffmpegthumbnailer') + optdepends=('lsof: device processes' + 'pmount: mount as non-root user') + + cd gtk3 + make DESTDIR="${pkgdir}" install + rm -f "$pkgdir"/usr/bin/spacefm-installer + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_spacefm-gtk2() { + pkgdesc+=" (GTK+ 2 version)" + depends=('gtk2' 'desktop-file-utils' 'startup-notification' 'ffmpegthumbnailer') + optdepends=('lsof: device processes' + 'pmount: mount as non-root user') + + cd gtk2 + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/spacefm/sysmacros.patch b/spacefm/sysmacros.patch new file mode 100644 index 0000000..0af9ef1 --- /dev/null +++ b/spacefm/sysmacros.patch @@ -0,0 +1,11 @@ +diff -up ./src/main.c.orig ./src/main.c +--- ./src/main.c.orig 2018-12-29 02:39:00.000000000 -0700 ++++ ./src/main.c 2018-12-29 02:39:31.000000000 -0700 +@@ -21,6 +21,7 @@ + + /* socket is used to keep single instance */ + #include ++#include + #include + #include + diff --git a/spandsp/PKGBUILD b/spandsp/PKGBUILD new file mode 100644 index 0000000..ba82ddf --- /dev/null +++ b/spandsp/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=spandsp +_pkgver=0.0.6+dfsg +pkgver=0.0.6 +_debver=0.0.6+dfsg +_debrel=2 +pkgrel=3 +pkgdesc="A DSP library for telephony" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +url="https://www.soft-switch.org/" +depends=('libtiff') +makedepends=('quilt') +source=(https://deb.debian.org/debian/pool/main/s/spandsp/spandsp_$_pkgver.orig.tar.xz + https://deb.debian.org/debian/pool/main/s/spandsp/spandsp_$_debver-$_debrel.debian.tar.xz) +sha512sums=('f64765f849b38a20f1793b4792361e51b9c37d58701f72c46652f1512a3d15616ec8b5ad5833d68b6b7a6290bb3ae948ec22248cc3ff767cb8875a02ae0be8ef' + '9d2969e33a6e9c683b092c16c2805487e2e3375b8cfa7ec159e73383b7ac856d8a1be691ff93a3d89835d758d81b8f8acbffb90b96fea21a61555dd4d1ff3a78') + +prepare() { + cd $pkgname-$_pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd $pkgname-$_pkgver + ./configure --prefix=/usr + make +} + +check() { + cd $pkgname-$_pkgver + make check +} + +package() { + cd $pkgname-$_pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/spawn-fcgi/PKGBUILD b/spawn-fcgi/PKGBUILD new file mode 100644 index 0000000..84ae00f --- /dev/null +++ b/spawn-fcgi/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=spawn-fcgi +pkgver=1.6.4 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A FastCGI process manager for web applications" +arch=('i686' 'x86_64') +url='https://redmine.lighttpd.net/projects/spawn-fcgi/' +license=('Modified-BSD') +depends=('glibc') +makedepends=('quilt') +source=("https://www.lighttpd.net/download/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/s/spawn-fcgi/spawn-fcgi_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('defe3b0e21952f6a852237f4677b446757bd0dbccc6609beb2094c59b12de7814a76525554731ad3b52d10060bb0b4060b4f5c4fc3e14cd35f59c30cc583b6b9' + 'cf776cf702700b35e41d172428bfbc650ea3047483b80beb24d5875d3466da8a2eebf711a8421468637e233accb6a18d7a3d52fbd25d2af5bb9e7b1a8c9c9d1b') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/spdlog/PKGBUILD b/spdlog/PKGBUILD new file mode 100644 index 0000000..97fc2f6 --- /dev/null +++ b/spdlog/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=spdlog +pkgver=1.10.0 +pkgrel=1 +pkgdesc="Very fast, header-only/compiled, C++ logging library" +arch=('i686' 'x86_64') +url='https://github.com/gabime/spdlog/' +license=('Expat') +depends=('fmt') +makedepends=('cmake') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/gabime/${pkgname}/archive/v${pkgver}.tar.gz") +sha512sums=('e82ec0a0c813ed2f1c8a31a0f21dbb733d0a7bd8d05284feae3bd66040bc53ad47a93b26c3e389c7e5623cfdeba1854d690992c842748e072aab3e6e6ecc5666') + +build() { + cd ${pkgname}-${pkgver} + + export CFLAGS+=" ${CPPFLAGS}" + export CXXFLAGS+=" ${CPPFLAGS}" + cmake \ + -B build \ + -DCMAKE_BUILD_TYPE=None \ + -DSPDLOG_BUILD_BENCH=OFF \ + -DSPDLOG_FMT_EXTERNAL=ON \ + -DSPDLOG_BUILD_SHARED=ON \ + -DSPDLOG_BUILD_TESTS=ON \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -Wno-dev + make -C build +} + +package() { + cd ${pkgname}-${pkgver} + make -C build DESTDIR=${pkgdir} install + install -Dm644 LICENSE -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/speech-dispatcher/PKGBUILD b/speech-dispatcher/PKGBUILD new file mode 100644 index 0000000..baf2628 --- /dev/null +++ b/speech-dispatcher/PKGBUILD @@ -0,0 +1,101 @@ +# Maintainer: Jesus E. + +pkgbase=speech-dispatcher +pkgname=('speech-dispatcher' 'libspeechd') +pkgver=0.10.2 +_debver=$pkgver +_debrel=2 +pkgrel=2 +arch=('i686' 'x86_64') +pkgdesc="High-level device independent layer for speech synthesis interface" +url="http://www.freebsoft.org/speechd" +license=('GPL-3' 'FDL-1.2' 'LGPL-2.1') +makedepends=('intltool' 'espeak' 'libltdl' 'python-pyxdg' 'dotconf' 'libao' 'libsndfile' 'quilt') +source=("https://github.com/brailcom/speechd/releases/download/${pkgver}/speech-dispatcher-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_${_debver}-${_debrel}+deb11u2.debian.tar.xz") +sha512sums=('9af240d9a15062489c170440911e9d148d0d113a0f22211f1496e9754345a5d079e160962d666801322dc2efa1134f8b5e209c0183d93a1f0896705dc6011122' + '860d8425efb64ce567b4e0ef6164fe1e2ca20c0832c4c44158d88d9ba6bbda97d693c33c23363eb0dbe58d08e834e241ac22bbe174065c935f222815eba102c7') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/systemd-debian || true + rm -v debian/patches/mbrola-paths || true + + quilt push -av + fi + + # Disabled modules + sed -i "s/cicero //g" configure.ac + sed -i "s/sd_cicero//g" src/modules/Makefile.am + sed -i "s/festival //g" configure.ac + sed -i "s/sd_festival//g" src/modules/Makefile.am + + autoreconf -vfi +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr \ + --enable-shared \ + --sysconfdir=/etc \ + --without-flite \ + --without-pulse + make +} + +package_speech-dispatcher() { + depends=("libspeechd=$pkgver-$pkgrel" 'libltdl' 'python-pyxdg' + 'dotconf' 'libsndfile' 'libao' 'espeak') + optdepends=('espeak: Speech output using ESpeak') + backup=(etc/speech-dispatcher/clients/emacs.conf + etc/speech-dispatcher/modules/ibmtts.conf + etc/speech-dispatcher/modules/espeak.conf + etc/speech-dispatcher/modules/espeak-ng.conf + etc/speech-dispatcher/modules/swift-generic.conf + etc/speech-dispatcher/modules/festival.conf + etc/speech-dispatcher/modules/cicero.conf + etc/speech-dispatcher/modules/espeak-mbrola-generic.conf + etc/speech-dispatcher/modules/espeak-ng-mbrola-generic.conf + etc/speech-dispatcher/modules/dtk-generic.conf + etc/speech-dispatcher/modules/llia_phon-generic.conf + etc/speech-dispatcher/modules/ivona.conf + etc/speech-dispatcher/modules/epos-generic.conf + etc/speech-dispatcher/modules/flite.conf + etc/speech-dispatcher/speechd.conf) + + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + #install -Dm644 "${srcdir}"/speech-dispatcherd.service "${pkgdir}/usr/lib/systemd/system/speech-dispatcherd.service" + install -d "${pkgdir}/var/log/speech-dispatcher" + + sed -i 's|includedir=.*|includedir=${prefix}/include/speech-dispatcher|g' "${pkgdir}/usr/lib/pkgconfig/speech-dispatcher.pc" + + mkdir -p "${srcdir}"/libspeechd/usr/lib + mv "${pkgdir}"/usr/include "${srcdir}"/libspeechd/usr + mv "${pkgdir}"/usr/lib/libspeechd*so* "${srcdir}"/libspeechd/usr/lib + + install -Dm644 ${srcdir}/${pkgbase}-${pkgver}/COPYING.GPL-3 -t "${pkgdir}/usr/share/licenses/$pkgname" + install -Dm644 ${srcdir}/${pkgbase}-${pkgver}/debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_libspeechd() { + mkdir -p "${pkgdir}"/usr/lib + + mv "${srcdir}"/libspeechd/usr/include "${pkgdir}"/usr + mv "${srcdir}"/libspeechd/usr/lib/* "${pkgdir}"/usr/lib + + install -Dm644 ${srcdir}/${pkgbase}-${pkgver}/COPYING.LGPL -t "${pkgdir}/usr/share/licenses/$pkgname" + install -Dm644 ${srcdir}/${pkgbase}-${pkgver}/debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/speedcrunch/PKGBUILD b/speedcrunch/PKGBUILD new file mode 100644 index 0000000..aff1b7b --- /dev/null +++ b/speedcrunch/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=speedcrunch +pkgver=0.12.0 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="Simple but powerful, free and libre calculator using Qt" +arch=('i686' 'x86_64') +url='https://speedcrunch.org/' +license=('GPL-2' 'CC0-1.0') +depends=('qt-tools') +makedepends=('cmake' 'quilt') +source=("${pkgname}-${pkgver}.tar.bz2::https://bitbucket.org/heldercorreia/speedcrunch/get/release-${pkgver}.tar.bz2" + "http://deb.debian.org/debian/pool/main/s/speedcrunch/speedcrunch_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('b41f147f2530735af2fad0ecef6047459baed03904ec6d8097a3f21d7d200c2d89beda77676ea1ff762c5c164cd7b639cae84942f61c869acd77aa380c80f141' + '8b11c046c30dbf1ffd645161788a084d027340da4e6a6ac81f35bc38afb3c7fb7fdbccc46e2b9deca68f7868c7681b9bf63b1748d31b8d9b43ee2315aeb3c92c') + +prepare() { + mv "heldercorreia-speedcrunch-ea93b21f9498" "$pkgname-$pkgver" + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -B build \ + -S $pkgname-$pkgver/src \ + -DCMAKE_INSTALL_PREFIX=/usr + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "$srcdir/$pkgname-$pkgver/debian/copyright" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/speex/PKGBUILD b/speex/PKGBUILD new file mode 100644 index 0000000..a587ae1 --- /dev/null +++ b/speex/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=speex +pkgver=1.2.0 +pkgrel=2 +pkgdesc="A free codec for free speech" +arch=(i686 x86_64) +url="https://speex.org/" +license=(Modified-BSD) +depends=(libogg speexdsp libsndio) +source=(https://downloads.us.xiph.org/releases/$pkgname/$pkgname-$pkgver.tar.gz + sndio.patch) +sha512sums=('7fe10838c7d1bafcbe42295b82b79262420dba793b8a4388e2f73a3007850b5572face1b5308d9f4e8d7dfc9cb1c016cbad88cd65b2892667986107ed946836b' + '265bee624bc1a88ac41cd67b43e7f9b08da74710c951d0a706b23e2081f598fda91cb333deea16af17d1d12fa77b15c6755c4f9c83e1954fef93ab8f8e5ac849') + +prepare() { + cd $pkgname-$pkgver + patch -p1 -i ../sndio.patch +} + +build() { + export CPPFLAGS+=" -DUSE_SNDIO" + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-static \ + --enable-binaries # Must be given or configure won't use pkg-config correctly + make +} + +check() { + cd $pkgname-$pkgver + make -k check +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/speex/sndio.patch b/speex/sndio.patch new file mode 100644 index 0000000..913d33f --- /dev/null +++ b/speex/sndio.patch @@ -0,0 +1,82 @@ +diff --git a/src/Makefile.in b/src/Makefile.in +index 58394ed..55fec35 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -370,7 +370,7 @@ speexenc_LDADD = $(top_builddir)/libspeex/libspeex.la \ + + speexdec_SOURCES = speexdec.c wav_io.c + speexdec_LDADD = $(top_builddir)/libspeex/libspeex.la \ +- $(OGG_LIBS) @WINMM_LIBS@ @FFT_LIBS@ ++ $(OGG_LIBS) @WINMM_LIBS@ @FFT_LIBS@ -lsndio + + all: all-am + +diff --git a/src/speexdec.c b/src/speexdec.c +index 4721dc1..c5c39a3 100644 +--- a/src/speexdec.c ++++ b/src/speexdec.c +@@ -67,6 +67,9 @@ + #include + #include + ++#elif defined USE_SNDIO ++#include ++ + #elif defined HAVE_SYS_AUDIOIO_H + #include + #include +@@ -91,6 +94,10 @@ + ((buf[base+1]<<8)&0xff00)| \ + (buf[base]&0xff)) + ++#ifdef USE_SNDIO ++struct sio_hdl *hdl; ++#endif ++ + static void print_comments(char *comments, int length) + { + char *c=comments; +@@ -186,6 +193,32 @@ FILE *out_file_open(char *outFile, int rate, int *channels) + exit(1); + } + fout = fdopen(audio_fd, "w"); ++#elif defined USE_SNDIO ++ struct sio_par par; ++ ++ hdl = sio_open(NULL, SIO_PLAY, 0); ++ if (!hdl) ++ { ++ fprintf(stderr, "Cannot open sndio device\n"); ++ exit(1); ++ } ++ ++ sio_initpar(&par); ++ par.sig = 1; ++ par.bits = 16; ++ par.rate = rate; ++ par.pchan = *channels; ++ ++ if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par) || ++ par.sig != 1 || par.bits != 16 || par.rate != rate) { ++ fprintf(stderr, "could not set sndio parameters\n"); ++ exit(1); ++ } ++ *channels = par.pchan; ++ if (!sio_start(hdl)) { ++ fprintf(stderr, "could not start sndio\n"); ++ exit(1); ++ } + #elif defined HAVE_SYS_AUDIOIO_H + audio_info_t info; + int audio_fd; +@@ -746,6 +779,10 @@ int main(int argc, char **argv) + if (strlen(outFile)==0) + WIN_Play_Samples (out+frame_offset*channels, sizeof(short) * new_frame_size*channels); + else ++#elif defined USE_SNDIO ++ if (strlen(outFile)==0) ++ sio_write (hdl, out+frame_offset*channels, sizeof(short) * new_frame_size*channels); ++ else + #endif + fwrite(out+frame_offset*channels, sizeof(short), new_frame_size*channels, fout); + diff --git a/speexdsp/PKGBUILD b/speexdsp/PKGBUILD new file mode 100644 index 0000000..df39749 --- /dev/null +++ b/speexdsp/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=speexdsp +pkgver=1.2.0 +pkgrel=1 +pkgdesc="DSP library derived from Speex" +arch=(i686 x86_64) +url="https://www.speex.org/" +license=(Modified-BSD) +depends=(glibc) +source=(https://downloads.us.xiph.org/releases/speex/$pkgname-$pkgver.tar.gz) +sha512sums=('e357cd5377415ea66c862302c7cf8bf6a10063cacd903f0846478975b87974cf5bdf00e2c6759d8f4f453c4c869cf284e9dc948a84a83d7b2ab96bd5405c05ec') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-static + make +} + +check() { + cd $pkgname-$pkgver + make -k check +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 COPYING +} diff --git a/spice-gtk/PKGBUILD b/spice-gtk/PKGBUILD new file mode 100644 index 0000000..5db10ea --- /dev/null +++ b/spice-gtk/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=spice-gtk +pkgver=0.39 +pkgrel=3 +pkgdesc="GTK client library for SPICE" +arch=('i686' 'x86_64') +url='https://www.spice-space.org/' +license=('LGPL-2.1') +depends=('gtk' 'gst-plugins-base' 'gst-plugins-good' 'opus' 'usbredir' 'libjpeg-turbo' + 'libsasl' 'mesa-libgl') +makedepends=('gobject-introspection' 'meson' 'spice-protocol' 'usbutils' 'vala') +replaces=('spice-glib' 'spice-gtk3') +# libcap-ng is recommended for GNU/Linux in security isolation. +if [ $(uname -s) = HyperbolaBSD ]; then + _libcap_ng=disabled +else + _libcap_ng=enabled + depends+=('libcap-ng') +fi +source=("https://www.spice-space.org/download/gtk/${pkgname}-${pkgver}.tar.xz"{,.sig}) +sha512sums=('ff0f3ca6b10a2c415f2fa8d61464c5710aaa2a46c2c83909f146fa45f01151e756d9c3d79cb162dd3d0c1279b6ef55a67fc5c1266af2cb5b46ac1eaa0254c8d2' + 'SKIP') +validpgpkeys=('206D3B352F566F3B0E6572E997D9123DE37A484F') # Victor Toso de Carvalho + +build() { + cd ${pkgname}-${pkgver} + # Partially uses parameters based on OpenBSD to build this package. + # - https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/x11/spice-gtk/Makefile?rev=1.51 + hyperbola-meson build \ + -Dpolkit=disabled \ + -Dwebdav=disabled \ + -Dlibcap-ng=$_libcap_ng \ + -Dgtk_doc=disabled \ + -Dsmartcard=disabled + ninja -v -C build +} + +package() { + cd ${pkgname}-${pkgver} + DESTDIR=${pkgdir} meson install -C build + install -Dvm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/spice-protocol/PKGBUILD b/spice-protocol/PKGBUILD new file mode 100644 index 0000000..74c552d --- /dev/null +++ b/spice-protocol/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=spice-protocol +pkgver=0.14.3 +pkgrel=1 +pkgdesc="Headers for SPICE protocol" +arch=(any) +url="https://spice-space.org" +license=('Modified-BSD') +makedepends=('meson') +source=(https://gitlab.freedesktop.org/spice/spice-protocol/-/archive/v$pkgver/spice-protocol-v$pkgver.tar.gz) +sha512sums=('99586fa046c065896ea1a31cb339db2d2449fe252034bb7f7b7cfd139f1fd67ffdc0a4cf4bc93ff9a996a1eaa2f986d97a2d11664f0f9fdde62b961a56f11806') + +build() { + mkdir build + cd "$srcdir/$pkgname-v$pkgver" + hyperbola-meson ../build + ninja -v -C ../build +} + +package() { + cd "$srcdir/$pkgname-v$pkgver" + DESTDIR="$pkgdir/" ninja -C ../build install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/spice/PKGBUILD b/spice/PKGBUILD new file mode 100644 index 0000000..f7000b2 --- /dev/null +++ b/spice/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=spice +pkgver=0.14.3 +_debver=$pkgver +_debrel=2.1 +pkgrel=2 +pkgdesc="SPICE server" +arch=('i686' 'x86_64') +url='https://www.spice-space.org' +license=('LGPL-2.1') +depends=('pixman' 'opus' 'libjpeg-turbo' 'glib2' 'libsasl' 'lz4') +makedepends=('meson' 'spice-protocol' 'quilt') +source=("https://www.spice-space.org/download/releases/${pkgname}-${pkgver}.tar.bz2"{,.sign} + "https://deb.debian.org/debian/pool/main/s/spice/spice_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('9ecdc455ff25c71ac1fe6c576654b51efbfb860110bd6828065d23f7462d5c5cac772074d1a40f033386258d970b77275b2007bcfdffb23fdff2137154ea46e4' + 'SKIP' + 'b12443a3550a23cfc4baffd62729723d287759a9638fb2f93fe5075267acaafb23ae157a76203f8407f9d3707aadf0049bc5488317bb4902de31c82f165af2bb') +validpgpkeys=('206D3B352F566F3B0E6572E997D9123DE37A484F') # Victor Toso + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson "$pkgname-$pkgver" build -D gstreamer=no -D smartcard=disabled + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 "$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/spirv-headers/PKGBUILD b/spirv-headers/PKGBUILD new file mode 100644 index 0000000..ab9eec5 --- /dev/null +++ b/spirv-headers/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=spirv-headers +pkgver=1.5.4.raytracing.fixed +pkgrel=1 +pkgdesc='SPIR-V Headers' +arch=('any') +url='https://www.khronos.org/registry/spir-v/' +license=('Expat') +makedepends=('cmake') +source=("$pkgname-$pkgver.tar.gz::https://github.com/KhronosGroup/SPIRV-Headers/archive/$pkgver.tar.gz") +sha512sums=('9d8c5ed58ebff603f0cffd1d6156ebafd3a0558e054937d8486bdc9267ad5de5dfd20d9a6f308bfbab77d391094bbc7119f1b05faf72bed41e6aa6fb35a04f5e') + +build() { + cd SPIRV-Headers-$pkgver + cmake -DCMAKE_INSTALL_PREFIX=/usr . + make +} + +package() { + cd SPIRV-Headers-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} diff --git a/spirv-tools/PKGBUILD b/spirv-tools/PKGBUILD new file mode 100644 index 0000000..9271bc2 --- /dev/null +++ b/spirv-tools/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=spirv-tools +pkgver=2020.6 +_hver=1.5.4.raytracing.fixed +pkgrel=2 +pkgdesc="API and commands for processing SPIR-V modules" +arch=('i686' 'x86_64') +url='https://github.com/KhronosGroup/SPIRV-Tools' +license=(Apache-2.0) +depends=(gcc-libs) +makedepends=(cmake python ninja) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/SPIRV-Tools/archive/v${pkgver}.tar.gz" + "${pkgname}-${_hver}.tar.gz::https://github.com/KhronosGroup/SPIRV-Headers/archive/${_hver}.tar.gz") +sha512sums=('b6d3667581101536e1f4d405e9c1c64e64a0aba174cc2f41d31e080f44d23bcfaed9642fd31f1d44a56c3df3e894526b643c572832cb96218b16d748b1ac6fe2' + '9d8c5ed58ebff603f0cffd1d6156ebafd3a0558e054937d8486bdc9267ad5de5dfd20d9a6f308bfbab77d391094bbc7119f1b05faf72bed41e6aa6fb35a04f5e') + +build() { + cd SPIRV-Tools-$pkgver + + rm -rf build && mkdir build && cd build + cmake .. \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=Release \ + -DSPIRV_WERROR=Off \ + -DBUILD_SHARED_LIBS=ON \ + -DSPIRV-Headers_SOURCE_DIR=$srcdir/SPIRV-Headers-$_hver + ninja +} + +package() { + cd SPIRV-Tools-$pkgver/build + + DESTDIR=$pkgdir ninja install + + install -Dm644 ../LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/sqlitebrowser/PKGBUILD b/sqlitebrowser/PKGBUILD new file mode 100644 index 0000000..a24ac96 --- /dev/null +++ b/sqlitebrowser/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=sqlitebrowser +pkgver=3.12.1 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="SQLite Database browser is a light GUI editor for SQLite databases, built on top of Qt" +url='https://sqlitebrowser.org/' +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('qt-base' 'hicolor-icon-theme' 'desktop-file-utils' 'qscintilla') +makedepends=('quilt' 'cmake' 'ninja' 'qt-tools') +source=("https://deb.debian.org/debian/pool/main/s/sqlitebrowser/sqlitebrowser_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/s/sqlitebrowser/sqlitebrowser_${_debver}-${_debrel}.debian.tar.xz" + "libre.patch") +sha512sums=('f0a62958008693606d9ab04b0413fa10705c7b45fb970c218d8f1adfe8ca01895a6470f369ded6cb7a9338c27385838b8d57c89b5855b4050ce9bec0d69626d1' + 'e55a0b6cbe888ae755477b63ece8359a98d3b2f0442b9fa78d2f9c61b979673638e542c570fd4e4e65a80b50ae29131eaa5913eefa79fc9be4023b8d7d5d4da7' + 'c47ade301121be51f496a67236868a30647f30859baa61f0fba2c97c7be26416a12158bcfc20cac9cdf002bdcc1f630bd06f28cfc8265a61915f149671322bcd') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # additional patches + patch -Np1 -i ${srcdir}/libre.patch +} + +build() { + cd ${pkgname}-${pkgver} + cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DENABLE_TESTING=OFF \ + -Wno-dev \ + -G Ninja + ninja -C build +} + +package() { + cd ${pkgname}-${pkgver} + DESTDIR="${pkgdir}" ninja -C build install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/sqlitebrowser/libre.patch b/sqlitebrowser/libre.patch new file mode 100644 index 0000000..0e322e3 --- /dev/null +++ b/sqlitebrowser/libre.patch @@ -0,0 +1,1377 @@ +--- a/CMakeLists.txt 2022-08-14 21:30:30.000000000 +0200 ++++ b/CMakeLists.txt 2022-08-14 21:41:32.823917728 +0200 +@@ -152,12 +152,8 @@ + src/FileDialog.h + src/ColumnDisplayFormatDialog.h + src/FilterLineEdit.h +- src/RemoteDatabase.h + src/ForeignKeyEditorDelegate.h + src/PlotDock.h +- src/RemoteDock.h +- src/RemoteModel.h +- src/RemotePushDialog.h + src/FindReplaceDialog.h + src/ExtendedScintilla.h + src/FileExtensionManager.h +@@ -170,9 +166,6 @@ + src/ProxyDialog.h + src/SelectItemsPopup.h + src/TableBrowser.h +- src/RemoteLocalFilesModel.h +- src/RemoteCommitsModel.h +- src/RemoteNetwork.h + ) + + set(SQLB_SRC +@@ -208,12 +201,8 @@ + src/FileDialog.cpp + src/ColumnDisplayFormatDialog.cpp + src/FilterLineEdit.cpp +- src/RemoteDatabase.cpp + src/ForeignKeyEditorDelegate.cpp + src/PlotDock.cpp +- src/RemoteDock.cpp +- src/RemoteModel.cpp +- src/RemotePushDialog.cpp + src/FindReplaceDialog.cpp + src/ExtendedScintilla.cpp + src/FileExtensionManager.cpp +@@ -231,9 +220,6 @@ + src/sql/parser/ParserDriver.cpp + src/sql/parser/sqlite3_lexer.cpp + src/sql/parser/sqlite3_parser.cpp +- src/RemoteLocalFilesModel.cpp +- src/RemoteCommitsModel.cpp +- src/RemoteNetwork.cpp + ) + + set(SQLB_FORMS +@@ -252,8 +238,6 @@ + src/ExportSqlDialog.ui + src/ColumnDisplayFormatDialog.ui + src/PlotDock.ui +- src/RemoteDock.ui +- src/RemotePushDialog.ui + src/FindReplaceDialog.ui + src/FileExtensionManager.ui + src/CondFormatManager.ui +--- a/src/MainWindow.cpp 2020-10-17 05:19:03.000000000 +0200 ++++ b/src/MainWindow.cpp 2022-08-14 21:52:00.006584753 +0200 +@@ -21,7 +21,6 @@ + #include "SqlUiLexer.h" + #include "FileDialog.h" + #include "FilterTableHeader.h" +-#include "RemoteDock.h" + #include "FindReplaceDialog.h" + #include "RunSql.h" + #include "ExtendedTableWidget.h" +@@ -94,7 +93,6 @@ + db(), + editDock(new EditDialog(this)), + plotDock(new PlotDock(this)), +- remoteDock(new RemoteDock(this)), + findReplaceDialog(new FindReplaceDialog(this)), + execute_sql_worker(nullptr), + isProjectModified(false) +@@ -116,7 +114,6 @@ + // Load window settings + tabifyDockWidget(ui->dockLog, ui->dockPlot); + tabifyDockWidget(ui->dockLog, ui->dockSchema); +- tabifyDockWidget(ui->dockLog, ui->dockRemote); + + #ifdef Q_OS_MACX + // Add OpenGL Context for macOS +@@ -125,26 +122,6 @@ + ogl->setHidden(true); + #endif + +- // Automatic update check +-#ifdef CHECKNEWVERSION +- connect(&RemoteNetwork::get(), &RemoteNetwork::networkReady, [this]() { +- // Check for a new version if automatic update check aren't disabled in the settings dialog +- if(Settings::getValue("checkversion", "enabled").toBool()) +- { +- RemoteNetwork::get().fetch(QUrl("https://download.sqlitebrowser.org/currentrelease"), RemoteNetwork::RequestTypeCustom, +- QString(), [this](const QByteArray& reply) { +- QList info = reply.split('\n'); +- if(info.size() >= 2) +- { +- QString version = info.at(0).trimmed(); +- QString url = info.at(1).trimmed(); +- checkNewVersion(version, url); +- } +- }); +- } +- }); +-#endif +- + // Connect SQL logging and database state setting to main window + connect(&db, &DBBrowserDB::dbChanged, this, &MainWindow::dbState, Qt::QueuedConnection); + connect(&db, &DBBrowserDB::sqlExecuted, this, &MainWindow::logSql, Qt::QueuedConnection); +@@ -195,7 +172,6 @@ + // Create docks + ui->dockEdit->setWidget(editDock); + ui->dockPlot->setWidget(plotDock); +- ui->dockRemote->setWidget(remoteDock); + + // Set up edit dock + editDock->setReadOnly(true); +@@ -291,10 +267,6 @@ + ui->viewMenu->actions().at(3)->setShortcut(QKeySequence(tr("Ctrl+E"))); + ui->viewMenu->actions().at(3)->setIcon(QIcon(":/icons/log_dock")); + +- // Add menu item for plot dock +- ui->viewMenu->insertAction(ui->viewDBToolbarAction, ui->dockRemote->toggleViewAction()); +- ui->viewMenu->actions().at(4)->setIcon(QIcon(":/icons/log_dock")); +- + // Set checked state if toolbar is visible + ui->viewDBToolbarAction->setChecked(!ui->toolbarDB->isHidden()); + ui->viewExtraDBToolbarAction->setChecked(!ui->toolbarExtraDB->isHidden()); +@@ -345,7 +317,6 @@ + ui->dockPlot->hide(); + ui->dockSchema->hide(); + ui->dockEdit->hide(); +- ui->dockRemote->hide(); + }); + QAction* atBottomLayoutAction = layoutMenu->addAction(tr("Dock Windows at Bottom")); + connect(atBottomLayoutAction, &QAction::triggered, [=]() { +@@ -432,7 +403,6 @@ + connect(editDock, &EditDialog::requestUrlOrFileOpen, this, &MainWindow::openUrlOrFile); + connect(ui->dbTreeWidget->selectionModel(), &QItemSelectionModel::currentChanged, this, &MainWindow::changeTreeSelection); + connect(ui->dockEdit, &QDockWidget::visibilityChanged, this, &MainWindow::toggleEditDock); +- connect(remoteDock, SIGNAL(openFile(QString)), this, SLOT(fileOpen(QString))); + connect(ui->actionDropQualifiedCheck, &QAction::toggled, dbStructureModel, &DbStructureModel::setDropQualifiedNames); + connect(ui->actionEnquoteNamesCheck, &QAction::toggled, dbStructureModel, &DbStructureModel::setDropEnquotedNames); + connect(&db, &DBBrowserDB::databaseInUseChanged, this, &MainWindow::updateDatabaseBusyStatus); +@@ -502,7 +472,6 @@ + ui->dockLog->setWindowTitle(ui->dockLog->windowTitle().remove('&')); + ui->dockPlot->setWindowTitle(ui->dockPlot->windowTitle().remove('&')); + ui->dockSchema->setWindowTitle(ui->dockSchema->windowTitle().remove('&')); +- ui->dockRemote->setWindowTitle(ui->dockRemote->windowTitle().remove('&')); + } + + bool MainWindow::fileOpen(const QString& fileName, bool openFromProject, bool readOnly) +@@ -563,9 +532,6 @@ + else if(ui->mainTab->currentWidget() == ui->pragmas) + loadPragmas(); + +- // Update remote dock +- remoteDock->fileOpened(wFile); +- + retval = true; + } else { + QMessageBox::warning(this, qApp->applicationName(), tr("Could not open database file.\nReason: %1").arg(db.lastError())); +@@ -608,7 +574,6 @@ + statusEncodingLabel->setText(db.getPragma("encoding")); + statusEncryptionLabel->setVisible(false); + statusReadOnlyLabel->setVisible(false); +- remoteDock->fileOpened(":memory:"); + populateTable(); + if(ui->tabSqlAreas->count() == 0) + openSqlTab(true); +@@ -717,9 +682,6 @@ + for(int i=0; i < ui->tabSqlAreas->count(); i++) + qobject_cast(ui->tabSqlAreas->widget(i))->getEditor()->reloadKeywords(); + +- // Clear remote dock +- remoteDock->fileOpened(QString()); +- + return true; + } + +@@ -1777,8 +1739,6 @@ + + if(!enable) + ui->actionSqlResultsSave->setEnabled(false); +- +- remoteDock->enableButtons(); + } + + void MainWindow::resizeEvent(QResizeEvent*) +@@ -2183,15 +2143,6 @@ + populateStructure(); + populateTable(); + +- // Hide or show the remote dock as needed +- bool showRemoteActions = Settings::getValue("remote", "active").toBool(); +- ui->viewMenu->actions().at(4)->setVisible(showRemoteActions); +- if(!showRemoteActions) +- ui->dockRemote->setHidden(true); +- +- // Reload remote dock settings +- remoteDock->reloadSettings(); +- + sqlb::setIdentifierQuoting(static_cast(Settings::getValue("editor", "identifier_quotes").toInt())); + + ui->tabSqlAreas->setTabsClosable(Settings::getValue("editor", "close_button_on_tabs").toBool()); +@@ -3469,5 +3420,4 @@ + addDockWidget(area, ui->dockLog); + tabifyDockWidget(ui->dockLog, ui->dockPlot); + tabifyDockWidget(ui->dockLog, ui->dockSchema); +- tabifyDockWidget(ui->dockLog, ui->dockRemote); + } +--- a/src/PreferencesDialog.ui 2020-10-17 05:19:03.000000000 +0200 ++++ b/src/PreferencesDialog.ui 2022-08-14 22:55:21.783368128 +0200 +@@ -122,26 +122,29 @@ + + + +- +- ++ ++ + +- Toolbar style ++ Application style + + +- toolbarStyleComboMain ++ toolbarStyleComboStructure + + + +- +- ++ ++ + + + 0 + 0 + + ++ ++ When this value is changed, all the other color preferences are also set to matching colors. ++ + +- 2 ++ 0 + + + QComboBox::AdjustToContents +@@ -157,33 +160,57 @@ + + + +- Only display the icon +- +- +- +- +- Only display the text +- +- +- +- +- The text appears beside the icon +- +- +- +- +- The text appears under the icon ++ Follow the desktop style + + + + +- Follow the style ++ Dark style + + + + +- +- ++ ++ ++ ++ This sets the font size for all UI elements which do not have their own font size option. ++ ++ ++ Font size ++ ++ ++ spinGeneralFontSize ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Toolbar style ++ ++ ++ toolbarStyleComboMain ++ ++ ++ ++ ++ ++ ++ Main Window ++ ++ ++ 20 ++ ++ ++ toolbarStyleComboMain ++ ++ ++ ++ ++ + + + 0 +@@ -232,8 +259,21 @@ + + + +- +- ++ ++ ++ ++ Database Structure ++ ++ ++ 20 ++ ++ ++ toolbarStyleComboStructure ++ ++ ++ ++ ++ + + + 0 +@@ -241,7 +281,7 @@ + + + +- 0 ++ 2 + + + QComboBox::AdjustToContents +@@ -282,8 +322,21 @@ + + + +- +- ++ ++ ++ ++ Browse Data ++ ++ ++ 20 ++ ++ ++ toolbarStyleComboBrowse ++ ++ ++ ++ ++ + + + 0 +@@ -332,99 +385,6 @@ + + + +- +- +- +- Show remote options +- +- +- checkUseRemotes +- +- +- +- +- +- +- enabled +- +- +- true +- +- +- +- +- +- +- Automatic &updates +- +- +- checkUpdates +- +- +- +- +- +- +- enabled +- +- +- +- +- +- +- DB file extensions +- +- +- buttonManageFileExtension +- +- +- +- +- +- +- Manage +- +- +- +- +- +- +- Main Window +- +- +- 20 +- +- +- toolbarStyleComboMain +- +- +- +- +- +- +- Database Structure +- +- +- 20 +- +- +- toolbarStyleComboStructure +- +- +- +- +- +- +- Browse Data +- +- +- 20 +- +- +- toolbarStyleComboBrowse +- +- +- + + + +@@ -438,8 +398,8 @@ + + + +- +- ++ ++ + + + 0 +@@ -501,17 +461,14 @@ + + + +- +- ++ ++ + + + 0 + 0 + + +- +- When this value is changed, all the other color preferences are also set to matching colors. +- + + 0 + +@@ -529,42 +486,48 @@ + + + +- Follow the desktop style ++ Only display the icon + + + + +- Dark style ++ Only display the text ++ ++ ++ ++ ++ The text appears beside the icon ++ ++ ++ ++ ++ The text appears under the icon ++ ++ ++ ++ ++ Follow the style + + + + +- +- ++ ++ + +- Application style ++ DB file extensions + + +- toolbarStyleComboStructure ++ buttonManageFileExtension + + + +- +- +- +- This sets the font size for all UI elements which do not have their own font size option. +- ++ ++ + +- Font size +- +- +- spinGeneralFontSize ++ Manage + + + +- +- +- + + + +@@ -1660,236 +1623,6 @@ + + + +- +- +- Remote +- +- +- +- +- +- 0 +- +- +- +- Your certificates +- +- +- +- +- +- +- 550 +- 0 +- +- +- +- QAbstractItemView::ExtendedSelection +- +- +- QAbstractItemView::SelectRows +- +- +- QAbstractItemView::ScrollPerPixel +- +- +- false +- +- +- +- File +- +- +- +- +- Subject CN +- +- +- Subject Common Name +- +- +- +- +- Issuer CN +- +- +- Issuer Common Name +- +- +- +- +- Valid from +- +- +- +- +- Valid to +- +- +- +- +- Serial number +- +- +- +- +- +- +- +- +- +- +- :/icons/trigger_create:/icons/trigger_create +- +- +- +- +- +- +- ... +- +- +- +- :/icons/trigger_delete:/icons/trigger_delete +- +- +- +- +- +- +- Qt::Vertical +- +- +- +- 20 +- 40 +- +- +- +- +- +- +- +- +- +- +- CA certificates +- +- +- +- +- +- +- 550 +- 0 +- +- +- +- QAbstractItemView::SingleSelection +- +- +- QAbstractItemView::SelectRows +- +- +- QAbstractItemView::ScrollPerPixel +- +- +- false +- +- +- +- Subject CN +- +- +- Common Name +- +- +- +- +- Subject O +- +- +- Organization +- +- +- +- +- Valid from +- +- +- +- +- Valid to +- +- +- +- +- Serial number +- +- +- +- +- +- +- +- +- +- +- +- +- +- Clone databases into +- +- +- +- +- +- +- +- +- false +- +- +- +- 0 +- 0 +- +- +- +- +- 316 +- 0 +- +- +- +- +- +- +- +- ... +- +- +- +- +- +- +- +- +- Proxy +- +- +- +- +- +- +- Configure +- +- +- +- +- +- +- + + + +@@ -1925,8 +1658,6 @@ + toolbarStyleComboBrowse + toolbarStyleComboSql + toolbarStyleComboEditCell +- checkUseRemotes +- checkUpdates + buttonManageFileExtension + encodingComboBox + foreignKeysCheckBox +@@ -1967,20 +1698,28 @@ + buttonRemoveExtension + checkRegexDisabled + checkAllowLoadExtension +- tabCertificates +- tableClientCerts +- buttonClientCertAdd +- buttonClientCertRemove +- buttonProxy +- editRemoteCloneDirectory +- buttonRemoteBrowseCloneDirectory +- tableCaCerts + + + + + + ++ buttonBox ++ clicked(QAbstractButton*) ++ PreferencesDialog ++ on_buttonBox_clicked(QAbstractButton*) ++ ++ ++ 394 ++ 584 ++ ++ ++ 385 ++ 306 ++ ++ ++ ++ + buttonAddExtension + clicked() + PreferencesDialog +@@ -1997,18 +1736,18 @@ + + + +- buttonRemoveExtension +- clicked() +- PreferencesDialog +- removeExtension() ++ checkAutoCompletion ++ toggled(bool) ++ checkCompleteUpper ++ setEnabled(bool) + + +- 732 +- 125 ++ 733 ++ 444 + + +- 245 +- 137 ++ 733 ++ 474 + + + +@@ -2029,130 +1768,34 @@ + + + +- setLocationButton ++ buttonRemoveExtension + clicked() + PreferencesDialog +- chooseLocation() ++ removeExtension() + + + 732 +- 106 +- +- +- 294 +- 202 +- +- +- +- +- checkUseRemotes +- toggled(bool) +- PreferencesDialog +- activateRemoteTab(bool) +- +- +- 301 +- 503 +- +- +- 382 +- 572 +- +- +- +- +- buttonClientCertAdd +- clicked() +- PreferencesDialog +- addClientCertificate() +- +- +- 722 +- 110 +- +- +- 596 +- 243 +- +- +- +- +- buttonClientCertRemove +- clicked() +- PreferencesDialog +- removeClientCertificate() +- +- +- 722 +- 139 ++ 125 + + +- 597 +- 295 ++ 245 ++ 137 + + + + +- buttonRemoteBrowseCloneDirectory ++ setLocationButton + clicked() + PreferencesDialog +- chooseRemoteCloneDirectory() ++ chooseLocation() + + + 732 +- 538 +- +- +- 595 +- 41 +- +- +- +- +- checkAutoCompletion +- toggled(bool) +- checkCompleteUpper +- setEnabled(bool) +- +- +- 733 +- 444 +- +- +- 733 +- 474 +- +- +- +- +- buttonBox +- clicked(QAbstractButton*) +- PreferencesDialog +- on_buttonBox_clicked(QAbstractButton*) +- +- +- 394 +- 584 +- +- +- 385 +- 306 +- +- +- +- +- buttonProxy +- clicked() +- PreferencesDialog +- configureProxy() +- +- +- 225 +- 506 ++ 106 + + +- 385 +- 306 ++ 294 ++ 202 + + + +--- a/src/PreferencesDialog.cpp 2020-10-17 05:19:03.000000000 +0200 ++++ b/src/PreferencesDialog.cpp 2022-08-14 22:56:21.444573088 +0200 +@@ -4,7 +4,6 @@ + #include "Settings.h" + #include "Application.h" + #include "MainWindow.h" +-#include "RemoteNetwork.h" + #include "FileExtensionManager.h" + #include "ProxyDialog.h" + +@@ -23,7 +22,6 @@ + { + ui->setupUi(this); + ui->treeSyntaxHighlighting->setColumnHidden(0, true); +- ui->tableClientCerts->setColumnHidden(0, true); + + ui->fr_bin_bg->installEventFilter(this); + ui->fr_bin_fg->installEventFilter(this); +@@ -35,11 +33,6 @@ + connect(ui->comboDataBrowserFont, static_cast(&QFontComboBox::currentIndexChanged), this, &PreferencesDialog::updatePreviewFont); + connect(ui->spinDataBrowserFontSize, static_cast(&QSpinBox::valueChanged), this, &PreferencesDialog::updatePreviewFont); + +-#ifndef CHECKNEWVERSION +- ui->labelUpdates->setVisible(false); +- ui->checkUpdates->setVisible(false); +-#endif +- + loadSettings(); + + connect(ui->appStyleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(adjustColorsToStyle(int))); +@@ -76,7 +69,6 @@ + ui->encodingComboBox->setCurrentIndex(ui->encodingComboBox->findText(Settings::getValue("db", "defaultencoding").toString(), Qt::MatchFixedString)); + ui->comboDefaultLocation->setCurrentIndex(Settings::getValue("db", "savedefaultlocation").toInt()); + ui->locationEdit->setText(QDir::toNativeSeparators(Settings::getValue("db", "defaultlocation").toString())); +- ui->checkUpdates->setChecked(Settings::getValue("checkversion", "enabled").toBool()); + + ui->checkHideSchemaLinebreaks->setChecked(Settings::getValue("db", "hideschemalinebreaks").toBool()); + ui->foreignKeysCheckBox->setChecked(Settings::getValue("db", "foreignkeys").toBool()); +@@ -130,47 +122,6 @@ + } + } + +- // Remote settings +- ui->checkUseRemotes->setChecked(Settings::getValue("remote", "active").toBool()); +- { +- auto ca_certs = RemoteNetwork::get().caCertificates(); +- ui->tableCaCerts->setRowCount(ca_certs.size()); +- for(int i=0;isetFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableCaCerts->setItem(i, 0, cert_cn); +- +- QTableWidgetItem* cert_o = new QTableWidgetItem(cert.subjectInfo(QSslCertificate::Organization).at(0)); +- cert_o->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableCaCerts->setItem(i, 1, cert_o); +- +- QTableWidgetItem* cert_from = new QTableWidgetItem(cert.effectiveDate().toString()); +- cert_from->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableCaCerts->setItem(i, 2, cert_from); +- +- QTableWidgetItem* cert_to = new QTableWidgetItem(cert.expiryDate().toString()); +- cert_to->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableCaCerts->setItem(i, 3, cert_to); +- +- QTableWidgetItem* cert_serialno = new QTableWidgetItem(QString(cert.serialNumber())); +- cert_serialno->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableCaCerts->setItem(i, 4, cert_serialno); +- } +- } +- { +- QStringList client_certs = Settings::getValue("remote", "client_certificates").toStringList(); +- for(const QString& file : client_certs) +- { +- auto certs = QSslCertificate::fromPath(file); +- for(const QSslCertificate& cert : certs) +- addClientCertToTable(file, cert); +- } +- } +- ui->editRemoteCloneDirectory->setText(QDir::toNativeSeparators(Settings::getValue("remote", "clonedirectory").toString())); +- + // Gracefully handle the preferred Editor font not being available + matchingFont = ui->comboEditorFont->findText(Settings::getValue("editor", "font").toString(), Qt::MatchExactly); + if (matchingFont == -1) +@@ -216,8 +167,6 @@ + Settings::setValue("db", "defaultfieldtype", ui->defaultFieldTypeComboBox->currentIndex()); + Settings::setValue("db", "fontsize", ui->spinStructureFontSize->value()); + +- Settings::setValue("checkversion", "enabled", ui->checkUpdates->isChecked()); +- + Settings::setValue("databrowser", "font", ui->comboDataBrowserFont->currentText()); + Settings::setValue("databrowser", "fontsize", ui->spinDataBrowserFontSize->value()); + Settings::setValue("databrowser", "image_preview", ui->checkShowImagesInline->isChecked()); +@@ -261,61 +210,6 @@ + Settings::setValue("extensions", "disableregex", ui->checkRegexDisabled->isChecked()); + Settings::setValue("extensions", "enable_load_extension", ui->checkAllowLoadExtension->isChecked()); + +- // Save remote settings +- Settings::setValue("remote", "active", ui->checkUseRemotes->isChecked()); +- QStringList old_client_certs = Settings::getValue("remote", "client_certificates").toStringList(); +- QStringList new_client_certs; +- for(int i=0;itableClientCerts->rowCount();i++) +- { +- // Loop through the new list of client certs +- +- // If this certificate was already imported, remove it from the list of old certificates. All remaining certificates on this +- // list will be deleted later on. +- QString path = ui->tableClientCerts->item(i, 0)->text(); +- if(old_client_certs.contains(path)) +- { +- // This is a cert that is already imported +- old_client_certs.removeAll(path); +- new_client_certs.push_back(path); +- } else { +- // This is a new certificate. Copy file to a safe place. +- +- // Generate unique destination file name +- QString copy_to = QStandardPaths::writableLocation( +-#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) +- QStandardPaths::AppDataLocation +-#else +- QStandardPaths::GenericDataLocation +-#endif +- ).append("/").append(QFileInfo(path).fileName()); +- int suffix = 0; +- do +- { +- suffix++; +- } while(QFile::exists(copy_to + QString::number(suffix))); +- +- // Copy file +- copy_to.append(QString::number(suffix)); +- QDir().mkpath(QStandardPaths::writableLocation( +-#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) +- QStandardPaths::AppDataLocation +-#else +- QStandardPaths::GenericDataLocation +-#endif +- )); +- QFile::copy(path, copy_to); +- +- new_client_certs.push_back(copy_to); +- } +- } +- for(const QString& file : old_client_certs) +- { +- // Now only the deleted client certs are still in the old list. Delete the cert files associated with them. +- QFile::remove(file); +- } +- Settings::setValue("remote", "client_certificates", new_client_certs); +- Settings::setValue("remote", "clonedirectory", ui->editRemoteCloneDirectory->text()); +- + // Warn about restarting to change language + QVariant newLanguage = ui->languageComboBox->itemData(ui->languageComboBox->currentIndex()); + if (newLanguage != Settings::getValue("General", "language")) +@@ -552,96 +446,6 @@ + } + } + +-void PreferencesDialog::activateRemoteTab(bool active) +-{ +- ui->tabWidget->setTabEnabled(ui->tabWidget->indexOf(ui->tabRemote), active); +-} +- +-void PreferencesDialog::addClientCertificate() +-{ +- // Get certificate file to import and abort here if no file gets selected +- // NOTE: We assume here that this file contains both, certificate and private key! +- QString path = FileDialog::getOpenFileName(OpenCertificateFile, this, tr("Import certificate file"), "*.pem"); +- if(path.isEmpty()) +- return; +- +- // Open file and check if any certificates were imported +- auto certs = QSslCertificate::fromPath(path); +- if(certs.size() == 0) +- { +- QMessageBox::warning(this, qApp->applicationName(), tr("No certificates found in this file.")); +- return; +- } +- +- // Add certificates to list +- for(int i=0;itableClientCerts->currentRow(); +- if(row == -1) +- return; +- +- // Double check +- if(QMessageBox::question(this, qApp->applicationName(), tr("Are you sure you want do remove this certificate? All certificate " +- "data will be deleted from the application settings!"), +- QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) +- { +- ui->tableClientCerts->removeRow(row); +- } +-} +- +-void PreferencesDialog::addClientCertToTable(const QString& path, const QSslCertificate& cert) +-{ +- // Do nothing if the file doesn't even exist +- if(!QFile::exists(path)) +- return; +- +- // Add new row +- int row = ui->tableClientCerts->rowCount(); +- ui->tableClientCerts->setRowCount(row + 1); +- +- // Fill row with data +- QTableWidgetItem* cert_file = new QTableWidgetItem(path); +- cert_file->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableClientCerts->setItem(row, 0, cert_file); +- +- QTableWidgetItem* cert_subject_cn = new QTableWidgetItem(cert.subjectInfo(QSslCertificate::CommonName).at(0)); +- cert_subject_cn->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableClientCerts->setItem(row, 1, cert_subject_cn); +- +- QTableWidgetItem* cert_issuer_cn = new QTableWidgetItem(cert.issuerInfo(QSslCertificate::CommonName).at(0)); +- cert_issuer_cn->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableClientCerts->setItem(row, 2, cert_issuer_cn); +- +- QTableWidgetItem* cert_from = new QTableWidgetItem(cert.effectiveDate().toString()); +- cert_from->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableClientCerts->setItem(row, 3, cert_from); +- +- QTableWidgetItem* cert_to = new QTableWidgetItem(cert.expiryDate().toString()); +- cert_to->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableClientCerts->setItem(row, 4, cert_to); +- +- QTableWidgetItem* cert_serialno = new QTableWidgetItem(QString(cert.serialNumber())); +- cert_serialno->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); +- ui->tableClientCerts->setItem(row, 5, cert_serialno); +-} +- +-void PreferencesDialog::chooseRemoteCloneDirectory() +-{ +- QString s = FileDialog::getExistingDirectory( +- NoSpecificType, +- this, +- tr("Choose a directory"), +- QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); +- +- if(!s.isEmpty() && QDir().mkpath(s)) +- ui->editRemoteCloneDirectory->setText(s); +-} +- + void PreferencesDialog::updatePreviewFont() + { + if (ui->spinDataBrowserFontSize->value() != 0) { +--- a/src/PreferencesDialog.h 2020-10-17 05:19:03.000000000 +0200 ++++ b/src/PreferencesDialog.h 2022-08-14 22:21:28.542303353 +0200 +@@ -25,8 +25,7 @@ + TabDatabase, + TabDataBrowser, + TabSql, +- TabExtensions, +- TabRemote ++ TabExtensions + }; + + explicit PreferencesDialog(QWidget* parent = nullptr, Tabs tab = TabGeneral); +@@ -40,10 +39,6 @@ + void showColourDialog(QTreeWidgetItem* item, int column); + void addExtension(); + void removeExtension(); +- void activateRemoteTab(bool active); +- void addClientCertificate(); +- void removeClientCertificate(); +- void chooseRemoteCloneDirectory(); + void updatePreviewFont(); + void adjustColorsToStyle(int style); + void configureProxy(); +@@ -62,7 +57,6 @@ + void loadColorSetting(QFrame *frame, const std::string& name); + void setColorSetting(QFrame* frame, const QColor &color); + void saveColorSetting(QFrame* frame, const std::string& name); +- void addClientCertToTable(const QString& path, const QSslCertificate& cert); + + protected: + bool eventFilter(QObject *obj, QEvent *event) override; +--- a/src/Application.cpp 2020-10-17 05:19:03.000000000 +0200 ++++ b/src/Application.cpp 2022-08-14 22:29:25.051927278 +0200 +@@ -10,7 +10,6 @@ + + #include "Application.h" + #include "MainWindow.h" +-#include "RemoteNetwork.h" + #include "Settings.h" + #include "version.h" + #include "sqlitedb.h" +@@ -247,9 +246,6 @@ + + void Application::reloadSettings() + { +- // Network settings +- RemoteNetwork::get().reloadSettings(); +- + // Font settings + QFont f = font(); + f.setPointSize(Settings::getValue("General", "fontsize").toInt()); +--- a/src/MainWindow.ui 2020-10-17 05:19:03.000000000 +0200 ++++ b/src/MainWindow.ui 2022-08-16 13:34:03.380363035 +0200 +@@ -174,8 +174,8 @@ + + 0 + 0 +- 692 +- 489 ++ 299 ++ 506 + + + +@@ -744,7 +744,7 @@ + 0 + 0 + 1037 +- 21 ++ 20 + + + +@@ -1065,15 +1065,6 @@ + + + +- +- +- &Remote +- +- +- 2 +- +- +- + + + Project Toolbar diff --git a/squashfs-tools/PKGBUILD b/squashfs-tools/PKGBUILD new file mode 100644 index 0000000..80cd5e4 --- /dev/null +++ b/squashfs-tools/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=squashfs-tools +pkgver=4.4 +pkgrel=2 +pkgdesc="Tools for squashfs, a highly compressed read-only filesystem for GNU/Linux-libre" +url='https://github.com/plougher/squashfs-tools' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('zlib' 'lzo' 'xz' 'lz4') +source=("$pkgname-$pkgver.tar.gz::https://github.com/plougher/squashfs-tools/archive/$pkgver.tar.gz") +sha512sums=('133ce437fb8c929933d52cff710b61dd9181f6f8be58250b0d6a59a7bb79a2b350f68f456b06a0e17c469409a71272d586802d570248273ddcd5dad088c00308') + +prepare() { + cd $pkgname-$pkgver + sed -i '1,1i#include ' $pkgname/mksquashfs.c $pkgname/unsquashfs.c +} + +build() { + cd $pkgname-$pkgver/$pkgname + make \ + GZIP_SUPPORT=1 \ + XZ_SUPPORT=1 \ + LZO_SUPPORT=1 \ + LZMA_XZ_SUPPORT=1 \ + LZ4_SUPPORT=1 \ + XATTR_SUPPORT=1 +} + +package() { + cd $pkgname-$pkgver/$pkgname + make install INSTALL_DIR=$pkgdir/usr/bin + install -Dm644 ../COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/squid/PKGBUILD b/squid/PKGBUILD new file mode 100644 index 0000000..5d020c3 --- /dev/null +++ b/squid/PKGBUILD @@ -0,0 +1,116 @@ +# Maintainer: Jesus E. + +pkgname=squid +pkgver=4.13 +_debver=$pkgver +_debrel=10 +pkgrel=3 +pkgdesc="Full-featured Web proxy cache server" +arch=('i686' 'x86_64') +url='http://www.squid-cache.org' +depends=('libressl' 'perl' 'libltdl' 'libcap' 'nettle' 'gnutls' 'libnsl' 'libxml2') +makedepends=('krb5' 'cppunit' 'quilt') +license=('GPL-2') +options=('emptydirs') +backup=('etc/squid/squid.conf' + 'etc/squid/cachemgr.conf' + 'etc/squid/errorpage.css' + 'etc/squid/mime.conf') +install=$pkgname.install +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/s/squid/squid_${pkgver}.orig.tar.xz" + "https://security.debian.org/debian-security/pool/updates/main/s/squid/squid_${_debver}-${_debrel}+deb11u3.debian.tar.xz" + "$pkgname.logrotate" + "$pkgname.initd" + "$pkgname.confd" + "$pkgname.run") +sha512sums=('06807f82ed01e12afe2dd843aa0a94f69c351765b1889c4c5c3da1cf2ecb06ac3a4be6a24a62f04397299c8fc0df5397f76f64df5422ff78b37a9382d5fdf7fc' + '79c25d8ef68e45c3ed263088cd2d6e68f484f576f4f185e4f7609051cdcf5987ee7c5acde5e5d11a13b023deccbd0a2d932962d389181ad111ea920910d6c8b6' + '89a703fa4f21b6c7c26e64a46fd52407e20f00c34146ade0bea0c4b63d050117c0f8e218f2256a1fbf6abb84f4ec9b0472c9a4092ff6e78f07c4f5a25d0892a5' + '6c9948ee452ea80f466da49e313c7ab5250f14c2c9248d0c27e1e176c1d89540dec23e91933057bd17484114c20ea82828ed7e2fea758ea718a67eb99db8a4ef' + '018418d0ef66c9ab5d67a8e68ed6f95c7a04ad2a8a073747f39d9db8e83cf72c685d388a727363788042e45d440a69651ec928ccdeed835915ebc8c676b43519' + '3c27f048f85e506b0d206be4fed035bc9e0d054b4ad5e09fbe7657478aea9ff232434194df324ca563f23672a29afd277766655c4074b62ba00018bc43233a14') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-Default-configuration-file-for-debian.patch || true + rm -v debian/patches/0002-Change-default-file-locations-for-debian.patch || true + rm -v debian/patches/0003-installed-binary-for-debian-ci.patch || true + rm -v debian/patches/0005-Use-RuntimeDirectory-to-create-run-squid.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --datadir=/usr/share/squid \ + --sysconfdir=/etc/squid \ + --libexecdir=/usr/libexec/squid \ + --localstatedir=/var \ + --with-logdir=/var/log/squid \ + --with-pidfile=/run/squid.pid \ + --enable-auth \ + --enable-auth-basic \ + --enable-auth-ntlm \ + --enable-auth-digest \ + --enable-auth-negotiate \ + --enable-removal-policies="lru,heap" \ + --enable-storeio="aufs,ufs,diskd,rock" \ + --enable-delay-pools \ + --enable-arp-acl \ + --with-openssl \ + --enable-snmp \ + --enable-linux-netfilter \ + --enable-ident-lookups \ + --enable-useragent-log \ + --enable-cache-digests \ + --enable-referer-log \ + --enable-arp-acl \ + --enable-htcp \ + --enable-carp \ + --enable-epoll \ + --with-large-files \ + --enable-arp-acl \ + --with-default-user=proxy \ + --enable-async-io \ + --enable-truncate \ + --enable-icap-client \ + --enable-ssl-crtd \ + --disable-arch-native \ + --disable-strict-error-checking \ + --enable-wccpv2 + make +} + +package() { + cd "$srcdir" + + make -C "$pkgname-$pkgver" DESTDIR="$pkgdir" install + + # initial data and configuration + install -Dm644 "${srcdir}/$pkgname.logrotate" "$pkgdir/etc/logrotate.d/$pkgname" + + # license + install -Dm644 "$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" + + # services + install -Dm644 "$srcdir/$pkgname.confd" "$pkgdir/etc/conf.d/$pkgname" + install -Dm755 "$srcdir/$pkgname.initd" "$pkgdir/etc/init.d/$pkgname" + install -Dm755 "$srcdir/$pkgname.run" "$pkgdir/etc/sv/$pkgname/run" + + # cleanup + rm -rf "$pkgdir/run" "$pkgdir/var/run" +} diff --git a/squid/squid.confd b/squid/squid.confd new file mode 100644 index 0000000..a29d33d --- /dev/null +++ b/squid/squid.confd @@ -0,0 +1,12 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# Config file for /etc/init.d/squid + +SQUID_OPTS="-YC" + +# Kerberos keytab file to use. This is required if you enable kerberos authentication. +SQUID_KEYTAB="" + +# Use max_filedescriptors setting in squid.conf to determine the maximum number +# of filedescriptors squid can open. diff --git a/squid/squid.initd b/squid/squid.initd new file mode 100644 index 0000000..36d7252 --- /dev/null +++ b/squid/squid.initd @@ -0,0 +1,118 @@ +#!/sbin/openrc-run +# Copyright 1999-2014 Gentoo Foundation +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload rotate" + +depend() { + use dns net +} + +checkconfig() { + if [ ! -f /etc/squid/${SVCNAME}.conf ]; then + eerror "You need to create /etc/squid/${SVCNAME}.conf first." + eerror "An example can be found in /etc/squid/squid.conf.default" + return 1 + fi + + local PIDFILE=$(awk '/^[ \t]*pid_filename[ \t]+/ { print $2 }' < /etc/squid/${SVCNAME}.conf) + [ -z ${PIDFILE} ] && PIDFILE=/run/squid.pid + if [ /run/${SVCNAME}.pid != ${PIDFILE} ]; then + eerror "/etc/squid/${SVCNAME}.conf must set pid_filename to" + eerror " /run/${SVCNAME}.pid" + eerror "CAUTION: http_port, cache_dir and *_log parameters must be different than" + eerror " in any other instance of squid." + return 1 + fi + + # Maximum file descriptors squid can open is determined by: + # a basic default of N=1024 + # ... altered by ./configure --with-filedescriptors=N + # ... overridden on production by squid.conf max_filedescriptors (if, + # and only if, setrlimit() RLIMIT_NOFILE is able to be built+used). + # Since we do not configure hard coded # of filedescriptors anymore, + # there is no need for ulimit calls in the init script. + # Use max_filedescriptors in squid.conf instead. + + local CACHE_SWAP=$(awk '/^[ \t]*cache_dir[ \t]+/ { if ( $2 == "rock" ) printf "%s/rock ", $3; else if ( $2 == "coss" ) printf "%s/stripe ", $3; else printf "%s/00 ", $3; }' < /etc/squid/${SVCNAME}.conf) + [ -z "$CACHE_SWAP" ] && CACHE_SWAP="/var/cache/squid/00" + + local x + for x in $CACHE_SWAP ; do + if [ ! -e $x ] ; then + ebegin "Initializing cache directory ${x%/*}" + local ORIG_UMASK=$(umask) + umask 027 + + if ! (mkdir -p ${x%/*} && chown proxy ${x%/*}) ; then + eend 1 + return 1 + fi + + local INIT_CACHE_RESPONSE="$(/usr/sbin/squid -z -N -f /etc/squid/${SVCNAME}.conf 2>&1)" + if [ $? != 0 ] || echo "$INIT_CACHE_RESPONSE" | grep -q "erminated abnormally" ; then + umask $ORIG_UMASK + eend 1 + echo "$INIT_CACHE_RESPONSE" + return 1 + fi + + umask $ORIG_UMASK + eend 0 + break + fi + done + + return 0 +} + +start() { + checkconfig || return 1 + checkpath -d -q -m 0750 -o proxy:proxy /run/${SVCNAME} + + ebegin "Starting ${SVCNAME}" + KRB5_KTNAME="${SQUID_KEYTAB}" /usr/sbin/squid ${SQUID_OPTS} -f /etc/squid/${SVCNAME}.conf + eend $? && sleep 1 +} + +stop() { + ebegin "Stopping ${SVCNAME}" + if /usr/sbin/squid -k shutdown -f /etc/squid/${SVCNAME}.conf ; then + # Now we have to wait until squid has _really_ stopped. + sleep 1 + if [ -f /run/${SVCNAME}.pid ] ; then + einfon "Waiting for squid to shutdown ." + cnt=0 + while [ -f /run/${SVCNAME}.pid ] ; do + cnt=$(expr $cnt + 1) + if [ $cnt -gt 60 ] ; then + # Waited 120 seconds now. Fail. + echo + eend 1 "Failed." + break + fi + sleep 2 + echo -n "." + done + echo + fi + else + eerror "Squid shutdown failed, probably service is already down." + fi + eend 0 +} + +reload() { + checkconfig || return 1 + ebegin "Reloading ${SVCNAME}" + /usr/sbin/squid -k reconfigure -f /etc/squid/${SVCNAME}.conf + eend $? +} + +rotate() { + service_started ${SVCNAME} || return 1 + ebegin "Rotating ${SVCNAME} logs" + /usr/sbin/squid -k rotate -f /etc/squid/${SVCNAME}.conf + eend $? +} diff --git a/squid/squid.install b/squid/squid.install new file mode 100644 index 0000000..52923c7 --- /dev/null +++ b/squid/squid.install @@ -0,0 +1,22 @@ +post_install() { + if ! getent group proxy &>/dev/null; then + groupadd -g 15 proxy &>/dev/null + fi + if ! getent passwd proxy &>/dev/null; then + useradd -u 15 -g proxy -d /var/empty proxy + fi + chown proxy.proxy var/{cache,log}/squid +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd proxy &>/dev/null; then + userdel proxy >/dev/null + fi + if getent group proxy &>/dev/null; then + groupdel proxy >/dev/null + fi +} diff --git a/squid/squid.logrotate b/squid/squid.logrotate new file mode 100644 index 0000000..fb3279e --- /dev/null +++ b/squid/squid.logrotate @@ -0,0 +1,11 @@ +/var/log/squid/*.log { + daily + compress + rotate 5 + missingok + nocreate + sharedscripts + postrotate + /usr/sbin/squid -k rotate + endscript +} diff --git a/squid/squid.run b/squid/squid.run new file mode 100644 index 0000000..276d4ce --- /dev/null +++ b/squid/squid.run @@ -0,0 +1,4 @@ +#!/bin/sh -e +install -o proxy -g proxy -m 0755 -d /var/run/squid +squid -N -s -z +exec chpst -U proxy:proxy squid -N -s diff --git a/sratom/PKGBUILD b/sratom/PKGBUILD new file mode 100644 index 0000000..13c973b --- /dev/null +++ b/sratom/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Jesus E. + +pkgname=sratom +pkgver=0.6.8 +_debver=0.6.8 +_debrel=1 +pkgrel=1 +pkgdesc="An LV2 Atom RDF serialisation library" +arch=('i686' 'x86_64') +url="https://drobilla.net/software/sratom/" +license=('ISC') +depends=('glibc') +makedepends=('lv2' 'serd' 'sord' 'waf' 'quilt') +source=("https://download.drobilla.net/${pkgname}-${pkgver}.tar.bz2"{,.sig} + "https://deb.debian.org/debian/pool/main/s/sratom/sratom_$_debver-$_debrel.debian.tar.xz") +sha512sums=('49ec4b230a72005ab7a7a3de0bfa630a27a16f9f811ca8e7f6da7fcf6b34526577217075d428a993f95b813dd2a82a9b6892eeb2e36b66b122ada778fbb3fb95' + 'SKIP' + '836c700526e1dc8bf217517a7fc900859c9ec7a54862f3c6f7b47afd324d669b24f3955cf437c323a4a4e3ce360799c1e4b02a10f4f6fad028f25f6acae260ef') +validpgpkeys=('907D226E7E13FA337F014A083672782A9BF368F3') # David Robillard + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + # remove local ldconfig call + sed -i '/ldconfig/d' wscript + # let wscript(s) find the custom waf scripts + mkdir -pv tools + touch __init__.py + cp -v waflib/extras/{autoship,autowaf,lv2}.py tools/ + mkdir -pv plugins/tools/ + cp -v waflib/extras/{autoship,autowaf,lv2}.py plugins/tools/ + rm -rv waflib + sed -e 's/waflib.extras/tools/g' \ + -e "s/load('autowaf'/load('autowaf', tooldir='tools'/g" \ + -e "s/load('lv2'/load('lv2', tooldir='tools'/g" \ + -i wscript +} + +build() { + cd "${pkgname}-${pkgver}" + waf configure --prefix=/usr \ + --test + waf build +} + +check() { + cd "${pkgname}-${pkgver}" + waf test +} + + +package() { + cd "${pkgname}-${pkgver}" + waf install --destdir="${pkgdir}" + # license + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" + # docs + install -t "${pkgdir}/usr/share/doc/${pkgname}" \ + -vDm 644 {NEWS,README.md} +} +# vim:set ts=2 sw=2 et: diff --git a/sscg/PKGBUILD b/sscg/PKGBUILD new file mode 100644 index 0000000..79a13eb --- /dev/null +++ b/sscg/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=sscg +pkgver=2.3.3 +pkgrel=1 +pkgdesc="Simple Signed Certificate Generator" +url="https://github.com/sgallagher/sscg" +license=('GPL-3') +arch=('i686' 'x86_64') +depends=('libressl' 'popt' 'talloc' 'ding-libs') +makedepends=('help2man' 'meson') +source=("https://github.com/sgallagher/sscg/archive/refs/tags/${pkgname}-${pkgver}.tar.gz") +sha512sums=('09f3f32f83b7aca6aa9a8f3269e7eda58218030e2cd3f23f7f6d8abdc419cbf002c8475bab8c6881803765a90ca23b6dcf629eab30709c8c79dc71d41f84f499') + +prepare() { + mv $pkgname-$pkgname-$pkgver $pkgname-$pkgver +} + +build() { + cd $pkgname-$pkgver + meson --prefix=/usr \ + --buildtype plain \ + --auto-features enabled \ + -D b_lto=true \ + -D b_pie=true \ + build + ninja -C build +} + +package() { + cd $pkgname-$pkgver + DESTDIR="${pkgdir}" meson install -C build + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/sshfs/PKGBUILD b/sshfs/PKGBUILD new file mode 100644 index 0000000..c6d754a --- /dev/null +++ b/sshfs/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=sshfs +pkgver=3.7.1 +pkgrel=1 +pkgdesc='FUSE client based on the SSH File Transfer Protocol' +arch=('i686' 'x86_64') +url='https://github.com/libfuse/sshfs' +license=('GPL-2') +depends=('fuse3' 'glib2' 'openssh') +makedepends=('meson' 'python-docutils') +source=(https://github.com/libfuse/sshfs/releases/download/$pkgname-$pkgver/$pkgname-$pkgver.tar.xz) +sha512sums=('ee91b2eacbad5891006dbac14188ddd591e242b6092c7b7d8234503d79acb52f4b7ea9a15d5eaad83597ff4b4e700580ee2271671edfa6db762d9a8c756d45fd') + +prepare() { + cd $pkgname-$pkgver + + rm -rf build + mkdir build + cd build + hyperbola-meson .. +} + +build() { + cd $pkgname-$pkgver/build + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR="$pkgdir" ninja install + + cd "${srcdir}/${pkgname}-${pkgver}" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/st/PKGBUILD b/st/PKGBUILD new file mode 100644 index 0000000..c4ab31d --- /dev/null +++ b/st/PKGBUILD @@ -0,0 +1,66 @@ +# Maintainer: Jesus E. + +pkgname=st +pkgver=0.9.2 +pkgrel=1 +pkgdesc="A simple virtual terminal emulator for X" +arch=('i686' 'x86_64') +url='https://st.suckless.org' +license=('Expat') +depends=('libxft' 'ttf-liberation') +source=(https://dl.suckless.org/$pkgname/$pkgname-$pkgver.tar.gz + terminfo.patch) +sha512sums=('1ca484227189d9e92ffc1092183fdc6a162da8bb41b9c18df662212d49a9551a84c3c87784ae16f2294105776b9d58983f29396bc681e367b761610bd7071b61' + '59b793b0fee6bc7048d31ddd981e8d4805d7c72833a4fae109f64f2f8dea06f8b9f67ec18567c445c2a6f5e892be95abc563bd0f86924500ed624c8c25cf8aba') +_sourcedir=$pkgname-$pkgver +_makeopts="--directory=$_sourcedir" + +prepare() { + patch --directory="$_sourcedir" --strip=0 < terminfo.patch + + # This package provides a mechanism to provide a custom config.h. Multiple + # configuration states are determined by the presence of two files in + # $BUILDDIR: + # + # config.h config.def.h state + # ======== ============ ===== + # absent absent Initial state. The user receives a message on how + # to configure this package. + # absent present The user was previously made aware of the + # configuration options and has not made any + # configuration changes. The package is built using + # default values. + # present The user has supplied his or her configuration. The + # file will be copied to $srcdir and used during + # build. + # + # After this test, config.def.h is copied from $srcdir to $BUILDDIR to + # provide an up to date template for the user. + if [ -e "$BUILDDIR/config.h" ] + then + cp "$BUILDDIR/config.h" "$_sourcedir" + elif [ ! -e "$BUILDDIR/config.def.h" ] + then + msg='This package can be configured in config.h. Copy the config.def.h ' + msg+='that was just placed into the package directory to config.h and ' + msg+='modify it to change the configuration. Or just leave it alone to ' + msg+='continue to use default values.' + warning "$msg" + fi + cp "$_sourcedir/config.def.h" "$BUILDDIR" +} + +build() { + make $_makeopts X11INC=/usr/include/X11 X11LIB=/usr/lib/X11 +} + +package() { + local installopts='--mode 0644 -D --target-directory' + local shrdir="$pkgdir/usr/share" + local licdir="$shrdir/licenses/$pkgname" + local docdir="$shrdir/doc/$pkgname" + make $_makeopts PREFIX=/usr DESTDIR="$pkgdir" install + install $installopts "$licdir" "$_sourcedir/LICENSE" + install $installopts "$docdir" "$_sourcedir/README" + install $installopts "$shrdir/$pkgname" "$_sourcedir/st.info" +} diff --git a/st/terminfo.patch b/st/terminfo.patch new file mode 100644 index 0000000..71dc270 --- /dev/null +++ b/st/terminfo.patch @@ -0,0 +1,10 @@ +--- Makefile.old 2019-02-09 12:50:41.000000000 +0100 ++++ Makefile 2019-11-07 00:00:24.487953923 +0100 +@@ -47,7 +47,6 @@ + mkdir -p $(DESTDIR)$(MANPREFIX)/man1 + sed "s/VERSION/$(VERSION)/g" < st.1 > $(DESTDIR)$(MANPREFIX)/man1/st.1 + chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1 +- tic -sx st.info + @echo Please see the README file regarding the terminfo entry of st. + + uninstall: diff --git a/stalonetray/PKGBUILD b/stalonetray/PKGBUILD new file mode 100644 index 0000000..4049c87 --- /dev/null +++ b/stalonetray/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=stalonetray +pkgver=0.8.1 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="STAnd-aLONE sysTRAY. It has minimal build and run-time dependencies: the Xlib only." +arch=('i686' 'x86_64') +url='http://stalonetray.sourceforge.net' +license=('GPL-2') +depends=('libx11' 'libxpm') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2" + "https://deb.debian.org/debian/pool/main/s/stalonetray/stalonetray_$_debver-$_debrel.debian.tar.gz") +sha512sums=('e8b15f3f1e4a9073ba92ca628e79e9add26965ad0686a30c63cf14eb03de1d234550dfbd50a22f05771bded8f7c64da093cda5b44c38e91f2a837c50c901144b' + 'ac298fc2d11d367e3ce59ca8eeda1b79f5d1292fe7645b7057eaaf2fbf3495074a18d5b2ce42fa9f7442ccf50152aaed318993c35b03e0049441cf5a59af4a00') + +prepare() { + cd $srcdir/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $srcdir/$pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-native-kde + make +} + +package() { + cd $srcdir/$pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 stalonetrayrc.sample "$pkgdir/etc/stalonetrayrc" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/startup-notification/PKGBUILD b/startup-notification/PKGBUILD new file mode 100644 index 0000000..871b744 --- /dev/null +++ b/startup-notification/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=startup-notification +pkgver=0.12 +pkgrel=8 +pkgdesc="Monitor and display application startup" +arch=('i686' 'x86_64') +url='https://www.freedesktop.org/wiki/Software/startup-notification/' +license=('LGPL-2') +depends=('libx11' 'xcb-util') +source=("https://www.freedesktop.org/software/startup-notification/releases/${pkgname}-${pkgver}.tar.gz") +sha512sums=('ea1246acdb50dafd9ced9914ec3c8f0d499c0ca3cfd447b43a444c768a6e9ea7135e5c42d9ca0089354698ac235bd86d42f12c70a3a17c9c79f998c07461f7ab') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + sed -i -e '/AC_PATH_XTRA/d' configure.in + autoreconf --force --install +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --localstatedir=/var \ + --sysconfdir=/etc + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/steghide/PKGBUILD b/steghide/PKGBUILD new file mode 100644 index 0000000..3768346 --- /dev/null +++ b/steghide/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=steghide +pkgver=0.5.1 +_debver=0.5.1 +_debrel=15 +pkgrel=1 +pkgdesc="Embeds a message in a file by replacing some of the least significant bits" +arch=('i686' 'x86_64') +url='http://steghide.sourceforge.net' +license=('GPL-2') +depends=('libmcrypt' 'gcc-libs' 'mhash' 'libjpeg' 'zlib') +makedepends=('quilt' 'intltool' 'gettext-tiny') +source=("https://iweb.dl.sourceforge.net/project/steghide/steghide/${pkgver}/steghide-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/s/steghide/steghide_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('6cda3e33e91123fbc5caa112efcacf09180505abd4f6f229878cd443817c60a04498aead02509c7532fd6924225c6b752820c51e452a83c520f228273d610a57' + 'fc052925ee971512ab44c665e220b4549b62928ccee678ed9e2759c28be6de8acf15203ebd0968ad0fdbf15272beaac23e89ca38be9c869987f0a10201c6b43a') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/correct-german.patch || true + rm -v debian/patches/fix-spelling.patch || true + rm -v debian/patches/no-mkinstalldirs.patch || true + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + # touch files needed by GNU Autotools + touch NEWS AUTHORS ChangeLog + + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/stegseek/PKGBUILD b/stegseek/PKGBUILD new file mode 100644 index 0000000..7a6e27c --- /dev/null +++ b/stegseek/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=stegseek +pkgver=0.6 +pkgrel=1 +pkgdesc="Lightning fast steghide cracker" +arch=('i686' 'x86_64') +url="https://github.com/RickdeJager/stegseek" +license=('GPL-2') +depends=('mhash' 'libmcrypt' 'libjpeg' 'zlib') +makedepends=('cmake') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/RickdeJager/stegseek/archive/v${pkgver}.tar.gz" + "fix-build-i686.patch") +sha512sums=('e55e1f63e02d70528bfe6ab15c313b3566749616fdbb22a7088d7abaf07a1bc79ae6d84bd65f89313980964bd2d42be9ba86007df09d7c3e90c779dc729789bf' + 'e23fc3476406716a017dc170f493adcd4ab5511779eab718a00340c8e7cc6f1a0024edf8306dc381848dcb9b9c4f8ec76d9e19bfa55abafd3cf23280237fbc99') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ $CARCH = "i686" ]]; then + patch -Np1 -i ${srcdir}/fix-build-i686.patch + fi +} + +build() { + cmake -B build -S "${srcdir}/${pkgname}-${pkgver}" -DCMAKE_INSTALL_PREFIX=/usr + make -C build +} + +package() { + cd "${srcdir}/build" + make DESTDIR="${pkgdir}/" install + install -Dm644 ${srcdir}/${pkgname}-${pkgver}/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/stegseek/fix-build-i686.patch b/stegseek/fix-build-i686.patch new file mode 100644 index 0000000..c26164a --- /dev/null +++ b/stegseek/fix-build-i686.patch @@ -0,0 +1,11 @@ +--- a/src/PasswordCracker.cc 2021-04-18 23:56:17.000000000 +0200 ++++ b/src/PasswordCracker.cc 2021-12-18 02:44:51.013572242 +0100 +@@ -58,7 +58,7 @@ + // Add n worker threads + // A part must have at least len 1, otherwise no words will be read when + // threads > size +- unsigned long part = std::max(wordlistStats.st_size / threads, 1L); ++ unsigned long part = std::max(wordlistStats.st_size / threads, 1LU); + for (unsigned int i = 0; i < threads; i++) { + ThreadPool.push_back(std::thread([this, i, part, metricsEnabled] { + consume(i * part, (i + 1) * part, metricsEnabled); diff --git a/stella/PKGBUILD b/stella/PKGBUILD new file mode 100644 index 0000000..9201b26 --- /dev/null +++ b/stella/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=stella +pkgver=6.7 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Atari 2600 VCS emulator" +arch=('i686' 'x86_64') +url='https://stella-emu.github.io/' +license=('GPL-2') +depends=('sdl2' 'gtk-update-icon-cache') +makedepends=('glu' 'quilt') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/s/stella/stella_${pkgver}+dfsg.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/s/stella/stella_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('146b44ef23ddc268f4384e5c5770d1e2ad99bbc32ba1c48b73644dcf3c1a4af0cee4685209a634f905e913f48618ecb742e8afd43ab44c355a688233d89b32ae' + '757307b5f507c45987e8377ffb036f38ed70f29584b2f8b5d1bdeeca631d3c98392c56b24c60322eeb89e8e22b3f8ab2a9ea4b2f03e28a6e69f5e0d850b5b972') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 License.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/stk/PKGBUILD b/stk/PKGBUILD new file mode 100644 index 0000000..97e5db8 --- /dev/null +++ b/stk/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=stk +pkgver=4.6.1 +pkgrel=1 +pkgdesc='The Synthesis ToolKit in C++' +arch=('x86_64' 'i686') +url='https://ccrma.stanford.edu/software/stk/' +license=('Expat') +depends=('gcc-libs' 'glibc') +makedepends=('alsa-lib' 'doxygen' 'jack') +optdepends=('tk: run provided demos/samples') +source=("https://deb.debian.org/debian/pool/main/s/${pkgname}/${pkgname}_${pkgver}+dfsg.orig.tar.xz") +sha512sums=('c62d88055f31c0cd911cace0c30bc56535d438681144056effae70e25e8f7780ebdfb0031256c555a1e24f07730645236f900052a74dfc6f9393e9e3356c57c0') + +prepare() { + cd ${pkgname}-${pkgver} + + autoreconf -fiv +} + +build() { + cd ${pkgname}-${pkgver} + + export RAWWAVE_PATH=/usr/share/${pkgname}/rawwaves + ./configure --prefix=/usr/ --enable-shared --with-alsa --with-jack + make VERBOSE=1 + make VERBOSE=1 -C projects/demo + cd doc/doxygen + doxygen +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR=${pkgdir} VERBOSE=1 install + # In demo component. + install -Dvm 755 projects/demo/stk-demo -t ${pkgdir}/usr/bin + install -Dvm 644 projects/demo/tcl/*.tcl -t ${pkgdir}/usr/share/${pkgname}/tcl + install -Dvm 644 projects/demo/scores/{README,*.ski} -t ${pkgdir}/usr/share/${pkgname}/scores + install -Dvm 644 rawwaves/*.{raw,c} -t ${pkgdir}/usr/share/${pkgname}/rawwaves + # In documentation component. + install -Dvm 644 doc/README-Linux.txt ${pkgdir}/usr/share/doc/${pkgnanme}/README.txt + install -Dvm 644 doc/{ReleaseNotes,SKINI,hierarchy}.txt -t ${pkgdir}/usr/share/doc/${pkgname} + install -Dvm 644 doc/html/*.{html,png,js} -t ${pkgdir}/usr/share/doc/${pkgname}/html + # Install licence file. + install -Dvm 644 LICENSE -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/strace/PKGBUILD b/strace/PKGBUILD new file mode 100644 index 0000000..3f3046d --- /dev/null +++ b/strace/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=strace +pkgver=5.10 +_debver=5.10 +_debrel=1 +pkgrel=1 +pkgdesc='A diagnostic, debugging and instructional userspace tracer' +arch=('i686' 'x86_64') +url='https://strace.io/' +license=('LGPL-2.1') +depends=('perl' 'libunwind') +makedepends=('quilt') +source=("https://github.com/strace/strace/releases/download/v$pkgver/strace-$pkgver.tar.xz" + "https://deb.debian.org/debian/pool/main/s/strace/strace_$_debver-$_debrel.debian.tar.xz") +sha512sums=('1baa41b6d52f2e40e42a22850beee1ae278fafe712796694631898f06a7540d8f2c3fa70807e0062734f0976ebbd0824457c733ccda248f017c218387366ed48' + '517ebd81ba10f311775ae951e21a1d72c795b7d205e7cbd6427febfb5d64c4070a58fe2c23e645900cebfbb6046862a02dcf6dc7b52db0b8f8af0e18d40a68e5') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --with-libunwind + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/strip-nondeterminism/PKGBUILD b/strip-nondeterminism/PKGBUILD new file mode 100644 index 0000000..adae477 --- /dev/null +++ b/strip-nondeterminism/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=strip-nondeterminism +pkgver=1.12.0 +pkgrel=1 +pkgdesc="Tool for stripping bits of non-deterministic information from files" +url='https://salsa.debian.org/reproducible-builds/strip-nondeterminism' +arch=('any') +license=('GPL-3') +depends=("perl" 'perl-archive-zip' 'perl-archive-cpio' 'perl-sub-override') +options=('!emptydirs') +source=(https://salsa.debian.org/reproducible-builds/strip-nondeterminism/-/archive/${pkgver}/strip-nondeterminism-${pkgver}.tar.bz2 + https://salsa.debian.org/reproducible-builds/reproducible-lfs/raw/master/releases/strip-nondeterminism/strip-nondeterminism-${pkgver}.tar.bz2.asc) +sha512sums=('046a422d1db979d947fda4aedc8b70e7de630963c261595b96720b38f90048646ec29b33e4f5594a28cc5a25ebb903b30378909114f751a6e9697928b23338cb' + 'SKIP') +validpgpkeys=('C2FE4BD271C139B86C533E461E953E27D4311E58' # Chris Lamb + 'EF5D84C1838F2EB6D8968C0410378EFC2080080C' # Andrew Ayer + '2F5DAF3FC1F793D94F3D900CA721DA055374AA4F' # Reiner Herrmann + '66AE2B4AFCCF3F52DA184D184B043FCDB9444540') # Mattia Rizzolo + +prepare() { + cd ${pkgname}-${pkgver} + sed -r 's|bin/dh_strip_nondeterminism ||g' -i Makefile.PL +} + +build() { + cd ${pkgname}-${pkgver} + PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 README -t "${pkgdir}/usr/share/doc/${pkgname}" + # Don't install the internal handler documentation generated from pod documents + rm -r "${pkgdir}/usr/share/man/man3" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/subtitleeditor/PKGBUILD b/subtitleeditor/PKGBUILD new file mode 100644 index 0000000..7f9f547 --- /dev/null +++ b/subtitleeditor/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=subtitleeditor +pkgver=0.54.0 +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="A GTK+3 tool to edit subtitles" +arch=('i686' 'x86_64') +url='https://kitone.github.io/subtitleeditor/' +license=('GPL-3') +depends=('desktop-file-utils' 'enchant' 'gst-plugins-base' 'gstreamermm' 'gst-libav' + 'gtkmm' 'hicolor-icon-theme' 'libsigc++' 'libxml++2.6' 'xdg-utils') +makedepends=('intltool' 'quilt' 'automake-1.15') +source=("https://github.com/kitone/$pkgname/releases/download/$pkgver/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/s/subtitleeditor/subtitleeditor_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('4458d579775a504b22f955c41d0e95ed722c1cb6bcf715ef493988a85397d5e0d4c3327e129f49b160d398dc73257026a92bbe5104c30d2004c16b7e12dd113c' + '9e15c0f6d4ddc88650f6f7962b09175fddbae1c1ac295a83c33e29e1212f09a1d88711a4e1250c5f125d72ea02f4b77c3ca9f62594ee0010f0cf8d383fbe0832') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/use_enchant-2.patch || true + + quilt push -av + fi + + autoreconf -vfi +} + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + ./configure --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package () { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/subtitleripper/PKGBUILD b/subtitleripper/PKGBUILD new file mode 100644 index 0000000..61f3cf4 --- /dev/null +++ b/subtitleripper/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=subtitleripper +pkgver=0.5.2 +pkgrel=1 +pkgdesc="DVD subtitle to text converter" +arch=('i686' 'x86_64') +url='https://subtitleripper.sourceforge.net/' +license=('GPL-2') +depends=('netpbm') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig}) +sha512sums=('a061af59952f32c1396207e14a38080a84f8346e403f2b268cf20ef05b86bbc01819d1595e56c5d3ac010244148a5fd88f9a8c243adc1ea35fbc43854e638d93' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + # use netpbm instead of libppm + sed -i 's/_HAVE_LIB_PPM_/_HAVE_NETPBM_/g' * + sed -i 's|||g' *.[ch] + sed -i 's/-lppm/-lnetpbm/' Makefile + # quieten warnings about exit(): + sed -i '1s/^/#include /' subtitle2pgm.c + # force use of getline to prevent aborted build: + sed -i 's/DEFINES :=/DEFINES := -DHAVE_GETLINE/' Makefile +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + install -Dm755 {pgm2txt,srttool,subtitle2pgm,subtitle2vobsub,subtitleripper,vobsub2pgm} -t "$pkgdir/usr/bin" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/suil/PKGBUILD b/suil/PKGBUILD new file mode 100644 index 0000000..621c170 --- /dev/null +++ b/suil/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=suil +pkgver=0.10.10 +pkgrel=2 +pkgdesc='A lightweight C library for loading and wrapping LV2 plugin UIs' +arch=('i686' 'x86_64') +url='https://drobilla.net/software/suil/' +license=('ISC') +depends=('glibc') +makedepends=('gtk2' 'gtk' 'lv2' 'python' 'qt-base' 'qt-x11extras' 'waf') +optdepends=('atk: support for wrapping X11 and Qt in GTK2/3 and GTK2 in Qt' + 'cairo: support for wrapping X11 and Qt in GTK2/3' + 'fontconfig: support for wrapping X11 and Qt in GTK2 and GTK2 in Qt' + 'gcc-libs: support for wrapping GTK2 and X11 in Qt and Qt in GTK2/3' + 'gdk-pixbuf2: support for wrapping X11 and Qt in GTK2/3 and GTK2 in Qt' + 'glib2: support for wrapping X11 and Qt in GTK2/3 and GTK2 in Qt' + 'gtk2: support for wrapping X11 and Qt in GTK2 and GTK2 in Qt' + 'gtk: support for wrapping X11 and Qt in GTK3' + 'libx11: support for wrapping X11 directly and in GTK2/3' + 'qt-base: support for wrapping X11 in Qt, Qt in GTK2/3 and GTK2 in Qt' + 'qt-x11extras: support for wrapping X11 in Qt' + 'pango: support for wrapping X11 in GTK2/3, Qt in GTK2/3 and GTK2 in Qt' + 'zlib: support for wrapping X11 in GTK3 and Qt in GTK3') +source=("https://download.drobilla.net/${pkgname}-${pkgver}.tar.bz2"{,.asc}) +sha512sums=('e442022096150b2f71d65bbd625e2e262cb3e3865c57f5a30f0472dac8ef90ad2fbbf67235823055019017e3751b46330f6e98b8e1745e5845eb02c4d2a4fc21' + 'SKIP') +validpgpkeys=('907D226E7E13FA337F014A083672782A9BF368F3') # David Robillard + +prepare() { + cd "${pkgname}-${pkgver}" + # remove local call to ldconfig + sed -i "/ldconfig/d" wscript + # let wscript(s) find the custom waf scripts + mkdir -pv tools + touch __init__.py + cp -v waflib/extras/{autoship,autowaf,lv2}.py tools/ + mkdir -pv plugins/tools/ + cp -v waflib/extras/{autoship,autowaf,lv2}.py plugins/tools/ + rm -rv waflib + sed -e 's/waflib.extras/tools/g' \ + -e "s/load('autowaf'/load('autowaf', tooldir='tools'/g" \ + -e "s/load('lv2'/load('lv2', tooldir='tools'/g" \ + -i wscript +} + +build() { + cd "${pkgname}-${pkgver}" + waf configure --prefix=/usr + waf build +} + +package() { + cd "${pkgname}-${pkgver}" + waf install --destdir="${pkgdir}" + # license + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}" + # docs + install -vDm 644 {AUTHORS,NEWS,PACKAGING,README.md} \ + -t "$pkgdir/usr/share/doc/${pkgname}" +} diff --git a/suitesparse/PKGBUILD b/suitesparse/PKGBUILD new file mode 100644 index 0000000..164f330 --- /dev/null +++ b/suitesparse/PKGBUILD @@ -0,0 +1,66 @@ +# Maintainer: Jesus E. + +pkgname=suitesparse +pkgver=5.8.1 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A free and libre collection of sparse matrix libraries" +url='http://faculty.cse.tamu.edu/davis/suitesparse.html' +arch=('i686' 'x86_64') +conflicts=('umfpack') +provides=('umfpack') +replaces=('umfpack') +depends=('metis' 'lapack' 'tbb' 'mpfr') +makedepends=('gcc-fortran' 'cmake' 'chrpath' 'quilt') +license=('LGPL-2.1' 'Modified-BSD' 'GPL-2' 'Apache-2.0' 'Simplified-BSD' 'LGPL-3') +options=('staticlibs') +source=("$pkgname-$pkgver.tar.gz::https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/s/suitesparse/suitesparse_${_debver}+dfsg-${_debrel}.debian.tar.xz" + "suitesparse-no-demo.patch") +sha512sums=('3d986157acd39968216880c2de30c54d72e0addd7318a04948c1b842ad9c876bcde32f292504d4540a4baa998a368dfc0db000606a2d00f61760a92d5b8c1cb8' + 'f7561a966c03c9de16303ce8c341204180a26d8fe4109bd81a14a793456fde20b45cff643442f2f46cb825caccef9daa45d2bbdb593b91e215833dd10a2cea59' + 'f7bfd7fd8d8defd1e7dc1afdb05ed9fe32ab144b82052a6863b96b8c423521aca9560d093c82aca02da493473d5cda90482fd084f528b90f33590fae2cf5e4d9') + +prepare() { + cd SuiteSparse-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/buildflags.patch || true + rm -v debian/patches/graphblas-build.patch || true + rm -v debian/patches/mongoose-build.patch || true + + quilt push -av + fi + patch -p1 -i ${srcdir}/suitesparse-no-demo.patch +} + +build() { + if [[ $CARCH = "i686" ]]; then + export CXXFLAGS="-Og" + export CFLAGS="-Og" + fi + cd SuiteSparse-$pkgver + BLAS=-lblas LAPACK=-llapack TBB=-ltbb SPQR_CONFIG=-DHAVE_TBB MY_METIS_LIB=/usr/lib/libmetis.so make +} + + +package() { + cd SuiteSparse-$pkgver + install -dm755 "${pkgdir}"/usr/{include,lib} + + BLAS=-lblas LAPACK=-llapack TBB=-ltbb SPQR_CONFIG=-DHAVE_TBB MY_METIS_LIB=/usr/lib/libmetis.so \ + make INSTALL_LIB="${pkgdir}"/usr/lib INSTALL_INCLUDE="${pkgdir}"/usr/include install + + # fix RPATH + chrpath -d "$pkgdir"/usr/lib/* + + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/suitesparse/suitesparse-no-demo.patch b/suitesparse/suitesparse-no-demo.patch new file mode 100644 index 0000000..2f63ef1 --- /dev/null +++ b/suitesparse/suitesparse-no-demo.patch @@ -0,0 +1,11 @@ +--- SuiteSparse-5.6.0/Makefile.orig 2019-11-05 22:37:26.086135974 +0000 ++++ SuiteSparse-5.6.0/Makefile 2019-11-05 22:37:37.549632429 +0000 +@@ -16,7 +16,7 @@ + # installs all libraries SuiteSparse/lib. + go: metis + ( cd SuiteSparse_config && $(MAKE) ) +- ( cd Mongoose && $(MAKE) CMAKE_OPTIONS='$(CMAKE_OPTIONS)' ) ++ ( cd Mongoose && $(MAKE) library CMAKE_OPTIONS='$(CMAKE_OPTIONS)' ) + ( cd AMD && $(MAKE) ) + ( cd BTF && $(MAKE) ) + ( cd CAMD && $(MAKE) ) diff --git a/supertux-legacy/PKGBUILD b/supertux-legacy/PKGBUILD new file mode 100644 index 0000000..4f9da9e --- /dev/null +++ b/supertux-legacy/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=supertux-legacy +pkgver=0.6.2 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A classic, free and libre 2D jump'n'run sidescroller game (legacy version)" +arch=('i686' 'x86_64') +url='https://github.com/supertux/supertux' +license=('GPL-3') +provides=('supertux') +conflicts=('supertux') +depends=('sdl2_image' 'curl' 'openal' 'libvorbis' 'glew' 'physfs' 'freetype2' 'boost-libs' 'hicolor-icon-theme') +makedepends=('cmake' 'boost' 'mesa' 'optipng' 'quilt') +groups=('games') +source=("https://github.com/SuperTux/supertux/releases/download/v${pkgver}/SuperTux-v${pkgver}-Source.tar.gz" + http://deb.debian.org/debian/pool/main/s/supertux/supertux_$_debver-$_debrel.debian.tar.xz) +sha512sums=('5baa783ee589b42a9bbce3740659dbb7b617ebfcc00c0a038c03d31b56700e3923c8548700ccebe42b325ca03bd85186bc5edef9f6580d93dc48d8aca88cbf74' + 'bb3c60bdad7100d2306251fbb2ae354affaaf23554d81540a200f02aeadada6c47a04b9dcae7aab3c4ca738cf2cb5f09457fd1e47a7da01641205a8c05afd57f') + +prepare() { + cd "SuperTux-v${pkgver}-Source" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "SuperTux-v${pkgver}-Source" + + cmake . \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DINSTALL_SUBDIR_BIN=games \ + -DCMAKE_BUILD_TYPE=Release \ + -Wno-dev + make +} + +package() { + cd "SuperTux-v${pkgver}-Source" + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/supertuxkart/PKGBUILD b/supertuxkart/PKGBUILD new file mode 100644 index 0000000..88718b6 --- /dev/null +++ b/supertuxkart/PKGBUILD @@ -0,0 +1,98 @@ +# Maintainer: Jesus E. + +_pkgname=supertuxkart-libre +_datalibrename=supertuxkart-data-libre +pkgname=supertuxkart +pkgver=1.2 +_debver=$pkgver +_debrel=1 +pkgrel=4 +pkgdesc="Free software kart racing game" +arch=('i686' 'x86_64') +url='https://supertuxkart.net' +license=('GPL-2' 'GPL-3' 'CC-BY-3.0' 'CC-BY-4.0' 'CC-BY-SA-3.0' 'CC-BY-SA-4.0' 'Public-Domain' 'zlib' 'Expat' 'Unicode' 'CC0-1.0') +depends=('openal' 'libvorbis' 'fribidi' 'curl' 'libxrandr' 'glew' + 'libxkbcommon-x11' 'sqlite' 'libjpeg-turbo' 'libraqm' + 'hicolor-icon-theme' 'sdl2' 'mcpp' 'libsquish') +makedepends=('cmake' 'ninja' 'quilt') +groups=('games') +mksource=("https://github.com/supertuxkart/stk-code/releases/download/${pkgver}/SuperTuxKart-${pkgver}-src.tar.xz" + "https://repo.hyperbola.info:50000/sources/${_datalibrename}/${_datalibrename}-${pkgver}.tar.gz"{,.sig}) +mksha512sums=('bc7079af9b3d85b3e4839ebb3eee293fb8bfe95450165172caa28b8ad1a9e97c59618d77c2208a86090f1840aa9a4b4b6898c1053fa6f5d7dfbfe17b69536835' + 'bee80e5a56d9f1a325704bf8e4dd34641b243172d2cba692d5d96d75e5c43a917be29164c148a99c218de56167074b63801004e660960eb5333dbdd7ba489f23' + 'SKIP') +source=("https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/s/supertuxkart/supertuxkart_${_debver}+ds2-${_debrel}.debian.tar.xz" + "libre.patch") +sha512sums=('95519a9d8bb33a361828beb39a755b0b9f0d806ef16b07ca9ce81855ccef82819b9b9fe78a065d94739979a6150643205ca5ba95d2d7c9e27251fe1b1f68623a' + 'SKIP' + '7a921b3fa10ff95a563e7b1c2c6023ec3f6b1a116ab247c515b0391130d1831b4a11cedee6ba44895afa6c8bd485d34a31c5e8611996f001fa77484606d6f9ff' + '38d954f742bc6087d0ba73eb67937151b942cda58f6ad27ea8b6d48328f062d88bf9da461f053448e08920cd642ff6bfcf869a3241f43ec8f0e0f70e15fbd473') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # André Silva + +mksource() { + cd "$srcdir"/SuperTuxKart-${pkgver}-src + + # remove non-free and unneeded data + rm -rf android + rm -rf tools/windows_installer + rm -rf lib/{glew,libsquish,mcpp} + rm -rf data/karts/{beastie,hexley} + rm data/replay/{standard_novice_mines,standard_reverse_supertux_mines,standard_expert_ravenbridge_mansion,standard_expert_volcano_island}.replay + + # replace non-free data + cp "${srcdir}/${_datalibrename}-${pkgver}/icon-sara-racer.png" "data/karts/sara_the_racer/icon-sara.png" + cp "${srcdir}/${_datalibrename}-${pkgver}/licenses-sara-racer.txt" "data/karts/sara_the_racer/licenses.txt" + cp "${srcdir}/${_datalibrename}-${pkgver}/icon-sara-wizard.png" "data/karts/sara_the_wizard/icon-sara.png" + cp "${srcdir}/${_datalibrename}-${pkgver}/licenses-sara-wizard.txt" "data/karts/sara_the_wizard/licenses.txt" + cp "${srcdir}/${_datalibrename}-${pkgver}/jump.ogg" "data/sfx" + cp "${srcdir}/${_datalibrename}-${pkgver}/plopp.ogg" "data/sfx" + cp "${srcdir}/${_datalibrename}-${pkgver}/licenses-sfx.txt" "data/sfx/licenses.txt" +} + +prepare() { + cd "$srcdir"/SuperTuxKart-${pkgver}-src + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # making installation fhs-compliant + sed -i -e 's/STK_INSTALL_BINARY_DIR "bin"/STK_INSTALL_BINARY_DIR "games"/g' \ + -e 's/STK_INSTALL_DATA_DIR "share\/supertuxkart"/STK_INSTALL_DATA_DIR "share\/games\/supertuxkart"/g' \ + CMakeLists.txt + + # remove non-free parts in source-code and configuration + patch -Np1 -i ${srcdir}/libre.patch +} + +build() { + cd "$srcdir"/SuperTuxKart-${pkgver}-src + + cmake . \ + -Bbuild \ + -GNinja \ + -Wno-dev \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DUSE_WIIUSE=0 \ + -DBUILD_RECORDER=0 + + ninja -C build +} + +package() { + cd "$srcdir"/SuperTuxKart-${pkgver}-src + + DESTDIR="$pkgdir" ninja -C build install + + install -Dm644 "$srcdir"/SuperTuxKart-${pkgver}-src/COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + install -Dm644 "$srcdir"/SuperTuxKart-${pkgver}-src/debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/supertuxkart/libre.patch b/supertuxkart/libre.patch new file mode 100644 index 0000000..7ef0cba --- /dev/null +++ b/supertuxkart/libre.patch @@ -0,0 +1,1170 @@ +--- a/src/addons/addons_manager.cpp 2020-08-28 10:16:23.000000000 +0200 ++++ b/src/addons/addons_manager.cpp 2023-12-09 23:08:13.240106458 +0100 +@@ -22,7 +22,6 @@ + + #include "addons/addons_manager.hpp" + +-#include "addons/news_manager.hpp" + #include "addons/zip.hpp" + #include "config/user_config.hpp" + #include "io/file_manager.hpp" +@@ -52,21 +51,12 @@ + + // ---------------------------------------------------------------------------- + /** Initialises the non-online component of the addons manager (i.e. handling +- * the list of already installed addons). The online component is initialised +- * later from a separate thread started from the news manager (see +- * NewsManager::init() ). ++ * the list of already installed addons). + */ + AddonsManager::AddonsManager() : m_addons_list(std::vector() ), + m_state(STATE_INIT) + { + m_downloaded_icons = false; +- // Clean .part file which may be left behind +- std::string addons_part = file_manager->getAddonsFile("addons.xml.part"); +- if (file_manager->fileExists(addons_part)) +- file_manager->removeFile(addons_part); +- +- m_file_installed = file_manager->getAddonsFile("addons_installed.xml"); +- + // Load the addons list (even if internet is disabled) + m_addons_list.lock(); + // Clear the list in case that a reinit is being done. +@@ -85,77 +75,11 @@ + } // ~AddonsManager + + // ---------------------------------------------------------------------------- +-/** This init function is called from a separate thread (started in +- * news_manager, since the news.xml file contains the address of the +- * addons.xml URL). +- * \param xml The news.xml file, which inclues the data about the addons.xml +- * file (in the 'include' node). +- * \param force_refresh Download addons.xml, even if the usual waiting period +- * between downloads hasn't passed yet. ++/** This init function is called from a separate thread. + */ + void AddonsManager::init(const XMLNode *xml, + bool force_refresh) + { +- std::string addon_list_url(""); +- StkTime::TimeType mtime(0); +- const XMLNode *include = xml->getNode("include"); +- std::string filename=file_manager->getAddonsFile("addons.xml"); +- // Prevent downloading when .part file created, which is already downloaded +- std::string filename_part=file_manager->getAddonsFile("addons.xml.part"); +- if(!include) +- { +- file_manager->removeFile(filename); +- setErrorState(); +- NewsManager::get()->addNewsMessage(_("Failed to connect to the SuperTuxKart add-ons server.")); +- return; +- } +- +- include->get("file", &addon_list_url); +- int frequency = 0; +- include->get("frequency", &frequency); +- +- int64_t tmp; +- include->get("mtime", &tmp); +- mtime = tmp; +- +- bool download = +- ( mtime > UserConfigParams::m_addons_last_updated +frequency || +- force_refresh || +- !file_manager->fileExists(filename) ) +- && UserConfigParams::m_internet_status == RequestManager::IPERM_ALLOWED +- && !file_manager->fileExists(filename_part); +- +- if (download) +- { +- Log::info("addons", "Downloading updated addons.xml."); +- auto download_request = std::make_shared("addons.xml"); +- download_request->setURL(addon_list_url); +- download_request->executeNow(); +- if(download_request->hadDownloadError()) +- { +- Log::error("addons", "Error on download addons.xml: %s.", +- download_request->getDownloadErrorMessage()); +- return; +- } +- UserConfigParams::m_addons_last_updated=StkTime::getTimeSinceEpoch(); +- } +- else +- Log::info("addons", "Using cached addons.xml."); +- +- const XMLNode* xml_addons = NULL; +- try +- { +- xml_addons = new XMLNode(filename); +- } +- catch (std::exception& e) +- { +- Log::error("addons", "Error %s", e.what()); +- } +- if (!xml_addons) +- return; +- addons_manager->initAddons(xml_addons); // will free xml_addons +- if(UserConfigParams::logAddons()) +- Log::info("addons", "Addons manager list downloaded."); + } // init + + // ---------------------------------------------------------------------------- +@@ -168,139 +92,6 @@ + */ + void AddonsManager::initAddons(const XMLNode *xml) + { +- m_addons_list.lock(); +- // Clear the list in case that a reinit is being done. +- m_addons_list.getData().clear(); +- loadInstalledAddons(); +- m_addons_list.unlock(); +- +- for(unsigned int i=0; igetNumNodes(); i++) +- { +- const XMLNode *node = xml->getNode(i); +- const std::string &name = node->getName(); +- // Ignore news/redirect, which is handled by the NewsManager +- if(name=="include" || name=="message") +- continue; +- if(node->getName()=="track" || node->getName()=="kart" || +- node->getName()=="arena" ) +- { +- Addon addon(*node); +- int index = getAddonIndex(addon.getId()); +- +- int stk_version=0; +- node->get("format", &stk_version); +- int testing=-1; +- node->get("testing", &testing); +- +- bool wrong_version=false; +- +- if(addon.getType()=="kart") +- wrong_version = stk_version m_min_kart_version || +- stk_version >stk_config->m_max_kart_version ; +- else +- wrong_version = stk_version m_min_track_version || +- stk_version >stk_config->m_max_track_version ; +- // If the add-on is included, behave like it is a wrong version +- if (addon.testIncluded(addon.getMinIncludeVer(), addon.getMaxIncludeVer())) +- wrong_version = true; +- +- // Check which version to use: only for this stk version, +- // and not addons that are marked as hidden (testing=0) +- if(wrong_version|| testing==0) +- { +- // If the version is too old (e.g. after an update of stk) +- // remove a cached icon. +- std::string full_path = +- file_manager->getAddonsFile("icons/" +- +addon.getIconBasename()); +- if(file_manager->fileExists(full_path)) +- { +- if(UserConfigParams::logAddons()) +- Log::warn("addons", "Removing cached icon '%s'.", +- addon.getIconBasename().c_str()); +- file_manager->removeFile(full_path); +- } +- continue; +- } +- +- m_addons_list.lock(); +- if(index>=0) +- { +- Addon& tmplist_addon = m_addons_list.getData()[index]; +- +- // Only copy the data if a newer revision is found (ignore unapproved +- // revisions unless player is in the mode to see them) +- if (tmplist_addon.getRevision() < addon.getRevision() && +- (addon.testStatus(Addon::AS_APPROVED) || UserConfigParams::m_artist_debug_mode)) +- { +- m_addons_list.getData()[index].copyInstallData(addon); +- } +- } +- else +- { +- m_addons_list.getData().push_back(addon); +- index = (int) m_addons_list.getData().size()-1; +- } +- // Mark that this addon still exists on the server +- m_addons_list.getData()[index].setStillExists(); +- m_addons_list.unlock(); +- } +- else +- { +- Log::error("addons", "Found invalid node '%s' while downloading addons.", +- node->getName().c_str()); +- Log::error("addons", "Ignored."); +- } +- } // for igetNumNodes +- delete xml; +- +- // Now remove all items from the addons-installed list, that are not +- // on the server anymore (i.e. not in the addons.xml file), and not +- // installed. If found, remove the icon cached for this addon. +- // Note that if (due to a bug) an icon is shared (i.e. same icon on +- // an addon that's still on the server and an invalid entry in the +- // addons installed file), it will be re-downloaded later. +- m_addons_list.lock(); +- unsigned int count = (unsigned int) m_addons_list.getData().size(); +- +- for(unsigned int i=0; igetAddonsFile("icons/"+icon); +- if(file_manager->fileExists(icon_file)) +- { +- file_manager->removeFile(icon_file); +- // Ignore errors silently. +- } +- m_addons_list.getData()[i] = m_addons_list.getData()[count-1]; +- m_addons_list.getData().pop_back(); +- count--; +- } +- m_addons_list.unlock(); +- +- for (unsigned int i = 0; i < m_addons_list.getData().size(); i++) +- { +- Addon& addon = m_addons_list.getData()[i]; +- const std::string& icon = addon.getIconBasename(); +- const std::string& icon_full = +- file_manager->getAddonsFile("icons/" + icon); +- if (!addon.iconNeedsUpdate() && file_manager->fileExists(icon_full)) +- addon.setIconReady(); +- } // for i < m_addons_list.size() +- +- m_state.setAtomic(STATE_READY); + } // initAddons + + // ---------------------------------------------------------------------------- +@@ -309,7 +100,6 @@ + */ + void AddonsManager::reInit() + { +- m_state.setAtomic(STATE_INIT); + } // reInit + + // ---------------------------------------------------------------------------- +@@ -320,53 +110,6 @@ + */ + void AddonsManager::checkInstalledAddons() + { +- bool something_was_changed = false; +- +- // Lock the whole addons list to make sure a consistent view is +- // written back to disk. The network thread might still be +- // downloading icons and modify content +- m_addons_list.lock(); +- +- // First karts +- // ----------- +- for(unsigned int i=0; igetNumberOfKarts(); i++) +- { +- const KartProperties *kp = kart_properties_manager->getKartById(i); +- const std::string &dir=kp->getKartDir(); +- if(dir.find(file_manager->getAddonsDir())==std::string::npos) +- continue; +- int n = getAddonIndex(kp->getIdent()); +- if(n<0) continue; +- if(!m_addons_list.getData()[n].isInstalled()) +- { +- Log::info("addons", "Marking '%s' as being installed.", +- kp->getIdent().c_str()); +- m_addons_list.getData()[n].setInstalled(true); +- something_was_changed = true; +- } +- } +- +- // Then tracks +- // ----------- +- for(unsigned int i=0; igetNumberOfTracks(); i++) +- { +- const Track *track = track_manager->getTrack(i); +- const std::string &dir=track->getFilename(); +- if(dir.find(file_manager->getAddonsDir())==std::string::npos) +- continue; +- int n = getAddonIndex(track->getIdent()); +- if(n<0) continue; +- if(!m_addons_list.getData()[n].isInstalled()) +- { +- Log::info("addons", "Marking '%s' as being installed.", +- track->getIdent().c_str()); +- m_addons_list.getData()[n].setInstalled(true); +- something_was_changed = true; +- } +- } +- if(something_was_changed) +- saveInstalled(); +- m_addons_list.unlock(); + } // checkInstalledAddons + + // ---------------------------------------------------------------------------- +@@ -374,83 +117,13 @@ + void AddonsManager::downloadIconForAddon(const std::string& addon_id, + std::weak_ptr result) + { +- Addon* addon = getAddon(addon_id); +- if (!addon) +- return; +- const std::string &icon = addon->getIconBasename(); +- const std::string &icon_full = +- file_manager->getAddonsFile("icons/" + icon); +- if (addon->iconNeedsUpdate() || +- !file_manager->fileExists(icon_full)) +- { +- const std::string& url = addon->getIconURL(); +- const std::string& icon = addon->getIconBasename(); +- if (icon.empty()) +- { +- if (UserConfigParams::logAddons()) +- { +- Log::error("addons", "No icon or image specified for '%s'.", +- addon->getId().c_str()); +- } +- return; +- } +- // A simple class that will notify the addon via a callback +- class IconRequest : public Online::HTTPRequest +- { +- std::weak_ptr m_result; +- Addon* m_addon; // stores this addon object +- void callback() +- { +- m_addon->setIconReady(); +- if (std::shared_ptr result = m_result.lock()) +- *result = true; +- if (!hadDownloadError()) +- addons_manager->m_downloaded_icons = true; +- } // callback +- public: +- IconRequest(const std::string& filename, +- const std::string& url, +- Addon* addon, std::weak_ptr result) +- : HTTPRequest(filename,/*priority*/1) +- { +- m_addon = addon; +- m_result = result; +- setURL(url); +- } // IconRequest +- }; +- auto r = +- std::make_shared("icons/"+icon, url, addon, result); +- r->queue(); +- } + } // downloadIconForAddon + + // ---------------------------------------------------------------------------- +-/** Loads the installed addons from .../addons/addons_installed.xml. ++/** Loads the installed addons. + */ + void AddonsManager::loadInstalledAddons() + { +- /* checking for installed addons */ +- if(UserConfigParams::logAddons()) +- { +- Log::info("addons", "Loading an xml file for installed addons: %s.", +- m_file_installed.c_str()); +- } +- const XMLNode *xml = file_manager->createXMLTree(m_file_installed); +- if(!xml) +- return; +- +- for(unsigned int i=0; igetNumNodes(); i++) +- { +- const XMLNode *node=xml->getNode(i); +- if(node->getName()=="kart" || node->getName()=="arena" || +- node->getName()=="track" ) +- { +- Addon addon(*node); +- m_addons_list.getData().push_back(addon); +- } +- } // for i <= xml->getNumNodes() +- +- delete xml; + } // loadInstalledAddons + + // ---------------------------------------------------------------------------- +@@ -498,70 +171,6 @@ + */ + bool AddonsManager::install(const Addon &addon) + { +- +- //extract the zip in the addons folder called like the addons name +- std::string base_name = StringUtils::getBasename(addon.getZipFileName()); +- std::string from = file_manager->getAddonsFile("tmp/"+base_name); +- std::string to = addon.getDataDir(); +- +- // Remove old addon first (including non official way to install addons) +- AddonsPack::uninstallByName(addon.getDirName(), true/*force_clear*/); +- if (file_manager->isDirectory(to)) +- file_manager->removeDirectory(to); +- +- file_manager->checkAndCreateDirForAddons(to); +- +- bool success = extract_zip(from, to, true/*recursive*/); +- if (!success) +- { +- // TODO: show a message in the interface +- Log::error("addons", "Failed to unzip '%s' to '%s'.", +- from.c_str(), to.c_str()); +- } +- +- if(!file_manager->removeFile(from)) +- { +- Log::error("addons", "Problems removing temporary file '%s'.", +- from.c_str()); +- } +- if (!success) +- return false; +- +- int index = getAddonIndex(addon.getId()); +- assert(index>=0 && index < (int)m_addons_list.getData().size()); +- m_addons_list.getData()[index].setInstalled(true); +- +- if(addon.getType()=="kart") +- { +- // We have to remove the mesh of the kart since otherwise it remains +- // cashed (if a kart is updated), and will therefore be found again +- // when reloading the karts. This is important on one hand since we +- // reload all karts (this function is easily available) and existing +- // karts will not reload their meshes. +- const KartProperties *prop = +- kart_properties_manager->getKart(addon.getId()); +- // If the model already exist, first remove the old kart +- if(prop) +- kart_properties_manager->removeKart(addon.getId()); +- kart_properties_manager->loadKart(addon.getDataDir()); +- } +- else if (addon.getType()=="track" || addon.getType()=="arena") +- { +- Track *track = track_manager->getTrack(addon.getId()); +- if(track) +- track_manager->removeTrack(addon.getId()); +- +- try +- { +- track_manager->loadTrack(addon.getDataDir()); +- } +- catch (std::exception& e) +- { +- Log::error("addons", "Cannot load track '%s' : %s.", +- addon.getDataDir().c_str(), e.what()); +- } +- } +- saveInstalled(); + return true; + } // install + +@@ -572,45 +181,7 @@ + */ + bool AddonsManager::uninstall(const Addon &addon) + { +- Log::info("addons", "Uninstalling '%s'.", +- core::stringc(addon.getName()).c_str()); +- +- // addon is a const reference, and to avoid removing the const, we +- // find the proper index again to modify the installed state +- int index = getAddonIndex(addon.getId()); +- assert(index>=0 && index < (int)m_addons_list.getData().size()); +- m_addons_list.getData()[index].setInstalled(false); +- +- //remove the addons directory +- bool error = false; +- // if the user deleted the data directory for an add-on with +- // filesystem tools, removeTrack/removeKart will trigger an assert +- // because the kart/track was never added in the first place +- if (file_manager->fileExists(addon.getDataDir())) +- { +- error = !file_manager->removeDirectory(addon.getDataDir()); +- +- // Even if an error happened when removing the data files +- // still remove the addon, since it is unknown if e.g. only +- // some files were successfully removed. Since we can not +- // know if the addon is still functional, better remove it. +- // On the other hand, in case of a problem the user will have +- // the option in the GUI to try again. In this case +- // removeTrack/Kart would not find the addon and assert. So +- // check first if the track is still known. +- if(addon.getType()=="kart") +- { +- if(kart_properties_manager->getKart(addon.getId())) +- kart_properties_manager->removeKart(addon.getId()); +- } +- else if(addon.getType()=="track" || addon.getType()=="arena") +- { +- if(track_manager->getTrack(addon.getId())) +- track_manager->removeTrack(addon.getId()); +- } +- } +- saveInstalled(); +- return !error; ++ return true; + } // uninstall + + // ---------------------------------------------------------------------------- +@@ -621,30 +192,6 @@ + */ + void AddonsManager::saveInstalled() + { +- // Put the addons in the xml file +- // Manually because the irrlicht xml writer doesn't seem finished, FIXME ? +- std::ofstream xml_installed( +- FileUtils::getPortableWritingPath(m_file_installed)); +- +- // Write the header of the xml file +- xml_installed << "" << std::endl; +- +- // Get server address from config +- const std::string server = stk_config->m_server_addons; +- +- // Find the third slash (end of the domain) +- std::string::size_type index = server.find('/'); +- index = server.find('/', index + 2) + 1; // Omit one slash +- xml_installed << "" +- << std::endl; +- +- for(unsigned int i = 0; i < m_addons_list.getData().size(); i++) +- { +- m_addons_list.getData()[i].writeXML(&xml_installed); +- } +- xml_installed << "" << std::endl; +- xml_installed.close(); +- m_downloaded_icons = false; + } // saveInstalled + + #endif +--- a/src/addons/news_manager.cpp 2020-08-28 10:16:23.000000000 +0200 ++++ b/src/addons/news_manager.cpp 2023-12-09 23:11:32.080108164 +0100 +@@ -46,26 +46,12 @@ + m_error_message.setAtomic(""); + m_force_refresh = false; + +- // Clean .part file which may be left behind +- std::string news_part = file_manager->getAddonsFile(m_news_filename + ".part"); +- if (file_manager->fileExists(news_part)) +- file_manager->removeFile(news_part); +- + init(false); + } // NewsManage + + // --------------------------------------------------------------------------- + NewsManager::~NewsManager() + { +- // If the download thread doesn't finish on time we detach the thread to +- // avoid exception +- if (m_download_thread.joinable()) +- { +- if (!CanBeDeleted::canBeDeletedNow()) +- m_download_thread.detach(); +- else +- m_download_thread.join(); +- } + } // ~NewsManager + + // --------------------------------------------------------------------------- +@@ -78,21 +64,6 @@ + */ + void NewsManager::init(bool force_refresh) + { +- if (m_download_thread.joinable()) +- return; +- +- m_force_refresh = force_refresh; +- +- // The rest (which potentially involves downloading m_news_filename) is handled +- // in a separate thread, so that the GUI remains responsive. It is only +- // started if internet access is enabled, else nothing is done in the +- // thread anyway (and the addons menu is disabled as a result). +- if(UserConfigParams::m_internet_status==RequestManager::IPERM_ALLOWED) +- { +- CanBeDeleted::resetCanBeDeleted(); +- m_download_thread = std::thread(std::bind( +- &NewsManager::downloadNews, this)); +- } + } //init + + // --------------------------------------------------------------------------- +@@ -102,117 +73,6 @@ + */ + void NewsManager::downloadNews() + { +- VS::setThreadName("downloadNews"); +- clearErrorMessage(); +- +- std::string xml_file = file_manager->getAddonsFile(m_news_filename); +- // Prevent downloading when .part file created, which is already downloaded +- std::string xml_file_part = file_manager->getAddonsFile(m_news_filename + ".part"); +- bool news_exists = file_manager->fileExists(xml_file); +- +- // The news message must be updated if either it has never been updated, +- // or if the time of the last update was more than news_frequency ago, +- // or because a 'refresh' was explicitly requested by the user, or no +- // m_news_filename file exists. +- bool download = ( UserConfigParams::m_news_last_updated==0 || +- UserConfigParams::m_news_last_updated +- +UserConfigParams::m_news_frequency +- < StkTime::getTimeSinceEpoch() || +- m_force_refresh || +- !news_exists ) +- && UserConfigParams::m_internet_status==RequestManager::IPERM_ALLOWED +- && !file_manager->fileExists(xml_file_part); +- const XMLNode *xml = NULL; +- +- if(!download && news_exists) +- { +- // If (so far) we don't need to download, there should be an existing +- // file. Try to read this, and do some basic checks +- xml = new XMLNode(xml_file); +- // A proper news file has at least a version number, mtime, frequency +- // and an include node (which contains addon data) defined. If this is +- // not the case, assume that it is an invalid download, or a corrupt +- // local file. Try downloading again after resetting the news server +- // back to the default. +- int version=-1; +- if( !xml->get("version", &version) || version!=1 || +- !xml->get("mtime", &version) || +- !xml->getNode("include") || +- !xml->get("frequency", &version) ) +- { +- delete xml; +- xml = NULL; +- download = true; +- } // if xml not consistemt +- } // if !download +- +- if(download) +- { +- core::stringw error_message(""); +- +- auto download_req = std::make_shared(m_news_filename); +- download_req->setAddonsURL(m_news_filename); +- +- // Initialise the online portion of the addons manager. +- if(UserConfigParams::logAddons()) +- Log::info("addons", "Downloading news."); +- download_req->executeNow(); +- +- if(download_req->hadDownloadError()) +- { +- // Assume that the server address is wrong. And retry +- // with the default server address again (just in case +- // that a redirect went wrong, or a wrong/incorrect +- // address somehow made its way into the config file. +- // We need a new object, since the state of the old +- // download request is now done. +- download_req = std::make_shared(m_news_filename); +- +- // make sure the new server address is actually used +- download_req->setAddonsURL(m_news_filename); +- download_req->executeNow(); +- +- if(download_req->hadDownloadError()) +- { +- // This message must be translated dynamically in the main menu. +- // If it would be translated here, it wouldn't be translated +- // if the language is changed in the menu! +- error_message = N_("Error downloading news: '%s'."); +- const char *const curl_error = download_req->getDownloadErrorMessage(); +- error_message = StringUtils::insertValues(error_message, curl_error); +- addons_manager->setErrorState(); +- setErrorMessage(error_message); +- Log::error("news", core::stringc(error_message).c_str()); +- } // hadDownloadError +- } // hadDownloadError +- +- if(!download_req->hadDownloadError()) +- UserConfigParams::m_news_last_updated = StkTime::getTimeSinceEpoch(); +- +- // No download error, update the last_updated time value, and delete +- // the potentially loaded xml file +- delete xml; +- xml = NULL; +- } // hadDownloadError +- +- if(xml) delete xml; +- xml = NULL; +- +- // Process new.xml now. +- if(file_manager->fileExists(xml_file)) +- { +- xml = new XMLNode(xml_file); +- checkRedirect(xml); +- updateNews(xml, xml_file); +- if (addons_manager) +- addons_manager->init(xml, m_force_refresh); +- delete xml; +- } +- +- // We can't finish stk (esp. delete the file manager) before +- // this part of the code is reached (since otherwise the file +- // manager might be access after it was deleted). +- CanBeDeleted::setCanBeDeleted(); + } // downloadNews + + // --------------------------------------------------------------------------- +@@ -222,57 +82,6 @@ + */ + void NewsManager::checkRedirect(const XMLNode *xml) + { +- if (stk_config->m_allow_news_redirects) +- { +- // NOTE: Before 0.10 there were just two redirect attributes +- // "redirect" - addons server (contains /dl/xml/ path) +- // "hw-report-server" - hardware report server +- +- // Redirect for the new addons server +- std::string new_addons_server; +- if (xml->get("redirect-server-addons", &new_addons_server) == 1 && !new_addons_server.empty()) +- { +- if (UserConfigParams::logAddons()) +- { +- Log::info("[Addons]", "Current addons server: '%s'\n [Addons] New addons server: '%s'", +- stk_config->m_server_addons.c_str(), new_addons_server.c_str()); +- } +- stk_config->m_server_addons = new_addons_server; +- } +- +- // Redirect for the API server +- std::string new_api_server; +- if (xml->get("redirect-server-api", &new_api_server) == 1 && !new_api_server.empty()) +- { +- if (UserConfigParams::logAddons()) +- { +- Log::info("[Addons]", "Current API server: '%s'\n [Addons] New API server: '%s'", +- stk_config->m_server_api.c_str(), new_api_server.c_str()); +- } +- stk_config->m_server_api = new_api_server; +- } +- +- // Redirect for the hardware report server +- std::string new_hardware_report_server; +- if (xml->get("redirect-server-hardware-report", &new_hardware_report_server) == 1 && !new_hardware_report_server.empty()) +- { +- Log::info("hw report", "Current hardware report server: '%s'\n [hw report] New hardware report server: '%s'", +- stk_config->m_server_hardware_report.c_str(), new_hardware_report_server.c_str()); +- stk_config->m_server_hardware_report = new_hardware_report_server; +- } +- } +- +- // Update menu/game polling interval +- float polling; +- if (xml->get("menu-polling-interval", &polling)) +- { +- RequestManager::get()->setMenuPollingInterval(polling); +- } +- if (xml->get("game-polling-interval", &polling)) +- { +- RequestManager::get()->setGamePollingInterval(polling); +- } +- + } // checkRedirect + + // ---------------------------------------------------------------------------- +@@ -285,68 +94,6 @@ + */ + void NewsManager::updateNews(const XMLNode *xml, const std::string &filename) + { +- +- m_all_news_messages = ""; +- const core::stringw message_divider=" +++ "; +- // This function is also called in case of a reinit, so +- // we have to delete existing news messages here first. +- m_news.lock(); +- m_news.getData().clear(); +- m_news.unlock(); +- bool error = true; +- int frequency=0; +- if(xml->get("frequency", &frequency)) +- UserConfigParams::m_news_frequency = frequency; +- +- for(unsigned int i=0; igetNumNodes(); i++) +- { +- const XMLNode *node = xml->getNode(i); +- if(node->getName()!="message") continue; +- core::stringw news; +- node->get("content", &news); +- int id=-1; +- node->get("id", &id); +- bool important=false; +- node->get("important", &important); +- +- std::string cond; +- node->get("condition", &cond); +- if(!conditionFulfilled(cond)) +- continue; +- m_news.lock(); +- { +- +- if(!important) +- m_all_news_messages += m_all_news_messages.size()>0 +- ? message_divider + news +- : news; +- else +- // Define this if news messages should be removed +- // after being shown a certain number of times. +- { +- NewsMessage n(news, id, important); +- m_news.getData().push_back(n); +- } +- } // m_news.lock() +- m_news.unlock(); +- +- error = false; +- } +- if(error) +- { +- // In case of an error (e.g. the file only contains +- // an error message from the server), delete the file +- // so that it is not read again (and this will force +- // a new read on the next start, instead of waiting +- // for some time). +- file_manager->removeFile(filename); +- NewsMessage n(_("Failed to connect to the SuperTuxKart add-ons server."), -1); +- m_news.lock(); +- m_news.getData().push_back(n); +- +- m_all_news_messages=""; +- m_news.unlock(); +- } + } // updateNews + + // ---------------------------------------------------------------------------- +@@ -356,10 +103,6 @@ + */ + void NewsManager::addNewsMessage(const core::stringw &s) + { +- NewsMessage n(s, -1); +- m_news.lock(); +- m_news.getData().push_back(n); +- m_news.unlock(); + } // addNewsMessage + // ---------------------------------------------------------------------------- + /** Returns the important message with the smallest id that has not been +@@ -368,30 +111,7 @@ + */ + const core::stringw NewsManager::getImportantMessage() + { +- int index = -1; +- m_news.lock(); +- for(unsigned int i=0; iUserConfigParams::m_last_important_message_id && +- (index == -1 || +- m.getMessageId() < m_news.getData()[index].getMessageId() ) ) +- { +- index = i; +- } // if new unshown important message with smaller message id +- } + core::stringw message(""); +- if(index>=0) +- { +- const NewsMessage &m = m_news.getData()[index]; +- message = m.getNews(); +- UserConfigParams::m_last_important_message_id = m.getMessageId(); +- +- } +- m_news.unlock(); +- + return message; + } // getImportantMessage + +@@ -403,35 +123,7 @@ + */ + const core::stringw NewsManager::getNextNewsMessage() + { +- // Only display error message in case of a problem. +- if(m_error_message.getAtomic().size()>0) +- return _(m_error_message.getAtomic().c_str()); +- +- m_news.lock(); +- if(m_all_news_messages.size()>0) +- { +- // Copy the news message while it is locked. +- core::stringw anm = m_all_news_messages; +- m_news.unlock(); +- return anm; +- } +- +- if(m_news.getData().size()==0) +- { +- // Lock +- m_news.unlock(); +- return ""; +- } +- + core::stringw m(""); +- { +- m_current_news_message++; +- if(m_current_news_message >= (int)m_news.getData().size()) +- m_current_news_message = 0; +- +- m = m_news.getData()[m_current_news_message].getNews(); +- } +- m_news.unlock(); + return _(m.c_str()); + } // getNextNewsMessage + +@@ -447,66 +139,6 @@ + */ + bool NewsManager::conditionFulfilled(const std::string &cond) + { +- std::vector cond_list; +- cond_list = StringUtils::split(cond, ';'); +- for(unsigned int i=0; i cond = StringUtils::split(cond_list[i],' '); +- if(cond.size()!=3) +- { +- Log::warn("NewsManager", "Invalid condition '%s' - assumed to " +- "be true.", cond_list[i].c_str()); +- continue; +- } +- // Check for stkversion comparisons +- // ================================ +- if(cond[0]=="stkversion") +- { +- int news_version = StringUtils::versionToInt(cond[2]); +- int stk_version = StringUtils::versionToInt(STK_VERSION); +- if(cond[1]=="=") +- { +- if(stk_version!=news_version) return false; +- continue; +- } +- if(cond[1]=="<") +- { +- if(stk_version>=news_version) return false; +- continue; +- } +- if(cond[1]==">") +- { +- if(stk_version<=news_version) return false; +- continue; +- } +- Log::warn("NewsManager", "Invalid comparison in condition '%s' - " +- "assumed true.", cond_list[i].c_str()); +- } +- // Check for addons not installed +- // ============================== +- else if(cond[1]=="not" && cond[2]=="installed") +- { +- // The addons_manager cannot be accessed, since it's +- // being initialised after the news manager. So a simple +- // test is made to see if the directory exists. It is +- // necessary to check for karts and tracks separately, +- // since it's not possible to know if the addons is +- // a kart or a track. +- const std::string dir=file_manager->getAddonsDir(); +- if(file_manager->fileExists(dir+"/karts/"+cond[0])) +- return false; +- if(file_manager->fileExists(dir+"/tracks/"+cond[0])) +- return false; +- continue; +- } +- else +- { +- Log::warn("NewsManager", "Invalid condition '%s' - assumed to " +- "be true.", cond_list[i].c_str()); +- continue; +- } +- +- } // for i < cond_list + return true; + } // conditionFulfilled + +--- a/src/states_screens/main_menu_screen.cpp 2020-08-28 10:16:23.000000000 +0200 ++++ b/src/states_screens/main_menu_screen.cpp 2023-12-09 23:41:26.040123548 +0100 +@@ -19,7 +19,6 @@ + + #include "states_screens/main_menu_screen.hpp" + +-#include "addons/news_manager.hpp" + #include "challenges/story_mode_timer.hpp" + #include "challenges/unlock_manager.hpp" + #include "config/player_manager.hpp" +@@ -41,7 +40,6 @@ + #include "modes/demo_world.hpp" + #include "network/network_config.hpp" + #include "online/request_manager.hpp" +-#include "states_screens/addons_screen.hpp" + #include "states_screens/credits.hpp" + #include "states_screens/cutscene_general.hpp" + #include "states_screens/grand_prix_editor_screen.hpp" +@@ -81,9 +79,6 @@ + + void MainMenuScreen::loadedFromFile() + { +- LabelWidget* w = getWidget("info_addons"); +- w->setScrollSpeed(GUIEngine::getFontHeight() / 2); +- + RibbonWidget* rw_top = getWidget("menu_toprow"); + assert(rw_top != NULL); + +@@ -148,18 +143,6 @@ + input_manager->getDeviceManager()->clearLatestUsedDevice(); + + #ifndef SERVER_ONLY +- if (addons_manager && addons_manager->isLoading()) +- { +- IconButtonWidget* w = getWidget("addons"); +- w->setActive(false); +- w->resetAllBadges(); +- w->setBadge(LOADING_BADGE); +- } +- +- LabelWidget* w = getWidget("info_addons"); +- const core::stringw &news_text = NewsManager::get()->getNextNewsMessage(); +- w->setText(news_text, true); +- w->update(0.01f); + #endif + + RibbonWidget* r = getWidget("menu_bottomrow"); +@@ -185,41 +168,6 @@ + void MainMenuScreen::onUpdate(float delta) + { + #ifndef SERVER_ONLY +- NewsManager::get()->joinDownloadThreadIfExit(); +- +- IconButtonWidget* addons_icon = getWidget("addons"); +- if (addons_icon != NULL) +- { +- if (addons_manager->wasError()) +- { +- addons_icon->setActive(true); +- addons_icon->resetAllBadges(); +- addons_icon->setBadge(BAD_BADGE); +- } +- else if (addons_manager->isLoading() && UserConfigParams::m_internet_status +- == Online::RequestManager::IPERM_ALLOWED) +- { +- // Addons manager is still initialising/downloading. +- addons_icon->setActive(false); +- addons_icon->resetAllBadges(); +- addons_icon->setBadge(LOADING_BADGE); +- } +- else +- { +- addons_icon->setActive(true); +- addons_icon->resetAllBadges(); +- } +- // maybe add a new badge when not allowed to access the net +- } +- +- LabelWidget* w = getWidget("info_addons"); +- w->update(delta); +- if(w->scrolledOff()) +- { +- const core::stringw &news_text = NewsManager::get()->getNextNewsMessage(); +- w->setText(news_text, true); +- } +- + PlayerProfile *player = PlayerManager::getCurrentPlayer(); + if (!player) + return; +@@ -560,31 +508,6 @@ + } + OnlineScreen::getInstance()->push(); + } +- else if (selection == "addons") +- { +- // Don't go to addons if there is no internet, unless some addons are +- // already installed (so that you can delete addons without being online). +- if(UserConfigParams::m_internet_status!=RequestManager::IPERM_ALLOWED) +- { +- if (!addons_manager->anyAddonsInstalled()) +- { +- new MessageDialog(_("You can not download addons without internet access. " +- "If you want to download addons, go in the options menu, " +- "and check \"Connect to the Internet\".")); +- return; +- } +- else +- { +- AddonsScreen::getInstance()->push(); +- new MessageDialog(_("You can not download addons without internet access. " +- "If you want to download addons, go in the options menu, " +- "and check \"Connect to the Internet\".\n\n" +- "You can however delete already downloaded addons.")); +- return; +- } +- } +- AddonsScreen::getInstance()->push(); +- } + else if (selection == "gpEditor") + { + GrandPrixEditorScreen::getInstance()->push(); +@@ -608,25 +531,6 @@ + void MainMenuScreen::onDisabledItemClicked(const std::string& item) + { + #ifndef SERVER_ONLY +- if (item == "addons") +- { +- if (UserConfigParams::m_internet_status != RequestManager::IPERM_ALLOWED) +- { +- new MessageDialog( _("The add-ons module is currently disabled in " +- "the Options screen") ); +- } +- else if (addons_manager->wasError()) +- { +- new MessageDialog( _("Sorry, an error occurred while contacting " +- "the add-ons website. Make sure you are " +- "connected to the Internet and that " +- "SuperTuxKart is not blocked by a firewall")); +- } +- else if (addons_manager->isLoading()) +- { +- new MessageDialog( _("Please wait while the add-ons are loading")); +- } +- } + #endif + } // onDisabledItemClicked + +--- a/src/io/file_manager.cpp 1990-01-01 01:00:00.000000000 +0100 ++++ b/src/io/file_manager.cpp 2023-12-10 16:28:49.560026623 +0100 +@@ -1090,18 +1090,6 @@ + "falling back to '.'.", m_addons_dir.c_str()); + m_addons_dir = "./"; + } +- +- if (!checkAndCreateDirectory(m_addons_dir + "icons/")) +- { +- Log::error("FileManager", "Failed to create add-ons icon dir at '%s'.", +- (m_addons_dir + "icons/").c_str()); +- } +- if (!checkAndCreateDirectory(m_addons_dir + "tmp/")) +- { +- Log::error("FileManager", "Failed to create add-ons tmp dir at '%s'.", +- (m_addons_dir + "tmp/").c_str()); +- } +- + } // checkAndCreateAddonsDir + + // ---------------------------------------------------------------------------- + +--- a/data/gui/screens/main_menu.stkgui 2020-08-28 10:16:23.000000000 +0200 ++++ b/data/gui/screens/main_menu.stkgui 2023-12-10 00:11:36.830139076 +0100 +@@ -16,9 +16,6 @@ + +- + + + diff --git a/surf/PKGBUILD b/surf/PKGBUILD new file mode 100644 index 0000000..a1318cf --- /dev/null +++ b/surf/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=surf +pkgver=2.1 +pkgrel=2 +pkgdesc="A simple web browser based on WebKit/GTK+." +arch=('i686' 'x86_64') +url='https://surf.suckless.org/' +license=('Expat') +depends=('webkitgtk' 'gcr' 'xenocara-xprop') +optdepends=('dmenu: URL-bar' + 'ca-certificates: SSL verification' + 'xterm: default download handler' + 'curl: default download handler' + 'tabbed: tabbed frontend') +source=("https://dl.suckless.org/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "config.h") +sha512sums=('06f31f683a941d9a587d908ae7f6949255937b0b0c9c133a18c6fa753c7da75de267adda1c83dd9ba0a8535e2b6d4ff2b5408cc5e8a2e315d4198fe68df5db12' + 'a49cc3ef85c705290fdfa02bfdd03ac51f79fdf57be20014c67bb17e9e5b0e770516cc5a28b0d26ff996db0c03de0a37a38e06065df5acee25babdf8453770e8') + +prepare() { + cd $pkgname-$pkgver + cp "$srcdir/config.h" config.h +} + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm0644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/surf/config.h b/surf/config.h new file mode 100644 index 0000000..ef44721 --- /dev/null +++ b/surf/config.h @@ -0,0 +1,192 @@ +/* modifier 0 means no modifier */ +static int surfuseragent = 1; /* Append Surf version to default WebKit user agent */ +static char *fulluseragent = ""; /* Or override the whole user agent string */ +static char *scriptfile = "~/.surf/script.js"; +static char *styledir = "~/.surf/styles/"; +static char *certdir = "~/.surf/certificates/"; +static char *cachedir = "~/.surf/cache/"; +static char *cookiefile = "~/.surf/cookies.txt"; + +/* Webkit default features */ +/* Highest priority value will be used. + * Default parameters are priority 0 + * Per-uri parameters are priority 1 + * Command parameters are priority 2 + */ +static Parameter defconfig[ParameterLast] = { + /* parameter Arg value priority */ + [AccessMicrophone] = { { .i = 0 }, }, + [AccessWebcam] = { { .i = 0 }, }, + [Certificate] = { { .i = 0 }, }, + [CaretBrowsing] = { { .i = 0 }, }, + [CookiePolicies] = { { .v = "@Aa" }, }, + [DefaultCharset] = { { .v = "UTF-8" }, }, + [DiskCache] = { { .i = 1 }, }, + [DNSPrefetch] = { { .i = 0 }, }, + [Ephemeral] = { { .i = 0 }, }, + [FileURLsCrossAccess] = { { .i = 0 }, }, + [FontSize] = { { .i = 12 }, }, + [FrameFlattening] = { { .i = 0 }, }, + [Geolocation] = { { .i = 0 }, }, + [HideBackground] = { { .i = 0 }, }, + [Inspector] = { { .i = 0 }, }, + [Java] = { { .i = 1 }, }, + [JavaScript] = { { .i = 1 }, }, + [KioskMode] = { { .i = 0 }, }, + [LoadImages] = { { .i = 1 }, }, + [MediaManualPlay] = { { .i = 1 }, }, + [PreferredLanguages] = { { .v = (char *[]){ NULL } }, }, + [RunInFullscreen] = { { .i = 0 }, }, + [ScrollBars] = { { .i = 1 }, }, + [ShowIndicators] = { { .i = 1 }, }, + [SiteQuirks] = { { .i = 1 }, }, + [SmoothScrolling] = { { .i = 0 }, }, + [SpellChecking] = { { .i = 0 }, }, + [SpellLanguages] = { { .v = ((char *[]){ "en_US", NULL }) }, }, + [StrictTLS] = { { .i = 1 }, }, + [Style] = { { .i = 1 }, }, + [WebGL] = { { .i = 0 }, }, + [ZoomLevel] = { { .f = 1.0 }, }, +}; + +static UriParameters uriparams[] = { + { "(://|\\.)suckless\\.org(/|$)", { + [JavaScript] = { { .i = 0 }, 1 }, + }, }, +}; + +/* default window size: width, height */ +static int winsize[] = { 800, 600 }; + +static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | + WEBKIT_FIND_OPTIONS_WRAP_AROUND; + +#define PROMPT_GO "Go:" +#define PROMPT_FIND "Find:" + +/* SETPROP(readprop, setprop, prompt)*/ +#define SETPROP(r, s, p) { \ + .v = (const char *[]){ "/bin/sh", "-c", \ + "prop=\"$(printf '%b' \"$(xprop -id $1 $2 " \ + "| sed \"s/^$2(STRING) = //;s/^\\\"\\(.*\\)\\\"$/\\1/\")\" " \ + "| dmenu -p \"$4\" -w $1)\" && xprop -id $1 -f $3 8s -set $3 \"$prop\"", \ + "surf-setprop", winid, r, s, p, NULL \ + } \ +} + +/* DOWNLOAD(URI, referer) */ +#define DOWNLOAD(u, r) { \ + .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\ + "curl -g -L -J -O -A \"$1\" -b \"$2\" -c \"$2\"" \ + " -e \"$3\" \"$4\"; read", \ + "surf-download", useragent, cookiefile, r, u, NULL \ + } \ +} + +/* PLUMB(URI) */ +/* This called when some URI which does not begin with "about:", + * "http://" or "https://" should be opened. + */ +#define PLUMB(u) {\ + .v = (const char *[]){ "/bin/sh", "-c", \ + "xdg-open \"$0\"", u, NULL \ + } \ +} + +/* VIDEOPLAY(URI) */ +#define VIDEOPLAY(u) {\ + .v = (const char *[]){ "/bin/sh", "-c", \ + "mpv --really-quiet \"$0\"", u, NULL \ + } \ +} + +/* styles */ +/* + * The iteration will stop at the first match, beginning at the beginning of + * the list. + */ +static SiteSpecific styles[] = { + /* regexp file in $styledir */ + { ".*", "default.css" }, +}; + +/* certificates */ +/* + * Provide custom certificate for urls + */ +static SiteSpecific certs[] = { + /* regexp file in $certdir */ + { "://suckless\\.org/", "suckless.org.crt" }, +}; + +#define MODKEY GDK_CONTROL_MASK + +/* hotkeys */ +/* + * If you use anything else but MODKEY and GDK_SHIFT_MASK, don't forget to + * edit the CLEANMASK() macro. + */ +static Key keys[] = { + /* modifier keyval function arg */ + { MODKEY, GDK_KEY_g, spawn, SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GO) }, + { MODKEY, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) }, + { MODKEY, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) }, + + { 0, GDK_KEY_Escape, stop, { 0 } }, + { MODKEY, GDK_KEY_c, stop, { 0 } }, + + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_r, reload, { .i = 1 } }, + { MODKEY, GDK_KEY_r, reload, { .i = 0 } }, + + { MODKEY, GDK_KEY_l, navigate, { .i = +1 } }, + { MODKEY, GDK_KEY_h, navigate, { .i = -1 } }, + + /* vertical and horizontal scrolling, in viewport percentage */ + { MODKEY, GDK_KEY_j, scrollv, { .i = +10 } }, + { MODKEY, GDK_KEY_k, scrollv, { .i = -10 } }, + { MODKEY, GDK_KEY_space, scrollv, { .i = +50 } }, + { MODKEY, GDK_KEY_b, scrollv, { .i = -50 } }, + { MODKEY, GDK_KEY_i, scrollh, { .i = +10 } }, + { MODKEY, GDK_KEY_u, scrollh, { .i = -10 } }, + + + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_j, zoom, { .i = -1 } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_k, zoom, { .i = +1 } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_q, zoom, { .i = 0 } }, + { MODKEY, GDK_KEY_minus, zoom, { .i = -1 } }, + { MODKEY, GDK_KEY_plus, zoom, { .i = +1 } }, + + { MODKEY, GDK_KEY_p, clipboard, { .i = 1 } }, + { MODKEY, GDK_KEY_y, clipboard, { .i = 0 } }, + + { MODKEY, GDK_KEY_n, find, { .i = +1 } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_n, find, { .i = -1 } }, + + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_p, print, { 0 } }, + { MODKEY, GDK_KEY_t, showcert, { 0 } }, + + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_a, togglecookiepolicy, { 0 } }, + { 0, GDK_KEY_F11, togglefullscreen, { 0 } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_o, toggleinspector, { 0 } }, + + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_c, toggle, { .i = CaretBrowsing } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_f, toggle, { .i = FrameFlattening } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_g, toggle, { .i = Geolocation } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_s, toggle, { .i = JavaScript } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_i, toggle, { .i = LoadImages } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_b, toggle, { .i = ScrollBars } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_t, toggle, { .i = StrictTLS } }, + { MODKEY|GDK_SHIFT_MASK, GDK_KEY_m, toggle, { .i = Style } }, +}; + +/* button definitions */ +/* target can be OnDoc, OnLink, OnImg, OnMedia, OnEdit, OnBar, OnSel, OnAny */ +static Button buttons[] = { + /* target event mask button function argument stop event */ + { OnLink, 0, 2, clicknewwindow, { .i = 0 }, 1 }, + { OnLink, MODKEY, 2, clicknewwindow, { .i = 1 }, 1 }, + { OnLink, MODKEY, 1, clicknewwindow, { .i = 1 }, 1 }, + { OnAny, 0, 8, clicknavigate, { .i = -1 }, 1 }, + { OnAny, 0, 9, clicknavigate, { .i = +1 }, 1 }, + { OnMedia, MODKEY, 1, clickexternplayer, { 0 }, 1 }, +}; diff --git a/surfraw/PKGBUILD b/surfraw/PKGBUILD new file mode 100644 index 0000000..50fb31d --- /dev/null +++ b/surfraw/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=surfraw +pkgver=2.3.0 +_debver=2.3.0 +_debrel=0.3 +pkgrel=1 +pkgdesc="Shell Users' Revolutionary Front Rage Against the Web" +arch=('any') +url='https://gitlab.com/surfraw/Surfraw/' +license=('Public-Domain') +depends=('perl') +makedepends=('quilt') +install=$pkgname.install +backup=('etc/xdg/surfraw/conf' + 'etc/xdg/surfraw/bookmarks') +source=($pkgname-$pkgver.tar.gz::https://gitlab.com/surfraw/Surfraw/-/archive/$pkgname-$pkgver/Surfraw-$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/s/surfraw/surfraw_$_debver-$_debrel.debian.tar.xz) +sha512sums=('bb2ac06f2c9f1d14a1ddb9134fe82854a99bb9a5f1bd84093df7071d5c2662928234762cdc75d4530a788d618c3e7adbe962b3520a9de4c2b092ea435d1a9b27' + '1db17084492896679e8a41a8eae07e18af2bd52325f63208e935d435d4761c518768b57b461c5317d0ee6b7a2b3e3f2bbd8422b602b7b9b8946cc17fa639913c') + +prepare() { + mv Surfraw-$pkgname-$pkgver $pkgname-$pkgver + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./prebuild + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package () { + cd $pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + + # license + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/surfraw/surfraw.install b/surfraw/surfraw.install new file mode 100644 index 0000000..64812fe --- /dev/null +++ b/surfraw/surfraw.install @@ -0,0 +1,8 @@ +post_install() { +cat << EOF +==> In order to get surfraw working, set the browser, in this order: +==> Environment variables +==> /etc/xdg/surfraw/conf +==> \$HOME/.config/surfraw/conf +EOF +} diff --git a/svkbd/PKGBUILD b/svkbd/PKGBUILD new file mode 100644 index 0000000..755791d --- /dev/null +++ b/svkbd/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=svkbd +pkgver=0.4 +pkgrel=1 +pkgdesc='Simple virtual keyboard' +arch=('i686' 'x86_64') +url='http://tools.suckless.org/x/svkbd' +license=('Expat') +conflicts=('svkbd') +provides=('svkbd') +depends=('libx11' 'libxtst' 'libxft' 'libxinerama') +makedepends=('markdown') +source=("https://dl.suckless.org/tools/${pkgname}-${pkgver}.tar.gz") +sha512sums=('93b92b92513a0844d6e14c1ddd8cf350ba8d1eddc60cd45e2f1bed0b8144323c193862f831c300f68b2707400ded3597f54e2348800e1bc553f45e64553d20f2') + +build() { + cd ${pkgname}-${pkgver} + make + markdown README.md > README.html +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" PREFIX='/usr/' install + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" + install -Dm644 README.md -t "${pkgdir}/usr/share/doc/$pkgname" + install -Dm644 README.html -t "${pkgdir}/usr/share/doc/$pkgname" +} diff --git a/swaks/PKGBUILD b/swaks/PKGBUILD new file mode 100644 index 0000000..d120b46 --- /dev/null +++ b/swaks/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=swaks +pkgver=20201014.0 +pkgrel=1 +_debver=${pkgver} +_debrel=1 +pkgdesc='Swiss Army Knife SMTP; Command line SMTP testing, including TLS and AUTH' +arch=('any') +url="https://jetmore.org/john/code/${pkgname}/" +license=('GPL-2') +depends=('perl-net-dns' 'perl-net-ssleay') +makedepends=('quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/jetmore/swaks/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/${pkgname::1}/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('3c4b8dfcb3574af94ac75a31c619960d9578ba5fb2a1da46de1f8b92f8c6fe726e4d763f1fcf7b0fbb46b9262ad0136295852f7bf53c663979c53693a65270e0' + '4d8462fc5a5e0a1e9deed3aa55a89ef9e111994943188f4599fcf533d12ea65d32e2b6c45084cdd0b13af7c2607652fca77ba27215a26ef340bdf5eab0b9ede2') + +prepare() { + cd "${pkgname}-${pkgver}" + + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd "${pkgname}-${pkgver}" + install -m755 -D "${pkgname}" "$pkgdir/usr/bin/${pkgname}" + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" + cd doc + pod2man base.pod "${pkgname}.1" + install -m644 -D "${pkgname}.1" "$pkgdir/usr/share/man/man1/${pkgname}.1" +} diff --git a/swig/PKGBUILD b/swig/PKGBUILD new file mode 100644 index 0000000..e12c2b2 --- /dev/null +++ b/swig/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=swig +pkgver=4.0.2 +_debver=4.0.2 +_debrel=1 +pkgrel=0 +pkgdesc="Generate scripting interfaces to C/C++ code" +arch=('i686' 'x86_64') +url="http://www.swig.org/" +license=('GPL-3') +depends=('pcre' 'gcc-libs') +makedepends=('quilt') +source=(https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/s/swig/swig_$_debver-$_debrel.debian.tar.xz + remove-csharp-and-java-support.patch) +sha512sums=('05e7da70ce6d9a733b96c0bcfa3c1b82765bd859f48c74759bbf4bb1467acb1809caa310cba5e2b3280cd704fca249eaa0624821dffae1d2a75097c7f55d14ed' + 'eccea9167f36e692da1b605594c81ef03d4a65602cf50db91128379facd8d3b1ce148f4d5be7b4c68b81c043fe780c9b03815c3f7ba83b3274d468a0e6b7bb43' + 'b4a9bf5c727acb7646abbcdf9de23520ab8a57bda3f07c689c3a15eff1ce54d57fbcbcb552418d3df00b8da349bbcf968fa1e860e9d229a7821a91c6e528c887') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -p1 -i ../remove-csharp-and-java-support.patch + ./autogen.sh +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + for i in LICENSE{,-GPL,-UNIVERSITIES}; do + install -D -m644 ${i} "${pkgdir}"/usr/share/licenses/${pkgname}/${i} + done +} diff --git a/swig/remove-csharp-and-java-support.patch b/swig/remove-csharp-and-java-support.patch new file mode 100644 index 0000000..e2a85b0 --- /dev/null +++ b/swig/remove-csharp-and-java-support.patch @@ -0,0 +1,948 @@ +diff --git a/Examples/Makefile.in b/Examples/Makefile.in +index 87386f7..faa57f8 100644 +--- a/Examples/Makefile.in ++++ b/Examples/Makefile.in +@@ -597,75 +597,6 @@ guile_clean: + rm -f *.@OBJEXT@ *$(GUILE_SO) + + ################################################################## +-##### JAVA ###### +-################################################################## +- +-# You need to set this variable to the java directories containing the +-# files "jni.h" and "md.h" +-# usually something like /usr/java/include and /usr/java/include/. +-JAVA_INCLUDE= @JAVAINC@ +- +-# Extra Java specific dynamic linking options +-JAVA_DLNK = @JAVADYNAMICLINKING@ +-JAVA_LIBPREFIX = @JAVALIBRARYPREFIX@ +-JAVASO =@JAVASO@ +-JAVALDSHARED = @JAVALDSHARED@ +-JAVACXXSHARED = @JAVACXXSHARED@ +-JAVACFLAGS = @JAVACFLAGS@ +-JAVAFLAGS = @JAVAFLAGS@ +-JAVA = @JAVA@ +-JAVAC = @JAVAC@ -d . +- +-# ---------------------------------------------------------------- +-# Build a java dynamically loadable module (C) +-# ---------------------------------------------------------------- +- +-java: $(SRCDIR_SRCS) +- $(SWIG) -java $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH) +- $(CC) -c $(CCSHARED) $(CPPFLAGS) $(CFLAGS) $(JAVACFLAGS) $(SRCDIR_SRCS) $(ISRCS) $(INCLUDES) $(JAVA_INCLUDE) +- $(JAVALDSHARED) $(CFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(JAVA_DLNK) $(LIBS) -o $(JAVA_LIBPREFIX)$(TARGET)$(JAVASO) +- +-# ---------------------------------------------------------------- +-# Build a java dynamically loadable module (C++) +-# ---------------------------------------------------------------- +- +-java_cpp: $(SRCDIR_SRCS) +- $(SWIG) -java -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH) +- $(CXX) -c $(CCSHARED) $(CPPFLAGS) $(CXXFLAGS) $(JAVACFLAGS) $(SRCDIR_SRCS) $(SRCDIR_CXXSRCS) $(ICXXSRCS) $(INCLUDES) $(JAVA_INCLUDE) +- $(JAVACXXSHARED) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(JAVA_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(JAVA_LIBPREFIX)$(TARGET)$(JAVASO) +- +-# ---------------------------------------------------------------- +-# Compile java files +-# ---------------------------------------------------------------- +- +-java_compile: $(SRCDIR_SRCS) +- $(COMPILETOOL) $(JAVAC) $(addprefix $(SRCDIR),$(JAVASRCS)) +- +-# ----------------------------------------------------------------- +-# Run java example +-# ----------------------------------------------------------------- +- +-java_run: +- env LD_LIBRARY_PATH=$$PWD $(RUNTOOL) $(JAVA) $(JAVAFLAGS) $(RUNME) $(RUNPIPE) +- +-# ----------------------------------------------------------------- +-# Version display +-# ----------------------------------------------------------------- +- +-java_version: +- $(JAVA) -version +- $(JAVAC) -version || echo "Unknown javac version" +- +-# ----------------------------------------------------------------- +-# Cleaning the java examples +-# ----------------------------------------------------------------- +- +-java_clean: +- rm -f *_wrap* *~ .~* *.class `find . -name \*.java | grep -v $(RUNME).java` +- rm -f core @EXTRA_CLEAN@ +- rm -f *.@OBJEXT@ *@JAVASO@ +- +-################################################################## + ##### JAVASCRIPT ###### + ################################################################## + +@@ -776,61 +707,6 @@ javascript_clean: + cd $(ROOT_DIR)/Tools/javascript && $(MAKE) -s clean + + ################################################################## +-##### ANDROID ###### +-################################################################## +- +-ANDROID = @ANDROID@ +-ANDROID_NDK_BUILD = @NDKBUILD@ +-ANDROID_ADB = @ADB@ +-ANT = @ANT@ +-TARGETID = 1 +- +-# ---------------------------------------------------------------- +-# Build an Android dynamically loadable module (C) +-# ---------------------------------------------------------------- +- +-android: $(SRCDIR_SRCS) +- $(ANDROID) $(SILENT_OPTION) update project --target $(TARGETID) --name $(PROJECTNAME) --path . +- $(SWIG) -java $(SWIGOPT) -o $(INTERFACEDIR)$(TARGET)_wrap.c $(INTERFACEPATH) +- +$(ANDROID_NDK_BUILD) $(SILENT_PIPE) +- $(ANT) $(ANT_QUIET) debug +- +-# ---------------------------------------------------------------- +-# Build an Android dynamically loadable module (C++) +-# ---------------------------------------------------------------- +- +-android_cpp: $(SRCDIR_SRCS) +- $(ANDROID) $(SILENT_OPTION) update project --target $(TARGETID) --name $(PROJECTNAME) --path . +- $(SWIG) -java -c++ $(SWIGOPT) -o $(INTERFACEDIR)$(TARGET)_wrap.cpp $(INTERFACEPATH) +- +$(ANDROID_NDK_BUILD) $(SILENT_PIPE) +- $(ANT) $(ANT_QUIET) debug +- +-# ---------------------------------------------------------------- +-# Android install +-# ---------------------------------------------------------------- +- +-android_install: +- -$(ANDROID_ADB) uninstall $(PACKAGENAME) +- $(ANDROID_ADB) install $(INSTALLOPTIONS) bin/$(PROJECTNAME)-debug.apk +- +-# ----------------------------------------------------------------- +-# Version display +-# ----------------------------------------------------------------- +- +-android_version: +- $(ANDROID_ADB) version +- +-# ----------------------------------------------------------------- +-# Cleaning the Android examples +-# ----------------------------------------------------------------- +- +-android_clean: +- test -n "$(SRCDIR)" && cd $(SRCDIR) ; $(ANT) -q -logfile /dev/null clean +- rm -f $(INTERFACEDIR)$(TARGET)_wrap.* +- rm -f `find $(PACKAGEDIR) -name \*.java | grep -v $(PROJECTNAME).java` +- rm -rf obj +- +-################################################################## + ##### MZSCHEME ###### + ################################################################## + +@@ -1106,78 +982,6 @@ php_clean: + rm -f *.@OBJEXT@ *$(PHP_SO) + + ################################################################## +-##### CSHARP ###### +-################################################################## +- +-# Extra CSharp specific dynamic linking options +-CSHARP_DLNK = @CSHARPDYNAMICLINKING@ +-CSHARP_LIBPREFIX = @CSHARPLIBRARYPREFIX@ +-CSHARPCOMPILER = @CSHARPCOMPILER@ +-CSHARPCILINTERPRETER = @CSHARPCILINTERPRETER@ +-CSHARPCILINTERPRETER_FLAGS = @CSHARPCILINTERPRETER_FLAGS@ +-CSHARPCFLAGS = @CSHARPCFLAGS@ +-CSHARPFLAGS = +-CSHARPOPTIONS = +-CSHARPSO = @CSHARPSO@ +-CSHARP_RUNME = ./$(RUNME).exe +- +-# ---------------------------------------------------------------- +-# Build a CSharp dynamically loadable module (C) +-# ---------------------------------------------------------------- +- +-csharp: $(SRCDIR_SRCS) +- $(SWIG) -csharp $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH) +- $(CC) -c $(CCSHARED) $(CPPFLAGS) $(CFLAGS) $(CSHARPCFLAGS) $(SRCDIR_SRCS) $(ISRCS) $(INCLUDES) +- $(LDSHARED) $(CFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(CSHARP_DLNK) $(LIBS) -o $(CSHARP_LIBPREFIX)$(TARGET)$(CSHARPSO) +- +-# ---------------------------------------------------------------- +-# Build a CSharp dynamically loadable module (C++) +-# ---------------------------------------------------------------- +- +-csharp_cpp: $(SRCDIR_SRCS) +- $(SWIG) -csharp -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH) +- $(CXX) -c $(CCSHARED) $(CPPFLAGS) $(CXXFLAGS) $(CSHARPCFLAGS) $(SRCDIR_SRCS) $(SRCDIR_CXXSRCS) $(ICXXSRCS) $(INCLUDES) +- $(CXXSHARED) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(CSHARP_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(CSHARP_LIBPREFIX)$(TARGET)$(CSHARPSO) +- +-# ---------------------------------------------------------------- +-# Compile CSharp files +-# ---------------------------------------------------------------- +- +-ifneq (,$(SRCDIR)) +-SRCDIR_CSHARPSRCS = $(addprefix $(SRCDIR),$(CSHARPSRCS)) +-else +-SRCDIR_CSHARPSRCS = +-endif +- +-csharp_compile: $(SRCDIR_SRCS) +- $(COMPILETOOL) $(CSHARPCOMPILER) $(CSHARPFLAGS) $(CSHARPOPTIONS) $(CSHARPSRCS) $(SRCDIR_CSHARPSRCS) +- +-# ----------------------------------------------------------------- +-# Run CSharp example +-# ----------------------------------------------------------------- +- +-csharp_run: +- env LD_LIBRARY_PATH=$$PWD $(RUNTOOL) $(CSHARPCILINTERPRETER) $(CSHARPCILINTERPRETER_FLAGS) $(CSHARP_RUNME) $(RUNPIPE) +- +-# ----------------------------------------------------------------- +-# Version display +-# ----------------------------------------------------------------- +- +-# Version check below also works with MS csc.exe which does not understand --version +-csharp_version: +- $(CSHARPCOMPILER) --version | head -n 1 +- if test -n "$(CSHARPCILINTERPRETER)" ; then "$(CSHARPCILINTERPRETER)" --version ; fi +- +-# ----------------------------------------------------------------- +-# Cleaning the CSharp examples +-# ----------------------------------------------------------------- +- +-csharp_clean: +- rm -f *_wrap* *~ .~* $(RUNME) $(RUNME).exe *.exe.mdb gc.log `find . -name \*.cs | grep -v $(RUNME).cs` +- rm -f core @EXTRA_CLEAN@ +- rm -f *.@OBJEXT@ *@CSHARPSO@ +- +-################################################################## + ##### LUA ###### + ################################################################## + +diff --git a/Examples/index.html b/Examples/index.html +index 66885b6..a45214f 100644 +--- a/Examples/index.html ++++ b/Examples/index.html +@@ -39,7 +39,6 @@ language: +
    • Perl5 +
    • Tcl +
    • Guile +-
    • Java +
    • Mzscheme +
    • Ruby +
    +diff --git a/Makefile.in b/Makefile.in +index 39816be..61dbf88 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -62,14 +62,12 @@ docs-main: + skip-tcl = test -n "@SKIP_TCL@" + skip-perl5 = test -n "@SKIP_PERL5@" + skip-python = test -n "@SKIP_PYTHON@" +-skip-java = test -n "@SKIP_JAVA@" + skip-guile = test -n "@SKIP_GUILE@" + skip-mzscheme = test -n "@SKIP_MZSCHEME@" + skip-ruby = test -n "@SKIP_RUBY@" + skip-php = test -n "@SKIP_PHP@" + skip-ocaml = test -n "@SKIP_OCAML@" + skip-octave = test -n "@SKIP_OCTAVE@" +-skip-csharp = test -n "@SKIP_CSHARP@" + skip-lua = test -n "@SKIP_LUA@" + skip-r = test -n "@SKIP_R@" + skip-scilab = test -n "@SKIP_SCILAB@" +@@ -77,9 +75,6 @@ skip-go = test -n "@SKIP_GO@" + skip-d = test -n "@SKIP_D@" + skip-javascript = test -n "@SKIP_JAVASCRIPT@" + +-# Additional dependencies for some tests +-skip-android = test -n "@SKIP_ANDROID@" +- + # Special errors test-case + skip-errors = test -n "" + +@@ -103,14 +98,12 @@ check-aliveness: + @$(skip-tcl) || ./$(TARGET) -tcl -help + @$(skip-perl5) || ./$(TARGET) -perl -help + @$(skip-python) || ./$(TARGET) -python -help +- @$(skip-java) || ./$(TARGET) -java -help + @$(skip-guile) || ./$(TARGET) -guile -help + @$(skip-mzscheme) || ./$(TARGET) -mzscheme -help + @$(skip-ruby) || ./$(TARGET) -ruby -help + @$(skip-ocaml) || ./$(TARGET) -ocaml -help + @$(skip-octave) || ./$(TARGET) -octave -help + @$(skip-php) || ./$(TARGET) -php7 -help +- @$(skip-csharp) || ./$(TARGET) -csharp -help + @$(skip-lua) || ./$(TARGET) -lua -help + @$(skip-r) || ./$(TARGET) -r -help + @$(skip-scilab) || ./$(TARGET) -scilab -help +@@ -126,16 +119,13 @@ check-versions: \ + check-tcl-version \ + check-perl5-version \ + check-python-version \ +- check-java-version \ + check-javascript-version \ +- check-android-version \ + check-guile-version \ + check-mzscheme-version \ + check-ruby-version \ + check-ocaml-version \ + check-octave-version \ + check-php-version \ +- check-csharp-version \ + check-lua-version \ + check-r-version \ + check-scilab-version \ +@@ -160,15 +150,12 @@ check-examples: \ + check-tcl-examples \ + check-perl5-examples \ + check-python-examples \ +- check-java-examples \ +- check-android-examples \ + check-guile-examples \ + check-mzscheme-examples \ + check-ruby-examples \ + check-ocaml-examples \ + check-octave-examples \ + check-php-examples \ +- check-csharp-examples \ + check-lua-examples \ + check-r-examples \ + check-scilab-examples \ +@@ -179,15 +166,12 @@ check-examples: \ + tcl_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/tcl/check.list) + perl5_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/perl5/check.list) + python_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/python/check.list) +-java_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/java/check.list) +-android_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/android/check.list) + guile_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/guile/check.list) + mzscheme_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/mzscheme/check.list) + ruby_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/ruby/check.list) + ocaml_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/ocaml/check.list) + octave_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/octave/check.list) + php_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/php/check.list) +-csharp_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/csharp/check.list) + lua_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/lua/check.list) + r_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/r/check.list) + scilab_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/scilab/check.list) +@@ -221,14 +205,12 @@ check-test-suite: \ + check-tcl-test-suite \ + check-perl5-test-suite \ + check-python-test-suite \ +- check-java-test-suite \ + check-guile-test-suite \ + check-mzscheme-test-suite \ + check-ruby-test-suite \ + check-ocaml-test-suite \ + check-octave-test-suite \ + check-php-test-suite \ +- check-csharp-test-suite \ + check-lua-test-suite \ + check-r-test-suite \ + check-scilab-test-suite \ +@@ -268,14 +250,12 @@ all-test-suite: \ + all-tcl-test-suite \ + all-perl5-test-suite \ + all-python-test-suite \ +- all-java-test-suite \ + all-guile-test-suite \ + all-mzscheme-test-suite \ + all-ruby-test-suite \ + all-ocaml-test-suite \ + all-octave-test-suite \ + all-php-test-suite \ +- all-csharp-test-suite \ + all-lua-test-suite \ + all-r-test-suite \ + all-scilab-test-suite \ +@@ -291,14 +271,12 @@ broken-test-suite: \ + broken-tcl-test-suite \ + broken-perl5-test-suite \ + broken-python-test-suite \ +- broken-java-test-suite \ + broken-guile-test-suite \ + broken-mzscheme-test-suite \ + broken-ruby-test-suite \ + broken-ocaml-test-suite \ + broken-octave-test-suite \ + broken-php-test-suite \ +- broken-csharp-test-suite \ + broken-lua-test-suite \ + broken-r-test-suite \ + broken-scilab-test-suite \ +@@ -435,8 +413,8 @@ install-main: + @echo "Installing $(DESTDIR)$(BIN_DIR)/`echo $(TARGET_NOEXE) | sed '$(transform)'`@EXEEXT@" + @$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(BIN_DIR)/`echo $(TARGET_NOEXE) | sed '$(transform)'`@EXEEXT@ + +-lib-languages = typemaps tcl perl5 python guile java mzscheme ruby php ocaml octave \ +- csharp lua r go d javascript javascript/jsc \ ++lib-languages = typemaps tcl perl5 python guile mzscheme ruby php ocaml octave \ ++ lua r go d javascript javascript/jsc \ + javascript/v8 scilab xml + + lib-modules = std +diff --git a/Source/Makefile.am b/Source/Makefile.am +index 5cfb888..a15f06c 100644 +--- a/Source/Makefile.am ++++ b/Source/Makefile.am +@@ -41,21 +41,17 @@ eswig_SOURCES = CParse/cscanner.c \ + Doxygen/doxyparser.h \ + Doxygen/doxytranslator.cxx \ + Doxygen/doxytranslator.h \ +- Doxygen/javadoc.cxx \ +- Doxygen/javadoc.h \ + Doxygen/pydoc.cxx \ + Doxygen/pydoc.h \ + Modules/allocate.cxx \ + Modules/browser.cxx \ + Modules/contract.cxx \ +- Modules/csharp.cxx \ + Modules/d.cxx \ + Modules/directors.cxx \ + Modules/emit.cxx \ + Modules/go.cxx \ + Modules/guile.cxx \ + Modules/interface.cxx \ +- Modules/java.cxx \ + Modules/javascript.cxx \ + Modules/lang.cxx \ + Modules/lua.cxx \ +diff --git a/Source/Modules/swigmain.cxx b/Source/Modules/swigmain.cxx +index 84ac742..3f6fc8d 100644 +--- a/Source/Modules/swigmain.cxx ++++ b/Source/Modules/swigmain.cxx +@@ -26,11 +26,9 @@ + can be dynamically loaded in future versions. */ + + extern "C" { +- Language *swig_csharp(void); + Language *swig_d(void); + Language *swig_go(void); + Language *swig_guile(void); +- Language *swig_java(void); + Language *swig_javascript(void); + Language *swig_lua(void); + Language *swig_mzscheme(void); +@@ -55,11 +53,9 @@ static TargetLanguageModule modules[] = { + {"-chicken", NULL, "CHICKEN", Disabled}, + {"-clisp", NULL, "CLISP", Disabled}, + {"-cffi", NULL, "CFFI", Disabled}, +- {"-csharp", swig_csharp, "C#", Supported}, + {"-d", swig_d, "D", Supported}, + {"-go", swig_go, "Go", Supported}, + {"-guile", swig_guile, "Guile", Supported}, +- {"-java", swig_java, "Java", Supported}, + {"-javascript", swig_javascript, "Javascript", Supported}, + {"-lua", swig_lua, "Lua", Supported}, + {"-modula3", NULL, "Modula 3", Disabled}, +diff --git a/configure.ac b/configure.ac +index 22e3672..a4f0216 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1264,276 +1264,6 @@ AC_SUBST(SCILAB) + AC_SUBST(SCILABINCLUDE) + AC_SUBST(SCILABOPT) + +- +-#---------------------------------------------------------------- +-# Look for java +-#---------------------------------------------------------------- +- +-AC_ARG_WITH(java, AS_HELP_STRING([--without-java], [Disable Java]) +-AS_HELP_STRING([--with-java=path], [Set location of java executable]),[JAVABIN="$withval"], [JAVABIN="$alllang_default"]) +-AC_ARG_WITH(javac, [ --with-javac=path Set location of javac executable],[JAVACBIN="$withval"], [JAVACBIN=]) +- +-# First, check for "--without-java" or "--with-java=no". +-if test x"${JAVABIN}" = xno; then +-AC_MSG_NOTICE([Disabling Java]) +-JAVA= +-else +- +-dnl Detect everything we need for Java: java for running Java tests, javac for +-dnl compiling them and C headers for compiling C code. +-dnl +-dnl If JAVA_HOME is defined and contains everything needed, as it's supposed to, +-dnl just use it. Otherwise try to locate the necessary files in the path. +-case $host in +- *-*-cygwin*) +- dnl Ensure that JAVA_HOME is in the form we can use, it's typically set to Windows path by the installer. +- if test -n "$JAVA_HOME"; then +- JAVA_HOME=`cygpath --mixed "$JAVA_HOME"` +- fi +- dnl Java uses semicolons and not colons as separators in its classes search path under Windows. +- JAVA_CLASSPATH_SEP=";" +- ;; +- *-*-mingw*) +- if test -n "$JAVA_HOME"; then +- JAVA_HOME=`${srcdir}/Tools/convertpath -u "$JAVA_HOME"` +- fi +- JAVA_CLASSPATH_SEP=";" +- ;; +- *-*-darwin*) +- dnl Under OS X JAVA_HOME is not set by default, try to use the system default JRE. +- if test -z "$JAVA_HOME" -a -x /usr/libexec/java_home; then +- JAVA_HOME=`/usr/libexec/java_home` +- fi +- dnl The JAVA_HOME doesn't contain the JDK headers though, but they seem to +- dnl always be in the same location, according to Apple JNI documentation. +- JAVA_OSX_STD_INCDIR="/System/Library/Frameworks/JavaVM.framework/Headers" +- if test -r "$JAVA_OSX_STD_INCDIR/jni.h"; then +- JAVA_HOME_INCDIR=$JAVA_OSX_STD_INCDIR +- fi +- JAVA_CLASSPATH_SEP=":" +- ;; +- *) +- dnl Assume generic Unix. +- JAVA_CLASSPATH_SEP=":" +- ;; +-esac +- +-AC_MSG_CHECKING(for java JDK) +-if test -n "$JAVA_HOME"; then +- dnl Don't complain about missing executables/headers if they had been +- dnl explicitly overridden from the command line, but otherwise verify that we +- dnl have everything we need. +- java_home_ok=1 +- if test -z "$JAVABIN" -a ! -x "$JAVA_HOME/bin/java"; then +- AC_MSG_WARN([No java executable under JAVA_HOME.]) +- java_home_ok=0 +- fi +- if test -z "$JAVACBIN" -a ! -x "$JAVA_HOME/bin/javac"; then +- AC_MSG_WARN([No javac executable under JAVA_HOME.]) +- java_home_ok=0 +- fi +- +- dnl By default the headers are under JAVA_HOME/include, but OS X is special +- dnl and defines JAVA_HOME_INCDIR differently above. +- if test -z "$JAVA_HOME_INCDIR"; then +- JAVA_HOME_INCDIR="$JAVA_HOME/include" +- fi +- if test -z "$JAVAINCDIR" -a ! -r "$JAVA_HOME_INCDIR/jni.h"; then +- AC_MSG_WARN([No java headers under JAVA_HOME (does it point to a JDK and not just JRE?).]) +- java_home_ok=0 +- fi +- if test "$java_home_ok" = 1; then +- AC_MSG_RESULT([found (in $JAVA_HOME)]) +- else +- AC_MSG_RESULT(no) +- AC_MSG_WARN([JAVA_HOME ($JAVA_HOME) is defined but does not point to a complete JDK installation, ignoring it.]) +- JAVA_HOME= +- fi +-else +- AC_MSG_RESULT([no (JAVA_HOME is not defined)]) +-fi +- +-if test "x$JAVABIN" = xyes; then +- if test -n "$JAVA_HOME"; then +- JAVA="$JAVA_HOME/bin/java" +- else +- AC_CHECK_PROGS(JAVA, java kaffe guavac) +- fi +-else +- JAVA="$JAVABIN" +-fi +- +-if test -z "$JAVACBIN"; then +- if test -n "$JAVA_HOME"; then +- JAVAC="$JAVA_HOME/bin/javac" +- else +- AC_CHECK_PROGS(JAVAC, javac) +- fi +-else +- JAVAC="$JAVACBIN" +-fi +- +-# Check Java version: we require Java 9 or later for Doxygen tests. +-if test -n "$JAVAC"; then +- AC_MSG_CHECKING(if java version is 9 or greater) +- javac_version=`"$JAVAC" -version 2>&1` +- java_version_num=`echo $javac_version | sed -n 's/^javac //p'` +- if test -z "$java_version_num"; then +- AC_MSG_WARN([unknown format for Java version returned by "$JAVAC" ($javac_version)]) +- JAVA_SKIP_DOXYGEN_TEST_CASES=1 +- AC_MSG_RESULT(unknown) +- else +- dnl Until Java 8 version number was in format "1.x", starting from +- dnl Java 9 it's just "x". +- case $java_version_num in +- 1.*) +- JAVA_SKIP_DOXYGEN_TEST_CASES=1 +- AC_MSG_RESULT([no, disabling Doxygen tests]) +- ;; +- +- *) +- AC_MSG_RESULT(yes) +- ;; +- esac +- fi +- +- AC_SUBST(JAVA_SKIP_DOXYGEN_TEST_CASES) +-fi +- +-AC_MSG_CHECKING(for java include file jni.h) +-AC_ARG_WITH(javaincl, [ --with-javaincl=path Set location of Java include directory], [JAVAINCDIR="$withval"], [JAVAINCDIR=]) +- +-JAVAINC="" +-if test -z "$JAVAINCDIR" ; then +- if test -n "$JAVA_HOME"; then +- JAVAINCDIR="$JAVA_HOME_INCDIR" +- JAVAINC=-I\"$JAVAINCDIR\" +- else +- JAVAINCDIR="/usr/j2sdk*/include /usr/local/j2sdk*/include /usr/jdk*/include /usr/local/jdk*/include /opt/j2sdk*/include /opt/jdk*/include /usr/java/include /usr/java/j2sdk*/include /usr/java/jdk*/include /usr/local/java/include /opt/java/include /usr/include/java /usr/local/include/java /usr/lib/java/include /usr/lib/jvm/java*/include /usr/lib64/jvm/java*/include /usr/include/kaffe /usr/local/include/kaffe /usr/include" +- +- # Add in default installation directory on Windows for Cygwin +- case $host in +- *-*-cygwin* | *-*-mingw*) JAVAINCDIR="c:/Program*Files*/Java/jdk*/include d:/Program*Files*/Java/jdk*/include c:/j2sdk*/include d:/j2sdk*/include c:/jdk*/include d:/jdk*/include $JAVAINCDIR";; +- *-*-darwin*) JAVAINCDIR="$JAVA_OSX_STD_INCDIR $JAVAINCDIR";; +- *);; +- esac +- +- for d in $JAVAINCDIR ; do +- if test -r "$d/jni.h" ; then +- JAVAINCDIR=$d +- JAVAINC=-I\"$d\" +- JAVA_HOME_MAYBE="`dirname $d`" +- break +- fi +- done +- fi +-else +- if test -r "$JAVAINCDIR/jni.h" ; then +- JAVAINC=-I\"$JAVAINCDIR\" +- fi +-fi +- +-if test "$JAVAINC" = "" ; then +- AC_MSG_RESULT(not found) +-else +- AC_MSG_RESULT($JAVAINC) +- # now look for /jni_md.h +- AC_MSG_CHECKING(for java include file jni_md.h) +- JAVAMDDIR=`find "$JAVAINCDIR" -follow -name jni_md.h -print` +- if test "$JAVAMDDIR" = "" ; then +- AC_MSG_RESULT(not found) +- else +- JAVAMDDIR=-I\"`dirname "$JAVAMDDIR" | tail -1`\" +- AC_MSG_RESULT($JAVAMDDIR) +- JAVAINC="${JAVAINC} ${JAVAMDDIR}" +- fi +-fi +- +-# Auto-detecting JAVA_HOME is not so easy, below will only work up to and including jdk8 +-if test -z "$JAVA_HOME" && test -n "$JAVA_HOME_MAYBE" ; then +- AC_MSG_CHECKING(for java jdk from jni include paths) +- if test -r "$JAVA_HOME_MAYBE/lib/tools.jar" ; then +- JAVA_HOME=$JAVA_HOME_MAYBE +- AC_MSG_RESULT([$JAVA_HOME]) +- else +- AC_MSG_RESULT(not found) +- fi +-fi +- +-case $host in +-*-*-cygwin*) +- # TODO: Only use this flag if the compiler supports it, later versions of gcc no longer have it +- GCC_MNO_CYGWIN=" -mno-cygwin" +- ;; +-*) +- GCC_MNO_CYGWIN="" +- ;; +-esac +- +-# java.exe on Cygwin requires the Windows standard (Pascal) calling convention as it is a normal Windows executable and not a Cygwin built executable +-case $host in +-*-*-cygwin* | *-*-mingw*) +- if test "$GCC" = yes; then +- JAVADYNAMICLINKING="$GCC_MNO_CYGWIN -mthreads -Wl,--add-stdcall-alias" +- JAVACFLAGS="$GCC_MNO_CYGWIN -mthreads" +- else +- JAVADYNAMICLINKING="" +- JAVACFLAGS="" +- fi ;; +-*-*-darwin*) +- JAVADYNAMICLINKING="-dynamiclib -framework JavaVM" +- JAVACFLAGS="" +- ;; +-*) +- JAVADYNAMICLINKING="" +- JAVACFLAGS="" +- ;; +-esac +- +-# Java on Windows platforms including Cygwin doesn't use libname.dll, rather name.dll when loading dlls +-case $host in +-*-*-cygwin* | *-*-mingw*) JAVALIBRARYPREFIX="";; +-*)JAVALIBRARYPREFIX="lib";; +-esac +- +-# Java on Mac OS X tweaks +-case $host in +-*-*-darwin*) +- JAVASO=".jnilib" +- JAVALDSHARED='$(CC)' +- JAVACXXSHARED='$(CXX)' +- ;; +-*) +- JAVASO=$SO +- JAVALDSHARED='$(LDSHARED)' +- JAVACXXSHARED='$(CXXSHARED)' +- ;; +-esac +-fi +- +-# Quote for spaces in path to executables +-if test -n "$JAVA"; then +- JAVA=\"$JAVA\" +-fi +-if test -n "$JAVAC"; then +- JAVAC=\"$JAVAC\" +-fi +- +-# Turned off due to spurious warnings in later versions of openjdk-1.8 +-# JAVAFLAGS=-Xcheck:jni +- +-AC_SUBST(JAVA) +-AC_SUBST(JAVAC) +-AC_SUBST(JAVAINC) +-AC_SUBST(JAVA_CLASSPATH_SEP) +-AC_SUBST(JAVADYNAMICLINKING) +-AC_SUBST(JAVALIBRARYPREFIX) +-AC_SUBST(JAVASO) +-AC_SUBST(JAVALDSHARED) +-AC_SUBST(JAVACXXSHARED) +-AC_SUBST(JAVAFLAGS) +-AC_SUBST(JAVACFLAGS) +- + #---------------------------------------------------------------- + # Look for Javascript + #---------------------------------------------------------------- +@@ -1726,51 +1456,6 @@ AC_SUBST(NODEJS) + AC_SUBST(NODEGYP) + + #---------------------------------------------------------------- +-# Look for Android +-#---------------------------------------------------------------- +- +-AC_ARG_WITH(android, AS_HELP_STRING([--without-android], [Disable Android]) +-AS_HELP_STRING([--with-android=path], [Set location of android executable]),[ANDROIDBIN="$withval"], [ANDROIDBIN="$alllang_default"]) +-AC_ARG_WITH(adb, [ --with-adb=path Set location of adb executable - Android Debug Bridge],[ADBBIN="$withval"], [ADBBIN=]) +-AC_ARG_WITH(ant, [ --with-ant=path Set location of ant executable for Android],[ANTBIN="$withval"], [ANTBIN=]) +-AC_ARG_WITH(ndk-build, [ --with-ndk-build=path Set location of Android ndk-build executable],[NDKBUILDBIN="$withval"], [NDKBUILDBIN=]) +- +-# First, check for "--without-android" or "--with-android=no". +-if test x"${ANDROIDBIN}" = xno; then +- AC_MSG_NOTICE([Disabling Android]) +- ANDROID= +-else +- if test "x$ANDROIDBIN" = xyes; then +- AC_CHECK_PROGS(ANDROID, android) +- else +- ANDROID="$ANDROIDBIN" +- fi +- +- if test -z "$ADBBIN"; then +- AC_CHECK_PROGS(ADB, adb) +- else +- ADB="$ADBBIN" +- fi +- +- if test -z "$ANTBIN"; then +- AC_CHECK_PROGS(ANT, ant) +- else +- ANT="$ANTBIN" +- fi +- +- if test -z "$NDKBUILDBIN"; then +- AC_CHECK_PROGS(NDKBUILD, ndk-build) +- else +- NDKBUILD="$NDKBUILDBIN" +- fi +-fi +- +-AC_SUBST(ANDROID) +-AC_SUBST(ADB) +-AC_SUBST(ANT) +-AC_SUBST(NDKBUILD) +- +-#---------------------------------------------------------------- + # Look for Guile + #---------------------------------------------------------------- + +@@ -2132,119 +1817,6 @@ AC_SUBST(OCAMLFIND) + AC_SUBST(OCAMLMKTOP) + + #---------------------------------------------------------------- +-# Look for C# +-#---------------------------------------------------------------- +- +-AC_ARG_WITH(csharp, AS_HELP_STRING([--without-csharp], [Disable CSharp]), [with_csharp="$withval"], [with_csharp="$alllang_default"]) +-AC_ARG_WITH(cil-interpreter, [ --with-cil-interpreter=path Set location of CIL interpreter for CSharp],[CSHARPBIN="$withval"], [CSHARPBIN=]) +-AC_ARG_WITH(csharp-compiler, [ --with-csharp-compiler=path Set location of CSharp compiler],[CSHARPCOMPILERBIN="$withval"], [CSHARPCOMPILERBIN=]) +- +-# First, check for "--without-csharp" or "--with-csharp=no". +-if test x"${with_csharp}" = xno; then +-AC_MSG_NOTICE([Disabling CSharp]) +-CSHARPCOMPILER= +-else +- +-if test -z "$CSHARPCOMPILERBIN" ; then +- case $host in +- *-*-cygwin* | *-*-mingw*) +- # prefer unified Mono mcs compiler (not to be confused with the ancient .NET 1 mcs) over older/alternative names. +- AC_CHECK_PROGS(CSHARPCOMPILER, csc mcs mono-csc gmcs cscc) +- if test -n "$CSHARPCOMPILER" && test "$CSHARPCOMPILER" = "csc" ; then +- AC_MSG_CHECKING(whether csc is the Microsoft CSharp compiler) +- csc 2>/dev/null | grep "C#" > /dev/null || CSHARPCOMPILER="" +- if test -z "$CSHARPCOMPILER" ; then +- AC_MSG_RESULT(no) +- AC_CHECK_PROGS(CSHARPCOMPILER, mcs mono-csc gmcs cscc) +- else +- AC_MSG_RESULT(yes) +- fi +- fi +- ;; +- *)AC_CHECK_PROGS(CSHARPCOMPILER, mono-csc gmcs mcs cscc);; +- esac +-else +- CSHARPCOMPILER="$CSHARPCOMPILERBIN" +-fi +- +-CSHARPCONVERTPATH="Tools/convertpath -u" +-if test -z "$CSHARPBIN" ; then +- CSHARPCILINTERPRETER="" +- CSHARPCILINTERPRETER_FLAGS="" +- if test "cscc" = "$CSHARPCOMPILER" ; then +- AC_CHECK_PROGS(CSHARPCILINTERPRETER, ilrun) +- else +- if test "mcs" = "$CSHARPCOMPILER"; then +- # Check that mcs is the C# compiler and not the Unix mcs utility by examining the output of 'mcs --version' +- # The Mono compiler should emit: Mono C# compiler version a.b.c.d +- csharp_version_raw=`(mcs --version) 2>/dev/null` +- csharp_version_searched=`(mcs --version | sed -e "/C#/b" -e "/Mono/b" -e d) 2>/dev/null` # return string if contains 'Mono' or 'C#' +- CSHARPCOMPILER="" +- if test -n "$csharp_version_raw" ; then +- if test "$csharp_version_raw" = "$csharp_version_searched" ; then +- CSHARPCOMPILER="mcs" +- fi +- fi +- if test "mcs" != "$CSHARPCOMPILER" ; then +- echo "mcs is not a working Mono C# compiler" +- fi +- fi +- if test "mcs" = "$CSHARPCOMPILER" || test "gmcs" = "$CSHARPCOMPILER" || test "mono-csc" = "$CSHARPCOMPILER"; then +- AC_CHECK_PROGS(CSHARPCILINTERPRETER, mono) # Mono JIT +- CSHARPCILINTERPRETER_FLAGS="--debug" +- else +- if test "csc" = "$CSHARPCOMPILER"; then +- CSHARPCONVERTPATH="Tools/convertpath -w" +- fi +- fi +- fi +-else +- CSHARPCILINTERPRETER="$CSHARPBIN" +-fi +- +-# Cygwin requires the Windows standard (Pascal) calling convention as it is a Windows executable and not a Cygwin built executable +-case $host in +-*-*-cygwin* | *-*-mingw*) +- if test "$GCC" = yes; then +- CSHARPDYNAMICLINKING="$GCC_MNO_CYGWIN -mthreads -Wl,--add-stdcall-alias" +- CSHARPCFLAGS="$GCC_MNO_CYGWIN -mthreads" +- else +- CSHARPDYNAMICLINKING="" +- CSHARPCFLAGS="" +- fi ;; +-*) +- CSHARPDYNAMICLINKING="" +- CSHARPCFLAGS="" +- ;; +-esac +- +-# CSharp on Windows platforms including Cygwin doesn't use libname.dll, rather name.dll when loading dlls +-case $host in +-*-*-cygwin* | *-*-mingw*) CSHARPLIBRARYPREFIX="";; +-*)CSHARPLIBRARYPREFIX="lib";; +-esac +- +-# C#/Mono on Mac OS X tweaks +-case $host in +-*-*-darwin*) +- CSHARPSO=".so" +- ;; +-*) +- CSHARPSO=$SO +- ;; +-esac +-fi +- +-AC_SUBST(CSHARPCILINTERPRETER_FLAGS) +-AC_SUBST(CSHARPCILINTERPRETER) +-AC_SUBST(CSHARPCONVERTPATH) +-AC_SUBST(CSHARPCOMPILER) +-AC_SUBST(CSHARPDYNAMICLINKING) +-AC_SUBST(CSHARPLIBRARYPREFIX) +-AC_SUBST(CSHARPCFLAGS) +-AC_SUBST(CSHARPSO) +- +-#---------------------------------------------------------------- + # Look for Lua + #---------------------------------------------------------------- + +@@ -2665,16 +2237,6 @@ fi + AC_SUBST(SKIP_OCAML) + + +-SKIP_CSHARP= +-if test -z "$CSHARPCOMPILER" ; then +- SKIP_CSHARP="1" +-else +- if test "cscc" = "$CSHARPCOMPILER" && test -z "$CSHARPCILINTERPRETER" ; then +- SKIP_CSHARP="1" +- fi +-fi +-AC_SUBST(SKIP_CSHARP) +- + SKIP_LUA= + # we need LUABIN & dynamic loading + if test -z "$LUABIN" || test -z "$LUADYNAMICLOADLIB"; then +@@ -2707,18 +2269,6 @@ fi + AC_SUBST(SKIP_D) + + #---------------------------------------------------------------- +-# Additional language dependencies +-#---------------------------------------------------------------- +- +-SKIP_ANDROID= +-if test -z "$ANDROID" || test -z "$ADB" || test -z "$ANT" || test -z "$NDKBUILD" ; then +- SKIP_ANDROID="1" +-fi +-AC_SUBST(SKIP_ANDROID) +- +- +- +-#---------------------------------------------------------------- + # Miscellaneous + #---------------------------------------------------------------- + +@@ -2795,10 +2345,8 @@ AC_CONFIG_FILES([ + Examples/d/example.mk + Examples/xml/Makefile + Examples/test-suite/errors/Makefile +- Examples/test-suite/csharp/Makefile + Examples/test-suite/d/Makefile + Examples/test-suite/guile/Makefile +- Examples/test-suite/java/Makefile + Examples/test-suite/javascript/Makefile + Examples/test-suite/mzscheme/Makefile + Examples/test-suite/ocaml/Makefile +@@ -2857,11 +2405,9 @@ EOF + AC_OUTPUT + + langs="" +-test -n "$SKIP_CSHARP" || langs="${langs}csharp " + test -n "$SKIP_D" || langs="${langs}d " + test -n "$SKIP_GO" || langs="${langs}go " + test -n "$SKIP_GUILE" || langs="${langs}guile " +-test -n "$SKIP_JAVA" || langs="${langs}java " + test -n "$SKIP_JAVASCRIPT" || langs="${langs}javascript " + test -n "$SKIP_LUA" || langs="${langs}lua " + test -n "$SKIP_MZSCHEME" || langs="${langs}mzscheme " diff --git a/sx/PKGBUILD b/sx/PKGBUILD new file mode 100644 index 0000000..90500d7 --- /dev/null +++ b/sx/PKGBUILD @@ -0,0 +1,19 @@ +# Maintainer: Jesus E. + +pkgname=sx +pkgver=3.0 +pkgrel=1 +pkgdesc="Simple alternative to startx(1) for starting an X-server" +arch=('any') +url='https://github.com/Earnestly/sx' +license=('Expat') +install=$pkgname.install +depends=('xenocara-server' 'xenocara-xauth') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/Earnestly/sx/archive/${pkgver}.tar.gz") +sha512sums=('e1202daff52bbd31837e5afcd5cb48dd776d9501f8da551893dd0e49939b0d8042f00382bcdb64c3f8ecce202308f206a64cd84254b67abf9915045a8efb5a97') + +package() { + cd ${pkgname}-${pkgver} + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/sx/sx.install b/sx/sx.install new file mode 100644 index 0000000..ec86326 --- /dev/null +++ b/sx/sx.install @@ -0,0 +1,9 @@ +post_install() { + cat <<- EOF + Configuration for x-session is done via personal sxrc to be created under '~/.config/sx/sxrc'. + EOF +} + +post_upgrade() { + post_install $1 +} diff --git a/sxhkd/PKGBUILD b/sxhkd/PKGBUILD new file mode 100644 index 0000000..e122fc2 --- /dev/null +++ b/sxhkd/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=sxhkd +pkgver=0.6.2 +pkgrel=2 +pkgdesc="A simple X hotkey daemon" +arch=('i686' 'x86_64') +url='https://github.com/baskerville/sxhkd' +license=('Simplified-BSD') +depends=('libxcb' 'xcb-util-keysyms') +makedepends=('xcb-util') +source=("https://github.com/baskerville/${pkgname}/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('3f758aec3de76c6336a9008e997317ed7a05db0fcd81025d8f856694c2b8162022e25d9a48876de99056748a2dbe6a561a0e1594973c854ac2c98d44af6b03aa') + +build() { + cd "${pkgname}-${pkgver}" + make PREFIX=/usr +} + +package() { + cd "${pkgname}-${pkgver}" + make PREFIX=/usr DESTDIR="$pkgdir" install + rm "${pkgdir}/usr/share/doc/sxhkd/examples/notification/"{autostart,sxhkd_notify,pam_environment} + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/sylpheed/PKGBUILD b/sylpheed/PKGBUILD new file mode 100644 index 0000000..fd0a676 --- /dev/null +++ b/sylpheed/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=sylpheed +pkgver=3.7.0 +_debver=$pkgver +_debrel=8 +pkgrel=1 +pkgdesc="Lightweight and user-friendly e-mail client" +arch=('i686' 'x86_64') +url='https://sylpheed.sraoss.jp/en/' +license=('GPL-2' 'LGPL-2.1') +depends=('compface' 'gpgme' 'libnsl' 'libressl' 'gtk2') +makedepends=('quilt') +source=("https://sylpheed.sraoss.jp/${pkgname}/v${pkgver%.*}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/s/sylpheed/sylpheed_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('490837528bf7ba9d26994cd5fff00b6e5390a127419b9d0efd9fc25c38be1291d55c5b8daebdf5ca9d9159a51c938449e76212328f3eae40cc039db88cb5caa4' + 'a487c45e1bd4ce203d6e685ac35c75dcd8c570c2a1d9bfe1e5a3e17b044d57fe6467f1bcf585ddd472ef7749cdc8c7f4b39642eceae3555866ad59cc061c27d8') + +prepare() { + cd "$pkgname-$pkgver" + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0010-use-enchant-2.patch || true + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --enable-maintainer-mode \ + --enable-ldap + make + + # build Attachment-Tool Plug-in + cd plugin/attachment_tool && make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING{,.LIB} -t $pkgdir/usr/share/licenses/$pkgname + + # install Attachment-Tool Plug-in + cd plugin/attachment_tool + make DESTDIR="$pkgdir/" install-plugin +} diff --git a/syntax-highlighting/PKGBUILD b/syntax-highlighting/PKGBUILD new file mode 100644 index 0000000..64e1298 --- /dev/null +++ b/syntax-highlighting/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=syntax-highlighting +pkgver=5.78.0 +pkgrel=1 +pkgdesc='Syntax highlighting engine for structured text and code' +arch=('i686' 'x86_64') +url='https://community.kde.org/Frameworks' +license=('LGPL-2.1') +depends=('qt-base') +makedepends=('extra-cmake-modules' 'qt-xmlpatterns' 'qt-tools' 'qt-doc' 'doxygen') +groups=('kf5') +source=("https://download.kde.org/stable/frameworks/${pkgver%.*}/$pkgname-$pkgver.tar.xz"{,.sig}) +sha512sums=('e9d47f69a14a890a4c5c0e9c33cce51fa6fef93d5c50b565b4d6e2d1978cddd8ffb4239534ddb02decf75190ec3b5446ca387901cda9f27f59088b6853c76843' + 'SKIP') +validpgpkeys=('53E6B47B45CEA3E0D5B7457758D0EE648A48B3BB') # David Faure + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF \ + -DQRC_SYNTAX=OFF \ + -DBUILD_QCH=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSES/LGPL-2.1-or-later.txt" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/sysklogd/PKGBUILD b/sysklogd/PKGBUILD new file mode 100644 index 0000000..c66a940 --- /dev/null +++ b/sysklogd/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +pkgname=sysklogd +pkgver=2.5.2 +pkgrel=1 +pkgdesc="Free and libre BSD syslogd" +arch=('i686' 'x86_64') +url='https://github.com/troglobit/sysklogd' +license=('Modified-BSD') +depends=('util-linux') +conflicts=('logger') +replaces=('logger') +provides=('logger') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/troglobit/sysklogd/archive/refs/tags/v${pkgver}.tar.gz" + "${pkgname}.logrotate" + "${pkgname}.initd" + "${pkgname}.confd" + "${pkgname}.run" + "${pkgname}.conf") +sha512sums=('2aee9060bd3b63d84f00e8be6d7030dc09ebc8bbb41dcd48f803b33a173a70dd7ed3d7395bb67945315157b6c5d8dee333f08c1c8463b0d0ea1eaf22f8078eff' + '655b25bc92c6d73807b11b0d64f97d619c067efb9fc16ee9c2aba5ba349b13991a22c83e7adaafb95e17578b17992992cab16d18b7bdb2be7d4fc876df5824f7' + '274642e7555badc2395e4a08684b07e4b5be91cfe92f5f2e47903263dde1ccb67c9a5932864eb623d11d97a3ad429b28a8ab7a8d93177e949a2f8dec9a1aaea4' + '80a2159d24b343a5b14da054bd073015ffc8f81c6e5b47114429b6c069b81a3331392c88baafd9a5ac1e0d778119fa7ca10def17eeb9b88c7f5cca1c0d31c6b2' + '481eaf404cdcb9c01f1c8450db24ec1d2ff5665f546b26d483a3e1cf3be274bc3f9e4b5ea00455fcae8dce6e90b2b96c023cf0c0a8fc3646e5d17665cc3f95cd' + '454a010e41076937e711c151c4f164ac98ea710241a1f8baca5cd001d0be171ff3793d12b989cdb6f617ed2b692fbbb2b45a3a1907539e40b719584f8575a9c0') + +prepare() { + cd "${pkgname}-${pkgver}" + ./autogen.sh +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-systemd=no \ + --with-logger=yes + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" PREFIX="/usr" install + + # configuration + install -d "$pkgdir"/etc/syslog.d + install -Dm644 syslog.conf "$pkgdir"/etc/syslog.conf + install -Dm644 "$srcdir"/$pkgname.logrotate "$pkgdir"/etc/logrotate.d/$pkgname + + # services + install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname + install -Dm644 "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname + install -Dm755 "$srcdir"/$pkgname.run "$pkgdir"/etc/sv/$pkgname/run + install -Dm644 "$srcdir"/$pkgname.conf "$pkgdir"/etc/sv/$pkgname/conf + + # license + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/sysklogd/sysklogd.conf b/sysklogd/sysklogd.conf new file mode 100644 index 0000000..3611f10 --- /dev/null +++ b/sysklogd/sysklogd.conf @@ -0,0 +1 @@ +SYSLOGD="-m 0 -s -s -r 10M:10" diff --git a/sysklogd/sysklogd.confd b/sysklogd/sysklogd.confd new file mode 100644 index 0000000..d897c9e --- /dev/null +++ b/sysklogd/sysklogd.confd @@ -0,0 +1,3 @@ +# Config file for /etc/init.d/sysklogd + +SYSLOGD="-m 0 -s -s -r 10M:10" diff --git a/sysklogd/sysklogd.initd b/sysklogd/sysklogd.initd new file mode 100644 index 0000000..749f87f --- /dev/null +++ b/sysklogd/sysklogd.initd @@ -0,0 +1,20 @@ +#!/sbin/openrc-run +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License, v2 or later + +extra_started_commands="reload" +pidfile="/run/${RC_SVCNAME}.pid" +command="/usr/sbin/syslogd" +command_background="true" +command_args="-F ${SYSLOGD}" + +depend() { + need clock hostname + provide logger +} + +reload() { + ebegin "Reloading configuration" + start-stop-daemon --signal HUP --pidfile ${pidfile} + eend $? +} diff --git a/sysklogd/sysklogd.logrotate b/sysklogd/sysklogd.logrotate new file mode 100644 index 0000000..8148a2a --- /dev/null +++ b/sysklogd/sysklogd.logrotate @@ -0,0 +1,8 @@ +/var/log/auth.log /var/log/daemon.log /var/log/debug /var/log/kern.log /var/log/lpr.log /var/log/mail.err /var/log/mail.info /var/log/mail.log /var/log/mail.warn /var/log/messages /var/log/news/news.crit /var/log/news/news.err /var/log/news/news.notice /var/log/syslog /var/log/user.log { + create 640 root root + sharedscripts + missingok + postrotate + /etc/init.d/sysklogd -q reload + endscript +} diff --git a/sysklogd/sysklogd.run b/sysklogd/sysklogd.run new file mode 100644 index 0000000..7cfcafa --- /dev/null +++ b/sysklogd/sysklogd.run @@ -0,0 +1,4 @@ +#!/bin/sh -e +[ -r ./conf ] && . ./conf +/usr/sbin/syslogd -F ${SYSLOGD} +exec pause 2>&1 diff --git a/tabbed/PKGBUILD b/tabbed/PKGBUILD new file mode 100644 index 0000000..4a7a930 --- /dev/null +++ b/tabbed/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=tabbed +pkgver=0.7 +pkgrel=1 +pkgdesc="Simple and generic tabbed fronted to xembed aware applications" +arch=('i686' 'x86_64') +url='https://tools.suckless.org/tabbed/' +license=('Expat') +depends=('libxft') +source=("https://dl.suckless.org/tools/${pkgname}-${pkgver}.tar.gz" + "xembed.1") +sha512sums=('770420935fd152e10bef59e29eeb8125ee181993691c6c5f03baf311bd685c2b5f0ded13854b3715cc60d0f1ae99eceacd3e6cb7e4008c34917ae55c38b436a7' + '7f5e8aa41e476a154aec9c25608032ffc6a9eb3198af40dbcb764b22297d260bb2c08405eb0464d7f551ed2032605ca79421b5434a051299f672efd4f8f38e75') + +prepare() { + cd "$pkgname-$pkgver" + cp "$srcdir/xembed.1" ./ +} + +build() { + cd "$pkgname-$pkgver" + make PREFIX=/usr +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir/" PREFIX=/usr install + install -Dm0644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tabble/PKGBUILD b/tabble/PKGBUILD new file mode 100644 index 0000000..b99ba46 --- /dev/null +++ b/tabble/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=tabble +pkgver=0.45 +pkgrel=1 +pkgdesc="A program launcher with tabs for X" +arch=('i686' 'x86_64') +url='https://www.rillion.net/tabble' +license=('GPL-2') +depends=('gtk2' 'gdk-pixbuf2') +source=("https://www.rillion.net/tabble/${pkgname}-${pkgver}.tar.gz") +sha512sums=('eb27d0f6d7df0adfcef1e247179eebeb0af3e436e2ee7591b14b4fc1c09def7f283fb185e2678dd26861fca281bc7033611e79d62c3567927f447ad2b0586511') + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/taglib/PKGBUILD b/taglib/PKGBUILD new file mode 100644 index 0000000..d9fcd2d --- /dev/null +++ b/taglib/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=taglib +pkgver=1.13 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A free and libre library for reading and editing the meta-data of several popular audio formats" +arch=('i686' 'x86_64') +url='https://taglib.github.io/' +license=('LGPL-2.1') +depends=('zlib') +makedepends=('cmake' 'boost' 'utf8cpp' 'quilt') +source=("https://taglib.github.io/releases/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/t/taglib/taglib_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('b6e3253d158b41173073c0da1915f5e4a3de947db918660817cb1c755fba7e3723ea1a335fbbc30b0dcf942348a471b493fe2ce1d52d1a808578edee14e1bfc7' + '049480fed54e14dba8f2cd75729e799d0e1584a28617c7ed658415500002c4024ad825274e33f24ce1075102882852a03ff9b7996da9d9da0be6f97832271a4e') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + export CPATH+=":/usr/include/utf8cpp" + cmake \ + -B build \ + -S $pkgname-$pkgver \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_CXX_FLAGS="$CXXFLAGS -DNDEBUG" \ + -D BUILD_SHARED_LIBS=ON \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 $srcdir/$pkgname-$pkgver/COPYING.LGPL -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/tagtool/PKGBUILD b/tagtool/PKGBUILD new file mode 100644 index 0000000..d522328 --- /dev/null +++ b/tagtool/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=tagtool +pkgver=0.14.2 +pkgrel=1 +pkgdesc="Tool to edit tags in MP3 and Ogg Vorbis files" +url='https://github.com/impegoraro/tagtool' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('gtk' 'id3lib' 'libvorbis' 'mesa-libgl') +makedepends=('intltool' 'gettext-tiny') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/impegoraro/tagtool/archive/v${pkgver}.tar.gz") +sha512sums=('a825d8b124e79bd1f5006cca3cf846968b356e3c17f9c05dd866806c8d08eba1da6bcebf782c843611a9750bb19b426443a6200cd88446ffa03617f518550489') + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tagutil/PKGBUILD b/tagutil/PKGBUILD new file mode 100644 index 0000000..c5e98ae --- /dev/null +++ b/tagutil/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=tagutil +pkgver=3.1 +pkgrel=2 +pkgdesc="Scriptable music files tags tool and editor" +arch=('i686' 'x86_64') +url='https://github.com/kAworu/tagutil' +license=('Simplified-BSD') +depends=('libyaml' 'taglib' 'flac' 'libvorbis' 'jansson') +makedepends=('cmake') +options=(!emptydirs) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/kAworu/tagutil/archive/v${pkgver}.tar.gz") +sha512sums=('a5b2140250f21eddd0154231608546b78c5646bb4bcb6ed7b11a3cbade2435c322d83c19a2a2e6852cdacca19a2b1cd6e33c0b71147d6873679d2b41db5a06d9') + +build() { + cmake -S ${pkgname}-${pkgver}/src \ + -B build \ + -DPREFIX=/usr \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DWITH_ID3V1=YES \ + -Wno-dev + make -C build +} + +package() { + make -C build DESTDIR="${pkgdir}" install + install -Dm644 ${pkgname}-${pkgver}/LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/talloc/LICENSE b/talloc/LICENSE new file mode 100644 index 0000000..c18cca6 --- /dev/null +++ b/talloc/LICENSE @@ -0,0 +1,507 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: talloc +Upstream-Contact: Samba Developers +Source: http://talloc.samba.org/ + +Files: * +Copyright: + 2004-2005 Andrew Tridgell + 2006 Stefan Metzmacher +License: LGPL-3.0+ + +Files: debian/* +Copyright: 2007-2012 Jelmer Vernooij +License: LGPL-3.0+ + +Files: lib/replace/*.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Andrew Tridgell 1994-2006 + Copyright (c) Jeremy Allison 2000-2003,2007 + Copyright (c) Michael Adam 2008 + Copyright (c) Patrick Powell 1995 + Copyright (c) Free Software Foundation, Inc. 1991-2001 + Copyright (c) Jelmer Vernooij 2006-2009 + Copyright (c) Andreas Schneider 2009-2015 + Copyright (c) Volker Lendecke 2011-2016 + Copyright (c) Internet Software Consortium 1996-2001 + Copyright (c) Aris Adamantiadis 2003-2009 + Copyright (c) Aleksandar Kanchev 2009 + Copyright (c) Matthieu Patou 2010 +License: LGPL-3.0+ + +Files: lib/replace/getaddrinfo.* +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) PostgreSQL Global Development Group 1996-2007 + Copyright (c) The Regents of the University of California 1994 +License: PostgreSQL + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without a written agreement + is hereby granted, provided that the above copyright notice and this paragraph + and the following two paragraphs appear in all copies. + . + IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + . + THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS + TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +Files: lib/replace/inet_ntop.c lib/replace/inet_pton.c +Comment: This file is not used when building the Debian package. +Copyright: Internet Software Consortium. 1996-2001 +License: ISC + +Files: lib/replace/snprintf.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Patrick Powell 1995 + Copyright (c) Brandon Long 1997 + Copyright (c) Thomas Roessler 1998 + Copyright (c) Michael Elkins 1998 + Copyright (c) Andrew Tridgell (tridge@samba.org) 1998-2001 + Copyright (c) Martin Pool 2003 + Copyright (c) Darren Tucker (dtucker@zip.com.au) 2005 + Copyright (c) Simo Sorce (idra@samba.org) 2006 +License: BSD-3 + +Files: lib/replace/strptime.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Ulrich Drepper , 1996 +License: LGPL-3.0+ + +Files: lib/replace/timegm.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Kungliga Tekniska Högskolan 1997 +License: BSD-3 + +Files: lib/replace/xattr.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Jeremy Allison 1998-2005 + Copyright (C) Timur Bakeyev 2005 + Copyright (C) Bjoern Jacke 2006-2007 + Copyright (C) Herb Lewis 2003 + Copyright (C) Andrew Bartlett 2012 +License: LGPL-3.0+ + +Files: pytalloc* +Copyright: + Copyright (C) Jelmer Vernooij 2008-2011 + Copyright (C) Andrew Bartlett 2016 +License: GPL-3.0+ + +Files: + buildtools/bin/waf + buildtools/wafsamba/stale_files.py + third_party/waf/* +Comment: See https://gitlab.com/ita1024/waf/blob/master/waf-light#L6 +Copyright: + Copyright Scott Newton, 2005 (scottn) + Copyright Thomas Nagy, 2005-2018 (ita) +License: BSD-3 + +Files: + third_party/waf/waflib/extras/bjam.py + third_party/waf/waflib/extras/proc.py + third_party/waf/waflib/extras/softlink_libs.py +Copyright: + Copyright rosengren 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/blender.py +Copyright: + Copyright Michal Proszek, 2014 (poxip) +License: BSD-3 + +Files: third_party/waf/waflib/extras/boo.py +Copyright: + Copyright Yannick LM 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/boost.py +Copyright: + Copyright Gernot Vormayr + Copyright Ruediger Sonderfeld , 2008 + Copyright Bjoern Michaelsen, 2008 + Copyright Luca Fossati, 2008 + Copyright Thomas Nagy, 2008 + Copyright Sylvain Rouquette, 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/buildcopy.py +Copyright: + Copyright Calle Rosenquist, 2017 (xbreak) +License: BSD-3 + +Files: third_party/waf/waflib/extras/cabal.py +Copyright: + Copyright Anton Feldmann, 2012 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/c_bgxlc.py + third_party/waf/waflib/extras/c_nec.py + third_party/waf/waflib/extras/fc_bgxlf.py + third_party/waf/waflib/extras/fc_cray.py + third_party/waf/waflib/extras/fc_nag.py + third_party/waf/waflib/extras/fc_nec.py + third_party/waf/waflib/extras/fc_open64.py + third_party/waf/waflib/extras/fc_solstudio.py + third_party/waf/waflib/extras/fc_xlf.py +Copyright: + Copyright harald at klimachs.de +License: BSD-3 + +Files: third_party/waf/waflib/extras/clang_compilation_database.py +Copyright: + Copyright Christoph Koke, 2013 +License: BSD-3 + +Files: third_party/waf/waflib/extras/codelite.py +Copyright: + Copyright Christian Klein (chrikle@berlios.de) +License: BSD-3 + +Files: + third_party/waf/waflib/extras/color_gcc.py + third_party/waf/waflib/extras/color_rvct.py + third_party/waf/waflib/extras/cross_gnu.py + third_party/waf/waflib/extras/dcc.py + third_party/waf/waflib/extras/halide.py + third_party/waf/waflib/extras/qnxnto.py + third_party/waf/waflib/extras/remote.py + third_party/waf/waflib/extras/rst.py + third_party/waf/waflib/extras/ticgt.py +Copyright: + Copyright JĂ©rĂ´me Carretero, 2011-2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/cppcheck.py +Copyright: + Copyright Michel Mooij, michel.mooij7@gmail.com +License: BSD-3 + +Files: + third_party/waf/waflib/extras/cpplint.py + third_party/waf/waflib/extras/freeimage.py + third_party/waf/waflib/extras/pep8.py +Copyright: + Copyright Sylvain Rouquette, 2011-2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/dpapi.py +Copyright: + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/eclipse.py +Copyright: + Copyright Richard Quirk 2009-1011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/erlang.py +Copyright: + Copyright Thomas Nagy, 2010 (ita) + Copyright Przemyslaw Rzepecki, 2016 +License: BSD-3 + +Files: third_party/waf/waflib/extras/fluid.py third_party/waf/waflib/extras/objcopy.py +Copyright: + Copyright Grygoriy Fuchedzhy 2009-2010 +License: BSD-3 + +Files: third_party/waf/waflib/extras/gdbus.py third_party/waf/waflib/extras/msvcdeps.py +Copyright: + Copyright Copyright Garmin International or its subsidiaries, 2012-2018 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/gob2.py + third_party/waf/waflib/Tools/dbus.py + third_party/waf/waflib/Tools/gnu_dirs.py +Copyright: + Copyright Ali Sabil, 2007 +License: BSD-3 + +Files: third_party/waf/waflib/extras/javatest.py third_party/waf/waflib/extras/pyqt5.py +Copyright: + Copyright Federico Pellegrin, 2016-2018 (fedepell) +License: BSD-3 + +Files: third_party/waf/waflib/extras/midl.py +Copyright: + Copyright ultrix gmail com +License: BSD-3 + +Files: third_party/waf/waflib/extras/msvs.py +Copyright: + Copyright Avalanche Studios 2009-2011 + Copyright Thomas Nagy 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pch.py +Copyright: + Copyright Alexander Afanasyev (UCLA), 2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pgicc.py third_party/waf/waflib/extras/pgicxx.py +Copyright: + Copyright Antoine Dechaume 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/protoc.py +Copyright: + Copyright Philipp Bender, 2012 + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pytest.py +Copyright: + Copyright Calle Rosenquist, 2016-2018 (xbreak) +License: BSD-3 + +Files: third_party/waf/waflib/extras/review.py +Copyright: + Copyright Laurent Birtz, 2011 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/run_do_script.py + third_party/waf/waflib/extras/run_m_script.py + third_party/waf/waflib/extras/run_py_script.py + third_party/waf/waflib/extras/run_r_script.py +Copyright: + Copyright Hans-Martin von Gaudecker, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/sas.py +Copyright: + Copyright Mark Coggeshall, 2010 +License: BSD-3 + +Files: third_party/waf/waflib/extras/swig.py +Copyright: + Copyright Petar Forai + Copyright Thomas Nagy 2008-2010 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/extras/use_config.py +Copyright: + Copyright Mathieu Courtois - EDF R&D, 2013 - http://www.code-aster.org +License: BSD-3 + +Files: third_party/waf/waflib/extras/valadoc.py +Copyright: + Copyright Nicolas Joseph 2009 +License: BSD-3 + +Files: third_party/waf/waflib/extras/xcode6.py +Copyright: + Copyright Nicolas Mercier 2011 + Copyright Simon Warg 2015, https://github.com/mimom +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ar.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/bison.py +Copyright: + Copyright John O'Meara, 2006 + Copyright Thomas Nagy 2009-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/clang.py +Copyright: + Copyright Krzysztof KosiĹ„ski 2014 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/compiler_c.py third_party/waf/waflib/Tools/compiler_cxx.py +Copyright: + Copyright Matthias Jahn jahn dĂ´t matthias ât freenet dĂ´t de, 2007 (pmarat) +License: BSD-3 + +Files: + third_party/waf/waflib/Tools/compiler_d.py + third_party/waf/waflib/Tools/dmd.py + third_party/waf/waflib/Tools/d.py + third_party/waf/waflib/Tools/gdc.py + third_party/waf/waflib/Tools/waf_unit_test.py +Copyright: + Copyright Carlos Rafael Giani, 2006-2007 (dv) + Copyright Thomas Nagy, 2008-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/flex.py +Copyright: + Copyright John O'Meara, 2006 + Thomas Nagy, 2006-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/g95.py +Copyright: + Copyright KWS 2010 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/gcc.py third_party/waf/waflib/Tools/gxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) + Copyright Yinon Ehrlich, 2009 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/icc.py +Copyright: + Copyright Stian Selnes 2008 + Copyright Thomas Nagy 2009-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ldc2.py +Copyright: + Copyright Alex Rønne Petersen, 2012 (alexrp/Zor) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/lua.py +Copyright: + Copyright Sebastian Schlingmann, 2008 + Copyright Thomas Nagy, 2008-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/msvc.py +Copyright: + Copyright Carlos Rafael Giani, 2006 (dv) + Copyright Tamas Pal, 2007 (folti) + Copyright Nicolas Mercier, 2009 + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/perl.py +Copyright: + Copyright andersg at 0x63.nu 2007 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/python.py +Copyright: + Copyright Thomas Nagy, 2007-2015 (ita) + Copyright Gustavo Carneiro (gjc), 2007 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ruby.py +Copyright: + Copyright daniel.svensson at purplescout.se 2008 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/suncc.py third_party/waf/waflib/Tools/suncxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/vala.py +Copyright: + Copyright Ali Sabil, 2007 + Copyright RadosĹ‚aw SzkodziĹ„ski, 2010 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/winres.py +Copyright: + Copyright Brant Young, 2007 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/xlc.py third_party/waf/waflib/Tools/xlcxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) + Copyright Yinon Ehrlich, 2009 + Copyright Michael Kuhn, 2009 +License: BSD-3 + +License: ISC + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + . + THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM + DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL + INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING + FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +License: BSD-3 + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + 3. Neither the name of the Institute nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +License: LGPL-3.0+ + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + . + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU Lesser General + Public License can be found in "/usr/share/common-licenses/LGPL-3". + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff --git a/talloc/PKGBUILD b/talloc/PKGBUILD new file mode 100644 index 0000000..9b95ea5 --- /dev/null +++ b/talloc/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=talloc +pkgver=2.3.1 +pkgrel=1 +pkgdesc='Hierarchical pool based memory allocator with destructors' +arch=('i686' 'x86_64') +license=('LGPL-3' 'GPL-3' 'Modified-BSD') +url='https://talloc.samba.org/' +depends=('glibc' 'libxcrypt') +makedepends=('python' 'docbook-xsl') +optdepends=('python: for python bindings') +source=(https://www.samba.org/ftp/talloc/talloc-$pkgver.tar.{gz,asc} + LICENSE) +sha512sums=('064fc39a9aaace6e0209f3251c8ff198d8a318b4cf4198006ff9892ca6e15e7d817b2fda43e0444fbbf04d2c3e70d06523dff5d57cbb796d27317ef4759e062e' + 'SKIP' + 'e4416fc1b804b09c87ab90607390820162f2340c86b6216ad7f946bd7be9f594740b73a05399a4141ff6586a3e36640af90256cd206f9bfe1c438bccc63fe9fc') +validpgpkeys=(9147A339719518EE9011BCB54793916113084025) # samba-bugs@samba.org + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --sysconfdir=/etc/samba \ + --localstatedir=/var \ + --bundled-libraries=NONE \ + --builtin-libraries=replace \ + --enable-talloc-compat1 + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/task/0011-Lexer-Do-not-allow-leading-zero-for-number-type.patch b/task/0011-Lexer-Do-not-allow-leading-zero-for-number-type.patch new file mode 100644 index 0000000..7972b3c --- /dev/null +++ b/task/0011-Lexer-Do-not-allow-leading-zero-for-number-type.patch @@ -0,0 +1,66 @@ +From: Tomas Babej +Date: Sun, 24 Jan 2021 01:28:54 -0500 +Subject: Lexer: Do not allow leading zero for number type + +Lexer: Do not allow leading zero for two and more digit integers + +tests: Add test for TW #2392 +--- + +diff --git a/src/Lexer.cpp b/src/Lexer.cpp +index 461dace1..444588c8 100644 +--- a/src/Lexer.cpp ++++ b/src/Lexer.cpp +@@ -608,7 +608,8 @@ bool Lexer::isHexNumber (std::string& token, Lexer::Type& type) + + //////////////////////////////////////////////////////////////////////////////// + // Lexer::Type::number +-// \d+ ++// 0 ++// [1-9]\d* + // [ . \d+ ] + // [ e|E [ +|- ] \d+ [ . \d+ ] ] + // not followed by non-operator. +@@ -616,9 +617,16 @@ bool Lexer::isNumber (std::string& token, Lexer::Type& type) + { + std::size_t marker = _cursor; + ++ bool leading_zero = (_text[marker] == '0'); ++ + if (unicodeLatinDigit (_text[marker])) + { + ++marker; ++ ++ // Two (or more) digit number with a leading zero are not allowed ++ if (leading_zero && unicodeLatinDigit (_text[marker])) ++ return false; ++ + while (unicodeLatinDigit (_text[marker])) + utf8_next_char (_text, marker); + +@@ -679,16 +687,24 @@ bool Lexer::isNumber (std::string& token, Lexer::Type& type) + + //////////////////////////////////////////////////////////////////////////////// + // Lexer::Type::number +-// \d+ ++// 0 ++// [1-9]\d* ++// Integers do not start with a leading 0, unless they are zero. + bool Lexer::isInteger (std::string& token, Lexer::Type& type) + { + std::size_t marker = _cursor; + ++ bool leading_zero = (_text[marker] == '0'); ++ + if (unicodeLatinDigit (_text[marker])) + { + ++marker; + while (unicodeLatinDigit (_text[marker])) + utf8_next_char (_text, marker); ++ ++ // Leading zero is only allowed in the case of number 0 ++ if (leading_zero and marker - _cursor > 1) ++ return false; + + token = _text.substr (_cursor, marker - _cursor); + type = Lexer::Type::number; diff --git a/task/0012-Backport-parser-issues-fixes.patch b/task/0012-Backport-parser-issues-fixes.patch new file mode 100644 index 0000000..59a1795 --- /dev/null +++ b/task/0012-Backport-parser-issues-fixes.patch @@ -0,0 +1,130 @@ +From: Tomas Babej +Date: Sat, 30 Jan 2021 17:50:58 -0500 +Subject: Backport parser issues fixes + +This backports upstream PR #2405 and commit a5eee5f, which contain extra +fixes and tests for issues with numeric project names (amongst others) +which were being wrongly interpreted as expressions. + +Addresses upstream issues TW-{2388,2386,2257,1908,1896} +--- + +diff --git a/src/CLI2.cpp b/src/CLI2.cpp +index ec2bd6c7..c49eb4d7 100644 +--- a/src/CLI2.cpp ++++ b/src/CLI2.cpp +@@ -1277,7 +1277,9 @@ void CLI2::desugarFilterAttributes () + A2 op ("", Lexer::Type::op); + op.tag ("FILTER"); + +- A2 rhs ("", values[0]._lextype); ++ // Attribute types that do not support evaluation should be interpreted ++ // as strings (currently this means that string attributes are not evaluated) ++ A2 rhs ("", evalSupported ? values[0]._lextype: Lexer::Type::string); + rhs.tag ("FILTER"); + + // Special case for ':'. +@@ -1371,7 +1373,7 @@ void CLI2::desugarFilterAttributes () + + // Do not modify this construct without full understanding. + // Getting this wrong breaks a whole lot of filtering tests. +- if (values.size () > 1 || evalSupported) ++ if (evalSupported) + { + for (auto& v : values) + reconstructed.push_back (v); +@@ -1946,6 +1948,41 @@ void CLI2::desugarFilterPlainArgs () + } + + //////////////////////////////////////////////////////////////////////////////// ++// Detects if the bracket at iterator it is a start or end of an empty paren expression ++// Examples: ++// ( status = pending ) ( ) ++// ^ ++// it -----| => true ++// ++// ( status = pending ) ( project = Home ) ++// ^ ++// it -----| => false ++bool CLI2::isEmptyParenExpression (std::vector::iterator it, bool forward /* = true */) const ++{ ++ int open = 0; ++ int closed = 0; ++ ++ for (auto a = it; a != (forward ? _args.end (): _args.begin()); (forward ? ++a: --a)) ++ { ++ if (a->attribute("raw") == "(") ++ open++; ++ else if (a->attribute("raw") == ")") ++ closed++; ++ else ++ // Encountering a non-paren token means there is something between parenthees ++ return false; ++ ++ // Getting balanced parentheses means we have an empty paren expression ++ if (open == closed && open != 0) ++ return true; ++ } ++ ++ // Should not end here. ++ return false; ++} ++ ++ ++//////////////////////////////////////////////////////////////////////////////// + // Two consecutive FILTER, non-OP arguments that are not "(" or ")" need an + // "and" operator inserted between them. + // +@@ -1971,10 +2008,18 @@ void CLI2::insertJunctions () + // Insert AND between terms. + else if (a != prev) + { +- if ((prev->_lextype != Lexer::Type::op && a->attribute ("raw") == "(") || +- (prev->_lextype != Lexer::Type::op && a->_lextype != Lexer::Type::op) || +- (prev->attribute ("raw") == ")" && a->_lextype != Lexer::Type::op) || +- (prev->attribute ("raw") == ")" && a->attribute ("raw") == "(")) ++ if ((prev->_lextype != Lexer::Type::op && ++ a->attribute ("raw") == "(" && ++ ! isEmptyParenExpression(a, true) ) || ++ (prev->attribute ("raw") == ")" && ++ a->_lextype != Lexer::Type::op && ++ ! isEmptyParenExpression(prev, false)) || ++ (prev->attribute ("raw") == ")" && ++ a->attribute ("raw") == "(" && ++ ! isEmptyParenExpression(a, true) && ++ ! isEmptyParenExpression(prev, false)) || ++ (prev->_lextype != Lexer::Type::op && ++ a->_lextype != Lexer::Type::op)) + { + A2 opOr ("and", Lexer::Type::op); + opOr.tag ("FILTER"); +diff --git a/src/CLI2.h b/src/CLI2.h +index f6b0ce94..025be4c8 100644 +--- a/src/CLI2.h ++++ b/src/CLI2.h +@@ -99,6 +99,7 @@ private: + void findUUIDs (); + void insertIDExpr (); + void lexFilterArgs (); ++ bool isEmptyParenExpression (std::vector::iterator it, bool forward = true) const; + void desugarFilterPlainArgs (); + void insertJunctions (); + void defaultCommand (); +diff --git a/src/columns/ColTypeString.cpp b/src/columns/ColTypeString.cpp +index 37c1433d..4ef97578 100644 +--- a/src/columns/ColTypeString.cpp ++++ b/src/columns/ColTypeString.cpp +@@ -58,7 +58,12 @@ void ColumnTypeString::modify (Task& task, const std::string& value) + std::string domRef; + Lexer::Type type; + if (lexer.token (domRef, type) && +- type == Lexer::Type::dom) ++ type == Lexer::Type::dom && ++ // Ensure 'value' contains only the DOM reference and no other tokens ++ // The lexer.token returns false for end-of-string. ++ // This works as long as all the DOM references we should support consist ++ // only of a single token. ++ lexer.token (domRef, type) == false) + { + Eval e; + e.addSource (domSource); diff --git a/task/PKGBUILD b/task/PKGBUILD new file mode 100644 index 0000000..3d59bd5 --- /dev/null +++ b/task/PKGBUILD @@ -0,0 +1,81 @@ +# Maintainer: Jesus E. + +pkgname=task +pkgver=2.5.3 +_debver=2.5.3 +_debrel=4 +pkgrel=1 +pkgdesc="A command-line todo list manager" +arch=('i686' 'x86_64') +url="https://taskwarrior.org/" +license=('Expat') +depends=('util-linux' 'gnutls') +makedepends=('cmake' 'quilt') +optdepends=('bash-completion: for bash completion' + 'python: for python export addon' + 'ruby: for ruby export addon' + 'perl: for perl export addon' + 'perl-json: for perl export addon') +source=("https://taskwarrior.org/download/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/t/task/task_$_debver+dfsg-$_debrel.debian.tar.xz" + '0011-Lexer-Do-not-allow-leading-zero-for-number-type.patch' + '0012-Backport-parser-issues-fixes.patch') +sha512sums=('e906c8f42ad4b9a7e20a82defe31b89194d72957f18dd5129ecc41a2a60a9d8b0d01abb9b44ecce79b65cd9064af4a4a4c9dd695f98152e77908f130dc3f9677' + '64591722cd71e9d5dfa40747d2bf0b78af18694c6e4dcdcdc575ff305d8f7df1f3023646b1fef81c0a0bfc96e8d8964c12b2417829a8a2e1bb4cf7585f2a6eb9' + '47351e83fa286b0047fe8181cd8b4f4454efcf11b6d92c54d69fda8ee7419d7cba14affe860b02a0ee6305a5ded29d5de3e61b5357b676aeab8ec43fb9265fa8' + '23c6ab14652bf1304efc35b44ea4fb35363b843d1688ab27b20923ae2ffefd4e3a67cd0a3f7291ba9be0fa37dd725df1930ae63f545eb5bb3bfb26707c30a9cf') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0011-Lexer-Do-not-allow-leading-zero-for-number-type.patch || true + rm -v debian/patches/0012-Backport-parser-issues-fixes.patch || true + rm -v debian/patches/0013-Port-testsuite-to-python3.patch || true + rm -v debian/patches/005_tests-time-independent.patch || true + rm -v debian/patches/006_update-basetest-prefix.patch || true + rm -v debian/patches/008_fix_date_tests.patch || true + rm -v debian/patches/009_fix-test-exit-code.patch || true + + quilt push -av + fi + + # fix debian patches + patch -Np1 -i "$srcdir/0011-Lexer-Do-not-allow-leading-zero-for-number-type.patch" + patch -Np1 -i "$srcdir/0012-Backport-parser-issues-fixes.patch" +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + cmake -DCMAKE_INSTALL_PREFIX=/usr . + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # Note that we rename the bash completion script for bash-completion > 1.99, until upstream does so. + install -Dm644 "$pkgdir/usr/share/doc/task/scripts/bash/task.sh" "$pkgdir/usr/share/bash-completion/completions/task" + install -Dm644 "$pkgdir/usr/share/doc/task/scripts/fish/task.fish" "$pkgdir/usr/share/fish/vendor_completions.d/task.fish" + install -Dm644 "$pkgdir/usr/share/doc/task/scripts/zsh/_task" "$pkgdir/usr/share/zsh/site-functions/_task" + + install -Dm644 "$pkgdir/usr/share/doc/task/scripts/vim/ftdetect/task.vim" "$pkgdir/usr/share/vim/vimfiles/ftdetect/task.vim" + install -Dm644 "$pkgdir/usr/share/doc/task/scripts/vim/syntax/taskdata.vim" "$pkgdir/usr/share/vim/vimfiles/syntax/taskdata.vim" + install -Dm644 "$pkgdir/usr/share/doc/task/scripts/vim/syntax/taskedit.vim" "$pkgdir/usr/share/vim/vimfiles/syntax/taskedit.vim" + install -Dm644 "$pkgdir/usr/share/doc/task/scripts/vim/syntax/taskrc.vim" "$pkgdir/usr/share/vim/vimfiles/syntax/taskrc.vim" + + install -d "$pkgdir/usr/share/licenses/$pkgname" + for i in COPYING LICENSE; do + install -m644 "$i" -t "$pkgdir/usr/share/licenses/$pkgname" + done +} diff --git a/tauthon-enum34/PKGBUILD b/tauthon-enum34/PKGBUILD new file mode 100644 index 0000000..6188dc1 --- /dev/null +++ b/tauthon-enum34/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-enum34 +pkgver=1.1.6 +pkgrel=2 +pkgdesc="Python 3.4 Enum backported for Tauthon" +arch=('any') +url='https://pypi.python.org/pypi/enum34' +license=('Modified-BSD') +depends=('tauthon') +makedepends=('tauthon-setuptools') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/e/enum34/enum34_${pkgver}.orig.tar.gz") +sha512sums=('51652525adc37bd1af1d81933f965dba9c508838d9f759c80ca1392991515a29c2c0263264a4e175b37a6ba11dca68c354774e448b19ef1bdba96be5474d93ec') + +build() { + cd enum34-$pkgver + tauthon setup.py build +} + +package() { + cd enum34-$pkgver + tauthon setup.py install --root="${pkgdir}" --optimize=1 --skip-build + install -Dm 644 enum/LICENSE -t "${pkgdir}"/usr/share/licenses/tauthon-enum34/ +} diff --git a/tauthon-funcsigs/PKGBUILD b/tauthon-funcsigs/PKGBUILD new file mode 100644 index 0000000..d077a21 --- /dev/null +++ b/tauthon-funcsigs/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-funcsigs +pkgver=1.0.2 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="Tauthon function signatures from PEP362" +arch=('any') +url='https://pypi.python.org/pypi/funcsigs/' +license=('Apache-2.0') +depends=('tauthon') +makedepends=('tauthon-setuptools' 'quilt') +source=(https://pypi.python.org/packages/source/f/funcsigs/funcsigs-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/p/python-funcsigs/python-funcsigs_$_debver-$_debrel.debian.tar.xz) +sha512sums=('4e583bb7081bb1d6c0fe5a6935ca03032d562b93ef5c11b51a72ce9e7ac12902451cc2233c7e6f70440629d88d8e6e9625965ee408100b80b0024f3a6204afda' + '07331d3e911ed2e33dab9cba34dae699367fc58c57227eed312726a0397060d3e68de5444ea6113aa67c8f9633b458ec1caaf169b5434d5afee5f17685d47593') + +prepare() { + cd "$srcdir/funcsigs-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd "$srcdir/funcsigs-$pkgver" + tauthon setup.py install --root="${pkgdir}" --optimize=1 + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tauthon-greenlet/PKGBUILD b/tauthon-greenlet/PKGBUILD new file mode 100644 index 0000000..3c7cc3f --- /dev/null +++ b/tauthon-greenlet/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-greenlet +pkgver=1.1.2 +pkgrel=1 +pkgdesc="Lightweight in-process concurrent programming" +license=('Expat' 'Python') +arch=('i686' 'x86_64') +url='https://pypi.org/project/greenlet/' +depends=('tauthon') +makedepends=('tauthon-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/g/greenlet/greenlet-$pkgver.tar.gz") +sha512sums=('e7bcc1bfffc80fcaee735ee69f6f53e8f68bd4d3ab8ad6ed813684ffad72340a347e4810f18cc32d9c3948b5c995aefc3a53ce4ae60324093dae12042d33183b') + +build() { + cd "greenlet-$pkgver" + tauthon setup.py build +} + +package() { + cd "greenlet-$pkgver" + PYTHONHASHSEED=0 tauthon setup.py install -O1 --root="$pkgdir" --skip-build + install -Dm644 LICENSE LICENSE.PSF -t "$pkgdir/usr/share/licenses/$pkgname/" +} diff --git a/tauthon-ipaddress/PKGBUILD b/tauthon-ipaddress/PKGBUILD new file mode 100644 index 0000000..2c679c1 --- /dev/null +++ b/tauthon-ipaddress/PKGBUILD @@ -0,0 +1,18 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-ipaddress +pkgver=1.0.23 +pkgrel=2 +pkgdesc="IPv4/IPv6 manipulation library for Tauthon" +arch=(any) +url="https://github.com/phihag/ipaddress" +license=('Python') +depends=('tauthon') +source=("https://pypi.io/packages/source/i/ipaddress/ipaddress-$pkgver.tar.gz") +sha512sums=('340e2a8698df1868038f55889671442eba17f06ec3f493759d8d0a9bf406eefbe1f67c14ca616f52e5bf2280942dcece7e89fb19de0923bee1ee20e60f48896e') + +package() { + cd ipaddress-$pkgver + tauthon setup.py install --root="$pkgdir/" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tauthon-markdown/PKGBUILD b/tauthon-markdown/PKGBUILD new file mode 100644 index 0000000..bbb2d24 --- /dev/null +++ b/tauthon-markdown/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +_pkgbasename=Markdown +pkgname=tauthon-markdown +pkgver=2.6.2 +pkgrel=1 +pkgdesc="Tauthon implementation of John Gruber's Markdown." +arch=('any') +url='https://python-markdown.github.io/' +license=('Modified-BSD') +depends=('tauthon' 'tauthon-setuptools') +source=("https://files.pythonhosted.org/packages/source/M/$_pkgbasename/$_pkgbasename-$pkgver.tar.gz") +sha512sums=('a69dabf65187f54d200f59191a149bfe2109f94ffc5d003e15c2e6333c0b5fdeebfc4136842d7be5a15bc903b7a22120a4ccba2722858194c43fd09cd8fbea16') + +build() { + cd "$srcdir/$_pkgbasename-$pkgver" + tauthon setup.py build +} + +package() { + cd "$srcdir/$_pkgbasename-$pkgver" + tauthon setup.py install --root="$pkgdir" --optimize=0 + install -Dm644 LICENSE.md -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tauthon-numpy/PKGBUILD b/tauthon-numpy/PKGBUILD new file mode 100644 index 0000000..395006c --- /dev/null +++ b/tauthon-numpy/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-numpy +pkgver=1.16.2 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Scientific tools for Tauthon" +arch=('i686' 'x86_64') +license=('Modified-BSD') +url="https://www.numpy.org/" +depends=('cblas' 'lapack' 'tauthon') +optdepends=('openblas: faster linear algebra') +makedepends=('tauthon-setuptools' 'gcc-fortran' 'tauthon-cython' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/numpy/numpy/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/p/python-numpy/python-numpy_$_debver-$_debrel.debian.tar.xz") +sha512sums=('81f0f1826e64933948f7c5d5bd94ae3ffaad7c902762114b51110e7959bd08ec2c885187f42f961c151380b8eac810c797442f72afc2965ad939981eed458b3c' + '1278cfae82e6d08add2eee8ccf38c97a350d293cb86b4c21e0b407f359e17f04fc6233e1f6da38065d468ed318d469d0ac8ccdcf817ad462ede9e091acd82ec8') + +prepare() { + cd numpy-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0005-Dont-fail-if-we-cant-import-mingw32.patch || true + rm -v debian/patches/0006-disable-asserts-on-ppc-with-broken-malloc-only-longd.patch || true + rm -v debian/patches/10_use_local_python.org_object.inv_sphinx.diff || true + rm -v debian/patches/adapt_swig_docs_to_debian.patch || true + rm -v debian/patches/python3-soabi.patch || true + + quilt push -av + fi + + sed -e "s|#![ ]*/usr/bin/python$|#!/usr/bin/tauthon|" \ + -e "s|#![ ]*/usr/bin/env python$|#!/usr/bin/env tauthon|" \ + -e "s|#![ ]*/bin/env python$|#!/usr/bin/env tauthon|" \ + -i $(find . -name '*.py') +} + +build() { + cd numpy-$pkgver + tauthon setup.py build +} + +package() { + cd numpy-$pkgver + tauthon setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + + mv "$pkgdir"/usr/bin/f2py{,-tauthon} + + install -Dm644 LICENSE.txt $pkgdir/usr/share/licenses/$pkgname/LICENSE.txt +} diff --git a/tauthon-pycairo/PKGBUILD b/tauthon-pycairo/PKGBUILD new file mode 100644 index 0000000..147c269 --- /dev/null +++ b/tauthon-pycairo/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +_pkgname=pycairo +pkgname=tauthon-$_pkgname +pkgver=1.16.2 # last version support for tauthon are: 1.18.2 +_debver=$pkgver +_debrel=4 +pkgrel=3 +pkgdesc='Tauthon bindings for the cairo graphics library' +arch=(i686 x86_64) +url="https://$_pkgname.readthedocs.io/en/latest/" +license=(LGPL-2.1) +depends=(cairo tauthon) +makedepends=(quilt) +source=(https://github.com/pygobject/$_pkgname/releases/download/v$pkgver/$_pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/p/$_pkgname/${_pkgname}_$_debver-$_debrel.debian.tar.xz) +sha512sums=('a5ac07f96f6607b1b40912b000c8b3b2114e75a6b8b314f1b68d2f5bb408dd7823c464d096c8cc26164219a961b448a4ea90b5a76683fb1807180f83cbc3b300' + '1831bf4afd8277265e42593675833ab8da507f702be7a2da06df92d503592287d489849fbb118b65789293b115ca0012433c001717266c02444c4e9b670f5842') + +prepare() { + cd $_pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $_pkgname-$pkgver + tauthon setup.py build +} + +package() { + cd $_pkgname-$pkgver + tauthon setup.py install --skip-build --root="${pkgdir}" --optimize='1' + + install -Dm644 COPYING-LGPL-2.1 -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/tauthon-pygobject2/PKGBUILD b/tauthon-pygobject2/PKGBUILD new file mode 100644 index 0000000..f5c142b --- /dev/null +++ b/tauthon-pygobject2/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +_pkgname=pygobject +pkgname=tauthon-${_pkgname}2 +pkgver=2.28.7 +_pkgver=2.28 +pkgrel=3 +pkgdesc='Tauthon bindings for GObject' +arch=(i686 x86_64) +url='https://wiki.gnome.org/Projects/PyGObject' +license=(LGPL-2.1) +depends=(glib2 tauthon) +source=(https://download.gnome.org/sources/$_pkgname/$_pkgver/$_pkgname-$pkgver.tar.xz) +sha512sums=('a5f3ae39f8156bd6234fb6d0ea31eba782fbdd4c292656c31b33e098abe3dcf0774d492cf602a4637cb679af9ecd511b24263349fbfd25708ca70f16cb052dfb') + +prepare() { + cd $_pkgname-$pkgver + find . \( -name '*.py' -o -name '*.py.in' \) -exec sed -i '1s|python|tauthon|' {} + + autoreconf -fvi +} + +build() ( + cd $_pkgname-$pkgver + CPPFLAGS+=' -Wno-deprecated-declarations' + ./configure --prefix=/usr --disable-introspection PYTHON=/usr/bin/tauthon + sed -i 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +) + +package() { + cd $_pkgname-$pkgver + make DESTDIR="$pkgdir" install + rm -r "$pkgdir/usr/share/gtk-doc" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tauthon-pygtk/PKGBUILD b/tauthon-pygtk/PKGBUILD new file mode 100644 index 0000000..3d1c0ca --- /dev/null +++ b/tauthon-pygtk/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-pygtk +_pkgname=pygtk +pkgver=2.24.0 +pkgrel=3 +pkgdesc="Tauthon bindings for the GTK widget set" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('libglade' 'tauthon-pycairo' 'tauthon-pygobject2' 'tauthon-numpy' 'tauthon') +source=("${pkgname}-${pkgver}.tar.bz2::https://download.gnome.org/sources/${_pkgname}/${pkgver%.*}/${_pkgname}-${pkgver}.tar.bz2" + "drop-pangofont.patch" + "python27.patch" + "fix-leaks-of-pango-objects.patch") +sha512sums=('64f4344fcf7636e0b2016ffd5310250b5c02a1bf87e44aef39b5d4cf4a5fc50d27cb4f030d4c6802cff61fffb88dee7752821e3d8a4cd1c34dc3745d9ff2f0da' + 'b278297857346e34dc0d8269a75cb8447b69fd4619cf668c960ead2e60ebea0de57288bd26b9c0d7577ceaf4a606f66a0b83d1e432f42100f1240eafa25dd560' + '044115bc08b78b9e656f47e77bd4e0d39b197242e5277fb2c4a03728faa58599090a388ff551ebc5ea9e5af4c979c154079c9efbacd221df2ef3c438014aa311' + 'bc385060c0b0cfee406d245c26bf7895be43db36160cf976c4def6416d7c06284a4d1eea0332fbe10e4065a1a3f1ca49ef3286a557e027fb953910a2aaa8359c') + +prepare() { + cd "${srcdir}/${_pkgname}-${pkgver}" + + # https://bugzilla.gnome.org/show_bug.cgi?id=623965 + patch -Np1 -i "${srcdir}/python27.patch" + + # https://bugzilla.gnome.org/show_bug.cgi?id=660216 + patch -Np1 -i "${srcdir}/fix-leaks-of-pango-objects.patch" + + # fix build with new pango + # https://gitlab.gnome.org/Archive/pygtk/-/merge_requests/1 + patch -p1 -i "${srcdir}/drop-pangofont.patch" + + # fix environment + sed -i -e 's#env python$#env tauthon#' examples/pygtk-demo/{,demos/}*.py + + # no docs + sed -i '/^SUBDIRS =/s/docs//' Makefile.in +} + +build() { + cd "${srcdir}/${_pkgname}-${pkgver}" + PYTHON=/usr/bin/tauthon ./configure --prefix=/usr --build=unknown-unknown-linux --disable-docs + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd "${srcdir}/${_pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -m644 gtk/gtk-extrafuncs.defs "${pkgdir}/usr/share/pygtk/2.0/defs/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tauthon-pygtk/drop-pangofont.patch b/tauthon-pygtk/drop-pangofont.patch new file mode 100644 index 0000000..0e549c1 --- /dev/null +++ b/tauthon-pygtk/drop-pangofont.patch @@ -0,0 +1,41 @@ +From 4aaa48eb80c6802aec6d03e5695d2a0ff20e0fc2 Mon Sep 17 00:00:00 2001 +From: Jordan Petridis +Date: Thu, 24 Oct 2019 22:58:36 +0200 +Subject: [PATCH] Drop the PangoFont find_shaper virtual method + +This API has been removed from Pango 1.44.6, because it was completely +unused by anything. + +However, PyGTK tries to bind everything, even unused API. + +Removing this from PyGTK means we can build it against the latest Pango +again. + +https://gitlab.gnome.org/GNOME/pango/issues/417 +--- + pango.defs | 9 --------- + 1 file changed, 9 deletions(-) + +diff --git a/pango.defs b/pango.defs +index 6935c964..da968f58 100644 +--- a/pango.defs ++++ b/pango.defs +@@ -1391,15 +1391,6 @@ + ) + ) + +-(define-virtual find_shaper +- (of-object "PangoFont") +- (return-type "PangoEngineShape*") +- (parameters +- '("PangoLanguage*" "lang") +- '("guint32" "ch") +- ) +-) +- + (define-virtual get_glyph_extents + (of-object "PangoFont") + (return-type "none") +-- +2.24.2 + diff --git a/tauthon-pygtk/fix-leaks-of-pango-objects.patch b/tauthon-pygtk/fix-leaks-of-pango-objects.patch new file mode 100644 index 0000000..c935dd6 --- /dev/null +++ b/tauthon-pygtk/fix-leaks-of-pango-objects.patch @@ -0,0 +1,59 @@ +From eca72baa5616fbe4dbebea43c7e5940847dc5ab8 Mon Sep 17 00:00:00 2001 +From: "Owen W. Taylor" +Date: Tue, 27 Sep 2011 00:17:52 -0400 +Subject: Fix leaks of Pango objects + +Gtk.PrintContext.create_pango_context() +Gtk.PrintContext.create_pango_layout() +pangocairo.CairoContext.create_layout() + +were leaking the objects they returned. + +https://bugzilla.gnome.org/show_bug.cgi?id=660216 + +diff --git a/gtk/gtk-2.10.defs b/gtk/gtk-2.10.defs +index 69c7e0c..faa45e1 100644 +--- a/gtk/gtk-2.10.defs ++++ b/gtk/gtk-2.10.defs +@@ -1388,12 +1388,14 @@ + (define-method create_pango_context + (of-object "GtkPrintContext") + (c-name "gtk_print_context_create_pango_context") ++ (caller-owns-return #t) + (return-type "PangoContext*") + ) + + (define-method create_pango_layout + (of-object "GtkPrintContext") + (c-name "gtk_print_context_create_pango_layout") ++ (caller-owns-return #t) + (return-type "PangoLayout*") + ) + +diff --git a/pangocairo.override b/pangocairo.override +index bb923e6..5101107 100644 +--- a/pangocairo.override ++++ b/pangocairo.override +@@ -118,11 +118,16 @@ _wrap_pango_cairo_update_context(PyGObject *self, PyObject *args, PyObject *kwar + static PyObject * + _wrap_pango_cairo_create_layout(PyGObject *self) + { +- PangoLayout *ret; ++ PangoLayout *layout; ++ PyObject *ret; + +- ret = pango_cairo_create_layout(PycairoContext_GET(self)); ++ layout = pango_cairo_create_layout(PycairoContext_GET(self)); + /* pygobject_new handles NULL checking */ +- return pygobject_new((GObject *)ret); ++ ret = pygobject_new((GObject *)layout); ++ if (layout) ++ g_object_unref(layout); ++ ++ return ret; + } + + static PyObject * +-- +cgit v0.10.2 + diff --git a/tauthon-pygtk/python27.patch b/tauthon-pygtk/python27.patch new file mode 100644 index 0000000..35a95d2 --- /dev/null +++ b/tauthon-pygtk/python27.patch @@ -0,0 +1,50 @@ +diff --git a/gtk/gtkmodule.c b/gtk/gtkmodule.c +index c0e1493..aa8cf10 100644 +--- a/gtk/gtkmodule.c ++++ b/gtk/gtkmodule.c +@@ -227,8 +227,12 @@ init_gtk(void) + pygtk_add_stock_items(d); + + /* extension API */ +- PyDict_SetItemString(d, "_PyGtk_API", +- o=PyCObject_FromVoidPtr(&functions, NULL)); ++#if PY_VERSION_HEX >= 0x02070000 ++ o = PyCapsule_New(&functions, "gtk._gtk._PyGtk_API", NULL); ++#else ++ o = PyCObject_FromVoidPtr(&functions, NULL); ++#endif ++ PyDict_SetItemString(d, "_PyGtk_API", o); + Py_DECREF(o); + + PyGtkDeprecationWarning = PyErr_NewException("gtk.GtkDeprecationWarning", +diff --git a/gtk/pygtk.h b/gtk/pygtk.h +index 573c3b9..e4c680f 100644 +--- a/gtk/pygtk.h ++++ b/gtk/pygtk.h +@@ -60,6 +60,18 @@ struct _PyGtk_FunctionStruct *_PyGtk_API; + + + /* a function to initialise the pygtk functions */ ++ ++/* Python 2.7 introduced the PyCapsule API and deprecated the CObject API */ ++#if PY_VERSION_HEX >= 0x02070000 ++#define init_pygtk() G_STMT_START { \ ++ void *capsule = PyCapsule_Import("gtk._gtk._PyGtk_API", 0); \ ++ if (!capsule) { \ ++ return; \ ++ } \ ++ _PyGtk_API = (struct _PyGtk_FunctionStruct*)capsule; \ ++} G_STMT_END ++#else /* PY_VERSION_HEX */ ++/* Python 2.6 and earlier use the CObject API */ + #define init_pygtk() G_STMT_START { \ + PyObject *pygtk = PyImport_ImportModule("gtk"); \ + if (pygtk != NULL) { \ +@@ -79,6 +91,7 @@ struct _PyGtk_FunctionStruct *_PyGtk_API; + return; \ + } \ + } G_STMT_END ++#endif /* PY_VERSION_HEX */ + + #endif + diff --git a/tauthon-setuptools-scm/PKGBUILD b/tauthon-setuptools-scm/PKGBUILD new file mode 100644 index 0000000..8219da9 --- /dev/null +++ b/tauthon-setuptools-scm/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +_name=setuptools_scm +pkgname=tauthon-setuptools-scm +pkgver=5.0.2 +pkgrel=1 +pkgdesc="Handles managing your python package versions in scm metadata" +arch=('any') +url="https://github.com/pypa/setuptools_scm" +license=('Expat') +depends=('tauthon-setuptools') +source=("https://files.pythonhosted.org/packages/source/${_name::1}/$_name/$_name-$pkgver.tar.gz") +sha512sums=('1e92d03e2d8473425c146a885eb641e98895c43afebcd3c66c1455ace2d81f187b87681072f8aacc5e8be166577f00138cc7c53e4b7d77cb1b598f835b72b010') + +build() { + cd $_name-$pkgver + tauthon setup.py build + tauthon setup.py egg_info +} + +package() { + cd $_name-$pkgver + tauthon setup.py install --root "$pkgdir" --optimize=1 --skip-build + install -Dm644 -t "$pkgdir"/usr/share/licenses/$pkgname LICENSE +} diff --git a/tauthon-soupsieve/PKGBUILD b/tauthon-soupsieve/PKGBUILD new file mode 100644 index 0000000..afc0232 --- /dev/null +++ b/tauthon-soupsieve/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-soupsieve +_realpkgname=python-soupsieve +pkgver=1.9.6 +pkgrel=1 +pkgdesc="A CSS4 selector implementation for Beautiful Soup" +url='https://github.com/facelessuser/soupsieve' +license=('Expat') +arch=('any') +depends=('tauthon') +makedepends=('tauthon-setuptools') +source=("$pkgname-$pkgver.tar.gz::https://github.com/facelessuser/soupsieve/archive/$pkgver/$_realpkgname-$pkgver.tar.gz") +sha512sums=('44954cdedc16a51c794ebe6770caeb8f179167ad2f0a0478cb1efd5878d6cc49fffd6119125964b19184afa6d0d7dedadb81dee020a48c5128ccf56e36a78f61') + +build() { + cd soupsieve-$pkgver + tauthon setup.py build +} + +package() { + cd soupsieve-$pkgver + tauthon setup.py install --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE.md -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/tauthon-toml/PKGBUILD b/tauthon-toml/PKGBUILD new file mode 100644 index 0000000..7b16fa1 --- /dev/null +++ b/tauthon-toml/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +_name=toml +pkgname=tauthon-toml +pkgver=0.10.2 +pkgrel=2 +pkgdesc='A Tauthon library for parsing and creating TOML' +arch=('any') +url='https://github.com/uiri/toml' +license=('Expat') +depends=('tauthon') +makedepends=('tauthon-setuptools') +source=("https://files.pythonhosted.org/packages/source/${_name::1}/${_name}/${_name}-${pkgver}.tar.gz" + "tauthon-toml-0.10.1-install_type_hints.patch") +sha512sums=('ede2c8fed610a3827dba828f6e7ab7a8dbd5745e8ef7c0cd955219afdc83b9caea714deee09e853627f05ad1c525dc60426a6e9e16f58758aa028cb4d3db4b39' + '000fd1416341567a1828034f6e3844f7c5436e2b89f06b0ffa2567fc86d3b72dd4a8085d26d4366764446dfb050cfececaada4ca53f9c355c62aafb26ea87be4') + +prepare() { + cd "$_name-$pkgver" + patch -Np1 -i "$srcdir/tauthon-toml-0.10.1-install_type_hints.patch" +} + +build() { + cd "$_name-$pkgver" + tauthon setup.py build +} + +package() { + cd "$_name-$pkgver" + tauthon setup.py install --skip-build \ + --optimize=1 \ + --prefix=/usr \ + --root="${pkgdir}" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm644 README.rst -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/tauthon-toml/tauthon-toml-0.10.1-install_type_hints.patch b/tauthon-toml/tauthon-toml-0.10.1-install_type_hints.patch new file mode 100644 index 0000000..d31f69d --- /dev/null +++ b/tauthon-toml/tauthon-toml-0.10.1-install_type_hints.patch @@ -0,0 +1,11 @@ +diff -ruN a/setup.py b/setup.py +--- a/setup.py 2020-01-03 20:37:49.000000000 +0000 ++++ b/setup.py 2020-09-13 17:38:30.016905954 +0000 +@@ -16,6 +16,7 @@ + author_email="uiri@xqz.ca", + url="https://github.com/uiri/toml", + packages=['toml'], ++ package_data={'toml': ['*.pyi', '**/*.pyi']}, + license="MIT", + long_description=readme_string, + python_requires=">=2.6, !=3.0.*, !=3.1.*, !=3.2.*", diff --git a/tauthon-typing/PKGBUILD b/tauthon-typing/PKGBUILD new file mode 100644 index 0000000..b62e1ba --- /dev/null +++ b/tauthon-typing/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-typing +pkgver=3.7.4.1 +pkgrel=2 +pkgdesc="Backport of the standard library typing module to Tauthon" +url='https://pypi.python.org/pypi/typing' +arch=('any') +license=('Python') +depends=('tauthon') +makedepends=('tauthon-setuptools') +source=("tauthon-typing-$pkgver.tar.gz::https://pypi.io/packages/source/t/typing/typing-$pkgver.tar.gz") +sha512sums=('5f5080bf66b1de094b7984ed3d1de22651de8ca018ffde927dfa67fe65b13f91602a877faa24e73d44558638b609be276b924b894d63999bb93b0657a2d5ec6e') + +build() { + cd typing-$pkgver + tauthon setup.py build +} + +package() { + cd typing-$pkgver + tauthon setup.py install --root "$pkgdir" --optimize=1 --skip-build + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/tauthon-wxpython3/PKGBUILD b/tauthon-wxpython3/PKGBUILD new file mode 100644 index 0000000..15a2f87 --- /dev/null +++ b/tauthon-wxpython3/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Jesus E. + +pkgname=tauthon-wxpython3 +pkgver=3.0.2.0 +pkgrel=2 +pkgdesc="Classic wxWidgets GUI toolkit for Tauthon" +arch=('i686' 'x86_64') +license=('wxWindows-Library-3.1') +url='https://www.wxpython.org' +depends=('wxgtk3' 'tauthon') +makedepends=('mesa' 'glu') +provides=(wxpython=$pkgver) +source=("https://downloads.sourceforge.net/wxpython/wxPython-src-${pkgver}.tar.bz2" + "fix-plot.patch" + "fix-editra-removal.patch") +sha512sums=('a3798e89ff19344253aac7d771971e519f7fa9723e82bd97e98f16fd7f1572e513170b02295b872dae0b1ae3fa95efc4ef34d078045b839694b4fdad3a27c9e4' + '6b4d235bbc67be66ae32c45b9ae8d2fd1aa6513d8625e1fa8af8f8399183ab598bd34ccd65158e113e8b99b86f3fd566e264d9bdeb681e68d634de17be29c473' + '6cfe12b967088a9d9bc1e14f68a6b8a897bbfbf86fe22fa6b138fa32c71d6f14074f23af552a7bc34909b2d6adb8a775bd8a965bbdc15a9f814a99508ffd2ed6') + +prepare() { + find . -type f -exec sed -i 's/env python/env tauthon/' {} \; + + cd wxPython-src-${pkgver}/wxPython + + # Fix plot library + patch -Np1 -i ${srcdir}/fix-plot.patch + + # Fix editra removal + patch -Np2 -i ${srcdir}/fix-editra-removal.patch +} + +build() { + cd wxPython-src-${pkgver} + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib \ + --includedir=/usr/include \ + --with-gtk=3 \ + --with-opengl \ + --enable-unicode \ + --enable-graphics_ctx \ + --disable-precomp-headers \ + --with-regex=sys \ + --with-libpng=sys \ + --with-libxpm=sys \ + --with-libjpeg=sys \ + --with-libtiff=sys \ + --with-wx-config=/usr/bin/wx-config-gtk3 + + cd wxPython + tauthon setup.py WX_CONFIG=/usr/bin/wx-config-gtk3 WXPORT=gtk3 UNICODE=1 build +} + +package() { + cd wxPython-src-${pkgver}/wxPython + + tauthon setup.py WX_CONFIG=/usr/bin/wx-config-gtk3 WXPORT=gtk3 UNICODE=1 install --root="${pkgdir}" --optimize=1 + for file in "${pkgdir}"/usr/bin/*; do mv "${file}" "${file}2"; done + install -Dm644 "${srcdir}/wxPython-src-${pkgver}/docs/licence.txt" -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/tauthon-wxpython3/fix-editra-removal.patch b/tauthon-wxpython3/fix-editra-removal.patch new file mode 100644 index 0000000..320567b --- /dev/null +++ b/tauthon-wxpython3/fix-editra-removal.patch @@ -0,0 +1,156 @@ +--- a/wxPython/distrib/DIRLIST ++++ b/wxPython/distrib/DIRLIST +@@ -146,104 +146,5 @@ + wx/tools/XRCed/plugins + wx/tools/XRCed/plugins/bitmaps + wx/tools/XRCed/plugins/src-images +-wx/tools/Editra +-wx/tools/Editra/docs +-wx/tools/Editra/include +-wx/tools/Editra/include/python2.5 +-wx/tools/Editra/include/python2.5/darwin +-wx/tools/Editra/include/python2.5/win32 +-wx/tools/Editra/locale +-wx/tools/Editra/locale/ca_ES@valencia +-wx/tools/Editra/locale/ca_ES@valencia/LC_MESSAGES +-wx/tools/Editra/locale/cs_CZ +-wx/tools/Editra/locale/cs_CZ/LC_MESSAGES +-wx/tools/Editra/locale/da_DK +-wx/tools/Editra/locale/da_DK/LC_MESSAGES +-wx/tools/Editra/locale/de_DE +-wx/tools/Editra/locale/de_DE/LC_MESSAGES +-wx/tools/Editra/locale/en_US +-wx/tools/Editra/locale/en_US/LC_MESSAGES +-wx/tools/Editra/locale/es_ES +-wx/tools/Editra/locale/es_ES/LC_MESSAGES +-wx/tools/Editra/locale/fr_FR +-wx/tools/Editra/locale/fr_FR/LC_MESSAGES +-wx/tools/Editra/locale/gl_ES +-wx/tools/Editra/locale/gl_ES/LC_MESSAGES +-wx/tools/Editra/locale/it_IT +-wx/tools/Editra/locale/it_IT/LC_MESSAGES +-wx/tools/Editra/locale/hr_HR +-wx/tools/Editra/locale/hr_HR/LC_MESSAGES +-wx/tools/Editra/locale/hu_HU +-wx/tools/Editra/locale/hu_HU/LC_MESSAGES +-wx/tools/Editra/locale/ja_JP +-wx/tools/Editra/locale/ja_JP/LC_MESSAGES +-wx/tools/Editra/locale/lv_LV +-wx/tools/Editra/locale/lv_LV/LC_MESSAGES +-wx/tools/Editra/locale/nl_NL +-wx/tools/Editra/locale/nl_NL/LC_MESSAGES +-wx/tools/Editra/locale/nn_NO +-wx/tools/Editra/locale/nn_NO/LC_MESSAGES +-wx/tools/Editra/locale/pl_PL +-wx/tools/Editra/locale/pl_PL/LC_MESSAGES +-wx/tools/Editra/locale/pt_BR +-wx/tools/Editra/locale/pt_BR/LC_MESSAGES +-wx/tools/Editra/locale/ro_RO +-wx/tools/Editra/locale/ro_RO/LC_MESSAGES +-wx/tools/Editra/locale/ru_RU +-wx/tools/Editra/locale/ru_RU/LC_MESSAGES +-wx/tools/Editra/locale/sk_SK +-wx/tools/Editra/locale/sk_SK/LC_MESSAGES +-wx/tools/Editra/locale/sl_SI +-wx/tools/Editra/locale/sl_SI/LC_MESSAGES +-wx/tools/Editra/locale/sr_RS +-wx/tools/Editra/locale/sr_RS/LC_MESSAGES +-wx/tools/Editra/locale/sv_SE +-wx/tools/Editra/locale/sv_SE/LC_MESSAGES +-wx/tools/Editra/locale/tr_TR +-wx/tools/Editra/locale/tr_TR/LC_MESSAGES +-wx/tools/Editra/locale/uk_UA +-wx/tools/Editra/locale/uk_UA/LC_MESSAGES +-wx/tools/Editra/locale/zh_CN +-wx/tools/Editra/locale/zh_CN/LC_MESSAGES +-wx/tools/Editra/locale/zh_TW +-wx/tools/Editra/locale/zh_TW/LC_MESSAGES +-wx/tools/Editra/pixmaps +-wx/tools/Editra/pixmaps/theme +-wx/tools/Editra/pixmaps/theme/Default +-wx/tools/Editra/pixmaps/theme/Tango +-wx/tools/Editra/pixmaps/theme/Tango/menu +-wx/tools/Editra/pixmaps/theme/Tango/mime +-wx/tools/Editra/pixmaps/theme/Tango/other +-wx/tools/Editra/pixmaps/theme/Tango/toolbar +-wx/tools/Editra/pixmaps/theme/Tango/other +-wx/tools/Editra/plugins +-wx/tools/Editra/plugins/codebrowser +-wx/tools/Editra/plugins/codebrowser/codebrowser +-wx/tools/Editra/plugins/codebrowser/codebrowser/gentag +-wx/tools/Editra/plugins/filebrowser +-wx/tools/Editra/plugins/filebrowser/filebrowser +-wx/tools/Editra/plugins/hello +-wx/tools/Editra/plugins/hello/hello +-wx/tools/Editra/plugins/Launch +-wx/tools/Editra/plugins/Launch/launch +-wx/tools/Editra/plugins/pyshell +-wx/tools/Editra/plugins/pyshell/pyshell +-wx/tools/Editra/scripts +-wx/tools/Editra/scripts/i18n +-wx/tools/Editra/src +-wx/tools/Editra/src/autocomp +-wx/tools/Editra/src/ebmlib +-wx/tools/Editra/src/eclib +-wx/tools/Editra/src/extern +-wx/tools/Editra/src/extern/aui +-wx/tools/Editra/src/extern/pygments +-wx/tools/Editra/src/extern/pygments/filters +-wx/tools/Editra/src/extern/pygments/formatters +-wx/tools/Editra/src/extern/pygments/lexers +-wx/tools/Editra/src/extern/pygments/styles +-wx/tools/Editra/src/syntax +-wx/tools/Editra/styles +-wx/tools/Editra/templates +-wx/tools/Editra/tests/syntax + + wxversion +--- a/wxPython/setup.py ++++ b/wxPython/setup.py +@@ -895,13 +895,6 @@ + 'wx.tools', + 'wx.tools.XRCed', + 'wx.tools.XRCed.plugins', +- 'wx.tools.Editra', +- 'wx.tools.Editra.src', +- 'wx.tools.Editra.src.autocomp', +- 'wx.tools.Editra.src.eclib', +- 'wx.tools.Editra.src.ebmlib', +- 'wx.tools.Editra.src.extern', +- 'wx.tools.Editra.src.syntax', + ] + + +@@ -919,7 +912,6 @@ + opj('scripts/pywrap'), + opj('scripts/pywxrc'), + opj('scripts/xrced'), +- opj('scripts/editra'), + ] + if os.name == 'nt': + SCRIPTS.append( opj('scripts/genaxmodule') ) +@@ -934,16 +926,6 @@ + DATA_FILES += find_data_files('wx/tools/XRCed/plugins', '*.crx') + DATA_FILES += find_data_files('wx/tools/XRCed/plugins/bitmaps', '*.png') + +-DATA_FILES += find_data_files('wx/tools/Editra/docs', '*.txt') +-DATA_FILES += find_data_files('wx/tools/Editra/locale', '*.mo') +-DATA_FILES += find_data_files('wx/tools/Editra/pixmaps', +- '*.png', '*.icns', '*.ico', 'README', 'AUTHORS', 'COPYING') +-DATA_FILES += find_data_files('wx/tools/Editra/plugins', '*.egg') +-DATA_FILES += find_data_files('wx/tools/Editra/src', 'README') +-DATA_FILES += find_data_files('wx/tools/Editra/styles', '*.ess') +-DATA_FILES += find_data_files('wx/tools/Editra/tests/syntax', '*') +-DATA_FILES += find_data_files('wx/tools/Editra', '[A-Z]*', recursive=False) +- + + ## import pprint + ## pprint.pprint(DATA_FILES) +@@ -993,7 +975,6 @@ + 'pyshell = wx.py.PyShell:main', + 'pywrap = wx.py.PyWrap:main', + 'helpviewer = wx.tools.helpviewer:main', +- 'editra = wx.tools.Editra.launcher:main', + 'xrced = wx.tools.XRCed.xrced:main', + ], + }, diff --git a/tauthon-wxpython3/fix-plot.patch b/tauthon-wxpython3/fix-plot.patch new file mode 100644 index 0000000..5c5f082 --- /dev/null +++ b/tauthon-wxpython3/fix-plot.patch @@ -0,0 +1,131 @@ +From 25bcbf15615b64e095da75e934ea4d254998ec24 Mon Sep 17 00:00:00 2001 +From: Robin Dunn +Date: Wed, 11 Mar 2015 14:37:20 -0700 +Subject: [PATCH] We need to use wx.CursorFromImage on Classic + +--- + wx/lib/plot.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/wx/lib/plot.py b/wx/lib/plot.py +index 94696c56b7..e166645863 100644 +--- a/wx/lib/plot.py ++++ b/wx/lib/plot.py +@@ -595,9 +595,9 @@ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, + + # set curser as cross-hairs + self.canvas.SetCursor(wx.CROSS_CURSOR) +- self.HandCursor = wx.Cursor(Hand.GetImage()) +- self.GrabHandCursor = wx.Cursor(GrabHand.GetImage()) +- self.MagCursor = wx.Cursor(MagPlus.GetImage()) ++ self.HandCursor = wx.CursorFromImage(Hand.GetImage()) ++ self.GrabHandCursor = wx.CursorFromImage(GrabHand.GetImage()) ++ self.MagCursor = wx.CursorFromImage(MagPlus.GetImage()) + + # Things for printing + self._print_data = None +From 30bc07d80ae1c81d70b4de2daac62ecd7996d703 Mon Sep 17 00:00:00 2001 +From: Robin Dunn +Date: Wed, 25 Mar 2015 15:34:49 -0700 +Subject: [PATCH] Revert some more Phoenix-only changes. + +--- + wx/lib/plot.py | 25 +++++++++++++------------ + 1 file changed, 13 insertions(+), 12 deletions(-) + +diff --git a/wx/lib/plot.py b/wx/lib/plot.py +index e166645863..102c35cc84 100644 +--- a/wx/lib/plot.py ++++ b/wx/lib/plot.py +@@ -237,7 +237,7 @@ def __init__(self, points, **attr): + :keyword `attr`: keyword attributes, default to: + + ========================== ================================ +- 'colour'= 'black' wx.Pen Colour any wx.Colour ++ 'colour'= 'black' wx.Pen Colour any wx.NamedColour + 'width'= 1 Pen width + 'style'= wx.PENSTYLE_SOLID wx.Pen style + 'legend'= '' Line Legend to display +@@ -251,7 +251,7 @@ def draw(self, dc, printerScale, coord=None): + width = self.attributes['width'] * printerScale * self._pointSize[0] + style = self.attributes['style'] + if not isinstance(colour, wx.Colour): +- colour = wx.Colour(colour) ++ colour = wx.NamedColour(colour) + pen = wx.Pen(colour, width, style) + pen.SetCap(wx.CAP_BUTT) + dc.SetPen(pen) +@@ -287,7 +287,7 @@ def __init__(self, points, **attr): + :keyword `attr`: keyword attributes, default to: + + ========================== ================================ +- 'colour'= 'black' wx.Pen Colour any wx.Colour ++ 'colour'= 'black' wx.Pen Colour any wx.NamedColour + 'width'= 1 Pen width + 'style'= wx.PENSTYLE_SOLID wx.Pen style + 'legend'= '' Line Legend to display +@@ -301,7 +301,7 @@ def draw(self, dc, printerScale, coord=None): + width = self.attributes['width'] * printerScale * self._pointSize[0] + style = self.attributes['style'] + if not isinstance(colour, wx.Colour): +- colour = wx.Colour(colour) ++ colour = wx.NamedColour(colour) + pen = wx.Pen(colour, width, style) + pen.SetCap(wx.CAP_ROUND) + dc.SetPen(pen) +@@ -334,10 +334,10 @@ def __init__(self, points, **attr): + :keyword `attr`: keyword attributes, default to: + + ================================ ================================ +- 'colour'= 'black' wx.Pen Colour any wx.Colour ++ 'colour'= 'black' wx.Pen Colour any wx.NamedColour + 'width'= 1 Pen width + 'size'= 2 Marker size +- 'fillcolour'= same as colour wx.Brush Colour any wx.Colour ++ 'fillcolour'= same as colour wx.Brush Colour any wx.NamedColour + 'fillstyle'= wx.BRUSHSTYLE_SOLID wx.Brush fill style (use wx.BRUSHSTYLE_TRANSPARENT for no fill) + 'style'= wx.FONTFAMILY_SOLID wx.Pen style + 'marker'= 'circle' Marker shape +@@ -365,10 +365,10 @@ def draw(self, dc, printerScale, coord=None): + marker = self.attributes['marker'] + + if colour and not isinstance(colour, wx.Colour): +- colour = wx.Colour(colour) ++ colour = wx.NamedColour(colour) + if fillcolour and not isinstance(fillcolour, wx.Colour): +- fillcolour = wx.Colour(fillcolour) +- ++ fillcolour = wx.NamedColour(fillcolour) ++ + dc.SetPen(wx.Pen(colour, width)) + if fillcolour: + dc.SetBrush(wx.Brush(fillcolour, fillstyle)) +@@ -681,8 +681,9 @@ def SetGridColour(self, colour): + if isinstance(colour, wx.Colour): + self._gridColour = colour + else: +- self._gridColour = wx.Colour(colour) ++ self._gridColour = wx.NamedColour(colour) + ++ + # SaveFile + def SaveFile(self, fileName=''): + """Saves the file to the type specified in the extension. If no file +@@ -1513,7 +1514,7 @@ def OnSize(self, event): + # Make new offscreen bitmap: this bitmap will always have the + # current drawing in it, so it can be used to save the image to + # a file, or whatever. +- self._Buffer = wx.Bitmap(Size.width, Size.height) ++ self._Buffer = wx.EmptyBitmap(Size.width, Size.height) + self._setSize() + + self.last_PointLabel = None # reset pointLabel +@@ -1578,7 +1579,7 @@ def _drawPointLabel(self, mDataDict): + width = self._Buffer.GetWidth() + height = self._Buffer.GetHeight() + if sys.platform != "darwin": +- tmp_Buffer = wx.Bitmap(width, height) ++ tmp_Buffer = wx.EmptyBitmap(width,height) + dcs = wx.MemoryDC() + dcs.SelectObject(tmp_Buffer) + dcs.Clear() diff --git a/tauthon/PKGBUILD b/tauthon/PKGBUILD new file mode 100644 index 0000000..678041b --- /dev/null +++ b/tauthon/PKGBUILD @@ -0,0 +1,106 @@ +# Maintainer: Jesus E. + +# Based on python2 package + +pkgname=tauthon +pkgver=2.8.2 +pkgrel=5 +_basever=2.8 +pkgdesc="Fork of Python 2.7 with new syntax, builtins, and libraries backported from Python 3" +arch=('i686' 'x86_64') +license=('Python') +url="https://github.com/naftaliharris/tauthon" +depends=('bzip2' 'gdbm' 'libressl' 'zlib' 'expat' 'sqlite' 'libffi') +makedepends=('quilt') +replaces=('python2') +conflicts=('python2') +provides=('python2') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/naftaliharris/tauthon/archive/v${pkgver}.tar.gz") +sha512sums=('32a88dcffa60af57a5a1824aa15b352722fcf07a25e53fd89596fe353ed1650eb9d4c098f534f38b06fa4a03a763b75fe855c0f96560ff8290911fb62e9cc291') + +prepare() { + cd ${pkgname}-${pkgver} + + # Temporary workaround + # See http://bugs.python.org/issue10835 for upstream report + sed -i "/progname =/s/python/tauthon${_basever}/" Python/pythonrun.c + + # Enable built-in SQLite module to load extensions + sed -i "/SQLITE_OMIT_LOAD_EXTENSION/d" setup.py + + sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/tauthon|" Lib/cgi.py + + sed -i "s/python2.3/tauthon/g" Lib/distutils/tests/test_build_scripts.py \ + Lib/distutils/tests/test_install_scripts.py + + # Ensure that we are using the system copy of various libraries (expat, zlib and libffi), + # rather than copies shipped in the tarball + rm -r Modules/expat + rm -r Modules/zlib + rm -r Modules/_ctypes/{darwin,libffi}* + + # clean up #!s + find . -name '*.py' | \ + xargs sed -i "s|#[ ]*![ ]*/usr/bin/env python$|#!/usr/bin/env tauthon|" + + # Workaround asdl_c.py/makeopcodetargets.py errors after we touched the shebangs + touch Include/Python-ast.h Python/Python-ast.c Python/opcode_targets.h +} + +build() { + cd ${pkgname}-${pkgver} + + export OPT="${CFLAGS}" + ./configure --prefix=/usr \ + --enable-shared \ + --with-threads \ + --enable-optimizations \ + --with-lto \ + --enable-ipv6 \ + --enable-unicode=ucs4 \ + --with-system-expat \ + --with-system-ffi \ + --with-dbmliborder=gdbm:ndbm \ + --without-ensurepip + + make +} + +package() { + cd ${pkgname}-${pkgver} + + # Hack to avoid building again + sed -i 's/^all:.*$/all: build_all/' Makefile + + make DESTDIR="${pkgdir}" altinstall maninstall + + rm "${pkgdir}"/usr/share/man/man1/tauthon.1 + + mv "${pkgdir}"/usr/bin/{python,tauthon}${_basever}-config + + ln -sf tauthon${_basever} "${pkgdir}"/usr/bin/tauthon + ln -sf tauthon${_basever}-config "${pkgdir}"/usr/bin/tauthon-config + ln -sf tauthon${_basever}.1 "${pkgdir}"/usr/share/man/man1/tauthon.1 + + ln -sf tauthon-${_basever}.pc "${pkgdir}"/usr/lib/pkgconfig/tauthon.pc + + ln -sf ../../libtauthon${_basever}.so "${pkgdir}"/usr/lib/tauthon${_basever}/config/libtauthon${_basever}.so + + mv "${pkgdir}"/usr/bin/smtpd.py "${pkgdir}"/usr/lib/tauthon${_basever}/ + + # some useful "stuff" + install -dm755 "${pkgdir}"/usr/lib/tauthon${_basever}/Tools/{i18n,scripts} + install -m755 Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}"/usr/lib/tauthon${_basever}/Tools/i18n/ + install -m755 Tools/scripts/{README,*py} "${pkgdir}"/usr/lib/tauthon${_basever}/Tools/scripts/ + + # fix conflicts with python + mv "${pkgdir}"/usr/bin/idle{,2} + mv "${pkgdir}"/usr/bin/pydoc{,2} + mv "${pkgdir}"/usr/bin/2to3{,-2.8} + + # clean-up reference to build directory + sed -i "s#${srcdir}/${pkgname}-${pkgver}:##" "${pkgdir}"/usr/lib/tauthon${_basever}/config/Makefile + + # license + install -Dm644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE +} diff --git a/tbb/PKGBUILD b/tbb/PKGBUILD new file mode 100644 index 0000000..85e9210 --- /dev/null +++ b/tbb/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=tbb +pkgver=2020.3 +_debver=2020.3 +_debrel=1 +pkgrel=1 +pkgdesc='High level abstract threading library' +arch=('i686' 'x86_64') +url='https://www.threadingbuildingblocks.org/' +license=('Apache-2.0') +depends=('gcc-libs') +makedepends=('cmake' 'quilt') +conflicts=('intel-tbb') +provides=("intel-tbb=$pkgver") +replaces=('intel-tbb') +source=(https://github.com/oneapi-src/oneTBB/archive/v$pkgver/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/t/tbb/tbb_$_debver-$_debrel.debian.tar.xz) +sha512sums=('ea1ffd22c7234d715b8c46a4e51b40719c7a9b8837ab3166f1da5a2c6061167c2be2126b1d74fd361eec6975b8fce0df26829ca2e7af8029edbb52e40f23d630' + '4d5739218e1352a6463dab5fbad2be4ec1e6817be4be86650edd406a2024a51e188efccc56623c0b3358960685e2d7b892eed0a50a3fb51cdc24a2d614215617') + +prepare() { + cd oneTBB-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd oneTBB-$pkgver + make +} + +package() { + cd oneTBB-$pkgver + install -Dm755 build/linux_*/*.so* -t "$pkgdir"/usr/lib + install -d "$pkgdir"/usr/include + cp -a include/tbb "$pkgdir"/usr/include + cmake \ + -DINSTALL_DIR="$pkgdir"/usr/lib/cmake/TBB \ + -DSYSTEM_NAME=Linux -DTBB_VERSION_FILE="$pkgdir"/usr/include/tbb/tbb_stddef.h \ + -P cmake/tbb_config_installer.cmake + install -Dm644 LICENSE -t \ + "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/tbsm/PKGBUILD b/tbsm/PKGBUILD new file mode 100644 index 0000000..c248ee5 --- /dev/null +++ b/tbsm/PKGBUILD @@ -0,0 +1,18 @@ +# Maintainer: Jesus E. + +pkgname=tbsm +pkgver=0.7 +pkgrel=1 +pkgdesc="A pure bash session or application launcher, inspired by cdm, tdm and krunner" +arch=('any') +url='https://github.com/loh-tar/tbsm' +license=('GPL-2') +depends=('bash') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/loh-tar/${pkgname}/archive/v${pkgver}.tar.gz") +sha512sums=('97b947c7d5f583cae19a4f722a813d56c840e4259271cda00ab5c2daea825f8044f1f5e80ca9160bea1e6b8d2c89830bc21164f075747b8ef523c13a91c1ccad') + +package() { + cd "$pkgname-$pkgver" + make install DESTDIR="$pkgdir" + install -Dm644 doc/99_License.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tcc/PKGBUILD b/tcc/PKGBUILD new file mode 100644 index 0000000..d4e406d --- /dev/null +++ b/tcc/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=tcc +pkgver=0.9.27+git20200814.62c30a4a +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Tiny C Compiler" +arch=('i686' 'x86_64') +url='https://bellard.org/tcc/' +license=('LGPL-2.1') +makedepends=('texi2html' 'quilt') +options=('staticlibs') +source=("https://deb.debian.org/debian/pool/main/t/tcc/tcc_${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/t/tcc/tcc_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('daf19c20c53edd35c96d7d12b59345b8e2ec464b86744c0b3a1713bacf54ad2a803febfe03f53ba6c12e40c3ba5e6d0eebaebef1892fe394376ee324299943c0' + 'af5cd3747e42b04fefa17367fa040e0925e4c98087a778b5aaa754fe13811ed429971d5b158bd4bb36d381075c58c5074fc1f4824c67b8218fa03ccb65de8187') +noextract=("tcc_${pkgver}.orig.tar.bz2") + +prepare() { + mkdir -p ${pkgname}-${pkgver} + tar -xf "tcc_${pkgver}.orig.tar.bz2" \ + -C "${pkgname}-${pkgver}/" + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr + make +} + +check() { + cd ${pkgname}-${pkgver} + make -j1 test +} + +package() { + make -C ${pkgname}-${pkgver} DESTDIR="$pkgdir" docdir="$pkgdir"/usr/share/doc/tcc install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tcl/PKGBUILD b/tcl/PKGBUILD new file mode 100644 index 0000000..23711f3 --- /dev/null +++ b/tcl/PKGBUILD @@ -0,0 +1,78 @@ +# Maintainer: Jesus E. + +pkgname=tcl +pkgver=8.6.11 +_debver=8.6.11+dfsg +_debrel=1 +pkgrel=1 +pkgdesc="The Tcl scripting language" +arch=('i686' 'x86_64') +url="https://sourceforge.net/projects/tcl/" +license=('custom:Tcl') +depends=('zlib') +makedepends=('quilt') +options=('staticlibs') +source=(https://downloads.sourceforge.net/sourceforge/tcl/tcl${pkgver}-src.tar.gz + https://deb.debian.org/debian/pool/main/t/tcl8.6/tcl8.6_$_debver-$_debrel.debian.tar.xz) +sha512sums=('f586f393d1ded48e6a678552b1c6b13ad0ca27963e5fe2c98e81bdd5c018197032abb11810d7c7268d68291fefac6b6a046c06df2b0ddd8a720abc32353c55b2' + 'a42957b8d27c1234b931096b73bfeec4a36edac5370fb55b1ad5850fcadbea25a054d2c1bb5ab7cbbfacd8220dcea3185d4e585949d48ded7ec4d9a9eb75c6cd') + +prepare() { + cd tcl${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/tclprivate.diff || true + + quilt push -av + fi + + # we build the tcl sqlite interface in sqlite-tcl package + rm -rf pkgs/sqlite3* +} + +build() { + cd tcl${pkgver}/unix + [[ $CARCH == "x86_64" ]] && BIT="--enable-64bit" + ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads $BIT + make +} + +check() { + cd tcl${pkgver}/unix + make test +} + +package() { + cd tcl${pkgver}/unix + make INSTALL_ROOT="${pkgdir}" install install-private-headers + ln -sf tclsh${pkgver%.*} "${pkgdir}/usr/bin/tclsh" + ln -sf libtcl${pkgver%.*}.so "${pkgdir}/usr/lib/libtcl.so" + install -Dm644 ../license.terms "${pkgdir}/usr/share/licenses/${pkgname}/license.terms" + install -Dm644 tcl.m4 -t "$pkgdir"/usr/share/aclocal + + # remove buildroot traces + sed -e "s#${srcdir}/tcl${pkgver}/unix#/usr/lib#" \ + -e "s#${srcdir}/tcl${pkgver}#/usr/include#" \ + -i "${pkgdir}/usr/lib/tclConfig.sh" + + tdbcver=tdbc1.1.2 + sed -e "s#${srcdir}/tcl${pkgver}/unix/pkgs/$tdbcver#/usr/lib/$tdbcver#" \ + -e "s#${srcdir}/tcl${pkgver}/pkgs/$tdbcver/generic#/usr/include#" \ + -e "s#${srcdir}/tcl${pkgver}/pkgs/$tdbcver/library#/usr/lib/tcl${pkgver%.*}#" \ + -e "s#${srcdir}/tcl${pkgver}/pkgs/$tdbcver#/usr/include#" \ + -i "${pkgdir}/usr/lib/$tdbcver/tdbcConfig.sh" + + itclver=itcl4.2.1 + sed -e "s#${srcdir}/tcl${pkgver}/unix/pkgs/$itclver#/usr/lib/$itclver#" \ + -e "s#${srcdir}/tcl${pkgver}/pkgs/$itclver/generic#/usr/include#" \ + -e "s#${srcdir}/tcl${pkgver}/pkgs/$itclver#/usr/include#" \ + -i "${pkgdir}/usr/lib/$itclver/itclConfig.sh" +} diff --git a/tcllib/PKGBUILD b/tcllib/PKGBUILD new file mode 100644 index 0000000..83bd5fe --- /dev/null +++ b/tcllib/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +_pkgname=tcllib-libre +pkgname=tcllib +pkgver=1.20 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Set of pure-Tcl extensions." +arch=('any') +url="http://core.tcl.tk/tcllib/" +license=('custom:BSD' 'custom:RSA' 'custom:RSA2' 'custom:RSA3' 'Expat') +depends=('tcl') +makedepends=('quilt') +mksource=("https://core.tcl-lang.org/tcllib/uv/${pkgname}-${pkgver}.tar.gz") +source=("https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/t/tcllib/tcllib_${_debver}+dfsg-${_debrel}.debian.tar.xz" + "libre.patch") +mksha512sums=('c7c386c08620724e058e0c2ef7b0900337d711d093cb6cf1c25f602152abb2d042a4411cb3ae712223171ff95629f7790e56c4a965e827a27bb70ab6bfe09f99') +sha512sums=('fc284f1f39019b128bf50f616119911e5720d5ffc30fd92f4a1121f3bfa776f5a83e5564434aba3642b771cfb43576e6fa44f606ced5d04ebcab607ef12696f2' + 'SKIP' + '5d42040ade39b4b35777bdb132b44cce57673f8a30a4a0280603d2e4d176ac7762321c09af22dfb5f434afb503e484d5714ac566e124f7c5be2827156647996c' + '675633a1e022b8f521f8eb84b24970c9991e4f9d6a175509dc6dd4a2ca87ef6c6ace3f119dea761763d371ace5101dfcd8c50fc5b1038f7c632bcc4b6c203a59') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + cd "$srcdir"/$pkgname-$pkgver + + # Remove nonfree Amazon S3 + rm -rf modules/amazon-s3 + rm -rf idoc/man/files/modules/amazon-s3 +} + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/libre.patch +} + +package(){ + cd "$srcdir"/$pkgname-$pkgver + tclsh installer.tcl -pkg-path "$pkgdir"/usr/lib/tcllib \ + -app-path "$pkgdir"/usr/bin \ + -nroff-path "$pkgdir"/usr/share/man/mann \ + -no-examples -no-html \ + -no-wait -no-gui + install -Dm644 license.terms -t "$pkgdir"/usr/share/licenses/$pkgname + for manp in graph; do + mv "$pkgdir"/usr/share/man/mann/{,tcllib-}$manp.n + done +} diff --git a/tcllib/libre.patch b/tcllib/libre.patch new file mode 100644 index 0000000..373e12b --- /dev/null +++ b/tcllib/libre.patch @@ -0,0 +1,58 @@ +--- a/project.shed 2019-04-10 19:19:50.000000000 +0200 ++++ b/project.shed 2023-04-02 12:04:17.836424653 +0200 +@@ -1285,45 +1285,6 @@ + file: aes.tcl + } + } +-e0731db5f391ff5f78311d7f2eacc6918da7b4f5 { +- entity { +- name: amazon-s3 +- shed_class: module +- version: {} +- } +- meta { +- class: source +- package-provide: {{S3 1.0.3} {xsxp 1.0}} +- package-require: {{-exact xsxp 1.0} base64 md5 sha1 {Tcl 8.5} xml xsxp} +- path: modules/amazon-s3 +- } +- package/ { +- 874860fbaa5df31ffe070d08e34582556d0f4478 +- 53c9eaaf207c9886a7278407f0abaf54d03e0356 +- } +-} +-874860fbaa5df31ffe070d08e34582556d0f4478 { +- entity { +- name: S3 +- shed_class: package +- version: 1.0.3 +- } +- meta { +- class: package +- file: S3.tcl +- } +-} +-53c9eaaf207c9886a7278407f0abaf54d03e0356 { +- entity { +- name: xsxp +- shed_class: package +- version: 1 +- } +- meta { +- class: package +- file: xsxp.tcl +- } +-} + 7e5b62e852f46297ee2832f63b2878456fdbfc23 { + entity { + name: asn +--- a/support/installation/modules.tcl 2019-12-01 23:04:24.000000000 +0100 ++++ b/support/installation/modules.tcl 2023-04-02 11:57:27.448845728 +0200 +@@ -45,7 +45,6 @@ + + # name pkg doc example + Module aes _tcl _man _null +-Module amazon-s3 _tcl _man _null + Module asn _tcl _man _null + Module base32 _tcl _man _null + Module base64 _tcl _man _null diff --git a/tcp-wrappers/PKGBUILD b/tcp-wrappers/PKGBUILD new file mode 100644 index 0000000..0ecc947 --- /dev/null +++ b/tcp-wrappers/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Jesus E. + +pkgbase=tcp-wrappers +pkgname=('libwrap' 'tcp-wrappers') +pkgver=7.6.31 +pkgrel=1 +pkgdesc='Monitors and Controls incoming TCP connections' +arch=('i686' 'x86_64') +url=ftp://ftp.porcupine.org/pub/security/index.html +license=('Expat') +depends=('glibc' 'libnsl') +source=(ftp://ftp.porcupine.org/pub/security/tcp_wrappers_${pkgver%.*}.tar.gz + https://deb.debian.org/debian/pool/main/t/tcp-wrappers/tcp-wrappers_${pkgver%.*}.q-${pkgver##*.}.debian.tar.xz + tcp-wrappers-redhat-bug11881.patch + hosts.allow + hosts.deny) +sha512sums=('2d9d003791f8d00912a36ae00579e2b8dd7ad8a7bf8eae259659bcaf5365b150540ff6c93c91765872c76041579b7a02b6e3c64528fb7f8235680399ba1d9dac' + 'de2bd7b081fca0f182def93795014332baf7b5edf339eaf81dff82772aea1dc866ccddccd5273e7dc49cf760953e164a66f1e5945cb54f2b8dab090c11712c33' + '5d6d9fea060a6801bca98c65dfaa2e94e77830416126950b8941a38758b9e177825c31f3878753ce6170b97a12326c3efd09647c5d5a233ebd715d171f296098' + 'c73beac92c6b860d2ff4ca7d339297080824552413d10944d665ac4ec48b18f607b0516972ff82158521739c8e5f8c3ba52ddb6012ea048236a80f117f70ca36' + 'ab5d61dde6fa845d15f830ec5300e571ce0eaf6a96c938b9a52811f83de984b5ab0fb583e4ff8df9fdf01c976270f5c1212034a08654926b11d63eda80289976') + +prepare() { + cd tcp_wrappers_${pkgver%.*} + + for patch in $(cat ../debian/patches/series); do + patch -Np1 -i ../debian/patches/${patch} + done + patch -Np1 -i ../tcp-wrappers-redhat-bug11881.patch +} + +build() { + cd tcp_wrappers_${pkgver%.*} + + make \ + COPTS="$CFLAGS" \ + LDOPTS="$LDFLAGS" \ + STYLE='-DPROCESS_OPTIONS' \ + linux +} + +package_libwrap() { + provides=(tcp_wrappers-libs) + conflicts=(tcp_wrappers-libs) + + cd tcp_wrappers_${pkgver%.*} + + install -Dm 644 tcpd.h -t "${pkgdir}"/usr/include/ + install -Dm 644 shared/libwrap.so.0.${pkgver%.*} -t "${pkgdir}"/usr/lib/ + ln -s libwrap.so.0.${pkgver%.*} "${pkgdir}"/usr/lib/libwrap.so.0 + ln -s libwrap.so.0 "${pkgdir}"/usr/lib/libwrap.so + + install -Dm 644 DISCLAIMER -t "${pkgdir}"/usr/share/licenses/$pkgname/ +} + +package_tcp-wrappers() { + depends=(libwrap) + provides=(tcp_wrappers) + conflicts=(tcp_wrappers) + backup=( + etc/hosts.allow + etc/hosts.deny + ) + + cd tcp_wrappers_${pkgver%.*} + + install -Dm 755 safe_finger tcpd tcpdchk tcpdmatch try-from -t "${pkgdir}"/usr/bin/ + install -Dm 644 *.3 -t "${pkgdir}"/usr/share/man/man3/ + install -Dm 644 *.5 -t "${pkgdir}"/usr/share/man/man5/ + install -Dm 644 *.8 -t "${pkgdir}"/usr/share/man/man8/ + install -Dm 644 ../hosts.{allow,deny} -t "${pkgdir}"/etc/ + install -Dm 644 README -t "${pkgdir}"/usr/share/doc/tcp-wrappers/ + + install -Dm 644 DISCLAIMER -t "${pkgdir}"/usr/share/licenses/$pkgname/ +} diff --git a/tcp-wrappers/hosts.allow b/tcp-wrappers/hosts.allow new file mode 100644 index 0000000..e5c035d --- /dev/null +++ b/tcp-wrappers/hosts.allow @@ -0,0 +1,5 @@ +# +# /etc/hosts.allow +# + +# End of file diff --git a/tcp-wrappers/hosts.deny b/tcp-wrappers/hosts.deny new file mode 100644 index 0000000..59b9f75 --- /dev/null +++ b/tcp-wrappers/hosts.deny @@ -0,0 +1,8 @@ +# +# /etc/hosts.deny +# + +ALL: ALL + +# End of file + diff --git a/tcp-wrappers/tcp-wrappers-redhat-bug11881.patch b/tcp-wrappers/tcp-wrappers-redhat-bug11881.patch new file mode 100644 index 0000000..2603343 --- /dev/null +++ b/tcp-wrappers/tcp-wrappers-redhat-bug11881.patch @@ -0,0 +1,36 @@ +--- tcp_wrappers_7.6/tcpd.c.bug11881 ++++ tcp_wrappers_7.6/tcpd.c +@@ -60,10 +60,10 @@ + */ + + if (argv[0][0] == '/') { +- strcpy(path, argv[0]); ++ strncpy(path, argv[0], sizeof(path)); + argv[0] = strrchr(argv[0], '/') + 1; + } else { +- sprintf(path, "%s/%s", REAL_DAEMON_DIR, argv[0]); ++ snprintf(path, sizeof(path), "%s/%s", REAL_DAEMON_DIR, argv[0]); + } + + /* +--- tcp_wrappers_7.6/eval.c.bug11881 ++++ tcp_wrappers_7.6/eval.c +@@ -111,7 +111,7 @@ + return (hostinfo); + #endif + if (STR_NE(eval_user(request), unknown)) { +- sprintf(both, "%s@%s", request->user, hostinfo); ++ snprintf(both, sizeof(both), "%s@%s", request->user, hostinfo); + return (both); + } else { + return (hostinfo); +@@ -128,7 +128,7 @@ + char *daemon = eval_daemon(request); + + if (STR_NE(host, unknown)) { +- sprintf(both, "%s@%s", daemon, host); ++ snprintf(both, sizeof(both), "%s@%s", daemon, host); + return (both); + } else { + return (daemon); + diff --git a/tcpdump/PKGBUILD b/tcpdump/PKGBUILD new file mode 100644 index 0000000..2b50218 --- /dev/null +++ b/tcpdump/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=tcpdump +pkgver=4.99.3 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Powerful command-line packet analyzer" +url='https://www.tcpdump.org' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('libpcap' 'libcap-ng' 'libressl') +makedepends=('cmake' 'quilt') +source=("https://www.tcpdump.org/release/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/t/tcpdump/tcpdump_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e1442e923d89f367cfe403dc460d0d46e19a241470d56b30b7a411bedd8d21a78c428f20ffe725cbb4fa5068f7dcc5c93d206e1a8d53feb9bccc6f0cda8bf0f9' + '2e77ab6d0a3c089df1ff0a999c87ba1d17fcb0c6fcf6eacecf43be9d1bf366809cbfbb519f2d04b1b0b410be9b4dd58fa5e04e594e609af06801bd54b6429b44') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [ ${pkgver%.*} = ${_debver%.*} ]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -S ${pkgname}-${pkgver} \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE='None' \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="${pkgdir}" install -C build + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/tdb/LICENSE b/tdb/LICENSE new file mode 100644 index 0000000..b3b00bb --- /dev/null +++ b/tdb/LICENSE @@ -0,0 +1,529 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: tdb +Upstream-Contact: Rusty Russell +Source: http://tdb.samba.org/ + +Files: * +Copyright: + 1999-2005 Andrew Tridgell + 2000-2012 Rusty Russell + 2000-2003 Jeremy Allison + 2012-2013 Volker Lendecke + 2013-2014 Stefan Metzmacher + 2014 Michael Adam +License: LGPL-3.0+ + +Files: debian/* +Copyright: + 2001-2005 Marek Habersack on + 2007-2012 Jelmer Vernooij +License: LGPL-3.0+ + +Files: common/*.c +Copyright: + Copyright (c) Andrew Tridgell 1999-2006 + Copyright (c) Paul `Rusty' Russell 2000 + Copyright (c) Jeremy Allison 2000-2003,2007 +License: LGPL-3.0+ + +Files: tools/*.c +Copyright: + Copyright (c) Andrew Tridgell 1999-2006 + Copyright (c) Paul `Rusty' Russell 2000 + Copyright (c) Jeremy Allison 2000-2003,2007 + Copyright (c) Andrew Esh 2001 +License: GPL-3.0+ + +Files: pytdb.c +Copyright: + Copyright (c) Tim Potter 2004-2006 + Copyright (c) Jelmer Vernooij 2006-2008 +License: LGPL-3.0+ + +Files: lib/replace/*.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Andrew Tridgell 1994-2006 + Copyright (c) Jeremy Allison 2000-2003,2007 + Copyright (c) Michael Adam 2008 + Copyright (c) Patrick Powell 1995 + Copyright (c) Free Software Foundation, Inc. 1991-2001 + Copyright (c) Jelmer Vernooij 2006-2009 + Copyright (c) Andreas Schneider 2009-2015 + Copyright (c) Volker Lendecke 2011-2016 + Copyright (c) Internet Software Consortium 1996-2001 + Copyright (c) Aris Adamantiadis 2003-2009 + Copyright (c) Aleksandar Kanchev 2009 + Copyright (c) Matthieu Patou 2010 +License: LGPL-3.0+ + +Files: lib/replace/getaddrinfo.* +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) PostgreSQL Global Development Group 1996-2007 + Copyright (c) The Regents of the University of California 1994 +License: PostgreSQL + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without a written agreement + is hereby granted, provided that the above copyright notice and this paragraph + and the following two paragraphs appear in all copies. + . + IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + . + THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS + TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +Files: lib/replace/inet_ntop.c lib/replace/inet_pton.c +Comment: This file is not used when building the Debian package. +Copyright: Internet Software Consortium. 1996-2001 +License: ISC + +Files: lib/replace/snprintf.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Patrick Powell 1995 + Copyright (c) Brandon Long 1997 + Copyright (c) Thomas Roessler 1998 + Copyright (c) Michael Elkins 1998 + Copyright (c) Andrew Tridgell (tridge@samba.org) 1998-2001 + Copyright (c) Martin Pool 2003 + Copyright (c) Darren Tucker (dtucker@zip.com.au) 2005 + Copyright (c) Simo Sorce (idra@samba.org) 2006 +License: BSD-3 + +Files: lib/replace/strptime.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Ulrich Drepper , 1996 +License: LGPL-3.0+ + +Files: lib/replace/timegm.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Kungliga Tekniska Högskolan 1997 +License: BSD-3 + +Files: lib/replace/xattr.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Jeremy Allison 1998-2005 + Copyright (C) Timur Bakeyev 2005 + Copyright (C) Bjoern Jacke 2006-2007 + Copyright (C) Herb Lewis 2003 + Copyright (C) Andrew Bartlett 2012 +License: LGPL-3.0+ + +Files: + buildtools/bin/waf + buildtools/wafsamba/stale_files.py + third_party/waf/* +Comment: See https://gitlab.com/ita1024/waf/blob/master/waf-light#L6 +Copyright: + Copyright Scott Newton, 2005 (scottn) + Copyright Thomas Nagy, 2005-2018 (ita) +License: BSD-3 + +Files: + third_party/waf/waflib/extras/bjam.py + third_party/waf/waflib/extras/proc.py + third_party/waf/waflib/extras/softlink_libs.py +Copyright: + Copyright rosengren 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/blender.py +Copyright: + Copyright Michal Proszek, 2014 (poxip) +License: BSD-3 + +Files: third_party/waf/waflib/extras/boo.py +Copyright: + Copyright Yannick LM 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/boost.py +Copyright: + Copyright Gernot Vormayr + Copyright Ruediger Sonderfeld , 2008 + Copyright Bjoern Michaelsen, 2008 + Copyright Luca Fossati, 2008 + Copyright Thomas Nagy, 2008 + Copyright Sylvain Rouquette, 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/buildcopy.py +Copyright: + Copyright Calle Rosenquist, 2017 (xbreak) +License: BSD-3 + +Files: third_party/waf/waflib/extras/cabal.py +Copyright: + Copyright Anton Feldmann, 2012 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/c_bgxlc.py + third_party/waf/waflib/extras/c_nec.py + third_party/waf/waflib/extras/fc_bgxlf.py + third_party/waf/waflib/extras/fc_cray.py + third_party/waf/waflib/extras/fc_nag.py + third_party/waf/waflib/extras/fc_nec.py + third_party/waf/waflib/extras/fc_open64.py + third_party/waf/waflib/extras/fc_open64.py + third_party/waf/waflib/extras/fc_solstudio.py + third_party/waf/waflib/extras/fc_xlf.py +Copyright: + Copyright harald at klimachs.de +License: BSD-3 + +Files: third_party/waf/waflib/extras/clang_compilation_database.py +Copyright: + Copyright Christoph Koke, 2013 +License: BSD-3 + +Files: third_party/waf/waflib/extras/codelite.py +Copyright: + Copyright Christian Klein (chrikle@berlios.de) +License: BSD-3 + +Files: + third_party/waf/waflib/extras/color_gcc.py + third_party/waf/waflib/extras/color_rvct.py + third_party/waf/waflib/extras/cross_gnu.py + third_party/waf/waflib/extras/dcc.py + third_party/waf/waflib/extras/halide.py + third_party/waf/waflib/extras/qnxnto.py + third_party/waf/waflib/extras/remote.py + third_party/waf/waflib/extras/rst.py + third_party/waf/waflib/extras/ticgt.py +Copyright: + Copyright JĂ©rĂ´me Carretero, 2011-2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/cppcheck.py +Copyright: + Copyright Michel Mooij, michel.mooij7@gmail.com +License: BSD-3 + +Files: + third_party/waf/waflib/extras/cpplint.py + third_party/waf/waflib/extras/freeimage.py + third_party/waf/waflib/extras/pep8.py +Copyright: + Copyright Sylvain Rouquette, 2011-2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/dpapi.py +Copyright: + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/eclipse.py +Copyright: + Copyright Richard Quirk 2009-1011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/erlang.py +Copyright: + Copyright Thomas Nagy, 2010 (ita) + Copyright Przemyslaw Rzepecki, 2016 +License: BSD-3 + +Files: third_party/waf/waflib/extras/fluid.py third_party/waf/waflib/extras/objcopy.py +Copyright: + Copyright Grygoriy Fuchedzhy 2009-2010 +License: BSD-3 + +Files: third_party/waf/waflib/extras/gdbus.py third_party/waf/waflib/extras/msvcdeps.py +Copyright: + Copyright Copyright Garmin International or its subsidiaries, 2012-2018 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/gob2.py + third_party/waf/waflib/Tools/dbus.py + third_party/waf/waflib/Tools/gnu_dirs.py +Copyright: + Copyright Ali Sabil, 2007 +License: BSD-3 + +Files: third_party/waf/waflib/extras/javatest.py third_party/waf/waflib/extras/pyqt5.py +Copyright: + Copyright Federico Pellegrin, 2016-2018 (fedepell) +License: BSD-3 + +Files: third_party/waf/waflib/extras/midl.py +Copyright: + Copyright ultrix gmail com +License: BSD-3 + +Files: third_party/waf/waflib/extras/msvs.py +Copyright: + Copyright Avalanche Studios 2009-2011 + Copyright Thomas Nagy 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pch.py +Copyright: + Copyright Alexander Afanasyev (UCLA), 2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pgicc.py third_party/waf/waflib/extras/pgicxx.py +Copyright: + Copyright Antoine Dechaume 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/protoc.py +Copyright: + Copyright Philipp Bender, 2012 + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pytest.py +Copyright: + Copyright Calle Rosenquist, 2016-2018 (xbreak) +License: BSD-3 + +Files: third_party/waf/waflib/extras/review.py +Copyright: + Copyright Laurent Birtz, 2011 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/run_do_script.py + third_party/waf/waflib/extras/run_m_script.py + third_party/waf/waflib/extras/run_py_script.py + third_party/waf/waflib/extras/run_r_script.py +Copyright: + Copyright Hans-Martin von Gaudecker, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/sas.py +Copyright: + Copyright Mark Coggeshall, 2010 +License: BSD-3 + +Files: third_party/waf/waflib/extras/swig.py +Copyright: + Copyright Petar Forai + Copyright Thomas Nagy 2008-2010 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/extras/use_config.py +Copyright: + Copyright Mathieu Courtois - EDF R&D, 2013 - http://www.code-aster.org +License: BSD-3 + +Files: third_party/waf/waflib/extras/valadoc.py +Copyright: + Copyright Nicolas Joseph 2009 +License: BSD-3 + +Files: third_party/waf/waflib/extras/xcode6.py +Copyright: + Copyright Nicolas Mercier 2011 + Copyright Simon Warg 2015, https://github.com/mimom +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ar.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/bison.py +Copyright: + Copyright John O'Meara, 2006 + Copyright Thomas Nagy 2009-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/clang.py +Copyright: + Copyright Krzysztof KosiĹ„ski 2014 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/compiler_c.py third_party/waf/waflib/Tools/compiler_cxx.py +Copyright: + Copyright Matthias Jahn jahn dĂ´t matthias ât freenet dĂ´t de, 2007 (pmarat) +License: BSD-3 + +Files: + third_party/waf/waflib/Tools/compiler_d.py + third_party/waf/waflib/Tools/dmd.py + third_party/waf/waflib/Tools/d.py + third_party/waf/waflib/Tools/gdc.py + third_party/waf/waflib/Tools/waf_unit_test.py +Copyright: + Copyright Carlos Rafael Giani, 2006-2007 (dv) + Copyright Thomas Nagy, 2008-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/flex.py +Copyright: + Copyright John O'Meara, 2006 + Thomas Nagy, 2006-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/g95.py +Copyright: + Copyright KWS 2010 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/gcc.py third_party/waf/waflib/Tools/gxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) + Copyright Yinon Ehrlich, 2009 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/icc.py +Copyright: + Copyright Stian Selnes 2008 + Copyright Thomas Nagy 2009-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ldc2.py +Copyright: + Copyright Alex Rønne Petersen, 2012 (alexrp/Zor) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/lua.py +Copyright: + Copyright Sebastian Schlingmann, 2008 + Copyright Thomas Nagy, 2008-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/msvc.py +Copyright: + Copyright Carlos Rafael Giani, 2006 (dv) + Copyright Tamas Pal, 2007 (folti) + Copyright Nicolas Mercier, 2009 + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/perl.py +Copyright: + Copyright andersg at 0x63.nu 2007 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/python.py +Copyright: + Copyright Thomas Nagy, 2007-2015 (ita) + Copyright Gustavo Carneiro (gjc), 2007 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ruby.py +Copyright: + Copyright daniel.svensson at purplescout.se 2008 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/suncc.py third_party/waf/waflib/Tools/suncxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/vala.py +Copyright: + Copyright Ali Sabil, 2007 + Copyright RadosĹ‚aw SzkodziĹ„ski, 2010 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/winres.py +Copyright: + Copyright Brant Young, 2007 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/xlc.py third_party/waf/waflib/Tools/xlcxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) + Copyright Yinon Ehrlich, 2009 + Copyright Michael Kuhn, 2009 +License: BSD-3 + +License: ISC + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + . + THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM + DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL + INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING + FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +License: BSD-3 + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + 3. Neither the name of the Institute nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +License: LGPL-3.0+ + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + . + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU Lesser General + Public License can be found in "/usr/share/common-licenses/LGPL-3". + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff --git a/tdb/PKGBUILD b/tdb/PKGBUILD new file mode 100644 index 0000000..5ea8760 --- /dev/null +++ b/tdb/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=tdb +pkgver=1.4.3 +_debver=1.4.3 +_debrel=1 +pkgrel=1 +pkgdesc='Trivial Database similar to GDBM but allows simultaneous commits' +arch=('i686' 'x86_64') +license=('GPL-3' 'LGPL-3' 'Modified-BSD' 'Expat') +url='https://tdb.samba.org/' +depends=('glibc') +makedepends=('python' 'libxslt' 'docbook-xsl' 'quilt') +optdepends=('python: for python bindings') +source=(https://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar{.gz,.asc} + https://deb.debian.org/debian/pool/main/t/tdb/tdb_${_debver}-${_debrel}.debian.tar.xz + LICENSE) +validpgpkeys=('9147A339719518EE9011BCB54793916113084025') # Samba Library Distribution Key +sha512sums=('99488839e7da396f04df60412d21a7d3e09efeab52772d6cb5e9470a3dfd585d73ef2422c51cd0d8ccc123a65d455de400d5d6b24a21a2a50d3da60d9a70e67a' + 'SKIP' + '21289db0e27f10fa0b4d93e702b142f58347b17bfddd3db7d52c77b815746aec347c89b6d3022d78fc8545b9775521b988c30bc4161db168451001ba9aa79dd4' + '438bb58048c062d795c5f975b30d0fda8cb4b50badae12ac8038f7a3e0a32e0a6627d8359ef6b82f1882dc0bff27263b453007e90f13a5efdd6c993ff8f3881f') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --localstatedir=/var \ + --sysconfdir=/etc/samba + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tecnoballz/PKGBUILD b/tecnoballz/PKGBUILD new file mode 100644 index 0000000..8fea22b --- /dev/null +++ b/tecnoballz/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=tecnoballz +pkgver=0.93.1 +_debver=$pkgver +_debrel=10 +pkgrel=1 +pkgdesc="Free and libre breaking block game" +arch=('i686' 'x86_64') +url='http://linux.tlk.fr/games/TecnoballZ/' +license=('GPL-3') +depends=('sdl_image' 'sdl_mixer' 'tinyxml') +makedepends=('quilt') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/t/tecnoballz/tecnoballz_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/t/tecnoballz/tecnoballz_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('a7e30d408f907b9b5bbbf20002088d3cb84b7ee22b92b8ebbe14ad056036ce291ecd61531402c876047f69f2068ce844c5351dbf9e29a240b321a6d365c3c1ea' + 'c37e3200201b1c80193c6688130938bade0fee655ffbaa67c37213bb4c7a500107c92cb29d5df5a9a5276627d2806d7e17945dc7c30f9fdffb70eba002159f7f') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --datadir=/usr/share/games + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 man/$pkgname.6 -t "$pkgdir/usr/share/man/man6" + install -Dm644 debian/$pkgname.desktop -t "$pkgdir/usr/share/applications" + install -Dm644 debian/$pkgname.xpm -t "$pkgdir/usr/share/pixmaps" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ted/PKGBUILD b/ted/PKGBUILD new file mode 100644 index 0000000..911a522 --- /dev/null +++ b/ted/PKGBUILD @@ -0,0 +1,103 @@ +# Maintainer: Jesus E. + +pkgname=ted +pkgver=2.23 +pkgrel=1 +pkgdesc="Lightweight, free and libre RTF text processor" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://www.nllgg.nl/Ted/' +depends=('freetype2' 'ghostscript' 'gtk2' 'libjpeg' 'libpaper' 'libpng' 'libtiff' 'libxpm' 'pcre' 'zlib') +makedepends=('lsb-release') +options=(!makeflags) + +_languagepacks=( + nl_NL + en_GB + de_DE + es_ES + es_AR + pt_PT + pt_BR + fr_FR + it_IT + cs_CZ + da_DK + sv_SE + nb_NO + pl_PL + sk_SK + hu_HU + mg_MG + bg_BG + ru_RU + hr_HR + fi_FI +) + +_documentlanguages=( + de_DE + fr_FR + mg_MG +) + +for _langpack in "${_languagepacks[@]}"; do + _langpacksrc+=(https://ftp.nluug.nl/pub/editors/${pkgname}/${pkgname}_${_langpack}.tar.gz) + _langpackfilenames+=(${pkgname}_${_langpack}.tar.gz) +done + +for _doclang in "${_documentlanguages[@]}"; do + _doclangsrc+=(https://ftp.nluug.nl/pub/editors/${pkgname}/TedDocument-${_doclang}.rtf) +done + +source=("https://ftp.nluug.nl/pub/editors/${pkgname}/${pkgname}-${pkgver}.src.tar.gz" + ${_langpacksrc[@]} + ${_doclangsrc[@]}) +sha512sums=('c6541e5a07545a08b30cb9b33429d9a7675f9252df32ccca5cdb4f2ff09978085d28d015a42922baf8c95db1ea6379a9d1088541aafd9ce45b8870212496849f' + 'aa61cb651aee407e9fbc9369d288b2563ab6909322030fa720830bcdca86d5a756631e60569953d9e71562168d0a11822d3049bbc9e2e38bc16b1222d75fcac1' + '0cd11dc5433d40e7acf658447279b7dde1e547cee19b5260cbe1702a64fa3be4863c88c3fa102783444e0d474e06f3522ee0ff7f7b728bef1f4903daad080e6b' + 'd0d60946e0e6f56c018930479dd698cd13d2f5acfa6e3093e1631f32031d31339c24f903583df6651d9f9566c23cc8755acae1e70d423848f197aba4a5626a85' + '7fdfa878454a59060ed7ac8af369ef6a0f196b4963a35a9d17eeca33ae562f2793afa6f76f25cd8f3c56ff7ec8b3b083a416ea264e80a1d82b4408101254e17c' + '4972afb9d80af362eb345f5a4a5bdffc3832d5601d0621cae3a9733a1911f3540a9d0821f0ecf780bf21d9bf180fb58b0671fc8006aaf625b496fc87c2bd8f48' + '7696e63a68b532552feea41b453cec72908d16deb72b05ae638eb8832ad766cbe03bde25ea19021966873a949358334544a3172fd0962472cde756bf28a0089e' + '8e981c9979d2339ab97b942a2ab0c876a31aac09a450404dc863562e5d1cac8c7f9be73e6de1a667b56aceeb1391525a7af281991fff792199193855e423021b' + '5d2550a47d1fa3d73ec9a5643a87d458d595c185f09fc663923c2ec8967d9678afdba2a37d6ec501a072e3dcd456d9a070f2c815ffacb152b8106525ca6c815a' + '379e2524f76fcfb36c5ead563224b5a19a2f777eb1d13f940d0a6a22a61cef994476986523831b93188f6e161ed480850d4b069a9c920b06358694f927692a32' + 'c801e5df3e3834e5ccbd37efc0c1bba69e47de2d64f3abdf01b373cf3a8d51d6d855bfb4540e24ef0e478e7107bb704edde8f10167cfe84b245214390df56be4' + 'ff42033ca0b57186252235da0730bcbf8c3270000d2e33090a8fa19f180df6ab3c0339ebbd230ba8846cc6ff9c86d3484f23a35f54c119788daca08298a004c5' + '790ca5a674bdf769819bbfc2fd73de2d04bbc24b1e44661931d2615dc470b04e0ecb4fd3d82cfb2f28d3e8472895ea50b4361458601df6196606bc407a7e5f17' + '403546184707823fc4a3b87f2ba04057185cb532a119442fe5ff6a54111f2f8e614c47387c08ce86431905c4a6ff0ec4b01e61a7642b0b5d8ba73bb54ad65cc8' + 'f6be5fe03ca99b137a41187204fe598b2fa27ec71abf126f938b545dbe1edc6631b167b3d866fdd0ea36361b90218adea16c716a0524e4adb21cc3b3fa6a378e' + '6677b2862737f1ee5a1e81731d79a9d850b66e237c817f8823fabd2bccbbb29874fa342be63dcda04ba7f971cb087fe8cf643e0cbae3f1306f583a95a6963dc1' + 'f723ee07217e2d01c74e8c3d305d7c1d0b193c6b65a4686fccd1cc320db02298abb8b5c12453b851ff3f47ba20c78f87f379fce90e9331ab840494b0d49b1b25' + 'd51b414ea05297602e8ca8c717fc86b12ec133049e37c0c82e38c7cf9ef62b2b6625ef4c490ced3e100265ff7164c704fd04116a3e644243a8ba56a224020ed5' + '21787b8cc58970cbe9cac1e1c15813a76b7b349504417288a7d2f31260a5830890aa25a613b9eea294c264cca89c380f992bac8da9fa0f2e15c1c72f1356cdc1' + '594368fd818d986205c206afbbe26b00c272f745c842f6e066d1e80be05f2b03c4e7c5f15bf455ab001c05a4983c8c5849369ef5e8fc71673a41725d13260538' + '49fb36e6452148269fb642f284ecc876ca3a2c5a37586242a1706d2d705a370d72313f46ca5546435ac00df1373e030938e8d960d172ae9be166d364256dea12' + '813e034a4508815dce0741bd3601ba71f8700c9cc4a2200c13c64244fb0c3f690066eb536cb54899a5b197f083b857faface7173f2afffc3e7828bb2a36f6309' + '8eee013b2a2e5d3570f1bcf979a12ffc19c6cf8b84bb6eb71b21fe06c118283d84a30574da9505b7c58b5d4c40edcb8e4ef10080382337754515b8b8e6bc761c' + '789c5789bb334f51b7df324b923dd4f88924e293c8c214a21645b5f8b20638bc15f1b1bd7dbde299f03438113466a80a54c91865e339014f5ee95b5cd410f4ce' + 'cce0bda63ae1b6a7b9a4d3d479bc1b4353ad956f9c24bd4960d390a341d7dc9a98d1f93363dd6fc6e299e9aa29fe8931e498e40aef28eb4a7854c12feb3c6355') +noextract=(${_langpackfilenames[@]}) + +build() { + cd Ted-$pkgver + make -j1 + make package -j1 +} + +package() { + install -dm755 "$pkgdir/usr/share/Ted" + install -m644 TedDocument-*_*.rtf "$pkgdir/usr/share/Ted" + + cd Ted-$pkgver/tedPackage + DESTDIR="$pkgdir" make -j1 install + + cd "$pkgdir" + for _file in "$srcdir/"ted_*_*.tar.gz; do + tar xf "$_file" + done + + install -Dm644 "$srcdir/Ted-$pkgver/"gpl.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} + diff --git a/teeworlds/PKGBUILD b/teeworlds/PKGBUILD new file mode 100644 index 0000000..da72162 --- /dev/null +++ b/teeworlds/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=teeworlds +pkgver=0.7.5 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="Fast-paced, free and libre multiplayer 2D shooter game" +arch=('i686' 'x86_64') +url='https://www.teeworlds.com' +license=('Simplified-BSD' 'Modified-BSD' 'zlib' 'CC-BY-SA-3.0' 'CC0-1.0') +depends=('alsa-lib' 'glu' 'sdl2' 'freetype2') +makedepends=('quilt' 'python' 'bam' 'mesa' 'graphicsmagick') +groups=('games') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/t/teeworlds/teeworlds_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/t/teeworlds/teeworlds_${_debver}-${_debrel}.debian.tar.xz" + "${pkgname}.desktop") +sha512sums=('f3c7898b884aba0a61d40e4f5bacc71b2ba3bfb16b876efead5d96e6aeebdb3289c2a8a503e6407a9ff19970b59307447e1e066b631970e294d84303cd74cc83' + '970bbbb1ce5cbd9cc8d806b38267b59245875dddf2cb82668e98b05346ba0cf3b9389ed65ac7268cd58bcee90e0368b192619e1d09b3b213decc70c351cf181f' + '525825152eaa60a1a050c60f86fe076e01c67382d62c6d140938ee524a7a722dbd041d5ed7036ffa9db00c771df6a2af1804caa9b07194b6f263d05954eddef8') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/system-libs.patch || true + rm -v debian/patches/set-data-dir.patch || true + rm -v debian/patches/new-wavpack.patch || true + + quilt push -av + fi + + gm convert +set date:create +set date:modify "./other/icons/${pkgname}.ico" "${srcdir}/${pkgname}.png" +} + +build() { + cd ${pkgname}-${pkgver} + bam conf=release +} + +package() { + cd ${pkgname}-${pkgver} + + # install data files + mkdir -p "${pkgdir}"/usr/share/games/${pkgname}/data + + # handling package-data and binaries + cp -r build/output/data/* "${pkgdir}"/usr/share/games/${pkgname}/data + cp -r data/{languages,maps} "${pkgdir}"/usr/share/games/${pkgname}/data + install -Dm755 build/output/${pkgname} "${pkgdir}"/usr/games/${pkgname} + install -Dm755 build/output/${pkgname}_srv "${pkgdir}"/usr/games/${pkgname}_srv + + install -Dm644 "${srcdir}"/${pkgname}.desktop "${pkgdir}"/usr/share/applications/${pkgname}.desktop + install -Dm644 "${srcdir}"/${pkgname}.png "${pkgdir}"/usr/share/pixmaps/${pkgname}.png + + install -Dm644 debian/$pkgname{,-server}.6 -t "${pkgdir}"/usr/share/man/man6 + + install -Dm644 license.txt debian/copyright -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/teeworlds/teeworlds.desktop b/teeworlds/teeworlds.desktop new file mode 100644 index 0000000..61304db --- /dev/null +++ b/teeworlds/teeworlds.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Teeworlds +Comment=Fast-paced, free and libre multiplayer 2D shooter game +Exec=teeworlds +Icon=teeworlds +Terminal=false +StartupNotify=false +Categories=Game;ArcadeGame; diff --git a/terminus-font/PKGBUILD b/terminus-font/PKGBUILD new file mode 100644 index 0000000..d913aef --- /dev/null +++ b/terminus-font/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=terminus-font +pkgver=4.48 +_debver=4.48 +_debrel=3 +pkgrel=2 +pkgdesc='Monospace bitmap font (for X11 and console)' +url='http://terminus-font.sourceforge.net/' +arch=('any') +license=('OFL-1.1') +makedepends=('xenocara-bdftopcf' 'python' 'quilt') +source=(https://downloads.sourceforge.net/project/terminus-font/terminus-font-$pkgver/terminus-font-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/x/xfonts-terminus/xfonts-terminus_$_debver-$_debrel.debian.tar.xz) +sha512sums=('5f45f7d0e7396f02158f4751aaafb3f0a3fb68dbe3e5501f86a5138c6d52f5106053e38c368d560e5979e29250074dbde5165702b8905a564d029663a2219af4' + '7082b18f7d5c75e8ea3a16341c8a49f667b6af7ed3524d7d08b6fcb5b7ba9afe778807b85c1f457981afbd9d5da5b8e75b9dae1daef886ecdc1af9bdd186e9a6') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --x11dir=/usr/share/fonts/misc \ + --psfdir=/usr/share/kbd/consolefonts + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/terminus-font-$pkgver/75-yes-terminus.conf" \ + "$pkgdir/etc/fonts/conf.avail/75-yes-terminus.conf" + install -Dm644 "$srcdir/$pkgname-$pkgver/OFL.TXT" -t \ + "$pkgdir/usr/share/licenses/$pkgname" + install -d "$pkgdir/etc/fonts/conf.d" + + cd "$pkgdir/etc/fonts/conf.d" + ln -s ../conf.avail/75-yes-terminus.conf . +} diff --git a/tesseract-data/PKGBUILD b/tesseract-data/PKGBUILD new file mode 100644 index 0000000..da2c607 --- /dev/null +++ b/tesseract-data/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +_langs=(afr amh ara asm aze aze_cyrl bel ben bod bos bre bul cat ceb ces +chi_sim chi_tra chr cos cym dan dan_frak deu deu_frak div dzo ell eng enm epo +equ est eus fao fas fil fin fra frk frm fry gla gle glg grc guj hat heb +hin hrv hun hye iku ind isl ita ita_old jav jpn kan kat kat_old kaz khm +kir kmr kor kor_vert lao lat lav lit ltz mal mar mkd mlt mon mri msa +mya nep nld nor oci ori osd pan pol por pus que ron rus san sin slk +slk_frak slv snd spa spa_old sqi srp srp_latn sun swa swe syr tam tat +tel tgk tgl tha tir ton tur uig ukr urd uzb uzb_cyrl vie yid yor) + +pkgbase=tesseract-data +pkgname=($(for l in ${_langs[@]}; do echo tesseract-data-${l}; done)) +pkgver=4.1.0 +pkgrel=1 +arch=('any') +url="https://github.com/tesseract-ocr/tessdata" +license=("Apache-2.0") +source=($pkgbase-$pkgver.tar.gz::https://github.com/tesseract-ocr/tessdata/archive/$pkgver.tar.gz) +sha512sums=('c0b55fb5542d25ebd4b56d25155cc8254027c9503af298641686388886403ee26ebf9ef47d21d530d372deeba6a01f6eb17705e1ab46bb02f9f7bf4f63805cd0') + +build() { + true +} + +# Declare the package functions for data +for l in ${_langs[@]}; do + eval " +package_tesseract-data-${l}(){ + pkgdesc=\"Tesseract OCR data ($l)\" + depends=('tesseract') + groups=('tesseract-data') + + mkdir -p \$pkgdir/usr/share/tessdata + cp \$srcdir/tessdata-$pkgver/${l}.* \$pkgdir/usr/share/tessdata/ + mkdir -p \$pkgdir/usr/share/licenses/$pkgname + cp \$srcdir/tessdata-$pkgver/LICENSE \$pkgdir/usr/share/licenses/$pkgname/ + find \$pkgdir/usr/share/licenses/$pkgname -type f -exec chmod 0644 {} \; + find \$pkgdir/usr/share/tessdata -type f -exec chmod 0644 {} \; +} + " +done diff --git a/tesseract/PKGBUILD b/tesseract/PKGBUILD new file mode 100644 index 0000000..19f7f79 --- /dev/null +++ b/tesseract/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +_langs=(afr amh ara asm aze aze_cyrl bel ben bod bos bre bul cat ceb ces + chi_sim chi_tra chr cos cym dan dan_frak deu deu_frak div dzo ell eng enm epo + equ est eus fao fas fil fin fra frk frm fry gla gle glg grc guj hat heb + hin hrv hun hye iku ind isl ita ita_old jav jpn kan kat kat_old kaz khm + kir kmr kor kor_vert lao lat lav lit ltz mal mar mkd mlt mon mri msa + mya nep nld nor oci ori osd pan pol por pus que ron rus san sin slk + slk_frak slv snd spa spa_old sqi srp srp_latn sun swa swe syr tam tat + tel tgk tgl tha tir ton tur uig ukr urd uzb uzb_cyrl vie yid yor) + +pkgname=tesseract +pkgver=4.1.1 +_debver=4.1.1 +_debrel=2.1 +pkgrel=1 +pkgdesc='An OCR program' +arch=('i686' 'x86_64') +url='https://github.com/tesseract-ocr/tesseract' +license=('Apache-2.0') +depends=('libpng' 'libtiff' 'libjpeg-turbo' 'zlib' 'giflib' 'gcc-libs' 'curl' 'libarchive' 'leptonica') +makedepends=('icu' 'cairo' 'pango' 'asciidoc' 'quilt') +install=tesseract.install +optdepends=('icu' 'cairo' 'pango' + $(for l in ${_langs[@]}; do echo tesseract-data-${l}; done)) +source=($pkgname-$pkgver.tar.gz::https://github.com/tesseract-ocr/tesseract/archive/$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/t/tesseract/tesseract_$_debver-$_debrel.debian.tar.xz + https://github.com/tesseract-ocr/tessdata/raw/bf82613055ebc6e63d9e3b438a5c234bfd638c93/osd.traineddata) +sha512sums=('017723a2268be789fe98978eed02fd294968cc8050dde376dee026f56f2b99df42db935049ae5e72c4519a920e263b40af1a6a40d9942e66608145b3131a71a2' + '458f805cb13dce5538e9811ea0e243275e82d7bcb7aef8f468c7ed20a0e278bcee1ff4cc874ba1952a8d9d27b2f5f1eabaa4cad659668a38474d579e4334082d' + 'c54f481903187bed19cf14c69b24c44044b540f50814de66dff8d35e6987eea71ef4464492a8fae9242fcb22cccbe59e009f3a4dab6c36ad63f78c52ebe9628f') + +prepare() { + cd "$srcdir"/$pkgname-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/$pkgname-${pkgver} + [ -x configure ] || ./autogen.sh + [ -f Makefile ] || ./configure --prefix=/usr + make + make training +} + +package() { + cd "$srcdir"/$pkgname-${pkgver} + make DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" training-install + mkdir -p "$pkgdir"/usr/share/tessdata + install -Dm0644 "$srcdir"/osd.traineddata "$pkgdir"/usr/share/tessdata/osd.traineddata + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tesseract/tesseract.install b/tesseract/tesseract.install new file mode 100644 index 0000000..3442693 --- /dev/null +++ b/tesseract/tesseract.install @@ -0,0 +1,8 @@ +post_install() { + echo "You must install one of tesseract-data-* packages or whole tesseract-data group" +} + +post_upgrade() { + post_install +} + diff --git a/testdisk/PKGBUILD b/testdisk/PKGBUILD new file mode 100644 index 0000000..720b7ae --- /dev/null +++ b/testdisk/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=testdisk +pkgver=7.1 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="Checks and undeletes partitions + PhotoRec, signature based recovery tool" +arch=('i686' 'x86_64') +url="https://www.cgsecurity.org/wiki/TestDisk" +license=('GPL-2') +depends=('libjpeg-turbo' 'libressl' 'reiserfsprogs' 'ntfs-3g' 'qt-base') +makedepends=('quilt' 'qt-tools') +source=("https://www.cgsecurity.org/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/t/testdisk/testdisk_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ad6531eec45c1ed8d4a0ce6132692bb609c4c269fbca57f788ce808214e0b00b5fb1187745a859c5da8a3cb8de18b29904792d3246b15cedfa24bf24cbfe3df5' + '5bfd89935dc928fd5a8cd992659b79e97f2f78cb5e923b2cd08a9f8dff26e9163673c839fd14e03fa72c5c1ea44f9a5ebd5b419c7258cd7e7dea4059a975c8b8') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + ./configure --prefix=/usr \ + --without-ewf + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tevent/LICENSE b/tevent/LICENSE new file mode 100644 index 0000000..d93ec33 --- /dev/null +++ b/tevent/LICENSE @@ -0,0 +1,519 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: tevent +Upstream-Contact: Samba Developers +Source: http://tevent.samba.org/ +Debianized-By: Jelmer Vernooij +Debianized-Date: Tue, 23 Dec 2008 03:50:40 +0100 + +Files: * +Copyright: + 2003-2007 Andrew Tridgell + 2005 Stefan Metzmacher + 2005 Jelmer Vernooij +License: LGPL-3.0+ + +Files: debian/* +Copyright: 2008, Jelmer Vernooij +License: LGPL-3.0+ + +Files: lib/talloc/* +Copyright: + 2004-2010 Andrew Tridgell + 2008-2011 Jelmer Vernooij + 2006-2009 Stefan Metzmacher + 2015 Petr Viktorin +License: LGPL-3.0+ + +Files: lib/talloc/pytalloc* +Copyright: + Copyright (C) Jelmer Vernooij 2008-2011 + Copyright (C) Andrew Bartlett 2016 +License: GPL-3.0+ + +Files: lib/replace/*.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Andrew Tridgell 1994-2006 + Copyright (c) Jeremy Allison 2000-2003,2007 + Copyright (c) Michael Adam 2008 + Copyright (c) Patrick Powell 1995 + Copyright (c) Free Software Foundation, Inc. 1991-2001 + Copyright (c) Jelmer Vernooij 2006-2009 + Copyright (c) Andreas Schneider 2009-2015 + Copyright (c) Volker Lendecke 2011-2016 + Copyright (c) Internet Software Consortium 1996-2001 + Copyright (c) Aris Adamantiadis 2003-2009 + Copyright (c) Aleksandar Kanchev 2009 + Copyright (c) Matthieu Patou 2010 +License: LGPL-3.0+ + +Files: lib/replace/getaddrinfo.* +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) PostgreSQL Global Development Group 1996-2007 + Copyright (c) The Regents of the University of California 1994 +License: PostgreSQL + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without a written agreement + is hereby granted, provided that the above copyright notice and this paragraph + and the following two paragraphs appear in all copies. + . + IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR + DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, + EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + . + THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS + TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +Files: lib/replace/inet_ntop.c lib/replace/inet_pton.c +Comment: This file is not used when building the Debian package. +Copyright: Internet Software Consortium. 1996-2001 +License: ISC + +Files: lib/replace/snprintf.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Patrick Powell 1995 + Copyright (c) Brandon Long 1997 + Copyright (c) Thomas Roessler 1998 + Copyright (c) Michael Elkins 1998 + Copyright (c) Andrew Tridgell (tridge@samba.org) 1998-2001 + Copyright (c) Martin Pool 2003 + Copyright (c) Darren Tucker (dtucker@zip.com.au) 2005 + Copyright (c) Simo Sorce (idra@samba.org) 2006 +License: BSD-3 + +Files: lib/replace/strptime.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Ulrich Drepper , 1996 +License: LGPL-3.0+ + +Files: lib/replace/timegm.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Kungliga Tekniska Högskolan 1997 +License: BSD-3 + +Files: lib/replace/xattr.c +Comment: This file is not used when building the Debian package. +Copyright: + Copyright (c) Jeremy Allison 1998-2005 + Copyright (C) Timur Bakeyev 2005 + Copyright (C) Bjoern Jacke 2006-2007 + Copyright (C) Herb Lewis 2003 + Copyright (C) Andrew Bartlett 2012 +License: LGPL-3.0+ + +Files: + buildtools/bin/waf + buildtools/wafsamba/stale_files.py + third_party/waf/* +Comment: See https://gitlab.com/ita1024/waf/blob/master/waf-light#L6 +Copyright: + Copyright Scott Newton, 2005 (scottn) + Copyright Thomas Nagy, 2005-2018 (ita) +License: BSD-3 + +Files: + third_party/waf/waflib/extras/bjam.py + third_party/waf/waflib/extras/proc.py + third_party/waf/waflib/extras/softlink_libs.py +Copyright: + Copyright rosengren 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/blender.py +Copyright: + Copyright Michal Proszek, 2014 (poxip) +License: BSD-3 + +Files: third_party/waf/waflib/extras/boo.py +Copyright: + Copyright Yannick LM 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/boost.py +Copyright: + Copyright Gernot Vormayr + Copyright Ruediger Sonderfeld , 2008 + Copyright Bjoern Michaelsen, 2008 + Copyright Luca Fossati, 2008 + Copyright Thomas Nagy, 2008 + Copyright Sylvain Rouquette, 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/buildcopy.py +Copyright: + Copyright Calle Rosenquist, 2017 (xbreak) +License: BSD-3 + +Files: third_party/waf/waflib/extras/cabal.py +Copyright: + Copyright Anton Feldmann, 2012 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/c_bgxlc.py + third_party/waf/waflib/extras/c_nec.py + third_party/waf/waflib/extras/fc_bgxlf.py + third_party/waf/waflib/extras/fc_cray.py + third_party/waf/waflib/extras/fc_nag.py + third_party/waf/waflib/extras/fc_nec.py + third_party/waf/waflib/extras/fc_open64.py + third_party/waf/waflib/extras/fc_open64.py + third_party/waf/waflib/extras/fc_solstudio.py + third_party/waf/waflib/extras/fc_xlf.py +Copyright: + Copyright harald at klimachs.de +License: BSD-3 + +Files: third_party/waf/waflib/extras/clang_compilation_database.py +Copyright: + Copyright Christoph Koke, 2013 +License: BSD-3 + +Files: third_party/waf/waflib/extras/codelite.py +Copyright: + Copyright Christian Klein (chrikle@berlios.de) +License: BSD-3 + +Files: + third_party/waf/waflib/extras/color_gcc.py + third_party/waf/waflib/extras/color_rvct.py + third_party/waf/waflib/extras/cross_gnu.py + third_party/waf/waflib/extras/dcc.py + third_party/waf/waflib/extras/halide.py + third_party/waf/waflib/extras/qnxnto.py + third_party/waf/waflib/extras/remote.py + third_party/waf/waflib/extras/rst.py + third_party/waf/waflib/extras/ticgt.py +Copyright: + Copyright JĂ©rĂ´me Carretero, 2011-2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/cppcheck.py +Copyright: + Copyright Michel Mooij, michel.mooij7@gmail.com +License: BSD-3 + +Files: + third_party/waf/waflib/extras/cpplint.py + third_party/waf/waflib/extras/freeimage.py + third_party/waf/waflib/extras/pep8.py +Copyright: + Copyright Sylvain Rouquette, 2011-2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/dpapi.py +Copyright: + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/eclipse.py +Copyright: + Copyright Richard Quirk 2009-1011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/erlang.py +Copyright: + Copyright Thomas Nagy, 2010 (ita) + Copyright Przemyslaw Rzepecki, 2016 +License: BSD-3 + +Files: third_party/waf/waflib/extras/fluid.py third_party/waf/waflib/extras/objcopy.py +Copyright: + Copyright Grygoriy Fuchedzhy 2009-2010 +License: BSD-3 + +Files: third_party/waf/waflib/extras/gdbus.py third_party/waf/waflib/extras/msvcdeps.py +Copyright: + Copyright Copyright Garmin International or its subsidiaries, 2012-2018 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/gob2.py + third_party/waf/waflib/Tools/dbus.py + third_party/waf/waflib/Tools/gnu_dirs.py +Copyright: + Copyright Ali Sabil, 2007 +License: BSD-3 + +Files: third_party/waf/waflib/extras/javatest.py third_party/waf/waflib/extras/pyqt5.py +Copyright: + Copyright Federico Pellegrin, 2016-2018 (fedepell) +License: BSD-3 + +Files: third_party/waf/waflib/extras/midl.py +Copyright: + Copyright ultrix gmail com +License: BSD-3 + +Files: third_party/waf/waflib/extras/msvs.py +Copyright: + Copyright Avalanche Studios 2009-2011 + Copyright Thomas Nagy 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pch.py +Copyright: + Copyright Alexander Afanasyev (UCLA), 2014 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pgicc.py third_party/waf/waflib/extras/pgicxx.py +Copyright: + Copyright Antoine Dechaume 2011 +License: BSD-3 + +Files: third_party/waf/waflib/extras/protoc.py +Copyright: + Copyright Philipp Bender, 2012 + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/pytest.py +Copyright: + Copyright Calle Rosenquist, 2016-2018 (xbreak) +License: BSD-3 + +Files: third_party/waf/waflib/extras/review.py +Copyright: + Copyright Laurent Birtz, 2011 +License: BSD-3 + +Files: + third_party/waf/waflib/extras/run_do_script.py + third_party/waf/waflib/extras/run_m_script.py + third_party/waf/waflib/extras/run_py_script.py + third_party/waf/waflib/extras/run_r_script.py +Copyright: + Copyright Hans-Martin von Gaudecker, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/extras/sas.py +Copyright: + Copyright Mark Coggeshall, 2010 +License: BSD-3 + +Files: third_party/waf/waflib/extras/swig.py +Copyright: + Copyright Petar Forai + Copyright Thomas Nagy 2008-2010 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/extras/use_config.py +Copyright: + Copyright Mathieu Courtois - EDF R&D, 2013 - http://www.code-aster.org +License: BSD-3 + +Files: third_party/waf/waflib/extras/valadoc.py +Copyright: + Copyright Nicolas Joseph 2009 +License: BSD-3 + +Files: third_party/waf/waflib/extras/xcode6.py +Copyright: + Copyright Nicolas Mercier 2011 + Copyright Simon Warg 2015, https://github.com/mimom +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ar.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/bison.py +Copyright: + Copyright John O'Meara, 2006 + Copyright Thomas Nagy 2009-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/clang.py +Copyright: + Copyright Krzysztof KosiĹ„ski 2014 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/compiler_c.py third_party/waf/waflib/Tools/compiler_cxx.py +Copyright: + Copyright Matthias Jahn jahn dĂ´t matthias ât freenet dĂ´t de, 2007 (pmarat) +License: BSD-3 + +Files: + third_party/waf/waflib/Tools/compiler_d.py + third_party/waf/waflib/Tools/dmd.py + third_party/waf/waflib/Tools/d.py + third_party/waf/waflib/Tools/gdc.py + third_party/waf/waflib/Tools/waf_unit_test.py +Copyright: + Copyright Carlos Rafael Giani, 2006-2007 (dv) + Copyright Thomas Nagy, 2008-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/flex.py +Copyright: + Copyright John O'Meara, 2006 + Thomas Nagy, 2006-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/g95.py +Copyright: + Copyright KWS 2010 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/gcc.py third_party/waf/waflib/Tools/gxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) + Copyright Yinon Ehrlich, 2009 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/icc.py +Copyright: + Copyright Stian Selnes 2008 + Copyright Thomas Nagy 2009-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ldc2.py +Copyright: + Copyright Alex Rønne Petersen, 2012 (alexrp/Zor) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/lua.py +Copyright: + Copyright Sebastian Schlingmann, 2008 + Copyright Thomas Nagy, 2008-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/msvc.py +Copyright: + Copyright Carlos Rafael Giani, 2006 (dv) + Copyright Tamas Pal, 2007 (folti) + Copyright Nicolas Mercier, 2009 + Copyright Matt Clarkson, 2012 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/perl.py +Copyright: + Copyright andersg at 0x63.nu 2007 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/python.py +Copyright: + Copyright Thomas Nagy, 2007-2015 (ita) + Copyright Gustavo Carneiro (gjc), 2007 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/ruby.py +Copyright: + Copyright daniel.svensson at purplescout.se 2008 + Copyright Thomas Nagy 2016-2018 (ita) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/suncc.py third_party/waf/waflib/Tools/suncxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) +License: BSD-3 + +Files: third_party/waf/waflib/Tools/vala.py +Copyright: + Copyright Ali Sabil, 2007 + Copyright RadosĹ‚aw SzkodziĹ„ski, 2010 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/winres.py +Copyright: + Copyright Brant Young, 2007 +License: BSD-3 + +Files: third_party/waf/waflib/Tools/xlc.py third_party/waf/waflib/Tools/xlcxx.py +Copyright: + Copyright Thomas Nagy, 2006-2018 (ita) + Copyright Ralf Habacker, 2006 (rh) + Copyright Yinon Ehrlich, 2009 + Copyright Michael Kuhn, 2009 +License: BSD-3 + +License: ISC + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + . + THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM + DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL + INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING + FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +License: BSD-3 + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + 3. Neither the name of the Institute nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +License: LGPL-3.0+ + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + . + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU Lesser General + Public License can be found in "/usr/share/common-licenses/LGPL-3". + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". diff --git a/tevent/PKGBUILD b/tevent/PKGBUILD new file mode 100644 index 0000000..7602d96 --- /dev/null +++ b/tevent/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=tevent +pkgver=0.10.2 +_debver=0.10.2 +_debrel=1 +pkgrel=1 +epoch=1 +pkgdesc='Event system based on the talloc memory management library' +url='https://tevent.samba.org/' +arch=('i686' 'x86_64') +source=(https://samba.org/ftp/tevent/${pkgname}-${pkgver}.tar{.gz,.asc} + https://deb.debian.org/debian/pool/main/t/tevent/tevent_${_debver}-${_debrel}.debian.tar.xz + LICENSE) +license=('GPL-3' 'LGPL-3' 'Modified-BSD') +depends=('talloc') +makedepends=('python' 'quilt') +optdepends=('python: for python bindings') +validpgpkeys=('9147A339719518EE9011BCB54793916113084025') # Samba Library Distribution Key +sha512sums=('1da8f28898f35daab515892b880d1de601062cc3e2b2570cd62e6913df17b0195a05acb7b484c628cddc0eb8b0cde893105ede3feb32bc5764e7d25684f332ba' + 'SKIP' + '18a0a9d8075e09f086675ab0225821c95acf743589dac5d607520169999382fadf7bbf03265001f4ba23d6b4047d63207bb4cf6b29f53a78e2d8f5a9dc12f955' + '4b7df5a04fe468ed547e934e67945bb3814a786f1c930ca82dd9c389b2614246d06856f2828816e1b9f14a83a988775c170e6adf3f1b3dd1a484575d84909147') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --bundled-libraries=NONE \ + --builtin-libraries=replace + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/texi2html/PKGBUILD b/texi2html/PKGBUILD new file mode 100644 index 0000000..e5aba53 --- /dev/null +++ b/texi2html/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=texi2html +pkgver=5.0 +pkgrel=1 +pkgdesc="Converts texinfo documents to HTML" +arch=('any') +url="https://www.nongnu.org/texi2html/" +license=('GPL-2') +depends=('perl') +source=(https://download.savannah.gnu.org/releases/texi2html/$pkgname-$pkgver.tar.bz2{,.sig}) +sha512sums=('50afc2f1f8875d3e62a51cc0339bd4c4f058041f42a9fda9cd5b02960f0d5c72838e4f010702ba716dbd256946f64520ce1e5b86539b6f7b8b7ce24a43c98e9d' + 'SKIP') +validpgpkeys=('9804BBF566E198FCA15D5C215EC2A77F36ECC523') # "Patrice Dumas (Pertusus) " + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/tftp-hpa/PKGBUILD b/tftp-hpa/PKGBUILD new file mode 100644 index 0000000..c9fea42 --- /dev/null +++ b/tftp-hpa/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=tftp-hpa +pkgver=5.2 +_debver=$pkgver +_debrel=1.4 +pkgrel=4 +pkgdesc="Official tftp server" +arch=(i686 x86_64) +url='https://www.kernel.org/pub/software/network/tftp/tftp-hpa/' +license=('Original-BSD') +backup=('etc/conf.d/tftpd') +depends=('readline') +source=(https://www.kernel.org/pub/software/network/tftp/tftp-hpa/$pkgname-$pkgver.tar.gz + LICENSE::https://metadata.ftp-master.debian.org/changelogs//main/t/tftp-hpa/tftp-hpa_${_debver}+20150808-${_debrel}_copyright + tftpd.confd + tftpd.initd + tftpd.run + fix-common.patch + tftp-hpa-0.49-fortify-strcpy-crash.patch) +sha512sums=('d79c9bd41ccf573d44ae5c4d72726c27ed2f84c8fc4f7bb12e26c3deb9bee0ececcef8b4a49cca9c59da1673f1181e5187fd4ac0cbdc5285ca18f02c4788b89e' + '3f26f4fa1067fd4f62c85256ff989cfb0c55af5373d7e9a4eed2d61e45f2467a67a2824701a210326c8906a558b7b01d67e59ef9c7abc53afac676f568254262' + 'd6a28715c97133794a2c4bd955a0dbe830767e0e3fa3ae0ad1f08bdebf348225633b6e49cd1785906e1ac0d2e016f34222c4724bae9933670a4bd16b128f9eee' + 'cf1fe93a7618968365e473f3286d5fffceaaa75a30ce68e9268163fb00d2aef21afd08b4b293b1bd95b07200016d8cdaf9511fad43cf9aba5cd1610cd45b44af' + '7161e39e269ebf250b162f768ef904b14abbb292cb61ed2fab7c080caa6d3642e3586d88d56f7ed20f64bb4395bc15df1cdc682cd86cc44135d362fe2e840770' + '40127e7ce276a2bc015255dbeef2665bfe8ff006b1e1d8fb79797e946d6030fd74606cffe0bea11eaad276a693f223faaaf1c1ccb5f276b40fdad40b366172b7' + 'ef2cecfb1509381b6c730fb4e2a1790d180f37a9f009ee89dbd04f4deabd92ca87158d3fa4eae11824a1235113f288627c4c00058c64cda7d83dd624c6b0469a') + +prepare() { + cd ${pkgname}-${pkgver} + patch -Np1 -i ${srcdir}/tftp-hpa-0.49-fortify-strcpy-crash.patch + patch -Np1 -i ${srcdir}/fix-common.patch +} + +build() { + cd ${pkgname}-${pkgver} + CFLAGS+=' -fcommon' # https://wiki.gentoo.org/wiki/Gcc_10_porting_notes/fno_common + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --without-tcpwrappers + make +} + +package() { + cd ${pkgname}-${pkgver} + make INSTALLROOT="${pkgdir}" install + install -d "$pkgdir"/var/tftpboot + + # openrc and runit + install -Dm0644 "$srcdir/tftpd.confd" "${pkgdir}/etc/conf.d/tftpd" + install -Dm0755 "$srcdir/tftpd.initd" "${pkgdir}/etc/init.d/tftpd" + install -Dm0755 "$srcdir/tftpd.run" "${pkgdir}/etc/sv/tftpd/run" + + # license + install -Dm0644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/tftp-hpa/fix-common.patch b/tftp-hpa/fix-common.patch new file mode 100644 index 0000000..1f082e8 --- /dev/null +++ b/tftp-hpa/fix-common.patch @@ -0,0 +1,24 @@ +diff -urN tftp-hpa-5.2.orig/tftp/main.c tftp-hpa-5.2/tftp/main.c +--- tftp-hpa-5.2.orig/tftp/main.c 2020-11-14 22:21:15.851650899 -0700 ++++ tftp-hpa-5.2/tftp/main.c 2020-11-14 22:21:41.878327755 -0700 +@@ -95,7 +95,7 @@ + int margc; + char *margv[20]; + const char *prompt = "tftp> "; +-sigjmp_buf toplevel; ++static sigjmp_buf toplevel; + void intr(int); + struct servent *sp; + int portrange = 0; +diff -urN tftp-hpa-5.2.orig/tftp/tftp.c tftp-hpa-5.2/tftp/tftp.c +--- tftp-hpa-5.2.orig/tftp/tftp.c 2020-11-14 22:21:15.851650899 -0700 ++++ tftp-hpa-5.2/tftp/tftp.c 2020-11-14 22:21:51.304998113 -0700 +@@ -48,7 +48,7 @@ + #define PKTSIZE SEGSIZE+4 + char ackbuf[PKTSIZE]; + int timeout; +-sigjmp_buf toplevel; ++static sigjmp_buf toplevel; + sigjmp_buf timeoutbuf; + + static void nak(int, const char *); diff --git a/tftp-hpa/tftp-hpa-0.49-fortify-strcpy-crash.patch b/tftp-hpa/tftp-hpa-0.49-fortify-strcpy-crash.patch new file mode 100644 index 0000000..e9b70d4 --- /dev/null +++ b/tftp-hpa/tftp-hpa-0.49-fortify-strcpy-crash.patch @@ -0,0 +1,26 @@ +diff -urN tftp-hpa-0.49.orig/tftp/tftp.c tftp-hpa-0.49/tftp/tftp.c +--- tftp-hpa-0.49.orig/tftp/tftp.c 2008-10-20 18:08:31.000000000 -0400 ++++ tftp-hpa-0.49/tftp/tftp.c 2009-08-05 09:47:18.072585848 -0400 +@@ -279,15 +279,16 @@ + struct tftphdr *tp, const char *mode) + { + char *cp; ++ size_t len; + + tp->th_opcode = htons((u_short) request); + cp = (char *)&(tp->th_stuff); +- strcpy(cp, name); +- cp += strlen(name); +- *cp++ = '\0'; +- strcpy(cp, mode); +- cp += strlen(mode); +- *cp++ = '\0'; ++ len = strlen(name) + 1; ++ memcpy(cp, name, len); ++ cp += len; ++ len = strlen(mode) + 1; ++ memcpy(cp, mode, len); ++ cp += len; + return (cp - (char *)tp); + } + diff --git a/tftp-hpa/tftpd.confd b/tftp-hpa/tftpd.confd new file mode 100644 index 0000000..9d4d005 --- /dev/null +++ b/tftp-hpa/tftpd.confd @@ -0,0 +1,15 @@ +# /etc/init.d/tftpd + +# Path to server files from +# Depending on your application you may have to change this. +TFTPD_PATH="/var/tftpboot/" +#TFTPD_PATH="/var/tftp/" +#TFTPD_PATH="/tftpboot/" +#TFTPD_PATH="/tftproot/" + +# For more options, see tftpd(8) +# -R 4096:32767 solves problems with ARC firmware, and obsoletes +# the /proc/sys/net/ipv4/ip_local_port_range hack. +# -s causes $TFTPD_PATH to be the root of the TFTP tree. +# -l is passed by the init script in addition to these options. +TFTPD_OPTS="-R 4096:32767 -s ${TFTPD_PATH}" diff --git a/tftp-hpa/tftpd.initd b/tftp-hpa/tftpd.initd new file mode 100644 index 0000000..fbcef87 --- /dev/null +++ b/tftp-hpa/tftpd.initd @@ -0,0 +1,21 @@ +#!/sbin/openrc-run +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-ftp/tftp-hpa/files/in.tftpd.rc6,v 1.2 2005/07/30 06:29:14 vapier Exp $ + +depend() { + need net + after firewall +} + +start() { + ebegin "Starting tftpd" + /usr/sbin/tftpd -l ${INTFTPD_OPTS} + eend $? +} + +stop() { + ebegin "Stopping tftpd" + start-stop-daemon --stop --exec /usr/sbin/tftpd + eend $? +} diff --git a/tftp-hpa/tftpd.run b/tftp-hpa/tftpd.run new file mode 100644 index 0000000..07f0cbc --- /dev/null +++ b/tftp-hpa/tftpd.run @@ -0,0 +1,3 @@ +#!/bin/sh +: "${OPTS:= -s -v}" +exec /usr/sbin/in.tftpd -L $OPTS /var/lib/tftp diff --git a/the_silver_searcher/PKGBUILD b/the_silver_searcher/PKGBUILD new file mode 100644 index 0000000..622a918 --- /dev/null +++ b/the_silver_searcher/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=the_silver_searcher +pkgver=2.2.0+git20200805 +pkgrel=1 +pkgdesc="Code searching tool similar to Ack, but faster" +arch=('i686' 'x86_64') +url='https://github.com/ggreer/the_silver_searcher' +license=('Apache-2.0') +depends=('pcre' 'xz') +source=("http://deb.debian.org/debian/pool/main/s/silversearcher-ag/silversearcher-ag_${pkgver}.orig.tar.gz") +sha512sums=('fc1c681dcc7d6072eb08305c757ace84bbfa13f512b819aa22301d678651705a09abd08d3ad23f9ada33db28af1fcb96c642652aa71988f2b0432d60619124be') + +prepare() { + mv ${pkgname}-master ${pkgname} + sed -i 's,configure,configure --prefix=/usr,' $pkgname/build.sh +} + +build() { + CFLAGS+=' -fcommon' # https://wiki.gentoo.org/wiki/Gcc_10_porting_notes/fno_common + ./$pkgname/build.sh +} + +package() { + make -C $pkgname DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/$pkgname/LICENSE" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tidy/PKGBUILD b/tidy/PKGBUILD new file mode 100644 index 0000000..aa8e59e --- /dev/null +++ b/tidy/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=tidy +pkgver=5.6.0 +_debver=5.6.0 +_debrel=11 +pkgrel=1 +pkgdesc='A tool to tidy down your HTML code to a clean style' +arch=('i686' 'x86_64') +url='http://www.html-tidy.org/' +license=('Modified-BSD') +depends=('glibc') +makedepends=('cmake' 'libxslt' 'quilt') +conflicts=('tidyhtml') +provides=('tidyhtml') +replaces=('tidyhtml') +source=("https://github.com/htacg/tidy-html5/archive/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/t/tidy-html5/tidy-html5_$_debver-$_debrel.debian.tar.xz") +sha512sums=('179088a6dbd29bb0e4f0219222f755b186145495f7414f6d0e178803ab67140391283d35352d946f9790c6b1b5b462ee6e24f1cc84f19391cb9b65e73979ffd1' + '109347ae71990eb3114373e4b823b54fa6948a7331b7338d143c98e1ab883a646343afa050e10bdec707c7f4134ba7f0bc9494f3d08e784e0dc211b7cc60ef20') + +prepare() { + cd tidy-html5-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake \ + -S tidy-html5-$pkgver \ + -Bbuild \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release + make -C build +} + +package() { + make -C build DESTDIR="$pkgdir" install + + # Compatibility symlinks until everything is ported + ln -s tidybuffio.h "$pkgdir"/usr/include/buffio.h + ln -s tidyplatform.h "$pkgdir"/usr/include/platform.h + + install -Dm644 "$srcdir"/$pkgname-html5-$pkgver/README/LICENSE.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/tig/PKGBUILD b/tig/PKGBUILD new file mode 100644 index 0000000..ae9b899 --- /dev/null +++ b/tig/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=tig +pkgver=2.5.12 +pkgrel=1 +pkgdesc="Text-mode interface for Git" +url='https://jonas.github.io/tig/' +license=('GPL-2') +arch=('i686' 'x86_64') +backup=('etc/tigrc') +depends=('git-legacy' 'ncurses') +makedepends=('asciidoc' 'xmlto') +source=("https://github.com/jonas/$pkgname/releases/download/$pkgname-$pkgver/$pkgname-$pkgver.tar.gz") +sha512sums=('b4960f7fcc77469e3941913f2b7cc2b8f13d96db931d73b62d7542f4eaabe792d2b43604f0b5043f910ef50063140982cc6be22b156ced184fc0f20704efd6cd') + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install install-doc-man + + install -Dm0644 contrib/tig-completion.bash "$pkgdir/usr/share/bash-completion/completions/tig" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tilda/PKGBUILD b/tilda/PKGBUILD new file mode 100644 index 0000000..363eba6 --- /dev/null +++ b/tilda/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=tilda +pkgver=1.5.4 +pkgrel=1 +pkgdesc='A Gtk based drop down terminal for GNU/Linux and Unix' +arch=('i686' 'x86_64') +url='https://github.com/lanoxx/tilda' +license=('GPL-2') +depends=('vte3' 'confuse' 'gettext-tiny') +makedepends=('python') +changelog=$pkgname.changelog +source=(https://github.com/lanoxx/$pkgname/archive/$pkgname-$pkgver.tar.gz) +sha512sums=('6982a14a89d148c04e08df0c7566ea7b3e340252fa1a3e434450443f7464e6805caee46afda9b385633a4b9c22d2f2d283641082a1e009f301c3a1bf508c3b29') + +build() { + mv "${srcdir}/${pkgname}-${pkgname}-${pkgver}" "${srcdir}/${pkgname}-${pkgver}" + cd $pkgname-$pkgver + + ./autogen.sh + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tilda/tilda.changelog b/tilda/tilda.changelog new file mode 100644 index 0000000..5b73685 --- /dev/null +++ b/tilda/tilda.changelog @@ -0,0 +1,82 @@ +2021-05-20 Tobias Dausend + * tilda 1.5.4-1 adapted for Hyperbola + +2020-12-25 Jaroslav Lichtblau + * tilda 1.5.4-1 + +2020-05-09 Jaroslav Lichtblau + * tilda 1.5.2-1 + +2020-05-08 Jaroslav Lichtblau + * tilda 1.5.1-1 + +2020-02-09 Jaroslav Lichtblau + * tilda 1.5.0-1 + +2018-02-15 Jaroslav Lichtblau + * tilda 1.4.1-1 + +2017-05-25 Baptiste Jonglez + * tilda 1.3.3-3 confuse 3.1 rebuild + +2016-10-25 Jaroslav Lichtblau + * tilda 1.3.3-2 confuse 3.0 rebuild + +2016-04-28 Jaroslav Lichtblau + * tilda 1.3.3-1 + +2016-02-21 Jaroslav Lichtblau + * tilda 1.3.2-1 + +2016-01-02 Jaroslav Lichtblau + * tilda 1.3.1-1 + +2015-11-18 Jaroslav Lichtblau + * tilda 1.3.0-1 + +2015-06-28 Jaroslav Lichtblau + * tilda 1.2.4-1 + +2014-10-31 Jaroslav Lichtblau + * tilda 1.2.2-1 + +2014-10-17 Jaroslav Lichtblau + * tilda 1.2.1-1 + +2014-10-16 Jaroslav Lichtblau + * tilda 1.2-1 + +2014-09-26 Jaroslav Lichtblau + * tilda 1.1.13-1 + +2014-06-05 Jaroslav Lichtblau + * tilda 1.1.12-1 + +2013-12-14 Jaroslav Lichtblau + * tilda 1.1.10-1 + +2013-11-17 Jaroslav Lichtblau + * tilda 1.1.8-1 + +2013-08-22 Maxime Gauduin + * tilda 1.1.7-3 + * Fixes FS#36542, FS#36516 and FS#36543 + +2013-08-08 Jaroslav Lichtblau + * tilda 1.1.7-1 + +2012-06-02 Jaroslav Lichtblau + * FS#29754 fixed + +2011-08-28 Jaroslav Lichtblau + * FS#25762 fixed + +2008-04-29 Mateusz Herych + * Updated for x86_64 - 0.9.6 + +2008-04-28 Douglas Soares de Andrade + * Updated for i686 - 0.9.6 + +2007-12-30 Douglas Soares de Andrade + * Updated to newer version - 0.9.5 + diff --git a/timew/PKGBUILD b/timew/PKGBUILD new file mode 100644 index 0000000..28d085c --- /dev/null +++ b/timew/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=timew +pkgver=1.4.2 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="Free and libre command line time tracking application" +arch=('i686' 'x86_64') +url='https://timewarrior.net/' +license=('Expat') +makedepends=('cmake' 'gcc-libs' 'quilt') +optdepends=('task: Taskwarrior integration' + 'python: Holiday refresh script') +install=$pkgname.install +source=("https://deb.debian.org/debian/pool/main/t/timew/timew_${pkgver}+ds.1.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/t/timew/timew_${_debver}+ds.1-${_debrel}.debian.tar.xz") +sha512sums=('7ab4f4cbffadd6b92eb5b5db5ccd5c96c587c57cf6e9cc8641f7943526ab0d6157bf9224df1e26b7336b8fda510435b89435c8db8b429e33a943bd21e1348a0f' + '9087f84a017f112ac074bf5eed4c26b0083e4897986c5daf0ffd66c87579b11d01dcc4d2aa230dad4d3b77cab227e45ee3fe76b6c52e74df440f4fab94ab53e0') + +prepare() { + mv "timewarrior" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + cmake -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=/usr . + make +} + + +package() { + cd "${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + # link the refresh holiday scripts in /usr/bin/ for user convenience. + chmod 755 "${pkgdir}"/usr/share/doc/timewarrior/doc/holidays/refresh + ln -s /usr/share/doc/timewarrior/doc/holidays/refresh "${pkgdir}"/usr/bin/timew-refresh-holidays + + # license + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/timew/timew.install b/timew/timew.install new file mode 100644 index 0000000..96adda9 --- /dev/null +++ b/timew/timew.install @@ -0,0 +1,7 @@ +post_install() { + echo "You can find the taskwarrior on-modify-hook at: + /usr/share/doc/timewarrior/ext/on-modify.timewarrior" + echo + echo "You can use /usr/bin/timew-refresh-holidays to download holiday schedules" + echo "Please see: http://taskwarrior.org/docs/timewarrior/holidays.html for more info" +} diff --git a/timidity++/PKGBUILD b/timidity++/PKGBUILD new file mode 100644 index 0000000..c684c9d --- /dev/null +++ b/timidity++/PKGBUILD @@ -0,0 +1,94 @@ +# Maintainer: Jesus E. + +pkgname=timidity++ +pkgver=2.14.0 +_debver=$pkgver +_debrel=8 +pkgrel=2 +pkgdesc="A MIDI to WAVE converter and player" +arch=('i686' 'x86_64') +url='http://timidity.sourceforge.net' +license=('GPL-2') +depends=('flac' 'libao' 'libvorbis' 'portaudio' 'speex' 'jack') +makedepends=('libxaw3d' 'gtk2' 'tk' 'libxaw' 'libjack' 'quilt') +optdepends=('gtk2: for using the GTK+ interface' + 'tk: for using the Tk interface' + 'libxaw3d: for using the Xaw interface' + 'sndio: for using the sndio audio output' + 'freepats: additional files for MIDI audio synthesis') +backup=('etc/timidity++/timidity.cfg' + 'etc/conf.d/timidity') +install=timidity.install +source=(https://downloads.sourceforge.net/timidity/TiMidity++-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/t/timidity/timidity_${_debver}-${_debrel}.debian.tar.xz + timidity.cfg + timidity-jack.patch + timidity-tk86.patch + timidity-sndio.patch + timidity.confd + timidity.initd) +sha512sums=('d8fc06fa36e4dd42de80c61943da4cd9aec5f8aaf31057a9ededa633d2d48e64c4e53391378d82a7a46ffe4f96c756b010ea9727270f80b134ae1f8bad535bd3' + '3219c3f17b2b558643eb0c886984fba13d3e5954a7a0b9443910f601da7aea9205e4964545c589de70e937987e2fdbe0bd8b1b12f1fa0b76c9dc7cafdb17cd57' + '054cd39bef913314e9901171566398af6280236531ac13ece683eaeb642c52b3280116adaa6328054c94bd79b0ab88c253281e386012a2c6d67f4b85c38e4859' + '51c075da04aeedca4edecb5a7f1926ccb80637b550f8fafca6d68be466cd4353a77bbb832878941919ec354c279a6014403e995b9152a47a3817c99890a4afeb' + 'f7c711fd7aaf924b4469f61780f8b6a282c11246e093b121597a098190ee3ab96964dcc0eb772dfe8232eb95bcfa8819e105eb0f7956b723f84a4df13e72ca98' + '641900474a89d844aa6857d1f2cd42f2e732fda2a0d7032901e4c73f3345e8e8806b84a379a8bf190c4cc80a2245d7b11640d5163cc9aebfeaa413feff40d155' + '63f11625298f214955d8d36690f18288c246c7701324be1e03d056dda145f2bd92f9fdd484061263cdd702260f8c808d9bbdb8c5a27a7a23ee7d1c08cb4dbfed' + '5ce0f8fcd9da26383455ba3fb931f01a0c07d54b4c5b05d0a3bc338bea509078dd9c6b01a5cc8d4a320ebae9e620040aea9ee9ceed71ed393210b753a181ae88') + +prepare() { + cd TiMidity++-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + patch -p1 -i "${srcdir}/timidity-tk86.patch" + fi + patch -p1 -i "${srcdir}/timidity-jack.patch" + patch -p1 -i "${srcdir}/timidity-sndio.patch" + autoreconf -vfi +} + +build() { + + if [ $(uname -s) = HyperbolaBSD ]; then + _enable_ksnd=sun + elif [ $(uname -o) = GNU/Linux ]; then + _enable_ksnd=alsa + fi + + cd TiMidity++-${pkgver} + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --with-default-path=/etc/timidity++/ \ + --enable-server \ + --enable-alsaseq \ + --enable-spectrogram \ + --enable-network \ + --enable-xft \ + --enable-audio=${_enable_ksnd},jack,sndio,ao,portaudio,flac,vorbis,speex \ + --enable-dynamic=ncurses,tcltk,vt100,xaw,gtk + make +} + +package() { + cd TiMidity++-${pkgver} + make DESTDIR="${pkgdir}" install + + # configuration + install -Dm644 "${srcdir}/timidity.cfg" "${pkgdir}/etc/timidity++/timidity.cfg" + + # services, only openrc for the moment + install -Dm644 "${srcdir}/timidity.confd" "${pkgdir}/etc/conf.d/timidity" + install -Dm755 "${srcdir}/timidity.initd" "${pkgdir}/etc/init.d/timidity" + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/timidity++/timidity-jack.patch b/timidity++/timidity-jack.patch new file mode 100644 index 0000000..e125847 --- /dev/null +++ b/timidity++/timidity-jack.patch @@ -0,0 +1,11 @@ +diff -Naur TiMidity++-2.14.0-orig/timidity/jack_a.c TiMidity++-2.14.0/timidity/jack_a.c +--- TiMidity++-2.14.0-orig/timidity/jack_a.c 2014-09-26 22:08:51.531559553 -0400 ++++ TiMidity++-2.14.0/timidity/jack_a.c 2014-09-26 22:11:12.864659285 -0400 +@@ -508,6 +508,7 @@ + pthread_cond_wait(&ctx->cond, &ctx->lock); + } + /* fallthrough */ ++ case PM_REQ_PLAY_START: + case PM_REQ_DISCARD: + ctx->running = 0; + ringbuf_clear(&ctx->rbuf); diff --git a/timidity++/timidity-sndio.patch b/timidity++/timidity-sndio.patch new file mode 100644 index 0000000..ae1034e --- /dev/null +++ b/timidity++/timidity-sndio.patch @@ -0,0 +1,255 @@ +diff --git a/configure.in b/configure.in +index 4f10340..c532167 100644 +--- a/configure.in ++++ b/configure.in +@@ -859,8 +859,9 @@ dnl speex(S): Ogg Speex + dnl gogo(g): MP3 GOGO + dnl jack(j): JACK + dnl ao(O): Libao ++dnl sndio(o): sndio + +-audio_targets='default oss alsa sun hpux irix mme sb_dsp w32 alib nas arts esd vorbis flac gogo portaudio npipe jack ao' ++audio_targets='default oss alsa sun hpux irix mme sb_dsp w32 alib nas arts esd vorbis flac gogo portaudio npipe jack ao sndio' + + AC_ARG_WITH(nas-library, + AS_HELP_STRING([--with-nas-library=library], [NAS absolute library path(Don't use -laudio)])) +@@ -888,6 +889,7 @@ AC_ARG_ENABLE(audio, + npipe: Named Pipe(windows) + jack: JACK + ao: Libao ++ sndio: sndio + vorbis: Ogg Vorbis + flac: FLAC / OggFLAC + speex: Ogg Speex +@@ -914,7 +916,7 @@ AC_ARG_WITH(default-output, + [Specify default output mode (optional): + (default|alsa|alib|arts|nas| + esd|wav|au|aiff|list|vorbis|flac|speex| +- gogo|portaudio|npipe|jack|ao)]), ++ gogo|portaudio|npipe|jack|ao|sndio)]), + [ if test "$enable_audio" != no; then + DEFAULT_PLAYMODE=$withval + eval "au_enable_$DEFAULT_PLAYMODE=yes" +@@ -1356,6 +1358,22 @@ else + AC_MSG_RESULT(no) + fi + ++dnl sndio ++AC_MSG_CHECKING(enable_audio=sndio) ++if test "x$au_enable_sndio" = xyes; then ++ AC_MSG_RESULT([yes, configuring sndio]) ++ AC_CHECK_HEADERS(sndio.h) ++ if test "x${ac_cv_header_sndio_h}" = xyes ; then ++ EXTRADEFS="$EXTRADEFS -DAU_SNDIO" ++ SYSEXTRAS="$SYSEXTRAS sndio_a.c" ++ EXTRALIBS="$EXTRALIBS -lsndio" ++ else ++ AC_MSG_WARN(Couldn't configure sndio.) ++ fi ++else ++ AC_MSG_RESULT(no) ++fi ++ + dnl ogg's vorbis + AC_MSG_CHECKING(enable_audio=vorbis) + if test "x$au_enable_vorbis" = xyes; then +@@ -1511,6 +1529,7 @@ case ".$DEFAULT_PLAYMODE" in + .gogo) TIMIDITY_OUTPUT_ID=g ;; + .jack) TIMIDITY_OUTPUT_ID=j ;; + .ao) TIMIDITY_OUTPUT_ID=O ;; ++ .sndio) TIMIDITY_OUTPUT_ID=o ;; + *) TIMIDITY_OUTPUT_ID= ;; + esac + AC_MSG_RESULT($DEFAULT_PLAYMODE/$TIMIDITY_OUTPUT_ID) +diff --git a/timidity/Makefile.am b/timidity/Makefile.am +index 4802b5f..d8e52b8 100644 +--- a/timidity/Makefile.am ++++ b/timidity/Makefile.am +@@ -139,6 +139,7 @@ EXTRA_timidity_SOURCES = \ + mfnode.h \ + nas_a.c \ + portaudio_a.c \ ++ sndio_a.c \ + npipe_a.c \ + sun_a.c \ + vorbis_a.c \ +diff --git a/timidity/output.c b/timidity/output.c +index 2fec198..84dac8e 100644 +--- a/timidity/output.c ++++ b/timidity/output.c +@@ -116,6 +116,10 @@ extern PlayMode nas_play_mode; + extern PlayMode ao_play_mode; + #endif /* AU_AO */ + ++#ifdef AU_SNDIO ++extern PlayMode sndio_play_mode; ++#endif /* AU_SNDIO */ ++ + #ifndef __MACOS__ + /* These are always compiled in. */ + extern PlayMode raw_play_mode, wave_play_mode, au_play_mode, aiff_play_mode; +@@ -142,6 +146,10 @@ PlayMode *play_mode_list[] = { + &ao_play_mode, + #endif /* AU_AO */ + ++#if defined(AU_SNDIO) ++ &sndio_play_mode, ++#endif /* AU_SNDIO */ ++ + #if defined(AU_ARTS) + &arts_play_mode, + #endif /* AU_ARTS */ +diff --git b/timidity/sndio_a.c b/timidity/sndio_a.c +new file mode 100644 +index 0000000..22ad939 +--- /dev/null ++++ b/timidity/sndio_a.c +@@ -0,0 +1,134 @@ ++/* ++ * Copyright (c) 2008 IWATA Ray ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif /* HAVE_CONFIG_H */ ++#include ++ ++#include "timidity.h" ++#include "output.h" ++#include "controls.h" ++#include "timer.h" ++#include "instrum.h" ++#include "playmidi.h" ++#include "miditrace.h" ++ ++static int open_output(void); /* 0=success, 1=warning, -1=fatal error */ ++static void close_output(void); ++static int output_data(char *buf, int32 nbytes); ++static int acntl(int request, void *arg); ++ ++/* export the playback mode */ ++ ++#define dpm sndio_play_mode ++ ++PlayMode dpm = { ++ DEFAULT_RATE, PE_SIGNED|PE_16BIT, PF_PCM_STREAM, ++ -1, ++ {0}, /* default: get all the buffer fragments you can */ ++ "sndio mode", 'o', ++ NULL, ++ open_output, ++ close_output, ++ output_data, ++ acntl ++}; ++ ++static struct sio_hdl *sndio_ctx; ++ ++static int open_output(void) ++{ ++ static struct sio_par par, newpar; ++ ++ sndio_ctx = sio_open(NULL, SIO_PLAY, 0); ++ if (sndio_ctx == NULL) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "sio_open() failed"); ++ return -1; ++ } ++ ++ sio_initpar(&par); ++ ++ par.sig = 1; ++ par.pchan = (dpm.encoding & PE_MONO) ? 1 : 2; ++ par.le = SIO_LE_NATIVE; ++ par.rate = dpm.rate; ++ if (dpm.encoding & PE_24BIT) { ++ par.bits = 24; ++ par.bps = 3; ++ } else if (dpm.encoding & PE_16BIT) { ++ par.bits = 16; ++ par.bps = 2; ++ } else { ++ par.bits = 8; ++ par.bps = 1; ++ } ++ ++ if (!sio_setpar(sndio_ctx, &par)) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "sio_setpar() failed"); ++ return -1; ++ } ++ ++ if (sio_getpar(sndio_ctx, &newpar) == 0) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "sio_getpar() failed"); ++ return -1; ++ } ++ if (newpar.sig != par.sig || ++ newpar.le != par.le || ++ newpar.pchan != par.pchan || ++ newpar.bits != par.bits || ++ newpar.bps != par.bps || ++ newpar.rate * 1000 > par.rate * 1005 || ++ newpar.rate * 1000 < par.rate * 995) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "couldn't set output play parameters"); ++ return -1; ++ } ++ ++ if (!sio_start(sndio_ctx)) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "sio_start() failed"); ++ return -1; ++ } ++ return 0; ++} ++ ++static int output_data(char *buf, int32 nbytes) ++{ ++ if (!sio_write(sndio_ctx, buf, nbytes)) { ++ ctl->cmsg(CMSG_WARNING, VERB_VERBOSE, "sio_write() failed"); ++ return -1; ++ } ++ return 0; ++} ++ ++static void close_output(void) ++{ ++ if (sndio_ctx != NULL) { ++ sio_close(sndio_ctx); ++ sndio_ctx = NULL; ++ } ++} ++ ++static int acntl(int request, void *arg) ++{ ++ switch(request) { ++ case PM_REQ_DISCARD: ++ case PM_REQ_PLAY_START: /* Called just before playing */ ++ case PM_REQ_PLAY_END: /* Called just after playing */ ++ return 0; ++ } ++ return -1; ++} ++ +diff --git a/timidity/timidity.c b/timidity/timidity.c +index 4a4d601..894f55a 100644 +--- a/timidity/timidity.c ++++ b/timidity/timidity.c +@@ -4049,7 +4049,8 @@ static int parse_opt_h(const char *arg) + " `l' linear encoding" NLS + " `U' U-Law encoding" NLS + " `A' A-Law encoding" NLS +-" `x' byte-swapped output" NLS, fp); ++" `x' byte-swapped output" NLS ++" `o' signed output" NLS, fp); + fputs(NLS, fp); + fputs("Alternative output format long options:" NLS + " --output-stereo" NLS diff --git a/timidity++/timidity-tk86.patch b/timidity++/timidity-tk86.patch new file mode 100644 index 0000000..594e95a --- /dev/null +++ b/timidity++/timidity-tk86.patch @@ -0,0 +1,39 @@ +--- a/interface/tk_c.c ++++ b/interface/tk_c.c +@@ -65,6 +65,9 @@ + #define TKPROGPATH PKGLIBDIR "/tkmidity.tcl" + #endif /* TKPROGPATH */ + ++#if (TCL_MAJOR_VERSION < 8) ++#define Tcl_GetStringResult(interp) (interp->result) ++#endif + + static void ctl_refresh(void); + static void ctl_total_time(int tt); +@@ -117,7 +120,7 @@ + + static void start_panel(void); + +-#define MAX_TK_MIDI_CHANNELS 16 ++#define MAX_TK_MIDI_CHANNELS 32 + + typedef struct { + int reset_panel; +@@ -933,7 +936,7 @@ + } + + /* evaluate Tcl script */ +-static char *v_eval(char *fmt, ...) ++static const char *v_eval(char *fmt, ...) + { + char buf[256]; + va_list ap; +@@ -941,7 +944,7 @@ + vsnprintf(buf, sizeof(buf), fmt, ap); + Tcl_Eval(my_interp, buf); + va_end(ap); +- return my_interp->result; ++ return Tcl_GetStringResult(my_interp); + } + + static const char *v_get2(const char *v1, const char *v2) diff --git a/timidity++/timidity.cfg b/timidity++/timidity.cfg new file mode 100644 index 0000000..59bbfa9 --- /dev/null +++ b/timidity++/timidity.cfg @@ -0,0 +1,29 @@ +# details on this file and other examples see here: +# http://www.onicos.com/staff/iz/timidity/dist/cfg/sndfont.cfg +# http://www.onicos.com/staff/iz/timidity/dist/cfg/ +#---------------------------------------------------------------- +# SoundFont extension configuration +# +# soundfont [order={0|1}] [remove] +# is the path of SoundFont file. +# order: 0(preload) or 1(load after GUS). +# remove: disable specified soundfont. +# +# font exclude [ []] +# font order {0|1} [ []] +# : 0-127 +# +# font exclude 128 [ []] +# font order {0|1} 128 [ []] +#---------------------------------------------------------------- + +# change the next line to point to a soundfont you have +# soundfonts can be found e.g. here: http://www.hammersound.net/ +# soundfont /usr/share/soundfonts/DX7Piano.SF2 + +# you can do manipulations of the soundfont you load like this: +# e.g. removing drumset 99 +# font exclude 128 99 + +# load drum samples after GUS patches +# font order 1 128 diff --git a/timidity++/timidity.confd b/timidity++/timidity.confd new file mode 100644 index 0000000..8772976 --- /dev/null +++ b/timidity++/timidity.confd @@ -0,0 +1,31 @@ +# TIMIDITY_OPTS +# Command line arguments to be passed to timidity. -iA is always used +# Common options: +# -Os : Output to ALSA pcm device +# -Oo : Output to sndio device +# -Oe : Output to esd +# -On : Output to NAS +# +# -B, : Set number of buffer fragments(n), and buffer size(2^m) +# +# -EFreverb=0 : Disable MIDI reverb effect control +# -EFreverb=1[,level] : Enable MIDI reverb effect control +# `level' is optional to specify reverb level [0..127] +# This effect is only available in stereo +# (default) +# -EFreverb=2 : Global reverb effect +# +# See the timidity(1) man page for more info. + +TIMIDITY_OPTS="-B2,8 -Os -EFreverb=0" +#TIMIDITY_OPTS="-Oo -EFreverb=0" + +# TIMIDITY_PCM_NAME +# This option can be used to choose an alternate ALSA pcm device. This will +# be most useful for users of the dmix alsa plugin or those with multiple +# cards. If you don't know what this is, chances are you want the default. + +#TIMIDITY_PCM_NAME="hw:0" + +#LADSPA plugins library path +LADSPA_PATH="/usr/lib/ladspa" diff --git a/timidity++/timidity.initd b/timidity++/timidity.initd new file mode 100644 index 0000000..2743eb7 --- /dev/null +++ b/timidity++/timidity.initd @@ -0,0 +1,22 @@ +#!/sbin/openrc-run +# Copyright 2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +depend() { + after alsasound esound sndiod +} + +start() { + ebegin "Starting TiMidity++ Virtual Midi Sequencer" + test -n "$TIMIDITY_PCM_NAME" && export TIMIDITY_PCM_NAME + start-stop-daemon --start --background --chdir /var/lib/timidity \ + --user timidity --group audio --make-pidfile --pidfile /run/timidity.pid \ + --exec /usr/bin/timidity -- -iA ${TIMIDITY_OPTS} + eend $? +} + +stop() { + ebegin "Stopping TiMidity++" + start-stop-daemon --stop --quiet --pidfile /run/timidity.pid + eend $? +} diff --git a/timidity++/timidity.install b/timidity++/timidity.install new file mode 100644 index 0000000..619091a --- /dev/null +++ b/timidity++/timidity.install @@ -0,0 +1,27 @@ +post_install() { + if ! getent passwd timidity &>/dev/null; then + useradd -r -g audio -d /var/lib/timidity -s /bin/nologin timidity >/dev/null + fi + if ! groups timidity | grep audio &>/dev/null; then + gpasswd -a timidity audio >/dev/null + fi + timidity_shell=$(getent passwd timidity | cut -d: -f7) + if [ "$timidity_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin timidity &>/dev/null + fi + if [[ ! -d /var/lib/timidity ]]; then + mkdir -p /var/lib/timidity + fi + chown -R timidity:audio /var/lib/timidity +} + +post_upgrade() { + post_install +} + +post_remove() { + echo "-- You may want to remove /var/lib/timidity" + if getent passwd timidity &>/dev/null; then + userdel timidity >/dev/null + fi +} diff --git a/tinc/PKGBUILD b/tinc/PKGBUILD new file mode 100644 index 0000000..07fabcf --- /dev/null +++ b/tinc/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +pkgname=tinc +pkgver=1.0.36 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="VPN (Virtual Private Network) daemon" +url="https://www.tinc-vpn.org/" +arch=('i686' 'x86_64') +license=('custom:GPL-2+OpenSSL-Linking-Exception+LZO-Linking-Exception') +depends=('lzo' 'libressl' 'zlib') +makedepends=('quilt') +source=(https://www.tinc-vpn.org/packages/tinc-$pkgver.tar.gz{,.sig} + https://deb.debian.org/debian/pool/main/t/tinc/tinc_$_debver-$_debrel.debian.tar.xz + tincd.confd + tincd.initd + tincd.run) +sha512sums=('23af9162f7ae700bad01e1f59f23f32d1b183b185ec35f4a69a987c52c53cfebfa9e852203b399f035988078e9131e5d59b018554a52a30044f34df6e64b5289' + 'SKIP' + 'c58b0b4c3983ced1d03ae0490a56b45c7ba1929a1185ced955a294e69d806d961b3d076b8b0b508c0046d73834d4e9967a88e6c76daa0c8bb71bbda122509523' + 'f8d9354af5ebc07420ced98059262751bffef434b61c6333964338f327e2ac01ae676e375954efa794a1bccf8b939c78387b9fb7261f675f1237b0d946b529c9' + 'cd4e56cd49cc48409b753e4366c8a2f57babe9da80bdf048f3bd562debd82405c641af7f3c4c73460a720c3e458194cb5af6bf4ed84f04758b47b991fb01c385' + '51f259d4584945c9eb99d3a0bb837e90126a331fc63c4477ce751b902a3fffdeb5247d1465d19de00004b0e5f46f87d3c568d9847c732bf7a5dd86375f6aa883') +validpgpkeys=('D62BDD168EFBE48BC60E8E234A6084B9C0D71F4A') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir/" install + install -dm755 "$pkgdir"/usr/share/tinc/examples + cp -a doc/sample-config/. "$pkgdir"/usr/share/tinc/examples/ + find "$pkgdir"/usr/share/tinc/examples -type f -exec chmod 644 {} + + find "$pkgdir"/usr/share/tinc/examples -type d -exec chmod 755 {} + + + # services + install -Dm644 $srcdir/tincd.confd "$pkgdir"/etc/conf.d/tincd + install -Dm755 $srcdir/tincd.initd "$pkgdir"/etc/init.d/tincd + install -Dm755 $srcdir/tincd.run "$pkgdir"/etc/sv/tincd/run + + # licenses + for i in COPYING{,.README}; do + install -Dm644 $i "$pkgdir"/usr/share/licenses/$pkgname/$i + done +} diff --git a/tinc/tincd.confd b/tinc/tincd.confd new file mode 100644 index 0000000..cedca60 --- /dev/null +++ b/tinc/tincd.confd @@ -0,0 +1,20 @@ +#rc_need="net.net" + +#If you want tincd to log to syslog, then set this to "yes" +#Anything else and tincd will log to /var/log/tinc.NETNAME.log. +SYSLOG="yes" + +#Set debug level, useful for error probe +# 0 Quiet mode, only show starting/stopping of the daemon +# 1 Show (dis)connects of other tinc daemons via TCP +# 2 Show error messages received from other hosts +# 2 Show status messages received from other hosts +# 3 Show the requests that are sent/received +# 4 Show contents of every request that is sent/received +# 5 Show network traffic information +# 6 Show contents of each packet that is being sent/received +# 10 You have been warned +DEBUG_LEVEL="0" + +#Extra Options, if you want addtional customization +EXTRA_OPTS="" diff --git a/tinc/tincd.initd b/tinc/tincd.initd new file mode 100644 index 0000000..31dac4a --- /dev/null +++ b/tinc/tincd.initd @@ -0,0 +1,78 @@ +#!/sbin/openrc-run +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload" + +NETS="/etc/tinc.networks" +DAEMON="/usr/sbin/tincd" + +depend() { + use logger dns + need net +} + +checkconfig() { + if [ "${RC_SVCNAME}" = "tincd" ] ; then + ALL_NETNAME="$(awk '/^ *NETWORK:/ { print $2 }' "${NETS}")" + else + ALL_NETNAME="${RC_SVCNAME#*.}" + fi + # warn this if still not found + if [ -z "${ALL_NETNAME}" ] ; then + eerror "No VPN networks configured in ${NETS}" + return 1 + fi + return 0 +} + +start() { + ebegin "Starting tinc VPN networks" + checkconfig || return 1 + for NETNAME in ${ALL_NETNAME} + do + CONFIG="/etc/tinc/${NETNAME}/tinc.conf" + PIDFILE="/run/tinc.${NETNAME}.pid" + if [ ! -f "${CONFIG}" ]; then + eerror "Cannot start network ${NETNAME}." + eerror "Please set up ${CONFIG} !" + else + ebegin "Starting tinc network ${NETNAME}" + if [ "${SYSLOG}" = "yes" ]; then + LOG="" + else + LOG="--logfile=/var/log/tinc.${NETNAME}.log" + fi + start-stop-daemon --start --exec "${DAEMON}" --pidfile "${PIDFILE}" -- --net="${NETNAME}" ${LOG} --pidfile "${PIDFILE}" --debug="${DEBUG_LEVEL}" ${EXTRA_OPTS} + eend $? + fi + done +} + +stop() { + ebegin "Stopping tinc VPN networks" + checkconfig || return 1 + for NETNAME in ${ALL_NETNAME} + do + PIDFILE="/run/tinc.${NETNAME}.pid" + if [ -f "${PIDFILE}" ]; then + ebegin "Stopping tinc network ${NETNAME}" + start-stop-daemon --stop --pidfile "${PIDFILE}" + eend $? + fi + done +} + +reload() { + ebegin "Reloading configuration for tinc VPN networks" + checkconfig || return 1 + for NETNAME in ${ALL_NETNAME} + do + PIDFILE="/run/tinc.${NETNAME}.pid" + if [ -f "${PIDFILE}" ]; then + ebegin "Reloading tinc network ${NETNAME}" + start-stop-daemon --signal HUP --pidfile ${PIDFILE} + eend $? + fi + done +} diff --git a/tinc/tincd.run b/tinc/tincd.run new file mode 100644 index 0000000..21f4869 --- /dev/null +++ b/tinc/tincd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec tincd -D diff --git a/tint2/PKGBUILD b/tint2/PKGBUILD new file mode 100644 index 0000000..29aa7a4 --- /dev/null +++ b/tint2/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Jesus E. + +pkgname=tint2 +pkgver=16.7 +pkgrel=1 +pkgdesc='Basic, good-looking task manager for WMs' +arch=('i686' 'x86_64') +url='https://gitlab.com/o9000/tint2/' +license=('GPL-2') +depends=('gtk2' 'imlib2' 'startup-notification') +makedepends=('cmake' 'ninja') +source=("https://deb.debian.org/debian/pool/main/t/${pkgname}/${pkgname}_${pkgver}.orig.tar.bz2" + "libre.patch") +sha512sums=('92d3bb3b26fe356553b711727d86c46ab1530990e972791b10ddde57c7479ce983dda97bacb5dd37be1e846c767b00a0e36388271d5e6618552243c8e2a7fa43' + '73f94892e1ff5ddfe5ab691c8d4241b92389affe72ea7dd35b7fdbfaeefd0fa13560c86cff1f08f5bb04ffa625079547c74fa44995785bbcd52f56e2216b126e') + +prepare() { + cd ${pkgname}-v${pkgver}/ + patch -p1 -i ${srcdir}/libre.patch +} + +build() { + cd ${pkgname}-v${pkgver}/ + cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr/ -DENABLE_TINT2CONF=1 + ninja +} + +package() { + cd ${pkgname}-v${pkgver}/ + DESTDIR=${pkgdir} ninja install + # Install licence file. + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname}/ +} diff --git a/tint2/libre.patch b/tint2/libre.patch new file mode 100644 index 0000000..41d82fa --- /dev/null +++ b/tint2/libre.patch @@ -0,0 +1,479 @@ +Summary: Remove semi/non-libre and non-privacy browser app items, + replace existing two app items, and some minor changes. +Author: Jayvee Enaguas +Date: 2021-07-09 07:06:20.000000000 +0000 + +--- a/themes/horizontal-dark-opaque.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/horizontal-dark-opaque.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf 08d3 ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -172,11 +172,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -191,8 +188,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/horizontal-dark-transparent.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/horizontal-dark-transparent.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf 3947 ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -172,11 +172,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -191,8 +188,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/horizontal-icon-only.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/horizontal-icon-only.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf 70c4 ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -172,11 +172,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -191,8 +188,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = +@@ -201,7 +198,7 @@ clock_dwheel_command = + # Battery + battery_tooltip = 1 + battery_low_status = 10 +-battery_low_cmd = notify-send "battery low" ++battery_low_cmd = xmessage 'tint2: Battery low!' + battery_full_cmd = + bat1_font = sans 8 + bat2_font = sans 6 + +--- a/themes/horizontal-light-opaque.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/horizontal-light-opaque.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf f101 ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -183,11 +183,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -202,8 +199,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/horizontal-light-transparent.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/horizontal-light-transparent.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf 6ae3 ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -172,11 +172,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -191,8 +188,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/horizontal-text-only.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/horizontal-text-only.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf bb4a ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -196,11 +196,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -215,8 +212,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = +@@ -225,7 +222,7 @@ clock_dwheel_command = + # Battery + battery_tooltip = 1 + battery_low_status = 10 +-battery_low_cmd = notify-send "battery low" ++battery_low_cmd = xmessage 'tint2: Battery low!' + battery_full_cmd = + bat1_font = sans 8 + bat2_font = sans 6 + +--- a/themes/tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf aeaf ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -149,10 +149,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -165,8 +163,8 @@ clock_padding = 2 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/vertical-dark-opaque.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/vertical-dark-opaque.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf 4216 ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -172,11 +172,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -191,8 +188,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/vertical-dark-transparent.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/vertical-dark-transparent.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf 688d ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -172,11 +172,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -191,8 +188,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/vertical-light-opaque.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/vertical-light-opaque.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf e02a ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -183,11 +183,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -202,8 +199,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/vertical-light-transparent.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/vertical-light-transparent.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf 7cb8 ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -172,11 +172,8 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock +@@ -191,8 +188,8 @@ clock_padding = 1 0 + clock_background_id = 0 + clock_tooltip = + clock_tooltip_timezone = +-clock_lclick_command = zenity --calendar --text "" +-clock_rclick_command = orage ++clock_lclick_command = gsimplecal ++clock_rclick_command = + clock_mclick_command = + clock_uwheel_command = + clock_dwheel_command = + +--- a/themes/vertical-neutral-icons.tint2rc 2019-07-15 06:15:40.000000000 +0000 ++++ b/themes/vertical-neutral-icons.tint2rc 2021-07-09 07:06:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-#---- Generated by tint2conf 0ed5 ---- ++#---- Generated by tint2conf ---- + # See https://gitlab.com/o9000/tint2/wikis/Configure for + # full documentation of the configuration options. + #------------------------------------- +@@ -111,7 +111,7 @@ taskbar_always_show_all_desktop_tasks = 0 + taskbar_name_padding = 0 0 + taskbar_name_background_id = 0 + taskbar_name_active_background_id = 0 +-taskbar_name_font = Liberation Sans Bold 10 ++taskbar_name_font = sans bold 10 + taskbar_name_font_color = #000000 100 + taskbar_name_active_font_color = #000000 100 + taskbar_distribute_size = 0 +@@ -126,7 +126,7 @@ task_centered = 0 + urgent_nb_of_blink = 65535 + task_maximum_size = 34 34 + task_padding = 0 0 2 +-task_font = Liberation Sans 10 ++task_font = sans 10 + task_tooltip = 1 + task_font_color = #e7e7e7 80 + task_normal_font_color = #e7e7e7 80 +@@ -170,20 +170,17 @@ launcher_icon_theme_override = 0 + startup_notifications = 1 + launcher_tooltip = 1 + launcher_item_app = tint2conf.desktop +-launcher_item_app = firefox.desktop +-launcher_item_app = iceweasel.desktop +-launcher_item_app = chromium-browser.desktop +-launcher_item_app = google-chrome.desktop +-launcher_item_app = x-terminal-emulator.desktop ++launcher_item_app = iceweasel-uxp.desktop ++launcher_item_app = xterm.desktop + + #------------------------------------- + # Clock + time1_format = %m-%d + time2_format = %H:%M +-time1_font = Liberation Sans 8 ++time1_font = sans 8 + time1_timezone = + time2_timezone = +-time2_font = Liberation Sans Bold 10 ++time2_font = sans bold 10 + clock_font_color = #e7e7e7 81 + clock_padding = 1 1 + clock_background_id = 1 +@@ -199,10 +196,10 @@ clock_dwheel_command = + # Battery + battery_tooltip = 1 + battery_low_status = 10 +-battery_low_cmd = notify-send -u critical "Battery low" ++battery_low_cmd = xmessage 'tint2: Battery low!' + battery_full_cmd = +-bat1_font = Liberation Sans 10 +-bat2_font = Liberation Sans 10 ++bat1_font = sans 10 ++bat2_font = sans 10 + battery_font_color = #e7e7e7 81 + bat1_format = + bat2_format = +@@ -214,8 +211,8 @@ battery_rclick_command = + battery_mclick_command = + battery_uwheel_command = + battery_dwheel_command = +-ac_connected_cmd = notify-send -u normal "AC connected" +-ac_disconnected_cmd = notify-send -u normal "AC disconnected" ++ac_connected_cmd = ++ac_disconnected_cmd = + + #------------------------------------- + # Tooltip +@@ -224,5 +221,5 @@ tooltip_hide_timeout = 0 + tooltip_padding = 3 3 + tooltip_background_id = 6 + tooltip_font_color = #e7e7e7 81 +-tooltip_font = Liberation Sans 10 ++tooltip_font = sans 10 + diff --git a/tint3-cpp/PKGBUILD b/tint3-cpp/PKGBUILD new file mode 100644 index 0000000..6dd9823 --- /dev/null +++ b/tint3-cpp/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=tint3-cpp +pkgver=0.3.0 +_abseilname=abseil-cpp +_abseilver=20220623.0 +pkgrel=1 +pkgdesc="Free and libre C++ rewrite of the tint2 panel." +arch=('i686' 'x86_64') +url='https://github.com/jmc-88/tint3' +license=('GPL-2') +depends=('imlib2' 'pango' 'libxinerama' 'libxrandr' 'libxcomposite' 'startup-notification' 'hicolor-icon-theme' + 'curl' 'libxdamage' 'xsettings-client') +makedepends=('cmake' 'xenocara-server-xvfb' 'xenocara-xauth') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/jmc-88/tint3/archive/refs/tags/v${pkgver}.tar.gz" + "${_abseilname}-${_abseilver}.tar.gz::https://github.com/abseil/abseil-cpp/archive/refs/tags/${_abseilver}.tar.gz") +sha512sums=('43b287ef2cc27727711756fde1016848bab40ca77cc4c14203bb5ba9e23374043fa1aa5167e7fa723f5f3af25ac5593993f80347d139248cbcb21b319698f3ec' + '6a84254927cac285c77f6b2e77de23ce4f65c28acc0289228f3db552e247fb1dedf2c6e51a98da7df700c062612e27e6acd029122e8abc3fff12f3f5502c8c10') + +prepare() { + mv "abseil-cpp-${_abseilver}" "abseil-cpp" +} + +build() { + cd "$srcdir/tint3-${pkgver}" + cmake -DCMAKE_INSTALL_PREFIX=/usr . + make +} + +package() { + cd "$srcdir/tint3-${pkgver}" + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} + diff --git a/tinycdb/PKGBUILD b/tinycdb/PKGBUILD new file mode 100644 index 0000000..79dd186 --- /dev/null +++ b/tinycdb/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=tinycdb +pkgver=0.78 +pkgrel=1 +pkgdesc='Very fast and simple package for creating and reading constant data bases' +arch=('i686' 'x86_64') +url='https://www.corpit.ru/mjt/tinycdb.html' +license=('Public-Domain') +depends=('glibc') +options=(!staticlibs) +source=("https://www.corpit.ru/mjt/tinycdb/${pkgname}-${pkgver}.tar.gz") +sha512sums=('8930086b8e7fddcd4dbd3354c5f5ee05171df68fde1cc222b6c402430042b6e761efbad7e5fa8de18e1d36390f1526cc3e605c5086fe1c363ba1df6c03201553') + +build() { + cd "${pkgname}-${pkgver}" + make CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" all shared +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" \ + prefix=/usr \ + mandir=/usr/share/man \ + INSTALLPROG=cdb-shared \ + install-{all,sharedlib} + install -vDm 644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}/" + install -vDm 644 {NEWS,ChangeLog} -t "${pkgdir}/usr/share/doc/${pkgname}/" +} + +# vim:set ts=2 sw=2 et: diff --git a/tinydns/PKGBUILD b/tinydns/PKGBUILD new file mode 100644 index 0000000..0b4e91e --- /dev/null +++ b/tinydns/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=tinydns +pkgver=0.3.1 +pkgrel=1 +pkgdesc="Tiny cache DNS server" +arch=('i686' 'x86_64') +url='https://github.com/CupIvan/tinydns' +license=('Expat') +backup=('etc/tinydns.conf') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/CupIvan/${pkgname}/archive/v${pkgver}.tar.gz" + "$pkgname.initd" + "$pkgname.run") +sha512sums=('c24dc2ede27875842d0081d087189594dc061f07e47be78675032a184b8a3b0c16522aee6020ff0b65f5b048e76b85e7dbed118b8963d5e85395ea1cdd121fc2' + '7e389b0ff4b3561e395d16a510a1baddc63f2f7a697afcc6d4c924a6199cca0e64788502792db8847bad4ac26756be620881e8b44d4d1dfcae898458f1e0cbe4' + 'f2a503ed76097efe4b4bddc0f1de84f331c6dcf2314fe9f33710e76ca13210e72d81e1bb1f95e42c1ee2b24f0885f8dd6b1a8fb43c381a38c829f24c520b6581') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + sed -i 's:tinydns:& -Wl,-z,now,-z,relro:' Makefile + # correct version + sed -i '/char version/s|0.3|0.3.1|' main.c +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + install -Dm755 ${pkgname} -t "${pkgdir}/usr/sbin" + install -Dm644 ${pkgname}.conf -t "${pkgdir}/etc" + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + + # install services + install -Dm755 "${srcdir}"/$pkgname.initd "${pkgdir}"/etc/init.d/$pkgname + install -Dm755 "${srcdir}/$pkgname.run" "${pkgdir}/etc/sv/$pkgname/run" +} diff --git a/tinydns/tinydns.initd b/tinydns/tinydns.initd new file mode 100644 index 0000000..f85fc64 --- /dev/null +++ b/tinydns/tinydns.initd @@ -0,0 +1,11 @@ +#!/sbin/openrc-run + +name="tinydns" +description="tiny DNS cache service" +supervisor=supervise-daemon +command=/usr/sbin/tinydns +pidfile="/run/$SVCNAME.pid" + +depend() { + need net +} diff --git a/tinydns/tinydns.run b/tinydns/tinydns.run new file mode 100644 index 0000000..c7a0de7 --- /dev/null +++ b/tinydns/tinydns.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec tinydns diff --git a/tinyproxy/PKGBUILD b/tinyproxy/PKGBUILD new file mode 100644 index 0000000..e04e855 --- /dev/null +++ b/tinyproxy/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=tinyproxy +pkgver=1.10.0 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="A light-weight, free and libre HTTP proxy daemon for POSIX operating systems." +arch=('i686' 'x86_64') +url='https://tinyproxy.github.io/' +license=('GPL-2') +depends=('glibc' 'gawk') +makedepends=('asciidoc' 'quilt') +backup=('etc/tinyproxy/tinyproxy.conf') +source=("https://github.com/${pkgname}/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.xz"{,.asc} + "https://security.debian.org/debian-security/pool/updates/main/t/tinyproxy/tinyproxy_${_debver}-${_debrel}+deb11u1.debian.tar.xz" + "tinyproxy.initd" + "tinyproxy.run") +sha512sums=('8d82598c5f9c89bc672f4632139ac52696d5c7788963de51688a8aeb576c69004f8338fe1e1897bf704a21dfd25ab1effb092003b6afaa9a88c2b5d0608310f5' + 'SKIP' + '2d46819ad0a6da6827ae47a25897dee38dd0c61478f760c767f11eab6d18db1f3b42d443d98d891479ffead2890c80d7ba2eb5cc681de14f31dec25872afb3c3' + 'cd440ed686e8128ed46441ca29da8376c4d28e9e34ae9b85c18eb2f1681d60c0c04b79401a7368f917eeab6768965d6c867d0ac6578a7858557c11b356446c02' + '40c1ccf23f5cc5328a92045ac60137cfdcfae207e3eb0dbc4d2ed84c489aa803e4628adbe7a8c67c41ac6153c05eaa272a3b993cd3ffa6b6cfb79d3af1d24cee') +validpgpkeys=('38871449E065D635620A621EC94F4938184F9034') # Michael Adam + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --enable-transparent + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + # services install + install -Dm755 "${srcdir}"/${pkgname}.initd "${pkgdir}"/etc/init.d/$pkgname + install -Dm755 "${srcdir}"/${pkgname}.run "${pkgdir}"/etc/sv/$pkgname/run + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tinyproxy/tinyproxy.initd b/tinyproxy/tinyproxy.initd new file mode 100644 index 0000000..48688a2 --- /dev/null +++ b/tinyproxy/tinyproxy.initd @@ -0,0 +1,40 @@ +#!/sbin/openrc-run +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +get_config() { + res=$(awk '$1 == "'$1'" { s=$2 } END { print s }' "$CONFFILE") + + if [ "x$res" = "x" ]; then + echo "$2" + else + eval echo "$res" + fi +} + +: ${CONFFILE:="/etc/${SVCNAME}/${SVCNAME}.conf"} + +command=/usr/bin/tinyproxy +command_args="-c ${CONFFILE}" +pidfile=$(get_config PidFile /run/tinyproxy/${SVCNAME}.pid) + +depend() { + config "$CONFFILE" + + use dns + + [ "$(get_config Syslog Off)" = "On" ] && \ + use logger +} + +start_pre() { + piddir=$(dirname ${pidfile}) + + if [ "${piddir}" = "/run" ]; then + eerror "Please change your PidFile settings to be within the" + eerror "/run/tinyproxy directory" + eend 1 + else + checkpath -d -o $(get_config User tinyproxy):$(get_config Group tinyproxy) ${piddir} + fi +} diff --git a/tinyproxy/tinyproxy.run b/tinyproxy/tinyproxy.run new file mode 100644 index 0000000..a065b7f --- /dev/null +++ b/tinyproxy/tinyproxy.run @@ -0,0 +1,4 @@ +#!/bin/sh +[ -r conf ] && . ./conf +install -d -m 0755 -o _tinyproxy -g _tinyproxy /run/tinyproxy +exec chpst -1 tinyproxy -d $OPTS diff --git a/tinyxml/PKGBUILD b/tinyxml/PKGBUILD new file mode 100644 index 0000000..031ffb0 --- /dev/null +++ b/tinyxml/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +pkgname=tinyxml +pkgver=2.6.2 +pkgrel=1 +_debver=$pkgver +_debrel=4 +pkgdesc='Simple, small XML parser' +url="http://grinninglizard.com/$pkgname/" +arch=('i686' 'x86_64') +license=('zlib') +makedepends=('setconf' 'quilt') +source=("https://downloads.sourceforge.net/$pkgname/${pkgname}_${pkgver//./_}.tar.gz" + "https://deb.debian.org/debian/pool/main/${pkgname::1}/$pkgname/${pkgname}_$_debver-$_debrel.debian.tar.xz" + 'entity.patch' + "$pkgname-2.5.3-stl.patch" + "$pkgname.pc") +sha512sums=('133b5db06131a90ad0c2b39b0063f1c8e65e67288a7e5d67e1f7d9ba32af10dc5dfa0462f9723985ee27debe8f09a10a25d4b5a5aaff2ede979b1cebe8e59d56' + '71d1afd7d9275636e8f1a4f265c84dfb95bb0d930057c008954d3c852f03110ac11b6aaca2227352bb083d82567eb3a6dd11e0d7fc8849a5bcac0f23f653f155' + 'e03f4bdfb80354c6d262abb40e6c105cb2d37530e2f1f1d865ff4fd8434320a26957fbc2379db8af1bd18cd3c8662e064e79525831a5fb9fcb4aff46f3eb0809' + '52cd82ef9e8f1783b3d6042551342a8c592c447e1da352d5d017db4211144bc0a908ddbfe2a4641b3108fb8e02dc47f385a851f920532d94178314255904a6ef' + '5c7993f26119f2a9b21e95ecca195db3996460616d7b760e3b1ea8ab3a6fd4b904c2370d39ed18ae30dae521ba6f3253f231321543a606f03bef5c29d1ab33a1') + +prepare() { + cd "$pkgname" + + if [[ ${pkgver%.*} != ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # Fix entity encoding + patch -p0 -i "$srcdir/entity.patch" + + # Make TINYXML_USE_STL permanently defined in tinyxml.h + # patch -p1 -i "$srcdir/$pkgname-2.5.3-stl.patch" + + # Fix Makefile + # setconf Makefile TINYXML_USE_STL YES + setconf Makefile RELEASE_CFLAGS "$CXXFLAGS -fPIC" +} + +build() { + cd "$pkgname" + + make + g++ -fPIC "$CXXFLAGS" -shared -o "lib${pkgname}.so.0.$pkgver" \ + -Wl,-soname,"lib${pkgname}.so.0" $(ls *.o | grep -v xmltest) +} + +package() { + cd "$pkgname" + + #install -dm0755 "$pkgdir"/usr/{lib,include} + install -Dm0755 "lib${pkgname}.so.0.$pkgver" -t "$pkgdir"/usr/lib/ + install -Dm0644 "$pkgname.h" tinystr.h -t "$pkgdir"/usr/include + install -Dm644 readme.txt -t "$pkgdir/usr/share/licenses/$pkgname" + install -Dm644 "$srcdir/$pkgname.pc" -t "$pkgdir/usr/lib/pkgconfig" + + cd "$pkgdir/usr/lib" + ln -s "lib${pkgname}.so.0.$pkgver" "lib${pkgname}.so.0" + ln -s "lib${pkgname}.so.0.$pkgver" "lib${pkgname}.so" + + +} + +# vim: ts=2 sw=2 et: diff --git a/tinyxml/entity.patch b/tinyxml/entity.patch new file mode 100644 index 0000000..66d89a6 --- /dev/null +++ b/tinyxml/entity.patch @@ -0,0 +1,64 @@ +? entity.patch +Index: tinyxml.cpp +=================================================================== +RCS file: /cvsroot/tinyxml/tinyxml/tinyxml.cpp,v +retrieving revision 1.105 +diff -u -r1.105 tinyxml.cpp +--- tinyxml.cpp 5 Jun 2010 19:06:57 -0000 1.105 ++++ tinyxml.cpp 19 Jul 2010 21:24:16 -0000 +@@ -57,30 +57,7 @@ + { + unsigned char c = (unsigned char) str[i]; + +- if ( c == '&' +- && i < ( (int)str.length() - 2 ) +- && str[i+1] == '#' +- && str[i+2] == 'x' ) +- { +- // Hexadecimal character reference. +- // Pass through unchanged. +- // © -- copyright symbol, for example. +- // +- // The -1 is a bug fix from Rob Laveaux. It keeps +- // an overflow from happening if there is no ';'. +- // There are actually 2 ways to exit this loop - +- // while fails (error case) and break (semicolon found). +- // However, there is no mechanism (currently) for +- // this function to return an error. +- while ( i<(int)str.length()-1 ) +- { +- outString->append( str.c_str() + i, 1 ); +- ++i; +- if ( str[i] == ';' ) +- break; +- } +- } +- else if ( c == '&' ) ++ if ( c == '&' ) + { + outString->append( entity[0].str, entity[0].strLength ); + ++i; +Index: xmltest.cpp +=================================================================== +RCS file: /cvsroot/tinyxml/tinyxml/xmltest.cpp,v +retrieving revision 1.89 +diff -u -r1.89 xmltest.cpp +--- xmltest.cpp 5 Jun 2010 17:41:52 -0000 1.89 ++++ xmltest.cpp 19 Jul 2010 21:24:16 -0000 +@@ -1340,6 +1340,16 @@ + }*/ + } + ++ #ifdef TIXML_USE_STL ++ { ++ TiXmlDocument xml; ++ xml.Parse("foo&#xa+bar"); ++ std::string str; ++ str << xml; ++ XmlTest( "Entity escaping", "foo&#xa+bar", str.c_str() ); ++ } ++ #endif ++ + /* 1417717 experiment + { + TiXmlDocument xml; diff --git a/tinyxml/tinyxml-2.5.3-stl.patch b/tinyxml/tinyxml-2.5.3-stl.patch new file mode 100644 index 0000000..7bcde59 --- /dev/null +++ b/tinyxml/tinyxml-2.5.3-stl.patch @@ -0,0 +1,12 @@ +diff -up tinyxml/tinyxml.h~ tinyxml/tinyxml.h +--- tinyxml/tinyxml.h~ 2007-11-30 22:39:36.000000000 +0100 ++++ tinyxml/tinyxml.h 2007-11-30 22:39:36.000000000 +0100 +@@ -26,6 +26,8 @@ distribution. + #ifndef TINYXML_INCLUDED + #define TINYXML_INCLUDED + ++#define TIXML_USE_STL 1 ++ + #ifdef _MSC_VER + #pragma warning( push ) + #pragma warning( disable : 4530 ) diff --git a/tinyxml/tinyxml.pc b/tinyxml/tinyxml.pc new file mode 100644 index 0000000..2234f13 --- /dev/null +++ b/tinyxml/tinyxml.pc @@ -0,0 +1,11 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: TinyXml +Description: simple, small, C++ XML parser +Version: 2.6.2 +Libs: -L${libdir} -ltinyxml +Cflags: -I${includedir} + diff --git a/tinyxml2/PKGBUILD b/tinyxml2/PKGBUILD new file mode 100644 index 0000000..66f395d --- /dev/null +++ b/tinyxml2/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=tinyxml2 +pkgver=8.0.0 +_debver=8.0.0+dfsg +_debrel=2 +pkgrel=1 +pkgdesc='Simple XML parser made for easy integration' +arch=('i686' 'x86_64') +url='http://www.grinninglizard.com/tinyxml2' +license=('zlib') +makedepends=('cmake' 'ninja' 'setconf' 'quilt') +source=($pkgname-$pkgver.tar.gz::https://github.com/leethomason/$pkgname/archive/$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/t/tinyxml2/tinyxml2_$_debver-$_debrel.debian.tar.xz) +sha512sums=('bcbb065c2af34ea681ec556377fd22e720b6f5d4caa73f432b1e34e08603a96f2233763f0ec5ae86b9ee71ddbe3062f58d3794cd3a162ce6903435530de0bba6' + 'f9bf8010bff37c51b06a73b49e3700c91bbf2a0cc8bcabe53729920d271d3de979a8cc5e335612c30a556a4ae07f92ed2719eed61410add9b41f904808019264') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd .. + grep License -A20 "$srcdir/$pkgname-$pkgver/readme.md" > LICENSE +} + +build() { + mkdir -p build + cd build + cmake "../$pkgname-$pkgver" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=Release \ + -G Ninja + ninja +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/tk/PKGBUILD b/tk/PKGBUILD new file mode 100644 index 0000000..d5ae7c5 --- /dev/null +++ b/tk/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=tk +pkgver=8.6.11 +_debver=8.6.11 +_debrel=1 +pkgrel=1 +pkgdesc="A windowing toolkit for use with tcl" +arch=('i686' 'x86_64') +url="http://tcl.sourceforge.net/" +license=('custom:Tcl') +depends=("tcl=$pkgver" 'libxss' 'libxft') +makedepends=('quilt') +options=('staticlibs') +source=(https://downloads.sourceforge.net/sourceforge/tcl/tk${pkgver}-src.tar.gz + https://deb.debian.org/debian/pool/main/t/tk8.6/tk8.6_$_debver-$_debrel.debian.tar.xz) +sha512sums=('2e11490f2f51ef7e723661dd91c95622234fb97850e80d8ecd564be8c28f7c8fb0334a97cf8267af9d68f63e4adea887a1a4eec8d2e807d6a970b5912f99d3f2' + '2010db3a12e45eafe2b8c6b2a625023af933cbcafdb9da6bdd0cac376a15e28d3c60a7d362ce3d4fc606762faa576dc83cb3f9aeeada697bf6360810be2c7aed') + +prepare() { + cd tk$pkgver/unix + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/font-sizes.diff || true + rm -v debian/patches/tkprivate.diff || true + + quilt push -av + fi +} + +build() { + cd tk$pkgver/unix + [[ $CARCH == "x86_64" ]] && BIT="--enable-64bit" + ./configure --prefix=/usr --mandir=/usr/share/man --enable-threads --disable-rpath $BIT + make +} + +package() { + cd tk$pkgver/unix + make INSTALL_ROOT="${pkgdir}" install install-private-headers + ln -sf wish${pkgver%.*} "${pkgdir}/usr/bin/wish" + ln -sf libtk${pkgver%.*}.so "${pkgdir}/usr/lib/libtk.so" + install -Dm644 license.terms "${pkgdir}/usr/share/licenses/${pkgname}/license.terms" + + # install private headers (FS#14388, FS#47616) + cd .. + for dir in compat generic generic/ttk unix; do + install -dm755 "${pkgdir}"/usr/include/tk-private/$dir + install -m644 -t "${pkgdir}"/usr/include/tk-private/$dir $dir/*.h + done + + # remove buildroot traces + sed -e "s#${srcdir}/tk${pkgver}/unix#/usr/lib#" \ + -e "s#${srcdir}/tk${pkgver}#/usr/include#" \ + -i "${pkgdir}/usr/lib/tkConfig.sh" +} diff --git a/tkdiff/PKGBUILD b/tkdiff/PKGBUILD new file mode 100644 index 0000000..50748e4 --- /dev/null +++ b/tkdiff/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=tkdiff +pkgver=5.6 +pkgrel=2 +pkgdesc="A graphical, free and libre frontend to the diff program" +arch=('any') +license=('GPL-2') +url='https://tkdiff.sourceforge.net/' +conflicts=('tkrev') +depends=('tcl' 'tk') +source=("https://downloads.sourceforge.net/project/$pkgname/$pkgname/$pkgver/$pkgname-5-6.zip" + "$pkgname.desktop" + "$pkgname.png") +sha512sums=('ba4d312b372145772c4654a6fc1231752843fc84059296550163490e597046b2060fd021769e4edf2a7641dec34cbf7619d6e4aad2a64568ce6a6721080b2368' + 'f77143b83b665d5e6bf5a58b780adc8e987dcfbcc29794e197dfc258963138bc2fbbc5c79e85a08abcd1d3c39a3eddf73cc28cbea9cdf0cf8ad9a56f9b241ec8' + '4230b4cddc3b6e2d0628fcceab9516ce2f9e0c2b746b084648da6d72818afb2aa0c613ab7c9ecadb50ec08a74aff187f291d8fd0d2ca849bbf420f6c493500a1') + +package() { + install -Dm755 "$srcdir/$pkgname-5-6/tkdiff" "$pkgdir/usr/bin/$pkgname" + install -Dm644 "$srcdir/$pkgname.desktop" -t "$pkgdir/usr/share/applications" + install -Dm644 "$srcdir/$pkgname.png" -t "$pkgdir/usr/share/pixmaps" + install -Dm644 "$srcdir/$pkgname-5-6/LICENSE.txt" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tkdiff/tkdiff.desktop b/tkdiff/tkdiff.desktop new file mode 100644 index 0000000..9946fca --- /dev/null +++ b/tkdiff/tkdiff.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=tkdiff +Comment=A graphical, free and libre frontend to the diff program +Exec=tkdiff +Icon=tkdiff +Type=Application +Terminal=false +StartupNotify=false +Categories=System; diff --git a/tkdiff/tkdiff.png b/tkdiff/tkdiff.png new file mode 100644 index 0000000000000000000000000000000000000000..f32a3068db34b6c112931cb64e5d2950e2a89be1 GIT binary patch literal 8583 zcmeHqc{r49*#6ivC|h1c#@Ndk%PdCrU6zFGOJip2`xrB}vP80!Lb8)Rgg5)XD`kjO zB&0%-Jrwc{^=`-S`{zB5-}m49%<(+)JlA#J=Y3u0eLeTgb;H<5hXu$B1ONamdb*k> zlyA`Cd5oTN#Rmm#0szbsL1vczCTJqa$Isiz)dL6e5A?x-a3ohJ0Dv@6k>(m8+{kk6 zV1rXx{SJt6Ro-@bgC!*7>SM`L8x!}UH>bx;ahIfQ!&Eg@fx9XP%I_TZVoIWHU$~Wh zofWH}G?|aI8@kXw{XS)7dsnPgYHh#!+v*iT-}CYV8)Kgrf7EZRg@(-!e>1zn`*?1# zYloEg@zu_jYwoLOvuD?b7U9OhEW)1}SsiFLooy^Ui&VVPOY;p=0ggl7tMwiNsrw(B z*;_B&(=nM~|2V6pcZCb|BO}sZ`SHGye1pUWDt6tzpp9M#)E+zfb@V~ke0j^&*y+rJ zWKPlMAqJxmW~WeIh(xA*jg$!*`hC+zqMJya1a zX>#5GRtx(GBxaL(lg!d3W$vK#Dt!>Gl_FCcb-_(M2{$Z0kU4oI*ENAZwl1`^@h|XQ z4~b80?T;mhK!JDPrEL(G!Gdco?@A`At^|kvSZe|DND}WQuxz<2YQ(cUy!PXJlI8NQ zuWPNewqy|w5OiGba=f1yUZyQk-KTFl!hIwEb`DupJFh?u=qTY@J&>$*=1KJj{6>7= z?v&XGo|g<}<7AD(3YR36F;|BR4AMsj-M*tQQR`AYa=y|852-b;FuG!=^@ywDf!jn) zhGm`O*b7O^M^h#okE?4YYOLHVh@xNOCj*=C8Y@C9Jb}p&PM`a-xn177TJZJh;`Sr1>EG`z z8+=Rno((^JDfARrA&YZ}hescE$M-8UVBrI*S#mBjqL_>isMWlb+;b*Q%vo!Qo9EfN zBEQ+-y0pUSjnn>1P>ap$HajG~3^Vq+E9wfN+Y+wjdJl_!?^M1P zf6Ej8r6K`3@R0oz2*YxDfi~P)WJ|_Tj31+?i$M&zSLdgw&X0ab^O=Sv$2Etyt3*$? zTnvRbuezITer`$)Yc)KXdH*7wyKt*I=vEO!5A>EdCcKG|n0{P1ln@F!$6SD?{-O=A z<|zx4<6*xbpf<`gR$;j6-}SNY?xP++^M>c zNgP^(aDJhEwfu#%{`^%R=4snp=JSohyN{z}1+q598?{b5+u`};X~9;AV`ML()%bvs zH^VQ1;{|jBY8#fds!%3r(;pe$s%f(N6F~~1HYXzNW3`l?mj-YwmfciS-8jAXQkjs* zAR>h-k<0K8PP73Eg&giL)U;!0<-4J&eg|--ME* zRT{r3GjYG1-1v<2sI15A_|7upyl;bca@{pg}XtK-R@ zGv^t;HMULVdRCnB35K_Dh3&yD8>MiM#+4Xi87#Vl2vcvC;_eLC@dd;4#7TYZ9?3>M zHHkv&$`j?9E_pl^w#Ug{`iWHjjWzV7V9Yrjp;+q4`Tf#SGt018m+|%6jXdUUEnKV> zpXxL3eQtLX4b0BW--UhZ*pd80Du<^sJcqThu7qWqa{v_uY^y~(UDF+ zdS9K;GdVG6CBkRo@~OGYJd9e5N3NrFhYE?Y7a}9*_z{3x<`xbz(>BWnN|dDsIw2_rzBZ62$i5m z2xJoKmAr$St$W}G&%5ik&_cyIn?`j<^3#}8U!&`VWUIRTOyj7|4-LG{cd>fNN@aaU z@pCdgGx|qp^NIIrQR2n;G@0v{1B&~@ErUJ=!qyt36MMGOQ)heAC13bZ`p zjH;E{5{Van>z-#-yJ3H2A*jIoq`bg3J06uW!*ZDs>jFf0G#n%VSVr2ZYiWaS#EfR~ z`z)9(lppCl{0i)r_v<;w% z7w@r*j)#P0cj^|?vAZs9t04zE1VfB-VpZTE7J-@iFwpGSOl$$s zTZ5==oke)N&1PD2jWtz6fYoI)j5mTM%o3k}j#p-aZtya3mqi3iM?=j3%>c`+ha>R9XXHz&#l1^1ce1yg-uh!Mv^*&?5N(pEo>;?$v!(aX9t zZ)xG3D_L$&Z*84*f{j=NaNrKL1YQyr!G0tAhB@^|b%QxKxrmITCm<(A8kr%wW4j_q zznF`jx|=k^P6C_Io$C?szB|n)=79ShgE31=`tj;;7di2Jeb=;DtbQ(sES0B6#n^sIJF7EE z6@l(xca<6DOTL>{tTcUPo(Xso4IuWFp}kpifi$$m0I$&uss+&*R`X*v9LFZJiSAPh zBf~G>e1{dEc-wOttxLHwZP#dm65up|Ym4ARsDWajPLLL?X#4 zJRTHRB{&tZW@n!F+B`fKZESW|Ixs>hPF%p~tfo*vxpWhiTJg!5u*KyM%q7v!XWJae zxbqne?Ec#Cc4~xfQddjzUZd@CP)bN?eoEcu&gw?bBc&)D|J9Uw?pn#5aQrl^bim&jYOqxKHKUZj5H*&kIipL^2Y zeSX{6c|d0G1Z16AW%{k_)`oPGm)nq*-rLDMz1OgnaLZ##IDA>WspCU?@f!IxSaztQ z(Dyq1)idf$dzCU|wdTEBVqK|nubo43rIUHjGa*|y{ze`5fED#}$u!&py4Hs*}FV5)W7ob6nUJhsG$OH+%l7N}Li>K0|rZ(#qO!I1Y3=WjZlwKFqAj$@s@ zRu&8vYOH%yz5zZa{S34<^j26;vHj0hn%<2!_(|G6rPE~)%&W++S4yPag8hOyU zGH(6t2_sa3lR?3OZyrOtFhR!)@BgM8klDw`8bbeY^KQEdgOjpeWo^v@+i*RLt!+IF zccNjEiav*VJlRe{SO4*R__o~lB1vfQf{CW~ zFAB<&64=Gx-$wxoB@&5JL^&yMKWC^63Wb77%R*&kAru4zAL!+eCPBRLLWdMTIW%#2 zjGwEIzpJ+w=#Ufb=uPlf0)r`j&>!)6`WPDiN$-XKr2<6{C<*NYm64K$dU`_tJ_7Hr z6+j{R70~}W0&hlXhM^`nyf?uQgVPGYdHDYe0a8f-@CGcUq3RrK9D^}s?7A^-zJ0a!K5NStw6aD^p5&Ent+4DPi|{*62-#kqicl+0GK!qPbxrqCO5^% z;IC(>#jrp_#lj}vG$|@Z87Qu&sb*%`J@(2bK4t7A!|K7rZgbX3KpVadHUBIPB}ap2 zkWeVe)6I`E!*HH4)b*_JGd0MlV*|U5-V?1!Sj$W88BwK`)HZy9Xf2Q_`Z{=7$Q8&q zR;L?Y!^5Y|?L@XEht#(c1z_AX-MD*!3+K1qPb{XU)NYeSZJqb_8da{XoLHPrQwR?F zs;=yRAlH1=XU=-PcAQIj?^XBrA$z6v&lmb@L!-czPlRJ7E-8n(Q&)|19(;OO|9X2X z^X=a4O@|FGt_jH@;aJ{C{rhPdlu?`T^U#!*xNO~0-5|ikYO)i zWwEolzc^qu;t~kbsi_nx2P^nKkW{&&Wjc6vX58*-dCR8#8d5Rms!s%Jm@OYcIDYHx zDm?)fP_Z*#x$Lw7l=oE(RE3V0;YBnAhU7t*g+AKkY>ny{b>z9(sX&^R)g&6P$aklj z%ARAp@_4C7q&qzsu2l0BTBm+OeJkGbUSA5N((Kq5Z=&Imh}Yx5GHE{N)Q(N9e2jcNDV#Nz-<^^OH$8d5YpO5RPf(?L7KcgZZesxXO8?b8~~ zt=CF;;LgmX+31WJBGHAHH&!UkOqU~SM@U^!SWugHMpSVAdP&XKmwa{ybJ^Dw5zc_C z;HFY^Q$_WNG(X$#Yn*G>Rb_=i7^;Ng5(Ljo(DA6bD9&rOI((*5IUF5jC%(P7lVe@V z`TjPbXpuIhko7C)`2u4TkSc%R^~jjcs?cQjw{4h@*(CI%N(Uqe{wRCuehAEn@i{m8 zb4!E)o!K2KFkSVr#Z*1gR)1}SQx|lM)tswbCa`I_39yT7N-sV2#_eR8EeAokTVkY| zHd!0M&dM0lx}suP@5r9{Q~N zy=MmU5;Sy*eGvhjtdUQ+i{x*d=*w7LZ2z<~kbtQ&v|XTn&kHjw?%QeXC2om$|M;OB zw4APx_`asj_DjnklMTS@-OMMt+*}UTSlCTar|(_*)gLYl02Y(y&g(biB`ag*>e{%5 zM%s7R`}msOI`nOr25(yIpi3)K7w%b^EEr{ZJWM0w>l;j9 zQY)lUd)-Dw-@g9<0QGtz7m2e;w`o3yw?F2{M;m1mESh_tjg?JP6i^B(yk-)X?h;ne z;(`a$3(ek+NV$5cBFwQ&#F5R#`f`-BRtfD*Fe z5+F_B#e;J`H;w}Uqs%1q+1Qk*?bl7#SFJjhS;D>C`p9m<4wswgSVI-^c^S(cvK>=Y zV$9ATyDgXmypiqLZ=E}1EoU$)*8lstD z8&;U86RCaEsm@>i-lLYuli8DVil3&myn=41_N_qb zn_Y;|{18c%@A|NH&23e|BtC6Vl)WP1+?0~GF*u`|DgCxabz$6k)aQCb(bN$7)jh5p z$-5!7BNOn;3^-}!jgwQ;u$%pD@-d3H1aZ_-ELfH(Tqr$E)cKjvtaKJ2#hUn}cGGkB z^i~ZMAWn18w=2uA*8ZUlIjXZ6D<0l_*I-u1{j)TTPBpKezcZFD;cQ!oE%J7yKS-cX z2{3E^*$;j` zhBRU>3Dxg>F13Hpn)}pHS~^+VTCu`)21baiE<2D6h2+d`rhyI4YFkQ%fhzCiC##d! zhwqh4!}YcWzJGmexcWwD5omL3N_ipbB%q1H0bZQ2n5LSXjR2*&{#) zUUCy+Xq9eoHRrf;{S_NRCm0fWT|TQ9s>jCvt$y_CPU~~H*kbg?x59_t*DE%e*x%1P zpVp-tIxoHcj#2Mk + +pkgname=tkdvd +pkgver=4.0.9 +pkgrel=1 +pkgdesc="TkDVD is a GUI to dvd+rw-tools and libburn" +url='http://regis.damongeot.free.fr/tkdvd/' +license=('GPL-2') +arch=('any') +depends=('tk' 'dvd+rw-tools' 'libburn') +source=("http://regis.damongeot.free.fr/${pkgname}/dl/${pkgname}-${pkgver}.tar.gz" + "$pkgname.sh" + "$pkgname.desktop") +sha512sums=('948cbbf98338aaf92e4e74e81fbd996d7646f6737a7adfad16063bd8747994e33e034b277942536423d9c099f85dec6649c2be6f1a0e1efba8da7537ea426820' + '7d9c7816044b0224e15797ecb6766ba77c51f35d53be1ce50ed55cba9fade499ae620d0edbbc070374d9232b8dea3033d729d25a882386ffff296a47aa8b2802' + '0f355b134af65a7fd41149d18986b5c191fa8d0ccc9aa7c6d5ed5bde77aa37ed897a63d2c70b285baa877d4dda21ac2e72a73d091281cc84ba4efb4ca1218fca') + +build() { + cd "${pkgname}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}" + + install -d "$pkgdir/usr/share/$pkgname" + install -d "$pkgdir/usr/share/$pkgname/src" + cp -r src/* "$pkgdir/usr/share/$pkgname/src" + rm -rf "$pkgdir/usr/share/$pkgname/src/CVS" + + install -Dm755 TkDVD.sh "$pkgdir/usr/share/$pkgname" + install -Dm755 "$srcdir/$pkgname.sh" "$pkgdir/usr/bin/$pkgname" + install -Dm644 "$srcdir/$pkgname.desktop" -t "$pkgdir/usr/share/applications" + install -Dm644 icons/tkdvd-2-48.png "$pkgdir/usr/share/pixmaps/$pkgname.png" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tkdvd/tkdvd.desktop b/tkdvd/tkdvd.desktop new file mode 100644 index 0000000..9c509c4 --- /dev/null +++ b/tkdvd/tkdvd.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=TkDVD +GenericName=Disc Burner +Comment=GUI for CD/DVD burning +Keywords=disc;cdrom;dvd;burn;audio;video; +Exec=tkdvd +Icon=tkdvd +Type=Application +StartupNotify=true +Categories=DiscBurning;AudioVideo; diff --git a/tkdvd/tkdvd.sh b/tkdvd/tkdvd.sh new file mode 100644 index 0000000..ccec24b --- /dev/null +++ b/tkdvd/tkdvd.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cd '/usr/share/tkdvd' +"./TkDVD.sh" $@ diff --git a/tkimg/PKGBUILD b/tkimg/PKGBUILD new file mode 100644 index 0000000..4b258ed --- /dev/null +++ b/tkimg/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=tkimg +_pkgname=Img +pkgver=1.4.14 +pkgrel=1 +pkgdesc="Provides the handling of several image formats beyond the standard formats in Tk" +url='https://wiki.tcl-lang.org/page/Img' +arch=('i686' 'x86_64') +license=('custom:BSD') +depends=('zlib' 'libjpeg-turbo' 'libpng' 'libtiff' 'tcl' 'tk' 'tcllib') +source=("https://downloads.sourceforge.net/${pkgname}/${_pkgname}-${pkgver}-Source.tar.gz") +sha512sums=('41bfc6909a6836cbdce34f5e5672a02ac67e6d7263a97d48b564994462cc089905a0824444bd849b6d228750bf09f0cf617989dc9008705938a283fa4e5f1b45') + +build() { + cd "${_pkgname}-${pkgver}-Source" + + if [[ $CARCH = "i686" ]]; then + ./configure \ + --prefix=/usr \ + --enable-threads + else + ./configure \ + --prefix=/usr \ + --enable-threads \ + --enable-64bit + fi + make all +} + +package() { + cd "${_pkgname}-${pkgver}-Source" + + make INSTALL_ROOT="${pkgdir}" install + install -Dm644 license.terms -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/tklib/PKGBUILD b/tklib/PKGBUILD new file mode 100644 index 0000000..9d13573 --- /dev/null +++ b/tklib/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=tklib +pkgver=0.7+20210111 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Tklib specializes in utilities for GUI programming." +arch=('i686' 'x86_64') +url='https://core.tcl-lang.org/tklib/home' +license=('custom:BSD') +depends=('tk' 'tcllib') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/t/tklib/tklib_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/t/tklib/tklib_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('2880968247e0370eb56d3a804f1af5a6d03ec3785407650bd23aa3b7f0cdf799e170751330175f5f1666b90cf30249efa17d04da824a81de950ace784d10f84e' + 'a19f0362781b808697740f32f45705902c9282c10ef1033637954cb3009049e8bd6fb65aafa2901176fb012979e2147461988cd45337a6d4babcd41c72e34aa3') + +prepare() { + cd "Tk_Library_Source_Code" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "Tk_Library_Source_Code" + ./configure --prefix=/usr + make all +} + +package() { + cd "Tk_Library_Source_Code" + make DESTDIR="$pkgdir" install + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tkpacman/PKGBUILD b/tkpacman/PKGBUILD new file mode 100644 index 0000000..dc05c35 --- /dev/null +++ b/tkpacman/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=tkpacman +pkgver=1.9.1 +pkgrel=1 +pkgdesc="A lightweight GUI for pacman / hyperman built with Tcl/Tk" +arch=('any') +url='https://sourceforge.net/projects/tkpacman' +license=('GPL-2') +depends=('tcl' 'tk') +optdepends=('xterm: alternative terminal emulator') +source=("https://downloads.sourceforge.net/tkpacman/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz" + "correct-license-path.patch") +sha512sums=('4f44d3b7f2a683c92938122875c0eece396ea04f5e18d9db14a601841a6dfe6de6420bdb7cae0d0da8705e9965cb2c3f18c7da4fbf285d51ddf9a70b8789370c' + 'fb2e5e66318a2efc0d252e5f5f3c0990d5648136d160ea0e4cfe04b6f20743cfb62f25e4890a7a47dbf498acd97dc2d3388423b6e9e425c0e753dfc0e21558be') + +prepare() { + cd "$pkgname-$pkgver" + patch -Np1 -i $srcdir/correct-license-path.patch +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" PREFIX='/usr' install + install -Dm644 license/gpl.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tkpacman/correct-license-path.patch b/tkpacman/correct-license-path.patch new file mode 100644 index 0000000..04e27bc --- /dev/null +++ b/tkpacman/correct-license-path.patch @@ -0,0 +1,11 @@ +--- a/config.tcl 2020-01-13 14:33:32.000000000 +0100 ++++ b/config.tcl 2023-07-12 14:08:19.697801599 +0200 +@@ -11,7 +11,7 @@ + set installDir [file dirname [file normalize [info script]]] + # puts "installDir = $installDir" + # puts [file normalize [info script]] +- set licenseDir {/usr/share/licenses/common/GPL2} ++ set licenseDir {/usr/share/licenses/common/GPL-2} + set languageDir [file join $installDir {msgs}] + set docDir [file join $installDir doc] + if {![file exists $docDir]} then { diff --git a/tkrev/PKGBUILD b/tkrev/PKGBUILD new file mode 100644 index 0000000..f9037a8 --- /dev/null +++ b/tkrev/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=tkrev +pkgver=9.4.6 +pkgrel=2 +pkgdesc="Platform-agnostic GUI supporting CVS, RCS and Git" +arch=('any') +license=('GPL-2') +url='https://tkcvs.sourceforge.io/' +conflicts=('tkdiff') +depends=('tcl' 'tk') +optdepends=('cvs: for using CVS as version control system' + 'git-legacy: for using Git as version control system' + 'rcs: for using RCS as version control system') +source=("${pkgname}-${pkgver}.tar.gz::https://sourceforge.net/projects/tkcvs/files/${pkgname}_${pkgver}.tar.gz" + "${pkgname}.xpm" + "${pkgname}.desktop") +sha512sums=('6c0d3eabb805556fef9957cf79f5585c57f8c6511feada1721c14d3fa612c90dec32e9b72188641aa62046b1e1fc308e6b5c46778f2f243c38a5d3ae813b0773' + '9920a8d1109c6b285b91529cc93b855ba91dedd4612f70907dcaf192caeca10b04f84f6e0ffb4533d640d14d224804b8ff2f496df5f49b96b0f4886853f01b04' + '0bc80c62e74ca57235e492f5fe6a80d0634b71e3de24b5e1e37711a877e14ac72d86fd3676baf3db6bde95f8524d392ca74ca561e374c6d4481a35149b17e23b') + +prepare() { + mv "${pkgname}_${pkgver}" "${pkgname}-${pkgver}" +} + +package() { + cd "${pkgname}-${pkgver}" + ./doinstall.tcl -nox "$pkgdir/usr" + install -Dm755 contrib/tkdirdiff -t "$pkgdir/usr/bin" + + install -Dm644 "$srcdir/$pkgname.xpm" -t "$pkgdir/usr/share/pixmaps" + install -Dm644 "$srcdir/$pkgname.desktop" -t "$pkgdir/usr/share/applications" + + install -Dm644 LICENSE.txt -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tkrev/tkrev.desktop b/tkrev/tkrev.desktop new file mode 100644 index 0000000..e2b413e --- /dev/null +++ b/tkrev/tkrev.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Encoding=UTF-8 +Name=tkrev +GenericName=CVS/RCS/Git Frontend +Comment=A graphical frontend to CVS, RCS and Git. +Exec=tkrev +Icon=tkrev +Categories=RevisionControl;Development;ProjectManagement; + diff --git a/tkrev/tkrev.xpm b/tkrev/tkrev.xpm new file mode 100644 index 0000000..9da35e0 --- /dev/null +++ b/tkrev/tkrev.xpm @@ -0,0 +1,46 @@ +/* XPM */ +static char * tkcvs_xpm[] = { +"32 32 11 1", +" c None", +". c #FFFFFF", +"+ c #C6C6C6", +"@ c #E3E3E3", +"# c #717171", +"$ c #8E8E8E", +"% c #AAAAAA", +"& c #000000", +"* c #393939", +"= c #555555", +"- c #1C1C1C", +"................................", +"................................", +"...+@@++@@+.@#+.................", +"..+$##$$##$+@#+.................", +"......##....+$$.................", +"......##....+$$...$$............", +"......$$....@#+.@#$+............", +"......$$....@#+.@#+.............", +"......##....+$$.$+..............", +"......##....+$$$$+..............", +"......$$....@#+.##+.............", +"......$$....@#+.@#+.............", +"......##....+$$.+$#@............", +"......##....+$$..+##............", +"................................", +"................................", +"................................", +"................................", +"....@%&&&&&%*&=....+-+@%&&&&&%..", +"....*&*%%%&%%&=....==.*&*%%%#%..", +"...=&*......+-*@..@*$.&&........", +"..+-*@.......=&%..%&..&&$.......", +"..%&=........=&#..#*..+-&&%@....", +"..%&=........+&&..&%...+&&&*$...", +"..%&=.........&&.+&%.....$*&&#..", +"..%&-+........#&$=*@......@%&&..", +"...=&#........%&**=.........&&..", +"...+&&$...++..@*&&+...=+...$&#..", +"....+=&&&&-+...=&&....&&&&&&$...", +"......%%%%+....+%%....%%%%%%....", +"................................", +"................................"}; diff --git a/tmux/PKGBUILD b/tmux/PKGBUILD new file mode 100644 index 0000000..5a2eb59 --- /dev/null +++ b/tmux/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=tmux +pkgver=3.2a +_debver=$pkgver +_debrel=4 +pkgrel=1 +pkgdesc="A terminal multiplexer" +url='https://github.com/tmux/tmux/wiki' +arch=('i686' 'x86_64') +license=('ISC') +depends=('ncurses' 'libevent' 'libutempter') +makedepends=('quilt' 'automake-1.15') +source=("https://github.com/tmux/tmux/releases/download/${pkgver}/tmux-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/t/tmux/tmux_${_debver}-${_debrel}~bpo11+1.debian.tar.xz") +sha512sums=('6e52c7f5d03b2c8b8c4c8caac092a166956ba97334b426f2823d74dc5849a1d31a80145924f641f69dd2c244809e9350d9bd7070897fa2e3e1f9f086f9b2f365' + '7ab1807f438d21e1ba64d93b864645c16c48e627333958ee4a1f1261c7930de75369bba5c2e7034928e108d08703a6d8fb526ca123442eaf16fb0c0a13033c8f') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-utempter + make +} + +package() { + cd $pkgname-$pkgver + + make install DESTDIR="$pkgdir" + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tofrodos/PKGBUILD b/tofrodos/PKGBUILD new file mode 100644 index 0000000..3d7ea3b --- /dev/null +++ b/tofrodos/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=tofrodos +pkgver=1.7.13 +pkgrel=1 +pkgdesc="Convert ASCII files between the MS-DOS/Windows format and the UNIX format" +arch=('i686' 'x86_64') +url='https://www.thefreecountry.com/tofrodos/index.shtml' +license=('GPL-2') +depends=('glibc') +source=("https://fossies.org/linux/misc/${pkgname}-${pkgver}.tar.gz") +sha512sums=('629804caf20ac7bfc6f47637b7bc575766f032e324142df3be14347f050c61d969e023f8fed0ce5c87d8fc57b25c60c4e0214600738c5079d5e731045dae4843') + +build() { + export CFLAGS+=" -c -Wall" + cd "$pkgname/src" + make -e +} + +package() { + cd "$pkgname/src" + install -d "$pkgdir"/usr/{bin,share/man/man1} + make BINDIR="$pkgdir/usr/bin" MANDIR="$pkgdir/usr/share/man/man1" install + install -Dm644 $srcdir/$pkgname/COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tokyocabinet/PKGBUILD b/tokyocabinet/PKGBUILD new file mode 100644 index 0000000..9022454 --- /dev/null +++ b/tokyocabinet/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=tokyocabinet +pkgver=1.4.48 +_debver=$pkgver +_debrel=15 +pkgrel=2 +pkgdesc="A modern implementation of DBM" +arch=('i686' 'x86_64') +url='https://fallabs.com/tokyocabinet/' +license=('LGPL-2.1' 'Modified-BSD' 'zlib') +depends=('zlib' 'bzip2') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/t/tokyocabinet/tokyocabinet_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/t/tokyocabinet/tokyocabinet_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('b9995c838e713c13f781ab41062caefeb5c613f696dab08039f992f6860413d60a513114b83468cafdf7fc5b5e51ab880226972465d532f873f2a55f615e1440' + '879418573e0eee3e891ec5967083891647808a79e03200b1031f541338d7aa26d93b3ed722c0cf26834570adec86a5ee291eac58d8bc644066c1b0f764bbc76a') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --enable-off64 \ + --enable-fastest + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 debian/copyright COPYING -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/tolua++/PKGBUILD b/tolua++/PKGBUILD new file mode 100644 index 0000000..a092eab --- /dev/null +++ b/tolua++/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. +# Contributer (Arch): Paramvir Likhari + +pkgname=tolua++ +pkgver=1.0.93 +_pkgname=toluapp-$pkgver +pkgrel=1 +pkgdesc='Tool to integrate C/C++ code with Lua' +arch=('i686' 'x86_64') +url='https://github.com/LuaDist/toluapp' +license=('Expat') +depends=('lua51') +options=('staticlibs') +makedepends=('cmake') +source=(https://github.com/LuaDist/toluapp/archive/${pkgver}.tar.gz) +sha512sums=('68f169244f1b37fdeb1a72b0f8fc61a30329c0a828f46af718021c8cfa120fe15379b4b2bc10f0995de90e34735564afd6d302fa1865be60272e52e276e1114f') + +build() { + cd "${srcdir}/${_pkgname}" + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + . + make +} + +package() { + cd "${srcdir}/${_pkgname}" + + make DESTDIR="${pkgdir}" install + + mkdir -p ${pkgdir}/usr/share/${pkgname} + install -D -m755 src/bin/lua/* ${pkgdir}/usr/share/${pkgname} + install -Dm644 "$srcdir/${_pkgname}/COPYRIGHT" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/tomatoes/PKGBUILD b/tomatoes/PKGBUILD new file mode 100644 index 0000000..2722c33 --- /dev/null +++ b/tomatoes/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=tomatoes +pkgver=1.55 +_debver=$pkgver +_debrel=10 +pkgrel=1 +pkgdesc="I Have No Tomatoes - free and libre tomatoes smashing game" +url='https://tomatoes.sourceforge.net' +license=('zlib' 'GPL-2') +arch=('i686' 'x86_64') +depends=('sdl_image' 'sdl_mixer' 'glu') +makedepends=('quilt') +groups=('games') +source=("https://deb.debian.org/debian/pool/main/t/tomatoes/tomatoes_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/t/tomatoes/tomatoes_${_debver}-${_debrel}.debian.tar.xz" + "${pkgname}.desktop" + "makefile-compile-flags.patch") +sha512sums=('b16fdfc6ba2777edc53d5b235811f7b25f5f498ddb1dcb148aae0a7e9a15af575ba76e3e0b1e10d9441c830b557f646cee48b80c53d3c95257093e332e5d56e7' + '3a4e955753be1f76d3fd19625528aab00b66951818ce8e30b42307a4b3ee518403b2dbac5ede2951a7ccaf7cd595053a80eb8d82c1dd7b3ae81260db42263cf1' + 'aad74b21648f1ecc78d4aec1e9d54bc578609f28032b464733a51bcfda2ed8dbfbd36ad1b65df6a08c87b7e1927614fe04a4f941b65f06e9ba51830d0945a85a' + 'e1abac2428864b55d00e7902e7fd026167c1587b29384e08921ea30d34b7478587dedb2a9fe5dcf89f6ee7333f80f024e26e72a09935e850885c8fa056d40085') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/02_version.diff || true + rm -v debian/patches/08_flags.diff || true + + quilt push -av + fi + + # additional fixes + patch -p1 -i $srcdir/makefile-compile-flags.patch +} + +build() { + cd $pkgname-$pkgver + + make \ + MPKDIR=/usr/share/games/$pkgname/ \ + MUSICDIR=/usr/share/games/$pkgname/music/ \ + CONFIGDIR=/usr/share/games/$pkgname/ \ + OVERRIDEDIR=./ +} + +package() { + cd $pkgname-$pkgver + + install -d "$pkgdir"/usr/share/games/$pkgname + cp $pkgname.mpk config.cfg "$pkgdir"/usr/share/games/$pkgname + install -d "$pkgdir"/usr/share/games/$pkgname/music + cp music/IHaveNoTomatoes.it "$pkgdir"/usr/share/games/$pkgname/music + + install -Dm755 $pkgname "$pkgdir"/usr/games/$pkgname + install -Dm644 icon.png "$pkgdir"/usr/share/pixmaps/$pkgname.png + install -Dm644 "$srcdir"/$pkgname.desktop -t "$pkgdir"/usr/share/applications + install -Dm644 debian/copyright -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/tomatoes/makefile-compile-flags.patch b/tomatoes/makefile-compile-flags.patch new file mode 100644 index 0000000..66e851c --- /dev/null +++ b/tomatoes/makefile-compile-flags.patch @@ -0,0 +1,31 @@ +--- a/makefile 2017-09-16 09:14:06.399502208 +0200 ++++ b/makefile 2017-09-16 09:14:13.459372215 +0200 +@@ -35,7 +35,7 @@ + + + # SDL flags +-SDL_FLAGS = `sdl-config --cflags` ++SDL_FLAGS = $(shell sdl-config --cflags) + + + # Debugmode stuff +@@ -47,8 +47,8 @@ + CFLAGS = -MMD -g3 -O3 -march=$(MARCH) -Wall -pg + LDFLAGS = `sdl-config --libs` -lSDL_image -lSDL_mixer -lGL -lGLU -pg + else +-CFLAGS = -MMD -O3 -march=$(MARCH) -Wall $(SDL_FLAGS) +-LDFLAGS = `sdl-config --libs` -lSDL_image -lSDL_mixer -lGL -lGLU -s ++CXXFLAGS += -MMD $(SDL_FLAGS) ++LDFLAGS += $(shell sdl-config --libs) -lSDL_image -lSDL_mixer -lGL -lGLU + endif + endif + +@@ -80,7 +80,7 @@ + rebuild: veryclean all + + obj/%.o: src/%.cpp +- $(CC) $(CFLAGS) $(INCLUDES) $(DIR_DEFINES) -c $< -o $@ ++ $(CC) $(CXXFLAGS) $(CPPFLAGS) $(INCLUDES) $(DIR_DEFINES) -c $< -o $@ + + # Compress the exe with UPX + compress: $(TARGET) diff --git a/tomatoes/tomatoes.desktop b/tomatoes/tomatoes.desktop new file mode 100644 index 0000000..209d802 --- /dev/null +++ b/tomatoes/tomatoes.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=I Have No Tomatoes +Name[de]=Ich Habe Keine Tomaten +Comment=How many tomatoes can you smash in ten short minutes? +Comment[de]=Wieviele Tomaten können Sie in zehn kurzen Minuten quetschen? +TryExec=/usr/games/tomatoes +Exec=/usr/games/tomatoes +Categories=Game;ArcadeGame; +Icon=/usr/share/pixmaps/tomatoes.png +Keywords=game; diff --git a/toppler/PKGBUILD b/toppler/PKGBUILD new file mode 100644 index 0000000..3dacf9e --- /dev/null +++ b/toppler/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=toppler +pkgver=1.1.6 +pkgrel=2 +pkgdesc="A classic, free and libre jump & run game in which you climb the rotating towers" +arch=('i686' 'x86_64') +url="https://sourceforge.net/projects/toppler/" +license=('GPL-3') +depends=('gcc-libs' 'sdl_mixer' 'zlib') +makedepends=('intltool' 'gettext-tiny') +groups=('games') +source=("https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz" + "$pkgname.desktop") +sha512sums=('e0f6b7b72e38ba3402ba3608116fb51bf36cad129fb5591db62489829f4ed1ec49a4a3b7b1db4aaa34cd1561ee5228d91577f550aad2d55520ccefdff9bda9e9' + 'faaca963de797282c148c41c1d57657ddaf0686b80328bf144ebe58208ee118c822e36d5dc5c7a0af6f4691e54f04e55fb25709e890d8efe04f1c4b9c83b9a81') + +build() { + cd "$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games \ + --localstatedir=/usr/share/games + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + # correcting wrong folder-locations + mv "${pkgdir}/usr/share/games/"{doc,locale,pixmaps} "${pkgdir}/usr/share" + rm -rf "${pkgdir}/usr/share/games/applications" + + # install desktop-file + install -Dm644 "$srcdir/$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop" + + # install license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/toppler/toppler.desktop b/toppler/toppler.desktop new file mode 100644 index 0000000..4218f6e --- /dev/null +++ b/toppler/toppler.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Tower Toppler +Comment=Climb the rotating towers +Exec=toppler +Icon=toppler +Terminal=false +Type=Application +Categories=Game;ArcadeGame; diff --git a/tor-hardened-preferences/PKGBUILD b/tor-hardened-preferences/PKGBUILD new file mode 100644 index 0000000..230a81f --- /dev/null +++ b/tor-hardened-preferences/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=tor-hardened-preferences +pkgver=0.1 +pkgrel=3 +pkgdesc="Creates clean chroot for TOR to run in, and cleans left over files when done running." +arch=(any) +license=(GPL-2) +depends=('tor') +install=tor-hardened-preferences.install +source=('tor-hardened.initd' + 'tor-hardened.run' + 'tor-hardened.sh' + 'torchroot.sh' + 'torrc') +sha512sums=('f211ef6d6a6eea0551c09c6affc233a92974e5d3a82ed576b437f56a0aaecf99342e1623d1ceaf462c1182f3db7c542df66dd70c156adda8924c1f59c533e4ab' + '07e4c76c061b43f4f6f505d10c9dd585b37b67e61266ce68ac627636ac36f8c67ce6e69448ca83a06a96a8bfaa4a0cd5d3de53768f6e41bc3385727f50913f5d' + '74cd4f64a5be879d49798349793d779d0c4332dffcbae78d6d2ffd4b8ed59aed1b65cfc92dc4fddbb384634692acb270651bfb418a91636e4513910c7a750574' + 'ec7aea855a53ac549e3ecde25ee72d1ba07203f06dbc316f194cb973f6fdf3dc2c275294d590f457948146cadff19879f23f74f9b86935989552ef51ec476567' + '5d732ddbd96c0467434a03c1ba3aa14f5536affb1fa713a78b0d95eccefbfe4c9b6d68fefcbbf7fc9f23e5e80e4ddfb67f2047ad3bdd14a0b5bb72a9e947404e') + +package() { + mkdir -p ${pkgdir}/usr/libexec/tor-hardened-scripts + install -Dm755 tor-hardened.sh ${pkgdir}/usr/libexec/tor-hardened-scripts/tor-hardened.sh + install -Dm755 torchroot.sh ${pkgdir}/usr/libexec/tor-hardened-scripts/torchroot.sh + install -Dm755 tor-hardened.initd ${pkgdir}/etc/init.d/tor-hardened + install -Dm755 tor-hardened.run "$pkgdir"/etc/sv/tor-hardened/run + install -Dm644 torrc ${pkgdir}/usr/libexec/tor-hardened-scripts/torrc +} diff --git a/tor-hardened-preferences/tor-hardened-preferences.install b/tor-hardened-preferences/tor-hardened-preferences.install new file mode 100644 index 0000000..9fb44fb --- /dev/null +++ b/tor-hardened-preferences/tor-hardened-preferences.install @@ -0,0 +1,86 @@ +pre_install() { + echo "Cleaning any old chroots before installing a new one..." + if [ -d '/opt/torchroot' ]; then + rm -rf /opt/torchroot + fi + if [ -d '/srv/torchroot' ]; then + rm -rf /srv/torchroot + fi +} + +post_install() { + echo "Installing a new chroot ... " + /bin/sh -c "/usr/libexec/tor-hardened-scripts/torchroot.sh" + wait + echo "Done!" + echo "=====" + echo "To use this service please disable tor," + echo "then enable tor-hardened via HyperRC or runit." + echo "----" + echo "You may now use stream isolated ports for added security." + echo "Please configure your applications as follows:" + echo "Default Port: 9050" + echo "Mail Client isolated port: 9061" + echo "Browser isolated port: 9150" + echo "Other applications you want isolated: 9062" + echo "----" + echo "To request new IP from TOR:" + echo "killall -HUP tor" + echo "---" + echo "WARNING: UDP traffic may still leak! All traffic goes through single port." + echo "=====" +} + +post_upgrade() { + echo "Stopping chrooted tor..." + if [ -x /etc/init.d/tor-hardened ]; then + /etc/init.d/tor-hardened stop + fi + + echo "Cleaning old chroot and putting in a new one..." + if [ -d '/opt/torchroot' ]; then + rm -rf /opt/torchroot + fi + if [ -d '/srv/torchroot' ]; then + rm -rf /srv/torchroot + fi + wait + /bin/sh -c "/usr/libexec/tor-hardened-scripts/torchroot.sh" + wait + echo "Done!" + echo "=====" + echo "To use this service please disable tor," + echo "then enable tor-hardened via HyperRC or runit." + echo "----" + echo "You may now use stream isolated ports for added security." + echo "Please configure your applications as follows:" + echo "Default Port: 9050" + echo "Mail Client isolated port: 9061" + echo "Browser isolated port: 9150" + echo "Other applications you want isolated: 9062" + echo "----" + echo "To request new IP from TOR:" + echo "killall -HUP tor" + echo "---" + echo "WARNING: UDP traffic may still leak! All traffic goes through single port." + echo "=====" +} + +pre_remove() { + echo "Stopping chrooted tor..." + if [ -x /etc/init.d/tor-hardened ]; then + /etc/init.d/tor-hardened stop + fi +} + +post_remove() { + echo "Deleting chroot..." + if [ -d '/opt/torchroot' ]; then + rm -rf /opt/torchroot + fi + if [ -d '/srv/torchroot' ]; then + rm -rf /srv/torchroot + fi + wait + echo "Done!" +} diff --git a/tor-hardened-preferences/tor-hardened.initd b/tor-hardened-preferences/tor-hardened.initd new file mode 100644 index 0000000..d9461d9 --- /dev/null +++ b/tor-hardened-preferences/tor-hardened.initd @@ -0,0 +1,108 @@ +#!/sbin/openrc-run +# Copyright 2017-2021 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +CHROOT=/srv/torchroot +PIDFILE=/var/run/tor/tor.pid +CONFFILE=/etc/tor/torrc +SVCNAME=tor +GRACEFUL_TIMEOUT=${GRACEFUL_TIMEOUT:-60} +EXTRA_COMMANDS="torvercheck" + +# See bug #523552, and https://trac.torproject.org/projects/tor/ticket/5525 +# Graceful = wait 30 secs or so until all connections are properly closed. +extra_commands="checkconfig" +extra_started_commands="graceful gracefulstop reload" +description="Anonymizing overlay network for TCP" +description_checkconfig="Check for valid config file." +description_reload="Reload the configuration." +description_graceful="Gracefully restart." +description_gracefulstop="Gracefully stop." + +depend() { + need net +} + +checkconfig() { + # first check that it exists + if [ ! -f ${CHROOT}${CONFFILE} ] ; then + eerror "You need to setup ${CHROOT}${CONFFILE} first" + eerror "Example is in ${CHROOT}${CONFFILE}.sample" + return 1 + fi + + if [ ! -c ${CHROOT}/dev/random ] ; then + mknod -m 666 ${CHROOT}/dev/null c 1 3 + mknod -m 644 ${CHROOT}/dev/random c 1 8 + mknod -m 644 ${CHROOT}/dev/urandom c 1 9 + mount -ro remount ${CHROOT}/dev + fi + + checkpath --quiet --mode 755 --owner "${SVCNAME}":"${SVCNAME}" --directory `dirname ${CHROOT}${PIDFILE}` + + # now verify whether the configuration is valid + /usr/bin/${SVCNAME} --verify-config -f ${CHROOT}${CONFFILE} > /dev/null 2>&1 + if [ $? -eq 0 ] ; then + einfo "Tor configuration (${CHROOT}${CONFFILE}) is valid." + return 0 + else + eerror "Tor configuration (${CHROOT}${CONFFILE}) not valid." + /usr/bin/${SVCNAME} --verify-config -f ${CHROOT}${CONFFILE} + return 1 + fi +} + +start() { + checkconfig || return 1 + ebegin "Starting chrooted Tor" + HOME=/var/lib/${SVCNAME} + echo "Cleaning any files left over from a previous run..." + rm -rf /srv/torchroot/var/lib/tor/* + # Detect old version and upgrade + Torchroothash=$(sha256sum /srv/torchroot/usr/bin/tor | awk '{print $1}') + Toroutsidehash=$(sha256sum /usr/bin/tor | awk '{print $1}') + if [ "$Torchroothash" != "$Toroutsidehash" ] + then + echo "New version of Tor detected! Updating chroot before running." + rm -rf /srv/torchroot + wait + /usr/bin/sh -c "/usr/libexec/tor-hardened-scripts/torchroot.sh" + wait + fi + start-stop-daemon --start --pidfile "${CHROOT}${PIDFILE}" --quiet --exec chroot -- --userspec=tor:tor ${CHROOT} /usr/bin/${SVCNAME} -f "${CONFFILE}" --runasdaemon 1 --PidFile "${PIDFILE}" > /dev/null 2>&1 + eend $? +} + +stop() { + ebegin "Stopping chrooted Tor" + start-stop-daemon --stop --pidfile "${CHROOT}${PIDFILE}" + rm -f "${CHROOT}${PIDFILE}" + eend $? +} + +graceful() { + gracefulstop + start + eend $? +} + +gracefulstop() { + local rc=0 + ebegin "Gracefully stopping chrooted Tor" + ebegin "This can take up to ${GRACEFUL_TIMEOUT} seconds" + start-stop-daemon -P --stop --signal INT -R ${GRACEFUL_TIMEOUT} --pidfile "${CHROOT}${PIDFILE}" + rc=$? + eend "done" + eend $rc +} + +reload() { + if [ ! -f ${CHROOT}${PIDFILE} ]; then + eerror "${SVCNAME} isn't running" + return 1 + fi + checkconfig || return 1 + ebegin "Reloading chrooted Tor configuration" + start-stop-daemon --signal HUP --pidfile ${CHROOT}${PIDFILE} + eend $? +} diff --git a/tor-hardened-preferences/tor-hardened.run b/tor-hardened-preferences/tor-hardened.run new file mode 100644 index 0000000..15daf17 --- /dev/null +++ b/tor-hardened-preferences/tor-hardened.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/libexec/tor-hardened-scripts/tor-hardened.sh 2>&1 diff --git a/tor-hardened-preferences/tor-hardened.sh b/tor-hardened-preferences/tor-hardened.sh new file mode 100644 index 0000000..c670614 --- /dev/null +++ b/tor-hardened-preferences/tor-hardened.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +############################################## +# Tor-Hardened Cleaner & Startup Script # +############################################## +# Clean left over files +echo "Cleaning any files left over from a previous run..." +rm /srv/torchroot/var/lib/tor/* +# Detect old version and upgrade +Torchroothash=$(sha256sum /srv/torchroot/usr/bin/tor | awk '{print $1}') +Toroutsidehash=$(sha256sum /usr/bin/tor | awk '{print $1}') +if [ "$Torchroothash" != "$Toroutsidehash" ] +then + echo "New version of Tor detected! Updating chroot before running." + rm -rf /srv/torchroot + wait + /bin/sh -c "/usr/libexec/tor-hardened-scripts/torchroot.sh" + wait +fi + +# Start Tor inside of our chroot +echo "Running Tor..." +chroot --userspec=tor:tor /srv/torchroot /usr/bin/tor -f /etc/tor/torrc diff --git a/tor-hardened-preferences/torchroot.sh b/tor-hardened-preferences/torchroot.sh new file mode 100644 index 0000000..7ac8fdf --- /dev/null +++ b/tor-hardened-preferences/torchroot.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# torchroot generate script +export TORCHROOT=/srv/torchroot + +mkdir -p $TORCHROOT +mkdir -p $TORCHROOT/etc/tor +mkdir -p $TORCHROOT/dev +mkdir -p $TORCHROOT/usr/bin +mkdir -p $TORCHROOT/usr/lib +mkdir -p $TORCHROOT/usr/share/tor +mkdir -p $TORCHROOT/var/lib +mkdir -p $TORCHROOT/var/run + +ln -s /usr/lib $TORCHROOT/lib +# Replace this line if you want to copy your own torrc instead of the one provided by hardened script. +cp /usr/libexec/tor-hardened-scripts/torrc $TORCHROOT/etc/tor/ + +cp /usr/bin/tor $TORCHROOT/usr/bin/ +cp /usr/share/tor/geoip* $TORCHROOT/usr/share/tor/ +cp /lib/libnss* /lib/libnsl* /lib/ld-linux-*.so* /lib/libresolv* /usr/lib/libgcc_s.so* $TORCHROOT/usr/lib/ +cp $(ldd /usr/bin/tor | awk '{print $3}'|grep --color=never "^/") $TORCHROOT/usr/lib/ +cp -r /var/lib/tor $TORCHROOT/var/lib/ +chown -R tor:tor $TORCHROOT/var/lib/tor + +sh -c "grep --color=never ^tor /etc/passwd > $TORCHROOT/etc/passwd" +sh -c "grep --color=never ^tor /etc/group > $TORCHROOT/etc/group" + +mknod -m 644 $TORCHROOT/dev/random c 1 8 +mknod -m 644 $TORCHROOT/dev/urandom c 1 9 +mknod -m 666 $TORCHROOT/dev/null c 1 3 + +if [[ "$(uname -m)" == "x86_64" ]]; then + cp /lib64/ld-linux-x86-64.so* $TORCHROOT/usr/lib/. + ln -sr /usr/lib64 $TORCHROOT/lib64 + ln -s $TORCHROOT/usr/lib ${TORCHROOT}/usr/lib64 +fi + +chown -R root:root /var/lib/tor diff --git a/tor-hardened-preferences/torrc b/tor-hardened-preferences/torrc new file mode 100644 index 0000000..4ca2515 --- /dev/null +++ b/tor-hardened-preferences/torrc @@ -0,0 +1,49 @@ +## Configuration file for an atypical Tor user +## Based on torrc configurations provided by... +# https://gitweb.torproject.org/tor.git/plain/src/config/torrc.sample.in +# https://git-tails.immerda.ch/tails/plain/config/chroot_local-includes/etc/tor/torrc +# https://www.torproject.org/docs/tor-manual.html.en + +## The directory for keeping all the keys/etc. By default, we store +## things in $HOME/.tor on Unix, and in Application Data\tor on Windows. +DataDirectory /var/lib/tor + +# Stream Isolation +## https://tails.boum.org/contribute/design/stream_isolation/ +## https://wiki.gentoo.org/wiki/Tor#Stream_isolation + +## Default SocksPort +SocksPort 127.0.0.1:9050 IsolateDestAddr IsolateDestPort + +## SocksPort for the MUA +SocksPort 127.0.0.1:9061 IsolateDestAddr + +## SocksPort for misc applications +SocksPort 127.0.0.1:9062 IsolateDestAddr IsolateDestPort + +## SocksPort for the default web browser +SocksPort 127.0.0.1:9150 IsolateSOCKSAuth KeepAliveIsolateSOCKSAuth + + +## The port on which Tor will listen for local connections from Tor +## controller applications, as documented in control-spec.txt. +#ControlPort 9051 +#ControlListenAddress 127.0.0.1 + + + +## Torified DNS +DNSPort 127.0.0.1:9053 IsolateClientAddr IsolateSOCKSAuth IsolateClientProtocol IsolateDestPort IsolateDestAddr +AutomapHostsOnResolve 1 +AutomapHostsSuffixes .exit, .onion +#ClientDNSRejectInternalAddresses 1 (Default is already 1) +ClientRejectInternalAddresses 1 + +## Transparent proxy +TransPort 127.0.0.1:9040 IsolateClientAddr IsolateSOCKSAuth IsolateClientProtocol IsolateDestPort IsolateDestAddr + +## Misc +AvoidDiskWrites 1 +Sandbox 1 +ExtraInfoStatistics 0 +EnforceDistinctSubnets 1 diff --git a/tor/0001.patch b/tor/0001.patch new file mode 100644 index 0000000..338cfcb --- /dev/null +++ b/tor/0001.patch @@ -0,0 +1,13 @@ +diff --git a/Makefile.in b/Makefile.in +index 8e1f09e..90bc44f 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -497,7 +497,7 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \ + @LIBFUZZER_ENABLED_TRUE@ src/test/fuzz/lf-fuzz-vrs$(EXEEXT) + PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) + LIBRARIES = $(noinst_LIBRARIES) +-ARFLAGS = cru ++ARFLAGS = crD + AM_V_AR = $(am__v_AR_@AM_V@) + am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) + am__v_AR_0 = @echo " AR " $@; diff --git a/tor/PKGBUILD b/tor/PKGBUILD new file mode 100644 index 0000000..9f74ab4 --- /dev/null +++ b/tor/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgname=tor +pkgver=0.4.5.9 +pkgrel=4 +pkgdesc='Anonymizing overlay network' +arch=('i686' 'x86_64') +url='https://www.torproject.org/' +license=('Modified-BSD') +depends=('libressl' 'libevent' 'bash' 'libseccomp') +optdepends=('torsocks: for torify') +makedepends=('ca-certificates') +backup=('etc/tor/torrc' + 'etc/tor/torrc-dist' + 'etc/conf.d/tor') +install='tor.install' +source=("https://www.torproject.org/dist/${pkgname}-${pkgver}.tar.gz"{,.asc} + '0001.patch' + 'torrc' + 'tor.confd' + 'tor.initd' + 'tor.conf' + 'tor.run') +sha512sums=('b3c3b5cce30c881fb1e705ec6183513f625ddb9d076671b9cd6299e81a410bc12f59a30677636371c336e397211432f0831bdcb2105c9aed8dcb608eae54e2b2' + 'SKIP' + 'b68c24f05dcfa34a9491b2082f06c61571b5bf404e80e383041d5a036e0abf46b4a813bcb507f45220a3f0791d17d8031f8ff86d12555c4b10f14e2bc040e442' + '2da22ea0432c29fa80f98fca4ccb63c735bfe7c4039e7c2630de9d3330b9ba80632af68293aec2b0ff817bd3e28542e1472ef3f1fc5e10db557d6ab810f5674a' + '9028ac41e3acdf4405095addb69537e87edecafaec840296ac27a5a8992fe132dc822e4e4abb8826f76460c438da2719dea17859690d03e17198a82086a3d660' + 'c54004c92874337822cbee7646a685fd79bd4cd793560e0171d2c4fe0cd2f80a73f7acbd7be1ab2baea929314c40d15b90f8157abd0b35bb34af17d027f8cf48' + '41a26c8301864abd2129a50b03f7d7ff482023ad0185bab808c223c54b520e25b7abeb45f4ba340a0f954e984733e6fc61cb6ab7b4907547dca54ced4b363f65' + '9e307895c7c85f5c22538c27d97b2d93b1c3b29ad5964f90a5e69dd132c4e477c137e78742d475b22ad35d4c14e71c219f1ab05da5701a4598d9220767ba5c89') +validpgpkeys=('2133BC600AB133E1D826D173FE43009C4607B1FB' # Nick Mathewson + 'F65CE37F04BA5B360AE6EE17C218525819F78451') # Roger Dingledine + +prepare() { + cd "${pkgname}-${pkgver}" + # Fix issue https://gitlab.torproject.org/tpo/core/tor/-/issues/27309 + patch -p1 -i "${srcdir}/0001.patch" +} + +build() { + cd "${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --enable-lzma \ + --disable-zstd-advanced-apis + make +} + +package() { + cd "${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + install -dm0700 -o 43 -g 43 "${pkgdir}/var/lib/tor" + + mv "${pkgdir}/etc/tor/torrc.sample" "${pkgdir}/etc/tor/torrc-dist" + install -Dm0644 "${srcdir}/torrc" "${pkgdir}/etc/tor/torrc" + + install -Dm0644 "${srcdir}/tor.confd" "${pkgdir}/etc/conf.d/tor" + install -Dm0755 "${srcdir}/tor.initd" "${pkgdir}/etc/init.d/tor" + install -Dm0644 "${srcdir}/tor.conf" "${pkgdir}/etc/sv/tor/conf" + install -Dm0755 "${srcdir}/tor.run" "${pkgdir}/etc/sv/tor/run" + + install -Dm0644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/tor/tor.conf b/tor/tor.conf new file mode 100644 index 0000000..a2ad382 --- /dev/null +++ b/tor/tor.conf @@ -0,0 +1,11 @@ +# Set the file limit +rc_ulimit="-n 30000" + +# Configuration +rc_file="/etc/tor/torrc" + +# Pid-file +pidfile="/var/run/tor/tor.pid" + +# Start options as daemon +tor_opts="-f \"${rc_file}\" --hush --runasdaemon 1 --pidfile \"${pidfile}\"" diff --git a/tor/tor.confd b/tor/tor.confd new file mode 100644 index 0000000..4195bf3 --- /dev/null +++ b/tor/tor.confd @@ -0,0 +1,3 @@ +# +# Set the file limit +rc_ulimit="-n 30000" diff --git a/tor/tor.initd b/tor/tor.initd new file mode 100644 index 0000000..855b9e1 --- /dev/null +++ b/tor/tor.initd @@ -0,0 +1,36 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command=/usr/bin/tor +pidfile=/var/run/tor/tor.pid +command_args="--hush --runasdaemon 1 --pidfile \"${pidfile}\"" +retry=${GRACEFUL_TIMEOUT:-60} +stopsig=INT +command_progress=yes + +extra_commands="checkconfig" +extra_started_commands="reload" +description="Anonymizing overlay network for TCP" +description_checkconfig="Check for valid config file" +description_reload="Reload the configuration" + +checkconfig() { + ${command} --verify-config --hush > /dev/null 2>&1 + if [ $? -ne 0 ] ; then + eerror "Tor configuration (/etc/tor/torrc) is not valid." + return 1 + fi +} + +start_pre() { + checkconfig || return 1 + checkpath -d -m 0755 -o tor:tor /var/run/tor +} + +reload() { + checkconfig || return 1 + ebegin "Reloading Tor configuration" + start-stop-daemon -s HUP --pidfile ${pidfile} + eend $? +} diff --git a/tor/tor.install b/tor/tor.install new file mode 100644 index 0000000..9ab9a82 --- /dev/null +++ b/tor/tor.install @@ -0,0 +1,25 @@ +post_install() { + if ! getent group tor &>/dev/null; then + groupadd -g 43 tor >/dev/null + fi + if ! getent passwd tor &>/dev/null; then + useradd -u 43 -g tor -d /var/lib/tor -s /bin/nologin tor >/dev/null + fi + tor_shell=$(getent passwd tor | cut -d: -f7) + if [ "$tor_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin tor &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd tor &>/dev/null; then + userdel tor >/dev/null + fi + if getent group tor &>/dev/null; then + groupdel tor >/dev/null + fi +} diff --git a/tor/tor.run b/tor/tor.run new file mode 100644 index 0000000..8ced2c5 --- /dev/null +++ b/tor/tor.run @@ -0,0 +1,6 @@ +#!/bin/sh +[ -r ./conf ] && . ./conf +install -o tor -g tor -m 0755 -d /var/run/tor +ulimit ${rc_ulimit} +chpst -U tor:tor tor ${tor_opts} +exec pause diff --git a/tor/torrc b/tor/torrc new file mode 100644 index 0000000..10c05bf --- /dev/null +++ b/tor/torrc @@ -0,0 +1,194 @@ +## Configuration file for a typical Tor user +## Last updated 22 April 2012 for Tor 0.2.3.14-alpha. +## (may or may not work for much older or much newer versions of Tor.) +## +## Lines that begin with "## " try to explain what's going on. Lines +## that begin with just "#" are disabled commands: you can enable them +## by removing the "#" symbol. +## +## See 'man tor', or https://www.torproject.org/docs/tor-manual.html, +## for more options you can use in this file. +## +## Tor will look for this file in various places based on your platform: +## https://www.torproject.org/docs/faq#torrc + +## Default username and group the server will run as +User tor + +PIDFile /var/run/tor/tor.pid + +## Tor opens a socks proxy on port 9050 by default -- even if you don't +## configure one below. Set "SocksPort 0" if you plan to run Tor only +## as a relay, and not make any local application connections yourself. +#SocksPort 9050 # Default: Bind to localhost:9050 for local connections. +#SocksPort 192.168.0.1:9100 # Bind to this adddress:port too. + +## Entry policies to allow/deny SOCKS requests based on IP address. +## First entry that matches wins. If no SocksPolicy is set, we accept +## all (and only) requests that reach a SocksPort. Untrusted users who +## can access your SocksPort may be able to learn about the connections +## you make. +#SocksPolicy accept 192.168.0.0/16 +#SocksPolicy reject * + +## Logs go to stdout at level "notice" unless redirected by something +## else, like one of the below lines. You can have as many Log lines as +## you want. +## +## We advise using "notice" in most cases, since anything more verbose +## may provide sensitive information to an attacker who obtains the logs. +## +## Send all messages of level 'notice' or higher to /var/log/tor/notices.log +#Log notice file /var/log/tor/notices.log +## Send every possible message to /var/log/tor/debug.log +#Log debug file /var/log/tor/debug.log +## Use the system log instead of Tor's logfiles +#Log notice syslog +## To send all messages to stderr: +#Log debug stderr +Log warn syslog + +## Uncomment this to start the process in the background... or use +## --runasdaemon 1 on the command line. This is ignored on Windows; +## see the FAQ entry if you want Tor to run as an NT service. +#RunAsDaemon 1 + +## The directory for keeping all the keys/etc. By default, we store +## things in $HOME/.tor on Unix, and in Application Data\tor on Windows. +DataDirectory /var/lib/tor + +## The port on which Tor will listen for local connections from Tor +## controller applications, as documented in control-spec.txt. +#ControlPort 9051 +## If you enable the controlport, be sure to enable one of these +## authentication methods, to prevent attackers from accessing it. +#HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C +#CookieAuthentication 1 + +############### This section is just for location-hidden services ### + +## Once you have configured a hidden service, you can look at the +## contents of the file ".../hidden_service/hostname" for the address +## to tell people. +## +## HiddenServicePort x y:z says to redirect requests on port x to the +## address y:z. + +#HiddenServiceDir /var/lib/tor/hidden_service/ +#HiddenServicePort 80 127.0.0.1:80 + +#HiddenServiceDir /var/lib/tor/other_hidden_service/ +#HiddenServicePort 80 127.0.0.1:80 +#HiddenServicePort 22 127.0.0.1:22 + +################ This section is just for relays ##################### +# +## See https://www.torproject.org/docs/tor-doc-relay for details. + +## Required: what port to advertise for incoming Tor connections. +#ORPort 9001 +## If you want to listen on a port other than the one advertised in +## ORPort (e.g. to advertise 443 but bind to 9090), you can do it as +## follows. You'll need to do ipchains or other port forwarding +## yourself to make this work. +#ORPort 443 NoListen +#ORPort 127.0.0.1:9090 NoAdvertise + +## The IP address or full DNS name for incoming connections to your +## relay. Leave commented out and Tor will guess. +#Address noname.example.com + +## If you have multiple network interfaces, you can specify one for +## outgoing traffic to use. +# OutboundBindAddress 10.0.0.5 + +## A handle for your relay, so people don't have to refer to it by key. +#Nickname ididnteditheconfig + +## Define these to limit how much relayed traffic you will allow. Your +## own traffic is still unthrottled. Note that RelayBandwidthRate must +## be at least 20 KB. +## Note that units for these config options are bytes per second, not bits +## per second, and that prefixes are binary prefixes, i.e. 2^10, 2^20, etc. +#RelayBandwidthRate 100 KB # Throttle traffic to 100KB/s (800Kbps) +#RelayBandwidthBurst 200 KB # But allow bursts up to 200KB/s (1600Kbps) + +## Use these to restrict the maximum traffic per day, week, or month. +## Note that this threshold applies separately to sent and received bytes, +## not to their sum: setting "4 GB" may allow up to 8 GB total before +## hibernating. +## +## Set a maximum of 4 gigabytes each way per period. +#AccountingMax 4 GB +## Each period starts daily at midnight (AccountingMax is per day) +#AccountingStart day 00:00 +## Each period starts on the 3rd of the month at 15:00 (AccountingMax +## is per month) +#AccountingStart month 3 15:00 + +## Contact info to be published in the directory, so we can contact you +## if your relay is misconfigured or something else goes wrong. Google +## indexes this, so spammers might also collect it. +#ContactInfo Random Person +## You might also include your PGP or GPG fingerprint if you have one: +#ContactInfo 0xFFFFFFFF Random Person + +## Uncomment this to mirror directory information for others. Please do +## if you have enough bandwidth. +#DirPort 9030 # what port to advertise for directory connections +## If you want to listen on a port other than the one advertised in +## DirPort (e.g. to advertise 80 but bind to 9091), you can do it as +## follows. below too. You'll need to do ipchains or other port +## forwarding yourself to make this work. +#DirPort 80 NoListen +#DirPort 127.0.0.1:9091 NoAdvertise +## Uncomment to return an arbitrary blob of html on your DirPort. Now you +## can explain what Tor is if anybody wonders why your IP address is +## contacting them. See contrib/tor-exit-notice.html in Tor's source +## distribution for a sample. +#DirPortFrontPage /etc/tor/tor-exit-notice.html + +## Uncomment this if you run more than one Tor relay, and add the identity +## key fingerprint of each Tor relay you control, even if they're on +## different networks. You declare it here so Tor clients can avoid +## using more than one of your relays in a single circuit. See +## https://www.torproject.org/docs/faq#MultipleRelays +## However, you should never include a bridge's fingerprint here, as it would +## break its concealability and potentionally reveal its IP/TCP address. +#MyFamily $keyid,$keyid,... + +## A comma-separated list of exit policies. They're considered first +## to last, and the first match wins. If you want to _replace_ +## the default exit policy, end this with either a reject *:* or an +## accept *:*. Otherwise, you're _augmenting_ (prepending to) the +## default exit policy. Leave commented to just use the default, which is +## described in the man page or at +## https://www.torproject.org/documentation.html +## +## Look at https://www.torproject.org/faq-abuse.html#TypicalAbuses +## for issues you might encounter if you use the default exit policy. +## +## If certain IPs and ports are blocked externally, e.g. by your firewall, +## you should update your exit policy to reflect this -- otherwise Tor +## users will be told that those destinations are down. +## +## For security, by default Tor rejects connections to private (local) +## networks, including to your public IP address. See the man page entry +## for ExitPolicyRejectPrivate if you want to allow "exit enclaving". +## +#ExitPolicy accept *:6660-6667,reject *:* # allow irc ports but no more +#ExitPolicy accept *:119 # accept nntp as well as default exit policy +#ExitPolicy reject *:* # no exits allowed + +## Bridge relays (or "bridges") are Tor relays that aren't listed in the +## main directory. Since there is no complete public list of them, even an +## ISP that filters connections to all the known Tor relays probably +## won't be able to block all the bridges. Also, websites won't treat you +## differently because they won't know you're running Tor. If you can +## be a real relay, please do; but if not, be a bridge! +#BridgeRelay 1 +## By default, Tor will advertise your bridge to users through various +## mechanisms like https://bridges.torproject.org/. If you want to run +## a private bridge, for example because you'll give out your bridge +## address manually to your friends, uncomment this line: +#PublishServerDescriptor 0 diff --git a/torcs/PKGBUILD b/torcs/PKGBUILD new file mode 100644 index 0000000..0cf8a6c --- /dev/null +++ b/torcs/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=torcs +_pkgname=$pkgname-libre +pkgver=1.3.7 +_debver=$pkgver +_debrel=5 +pkgrel=3 +pkgdesc="A free and libre 3D racing cars simulator" +url='https://torcs.sourceforge.net' +arch=('i686' 'x86_64') +license=('LGPL-2' 'GPL-2' 'FDL-1.2' 'FAL-1.3') +provides=('torcs' 'torcs-data') +conflicts=('torcs' 'torcs-data') +depends=('freeglut' 'libpng' 'freealut' 'libxi' 'libxmu' 'libxrandr' 'libvorbis' 'glu') +makedepends=('plib' 'mesa' 'quilt') +groups=('games') +options=('!makeflags') +mksource=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver/_/-}.tar.bz2") +source=("https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}-${pkgver}.tar.bz2"{,.sig} + "https://deb.debian.org/debian/pool/main/t/torcs/torcs_${_debver}+dfsg-${_debrel}.debian.tar.xz") +mksha512sums=('14b88624803c746b2f356fa185aca5be56b7d7e5192fede11307474100328bfaa67eafa61e84987bbad04590ae5740127e015707723df6d2c3197bb867818101') +sha512sums=('6d4f93c503a5ac423e349a337246242eda76f0e9be8322b34cc95826c18bd4eafec66329ad41ce098f3b5ebd9f96c5904af72494693e0b06cd0896d36091fbc8' + 'SKIP' + '35a984f0b39f2b68c0d532fc894f42c202feba1d0ac26861c0ee7ebbdbbb8cf31c79b0f4e6be6427e6e9cd0294ee847dc3d3301774ffd5e7ffd1163ca0027dc7') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + cd "$srcdir"/$pkgname-${pkgver/_/-} + + # remove non-free car models + rm -r -v data/cars/models/pw-* data/cars/models/kc-* + + # remove useless stuff + find -depth -type d -name 'windows' -exec rm -r {} \; -printf 'removed %p\n' + find -depth -type d -name 'CVS' -exec rm -r {} \; -printf 'removed %p\n' +} + +prepare() { + cd "$srcdir"/$pkgname-${pkgver/_/-} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/$pkgname-${pkgver/_/-} + unset LDFLAGS + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --x-includes=/usr/include \ + --x-libraries=/usr/lib/games + make +} + +package() { + cd "$srcdir"/$pkgname-${pkgver/_/-} + make DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" datainstall + install -D -m644 Ticon.png "$pkgdir"/usr/share/pixmaps/torcs.png + install -D -m644 torcs.desktop "$pkgdir"/usr/share/applications/torcs.desktop + find "$pkgdir" -type d -exec chmod 755 {} \; + install -Dm644 COPYING debian/copyright -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/torsocks/PKGBUILD b/torsocks/PKGBUILD new file mode 100644 index 0000000..62335ee --- /dev/null +++ b/torsocks/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=torsocks +pkgver=2.3.0 +_debver=2.3.0 +_debrel=3 +pkgrel=1 +pkgdesc='Wrapper to safely torify applications' +arch=('i686' 'x86_64') +url='https://gitweb.torproject.org/torsocks.git/' +license=('GPL-2') +depends=('tor') +makedepends=('gettext-tiny' 'quilt') +backup=("etc/tor/${pkgname}.conf") +source=("https://people.torproject.org/~dgoulet/${pkgname}/${pkgname}-${pkgver}.tar.xz"{,.asc} + "https://deb.debian.org/debian/pool/main/t/torsocks/torsocks_${_debver}-${_debrel}.debian.tar.xz") +validpgpkeys=('B74417EDDF22AC9F9E90F49142E86A2A11F48D36') +sha512sums=('4888caaffdcfebf3673e14f3491eae6aa84ca0a4a2a812ba7bdac2abb471307e89a3c5cffe7691fb6f190c7bd9ea455ee9a223d909a39152be8524f590be2031' + 'SKIP' + 'd2c51c6fa0932f5cd1e58ecf5806e36a3e8b6e50d356761b8157227aec347dca3a4cf7f08aa9f5475e3c2321a893b573693797d74cbca7cde3a045f621fcb04b') + +prepare() { + cd "${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +check() { + cd "${pkgname}-${pkgver}" + + make -j1 -k check +} + +package() { + cd "${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install + + install -Dm644 gpl-2.0.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/totem-pl-parser/PKGBUILD b/totem-pl-parser/PKGBUILD new file mode 100644 index 0000000..eba3b80 --- /dev/null +++ b/totem-pl-parser/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=totem-pl-parser +pkgver=3.26.5 +_debver=$pkgver +_debrel=5 +pkgrel=1 +pkgdesc="Simple GObject-based library to parse and save a host of playlist formats" +url='https://gitlab.gnome.org/GNOME/totem-pl-parser' +license=('LGPL-2') +arch=('i686' 'x86_64') +depends=('libarchive' 'libxml2') +makedepends=('gobject-introspection' 'meson' 'quilt') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/t/totem-pl-parser/totem-pl-parser_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/t/totem-pl-parser/totem-pl-parser_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ce110d92f60da328272a8135a57ba60785ea4bca1fde3703a734969e7ba5b382ef19dc3b8930a5641d8f8effabf627f7e9b2727ee94e69e6144e0f085079e14d' + 'b6e3f4e8b6e208e1c850e6ea55ae6623be3dd15617259f15f39476fe6b0063a43bbfb292083c98356ae51fde1594fbe293dc6bb6933030f49bb272fbaddf3ac5') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + # we won't and don't support AmazonAMZ, so disabling libgcrypt + hyperbola-meson $pkgname-$pkgver build -D enable-gtk-doc=false -D enable-libgcrypt=no + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dm644 $pkgname-$pkgver/COPYING.LIB -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/toxcore/PKGBUILD b/toxcore/PKGBUILD new file mode 100644 index 0000000..fe766cd --- /dev/null +++ b/toxcore/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=toxcore +epoch=1 +pkgver=0.2.19 +pkgrel=2 +pkgdesc="Secure, configuration-free, P2P communication backend" +arch=('i686' 'x86_64') +url='https://tox.chat' +license=('GPL-3') +depends=('libconfig' 'libsodium') +makedepends=('check' 'cmake') +conflicts=('tox') +provides=('tox') +backup=('etc/tox-bootstrapd.conf' + 'etc/conf.d/tox-bootstrapd') +install=$pkgname.install +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig} + "tox-bootstrapd.confd" + "tox-bootstrapd.initd" + "tox-bootstrapd.run" + "tox-bootstrapd.conf") +sha512sums=('23daa1557dce7b52e856914d763de425d7cd751b8c2ac8002c907c1e26e17732ee168a3a757e23aa5bd29bce890f4ded6071bc946d8d18657845322cba75bba8' + 'SKIP' + '86c7245e8910ee34e8c07af465e9dd1dfe60a608d7b684d572511da84a5e7a7739bacb2cf7deb1f059640d937aed844f4b0b1f89bc86d6b623eb49276e2a7048' + '01e564d9e056b55e68586630cb5af5875c9ad02cde74610d85ea2c23673a4b9fd2b6fe206f25e9c625d63dc41fa56f6360de9191ba46851b88d090cce0ea34ad' + 'cc5ed3e46c2a1691ffd5147e2009c61df5e6de045c029e9a55b9e937ff4c4e5ce03ce19d1f4ae7cbb38fb1d5e36af920cbb0266f7715064ee631d08bdf94934e' + '86c7245e8910ee34e8c07af465e9dd1dfe60a608d7b684d572511da84a5e7a7739bacb2cf7deb1f059640d937aed844f4b0b1f89bc86d6b623eb49276e2a7048') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd $pkgname-$pkgver + sed -i "/Rpath/d;/RPATH/d" CMakeLists.txt +} + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DDHT_BOOTSTRAP=on \ + -DBOOTSTRAP_DAEMON=on \ + -DBUILD_TOXAV=off + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + install -Dm644 "$srcdir/tox-bootstrapd.confd" "$pkgdir/etc/conf.d/tox-bootstrapd" + install -Dm755 "$srcdir/tox-bootstrapd.initd" "$pkgdir/etc/init.d/tox-bootstrapd" + install -Dm755 "$srcdir/tox-bootstrapd.run" "$pkgdir/etc/sv/tox-bootstrapd/run" + install -Dm644 "$srcdir/tox-bootstrapd.conf" "$pkgdir/etc/sv/tox-bootstrapd/conf" + + install -Dm644 "$srcdir/$pkgname-$pkgver/other/bootstrap_daemon/tox-bootstrapd.conf" "$pkgdir/etc/tox-bootstrapd.conf" + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/toxcore/tox-bootstrapd.conf b/toxcore/tox-bootstrapd.conf new file mode 100644 index 0000000..d4d9e7a --- /dev/null +++ b/toxcore/tox-bootstrapd.conf @@ -0,0 +1,2 @@ +TOX_GROUP=tox-bootstrapd +TOX_USER=tox-bootstrapd diff --git a/toxcore/tox-bootstrapd.confd b/toxcore/tox-bootstrapd.confd new file mode 100644 index 0000000..d4d9e7a --- /dev/null +++ b/toxcore/tox-bootstrapd.confd @@ -0,0 +1,2 @@ +TOX_GROUP=tox-bootstrapd +TOX_USER=tox-bootstrapd diff --git a/toxcore/tox-bootstrapd.initd b/toxcore/tox-bootstrapd.initd new file mode 100644 index 0000000..f08c594 --- /dev/null +++ b/toxcore/tox-bootstrapd.initd @@ -0,0 +1,30 @@ +#!/sbin/openrc-run + +PIDDIR=/run/tox-bootstrapd +PIDFILE="${PIDDIR}"/tox-bootstrap.pid + +depend() { + need net +} + +start() { + ebegin "Starting tox-dht-bootstrap daemon" + + checkpath -d -q -o "${TOX_USER}":"${TOX_GROUP}" "${PIDDIR}" + + start-stop-daemon --start \ + --pidfile "${PIDFILE}" \ + --user="${TOX_USER}" --group="${TOX_GROUP}" \ + --exec /usr/bin/tox-bootstrapd -- /etc/tox-bootstrapd.conf + + eend $? +} + +stop() { + ebegin "Stopping tox-dht-bootstrap daemon" + + start-stop-daemon --stop \ + --pidfile "${PIDFILE}" + + eend $? +} diff --git a/toxcore/tox-bootstrapd.run b/toxcore/tox-bootstrapd.run new file mode 100755 index 0000000..6b33dd4 --- /dev/null +++ b/toxcore/tox-bootstrapd.run @@ -0,0 +1,4 @@ +#!/bin/sh +[ -r conf ] && . ./conf +install -d -m0755 -o tox-bootstrapd -g tox-bootstrapd /run/tox-bootstrapd +exec chpst -U ${TOX_USER}:${TOX_GROUP} tox-bootstrapd --foreground --config /etc/tox-bootstrapd.conf 2>&1 diff --git a/toxcore/toxcore.install b/toxcore/toxcore.install new file mode 100644 index 0000000..0fa0764 --- /dev/null +++ b/toxcore/toxcore.install @@ -0,0 +1,28 @@ +post_install() { + if ! getent group tox-bootstrapd &>/dev/null; then + groupadd -g 199 tox-bootstrapd >/dev/null + fi + if ! getent passwd tox-bootstrapd &>/dev/null; then + useradd -u 199 -g tox-bootstrapd -d /var/lib/tox-bootstrapd -s /bin/nologin -c "Tox bootstrapd" tox-bootstrapd >/dev/null + fi + if [[ ! -d /var/lib/tox-bootstrapd ]]; then + install -dm750 -o 199 -g 199 /var/lib/tox-bootstrapd + fi + tox_bootstrapd_shell=$(getent passwd tox-bootstrapd | cut -d: -f7) + if [ "$tox_bootstrapd_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin tox-bootstrapd &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd tox-bootstrapd &>/dev/null; then + userdel tox-bootstrapd >/dev/null + fi + if getent group tox-bootstrapd &>/dev/null; then + groupdel tox-bootstrapd >/dev/null + fi +} diff --git a/toxic/PKGBUILD b/toxic/PKGBUILD new file mode 100644 index 0000000..6b0e45f --- /dev/null +++ b/toxic/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=toxic +pkgver=0.16.0 +pkgrel=1 +pkgdesc="Commandline Tox client" +arch=('i686' 'x86_64') +url='https://github.com/JFreegman/toxic' +license=('GPL-3') +depends=('curl' 'qrencode' 'libx11' 'toxcore') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/JFreegman/toxic/archive/refs/tags/v${pkgver}.tar.gz" + "$pkgname.png" + "libre.patch") +sha512sums=('94e8c61bff56533f384367270b5b946727e7cb6a3f928b312c47578b104a881fd344af829bbf4712a79ef65526ba75c84c335ef31685e97b4a7b03b96bd642b2' + '8ad6412bcfac81c797dfbfe9a10ed2e3ba8034fb3866838c344e7a73bd55146183ac91ceb11ced5b3eb254e0e8a6d0ae084767c41c0059da9bd83bf6d184c622' + 'a22031d0d8147139b23253a13fc2c059500e23242110b3ecade262ccf2d8da33346b7b6867117b205f3b8ba80d6a9363b6c96f8daeee2ec7804631542139a365') + +prepare() { + cd "$pkgname-$pkgver" + patch -Np1 -i ${srcdir}/libre.patch + sed -i -e 's/Icon=utilities-terminal/Icon=toxic/g' \ + misc/toxic.desktop +} + +build() { + cd "$pkgname-$pkgver" + make PREFIX="/usr" \ + USER_LDFLAGS="-lpthread" \ + DISABLE_GAMES=1 \ + DISABLE_AV=1 \ + DISABLE_SOUND_NOTIFY=1 \ + DISABLE_DESKTOP_NOTIFY=1 \ + ENABLE_RELEASE=1 +} + +package() { + cd "$pkgname-$pkgver" + make PREFIX="/usr" DESTDIR="$pkgdir" USER_LDFLAGS="-lpthread" install + rm -rf $pkgdir/usr/share/$pkgname/sounds/ + install -Dm644 $srcdir/$pkgname.png -t $pkgdir/usr/share/pixmaps/ + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/toxic/libre.patch b/toxic/libre.patch new file mode 100644 index 0000000..e5df6bf --- /dev/null +++ b/toxic/libre.patch @@ -0,0 +1,31 @@ +--- a/src/prompt.c 2024-03-29 19:32:19.000000000 +0100 ++++ b/src/prompt.c 2024-12-23 02:55:12.680212347 +0100 +@@ -638,7 +638,7 @@ + line_info_add(self, c_config, false, NULL, NULL, SYS_MSG, 1, BLUE, + " |_| \\___/_/\\_\\___\\____| v.%s\n", TOXICVER); + line_info_add(self, c_config, false, NULL, NULL, SYS_MSG, 1, CYAN, +- "Welcome to Toxic, a free, open source Tox-based instant messaging client."); ++ "Welcome to Toxic, a free, libre Tox-based instant messaging client."); + line_info_add(self, c_config, false, NULL, NULL, SYS_MSG, 1, CYAN, + "Type \"/help\" for assistance. Further help may be found via the man page.\n"); + } +--- a/test/__snapshots__/toxic.test.ts.snap 2024-03-29 19:32:19.000000000 +0100 ++++ b/test/__snapshots__/toxic.test.ts.snap 2024-12-23 02:56:55.060330291 +0100 +@@ -39,7 +39,7 @@ + │ | || |_| / \ | | |___ │ + │ |_| \___/_/\_\___\____| v.0.14.1 │ + │ │ +-│Welcome to Toxic, a free, open source Tox-based instant messaging client. │ ++│Welcome to Toxic, a free, libre Tox-based instant messaging client. │ + │Type "/help" for assistance. Further help may be found via the man page. │ + │ │ + │Avatar has been unset. │ +@@ -154,7 +154,7 @@ + │ | || |_| / \ | | |___ │ + │ |_| \___/_/\_\___\____| v.0.14.1 │ + │ │ +-│Welcome to Toxic, a free, open source Tox-based instant messaging client. │ ++│Welcome to Toxic, a free, libre Tox-based instant messaging client. │ + │Type "/help" for assistance. Further help may be found via the man page. │ + │ │ + │Avatar has been unset. │ diff --git a/toxic/toxic.png b/toxic/toxic.png new file mode 100644 index 0000000000000000000000000000000000000000..a790ae173b3c955d4af625081c4aada886478861 GIT binary patch literal 2595 zcmX|Dc{tQ-8-9OdCNl;xob3Bh6HzKl_N`{J?~)ixb!^RK8$y0eLNZ38s8F&CC84B= zLZ=cXWu1{6Bn)+!uhH?1?~m`juIIh4=f3afpZB_+`+BonoQ{Zz$cq2~#7IP2Hvz(1 zh2AE(yUhb%3ji5yP4YksP7*pKQ_y3m#ADF_Z2P`dkaDciK>;ZjW9Jj&PB|4r3yeAm zXf&E`=$Y{7;6Un0T}ssH8%w70g26J9t(8ao=;Eyes-w4JZ_TgrMUPLLhd#u4;4^)! z)p29lpNp$?^d#;5vwVFeH4D{W6b4yKs-ZnKE}^FicG%RH4|~bwR1A|o?D7rDA^zgO z?J!(Eh+pl0Iy)Y{%>TVo^lI;q$>dpn`+7;@lJPV5x;uC76uPeP`pOLkq-CLcC=RNE z)yqVyn^IF`gsM^}SiWTG0Y!`MzQ~Xl0~W}OkOHjWq}CjT?L&2fZ~0(#8yn}d-PBX< zXD#d9B$6j!kQ78*l<3plYlsOFSWKe;#rLYbzixsK61YEg9L8a~T7Lk(5*}=F*iHWo zXyZ|QVM;#OIFxWrQ=Hv@kd=#cF-&siREi6Xx&FUU=g^yGoLWX#t2;W$60r-r={Pp$ zm+nLWlbX=yt`w9}*)(@i5%Sl7{A5&fY-DHl6u0p9?^WeGT){pLO2JD9uc9o%3{caUo~z>y5C^ z@?es8VqBWJCfbqT*Q^#(Mmm%E)M1V`9XAzejlx)y;BVcHKU&{xtrHvRX>?5Wni`uQ zy8XemC#y1+2r__`&gu7W`)DMJ*+?NshWwTqW2EWsQEiLX0%e+jE}x>#&(s% zhM_}Wb?HEeBp8x95y>LEa|7>nw+fYCNR&ffCnAiHL|O~9GQ-e8Tvpm22hqVi9=3rM zy%ng>H&E^&lJI>Mrj5WxP56@WG0c%^2S-{&*pnqV0K<{sq}7SV{~rD4`~x)H+oj4v z;aF;xStY2pn0ef5`+D3~n_fbJ6rv5zzgkrw0u-We2y@dcd`%Q**#xpQa1{xn4h}>= zYXo{nSumf`ds4E@Iigf?OD$0@aqcg*pyXM>$`gs-wIC!GzD$(OBhW!xC5#-fgex73 zCp)8Nj;7p0{kimELl0*u1TizY=(@tG*_j#52g)XxvNT|%V3ZvAE94$Bb3vxH5INui z_^XZS*d1Z&R^ja7YebNPYO>!;S?Z`!?+(ao3F^2KtOa>Uv*Jv4Ez6BY3pdQ?x34=R zs5q9m!{B3jdGyPdFO%cbb6XWFdP!S!!X)_Utrhf-koV zv$;o=jef2nv1I1=b)|#re!8-<){;dAj8z|v-hBD$LPCD(6yO+1KFL>3q8$3Cjb zpFe#I%d|#(=C1#+XboApLTc#$b*wYuKgepEcm{IdK4=R>I&D(oFXe7T}dJC!d2H&P4y*6Qlems+w&;8ox}7gH_ngvbQDX)4oC z<%v6UGnWXKt9QR1uo`>G1o{kaR<%+l-R_X=z8DLLy32d0mb{^hv(%@W23!Ta6L>g; zW3S|j;L!5G0}L=p#Y%zBY$Q|EZ=3E>@INPc`?LLsb*!lkg1D`IBJoYLdZyBN_0cb} zX-j4j_#mlQ?V-_CgO*GN)^t~e%@gsRM3D7dsbf4z_VZH|_ssX-dbzv5*xA`7-#8c< zM@J6K`=(S>d&*uyO0>1nN5H;%0e@iw3!^{vt5Q$yb=`DE8 z6rmWUJAOtGe_K-5pV2Wdhz1i5VeCO4WfrfjidGxW@vCE~p`(HEY5c(~_e zz{Bx_Lt!miOdzix`R(B`-(>~G0WFRWrVMI3`%t_4Nr$Xi*iUsq-ZaJKiXQKs4sykq z(0gRS!djmyNb}afS?>K%uZ@|dQJ;q**{N=Bsy9wuK*F;6NIotloFF7 z5v8d+V?7C@$M2_(7&P4ImvMM3^rLxQXtr^L=YETrlZa8e(F yMiFf_h~f9fV$wp+gadY_k0xe&g(kyJt*MA|OVG5r^&Nr_9U$2`*)~{{)BXztB7!pj literal 0 HcmV?d00001 diff --git a/trackballs/PKGBUILD b/trackballs/PKGBUILD new file mode 100644 index 0000000..90b4f74 --- /dev/null +++ b/trackballs/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=trackballs +pkgver=1.3.2 +pkgrel=2 +pkgdesc="Free and libre game where you guide a marble through a maze and avoid obstacles" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://trackballs.github.io/' +depends=('guile' 'sdl2_ttf' 'sdl2_image' 'sdl2_mixer' 'hicolor-icon-theme' 'gettext-tiny') +makedepends=('cmake') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/trackballs/trackballs/archive/v${pkgver}.tar.gz" + "find_guile.patch" + "${pkgname}.desktop") +sha512sums=('489b93cdf0e7941ffff545bfdafd665d2555a5367a282562bdcba3e1405d16110c84691117e0aa9f2c2561617c2a0bde82f186a972a1eaf53afa3405b02d4819' + '17a936d1d12eba850757d0e63a4a9457e1cdd5f73e3312b9cbaeecb35a17524775e04afb2b3f2650e117125c6c9036f622bc98c628d8c4942c4abaf54822375f' + 'a6802bfe09c2a0a1c25f10ce6c3eac600a3e819716811d0a578c0458856d6bb63df181432c3bef69e5fc66d2dbdf9a784ff1ee6580f0010b3f46a71105156fa7') + +prepare() { + cd ${srcdir}/$pkgname-$pkgver + patch -p1 -i "${srcdir}/find_guile.patch" +} + +build() { + cmake -B build \ + -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DTRACKBALLS_BIN_DIR=/usr/games \ + -DTRACKBALLS_SHARE_DIR=/usr/share/games/$pkgname + make -C build +} + +package() { + make -C build DESTDIR=${pkgdir} install + + rm -rf "${pkgdir}/usr/share/applications" + install -Dm644 "${srcdir}/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications" + + install -Dm644 $pkgname-$pkgver/COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/trackballs/find_guile.patch b/trackballs/find_guile.patch new file mode 100644 index 0000000..0849531 --- /dev/null +++ b/trackballs/find_guile.patch @@ -0,0 +1,95 @@ +diff --git a/cmake/FindGuile.cmake b/cmake/FindGuile.cmake +index 844e817..46ef61b 100644 +--- a/cmake/FindGuile.cmake ++++ b/cmake/FindGuile.cmake +@@ -1,36 +1,71 @@ +-# Locate Guile. ++# Locate Guile. + # Note: `guile-config` ultimately calls pkg-config anyway + # Nothing gets marked `advanced` since there aren't that many variables + +-find_program(GUILE_SNARF NAMES guile-snarf guile-snarf3.0 guile-snarf2.2 guile-snarf2.0) ++# Use PkgConfig when possible to find the version of guile which is available, ++# and then use its results as hints toward the actual library/include paths + +-# PkgConfig is only there to provide hints + find_package(PkgConfig) +-pkg_check_modules(PC_GUILE QUIET guile) ++pkg_check_modules(PC_GUILE QUIET guile-3.0) ++if (PC_GUILE_FOUND) ++ find_program(GUILE_SNARF NAMES guile-snarf3.0 guile-snarf) ++ find_path(GUILE_INCLUDE_DIR libguile.h ++ HINTS ${PC_GUILE_INCLUDEDIR} ${PC_GUILE_INCLUDE_DIRS} ++ PATH_SUFFIXES guile/3.0 guile) ++ find_library(GUILE_LIBRARY NAMES guile-3.0 guile ++ HINTS ${PC_GUILE_LIBDIR} ${PC_GUILE_LIBRARY_DIRS} ) ++endif(PC_GUILE_FOUND) ++ + if (NOT PC_GUILE_FOUND) +- pkg_check_modules(PC_GUILE QUIET guile-3.0) +- if (NOT PC_GUILE_FOUND) + pkg_check_modules(PC_GUILE QUIET guile-2.2) +- if (NOT PC_GUILE_FOUND) +- pkg_check_modules(PC_GUILE QUIET guile-2.0) +- endif(NOT PC_GUILE_FOUND) +- endif(NOT PC_GUILE_FOUND) ++ if (PC_GUILE_FOUND) ++ find_program(GUILE_SNARF NAMES guile-snarf2.2 guile-snarf) ++ find_path(GUILE_INCLUDE_DIR libguile.h ++ HINTS ${PC_GUILE_INCLUDEDIR} ${PC_GUILE_INCLUDE_DIRS} ++ PATH_SUFFIXES guile/2.2 guile) ++ find_library(GUILE_LIBRARY NAMES guile-2.2 guile ++ HINTS ${PC_GUILE_LIBDIR} ${PC_GUILE_LIBRARY_DIRS} ) ++ endif(PC_GUILE_FOUND) + endif(NOT PC_GUILE_FOUND) + ++if (NOT PC_GUILE_FOUND) ++ pkg_check_modules(PC_GUILE QUIET guile-2.0) ++ if (PC_GUILE_FOUND) ++ find_program(GUILE_SNARF NAMES guile-snarf2.0 guile-snarf) ++ find_path(GUILE_INCLUDE_DIR libguile.h ++ HINTS ${PC_GUILE_INCLUDEDIR} ${PC_GUILE_INCLUDE_DIRS} ++ PATH_SUFFIXES guile/2.0 guile) ++ find_library(GUILE_LIBRARY NAMES guile-2.0 guile ++ HINTS ${PC_GUILE_LIBDIR} ${PC_GUILE_LIBRARY_DIRS} ) ++ endif(PC_GUILE_FOUND) ++endif(NOT PC_GUILE_FOUND) + +-set(GUILE_DEFINITIONS ${PC_GUILE_CFLAGS_OTHER}) ++if (NOT PC_GUILE_FOUND) ++ pkg_check_modules(PC_GUILE QUIET guile) ++ if (PC_GUILE_FOUND) ++ find_program(GUILE_SNARF NAMES guile-snarf) ++ find_path(GUILE_INCLUDE_DIR libguile.h ++ HINTS ${PC_GUILE_INCLUDEDIR} ${PC_GUILE_INCLUDE_DIRS} ++ PATH_SUFFIXES guile) ++ find_library(GUILE_LIBRARY NAMES guile ++ HINTS ${PC_GUILE_LIBDIR} ${PC_GUILE_LIBRARY_DIRS} ) ++ endif(PC_GUILE_FOUND) ++endif(NOT PC_GUILE_FOUND) + +-find_path(GUILE_INCLUDE_DIR libguile.h +- HINTS ${PC_GUILE_INCLUDEDIR} ${PC_GUILE_INCLUDE_DIRS} +- PATH_SUFFIXES guile guile/3.0 guile/2.2 guile/2.0) ++if (NOT PC_GUILE_FOUND) ++ find_program(GUILE_SNARF NAMES ++ guile-snarf3.0 guile-snarf2.2 guile-snarf2.0 guile-snarf) ++ find_path(GUILE_INCLUDE_DIR libguile.h ++ PATH_SUFFIXES guile/3.0 guile/2.2 guile/2.0 guile) ++ find_library(GUILE_LIBRARY NAMES guile-3.0 guile-2.2 guile-2.0 guile) ++endif(NOT PC_GUILE_FOUND) + +-find_library(GUILE_LIBRARY NAMES guile guile-3.0 guile-2.2 guile-2.0 +- HINTS ${PC_GUILE_LIBDIR} ${PC_GUILE_LIBRARY_DIRS} ) ++set(GUILE_DEFINITIONS ${PC_GUILE_CFLAGS_OTHER}) + + include(FindPackageHandleStandardArgs) +-find_package_handle_standard_args(Guile REQUIRED_VARS +- GUILE_LIBRARY GUILE_INCLUDE_DIR +- VERSION_VAR PC_GUILE_VERSION) ++find_package_handle_standard_args(Guile ++ REQUIRED_VARS GUILE_LIBRARY GUILE_INCLUDE_DIR ++ VERSION_VAR PC_GUILE_VERSION) + + set(GUILE_LIBRARIES ${GUILE_LIBRARY} ) + set(GUILE_INCLUDE_DIRS ${GUILE_INCLUDE_DIR} ) diff --git a/trackballs/trackballs.desktop b/trackballs/trackballs.desktop new file mode 100644 index 0000000..17ae2e8 --- /dev/null +++ b/trackballs/trackballs.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Trackballs +Comment=Guide a marble through a maze and avoid obstacles +Comment[de]=FĂĽhre eine Murmel durch ein Labyrinth und weiche Hindernissen aus +Exec=trackballs +Icon=trackballs +Type=Application +Categories=Game;ArcadeGame; +Keywords=marble;maze;obstacle; diff --git a/transcode/PKGBUILD b/transcode/PKGBUILD new file mode 100644 index 0000000..3bd957f --- /dev/null +++ b/transcode/PKGBUILD @@ -0,0 +1,105 @@ +# Maintainer: Jesus E. + +pkgname=transcode +pkgver=1.1.7 +_debver=$pkgver +_debrel=9 +pkgrel=2 +pkgdesc="A video/DVD ripper and encoder for the terminal/console" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('gawk' 'lzo' 'libdvdread' 'ffmpeg' 'mjpegtools' 'sdl' 'libmpeg2' 'libxaw' 'a52dec' 'libsndio' 'libquicktime') +makedepends=('nasm' 'x264' 'quilt') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}-${pkgver}.tar.bz2"{,.sig} + "https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz"{,.sig} + "transcode-ffmpeg3.patch" + "transcode-ffmpeg4.patch" + "transcode-swresample.patch" + "transcode-sndio.patch") +sha512sums=('d6f9674f3f5c3346194120585741ca660eb9ee133085cfce9460a14eaa0cf16fdf291761bd1db78e1c784e4d69a9481c7470cf8357dc7638ee3017620500f45f' + 'SKIP' + '4f52627e01e4ae172006fa55f8f2aab6b1ae457d0b12ad966fe942ee220bfebb32864bc32d727db6e490a8fdf0e6e2dcad7016cfb9eedc3c5b3391fb18ab67b6' + 'SKIP' + '0491de7cb189f4e634ad6fbb45051fd883bbf5787a89dbe93c633b2b48e96c031da0686a6fd9f61d621133a0a93410d8d73a96ad18f519ad7788aceb8a35fb2d' + 'b13a60193444d28ae8103eee677c0b8a1f52d0517e73de166319f221ab50f05eb045427aa6e963a759722476e8f8304f714c8666d3ffbf37825bcaf1348f803f' + 'af04f4c52508144dcbad3ea5fb8d9f00a94248bce6a0b76fb20bb9f9999dcfb7f3ad696a3fe4d2d17cbe014fbfa86d7ddd3feedefcf912bd4e952b5848f32581' + 'f5d55516b6ca2d2c0cffd2c87c2df377b5dae94385894f5b103894821d618ee9cd6374cb2be779014675b956a672c24908cb1278db7b854d1581014fe0942f74') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/01_filter_pv.c.diff || true + rm -v debian/patches/03_libav-api-fixes.diff || true + rm -v debian/patches/04_ffmpeg_options.patch || true + rm -v debian/patches/05-libav9-gentoo.patch || true + rm -v debian/patches/06_libav9-jmm.patch || true + rm -v debian/patches/07_libav9-preset.patch || true + rm -v debian/patches/08_libav9-opt.patch || true + rm -v debian/patches/09_libav9-arch.patch || true + rm -v debian/patches/11_libav10.patch || true + rm -v debian/patches/12_underlinkage.patch || true + + quilt push -av + fi + + patch -p1 -i ${srcdir}/transcode-ffmpeg3.patch + patch -p1 -i ${srcdir}/transcode-ffmpeg4.patch + patch -p1 -i ${srcdir}/transcode-sndio.patch + sed -e 's|freetype/ftglyph.h|freetype2/freetype/ftglyph.h|' -i filter/subtitler/load_font.c + patch -p1 -i ${srcdir}/transcode-swresample.patch + + autoreconf -vi +} + + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-sse \ + --disable-sse2 \ + --disable-altivec \ + --disable-imagemagick \ + --enable-mmx \ + --enable-lame \ + --enable-ogg \ + --enable-vorbis \ + --enable-theora \ + --enable-libdv \ + --enable-libxml2 \ + --enable-v4l \ + --enable-libjpeg \ + --enable-lzo \ + --enable-mjpegtools \ + --enable-sdl \ + --enable-freetype2 \ + --enable-a52 \ + --enable-libpostproc \ + --enable-xvid \ + --enable-x264 \ + --enable-alsa \ + --enable-sndio \ + --enable-libmpeg2 \ + --enable-libmpeg2convert \ + --enable-libquicktime + + # https://bugzilla.gnome.org/show_bug.cgi?id=655517 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/transcode/transcode-ffmpeg3.patch b/transcode/transcode-ffmpeg3.patch new file mode 100644 index 0000000..869a9eb --- /dev/null +++ b/transcode/transcode-ffmpeg3.patch @@ -0,0 +1,1241 @@ +Submitted By: Armion K. +Date: 2016-05-06 +Initial Package Version: 1.1.7 +Upstream Status: Unknown +Origin: Gentoo and Debian +Description: Fixes building against FFmpeg version >= 3.0.0 + +--- a/encode/encode_lavc.c 2011-11-19 17:50:27.000000000 +0100 ++++ b/encode/encode_lavc.c 2016-02-15 16:08:37.914488116 +0100 +@@ -74,6 +74,9 @@ + int lmin; + int lmax; + int me_method; ++ int luma_elim_threshold; ++ int chroma_elim_threshold; ++ int quantizer_noise_shaping; + + /* same as above for flags */ + struct { +@@ -114,6 +117,7 @@ + + AVFrame ff_venc_frame; + AVCodecContext ff_vcontext; ++ AVDictionary * ff_opts; + + AVCodec *ff_vcodec; + +@@ -164,6 +168,7 @@ + TC_CODEC_ERROR + }; + ++#if LIBAVCODEC_VERSION_MAJOR < 55 + static const enum CodecID tc_lavc_internal_codecs[] = { + CODEC_ID_MPEG1VIDEO, CODEC_ID_MPEG2VIDEO, CODEC_ID_MPEG4, + CODEC_ID_H263I, CODEC_ID_H263P, +@@ -176,6 +181,20 @@ + CODEC_ID_MSMPEG4V2, CODEC_ID_MSMPEG4V3, + CODEC_ID_NONE + }; ++#else ++static const enum AVCodecID tc_lavc_internal_codecs[] = { ++ AV_CODEC_ID_MPEG1VIDEO, AV_CODEC_ID_MPEG2VIDEO, AV_CODEC_ID_MPEG4, ++ AV_CODEC_ID_H263I, AV_CODEC_ID_H263P, ++ AV_CODEC_ID_H264, ++ AV_CODEC_ID_WMV1, AV_CODEC_ID_WMV2, ++ AV_CODEC_ID_RV10, ++ AV_CODEC_ID_HUFFYUV, AV_CODEC_ID_FFV1, ++ AV_CODEC_ID_DVVIDEO, ++ AV_CODEC_ID_MJPEG, AV_CODEC_ID_LJPEG, ++ AV_CODEC_ID_MSMPEG4V2, AV_CODEC_ID_MSMPEG4V3, ++ AV_CODEC_ID_NONE ++}; ++#endif + + static const TCFormatID tc_lavc_formats[] = { TC_FORMAT_ERROR }; + +@@ -214,7 +233,7 @@ + vframe_list_t *vframe) + { + avpicture_fill((AVPicture *)&pd->ff_venc_frame, vframe->video_buf, +- PIX_FMT_YUV420P, ++ AV_PIX_FMT_YUV420P, + pd->ff_vcontext.width, pd->ff_vcontext.height); + } + +@@ -228,7 +247,7 @@ + IMG_YUV_DEFAULT, + pd->ff_vcontext.width, pd->ff_vcontext.height); + avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf, +- PIX_FMT_YUV422P, ++ AV_PIX_FMT_YUV422P, + pd->ff_vcontext.width, pd->ff_vcontext.height); + ac_imgconvert(src, IMG_YUV_DEFAULT, + pd->ff_venc_frame.data, IMG_YUV422P, +@@ -244,7 +263,7 @@ + IMG_YUV422P, + pd->ff_vcontext.width, pd->ff_vcontext.height); + avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf, +- PIX_FMT_YUV420P, ++ AV_PIX_FMT_YUV420P, + pd->ff_vcontext.width, pd->ff_vcontext.height); + ac_imgconvert(src, IMG_YUV422P, + pd->ff_venc_frame.data, IMG_YUV420P, +@@ -256,7 +275,7 @@ + vframe_list_t *vframe) + { + avpicture_fill((AVPicture *)&pd->ff_venc_frame, vframe->video_buf, +- PIX_FMT_YUV422P, ++ AV_PIX_FMT_YUV422P, + pd->ff_vcontext.width, pd->ff_vcontext.height); + + } +@@ -266,7 +285,7 @@ + vframe_list_t *vframe) + { + avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf, +- PIX_FMT_YUV420P, ++ AV_PIX_FMT_YUV420P, + pd->ff_vcontext.width, pd->ff_vcontext.height); + ac_imgconvert(&vframe->video_buf, IMG_RGB_DEFAULT, + pd->ff_venc_frame.data, IMG_YUV420P, +@@ -591,21 +610,21 @@ + case CODEC_YUV: + if (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV) { + pd->tc_pix_fmt = TC_CODEC_YUV422P; +- pd->ff_vcontext.pix_fmt = PIX_FMT_YUV422P; ++ pd->ff_vcontext.pix_fmt = AV_PIX_FMT_YUV422P; + pd->pre_encode_video = pre_encode_video_yuv420p_huffyuv; + } else { + pd->tc_pix_fmt = TC_CODEC_YUV420P; + pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG) +- ? PIX_FMT_YUVJ420P +- : PIX_FMT_YUV420P; ++ ? AV_PIX_FMT_YUVJ420P ++ : AV_PIX_FMT_YUV420P; + pd->pre_encode_video = pre_encode_video_yuv420p; + } + break; + case CODEC_YUV422: + pd->tc_pix_fmt = TC_CODEC_YUV422P; + pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG) +- ? PIX_FMT_YUVJ422P +- : PIX_FMT_YUV422P; ++ ? AV_PIX_FMT_YUVJ422P ++ : AV_PIX_FMT_YUV422P; + if (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV) { + pd->pre_encode_video = pre_encode_video_yuv422p_huffyuv; + } else { +@@ -615,10 +634,10 @@ + case CODEC_RGB: + pd->tc_pix_fmt = TC_CODEC_RGB; + pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV) +- ? PIX_FMT_YUV422P ++ ? AV_PIX_FMT_YUV422P + : (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG) +- ? PIX_FMT_YUVJ420P +- : PIX_FMT_YUV420P; ++ ? AV_PIX_FMT_YUVJ420P ++ : AV_PIX_FMT_YUV420P; + pd->pre_encode_video = pre_encode_video_rgb24; + break; + default: +@@ -937,7 +956,11 @@ + static void tc_lavc_config_defaults(TCLavcPrivateData *pd) + { + /* first of all reinitialize lavc data */ ++#if LIBAVCODEC_VERSION_MAJOR < 55 + avcodec_get_context_defaults(&pd->ff_vcontext); ++#else ++ avcodec_get_context_defaults3(&pd->ff_vcontext, NULL); ++#endif + + pd->confdata.thread_count = 1; + +@@ -955,8 +978,6 @@ + /* + * context *transcode* (not libavcodec) defaults + */ +- pd->ff_vcontext.mb_qmin = 2; +- pd->ff_vcontext.mb_qmax = 31; + pd->ff_vcontext.max_qdiff = 3; + pd->ff_vcontext.max_b_frames = 0; + pd->ff_vcontext.me_range = 0; +@@ -977,8 +998,8 @@ + pd->ff_vcontext.mpeg_quant = 0; + pd->ff_vcontext.rc_initial_cplx = 0.0; + pd->ff_vcontext.rc_qsquish = 1.0; +- pd->ff_vcontext.luma_elim_threshold = 0; +- pd->ff_vcontext.chroma_elim_threshold = 0; ++ pd->confdata.luma_elim_threshold = 0; ++ pd->confdata.chroma_elim_threshold = 0; + pd->ff_vcontext.strict_std_compliance = 0; + pd->ff_vcontext.dct_algo = FF_DCT_AUTO; + pd->ff_vcontext.idct_algo = FF_IDCT_AUTO; +@@ -1002,7 +1023,7 @@ + pd->ff_vcontext.intra_quant_bias = FF_DEFAULT_QUANT_BIAS; + pd->ff_vcontext.inter_quant_bias = FF_DEFAULT_QUANT_BIAS; + pd->ff_vcontext.noise_reduction = 0; +- pd->ff_vcontext.quantizer_noise_shaping = 0; ++ pd->confdata.quantizer_noise_shaping = 0; + pd->ff_vcontext.flags = 0; + } + +@@ -1033,17 +1054,10 @@ + pd->ff_vcontext.me_method = ME_ZERO + pd->confdata.me_method; + + pd->ff_vcontext.flags = 0; +- SET_FLAG(pd, mv0); +- SET_FLAG(pd, cbp); + SET_FLAG(pd, qpel); +- SET_FLAG(pd, alt); +- SET_FLAG(pd, vdpart); +- SET_FLAG(pd, naq); + SET_FLAG(pd, ilme); + SET_FLAG(pd, ildct); + SET_FLAG(pd, aic); +- SET_FLAG(pd, aiv); +- SET_FLAG(pd, umv); + SET_FLAG(pd, psnr); + SET_FLAG(pd, trell); + SET_FLAG(pd, gray); +@@ -1064,6 +1078,36 @@ + pd->ff_vcontext.flags |= CODEC_FLAG_INTERLACED_DCT; + pd->ff_vcontext.flags |= CODEC_FLAG_INTERLACED_ME; + } ++ if (pd->confdata.flags.alt) { ++ av_dict_set(&(pd->ff_opts), "alternate_scan", "1", 0); ++ } ++ if (pd->confdata.flags.vdpart) { ++ av_dict_set(&(pd->ff_opts), "data_partitioning", "1", 0); ++ } ++ if (pd->confdata.flags.umv) { ++ av_dict_set(&(pd->ff_opts), "umv", "1", 0); ++ } ++ if (pd->confdata.flags.aiv) { ++ av_dict_set(&(pd->ff_opts), "aiv", "1", 0); ++ } ++ if (pd->confdata.flags.cbp) { ++ av_dict_set(&(pd->ff_opts), "mpv_flags", "+cbp_rd", 0); ++ } ++ if (pd->confdata.flags.mv0) { ++ av_dict_set(&(pd->ff_opts), "mpv_flags", "+mv0", 0); ++ } ++ if (pd->confdata.flags.naq) { ++ av_dict_set(&(pd->ff_opts), "mpv_flags", "+naq", 0); ++ } ++ ++ char buf[1024]; ++#define set_dict_opt(val, opt) \ ++ snprintf(buf, sizeof(buf), "%i", pd->confdata.val);\ ++ av_dict_set(&(pd->ff_opts), opt, buf, 0) ++ ++ set_dict_opt(luma_elim_threshold, "luma_elim_threshold"); ++ set_dict_opt(chroma_elim_threshold, "chroma_elim_threshold"); ++ set_dict_opt(quantizer_noise_shaping, "quantizer_noise_shaping"); + } + + #undef SET_FLAG +@@ -1116,12 +1160,10 @@ + // handled by transcode core + // { "vqmax", PCTX(qmax), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 60 }, + // handled by transcode core +- { "mbqmin", PCTX(mb_qmin), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 60 }, +- { "mbqmax", PCTX(mb_qmax), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 60 }, + { "lmin", PAUX(lmin), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.01, 255.0 }, + { "lmax", PAUX(lmax), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.01, 255.0 }, + { "vqdiff", PCTX(max_qdiff), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31 }, +- { "vmax_b_frames", PCTX(max_b_frames), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, FF_MAX_B_FRAMES }, ++ { "vmax_b_frames", PCTX(max_b_frames), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, INT_MAX }, + { "vme", PAUX(me_method), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16, }, + { "me_range", PCTX(me_range), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16000 }, + { "mbd", PCTX(mb_decision), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 3 }, +@@ -1150,8 +1192,8 @@ + { "vrc_init_cplx", PCTX(rc_initial_cplx), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 9999999.0 }, + // { "vrc_init_occupancy", }, // not yet supported + { "vqsquish", PCTX(rc_qsquish), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 99.0 }, +- { "vlelim", PCTX(luma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 }, +- { "vcelim", PCTX(chroma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 }, ++ { "vlelim", PAUX(luma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 }, ++ { "vcelim", PAUX(chroma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 }, + { "vstrict", PCTX(strict_std_compliance), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 }, + { "vpsize", PCTX(rtp_payload_size), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 100000000 }, + { "dct", PCTX(dct_algo), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10 }, +@@ -1177,25 +1219,25 @@ + { "ibias", PCTX(intra_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 }, + { "pbias", PCTX(inter_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 }, + { "nr", PCTX(noise_reduction), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000000}, +- { "qns", PCTX(quantizer_noise_shaping), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 3 }, ++ { "qns", PAUX(quantizer_noise_shaping), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 3 }, + { "inter_matrix_file", inter_matrix_file, TCCONF_TYPE_STRING, 0, 0, 0 }, + { "intra_matrix_file", intra_matrix_file, TCCONF_TYPE_STRING, 0, 0, 0 }, + +- { "mv0", PAUX(flags.mv0), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0 }, +- { "cbp", PAUX(flags.cbp), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CBP_RD }, ++ { "mv0", PAUX(flags.mv0), TCCONF_TYPE_FLAG, 0, 0, 1 }, ++ { "cbp", PAUX(flags.cbp), TCCONF_TYPE_FLAG, 0, 0, 1 }, + { "qpel", PAUX(flags.qpel), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QPEL }, +- { "alt", PAUX(flags.alt), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_ALT_SCAN }, ++ { "alt", PAUX(flags.alt), TCCONF_TYPE_FLAG, 0, 0, 1 }, + { "ilme", PAUX(flags.ilme), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME }, + { "ildct", PAUX(flags.ildct), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_DCT }, +- { "naq", PAUX(flags.naq), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_NORMALIZE_AQP }, +- { "vdpart", PAUX(flags.vdpart), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART }, ++ { "naq", PAUX(flags.naq), TCCONF_TYPE_FLAG, 0, 0, 1 }, ++ { "vdpart", PAUX(flags.vdpart), TCCONF_TYPE_FLAG, 0, 0, 1 }, + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + { "aic", PAUX(flags.aic), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_AIC }, + #else + { "aic", PAUX(flags.aic), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED }, + #endif +- { "aiv", PAUX(flags.aiv), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_AIV }, +- { "umv", PAUX(flags.umv), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_UMV }, ++ { "aiv", PAUX(flags.aiv), TCCONF_TYPE_FLAG, 0, 0, 1 }, ++ { "umv", PAUX(flags.umv), TCCONF_TYPE_FLAG, 0, 0, 1 }, + { "psnr", PAUX(flags.psnr), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR }, + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + { "trell", PAUX(flags.trell), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_TRELLIS_QUANT }, +@@ -1345,12 +1387,14 @@ + + pd = self->userdata; + ++ pd->ff_opts = NULL; ++ + pd->flush_flag = vob->encoder_flush; + + /* FIXME: move into core? */ + TC_INIT_LIBAVCODEC; + +- avcodec_get_frame_defaults(&pd->ff_venc_frame); ++ av_frame_unref(&pd->ff_venc_frame); + /* + * auxiliary config data needs to be blanked too + * before any other operation +@@ -1387,7 +1431,7 @@ + pd->confdata.thread_count, + (pd->confdata.thread_count > 1) ?"s" :""); + } +- avcodec_thread_init(&pd->ff_vcontext, pd->confdata.thread_count); ++ pd->ff_vcontext.thread_count = pd->confdata.thread_count; + + pd->ff_vcodec = avcodec_find_encoder(FF_VCODEC_ID(pd)); + if (pd->ff_vcodec == NULL) { +@@ -1397,11 +1441,11 @@ + } + + TC_LOCK_LIBAVCODEC; +- ret = avcodec_open(&pd->ff_vcontext, pd->ff_vcodec); ++ ret = avcodec_open2(&pd->ff_vcontext, pd->ff_vcodec, &(pd->ff_opts)); + TC_UNLOCK_LIBAVCODEC; + + if (ret < 0) { +- tc_log_error(MOD_NAME, "avcodec_open() failed"); ++ tc_log_error(MOD_NAME, "avcodec_open2() failed"); + goto failed; + } + /* finally, pass up the extradata, if any */ +@@ -1483,6 +1527,8 @@ + vframe_list_t *outframe) + { + TCLavcPrivateData *pd = NULL; ++ AVPacket pkt; ++ int ret, got_packet = 0; + + TC_MODULE_SELF_CHECK(self, "encode_video"); + +@@ -1497,12 +1543,15 @@ + + pd->pre_encode_video(pd, inframe); + ++ av_init_packet(&pkt); ++ pkt.data = outframe->video_buf; ++ pkt.size = inframe->video_size; ++ + TC_LOCK_LIBAVCODEC; +- outframe->video_len = avcodec_encode_video(&pd->ff_vcontext, +- outframe->video_buf, +- inframe->video_size, +- &pd->ff_venc_frame); ++ ret = avcodec_encode_video2(&pd->ff_vcontext, &pkt, ++ &pd->ff_venc_frame, &got_packet); + TC_UNLOCK_LIBAVCODEC; ++ outframe->video_len = ret ? ret : pkt.size; + + if (outframe->video_len < 0) { + tc_log_warn(MOD_NAME, "encoder error: size (%i)", +--- a/export/aud_aux.c 2011-11-19 17:50:27.000000000 +0100 ++++ b/export/aud_aux.c 2016-02-15 16:08:37.914488116 +0100 +@@ -326,10 +326,10 @@ + + switch (o_codec) { + case 0x50: +- codeid = CODEC_ID_MP2; ++ codeid = AV_CODEC_ID_MP2; + break; + case 0x2000: +- codeid = CODEC_ID_AC3; ++ codeid = AV_CODEC_ID_AC3; + break; + default: + tc_warn("cannot init ffmpeg with %x", o_codec); +@@ -346,7 +346,7 @@ + + //-- set parameters (bitrate, channels and sample-rate) -- + //-------------------------------------------------------- +- avcodec_get_context_defaults(&mpa_ctx); ++ avcodec_get_context_defaults3(&mpa_ctx, mpa_codec); + #if LIBAVCODEC_VERSION_MAJOR < 53 + mpa_ctx.codec_type = CODEC_TYPE_AUDIO; + #else +@@ -359,11 +359,11 @@ + //-- open codec -- + //---------------- + TC_LOCK_LIBAVCODEC; +- ret = avcodec_open(&mpa_ctx, mpa_codec); ++ ret = avcodec_open2(&mpa_ctx, mpa_codec, NULL); + TC_UNLOCK_LIBAVCODEC; + if (ret < 0) { + tc_warn("tc_audio_init_ffmpeg: could not open %s codec !", +- (codeid == CODEC_ID_MP2) ?"mpa" :"ac3"); ++ (codeid == AV_CODEC_ID_MP2) ?"mpa" :"ac3"); + return(TC_EXPORT_ERROR); + } + +@@ -846,6 +846,9 @@ + #ifdef HAVE_FFMPEG + int in_size, out_size; + char *in_buf; ++ int got_packet; ++ AVPacket avpkt = { 0 }; ++ AVFrame *frame = av_frame_alloc(); + + //-- input buffer and amount of bytes -- + in_size = aud_size; +@@ -866,10 +869,14 @@ + + ac_memcpy(&mpa_buf[mpa_buf_ptr], in_buf, bytes_needed); + ++ frame->nb_samples = mpa_ctx.frame_size; ++ avcodec_fill_audio_frame(frame, mpa_ctx.channels, mpa_ctx.sample_fmt, (const uint8_t *)mpa_buf, mpa_bytes_pf, 1); ++ avpkt.data = output; ++ avpkt.size = OUTPUT_SIZE; + TC_LOCK_LIBAVCODEC; +- out_size = avcodec_encode_audio(&mpa_ctx, (unsigned char *)output, +- OUTPUT_SIZE, (short *)mpa_buf); ++ out_size = avcodec_encode_audio2(&mpa_ctx, &avpkt, frame, &got_packet); + TC_UNLOCK_LIBAVCODEC; ++ out_size = avpkt.size; + tc_audio_write(output, out_size, avifile); + + in_size -= bytes_needed; +@@ -884,6 +891,7 @@ + + ac_memcpy(&mpa_buf[mpa_buf_ptr], aud_buffer, bytes_avail); + mpa_buf_ptr += bytes_avail; ++ av_frame_free(&frame); + return (0); + } + } //bytes availabe from last call? +@@ -893,10 +901,15 @@ + //---------------------------------------------------- + + while (in_size >= mpa_bytes_pf) { ++ av_frame_unref(frame); ++ frame->nb_samples = mpa_ctx.frame_size; ++ avcodec_fill_audio_frame(frame, mpa_ctx.channels, mpa_ctx.sample_fmt, (const uint8_t *)in_buf, mpa_bytes_pf, 1); ++ avpkt.data = output; ++ avpkt.size = OUTPUT_SIZE; + TC_LOCK_LIBAVCODEC; +- out_size = avcodec_encode_audio(&mpa_ctx, (unsigned char *)output, +- OUTPUT_SIZE, (short *)in_buf); ++ out_size = avcodec_encode_audio2(&mpa_ctx, &avpkt, frame, &got_packet); + TC_UNLOCK_LIBAVCODEC; ++ out_size = avpkt.size; + + tc_audio_write(output, out_size, avifile); + +@@ -904,6 +917,8 @@ + in_buf += mpa_bytes_pf; + } + ++ av_frame_free(&frame); ++ + //-- hold rest of bytes in mpa-buffer -- + //-------------------------------------- + if (in_size > 0) { +--- a/export/export_ffmpeg.c 2011-11-19 17:50:27.000000000 +0100 ++++ b/export/export_ffmpeg.c 2016-02-15 16:08:37.915488139 +0100 +@@ -122,6 +122,7 @@ + static AVFrame *lavc_convert_frame = NULL; + + static AVCodec *lavc_venc_codec = NULL; ++static AVDictionary *lavc_venc_opts = NULL; + static AVFrame *lavc_venc_frame = NULL; + static AVCodecContext *lavc_venc_context; + static avi_t *avifile = NULL; +@@ -180,7 +181,7 @@ + + + /* START: COPIED FROM ffmpeg-0.5_p22846(ffmpeg.c, cmdutils.c) */ +-#include ++#include + #include + #include + +@@ -249,9 +250,9 @@ + for(type=0; type= 0; type++){ + /* GLUE: +if */ + if (type == AVMEDIA_TYPE_VIDEO) { +- const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]); +- if(o2) +- ret = av_set_string3(avcodec_opts[type], opt, arg, 1, &o); ++ o = av_opt_find(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]); ++ if(o) ++ ret = av_opt_set(avcodec_opts[type], opt, arg, 0); + /* GLUE: +if */ + } + } +@@ -266,7 +267,10 @@ + if(opt[0] == 'a') + ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_AUDIO], opt+1, arg, 1, &o); + else */ if(opt[0] == 'v') +- ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 1, &o); ++ { ++ o = av_opt_find(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, NULL, 0, 0); ++ ret = av_opt_set(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 0); ++ } + /* GLUE: disabling + else if(opt[0] == 's') + ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_SUBTITLE], opt+1, arg, 1, &o); +@@ -470,7 +474,6 @@ + } + + TC_LOCK_LIBAVCODEC; +- avcodec_init(); + avcodec_register_all(); + TC_UNLOCK_LIBAVCODEC; + +@@ -486,11 +489,11 @@ + codec->name, codec->fourCC, codec->comments); + } + +- lavc_venc_context = avcodec_alloc_context(); +- lavc_venc_frame = avcodec_alloc_frame(); ++ lavc_venc_context = avcodec_alloc_context3(lavc_venc_codec); ++ lavc_venc_frame = av_frame_alloc(); + +- lavc_convert_frame= avcodec_alloc_frame(); +- size = avpicture_get_size(PIX_FMT_RGB24, vob->ex_v_width, vob->ex_v_height); ++ lavc_convert_frame= av_frame_alloc(); ++ size = avpicture_get_size(AV_PIX_FMT_RGB24, vob->ex_v_width, vob->ex_v_height); + enc_buffer = tc_malloc(size); + + if (lavc_venc_context == NULL || !enc_buffer || !lavc_convert_frame) { +@@ -634,7 +637,7 @@ + lavc_param_rc_max_rate = 2516; + lavc_param_rc_buffer_size = 224 * 8; + lavc_param_rc_buffer_aggressivity = 99; +- lavc_param_scan_offset = CODEC_FLAG_SVCD_SCAN_OFFSET; ++ lavc_param_scan_offset = 1; + + break; + +@@ -674,7 +677,7 @@ + + lavc_param_rc_buffer_size = 224 * 8; + lavc_param_rc_buffer_aggressivity = 99; +- lavc_param_scan_offset = CODEC_FLAG_SVCD_SCAN_OFFSET; ++ lavc_param_scan_offset = 1; + + break; + +@@ -838,8 +841,13 @@ + lavc_venc_context->rc_strategy = lavc_param_vrc_strategy; + lavc_venc_context->b_frame_strategy = lavc_param_vb_strategy; + lavc_venc_context->b_quant_offset = lavc_param_vb_qoffset; +- lavc_venc_context->luma_elim_threshold= lavc_param_luma_elim_threshold; +- lavc_venc_context->chroma_elim_threshold= lavc_param_chroma_elim_threshold; ++ ++ char buf[1024]; ++#define set_dict_opt(val, opt) \ ++ snprintf(buf, sizeof(buf), "%i", val); \ ++ av_dict_set(&lavc_venc_opts, opt, buf, 0) ++ set_dict_opt(lavc_param_luma_elim_threshold, "luma_elim_threshold"); ++ set_dict_opt(lavc_param_chroma_elim_threshold, "chroma_elim_threshold"); + lavc_venc_context->rtp_payload_size = lavc_param_packet_size; + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + if (lavc_param_packet_size) +@@ -870,7 +878,7 @@ + lavc_venc_context->context_model = lavc_param_context; + lavc_venc_context->scenechange_threshold= lavc_param_sc_threshold; + lavc_venc_context->noise_reduction = lavc_param_noise_reduction; +- lavc_venc_context->inter_threshold = lavc_param_inter_threshold; ++ set_dict_opt(lavc_param_inter_threshold, "inter_threshold"); + lavc_venc_context->intra_dc_precision = lavc_param_intra_dc_precision; + lavc_venc_context->skip_top = lavc_param_skip_top; + lavc_venc_context->skip_bottom = lavc_param_skip_bottom; +@@ -887,7 +895,7 @@ + lavc_venc_context->thread_count); + } + +- avcodec_thread_init(lavc_venc_context, lavc_param_threads); ++ lavc_venc_context->thread_count = lavc_param_threads; + + if (lavc_param_intra_matrix) { + char *tmp; +@@ -1061,19 +1069,18 @@ + lavc_venc_context->ildct_cmp = lavc_param_ildct_cmp; + lavc_venc_context->dia_size = lavc_param_dia_size; + lavc_venc_context->flags |= lavc_param_qpel; +- lavc_venc_context->flags |= lavc_param_gmc; ++ if(lavc_param_gmc) ++ av_dict_set(&lavc_venc_opts, "gmc", "1", 0); + lavc_venc_context->flags |= lavc_param_closedgop; + lavc_venc_context->flags |= lavc_param_trunc; + lavc_venc_context->flags |= lavc_param_aic; +- lavc_venc_context->flags |= lavc_param_umv; + lavc_venc_context->flags |= lavc_param_v4mv; +- lavc_venc_context->flags |= lavc_param_data_partitioning; +- lavc_venc_context->flags |= lavc_param_cbp; +- lavc_venc_context->flags |= lavc_param_mv0; +- lavc_venc_context->flags |= lavc_param_qp_rd; +- lavc_venc_context->flags |= lavc_param_scan_offset; +- lavc_venc_context->flags |= lavc_param_ss; +- lavc_venc_context->flags |= lavc_param_alt; ++ if(lavc_param_cbp) ++ av_dict_set(&lavc_venc_opts, "mpv_flags", "+cbp_rd", 0); ++ if(lavc_param_mv0) ++ av_dict_set(&lavc_venc_opts, "mpv_flags", "+mv0", 0); ++ if(lavc_param_qp_rd) ++ av_dict_set(&lavc_venc_opts, "mpv_flags", "+qp_rd", 0); + lavc_venc_context->flags |= lavc_param_ilme; + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + lavc_venc_context->flags |= lavc_param_trell; +@@ -1084,7 +1091,7 @@ + if (lavc_param_gray) + lavc_venc_context->flags |= CODEC_FLAG_GRAY; + if (lavc_param_normalize_aqp) +- lavc_venc_context->flags |= CODEC_FLAG_NORMALIZE_AQP; ++ av_dict_set(&lavc_venc_opts, "mpv_flags", "+naq", 0); + + switch(vob->encode_fields) { + case TC_ENCODE_FIELDS_TOP_FIRST: +@@ -1112,7 +1119,7 @@ + lavc_venc_context->prediction_method = lavc_param_prediction_method; + + if(is_huffyuv) +- lavc_venc_context->pix_fmt = PIX_FMT_YUV422P; ++ lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV422P; + else + { + switch(pix_fmt) +@@ -1121,18 +1128,18 @@ + case CODEC_RGB: + { + if(is_mjpeg) +- lavc_venc_context->pix_fmt = PIX_FMT_YUVJ420P; ++ lavc_venc_context->pix_fmt = AV_PIX_FMT_YUVJ420P; + else +- lavc_venc_context->pix_fmt = PIX_FMT_YUV420P; ++ lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV420P; + break; + } + + case CODEC_YUV422: + { + if(is_mjpeg) +- lavc_venc_context->pix_fmt = PIX_FMT_YUVJ422P; ++ lavc_venc_context->pix_fmt = AV_PIX_FMT_YUVJ422P; + else +- lavc_venc_context->pix_fmt = PIX_FMT_YUV422P; ++ lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV422P; + break; + } + +@@ -1203,9 +1210,8 @@ + + lavc_venc_context->me_method = ME_ZERO + lavc_param_vme; + +- + /* FIXME: transcode itself contains "broken ffmpeg default settings", thus we need to override them! */ +- if (lavc_param_video_preset) { ++ if (lavc_param_video_preset && strcmp(lavc_param_video_preset, "none")) { + avcodec_opts[AVMEDIA_TYPE_VIDEO] = lavc_venc_context; + video_codec_name = ffmpeg_codec_name(codec->name); + +@@ -1241,20 +1247,39 @@ + } + } + ++ if (lavc_param_scan_offset) { ++ av_dict_set(&lavc_venc_opts, "scan_offset", "1", 0); ++ } ++ ++ if (lavc_param_ss) { ++ av_dict_set(&lavc_venc_opts, "structured_slices", "1", 0); ++ } ++ ++ if (lavc_param_alt) { ++ av_dict_set(&lavc_venc_opts, "alternate_scan", "1", 0); ++ } ++ ++ if (lavc_param_umv) { ++ av_dict_set(&lavc_venc_opts, "umv", "1", 0); ++ } ++ ++ if (lavc_param_data_partitioning) { ++ av_dict_set(&lavc_venc_opts, "vdpart", "1", 0); ++ } + + //-- open codec -- + //---------------- + TC_LOCK_LIBAVCODEC; +- ret = avcodec_open(lavc_venc_context, lavc_venc_codec); ++ ret = avcodec_open2(lavc_venc_context, lavc_venc_codec, &lavc_venc_opts); + TC_UNLOCK_LIBAVCODEC; + if (ret < 0) { + tc_log_warn(MOD_NAME, "could not open FFMPEG codec"); + return TC_EXPORT_ERROR; + } + +- if (lavc_venc_context->codec->encode == NULL) { ++ if (av_codec_is_encoder(lavc_venc_context->codec) == 0) { + tc_log_warn(MOD_NAME, "could not open FFMPEG codec " +- "(lavc_venc_context->codec->encode == NULL)"); ++ "(av_codec_is_encoder(lavc_venc_context->codec) == 0)"); + return TC_EXPORT_ERROR; + } + +@@ -1574,6 +1599,8 @@ + + int out_size; + const char pict_type_char[5]= {'?', 'I', 'P', 'B', 'S'}; ++ AVPacket pkt; ++ int ret, got_packet = 0; + + if (param->flag == TC_VIDEO) { + +@@ -1598,7 +1625,7 @@ + YUV_INIT_PLANES(src, param->buffer, IMG_YUV_DEFAULT, + lavc_venc_context->width, lavc_venc_context->height); + avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer, +- PIX_FMT_YUV422P, lavc_venc_context->width, ++ AV_PIX_FMT_YUV422P, lavc_venc_context->width, + lavc_venc_context->height); + /* FIXME: can't use tcv_convert (see decode_lavc.c) */ + ac_imgconvert(src, IMG_YUV_DEFAULT, +@@ -1628,7 +1655,7 @@ + lavc_venc_context->width, + lavc_venc_context->height); + avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer, +- PIX_FMT_YUV420P, lavc_venc_context->width, ++ AV_PIX_FMT_YUV420P, lavc_venc_context->width, + lavc_venc_context->height); + ac_imgconvert(src, IMG_YUV422P, + lavc_venc_frame->data, IMG_YUV420P, +@@ -1639,7 +1666,7 @@ + + case CODEC_RGB: + avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer, +- PIX_FMT_YUV420P, lavc_venc_context->width, ++ AV_PIX_FMT_YUV420P, lavc_venc_context->width, + lavc_venc_context->height); + ac_imgconvert(¶m->buffer, IMG_RGB_DEFAULT, + lavc_venc_frame->data, IMG_YUV420P, +@@ -1652,13 +1679,17 @@ + return TC_EXPORT_ERROR; + } + ++ av_init_packet(&pkt); ++ pkt.data = enc_buffer; ++ pkt.size = size; + + TC_LOCK_LIBAVCODEC; +- out_size = avcodec_encode_video(lavc_venc_context, +- enc_buffer, size, +- lavc_venc_frame); ++ ret = avcodec_encode_video2(lavc_venc_context, &pkt, ++ lavc_venc_frame, &got_packet); + TC_UNLOCK_LIBAVCODEC; + ++ out_size = ret ? ret : pkt.size; ++ + if (out_size < 0) { + tc_log_warn(MOD_NAME, "encoder error: size (%d)", out_size); + return TC_EXPORT_ERROR; +--- a/export/ffmpeg_cfg.c 2011-11-19 17:50:27.000000000 +0100 ++++ b/export/ffmpeg_cfg.c 2016-02-15 16:08:37.916488161 +0100 +@@ -34,8 +34,6 @@ + //int lavc_param_vqscale = 0; + //int lavc_param_vqmin = 2; + //int lavc_param_vqmax = 31; +-int lavc_param_mb_qmin = 2; +-int lavc_param_mb_qmax = 31; + int lavc_param_lmin = 2; + int lavc_param_lmax = 31; + int lavc_param_vqdiff = 3; +@@ -126,7 +124,7 @@ + //int lavc_param_atag = 0; + //int lavc_param_abitrate = 224; + +-char *lavc_param_video_preset = "medium"; ++char *lavc_param_video_preset = "none"; + char *lavc_param_ffmpeg_datadir = "/usr/share/ffmpeg"; + + TCConfigEntry lavcopts_conf[]={ +@@ -143,15 +141,13 @@ + // {"vqscale", &lavc_param_vqscale, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31}, + // {"vqmin", &lavc_param_vqmin, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31}, + // {"vqmax", &lavc_param_vqmax, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31}, +- {"mbqmin", &lavc_param_mb_qmin, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31}, +- {"mbqmax", &lavc_param_mb_qmax, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31}, + {"lmin", &lavc_param_lmin, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.01, 255.0}, + {"lmax", &lavc_param_lmax, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.01, 255.0}, + {"vqdiff", &lavc_param_vqdiff, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31}, + {"vqcomp", &lavc_param_vqcompress, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0}, + {"vqblur", &lavc_param_vqblur, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0}, + {"vb_qfactor", &lavc_param_vb_qfactor, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0}, +- {"vmax_b_frames", &lavc_param_vmax_b_frames, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, FF_MAX_B_FRAMES}, ++ {"vmax_b_frames", &lavc_param_vmax_b_frames, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, INT_MAX}, + // {"vpass", &lavc_param_vpass, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2}, + {"vrc_strategy", &lavc_param_vrc_strategy, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2}, + {"vb_strategy", &lavc_param_vb_strategy, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10}, +@@ -160,9 +156,9 @@ + {"vcelim", &lavc_param_chroma_elim_threshold, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99}, + {"vpsize", &lavc_param_packet_size, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 100000000}, + {"vstrict", &lavc_param_strict, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99}, +- {"vdpart", &lavc_param_data_partitioning, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART}, ++ {"vdpart", &lavc_param_data_partitioning, TCCONF_TYPE_FLAG, 0, 0, 1}, + // {"keyint", &lavc_param_keyint, TCCONF_TYPE_INT, 0, 0, 0}, +- {"gray", &lavc_param_gray, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PART}, ++ {"gray", &lavc_param_gray, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GRAY}, + {"mpeg_quant", &lavc_param_mpeg_quant, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"vi_qfactor", &lavc_param_vi_qfactor, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0}, + {"vi_qoffset", &lavc_param_vi_qoffset, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 31.0}, +@@ -211,26 +207,26 @@ + #else + {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED}, + #endif +- {"umv", &lavc_param_umv, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_UMV}, ++ {"umv", &lavc_param_umv, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"ibias", &lavc_param_ibias, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512}, + {"pbias", &lavc_param_pbias, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512}, + {"coder", &lavc_param_coder, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10}, + {"context", &lavc_param_context, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10}, + {"intra_matrix", &lavc_param_intra_matrix, TCCONF_TYPE_STRING, 0, 0, 0}, + {"inter_matrix", &lavc_param_inter_matrix, TCCONF_TYPE_STRING, 0, 0, 0}, +- {"cbp", &lavc_param_cbp, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CBP_RD}, +- {"mv0", &lavc_param_mv0, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_MV0}, ++ {"cbp", &lavc_param_cbp, TCCONF_TYPE_FLAG, 0, 0, 1}, ++ {"mv0", &lavc_param_mv0, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"nr", &lavc_param_noise_reduction, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000000}, +- {"qprd", &lavc_param_qp_rd, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QP_RD}, ++ {"qprd", &lavc_param_qp_rd, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"threads", &lavc_param_threads, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 16}, +- {"ss", &lavc_param_ss, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_SLICE_STRUCT}, +- {"svcd_sof", &lavc_param_scan_offset, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_SVCD_SCAN_OFFSET}, +- {"alt", &lavc_param_alt, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_ALT_SCAN}, ++ {"ss", &lavc_param_ss, TCCONF_TYPE_FLAG, 0, 0, 1}, ++ {"svcd_sof", &lavc_param_scan_offset, TCCONF_TYPE_FLAG, 0, 0, 1}, ++ {"alt", &lavc_param_alt, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"ilme", &lavc_param_ilme, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME}, + {"inter_threshold", &lavc_param_inter_threshold, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1000000, 1000000}, + {"sc_threshold", &lavc_param_sc_threshold, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1000000, 1000000}, + {"top", &lavc_param_top, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1, 1}, +- {"gmc", &lavc_param_gmc, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GMC}, ++ {"gmc", &lavc_param_gmc, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"trunc", &lavc_param_trunc, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_TRUNCATED}, + {"closedgop", &lavc_param_closedgop, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CLOSED_GOP}, + {"intra_dc_precision", &lavc_param_intra_dc_precision, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16}, +--- a/export/ffmpeg_cfg.h 2011-11-19 17:50:27.000000000 +0100 ++++ b/export/ffmpeg_cfg.h 2016-02-15 16:08:37.916488161 +0100 +@@ -13,8 +13,6 @@ + //extern int lavc_param_vqscale; + //extern int lavc_param_vqmin; + //extern int lavc_param_vqmax; +-extern int lavc_param_mb_qmin; +-extern int lavc_param_mb_qmax; + extern int lavc_param_lmin; + extern int lavc_param_lmax; + extern int lavc_param_vqdiff; +--- a/filter/filter_pp.c 2011-11-19 17:50:27.000000000 +0100 ++++ b/filter/filter_pp.c 2016-02-15 16:08:37.916488161 +0100 +@@ -38,8 +38,8 @@ + + /* FIXME: these use the filter ID as an index--the ID can grow + * arbitrarily large, so this needs to be fixed */ +-static pp_mode_t *mode[100]; +-static pp_context_t *context[100]; ++static pp_mode *mode[100]; ++static pp_context *context[100]; + static int width[100], height[100]; + static int pre[100]; + +--- a/import/decode_lavc.c 2011-11-19 17:50:27.000000000 +0100 ++++ b/import/decode_lavc.c 2016-02-15 16:09:00.252988897 +0100 +@@ -58,37 +58,37 @@ + + // fourCC to ID mapping taken from MPlayer's codecs.conf + static struct ffmpeg_codec ffmpeg_codecs[] = { +- {CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41", ++ {AV_CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41", + {"MP41", "DIV1", ""}}, +- {CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42", ++ {AV_CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42", + {"MP42", "DIV2", ""}}, +- {CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4", ++ {AV_CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4", + {"DIV3", "DIV5", "AP41", "MPG3", "MP43", ""}}, +- {CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4", ++ {AV_CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4", + {"DIVX", "XVID", "MP4S", "M4S2", "MP4V", "UMP4", "DX50", ""}}, +- {CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg", ++ {AV_CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg", + {"MJPG", "AVRN", "AVDJ", "JPEG", "MJPA", "JFIF", ""}}, +- {CODEC_ID_MPEG1VIDEO, TC_CODEC_MPEG1VIDEO, "mpeg1video", ++ {AV_CODEC_ID_MPEG1VIDEO, TC_CODEC_MPEG1VIDEO, "mpeg1video", + {"MPG1", ""}}, +- {CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo", ++ {AV_CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo", + {"DVSD", ""}}, +- {CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1", ++ {AV_CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1", + {"WMV1", ""}}, +- {CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2", ++ {AV_CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2", + {"WMV2", ""}}, +- {CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu", ++ {AV_CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu", + {"HFYU", ""}}, +- {CODEC_ID_H263I, TC_CODEC_H263I, "h263i", ++ {AV_CODEC_ID_H263I, TC_CODEC_H263I, "h263i", + {"I263", ""}}, +- {CODEC_ID_H263P, TC_CODEC_H263P, "h263p", ++ {AV_CODEC_ID_H263P, TC_CODEC_H263P, "h263p", + {"H263", "U263", "VIV1", ""}}, +- {CODEC_ID_RV10, TC_CODEC_RV10, "rv10", ++ {AV_CODEC_ID_RV10, TC_CODEC_RV10, "rv10", + {"RV10", "RV13", ""}}, +- {CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1", ++ {AV_CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1", + {"SVQ1", ""}}, +- {CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3", ++ {AV_CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3", + {"SVQ3", ""}}, +- {CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video", ++ {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video", + {"MPG2", ""}}, + {0, TC_CODEC_UNKNOWN, NULL, {""}}}; + +@@ -170,7 +170,7 @@ + + // Set these to the expected values so that ffmpeg's decoder can + // properly detect interlaced input. +- lavc_dec_context = avcodec_alloc_context(); ++ lavc_dec_context = avcodec_alloc_context3(NULL); + if (lavc_dec_context == NULL) { + tc_log_error(__FILE__, "Could not allocate enough memory."); + goto decoder_error; +@@ -181,12 +181,12 @@ + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + lavc_dec_context->error_resilience = 2; + #else +- lavc_dec_context->error_recognition = 2; ++ lavc_dec_context->err_recognition = 2; + #endif + lavc_dec_context->error_concealment = 3; + lavc_dec_context->workaround_bugs = FF_BUG_AUTODETECT; + +- if (avcodec_open(lavc_dec_context, lavc_dec_codec) < 0) { ++ if (avcodec_open2(lavc_dec_context, lavc_dec_codec, NULL) < 0) { + tc_log_error(__FILE__, "Could not initialize the '%s' codec.", + codec->name); + goto decoder_error; +@@ -290,8 +290,8 @@ + + // Convert avcodec image to the requested YUV or RGB format + switch (lavc_dec_context->pix_fmt) { +- case PIX_FMT_YUVJ420P: +- case PIX_FMT_YUV420P: ++ case AV_PIX_FMT_YUVJ420P: ++ case AV_PIX_FMT_YUV420P: + // Remove "dead space" at right edge of planes, if any + if (picture.linesize[0] != lavc_dec_context->width) { + int y; +@@ -315,7 +315,7 @@ + pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT, + lavc_dec_context->width, lavc_dec_context->height); + break; +- case PIX_FMT_YUV411P: ++ case AV_PIX_FMT_YUV411P: + if (picture.linesize[0] != lavc_dec_context->width) { + int y; + for (y = 0; y < lavc_dec_context->height; y++) { +@@ -334,8 +334,8 @@ + pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT, + lavc_dec_context->width, lavc_dec_context->height); + break; +- case PIX_FMT_YUVJ422P: +- case PIX_FMT_YUV422P: ++ case AV_PIX_FMT_YUVJ422P: ++ case AV_PIX_FMT_YUV422P: + if (picture.linesize[0] != lavc_dec_context->width) { + int y; + for (y = 0; y < lavc_dec_context->height; y++) { +@@ -354,8 +354,8 @@ + pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT, + lavc_dec_context->width, lavc_dec_context->height); + break; +- case PIX_FMT_YUVJ444P: +- case PIX_FMT_YUV444P: ++ case AV_PIX_FMT_YUVJ444P: ++ case AV_PIX_FMT_YUV444P: + if (picture.linesize[0] != lavc_dec_context->width) { + int y; + for (y = 0; y < lavc_dec_context->height; y++) { +--- a/import/import_ffmpeg.c 2011-11-19 17:50:27.000000000 +0100 ++++ b/import/import_ffmpeg.c 2016-02-15 16:08:48.269720627 +0100 +@@ -59,51 +59,51 @@ + + // fourCC to ID mapping taken from MPlayer's codecs.conf + static struct ffmpeg_codec ffmpeg_codecs[] = { +- {CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41", ++ {AV_CODEC_ID_MSMPEG4V1, TC_CODEC_ERROR, "mp41", + {"MP41", "DIV1", ""}}, +- {CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42", ++ {AV_CODEC_ID_MSMPEG4V2, TC_CODEC_MP42, "mp42", + {"MP42", "DIV2", ""}}, +- {CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4", ++ {AV_CODEC_ID_MSMPEG4V3, TC_CODEC_DIVX3, "msmpeg4", + {"DIV3", "DIV5", "AP41", "MPG3", "MP43", ""}}, +- {CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4", ++ {AV_CODEC_ID_MPEG4, TC_CODEC_DIVX4, "mpeg4", + {"DIVX", "XVID", "MP4S", "M4S2", "MP4V", "UMP4", "DX50", ""}}, +- {CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg", ++ {AV_CODEC_ID_MJPEG, TC_CODEC_MJPEG, "mjpeg", + {"MJPG", "AVRN", "AVDJ", "JPEG", "MJPA", "JFIF", ""}}, +- {CODEC_ID_MPEG1VIDEO, TC_CODEC_MPG1, "mpeg1video", ++ {AV_CODEC_ID_MPEG1VIDEO, TC_CODEC_MPG1, "mpeg1video", + {"MPG1", ""}}, +- {CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo", ++ {AV_CODEC_ID_DVVIDEO, TC_CODEC_DV, "dvvideo", + {"DVSD", ""}}, +- {CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1", ++ {AV_CODEC_ID_WMV1, TC_CODEC_WMV1, "wmv1", + {"WMV1", ""}}, +- {CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2", ++ {AV_CODEC_ID_WMV2, TC_CODEC_WMV2, "wmv2", + {"WMV2", ""}}, +- {CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu", ++ {AV_CODEC_ID_HUFFYUV, TC_CODEC_HUFFYUV, "hfyu", + {"HFYU", ""}}, +- {CODEC_ID_H263I, TC_CODEC_H263I, "h263i", ++ {AV_CODEC_ID_H263I, TC_CODEC_H263I, "h263i", + {"I263", ""}}, +- {CODEC_ID_H263P, TC_CODEC_H263P, "h263p", ++ {AV_CODEC_ID_H263P, TC_CODEC_H263P, "h263p", + {"H263", "U263", "VIV1", ""}}, +- {CODEC_ID_H264, TC_CODEC_H264, "h264", ++ {AV_CODEC_ID_H264, TC_CODEC_H264, "h264", + {"H264", "h264", "X264", "x264", "avc1", ""}}, +- {CODEC_ID_RV10, TC_CODEC_RV10, "rv10", ++ {AV_CODEC_ID_RV10, TC_CODEC_RV10, "rv10", + {"RV10", "RV13", ""}}, +- {CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1", ++ {AV_CODEC_ID_SVQ1, TC_CODEC_SVQ1, "svq1", + {"SVQ1", ""}}, +- {CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3", ++ {AV_CODEC_ID_SVQ3, TC_CODEC_SVQ3, "svq3", + {"SVQ3", ""}}, +- {CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video", ++ {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG2, "mpeg2video", + {"MPG2", ""}}, +- {CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG, "mpeg2video", ++ {AV_CODEC_ID_MPEG2VIDEO, TC_CODEC_MPEG, "mpeg2video", + {"MPG2", ""}}, +- {CODEC_ID_ASV1, TC_CODEC_ASV1, "asv1", ++ {AV_CODEC_ID_ASV1, TC_CODEC_ASV1, "asv1", + {"ASV1", ""}}, +- {CODEC_ID_ASV2, TC_CODEC_ASV2, "asv2", ++ {AV_CODEC_ID_ASV2, TC_CODEC_ASV2, "asv2", + {"ASV2", ""}}, +- {CODEC_ID_FFV1, TC_CODEC_FFV1, "ffv1", ++ {AV_CODEC_ID_FFV1, TC_CODEC_FFV1, "ffv1", + {"FFV1", ""}}, +- {CODEC_ID_RAWVIDEO, TC_CODEC_YUV420P, "raw", ++ {AV_CODEC_ID_RAWVIDEO, TC_CODEC_YUV420P, "raw", + {"I420", "IYUV", ""}}, +- {CODEC_ID_RAWVIDEO, TC_CODEC_YUV422P, "raw", ++ {AV_CODEC_ID_RAWVIDEO, TC_CODEC_YUV422P, "raw", + {"Y42B", ""}}, + {0, TC_CODEC_UNKNOWN, NULL, {""}}}; + +@@ -302,7 +302,7 @@ + + // Set these to the expected values so that ffmpeg's decoder can + // properly detect interlaced input. +- lavc_dec_context = avcodec_alloc_context(); ++ lavc_dec_context = avcodec_alloc_context3(lavc_dec_codec); + if (lavc_dec_context == NULL) { + tc_log_error(MOD_NAME, "Could not allocate enough memory."); + return TC_IMPORT_ERROR; +@@ -314,7 +314,7 @@ + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + lavc_dec_context->error_resilience = 2; + #else +- lavc_dec_context->error_recognition = 2; ++ lavc_dec_context->err_recognition = 2; + #endif + lavc_dec_context->error_concealment = 3; + lavc_dec_context->workaround_bugs = FF_BUG_AUTODETECT; +@@ -324,13 +324,13 @@ + // XXX: some codecs need extra data + switch (codec->id) + { +- case CODEC_ID_MJPEG: extra_data_size = 28; break; +- case CODEC_ID_LJPEG: extra_data_size = 28; break; +- case CODEC_ID_HUFFYUV: extra_data_size = 1000; break; +- case CODEC_ID_ASV1: extra_data_size = 8; break; +- case CODEC_ID_ASV2: extra_data_size = 8; break; +- case CODEC_ID_WMV1: extra_data_size = 4; break; +- case CODEC_ID_WMV2: extra_data_size = 4; break; ++ case AV_CODEC_ID_MJPEG: extra_data_size = 28; break; ++ case AV_CODEC_ID_LJPEG: extra_data_size = 28; break; ++ case AV_CODEC_ID_HUFFYUV: extra_data_size = 1000; break; ++ case AV_CODEC_ID_ASV1: extra_data_size = 8; break; ++ case AV_CODEC_ID_ASV2: extra_data_size = 8; break; ++ case AV_CODEC_ID_WMV1: extra_data_size = 4; break; ++ case AV_CODEC_ID_WMV2: extra_data_size = 4; break; + default: extra_data_size = 0; break; + } + +@@ -344,7 +344,7 @@ + } + + TC_LOCK_LIBAVCODEC; +- ret = avcodec_open(lavc_dec_context, lavc_dec_codec); ++ ret = avcodec_open2(lavc_dec_context, lavc_dec_codec, NULL); + TC_UNLOCK_LIBAVCODEC; + if (ret < 0) { + tc_log_warn(MOD_NAME, "Could not initialize the '%s' codec.", +@@ -360,7 +360,7 @@ + frame_size = x_dim*y_dim + 2*UV_PLANE_SIZE(IMG_YUV_DEFAULT,x_dim,y_dim); + + // we adapt the color space +- if(codec->id == CODEC_ID_MJPEG) { ++ if(codec->id == AV_CODEC_ID_MJPEG) { + enable_levels_filter(); + } + break; +@@ -434,7 +434,7 @@ + } + + // we adapt the color space +- if(codec->id == CODEC_ID_MJPEG) { ++ if(codec->id == AV_CODEC_ID_MJPEG) { + enable_levels_filter(); + } + +@@ -504,13 +504,13 @@ + int bkey = 0; + + // check for keyframes +- if (codec->id == CODEC_ID_MSMPEG4V3) { ++ if (codec->id == AV_CODEC_ID_MSMPEG4V3) { + if (divx3_is_key(buffer)) bkey = 1; + } +- else if (codec->id == CODEC_ID_MPEG4) { ++ else if (codec->id == AV_CODEC_ID_MPEG4) { + if (mpeg4_is_key(buffer, bytes_read)) bkey = 1; + } +- else if (codec->id == CODEC_ID_MJPEG) { ++ else if (codec->id == AV_CODEC_ID_MJPEG) { + bkey = 1; + } + +@@ -580,8 +580,8 @@ + + // Convert avcodec image to our internal YUV or RGB format + switch (lavc_dec_context->pix_fmt) { +- case PIX_FMT_YUVJ420P: +- case PIX_FMT_YUV420P: ++ case AV_PIX_FMT_YUVJ420P: ++ case AV_PIX_FMT_YUV420P: + src_fmt = IMG_YUV420P; + YUV_INIT_PLANES(src_planes, frame, src_fmt, + lavc_dec_context->width, lavc_dec_context->height); +@@ -612,7 +612,7 @@ + } + break; + +- case PIX_FMT_YUV411P: ++ case AV_PIX_FMT_YUV411P: + src_fmt = IMG_YUV411P; + YUV_INIT_PLANES(src_planes, frame, src_fmt, + lavc_dec_context->width, lavc_dec_context->height); +@@ -640,8 +640,8 @@ + } + break; + +- case PIX_FMT_YUVJ422P: +- case PIX_FMT_YUV422P: ++ case AV_PIX_FMT_YUVJ422P: ++ case AV_PIX_FMT_YUV422P: + src_fmt = IMG_YUV422P; + YUV_INIT_PLANES(src_planes, frame, src_fmt, + lavc_dec_context->width, lavc_dec_context->height); +@@ -669,8 +669,8 @@ + } + break; + +- case PIX_FMT_YUVJ444P: +- case PIX_FMT_YUV444P: ++ case AV_PIX_FMT_YUVJ444P: ++ case AV_PIX_FMT_YUV444P: + src_fmt = IMG_YUV444P; + YUV_INIT_PLANES(src_planes, frame, src_fmt, + lavc_dec_context->width, lavc_dec_context->height); +--- a/import/probe_ffmpeg.c 2011-11-19 17:50:27.000000000 +0100 ++++ b/import/probe_ffmpeg.c 2016-02-15 16:08:37.917488184 +0100 +@@ -99,8 +99,8 @@ + + TC_INIT_LIBAVCODEC; + +- ret = av_open_input_file(&lavf_dmx_context, ipipe->name, +- NULL, 0, NULL); ++ ret = avformat_open_input(&lavf_dmx_context, ipipe->name, ++ NULL, NULL); + if (ret != 0) { + tc_log_error(__FILE__, "unable to open '%s'" + " (libavformat failure)", +@@ -109,7 +109,7 @@ + return; + } + +- ret = av_find_stream_info(lavf_dmx_context); ++ ret = avformat_find_stream_info(lavf_dmx_context, NULL); + if (ret < 0) { + tc_log_error(__FILE__, "unable to fetch informations from '%s'" + " (libavformat failure)", +@@ -120,7 +120,11 @@ + + translate_info(lavf_dmx_context, ipipe->probe_info); + ++#if LIBAVFORMAT_VERSION_INT > AV_VERSION_INT(53,25,0) ++ avformat_close_input(&lavf_dmx_context); ++#else + av_close_input_file(lavf_dmx_context); ++#endif + return; + } + +--- a/libtc/tcavcodec.h 2011-11-19 17:50:27.000000000 +0100 ++++ b/libtc/tcavcodec.h 2016-02-15 16:08:37.917488184 +0100 +@@ -53,7 +53,6 @@ + + #define TC_INIT_LIBAVCODEC do { \ + TC_LOCK_LIBAVCODEC; \ +- avcodec_init(); \ + avcodec_register_all(); \ + TC_UNLOCK_LIBAVCODEC; \ + } while (0) diff --git a/transcode/transcode-ffmpeg4.patch b/transcode/transcode-ffmpeg4.patch new file mode 100644 index 0000000..e602621 --- /dev/null +++ b/transcode/transcode-ffmpeg4.patch @@ -0,0 +1,494 @@ +--- a/encode/encode_lavc.c ++++ b/encode/encode_lavc.c +@@ -77,6 +77,13 @@ struct tclavcconfigdata_ { + int luma_elim_threshold; + int chroma_elim_threshold; + int quantizer_noise_shaping; ++ int inter_quant_bias; ++ int intra_quant_bias; ++ int scenechange_factor; ++ int rc_strategy; ++ float rc_initial_cplx; ++ float rc_qsquish; ++ float border_masking; + + /* same as above for flags */ + struct { +@@ -684,7 +691,7 @@ static int tc_lavc_init_multipass(TCLavc + switch (vob->divxmultipass) { + case 1: + CAN_DO_MULTIPASS(multipass_flag); +- pd->ff_vcontext.flags |= CODEC_FLAG_PASS1; ++ pd->ff_vcontext.flags |= AV_CODEC_FLAG_PASS1; + pd->stats_file = fopen(vob->divxlogfile, "w"); + if (pd->stats_file == NULL) { + tc_log_error(MOD_NAME, "could not create 2pass log file" +@@ -694,7 +701,7 @@ static int tc_lavc_init_multipass(TCLavc + break; + case 2: + CAN_DO_MULTIPASS(multipass_flag); +- pd->ff_vcontext.flags |= CODEC_FLAG_PASS2; ++ pd->ff_vcontext.flags |= AV_CODEC_FLAG_PASS2; + pd->stats_file = fopen(vob->divxlogfile, "r"); + if (pd->stats_file == NULL){ + tc_log_error(MOD_NAME, "could not open 2pass log file \"%s\"" +@@ -723,7 +730,7 @@ static int tc_lavc_init_multipass(TCLavc + break; + case 3: + /* fixed qscale :p */ +- pd->ff_vcontext.flags |= CODEC_FLAG_QSCALE; ++ pd->ff_vcontext.flags |= AV_CODEC_FLAG_QSCALE; + pd->ff_venc_frame.quality = vob->divxbitrate; + break; + } +@@ -970,7 +977,7 @@ static void tc_lavc_config_defaults(TCLa + pd->confdata.rc_buffer_size = 0; + pd->confdata.lmin = 2; + pd->confdata.lmax = 31; +- pd->confdata.me_method = ME_EPZS; ++ pd->confdata.me_method = 0; + + memset(&pd->confdata.flags, 0, sizeof(pd->confdata.flags)); + pd->confdata.turbo_setup = 0; +@@ -983,12 +990,12 @@ static void tc_lavc_config_defaults(TCLa + pd->ff_vcontext.me_range = 0; + pd->ff_vcontext.mb_decision = 0; + pd->ff_vcontext.scenechange_threshold = 0; +- pd->ff_vcontext.scenechange_factor = 1; ++ pd->confdata.scenechange_factor = 1; + pd->ff_vcontext.b_frame_strategy = 0; + pd->ff_vcontext.b_sensitivity = 40; + pd->ff_vcontext.brd_scale = 0; + pd->ff_vcontext.bidir_refine = 0; +- pd->ff_vcontext.rc_strategy = 2; ++ pd->confdata.rc_strategy = 2; + pd->ff_vcontext.b_quant_factor = 1.25; + pd->ff_vcontext.i_quant_factor = 0.8; + pd->ff_vcontext.b_quant_offset = 1.25; +@@ -996,8 +1003,8 @@ static void tc_lavc_config_defaults(TCLa + pd->ff_vcontext.qblur = 0.5; + pd->ff_vcontext.qcompress = 0.5; + pd->ff_vcontext.mpeg_quant = 0; +- pd->ff_vcontext.rc_initial_cplx = 0.0; +- pd->ff_vcontext.rc_qsquish = 1.0; ++ pd->confdata.rc_initial_cplx = 0.0; ++ pd->confdata.rc_qsquish = 1.0; + pd->confdata.luma_elim_threshold = 0; + pd->confdata.chroma_elim_threshold = 0; + pd->ff_vcontext.strict_std_compliance = 0; +@@ -1008,7 +1015,7 @@ static void tc_lavc_config_defaults(TCLa + pd->ff_vcontext.temporal_cplx_masking = 0.0; + pd->ff_vcontext.spatial_cplx_masking = 0.0; + pd->ff_vcontext.p_masking = 0.0; +- pd->ff_vcontext.border_masking = 0.0; ++ pd->confdata.border_masking = 0.0; + pd->ff_vcontext.me_pre_cmp = 0; + pd->ff_vcontext.me_cmp = 0; + pd->ff_vcontext.me_sub_cmp = 0; +@@ -1020,8 +1027,6 @@ static void tc_lavc_config_defaults(TCLa + pd->ff_vcontext.pre_me = 1; + pd->ff_vcontext.me_subpel_quality = 8; + pd->ff_vcontext.refs = 1; +- pd->ff_vcontext.intra_quant_bias = FF_DEFAULT_QUANT_BIAS; +- pd->ff_vcontext.inter_quant_bias = FF_DEFAULT_QUANT_BIAS; + pd->ff_vcontext.noise_reduction = 0; + pd->confdata.quantizer_noise_shaping = 0; + pd->ff_vcontext.flags = 0; +@@ -1044,14 +1049,16 @@ static void tc_lavc_config_defaults(TCLa + */ + static void tc_lavc_dispatch_settings(TCLavcPrivateData *pd) + { ++ char buf[1024]; + /* some translation... */ + pd->ff_vcontext.bit_rate_tolerance = pd->confdata.vrate_tolerance * 1000; + pd->ff_vcontext.rc_min_rate = pd->confdata.rc_min_rate * 1000; + pd->ff_vcontext.rc_max_rate = pd->confdata.rc_max_rate * 1000; + pd->ff_vcontext.rc_buffer_size = pd->confdata.rc_buffer_size * 1024; +- pd->ff_vcontext.lmin = (int)(FF_QP2LAMBDA * pd->confdata.lmin + 0.5); +- pd->ff_vcontext.lmax = (int)(FF_QP2LAMBDA * pd->confdata.lmax + 0.5); +- pd->ff_vcontext.me_method = ME_ZERO + pd->confdata.me_method; ++ snprintf(buf, sizeof(buf), "%i", (int)(FF_QP2LAMBDA * pd->confdata.lmin + 0.5)); ++ av_dict_set(&(pd->ff_opts), "lmin", buf, 0); ++ snprintf(buf, sizeof(buf), "%i", (int)(FF_QP2LAMBDA * pd->confdata.lmax + 0.5)); ++ av_dict_set(&(pd->ff_opts), "lmax", buf, 0); + + pd->ff_vcontext.flags = 0; + SET_FLAG(pd, qpel); +@@ -1075,8 +1080,8 @@ static void tc_lavc_dispatch_settings(TC + } + if (pd->interlacing.active) { + /* enforce interlacing */ +- pd->ff_vcontext.flags |= CODEC_FLAG_INTERLACED_DCT; +- pd->ff_vcontext.flags |= CODEC_FLAG_INTERLACED_ME; ++ pd->ff_vcontext.flags |= AV_CODEC_FLAG_INTERLACED_DCT; ++ pd->ff_vcontext.flags |= AV_CODEC_FLAG_INTERLACED_ME; + } + if (pd->confdata.flags.alt) { + av_dict_set(&(pd->ff_opts), "alternate_scan", "1", 0); +@@ -1100,14 +1105,24 @@ static void tc_lavc_dispatch_settings(TC + av_dict_set(&(pd->ff_opts), "mpv_flags", "+naq", 0); + } + +- char buf[1024]; + #define set_dict_opt(val, opt) \ + snprintf(buf, sizeof(buf), "%i", pd->confdata.val);\ + av_dict_set(&(pd->ff_opts), opt, buf, 0) ++#define set_dict_float_opt(val, opt) \ ++ snprintf(buf, sizeof(buf), "%f", pd->confdata.val);\ ++ av_dict_set(&(pd->ff_opts), opt, buf, 0) + + set_dict_opt(luma_elim_threshold, "luma_elim_threshold"); + set_dict_opt(chroma_elim_threshold, "chroma_elim_threshold"); + set_dict_opt(quantizer_noise_shaping, "quantizer_noise_shaping"); ++ set_dict_opt(inter_quant_bias, "pbias"); ++ set_dict_opt(intra_quant_bias, "ibias"); ++ set_dict_opt(me_method, "me_method"); ++ set_dict_opt(scenechange_factor, "sc_factor"); ++ set_dict_opt(rc_strategy, "rc_strategy"); ++ set_dict_float_opt(rc_initial_cplx, "rc_init_cplx"); ++ set_dict_float_opt(rc_qsquish, "qsquish"); ++ set_dict_float_opt(border_masking, "border_mask"); + } + + #undef SET_FLAG +@@ -1168,7 +1189,7 @@ static int tc_lavc_read_config(TCLavcPri + { "me_range", PCTX(me_range), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16000 }, + { "mbd", PCTX(mb_decision), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 3 }, + { "sc_threshold", PCTX(scenechange_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1000000, 1000000 }, +- { "sc_factor", PCTX(scenechange_factor), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 16 }, ++ { "sc_factor", PAUX(scenechange_factor), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 16 }, + { "vb_strategy", PCTX(b_frame_strategy), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10 }, + { "b_sensitivity", PCTX(b_sensitivity), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 100 }, + { "brd_scale", PCTX(brd_scale), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 10 }, +@@ -1179,7 +1200,7 @@ static int tc_lavc_read_config(TCLavcPri + { "vrc_maxrate", PAUX(rc_max_rate), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 24000000 }, + { "vrc_minrate", PAUX(rc_min_rate), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 24000000 }, + { "vrc_buf_size", PAUX(rc_buffer_size), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 4, 24000000 }, +- { "vrc_strategy", PCTX(rc_strategy), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2 }, ++ { "vrc_strategy", PAUX(rc_strategy), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2 }, + { "vb_qfactor", PCTX(b_quant_factor), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0 }, + { "vi_qfactor", PCTX(i_quant_factor), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0 }, + { "vb_qoffset", PCTX(b_quant_offset), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 31.0 }, +@@ -1189,9 +1210,9 @@ static int tc_lavc_read_config(TCLavcPri + { "mpeg_quant", PCTX(mpeg_quant), TCCONF_TYPE_FLAG, 0, 0, 1 }, + // { "vrc_eq", }, // not yet supported + { "vrc_override", rc_override_buf, TCCONF_TYPE_STRING, 0, 0, 0 }, +- { "vrc_init_cplx", PCTX(rc_initial_cplx), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 9999999.0 }, ++ { "vrc_init_cplx", PAUX(rc_initial_cplx), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 9999999.0 }, + // { "vrc_init_occupancy", }, // not yet supported +- { "vqsquish", PCTX(rc_qsquish), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 99.0 }, ++ { "vqsquish", PAUX(rc_qsquish), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 99.0 }, + { "vlelim", PAUX(luma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 }, + { "vcelim", PAUX(chroma_elim_threshold), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 }, + { "vstrict", PCTX(strict_std_compliance), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99 }, +@@ -1203,7 +1224,7 @@ static int tc_lavc_read_config(TCLavcPri + { "tcplx_mask", PCTX(temporal_cplx_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 }, + { "scplx_mask", PCTX(spatial_cplx_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 }, + { "p_mask", PCTX(p_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 }, +- { "border_mask", PCTX(border_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 }, ++ { "border_mask", PAUX(border_masking), TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 1.0 }, + { "pred", PCTX(prediction_method), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 4 }, + { "precmp", PCTX(me_pre_cmp), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000 }, + { "cmp", PCTX(me_cmp), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000 }, +@@ -1216,37 +1237,37 @@ static int tc_lavc_read_config(TCLavcPri + { "pre_me", PCTX(pre_me), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000}, + { "subq", PCTX(me_subpel_quality), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 8 }, + { "refs", PCTX(refs), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 8 }, +- { "ibias", PCTX(intra_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 }, +- { "pbias", PCTX(inter_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 }, ++ { "ibias", PAUX(intra_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 }, ++ { "pbias", PAUX(inter_quant_bias), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512 }, + { "nr", PCTX(noise_reduction), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000000}, + { "qns", PAUX(quantizer_noise_shaping), TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 3 }, + { "inter_matrix_file", inter_matrix_file, TCCONF_TYPE_STRING, 0, 0, 0 }, + { "intra_matrix_file", intra_matrix_file, TCCONF_TYPE_STRING, 0, 0, 0 }, + + { "mv0", PAUX(flags.mv0), TCCONF_TYPE_FLAG, 0, 0, 1 }, + { "cbp", PAUX(flags.cbp), TCCONF_TYPE_FLAG, 0, 0, 1 }, +- { "qpel", PAUX(flags.qpel), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QPEL }, ++ { "qpel", PAUX(flags.qpel), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_QPEL }, + { "alt", PAUX(flags.alt), TCCONF_TYPE_FLAG, 0, 0, 1 }, +- { "ilme", PAUX(flags.ilme), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME }, +- { "ildct", PAUX(flags.ildct), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_DCT }, ++ { "ilme", PAUX(flags.ilme), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_INTERLACED_ME }, ++ { "ildct", PAUX(flags.ildct), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_INTERLACED_DCT }, + { "naq", PAUX(flags.naq), TCCONF_TYPE_FLAG, 0, 0, 1 }, + { "vdpart", PAUX(flags.vdpart), TCCONF_TYPE_FLAG, 0, 0, 1 }, + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + { "aic", PAUX(flags.aic), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_AIC }, + #else +- { "aic", PAUX(flags.aic), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED }, ++ { "aic", PAUX(flags.aic), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_AC_PRED }, + #endif + { "aiv", PAUX(flags.aiv), TCCONF_TYPE_FLAG, 0, 0, 1 }, + { "umv", PAUX(flags.umv), TCCONF_TYPE_FLAG, 0, 0, 1 }, +- { "psnr", PAUX(flags.psnr), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR }, ++ { "psnr", PAUX(flags.psnr), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_PSNR }, + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + { "trell", PAUX(flags.trell), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_TRELLIS_QUANT }, + #else + { "trell", PCTX(trellis), TCCONF_TYPE_FLAG, 0, 0, 1 }, + #endif +- { "gray", PAUX(flags.gray), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GRAY }, +- { "v4mv", PAUX(flags.v4mv), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_4MV }, +- { "closedgop", PAUX(flags.closedgop), TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CLOSED_GOP }, ++ { "gray", PAUX(flags.gray), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_GRAY }, ++ { "v4mv", PAUX(flags.v4mv), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_4MV }, ++ { "closedgop", PAUX(flags.closedgop), TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_CLOSED_GOP }, + + // { "turbo", PAUX(turbo_setup), TCCONF_TYPE_FLAG, 0, 0, 1 }, // not yet supported + /* End of the config file */ +--- a/export/export_ffmpeg.c ++++ b/export/export_ffmpeg.c +@@ -831,14 +831,11 @@ MOD_init + + lavc_venc_context->bit_rate = vob->divxbitrate * 1000; + lavc_venc_context->bit_rate_tolerance = lavc_param_vrate_tolerance * 1000; +- lavc_venc_context->lmin= (int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5); +- lavc_venc_context->lmax= (int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5); + lavc_venc_context->max_qdiff = lavc_param_vqdiff; + lavc_venc_context->qcompress = lavc_param_vqcompress; + lavc_venc_context->qblur = lavc_param_vqblur; + lavc_venc_context->max_b_frames = lavc_param_vmax_b_frames; + lavc_venc_context->b_quant_factor = lavc_param_vb_qfactor; +- lavc_venc_context->rc_strategy = lavc_param_vrc_strategy; + lavc_venc_context->b_frame_strategy = lavc_param_vb_strategy; + lavc_venc_context->b_quant_offset = lavc_param_vb_qoffset; + +@@ -846,8 +843,23 @@ MOD_init + #define set_dict_opt(val, opt) \ + snprintf(buf, sizeof(buf), "%i", val); \ + av_dict_set(&lavc_venc_opts, opt, buf, 0) ++#define set_dict_float_opt(val, opt) \ ++ snprintf(buf, sizeof(buf), "%f", val); \ ++ av_dict_set(&lavc_venc_opts, opt, buf, 0) + set_dict_opt(lavc_param_luma_elim_threshold, "luma_elim_threshold"); + set_dict_opt(lavc_param_chroma_elim_threshold, "chroma_elim_threshold"); ++ set_dict_opt((int)(FF_QP2LAMBDA * lavc_param_lmin + 0.5), "lmin"); ++ set_dict_opt((int)(FF_QP2LAMBDA * lavc_param_lmax + 0.5), "lmax"); ++ set_dict_opt(lavc_param_vrc_strategy, "rc_strategy"); ++ set_dict_float_opt(lavc_param_rc_qsquish, "qsquish"); ++ set_dict_float_opt(lavc_param_rc_qmod_amp, "rc_qmod_amp"); ++ set_dict_opt(lavc_param_rc_qmod_freq, "rc_qmod_freq"); ++ set_dict_opt(lavc_param_rc_eq, "rc_eq"); ++ set_dict_opt(lavc_param_vme, "me_method"); ++ set_dict_opt(lavc_param_ibias, "ibias"); ++ set_dict_opt(lavc_param_pbias, "pbias"); ++ set_dict_float_opt(lavc_param_rc_buffer_aggressivity, "rc_buf_aggressivity"); ++ set_dict_float_opt(lavc_param_rc_initial_cplx, "rc_init_cplx"); + lavc_venc_context->rtp_payload_size = lavc_param_packet_size; + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + if (lavc_param_packet_size) +@@ -856,15 +868,9 @@ MOD_init + lavc_venc_context->strict_std_compliance= lavc_param_strict; + lavc_venc_context->i_quant_factor = lavc_param_vi_qfactor; + lavc_venc_context->i_quant_offset = lavc_param_vi_qoffset; +- lavc_venc_context->rc_qsquish = lavc_param_rc_qsquish; +- lavc_venc_context->rc_qmod_amp = lavc_param_rc_qmod_amp; +- lavc_venc_context->rc_qmod_freq = lavc_param_rc_qmod_freq; +- lavc_venc_context->rc_eq = lavc_param_rc_eq; + lavc_venc_context->rc_max_rate = lavc_param_rc_max_rate * 1000; + lavc_venc_context->rc_min_rate = lavc_param_rc_min_rate * 1000; + lavc_venc_context->rc_buffer_size = lavc_param_rc_buffer_size * 1024; +- lavc_venc_context->rc_buffer_aggressivity= lavc_param_rc_buffer_aggressivity; +- lavc_venc_context->rc_initial_cplx = lavc_param_rc_initial_cplx; + lavc_venc_context->debug = lavc_param_debug; + lavc_venc_context->last_predictor_count= lavc_param_last_pred; + lavc_venc_context->pre_me = lavc_param_pre_me; +@@ -872,8 +878,6 @@ MOD_init + lavc_venc_context->pre_dia_size = lavc_param_pre_dia_size; + lavc_venc_context->me_subpel_quality = lavc_param_me_subpel_quality; + lavc_venc_context->me_range = lavc_param_me_range; +- lavc_venc_context->intra_quant_bias = lavc_param_ibias; +- lavc_venc_context->inter_quant_bias = lavc_param_pbias; + lavc_venc_context->coder_type = lavc_param_coder; + lavc_venc_context->context_model = lavc_param_context; + lavc_venc_context->scenechange_threshold= lavc_param_sc_threshold; +@@ -1081,6 +1085,8 @@ MOD_init + av_dict_set(&lavc_venc_opts, "mpv_flags", "+mv0", 0); + if(lavc_param_qp_rd) + av_dict_set(&lavc_venc_opts, "mpv_flags", "+qp_rd", 0); ++ if (lavc_param_normalize_aqp) ++ av_dict_set(&lavc_venc_opts, "mpv_flags", "+naq", 0); + lavc_venc_context->flags |= lavc_param_ilme; + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + lavc_venc_context->flags |= lavc_param_trell; +@@ -1089,9 +1095,7 @@ MOD_init + #endif + + if (lavc_param_gray) +- lavc_venc_context->flags |= CODEC_FLAG_GRAY; +- if (lavc_param_normalize_aqp) +- av_dict_set(&lavc_venc_opts, "mpv_flags", "+naq", 0); ++ lavc_venc_context->flags |= AV_CODEC_FLAG_GRAY; + + switch(vob->encode_fields) { + case TC_ENCODE_FIELDS_TOP_FIRST: +@@ -1109,9 +1113,9 @@ MOD_init + } + + lavc_venc_context->flags |= interlacing_active ? +- CODEC_FLAG_INTERLACED_DCT : 0; ++ AV_CODEC_FLAG_INTERLACED_DCT : 0; + lavc_venc_context->flags |= interlacing_active ? +- CODEC_FLAG_INTERLACED_ME : 0; ++ AV_CODEC_FLAG_INTERLACED_ME : 0; + + lavc_venc_context->flags |= lavc_param_psnr; + do_psnr = lavc_param_psnr; +@@ -1158,7 +1162,7 @@ MOD_init + "encoding."); + return TC_EXPORT_ERROR; + } +- lavc_venc_context->flags |= CODEC_FLAG_PASS1; ++ lavc_venc_context->flags |= AV_CODEC_FLAG_PASS1; + stats_file = fopen(vob->divxlogfile, "w"); + if (stats_file == NULL){ + tc_log_warn(MOD_NAME, "Could not create 2pass log file \"%s\".", +@@ -1172,7 +1176,7 @@ MOD_init + "encoding."); + return TC_EXPORT_ERROR; + } +- lavc_venc_context->flags |= CODEC_FLAG_PASS2; ++ lavc_venc_context->flags |= AV_CODEC_FLAG_PASS2; + stats_file= fopen(vob->divxlogfile, "r"); + if (stats_file==NULL){ + tc_log_warn(MOD_NAME, "Could not open 2pass log file \"%s\" for " +@@ -1203,12 +1207,11 @@ MOD_init + break; + case 3: + /* fixed qscale :p */ +- lavc_venc_context->flags |= CODEC_FLAG_QSCALE; ++ lavc_venc_context->flags |= AV_CODEC_FLAG_QSCALE; + lavc_venc_frame->quality = vob->divxbitrate; + break; + } + +- lavc_venc_context->me_method = ME_ZERO + lavc_param_vme; + + /* FIXME: transcode itself contains "broken ffmpeg default settings", thus we need to override them! */ + if (lavc_param_video_preset && strcmp(lavc_param_video_preset, "none")) { +--- a/export/ffmpeg_cfg.c ++++ b/export/ffmpeg_cfg.c +@@ -93,8 +93,8 @@ int lavc_param_last_pred= 0; + int lavc_param_pre_me= 1; + int lavc_param_me_subpel_quality= 8; + int lavc_param_me_range=0; +-int lavc_param_ibias=FF_DEFAULT_QUANT_BIAS; +-int lavc_param_pbias=FF_DEFAULT_QUANT_BIAS; ++int lavc_param_ibias=0; ++int lavc_param_pbias=0; + int lavc_param_coder=0; + int lavc_param_context=0; + char *lavc_param_intra_matrix = NULL; +@@ -136,7 +136,7 @@ TCConfigEntry lavcopts_conf[]={ + {"vratetol", &lavc_param_vrate_tolerance, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 4, 24000000}, + {"vhq", &lavc_param_mb_decision, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"mbd", &lavc_param_mb_decision, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 9}, +- {"v4mv", &lavc_param_v4mv, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_4MV}, ++ {"v4mv", &lavc_param_v4mv, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_4MV}, + {"vme", &lavc_param_vme, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 5}, + // {"vqscale", &lavc_param_vqscale, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31}, + // {"vqmin", &lavc_param_vqmin, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 1, 31}, +@@ -158,7 +158,7 @@ TCConfigEntry lavcopts_conf[]={ + {"vstrict", &lavc_param_strict, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -99, 99}, + {"vdpart", &lavc_param_data_partitioning, TCCONF_TYPE_FLAG, 0, 0, 1}, + // {"keyint", &lavc_param_keyint, TCCONF_TYPE_INT, 0, 0, 0}, +- {"gray", &lavc_param_gray, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_GRAY}, ++ {"gray", &lavc_param_gray, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_GRAY}, + {"mpeg_quant", &lavc_param_mpeg_quant, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"vi_qfactor", &lavc_param_vi_qfactor, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, -31.0, 31.0}, + {"vi_qoffset", &lavc_param_vi_qoffset, TCCONF_TYPE_FLOAT, TCCONF_FLAG_RANGE, 0.0, 31.0}, +@@ -184,7 +184,7 @@ TCConfigEntry lavcopts_conf[]={ + {"pred", &lavc_param_prediction_method, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 20}, + {"format", &lavc_param_format, TCCONF_TYPE_STRING, 0, 0, 0}, + {"debug", &lavc_param_debug, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 100000000}, +- {"psnr", &lavc_param_psnr, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_PSNR}, ++ {"psnr", &lavc_param_psnr, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_PSNR}, + {"precmp", &lavc_param_me_pre_cmp, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000}, + {"cmp", &lavc_param_me_cmp, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000}, + {"subcmp", &lavc_param_me_sub_cmp, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000}, +@@ -192,9 +192,9 @@ TCConfigEntry lavcopts_conf[]={ + {"ildctcmp", &lavc_param_ildct_cmp, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 2000}, + {"predia", &lavc_param_pre_dia_size, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -2000, 2000}, + {"dia", &lavc_param_dia_size, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -2000, 2000}, +- {"qpel", &lavc_param_qpel, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_QPEL}, ++ {"qpel", &lavc_param_qpel, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_QPEL}, + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) +- {"trell", &lavc_param_trell, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_TRELLIS_QUANT}, ++ {"trell", &lavc_param_trell, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_TRELLIS_QUANT}, + #else + {"trell", &lavc_param_trell, TCCONF_TYPE_FLAG, 0, 0, 1}, + #endif +@@ -203,9 +203,9 @@ TCConfigEntry lavcopts_conf[]={ + {"subq", &lavc_param_me_subpel_quality, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 8}, + {"me_range", &lavc_param_me_range, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16000}, + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) +- {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_H263P_AIC}, ++ {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_H263P_AIC}, + #else +- {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_AC_PRED}, ++ {"aic", &lavc_param_aic, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_AC_PRED}, + #endif + {"umv", &lavc_param_umv, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"ibias", &lavc_param_ibias, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -512, 512}, +@@ -222,13 +222,13 @@ TCConfigEntry lavcopts_conf[]={ + {"ss", &lavc_param_ss, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"svcd_sof", &lavc_param_scan_offset, TCCONF_TYPE_FLAG, 0, 0, 1}, + {"alt", &lavc_param_alt, TCCONF_TYPE_FLAG, 0, 0, 1}, +- {"ilme", &lavc_param_ilme, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_INTERLACED_ME}, ++ {"ilme", &lavc_param_ilme, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_INTERLACED_ME}, + {"inter_threshold", &lavc_param_inter_threshold, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1000000, 1000000}, + {"sc_threshold", &lavc_param_sc_threshold, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1000000, 1000000}, + {"top", &lavc_param_top, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, -1, 1}, + {"gmc", &lavc_param_gmc, TCCONF_TYPE_FLAG, 0, 0, 1}, +- {"trunc", &lavc_param_trunc, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_TRUNCATED}, +- {"closedgop", &lavc_param_closedgop, TCCONF_TYPE_FLAG, 0, 0, CODEC_FLAG_CLOSED_GOP}, ++ {"trunc", &lavc_param_trunc, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_TRUNCATED}, ++ {"closedgop", &lavc_param_closedgop, TCCONF_TYPE_FLAG, 0, 0, AV_CODEC_FLAG_CLOSED_GOP}, + {"intra_dc_precision", &lavc_param_intra_dc_precision, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 16}, + {"skip_top", &lavc_param_skip_top, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000}, + {"skip_bottom", &lavc_param_skip_bottom, TCCONF_TYPE_INT, TCCONF_FLAG_RANGE, 0, 1000}, +--- a/import/import_ffmpeg.c ++++ b/import/import_ffmpeg.c +@@ -310,7 +310,7 @@ do_avi: + lavc_dec_context->width = x_dim; + lavc_dec_context->height = y_dim; + +- if (vob->decolor) lavc_dec_context->flags |= CODEC_FLAG_GRAY; ++ if (vob->decolor) lavc_dec_context->flags |= AV_CODEC_FLAG_GRAY; + #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) + lavc_dec_context->error_resilience = 2; + #else +--- a/filter/filter_resample.c ++++ b/filter/filter_resample.c +@@ -37,6 +37,7 @@ + #include "libtc/optstr.h" + #include "libtc/tcavcodec.h" + #include "libtc/tcmodule-plugin.h" ++#include + + + typedef struct { +@@ -45,7 +46,7 @@ typedef struct { + + int bytes_per_sample; + +- ReSampleContext *resample_ctx; ++ AVAudioResampleContext *resample_ctx; + } ResamplePrivateData; + + static const char resample_help[] = "" +--- a/import/probe_ffmpeg.c ++++ b/import/probe_ffmpeg.c +@@ -51,8 +51,8 @@ static void translate_info(const AVFormatContext *ctx, ProbeInfo *info) + info->bitrate = st->codec->bit_rate / 1000; + info->width = st->codec->width; + info->height = st->codec->height; +- if (st->r_frame_rate.num > 0 && st->r_frame_rate.den > 0) { +- info->fps = av_q2d(st->r_frame_rate); ++ if (st->avg_frame_rate.num > 0 && st->avg_frame_rate.den > 0) { ++ info->fps = av_q2d(st->avg_frame_rate); + } else { + /* watch out here */ + info->fps = 1.0/av_q2d(st->codec->time_base); diff --git a/transcode/transcode-sndio.patch b/transcode/transcode-sndio.patch new file mode 100644 index 0000000..09d387c --- /dev/null +++ b/transcode/transcode-sndio.patch @@ -0,0 +1,448 @@ +diff --git a/acinclude.m4 b/acinclude.m4 +index d89f9f6..1759b50 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -284,6 +284,38 @@ fi + + dnl ----------------------------------------------------------------------- + ++dnl TC_CHECK_SNDIO([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) ++dnl Test for sndio headers ++dnl ++AC_DEFUN([TC_CHECK_SNDIO], ++[ ++AC_MSG_CHECKING([whether sndio support is requested]) ++AC_ARG_ENABLE(sndio, ++ AC_HELP_STRING([--enable-sndio], ++ [enable sndio support (no)]), ++ [case "${enableval}" in ++ yes) ;; ++ no) ;; ++ *) AC_MSG_ERROR(bad value ${enableval} for --enable-sndio) ;; ++ esac], ++ [enable_sndio=no]) ++AC_MSG_RESULT($enable_sndio) ++ ++have_sndio="no" ++if test x"$enable_sndio" = x"yes" ; then ++ AC_CHECK_HEADERS([sndio.h], [have_sndio="yes"]) ++ ++ if test x"$have_sndio" = x"yes" ; then ++ have_sndio="yes" ++ ifelse([$1], , :, [$1]) ++ else ++ AC_MSG_ERROR([sndio is requested, but cannot find headers]) ++ fi ++fi ++]) ++ ++dnl ----------------------------------------------------------------------- ++ + dnl TC_CHECK_OSS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) + dnl Test for OSS headers + dnl +diff --git a/configure.in b/configure.in +index 03178c3..65567ae 100644 +--- a/configure.in ++++ b/configure.in +@@ -721,6 +721,12 @@ TC_CHECK_SUNAU(AC_DEFINE([HAVE_SUNAU], 1, [Have Sun style audio(4)])) + AM_CONDITIONAL(HAVE_SUNAU, test x"$have_sunau" = x"yes") + + dnl ++dnl sndio ++dnl ++TC_CHECK_SNDIO(AC_DEFINE([HAVE_SNDIO], 1, [Have sndio(7) audio])) ++AM_CONDITIONAL(HAVE_SNDIO, test x"$have_sndio" = x"yes") ++ ++dnl + dnl OSS + dnl + TC_CHECK_OSS(AC_DEFINE([HAVE_OSS], 1, [Have OSS audio])) +@@ -1406,6 +1412,7 @@ ALSA $have_alsa + OSS $have_oss + bktr $have_bktr + sunau $have_sunau ++sndio $have_sndio + + optional module support + ---------------------------------------- +diff --git a/import/Makefile.am b/import/Makefile.am +index fa0218f..c1ac26c 100644 +--- a/import/Makefile.am ++++ b/import/Makefile.am +@@ -59,6 +59,10 @@ if HAVE_SUNAU + IMPORT_SUNAU = import_sunau.la + endif + ++if HAVE_SNDIO ++IMPORT_SNDIO = import_sndio.la ++endif ++ + if HAVE_LIBXML2 + IMPORT_XML = import_xml.la + endif +@@ -103,6 +107,7 @@ pkg_LTLIBRARIES = \ + import_pvn.la \ + import_raw.la \ + $(IMPORT_SUNAU) \ ++ $(IMPORT_SNDIO) \ + import_vag.la \ + import_vnc.la \ + import_vob.la \ +@@ -199,6 +204,10 @@ import_raw_la_LDFLAGS = -module -avoid-version + import_sunau_la_SOURCES = import_sunau.c + import_sunau_la_LDFLAGS = -module -avoid-version + ++import_sndio_la_SOURCES = import_sndio.c ++import_sndio_la_LDFLAGS = -module -avoid-version ++import_sndio_la_LIBADD = -lsndio ++ + import_vag_la_SOURCES = import_vag.c + import_vag_la_LDFLAGS = -module -avoid-version + +diff --git b/import/import_sndio.c b/import/import_sndio.c +new file mode 100644 +index 0000000..864455b +--- /dev/null ++++ b/import/import_sndio.c +@@ -0,0 +1,340 @@ ++/* ++ * Copyright (c) 2009 Jacob Meuser ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++ ++#include "transcode.h" ++#include "libtc/optstr.h" ++ ++#include "libtc/tcmodule-plugin.h" ++ ++#define MOD_NAME "import_sndio.so" ++#define MOD_VERSION "v0.0.1 (2009-12-24)" ++#define MOD_CAP "capture audio using sndio" ++#define MOD_FEATURES \ ++ TC_MODULE_FEATURE_AUDIO | TC_MODULE_FEATURE_DEMULTIPLEX ++#define MOD_FLAGS \ ++ TC_MODULE_FLAG_RECONFIGURABLE ++ ++#include ++ ++static int sndio_init(void *, const char *, int, int, int); ++static int sndio_grab(void *, size_t, char *, size_t *); ++static int sndio_stop(void *); ++ ++struct tc_sndio_data { ++ struct sio_hdl *hdl; ++ struct sio_par par; ++}; ++ ++static const char tc_sndio_help[] = ++ "Overview:\n" ++ " Captures audio from sndio devices.\n" ++ "Options:\n" ++ " device=dev will use 'dev' as the sndio device\n" ++ " help prints this message\n"; ++ ++ ++static int ++sndio_init(void *data, const char *dev, int rate, int bits, int chan) ++{ ++ struct tc_sndio_data *d = data; ++ ++ if (!strncmp(dev, "/dev/null", 9) || ++ !strncmp(dev, "/dev/zero", 9) || ++ !strncmp(dev, "default", 7) || ++ !strncmp(dev, "", 1)) ++ d->hdl = sio_open(NULL, SIO_REC, 0); ++ else ++ d->hdl = sio_open(dev, SIO_REC, 0); ++ ++ if (!d->hdl) { ++ tc_log_error(MOD_NAME, "opening audio device failed"); ++ return TC_ERROR; ++ } ++ ++ sio_initpar(&d->par); ++ d->par.bits = bits; ++ d->par.sig = d->par.bits == 8 ? 0 : 1; ++ d->par.le = SIO_LE_NATIVE; ++ d->par.rchan = chan; ++ d->par.rate = rate; ++ d->par.xrun = SIO_SYNC; ++ ++ if (!sio_setpar(d->hdl, &d->par) || !sio_getpar(d->hdl, &d->par)) { ++ tc_log_error(MOD_NAME, "setting audio parameters failed"); ++ return TC_ERROR; ++ } ++ ++ if (d->par.bits != bits || d->par.rchan != chan || d->par.rate != rate) { ++ tc_log_error(MOD_NAME, "could not set audio parameters as desired"); ++ return TC_ERROR; ++ } ++ ++ if (!sio_start(d->hdl)) { ++ tc_log_error(MOD_NAME, "could not start capture"); ++ return TC_ERROR; ++ } ++ ++ return TC_OK; ++} ++ ++static int ++sndio_grab(void *data, size_t size, char *buffer, size_t *done) ++{ ++ struct tc_sndio_data *d = data; ++ size_t bytes_read; ++ int ret; ++ ++ if (!d->hdl) { ++ tc_log_error(MOD_NAME, "attempt to read NULL handle"); ++ return TC_ERROR; ++ } ++ ++ bytes_read = 0; ++ while (size > 0) { ++ ret = sio_read(d->hdl, buffer + bytes_read, size); ++ if (!ret) { ++ tc_log_error(MOD_NAME, "audio read failed"); ++ return TC_ERROR; ++ } ++ bytes_read += ret; ++ size -= ret; ++ } ++ if (done != NULL) ++ *done = bytes_read; ++ ++ return TC_OK; ++} ++ ++static int ++sndio_stop(void *data) ++{ ++ struct tc_sndio_data *d = data; ++ ++ if (d->hdl) ++ sio_close(d->hdl); ++ d->hdl = NULL; ++ ++ return TC_OK; ++} ++ ++ ++/* ------------------------------------------------------------ ++ * NMS interface ++ * ------------------------------------------------------------*/ ++ ++static int ++tc_sndio_init(TCModuleInstance *self, uint32_t features) ++{ ++ struct tc_sndio_data *d; ++ ++ TC_MODULE_SELF_CHECK(self, "init"); ++ TC_MODULE_INIT_CHECK(self, MOD_FEATURES, features); ++ ++ d = tc_zalloc(sizeof(struct tc_sndio_data)); ++ if (!d) ++ return TC_ERROR; ++ self->userdata = d; ++ ++ return TC_OK; ++} ++ ++static int ++tc_sndio_fini(TCModuleInstance *self) ++{ ++ TC_MODULE_SELF_CHECK(self, "fini"); ++ ++ tc_free(self->userdata); ++ self->userdata = NULL; ++ ++ return TC_OK; ++} ++ ++static int ++tc_sndio_inspect(TCModuleInstance *self, const char *param, const char **value) ++{ ++ TC_MODULE_SELF_CHECK(self, "inspect"); ++ ++ if (optstr_lookup(param, "help")) ++ *value = tc_sndio_help; ++ ++ return TC_OK; ++} ++ ++static int ++tc_sndio_configure(TCModuleInstance *self, const char *options, vob_t *vob) ++{ ++ struct tc_sndio_data *d = NULL; ++ char device[1024]; ++ ++ TC_MODULE_SELF_CHECK(self, "configure"); ++ ++ d = self->userdata; ++ ++ strlcpy(device, "default", 1024); ++ if (options) ++ optstr_get(options, "device", "%1023s", device); ++ ++ return sndio_init(d, device, vob->a_rate, vob->a_bits, vob->a_chan); ++} ++ ++static int ++tc_sndio_stop(TCModuleInstance *self) ++{ ++ struct tc_sndio_data *d = NULL; ++ ++ TC_MODULE_SELF_CHECK(self, "stop"); ++ ++ d = self->userdata; ++ ++ return sndio_stop(d); ++} ++ ++static int ++tc_sndio_demux(TCModuleInstance *self, vframe_list_t *vf, aframe_list_t *af) ++{ ++ struct tc_sndio_data *d = NULL; ++ size_t done; ++ ++ TC_MODULE_SELF_CHECK(self, "demultiplex"); ++ ++ d = self->userdata; ++ ++ if (vf) ++ vf->video_len = 0; ++ ++ if (af) { ++ if (sndio_grab(d, af->audio_size, af->audio_buf, &done) != TC_OK) ++ return TC_ERROR; ++ af->audio_len = done; ++ } ++ ++ return TC_OK; ++} ++ ++static const TCCodecID tc_sndio_codecs_in[] = ++ { TC_CODEC_ERROR }; ++static const TCCodecID tc_sndio_codecs_out[] = ++ { TC_CODEC_PCM, TC_CODEC_ERROR }; ++static const TCCodecID tc_sndio_formats_in[] = ++ { TC_FORMAT_RAW, TC_FORMAT_ERROR }; ++static const TCCodecID tc_sndio_formats_out[] = ++ { TC_CODEC_ERROR }; ++ ++static const TCModuleInfo tc_sndio_info = { ++ .features = MOD_FEATURES, ++ .flags = MOD_FLAGS, ++ .name = MOD_NAME, ++ .version = MOD_VERSION, ++ .description = MOD_CAP, ++ .codecs_in = tc_sndio_codecs_in, ++ .codecs_out = tc_sndio_codecs_out, ++ .formats_in = tc_sndio_formats_in, ++ .formats_out = tc_sndio_formats_out ++}; ++ ++static const TCModuleClass tc_sndio_class = { ++ TC_MODULE_CLASS_HEAD(tc_sndio), ++ .init = tc_sndio_init, ++ .fini = tc_sndio_fini, ++ .configure = tc_sndio_configure, ++ .stop = tc_sndio_stop, ++ .inspect = tc_sndio_inspect, ++ .demultiplex = tc_sndio_demux ++}; ++ ++TC_MODULE_ENTRY_POINT(tc_sndio) ++ ++ ++/* ------------------------------------------------------------ ++ * old interface ++ * ------------------------------------------------------------*/ ++ ++static int verbose_flag = TC_QUIET; ++static int capability_flag = TC_CAP_PCM; ++ ++#define MOD_PRE sndio ++#define MOD_CODEC "(audio) pcm" ++ ++#include "import_def.h" ++ ++static struct tc_sndio_data data; ++ ++MOD_open ++{ ++ int ret = TC_OK; ++ ++ switch (param->flag) { ++ case TC_VIDEO: ++ tc_log_warn(MOD_NAME, "unsupported request (open video)"); ++ ret = TC_ERROR; ++ break; ++ case TC_AUDIO: ++ if (verbose_flag & TC_DEBUG) ++ tc_log_info(MOD_NAME, "sndio audio capture"); ++ ret = sndio_init(&data, vob->audio_in_file, vob->a_rate, ++ vob->a_bits, vob->a_chan); ++ break; ++ default: ++ tc_log_warn(MOD_NAME, "unsupported request (open)"); ++ ret = TC_ERROR; ++ break; ++ } ++ ++ return ret; ++} ++ ++MOD_decode ++{ ++ int ret = TC_OK; ++ ++ switch (param->flag) { ++ case TC_VIDEO: ++ tc_log_error(MOD_NAME, "unsupported request (decode video)"); ++ ret = TC_ERROR; ++ break; ++ case TC_AUDIO: ++ ret = sndio_grab(&data, param->size, param->buffer, NULL); ++ break; ++ default: ++ tc_log_error(MOD_NAME, "unsupported request (decode)"); ++ ret = TC_ERROR; ++ break; ++ } ++ ++ return ret; ++} ++ ++MOD_close ++{ ++ int ret = TC_OK; ++ ++ switch (param->flag) { ++ case TC_VIDEO: ++ tc_log_error(MOD_NAME, "unsupported request (close video)"); ++ ret = TC_ERROR; ++ break; ++ case TC_AUDIO: ++ ret = sndio_stop(&data); ++ break; ++ default: ++ tc_log_error(MOD_NAME, "unsupported request (close)"); ++ ret = TC_ERROR; ++ break; ++ } ++ ++ return ret; ++} diff --git a/transcode/transcode-swresample.patch b/transcode/transcode-swresample.patch new file mode 100644 index 0000000..f2b8ee1 --- /dev/null +++ b/transcode/transcode-swresample.patch @@ -0,0 +1,20 @@ +--- transcode-1.1.7/filter/filter_resample.c.orig 2018-12-15 20:00:16.111657609 +0000 ++++ transcode-1.1.7/filter/filter_resample.c 2018-12-15 20:01:13.141800445 +0000 +@@ -37,7 +37,7 @@ + #include "libtc/optstr.h" + #include "libtc/tcavcodec.h" + #include "libtc/tcmodule-plugin.h" +-#include ++#include + + + typedef struct { +@@ -46,7 +46,7 @@ + + int bytes_per_sample; + +- AVAudioResampleContext *resample_ctx; ++ SwrContext *resample_ctx; + } ResamplePrivateData; + + static const char resample_help[] = "" diff --git a/transmission/PKGBUILD b/transmission/PKGBUILD new file mode 100644 index 0000000..2221563 --- /dev/null +++ b/transmission/PKGBUILD @@ -0,0 +1,90 @@ +# Maintainer: Jesus E. + +pkgbase=transmission +pkgname=('transmission-cli' 'transmission-gtk') +pkgver=3.00 +_debver=3.00 +_debrel=2 +pkgrel=3 +arch=('i686' 'x86_64') +url='http://www.transmissionbt.com/' +license=('GPL-3') +makedepends=('gtk' 'intltool' 'curl' 'libevent' 'quilt') +source=(https://github.com/transmission/transmission-releases/raw/master/transmission-${pkgver}.tar.xz + https://deb.debian.org/debian/pool/main/t/transmission/transmission_${_debver}-${_debrel}.debian.tar.xz + fix-icons.patch + transmission-daemon.initd + transmission-daemon.confd + transmission-daemon.run) +sha512sums=('eeaf7fe46797326190008776a7fa641b6341c806b0f1684c2e7326c1284832a320440013e42a37acda9fd0ee5dca695f215d6263c8acb39188c5d9a836104a61' + '219161b6833fe8d18df491ba61901b8520c2d4c8018b4819fb1b4475530088aeeb949013dffa34eb99b2b1cf97a5718ba7269d7816d217a797500cf4e8c2f253' + '356fa8b87dc3adf7e0ef45b161debcaee588d3b4b2aebc8225f7f4f7e0e77e6d1755fbc3f39412cec5688852338f618c97b2726f7794977e50c25ad028257c71' + '30d9fe7d06ca3c92ff436e9bbe84729a5b343b52965f8d1d3d43f14f5fa25881dbc9676c5d3d916cff552aad5872ed41c2930e9ce3a5f7c958dbeec0d1ab1ac4' + '47e78c85857eefb9be6c25d1e789cfb2a276d5816ba911ba1511e764469b2d9998edafe44247aff784113ca28926748bc5fb2b879280b780fd69ffb1e4e40736' + 'a21cc167a3ec845adf1e2b20585e7632dd64147e0f8b10b9d447be0e228433f76ff6c0bc85dca300bf6335e37428c86d9cfb3fc03127fae503cc68bde007475b') + +prepare() { + cd $pkgbase-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/systemd_service_fixes.patch || true + rm -v debian/patches/ayatana-indicators.patch || true + rm -v debian/patches/transmission-daemon_execstop_service.patch || true + + quilt push -av + fi + + # additional fixes + patch -Np1 -i ${srcdir}/fix-icons.patch + + rm -f m4/glib-gettext.m4 + autoreconf -fi +} + +build() { + cd $pkgbase-$pkgver + ./configure --prefix=/usr + make +} + +package_transmission-cli() { + pkgdesc='Fast, easy, and free BitTorrent client (CLI tools, daemon and web client)' + depends=('curl' 'libevent') + install=transmission-cli.install + + cd $pkgbase-$pkgver + + for dir in daemon cli web utils; do + make -C "$dir" DESTDIR="$pkgdir" install + done + + # install services + install -Dm 644 "${srcdir}/transmission-daemon.confd" "${pkgdir}/etc/conf.d/transmission-daemon" + install -Dm 755 "${srcdir}/transmission-daemon.initd" "${pkgdir}/etc/init.d/transmission-daemon" + install -D -m 755 "$srcdir/transmission-daemon.run" "$pkgdir/etc/sv/transmission-daemon/run" + + # license + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_transmission-gtk() { + pkgdesc='Fast, easy, and free BitTorrent client (GTK+ GUI)' + depends=('curl' 'libevent' 'gtk' 'desktop-file-utils' 'hicolor-icon-theme') + optdepends=('transmission-cli: daemon and web support') + + cd $pkgbase-$pkgver + + make -C gtk DESTDIR="$pkgdir" install + make -C po DESTDIR="$pkgdir" install + + # license + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/transmission/fix-icons.patch b/transmission/fix-icons.patch new file mode 100644 index 0000000..22cb0f1 --- /dev/null +++ b/transmission/fix-icons.patch @@ -0,0 +1,11 @@ +--- b/gtk/main.c 2020-05-22 13:04:23.000000000 +0200 ++++ c/gtk/main.c 2021-10-03 03:59:24.945500741 +0200 +@@ -973,7 +973,7 @@ + NULL); + gtk_container_add(GTK_CONTAINER(c), p); + +- w = gtk_image_new_from_icon_name(GTK_STOCK_NETWORK, GTK_ICON_SIZE_DIALOG); ++ w = gtk_image_new_from_stock (GTK_STOCK_NETWORK, GTK_ICON_SIZE_DIALOG); + gtk_grid_attach(GTK_GRID(p), w, 0, 0, 1, 2); + + w = gtk_label_new(NULL); diff --git a/transmission/transmission-cli.install b/transmission/transmission-cli.install new file mode 100644 index 0000000..b2cf439 --- /dev/null +++ b/transmission/transmission-cli.install @@ -0,0 +1,26 @@ +post_install() { + if ! getent group transmission &>/dev/null; then + groupadd -g 169 transmission >/dev/null + fi + if ! getent passwd transmission &>/dev/null; then + useradd -c 'Transmission BitTorrent Client' -u 169 -g transmission -b '/var/lib' -m -s /bin/nologin transmission >/dev/null + fi + passwd -l transmission >/dev/null + transmission_shell=$(getent passwd transmission | cut -d: -f7) + if [ "$transmission_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin transmission &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd transmission &>/dev/null; then + userdel transmission >/dev/null + fi + if getent group transmission &>/dev/null; then + groupdel transmission >/dev/null + fi +} diff --git a/transmission/transmission-daemon.confd b/transmission/transmission-daemon.confd new file mode 100644 index 0000000..64ecd80 --- /dev/null +++ b/transmission/transmission-daemon.confd @@ -0,0 +1,15 @@ +# This is the transmission-daemon configuration file. For other options and +# better explanation, take a look at transmission-daemon manual page Note: it's +# better to configure some settings (like username/password) in +# /var/lib/transmission/config/settings.json to avoid other users see it with `ps` + +# Parameters to pass to transmission-daemon +# TRANSMISSION_OPTIONS="" + +# Run daemon as another user (username or username:groupname) +# If you change this setting, chown -R /var/lib/transmission/config +#runas_user=transmission + +# Location of logfile (should be writeable for runas_user user) +# Set logfile=syslog to use syslog for logging +#logfile=/var/log/transmission/transmission.log diff --git a/transmission/transmission-daemon.initd b/transmission/transmission-daemon.initd new file mode 100644 index 0000000..a8afd2a --- /dev/null +++ b/transmission/transmission-daemon.initd @@ -0,0 +1,49 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/usr/bin/transmission-daemon" +extra_started_commands="reload" +description="Transmission is a fast, easy and free bittorrent client" +description_start="Start transmission-daemon server and web interface" +description_stop="Stop transmission-daemon server and web interface" +description_reload="Reload transmission-daemon settings" + +rundir=${rundir:-/var/run/transmission} +pidfile=${pidfile:-${rundir}/transmission.pid} +config_dir=${config_dir:-/var/lib/transmission/config} +download_dir=${download_dir:-/var/lib/transmission/downloads} +logfile=${logfile:-/var/log/transmission/transmission.log} +runas_user=${runas_user:-transmission:transmission} + +retry="TERM/45/QUIT/15" + +start_pre() { + command_args="--config-dir ${config_dir} --pid-file ${pidfile}" + command_user="${runas_user}" + + # Call mkdir -p in case parent dirs are missing + mkdir -p "${rundir}" "${config_dir}" "${download_dir}" + + # Call checkpath to fixup permissions + checkpath -d -o "${runas_user}" "${rundir}" "${config_dir}" "${download_dir}" || return + + if [ ! -e "${config_dir}/settings.json" ]; then + # Only set download dir if settings don't exist + # https://bugs.gentoo.org/576640 + command_args="${command_args} --download-dir ${download_dir}" + fi + + if [ "${logfile}" != syslog ]; then + checkpath -d -o "${runas_user}" /var/log/transmission || return + command_args="${command_args} --logfile ${logfile}" + fi + + command_args="${command_args} ${TRANSMISSION_OPTIONS}" +} + +reload() { + ebegin "Reloading ${RC_SVCNAME}" + start-stop-daemon --signal HUP --exec "${command}" --pidfile "${pidfile}" + eend $? +} diff --git a/transmission/transmission-daemon.run b/transmission/transmission-daemon.run new file mode 100644 index 0000000..07e3935 --- /dev/null +++ b/transmission/transmission-daemon.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec chpst -u transmission:transmission transmission-daemon -f --log-error diff --git a/transset-df/LICENSE b/transset-df/LICENSE new file mode 100644 index 0000000..934f31b --- /dev/null +++ b/transset-df/LICENSE @@ -0,0 +1,23 @@ +Copyright 1993, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. diff --git a/transset-df/PKGBUILD b/transset-df/PKGBUILD new file mode 100644 index 0000000..0856ccf --- /dev/null +++ b/transset-df/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=transset-df +pkgver=6 +pkgrel=6 +pkgdesc="A patched version of X.Org's transset with added functionality." +arch=('i686' 'x86_64') +url='https://forchheimer.se/transset-df/' +license=('X11') +depends=('libxcomposite' 'libxdamage' 'libxrender') +source=("https://forchheimer.se/${pkgname}/${pkgname}-${pkgver}.tar.gz" + 'LICENSE') +sha512sums=('0189c5960259b074e6a151151dc928f3462d41763ff3b677129f075f079b07e102cc8a7c3383d0737dc3a72100fb27076e061019f7b777f7f1306d9ede65c0ca' + 'fe1fa29c3366ab89585ec1d431607351970faf20f130b80a42ddc109e99e5da84491e15608405f8bfe45cb59c2130a584cc0b47d777aff0eae822a629d85a4ac') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + install -Dm0755 transset-df "${pkgdir}/usr/bin/transset-df" + install -Dm644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/tre/PKGBUILD b/tre/PKGBUILD new file mode 100644 index 0000000..8efb23d --- /dev/null +++ b/tre/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=tre +pkgver=0.8.0 +_debver=0.8.0 +_debrel=6 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc='POSIX compliant regexp matching library. Includes agrep for approximate grepping.' +url='https://laurikari.net/tre' +depends=('glibc') +makedepends=('quilt') +license=('Simplified-BSD') +source=("https://laurikari.net/tre/$pkgname-$pkgver.tar.bz2" + "https://deb.debian.org/debian/pool/main/t/tre/tre_$_debver-$_debrel.debian.tar.xz") +sha512sums=('db7465993e0d25eee8e52f974427b8a040234cf0f017769eb94ee88bc6261821336aad7f762bfa82db7e2212d8449bc221592586f061c528a59a550773cbc263' + 'dc66e38a074fe4d65a8440c1c5b23015b5a4254ad30240e76ea5d6d5bc1f46e552c5a99672879996cf6c3694ada133c92c05022b9570aec76f1512f0bfc16b89') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/99-autoreconf || true + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr --enable-static + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/$pkgname-$pkgver/LICENSE" \ + "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + install -d "$pkgdir/usr/share/doc/$pkgname" + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + + cd doc + for f in default.css tre-api.html tre-syntax.html; do + install -Dm644 "$f" "$pkgdir/usr/share/doc/$pkgname/$f" + done +} diff --git a/tree/PKGBUILD b/tree/PKGBUILD new file mode 100644 index 0000000..c780cc0 --- /dev/null +++ b/tree/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=tree +pkgver=2.1.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A directory listing program displaying a depth indented list of files" +arch=('i686' 'x86_64') +url='http://mama.indstate.edu/users/ice/tree/' +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/t/tree/tree_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/t/tree/tree_$_debver-$_debrel.debian.tar.xz") +sha512sums=('17947b17e5fd4d06aea17be0cb107340a0537fb60cd5ee76524ef6eca37a775dbe9a4a7060d54f90a64ac1310131bf76b878fdb4384ab1a5fcb3180787c35a87' + '6c32658106c849144d68fecd88ab08b2c46f20f9961fb7c83d48df5d96bd2edb59bf84aa8e5ca130fd2d6bd4290373328eec11f48fd4c7e508261495acc463a0') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make PREFIX="${pkgdir}/usr" MANDIR="${pkgdir}/usr/share/man" install + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/treesheets/PKGBUILD b/treesheets/PKGBUILD new file mode 100644 index 0000000..a99120b --- /dev/null +++ b/treesheets/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=treesheets +pkgver=1.0.2 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Free and libre data organizer that covers spreadsheets, mind mappers and small databases" +arch=('i686' 'x86_64') +url='https://strlen.com/treesheets/' +license=('zlib') +depends=('glibc' 'wxgtk3') +makedepends=('cmake' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/t/treesheets/treesheets_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/t/treesheets/treesheets_${_debver}-${_debrel}.debian.tar.xz" + "$pkgname.desktop") +sha512sums=('889ac62c0a884643925161229ea2c7f94e26ac8e3d78161c26e319b5baaa9db668d72017fc0430911c1b3f831dbc06b7e7efe3aca60f99b1ac2df343c906ca8d' + 'ea8bbaf9d6809ad6031b2c30cb7371f5276f14855fe98a700947c4a419e222355fd249ad83edac5ad0b586ee3fe31016efdd60c9759da8ba3dff5433e316dadf' + 'f9d7f2a092c2cfb3b942ac6becdafefcb78d30cfe9d304ea540bb1a56a4ade14e813ea071454cdd886bfd54200ec9254b97afc056fc7f7832edd49d1de7c52d8') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + export WX_CONFIG=wx-config-gtk3 + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DPACKAGE_VERSION="$pkgver-hyperbola" + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "$srcdir/$pkgname.desktop" -t "$pkgdir/usr/share/applications" + install -Dm644 "$srcdir/$pkgname-$pkgver/$pkgname/treesheets-32x32.png" "$pkgdir/usr/share/pixmaps/$pkgname.png" + install -Dm644 "$srcdir/$pkgname-$pkgver/debian/copyright" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/treesheets/treesheets.desktop b/treesheets/treesheets.desktop new file mode 100644 index 0000000..d1654e5 --- /dev/null +++ b/treesheets/treesheets.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=TreeSheets +GenericName=Treesheets +Comment=A hierarhical spreadsheet / outliner productivity tool. +TryExec=treesheets +Exec=treesheets %f +Terminal=false +Icon=treesheets +MimeType=application/x-treesheets; +Categories=Office; +Keywords=Mindmaps; Knowledge management; Organize information; Brainstorming; Hierarchical spreadsheet; diff --git a/trigger-rally/PKGBUILD b/trigger-rally/PKGBUILD new file mode 100644 index 0000000..95e6987 --- /dev/null +++ b/trigger-rally/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=trigger-rally +pkgver=0.6.6.1 +pkgrel=5 +pkgdesc="Free and libre OpenGL rally car racing game" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/trigger-rally/' +license=('GPL-2') +depends=('physfs' 'tinyxml2' 'freealut' 'glu' xdg-utils 'sdl2_image' 'glew') +makedepends=('tinyxml2' 'openal') +groups=('games') +install=trigger-rally.install +source=(https://sourceforge.net/projects/trigger-rally/files/trigger-$pkgver/$pkgname-$pkgver.tar.gz + $pkgname.png + $pkgname.desktop) +sha512sums=('feed805858ef63907bb10088761f1219b22fe55ead268511ef73b18aa0f18d79e87d4e2cbfb76361b1dec3949b59464af33efe31e81f06ae7e163430f3336669' + 'a7ebc8cb714755701b4e9b83cb4773679d1bbdae66ed1bd9dc747474b027fbda31c6e723cf4f910d833b16ae5e354660030dc9c7d86022006ed7f2f0e03c1d14' + '4452d0a879e2f4b4ddbd5204161fbd01cb973ca0f69812ed49d5691e5c74e1e0b17ee451291a90b757ab37d706873dae4f29c9717d6db4ab924c92c438b7fb87') + +build() { + cd $pkgname-$pkgver/src + make +} + +package() { + cd $pkgname-$pkgver/src + prefix="/usr" exec_prefix="/usr" make DESTDIR=$pkgdir install + install -Dm644 $srcdir/$pkgname.desktop $pkgdir/usr/share/applications/$pkgname.desktop + install -Dm644 $srcdir/$pkgname.png $pkgdir/usr/share/pixmaps/$pkgname.png + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/doc/COPYING.txt" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/trigger-rally/trigger-rally.desktop b/trigger-rally/trigger-rally.desktop new file mode 100644 index 0000000..aeeca6f --- /dev/null +++ b/trigger-rally/trigger-rally.desktop @@ -0,0 +1,10 @@ +#!/usr/bin/env xdg-open +[Desktop Entry] +Type=Application +Version=0.6.6.1 +Name=Trigger +Comment=Fast-paced 3D single-player rally racing game +Exec=trigger-rally +Icon=trigger-rally +Terminal=false +Categories=Game;ActionGame; diff --git a/trigger-rally/trigger-rally.install b/trigger-rally/trigger-rally.install new file mode 100644 index 0000000..b1f94ec --- /dev/null +++ b/trigger-rally/trigger-rally.install @@ -0,0 +1,3 @@ +post_install(){ + echo "Users wanting to play trigger should be on group games." +} diff --git a/trigger-rally/trigger-rally.png b/trigger-rally/trigger-rally.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce066320ca031d9f03d480f411d77a6918c20bd GIT binary patch literal 6137 zcmV9Mc;RRzstPuIq!MSxvzV_&tXKw+y@i{PRQ-;$NO}he+=)AHoz)i zXA<}g_yVYRmxb$4>JlYNNaxO-`7sVi|G!Q^N+9C9@4l0updcAAV89(1IB=ls*s+5G z?Y_&x9m2!IvAU5LUwqNAg8cvM1Qg(1R;W8GE{lqpjrCMHHsoH!w)MvanAojS?3ZQEqmu3a*A>{uByW{fOYu)wi^TEObK zxHwt3aG`YR(nb3B?=MG=9I-@=8#hi49Xe!x_`?rBNS{7^q(_e)mcVbm`Nm#P$&8DP zjFh=^=SuhP-KBT$-m-l8a*2|}&urvf2#`3zMII`bjco%;+ZIX5YSj?e9r4k29W>DpktvD_gd#gocLN&*{>o zvsycP^r*c3_S<&f0}nhPXV0Fs1oJz88yg!d7cN|o*I$3#?qlq_dGn@Bm@vV2Z@F{l zmihDNTSd{LcpO{nq_V&aAQHF%#CQm}0z^>|nqkwXP3^Hkg9bSQuG8Nfp%rrnEyG2C zPaAX>_3ypBIqrMql~;U(zw^#JJRZw+=px+r&_fSd7vbj|IdWKQaZsmDokRim#~**R z-=BN#Ik|lKvS_T?16%{90~wPdfXEJ11+IDsIH-Y!mJ;OrRR#P#a}y79)uLx8hIy1#e{7(95eJ*Pl{0D>q@%3rYv3h4dbO`Q?|Lo3H_pL21K=4K}s$ zW^2`|RXq+&JC? z76#S?p*~O|BG!A>jnqPFjRrb@8-sI|q!Y{Oz~jS`(((7K7V-kK^(1duh@H^&bkrb|@5U)QFQOo;V`K zi+?WFs`Y|-6!Dbw-fL${ZZmX0ks8>_K*hZM!1!uXIP#W{%c1<(^H z52W}z-QfKOQ{-{kzC9jwtVC3-D5s#+U2E20*LI8Fmo1aC5Izc3r@cJ{yf73?d%Jdx z`D5_lv8OtBE`j~k5CA440va2gnMH!}V`;f*N>48~0!y@nur z7D4Is>C?kHg4`rHIPs@3pY1cI+`mtNFIFuoU>pm|y=r z0*pxow1Y-2Auq~xEmE8<8XesY!$(_;I z0@m{^vrnM=yM^k`D|{HR9GHmnyOk^{As}}O>W4;fA$E_f``>-{U3tHLeVL3JV$>R;iK%LV)=N3(98X za@GZZ{PBmikPGL|NdyEygOEu0W55jTYl-u?9!uLch#5n%e+X&?c8?swutX;rjqrCe zvdA|$en2gTf-eT<0$p+}-6-}|D_`EO#WhJJ2_2d#lMF+h@Fw~cu0z5}Mm@xp zPab{Lt99uIbmSDvn7#Lo0An)6q)4&1J2b!+nPx~WakyF@H%%caEW0*Vf5j27I8rNC zteBL9MxS}+86RFmG1ChgJ%v)3x3&!!jFPw<&UFamnp~TtwnQr($UdP+5!-;#GHRi+ z`~-o~EBquCp6H2e@b?KYrWnv4sA?-LW0uc=KeHoaiOZQEZ}fSTxtz#Q+Z2wPXZuPL zI0GONY@rE$c7Oi`=8p6w3!&YTuo^yJ;2K`TLr1~O^`DxM~*~- zZ_vOw#6atAs^8h5B$(*(UHS9NyYP8xgf~S~r?wrT-2zkdkHR$B#&WP( z7{SmB?mq+zKsu9Q>C@YDcrMrAT3nNs!)x$bBj6sif@z#1f(%FS?|=)yC4gC=yN7^* z##H}X1fZIVnT*r+198U0w}wW_!2%qO^X44EsZE+XhoBU!5X_s?AP!X6-{;Ab#||ys z;JypU@4sRFmJp8T@LaCJwYa96h!Ln0S|`r)a!?g?P`?LxgeOKD)8TIs@U=1He?X3n zrH{ftE2z0UTBn&a*imcLwj+3cSPF&aWQVOV=X%*uyl~pf)|cRC?qm8|%^@eg^BkV* z5WzLM_A?-&FOG*M__Ry}mTB3`>X2!07Vx1T;Rz^l)PGKZG0y^9-BJ1s{4W?Ot&Ezy zSNMWBMvYUue6B#jDJ*Au9FuV*mL8@~@N;p1mEJ;*v_S^Xp;fp^D33KK;JS|1rvM)S zoE@wM=CMcuI=ck!<{@C3F^iK=fH6h2!HD-)k6%T4`gzF`898#K&BY{uCQF~D$vc{V z5V@IJc7*4si$f94?g)Nv4xGfAj zifwTC_w3rW63u}IwB&Y=>&OiI=FYX2!8t$2=6sOB6h_TbNC(e>7)j{cr9TL$4U$H< ze4SVTeBvjlHB|yi1ATQLvjbyBt5&V-b3~I6{o^_%{QdY&0?^DzK)^NBnj&mh(Zq0c zB^^5oR*~qSAo&w5E4w>RZuzA5I!Wl&OOU7qR}Gj#z6R}$Vh2~GPee_JQ!Wv8n{Lj3KO9)BmikJ z3U&C29Xk>YH3+^>zy~G=rcRX@_<2&ov$ptJi3sCJG0qsq#Pf;nX;{g%6VqaY%7)F?Z?;>K}RaOcia8G*_A z8vvn%(X1<21$1 zNW$;Ec-~8ZKG$@f7HKwUVq8;V`_Hzn<>yO?k=g53%go*bWl_$DY(a4hHTmH=bL^;! zFCRGD)%ELTD>Ods=IGD_#rHPUzW78$W_r_8JR zihK@@eSsop7&^Vpn>N|!^H=uo=cD0-l!%@`8lBpYh~Vwf0zU`$DGAc%OqgJw?NRtM zZQK5(;KXTQiAVTF)E)qJNxNhcP>t^ds5|g`Lw&J=0~yvBO29in0U)i9fS-Cld~L^s zB2p`OlDs!@zOOLpuAk`!rS5#m>x^2!6F^3~f+gVB z0-5#=f9)|T-Kd?E?K()R2Yo6H2alJ<+FnjdC>^CSkOz2NJ1my0afk=!5cD|XCkYoX zUX+t3Ps-snYb2iYKUR%N`2IeR)=73RKY}HP017-vF$#FW|66Y0+SCFH-?ji_D)MQ{ zEffk{pyghLi%F%L^`&HozA`>cODPohqU zV)cl)AS`ZZF|LOh%r;wGf=_dmsQ%FKF6r-6SIqd>n8+Odg@?Wj3Pl6`nJhqnLqH=z zAmfylCGQQ?-khS0%#llmKbYHhlOwd=rqC}XT*#8aW}^^ad_u+64Uu*;a&8zaLXNdq z6;gQDkTY6~9H*8aif(RQQcO72pSQn+jl@~OEm^m*Rc|Bx-C%DV->+l&^%Wqw^t`J@vc0- z*44rWdIZX>+DhYbg+|)$dPZ6{UZ@3yl}QjfNYNia8DYSQc>_TGV{!xOoapZ+pxsTc zfAVoNEdqs2ESi`dC~e!T(D^hLO!Zhr6L^0XG^*&x@Kx=9kl_P>DreOiVxqeNn<8Acbm~$6Bcce54i_nqX;>uNyPp zqjh+N>8Pm=Mq%=4&JRfX@whQB+qPB9%{^+W+(*k;9vmz~h76Ha@a?@FI>==dK;b&C z4^sDNsW-JSAeFq|s;kr=J6l@LTqa$=SSvx_ZA4oUdDJR;MvZad)r;0o1l3*STE z8131!ryYMgB(&Gom32UWm&wC@&Oc_%SdZ4RjA^O9&NK%dnKWLLzk>kyX&PvLDEu@k zR{i#C{d}crGC_Fac$3=%@PP$K>U?LgO`A5pqNQ2l362#WCGqcw6+>LY z!!QhDra{qYDgcPdCKI)8lJS-Zx0GZH)HOJ0%x+Ov*r<<`RyS@e%coD5@#Dwaw?aSs z@I(8)A74jZff|1cTVymyaaz&Ql@_H+ExnOW-+b+DsnqRb89BO10s)`gCSdhTiK986 z4t@Xq_tpwH1hH?7x~e*uempE;jh{e=PT0UJ%`-qQe}OJJ1Y}qCS|j?-fmSb*h_f2F z79hnfM#mT0s+G*0J=-=H95V2oKE9xM4Ar1JcEqdoa4fwhOAA5|}ruYaZ>&AcHFe4MZJ%0?mX|&7DxIV4PTvo?&~! z+ZpzmUQ!)jsMhIT0=nz_{(O(1e*OBs`5iF973I5XFJDP(`OL`;bjf~AP8VdClplCr zt)Z3r8>4N11k0JQg8i|4!m26rl-Bmkw5|P78=dp2`D;4f3e|eSOF$28Tlr|6ujH!m zh^sc*J5in{|6EcP-M#u>V@^<{Sv>$e0+iR-kcbGVU??2(t3$>di`NGxaT+f;#9Xh0 zcpp>G@r<+eakUkiqjBf$QQ)ZhJIVo57kEldKJ`D<`dwd}xZ{V}J5yO+Y>^~sPD5uhfQ zUArlo;i~|86w_Ag?mp_L1HjT42>0by6fEJKGAkLkbhPcY2#&K;-6{N^KnJbmA8`ts zf8#$+-pwM?s3!7i6t1Z5(M(OXo7Us~G-?k(T{;n^>ng^L&BmODC4{4Oy@((Gnbp7M z5ms!O%V1Z~J-_>}5#Wc2RC;4MG$NPK8?K{~nx-45X{(RAibIMUY++G!n!~_u?cw?R za!PW#du{Uf>`hUZd!*6Kkwb@#PpAMW-ppG7x@Yr&maHsbx@b!4q6k#$X%4)uC2h`s zn&0m`0ZCX!YOTt$X}T(`6(-tygO=aCtle5IMNK8DvJNfS$Yj0Ok^WzOUEW1TfC`dU zgV+PwtmIMic0i&Y)WRms{q*<$%IoqTdIfJ00000 LNkvXXu0mjfW){VH literal 0 HcmV?d00001 diff --git a/trisquel-gtk-theme/LICENSE b/trisquel-gtk-theme/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/trisquel-gtk-theme/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/trisquel-gtk-theme/PKGBUILD b/trisquel-gtk-theme/PKGBUILD new file mode 100644 index 0000000..875824c --- /dev/null +++ b/trisquel-gtk-theme/PKGBUILD @@ -0,0 +1,22 @@ +# Maintainer: Jesus E. + +pkgname=trisquel-gtk-theme +pkgver=9.0 +_pkgrel=4 +pkgrel=1 +pkgdesc='A GTK2 and GTK3+ theme from Trisquel.' +url='http://trisquel.info' +arch=('any') +license=('GPL-3') +optdepends=('gdk-pixbuf2: gtk2 theme support') +source=("http://archive.trisquel.info/trisquel/pool/main/t/${pkgname}/${pkgname}_${pkgver}-${_pkgrel}.tar.gz" + "LICENSE") +sha512sums=('17bbb8f8768aff3d4a75ba111bd05a02a19652d8eb953e66fae49f46c726a4822ee951ea8ceac2054bba96de2770ebce358f1258bf952bf3d124f2aedf9aa2cf' + '7633623b66b5e686bb94dd96a7cdb5a7e5ee00e87004fab416a5610d59c62badaf512a2e26e34e2455b7ed6b76690d2cd47464836d7d85d78b51d50f7e933d5c') + +package() { + cp -a ${srcdir}/${pkgname}-${pkgver}/data/usr ${pkgdir}/ + + # license + install -Dm644 "${srcdir}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/trisquel-icewm-theme/PKGBUILD b/trisquel-icewm-theme/PKGBUILD new file mode 100644 index 0000000..5ca2361 --- /dev/null +++ b/trisquel-icewm-theme/PKGBUILD @@ -0,0 +1,20 @@ +# Maintainer: Jesus E. + +pkgname=trisquel-icewm-theme +pkgver=1.4 +pkgrel=1 +pkgdesc="IceWM-theme inspired by the default theme of Trisquel GNU/Linux (with Hyperbola-branding)." +arch=('any') +url='https://www.box-look.org/p/1018259' +license=('GPL-3') +depends=('icewm') +source=("https://repo.hyperbola.info:50000/sources/${pkgname}/${pkgname}_${pkgver}.tar.lz"{,.sig}) +sha512sums=('a846758413876a88b0a1be478a58d1d5e486f166a62c57528d724e7dcaf0d4e7f32e369331b9a2ebda4f2f318196697ce31e6e40a1e509f95440075eb6d9fdd2' + 'SKIP') +validpgpkeys=('684D54A189305A9CC95446D36B888913DDB59515') # Márcio Silva + +package() { + install -d ${pkgdir}/usr/share/icewm/themes + cp -a ${srcdir}/Trisquel ${pkgdir}/usr/share/icewm/themes/ + install -Dm644 ${srcdir}/Trisquel/COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/tslib/PKGBUILD b/tslib/PKGBUILD new file mode 100644 index 0000000..f42ae6b --- /dev/null +++ b/tslib/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=tslib +pkgver=1.22 +pkgrel=1 +pkgdesc="Touchscreen Access Library" +arch=(i686 x86_64) +url="https://github.com/kergoth/tslib" +license=(LGPL-2.1) +depends=(glibc) +source=("https://github.com/kergoth/tslib/releases/download/$pkgver/$pkgname-$pkgver.tar.xz"{,.asc}) +sha512sums=('8f51fc5e37bb1babb89e8d6d5302c7d7b712820525bed0253f980028a78b343e4100065bbe0ecafb828a7edf3a9b77f96929ab79205d516ebbf6c25b32af0008' + 'SKIP') +validpgpkeys=(F2082B880F9E423934686E3F500398DF5AB387D3) # Martin Kepplinger + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} diff --git a/ttaenc/PKGBUILD b/ttaenc/PKGBUILD new file mode 100644 index 0000000..dc5ec37 --- /dev/null +++ b/ttaenc/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=ttaenc +pkgver=3.4.1 +pkgrel=1 +pkgdesc="TrueAudio free and libre, lossless compressor for multichannel 8,16 and 24 bits audio data" +arch=('i686' 'x86_64') +url='http://tta.sourceforge.net/' +license=('GPL-2') +source=("http://downloads.sourceforge.net/tta/${pkgname}-${pkgver}-src.tgz") +sha512sums=('489f9a2e0f94a82f12302f076e33062104e58688ffde97e742ad3c8c226bd0000133c539e9111e10f2d24c176e0b7ddd0a76e60bd3baafa53c29b3cd89ada06d') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}-src" + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}-src" + + install -Dm755 "${pkgname}" "${pkgdir}/usr/bin/${pkgname}" + install -dm755 "${pkgdir}/usr/share/doc/${pkgname}" + install -m644 "ChangeLog-${pkgver}" README "${pkgdir}/usr/share/doc/${pkgname}/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/ttf-dejavu/PKGBUILD b/ttf-dejavu/PKGBUILD new file mode 100644 index 0000000..6f75078 --- /dev/null +++ b/ttf-dejavu/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jesus E. + +pkgname=ttf-dejavu +pkgver=2.37 +pkgrel=2 +pkgdesc="Font family based on the Bitstream Vera Fonts with a wider range of characters" +arch=('any') +url="https://dejavu-fonts.github.io/" +license=('custom:Bitstream-Vera') +depends=('fontconfig' 'xenocara-font-encodings' 'xenocara-mkfontscale') +provides=('ttf-font') +source=(https://downloads.sourceforge.net/project/dejavu/dejavu/${pkgver}/dejavu-fonts-ttf-${pkgver}.tar.bz2) +sha512sums=('bafa39321021097432777f0825d700190c23f917d754a4504722cd8946716c22c083836294dab7f3ae7cf20af63c4d0944f3423bf4aa25dbca562d1f30e00654') + +package() { + install -dm755 "${pkgdir}"/etc/fonts/conf.avail + install -dm755 "${pkgdir}"/etc/fonts/conf.d + install -dm755 "${pkgdir}"/usr/share/fonts/TTF + + cd "${srcdir}"/dejavu-fonts-ttf-${pkgver} + install -m644 ttf/*.ttf "${pkgdir}"/usr/share/fonts/TTF/ + install -m644 fontconfig/*.conf "${pkgdir}"/etc/fonts/conf.avail/ + + pushd "${pkgdir}"/etc/fonts/conf.avail + for config in *; do + ln -sf ../conf.avail/${config} ../conf.d/${config} + done + popd + + install -Dm644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE +} diff --git a/ttf-liberation/PKGBUILD b/ttf-liberation/PKGBUILD new file mode 100644 index 0000000..57ec648 --- /dev/null +++ b/ttf-liberation/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=ttf-liberation +pkgver=2.1.4 +pkgrel=2 +pkgdesc="A font family which aims at metric compatibility with Arial, Times New Roman, and Courier New" +arch=('any') +license=('OFL-1.1') +url='https://github.com/liberationfonts/liberation-fonts' +makedepends=('fontforge' 'python-fonttools') +provides=('ttf-font') +source=("https://github.com/liberationfonts/liberation-fonts/archive/$pkgver/liberation-fonts-$pkgver.tar.gz") +sha512sums=('4a118369f052fc0c31b682002e31a8dbe714fb62a6e625988744b1486cce319fca71b2c5019087b5995cb88944faccc999194856fb87c6822d3dc059c7740162') + +build() { + cd liberation-fonts-$pkgver + make +} + +package() { + cd liberation-fonts-$pkgver + + install -Dm644 -t "$pkgdir/usr/share/fonts/${pkgname#ttf-}" \ + liberation-fonts-ttf-$pkgver/*.ttf + + # install license + install -Dm644 -t "$pkgdir/usr/share/licenses/$pkgname" LICENSE +} diff --git a/twolame/PKGBUILD b/twolame/PKGBUILD new file mode 100644 index 0000000..751fc44 --- /dev/null +++ b/twolame/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=twolame +pkgver=0.4.0 +_debver=0.4.0 +_debrel=2 +pkgrel=1 +pkgdesc="An optimized MPEG Audio Layer 2 (MP2) encoder" +arch=('i686' 'x86_64') +url="https://www.twolame.org/" +license=('LGPL-2.1') +depends=('glibc' 'libsndfile') +makedepends=('quilt') +source=("https://github.com/njh/${pkgname}/releases/download/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/t/twolame/twolame_$_debver-$_debrel.debian.tar.xz") +sha512sums=('cc594bc8d2322922280f915a3c0aa52540cca0350d6498bc96f3f60fd6e53f951e775ea015a44bdb29ec883b46b31a0e5483f6a5c188b02e30008289273c7d03' + '5e8ecc5a9b8984bdbe3cab2e50897807cbecbef45d958a01720e599783774a86169e854181520fc0b9ce459b1bc248b2017c896112d0555f48baabf75a79cdee') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr \ + --disable-static + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING +} diff --git a/txt2man/PKGBUILD b/txt2man/PKGBUILD new file mode 100644 index 0000000..f52de4a --- /dev/null +++ b/txt2man/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=txt2man +pkgver=1.7.1 +_debver=1.7.1 +_debrel=1 +pkgrel=1 +pkgdesc='Converts flat ASCII text to man page format' +arch=('any') +url='https://github.com/mvertes/txt2man' +license=('GPL-2') +depends=( 'bash' 'gawk') +makedepends=('quilt') +source=("https://github.com/mvertes/txt2man/archive/txt2man-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/t/txt2man/txt2man_$_debver-$_debrel.debian.tar.xz") +sha512sums=('550b1d30a4435f35d03920d89f5f2adc2a937de7575c4ddc51ee9f4fe370975b45e51f5aec0eb865ead4b16d88ad31f3150cd3235362b1fc7e6d7b3c6233852a' + 'f2c4e81169c3859ec45fd3124d1e6ca2a005968bc5f99c5d824f95df76a9051293de474fa791a4550dfb1437568df2dd7a581e9d589d4ed2231b56f5dba25199') + +prepare() { + cd "$srcdir"/txt2man-txt2man-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd "$srcdir"/txt2man-txt2man-$pkgver + PATH=./:$PATH make prefix="$pkgdir"/usr install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/txt2tags/PKGBUILD b/txt2tags/PKGBUILD new file mode 100644 index 0000000..bd9b70c --- /dev/null +++ b/txt2tags/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +pkgname=txt2tags +pkgver=3.4 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A text formatting and conversion tool." +arch=('any') +url='http://www.txt2tags.org' +license=('GPL-2') +depends=('python') +makedepends=('python-setuptools' 'quilt') +source=("http://deb.debian.org/debian/pool/main/t/txt2tags/txt2tags_$pkgver.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/t/txt2tags/txt2tags_$_debver-$_debrel.debian.tar.xz") +sha512sums=('493ac1826ffe69bbf27f333b3d38a207f33b4088cbe3e4109c143f4b53d925208cf1496d98aa7708fd35484dcb7a707139df502ecbfb8f911887c06e91a4d363' + 'dcaff3665849f26476131caaf30aa0a6ec42d89221b20e5f96edc0e6c52277864f517f689c99afdc7464a26cb11bded134bd18841078c3536b24f6320678a69c') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py build +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + python setup.py install --root="$pkgdir" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/uchardet/PKGBUILD b/uchardet/PKGBUILD new file mode 100644 index 0000000..da7afab --- /dev/null +++ b/uchardet/PKGBUILD @@ -0,0 +1,29 @@ +# Maintainer: Jesus E. + +pkgname=uchardet +pkgver=0.0.7 +pkgrel=1 +pkgdesc='Encoding detector library ported from Mozilla' +arch=('i686' 'x86_64') +url='https://www.freedesktop.org/wiki/Software/uchardet' +license=('MPL-1.1') +depends=('gcc-libs') +makedepends=('cmake') +source=(https://www.freedesktop.org/software/${pkgname}/releases/${pkgname}-${pkgver}.tar.xz) +sha512sums=('ddb7b63dd09c1d9acbe620d86217e583d9aa5340780ab4010ec9faa4fd331498859d5efa7829bf8847da89325accf8f7304b51d410210178fc1ffa6658064a6f') + +build() { + cd ${pkgname}-${pkgver} + + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=Release + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}/" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/ucl/PKGBUILD b/ucl/PKGBUILD new file mode 100644 index 0000000..3419363 --- /dev/null +++ b/ucl/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=ucl +pkgver=1.03 +_debver=1.03+repack +_debrel=6 +pkgrel=8 +pkgdesc="Portable lossless data compression library written in ANSI C" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc') +makedepends=('quilt') +url="https://www.oberhumer.com/opensource/ucl/" +source=("https://www.oberhumer.com/opensource/$pkgname/download/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/u/ucl/ucl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('7dd1824d01b4bb41ee03bbceddc634a9f7f910d235e5cca163d783680d6743f0f3cc309bbbcc1e094d897d549d3805a555f9093b4d77805443d896dd1862aa34' + '9ee2cab5d74db52381ba44ec4d2adf3b0ead245cc902d9a3dda16c56b0c58adbf998a20d7bd7c94128b5a082cc3b8c5cd288c47dcb24577a128bcb7a229f68c9') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + CFLAGS+=" -std=gnu90 -fPIC" + ./configure --prefix=/usr --enable-shared --disable-static + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/udns/PKGBUILD b/udns/PKGBUILD new file mode 100644 index 0000000..9831e79 --- /dev/null +++ b/udns/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=udns +pkgver=0.4 +pkgrel=1 +pkgdesc="Stub DNS resolver library with ability to perform both syncronous and asyncronous DNS queries" +url='http://www.corpit.ru/mjt/udns.html' +license=('LGPL-2.1') +arch=('i686' 'x86_64') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/u/udns/udns_${pkgver}.orig.tar.gz") +sha512sums=('2990d57b3b6bf176a12ee07fd4391921e13634fc8409e8ce4df8dbe7b3556a116ae59ab328a1b6a95ebc94298f6b56ec7197a06a649d8d642b371b8ecef3e40b') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + sed -i 's/LDLAGS/LDFLAGS/' Makefile.in +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure + make + make sharedlib +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + install -D -m0755 dnsget "${pkgdir}/usr/bin/dnsget" + install -D -m0755 rblcheck "${pkgdir}/usr/bin/rblcheck" + install -D -m0755 ex-rdns "${pkgdir}/usr/bin/ex-rdns" + + install -D -m0644 udns.h "${pkgdir}/usr/include/udns.h" + install -D -m0755 libudns.so.0 "${pkgdir}/usr/lib/libudns.so.0" + ln -s libudns.so.0 "${pkgdir}/usr/lib/libudns.so" + + install -D -m0644 dnsget.1 "${pkgdir}/usr/share/man/man1/dnsget.1" + install -D -m0644 rblcheck.1 "${pkgdir}/usr/share/man/man1/rblcheck.1" + install -D -m0644 udns.3 "${pkgdir}/usr/share/man/man3/udns.3" + + install -D -m0644 COPYING.LGPL -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/udpcast/PKGBUILD b/udpcast/PKGBUILD new file mode 100644 index 0000000..6a229d5 --- /dev/null +++ b/udpcast/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=udpcast +pkgver=20120424 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Network multicasting tool" +arch=('i686' 'x86_64') +url='http://udpcast.linux.lu/' +license=('Simplified-BSD') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/u/udpcast/udpcast_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/u/udpcast/udpcast_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('b16a1d3215cbefba1e4d6bb0b38f4715e476c41ddc93fa1a38c5e707af786f4a97badd1eea494f7838f276f370af414d8379db04a14b9b3ff32a1318f16db33d' + '61c494f30c6b85188fc57c9f77206186a298b7f275167a6e37ad86522dcb9bb6a1d664a133438efd6ad2c319194a3498d9a0fea797d9697beff5c5330e123e25') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}/" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/ufoai/PKGBUILD b/ufoai/PKGBUILD new file mode 100644 index 0000000..62e5d17 --- /dev/null +++ b/ufoai/PKGBUILD @@ -0,0 +1,86 @@ +# Maintainer: Jesus E. + +pkgname=ufoai +pkgver=2.5 +_debver=$pkgver +_debrel=6 +pkgrel=1 +pkgdesc="In 'UFO: Alien Invasion' you fight aliens trying to capture Earth" +url='http://ufoai.org/' +license=('GPL-2' 'Public-Domain') +arch=('i686' 'x86_64') +depends=('libjpeg-turbo' 'mesa-libgl' 'libpng' 'curl' 'sdl2_image' 'sdl2_mixer' + 'sdl2_ttf' 'libtheora' 'xvidcore' 'glu' 'openal' 'gtksourceview2' + 'gtkglext') +makedepends=('python' 'zip' 'quilt' 'intltool') +optdepends=('python: for compiling self-created maps') +groups=('games') +source=("https://sourceforge.net/projects/${pkgname}/files/UFO_AI%202.x/${pkgver}/${pkgname}-${pkgver}-source.tar.bz2" + "https://sourceforge.net/projects/${pkgname}/files/UFO_AI%202.x/${pkgver}/${pkgname}-${pkgver}-data.tar" + "https://deb.debian.org/debian/pool/main/u/ufoai/ufoai_${_debver}-${_debrel}.debian.tar.xz" + "fix-build.patch") +sha512sums=('072fe8820b1b242bb13f0820459fc27092b8597573231c8921c711859df39c8e28d9854e8a0300ebabb38cdeb99db16bed388a1391ba9f54100268b831db056f' + '9a7be359c82cd633db657c8619cb488b5d41b9f93cd10bdeffd5896d8a1ba3bb828b5969acd14c2a69abb3f53f18113af4ca19435aea80ded94d8df68b11deec' + 'dc03bd846aa168b75964f3a7eb3db9cfbbe4c1c7a5ff243b1c20aaa2be11285e516301905aa00db912ed87186c1cba4ae1b595af0ded549d37a22781e57aef03' + 'c33cc620dadaa7e0f679e30e9aba430a523c3cae6a6cded374a8dcd84d0ec7af869d997efae83e6f46cf51b2fe4d127c9759f5c61cdc9f088b015e65a150b36f') + +prepare() { + cd $pkgname-$pkgver-source + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches ./debian/ + rm -rf "$srcdir"/debian + + quilt push -av + fi + + # additional patches for building + patch -Np1 -i ${srcdir}/fix-build.patch + + # remove unsupported languages + rm ${srcdir}/$pkgname-$pkgver-source/src/po/ufoai-{ja,tr}.po +} + +build() { + cd $pkgname-$pkgver-source + + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games/$pkgname \ + --localedir=/usr/share/games/$pkgname/base/i18n \ + --libdir=/usr/lib/games/$pkgname \ + --enable-release \ + --enable-uforadiant + + make + make lang +} + +package() { + cd $pkgname-$pkgver-source + + make DESTDIR="${pkgdir}" install + + # gamedata + rm "${pkgdir}"/usr/share/games/$pkgname/base/*.pk3 + cp "${srcdir}"/base/*.pk3 "${pkgdir}/usr/share/games/${pkgname}/base" + + # licenses + mkdir -p "${pkgdir}/usr/share/licenses/${pkgname}" + cp COPYING LICENSES "${pkgdir}/usr/share/licenses/${pkgname}/" + + # desktop-files + install -Dm644 debian/ufoai.desktop "${pkgdir}/usr/share/applications/ufoai.desktop" + install -Dm644 debian/ufoai-safe.desktop "${pkgdir}/usr/share/applications/ufoai-safe.desktop" + install -Dm644 debian/ufoded.desktop "${pkgdir}/usr/share/applications/ufoded.desktop" + + # icons + install -Dm644 debian/ufoai.xpm "${pkgdir}/usr/share/pixmaps/ufoai.xpm" + install -Dm644 debian/ufoded.xpm "${pkgdir}/usr/share/pixmaps/ufoded.xpm" +} diff --git a/ufoai/fix-build.patch b/ufoai/fix-build.patch new file mode 100644 index 0000000..4afeb35 --- /dev/null +++ b/ufoai/fix-build.patch @@ -0,0 +1,23 @@ +--- a/src/client/battlescape/cl_particle.cpp 2014-06-05 06:18:39.000000000 +0200 ++++ b/src/client/battlescape/cl_particle.cpp 2022-01-06 14:05:37.009558947 +0100 +@@ -138,7 +138,7 @@ + CASSERT(lengthof(pc_strings) == PC_NUM_PTLCMDS); + + /** @brief particle commands parameter and types */ +-static const int pc_types[PC_NUM_PTLCMDS] = { ++static const unsigned int pc_types[PC_NUM_PTLCMDS] = { + 0, + + V_UNTYPED, V_UNTYPED, V_UNTYPED, +--- a/src/tools/radiant/libs/gtkutil/glfont.cpp 2014-06-05 06:18:39.000000000 +0200 ++++ b/src/tools/radiant/libs/gtkutil/glfont.cpp 2022-01-06 15:16:09.000000000 +0100 +@@ -22,7 +22,8 @@ + #include "glfont.h" + #include + #include "debugging/debugging.h" +-#include ++#include ++#include + + GLFont glfont_create (const std::string& font_string) + { diff --git a/uget/PKGBUILD b/uget/PKGBUILD new file mode 100644 index 0000000..3c1e431 --- /dev/null +++ b/uget/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=uget +pkgver=2.2.3 +_debver=$pkgver +_debrel=2 +pkgrel=3 +pkgdesc="GTK+ download manager featuring download classification and HTML import" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +depends=('gtk' 'gstreamer' 'curl') +makedepends=('intltool' 'quilt') +optdepends=('aria2: alternative backend') +source=("https://downloads.sourceforge.net/urlget/${pkgname}-${pkgver}-1.tar.gz" + "https://deb.debian.org/debian/pool/main/u/uget/uget_${_debver}-${_debrel}.debian.tar.xz" + 'uget-gtk.appdata.xml') +sha512sums=('a2359200486c60a79d53083f25c627d70f969880765e5c38897e7d35e94540c59e45f294dc10b0863ae812c449d232ad230cae90bb5e0ebded9bcabf2b4b7725' + 'c34992e0bd6c2bd056ccdb8927104e99d57a5cd6ff5bac0979d79d42d8e4bada7454b1b8bef04ed1c4a35175f44c9f1404dc2d3fa9286e24f17b82cbb3fa3e24' + '8848199d9a23f97e9e201f30edc6ec79fda3e782e4d5deb0acf9be3aff2c4ce8fec4fb615dfc1cdecd04a64ef602500101e998c2997eef8b562e9ae8c7dc3c57') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --disable-notify \ + --disable-rss-notify + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 "$srcdir/uget-gtk.appdata.xml" -t "$pkgdir/usr/share/metainfo" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/uget/uget-gtk.appdata.xml b/uget/uget-gtk.appdata.xml new file mode 100644 index 0000000..71c863a --- /dev/null +++ b/uget/uget-gtk.appdata.xml @@ -0,0 +1,36 @@ + + + com.ugetdm.uget-gtk + uget-gtk.desktop + uGet + Download multiple URLs and apply it to one of setting/queue + CC0-1.0 + LGPL-2.1 + +

    uGet is a download manager that combines lightweight resource usage with a very powerful feature set:

    +
      +
    • Multi-connection downloads
    • +
    • Browser integration
    • +
    • Download YouTube videos
    • +
    • Clipboard monitor
    • +
    • Batch downloads
    • +
    • Downloads queue
    • +
    • Advanced download categories
    • +
    +
    + + + https://ugetdm.com/wp-content/uploads/2018/01/2015-uget-ubuntu-1504.png + + + https://ugetdm.com/wp-content/uploads/2018/01/uget-sparky-linux-5-lxqt.jpg + + + https://ugetdm.com/wp-content/uploads/2018/01/uGet-2.0.7-Running-in-Ubuntu.png + + + https://ugetdm.com/wp-content/uploads/2018/01/2014-uget-fedora-adwaita-gnome.png + + + https://ugetdm.com/ +
    diff --git a/ulogd/PKGBUILD b/ulogd/PKGBUILD new file mode 100644 index 0000000..f9136a0 --- /dev/null +++ b/ulogd/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=ulogd +pkgver=2.0.7 +pkgrel=2 +pkgdesc="Userspace Packet Logging for netfilter" +arch=('i686' 'x86_64') +url='https://www.netfilter.org/projects/ulogd/' +license=('GPL-2') +backup=('etc/ulogd.conf') +install=$pkgname.install +depends=('libmnl' 'libnetfilter_acct' 'libnetfilter_conntrack' 'libnetfilter_log' 'libnfnetlink') +makedepends=('libpcap' 'libdbi' 'postgresql-libs' 'sqlite' 'jansson') +optdepends=('sqlite: SQLite3 databases support' + 'postgresql-libs: PostgreSQL databases support' + 'libdbi: DBI abstraction databases support' + 'libpcap: PCAP output support' + 'jansson: JSON output support') +source=("https://www.netfilter.org/projects/ulogd/files/$pkgname-$pkgver.tar.bz2" + "$pkgname.logrotate" + "$pkgname.conf" + "$pkgname.initd" + "$pkgname.run") +sha512sums=('1ad12bcf91bebe8bf8580de38693318cdabd17146f1f65acf714334885cf13adf5f783abdf2dd67474ef12f82d2cfb84dd4859439bc7af10a0df58e4c7e48b09' + '387706168b4053bd944c366052b00a1e8bd477d9a419791e92896eee5a35ced041dfd4d2cec3fd69a4da0d9470aef2eb1ec0ebb0ab315c177252c0d06e50d17f' + 'eb228cb53ccd9d359963bc3a01f4bdfcc1da969361ca6135fd765e37f691f3ddde47d8699fbcb4a66982d5b0e65e81fc997a5bf067af0785035b29b8e07610a3' + '28e75973ca3172d8cdb1b158fbd0b9ead1747668747db7854b181d7867a7fec1d72174b5d5be0ab97e768843582ccce21b709a873aac8f40647689afb3f47c91' + '810e391a319b2a72b3576cc8f55b3e6649c90a00acadba8be2758c4c7d467bf540c1774c51d79c363cb5d4beb77d69af5aff6623ac3eb262b10d1fceaaf3c9d4') + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --without-mysql \ + --with-pgsql \ + --with-dbi + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + install -dm755 "$pkgdir/usr/share/doc/ulogd" + install -Dm644 ulogd.conf "$pkgdir/usr/share/doc/ulogd/ulogd.conf" + install -m644 doc/*.{table,sql} "$pkgdir/usr/share/doc/ulogd" + install -Dm644 $srcdir/$pkgname.logrotate "$pkgdir/etc/logrotate.d/$pkgname" + install -Dm644 $srcdir/$pkgname.conf "$pkgdir/etc/$pkgname.conf" + install -Dm755 $srcdir/$pkgname.initd "$pkgdir/etc/init.d/$pkgname" + install -Dm755 $srcdir/$pkgname.run "$pkgdir/etc/sv/$pkgname/run" +} diff --git a/ulogd/ulogd.conf b/ulogd/ulogd.conf new file mode 100644 index 0000000..643892e --- /dev/null +++ b/ulogd/ulogd.conf @@ -0,0 +1,20 @@ +[global] +logfile="/var/log/ulogd.log" +loglevel=5 +rmem=131071 +bufsize=150000 + +plugin="/usr/lib/ulogd/ulogd_inppkt_NFLOG.so" +plugin="/usr/lib/ulogd/ulogd_raw2packet_BASE.so" +plugin="/usr/lib/ulogd/ulogd_filter_IP2STR.so" +plugin="/usr/lib/ulogd/ulogd_filter_PRINTPKT.so" +plugin="/usr/lib/ulogd/ulogd_output_LOGEMU.so" +plugin="/usr/lib/ulogd/ulogd_filter_IFINDEX.so" + +stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU + +[log1] +group=1 + +[emu1] +file=/var/log/ulogd.syslogemu diff --git a/ulogd/ulogd.initd b/ulogd/ulogd.initd new file mode 100644 index 0000000..4a1e609 --- /dev/null +++ b/ulogd/ulogd.initd @@ -0,0 +1,41 @@ +#!/sbin/openrc-run +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload reopen" + +: ${ULOGD_BINARY:=/usr/sbin/ulogd} +: ${ULOGD_PIDFILE:=/run/${SVCNAME}.pid} +: ${ULOGD_WAIT:=200} +: ${ULOGD_OPTS:=--daemon --uid ulogd --pidfile ${ULOGD_PIDFILE}} + +depend() { + before nftables firewall + after mysql postgresql +} + +start() { + ebegin "Starting ${SVCNAME}" + start-stop-daemon --start \ + --exec ${ULOGD_BINARY} --pidfile ${ULOGD_PIDFILE} --wait ${ULOGD_WAIT} \ + -- ${ULOGD_OPTS} + eend $? +} + +stop() { + ebegin "Stopping ${SVCNAME}" + start-stop-daemon --stop --pidfile ${ULOGD_PIDFILE} + eend $? +} + +reload() { + ebegin "Reloading ${SVCNAME} configuration" + start-stop-daemon --signal USR1 --pidfile ${ULOGD_PIDFILE} + eend $? +} + +reopen() { + ebegin "Reopening ${SVCNAME} logfiles" + start-stop-daemon --signal HUP --pidfile ${ULOGD_PIDFILE} + eend $? +} diff --git a/ulogd/ulogd.install b/ulogd/ulogd.install new file mode 100644 index 0000000..37fa5c0 --- /dev/null +++ b/ulogd/ulogd.install @@ -0,0 +1,26 @@ +post_install() { + if ! getent group ulogd &>/dev/null; then + groupadd -r ulogd >/dev/null + fi + if ! getent passwd ulogd &>/dev/null; then + useradd -r -g ulogd -d /dev/null -s /bin/nologin ulogd >/dev/null + fi + chown root:ulogd etc/ulogd.conf + ulogd_shell=$(getent passwd ulogd | cut -d: -f7) + if [ "$ulogd_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin ulogd &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd ulogd &>/dev/null; then + userdel ulogd >/dev/null + fi + if getent group ulogd &>/dev/null; then + groupdel ulogd >/dev/null + fi +} diff --git a/ulogd/ulogd.logrotate b/ulogd/ulogd.logrotate new file mode 100644 index 0000000..5dfed10 --- /dev/null +++ b/ulogd/ulogd.logrotate @@ -0,0 +1,10 @@ +/var/log/ulogd.log /var/log/ulogd.syslogemu { + missingok + notifempty + sharedscripts + create 0640 ulogd + + postrotate + [ -f /run/ulogd.pid ] && /bin/kill -HUP $(cat /run/ulogd.pid) + endscript +} diff --git a/ulogd/ulogd.run b/ulogd/ulogd.run new file mode 100644 index 0000000..045035b --- /dev/null +++ b/ulogd/ulogd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/ulogd -u ulogd diff --git a/ultimatestunts/PKGBUILD b/ultimatestunts/PKGBUILD new file mode 100644 index 0000000..388acd8 --- /dev/null +++ b/ultimatestunts/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=ultimatestunts +pkgver=0.7.7.1 +pkgrel=3 +pkgdesc="Free and libre stunt-racing game." +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/ultimatestunts/' +license=('GPL-2') +depends=('sdl_image' 'freealut' 'libvorbis' 'mesa-libgl' 'glu') +groups=('games') +source=("https://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-srcdata-${pkgver//./}.tar.gz" + "$pkgname-metaserver-cpp-add-includes.patch" + "$pkgname.png" + "$pkgname.desktop") +sha512sums=('c532d1434570775da8e0b8156659f96dcfbdf82890f07aebbe398bdcf2039a11c832ead8106c8522af1a4a847f685727dc6f7739443a99858621995452ce4741' + '1dcd4314b531f0a39be5aa480004d20d2bb4e7b735e5966199df16b9cb3268bd13d77699c9d3eb36920c043ac582d1c709c2acac74b6dbcd63a932ae69297f67' + '36f9800cf023c1382ef21a43c65d7d63a4d6dc2d9956e0ccba239826ca9ace3ddb1565ef8ab171cb56ce5f736cae9803510f172b97fdf8efc5ee72a2bb95bd2d' + 'fea5fe64c242530ef4b48e74b9d974f7cdda6462c98a7a4bb3774b90e5fca749d18cdbe2fb1edfad4ee00a0422235e422f8fa3d05edfa202203ce480a7cc2f0e') + +prepare() { + patch -d $pkgname-srcdata-${pkgver//./} -Np0 < $pkgname-metaserver-cpp-add-includes.patch +} + +build() { + cd $pkgname-srcdata-${pkgver//./} + + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --datarootdir=/usr/share/games \ + --sysconfdir=/etc + make -j1 +} + +package() { + cd $pkgname-srcdata-${pkgver//./} + + make \ + sysconfdir="$pkgdir/etc" \ + prefix="$pkgdir/usr" \ + bindir="$pkgdir/usr/games" \ + datarootdir="$pkgdir/usr/share/games" \ + install + + # .desktop entry + install -Dm644 ../$pkgname.png "$pkgdir"/usr/share/pixmaps/$pkgname.png + install -Dm644 ../$pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop + + # cleanup + find "$pkgdir/" -type d -name .svn -print0 | xargs -0 rm -rf + + # license + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/ultimatestunts/ultimatestunts-metaserver-cpp-add-includes.patch b/ultimatestunts/ultimatestunts-metaserver-cpp-add-includes.patch new file mode 100644 index 0000000..1057cd2 --- /dev/null +++ b/ultimatestunts/ultimatestunts-metaserver-cpp-add-includes.patch @@ -0,0 +1,13 @@ +--- simulation/metaserver.cpp.bad 2012-09-15 12:52:58.205623553 +0200 ++++ simulation/metaserver.cpp 2012-09-15 12:51:26.928953196 +0200 +@@ -14,6 +14,10 @@ + * (at your option) any later version. * + * * + ***************************************************************************/ ++#include ++#include ++#include ++#include + #include + #include + #include diff --git a/ultimatestunts/ultimatestunts.desktop b/ultimatestunts/ultimatestunts.desktop new file mode 100644 index 0000000..75d79c1 --- /dev/null +++ b/ultimatestunts/ultimatestunts.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Terminal=false +Name=Ultimate Stunts +Comment=Remake of the famous DOS-game stunts. +Exec=ustunts +Icon=ultimatestunts +Categories=Game; +StartupNotify=false diff --git a/ultimatestunts/ultimatestunts.png b/ultimatestunts/ultimatestunts.png new file mode 100644 index 0000000000000000000000000000000000000000..93261446fb024c809f2c412e08e327414cecb453 GIT binary patch literal 4018 zcmV;j4^8liP)pUWJyFpR9Jj3Mm{6F&thv z!q&##XzP{##~21FzRGN81cYJ(ub~>GG57MNl zswPXIVT^zx0;;H>2!_BAtpxPS>VzwXtOWp2LV(_)ihwAHWDSMT0*67FOvanH_IB>x z*`JKO#5Qs#!lF?mau=96ag!%co;|rZjI%{sU0zhpa?!Y~EVp+fSw#{7;UGxH7$Ra> zxr87oAOQ8NTd=M-WdC}l2}A}p+9}4tAiK4{lY4VzOhS zA3i*M`rP}hZTRH){Eau>{ObL;9zTCkUB2+ypvX#eo>`+r6;>sKpa=p)2m*G6PRX)> zbB;q~iQZV@kfupfExiLnni0PB`kjNFt)s&yhmRftx5v*P19r>#G=#1TRo68;yEks% zJoxN)zwMe}N8?dGoY`>s^6*h?7foouu+qW7t?jM7^Vu{q)@{i0vK)`Q$Uz~=%chNj z4v|>IeCypGMiy^vlGxDJW$voQ`Dl-qGvN1qVH+4SP_ z{IYH8`Ro!@Q|F(2{@KxsqasUDaWpKy`_cWp)Cs{sBGIzFuhdn=N`Y~Ecki$FZvOPAKRr4+;Vz5@>F(}+ zlIHXI^5og4Hq8WRFwEMDFQg@dF`RVbKBthl& z#j~f2`Mk_>4zaE3;c(nW2Bju+8yn*o;iU$V=$Hy<8J%3S_Wr*!; zHlNQIySuwtK1kEl826(e|K#r7yPK1Z#lqd#-FMDS=d-%$PF}ubm7~+Mk3M|AVH|Gm z4F-j1R5fkec0sKr;~f##(p0bQ-+%Kf2m4#^eDIzf4t-TEmdoXII%n3liRWjtCr=Jv z9=+_^*fjNPw+`;zzE#&X05narv9SdJ)uMLBmw9^o_MMIK=6GY{=Iz&})9K;S^Z9%( z5}T%~yY^zfn9eT;lkKLh=8I`L&hvZ_BKgFb@4fp&)JWWn3iI{1?j9e0@@Mz<${eyp z0ovg(%L+djl(+A^cIWPE)|jKi!!l2@)Dh@#Pz(nHBG}s8N}Nvz+Vt%FVmKTZ z<#16gAAb5M#z;hlToYBQ*oiuW&SM08d2xAud6t*OH@^Ayyb4`()_4)f^D<4x7qhul zM+&Ht3+ct8`kQ}v_u~)$b1}PkaWr$r5NYIwW(#5b_=DfXdH3?uC+%W}js|ZhlxB;% z4l0e<>FM<7<4>A;)^*Lj+qcSmz(Kko=nZ+dY%1yiQJtq{-Ik-xW!+6@^~UC&PfJ24 z>bfrGNp6{ioO4M69De!Wckg`vFJ7Epe)Qo_h6Q*N$*@5ey2RjUI3CT;X5aYwx7vCx z5R0NXUo4rq4$b+re)Rd%!JsHd!;(g`rgIqrI-4amt5M9#$#7Hv$i>B39k^;jRty(S z@LuzLfW~T2XKi3LfA#%;BDBt8-Bp12>kofrz5dtF|8?*7v%mYt{bKag=k>EE%d>NN z_~hw}lb6i2tm86<%Vo1@yDTs3roFhl{My(4+AB^*S zNXGdjtD5fk{cCSNdbm71mPIXfptD(>8t0RwZEFtP@ciuTtjx1-|K;0{KKuOe_{3+! zy<2yaWTHXQ+Aots&$rjTx%`$7$#TL1}I6dlOcDF2QO+1GiBWyKTi{&Bno=qO{f0JGRg+pFf|@ zD*zJFs;ZWC7>u_enT+xwBbCLN7*p$$#B+#(g0`@Uu&Q;o7?gQ2NqhnrIdb5bB&jXz zaJgI-MaiLCw9E00oA&tVtKWS0_~_B|$9{8bvN_qmxX?UHI{@STMYYWG#QKqS80P0q zXBCsW)2*HT_kQ_cFuF0G?C0Y>lNF6)N>JXr+kB(X5F zNji8^KY#k*lh4@Zzy0L#8*hE5C^wU&T(;4AS5;Mtu8V;~G}c6c5TZpYixFD0TrR!$ zc~*2WpfOpN#~7?NX$b6n+S@M6aWLL}arih$L!j2UoxPjmtsQcCK7uy1Y3AFuM#dt| zNMX2j^A5;tdit{uetYxgy^ZagSvFeMolDX*Nu*jJDTo?J0H~_YIRJ_Z(uO3-5K$yr zav%x_28|^rs-TK7vMM`kc6SaY!x3QDg(ZVd##`2u%c?ULlO&B@i%Q1W7$u5L^U-MY z=6G|jEXxovibInWxoKkvZI@XO0E&Iq1gL;l_jyAO0sEUZkrI)jsH%%#3_9Rw zP_4~Um$%%N2}Gz6P3X`V?=4{r3J8FX3;>QNn+k7SPEUy-&vPR0U2dF{sE!P%AOILp z1zn|FCY3s&2 zD=5}l5zWhi^@&YVYb`TR#vA>;ICAGKA)3IU2eL|zkq{9SREY>w0nw;(k5yF>(dLkM zpa3Ei8BvuYka8%}n7YQe&f5XEZdr#8qk4@31}!3n&~i`&O46bziYzTy!fZCf1Z`pw zKo}CA2kowMy;bThstO{)h)BlLDnnNUKtPLl*JZA~BF6C>f(3K>F+oROPB6A`t-y5vii803Z=s z#sW!<5rvqFwblVpD>iZz%tf$kA&PO%7}Tl_KrS*z4c?P6M%5rdRfn^)Gv|zPRzTX& zT9Y99rc*I-(mM%)StVZvtTkRV2zRQS*d$L=MM4Nc!gSgKQ<|1p zmV~BNF^Nlql0{?=M7HY!bI7wnrr3ob8kHFUm|2lc&!`BJ5?UnHRUR!Oy$WS*O#lQy zRk4VHfYDeYYprEqLeBFvG6^t>MI>VYGv8FP4M8PF6@!3+iA{twgw`0Fl4FfTDF;?j zG)xqG04S=cAksU(GuB&&iUticJMzZZ5IRIsMQeb z)c4vekLv}7A}S)xA;#EusiI0$RS}RY+WX2{KYI^|nXR?`q!M-T5>QW%U>&qZwkIxt*BFv1|vP!>XANqPC zRkcq9u5;7VX;;Eg1ptmBs?4vVMGrz(EKoniDvn*n*6Xt9fBRvpU?{p~;`*31CCnT` zKtyXT0NAU(K7>QRzx5`BwU^6!B~}4K6j+^0SJZ;87U=otjlGr^Gp}*<<9j~V1N!Z$ zs)bjL0GQB_UD=q3gcT7*px=tD>Tc`f=@q-y+TK#@moY{GK(i8ckDxbee-E+Nt_8F< zy47`+3K3T&Jz!AG|sIIs~jNg}o1=suKRG###gV|F!ENzO)y=lz{cH>uh}i(DjZlo8{G* zSG8^hfop+|5UD?c`tY=hPuF#J9nBXa>UBVWYFmA&t4ZPN%<7xK|FPriV!lr8A7JQz Y0U?YM%aZx4^Z)<=07*qoM6N<$f)rn>Pyhe` literal 0 HcmV?d00001 diff --git a/unar/PKGBUILD b/unar/PKGBUILD new file mode 100644 index 0000000..0c8b26b --- /dev/null +++ b/unar/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=unar +pkgver=1.10.7 +_UniversalDetector_pkgver=1.1 +pkgrel=1 +pkgdesc="An Objective-C application for uncompressing archive files" +arch=('i686' 'x86_64') +url='https://github.com/MacPaw/XADMaster' +license=('LGPL-2.1') +depends=('gnustep-base' 'libressl' 'bzip2' 'icu' 'gcc-libs' 'zlib' 'wavpack') +makedepends=('gnustep-make' 'gcc-objc') +replaces=('unarchiver' 'unrar') +conflicts=('unarchiver' 'unrar') +provides=('unarchiver' 'unrar') +source=("XADMaster-${pkgver}.tar.gz::https://github.com/MacPaw/XADMaster/archive/v${pkgver}.tar.gz" + "UniversalDetector-${_UniversalDetector_pkgver}.tar.gz::https://github.com/MacPaw/universal-detector/archive/${_UniversalDetector_pkgver}.tar.gz" + "native_obj_exceptions.patch") +sha512sums=('3447b6d8f3f4fa5eea93c6628a1633017da6ff09c580d5ce4fd422027b3b79acbf38d6e41a059806d1e60eb25a9d66889938b32599168dc2c0ca648e1c1976b1' + 'e514670b3d37b2472ed3e9cb0fdc3298a8479772264b7573411f104be554222bec2e01f73e1f35db95620fe785bee2dcf9ddc9c2b1f4ff6b522fa64d14d020f5' + '0501698400c7529467c5c5988aec66b0af6995274df91b312d21f2a651a7ea081efa255c53467cb95cf225ae8c3374ddad978cb447c39b221333a7aa9326b2a2') + +prepare() { + # The project requires UniversalDetector next to the source dir. See the project's README for more info about the build requirements. + ln -s universal-detector-${_UniversalDetector_pkgver} UniversalDetector + + cd "$srcdir/XADMaster-${pkgver}" + patch < $srcdir/native_obj_exceptions.patch +} + +build() { + cd "$srcdir/XADMaster-${pkgver}" + + . /usr/share/GNUstep/Makefiles/GNUstep.sh + make -f Makefile.linux +} + +package() { + cd "$srcdir/XADMaster-${pkgver}" + + install -d "$pkgdir/usr/bin/" + install -m755 unar lsar "$pkgdir/usr/bin/" + install -Dm644 "$srcdir/XADMaster-${pkgver}/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" + + install -d "$pkgdir/usr/share/man/man1" + install -m644 Extra/{lsar.1,unar.1} "$pkgdir/usr/share/man/man1/" + install -d "$pkgdir/usr/share/bash-completion/completions/" + install -m644 Extra/unar.bash_completion "$pkgdir/usr/share/bash-completion/completions/unar" + install -m644 Extra/lsar.bash_completion "$pkgdir/usr/share/bash-completion/completions/lsar" +} diff --git a/unar/native_obj_exceptions.patch b/unar/native_obj_exceptions.patch new file mode 100644 index 0000000..8b80c88 --- /dev/null +++ b/unar/native_obj_exceptions.patch @@ -0,0 +1,12 @@ +diff --git a/Makefile.linux b/Makefile.linux +index 153ef71..e44ff0e 100644 +--- a/Makefile.linux ++++ b/Makefile.linux +@@ -10,7 +10,6 @@ AR = ar + + GNUSTEP_OPTS = -DGNUSTEP \ + -DGNU_RUNTIME=1 \ +- -D_NATIVE_OBJC_EXCEPTIONS \ + -fgnu-runtime \ + -fexceptions \ + -fobjc-exceptions \ diff --git a/unbound/CVE-2024-43167.patch b/unbound/CVE-2024-43167.patch new file mode 100644 index 0000000..886309d --- /dev/null +++ b/unbound/CVE-2024-43167.patch @@ -0,0 +1,42 @@ +From 8e43e2574c4e02f79c562a061581cdcefe136912 Mon Sep 17 00:00:00 2001 +From: zhailiangliang +Date: Tue, 21 May 2024 08:40:16 +0000 +Subject: [PATCH] fix null pointer dereference issue in function ub_ctx_set_fwd + of file libunbound/libunbound.c + +--- + libunbound/libunbound.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/libunbound/libunbound.c b/libunbound/libunbound.c +index 17057ec6c..3c8955149 100644 +--- a/libunbound/libunbound.c ++++ b/libunbound/libunbound.c +@@ -981,7 +981,8 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr) + if(!addr) { + /* disable fwd mode - the root stub should be first. */ + if(ctx->env->cfg->forwards && +- strcmp(ctx->env->cfg->forwards->name, ".") == 0) { ++ (ctx->env->cfg->forwards->name && ++ strcmp(ctx->env->cfg->forwards->name, ".") == 0)) { + s = ctx->env->cfg->forwards; + ctx->env->cfg->forwards = s->next; + s->next = NULL; +@@ -1001,7 +1002,8 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr) + /* it parses, add root stub in front of list */ + lock_basic_lock(&ctx->cfglock); + if(!ctx->env->cfg->forwards || +- strcmp(ctx->env->cfg->forwards->name, ".") != 0) { ++ (ctx->env->cfg->forwards->name && ++ strcmp(ctx->env->cfg->forwards->name, ".") != 0)) { + s = calloc(1, sizeof(*s)); + if(!s) { + lock_basic_unlock(&ctx->cfglock); +@@ -1019,6 +1021,7 @@ ub_ctx_set_fwd(struct ub_ctx* ctx, const char* addr) + ctx->env->cfg->forwards = s; + } else { + log_assert(ctx->env->cfg->forwards); ++ log_assert(ctx->env->cfg->forwards->name); + s = ctx->env->cfg->forwards; + } + dupl = strdup(addr); diff --git a/unbound/PKGBUILD b/unbound/PKGBUILD new file mode 100644 index 0000000..9abe061 --- /dev/null +++ b/unbound/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +pkgname=unbound +pkgver=1.13.1 +pkgrel=5 +pkgdesc='Validating, recursive, and caching DNS resolver' +url='https://unbound.net/' +license=('Modified-BSD') +arch=('i686' 'x86_64') +depends=('libressl' 'libsodium' 'libevent' 'ldns' 'dnssec-anchors') +makedepends=('expat' 'gettext-tiny') +optdepends=('expat: unbound-anchor' + 'logger: message logging support') +backup=('etc/unbound/unbound.conf' + 'etc/conf.d/unbound') +install=unbound.install +source=("https://unbound.net/downloads/${pkgname}-${pkgver}.tar.gz" + "hook" + "unbound.conf" + "unbound.confd" + "unbound.initd" + "unbound.run" + "CVE-2024-43167.patch") +sha512sums=('f4d26dca28dbcc33a5e65a55147fa01077c331292e88b6a87798cb6c3d4edb0515015d131fd893c92b74d22d9998a640f0adce404e6192d61ebe69a6a599287c' + 'dab83cc253d8ce8fac52a1fc7abcdb31e183a7245a887d85cad2c83d8b69ca4e4cbbcfc0914e71d686653b7252e40b29574ca0889da7d9b06e668a3ba8cfb763' + 'f0f87cd414e7efef28a3df09d09deb4eaec49d6694e93f532c6ec3f23ee5ed1c950bed047c755b20d21e618bde31f56e210208fbcc2f35ded880f0cdba45b4bc' + 'e3e4c7f97c13d133724417a70e4f20dac6f1f4b5a4e2e573c410148059d9f722589249b3dd4668069d4e324abef60f5981f20b1797623f37db9c9422410dc13f' + '24b973b7da783c7bf66307eb09a837e6fcd2299e2cdfc78dd5e0e48e6faba3b7f23155c14997da0533495a04f4115b711df5f25b9400dbb70cf4aeebfdd75fd5' + 'cb1b931f9628f75ea2a72f1fa0489baa2af392208f503bb2bcee3af2221c3283ea6e584d65722abe01c8420aaec94c8b4263cd9b6212f2e06c5d8eb5150ba985' + '52dad70da916d3935f80f10399c3a86226349dcece4a8674b20f77ec36069961dfc6137526aa96ad428b38531958d96a1905a37b49a620df03b9e590c3ab62b5') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np1 -i ${srcdir}/CVE-2024-43167.patch + sed '/# trust-anchor-file:/c\\ttrust-anchor-file: /etc/unbound/trusted-key.key' -i doc/example.conf.in +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-rpath \ + --disable-systemd \ + --disable-dnstap \ + --enable-dnscrypt \ + --enable-pie \ + --enable-relro-now \ + --enable-subnet \ + --enable-tfo-client \ + --enable-tfo-server \ + --enable-cachedb \ + --with-conf-file=/etc/unbound/unbound.conf \ + --with-pidfile=/run/unbound.pid \ + --with-rootkey-file=/etc/trusted-key.key \ + --with-libevent + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 doc/example.conf.in "${pkgdir}/etc/unbound/unbound.conf.example" + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + install -Dm644 $srcdir/unbound.confd "${pkgdir}/etc/conf.d/unbound" + install -Dm755 $srcdir/unbound.initd "${pkgdir}/etc/init.d/unbound" + install -Dm644 $srcdir/unbound.conf "${pkgdir}/etc/unbound/unbound.conf" + install -Dm755 $srcdir/unbound.run "${pkgdir}/etc/sv/unbound/run" + install -Dm644 $srcdir/hook "${pkgdir}/usr/share/libalpm/hooks/unbound-key.hook" +} diff --git a/unbound/hook b/unbound/hook new file mode 100644 index 0000000..2420592 --- /dev/null +++ b/unbound/hook @@ -0,0 +1,10 @@ +[Trigger] +Type = File +Target = etc/trusted-key.key +Operation = Install +Operation = Upgrade + +[Action] +Description = Updating trusted-key.key for unbound... +When = PostTransaction +Exec = /bin/cp -f /etc/trusted-key.key /etc/unbound/ diff --git a/unbound/unbound.conf b/unbound/unbound.conf new file mode 100644 index 0000000..bbdde6a --- /dev/null +++ b/unbound/unbound.conf @@ -0,0 +1,5 @@ +server: + use-syslog: yes + username: "unbound" + directory: "/etc/unbound" + trust-anchor-file: trusted-key.key diff --git a/unbound/unbound.confd b/unbound/unbound.confd new file mode 100644 index 0000000..b4de7cf --- /dev/null +++ b/unbound/unbound.confd @@ -0,0 +1,4 @@ +# Settings should normally not need any changes. + +# Location of the unbound configuration file. Leave empty for the default. +#UNBOUND_CONFFILE="/etc/unbound/unbound.conf" diff --git a/unbound/unbound.initd b/unbound/unbound.initd new file mode 100644 index 0000000..eb25f5c --- /dev/null +++ b/unbound/unbound.initd @@ -0,0 +1,53 @@ +#!/sbin/openrc-run +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +name="unbound daemon" +extra_commands="checkconfig" +extra_started_commands="reload" +description="unbound is a Domain Name Server (DNS) that is used to resolve host names to IP address." +description_configtest="Run syntax tests for configuration files only." +description_reload="Kills all children and reloads the configuration." + +UNBOUND_BINARY=${UNBOUND_BINARY:-/usr/sbin/unbound} +UNBOUND_CHECKCONF=${UNBOUND_CHECKCONF:-/usr/sbin/unbound-checkconf} +UNBOUND_CONFFILE=${UNBOUND_CONFFILE:-/etc/unbound/$RC_SVCNAME.conf} +UNBOUND_PIDFILE=${UNBOUND_PIDFILE:-/run/$RC_SVCNAME.pid} + +depend() { + need net + use logger + provide dns + after auth-dns +} + +checkconfig() { + ebegin "Checking ${UNBOUND_CONFFILE}" + /usr/sbin/unbound-checkconf -f "${UNBOUND_CONFFILE}" >/dev/null + eend $? +} + +start_pre() { + checkconfig +} + +start() { + ebegin "Starting ${RC_SVCNAME}" + start-stop-daemon --start --background --exec "${UNBOUND_BINARY}" --pidfile "${UNBOUND_PIDFILE}" \ + -- -c "${UNBOUND_CONFFILE}" + eend $? +} + +stop() { + start_pre || return $? + ebegin "Stopping ${RC_SVCNAME}" + start-stop-daemon --stop --pidfile "${UNBOUND_PIDFILE}" + eend $? +} + +reload() { + start_pre || return $? + ebegin "Reloading ${RC_SVCNAME}" + start-stop-daemon --signal HUP --pidfile "${UNBOUND_PIDFILE}" + eend $? +} diff --git a/unbound/unbound.install b/unbound/unbound.install new file mode 100644 index 0000000..7fc291b --- /dev/null +++ b/unbound/unbound.install @@ -0,0 +1,11 @@ +post_install() { + getent group unbound &>/dev/null || groupadd -r unbound >/dev/null + getent passwd unbound &>/dev/null || useradd -r -g unbound -G adm -d /etc/unbound -s /bin/nologin -c unbound unbound >/dev/null + if ! groups unbound | grep adm &>/dev/null; then + gpasswd -a unbound adm >/dev/null + fi + unbound_shell=$(getent passwd unbound | cut -d: -f7) + if [ "$unbound_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin unbound &>/dev/null + fi +} diff --git a/unbound/unbound.run b/unbound/unbound.run new file mode 100644 index 0000000..842575a --- /dev/null +++ b/unbound/unbound.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec chpst -U unbound:unbound unbound -dp -c /etc/unbound/unbound.conf diff --git a/unibilium/PKGBUILD b/unibilium/PKGBUILD new file mode 100644 index 0000000..3d93f12 --- /dev/null +++ b/unibilium/PKGBUILD @@ -0,0 +1,23 @@ +# Maintainer: Jesus E. + +pkgname=unibilium +pkgver=2.1.0 +pkgrel=1 +pkgdesc='A terminfo parsing library' +license=('LGPL-3') +arch=('i686' 'x86_64') +url='https://github.com/neovim/unibilium' +depends=('glibc') +source=("$pkgname-$pkgver.tar.gz::https://github.com/neovim/unibilium/archive/v$pkgver.tar.gz") +sha512sums=('c0074ff8431f82c92072b8c0c9d3cf38d759b4de996b168c6ab00e475b0a6204d9c29b0a6e48e62dd4fa4898f82246150ef7cd5e246893d2c225c50ec4d4ac68') + +build() { + cd $pkgname-$pkgver + make PREFIX=/usr +} + +package() { + cd $pkgname-$pkgver + DESTDIR="$pkgdir" make install PREFIX=/usr + install -Dm644 LGPLv3 -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/unicon/PKGBUILD b/unicon/PKGBUILD new file mode 100644 index 0000000..e7407e6 --- /dev/null +++ b/unicon/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=unicon +pkgver=13.2 +pkgrel=2 +pkgdesc="A modern, free and libre descendant of the Icon programming language." +arch=('i686' 'x86_64') +url='http://www.unicon.org/' +license=('GPL-2' 'Simplified-BSD') +depends=('freetype2' 'glu' 'libjpeg-turbo' 'libnsl' 'libogg' 'libvorbis' 'libxft' 'openal' 'sdl' 'unixodbc') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/uniconproject/unicon/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('fba5cb5d394e0e21815068ddc583cb55d9b43f06a9be0de714f40c77d2c4459882b07e46532afaa00b2cee6c43565c5b95c81d2708bdee698d3c08f98863ae12') + +build() { + cd "${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/unifont/PKGBUILD b/unifont/PKGBUILD new file mode 100644 index 0000000..482e3cd --- /dev/null +++ b/unifont/PKGBUILD @@ -0,0 +1,107 @@ +# Maintainer: Jesus E. + +pkgbase=unifont +pkgname=('bdf-unifont' 'pcf-unifont' 'psf-unifont' 'hex-unifont' 'otb-unifont' 'otf-unifont' 'ttf-unifont' 'unifont-utils') +pkgver=15.0.01 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://unifoundry.com/' +license=('GPL-2' 'OFL-1.1' 'FDL-1.3') +makedepends=('fonttosfnt') +source=("https://unifoundry.com/pub/unifont/unifont-$pkgver/unifont-$pkgver.tar.gz"{,.sig} + "https://ftp.gnu.org/gnu/unifont/unifont-$pkgver/unifont-${pkgver}.bdf.gz"{,.sig}) +sha512sums=('386f6d9b17d0a768f4c4393ec21d5b785678e1cd3eb5e69be2e4e4ca2e89b70c3e3c88ac0e2b89984afff177fbf43e7edc8c8e5d6bbc1af1cf506f42017f571a' + 'SKIP' + '6c16eb1cfcdf38cb6f1528142fbb4bf429a81a9604f89118784c827e86d5efd23f331e58bc0d306a0fb469265ee2137d586c15815870643abba765a3037e6c0e' + 'SKIP') +validpgpkeys=('95D2E9AB8740D8046387FD151A09227B1F435A33') # Paul Hardy + +build() { + cd "${srcdir}" + file="unifont-${pkgver}.bdf" + family_name="$(grep -F 'FAMILY_NAME "' "$file")" + family_name="${family_name%\"}" + family_name_otb="$family_name (OTB)" + sed -i "s/$family_name/$family_name_otb/" "$file" + fonttosfnt -b -c -g 2 -m 2 -o "${file/bdf/otb}" "$file" + + cd "$srcdir/unifont-$pkgver/src" + make +} + +package_bdf-unifont() { + pkgdesc="A free and libre bitmap font with wide Unicode support (BDF version)" + + cd "$srcdir/unifont-$pkgver/font/precompiled" + install -Dm644 "unifont-$pkgver.bdf.gz" "$pkgdir/usr/share/fonts/misc/unifont.bdf.gz" + install -Dm644 "$srcdir/unifont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_pcf-unifont() { + pkgdesc="A free and libre bitmap font with wide Unicode support (PCF version)" + + cd "$srcdir/unifont-$pkgver/font/precompiled" + install -Dm644 "unifont-$pkgver.pcf.gz" "$pkgdir/usr/share/fonts/misc/unifont.pcf.gz" + install -Dm644 "$srcdir/unifont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_psf-unifont() { + pkgdesc="A free and libre bitmap font with wide Unicode support (PSF version)" + + cd "$srcdir/unifont-$pkgver/font/precompiled" + install -Dm644 "Unifont-APL8x16-$pkgver.psf.gz" "$pkgdir/usr/share/kbd/consolefonts/Unifont-APL8x16.psf.gz" + install -Dm644 "$srcdir/unifont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_hex-unifont() { + pkgdesc="A free and libre bitmap font with wide Unicode support (HEX version)" + + cd "$srcdir/unifont-$pkgver/font/precompiled" + install -Dm644 "unifont-$pkgver.hex" "$pkgdir/usr/share/unifont/unifont.hex" + install -Dm644 "$srcdir/unifont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_otb-unifont() { + pkgdesc="A free and libre bitmap font with wide Unicode support (OTB version)" + + cd "${srcdir}" + for file in *.otb; do + install -Dm 644 "${file}" "${pkgdir}/usr/share/fonts/misc/${file}" + done + install -Dm644 "$srcdir/unifont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_otf-unifont() { + pkgdesc="A free and libre bitmap font with wide Unicode support (OpenType version)" + + cd "$srcdir/unifont-$pkgver" + install -d "$pkgdir/usr/share/fonts/Unifont/" + install -m644 "font/precompiled/unifont-$pkgver.otf" "$pkgdir/usr/share/fonts/Unifont/Unifont.otf" + install -m644 "font/precompiled/unifont_jp-$pkgver.otf" "$pkgdir/usr/share/fonts/Unifont/Unifont_jp.otf" + install -m644 "font/precompiled/unifont_upper-$pkgver.otf" "$pkgdir/usr/share/fonts/Unifont/Unifont_Upper.otf" + install -m644 "font/precompiled/unifont_csur-$pkgver.otf" "$pkgdir/usr/share/fonts/Unifont/Unifont_CSUR.otf" + install -Dm644 "$srcdir/unifont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_ttf-unifont() { + pkgdesc="A free and libre bitmap font with wide Unicode support (TrueType version)" + + cd "$srcdir/unifont-$pkgver" + install -d "$pkgdir/usr/share/fonts/Unifont/" + install -m644 "font/precompiled/unifont-$pkgver.ttf" "$pkgdir/usr/share/fonts/Unifont/Unifont.ttf" + install -m644 "font/precompiled/unifont_jp-$pkgver.ttf" "$pkgdir/usr/share/fonts/Unifont/Unifont_jp.ttf" + install -m644 "font/precompiled/unifont_upper-$pkgver.ttf" "$pkgdir/usr/share/fonts/Unifont/Unifont_Upper.ttf" + install -m644 "font/precompiled/unifont_csur-$pkgver.ttf" "$pkgdir/usr/share/fonts/Unifont/Unifont_CSUR.ttf" + install -Dm644 "$srcdir/unifont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_unifont-utils() { + pkgdesc="A free and libre bitmap font with wide Unicode support (utilities)" + depends=('perl') + + cd "$srcdir/unifont-$pkgver" + make -C src install PREFIX="$pkgdir/usr" LOCALBINDIR=../bin + make -C man install PREFIX="$pkgdir/usr" COMPRESS=1 + + install -Dm644 "$srcdir/unifont-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/unison/PKGBUILD b/unison/PKGBUILD new file mode 100644 index 0000000..12b55bd --- /dev/null +++ b/unison/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=unison +pkgver=2.51.3 +pkgrel=2 +pkgdesc="File-synchronization tool" +url='https://www.cis.upenn.edu/~bcpierce/unison/' +arch=('i686' 'x86_64') +license=('GPL-3') +options=('!makeflags') +makedepends=('ocaml' 'lablgtk2') +optdepends=('gtk2: graphical interface') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/bcpierce00/unison/archive/v${pkgver}.tar.gz" + "unison-large.patch" + "unison.desktop") +sha512sums=('202bc592cf18d3ac76d7e29ec71add5d6e33a96b4b885e0e2add9a5a621db2290184f268c70e4f05e4884d6cdfed09f6fcd3dde85681c39628a10ea552917c8f' + 'e2f7a5e6e832ee9c694f36e399178652456d2047b22cba86603982cd6f6caf54e520fc87a8bde1940b2da46102cf3aa89f3e062c965efc77cd840b47e01b4d2f' + '74526b1f583f49b3e1c68b72c9ab3d5875796b8b371c1388cf3b5b25aef8a0304023e9bb960b2ff9aec2eb989f712e99b2c049b8075529074f62ef9ffd6c1cdd') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + sed 's/region_of_string/region_of_bytes/' -i src/uigtk2.ml + patch -p0 -i ../unison-large.patch +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + for ui in gtk2 text; do + cp -a . build || true + pushd build + export CFLAGS= + make all UISTYLE=$ui DEBUGGING=false THREADS=true + mv src/unison src/unison-$ui + mv src/unison-* .. + popd + rm -fr build + done +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + install -d "${pkgdir}"/usr/bin + install -m755 unison-* "${pkgdir}"/usr/bin + ln -s unison-text "${pkgdir}"/usr/bin/unison + + install -Dm644 ../unison.desktop "${pkgdir}/usr/share/applications/${pkgname}.desktop" + install -Dm644 icons/U.svg "${pkgdir}/usr/share/icons/hicolor/scalable/apps/${pkgname}.svg" + for i in 16 24 32 48 256; do + install -Dm644 icons/U.${i}x${i}x16m.png "${pkgdir}/usr/share/icons/hicolor/${i}x${i}/apps/${pkgname}.png" + done + + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/unison/unison-large.patch b/unison/unison-large.patch new file mode 100644 index 0000000..6dcef52 --- /dev/null +++ b/unison/unison-large.patch @@ -0,0 +1,49 @@ +diff -Nrua /usr/ports/net/unison/patches/patch-bytearray_stubs_c ./patches/patch-bytearray_stubs_c +--- /usr/ports/net/unison/patches/patch-bytearray_stubs_c Thu Jan 1 01:00:00 1970 ++++ ./patches/patch-bytearray_stubs_c Tue Jan 17 08:44:39 2017 +@@ -0,0 +1,45 @@ ++Fix rare SIGSEGV when transferring large replicas. ++Fix a theoretical integer overflow. ++ ++Patches from here: ++https://caml.inria.fr/mantis/view.php?id=7431#c17026 ++and here: ++https://caml.inria.fr/mantis/view.php?id=7431#c16962 ++ ++Related issue reports: ++https://github.com/bcpierce00/unison/issues/48 ++https://caml.inria.fr/mantis/view.php?id=7431 ++https://bugzilla.redhat.com/show_bug.cgi?id=1401759 ++ ++Thanks to Alex Markley and OCaml developers ++--- bytearray_stubs.c.orig Tue Jan 17 08:41:00 2017 +++++ bytearray_stubs.c Tue Jan 17 08:41:21 2017 ++@@ -5,6 +5,7 @@ ++ ++ #include "caml/intext.h" ++ #include "caml/bigarray.h" +++#include "caml/memory.h" ++ ++ CAMLprim value ml_marshal_to_bigarray(value v, value flags) ++ { ++@@ -21,15 +22,18 @@ CAMLprim value ml_marshal_to_bigarray(value v, value f ++ ++ CAMLprim value ml_unmarshal_from_bigarray(value b, value ofs) ++ { +++ CAMLparam1(b); /* Holds [b] live until unmarshalling completes. */ +++ value result; ++ struct caml_bigarray *b_arr = Bigarray_val(b); ++- return input_value_from_block (Array_data (b_arr, ofs), +++ result = input_value_from_block (Array_data (b_arr, ofs), ++ b_arr->dim[0] - Long_val(ofs)); +++ CAMLreturn(result); ++ } ++ ++ CAMLprim value ml_blit_string_to_bigarray ++ (value s, value i, value a, value j, value l) ++ { ++- char *src = String_val(s) + Int_val(i); +++ char *src = String_val(s) + Long_val(i); ++ char *dest = Array_data(Bigarray_val(a), j); ++ memcpy(dest, src, Long_val(l)); ++ return Val_unit; diff --git a/unison/unison.desktop b/unison/unison.desktop new file mode 100644 index 0000000..650a63b --- /dev/null +++ b/unison/unison.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=unison +Comment=File synchronisation tool for X11 +TryExec=unison-gtk2 +Exec=unison-gtk2 +Terminal=false +Type=Application +Categories=GTK;Application;Network; +Icon=unison +StartupNotify=true diff --git a/unittest-cpp/PKGBUILD b/unittest-cpp/PKGBUILD new file mode 100644 index 0000000..89381d2 --- /dev/null +++ b/unittest-cpp/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Jesus E. + +pkgname=unittest-cpp +pkgver=2.0.0 +pkgrel=1 +pkgdesc='Lightweight unit testing framework for C++' +url="https://github.com/$pkgname/$pkgname/" +arch=(i686 x86_64) +license=(Expat) +depends=(gcc-libs) +source=($pkgname-$pkgver.tar.gz::https://github.com/$pkgname/$pkgname/archive/v$pkgver.tar.gz) +sha512sums=('39318f4ed31534c116679a3257bf1438a6c4b3bef1894dfd40aea934950c6c8197af6a7f61539b8e9ddc67327c9388d7e8a6f8a3e0e966ad26c07554e2429cab') + +prepare() { + cd $pkgname-$pkgver + + sed -i "s#m4_esyscmd_s[(][[]git[ ]describe[ ][-][-]tags[ ][|][ ]cut[ ][-]c2[-][]][)]#$pkgver#" configure.ac + + autoreconf -vfi +} + + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + install -Dm644 LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/unixodbc/PKGBUILD b/unixodbc/PKGBUILD new file mode 100644 index 0000000..73bae04 --- /dev/null +++ b/unixodbc/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=unixodbc +pkgver=2.3.11 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="ODBC is a free specification for providing application developers with a predictable API with which to access Data Sources" +arch=('i686' 'x86_64') +license=('GPL-2' 'LGPL-2.1') +url="http://www.unixodbc.org/" +backup=('etc/odbc.ini' 'etc/odbcinst.ini') +depends=('readline' 'libtool') +makedepends=('quilt') +source=(http://www.unixodbc.org/unixODBC-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/u/unixodbc/unixodbc_$_debver-$_debrel.debian.tar.xz) +sha512sums=('dddc32f90a7962e6988e1130a8093c6fb8b9ff532cad270d572250324aecbc739f45f9d8021d217313910bab25b08e69009b4f87456575535e93be1f46f5f13d' + '0c960f1c752ecae19ce11eb0f01589c1ebd7ed957f1f6ce1aa16f5c9a8d20635bcede2e371af68c0f54c20ec7b5c000cd787dda3bd52f6f44d524ad532abb780') + +prepare() { + cd unixODBC-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd unixODBC-${pkgver} + ./configure --prefix=/usr --sysconfdir=/etc + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +check() { + cd unixODBC-${pkgver} + make -k check +} + +package() { + cd unixODBC-${pkgver} + make DESTDIR=${pkgdir} install + touch "$pkgdir"/etc/{odbc,odbcinst}.ini + install -Dm644 exe/COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING.GPL + install -Dm644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/COPYING.LGPL +} diff --git a/unrealircd/PKGBUILD b/unrealircd/PKGBUILD new file mode 100644 index 0000000..a23a642 --- /dev/null +++ b/unrealircd/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=unrealircd +pkgver=6.1.10 +pkgrel=1 +pkgdesc="Free and libre IRC Server" +arch=('i686' 'x86_64') +url="https://www.unrealircd.org" +license=('GPL-2') +depends=('libressl' 'curl' 'c-ares' 'tre' 'pcre2' 'libnsl' 'argon2') +conflicts=('ircd') +provides=('ircd') +backup=('etc/unrealircd/unrealircd.conf') +install=unrealircd.install +source=("https://www.unrealircd.org/unrealircd4/unrealircd-$pkgver.tar.gz"{,.asc} + "unrealircd.initd" + "unrealircd.run") +sha512sums=('86aef198766682fb28dc42e359700a9e55549e256f29407ed192cbcf5727b234a0e086f2c614d9efc9613c674acc6455733aa6442833e8853b5b9d36e761b163' + 'SKIP' + 'd0bfec260d78330a2d723f63177782b7fb3061008f1af7969842491ed955478492b1691c78d9952aba0abe30c351ccb3ebee0946e75193c60e187e332ca1811c' + 'a87b14b148ebce28de91e78c15977af2f1752d201056fd0f2d8e60c7503c6c80e6382fa0e32e62b89d2a5b8ab0a0c122d4a0d05f36e35ca8e08205b8225531fe') +validpgpkeys=('1D2D2B03A0B68ED11D68A24BA7A21B0A108FF4A9') # UnrealIRCd releases + +prepare() { + cd "$srcdir"/unrealircd-$pkgver + sed -i \ + -e 's|$(INSTALL) -m 0700|$(INSTALL) -m 0755|g' \ + -e 's|$(INSTALL) -m 0600|$(INSTALL) -m 0644|g' \ + Makefile.in +} + +build() { + cd "$srcdir"/unrealircd-$pkgver + ./configure \ + --with-pidfile=/run/unrealircd/ircd.pid \ + --enable-ssl=/usr \ + --with-bindir=/usr/bin \ + --with-datadir=/var/lib/unrealircd \ + --with-confdir=/etc/unrealircd \ + --with-modulesdir=/usr/lib/unrealircd \ + --with-logdir=/var/log/unrealircd \ + --with-cachedir=/var/cache/unrealircd \ + --with-docdir=/usr/share/doc/unrealircd \ + --with-tmpdir=/tmp \ + --with-scriptdir=/usr \ + --with-nick-history=2000 \ + --with-permissions=0644 \ + --enable-dynamic-linking + make +} + +package() { + cd "$srcdir"/unrealircd-$pkgver + + export pkgdir + make install DESTDIR="$pkgdir" + mv "$pkgdir"/usr/unrealircd "$pkgdir"/etc/unrealircd/unrealircd + cp "$pkgdir"/etc/unrealircd/examples/example.conf "$pkgdir"/etc/unrealircd/unrealircd.conf + rm -rf "$pkgdir"/tmp + rm -rf "$pkgdir"/usr/source + sed -i -e 's/loadmodule "geoip_classic"\;/\/\/loadmodule "geoip_classic"\;/g' "$pkgdir"/etc/unrealircd/modules.default.conf + + # directories + install -d -m750 "$pkgdir"/var/cache/$pkgname + + # services + install -Dm0755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname + install -Dm0755 "$srcdir/$pkgname.run" "$pkgdir/etc/sv/$pkgname/run" + + # license + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/unrealircd/unrealircd.initd b/unrealircd/unrealircd.initd new file mode 100644 index 0000000..8b5d4c8 --- /dev/null +++ b/unrealircd/unrealircd.initd @@ -0,0 +1,16 @@ +#!/sbin/openrc-run + +pidfile="/run/${RC_SVCNAME}.pid" +command="/usr/bin/unrealircd" +command_background=true +command_user="ircd:ircd" + +depend() { + after net nss + use dns logger + provide ircd +} + +start_pre() { + checkpath -d /var/log/unrealircd +} diff --git a/unrealircd/unrealircd.install b/unrealircd/unrealircd.install new file mode 100644 index 0000000..77f2d36 --- /dev/null +++ b/unrealircd/unrealircd.install @@ -0,0 +1,28 @@ +post_install() { + # create group + if ! getent group ircd &>/dev/null; then + groupadd -r ircd >/dev/null + fi + # create user + if ! getent passwd ircd &>/dev/null; then + useradd -r ircd -d /var/empty -g ircd -s /bin/nologin >/dev/null + fi + + # show message + echo "SSL is enabled by default, so you need to create pem files" + echo "unrealircd.conf needs adjustments" + echo "See also: https://www.unrealircd.org/docs/Main_Page" +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd ircd &>/dev/null; then + userdel ircd >/dev/null + fi + if getent group ircd &>/dev/null; then + groupdel ircd >/dev/null + fi +} diff --git a/unrealircd/unrealircd.run b/unrealircd/unrealircd.run new file mode 100644 index 0000000..e56a5b2 --- /dev/null +++ b/unrealircd/unrealircd.run @@ -0,0 +1,3 @@ +#!/bin/sh +exec chpst -u ircd unrealircd -F + diff --git a/unrtf/PKGBUILD b/unrtf/PKGBUILD new file mode 100644 index 0000000..ce31ac2 --- /dev/null +++ b/unrtf/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=unrtf +pkgver=0.21.10 +pkgrel=1 +pkgdesc='Command-line program which converts RTF documents to other formats' +arch=('i686' 'x86_64') +url='https://www.gnu.org/software/unrtf/unrtf.html' +license=('GPL-3') +depends=('glibc') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz{,.sig}) +sha512sums=('31bedd1a23a052c1235e1328a12b346a0fe48b3f3cf78d72c068fe0d3edf18bc78f4c9dfe2f093ee8b4f3c79e923c6ceda49bc257d191dd5371f9273809343c9' + 'SKIP') +validpgpkeys=('46EA854F5FC5F5A0A9D2BFE89175BF0B3EC83090') # Dave Davey (lgf) + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/unshield/PKGBUILD b/unshield/PKGBUILD new file mode 100644 index 0000000..07b324d --- /dev/null +++ b/unshield/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=unshield +pkgver=1.4.2 +pkgrel=1 +pkgdesc="Extracts CAB files from installers" +arch=('i686' 'x86_64') +url='https://github.com/twogood/unshield' +license=('Expat') +depends=('zlib' 'libressl') +makedepends=('cmake') +source=("$pkgname-$pkgver.tar.gz::https://github.com/twogood/unshield/archive/$pkgver.tar.gz") +sha512sums=('3ddd5df47198adade66acf89644efe3a1c87d60fcdf511f8e5c1fb29bbb07e77a9abc57a05b161ecb54a26a2a86242bbcba6e90df770b1325965ff5aa8eddf58') + +build() { + cd "$srcdir"/${pkgname}-${pkgver} + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + . + make +} + +package() { + cd "$srcdir"/${pkgname}-${pkgver} + make DESTDIR="$pkgdir" install + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/unzip/PKGBUILD b/unzip/PKGBUILD new file mode 100644 index 0000000..d8c1ced --- /dev/null +++ b/unzip/PKGBUILD @@ -0,0 +1,98 @@ +# Maintainer: Jesus E. + +_pkgname=unzip-libre +pkgname=unzip +pkgver=6.0 +_pkgver=${pkgver/./} +_debver=6.0 +_debrel=26 +pkgrel=14 +pkgdesc='For extracting and viewing files in .zip archives' +url='https://www.info-zip.org/UnZip.html' +arch=('i686' 'x86_64') +license=('custom:UnZip') +depends=('bzip2' 'bash') +makedepends=('quilt') +conflicts=("${_pkgname}") +replaces=("${_pkgname}") +mksource=("https://downloads.sourceforge.net/infozip/${pkgname}${_pkgver}.tar.gz" + 'match.patch') +source=("https://repo.hyperbola.info:50000/sources/${_pkgname}/${pkgname}${_pkgver}-libre.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/u/unzip/unzip_${_debver}-${_debrel}+deb11u1.debian.tar.xz" + 'overflow-fsize.patch' + 'cve20149636.patch' + 'test_compr_eb.patch' + 'getZip64Data.patch' + 'crc32.patch' + 'empty-input.patch' + 'csiz-underflow.patch' + 'nextbyte-overflow.patch') +mksha512sums=('0694e403ebc57b37218e00ec1a406cae5cc9c5b52b6798e0d4590840b6cdbf9ddc0d9471f67af783e960f8fa2e620394d51384257dca23d06bcd90224a80ce5d' + '69df98c4b5279ae5d632a6878f471f8deb420a16e9fc879bb25f15c4400cce15617e40a662d4be1a3888e28bb7cef0f3b70e160cf02fd9dc9c703416e36261d8') +sha512sums=('620c1532d6d046064b5024856fd9281644b98514ccb335a4f78c46e7f36fac84156fe74fb02a5b11539b07a5534ec8146077f99ac2f0202a84047cfdecb0dce2' + 'SKIP' + 'f6a5f7c25ba6481dcb6e63619053fd0cdfbac2c9581bbb0ebd85cec40d9ed97222e589d2af02d23d5afe72149a0fa66058e155000f6814bb66b55d2c5403bc25' + 'c6e06fdd95c74a53bc5f774ae84427701d09374173342678ee75ff6dce5c1fab8f61f6a2f0fe2ede4859fc854869386869293f99573a11308536a45ce5f969c3' + '7e5274db1d0e9b1db87ce543ddb4edea67cea193ee5394a5a46f3813169c33508cbea96cc0ce88eb4ffc64b21df02c18724d0fe8f7d2814954233f646c386b3a' + '4283d5da3a0403a178295602a5dab7f6d8e2a885c528b85254903e90474cb72a0ed766aad0fce735353adb57c37ba8992e394d5ef6a24a52ed11677d03952ce9' + 'c70609994ac0f056b9cb2797884036f3aa29a542c36b7c259ce99e046a0362b2d81ab4fd08c10d5de25d6799e7aa40a4813dd3070e11fe840f142d6b14db606d' + 'e74c792aa7d45a37a43d90d732257fe3a5efae6cfd9a0d4d853bb7c5decd10c8dd7b5cdb919b51404e136844899304efc07e93e09ae4cbbce52352b39e1ed82c' + 'a9be2b9a7bdb42b3f4c1d92cba9c55e2731fdf5bac46b50caadec060a12e474ac0e3fcb0ff8dfaac086a5c8651c6f5602d191af13a1947b7ffae6269141ea5fe' + '21ec0286aaa3154c61025a33d66c10f901ee57216d20524f594052a13271ee32236686375b9050f2b0228f3718135b9159190ff6869a294363cd65b066117c40' + '77f228b4135848b5259ef1eb926a242d8deb8ce54ff02533d27541f5f1e737e72a52f50b5a291d7a266eaee677e1aec52e97fda962926462697551286d14c49d') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + cd "${srcdir}/${pkgname}${_pkgver}" + + # from http://bzr.trisquel.info/package-helpers/trunk/annotate/head%3A/helpers/natty/DATA/unzip/match.patch + patch -Np0 -i ${srcdir}/match.patch +} + +prepare() { + cd "${srcdir}/${pkgname}${_pkgver}" + + if [[ $pkgver = $_debver ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + else + sed -i "/MANDIR =/s#)/#)/share/#" unix/Makefile + patch -p1 -i ../overflow-fsize.patch #FS#44171 + patch -p1 -i ../cve20149636.patch #FS#44171 + patch -i ../test_compr_eb.patch # FS#43391 + patch -i ../getZip64Data.patch # FS#43300 + patch -i ../crc32.patch # FS#43300 + patch -p1 -i ../empty-input.patch # FS#46955 + patch -p1 -i ../csiz-underflow.patch # FS#46955 + patch -p1 -i ../nextbyte-overflow.patch # FS#46955 + fi +} + +build() { + cd "${srcdir}/${pkgname}${_pkgver}" + + # DEFINES, make, and install args from Debian + DEFINES='-DACORN_FTYPE_NFS -DWILD_STOP_AT_DIR -DLARGE_FILE_SUPPORT \ + -DUNICODE_SUPPORT -DUNICODE_WCHAR -DUTF8_MAYBE_NATIVE -DNO_LCHMOD \ + -DDATE_FORMAT=DF_YMD -DUSE_BZIP2 -DNOMEMCPY -DNO_WORKING_ISPRINT' + + make -f unix/Makefile prefix=/usr \ + D_USE_BZ2=-DUSE_BZIP2 L_BZ2=-lbz2 \ + LF2="$LDFLAGS" CF="$CFLAGS $CPPFLAGS -I. $DEFINES" \ + unzips +} + +package() { + cd "${srcdir}/${pkgname}${_pkgver}" + make -f unix/Makefile prefix="${pkgdir}"/usr install + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + # correct package-structure + mv "${pkgdir}/usr/man" "${pkgdir}/usr/share" +} diff --git a/unzip/crc32.patch b/unzip/crc32.patch new file mode 100644 index 0000000..43b29d7 --- /dev/null +++ b/unzip/crc32.patch @@ -0,0 +1,45 @@ +--- unzip60/extract.c 2010-04-03 14:41:55 -0500 ++++ unzip60/extract.c 2014-12-03 15:33:35 -0600 +@@ -1,5 +1,5 @@ + /* +- Copyright (c) 1990-2009 Info-ZIP. All rights reserved. ++ Copyright (c) 1990-2014 Info-ZIP. All rights reserved. + + See the accompanying file LICENSE, version 2009-Jan-02 or later + (the contents of which are also included in unzip.h) for terms of use. +@@ -298,6 +298,8 @@ + #ifndef SFX + static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \ + EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n"; ++ static ZCONST char Far TooSmallEFlength[] = "bad extra-field entry:\n \ ++ EF block length (%u bytes) invalid (< %d)\n"; + static ZCONST char Far InvalidComprDataEAs[] = + " invalid compressed data for EAs\n"; + # if (defined(WIN32) && defined(NTSD_EAS)) +@@ -2023,7 +2025,8 @@ + ebID = makeword(ef); + ebLen = (unsigned)makeword(ef+EB_LEN); + +- if (ebLen > (ef_len - EB_HEADSIZE)) { ++ if (ebLen > (ef_len - EB_HEADSIZE)) ++ { + /* Discovered some extra field inconsistency! */ + if (uO.qflag) + Info(slide, 1, ((char *)slide, "%-22s ", +@@ -2032,6 +2035,16 @@ + ebLen, (ef_len - EB_HEADSIZE))); + return PK_ERR; + } ++ else if (ebLen < EB_HEADSIZE) ++ { ++ /* Extra block length smaller than header length. */ ++ if (uO.qflag) ++ Info(slide, 1, ((char *)slide, "%-22s ", ++ FnFilter1(G.filename))); ++ Info(slide, 1, ((char *)slide, LoadFarString(TooSmallEFlength), ++ ebLen, EB_HEADSIZE)); ++ return PK_ERR; ++ } + + switch (ebID) { + case EF_OS2: diff --git a/unzip/csiz-underflow.patch b/unzip/csiz-underflow.patch new file mode 100644 index 0000000..45afbdd --- /dev/null +++ b/unzip/csiz-underflow.patch @@ -0,0 +1,32 @@ +From: Kamil Dudka +Date: Tue, 22 Sep 2015 18:52:23 +0200 +Subject: [PATCH] extract: prevent unsigned overflow on invalid input +Origin: other, https://bugzilla.redhat.com/attachment.cgi?id=1075942 +Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1260944 + +Suggested-by: Stefan Cornelius +--- + extract.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +--- a/extract.c ++++ b/extract.c +@@ -1257,8 +1257,17 @@ + if (G.lrec.compression_method == STORED) { + zusz_t csiz_decrypted = G.lrec.csize; + +- if (G.pInfo->encrypted) ++ if (G.pInfo->encrypted) { ++ if (csiz_decrypted < 12) { ++ /* handle the error now to prevent unsigned overflow */ ++ Info(slide, 0x401, ((char *)slide, ++ LoadFarStringSmall(ErrUnzipNoFile), ++ LoadFarString(InvalidComprData), ++ LoadFarStringSmall2(Inflate))); ++ return PK_ERR; ++ } + csiz_decrypted -= 12; ++ } + if (G.lrec.ucsize != csiz_decrypted) { + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall2(WrnStorUCSizCSizDiff), diff --git a/unzip/cve20149636.patch b/unzip/cve20149636.patch new file mode 100644 index 0000000..228c283 --- /dev/null +++ b/unzip/cve20149636.patch @@ -0,0 +1,25 @@ +diff --git a/extract.c b/extract.c +index a0a4929..9ef80b3 100644 +--- a/extract.c ++++ b/extract.c +@@ -2214,6 +2214,7 @@ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata) + ulg eb_ucsize; + uch *eb_ucptr; + int r; ++ ush method; + + if (compr_offset < 4) /* field is not compressed: */ + return PK_OK; /* do nothing and signal OK */ +@@ -2223,6 +2224,12 @@ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata) + eb_size <= (compr_offset + EB_CMPRHEADLEN))) + return IZ_EF_TRUNC; /* no compressed data! */ + ++ method = makeword(eb + (EB_HEADSIZE + compr_offset)); ++ if ((method == STORED) && (eb_size != compr_offset + EB_CMPRHEADLEN + eb_ucsize)) ++ return PK_ERR; /* compressed & uncompressed ++ * should match in STORED ++ * method */ ++ + if ( + #ifdef INT_16BIT + (((ulg)(extent)eb_ucsize) != eb_ucsize) || diff --git a/unzip/empty-input.patch b/unzip/empty-input.patch new file mode 100644 index 0000000..45cbe92 --- /dev/null +++ b/unzip/empty-input.patch @@ -0,0 +1,26 @@ +From: Kamil Dudka +Date: Mon, 14 Sep 2015 18:24:56 +0200 +Subject: fix infinite loop when extracting empty bzip2 data +Bug-Debian: https://bugs.debian.org/802160 +Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1260944 +Origin: other, https://bugzilla.redhat.com/attachment.cgi?id=1073339 + +--- + extract.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/extract.c ++++ b/extract.c +@@ -2728,6 +2728,12 @@ + int repeated_buf_err; + bz_stream bstrm; + ++ if (G.incnt <= 0 && G.csize <= 0L) { ++ /* avoid an infinite loop */ ++ Trace((stderr, "UZbunzip2() got empty input\n")); ++ return 2; ++ } ++ + #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) + wsize = G.redirect_size, redirSlide = G.redirect_buffer; diff --git a/unzip/getZip64Data.patch b/unzip/getZip64Data.patch new file mode 100644 index 0000000..1684c73 --- /dev/null +++ b/unzip/getZip64Data.patch @@ -0,0 +1,133 @@ +--- process.c 2009-03-06 02:25:10.000000000 +0100 ++++ process.c 2014-12-05 22:42:39.000000000 +0100 +@@ -1,5 +1,5 @@ + /* +- Copyright (c) 1990-2009 Info-ZIP. All rights reserved. ++ Copyright (c) 1990-2014 Info-ZIP. All rights reserved. + + See the accompanying file LICENSE, version 2009-Jan-02 or later + (the contents of which are also included in unzip.h) for terms of use. +@@ -1888,48 +1888,82 @@ int getZip64Data(__G__ ef_buf, ef_len) + and a 4-byte version of disk start number. + Sets both local header and central header fields. Not terribly clever, + but it means that this procedure is only called in one place. ++ ++ 2014-12-05 SMS. ++ Added checks to ensure that enough data are available before calling ++ makeint64() or makelong(). Replaced various sizeof() values with ++ simple ("4" or "8") constants. (The Zip64 structures do not depend ++ on our variable sizes.) Error handling is crude, but we should now ++ stay within the buffer. + ---------------------------------------------------------------------------*/ + ++#define Z64FLGS 0xffff ++#define Z64FLGL 0xffffffff ++ + if (ef_len == 0 || ef_buf == NULL) + return PK_COOL; + + Trace((stderr,"\ngetZip64Data: scanning extra field of length %u\n", + ef_len)); + +- while (ef_len >= EB_HEADSIZE) { ++ while (ef_len >= EB_HEADSIZE) ++ { + eb_id = makeword(EB_ID + ef_buf); + eb_len = makeword(EB_LEN + ef_buf); + +- if (eb_len > (ef_len - EB_HEADSIZE)) { +- /* discovered some extra field inconsistency! */ ++ if (eb_len > (ef_len - EB_HEADSIZE)) ++ { ++ /* Extra block length exceeds remaining extra field length. */ + Trace((stderr, + "getZip64Data: block length %u > rest ef_size %u\n", eb_len, + ef_len - EB_HEADSIZE)); + break; + } +- if (eb_id == EF_PKSZ64) { +- ++ if (eb_id == EF_PKSZ64) ++ { + int offset = EB_HEADSIZE; + +- if (G.crec.ucsize == 0xffffffff || G.lrec.ucsize == 0xffffffff){ +- G.lrec.ucsize = G.crec.ucsize = makeint64(offset + ef_buf); +- offset += sizeof(G.crec.ucsize); ++ if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL)) ++ { ++ if (offset+ 8 > ef_len) ++ return PK_ERR; ++ ++ G.crec.ucsize = G.lrec.ucsize = makeint64(offset + ef_buf); ++ offset += 8; + } +- if (G.crec.csize == 0xffffffff || G.lrec.csize == 0xffffffff){ +- G.csize = G.lrec.csize = G.crec.csize = makeint64(offset + ef_buf); +- offset += sizeof(G.crec.csize); ++ ++ if ((G.crec.csize == Z64FLGL) || (G.lrec.csize == Z64FLGL)) ++ { ++ if (offset+ 8 > ef_len) ++ return PK_ERR; ++ ++ G.csize = G.crec.csize = G.lrec.csize = makeint64(offset + ef_buf); ++ offset += 8; + } +- if (G.crec.relative_offset_local_header == 0xffffffff){ ++ ++ if (G.crec.relative_offset_local_header == Z64FLGL) ++ { ++ if (offset+ 8 > ef_len) ++ return PK_ERR; ++ + G.crec.relative_offset_local_header = makeint64(offset + ef_buf); +- offset += sizeof(G.crec.relative_offset_local_header); ++ offset += 8; + } +- if (G.crec.disk_number_start == 0xffff){ ++ ++ if (G.crec.disk_number_start == Z64FLGS) ++ { ++ if (offset+ 4 > ef_len) ++ return PK_ERR; ++ + G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf); +- offset += sizeof(G.crec.disk_number_start); ++ offset += 4; + } ++#if 0 ++ break; /* Expect only one EF_PKSZ64 block. */ ++#endif /* 0 */ + } + +- /* Skip this extra field block */ ++ /* Skip this extra field block. */ + ef_buf += (eb_len + EB_HEADSIZE); + ef_len -= (eb_len + EB_HEADSIZE); + } +--- fileio.c 2009-04-20 02:03:44.000000000 +0200 ++++ fileio.c 2014-12-05 22:44:16.000000000 +0100 +@@ -176,6 +176,8 @@ static ZCONST char Far FilenameTooLongTr + #endif + static ZCONST char Far ExtraFieldTooLong[] = + "warning: extra field too long (%d). Ignoring...\n"; ++static ZCONST char Far ExtraFieldCorrupt[] = ++ "warning: extra field (type: 0x%04x) corrupt. Continuing...\n"; + + #ifdef WINDLL + static ZCONST char Far DiskFullQuery[] = +@@ -2295,7 +2297,12 @@ int do_string(__G__ length, option) /* + if (readbuf(__G__ (char *)G.extra_field, length) == 0) + return PK_EOF; + /* Looks like here is where extra fields are read */ +- getZip64Data(__G__ G.extra_field, length); ++ if (getZip64Data(__G__ G.extra_field, length) != PK_COOL) ++ { ++ Info(slide, 0x401, ((char *)slide, ++ LoadFarString( ExtraFieldCorrupt), EF_PKSZ64)); ++ error = PK_WARN; ++ } + #ifdef UNICODE_SUPPORT + G.unipath_filename = NULL; + if (G.UzO.U_flag < 2) { diff --git a/unzip/nextbyte-overflow.patch b/unzip/nextbyte-overflow.patch new file mode 100644 index 0000000..91482da --- /dev/null +++ b/unzip/nextbyte-overflow.patch @@ -0,0 +1,33 @@ +From: Petr Stodulka +Date: Mon, 14 Sep 2015 18:23:17 +0200 +Subject: Upstream fix for heap overflow +Bug-Debian: https://bugs.debian.org/802162 +Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1260944 +Origin: https://bugzilla.redhat.com/attachment.cgi?id=1073002 +Forwarded: yes + +--- + crypt.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +--- a/crypt.c ++++ b/crypt.c +@@ -465,7 +465,17 @@ + GLOBAL(pInfo->encrypted) = FALSE; + defer_leftover_input(__G); + for (n = 0; n < RAND_HEAD_LEN; n++) { +- b = NEXTBYTE; ++ /* 2012-11-23 SMS. (OUSPG report.) ++ * Quit early if compressed size < HEAD_LEN. The resulting ++ * error message ("unable to get password") could be improved, ++ * but it's better than trying to read nonexistent data, and ++ * then continuing with a negative G.csize. (See ++ * fileio.c:readbyte()). ++ */ ++ if ((b = NEXTBYTE) == (ush)EOF) ++ { ++ return PK_ERR; ++ } + h[n] = (uch)b; + Trace((stdout, " (%02x)", h[n])); + } diff --git a/unzip/overflow-fsize.patch b/unzip/overflow-fsize.patch new file mode 100644 index 0000000..910b22d --- /dev/null +++ b/unzip/overflow-fsize.patch @@ -0,0 +1,34 @@ +t a/list.c b/list.c +index f7359c3..4c3d703 100644 +--- a/list.c ++++ b/list.c +@@ -97,7 +97,7 @@ int list_files(__G) /* return PK-type error code */ + { + int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL; + #ifndef WINDLL +- char sgn, cfactorstr[10]; ++ char sgn, cfactorstr[13]; + int longhdr=(uO.vflag>1); + #endif + int date_format; +@@ -339,7 +339,19 @@ int list_files(__G) /* return PK-type error code */ + G.crec.compression_method == ENHDEFLATED) { + methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3]; + } else if (methnum >= NUM_METHODS) { +- sprintf(&methbuf[4], "%03u", G.crec.compression_method); ++ /* 2013-02-26 SMS. ++ * http://sourceforge.net/tracker/?func=detail ++ * &aid=2861648&group_id=118012&atid=679786 ++ * Unexpectedly large compression methods overflow ++ * &methbuf[]. Use the old, three-digit decimal format ++ * for values which fit. Otherwise, sacrifice the ++ * colon, and use four-digit hexadecimal. ++ */ ++ if (G.crec.compression_method <= 999) { ++ sprintf( &methbuf[ 4], "%03u", G.crec.compression_method); ++ } else { ++ sprintf( &methbuf[ 3], "%04X", G.crec.compression_method); ++ } + } + + #if 0 /* GRR/Euro: add this? */ diff --git a/unzip/test_compr_eb.patch b/unzip/test_compr_eb.patch new file mode 100644 index 0000000..7e8c297 --- /dev/null +++ b/unzip/test_compr_eb.patch @@ -0,0 +1,23 @@ +--- extract.c 2009-03-14 02:32:52.000000000 +0100 ++++ extract.c 2014-12-05 22:43:13.000000000 +0100 +@@ -2221,10 +2234,17 @@ static int test_compr_eb(__G__ eb, eb_si + if (compr_offset < 4) /* field is not compressed: */ + return PK_OK; /* do nothing and signal OK */ + ++ /* Return no/bad-data error status if any problem is found: ++ * 1. eb_size is too small to hold the uncompressed size ++ * (eb_ucsize). (Else extract eb_ucsize.) ++ * 2. eb_ucsize is zero (invalid). 2014-12-04 SMS. ++ * 3. eb_ucsize is positive, but eb_size is too small to hold ++ * the compressed data header. ++ */ + if ((eb_size < (EB_UCSIZE_P + 4)) || +- ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L && +- eb_size <= (compr_offset + EB_CMPRHEADLEN))) +- return IZ_EF_TRUNC; /* no compressed data! */ ++ ((eb_ucsize = makelong( eb+ (EB_HEADSIZE+ EB_UCSIZE_P))) == 0L) || ++ ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN)))) ++ return IZ_EF_TRUNC; /* no/bad compressed data! */ + + if ( + #ifdef INT_16BIT diff --git a/upx/PKGBUILD b/upx/PKGBUILD new file mode 100644 index 0000000..9fa0c77 --- /dev/null +++ b/upx/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=upx +pkgver=3.96 +_debver=3.96 +_debrel=2 +pkgrel=1 +pkgdesc='Extendable, high-performance executable packer for several executable formats' +arch=(i686 x86_64) +url='https://github.com/upx/upx' +license=(custom:GPL-2+UPX-Linking-Exception) +depends=(ucl) +makedepends=(perl quilt) +source=("https://github.com/$pkgname/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver-src.tar.xz" + "https://deb.debian.org/debian/pool/main/u/upx-ucl/upx-ucl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('2d4d1be21d274d9bfdee9b9815396f5e5ff0bcdfb781b7be5fafa4d1e224028e412ec5f5ba607c482671aae27ccf9069abb2db0fb58f78f3a102a51897df2b11' + '84a491a89b9dd43d73aea804a2c57e3f3ceaa288a54a8972b8046afc6bcec0a38ebf1db2bebc7edfd500a3322621c3d69973df15df23bcd51bd03a22d25d7477') + +prepare() { + cd $pkgname-$pkgver-src + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + make -C $pkgname-$pkgver-src \ + CHECK_WHITESPACE=/bin/true \ + UPX_LZMA_VERSION=0x465 \ + UPX_LZMADIR="$srcdir" \ + all +} + +package() { + cd $pkgname-$pkgver-src + install -Dm755 src/upx.out "$pkgdir/usr/bin/upx" + install -Dm644 doc/upx.1 "$pkgdir/usr/share/man/man1/upx.1" + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim: ts=2 sw=2 et: diff --git a/usb_modeswitch/PKGBUILD b/usb_modeswitch/PKGBUILD new file mode 100644 index 0000000..bfe18f7 --- /dev/null +++ b/usb_modeswitch/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=usb_modeswitch +pkgver=2.6.1 +_debver=$pkgver +_debrel=1 +pkgrel=1 +_pkgdata=20191128 +pkgdesc="Activating switchable USB devices on GNU/Linux-libre." +arch=('i686' 'x86_64') +url="http://www.draisberghof.de/usb_modeswitch/" +license=('GPL-2') +depends=('libusb' 'tcl') +makedepends=('gcc' 'make' 'quilt') +backup=('etc/$pkgname.conf') +source=("http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/u/usb-modeswitch/usb-modeswitch_$_debver-$_debrel.debian.tar.xz" + "http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-${_pkgdata}.tar.bz2" + "usb-modeswitch-${pkgver}-device_reference.txt::http://www.draisberghof.de/usb_modeswitch/device_reference.txt") +sha512sums=('5d800b45257ca1182a13155dc37b614ee2d93273ed226cc9d05b6ae423f9e88b7c9aca6829604bdb86f68707ddf2c51c9ad2bcf898b8261b2c5bb56a21351e1e' + 'bb40df4c5b56af5fe9b66ceef7d6d55cfd41e4700419068bc79f3963fed86122c864ae761975725de32a004d7d832a49af7c55ecfff98ad9f2dc349a6e64872b' + '4b5954ad83f7281e42321c16f5cc5b956923cc0e2db5f238cc64b3ea37a419768f01f2e26310f2b4fe9a9a5b1d901517933effd6e6edd23bc9b8d0c039ed0ba2' + '0aa8af40bc4d682cd935e4b3c8584da3664d12c08e8ec23753d2a7a38c680544aaaf526896b07621cd1136293986cd3a78197240e19d4b4b8d9a1469ff2b4373') + +prepare() { + cd "$srcdir"/usb-modeswitch-$pkgver/ + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0002-Detect-if-systemd-is-running-not-only-if-its-corresp.patch || true + rm -v debian/patches/0005-Add-Documentation-pointer-in-systemd-service-unit.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir"/usb-modeswitch-$pkgver/ + make clean + make +} + +package() { + cd "$srcdir"/usb-modeswitch-$pkgver/ + make DESTDIR="$pkgdir" UDEVDIR="$pkgdir"/lib/udev install + + install -Dm644 COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING + install -Dm644 "$srcdir"/usb-modeswitch-${pkgver}-device_reference.txt "$pkgdir"/etc/usb_modeswitch.setup/usb-modeswitch-${pkgver}-device_reference.txt + + cd "$srcdir"/usb-modeswitch-data-${_pkgdata} + make DESTDIR="$pkgdir" RULESDIR="$pkgdir"/lib/udev/rules.d install +} diff --git a/usbredir/PKGBUILD b/usbredir/PKGBUILD new file mode 100644 index 0000000..501f155 --- /dev/null +++ b/usbredir/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=usbredir +pkgver=0.8.0 +pkgrel=1 +pkgdesc="USB traffic redirection protocol" +arch=('i686' 'x86_64') +url="https://www.spice-space.org/spice-user-manual.html#_usb_redirection" +license=('GPL-2') +depends=('libusb') +source=(https://spice-space.org/download/usbredir/$pkgname-$pkgver.tar.bz2) +sha512sums=('976274adf08f8691b0961f5238021e988a4347873d0c67576038f44cbdaf25c2bb325d8cede0a507933b719f9715b1508ccd1d8f52fccd36f13a7640553dc108') + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir/" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} + +# vim:set ts=2 sw=2 et: diff --git a/utf8cpp/PKGBUILD b/utf8cpp/PKGBUILD new file mode 100644 index 0000000..8cfeee6 --- /dev/null +++ b/utf8cpp/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=utf8cpp +pkgver=3.2.3 +pkgrel=1 +pkgdesc="UTF-8 with C++ in a Portable Way" +arch=('any') +url='https://github.com/nemtrif/utfcpp' +license=('Boost-1.0') +makedepends=('cmake') +source=("https://github.com/nemtrif/utfcpp/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('760977df613abfb34fb7864cbbe90e8f2cf1f42b8502427a5e9c2a756ce87655120b7490ebdaa6c926a2cb56caef9ead0e0e10fb7cb732cf99a5b43c0cca411b') + +build() { + cmake -B build -S ${pkgname/8}-${pkgver} \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DUTF8_TESTS=OFF + make -C build +} + +package() { + make -C build DESTDIR="${pkgdir}" install + install -Dm644 ${pkgname/8}-${pkgver}/LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname}/ +} diff --git a/uthash/PKGBUILD b/uthash/PKGBUILD new file mode 100644 index 0000000..1c07d18 --- /dev/null +++ b/uthash/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=uthash +pkgver=2.1.0 +_debver=2.1.0 +_debrel=1 +pkgrel=1 +pkgdesc='C preprocessor implementations of a hash table and a linked list' +arch=('any') +url='https://troydhanson.github.io/uthash/' +license=('Simplified-BSD') +makedepends=('quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/troydhanson/$pkgname/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/u/uthash/uthash_$_debver-$_debrel.debian.tar.xz") +sha512sums=('c8005113a48ec7636715ecec0286a5d9086971a7267947aba9e0ad031b6113a4f38a1fb512d33d6fefb5891635fdd31169ce4d6ab04b938bda612ebbccb3eda0' + 'e9e664f1bdf24a712161fba3d66f0966ddf37753f68363d916472d9e8f683db7a70be36d8182b31bdbd66bc0da9ddca496f11d269d691cabf00804691da7d4b7') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}/src" + + # create directory for header files + install -dm755 "${pkgdir}"/usr/include/ + + # install header files in /usr/include + for h in *.h; do + install -m 644 ${h} "${pkgdir}"/usr/include/ + done + + # install license file + install -Dm644 ../LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/uudeview/PKGBUILD b/uudeview/PKGBUILD new file mode 100644 index 0000000..d7ecc62 --- /dev/null +++ b/uudeview/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: Jesus E. + +pkgname=uudeview +pkgver=0.5.20 +_debver=$pkgver +_debrel=12 +pkgrel=1 +pkgdesc="UUDeview helps transmitting & receiving binary files using mail or newsgroups" +arch=('i686' 'x86_64') +url='http://www.fpx.de/fp/Software/UUDeview/' +license=('GPL-2') +makedepends=('quilt') +optdepends=('tk: for GUI') +options=('staticlibs') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/u/uudeview/uudeview_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/u/uudeview/uudeview_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('6c355d01ed2f9b842d348da8630da7e63834edb835861a8cbbf642c73d2600a10a065a626da5bc3993595e3b91dfd8410aba6e85c5daa9c27cf3b612105eed5c' + 'daaceb1ba106c9dc889a396d8c0fe5ee84d58bb85bd762efd39e6489994015d01cc3d168d81eedb1df8245a19ff3d24183dfa9e02360f79cd07361312c4e04e2') + +prepare() { + mv "$pkgname-$pkgver.orig" "$pkgname-$pkgver" + cd "$srcdir"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/040_add_shared_lib.diff || true + + quilt push -av + fi +} + +build() { + cd "$srcdir"/uudeview-$pkgver/uulib + autoreconf + ./configure \ + --prefix=/usr + make + + cd "$srcdir"/$pkgname-$pkgver + autoreconf + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man CFLAGS="-ffat-lto-objects" + make +} + +package() { + install -d "$pkgdir"/usr/{bin,lib/uudeview,include/uudeview} + + cd "$srcdir"/$pkgname-$pkgver + make prefix="$pkgdir"/usr MANDIR="$pkgdir"/usr/share/man install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + + cd "$srcdir"/uudeview-$pkgver/uulib + cp -v *.o "$pkgdir"/usr/lib/uudeview + cp -v *.a "$pkgdir"/usr/lib/uudeview + cp -v *.h "$pkgdir"/usr/include/uudeview +} diff --git a/uuid/PKGBUILD b/uuid/PKGBUILD new file mode 100644 index 0000000..2846a79 --- /dev/null +++ b/uuid/PKGBUILD @@ -0,0 +1,32 @@ +# Maintainer: Jesus E. + +pkgname=uuid +_pkgname=ossp-uuid +pkgver=1.6.2 +pkgrel=1 +pkgdesc="OSSP Universally Unique Identifier" +arch=('i686' 'x86_64') +url='http://www.ossp.org/pkg/lib/uuid' +license=('Expat') +depends=('sh') +options=('!libtool') +source=("ftp://ftp.ossp.org/pkg/lib/uuid/${pkgname}-${pkgver}.tar.gz" + "ossp.patch") +sha512sums=('16c7e016ce08d7679cc6ee7dec43a886a8c351960acdde99f8f9b590c7232d521bc6e66e4766d969d22c3f835dcc2814fdecc44eef1cd11e7b9b0f9c41b5c03e' + '36d0ea6088c12a5e382c3098f11214b202e96f91e4efd5cac567d5a81e836f78eeb654f051c576a211ec2dd5337b1f0a20d4246e84a0842fce22ae5fa96e5be9') + +build() { + unset PERL_MM_OPT + cd "${pkgname}-${pkgver}" + + # rename because conflicts with util-linux + patch -p1 -i "${srcdir}"/ossp.patch + ./configure --prefix=/usr --with-perl + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 README -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/uuid/ossp.patch b/uuid/ossp.patch new file mode 100644 index 0000000..c0c7d57 --- /dev/null +++ b/uuid/ossp.patch @@ -0,0 +1,207 @@ +diff -up uuid-1.6.1/uuid-config.in.BAD uuid-1.6.1/uuid-config.in +--- uuid-1.6.1/uuid-config.in.BAD 2008-03-06 11:56:13.000000000 -0500 ++++ uuid-1.6.1/uuid-config.in 2008-03-06 11:56:25.000000000 -0500 +@@ -121,7 +121,7 @@ do + output_extra="$output_extra $uuid_ldflags" + ;; + --libs) +- output="$output -luuid" ++ output="$output -lossp-uuid" + output_extra="$output_extra $uuid_libs" + ;; + * ) +diff -up uuid-1.6.1/Makefile.in.BAD uuid-1.6.1/Makefile.in +--- uuid-1.6.1/Makefile.in.BAD 2008-03-06 11:10:13.000000000 -0500 ++++ uuid-1.6.1/Makefile.in 2008-03-06 11:11:39.000000000 -0500 +@@ -62,13 +62,13 @@ PERL = @PERL@ + PHP = @PHP@ + PG_CONFIG = @PG_CONFIG@ + +-LIB_NAME = libuuid.la ++LIB_NAME = libossp-uuid.la + LIB_OBJS = uuid.lo uuid_md5.lo uuid_sha1.lo uuid_prng.lo uuid_mac.lo uuid_time.lo uuid_ui64.lo uuid_ui128.lo uuid_str.lo + +-DCE_NAME = libuuid_dce.la ++DCE_NAME = libossp-uuid_dce.la + DCE_OBJS = uuid_dce.lo $(LIB_OBJS) + +-CXX_NAME = libuuid++.la ++CXX_NAME = libossp-uuid++.la + CXX_OBJS = uuid++.lo $(LIB_OBJS) + + PRG_NAME = uuid +@@ -79,10 +79,10 @@ MAN_NAME = uuid.3 uuid++.3 uuid.1 + PERL_NAME = $(S)/perl/blib/lib/OSSP/uuid.pm + PERL_OBJS = $(S)/perl/uuid.pm + +-PHP_NAME = $(S)/php/modules/uuid.so ++PHP_NAME = $(S)/php/modules/ossp-uuid.so + PHP_OBJS = $(S)/php/uuid.c + +-PGSQL_NAME = $(S)/pgsql/libuuid.so ++PGSQL_NAME = $(S)/pgsql/libossp-uuid.so + PGSQL_OBJS = $(S)/pgsql/uuid.c + + TARGETS = $(LIB_NAME) @DCE_NAME@ @CXX_NAME@ $(PRG_NAME) @PERL_NAME@ @PHP_NAME@ @PGSQL_NAME@ +@@ -231,7 +231,7 @@ install: + $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(mandir)/man1 + $(SHTOOL) install -c -m 755 uuid-config $(DESTDIR)$(bindir)/ + $(SHTOOL) install -c -m 644 $(S)/uuid-config.1 $(DESTDIR)$(mandir)/man1/ +- $(SHTOOL) install -c -m 644 $(S)/uuid.pc $(DESTDIR)$(libdir)/pkgconfig/ ++ $(SHTOOL) install -c -m 644 $(S)/uuid.pc $(DESTDIR)$(libdir)/pkgconfig/ossp-uuid.pc + $(SHTOOL) install -c -m 644 uuid.h $(DESTDIR)$(includedir)/ + -@if [ ".$(WITH_DCE)" = .yes ]; then \ + echo "$(SHTOOL) install -c -m 644 $(S)/uuid_dce.h $(DESTDIR)$(includedir)/"; \ +@@ -241,7 +241,7 @@ install: + echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.hh $(DESTDIR)$(includedir)/"; \ + $(SHTOOL) install -c -m 644 $(S)/uuid++.hh $(DESTDIR)$(includedir)/; \ + fi +- $(SHTOOL) install -c -m 644 $(S)/uuid.3 $(DESTDIR)$(mandir)/man3/ ++ $(SHTOOL) install -c -m 644 $(S)/uuid.3 $(DESTDIR)$(mandir)/man3/ossp-uuid.3 + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + echo "$(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/"; \ + $(SHTOOL) install -c -m 644 $(S)/uuid++.3 $(DESTDIR)$(mandir)/man3/; \ +@@ -276,7 +276,7 @@ uninstall: + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + $(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/$(CXX_NAME); \ + fi +- -$(RM) $(DESTDIR)$(mandir)/man3/uuid.3 ++ -$(RM) $(DESTDIR)$(mandir)/man3/ossp-uuid.3 + -@if [ ".$(WITH_CXX)" = .yes ]; then \ + echo "$(RM) $(DESTDIR)$(mandir)/man3/uuid++.3"; \ + $(RM) $(DESTDIR)$(mandir)/man3/uuid++.3; \ +@@ -290,7 +290,7 @@ uninstall: + echo "$(RM) $(DESTDIR)$(includedir)/uuid++.hh"; \ + $(RM) $(DESTDIR)$(includedir)/uuid++.hh; \ + fi +- -$(RM) $(DESTDIR)$(libdir)/pkgconfig/uuid.pc ++ -$(RM) $(DESTDIR)$(libdir)/pkgconfig/ossp-uuid.pc + -$(RM) $(DESTDIR)$(mandir)/man1/uuid-config.1 + -$(RM) $(DESTDIR)$(bindir)/uuid-config + -$(RMDIR) $(DESTDIR)$(mandir)/man1 >/dev/null 2>&1 || $(TRUE) +diff -up uuid-1.6.1/pgsql/Makefile.BAD uuid-1.6.1/pgsql/Makefile +--- uuid-1.6.1/pgsql/Makefile.BAD 2008-03-06 11:53:26.000000000 -0500 ++++ uuid-1.6.1/pgsql/Makefile 2008-03-06 11:54:14.000000000 -0500 +@@ -18,13 +18,13 @@ POSTGRES := $(shell $(PG_CONFIG + top_builddir := $(dir $(PGXS))../.. + include $(top_builddir)/src/Makefile.global + +-NAME = uuid ++NAME = ossp-uuid + OBJS = uuid.o + SO_MAJOR_VERSION = 1 + SO_MINOR_VERSION = 0 + + override CPPFLAGS := -I.. $(CPPFLAGS) +-SHLIB_LINK := -L../.libs -luuid ++SHLIB_LINK := -L../.libs -lossp-uuid + SHLIB_LINK += $(shell test $(shell uname -s) = FreeBSD && echo "-Wl,-Bsymbolic") + SHLIB_LINK += $(shell test $(shell uname -s) = Darwin && echo "-bundle_loader $(POSTGRES)") + rpath := +@@ -35,16 +35,16 @@ enable_shared = yes + include $(top_builddir)/src/Makefile.shlib + + uuid.sql: uuid.sql.in +- sed -e 's;MODULE_PATHNAME;$(DESTDIR)$(pkglibdir)/uuid$(DLSUFFIX);g' uuid.sql ++ sed -e 's;MODULE_PATHNAME;$(DESTDIR)$(pkglibdir)/ossp-uuid$(DLSUFFIX);g' uuid.sql + + install: all + $(mkinstalldirs) $(DESTDIR)$(pkglibdir) + $(mkinstalldirs) $(DESTDIR)$(datadir) +- $(INSTALL_SHLIB) $(shlib) $(DESTDIR)$(pkglibdir)/uuid$(DLSUFFIX) ++ $(INSTALL_SHLIB) $(shlib) $(DESTDIR)$(pkglibdir)/ossp-uuid$(DLSUFFIX) + $(INSTALL_DATA) uuid.sql $(DESTDIR)$(datadir)/uuid.sql + + uninstall: +- -rm -f $(DESTDIR)$(pkglibdir)/uuid$(DLSUFFIX) ++ -rm -f $(DESTDIR)$(pkglibdir)/ossp-uuid$(DLSUFFIX) + -rm -f $(DESTDIR)$(datadir)/uuid.sql + + clean distclean: clean-lib +diff -up uuid-1.6.1/uuid.pc.in.BAD uuid-1.6.1/uuid.pc.in +--- uuid-1.6.1/uuid.pc.in.BAD 2008-03-06 11:57:29.000000000 -0500 ++++ uuid-1.6.1/uuid.pc.in 2008-03-06 11:57:36.000000000 -0500 +@@ -37,6 +37,6 @@ Description: Universally Unique Identifi + Version: @UUID_VERSION_RAW@ + URL: http://www.ossp.org/pkg/lib/uuid/ + Cflags: -I${includedir} +-Libs: -L${libdir} -luuid ++Libs: -L${libdir} -lossp-uuid + Libs.private: @LIBS@ + +diff -up uuid-1.6.1/perl/Makefile.PL.BAD uuid-1.6.1/perl/Makefile.PL +--- uuid-1.6.1/perl/Makefile.PL.BAD 2008-03-06 11:12:05.000000000 -0500 ++++ uuid-1.6.1/perl/Makefile.PL 2008-03-06 11:49:25.000000000 -0500 +@@ -33,9 +33,9 @@ use Config; + use ExtUtils::MakeMaker; + + # determine source directory +-my ($srcdir) = map { my $d = $_; $d =~ s/\/libuuid\.la$//; $d } +- grep { -f $_ } ("../libuuid.la", glob("../*/libuuid.la")) +- or die "no source directory found (where libuuid.la is located)"; ++my ($srcdir) = map { my $d = $_; $d =~ s/\/libossp-uuid\.la$//; $d } ++ grep { -f $_ } ("../libossp-uuid.la", glob("../*/libossp-uuid.la")) ++ or die "no source directory found (where libossp-uuid.la is located)"; + + # determine extra build options + my $compat = 0; +@@ -47,7 +47,7 @@ WriteMakefile( + VERSION_FROM => 'uuid.pm', + ABSTRACT_FROM => 'uuid.pod', + PREREQ_PM => {}, +- LIBS => [ "-L$srcdir/.libs -L$srcdir -luuid" ], ++ LIBS => [ "-L$srcdir/.libs -L$srcdir -lossp-uuid" ], + DEFINE => '', + INC => "-I. -I$srcdir", + PM => { 'uuid.pm' => '$(INST_LIBDIR)/uuid.pm', +diff -up uuid-1.6.1/Makefile.PL.BAD uuid-1.6.1/Makefile.PL +--- uuid-1.6.1/Makefile.PL.BAD 2008-03-06 11:09:49.000000000 -0500 ++++ uuid-1.6.1/Makefile.PL 2008-03-06 11:10:01.000000000 -0500 +@@ -44,7 +44,7 @@ ARGS = $ARGS + all pure_all: + \@if [ ! -d build ]; then mkdir build; fi + \@if [ ! -f build/Makefile ]; then (cd build && ../configure --disable-shared); fi +- \@if [ ! -f build/libuuid.la ]; then (cd build && \$(MAKE) \$(MFLAGS) libuuid.la); fi ++ \@if [ ! -f build/libossp-uuid.la ]; then (cd build && \$(MAKE) \$(MFLAGS) libossp-uuid.la); fi + \@if [ ! -f perl/Makefile ]; then (cd perl && \$(PERL) Makefile.PL \$(ARGS)); fi + \@cd perl && \$(MAKE) \$(MFLAGS) \$\@ + +diff -up uuid-1.6.1/php/config.m4.BAD uuid-1.6.1/php/config.m4 +--- uuid-1.6.1/php/config.m4.BAD 2008-03-06 11:54:55.000000000 -0500 ++++ uuid-1.6.1/php/config.m4 2008-03-06 11:55:07.000000000 -0500 +@@ -34,7 +34,7 @@ if test "$PHP_UUID" != "no"; then + PHP_NEW_EXTENSION(uuid, uuid.c, $ext_shared) + AC_DEFINE(HAVE_UUID, 1, [Have OSSP uuid library]) + PHP_ADD_LIBPATH([..], ) +- PHP_ADD_LIBRARY([uuid],, UUID_SHARED_LIBADD) ++ PHP_ADD_LIBRARY([ossp-uuid],, UUID_SHARED_LIBADD) + PHP_ADD_INCLUDE([..]) + PHP_SUBST(UUID_SHARED_LIBADD) + +diff -up uuid-1.6.1/php/Makefile.local.BAD uuid-1.6.1/php/Makefile.local +--- uuid-1.6.1/php/Makefile.local.BAD 2008-03-06 11:54:39.000000000 -0500 ++++ uuid-1.6.1/php/Makefile.local 2008-03-06 11:54:49.000000000 -0500 +@@ -48,7 +48,7 @@ install: build + @version=`$(PHP)-config --version | sed -e 's;^\([0-9]\).*$$;\1;'`; extdir="$(EXTDIR)"; \ + echo "installing PHP$$version API into $$extdir"; \ + ./build/shtool mkdir -f -p -m 755 $(DESTDIR)$$extdir; \ +- ./build/shtool install -c -m 755 modules/uuid.so $(DESTDIR)$$extdir/uuid.so; \ ++ ./build/shtool install -c -m 755 modules/uuid.so $(DESTDIR)$$extdir/ossp-uuid.so; \ + ./build/shtool install -c -m 644 uuid.php$$version $(DESTDIR)$$extdir/uuid.php + + clean: +diff -up uuid-1.6.1/php/uuid.ts.BAD uuid-1.6.1/php/uuid.ts +--- uuid-1.6.1/php/uuid.ts.BAD 2008-03-06 11:55:38.000000000 -0500 ++++ uuid-1.6.1/php/uuid.ts 2008-03-06 11:56:03.000000000 -0500 +@@ -34,9 +34,9 @@ + + $php_version = $argv[1]; + +-print "++ loading DSO uuid.so (low-level API)\n"; ++print "++ loading DSO ossp-uuid.so (low-level API)\n"; + if (!extension_loaded('uuid')) { +- dl('modules/uuid.so'); ++ dl('modules/ossp-uuid.so'); + } + + print "++ loading PHP uuid.php${php_version} (high-level API)\n"; diff --git a/uwsgi/PKGBUILD b/uwsgi/PKGBUILD new file mode 100644 index 0000000..2a8e7c2 --- /dev/null +++ b/uwsgi/PKGBUILD @@ -0,0 +1,166 @@ +# Maintainer: Jesus E. + +pkgbase=uwsgi +pkgname=(uwsgi + uwsgi-plugin-rack + uwsgi-plugin-psgi + uwsgi-plugin-cgi + uwsgi-plugin-tauthon + uwsgi-plugin-python + uwsgi-plugin-lua51 + uwsgi-plugin-webdav + mod_proxy_uwsgi) +pkgver=2.0.15 +pkgrel=2 +arch=(i686 x86_64) +url="https://projects.unbit.it/uwsgi" +license=(custom:GPL-2+Linking-Exception) +backup=('etc/uwsgi/emperor.ini') +makedepends=('gcc' 'python' 'tauthon' 'ruby' 'tauthon-greenlet' 'python-greenlet' + 'curl' 'libxml2' 'libyaml' 'perl' 'lua51' 'pcre' 'libedit' 'libressl' + 'bzip2' 'gmp' 'jansson' 'tauthon-gevent' 'apache' 'quilt') +source=(https://projects.unbit.it/downloads/$pkgbase-$pkgver.tar.gz + hyperbola.ini + uwsgi_ruby20_compatibility.patch + uwsgi_trick_chroot.patch + uwsgi_fix_build.patch + emperor.ini + uwsgi.logrotate + uwsgi.confd + uwsgi.initd) +sha512sums=('cb3ce7dc9eb9806151b04b04dc80ac7204cb4ddadf295eea98d5ebbf3a8c02f4b0bfb9a0490997c5edf427e39d3073a2d5b4fe7bd8ec458b30c0aab8e1da9bef' + '54042e99421f9c4b213cea4099dd768bdb64c1145dfa85e364416a4044923e1f3ac2b0fcc14a86f14e3471c5296339a70afcc51cd9c7e5790818250dfe42b990' + '162ca1be96282b32e8e6be919b6315bfd08954c491056958985bf99e7f5bdad3511665f059329d6cb6ef5d222f9aa11d4dc43c72e6a963ab941ada959fe8d964' + 'bc30f8ec69abd14fb96ada5b36cf65811a7a63ee27e224fcb6ceabe9935c1f17379cd872149a17da3d590b8ff60fbe7f77140d777aaf06e25e83388f897f611d' + '896cc70926afcefb3c96256229691702e93b30974ae5e8f1c1efaa29cc088b855d3515b054547ec1b4a3a68f3c1c3b70656f60bea4f9c1bfc9780a1c462ba959' + '41cc29ea14ca87749959379ead773d9a3a499c6bc7be17800e06e33c998a929ae855c9ad0fe2039e26a034c24d2845833945333442b98d7c6f0924aa2a036b1b' + 'f7f6f4a6e55ba770022dca068723be8fabe50074ea34384ddb3d876f96d279d0890c7d8d624b3cfe62be43e1eab588e072bd4bb3d3d1cd4ef966b317461b80c5' + '041d1bd694fad6f7c5e28944aab6d7ba53b3c7fc990ce6b7c2d97b9f3d6650c46dda8069e545c252a7400e1d825c8e46d7393a289757b1bd665e64241ca3789a' + '81ed974fb2957e05c890cab29f5b5a75845e6b7de899d2695fb2fa5f49b4545daa437c81c8dc5c735b24a45655cf6320c9256bc8faa7e32ffd7a2d981922def5') + +prepare() { + cd $srcdir/$pkgbase-$pkgver + cp $srcdir/hyperbola.ini buildconf/hyperbola.ini + + # we don't systemd and remove it therefore + rm -rv plugins/systemd_logger + + # additional steps before starting to build + cp -r plugins/python plugins/tauthon + for patch in uwsgi_ruby20_compatibility.patch uwsgi_trick_chroot.patch uwsgi_fix_build.patch; do + patch -Np1 -i $srcdir/$patch + done + rm -rf plugins/ruby + mv plugins/ruby{19,} + sed -i 's:\(ruby\)19:\1:' plugins/ruby/uwsgiplugin.py +} + +build() { + pushd $srcdir/$pkgbase-$pkgver + + export UWSGICONFIG_LUAPC='lua51' + + python uwsgiconfig.py --build hyperbola + python uwsgiconfig.py --plugin plugins/python hyperbola python + python uwsgiconfig.py --plugin plugins/greenlet hyperbola greenlet + python uwsgiconfig.py --plugin plugins/gevent hyperbola gevent + python uwsgiconfig.py --plugin plugins/asyncio hyperbola asyncio + + tauthon uwsgiconfig.py --plugin plugins/tauthon hyperbola tauthon + tauthon uwsgiconfig.py --plugin plugins/greenlet hyperbola greenlet2 + tauthon uwsgiconfig.py --plugin plugins/gevent hyperbola gevent2 + + pushd $srcdir/$pkgbase-$pkgver/apache2 + /usr/bin/apxs -c mod_proxy_uwsgi.c +} + +package_uwsgi() { + pkgdesc="A fast, self-healing and developer/sysadmin-friendly application container server coded in pure C" + depends=(tauthon libxml2 jansson libyaml libcap pcre) + backup+=('etc/conf.d/uwsgi') + cd $srcdir/$pkgbase-$pkgver + install -Dm755 uwsgi $pkgdir/usr/bin/uwsgi + install -Dm644 LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE + install -Dm644 $srcdir/uwsgi.confd $pkgdir/etc/conf.d/uwsgi + install -Dm755 $srcdir/uwsgi.initd $pkgdir/etc/init.d/uwsgi + install -Dm644 $srcdir/emperor.ini $pkgdir/etc/uwsgi/emperor.ini + install -Dm644 $srcdir/uwsgi.logrotate $pkgdir/etc/logrotate.d/uwsgi +} + +package_uwsgi-plugin-cgi() { + depends=(uwsgi) + pkgdesc="CGI plugin for uwsgi" + install -Dm755 $pkgbase-$pkgver/cgi_plugin.so $pkgdir/usr/lib/uwsgi/cgi_plugin.so + install -Dm644 $pkgbase-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +package_uwsgi-plugin-rack() { + depends=(uwsgi ruby) + pkgdesc="Ruby rack plugin for uwsgi" + install -Dm755 $pkgbase-$pkgver/rack_plugin.so $pkgdir/usr/lib/uwsgi/rack_plugin.so + install -Dm755 $pkgbase-$pkgver/fiber_plugin.so $pkgdir/usr/lib/uwsgi/fiber_plugin.so + install -Dm755 $pkgbase-$pkgver/rbthreads_plugin.so $pkgdir/usr/lib/uwsgi/rbthreads_plugin.so + install -Dm644 $pkgbase-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +package_uwsgi-plugin-psgi() { + depends=(uwsgi perl) + pkgdesc="Perl psgi plugin for uwsgi" + install -Dm755 $pkgbase-$pkgver/psgi_plugin.so $pkgdir/usr/lib/uwsgi/psgi_plugin.so + install -Dm644 $pkgbase-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +# template start; name=perl-binary-module-dependency; version=1; +if [[ $(find "$pkgdir/usr/lib/perl5/" -name "*.so") ]]; then + _perlver_min=$(perl -e '$v = $^V->{version}; print $v->[0].".".($v->[1]);') + _perlver_max=$(perl -e '$v = $^V->{version}; print $v->[0].".".($v->[1]+1);') + depends+=("perl>=$_perlver_min" "perl<$_perlver_max") +fi +# template end; +} + +package_uwsgi-plugin-tauthon() { + depends=(uwsgi tauthon-gevent tauthon-greenlet) + pkgdesc="Plugin for Tauthon-support for uwsgi" + install -Dm755 $pkgbase-$pkgver/tauthon_plugin.so $pkgdir/usr/lib/uwsgi/tauthon_plugin.so + install -Dm755 $pkgbase-$pkgver/greenlet2_plugin.so $pkgdir/usr/lib/uwsgi/greenlet2_plugin.so + install -Dm755 $pkgbase-$pkgver/gevent2_plugin.so $pkgdir/usr/lib/uwsgi/gevent2_plugin.so + install -Dm644 $pkgbase-$pkgver/uwsgidecorators.py $pkgdir/usr/lib/tauthon2.8/site-packages/uwsgidecorators.py + install -Dm644 $pkgbase-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE + tauthon -m compileall $pkgdir/usr/lib/tauthon2.8/site-packages/ + tauthon -O -m compileall $pkgdir/usr/lib/tauthon2.8/site-packages/ +} + +package_uwsgi-plugin-python() { + depends=(uwsgi python python-greenlet) + pkgdesc="Plugin for Python-support for uwsgi" + install -Dm755 $pkgbase-$pkgver/python_plugin.so $pkgdir/usr/lib/uwsgi/python_plugin.so + install -Dm755 $pkgbase-$pkgver/greenlet_plugin.so $pkgdir/usr/lib/uwsgi/greenlet_plugin.so + install -Dm755 $pkgbase-$pkgver/gevent_plugin.so $pkgdir/usr/lib/uwsgi/gevent_plugin.so + install -Dm755 $pkgbase-$pkgver/asyncio_plugin.so $pkgdir/usr/lib/uwsgi/asyncio_plugin.so + install -Dm644 $pkgbase-$pkgver/uwsgidecorators.py $pkgdir/usr/lib/python3.8/site-packages/uwsgidecorators.py + install -Dm644 $pkgbase-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE + python -m compileall $pkgdir/usr/lib/python3.8/site-packages/ + python -O -m compileall $pkgdir/usr/lib/python3.8/site-packages/ +} + +package_uwsgi-plugin-lua51() { + depends=(uwsgi lua51) + pkgdesc="Plugin for Lua support for uwsgi" + install -Dm755 $pkgbase-$pkgver/lua_plugin.so $pkgdir/usr/lib/uwsgi/lua_plugin.so + install -Dm644 $pkgbase-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +package_uwsgi-plugin-webdav() { + depends=(uwsgi) + pkgdesc="Plugin for webdav support for uwsgi" + install -Dm755 $pkgbase-$pkgver/webdav_plugin.so $pkgdir/usr/lib/uwsgi/webdav_plugin.so + install -Dm644 $pkgbase-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} + +package_mod_proxy_uwsgi(){ + depends=(uwsgi apache) + pkgdesc="Apache uWSGI proxy module for uwsgi" + install -Dm755 \ + $pkgbase-$pkgver/apache2/.libs/mod_proxy_uwsgi.so \ + $pkgdir/usr/lib/httpd/modules/mod_proxy_uwsgi.so + install -Dm644 $pkgbase-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE +} diff --git a/uwsgi/emperor.ini b/uwsgi/emperor.ini new file mode 100644 index 0000000..27c9120 --- /dev/null +++ b/uwsgi/emperor.ini @@ -0,0 +1,4 @@ +[uwsgi] +emperor = /etc/uwsgi/vassals +uid = http +gid = http diff --git a/uwsgi/hyperbola.ini b/uwsgi/hyperbola.ini new file mode 100644 index 0000000..a3118e6 --- /dev/null +++ b/uwsgi/hyperbola.ini @@ -0,0 +1,5 @@ +[uwsgi] +plugin_dir = /usr/lib/uwsgi +plugins = rack, rbthreads, fiber, psgi, lua, cgi, webdav +main_plugin = +inherit = base diff --git a/uwsgi/uwsgi.confd b/uwsgi/uwsgi.confd new file mode 100644 index 0000000..5469c7b --- /dev/null +++ b/uwsgi/uwsgi.confd @@ -0,0 +1,68 @@ +# Distributed under the terms of the GNU General Public License v2 + +# YOU SHOULD ONLY MODIFY THIS FILE IF YOU USE THE UWSGI EMPEROR MODE! +# IF YOU WANT TO RUN A SINGLE APP INSTANCE, CREATE A COPY AND MODIFY THAT INSTEAD! + +# Path (or name) of UNIX/TCP socket to bind to +# Example : UWSGI_SOCKET=127.0.0.1:1234 +UWSGI_SOCKET= + +# Enable threads? (1 = yes, 0 = no). The default is 0 +# +UWSGI_THREADS=0 + +# The path to your uWSGI application. +# +UWSGI_PROGRAM= + +# The path to your uWSGI xml config file. +# +UWSGI_XML_CONFIG= + +# The number of child processes to spawn. The default is 1. +# +UWSGI_PROCESSES=1 + +# The log file path. If empty, log only errors +# +UWSGI_LOG_FILE= + +# If you want to run your application inside a chroot then specify the +# directory here. Leave this blank otherwise. +# +UWSGI_CHROOT= + +# If you want to run your application from a specific directiory specify +# it here. Leave this blank otherwise. +# +UWSGI_DIR= + +# PIDPATH folder mode (/run/uwsgi_${PROGNAME}) +UWSGI_PIDPATH_MODE=0750 + +# The user to run your application as. If you do not specify these, +# the application will be run as user root. +# +UWSGI_USER= + +# The group to run your application as. If you do not specify these, +# the application will be run as group root. +# +UWSGI_GROUP= + +# Run the uwsgi emperor which loads vassals dynamically from this PATH +# see http://projects.unbit.it/uwsgi/wiki/Emperor +# The advised Gentoo folder is /etc/uwsgi.d/ +UWSGI_EMPEROR_PATH= + +# Emperor PIDPATH folder mode (/run/uwsgi) +UWSGI_EMPEROR_PIDPATH_MODE=0770 + +# The group the emperor should run as. This is different from the UWSGI_GROUP +# as you could want your apps share some sockets with other processes such as +# www servers while preserving your emperor logs from being accessible by them. +UWSGI_EMPEROR_GROUP= + +# Additional options you might want to pass to uWSGI +# +UWSGI_EXTRA_OPTIONS= diff --git a/uwsgi/uwsgi.initd b/uwsgi/uwsgi.initd new file mode 100644 index 0000000..64dfc7a --- /dev/null +++ b/uwsgi/uwsgi.initd @@ -0,0 +1,145 @@ +#!/sbin/openrc-run +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +PROGNAME=${SVCNAME#*.} + +UWSGI_EXEC=/usr/bin/uwsgi +if [ "${SVCNAME}" = "uwsgi" ]; then + PIDPATH=/run/uwsgi +else + PIDPATH="/run/uwsgi_${PROGNAME}" +fi +PIDFILE="${PIDPATH}/${PROGNAME}.pid" + +extra_started_commands="${opts} reload stats" + +depend() { + need net +} + +start_emperor() { + local OPTIONS + OPTIONS="--daemonize" + + if [ -n "${UWSGI_LOG_FILE}" ]; then + OPTIONS="${OPTIONS} ${UWSGI_LOG_FILE}" + else + OPTIONS="${OPTIONS} /dev/null --disable-logging" + fi + + [ -z "${UWSGI_DIR}" ] && UWSGI_DIR="/" + [ -z "${UWSGI_USER}" ] && UWSGI_USER="root" + [ -z "${UWSGI_GROUP}" ] && UWSGI_GROUP="root" + [ -z "${UWSGI_EMPEROR_PIDPATH_MODE}" ] && UWSGI_EMPEROR_PIDPATH_MODE=0770 + + if [ -n "${UWSGI_EXTRA_OPTIONS}" ]; then + OPTIONS="${OPTIONS} ${UWSGI_EXTRA_OPTIONS}" + fi + + ebegin "Starting uWSGI emperor" + checkpath -d -m ${UWSGI_EMPEROR_PIDPATH_MODE} -o "${UWSGI_USER}":"${UWSGI_EMPEROR_GROUP:-${UWSGI_GROUP}}" "${PIDPATH}" + + cd "${UWSGI_DIR}" && \ + start-stop-daemon --start --user "${UWSGI_USER}" --exec "${UWSGI_EXEC}" \ + --group ${UWSGI_EMPEROR_GROUP:-${UWSGI_GROUP}} \ + -- --emperor "${UWSGI_EMPEROR_PATH}" ${OPTIONS} --pidfile "${PIDFILE}" + return $? +} + +start_app() { + local OPTIONS + OPTIONS="--master --daemonize" + + if [ -n "${UWSGI_LOG_FILE}" ]; then + OPTIONS="${OPTIONS} ${UWSGI_LOG_FILE}" + else + OPTIONS="${OPTIONS} /dev/null --disable-logging" + fi + + [ -z "${UWSGI_DIR}" ] && UWSGI_DIR="/" + [ -z "${UWSGI_USER}" ] && UWSGI_USER="root" + [ -z "${UWSGI_GROUP}" ] && UWSGI_GROUP="root" + [ -z "${UWSGI_PIDPATH_MODE}" ] && UWSGI_PIDPATH_MODE=0750 + + if [ -n "${UWSGI_EXTRA_OPTIONS}" ]; then + OPTIONS="${OPTIONS} ${UWSGI_EXTRA_OPTIONS}" + fi + + if [ "${UWSGI_THREADS}" = "1" ]; then + OPTIONS="${OPTIONS} --enable-threads" + fi + + if [ -n "${UWSGI_SOCKET}" ]; then + OPTIONS="${OPTIONS} --socket ${UWSGI_SOCKET}" + fi + + if [ -n "${UWSGI_PROCESSES}" ]; then + OPTIONS="${OPTIONS} --processes ${UWSGI_PROCESSES}" + fi + + if [ -n "${UWSGI_CHROOT}" ]; then + OPTIONS="${OPTIONS} --chroot ${UWSGI_CHROOT}" + fi + + if [ -n "${UWSGI_PROGRAM}" ]; then + OPTIONS="${OPTIONS} --fileserve-mode ${UWSGI_PROGRAM}" + fi + + if [ -n "${UWSGI_XML_CONFIG}" ]; then + OPTIONS="${OPTIONS} --xmlconfig ${UWSGI_XML_CONFIG}" + fi + + ebegin "Starting uWSGI application ${PROGNAME}" + checkpath -d -m ${UWSGI_PIDPATH_MODE} -o "${UWSGI_USER}":"${UWSGI_GROUP}" "${PIDPATH}" + + cd "${UWSGI_DIR}" && \ + start-stop-daemon --start --user "${UWSGI_USER}" --group "${UWSGI_GROUP}" \ + --exec "${UWSGI_EXEC}" -- ${OPTIONS} --pidfile "${PIDFILE}" + return $? +} + +start() { + if [ -n "${UWSGI_EMPEROR_PATH}" ]; then + start_emperor + eend $? + else + if [ "${SVCNAME}" = "uwsgi" ]; then + eerror "You are not supposed to run this script directly unless you" + eerror "want to run in Emperor mode. In that case please set the UWSGI_EMPEROR_PATH." + eerror "Otherwise create a symlink for the uwsgi application you want to run as well as" + eerror "a copy of the configuration file and modify it appropriately like so..." + eerror + eerror " ln -s uwsgi /etc/init.d/uwsgi.trac" + eerror " cp /etc/conf.d/uwsgi /etc/conf.d/uwsgi.trac" + eerror " nano /etc/conf.d/uwsgi.trac" + eerror + return 1 + else + start_app + eend $? + fi + fi +} + +stop() { + if [ -n "${UWSGI_EMPEROR_PATH}" ]; then + ebegin "Stopping uWSGI emperor" + else + ebegin "Stopping uWSGI application ${PROGNAME}" + fi + start-stop-daemon --stop --signal QUIT --pidfile "${PIDFILE}" + eend $? +} + +reload() { + ebegin "Reloading uWSGI" + start-stop-daemon --signal HUP --pidfile "${PIDFILE}" + eend $? +} + +stats() { + ebegin "Logging uWSGI statistics" + start-stop-daemon --signal USR1 --pidfile "${PIDFILE}" + eend $? +} diff --git a/uwsgi/uwsgi.logrotate b/uwsgi/uwsgi.logrotate new file mode 100644 index 0000000..c63feed --- /dev/null +++ b/uwsgi/uwsgi.logrotate @@ -0,0 +1,9 @@ +/var/log/uwsgi/*.log /var/log/uwsgi/*/*.log { + copytruncate + daily + rotate 7 + compress + delaycompress + missingok + notifempty +} diff --git a/uwsgi/uwsgi_fix_build.patch b/uwsgi/uwsgi_fix_build.patch new file mode 100644 index 0000000..177d3ce --- /dev/null +++ b/uwsgi/uwsgi_fix_build.patch @@ -0,0 +1,28 @@ +--- a/plugins/router_basicauth/router_basicauth.c 2017-03-31 00:11:36.000000000 +0200 ++++ b/plugins/router_basicauth/router_basicauth.c 2023-08-20 18:03:16.000000000 +0200 +@@ -68,9 +68,14 @@ + + #if defined(__linux__) && defined(__GLIBC__) + struct crypt_data cd; +- cd.initialized = 0; ++ memset(&cd, 0, sizeof(struct crypt_data)); ++ /* work around glibc-2.2.5 bug, ++ * has been fixed at some time in glibc-2.3.X */ ++#if (__GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) + // we do as nginx here + cd.current_salt[0] = ~cpwd[0]; ++#endif + crypted = crypt_r( colon+1, cpwd, &cd); + #else + if (uwsgi.threads > 1) pthread_mutex_lock(&ur_basicauth_crypt_mutex); +--- a/plugins/tauthon/uwsgiplugin.py 2017-03-31 00:11:36.000000000 +0200 ++++ b/plugins/tauthon/uwsgiplugin.py 2023-08-20 18:38:48.462568472 +0200 +@@ -60,6 +60,6 @@ + + os.environ['LD_RUN_PATH'] = "%s" % libdir + +- LIBS.append('-lpython%s' % get_python_version()) ++ LIBS.append('-ltauthon%s' % get_python_version()) + else: + LIBS = [] diff --git a/uwsgi/uwsgi_ruby20_compatibility.patch b/uwsgi/uwsgi_ruby20_compatibility.patch new file mode 100644 index 0000000..b4bf20d --- /dev/null +++ b/uwsgi/uwsgi_ruby20_compatibility.patch @@ -0,0 +1,42 @@ +diff --git a/plugins/rack/uwsgiplugin.py b/plugins/rack/uwsgiplugin.py +index 2375bc9..b908417 100644 +--- a/plugins/rack/uwsgiplugin.py ++++ b/plugins/rack/uwsgiplugin.py +@@ -10,13 +10,14 @@ except: + rbconfig = 'Config' + + version = os.popen(RUBYPATH + " -e \"print RUBY_VERSION\"").read().rstrip() +-v = version.split('.') + + GCC_LIST = ['rack_plugin', 'rack_api'] + +-if (v[0] == '1' and v[1] == '9') or v[0] >= '2': ++if version >= '1.9': + CFLAGS = os.popen(RUBYPATH + " -e \"require 'rbconfig';print RbConfig::CONFIG['CFLAGS']\"").read().rstrip().split() + CFLAGS.append('-DRUBY19') ++ if version >= '2.0': ++ CFLAGS.append('-DRUBY20') + CFLAGS.append('-Wno-unused-parameter') + rbconfig = 'RbConfig' + else: +diff --git a/plugins/ruby19/uwsgiplugin.py b/plugins/ruby19/uwsgiplugin.py +index 4f35984..156018f 100644 +--- a/plugins/ruby19/uwsgiplugin.py ++++ b/plugins/ruby19/uwsgiplugin.py +@@ -10,13 +10,14 @@ except: + rbconfig = 'Config' + + version = os.popen(RUBYPATH + " -e \"print RUBY_VERSION\"").read().rstrip() +-v = version.split('.') + + GCC_LIST = ['../rack/rack_plugin', '../rack/rack_api'] + +-if v[0] == '1' and v[1] == '9': ++if version >= '1.9': + CFLAGS = os.popen(RUBYPATH + " -e \"require 'rbconfig';print RbConfig::CONFIG['CFLAGS']\"").read().rstrip().split() + CFLAGS.append('-DRUBY19') ++ if version >= '2.0': ++ CFLAGS.append('-DRUBY20') + CFLAGS.append('-Wno-unused-parameter') + rbconfig = 'RbConfig' + else: diff --git a/uwsgi/uwsgi_trick_chroot.patch b/uwsgi/uwsgi_trick_chroot.patch new file mode 100644 index 0000000..663bba7 --- /dev/null +++ b/uwsgi/uwsgi_trick_chroot.patch @@ -0,0 +1,16 @@ +diff --git a/uwsgiconfig.py b/uwsgiconfig.py +index e447123..4d55f2c 100644 +--- a/uwsgiconfig.py ++++ b/uwsgiconfig.py +@@ -1129,10 +1129,7 @@ def build_plugin(path, uc, cflags, ldflags, libs, name = None): + except: + pass + +- if uc: +- plugin_dest = uc.get('plugin_build_dir', uc.get('plugin_dir')) + '/' + name + '_plugin' +- else: +- plugin_dest = name + '_plugin' ++ plugin_dest = name + '_plugin' + + shared_flag = '-shared' + diff --git a/v4l-utils/PKGBUILD b/v4l-utils/PKGBUILD new file mode 100644 index 0000000..ae63fea --- /dev/null +++ b/v4l-utils/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=v4l-utils +pkgver=1.20.0 +_debver=1.20.0 +_debrel=2 +pkgrel=1 +pkgdesc="Userspace tools and conversion library for V4L" +arch=('i686' 'x86_64') +url="https://linuxtv.org/" +provides=("libv4l=$pkgver") +replaces=('libv4l') +conflicts=('libv4l') +backup=(etc/rc_maps.cfg) +license=('GPL-2' 'LGPL-2.1') +makedepends=('qt-base' 'alsa-lib' 'quilt') +optdepends=('qt-base: for qv4l2' 'alsa-lib: for qv4l2') +depends=('hicolor-icon-theme' 'gcc-libs' 'sysfsutils' 'libjpeg-turbo') +source=(https://linuxtv.org/downloads/v4l-utils/${pkgname}-${pkgver}.tar.bz2{,.asc} + https://deb.debian.org/debian/pool/main/v/v4l-utils/v4l-utils_$_debver-$_debrel.debian.tar.xz) +sha512sums=('179ca8dbbf7af5fa4870b70f17645d7834fe6ba52670ae6b58473efa257db0cd812ce14f16574cc4491c0bcb218835e4c29f1354882a151687eecec97852fc63' + 'SKIP' + 'f314cff50b7f2a9a28dd0f68f94afc403d5cf89f7d452af2dda47bdf294334006f9df6dccc8d1897635a0114ffcb5edddee5975e52412d9d2205e6956588321b') +validpgpkeys=('05D0169C26E41593418129DF199A64FADFB500FF') # Gregor Jasny + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + MAKEFLAGS="-j1" make install DESTDIR="${pkgdir}/" + + for i in COPYING{,.libdvbv5,.libv4l}; do + install -Dm644 ${i} ${pkgdir}/usr/share/licenses/${pkgname}/${i} + done + + rm "${pkgdir}/usr/bin/ivtv-ctl" +} diff --git a/vala/PKGBUILD b/vala/PKGBUILD new file mode 100644 index 0000000..3be2a78 --- /dev/null +++ b/vala/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=vala +pkgver=0.48.12 +pkgrel=2 +pkgdesc='Compiler for the GObject type system' +url='https://wiki.gnome.org/Projects/Vala' +arch=(i686 x86_64) +license=(LGPL-2.1) +depends=(glib2 graphviz pkg-config gcc) +makedepends=(libtool help2man autoconf-archive) +provides=(valadoc) +conflicts=(valadoc) +replaces=(valadoc) +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz) +sha512sums=('da7becf8b92985a07b139651c14bd41ec86aed3e2b610029d2b376f70335c98607f39de4a1fa4efe9d51e6088edd4c13d22431cada389679d55f684ad548f4d1') + +prepare() { + cd $pkgname-$pkgver + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING +} + +# vim: ts=2 sw=2 et: diff --git a/valgrind/PKGBUILD b/valgrind/PKGBUILD new file mode 100644 index 0000000..1c55e82 --- /dev/null +++ b/valgrind/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +pkgname=valgrind +pkgver=3.16.1 +pkgrel=1 +_debver=3.16.1 +_debrel=1 +pkgdesc='Tool to help find memory management problems in programs' +arch=('x86_64' 'i686') +license=('GPL-2') +url="https://valgrind.org/" +depends=('glibc' 'perl') +makedepends=('gdb' 'docbook-xml' 'docbook-xsl' 'quilt') +options=('!emptydirs' '!strip') +source=("https://sourceware.org/pub/${pkgname}/${pkgname}-${pkgver}.tar.bz2"{,.asc} + "https://deb.debian.org/debian/pool/main/${pkgname::1}/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('2a4173efe1b6facdd2f5c5ee8ed006704168eba1813736fccc8191d60363afd96197512cf42037e65f18d4ddd49adc74a54c47210df216fba3c46bf68ef0f950' + 'SKIP' + '65d5c08d8d188c458f2379135e58906f3b5c0edf84a6ec93471ec6a952e387d1c85e845c1ecee10ab3d09a750457d1e0f7fd65f1ebb603435d39d70640fd4665') +validpgpkeys=('0E9FFD0C16A1856CF9C7C690BA0166E698FA6035') # Julian Seward + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index" + export QUILT_DIFF_ARGS="--no-timestamps" + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/04_workaround-SIGSEGV-on-PPC.patch || true + rm -v debian/patches/10_mpi-pkg-config.patch || true + rm -v debian/patches/11_arm64-cache-flush.patch || true + + quilt push -av + fi + + sed -i 's#sgml/docbook/xsl-stylesheets#xml/docbook/xsl-stylesheets-1.79.2-nons#' docs/Makefile.am + autoreconf -fiv +} + +build() { + cd ${pkgname}-${pkgver} + + # Valgrind doesn't like some of our flags. + CPPFLAGS=${CPPFLAGS/-D_FORTIFY_SOURCE=2/} + # Resolve building issue that disables stack-smashing protector flag. + CFLAGS="${CFLAGS/-fno-plt/} -fno-stack-protector" + CXXFLAGS="${CXXFLAGS/-fno-plt/} -fno-stack-protector" + + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/libexec \ + --mandir=/usr/share/man \ + --sysconfdir=/etc \ + --localstatedir=/var + make VERBOSE=1 + make VERBOSE=1 -C docs man-pages +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR=${pkgdir} VERBOSE=1 install + if check_option 'debug' n; then + find "${pkgdir}/usr/bin" -type f -executable -exec strip $STRIP_BINARIES {} + || : + fi + # Install manual and license + install -Dvm644 docs/*.1 -t ${pkgdir}/usr/share/man/man1 + install -Dvm644 COPYING{,.DOCS} -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/vamp-plugin-sdk/PKGBUILD b/vamp-plugin-sdk/PKGBUILD new file mode 100644 index 0000000..518e9a9 --- /dev/null +++ b/vamp-plugin-sdk/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +_dir=2691 +pkgname=vamp-plugin-sdk +pkgver=2.10.0 +_debver=2.10.0 +_debrel=1 +pkgrel=1 +pkgdesc='The Vamp audio analysis plug-in system' +arch=('i686' 'x86_64') +url='https://www.vamp-plugins.org/' +license=('Expat' 'Modified-BSD') +depends=('gcc-libs' 'glibc') +makedepends=('libsndfile' 'quilt') +optdepends=('libsndfile: for vamp-simple-host') +source=("https://deb.debian.org/debian/pool/main/v/vamp-plugin-sdk/${pkgname}_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/v/vamp-plugin-sdk/vamp-plugin-sdk_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('153b7f2fa01b77c65ad393ca0689742d66421017fd5931d216caa0fcf6909355fff74706fabbc062a3a04588a619c9b515a1dae00f21a57afd97902a355c48ed' + '298358212b41ded55643bb099551bd928065f091cbf52e0e1adb0d7c97cbcc03431b762b31bb0e33e2873b500c6abe5cc76be0c2ec17a5c84cf2af7e68190c1b') + +prepare() { + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/02-fix_pkg-config.patch || true + + quilt push -av + fi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" install + # license + install -vDm 644 COPYING \ + -t "${pkgdir}/usr/share/licenses/${pkgname}/" + # docs + install -vDm 644 {CHANGELOG,README} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/vamps/PKGBUILD b/vamps/PKGBUILD new file mode 100644 index 0000000..68ae65b --- /dev/null +++ b/vamps/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=vamps +pkgver=0.99.2 +pkgrel=1 +pkgdesc="Very fast requantisizing tool for backup DVDs" +arch=('i686' 'x86_64') +url='http://vamps.sourceforge.net' +license=('GPL-2') +depends=('libdvdread') +source=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('27d26a5b63982e3b68b69b6e4f739e93a8eff2ca2e433e07a1350cafe9733f0b6a684e6bc51bce97612bc85fef9d4bf4ea0e781e493b227896de4cce4cd4662b') + +build() { + cd ${pkgname}-${pkgver} + + make +} + +package() { + cd ${pkgname}-${pkgver} + + install -D play_cell/play_cell "${pkgdir}"/usr/bin/play_cell + install ${pkgname}/${pkgname} "${pkgdir}"/usr/bin/ + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/vc/PKGBUILD b/vc/PKGBUILD new file mode 100644 index 0000000..f1bf66b --- /dev/null +++ b/vc/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=vc +_pkgname=Vc +pkgver=1.3.3 +pkgrel=1 +_debver=$pkgver +_debrel=4 +pkgdesc='A static library to ease explicit vectorization of C++ code' +url="https://github.com/${_pkgname}Devel/$_pkgname" +arch=(i686 x86_64) +license=(Modified-BSD) +makedepends=(cmake quilt) +source=(https://github.com/${_pkgname}Devel/$_pkgname/releases/download/$pkgver/$_pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/v/vc/vc_$_debver-$_debrel.debian.tar.xz) +sha512sums=('5b4b6711c5244f023f351c9b98b62d02ff2b8c4cd44682ea91c308d82bd1c33278cecea2103bb6220fce06b5d13f907fecfb527002388f664f083a5af0c5877e' + 'e860418742d37609a91c2c5e4010fabe8e687e72f1c5735edf1241709785615dd84f07c51b92598b3843cc84f9be1b733322c8915194b422b9d2c8b5d6ad4c34') + +prepare() { + cd $_pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cmake -B build -S $_pkgname-$pkgver \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D TARGET_ARCHITECTURE=generic + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + + # license + install -Dm644 $_pkgname-$pkgver/LICENSE -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/vcdimager/PKGBUILD b/vcdimager/PKGBUILD new file mode 100644 index 0000000..b339dcf --- /dev/null +++ b/vcdimager/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=vcdimager +pkgver=2.0.1 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc="A full-featured mastering suite for authoring disassembling and analyzing Video CD's and Super Video CD's" +url='https://www.gnu.org/software/vcdimager/' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libcdio' 'libxml2' 'popt') +makedepends=('quilt') +source=("https://ftp.gnu.org/gnu/vcdimager/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/v/vcdimager/vcdimager_${_debver}+dfsg-${_debrel}.debian.tar.xz") +sha512sums=('55a9d235149a35fe26576703c623a2c9a3f7deedd2e42e01271fdf1e1fdf14c51ee040ee3b5d15fe1b5860fbd4cbeb437362b1a1f40187c8d4d691b6b89a2230' + 'b09e8fd9b5b5cad99b4b5bf7556785c847042a188455568995c71bc553f4a28b6de500da24e09880acddb10f924784b39179a05deb58837c34479fc9675a2290') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi +} + + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/vde2/PKGBUILD b/vde2/PKGBUILD new file mode 100644 index 0000000..a5ebd8c --- /dev/null +++ b/vde2/PKGBUILD @@ -0,0 +1,81 @@ +# Maintainer: Jesus E. + +pkgname=vde2 +pkgver=2.3.2 +_debver=$pkgver +_debrel=11 +pkgrel=12 +pkgdesc="Virtual Distributed Ethernet for emulators like QEMU" +url='https://sourceforge.net/projects/vde/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('bash' 'libpcap' 'libressl') +makedepends=('python' 'quilt') +backup=(etc/conf.d/vde_switch) +source=("https://downloads.sourceforge.net/vde/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/v/vde2/vde2_${_debver}+r586-${_debrel}.debian.tar.xz" + "vde_cryptcab-compile-against-openssl-1.1.0.patch" + "dhcpd.conf.sample" + "vde-config.sample" + "vde-connection.sample" + "vde_switch.confd" + "vde_switch.initd") +install=$pkgname.install +options=(!makeflags) +sha512sums=('51be75fde5a526b988060f25322a8b20289b1677db2e3aa6dbee55875c1d7af564f9d8d201a0a4a1a842471cce06f29fcd83e55a5ff7acfdc36a8349cb2f3cc6' + '1c60179f6706490e1573b0015a8ce1f27fa19f434c36d5aa6e664196f805cda2aed247b12ddf690aeb0b46309c1a12223638e5673bff32a2fd4e7804d77dbbab' + '0a45a631d765779e916067b3789e38276e2ad72f3f97621a79a45bc8745f51f458993924307cf709535a806bed9cefee494012240e5fae19ce00efcf6a16f274' + '58b0866cee781b7e6edc9cc1e991f01c01984b47df77742bd42decf4568061e7292c040b9f9aaef9c24aa779e988b82a71fa4212a59e1e7165767e29e35ef6b4' + 'd7d714d27a3c5680a35e6f1f52f0d9931c98495f56ef432cd644eb7b26e4d397ff73e26163967a7b50a175ccf81584bd009a814d9bc834be35e65186223c5976' + 'c064c8121ccad75d97e0d2fcdd04e8e233b30cacfe9409cd79b009ebc789e459ae07a3dbc07c71334b5ec62a2483a3ac696a6842777eac1fc16b21175a5ca963' + 'a56181bce04f3e1c67357ff7b90373406709f7a3140deba4ca3da3f49116932bb0f6c6cda9950b52df1af256542a6187562eb84b0d4043c84cfac186ab275e54' + '599b3560721b6e31cbcc21e764df772bde2a8bbf131b47ebb575bf31855a53237dd1c265d33f31c91e3115d6f8cb9f94493d2dd6792c8bedb011299d1ed6d8e9') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/compile_with_hurd.patch || true + rm -v debian/patches/compile_with_kfreebsd.patch || true + rm -v debian/patches/fix_soname_version_info.patch || true + rm -v debian/patches/vde_cryptcab-compile-against-openssl-1.1.0.patch || true + + quilt push -av + fi + patch -Np1 -i $srcdir/vde_cryptcab-compile-against-openssl-1.1.0.patch +} + +build() { + cd $srcdir/$pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --sbindir=/usr/sbin \ + --sysconfdir=/etc \ + --libexecdir=/usr/libexec/vde2 \ + --enable-experimental + make +} + +package() { + cd $srcdir/$pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + install -D -m 644 $srcdir/vde-config.sample $pkgdir/etc/vde/vde-config.sample + install -D -m 644 $srcdir/vde-connection.sample $pkgdir/etc/vde/vde-connection.sample + install -D -m 644 $srcdir/dhcpd.conf.sample $pkgdir/usr/share/vde2/dhcpd.conf.sample + install -D -m 644 $srcdir/vde_switch.confd $pkgdir/etc/conf.d/vde_switch + install -D -m 755 $srcdir/vde_switch.initd $pkgdir/etc/init.d/vde_switch + + # install license files + for i in COPYING*; do + install -Dm644 COPYING* -t $pkgdir/usr/share/licenses/$pkgname + done +} diff --git a/vde2/dhcpd.conf.sample b/vde2/dhcpd.conf.sample new file mode 100644 index 0000000..565a78b --- /dev/null +++ b/vde2/dhcpd.conf.sample @@ -0,0 +1,12 @@ +ddns-update-style none; + +subnet 192.168.254.0 netmask 255.255.255.0 { + range 192.168.254.1 192.168.254.253; + option routers 192.168.254.254; + option domain-name "virtual.example.com"; + # find your DNS servers from /etc/resolv.conf + # otherwise only pure IP addresses will work + option domain-name-servers 192.168.254.254; + option broadcast-address 192.168.254.255; + default-lease-time 86400; +} diff --git a/vde2/vde-config.sample b/vde2/vde-config.sample new file mode 100644 index 0000000..f7e0660 --- /dev/null +++ b/vde2/vde-config.sample @@ -0,0 +1,35 @@ +# Set options vde_switch program +# To activate this vde profile add it to /etc/conf.d/vde + +# Global options +VDE_NUMPORTS="32" # Number of ports (default 32) +VDE_HUB="no" # [yes|no] Make the switch act as a hub +VDE_FSTP="no" # [yes|no] Activate the fast spanning tree protocol +VDE_MAC="" # Set the Switch MAC address +VDE_PRIORITY="" # Set the priority for FST (MAC extension) +VDE_HASHSIZE="" # Hash table size + +# Options from datasock module +VDE_SOCK="/var/run/vde/sample.sock" # control directory pathname +VDE_SOCK_MODE="660" # Standard access mode for comm sockets (octal) +VDE_SOCK_GROUP="root" # Group owner for comm sockets + +# Options from consmgmt module +VDE_MANAGEMENT_SOCK="/var/run/vde/sample.mgmt" # path of the management UNIX socket +VDE_MANAGEMENT_SOCK_MODE="660" # management UNIX socket access mode (octal) + +# Other options to parse to vde_switch +VDE_OPTIONS="" + +# VDE with internet support +# You can use either tuntap method or slirpvde method. + +# Options from tuntap module +VDE_TAP="" # Enable routing through TAP tap interface (comma separated array eg.:"tap0,tap1"). + +# slirpvde daemon support +SLIRP="no" # [yes|no] enable/disable SLIRP daemon support +SLIRP_DHCP="no" # [yes|no] turn on the DHCP server for the network autoconfiguration of all the units connected to the VDE +SLIRP_NETWORK="" # specify the network address (default 10.0.2.0) +# other options to parse to slirpvde +SLIRP_OPTIONS="" diff --git a/vde2/vde-connection.sample b/vde2/vde-connection.sample new file mode 100644 index 0000000..4a75e1f --- /dev/null +++ b/vde2/vde-connection.sample @@ -0,0 +1,6 @@ +# You can add vde switch connections below +# just without the # at the beginning: +# vde_plug /var/run/vde/sample.sock = vde_plug /var/run/vde/sample2.sock +# or if hosts are different use this syntax: +# vde_plug /var/run/vde/sample.sock = ssh host2 vde_plug /var/run/vde/sample.sock + diff --git a/vde2/vde2.install b/vde2/vde2.install new file mode 100644 index 0000000..fb7f23c --- /dev/null +++ b/vde2/vde2.install @@ -0,0 +1,19 @@ +post_install() { + echo "vde config files should be placed in /etc/vde, sample files are provided." + echo "iptables and dhcpd sample files have been installed to '/usr/share/vde2'." + echo "Merge those examples, if needed to the according config files." + + if ! getent group vde &>/dev/null; then + groupadd -r vde >/dev/null + fi +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + if getent group vde &>/dev/null; then + groupdel vde >/dev/null + fi +} diff --git a/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch b/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch new file mode 100644 index 0000000..423de53 --- /dev/null +++ b/vde2/vde_cryptcab-compile-against-openssl-1.1.0.patch @@ -0,0 +1,94 @@ +diff --git a/src/vde_cryptcab/cryptcab.c b/src/vde_cryptcab/cryptcab.c +index c1f14fd..0c7b186 100644 +--- a/src/vde_cryptcab/cryptcab.c ++++ b/src/vde_cryptcab/cryptcab.c +@@ -22,7 +22,7 @@ static void Usage(char *programname) + exit(1); + } + +-static EVP_CIPHER_CTX ctx; ++static EVP_CIPHER_CTX *ctx; + static int ctx_initialized = 0; + static int encryption_disabled = 0; + static int nfd; +@@ -30,6 +30,10 @@ static unsigned long long mycounter=1; + static struct vde_open_args open_args={.port=0,.group=NULL,.mode=0700}; + static int verbose = 0; + ++#if OPENSSL_VERSION_NUMBER < 0x1010000 || defined LIBRESSL_VERSION_NUMBER ++#define EVP_CIPHER_CTX_reset(x) EVP_CIPHER_CTX_cleanup(x) ++#endif ++ + void vc_printlog(int priority, const char *format, ...) + { + va_list arg; +@@ -103,19 +107,21 @@ int data_encrypt(unsigned char *src, unsigned char *dst, int len, struct peer *p + } + + if (!ctx_initialized) { +- EVP_CIPHER_CTX_init (&ctx); ++ ctx = EVP_CIPHER_CTX_new (); ++ if (!ctx) ++ return -1; + ctx_initialized = 1; + } + +- EVP_EncryptInit (&ctx, EVP_bf_cbc (), p->key, p->iv); +- if (EVP_EncryptUpdate (&ctx, dst, &olen, src, len) != 1) ++ EVP_EncryptInit (ctx, EVP_bf_cbc (), p->key, p->iv); ++ if (EVP_EncryptUpdate (ctx, dst, &olen, src, len) != 1) + { + fprintf (stderr,"error in encrypt update\n"); + olen = -1; + goto cleanup; + } + +- if (EVP_EncryptFinal (&ctx, dst + olen, &tlen) != 1) ++ if (EVP_EncryptFinal (ctx, dst + olen, &tlen) != 1) + { + fprintf (stderr,"error in encrypt final\n"); + olen = -1; +@@ -124,7 +130,7 @@ int data_encrypt(unsigned char *src, unsigned char *dst, int len, struct peer *p + olen += tlen; + + cleanup: +- EVP_CIPHER_CTX_cleanup(&ctx); ++ EVP_CIPHER_CTX_reset(ctx); + return olen; + } + +@@ -138,19 +144,21 @@ int data_decrypt(unsigned char *src, unsigned char *dst, int len, struct peer *p + } + + if (!ctx_initialized) { +- EVP_CIPHER_CTX_init (&ctx); ++ ctx = EVP_CIPHER_CTX_new (); ++ if (!ctx) ++ return -1; + ctx_initialized = 1; + } + +- EVP_DecryptInit (&ctx, EVP_bf_cbc (), p->key, p->iv); +- if (EVP_DecryptUpdate (&ctx, dst, &olen, src, len) != 1) ++ EVP_DecryptInit (ctx, EVP_bf_cbc (), p->key, p->iv); ++ if (EVP_DecryptUpdate (ctx, dst, &olen, src, len) != 1) + { + fprintf (stderr,"error in decrypt update\n"); + olen = -1; + goto cleanup; + } + +- if (EVP_DecryptFinal (&ctx, dst + olen, &tlen) != 1) ++ if (EVP_DecryptFinal (ctx, dst + olen, &tlen) != 1) + { + fprintf (stderr,"error in decrypt final\n"); + olen = -1; +@@ -159,7 +167,7 @@ int data_decrypt(unsigned char *src, unsigned char *dst, int len, struct peer *p + olen += tlen; + + cleanup: +- EVP_CIPHER_CTX_cleanup(&ctx); ++ EVP_CIPHER_CTX_reset (ctx); + return olen; + } + diff --git a/vde2/vde_switch.confd b/vde2/vde_switch.confd new file mode 100644 index 0000000..90b200c --- /dev/null +++ b/vde2/vde_switch.confd @@ -0,0 +1,15 @@ +# load the tun module +VDE_MODPROBE_TUN="yes" + +# virtual tap networking device to be used for vde +VDE_TAP="tap0" + +# The group that will have access to the VDE control socket. +VDE_GROUP="vde" + +# VDE socket location (default: /run/${RC_SVCNAME}.ctl) +VDE_SOCKET="" + +# Additional options passed to the vde_switch daemon. +#VDE_OPTS="" +VDE_OPTS="" diff --git a/vde2/vde_switch.initd b/vde2/vde_switch.initd new file mode 100644 index 0000000..0934c51 --- /dev/null +++ b/vde2/vde_switch.initd @@ -0,0 +1,44 @@ +#!/sbin/openrc-run +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/usr/bin/vde_switch" +pidfile="/run/${RC_SVCNAME}.pid" + +depend() { + after net.${VDE_TAP} +} + +start_pre() { + [ "${VDE_MODPROBE_TUN}" = "yes" ] || return 0 + modprobe tun +} + +# We have to use start() because the shortform uses --pidfile for s-s-d --start +# which causes s-s-d to check the pid file before it exists +start() { + VDE_SOCKET="${VDE_SOCKET:-/run/${RC_SVCNAME}.ctl}" + + ebegin "Starting ${SVC_NAME}" + + start-stop-daemon --start --exec ${command} -- \ + --pidfile=${pidfile} \ + --tap=${VDE_TAP} \ + --group=${VDE_GROUP} \ + --mode=660 \ + --dirmode=770 \ + --sock=${VDE_SOCKET} \ + --daemon \ + ${VDE_OPTS} + ewaitfile 10 "${VDE_SOCKET}" + + eend $? "Failed to start ${RC_SVCNAME}" +} + +stop_post() { + [ "${VDE_MODPROBE_TUN}" = "yes" ] && modprobe --quiet --remove tun + + # Don't fail to stop the service if the "tun" module in use + # and the above "modprobe -r" command fails. + return 0 +} diff --git a/vegastrike-engine/PKGBUILD b/vegastrike-engine/PKGBUILD new file mode 100644 index 0000000..62068a2 --- /dev/null +++ b/vegastrike-engine/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +pkgname=vegastrike-engine +pkgver=0.8.0 +pkgrel=1 +pkgdesc="A free and libre engine for spaceflight simulations" +arch=('i686' 'x86_64') +url='https://www.vega-strike.org/' +license=('GPL-2') +depends=('boost-libs' 'python' 'freeglut' 'gtk' 'libvorbis' 'openal' 'sdl' 'glu') +makedepends=('cmake' 'boost') +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/vegastrike/Vega-Strike-Engine-Source/archive/refs/tags/v${pkgver}.tar.gz") +sha512sums=('22a2acf9a6028b30b18622c478bfacffc20a9cac407208fea89b7a6334f0d19e63e9663cb52a2fc518bc4ee25ed8ff9dad88880b1cdd937e232e377129fed091') + +build(){ + # buildtype 'none' will fail the build + cmake \ + -S Vega-Strike-Engine-Source-$pkgver/engine \ + -B build \ + -Wno-dev \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_PIE=ON + make -C build +} + +package() { + make -C build DESTDIR="$pkgdir" install + + # correct package-structure + mv "$pkgdir/usr/bin" "$pkgdir/usr/games" + install -d "$pkgdir/usr/share/man/man1" + mv "$pkgdir/usr/share/man/"{vegasettings,vegastrike,vegastrike-engine,vsinstall,vslauncher}.1 "$pkgdir/usr/share/man/man1" + rm -rf "$pkgdir/usr/include" + rm -rf "$pkgdir/usr/lib" + + # install license + install -Dm644 "$srcdir/Vega-Strike-Engine-Source-$pkgver/LICENSE" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/vegastrike/PKGBUILD b/vegastrike/PKGBUILD new file mode 100644 index 0000000..ca851e7 --- /dev/null +++ b/vegastrike/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=vegastrike +pkgver=0.8.0 +pkgrel=1 +pkgdesc="Vega Strike - Free and libre space flight and trading simulator with realistic distances" +arch=('any') +url='https://www.vega-strike.org/' +license=('GPL-2') +depends=('vegastrike-engine') +makedepends=('cmake') +options=(!strip) +groups=('games') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/vegastrike/Assets-Production/archive/refs/tags/v${pkgver}.tar.gz" + "vs" + "vsettings") +sha512sums=('63eca2dc1f566e136bc5951d033d5fe9342cc6bf70086bf0a5d4e731b0732fc4229212616fe8bae58c95d221f1a2648a04e6fd4b898bfb640f0c77f7f40d7718' + 'a5d4ed6249333d2a0f4053dff4a6f9d5c4b03cc171d2a65ca06862ed5c11278205ea057fe0f8a4c69b582d16d519793a245e44ff7f32ed615745a1f0e271786f' + 'de3d23aa7d01a4037ab44faec0592cc81dd704c314ec1befc76983ba7d45d45c80436c78b02ee3cee61824ce5358b16663e293f1fe377feb4998a4789e680529') + +build(){ + cmake \ + -S Assets-Production-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr + make -C build +} + +package() { + make -C build DESTDIR="$pkgdir" install + + # correct package-structure, making it fhs-compliant + install -d "$pkgdir/usr/share/games" + mv "$pkgdir/usr/share/$pkgname" "$pkgdir/usr/share/games" + rm -rf "$pkgdir/usr/bin" + install -d "$pkgdir/usr/games" + install -Dm755 "$srcdir/"{vs,vsettings} -t "$pkgdir/usr/games" + + # install license + install -Dm644 "$srcdir/Assets-Production-$pkgver/vega-license.txt" -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/vegastrike/vs b/vegastrike/vs new file mode 100755 index 0000000..3f7062d --- /dev/null +++ b/vegastrike/vs @@ -0,0 +1,28 @@ +#!/bin/bash +# This is a small wrapper that lets VegaStrike - Upon the Coldest Sea +# run from seemingly anywhere +set -e + +VEGASTRIKE_LOCAL_SHARE_DIR="/usr/local/share/games/vegastrike" +VEGASTRIKE_SHARE_DIR="/usr/share/games/vegastrike" + +#Let's keep a log of the console +if [ -f ~/.vegastrike/console.log ]; then + mv -f ~/.vegastrike/console.log ~/.vegastrike/console.bak +fi +if [ -f ~/.vegastrike/console_err.log ]; then + mv -f ~/.vegastrike/console_err.log ~/.vegastrike/console_err.bak +fi + +echo "Starting Vega Strike..." +echo "" + +if [ -d "${VEGASTRIKE_LOCAL_SHARE_DIR}" ]; then + vegastrike -d"${VEGASTRIKE_LOCAL_SHARE_DIR}" "$1" +elif [ -d "${VEGASTRIKE_SHARE_DIR}" ]; then + vegastrike -d"${VEGASTRIKE_SHARE_DIR}" "$1" +else + echo "Unknown Game Asset Data Location." + echo "Do you have the game assets installed?" + exit 1 +fi diff --git a/vegastrike/vsettings b/vegastrike/vsettings new file mode 100755 index 0000000..21ae51a --- /dev/null +++ b/vegastrike/vsettings @@ -0,0 +1,17 @@ +#!/bin/bash +set -e + +VEGASTRIKE_LOCAL_SHARE_DIR="/usr/local/share/games/vegastrike" +VEGASTRIKE_SHARE_DIR="/usr/share/games/vegastrike" + +# This is a small wrapper that lets VegaStrike - Upon the Coldest Sea +# run from seemingly anywhere +if [ -d "${VEGASTRIKE_LOCAL_SHARE_DIR}" ]; then + vegasettings --target "${VEGASTRIKE_LOCAL_SHARE_DIR}" +elif [ -d "${VEGASTRIKE_SHARE_DIR}" ]; then + vegasettings --target "${VEGASTRIKE_SHARE_DIR}" +else + echo "Unknown Game Asset Data Location." + echo "Do you have the game assets installed?" + exit 1 +fi diff --git a/vid.stab/PKGBUILD b/vid.stab/PKGBUILD new file mode 100644 index 0000000..9a48f9c --- /dev/null +++ b/vid.stab/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=vid.stab +pkgver=1.1.0 +pkgrel=1 +pkgdesc='Video stabilization library' +arch=('i686' 'x86_64') +url='http://public.hronopik.de/vid.stab' +license=('GPL-2') +depends=('gcc-libs' 'glibc') +makedepends=('cmake') +source=("https://github.com/georgmartius/vid.stab/archive/refs/tags/v$pkgver.tar.gz") +sha512sums=('e82a4b6dd854b8415952cc0a8bdea06c01ff40a497c8e98177831e29031ec535b9f47cc30d5444c47bfd91871615a1662e3991185e9eb179acf37ea601073cdf') + +prepare() { + cd vid.stab-${pkgver} + + if [[ -d build ]]; then + rm -rf build + fi + mkdir build +} + +build() { + cd vid.stab-${pkgver}/build + + cmake .. \ + -DCMAKE_INSTALL_PREFIX='/usr' + make +} + +package() { + cd vid.stab-${pkgver}/build + + make DESTDIR="${pkgdir}" install + install -Dm644 ../LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE +} + +# vim: ts=2 sw=2 et: diff --git a/viewnior/PKGBUILD b/viewnior/PKGBUILD new file mode 100644 index 0000000..321c5b6 --- /dev/null +++ b/viewnior/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=viewnior +pkgver=1.6 +pkgrel=2 +pkgdesc="A simple, fast and elegant image viewer program" +arch=('i686' 'x86_64') +url="https://siyanpanayotov.com/project/viewnior" +license=('GPL-3') +depends=('gtk2' 'exiv2' 'gtk2-engines' 'gtk2-engine-murrine') +makedepends=('gnome-common' 'desktop-file-utils' 'gettext-tiny') +source=(https://github.com/hellosiyan/Viewnior/archive/viewnior-$pkgver.tar.gz) +sha512sums=('4b150078573bfd3b8c5863d73087a51cd3b7ed5781e26c842fab44eec3e67ea9aea3feba064538578878df1ccb386525a6a84362dae7f92315fb7de735ace617') + +prepare() { + cd "Viewnior-viewnior-${pkgver}" + ./autogen.sh +} + +build() { + cd "Viewnior-viewnior-${pkgver}" + ./configure --prefix=/usr + make +} + +check() { + cd "Viewnior-viewnior-${pkgver}" + make -k check +} + +package() { + cd "Viewnior-viewnior-${pkgver}" + make DESTDIR=${pkgdir} install + install -Dm644 "COPYING" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} + +# vim:set ts=2 sw=2 et: diff --git a/vim/PKGBUILD b/vim/PKGBUILD new file mode 100644 index 0000000..6e09e36 --- /dev/null +++ b/vim/PKGBUILD @@ -0,0 +1,193 @@ +# Maintainer: Jesus E. + +pkgbase=vim +pkgname=('vim' 'gvim' 'vim-runtime') +pkgver=9.1.0707 +_versiondir=91 +pkgrel=1 +pkgdesc="Vi Improved, a highly configurable, improved version of the Vi text editor" +url='https://www.vim.org' +arch=(i686 x86_64) +license=('custom:Vim') +makedepends=('glibc' 'libgcrypt' 'gpm' 'tauthon' 'python' 'ruby' 'libxt' 'gtk' 'lua' + 'gawk' 'tcl' 'pcre' 'zlib' 'libffi' 'gettext-tiny') +source=(https://github.com/vim/vim/archive/v${pkgver}/${pkgbase}-${pkgver}.tar.gz + vimrc + hyperbola.vim + vimdoc.hook + fix-build.patch) +sha512sums=('694d9b8d08cd9a980c4ea9c8d6510181f1978ee72125bcde02add255057f2f36d8b14f54180e5ad715d8a09911496f79993a612128bed9f2deff3578d4f98660' + 'a81a132d182d1e5cc405bc72777c819b3f4597a36a29228dee78e7fb312eb5da396de23947bdc08f43f8b157211cfdfb528c2cc4831d1a31e9f8a0100bf1ea95' + '7e3bdfa923664125855b212208d68c76861e962cf6b0d8c2a4d8ed773d9a8cc5a73acd1b7a1e439b4cc0b263a7529067e852d2d53887dfc45f9f66240075c45b' + '1e06e981691b17662fd0fddac5c00c87c920d1b4a1cbb6191c42d57cc40b00af12710e26b22fcfc0901bb8142b15f6a04aa65cec2d9b3bb9d5a06cb650d3ab9c' + '095caacf0a5a464941368c738eca136d5f1e7f5b1cfb274661b95b4648ed4562a897e350fdd691d2a4a887510e9359c45cfab2ec7ee2ffc39a188b1a41546b22') + +prepare() { + cd "${srcdir}"/vim-$pkgver + + # additional fixes for languages + patch -Np1 -i $srcdir/fix-build.patch + + cd src + + # define the place for the global (g)vimrc file (set to /etc/vimrc) + sed -E 's|^.*(#define SYS_.*VIMRC_FILE.*").*$|\1|g' -i feature.h + sed -E 's|^.*(#define VIMRC_FILE.*").*$|\1|g' -i feature.h + + autoconf + + cd "$srcdir" + cp -a vim-$pkgver gvim-$pkgver +} + +build() { + cd "${srcdir}"/vim-$pkgver + ./configure \ + --prefix=/usr \ + --localstatedir=/var/lib/vim \ + --with-features=huge \ + --with-compiledby='Hyperbola GNU/Linux-libre' \ + --enable-gpm \ + --enable-acl \ + --with-x=no \ + --disable-gui \ + --enable-multibyte \ + --enable-cscope \ + --enable-netbeans \ + --enable-perlinterp=no \ + --enable-pythoninterp \ + --with-python-command=tauthon2.8 \ + --enable-python3interp=dynamic \ + --enable-rubyinterp=dynamic \ + --enable-luainterp=dynamic \ + --enable-tclinterp=dynamici \ + --disable-canberra + make + + cd "${srcdir}"/gvim-$pkgver + ./configure \ + --prefix=/usr \ + --localstatedir=/var/lib/vim \ + --with-features=huge \ + --with-compiledby='Hyperbola GNU/Linux-libre' \ + --enable-gpm \ + --enable-acl \ + --with-x=yes \ + --enable-gui=gtk3 \ + --enable-multibyte \ + --enable-cscope \ + --enable-netbeans \ + --enable-perlinterp=no \ + --enable-pythoninterp \ + --with-python-command=tauthon2.8 \ + --enable-python3interp=dynamic \ + --enable-rubyinterp=dynamic \ + --enable-luainterp=dynamic \ + --enable-tclinterp=dynamic \ + --disable-canberra + make +} + +package_vim-runtime() { + pkgdesc+=' (shared runtime)' + optdepends=('sh: support for some tools and macros' + 'python: demoserver example tool' + 'gawk: mve tools upport') + backup=('etc/vimrc') + + cd "${srcdir}"/vim-$pkgver + + make -j1 VIMRCLOC=/etc DESTDIR="${pkgdir}" install + # man and bin files belong to 'vim' + rm -r "${pkgdir}"/usr/share/man/ "${pkgdir}"/usr/bin/ + + # Don't forget logtalk.dict + install -Dm644 runtime/ftplugin/logtalk.dict \ + "${pkgdir}"/usr/share/vim/vim${_versiondir}/ftplugin/logtalk.dict + + # rc files + install -Dm644 "${srcdir}"/vimrc "${pkgdir}"/etc/vimrc + install -Dm644 "${srcdir}"/hyperbola.vim \ + "${pkgdir}"/usr/share/vim/vimfiles/hyperbola.vim + + # no desktop files and icons + rm -r "${pkgdir}"/usr/share/{applications,icons} + + # license + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} + + # pacman hook for documentation helptags + install -Dm644 "${srcdir}"/vimdoc.hook "${pkgdir}"/usr/share/libalpm/hooks/vimdoc.hook +} + +package_vim() { + depends=("vim-runtime=${pkgver}-${pkgrel}" 'gpm' 'acl' 'glibc' 'libgcrypt' 'pcre' + 'zlib' 'libffi') + optdepends=('tauthon: Tauthon language support' + 'python: Python language support' + 'ruby: Ruby language support' + 'lua: Lua language support' + 'tcl: Tcl language support') + conflicts=('gvim' 'vim-minimal' 'vim-python3') + provides=('xxd' 'vim-minimal' 'vim-python3' 'vim-plugin-runtime') + replaces=('vim-python3' 'vim-minimal') + + cd "${srcdir}"/vim-$pkgver + make -j1 VIMRCLOC=/etc DESTDIR="${pkgdir}" install + + # provided by (n)vi in core + rm "${pkgdir}"/usr/bin/{ex,view} + + # delete some manpages + find "${pkgdir}"/usr/share/man -type d -name 'man1' 2>/dev/null | \ + while read _mandir; do + cd ${_mandir} + rm -f ex.1 view.1 # provided by (n)vi + rm -f evim.1 # this does not make sense if we have no GUI + done + + # Runtime provided by runtime package + rm -r "${pkgdir}"/usr/share/vim + + # no desktop files and icons + rm -r "${pkgdir}"/usr/share/{applications,icons} + + # license + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} + +package_gvim() { + pkgdesc+=' (with advanced features, such as a GUI)' + depends=("vim-runtime=${pkgver}-${pkgrel}" 'gpm' 'libxt' 'gtk' 'glibc' 'libgcrypt' 'pcre' + 'zlib' 'libffi') + optdepends=('tauthon: Tauthon language support' + 'python: Python language support' + 'ruby: Ruby language support' + 'lua: Lua language support' + 'tcl: Tcl language support') + provides=("vim=${pkgver}-${pkgrel}" "xxd" 'vim-plugin-runtime') + conflicts=('vim-minimal' 'vim') + replaces=('gvim-python3') + + cd "${srcdir}"/gvim-$pkgver + make -j1 VIMRCLOC=/etc DESTDIR="${pkgdir}" install + + # provided by (n)vi in core + rm "${pkgdir}"/usr/bin/{ex,view} + + # delete some manpages + find "${pkgdir}"/usr/share/man -type d -name 'man1' 2>/dev/null | \ + while read _mandir; do + cd ${_mandir} + rm -f ex.1 view.1 # provided by (n)vi + done + + # need to remove since this is provided by vim-runtime + rm -r "${pkgdir}"/usr/share/vim + + # keep gvim desktop file only, remove vim + rm "${pkgdir}"/usr/share/applications/vim.desktop + + # license + install -Dm644 LICENSE -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/vim/fix-build.patch b/vim/fix-build.patch new file mode 100644 index 0000000..3bef5ed --- /dev/null +++ b/vim/fix-build.patch @@ -0,0 +1,137 @@ +--- a/src/po/Make_all.mak 2024-08-31 17:58:16.000000000 +0200 ++++ b/src/po/Make_all.mak 2024-09-10 22:09:54.229881033 +0200 +@@ -6,7 +6,6 @@ + af \ + ca \ + cs \ +- cs.cp1250 \ + da \ + de \ + en_GB \ +@@ -18,8 +17,6 @@ + hu \ + it \ + ja \ +- ja.euc-jp \ +- ja.sjis \ + ko \ + ko.UTF-8 \ + lv \ +@@ -28,21 +25,16 @@ + no \ + pl \ + pl.UTF-8 \ +- pl.cp1250 \ + pt_BR \ + ru \ +- ru.cp1251 \ + sk \ +- sk.cp1250 \ + sr \ + sv \ + tr \ + uk \ +- uk.cp1251 \ + vi \ + zh_CN \ + zh_CN.UTF-8 \ +- zh_CN.cp936 \ + zh_TW \ + zh_TW.UTF-8 \ + +@@ -51,7 +43,6 @@ + af.po \ + ca.po \ + cs.po \ +- cs.cp1250.po \ + da.po \ + de.po \ + en_GB.po \ +@@ -63,8 +54,6 @@ + hu.po \ + it.po \ + ja.po \ +- ja.euc-jp.po \ +- ja.sjis.po \ + ko.po \ + ko.UTF-8.po \ + lv.po \ +@@ -73,21 +62,16 @@ + no.po \ + pl.po \ + pl.UTF-8.po \ +- pl.cp1250.po \ + pt_BR.po \ + ru.po \ +- ru.cp1251.po \ + sk.po \ +- sk.cp1250.po \ + sr.po \ + sv.po \ + tr.po \ + uk.po \ +- uk.cp1251.po \ + vi.po \ + zh_CN.po \ + zh_CN.UTF-8.po \ +- zh_CN.cp936.po \ + zh_TW.po \ + zh_TW.UTF-8.po \ + +@@ -126,17 +110,6 @@ + + + MOCONVERTED = \ +- cs.cp1250.mo \ +- ja.euc-jp.mo \ +- ja.sjis.mo \ +- ko.mo \ +- pl.UTF-8.mo \ +- pl.cp1250.mo \ +- ru.cp1251.mo \ +- sk.cp1250.mo \ +- uk.cp1251.mo \ +- zh_CN.mo \ +- zh_CN.cp936.mo \ + zh_TW.mo \ + + +@@ -144,7 +117,6 @@ + af.ck \ + ca.ck \ + cs.ck \ +- cs.cp1250.ck \ + da.ck \ + de.ck \ + en_GB.ck \ +@@ -156,8 +128,6 @@ + hu.ck \ + it.ck \ + ja.ck \ +- ja.euc-jp.ck \ +- ja.sjis.ck \ + ko.UTF-8.ck \ + ko.ck \ + lv.ck \ +@@ -166,21 +136,16 @@ + no.ck \ + pl.UTF-8.ck \ + pl.ck \ +- pl.cp1250.ck \ + pt_BR.ck \ + ru.ck \ +- ru.cp1251.ck \ + sk.ck \ +- sk.cp1250.ck \ + sr.ck \ + sv.ck \ + tr.ck \ + uk.ck \ +- uk.cp1251.ck \ + vi.ck \ + zh_CN.UTF-8.ck \ + zh_CN.ck \ +- zh_CN.cp936.ck \ + zh_TW.UTF-8.ck \ + zh_TW.ck \ + diff --git a/vim/hyperbola.vim b/vim/hyperbola.vim new file mode 100644 index 0000000..7045739 --- /dev/null +++ b/vim/hyperbola.vim @@ -0,0 +1,26 @@ +" The Hyperbola GNU/Linux-libre global vimrc - setting only a few sane defaults +" +" Maintainer: Thomas Dziedzic [gostrc@gmail.com] +" Maintainer for Hyperbola rebranding: AndrĂ© Silva [emulatorman@hyperbola.info] +" +" NEVER EDIT THIS FILE, IT'S OVERWRITTEN UPON UPGRADES, GLOBAL CONFIGURATION +" SHALL BE DONE IN /etc/vimrc, USER SPECIFIC CONFIGURATION IN ~/.vimrc + +" Normally we use vim-extensions. If you want true vi-compatibility +" remove change the following statements +set nocompatible " Use Vim defaults instead of 100% vi compatibility +set backspace=indent,eol,start " more powerful backspacing + +" Now we set some defaults for the editor +set history=50 " keep 50 lines of command line history +set ruler " show the cursor position all the time + +" Suffixes that get lower priority when doing tab completion for filenames. +" These are files we are not likely to want to edit or read. +set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc,.png,.jpg + +if has('gui_running') + " Make shift-insert work like in Xterm + map + map! +endif diff --git a/vim/vimdoc.hook b/vim/vimdoc.hook new file mode 100644 index 0000000..b77d592 --- /dev/null +++ b/vim/vimdoc.hook @@ -0,0 +1,11 @@ +[Trigger] +Operation = Install +Operation = Upgrade +Operation= Remove +Type = File +Target = usr/share/vim/vimfiles/doc/ + +[Action] +Description = Updating Vim help tags... +Exec = /usr/bin/vim -es --cmd ":helptags /usr/share/vim/vimfiles/doc" --cmd ":q" +When = PostTransaction diff --git a/vim/vimrc b/vim/vimrc new file mode 100644 index 0000000..96a5ecc --- /dev/null +++ b/vim/vimrc @@ -0,0 +1,18 @@ +" All system-wide defaults are set in $VIMRUNTIME/hyperbola.vim (usually just +" /usr/share/vim/vimfiles/hyperbola.vim) and sourced by the call to :runtime +" you can find below. If you wish to change any of those settings, you should +" do it in this file (/etc/vimrc), since hyperbola.vim will be overwritten +" everytime an upgrade of the vim packages is performed. It is recommended to +" make changes after sourcing hyperbola.vim since it alters the value of the +" 'compatible' option. + +" This line should not be removed as it ensures that various options are +" properly set to work with the Vim-related packages. +runtime! hyperbola.vim + +" If you prefer the old-style vim functionalty, add 'runtime! vimrc_example.vim' +" Or better yet, read /usr/share/vim/vim80/vimrc_example.vim or the vim manual +" and configure vim to your own liking! + +" do not load defaults if ~/.vimrc is missing +"let skip_defaults_vim=1 diff --git a/virglrenderer/PKGBUILD b/virglrenderer/PKGBUILD new file mode 100644 index 0000000..8ac2071 --- /dev/null +++ b/virglrenderer/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=virglrenderer +pkgver=0.8.2 +pkgrel=2 +pkgdesc="A virtual 3D GPU library, that allows the guest operating system to use the host GPU to accelerate 3D rendering" +arch=('i686' 'x86_64') +url='https://virgil3d.github.io/' +license=('Expat') +depends=('libepoxy' 'mesa' 'check') +makedepends=('python' 'meson' 'ninja') +_tag=$pkgname-$pkgver +source=($_tag.tar.bz2::https://gitlab.freedesktop.org/virgl/virglrenderer/-/archive/$_tag/virglrenderer-$_tag.tar.bz2) +sha512sums=('c95c1cfe701e6fd46a542ef6b6fc019b81a57159355f1f36167e531e08ce5f31161f0af258eea0d60cd2d536dd96152bc73df442fed53e2eff615d752b8163b9') + +prepare() { + mv "virglrenderer-$_tag" "$_tag" +} + +build() { + cd $_tag + meson --prefix=/usr -Dtests=true build + ninja -C build +} + +package() { + cd $_tag + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/vis/PKGBUILD b/vis/PKGBUILD new file mode 100644 index 0000000..449967c --- /dev/null +++ b/vis/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Jesus E. + +pkgname=vis +pkgver=0.7 +pkgrel=1 +pkgdesc="Modern, legacy free, simple yet efficient vim-like editor" +arch=('i686' 'x86_64') +url='https://github.com/martanne/vis' +depends=('acl' 'bash' 'ncurses' 'libtermkey' 'lua' 'lua-lpeg' 'tre' 'file') +optdepends=('xclip: X11 clipboard support' + 'xsel: X11 clipboard support') +license=('ISC') +backup=('etc/vis/visrc.lua') +source=("https://deb.debian.org/debian/pool/main/v/vis/vis_${pkgver}.orig.tar.xz") +sha512sums=('a246ecf1b408854567ef97985a7564aa8703f3eaac1a98a2fe0b9345a71ec06958c77f682ffce58020a69ee115c547e0f56cf6d3c8cff2b0f61706c8d25ded11') + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -D -m0644 lua/visrc.lua "${pkgdir}"/etc/vis/visrc.lua + install -D -m0644 'LICENSE' -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/vlc-legacy/PKGBUILD b/vlc-legacy/PKGBUILD new file mode 100644 index 0000000..8f56406 --- /dev/null +++ b/vlc-legacy/PKGBUILD @@ -0,0 +1,235 @@ +# Maintainer: Jesus E. + +_realpkgname=vlc +pkgname=$_realpkgname-legacy +_vlcver=3.0.16 +# optional fixup version including hyphen +_vlcfixupver= +pkgver=${_vlcver}${_vlcfixupver//-/.r} +_debver=3.0.16 +_debrel=1 +pkgrel=3 +pkgdesc="Free, libre and generic media-player (legacy version)" +url='https://www.videolan.org/vlc/' +arch=('i686' 'x86_64') +license=('LGPL-2.1' 'GPL-2') +depends=('a52dec' 'libdvbpsi' 'libxpm' 'libdca' 'libproxy' 'lua' 'libidn' + 'taglib' 'libmpcdec' 'ffmpeg' 'faad2' 'libmad' + 'libmpeg2' 'xcb-util-keysyms' 'libtar' 'libxinerama' + 'libupnp' 'libarchive' 'qt-base' 'qt-x11extras' 'qt-svg' 'freetype2' + 'fribidi' 'harfbuzz' 'fontconfig' 'libxml2' 'gnutls' 'libplacebo' 'libmatroska') +makedepends=('gst-plugins-base-libs' 'flac' 'libcaca' 'gtk' 'librsvg-legacy' 'xosd' + 'twolame' 'aalib' 'libmtp' 'libupnp' 'libmicrodns' 'libdvdcss' + 'vcdimager' 'mesa' 'mpg123' 'libdvdread' 'libdvdnav' 'libogg' 'libmodplug' + 'libvorbis' 'speex' 'opus' 'libtheora' 'libpng' 'libjpeg-turbo' + 'x264' 'libass' 'libkate' 'libtiger' + 'sdl_image' 'alsa-lib' 'jack' 'libjack' 'libsamplerate' 'libsoxr' + 'libsndio' 'quilt') +optdepends=('gst-plugins-base-libs: for libgst plugins' + 'libdvdcss: decoding encrypted DVDs' + 'flac: Free Lossless Audio Codec plugin' + 'twolame: TwoLAME mpeg2 encoder plugin' + 'vcdimager: navigate VCD with libvcdinfo' + 'libmtp: MTP devices discovery' + 'libcdio: audio CD playback' + 'ttf-dejavu: subtitle font' + 'mpg123: mpg123 codec' + 'libmicrodns: mDNS services discovery' + 'lua-socket: http interface' + 'libdvdread: DVD input module' + 'libdvdnav: DVD with navigation input module' + 'libogg: Ogg and OggSpots codec' + 'libmodplug: MOD output plugin' + 'libvorbis: Vorbis decoder/encoder' + 'speex: Speex codec' + 'opus: opus codec' + 'libtheora: theora codec' + 'libpng: PNG support' + 'libjpeg-turbo: JPEG support' + 'librsvg-legacy: SVG plugin' + 'x264: H264 encoding' + 'libass: Subtitle support' + 'libkate: Kate codec' + 'libtiger: Tiger rendering for Kate streams' + 'sdl_image: SDL image support' + 'aalib: ASCII art video output' + 'libcaca: colored ASCII art video output' + 'alsa-lib: ALSA audio output' + 'jack: jack audio server' + 'libsamplerate: audio Resampler' + 'libsoxr: SoX audio Resampler' + 'ncurses: ncurses interface' + 'sndio: sndio audio output') +conflicts=('vlc-plugin') +replaces=('vlc-plugin') +options=('!emptydirs') +source=("https://download.videolan.org/${_realpkgname}/${_vlcver}/${_realpkgname}-${_vlcver}${_vlcfixupver}.tar.xz" + "https://repo.hyperbola.info:50000/sources/${_realpkgname}/${_realpkgname}_${_debver}-${_debrel}.debian.tar.xz"{,.sig} + "remove-internet-playlist.patch" + "remove-services.patch" + "update-vlc-plugin-cache.hook" + "vlc.desktop") +sha512sums=('35cdf191071224d0cf1b5a83c00773ff87b9e5bfcf0f5523f7edd53f75b23eda6b27bb49ffa97d69a1d176b8fe4786d959aeeb00d4380beab71c9f7e6b7c7298' + '68593981cbc9a4e85a45559950136751706aa20f5dc8da2a399ca2a52ea3ade815ec7edd2d6d4c6cd5be14b8b7e77212937ab7125a8fb8c663be9d52bf7da288' + 'SKIP' + 'b00d04b09ef39fd9889e5b1cccf8c839bc2a014bd222ee401c107fa7666ad8c1aa672f2fb8ce89b30e01f1db4fd70b7450143c1e061222ad0fe465211d1ff0c0' + '6a84e679466c53f0f64b9a26672d861610b79099bf4aecfb453767b51ee0c0385a634fbd464426012b44228ff7f66e9710196fa2149d95bffc712b23ce3522d8' + '80357bae69e32b353d3784932d854e294906798e14faffb87c3383c3b6f6bdc57cbabb9c6e3f3c1adf0f8ddbb24153e72104c963cf1934970c2983c96daef9df' + 'd9512b74fceebf4bea2c3393bd361c020c58e9877114a5c423818b319df12b447d9f45574a4436c0b312632fa25c5d5825d7311f5568a59d279875f765bfd51a') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd ${_realpkgname}-${_vlcver} + sed -e 's|-Werror-implicit-function-declaration||g' -i configure + sed 's|whoami|echo builduser|g' -i configure + sed 's|hostname -f|echo arch|g' -i configure + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # remove non-free service-definitions and inclusions + rm ./share/lua/meta/art/*.lua + rm ./share/lua/playlist/*.lua + rm ./share/lua/sd/*.lua + patch -Np1 -i ${srcdir}/remove-services.patch + patch -Np1 -i ${srcdir}/remove-internet-playlist.patch + + autoreconf -vf +} + +build() { + cd ${_realpkgname}-${_vlcver} + + # setting compiler-flags + export CXXFLAGS+=" -std=c++11" + export LUAC=/usr/bin/luac + export LUA_LIBS="$(pkg-config --libs lua)" + export RCC=/usr/bin/rcc-qt5 + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-rpath \ + --enable-nls \ + --enable-archive \ + --disable-live555 \ + --disable-dc1394 \ + --disable-dv1394 \ + --enable-dvdread \ + --enable-dvdnav \ + --disable-bluray \ + --disable-opencv \ + --disable-smbclient \ + --disable-sftp \ + --disable-nfs \ + --disable-realrtsp \ + --enable-dvbpsi \ + --disable-gme \ + --enable-ogg \ + --disable-shout \ + --enable-matroska \ + --enable-mod \ + --enable-mpc \ + --enable-mad \ + --enable-mpg123 \ + --enable-gst-decode \ + --enable-avcodec \ + --disable-libva \ + --enable-avformat \ + --enable-postproc \ + --enable-faad \ + --disable-vpx \ + --enable-twolame \ + --disable-fdkaac \ + --enable-a52 \ + --enable-dca \ + --enable-flac \ + --enable-libmpeg2 \ + --enable-vorbis \ + --enable-speex \ + --enable-opus \ + --enable-oggspots \ + --disable-schroedinger \ + --enable-png \ + --enable-jpeg \ + --enable-x264 \ + --disable-x265 \ + --disable-zvbi \ + --enable-libass \ + --enable-kate \ + --enable-tiger \ + --disable-vdpau \ + --disable-wayland \ + --enable-sdl-image \ + --enable-freetype \ + --enable-fribidi \ + --enable-harfbuzz \ + --enable-fontconfig \ + --enable-svg \ + --enable-svgdec \ + --enable-aa \ + --enable-caca \ + --disable-pulse \ + --enable-sndio \ + --enable-alsa \ + --enable-jack \ + --enable-samplerate \ + --enable-soxr \ + --disable-chromaprint \ + --disable-chromecast \ + --enable-qt \ + --enable-skins2 \ + --enable-libtar \ + --enable-ncurses \ + --disable-lirc \ + --disable-goom \ + --disable-projectm \ + --disable-avahi \ + --enable-mtp \ + --enable-upnp \ + --enable-microdns \ + --enable-libxml2 \ + --disable-libgcrypt \ + --enable-gnutls \ + --enable-taglib \ + --disable-secret \ + --disable-kwallet \ + --disable-update-check \ + --disable-notify \ + --disable-dbus \ + --enable-libplacebo \ + --enable-vlc \ + --disable-aribsub \ + --disable-aom \ + --disable-srt \ + --disable-dav1d + make +} + +package() { + cd ${_realpkgname}-${_vlcver} + + make DESTDIR="${pkgdir}" install + + for res in 16 32 48 128 256; do + install -Dm 644 "${srcdir}/vlc-${_vlcver}/share/icons/${res}x${res}/vlc.png" \ + "${pkgdir}/usr/share/icons/hicolor/${res}x${res}/apps/vlc.png" + done + + # fix application-shortcut + rm "${pkgdir}/usr/share/applications/vlc.desktop" + install -Dm644 "${srcdir}/vlc.desktop" -t "${pkgdir}/usr/share/applications" + + install -Dm 644 "${srcdir}/update-vlc-plugin-cache.hook" -t "${pkgdir}/usr/share/libalpm/hooks" + for i in COPYING{,.LIB}; do + install -Dm 644 ${i} -t "${pkgdir}/usr/share/licenses/${pkgname}" + done +} diff --git a/vlc-legacy/remove-internet-playlist.patch b/vlc-legacy/remove-internet-playlist.patch new file mode 100644 index 0000000..e0f6a8a --- /dev/null +++ b/vlc-legacy/remove-internet-playlist.patch @@ -0,0 +1,423 @@ +--- a/modules/gui/qt/components/playlist/selector.cpp 2017-11-30 00:35:29.000000000 +0100 ++++ b/modules/gui/qt/components/playlist/selector.cpp 2024-08-14 14:50:30.875414149 +0200 +@@ -243,13 +243,13 @@ + QTreeWidgetItem *mycomp = addItem( CATEGORY_TYPE, N_("My Computer"), false, true )->treeItem(); + QTreeWidgetItem *devices = addItem( CATEGORY_TYPE, N_("Devices"), false, true )->treeItem(); + QTreeWidgetItem *lan = addItem( CATEGORY_TYPE, N_("Local Network"), false, true )->treeItem(); +- QTreeWidgetItem *internet = addItem( CATEGORY_TYPE, N_("Internet"), false, true )->treeItem(); ++ //QTreeWidgetItem *internet = addItem( CATEGORY_TYPE, N_("Internet"), false, true )->treeItem(); + + #define NOT_SELECTABLE(w) w->setFlags( w->flags() ^ Qt::ItemIsSelectable ); + NOT_SELECTABLE( mycomp ); + NOT_SELECTABLE( devices ); + NOT_SELECTABLE( lan ); +- NOT_SELECTABLE( internet ); ++ //NOT_SELECTABLE( internet ); + #undef NOT_SELECTABLE + + /* SD subnodes */ +@@ -269,7 +269,7 @@ + QIcon icon; + QString name( *ppsz_name ); + switch( *p_category ) +- { ++ {/* + case SD_CAT_INTERNET: + { + selItem = addItem( SD_TYPE, *ppsz_longname, false, false, internet ); +@@ -293,7 +293,7 @@ + icon = QIcon( iconname ); + } + } +- break; ++ break;*/ + case SD_CAT_DEVICES: + name = name.mid( 0, name.indexOf( '{' ) ); + selItem = addItem( SD_TYPE, *ppsz_longname, false, false, devices ); +@@ -341,7 +341,7 @@ + if( mycomp->childCount() == 0 ) delete mycomp; + if( devices->childCount() == 0 ) delete devices; + if( lan->childCount() == 0 ) delete lan; +- if( internet->childCount() == 0 ) delete internet; ++ //if( internet->childCount() == 0 ) delete internet; + } + + void PLSelector::setSource( QTreeWidgetItem *item ) +@@ -411,8 +411,7 @@ + { + emit categoryActivated( pl_item, false ); + int i_cat = item->data( 0, SD_CATEGORY_ROLE ).toInt(); +- emit SDCategorySelected( i_cat == SD_CAT_INTERNET +- || i_cat == SD_CAT_LAN ); ++ emit SDCategorySelected( i_cat == SD_CAT_LAN ); + } + } + +--- a/modules/services_discovery/Makefile.am 2019-05-23 19:09:46.000000000 +0200 ++++ b/modules/services_discovery/Makefile.am 2024-08-14 16:55:23.019515195 +0200 +@@ -4,10 +4,6 @@ + libmediadirs_plugin_la_SOURCES = services_discovery/mediadirs.c + sd_LTLIBRARIES += libmediadirs_plugin.la + +-libpodcast_plugin_la_SOURCES = services_discovery/podcast.c +-libpodcast_plugin_la_LIBADD = $(LIBPTHREAD) +-sd_LTLIBRARIES += libpodcast_plugin.la +- + libsap_plugin_la_SOURCES = services_discovery/sap.c + libsap_plugin_la_CFLAGS = $(AM_CFLAGS) $(CFLAGS_sap) + libsap_plugin_la_LIBADD = $(LIBS_sap) $(SOCKET_LIBS) +--- a/modules/Makefile.in 2021-06-18 09:14:53.000000000 +0200 ++++ b/modules/Makefile.in 2024-08-14 17:07:32.082516397 +0200 +@@ -3117,7 +3117,6 @@ + demux/playlist/b4s.lo demux/playlist/dvb.lo \ + demux/playlist/ifo.lo demux/playlist/itml.lo \ + demux/playlist/m3u.lo demux/playlist/pls.lo \ +- demux/playlist/podcast.lo demux/playlist/qtl.lo \ + demux/playlist/ram.lo demux/playlist/sgimb.lo \ + demux/playlist/shoutcast.lo demux/playlist/wpl.lo \ + demux/playlist/xspf.lo demux/playlist/playlist.lo +@@ -3129,9 +3128,6 @@ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libpng_plugin_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +-libpodcast_plugin_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +-am_libpodcast_plugin_la_OBJECTS = services_discovery/podcast.lo +-libpodcast_plugin_la_OBJECTS = $(am_libpodcast_plugin_la_OBJECTS) + libposterize_plugin_la_LIBADD = + am_libposterize_plugin_la_OBJECTS = video_filter/posterize.lo + libposterize_plugin_la_OBJECTS = $(am_libposterize_plugin_la_OBJECTS) +@@ -3248,8 +3244,6 @@ + gui/qt/dialogs/openurl.hpp gui/qt/dialogs/vlm.cpp \ + gui/qt/dialogs/vlm.hpp gui/qt/dialogs/firstrun.cpp \ + gui/qt/dialogs/firstrun.hpp \ +- gui/qt/dialogs/podcast_configuration.cpp \ +- gui/qt/dialogs/podcast_configuration.hpp \ + gui/qt/dialogs/extensions.cpp gui/qt/dialogs/extensions.hpp \ + gui/qt/dialogs/fingerprintdialog.cpp \ + gui/qt/dialogs/fingerprintdialog.hpp \ +@@ -3358,7 +3352,6 @@ + gui/qt/dialogs/libqt_plugin_la-openurl.lo \ + gui/qt/dialogs/libqt_plugin_la-vlm.lo \ + gui/qt/dialogs/libqt_plugin_la-firstrun.lo \ +- gui/qt/dialogs/libqt_plugin_la-podcast_configuration.lo \ + gui/qt/dialogs/libqt_plugin_la-extensions.lo \ + gui/qt/dialogs/libqt_plugin_la-fingerprintdialog.lo \ + gui/qt/components/libqt_plugin_la-extended_panels.lo \ +@@ -3433,7 +3426,6 @@ + gui/qt/dialogs/libqt_plugin_la-toolbar.moc.lo \ + gui/qt/dialogs/libqt_plugin_la-open.moc.lo \ + gui/qt/dialogs/libqt_plugin_la-openurl.moc.lo \ +- gui/qt/dialogs/libqt_plugin_la-podcast_configuration.moc.lo \ + gui/qt/dialogs/libqt_plugin_la-firstrun.moc.lo \ + gui/qt/dialogs/libqt_plugin_la-extensions.moc.lo \ + gui/qt/dialogs/libqt_plugin_la-fingerprintdialog.moc.lo \ +@@ -5686,7 +5678,6 @@ + demux/playlist/$(DEPDIR)/m3u.Plo \ + demux/playlist/$(DEPDIR)/playlist.Plo \ + demux/playlist/$(DEPDIR)/pls.Plo \ +- demux/playlist/$(DEPDIR)/podcast.Plo \ + demux/playlist/$(DEPDIR)/qtl.Plo \ + demux/playlist/$(DEPDIR)/ram.Plo \ + demux/playlist/$(DEPDIR)/sgimb.Plo \ +@@ -5912,8 +5903,6 @@ + gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-playlist.moc.Plo \ + gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-plugins.Plo \ + gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-plugins.moc.Plo \ +- gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.Plo \ +- gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.moc.Plo \ + gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-preferences.Plo \ + gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-preferences.moc.Plo \ + gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-sout.Plo \ +@@ -6202,7 +6191,6 @@ + services_discovery/$(DEPDIR)/libxcb_apps_plugin_la-xcb_apps.Plo \ + services_discovery/$(DEPDIR)/mediadirs.Plo \ + services_discovery/$(DEPDIR)/os2drive.Plo \ +- services_discovery/$(DEPDIR)/podcast.Plo \ + services_discovery/$(DEPDIR)/windrive.Plo \ + spu/$(DEPDIR)/audiobargraph_v.Plo \ + spu/$(DEPDIR)/libremoteosd_plugin_la-remoteosd.Plo \ +@@ -6778,7 +6766,6 @@ + $(libpanoramix_plugin_la_SOURCES) \ + $(libparam_eq_plugin_la_SOURCES) \ + $(libplaylist_plugin_la_SOURCES) $(libpng_plugin_la_SOURCES) \ +- $(libpodcast_plugin_la_SOURCES) \ + $(libposterize_plugin_la_SOURCES) \ + $(libpostproc_plugin_la_SOURCES) \ + $(libprefetch_plugin_la_SOURCES) \ +@@ -7178,7 +7165,6 @@ + $(libpanoramix_plugin_la_SOURCES) \ + $(libparam_eq_plugin_la_SOURCES) \ + $(libplaylist_plugin_la_SOURCES) $(libpng_plugin_la_SOURCES) \ +- $(libpodcast_plugin_la_SOURCES) \ + $(libposterize_plugin_la_SOURCES) \ + $(libpostproc_plugin_la_SOURCES) \ + $(libprefetch_plugin_la_SOURCES) \ +@@ -7833,20 +7819,16 @@ + gui/macosx/Resources/sidebar-icons/sidebar-pictures@2x.png \ + gui/macosx/Resources/sidebar-icons/sidebar-playlist.png \ + gui/macosx/Resources/sidebar-icons/sidebar-playlist@2x.png \ +- gui/macosx/Resources/sidebar-icons/sidebar-podcast.png \ +- gui/macosx/Resources/sidebar-icons/sidebar-podcast@2x.png \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-local.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-movie.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-music.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-pictures.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-playlist.pdf \ +- gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-podcast.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-local.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-movie.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-music.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-pictures.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-playlist.pdf \ +- gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-podcast.pdf \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-local.png \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-local@2x.png \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-movie.png \ +@@ -7857,8 +7839,6 @@ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-pictures@2x.png \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-playlist.png \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-playlist@2x.png \ +- gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-podcast.png \ +- gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-podcast@2x.png \ + gui/macosx/Resources/Button-Icons/VLCNextTemplate.pdf \ + gui/macosx/Resources/Button-Icons/VLCPauseTemplate.pdf \ + gui/macosx/Resources/Button-Icons/VLCPlayTemplate.pdf \ +@@ -10251,7 +10231,6 @@ + demux/playlist/itml.h \ + demux/playlist/m3u.c \ + demux/playlist/pls.c \ +- demux/playlist/podcast.c \ + demux/playlist/qtl.c \ + demux/playlist/ram.c \ + demux/playlist/sgimb.c \ +@@ -11173,20 +11152,16 @@ + gui/macosx/Resources/sidebar-icons/sidebar-pictures@2x.png \ + gui/macosx/Resources/sidebar-icons/sidebar-playlist.png \ + gui/macosx/Resources/sidebar-icons/sidebar-playlist@2x.png \ +- gui/macosx/Resources/sidebar-icons/sidebar-podcast.png \ +- gui/macosx/Resources/sidebar-icons/sidebar-podcast@2x.png \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-local.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-movie.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-music.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-pictures.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-playlist.pdf \ +- gui/macosx/Resources/sidebar-icons_mojave/dark/mv-dark-sidebar-podcast.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-local.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-movie.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-music.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-pictures.pdf \ + gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-playlist.pdf \ +- gui/macosx/Resources/sidebar-icons_mojave/light/mv-sidebar-podcast.pdf \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-local.png \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-local@2x.png \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-movie.png \ +@@ -11197,8 +11172,6 @@ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-pictures@2x.png \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-playlist.png \ + gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-playlist@2x.png \ +- gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-podcast.png \ +- gui/macosx/Resources/sidebar-icons_yosemite/ys-sidebar-podcast@2x.png \ + gui/macosx/Resources/Button-Icons/VLCNextTemplate.pdf \ + gui/macosx/Resources/Button-Icons/VLCPauseTemplate.pdf \ + gui/macosx/Resources/Button-Icons/VLCPlayTemplate.pdf \ +@@ -11258,8 +11231,6 @@ + gui/qt/dialogs/openurl.hpp gui/qt/dialogs/vlm.cpp \ + gui/qt/dialogs/vlm.hpp gui/qt/dialogs/firstrun.cpp \ + gui/qt/dialogs/firstrun.hpp \ +- gui/qt/dialogs/podcast_configuration.cpp \ +- gui/qt/dialogs/podcast_configuration.hpp \ + gui/qt/dialogs/extensions.cpp gui/qt/dialogs/extensions.hpp \ + gui/qt/dialogs/fingerprintdialog.cpp \ + gui/qt/dialogs/fingerprintdialog.hpp \ +@@ -11360,7 +11331,6 @@ + gui/qt/dialogs/convert.moc.cpp gui/qt/dialogs/help.moc.cpp \ + gui/qt/dialogs/gototime.moc.cpp gui/qt/dialogs/toolbar.moc.cpp \ + gui/qt/dialogs/open.moc.cpp gui/qt/dialogs/openurl.moc.cpp \ +- gui/qt/dialogs/podcast_configuration.moc.cpp \ + gui/qt/dialogs/firstrun.moc.cpp \ + gui/qt/dialogs/extensions.moc.cpp \ + gui/qt/dialogs/fingerprintdialog.moc.cpp \ +@@ -11400,7 +11370,6 @@ + gui/qt/ui/equalizer.h gui/qt/ui/video_effects.h \ + gui/qt/ui/open_file.h gui/qt/ui/open_disk.h \ + gui/qt/ui/open_net.h gui/qt/ui/open_capture.h gui/qt/ui/open.h \ +- gui/qt/ui/vlm.h gui/qt/ui/podcast_configuration.h \ + gui/qt/ui/profiles.h gui/qt/ui/sprefs_audio.h \ + gui/qt/ui/sprefs_input.h gui/qt/ui/sprefs_interface.h \ + gui/qt/ui/sprefs_subtitles.h gui/qt/ui/sprefs_video.h \ +@@ -11426,7 +11395,6 @@ + gui/qt/ui/open_net.ui \ + gui/qt/ui/open_capture.ui \ + gui/qt/ui/open.ui \ +- gui/qt/ui/podcast_configuration.ui \ + gui/qt/ui/profiles.ui \ + gui/qt/ui/sprefs_audio.ui \ + gui/qt/ui/sprefs_input.ui \ +@@ -11484,7 +11452,6 @@ + gui/qt/pixmaps/playlist/sidebar-icons/disc.svg \ + gui/qt/pixmaps/playlist/sidebar-icons/playlist.svg \ + gui/qt/pixmaps/playlist/sidebar-icons/lan.svg \ +- gui/qt/pixmaps/playlist/sidebar-icons/podcast.svg \ + gui/qt/pixmaps/playlist/sidebar-icons/library.svg \ + gui/qt/pixmaps/playlist/sidebar-icons/screen.svg \ + gui/qt/pixmaps/playlist/sidebar-icons/movie.svg \ +@@ -11965,14 +11932,12 @@ + libpacketizer_a52_plugin.la libpacketizer_dts_plugin.la \ + $(NULL) $(am__append_162) + sddir = $(pluginsdir)/services_discovery +-sd_LTLIBRARIES = libmediadirs_plugin.la libpodcast_plugin.la \ ++sd_LTLIBRARIES = libmediadirs_plugin.la \ + libsap_plugin.la $(LTLIBavahi) $(LTLIBmtp) $(LTLIBupnp) \ + $(am__append_164) $(LTLIBudev) $(am__append_167) \ + $(am__append_168) $(am__append_169) $(LTLIBmicrodns) \ + $(am__append_171) + libmediadirs_plugin_la_SOURCES = services_discovery/mediadirs.c +-libpodcast_plugin_la_SOURCES = services_discovery/podcast.c +-libpodcast_plugin_la_LIBADD = $(LIBPTHREAD) + libsap_plugin_la_SOURCES = services_discovery/sap.c + libsap_plugin_la_CFLAGS = $(AM_CFLAGS) $(CFLAGS_sap) + libsap_plugin_la_LIBADD = $(LIBS_sap) $(SOCKET_LIBS) +@@ -17316,8 +17281,6 @@ + demux/playlist/$(DEPDIR)/$(am__dirstamp) + demux/playlist/pls.lo: demux/playlist/$(am__dirstamp) \ + demux/playlist/$(DEPDIR)/$(am__dirstamp) +-demux/playlist/podcast.lo: demux/playlist/$(am__dirstamp) \ +- demux/playlist/$(DEPDIR)/$(am__dirstamp) + demux/playlist/qtl.lo: demux/playlist/$(am__dirstamp) \ + demux/playlist/$(DEPDIR)/$(am__dirstamp) + demux/playlist/ram.lo: demux/playlist/$(am__dirstamp) \ +@@ -17339,11 +17302,7 @@ + + libpng_plugin.la: $(libpng_plugin_la_OBJECTS) $(libpng_plugin_la_DEPENDENCIES) $(EXTRA_libpng_plugin_la_DEPENDENCIES) + $(AM_V_CCLD)$(libpng_plugin_la_LINK) $(libpng_plugin_la_OBJECTS) $(libpng_plugin_la_LIBADD) $(LIBS) +-services_discovery/podcast.lo: services_discovery/$(am__dirstamp) \ +- services_discovery/$(DEPDIR)/$(am__dirstamp) + +-libpodcast_plugin.la: $(libpodcast_plugin_la_OBJECTS) $(libpodcast_plugin_la_DEPENDENCIES) $(EXTRA_libpodcast_plugin_la_DEPENDENCIES) +- $(AM_V_CCLD)$(LINK) -rpath $(sddir) $(libpodcast_plugin_la_OBJECTS) $(libpodcast_plugin_la_LIBADD) $(LIBS) + video_filter/posterize.lo: video_filter/$(am__dirstamp) \ + video_filter/$(DEPDIR)/$(am__dirstamp) + +@@ -17522,9 +17481,6 @@ + gui/qt/dialogs/libqt_plugin_la-firstrun.lo: \ + gui/qt/dialogs/$(am__dirstamp) \ + gui/qt/dialogs/$(DEPDIR)/$(am__dirstamp) +-gui/qt/dialogs/libqt_plugin_la-podcast_configuration.lo: \ +- gui/qt/dialogs/$(am__dirstamp) \ +- gui/qt/dialogs/$(DEPDIR)/$(am__dirstamp) + gui/qt/dialogs/libqt_plugin_la-extensions.lo: \ + gui/qt/dialogs/$(am__dirstamp) \ + gui/qt/dialogs/$(DEPDIR)/$(am__dirstamp) +@@ -17768,9 +17724,6 @@ + gui/qt/dialogs/libqt_plugin_la-openurl.moc.lo: \ + gui/qt/dialogs/$(am__dirstamp) \ + gui/qt/dialogs/$(DEPDIR)/$(am__dirstamp) +-gui/qt/dialogs/libqt_plugin_la-podcast_configuration.moc.lo: \ +- gui/qt/dialogs/$(am__dirstamp) \ +- gui/qt/dialogs/$(DEPDIR)/$(am__dirstamp) + gui/qt/dialogs/libqt_plugin_la-firstrun.moc.lo: \ + gui/qt/dialogs/$(am__dirstamp) \ + gui/qt/dialogs/$(DEPDIR)/$(am__dirstamp) +@@ -20449,7 +20402,6 @@ + @AMDEP_TRUE@@am__include@ @am__quote@demux/playlist/$(DEPDIR)/m3u.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@demux/playlist/$(DEPDIR)/playlist.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@demux/playlist/$(DEPDIR)/pls.Plo@am__quote@ # am--include-marker +-@AMDEP_TRUE@@am__include@ @am__quote@demux/playlist/$(DEPDIR)/podcast.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@demux/playlist/$(DEPDIR)/qtl.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@demux/playlist/$(DEPDIR)/ram.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@demux/playlist/$(DEPDIR)/sgimb.Plo@am__quote@ # am--include-marker +@@ -20675,8 +20627,6 @@ + @AMDEP_TRUE@@am__include@ @am__quote@gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-playlist.moc.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-plugins.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-plugins.moc.Plo@am__quote@ # am--include-marker +-@AMDEP_TRUE@@am__include@ @am__quote@gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.Plo@am__quote@ # am--include-marker +-@AMDEP_TRUE@@am__include@ @am__quote@gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.moc.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-preferences.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-preferences.moc.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-sout.Plo@am__quote@ # am--include-marker +@@ -20978,7 +20928,6 @@ + @AMDEP_TRUE@@am__include@ @am__quote@services_discovery/$(DEPDIR)/libxcb_apps_plugin_la-xcb_apps.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@services_discovery/$(DEPDIR)/mediadirs.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@services_discovery/$(DEPDIR)/os2drive.Plo@am__quote@ # am--include-marker +-@AMDEP_TRUE@@am__include@ @am__quote@services_discovery/$(DEPDIR)/podcast.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@services_discovery/$(DEPDIR)/windrive.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@spu/$(DEPDIR)/audiobargraph_v.Plo@am__quote@ # am--include-marker + @AMDEP_TRUE@@am__include@ @am__quote@spu/$(DEPDIR)/libremoteosd_plugin_la-remoteosd.Plo@am__quote@ # am--include-marker +@@ -25422,13 +25371,6 @@ + @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqt_plugin_la_CPPFLAGS) $(CPPFLAGS) $(libqt_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o gui/qt/dialogs/libqt_plugin_la-firstrun.lo `test -f 'gui/qt/dialogs/firstrun.cpp' || echo '$(srcdir)/'`gui/qt/dialogs/firstrun.cpp + +-gui/qt/dialogs/libqt_plugin_la-podcast_configuration.lo: gui/qt/dialogs/podcast_configuration.cpp +-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqt_plugin_la_CPPFLAGS) $(CPPFLAGS) $(libqt_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT gui/qt/dialogs/libqt_plugin_la-podcast_configuration.lo -MD -MP -MF gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.Tpo -c -o gui/qt/dialogs/libqt_plugin_la-podcast_configuration.lo `test -f 'gui/qt/dialogs/podcast_configuration.cpp' || echo '$(srcdir)/'`gui/qt/dialogs/podcast_configuration.cpp +-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.Tpo gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.Plo +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gui/qt/dialogs/podcast_configuration.cpp' object='gui/qt/dialogs/libqt_plugin_la-podcast_configuration.lo' libtool=yes @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqt_plugin_la_CPPFLAGS) $(CPPFLAGS) $(libqt_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o gui/qt/dialogs/libqt_plugin_la-podcast_configuration.lo `test -f 'gui/qt/dialogs/podcast_configuration.cpp' || echo '$(srcdir)/'`gui/qt/dialogs/podcast_configuration.cpp +- + gui/qt/dialogs/libqt_plugin_la-extensions.lo: gui/qt/dialogs/extensions.cpp + @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqt_plugin_la_CPPFLAGS) $(CPPFLAGS) $(libqt_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT gui/qt/dialogs/libqt_plugin_la-extensions.lo -MD -MP -MF gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-extensions.Tpo -c -o gui/qt/dialogs/libqt_plugin_la-extensions.lo `test -f 'gui/qt/dialogs/extensions.cpp' || echo '$(srcdir)/'`gui/qt/dialogs/extensions.cpp + @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-extensions.Tpo gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-extensions.Plo +@@ -25926,13 +25868,6 @@ + @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqt_plugin_la_CPPFLAGS) $(CPPFLAGS) $(libqt_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o gui/qt/dialogs/libqt_plugin_la-openurl.moc.lo `test -f 'gui/qt/dialogs/openurl.moc.cpp' || echo '$(srcdir)/'`gui/qt/dialogs/openurl.moc.cpp + +-gui/qt/dialogs/libqt_plugin_la-podcast_configuration.moc.lo: gui/qt/dialogs/podcast_configuration.moc.cpp +-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqt_plugin_la_CPPFLAGS) $(CPPFLAGS) $(libqt_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT gui/qt/dialogs/libqt_plugin_la-podcast_configuration.moc.lo -MD -MP -MF gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.moc.Tpo -c -o gui/qt/dialogs/libqt_plugin_la-podcast_configuration.moc.lo `test -f 'gui/qt/dialogs/podcast_configuration.moc.cpp' || echo '$(srcdir)/'`gui/qt/dialogs/podcast_configuration.moc.cpp +-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.moc.Tpo gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.moc.Plo +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='gui/qt/dialogs/podcast_configuration.moc.cpp' object='gui/qt/dialogs/libqt_plugin_la-podcast_configuration.moc.lo' libtool=yes @AMDEPBACKSLASH@ +-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqt_plugin_la_CPPFLAGS) $(CPPFLAGS) $(libqt_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o gui/qt/dialogs/libqt_plugin_la-podcast_configuration.moc.lo `test -f 'gui/qt/dialogs/podcast_configuration.moc.cpp' || echo '$(srcdir)/'`gui/qt/dialogs/podcast_configuration.moc.cpp +- + gui/qt/dialogs/libqt_plugin_la-firstrun.moc.lo: gui/qt/dialogs/firstrun.moc.cpp + @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqt_plugin_la_CPPFLAGS) $(CPPFLAGS) $(libqt_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT gui/qt/dialogs/libqt_plugin_la-firstrun.moc.lo -MD -MP -MF gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-firstrun.moc.Tpo -c -o gui/qt/dialogs/libqt_plugin_la-firstrun.moc.lo `test -f 'gui/qt/dialogs/firstrun.moc.cpp' || echo '$(srcdir)/'`gui/qt/dialogs/firstrun.moc.cpp + @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-firstrun.moc.Tpo gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-firstrun.moc.Plo +@@ -29269,7 +29204,6 @@ + -rm -f demux/playlist/$(DEPDIR)/m3u.Plo + -rm -f demux/playlist/$(DEPDIR)/playlist.Plo + -rm -f demux/playlist/$(DEPDIR)/pls.Plo +- -rm -f demux/playlist/$(DEPDIR)/podcast.Plo + -rm -f demux/playlist/$(DEPDIR)/qtl.Plo + -rm -f demux/playlist/$(DEPDIR)/ram.Plo + -rm -f demux/playlist/$(DEPDIR)/sgimb.Plo +@@ -29495,8 +29429,6 @@ + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-playlist.moc.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-plugins.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-plugins.moc.Plo +- -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.Plo +- -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.moc.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-preferences.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-preferences.moc.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-sout.Plo +@@ -29798,7 +29730,6 @@ + -rm -f services_discovery/$(DEPDIR)/libxcb_apps_plugin_la-xcb_apps.Plo + -rm -f services_discovery/$(DEPDIR)/mediadirs.Plo + -rm -f services_discovery/$(DEPDIR)/os2drive.Plo +- -rm -f services_discovery/$(DEPDIR)/podcast.Plo + -rm -f services_discovery/$(DEPDIR)/windrive.Plo + -rm -f spu/$(DEPDIR)/audiobargraph_v.Plo + -rm -f spu/$(DEPDIR)/libremoteosd_plugin_la-remoteosd.Plo +@@ -30648,7 +30579,6 @@ + -rm -f demux/playlist/$(DEPDIR)/m3u.Plo + -rm -f demux/playlist/$(DEPDIR)/playlist.Plo + -rm -f demux/playlist/$(DEPDIR)/pls.Plo +- -rm -f demux/playlist/$(DEPDIR)/podcast.Plo + -rm -f demux/playlist/$(DEPDIR)/qtl.Plo + -rm -f demux/playlist/$(DEPDIR)/ram.Plo + -rm -f demux/playlist/$(DEPDIR)/sgimb.Plo +@@ -30874,8 +30804,6 @@ + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-playlist.moc.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-plugins.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-plugins.moc.Plo +- -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.Plo +- -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-podcast_configuration.moc.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-preferences.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-preferences.moc.Plo + -rm -f gui/qt/dialogs/$(DEPDIR)/libqt_plugin_la-sout.Plo +@@ -31177,7 +31105,6 @@ + -rm -f services_discovery/$(DEPDIR)/libxcb_apps_plugin_la-xcb_apps.Plo + -rm -f services_discovery/$(DEPDIR)/mediadirs.Plo + -rm -f services_discovery/$(DEPDIR)/os2drive.Plo +- -rm -f services_discovery/$(DEPDIR)/podcast.Plo + -rm -f services_discovery/$(DEPDIR)/windrive.Plo + -rm -f spu/$(DEPDIR)/audiobargraph_v.Plo + -rm -f spu/$(DEPDIR)/libremoteosd_plugin_la-remoteosd.Plo diff --git a/vlc-legacy/remove-services.patch b/vlc-legacy/remove-services.patch new file mode 100644 index 0000000..7c3760c --- /dev/null +++ b/vlc-legacy/remove-services.patch @@ -0,0 +1,184 @@ +--- a/share/Makefile.in 2021-06-18 09:14:54.000000000 +0200 ++++ b/share/Makefile.in 2024-08-14 14:16:09.736416823 +0200 +@@ -101,33 +101,11 @@ + @BUILD_LUA_TRUE@ lua/intf/modules/host.luac \ + @BUILD_LUA_TRUE@ lua/intf/modules/httprequests.luac \ + @BUILD_LUA_TRUE@ lua/intf/telnet.luac \ +-@BUILD_LUA_TRUE@ lua/meta/art/02_frenchtv.luac \ +-@BUILD_LUA_TRUE@ lua/meta/art/03_lastfm.luac \ +-@BUILD_LUA_TRUE@ lua/meta/art/01_googleimage.luac \ +-@BUILD_LUA_TRUE@ lua/meta/art/00_musicbrainz.luac \ + @BUILD_LUA_TRUE@ lua/meta/reader/filename.luac \ + @BUILD_LUA_TRUE@ lua/modules/common.luac \ + @BUILD_LUA_TRUE@ lua/modules/dkjson.luac \ + @BUILD_LUA_TRUE@ lua/modules/sandbox.luac \ + @BUILD_LUA_TRUE@ lua/modules/simplexml.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/anevia_streams.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/anevia_xml.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/appletrailers.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/bbc_co_uk.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/cue.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/dailymotion.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/jamendo.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/koreus.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/liveleak.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/newgrounds.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/rockbox_fm_presets.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/soundcloud.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/vimeo.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/vocaroo.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/youtube.luac \ +-@BUILD_LUA_TRUE@ lua/playlist/twitch.luac \ +-@BUILD_LUA_TRUE@ lua/sd/icecast.luac \ +-@BUILD_LUA_TRUE@ lua/sd/jamendo.luac \ + @BUILD_LUA_TRUE@ $(NULL) + + @BUILD_LUA_TRUE@am__append_4 = \ +@@ -1161,26 +1139,11 @@ + lua/intf/modules/httprequests.lua lua/intf/telnet.lua \ + lua/meta/README.txt lua/meta/art/README.txt \ + lua/meta/art/02_frenchtv.lua lua/meta/art/03_lastfm.lua \ +- lua/meta/art/01_googleimage.lua \ +- lua/meta/art/00_musicbrainz.lua lua/meta/fetcher/README.txt \ ++ lua/meta/fetcher/README.txt \ + lua/meta/reader/README.txt lua/meta/reader/filename.lua \ + lua/modules/common.lua lua/modules/dkjson.lua \ + lua/modules/sandbox.lua lua/modules/simplexml.lua \ +- lua/playlist/README.txt lua/playlist/anevia_streams.lua \ +- lua/playlist/anevia_xml.lua lua/playlist/appletrailers.lua \ +- lua/playlist/bbc_co_uk.lua lua/playlist/break.lua \ +- lua/playlist/cue.lua lua/playlist/dailymotion.lua \ +- lua/playlist/extreme.lua lua/playlist/france2.lua \ +- lua/playlist/jamendo.lua lua/playlist/katsomo.lua \ +- lua/playlist/koreus.lua lua/playlist/lelombrik.lua \ +- lua/playlist/liveleak.lua lua/playlist/metacafe.lua \ +- lua/playlist/mpora.lua lua/playlist/newgrounds.lua \ +- lua/playlist/pinkbike.lua lua/playlist/rockbox_fm_presets.lua \ +- lua/playlist/soundcloud.lua lua/playlist/vimeo.lua \ +- lua/playlist/vocaroo.lua lua/playlist/youtube.lua \ +- lua/playlist/twitch.lua lua/playlist/zapiks.lua \ +- lua/sd/README.txt lua/sd/fmc.lua lua/sd/icecast.lua \ +- lua/sd/icast.lua lua/sd/jamendo.lua \ ++ lua/playlist/README.txt lua/sd/README.txt \ + hrtfs/dodeca_and_7channel_3DSL_HRTF.sofa + desktopdir = $(datadir)/applications + @HAVE_DARWIN_FALSE@@HAVE_WIN32_FALSE@desktop_DATA = vlc.desktop +@@ -1250,16 +1213,11 @@ + @BUILD_LUA_TRUE@ lua/intf/dumpmeta.lua \ + @BUILD_LUA_TRUE@ lua/meta/README.txt \ + @BUILD_LUA_TRUE@ lua/meta/art/README.txt \ +-@BUILD_LUA_TRUE@ lua/meta/art/01_googleimage.lua \ + @BUILD_LUA_TRUE@ lua/meta/fetcher/README.txt \ + @BUILD_LUA_TRUE@ lua/meta/reader/README.txt \ + @BUILD_LUA_TRUE@ lua/meta/reader/filename.lua \ + @BUILD_LUA_TRUE@ lua/playlist/README.txt \ +-@BUILD_LUA_TRUE@ lua/playlist/liveleak.lua \ +-@BUILD_LUA_TRUE@ lua/playlist/youtube.lua \ + @BUILD_LUA_TRUE@ lua/sd/README.txt \ +-@BUILD_LUA_TRUE@ lua/sd/icecast.lua \ +-@BUILD_LUA_TRUE@ lua/sd/icast.lua \ + @BUILD_LUA_TRUE@ $(NULL) + + DIST_solid = \ +--- a/share/Makefile.am 2020-10-24 20:21:13.000000000 +0200 ++++ b/share/Makefile.am 2024-08-14 14:17:14.545570794 +0200 +@@ -131,33 +131,11 @@ + lua/intf/modules/host.luac \ + lua/intf/modules/httprequests.luac \ + lua/intf/telnet.luac \ +- lua/meta/art/02_frenchtv.luac \ +- lua/meta/art/03_lastfm.luac \ +- lua/meta/art/01_googleimage.luac \ +- lua/meta/art/00_musicbrainz.luac \ + lua/meta/reader/filename.luac \ + lua/modules/common.luac \ + lua/modules/dkjson.luac \ + lua/modules/sandbox.luac \ + lua/modules/simplexml.luac \ +- lua/playlist/anevia_streams.luac \ +- lua/playlist/anevia_xml.luac \ +- lua/playlist/appletrailers.luac \ +- lua/playlist/bbc_co_uk.luac \ +- lua/playlist/cue.luac \ +- lua/playlist/dailymotion.luac \ +- lua/playlist/jamendo.luac \ +- lua/playlist/koreus.luac \ +- lua/playlist/liveleak.luac \ +- lua/playlist/newgrounds.luac \ +- lua/playlist/rockbox_fm_presets.luac \ +- lua/playlist/soundcloud.luac \ +- lua/playlist/vimeo.luac \ +- lua/playlist/vocaroo.luac \ +- lua/playlist/youtube.luac \ +- lua/playlist/twitch.luac \ +- lua/sd/icecast.luac \ +- lua/sd/jamendo.luac \ + $(NULL) + + nobase_doc_DATA = \ +@@ -168,16 +146,11 @@ + lua/intf/dumpmeta.lua \ + lua/meta/README.txt \ + lua/meta/art/README.txt \ +- lua/meta/art/01_googleimage.lua \ + lua/meta/fetcher/README.txt \ + lua/meta/reader/README.txt \ + lua/meta/reader/filename.lua \ + lua/playlist/README.txt \ +- lua/playlist/liveleak.lua \ +- lua/playlist/youtube.lua \ + lua/sd/README.txt \ +- lua/sd/icecast.lua \ +- lua/sd/icast.lua \ + $(NULL) + + nobase_dist_vlcdata_DATA += \ +@@ -258,10 +231,6 @@ + lua/intf/telnet.lua \ + lua/meta/README.txt \ + lua/meta/art/README.txt \ +- lua/meta/art/02_frenchtv.lua \ +- lua/meta/art/03_lastfm.lua \ +- lua/meta/art/01_googleimage.lua \ +- lua/meta/art/00_musicbrainz.lua \ + lua/meta/fetcher/README.txt \ + lua/meta/reader/README.txt \ + lua/meta/reader/filename.lua \ +@@ -270,36 +239,7 @@ + lua/modules/sandbox.lua \ + lua/modules/simplexml.lua \ + lua/playlist/README.txt \ +- lua/playlist/anevia_streams.lua \ +- lua/playlist/anevia_xml.lua \ +- lua/playlist/appletrailers.lua \ +- lua/playlist/bbc_co_uk.lua \ +- lua/playlist/break.lua \ +- lua/playlist/cue.lua \ +- lua/playlist/dailymotion.lua \ +- lua/playlist/extreme.lua \ +- lua/playlist/france2.lua \ +- lua/playlist/jamendo.lua \ +- lua/playlist/katsomo.lua \ +- lua/playlist/koreus.lua \ +- lua/playlist/lelombrik.lua \ +- lua/playlist/liveleak.lua \ +- lua/playlist/metacafe.lua \ +- lua/playlist/mpora.lua \ +- lua/playlist/newgrounds.lua \ +- lua/playlist/pinkbike.lua \ +- lua/playlist/rockbox_fm_presets.lua \ +- lua/playlist/soundcloud.lua \ +- lua/playlist/vimeo.lua \ +- lua/playlist/vocaroo.lua \ +- lua/playlist/youtube.lua \ +- lua/playlist/twitch.lua \ +- lua/playlist/zapiks.lua \ +- lua/sd/README.txt \ +- lua/sd/fmc.lua \ +- lua/sd/icecast.lua \ +- lua/sd/icast.lua \ +- lua/sd/jamendo.lua ++ lua/sd/README.txt + DIST_solid = \ + solid/vlc-openbd.desktop \ + solid/vlc-opencda.desktop \ diff --git a/vlc-legacy/update-vlc-plugin-cache.hook b/vlc-legacy/update-vlc-plugin-cache.hook new file mode 100644 index 0000000..3fbf13d --- /dev/null +++ b/vlc-legacy/update-vlc-plugin-cache.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/vlc/plugins/* + +[Action] +Description = Updating the vlc plugin cache... +When = PostTransaction +Exec = /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins diff --git a/vlc-legacy/vlc.desktop b/vlc-legacy/vlc.desktop new file mode 100644 index 0000000..0ea51b1 --- /dev/null +++ b/vlc-legacy/vlc.desktop @@ -0,0 +1,230 @@ +[Desktop Entry] +Version=1.0 +Name=VLC media player +GenericName=Media player +Comment=Read, capture, broadcast your multimedia streams +Name[af]=VLC-mediaspeler +GenericName[af]=Mediaspeler +Comment[af]=Lees, vang, send u multimediastrome +Name[am]=የ ቪኤáŤá˛ ááŚáŠ“áŠ› á›áŚ«á‹á‰» +GenericName[am]=የ ááŚáŠ“áŠ› á›áŚ«á‹á‰» +Comment[am]=የ እá­áµá‹ŽáŠ• በá­áŠ«á‰ł ááŚáŠ“áŠ› á›áŠ•á‰ á‰˘á‹«: áያዣ á›áµá‰°á‹áፊያ +Name[ar]=مشغل الŮسائط VLC +GenericName[ar]=مشغل الŮسائط +Comment[ar]=اقرأ ŘŚ التقط ŘŚ ٠بث ŘŞŘŻŮقات Ůسائط٠المتعددة +Name[as_IN]=VLC মিডিয়া প্লেয়াৰ +GenericName[as_IN]=মিডিয়া প্লেয়াৰ +Comment[as_IN]=আপোনাৰ মাল্টিমিডিয়া ষ্ট্ৰীমসমূহ পঢ়ক, কেপচাৰ কৰক, সম্প্ৰচাৰ কৰক +Name[ast]=Reproductor multimedia VLC +GenericName[ast]=Reproductor multimedia +Comment[ast]=Llei, captura y emiti fluxos multimedia +Name[az]=VLC media pleyeri +GenericName[az]=Media pleyeri +Comment[az]=Multinedia axınlarını oxudun, yazın vÉ™ yayımlayın +Name[be]=Медыяпрайгравальнік VLC +GenericName[be]=Медыяпрайгравальнік +Comment[be]=Чытаць, лавіць Ń– транŃляваць ĐĽŃльтымедыйныя патокі +Name[bg]=Медиен плейър VLC +GenericName[bg]=Медиен плейър +Comment[bg]=Прочитане, прихващане и излъчване на ĐĽŃлтимедийни потоци. +Name[bn_BD]=VLC মিডিয়া প্লেয়ার +GenericName[bn_BD]=মিডিয়া প্লেয়ার +Comment[bn_BD]=আপনার মাল্টিমিডিয়া স্ট্রীম পড়ŕ§ŕ¦¨, ধরে রাখŕ§ŕ¦¨ এবং ছড়িয়ে দিন +Name[br]=VLC lenner mediaoĂą +GenericName[br]=Lenner mediaoĂą +Comment[br]=Lenn, enrollañ, skignañ ho froudoĂą liesvedia +Name[ca]=Reproductor multimèdia VLC +GenericName[ca]=Reproductor multimèdia +Comment[ca]=ReproduĂŻu, captureu i emeteu fluxos multimèdia +Name[co]=Lettore multimedia VLC +GenericName[co]=Lettore multimedia +Comment[co]=Leghje, cattura, diffonde i vostri flussi multimedia +Name[cs]=MultimediálnĂ­ pĹ™ehrávaÄŤ VLC +GenericName[cs]=MultimediálnĂ­ pĹ™ehrávaÄŤ +Comment[cs]=ÄŚtÄ›te, zachytávejte, a vysĂ­lejte svĂ© multimediálnĂ­ proudy +Name[cy]=Chwaraeydd VLC +GenericName[cy]=Chwaraeydd cyfryngau +Comment[cy]=Darllen, cipio a darlledu dy ffrydiau aml-gyfrwng +Name[da]=VLC media player +GenericName[da]=Medieafspiller +Comment[da]=Læs, indspil, transmittĂ©r dine multimediestreams +Name[de]=VLC Media Player +GenericName[de]=Medienwiedergabe +Comment[de]=Wiedergabe, Aufnahme und Verbreitung Ihrer Multimedia-Streams +Name[el]=ΑναπαĎαγωγός πολυμέĎων VLC +GenericName[el]=ΑναπαĎαγωγός πολυμέĎων +Comment[el]=ΔιαβάĎτε, καταγĎάĎτε, μεταδώĎτε τα πολυμέĎα Ďας +Name[en_GB]=VLC media player +GenericName[en_GB]=Media player +Comment[en_GB]=Read, capture, broadcast your multimedia streams +Name[es]=Reproductor multimedia VLC +GenericName[es]=Reproductor multimedia +Comment[es]=Lea, capture y emita sus contenidos multimedia +Name[es_MX]=Reproductor multimedia VLC +GenericName[es_MX]=Reproductor multimedia +Comment[es_MX]=Lea, capture, emita sus transmisiones multimedia +Name[et]=VLC meediaesitaja +GenericName[et]=Meediaesitaja +Comment[et]=Multimeediafailide ja -voogude taasesitamine, lindistamine ja edastamine +Name[eu]=VLC multimedia-erreproduzigailua +GenericName[eu]=Multimedia irakurgailua +Comment[eu]=Irakurri, hartu, igorri zure multimedia jarioak +Name[fi]=VLC-mediasoitin +GenericName[fi]=Mediasoitin +Comment[fi]=Toista, tallenna ja lähetä multimediaa +Name[fr]=Lecteur multimĂ©dia VLC +GenericName[fr]=Lecteur multimĂ©dia +Comment[fr]=Lit, capture, diffuse vos flux multimĂ©dias +Name[fy]=VLC media player +GenericName[fy]=Mediaspiler +Comment[fy]=Jo multimedia-streams lĂŞze, opnimme en Ăştstjoere +Name[ga]=Seinnteoir meán VLC +GenericName[ga]=Seinnteoir meán +Comment[ga]=LĂ©igh, gabh, craol do shruthanna ilmheán +Name[gd]=Cluicheadair mheadhanan VLC +GenericName[gd]=Cluicheadair mheadhanan +Comment[gd]=Leugh, glac is craol sruthan ioma-mheadhain +Name[gl]=Reprodutor multimedia VLC +GenericName[gl]=Reprodutor multimedia +Comment[gl]=Lea, capture e emita os seus fluxos multimedia +Name[he]=נגן המדיה VLC +GenericName[he]=נגן מדיה +Comment[he]=קרי××”, לכידה ושידור של תזרימי המול×ימדיה שלך +Name[hi]=वीएलसी मीडिया प्लेयर +GenericName[hi]=मीडिया प्लेयर +Comment[hi]=अपनी मल्टीमीडिया स्ट्रीम को पढ़ें, रिकॉर्ड करें, प्रसारित करें +Name[hu]=VLC mĂ©dialejátszĂł +GenericName[hu]=MĂ©dialejátszĂł +Comment[hu]=MultimĂ©dia adatfolyamok olvasása, felvĂ©tele Ă©s továbbĂ­tása +Name[id]=Pemutar media VLC +GenericName[id]=Pemutar Media +Comment[id]=Baca, tangkap, pancarkan/broadcast aliran multimedia +Name[ie]=Reproductor de media VLC +GenericName[ie]=Reproductor de media +Comment[ie]=Leer, registrar e difuser vor fluvies multimedia +Name[is]=VLC spilarinn +GenericName[is]=Margmiðlunarspilari +Comment[is]=Lesa, taka upp og Ăştvarpa margmiðlunarstreymi +Name[it]=Lettore multimediale VLC +GenericName[it]=Lettore multimediale +Comment[it]=Leggi, cattura, trasmetti i tuoi flussi multimediali +Name[ja]=VLCăˇă‡ă‚Łă‚˘ă—ă¬ă‚¤ă¤ăĽ +GenericName[ja]=ăˇă‡ă‚Łă‚˘ă—ă¬ă‚¤ă¤ăĽ +Comment[ja]=ăžă«ăăˇă‡ă‚Łă‚˘ă‚ąăăŞăĽă ă®čŞ­ăżčľĽăżă€ă‚­ăŁă—ăăŁăĽă€ă–ă­ăĽă‰ă‚­ăŁă‚ąă +Name[ka]=VLC á›á”á“ááá“áá›á™á•á á”ášá +GenericName[ka]=á›á”á“ááá¤ááášá”á‘áᡠá“áá›á™á•á á”ášá +Comment[ka]=á’áá®áˇá”áśáá—, á’áá“ááá¦á”á—, á’ááŁá¨á•áá— á›á”á“ááá¤ááášá”á‘á á”á—á”á á¨á +Name[kab]=ImeÉŁri n umidya VLC +GenericName[kab]=ImeÉŁri n umidya +Comment[kab]=Ć”eáą›, áą­áą­ef agdil, suffeÉŁ-d isuddam n umidya-ik +Name[km]=កážáź’ážážśáž·áž’ី​ចាក់​ážáźážŚáź€ VLC +GenericName[km]=កážáź’ážážśáž·áž’ី​ចាក់​ážáźážŚáź€ +Comment[km]=អាន ចាប់យក ប្រកាស​ស្ទ្រីážâ€‹áž–áž áž»ážáźážŚáź€â€‹ážšáž”ស់​អ្នក +Name[ko]=VLC 미디어 플ë ěť´ě–´ +GenericName[ko]=미디어 플ë ěť´ě–´ +Comment[ko]=ë‹ąě‹ ěť ë©€í‹°ëŻ¸ë””ě–´ 스트림을 ěşˇěł ë°Ź 방송 í•  ě ěžěеë‹ë‹¤ +Name[lt]=VLC leistuvÄ— +GenericName[lt]=LeistuvÄ— +Comment[lt]=Groti, ÄŻrašyti, siĹłsti ÄŻvairialypÄ—s terpÄ—s kĹ«rinius +Name[lv]=VLC mediju atskaņotÄjs +GenericName[lv]=Mediju atskaņotÄjs +Comment[lv]=Lasiet, tveriet un apraidiet savas multimediju straumes +Name[ml]=VLC മീഡിയ പ്ലെയർ +GenericName[ml]=മീഡിയ പ്ലെയർ +Comment[ml]=നിങ്ങളŕµŕ´źŕµ† മൾട്ടിമീഡിയ സ്ട്രീമŕµŕ´•ൾ റീഡ് ചെയ്യŕµŕ´•, ക്യാപ്‌ചർ ചെയ്യŕµŕ´•, പ്രക്ഷേപണം ചെയ്യŕµŕ´• +Name[mn]=VLC дамжŃŃлга тоглŃŃлагч +GenericName[mn]=ДамжŃŃлга тоглŃŃлагч +Comment[mn]=Таны дамжŃŃлгын ŃŃ€Ńгалыг ŃĐ˝Ńих, бичиж авах, цацах +Name[mr]=VLC मीडिया प्लेअर +GenericName[mr]=मीडिया प्लेअर +Comment[mr]=आपले मल्टीमिडिया प्रवाह बŕ¤ŕ¤ľ, हस्तगत करा, प्रसारित करा +Name[ms]=Pemain media VLC +GenericName[ms]=Pemain media +Comment[ms]=Baca, tangkap, siarkan strim multimedia anda +Name[my]=VLC မီဒီယာ ပြစက် +GenericName[my]=မီဒီယာ ပြစက် +Comment[my]=သင်Ꮰမာá€á€®á€™á€®á€’ီယာ á€á€­á€Żá€€á€şá€›á€­á€Żá€€á€şá€śá€˝á€ľá€„့်ပြ စီးကြောင်းများကို ဖá€á€şáŠ á€–á€™á€şá€¸á€šá€°áŠ á€‘á€Żá€á€şá€śá€˝á€„့်á€á€Ľá€„်း +Name[nb]=VLC media player +GenericName[nb]=Mediespiller +Comment[nb]=Innless, ta opp, og kringkast dine multimediastrømmer +Name[ne]=VLC मिडिया प्लेयर +GenericName[ne]=मिडिया प्लेयर +Comment[ne]=पढ्नŕĄŕ¤ąŕĄ‹ŕ¤¸ŕĄŤ, क्याप्चर गर्नŕĄŕ¤ąŕĄ‹ŕ¤¸ŕĄŤ, तपाŕ¤ŕ¤‚का मल्टिमिडिया स्ट्रिमहरू प्रसारण गर्नŕĄŕ¤ąŕĄ‹ŕ¤¸ŕĄŤ +Name[nl]=VLC media player +GenericName[nl]=Mediaspeler +Comment[nl]=Uw multimedia-streams lezen, opnemen en uitzenden +Name[nn]=VLC mediespelar +GenericName[nn]=Mediespelar +Comment[nn]=Spel av, ta opp og send ut multimedia +Name[oc]=Lector multimèdia VLC +GenericName[oc]=Lector multimèdia +Comment[oc]=Legissètz, capturatz, difusatz vòstres fluxes multimèdia +Name[pa]=VLC ਮੀਡਿਆ ਪਲੇਅਰ +GenericName[pa]=ਮੀਡਿਆ ਪਲੇਅਰ +Comment[pa]=ਆਪਣੀ ਮਲਟੀਮੀਡਿਆ ਸਟਰੀਮ ਪੜ੍ਹੋ, ਕŕ©ŕ¨Şŕ¨šŕ¨° ਤੇ ਬਰਾਡਕਾਸਟ ਕਰੋ +Name[pl]=VLC media player +GenericName[pl]=Odtwarzacz multimedialny +Comment[pl]=Odczytywanie, przechwytywanie i nadawanie strumieni multimedialnych +Name[pt_BR]=Reprodutor de MĂ­dias VLC +GenericName[pt_BR]=Reprodutor de MĂ­dias +Comment[pt_BR]=Reproduza, capture e transmita os seus transmissões multimĂ­dia +Name[pt_PT]=VLC media player +GenericName[pt_PT]=Reprodutor de multimĂ©dia +Comment[pt_PT]=Ler, capturar, transmitir as suas emissões de multimĂ©dia +Name[ro]=Redor media VLC +GenericName[ro]=Redor media +Comment[ro]=CiteČ™te, captureazÄ, difuzeazÄ fluxurile multimedia +Name[ru]=Медиаплеер VLC +GenericName[ru]=Медиаплеер +Comment[ru]=УниверŃальный проигрыватель видео и аŃдио +Name[sc]=Leghidore multimediale VLC +GenericName[sc]=Leghidore multimediale +Comment[sc]=Leghe, catura, trasmite sos flussos multimediales tuos +Name[sk]=VLC media player +GenericName[sk]=PrehrávaÄŤ mĂ©diĂ­ +Comment[sk]=NaÄŤĂ­tavajte, zaznamenávajte, vysielajte svoje multimediálne streamy +Name[sl]=Predvajalnik VLC +GenericName[sl]=Predvajalnik predstavnih vsebin +Comment[sl]=Berite, zajemite, oddajajte vaše veÄŤpredstavne pretoke +Name[sr]=ВЛЦ медиŃŃки плеŃер +GenericName[sr]=МедиŃŃки плеŃер +Comment[sr]=ЧитаŃ, хватаŃ, емитŃŃ ŃвоŃе ĐĽŃлтимедиŃалне токове +Name[sq]=VLC lexues media +GenericName[sq]=Lexues Media +Comment[sq]=Lexoni, kapni dhe transmetoni transmetimet tuaja multimedia +Name[sv]=VLC media player +GenericName[sv]=Mediaspelare +Comment[sv]=Läs, fĂĄnga, sänd dina multimediaströmmar +Name[te]=VLC మాధ్యమ ప్రదర్శకం +GenericName[te]=మాధ్యమ ప్రదర్శకం +Comment[te]=మీ బహŕ±ŕ°łŕ°®ŕ°ľŕ°§ŕ±Ťŕ°Żŕ°® ప్రవాహాలనౠచదŕ±ŕ°µŕ±, బంధించౠమరియౠప్రసారం చేయి +Name[th]=โปรŕąŕ¸ŕ¸Łŕ¸ˇŕą€ŕ¸Ąŕąŕ¸™ŕ¸Şŕ¸·ŕąŕ¸­ VLC +GenericName[th]=โปรŕąŕ¸ŕ¸Łŕ¸ˇŕą€ŕ¸Ąŕąŕ¸™ŕ¸Şŕ¸·ŕąŕ¸­ +Comment[th]=อŕąŕ¸˛ŕ¸™ ŕ¸ŕ¸±ŕ¸š ŕąŕ¸Ąŕ¸°ŕ¸–ŕąŕ¸˛ŕ¸˘ŕ¸—อดสตรีมมัลติมีเดียของคุณ +Name[tr]=VLC ortam oynatıcısı +GenericName[tr]=Ortam oynatıcısı +Comment[tr]=Çoklu ortam akışlarınızı okuyun, yakalayın, yayınlayın +Name[uk]=Медіапрогравач VLC +GenericName[uk]=Медіапрогравач +Comment[uk]=Читання, захоплення та поŃирення ваŃих ĐĽŃльтимедійних потоків +Name[vi]=Trình phát media VLC +GenericName[vi]=Trình phát Media +Comment[vi]=Äọc, chụp, phát các luồng Ä‘a phương tiện cá»§a bạn +Name[wa]=Djouweu d' media VLC +GenericName[wa]=Djouweu d' media +Comment[wa]=LĂ©t, egaloye, evoye vos floĂ»s multimedia +Name[zh_CN]=VLC 媒体播放器 +GenericName[zh_CN]=媒体播放器 +Comment[zh_CN]=读取ă€ćŤ•获ă€ĺążć’­ć‚¨çš„ĺ¤šĺŞ’ä˝“ćµ +Name[zh_TW]=VLC 媒體播放器 +GenericName[zh_TW]=媒體播放器 +Comment[zh_TW]=讀取ă€ć“·ĺŹ–č‡ĺ»Łć’­ć‚¨çš„ĺ¤šĺŞ’é«”ä¸˛ćµ +Exec=/usr/bin/vlc +TryExec=/usr/bin/vlc +Icon=vlc +Terminal=false +Type=Application +Categories=AudioVideo;Player;Recorder; +MimeType=application/ogg;application/x-ogg;audio/ogg;audio/vorbis;audio/x-vorbis;audio/x-vorbis+ogg;video/ogg;video/x-ogm;video/x-ogm+ogg;video/x-theora+ogg;video/x-theora;audio/x-speex;audio/opus;application/x-flac;audio/flac;audio/x-flac;audio/x-ms-asf;audio/x-ms-asx;audio/x-ms-wax;audio/x-ms-wma;video/x-ms-asf;video/x-ms-asf-plugin;video/x-ms-asx;video/x-ms-wm;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvx;video/x-msvideo;audio/x-pn-windows-acm;video/divx;video/msvideo;video/vnd.divx;video/avi;video/x-avi;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/vnd.rn-realaudio;audio/x-pn-realaudio;audio/x-pn-realaudio-plugin;audio/x-real-audio;audio/x-realaudio;video/vnd.rn-realvideo;audio/mpeg;audio/mpg;audio/mp1;audio/mp2;audio/mp3;audio/x-mp1;audio/x-mp2;audio/x-mp3;audio/x-mpeg;audio/x-mpg;video/mp2t;video/mpeg;video/mpeg-system;video/x-mpeg;video/x-mpeg2;video/x-mpeg-system;application/mpeg4-iod;application/mpeg4-muxcodetable;application/x-extension-m4a;application/x-extension-mp4;audio/aac;audio/m4a;audio/mp4;audio/x-m4a;audio/x-aac;video/mp4;video/mp4v-es;video/x-m4v;application/x-quicktime-media-link;application/x-quicktimeplayer;video/quicktime;application/x-matroska;audio/x-matroska;video/x-matroska;video/webm;audio/webm;audio/3gpp;audio/3gpp2;audio/AMR;audio/AMR-WB;video/3gp;video/3gpp;video/3gpp2;x-scheme-handler/mms;x-scheme-handler/mmsh;x-scheme-handler/rtsp;x-scheme-handler/rtp;x-scheme-handler/rtmp;x-scheme-handler/icy;x-scheme-handler/icyx;application/x-cd-image;x-content/video-vcd;x-content/video-svcd;x-content/video-dvd;x-content/audio-cdda;x-content/audio-player;application/ram;application/xspf+xml;audio/mpegurl;audio/x-mpegurl;audio/scpls;audio/x-scpls;text/google-video-pointer;text/x-google-video-pointer;video/vnd.mpegurl;application/vnd.apple.mpegurl;application/vnd.ms-asf;application/vnd.ms-wpl;application/sdp;audio/dv;video/dv;audio/x-aiff;audio/x-pn-aiff;video/x-anim;video/x-nsv;video/fli;video/flv;video/x-flc;video/x-fli;video/x-flv;audio/wav;audio/x-pn-au;audio/x-pn-wav;audio/x-wav;audio/x-adpcm;audio/ac3;audio/eac3;audio/vnd.dts;audio/vnd.dts.hd;audio/vnd.dolby.heaac.1;audio/vnd.dolby.heaac.2;audio/vnd.dolby.mlp;audio/basic;audio/midi;audio/x-ape;audio/x-gsm;audio/x-musepack;audio/x-tta;audio/x-wavpack;audio/x-shorten;application/x-shockwave-flash;application/x-flash-video;misc/ultravox;image/vnd.rn-realpix;audio/x-it;audio/x-mod;audio/x-s3m;audio/x-xm;application/mxf; +X-KDE-Protocols=ftp,http,https,mms,rtmp,rtsp,sftp,smb +Keywords=Player;Capture;DVD;Audio;Video;Server;Broadcast; diff --git a/vnstat/PKGBUILD b/vnstat/PKGBUILD new file mode 100644 index 0000000..bac8086 --- /dev/null +++ b/vnstat/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=vnstat +pkgver=2.6 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="A console-based network traffic monitor" +arch=('i686' 'x86_64') +url='https://humdi.net/vnstat/' +license=('GPL-2') +depends=('bash') +makedepends=('gd' 'quilt') +optdepends=('gd: image output') +install=$pkgname.install +backup=(etc/vnstat.conf + etc/conf.d/vnstatd) +source=("https://humdi.net/vnstat/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/v/vnstat/vnstat_${_debver}-${_debrel}.debian.tar.xz" + "vnstatd.confd" + "vnstatd.initd" + "vnstatd.run") +sha512sums=('1a62fc9c2379b050208945e85bad04f602a0f2c71e6bd069d241c1df77c76ec6258948fc3fdf633b15c52665782cae4f995a916103d330bfb46cab0291d3a1ea' + '852890ff326c9ded93dfd16d50f73fd8e6a44c072e0372af67f6c75cf1ee832569f1a03c2b1b7008f3e79fea9af15ac4eccd65306bbaa075ba17c4b486e93423' + 'd645817913d5b52e928561b3d6a0e869d8ae5db81b97af91c1ebfc6a8cd2df666c1653e6dc5f91c0a890033a89692f77eaf081c1cae5590446c69a70ea263946' + 'b479a36fe851d79b011548639fba99f57bb0e3baa425d8163c9fd9f9de1cc7cada533997f566fd63cbb072aa184d17428998ca2ccf6b5e23a955042ccaea8139' + '2897d038f0943756ec4816b12b89de30830a1aac25c640b3760cd886d47907e04e537c4823da20373c3981afe248543de0de357dbb8070b845b53890b8ea662f') + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/applied-upstream/0005-vnstat.service-sort-hardening-options.patch || true + rm -v debian/patches/applied-upstream/0006-vnstat.service-add-systemd-hardening-options.patch || true + rm -v debian/patches/debian/drop-ReadWritePaths-from-systemd-service.patch || true + rm -v debian/patches/debian/systemd_user.diff || true + + quilt push -av + fi +} + +build() { + cd "$srcdir"/$pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname + install -Dm0755 examples/vnstat.cgi "$pkgdir"/usr/share/doc/vnstat/examples/vnstat.cgi + + install -Dm0644 "$srcdir"/vnstatd.confd "$pkgdir"/etc/conf.d/vnstatd + install -Dm0755 "$srcdir"/vnstatd.initd "$pkgdir"/etc/init.d/vnstatd + install -Dm0755 "$srcdir"/vnstatd.run "$pkgdir"/etc/sv/vnstatd/run +} diff --git a/vnstat/vnstat.install b/vnstat/vnstat.install new file mode 100644 index 0000000..c0dc52a --- /dev/null +++ b/vnstat/vnstat.install @@ -0,0 +1,34 @@ +post_install(){ + if ! getent group vnstat &>/dev/null; then + groupadd -r vnstat >/dev/null + fi + if ! getent passwd vnstat &>/dev/null; then + useradd -r -g vnstat -G adm -d /var/lib/vnstat -s /bin/nologin vnstat >/dev/null + fi + if ! groups vnstat | grep adm &>/dev/null; then + gpasswd -a vnstat adm >/dev/null + fi + vnstat_shell=$(getent passwd vnstat | cut -d: -f7) + if [ "$vnstat_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin vnstat &>/dev/null + fi + if [[ ! -d /var/lib/vnstat ]]; then + mkdir -p /var/lib/vnstat + fi + chmod 700 /var/lib/vnstat + chown vnstat:vnstat /var/lib/vnstat +} + +post_upgrade(){ + post_install +} + +post_remove(){ + echo "-- You may want to remove /var/lib/vnstat" + if getent passwd vnstat &>/dev/null; then + userdel vnstat >/dev/null + fi + if getent group vnstat &>/dev/null; then + groupdel vnstat >/dev/null + fi +} diff --git a/vnstat/vnstatd.confd b/vnstat/vnstatd.confd new file mode 100644 index 0000000..1790141 --- /dev/null +++ b/vnstat/vnstatd.confd @@ -0,0 +1,7 @@ +# /etc/conf.d/vnstatd: config file for /etc/init.d/vnstatd + +# Adjust scheduling priority on vnstatd (default: 0) +#VNSTATD_NICELEVEL="0" + +# Pass extra options to vnstatd +#VNSTATD_EXTRAOPTS="--config /etc/vnstat.conf" diff --git a/vnstat/vnstatd.initd b/vnstat/vnstatd.initd new file mode 100644 index 0000000..9b71826 --- /dev/null +++ b/vnstat/vnstatd.initd @@ -0,0 +1,38 @@ +#!/sbin/openrc-run +# Copyright 1999-2015 Gentoo Foundation +# Copyright 2020 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +extra_started_commands="reload" + +depend() { + use net +} + +VNSTATD_PIDFILE="${VNSTATD_PIDFILE:-/run/vnstatd/vnstatd.pid}" + +start() { + ebegin "Starting vnstatd" + checkpath -q -d -m 755 -o vnstat:vnstat /run/vnstatd + checkpath -q -d -m 755 -o vnstat:vnstat /var/lib/vnstat + start-stop-daemon --start --quiet \ + --pidfile "${VNSTATD_PIDFILE}" \ + --user vnstat --group vnstat \ + --nicelevel ${VNSTATD_NICELEVEL:-0} \ + --exec /usr/sbin/vnstatd -- \ + -d ${VNSTATD_EXTRAOPTS} -p ${VNSTATD_PIDFILE} + eend $? +} + +stop() { + ebegin "Stopping vnstatd" + start-stop-daemon --stop --quiet \ + --pidfile "${VNSTATD_PIDFILE}" + eend $? +} + +reload() { + ebegin "Reloading vnstatd configuration" + kill -HUP $(cat "${VNSTATD_PIDFILE}") 2>&1 >/dev/null + eend $? +} diff --git a/vnstat/vnstatd.run b/vnstat/vnstatd.run new file mode 100644 index 0000000..ea3a9ba --- /dev/null +++ b/vnstat/vnstatd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec vnstatd -n diff --git a/volumeicon/PKGBUILD b/volumeicon/PKGBUILD new file mode 100644 index 0000000..3b9c87f --- /dev/null +++ b/volumeicon/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=volumeicon +pkgver=0.5.1 +_debver=0.5.1+git20170117 +_debrel=1 +pkgrel=2 +pkgdesc='Volume control for the system tray' +arch=('i686' 'x86_64') +url='https://softwarebakery.com/maato/volumeicon.html' +license=('GPL-3') +depends=('alsa-lib' 'gtk') +makedepends=('quilt' 'intltool') +install=volumeicon.install +source=(https://deb.debian.org/debian/pool/main/v/$pkgname/volumeicon_$_debver.orig.tar.xz + https://deb.debian.org/debian/pool/main/v/$pkgname/volumeicon_$_debver-$_debrel.debian.tar.xz + volumeicon.desktop) +sha512sums=('30661325b7976f9c0087950fcf00efbb0bb43e10fc9949decf88aa2777ac060d5033136c6d4ed668f5f4c212488313d360bd6a36db0aa56b2e6fec60a561d7d9' + '1bb277c95fdf016531d6620abc1c6c13f8e135533bfe3a21f20aeea4a914e82ba1bb323ec7ad775eacd83d73226236409de72061ca891cfd3156aa6608a355cc' + '41c8cb37fea131c73a3340e216cd4f59ee6b4c7a98b7d1b96d5c02fa6584215ed9137483bb0a23181372413f2d41c652f0f53b88cf5f6da48b2a305bc6103d67') + +prepare() { + cd $pkgname-$_debver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + ./autogen.sh +} + +build() { + cd $pkgname-$_debver + ./configure --prefix=/usr --disable-notify + make +} + +package() { + cd $pkgname-$_debver + make DESTDIR="$pkgdir" install + install -Dm644 "${srcdir}/volumeicon.desktop" -t "${pkgdir}/usr/share/applications/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/volumeicon/volumeicon.desktop b/volumeicon/volumeicon.desktop new file mode 100644 index 0000000..d67884a --- /dev/null +++ b/volumeicon/volumeicon.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Volume Icon +Comment=Lightweight volume control for the systray +Exec=volumeicon +Icon=multimedia-volume-control +Type=Application +Terminal=false +StartupNotify=false +Categories=GTK;AudioVideo;Audio;Mixer; diff --git a/volumeicon/volumeicon.install b/volumeicon/volumeicon.install new file mode 100644 index 0000000..582cc86 --- /dev/null +++ b/volumeicon/volumeicon.install @@ -0,0 +1,7 @@ +post_install() { + # See FS#34239 for more information + echo 'If there are problems running volumeicon, try:' + echo 'rm -iv ~/.config/volumeicon/volumeicon' +} + +# vim:set ts=2 sw=2 et: diff --git a/vorbis-tools/PKGBUILD b/vorbis-tools/PKGBUILD new file mode 100644 index 0000000..fd8b95d --- /dev/null +++ b/vorbis-tools/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=vorbis-tools +pkgver=1.4.0 +_debver=1.4.0 +_debrel=11 +pkgrel=1 +pkgdesc='Extra tools for Ogg-Vorbis' +arch=('i686' 'x86_64') +url='https://www.xiph.org/vorbis/' +license=('GPL-2') +depends=('libao' 'libvorbis' 'curl' 'flac') +makedepends=('quilt') +source=("https://downloads.xiph.org/releases/vorbis/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/v/vorbis-tools/vorbis-tools_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('d2473f2e8e6726b5a5083f567797ae42bbb7fa3f26aec3f7b83e641e028c64726299f71a9d75258595a53cf29c18acb84841bcbc39509258d2c8df859e4e3b99' + '78f596427db29608c9529d7651241112d797ab54cab4f86dccf57d419adfddf0c448b564aaf2f00da62425e02a5aa94031c6c0926a42f837463655530ff60a34') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches ./debian + rm -rf "$srcdir"/debian/ + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --without-speex \ + --enable-vcut + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/vorbisgain/PKGBUILD b/vorbisgain/PKGBUILD new file mode 100644 index 0000000..21f90a5 --- /dev/null +++ b/vorbisgain/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=vorbisgain +pkgver=0.37 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Free and libre utility that computes the ReplayGain values for Ogg Vorbis files." +arch=('i686' 'x86_64') +url='https://sjeng.org/vorbisgain.html' +license=('LGPL-2.1') +depends=('libvorbis') +makedepends=('quilt') +source=("https://sjeng.org/ftp/vorbis/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/v/vorbisgain/vorbisgain_${_debver}-${_debrel}.debian.tar.gz") +sha512sums=('67181834e1a0d7c6e1ccd984e2d30ebf1dcdff84caa77f75e5e771de8414904810e966a43852b7184e075d2428fd8b431124835efc370ce6504b8b2756746e04' + '0d699affccfe11d58be1a363ac61be229580bfdb91c0021f5c8c1893bea3d8c3cfddf6bb7f3849f87d33ed410c79c3057480b54534373488f5fa852997568450') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --enable-recursive \ + --mandir=/usr/share/man + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/vsftpd/PKGBUILD b/vsftpd/PKGBUILD new file mode 100644 index 0000000..8ad94c4 --- /dev/null +++ b/vsftpd/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. + +pkgname=vsftpd +pkgver=3.0.3 +_debver=$pkgver +_debrel=12 +pkgrel=2 +pkgdesc="Very Secure FTP daemon" +url='https://security.appspot.com/vsftpd.html' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glibc' 'libressl' 'libcap' 'libnsl' 'libwrap') +makedepends=('quilt') +optdepends=('logrotate') +backup=("etc/vsftpd.conf" + "etc/logrotate.d/vsftpd") +source=(https://security.appspot.com/downloads/${pkgname}-${pkgver}.tar.gz{,.asc} + https://deb.debian.org/debian/pool/main/v/vsftpd/vsftpd_${_debver}-${_debrel}.debian.tar.xz + vsftpd-checkconfig.sh + vsftpd.initd + vsftpd.run) +sha512sums=('5a4410a88e72ecf6f60a60a89771bcec300c9f63c2ea83b219bdf65fd9749b9853f9579f7257205b55659aefcd5dab243eba878dbbd4f0ff8532dd6e60884df7' + 'SKIP' + '2842e6841118ad786dc693c79911929ee0f274af6b6bf1b21303bf74717d992d658f2ca6c9367a080eac104af7716bb49664226696ac601fdd7c88b483e1a531' + 'be34b1c88548dbf443e9178192e1764b90ecc7ae8261324b86854f9739b0e0b1a65a42f626ccfd5bc2068df7c03f08278cdb6fb91c9b0782200153ffac83e718' + '3f0b7191834ff5a2d847fe62c99b5e1773182a3dde263003e0fe4a7b3d958bcedd43a81a73354cd118e6d95f26eccfd20c51767e5ede594cc3070e933e6a31b3' + '491a54975310ee21bb835e7500d320307b409ab22de1a589b468c93f6ee34dcc45d1f5e912c5c64501cffa0f4e34c4de85db782403d24e847f302fabba1c3281') +validpgpkeys=('8660FD3291B184CDBC2F6418AA62EC463C0E751C') # Chris Evans + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + make LINK='' CFLAGS="${CFLAGS} ${CPPFLAGS}" LDFLAGS="${LDFLAGS}" +} + +package() { + cd ${pkgname}-${pkgver} + + install -Dm 755 ${pkgname} -t "${pkgdir}/usr/sbin" + install -dm 755 "${pkgdir}/var/empty" + + install -Dm 644 ${pkgname}.conf "${pkgdir}/etc/${pkgname}.conf" + install -Dm 644 RedHat/vsftpd.log "${pkgdir}/etc/logrotate.d/${pkgname}" + + install -Dm 644 ${pkgname}.8 -t "${pkgdir}/usr/share/man/man8" + install -Dm 644 ${pkgname}.conf.5 -t "${pkgdir}/usr/share/man/man5" + install -Dm 644 BENCHMARKS BUGS Changelog FAQ INSTALL README README.ssl REFS \ + REWARD SPEED TODO TUNING -t "${pkgdir}/usr/share/doc/${pkgname}" + + # services install + install -Dm755 "${srcdir}"/${pkgname}-checkconfig.sh -t "${pkgdir}"/usr/libexec/ + install -Dm755 "${srcdir}"/${pkgname}.initd "${pkgdir}"/etc/init.d/$pkgname + install -Dm755 "${srcdir}"/${pkgname}.run "${pkgdir}"/etc/sv/$pkgname/run + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/vsftpd/vsftpd-checkconfig.sh b/vsftpd/vsftpd-checkconfig.sh new file mode 100644 index 0000000..e448f11 --- /dev/null +++ b/vsftpd/vsftpd-checkconfig.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +VSFTPD_CONF="${VSFTPD_CONF:-/etc/vsftpd.conf}" + +if [ ! -e ${VSFTPD_CONF} ] ; then + echo "Please setup ${VSFTPD_CONF} before starting vsftpd" >&2 + echo "There are sample configurations in /usr/share/doc/vsftpd" >&2 + exit 1 +fi + +if egrep -iq "^ *background *= *yes" "${VSFTPD_CONF}" ; then + echo "${VSFTPD_CONF} must not set background=YES" >&2 + exit 1 +fi + +has_ip=false has_ipv6=false ip_error=true +egrep -iq "^ *listen *= *yes" "${VSFTPD_CONF}" && has_ip=true +egrep -iq "^ *listen_ipv6 *= *yes" "${VSFTPD_CONF}" && has_ipv6=true +if ${has_ip} && ! ${has_ipv6} ; then + ip_error=false +elif ! ${has_ip} && ${has_ipv6} ; then + ip_error=false +fi +if ${ip_error} ; then + echo "${VSFTPD_CONF} must contain listen=YES or listen_ipv6=YES" >&2 + echo "but not both" >&2 + exit 1 +fi + diff --git a/vsftpd/vsftpd.initd b/vsftpd/vsftpd.initd new file mode 100644 index 0000000..cc6cae8 --- /dev/null +++ b/vsftpd/vsftpd.initd @@ -0,0 +1,50 @@ +#!/sbin/openrc-run +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 + +VSFTPD_NAME=${SVCNAME##*.} +if [ -n "${VSFTPD_NAME}" -a "${SVCNAME}" != "vsftpd" ]; then + VSFTPD_PID="/var/run/vsftpd.${VSFTPD_NAME}.pid" + VSFTPD_CONF_DEFAULT="/etc/${VSFTPD_NAME}.conf" +else + VSFTPD_PID="/var/run/vsftpd.pid" + VSFTPD_CONF_DEFAULT="/etc/vsftpd.conf" +fi +VSFTPD_CONF=${VSFTPD_CONF:-${VSFTPD_CONF_DEFAULT}} +VSFTPD_EXEC=${VSFTPD_EXEC:-/usr/sbin/vsftpd} + +depend() { + need net + use dns logger +} + +checkconfig() { + VSFTPD_CONF="${VSFTPD_CONF}" \ + /usr/libexec/vsftpd-checkconfig.sh || return 1 +} + +start() { + checkconfig || return 1 + ebegin "Starting ${SVCNAME}" + start-stop-daemon --start --exec ${VSFTPD_EXEC} \ + --background --make-pidfile --pidfile "${VSFTPD_PID}" \ + -- "${VSFTPD_CONF}" + eend $? +} + +stop() { + ebegin "Stopping ${SVCNAME}" + local retval=0 + if [ -f ${VSFTPD_PID} ]; then + start-stop-daemon --stop --pidfile ${VSFTPD_PID} || retval=1 + pkill --full ${VSFTPD_CONF} + else + ewarn "Couldn't find ${VSFTPD_PID} trying to stop using the config filename ${VSFTPD_CONF}" + pgrep --full ${VSFTPD_CONF} > ${VSFTPD_PID} + start-stop-daemon --stop --pidfile ${VSFTPD_PID} || retval=1 + pkill --full ${VSFTPD_CONF} + fi + eend ${retval} +} + +# vim: ts=4 diff --git a/vsftpd/vsftpd.run b/vsftpd/vsftpd.run new file mode 100644 index 0000000..5ed921b --- /dev/null +++ b/vsftpd/vsftpd.run @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/vsftpd -obackground=no diff --git a/vte-legacy/PKGBUILD b/vte-legacy/PKGBUILD new file mode 100644 index 0000000..4069af9 --- /dev/null +++ b/vte-legacy/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=vte-legacy +pkgver=0.28.2 +pkgrel=2 +pkgdesc="Virtual Terminal Emulator widget for use with GTK+2" +arch=('i686' 'x86_64') +license=('LGPL-2') +url='https://www.gnome.org' +options=('!emptydirs') +provides=('vte') +conflicts=('vte') +depends=('gtk2' 'vte-common') +makedepends=('tauthon-pygtk' 'intltool' 'gobject-introspection' 'gettext-tiny') +source=(https://ftp.gnome.org/pub/GNOME/sources/vte/0.28/vte-$pkgver.tar.xz + make_alt_work.patch + scroll_region.patch + bracketed_paste_mode_fix.patch) +sha512sums=('d6a50481aaa8946cca3779e0b328fef551be534d70366a75385d1f8ead3fcddec57bed85c7d4bc2d9f34546532129e63083aafa33cbb0efcbc7dc9d66e7c45f6' + 'b3a99a4d0c2d8c7612f564bf6f935e4257c4279f9705bce194f09f5448fee488fbfe0e7b15d59d26884dcc4ad440a0111f603c3d8fc6212ef3ab66ef051c0044' + 'af158fa03d2ac54f7f547635ea3ba201e1e4c75048d2ff944d67792b06c8510a0c28ba417afb3c9730e504086605cd231415a7129dff14c1cb25423c984931b0' + '94f140876be9cfe7b62dcd609ebb0e289445641ef3ec5009275aad34e5716ab64d019a304cc7bdd3228d397e2e57a3cb9c5e9b34e8cfadcbf996b87785d844ab') + +prepare() { + cd vte-$pkgver + patch -Np1 -i $srcdir/make_alt_work.patch + patch -Np1 -i $srcdir/scroll_region.patch + patch -Np1 -i $srcdir/bracketed_paste_mode_fix.patch + rm -r doc/reference/html +} +build() { + cd vte-$pkgver + + #warning: type-punning to incomplete type might break strict-aliasing rules + export CFLAGS="$CFLAGS -fno-strict-aliasing" + + PYTHON=/usr/bin/tauthon ./configure --prefix=/usr --sysconfdir=/etc \ + --libexecdir=/usr/lib/vte \ + --localstatedir=/var --disable-static \ + --enable-introspection --with-gtk=2.0 --disable-gnome-pty-helper + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package(){ + cd vte-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/vte-legacy/bracketed_paste_mode_fix.patch b/vte-legacy/bracketed_paste_mode_fix.patch new file mode 100644 index 0000000..c41ca6f --- /dev/null +++ b/vte-legacy/bracketed_paste_mode_fix.patch @@ -0,0 +1,83 @@ +commit 7206376160aac2743a93f70a4726bad4f34fa688 +Author: Fuujuhi +Date: Wed Jul 30 15:52:52 2014 +0200 + + backporting vte bracked paste mode bug patch on v0.28.2-5ubuntu1 + + See https://bugzilla.gnome.org/show_bug.cgi?id=729533 + Patch at https://bugzilla.gnome.org/attachment.cgi?id=279320 + +diff --git a/src/vte-private.h b/src/vte-private.h +index 65d5022..ac1f2d8 100644 +--- a/src/vte-private.h ++++ b/src/vte-private.h +@@ -219,7 +219,6 @@ struct _VteTerminalPrivate { + gboolean sendrecv_mode; /* sendrecv mode */ + gboolean insert_mode; /* insert mode */ + gboolean linefeed_mode; /* linefeed mode */ +- gboolean bracketed_paste_mode; + struct vte_scrolling_region { + int start, end; + } scrolling_region; /* the region we scroll in */ +@@ -274,6 +273,7 @@ struct _VteTerminalPrivate { + gboolean text_modified_flag; + gboolean text_inserted_flag; + gboolean text_deleted_flag; ++ gboolean bracketed_paste_mode; + + /* Scrolling options. */ + gboolean scroll_background; +diff --git a/src/vte.c b/src/vte.c +index c20ee78..dbab6de 100644 +--- a/src/vte.c ++++ b/src/vte.c +@@ -5823,10 +5823,10 @@ static void mark_output_source_invalid(VteTerminal *terminal) + p++; + } + } +- if (terminal->pvt->screen->bracketed_paste_mode) ++ if (terminal->pvt->bracketed_paste_mode) + vte_terminal_feed_child(terminal, "\e[200~", -1); + vte_terminal_feed_child(terminal, paste, length); +- if (terminal->pvt->screen->bracketed_paste_mode) ++ if (terminal->pvt->bracketed_paste_mode) + vte_terminal_feed_child(terminal, "\e[201~", -1); + g_free(paste); + } +@@ -14106,14 +14106,12 @@ static void mark_output_source_invalid(VteTerminal *terminal) + pvt->normal_screen.linefeed_mode = FALSE; + pvt->normal_screen.origin_mode = FALSE; + pvt->normal_screen.reverse_mode = FALSE; +- pvt->normal_screen.bracketed_paste_mode = FALSE; + pvt->alternate_screen.scrolling_restricted = FALSE; + pvt->alternate_screen.sendrecv_mode = TRUE; + pvt->alternate_screen.insert_mode = FALSE; + pvt->alternate_screen.linefeed_mode = FALSE; + pvt->alternate_screen.origin_mode = FALSE; + pvt->alternate_screen.reverse_mode = FALSE; +- pvt->alternate_screen.bracketed_paste_mode = FALSE; + pvt->cursor_visible = TRUE; + /* Reset the encoding. */ + vte_terminal_set_encoding(terminal, NULL); +@@ -14143,6 +14141,8 @@ static void mark_output_source_invalid(VteTerminal *terminal) + pvt->mouse_last_y = 0; + /* Clear modifiers. */ + pvt->modifiers = 0; ++ /* Reset miscellaneous stuff. */ ++ pvt->bracketed_paste_mode = FALSE; + /* Cause everything to be redrawn (or cleared). */ + vte_terminal_maybe_scroll_to_bottom(terminal); + _vte_invalidate_all(terminal); +diff --git a/src/vteseq.c b/src/vteseq.c +index 209522f..8c8d43c 100644 +--- a/src/vteseq.c ++++ b/src/vteseq.c +@@ -737,7 +737,7 @@ + GINT_TO_POINTER(TRUE), + NULL, NULL}, + /* 2004: Bracketed paste mode. */ +- {2004, &terminal->pvt->screen->bracketed_paste_mode, NULL, NULL, ++ {2004, &terminal->pvt->bracketed_paste_mode, NULL, NULL, + GINT_TO_POINTER(FALSE), + GINT_TO_POINTER(TRUE), + NULL, NULL,}, diff --git a/vte-legacy/make_alt_work.patch b/vte-legacy/make_alt_work.patch new file mode 100644 index 0000000..65c3ddf --- /dev/null +++ b/vte-legacy/make_alt_work.patch @@ -0,0 +1,50 @@ +From a9d6a34708f846952f423d078397352858f7b1a4 Mon Sep 17 00:00:00 2001 +From: Christian Persch +Date: Sat, 12 May 2012 18:48:05 +0200 +Subject: [PATCH] keymap: Treat ALT as META + +https://bugzilla.gnome.org/show_bug.cgi?id=663779 +--- + src/vte.c | 23 ++++++++++++++--------- + 1 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/src/vte.c b/src/vte.c +index dd27e9a..0657921 100644 +--- a/src/vte.c ++++ b/src/vte.c +@@ -5170,19 +5170,24 @@ static void + vte_terminal_read_modifiers (VteTerminal *terminal, + GdkEvent *event) + { ++ GdkKeymap *keymap; + GdkModifierType modifiers; + + /* Read the modifiers. */ +- if (gdk_event_get_state((GdkEvent*)event, &modifiers)) { +- GdkKeymap *keymap; +-#if GTK_CHECK_VERSION (2, 90, 8) +- keymap = gdk_keymap_get_for_display(gdk_window_get_display(((GdkEventAny*)event)->window)); +-#else +- keymap = gdk_keymap_get_for_display(gdk_drawable_get_display(((GdkEventAny*)event)->window)); ++ if (!gdk_event_get_state((GdkEvent*)event, &modifiers)) ++ return; ++ ++ keymap = gdk_keymap_get_for_display(gdk_window_get_display(((GdkEventAny*)event)->window)); ++ ++ gdk_keymap_add_virtual_modifiers (keymap, &modifiers); ++ ++#if 1 ++ /* HACK! Treat ALT as META; see bug #663779. */ ++ if (modifiers & GDK_MOD1_MASK) ++ modifiers |= VTE_META_MASK; + #endif +- gdk_keymap_add_virtual_modifiers (keymap, &modifiers); +- terminal->pvt->modifiers = modifiers; +- } ++ ++ terminal->pvt->modifiers = modifiers; + } + + /* Read and handle a keypress event. */ +-- +1.7.5.1.217.g4e3aa.dirty \ No newline at end of file diff --git a/vte-legacy/scroll_region.patch b/vte-legacy/scroll_region.patch new file mode 100644 index 0000000..9e3e83b --- /dev/null +++ b/vte-legacy/scroll_region.patch @@ -0,0 +1,67 @@ +Index: vte-0.26.0/src/vte.c +=================================================================== +--- vte-0.26.0.orig/src/vte.c 2010-11-30 23:04:53.000000000 -0800 ++++ vte-0.26.0/src/vte.c 2010-12-07 20:05:07.865548000 -0800 +@@ -3862,6 +3862,7 @@ vte_terminal_process_incoming(VteTermina + long wcount, start, delta; + gboolean leftovers, modified, bottom, again; + gboolean invalidated_text; ++ gboolean in_scroll_region; + GArray *unichars; + struct _vte_incoming_chunk *chunk, *next_chunk, *achunk = NULL; + +@@ -3881,6 +3882,10 @@ vte_terminal_process_incoming(VteTermina + cursor = screen->cursor_current; + cursor_visible = terminal->pvt->cursor_visible; + ++ in_scroll_region = screen->scrolling_restricted ++ && (screen->cursor_current.row >= (screen->insert_delta + screen->scrolling_region.start)) ++ && (screen->cursor_current.row <= (screen->insert_delta + screen->scrolling_region.end)); ++ + /* We should only be called when there's data to process. */ + g_assert(terminal->pvt->incoming || + (terminal->pvt->pending->len > 0)); +@@ -3979,6 +3984,8 @@ skip_chunk: + * points to the first character which isn't part of this + * sequence. */ + if ((match != NULL) && (match[0] != '\0')) { ++ gboolean new_in_scroll_region; ++ + /* Call the right sequence handler for the requested + * behavior. */ + _vte_terminal_handle_sequence(terminal, +@@ -3989,12 +3996,20 @@ skip_chunk: + start = (next - wbuf); + modified = TRUE; + +- /* if we have moved during the sequence handler, restart the bbox */ ++ new_in_scroll_region = screen->scrolling_restricted ++ && (screen->cursor_current.row >= (screen->insert_delta + screen->scrolling_region.start)) ++ && (screen->cursor_current.row <= (screen->insert_delta + screen->scrolling_region.end)); ++ ++ delta = screen->scroll_delta; /* delta may have changed from sequence. */ ++ ++ /* if we have moved greatly during the sequence handler, or moved into a scroll_region ++ * from outside it, restart the bbox */ + if (invalidated_text && +- (screen->cursor_current.col > bbox_bottomright.x + VTE_CELL_BBOX_SLACK || +- screen->cursor_current.col < bbox_topleft.x - VTE_CELL_BBOX_SLACK || +- screen->cursor_current.row > bbox_bottomright.y + VTE_CELL_BBOX_SLACK || +- screen->cursor_current.row < bbox_topleft.y - VTE_CELL_BBOX_SLACK)) { ++ ((new_in_scroll_region && !in_scroll_region) || ++ (screen->cursor_current.col > bbox_bottomright.x + VTE_CELL_BBOX_SLACK || ++ screen->cursor_current.col < bbox_topleft.x - VTE_CELL_BBOX_SLACK || ++ screen->cursor_current.row > bbox_bottomright.y + VTE_CELL_BBOX_SLACK || ++ screen->cursor_current.row < bbox_topleft.y - VTE_CELL_BBOX_SLACK))) { + /* Clip off any part of the box which isn't already on-screen. */ + bbox_topleft.x = MAX(bbox_topleft.x, 0); + bbox_topleft.y = MAX(bbox_topleft.y, delta); +@@ -4014,6 +4029,8 @@ skip_chunk: + bbox_bottomright.x = bbox_bottomright.y = -G_MAXINT; + bbox_topleft.x = bbox_topleft.y = G_MAXINT; + } ++ ++ in_scroll_region = new_in_scroll_region; + } else + /* Second, we have a NULL match, and next points to the very + * next character in the buffer. Insert the character which diff --git a/vte/PKGBUILD b/vte/PKGBUILD new file mode 100644 index 0000000..834af67 --- /dev/null +++ b/vte/PKGBUILD @@ -0,0 +1,74 @@ +# Maintainer: Jesus E. + +# Based on vte3 package + +pkgbase=vte +pkgname=(vte vte-common) +pkgver=0.62.3 +_debver=0.62.3 +_debrel=1 +pkgrel=1 +pkgdesc="Virtual Terminal Emulator widget" +url="https://wiki.gnome.org/Apps/Terminal/VTE" +arch=(i686 x86_64) +license=(GPL-3) +depends=(gtk pcre2 gnutls fribidi) +makedepends=(gobject-introspection vala gperf meson quilt) +source=("https://gitlab.gnome.org/GNOME/$_pkgbase/-/archive/$pkgver/$pkgbase-$pkgver.tar.bz2" + "https://deb.debian.org/debian/pool/main/v/vte2.91/vte2.91_$_debver-$_debrel.debian.tar.xz") +sha512sums=('7a6c217bc7609fb49f973e993802c9b5c580a60a3f6ea248518b008a6b98c630f8b88c71c766f1376e52f659667f00532b36ac538a1fedf6f53f7b6c02566ca2' + '1373ee8e75735fb3c8dd384f54806baa107e05eb119b4a15cbdd8c6f21d03f2330a68d718f6d092f9e99e9dccc68edf83385b7a7abacf675b5b2536ca00a64e9') + +prepare() { + cd $pkgbase-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + hyperbola-meson $pkgbase-$pkgver build -D docs=false -D b_lto=false -D _systemd=false + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package_vte() { + depends+=(vte-common) + replaces=(vte3) + conflicts=(vte3) + provides=(vte3 vte2.91) + + DESTDIR="$pkgdir" meson install -C build + + # split vte-common + mkdir -p vte-common/{etc,usr/libexec} + mv "$pkgdir"/etc/profile.d vte-common/etc + mv "$pkgdir"/usr/libexec/vte-urlencode-cwd vte-common/usr/libexec + rmdir -p --ignore-fail-on-non-empty "$pkgdir"/{etc,usr/libexec} + + # license + install -Dm644 $pkgbase-$pkgver/COPYING.GPL3 -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_vte-common() { + pkgdesc="Files shared by VTE libraries" + depends=(sh) + + mv vte-common/* "$pkgdir" + + # license + install -Dm644 $pkgbase-$pkgver/COPYING.GPL3 -t "$pkgdir"/usr/share/licenses/$pkgname +} + +# vim:set sw=2 et: diff --git a/vulscan/PKGBUILD b/vulscan/PKGBUILD new file mode 100644 index 0000000..89efcb5 --- /dev/null +++ b/vulscan/PKGBUILD @@ -0,0 +1,20 @@ +# Maintainer: Jesus E. + +pkgname=vulscan +pkgver=2.1 +pkgrel=3 +pkgdesc='A module which enhances nmap to a vulnerability scanner' +url='https://www.computec.ch/projekte/vulscan/' +arch=('any') +license=('GPL-3') +depends=('nmap-legacy') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/scipag/$pkgname/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('678edd3a147697b841e9b8810dbb2d460fc3e127ef8717bd96e420402c4dea087afee398ee4fe2d6dcb7462553544a21ece4442a098a7f1c3be0a8d91c18f19f') + +package() { + cd $pkgname-$pkgver + install -dm755 "$pkgdir/usr/share/nmap/scripts/vulscan" + cp -r *.csv vulscan.nse utilities "$pkgdir/usr/share/nmap/scripts/vulscan" + rm -rf "$pkgdir/usr/share/nmap/scripts/vulscan/utilities/docker/" + install -Dm644 COPYING.TXT -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/vym/PKGBUILD b/vym/PKGBUILD new file mode 100644 index 0000000..8ba1270 --- /dev/null +++ b/vym/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=vym +pkgver=2.6.11 +_debver=$pkgver +_debrel=3 +pkgrel=1 +pkgdesc="A free and libre mindmapping tool" +arch=('i686' 'x86_64') +url='http://www.insilmaril.de/vym/' +license=('GPL-2') +depends=('qt-svg' 'desktop-file-utils' 'zip' 'unzip') +makedepends=('qt-tools' 'quilt') +source=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/v/vym/vym_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('d6ae8346152ab10e12a68f25b4c13c4d40e1a8471df348ba0df9c05bdbe60f86a97912fcca268ec510246fe655a7dcc2d2e9a9332daee09a2a7dda7d6f880aa1' + '23654981380768d9d76371fb42e56974b44e1c6cf6e00f15dc3fbfa6e717db62bda93cab6fe193cd672446a15834232a7140cc3e9022441675119511a1ceeb86') + +prepare() { + cd "${srcdir}"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd lang + lrelease *.ts +} + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + qmake PREFIX=/usr/share NO_DBUS=yes + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + # install files + make INSTALL_ROOT="${pkgdir}" install + + # fix executable path + mv "${pkgdir}"/usr/share/bin "${pkgdir}"/usr/bin + + # install documentation + install -Dm644 "${srcdir}"/$pkgname-$pkgver/doc/$pkgname.1.gz "${pkgdir}"/usr/share/man/man1/$pkgname.1.gz + install -Dm644 "${srcdir}"/$pkgname-$pkgver/doc/$pkgname.pdf "${pkgdir}"/usr/share/doc/$pkgname/$pkgname.pdf + rm -rf "${pkgdir}"/usr/share/doc/packages + + # .desktop and icon file + install -Dm644 debian/$pkgname.desktop -t "${pkgdir}"/usr/share/applications + install -Dm644 "${pkgdir}"/usr/share/vym/icons/$pkgname.png "${pkgdir}"/usr/share/pixmaps/$pkgname.png + + # license + install -Dm644 LICENSE.txt -t "${pkgdir}"/usr/share/licenses/$pkgname +} diff --git a/waf/PKGBUILD b/waf/PKGBUILD new file mode 100644 index 0000000..e2fc119 --- /dev/null +++ b/waf/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +pkgname=waf +pkgver=2.0.22 +pkgrel=1 +pkgdesc='General-purpose build system modelled after Scons' +url="https://waf.io/" +arch=('any') +license=('Modified-BSD') +depends=('python') +makedepends=('unzip') +provides=('python-waf') +source=("https://waf.io/${pkgname}-${pkgver}.tar.bz2"{,.asc}) +sha512sums=('a3a275fd4c81c7b7385c2da001f3924d272105b8f33839265ebbb38708051b7cb13b9b9019e84325707d04513de0c13b032b1ad21458aec6586d10df4ed8d5f5' + 'SKIP') +validpgpkeys=('0B3972B2D9E32EAB423D2E0F22BE0C62FFBFA548') # Thomas Nagy + +prepare() { + local _py_ver=$(python3 -c "import sys; print(str(sys.version_info.major)+'.'+str(sys.version_info.minor))") + cd "$pkgname-$pkgver" + # make waf find its waflib + sed -e "/test(i/ s|dirname|'python${_py_ver}/site-packages/waf'|" -i waf-light + # license needs to be extracted: + # https://gitlab.com/ita1024/waf/issues/2251 + head -n 30 waf | tail -n 28 | sed -e 's/# //g; s/"""//g' > LICENSE +} + +build() { + cd "$pkgname-$pkgver" + ./waf-light \ + configure --prefix=/usr \ + build --make-waf + + # removing compiled in vendored library from executable + sed -i '/^#==>$/,/^#<==$/d' waf +} + +package() { + local _py_ver=$(python3 -c "import sys; print(str(sys.version_info.major)+'.'+str(sys.version_info.minor))") + cd "$pkgname-$pkgver" + install -vDm 755 waf -t "$pkgdir/usr/bin" + install -vDm 644 wscript -t "$pkgdir/usr/share/$pkgname" + + # installing, byte-compiling waflib and stripping pkgdir from it + install -vDm 644 waflib/*.py \ + -t "${pkgdir}/usr/lib/python${_py_ver}/site-packages/waf/waflib" + install -vDm 644 waflib/Tools/*.py \ + -t "${pkgdir}/usr/lib/python${_py_ver}/site-packages/waf/waflib/Tools" + install -vDm 644 waflib/extras/*.py \ + -t "${pkgdir}/usr/lib/python${_py_ver}/site-packages/waf/waflib/extras" + python -m compileall -d "/usr/lib/python${_py_ver}" \ + "${pkgdir}/usr/lib/python${_py_ver}" + python -O -m compileall -d "/usr/lib/python${_py_ver}" \ + "${pkgdir}/usr/lib/python${_py_ver}" + install -vDm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" +} +# vim:set ts=2 sw=2 et: diff --git a/warmux/PKGBUILD b/warmux/PKGBUILD new file mode 100644 index 0000000..398caf1 --- /dev/null +++ b/warmux/PKGBUILD @@ -0,0 +1,76 @@ +# Maintainer: Jesus E. + +pkgname=warmux +_pkgname=$pkgname-libre +pkgver=11.04.1 +_debver=$pkgver +_debrel=4 +pkgrel=4 +pkgdesc="Free and libre turn-based artillery game (formerly known as Wormux)" +arch=('i686' 'x86_64') +url='https://github.com/a-team/wormux/' +license=('GPL-2' 'Expat' 'Modified-BSD' 'Apache-2.0') +depends=('libxml++' 'sdl_image' 'sdl_gfx' 'sdl_ttf' 'sdl_mixer' 'sdl_net' 'curl' 'gcc-libs' 'libxml2' 'fribidi') +makedepends=('quilt') +groups=('games') +mksource=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/w/warmux/warmux_${pkgver}+repack2.orig.tar.bz2") +source=("https://repo.hyperbola.info:50000/sources/${_pkgname}/${_pkgname}-${pkgver}.tar.gz"{,.sig} + "https://deb.debian.org/debian/pool/main/w/warmux/warmux_${_debver}+repack2-${_debrel}.debian.tar.xz" + "https://github.com/a-team/wormux/raw/master/data/font/Ubuntu-R.ttf" + "libre.patch") +mksha512sums=('8a992eb1dea7a2bb47deaaa39c06f64b74937901d9f9dddbc34186962192dd4430e0020585d7934ebc269def33c2e4bf659cb66a29c1cb3f548f148711f293b7') +sha512sums=('fa3db8c4ff616b73aa8ce630374877f16e205581cceb6b03be0a1a8107c9702d6a5e00b8eaf7a6ff4e90f7533c94583c399d051d3b29a7c7902223ba70a719be' + 'SKIP' + '813908786336fb2c89472f160800694ecee2d7a84851dfd1354db6527be0999561e66316017ebba186b85a4990a8f28b78342bdb9d67f3eaf4a8c57e8b750d9f' + '9dbd7ae41e5f546e4c78c45cf0ba5936fe13af6c97c7e7488c951d57f21d2b534ad97436b39dcd3bcd3ad2c91b247637f1dedba7347742554848fa7a45846ff0' + '12886897edffab61a962a2decf72cb5e4bec41e182f94beef841dc6fda245f4b9b5a038c6ed0e82729e68b5b79db68ac2f708e3110d18f916848335014fed2c1') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +mksource() { + mv $pkgname-$pkgver+repack2 $pkgname-$pkgver + cd $pkgname-$pkgver + + # remove non-free data + rm -rf data/team/{beastie,bugzilla,firefox,hexley,php,snort,spip,suse,thunderbird,workrave} +} + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/libre.patch + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --bindir=/usr/games \ + --with-datadir-name=/usr/share/games/$pkgname \ + --enable-servers \ + --enable-fribidi + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # fix missing data + cp $srcdir/*.ttf "$pkgdir"/usr/share/games/$pkgname/font/ + + # correct icon + mv "${pkgdir}/usr/share/pixmaps/${pkgname}_128x128.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png" + + # install license + install -Dm644 debian/copyright COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/warmux/libre.patch b/warmux/libre.patch new file mode 100644 index 0000000..5cdeb8e --- /dev/null +++ b/warmux/libre.patch @@ -0,0 +1,151 @@ +--- a/data/team/gnu/team.xml 1990-01-01 01:00:00.000000000 +0100 ++++ b/data/team/gnu/team.xml 2024-02-01 23:21:15.926808422 +0100 +@@ -6,16 +6,15 @@ + + + +- +- +- +- ++ ++ ++ ++ + +- ++ + +- ++ + +- + + + +--- a/data/team/konqi/team.xml 1990-01-01 01:00:00.000000000 +0100 ++++ b/data/team/konqi/team.xml 2024-02-01 23:18:24.532708967 +0100 +@@ -6,20 +6,20 @@ + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +--- a/data/team/pidgin/team.xml 1990-01-01 01:00:00.000000000 +0100 ++++ b/data/team/pidgin/team.xml 2024-02-01 23:20:30.085998956 +0100 +@@ -6,22 +6,18 @@ + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +--- a/src/menu/options_menu.cpp 1990-01-01 01:00:00.000000000 +0100 ++++ b/src/menu/options_menu.cpp 2024-02-02 00:06:12.861102656 +0100 +@@ -242,11 +242,6 @@ + /* Misc options */ + Box * misc_options = new GridBox(3, 3, 0, false); + +- opt_updates = +- new PictureTextCBox(_("Check updates online?"), +- "menu/ico_update", option_size); +- misc_options->AddWidget(opt_updates); +- + #ifndef HAVE_TOUCHSCREEN + opt_lefthanded_mouse = + new PictureTextCBox(_("Left-handed mouse?"), +@@ -377,7 +372,6 @@ + #endif + + #if USE_MISC_TAB +- opt_updates->SetValue(config->GetCheckUpdates()); + # ifndef HAVE_TOUCHSCREEN + opt_lefthanded_mouse->SetValue(config->GetLeftHandedMouse()); + opt_scroll_on_border->SetValue(config->GetScrollOnBorder()); +@@ -436,7 +430,6 @@ + + // Misc options + #if USE_MISC_TAB +- config->SetCheckUpdates(opt_updates->GetValue()); + # ifndef HAVE_TOUCHSCREEN + config->SetLeftHandedMouse(opt_lefthanded_mouse->GetValue()); + config->SetScrollOnBorder(opt_scroll_on_border->GetValue()); +--- a/src/menu/teams_selection_box.h 1990-01-01 01:00:00.000000000 +0100 ++++ b/src/menu/teams_selection_box.h 2024-02-02 00:55:50.173676596 +0100 +@@ -30,7 +30,7 @@ + class SpinButtonWithPicture; + class TeamBox; + +-const uint MAX_NB_TEAMS=8; ++const uint MAX_NB_TEAMS=6; + + class TeamScrollBox : public ScrollBox + { +--- a/src/game/game_mode.cpp 1990-01-01 01:00:00.000000000 +0100 ++++ b/src/game/game_mode.cpp 2024-08-04 22:14:13.129868508 +0200 +@@ -43,7 +43,7 @@ + { + rules = "none"; + nb_characters = 6; +- max_teams = 8; ++ max_teams = 6; + duration_turn = 60; + duration_move_player = 3; + duration_exchange_player = 2; diff --git a/warzone2100-legacy/PKGBUILD b/warzone2100-legacy/PKGBUILD new file mode 100644 index 0000000..a6f2f3d --- /dev/null +++ b/warzone2100-legacy/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +_realpkgname=warzone2100 +pkgname=$_realpkgname-legacy +pkgver=2.3.9 +pkgrel=4 +pkgdesc="3D realtime strategy game on a future Earth (legacy-version)" +url='https://sourceforge.net/projects/warzone2100' +arch=('i686' 'x86_64') +license=('GPL-2' 'Original-BSD' 'Modified-BSD' 'Public-Domain' 'CC-BY-SA-3.0') +depends=('sdl' 'openal' 'libpng' 'libvorbis' 'libtheora' 'physfs' 'quesoglc' 'popt' 'ttf-dejavu') +makedepends=('gawk' 'bison' 'flex' 'zip' 'unzip' 'asciidoc') +groups=('games') +source=("https://sourceforge.net/projects/warzone2100/files/archives/unsupported/Warzone2100-2.3/${pkgver}/${_realpkgname}-${pkgver}.tar.gz" + "https://sourceforge.net/projects/warzone2100/files/warzone2100/Videos/low-quality-en/sequences.wz" + "fix-build.patch") +sha512sums=('3af34969e701e089886a228f7e2c33b61d763adcfebe6f8f0ac3cdb24ed133173dbf051c544e12e74f278b7193f4cbc79bb1df2d1a974f8d03575557695a8662' + 'd7fab931af53dbdf33d560544984fcb332318c1e122525550c2d5f01ec5726e28d98d8f2905c09959e59fa1fdcbf0986f0fc18f80d016eaaf44938dfef6052d2' + '4254c9b9826e1ecffcbbc858120179f2c495d4be8619af2094adfced775294d6cf677266e914571993cf8da6a4728718685ebeaaaf3295c41a281a74518720a9') + +build() { + cd ${_realpkgname}-${pkgver} + + ./configure LIBS="-lvorbis" \ + --prefix=/usr \ + --bindir=/usr/games \ + --datadir=/usr/share/games \ + --with-distributor="Hyperbola" + + # additional fixes + patch -Np1 -i ${srcdir}/fix-build.patch + + make +} + +package() { + cd ${_realpkgname}-${pkgver} + + # package-preparation, being FHS-compliant + make DESTDIR=${pkgdir} PREFIX="/usr" BINDIR="/usr/games" DATADIR="/usr/share/games" install + + # correcting wrong folder-locations + mv "${pkgdir}/usr/share/games/applications" "${pkgdir}/usr/share/" + mv "${pkgdir}/usr/share/games/icons" "${pkgdir}/usr/share/" + + # additional data + install -Dm644 "${srcdir}/sequences.wz" -t "${pkgdir}/usr/share/games/${_realpkgname}" + + # license + install -Dm644 "${srcdir}/${_realpkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm644 "${srcdir}/${_realpkgname}-${pkgver}/COPYING.NONGPL" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/warzone2100-legacy/fix-build.patch b/warzone2100-legacy/fix-build.patch new file mode 100644 index 0000000..e0f34af --- /dev/null +++ b/warzone2100-legacy/fix-build.patch @@ -0,0 +1,87 @@ +--- a/build_tools/autorevision/autorevision.cpp 2011-10-23 22:05:12.000000000 +0200 ++++ b/build_tools/autorevision/autorevision.cpp 2021-06-16 20:25:30.037820011 +0200 +@@ -635,7 +635,7 @@ + + const string cwd(GetWorkingDir()); + if (!ChangeDir(_workingDir)) +- return false; ++ return result; + + set_env("LANG", "C"); + set_env("LC_ALL", "C"); +@@ -645,7 +645,7 @@ + ChangeDir(cwd); + + if (!process) +- return false; ++ return result; + + char buf[1024]; + if (fgets(buf, sizeof(buf), process)) +--- a/lib/ivis_opengl/piedraw.c 2011-10-23 22:05:14.000000000 +0200 ++++ b/lib/ivis_opengl/piedraw.c 2025-01-09 17:19:47.927557356 +0100 +@@ -648,53 +648,21 @@ + op_depth_pass_back = GL_DECR_WRAP_EXT; + } + +- // generic 1-pass version +- if (GLEE_EXT_stencil_two_side) +- { +- glEnable(GL_STENCIL_TEST_TWO_SIDE_EXT); +- glDisable(GL_CULL_FACE); +- glStencilMask(~0); +- glActiveStencilFaceEXT(GL_BACK); +- glStencilOp(GL_KEEP, GL_KEEP, op_depth_pass_back); +- glStencilFunc(GL_ALWAYS, 0, ~0); +- glActiveStencilFaceEXT(GL_FRONT); +- glStencilOp(GL_KEEP, GL_KEEP, op_depth_pass_front); +- glStencilFunc(GL_ALWAYS, 0, ~0); +- +- pie_ShadowDrawLoop(); +- +- glDisable(GL_STENCIL_TEST_TWO_SIDE_EXT); +- } +- // check for ATI-specific 1-pass version +- else if (GLEE_ATI_separate_stencil) +- { +- glDisable(GL_CULL_FACE); +- glStencilMask(~0); +- glStencilOpSeparateATI(GL_BACK, GL_KEEP, GL_KEEP, op_depth_pass_back); +- glStencilOpSeparateATI(GL_FRONT, GL_KEEP, GL_KEEP, op_depth_pass_front); +- glStencilFunc(GL_ALWAYS, 0, ~0); +- +- pie_ShadowDrawLoop(); +- } +- // fall back to default 2-pass version +- else +- { +- glStencilMask(~0); +- glStencilFunc(GL_ALWAYS, 0, ~0); +- glEnable(GL_CULL_FACE); ++ glStencilMask(~0); ++ glStencilFunc(GL_ALWAYS, 0, ~0); ++ glEnable(GL_CULL_FACE); + +- // Setup stencil for front-facing polygons +- glCullFace(GL_BACK); +- glStencilOp(GL_KEEP, GL_KEEP, op_depth_pass_front); ++ // Setup stencil for front-facing polygons ++ glCullFace(GL_BACK); ++ glStencilOp(GL_KEEP, GL_KEEP, op_depth_pass_front); + +- pie_ShadowDrawLoop(); ++ pie_ShadowDrawLoop(); + +- // Setup stencil for back-facing polygons +- glCullFace(GL_FRONT); +- glStencilOp(GL_KEEP, GL_KEEP, op_depth_pass_back); ++ // Setup stencil for back-facing polygons ++ glCullFace(GL_FRONT); ++ glStencilOp(GL_KEEP, GL_KEEP, op_depth_pass_back); + +- pie_ShadowDrawLoop(); +- } ++ pie_ShadowDrawLoop(); + + glEnable(GL_CULL_FACE); + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); diff --git a/wavegain/PKGBUILD b/wavegain/PKGBUILD new file mode 100644 index 0000000..c3b5c79 --- /dev/null +++ b/wavegain/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=wavegain +_realname=WaveGain +pkgver=1.3.1 +pkgrel=1 +pkgdesc="A command line tool to normalize sound files" +arch=('i686' 'x86_64') +url='http://rarewares.org/others.php' +license=('LGPL-2.1') +depends=('libsndfile') +source=(http://www.rarewares.org/files/others/$pkgname-${pkgver}srcs.zip) +sha512sums=('6ce78c3fd238d49f47df5108c050f7be222778ab4cc8cbe7aeef518a0f925950c527c513a38d8c044b88157e22e581b496d9415f2c76f71010a412789165dd59') + +build() { + cd "$srcdir/$_realname-$pkgver" + gcc ${LDFLAGS} ${CFLAGS} *.c -o wavegain -DHAVE_CONFIG_H -lm + +} + +package() { + cd "$srcdir/$_realname-$pkgver" + install -Dm755 "$srcdir/$_realname-$pkgver/wavegain" "$pkgdir/usr/bin/wavegain" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/wavpack/PKGBUILD b/wavpack/PKGBUILD new file mode 100644 index 0000000..cafe375 --- /dev/null +++ b/wavpack/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=wavpack +pkgver=5.4.0 +pkgrel=1 +pkgdesc="Audio compression format with lossless, lossy and hybrid compression modes" +arch=('i686' 'x86_64') +url="http://www.wavpack.com/" +license=('Modified-BSD') +depends=('glibc') +source=(https://github.com/dbry/WavPack/releases/download/$pkgver/$pkgname-$pkgver.tar.xz) +sha512sums=('de4e75539c9b949d22f39ab73721c8a4ee7c38ff08835aa28b1d56bea08c332bcb601a54998efe520f3653a2e29c73dcfd716ad19707bb2815403786d9ed9c11') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --disable-asm + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/wbar/PKGBUILD b/wbar/PKGBUILD new file mode 100644 index 0000000..8a1342a --- /dev/null +++ b/wbar/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=wbar +pkgver=2.3.4 +_debver=$pkgver +_debrel=13 +pkgrel=2 +pkgdesc="Free software light and fast launch bar" +arch=('i686' 'x86_64') +url='https://github.com/rodolf0/wbar' +license=('GPL-3') +depends=('libx11' 'imlib2' 'gcc-libs' 'gtk2' 'libglade') +makedepends=('quilt' 'intltool') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/w/${pkgname}/${pkgname}_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/w/${pkgname}/${pkgname}_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('07f3484bd071761d57ef1172c56b30980eef9ce2ee65d1fc21ea20c631a1da1d88c1b8a9e1a1fca0e5f18e7bf1c5697c349a543d72966ce71ff53d7e921147b3' + '7509998879a72c7854ec3481ab125c8d57cda1f1542bd1941a7804b0712215b54cde604e2de577839102a38180eedd105c231b93a7c7ec4951481b75c59efec4') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/01_change_initial_wbar_config || true + rm -v debian/patches/autoconf-2.70.patch || true + rm -v debian/patches/configure.ac.patch || true + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + CFLAGS=-Wno-error CXXFLAGS=-Wno-error ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="${pkgdir}" PREFIX="/usr" install + + # correct package-structure + rm -rf "${pkgdir}"/etc/bash_completion.d + mkdir -p "${pkgdir}"/usr/share/applications/ + mv "${pkgdir}"/etc/wbar.d/wbar.desktop "${pkgdir}"/usr/share/applications/ + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/webkitgtk/PKGBUILD b/webkitgtk/PKGBUILD new file mode 100644 index 0000000..27226a9 --- /dev/null +++ b/webkitgtk/PKGBUILD @@ -0,0 +1,88 @@ +# Maintainer: Jesus E. + +pkgname=webkitgtk +_pkgname=webkit2gtk +pkgver=2.32.1 +_debver=$pkgver +_debrel=2 +pkgrel=8 +pkgdesc="Web content engine for GTK" +url='https://webkitgtk.org' +arch=(i686 x86_64) +# WebCore uses LGPL-2.1, LGPL-2 or Simplified-BSD +# JavaScriptCore uses LGPL-2 +# WebDriver, WebKit and WebInspectorUI uses Simplified-BSD +# builtin angle library uses Clear-BSD +# builtin xdgmime library uses LGPL-2 or AFL-2.0 +# other pieces of code uses Unicode, Modified-BSD, Simplified-BSD and Expat +# unused tools (like skeletons and m4sugar) uses GPL-3 and GPL-2 +license=(LGPL-2.1) +# this package contains builtin libraries, like: +# angle and xdgmime, it require patch to separate it +# disabled builtin libraries, are: capstone, gtest and libwebrtc +depends=(enchant gperf gst-plugins-bad gst-plugins-base gtk harfbuzz-icu hyphen libxslt libxt libsoup sqlite) +optdepends=('gobject-introspection: gir bindings') +makedepends=(cmake gobject-introspection python quilt ruby ninja) +provides=($_pkgname) +conflicts=($_pkgname) +replaces=($_pkgname) +source=(https://webkitgtk.org/releases/webkitgtk-$pkgver.tar.xz{,.asc} + https://repo.hyperbola.info:50000/sources/$_pkgname/${_pkgname}_$_debver-$_debrel.debian.tar.xz{,.sig} + remove-libwebp-support.patch) +sha512sums=('ff49522c585d3c5c9b88c4176673aebfdf7f2a127d7bc4007008a66c493476ae6551189865e4f0f330a7b332a438b6c951bf1a4c21cd0acf69b7051903d24843' + 'SKIP' + '5dbe43329e967517674837b751eeedfbee70aebaf73525d72f8a87190117a64318fc6978f06df1c288c1370781d60e05476a533a0c1d5a469f92a7c320dee96c' + 'SKIP' + '63fb2771d0683aba736c65463881636c092934d132f12a87be09db58068e188b95cd2e12ff40ec3adf3d8f3bf49f30f1203034e90ce17814456d0697a108b967') +validpgpkeys=('D7FCF61CF9A2DEAB31D81BD3F3D322D0EC4582C3' # Carlos Garcia Campos + '5AA3BC334FD7E3369E7C77B291C559DBE4C9123B' # Adrián PĂ©rez de Castro + 'C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/remove-libwebp-support.patch +} + +build() { + CFLAGS+=' -g1' + CXXFLAGS+=' -g1' + + cmake -S $pkgname-$pkgver -B build -G Ninja \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=lib \ + -D CMAKE_INSTALL_LIBEXECDIR=libexec \ + -D CMAKE_SKIP_RPATH=ON \ + -D DEVELOPER_MODE=OFF \ + -D ENABLE_API_TESTS=OFF \ + -D ENABLE_BUBBLEWRAP_SANDBOX=OFF \ + -D ENABLE_GAMEPAD=OFF \ + -D ENABLE_GLES2=OFF \ + -D ENABLE_GTKDOC=OFF \ + -D ENABLE_MINIBROWSER=ON \ + -D ENABLE_SPELLCHECK=ON \ + -D PORT=GTK \ + -D USE_LIBNOTIFY=OFF \ + -D USE_LIBSECRET=OFF \ + -D USE_OPENGL_OR_ES=ON \ + -D USE_SYSTEMD=OFF \ + -D USE_WPE_RENDERER=OFF \ + -D USE_WOFF2=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + install -Dm644 $pkgname-$pkgver/Source/WebCore/LICENSE-LGPL-2.1 -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/webkitgtk/remove-libwebp-support.patch b/webkitgtk/remove-libwebp-support.patch new file mode 100644 index 0000000..cfd0cd0 --- /dev/null +++ b/webkitgtk/remove-libwebp-support.patch @@ -0,0 +1,81 @@ +--- a/Source/cmake/OptionsGTK.cmake 2021-05-10 10:02:55.000000000 +0200 ++++ b/Source/cmake/OptionsGTK.cmake 2024-05-10 17:01:41.610031597 +0200 +@@ -21,7 +21,6 @@ + find_package(Threads REQUIRED) + find_package(ZLIB REQUIRED) + find_package(ATK 2.16.0 REQUIRED) +-find_package(WebP REQUIRED COMPONENTS demux) + find_package(ATSPI 2.5.3) + find_package(EGL) + find_package(OpenGL) +--- a/Source/WebCore/platform/ImageDecoders.cmake 2021-02-26 10:57:13.000000000 +0100 ++++ b/Source/WebCore/platform/ImageDecoders.cmake 2024-05-10 17:27:37.870060143 +0200 +@@ -6,7 +6,6 @@ + "${WEBCORE_DIR}/platform/image-decoders/jpeg" + "${WEBCORE_DIR}/platform/image-decoders/jpeg2000" + "${WEBCORE_DIR}/platform/image-decoders/png" +- "${WEBCORE_DIR}/platform/image-decoders/webp" + ) + + list(APPEND WebCore_SOURCES +@@ -26,8 +25,6 @@ + platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp + + platform/image-decoders/png/PNGImageDecoder.cpp +- +- platform/image-decoders/webp/WEBPImageDecoder.cpp + ) + + list(APPEND WebCore_LIBRARIES +@@ -39,13 +36,6 @@ + list(APPEND WebCore_LIBRARIES OpenJPEG::OpenJPEG) + endif () + +-if (WebP_FOUND) +- list(APPEND WebCore_LIBRARIES +- WebP::demux +- WebP::libwebp +- ) +-endif () +- + if (USE_CAIRO) + list(APPEND WebCore_SOURCES + platform/image-decoders/cairo/ImageBackingStoreCairo.cpp +--- a/Source/WebCore/platform/image-decoders/ScalableImageDecoder.cpp 2021-02-26 10:57:13.000000000 +0100 ++++ b/Source/WebCore/platform/image-decoders/ScalableImageDecoder.cpp 2024-05-10 17:31:12.260064075 +0200 +@@ -33,9 +33,6 @@ + #if USE(OPENJPEG) + #include "JPEG2000ImageDecoder.h" + #endif +-#if USE(WEBP) +-#include "WEBPImageDecoder.h" +-#endif + + #include + #include +@@ -90,13 +87,6 @@ + } + #endif + +-#if USE(WEBP) +-bool matchesWebPSignature(char* contents) +-{ +- return !memcmp(contents, "RIFF", 4) && !memcmp(contents + 8, "WEBPVP", 6); +-} +-#endif +- + bool matchesBMPSignature(char* contents) + { + return !memcmp(contents, "BM", 2); +@@ -142,11 +132,6 @@ + return JPEG2000ImageDecoder::create(JPEG2000ImageDecoder::Format::J2K, alphaOption, gammaAndColorProfileOption); + #endif + +-#if USE(WEBP) +- if (matchesWebPSignature(contents)) +- return WEBPImageDecoder::create(alphaOption, gammaAndColorProfileOption); +-#endif +- + if (matchesBMPSignature(contents)) + return BMPImageDecoder::create(alphaOption, gammaAndColorProfileOption); + diff --git a/weechat/PKGBUILD b/weechat/PKGBUILD new file mode 100644 index 0000000..491ac8f --- /dev/null +++ b/weechat/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=weechat +pkgver=4.6.3 +pkgrel=1 +pkgdesc="Fast, light and extensible IRC client with curses UI" +arch=('i686' 'x86_64') +url='https://www.weechat.org/' +license=('GPL-3') +depends=('gnutls' 'curl' 'libgcrypt') +makedepends=('asciidoctor' 'cmake' 'aspell' 'guile' 'lua' 'perl' 'python' + 'ruby' 'tcl' 'tk' 'gettext-tiny') +optdepends=('aspell: spellchecker support' + 'guile: support for guile scripts' + 'lua: support for lua scripts' + 'perl: support for perl scripts' + 'python: support for python scripts' + 'ruby: support for ruby scripts' + 'tcl: support for tcl scripts' + 'tk: support for tk') +source=("https://www.weechat.org/files/src/${pkgname}-${pkgver}.tar.xz" + "fix-languages-cmake.patch") +sha512sums=('60c3c7090e871fbdb0d4df4aed0f08faa8b669d5a442fb267942a58fd7151a73d1454bb54a54290b06cce71cc5dcbfb04b05efc85273c186a3168b09e39cd2bd' + '7f2580cd06eb4b5bd2c713e6715144d2feabe0c59f93c9c988fa1424746739904f4402fac470e8a7f49a030501aedebb4c9b82be7f93e5b744a048fce9ec88e9') + +# cmake does not correctly handle CPPFLAGS, so kludge it in anyway: +# https://gitlab.kitware.com/cmake/cmake/-/issues/12928 +CFLAGS+=" ${CPPFLAGS}" + +prepare() { + cd $pkgname-$pkgver + + # additional fixes + patch -Np1 -i $srcdir/fix-languages-cmake.patch +} + +build() { + cmake \ + -Wno-dev \ + -S "${srcdir}/${pkgname}-${pkgver}" \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_MAN=ON \ + -DENABLE_DOC=OFF \ + -DENABLE_JAVASCRIPT=OFF \ + -DENABLE_PHP=OFF \ + -DENABLE_ZSTD=OFF \ + -DENABLE_CJSON=OFF + make -C build +} + +package() { + make DESTDIR="${pkgdir}" -C build install + install -Dm644 "${srcdir}"/$pkgname-$pkgver/COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/weechat/fix-languages-cmake.patch b/weechat/fix-languages-cmake.patch new file mode 100644 index 0000000..24585a3 --- /dev/null +++ b/weechat/fix-languages-cmake.patch @@ -0,0 +1,35 @@ +--- a/po/CMakeLists.txt 2024-08-17 08:33:14.000000000 +0200 ++++ b/po/CMakeLists.txt 2024-08-18 18:58:34.549905873 +0200 +@@ -23,19 +23,19 @@ + find_program(MSGFMT_EXECUTABLE msgfmt REQUIRED) + + set(PO_FILES +- cs.po +- de.po +- es.po +- fr.po +- hu.po +- it.po +- ja.po +- pl.po +- pt.po +- pt_BR.po +- ru.po +- sr.po +- tr.po ++# cs.po ++# de.po ++# es.po ++# fr.po ++# hu.po ++# it.po ++# ja.po ++# pl.po ++# pt.po ++# pt_BR.po ++# ru.po ++# sr.po ++# tr.po + ) + + set(BUGS_ADDRESS "flashcode@flashtux.org") diff --git a/wget/CVE-2024-38428.patch b/wget/CVE-2024-38428.patch new file mode 100644 index 0000000..b27f1cb --- /dev/null +++ b/wget/CVE-2024-38428.patch @@ -0,0 +1,75 @@ +From ed0c7c7e0e8f7298352646b2fd6e06a11e242ace Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tim=20R=C3=BChsen?= +Date: Sun, 2 Jun 2024 12:40:16 +0200 +Subject: Properly re-implement userinfo parsing (rfc2396) + +* src/url.c (url_skip_credentials): Properly re-implement userinfo parsing (rfc2396) + +The reason why the implementation is based on RFC 2396, an outdated standard, +is that the whole file is based on that RFC, and mixing standard here might be +dangerous. +--- + src/url.c | 40 ++++++++++++++++++++++++++++++++++------ + 1 file changed, 34 insertions(+), 6 deletions(-) + +diff --git a/src/url.c b/src/url.c +index 69e948b..07c3bc8 100644 +--- a/src/url.c ++++ b/src/url.c +@@ -41,6 +41,7 @@ as that of the covered work. */ + #include "url.h" + #include "host.h" /* for is_valid_ipv6_address */ + #include "c-strcase.h" ++#include "c-ctype.h" + + #ifdef HAVE_ICONV + # include +@@ -526,12 +527,39 @@ scheme_leading_string (enum url_scheme scheme) + static const char * + url_skip_credentials (const char *url) + { +- /* Look for '@' that comes before terminators, such as '/', '?', +- '#', or ';'. */ +- const char *p = (const char *)strpbrk (url, "@/?#;"); +- if (!p || *p != '@') +- return url; +- return p + 1; ++ /* ++ * This whole file implements https://www.rfc-editor.org/rfc/rfc2396 . ++ * RFC 2396 is outdated since 2005 and needs a rewrite or a thorough re-visit. ++ * ++ * The RFC says ++ * server = [ [ userinfo "@" ] hostport ] ++ * userinfo = *( unreserved | escaped | ";" | ":" | "&" | "=" | "+" | "$" | "," ) ++ * unreserved = alphanum | mark ++ * mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" ++ */ ++ static const char *allowed = "-_.!~*'();:&=+$,"; ++ ++ for (const char *p = url; *p; p++) ++ { ++ if (c_isalnum(*p)) ++ continue; ++ ++ if (strchr(allowed, *p)) ++ continue; ++ ++ if (*p == '%' && c_isxdigit(p[1]) && c_isxdigit(p[2])) ++ { ++ p += 2; ++ continue; ++ } ++ ++ if (*p == '@') ++ return p + 1; ++ ++ break; ++ } ++ ++ return url; + } + + /* Parse credentials contained in [BEG, END). The region is expected +-- +cgit v1.1 + diff --git a/wget/PKGBUILD b/wget/PKGBUILD new file mode 100644 index 0000000..cd555b9 --- /dev/null +++ b/wget/PKGBUILD @@ -0,0 +1,62 @@ +# Maintainer: Jesus E. + +pkgname=wget +pkgver=1.21.3 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Network utility to retrieve files from the Web" +url='https://www.gnu.org/software/wget/wget.html' +arch=('i686' 'x86_64') +license=('custom:GPL-3+OpenSSL-Linking-Exception') +depends=('glibc' 'libressl' 'libidn2' 'libutil-linux' 'libpsl' 'pcre2') +makedepends=('quilt') +checkdepends=('perl-http-daemon' 'perl-io-socket-ssl' 'python') +optdepends=('ca-certificates: HTTPS downloads') +backup=('etc/wgetrc') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.lz" + "https://deb.debian.org/debian/pool/main/w/wget/wget_${_debver}-${_debrel}.debian.tar.xz" + "CVE-2024-38428.patch") +sha512sums=('489b9beba237df4555ee3b22bf3ae1f654d448e29f5772a52690f7b7cd7e63679e295bdadb6d55d28d2e4f9ccf9a85a04a6b189e1b5333e9133613685d6cfc66' + '7e1241311d04a1f111da59ca3daaa500d3baa0b8c30edcb9d2a1f6a15fe63dca3d6fc0aea81293baf2e2a24bde096c765eecb18555ebae89f60c5e1e5472cab4' + '330468d28f2121960b36c80fc91b02005594affab9f0d20a887f749fbf00541f0fc31d7eed683956b97ef321297e3e25bf65870a74b6d484c8529be89adac887') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + patch -Np1 -i ${srcdir}/CVE-2024-38428.patch + + cat >> doc/sample.wgetrc < + +pkgname=whois +pkgver=5.5.10 +pkgrel=2 +pkgdesc="Intelligent WHOIS client" +arch=('i686' 'x86_64') +url='https://github.com/rfc1036/whois' +license=('GPL-2') +depends=('libidn2') +makedepends=('perl' 'gettext-tiny') +backup=('etc/whois.conf') +source=("$pkgname-$pkgver.tar.gz::https://github.com/rfc1036/whois/archive/refs/tags/v$pkgver.tar.gz" + "gettext-tiny.patch") +sha512sums=('5ee92c15146353e77dddcbeddb6e704e0c42d29b8c0ff899ecce80f8e39903e8c796daec7f3de3f197d382f88e7cd4abd470463ea6c13a01347d0cd15d99af28' + '2a5e5b2b133fd719c0265c6e81af36b87ef6b265173bb9e503b9dd378edbfa6d8c4b49b17e88dd4f900510ac993b7448f96d97d5b2e6b4f3f6a52eb067ff47bc') + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i "$srcdir/gettext-tiny.patch" +} + +build() { + cd $pkgname-$pkgver + make \ + CONFIG_FILE=/etc/whois.conf \ + CFLAGS="$CFLAGS $CPPFLAGS" \ + HAVE_ICONV=1 +} + +package() { + cd $pkgname-$pkgver + make prefix=/usr BASEDIR="$pkgdir" install-whois + install -Dm644 whois.conf -t "$pkgdir/etc" + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/whois/gettext-tiny.patch b/whois/gettext-tiny.patch new file mode 100644 index 0000000..b3c7df2 --- /dev/null +++ b/whois/gettext-tiny.patch @@ -0,0 +1,12 @@ +diff --unified --recursive --text whois-5.5.10/po/Makefile whois-5.5.10/po/Makefile +--- whois-5.5.10/po/Makefile 2021-06-06 18:54:46.000000000 +0100 ++++ whois-5.5.10/po/Makefile 2021-09-03 18:35:17.278140227 +0100 +@@ -10,7 +10,7 @@ + + PACKAGE = whois + +-CATALOGS = cs.mo da.mo de.mo el.mo es.mo eu.mo fi.mo fr.mo it.mo ja.mo pl.mo pt_BR.mo ru.mo zh_CN.mo ++CATALOGS = cs.mo da.mo de.mo el.mo es.mo eu.mo fi.mo fr.mo it.mo pl.mo pt_BR.mo ru.mo zh_CN.mo + + POTFILES=../whois.c ../mkpasswd.c + diff --git a/wildmidi/PKGBUILD b/wildmidi/PKGBUILD new file mode 100644 index 0000000..506b644 --- /dev/null +++ b/wildmidi/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=wildmidi +pkgver=0.4.3 +_debver=$pkgver +_debrel=1 +pkgrel=2 +pkgdesc="Free software MIDI Synthesizer" +arch=('i686' 'x86_64') +url='https://www.mindwerks.net/projects/wildmidi/' +license=('GPL-3') +depends=('alsa-lib') +makedepends=('cmake') +optdepends=('freepats: additional files for MIDI audio synthesis') +source=("https://github.com/psi29a/${pkgname}/archive/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/w/wildmidi/wildmidi_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('7e86e998ee97cdf57328e4cf5ef52a64926fd01999879c0eae5b6c823be4e6d116f7026230bd15d209e6616fbc7ba1c29ebd1f3be04735e341ce5c83298f956f' + 'dcbd1af0e32167e4632a3186c41170be27a54c8616ede58d47ec01f845408ad4f774dc9e7bb4b1a6cbcb08288aa24c21393ffd91b369ee34f541f603d5deba2c') + +prepare() { + mv "${pkgname}-${pkgname}-${pkgver}" "${pkgname}-${pkgver}" + cd "${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + fi +} + +build() { + cmake \ + -B build \ + -S "${pkgname}-${pkgver}" \ + -DCMAKE_INSTALL_PREFIX=/usr + make -C build +} + +package() { + make DESTDIR="${pkgdir}" -C build install + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/debian/$pkgname.cfg" -t "${pkgdir}/etc/$pkgname" + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/$pkgname" + for i in GPLv3.txt LGPLv3.txt; do + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/docs/license/$i" -t "${pkgdir}/usr/share/licenses/$pkgname" + done +} diff --git a/wireguard-tools/PKGBUILD b/wireguard-tools/PKGBUILD new file mode 100644 index 0000000..0847f68 --- /dev/null +++ b/wireguard-tools/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Jesus E. + +pkgname=wireguard-tools +pkgver=1.0.20210223 +_debver=$pkgver +_debrel=1 +pkgrel=3 +pkgdesc="Next generation secure network tunnel, including tools for configuration" +arch=('i686' 'x86_64') +url='https://www.wireguard.com/' +license=('GPL-2' 'LGPL-2.1' 'Expat') +depends=('bash' 'openresolv') +makedepends=('quilt') +optdepends=('opendoas: elevate privileges') +source=("https://git.zx2c4.com/${pkgname}/snapshot/${pkgname}-${pkgver}.tar"{.xz,.asc} + "https://deb.debian.org/debian/pool/main/w/wireguard/wireguard_${_debver}-${_debrel}.debian.tar.xz" + "wg-quick.initd" + "wg-quick.confd" + "wg-quick.run") +sha512sums=('98855853a3ecfce23a0a6bf4a885c85efaf2b08c9a92e0d3800fe40ae9adf05fdf4443150a71319bd9b53e314c8032694ea978db850a238813232a0c04edf692' + 'SKIP' + '98cb1b9c04b8861e5b3c4a106b0a70e6eb34915b00ab405d15e2feaa47cd1ed439261ac6c21c4fddb7f45b7bb80f38bb1dec067cf14dff3f0cca2dc73053f3b3' + '52d151c4017f16a12c0d01a582838d590bda43abef47b5f7b7953e99a647d836167db9b4d4cf061dd05a7d349a24d290f62886772c9b5662b7cd1dcd98a97fb2' + '5e1bbd9b9b26da8360c5b6349e453f6b26110a5055e4ec5e52a392672e53777002c05ece8c5d1e5892e4c8c6a28061143e467c835416b94e3f715c5c9bf63651' + 'e64f218b8d89e809c18889556c497967ada963fc867826611f168f7a3a54c76d96d4c82bd720d8875b7bcb2912bb0f0c520cdb32b2ff547bcfc409425b1e862d') +validpgpkeys=('AB9942E6D4A4CFC3412620A749FC7012A5DE03AE') # Jason A. Donenfeld + +prepare() { + cd "${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + find contrib/ -name '.gitignore' -delete +} + +build() { + cd "${pkgname}-${pkgver}" + make -C src/ +} + +package() { + cd "${pkgname}-${pkgver}" + + make -C src/ \ + DESTDIR="${pkgdir}" \ + WITH_BASHCOMPLETION=yes \ + WITH_WGQUICK=yes \ + WITH_SYSTEMDUNITS=no \ + install + + install -d -m0755 "${pkgdir}/usr/share/${pkgname}" + cp -r contrib/ "${pkgdir}/usr/share/${pkgname}/examples" + + install -Dm755 "${srcdir}/wg-quick.initd" "${pkgdir}/etc/init.d/wg-quick" + install -Dm644 "${srcdir}/wg-quick.confd" "${pkgdir}/etc/conf.d/wg-quick" + install -Dm755 "${srcdir}/wg-quick.run" "${pkgdir}/etc/sv/wg-quick/run" + + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/wireguard-tools/wg-quick.confd b/wireguard-tools/wg-quick.confd new file mode 100644 index 0000000..24e7cd0 --- /dev/null +++ b/wireguard-tools/wg-quick.confd @@ -0,0 +1,7 @@ +# /etc/conf.d/wg-quick: config file for /etc/init.d/wg-quick + +# where the wg daemon itself is run from +#WG_BINARY="/usr/bin/wg-quick" + +# File configuration +#WG_CONF="/etc/wireguard/wg0.conf" diff --git a/wireguard-tools/wg-quick.initd b/wireguard-tools/wg-quick.initd new file mode 100644 index 0000000..c317fe9 --- /dev/null +++ b/wireguard-tools/wg-quick.initd @@ -0,0 +1,24 @@ +#!/sbin/openrc-run + +name="WireGuard" +description="WireGuard via wg-quick(8)" + +command="${WG_BINARY:-/usr/bin/wg-quick}" +CONF="${WG_CONF:-/etc/wireguard/wg0.conf}" + +depend() { + need net + use dns +} + +start() { + ebegin "Starting $description for $CONF" + start-stop-daemon --background "${command}" up "$CONF" + eend $? "Failed to start $description for $CONF" +} + +stop() { + ebegin "Stopping $description for $CONF" + start-stop-daemon --background "${command}" down "$CONF" + eend $? "Failed to stop $description for $CONF" +} diff --git a/wireguard-tools/wg-quick.run b/wireguard-tools/wg-quick.run new file mode 100644 index 0000000..3929216 --- /dev/null +++ b/wireguard-tools/wg-quick.run @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +for conf in /etc/wireguard/*.conf; do + [ -e "$conf" ] || continue; + wg-quick up "$conf" +done + +exec chpst -b wireguard pause diff --git a/wireshark/PKGBUILD b/wireshark/PKGBUILD new file mode 100644 index 0000000..de98b66 --- /dev/null +++ b/wireshark/PKGBUILD @@ -0,0 +1,103 @@ +# Maintainer: Jesus E. + +pkgbase=wireshark +pkgname=('wireshark-cli' 'wireshark-qt') +pkgver=4.0.17 +_debver=$pkgver +_debrel=0 +pkgrel=1 +pkgdesc="Network traffic and protocol analyzer/sniffer" +url='https://www.wireshark.org/' +arch=('i686' 'x86_64') +license=('GPL-2' 'Public-Domain' 'LGPL-2' 'Modified-BSD' 'ISC' 'Simplified-BSD' 'GPL-3' 'custom:FSL-Kaz') +makedepends=('glibc' 'cmake' 'ninja' 'c-ares' 'qt-tools' 'qt-svg' + 'qt-multimedia' 'krb5' 'libpcap' 'libssh' 'libxml2' 'libnghttp2' + 'snappy' 'lz4' 'spandsp' 'gnutls' 'lua52' 'python' 'libcap' 'libnl' + 'glib2' 'libgcrypt' 'desktop-file-utils' 'libxslt' + 'hicolor-icon-theme' 'zlib' 'gcc-libs' 'asciidoctor' + 'doxygen' 'minizip' 'speexdsp' 'opus' 'quilt') +options=('!emptydirs') +source=("https://1.na.dl.wireshark.org/src/all-versions/${pkgbase}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/w/${pkgbase}/${pkgbase}_${_debver}-${_debrel}+deb12u1.debian.tar.xz") +sha512sums=('c7eb6375df60009a6f2efd02385d959cffcfd565fc7254cd0d6aa595127266799d0d296894f8a2ff626103ecc64b763bc617543f7718b8788578711609e29797' + 'fd52503d352bf42d911a23ab5804f116ec828246689f3f018ec4f69b4f1937391316462173138dbac4d6621fbdc04cd18e3abb0158fd24f144331a179cfa4b78') + +prepare() { + cd ${pkgbase}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgbase}-${pkgver} + cmake \ + -B build \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_INSTALL_RPATH= \ + -DCMAKE_SKIP_RPATH=ON \ + -DENABLE_ZSTD=OFF \ + -DENABLE_BROTLI=OFF \ + -DENABLE_BCG729=OFF \ + -Wno-dev + ninja -C build -v +} + +package_wireshark-cli() { + pkgdesc+=" - CLI tools and data files" + depends=('glibc' 'c-ares' 'krb5' 'libgcrypt' 'libcap' 'libpcap' + 'gnutls' 'glib2' 'lua52' 'libssh' 'libxml2' 'libnghttp2' 'snappy' + 'lz4' 'spandsp' 'zlib' 'speexdsp' 'opus') + install=$pkgbase.install + + cd ${pkgbase}-${pkgver} + DESTDIR="${pkgdir}" ninja -C build install + + install -Dm 644 "${srcdir}/${pkgbase}-${pkgver}/debian/copyright" "${srcdir}/${pkgbase}-${pkgver}/COPYING" -t $pkgdir/usr/share/licenses/$pkgname/ + + # wireshark uid group is 150 + chgrp 150 "${pkgdir}/usr/bin/dumpcap" + chmod 754 "${pkgdir}/usr/bin/dumpcap" + + cd "${pkgdir}" + rm -r usr/share/mime \ + usr/share/icons \ + usr/share/man/man1/wireshark.1 \ + usr/bin/wireshark \ + usr/share/applications/org.wireshark.Wireshark.desktop \ + usr/share/metainfo/org.wireshark.Wireshark.metainfo.xml +} + +package_wireshark-qt() { + pkgdesc+=" - Qt GUI" + depends=('glibc' 'desktop-file-utils' 'qt-multimedia' 'qt-svg' 'wireshark-cli' + 'shared-mime-info' 'hicolor-icon-theme' 'xdg-utils' 'gcc-libs' + 'zlib' 'libpcap' 'libgcrypt' 'libnl' 'minizip' 'speexdsp') + + cd ${pkgbase}-${pkgver} + install -d "${srcdir}/staging" + DESTDIR="${srcdir}/staging" ninja -C build install + + install -Dm 755 build/run/wireshark -t "${pkgdir}"/usr/bin + install -Dm 644 build/doc/wireshark.1 -t "${pkgdir}"/usr/share/man/man1 + install -Dm 644 build/doc/wireshark.html -t "${pkgdir}"/usr/share/doc/wireshark + + cd "${srcdir}"/staging/usr/share + install -Dm 644 applications/org.wireshark.Wireshark.desktop -t "${pkgdir}"/usr/share/applications + install -Dm 644 mime/packages/org.wireshark.Wireshark.xml -t "${pkgdir}"/usr/share/mime/packages + install -Dm 644 metainfo/org.wireshark.Wireshark.metainfo.xml -t "${pkgdir}"/usr/share/metainfo + mv icons "${pkgdir}"/usr/share/icons + + install -Dm 644 "${srcdir}/${pkgbase}-${pkgver}/debian/copyright" "${srcdir}/${pkgbase}-${pkgver}/COPYING" -t $pkgdir/usr/share/licenses/$pkgname/ +} diff --git a/wireshark/wireshark.install b/wireshark/wireshark.install new file mode 100644 index 0000000..1488eda --- /dev/null +++ b/wireshark/wireshark.install @@ -0,0 +1,24 @@ +#!/bin/sh + +post_install() { + post_upgrade + cat 1>&2 < wireshark +* +EOF +} + +post_upgrade() { + setcap cap_net_raw,cap_net_admin,cap_dac_override+eip usr/bin/dumpcap + if ! (grep -q wireshark /etc/group); then + groupadd --gid 150 wireshark >/dev/null 2>&1; + fi +} + +pre_remove() { + groupdel wireshark > /dev/null 2>&1 +} diff --git a/wizznic/PKGBUILD b/wizznic/PKGBUILD new file mode 100644 index 0000000..ec8a08b --- /dev/null +++ b/wizznic/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +pkgname=wizznic +pkgver=0.9.9 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="Free and libre implementation of the arcade classic Puzznic" +arch=('i686' 'x86_64') +url='http://wizznic.org/' +license=('GPL-3') +depends=('glu' 'sdl_image' 'sdl_mixer' 'sdl' 'glibc' 'zlib') +makedepends=('quilt') +groups=('games') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/w/wizznic/wizznic_${pkgver}+dfsg.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/w/wizznic/wizznic_${_debver}+dfsg-${_debrel}.debian.tar.xz" + "$pkgname.png") +sha512sums=('827a65ccd1827528b419af73912db89b701d9b96d97403f80651e774f39d3862fbc2ef56c257fc931e21000fde5d048e67a71d42333f2519673b040746b7f7d5' + 'd4cd9492e1b32ef486859946bc86609cfb46abaf6c4a9026aa221c653531a4233f5e35bceb2055ada2bc6eb9bf5bdb99f86f3a1922cf37ba7273f150176c25b4' + 'abaeeeffa527bf06ac79113100b5b63a633bfff17ebeecd548ddeff83d63b43bd4a73a338b3af9d35bc10538af26a9bce7d5032b5412277bbdddd5e470735b45') + +prepare() { + mv "$pkgname-$pkgver-src" "$pkgname-$pkgver" + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$pkgname-$pkgver" + export CFLAGS="${CLAGS} -std=gnu89" + make DATADIR=/usr/share/games/$pkgname/ BINDIR=/usr/games/ +} + +package() { + cd "$pkgname-$pkgver" + + # create directories and install data + install -d "$pkgdir/usr/games/" + install -d "$pkgdir/usr/share/games/$pkgname/" + make DATADIR="$pkgdir/usr/share/games/$pkgname/" BINDIR="$pkgdir/usr/games/" install + + # desktop-shortcut, icon and license + install -Dm644 $srcdir/$pkgname.png -t "$pkgdir/usr/share/pixmaps" + install -Dm644 debian/$pkgname.desktop -t "$pkgdir/usr/share/applications" + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/wizznic/wizznic.png b/wizznic/wizznic.png new file mode 100644 index 0000000000000000000000000000000000000000..9849f265fabdea3ca782c4769a10567be205a347 GIT binary patch literal 4860 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000OlNkl>34>I(VN5lY*Q?k$Bh*dIj&ixYbK!qH%H?uuaGu%%u;nnM2m^v{NDu_qx4H>o4DY=2E_)ungZy3NxF6P8d1HaEeBnU=OwGjg z>$n|v2ar^+*P~o6_e?WII^CtCd4v{VL1rj}85j@)J_OB>(Dwi^G_@WA#3A7(EG(=5 zaMv^U^5M_kRo`#DmvGa>NE>7`V3;8?)gkEll*{FmzIBKwXyW1FWkXh;SOY*qLr3S9 zUynd+Kpa8{MhxK=fX$FFR3IiN$N1!vwZ8LP$M42Vq~ z8_8O9x-GmgBs97JjJ=kH4j8e{r3BFA@jS*R;2Ri#p+Oje^xD+d9lBkQ17G|)A6@u} z#lB%Sg)ZPXUU3{pg1B@23bZT|bLa-DvqYG^4 z7{H$6dBSwWCr4cNJfEl8ap~4Pf_9U3Thh3?#zxD>?{<0oTTk)VKfljLJ*4UW94j6t z48hp!QM8XBOjuZbk%d*5n)(_#K%fP9Sr5;S2=fu3PL}C_v1t&dL%diLKkf47Gw(C; zoiwS-Dd;5m)4()hdLcCZCbMV%ko<6lTC0nlnWf_Vh@yQ2a3~dKka3a%fY5}>cbjzj z7Pr}5UA@9uqfVn!$IW-SLXAdV*kozB#?tbe zH`IVy>!%3q5SS8y4~!`QY?|DDdXhDLjS3b1{=mnG%PmCRge_T$Ar}i|TT(n?vvk~1 z>rE&=Y{PocKl$J&*t67}Y3$6~INp7rSqK140+0q6&Srrgm)9>b-}rzE70^wD5dBX+ zE3kx0ni%vDCG+S8$Bw%@rUDBz$cy|o2clkwxv!t+Jm>N72G}t$bnu5kTCjB7Q7Q02 zI3`j8s0eK3eJc{R*5QN)_a!{>89YLIZEcOpm1Qn*iGTsAjRK^U$VeiQ_?krOlBHK` zlpZgTtB#QS*9f925N&0$RJ1ws=9wFEpkP0%7#o8tRlVygD=Td78l(6`4u)IE(SX{I zJ*2P73tfGr6(F~w;s9;PM?#fT43Yo|wBwjmD#iS0Q=7!WbVKzKCYjoXx~H8zF(D~CIJ_T zgjj9^sIFD<+mdEeRe`JriBu}bK@4WBFrdLwN8OG>Ky#x-Qv&f$A=;MWN?-RSB#yVs zRtGqJdQP#`&Je@_i5i0jUTdeqWHJGPsfgNWtG%8V-LUi;-Nuf&shQm7IY%OE-ieLv5J8Z@Pb~`D5?#!YeN`G&IyVc=*A?*OlO{@!IRZO}-5=1gy8#Iehpr z0B+s_P}skh!v4L?9XQ47XVh(W>cv;CYw)p0)SnMNd9c5>|J=bFM&R7JKPfLm7NeGh zrCS_*`ulWSKJ)Xd3P5e{pM42kT)NmN<+Z08jKt#dVt?P*`VXY>~i| z5W$HTUgq6%Z?Uj+krls=v|37heqzH0h{)u^Zxo=ZuO0w^-pl9RKU>$ z5^$r$p(WG>6_H%kiC$I2p9%*sh)sn0aX(L>^oFI>H}p+%V&2(VtZ=wXwjys z!O5jsABX_lj8Kks1%i%L(Xo=e#?TGB__~j4H)&b{ay-!%A94+XW ztGnxA$(l$ZXbM472UnQ5y2(tbz=>stBSo8| zMVk{#HQrdPk&6P50qw;aPkrxch%7$;T#3&-KS}ZTcG8M%_d)hew+uE~>Ls-v8@+RT z??g`zL)1WIL6GD&0+E5F_u4VK0J_<~3rt{i)TZi-Yg#&!U75XD!=wEdV}R7u)YP>$ i|F5s-{Wd8X{~iEtI + +pkgname=wmctrl +pkgver=1.07 +_debver=$pkgver +_debrel=7 +pkgrel=3 +pkgdesc="Control your EWMH compliant window manager from command line" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('glib2' 'libxmu') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/w/wmctrl/wmctrl_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/w/wmctrl/wmctrl_${_debver}-${_debrel}.debian.tar.gz") +sha512sums=('4c77ad1e204e8d444f682ad1d05c0993bcab9097ac6d4b6a944556ab85acbe713f549dbaf443cd4d1226a162ce7d46fbd209c92652e87fc8e609feee74907daa' + '2e5663f485801b871b388895d4b1eba90ae43dc353cdb0d6af962a51c1c45ea457523cb6c58fce1004998cbd500f553881e49c28eca776d34517d563efd7bbea') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --bindir=${pkgdir}/usr/bin \ + --mandir=${pkgdir}/usr/share/man + make +} + +package() { + cd ${pkgname}-${pkgver} + make install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/worker/PKGBUILD b/worker/PKGBUILD new file mode 100644 index 0000000..ea45683 --- /dev/null +++ b/worker/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=worker +pkgver=4.11.0 +_debver=$pkgver +_debrel=1 +pkgrel=1 +pkgdesc="A file manager for the X Window System" +arch=('i686' 'x86_64') +license=('GPL-2') +url='http://www.boomerangsworld.de/worker' +depends=('libx11' 'libxt' 'file' 'xenocara-proto') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.bz2::https://deb.debian.org/debian/pool/main/w/worker/worker_${pkgver}.orig.tar.bz2" + "https://deb.debian.org/debian/pool/main/w/worker/worker_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('17675e90d15ef323e81efedf96b53ce0aa1fe22f58f298498a9740657e297114c3f7ca8b4f24e63269a7a87c78e09b881c9cef4a6fe42f46f7457bf4187f5834' + '604f6c48f7bf6f476bace45ee6c2538f17cae3693eef32b4b6e923275b4ccb398e0796b12d746288c760e403b95c443c709b4aa9c21cfafde7dabd1e949a63ae') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + CPPFLAGS="-O0 -std=gnu++14" LDFLAGS=-pthread ./configure \ + --prefix=/usr \ + --enable-xft \ + --disable-cxx-check + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/wpa_supplicant_gui/PKGBUILD b/wpa_supplicant_gui/PKGBUILD new file mode 100644 index 0000000..d711bff --- /dev/null +++ b/wpa_supplicant_gui/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=wpa_supplicant_gui +_pkgname=${pkgname%_gui} +pkgver=2.9 +_debver=2.9.0 +_debrel=15 +pkgrel=2 +epoch=1 +pkgdesc='A Qt frontend for interacting with wpa_supplicant' +url='https://w1.fi/wpa_supplicant/' +arch=('i686' 'x86_64') +depends=('qt-base' 'wpa_supplicant') +license=('Modified-BSD') +install=wpa_supplicant_gui.install +source=(https://w1.fi/releases/${_pkgname}-${pkgver}.tar.gz{,.asc} + wpa_supplicant_gui.install) +sha512sums=('37a33f22cab9d27084fbef29856eaea0f692ff339c5b38bd32402dccf293cb849afd4a870cd3b5ca78179f0102f4011ce2f3444a53dc41dc75a5863b0a2226c8' + 'SKIP' + '806397de924a1d4f657c44072c4fd63574503d97686275c3c1f5cce1261d13c3b3c7d7554f36613e02ba6c9fdfc4d7d30d817c8e67347039a14fe74484142b6b') +validpgpkeys=('EC4AA0A991A5F2464582D52D2B6EF432EFC895FA') # Jouni Malinen + +build() { + cd "${_pkgname}-${pkgver}/${_pkgname}/wpa_gui-qt4" + qmake-qt5 QMAKE_CFLAGS_RELEASE="${CPPFLAGS} ${CFLAGS}" QMAKE_CXXFLAGS_RELEASE="${CPPFLAGS} ${CXXFLAGS}" QMAKE_LFLAGS_RELEASE="${LDFLAGS}" + make +} + +package() { + cd "${_pkgname}-${pkgver}/${_pkgname}/wpa_gui-qt4" + install -Dm755 -t "${pkgdir}/usr/bin" wpa_gui + install -Dm644 -t "${pkgdir}/usr/share/pixmaps" icons/wpa_gui.svg + install -Dm644 -t "${pkgdir}/usr/share/applications" wpa_gui.desktop + install -Dm644 -t "${pkgdir}/usr/share/man/man8" ../doc/docbook/wpa_gui.8 + install -Dm644 "${srcdir}/${_pkgname}-${pkgver}/COPYING" -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/wpa_supplicant_gui/wpa_supplicant_gui.install b/wpa_supplicant_gui/wpa_supplicant_gui.install new file mode 100644 index 0000000..9c9f409 --- /dev/null +++ b/wpa_supplicant_gui/wpa_supplicant_gui.install @@ -0,0 +1,3 @@ +post_install() { + echo 'update_config=1' >> /etc/wpa_supplicant/wpa_supplicant.conf +} diff --git a/wv/PKGBUILD b/wv/PKGBUILD new file mode 100644 index 0000000..469f461 --- /dev/null +++ b/wv/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=wv +pkgver=1.2.9 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="Free software library for loding several document file formats" +arch=('i686' 'x86_64') +url='https://sourceforge.net/projects/wvware' +license=('GPL-2') +depends=('libgsf' 'libpng' 'sh') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::http://deb.debian.org/debian/pool/main/w/wv/wv_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/w/wv/wv_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('ae5c762012595ce8922bfda8749ad3e9cb055edab30152c3a5feaaf3ca6601f357d1e301b179e9a5860cd99452dd6e63e5f44f5bcc12f8db148bdd334e0200a5' + '9a3448650ca5e4d06499e3ef8a934bd4fb153849aad5afafa35aa9dbf691bfcc0806c58f1d150c3f4232b09964ec1f1dccecc3fddec1eaa40190a48c98548935') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + + # license + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/wvdial/PKGBUILD b/wvdial/PKGBUILD new file mode 100644 index 0000000..b0f06da --- /dev/null +++ b/wvdial/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +pkgname=wvdial +pkgver=1.61 +_debver=$pkgver +_debrel=6 +pkgrel=2 +pkgdesc="A dialer program to connect to the Internet" +arch=('i686' 'x86_64') +license=('LGPL-2') +depends=('wvstreams' 'ppp' 'gcc-libs') +makedepends=('lockdev' 'quilt') +options=('!makeflags' '!buildflags') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/w/wvdial/wvdial_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/w/wvdial/wvdial_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('13bd74a1c3c95236ff5f408041f9f02ee926e585a55d251a7fe4068ea87a23ed1eede0467e7c67fbb10a942de1d84c7a38185c92582479a8bf0978ab8c5a92aa' + 'c8f1528f074592846bc43f1323c929d1e942f36874e13a86819de801375ad15e8977bd54e5161d9ad0c7f2b8c859c05123dbc498bd83ac47123533615283cb13') + +prepare() { + cd "${srcdir}"/${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}"/${pkgname}-${pkgver} + ./configure + make LOCKDEV="-llockdev" +} + +package() { + cd "${srcdir}"/${pkgname}-${pkgver} + make prefix="${pkgdir}"/usr PPPDIR="${pkgdir}"/etc/ppp/peers install + install -Dm644 COPYING.LIB -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/wvstreams/PKGBUILD b/wvstreams/PKGBUILD new file mode 100644 index 0000000..63d6a94 --- /dev/null +++ b/wvstreams/PKGBUILD @@ -0,0 +1,79 @@ +# Maintainer: Jesus E. + +pkgname=wvstreams +pkgver=4.6.1 +_debver=$pkgver +_debrel=15 +pkgrel=14 +pkgdesc="A network programming library written in C++" +arch=('i686' 'x86_64') +license=('LGPL-2') +depends=('zlib' 'xplc' 'libressl' 'readline') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/w/wvstreams/wvstreams_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/w/wvstreams/wvstreams_${_debver}-${_debrel}.debian.tar.xz" + "wvstreams-4.6.1-glibc212.patch" + "wvstreams-4.6.1-gcc47.patch" + "openssl-buildfix.patch" + "gcc-6.patch" + "libressl.patch") +sha512sums=('59d64e527d86394b768b35254bf95ea59c412c0e092393ea3c84ec3202949150439bb6093bd7350b64ad4767acdb8feb38806c03de4e5cf238ed893f41db4a4a' + 'f10196953ead78f6c58d8930ef4ad6565a8b0900d5ecb90defb6b76cd0c114f78651ef01bbb9ca5215c231f427ed5b5e883ae1ac8da6ed128ad3424d31ce5ced' + '4ed90339730f36d3ad932b17561c5222ba63c4158b21050f52e80da8a150c8f16e15bd0826ed41d1e39a0ba88096eb19d7c93af403f8db9369ce56cd62b2db93' + '306a20b2b822d79ccf26498863a9d5e45b2f2a35e0cf6dacbc73d80dcfc8cec2d7ed9a80417a74ac32f82daa03ef905ef70f9e70971468c2223a28dd355c35fc' + 'a04ecb47e243ad6d0249bc053463fabd4c07ec68e55ec0f57cfca1418bb36eb989bc5eb91016a7433c3cb5f73561c430b7c0227c72c8673fbd59bbb28f5721d3' + '9d72bcbfcdeedf96a183689540f9f7be4a098b819e0b2a41e8412543d4b827e02a2fc9eb45116f66789949985488a802b0e81733843fa7c297e2874d5d007f3a' + '9acba01c1c9b4653686fabecac4334ff6995f0c6b6aedff140d4b70eb56b8204ee3007dadabe66ce73609c40592d607d9fa4bb0fc886ef919fdc67bc47dd814c') +options=('!makeflags') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/01_kfreebsd_ftbfs.diff || true + rm -v debian/patches/wvstreams_openssl1.1.patch || true + + quilt push -av + else + patch -p0 -i "$srcdir/wvstreams-4.6.1-glibc212.patch" + patch -p0 -i "$srcdir/wvstreams-4.6.1-gcc47.patch" + patch -p1 -i "$srcdir/openssl-buildfix.patch" + patch -p1 -i "$srcdir/gcc-6.patch" + fi + patch -p1 -i "$srcdir/libressl.patch" +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-openssl \ + --without-dbus \ + --without-pam \ + --without-tcl \ + --without-qt + make COPTS="$CFLAGS -fPIC" CXXOPTS="$CXXFLAGS -fPIC -fpermissive -fno-tree-dce -fno-optimize-sibling-calls" VERBOSE=1 +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + # --without-dbus still installs the pkg-config file + rm "${pkgdir}/usr/lib/pkgconfig/libwvdbus.pc" + # --without-qt still installs the pkg-config file + rm "${pkgdir}/usr/lib/pkgconfig/libwvqt.pc" +} diff --git a/wvstreams/gcc-6.patch b/wvstreams/gcc-6.patch new file mode 100644 index 0000000..b084887 --- /dev/null +++ b/wvstreams/gcc-6.patch @@ -0,0 +1,42 @@ +Description: Fix compilation with gcc-6 +Author: Gert Wollny +Last-Updated: 2016-07-26 +Forwarded: No +Bug-Debian: https://bugs.debian.org/811659 +Bug-Debian: https://bugs.debian.org/831146 + +--- a/streams/wvstream.cc ++++ b/streams/wvstream.cc +@@ -907,9 +907,9 @@ + + if (forceable) + { +- si.wants.readable = readcb; +- si.wants.writable = writecb; +- si.wants.isexception = exceptcb; ++ si.wants.readable = static_cast(readcb); ++ si.wants.writable = static_cast(writecb); ++ si.wants.isexception = static_cast(exceptcb); + } + else + { +@@ -1019,7 +1019,8 @@ + + IWvStream::SelectRequest WvStream::get_select_request() + { +- return IWvStream::SelectRequest(readcb, writecb, exceptcb); ++ return IWvStream::SelectRequest(static_cast(readcb), static_cast(writecb), ++ static_cast(exceptcb)); + } + + +@@ -1107,7 +1108,8 @@ + // inefficient, because if the alarm was expired then pre_select() + // returned true anyway and short-circuited the previous select(). + TRACE("hello-%p\n", this); +- return !alarm_was_ticking || select(0, readcb, writecb, exceptcb); ++ return !alarm_was_ticking || select(0, static_cast(readcb), ++ static_cast(writecb), static_cast(exceptcb)); + } + + diff --git a/wvstreams/libressl.patch b/wvstreams/libressl.patch new file mode 100644 index 0000000..fca8228 --- /dev/null +++ b/wvstreams/libressl.patch @@ -0,0 +1,46 @@ +diff --git a/include/wvtripledes.h b/include/wvtripledes.h +index 185fe8a..a442e7a 100644 +--- a/include/wvtripledes.h ++++ b/include/wvtripledes.h +@@ -70,11 +70,11 @@ protected: + + private: + Mode mode; +- des_cblock key; +- des_key_schedule deskey1; +- des_key_schedule deskey2; +- des_key_schedule deskey3; +- des_cblock ivec; // initialization vector ++ DES_cblock key; ++ DES_key_schedule deskey1; ++ DES_key_schedule deskey2; ++ DES_key_schedule deskey3; ++ DES_cblock ivec; // initialization vector + int ivecoff; // current offset into initvec + }; + +--- a/crypto/wvx509.cc 2022-01-28 12:55:29.000000000 +0100 ++++ b/crypto/wvx509.cc 2022-01-28 13:01:17.276681510 +0100 +@@ -1446,19 +1446,19 @@ + { + CHECK_CERT_EXISTS_SET("ski"); + +- ASN1_OCTET_STRING *oct = M_ASN1_OCTET_STRING_new(); ++ ASN1_OCTET_STRING *oct = ASN1_OCTET_STRING_new(); + ASN1_BIT_STRING *pk = cert->cert_info->key->public_key; + unsigned char pkey_dig[EVP_MAX_MD_SIZE]; + unsigned int diglen; + + EVP_Digest(pk->data, pk->length, pkey_dig, &diglen, EVP_sha1(), NULL); + +- M_ASN1_OCTET_STRING_set(oct, pkey_dig, diglen); ++ ASN1_OCTET_STRING_set(oct, pkey_dig, diglen); + X509_EXTENSION *ext = X509V3_EXT_i2d(NID_subject_key_identifier, 0, + oct); + X509_add_ext(cert, ext, -1); + X509_EXTENSION_free(ext); +- M_ASN1_OCTET_STRING_free(oct); ++ ASN1_OCTET_STRING_free(oct); + } + + diff --git a/wvstreams/openssl-buildfix.patch b/wvstreams/openssl-buildfix.patch new file mode 100644 index 0000000..d6f54e5 --- /dev/null +++ b/wvstreams/openssl-buildfix.patch @@ -0,0 +1,14 @@ +--- wvstreams-4.6.1/crypto/wvx509.cc 2008-10-23 22:23:49.000000000 +0200 ++++ wvstreams-4.6.1-1/crypto/wvx509.cc 2010-01-27 11:09:06.000000000 +0100 +@@ -1157,7 +1157,11 @@ + + if (ext) + { ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ const X509V3_EXT_METHOD *method = X509V3_EXT_get(ext); ++#else + X509V3_EXT_METHOD *method = X509V3_EXT_get(ext); ++#endif + if (!method) + { + WvDynBuf buf; diff --git a/wvstreams/wvstreams-4.6.1-gcc47.patch b/wvstreams/wvstreams-4.6.1-gcc47.patch new file mode 100644 index 0000000..b284da8 --- /dev/null +++ b/wvstreams/wvstreams-4.6.1-gcc47.patch @@ -0,0 +1,50 @@ +http://bugs.gentoo.org/419563 +http://bugs.gentoo.org/419971 + +See -gcc47-patch and -magic.patch in Fedora git: + +http://pkgs.fedoraproject.org/gitweb/?p=libwvstreams.git;a=tree + +--- include/wvtask.h ++++ include/wvtask.h +@@ -45,7 +45,8 @@ + typedef void TaskFunc(void *userdata); + + static int taskcount, numtasks, numrunning; +- int magic_number, *stack_magic; ++ int volatile magic_number; ++ int *stack_magic; + WvString name; + int tid; + +@@ -84,7 +85,7 @@ + static WvTaskMan *singleton; + static int links; + +- static int magic_number; ++ static int volatile magic_number; + static WvTaskList all_tasks, free_tasks; + + static void get_stack(WvTask &task, size_t size); +--- include/wvuid.h ++++ include/wvuid.h +@@ -7,6 +7,7 @@ + #ifndef __WVUID_H + #define __WVUID_H + ++#include + #include "wvstring.h" + + #if WIN32 +--- utils/wvtask.cc ++++ utils/wvtask.cc +@@ -58,7 +58,8 @@ + int WvTask::taskcount, WvTask::numtasks, WvTask::numrunning; + + WvTaskMan *WvTaskMan::singleton; +-int WvTaskMan::links, WvTaskMan::magic_number; ++int WvTaskMan::links; ++int volatile WvTaskMan::magic_number; + WvTaskList WvTaskMan::all_tasks, WvTaskMan::free_tasks; + ucontext_t WvTaskMan::stackmaster_task, WvTaskMan::get_stack_return, + WvTaskMan::toplevel; diff --git a/wvstreams/wvstreams-4.6.1-glibc212.patch b/wvstreams/wvstreams-4.6.1-glibc212.patch new file mode 100644 index 0000000..eb3e9b6 --- /dev/null +++ b/wvstreams/wvstreams-4.6.1-glibc212.patch @@ -0,0 +1,24 @@ +http://bugs.gentoo.org/333301 +https://bugs.archlinux.org/task/27188 + +--- ipstreams/wvunixdgsocket.cc ++++ ipstreams/wvunixdgsocket.cc +@@ -1,5 +1,5 @@ + #include "wvunixdgsocket.h" +-#ifdef MACOS ++#if defined(MACOS) || defined(__GNUC__) + #include + #include + #endif +--- streams/wvatomicfile.cc ++++ streams/wvatomicfile.cc +@@ -11,7 +11,8 @@ + #include "wvfileutils.h" + #include "wvstrutils.h" + +-#ifdef MACOS ++#if defined(MACOS) || defined(__GNUC__) ++#include + #include + #endif + diff --git a/wxgtk/PKGBUILD b/wxgtk/PKGBUILD new file mode 100644 index 0000000..a577b32 --- /dev/null +++ b/wxgtk/PKGBUILD @@ -0,0 +1,86 @@ +# Maintainer: Jesus E. + +pkgbase=wxgtk +pkgname=('wxgtk2' 'wxgtk3' 'wxgtk-common') +pkgver=3.0.5.1 +_debver=$pkgver +_debrel=2 +pkgrel=2 +arch=('i686' 'x86_64') +url='https://wxwidgets.org' +license=('wxWindows-Library-3.1') +makedepends=('gst-plugins-base' 'glu' 'gtk' 'gtk2' 'quilt') +options=('!emptydirs') +source=(https://github.com/wxWidgets/wxWidgets/releases/download/v$pkgver/wxWidgets-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/w/wxwidgets3.0/wxwidgets3.0_${_debver}+dfsg-${_debrel}.debian.tar.xz) +sha512sums=('0a789fc5e71d414e43f75b5c16076fe8b1bcd7671be0770e4269dcef66d830c1bc74e183f49db270b928862f13472666c283fe2aa98b9006681722e06100725d' + '574c28fe8b864ed3652313bc22f6eb15d4264203dab4cdabe11a34508a8a61fcac1c65af5835518e603c6306d910d753614ae0f9a6d0303eb59b35451927d01e') + +prepare() { + cd wxWidgets-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + cd .. + cp -r wxWidgets-$pkgver wxWidgets-$pkgver-gtk3 +} + +build() { + cd wxWidgets-$pkgver + ./configure --prefix=/usr --libdir=/usr/lib --with-gtk=2 --with-opengl --enable-unicode \ + --enable-graphics_ctx --enable-mediactrl --with-regex=builtin \ + --with-libpng=sys --with-libxpm=sys --with-libjpeg=sys --with-libtiff=sys \ + --disable-precomp-headers --with-libnotify=no + make + make -C locale allmo + + cd ../wxWidgets-$pkgver-gtk3 + ./configure --prefix=/usr --libdir=/usr/lib --with-gtk=3 --with-opengl --enable-unicode \ + --enable-graphics_ctx --enable-mediactrl --with-regex=builtin \ + --with-libpng=sys --with-libxpm=sys --with-libjpeg=sys --with-libtiff=sys \ + --disable-precomp-headers --with-libnotify=no + make +} + +package_wxgtk-common() { + pkgdesc='Common libraries and headers for wxgtk2 and wxgtk3' + depends=('zlib' 'gcc-libs' 'expat') + + cd wxWidgets-$pkgver + make DESTDIR="$pkgdir" install + rm -r "$pkgdir"/usr/{bin/wx-config,lib/{wx,libwx_gtk*}} + + install -D -m644 docs/licence.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_wxgtk2() { + pkgdesc='GTK+2 implementation of wxWidgets API for GUI' + depends=('gtk2' 'libgl' 'gst-plugins-base-libs' 'libsm' 'libxxf86vm' 'wxgtk-common') + + cd wxWidgets-$pkgver + make DESTDIR="$pkgdir" install + rm -r "$pkgdir"/usr/{include,share,lib/libwx_base*,bin/wxrc*} + + install -D -m644 docs/licence.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} + +package_wxgtk3() { + pkgdesc='GTK+3 implementation of wxWidgets API for GUI' + depends=('gtk' 'gst-plugins-base-libs' 'libsm' 'libxxf86vm' 'wxgtk-common') + + cd wxWidgets-$pkgver-gtk3 + make DESTDIR="$pkgdir" install + rm -r "$pkgdir"/usr/{include,share,lib/libwx_base*,bin/wxrc*} + mv "$pkgdir"/usr/bin/wx-config{,-gtk3} + + install -Dm644 docs/licence.txt -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/wxsvg/PKGBUILD b/wxsvg/PKGBUILD new file mode 100644 index 0000000..10ccdda --- /dev/null +++ b/wxsvg/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=wxsvg +pkgver=1.5.22 +pkgrel=1 +pkgdesc="C++ library to create, manipulate and render SVG files" +arch=('i686' 'x86_64') +url='https://wxsvg.sourceforge.net/' +license=('wxWindows-Library-3') +depends=('ffmpeg' 'libexif' 'wxgtk3') +makedepends=('webkitgtk') +source=("https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2") +sha512sums=('de9ffe314293267b728d0c9bd79b72c87ab057ca9e40af4e7f248ff4e39040a8f1b2a95a1e0bf2db20f3e718ad585e26dc8e69beeeb23b3161edac447e3cfe7b') + +prepare() { + cd $pkgname-$pkgver + sed -i 's/libwxsvg_la_LDFLAGS = /libwxsvg_la_LDFLAGS = $(LDFLAGS) /' src/Makefile.am + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --with-wx-config=/usr/bin/wx-config-gtk3 + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/wyrmsun-legacy/PKGBUILD b/wyrmsun-legacy/PKGBUILD new file mode 100644 index 0000000..baf51bb --- /dev/null +++ b/wyrmsun-legacy/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Jesus E. +# Mantainer (Arch): MCMic + +pkgname=wyrmsun-legacy +_realpkgname=wyrmsun +pkgver=3.5.4 +pkgrel=1 +pkgdesc="Real-time strategy game based on history, mythology and fiction (legacy version)" +arch=('i686' 'x86_64') +url='http://andrettin.github.io/' +license=('GPL-2' 'CC0-1.0' 'CC-BY-4.0' 'CC-BY-3.0' 'CC-BY-SA-3.0') +provides=('wyrmsun') +conflicts=('wyrmsun') +depends=('sdl' 'tolua++' 'libvorbis' 'libpng') +makedepends=('cmake' 'boost') +groups=('games') +source=("wyrmsun-${pkgver}.tar.gz::https://github.com/Andrettin/Wyrmsun/archive/v${pkgver}.tar.gz" + "wyrmgus-${pkgver}.tar.gz::https://github.com/Andrettin/Wyrmgus/archive/v${pkgver}.tar.gz" + "oaml-1.0.tar.gz::https://github.com/marcelofg55/oaml/archive/v1.0.tar.gz") +sha512sums=('6041684eb26798a452ec801249768ad8517ecb8a398e5aae9f32a0632908d1285ae379ab877c71f5c6a0f17b39f957960bb6e5a2068221e2686dae041a057614' + '2cb97152e713edc2eb99e3c21bf7bf399792b87de314a4695985e04227e9ff3e98475dfd1e2e6cdcd24872887fa6a56dbb4a5ccda0ed29a7517039b7dd565bb2' + 'e8c5631198ac5695880a6e0c5877b0a8447886122f47ac10c6f05c0d16acf61b9e665018dcf00bec70d453f5f0575671b7ddfb554ad1514aacc8b6ef4191c2d9') +_name='Wyrmsun' +_categories='Game;StrategyGame' + +prepare() { + cp -a ${srcdir}/oaml-1.0/* ${srcdir}/Wyrmgus-${pkgver}/src/oaml/ + cd ${srcdir}/Wyrmgus-${pkgver}/src/oaml + cmake . + make + + # fixing paths for being fhs-compliant + sed -i -e 's/BINDIR "bin"/BINDIR "games"/g' ${srcdir}/Wyrmgus-${pkgver}/CMakeLists.txt + sed -i -e 's/DATADIR share\/wyrmsun/DATADIR share\/games\/wyrmsun/g' \ + -e 's/DESTINATION bin/DESTINATION games/g' \ + ${srcdir}/Wyrmsun-${pkgver}/CMakeLists.txt +} + +build() { + cd ${srcdir}/Wyrmgus-${pkgver} + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_USEGAMEDIR=ON . + make + + cd ${srcdir}/Wyrmsun-${pkgver} + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr . + make +} + +package() { + cd ${srcdir}/ + mkdir -p ${pkgdir}/usr/games/ + + cd ${srcdir}/Wyrmgus-${pkgver} + make DESTDIR="$pkgdir" install + mv ${pkgdir}/usr/games/stratagus ${pkgdir}/usr/games/wyrmgus + + cd ${srcdir}/Wyrmsun-${pkgver} + make DESTDIR="$pkgdir" install + + cd ${srcdir}/Wyrmgus-${pkgver} + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" + cd ${srcdir}/Wyrmsun-${pkgver} + install -Dm644 ./graphics/credits.txt "${pkgdir}/usr/share/licenses/$pkgname/graphics_credits.txt" + install -Dm644 ./music/credits.txt "${pkgdir}/usr/share/licenses/$pkgname/music_credits.txt" + install -Dm644 ./sounds/credits.txt "${pkgdir}/usr/share/licenses/$pkgname/sounds_credits.txt" +} diff --git a/x11-ssh-askpass/PKGBUILD b/x11-ssh-askpass/PKGBUILD new file mode 100644 index 0000000..5508b85 --- /dev/null +++ b/x11-ssh-askpass/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=x11-ssh-askpass +pkgver=1.2.4.1 +_debver=1.2.4.1 +_debrel=10 +pkgrel=6 +pkgdesc='Lightweight passphrase dialog for SSH' +url='http://www.jmknoble.net/software/x11-ssh-askpass/' +license=('Expat') +arch=('i686' 'x86_64') +depends=('libxt') +makedepends=('xorg-imake' 'quilt') +source=("https://deb.debian.org/debian/pool/main/s/ssh-askpass/ssh-askpass_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/s/ssh-askpass/ssh-askpass_$_debver-$_debrel.debian.tar.xz") +sha512sums=('879887cc1d6eb26662494e3a6b59b79a8d153b354abf86e8e8667940545c8e07d0aa051491f5ba6ca5273e3a7fcc367edb4cc79bb2e4bf1bdbd0e234690ad6b9' + '888dd5fd096f9524f2dc75cc4f00f4e4ed931f446245ffff02225608d36cac7d6c3a8307a5274e73f798844c02cddec718cab4af39e5b9097d2227af3f43d11b') +install=${pkgname}.install + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --mandir=/usr/share/man \ + --libexecdir=/usr/libexec/ssh \ + --with-app-defaults-dir=/usr/share/X11/app-defaults \ + + xmkmf + make includes + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install install.man + install -d "${pkgdir}/usr/share/licenses/${pkgname}" + sed '109,174p;d' README > "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/x11-ssh-askpass/x11-ssh-askpass.install b/x11-ssh-askpass/x11-ssh-askpass.install new file mode 100644 index 0000000..33d673e --- /dev/null +++ b/x11-ssh-askpass/x11-ssh-askpass.install @@ -0,0 +1,5 @@ +post_upgrade() { + if [[ $(vercmp 1.2.4.1-5 "$2") -eq 1 ]]; then + echo "The SSH_ASKPASS environment variable is not exported by default anymore. Set it in /etc/profile to revert to the previous behavior" + fi +} diff --git a/x11vnc/PKGBUILD b/x11vnc/PKGBUILD new file mode 100644 index 0000000..68fb5c0 --- /dev/null +++ b/x11vnc/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +pkgname=x11vnc +pkgver=0.9.16 +_debver=$pkgver +_debrel=7 +pkgrel=2 +epoch=1 +pkgdesc='VNC server for real X displays' +url='https://github.com/LibVNC/x11vnc' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libvncserver' 'libressl' 'libxcrypt' 'libxtst' 'libxext' 'libxinerama' + 'libxrandr' 'libxfixes' 'libxdamage' 'libxcomposite' 'libx11' + 'libxi' 'xenocara-xdpyinfo') +optdepends=('tk: for GUI support' + 'net-tools: for -auth guess' + 'xenocara-video-dummy: for Xdummy script') +makedepends=('quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/LibVNC/x11vnc/archive/refs/tags/${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/x/x11vnc/x11vnc_${_debver}-${_debrel}.debian.tar.xz" + "patch-src_sslhelper.patch") +sha512sums=('69f65ee312f8dede6051b401304987502a213c6c28c7f41e855734f11de1fae14d5d493dc9c28b2e4b7c0be55f8dbd3b35dd2610aae910183772c3e626736fec' + '4609552c6080a807bc383debb47f734af66c2365387331c9cc029be8969b47c9c3b273a5e22db57d942fc8574a0c0857f6122a8a2a515f9d162c68643b8552fd' + '3e502a2a482cfb7563d38e84d3d6ef81c66f71d3497acc1b304f4af2d9f9b4270ead24aa76b201c850370202dee7aa51224193fe0efb5b95d2152526b4ba4de2') + +prepare() { + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # additional fixes + patch -Np1 -i ${srcdir}/patch-src_sslhelper.patch + + autoreconf -vfi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix='/usr' --mandir='/usr/share/man' + make +} + +package() { + make -C ${pkgname}-${pkgver} DESTDIR="$pkgdir" install + install ${pkgname}-${pkgver}/misc/{rx11vnc,Xdummy} "${pkgdir}/usr/bin" + install -Dvm644 ${pkgname}-${pkgver}/COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/x11vnc/patch-src_sslhelper.patch b/x11vnc/patch-src_sslhelper.patch new file mode 100644 index 0000000..b3aace7 --- /dev/null +++ b/x11vnc/patch-src_sslhelper.patch @@ -0,0 +1,85 @@ +$OpenBSD: patch-src_sslhelper_c,v 1.1 2018/08/09 15:04:21 sthen Exp $ + +Index: src/sslhelper.c +--- a/src/sslhelper.c ++++ b/src/sslhelper.c +@@ -803,7 +803,7 @@ static int pem_passwd_callback(char *buf, int size, in + static int crl_callback(X509_STORE_CTX *callback_ctx) { + const ASN1_INTEGER *revoked_serial; + X509_STORE_CTX *store_ctx; +-#if OPENSSL_VERSION_NUMBER > 0x10100000L ++#if OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + X509_OBJECT *obj; + #else + X509_OBJECT obj; +@@ -829,7 +829,7 @@ static int crl_callback(X509_STORE_CTX *callback_ctx) + * the current certificate in order to verify it's integrity. */ + store_ctx = X509_STORE_CTX_new(); + X509_STORE_CTX_init(store_ctx, revocation_store, NULL, NULL); +-#if OPENSSL_VERSION_NUMBER > 0x10100000L ++#if OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + obj = X509_OBJECT_new(); + rc=X509_STORE_get_by_subject(store_ctx, X509_LU_CRL, subject, obj); + crl = X509_OBJECT_get0_X509_CRL(obj); +@@ -865,7 +865,7 @@ static int crl_callback(X509_STORE_CTX *callback_ctx) + rfbLog("Invalid signature on CRL\n"); + X509_STORE_CTX_set_error(callback_ctx, + X509_V_ERR_CRL_SIGNATURE_FAILURE); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + X509_OBJECT_free(obj); + #else + X509_OBJECT_free_contents(&obj); +@@ -883,7 +883,7 @@ static int crl_callback(X509_STORE_CTX *callback_ctx) + rfbLog("Found CRL has invalid nextUpdate field\n"); + X509_STORE_CTX_set_error(callback_ctx, + X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + X509_OBJECT_free(obj); + #else + X509_OBJECT_free_contents(&obj); +@@ -894,14 +894,14 @@ static int crl_callback(X509_STORE_CTX *callback_ctx) + rfbLog("Found CRL is expired - " + "revoking all certificates until you get updated CRL\n"); + X509_STORE_CTX_set_error(callback_ctx, X509_V_ERR_CRL_HAS_EXPIRED); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + X509_OBJECT_free(obj); + #else + X509_OBJECT_free_contents(&obj); + #endif + return 0; /* Reject connection */ + } +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + X509_OBJECT_free(obj); + #else + X509_OBJECT_free_contents(&obj); +@@ -912,7 +912,7 @@ static int crl_callback(X509_STORE_CTX *callback_ctx) + * the current certificate in order to check for revocation. */ + store_ctx = X509_STORE_CTX_new(); + X509_STORE_CTX_init(store_ctx, revocation_store, NULL, NULL); +-#if OPENSSL_VERSION_NUMBER > 0x10100000L ++#if OPENSSL_VERSION_NUMBER > 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + obj = X509_OBJECT_new(); + rc=X509_STORE_get_by_subject(store_ctx, X509_LU_CRL, issuer, obj); + crl = X509_OBJECT_get0_X509_CRL(obj); +@@ -942,7 +942,7 @@ static int crl_callback(X509_STORE_CTX *callback_ctx) + "revoked per CRL from issuer %s\n", serial, serial, cp); + OPENSSL_free(cp); + X509_STORE_CTX_set_error(callback_ctx, X509_V_ERR_CERT_REVOKED); +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + X509_OBJECT_free(obj); + #else + X509_OBJECT_free_contents(&obj); +@@ -950,7 +950,7 @@ static int crl_callback(X509_STORE_CTX *callback_ctx) + return 0; /* Reject connection */ + } + } +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) + X509_OBJECT_free(obj); + #else + X509_OBJECT_free_contents(&obj); diff --git a/x264/PKGBUILD b/x264/PKGBUILD new file mode 100644 index 0000000..d026fbf --- /dev/null +++ b/x264/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=x264 +pkgver=0.160.3011+gitcde9a93 +_debver=$pkgver +_debrel=2.1 +pkgrel=2 +pkgdesc="Free and libre H264/AVC video encoder" +arch=('i686' 'x86_64') +url='https://www.videolan.org/developers/x264.html' +license=('GPL-2') +depends=('l-smash') +makedepends=('nasm' 'quilt') +provides=('libx264') +conflicts=('libx264' 'libx264-10bit' 'libx264-all') +replaces=('libx264' 'libx264-10bit' 'libx264-all') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/x/x264/x264_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/x/x264/x264_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('4c3521bb19978dd6df311f56d2799de2b268403d982955882519e7baef1ba430a66d555f7ffb291ef8b57bf3a7d4697162e9b175e8fded6afafce3a95a00478b' + '60923789705d36a1f46231c12cfac7c1cf0a50c3e3e0e769725080a2815abe59050576b00a3a93f22cf299a4521e11793f2841799bb9b5e81c64f61ddfad4f91') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-shared \ + --enable-pic \ + --enable-lto \ + --disable-avs + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install-cli install-lib-shared + install -Dm644 COPYING -t ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/xa/PKGBUILD b/xa/PKGBUILD new file mode 100644 index 0000000..ed94000 --- /dev/null +++ b/xa/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=xa +pkgver=2.3.11 +pkgrel=1 +pkgdesc='Cross-assembler for the 6502 microprocessor' +arch=('i686' 'x86_64') +url='https://www.floodgap.com/retrotech/xa/' +license=('GPL-2') +makedepends=('setconf') +source=("https://www.floodgap.com/retrotech/xa/dists/$pkgname-$pkgver.tar.gz") +sha512sums=('2be31b6a67d30e94be616c465591614881028a8bc308202de7561a5719573582b3f29a205a0be76e1f9071621b4882c9aef95cf3494f376e88edc40afa1545dc') + +prepare() { + cd $pkgname-$pkgver + setconf Makefile CFLAGS="$CFLAGS -fPIC -Wl,-z,relro,-z,now" + setconf Makefile LDFLAGS="$LDFLAGS -z,relro,-z,now" +} + +build() { + make -C $pkgname-$pkgver +} + +package() { + make -C $pkgname-$pkgver DESTDIR="$pkgdir/usr" install + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/xapian-core/PKGBUILD b/xapian-core/PKGBUILD new file mode 100644 index 0000000..521ab59 --- /dev/null +++ b/xapian-core/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=xapian-core +pkgver=1.4.18 +pkgrel=1 +epoch=1 +pkgdesc='Free search engine library.' +arch=('i686' 'x86_64') +url="https://www.xapian.org/" +license=('GPL-2') +makedepends=('util-linux') +depends=('bash' 'gcc-libs' 'glibc' 'zlib' 'libutil-linux') +options=('libtool') +source=("https://oligarchy.co.uk/xapian/${pkgver}/${pkgname}-${pkgver}.tar.xz"{,.asc}) +sha512sums=('ba6240054c0d2f92b9f1059aa934cdf35388ee7c7e05f4ef6f9856bdaed8ad821095a348ed9a892afdf18c3c0ad20e163028ad0ed3a9934bd69b861e814678ef' + 'SKIP') +validpgpkeys=('08E2400FF7FE8FEDE3ACB52818147B073BAD2B07') # Olly Betts + +prepare() { + cd "${pkgname}-${pkgver}" + autoreconf -vfi +} + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -vDm 644 {AUTHORS,ChangeLog,HACKING,NEWS,README} \ + -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/xarchiver/PKGBUILD b/xarchiver/PKGBUILD new file mode 100644 index 0000000..c7c1dd7 --- /dev/null +++ b/xarchiver/PKGBUILD @@ -0,0 +1,89 @@ +# Maintainer: Jesus E. + +pkgbase=xarchiver +pkgname=('xarchiver' 'xarchiver-gtk2') +pkgver=0.5.4.17 +pkgrel=4 +pkgdesc="GTK+ frontend to various command line archivers" +arch=('i686' 'x86_64') +url='https://github.com/ib/xarchiver' +license=('GPL-2' 'LGPL-2' 'LGPL-3') +depends=('gtk2' 'gtk') +makedepends=('docbook-xsl' 'intltool' 'xmlto' 'gettext-tiny') +optdepends=('binutils: deb support' + 'bzip2: bzip2 support' + 'cpio: RPM support' + 'gzip: gzip support' + 'lha: LHA support' + 'lrzip: lrzip support' + 'lz4: LZ4 support' + 'lzip: lzip support' + 'lzop: LZOP support' + 'p7zip: 7z support' + 'tar: tar support' + 'unzip: ZIP support' + 'xdg-utils: recognize more file types to open' + 'xz: xz support' + 'zip: ZIP support') +source=("https://github.com/ib/xarchiver/archive/${pkgver}/${pkgbase}-${pkgver}.tar.gz" + "xarchiver.appdata.xml" + "libre.patch") +sha512sums=('5b19fd0fb90f99aee0ac2576bc4efce9ef4eef9119fc118815f6d925e3877c0895475fbdf7363d8adfb6371fb7fd73299ea3a7cb3b6d9fff19c89d1d287d3a84' + 'e204bb433cd17f10808f89d75749f5a39359da0c47af2d13310d3224cf6237ea842066fb3bec96b0b68eec4f6523a137fe5206de3a5c330ba17cca935b54bea0' + 'fba3befc70b8df786346f8c4f90e715d40e2f3afab2040b2483bbbea625e6029dad11c2c41e8daff66d1670e44f283941768826f26cdd4bbca797ad8beba8a4e') + +prepare() { + cd $pkgbase-$pkgver + + # remove nonfree unRAR support and fix build xgettext check version + patch -p1 -i "$srcdir/libre.patch" + + touch {NEWS,AUTHORS} + autoreconf -vi +} + +build() { + # GTK+ 3 version + [ -d gtk ] || cp -r $pkgbase-$pkgver gtk + cd gtk + ./configure \ + --prefix=/usr \ + --disable-plugin + make + + cd "$srcdir" + # GTK+ 2 version + [ -d gtk2 ] || cp -r $pkgbase-$pkgver gtk2 + cd gtk2 + ./configure \ + --prefix=/usr \ + --enable-gtk2 \ + --disable-plugin + make +} + +package_xarchiver() { + depends=(gtk) + + cd gtk + make DESTDIR="$pkgdir" install + install -Dm644 "$srcdir/$pkgname.appdata.xml" -t "$pkgdir/usr/share/metainfo" + + cd ../$pkgbase-$pkgver + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} + +package_xarchiver-gtk2() { + pkgdesc+=' (GTK+ 2 version)' + depends=(gtk2) + conflicts=(xarchiver) + + cd gtk2 + make DESTDIR="$pkgdir" install + + cd ../$pkgbase-$pkgver + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname + + # ignore package by appstream to avoid duplicated ids + echo 'X-AppStream-Ignore=true' >> "$pkgdir/usr/share/applications/xarchiver.desktop" +} diff --git a/xarchiver/libre.patch b/xarchiver/libre.patch new file mode 100644 index 0000000..d09c54d --- /dev/null +++ b/xarchiver/libre.patch @@ -0,0 +1,81 @@ +diff --unified --recursive --text xarchiver-0.5.4.17/configure xarchiver-0.5.4.17/configure +--- xarchiver-0.5.4.17/configure 2021-01-24 20:21:04.000000000 +0100 ++++ xarchiver-0.5.4.17/configure 2021-06-15 18:46:26.605339641 +0100 +@@ -13123,8 +13123,8 @@ + + + xgversion="`xgettext --version | head -1 | grep -Eo '[0-9.]+$'`" +-if test x"$xgversion" \< x"0.16"; then : +- as_fn_error $? "GNU gettext tools must be at least version 0.16" "$LINENO" 5 ++if test x"$xgversion" \< x""; then : ++ as_fn_error $? "GNU gettext tools must be at least version 0" "$LINENO" 5 + fi + GETTEXT_PACKAGE=xarchiver + +diff --unified --recursive --text xarchiver-0.5.4.17/configure.ac xarchiver-0.5.4.17/configure.ac +--- xarchiver-0.5.4.17/configure.ac 2021-01-24 20:21:04.000000000 +0100 ++++ xarchiver-0.5.4.17/configure.ac 2021-06-15 18:43:52.635113814 +0100 +@@ -89,7 +89,7 @@ + dnl ******************** + IT_PROG_INTLTOOL([0.40.0], [no-xml]) + xgversion="`xgettext --version | head -1 | grep -Eo '[[0-9.]]+$'`" +-AS_IF([test x"$xgversion" \< x"0.16"], AC_MSG_ERROR([GNU gettext tools must be at least version 0.16])) ++AS_IF([test x"$xgversion" \< x""], AC_MSG_ERROR([GNU gettext tools must be at least version 0])) + GETTEXT_PACKAGE=m4_default([], [AC_PACKAGE_NAME]) + AC_SUBST([GETTEXT_PACKAGE]) + AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [Name of default gettext domain]) +diff --unified --recursive --text xarchiver-0.5.4.17/doc/html/ch03s03.html xarchiver-0.5.4.17/doc/html/ch03s03.html +--- xarchiver-0.5.4.17/doc/html/ch03s03.html 2021-01-24 20:21:04.000000000 +0100 ++++ xarchiver-0.5.4.17/doc/html/ch03s03.html 2021-06-15 18:49:05.615572859 +0100 +@@ -1,6 +1,6 @@ + + General

    General

    Startup

    +- At startup, Xarchiver detects the available installed archivers (tar,rar,zip etc) and the script xdg-open for handling different file types. Since Xarchiver is a front end (a graphic user interface to the command line executables) it can't create archives whose archiver is not available. For instance if you have the free edition of rar, unrar, Xarchiver can't create rar archives since unrar allows rar archives to be opened, tested and extracted but not to be created. ++ At startup, Xarchiver detects the available installed archivers (tar,rar,zip etc) and the script xdg-open for handling different file types. Since Xarchiver is a front end (a graphic user interface to the command line executables) it can't create archives whose archiver is not available. For instance if you have unar, Xarchiver can't create rar archives since unar allows rar archives to be opened, tested and extracted but not to be created. +

    How it works

    + Xarchiver will run in the background the command line executable of the archiver with the archiver's proper switches to perform the selected operation. If something goes wrong Xarchiver reports the full output of the archiver executable in the command line output window. Starting with release 0.5 the files in the archive can be opened within Xarchiver. The script xdg-open will detect the file type and run the proper application to handle it. If you don't have such script installed in your system (it's found in the xdg-utils package) Xarchiver will recognize HTML, txt and images files only. The Preferences dialog will notify this to you when you click the Advanced section inside it. +

    Drag and Drop

    +diff --unified --recursive --text xarchiver-0.5.4.17/doc/xarchiver.docbook xarchiver-0.5.4.17/doc/xarchiver.docbook +--- xarchiver-0.5.4.17/doc/xarchiver.docbook 2021-01-24 20:21:04.000000000 +0100 ++++ xarchiver-0.5.4.17/doc/xarchiver.docbook 2021-06-15 18:51:07.425751517 +0100 +@@ -305,7 +305,7 @@ +

    + Startup + +- At startup, &app; detects the available installed archivers (tar,rar,zip etc) and the script xdg-open for handling different file types. Since &app; is a front end (a graphic user interface to the command line executables) it can't create archives whose archiver is not available. For instance if you have the free edition of rar, unrar, &app; can't create rar archives since unrar allows rar archives to be opened, tested and extracted but not to be created. ++ At startup, &app; detects the available installed archivers (tar,rar,zip etc) and the script xdg-open for handling different file types. Since &app; is a front end (a graphic user interface to the command line executables) it can't create archives whose archiver is not available. For instance if you have unar, &app; can't create rar archives since unar allows rar archives to be opened, tested and extracted but not to be created. + +
    +
    +diff --unified --recursive --text xarchiver-0.5.4.17/src/main.c xarchiver-0.5.4.17/src/main.c +--- xarchiver-0.5.4.17/src/main.c 2021-01-24 20:21:04.000000000 +0100 ++++ xarchiver-0.5.4.17/src/main.c 2021-06-15 19:04:56.716967831 +0100 +@@ -629,8 +629,6 @@ + + if (path) + archiver[type].is_compressor = TRUE; +- else +- path = g_find_program_in_path("unrar"); + + if (path) + { +diff --unified --recursive --text xarchiver-0.5.4.17/src/rar.c xarchiver-0.5.4.17/src/rar.c +--- xarchiver-0.5.4.17/src/rar.c 2021-01-24 20:21:04.000000000 +0100 ++++ xarchiver-0.5.4.17/src/rar.c 2021-06-15 19:21:50.398454588 +0100 +@@ -39,9 +39,6 @@ + + id = strstr(output, "\nRAR "); + +- if (!id) +- id = strstr(output, "\nUNRAR "); +- + if (id) + { + version = *(strchr(id, ' ') + 1); +diff --unified --recursive --text xarchiver-0.5.4.17.orig/po/LINGUAS xarchiver-0.5.4.17/po/LINGUAS +--- xarchiver-0.5.4.17/po/LINGUAS 2021-01-24 20:21:04.000000000 +0100 ++++ xarchiver-0.5.4.17/po/LINGUAS 2021-06-15 23:19:59.709412000 +0100 +@@ -1,2 +1,2 @@ + # set of available languages (in alphabetic order) +-ar ast bg ca cs da de dz el en_GB es eu fi fr gl he hr hu id it ja kk ku lt lv ms nb nl pa pl pt_BR pt_PT ro ru si sk sq sr sv te th tr ug uk ur vi zh_CN zh_TW ++ar ast bg ca cs da de dz el en_GB fi gl hu id it lt lv nl pa pl ru diff --git a/xarchiver/xarchiver.appdata.xml b/xarchiver/xarchiver.appdata.xml new file mode 100644 index 0000000..1562889 --- /dev/null +++ b/xarchiver/xarchiver.appdata.xml @@ -0,0 +1,19 @@ + + + com.github.xarchiver + xarchiver.desktop + Xarchiver + A GTK+ only archive manager + CC0-1.0 + GPL-2.0 + +

    Xarchiver is a lightweight desktop independent GTK+ frontend for manipulating xz, 7z, lzma, arj, bzip2, gzip, rar, tar, zip, rpm, lz4, compress, zstd, lzip, lrzip, lzop, lha and deb files. It allows you to create archives and add, extract, and delete files from them. Password protected archives in the arj, 7z, rar, zip and lrzip formats are supported.

    +
    + + + http://xarchiver.sourceforge.net/screenshots/main_window.png + + + https://github.com/ib/xarchiver/issues + https://github.com/ib/xarchiver +
    diff --git a/xautolock/PKGBUILD b/xautolock/PKGBUILD new file mode 100644 index 0000000..c645ed2 --- /dev/null +++ b/xautolock/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. +# Committer (Arch): Judd Vinet + +pkgname=xautolock +pkgver=2.2 +_debver=$pkgver +_debrel=8 +pkgrel=2 +pkgdesc="An automatic X screen-locker" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libxss') +makedepends=('xorg-imake' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://deb.debian.org/debian/pool/main/x/xautolock/xautolock_$pkgver.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xautolock/xautolock_$_debver-$_debrel.debian.tar.xz") +sha512sums=('5f9dcc25cda706610e77a74235c4b421ca3a833d154b1a269057f0774579e1c6ec36fe0e5be5fadd6942ce8c1640a760f891397586b162e6024b524635153d04' + '7cc8e6e71ac6607cf446de586d25d876e1a97acce65e4261d93be002f8bdb92a25f9a07a14ed0220aec501c89e130b44b8b6065ab5972dd3089bf5128e67f828') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + xmkmf + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" install.man + install -Dm644 License -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/xbanish/PKGBUILD b/xbanish/PKGBUILD new file mode 100644 index 0000000..6c7d902 --- /dev/null +++ b/xbanish/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=xbanish +pkgver=1.7 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Hide the mouse cursor when typing" +url='https://github.com/jcs/xbanish' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('libxfixes' 'libxi') +makedepends=('libxt' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/x/xbanish/xbanish_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xbanish/xbanish_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('f790ea888812bb6b7793f0a60a900724fc407ec4485672e37d464387ffacfa4bf2dc891862f3fed06948cda31024745816b3adb58074c4578edc6a9848f2bd08' + '53fb3d24b967fcff635ae615ef93af8ca79aa7d45299f2d9979a0b670b41b6cc529cd7c5fd3cd276b18fca394dece7d1b379ea5df00168e0df9ec00cca1536c6') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + install -Dm755 xbanish "$pkgdir/usr/bin/xbanish" + install -Dm644 xbanish.1 "$pkgdir/usr/share/man/man1/xbanish.1" + install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" + install -Dm644 debian/copyright -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/xbattmon/PKGBUILD b/xbattmon/PKGBUILD new file mode 100644 index 0000000..eebec90 --- /dev/null +++ b/xbattmon/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=xbattmon +pkgver=1.1 +pkgrel=1 +pkgdesc="Simple battery monitor for X" +arch=('i686' 'x86_64') +url='https://git.2f30.org/xbattmon' +license=('Expat') +depends=('libx11') +source=("https://dl.2f30.org/releases/${pkgname}-${pkgver}.tar.gz") +sha512sums=('ba1de89f68b2efa0990d917af7d5d7abc38c438c074d5ce44eeadebdd01ab1f2c2d540d6d0474b644c691289a907072030a2aa48e6f9ccee3b0d2135de556769') + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="$pkgdir" PREFIX=/usr install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/xbindkeys/PKGBUILD b/xbindkeys/PKGBUILD new file mode 100644 index 0000000..ddc3c3c --- /dev/null +++ b/xbindkeys/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=xbindkeys +pkgver=1.8.7 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Launch shell commands with your keyboard or your mouse under X" +arch=('i686' 'x86_64') +url='https://www.nongnu.org/xbindkeys/xbindkeys.html' +license=('GPL-2') +depends=('libx11' 'guile') +makedepends=('quilt') +optdepends=('tk: for xbindkeys_show') +source=("https://www.nongnu.org/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xbindkeys/xbindkeys_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('a6b1478e8ef4bedc686fdd15abc11a8a592ac17c69e1a5a13f60e735e9be9646faed62e980cdac4aa7bc7e3253237465de38dee98935dd3f9911d4e48209b2e9' + '00fc2d906ea8f6be58efbb6fb2e115f913ccab39523125cbc40f6defacc63a262687d83343033324c3a13d82a88983839f41803b24443e8095e69d94bf02e37b') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + # pick up new guile versions + autoreconf -vi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/xcb-proto/PKGBUILD b/xcb-proto/PKGBUILD new file mode 100644 index 0000000..8f4a76c --- /dev/null +++ b/xcb-proto/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +pkgname=xcb-proto +_openbsdver=6.9 +pkgver=1.14.1 +pkgrel=1 +pkgdesc="XML-XCB protocol descriptions, provided by Xenocara" +arch=(any) +url="https://www.xenocara.org" +license=('X11') +makedepends=('python' 'libxml2' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/proto/xcb-proto-$pkgver.tar.lz{,.sig}) +sha512sums=('3ae13c8fc68609ceb60fe6c5706c66569e0af4cc077306d3c434dc1bdea5f60322c908cf83b08ae987ea702441eace05aea753b788263baf8bd4ad2ab4fd1db8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/proto/xcb-proto" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/proto/xcb-proto" + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/proto/xcb-proto" + make -k check || /bin/true +} + +package() { + cd "xenocara-$_openbsdver/proto/xcb-proto" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xcb-util-cursor/PKGBUILD b/xcb-util-cursor/PKGBUILD new file mode 100644 index 0000000..23d7bd4 --- /dev/null +++ b/xcb-util-cursor/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=xcb-util-cursor +_openbsdver=6.9 +pkgver=0.1.3 +pkgrel=3 +pkgdesc="XCB cursor library, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxcb' 'xcb-util-renderutil' 'xcb-util-image') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/xcb-util-cursor-$pkgver.tar.lz{,.sig}) +sha512sums=('80c7bbdc65618b41ec9b8a5be3bf8d9432c35ff572c1910523ec337a562833fb946886ddad6cabfd4f76ee376ab2f855ce6ed26c06e9f2b1ee8ae4ecdeceaa58' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/xcb-util-cursor" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/xcb-util-cursor" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/lib/xcb-util-cursor" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xcb-util-image/PKGBUILD b/xcb-util-image/PKGBUILD new file mode 100644 index 0000000..6cc3efc --- /dev/null +++ b/xcb-util-image/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=xcb-util-image +_openbsdver=6.9 +pkgver=0.4.0 +pkgrel=3 +pkgdesc="Utility libraries for XC Binding - Port of Xlib's XImage and XShmImage functions, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxcb>=1.14' 'xcb-util>=0.4.0') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/xcb-util-image-$pkgver.tar.lz{,.sig}) +sha512sums=('20bcc19911115cc793eb7ddd71263c5ec0543576abc6cdc39710fb3063cbb6bddceb1263edc025ae9a70246f2693c824386f9f448975ba63b49c7904ed7b9295' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/xcb-util-image" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/xcb-util-image" + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd "xenocara-$_openbsdver/lib/xcb-util-image" + make check +} + +package() { + cd "xenocara-$_openbsdver/lib/xcb-util-image" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xcb-util-keysyms/COPYING b/xcb-util-keysyms/COPYING new file mode 100644 index 0000000..1747751 --- /dev/null +++ b/xcb-util-keysyms/COPYING @@ -0,0 +1,267 @@ +/* Copyright (C) 2007 Bart Massey + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or their + * institutions shall not be used in advertising or otherwise to promote the + * sale, use or other dealings in this Software without prior written + * authorization from the authors. + */ + +/* + * Copyright (C) 2008-2009 Julien Danjou + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or + * their institutions shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without + * prior written authorization from the authors. + */ + +/* + * Copyright (C) 2008 Arnaud Fontaine + * Copyright (C) 2007-2008 Vincent Torri + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or + * their institutions shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without + * prior written authorization from the authors. + +/* + * Copyright © 2008 Bart Massey + * Copyright © 2008 Julien Danjou + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or + * their institutions shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without + * prior written authorization from the authors. + */ + +/* + * Copyright © 2008 Keith Packard + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or + * their institutions shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without + * prior written authorization from the authors. + */ + +/* + * Copyright © 2008 Bart Massey + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or + * their institutions shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without + * prior written authorization from the authors. + */ + +/* + * Copyright © 2008 Ian Osgood + * Copyright © 2008 Jamey Sharp + * Copyright © 2008 Josh Triplett + * Copyright © 2008 Ulrich Eckhardt + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or + * their institutions shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without + * prior written authorization from the authors. + */ + +/* Copyright © 2006 Jamey Sharp. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or their + * institutions shall not be used in advertising or otherwise to promote the + * sale, use or other dealings in this Software without prior written + * authorization from the authors. + */ + +/* Copyright © 2006 Ian Osgood + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the names of the authors or their + * institutions shall not be used in advertising or otherwise to promote the + * sale, use or other dealings in this Software without prior written + * authorization from the authors. + */ + +/* Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/xcb-util-keysyms/PKGBUILD b/xcb-util-keysyms/PKGBUILD new file mode 100644 index 0000000..86966af --- /dev/null +++ b/xcb-util-keysyms/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=xcb-util-keysyms +_openbsdver=6.9 +pkgver=0.4.0 +pkgrel=3 +pkgdesc="Utility libraries for XC Binding - Standard X key constants and conversion to/from keycodes, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxcb>=1.14') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/xcb-util-keysyms-$pkgver.tar.lz{,.sig} + COPYING) +sha512sums=('634ff482b01283a14f5a4b63b43335c7ec2025ab85d6926f80b7deb3612fa1fca7239d8deff1873cb0e12af9c61eeb744ea283acbd0e0e0d1c4af0a536b83672' + 'SKIP' + '62f83468f9d9503a5a8c1ebaac78cbaefe3c485f8bfd7192817ec59254872fe2914ed66ae8b9e7f7a6ef5af283048c11390f44eb8f0f70b1c136ef5c75282e8c') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/xcb-util-keysyms" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/xcb-util-keysyms" + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd "xenocara-$_openbsdver/lib/xcb-util-keysyms" + make check +} + +package() { + cd "xenocara-$_openbsdver/lib/xcb-util-keysyms" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xcb-util-renderutil/PKGBUILD b/xcb-util-renderutil/PKGBUILD new file mode 100644 index 0000000..172c186 --- /dev/null +++ b/xcb-util-renderutil/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=xcb-util-renderutil +_openbsdver=6.9 +pkgver=0.3.9 +pkgrel=3 +pkgdesc="Utility libraries for XC Binding - Convenience functions for the Render extension, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxcb>=1.14') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/xcb-util-renderutil-$pkgver.tar.lz{,.sig}) +sha512sums=('7f8fc7f36ca1cf4b7bfb7889c5a403b972f7d91511ec9bc2de27774dc5de73c07aa97de9f1ddd7ef78232ff8da2b407bdb8237089edf38a32420fee248c45163' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/xcb-util-renderutil" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/xcb-util-renderutil" + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd "xenocara-$_openbsdver/lib/xcb-util-renderutil" + make check +} + +package() { + cd "xenocara-$_openbsdver/lib/xcb-util-renderutil" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xcb-util-wm/PKGBUILD b/xcb-util-wm/PKGBUILD new file mode 100644 index 0000000..da27b9b --- /dev/null +++ b/xcb-util-wm/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=xcb-util-wm +_openbsdver=6.9 +pkgver=0.4.1 +pkgrel=3 +pkgdesc="Utility libraries for XC Binding - client and window-manager helpers for ICCCM, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxcb>=1.14') +makedepends=('xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/xcb-util-wm-$pkgver.tar.lz{,.sig}) +sha512sums=('b4caf0896b21052014a9adac509801026d78dfd2b6ec851714bfde1f861da651bb90e16cc59bdddddb3a9dff4e411809cf44c9c67ec05902affa91713d39945d' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/xcb-util-wm" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/xcb-util-wm" + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd "xenocara-$_openbsdver/lib/xcb-util-wm" + make check +} + +package() { + cd "xenocara-$_openbsdver/lib/xcb-util-wm" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xcb-util-xrm/PKGBUILD b/xcb-util-xrm/PKGBUILD new file mode 100644 index 0000000..ac1dd52 --- /dev/null +++ b/xcb-util-xrm/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=xcb-util-xrm +pkgver=1.3 +pkgrel=2 +pkgdesc='XCB utility functions for the X resource manager' +url='https://github.com/Airblader/xcb-util-xrm' +arch=(i686 x86_64) +license=(X11) +depends=(xcb-util) +makedepends=(xenocara-util-macros libx11) +source=(https://github.com/Airblader/xcb-util-xrm/releases/download/v${pkgver}/xcb-util-xrm-${pkgver}.tar.gz) +sha512sums=('d8a427ed6d1f1568ce58db9b89284e4fafcc7b7929c31bccf70e5ccd91f3f6cb9c87ff25c4e64d95b0c6215cfecde6c0ee2b3a18759817aea3169ba87602c5de') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xcb-util/PKGBUILD b/xcb-util/PKGBUILD new file mode 100644 index 0000000..5df9242 --- /dev/null +++ b/xcb-util/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +pkgname=xcb-util +_openbsdver=6.9 +pkgver=0.4.0 +pkgrel=3 +pkgdesc="Utility libraries for XC Binding, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxcb>=1.14') +makedepends=('gperf' 'xenocara-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/lib/xcb-util-$pkgver.tar.lz{,.sig}) +sha512sums=('53dfac3c0ad945d225a4b12985fba396a4ea8f8990e2f5cbcf2e98a76941b264509260dd139345511c448e6175ad48ecea014cfdde6c0b1ff00880eb00c880ea' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/lib/xcb-util" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/lib/xcb-util" + ./configure --prefix=/usr --disable-static + make +} + +check() { + cd "xenocara-$_openbsdver/lib/xcb-util" + make check +} + +package() { + cd "xenocara-$_openbsdver/lib/xcb-util" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xcftools/PKGBUILD b/xcftools/PKGBUILD new file mode 100644 index 0000000..a8f5202 --- /dev/null +++ b/xcftools/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +pkgname=xcftools +pkgver=1.0.7 +pkgrel=1 +pkgdesc="Command line tools for use with the free and libre XCF image format (includes xcf2png)" +url='http://henning.makholm.net/software' +arch=('i686' 'x86_64') +license=('Public-Domain') +depends=('libpng' 'perl') +makedepends=('gettext-tiny') +source=("https://security.debian.org/debian-security/pool/updates/main/x/xcftools/xcftools_${pkgver}.orig.tar.gz" + "xcftools.patch" + "security.patch" + "fix-build.patch") +sha512sums=('88af4791e18650562db259bd96bfd122364c21b7ea7a5692d4679e619667bdbcc179040a1d912c8fd623bc2d2735461da237ccde4646553b15d6072cc4493203' + 'd85529e77666b5453f61c6e48eaf5569b05ae6ab9eab5e549062385dcae67981a10efbbe4a69b9dc344daea34c5b424d6b4ac44430cf79268433da4be676bd10' + 'af952c9b1ac8b9e0a62d7329de56d63e8a3a4719adc3ac7d9c1d45fea5473705a3e0e4d883a6c9f0291a0554b1d72bcb87c45167f50e029469a81e9eceb44533' + 'cbfabf241a074bb08b2c1ec445dd79e17b8216a55def3953100c133c2e6e8b4e52e3d873f250a95488d884b5d4c4ed4b2548717d95d6b988e83fa98073f475f1') + +prepare() { + grep -A16 License "$pkgname-$pkgver/README" > LICENSE + cd $pkgname-$pkgver + patch -i "$srcdir/xcftools.patch" + patch -i "$srcdir/security.patch" + patch -i "$srcdir/fix-build.patch" +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + make DESTDIR="$pkgdir" -C $pkgname-$pkgver install + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/xcftools/fix-build.patch b/xcftools/fix-build.patch new file mode 100644 index 0000000..c48b1a5 --- /dev/null +++ b/xcftools/fix-build.patch @@ -0,0 +1,11 @@ +--- a/Makefile.in 2022-04-13 15:01:28.000000000 +0200 ++++ b/Makefile.in 2022-04-13 15:04:09.996440508 +0200 +@@ -160,7 +160,7 @@ + touch $@ + + po/%.mo: po/%.po +- msgfmt -c -o$@ $< ++ msgfmt -c -o $@ $< + + po/stamp: $(patsubst %,po/%.mo,$(LINGUAS)) + if ! make -q po/$(APPNAME).pot ; then \ diff --git a/xcftools/security.patch b/xcftools/security.patch new file mode 100644 index 0000000..d4159e3 --- /dev/null +++ b/xcftools/security.patch @@ -0,0 +1,61 @@ +From 59c38e3e45b9112c2bcb4392bccf56e297854f8a Mon Sep 17 00:00:00 2001 +From: Anton Gladky +Date: Sat, 23 May 2020 17:44:33 +0200 +Subject: [PATCH] Prevent integer overflow in computeDimensions. #12 + +Fix for CVE-2019-5086 and CVE-2019-5087 + +The code checks the sizes of width and height and stop execution, if it exceeds +maximal values. +--- + xcf-general.c | 16 ++++++++++++++++ + xcftools.h | 2 +- + 2 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/xcf-general.c b/xcf-general.c +index b23c260..169b4f7 100644 +--- a/xcf-general.c ++++ b/xcf-general.c +@@ -19,6 +19,7 @@ + #include "xcftools.h" + #include + #include ++#include + #ifdef HAVE_ICONV + # include + #elif !defined(ICONV_CONST) +@@ -182,6 +183,21 @@ xcfString(uint32_t ptr,uint32_t *after) + void + computeDimensions(struct tileDimensions *d) + { ++ // [ CVE-2019-5086 and CVE-2019-5087 ] ++ // This part of code is the check to prevent integer overflow, see CVE-2019-5086 and CVE-2019-5087 ++ ++ if ((d->c.l + d->width)*4 > INT_MAX) { ++ fprintf(stderr,("Width is too large (%d)! Stopping execution...\n"), (d->c.l + d->width)); ++ exit(0); ++ } ++ ++ if ((d->c.t + d->height)*4 > INT_MAX) { ++ fprintf(stderr,("Height is too large (%d)! Stopping execution...\n"), (d->c.t + d->height)); ++ exit(0); ++ } ++ ++ // [ CVE-2019-5086 and CVE-2019-5087 ] ++ + d->c.r = d->c.l + d->width ; + d->c.b = d->c.t + d->height ; + d->tilesx = (d->width+TILE_WIDTH-1)/TILE_WIDTH ; +diff --git a/xcftools.h b/xcftools.h +index 5a1efcc..4bb02ea 100644 +--- a/xcftools.h ++++ b/xcftools.h +@@ -121,7 +121,7 @@ FILE* openout(const char*); + void closeout(FILE *,const char*); + + struct rect { +- int t, b, l, r ; ++ int64_t t, b, l, r ; + }; + + #define isSubrect(A,B) \ diff --git a/xcftools/xcftools.patch b/xcftools/xcftools.patch new file mode 100644 index 0000000..1a2d88c --- /dev/null +++ b/xcftools/xcftools.patch @@ -0,0 +1,27 @@ +diff -rupN xcftools-1.0.7.old/Makefile.in xcftools-1.0.7/Makefile.in +--- xcftools-1.0.7.old/Makefile.in 2009-07-03 11:31:56.000000000 +0100 ++++ xcftools-1.0.7/Makefile.in 2012-01-03 13:03:51.152358830 +0000 +@@ -79,7 +79,7 @@ xcf2pnm$e: xcf2pnm.$o $(FILEIO).$o enums + + xcf2png$e: xcf2png.$o $(FILEIO).$o enums.$o xcf-general.$o utils.$o nlsini.$o \ + pixels.$o flatten.$o flatspec.$o scaletab.$o table.$o palette.$o +- $(CC) $(LDFLAGS) $(LIBS) -lpng $^ -o $@ ++ $(CC) $(LDFLAGS) $(LIBS) $^ -lpng -o $@ + + xcfview: xcfview.in Makefile + sed '1s,/usr/bin/perl,@PERL@,' < $< > $@ +diff -rupN xcftools-1.0.7.old/xcf2png.c xcftools-1.0.7/xcf2png.c +--- xcftools-1.0.7.old/xcf2png.c 2009-07-03 11:31:52.000000000 +0100 ++++ xcftools-1.0.7/xcf2png.c 2012-01-03 13:03:36.262509165 +0000 +@@ -71,9 +71,9 @@ init_output(void) + + outfile = openout(flatspec.output_filename); + libpng = png_create_write_struct(PNG_LIBPNG_VER_STRING, +- png_voidp_NULL, ++ (png_voidp)NULL, + my_error_callback, +- png_error_ptr_NULL); ++ (png_voidp)NULL); + if( !libpng ) + FatalUnexpected(_("Couldn't initialize libpng library")); + diff --git a/xclip/PKGBUILD b/xclip/PKGBUILD new file mode 100644 index 0000000..ae96fc7 --- /dev/null +++ b/xclip/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. +# Committer (Arch): Manolis Tzanidakis + +pkgname=xclip +pkgver=0.13 +pkgrel=2 +pkgdesc='Command line interface to the X11 clipboard' +url='https://github.com/astrand/xclip' +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('libxmu') +source=("$pkgname-$pkgver.tar.gz::https://github.com/astrand/xclip/archive/refs/tags/$pkgver.tar.gz") +sha512sums=('191a86194a1503a47c6641a55855dc4aaa8c2c99d2e6f1d46e727feec85a6639041f37ec2265c05c178c0c7d791d3e88bde89223f879effa878812f078485ed2') + +build() { + cd $pkgname-$pkgver + ./bootstrap + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t $pkgdir/usr/share/licenses/$pkgname +} diff --git a/xcursor-premium/PKGBUILD b/xcursor-premium/PKGBUILD new file mode 100644 index 0000000..1e15508 --- /dev/null +++ b/xcursor-premium/PKGBUILD @@ -0,0 +1,20 @@ +# Maintainer: Jesus E. + +pkgname=xcursor-premium +pkgver=0.3 +pkgrel=1 +pkgdesc='Premium X Cursor Theme' +arch=('any') +url='https://store.kde.org/p/999861/' +license=('GPL-2') +source=("http://distro.ibiblio.org/fatdog/source/800/14485-Premium-$pkgver.tar.bz2") +sha512sums=('70a64d8d953f314b032d73c05ab42e7b13bbf17a2b2c978dd0313d00db88bfbedaaa91eecf874a1d35b4b140938f9cf13637a44228983349d4c686746d0d9070') + +package() { + mkdir -p "$pkgdir"/usr/share/icons/{Premium,Premium-left} + cp -R "$srcdir"/Premium-0.3/Premium/{cursors,index.theme} \ + "$pkgdir"/usr/share/icons/Premium + cp -R "$srcdir"/Premium-0.3/Premium-left/{cursors,index.theme} \ + "$pkgdir"/usr/share/icons/Premium-left + install -Dm644 "${srcdir}/Premium-${pkgver}/COPYING" -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/xdg-user-dirs-gtk/PKGBUILD b/xdg-user-dirs-gtk/PKGBUILD new file mode 100644 index 0000000..785f3a6 --- /dev/null +++ b/xdg-user-dirs-gtk/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=xdg-user-dirs-gtk +pkgver=0.10 +pkgrel=2 +pkgdesc="Creates user dirs and asks to relocalize them" +arch=('i686' 'x86_64') +license=('GPL-2') +depends=('gtk' 'xdg-user-dirs') +makedepends=('intltool' 'gettext-tiny' 'gnome-common') +options=('!emptydirs') +url="https://www.gnome.org" +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz) +sha512sums=('c3ef070244cd1c87312c2c2602dbe7bc3dd26eed632b0d8d779580d7ee6259efdda453ab7bdf4415cc72fad7a74d9dd36476189fe446d5627e4db75d905302f5') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc --disable-more-warnings + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/xdg-user-dirs/PKGBUILD b/xdg-user-dirs/PKGBUILD new file mode 100644 index 0000000..c1ef8fc --- /dev/null +++ b/xdg-user-dirs/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=xdg-user-dirs +pkgver=0.17 +pkgrel=2 +pkgdesc="Manage user directories like ~/Desktop and ~/Music" +arch=('i686' 'x86_64') +url="https://www.freedesktop.org/wiki/Software/xdg-user-dirs/" +license=('GPL-2') +depends=('sh') +makedepends=('docbook-xsl') +backup=('etc/xdg/user-dirs.conf' 'etc/xdg/user-dirs.defaults') +source=("https://user-dirs.freedesktop.org/releases/$pkgname-$pkgver.tar.gz" + 'xdg-user-dirs') +sha512sums=('a02cc251f2d0a8bd0dad498901c8c6fbe8dae0e0e156abcaf27b1ded376a1ed369c2e59201d56ab4e38c9d521026fa39199177f3868c30e5c50cc03665dc335f' + '1dc6075267084ba1bfbe2e891d346f19d4da433483fad085baa3527747037ef3f07c4b608a1c2062c64766ca79592596aef2d790a055e9617493928420db2e1f') + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 "$srcdir/xdg-user-dirs" "$pkgdir/etc/X11/xinit/xinitrc.d/xdg-user-dirs" + install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/xdg-user-dirs/xdg-user-dirs b/xdg-user-dirs/xdg-user-dirs new file mode 100644 index 0000000..dbe8abb --- /dev/null +++ b/xdg-user-dirs/xdg-user-dirs @@ -0,0 +1,4 @@ +#!/bin/sh + +# Set up user directories like ~/Desktop and ~/Music +[ -x /usr/bin/xdg-user-dirs-update ] && /usr/bin/xdg-user-dirs-update diff --git a/xdg-utils/PKGBUILD b/xdg-utils/PKGBUILD new file mode 100644 index 0000000..d2736ef --- /dev/null +++ b/xdg-utils/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=xdg-utils +pkgver=1.1.3 +_debver=$pkgver +_debrel=4.1 +pkgrel=3 +pkgdesc="Command line tools that assist applications with a variety of desktop integration tasks" +arch=('any') +url="https://www.freedesktop.org/wiki/Software/xdg-utils/" +license=('Expat') +depends=('sh' 'xenocara-xset') +makedepends=('docbook-xsl' 'lynx' 'xmlto' 'git-legacy' 'quilt') +optdepends=('xenocara-xprop: for Xfce support in xdg-open' + 'perl-file-mimeinfo: for generic support in xdg-open' + 'perl-x11-protocol: Perl X11 protocol support') +source=(https://portland.freedesktop.org/download/$pkgname-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/x/xdg-utils/xdg-utils_$_debver-$_debrel.debian.tar.xz + libre.patch) +sha512sums=('d1f819a211eb4104a90dfdc6fedcb640fd46b15ccfc8762266f8f538c49d74cb00027b8c1af991fb2a200acb4379986ae375700e06a2aa08fb41a38f883acb3e' + '31c30c802b41eaaa67909af309d16469acb2f3793b28b7a6867a63b1e9433fa052677ee7fa0d9eb50f6f7397c6dc692dd23bdadbe2bfce89e8b9f51466f3de6f' + '73392f2eb53b79a6c6969d9c4c5d7f3f70e5998effa429a77f3d4cd385146f2f99d5fd0251b015cd1374b7c4623891eb4e99a25ad9025ab7ca9b3661ccfd1f32') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + + # add Iceape-UXP, Iceweasel-UXP and Midori support + patch -Np1 -i $srcdir/libre.patch +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + # install empty directory to prevent xdg-desktop-menu install *.desktop to fail, see FS#33316 + install -dm755 $pkgdir/usr/share/desktop-directories +} diff --git a/xdg-utils/libre.patch b/xdg-utils/libre.patch new file mode 100644 index 0000000..7cd5fed --- /dev/null +++ b/xdg-utils/libre.patch @@ -0,0 +1,58 @@ +diff --git a/scripts/desc/xdg-settings.xml b/scripts/desc/xdg-settings.xml +index 255d712..8d1e6d0 100644 +--- a/scripts/desc/xdg-settings.xml ++++ b/scripts/desc/xdg-settings.xml +@@ -185,17 +185,17 @@ + + + +- Check whether the default web browser is firefox.desktop, which can be ++ Check whether the default web browser is iceweasel-uxp.desktop, which can be + false even if "get default-web-browser" says that is the current value + (if only some of the underlying settings actually reflect that value) + +- xdg-settings check default-web-browser firefox.desktop ++ xdg-settings check default-web-browser iceweasel-uxp.desktop + + + +- Set the default web browser to google-chrome.desktop ++ Set the default web browser to iceape-uxp.desktop + +- xdg-settings set default-web-browser google-chrome.desktop ++ xdg-settings set default-web-browser iceape-uxp.desktop + + + +diff --git a/scripts/xdg-email.in b/scripts/xdg-email.in +index 3614776..770c8e3 100644 +--- a/scripts/xdg-email.in ++++ b/scripts/xdg-email.in +@@ -453,9 +453,10 @@ fi + + # if BROWSER variable is not set, check some well known browsers instead + if [ x"$BROWSER" = x"" ]; then +- BROWSER=www-browser:links2:elinks:links:lynx:w3m ++ BROWSER=www-browser:elinks:links:lynx + if has_display; then + BROWSER=x-www-browser:firefox:iceweasel:seamonkey:mozilla:epiphany:konqueror:chromium-browser:google-chrome:$BROWSER ++ BROWSER=x-www-browser:iceweasel-uxp:$BROWSER + fi + fi + +diff --git a/scripts/xdg-open.in b/scripts/xdg-open.in +index 630e63e..53bd4cd 100644 +--- a/scripts/xdg-open.in ++++ b/scripts/xdg-open.in +@@ -436,9 +436,9 @@ open_generic() + + # if BROWSER variable is not set, check some well known browsers instead + if [ x"$BROWSER" = x"" ]; then +- BROWSER=www-browser:links2:elinks:links:lynx:w3m ++ BROWSER=www-browser:elinks:links:lynx + if has_display; then +- BROWSER=x-www-browser:firefox:iceweasel:seamonkey:mozilla:epiphany:konqueror:chromium:chromium-browser:google-chrome:$BROWSER ++ BROWSER=x-www-browser:iceweasel-uxp:$BROWSER + fi + fi + diff --git a/xdialog/PKGBUILD b/xdialog/PKGBUILD new file mode 100644 index 0000000..f9633e7 --- /dev/null +++ b/xdialog/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=xdialog +pkgver=2.3.1 +pkgrel=1 +pkgdesc="A drop-in replacement for the 'dialog' or 'cdialog' programs" +url='http://xdialog.free.fr/' # no https available +arch=('i686' 'x86_64') +depends=('gtk2') +makedepends=('intltool' 'gettext-tiny') +license=('GPL-2') +source=("http://xdialog.free.fr/Xdialog-${pkgver}.tar.bz2" + "xdialog-2.3.1-gtk2.patch") +sha512sums=('2a0f6e15297ae3ef54a41da1b1fe2ef376d28757d47433df2b8e9918cd4f95871a630b94ec544bd848e518df7f86934030a71bf0371a1466286bf7d912335525' + 'e1a1d4e93946f89a9f4d2a619fcb0069cd5e6ec1b0c3a3ebcd87b1b601c07a7941ad1edeb1cbe89f22f993667c4431c496a6c9b35a13fd9e7d1b8dbd89546694') + +prepare() { + cd "$srcdir"/Xdialog-$pkgver + patch -p1 <../xdialog-$pkgver-gtk2.patch +} + +build() { + cd "$srcdir"/Xdialog-$pkgver + ./configure --prefix=/usr \ + --mandir="$pkgdir"/usr/share/man --with-gtk2 + # Fix bugs in automake - see Xdialog.spec + sed -i -e "s:RANLIB = @RANLIB@:RANLIB = /usr/bin/ranlib:" lib/Makefile + sed -i -e "s;XGETTEXT = :;XGETTEXT = /usr/bin/xgettext;" po/Makefile + make +} + +package() { + cd "$srcdir"/Xdialog-${pkgver} + make prefix="$pkgdir"/usr install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/xdialog/xdialog-2.3.1-gtk2.patch b/xdialog/xdialog-2.3.1-gtk2.patch new file mode 100644 index 0000000..ffee78d --- /dev/null +++ b/xdialog/xdialog-2.3.1-gtk2.patch @@ -0,0 +1,58 @@ +diff -Naur Xdialog-2.3.1-orig/src/interface.c Xdialog-2.3.1/src/interface.c +--- Xdialog-2.3.1-orig/src/interface.c 2006-08-18 18:13:12.000000000 +0200 ++++ Xdialog-2.3.1/src/interface.c 2006-10-17 21:33:45.000000000 +0200 +@@ -183,6 +183,11 @@ + /* Open a new GTK top-level window */ + window = Xdialog.window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + ++ /* Set window icon (in GTK2 mode only) */ ++ #ifdef USE_GTK2 ++ gtk_window_set_icon_name(window, Xdialog.icon_file); ++ #endif ++ + /* Apply the custom GTK+ theme, if any. */ + parse_rc_file(); + +@@ -276,9 +281,6 @@ + { + GtkWidget *label; + GtkWidget *hbox; +- GdkBitmap *mask; +- GdkColor transparent; +- GdkPixmap *pixmap; + GtkWidget *icon; + gchar text[MAX_LABEL_LENGTH]; + int icon_width = 0; +@@ -287,6 +289,22 @@ + gtk_box_pack_start(Xdialog.vbox, hbox, expand, TRUE, ymult/3); + + if (Xdialog.icon) { ++ ++#ifdef USE_GTK2 ++ if (Xdialog.icon_file != NULL) { ++ icon = gtk_image_new_from_icon_name (Xdialog.icon_file, GTK_ICON_SIZE_DIALOG); ++ /*icon = gtk_image_new_from_file (Xdialog.icon_file);*/ ++ ++ gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, FALSE, 2); ++ gtk_widget_show(icon); ++ icon_width = 60; ++ } ++ ++#else ++ ++ GdkBitmap *mask; ++ GdkColor transparent; ++ GdkPixmap *pixmap; + pixmap = gdk_pixmap_create_from_xpm(Xdialog.window->window, + &mask, &transparent, + Xdialog.icon_file); +@@ -298,6 +316,9 @@ + gtk_widget_show(icon); + icon_width = icon->requisition.width + 4; + } ++ ++#endif ++ + } + + trim_string(label_text, text, MAX_LABEL_LENGTH); diff --git a/xdo/PKGBUILD b/xdo/PKGBUILD new file mode 100644 index 0000000..b0fb759 --- /dev/null +++ b/xdo/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=xdo +pkgver=0.5.7 +pkgrel=1 +pkgdesc='Utility for performing actions on windows in X' +arch=('i686' 'x86_64') +url='https://github.com/baskerville/xdo' +license=('Simplified-BSD') +depends=('libxcb' 'xcb-util-wm' 'xcb-util') +source=(https://github.com/baskerville/${pkgname}/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz) +sha512sums=('0978a8571a35899c916495c9d38458adb6c766db4d498dfacf2f0a46e373f7caa3c3e227096b3e60e03c67b972777cf7519e5b6eee7ebb91f82d4450ac0ff98d') + +build() { + cd $pkgname-$pkgver + make PREFIX=/usr +} + +package() { + cd $pkgname-$pkgver + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# getver: github.com/baskerville/xdo/blob/master/VERSION +# vim:ts=2 sw=2 et: diff --git a/xdotool/PKGBUILD b/xdotool/PKGBUILD new file mode 100644 index 0000000..e22cedb --- /dev/null +++ b/xdotool/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +pkgname=xdotool +pkgver=3.20160805.1 +_debver=$pkgver +_debrel=5 +pkgrel=2 +pkgdesc="Command-line X11 automation tool" +arch=('i686' 'x86_64') +url='https://www.semicomplete.com/projects/xdotool/' +license=('Modified-BSD') +depends=('libxtst' 'libxinerama' 'libxkbcommon') +makedepends=('quilt') +source=("https://github.com/jordansissel/xdotool/releases/download/v$pkgver/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xdotool/xdotool_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('e27b1029ee954ea17643ed489a00a1856e5687b03772c0f10a8e50cde3c3c957b57a3ba9890005474a744a228ef4827a83770d6890479c37a1f98f4fd7b1ff6c' + 'f1bc02dfdc1e3bc52a30c6799a8c29857dddd78cf9c985a9fa358da9a4fd8552728589d0e3f2a2e320cde9f98677c3dfe9f6ea9da755293155d070cf4de9962d') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0002-record-upstream-version-info-Closes-795809.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make WITHOUT_RPATH_FIX=1 +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + make PREFIX="$pkgdir/usr" INSTALLMAN="$pkgdir/usr/share/man" install + + # remove execute bit from header file + chmod -x "$pkgdir/usr/include/xdo.h" + + install -Dm644 COPYRIGHT -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/xen/PKGBUILD b/xen/PKGBUILD new file mode 100644 index 0000000..20f4dfb --- /dev/null +++ b/xen/PKGBUILD @@ -0,0 +1,177 @@ +# Maintainer: Jesus E. + +##### +# Versions +##### + +_xen_version='4.14.6' +_xen_major_version='4' +_xen_minor_version='14' +_debver=4.14.6 +_debrel=1 + +##### +# Package metadata +##### + +pkgname=xen +pkgver="${_xen_version}" +pkgrel=4 +pkgdesc='Virtual Machine Hypervisor & Tools' +url='https://www.xenproject.org/' +license=('GPL-2') +arch=('x86_64') +validpgpkeys=('23E3222C145F4475FA8060A783FE14C957E82BD9') # Xen.org Xen tree code signing (signatures on the xen hypervisor and tools) +options=(!buildflags !strip !staticlibs) +install="${pkgname}.install" +backup=("etc/conf.d/xen"{commons,domains} + "etc/${pkgname}/efi-xen.cfg" + "etc/${pkgname}/cpupool" + "etc/${pkgname}/xl.conf") +depends=('ocaml' 'python' 'qemu-headless-legacy' 'yajl' 'man-db') +makedepends=('acpica' 'gettext-tiny' 'quilt') +optdepends=('iproute2: configure networks' + 'bridge-utils: share networks via bridge interfaces' + 'seabios: boot VMs with BIOS' + 'edk2-ovmf: boot VMs with UEFI') +source=( + # Sources + "https://downloads.xenproject.org/release/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.gz" + "https://downloads.xenproject.org/release/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.gz.sig" + # Debian patches + "https://deb.debian.org/debian/pool/main/x/xen/xen_$_debver-$_debrel.debian.tar.xz" + # Files + 'efi-xen.cfg' + "${pkgname}.conf" + # OpenRC init files + 'xen-watchdog.initd' + 'xencommons.initd' + 'xendomains.initd' + 'xendriverdomain.initd' + # runit init files + 'xen.run' + 'xenconsoled.run' + 'xenstored.run' +) + +sha512sums=('e0738954af1090d141c56ea0c0900a3cc3ea26778756bf841f908a0ec34adca784dd8cefca5515acf3e6cef63a9832d454a6ce2c04c4c60429907bf49f88648c' + 'SKIP' + '12db9cb0f37050197226b64ab60642f98daaebe60bae8ff8e334f7e561b13b920b838e5617c843fb7427c1568307ff57bb0421edf076f840c2da75a9b5a6cd48' + '115b642af1b89c91c3dfa653aa1c7de0df067b1a9a3b52fe568764b7df17a742ed224cac083cf6ab64fab46d5057992679e9dae349922c2795021bdabda4424f' + '7e4be0c4eeb19c860cdd83319168e15ae2446627bcfc304ad7e9ee49564b26975daa88ef64ddcfaa47374814dc4e1ad317163598d6abc626adc73cfa4c90f22c' + 'c61e4a66dda5077cdce91633a9704800306c378e49f538c5c67537380ad93396958669dd406836caf508a002b756d392b58b0af1a959e0385747f963447d8125' + 'e8550034cbef4ccc2636b03dc91afd837274cd0dfe86e5a56df36e7deb0ba56cacfa54f84be063188f2370a9d5431588d95ee5c442880c0e71e2e3475000be9e' + '253c967c59682685e3c1a31d3782b1f50d7d07b6c31edb009b24b3fd33825189b3edb6ee97301de35b4d273ebd5357b9fe9be981034f4598c6085c6cd5385913' + '8b05af432f1233f8f2c2ed80ed3a730cb55cadc97cd21349651ef34038acc612e79686118d3a79296cc486668959c931183c10652e9ff755946be8e82f310bd2' + '8c42f28c0f6011d11acd4a6a7550e27e323d7fc477d64a0cfef129426c35935b0c4987489c90c2c88937c711b1e4467d256fec92e8b06c59ce7fcb5446a92ffc' + 'f44bed0e57af5943fa0bb8e8e2b018f44dac8a7bdeb1421b52535ed5ccf031b54e0995649552355d66e1333d3795ec1c5ea4e6e2c209bc30ed55ea06ea50a638' + 'bede46958348cea92f8d9f8ce03738a369d8391a0a2d8d397deed1136325c611aaf8614c20aeffdb00d1d0a9d17d03314164a0e2cfd2b045a980af014b359749') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver} = ${_debver} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/0001-Delete-config.sub-and-config.guess.patch || true + rm -v debian/patches/0003-version.patch || true + rm -v debian/patches/0017-Fix-empty-fields-in-first-hypervisor-log-line.patch || true + + quilt push -av + fi + + # Fix Install Paths + msg2 'Fixing installation paths...' + sed -i 's|\$localstatedir/run/xen|/run/xen|' m4/paths.m4 + sed -i 's|/var/run|/run|g' tools/hotplug/Linux/locking.sh + sed -i 's|/var/run|/run|g' tools/misc/xenpvnetboot + sed -i 's|/var/run|/run|g' tools/xenmon/xenbaked.c + sed -i 's|/var/run|/run|g' tools/xenmon/xenmon.py + sed -i 's|/var/run|/run|g' tools/pygrub/src/pygrub + + # Remove support for hardware based virtualization (multilib required) + sed -i '\|SUBDIRS-$(CONFIG_X86) += firmware|d' tools/Makefile +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + #export LD_EFI='/usr/x86_64-w64-mingw32/bin/ld' + + msg2 'Configuring...' + ./autogen.sh + ./configure \ + --prefix=/usr \ + --exec_prefix=/usr \ + --libexecdir=/usr/libexec \ + --runstatedir=/run \ + --sharedstatedir=/var/lib \ + --sysconfdir=/etc \ + --disable-debug \ + --disable-ipxe \ + --disable-ovmf \ + --disable-qemu-traditional \ + --disable-rombios \ + --disable-seabios \ + --disable-stubdom \ + --disable-systemd \ + --disable-ocamltools \ + --enable-docs \ + --enable-githttp \ + --enable-monitors \ + --enable-tools \ + --enable-xen \ + --with-initddir=/etc/init.d \ + --with-rundir=/run \ + --with-sysconfig-leaf-dir=conf.d \ + --with-system-ovmf=/usr/share/edk2-ovmf/x64/OVMF.fd \ + --with-system-qemu=/usr/bin/qemu-system-x86_64 \ + --with-system-seabios=/usr/share/qemu/bios-256k.bin \ + --with-xenstored=xenstored + + make XEN_VENDORVERSION=hyperbola +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + msg2 'Installing Xen...' + make DESTDIR="${pkgdir}" EFI_DIR="${pkgdir}/boot" OCAMLDESTDIR="${pkgdir}/usr/lib/ocaml" install + + # License + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + + cd "${pkgdir}" + + # Install files for Hyperbola + msg2 'Installing Hyperbola-specific files...' + install -Dm644 "${srcdir}/efi-xen.cfg" etc/xen/efi-xen.cfg + + # Install OpenRC init files + msg2 'Installing OpenRC init files...' + for f in xen-watchdog xencommons xendomains xendriverdomain; do + install -Dm755 "${srcdir}/$f.initd" etc/init.d/$f + done + + # Install runit init files + msg2 'Installing runit init files...' + for f in xen xenconsoled xenstored; do + install -Dm755 "${srcdir}/$f.run" etc/sv/$f/run + done + + mkdir -p var/log/xen/console + + # Clean up + msg2 'Cleaning up...' + + # Hypervisor symlinks + rm -f boot/xen{,-${_xen_major_version}{,.${_xen_minor_version}}}.gz + + # Temporary directories + rmdir run{/xen{,stored},} +} diff --git a/xen/efi-xen.cfg b/xen/efi-xen.cfg new file mode 100644 index 0000000..7514cd0 --- /dev/null +++ b/xen/efi-xen.cfg @@ -0,0 +1,7 @@ +[global] +default=xen + +[xen] +options=console=vga dom0_mem=1024M,max:1024M dom0_max_vcpus=4 loglvl=all noreboot +kernel=vmlinuz-linux-libre-lts root= rw +ramdisk=initramfs-linux-libre-lts.img diff --git a/xen/xen-watchdog.initd b/xen/xen-watchdog.initd new file mode 100644 index 0000000..bb01c39 --- /dev/null +++ b/xen/xen-watchdog.initd @@ -0,0 +1,15 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +. /etc/xen/scripts/hotplugpath.sh + +description="Xen watchdog service" + +command="$sbindir/xenwatchdogd" +command_args="30 15" + +depend() { + need xencommons + after xendomains +} diff --git a/xen/xen.conf b/xen/xen.conf new file mode 100644 index 0000000..26d91dc --- /dev/null +++ b/xen/xen.conf @@ -0,0 +1,20 @@ +xen-evtchn +xen-gntdev +xen-gntalloc +xen-blkback +xen-netback +xen-pciback + +## This module may not work on all machines; try removing this first if it causes issues: +xen-acpi-processor + +## The following were included in xencommons: +# evtchn +# gntdev +# netbk +# blkbk +# xen-scsibk +# usbbk +# pciback +# blktap2 +# blktap diff --git a/xen/xen.install b/xen/xen.install new file mode 100644 index 0000000..353bc40 --- /dev/null +++ b/xen/xen.install @@ -0,0 +1,27 @@ +upgrade_msg() { + cat << __EOF__ +Xen 4.8 +Release notes +http://wiki.xen.org/wiki/Xen_Project_4.8_Release_Notes +Feature list +http://wiki.xen.org/wiki/Xen_Project_4.8_Feature_List +__EOF__ + + if [ "$(vercmp 4.8.0-4 "$1")" -lt 0 ]; then + cat << __EOF__ +!!!!! +This Xen version has split out SeaBIOS and OVMF. +If you need to use VMs with BIOS or UEFI, install seabios or ovmf respectively. +!!!!! +__EOF__ + fi + +} + +post_install() { + upgrade_msg +} + +post_upgrade() { + upgrade_msg $@ +} diff --git a/xen/xen.run b/xen/xen.run new file mode 100644 index 0000000..b35a945 --- /dev/null +++ b/xen/xen.run @@ -0,0 +1,5 @@ +#!/bin/sh +sv check xenconsoled >/dev/null || exit 1 +xenstore-write "/local/domain/0/domid" 0 || exit 1 +xenstore-write "/local/domain/0/name" "Domain-0" || exit 1 +exec chpst -b xen pause diff --git a/xen/xencommons.initd b/xen/xencommons.initd new file mode 100644 index 0000000..c685914 --- /dev/null +++ b/xen/xencommons.initd @@ -0,0 +1,88 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +. /etc/xen/scripts/hotplugpath.sh + +BACKEND_MODULES="xen-evtchn xen-gntdev xen-gntalloc xen-blkback xen-netback xen-pciback evtchn gntdev netbk blkbk xen-scsibk usbbk pciback xen-acpi-processor blktap2" +XENCONSOLED_PIDFILE=$XEN_RUN_DIR/xenconsoled.pid +QEMU_PIDFILE=$XEN_RUN_DIR/qemu-dom0.pid + +description="Xencommons - start and stop xenstored and xenconsoled" + +depend() { + after net + before libvirtd libvirt-guests +} + +start_pre() { + shopt -s extglob + + # not running in Xen dom0 or domU + if ! test -d /proc/xen ; then + exit 0 + fi + + # mount xenfs in dom0 or domU with a pv_ops kernel + if ! test -f /proc/xen/capabilities; then + mount -t xenfs xenfs /proc/xen + fi + + # run this script only in dom0: + # no capabilities file in xenlinux domU kernel + # empty capabilities file in pv_ops domU kernel + if test -f /proc/xen/capabilities && \ + ! grep -q "control_d" /proc/xen/capabilities ; then + exit 0 + fi + + local mod + + for mod in $BACKEND_MODULES; do + modprobe "$mod" &>/dev/null + done + + mkdir -p $XEN_RUN_DIR + mkdir -p $XEN_LOCK_DIR + + /etc/xen/scripts/launch-xenstore || exit 1 + + ebegin "Setting domain 0 name, domid and JSON config..." + $LIBEXEC_BIN/xen-init-dom0 & + eend $? +} + +start() { + ebegin "Starting xenconsoled..." + test -z "$XENCONSOLED_TRACE" || XENCONSOLED_ARGS=" --log=$XENCONSOLED_TRACE" + $sbindir/xenconsoled --pid-file=$XENCONSOLED_PIDFILE $XENCONSOLED_ARGS & + eend $? + + ebegin "Starting QEMU as disk backend for dom0" + test -z "$QEMU_XEN" && QEMU_XEN="$LIBEXEC_BIN/qemu-system-i386" + $QEMU_XEN -xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv -daemonize \ + -monitor /dev/null -serial /dev/null -parallel /dev/null \ + -pidfile $QEMU_PIDFILE & + eend $? +} + +stop() { + ebegin "Stopping xenconsoled" + if read 2>/dev/null <$XENCONSOLED_PIDFILE pid; then + kill $pid + while kill -9 $pid >/dev/null 2>&1; do sleep 1; done + rm -f $XENCONSOLED_PIDFILE + fi + eend $? + + ebegin "Stopping QEMU" + if read 2>/dev/null <$QEMU_PIDFILE pid; then + kill $pid + while kill -9 $pid >/dev/null 2>&1; do sleep 1; done + rm -f $QEMU_PIDFILE + fi + eend $? + + ebegin "WARNING: Not stopping xenstored, as it cannot be restarted" + eend $? +} diff --git a/xen/xenconsoled.run b/xen/xenconsoled.run new file mode 100644 index 0000000..bf13989 --- /dev/null +++ b/xen/xenconsoled.run @@ -0,0 +1,4 @@ +#!/bin/sh +sv check xenstored >/dev/null || exit 1 +mkdir -p /var/log/xen/console +exec xenconsoled -i --log=all diff --git a/xen/xendomains.initd b/xen/xendomains.initd new file mode 100644 index 0000000..6ab8e92 --- /dev/null +++ b/xen/xendomains.initd @@ -0,0 +1,23 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +. /etc/xen/scripts/hotplugpath.sh + +description="Xendomains - start and stop guests on boot and shutdown" + +depend() { + need xencommons +} + +start() { + $LIBEXEC_BIN/xendomains start +} + +stop() { + $LIBEXEC_BIN/xendomains stop +} + +reload() { + $LIBEXEC_BIN/xendomains reload +} diff --git a/xen/xendriverdomain.initd b/xen/xendriverdomain.initd new file mode 100644 index 0000000..311c896 --- /dev/null +++ b/xen/xendriverdomain.initd @@ -0,0 +1,37 @@ +#!/sbin/openrc-run +# Copyright 2018 Hyperbola Project +# Distributed under the terms of the GNU General Public License v2 + +. /etc/xen/scripts/hotplugpath.sh + +description="Xen driver domain device service" +command="$sbindir/xl" +command_args="devd $XLDEVD_ARGS" +pidfile="$XEN_RUN_DIR/xldevd.pid" + +depend() { + need xencommons +} + +start_pre() { + # not running in Xen dom0 or domU + if ! test -d /proc/xen ; then + exit 0 + fi + + # mount xenfs in dom0 or domU with a pv_ops kernel + if test "x$1" = xstart && \ + ! test -f /proc/xen/capabilities && \ + ! grep '^xenfs ' /proc/mounts >/dev/null; + then + mount -t xenfs xenfs /proc/xen + fi + + # run this script only in domU: + # no capabilities file in xenlinux domU kernel + # empty capabilities file in pv_ops domU kernel + if ! test -f /proc/xen/capabilities || \ + grep -q "control_d" /proc/xen/capabilities ; then + exit 0 + fi +} diff --git a/xen/xenstored.run b/xen/xenstored.run new file mode 100644 index 0000000..f30d9ad --- /dev/null +++ b/xen/xenstored.run @@ -0,0 +1,7 @@ +#!/bin/sh +[ ! -d /run/xen ] && mkdir -p /run/xen +modprobe -q xen-evtchn xen-gnttalloc || exit 1 +mountpoint -q /proc/xen || mount -t xenfs xenfs /proc/xen +mountpoint -q /var/lib/xenstored || mount -t tmpfs xenstored /var/lib/xenstored +grep -q control_d /proc/xen/capabilities || exit 1 +exec xenstored --verbose --no-fork diff --git a/xenocara-appres/PKGBUILD b/xenocara-appres/PKGBUILD new file mode 100644 index 0000000..ca2282b --- /dev/null +++ b/xenocara-appres/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-appres package + +pkgname=xenocara-appres +_openbsdver=6.9 +pkgver=1.0.5 +pkgrel=3 +pkgdesc="List X application resource database, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxt') +makedepends=('xenocara-util-macros') +provides=('xorg-appres') +conflicts=('xorg-appres' 'xorg-res-utils') +replaces=('xorg-appres') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/appres-$pkgver.tar.lz{,.sig}) +sha512sums=('2acbc464a5bec4685e1a17646e8489102a0ec33ff6c4e5606e5953f85edfcf051efad527a930c2fd9eb4c00a4757bbdbbe3009d89df12f7691efdcb19e181e05' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/appres" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/appres" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/appres" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-bdftopcf/PKGBUILD b/xenocara-bdftopcf/PKGBUILD new file mode 100644 index 0000000..3459217 --- /dev/null +++ b/xenocara-bdftopcf/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +# Based on xorg-bdftopcf package + +pkgname=xenocara-bdftopcf +_openbsdver=6.9 +pkgver=1.1 +pkgrel=3 +pkgdesc="Convert X font from Bitmap Distribution Format to Portable Compiled Format, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('glibc') +makedepends=('xenocara-util-macros' 'xenocara-proto') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-bdftopcf') +conflicts=('xorg-bdftopcf') +replaces=('xorg-bdftopcf') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/bdftopcf-$pkgver.tar.lz{,.sig} + remove-forced-openbsd-unveil-and-openbsd-pledge-support.patch) +sha512sums=('f506d87b28b804672fa153a130a35c46bab70d78c22f9807da5fe845316efab0250540d953e372f0df37741f00c0291a96933667c420e4f4b0b64a86a2811119' + 'SKIP' + '1cac6524da1ebdfb2657a84b459e830bda0c7d17917bf57c4bb70ba7c47fd0d9e58d6226a2e0bd6bf6a6a306f00d2a480b038e4caa29e3ddeb251d3b40efb910') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/bdftopcf" + patch -p1 -i "$srcdir/remove-forced-openbsd-unveil-and-openbsd-pledge-support.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/bdftopcf" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/bdftopcf" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-bdftopcf/remove-forced-openbsd-unveil-and-openbsd-pledge-support.patch b/xenocara-bdftopcf/remove-forced-openbsd-unveil-and-openbsd-pledge-support.patch new file mode 100644 index 0000000..3c3b93b --- /dev/null +++ b/xenocara-bdftopcf/remove-forced-openbsd-unveil-and-openbsd-pledge-support.patch @@ -0,0 +1,51 @@ +diff --git a/bdftopcf.c b/bdftopcf.c +index 720e14e..6f9e96b 100644 +--- a/bdftopcf.c ++++ b/bdftopcf.c +@@ -39,7 +39,6 @@ from The Open Group. + #include "bdfint.h" + #include "pcf.h" + #include +-#include + #include + + int +@@ -159,38 +158,6 @@ main(int argc, char *argv[]) + } + argv++; + } +- +- if (input_name) { +- if (unveil(input_name, "r") == -1) { +- fprintf(stderr, "%s: could not unveil %s\n", +- program_name, input_name); +- exit(1); +- } +- } +- if (output_name) { +- if (unveil(output_name, "rwc") == -1) { +- fprintf(stderr, "%s: could not unveil %s\n", +- program_name, output_name); +- exit(1); +- } +- if (pledge("stdio rpath wpath cpath", NULL) == -1) { +- fprintf(stderr, "%s: could not pledge\n", program_name); +- exit(1); +- } +- } +- if (input_name && !output_name) { +- if (pledge("stdio rpath", NULL) == -1) { +- fprintf(stderr, "%s: could not pledge\n", program_name); +- exit(1); +- } +- } +- if (!input_name && !output_name) { +- if (pledge("stdio", NULL) == -1) { +- fprintf(stderr, "%s: could not pledge\n", program_name); +- exit(1); +- } +- } +- + if (input_name) { + input = FontFileOpen(input_name); + if (!input) { diff --git a/xenocara-docs/COPYING b/xenocara-docs/COPYING new file mode 100644 index 0000000..89389b4 --- /dev/null +++ b/xenocara-docs/COPYING @@ -0,0 +1,422 @@ +Licenses + +The X.Org Foundation + +November 2010 + +â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â” + +Table of Contents + +Introduction +X.Org Preferred License +XFree86 License 1.0 +Other Licenses + + X/MIT Copyrights + Berkeley-based copyrights: + SGI Free Software License B + Bigelow & Holmes Inc and URW++ GmbH Luxi font license + +Introduction + +The X.Org Foundation X Window System distribution is a compilation of code and +documentation from many sources. This document is intended primarily as a guide +to the licenses used in the distribution: you must check each file and/or +package for precise redistribution terms. None-the-less, this summary may be +useful to many users. + +This document is based on the compilation from XFree86. If you find any errors +or significant omissions in this document, please contact us with details at < +xorg@lists.freedesktop.org>. + +Most of these licenses are based on the MIT, X Consortium, or BSD (original and +revised) licenses. All of them are consistent with the Open Source Definition, +and most are consistent with the Free Software Foundation's Free Software +Definition. + +While the current licenses are all open source licenses, the X.Org Foundation +is attempting, over time, to bring as much as possible of the code's licenses +in the distribution into compliance with the Debian Free Software Guidelines. + +X.Org Preferred License + +The X.Org Foundation has chosen the following format of the MIT License as the +preferred format for code included in the X Window System distribution. This is +a slight variant of the common MIT license form published by the Open Source +Initiative at http://www.opensource.org/licenses/mit-license.php. + + Copyright ©[year] [copyright holder] + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +When listing multiple copyright holders with the license statement, please sort +by surname for people, and by the full name for other entities (e.g. Juliusz +Chroboczek sorts before Intel Corporation sorts before Daniel Stone). + +XFree86 License 1.0 + +XFree86 code without an explicit copyright is covered by the following +copyright/license: + + Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + Except as contained in this notice, the name of the XFree86 Project shall + not be used in advertising or otherwise to promote the sale, use or other + dealings in this Software without prior written authorization from the + XFree86 Project. + +No software incorporating the XFree86 1.1 license has been incorporated. + +Other Licenses + +Portions of code are covered by the following licenses/copyrights. See +individual files for the copyright dates. + +X/MIT Copyrights + +X Consortium + +Copyright (C) X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X +CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings in +this Software without prior written authorization from the X Consortium. + +X Window System is a trademark of X Consortium, Inc. + +The Open Group + +Copyright The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that the +above copyright notice appear in all copies and that both that copyright notice +and this permission notice appear in supporting documentation. + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings in +this Software without prior written authorization from The Open Group. + +Berkeley-based copyrights: + +General + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. + +UCB/LBL + +Copyright (c) 1993 The Regents of the University of California. All rights +reserved. + +This software was developed by the Computer Systems Engineering group at +Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and contributed to +Berkeley. + +All advertising materials mentioning features or use of this software must +display the following acknowledgement: This product includes software developed +by the University of California, Lawrence Berkeley Laboratory. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. All advertising materials mentioning features or use of this software must + display the following acknowledgement: This product includes software + developed by the University of California, Berkeley and its contributors. + + 4. Neither the name of the University nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The NetBSD Foundation, Inc. + +Copyright (c) 2003 The NetBSD Foundation, Inc. All rights reserved. + +This code is derived from software contributed to The NetBSD Foundation by Ben +Collver + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS ``AS +IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Theodore Ts'o. + +Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All rights +reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, and + the entire permission notice in its entirety, including the disclaimer of + warranties. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE, ALL OF WHICH ARE HEREBY DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Theo de Raadt and Damien Miller + +Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. Copyright (c) +2001-2002 Damien Miller. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. + +Todd C. Miller + +Copyright (c) 1998 Todd C. Miller + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE FOR ANY +SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE +USE OR PERFORMANCE OF THIS SOFTWARE. + +Thomas Winischhofer + +Copyright (C) 2001-2004 Thomas Winischhofer + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESSED OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. + +SGI Free Software License B + +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) + +Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice including the dates of first publication and either +this permission notice or a reference to http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON +GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Bigelow & Holmes Inc and URW++ GmbH Luxi font license + +Luxi fonts copyright (c) 2001 by Bigelow & Holmes Inc. Luxi font instruction +code copyright (c) 2001 by URW++ GmbH. All Rights Reserved. Luxi is a +registered trademark of Bigelow & Holmes Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +these Fonts and associated documentation files (the "Font Software"), to deal +in the Font Software, including without limitation the rights to use, copy, +merge, publish, distribute, sublicense, and/or sell copies of the Font +Software, and to permit persons to whom the Font Software is furnished to do +so, subject to the following conditions: + +The above copyright and trademark notices and this permission notice shall be +included in all copies of one or more of the Font Software. + +The Font Software may not be modified, altered, or added to, and in particular +the designs of glyphs or characters in the Fonts may not be modified nor may +additional glyphs or characters be added to the Fonts. This License becomes +null and void when the Fonts or Font Software have been modified. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BIGELOW & HOLMES INC. OR URW++ +GMBH. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY +GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR +INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the names of Bigelow & Holmes Inc. and +URW++ GmbH. shall not be used in advertising or otherwise to promote the sale, +use or other dealings in this Font Software without prior written authorization +from Bigelow & Holmes Inc. and URW++ GmbH. + +For further information, contact: + +info@urwpp.de or design@bigelowandholmes.com diff --git a/xenocara-docs/PKGBUILD b/xenocara-docs/PKGBUILD new file mode 100644 index 0000000..8642524 --- /dev/null +++ b/xenocara-docs/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +# Based on xorg-docs package + +pkgname=xenocara-docs +_openbsdver=6.9 +pkgver=1.7.1 +pkgrel=3 +pkgdesc="Xenocara documentations" +arch=(any) +url="https://www.xenocara.org" +license=('Expat') +depends=('man-db') +makedepends=('xenocara-util-macros') +groups=('xenocara' 'xorg') +provides=('xorg-docs') +conflicts=('xorg-docs') +replaces=('xorg-docs') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/doc/xorg-docs-$pkgver.tar.lz{,.sig} + COPYING) +sha512sums=('3dd29d440695b2bc4167a6db5420cf8be586b9482a959f6607082fc48544c2d8482a378b72fbb97f5f64c8d1af8633537b7d018e512519125973629ccb731815' + 'SKIP' + '9edfd3f8922f67c89aea5fe3cbd3ceefa714147e48747e17320c9f6b4e234a8c60bfb203039de197e83aa7a81b013916ad14d254fcb4d1570a529f8fd7d97732') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/doc/xorg-docs" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/doc/xorg-docs" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/doc/xorg-docs" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-editres/PKGBUILD b/xenocara-editres/PKGBUILD new file mode 100644 index 0000000..50d3f2e --- /dev/null +++ b/xenocara-editres/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-editres package + +pkgname=xenocara-editres +_openbsdver=6.9 +pkgver=1.0.7 +pkgrel=2 +pkgdesc="A dynamic resource editor for X Toolkit applications, provided by Xenocara" +url='https://www.xenocara.org' +arch=('i686' 'x86_64') +license=('Expat') +depends=('libxt' 'libxaw') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/editres-$pkgver.tar.lz{,.sig}) +sha512sums=('2fbdd8b341aac6d4d8a21f2a55be2fc025d87ad72b504967011029aa0ea770e4f2267173d662b9675fc6e9c6faa86d4c9d73caaa70026902c1a8aa8eed3904b7' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +CFLAGS=${CFLAGS/-Werror=format-security/} + +prepare() { + cd "xenocara-$_openbsdver/app/editres" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/editres" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/editres" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname/" +} diff --git a/xenocara-font-alias/PKGBUILD b/xenocara-font-alias/PKGBUILD new file mode 100644 index 0000000..5cd6ffa --- /dev/null +++ b/xenocara-font-alias/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +# Based on xorg-fonts-alias package + +pkgname=xenocara-font-alias +_openbsdver=6.9 +pkgver=1.0.3 +pkgrel=3 +pkgdesc="Xenocara font alias files" +arch=('any') +url="https://www.xenocara.org" +license=('Expat') +makedepends=('xenocara-util-macros') +provides=('xorg-fonts-alias') +conflicts=('xorg-fonts-alias') +replaces=('xorg-fonts-alias') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/font/alias-$pkgver.tar.lz{,.sig} + fontrootdir-workaround.patch) +sha512sums=('2a4747638218ac2b11a3252d0cba3517145f703fea1dbb2eba137c31394844292a391e46159b89e29cd54787fc32e17bc2712cc1d36dabb63a15a9050607bba2' + 'SKIP' + 'f2656a18f2706beaf235454bd6ea287fbb4bc5b05cc67fc7e64d623a1755c0e6a491e1e42974001c0de47c952188dcc18624a8e46b4bd58858edc236a228ee77') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/font/alias" + patch -p1 -i "$srcdir/fontrootdir-workaround.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/font/alias" + ./configure --prefix=/usr --with-fontrootdir=/usr/share/fonts + make +} + +package() { + cd "xenocara-$_openbsdver/font/alias" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-font-alias/fontrootdir-workaround.patch b/xenocara-font-alias/fontrootdir-workaround.patch new file mode 100644 index 0000000..fc152bb --- /dev/null +++ b/xenocara-font-alias/fontrootdir-workaround.patch @@ -0,0 +1,88 @@ +diff --git a/100dpi/Makefile.in b/100dpi/Makefile.in +index 0071db4..d5925ff 100644 +--- a/100dpi/Makefile.in ++++ b/100dpi/Makefile.in +@@ -200,6 +200,7 @@ EGREP = @EGREP@ + EXEEXT = @EXEEXT@ + FILE_MAN_DIR = @FILE_MAN_DIR@ + FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ ++FONTROOTDIR = @FONTROOTDIR@ + GREP = @GREP@ + INSTALL = @INSTALL@ + INSTALL_CMD = @INSTALL_CMD@ +diff --git a/75dpi/Makefile.in b/75dpi/Makefile.in +index 0cc3b3b..e7b35b9 100644 +--- a/75dpi/Makefile.in ++++ b/75dpi/Makefile.in +@@ -200,6 +200,7 @@ EGREP = @EGREP@ + EXEEXT = @EXEEXT@ + FILE_MAN_DIR = @FILE_MAN_DIR@ + FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ ++FONTROOTDIR = @FONTROOTDIR@ + GREP = @GREP@ + INSTALL = @INSTALL@ + INSTALL_CMD = @INSTALL_CMD@ +diff --git a/Makefile.in b/Makefile.in +index 9a567bb..b6add79 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -251,6 +251,7 @@ EGREP = @EGREP@ + EXEEXT = @EXEEXT@ + FILE_MAN_DIR = @FILE_MAN_DIR@ + FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ ++FONTROOTDIR = @FONTROOTDIR@ + GREP = @GREP@ + INSTALL = @INSTALL@ + INSTALL_CMD = @INSTALL_CMD@ +diff --git a/configure.ac b/configure.ac +index c3567ff..58ad8a5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -36,7 +36,22 @@ XORG_DEFAULT_OPTIONS + + AC_PROG_INSTALL + +-XORG_FONTROOTDIR ++ ++# Sets FONTROOTDIR to the root directory for font files. Uses the first ++# found from: ++# --with-fontrootdir ++# ${datadir}/fonts/X11 ++AC_MSG_CHECKING([for root directory for font files]) ++AC_ARG_WITH(fontrootdir, ++ AS_HELP_STRING([--with-fontrootdir=DIR], ++ [Path to root directory for font files]), ++ [FONTROOTDIR="$withval"]) ++# if --with-fontrootdir not specified... ++if test "x${FONTROOTDIR}" = "x"; then ++ FONTROOTDIR="${datadir}/fonts/X11" ++fi ++AC_SUBST(FONTROOTDIR) ++AC_MSG_RESULT([${FONTROOTDIR}]) + + AC_ARG_WITH(top-fontdir, AC_HELP_STRING([--with-top-fontdir=], + [Obsolete: use --with-fontrootdir instead]), +diff --git a/cyrillic/Makefile.in b/cyrillic/Makefile.in +index 4320ec9..52037d5 100644 +--- a/cyrillic/Makefile.in ++++ b/cyrillic/Makefile.in +@@ -200,6 +200,7 @@ EGREP = @EGREP@ + EXEEXT = @EXEEXT@ + FILE_MAN_DIR = @FILE_MAN_DIR@ + FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ ++FONTROOTDIR = @FONTROOTDIR@ + GREP = @GREP@ + INSTALL = @INSTALL@ + INSTALL_CMD = @INSTALL_CMD@ +diff --git a/misc/Makefile.in b/misc/Makefile.in +index 0474258..e738c51 100644 +--- a/misc/Makefile.in ++++ b/misc/Makefile.in +@@ -200,6 +200,7 @@ EGREP = @EGREP@ + EXEEXT = @EXEEXT@ + FILE_MAN_DIR = @FILE_MAN_DIR@ + FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ ++FONTROOTDIR = @FONTROOTDIR@ + GREP = @GREP@ + INSTALL = @INSTALL@ + INSTALL_CMD = @INSTALL_CMD@ diff --git a/xenocara-font-bitstream/PKGBUILD b/xenocara-font-bitstream/PKGBUILD new file mode 100644 index 0000000..02f2f94 --- /dev/null +++ b/xenocara-font-bitstream/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +pkgname=('xenocara-font-bitstream-75dpi' 'xenocara-font-bitstream-100dpi') +_openbsdver=6.9 +pkgver=1.0.3 +pkgrel=4 +arch=('any') +url='https://www.xenocara.org' +license=('Expat') +depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' 'xenocara-mkfontscale' 'fontconfig') +makedepends=('xenocara-util-macros') +groups=('xenocara' 'xorg') +source=("https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/bitstream-75dpi-${pkgver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/bitstream-100dpi-${pkgver}.tar.lz"{,.sig}) +sha512sums=('f609313c1f99ea70414f19279f7f1f35d4c86942db86d7991e7a28325b9539740e6dec604931a37aa274f6257983774f31ab1184e6ac285af9266b76c396d387' + 'SKIP' + '2b67db9d169399a46e6eb2fefc2e47891e91c0c761fe1c6817886ae036c14c9abf063496083015921efb822456449c987f343f437e6a92aba6e25513203a2be4' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-75dpi" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-100dpi" + autoreconf -vfi +} + +build() { + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-75dpi" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/75dpi + make + + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-100dpi" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/100dpi + make +} + +package_xenocara-font-bitstream-75dpi() { + pkgdesc="Xenocara bitstream-100dpi font" + + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-75dpi" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/100dpi/fonts.* +} + +package_xenocara-font-bitstream-100dpi() { + pkgdesc="Xenocara bitstream-75dpi font" + + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-100dpi" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/100dpi/fonts.* +} diff --git a/xenocara-font-encodings/PKGBUILD b/xenocara-font-encodings/PKGBUILD new file mode 100644 index 0000000..5f34922 --- /dev/null +++ b/xenocara-font-encodings/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +# Based on xorg-fonts-encodings package + +pkgname=xenocara-font-encodings +_openbsdver=6.9 +pkgver=1.0.5 +pkgrel=3 +pkgdesc="Xenocara font encoding files" +arch=('any') +url='https://www.xenocara.org' +license=('Public-Domain') +makedepends=('xenocara-mkfontscale' 'xenocara-util-macros' 'xenocara-font-util') +groups=('xenocara-fonts' 'xenocara' 'xorg-fonts' 'xorg') +provides=('xorg-fonts-encodings') +conflicts=('xorg-fonts-encodings') +replaces=('xorg-fonts-encodings') +options=(!makeflags) +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/font/encodings-$pkgver.tar.lz{,.sig}) +sha512sums=('79a1b7477a94db01c75bdc49a00fcf5dd19ae38e7881621048f7a1ff85725aa0053adda570189da467e2a1f46f2835ec3cd772e23e4e6c175a0e5bb845f28bd4' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/font/encodings" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/font/encodings" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/font/encodings" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + # regenerate encodings file not to include non-compressed versions + cd "$pkgdir/usr/share/fonts/encodings/large" + mkfontscale -b -s -l -n -r -p /usr/share/fonts/encodings/large -e . . + cd "$pkgdir/usr/share/fonts/encodings" + mkfontscale -b -s -l -n -r -p /usr/share/fonts/encodings -e . -e large . +} diff --git a/xenocara-font-util/PKGBUILD b/xenocara-font-util/PKGBUILD new file mode 100644 index 0000000..1c6efa0 --- /dev/null +++ b/xenocara-font-util/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +# Based on xorg-font-util package + +pkgname=xenocara-font-util +_openbsdver=6.9 +pkgver=1.3.2 +pkgrel=2 +pkgdesc='Xenocara font utilities' +url="https://www.xenocara.org" +arch=('i686' 'x86_64') +license=('X11') +makedepends=('xenocara-util-macros') +groups=('xenocara-fonts' 'xenocara' 'xorg-fonts' 'xorg') +provides=('font-util' 'xorg-font-util') +conflicts=('font-util' 'xorg-font-util') +replaces=('font-util' 'xorg-font-util') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/font/util-$pkgver.tar.lz{,.sig}) +sha512sums=('38a73e9f09e01773bb98fbb01c3ff4df43e0444319621d718ba3a6d3c2abd1e3bf1849fb5e95ad51945a231964e18be41ecb76a71e09712ac45a182f2def8845' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/font/util" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/font/util" + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --with-mapdir=/usr/share/fonts/util \ + --with-fontrootdir=/usr/share/fonts + make +} + +package() { + cd "xenocara-$_openbsdver/font/util" + make DESTDIR="$pkgdir/" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-fonts-cyrillic-meta/PKGBUILD b/xenocara-fonts-cyrillic-meta/PKGBUILD new file mode 100644 index 0000000..e2a6a3f --- /dev/null +++ b/xenocara-fonts-cyrillic-meta/PKGBUILD @@ -0,0 +1,130 @@ +# Maintainer: Jesus E. + +pkgname=('xenocara-fonts-cyrillic-meta' 'xenocara-font-cronyx-cyrillic' 'xenocara-font-misc-cyrillic' + 'xenocara-font-screen-cyrillic' 'xenocara-font-winitzki-cyrillic') +pkgver=20201227 +_openbsdver=6.9 +_fontcronyxcyrillicver=1.0.3 +_fontmisccyrillicver=1.0.3 +_fontscreencyrillicver=1.0.4 +_fontwinitzkicyrillicver=1.0.3 +pkgrel=4 +arch=('any') +url='https://www.xenocara.org' +makedepends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig' 'xenocara-util-macros') +source=("legalcode.txt" + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/cronyx-cyrillic-${_fontcronyxcyrillicver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/misc-cyrillic-${_fontmisccyrillicver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/screen-cyrillic-${_fontscreencyrillicver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/winitzki-cyrillic-${_fontwinitzkicyrillicver}.tar.lz"{,.sig}) +sha512sums=('1eb4436f8d58766cbe99db97e5e8c0db8a706376afd291c337de1ba7a6b066d3791dc85ad034bdd54ea336bed6e6e8e7a037d8b04b2773c9c7517b9d9921d1fa' + 'cc01f7cbea95e65cbe20832d0731e34aa41f97420c31113c707b7407f8d6c8facd0bf2ac5652093be6be4ade5977974c76681d7c71b91752914bfbc11b659859' + 'SKIP' + 'c8d6b1f7a7c7cf2cf84ff249603ccfc719ec9baece1d3843e51847517cd4c531fb24d4b4b2e808abe182c67575e39ca001a7087562842a75cf641bf2e61c47e2' + 'SKIP' + '6ab7e125bc99e72470afa2bdde46c4b001d91f87963d5c298378a220c3b8b712e849038fc8584eeb4514c5e8943e5b02ab4bdd3ab7aca5fc899674b9786cf257' + 'SKIP' + 'ea1bf9a73fab51ba189fc418b41cd141eb2ed2f1aea01b547d2030952647b3db0c0697da1d19417492ec52692022203143bdc82b4de014b353584358cca263a9' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "$srcdir/xenocara-$_openbsdver/font/cronyx-cyrillic" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/misc-cyrillic" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/screen-cyrillic" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/winitzki-cyrillic" + autoreconf -vfi +} + +build() { + cd "$srcdir/xenocara-$_openbsdver/font/cronyx-cyrillic" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/cyrillic + make + + cd "$srcdir/xenocara-$_openbsdver/font/misc-cyrillic" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/cyrillic + make + + cd "$srcdir/xenocara-$_openbsdver/font/screen-cyrillic" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/cyrillic + make + + cd "$srcdir/xenocara-$_openbsdver/font/winitzki-cyrillic" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/cyrillic + make +} + +package_xenocara-fonts-cyrillic-meta() { + pkgdesc="Meta package depending on Xenocara cyrillic fonts" + license=('CC0-1.0') + depends=('xenocara-font-cronyx-cyrillic' 'xenocara-font-misc-cyrillic' 'xenocara-font-screen-cyrillic' + 'xenocara-font-winitzki-cyrillic') + install -Dm644 "$srcdir/legalcode.txt" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_xenocara-font-cronyx-cyrillic() { + pkgdesc="Xenocara cronyx-cyrillic font" + pkgver=$_fontcronyxcyrillicver + license=('Expat') + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/cronyx-cyrillic" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-misc-cyrillic() { + pkgdesc="Xenocara misc-cyrillic font" + pkgver=$_fontmisccyrillicver + license=('Expat') + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/misc-cyrillic" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-screen-cyrillic() { + pkgdesc="Xenocara screen-cyrillic font" + pkgver=$_fontscreencyrillicver + license=('Expat') + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/screen-cyrillic" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-winitzki-cyrillic() { + pkgdesc="Xenocara winitzki-cyrillic font" + pkgver=$_fontwinitzkicyrillicver + license=('Public-Domain') + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/winitzki-cyrillic" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} diff --git a/xenocara-fonts-cyrillic-meta/legalcode.txt b/xenocara-fonts-cyrillic-meta/legalcode.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/xenocara-fonts-cyrillic-meta/legalcode.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/xenocara-fonts-misc-meta/PKGBUILD b/xenocara-fonts-misc-meta/PKGBUILD new file mode 100644 index 0000000..c5a3744 --- /dev/null +++ b/xenocara-fonts-misc-meta/PKGBUILD @@ -0,0 +1,234 @@ +# Maintainer: Jesus E. + +pkgname=('xenocara-fonts-misc-meta' 'xenocara-font-arabic-misc' 'xenocara-font-dec-misc' 'xenocara-font-isas-misc' + 'xenocara-font-micro-misc' 'xenocara-font-misc-ethiopic' 'xenocara-font-misc-misc' 'xenocara-font-mutt-misc' + 'xenocara-font-schumacher-misc') +pkgver=20201227 +_openbsdver=6.9 +_fontarabicver=1.0.3 +_fontdecver=1.0.3 +_fontisasver=1.0.3 +_fontmicrover=1.0.3 +_fontethiopicver=1.0.3 +_fontmiscver=1.1.2 +_fontmuttver=1.0.3 +_fontschumacherver=1.1.2 +pkgrel=4 +arch=('any') +url='https://www.xenocara.org' +makedepends=('fontconfig' 'xenocara-bdftopcf' 'xenocara-font-alias' 'xenocara-font-encodings' 'xenocara-font-util' + 'xenocara-mkfontscale' 'xenocara-util-macros') +source=("legalcode.txt" + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/arabic-misc-${_fontarabicver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/dec-misc-${_fontdecver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/isas-misc-${_fontisasver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/micro-misc-${_fontmicrover}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/misc-ethiopic-${_fontethiopicver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/misc-misc-${_fontmiscver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/mutt-misc-${_fontmuttver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/schumacher-misc-${_fontschumacherver}.tar.lz"{,.sig}) +sha512sums=('1eb4436f8d58766cbe99db97e5e8c0db8a706376afd291c337de1ba7a6b066d3791dc85ad034bdd54ea336bed6e6e8e7a037d8b04b2773c9c7517b9d9921d1fa' + '936ca8a2026df6586d5e2ccc48aa6980a36969b7e371e5405c76078fb2447eeebfe5b0842e57d65615d83f352ca7d0471ec55caae3fa41b3cfc2ee4e9ebbb6b2' + 'SKIP' + 'b672080145bcc4b29e06260678e3437e32aa7f7e07c9830b497f81fe6201bcd40c7268e8357536885ea5f104354cd51f1248e3683edb0476817decbff590f3e8' + 'SKIP' + 'f35baf9a48b475f70ef2b820771af5779fbd8f48feddd773874b3342457e2bcd40e8d117446d2bde4ee6aaf5adfe535fb84781841a6b54d6eda4a82b66548a56' + 'SKIP' + '37405396ea7700139f1ea7a77442b17fb694870faf2ef46d5a6f4eaf26f5ffb0469ccb974952bfd089841bbdf47bfada7522bdf5b48e4a2d5b77c02a274cc4bb' + 'SKIP' + '0e0fc5615ca52ac1456ef0e26f60648fc489c8eebf352e88c2bcc681d654c0696dc9a4d0ed23e63008165bb7a523d1f1caf95f1c70b8fa2e4bf4ab0f487befa9' + 'SKIP' + '9485bc7b94621178c6df9fd1d7b2ee810612334c9034aff3d2dda9959dd1ac641f2f46fd12f003539b248784bbdc99a3cff7452fba2b64dd7da341a4f24c776e' + 'SKIP' + '62c2d3f9efce7ad0ca9547018a19d3ac65e73132ee499fc526d39615a8f3def762f70ea1c44311f974cee947ab24e24111d7d1b4e431a8a73e81a8ba67c0bafa' + 'SKIP' + 'e3641a0f67a0485fa21b37a9039cc0d85ef5587e7a156be0d2cabedac804a5671ed3b80bfc70cf7026ea438fe5127799862dfdf99606520694cec7db86ab9c4c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "$srcdir/xenocara-$_openbsdver/font/arabic-misc" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/dec-misc" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/isas-misc" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/micro-misc" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/misc-ethiopic" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/misc-misc" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/mutt-misc" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/schumacher-misc" + autoreconf -vfi +} + +build() { + cd "$srcdir/xenocara-$_openbsdver/font/arabic-misc" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/misc + make + + cd "$srcdir/xenocara-$_openbsdver/font/dec-misc" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/misc + make + + cd "$srcdir/xenocara-$_openbsdver/font/isas-misc" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/misc + make + + cd "$srcdir/xenocara-$_openbsdver/font/micro-misc" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/misc + make + + cd "$srcdir/xenocara-$_openbsdver/font/misc-ethiopic" + ./configure --prefix=/usr + make + + cd "$srcdir/xenocara-$_openbsdver/font/misc-misc" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/misc + make + + cd "$srcdir/xenocara-$_openbsdver/font/mutt-misc" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/misc + make + + cd "$srcdir/xenocara-$_openbsdver/font/schumacher-misc" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/misc + make +} + +package_xenocara-fonts-misc-meta() { + pkgdesc="Meta package depending on Xenocara misc fonts" + license=('CC0-1.0') + depends=('xenocara-font-arabic-misc' 'xenocara-font-dec-misc' 'xenocara-font-isas-misc' 'xenocara-font-micro-misc' + 'xenocara-font-misc-ethiopic' 'xenocara-font-misc-misc' 'xenocara-font-mutt-misc' 'xenocara-font-schumacher-misc') + install -Dm644 "$srcdir/legalcode.txt" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_xenocara-font-arabic-misc() { + pkgdesc="Xenocara arabic-misc font" + license=('Expat') + pkgver=$_fontarabicver + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/arabic-misc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-dec-misc() { + pkgdesc="Xenocara dec-misc font" + license=('Expat') + pkgver=$_fontdecver + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/dec-misc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-isas-misc() { + pkgdesc="Xenocara isas-misc font" + license=('Expat') + pkgver=$_fontisasver + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/isas-misc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-micro-misc() { + pkgdesc="Xenocara micro-misc font" + license=('Public-Domain') + pkgver=$_fontmicrover + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/micro-misc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-misc-ethiopic() { + pkgdesc="Xenocara misc-ethiopic font" + license=('Expat') + pkgver=$_fontethiopicver + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/misc-ethiopic" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-misc-misc() { + pkgdesc="Xenocara misc-misc font" + license=('Public-Domain') + pkgver=$_fontmiscver + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/misc-misc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-mutt-misc() { + pkgdesc="Xenocara mutt-misc font" + license=('Expat') + pkgver=$_fontmuttver + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/mutt-misc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-schumacher-misc() { + pkgdesc="Xenocara schumacher-misc font" + license=('Expat') + pkgver=$_fontschumacherver + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/schumacher-misc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} diff --git a/xenocara-fonts-misc-meta/legalcode.txt b/xenocara-fonts-misc-meta/legalcode.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/xenocara-fonts-misc-meta/legalcode.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/xenocara-fonts-type1-meta/PKGBUILD b/xenocara-fonts-type1-meta/PKGBUILD new file mode 100644 index 0000000..2a01d76 --- /dev/null +++ b/xenocara-fonts-type1-meta/PKGBUILD @@ -0,0 +1,76 @@ +# Maintainer: Jesus E. + +pkgname=('xenocara-fonts-type1-meta' 'xenocara-font-bitstream-type1' 'xenocara-font-xfree86-type1') +pkgver=20201227 +_openbsdver=6.9 +_fontbitstreamtype1ver=1.0.3 +_fontxfree86type1ver=1.0.4 +pkgrel=4 +arch=('any') +url='https://www.xenocara.org' +makedepends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig' 'xenocara-util-macros') +source=("legalcode.txt" + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/bitstream-type1-${_fontbitstreamtype1ver}.tar.lz"{,.sig} + "https://repo.hyperbola.info:50000/sources/xenocara-libre/${_openbsdver}/font/xfree86-type1-${_fontxfree86type1ver}.tar.lz"{,.sig}) +sha512sums=('1eb4436f8d58766cbe99db97e5e8c0db8a706376afd291c337de1ba7a6b066d3791dc85ad034bdd54ea336bed6e6e8e7a037d8b04b2773c9c7517b9d9921d1fa' + 'dc96f9ba861bea782a58346c29332fbb4b449e8c2a4aeea517c181c9f0ff318490d5a02dcdd87dcc004040482e214fc1f9b006bba75b66850c2c218d1ff579ad' + 'SKIP' + '2efa157c1c63fe334f756a6fde70d6990ab8eee43c436d1723b793775a51e60309944134ff1f9e08026bf59fbfe28cfadee6156b931e3b85147be07d14e9ded2' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-type1" + autoreconf -vfi + + cd "$srcdir/xenocara-$_openbsdver/font/xfree86-type1" + autoreconf -vfi +} + +build() { + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-type1" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/Type1 + make + + cd "$srcdir/xenocara-$_openbsdver/font/xfree86-type1" + ./configure --prefix=/usr \ + --with-fontdir=/usr/share/fonts/Type1 + make +} + +package_xenocara-fonts-type1-meta() { + pkgdesc="Meta package depending on Xenocara Type1 fonts" + license=('CC0-1.0') + depends=('xenocara-font-bitstream-type1' 'xenocara-font-xfree86-type1') + install -Dm644 "$srcdir/legalcode.txt" -t "$pkgdir/usr/share/licenses/$pkgname" +} + +package_xenocara-font-bitstream-type1() { + pkgdesc="Xenocara bitstream-type1 font" + pkgver=$_fontbitstreamtype1ver + license=('Expat') + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/bitstream-type1" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} + +package_xenocara-font-xfree86-type1() { + pkgdesc="Xenocara xfree86-type1 font" + pkgver=$_fontxfree86type1ver + license=('X11') + depends=('xenocara-font-encodings' 'xenocara-font-alias' 'xenocara-bdftopcf' 'xenocara-font-util' + 'xenocara-mkfontscale' 'fontconfig') + + cd "$srcdir/xenocara-$_openbsdver/font/xfree86-type1" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" + rm -f $pkgdir/usr/share/fonts/*/fonts.* +} diff --git a/xenocara-fonts-type1-meta/legalcode.txt b/xenocara-fonts-type1-meta/legalcode.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/xenocara-fonts-type1-meta/legalcode.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/xenocara-iceauth/PKGBUILD b/xenocara-iceauth/PKGBUILD new file mode 100644 index 0000000..a53a4e3 --- /dev/null +++ b/xenocara-iceauth/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-iceauth package + +pkgname=xenocara-iceauth +_openbsdver=6.9 +pkgver=1.0.8 +pkgrel=3 +pkgdesc="ICE authority file utility, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libice') +makedepends=('xenocara-util-macros' 'xenocara-proto') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-iceauth') +conflicts=('xorg-iceauth') +replaces=('xorg-iceauth') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/iceauth-$pkgver.tar.lz{,.sig}) +sha512sums=('4e0aa38c1183110039fe4d659406cac31ea077eca2880e56079e8715a46eb293a1be3980fa4e3416bc1cac37e2ad42ad753e441f4f2721667fe76cee8229e0b9' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/iceauth" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/iceauth" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/iceauth" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-acecad-debug/PKGBUILD b/xenocara-input-acecad-debug/PKGBUILD new file mode 100644 index 0000000..74807fa --- /dev/null +++ b/xenocara-input-acecad-debug/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +# Based on xenocara-input-elographics package + +pkgname=xenocara-input-acecad-debug +_openbsdver=6.9 +pkgver=1.5.0 +pkgrel=1 +pkgdesc="Xenocara Acecad Flair tablet input driver" +arch=(i686 x86_64) +license=('Expat') +url="https://www.xenocara.org" +depends=('sysfsutils') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-acecad') +conflicts=('xf86-input-acecad' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-acecad') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-acecad-$pkgver.tar.lz{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('1fa9a46b5d8387cde2b80b67b1b577ea454be661c21fa66967b4f58810c3055ccf10516647b988c4088b37dd3b469184ecd67ae29647825dc34cfb2d40dc10ba' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-acecad" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-acecad" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-acecad" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-acecad/PKGBUILD b/xenocara-input-acecad/PKGBUILD new file mode 100644 index 0000000..e0dcf6a --- /dev/null +++ b/xenocara-input-acecad/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xenocara-input-elographics package + +pkgname=xenocara-input-acecad +_openbsdver=6.9 +pkgver=1.5.0 +pkgrel=1 +pkgdesc="Xenocara Acecad Flair tablet input driver" +arch=(i686 x86_64) +license=('Expat') +url="https://www.xenocara.org" +depends=('sysfsutils') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-acecad') +conflicts=('xf86-input-acecad' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-acecad') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-acecad-$pkgver.tar.lz{,.sig}) +sha512sums=('1fa9a46b5d8387cde2b80b67b1b577ea454be661c21fa66967b4f58810c3055ccf10516647b988c4088b37dd3b469184ecd67ae29647825dc34cfb2d40dc10ba' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-acecad" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-acecad" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-acecad" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-elographics-debug/PKGBUILD b/xenocara-input-elographics-debug/PKGBUILD new file mode 100644 index 0000000..6a53b93 --- /dev/null +++ b/xenocara-input-elographics-debug/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-elographics package + +pkgname=xenocara-input-elographics-debug +_openbsdver=6.9 +pkgver=1.4.1 +pkgrel=3 +pkgdesc="Xenocara Elographics TouchScreen input driver" +arch=(i686 x86_64) +license=('Expat') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-elographics') +conflicts=('xf86-input-elographics' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-elographics') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-elographics-$pkgver.tar.lz{,.sig} + git-fixes.patch) +options=(!strip) # It's required for debug packages +sha512sums=('4455f84a683a5ee52f423aaa641511127e57076afc6bb2a657ef7d04af3ffc781f3ca29ee68b10d126fcf37ca62b56602c4f1014b31b24d02e873d343e9b136a' + 'SKIP' + '82a1575a50af1ee80194c47e8954a315c060cbbf1c912b47d1b152e29aa478a174f2324cd26333398c8a520f333a9e196d030f7995efd11eb15b34e562ffdf35') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-elographics" + patch -p1 -i "$srcdir/git-fixes.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-elographics" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-elographics" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-elographics-debug/git-fixes.patch b/xenocara-input-elographics-debug/git-fixes.patch new file mode 100644 index 0000000..d0bbf63 --- /dev/null +++ b/xenocara-input-elographics-debug/git-fixes.patch @@ -0,0 +1,107 @@ +From 0d3ec2e97c99431cdbaea8e958a75ff2e748da41 Mon Sep 17 00:00:00 2001 +From: Jaska Kivela +Date: Wed, 16 Jan 2013 11:51:04 +0200 +Subject: Added axis inversion functionality. + +The module would previously log a message if min > max, but not do anything +about it. Keep the original min/max around, swap on-the-fly. + +Signed-off-by: Jaska Kivela +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer + +diff --git a/src/xf86Elo.c b/src/xf86Elo.c +index cb1699e..c37cf9a 100644 +--- a/src/xf86Elo.c ++++ b/src/xf86Elo.c +@@ -360,6 +360,22 @@ xf86EloReadInput(InputInfoPtr pInfo) + cur_y = WORD_ASSEMBLY(priv->packet_buf[5], priv->packet_buf[6]); + state = priv->packet_buf[2] & 0x07; + ++ DBG(5, ErrorF("ELO got: x(%d), y(%d), %s\n", ++ cur_x, cur_y, ++ (state == ELO_PRESS) ? "Press" : ++ ((state == ELO_RELEASE) ? "Release" : "Stream"))); ++ ++ if (priv->min_y > priv->max_y) { ++ /* inverted y axis */ ++ cur_y = priv->max_y - cur_y + priv->min_y; ++ } ++ ++ if (priv->min_x > priv->max_x) { ++ /* inverted x axis */ ++ cur_x = priv->max_x - cur_x + priv->min_x; ++ } ++ ++ + /* + * Send events. + * +@@ -676,6 +692,7 @@ xf86EloControl(DeviceIntPtr dev, + unsigned char reply[ELO_PACKET_SIZE]; + Atom btn_label; + Atom axis_labels[2] = { 0, 0 }; ++ int x0, x1, y0, y1; + + switch(mode) { + +@@ -719,17 +736,27 @@ xf86EloControl(DeviceIntPtr dev, + return !Success; + } + else { ++ ++ /* Correct the coordinates for possibly inverted axis. ++ Leave priv->variables untouched so we can check for ++ inversion on incoming events. ++ */ ++ y0 = min(priv->min_y, priv->max_y); ++ y1 = max(priv->min_y, priv->max_y); ++ x0 = min(priv->min_x, priv->max_x); ++ x1 = max(priv->min_x, priv->max_x); ++ + /* I will map coordinates myself */ + InitValuatorAxisStruct(dev, 0, + axis_labels[0], +- priv->min_x, priv->max_x, ++ x0, x1, + 9500, + 0 /* min_res */, + 9500 /* max_res */, + Absolute); + InitValuatorAxisStruct(dev, 1, + axis_labels[1], +- priv->min_y, priv->max_y, ++ y0, y1, + 10500, + 0 /* min_res */, + 10500 /* max_res */, +-- +cgit v0.10.2 +From c666c78c764d0b97fa25bd9f0796a83b77761f7d Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Wed, 30 Jan 2013 11:47:03 +1000 +Subject: Handle DEVICE_ABORT on input ABI 19.1 + +Don't do anything, but don't print a warning either. + +Signed-off-by: Peter Hutterer + +diff --git a/src/xf86Elo.c b/src/xf86Elo.c +index c37cf9a..ef2186f 100644 +--- a/src/xf86Elo.c ++++ b/src/xf86Elo.c +@@ -875,6 +875,11 @@ xf86EloControl(DeviceIntPtr dev, + DBG(2, ErrorF("Done\n")); + return Success; + ++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) * 100 + GET_ABI_MINOR(ABI_XINPUT_VERSION) >= 1901 ++ case DEVICE_ABORT: ++ return Success; ++#endif ++ + default: + ErrorF("unsupported mode=%d\n", mode); + return BadValue; +-- +cgit v0.10.2 + diff --git a/xenocara-input-elographics/PKGBUILD b/xenocara-input-elographics/PKGBUILD new file mode 100644 index 0000000..608bb44 --- /dev/null +++ b/xenocara-input-elographics/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-elographics package + +pkgname=xenocara-input-elographics +_openbsdver=6.9 +pkgver=1.4.1 +pkgrel=3 +pkgdesc="Xenocara Elographics TouchScreen input driver" +arch=(i686 x86_64) +license=('Expat') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-elographics') +conflicts=('xf86-input-elographics' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-elographics') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-elographics-$pkgver.tar.lz{,.sig} + git-fixes.patch) +sha512sums=('4455f84a683a5ee52f423aaa641511127e57076afc6bb2a657ef7d04af3ffc781f3ca29ee68b10d126fcf37ca62b56602c4f1014b31b24d02e873d343e9b136a' + 'SKIP' + '82a1575a50af1ee80194c47e8954a315c060cbbf1c912b47d1b152e29aa478a174f2324cd26333398c8a520f333a9e196d030f7995efd11eb15b34e562ffdf35') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-elographics" + patch -p1 -i "$srcdir/git-fixes.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-elographics" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-elographics" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-elographics/git-fixes.patch b/xenocara-input-elographics/git-fixes.patch new file mode 100644 index 0000000..d0bbf63 --- /dev/null +++ b/xenocara-input-elographics/git-fixes.patch @@ -0,0 +1,107 @@ +From 0d3ec2e97c99431cdbaea8e958a75ff2e748da41 Mon Sep 17 00:00:00 2001 +From: Jaska Kivela +Date: Wed, 16 Jan 2013 11:51:04 +0200 +Subject: Added axis inversion functionality. + +The module would previously log a message if min > max, but not do anything +about it. Keep the original min/max around, swap on-the-fly. + +Signed-off-by: Jaska Kivela +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer + +diff --git a/src/xf86Elo.c b/src/xf86Elo.c +index cb1699e..c37cf9a 100644 +--- a/src/xf86Elo.c ++++ b/src/xf86Elo.c +@@ -360,6 +360,22 @@ xf86EloReadInput(InputInfoPtr pInfo) + cur_y = WORD_ASSEMBLY(priv->packet_buf[5], priv->packet_buf[6]); + state = priv->packet_buf[2] & 0x07; + ++ DBG(5, ErrorF("ELO got: x(%d), y(%d), %s\n", ++ cur_x, cur_y, ++ (state == ELO_PRESS) ? "Press" : ++ ((state == ELO_RELEASE) ? "Release" : "Stream"))); ++ ++ if (priv->min_y > priv->max_y) { ++ /* inverted y axis */ ++ cur_y = priv->max_y - cur_y + priv->min_y; ++ } ++ ++ if (priv->min_x > priv->max_x) { ++ /* inverted x axis */ ++ cur_x = priv->max_x - cur_x + priv->min_x; ++ } ++ ++ + /* + * Send events. + * +@@ -676,6 +692,7 @@ xf86EloControl(DeviceIntPtr dev, + unsigned char reply[ELO_PACKET_SIZE]; + Atom btn_label; + Atom axis_labels[2] = { 0, 0 }; ++ int x0, x1, y0, y1; + + switch(mode) { + +@@ -719,17 +736,27 @@ xf86EloControl(DeviceIntPtr dev, + return !Success; + } + else { ++ ++ /* Correct the coordinates for possibly inverted axis. ++ Leave priv->variables untouched so we can check for ++ inversion on incoming events. ++ */ ++ y0 = min(priv->min_y, priv->max_y); ++ y1 = max(priv->min_y, priv->max_y); ++ x0 = min(priv->min_x, priv->max_x); ++ x1 = max(priv->min_x, priv->max_x); ++ + /* I will map coordinates myself */ + InitValuatorAxisStruct(dev, 0, + axis_labels[0], +- priv->min_x, priv->max_x, ++ x0, x1, + 9500, + 0 /* min_res */, + 9500 /* max_res */, + Absolute); + InitValuatorAxisStruct(dev, 1, + axis_labels[1], +- priv->min_y, priv->max_y, ++ y0, y1, + 10500, + 0 /* min_res */, + 10500 /* max_res */, +-- +cgit v0.10.2 +From c666c78c764d0b97fa25bd9f0796a83b77761f7d Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Wed, 30 Jan 2013 11:47:03 +1000 +Subject: Handle DEVICE_ABORT on input ABI 19.1 + +Don't do anything, but don't print a warning either. + +Signed-off-by: Peter Hutterer + +diff --git a/src/xf86Elo.c b/src/xf86Elo.c +index c37cf9a..ef2186f 100644 +--- a/src/xf86Elo.c ++++ b/src/xf86Elo.c +@@ -875,6 +875,11 @@ xf86EloControl(DeviceIntPtr dev, + DBG(2, ErrorF("Done\n")); + return Success; + ++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) * 100 + GET_ABI_MINOR(ABI_XINPUT_VERSION) >= 1901 ++ case DEVICE_ABORT: ++ return Success; ++#endif ++ + default: + ErrorF("unsupported mode=%d\n", mode); + return BadValue; +-- +cgit v0.10.2 + diff --git a/xenocara-input-joystick-debug/PKGBUILD b/xenocara-input-joystick-debug/PKGBUILD new file mode 100644 index 0000000..452a313 --- /dev/null +++ b/xenocara-input-joystick-debug/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-mouse package + +pkgname=xenocara-input-joystick-debug +_openbsdver=6.9 +pkgver=1.6.3 +pkgrel=3 +pkgdesc="Xenocara joystick input driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-joystick') +conflicts=('xf86-input-joystick' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-joystick') +groups=('xenocara-drivers-debug' 'xorg-drivers-debug') +options=(!strip) # It's required for debug packages +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-joystick-$pkgver.tar.lz{,.sig}) +sha512sums=('0a3a5bb1a57419a52cf7c7a914a5f80c3cf5774a2acfd531036c89be6c161e3424c2c1ae3706691d917495e5208a4dd31863e0a0e21b6cc113e0509044502e9f' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-joystick" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-joystick" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-joystick" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-joystick/PKGBUILD b/xenocara-input-joystick/PKGBUILD new file mode 100644 index 0000000..04ed7bf --- /dev/null +++ b/xenocara-input-joystick/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-mouse package + +pkgname=xenocara-input-joystick +_openbsdver=6.9 +pkgver=1.6.3 +pkgrel=2 +pkgdesc="Xenocara joystick input driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-joystick') +conflicts=('xf86-input-joystick' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-joystick') +groups=('xenocara-drivers' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-joystick-$pkgver.tar.lz{,.sig}) +sha512sums=('0a3a5bb1a57419a52cf7c7a914a5f80c3cf5774a2acfd531036c89be6c161e3424c2c1ae3706691d917495e5208a4dd31863e0a0e21b6cc113e0509044502e9f' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-joystick" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-joystick" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-joystick" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-keyboard-debug/PKGBUILD b/xenocara-input-keyboard-debug/PKGBUILD new file mode 100644 index 0000000..a9c390a --- /dev/null +++ b/xenocara-input-keyboard-debug/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-keyboard package + +pkgname=xenocara-input-keyboard-debug +_openbsdver=6.9 +pkgver=1.9.0 +pkgrel=4 +pkgdesc="Xenocara keyboard input driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-keyboard') +conflicts=('xf86-input-keyboard' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-keyboard') +groups=('xenocara-drivers-debug' 'xorg-drivers-debug') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-keyboard-$pkgver.tar.lz{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('4eb485d4d245a9013226937a11b80f23ac6574acb3f0f659ac4414a7a6e974b7c8f784279d0e31f96581935917c2aaf1bb833365b07c92825bf5673f307bdc6c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-keyboard" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-keyboard" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-keyboard" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-keyboard/PKGBUILD b/xenocara-input-keyboard/PKGBUILD new file mode 100644 index 0000000..d8be52c --- /dev/null +++ b/xenocara-input-keyboard/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-keyboard package + +pkgname=xenocara-input-keyboard +_openbsdver=6.9 +pkgver=1.9.0 +pkgrel=3 +pkgdesc="Xenocara keyboard input driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-keyboard') +conflicts=('xf86-input-keyboard' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-keyboard') +groups=('xenocara-drivers' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-keyboard-$pkgver.tar.lz{,.sig}) +sha512sums=('4eb485d4d245a9013226937a11b80f23ac6574acb3f0f659ac4414a7a6e974b7c8f784279d0e31f96581935917c2aaf1bb833365b07c92825bf5673f307bdc6c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-keyboard" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-keyboard" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-keyboard" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-mouse-debug/PKGBUILD b/xenocara-input-mouse-debug/PKGBUILD new file mode 100644 index 0000000..e381478 --- /dev/null +++ b/xenocara-input-mouse-debug/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-mouse package + +pkgname=xenocara-input-mouse-debug +_openbsdver=6.9 +pkgver=1.9.3 +pkgrel=4 +pkgdesc="Xenocara mouse input driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-mouse') +conflicts=('xf86-input-mouse' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-mouse') +groups=('xenocara-drivers-debug' 'xorg-drivers-debug') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-mouse-$pkgver.tar.lz{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('bc07156c87cfc91217b7956db8e6f0a070c08d8ec052bddedda3e43b4ed78a5fcd97a8e5292956fe9a2bcb47658290e86dd88e0f00aeed09e9f2e8b32a431f0f' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-mouse" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-mouse" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-mouse" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-mouse/PKGBUILD b/xenocara-input-mouse/PKGBUILD new file mode 100644 index 0000000..10525f3 --- /dev/null +++ b/xenocara-input-mouse/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-mouse package + +pkgname=xenocara-input-mouse +_openbsdver=6.9 +pkgver=1.9.3 +pkgrel=3 +pkgdesc="Xenocara mouse input driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-mouse') +conflicts=('xf86-input-mouse' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-mouse') +groups=('xenocara-drivers' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-mouse-$pkgver.tar.lz{,.sig}) +sha512sums=('bc07156c87cfc91217b7956db8e6f0a070c08d8ec052bddedda3e43b4ed78a5fcd97a8e5292956fe9a2bcb47658290e86dd88e0f00aeed09e9f2e8b32a431f0f' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-mouse" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-mouse" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-mouse" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-synaptics-debug/PKGBUILD b/xenocara-input-synaptics-debug/PKGBUILD new file mode 100644 index 0000000..5ec2b02 --- /dev/null +++ b/xenocara-input-synaptics-debug/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-synaptics package + +pkgname=xenocara-input-synaptics-debug +_openbsdver=6.9 +pkgver=1.9.1 +pkgrel=4 +pkgdesc="Synaptics driver for notebook touchpads, provided by Xenocara" +arch=('i686' 'x86_64') +license=('Expat') +url="https://www.xenocara.org" +depends=('libxtst' 'libevdev') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'libxi' 'libx11' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-synaptics' 'synaptics') +conflicts=('xf86-input-synaptics' 'synaptics' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-synaptics' 'synaptics') +groups=('xenocara-drivers-debug' 'xorg-drivers-debug') +install=xenocara-input-synaptics.install +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-synaptics-$pkgver.tar.lz{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('7a7b2367ca61837ecd9a081dcaeb2367bb34a6105126e26d17087797f5dede10e149eeb8c61b8df57286cee769b9ef0983bc9c2338723976fa8ea4ce92168614' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-synaptics" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-synaptics" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-synaptics" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-synaptics-debug/xenocara-input-synaptics.install b/xenocara-input-synaptics-debug/xenocara-input-synaptics.install new file mode 100644 index 0000000..c48a6c4 --- /dev/null +++ b/xenocara-input-synaptics-debug/xenocara-input-synaptics.install @@ -0,0 +1,10 @@ +post_install() { + cat <>> xenocara-input-synaptics driver is on maintenance mode and + xorg-input-evdev driver must be prefered over. +MSG +} + +post_upgrade() { + post_install +} diff --git a/xenocara-input-synaptics/PKGBUILD b/xenocara-input-synaptics/PKGBUILD new file mode 100644 index 0000000..124a803 --- /dev/null +++ b/xenocara-input-synaptics/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-synaptics package + +pkgname=xenocara-input-synaptics +_openbsdver=6.9 +pkgver=1.9.1 +pkgrel=4 +pkgdesc="Synaptics driver for notebook touchpads, provided by Xenocara" +arch=('i686' 'x86_64') +license=('Expat') +url="https://www.xenocara.org" +depends=('libxtst' 'libevdev') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'libxi' 'libx11' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-synaptics' 'synaptics') +conflicts=('xf86-input-synaptics' 'synaptics' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-synaptics' 'synaptics') +groups=('xenocara-drivers' 'xorg-drivers') +install=xenocara-input-synaptics.install +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-synaptics-$pkgver.tar.lz{,.sig}) +sha512sums=('7a7b2367ca61837ecd9a081dcaeb2367bb34a6105126e26d17087797f5dede10e149eeb8c61b8df57286cee769b9ef0983bc9c2338723976fa8ea4ce92168614' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-synaptics" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-synaptics" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-synaptics" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-synaptics/xenocara-input-synaptics.install b/xenocara-input-synaptics/xenocara-input-synaptics.install new file mode 100644 index 0000000..c48a6c4 --- /dev/null +++ b/xenocara-input-synaptics/xenocara-input-synaptics.install @@ -0,0 +1,10 @@ +post_install() { + cat <>> xenocara-input-synaptics driver is on maintenance mode and + xorg-input-evdev driver must be prefered over. +MSG +} + +post_upgrade() { + post_install +} diff --git a/xenocara-input-vmmouse-debug/PKGBUILD b/xenocara-input-vmmouse-debug/PKGBUILD new file mode 100644 index 0000000..656e524 --- /dev/null +++ b/xenocara-input-vmmouse-debug/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-vmmouse package + +pkgname=xenocara-input-vmmouse-debug +_openbsdver=6.9 +pkgver=13.1.0 +pkgrel=4 +pkgdesc="Xenocara VMWare Mouse input driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('libeudev') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-vmmouse') +conflicts=('xf86-input-vmmouse' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-vmmouse') +groups=('xenocara-drivers-debug' 'xorg-drivers-debug') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-vmmouse-$pkgver.tar.lz{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('f7ab83577762c951cfcfffa2c406a5a3c170957d467dec802185b75af9cb2cec9b09dde917ed85291274aa1b00b99c01c557ba2ca2537a2c15df407fd19d7472' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-vmmouse" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-vmmouse" + ./configure --prefix=/usr \ + --with-udev-rules-dir=/lib/udev/rules.d + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-vmmouse" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + rm -rfv $pkgdir/usr/{lib,share}/hal +} diff --git a/xenocara-input-vmmouse/PKGBUILD b/xenocara-input-vmmouse/PKGBUILD new file mode 100644 index 0000000..2c917e0 --- /dev/null +++ b/xenocara-input-vmmouse/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-vmmouse package + +pkgname=xenocara-input-vmmouse +_openbsdver=6.9 +pkgver=13.1.0 +pkgrel=3 +pkgdesc="Xenocara VMWare Mouse input driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('libeudev') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-vmmouse') +conflicts=('xf86-input-vmmouse' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-vmmouse') +groups=('xenocara-drivers' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-vmmouse-$pkgver.tar.lz{,.sig}) +sha512sums=('f7ab83577762c951cfcfffa2c406a5a3c170957d467dec802185b75af9cb2cec9b09dde917ed85291274aa1b00b99c01c557ba2ca2537a2c15df407fd19d7472' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-vmmouse" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-vmmouse" + ./configure --prefix=/usr \ + --with-udev-rules-dir=/lib/udev/rules.d + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-vmmouse" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + rm -rfv $pkgdir/usr/{lib,share}/hal +} diff --git a/xenocara-input-void-debug/PKGBUILD b/xenocara-input-void-debug/PKGBUILD new file mode 100644 index 0000000..98fbe69 --- /dev/null +++ b/xenocara-input-void-debug/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-void package + +pkgname=xenocara-input-void-debug +_openbsdver=6.9 +pkgver=1.4.1 +pkgrel=4 +pkgdesc="Xenocara void input driver" +arch=(i686 x86_64) +license=('Expat') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-void') +conflicts=('xf86-input-void' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-void') +groups=('xenocara-drivers-debug' 'xorg-drivers-debug') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-void-$pkgver.tar.lz{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('4d515466aa28816dcc49ff032e3c1b36d1e09efefb8b804b079a93b51a6c42e8add616a56e80477165259d58c0e00a3152f386c3005bfcbba444ff26fd4874e1' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-void" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-void" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-void" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-input-void/PKGBUILD b/xenocara-input-void/PKGBUILD new file mode 100644 index 0000000..64f8eb2 --- /dev/null +++ b/xenocara-input-void/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-void package + +pkgname=xenocara-input-void +_openbsdver=6.9 +pkgver=1.4.1 +pkgrel=3 +pkgdesc="Xenocara void input driver" +arch=(i686 x86_64) +license=('Expat') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-void') +conflicts=('xf86-input-void' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-void') +groups=('xenocara-drivers' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-input-void-$pkgver.tar.lz{,.sig}) +sha512sums=('4d515466aa28816dcc49ff032e3c1b36d1e09efefb8b804b079a93b51a6c42e8add616a56e80477165259d58c0e00a3152f386c3005bfcbba444ff26fd4874e1' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-input-void" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-input-void" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-input-void" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-luit/PKGBUILD b/xenocara-luit/PKGBUILD new file mode 100644 index 0000000..e8594e7 --- /dev/null +++ b/xenocara-luit/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +# Based on xorg-luit package + +pkgname=xenocara-luit +_openbsdver=6.9 +pkgver=1.1.1 +pkgrel=3 +pkgdesc="Filter that can be run between an arbitrary application and a UTF-8 terminal emulator, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('libfontenc') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-luit') +conflicts=('xorg-luit') +replaces=('xorg-luit') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/luit-$pkgver.tar.lz{,.sig} + git-fixes.patch) +sha512sums=('b637daa4e087f235d141ee38ca172962b9f79c47805a69456dbcd746209f43de2a4273aac18469ae56304c43a50b5baed551fe19571f5e69aa24334981014531' + 'SKIP' + 'bde23389de4ef0cf3c9df962cc03f556b24463765d8794d9d53400252542a542fe28a4218ec978d0edd648a783d11eee66f0ad0d8af79a68c111d3dc672d0801') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/luit" + patch -p1 -i "$srcdir/git-fixes.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/luit" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/luit" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-luit/git-fixes.patch b/xenocara-luit/git-fixes.patch new file mode 100644 index 0000000..995a210 --- /dev/null +++ b/xenocara-luit/git-fixes.patch @@ -0,0 +1,216 @@ +From 473959141641b6779e6ff3c3c5b6ef326073bcd4 Mon Sep 17 00:00:00 2001 +From: Mike FABIAN +Date: Tue, 07 Jun 2011 11:42:00 +0000 +Subject: Set up terminal before fork. + +After the fork it is undefined wether parent or child runs +first. So there can be a race: if the child runs before the +terminal of the parent is set up correctly luit may hang. +This patch sets up the terminal before forking and undoes +the settings in the child. + +Signed-off-by: Mike FABIAN +Signed-off-by: Egbert Eich +--- +diff --git a/luit.c b/luit.c +index 0ece7b6..5cb3b8f 100644 +--- a/luit.c ++++ b/luit.c +@@ -577,6 +577,8 @@ condom(int argc, char **argv) + IGNORE_RC(pipe(c2p_waitpipe)); + } + ++ setup_io(pty); ++ + pid = fork(); + if (pid < 0) { + perror("Couldn't fork"); +@@ -584,6 +586,10 @@ condom(int argc, char **argv) + } + + if (pid == 0) { ++#ifdef SIGWINCH ++ installHandler(SIGWINCH, SIG_DFL); ++#endif ++ installHandler(SIGCHLD, SIG_DFL); + close(pty); + if (pipe_option) { + close_waitpipe(1); +@@ -661,7 +667,6 @@ parent(int pid GCC_UNUSED, int pty) + if (verbose) { + reportIso2022(outputState); + } +- setup_io(pty); + + if (pipe_option) { + write_waitpipe(p2c_waitpipe); +-- +cgit v0.9.0.2-2-gbebe + +From 09f4907e4ab4ba3654de829bf3ac2a4a02bb9ef4 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith +Date: Sat, 22 Jun 2013 04:11:43 +0000 +Subject: Fix GCC_UNUSED definition to actually work with -Wunused-parameter + +Silences warnings of: +charset.c: In function â€IdentityRecode’: +charset.c:42:51: warning: unused parameter â€self’ [-Wunused-parameter] +charset.c: In function â€NullReverse’: +charset.c:84:26: warning: unused parameter â€n’ [-Wunused-parameter] +charset.c:84:59: warning: unused parameter â€self’ [-Wunused-parameter] +other.c: In function â€mapping_utf8’: +other.c:108:44: warning: unused parameter â€s’ [-Wunused-parameter] +other.c: In function â€reverse_utf8’: +other.c:114:44: warning: unused parameter â€s’ [-Wunused-parameter] +luit.c: In function â€sigwinchHandler’: +luit.c:463:21: warning: unused parameter â€sig’ [-Wunused-parameter] +luit.c: In function â€sigchldHandler’: +luit.c:470:20: warning: unused parameter â€sig’ [-Wunused-parameter] +luit.c: In function â€parent’: +luit.c:657:12: warning: unused parameter â€pid’ [-Wunused-parameter] + +Signed-off-by: Alan Coopersmith +--- +diff --git a/other.h b/other.h +index 9d814a3..d18b586 100644 +--- a/other.h ++++ b/other.h +@@ -26,7 +26,11 @@ THE SOFTWARE. + #include "config.h" /* include this, for self-contained headers */ + + #ifndef GCC_UNUSED +-#define GCC_UNUSED /* ARGSUSED */ ++# if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 205) ++# define GCC_UNUSED __attribute__((__unused__)) ++# else ++# define GCC_UNUSED /* ARGSUSED */ ++# endif + #endif + + #include +-- +cgit v0.9.0.2-2-gbebe + +From 445863f8b5059692ac7a4df785af6920849faa82 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith +Date: Sat, 13 Jul 2013 16:08:34 +0000 +Subject: config: Add missing AC_CONFIG_SRCDIR + +Regroup AC statements under the Autoconf initialization section. +Regroup AM statements under the Automake initialization section. + +Signed-off-by: Alan Coopersmith +Reviewed-by: Julien Cristau +Reviewed-by: Matthieu Herrb +--- +diff --git a/configure.ac b/configure.ac +index c214d85..946db23 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -20,9 +20,14 @@ dnl PERFORMANCE OF THIS SOFTWARE. + dnl + dnl Process this file with autoconf to create configure. + ++# Initialize Autoconf + AC_PREREQ([2.60]) + AC_INIT([luit], [1.1.1], + [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [luit]) ++AC_CONFIG_SRCDIR([Makefile.am]) ++AC_CONFIG_HEADERS([config.h]) ++ ++# Initialize Automake + AM_INIT_AUTOMAKE([foreign dist-bzip2]) + AM_MAINTAINER_MODE + +@@ -32,8 +37,6 @@ m4_ifndef([XORG_MACROS_VERSION], + XORG_MACROS_VERSION(1.8) + XORG_DEFAULT_OPTIONS + +-AC_CONFIG_HEADERS([config.h]) +- + AC_CANONICAL_HOST + + +-- +cgit v0.9.0.2-2-gbebe + +From 800f55f8dcd195dd0cdfc1c4d7487d00bb7745f4 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith +Date: Sat, 13 Jul 2013 16:11:20 +0000 +Subject: Replace hardcoded _XOPEN_SOURCE=500 with AC_USE_SYSTEM_EXTENSIONS + +-D_XOPEN_SOURCE was originally added for Linux in commit e751086392e837 +and then updated to -D_XOPEN_SOURCE=500 in commit e1a002217cabdb to +expose strdup() in glibc headers. + +As noted in bug 47792 though, the posix_openpt() function is not +visible unless that's raised to 600. + +Instead of continually chasing the standards ourselves, switch to letting +autoconf handle that for us. + +Signed-off-by: Alan Coopersmith +Reviewed-by: Julien Cristau +Reviewed-by: Matthieu Herrb +--- +diff --git a/Makefile.am b/Makefile.am +index 8069670..ef042e3 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -25,7 +25,6 @@ bin_PROGRAMS = luit + AM_CFLAGS = \ + $(CWARNFLAGS) \ + $(LUIT_CFLAGS) \ +- $(OS_CFLAGS) \ + -DLOCALE_ALIAS_FILE=\"$(LOCALEALIASFILE)\" + + luit_LDADD = $(LUIT_LIBS) +diff --git a/configure.ac b/configure.ac +index 946db23..0ec4664 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -26,6 +26,7 @@ AC_INIT([luit], [1.1.1], + [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [luit]) + AC_CONFIG_SRCDIR([Makefile.am]) + AC_CONFIG_HEADERS([config.h]) ++AC_USE_SYSTEM_EXTENSIONS + + # Initialize Automake + AM_INIT_AUTOMAKE([foreign dist-bzip2]) +@@ -37,9 +38,6 @@ m4_ifndef([XORG_MACROS_VERSION], + XORG_MACROS_VERSION(1.8) + XORG_DEFAULT_OPTIONS + +-AC_CANONICAL_HOST +- +- + AC_CHECK_HEADERS([pty.h stropts.h sys/param.h sys/select.h]) + AC_CHECK_FUNCS([select grantpt posix_openpt]) + +@@ -57,23 +55,16 @@ PKG_CHECK_MODULES(LUIT, fontenc) + PKG_CHECK_EXISTS(x11, [], + [AC_MSG_WARN([libX11 not found. luit may not be able to find locale aliases without it.])]) + ++AC_CANONICAL_HOST + case $host_os in + # darwin has poll() but can't be used to poll character devices (atleast through SnowLeopard) + darwin*) +- OS_CFLAGS= +- ;; +- linux*) +- AC_CHECK_HEADERS([poll.h]) +- AC_CHECK_FUNCS([poll]) +- OS_CFLAGS="-D_XOPEN_SOURCE=500" + ;; + *) + AC_CHECK_HEADERS([poll.h]) + AC_CHECK_FUNCS([poll]) +- OS_CFLAGS= + ;; + esac +-AC_SUBST(OS_CFLAGS) + + AC_CHECK_HEADERS([pty.h stropts.h sys/ioctl.h sys/param.h sys/poll.h sys/select.h sys/time.h termios.h]) + AC_CHECK_FUNCS([grantpt putenv select strdup]) +-- +cgit v0.9.0.2-2-gbebe diff --git a/xenocara-mkfontscale/PKGBUILD b/xenocara-mkfontscale/PKGBUILD new file mode 100644 index 0000000..4a55a72 --- /dev/null +++ b/xenocara-mkfontscale/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +# Based on xorg-mkfontscale package + +pkgname=xenocara-mkfontscale +_openbsdver=6.9 +pkgver=1.2.1 +pkgrel=5 +pkgdesc="Create an index of scalable font files for X, provided by Xenocara" +arch=('i686' 'x86_64') +url='https://www.xenocara.org' +license=('Expat') +depends=('freetype2' 'libfontenc') +makedepends=('xenocara-util-macros' 'xenocara-proto') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-mkfontscale' 'xorg-mkfontdir') +conflicts=('xorg-mkfontscale' 'xorg-mkfontdir') +replaces=('xorg-mkfontscale' 'xorg-mkfontdir') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/mkfontscale-$pkgver.tar.lz{,.sig} + xenocara-mkfontscale.hook + xenocara-mkfontscale.script) +sha512sums=('10483518d200e28928b2dc05bd1de7f18011a06f9b2628afa7114ffbd4df60c015c1fdf9914d46489cc62ce99af70eabaa44d7f4eb6289a3e241e49be9e5485d' + 'SKIP' + '8b5401d55c0248d36721a5e2de06c0886241fee5615ba9b83fab5c59afa998c63bd77b83dcd7b7556b1f8e1c91a6fc06f1a89dbed46ed8ca146ca5fcfde93d10' + '744f639d9a3d9e88985ecc86861f4b4959362dd6fe46af73af064a312e0c9a00a1d84a95e0725549fcdc32eb0b7d6a8709c4c2cf4c2e206c365c6bacf215a9d9') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/mkfontscale" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/mkfontscale" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/mkfontscale" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/xenocara-mkfontscale.hook" "$pkgdir/usr/share/libalpm/hooks/xenocara-mkfontscale.hook" + install -Dm755 "$srcdir/xenocara-mkfontscale.script" "$pkgdir/usr/share/libalpm/scripts/xenocara-mkfontscale" + + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/xenocara-mkfontscale/xenocara-mkfontscale.hook b/xenocara-mkfontscale/xenocara-mkfontscale.hook new file mode 100644 index 0000000..5afa857 --- /dev/null +++ b/xenocara-mkfontscale/xenocara-mkfontscale.hook @@ -0,0 +1,13 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/fonts/*/ +Target = !usr/share/fonts/encodings/* + +[Action] +Description = Updating X fontdir indices... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/xenocara-mkfontscale +NeedsTargets diff --git a/xenocara-mkfontscale/xenocara-mkfontscale.script b/xenocara-mkfontscale/xenocara-mkfontscale.script new file mode 100644 index 0000000..fc41554 --- /dev/null +++ b/xenocara-mkfontscale/xenocara-mkfontscale.script @@ -0,0 +1,9 @@ +#!/bin/sh + +sort -r | while read -r d; do + [[ -d $d ]] || continue + mkfontscale "$d" + mkfontdir "$d" + find "$d"fonts.{scale,dir} -maxdepth 0 -size -3c -delete + rmdir --ignore-fail-on-non-empty "$d" +done diff --git a/xenocara-oclock/PKGBUILD b/xenocara-oclock/PKGBUILD new file mode 100644 index 0000000..41d5332 --- /dev/null +++ b/xenocara-oclock/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-oclock package + +pkgname=xenocara-oclock +_openbsdver=6.9 +pkgver=1.0.4 +pkgrel=3 +pkgdesc="Round X clock, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxmu' 'libxext' 'libxkbfile') +makedepends=('xenocara-util-macros') +provides=('xorg-oclock') +conflicts=('xorg-oclock') +replaces=('xorg-oclock') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/oclock-$pkgver.tar.lz{,.sig}) +sha512sums=('639edce741bdbad947a5522437519cbbc40c9b427d7f44534d512fad71428f1ddef85d6c9c8b2bd489e06a0923e82ad717c48707e0f34b30918dd89d15b31c45' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/oclock" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/oclock" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/oclock" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-proto/PKGBUILD b/xenocara-proto/PKGBUILD new file mode 100644 index 0000000..153c35c --- /dev/null +++ b/xenocara-proto/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +# Based on xorgproto package + +pkgname=xenocara-proto +_openbsdver=6.9 +pkgver=2019.2 +pkgrel=2 +pkgdesc="combined Xenocara X11 Protocol headers" +arch=('any') +url="https://www.xenocara.org" +license=('X11') +makedepends=('xenocara-util-macros') +provides=('xorgproto' 'bigreqsproto' 'compositeproto' 'damageproto' 'dmxproto' 'dri2proto' 'dri3proto' 'fixesproto' 'fontsproto' 'glproto' 'inputproto' 'kbproto' 'presentproto' 'printproto' 'randrproto' 'recordproto' 'renderproto' 'resourceproto' 'scrnsaverproto' 'videoproto' 'xcmiscproto' 'xextproto' 'xf86dgaproto' 'xf86driproto' 'xf86miscproto' 'xf86vidmodeproto' 'xineramaproto' 'xproto') +conflicts=('xorgproto' 'bigreqsproto' 'compositeproto' 'damageproto' 'dmxproto' 'dri2proto' 'dri3proto' 'fixesproto' 'fontsproto' 'glproto' 'inputproto' 'kbproto' 'presentproto' 'printproto' 'randrproto' 'recordproto' 'renderproto' 'resourceproto' 'scrnsaverproto' 'videoproto' 'xcmiscproto' 'xextproto' 'xf86dgaproto' 'xf86driproto' 'xf86miscproto' 'xf86vidmodeproto' 'xineramaproto' 'xproto') +replaces=('xorgproto' 'bigreqsproto' 'compositeproto' 'damageproto' 'dmxproto' 'dri2proto' 'dri3proto' 'fixesproto' 'fontsproto' 'glproto' 'inputproto' 'kbproto' 'presentproto' 'printproto' 'randrproto' 'recordproto' 'renderproto' 'resourceproto' 'scrnsaverproto' 'videoproto' 'xcmiscproto' 'xextproto' 'xf86dgaproto' 'xf86driproto' 'xf86miscproto' 'xf86vidmodeproto' 'xineramaproto' 'xproto') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/proto/xorgproto-$pkgver.tar.lz{,.sig}) +sha512sums=('9c2460355559294e251c63f3725d5408a4a2e9a1069d2d17f02dc77b5de30c4fab5546a64e1e2ae34389bf7215bf7ad39c949191a73d93c4383853602b82f595' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/proto/xorgproto" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/proto/xorgproto" + # do not try to build additional docs, we don't have xenocara-sgml-doctools + ./configure --prefix=/usr \ + --without-xmlto \ + --without-xsltproc \ + --without-fop + make +} + +check() { + cd "xenocara-$_openbsdver/proto/xorgproto" + make -k check +} + +package() { + cd "xenocara-$_openbsdver/proto/xorgproto" + make DESTDIR="$pkgdir/" install + + # licenses + install -m755 -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 COPYING* "$pkgdir/usr/share/licenses/$pkgname/" + + # cleanup + rm -f $pkgdir/usr/include/X11/extensions/{apple,windows}* + rm -f $pkgdir/usr/share/licenses/$pkgname/COPYING-{apple,windows}wmproto + rm -f $pkgdir/usr/share/pkgconfig/{apple,windows}wmproto.pc +} diff --git a/xenocara-server-debug/PKGBUILD b/xenocara-server-debug/PKGBUILD new file mode 100644 index 0000000..66d76e5 --- /dev/null +++ b/xenocara-server-debug/PKGBUILD @@ -0,0 +1,200 @@ +# Maintainer: Jesus E. + +# Based on xorg-server package + +_realpkgbase=xenocara-server +pkgbase=$_realpkgbase-debug +pkgname=("${pkgbase}" "${_realpkgbase}-xephyr-debug" "${_realpkgbase}-xdmx-debug" + "${_realpkgbase}-xvfb-debug" "${_realpkgbase}-xnest-debug") +_openbsdver=6.9 +pkgver=1.20.10 +pkgrel=7 +arch=('i686' 'x86_64') +license=('X11') +groups=('xenocara-debug' 'xorg-debug') +url="https://www.xenocara.org" +makedepends=('xenocara-proto' 'pixman' 'libx11' 'mesa' 'mesa-libgl' 'libxtrans' + 'libxkbfile' 'libxfont2' 'libpciaccess' 'libxv' + 'libxmu' 'libxrender' 'libxi' 'libxaw' 'libdmx' 'libxtst' 'libxres' + 'xenocara-xkbcomp' 'xenocara-util-macros' 'xenocara-font-util' 'libgcrypt' 'libepoxy' + 'xcb-util' 'xcb-util-image' 'xcb-util-renderutil' 'xcb-util-wm' 'xcb-util-keysyms' + 'libxshmfence' 'libunwind' 'eudev') +options=(!strip) # It's required for debug packages +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/xserver-$pkgver.tar.lz{,.sig} + xserver-autobind-hotplug.patch + remove-forced-openbsd-getdtablecount-function-support.patch + remove-forced-openbsd-mmap-flag-support.patch + remove-forced-mno-sse-support.patch + remove-forced-bison-yyparse-function-support.patch + xvfb-run + xvfb-run.1 + 10-xorg.conf.example) +sha512sums=('a544cebe022891f65e91d1c49f146e0dad5de75018c6261a0f68152c9db9c2f346afefb5a4d97c17c5fb385308d44766380aad77904f7a893cae174777caae61' + 'SKIP' + 'd84f4d63a502b7af76ea49944d1b21e2030dfd250ac1e82878935cf631973310ac9ba1f0dfedf10980ec6c7431d61b7daa4b7bbaae9ee477b2c19812c1661a22' + 'ffefe558d7ab64b4d066872964fbcf474b4b8c454da072d7f65475d44d1d72d6cd879805db3bb72eb27c3ec123d094e5f64fe4cb6af80c0205c1ffa45df568ea' + '51e37248d1a4967e055219d52957bcc9702dd243da1f937f76524019d4b2c00604e451b50420239ff7e2c51ce523eb5b61d643c8b2c797667672053abd5489eb' + 'a101d5be7c2e774fb1aba9087d7a4583c6ae8900d40ba079fc7ce8592846c20ce24e5834f4c398dca6008f7ada6099c299ab6982c7f036667bc07b17fcf25708' + 'dae6fa8635f8156aa79ce1d8385651eba3f61990ed2fb2c67493fe9d5079e80aaa0f272e31cc587e10eef15dc3be9ad97b862b5ea0897396e05a04068e2c94ac' + '73c8ead9fba6815dabfec0a55b3a53f01169f6f2d14ac4a431e53b2d96028672dbd6b50a3314568847b37b1e54ea4fc02bdf677feabb3b2697af55e2e5331810' + 'de5e2cb3c6825e6cf1f07ca0d52423e17f34d70ec7935e9dd24be5fb9883bf1e03b50ff584931bd3b41095c510ab2aa44d2573fd5feaebdcb59363b65607ff22' + '47a60f37f6cb77c588537db750fd340d50d6cb998ab6d4ff3383a5871989a7c18c836c3e4fa1400659006cae4923763b7348d55ea1d28789432fdd693f2a98e2') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/xserver" + + # Patch from Fedora, not yet merged + patch -Np1 -i "$srcdir/xserver-autobind-hotplug.patch" + # Remove forced OpenBSD getdtablecount function support + patch -Np1 -i "$srcdir/remove-forced-openbsd-getdtablecount-function-support.patch" + # Remove forced OpenBSD mmap flag (__MAP_NOFAULT) support + patch -Np1 -i "$srcdir/remove-forced-openbsd-mmap-flag-support.patch" + # Remove forced -mno-sse (SSE extensions disabling) support + patch -Np1 -i "$srcdir/remove-forced-mno-sse-support.patch" + # Remove forced Bison yyparse function support + patch -Np1 -i "$srcdir/remove-forced-bison-yyparse-function-support.patch" + + autoreconf -vfi +} + +build() { + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + cd "xenocara-$_openbsdver/xserver" + ./configure --prefix=/usr \ + --enable-ipv6 \ + --enable-dri \ + --enable-dmx \ + --enable-xvfb \ + --enable-xnest \ + --enable-composite \ + --enable-xcsecurity \ + --enable-libunwind \ + --enable-xorg \ + --enable-xephyr \ + --enable-glamor \ + --enable-debug \ + --disable-xwayland \ + --enable-kdrive \ + --enable-config-udev \ + --disable-systemd-logind \ + --disable-suid-wrapper \ + --enable-install-setuid \ + --enable-record \ + --disable-static \ + --libexecdir=/usr/libexec/xorg \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-xkb-path=/usr/share/X11/xkb \ + --with-xkb-output=/var/lib/xkb \ + --with-fontrootdir=/usr/share/fonts \ + --with-sha1=libgcrypt \ + --without-systemd-daemon + + make + + # Disable subdirs for make install rule to make splitting easier + sed -e 's/^DMX_SUBDIRS =.*/DMX_SUBDIRS =/' \ + -e 's/^XVFB_SUBDIRS =.*/XVFB_SUBDIRS =/' \ + -e 's/^XNEST_SUBDIRS =.*/XNEST_SUBDIRS = /' \ + -e 's/^KDRIVE_SUBDIRS =.*/KDRIVE_SUBDIRS =/' \ + -i hw/Makefile +} + +package_xenocara-server-debug() { + pkgdesc="Xenocara X server" + depends=(libepoxy libxfont2 libbsd pixman xenocara-server-common libunwind mesa-libgl xorg-input-evdev + libpciaccess libdrm libxshmfence) # FS#52949 + + # see xenocara/hw/xfree86/common/xf86Module.h for ABI versions - we provide major numbers that drivers can depend on + # and /usr/lib/pkgconfig/xorg-server.pc in xenocara-server-devel pkg + provides=('xenocara-server' 'xorg-server' 'X-ABI-VIDEODRV_VERSION=24.0' 'X-ABI-XINPUT_VERSION=24.1' 'X-ABI-EXTENSION_VERSION=10.0' 'x-server') + conflicts=('xenocara-server' 'xorg-server' 'nvidia-utils<=331.20' 'glamor-egl' 'xf86-video-modesetting') + replaces=('xorg-server' 'glamor-egl' 'xf86-video-modesetting' 'xf86-video-amdgpu') + install=$_realpkgbase.install + + cd "xenocara-$_openbsdver/xserver" + make DESTDIR="$pkgdir" install + + # distro specific files must be installed in /usr/share/X11/xorg.conf.d + install -m755 -d "$pkgdir/etc/X11/xorg.conf.d" + cp $srcdir/10-xorg.conf.example "$pkgdir/etc/X11/xorg.conf.d" + + rm -rf "$pkgdir/var" + + # remove files, these files are part of "-common" package + rm -f "$pkgdir/usr/share/man/man1/Xserver.1" + rm -f "$pkgdir/usr/lib/xorg/protocol.txt" + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + # remove files, these files are part of "-devel" package + rm -rf "$pkgdir/usr/lib/pkgconfig" + rm -rf "$pkgdir/usr/include" + rm -rf "$pkgdir/usr/share/aclocal" +} + +package_xenocara-server-xephyr-debug() { + pkgdesc="A nested X server that runs as an X application, provided by Xenocara" + depends=(libxfont2 mesa-libgl libepoxy libunwind libeudev libxv pixman xenocara-server-common xcb-util-image + xcb-util-renderutil xcb-util-wm xcb-util-keysyms) + provides=('xenocara-server-xephyr' 'xorg-server-xephyr') + conflicts=('xenocara-server-xephyr' 'xorg-server-xephyr') + replaces=('xorg-server-xephyr') + + cd "xenocara-$_openbsdver/xserver/hw/kdrive" + make DESTDIR="$pkgdir" install + + install -Dm644 ../../COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_xenocara-server-xvfb-debug() { + pkgdesc="Virtual framebuffer X server, provided by Xenocara" + depends=(libxfont2 libunwind libeudev pixman xenocara-server-common xenocara-xauth mesa-libgl) + provides=('xenocara-server-xvfb' 'xorg-server-xvfb') + conflicts=('xenocara-server-xvfb' 'xorg-server-xvfb') + replaces=('xorg-server-xvfb') + + cd "xenocara-$_openbsdver/xserver/hw/vfb" + make DESTDIR="$pkgdir" install + + install -m755 "$srcdir/xvfb-run" "$pkgdir/usr/bin/" + install -m644 "$srcdir/xvfb-run.1" "$pkgdir/usr/share/man/man1/" + + install -Dm644 ../../COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_xenocara-server-xnest-debug() { + pkgdesc="A nested X server that runs as an X application, provided by Xenocara" + depends=(libxfont2 libxext libunwind pixman xenocara-server-common libeudev) + provides=('xenocara-server-xnest' 'xorg-server-xnest') + conflicts=('xenocara-server-xnest' 'xorg-server-xnest') + replaces=('xorg-server-xnest') + + cd "xenocara-$_openbsdver/xserver/hw/xnest" + make DESTDIR="$pkgdir" install + + install -Dm644 ../../COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_xenocara-server-xdmx-debug() { + pkgdesc="Distributed Multihead X Server and utilities, provided by Xenocara" + depends=(libxfont2 libxi libxaw libxrender libdmx libxfixes libunwind pixman xenocara-server-common) + provides=('xenocara-server-xdmx' 'xorg-server-xdmx') + conflicts=('xenocara-server-xdmx' 'xorg-server-xdmx') + replaces=('xorg-server-xdmx') + + cd "xenocara-$_openbsdver/xserver/hw/dmx" + make DESTDIR="$pkgdir" install + + install -Dm644 ../../COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-server-debug/remove-forced-bison-yyparse-function-support.patch b/xenocara-server-debug/remove-forced-bison-yyparse-function-support.patch new file mode 100644 index 0000000..be96487 --- /dev/null +++ b/xenocara-server-debug/remove-forced-bison-yyparse-function-support.patch @@ -0,0 +1,52 @@ +diff --git a/hw/dmx/config/dmxconfig.c b/hw/dmx/config/dmxconfig.c +index 85bc0db..6cf5901 100644 +--- a/hw/dmx/config/dmxconfig.c ++++ b/hw/dmx/config/dmxconfig.c +@@ -171,7 +171,6 @@ dmxConfigReadFile(const char *filename, int debug) + dmxLog(dmxInfo, "Reading configuration file \"%s\"\n", filename); + yyin = str; + yydebug = debug; +- yyparse(); + fclose(str); + return 0; + } +diff --git a/hw/dmx/config/dmxtodmx.c b/hw/dmx/config/dmxtodmx.c +index 5a1a0b4..03c51c4 100644 +--- a/hw/dmx/config/dmxtodmx.c ++++ b/hw/dmx/config/dmxtodmx.c +@@ -37,7 +37,6 @@ + #include "dmxprint.h" + #include "dmxcompat.h" + +-extern int yyparse(void); + extern int yydebug; + extern FILE *yyin; + +@@ -45,7 +44,6 @@ int + main(int argc, char **argv) + { + yydebug = 0; +- yyparse(); + dmxConfigPrint(stdout, dmxConfigEntry); + return 0; + } +diff --git a/hw/dmx/config/xdmxconfig.c b/hw/dmx/config/xdmxconfig.c +index 05d8396..8d6a753 100644 +--- a/hw/dmx/config/xdmxconfig.c ++++ b/hw/dmx/config/xdmxconfig.c +@@ -52,7 +52,6 @@ + #include "dmxprint.h" + #include "dmxlog.h" + +-extern int yyparse(void); + extern int yydebug; + extern FILE *yyin; + +@@ -448,7 +447,6 @@ dmxConfigReadFile(void) + } + yyin = str; + yydebug = 0; +- yyparse(); + fclose(str); + dmxLog(dmxInfo, "Read configuration file %s\n", dmxConfigFilename); + diff --git a/xenocara-server-debug/remove-forced-mno-sse-support.patch b/xenocara-server-debug/remove-forced-mno-sse-support.patch new file mode 100644 index 0000000..e5b8317 --- /dev/null +++ b/xenocara-server-debug/remove-forced-mno-sse-support.patch @@ -0,0 +1,31 @@ +diff --git a/hw/xfree86/os-support/misc/Makefile.am b/hw/xfree86/os-support/misc/Makefile.am +index 98e962f..0265aec 100644 +--- a/hw/xfree86/os-support/misc/Makefile.am ++++ b/hw/xfree86/os-support/misc/Makefile.am +@@ -7,11 +7,6 @@ libmisc_la_SOURCES = SlowBcopy.c + + AM_CPPFLAGS = $(XORG_INCS) + +-if I386_VIDEO +-NOSSE_CFLAGS = -mno-sse +-endif +- +-AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) $(NOSSE_CFLAGS) +- ++AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) + + EXTRA_DIST = $(I386_SRCS) $(PORTIO_SRCS) +diff --git a/hw/xfree86/os-support/misc/Makefile.in b/hw/xfree86/os-support/misc/Makefile.in +index bb80b92..eb7680b 100644 +--- a/hw/xfree86/os-support/misc/Makefile.in ++++ b/hw/xfree86/os-support/misc/Makefile.in +@@ -483,8 +483,7 @@ libmisc_la_SOURCES = SlowBcopy.c + + #AM_LDFLAGS = -r + AM_CPPFLAGS = $(XORG_INCS) +-@I386_VIDEO_TRUE@NOSSE_CFLAGS = -mno-sse +-AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) $(NOSSE_CFLAGS) ++AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) + EXTRA_DIST = $(I386_SRCS) $(PORTIO_SRCS) + all: all-am + diff --git a/xenocara-server-debug/remove-forced-openbsd-getdtablecount-function-support.patch b/xenocara-server-debug/remove-forced-openbsd-getdtablecount-function-support.patch new file mode 100644 index 0000000..cb33a14 --- /dev/null +++ b/xenocara-server-debug/remove-forced-openbsd-getdtablecount-function-support.patch @@ -0,0 +1,16 @@ +diff --git a/os/connection.c b/os/connection.c +index 4153930a..3c6d619c 100644 +--- a/os/connection.c ++++ b/os/connection.c +@@ -692,9 +692,11 @@ EstablishNewConnections(ClientPtr clientUnused, void *closure) + if ((trans_conn = lookup_trans_conn(curconn)) == NULL) + return TRUE; + ++#ifdef __OpenBSD__ + if ((getdtablecount() + FdReserve) >= getdtablesize()) + Backoff = TRUE; + else ++#endif + Backoff = FALSE; + + if ((new_trans_conn = _XSERVTransAccept(trans_conn, &status)) == NULL) diff --git a/xenocara-server-debug/remove-forced-openbsd-mmap-flag-support.patch b/xenocara-server-debug/remove-forced-openbsd-mmap-flag-support.patch new file mode 100644 index 0000000..1882194 --- /dev/null +++ b/xenocara-server-debug/remove-forced-openbsd-mmap-flag-support.patch @@ -0,0 +1,22 @@ +diff --git a/Xext/shm.c b/Xext/shm.c +index a95c91c..fe42a66 100644 +--- a/Xext/shm.c ++++ b/Xext/shm.c +@@ -1161,7 +1161,7 @@ ProcShmAttachFd(ClientPtr client) + shmdesc->is_fd = TRUE; + shmdesc->addr = mmap(NULL, statb.st_size, + stuff->readOnly ? PROT_READ : PROT_READ|PROT_WRITE, +- MAP_SHARED|__MAP_NOFAULT, ++ MAP_SHARED, + fd, 0); + + close(fd); +@@ -1254,7 +1254,7 @@ ProcShmCreateSegment(ClientPtr client) + shmdesc->is_fd = TRUE; + shmdesc->addr = mmap(NULL, stuff->size, + stuff->readOnly ? PROT_READ : PROT_READ|PROT_WRITE, +- MAP_SHARED|__MAP_NOFAULT, ++ MAP_SHARED, + fd, 0); + + if (shmdesc->addr == ((char *) -1)) { diff --git a/xenocara-server-debug/xenocara-server.install b/xenocara-server-debug/xenocara-server.install new file mode 100644 index 0000000..07e6199 --- /dev/null +++ b/xenocara-server-debug/xenocara-server.install @@ -0,0 +1,35 @@ +#!/bin/sh + +post_install() { + echo '>>> !!!ATTENTION!!!' + echo '>>> =================================================================================' + echo '>>> For AMD/ATI Radeon R600 series and newer,' + echo '>>> please configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "modesetting"' + echo '>>> Option "AccelMethod" "none"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> For unsupported GPU (non-UEFI machines), please install "xenocara-video-vesa" and' + echo '>>> configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "vesa"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Or install "xenocara-video-fbdev" package and' + echo '>>> configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "fbdev"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' +} + +post_upgrade() { + post_install +} diff --git a/xenocara-server-debug/xserver-autobind-hotplug.patch b/xenocara-server-debug/xserver-autobind-hotplug.patch new file mode 100644 index 0000000..86b96a2 --- /dev/null +++ b/xenocara-server-debug/xserver-autobind-hotplug.patch @@ -0,0 +1,293 @@ +From 471289fa1dc359555ceed6302f7d9605ab6be3ea Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Mon, 2 Apr 2018 16:49:02 -0400 +Subject: [PATCH] autobind GPUs to the screen + +This is a modified version of a patch we've been carry-ing in Fedora and +RHEL for years now. This patch automatically adds secondary GPUs to the +master as output sink / offload source making e.g. the use of +slave-outputs just work, with requiring the user to manually run +"xrandr --setprovideroutputsource" before he can hookup an external +monitor to his hybrid graphics laptop. + +There is one problem with this patch, which is why it was not upstreamed +before. What to do when a secondary GPU gets detected really is a policy +decission (e.g. one may want to autobind PCI GPUs but not USB ones) and +as such should be under control of the Desktop Environment. + +Unconditionally adding autobinding support to the xserver will result +in races between the DE dealing with the hotplug of a secondary GPU +and the server itself dealing with it. + +However we've waited for years for any Desktop Environments to actually +start doing some sort of autoconfiguration of secondary GPUs and there +is still not a single DE dealing with this, so I believe that it is +time to upstream this now. + +To avoid potential future problems if any DEs get support for doing +secondary GPU configuration themselves, the new autobind functionality +is made optional. Since no DEs currently support doing this themselves it +is enabled by default. When DEs grow support for doing this themselves +they can disable the servers autobinding through the servers cmdline or a +xorg.conf snippet. + +Signed-off-by: Dave Airlie +[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream] +Signed-off-by: Hans de Goede +--- + hw/xfree86/common/xf86Config.c | 19 +++++++++++++++++++ + hw/xfree86/common/xf86Globals.c | 2 ++ + hw/xfree86/common/xf86Init.c | 20 ++++++++++++++++++++ + hw/xfree86/common/xf86Priv.h | 1 + + hw/xfree86/common/xf86Privstr.h | 1 + + hw/xfree86/common/xf86platformBus.c | 4 ++++ + hw/xfree86/man/Xorg.man | 7 +++++++ + hw/xfree86/man/xorg.conf.man | 6 ++++++ + randr/randrstr.h | 3 +++ + randr/rrprovider.c | 22 ++++++++++++++++++++++ + 10 files changed, 85 insertions(+) + +diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c +index 2c1d335..d7d7c2e 100644 +--- a/hw/xfree86/common/xf86Config.c ++++ b/hw/xfree86/common/xf86Config.c +@@ -643,6 +643,7 @@ typedef enum { + FLAG_DRI2, + FLAG_USE_SIGIO, + FLAG_AUTO_ADD_GPU, ++ FLAG_AUTO_BIND_GPU, + FLAG_MAX_CLIENTS, + FLAG_IGLX, + FLAG_DEBUG, +@@ -699,6 +700,8 @@ static OptionInfoRec FlagOptions[] = { + {0}, FALSE}, + {FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN, + {0}, FALSE}, ++ {FLAG_AUTO_BIND_GPU, "AutoBindGPU", OPTV_BOOLEAN, ++ {0}, FALSE}, + {FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER, + {0}, FALSE }, + {FLAG_IGLX, "IndirectGLX", OPTV_BOOLEAN, +@@ -779,6 +782,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts) + } + xf86Msg(from, "%sutomatically adding GPU devices\n", + xf86Info.autoAddGPU ? "A" : "Not a"); ++ ++ if (xf86AutoBindGPUDisabled) { ++ xf86Info.autoBindGPU = FALSE; ++ from = X_CMDLINE; ++ } ++ else if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_BIND_GPU)) { ++ xf86GetOptValBool(FlagOptions, FLAG_AUTO_BIND_GPU, ++ &xf86Info.autoBindGPU); ++ from = X_CONFIG; ++ } ++ else { ++ from = X_DEFAULT; ++ } ++ xf86Msg(from, "%sutomatically binding GPU devices\n", ++ xf86Info.autoBindGPU ? "A" : "Not a"); ++ + /* + * Set things up based on the config file information. Some of these + * settings may be overridden later when the command line options are +diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c +index e890f05..7b27b4c 100644 +--- a/hw/xfree86/common/xf86Globals.c ++++ b/hw/xfree86/common/xf86Globals.c +@@ -131,6 +131,7 @@ xf86InfoRec xf86Info = { + #else + .autoAddGPU = FALSE, + #endif ++ .autoBindGPU = TRUE, + }; + + const char *xf86ConfigFile = NULL; +@@ -191,6 +192,7 @@ Bool xf86FlipPixels = FALSE; + Gamma xf86Gamma = { 0.0, 0.0, 0.0 }; + + Bool xf86AllowMouseOpenFail = FALSE; ++Bool xf86AutoBindGPUDisabled = FALSE; + + #ifdef XF86VIDMODE + Bool xf86VidModeDisabled = FALSE; +diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c +index ea42ec9..ec255b6 100644 +--- a/hw/xfree86/common/xf86Init.c ++++ b/hw/xfree86/common/xf86Init.c +@@ -76,6 +76,7 @@ + #include "xf86DDC.h" + #include "xf86Xinput.h" + #include "xf86InPriv.h" ++#include "xf86Crtc.h" + #include "picturestr.h" + #include "randrstr.h" + #include "glxvndabi.h" +@@ -237,6 +238,19 @@ xf86PrivsElevated(void) + return PrivsElevated(); + } + ++static void ++xf86AutoConfigOutputDevices(void) ++{ ++ int i; ++ ++ if (!xf86Info.autoBindGPU) ++ return; ++ ++ for (i = 0; i < xf86NumGPUScreens; i++) ++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]), ++ xf86ScrnToScreen(xf86Screens[0])); ++} ++ + static void + TrapSignals(void) + { +@@ -770,6 +784,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) + for (i = 0; i < xf86NumGPUScreens; i++) + AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); + ++ xf86AutoConfigOutputDevices(); ++ + xf86VGAarbiterWrapFunctions(); + if (sigio_blocked) + input_unlock(); +@@ -1278,6 +1294,10 @@ ddxProcessArgument(int argc, char **argv, int i) + xf86Info.iglxFrom = X_CMDLINE; + return 0; + } ++ if (!strcmp(argv[i], "-noautoBindGPU")) { ++ xf86AutoBindGPUDisabled = TRUE; ++ return 1; ++ } + + /* OS-specific processing */ + return xf86ProcessArgument(argc, argv, i); +diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h +index 4fe2b5f..6566622 100644 +--- a/hw/xfree86/common/xf86Priv.h ++++ b/hw/xfree86/common/xf86Priv.h +@@ -46,6 +46,7 @@ + extern _X_EXPORT const char *xf86ConfigFile; + extern _X_EXPORT const char *xf86ConfigDir; + extern _X_EXPORT Bool xf86AllowMouseOpenFail; ++extern _X_EXPORT Bool xf86AutoBindGPUDisabled; + + #ifdef XF86VIDMODE + extern _X_EXPORT Bool xf86VidModeDisabled; +diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h +index 21c2e1f..6c71863 100644 +--- a/hw/xfree86/common/xf86Privstr.h ++++ b/hw/xfree86/common/xf86Privstr.h +@@ -98,6 +98,7 @@ typedef struct { + + Bool autoAddGPU; + const char *debug; ++ Bool autoBindGPU; + } xf86InfoRec, *xf86InfoPtr; + + /* ISC's cc can't handle ~ of UL constants, so explicitly type cast them. */ +diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c +index cef47da..913a324 100644 +--- a/hw/xfree86/common/xf86platformBus.c ++++ b/hw/xfree86/common/xf86platformBus.c +@@ -49,6 +49,7 @@ + #include "Pci.h" + #include "xf86platformBus.h" + #include "xf86Config.h" ++#include "xf86Crtc.h" + + #include "randrstr.h" + int platformSlotClaimed; +@@ -665,6 +666,9 @@ xf86platformAddDevice(int index) + } + /* attach unbound to 0 protocol screen */ + AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); ++ if (xf86Info.autoBindGPU) ++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]), ++ xf86ScrnToScreen(xf86Screens[0])); + + RRResourcesChanged(xf86Screens[0]->pScreen); + RRTellChanged(xf86Screens[0]->pScreen); +diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man +index 13a9dc3..745f986 100644 +--- a/hw/xfree86/man/Xorg.man ++++ b/hw/xfree86/man/Xorg.man +@@ -283,6 +283,13 @@ is a comma separated list of directories to search for + server modules. This option is only available when the server is run + as root (i.e, with real-uid 0). + .TP 8 ++.B \-noautoBindGPU ++Disable automatically setting secondary GPUs up as output sinks and offload ++sources. This is equivalent to setting the ++.B AutoBindGPU ++xorg.conf(__filemansuffix__) file option. To ++.B false. ++.TP 8 + .B \-nosilk + Disable Silken Mouse support. + .TP 8 +diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man +index 9589262..8d51e06 100644 +--- a/hw/xfree86/man/xorg.conf.man ++++ b/hw/xfree86/man/xorg.conf.man +@@ -672,6 +672,12 @@ Enabled by default. + If this option is disabled, then no GPU devices will be added from the udev + backend. Enabled by default. (May need to be disabled to setup Xinerama). + .TP 7 ++.BI "Option \*qAutoBindGPU\*q \*q" boolean \*q ++If enabled then secondary GPUs will be automatically set up as output-sinks and ++offload-sources. Making e.g. laptop outputs connected only to the secondary ++GPU directly available for use without needing to run ++"xrandr --setprovideroutputsource". Enabled by default. ++.TP 7 + .BI "Option \*qLog\*q \*q" string \*q + This option controls whether the log is flushed and/or synced to disk after + each message. +diff --git a/randr/randrstr.h b/randr/randrstr.h +index f94174b..092d726 100644 +--- a/randr/randrstr.h ++++ b/randr/randrstr.h +@@ -1039,6 +1039,9 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p); + extern _X_EXPORT void + RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider); + ++extern _X_EXPORT void ++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen); ++ + /* rrproviderproperty.c */ + + extern _X_EXPORT void +diff --git a/randr/rrprovider.c b/randr/rrprovider.c +index e4bc2bf..e04c18f 100644 +--- a/randr/rrprovider.c ++++ b/randr/rrprovider.c +@@ -485,3 +485,25 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider) + + WriteEventsToClient(client, 1, (xEvent *) &pe); + } ++ ++void ++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen) ++{ ++ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen); ++ rrScrPrivPtr masterPriv = rrGetScrPriv(masterScreen); ++ RRProviderPtr provider = pScrPriv->provider; ++ RRProviderPtr master_provider = masterPriv->provider; ++ ++ if (!provider || !master_provider) ++ return; ++ ++ if ((provider->capabilities & RR_Capability_SinkOutput) && ++ (master_provider->capabilities & RR_Capability_SourceOutput)) { ++ pScrPriv->rrProviderSetOutputSource(pScreen, provider, master_provider); ++ RRInitPrimeSyncProps(pScreen); ++ } ++ ++ if ((provider->capabilities & RR_Capability_SourceOffload) && ++ (master_provider->capabilities & RR_Capability_SinkOffload)) ++ pScrPriv->rrProviderSetOffloadSink(pScreen, provider, master_provider); ++} +-- +2.16.2 + diff --git a/xenocara-server-debug/xvfb-run b/xenocara-server-debug/xvfb-run new file mode 100644 index 0000000..ace265e --- /dev/null +++ b/xenocara-server-debug/xvfb-run @@ -0,0 +1,200 @@ +#!/bin/sh +# --- T2-COPYRIGHT-NOTE-BEGIN --- +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# +# T2 SDE: package/.../xorg-server/xvfb-run.sh +# Copyright (C) 2005 The T2 SDE Project +# Copyright (C) XXXX - 2005 Debian +# +# More information can be found in the files COPYING and README. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. A copy of the +# GNU General Public License can be found in the file COPYING. +# --- T2-COPYRIGHT-NOTE-END --- + +# $Id$ +# from: http://necrotic.deadbeast.net/xsf/XFree86/trunk/debian/local/xvfb-run + +# This script starts an instance of Xvfb, the "fake" X server, runs a command +# with that server available, and kills the X server when done. The return +# value of the command becomes the return value of this script. +# +# If anyone is using this to build a Debian package, make sure the package +# Build-Depends on xvfb, xbase-clients, and xfonts-base. + +set -e + +PROGNAME=xvfb-run +SERVERNUM=99 +AUTHFILE= +ERRORFILE=/dev/null +STARTWAIT=3 +XVFBARGS="-screen 0 640x480x24" +LISTENTCP="-nolisten tcp" +XAUTHPROTO=. + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the event +# the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the +# script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +# Display a message, wrapping lines at the terminal width. +message () { + echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} +} + +# Display an error message. +error () { + message "error: $*" >&2 +} + +# Display a usage message. +usage () { + if [ -n "$*" ]; then + message "usage error: $*" + fi + cat <&2 + exit 2 +fi + +if ! type xauth >/dev/null; then + error "xauth command not found" + exit 3 +fi + +# Set up the temp dir for the pid and X authorization file +XVFB_RUN_TMPDIR="$(mktemp --directory --tmpdir $PROGNAME.XXXXXX)" +# If the user did not specify an X authorization file to use, set up a temporary +# directory to house one. +if [ -z "$AUTHFILE" ]; then + AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" Xauthority.XXXXXX) +fi + +# Start Xvfb. +MCOOKIE=$(mcookie) + +if [ -z "$AUTO_DISPLAY" ]; then + # Old style using a pre-computed SERVERNUM + XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \ + 2>&1 & + XVFBPID=$! +else + # New style using Xvfb to provide a free display + PIDFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" pid.XXXXXX) + SERVERNUM=$(XAUTHORITY=$AUTHFILE Xvfb -displayfd 1 $XVFBARGS $LISTENTCP \ + 2>"$ERRORFILE" & echo $! > $PIDFILE) + XVFBPID=$(cat $PIDFILE) +fi +sleep "$STARTWAIT" + +XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1 +add :$SERVERNUM $XAUTHPROTO $MCOOKIE +EOF + +# Start the command and save its exit status. +set +e +DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 +RETVAL=$? +set -e + +# Kill Xvfb now that the command has exited. +kill $XVFBPID + +# Clean up. +XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >"$ERRORFILE" 2>&1 +if [ -n "$XVFB_RUN_TMPDIR" ]; then + if ! rm -r "$XVFB_RUN_TMPDIR"; then + error "problem while cleaning up temporary directory" + exit 5 + fi +fi + +# Return the executed command's exit status. +exit $RETVAL + +# vim:set ai et sts=4 sw=4 tw=80: diff --git a/xenocara-server/PKGBUILD b/xenocara-server/PKGBUILD new file mode 100644 index 0000000..dcee353 --- /dev/null +++ b/xenocara-server/PKGBUILD @@ -0,0 +1,230 @@ +# Maintainer: Jesus E. + +# Based on xorg-server package + +pkgbase=xenocara-server +pkgname=('xenocara-server' 'xenocara-server-xephyr' 'xenocara-server-xdmx' 'xenocara-server-xvfb' 'xenocara-server-xnest' 'xenocara-server-common' 'xenocara-server-devel') +_openbsdver=6.9 +pkgver=1.20.10 +pkgrel=7 +arch=('i686' 'x86_64') +license=('X11') +groups=('xenocara' 'xorg') +url="https://www.xenocara.org" +makedepends=('xenocara-proto' 'pixman' 'libx11' 'mesa' 'mesa-libgl' 'libxtrans' + 'libxkbfile' 'libxfont2' 'libpciaccess' 'libxv' + 'libxmu' 'libxrender' 'libxi' 'libxaw' 'libdmx' 'libxtst' 'libxres' + 'xenocara-xkbcomp' 'xenocara-util-macros' 'xenocara-font-util' 'libgcrypt' 'libepoxy' + 'xcb-util' 'xcb-util-image' 'xcb-util-renderutil' 'xcb-util-wm' 'xcb-util-keysyms' + 'libxshmfence' 'libunwind' 'eudev') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/xserver-$pkgver.tar.lz{,.sig} + xserver-autobind-hotplug.patch + remove-forced-openbsd-getdtablecount-function-support.patch + remove-forced-openbsd-mmap-flag-support.patch + remove-forced-mno-sse-support.patch + remove-forced-bison-yyparse-function-support.patch + xvfb-run + xvfb-run.1) +sha512sums=('a544cebe022891f65e91d1c49f146e0dad5de75018c6261a0f68152c9db9c2f346afefb5a4d97c17c5fb385308d44766380aad77904f7a893cae174777caae61' + 'SKIP' + 'd84f4d63a502b7af76ea49944d1b21e2030dfd250ac1e82878935cf631973310ac9ba1f0dfedf10980ec6c7431d61b7daa4b7bbaae9ee477b2c19812c1661a22' + 'ffefe558d7ab64b4d066872964fbcf474b4b8c454da072d7f65475d44d1d72d6cd879805db3bb72eb27c3ec123d094e5f64fe4cb6af80c0205c1ffa45df568ea' + '51e37248d1a4967e055219d52957bcc9702dd243da1f937f76524019d4b2c00604e451b50420239ff7e2c51ce523eb5b61d643c8b2c797667672053abd5489eb' + 'a101d5be7c2e774fb1aba9087d7a4583c6ae8900d40ba079fc7ce8592846c20ce24e5834f4c398dca6008f7ada6099c299ab6982c7f036667bc07b17fcf25708' + 'dae6fa8635f8156aa79ce1d8385651eba3f61990ed2fb2c67493fe9d5079e80aaa0f272e31cc587e10eef15dc3be9ad97b862b5ea0897396e05a04068e2c94ac' + '73c8ead9fba6815dabfec0a55b3a53f01169f6f2d14ac4a431e53b2d96028672dbd6b50a3314568847b37b1e54ea4fc02bdf677feabb3b2697af55e2e5331810' + 'de5e2cb3c6825e6cf1f07ca0d52423e17f34d70ec7935e9dd24be5fb9883bf1e03b50ff584931bd3b41095c510ab2aa44d2573fd5feaebdcb59363b65607ff22') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/xserver" + + # Patch from Fedora, not yet merged + patch -Np1 -i "$srcdir/xserver-autobind-hotplug.patch" + # Remove forced OpenBSD getdtablecount function support + patch -Np1 -i "$srcdir/remove-forced-openbsd-getdtablecount-function-support.patch" + # Remove forced OpenBSD mmap flag (__MAP_NOFAULT) support + patch -Np1 -i "$srcdir/remove-forced-openbsd-mmap-flag-support.patch" + # Remove forced -mno-sse (SSE extensions disabling) support + patch -Np1 -i "$srcdir/remove-forced-mno-sse-support.patch" + # Remove forced Bison yyparse function support + patch -Np1 -i "$srcdir/remove-forced-bison-yyparse-function-support.patch" + + autoreconf -vfi +} + +build() { + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + cd "xenocara-$_openbsdver/xserver" + ./configure --prefix=/usr \ + --enable-ipv6 \ + --enable-dri \ + --enable-dmx \ + --enable-xvfb \ + --enable-xnest \ + --enable-composite \ + --enable-xcsecurity \ + --enable-libunwind \ + --enable-xorg \ + --enable-xephyr \ + --enable-glamor \ + --disable-xwayland \ + --enable-kdrive \ + --enable-config-udev \ + --disable-systemd-logind \ + --disable-suid-wrapper \ + --enable-install-setuid \ + --enable-record \ + --disable-static \ + --libexecdir=/usr/libexec/xorg \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-xkb-path=/usr/share/X11/xkb \ + --with-xkb-output=/var/lib/xkb \ + --with-fontrootdir=/usr/share/fonts \ + --with-sha1=libgcrypt \ + --without-systemd-daemon + + make + + # Disable subdirs for make install rule to make splitting easier + sed -e 's/^DMX_SUBDIRS =.*/DMX_SUBDIRS =/' \ + -e 's/^XVFB_SUBDIRS =.*/XVFB_SUBDIRS =/' \ + -e 's/^XNEST_SUBDIRS =.*/XNEST_SUBDIRS = /' \ + -e 's/^KDRIVE_SUBDIRS =.*/KDRIVE_SUBDIRS =/' \ + -i hw/Makefile +} + +package_xenocara-server-common() { + pkgdesc="Xenocara server common files" + depends=(xkeyboard-config xenocara-xkbcomp xenocara-setxkbmap) + provides=('xorg-server-common') + conflicts=('xorg-server-common') + replaces=('xorg-server-common') + + cd "xenocara-$_openbsdver/xserver" + make -C xkb DESTDIR="$pkgdir" install-data + + install -Dm644 man/Xserver.1 "$pkgdir/usr/share/man/man1/Xserver.1" + + install -Dm644 dix/protocol.txt "$pkgdir/usr/lib/xorg/protocol.txt" + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_xenocara-server() { + pkgdesc="Xenocara X server" + depends=(libepoxy libxfont2 libbsd pixman xenocara-server-common libunwind mesa-libgl xorg-input-evdev + libpciaccess libdrm libxshmfence) + + # see xenocara/hw/xfree86/common/xf86Module.h for ABI versions - we provide major numbers that drivers can depend on + # and /usr/lib/pkgconfig/xorg-server.pc in xenocara-server-devel pkg + provides=('xorg-server' 'X-ABI-VIDEODRV_VERSION=24.0' 'X-ABI-XINPUT_VERSION=24.1' 'X-ABI-EXTENSION_VERSION=10.0' 'x-server') + conflicts=('xorg-server' 'nvidia-utils<=331.20' 'glamor-egl' 'xf86-video-modesetting') + replaces=('xorg-server' 'glamor-egl' 'xf86-video-modesetting' 'xf86-video-amdgpu') + install=$pkgname.install + + cd "xenocara-$_openbsdver/xserver" + make DESTDIR="$pkgdir" install + + # distro specific files must be installed in /usr/share/X11/xorg.conf.d + install -m755 -d "$pkgdir/etc/X11/xorg.conf.d" + + rm -rf "$pkgdir/var" + + # remove files, these files are part of "-common" package + rm -f "$pkgdir/usr/share/man/man1/Xserver.1" + rm -f "$pkgdir/usr/lib/xorg/protocol.txt" + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + + # remove files, these files are part of "-devel" package + rm -rf "$pkgdir/usr/lib/pkgconfig" + rm -rf "$pkgdir/usr/include" + rm -rf "$pkgdir/usr/share/aclocal" +} + +package_xenocara-server-xephyr() { + pkgdesc="A nested X server that runs as an X application, provided by Xenocara" + depends=(libxfont2 mesa-libgl libepoxy libunwind libeudev libxv pixman xenocara-server-common xcb-util-image + xcb-util-renderutil xcb-util-wm xcb-util-keysyms) + provides=('xorg-server-xephyr') + conflicts=('xorg-server-xephyr') + replaces=('xorg-server-xephyr') + + cd "xenocara-$_openbsdver/xserver/hw/kdrive" + make DESTDIR="$pkgdir" install + + install -Dm644 ../../COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_xenocara-server-xvfb() { + pkgdesc="Virtual framebuffer X server, provided by Xenocara" + depends=(libxfont2 libunwind libeudev pixman xenocara-server-common xenocara-xauth mesa-libgl) + provides=('xorg-server-xvfb') + conflicts=('xorg-server-xvfb') + replaces=('xorg-server-xvfb') + + cd "xenocara-$_openbsdver/xserver/hw/vfb" + make DESTDIR="$pkgdir" install + + install -m755 "$srcdir/xvfb-run" "$pkgdir/usr/bin/" + install -m644 "$srcdir/xvfb-run.1" "$pkgdir/usr/share/man/man1/" + + install -Dm644 ../../COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_xenocara-server-xnest() { + pkgdesc="A nested X server that runs as an X application, provided by Xenocara" + depends=(libxfont2 libxext libunwind pixman xenocara-server-common libeudev) + provides=('xorg-server-xnest') + conflicts=('xorg-server-xnest') + replaces=('xorg-server-xnest') + + cd "xenocara-$_openbsdver/xserver/hw/xnest" + make DESTDIR="$pkgdir" install + + install -Dm644 ../../COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_xenocara-server-xdmx() { + pkgdesc="Distributed Multihead X Server and utilities, provided by Xenocara" + depends=(libxfont2 libxi libxaw libxrender libdmx libxfixes libunwind pixman xenocara-server-common) + provides=('xorg-server-xdmx') + conflicts=('xorg-server-xdmx') + replaces=('xorg-server-xdmx') + + cd "xenocara-$_openbsdver/xserver/hw/dmx" + make DESTDIR="$pkgdir" install + + install -Dm644 ../../COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} + +package_xenocara-server-devel() { + pkgdesc="Development files for the Xenocara X server" + depends=(xenocara-proto mesa libpciaccess + # not technically required but almost every Xenocara pkg needs it to build + xenocara-util-macros) + provides=('xorg-server-devel') + conflicts=('xorg-server-devel') + replaces=('xorg-server-devel') + + cd "xenocara-$_openbsdver/xserver" + make DESTDIR="$pkgdir" install + + rm -rf "$pkgdir/usr/bin" + rm -rf "$pkgdir/usr/share/man" + rm -rf "$pkgdir/usr/share/doc" + rm -rf "$pkgdir/usr/share/X11" + rm -rf "$pkgdir/usr/lib/xorg" + rm -rf "$pkgdir/usr/libexec" + rm -rf "$pkgdir/var" + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-server/remove-forced-bison-yyparse-function-support.patch b/xenocara-server/remove-forced-bison-yyparse-function-support.patch new file mode 100644 index 0000000..be96487 --- /dev/null +++ b/xenocara-server/remove-forced-bison-yyparse-function-support.patch @@ -0,0 +1,52 @@ +diff --git a/hw/dmx/config/dmxconfig.c b/hw/dmx/config/dmxconfig.c +index 85bc0db..6cf5901 100644 +--- a/hw/dmx/config/dmxconfig.c ++++ b/hw/dmx/config/dmxconfig.c +@@ -171,7 +171,6 @@ dmxConfigReadFile(const char *filename, int debug) + dmxLog(dmxInfo, "Reading configuration file \"%s\"\n", filename); + yyin = str; + yydebug = debug; +- yyparse(); + fclose(str); + return 0; + } +diff --git a/hw/dmx/config/dmxtodmx.c b/hw/dmx/config/dmxtodmx.c +index 5a1a0b4..03c51c4 100644 +--- a/hw/dmx/config/dmxtodmx.c ++++ b/hw/dmx/config/dmxtodmx.c +@@ -37,7 +37,6 @@ + #include "dmxprint.h" + #include "dmxcompat.h" + +-extern int yyparse(void); + extern int yydebug; + extern FILE *yyin; + +@@ -45,7 +44,6 @@ int + main(int argc, char **argv) + { + yydebug = 0; +- yyparse(); + dmxConfigPrint(stdout, dmxConfigEntry); + return 0; + } +diff --git a/hw/dmx/config/xdmxconfig.c b/hw/dmx/config/xdmxconfig.c +index 05d8396..8d6a753 100644 +--- a/hw/dmx/config/xdmxconfig.c ++++ b/hw/dmx/config/xdmxconfig.c +@@ -52,7 +52,6 @@ + #include "dmxprint.h" + #include "dmxlog.h" + +-extern int yyparse(void); + extern int yydebug; + extern FILE *yyin; + +@@ -448,7 +447,6 @@ dmxConfigReadFile(void) + } + yyin = str; + yydebug = 0; +- yyparse(); + fclose(str); + dmxLog(dmxInfo, "Read configuration file %s\n", dmxConfigFilename); + diff --git a/xenocara-server/remove-forced-mno-sse-support.patch b/xenocara-server/remove-forced-mno-sse-support.patch new file mode 100644 index 0000000..e5b8317 --- /dev/null +++ b/xenocara-server/remove-forced-mno-sse-support.patch @@ -0,0 +1,31 @@ +diff --git a/hw/xfree86/os-support/misc/Makefile.am b/hw/xfree86/os-support/misc/Makefile.am +index 98e962f..0265aec 100644 +--- a/hw/xfree86/os-support/misc/Makefile.am ++++ b/hw/xfree86/os-support/misc/Makefile.am +@@ -7,11 +7,6 @@ libmisc_la_SOURCES = SlowBcopy.c + + AM_CPPFLAGS = $(XORG_INCS) + +-if I386_VIDEO +-NOSSE_CFLAGS = -mno-sse +-endif +- +-AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) $(NOSSE_CFLAGS) +- ++AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) + + EXTRA_DIST = $(I386_SRCS) $(PORTIO_SRCS) +diff --git a/hw/xfree86/os-support/misc/Makefile.in b/hw/xfree86/os-support/misc/Makefile.in +index bb80b92..eb7680b 100644 +--- a/hw/xfree86/os-support/misc/Makefile.in ++++ b/hw/xfree86/os-support/misc/Makefile.in +@@ -483,8 +483,7 @@ libmisc_la_SOURCES = SlowBcopy.c + + #AM_LDFLAGS = -r + AM_CPPFLAGS = $(XORG_INCS) +-@I386_VIDEO_TRUE@NOSSE_CFLAGS = -mno-sse +-AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) $(NOSSE_CFLAGS) ++AM_CFLAGS = $(XORG_CFLAGS) $(DIX_CFLAGS) + EXTRA_DIST = $(I386_SRCS) $(PORTIO_SRCS) + all: all-am + diff --git a/xenocara-server/remove-forced-openbsd-getdtablecount-function-support.patch b/xenocara-server/remove-forced-openbsd-getdtablecount-function-support.patch new file mode 100644 index 0000000..cb33a14 --- /dev/null +++ b/xenocara-server/remove-forced-openbsd-getdtablecount-function-support.patch @@ -0,0 +1,16 @@ +diff --git a/os/connection.c b/os/connection.c +index 4153930a..3c6d619c 100644 +--- a/os/connection.c ++++ b/os/connection.c +@@ -692,9 +692,11 @@ EstablishNewConnections(ClientPtr clientUnused, void *closure) + if ((trans_conn = lookup_trans_conn(curconn)) == NULL) + return TRUE; + ++#ifdef __OpenBSD__ + if ((getdtablecount() + FdReserve) >= getdtablesize()) + Backoff = TRUE; + else ++#endif + Backoff = FALSE; + + if ((new_trans_conn = _XSERVTransAccept(trans_conn, &status)) == NULL) diff --git a/xenocara-server/remove-forced-openbsd-mmap-flag-support.patch b/xenocara-server/remove-forced-openbsd-mmap-flag-support.patch new file mode 100644 index 0000000..1882194 --- /dev/null +++ b/xenocara-server/remove-forced-openbsd-mmap-flag-support.patch @@ -0,0 +1,22 @@ +diff --git a/Xext/shm.c b/Xext/shm.c +index a95c91c..fe42a66 100644 +--- a/Xext/shm.c ++++ b/Xext/shm.c +@@ -1161,7 +1161,7 @@ ProcShmAttachFd(ClientPtr client) + shmdesc->is_fd = TRUE; + shmdesc->addr = mmap(NULL, statb.st_size, + stuff->readOnly ? PROT_READ : PROT_READ|PROT_WRITE, +- MAP_SHARED|__MAP_NOFAULT, ++ MAP_SHARED, + fd, 0); + + close(fd); +@@ -1254,7 +1254,7 @@ ProcShmCreateSegment(ClientPtr client) + shmdesc->is_fd = TRUE; + shmdesc->addr = mmap(NULL, stuff->size, + stuff->readOnly ? PROT_READ : PROT_READ|PROT_WRITE, +- MAP_SHARED|__MAP_NOFAULT, ++ MAP_SHARED, + fd, 0); + + if (shmdesc->addr == ((char *) -1)) { diff --git a/xenocara-server/xenocara-server.install b/xenocara-server/xenocara-server.install new file mode 100644 index 0000000..07e6199 --- /dev/null +++ b/xenocara-server/xenocara-server.install @@ -0,0 +1,35 @@ +#!/bin/sh + +post_install() { + echo '>>> !!!ATTENTION!!!' + echo '>>> =================================================================================' + echo '>>> For AMD/ATI Radeon R600 series and newer,' + echo '>>> please configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "modesetting"' + echo '>>> Option "AccelMethod" "none"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> For unsupported GPU (non-UEFI machines), please install "xenocara-video-vesa" and' + echo '>>> configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "vesa"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Or install "xenocara-video-fbdev" package and' + echo '>>> configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "fbdev"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' +} + +post_upgrade() { + post_install +} diff --git a/xenocara-server/xserver-autobind-hotplug.patch b/xenocara-server/xserver-autobind-hotplug.patch new file mode 100644 index 0000000..86b96a2 --- /dev/null +++ b/xenocara-server/xserver-autobind-hotplug.patch @@ -0,0 +1,293 @@ +From 471289fa1dc359555ceed6302f7d9605ab6be3ea Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Mon, 2 Apr 2018 16:49:02 -0400 +Subject: [PATCH] autobind GPUs to the screen + +This is a modified version of a patch we've been carry-ing in Fedora and +RHEL for years now. This patch automatically adds secondary GPUs to the +master as output sink / offload source making e.g. the use of +slave-outputs just work, with requiring the user to manually run +"xrandr --setprovideroutputsource" before he can hookup an external +monitor to his hybrid graphics laptop. + +There is one problem with this patch, which is why it was not upstreamed +before. What to do when a secondary GPU gets detected really is a policy +decission (e.g. one may want to autobind PCI GPUs but not USB ones) and +as such should be under control of the Desktop Environment. + +Unconditionally adding autobinding support to the xserver will result +in races between the DE dealing with the hotplug of a secondary GPU +and the server itself dealing with it. + +However we've waited for years for any Desktop Environments to actually +start doing some sort of autoconfiguration of secondary GPUs and there +is still not a single DE dealing with this, so I believe that it is +time to upstream this now. + +To avoid potential future problems if any DEs get support for doing +secondary GPU configuration themselves, the new autobind functionality +is made optional. Since no DEs currently support doing this themselves it +is enabled by default. When DEs grow support for doing this themselves +they can disable the servers autobinding through the servers cmdline or a +xorg.conf snippet. + +Signed-off-by: Dave Airlie +[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream] +Signed-off-by: Hans de Goede +--- + hw/xfree86/common/xf86Config.c | 19 +++++++++++++++++++ + hw/xfree86/common/xf86Globals.c | 2 ++ + hw/xfree86/common/xf86Init.c | 20 ++++++++++++++++++++ + hw/xfree86/common/xf86Priv.h | 1 + + hw/xfree86/common/xf86Privstr.h | 1 + + hw/xfree86/common/xf86platformBus.c | 4 ++++ + hw/xfree86/man/Xorg.man | 7 +++++++ + hw/xfree86/man/xorg.conf.man | 6 ++++++ + randr/randrstr.h | 3 +++ + randr/rrprovider.c | 22 ++++++++++++++++++++++ + 10 files changed, 85 insertions(+) + +diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c +index 2c1d335..d7d7c2e 100644 +--- a/hw/xfree86/common/xf86Config.c ++++ b/hw/xfree86/common/xf86Config.c +@@ -643,6 +643,7 @@ typedef enum { + FLAG_DRI2, + FLAG_USE_SIGIO, + FLAG_AUTO_ADD_GPU, ++ FLAG_AUTO_BIND_GPU, + FLAG_MAX_CLIENTS, + FLAG_IGLX, + FLAG_DEBUG, +@@ -699,6 +700,8 @@ static OptionInfoRec FlagOptions[] = { + {0}, FALSE}, + {FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN, + {0}, FALSE}, ++ {FLAG_AUTO_BIND_GPU, "AutoBindGPU", OPTV_BOOLEAN, ++ {0}, FALSE}, + {FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER, + {0}, FALSE }, + {FLAG_IGLX, "IndirectGLX", OPTV_BOOLEAN, +@@ -779,6 +782,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts) + } + xf86Msg(from, "%sutomatically adding GPU devices\n", + xf86Info.autoAddGPU ? "A" : "Not a"); ++ ++ if (xf86AutoBindGPUDisabled) { ++ xf86Info.autoBindGPU = FALSE; ++ from = X_CMDLINE; ++ } ++ else if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_BIND_GPU)) { ++ xf86GetOptValBool(FlagOptions, FLAG_AUTO_BIND_GPU, ++ &xf86Info.autoBindGPU); ++ from = X_CONFIG; ++ } ++ else { ++ from = X_DEFAULT; ++ } ++ xf86Msg(from, "%sutomatically binding GPU devices\n", ++ xf86Info.autoBindGPU ? "A" : "Not a"); ++ + /* + * Set things up based on the config file information. Some of these + * settings may be overridden later when the command line options are +diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c +index e890f05..7b27b4c 100644 +--- a/hw/xfree86/common/xf86Globals.c ++++ b/hw/xfree86/common/xf86Globals.c +@@ -131,6 +131,7 @@ xf86InfoRec xf86Info = { + #else + .autoAddGPU = FALSE, + #endif ++ .autoBindGPU = TRUE, + }; + + const char *xf86ConfigFile = NULL; +@@ -191,6 +192,7 @@ Bool xf86FlipPixels = FALSE; + Gamma xf86Gamma = { 0.0, 0.0, 0.0 }; + + Bool xf86AllowMouseOpenFail = FALSE; ++Bool xf86AutoBindGPUDisabled = FALSE; + + #ifdef XF86VIDMODE + Bool xf86VidModeDisabled = FALSE; +diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c +index ea42ec9..ec255b6 100644 +--- a/hw/xfree86/common/xf86Init.c ++++ b/hw/xfree86/common/xf86Init.c +@@ -76,6 +76,7 @@ + #include "xf86DDC.h" + #include "xf86Xinput.h" + #include "xf86InPriv.h" ++#include "xf86Crtc.h" + #include "picturestr.h" + #include "randrstr.h" + #include "glxvndabi.h" +@@ -237,6 +238,19 @@ xf86PrivsElevated(void) + return PrivsElevated(); + } + ++static void ++xf86AutoConfigOutputDevices(void) ++{ ++ int i; ++ ++ if (!xf86Info.autoBindGPU) ++ return; ++ ++ for (i = 0; i < xf86NumGPUScreens; i++) ++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]), ++ xf86ScrnToScreen(xf86Screens[0])); ++} ++ + static void + TrapSignals(void) + { +@@ -770,6 +784,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) + for (i = 0; i < xf86NumGPUScreens; i++) + AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); + ++ xf86AutoConfigOutputDevices(); ++ + xf86VGAarbiterWrapFunctions(); + if (sigio_blocked) + input_unlock(); +@@ -1278,6 +1294,10 @@ ddxProcessArgument(int argc, char **argv, int i) + xf86Info.iglxFrom = X_CMDLINE; + return 0; + } ++ if (!strcmp(argv[i], "-noautoBindGPU")) { ++ xf86AutoBindGPUDisabled = TRUE; ++ return 1; ++ } + + /* OS-specific processing */ + return xf86ProcessArgument(argc, argv, i); +diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h +index 4fe2b5f..6566622 100644 +--- a/hw/xfree86/common/xf86Priv.h ++++ b/hw/xfree86/common/xf86Priv.h +@@ -46,6 +46,7 @@ + extern _X_EXPORT const char *xf86ConfigFile; + extern _X_EXPORT const char *xf86ConfigDir; + extern _X_EXPORT Bool xf86AllowMouseOpenFail; ++extern _X_EXPORT Bool xf86AutoBindGPUDisabled; + + #ifdef XF86VIDMODE + extern _X_EXPORT Bool xf86VidModeDisabled; +diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h +index 21c2e1f..6c71863 100644 +--- a/hw/xfree86/common/xf86Privstr.h ++++ b/hw/xfree86/common/xf86Privstr.h +@@ -98,6 +98,7 @@ typedef struct { + + Bool autoAddGPU; + const char *debug; ++ Bool autoBindGPU; + } xf86InfoRec, *xf86InfoPtr; + + /* ISC's cc can't handle ~ of UL constants, so explicitly type cast them. */ +diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c +index cef47da..913a324 100644 +--- a/hw/xfree86/common/xf86platformBus.c ++++ b/hw/xfree86/common/xf86platformBus.c +@@ -49,6 +49,7 @@ + #include "Pci.h" + #include "xf86platformBus.h" + #include "xf86Config.h" ++#include "xf86Crtc.h" + + #include "randrstr.h" + int platformSlotClaimed; +@@ -665,6 +666,9 @@ xf86platformAddDevice(int index) + } + /* attach unbound to 0 protocol screen */ + AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); ++ if (xf86Info.autoBindGPU) ++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]), ++ xf86ScrnToScreen(xf86Screens[0])); + + RRResourcesChanged(xf86Screens[0]->pScreen); + RRTellChanged(xf86Screens[0]->pScreen); +diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man +index 13a9dc3..745f986 100644 +--- a/hw/xfree86/man/Xorg.man ++++ b/hw/xfree86/man/Xorg.man +@@ -283,6 +283,13 @@ is a comma separated list of directories to search for + server modules. This option is only available when the server is run + as root (i.e, with real-uid 0). + .TP 8 ++.B \-noautoBindGPU ++Disable automatically setting secondary GPUs up as output sinks and offload ++sources. This is equivalent to setting the ++.B AutoBindGPU ++xorg.conf(__filemansuffix__) file option. To ++.B false. ++.TP 8 + .B \-nosilk + Disable Silken Mouse support. + .TP 8 +diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man +index 9589262..8d51e06 100644 +--- a/hw/xfree86/man/xorg.conf.man ++++ b/hw/xfree86/man/xorg.conf.man +@@ -672,6 +672,12 @@ Enabled by default. + If this option is disabled, then no GPU devices will be added from the udev + backend. Enabled by default. (May need to be disabled to setup Xinerama). + .TP 7 ++.BI "Option \*qAutoBindGPU\*q \*q" boolean \*q ++If enabled then secondary GPUs will be automatically set up as output-sinks and ++offload-sources. Making e.g. laptop outputs connected only to the secondary ++GPU directly available for use without needing to run ++"xrandr --setprovideroutputsource". Enabled by default. ++.TP 7 + .BI "Option \*qLog\*q \*q" string \*q + This option controls whether the log is flushed and/or synced to disk after + each message. +diff --git a/randr/randrstr.h b/randr/randrstr.h +index f94174b..092d726 100644 +--- a/randr/randrstr.h ++++ b/randr/randrstr.h +@@ -1039,6 +1039,9 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p); + extern _X_EXPORT void + RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider); + ++extern _X_EXPORT void ++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen); ++ + /* rrproviderproperty.c */ + + extern _X_EXPORT void +diff --git a/randr/rrprovider.c b/randr/rrprovider.c +index e4bc2bf..e04c18f 100644 +--- a/randr/rrprovider.c ++++ b/randr/rrprovider.c +@@ -485,3 +485,25 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider) + + WriteEventsToClient(client, 1, (xEvent *) &pe); + } ++ ++void ++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen) ++{ ++ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen); ++ rrScrPrivPtr masterPriv = rrGetScrPriv(masterScreen); ++ RRProviderPtr provider = pScrPriv->provider; ++ RRProviderPtr master_provider = masterPriv->provider; ++ ++ if (!provider || !master_provider) ++ return; ++ ++ if ((provider->capabilities & RR_Capability_SinkOutput) && ++ (master_provider->capabilities & RR_Capability_SourceOutput)) { ++ pScrPriv->rrProviderSetOutputSource(pScreen, provider, master_provider); ++ RRInitPrimeSyncProps(pScreen); ++ } ++ ++ if ((provider->capabilities & RR_Capability_SourceOffload) && ++ (master_provider->capabilities & RR_Capability_SinkOffload)) ++ pScrPriv->rrProviderSetOffloadSink(pScreen, provider, master_provider); ++} +-- +2.16.2 + diff --git a/xenocara-server/xvfb-run b/xenocara-server/xvfb-run new file mode 100644 index 0000000..ace265e --- /dev/null +++ b/xenocara-server/xvfb-run @@ -0,0 +1,200 @@ +#!/bin/sh +# --- T2-COPYRIGHT-NOTE-BEGIN --- +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# +# T2 SDE: package/.../xorg-server/xvfb-run.sh +# Copyright (C) 2005 The T2 SDE Project +# Copyright (C) XXXX - 2005 Debian +# +# More information can be found in the files COPYING and README. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. A copy of the +# GNU General Public License can be found in the file COPYING. +# --- T2-COPYRIGHT-NOTE-END --- + +# $Id$ +# from: http://necrotic.deadbeast.net/xsf/XFree86/trunk/debian/local/xvfb-run + +# This script starts an instance of Xvfb, the "fake" X server, runs a command +# with that server available, and kills the X server when done. The return +# value of the command becomes the return value of this script. +# +# If anyone is using this to build a Debian package, make sure the package +# Build-Depends on xvfb, xbase-clients, and xfonts-base. + +set -e + +PROGNAME=xvfb-run +SERVERNUM=99 +AUTHFILE= +ERRORFILE=/dev/null +STARTWAIT=3 +XVFBARGS="-screen 0 640x480x24" +LISTENTCP="-nolisten tcp" +XAUTHPROTO=. + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the event +# the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the +# script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +# Display a message, wrapping lines at the terminal width. +message () { + echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} +} + +# Display an error message. +error () { + message "error: $*" >&2 +} + +# Display a usage message. +usage () { + if [ -n "$*" ]; then + message "usage error: $*" + fi + cat <&2 + exit 2 +fi + +if ! type xauth >/dev/null; then + error "xauth command not found" + exit 3 +fi + +# Set up the temp dir for the pid and X authorization file +XVFB_RUN_TMPDIR="$(mktemp --directory --tmpdir $PROGNAME.XXXXXX)" +# If the user did not specify an X authorization file to use, set up a temporary +# directory to house one. +if [ -z "$AUTHFILE" ]; then + AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" Xauthority.XXXXXX) +fi + +# Start Xvfb. +MCOOKIE=$(mcookie) + +if [ -z "$AUTO_DISPLAY" ]; then + # Old style using a pre-computed SERVERNUM + XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \ + 2>&1 & + XVFBPID=$! +else + # New style using Xvfb to provide a free display + PIDFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" pid.XXXXXX) + SERVERNUM=$(XAUTHORITY=$AUTHFILE Xvfb -displayfd 1 $XVFBARGS $LISTENTCP \ + 2>"$ERRORFILE" & echo $! > $PIDFILE) + XVFBPID=$(cat $PIDFILE) +fi +sleep "$STARTWAIT" + +XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1 +add :$SERVERNUM $XAUTHPROTO $MCOOKIE +EOF + +# Start the command and save its exit status. +set +e +DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 +RETVAL=$? +set -e + +# Kill Xvfb now that the command has exited. +kill $XVFBPID + +# Clean up. +XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >"$ERRORFILE" 2>&1 +if [ -n "$XVFB_RUN_TMPDIR" ]; then + if ! rm -r "$XVFB_RUN_TMPDIR"; then + error "problem while cleaning up temporary directory" + exit 5 + fi +fi + +# Return the executed command's exit status. +exit $RETVAL + +# vim:set ai et sts=4 sw=4 tw=80: diff --git a/xenocara-sessreg/PKGBUILD b/xenocara-sessreg/PKGBUILD new file mode 100644 index 0000000..108051b --- /dev/null +++ b/xenocara-sessreg/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-sessreg package + +pkgname=xenocara-sessreg +_openbsdver=6.9 +pkgver=1.1.2 +pkgrel=2 +pkgdesc="Register X sessions in system utmp/utmpx databases, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('glibc') +makedepends=('xenocara-util-macros' 'xenocara-proto') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-sessreg') +conflicts=('xorg-sessreg') +replaces=('xorg-sessreg') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/sessreg-$pkgver.tar.lz{,.sig}) +sha512sums=('3914b6c2fb6a526c81218d4ab572c3a476e6a1739a69264ebf0c5a438f4c4dcf11e8e5a506d7082a5b17668447b2162d5afd81e03174e39164e0f1baa1b41707' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/sessreg" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/sessreg" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/sessreg" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-setxkbmap/PKGBUILD b/xenocara-setxkbmap/PKGBUILD new file mode 100644 index 0000000..8d6b836 --- /dev/null +++ b/xenocara-setxkbmap/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-setxkbmap package + +pkgname=xenocara-setxkbmap +_openbsdver=6.9 +pkgver=1.3.2 +pkgrel=2 +pkgdesc='Set the keyboard using the X Keyboard Extension, provided by Xenocara' +url="https://www.xenocara.org" +license=('Expat') +arch=('i686' 'x86_64') +depends=('libxkbfile') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-setxkbmap') +conflicts=('xorg-setxkbmap') +replaces=('xorg-setxkbmap') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/setxkbmap-$pkgver.tar.lz{,.sig}) +sha512sums=('b16dfb2c99f069b5cc01294af5afd4bc873dcaa23311104f2b4411b83405a86b75559161131f31a4d187c3e6e22b6ca2c5d700a58ad1a4e020584d98f7ef0a2d' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/setxkbmap" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/setxkbmap" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/setxkbmap" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-smproxy/PKGBUILD b/xenocara-smproxy/PKGBUILD new file mode 100644 index 0000000..297492f --- /dev/null +++ b/xenocara-smproxy/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-smproxy package + +pkgname=xenocara-smproxy +_openbsdver=6.9 +pkgver=1.0.6 +pkgrel=3 +pkgdesc="Allows X applications that do not support X11R6 session management to participate in an X11R6 session, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libsm' 'libxt' 'libxmu') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-smproxy') +conflicts=('xorg-smproxy') +replaces=('xorg-smproxy') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/smproxy-$pkgver.tar.lz{,.sig}) +sha512sums=('a63fede2820708c90535760ee897706dac08936e272a1f1779ba995f3939d3c6abab9ca74bbf4dc851790a7fb9ef800213f18f6bf98bbceeadfb57793ada9df9' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/smproxy" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/smproxy" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/smproxy" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-twm/PKGBUILD b/xenocara-twm/PKGBUILD new file mode 100644 index 0000000..39bd927 --- /dev/null +++ b/xenocara-twm/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +# Based on xorg-twm package + +pkgname=xenocara-twm +_openbsdver=6.9 +pkgver=1.0.10 +pkgrel=3 +pkgdesc="Tab Window Manager for the X Window System, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +backup=(usr/share/X11/twm/system.twmrc) +license=('X11') +depends=('libxmu' 'libbsd') +makedepends=('xenocara-util-macros') +provides=('xorg-twm') +conflicts=('xorg-twm') +replaces=('xorg-twm') +options=('!emptydirs') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/twm-$pkgver.tar.lz{,.sig} + add-libbsd-support.patch) +sha512sums=('1a91e2ca5e33a1209d6c038844fe8e6a65a2a9893783a97c82ceb10659ea14cbbc0658c95b7654b3c3e41930a61c734b486428c713adfbe2de815fabfa136e25' + 'SKIP' + 'b1afa6b118395f92003d96d3ac9609c432c984f34dfde3910be5df98e5d75de417e9d20ae41352d2fe33e05f23a80d8e450af36b59d9dd629b1953d26ad69c46') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/twm" + patch -p1 -i "$srcdir/add-libbsd-support.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/twm" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/twm" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-twm/add-libbsd-support.patch b/xenocara-twm/add-libbsd-support.patch new file mode 100644 index 0000000..8acaf1a --- /dev/null +++ b/xenocara-twm/add-libbsd-support.patch @@ -0,0 +1,13 @@ +diff --git a/src/Makefile.am b/src/Makefile.am +index 092d8ce..2f06375 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -33,7 +33,7 @@ AM_CPPFLAGS = \ + -DSYSTEM_INIT_FILE=\"${datadir}/X11/twm/system.twmrc\" + + AM_CFLAGS = $(TWM_CFLAGS) +-twm_LDADD = $(TWM_LIBS) ++twm_LDADD = $(TWM_LIBS) -lbsd + + twm_SOURCES = \ + add_window.c \ diff --git a/xenocara-util-macros/PKGBUILD b/xenocara-util-macros/PKGBUILD new file mode 100644 index 0000000..62d3b46 --- /dev/null +++ b/xenocara-util-macros/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +# Based on xorg-util-macros package + +pkgname=xenocara-util-macros +_openbsdver=6.9 +pkgver=1.19.2 +pkgrel=6 +pkgdesc="Xenocara Autotools macros" +arch=(any) +license=('Expat') +url="https://www.xenocara.org" +provides=('xorg-util-macros') +conflicts=('xorg-util-macros') +replaces=('xorg-util-macros') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/util/macros-$pkgver.tar.lz{,.sig}) +sha512sums=('640fb2d87b503f08f9b022a16a44069afd0c37378e9fa22a35f11763dc5da2c815b124309980ebb0bbe7995f0fb340b355715da21676b65b612afa2f700e7ecc' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/util/macros" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/util/macros" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/util/macros" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-ati-debug/PKGBUILD b/xenocara-video-ati-debug/PKGBUILD new file mode 100644 index 0000000..2ae50bd --- /dev/null +++ b/xenocara-video-ati-debug/PKGBUILD @@ -0,0 +1,59 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-ati package + +pkgname=xenocara-video-ati-debug +_openbsdver=6.9 +pkgver=19.1.0 +pkgrel=7 +pkgdesc="Xenocara ATI video driver for Mach, Rage and Radeon R100/R200/R300/R400/R500 series" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libeudev' 'mesa') +makedepends=('xenocara-server-devel' 'eudev' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-ati') +conflicts=('xf86-video-ati' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-ati') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +install=$pkgname.install +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-ati-$pkgver.tar.lz{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('941f6bd3931378b95df83e6bbfd7a1418ec2f84fae7ea111351c80c7a5b2e1b0932aba43c5411c564018d1db6c5480d4bad5a0d8d362f41f10d01e63638d212c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-ati" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-ati" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/driver/xf86-video-ati" + make check +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-ati" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-ati-debug/xenocara-video-ati-debug.install b/xenocara-video-ati-debug/xenocara-video-ati-debug.install new file mode 100644 index 0000000..daa8f74 --- /dev/null +++ b/xenocara-video-ati-debug/xenocara-video-ati-debug.install @@ -0,0 +1,33 @@ +#!/bin/sh + +post_install() { + echo '>>> !!!ATTENTION!!!' + echo '>>> =================================================================================' + echo '>>> This driver is useful only for ATI Mach, Rage and Radeon R100-R500 series.' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Note: This driver does not support AMD/ATI Radeon R600 series and newer,' + echo '>>> because require nonfree firmware blobs.' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> For AMD/ATI Radeon R600 series and newer, please use "modesetting" X.Org driver,' + echo '>>> which is included in "xenocara-server" package and' + echo '>>> configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "modesetting"' + echo '>>> Option "AccelMethod" "none"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Or install "xenocara-video-fbdev" package and' + echo '>>> configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "fbdev"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' +} + +post_upgrade() { + post_install +} diff --git a/xenocara-video-ati/PKGBUILD b/xenocara-video-ati/PKGBUILD new file mode 100644 index 0000000..2351002 --- /dev/null +++ b/xenocara-video-ati/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-ati package + +pkgname=xenocara-video-ati +_openbsdver=6.9 +pkgver=19.1.0 +pkgrel=7 +pkgdesc="Xenocara ATI video driver for Mach, Rage and Radeon R100/R200/R300/R400/R500 series" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libeudev' 'mesa') +makedepends=('xenocara-server-devel' 'eudev' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-ati') +conflicts=('xf86-video-ati' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-ati') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +install=$pkgname.install +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-ati-$pkgver.tar.lz{,.sig}) +sha512sums=('941f6bd3931378b95df83e6bbfd7a1418ec2f84fae7ea111351c80c7a5b2e1b0932aba43c5411c564018d1db6c5480d4bad5a0d8d362f41f10d01e63638d212c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-ati" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-ati" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/driver/xf86-video-ati" + make check +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-ati" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-ati/xenocara-video-ati.install b/xenocara-video-ati/xenocara-video-ati.install new file mode 100644 index 0000000..daa8f74 --- /dev/null +++ b/xenocara-video-ati/xenocara-video-ati.install @@ -0,0 +1,33 @@ +#!/bin/sh + +post_install() { + echo '>>> !!!ATTENTION!!!' + echo '>>> =================================================================================' + echo '>>> This driver is useful only for ATI Mach, Rage and Radeon R100-R500 series.' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Note: This driver does not support AMD/ATI Radeon R600 series and newer,' + echo '>>> because require nonfree firmware blobs.' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> For AMD/ATI Radeon R600 series and newer, please use "modesetting" X.Org driver,' + echo '>>> which is included in "xenocara-server" package and' + echo '>>> configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "modesetting"' + echo '>>> Option "AccelMethod" "none"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Or install "xenocara-video-fbdev" package and' + echo '>>> configure "/etc/X11/xorg.conf.d/00-device.conf" as it is written bellow:' + echo '>>> ---------------------------------------------------------------------------------' + echo '>>> Section "Device"' + echo '>>> Identifier "devname"' + echo '>>> Driver "fbdev"' + echo '>>> EndSection' + echo '>>> ---------------------------------------------------------------------------------' +} + +post_upgrade() { + post_install +} diff --git a/xenocara-video-cirrus-debug/PKGBUILD b/xenocara-video-cirrus-debug/PKGBUILD new file mode 100644 index 0000000..920a976 --- /dev/null +++ b/xenocara-video-cirrus-debug/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-ati package + +pkgname=xenocara-video-cirrus-debug +_openbsdver=6.9 +pkgver=1.5.3 +pkgrel=2 +pkgdesc="Xenocara Cirrus Logic video driver" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-cirrus') +conflicts=('xf86-video-cirrus' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-cirrus') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-cirrus-$pkgver.tar.lz{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('57b884b86866bf2cc1991cd5f5f5d5d810e34a0ba56eb324266f8d1466f9b2b99bb8ece5c8ccde4b7fe20c65e3f0f1c9eb09231ac1847c731b0fd4390ab65cc8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-cirrus" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-cirrus" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/driver/xf86-video-cirrus" + make check +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-cirrus" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-cirrus/PKGBUILD b/xenocara-video-cirrus/PKGBUILD new file mode 100644 index 0000000..773e497 --- /dev/null +++ b/xenocara-video-cirrus/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-ati package + +pkgname=xenocara-video-cirrus +_openbsdver=6.9 +pkgver=1.5.3 +pkgrel=2 +pkgdesc="Xenocara Cirrus Logic video driver" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-cirrus') +conflicts=('xf86-video-cirrus' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-cirrus') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-cirrus-$pkgver.tar.lz{,.sig}) +sha512sums=('57b884b86866bf2cc1991cd5f5f5d5d810e34a0ba56eb324266f8d1466f9b2b99bb8ece5c8ccde4b7fe20c65e3f0f1c9eb09231ac1847c731b0fd4390ab65cc8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-cirrus" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-cirrus" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/driver/xf86-video-cirrus" + make check +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-cirrus" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-dummy-debug/COPYING b/xenocara-video-dummy-debug/COPYING new file mode 100644 index 0000000..7fdc7e0 --- /dev/null +++ b/xenocara-video-dummy-debug/COPYING @@ -0,0 +1,20 @@ +Copyright 2002, SuSE Linux AG, Author: Egbert Eich + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/xenocara-video-dummy-debug/PKGBUILD b/xenocara-video-dummy-debug/PKGBUILD new file mode 100644 index 0000000..0a30381 --- /dev/null +++ b/xenocara-video-dummy-debug/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-dummy package + +pkgname=xenocara-video-dummy-debug +_openbsdver=6.9 +pkgver=0.3.8 +pkgrel=5 +pkgdesc="Xenocara dummy video driver" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-video-dummy') +conflicts=('xf86-video-dummy' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-dummy') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-dummy-$pkgver.tar.lz{,.sig} + COPYING) +options=(!strip) # It's required for debug packages +sha512sums=('a7aa27ad61773ca721f6539f4dfe89ebfbee6733686e25bcb9d5ee957a5b2538fa4e581d60bace34e6fea76a7a6bd7b070447ea8dfd71ac1207934990f7e0634' + 'SKIP' + '436ca9a51107e3df522021d4452540f4bc98361506644c58f3c3bc33fe8a69770eabb2aebc3831ebe6b16593ddd0b395ea31a82f440bcd4b6337f42510b5ad4c') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-dummy" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-dummy" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-dummy" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-dummy/COPYING b/xenocara-video-dummy/COPYING new file mode 100644 index 0000000..7fdc7e0 --- /dev/null +++ b/xenocara-video-dummy/COPYING @@ -0,0 +1,20 @@ +Copyright 2002, SuSE Linux AG, Author: Egbert Eich + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/xenocara-video-dummy/PKGBUILD b/xenocara-video-dummy/PKGBUILD new file mode 100644 index 0000000..c833e7d --- /dev/null +++ b/xenocara-video-dummy/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-dummy package + +pkgname=xenocara-video-dummy +_openbsdver=6.9 +pkgver=0.3.8 +pkgrel=5 +pkgdesc="Xenocara dummy video driver" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-video-dummy') +conflicts=('xf86-video-dummy' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-dummy') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-dummy-$pkgver.tar.lz{,.sig} + COPYING) +sha512sums=('a7aa27ad61773ca721f6539f4dfe89ebfbee6733686e25bcb9d5ee957a5b2538fa4e581d60bace34e6fea76a7a6bd7b070447ea8dfd71ac1207934990f7e0634' + 'SKIP' + '436ca9a51107e3df522021d4452540f4bc98361506644c58f3c3bc33fe8a69770eabb2aebc3831ebe6b16593ddd0b395ea31a82f440bcd4b6337f42510b5ad4c') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-dummy" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-dummy" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-dummy" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-intel-debug/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch b/xenocara-video-intel-debug/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch new file mode 100644 index 0000000..0ce8031 --- /dev/null +++ b/xenocara-video-intel-debug/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch @@ -0,0 +1,99 @@ +From d39197bb10b7d88cb4c456e7a5e8d34c1dc6eeaf Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Thu, 21 Jul 2016 12:33:29 +0100 +Subject: [PATCH] legacy/i810: Fix compilation with Video ABI 23 changes + +Signed-off-by: Chris Wilson +--- + src/legacy/i810/i810_video.c | 44 +++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 43 insertions(+), 1 deletion(-) + +diff --git a/src/legacy/i810/i810_video.c b/src/legacy/i810/i810_video.c +index be49b91d..af683c81 100644 +--- a/src/legacy/i810/i810_video.c ++++ b/src/legacy/i810/i810_video.c +@@ -77,7 +77,11 @@ static int I810PutImage( ScrnInfoPtr, + static int I810QueryImageAttributes(ScrnInfoPtr, + int, unsigned short *, unsigned short *, int *, int *); + ++#if !HAVE_NOTIFY_FD + static void I810BlockHandler(BLOCKHANDLER_ARGS_DECL); ++#else ++static void I810BlockHandler(void *data, void *_timeout); ++#endif + + #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) + +@@ -418,8 +422,14 @@ I810SetupImageVideo(ScreenPtr screen) + + pI810->adaptor = adapt; + ++#if !HAVE_NOTIFY_FD + pI810->BlockHandler = screen->BlockHandler; + screen->BlockHandler = I810BlockHandler; ++#else ++ RegisterBlockAndWakeupHandlers(I810BlockHandler, ++ (ServerWakeupHandlerProcPtr)NoopDDA, ++ pScrn); ++#endif + + xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); + xvContrast = MAKE_ATOM("XV_CONTRAST"); +@@ -1135,6 +1145,7 @@ I810QueryImageAttributes( + return size; + } + ++#if !HAVE_NOTIFY_FD + static void + I810BlockHandler (BLOCKHANDLER_ARGS_DECL) + { +@@ -1172,6 +1183,38 @@ I810BlockHandler (BLOCKHANDLER_ARGS_DECL) + } + } + } ++#else ++static void ++I810BlockHandler(void *data, void *_timeout) ++{ ++ ScrnInfoPtr pScrn = data; ++ I810Ptr pI810 = I810PTR(pScrn); ++ I810PortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn); ++ I810OverlayRegPtr overlay = (I810OverlayRegPtr) (pI810->FbBase + pI810->OverlayStart); ++ ++ if(pPriv->videoStatus & TIMER_MASK) { ++ UpdateCurrentTime(); ++ if(pPriv->videoStatus & OFF_TIMER) { ++ if(pPriv->offTime < currentTime.milliseconds) { ++ /* Turn off the overlay */ ++ overlay->OV0CMD &= 0xFFFFFFFE; ++ OVERLAY_UPDATE(pI810->OverlayPhysical); ++ ++ pPriv->videoStatus = FREE_TIMER; ++ pPriv->freeTime = currentTime.milliseconds + FREE_DELAY; ++ } ++ } else { /* FREE_TIMER */ ++ if(pPriv->freeTime < currentTime.milliseconds) { ++ if(pPriv->linear) { ++ xf86FreeOffscreenLinear(pPriv->linear); ++ pPriv->linear = NULL; ++ } ++ pPriv->videoStatus = 0; ++ } ++ } ++ } ++} ++#endif + + + /*************************************************************************** +@@ -1373,7 +1416,6 @@ I810DisplaySurface( + UpdateCurrentTime(); + pI810Priv->videoStatus = FREE_TIMER; + pI810Priv->freeTime = currentTime.milliseconds + FREE_DELAY; +- pScrn->pScreen->BlockHandler = I810BlockHandler; + } + + return Success; +-- +2.12.2 + diff --git a/xenocara-video-intel-debug/0002-Fix-build-on-i686.patch b/xenocara-video-intel-debug/0002-Fix-build-on-i686.patch new file mode 100644 index 0000000..f10abc7 --- /dev/null +++ b/xenocara-video-intel-debug/0002-Fix-build-on-i686.patch @@ -0,0 +1,47 @@ +From 9e6e003e3468dca674ac848e2669af973da02fd4 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 6 Mar 2018 12:07:46 -0500 +Subject: [PATCH] Fix build on i686 + +Presumably this only matters for i686 because amd64 implies sse2, but: + +BUILDSTDERR: In file included from gen4_vertex.c:34: +BUILDSTDERR: gen4_vertex.c: In function 'emit_vertex': +BUILDSTDERR: sna_render_inline.h:40:26: error: inlining failed in call to always_inline 'vertex_emit_2s': target specific option mismatch +BUILDSTDERR: static force_inline void vertex_emit_2s(struct sna *sna, int16_t x, int16_t y) +BUILDSTDERR: ^~~~~~~~~~~~~~ +BUILDSTDERR: gen4_vertex.c:308:25: note: called from here +BUILDSTDERR: #define OUT_VERTEX(x,y) vertex_emit_2s(sna, x,y) /* XXX assert(!too_large(x, y)); */ +BUILDSTDERR: ^~~~~~~~~~~~~~~~~~~~~~~~ +BUILDSTDERR: gen4_vertex.c:360:2: note: in expansion of macro 'OUT_VERTEX' +BUILDSTDERR: OUT_VERTEX(dstX, dstY); +BUILDSTDERR: ^~~~~~~~~~ + +The bug here appears to be that emit_vertex() is declared 'sse2' but +vertex_emit_2s is merely always_inline. gcc8 decides that since you said +always_inline you need to have explicitly cloned it for every +permutation of targets. Merely saying inline seems to do the job of +cloning vertex_emit_2s as much as necessary. + +So to reiterate: if you say always-inline, it won't, but if you just say +maybe inline, it will. Thanks gcc, that's helpful. +--- + src/sna/compiler.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sna/compiler.h b/src/sna/compiler.h +index 0f3775ec..2e579b15 100644 +--- a/src/sna/compiler.h ++++ b/src/sna/compiler.h +@@ -32,7 +32,7 @@ + #define likely(expr) (__builtin_expect (!!(expr), 1)) + #define unlikely(expr) (__builtin_expect (!!(expr), 0)) + #define noinline __attribute__((noinline)) +-#define force_inline inline __attribute__((always_inline)) ++#define force_inline inline /* __attribute__((always_inline)) */ + #define fastcall __attribute__((regparm(3))) + #define must_check __attribute__((warn_unused_result)) + #define constant __attribute__((const)) +-- +2.12.2 + diff --git a/xenocara-video-intel-debug/PKGBUILD b/xenocara-video-intel-debug/PKGBUILD new file mode 100644 index 0000000..608ee5c --- /dev/null +++ b/xenocara-video-intel-debug/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-intel package + +pkgname=xenocara-video-intel-debug +_openbsdver=6.9 +pkgver=2.99.916 +pkgrel=2 +pkgdesc="Xenocara Intel i810/i830/i915/945G/G965+ video drivers" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +install="$pkgname.install" +depends=('mesa-dri' 'libxvmc' 'pixman' 'xcb-util>=0.4.0' 'libeudev') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'libx11' 'libxrender' 'xenocara-util-macros' + # additional deps for intel-virtual-output + 'libxrandr' 'libxinerama' 'libxcursor' 'libxtst' 'libxss') +optdepends=('libxrandr: for intel-virtual-output' + 'libxinerama: for intel-virtual-output' + 'libxcursor: for intel-virtual-output' + 'libxtst: for intel-virtual-output' + 'libxss: for intel-virtual-output') +provides=('xf86-video-intel' 'xf86-video-intel-uxa' 'xf86-video-intel-sna') +conflicts=('xf86-video-intel' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25' + 'xf86-video-intel-sna' 'xf86-video-intel-uxa' 'xf86-video-i810' 'xf86-video-intel-legacy') +replaces=('xf86-video-intel' 'xf86-video-intel-uxa' 'xf86-video-intel-sna' 'xorg-video-intel-debug') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-intel-$pkgver.tar.lz{,.sig} + include-missing-sys-sysmacros-h.patch + 0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch + 0002-Fix-build-on-i686.patch) +options=(!strip) # It's required for debug packages +sha512sums=('7dbc8fd96e7d20438fb6805eac445fef3ba5e1f0374d1e1c3434e145d7cbac8fd2cc8e46a2e8036993c005ac6c5a0757eb4f646ee0a769f174d2e0646feeec8f' + 'SKIP' + '315a0fbb559cfc57dc5a012a4c1fa4d5105bd73bf84195af8d21b5926460110f413ee500b507a988caa5c2c7a1b755e23caecd5ba942f09d54f24b54e780d7b8' + '579135d097f324eae2c471ab18a0296f201acebfa5785b4f71c8666b0aa268cf596d28f34e285a4fb5ddaab195d46efea39638c6bffea9169d07d1ff50147c3b' + '2fed088c25bf6b439783ea53e1fdf445eecf46a2fb75ca715df9db3b4f29309f3627e517bcb639a60bad7287ca99bd1deb7f18224393fe43e2f7d7e42caab2cc') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-intel" + patch -p1 -i "$srcdir/include-missing-sys-sysmacros-h.patch" + patch -p1 -i "$srcdir/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch" + patch -p1 -i "$srcdir/0002-Fix-build-on-i686.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-intel" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr \ + --with-default-dri=3 + make +} + +check() { + cd "xenocara-$_openbsdver/driver/xf86-video-intel" + make check +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-intel" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-intel-debug/include-missing-sys-sysmacros-h.patch b/xenocara-video-intel-debug/include-missing-sys-sysmacros-h.patch new file mode 100644 index 0000000..367763d --- /dev/null +++ b/xenocara-video-intel-debug/include-missing-sys-sysmacros-h.patch @@ -0,0 +1,39 @@ +diff --git a/src/backlight.c b/src/backlight.c +index 129afea6..33c58b9a 100644 +--- a/src/backlight.c ++++ b/src/backlight.c +@@ -34,6 +34,8 @@ + #include + #include + ++#include ++ + #include + #include + #include +diff --git a/src/intel_device.c b/src/intel_device.c +index 5d4398d7..ff96ab27 100644 +--- a/src/intel_device.c ++++ b/src/intel_device.c +@@ -38,6 +38,8 @@ + #include + #include + ++#include ++ + #include + + #include +diff --git a/tools/backlight_helper.c b/tools/backlight_helper.c +index 8b2667dc..51d2fffc 100644 +--- a/tools/backlight_helper.c ++++ b/tools/backlight_helper.c +@@ -9,6 +9,8 @@ + #include + #include + ++#include ++ + #define DBG 0 + + #if defined(__GNUC__) && (__GNUC__ > 3) diff --git a/xenocara-video-intel-debug/xenocara-video-intel-debug.install b/xenocara-video-intel-debug/xenocara-video-intel-debug.install new file mode 100644 index 0000000..836339b --- /dev/null +++ b/xenocara-video-intel-debug/xenocara-video-intel-debug.install @@ -0,0 +1,21 @@ +post_install() { + cat <>> This driver now uses DRI3 as the default Direct Rendering + Infrastructure. You can try falling back to DRI2 if you run + into trouble. To do so, save a file with the following + content as /etc/X11/xorg.conf.d/20-intel.conf : + Section "Device" + Identifier "Intel Graphics" + Driver "intel" + Option "DRI" "2" # DRI3 is now default + #Option "AccelMethod" "sna" # default + #Option "AccelMethod" "uxa" # fallback + EndSection +MSG +} + +post_upgrade() { + if [ $(vercmp $2 2.99.917-1) -lt 0 ]; then + post_install + fi +} diff --git a/xenocara-video-intel/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch b/xenocara-video-intel/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch new file mode 100644 index 0000000..0ce8031 --- /dev/null +++ b/xenocara-video-intel/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch @@ -0,0 +1,99 @@ +From d39197bb10b7d88cb4c456e7a5e8d34c1dc6eeaf Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Thu, 21 Jul 2016 12:33:29 +0100 +Subject: [PATCH] legacy/i810: Fix compilation with Video ABI 23 changes + +Signed-off-by: Chris Wilson +--- + src/legacy/i810/i810_video.c | 44 +++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 43 insertions(+), 1 deletion(-) + +diff --git a/src/legacy/i810/i810_video.c b/src/legacy/i810/i810_video.c +index be49b91d..af683c81 100644 +--- a/src/legacy/i810/i810_video.c ++++ b/src/legacy/i810/i810_video.c +@@ -77,7 +77,11 @@ static int I810PutImage( ScrnInfoPtr, + static int I810QueryImageAttributes(ScrnInfoPtr, + int, unsigned short *, unsigned short *, int *, int *); + ++#if !HAVE_NOTIFY_FD + static void I810BlockHandler(BLOCKHANDLER_ARGS_DECL); ++#else ++static void I810BlockHandler(void *data, void *_timeout); ++#endif + + #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) + +@@ -418,8 +422,14 @@ I810SetupImageVideo(ScreenPtr screen) + + pI810->adaptor = adapt; + ++#if !HAVE_NOTIFY_FD + pI810->BlockHandler = screen->BlockHandler; + screen->BlockHandler = I810BlockHandler; ++#else ++ RegisterBlockAndWakeupHandlers(I810BlockHandler, ++ (ServerWakeupHandlerProcPtr)NoopDDA, ++ pScrn); ++#endif + + xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); + xvContrast = MAKE_ATOM("XV_CONTRAST"); +@@ -1135,6 +1145,7 @@ I810QueryImageAttributes( + return size; + } + ++#if !HAVE_NOTIFY_FD + static void + I810BlockHandler (BLOCKHANDLER_ARGS_DECL) + { +@@ -1172,6 +1183,38 @@ I810BlockHandler (BLOCKHANDLER_ARGS_DECL) + } + } + } ++#else ++static void ++I810BlockHandler(void *data, void *_timeout) ++{ ++ ScrnInfoPtr pScrn = data; ++ I810Ptr pI810 = I810PTR(pScrn); ++ I810PortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn); ++ I810OverlayRegPtr overlay = (I810OverlayRegPtr) (pI810->FbBase + pI810->OverlayStart); ++ ++ if(pPriv->videoStatus & TIMER_MASK) { ++ UpdateCurrentTime(); ++ if(pPriv->videoStatus & OFF_TIMER) { ++ if(pPriv->offTime < currentTime.milliseconds) { ++ /* Turn off the overlay */ ++ overlay->OV0CMD &= 0xFFFFFFFE; ++ OVERLAY_UPDATE(pI810->OverlayPhysical); ++ ++ pPriv->videoStatus = FREE_TIMER; ++ pPriv->freeTime = currentTime.milliseconds + FREE_DELAY; ++ } ++ } else { /* FREE_TIMER */ ++ if(pPriv->freeTime < currentTime.milliseconds) { ++ if(pPriv->linear) { ++ xf86FreeOffscreenLinear(pPriv->linear); ++ pPriv->linear = NULL; ++ } ++ pPriv->videoStatus = 0; ++ } ++ } ++ } ++} ++#endif + + + /*************************************************************************** +@@ -1373,7 +1416,6 @@ I810DisplaySurface( + UpdateCurrentTime(); + pI810Priv->videoStatus = FREE_TIMER; + pI810Priv->freeTime = currentTime.milliseconds + FREE_DELAY; +- pScrn->pScreen->BlockHandler = I810BlockHandler; + } + + return Success; +-- +2.12.2 + diff --git a/xenocara-video-intel/0002-Fix-build-on-i686.patch b/xenocara-video-intel/0002-Fix-build-on-i686.patch new file mode 100644 index 0000000..f10abc7 --- /dev/null +++ b/xenocara-video-intel/0002-Fix-build-on-i686.patch @@ -0,0 +1,47 @@ +From 9e6e003e3468dca674ac848e2669af973da02fd4 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 6 Mar 2018 12:07:46 -0500 +Subject: [PATCH] Fix build on i686 + +Presumably this only matters for i686 because amd64 implies sse2, but: + +BUILDSTDERR: In file included from gen4_vertex.c:34: +BUILDSTDERR: gen4_vertex.c: In function 'emit_vertex': +BUILDSTDERR: sna_render_inline.h:40:26: error: inlining failed in call to always_inline 'vertex_emit_2s': target specific option mismatch +BUILDSTDERR: static force_inline void vertex_emit_2s(struct sna *sna, int16_t x, int16_t y) +BUILDSTDERR: ^~~~~~~~~~~~~~ +BUILDSTDERR: gen4_vertex.c:308:25: note: called from here +BUILDSTDERR: #define OUT_VERTEX(x,y) vertex_emit_2s(sna, x,y) /* XXX assert(!too_large(x, y)); */ +BUILDSTDERR: ^~~~~~~~~~~~~~~~~~~~~~~~ +BUILDSTDERR: gen4_vertex.c:360:2: note: in expansion of macro 'OUT_VERTEX' +BUILDSTDERR: OUT_VERTEX(dstX, dstY); +BUILDSTDERR: ^~~~~~~~~~ + +The bug here appears to be that emit_vertex() is declared 'sse2' but +vertex_emit_2s is merely always_inline. gcc8 decides that since you said +always_inline you need to have explicitly cloned it for every +permutation of targets. Merely saying inline seems to do the job of +cloning vertex_emit_2s as much as necessary. + +So to reiterate: if you say always-inline, it won't, but if you just say +maybe inline, it will. Thanks gcc, that's helpful. +--- + src/sna/compiler.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sna/compiler.h b/src/sna/compiler.h +index 0f3775ec..2e579b15 100644 +--- a/src/sna/compiler.h ++++ b/src/sna/compiler.h +@@ -32,7 +32,7 @@ + #define likely(expr) (__builtin_expect (!!(expr), 1)) + #define unlikely(expr) (__builtin_expect (!!(expr), 0)) + #define noinline __attribute__((noinline)) +-#define force_inline inline __attribute__((always_inline)) ++#define force_inline inline /* __attribute__((always_inline)) */ + #define fastcall __attribute__((regparm(3))) + #define must_check __attribute__((warn_unused_result)) + #define constant __attribute__((const)) +-- +2.12.2 + diff --git a/xenocara-video-intel/PKGBUILD b/xenocara-video-intel/PKGBUILD new file mode 100644 index 0000000..bdcedb0 --- /dev/null +++ b/xenocara-video-intel/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-intel package + +pkgname=xenocara-video-intel +_openbsdver=6.9 +pkgver=2.99.916 +pkgrel=2 +pkgdesc="Xenocara Intel i810/i830/i915/945G/G965+ video drivers" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +install="$pkgname.install" +depends=('mesa-dri' 'libxvmc' 'pixman' 'xcb-util>=0.4.0' 'libeudev') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'libx11' 'libxrender' 'xenocara-util-macros' + # additional deps for intel-virtual-output + 'libxrandr' 'libxinerama' 'libxcursor' 'libxtst' 'libxss') +optdepends=('libxrandr: for intel-virtual-output' + 'libxinerama: for intel-virtual-output' + 'libxcursor: for intel-virtual-output' + 'libxtst: for intel-virtual-output' + 'libxss: for intel-virtual-output') +provides=('xf86-video-intel' 'xf86-video-intel-uxa' 'xf86-video-intel-sna') +conflicts=('xf86-video-intel' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25' + 'xf86-video-intel-sna' 'xf86-video-intel-uxa' 'xf86-video-i810' 'xf86-video-intel-legacy') +replaces=('xf86-video-intel' 'xf86-video-intel-uxa' 'xf86-video-intel-sna' 'xorg-video-intel') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-intel-$pkgver.tar.lz{,.sig} + include-missing-sys-sysmacros-h.patch + 0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch + 0002-Fix-build-on-i686.patch) +sha512sums=('7dbc8fd96e7d20438fb6805eac445fef3ba5e1f0374d1e1c3434e145d7cbac8fd2cc8e46a2e8036993c005ac6c5a0757eb4f646ee0a769f174d2e0646feeec8f' + 'SKIP' + '315a0fbb559cfc57dc5a012a4c1fa4d5105bd73bf84195af8d21b5926460110f413ee500b507a988caa5c2c7a1b755e23caecd5ba942f09d54f24b54e780d7b8' + '579135d097f324eae2c471ab18a0296f201acebfa5785b4f71c8666b0aa268cf596d28f34e285a4fb5ddaab195d46efea39638c6bffea9169d07d1ff50147c3b' + '2fed088c25bf6b439783ea53e1fdf445eecf46a2fb75ca715df9db3b4f29309f3627e517bcb639a60bad7287ca99bd1deb7f18224393fe43e2f7d7e42caab2cc') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-intel" + patch -p1 -i "$srcdir/include-missing-sys-sysmacros-h.patch" + patch -p1 -i "$srcdir/0001-legacy-i810-Fix-compilation-with-Video-ABI-23-change.patch" + patch -p1 -i "$srcdir/0002-Fix-build-on-i686.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-intel" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr \ + --with-default-dri=3 + make +} + +check() { + cd "xenocara-$_openbsdver/driver/xf86-video-intel" + make check +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-intel" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-intel/include-missing-sys-sysmacros-h.patch b/xenocara-video-intel/include-missing-sys-sysmacros-h.patch new file mode 100644 index 0000000..367763d --- /dev/null +++ b/xenocara-video-intel/include-missing-sys-sysmacros-h.patch @@ -0,0 +1,39 @@ +diff --git a/src/backlight.c b/src/backlight.c +index 129afea6..33c58b9a 100644 +--- a/src/backlight.c ++++ b/src/backlight.c +@@ -34,6 +34,8 @@ + #include + #include + ++#include ++ + #include + #include + #include +diff --git a/src/intel_device.c b/src/intel_device.c +index 5d4398d7..ff96ab27 100644 +--- a/src/intel_device.c ++++ b/src/intel_device.c +@@ -38,6 +38,8 @@ + #include + #include + ++#include ++ + #include + + #include +diff --git a/tools/backlight_helper.c b/tools/backlight_helper.c +index 8b2667dc..51d2fffc 100644 +--- a/tools/backlight_helper.c ++++ b/tools/backlight_helper.c +@@ -9,6 +9,8 @@ + #include + #include + ++#include ++ + #define DBG 0 + + #if defined(__GNUC__) && (__GNUC__ > 3) diff --git a/xenocara-video-intel/xenocara-video-intel.install b/xenocara-video-intel/xenocara-video-intel.install new file mode 100644 index 0000000..836339b --- /dev/null +++ b/xenocara-video-intel/xenocara-video-intel.install @@ -0,0 +1,21 @@ +post_install() { + cat <>> This driver now uses DRI3 as the default Direct Rendering + Infrastructure. You can try falling back to DRI2 if you run + into trouble. To do so, save a file with the following + content as /etc/X11/xorg.conf.d/20-intel.conf : + Section "Device" + Identifier "Intel Graphics" + Driver "intel" + Option "DRI" "2" # DRI3 is now default + #Option "AccelMethod" "sna" # default + #Option "AccelMethod" "uxa" # fallback + EndSection +MSG +} + +post_upgrade() { + if [ $(vercmp $2 2.99.917-1) -lt 0 ]; then + post_install + fi +} diff --git a/xenocara-video-openchrome-debug/PKGBUILD b/xenocara-video-openchrome-debug/PKGBUILD new file mode 100644 index 0000000..0eaa710 --- /dev/null +++ b/xenocara-video-openchrome-debug/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-openchrome package + +pkgname=xenocara-video-openchrome-debug +_openbsdver=6.9 +pkgver=0.6.182 +pkgrel=4 +pkgdesc="Xenocara Openchrome drivers" +arch=(i686 x86_64) +license=('Expat') +url="https://www.xenocara.org" +depends=('libdrm' 'libxvmc' 'libeudev') +optdepends=('unichrome-dri') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'eudev' 'xenocara-util-macros') +provides=('xf86-video-openchrome') +conflicts=('xf86-video-openchrome' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25' + 'xf86-video-via' 'xf86-video-unichrome' 'openchrome') +replaces=('xf86-video-openchrome' 'openchrome' 'xf86-video-via') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +options=('!emptydirs' '!strip') # !strip is required for debug packages +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-openchrome-$pkgver.tar.lz{,.sig}) +sha512sums=('706ede56de32c1682aa8f35e0004171d4c2d392bd6b59ec22cabe43b3091024dd2fd5fdb72c0eef9ee8444ce55d8f8001f7fb7e6096fff2adbc9055d86920893' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-openchrome" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-openchrome" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/driver/xf86-video-openchrome" + make check +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-openchrome" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-openchrome/PKGBUILD b/xenocara-video-openchrome/PKGBUILD new file mode 100644 index 0000000..79c62ca --- /dev/null +++ b/xenocara-video-openchrome/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-openchrome package + +pkgname=xenocara-video-openchrome +_openbsdver=6.9 +pkgver=0.6.182 +pkgrel=4 +pkgdesc="Xenocara Openchrome drivers" +arch=(i686 x86_64) +license=('Expat') +url="https://www.xenocara.org" +depends=('libdrm' 'libxvmc' 'libeudev') +optdepends=('unichrome-dri') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'eudev' 'xenocara-util-macros') +provides=('xf86-video-openchrome') +conflicts=('xf86-video-openchrome' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25' + 'xf86-video-via' 'xf86-video-unichrome' 'openchrome') +replaces=('xf86-video-openchrome' 'openchrome' 'xf86-video-via') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +options=('!emptydirs') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-openchrome-$pkgver.tar.lz{,.sig}) +sha512sums=('706ede56de32c1682aa8f35e0004171d4c2d392bd6b59ec22cabe43b3091024dd2fd5fdb72c0eef9ee8444ce55d8f8001f7fb7e6096fff2adbc9055d86920893' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-openchrome" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-openchrome" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr + make +} + +check() { + cd "xenocara-$_openbsdver/driver/xf86-video-openchrome" + make check +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-openchrome" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-vesa-debug/PKGBUILD b/xenocara-video-vesa-debug/PKGBUILD new file mode 100644 index 0000000..1672bb4 --- /dev/null +++ b/xenocara-video-vesa-debug/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-vesa package + +pkgname=xenocara-video-vesa-debug +_openbsdver=6.9 +pkgver=2.3.4 +pkgrel=6 +pkgdesc="Xenocara vesa video driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-vesa') +conflicts=('xf86-video-vesa' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-vesa') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-vesa-$pkgver.tar.lz{,.sig} + revert-kernelcheck.patch) +options=(!strip) # It's required for debug packages +sha512sums=('d80ae6384e06876d0b462263591332ed8e5f926ca9a14cf4b34fc9ecbd6da7761d2bafe10377c1017daf3c24fd3c53dd1521e3ceb3fdc75ec16316c857f9798b' + 'SKIP' + '2357f9b30732321c774073c3e233d16ebff29aab31bcebf7c6481bd2187554e85ec8b9cd375eaa836b433dfaba4d9e9cea1dcf3659803a388ceb6699ed905923') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-vesa" + patch -p1 -R -i "$srcdir/revert-kernelcheck.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-vesa" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-vesa" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-vesa-debug/revert-kernelcheck.patch b/xenocara-video-vesa-debug/revert-kernelcheck.patch new file mode 100644 index 0000000..37418cc --- /dev/null +++ b/xenocara-video-vesa-debug/revert-kernelcheck.patch @@ -0,0 +1,31 @@ +From b1f7f190f9d4f2ab63d3e9ade3e7e04bb4b1f89f Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 08 Dec 2010 18:45:32 +0000 +Subject: Refuse to load if there's a kernel driver bound to the device + +Ported from the equivalent check in nv. + +Signed-off-by: Adam Jackson +--- +diff --git a/src/vesa.c b/src/vesa.c +index 168fde1..2523d76 100644 +--- a/src/vesa.c ++++ b/src/vesa.c +@@ -431,8 +431,14 @@ VESAPciProbe(DriverPtr drv, int entity_num, struct pci_device *dev, + pScrn = xf86ConfigPciEntity(NULL, 0, entity_num, NULL, + NULL, NULL, NULL, NULL, NULL); + if (pScrn != NULL) { +- VESAPtr pVesa = VESAGetRec(pScrn); ++ VESAPtr pVesa; + ++ if (pci_device_has_kernel_driver(dev)) { ++ ErrorF("vesa: Ignoring device with a bound kernel driver\n"); ++ return FALSE; ++ } ++ ++ pVesa = VESAGetRec(pScrn); + VESAInitScrn(pScrn); + pVesa->pciInfo = dev; + } +-- +cgit v0.9.0.2-2-gbebe diff --git a/xenocara-video-vesa/PKGBUILD b/xenocara-video-vesa/PKGBUILD new file mode 100644 index 0000000..faee02a --- /dev/null +++ b/xenocara-video-vesa/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-vesa package + +pkgname=xenocara-video-vesa +_openbsdver=6.9 +pkgver=2.3.4 +pkgrel=6 +pkgdesc="Xenocara vesa video driver" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-vesa') +conflicts=('xf86-video-vesa' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-vesa') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-vesa-$pkgver.tar.lz{,.sig} + revert-kernelcheck.patch) +sha512sums=('d80ae6384e06876d0b462263591332ed8e5f926ca9a14cf4b34fc9ecbd6da7761d2bafe10377c1017daf3c24fd3c53dd1521e3ceb3fdc75ec16316c857f9798b' + 'SKIP' + '2357f9b30732321c774073c3e233d16ebff29aab31bcebf7c6481bd2187554e85ec8b9cd375eaa836b433dfaba4d9e9cea1dcf3659803a388ceb6699ed905923') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-vesa" + patch -p1 -R -i "$srcdir/revert-kernelcheck.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-vesa" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-vesa" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-vesa/revert-kernelcheck.patch b/xenocara-video-vesa/revert-kernelcheck.patch new file mode 100644 index 0000000..37418cc --- /dev/null +++ b/xenocara-video-vesa/revert-kernelcheck.patch @@ -0,0 +1,31 @@ +From b1f7f190f9d4f2ab63d3e9ade3e7e04bb4b1f89f Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 08 Dec 2010 18:45:32 +0000 +Subject: Refuse to load if there's a kernel driver bound to the device + +Ported from the equivalent check in nv. + +Signed-off-by: Adam Jackson +--- +diff --git a/src/vesa.c b/src/vesa.c +index 168fde1..2523d76 100644 +--- a/src/vesa.c ++++ b/src/vesa.c +@@ -431,8 +431,14 @@ VESAPciProbe(DriverPtr drv, int entity_num, struct pci_device *dev, + pScrn = xf86ConfigPciEntity(NULL, 0, entity_num, NULL, + NULL, NULL, NULL, NULL, NULL); + if (pScrn != NULL) { +- VESAPtr pVesa = VESAGetRec(pScrn); ++ VESAPtr pVesa; + ++ if (pci_device_has_kernel_driver(dev)) { ++ ErrorF("vesa: Ignoring device with a bound kernel driver\n"); ++ return FALSE; ++ } ++ ++ pVesa = VESAGetRec(pScrn); + VESAInitScrn(pScrn); + pVesa->pciInfo = dev; + } +-- +cgit v0.9.0.2-2-gbebe diff --git a/xenocara-video-vmware-debug/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch b/xenocara-video-vmware-debug/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch new file mode 100644 index 0000000..5413125 --- /dev/null +++ b/xenocara-video-vmware-debug/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch @@ -0,0 +1,32 @@ +From d64d01c7a599dc3c79125701f076a3e459cefdc2 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Thu, 29 Sep 2016 19:37:22 +0200 +Subject: [PATCH] Adapt Block/WakeupHandler signature for ABI 23 + +Signed-off-by: Hans de Goede +Acked-by: Thomas Hellstrom +--- + src/compat-api.h | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/compat-api.h b/src/compat-api.h +index 205ac59..02876c5 100644 +--- a/src/compat-api.h ++++ b/src/compat-api.h +@@ -75,8 +75,13 @@ + + #define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv + ++#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(23, 0) ++#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout ++#define BLOCKHANDLER_ARGS arg, pTimeout ++#else + #define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask + #define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask ++#endif + + #define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen + #define CLOSE_SCREEN_ARGS pScreen +-- +2.12.2 + diff --git a/xenocara-video-vmware-debug/0002-vmware-Fix-build-warnings.patch b/xenocara-video-vmware-debug/0002-vmware-Fix-build-warnings.patch new file mode 100644 index 0000000..0c672b2 --- /dev/null +++ b/xenocara-video-vmware-debug/0002-vmware-Fix-build-warnings.patch @@ -0,0 +1,212 @@ +From d8c2f8501307a9c0c65601e897e7d919e42ba0b3 Mon Sep 17 00:00:00 2001 +From: Deepak Singh Rawat +Date: Mon, 7 Aug 2017 15:57:56 -0700 +Subject: [PATCH] vmware: Fix build warnings + +Due to following commit in xserver there were +build warnings, as variables now declared const. + +d89b42bda46d36fc0879611cc3b3566957ce36d0 +e1e01d2e33c632e395d7e396f73fba8ae606b15a + +Added a compat header file. + +Signed-off-by: Deepak Rawat +Reviewed-by: Brian Paul +Reviewed-by: Thomas Hellstrom :q +--- + saa/Makefile.am | 2 +- + saa/saa_priv.h | 7 ++++--- + src/common_compat.h | 11 +++++++++++ + src/vmware.c | 15 +++++++++------ + src/vmwaremodes.c | 3 ++- + vmwgfx/vmwgfx_driver.c | 9 +++++---- + 6 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 src/common_compat.h + +diff --git a/saa/Makefile.am b/saa/Makefile.am +index 48c9734..b812815 100644 +--- a/saa/Makefile.am ++++ b/saa/Makefile.am +@@ -2,7 +2,7 @@ + if BUILD_VMWGFX + noinst_LTLIBRARIES = libsaa.la + +-libsaa_la_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) ++libsaa_la_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) -I$(top_srcdir)/src + libsaa_la_LDFLAGS = -static + libsaa_la_SOURCES = \ + saa.c \ +diff --git a/saa/saa_priv.h b/saa/saa_priv.h +index 5d81453..9065fbe 100644 +--- a/saa/saa_priv.h ++++ b/saa/saa_priv.h +@@ -59,14 +59,15 @@ + #include "glyphstr.h" + #endif + #include "damage.h" ++#include "common_compat.h" + + #define SAA_INVALID_ADDRESS \ + ((void *) ((unsigned long) 0xFFFFFFFF - 1024*1024)) + + struct saa_gc_priv { + /* GC values from the layer below. */ +- GCOps *saved_ops; +- GCFuncs *saved_funcs; ++ CONST_ABI_18_0 GCOps *saved_ops; ++ CONST_ABI_18_0 GCFuncs *saved_funcs; + }; + + struct saa_screen_priv { +@@ -127,7 +128,7 @@ do { \ + } + + #define saa_swap(priv, real, mem) {\ +- void *tmp = (priv)->saved_##mem; \ ++ CONST_ABI_18_0 void *tmp = (priv)->saved_##mem; \ + (priv)->saved_##mem = (real)->mem; \ + (real)->mem = tmp; \ + } +diff --git a/src/common_compat.h b/src/common_compat.h +new file mode 100644 +index 0000000..d7b4867 +--- /dev/null ++++ b/src/common_compat.h +@@ -0,0 +1,11 @@ ++#ifndef _COMMON_COMPAT_H_ ++#define _COMMOM_COMPAT_H_ ++ ++#if (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 18) ++#define CONST_ABI_18_0 const ++#else ++#define CONST_ABI_18_0 ++#endif ++ ++#endif ++ +diff --git a/src/vmware.c b/src/vmware.c +index 12f12ed..1af20d8 100644 +--- a/src/vmware.c ++++ b/src/vmware.c +@@ -36,6 +36,7 @@ char rcsId_vmware[] = + #include "svga_modes.h" + #include "vmware_bootstrap.h" + #include "vmware_common.h" ++#include "common_compat.h" + + #ifndef HAVE_XORG_SERVER_1_5_0 + #include +@@ -1222,12 +1223,14 @@ VMWAREAddDisplayMode(ScrnInfoPtr pScrn, + int height) + { + DisplayModeRec *mode; ++ char * modeName; + + mode = malloc(sizeof(DisplayModeRec)); + memset(mode, 0, sizeof *mode); + +- mode->name = malloc(strlen(name) + 1); +- strcpy(mode->name, name); ++ modeName = malloc(strlen(name) + 1); ++ strcpy(modeName, name); ++ mode->name = modeName; + mode->status = MODE_OK; + mode->type = M_T_DEFAULT; + mode->HDisplay = width; +@@ -1324,7 +1327,7 @@ VMWAREScreenInit(SCREEN_INIT_ARGS_DECL) + + + if (useXinerama && xf86IsOptionSet(options, OPTION_GUI_LAYOUT)) { +- char *topology = xf86GetOptValString(options, OPTION_GUI_LAYOUT); ++ CONST_ABI_18_0 char *topology = xf86GetOptValString(options, OPTION_GUI_LAYOUT); + if (topology) { + pVMWARE->xineramaState = + VMWAREParseTopologyString(pScrn, topology, +@@ -1332,11 +1335,11 @@ VMWAREScreenInit(SCREEN_INIT_ARGS_DECL) + + pVMWARE->xineramaStatic = pVMWARE->xineramaState != NULL; + +- free(topology); ++ free((void *)topology); + } + } else if (useXinerama && + xf86IsOptionSet(options, OPTION_STATIC_XINERAMA)) { +- char *topology = xf86GetOptValString(options, OPTION_STATIC_XINERAMA); ++ CONST_ABI_18_0 char *topology = xf86GetOptValString(options, OPTION_STATIC_XINERAMA); + if (topology) { + pVMWARE->xineramaState = + VMWAREParseTopologyString(pScrn, topology, +@@ -1345,7 +1348,7 @@ VMWAREScreenInit(SCREEN_INIT_ARGS_DECL) + + pVMWARE->xineramaStatic = pVMWARE->xineramaState != NULL; + +- free(topology); ++ free((void *)topology); + } + } + +diff --git a/src/vmwaremodes.c b/src/vmwaremodes.c +index 41a9b4f..1d296ac 100644 +--- a/src/vmwaremodes.c ++++ b/src/vmwaremodes.c +@@ -40,6 +40,7 @@ + #endif + #include "vm_basic_types.h" + #include "vmware.h" ++#include "common_compat.h" + + #ifndef M_T_DRIVER + # define M_T_DRIVER 0x40 /* Supplied by the driver (EDID, etc) */ +@@ -83,7 +84,7 @@ vmwareAddDefaultMode(ScrnInfoPtr pScrn, uint32 dwidth, uint32 dheight) + DisplayModeRec dynamic = + { MODEPREFIX, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MODESUFFIX }; + unsigned dispModeCount = 0; +- char **dispModeList; ++ CONST_ABI_18_0 char **dispModeList; + char *dynModeName; + char name[80]; + VMWAREPtr pVMWARE = VMWAREPTR(pScrn); +diff --git a/vmwgfx/vmwgfx_driver.c b/vmwgfx/vmwgfx_driver.c +index b9ee1db..967dec9 100644 +--- a/vmwgfx/vmwgfx_driver.c ++++ b/vmwgfx/vmwgfx_driver.c +@@ -68,6 +68,7 @@ + #include "../src/vmware_bootstrap.h" + #include "../src/vmware_common.h" + #include "vmwgfx_hosted.h" ++#include "common_compat.h" + + /* + * We can't incude svga_types.h due to conflicting types for Bool. +@@ -410,23 +411,23 @@ vmwgfx_pre_init_mode(ScrnInfoPtr pScrn, int flags) + } + + if (xf86IsOptionSet(ms->Options, OPTION_GUI_LAYOUT)) { +- char *topology = ++ CONST_ABI_18_0 char *topology = + xf86GetOptValString(ms->Options, OPTION_GUI_LAYOUT); + + ret = FALSE; + if (topology) { + ret = vmwgfx_set_topology(pScrn, topology, "gui"); +- free(topology); ++ free((void *)topology); + } + + } else if (xf86IsOptionSet(ms->Options, OPTION_STATIC_XINERAMA)) { +- char *topology = ++ CONST_ABI_18_0 char *topology = + xf86GetOptValString(ms->Options, OPTION_STATIC_XINERAMA); + + ret = FALSE; + if (topology) { + ret = vmwgfx_set_topology(pScrn, topology, "static Xinerama"); +- free(topology); ++ free((void *)topology); + } + } + +-- +2.12.2 + diff --git a/xenocara-video-vmware-debug/0003-Fix-a-number-of-compilation-warnings.patch b/xenocara-video-vmware-debug/0003-Fix-a-number-of-compilation-warnings.patch new file mode 100644 index 0000000..6d59ec2 --- /dev/null +++ b/xenocara-video-vmware-debug/0003-Fix-a-number-of-compilation-warnings.patch @@ -0,0 +1,263 @@ +From dc85a6da15768f7a9622677e79c618bfb35ce513 Mon Sep 17 00:00:00 2001 +From: Thomas Hellstrom +Date: Wed, 14 Feb 2018 10:14:20 +0100 +Subject: [PATCH] Fix a number of compilation warnings + +There are a number of compilation warnings caused by const char pointers +being either explicitly or implicitly cast to char pointers. There +are a number of ABI differences that have hindered this so far, but +make a new attempt using the common_compat.h defines. + +Signed-off-by: Thomas Hellstrom +Reviewed-by: Brian Paul +Reviewed-by: Sinclair Yeh +Reviewed-by: Deepak Rawat +--- + src/common_compat.h | 13 +++++++++++++ + src/vmware_bootstrap.c | 16 +++++++++++----- + src/vmwarevideo.c | 14 ++++++++++---- + vmwgfx/vmwgfx_overlay.c | 8 ++++++-- + vmwgfx/vmwgfx_tex_video.c | 22 +++++++++++++++------- + 5 files changed, 55 insertions(+), 18 deletions(-) + +diff --git a/src/common_compat.h b/src/common_compat.h +index d7b4867..5c46a73 100644 +--- a/src/common_compat.h ++++ b/src/common_compat.h +@@ -7,5 +7,18 @@ + #define CONST_ABI_18_0 + #endif + ++#if (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 16) ++#define CONST_ABI_16_0 const ++#else ++#define CONST_ABI_16_0 ++#endif ++ ++#if ((GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 16) && \ ++ (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 19)) ++#define CONST_ABI_16_TO_19 const ++#else ++#define CONST_ABI_16_TO_19 ++#endif ++ + #endif + +diff --git a/src/vmware_bootstrap.c b/src/vmware_bootstrap.c +index d7ab070..4f59e73 100644 +--- a/src/vmware_bootstrap.c ++++ b/src/vmware_bootstrap.c +@@ -82,6 +82,10 @@ + + #define VMWARE_NAME "vmware" + #define VMWARE_DRIVER_NAME "vmware" ++ ++static char vmware_name[] = VMWARE_NAME; ++static char vmware_driver_name[] = VMWARE_DRIVER_NAME; ++ + #define VMWARE_DRIVER_VERSION \ + (PACKAGE_VERSION_MAJOR * 65536 + PACKAGE_VERSION_MINOR * 256 + PACKAGE_VERSION_PATCHLEVEL) + #define VMWARE_DRIVER_VERSION_STRING \ +@@ -255,8 +259,10 @@ VMwarePreinitStub(ScrnInfoPtr pScrn, int flags) + if (pciInfo == NULL) + return FALSE; + +- pScrn->chipset = (char*)xf86TokenToString(VMWAREChipsets, +- DEVICE_ID(pciInfo)); ++ pScrn->chipset = xstrdup(xf86TokenToString(VMWAREChipsets, ++ DEVICE_ID(pciInfo))); ++ if (pScrn->chipset == NULL) ++ return FALSE; + + return (*pScrn->PreInit)(pScrn, flags); + }; +@@ -274,8 +280,8 @@ VMwarePciProbe (DriverPtr drv, + NULL, NULL, NULL, NULL, NULL); + if (scrn != NULL) { + scrn->driverVersion = VMWARE_DRIVER_VERSION; +- scrn->driverName = VMWARE_DRIVER_NAME; +- scrn->name = VMWARE_NAME; ++ scrn->driverName = vmware_driver_name; ++ scrn->name = vmware_name; + scrn->Probe = NULL; + } + +@@ -509,7 +515,7 @@ VMWareDriverFunc(ScrnInfoPtr pScrn, + + _X_EXPORT DriverRec vmware = { + VMWARE_DRIVER_VERSION, +- VMWARE_DRIVER_NAME, ++ vmware_driver_name, + VMWAREIdentify, + #if XSERVER_LIBPCIACCESS + NULL, +diff --git a/src/vmwarevideo.c b/src/vmwarevideo.c +index 634af69..3ba1dcd 100644 +--- a/src/vmwarevideo.c ++++ b/src/vmwarevideo.c +@@ -44,6 +44,7 @@ + #include "fourcc.h" + #include "svga_escape.h" + #include "svga_overlay.h" ++#include "common_compat.h" + + #include + +@@ -52,6 +53,8 @@ + #include + #endif + ++static CONST_ABI_16_0 char xv_adapt_name[] = "VMWare Overlay Video Engine"; ++static CONST_ABI_16_0 char xv_image_name[] = "XV_IMAGE"; + + #define HAVE_FILLKEYHELPERDRAWABLE \ + ((GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 2) || \ +@@ -90,7 +93,7 @@ static XF86VideoEncodingRec vmwareVideoEncodings[] = + { + { + 0, +- "XV_IMAGE", ++ xv_image_name, + VMWARE_VID_MAX_WIDTH, VMWARE_VID_MAX_HEIGHT, + {1, 1} + } +@@ -111,6 +114,9 @@ static XF86ImageRec vmwareVideoImages[] = + XVIMAGE_UYVY + }; + ++static CONST_ABI_16_TO_19 char xv_colorkey_name[] = "XV_COLORKEY"; ++static CONST_ABI_16_TO_19 char xv_autopaint_name[] = "XV_AUTOPAINT_COLORKEY"; ++ + #define VMWARE_VID_NUM_ATTRIBUTES 2 + static XF86AttributeRec vmwareVideoAttributes[] = + { +@@ -118,13 +124,13 @@ static XF86AttributeRec vmwareVideoAttributes[] = + XvGettable | XvSettable, + 0x000000, + 0xffffff, +- "XV_COLORKEY" ++ xv_colorkey_name, + }, + { + XvGettable | XvSettable, + 0, + 1, +- "XV_AUTOPAINT_COLORKEY" ++ xv_autopaint_name, + } + }; + +@@ -575,7 +581,7 @@ vmwareVideoSetup(ScrnInfoPtr pScrn) + + adaptor->type = XvInputMask | XvImageMask | XvWindowMask; + adaptor->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; +- adaptor->name = "VMware Video Engine"; ++ adaptor->name = xv_adapt_name; + adaptor->nEncodings = VMWARE_VID_NUM_ENCODINGS; + adaptor->pEncodings = vmwareVideoEncodings; + adaptor->nFormats = VMWARE_VID_NUM_FORMATS; +diff --git a/vmwgfx/vmwgfx_overlay.c b/vmwgfx/vmwgfx_overlay.c +index 49bad73..c35cebd 100644 +--- a/vmwgfx/vmwgfx_overlay.c ++++ b/vmwgfx/vmwgfx_overlay.c +@@ -61,6 +61,7 @@ typedef uint8_t uint8; + #include "../src/svga_reg.h" + #include "../src/svga_escape.h" + #include "../src/svga_overlay.h" ++#include "../src/common_compat.h" + + #include + +@@ -114,6 +115,9 @@ static XF86ImageRec vmwareVideoImages[] = + XVIMAGE_UYVY + }; + ++static CONST_ABI_16_TO_19 char xv_colorkey_name[] = "XV_COLORKEY"; ++static CONST_ABI_16_TO_19 char xv_autopaint_name[] = "XV_AUTOPAINT_COLORKEY"; ++ + #define VMWARE_VID_NUM_ATTRIBUTES 2 + static XF86AttributeRec vmwareVideoAttributes[] = + { +@@ -121,13 +125,13 @@ static XF86AttributeRec vmwareVideoAttributes[] = + XvGettable | XvSettable, + 0x000000, + 0xffffff, +- "XV_COLORKEY" ++ xv_colorkey_name, + }, + { + XvGettable | XvSettable, + 0, + 1, +- "XV_AUTOPAINT_COLORKEY" ++ xv_autopaint_name, + } + }; + +diff --git a/vmwgfx/vmwgfx_tex_video.c b/vmwgfx/vmwgfx_tex_video.c +index f2cc813..a767d89 100644 +--- a/vmwgfx/vmwgfx_tex_video.c ++++ b/vmwgfx/vmwgfx_tex_video.c +@@ -32,6 +32,7 @@ + #include "vmwgfx_driver.h" + #include "vmwgfx_drmi.h" + #include "vmwgfx_saa.h" ++#include "../src/common_compat.h" + + #include + #include +@@ -40,7 +41,9 @@ + #include + #include + +-/*XXX get these from pipe's texture limits */ ++static CONST_ABI_16_0 char xv_adapt_name[] = "XA G3D Textured Video"; ++ ++/*Xxx get these from pipe's texture limits */ + #define IMAGE_MAX_WIDTH 2048 + #define IMAGE_MAX_HEIGHT 2048 + +@@ -71,13 +74,18 @@ static const float bt_709[] = { + }; + + static Atom xvBrightness, xvContrast, xvSaturation, xvHue; ++static CONST_ABI_16_TO_19 char xv_brightness_name[] = "XV_BRIGHTNESS"; ++static CONST_ABI_16_TO_19 char xv_contrast_name[] = "XV_CONTRAST"; ++static CONST_ABI_16_TO_19 char xv_saturation_name[] = "XV_SATURATION"; ++static CONST_ABI_16_TO_19 char xv_hue_name[] = "XV_HUE"; ++static CONST_ABI_16_TO_19 char xv_image_name[] = "XV_IMAGE"; + + #define NUM_TEXTURED_ATTRIBUTES 4 + static const XF86AttributeRec TexturedAttributes[NUM_TEXTURED_ATTRIBUTES] = { +- {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"}, +- {XvSettable | XvGettable, -1000, 1000, "XV_CONTRAST"}, +- {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"}, +- {XvSettable | XvGettable, -1000, 1000, "XV_HUE"} ++ {XvSettable | XvGettable, -1000, 1000, xv_brightness_name}, ++ {XvSettable | XvGettable, -1000, 1000, xv_contrast_name}, ++ {XvSettable | XvGettable, -1000, 1000, xv_saturation_name}, ++ {XvSettable | XvGettable, -1000, 1000, xv_hue_name} + }; + + #define NUM_FORMATS 3 +@@ -88,7 +96,7 @@ static XF86VideoFormatRec Formats[NUM_FORMATS] = { + static XF86VideoEncodingRec DummyEncoding[1] = { + { + 0, +- "XV_IMAGE", ++ xv_image_name, + IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT, + {1, 1} + } +@@ -943,7 +951,7 @@ xorg_setup_textured_adapter(ScreenPtr pScreen) + + adapt->type = XvWindowMask | XvInputMask | XvImageMask; + adapt->flags = 0; +- adapt->name = "XA G3D Textured Video"; ++ adapt->name = xv_adapt_name; + adapt->nEncodings = 1; + adapt->pEncodings = DummyEncoding; + adapt->nFormats = NUM_FORMATS; +-- +2.12.2 + diff --git a/xenocara-video-vmware-debug/0004-saa-Build-compatibility-with-xserver-1.20.patch b/xenocara-video-vmware-debug/0004-saa-Build-compatibility-with-xserver-1.20.patch new file mode 100644 index 0000000..58fa2a9 --- /dev/null +++ b/xenocara-video-vmware-debug/0004-saa-Build-compatibility-with-xserver-1.20.patch @@ -0,0 +1,31 @@ +From 0f90e2ed52082c1e2af3b47424a6c7c5d4c0c81e Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 14 Mar 2018 21:49:14 +0100 +Subject: [PATCH] saa: Build compatibility with xserver 1.20 + +fbGetRotatedPixmap went away with 24bpp support, just treat it as NULL +and we'll do the right thing. + +Signed-off-by: Adam Jackson +Signed-off-by: Thomas Hellstrom +--- + src/common_compat.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/common_compat.h b/src/common_compat.h +index 3cd3139..4efe350 100644 +--- a/src/common_compat.h ++++ b/src/common_compat.h +@@ -33,5 +33,9 @@ xf86SaveModeContents(DisplayModePtr intern, const DisplayModeRec *mode) + } + #endif + ++#ifndef fbGetRotatedPixmap ++#define fbGetRotatedPixmap(_pGC) NULL ++#endif ++ + #endif + +-- +2.12.2 + diff --git a/xenocara-video-vmware-debug/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch b/xenocara-video-vmware-debug/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch new file mode 100644 index 0000000..93cde42 --- /dev/null +++ b/xenocara-video-vmware-debug/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch @@ -0,0 +1,91 @@ +From 86189966c3dee0e0c10dd4926cebbe478129c6f0 Mon Sep 17 00:00:00 2001 +From: Thomas Hellstrom +Date: Wed, 9 Jan 2019 08:27:16 +0100 +Subject: [PATCH] vmwgfx: Limit the number of cliprects in a drm dirtyfb + command v3 + +The drm dirtyfb command would error if the number of cliprects were larger +than DRM_MODE_FB_DIRTY_MAX_CLIPS. If that number is exceeded, split the +command up. + +Signed-off-by: Thomas Hellstrom +Reviewed-by: Brian Paul #v2 +Reviewed-by: Deepak Rawat #v1 +--- + src/common_compat.h | 4 ++++ + vmwgfx/vmwgfx_driver.c | 39 +++++++++++++++++++++++++-------------- + 2 files changed, 29 insertions(+), 14 deletions(-) + +diff --git a/src/common_compat.h b/src/common_compat.h +index 4efe350..fa6adc2 100644 +--- a/src/common_compat.h ++++ b/src/common_compat.h +@@ -37,5 +37,9 @@ xf86SaveModeContents(DisplayModePtr intern, const DisplayModeRec *mode) + #define fbGetRotatedPixmap(_pGC) NULL + #endif + ++#ifndef DRM_MODE_FB_DIRTY_MAX_CLIPS ++#define DRM_MODE_FB_DIRTY_MAX_CLIPS 256 ++#endif ++ + #endif + +diff --git a/vmwgfx/vmwgfx_driver.c b/vmwgfx/vmwgfx_driver.c +index e5f0caf..8297d53 100644 +--- a/vmwgfx/vmwgfx_driver.c ++++ b/vmwgfx/vmwgfx_driver.c +@@ -650,26 +650,37 @@ drv_pre_init(ScrnInfoPtr pScrn, int flags) + static Bool + vmwgfx_scanout_update(int drm_fd, int fb_id, RegionPtr dirty) + { +- unsigned num_cliprects = REGION_NUM_RECTS(dirty); +- drmModeClip *clip = alloca(num_cliprects * sizeof(drmModeClip)); ++ unsigned int num_cliprects = REGION_NUM_RECTS(dirty); ++ unsigned int alloc_cliprects = min(num_cliprects, ++ DRM_MODE_FB_DIRTY_MAX_CLIPS); ++ drmModeClip *clip = alloca(alloc_cliprects * sizeof(drmModeClip)); + BoxPtr rect = REGION_RECTS(dirty); + int i, ret; + +- if (!num_cliprects) +- return TRUE; ++ while (num_cliprects > 0) { ++ unsigned int cur_cliprects = min(num_cliprects, ++ DRM_MODE_FB_DIRTY_MAX_CLIPS); ++ ++ memset(clip, 0, alloc_cliprects * sizeof(drmModeClip)); + +- for (i = 0; i < num_cliprects; i++, rect++) { +- clip[i].x1 = rect->x1; +- clip[i].y1 = rect->y1; +- clip[i].x2 = rect->x2; +- clip[i].y2 = rect->y2; ++ for (i = 0; i < cur_cliprects; i++, rect++) { ++ clip[i].x1 = rect->x1; ++ clip[i].y1 = rect->y1; ++ clip[i].x2 = rect->x2; ++ clip[i].y2 = rect->y2; ++ } ++ ++ ret = drmModeDirtyFB(drm_fd, fb_id, clip, cur_cliprects); ++ if (ret) { ++ LogMessage(X_ERROR, "%s: failed to send dirty (%i, %s)\n", ++ __func__, ret, strerror(-ret)); ++ return FALSE; ++ } ++ ++ num_cliprects -= cur_cliprects; + } + +- ret = drmModeDirtyFB(drm_fd, fb_id, clip, num_cliprects); +- if (ret) +- LogMessage(X_ERROR, "%s: failed to send dirty (%i, %s)\n", +- __func__, ret, strerror(-ret)); +- return (ret == 0); ++ return TRUE; + } + + static Bool +-- +2.12.2 + diff --git a/xenocara-video-vmware-debug/PKGBUILD b/xenocara-video-vmware-debug/PKGBUILD new file mode 100644 index 0000000..a7a8285 --- /dev/null +++ b/xenocara-video-vmware-debug/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-vmware package + +pkgname=xenocara-video-vmware-debug +_openbsdver=6.9 +pkgver=13.1.0 +pkgrel=3 +pkgdesc="Xenocara VMware video driver" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('mesa') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-vmware') +conflicts=('xf86-video-vmware' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-vmware' 'xorg-video-vmware-debug') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +options=('!emptydirs' '!strip') # !strip is required for debug packages +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-vmware-$pkgver.tar.lz{,.sig} + gcc8.patch + 0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch + 0002-vmware-Fix-build-warnings.patch + 0003-Fix-a-number-of-compilation-warnings.patch + 0004-saa-Build-compatibility-with-xserver-1.20.patch + 0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch) +sha512sums=('678e33dd28603d113a47085f01d08083978ee6fc63a9a5c20df5dd391698f93fc09665a36930b061c89f73d7e077c79488868caa9dd3e6d880ef5e56ea48e26a' + 'SKIP' + '8de12ceb62039ffb6528b6e6a8a5072846e85921141bde03b21496badc5e193af3b609ad2f50a1d0942b558a07c212ad82144641d5a9e9ff21929b5e20b5ae25' + 'bdb055f17379bf736dfe81ef049b65ef44297487a508178b34ace9fdb6b81eb69dafa47207780a193ea9b92d1577fc331c8d587367a09aee5f9657b1d093ceb3' + '0cb791f517952c8a3bf8ce5c3c9e742b06967342e9282d2ac052c11c91adabea24af21ee71c7f9007cb8d5ecd8d168384527b657cffd0dfcd031d7ff543c0eea' + 'd13c39250fc83abcd18b348d0a7a26effa86002bddef589665a0691123013142817731236fcae1b3a9b57a7d6ef3eb3942f1c3e6c85fd16dc0c772030fcc7c07' + '4077de6e43852e30f3e120e0b279d252f8388747a9acdadc7f5346bfd49fd088bc9337c05bec37bd40ab1790bd7d5a435ba908f0ac844ca5aee430312edef7c3' + '63d878af65f7edafee686d422e4463f839674d30284e2b8b6fc60668829f4653c78d33d981f64d93c80526d2de63c02d38109eeb930eeab58cdc16dcbaedafcb') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-vmware" + patch -p1 -i "$srcdir/gcc8.patch" + patch -p1 -i "$srcdir/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch" + patch -p1 -i "$srcdir/0002-vmware-Fix-build-warnings.patch" + patch -p1 -i "$srcdir/0003-Fix-a-number-of-compilation-warnings.patch" + patch -p1 -i "$srcdir/0004-saa-Build-compatibility-with-xserver-1.20.patch" + patch -p1 -i "$srcdir/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-vmware" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr --enable-vmwarectrl-client + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-vmware" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-vmware-debug/gcc8.patch b/xenocara-video-vmware-debug/gcc8.patch new file mode 100644 index 0000000..81b7c31 --- /dev/null +++ b/xenocara-video-vmware-debug/gcc8.patch @@ -0,0 +1,154 @@ +diff --git a/src/vmware.c b/src/vmware.c +index 12f12ede..aec9b9ee 100644 +--- a/src/vmware.c ++++ b/src/vmware.c +@@ -322,7 +322,7 @@ VMWAREPreInit(ScrnInfoPtr pScrn, int flags) + SVGA_LEGACY_BASE_PORT + SVGA_VALUE_PORT*sizeof(uint32); + } else { + /* Note: This setting of valueReg causes unaligned I/O */ +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pVMWARE->portIOBase = pVMWARE->PciInfo->regions[0].base_addr; + #else + pVMWARE->portIOBase = pVMWARE->PciInfo->ioBase[0]; +@@ -364,7 +364,7 @@ VMWAREPreInit(ScrnInfoPtr pScrn, int flags) + } + pVMWARE->suspensionSavedRegId = id; + +-#if !XSERVER_LIBPCIACCESS ++#ifndef XSERVER_LIBPCIACCESS + pVMWARE->PciTag = pciTag(pVMWARE->PciInfo->bus, pVMWARE->PciInfo->device, + pVMWARE->PciInfo->func); + #endif +@@ -708,13 +708,13 @@ static Bool + VMWAREMapMem(ScrnInfoPtr pScrn) + { + VMWAREPtr pVMWARE = VMWAREPTR(pScrn); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + int err; + struct pci_device *const device = pVMWARE->PciInfo; + void *fbBase; + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(device, + pVMWARE->memPhysBase, + pVMWARE->videoRam, +@@ -751,7 +751,7 @@ VMWAREUnmapMem(ScrnInfoPtr pScrn) + + VmwareLog(("Unmapped: %p/%u\n", pVMWARE->FbBase, pVMWARE->videoRam)); + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(pVMWARE->PciInfo, pVMWARE->FbBase, pVMWARE->videoRam); + #else + xf86UnMapVidMem(pScrn->scrnIndex, pVMWARE->FbBase, pVMWARE->videoRam); +@@ -1026,7 +1026,7 @@ static void + VMWAREInitFIFO(ScrnInfoPtr pScrn) + { + VMWAREPtr pVMWARE = VMWAREPTR(pScrn); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *const device = pVMWARE->PciInfo; + int err; + void *mmioVirtBase; +@@ -1039,7 +1039,7 @@ VMWAREInitFIFO(ScrnInfoPtr pScrn) + + pVMWARE->mmioPhysBase = vmwareReadReg(pVMWARE, SVGA_REG_MEM_START); + pVMWARE->mmioSize = vmwareReadReg(pVMWARE, SVGA_REG_MEM_SIZE) & ~3; +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(device, pVMWARE->mmioPhysBase, + pVMWARE->mmioSize, + PCI_DEV_MAP_FLAG_WRITABLE, +@@ -1080,7 +1080,7 @@ VMWAREStopFIFO(ScrnInfoPtr pScrn) + TRACEPOINT + + vmwareWriteReg(pVMWARE, SVGA_REG_CONFIG_DONE, 0); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(pVMWARE->PciInfo, pVMWARE->mmioVirtBase, pVMWARE->mmioSize); + #else + xf86UnMapVidMem(pScrn->scrnIndex, pVMWARE->mmioVirtBase, pVMWARE->mmioSize); +diff --git a/src/vmware.h b/src/vmware.h +index 028dff35..f08a2830 100644 +--- a/src/vmware.h ++++ b/src/vmware.h +@@ -83,7 +83,7 @@ typedef xXineramaScreenInfo VMWAREXineramaRec, *VMWAREXineramaPtr; + + typedef struct { + EntityInfoPtr pEnt; +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *PciInfo; + #else + pciVideoPtr PciInfo; +@@ -207,7 +207,7 @@ typedef struct { + /* Undefine this to kill all acceleration */ + #define ACCELERATE_OPS + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + #define VENDOR_ID(p) (p)->vendor_id + #define DEVICE_ID(p) (p)->device_id + #define SUBVENDOR_ID(p) (p)->subvendor_id +diff --git a/src/vmware_bootstrap.c b/src/vmware_bootstrap.c +index a74ef519..7f06cb34 100644 +--- a/src/vmware_bootstrap.c ++++ b/src/vmware_bootstrap.c +@@ -120,7 +120,7 @@ static resRange vmwareLegacyRes[] = { + #define vmwareLegacyRes NULL + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + #define VENDOR_ID(p) (p)->vendor_id + #define DEVICE_ID(p) (p)->device_id + #define SUBVENDOR_ID(p) (p)->subvendor_id +@@ -134,7 +134,7 @@ static resRange vmwareLegacyRes[] = { + #define CHIP_REVISION(p) (p)->chipRev + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + + #define VMWARE_DEVICE_MATCH(d, i) \ + {PCI_VENDOR_ID_VMWARE, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } +@@ -213,7 +213,7 @@ vmwgfx_hosted_detect(void); + static Bool + VMwarePreinitStub(ScrnInfoPtr pScrn, int flags) + { +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *pciInfo; + #else + pciVideoPtr pciInfo; +@@ -261,7 +261,7 @@ VMwarePreinitStub(ScrnInfoPtr pScrn, int flags) + return (*pScrn->PreInit)(pScrn, flags); + }; + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + static Bool + VMwarePciProbe (DriverPtr drv, + int entity_num, +@@ -511,7 +511,7 @@ _X_EXPORT DriverRec vmware = { + VMWARE_DRIVER_VERSION, + VMWARE_DRIVER_NAME, + VMWAREIdentify, +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + NULL, + #else + VMWAREProbe, +@@ -523,7 +523,7 @@ _X_EXPORT DriverRec vmware = { + VMWareDriverFunc, + #endif + #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 4 +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + VMwareDeviceMatch, + VMwarePciProbe, + #else diff --git a/xenocara-video-vmware/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch b/xenocara-video-vmware/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch new file mode 100644 index 0000000..5413125 --- /dev/null +++ b/xenocara-video-vmware/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch @@ -0,0 +1,32 @@ +From d64d01c7a599dc3c79125701f076a3e459cefdc2 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Thu, 29 Sep 2016 19:37:22 +0200 +Subject: [PATCH] Adapt Block/WakeupHandler signature for ABI 23 + +Signed-off-by: Hans de Goede +Acked-by: Thomas Hellstrom +--- + src/compat-api.h | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/compat-api.h b/src/compat-api.h +index 205ac59..02876c5 100644 +--- a/src/compat-api.h ++++ b/src/compat-api.h +@@ -75,8 +75,13 @@ + + #define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv + ++#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(23, 0) ++#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout ++#define BLOCKHANDLER_ARGS arg, pTimeout ++#else + #define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask + #define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask ++#endif + + #define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen + #define CLOSE_SCREEN_ARGS pScreen +-- +2.12.2 + diff --git a/xenocara-video-vmware/0002-vmware-Fix-build-warnings.patch b/xenocara-video-vmware/0002-vmware-Fix-build-warnings.patch new file mode 100644 index 0000000..0c672b2 --- /dev/null +++ b/xenocara-video-vmware/0002-vmware-Fix-build-warnings.patch @@ -0,0 +1,212 @@ +From d8c2f8501307a9c0c65601e897e7d919e42ba0b3 Mon Sep 17 00:00:00 2001 +From: Deepak Singh Rawat +Date: Mon, 7 Aug 2017 15:57:56 -0700 +Subject: [PATCH] vmware: Fix build warnings + +Due to following commit in xserver there were +build warnings, as variables now declared const. + +d89b42bda46d36fc0879611cc3b3566957ce36d0 +e1e01d2e33c632e395d7e396f73fba8ae606b15a + +Added a compat header file. + +Signed-off-by: Deepak Rawat +Reviewed-by: Brian Paul +Reviewed-by: Thomas Hellstrom :q +--- + saa/Makefile.am | 2 +- + saa/saa_priv.h | 7 ++++--- + src/common_compat.h | 11 +++++++++++ + src/vmware.c | 15 +++++++++------ + src/vmwaremodes.c | 3 ++- + vmwgfx/vmwgfx_driver.c | 9 +++++---- + 6 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 src/common_compat.h + +diff --git a/saa/Makefile.am b/saa/Makefile.am +index 48c9734..b812815 100644 +--- a/saa/Makefile.am ++++ b/saa/Makefile.am +@@ -2,7 +2,7 @@ + if BUILD_VMWGFX + noinst_LTLIBRARIES = libsaa.la + +-libsaa_la_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) ++libsaa_la_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) -I$(top_srcdir)/src + libsaa_la_LDFLAGS = -static + libsaa_la_SOURCES = \ + saa.c \ +diff --git a/saa/saa_priv.h b/saa/saa_priv.h +index 5d81453..9065fbe 100644 +--- a/saa/saa_priv.h ++++ b/saa/saa_priv.h +@@ -59,14 +59,15 @@ + #include "glyphstr.h" + #endif + #include "damage.h" ++#include "common_compat.h" + + #define SAA_INVALID_ADDRESS \ + ((void *) ((unsigned long) 0xFFFFFFFF - 1024*1024)) + + struct saa_gc_priv { + /* GC values from the layer below. */ +- GCOps *saved_ops; +- GCFuncs *saved_funcs; ++ CONST_ABI_18_0 GCOps *saved_ops; ++ CONST_ABI_18_0 GCFuncs *saved_funcs; + }; + + struct saa_screen_priv { +@@ -127,7 +128,7 @@ do { \ + } + + #define saa_swap(priv, real, mem) {\ +- void *tmp = (priv)->saved_##mem; \ ++ CONST_ABI_18_0 void *tmp = (priv)->saved_##mem; \ + (priv)->saved_##mem = (real)->mem; \ + (real)->mem = tmp; \ + } +diff --git a/src/common_compat.h b/src/common_compat.h +new file mode 100644 +index 0000000..d7b4867 +--- /dev/null ++++ b/src/common_compat.h +@@ -0,0 +1,11 @@ ++#ifndef _COMMON_COMPAT_H_ ++#define _COMMOM_COMPAT_H_ ++ ++#if (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 18) ++#define CONST_ABI_18_0 const ++#else ++#define CONST_ABI_18_0 ++#endif ++ ++#endif ++ +diff --git a/src/vmware.c b/src/vmware.c +index 12f12ed..1af20d8 100644 +--- a/src/vmware.c ++++ b/src/vmware.c +@@ -36,6 +36,7 @@ char rcsId_vmware[] = + #include "svga_modes.h" + #include "vmware_bootstrap.h" + #include "vmware_common.h" ++#include "common_compat.h" + + #ifndef HAVE_XORG_SERVER_1_5_0 + #include +@@ -1222,12 +1223,14 @@ VMWAREAddDisplayMode(ScrnInfoPtr pScrn, + int height) + { + DisplayModeRec *mode; ++ char * modeName; + + mode = malloc(sizeof(DisplayModeRec)); + memset(mode, 0, sizeof *mode); + +- mode->name = malloc(strlen(name) + 1); +- strcpy(mode->name, name); ++ modeName = malloc(strlen(name) + 1); ++ strcpy(modeName, name); ++ mode->name = modeName; + mode->status = MODE_OK; + mode->type = M_T_DEFAULT; + mode->HDisplay = width; +@@ -1324,7 +1327,7 @@ VMWAREScreenInit(SCREEN_INIT_ARGS_DECL) + + + if (useXinerama && xf86IsOptionSet(options, OPTION_GUI_LAYOUT)) { +- char *topology = xf86GetOptValString(options, OPTION_GUI_LAYOUT); ++ CONST_ABI_18_0 char *topology = xf86GetOptValString(options, OPTION_GUI_LAYOUT); + if (topology) { + pVMWARE->xineramaState = + VMWAREParseTopologyString(pScrn, topology, +@@ -1332,11 +1335,11 @@ VMWAREScreenInit(SCREEN_INIT_ARGS_DECL) + + pVMWARE->xineramaStatic = pVMWARE->xineramaState != NULL; + +- free(topology); ++ free((void *)topology); + } + } else if (useXinerama && + xf86IsOptionSet(options, OPTION_STATIC_XINERAMA)) { +- char *topology = xf86GetOptValString(options, OPTION_STATIC_XINERAMA); ++ CONST_ABI_18_0 char *topology = xf86GetOptValString(options, OPTION_STATIC_XINERAMA); + if (topology) { + pVMWARE->xineramaState = + VMWAREParseTopologyString(pScrn, topology, +@@ -1345,7 +1348,7 @@ VMWAREScreenInit(SCREEN_INIT_ARGS_DECL) + + pVMWARE->xineramaStatic = pVMWARE->xineramaState != NULL; + +- free(topology); ++ free((void *)topology); + } + } + +diff --git a/src/vmwaremodes.c b/src/vmwaremodes.c +index 41a9b4f..1d296ac 100644 +--- a/src/vmwaremodes.c ++++ b/src/vmwaremodes.c +@@ -40,6 +40,7 @@ + #endif + #include "vm_basic_types.h" + #include "vmware.h" ++#include "common_compat.h" + + #ifndef M_T_DRIVER + # define M_T_DRIVER 0x40 /* Supplied by the driver (EDID, etc) */ +@@ -83,7 +84,7 @@ vmwareAddDefaultMode(ScrnInfoPtr pScrn, uint32 dwidth, uint32 dheight) + DisplayModeRec dynamic = + { MODEPREFIX, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MODESUFFIX }; + unsigned dispModeCount = 0; +- char **dispModeList; ++ CONST_ABI_18_0 char **dispModeList; + char *dynModeName; + char name[80]; + VMWAREPtr pVMWARE = VMWAREPTR(pScrn); +diff --git a/vmwgfx/vmwgfx_driver.c b/vmwgfx/vmwgfx_driver.c +index b9ee1db..967dec9 100644 +--- a/vmwgfx/vmwgfx_driver.c ++++ b/vmwgfx/vmwgfx_driver.c +@@ -68,6 +68,7 @@ + #include "../src/vmware_bootstrap.h" + #include "../src/vmware_common.h" + #include "vmwgfx_hosted.h" ++#include "common_compat.h" + + /* + * We can't incude svga_types.h due to conflicting types for Bool. +@@ -410,23 +411,23 @@ vmwgfx_pre_init_mode(ScrnInfoPtr pScrn, int flags) + } + + if (xf86IsOptionSet(ms->Options, OPTION_GUI_LAYOUT)) { +- char *topology = ++ CONST_ABI_18_0 char *topology = + xf86GetOptValString(ms->Options, OPTION_GUI_LAYOUT); + + ret = FALSE; + if (topology) { + ret = vmwgfx_set_topology(pScrn, topology, "gui"); +- free(topology); ++ free((void *)topology); + } + + } else if (xf86IsOptionSet(ms->Options, OPTION_STATIC_XINERAMA)) { +- char *topology = ++ CONST_ABI_18_0 char *topology = + xf86GetOptValString(ms->Options, OPTION_STATIC_XINERAMA); + + ret = FALSE; + if (topology) { + ret = vmwgfx_set_topology(pScrn, topology, "static Xinerama"); +- free(topology); ++ free((void *)topology); + } + } + +-- +2.12.2 + diff --git a/xenocara-video-vmware/0003-Fix-a-number-of-compilation-warnings.patch b/xenocara-video-vmware/0003-Fix-a-number-of-compilation-warnings.patch new file mode 100644 index 0000000..6d59ec2 --- /dev/null +++ b/xenocara-video-vmware/0003-Fix-a-number-of-compilation-warnings.patch @@ -0,0 +1,263 @@ +From dc85a6da15768f7a9622677e79c618bfb35ce513 Mon Sep 17 00:00:00 2001 +From: Thomas Hellstrom +Date: Wed, 14 Feb 2018 10:14:20 +0100 +Subject: [PATCH] Fix a number of compilation warnings + +There are a number of compilation warnings caused by const char pointers +being either explicitly or implicitly cast to char pointers. There +are a number of ABI differences that have hindered this so far, but +make a new attempt using the common_compat.h defines. + +Signed-off-by: Thomas Hellstrom +Reviewed-by: Brian Paul +Reviewed-by: Sinclair Yeh +Reviewed-by: Deepak Rawat +--- + src/common_compat.h | 13 +++++++++++++ + src/vmware_bootstrap.c | 16 +++++++++++----- + src/vmwarevideo.c | 14 ++++++++++---- + vmwgfx/vmwgfx_overlay.c | 8 ++++++-- + vmwgfx/vmwgfx_tex_video.c | 22 +++++++++++++++------- + 5 files changed, 55 insertions(+), 18 deletions(-) + +diff --git a/src/common_compat.h b/src/common_compat.h +index d7b4867..5c46a73 100644 +--- a/src/common_compat.h ++++ b/src/common_compat.h +@@ -7,5 +7,18 @@ + #define CONST_ABI_18_0 + #endif + ++#if (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 16) ++#define CONST_ABI_16_0 const ++#else ++#define CONST_ABI_16_0 ++#endif ++ ++#if ((GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 16) && \ ++ (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 19)) ++#define CONST_ABI_16_TO_19 const ++#else ++#define CONST_ABI_16_TO_19 ++#endif ++ + #endif + +diff --git a/src/vmware_bootstrap.c b/src/vmware_bootstrap.c +index d7ab070..4f59e73 100644 +--- a/src/vmware_bootstrap.c ++++ b/src/vmware_bootstrap.c +@@ -82,6 +82,10 @@ + + #define VMWARE_NAME "vmware" + #define VMWARE_DRIVER_NAME "vmware" ++ ++static char vmware_name[] = VMWARE_NAME; ++static char vmware_driver_name[] = VMWARE_DRIVER_NAME; ++ + #define VMWARE_DRIVER_VERSION \ + (PACKAGE_VERSION_MAJOR * 65536 + PACKAGE_VERSION_MINOR * 256 + PACKAGE_VERSION_PATCHLEVEL) + #define VMWARE_DRIVER_VERSION_STRING \ +@@ -255,8 +259,10 @@ VMwarePreinitStub(ScrnInfoPtr pScrn, int flags) + if (pciInfo == NULL) + return FALSE; + +- pScrn->chipset = (char*)xf86TokenToString(VMWAREChipsets, +- DEVICE_ID(pciInfo)); ++ pScrn->chipset = xstrdup(xf86TokenToString(VMWAREChipsets, ++ DEVICE_ID(pciInfo))); ++ if (pScrn->chipset == NULL) ++ return FALSE; + + return (*pScrn->PreInit)(pScrn, flags); + }; +@@ -274,8 +280,8 @@ VMwarePciProbe (DriverPtr drv, + NULL, NULL, NULL, NULL, NULL); + if (scrn != NULL) { + scrn->driverVersion = VMWARE_DRIVER_VERSION; +- scrn->driverName = VMWARE_DRIVER_NAME; +- scrn->name = VMWARE_NAME; ++ scrn->driverName = vmware_driver_name; ++ scrn->name = vmware_name; + scrn->Probe = NULL; + } + +@@ -509,7 +515,7 @@ VMWareDriverFunc(ScrnInfoPtr pScrn, + + _X_EXPORT DriverRec vmware = { + VMWARE_DRIVER_VERSION, +- VMWARE_DRIVER_NAME, ++ vmware_driver_name, + VMWAREIdentify, + #if XSERVER_LIBPCIACCESS + NULL, +diff --git a/src/vmwarevideo.c b/src/vmwarevideo.c +index 634af69..3ba1dcd 100644 +--- a/src/vmwarevideo.c ++++ b/src/vmwarevideo.c +@@ -44,6 +44,7 @@ + #include "fourcc.h" + #include "svga_escape.h" + #include "svga_overlay.h" ++#include "common_compat.h" + + #include + +@@ -52,6 +53,8 @@ + #include + #endif + ++static CONST_ABI_16_0 char xv_adapt_name[] = "VMWare Overlay Video Engine"; ++static CONST_ABI_16_0 char xv_image_name[] = "XV_IMAGE"; + + #define HAVE_FILLKEYHELPERDRAWABLE \ + ((GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 2) || \ +@@ -90,7 +93,7 @@ static XF86VideoEncodingRec vmwareVideoEncodings[] = + { + { + 0, +- "XV_IMAGE", ++ xv_image_name, + VMWARE_VID_MAX_WIDTH, VMWARE_VID_MAX_HEIGHT, + {1, 1} + } +@@ -111,6 +114,9 @@ static XF86ImageRec vmwareVideoImages[] = + XVIMAGE_UYVY + }; + ++static CONST_ABI_16_TO_19 char xv_colorkey_name[] = "XV_COLORKEY"; ++static CONST_ABI_16_TO_19 char xv_autopaint_name[] = "XV_AUTOPAINT_COLORKEY"; ++ + #define VMWARE_VID_NUM_ATTRIBUTES 2 + static XF86AttributeRec vmwareVideoAttributes[] = + { +@@ -118,13 +124,13 @@ static XF86AttributeRec vmwareVideoAttributes[] = + XvGettable | XvSettable, + 0x000000, + 0xffffff, +- "XV_COLORKEY" ++ xv_colorkey_name, + }, + { + XvGettable | XvSettable, + 0, + 1, +- "XV_AUTOPAINT_COLORKEY" ++ xv_autopaint_name, + } + }; + +@@ -575,7 +581,7 @@ vmwareVideoSetup(ScrnInfoPtr pScrn) + + adaptor->type = XvInputMask | XvImageMask | XvWindowMask; + adaptor->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT; +- adaptor->name = "VMware Video Engine"; ++ adaptor->name = xv_adapt_name; + adaptor->nEncodings = VMWARE_VID_NUM_ENCODINGS; + adaptor->pEncodings = vmwareVideoEncodings; + adaptor->nFormats = VMWARE_VID_NUM_FORMATS; +diff --git a/vmwgfx/vmwgfx_overlay.c b/vmwgfx/vmwgfx_overlay.c +index 49bad73..c35cebd 100644 +--- a/vmwgfx/vmwgfx_overlay.c ++++ b/vmwgfx/vmwgfx_overlay.c +@@ -61,6 +61,7 @@ typedef uint8_t uint8; + #include "../src/svga_reg.h" + #include "../src/svga_escape.h" + #include "../src/svga_overlay.h" ++#include "../src/common_compat.h" + + #include + +@@ -114,6 +115,9 @@ static XF86ImageRec vmwareVideoImages[] = + XVIMAGE_UYVY + }; + ++static CONST_ABI_16_TO_19 char xv_colorkey_name[] = "XV_COLORKEY"; ++static CONST_ABI_16_TO_19 char xv_autopaint_name[] = "XV_AUTOPAINT_COLORKEY"; ++ + #define VMWARE_VID_NUM_ATTRIBUTES 2 + static XF86AttributeRec vmwareVideoAttributes[] = + { +@@ -121,13 +125,13 @@ static XF86AttributeRec vmwareVideoAttributes[] = + XvGettable | XvSettable, + 0x000000, + 0xffffff, +- "XV_COLORKEY" ++ xv_colorkey_name, + }, + { + XvGettable | XvSettable, + 0, + 1, +- "XV_AUTOPAINT_COLORKEY" ++ xv_autopaint_name, + } + }; + +diff --git a/vmwgfx/vmwgfx_tex_video.c b/vmwgfx/vmwgfx_tex_video.c +index f2cc813..a767d89 100644 +--- a/vmwgfx/vmwgfx_tex_video.c ++++ b/vmwgfx/vmwgfx_tex_video.c +@@ -32,6 +32,7 @@ + #include "vmwgfx_driver.h" + #include "vmwgfx_drmi.h" + #include "vmwgfx_saa.h" ++#include "../src/common_compat.h" + + #include + #include +@@ -40,7 +41,9 @@ + #include + #include + +-/*XXX get these from pipe's texture limits */ ++static CONST_ABI_16_0 char xv_adapt_name[] = "XA G3D Textured Video"; ++ ++/*Xxx get these from pipe's texture limits */ + #define IMAGE_MAX_WIDTH 2048 + #define IMAGE_MAX_HEIGHT 2048 + +@@ -71,13 +74,18 @@ static const float bt_709[] = { + }; + + static Atom xvBrightness, xvContrast, xvSaturation, xvHue; ++static CONST_ABI_16_TO_19 char xv_brightness_name[] = "XV_BRIGHTNESS"; ++static CONST_ABI_16_TO_19 char xv_contrast_name[] = "XV_CONTRAST"; ++static CONST_ABI_16_TO_19 char xv_saturation_name[] = "XV_SATURATION"; ++static CONST_ABI_16_TO_19 char xv_hue_name[] = "XV_HUE"; ++static CONST_ABI_16_TO_19 char xv_image_name[] = "XV_IMAGE"; + + #define NUM_TEXTURED_ATTRIBUTES 4 + static const XF86AttributeRec TexturedAttributes[NUM_TEXTURED_ATTRIBUTES] = { +- {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"}, +- {XvSettable | XvGettable, -1000, 1000, "XV_CONTRAST"}, +- {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"}, +- {XvSettable | XvGettable, -1000, 1000, "XV_HUE"} ++ {XvSettable | XvGettable, -1000, 1000, xv_brightness_name}, ++ {XvSettable | XvGettable, -1000, 1000, xv_contrast_name}, ++ {XvSettable | XvGettable, -1000, 1000, xv_saturation_name}, ++ {XvSettable | XvGettable, -1000, 1000, xv_hue_name} + }; + + #define NUM_FORMATS 3 +@@ -88,7 +96,7 @@ static XF86VideoFormatRec Formats[NUM_FORMATS] = { + static XF86VideoEncodingRec DummyEncoding[1] = { + { + 0, +- "XV_IMAGE", ++ xv_image_name, + IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT, + {1, 1} + } +@@ -943,7 +951,7 @@ xorg_setup_textured_adapter(ScreenPtr pScreen) + + adapt->type = XvWindowMask | XvInputMask | XvImageMask; + adapt->flags = 0; +- adapt->name = "XA G3D Textured Video"; ++ adapt->name = xv_adapt_name; + adapt->nEncodings = 1; + adapt->pEncodings = DummyEncoding; + adapt->nFormats = NUM_FORMATS; +-- +2.12.2 + diff --git a/xenocara-video-vmware/0004-saa-Build-compatibility-with-xserver-1.20.patch b/xenocara-video-vmware/0004-saa-Build-compatibility-with-xserver-1.20.patch new file mode 100644 index 0000000..58fa2a9 --- /dev/null +++ b/xenocara-video-vmware/0004-saa-Build-compatibility-with-xserver-1.20.patch @@ -0,0 +1,31 @@ +From 0f90e2ed52082c1e2af3b47424a6c7c5d4c0c81e Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 14 Mar 2018 21:49:14 +0100 +Subject: [PATCH] saa: Build compatibility with xserver 1.20 + +fbGetRotatedPixmap went away with 24bpp support, just treat it as NULL +and we'll do the right thing. + +Signed-off-by: Adam Jackson +Signed-off-by: Thomas Hellstrom +--- + src/common_compat.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/common_compat.h b/src/common_compat.h +index 3cd3139..4efe350 100644 +--- a/src/common_compat.h ++++ b/src/common_compat.h +@@ -33,5 +33,9 @@ xf86SaveModeContents(DisplayModePtr intern, const DisplayModeRec *mode) + } + #endif + ++#ifndef fbGetRotatedPixmap ++#define fbGetRotatedPixmap(_pGC) NULL ++#endif ++ + #endif + +-- +2.12.2 + diff --git a/xenocara-video-vmware/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch b/xenocara-video-vmware/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch new file mode 100644 index 0000000..93cde42 --- /dev/null +++ b/xenocara-video-vmware/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch @@ -0,0 +1,91 @@ +From 86189966c3dee0e0c10dd4926cebbe478129c6f0 Mon Sep 17 00:00:00 2001 +From: Thomas Hellstrom +Date: Wed, 9 Jan 2019 08:27:16 +0100 +Subject: [PATCH] vmwgfx: Limit the number of cliprects in a drm dirtyfb + command v3 + +The drm dirtyfb command would error if the number of cliprects were larger +than DRM_MODE_FB_DIRTY_MAX_CLIPS. If that number is exceeded, split the +command up. + +Signed-off-by: Thomas Hellstrom +Reviewed-by: Brian Paul #v2 +Reviewed-by: Deepak Rawat #v1 +--- + src/common_compat.h | 4 ++++ + vmwgfx/vmwgfx_driver.c | 39 +++++++++++++++++++++++++-------------- + 2 files changed, 29 insertions(+), 14 deletions(-) + +diff --git a/src/common_compat.h b/src/common_compat.h +index 4efe350..fa6adc2 100644 +--- a/src/common_compat.h ++++ b/src/common_compat.h +@@ -37,5 +37,9 @@ xf86SaveModeContents(DisplayModePtr intern, const DisplayModeRec *mode) + #define fbGetRotatedPixmap(_pGC) NULL + #endif + ++#ifndef DRM_MODE_FB_DIRTY_MAX_CLIPS ++#define DRM_MODE_FB_DIRTY_MAX_CLIPS 256 ++#endif ++ + #endif + +diff --git a/vmwgfx/vmwgfx_driver.c b/vmwgfx/vmwgfx_driver.c +index e5f0caf..8297d53 100644 +--- a/vmwgfx/vmwgfx_driver.c ++++ b/vmwgfx/vmwgfx_driver.c +@@ -650,26 +650,37 @@ drv_pre_init(ScrnInfoPtr pScrn, int flags) + static Bool + vmwgfx_scanout_update(int drm_fd, int fb_id, RegionPtr dirty) + { +- unsigned num_cliprects = REGION_NUM_RECTS(dirty); +- drmModeClip *clip = alloca(num_cliprects * sizeof(drmModeClip)); ++ unsigned int num_cliprects = REGION_NUM_RECTS(dirty); ++ unsigned int alloc_cliprects = min(num_cliprects, ++ DRM_MODE_FB_DIRTY_MAX_CLIPS); ++ drmModeClip *clip = alloca(alloc_cliprects * sizeof(drmModeClip)); + BoxPtr rect = REGION_RECTS(dirty); + int i, ret; + +- if (!num_cliprects) +- return TRUE; ++ while (num_cliprects > 0) { ++ unsigned int cur_cliprects = min(num_cliprects, ++ DRM_MODE_FB_DIRTY_MAX_CLIPS); ++ ++ memset(clip, 0, alloc_cliprects * sizeof(drmModeClip)); + +- for (i = 0; i < num_cliprects; i++, rect++) { +- clip[i].x1 = rect->x1; +- clip[i].y1 = rect->y1; +- clip[i].x2 = rect->x2; +- clip[i].y2 = rect->y2; ++ for (i = 0; i < cur_cliprects; i++, rect++) { ++ clip[i].x1 = rect->x1; ++ clip[i].y1 = rect->y1; ++ clip[i].x2 = rect->x2; ++ clip[i].y2 = rect->y2; ++ } ++ ++ ret = drmModeDirtyFB(drm_fd, fb_id, clip, cur_cliprects); ++ if (ret) { ++ LogMessage(X_ERROR, "%s: failed to send dirty (%i, %s)\n", ++ __func__, ret, strerror(-ret)); ++ return FALSE; ++ } ++ ++ num_cliprects -= cur_cliprects; + } + +- ret = drmModeDirtyFB(drm_fd, fb_id, clip, num_cliprects); +- if (ret) +- LogMessage(X_ERROR, "%s: failed to send dirty (%i, %s)\n", +- __func__, ret, strerror(-ret)); +- return (ret == 0); ++ return TRUE; + } + + static Bool +-- +2.12.2 + diff --git a/xenocara-video-vmware/PKGBUILD b/xenocara-video-vmware/PKGBUILD new file mode 100644 index 0000000..33cdeff --- /dev/null +++ b/xenocara-video-vmware/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-vmware package + +pkgname=xenocara-video-vmware +_openbsdver=6.9 +pkgver=13.1.0 +pkgrel=2 +pkgdesc="Xenocara VMware video driver" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('mesa') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-vmware') +conflicts=('xf86-video-vmware' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-vmware' 'xorg-video-vmware') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +options=('!emptydirs') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/driver/xf86-video-vmware-$pkgver.tar.lz{,.sig} + gcc8.patch + 0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch + 0002-vmware-Fix-build-warnings.patch + 0003-Fix-a-number-of-compilation-warnings.patch + 0004-saa-Build-compatibility-with-xserver-1.20.patch + 0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch) +sha512sums=('678e33dd28603d113a47085f01d08083978ee6fc63a9a5c20df5dd391698f93fc09665a36930b061c89f73d7e077c79488868caa9dd3e6d880ef5e56ea48e26a' + 'SKIP' + '8de12ceb62039ffb6528b6e6a8a5072846e85921141bde03b21496badc5e193af3b609ad2f50a1d0942b558a07c212ad82144641d5a9e9ff21929b5e20b5ae25' + 'bdb055f17379bf736dfe81ef049b65ef44297487a508178b34ace9fdb6b81eb69dafa47207780a193ea9b92d1577fc331c8d587367a09aee5f9657b1d093ceb3' + '0cb791f517952c8a3bf8ce5c3c9e742b06967342e9282d2ac052c11c91adabea24af21ee71c7f9007cb8d5ecd8d168384527b657cffd0dfcd031d7ff543c0eea' + 'd13c39250fc83abcd18b348d0a7a26effa86002bddef589665a0691123013142817731236fcae1b3a9b57a7d6ef3eb3942f1c3e6c85fd16dc0c772030fcc7c07' + '4077de6e43852e30f3e120e0b279d252f8388747a9acdadc7f5346bfd49fd088bc9337c05bec37bd40ab1790bd7d5a435ba908f0ac844ca5aee430312edef7c3' + '63d878af65f7edafee686d422e4463f839674d30284e2b8b6fc60668829f4653c78d33d981f64d93c80526d2de63c02d38109eeb930eeab58cdc16dcbaedafcb') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/driver/xf86-video-vmware" + patch -p1 -i "$srcdir/gcc8.patch" + patch -p1 -i "$srcdir/0001-Adapt-Block-WakeupHandler-signature-for-ABI-23.patch" + patch -p1 -i "$srcdir/0002-vmware-Fix-build-warnings.patch" + patch -p1 -i "$srcdir/0003-Fix-a-number-of-compilation-warnings.patch" + patch -p1 -i "$srcdir/0004-saa-Build-compatibility-with-xserver-1.20.patch" + patch -p1 -i "$srcdir/0005-vmwgfx-Limit-the-number-of-cliprects-in-a-drm-dirtyf.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/driver/xf86-video-vmware" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr --enable-vmwarectrl-client + make +} + +package() { + cd "xenocara-$_openbsdver/driver/xf86-video-vmware" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-video-vmware/gcc8.patch b/xenocara-video-vmware/gcc8.patch new file mode 100644 index 0000000..81b7c31 --- /dev/null +++ b/xenocara-video-vmware/gcc8.patch @@ -0,0 +1,154 @@ +diff --git a/src/vmware.c b/src/vmware.c +index 12f12ede..aec9b9ee 100644 +--- a/src/vmware.c ++++ b/src/vmware.c +@@ -322,7 +322,7 @@ VMWAREPreInit(ScrnInfoPtr pScrn, int flags) + SVGA_LEGACY_BASE_PORT + SVGA_VALUE_PORT*sizeof(uint32); + } else { + /* Note: This setting of valueReg causes unaligned I/O */ +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pVMWARE->portIOBase = pVMWARE->PciInfo->regions[0].base_addr; + #else + pVMWARE->portIOBase = pVMWARE->PciInfo->ioBase[0]; +@@ -364,7 +364,7 @@ VMWAREPreInit(ScrnInfoPtr pScrn, int flags) + } + pVMWARE->suspensionSavedRegId = id; + +-#if !XSERVER_LIBPCIACCESS ++#ifndef XSERVER_LIBPCIACCESS + pVMWARE->PciTag = pciTag(pVMWARE->PciInfo->bus, pVMWARE->PciInfo->device, + pVMWARE->PciInfo->func); + #endif +@@ -708,13 +708,13 @@ static Bool + VMWAREMapMem(ScrnInfoPtr pScrn) + { + VMWAREPtr pVMWARE = VMWAREPTR(pScrn); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + int err; + struct pci_device *const device = pVMWARE->PciInfo; + void *fbBase; + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(device, + pVMWARE->memPhysBase, + pVMWARE->videoRam, +@@ -751,7 +751,7 @@ VMWAREUnmapMem(ScrnInfoPtr pScrn) + + VmwareLog(("Unmapped: %p/%u\n", pVMWARE->FbBase, pVMWARE->videoRam)); + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(pVMWARE->PciInfo, pVMWARE->FbBase, pVMWARE->videoRam); + #else + xf86UnMapVidMem(pScrn->scrnIndex, pVMWARE->FbBase, pVMWARE->videoRam); +@@ -1026,7 +1026,7 @@ static void + VMWAREInitFIFO(ScrnInfoPtr pScrn) + { + VMWAREPtr pVMWARE = VMWAREPTR(pScrn); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *const device = pVMWARE->PciInfo; + int err; + void *mmioVirtBase; +@@ -1039,7 +1039,7 @@ VMWAREInitFIFO(ScrnInfoPtr pScrn) + + pVMWARE->mmioPhysBase = vmwareReadReg(pVMWARE, SVGA_REG_MEM_START); + pVMWARE->mmioSize = vmwareReadReg(pVMWARE, SVGA_REG_MEM_SIZE) & ~3; +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(device, pVMWARE->mmioPhysBase, + pVMWARE->mmioSize, + PCI_DEV_MAP_FLAG_WRITABLE, +@@ -1080,7 +1080,7 @@ VMWAREStopFIFO(ScrnInfoPtr pScrn) + TRACEPOINT + + vmwareWriteReg(pVMWARE, SVGA_REG_CONFIG_DONE, 0); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(pVMWARE->PciInfo, pVMWARE->mmioVirtBase, pVMWARE->mmioSize); + #else + xf86UnMapVidMem(pScrn->scrnIndex, pVMWARE->mmioVirtBase, pVMWARE->mmioSize); +diff --git a/src/vmware.h b/src/vmware.h +index 028dff35..f08a2830 100644 +--- a/src/vmware.h ++++ b/src/vmware.h +@@ -83,7 +83,7 @@ typedef xXineramaScreenInfo VMWAREXineramaRec, *VMWAREXineramaPtr; + + typedef struct { + EntityInfoPtr pEnt; +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *PciInfo; + #else + pciVideoPtr PciInfo; +@@ -207,7 +207,7 @@ typedef struct { + /* Undefine this to kill all acceleration */ + #define ACCELERATE_OPS + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + #define VENDOR_ID(p) (p)->vendor_id + #define DEVICE_ID(p) (p)->device_id + #define SUBVENDOR_ID(p) (p)->subvendor_id +diff --git a/src/vmware_bootstrap.c b/src/vmware_bootstrap.c +index a74ef519..7f06cb34 100644 +--- a/src/vmware_bootstrap.c ++++ b/src/vmware_bootstrap.c +@@ -120,7 +120,7 @@ static resRange vmwareLegacyRes[] = { + #define vmwareLegacyRes NULL + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + #define VENDOR_ID(p) (p)->vendor_id + #define DEVICE_ID(p) (p)->device_id + #define SUBVENDOR_ID(p) (p)->subvendor_id +@@ -134,7 +134,7 @@ static resRange vmwareLegacyRes[] = { + #define CHIP_REVISION(p) (p)->chipRev + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + + #define VMWARE_DEVICE_MATCH(d, i) \ + {PCI_VENDOR_ID_VMWARE, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } +@@ -213,7 +213,7 @@ vmwgfx_hosted_detect(void); + static Bool + VMwarePreinitStub(ScrnInfoPtr pScrn, int flags) + { +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *pciInfo; + #else + pciVideoPtr pciInfo; +@@ -261,7 +261,7 @@ VMwarePreinitStub(ScrnInfoPtr pScrn, int flags) + return (*pScrn->PreInit)(pScrn, flags); + }; + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + static Bool + VMwarePciProbe (DriverPtr drv, + int entity_num, +@@ -511,7 +511,7 @@ _X_EXPORT DriverRec vmware = { + VMWARE_DRIVER_VERSION, + VMWARE_DRIVER_NAME, + VMWAREIdentify, +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + NULL, + #else + VMWAREProbe, +@@ -523,7 +523,7 @@ _X_EXPORT DriverRec vmware = { + VMWareDriverFunc, + #endif + #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 4 +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + VMwareDeviceMatch, + VMwarePciProbe, + #else diff --git a/xenocara-x11perf/PKGBUILD b/xenocara-x11perf/PKGBUILD new file mode 100644 index 0000000..dba2fd0 --- /dev/null +++ b/xenocara-x11perf/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-x11perf package + +pkgname=xenocara-x11perf +_openbsdver=6.9 +pkgver=1.6.1 +pkgrel=2 +pkgdesc="Simple X server performance benchmarker, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('libx11' 'libxmu' 'libxrender' 'libxft' 'libxext') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-x11perf') +conflicts=('xorg-x11perf') +replaces=('xorg-x11perf') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/x11perf-$pkgver.tar.lz{,.sig}) +sha512sums=('b4edd9d70bc1112325fd2821a9755360c3c65abc5cebfdd65abb6bc918aa37c2806a6af73cd08d108dded4680543c5f45cda53e645c39768f320e4f7506fe02e' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/x11perf" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/x11perf" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/x11perf" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xauth/PKGBUILD b/xenocara-xauth/PKGBUILD new file mode 100644 index 0000000..fbdbc1b --- /dev/null +++ b/xenocara-xauth/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xauth package + +pkgname=xenocara-xauth +_openbsdver=6.9 +pkgver=1.1 +pkgrel=2 +pkgdesc="Xenocara authorization settings program" +arch=(i686 x86_64) +license=('X11') +url="https://www.xenocara.org" +depends=('libxmu' 'libxtrans') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xauth') +conflicts=('xorg-xauth') +replaces=('xorg-xauth') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xauth-$pkgver.tar.lz{,.sig}) +sha512sums=('30a39cb4125a44bce840e11c320a76dfb6714075484e579637513f3c503fc243e1e3503b96584ba5d8b7c7c83dead164154232c633cecb9a3a15c4306335b1b4' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xauth" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xauth" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xauth" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xbacklight/PKGBUILD b/xenocara-xbacklight/PKGBUILD new file mode 100644 index 0000000..9e2d7b8 --- /dev/null +++ b/xenocara-xbacklight/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xbacklight package + +pkgname=xenocara-xbacklight +_openbsdver=6.9 +pkgver=1.2.3 +pkgrel=2 +pkgdesc="RandR-based backlight control application, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('xcb-util') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xbacklight') +conflicts=('xorg-xbacklight') +replaces=('xorg-xbacklight') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xbacklight-$pkgver.tar.lz{,.sig}) +sha512sums=('b97bef98ad196f5c0e7f984eb39c6424f2e967319a8d500a8a2bc62af45b8fe69c713166ce538feb19922a650f7957a5331613b56c46fef946537c87caba961a' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xbacklight" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xbacklight" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xbacklight" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xbiff/PKGBUILD b/xenocara-xbiff/PKGBUILD new file mode 100644 index 0000000..4e210a7 --- /dev/null +++ b/xenocara-xbiff/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xbiff package + +pkgname=xenocara-xbiff +_openbsdver=6.9 +pkgver=1.0.4 +pkgrel=2 +pkgdesc="Watch mailboxes for new message delivery, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw' 'libxext') +makedepends=('xenocara-util-macros' 'xenocara-xbitmaps') +provides=('xorg-xbiff') +conflicts=('xorg-xbiff') +replaces=('xorg-xbiff') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xbiff-$pkgver.tar.lz{,.sig}) +sha512sums=('72f006be41293ddbd302379f9a935b11e0d8eaf82a164fdffc7392312904f13a2962ab2df2acbc52002e8804b5c92612f3ba7955cf87839c06976bf3f1355f3c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xbiff" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xbiff" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xbiff" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xbitmaps/PKGBUILD b/xenocara-xbitmaps/PKGBUILD new file mode 100644 index 0000000..c351e84 --- /dev/null +++ b/xenocara-xbitmaps/PKGBUILD @@ -0,0 +1,38 @@ +# Maintainer: Jesus E. + +# Based on xbitmaps + +pkgname=xenocara-xbitmaps # xenocara-bitmaps +_openbsdver=6.9 +pkgver=1.1.2 +pkgrel=3 +pkgdesc="Xenocara Bitmap files" +arch=('any') +url="https://www.xenocara.org" +license=('X11') +makedepends=('xenocara-util-macros') +provides=('bitmaps' 'xbitmaps' 'xenocara-bitmaps') +conflicts=('xbitmaps') +replaces=('xbitmaps') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/data/bitmaps-$pkgver.tar.lz{,.sig}) +sha512sums=('ba4de8ab1debd699bfaacad231a3d8ef67886d0b94d754128abc4ff39fec6f16a9da8b3bed5012c45dbe06191bc84d3308563f83a3c886ba5c41e61b83ad59db' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/data/bitmaps" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/data/bitmaps" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/data/bitmaps" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xcalc/PKGBUILD b/xenocara-xcalc/PKGBUILD new file mode 100644 index 0000000..1c73df0 --- /dev/null +++ b/xenocara-xcalc/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +# Based on xorg-xcalc package + +pkgname=xenocara-xcalc +_openbsdver=6.9 +pkgver=1.1.0 +pkgrel=3 +pkgdesc="Scientific calculator for X, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw') +optdepends=('xenocara-font-bitstream-75dpi: for some symbols' + 'xenocara-font-bitstream-100dpi: for some symbols') +makedepends=('xenocara-util-macros') +provides=('xorg-xcalc') +conflicts=('xorg-xcalc') +replaces=('xorg-xcalc') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xcalc-$pkgver.tar.lz{,.sig}) +sha512sums=('e78b4555fd393c633368e8f0bfb5ce076899b3dbdc1057e2f26dae88358e971ee923a10da72557b617b6fea1776e82a38e6cb25d2156b20c3ad7bc73c4384cd5' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xcalc" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xcalc" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xcalc" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xclipboard/PKGBUILD b/xenocara-xclipboard/PKGBUILD new file mode 100644 index 0000000..1726a8e --- /dev/null +++ b/xenocara-xclipboard/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xclipboard package + +pkgname=xenocara-xclipboard +_openbsdver=6.9 +pkgver=1.1.3 +pkgrel=3 +pkgdesc="X clipboard manager, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw' 'libxmu' 'libxt' 'libx11') +makedepends=('xenocara-util-macros') +provides=('xorg-xclipboard') +conflicts=('xorg-xclipboard') +replaces=('xorg-xclipboard') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xclipboard-$pkgver.tar.lz{,.sig}) +sha512sums=('36025c8d8d938f09888687ae27080b47e6a830f0887373eb973f5fb10249521ef3dd69059360116233aedca6f198c5079d67e26f2bb0ec3ab31e5031f6fcc406' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xclipboard" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xclipboard" + ./configure --prefix=/usr + make +} + +package(){ + cd "xenocara-$_openbsdver/app/xclipboard" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xclock/PKGBUILD b/xenocara-xclock/PKGBUILD new file mode 100644 index 0000000..42aa59f --- /dev/null +++ b/xenocara-xclock/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xclock package + +pkgname=xenocara-xclock +_openbsdver=6.9 +pkgver=1.0.9 +pkgrel=2 +pkgdesc="X clock, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxmu' 'libxaw' 'libxrender' 'libxft' 'libxkbfile') +makedepends=('xenocara-util-macros' 'gettext-tiny') +provides=('xorg-xclock') +conflicts=('xorg-xclock') +replaces=('xorg-xclock') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xclock-$pkgver.tar.lz{,.sig}) +sha512sums=('f22811d78929fbd7ad73e60594bc6a6676869b931c2303ed10a5fe467ed326ba33686f44b8ee7343f4e000b4231237a715c45df032a4be66a6adc0b6de6d5c5c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xclock" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xclock" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xclock" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xcmsdb/PKGBUILD b/xenocara-xcmsdb/PKGBUILD new file mode 100644 index 0000000..0d4334f --- /dev/null +++ b/xenocara-xcmsdb/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xcmsdb package + +pkgname=xenocara-xcmsdb +_openbsdver=6.9 +pkgver=1.0.5 +pkgrel=3 +pkgdesc="Device Color Characterization utility for X Color Management System, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xcmsdb') +conflicts=('xorg-xcmsdb') +replaces=('xorg-xcmsdb') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xcmsdb-$pkgver.tar.lz{,.sig}) +sha512sums=('c68f4e2d82cb822e1bb4e8df451ae2ebf80b160d22c93c4276042b48a692df6311ca24f2bb76eba9aba1b8c3228d74c10e5b0c5b26f3171cef80e157abbde4d5' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xcmsdb" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xcmsdb" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xcmsdb" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xcompmgr/PKGBUILD b/xenocara-xcompmgr/PKGBUILD new file mode 100644 index 0000000..2e3c705 --- /dev/null +++ b/xenocara-xcompmgr/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xcompmgr package + +pkgname=xenocara-xcompmgr +_openbsdver=6.9 +pkgver=1.1.8 +pkgrel=2 +pkgdesc="Composite Window-effects manager for Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libxcomposite' 'libxdamage' 'libxrender' 'libxext') +makedepends=('xenocara-util-macros') +provides=('xcompmgr') +conflicts=('xcompmgr') +replaces=('xcompmgr') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xcompmgr-$pkgver.tar.lz{,.sig}) +sha512sums=('6f91dbe8a2b832baed180bd72096cac53753bdedb2052d7a8fc87cb0eb87adab65a7fe3fab29c4c69747a849e17b09de2ae38ed8910f8ca0dd6e73f405ec59fe' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xcompmgr" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xcompmgr" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xcompmgr" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xconsole/PKGBUILD b/xenocara-xconsole/PKGBUILD new file mode 100644 index 0000000..eaf53b2 --- /dev/null +++ b/xenocara-xconsole/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xconsole package + +pkgname=xenocara-xconsole +_openbsdver=6.9 +pkgver=1.0.7 +pkgrel=3 +pkgdesc="Monitor system console messages with X, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw' 'libxmu' 'libxt' 'libx11') +makedepends=('xenocara-util-macros') +provides=('xorg-xconsole') +conflicts=('xorg-xconsole') +replaces=('xorg-xconsole') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xconsole-$pkgver.tar.lz{,.sig}) +sha512sums=('d7142de44da9729e48b88249cfa2be499e0950df315777bd6a61ea5929722fb7283ac22ea517d4b4efca8948c479682b4611a6699c4f181dbc1fd4136ce5b54f' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xconsole" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xconsole" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xconsole" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xdpyinfo/PKGBUILD b/xenocara-xdpyinfo/PKGBUILD new file mode 100644 index 0000000..386d87d --- /dev/null +++ b/xenocara-xdpyinfo/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xdpyinfo package + +pkgname=xenocara-xdpyinfo +_openbsdver=6.9 +_pkgname=xdpyinfo +pkgver=1.3.2 +pkgrel=4 +pkgdesc="Display information utility for X, provided by Xenocara" +arch=('i686' 'x86_64') +url='https://www.xenocara.org' +license=('Expat') +depends=('libx11' 'libxext' 'libxtst' 'libxxf86vm' 'libxrender' 'libxcomposite' 'libxinerama') +makedepends=('xenocara-util-macros' 'xorgproto') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xdpyinfo') +conflicts=('xorg-xdpyinfo') +replaces=('xorg-xdpyinfo') +source=("https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/$_pkgname-$pkgver.tar.lz"{,.sig}) +sha512sums=('731e74627b70731f2b0a204c16bc18dda54f4ad8f8bffbc6e175ca7d8ca12ff2f9487c2d5269171bab317a546d66d955278ebcfb93451a9a627e6ac0f0e2f289' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/$_pkgname" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/$_pkgname" + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "xenocara-$_openbsdver/app/$_pkgname" + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/xenocara-xdriinfo/PKGBUILD b/xenocara-xdriinfo/PKGBUILD new file mode 100644 index 0000000..680104e --- /dev/null +++ b/xenocara-xdriinfo/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xdriinfo package + +pkgname=xenocara-xdriinfo +_openbsdver=6.9 +pkgver=1.0.6 +pkgrel=3 +pkgdesc="Query configuration information of DRI drivers, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libx11' 'libgl') +makedepends=('xenocara-util-macros' 'xenocara-proto') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xdriinfo') +conflicts=('xorg-xdriinfo') +replaces=('xorg-xdriinfo') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xdriinfo-$pkgver.tar.lz{,.sig}) +sha512sums=('e1b15943784f0b469cd8a704ba1fdf4d68e2dd489a064b63a72c8c44374d0e4396e83bf6e24bd905f3425b3962497d006fa4f26c9fb4288e7a92bdcbc1a2f7b8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xdriinfo" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xdriinfo" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xdriinfo" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xedit/PKGBUILD b/xenocara-xedit/PKGBUILD new file mode 100644 index 0000000..6fe07a8 --- /dev/null +++ b/xenocara-xedit/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xedit package + +pkgname=xenocara-xedit +_openbsdver=6.9 +pkgver=1.2.2 +pkgrel=3 +pkgdesc="Simple text editor for X, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw' 'libxmu' 'libxt' 'libx11') +makedepends=('xenocara-util-macros') +provides=('xorg-xedit') +conflicts=('xorg-xedit') +replaces=('xorg-xedit') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xedit-$pkgver.tar.lz{,.sig}) +sha512sums=('9b08e28ce822df5fb86f7868ef2eba7fbb9541e7b77360e19afff503b20a52bd4c126ddd0c6d930f68d4a9ccc965bfe8e37e6153f4a00bff9838aea21cc02388' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xedit" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xedit" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xedit" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xev/PKGBUILD b/xenocara-xev/PKGBUILD new file mode 100644 index 0000000..62998fc --- /dev/null +++ b/xenocara-xev/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xev package + +pkgname=xenocara-xev +_openbsdver=6.9 +pkgver=1.2.4 +pkgrel=1 +pkgdesc="Print contents of X events, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxrandr') +makedepends=('xenocara-util-macros' 'xenocara-proto') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xev') +conflicts=('xorg-xev') +replaces=('xorg-xev') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xev-$pkgver.tar.lz{,.sig}) +sha512sums=('318229c59977a7cda2deb2d94d0fcda20cfeb5d644bae955c401492c694f99381fedf7b370c5a460564191021760500e003e4a85a70dac87a2eda1b982c0bfe5' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xev" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xev" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xev" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xeyes/PKGBUILD b/xenocara-xeyes/PKGBUILD new file mode 100644 index 0000000..39a4b35 --- /dev/null +++ b/xenocara-xeyes/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xeyes package + +pkgname=xenocara-xeyes +_openbsdver=6.9 +pkgver=1.1.2 +pkgrel=3 +pkgdesc="Follow the mouse/SHAPE extension X demo, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxt' 'libxext' 'libxmu' 'libxrender') +makedepends=('xenocara-util-macros') +provides=('xorg-xeyes') +conflicts=('xorg-xeyes') +replaces=('xorg-xeyes') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xeyes-$pkgver.tar.lz{,.sig}) +sha512sums=('7ba8046d3f6c8f0cea69317a5ad7589deffeb03301e739d58882ec7c82f8fb21366f855d2d3669a51035987a890c2d254ec0f78ebbc1eedd52309e4bc0a65cba' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xeyes" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xeyes" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xeyes" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xfd/PKGBUILD b/xenocara-xfd/PKGBUILD new file mode 100644 index 0000000..68de550 --- /dev/null +++ b/xenocara-xfd/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xfd package + +pkgname=xenocara-xfd +_openbsdver=6.9 +pkgver=1.1.3 +pkgrel=2 +pkgdesc="Displays all the characters in a font using either the X11 core protocol or libXft2, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw' 'fontconfig' 'libxft' 'libxrender' 'libxmu' 'libxkbfile') +makedepends=('xenocara-util-macros' 'gettext-tiny') +provides=('xorg-xfd') +conflicts=('xorg-xfd') +replaces=('xorg-xfd') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xfd-$pkgver.tar.lz{,.sig}) +sha512sums=('b3dedb84a98189ef6e9e6a0ca88239866ce0a652e727b74e91238a6f9c293f3174cf0669aefb4e3a15e53d488682ddf0cf865d19b6b977f959f7454447b4628c' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xfd" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xfd" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xfd" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xfontsel/PKGBUILD b/xenocara-xfontsel/PKGBUILD new file mode 100644 index 0000000..256f628 --- /dev/null +++ b/xenocara-xfontsel/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xfontsel package + +pkgname=xenocara-xfontsel +_openbsdver=6.9 +pkgver=1.0.6 +pkgrel=3 +pkgdesc="Point and click selection of X11 font names, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +makedepends=('xenocara-util-macros') +depends=('libxaw' 'libxmu' 'libxt' 'libx11') +provides=('xorg-xfontsel') +conflicts=('xorg-xfontsel') +replaces=('xorg-xfontsel') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xfontsel-$pkgver.tar.lz{,.sig}) +sha512sums=('72487bb1bd3d94fdb3ac3a9db5e750dc14d0188d02e9210ba801e61570e129c7234af8c9c4b6fa28f10d05fba22dddad753b08583a94d3efed120ee46092ebe8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xfontsel" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xfontsel" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xfontsel" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xgamma/PKGBUILD b/xenocara-xgamma/PKGBUILD new file mode 100644 index 0000000..30254b8 --- /dev/null +++ b/xenocara-xgamma/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xgamma package + +pkgname=xenocara-xgamma +_openbsdver=6.9 +pkgver=1.0.6 +pkgrel=3 +pkgdesc="Alter a monitor's gamma correction, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxxf86vm') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xgamma') +conflicts=('xorg-xgamma') +replaces=('xorg-xgamma') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xgamma-$pkgver.tar.lz{,.sig}) +sha512sums=('c339ad4f63bb5be2c823c49377646a0658b02871086541b4561a78d3f93ed34e57619964988be8da7d49b740c95460fbdf6415383b91a903d145a13102faf2ef' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xgamma" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xgamma" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xgamma" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xhost/PKGBUILD b/xenocara-xhost/PKGBUILD new file mode 100644 index 0000000..a3ae501 --- /dev/null +++ b/xenocara-xhost/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +# Based on xorg-xhost package + +pkgname=xenocara-xhost +_openbsdver=6.9 +pkgver=1.0.8 +pkgrel=2 +pkgdesc="Server access control program for X, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxmu') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xhost') +conflicts=('xorg-xhost') +replaces=('xorg-xhost') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xhost-$pkgver.tar.lz{,.sig} + fix-missing-netdb-include-file.patch) +sha512sums=('4677d43fa8857bd56841328ecff420f294f90e467944551f2306a040ec83edcae4d6e847dd5bb9915a3fc249ea1f7ca5ddd917162ad15dc3b342c7c88f274425' + 'SKIP' + 'ab344b1b3c88f5742e4da05e6eb584d1c8bdae1fdffb6ad02e9f904e43bb893ca3434caeedd5112aabb55709b336655ca79ea849edc0218d1dfd67d524b2ba5a') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xhost" + patch -p1 -i "$srcdir/fix-missing-netdb-include-file.patch" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xhost" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xhost" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xhost/fix-missing-netdb-include-file.patch b/xenocara-xhost/fix-missing-netdb-include-file.patch new file mode 100644 index 0000000..cfe0773 --- /dev/null +++ b/xenocara-xhost/fix-missing-netdb-include-file.patch @@ -0,0 +1,12 @@ +diff --git a/xhost.c b/xhost.c +index a67d136..c5d25f4 100644 +--- a/xhost.c ++++ b/xhost.c +@@ -77,6 +77,7 @@ X Window System is a trademark of The Open Group. + #include + #include + #include ++#include + + #ifdef NEEDSOCKETS + #ifdef WIN32 diff --git a/xenocara-xinit/PKGBUILD b/xenocara-xinit/PKGBUILD new file mode 100644 index 0000000..fa8941c --- /dev/null +++ b/xenocara-xinit/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Jesus E. + +# Based on xorg-xinit package + +pkgname=xenocara-xinit +_openbsdver=6.9 +pkgver=1.4.1 +pkgrel=1 +pkgdesc="Xenocara initialisation program" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'xenocara-xauth' 'xenocara-xrdb' 'xenocara-xmodmap' 'inetutils') +makedepends=('xenocara-util-macros') +optdepends=('xenocara-twm' 'xenocara-xconsole' 'xterm') +backup=('etc/X11/xinit/xserverrc' + 'etc/X11/xinit/xinitrc') +provides=('xorg-xinit') +conflicts=('xorg-xinit') +replaces=('xorg-xinit') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xinit-$pkgver.tar.lz{,.sig} + move-serverauthfile-into-tmp.patch + fix-startx-to-xauth-treat-ipv6-properly.patch + fix-hostname.patch + xserverrc) +options=(!emptydirs) +sha512sums=('1c60de8403efa366e7c047f012abbc87aa61acf41adbba11b601c750279d408b26464b672a7299c9f2862de914831501630fe3809566d541568cf9fe55632727' + 'SKIP' + '2785de4871ec28de147943ed2264dce8ca223b75e8a658cbd98acd2d7d9134a9d294de2555ea5089f82de2835685ddb989e5f445d72fa6117912acbbc3ea91b3' + '0661ab1bc767143c7eaef4414bec69b8f294730d6f73743a1009e97ec17105049bd2bd5d1ba402ffb64e47c5373a0e2a572b177fb1448ace3242eaf464009f80' + '9a0b858c9960ad0260cd302d9e9c43d22c5e3a75ec92ebf34c5c2a5fc2f04967ecddd1e87382ce3ff16083418c0194d28e0ac7a3048666f2075baeaaca72fae2' + 'f86d96d76bcb340021e7904925f0029f8662e4dfc32489198b3a8695dca069da496539e2287249c763fe9c4d8d5d591fd18fe49a0bee822cbbd0eb712efbb89b') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xinit" + patch -p1 -i "$srcdir/move-serverauthfile-into-tmp.patch" + patch -p1 -i "$srcdir/fix-startx-to-xauth-treat-ipv6-properly.patch" + patch -p1 -i "$srcdir/fix-hostname.patch" + autoreconf -fi +} + +build() { + cd "xenocara-$_openbsdver/app/xinit" + ./configure --prefix=/usr \ + --with-xinitdir=/etc/X11/xinit \ + --with-wm=twm \ + --with-xconsole=xconsole + make +} + +package() { + cd "xenocara-$_openbsdver/app/xinit" + make DESTDIR="$pkgdir" install + + install -m644 "$srcdir/xserverrc" "$pkgdir/etc/X11/xinit/xserverrc" + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xinit/fix-hostname.patch b/xenocara-xinit/fix-hostname.patch new file mode 100644 index 0000000..66b582b --- /dev/null +++ b/xenocara-xinit/fix-hostname.patch @@ -0,0 +1,13 @@ +diff --git a/app/xinit/startx.cpp b/app/xinit/startx.cpp +index 3ab9a26a..d26ab927 100644 +--- a/startx.cpp ++++ b/startx.cpp +@@ -255,6 +255,8 @@ if [ x"$enable_xauth" = x1 ] ; then + Linux*) + if [ -z "`hostname --version 2>&1 | grep GNU`" ]; then + hostname=`hostname -f` ++ elif [ -z "`hostname --version 2>&1 | grep net-tools`" ]; then ++ hostname=`hostname -f` + else + hostname=`hostname` + fi diff --git a/xenocara-xinit/fix-startx-to-xauth-treat-ipv6-properly.patch b/xenocara-xinit/fix-startx-to-xauth-treat-ipv6-properly.patch new file mode 100644 index 0000000..3444dd0 --- /dev/null +++ b/xenocara-xinit/fix-startx-to-xauth-treat-ipv6-properly.patch @@ -0,0 +1,16 @@ +diff --git a/startx.cpp b/startx.cpp +index fe21fb3..764f69f 100644 +--- a/startx.cpp ++++ b/startx.cpp +@@ -296,9 +296,9 @@ EOF + XCOMM now add the same credentials to the client authority file + XCOMM if '$displayname' already exists do not overwrite it as another + XCOMM server may need it. Add them to the '$xserverauthfile' instead. +- for displayname in $authdisplay $hostname$authdisplay; do ++ for displayname in $authdisplay $hostname/unix$authdisplay; do + authcookie=`XAUTH list "$displayname" @@ +- | sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p"` 2>/dev/null; ++ | sed -n "s/.*$hostname\/unix$authdisplay[[:space:]*].*[[:space:]*]//p"` 2>/dev/null; + if [ "z${authcookie}" = "z" ] ; then + XAUTH -q << EOF + add $displayname . $mcookie diff --git a/xenocara-xinit/move-serverauthfile-into-tmp.patch b/xenocara-xinit/move-serverauthfile-into-tmp.patch new file mode 100644 index 0000000..f25da00 --- /dev/null +++ b/xenocara-xinit/move-serverauthfile-into-tmp.patch @@ -0,0 +1,13 @@ +diff --git a/startx.cpp b/startx.cpp +index 3ab9a26..fe21fb3 100644 +--- a/startx.cpp ++++ b/startx.cpp +@@ -281,7 +281,7 @@ if [ x"$enable_xauth" = x1 ] ; then + dummy=0 + + XCOMM create a file with auth information for the server. ':0' is a dummy. +- xserverauthfile=`mktemp ${HOME}/.serverauth.XXXXXXXXXX` ++ xserverauthfile=`mktemp -p /tmp serverauth.XXXXXXXXXX` + trap "rm -f '$xserverauthfile'" HUP INT QUIT ILL TRAP KILL BUS TERM + xauth -q -f "$xserverauthfile" << EOF + add :$dummy . $mcookie diff --git a/xenocara-xinit/xserverrc b/xenocara-xinit/xserverrc new file mode 100644 index 0000000..b4de252 --- /dev/null +++ b/xenocara-xinit/xserverrc @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/bin/X -nolisten tcp "$@" diff --git a/xenocara-xinput/PKGBUILD b/xenocara-xinput/PKGBUILD new file mode 100644 index 0000000..337d0ea --- /dev/null +++ b/xenocara-xinput/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xinput package + +pkgname=xenocara-xinput +_openbsdver=6.9 +pkgver=1.6.3 +pkgrel=2 +pkgdesc="Small commandline tool to configure devices, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('libx11' 'libxi>=1.7.10' 'xenocara-xrandr' 'libxinerama') +makedepends=('xenocara-util-macros' 'xenocara-proto' 'libxfixes') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xinput') +conflicts=('xorg-xinput') +replaces=('xorg-xinput') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xinput-$pkgver.tar.lz{,.sig}) +sha512sums=('b46eab24828ba9856817b107ce34a00618cb199e8ac3ddcd9d60e2894ad5658f3fa19334984e50e6395e93a9988ef3a4d6aedb5a9f8534248a352cff54a99695' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xinput" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xinput" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xinput" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xkbcomp/PKGBUILD b/xenocara-xkbcomp/PKGBUILD new file mode 100644 index 0000000..e2d77bb --- /dev/null +++ b/xenocara-xkbcomp/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xkbcomp package + +pkgname=xenocara-xkbcomp +_openbsdver=6.9 +pkgver=1.4.4 +pkgrel=2 +pkgdesc="X Keyboard description compiler, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxkbfile') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xkbcomp') +conflicts=('xorg-xkbcomp') +replaces=('xorg-xkbcomp') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xkbcomp-$pkgver.tar.lz{,.sig}) +sha512sums=('bd25ae266cda7c33dec8db163c5126543376f47e4a176ecf5f428587742036207342a3adf80415c671828b2dcd94a54b46a1424a013ad5fc7d649aa61fe4c1f9' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xkbcomp" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xkbcomp" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xkbcomp" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xkbevd/PKGBUILD b/xenocara-xkbevd/PKGBUILD new file mode 100644 index 0000000..afbb304 --- /dev/null +++ b/xenocara-xkbevd/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xkbevd package + +pkgname=xenocara-xkbevd +_openbsdver=6.9 +pkgver=1.1.4 +pkgrel=3 +pkgdesc="XKB event daemon, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('libxkbfile') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xkbevd') +conflicts=('xorg-xkbevd') +replaces=('xorg-xkbevd') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xkbevd-$pkgver.tar.lz{,.sig}) +sha512sums=('666552f4479ebb8cd1a6d9caf77a7ea7772f8d2bcab4c1687ec8f6aa4204f6bb7128d8ef604b96dbcecff544a242504ac743b2f498b433a249a560eba968daa4' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xkbevd" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xkbevd" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xkbevd" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xkbutils/PKGBUILD b/xenocara-xkbutils/PKGBUILD new file mode 100644 index 0000000..8954aed --- /dev/null +++ b/xenocara-xkbutils/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xkbutils package + +pkgname=xenocara-xkbutils +_openbsdver=6.9 +pkgver=1.0.4 +pkgrel=3 +pkgdesc="XKB utility demos, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('libxaw' 'libxt' 'libx11') +makedepends=('xenocara-util-macros' 'xenocara-proto') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xkbutils') +conflicts=('xorg-xkbutils') +replaces=('xorg-xkbutils') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xkbutils-$pkgver.tar.lz{,.sig}) +sha512sums=('9809b02a21ce08965440c9ba935e3c7cdf577245f772cb60ec8a8a893e8fce46f06a90e34144dc78f280abeeaa3034a1b87a40df474a86d44f647f1028b11638' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xkbutils" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xkbutils" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xkbutils" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xkill/PKGBUILD b/xenocara-xkill/PKGBUILD new file mode 100644 index 0000000..cfaf1eb --- /dev/null +++ b/xenocara-xkill/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xkill package + +pkgname=xenocara-xkill +_openbsdver=6.9 +pkgver=1.0.5 +pkgrel=3 +pkgdesc="Kill a client by its X resource, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxmu') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xkill') +conflicts=('xorg-xkill') +replaces=('xorg-xkill') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xkill-$pkgver.tar.lz{,.sig}) +sha512sums=('95e81a92a0e087f7bed596b61ce68319d342d622cbdd99026e63c2a8a86326d3dfc3d070a895837361e1946a69a932de3d99a864401f3b0000bfda98bff07eb9' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xkill" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xkill" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xkill" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xload/PKGBUILD b/xenocara-xload/PKGBUILD new file mode 100644 index 0000000..843d091 --- /dev/null +++ b/xenocara-xload/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xload package + +pkgname=xenocara-xload +_openbsdver=6.9 +pkgver=1.1.3 +pkgrel=3 +pkgdesc="System load average display for X, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw' 'libxmu' 'libxt' 'libx11') +makedepends=('xenocara-util-macros' 'gettext-tiny') +provides=('xorg-xload') +conflicts=('xorg-xload') +replaces=('xorg-xload') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xload-$pkgver.tar.lz{,.sig}) +sha512sums=('477262aa4da29d918b8ce6872ea0728c4232a0df5811e3688db9def726362ea5505842537868aefac3c64fd32b8efa5f73886302dec71e9c7d8a5923e618701a' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xload" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xload" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xload" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xlogo/PKGBUILD b/xenocara-xlogo/PKGBUILD new file mode 100644 index 0000000..c40d8b3 --- /dev/null +++ b/xenocara-xlogo/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xlogo package + +pkgname=xenocara-xlogo +_openbsdver=6.9 +pkgver=1.0.5 +pkgrel=2 +pkgdesc="Draw [old] X logo, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libsm' 'libxaw' 'libxmu' 'libxt' 'libxext' 'libx11' 'libxrender' 'libxft') +makedepends=('xenocara-util-macros') +provides=('xorg-xlogo') +conflicts=('xorg-xlogo') +replaces=('xorg-xlogo') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xlogo-$pkgver.tar.lz{,.sig}) +sha512sums=('5def40872de5ea0ea0dbe5e95dc25811a9fccb956d1f378bac2630786e98e67dde1ca1c5b6f0aa30523e99fa2817f85bbfc1492dc64314bb36ebe8ddfe48e5a1' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xlogo" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xlogo" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xlogo" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xlsatoms/PKGBUILD b/xenocara-xlsatoms/PKGBUILD new file mode 100644 index 0000000..707afcc --- /dev/null +++ b/xenocara-xlsatoms/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xlsatoms package + +pkgname=xenocara-xlsatoms +_openbsdver=6.9 +pkgver=1.1.3 +pkgrel=2 +pkgdesc="List interned atoms defined on server, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxcb') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xlsatoms') +conflicts=('xorg-xlsatoms') +replaces=('xorg-xlsatoms') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xlsatoms-$pkgver.tar.lz{,.sig}) +sha512sums=('b6633cd673f9ca144f0963015f67d621a6d72f5fbd328645867e6c8f9ad14a35403561430f7714ba421a2c3dcac1db6921399380053364ab825c2d83b9282b02' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xlsatoms" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xlsatoms" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xlsatoms" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xlsclients/PKGBUILD b/xenocara-xlsclients/PKGBUILD new file mode 100644 index 0000000..01febe2 --- /dev/null +++ b/xenocara-xlsclients/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xlsclients package + +pkgname=xenocara-xlsclients +_openbsdver=6.9 +pkgver=1.1.4 +pkgrel=3 +pkgdesc="List client applications running on a display, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxcb') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xlsclients') +conflicts=('xorg-xlsclients') +replaces=('xorg-xlsclients') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xlsclients-$pkgver.tar.lz{,.sig}) +sha512sums=('e492b24a65f21159c7edfe94ed354f208f27ff222be64c7acf41276aa344afc11c551641a2b1f8e501acc240a819f6c428058adc48f17db6394cf9e7329fc69e' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xlsclients" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xlsclients" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xlsclients" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xlsfonts/PKGBUILD b/xenocara-xlsfonts/PKGBUILD new file mode 100644 index 0000000..5c5aa61 --- /dev/null +++ b/xenocara-xlsfonts/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xlsfonts package + +pkgname=xenocara-xlsfonts +_openbsdver=6.9 +pkgver=1.0.6 +pkgrel=1 +pkgdesc="List available X fonts, provided by Xenocara" +url='https://www.xenocara.org' +license=('X11') +arch=('i686' 'x86_64') +depends=('libx11') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xlsfonts') +conflicts=('xorg-xlsfonts') +replaces=('xorg-xlsfonts') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xlsfonts-$pkgver.tar.lz{,.sig}) +sha512sums=('e952b942ab2e7e5bbc576400056b6c3cb0eb8b4967f88da0dd13fd262e6c108cb0362659a1481cb9050517928dafe727bb307a4add508e15be1959aaf5b09ed8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xlsfonts" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xlsfonts" + ./configure \ + --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xlsfonts" + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/xenocara-xmag/PKGBUILD b/xenocara-xmag/PKGBUILD new file mode 100644 index 0000000..0dabf92 --- /dev/null +++ b/xenocara-xmag/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xmag package + +pkgname=xenocara-xmag +_openbsdver=6.9 +pkgver=1.0.6 +pkgrel=3 +pkgdesc="Magnify parts of the screen, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw' 'libxmu' 'libxt' 'libx11') +makedepends=('xenocara-util-macros') +provides=('xorg-xmag') +conflicts=('xorg-xmag') +replaces=('xorg-xmag') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xmag-$pkgver.tar.lz{,.sig}) +sha512sums=('e094414efa543c7bb7694f7163d0612d747ec86bf8570f5b9b039c33761898d4fd7ec7ab1a7756192458cc91ae88e415162796d9789ee532dac1ccc4e78cb4b3' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xmag" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xmag" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xmag" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xmessage/PKGBUILD b/xenocara-xmessage/PKGBUILD new file mode 100644 index 0000000..b090689 --- /dev/null +++ b/xenocara-xmessage/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xmessage package + +pkgname=xenocara-xmessage +_openbsdver=6.9 +pkgver=1.0.5 +pkgrel=3 +pkgdesc="Display a message or query in a window, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxaw') +makedepends=('xenocara-util-macros') +provides=('xorg-xmessage') +conflicts=('xorg-xmessage') +replaces=('xorg-xmessage') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xmessage-$pkgver.tar.lz{,.sig}) +sha512sums=('ae057fe470a9faa1155357fee4c986c4615099380524c51bb5f749a772dedb3eca8f68a4386772eacc8bcca5643293b69f0d8ac03dc86c471ff4f6754efd9ba1' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xmessage" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xmessage" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xmessage" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xmodmap/PKGBUILD b/xenocara-xmodmap/PKGBUILD new file mode 100644 index 0000000..3a3f619 --- /dev/null +++ b/xenocara-xmodmap/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xmodmap package + +pkgname=xenocara-xmodmap +_openbsdver=6.9 +pkgver=1.0.10 +pkgrel=2 +pkgdesc="Utility for modifying keymaps and button mappings, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xmodmap') +conflicts=('xorg-xmodmap') +replaces=('xorg-xmodmap') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xmodmap-$pkgver.tar.lz{,.sig}) +sha512sums=('cf98fd6a12e7190d169e926bc0350d70687890cf9be6e78b228fb5ede42d33c820a5631be57a6190f1dacdfc112408cbae0b84588a9b839b1bf6de973d491211' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xmodmap" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xmodmap" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xmodmap" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xpr/PKGBUILD b/xenocara-xpr/PKGBUILD new file mode 100644 index 0000000..deb2cc6 --- /dev/null +++ b/xenocara-xpr/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xpr package + +pkgname=xenocara-xpr +_openbsdver=6.9 +pkgver=1.0.5 +pkgrel=3 +pkgdesc="Print an X window dump from xwd, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxmu' 'sh') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xpr') +conflicts=('xorg-xpr') +replaces=('xorg-xpr') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xpr-$pkgver.tar.lz{,.sig}) +sha512sums=('ffcf40dca19b48579efe50203816effe2a27a8877210ba162fca72db8b6853f29127d88d45e9a1e806e3e6e1c7ee437e9fa4306ad174f2a5e98ff23a685e4976' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xpr" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xpr" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xpr" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xprop/PKGBUILD b/xenocara-xprop/PKGBUILD new file mode 100644 index 0000000..3b91bdb --- /dev/null +++ b/xenocara-xprop/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xprop package + +pkgname=xenocara-xprop +_openbsdver=6.9 +pkgver=1.2.5 +pkgrel=1 +pkgdesc="Property displayer for X, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xprop') +conflicts=('xorg-xprop') +replaces=('xorg-xprop') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xprop-$pkgver.tar.lz{,.sig}) +sha512sums=('58b2f96b9031774d4a991ab95a76f60b012590539b3ffe17b468f0ea1a68a76b3a33930f061d9a98ffb5da928480173a5b26686de617442cefd161991fd62667' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xprop" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xprop" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xprop" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xrandr/PKGBUILD b/xenocara-xrandr/PKGBUILD new file mode 100644 index 0000000..7c99e4d --- /dev/null +++ b/xenocara-xrandr/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +# Based on xorg-xrandr package + +pkgname=xenocara-xrandr +_openbsdver=6.9 +pkgver=1.5.1 +pkgrel=2 +pkgdesc="Primitive command line interface to RandR extension, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('libxrandr' 'libx11') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xrandr') +conflicts=('xorg-xrandr') +replaces=('xorg-xrandr') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xrandr-$pkgver.tar.lz{,.sig}) +sha512sums=('fbe72f8faedc0b78d182cc4442ae50c1f67f530b9dc651055d63e0bbfc7ce36e2251a0a61521452ac7f24d734b995c84914d7f2c1693189f770852c3f264ef41' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xrandr" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xrandr" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xrandr" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + rm -f "$pkgdir/usr/bin/xkeystone" +} diff --git a/xenocara-xrdb/PKGBUILD b/xenocara-xrdb/PKGBUILD new file mode 100644 index 0000000..1fe7ca4 --- /dev/null +++ b/xenocara-xrdb/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: Jesus E. + +# Based on xorg-xrdb package + +pkgname=xenocara-xrdb +_openbsdver=6.9 +pkgver=1.2.0 +pkgrel=2 +pkgdesc="X server resource database utility, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('Expat') +depends=('libx11' 'libxmu') +makedepends=('xenocara-util-macros') +optdepends=('gcc: for preprocessing' + 'mcpp: a lightweight alternative for preprocessing') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xrdb') +conflicts=('xorg-xrdb') +replaces=('xorg-xrdb') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xrdb-$pkgver.tar.lz{,.sig}) +sha512sums=('7262f35c4c894172904774668fe1f16dbab38ef3915fdbfa37d736cf8e8ee9be5047b6a1f391bfecd3bf09e960156936da4bed90fa74274b96b5aaff3db16acc' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xrdb" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xrdb" + ./configure --prefix=/usr --with-cpp=/usr/bin/cpp,/usr/bin/mcpp + make +} + +package() { + cd "xenocara-$_openbsdver/app/xrdb" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xrefresh/PKGBUILD b/xenocara-xrefresh/PKGBUILD new file mode 100644 index 0000000..b2be167 --- /dev/null +++ b/xenocara-xrefresh/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xrefresh package + +pkgname=xenocara-xrefresh +_openbsdver=6.9 +pkgver=1.0.6 +pkgrel=3 +pkgdesc="Refresh all or part of an X screen, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xrefresh') +conflicts=('xorg-xrefresh') +replaces=('xorg-xrefresh') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xrefresh-$pkgver.tar.lz{,.sig}) +sha512sums=('b8cbdf4220e00ba7b1785c916ce87d6bb325765ad7eac861c84a9978c42a0c3fa5f439318359ddeef1eeee0f569b91cc5d19ac626f40e51237000b6af8d091f8' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xrefresh" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xrefresh" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xrefresh" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xset/PKGBUILD b/xenocara-xset/PKGBUILD new file mode 100644 index 0000000..dcdbf33 --- /dev/null +++ b/xenocara-xset/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xset package + +pkgname=xenocara-xset +_openbsdver=6.9 +pkgver=1.2.4 +pkgrel=3 +pkgdesc="User preference utility for X, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxmu') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xset') +conflicts=('xorg-xset') +replaces=('xorg-xset') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xset-$pkgver.tar.lz{,.sig}) +sha512sums=('59ab1a9a68c6076247a694b3c8e024e161b935d6d6859c86c3efe8bd897a1c874eee320a171b39dad5188e2baf5da6d3a23688259c89f06b78aa57574e702263' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xset" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xset" + ./configure --prefix=/usr --without-fontcache --without-xf86misc + make +} + +package() { + cd "xenocara-$_openbsdver/app/xset" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xsetroot/PKGBUILD b/xenocara-xsetroot/PKGBUILD new file mode 100644 index 0000000..aa77007 --- /dev/null +++ b/xenocara-xsetroot/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xsetroot + +pkgname=xenocara-xsetroot +_openbsdver=6.9 +pkgver=1.1.2 +pkgrel=3 +pkgdesc="Classic X utility to set your root window background to a given pattern or color, provided by Xenocara" +arch=('i686' 'x86_64') +url="https://www.xenocara.org" +license=('X11') +depends=('libxmu' 'libx11' 'libxcursor') +makedepends=('xenocara-util-macros' 'xenocara-xbitmaps') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xsetroot') +conflicts=('xorg-xsetroot') +replaces=('xorg-xsetroot') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xsetroot-$pkgver.tar.lz{,.sig}) +sha512sums=('aee83da0c7bf37f0899b375c934067210d603191fb9d75a31c1e8b983f64134b94a218d46153fc0e88b6334a0c23da80b59f86dac437454b795716501841fe19' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xsetroot" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xsetroot" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xsetroot" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xsm/LICENSE b/xenocara-xsm/LICENSE new file mode 100644 index 0000000..7c08382 --- /dev/null +++ b/xenocara-xsm/LICENSE @@ -0,0 +1,27 @@ +Copyright (C) 1996 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +X Window System is a trademark of X Consortium, Inc. diff --git a/xenocara-xsm/PKGBUILD b/xenocara-xsm/PKGBUILD new file mode 100644 index 0000000..97e0215 --- /dev/null +++ b/xenocara-xsm/PKGBUILD @@ -0,0 +1,43 @@ +# Maintainer: Jesus E. + +# Based on xorg-xsm package + +pkgname=xenocara-xsm +_openbsdver=6.9 +_pkgname=xsm +pkgdesc="X Session Manager, provided by Xenocara" +pkgver=1.0.4 +pkgrel=1 +arch=('i686' 'x86_64') +url='https://www.xenocara.org' +license=('X11') +depends=('libxaw' 'xenocara-smproxy' 'xenocara-iceauth') +makedepends=('xenocara-util-macros') +optdepends=('xenocara-twm: for window manager in default scripts') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xsm') +conflicts=('xorg-xsm') +replaces=('xorg-xsm') +source=("https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/$_pkgname-$pkgver.tar.lz"{,.sig} + "LICENSE") +sha512sums=('1937424aa399c64b5c1703de0cbf421da5de350e1793f0328bbb70c46d5641666cc9331ddf14cd7f6ab80e4456ac316daf7132ad6ae3705722abc186234e7638' + 'SKIP' + 'fe9ad2090c98140a9b3cb969def4ca76fe4bf523eb402cd587ec8be4c76090cd47fadc60f56ad99e45b3c39ec44c5bbe453786c5454b0d8f07bba7fd80028628') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/$_pkgname" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/$_pkgname" + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd "xenocara-$_openbsdver/app/$_pkgname" + make DESTDIR="$pkgdir" install + install -Dm644 $srcdir/LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/xenocara-xvidtune/PKGBUILD b/xenocara-xvidtune/PKGBUILD new file mode 100644 index 0000000..7daf481 --- /dev/null +++ b/xenocara-xvidtune/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Jesus E. + +# Based on xorg-xvidtune package + +pkgname=xenocara-xvidtune +_openbsdver=6.9 +pkgver=1.0.3 +pkgrel=3 +pkgdesc="Video mode tuner for Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxxf86vm' 'libxt' 'libxaw' 'libxmu' 'libx11') +makedepends=('xenocara-util-macros') +provides=('xorg-xvidtune') +conflicts=('xorg-xvidtune') +replaces=('xorg-xvidtune') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xvidtune-$pkgver.tar.lz{,.sig}) +sha512sums=('6a800a0b25a947f5658d4d54ee85cbb33881f1735d23350aa2b21b59d24f886996a3e6f1f62d61b6821e5d473c1fbdd66841bf40ce7bb55af8b606a94ff936b4' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xvidtune" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xvidtune" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xvidtune" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xvinfo/PKGBUILD b/xenocara-xvinfo/PKGBUILD new file mode 100644 index 0000000..fe790ba --- /dev/null +++ b/xenocara-xvinfo/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xvinfo package + +pkgname=xenocara-xvinfo +_openbsdver=6.9 +pkgver=1.1.3 +pkgrel=3 +pkgdesc="Prints out the capabilities of any video adaptors associated with the display that are accessible through the X-Video extension, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11' 'libxv') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xvinfo') +conflicts=('xorg-xvinfo') +replaces=('xorg-xvinfo') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xvinfo-$pkgver.tar.lz{,.sig}) +sha512sums=('f63c087a36fdc83d917475ca51238b779b7ec5f66261b62886046378c0a3040d6c9a84fd2a956064ae37a8170819faff9a2a47e50eea665f1873b2d060afc8ba' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xvinfo" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xvinfo" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xvinfo" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xwd/PKGBUILD b/xenocara-xwd/PKGBUILD new file mode 100644 index 0000000..4b75fdc --- /dev/null +++ b/xenocara-xwd/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xwd package + +pkgname=xenocara-xwd +_openbsdver=6.9 +pkgver=1.0.7 +pkgrel=3 +pkgdesc="X Window System image dumping utility, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libxkbfile') +makedepends=('xenocara-util-macros' 'libxt') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xwd') +conflicts=('xorg-xwd') +replaces=('xorg-xwd') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xwd-$pkgver.tar.lz{,.sig}) +sha512sums=('8e0b4495c8d05e1f3f765a9ae331c3f0a6d7b495c040dded8cf80e0f90123baf35f5378aff17a0580a08d89775e6cd53746752492345cc8d5c2aab52343e5a88' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xwd" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xwd" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xwd" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xwininfo/PKGBUILD b/xenocara-xwininfo/PKGBUILD new file mode 100644 index 0000000..095e6b3 --- /dev/null +++ b/xenocara-xwininfo/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xwininfo package + +pkgname=xenocara-xwininfo +_openbsdver=6.9 +pkgver=1.1.5 +pkgrel=2 +pkgdesc="Command-line utility to print information about windows on an X server, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('Expat') +depends=('libxcb') +makedepends=('xenocara-util-macros' 'libx11' 'gettext-tiny') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xwininfo') +conflicts=('xorg-xwininfo') +replaces=('xorg-xwininfo') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xwininfo-$pkgver.tar.lz{,.sig}) +sha512sums=('f8c774d9f764e955d832137caaa28bf733bab6e2410b359c071dd148411145c0b8260c827aef1f2aea8b364c0e3fca01ef87d2eca96d3be67254437768d0ad2f' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xwininfo" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xwininfo" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xwininfo" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xenocara-xwud/PKGBUILD b/xenocara-xwud/PKGBUILD new file mode 100644 index 0000000..d5f4d80 --- /dev/null +++ b/xenocara-xwud/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xorg-xwud package + +pkgname=xenocara-xwud +_openbsdver=6.9 +pkgver=1.0.5 +pkgrel=3 +pkgdesc="X Window System image undumping utility, provided by Xenocara" +arch=(i686 x86_64) +url="https://www.xenocara.org" +license=('X11') +depends=('libx11') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +provides=('xorg-xwud') +conflicts=('xorg-xwud') +replaces=('xorg-xwud') +source=(https://repo.hyperbola.info:50000/sources/xenocara-libre/$_openbsdver/app/xwud-$pkgver.tar.lz{,.sig}) +sha512sums=('f56ca5fba3791685086f906b96e84a247d69586db19cf42bc3309a02faac6a6221e72c689e1d8c111755b0eafa9c998ad280b6688813d0b295e3800ff0fb0524' + 'SKIP') +validpgpkeys=('C92BAA713B8D53D3CAE63FC9E6974752F9704456') # AndrĂ© Silva + +prepare() { + cd "xenocara-$_openbsdver/app/xwud" + autoreconf -vfi +} + +build() { + cd "xenocara-$_openbsdver/app/xwud" + ./configure --prefix=/usr + make +} + +package() { + cd "xenocara-$_openbsdver/app/xwud" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xfe/PKGBUILD b/xfe/PKGBUILD new file mode 100644 index 0000000..d87025d --- /dev/null +++ b/xfe/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +pkgname=xfe +pkgver=1.45 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="X File Explorer (Xfe) is a lightweight, free and libre file manager for X" +arch=('i686' 'x86_64') +url='http://roland65.free.fr/xfe/' +license=('GPL-2') +depends=('fox' 'freetype2' 'xcb-util' 'libxft') +makedepends=('intltool' 'quilt') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/x/xfe/xfe_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/x/xfe/xfe_${_debver}-${_debrel}.debian.tar.xz" + "libre.patch" + "opus-support-in-xferc.patch") +sha512sums=('3d511fec3070b39c08b83c19178890dea6f7a306dee0c51a98b6ed8eafc5148973da6d803beb2053be131d389dd74eef829459fe39e212f53b983b19d5d1cb4f' + '761e74a1ed7a4d5327f41265d02a8b507adb63d87a85022b52bd89efb3eef6a70a573803dcdbf97c42e16a5485f3cd434a5c75fc25a22b4fb2894ae567985011' + '2dbc1374f2546aed565033f2cccef6b46df3d535db3129b9e924e6622d150ccc53fee491ab951f385d9f1b38b535798d53a3749ffb84466c42b932c91f9dab3b' + '5adfa87130c3f4fe179858fce01110b4dc06555aeffc7c60274911c77716c686099663db4cb161375a8b3c0309584bcf47d9c4b20b04b900837eb56431ab1535') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + rm -rf ./debian + mv "$srcdir"/debian . + + quilt push -av + fi + + patch -p1 -i $srcdir/libre.patch + patch -p1 -i $srcdir/opus-support-in-xferc.patch +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xfe/libre.patch b/xfe/libre.patch new file mode 100644 index 0000000..3c121da --- /dev/null +++ b/xfe/libre.patch @@ -0,0 +1,17 @@ +diff --git a/xferc.in b/xferc.in +index 8245e8b2..4be6bc80 100644 +--- a/xferc.in ++++ b/xferc.in +@@ -201,9 +201,9 @@ frm = ",,;VisualBasic Source;text_32x32.png;tex + asc = ",,;ASCII File;text_32x32.png;text_16x16.png;;" + + # Web +-html = "firefox,firefox,;Hyper Text;html_32x32.png;html_16x16.png;;" +-htm = "firefox,firefox,;Hyper Text;html_32x32.png;html_16x16.png;;" +-php = "firefox,firefox,;PHP Source;html_32x32.png;html_16x16.png;;" ++html = "iceweasel-uxp,iceweasel-uxp,;Hyper Text;html_32x32.png;html_16x16.png;;" ++htm = "iceweasel-uxp,iceweasel-uxp,;Hyper Text;html_32x32.png;html_16x16.png;;" ++php = "iceweasel-uxp,iceweasel-uxp,;PHP Source;html_32x32.png;html_16x16.png;;" + js = ",,;Javascript;html_32x32.png;html_16x16.png;;" + css = ",,;Style Sheet;text_32x32.png;text_16x16.png;;" + diff --git a/xfe/opus-support-in-xferc.patch b/xfe/opus-support-in-xferc.patch new file mode 100644 index 0000000..c3847ba --- /dev/null +++ b/xfe/opus-support-in-xferc.patch @@ -0,0 +1,12 @@ +diff --git a/xferc.in b/xferc.in +index 8245e8b2..16a26149 100644 +--- a/xferc.in ++++ b/xferc.in +@@ -302,6 +302,7 @@ mp3 = ",,audacity;MPEG Audio;mp3_32x32.png;mp3_16x16.p + m4a = ",,audacity;MPEG Audio;mp3_32x32.png;mp3_16x16.png;;" + mpeg3 = ",,audacity;MPEG Audio;mp3_32x32.png;mp3_16x16.png;;" + ogg = ",,audacity;Ogg Vorbis Audio;mp3_32x32.png;mp3_16x16.png;;" ++opus = ",,audacity;Opus Audio;mp3_32x32.png;mp3_16x16.png;;" + xm = ",,;Audio module;wave_32x32.png;wave_16x16.png;;" + mod = ",,;Audio module;wave_32x32.png;wave_16x16.png;;" + s3m = ",,;Audio module;wave_32x32.png;wave_16x16.png;;" diff --git a/xfig/PKGBUILD b/xfig/PKGBUILD new file mode 100644 index 0000000..7f24993 --- /dev/null +++ b/xfig/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Jesus E. + +pkgname=xfig +pkgver=3.2.8b +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="An interactive, free and libre drawing tool" +arch=('i686' 'x86_64') +url='https://mcj.sourceforge.net/' +license=('Expat') +depends=('libjpeg-turbo' 'libxaw3d' 'xenocara-fonts-misc-meta' 'xenocara-font-bitstream-75dpi' + 'xenocara-font-bitstream-100dpi' 'libpng' 'libxpm' 'ghostscript') +makedepends=('fig2dev' 'libxaw' 'quilt') +optdepends=('fig2dev: to use the frontend to convert fig files') +options=('!makeflags' '!emptydirs') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/x/xfig/xfig_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/x/xfig/xfig_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('5cc5e61977f97956baca77bf4bce09d0f47ea6fafb10055d0523f7cccd72d7af80e706daa62ae16df3fc54338b4f6cd4a6b71dc460311e65be749ec84fa662b3' + '1b57d2ab5c40b880abe2326998c869cf4d519075c6c1285ce0537233545741dd9ad0e1c805e3f79852dd47677ebdc91040318599c0de6083d810fc27a031aff4') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + autoreconf +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 debian/copyright -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/xidle/LICENSE b/xidle/LICENSE new file mode 100644 index 0000000..c3a0c5e --- /dev/null +++ b/xidle/LICENSE @@ -0,0 +1,53 @@ +This package was debianised by Thorsten Glaser on +Thu Jul 09 18:36:14 UTC 2015. + +It was downloaded from MirBSD anonymous CVS. + + +xidle is published under the 2-clause UCB licence: + + * Copyright (c) 2005 Federico G. Schwindt. + * Copyright (c) 2005 Claudio Castiglia + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBSD + * PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +xidle uses strtonum under OpenBSD’s ISC licence: + + * Copyright (c) 2004 Ted Unangst and Todd Miller + * Copyright (c) 2005 mirabilos + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +The packagaging for the Debian system is + Copyright © 2015, 2016, 2020 mirabilos +and published under the same licence or The MirOS Licence. diff --git a/xidle/Makefile b/xidle/Makefile new file mode 100644 index 0000000..60daf5e --- /dev/null +++ b/xidle/Makefile @@ -0,0 +1,11 @@ +PREFIX = /usr +INSTALL = install +CFLAGS += -Wall -D__dead= +FLAGS = $(shell pkg-config --libs --cflags xscrnsaver xext x11) + +xidle: + $(CC) -o xidle xidle.c $(CFLAGS) $(LDFLAGS) $(FLAGS) + +install: + $(INSTALL) -D -m 0755 xidle $(DESTDIR)/$(PREFIX)/bin/xidle + $(INSTALL) -D -m 0644 xidle.1 $(DESTDIR)/$(PREFIX)/share/man/man1/xidle.1 diff --git a/xidle/PKGBUILD b/xidle/PKGBUILD new file mode 100644 index 0000000..42518c8 --- /dev/null +++ b/xidle/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=xidle +pkgver=26052015 +pkgrel=1 +pkgdesc="xidle runs a program on X inactivity" +arch=('i686' 'x86_64') +license=('Simplified-BSD') +depends=('libxss' 'libxext' 'libx11') +source=("http://distcache.freebsd.org/local-distfiles/novel/${pkgname}-${pkgver}.tar.bz2" + "Makefile" + "LICENSE") +sha512sums=('bb132a431a5dd585be6a93519aa06a73eade63dde81bbe582a5dd966646c5eeaca65fa2573e6795b73bbfd08388390b4e92954929577051f13098ef8e38c2200' + '23d8560edf934c96e557a5423ea433f4658b5fe7cd08b4600127dc2585f73ac177083114695c873af1574de8971f2b38b87812cdbcc58a877f43bb8f90290bbc' + '81bf5e2355ad26e59be9216731c90f9e245d319f09528450eea7237cb3bee9858fbb2f93a0d60e0cf7f67fc90d09cfd11a5f95e182d04785bfb387ed4cd323dc') + +build() { + cd "${pkgname}-${pkgver}" + make -f ${srcdir}/Makefile +} + +package() { + cd "${pkgname}-${pkgver}" + make -f ${srcdir}/Makefile DESTDIR="${pkgdir}" install + install -Dm644 ${srcdir}/LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xine-lib/PKGBUILD b/xine-lib/PKGBUILD new file mode 100644 index 0000000..21cc116 --- /dev/null +++ b/xine-lib/PKGBUILD @@ -0,0 +1,72 @@ +# Maintainer: Jesus E. + +pkgname=xine-lib +pkgver=1.2.10 +_debver=$pkgver +_debrel=4 +pkgrel=5 +pkgdesc="Multimedia playback engine" +arch=('i686' 'x86_64') +url='https://www.xine-project.org' +license=('LGPL-2') +depends=('libxvmc' 'ffmpeg' 'libxinerama' 'libnsl') +makedepends=('wavpack' 'faad2' 'libmng' 'mesa' 'libmodplug' + 'vcdimager' 'jack' 'aalib' 'libdca' 'a52dec' 'libmad' 'libdvdnav' + 'libmpcdec' 'libcaca' 'glu' 'gdk-pixbuf2' 'quilt') +optdepends=('jack: for using the jack plugin' + 'vcdimager: for using the vcd plugin' + 'glu: for using the opengl plugin' + 'wavpack: for using the wavpack plugin' + 'faad2: for using the faad plugin' + 'libmng: for using the mng plugin' + 'aalib: for using the aalib plugin' + 'libmodplug: for using the modplug plugin' + 'libdca: for using the dca plugin' + 'a52dec: for using the a52 plugin' + 'libmad: for using the mp3 plugin' + 'libdvdnav: for using the dvd plugin' + 'libmpcdec: for using the musepack plugin' + 'libcaca: for using the caca plugin' + 'gdk-pixbuf2: for using the gdk-pixbuf plugin') +source=("https://downloads.sourceforge.net/project/xine/xine-lib/$pkgver/xine-lib-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/x/xine-lib-1.2/xine-lib-1.2_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('1cbe033da606d67a0a59f19968b2fe1cb46eaeb32c4b4aca7b91125b7230e15bd36d1e3e39e48e6eda56e556018f9f9bf84acb0012d3dd634306e7110fdc4c5f' + '423ab82135999f5250b23dcb3c848cd675aa2fe0badd84e1f539ac35ffccce83605c76e140ce293a076182ff0c66653c418a3318a80934d6986c9baeddf435ca') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/0001-Fix-ftbfs-with-gcc-10.patch || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + CFLAGS+=" -fcommon" + ./configure \ + --prefix=/usr \ + --disable-static \ + --with-external-dvdnav \ + --with-libflac \ + --with-wavpack \ + --with-freetype \ + --disable-vdpau + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING.LIB -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xine-ui/PKGBUILD b/xine-ui/PKGBUILD new file mode 100644 index 0000000..2f7b2e9 --- /dev/null +++ b/xine-ui/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +pkgname=xine-ui +pkgver=0.99.9 +_debver=$pkgver +_debrel=2 +pkgrel=5 +pkgdesc="A free and libre video player" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://www.xine-project.org' +depends=('xine-lib' 'curl' 'libxft' 'libxxf86vm' 'xdg-utils') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/xine/${pkgname}-${pkgver}.tar.xz" + "https://deb.debian.org/debian/pool/main/x/xine-ui/xine-ui_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('575b20a19c5740ba0336af9dea0a1bc15d23b7471379b9d72aeb585e23f95b336368b96a28d4804726507f059dc431cc3f9adfd8b615b08c0e67b65287c2b6c7' + '820fae581ef80a23a64f9fc27864ea3a2a8ec3585cf11493e767cc047686101f91c9bcb2099c79fecc6f6a766a3ecbfc6385b4914a6903fe9233582732340df8') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --with-x \ + --disable-lirc \ + --without-aalib \ + --disable-debug + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" desktopdir=/usr/share/applications install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xkeyboard-config/PKGBUILD b/xkeyboard-config/PKGBUILD new file mode 100644 index 0000000..dded368 --- /dev/null +++ b/xkeyboard-config/PKGBUILD @@ -0,0 +1,56 @@ +# Maintainer: Jesus E. + +pkgname=xkeyboard-config +pkgver=2.29 +_debver=2.29 +_debrel=2 +pkgrel=2 +pkgdesc="X keyboard configuration files" +arch=(any) +license=('X11') +url="https://www.freedesktop.org/wiki/Software/XKeyboardConfig" +makedepends=('intltool' 'xenocara-xkbcomp' 'libxslt' 'python' 'quilt') +provides=('xkbdata') +replaces=('xkbdata') +conflicts=('xkbdata') +source=(https://xorg.freedesktop.org/archive/individual/data/$pkgname/$pkgname-$pkgver.tar.bz2 + https://deb.debian.org/debian/pool/main/x/xkeyboard-config/xkeyboard-config_$_debver-$_debrel.diff.gz + revert-fullscreen.patch) +sha512sums=('202255af097f3063d76341d1b4a7672662dc645f9bcd7afa87bc966a41db4c20fc6b8f4fbe2fcaec99b6bc458eac10129141a866a165857c46282f6705b78670' + '9107dd2fb57cc04457a182fae1f9def0eaf67111be4972bccf505307afdef9d23b887195368dcb43a612fdc5c56795322b96b6f9044a994e6dd2e86aefb1fb16' + '09f8bd832512c59da11fbddd709018422680c2c5eecc38a33f37e55cf3d7f5a2b5dfbf4d5e26fb862957ba52253637f0700e301c2880938cf8b1f119e53153aa') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + patch -p1 -i "$srcdir"/xkeyboard-config_$_debver-$_debrel.diff + + quilt push -av + fi + # fix FS#1576 https://issues.hyperbola.info/index.php?do=details&task_id=1576 + patch -p1 -i "$srcdir/revert-fullscreen.patch" +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr \ + --with-xkb-base=/usr/share/X11/xkb \ + --with-xkb-rules-symlink=xorg \ + --enable-compat-rules=yes + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + rm -f "$pkgdir/usr/share/X11/xkb/compiled" + + install -m755 -d "$pkgdir/var/lib/xkb" + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xkeyboard-config/revert-fullscreen.patch b/xkeyboard-config/revert-fullscreen.patch new file mode 100644 index 0000000..c967363 --- /dev/null +++ b/xkeyboard-config/revert-fullscreen.patch @@ -0,0 +1,24 @@ +diff --git a/keycodes/evdev b/keycodes/evdev +index d41799d9..ae00ccde 100644 +--- a/keycodes/evdev ++++ b/keycodes/evdev +@@ -287,7 +287,6 @@ default xkb_keycodes "evdev" { + = 372; // #define KEY_FAVORITES 364 + = 382; // #define KEY_KEYBOARD 374 + = 569; // #define KEY_ROTATE_LOCK_TOGGLE 561 +- = 380; // #define KEY_FULL_SCREEN 372 + + // Fake keycodes for virtual keys + = 92; +diff --git a/symbols/inet b/symbols/inet +index 049ac185..b3065e4a 100644 +--- a/symbols/inet ++++ b/symbols/inet +@@ -221,7 +221,6 @@ xkb_symbols "evdev" { + key { [ XF86Favorites ] }; + key { [ XF86Keyboard ] }; + key { [ XF86RotationLockToggle ] }; +- key { [ XF86FullScreen ] }; + + key { [ XF86Tools ] }; + key { [ XF86Launch5 ] }; diff --git a/xkeycaps/PKGBUILD b/xkeycaps/PKGBUILD new file mode 100644 index 0000000..59d1f3e --- /dev/null +++ b/xkeycaps/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=xkeycaps +pkgver=2.47 +_debver=2.47 +_debrel=7 +pkgrel=1 +arch=('i686' 'x86_64') +pkgdesc='A graphical front-end to xmodmap' +url='https://www.jwz.org/xkeycaps/' +license=('Expat') +depends=('libxaw') +makedepends=('imake' 'xbitmaps' 'quilt') +source=(https://deb.debian.org/debian/pool/main/x/xkeycaps/xkeycaps_$pkgver.orig.tar.gz + https://deb.debian.org/debian/pool/main/x/xkeycaps/xkeycaps_$_debver-$_debrel.debian.tar.xz + license.txt) +sha512sums=('f5f5ecdf83c2bd86eb3d8b8a28b26af25a2dc9ff0a9c44091d8eb154d617b4373191a2e4479bb0e3025c023d6e5d785a088c64bc269c1c43431a3d2fc91c1a7e' + '85d72cbd4012299ab60ab700049862c1ab514c904acb8e3810fd7886cacb0712c3849fbc52dee499007d97ce8aa301a34d901120a46ba15a32151986121fbbbc' + 'dc07c0ff12bb103bcb42911977849c586364ba39cf171d3761c37e69131a933545d6b149b1ced8ff9fd9dd0dfc81bad9ac39e26c22c867fca38f85ccdff74220') + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir"/$pkgname-$pkgver + xmkmf + make MANPATH=/usr/share/man +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + make DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" MANPATH=/usr/share/man install.man + install -Dm644 ../license.txt \ + "$pkgdir"/usr/share/licenses/$pkgname/license.txt +} diff --git a/xkeycaps/license.txt b/xkeycaps/license.txt new file mode 100644 index 0000000..09b3b3f --- /dev/null +++ b/xkeycaps/license.txt @@ -0,0 +1,54 @@ +COPYRIGHT Copyright © 1991-1999 by Jamie Zawinski. Permission to use, + copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, + provided that the above copyright notice appear in all copies and + that both that copyright notice and this permission notice appear + in supporting documentation. No representations are made about the + suitability of this software for any purpose. It is provided "as + is" without express or implied warranty. + +AUTHOR + Jamie Zawinski , 10-nov-91. + + XKeyCaps is no longer maintained. See http://www.jwz.org/xkeycaps/ + for details. + + Thanks to everyone who contributed keyboard definitions over the years: + + Jonathan Abbey, Alon Albert, Vladimir Alexiev, David Arnold, David + Axmark, Ruediger Back, Pedro Bayon, Corne Beerse, Eric Benson, + Christoph Berg, Markus Berndt, Roger Binns, Stefan Bj|rnelund, + black@westford.ccur.com, Mark Borges, Volker Bosch, Dave Brooks, + Lorenzo M. Catucci, Michel Catudal, Francois Regis Colin, John + Coppens, Cesar Crusius, Bart Van Cutsem, Matthew Davey, + Christopher Davis, Albrecht Dress, Kristian Ejvind, Michael Elbel, + Joe English, Eric Fischer, Morgan Fletcher, Olivier Galibert, + Carson Gaspar, Andre Gerhard, Daniel Glastonbury, Christian + F. Goetze, Dan R. Greening, Edgar Greuter, John Gotts, Berthold + Gunreben, Jens Hafsteinsson, Adam Hamilton, Magnus Hammerin, + Kenneth Harker, Ben Harris, Mikael Hedin, Tom Ivar Helbekkmo, Mick + Hellstrom, Neil Hendin, Andre Heynatz, Mike Hicks, Alan Ho, Hide + Horiuchi, Dirk Jablonowski, Alan Jaffray, Anders Wegge Jakobsen, + Chris Jones, Jorgen Jonsson, Peter Kaiser, Heikki Kantola, Tufan + Karadere, Benedikt Kessler, Philippe Kipfer, Edwin Klement, John + Knox, Haavard Kvaalen, Frederic Leguern, Simon Leinen, Michael + Lemke, Tor Lillqvist, Torbj|rn Lindgren, Tony Lindstrom, Richard + Lloyd, Ulric Longyear, Ulf Magnusson, Cliff Marcellus, John + A. Martin, Tom McConnell, Grant McDorman, Hein Meling, Jason + Merrill, Aleksandar Milivojevic, Manuel Moreno, Ken Nakata, Pekka + Nikander, Todd Nix, Leif Nixon, Christian Nybo, Antoni Pamies + Olive, Edgar Bonet Orozco, Steven W. Orr, Martin Ouwehand, Daniel + Packman, John Palmieri, Chris Paulson-Ellis, Eduardo Perez, + Michael Piotrowski, Andrej Presern, Jeremy Prior, Dominique + Quatravaux, Matthias Rabe, Garst R. Reese, Peter Remmers, Todd + Richmond, Ken Rose, Pavel Rosendorf, Gael Roualland, Lucien + Saviot, Johannes Schmidt-Fischer, Andreas Schuch, Larry Schwimmer, + Joe Siegrist, Jarrod Smith, Tom Spindler, Robin Stephenson, Joerg + Stippa, D. Stolte, A. A. Stoorvogel, Juergen Stuber, Markus + Stumpf, Jeffrey Templon, Jay Thorne, Anthony Thyssen, Christoph + Tietz, tkil@scrye.com, Juha Vainikka, Poonlap Veeratanabutr, Ivo + Vollrath, Gord Vreugdenhil, Ronan Waide, Jan Wedekind, Bj|rn + Wennberg, Mats Wichmann, Stephen Williams, Barry Warsaw, Steven + Winikoff, Carl Witty, Stephen Wray, Endre Witzoe, Kazutaka Yokota, + Yair Zadik, and Robert Zwickenpflug. + diff --git a/xmlsec/PKGBUILD b/xmlsec/PKGBUILD new file mode 100644 index 0000000..07d39c3 --- /dev/null +++ b/xmlsec/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=xmlsec +pkgver=1.2.32 +_debver=1.2.32 +_debrel=1 +pkgrel=2 +pkgdesc="XML Security Library is a C library based on LibXML2" +license=('X11') +arch=('i686' 'x86_64') +url="https://www.aleksey.com/xmlsec/index.html" +depends=('libxslt' 'libressl' 'gnutls' 'nss' 'libltdl') +makedepends=('quilt') +source=(https://www.aleksey.com/xmlsec/download/${pkgname}1-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/x/xmlsec1/xmlsec1_$_debver-$_debrel.debian.tar.xz) +sha512sums=('39a90e154fe760b9cb01090c0232aa6c88c595fea87a771bebdd7b38ab274e3be719d6314065d9f02b854c7be9c8ec3557e57e0158ff3696413de3424f14389e' + '1187c62e578e2e3a5e34034b1d381c78eb375876022c849ee4623b76d18f24ba6e6fe7638c5b0b7f297ee9376dc0a15f045ef4ee36430b9fc06e0f95b553a584') + +prepare() { + cd ${pkgname}1-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}1-${pkgver} + ./configure --prefix=/usr --disable-static + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +check() { + cd ${pkgname}1-$pkgver + make -k check +} + +package() { + cd ${pkgname}1-${pkgver} + make DESTDIR=${pkgdir} install + install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname} + install -m644 COPYING Copyright ${pkgdir}/usr/share/licenses/${pkgname} +} diff --git a/xmlto/PKGBUILD b/xmlto/PKGBUILD new file mode 100644 index 0000000..25a8417 --- /dev/null +++ b/xmlto/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jesus E. + +pkgname=xmlto +pkgver=0.0.28 +_debver=0.0.28 +_debrel=2.1 +pkgrel=1 +pkgdesc="Convert xml to many other formats" +arch=('i686' 'x86_64') +url="https://pagure.io/xmlto/" +license=('GPL-2') +depends=('libxslt') +makedepends=('docbook-xsl' 'quilt') +source=("https://releases.pagure.org/xmlto/${pkgname}-${pkgver}.tar.bz2" + "https://deb.debian.org/debian/pool/main/x/xmlto/xmlto_$_debver-$_debrel.debian.tar.xz") +sha512sums=('6e0c4968d4f1b7a3b132904182aa72a73f6167553eabdeb65cfafa6295ef7b960541685769d04144207963cca77b0c44db4f9fbb2796348ffcb37b3b399f18f1' + '04acef96ed5200c76ea517ebeab528ee9fa8d43623567fa6e7424702eeb72ffa3efef3161ee42d0571ed2a6c7ae2437739867b5a8877e4d2d378c93b56decdd7') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + + install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" +} + +# vim:set ts=2 sw=2 et: diff --git a/xmms2/PKGBUILD b/xmms2/PKGBUILD new file mode 100644 index 0000000..18e4c01 --- /dev/null +++ b/xmms2/PKGBUILD @@ -0,0 +1,97 @@ +# Maintainer: Jesus E. + +pkgname=xmms2 +pkgver=0.8 +_debver=$pkgver +_debrel=21 +pkgrel=5 +pkgdesc="X-platform Music Multiplexing System 2" +arch=('i686' 'x86_64') +license=('LGPL-2.1') +install=xmms2.install +_depends=('alsa-lib: ALSA output' + 'boost: C++ bindings' + 'curl: play HTTP streams' + 'python-cython: Python bindings' + 'faad2: AAC support' + 'ffmpeg: WMA, avcodec & avformat support' + 'fftw: visualization' + 'flac: FLAC support' + 'fluidsynth: MIDI support' + 'jack: JACK output' + 'libao: libao output' + 'libcdio-paranoia: CDDA support' + 'libmad: MP3 support' + 'libmms: play MMS streams' + 'libmodplug: MOD support' + 'libmpcdec: Musepack support' + 'libsamplerate: vocoder support' + 'libvorbis: Ogg Vorbis support' + 'libxml2: XSPF and podcast support' + 'mpg123: alternative MP3 support' + 'opusfile: Opus support' + 'perl: Perl bindings' + 'ruby: Ruby bindings' + 'speex: Speex support' + 'wavpack: WavPack support') +makedepends=("${_depends[@]%%:*}" 'waf' 'quilt') +optdepends=("${_depends[@]}") +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/x/xmms2/xmms2_${pkgver}+dfsg.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/x/xmms2/xmms2_${_debver}+dfsg-${_debrel}.debian.tar.xz" + "fix-build.patch") +sha512sums=('4fb7e2d1e1f07dc2c32320f18da16f03702a61e28e4a6f2144430a18d788e13d0059413ac2f4b39a1a5e81da74cfe33d37d8b43302ee3684e67bdd1f672ef249' + 'f42486173194517f450fa03c673f3bf14afaf603bca365577c2db2a51c1e82716bb78df530ab37bac3a190e44e0c36bba6b246817e21570bec029018bec94d03' + '0d551c7fa1b273498435e1fe4698c789dceee38ff5cfc03a4e78db432b16d4ee8153a105920d830a580450579d30225e745b4f8defe75b15972c0d264751bf25') + +prepare() { + mv "${pkgname}-${pkgver}+dfsg" "${pkgname}-${pkgver}" + cd ${pkgname}-${pkgver} + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/bp-Get-rid-of-superfluous-argument-self.patch || true + rm -v debian/patches/0019-plugins-airplay-build-against-openssl-1.1.0.patch || true + + quilt push -av + fi + + # additional fixes + patch -Np1 -i ${srcdir}/fix-build.patch + + sed -i '$a#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 /* 1 second of 48kHz 32bit audio */' \ + src/plugins/avcodec/avcodec_compat.h + sed -i 's,#include ,#include ,' src/plugins/cdda/cdda.c + sed -i 's|Werror|Wno-error|g' waftools/*.py +} + +build() { + cd ${pkgname}-${pkgver} + export LINKFLAGS="$LDFLAGS" + waf configure --prefix=/usr --without-ldconfig \ + --with-ruby-archdir=`ruby -e 'puts RbConfig::CONFIG["vendorarchdir"]'` \ + --with-ruby-libdir=`ruby -e 'puts RbConfig::CONFIG["vendorlibdir"]'` \ + --with-perl-archdir=`perl -V:installvendorarch | cut -f2 -d\'` \ + --with-optionals=launcher,xmmsclient++,xmmsclient++-glib,perl,ruby,nycli,pixmaps \ + --without-plugins=airplay,apefile,gvfs,pulse,samba \ + --without-optionals=python + waf build +} + +package() { + cd ${pkgname}-${pkgver} + waf --destdir="$pkgdir" install + + install -d -o46 -g46 "$pkgdir/var/lib/xmms2" + install -d -m755 "$pkgdir"/usr/share/licenses/$pkgname + install -m644 COPYING* "$pkgdir"/usr/share/licenses/$pkgname + + [ -d "$pkgdir"/usr/lib64 ] && \ + { mv "$pkgdir"/usr/lib64/* "$pkgdir"/usr/lib/; rmdir "$pkgdir"/usr/lib64; } || true +} diff --git a/xmms2/fix-build.patch b/xmms2/fix-build.patch new file mode 100644 index 0000000..41640b4 --- /dev/null +++ b/xmms2/fix-build.patch @@ -0,0 +1,22 @@ +--- a/waf 2021-12-02 02:37:32.000000000 +0100 ++++ b/waf 2021-12-02 02:38:18.244832874 +0100 +@@ -32,7 +32,7 @@ + + import os, sys, inspect + +-VERSION="2.0.20" ++VERSION="2.0.22" + REVISION="8fe7fadebc916ab81e89099c584ee580" + GIT="x" + INSTALL='' +--- a/waflib/Context.py 2021-12-02 02:40:59.000000000 +0100 ++++ b/waflib/Context.py 2021-12-02 02:42:16.795871887 +0100 +@@ -12,7 +12,7 @@ + else: + import imp + HEXVERSION=0x2001400 +-WAFVERSION="2.0.20" ++WAFVERSION="2.0.22" + WAFREVISION="668769470956da8c5b60817cb8884cd7d0f87cd4" + WAFNAME="waf" + ABI=20 diff --git a/xmms2/xmms2.install b/xmms2/xmms2.install new file mode 100644 index 0000000..d099a98 --- /dev/null +++ b/xmms2/xmms2.install @@ -0,0 +1,25 @@ +post_install() { + if ! getent group xmms2 &>/dev/null; then + groupadd -r -g 46 xmms2 >/dev/null + fi + if ! getent passwd xmms2 &>/dev/null; then + useradd -r -u 46 -g xmms2 -d /var/lib/xmms2 -s /bin/nologin -G audio xmms2 >/dev/null + fi + xmms2_shell=$(getent passwd xmms2 | cut -d: -f7) + if [ "$xmms2_shell" != '/bin/nologin' ]; then + chsh -s /bin/nologin xmms2 &>/dev/null + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + if getent passwd xmms2 &>/dev/null; then + userdel xmms2 >/dev/null + fi + if getent group xmms2 &>/dev/null; then + groupdel xmms2 >/dev/null + fi +} diff --git a/xmoto/PKGBUILD b/xmoto/PKGBUILD new file mode 100644 index 0000000..5bed6af --- /dev/null +++ b/xmoto/PKGBUILD @@ -0,0 +1,68 @@ +# Maintainer: Jesus E. + +pkgname=xmoto +pkgver=0.6.2 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="A challenging, free and libre 2D motocross platform game, where physics have an important role" +arch=('i686' 'x86_64') +url='https://xmoto.tuxfamily.org' +license=('GPL-2' 'LGPL-2.1' 'Modified-BSD' 'Simplified-BSD' 'Original-BSD' 'Expat') +depends=('libjpeg-turbo' 'libpng' 'lua' 'ode' 'curl' 'sqlite' 'glu' 'libxdg-basedir' 'libxml2' + 'sdl2_mixer' 'sdl2_net' 'sdl2_ttf') +makedepends=('intltool' 'cmake' 'ninja' 'quilt') +groups=('games') +source=("${pkgname}-${pkgver}.tar.xz::https://deb.debian.org/debian/pool/main/x/xmoto/xmoto_${pkgver}+repack.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/x/xmoto/xmoto_${_debver}+repack-${_debrel}.debian.tar.xz" + "installation-directories.patch") +sha512sums=('abecf9c194e56bd4ddf2335de88aacc6ba016a3f49d0f96959a4553f6490c9e432ce2ec9fd423d71c6f2b15d4db173ef4e6fa3b187db1c0be05a36c4900c868d' + '4ee2ba47719ebf9a160f6af0b79e2c0f4665a1d8bfac8a6d42baf8c14eed757a44ad4f5fd1f2682a10e4a23d47946dca89930b22da720997c0cb660c62a58dec' + 'ed1ce53d3c99b3a64137afcba2c34f429131e9cd0349db61b7feac86b5d4dc6fd6fd9db2f54ba5d9dfce8d1dbac1986ab2992b7979c0dda85856e80048a45c60') + +prepare() { + mkdir -p build + + cd ${pkgname}-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/system-chipmunk.patch || true + rm -v debian/patches/installation-directories.patch || true + + quilt push -av + fi + + # fixing data-directories being FHS-compliant + patch -Np1 -i "${srcdir}/installation-directories.patch" + sed -i "s|DESTINATION bin|DESTINATION games|g" src/CMakeLists.txt +} + +build() { + cd build + cmake ../${pkgname}-${pkgver} \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr + ninja + ninja xmoto_pack +} + +package() { + cd build + DESTDIR="${pkgdir}" ninja install + + # cleaning data + rm -rf "${pkgdir}/usr/share/xmoto" + + # install man page + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/doc/xmoto.6" -t "${pkgdir}//usr/share/man/man6" + + # install license + install -Dm644 "${srcdir}/${pkgname}-${pkgver}/COPYING" "${srcdir}/${pkgname}-${pkgver}/debian/copyright" -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xmoto/installation-directories.patch b/xmoto/installation-directories.patch new file mode 100644 index 0000000..84f9119 --- /dev/null +++ b/xmoto/installation-directories.patch @@ -0,0 +1,33 @@ +--- a/bin/CMakeLists.txt ++++ b/bin/CMakeLists.txt +@@ -55,7 +55,7 @@ + ) + ") + else() +- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/xmoto.bin" DESTINATION share/xmoto) +- install(DIRECTORY Textures/Musics DESTINATION share/xmoto/Textures) +- install(DIRECTORY Textures/Fonts DESTINATION share/xmoto/Textures) ++ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/xmoto.bin" DESTINATION share/games/xmoto) ++ install(DIRECTORY Textures/Musics DESTINATION share/games/xmoto/Textures) ++ install(DIRECTORY Textures/Fonts DESTINATION share/games/xmoto/Textures) + endif() +--- a/src/common/VFileIO.cpp ++++ b/src/common/VFileIO.cpp +@@ -1323,7 +1323,7 @@ + /* Try some default fallbacks */ + if (!m_bGotSystemDataDir) { + const std::vector dataDirs = { +- "/usr/share", "/usr/local/share", ++ "/usr/share/games" + }; + for (auto &dir : dataDirs) { + if (isDir(dir + "/xmoto")) { +@@ -1338,7 +1338,7 @@ + m_SystemDataDir = "/usr/share"; + } + +- m_SystemLocaleDir = m_SystemDataDir + "/locale"; ++ m_SystemLocaleDir = "/usr/share/locale"; + m_SystemDataDir = m_SystemDataDir + "/xmoto"; + #endif + #endif /* Assume unix-like */ diff --git a/xorg-imake/LICENSE b/xorg-imake/LICENSE new file mode 100644 index 0000000..9da437d --- /dev/null +++ b/xorg-imake/LICENSE @@ -0,0 +1,131 @@ +gccmakedep: + + XFree86 code without an explicit copyright is covered by the following copy- + right/license: + + Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is fur- + nished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- + NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- + NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of the XFree86 Project shall not + be used in advertising or otherwise to promote the sale, use or other deal- + ings in this Software without prior written authorization from the XFree86 + Project. + +imake: + + Copyright (c) 1985, 1986, 1987, 1998 The Open Group + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of The Open Group shall not be + used in advertising or otherwise to promote the sale, use or other dealings + in this Software without prior written authorization from The Open Group. + * + * Original Author: + * Todd Brunhoff + * Tektronix, inc. + * While a guest engineer at Project Athena, MIT + +lndir: + + Copyright (c) 1990, 1998 The Open Group + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of The Open Group shall not be + used in advertising or otherwise to promote the sale, use or other dealings + in this Software without prior written authorization from The Open Group. + +makedepend: + + Copyright (c) 1993, 1994, 1998 The Open Group + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of The Open Group shall not be + used in advertising or otherwise to promote the sale, use or other dealings + in this Software without prior written authorization from The Open Group. + +util-macros: + + Copyright 2005 Sun Microsystems, Inc. All rights reserved. + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of the copyright holders shall + not be used in advertising or otherwise to promote the sale, use or + other dealings in this Software without prior written authorization + from the copyright holders. diff --git a/xorg-imake/PKGBUILD b/xorg-imake/PKGBUILD new file mode 100644 index 0000000..3466906 --- /dev/null +++ b/xorg-imake/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer: Jesus E. + +# Based on imake package + +pkgname=xorg-imake +pkgver=1.0.8 +pkgrel=1 +pkgdesc="X.Org imake program and related utilities" +arch=('i686' 'x86_64') +url="https://xorg.freedesktop.org/" +license=('X11') +depends=('glibc') +makedepends=('pkg-config' 'xenocara-proto' 'perl' 'xenocara-util-macros' 'xenocara-font-util') +optdepends=('perl: for mkhtmlindex') +provides=('imake') +conflicts=('imake') +replaces=('imake') +validpgpkeys=('4A193C06D35E7C670FA4EF0BA2FB9E081F2D130E') # Alan Coopersmith +source=(https://xorg.freedesktop.org/releases/individual/util/imake-$pkgver.tar.bz2 + https://xorg.freedesktop.org/releases/individual/util/gccmakedep-1.0.3.tar.bz2 + https://xorg.freedesktop.org/releases/individual/util/lndir-1.0.3.tar.bz2 + https://xorg.freedesktop.org/releases/individual/util/makedepend-1.0.5.tar.bz2 + https://xorg.freedesktop.org/releases/individual/util/xorg-cf-files-1.0.6.tar.bz2{,.sig} + gnu+linux-config.patch + LICENSE) +sha512sums=('5352b0148664506c8eb7ba80f95fced146d150398673547ba0b2c7c966a382bc21de43dfb8e0d74e38a0a563f16ddbec48bf8c8e6daa1a0899a95403579d7728' + '563b2897770a4df2792ea3eae8183a1f9e78192b7efc9c8296ee68d1cba6e72fa962a88e3251bb780df776e2aa7e80d74d5096675c61526c232aefa4f9e6a5fc' + 'c9f03c825c627935abe399bf8292bbf69304cb9e9d65a4c860b49e32e2ed4dde25bf658a5ab2116cd215381d0a52f464a8a53469c27adddbd9fa2bfd135a7289' + 'e28d71c3ce4f74ca6479771fcdd123c19ab18e3f2aa690a7798237f21f13fca4c4d66d7b7b1d708c2c214b8e17f8fe37e6cf5b75a4d2b88514c50addea2600cb' + '1749a5fbcda2c15c300028abce79a3304cfb10f215bf98cf30558144eb64f9fa06a69203159f44405224ed567ac5bc0ff1222e3656367f69acc99f44871424fa' + 'SKIP' + 'e2a42d60ca39a14ac7944af04eb76dfe9b194cfad8d853730a29aa43f93f2b4acce8d6e8d7a36901b201822c8c5879093fadb6e63f448f5915878909e3797735' + '1ded8ef51405e3b0144a633b612270cb1c71e7365852653284a587972f68a390252ca73350517bac621006cab6410745974a960d9fd0d3f76dcb9face69aada9') + +prepare() { + cd xorg-cf-files-1.0.6 + patch -p1 -i ../gnu+linux-config.patch +} + +build() { + for i in *; do + if [ -d "$i" ]; then + pushd "$i" + ./configure --prefix=/usr --mandir=/usr/share/man + make + popd + fi + done +} + +package() { + for i in *; do + if [ -d "$i" ]; then + pushd "$i" + make DESTDIR="$pkgdir" install + popd + fi + done + install -D -m644 "$srcdir/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/xorg-imake/gnu+linux-config.patch b/xorg-imake/gnu+linux-config.patch new file mode 100644 index 0000000..e557922 --- /dev/null +++ b/xorg-imake/gnu+linux-config.patch @@ -0,0 +1,31 @@ +--- xorg-cf-files-1.0.1/linux.cf.orig 2006-03-04 18:40:43.000000000 +0000 ++++ xorg-cf-files-1.0.1/linux.cf 2006-03-04 18:41:48.000000000 +0000 +@@ -193,6 +193,13 @@ + #define FSUseSyslog YES + #endif + ++#define FSUseSyslog YES ++#define BuildRman NO ++#define BuildHtmlManPages NO ++#define ProjectRoot /usr ++#define ManPath /usr/share/man ++#define XappLoadDir /usr/share/X11/app-defaults ++ + #ifndef HasDevRandom + # define HasDevRandom YES + # ifndef RandomDeviceName +--- xorg-cf-files-1.0.2/X11.tmpl.orig 2006-07-15 10:45:23.000000000 +0000 ++++ xorg-cf-files-1.0.2/X11.tmpl 2006-07-15 10:46:19.000000000 +0000 +@@ -1502,10 +1502,10 @@ + #define DocPdfDir $(DOCDIR)/PDF + #endif + #ifndef FontDir +-#define FontDir $(LIBDIR)/fonts ++#define FontDir /usr/share/fonts + #endif + #ifndef FontEncDir +-#define FontEncDir $(LIBDIR)/fonts/encodings ++#define FontEncDir /usr/share/fonts/encodings + #endif + #ifndef AdmDir + #define AdmDir /usr/adm diff --git a/xorg-input-evdev-debug/PKGBUILD b/xorg-input-evdev-debug/PKGBUILD new file mode 100644 index 0000000..98a3da4 --- /dev/null +++ b/xorg-input-evdev-debug/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-evdev package + +pkgname=xorg-input-evdev-debug +pkgver=2.10.6 +pkgrel=4 +pkgdesc="X.Org evdev input driver" +arch=(i686 x86_64) +url="https://xorg.freedesktop.org/" +license=('Expat') +depends=('libeudev' 'mtdev' 'libevdev') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-evdev' 'xenocara-input-evdev') +conflicts=('xf86-input-evdev' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-evdev' 'xf86-input-libinput') +options=('!makeflags') +groups=('xenocara-drivers-debug' 'xorg-drivers-debug') +source=(https://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-$pkgver.tar.bz2{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('560b0a6491d50a46913a5890a35c0367e59f550670993493bd9712d712a9747ddaa6fe5086daabf2fcafa24b0159383787eb273da4a2a60c089bfc0a77ad2ad1' + 'SKIP') +validpgpkeys=('3C2C43D9447D5938EF4551EBE23B7E70B467F0BF') # Peter Hutterer (Who-T) + +prepare() { + cd "xf86-input-evdev-$pkgver" + autoreconf -vfi +} + +build() { + cd "xf86-input-evdev-$pkgver" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xf86-input-evdev-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-input-evdev/PKGBUILD b/xorg-input-evdev/PKGBUILD new file mode 100644 index 0000000..568e7a0 --- /dev/null +++ b/xorg-input-evdev/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-evdev package + +pkgname=xorg-input-evdev +pkgver=2.10.6 +pkgrel=2 +pkgdesc="X.Org evdev input driver" +arch=(i686 x86_64) +url="https://xorg.freedesktop.org/" +license=('Expat') +depends=('libeudev' 'mtdev' 'libevdev') +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-evdev') +conflicts=('xf86-input-evdev' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-evdev' 'xf86-input-libinput') +options=('!makeflags') +groups=('xenocara-drivers' 'xorg-drivers') +source=(https://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-$pkgver.tar.bz2{,.sig}) +sha512sums=('560b0a6491d50a46913a5890a35c0367e59f550670993493bd9712d712a9747ddaa6fe5086daabf2fcafa24b0159383787eb273da4a2a60c089bfc0a77ad2ad1' + 'SKIP') +validpgpkeys=('3C2C43D9447D5938EF4551EBE23B7E70B467F0BF') # Peter Hutterer (Who-T) + +prepare() { + cd "xf86-input-evdev-$pkgver" + autoreconf -vfi +} + +build() { + cd "xf86-input-evdev-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "xf86-input-evdev-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-input-wacom-debug/PKGBUILD b/xorg-input-wacom-debug/PKGBUILD new file mode 100644 index 0000000..50689a5 --- /dev/null +++ b/xorg-input-wacom-debug/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-wacom package + +pkgname=xorg-input-wacom-debug +pkgver=0.39.0 +pkgrel=1 +pkgdesc="X.Org Wacom tablet driver" +arch=(i686 x86_64) +url="https://linuxwacom.github.io/" +license=(GPL-2) +depends=(libxi libxinerama libxrandr libeudev) +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-wacom') +conflicts=('xf86-input-wacom' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-wacom') +source=(https://github.com/linuxwacom/xf86-input-wacom/releases/download/xf86-input-wacom-$pkgver/xf86-input-wacom-$pkgver.tar.bz2{,.sig}) +options=(!strip) # It's required for debug packages +sha512sums=('9ad92c86c4ba3587d68e2107057c89dfe8628c0a2ec882f5a424ab4983c18ff6048489d7f6d3a8de87403744f74de1982de25327fc955bb5c21346a242e0aaa3' + 'SKIP') +validpgpkeys=('9A12ECCC5383CA2AF5B42CDCA6DC66911B2127D5') # Jason Gerecke +validpgpkeys+=('3C2C43D9447D5938EF4551EBE23B7E70B467F0BF') # "Peter Hutterer (Who-T) " +validpgpkeys+=('5222AA87620F928D2C16F62BDB4ABF7C3424190B') # "Aaron Armstrong Skomra " +validpgpkeys+=('FBE078781106933D3DDCF93E5B4EA609784983CA') # "Jason Gerecke " + +prepare() { + cd "xf86-input-wacom-$pkgver" + autoreconf -vfi +} + +build() { + cd "xf86-input-wacom-$pkgver" + + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr --with-udev-rules-dir=/lib/udev/rules.d + make +} + +package() { + cd "xf86-input-wacom-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 GPL "$pkgdir/usr/share/licenses/$pkgname/GPL" +} diff --git a/xorg-input-wacom/PKGBUILD b/xorg-input-wacom/PKGBUILD new file mode 100644 index 0000000..6acd528 --- /dev/null +++ b/xorg-input-wacom/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +# Based on xf86-input-wacom package + +pkgname=xorg-input-wacom +pkgver=0.39.0 +pkgrel=1 +pkgdesc="X.Org Wacom tablet driver" +arch=(i686 x86_64) +url="https://linuxwacom.github.io/" +license=(GPL-2) +depends=(libxi libxinerama libxrandr libeudev) +makedepends=('xenocara-server-devel' 'X-ABI-XINPUT_VERSION=24.1' 'xenocara-proto' 'xenocara-util-macros') +provides=('xf86-input-wacom') +conflicts=('xf86-input-wacom' 'xenocara-server<1.20' 'X-ABI-XINPUT_VERSION<24.1' 'X-ABI-XINPUT_VERSION>=25') +replaces=('xf86-input-wacom') +source=(https://github.com/linuxwacom/xf86-input-wacom/releases/download/xf86-input-wacom-$pkgver/xf86-input-wacom-$pkgver.tar.bz2{,.sig}) +sha512sums=('9ad92c86c4ba3587d68e2107057c89dfe8628c0a2ec882f5a424ab4983c18ff6048489d7f6d3a8de87403744f74de1982de25327fc955bb5c21346a242e0aaa3' + 'SKIP') +validpgpkeys=('9A12ECCC5383CA2AF5B42CDCA6DC66911B2127D5') # Jason Gerecke +validpgpkeys+=('3C2C43D9447D5938EF4551EBE23B7E70B467F0BF') # "Peter Hutterer (Who-T) " +validpgpkeys+=('5222AA87620F928D2C16F62BDB4ABF7C3424190B') # "Aaron Armstrong Skomra " +validpgpkeys+=('FBE078781106933D3DDCF93E5B4EA609784983CA') # "Jason Gerecke " + +prepare() { + cd "xf86-input-wacom-$pkgver" + autoreconf -vfi +} + +build() { + cd "xf86-input-wacom-$pkgver" + ./configure --prefix=/usr --with-udev-rules-dir=/lib/udev/rules.d + make +} + +package() { + cd "xf86-input-wacom-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 GPL "$pkgdir/usr/share/licenses/$pkgname/GPL" +} diff --git a/xorg-video-fbdev-debug/PKGBUILD b/xorg-video-fbdev-debug/PKGBUILD new file mode 100644 index 0000000..1105005 --- /dev/null +++ b/xorg-video-fbdev-debug/PKGBUILD @@ -0,0 +1,53 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-fbdev package + +pkgname=xorg-video-fbdev-debug +pkgver=0.5.0 +pkgrel=3 +pkgdesc="X.Org framebuffer video driver" +arch=(i686 x86_64) +license=('X11') +url="https://xorg.freedesktop.org/" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-fbdev') +conflicts=('xf86-video-fbdev' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-fbdev' 'xf86-video-amdgpu') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +source=(https://xorg.freedesktop.org/releases/individual/driver/xf86-video-fbdev-$pkgver.tar.bz2 + gcc8.patch) +options=(!strip) # It's required for debug packages +sha512sums=('c1217b943bbe3301b3c2a8649ed1004c3c67b02607bd56bbc14f6dfa05e7f0184332c81a6a19595514745501ed88526aee932e555779b7c3a8233646b0979448' + '82c53039d1f3aa1898f7fb4849a7e9af4ffb518334a5c179f48f90c7bab82138fb0be59d0e41b712e499e176b3ab62f25996b5a6569bd9ddfc94ade567cfcb4a') + +prepare() { + cd "xf86-video-fbdev-$pkgver" + patch -p0 -i "$srcdir/gcc8.patch" + autoreconf -vfi +} + +build() { + cd "xf86-video-fbdev-$pkgver" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xf86-video-fbdev-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-video-fbdev-debug/gcc8.patch b/xorg-video-fbdev-debug/gcc8.patch new file mode 100644 index 0000000..87b592a --- /dev/null +++ b/xorg-video-fbdev-debug/gcc8.patch @@ -0,0 +1,11 @@ +--- src/fbdev.c 2018-05-11 21:15:36.650039778 +0200 ++++ src/fbdev.c.new 2018-05-11 21:17:27.063021717 +0200 +@@ -1008,7 +1008,7 @@ + fPtr->CloseScreen = pScreen->CloseScreen; + pScreen->CloseScreen = FBDevCloseScreen; + +-#if XV ++#ifdef XV + { + XF86VideoAdaptorPtr *ptr; + diff --git a/xorg-video-fbdev/PKGBUILD b/xorg-video-fbdev/PKGBUILD new file mode 100644 index 0000000..7e43af7 --- /dev/null +++ b/xorg-video-fbdev/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-fbdev package + +pkgname=xorg-video-fbdev +pkgver=0.5.0 +pkgrel=3 +pkgdesc="X.Org framebuffer video driver" +arch=(i686 x86_64) +license=('X11') +url="https://xorg.freedesktop.org/" +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-fbdev') +conflicts=('xf86-video-fbdev' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-fbdev' 'xf86-video-amdgpu') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +source=(https://xorg.freedesktop.org/releases/individual/driver/xf86-video-fbdev-$pkgver.tar.bz2 + gcc8.patch) +sha512sums=('c1217b943bbe3301b3c2a8649ed1004c3c67b02607bd56bbc14f6dfa05e7f0184332c81a6a19595514745501ed88526aee932e555779b7c3a8233646b0979448' + '82c53039d1f3aa1898f7fb4849a7e9af4ffb518334a5c179f48f90c7bab82138fb0be59d0e41b712e499e176b3ab62f25996b5a6569bd9ddfc94ade567cfcb4a') + +prepare() { + cd "xf86-video-fbdev-$pkgver" + patch -p0 -i "$srcdir/gcc8.patch" + autoreconf -vfi +} + +build() { + cd "xf86-video-fbdev-$pkgver" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr + make +} + +package() { + cd "xf86-video-fbdev-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-video-fbdev/gcc8.patch b/xorg-video-fbdev/gcc8.patch new file mode 100644 index 0000000..87b592a --- /dev/null +++ b/xorg-video-fbdev/gcc8.patch @@ -0,0 +1,11 @@ +--- src/fbdev.c 2018-05-11 21:15:36.650039778 +0200 ++++ src/fbdev.c.new 2018-05-11 21:17:27.063021717 +0200 +@@ -1008,7 +1008,7 @@ + fPtr->CloseScreen = pScreen->CloseScreen; + pScreen->CloseScreen = FBDevCloseScreen; + +-#if XV ++#ifdef XV + { + XF86VideoAdaptorPtr *ptr; + diff --git a/xorg-video-nouveau-debug/COPYING b/xorg-video-nouveau-debug/COPYING new file mode 100644 index 0000000..c045203 --- /dev/null +++ b/xorg-video-nouveau-debug/COPYING @@ -0,0 +1,39 @@ +Copyright © 1993-2007 NVIDIA, Corporation +Copyright © 1994 X Consortium +Copyright © 1996-1997 David J. McKay +Copyright © 1999 Mark Vojkovich +Copyright © 2005-2006 Erik Waling +Copyright © 2005 Adam Jackson +Copyright © 2005 Sun Microsystems, Inc. +Copyright © 2007-2008 Maarten Maathuis +Copyright © 2007, 2008 Stephane Marchesin +Copyright © 2007-2008 Stuart Bennett +Copyright © 2007 Arthur Huillet +Copyright © 2007 Jeremy Kolb +Copyright © 2007 Patrice Mandin +Copyright © 2007, 2008 Ben Skeggs +Copyright © 2007 Peter Winters +Copyright © 2007, 2009 Nouveau Project +Copyright © 2007, 2009, 2012, 2013, 2014 Red Hat, Inc. +Copyright © 2009 Francisco Jerez +Copyright © 2013-2014 Intel Corporation + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +DEALINGS IN THE SOFTWARE. diff --git a/xorg-video-nouveau-debug/PKGBUILD b/xorg-video-nouveau-debug/PKGBUILD new file mode 100644 index 0000000..d0f688c --- /dev/null +++ b/xorg-video-nouveau-debug/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-nouveau package + +pkgname=xorg-video-nouveau-debug +pkgver=1.0.16 +_debver=1.0.16 +_debrel=1 +pkgrel=4 +pkgdesc="Free Software 3D acceleration driver for nVidia cards" +arch=('i686' 'x86_64') +url="https://nouveau.freedesktop.org/" +license=('Expat') +depends=('libeudev' 'mesa') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'eudev' 'xenocara-util-macros' 'quilt') +provides=('xf86-video-nouveau') +conflicts=('xf86-video-nouveau' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-nouveau') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +source=(https://xorg.freedesktop.org/archive/individual/driver/xf86-video-nouveau-$pkgver.tar.bz2{,.sig} + https://deb.debian.org/debian/pool/main/x/xserver-xorg-video-nouveau/xserver-xorg-video-nouveau_$_debver-$_debrel.diff.gz + COPYING) +options=(!strip) # It's required for debug packages +sha512sums=('41b7839c37372660968ab7da2bc3d9feef3cab4e994d05d4ba6e59071f0d1b1f8d7dcdbcb15a42a375a556d28dc067f9ffe45d73c1d121ad307d199107ade3e0' + 'SKIP' + '8fef1ceba2b294da49bf5cafae8af627f9bf64b77791849ea93f9f53b8c33f4ec28d7c0c03d6caf22533940c6993249d8b7cce042e6bf6a88c43967ae950e85e' + '5dbee64885bf0c695b99c9dd75d592598f4ac21155c556a344c1825c3e9b3cea677ad43b5bc1cb69efda2a95589513e439952b84ed427f9b49eac0c3c87db3ad') +validpgpkeys=('B97BD6A80CAC4981091AE547FE558C72A67013C3' # Maarten Lankhorst + 'C9FA6B58BC799041500F769AC5469FB8758F9C2B' # Lyude Paul + 'BFB9B0C276D5767C710086EFB178BE4EA075DE07') # Ilia Mirkin + +prepare() { + cd "xf86-video-nouveau-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + patch -p1 -i "$srcdir"/xserver-xorg-video-nouveau_$_debver-$_debrel.diff + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "xf86-video-nouveau-$pkgver" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xf86-video-nouveau-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-video-nouveau/COPYING b/xorg-video-nouveau/COPYING new file mode 100644 index 0000000..c045203 --- /dev/null +++ b/xorg-video-nouveau/COPYING @@ -0,0 +1,39 @@ +Copyright © 1993-2007 NVIDIA, Corporation +Copyright © 1994 X Consortium +Copyright © 1996-1997 David J. McKay +Copyright © 1999 Mark Vojkovich +Copyright © 2005-2006 Erik Waling +Copyright © 2005 Adam Jackson +Copyright © 2005 Sun Microsystems, Inc. +Copyright © 2007-2008 Maarten Maathuis +Copyright © 2007, 2008 Stephane Marchesin +Copyright © 2007-2008 Stuart Bennett +Copyright © 2007 Arthur Huillet +Copyright © 2007 Jeremy Kolb +Copyright © 2007 Patrice Mandin +Copyright © 2007, 2008 Ben Skeggs +Copyright © 2007 Peter Winters +Copyright © 2007, 2009 Nouveau Project +Copyright © 2007, 2009, 2012, 2013, 2014 Red Hat, Inc. +Copyright © 2009 Francisco Jerez +Copyright © 2013-2014 Intel Corporation + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +DEALINGS IN THE SOFTWARE. diff --git a/xorg-video-nouveau/PKGBUILD b/xorg-video-nouveau/PKGBUILD new file mode 100644 index 0000000..1f30771 --- /dev/null +++ b/xorg-video-nouveau/PKGBUILD @@ -0,0 +1,66 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-nouveau package + +pkgname=xorg-video-nouveau +pkgver=1.0.16 +_debver=1.0.16 +_debrel=1 +pkgrel=4 +pkgdesc="Free Software 3D acceleration driver for nVidia cards" +arch=('i686' 'x86_64') +url="https://nouveau.freedesktop.org/" +license=('Expat') +depends=('libeudev' 'mesa') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'eudev' 'xenocara-util-macros' 'quilt') +provides=('xf86-video-nouveau') +conflicts=('xf86-video-nouveau' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-nouveau') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +source=(https://xorg.freedesktop.org/archive/individual/driver/xf86-video-nouveau-$pkgver.tar.bz2{,.sig} + https://deb.debian.org/debian/pool/main/x/xserver-xorg-video-nouveau/xserver-xorg-video-nouveau_$_debver-$_debrel.diff.gz + COPYING) +sha512sums=('41b7839c37372660968ab7da2bc3d9feef3cab4e994d05d4ba6e59071f0d1b1f8d7dcdbcb15a42a375a556d28dc067f9ffe45d73c1d121ad307d199107ade3e0' + 'SKIP' + '8fef1ceba2b294da49bf5cafae8af627f9bf64b77791849ea93f9f53b8c33f4ec28d7c0c03d6caf22533940c6993249d8b7cce042e6bf6a88c43967ae950e85e' + '5dbee64885bf0c695b99c9dd75d592598f4ac21155c556a344c1825c3e9b3cea677ad43b5bc1cb69efda2a95589513e439952b84ed427f9b49eac0c3c87db3ad') +validpgpkeys=('B97BD6A80CAC4981091AE547FE558C72A67013C3' # Maarten Lankhorst + 'C9FA6B58BC799041500F769AC5469FB8758F9C2B' # Lyude Paul + 'BFB9B0C276D5767C710086EFB178BE4EA075DE07') # Ilia Mirkin + +prepare() { + cd "xf86-video-nouveau-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + patch -p1 -i "$srcdir"/xserver-xorg-video-nouveau_$_debver-$_debrel.diff + + quilt push -av + fi + autoreconf -vfi +} + +build() { + cd "xf86-video-nouveau-$pkgver" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr + make +} + +package() { + cd "xf86-video-nouveau-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir/COPYING" "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-video-sisusb-debug/PKGBUILD b/xorg-video-sisusb-debug/PKGBUILD new file mode 100644 index 0000000..e6b8797 --- /dev/null +++ b/xorg-video-sisusb-debug/PKGBUILD @@ -0,0 +1,50 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-sisusb package + +pkgname=xorg-video-sisusb-debug +pkgver=0.9.7 +pkgrel=4 +pkgdesc="X.Org SiS USB video driver" +arch=(i686 x86_64) +url="https://xorg.freedesktop.org/" +license=('Modified-BSD') +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-sisusb') +conflicts=('xf86-video-sisusb' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-sisusb') +groups=('xenocara-video-drivers-debug' 'xenocara-video-debug' 'xenocara-drivers-debug' + 'xorg-video-drivers-debug' 'xorg-video-debug' 'xorg-drivers-debug') +source=(https://xorg.freedesktop.org/releases/individual/driver/xf86-video-sisusb-$pkgver.tar.bz2) +options=(!strip) # It's required for debug packages +sha512sums=('6edaf54bad80a261fa22606cad6619992e04560e132b3e68be30c80ebf2e599bc157118e725f67c5d96adc09ed036cc0c78ae0e0ce926708726f953a2fc34f02') + +prepare() { + cd "xf86-video-sisusb-$pkgver" + autoreconf -vfi +} + +build() { + cd "xf86-video-sisusb-$pkgver" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + # It's required for debug packages + export CFLAGS=${CFLAGS/-O2/-O0 -g3} + export CXXFLAGS=${CXXFLAGS/-O2/-O0 -g3} + + ./configure --prefix=/usr + make +} + +package() { + cd "xf86-video-sisusb-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-video-sisusb/PKGBUILD b/xorg-video-sisusb/PKGBUILD new file mode 100644 index 0000000..289018b --- /dev/null +++ b/xorg-video-sisusb/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +# Based on xf86-video-sisusb package + +pkgname=xorg-video-sisusb +pkgver=0.9.7 +pkgrel=4 +pkgdesc="X.Org SiS USB video driver" +arch=(i686 x86_64) +url="https://xorg.freedesktop.org/" +license=('Modified-BSD') +depends=('glibc') +makedepends=('xenocara-server-devel' 'X-ABI-VIDEODRV_VERSION=24.0' 'xenocara-util-macros') +provides=('xf86-video-sisusb') +conflicts=('xf86-video-sisusb' 'xenocara-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSION>=25') +replaces=('xf86-video-sisusb') +groups=('xenocara-video-drivers' 'xenocara-video' 'xenocara-drivers' + 'xorg-video-drivers' 'xorg-video' 'xorg-drivers') +source=(https://xorg.freedesktop.org/releases/individual/driver/xf86-video-sisusb-$pkgver.tar.bz2) +sha512sums=('6edaf54bad80a261fa22606cad6619992e04560e132b3e68be30c80ebf2e599bc157118e725f67c5d96adc09ed036cc0c78ae0e0ce926708726f953a2fc34f02') + +prepare() { + cd "xf86-video-sisusb-$pkgver" + autoreconf -vfi +} + +build() { + cd "xf86-video-sisusb-$pkgver" + + # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf + # With them, module fail to load with undefined symbol. + # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845 + export CFLAGS=${CFLAGS/-fno-plt} + export CXXFLAGS=${CXXFLAGS/-fno-plt} + export LDFLAGS=${LDFLAGS/,-z,now} + + ./configure --prefix=/usr + make +} + +package() { + cd "xf86-video-sisusb-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-xcursor-themes/PKGBUILD b/xorg-xcursor-themes/PKGBUILD new file mode 100644 index 0000000..ecc7861 --- /dev/null +++ b/xorg-xcursor-themes/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Jesus E. + +# Based on xcursor-themes package + +pkgname=xorg-xcursor-themes +pkgver=1.0.6 +pkgrel=2 +pkgdesc="X.Org Cursor themes" +arch=(any) +url="https://xorg.freedesktop.org/" +license=('X11') +makedepends=('pkg-config' 'xorg-xcursorgen' 'xenocara-util-macros') +provides=('xcursor-themes') +conflicts=('xcursor-themes') +replaces=('xcursor-themes') +source=(https://xorg.freedesktop.org/releases/individual/data/xcursor-themes-$pkgver.tar.bz2{,.sig}) +sha512sums=('2ad3586a5571a5ddc0001187362b54b839644916164834213af98e58698044aec4392dd6e1e42f1794fda85c8fedf259b09214a9636bd0e71a1629c710f198d3' + 'SKIP') +validpgpkeys=('4A193C06D35E7C670FA4EF0BA2FB9E081F2D130E') # Alan Coopersmith + +prepare() { + cd "xcursor-themes-$pkgver" + autoreconf -vfi +} + +build() { + cd "xcursor-themes-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "xcursor-themes-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-xcursorgen/PKGBUILD b/xorg-xcursorgen/PKGBUILD new file mode 100644 index 0000000..f4297c0 --- /dev/null +++ b/xorg-xcursorgen/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=xorg-xcursorgen +pkgver=1.0.7 +pkgrel=2 +pkgdesc="Create an X cursor file from PNG images" +arch=('i686' 'x86_64') +url="https://xorg.freedesktop.org/" +license=('Expat') +depends=('libx11' 'libxcursor' 'libpng') +makedepends=('xenocara-util-macros') +groups=('xenocara-apps' 'xenocara' 'xorg-apps' 'xorg') +source=(https://xorg.freedesktop.org/archive/individual/app/xcursorgen-${pkgver}.tar.bz2{,.sig}) +sha512sums=('bd13ad23691d3daa2d5dcdc5902cf62e3dcb97a0289aff362e6cd85866a1d8cafb64f98800a75bfb4cf1f3c76244ca20201847dff594543d136d0abaec7011d2' + 'SKIP') +validpgpkeys=('4A193C06D35E7C670FA4EF0BA2FB9E081F2D130E') # Alan Coopersmith + +prepare() { + cd "xcursorgen-$pkgver" + autoreconf -vfi +} + +build() { + cd "xcursorgen-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "xcursorgen-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xorg-xdm/PKGBUILD b/xorg-xdm/PKGBUILD new file mode 100644 index 0000000..0a158d9 --- /dev/null +++ b/xorg-xdm/PKGBUILD @@ -0,0 +1,100 @@ +# Maintainer: Jesus E. + +pkgname=xorg-xdm +pkgver=1.1.11 +_debver=$pkgver +_debrel=3 +pkgrel=9 +pkgdesc="X Display Manager" +arch=(i686 x86_64) +url="https://xorg.freedesktop.org/" +license=('X11') +depends=('libxaw' 'libxinerama' 'xenocara-xrdb' 'xenocara-sessreg' 'libxft' 'libxcrypt') +makedepends=('pkg-config' 'xenocara-util-macros' 'libxtrans' 'quilt') +backup=(etc/X11/xdm/Xaccess etc/X11/xdm/Xresources etc/X11/xdm/Xservers etc/X11/xdm/xdm-config etc/X11/xdm/Xsetup_0 etc/X11/xdm/Xsession + etc/conf.d/xdm) +install=xorg-xdm.install +source=(https://xorg.freedesktop.org/releases/individual/app/xdm-${pkgver}.tar.bz2 + https://deb.debian.org/debian/pool/main/x/xdm/xdm_$_debver-$_debrel.diff.gz + Xsession-loginshell.patch + Xsession-xsm.patch + xdm-1.0.5-sessreg-utmp-fix-bug177890.patch + git-fixes.patch + xdm.confd + xdm.initd + xdm-setup.initd + startDM.sh + hyperbola.xpm + Xresources + Xsetup_0) +sha512sums=('fe6f2b7817c0f7f07a1f5f497edcdfa15b93986fd87f314daa472dac8625327ef46ebbf40d27fe8d4a8a2f8d5af8a01c4438a29356740e0eb350f2bd0c7ec0d5' + '404e72aaa7cf0f8f72cf6f0aa8d3c1e641f783442b64cc452c3b0136674eb80b808e04a41b17072ee6b21246eb64bbbb33d765a3e126f612258ce114eb2c0842' + 'bb600af60c9090519ed4ea00de9201e6c4fb12ab2ec0e3ba04e82d15371a19ca3a816423a954e4286a337ae18ac95e4891af47459ef48158464798c811cd995d' + 'bce6ed5f07627db6afb9ed063e42a653c50fa9c73813ce47b7ce9c0152fc7f8a153022e34b54259d09303c70392c0fd5eafc80d8eb748e691cf161e61948637f' + 'b339f28331d7e558a90e84a6a250127e0b349a630c7c2c896a9597944aa37de58421370e9589cf67d8e3e96f1209a1febce2b8a7e76b00af9610b642af68cf80' + 'be63ade1a79099991501cb9aba7e8a641a7b7f9a1779cea285e23b150fa9a929b4aa0d3bbfb4c9596214f77e75821b69130b0866ef1aa12cfa86020dc9327566' + '85440ee0071e96025a11d886765324a57d0530413cd418bafa3673691529fa9262acabaf95b228f92bc247d75feb342df21812e32049fc361f64e8d217581b34' + 'aa944ee844dad8fc60b7d488e78f6c5f4cc3dd7ab1608a1236ed7e86543e77df84dd79ddd0733f923d65b3426c85cd7a5d5efde4804b3ee0974d835a1dba28c1' + 'c6bdf1e195c9af97cd504ef9b63fc0835fe79d24738295d21277aa97951405721b96cff11097098edb707f9b351dce26993de04198d22251ca0655a313083083' + 'f3b3aa841edfbd23810d2da7c56e23e3f1c1eb650b1196feea2fc8dc6092ad5d4c2fba70943a1bc86d716d838ab4ebc0d93e8a2c2ccdf69b171c1fdc4989942c' + 'd144e976e1c3e0d1815203ca87481682176dd3f0f5f0699d780120748469cf85c214dd08e74d0b2a3b2ad2b9f143e9004ae58d85129ef868227a13d9d7f6ebf3' + 'd840aa34a5117ea674f8b636b50c4a9cb344b1f7f4d419f3f03975e3e019f699a55251534ef499c11411c0354adbd6e4b6b77a63c0890a5719a55b42466cf0b6' + 'accef125b422f1b751daee9100a30f20aaecb99a9406e48a6b7a2c0770c76c7d5e98afba2c1dfb2bb182d419af26c7abb2c8a4d8444dd0c4620a46ae15eeb30f') + +prepare() { + cd "xdm-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + patch -p1 -i "$srcdir"/xdm_$_debver-$_debrel.diff + + # Doesn't apply + rm -v debian/patches/22_systemd_service.diff || true + rm -v debian/patches/debian.diff || true + + quilt push -av + else + # upstream commits - Add some missing malloc failure checks 2012-01-07 + patch -p1 -i "$srcdir/git-fixes.patch" + fi + + patch -p1 -i "$srcdir/Xsession-loginshell.patch" + patch -p1 -i "$srcdir/Xsession-xsm.patch" + patch -p1 -i "$srcdir/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch" +} + +build() { + cd "xdm-$pkgver" + ./configure --prefix=/usr \ + --disable-xdm-auth \ + --disable-static \ + --with-xdmconfigdir=/etc/X11/xdm \ + --with-xdmscriptdir=/etc/X11/xdm \ + --with-pixmapdir=/usr/share/xdm/pixmaps \ + --without-pam + make +} + +package() { + cd "xdm-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" + install -m755 -d "$pkgdir/var/lib/xdm" + + install -Dm755 "$srcdir/startDM.sh" "$pkgdir/etc/X11/startDM.sh" + install -Dm644 "$srcdir/xdm.confd" "$pkgdir/etc/conf.d/xdm" + for f in xdm xdm-setup; do + install -Dm755 "$srcdir/$f.initd" "$pkgdir/etc/init.d/$f" + done + + rm "$pkgdir/etc/X11/xdm/"{Xresources,Xsetup_0} + install -Dm644 "$srcdir/"{Xresources,Xsetup_0} "$pkgdir/etc/X11/xdm" + rm "$pkgdir/usr/share/xdm/pixmaps/"xorg{,-bw}.xpm + install -Dm644 "$srcdir/hyperbola.xpm" "$pkgdir/usr/share/xdm/pixmaps" + + sed -i -e 's/\/X11R6//g' $pkgdir/etc/X11/xdm/* +} diff --git a/xorg-xdm/Xresources b/xorg-xdm/Xresources new file mode 100644 index 0000000..d7652b0 --- /dev/null +++ b/xorg-xdm/Xresources @@ -0,0 +1,51 @@ +! || xdm config || + +! --|| General ||-- +! Option: +xlogin*failTimeout: 5 +! --> Logo: +xlogin*useShape: true +! Placement: +xlogin*greeting: Welcome to Hyperbola || CLIENTHOST +! --> Logo: +xlogin*logoFileName: /usr/share/xdm/pixmaps/hyperbola.xpm +! Geometry: +! --> Window: +xlogin*borderWidth: 1 +xlogin*frameWidth: 4 +xlogin*innerFramesWidth: 2 +! --> Logo: +xlogin*logoPadding: 8 +! Fill: +! --> Window: +xlogin*background: silver +xlogin*hiColor: white +xlogin*shdColor: gray50 +xlogin*failColor: red +! Text: +#if WIDTH > 800 +xlogin*font: -*-helvetica-medium-r-*-*-18-* +xlogin*greetFont: -*-helvetica-bold-r-*-*-18-* +xlogin*promptFont: -*-helvetica-medium-r-*-*-18-* +xlogin*failFont: -*-helvetica-medium-r-*-*-18-* +xlogin*face: Sans-12 +xlogin*greetFace: Sans-12:Bold +xlogin*promptFace: Sans-12 +xlogin*failFace: Sans-12 +#else +xlogin*font: -*-helvetica-medium-r-*-*-14-* +xlogin*greetFont: -*-helvetica-bold-r-*-*-14-* +xlogin*promptFont: -*-helvetica-medium-r-*-*-14-* +xlogin*failFont: -*-helvetica-medium-r-*-*-14-* +xlogin*face: Sans-9 +xlogin*greetFace: Sans-9:Bold +xlogin*promptFace: Sans-9 +xlogin*failFace: Sans-9 +#endif + +! --|| xconsole ||-- +! Option: +XConsole.verbose: true +XConsole*iconic: true +! Geometry: +XConsole.text.geometry: 80x12 diff --git a/xorg-xdm/Xsession-loginshell.patch b/xorg-xdm/Xsession-loginshell.patch new file mode 100644 index 0000000..ba40ade --- /dev/null +++ b/xorg-xdm/Xsession-loginshell.patch @@ -0,0 +1,17 @@ +diff --git a/config/Xsession.cpp b/config/Xsession.cpp +index 36ccbd0..0bf8a7c 100644 +--- a/config/Xsession.cpp ++++ b/config/Xsession.cpp +@@ -53,11 +53,7 @@ startup=$HOME/.xsession + resources=$HOME/.Xresources + + if [ -s "$startup" ]; then +- if [ -x "$startup" ]; then +- exec "$startup" +- else +- exec /bin/sh "$startup" +- fi ++ exec /bin/sh -ls -c "$startup" + else + if [ -r "$resources" ]; then + BINDIR/xrdb -load "$resources" diff --git a/xorg-xdm/Xsession-xsm.patch b/xorg-xdm/Xsession-xsm.patch new file mode 100644 index 0000000..7ccfa0c --- /dev/null +++ b/xorg-xdm/Xsession-xsm.patch @@ -0,0 +1,23 @@ +diff --git a/config/Xsession.cpp b/config/Xsession.cpp +index 0bf8a7c..033b6a8 100644 +--- a/config/Xsession.cpp ++++ b/config/Xsession.cpp +@@ -51,6 +51,7 @@ XCOMM The startup script is not intended to have arguments. + + startup=$HOME/.xsession + resources=$HOME/.Xresources ++xinitrc=$HOME/.xinitrc + + if [ -s "$startup" ]; then + exec /bin/sh -ls -c "$startup" +@@ -76,5 +77,9 @@ else + exec `eval $XDESKTOP` + } + #endif +- exec BINDIR/xsm ++ if [ -r "$xinitrc" ]; then ++ exec /bin/sh -ls -c "$xinitrc" ++ else ++ exec /bin/sh -l /etc/X11/xinit/xinitrc ++ fi + fi diff --git a/xorg-xdm/Xsetup_0 b/xorg-xdm/Xsetup_0 new file mode 100644 index 0000000..44d4e77 --- /dev/null +++ b/xorg-xdm/Xsetup_0 @@ -0,0 +1,3 @@ +#!/bin/sh +xsetroot -solid "#444" +#xconsole -geometry 480x130-0-0 -daemon -notify -verbose -fn fixed -exitOnFail diff --git a/xorg-xdm/git-fixes.patch b/xorg-xdm/git-fixes.patch new file mode 100644 index 0000000..69836d4 --- /dev/null +++ b/xorg-xdm/git-fixes.patch @@ -0,0 +1,673 @@ +From 011a2710a69cd345a8ee3a6b2f15407b4c3b355a Mon Sep 17 00:00:00 2001 +From: Jeremy Huddleston +Date: Sun, 25 Sep 2011 07:56:15 +0000 +Subject: Require xt >= 1.0 for appdefaultdir + +https://bugs.freedesktop.org/show_bug.cgi?id=7237 + +Signed-off-by: Jeremy Huddleston +--- +diff --git a/configure.ac b/configure.ac +index b488f0c..a4222f1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -383,7 +383,7 @@ PKG_CHECK_MODULES(AUTH, xau) + # Greeter + # + +-PKG_CHECK_MODULES(XDMGREET, xt x11 xext) ++PKG_CHECK_MODULES(XDMGREET, xt >= 1.0 x11 xext) + + GREETERLIB="${XDMLIBDIR}/libXdmGreet.so" + AX_DEFINE_DIR(DEF_GREETER_LIB, GREETERLIB, [Location of Xdm Greeter library]) +-- +cgit v0.9.0.2-2-gbebe +From 618039261b0c7f14eb3b32c8f636464369724407 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith +Date: Wed, 21 Sep 2011 02:11:20 +0000 +Subject: Mark some chars as const to fix gcc -Wwrite-strings warnings + +Can't fix all the warnings, due to the Xt API, but can fix a bunch. + +Signed-off-by: Alan Coopersmith +--- +diff --git a/greeter/greet.c b/greeter/greet.c +index 539ce17..82e2c21 100644 +--- a/greeter/greet.c ++++ b/greeter/greet.c +@@ -110,9 +110,9 @@ void (*__xdm_SessionExit)(struct display *d, int status, int removeAuth) = NU + void (*__xdm_DeleteXloginResources)(struct display *d, Display *dpy) = NULL; + int (*__xdm_source)(char **environ, char *file) = NULL; + char **(*__xdm_defaultEnv)(void) = NULL; +-char **(*__xdm_setEnv)(char **e, char *name, char *value) = NULL; ++char **(*__xdm_setEnv)(char **e, const char *name, const char *value) = NULL; + char **(*__xdm_putEnv)(const char *string, char **env) = NULL; +-char **(*__xdm_parseArgs)(char **argv, char *string) = NULL; ++char **(*__xdm_parseArgs)(char **argv, const char *string) = NULL; + void (*__xdm_printEnv)(char **e) = NULL; + char **(*__xdm_systemEnv)(struct display *d, char *user, char *home) = NULL; + void (*__xdm_LogOutOfMem)(const char * fmt, ...) = NULL; +diff --git a/greeter/verify.c b/greeter/verify.c +index ea62cd2..5d2ad17 100644 +--- a/greeter/verify.c ++++ b/greeter/verify.c +@@ -61,7 +61,7 @@ from The Open Group. + extern char *crypt(const char *, const char *); + #endif + +-static char *envvars[] = { ++static const char *envvars[] = { + "TZ", /* SYSV and SVR4, but never hurts */ + #if defined(sony) && !defined(SYSTYPE_SYSV) && !defined(_SYSTYPE_SYSV) + "bootdev", +@@ -94,8 +94,8 @@ static char ** + userEnv (struct display *d, int useSystemPath, char *user, char *home, char *shell) + { + char **env; +- char **envvar; +- char *str; ++ const char **envvar; ++ const char *str; + + env = defaultEnv (); + env = setEnv (env, "DISPLAY", d->name); +diff --git a/include/dm.h b/include/dm.h +index 316dd46..4085cae 100644 +--- a/include/dm.h ++++ b/include/dm.h +@@ -443,7 +443,7 @@ extern void UnsecureDisplay (struct display *d, Display *dpy); + extern void execute(char **argv, char **environ); + + /* server.c */ +-extern char *_SysErrorMsg (int n); ++extern const char *_SysErrorMsg (int n); + extern int StartServer (struct display *d); + extern int WaitForServer (struct display *d); + extern void ResetServer (struct display *d); +@@ -462,10 +462,10 @@ extern int Asprintf(char ** ret, const char *restrict format, ...) + _X_ATTRIBUTE_PRINTF(2,3); + # endif + extern char *localHostname (void); +-extern char **parseArgs (char **argv, char *string); +-extern char **setEnv (char **e, char *name, char *value); ++extern char **parseArgs (char **argv, const char *string); ++extern char **setEnv (char **e, const char *name, const char *value); + extern char **putEnv(const char *string, char **env); +-extern char *getEnv (char **e, char *name); ++extern char *getEnv (char **e, const char *name); + extern void CleanUpChild (void); + extern void freeArgs (char **argv); + extern void freeEnv (char **env); +@@ -478,7 +478,7 @@ extern int Verify (struct display *d, struct greet_info *greet, struct verify_in + extern char *NetworkAddressToHostname (CARD16 connectionType, ARRAY8Ptr connectionAddress); + extern int AnyWellKnownSockets (void); + extern void DestroyWellKnownSockets (void); +-extern void SendFailed (struct display *d, char *reason); ++extern void SendFailed (struct display *d, const char *reason); + extern void StopDisplay (struct display *d); + extern void WaitForChild (void); + extern void WaitForSomething (void); +diff --git a/include/greet.h b/include/greet.h +index 6b6689e..0d607ba 100644 +--- a/include/greet.h ++++ b/include/greet.h +@@ -65,9 +65,9 @@ struct dlfuncs { + void (*_DeleteXloginResources)(struct display *d, Display *dpy); + int (*_source)(char **environ, char *file); + char **(*_defaultEnv)(void); +- char **(*_setEnv)(char **e, char *name, char *value); ++ char **(*_setEnv)(char **e, const char *name, const char *value); + char **(*_putEnv)(const char *string, char **env); +- char **(*_parseArgs)(char **argv, char *string); ++ char **(*_parseArgs)(char **argv, const char *string); + void (*_printEnv)(char **e); + char **(*_systemEnv)(struct display *d, char *user, char *home); + void (*_LogOutOfMem)(const char * fmt, ...); +@@ -149,9 +149,9 @@ extern void (*__xdm_SessionExit)(struct display *d, int status, int removeAut + extern void (*__xdm_DeleteXloginResources)(struct display *d, Display *dpy); + extern int (*__xdm_source)(char **environ, char *file); + extern char **(*__xdm_defaultEnv)(void); +-extern char **(*__xdm_setEnv)(char **e, char *name, char *value); ++extern char **(*__xdm_setEnv)(char **e, const char *name, const char *value); + extern char **(*__xdm_putEnv)(const char *string, char **env); +-extern char **(*__xdm_parseArgs)(char **argv, char *string); ++extern char **(*__xdm_parseArgs)(char **argv, const char *string); + extern void (*__xdm_printEnv)(char **e); + extern char **(*__xdm_systemEnv)(struct display *d, char *user, char *home); + extern void (*__xdm_LogOutOfMem)(const char * fmt, ...); +diff --git a/xdm/access.c b/xdm/access.c +index d0850ad..7035375 100644 +--- a/xdm/access.c ++++ b/xdm/access.c +@@ -667,7 +667,7 @@ scanHostlist ( + /* Returns non-0 iff string is matched by pattern. Does case folding. + */ + static int +-patternMatch (char *string, char *pattern) ++patternMatch (const char *string, char *pattern) + { + int p, s; + +diff --git a/xdm/auth.c b/xdm/auth.c +index bbca167..9e5cba2 100644 +--- a/xdm/auth.c ++++ b/xdm/auth.c +@@ -116,7 +116,7 @@ int chown(int a,int b,int c) {} + + struct AuthProtocol { + unsigned short name_length; +- char *name; ++ const char *name; + void (*InitAuth)(unsigned short len, char *name); + Xauth *(*GetAuth)(unsigned short len, char *name); + void (*GetXdmcpAuth)( +diff --git a/xdm/file.c b/xdm/file.c +index 6e929b8..7b7f3d3 100644 +--- a/xdm/file.c ++++ b/xdm/file.c +@@ -225,7 +225,7 @@ ParseDisplay (char *source, DisplayType *acceptableTypes, int numAcceptable) + } + + static struct displayMatch { +- char *name; ++ const char *name; + DisplayType type; + } displayTypes[] = { + { "local", { Local, Permanent, FromFile } }, +diff --git a/xdm/resource.c b/xdm/resource.c +index ece4de3..83901a2 100644 +--- a/xdm/resource.c ++++ b/xdm/resource.c +@@ -145,10 +145,10 @@ int choiceTimeout; /* chooser choice timeout */ + #define DEF_UDP_PORT "177" /* registered XDMCP port, dont change */ + + struct dmResources { +- char *name, *class; +- int type; +- char **dm_value; +- char *default_value; ++ const char *name, *class; ++ int type; ++ char **dm_value; ++ const char *default_value; + } DmResources[] = { + { "servers", "Servers", DM_STRING, &servers, + DEF_SERVER_LINE} , +@@ -203,10 +203,10 @@ struct dmResources { + #define boffset(f) XtOffsetOf(struct display, f) + + struct displayResource { +- char *name, *class; +- int type; +- int offset; +- char *default_value; ++ const char *name, *class; ++ int type; ++ int offset; ++ const char *default_value; + }; + + /* resources for managing the server */ +@@ -289,15 +289,16 @@ XrmDatabase DmResourceDB; + + static void + GetResource ( +- char *name, +- char *class, +- int valueType, +- char **valuep, +- char *default_value) ++ const char *name, ++ const char *class, ++ int valueType, ++ char **valuep, ++ const char *default_value) + { + char *type; + XrmValue value; +- char *string, *new_string; ++ const char *string; ++ char *new_string; + char str_buf[50]; + int len; + +diff --git a/xdm/server.c b/xdm/server.c +index 7fe55e6..1bb8873 100644 +--- a/xdm/server.c ++++ b/xdm/server.c +@@ -62,9 +62,9 @@ CatchUsr1 (int n) + errno = olderrno; + } + +-char *_SysErrorMsg (int n) ++const char *_SysErrorMsg (int n) + { +- char *s = strerror(n); ++ const char *s = strerror(n); + return (s ? s : "unknown error"); + } + +diff --git a/xdm/util.c b/xdm/util.c +index 033633a..60aab21 100644 +--- a/xdm/util.c ++++ b/xdm/util.c +@@ -97,7 +97,7 @@ printEnv (char **e) + } + + static char * +-makeEnv (char *name, char *value) ++makeEnv (const char *name, const char *value) + { + char *result; + +@@ -111,7 +111,7 @@ makeEnv (char *name, char *value) + } + + char * +-getEnv (char **e, char *name) ++getEnv (char **e, const char *name) + { + int l = strlen (name); + +@@ -127,7 +127,7 @@ getEnv (char **e, char *name) + } + + char ** +-setEnv (char **e, char *name, char *value) ++setEnv (char **e, const char *name, const char *value) + { + char **new, **old; + char *newe; +@@ -207,9 +207,9 @@ freeEnv (char **env) + #define isblank(c) ((c) == ' ' || c == '\t') + + char ** +-parseArgs (char **argv, char *string) ++parseArgs (char **argv, const char *string) + { +- char *word; ++ const char *word; + char *save; + char **newargv; + int i; +diff --git a/xdm/xdmauth.c b/xdm/xdmauth.c +index 4b945cf..66804a4 100644 +--- a/xdm/xdmauth.c ++++ b/xdm/xdmauth.c +@@ -44,7 +44,7 @@ static char auth_name[256]; + static int auth_name_len; + + static void +-XdmPrintDataHex (char *s, char *a, int l) ++XdmPrintDataHex (const char *s, const char *a, int l) + { + int i; + +@@ -56,7 +56,7 @@ XdmPrintDataHex (char *s, char *a, int l) + + # ifdef XDMCP + static void +-XdmPrintArray8Hex (char *s, ARRAY8Ptr a) ++XdmPrintArray8Hex (const char *s, ARRAY8Ptr a) + { + XdmPrintDataHex (s, (char *) a->data, a->length); + } +diff --git a/xdm/xdmcp.c b/xdm/xdmcp.c +index 5bc4716..1c34e7c 100644 +--- a/xdm/xdmcp.c ++++ b/xdm/xdmcp.c +@@ -74,7 +74,7 @@ static void request_respond (struct sockaddr *from, int fromlen, int length, int + static void send_accept (struct sockaddr *to, int tolen, CARD32 sessionID, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr authorizationName, ARRAY8Ptr authorizationData, int fd); + static void send_alive (struct sockaddr *from, int fromlen, int length, int fd); + static void send_decline (struct sockaddr *to, int tolen, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr status, int fd); +-static void send_failed (struct sockaddr *from, int fromlen, char *name, CARD32 sessionID, char *reason, int fd); ++static void send_failed (struct sockaddr *from, int fromlen, const char *name, CARD32 sessionID, const char *reason, int fd); + static void send_refuse (struct sockaddr *from, int fromlen, CARD32 sessionID, int fd); + static void send_unwilling (struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, ARRAY8Ptr status, int fd); + static void send_willing (struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, ARRAY8Ptr status, int fd); +@@ -1300,7 +1300,7 @@ abort: + void + SendFailed ( + struct display *d, +- char *reason) ++ const char *reason) + { + Debug ("Display start failed, sending Failed\n"); + send_failed ((struct sockaddr *)(d->from), d->fromlen, d->name, +@@ -1311,9 +1311,9 @@ static void + send_failed ( + struct sockaddr *from, + int fromlen, +- char *name, ++ const char *name, + CARD32 sessionID, +- char *reason, ++ const char *reason, + int fd) + { + static char buf[256]; +@@ -1416,7 +1416,7 @@ NetworkAddressToHostname ( + # else + char dotted[20]; + # endif +- char *local_name = ""; ++ const char *local_name = ""; + int af_type; + + # if defined(IPv6) && defined(AF_INET6) +-- +cgit v0.9.0.2-2-gbebe +From c43eb799774743bc50233eff6643c51a5fbe6899 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith +Date: Wed, 21 Sep 2011 02:22:48 +0000 +Subject: Fix warnings about printing longs with int type format strings + +Signed-off-by: Alan Coopersmith +--- +diff --git a/xdm/dm.c b/xdm/dm.c +index cd0ee25..7bc2605 100644 +--- a/xdm/dm.c ++++ b/xdm/dm.c +@@ -536,7 +536,7 @@ WaitForChild (void) + time(&now); + crash = d->lastReserv && + ((now - d->lastReserv) < XDM_BROKEN_INTERVAL); +- Debug("time %i %i try %i of %i%s\n", now, d->lastReserv, ++ Debug("time %li %li try %i of %i%s\n", now, d->lastReserv, + d->reservTries, d->reservAttempts, + crash ? " crash" : ""); + +diff --git a/xdm/xdmauth.c b/xdm/xdmauth.c +index 66804a4..b3c1c16 100644 +--- a/xdm/xdmauth.c ++++ b/xdm/xdmauth.c +@@ -234,7 +234,7 @@ XdmGetKey(struct protoDisplay *pdpy, ARRAY8Ptr displayID) + if (line[0] == '#' || sscanf (line, "%s %s", id, key) != 2) + continue; + bzero(line, sizeof(line)); +- Debug ("Key entry for \"%s\" %d bytes\n", id, strlen(key)); ++ Debug ("Key entry for \"%s\" %ld bytes\n", id, strlen(key)); + if (strlen (id) == displayID->length && + !strncmp (id, (char *)displayID->data, displayID->length)) + { +-- +cgit v0.9.0.2-2-gbebe +From 8eee942be0db913511b4c53f94829e1201dfdf00 Mon Sep 17 00:00:00 2001 +From: MichaĹ‚ GĂłrny +Date: Wed, 28 Sep 2011 19:25:17 +0000 +Subject: Support systemd startup notification. + +If libsystemd-daemon support is enabled, xdm uses it to announce its +startup as soon as the session is established. This gives the user +opportunity to delay I/O-intensive operations until the X server is +started so that they would not interfere with its loading while keeping +the machine busy when user types in his/her login. + +Reviewed-by: Jamey Sharp +Reviewed-by: Gaetan Nadon +Signed-off-by: Alan Coopersmith +--- +diff --git a/Makefile.am b/Makefile.am +index e5f9f5c..bb6b51c 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -43,8 +43,13 @@ endif LINT + if HAVE_SYSTEMD + systemdsystemunit_DATA = xdm.service + +-xdm.service: xdm.service.in +- $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' < $< > $@ ++xdm.service: xdm.service.in Makefile ++if USE_SYSTEMD_DAEMON ++ $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' < xdm.service.in > $@ ++else !USE_SYSTEMD_DAEMON ++ $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' -e '/[Nn]otify/d' < xdm.service.in > $@ ++endif !USE_SYSTEMD_DAEMON ++ + endif HAVE_SYSTEMD + CLEANFILES = xdm.service + EXTRA_DIST = xdm.service.in +diff --git a/configure.ac b/configure.ac +index a4222f1..fcb37f8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -146,6 +146,7 @@ if test "x$USE_SELINUX" != "xno" ; then + fi + + # Check whether to install systemd unit files, as suggested in daemon(7). ++# When a full path is specified, this does not require systemd installed. + AC_ARG_WITH([systemdsystemunitdir], AS_HELP_STRING([--with-systemdsystemunitdir=DIR], + [Directory for systemd service files (default from the System and Service Manager)]),, + [with_systemdsystemunitdir=auto]) +@@ -166,6 +167,21 @@ AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [ + ]) + AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$with_systemdsystemunitdir" != "xno"]) + ++# Check whether to enable systemd startup notification. ++# This requires libsystemd-daemon. ++AC_ARG_WITH([systemd-daemon], AS_HELP_STRING([--with-systemd-daemon], ++ [Add support for systemd startup notification (default is autodetected)]), ++ [USE_SYSTEMD_DAEMON=$withval], [USE_SYSTEMD_DAEMON=auto]) ++AS_IF([test "x$USE_SYSTEMD_DAEMON" != "xno"], [ ++ PKG_CHECK_MODULES([SYSTEMD_DAEMON], [libsystemd-daemon], ++ [AC_DEFINE(USE_SYSTEMD_DAEMON,1,[Use systemd startup notification])], ++ [AS_IF([test "x$USE_SYSTEMD_DAEMON" = "xyes"], ++ [AC_MSG_ERROR([systemd startup notification support requested, but libsystemd-daemon not found.])] ++ )] ++ ) ++]) ++AM_CONDITIONAL(USE_SYSTEMD_DAEMON, [test "x$USE_SYSTEMD_DAEMON" != "xno"]) ++ + # FIXME: Find better test for which OS'es use su -m - for now, just try to + # mirror the Imakefile setting of: + # if defined(OpenBSDArchitecture) || defined(NetBSDArchitecture) || defined(FreeBSDArchitecture) || defined(DarwinArchitecture) +diff --git a/xdm.service.in b/xdm.service.in +index d15e072..e782dd9 100644 +--- a/xdm.service.in ++++ b/xdm.service.in +@@ -4,6 +4,8 @@ After=systemd-user-sessions.service + + [Service] + ExecStart=BINDIR/xdm -nodaemon ++Type=notify ++NotifyAccess=all + + [Install] + Alias=graphical.target.wants/xdm.service +diff --git a/xdm/Makefile.am b/xdm/Makefile.am +index aa9765c..797b5c5 100644 +--- a/xdm/Makefile.am ++++ b/xdm/Makefile.am +@@ -22,11 +22,11 @@ + bin_PROGRAMS = xdm + + AM_CPPFLAGS = -I$(top_srcdir)/include +-AM_CFLAGS = $(CWARNFLAGS) $(XDM_CFLAGS) ++AM_CFLAGS = $(CWARNFLAGS) $(XDM_CFLAGS) $(SYSTEMD_DAEMON_CFLAGS) + + # The xdm binary needs to export symbols so that they can be used from + # libXdmGreet.so loaded through a dlopen call from session.c +-AM_LDFLAGS = $(XDM_LIBS) -export-dynamic ++AM_LDFLAGS = $(XDM_LIBS) $(SYSTEMD_DAEMON_LIBS) -export-dynamic + + xdm_SOURCES = \ + access.c \ +diff --git a/xdm/session.c b/xdm/session.c +index 5fd47f0..573747d 100644 +--- a/xdm/session.c ++++ b/xdm/session.c +@@ -81,6 +81,10 @@ extern int key_setnet(struct key_netstarg *arg); + # define RTLD_NOW 1 + # endif + ++#ifdef USE_SYSTEMD_DAEMON ++#include ++#endif ++ + #ifdef USE_SELINUX + /* This should be run just before we exec the user session. */ + static int +@@ -349,6 +353,12 @@ ManageSession (struct display *d) + exit(UNMANAGE_DISPLAY); + } + ++#ifdef USE_SYSTEMD_DAEMON ++ /* Subsequent notifications will be ignored by systemd ++ * and calling this function will clean up the env */ ++ sd_notify(1, "READY=1"); ++#endif ++ + /* tell the possibly dynamically loaded greeter function + * what data structure formats to expect. + * These version numbers are registered with The Open Group. */ +-- +cgit v0.9.0.2-2-gbebe +From 284532c0884893728b75ca37f5d2a9a33f7bc8db Mon Sep 17 00:00:00 2001 +From: Julien Cristau +Date: Sat, 22 Oct 2011 15:14:46 +0000 +Subject: greeter: link against -lXrender if xft is enabled + +XmuCvtStringToXftColor uses XRenderParseColor, so require xrender for +the xft option, and link against it. + +Signed-off-by: Julien Cristau +Reviewed-by: Alan Coopersmith +--- +diff --git a/configure.ac b/configure.ac +index fcb37f8..d20ae28 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -345,10 +345,10 @@ AC_ARG_WITH(xft, + AS_HELP_STRING([--with-xft], + [Use Xft to draw text (default is YES if installed)]), + [USE_XFT="$withval"], +- PKG_CHECK_EXISTS(xft, [USE_XFT="yes"], [USE_XFT="no"])) ++ PKG_CHECK_EXISTS(xft xrender, [USE_XFT="yes"], [USE_XFT="no"])) + + if test "x$USE_XFT" = "xyes" ; then +- PKG_CHECK_MODULES(XFT, xft) ++ PKG_CHECK_MODULES(XFT, xft xrender) + GREETER_CFLAGS="$GREETER_CFLAGS $XFT_CFLAGS" + GREETER_LIBS="$GREETER_LIBS $XFT_LIBS" + AC_DEFINE([USE_XFT], 1, +diff --git a/greeter/Login.c b/greeter/Login.c +index 99a3932..d899376 100644 +--- a/greeter/Login.c ++++ b/greeter/Login.c +@@ -86,6 +86,10 @@ from The Open Group. + # include + #endif + ++#ifdef USE_XFT ++# include ++#endif ++ + #ifndef DEBUG + # define XDM_ASSERT(a) /* do nothing */ + #else +-- +cgit v0.9.0.2-2-gbebe +From a02edebf21aae37f8564d7b9fad01d5d2942ad8d Mon Sep 17 00:00:00 2001 +From: Matthieu Herrb +Date: Mon, 07 Nov 2011 16:01:44 +0000 +Subject: Fix build outside of source dir. Fixes distcheck too. + +Signed-off-by: Matthieu Herrb +Reviewed-by: Alan Coopersmith +--- +diff --git a/Makefile.am b/Makefile.am +index bb6b51c..e9da40f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -45,9 +45,9 @@ systemdsystemunit_DATA = xdm.service + + xdm.service: xdm.service.in Makefile + if USE_SYSTEMD_DAEMON +- $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' < xdm.service.in > $@ ++ $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' < ${srcdir}/xdm.service.in > $@ + else !USE_SYSTEMD_DAEMON +- $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' -e '/[Nn]otify/d' < xdm.service.in > $@ ++ $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' -e '/[Nn]otify/d' < ${srcdir}/xdm.service.in > $@ + endif !USE_SYSTEMD_DAEMON + + endif HAVE_SYSTEMD +-- +cgit v0.9.0.2-2-gbebe +From ad7a54288f62c0266540279dac775ebee68f092e Mon Sep 17 00:00:00 2001 +From: Matthieu Herrb +Date: Thu, 15 Dec 2011 21:14:23 +0000 +Subject: replace by . Spotted my Marco Peereboom with clang. + +Reviewed-by: Mark Kettenis +Signed-off-by: Matthieu Herrb +--- +diff --git a/greeter/verify.c b/greeter/verify.c +index 5d2ad17..1221874 100644 +--- a/greeter/verify.c ++++ b/greeter/verify.c +@@ -48,7 +48,7 @@ from The Open Group. + # include + #elif defined(USE_BSDAUTH) + # include +-# include ++# include + # include + #elif defined(USESECUREWARE) + # include +-- +cgit v0.9.0.2-2-gbebe +From 78403f6a7420798bf24798811c8c6b936c9ccb34 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith +Date: Sat, 07 Jan 2012 03:34:30 +0000 +Subject: Add some missing malloc failure checks + +Flagged by Solaris Studio 12.3 code analyzer + +Signed-off-by: Alan Coopersmith +--- +diff --git a/xdm/access.c b/xdm/access.c +index 7035375..b16a066 100644 +--- a/xdm/access.c ++++ b/xdm/access.c +@@ -304,6 +304,11 @@ tryagain: + if (!hostOrAlias) + return NULL; + h = malloc (sizeof (DisplayEntry)); ++ if (!h) ++ { ++ LogOutOfMem ("ReadHostEntry: DisplayEntry\n"); ++ return NULL; ++ } + h->hopCount = 1; + if (*hostOrAlias == ALIAS_CHARACTER) + { +@@ -423,6 +428,11 @@ tryagain: + if (!displayOrAlias) + return NULL; + d = malloc (sizeof (DisplayEntry)); ++ if (!d) ++ { ++ LogOutOfMem ("ReadDisplayEntry: DisplayEntry\n"); ++ return NULL; ++ } + d->notAllowed = 0; + d->notBroadcast = 0; + d->chooser = 0; +diff --git a/xdm/choose.c b/xdm/choose.c +index 6f077eb..e5e003d 100644 +--- a/xdm/choose.c ++++ b/xdm/choose.c +@@ -128,6 +128,11 @@ RememberIndirectClient ( + connectionType == i->connectionType) + return 1; + i = malloc (sizeof (IndirectUsersRec)); ++ if (!i) ++ { ++ LogOutOfMem ("RememberIndirectClient\n"); ++ return 0; ++ } + if (!XdmcpCopyARRAY8 (clientAddress, &i->client)) + { + free (i); +-- +cgit v0.9.0.2-2-gbebe diff --git a/xorg-xdm/hyperbola.xpm b/xorg-xdm/hyperbola.xpm new file mode 100644 index 0000000..7e3bc3e --- /dev/null +++ b/xorg-xdm/hyperbola.xpm @@ -0,0 +1,317 @@ +/* XPM */ +static char * hyperbola[] = { +"128 128 186 2", +" c #C0C0C0", +". c #BABABA", +"+ c #A1A1A1", +"@ c #878787", +"# c #6E6E6E", +"$ c #575757", +"% c #474747", +"& c #444444", +"* c #AFAFAF", +"= c #888888", +"- c #505050", +"; c #8F8F8F", +"> c #494949", +", c #ABABAB", +"' c #767676", +") c #A6A6A6", +"! c #6A6A6A", +"~ c #454545", +"{ c #464646", +"] c #4B4B4B", +"^ c #484848", +"/ c #4C4C4C", +"( c #646464", +"_ c #4A4A4A", +": c #4D4D4D", +"< c #525252", +"[ c #434343", +"} c #555555", +"| c #7E7E7E", +"1 c #656565", +"2 c #717171", +"3 c #727272", +"4 c #959595", +"5 c #5B5B5B", +"6 c #515151", +"7 c #797979", +"8 c #5F5F5F", +"9 c #929292", +"0 c #A4A4A4", +"a c #676767", +"b c #636363", +"c c #8A8A8A", +"d c #9F9F9F", +"e c #595959", +"f c #6B6B6B", +"g c #AEAEAE", +"h c #747474", +"i c #565656", +"j c #5A5A5A", +"k c #6F6F6F", +"l c #9D9D9D", +"m c #A9A9A9", +"n c #A5A5A5", +"o c #6C6C6C", +"p c #535353", +"q c #B8B8B8", +"r c #B9B9B9", +"s c #838383", +"t c #545454", +"u c #616161", +"v c #AAAAAA", +"w c #B2B2B2", +"x c #8B8B8B", +"y c #A0A0A0", +"z c #C1C1C1", +"A c #C2C2C2", +"B c #949494", +"C c #4E4E4E", +"D c #666666", +"E c #8C8C8C", +"F c #B5B5B5", +"G c #B6B6B6", +"H c #686868", +"I c #B4B4B4", +"J c #C9C9C9", +"K c #CACACA", +"L c #696969", +"M c #5E5E5E", +"N c #A3A3A3", +"O c #BEBEBE", +"P c #BDBDBD", +"Q c #B3B3B3", +"R c #4F4F4F", +"S c #CFCFCF", +"T c #D2D2D2", +"U c #868686", +"V c #C3C3C3", +"W c #7B7B7B", +"X c #C4C4C4", +"Y c #D5D5D5", +"Z c #D8D8D8", +"` c #CDCDCD", +" . c #7C7C7C", +".. c #5C5C5C", +"+. c #5D5D5D", +"@. c #707070", +"#. c #9E9E9E", +"$. c #C6C6C6", +"%. c #C5C5C5", +"&. c #ADADAD", +"*. c #585858", +"=. c #DEDEDE", +"-. c #D6D6D6", +";. c #989898", +">. c #848484", +",. c #C8C8C8", +"'. c #919191", +"). c #E1E1E1", +"!. c #DDDDDD", +"~. c #B7B7B7", +"{. c #737373", +"]. c #757575", +"^. c #A2A2A2", +"/. c #BFBFBF", +"(. c #CBCBCB", +"_. c #626262", +":. c #E4E4E4", +"<. c #6D6D6D", +"[. c #939393", +"}. c #C7C7C7", +"|. c #CCCCCC", +"1. c #BBBBBB", +"2. c #9C9C9C", +"3. c #E2E2E2", +"4. c #E9E9E9", +"5. c #D0D0D0", +"6. c #B0B0B0", +"7. c #EBEBEB", +"8. c #E8E8E8", +"9. c #DADADA", +"0. c #CECECE", +"a. c #D1D1D1", +"b. c #BCBCBC", +"c. c #DCDCDC", +"d. c #EAEAEA", +"e. c #EFEFEF", +"f. c #898989", +"g. c #E7E7E7", +"h. c #F1F1F1", +"i. c #E5E5E5", +"j. c #9B9B9B", +"k. c #D7D7D7", +"l. c #EEEEEE", +"m. c #F4F4F4", +"n. c #F2F2F2", +"o. c #D9D9D9", +"p. c #858585", +"q. c #D4D4D4", +"r. c #DBDBDB", +"s. c #606060", +"t. c #D3D3D3", +"u. c #E6E6E6", +"v. c #F6F6F6", +"w. c #F3F3F3", +"x. c #DFDFDF", +"y. c #969696", +"z. c #B1B1B1", +"A. c #F8F8F8", +"B. c #E0E0E0", +"C. c #E3E3E3", +"D. c #828282", +"E. c #ECECEC", +"F. c #F0F0F0", +"G. c #ACACAC", +"H. c #787878", +"I. c #F5F5F5", +"J. c #EDEDED", +"K. c #A8A8A8", +"L. c #999999", +"M. c #9A9A9A", +"N. c #979797", +"O. c #777777", +"P. c #8D8D8D", +"Q. c #A7A7A7", +"R. c #818181", +"S. c #7D7D7D", +"T. c #7F7F7F", +"U. c #F7F7F7", +"V. c #F9F9F9", +"W. c #FAFAFA", +"X. c #FCFCFC", +"Y. c #FBFBFB", +"Z. c #909090", +"`. c #8E8E8E", +" + c #808080", +".+ c #7A7A7A", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . + @ # $ % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % $ # @ + . ", +" * = - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - = * ", +" . ; > & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > ; . ", +" , ' & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ' , ", +" ) ! & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ! ) ", +" , ! & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ! , ", +" . ' & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ' . ", +" ; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ; ", +" * > & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > * ", +" = & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & = ", +" . - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - . ", +" + & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & + ", +" @ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & @ ", +" # & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & # ", +" $ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & $ ", +" % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { & & & & & & & & & % ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ % ] % ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ { % & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ / ( ] % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { { _ : < [ & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ : } | < _ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ : } 1 2 & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % } 3 4 5 : & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { _ 6 5 7 ; 1 & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { ] 8 9 0 a < ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { / $ b c d = e & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { - f , g h i { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { % - j k l m n o p & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ } = q r s 5 ^ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { _ t u | v w * x j / & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > 5 y z A B u _ & & & & & & & & & & & & & & & & & & & & & & & & & & & & { C $ D E F r G ) H < % & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & / u I J K ) L C & & & & & & & & & & & & & & & & & & & & & & & & & & { ^ - M h N . O P Q s e > & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ R f z S T q 3 p & & & & & & & & & & & & & & & & & & & & & & & & & ^ / i ( U I O V z q d u C { & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { t W X Y Z ` ...^ & & & & & & & & & & & & & & & & & & & & & & { > p +.@.#.P X $.%.P &.2 t ^ { & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > *.U %.Z =.-.;.a / & & & & & & & & & & & & & & & & & & & & { % C *.H >.Q z $.,.$. F = 5 _ { & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > 5 '.$.Z ).!.~.{.p { & & & & & & & & & & & & & & & & & & { / p u ].^./.,.K (.J z ~.d _.R { & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ] +.;.V -.:.:.-.= _._ & & & & & & & & & & & & & & & & { _ p M <.[.. }.(.|.` K X 1.v k t ^ { & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & / 8 2.A Y 3.4.).~.{.i ^ & & & & & & & & & & & & & { _ p ..! @ w ,.|.5.S ` K V 1.6.| e ] { & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & : u d P 5.).7.8.9.;.f } ^ { & & & & & & & & { ^ / p M ! >.&.$.0.a.T a.|.,.V b.Q 9 M : ~ & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & / u + . |.c.d.e.8.a.; o i : ^ { & & { { ^ ] 6 $ b <.f.&.}.S T Y Y a.(.}.V b.w d ( 6 ^ { & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & : _.+ q $.Y g.h.h.i.5.j.h 1 5 < 6 6 p t 5 _.f 7 ;.~.,.a.Y Z k.Y 0.J X z P I n o p ^ & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & / _.y I 0.=.l.m.n.g.o.P ;.W 2 k <.@.h p.l I }.0.q.o.r.r.Z T (.$. 1.F v ' i _ { & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & / s.l w b.V t.u.m.v.w.d.).Z S V 1.r A J ` T -.r.=.x.=.r.Y 0.}. O 1.1.~., | *./ { & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > ..y.z.~.1.%.Z 7.v.A.m.e.7.:.x.=.!.c.=.B.).:.C.3.=.k.a.}. 1.r . . F &.D.5 : { & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % e x w q G . }.9.E.v.A.v.m.F.e.E.E.d.d.4.8.i.).o.a.}./.1.~.F ~.. F G.U +.C { { & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { p H.6.q G w G X Z g.F.I.v.I.w.n.e.J.4.i.x.k.S %.b.G w w I G r F &.@ ..C % { & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { R 1 K.q r z.G.6.b.` r.C.8.d.d.8.i.x.o.T ,./.G z.&.G.6.Q ~.. I G.>.+.C % { & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > ..[.G 1.~., 0 n G.r V K 0.S ` ,.A b.I &.K.n ) m * I . q I , | ..: % { & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { < # 6.1.b.w n L.[.9 4 ;.M.2.j.M.;.N.N.;.j.^.m 6.G 1.r F n O.e C ^ { & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & / ..9 ~./.P Q n M.'.P.P.P.; ; ; 9 4 L.d Q.g F . . q z.L.f *.] { { & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % 6 a ) . /./.F G.^.M.4 [.4 y.M.#.^.v * G . b.1.F G.= u < > { & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & _ i k v 1.V }.J ,.$.%.%.X X X X X %.V z O r z.M.@.j C ^ { & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { _ $ 2 ) q %.$.,.}.$.$.$.%.V z P q w + | 8 p ] { { & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { > i L 9 6.. /. A V A A P . F * 2. ._.i : ^ { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ > 6 5 <.E y G.* * 6.6.&.) N.p.o +.i : > { { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % ] 6 *.M H ].7 W O.o u ..i 6 ] ^ ~ { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { ^ > / / : : ] ] ] : R 6 p < 6 R : ] % { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ { > : - 6 t t t t p 6 C _ % { { ~ ~ ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ ~ ^ : 6 i s.k 7 R.s p.D.S.O.f 5 < / % ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ { > - $ 1 T.4 ^.K.* Q G ~.F * m y N.R._.p ] { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ > - j # P.N 6.r V J 0.t.-.k.Y a.K A ~.K.M.W e C { ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ R *.<.; m q V ` k.x.:.8.7.E.J.E.d.i.=.Y $.G ) @ M C % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { / t ( = m r $.t.x.g.J.n.I.U.A.V.V.A.U.I.h.d.x.a.A G.; M / { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ ^ R ..S.N G %.q.).d.h.I.V.W.X.X.X.X.X.X.X.Y.V.I.e.i.Z %.* x 5 : ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { ] t a B Q X t.B.4.h.v.V.Y.Y.W.V.A.U.U.U.U.A.V.V.V.v.F.u.Z V g | i ^ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % : ..H.Q.P 0.r.8.F.I.A.V.A.v.m.h.l.E.7.d.d.7.J.e.n.m.I.m.e.:.Y Q.H R { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > - u c w X -.C.J.w.U.v.m.e.8.x.-.0.$.z b.1.b. %.S o.3.7.F.h.7.B.0.1.Z..._ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ > p H j.1.|.9.4.F.I.m.h.d.).-.,.b.z.K.y j.N.4 y.L.y m G $.k.:.d.E.g.r.,.6.@.< { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ ] *.3 Q. t.).7.h.n.e.8.!.5.z z.n M.9 x @ p.s D.R.R.>.x 4 n ~.|.!.u.g.B.t./.4 5 > & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { C 5 W * %.k.:.E.F.l.g.c.0.O &.y 4 `.f.U U U = = @ U >.R. +s P.2.z.}.9.C.3.9.,.w ! R { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % - M @ ~.K o.i.7.J.g.x.5./.g d B `.x c `.'.y.L.j.l 2.j.;.[.E = U x M.6.$.o.x.=.5.P = *.% & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % 6 s.P.1.0.r.g.7.8.B.q.z z.N y.Z.P.; B M.+ K., * z.Q Q z.* v N L.'.E Z.l Q K o.c.-.%.^.s.] & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ 6 s.[.O 5.!.u.8.C.o.J q K.M.[.'.B L.y K.g I q 1.b.P O O P b.. G g n M.[.N.0 . 0.o.Z (.q <.R ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ < ( ;./.a.!.i.:.!.5. g + N.B y.2.n &.G b. V %.$.}.}.}.$.%.X A 1.F v d M.l * V T k.5./.>.} { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ p 1 j.z a.!.3.).Z ,.q K.l N.M.#.K.z.. %.J |.0.S S S S S 0.` (.J }.X /.r g N d Q.q K q.a.V y.e > & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ t 1 #.A t.c.B.c.T A z.N 2.j.y v Q P V K 0.a.t.t.Y q.q.q.q.T a.a.5.` ` (.}.z . g Q.Q.w A 0.0.$.K.M / & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & & & % t D l X a.r.!.Z |.1.G.^.d ^.m Q O $.` a.t.Y Y Y t.T a.5.0.` ` ` 0.0.0.0.S |.K V . 6.G.* 1.J S $.I ( C & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & & { % p ( #.A a.o.r.Y $.~.v ^.N K.Q P }.` a.q.q.t.T 5.,.q K.2.; f.p.p.E M.K.1.}.(.0.` (.X 1.w 6.~.X |.J . 2 6 ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & & { % < ( j.V 5.Z Z 5.V F m n m w 1.$.` a.T a.S 0.O Q.; .h <.H ( _._._._.D <.h c g $.(.|.K X 1.I q /.}.}.1.| } ^ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & { ^ 6 ( N.z S Y Y ` I , m g q V (.S a.a.(.V K.c ' o b ..i 6 C / ^ ^ ^ _ : p *._.k x 1.J K ,.A 1.r /.%.$.b.c *.^ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & & % R _.'./.` q.t.(.O I g 6.G O }.|.0.|.,.r M..+o b *.p / ^ { { & & & & & & & & ^ / t _.W w $.(.}.z 1.O V %.b.9 5 > & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & & { C s.E O (.a.5.}.P F z.I 1.V }.K J $.w ; 2 D ..p _ { & & & & & & & & & & & & & & & ^ R M ' z.X J }. /.A V b.L.+.] & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & & { : +.>.P K S ` %.1.F I r P X $.%.z &.p.# _.i C ^ { & & & & & & & & & & & & & & & & & & { / +.H.G %.,.$.A A A 1.d M ] & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & & ~ ] ..| r ,.` (.%.b.G G 1. V %.z * @ <.8 p / { & & & & & & & & & & & & & & & & & & & & & & { : M @ O }.}.%.A z . ^.s.: & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & { _ e ' I %.K J X b.r 1.b.z z /.w c o 8 < _ ^ & & & & & & & & & & & & & & & & & & & & & & & & & { - D #.z }.,.%.V 1.) u : & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & & & _ $ k g A J ,.X P 1.1.P O P w Z.# u p / { & & & & & & & & & & & & & & & & & & & & & & & & & & & & % i ].r %.J }.V . K._.: & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & { ^ } ! ) }.}.X /.b.. P b.G M.2 u } / { { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & : u L. $.J X 1.&.( : & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & & % < 1 2.O %.$.V b.1.r q n .( i C ^ { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % } {.G X ,.$.P * 1 : & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & & { R u `.. V X X b.~.F G.f.H 5 - _ { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & : b M.z }.$.O 6.( : & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & ~ / +.R.F A V X 1.G * N.k M t _ { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ $ 7 1.X }./.* ( C & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & & & ] *.' 6.O A A O ~.Q + .+s.} / { { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & R a K.z %./.* _.: & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & { _ } f m b.A P F G.; 1 e R ^ { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & _ M `.P V /.&._.: & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & & % < b #.~. r Q y ' ..< _ { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { } @.F P v u / & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & & { : 8 `.F b.O ~.G.'.( i / ^ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { - 1 n b.b.) 8 / & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & { ] j S.6.r 1.I N ' ..6 > ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & / +.; . r N M / & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & & & > } k K.I G * '.D i / % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ } h Q I j..._ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & { ^ 6 b 2.6.6.n W 8 6 > ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & { - D ^.g 9 5 _ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & & { : 5 c K.m 4 L *./ % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & / M P.Q.@ *.^ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & { _ t ' #.+ +8 p > { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % $ 7 l 7 t % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & ^ - u '.Z.o e - % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ R s.9 L - ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & _ < | ...p ] { { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ] t +$ / ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & ] b s.< : ^ ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ^ / ( / ^ { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" & & & & & & & & > ] _ > % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ~ % _ % ~ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ", +" % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % ", +" $ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & $ ", +" # & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & # ", +" @ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & @ ", +" + & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & + ", +" . - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - . ", +" = & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & = ", +" * > & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > * ", +" ; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ; ", +" . ' & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ' . ", +" , ! & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ! , ", +" ) ! & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ! ) ", +" , ' & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & ' , ", +" . ; > & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & > ; . ", +" * = - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & - = * ", +" . + @ # $ % & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & % $ # @ + . ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/xorg-xdm/startDM.sh b/xorg-xdm/startDM.sh new file mode 100644 index 0000000..66cceb3 --- /dev/null +++ b/xorg-xdm/startDM.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License, v2 + +# We need to source /etc/profile for stuff like $LANG to work +# bug #10190. +. /etc/profile + +. /etc/init.d/functions.sh + +# baselayout-1 compat +if ! type get_options >/dev/null 2>/dev/null ; then + [ -r "${svclib}"/sh/rc-services.sh ] && . "${svclib}"/sh/rc-services.sh +fi + +# Great new Gnome2 feature, AA +# We enable this by default +export GDK_USE_XFT=1 + +export SVCNAME=xdm +EXEC="$(get_options service)" +NAME="$(get_options name)" +PIDFILE="$(get_options pidfile)" +START_STOP_ARGS="$(get_options start_stop_args)" + +start-stop-daemon --start --exec ${EXEC} \ +${NAME:+--name} ${NAME} ${PIDFILE:+--pidfile} ${PIDFILE} ${START_STOP_ARGS} || \ +eerror "ERROR: could not start the Display Manager" + +# vim:ts=4 diff --git a/xorg-xdm/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch b/xorg-xdm/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch new file mode 100644 index 0000000..2620618 --- /dev/null +++ b/xorg-xdm/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch @@ -0,0 +1,10 @@ +diff --git a/config/GiveConsole b/config/GiveConsole +index f8a8c6d..cb68622 100644 +--- a/config/GiveConsole ++++ b/config/GiveConsole +@@ -7,3 +7,5 @@ + # causing serious grief. + # + chown $USER /dev/console ++exec /usr/bin/sessreg -a -w "/var/log/wtmp" -u "/run/utmp" \ ++ -x "/etc/X11/xdm/Xservers" -l $DISPLAY -h "" $USER diff --git a/xorg-xdm/xdm-setup.initd b/xorg-xdm/xdm-setup.initd new file mode 100644 index 0000000..8f2ed27 --- /dev/null +++ b/xorg-xdm/xdm-setup.initd @@ -0,0 +1,13 @@ +#!/sbin/openrc-run +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() { + need localmount +} + +start() { + if get_bootparam "nox" ; then + touch /etc/.noxdm + fi +} diff --git a/xorg-xdm/xdm.confd b/xorg-xdm/xdm.confd new file mode 100644 index 0000000..635e986 --- /dev/null +++ b/xorg-xdm/xdm.confd @@ -0,0 +1,10 @@ +# We always try and start X on a static VT. The various DMs normally default +# to using VT7. If you wish to use the xdm init script, then you should ensure +# that the VT checked is the same VT your DM wants to use. We do this check to +# ensure that you haven't accidentally configured something to run on the VT +# in your /etc/inittab file so that you don't get a dead keyboard. +CHECKVT=7 + +# What display manager do you use ? [ xdm | slim | tdm ] +# NOTE: If this is set in /etc/rc.conf, that setting will override this one. +DISPLAYMANAGER="xdm" diff --git a/xorg-xdm/xdm.initd b/xorg-xdm/xdm.initd new file mode 100644 index 0000000..18c3ded --- /dev/null +++ b/xorg-xdm/xdm.initd @@ -0,0 +1,196 @@ +#!/sbin/openrc-run +# Copyright 1999-2014 Gentoo Foundation +# Copyright 2017-2019 Hyperbola Project +# Distributed under the terms of the GNU General Public License, v2 + +# This is here to serve as a note to myself, and future developers. +# +# Any Display manager (gdm,kdm,xdm) has the following problem: if +# it is started before any getty, and no vt is specified, it will +# usually run on vt2. When the getty on vt2 then starts, and the +# DM is already started, the getty will take control of the keyboard, +# leaving us with a "dead" keyboard. +# +# Resolution: add the following line to /etc/inittab +# +# x:a:once:/etc/X11/startDM.sh +# +# and have /etc/X11/startDM.sh start the DM in daemon mode if +# a lock is present (with the info of what DM should be started), +# else just fall through. +# +# How this basically works, is the "a" runlevel is a additional +# runlevel that you can use to fork processes with init, but the +# runlevel never gets changed to this runlevel. Along with the "a" +# runlevel, the "once" key word means that startDM.sh will only be +# run when we specify it to run, thus eliminating respawning +# startDM.sh when "xdm" is not added to the default runlevel, as was +# done previously. +# +# This script then just calls "telinit a", and init will run +# /etc/X11/startDM.sh after the current runlevel completes (this +# script should only be added to the actual runlevel the user is +# using). +# +# Martin Schlemmer +# aka Azarah +# 04 March 2002 + +depend() { + need localmount xdm-setup + + # this should start as early as possible + # we can't do 'before *' as that breaks it + # (#139824) Start after ypbind and autofs for network authentication + # (#145219 #180163) Could use lirc mouse as input device + # (#70689 comment #92) Start after consolefont to avoid display corruption + # (#291269) Start after quota, since some dm need readable home + # (#390609) gdm-3 will fail when dbus is not running + # (#366753) starting keymaps after X causes problems + after bootmisc consolefont modules netmount + after readahead-list ypbind autofs openvpn gpm lircmd + after quota keymaps + before alsasound + + # Start before X + use xfs +} + +setup_dm() { + local MY_XDM + + MY_XDM=$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]') + + # Load our root path from profile.env + # Needed for kdm + PATH=${PATH}:$(. /etc/profile; echo "${PATH}") + + NAME= + case "${MY_XDM}" in + wdm) + EXE="/usr/bin/wdm" + PIDFILE= + ;; + slim) + EXE="/usr/bin/slim" + START_STOP_ARGS="-nodaemon --background" + PIDFILE=/run/slim.pid + ;; + *) + # first find out if there is such executable + EXE="$(command -v ${MY_XDM} 2>/dev/null)" + PIDFILE="/run/${MY_XDM}.pid" + + # warn user that he is doing sick things if the exe was not found + if [ -z "${EXE}" ]; then + echo "ERROR: Your XDM value is invalid." + echo " No ${MY_XDM} executable could be found on your system." + fi + ;; + esac + + if ! [ -x "${EXE}" ]; then + EXE="/usr/bin/xdm" + PIDFILE=/run/xdm.pid + if ! [ -x "/usr/bin/xdm" ]; then + echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm," + echo " or install xorg-xdm package" + eend 255 + fi + fi +} + +# Check to see if something is defined on our VT +vtstatic() { + if [ -e /etc/inittab ] ; then + grep -Eq "^[^#]+.*\" /etc/inittab + elif [ -e /etc/ttys ] ; then + grep -q "^ttyv$(($1 - 1))" /etc/ttys + else + return 1 + fi +} + +start() { + local EXE NAME PIDFILE AUTOCLEAN_CGROUP + setup_dm + + if [ -f /etc/.noxdm ]; then + einfo "Skipping ${EXE##*/}, /etc/.noxdm found or \"nox\" bootparam passed." + rm /etc/.noxdm + return 0 + fi + + ebegin "Setting up ${EXE##*/}" + + # save the prefered DM + save_options "service" "${EXE}" + save_options "name" "${NAME}" + save_options "pidfile" "${PIDFILE}" + save_options "start_stop_args" "${START_STOP_ARGS}" + save_options "autoclean_cgroup" "${AUTOCLEAN_CGROUP:-no}" + + if [ -n "${CHECKVT-y}" ] ; then + if vtstatic "${CHECKVT:-7}" ; then + if [ -x /sbin/telinit ] && [ "${SOFTLEVEL}" != "BOOT" ] && [ "${RC_SOFTLEVEL}" != "BOOT" ]; then + ewarn "Something is already defined on VT ${CHECKVT:-7}, will start X later" + telinit a >/dev/null 2>&1 + return 0 + else + eerror "Something is already defined on VT ${CHECKVT:-7}, not starting" + return 1 + fi + fi + fi + + /etc/X11/startDM.sh + eend 0 +} + +stop() { + local curvt retval + + retval=0 + if [ -t 0 ]; then + if type fgconsole >/dev/null 2>&1; then + curvt=$(fgconsole 2>/dev/null) + else + curvt=$(tty) + case "${curvt}" in + /dev/ttyv[0-9]*) curvt=${curvt#/dev/ttyv} ;; + *) curvt= ;; + esac + fi + fi + local myexe myname mypidfile myservice + myexe=$(get_options "service") + myname=$(get_options "name") + mypidfile=$(get_options "pidfile") + myservice=${myexe##*/} + yesno "${rc_cgroup_cleanup:-no}" || rc_cgroup_cleanup=$(get_options "autoclean_cgroup") + + [ -z "${myexe}" ] && return 0 + + ebegin "Stopping ${myservice}" + + if start-stop-daemon --quiet --test --stop --exec "${myexe}"; then + start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \ + ${mypidfile:+--pidfile} ${mypidfile} \ + ${myname:+--name} ${myname} + retval=${?} + fi + + # switch back to original vt + if [ -n "${curvt}" ]; then + if type chvt >/dev/null 2>&1; then + chvt "${curvt}" + else + vidcontrol -s "$((curvt + 1))" + fi + fi + + eend ${retval} "Error stopping ${myservice}" + return ${retval} +} + +# vim: set ts=4 : diff --git a/xorg-xdm/xorg-xdm.install b/xorg-xdm/xorg-xdm.install new file mode 100644 index 0000000..a28ec0b --- /dev/null +++ b/xorg-xdm/xorg-xdm.install @@ -0,0 +1,3 @@ +post_install() { + echo " ==> Edit /etc/conf.d/xdm to set environment." +} diff --git a/xorg-xrestop/PKGBUILD b/xorg-xrestop/PKGBUILD new file mode 100644 index 0000000..9be0283 --- /dev/null +++ b/xorg-xrestop/PKGBUILD @@ -0,0 +1,49 @@ +# Maintainer: Jesus E. + +# Based on xrestop package + +pkgname=xorg-xrestop +pkgver=0.4 +_debver=0.4 +_debrel=10 +pkgrel=2 +pkgdesc="Uses the X-Resource extension to provide 'top' like statistics" +arch=('i686' 'x86_64') +url="https://freedesktop.org/wiki/Software/xrestop/" +license=('GPL-2') +depends=('libxres' 'ncurses') +makedepends=('quilt') +provides=('xrestop') +conflicts=('xrestop') +replaces=('xrestop') +source=(https://downloads.yoctoproject.org/releases/xrestop/xrestop-$pkgver.tar.gz + https://deb.debian.org/debian/pool/main/x/xrestop/xrestop_$_debver-$_debrel.debian.tar.xz) +sha512sums=('eb7bf2f3ab7b73708c96d56fd466cb362d711242dd46992fa3e693af2d26995e9baa91075eb445ef227e1342deec5e0e22b37139e80399e4051c9f5cad8fd9b6' + 'b6103bbd73aa8f36beb184b191b7b78cb902cd849d3e22bdb67f48a9f85123b25629a4fac50b68635ffefe45317141f08804fa567f8cf5a606fe19a84b651186') + +prepare() { + cd "xrestop-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "xrestop-$pkgver" + ./configure --prefix=/usr --mandir=/usr/share/man + make +} + +package() { + cd "xrestop-$pkgver" + make DESTDIR="$pkgdir" install + + install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING" +} diff --git a/xosd/PKGBUILD b/xosd/PKGBUILD new file mode 100644 index 0000000..27ce350 --- /dev/null +++ b/xosd/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=xosd +pkgver=2.2.14 +_debver=$pkgver +_debrel=2.1 +pkgrel=2 +pkgdesc="On-Screen-Display-libs for some tools" +arch=('i686' 'x86_64') +license=('GPL-2') +url='https://sourceforge.net/projects/libxosd/' +depends=('libxt' 'libxinerama' 'sh' 'xenocara-fonts-misc-meta') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/libxosd/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xosd/xosd_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('3caf6d106d34488f4823e2a58fdff7a69b90f505b8da2443485167ff0362c6f27614c9a5019e738ff1f897d3c2249c934ff60953e3775566d66e8e9b30e4e473' + 'ba5d86d2391e6dfdc6a2994e486f9c5ecd1934438815f4dc01c0633192d74a2fa2cabe647574052c4a87203e0c12b9bb8c38851975c36f19d113787dae3681ee') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + sed -i 's/AC_DEFUN(AM_PATH_LIBXOSD,/AC_DEFUN([AM_PATH_LIBXOSD],/' "$pkgdir/usr/share/aclocal/libxosd.m4" + install -Dm644 COPYING -t "${pkgdir}"/usr/share/licenses/${pkgname} +} diff --git a/xournal/PKGBUILD b/xournal/PKGBUILD new file mode 100644 index 0000000..6aa66f3 --- /dev/null +++ b/xournal/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Jesus E. + +pkgname=xournal +pkgver=0.4.8.2016 +_debver=$pkgver +_debrel=7 +pkgrel=1 +pkgdesc="Notetaking and sketching application" +url='http://xournal.sourceforge.net/' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('libgnomecanvas' 'poppler-glib' 'shared-mime-info' 'desktop-file-utils' 'hicolor-icon-theme') +makedepends=('quilt') +optdepends=('ghostscript: import PS/PDF files as bitmap backgrounds') +source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xournal/xournal_0.4.8.2016-7.debian.tar.xz") +sha512sums=('1426d5c9ba3486fbe342d49fc19fcc162965cd6a7b7754f79665e43fe0e60e6f42f61969405ace78fdaa7b99cbb3d4b07b7fb5df246d68a329b52084b6eec76e' + '16172d53036db0168e13b8c140783baf47c0f6675a778af655884f3e31ba0c356e969115362f380cd26700690b6e07a79d96549602ec306b1f262d43ef39946b') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install desktop-install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xournalpp/PKGBUILD b/xournalpp/PKGBUILD new file mode 100644 index 0000000..7748058 --- /dev/null +++ b/xournalpp/PKGBUILD @@ -0,0 +1,25 @@ +# Maintainer: Jesus E. + +pkgname=xournalpp +pkgver=1.1.0 +pkgrel=1 +pkgdesc="Handwriting notetaking software with PDF annotation support" +url='https://github.com/xournalpp/xournalpp' +license=('GPL-2') +arch=('i686' 'x86_64') +depends=('gtk' 'poppler-glib' 'libxml2' 'portaudio' 'libsndfile' 'lua' 'libzip') +makedepends=('cmake' 'doxygen' 'graphviz') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/xournalpp/xournalpp/archive/refs/tags/${pkgver}.tar.gz") +sha512sums=('823d2561caa45bd7deb994bd71df0df35b6f279e04c4e8bb5d3f05f2fff2a68af8ea572f42095a9f28da5b2fdbe6b9b465aeca758d36ab29a24c62ea68c99c56') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + cmake -DCMAKE_INSTALL_PREFIX=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xpad/PKGBUILD b/xpad/PKGBUILD new file mode 100644 index 0000000..ce258cd --- /dev/null +++ b/xpad/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=xpad +pkgver=4.8.0 +pkgrel=1 +pkgdesc="Stickies-like notes program" +arch=('i686' 'x86_64') +depends=('gtk' 'libsm' 'librsvg-legacy' 'gtksourceview3') +makedepends=('intltool' 'gettext-tiny') +url='https://launchpad.net/xpad' +license=('GPL-2') +source=("https://launchpad.net/${pkgname}/trunk/${pkgver}/+download/${pkgname}-${pkgver}.tar.bz2" + "fix-build.patch") +sha512sums=('286afe23ace31e983c7db44231600dfb5c9ef2faa82b5560df3e1ab0b64deba2bee52cf805b728b12705b899ac3f3bc9715bc77d0d7e01dd692b9802edd358fe' + '6074b896b6efed02b4bb4baf2bfdd40486b66f260a68c44510291d78c81969ac240239cccbccef19c1531ca7953a75472fcd5bf73ee2cb99d89335dfa73218ed') + +prepare() { + cd "$srcdir"/$pkgname-$pkgver + patch -Np1 -i ${srcdir}/fix-build.patch + autoreconf -vfi +} + +build() { + cd "$srcdir"/$pkgname-$pkgver + ./configure \ + --prefix=/usr + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + make DESTDIR="$pkgdir" install helpdir=/usr/share/xpad/help + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/xpad/fix-build.patch b/xpad/fix-build.patch new file mode 100644 index 0000000..55101c8 --- /dev/null +++ b/xpad/fix-build.patch @@ -0,0 +1,11 @@ +--- a/configure.ac 2016-04-10 13:55:43.000000000 +0200 ++++ b/configure.ac 2025-06-09 04:20:19.779472773 +0200 +@@ -39,7 +39,7 @@ + AC_SUBST(PIXBUF_LIBS) + AC_SUBST(PIXBUF_CFLAGS) + +-PKG_CHECK_MODULES(ATK, atk >= 2.8 atk-bridge-2.0) ++PKG_CHECK_MODULES(ATK, atk >= 2.8) + AC_SUBST(ATK_LIBS) + AC_SUBST(ATK_CFLAGS) + diff --git a/xplc/PKGBUILD b/xplc/PKGBUILD new file mode 100644 index 0000000..1bc46a3 --- /dev/null +++ b/xplc/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Jesus E. + +pkgname=xplc +pkgver=0.3.13 +_debver=$pkgver +_debrel=12 +pkgrel=2 +pkgdesc="Cross-Platform Lightweight Components" +arch=('i686' 'x86_64') +url="http://xplc.sourceforge.net" +license=('LGPL-2.1') +depends=('gcc-libs') +makedepends=('quilt') +source=("https://downloads.sourceforge.net/${pkgname}/$pkgname-$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xplc/xplc_$_debver-$_debrel.debian.tar.xz") +sha512sums=('6969ed16c282589ddc285678e1c02016810f83c4c0fea373d8b7a72c97474e6cc21ca3f8f7a7a6aae814037dfae51c3a41bd39f13a67445552b6a7c1b698195d' + '51f7e115c376e7ebcc7b504bbbe9957d4ce3fee4aa9f905f5f295328ac0dad2cac7d07472ce29fa1d3f7e48d71627441387e2bc510a4cd5cd51c0a31111e11f3') +options=('!buildflags') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian/patches ./debian + rm -rf "$srcdir"/debian + + quilt push -av + fi +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --without-libuuid + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install + + mv "$pkgdir/usr/share/man/man1/"{uuidgen.1,uuidcdef.1} + rm -f "$pkgdir/usr/bin/uuidgen" + + install -Dm644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/xsane/PKGBUILD b/xsane/PKGBUILD new file mode 100644 index 0000000..74c070e --- /dev/null +++ b/xsane/PKGBUILD @@ -0,0 +1,77 @@ +# Maintainer: Jesus E. + +pkgbase=xsane +pkgname=('xsane' 'xsane-gimp') +pkgver=0.999 +_debver=0.999 +_debrel=10 +pkgrel=2 +arch=('i686' 'x86_64') +url='https://gitlab.com/sane-project/frontend/xsane' +license=('GPL-2') +makedepends=('gtk2' 'lcms2' 'sane' 'zlib' 'libjpeg-turbo' 'gimp' 'quilt') +source=(https://deb.debian.org/debian/pool/main/x/xsane/xsane_${pkgver}.orig.tar.gz + https://deb.debian.org/debian/pool/main/x/xsane/xsane_${_debver}-${_debrel}.debian.tar.xz) +sha512sums=('73ec961fce1a86b5d6f5bac0995d222785eb4b077dc8e72492b092d2bf4500455426e80e4d27233721cd38ec84f77fb9f92190a6afe45bdaf7ffd1ee50b431ed' + 'ebb0fbdb76bc3feaefebc779a1d18cbb50f4cd33562b90915aac00a8c95a28c39242b6aeb45705b7c7f4111946d0866b5fc6e611e928ef83578bb51eb5461ad9') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi + + sed -i -e 's:png_ptr->jmpbuf:png_jmpbuf(png_ptr):' src/xsane-save.c +} + +build() { + cd "$srcdir/$pkgbase-$pkgver" + + ./configure --prefix=/usr \ + --mandir=/usr/share/man \ + --enable-gimp + make + mv src/xsane src/xsane-gimp + + # build again with gimp disabled + make clean + ./configure --prefix=/usr --mandir=/usr/share/man --disable-gimp + make +} + +package_xsane() { + pkgdesc='A GTK-based X11 frontend for SANE and plugin for Gimp.' + install=$pkgname.install + + depends=('gtk2' 'lcms2' 'sane' 'zlib' 'libjpeg-turbo') + optdepends=('xsane-gimp: for gimp plugin support') + + cd "$srcdir/$pkgbase-$pkgver" + make DESTDIR="$pkgdir" install + + # Install license + install -Dm644 xsane.COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} + +package_xsane-gimp() { + pkgdesc='XSane Gimp plugin' + depends=('xsane' 'gimp') + + cd "$srcdir/$pkgbase-$pkgver" + install -D -m755 src/xsane-gimp "${pkgdir}/usr/bin/xsane-gimp" + + # For making Gimp Plugin available + mkdir -p "$pkgdir/usr/lib/gimp/2.0/plug-ins" + ln -sf /usr/bin/xsane-gimp "$pkgdir"/usr/lib/gimp/2.0/plug-ins/xsane + + # Install license + install -Dm644 xsane.COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xsane/xsane.install b/xsane/xsane.install new file mode 100644 index 0000000..7e37651 --- /dev/null +++ b/xsane/xsane.install @@ -0,0 +1,17 @@ +# arg 1: the new package version +# arg 2: the old package version + +post_install() { + echo "NOTE:" + echo " If you experience any problems after installing xsane " + echo " it may help to remove the setup and preferences files" + echo " of xsane:" + echo "" + echo " \$ rm -rf ~/.sane/xsane" + echo "" + echo "Xsane only supports creation of pdf files in 8bit colour depth!" +} + +post_upgrade() { + post_install $1 +} diff --git a/xsel/PKGBUILD b/xsel/PKGBUILD new file mode 100644 index 0000000..083bdbb --- /dev/null +++ b/xsel/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=xsel +pkgver=1.2.0+git9bfc13d.20180109 +_gitver=1.2.0~git9bfc13d.20180109 +_debver=1.2.0+git9bfc13d.20180109 +_debrel=3 +pkgrel=1 +pkgdesc='XSel is a command-line program for getting and setting the contents of the X selection' +arch=('i686' 'x86_64') +url="http://www.vergenet.net/~conrad/software/xsel/" +license=('Expat') +depends=('libx11') +makedepends=('libxt' 'quilt') +source=("https://deb.debian.org/debian/pool/main/x/xsel/xsel_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xsel/xsel_${_debver}-${_debrel}.debian.tar.xz") +sha512sums=('9361d5c964b3424c839b96c003a726902eca5e96505a0d3a1a4750aec3778d859157cb0567455a62185b39731bbb9d5d0dc9c374a75ba8f7792e0e2c72022b73' + 'ebc2b4a8a21c731f8820651162756cb143656e9d179917a259b9e19d0760ffa2d016f052d3330c6895b5245140119fff414f2e7700c3c8486ad3a26165044e49') + +prepare() { + cd $pkgname-$_gitver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$_gitver + touch README + [ -x configure ] && ./configure --prefix=/usr || ./autogen.sh --prefix=/usr + make +} + +package() { + cd $pkgname-$_gitver + make DESTDIR="$pkgdir" install + mkdir -p "$pkgdir"/usr/share/licenses/xsel/ + install -Dm644 COPYING -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/xsettings-client/PKGBUILD b/xsettings-client/PKGBUILD new file mode 100644 index 0000000..241a38b --- /dev/null +++ b/xsettings-client/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Jesus E. + +pkgname=xsettings-client +pkgver=0.10 +pkgrel=1 +pkgdesc="Provides cross toolkit configuration settings such as theme parameters" +arch=('i686' 'x86_64') +license=('GPL-2') +url='http://matchbox-project.org' +depends=('libx11') +source=("https://downloads.yoctoproject.org/releases/matchbox/optional-dependencies/Xsettings-client-${pkgver}.tar.gz") +sha512sums=('051eaafa3410f82afea8f5909e5ef46548737f5b7bb3cb9c31262426ebc8e39ce4e84cfa76629cfb6b608fc764b2bbc3e7345a0e8e4257c7f6ea640c3b419634') + +build() { + cd "$srcdir"/Xsettings-client-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir"/Xsettings-client-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xterm/PKGBUILD b/xterm/PKGBUILD new file mode 100644 index 0000000..a355929 --- /dev/null +++ b/xterm/PKGBUILD @@ -0,0 +1,83 @@ +# Maintainer: Jesus E. + +pkgname=xterm +pkgver=362 +_debver=362 +_debrel=1 +pkgrel=1 +pkgdesc="X Terminal Emulator" +arch=('i686' 'x86_64') +url="https://invisible-island.net/xterm/" +license=('X11') +depends=('libxft' 'libxaw' 'ncurses' 'xenocara-luit' 'xenocara-xbitmaps' 'libutempter' 'libxkbfile') +makedepends=('quilt') +source=(https://invisible-mirror.net/archives/${pkgname}/${pkgname}-${pkgver}.tgz{,.asc} + https://deb.debian.org/debian/pool/main/x/xterm/xterm_$_debver-$_debrel.debian.tar.xz) +sha512sums=('fddfa689fe948245964b347f27c8c66b28eee82cb78062f0e296053a5db9a20f74786b34058512b109064628992db94e87bc12c79f2db4a50acb79e408173168' + 'SKIP' + '939ec913ecf06fcfd52bca594024e0339d3bfa1f0cd53428dd49a772d3f859dd46eaa191f7b58019518593c5d100ee7bc1afa32802fed4d4c53c2183bf4f5b0d') +validpgpkeys=('C52048C0C0748FEE227D47A2702353E0F7E48EDB') # "Thomas Dickey " + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/900_debian_xterm.diff || true + rm -v debian/patches/902_windowops.diff || true + rm -v debian/patches/904_fontops.diff || true + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --libdir=/etc \ + --mandir=/usr/share/man \ + --with-app-defaults=/usr/share/X11/app-defaults/ \ + --with-x \ + --disable-full-tgetent \ + --disable-imake \ + --enable-ansi-color \ + --enable-88-color \ + --enable-256-color \ + --enable-broken-osc \ + --enable-broken-st \ + --enable-load-vt-fonts \ + --enable-i18n \ + --enable-wide-chars \ + --enable-doublechars \ + --enable-warnings \ + --enable-tcap-query \ + --enable-logging \ + --enable-dabbrev \ + --enable-freetype \ + --enable-luit \ + --enable-mini-luit \ + --enable-narrowproto \ + --enable-exec-xterm \ + --enable-sixel-graphics \ + --enable-regis-graphics \ + --with-tty-group=tty \ + --with-utempter + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + chmod 0755 "${pkgdir}/usr/bin/xterm" + + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/" + install -m755 -d ${pkgdir}/usr/share/applications + install -m644 ${srcdir}/${pkgname}-${pkgver}/{xterm,uxterm}.desktop ${pkgdir}/usr/share/applications/ +} diff --git a/xtrlock/PKGBUILD b/xtrlock/PKGBUILD new file mode 100644 index 0000000..cf5a790 --- /dev/null +++ b/xtrlock/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Jesus E. + +pkgname=xtrlock +pkgver=2.15 +pkgrel=1 +pkgdesc='Minimal X display lock program' +url='https://packages.debian.org/sid/xtrlock' +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('glibc' 'libx11' 'libxcrypt' 'libxi' 'libxfixes') +source=(http://ftp.debian.org/debian/pool/main/x/xtrlock/xtrlock_${pkgver}.tar.xz) +sha512sums=('3047ca57f04c58426c55c68cf711dffe124ba6c221a3659112339b01ec0f1a411d965277bb366bd39d8155fd82f8e49cb00e728a911aa67b4e46fcfcc489f0b1') + +build() { + cd ${pkgname}-${pkgver} + make -f Makefile.noimake \ + CFLAGS="${CFLAGS} -DSHADOW_PWD -DMULTITOUCH" \ + LDLIBS="-lX11 -lcrypt -lXi" \ + xtrlock +} + +package() { + cd ${pkgname}-${pkgver} + install -Dm 4755 xtrlock -t "${pkgdir}/usr/bin" + install -Dm 644 xtrlock.man "${pkgdir}/usr/share/man/man1/xtrlock.1" + install -Dm644 GPL-3.txt -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/xvidcore/PKGBUILD b/xvidcore/PKGBUILD new file mode 100644 index 0000000..5b81ea8 --- /dev/null +++ b/xvidcore/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Jesus E. + +pkgname=xvidcore +pkgver=1.3.7 +pkgrel=1 +pkgdesc='XviD is a free MPEG-4 video codec' +arch=(i686 x86_64) +url=https://www.xvid.com/ +license=(GPL-2) +depends=(glibc) +makedepends=(nasm) +source=(https://downloads.xvid.com/downloads/xvidcore-${pkgver}.tar.gz) +sha512sums=('b66b1b0c9ddf4cc48fddd3afc1a8382b21e8bc7dc8a50220bcf1a86e6a2dab9abdcbd3dc64e27a054087f6770a4731468c301351d166c1a19e7f419b04ba7b9b') + +build() { + cd xvidcore/build/generic + + ./configure \ + --prefix=/usr + make +} + +package() { + cd xvidcore/build/generic + + make DESTDIR="${pkgdir}" install + install -Dm644 ../../LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE +} + +# vim: ts=2 sw=2 et: diff --git a/xvkbd/PKGBUILD b/xvkbd/PKGBUILD new file mode 100644 index 0000000..5332c7e --- /dev/null +++ b/xvkbd/PKGBUILD @@ -0,0 +1,63 @@ +# Maintainer: Jesus E. + +pkgname=xvkbd +pkgver=4.1 +_debver=$pkgver +_debrel=2 +pkgrel=1 +pkgdesc="Virtual (graphical) keyboard program for X Window System" +arch=('i686' 'x86_64') +url='http://t-sato.in.coocan.jp/xvkbd/' +license=('GPL-2') +depends=('libxmu' 'libxaw3d' 'libxt' 'libxtst' 'libxp' 'libxpm') +makedepends=('xorg-imake' 'quilt') +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/x/xvkbd/xvkbd_${pkgver}.orig.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xvkbd/xvkbd_4.1-2.debian.tar.xz" + "$pkgname.desktop" + "$pkgname.png") +sha512sums=('6a27a659bacc0f78d70c0afab7ae0f6301f0e7f0c9ed12c581fb4fd5040791536aed50c82ccbd703377244156aade80136567276193f2789a23f05c341b6c0e9' + '835a0f5ba1d60294d53f02ca7ff16863375cc95a8952895809f699962c085c67c56b1334c7720cf34873d7d746561cd887052cc71d4815d5f0798d33e973b440' + 'a0a9b121c6af26142d790de48863a4b71ea51749d1d23e5919b12f2823e73b271dc1eb52375fe08728b3fce839638b7f4bd0d625df52942146e9a7c0c1dfae5e' + '506c6812d91528bb76dd47fae28ded6a32c3f8af1329466b5550d8f8d6ea8f7777e4232e0f07d5d37de96a9d152e357176b0718434e9150aa5db67bb6f925540') + +prepare() { + cd $pkgname-$pkgver + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/replace-xterm-with-x-terminal-emulator.patch || true + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + xmkmf + sed -i 's|#include Bf6qB*b|!V}vbzc&+*#P!g~kxAfcV81 z(zGPHP+K7(Dz&mL7F$EwE-wp4s=*jmNr<7q%8RakP~)nEHkFbPEJUp@D~k=$t*F56 z6cZDbcXwv)z32Gh&fI;O+0Aqf@t@qBd+wb7^Zf6*=RE&2;+&&^mX?+TWuUXOGgG*) zTd<+lWYikOEfKh)9KM4uaq_I6uvszhI0xbo0a5u&0CC_P@mK=S_lg3Kmp>>V zo5L7`XhAED)*~*Z5iJ;F@UppL0psLH0DjR@JiMvxn<7HtZjRU z**9EIvaSwe47ptK43y%BLJXOKFrgAv#8*Ru7;QkpIv^rwt+`{tFZj6kV}7%A2}pj- zC>Y7#w&f`OQ+M*lF1~EjZI?)z(G2lMr(a6|Kv1K{niKl+<0AmS^T#? z=r8n68vx(hW$$&ryW{P5-kv%(JA~Hi6W_XJVNZ5~TfL{pXHU=Za_B=KJ0!bN<3vj5eblNXmO*hadPXoO>-@Zyur$KQ({D?KqhZWP=}692qJA0N?jX z#6zoe&V?cbguIxj5ghqrT-1bxr*L9Q#1r_wABjrMYk$Qdzs!eOm+t!WK#_oKF2@fm zD+z2s&dYJ=;2RwM&r!Y^7~tL|_fQe9Ad!euQ&ThKb>R>9FK27VW*jc6fX2i)f8oN= zVG9B4VB^Wl8aEA{u}DBJo5M^nc)sG5uH97ERI{?J6|FSq&Y$Cvb&oQ6ay^TGeK)-y z^^zILl4_iSASkV(Iu|~oc>=w?{&X3?&JlGYT2U*_yU-8pu3Ns%qqi9%Ye0x1KoXv?iXVV zaBe#yf7y35VBgUb-#K{^oZCL80OhGoLEOnDu;YFwJg0MN(^!LK=->121K$EI3TLk4 S40inh0000 + +pkgname=xwallpaper +pkgver=0.7.0 +pkgrel=2 +pkgdesc="Wallpaper setting utility for X" +url='https://github.com/stoeckmann/xwallpaper' +arch=('i686' 'x86_64') +license=('ISC') +depends=('pixman' 'libpng' 'libxpm' 'xcb-util' 'xcb-util-image' 'libjpeg-turbo' 'libseccomp') +source=("https://github.com/stoeckmann/xwallpaper/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('b8b01a1c0d5768beba9e57c376b89f5d777360ba27edd20d0fab0bb018f25a11cb3bcd1aa36099dd1bd43f689d470aa07c0c0a52ab782ea0cf12ba13ba4cc818') + +prepare() { + cd ${pkgname}-${pkgver} + autoreconf -fiv +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --with-zshcompletiondir=/usr/share/zsh/site-functions + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/xxhash/PKGBUILD b/xxhash/PKGBUILD new file mode 100644 index 0000000..d32edd4 --- /dev/null +++ b/xxhash/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=xxhash +pkgver=0.8.0 +_debver=0.8.0 +_debrel=1 +pkgrel=1 +pkgdesc='Extremely fast non-cryptographic hash algorithm' +arch=('i686' 'x86_64') +url='https://cyan4973.github.io/xxHash/' +license=('GPL-2' 'Simplified-BSD') +makedepends=('quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/Cyan4973/xxHash/archive/v$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/x/xxhash/xxhash_$_debver-$_debrel.debian.tar.xz") +sha512sums=('c3973b3c98bad44e1d8687ab4f9461aecd1c071bb3d320537a4c50fb7301edd13e990bab48cc6e5ca30536a814c8fa8cac24ceb1803a7e8eca30ef73d449373e' + '48166f498a5cc85c841a8fa097d939e2a3341ffda170468cd3c9fcc08bbcd781a9b899a51f4a2a9a6355e2841db1fada5f695798a3d84f78e1590d503dbf9be8') + +prepare() { + cd "$srcdir/xxHash-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply and seems unimportant + rm -v debian/patches/reproducible-build.patch || true + + quilt push -av + fi +} + +build() { + cd "$srcdir/xxHash-$pkgver" + make PREFIX=/usr +} + +package() { + cd "$srcdir/xxHash-$pkgver" + make PREFIX=/usr DESTDIR="$pkgdir" install + install -d "$pkgdir/usr/share/licenses/$pkgname" + install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim: ts=2 sw=2 et: diff --git a/yad/PKGBUILD b/yad/PKGBUILD new file mode 100644 index 0000000..5220abf --- /dev/null +++ b/yad/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Jesus E. + +pkgname=yad +pkgver=14.1 +pkgrel=1 +pkgdesc="Display graphical dialogs from shell scripts or command line" +url='https://github.com/v1cont/yad' +arch=('i686' 'x86_64') +license=('GPL-3') +depends=('gtk' 'webkitgtk' 'gtksourceview3') +makedepends=('autoconf' 'automake' 'intltool' 'gettext-tiny') +source=("https://github.com/v1cont/yad/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.xz") +sha512sums=('c2949846d9d6c34bc0c8f482a5b30fb978865308bcafe656694d8eb1bb903e9af76f9d3cdd748ecb0dac389e1a0204a15b10ab29b99262cdeffc44ed16ce902e') + +prepare() { + cd ${pkgname}-${pkgver} + + autoreconf -vfi + intltoolize +} + +build() { + cd ${pkgname}-${pkgver} + + export GLIB_COMPILE_SCHEMAS=/usr/bin/glib-compile-schemas + ./configure \ + --prefix=/usr \ + --enable-icon-browser \ + --enable-html \ + --enable-gio \ + --enable-sourceview + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/yajl/PKGBUILD b/yajl/PKGBUILD new file mode 100644 index 0000000..acc3cce --- /dev/null +++ b/yajl/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Jesus E. + +pkgname=yajl +pkgver=2.1.0 +_debver=$pkgver +_debrel=3 +pkgrel=3 +pkgdesc="Yet Another JSON Library" +arch=('i686' 'x86_64') +url='https://github.com/lloyd/yajl' +license=('ISC') +makedepends=('cmake' 'doxygen' 'quilt') +source=("$pkgname-$pkgver.tar.gz::https://github.com/lloyd/yajl/archive/refs/tags/$pkgver.tar.gz" + "https://deb.debian.org/debian/pool/main/y/yajl/yajl_$_debver-$_debrel.debian.tar.xz") +sha512sums=('9e786d080803df80ec03a9c2f447501e6e8e433a6baf636824bc1d50ecf4f5f80d7dfb1d47958aeb0a30fe459bd0ef033d41bc6a79e1dc6e6b5eade930b19b02' + '4e9b3751a6aa036524da028d70f1aa57b7bde2d090b039cc091374b668ffca3dbc84ec82e7ce42edfb3eff6d7cb998f3a10b9a3e553267c7a6d46c72135592ed') + +prepare() { + cd "$pkgname-$pkgver" + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + # Doesn't apply + rm -v debian/patches/multiarch.patch || true + + quilt push -av + fi +} + +build() { + cmake \ + -S $pkgname-$pkgver \ + -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -Wno-dev + make -C build +} + +package() { + make DESTDIR="$pkgdir" -C build install + install -Dm644 "$srcdir/$pkgname-$pkgver/COPYING" -t "$pkgdir/usr/share/licenses/${pkgname}" +} diff --git a/yaml-cpp/PKGBUILD b/yaml-cpp/PKGBUILD new file mode 100644 index 0000000..c95c895 --- /dev/null +++ b/yaml-cpp/PKGBUILD @@ -0,0 +1,36 @@ +# Maintainer: Jesus E. + +pkgname=yaml-cpp +pkgver=0.6.3 +pkgrel=2 +pkgdesc="YAML parser and emitter in C++, written around the YAML 1.2 spec" +url="https://github.com/jbeder/yaml-cpp" +arch=('i686' 'x86_64') +license=('Expat') +depends=('gcc-libs') +makedepends=('cmake') +source=("https://github.com/jbeder/$pkgname/archive/$pkgname-${pkgver}.tar.gz") +sha512sums=('68b9ce987cabc1dec79382f922de20cc2c222cb9c090ecb93dc686b048da5c917facf4fce6d8f72feea44b61e5a6770ed3b0c199c4cd4e6bde5b6245c09f8e49') + +build() { + cmake -B build -S ${pkgname}-${pkgname}-${pkgver} \ + -D BUILD_SHARED_LIBS=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D YAML_BUILD_SHARED_LIBS=ON + make VERBOSE=1 -C build +} + +check() { + make VERBOSE=1 -C build test + build/test/run-tests +} + +package() { + make DESTDIR="$pkgdir" -C build install + + cd "${pkgname}-${pkgname}-${pkgver}" + install -vDm 644 {CONTRIBUTING,README}.md \ + -t "$pkgdir/usr/share/doc/$pkgname" + install -vDm 644 LICENSE -t "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/yara/PKGBUILD b/yara/PKGBUILD new file mode 100644 index 0000000..d335ba3 --- /dev/null +++ b/yara/PKGBUILD @@ -0,0 +1,34 @@ +# Maintainer: Jesus E. + +pkgname=yara +pkgver=4.2.1 +pkgrel=1 +pkgdesc="Tool aimed at helping malware researchers to identify and classify malware samples" +url='https://github.com/VirusTotal/yara' +arch=('i686' 'x86_64') +license=('Modified-BSD') +depends=('libressl' 'file') +source=("https://github.com/VirusTotal/${pkgname}/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha512sums=('036a35d713647b23998135da0d27c13a8876aa44e18e3c9dc99fa425273d7c4a953cbdc78f413f29e8bf818d84b340d0719e241d2a83b7165a16d97e952c45b0') + +prepare() { + cd ${pkgname}-${pkgver} + autoreconf -fiv +} + +build() { + cd ${pkgname}-${pkgver} + ./configure \ + --prefix=/usr \ + --with-crypto \ + --enable-magic + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + cp -r docs "${pkgdir}/usr/share/doc/${pkgname}" +} diff --git a/yash/PKGBUILD b/yash/PKGBUILD new file mode 100644 index 0000000..d681134 --- /dev/null +++ b/yash/PKGBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jesus E. + +pkgname=yash +pkgver=2.52 +pkgrel=2 +pkgdesc="Yet Another SHell is a POSIX-compliant command line shell" +arch=('i686' 'x86_64') +url='https://magicant.github.io/yash/' +license=('GPL-2') +depends=('ncurses') +makedepends=('asciidoc' 'ed') +install=${pkgname}.install +source=("${pkgname}-${pkgver}.tar.gz::https://deb.debian.org/debian/pool/main/y/yash/yash_${pkgver}.orig.tar.gz" + "remove-mofiles.patch") +sha512sums=('f773203f4b40bd2ffa949669b2a40b8f9219dbef9cd781622ef63d85d04f7bd8dff7c00f2b32a48838ef8865c3e56536c506bbabd2a9015f277924e0539df8d1' + '56e7975fad00b867432e197f34d02664e203800d41be19f08a21b52f466668a8aa4d62e67c4f7f936fdf60a0b8f47b30d2c678a9b23215955da1c0f311f37ba7') + +prepare() { + cd "${pkgname}-${pkgver}" + + rm -rf ./po + patch -Np1 -i ${srcdir}/remove-mofiles.patch +} + +build() { + cd "${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --enable-array \ + --enable-dirstack \ + --enable-double-bracket \ + --enable-help \ + --enable-history \ + --enable-lineedit \ + --enable-nls \ + --enable-printf \ + --enable-socket \ + --enable-test \ + --enable-ulimit + make +} + +package() { + cd "${pkgname}-${pkgver}" + + make install DESTDIR="${pkgdir}" + install -Dm0644 doc/*.{css,html} -t "${pkgdir}/usr/share/doc/${pkgname}/" + install -Dm0644 doc/ja/*.{css,html} -t "${pkgdir}/usr/share/doc/${pkgname}/ja/" + install -Dm644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} diff --git a/yash/remove-mofiles.patch b/yash/remove-mofiles.patch new file mode 100644 index 0000000..6b84470 --- /dev/null +++ b/yash/remove-mofiles.patch @@ -0,0 +1,83 @@ +--- a/Makefile.in 2021-10-11 15:58:11.000000000 +0200 ++++ b/Makefile.in 2024-04-23 23:36:34.920120424 +0200 +@@ -63,7 +63,7 @@ + default_loadpath = @default_loadpath@ + enable_nls = @enable_nls@ + +-all: $(TARGET) share/config tester mofiles docs ++all: $(TARGET) share/config tester docs + + .c.o: + @rm -f $@ +@@ -137,14 +137,12 @@ + echo $(INSTALL_DATA) share/$$file $(DESTDIR)$(yashdatadir)/$$file || true; \ + $(INSTALL_DATA) share/$$file $(DESTDIR)$(yashdatadir)/$$file; \ + done +- @+if $(enable_nls); then (cd po && $(MAKE) $@); fi + @+(cd doc && $(MAKE) install-rec) + install-html: + @+(cd doc && $(MAKE) $@-rec) + installdirs: installdirs-binary installdirs-data + installdirs-binary: $(INSTALLBINDIRS) + installdirs-data: installdirs-data-main +- @+if $(enable_nls); then (cd po && $(MAKE) $@); fi + @+(cd doc && $(MAKE) installdirs-rec) + installdirs-data-main: $(INSTALLDATADIRS) + installdirs-html: $(DESTDIR)$(htmldir) +@@ -162,7 +160,6 @@ + -rmdir $(DESTDIR)$(yashdatadir)/completion + -rmdir $(DESTDIR)$(yashdatadir)/initialization + -rmdir $(DESTDIR)$(yashdatadir) +- @+if $(enable_nls); then (cd po && $(MAKE) $@); fi + @+(cd doc && $(MAKE) $@-rec) + + DISTDIR = $(TARGET)-$(VERSION) +@@ -171,7 +168,6 @@ + DIST_TARGETS = dist-gzip dist-xz + RM_DISTDIR = rm -rf $(DISTDIR) $(DISTDIR).tar + $(DISTDIR): _PHONY +- @+(cd po && $(MAKE) update-po) # must be done first + rm -fr $@ + mkdir -m 755 $@ + @+umask 022; \ +@@ -266,7 +262,6 @@ + -@+(cd builtins && $(MAKE) mostlyclean) + -@+(cd doc && $(MAKE) mostlyclean) + -@+(cd lineedit && $(MAKE) mostlyclean) +- -@+(cd po && $(MAKE) mostlyclean) + -@+(cd tests && $(MAKE) mostlyclean) + _mostlyclean: + -rm -rf $(OBJS) $(BYPRODUCTS) $(DISTDIR) +@@ -274,7 +269,6 @@ + -@+(cd builtins && $(MAKE) clean) + -@+(cd doc && $(MAKE) clean) + -@+(cd lineedit && $(MAKE) clean) +- -@+(cd po && $(MAKE) clean) + -@+(cd tests && $(MAKE) clean) + _clean: _mostlyclean + -rm -rf $(TARGET) share/config $(DISTS) +@@ -282,7 +276,6 @@ + -@+(cd builtins && $(MAKE) distclean) + -@+(cd doc && $(MAKE) distclean) + -@+(cd lineedit && $(MAKE) distclean) +- -@+(cd po && $(MAKE) distclean) + -@+(cd tests && $(MAKE) distclean) + -@+$(MAKE) _distclean + _distclean: _clean +@@ -293,7 +286,6 @@ + -@+(cd builtins && $(MAKE) maintainer-clean) + -@+(cd doc && $(MAKE) maintainer-clean) + -@+(cd lineedit && $(MAKE) maintainer-clean) +- -@+(cd po && $(MAKE) maintainer-clean) + -@+(cd tests && $(MAKE) maintainer-clean) + -@+$(MAKE) _distclean + -rm -rf $(SOURCES:.c=.d) +@@ -305,7 +297,7 @@ + config.status: configure + $(SHELL) config.status --recheck + +-.PHONY: all test tests check tester mofiles docs man html install install-strip install-binary install-binary-strip install-data install-html installdirs installdirs-binary installdirs-data installdirs-data-main installdirs-html uninstall uninstall-binary uninstall-data dist dist-tarZ dist-gzip dist-bzip2 dist-xz dist-zstd dist-shar dist-zip dist-all distcheck distfiles copy-distfiles makedeps cscope mostlyclean _mostlyclean clean _clean distclean _distclean maintainer-clean ++.PHONY: all test tests check tester docs man html install install-strip install-binary install-binary-strip install-data install-html installdirs installdirs-binary installdirs-data installdirs-data-main installdirs-html uninstall uninstall-binary uninstall-data dist dist-tarZ dist-gzip dist-bzip2 dist-xz dist-zstd dist-shar dist-zip dist-all distcheck distfiles copy-distfiles makedeps cscope mostlyclean _mostlyclean clean _clean distclean _distclean maintainer-clean + _PHONY: + + @MAKE_INCLUDE@ alias.d diff --git a/yash/yash.install b/yash/yash.install new file mode 100644 index 0000000..6e1c517 --- /dev/null +++ b/yash/yash.install @@ -0,0 +1,11 @@ +post_install() { + grep -qe '^/usr/bin/yash$' etc/shells || echo '/usr/bin/yash' >> etc/shells +} + +post_upgrade() { + post_install +} + +pre_remove() { + sed -i -r '/^(\/usr)?\/bin\/yash$/d' etc/shells +} diff --git a/yasm/PKGBUILD b/yasm/PKGBUILD new file mode 100644 index 0000000..7c3aaf1 --- /dev/null +++ b/yasm/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Jesus E. + +pkgname=yasm +pkgver=1.3.0 +_debver=1.3.0 +_debrel=2 +pkgrel=2 +pkgdesc="A rewrite of NASM to allow for multiple syntax supported (NASM, TASM, GAS, etc.)" +arch=('i686' 'x86_64') +url="http://www.tortall.net/projects/yasm/" +license=('LGPL-2') +depends=('glibc') +makedepends=('quilt') +options=('staticlibs') +source=(http://www.tortall.net/projects/yasm/releases/${pkgname}-${pkgver}.tar.gz + https://deb.debian.org/debian/pool/main/y/yasm/yasm_$_debver-$_debrel.debian.tar.xz) +sha512sums=('572d3b45568b10f58e48f1188c2d6bcbdd16429c8afaccc8c6d37859b45635e106885d679e41d0bee78c23822108c7ae75aa7475eed5ba58057e0a6fe1b68645' + '14df8de5cc7752c7ab250d3fe4c0c93a0b0be9e3685c111eebe8a8a675a5cdef6c1efd8bf9c9144ef84234b6ca5072c2cec3cb18c18bbbbf5435059cd590e700') + +prepare() { + cd ${pkgname}-${pkgver} + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + make DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" + install -Dm644 GNU_LGPL-2.0 "${pkgdir}/usr/share/licenses/${pkgname}/GNU_LGPL-2.0" +} diff --git a/yelp-tools/PKGBUILD b/yelp-tools/PKGBUILD new file mode 100644 index 0000000..4bf29ff --- /dev/null +++ b/yelp-tools/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Jesus E. + +pkgname=yelp-tools +pkgver=3.38.0 +_debver=3.38.0 +_debrel=1 +pkgrel=1 +pkgdesc='Collection of tools for building and converting documentation' +url='https://gitlab.gnome.org/GNOME/yelp-tools' +arch=('any') +depends=('yelp-xsl' 'libxslt' 'libxml2' 'itstool' 'docbook-xsl' 'mallard-ducktype') +makedepends=('quilt') +license=('GPL-2') +source=("https://deb.debian.org/debian/pool/main/y/yelp-tools/yelp-tools_${pkgver}.orig.tar.xz" + "https://deb.debian.org/debian/pool/main/y/yelp-tools/yelp-tools_$_debver-$_debrel.debian.tar.xz") +sha512sums=('2042e37f8efbe9974f5a507910393b837a0b9154beb918a5e8d145205fb519c8244bb405cf328ff5014287086be5b6d33ad631951bd0e950c2ad9efc60065d59' + '170a700985227c4559d95c89b0fbe78ab17ca844c0a01424fc19810eb2d00fc9b8e19224e642e095e3a654cb633a19fff521678535420358467fd409e7668a18') + +prepare() { + cd $pkgname-$pkgver + + if [[ ${pkgver%.*} = ${_debver%.*} ]]; then + # Debian patches + export QUILT_PATCHES=debian/patches + export QUILT_REFRESH_ARGS='-p ab --no-timestamps --no-index' + export QUILT_DIFF_ARGS='--no-timestamps' + + mv "$srcdir"/debian . + + quilt push -av + fi +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING.GPL -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/yelp-xsl/PKGBUILD b/yelp-xsl/PKGBUILD new file mode 100644 index 0000000..b163dbd --- /dev/null +++ b/yelp-xsl/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Jesus E. + +pkgname=yelp-xsl +pkgver=3.38.3 +pkgrel=2 +pkgdesc='Document transformations from Yelp' +url='https://gitlab.gnome.org/GNOME/yelp-xsl' +arch=('any') +license=('GPL-2') +makedepends=('itstool') +source=("https://deb.debian.org/debian/pool/main/y/yelp-xsl/yelp-xsl_3.38.3.orig.tar.xz") +sha512sums=('17e66f744de0f88462fe8c1e1d484ead76551c6c0e8d7f9cdf04e670e50829e5258a8190cf58e0723eeeb3cd7fc44004ee5dfb53b5dd6f7dac52d2b8d6cfbaa2') + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + install -Dm644 COPYING.GPL -t "${pkgdir}/usr/share/licenses/$pkgname" +} diff --git a/yelp/CVE-2025-3155.patch b/yelp/CVE-2025-3155.patch new file mode 100644 index 0000000..3cdcfae --- /dev/null +++ b/yelp/CVE-2025-3155.patch @@ -0,0 +1,101 @@ +diff --git a/data/xslt/mal2html.xsl.in b/data/xslt/mal2html.xsl.in +index 9e44b734..0a74da55 100644 +--- a/data/xslt/mal2html.xsl.in ++++ b/data/xslt/mal2html.xsl.in +@@ -19,6 +19,11 @@ + + + ++ ++ ++ ++ ++ + + + +diff --git a/data/xslt/man2html.xsl.in b/data/xslt/man2html.xsl.in +index 676ce3eb..56bc1f5c 100644 +--- a/data/xslt/man2html.xsl.in ++++ b/data/xslt/man2html.xsl.in +@@ -131,7 +131,7 @@ + the correct styling and a single character which we measure the + width of and update each sheet as required. + --> +-